@sapui5/sap.fe.macros 1.139.0 → 1.139.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 +1 -1
- package/src/sap/fe/macros/Chart.tsx +1 -1
- package/src/sap/fe/macros/RichTextEditor.js +1 -2
- package/src/sap/fe/macros/RichTextEditor.tsx +0 -1
- package/src/sap/fe/macros/ValueHelp.js +4 -28
- package/src/sap/fe/macros/ValueHelp.tsx +2 -42
- package/src/sap/fe/macros/chart/MdcChartTemplate.js +2 -4
- package/src/sap/fe/macros/chart/MdcChartTemplate.tsx +1 -4
- 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/FilterBar.js +39 -3
- package/src/sap/fe/macros/controls/FilterBar.ts +42 -1
- package/src/sap/fe/macros/controls/Section.js +3 -2
- package/src/sap/fe/macros/controls/Section.ts +2 -1
- package/src/sap/fe/macros/draftIndicator/DraftIndicator.js +2 -2
- package/src/sap/fe/macros/draftIndicator/DraftIndicator.tsx +1 -1
- package/src/sap/fe/macros/field/FieldBaseDelegate.js +13 -7
- package/src/sap/fe/macros/field/FieldBaseDelegate.ts +12 -8
- package/src/sap/fe/macros/field/FieldRuntime.js +38 -8
- package/src/sap/fe/macros/field/FieldRuntime.ts +65 -7
- package/src/sap/fe/macros/filter/FilterUtils.js +7 -1
- package/src/sap/fe/macros/filter/FilterUtils.ts +7 -0
- package/src/sap/fe/macros/form/Form.block.js +6 -2
- package/src/sap/fe/macros/form/Form.block.ts +4 -1
- package/src/sap/fe/macros/form/FormDelegate.js +20 -1
- package/src/sap/fe/macros/form/FormDelegate.ts +25 -0
- package/src/sap/fe/macros/internal/field/DisplayStyle.js +4 -2
- package/src/sap/fe/macros/internal/field/DisplayStyle.tsx +3 -1
- package/src/sap/fe/macros/internal/valuehelp/TableDelegate.js +4 -4
- package/src/sap/fe/macros/internal/valuehelp/TableDelegate.ts +3 -3
- package/src/sap/fe/macros/internal/valuehelp/ValueListHelper.js +5 -1
- package/src/sap/fe/macros/internal/valuehelp/ValueListHelper.ts +4 -0
- package/src/sap/fe/macros/library.js +1 -1
- package/src/sap/fe/macros/mdc/adapter/StateHelper.js +5 -5
- package/src/sap/fe/macros/mdc/adapter/StateHelper.ts +5 -4
- package/src/sap/fe/macros/table/MdcTableTemplate.js +3 -1
- package/src/sap/fe/macros/table/MdcTableTemplate.tsx +2 -1
- package/src/sap/fe/macros/table/Table.js +7 -1
- package/src/sap/fe/macros/table/Table.tsx +7 -1
- package/src/sap/fe/macros/table/TableAPI.js +8 -1
- package/src/sap/fe/macros/table/TableAPI.ts +15 -2
- package/src/sap/fe/macros/table/TableSizeHelper.js +3 -3
- package/src/sap/fe/macros/table/TableSizeHelper.ts +5 -2
- package/src/sap/fe/macros/table/TreeTable.js +7 -1
- package/src/sap/fe/macros/table/TreeTable.tsx +7 -1
- package/src/sap/fe/macros/table/delegates/TableDelegate.js +3 -2
- package/src/sap/fe/macros/table/delegates/TableDelegate.ts +10 -3
- 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 +8 -8
- package/src/sap/fe/macros/table/massEdit/MassEditDialogHelper.tsx +7 -6
- package/src/sap/fe/macros/valuehelp/ValueHelpDelegate.js +27 -3
- package/src/sap/fe/macros/valuehelp/ValueHelpDelegate.ts +28 -2
|
@@ -2,7 +2,7 @@
|
|
|
2
2
|
* SAP UI development toolkit for HTML5 (SAPUI5)
|
|
3
3
|
* (c) Copyright 2009-2025 SAP SE. All rights reserved
|
|
4
4
|
*/
|
|
5
|
-
sap.ui.define(["sap/base/Log", "sap/base/util/deepClone", "sap/fe/base/BindingToolkit", "sap/fe/core/CommonUtils", "sap/fe/core/controls/Any", "sap/fe/core/converters/MetaModelConverter", "sap/fe/core/converters/annotations/DataField", "sap/fe/core/helpers/ModelHelper", "sap/fe/core/helpers/TypeGuards", "sap/fe/core/templating/DataModelPathHelper", "sap/fe/core/templating/DisplayModeFormatter", "sap/fe/core/templating/FieldControlHelper", "sap/fe/core/templating/PropertyHelper", "sap/fe/core/templating/UIFormatters", "sap/fe/macros/field/FieldTemplating", "sap/m/MessageBox", "sap/ui/core/Component", "sap/ui/core/Lib", "sap/ui/mdc/enums/FieldEditMode", "sap/ui/model/BindingMode", "./MassEditDialog", "./library"], function (Log, deepClone, BindingToolkit, CommonUtils, Any, MetaModelConverter, DataField, ModelHelper, TypeGuards, DataModelPathHelper, DisplayModeFormatter, FieldControlHelper, PropertyHelper, UIFormatters, FieldTemplating, MessageBox, Component, Library, FieldEditMode, BindingMode, MassEditDialog, library) {
|
|
5
|
+
sap.ui.define(["sap/base/Log", "sap/base/util/deepClone", "sap/fe/base/BindingToolkit", "sap/fe/core/CommonUtils", "sap/fe/core/controls/Any", "sap/fe/core/converters/MetaModelConverter", "sap/fe/core/converters/annotations/DataField", "sap/fe/core/helpers/ModelHelper", "sap/fe/core/helpers/ResourceModelHelper", "sap/fe/core/helpers/TypeGuards", "sap/fe/core/templating/DataModelPathHelper", "sap/fe/core/templating/DisplayModeFormatter", "sap/fe/core/templating/FieldControlHelper", "sap/fe/core/templating/PropertyHelper", "sap/fe/core/templating/UIFormatters", "sap/fe/macros/field/FieldTemplating", "sap/m/MessageBox", "sap/ui/core/Component", "sap/ui/core/Lib", "sap/ui/mdc/enums/FieldEditMode", "sap/ui/model/BindingMode", "./MassEditDialog", "./library"], function (Log, deepClone, BindingToolkit, CommonUtils, Any, MetaModelConverter, DataField, ModelHelper, ResourceModelHelper, TypeGuards, DataModelPathHelper, DisplayModeFormatter, FieldControlHelper, PropertyHelper, UIFormatters, FieldTemplating, MessageBox, Component, Library, FieldEditMode, BindingMode, MassEditDialog, library) {
|
|
6
6
|
"use strict";
|
|
7
7
|
|
|
8
8
|
var _exports = {};
|
|
@@ -144,19 +144,19 @@ sap.ui.define(["sap/base/Log", "sap/base/util/deepClone", "sap/fe/base/BindingTo
|
|
|
144
144
|
* @returns A promise that resolves the contexts to be finally managed.
|
|
145
145
|
*/;
|
|
146
146
|
_proto.confirmSelection = async function confirmSelection(contexts, selectedContexts) {
|
|
147
|
-
const
|
|
147
|
+
const resourceModel = ResourceModelHelper.getResourceModel(this.table);
|
|
148
148
|
const coreResourceBundle = Library.getResourceBundleFor("sap.fe.core");
|
|
149
149
|
const updatableContexts = contexts.length;
|
|
150
150
|
return new Promise(resolve => {
|
|
151
151
|
try {
|
|
152
152
|
const tableAPI = this.table.getParent();
|
|
153
|
-
const editButton =
|
|
153
|
+
const editButton = resourceModel.getText("C_MASS_EDIT_CONFIRM_BUTTON_TEXT"),
|
|
154
154
|
cancelButton = coreResourceBundle.getText("C_COMMON_OBJECT_PAGE_CANCEL"),
|
|
155
155
|
metaModel = this.table.getModel().getMetaModel(),
|
|
156
|
-
typeName = this.getResourceText(this.headerInfo?.TypeName) ??
|
|
157
|
-
typeNamePlural = this.getResourceText(this.headerInfo?.TypeNamePlural) ??
|
|
156
|
+
typeName = this.getResourceText(this.headerInfo?.TypeName) ?? resourceModel.getText("C_MASS_EDIT_DIALOG_DEFAULT_TYPENAME"),
|
|
157
|
+
typeNamePlural = this.getResourceText(this.headerInfo?.TypeNamePlural) ?? resourceModel.getText("C_MASS_EDIT_DIALOG_DEFAULT_TYPENAME_PLURAL"),
|
|
158
158
|
messageDetail = ModelHelper.isDraftSupported(metaModel, this.table.data("targetCollectionPath")) && tableAPI.readOnly ? this.getMessageDetailForNonEditable(typeName, typeNamePlural) : "";
|
|
159
|
-
MessageBox.warning(
|
|
159
|
+
MessageBox.warning(resourceModel.getText("C_MASS_EDIT_CONFIRM_MESSAGE", [selectedContexts - updatableContexts, selectedContexts, updatableContexts, typeNamePlural]), {
|
|
160
160
|
details: messageDetail,
|
|
161
161
|
actions: [editButton, cancelButton],
|
|
162
162
|
emphasizedAction: editButton,
|
|
@@ -374,7 +374,7 @@ sap.ui.define(["sap/base/Log", "sap/base/util/deepClone", "sap/fe/base/BindingTo
|
|
|
374
374
|
descriptionPath: getAssociatedTextPropertyPath(propertyDataModel.targetObject),
|
|
375
375
|
textBinding: {
|
|
376
376
|
expression: getTextBinding(propertyDataModel, {
|
|
377
|
-
displayMode: getDisplayMode(targetProperty, propertyDataModel)
|
|
377
|
+
displayMode: getDisplayMode(targetProperty, propertyDataModel.targetEntityType)
|
|
378
378
|
}),
|
|
379
379
|
type: targetProperty.type === "Edm.DateTimeOffset" || targetProperty?.annotations?.Common?.IsTimezone ? "anyText" : "any"
|
|
380
380
|
},
|
|
@@ -701,4 +701,4 @@ sap.ui.define(["sap/base/Log", "sap/base/util/deepClone", "sap/fe/base/BindingTo
|
|
|
701
701
|
_exports = MassEditDialogHelper;
|
|
702
702
|
return _exports;
|
|
703
703
|
}, false);
|
|
704
|
-
//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJuYW1lcyI6WyJNYXNzRWRpdERpYWxvZ0hlbHBlciIsInByb3BzIiwibWF4QW5hbHl6ZWRSb3dzIiwiYW5hbHl6ZWRDb250ZXh0cyIsImZpZWxkUHJvcGVydGllcyIsImVudGl0eVR5cGVQYXRoIiwidGFibGUiLCJnZXRQYXJlbnQiLCJnZXRUYWJsZURlZmluaXRpb24iLCJhbm5vdGF0aW9uIiwiY29sbGVjdGlvbiIsIm1ldGFNb2RlbCIsImdldE1vZGVsIiwiZ2V0TWV0YU1vZGVsIiwibWFuaWZlc3RTZXR0aW5ncyIsImNvbnRyb2wiLCJtYXNzRWRpdCIsIm9uQ29udGV4dE1lbnUiLCJvbkRpYWxvZ0Nsb3NlIiwib25DbG9zZSIsInZpZXciLCJDb21tb25VdGlscyIsImdldFRhcmdldFZpZXciLCJjb250ZXh0cyIsImZldGNoQ29udGV4dHNGb3JFZGl0IiwiZGVncmFkZWRNb2RlIiwibGVuZ3RoIiwic2xpY2UiLCJpc0FkYXB0YXRpb24iLCJnZXRBcHBDb21wb25lbnQiLCJpc0FkYXB0YXRpb25Nb2RlIiwiaGVhZGVySW5mbyIsImdldEludm9sdmVkRGF0YU1vZGVsT2JqZWN0cyIsImdldENvbnRleHQiLCJ0YXJnZXRFbnRpdHlUeXBlIiwiYW5ub3RhdGlvbnMiLCJVSSIsIkhlYWRlckluZm8iLCJfZXhwb3J0cyIsIl9wcm90byIsInByb3RvdHlwZSIsIm9wZW4iLCJ0ZW1wbGF0ZUNvbXBvbmVudCIsIkNvbXBvbmVudCIsImdldE93bmVyQ29tcG9uZW50Rm9yIiwiaW50ZXJuYWxNb2RlbENvbnRleHQiLCJnZXRCaW5kaW5nQ29udGV4dCIsImludGVybmFsTW9kZWxQcm9wZXJ0eSIsInNlbGVjdGVkQ29udGV4dHMiLCJnZXRQcm9wZXJ0eSIsImdldEZpZWxkc1Byb3BlcnRpZXNGcm9tSW5mbyIsImdldEZpZWxkc0luZm8iLCJzb21lIiwiZmllbGQiLCJ2aXNpYmxlIiwibm9GaWVsZEluZm9ybWF0aW9uIiwiY29uZmlybVNlbGVjdGlvbiIsInJ1bkFzT3duZXIiLCJtYXNzRWRpdERpYWxvZyIsIk1hc3NFZGl0RGlhbG9nIiwiZGlhbG9nIiwiY3JlYXRlIiwiYXR0YWNoQmVmb3JlQ2xvc2UiLCJyZXF1aXJlZERhdGFQcm9taXNlIiwiZ2V0UmVxdWlyZWREYXRhUHJvbWlzZSIsImdldERhdGFBZnRlck9wZW5pbmdEaWFsb2ciLCJyZXNvbHZlIiwiZXJyb3IiLCJMb2ciLCJyZWplY3QiLCJ2aXNpYmxlRmllbGRzRnJvbU1hbmlmZXN0IiwidmlzaWJsZUZpZWxkcyIsInJlc291cmNlQnVuZGxlIiwiTGlicmFyeSIsImdldFJlc291cmNlQnVuZGxlRm9yIiwibWVzc2FnZSIsIm1lc3NhZ2VEZXRhaWwiLCJnZXRUZXh0IiwiZ2V0UmVzb3VyY2VUZXh0IiwiVHlwZU5hbWUiLCJyZWR1Y2UiLCJmaWVsZHMiLCJmaWVsZFByb3BlcnR5IiwiaW5jbHVkZXMiLCJwcm9wZXJ0eUluZm8iLCJyZWxhdGl2ZVBhdGgiLCJwdXNoIiwibGFiZWwiLCJqb2luIiwiTWVzc2FnZUJveCIsImluZm9ybWF0aW9uIiwiZGV0YWlscyIsImNvcmVSZXNvdXJjZUJ1bmRsZSIsInVwZGF0YWJsZUNvbnRleHRzIiwiUHJvbWlzZSIsInRhYmxlQVBJIiwiZWRpdEJ1dHRvbiIsImNhbmNlbEJ1dHRvbiIsInR5cGVOYW1lIiwidHlwZU5hbWVQbHVyYWwiLCJUeXBlTmFtZVBsdXJhbCIsIk1vZGVsSGVscGVyIiwiaXNEcmFmdFN1cHBvcnRlZCIsImRhdGEiLCJyZWFkT25seSIsImdldE1lc3NhZ2VEZXRhaWxGb3JOb25FZGl0YWJsZSIsIndhcm5pbmciLCJhY3Rpb25zIiwiZW1waGFzaXplZEFjdGlvbiIsInNlbGVjdGlvbiIsInVuZGVmaW5lZCIsImdldFRyYW5zbGF0ZWRUZXh0RnJvbUV4cEJpbmRpbmdTdHJpbmciLCJjb21waWxlRXhwcmVzc2lvbiIsImdldEV4cHJlc3Npb25Gcm9tQW5ub3RhdGlvbiIsInRvTG9jYWxlTG93ZXJDYXNlIiwiZ2V0RW50aXR5RmllbGRzSW5mbyIsImNvbHVtbnNEYXRhIiwiY29sdW1ucyIsInByb3BlcnRpZXNLZXlzIiwiU2V0IiwiY29sdW1uIiwidHlwZSIsIm5hbWUiLCJ0cmFuc2Zvcm1QYXRoc1RvSW5mbyIsImdldENvbHVtbnMiLCJtYXAiLCJnZXRQcm9wZXJ0eUtleSIsImlnbm9yZWRGaWVsZHMiLCJpZ25vcmVkRmllbGQiLCJkZWxldGUiLCJwcm9wZXJ0aWVzUGF0aHMiLCJBcnJheSIsImZyb20iLCJjb2x1bW5JbmZvcyIsInByb3BlcnR5UGF0aCIsImNvbHVtbkluZm8iLCJnZXRGaWVsZEluZm8iLCJlbnRpdHlQYXRoIiwiZ2V0TWV0YVBhdGgiLCJlbnRpdHlTZXREYXRhTW9kZWwiLCJyZWxhdGVkQ29sdW1uSW5mbyIsImZpbmQiLCJmaWVsZEluZm8iLCJhbm5vdGF0aW9uUGF0aCIsInByb3BlcnR5RGF0YU1vZGVsIiwiZW5oYW5jZURhdGFNb2RlbFBhdGgiLCJjb252ZXJ0ZWRBbm5vdGF0aW9uIiwiY29udmVydE1ldGFNb2RlbENvbnRleHQiLCJ0YXJnZXRQcm9wZXJ0eSIsImdldENvbXBsaWFudFByb3BlcnR5IiwiZW50aXR5UHJvcGVydGllcyIsImtleSIsInRhcmdldE9iamVjdCIsImlzUHJvcGVydHkiLCJJc0ltYWdlVVJMIiwiaXNEYXRhRmllbGRUeXBlcyIsImhhc093blByb3BlcnR5IiwiVmFsdWUiLCIkdGFyZ2V0IiwidW5pdFByb3BlcnR5IiwiZ2V0QXNzb2NpYXRlZFVuaXRQcm9wZXJ0eSIsImlzTXVsdGlWYWx1ZUZpZWxkIiwiaGFzVmFsdWVIZWxwIiwiQ29tbW9uIiwiVmFsdWVMaXN0UmVsZXZhbnRRdWFsaWZpZXJzIiwiaXNIaWRkZW5Gb3JDb250ZXh0cyIsImV4cEJpbmRpbmciLCJhbnlPYmplY3QiLCJBbnkiLCJhbnlCb29sZWFuIiwic2V0TW9kZWwiLCJpc0hpZGRlbiIsImNvbnRleHQiLCJzZXRCaW5kaW5nQ29udGV4dCIsImdldEJpbmRpbmciLCJnZXRFeHRlcm5hbFZhbHVlIiwiZGVzdHJveSIsInVwZGF0YWJsZUNvbnRleHRQcm9wZXJ0eSIsImdldEZpZWxkUHJvcGVydGllcyIsImRlZXBDbG9uZSIsImZpZWxkc0luZm8iLCJkYXRhUHJvcGVydHlQYXRoIiwiZ2V0Q29udGV4dFJlbGF0aXZlVGFyZ2V0T2JqZWN0UGF0aCIsInVuaXRPckN1cnJlbmN5UHJvcGVydHlQYXRoIiwiZ2V0QXNzb2NpYXRlZFVuaXRQcm9wZXJ0eVBhdGgiLCJnZXRBc3NvY2lhdGVkQ3VycmVuY3lQcm9wZXJ0eVBhdGgiLCJpbnB1dFR5cGUiLCJnZXRJbnB1dFR5cGUiLCJnZXRSZWxhdGl2ZVBhdGhzIiwiZmllbGREYXRhIiwidmlzaWJpbGl0eUJpbmRpbmdzIiwiaXNWaXNpYmxlIiwiZWRpdE1vZGUiLCJnZXRFZGl0TW9kZSIsImNvbnN0YW50IiwiTGFiZWwiLCJpc0ZpZWxkUmVxdWlyZWQiLCJnZXRSZXF1aXJlZEV4cHJlc3Npb24iLCJkZXNjcmlwdGlvblBhdGgiLCJnZXRBc3NvY2lhdGVkVGV4dFByb3BlcnR5UGF0aCIsInRleHRCaW5kaW5nIiwiZXhwcmVzc2lvbiIsImdldFRleHRCaW5kaW5nIiwiZGlzcGxheU1vZGUiLCJnZXREaXNwbGF5TW9kZSIsIklzVGltZXpvbmUiLCJyZWFkT25seUV4cHJlc3Npb24iLCJpc1JlYWRPbmx5RXhwcmVzc2lvbiIsImNsZWFyYWJsZSIsImlzUHJvcGVydHlDbGVhcmFibGUiLCJlbXB0eVZhbHVlIiwiZ2V0RW1wdHlWYWx1ZUZvclByb3BlcnR5Iiwic2VsZWN0SXRlbXMiLCJnZXREYXRhRm9yT3BlbmluZ0RpYWxvZyIsImFsbCIsImlzRmllbGRWaXNpYmxlIiwicnVudGltZVNlbGVjdGlvbiIsImdldFJ1bnRpbWVTZWxlY3Rpb24iLCJnZXREZWZhdWx0U2VsZWN0T3B0aW9ucyIsImdlbmVyYXRlRmllbGRzUHJvcGVydGllcyIsImdlbmVyYXRlRW50aXR5RmllbGRzUHJvcGVydGllcyIsIm1pc3NpbmdDb250ZXh0cyIsImJpbmRpbmdzVG9GZXRjaCIsImNvbmNhdCIsInBhdGhJbk1vZGVsIiwiZ2V0TWlzc2luZ0RhdGEiLCJiaW5kaW5nc1RvUmVzb2x2ZSIsImJpbmRpbmdzIiwiZ2V0Vmlld0RhdGEiLCJjb252ZXJ0ZXJUeXBlIiwiZGlzcGxheWVkUHJvcGVydGllcyIsImV2ZXJ5IiwicHJvbWlzZXMiLCJjb250cm9scyIsIm1vZGVsIiwiYmluZGluZyIsImZpbHRlciIsInN0YXJ0c1dpdGgiLCJwYXJhbWV0ZXJzIiwiYmluZGluZ1R5cGUiLCJjb250cm9sQmluZGluZyIsInNldEJpbmRpbmdNb2RlIiwiQmluZGluZ01vZGUiLCJPbmVUaW1lIiwiaXNBIiwiZ2V0QmluZGluZ3MiLCJuZXN0ZWRCaW5kaW5nIiwicmVxdWVzdFZhbHVlIiwicHJvbWlzZSIsInByb3BlcnR5IiwibnVsbGFibGUiLCJhbnkiLCJmb3JtYXRXaXRoVHlwZUluZm9ybWF0aW9uIiwidmFsdWUiLCJnZXRCaW5kaW5nSW5mbyIsImdldFR5cGUiLCJwYXJzZVZhbHVlIiwiZGlzdGluY3RNYXAiLCJzZWxlY3RPcHRpb25zIiwiYW55VGV4dCIsInNlbGVjdGVkQ29udGV4dCIsInByb3BlcnR5VGV4dCIsImhhcyIsImFkZCIsInRleHQiLCJ1bml0T3JDdXJyZW5jeVZhbHVlIiwiZ2V0T2JqZWN0IiwicHJvcGVydHlWYWx1ZSIsImtlZXBFbnRyeSIsIlNwZWNpZmljU2VsZWN0S2V5cyIsIktlZXBLZXkiLCJkZWZhdWx0T3B0aW9ucyIsIlJlcGxhY2VLZXkiLCJDbGVhckZpZWxkVmFsdWVLZXkiLCJnZXRGaWVsZEVkaXRhYmxlIiwiRmllbGRFZGl0TW9kZSIsIkVkaXRhYmxlIiwiT2JqZWN0Iiwia2V5cyIsImFueUNvbnRyb2wiLCJkYXRhRmllbGRDb252ZXJ0ZWQiLCJkYXRhTW9kZWxQYXRoIiwiZWRpdFN0eWxlUHJvcGVydGllcyIsInNldEVkaXRTdHlsZVByb3BlcnRpZXMiLCJlZGl0U3R5bGUiLCJpc1N0YXRpY0VkaXRNb2RlIiwiaXNFZGl0YWJsZSJdLCJzb3VyY2VSb290IjoiLiIsInNvdXJjZXMiOlsiTWFzc0VkaXREaWFsb2dIZWxwZXIudHN4Il0sInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB0eXBlIHsgUHJpbWl0aXZlVHlwZSwgUHJvcGVydHksIFByb3BlcnR5QW5ub3RhdGlvblZhbHVlIH0gZnJvbSBcIkBzYXAtdXgvdm9jYWJ1bGFyaWVzLXR5cGVzXCI7XG5pbXBvcnQgdHlwZSB7IERhdGFGaWVsZCwgRGF0YUZpZWxkRm9yQWN0aW9uLCBEYXRhRmllbGRGb3JBbm5vdGF0aW9uLCBIZWFkZXJJbmZvIH0gZnJvbSBcIkBzYXAtdXgvdm9jYWJ1bGFyaWVzLXR5cGVzL3ZvY2FidWxhcmllcy9VSVwiO1xuaW1wb3J0IExvZyBmcm9tIFwic2FwL2Jhc2UvTG9nXCI7XG5pbXBvcnQgdHlwZSBSZXNvdXJjZUJ1bmRsZSBmcm9tIFwic2FwL2Jhc2UvaTE4bi9SZXNvdXJjZUJ1bmRsZVwiO1xuaW1wb3J0IGRlZXBDbG9uZSBmcm9tIFwic2FwL2Jhc2UvdXRpbC9kZWVwQ2xvbmVcIjtcbmltcG9ydCB0eXBlIHsgQ29tcGlsZWRCaW5kaW5nVG9vbGtpdEV4cHJlc3Npb24gfSBmcm9tIFwic2FwL2ZlL2Jhc2UvQmluZGluZ1Rvb2xraXRcIjtcbmltcG9ydCB7XG5cdGNvbXBpbGVFeHByZXNzaW9uLFxuXHRjb25zdGFudCxcblx0Zm9ybWF0V2l0aFR5cGVJbmZvcm1hdGlvbixcblx0Z2V0RXhwcmVzc2lvbkZyb21Bbm5vdGF0aW9uLFxuXHRwYXRoSW5Nb2RlbFxufSBmcm9tIFwic2FwL2ZlL2Jhc2UvQmluZGluZ1Rvb2xraXRcIjtcbmltcG9ydCB0eXBlIHsgRkVWaWV3IH0gZnJvbSBcInNhcC9mZS9jb3JlL0Jhc2VDb250cm9sbGVyXCI7XG5pbXBvcnQgQ29tbW9uVXRpbHMgZnJvbSBcInNhcC9mZS9jb3JlL0NvbW1vblV0aWxzXCI7XG5pbXBvcnQgdHlwZSBUZW1wbGF0ZUNvbXBvbmVudCBmcm9tIFwic2FwL2ZlL2NvcmUvVGVtcGxhdGVDb21wb25lbnRcIjtcbmltcG9ydCBBbnkgZnJvbSBcInNhcC9mZS9jb3JlL2NvbnRyb2xzL0FueVwiO1xuaW1wb3J0IHsgY29udmVydE1ldGFNb2RlbENvbnRleHQsIGdldEludm9sdmVkRGF0YU1vZGVsT2JqZWN0cyB9IGZyb20gXCJzYXAvZmUvY29yZS9jb252ZXJ0ZXJzL01ldGFNb2RlbENvbnZlcnRlclwiO1xuaW1wb3J0IHsgaXNEYXRhRmllbGRUeXBlcyB9IGZyb20gXCJzYXAvZmUvY29yZS9jb252ZXJ0ZXJzL2Fubm90YXRpb25zL0RhdGFGaWVsZFwiO1xuaW1wb3J0IHR5cGUgeyBNYXNzRWRpdFRhYmxlQ29uZmlndXJhdGlvbiB9IGZyb20gXCJzYXAvZmUvY29yZS9jb252ZXJ0ZXJzL2NvbnRyb2xzL0NvbW1vbi9UYWJsZVwiO1xuaW1wb3J0IHR5cGUgeyBBbm5vdGF0aW9uVGFibGVDb2x1bW4gfSBmcm9tIFwic2FwL2ZlL2NvcmUvY29udmVydGVycy9jb250cm9scy9Db21tb24vdGFibGUvQ29sdW1uc1wiO1xuaW1wb3J0IHR5cGUgeyBJbnRlcm5hbE1vZGVsQ29udGV4dCB9IGZyb20gXCJzYXAvZmUvY29yZS9oZWxwZXJzL01vZGVsSGVscGVyXCI7XG5pbXBvcnQgTW9kZWxIZWxwZXIgZnJvbSBcInNhcC9mZS9jb3JlL2hlbHBlcnMvTW9kZWxIZWxwZXJcIjtcbmltcG9ydCB7IGlzUHJvcGVydHkgfSBmcm9tIFwic2FwL2ZlL2NvcmUvaGVscGVycy9UeXBlR3VhcmRzXCI7XG5pbXBvcnQgdHlwZSB7IERhdGFNb2RlbE9iamVjdFBhdGggfSBmcm9tIFwic2FwL2ZlL2NvcmUvdGVtcGxhdGluZy9EYXRhTW9kZWxQYXRoSGVscGVyXCI7XG5pbXBvcnQgeyBlbmhhbmNlRGF0YU1vZGVsUGF0aCwgZ2V0Q29udGV4dFJlbGF0aXZlVGFyZ2V0T2JqZWN0UGF0aCwgZ2V0UmVsYXRpdmVQYXRocyB9IGZyb20gXCJzYXAvZmUvY29yZS90ZW1wbGF0aW5nL0RhdGFNb2RlbFBhdGhIZWxwZXJcIjtcbmltcG9ydCB7IGdldERpc3BsYXlNb2RlIH0gZnJvbSBcInNhcC9mZS9jb3JlL3RlbXBsYXRpbmcvRGlzcGxheU1vZGVGb3JtYXR0ZXJcIjtcbmltcG9ydCB7IGlzUmVhZE9ubHlFeHByZXNzaW9uIH0gZnJvbSBcInNhcC9mZS9jb3JlL3RlbXBsYXRpbmcvRmllbGRDb250cm9sSGVscGVyXCI7XG5pbXBvcnQge1xuXHRnZXRBc3NvY2lhdGVkQ3VycmVuY3lQcm9wZXJ0eVBhdGgsXG5cdGdldEFzc29jaWF0ZWRUZXh0UHJvcGVydHlQYXRoLFxuXHRnZXRBc3NvY2lhdGVkVW5pdFByb3BlcnR5LFxuXHRnZXRBc3NvY2lhdGVkVW5pdFByb3BlcnR5UGF0aCxcblx0aGFzVmFsdWVIZWxwXG59IGZyb20gXCJzYXAvZmUvY29yZS90ZW1wbGF0aW5nL1Byb3BlcnR5SGVscGVyXCI7XG5pbXBvcnQgeyBnZXRFZGl0TW9kZSwgZ2V0UmVxdWlyZWRFeHByZXNzaW9uLCBpc011bHRpVmFsdWVGaWVsZCwgaXNWaXNpYmxlIH0gZnJvbSBcInNhcC9mZS9jb3JlL3RlbXBsYXRpbmcvVUlGb3JtYXR0ZXJzXCI7XG5pbXBvcnQgeyBnZXRUZXh0QmluZGluZywgc2V0RWRpdFN0eWxlUHJvcGVydGllcyB9IGZyb20gXCJzYXAvZmUvbWFjcm9zL2ZpZWxkL0ZpZWxkVGVtcGxhdGluZ1wiO1xuaW1wb3J0IHR5cGUgeyBGaWVsZEJsb2NrUHJvcGVydGllcyB9IGZyb20gXCJzYXAvZmUvbWFjcm9zL2ludGVybmFsL2ZpZWxkL0ZpZWxkU3RydWN0dXJlSGVscGVyXCI7XG5pbXBvcnQgdHlwZSBUYWJsZUFQSSBmcm9tIFwic2FwL2ZlL21hY3Jvcy90YWJsZS9UYWJsZUFQSVwiO1xuaW1wb3J0IE1lc3NhZ2VCb3ggZnJvbSBcInNhcC9tL01lc3NhZ2VCb3hcIjtcbmltcG9ydCBDb21wb25lbnQgZnJvbSBcInNhcC91aS9jb3JlL0NvbXBvbmVudFwiO1xuaW1wb3J0IExpYnJhcnkgZnJvbSBcInNhcC91aS9jb3JlL0xpYlwiO1xuaW1wb3J0IHR5cGUgVGFibGUgZnJvbSBcInNhcC91aS9tZGMvVGFibGVcIjtcbmltcG9ydCBGaWVsZEVkaXRNb2RlIGZyb20gXCJzYXAvdWkvbWRjL2VudW1zL0ZpZWxkRWRpdE1vZGVcIjtcbmltcG9ydCBCaW5kaW5nTW9kZSBmcm9tIFwic2FwL3VpL21vZGVsL0JpbmRpbmdNb2RlXCI7XG5pbXBvcnQgdHlwZSBDb21wb3NpdGVCaW5kaW5nIGZyb20gXCJzYXAvdWkvbW9kZWwvQ29tcG9zaXRlQmluZGluZ1wiO1xuaW1wb3J0IHR5cGUgUHJvcGVydHlCaW5kaW5nIGZyb20gXCJzYXAvdWkvbW9kZWwvUHJvcGVydHlCaW5kaW5nXCI7XG5pbXBvcnQgdHlwZSBPRGF0YVY0Q29udGV4dCBmcm9tIFwic2FwL3VpL21vZGVsL29kYXRhL3Y0L0NvbnRleHRcIjtcbmltcG9ydCB0eXBlIE9EYXRhTW9kZWwgZnJvbSBcInNhcC91aS9tb2RlbC9vZGF0YS92NC9PRGF0YU1vZGVsXCI7XG5pbXBvcnQgdHlwZSBPRGF0YVByb3BlcnR5QmluZGluZyBmcm9tIFwic2FwL3VpL21vZGVsL29kYXRhL3Y0L09EYXRhUHJvcGVydHlCaW5kaW5nXCI7XG5pbXBvcnQgTWFzc0VkaXREaWFsb2cgZnJvbSBcIi4vTWFzc0VkaXREaWFsb2dcIjtcbmltcG9ydCB0eXBlIHsgQmluZGluZ0luZm8sIE1hc3NGaWVsZFByb3BlcnRpZXMsIFNlbGVjdEluZm8gfSBmcm9tIFwiLi9saWJyYXJ5XCI7XG5pbXBvcnQgeyBTcGVjaWZpY1NlbGVjdEtleXMgfSBmcm9tIFwiLi9saWJyYXJ5XCI7XG5cbnR5cGUgRGF0YUZpZWxkVHlwZXMgPSBEYXRhRmllbGQgfCBEYXRhRmllbGRGb3JBbm5vdGF0aW9uIHwgRGF0YUZpZWxkRm9yQWN0aW9uO1xudHlwZSBGaWVsZEluZm8gPSB7XG5cdGtleTogc3RyaW5nO1xuXHRwcm9wZXJ0eURhdGFNb2RlbDogRGF0YU1vZGVsT2JqZWN0UGF0aDxQcm9wZXJ0eT47XG5cdHRhcmdldFByb3BlcnR5OiBQcm9wZXJ0eTtcblx0bGFiZWw6IHN0cmluZztcblx0Y29udmVydGVkQW5ub3RhdGlvbjogRGF0YUZpZWxkVHlwZXM7XG59O1xuXG50eXBlIEJpbmRpbmdUb0ZldGNoID0gQmluZGluZ0luZm8gJiB7IGNvbnRleHRzPzogT0RhdGFWNENvbnRleHRbXSB9O1xuXG4vKipcbiAqIERpc3BsYXkgdGhlIG1hc3NFZGl0IGRpYWxvZy5cbiAqL1xuZXhwb3J0IGRlZmF1bHQgY2xhc3MgTWFzc0VkaXREaWFsb2dIZWxwZXIge1xuXHRwcml2YXRlIHJlYWRvbmx5IHRhYmxlOiBUYWJsZTtcblxuXHRwcml2YXRlIHJlYWRvbmx5IG9uQ29udGV4dE1lbnU6IGJvb2xlYW47XG5cblx0cHJpdmF0ZSByZWFkb25seSBvbkRpYWxvZ0Nsb3NlOiAoKCkgPT4gdm9pZCkgfCB1bmRlZmluZWQ7XG5cblx0cHJpdmF0ZSByZWFkb25seSB2aWV3OiBGRVZpZXc7XG5cblx0cHJpdmF0ZSByZWFkb25seSBtYXhBbmFseXplZFJvd3MgPSAzMDtcblxuXHRwcml2YXRlIGNvbnRleHRzOiBPRGF0YVY0Q29udGV4dFtdO1xuXG5cdHByaXZhdGUgcmVhZG9ubHkgYW5hbHl6ZWRDb250ZXh0czogT0RhdGFWNENvbnRleHRbXSA9IFtdO1xuXG5cdHByaXZhdGUgcmVhZG9ubHkgZGVncmFkZWRNb2RlOiBib29sZWFuO1xuXG5cdHByaXZhdGUgcmVhZG9ubHkgbWFuaWZlc3RTZXR0aW5nczogTWFzc0VkaXRUYWJsZUNvbmZpZ3VyYXRpb247XG5cblx0cHJpdmF0ZSBmaWVsZFByb3BlcnRpZXM6IE1hc3NGaWVsZFByb3BlcnRpZXNbXSA9IFtdO1xuXG5cdHByaXZhdGUgcmVhZG9ubHkgaXNBZGFwdGF0aW9uOiBib29sZWFuO1xuXG5cdHByaXZhdGUgcmVhZG9ubHkgaGVhZGVySW5mbzogSGVhZGVySW5mbyB8IHVuZGVmaW5lZDtcblxuXHRtYXNzRWRpdERpYWxvZzogTWFzc0VkaXREaWFsb2cgfCB1bmRlZmluZWQ7XG5cblx0Y29uc3RydWN0b3IocHJvcHM6IHsgdGFibGU6IFRhYmxlOyBvbkNvbnRleHRNZW51OiBib29sZWFuOyBvbkNsb3NlPzogKCkgPT4gdm9pZCB9KSB7XG5cdFx0Y29uc3QgZW50aXR5VHlwZVBhdGggPSAocHJvcHMudGFibGUuZ2V0UGFyZW50KCkgYXMgVGFibGVBUEkpLmdldFRhYmxlRGVmaW5pdGlvbigpLmFubm90YXRpb24uY29sbGVjdGlvbixcblx0XHRcdG1ldGFNb2RlbCA9IChwcm9wcy50YWJsZS5nZXRNb2RlbCgpIGFzIE9EYXRhTW9kZWwpLmdldE1ldGFNb2RlbCgpO1xuXG5cdFx0dGhpcy50YWJsZSA9IHByb3BzLnRhYmxlO1xuXHRcdHRoaXMubWFuaWZlc3RTZXR0aW5ncyA9ICh0aGlzLnRhYmxlLmdldFBhcmVudCgpIGFzIFRhYmxlQVBJKS5nZXRUYWJsZURlZmluaXRpb24oKS5jb250cm9sLm1hc3NFZGl0O1xuXHRcdHRoaXMub25Db250ZXh0TWVudSA9IHByb3BzLm9uQ29udGV4dE1lbnU7XG5cdFx0dGhpcy5vbkRpYWxvZ0Nsb3NlID0gcHJvcHMub25DbG9zZTtcblx0XHR0aGlzLnZpZXcgPSBDb21tb25VdGlscy5nZXRUYXJnZXRWaWV3KHRoaXMudGFibGUpO1xuXHRcdHRoaXMuY29udGV4dHMgPSB0aGlzLmZldGNoQ29udGV4dHNGb3JFZGl0KCk7XG5cdFx0dGhpcy5kZWdyYWRlZE1vZGUgPSB0aGlzLmNvbnRleHRzLmxlbmd0aCA+IHRoaXMubWF4QW5hbHl6ZWRSb3dzO1xuXHRcdHRoaXMuYW5hbHl6ZWRDb250ZXh0cyA9IHRoaXMuZGVncmFkZWRNb2RlID8gdGhpcy5jb250ZXh0cy5zbGljZSgwLCB0aGlzLm1heEFuYWx5emVkUm93cykgOiB0aGlzLmNvbnRleHRzO1xuXHRcdHRoaXMuaXNBZGFwdGF0aW9uID0gQ29tbW9uVXRpbHMuZ2V0QXBwQ29tcG9uZW50KHRoaXMudGFibGUpLmlzQWRhcHRhdGlvbk1vZGUoKTtcblx0XHR0aGlzLmhlYWRlckluZm8gPSBnZXRJbnZvbHZlZERhdGFNb2RlbE9iamVjdHMobWV0YU1vZGVsLmdldENvbnRleHQoZW50aXR5VHlwZVBhdGgpKS50YXJnZXRFbnRpdHlUeXBlLmFubm90YXRpb25zLlVJPy5IZWFkZXJJbmZvO1xuXHR9XG5cblx0LyoqXG5cdCAqIE9wZW5zIHRoZSBtYXNzIGVkaXQgZGlhbG9nIGlmIGFsbCBzZWxlY3RlZCBjb250ZXh0cyBhcmUgZWRpdGFibGUsXG5cdCAqIG90aGVyd2lzZSBhIG1lc3NhZ2UgYm94IHRvIGNvbmZpcm0gdGhlIHNlbGVjdGlvbi5cblx0ICogQHJldHVybnMgQSBwcm9taXNlIHRoYXQgcmVzb2x2ZXMgb24gb3BlbiBvZiB0aGUgbWFzcyBlZGl0IGRpYWxvZy5cblx0ICovXG5cdGFzeW5jIG9wZW4oKTogUHJvbWlzZTx2b2lkPiB7XG5cdFx0dHJ5IHtcblx0XHRcdGNvbnN0IHRlbXBsYXRlQ29tcG9uZW50ID0gQ29tcG9uZW50LmdldE93bmVyQ29tcG9uZW50Rm9yKHRoaXMudmlldykgYXMgVGVtcGxhdGVDb21wb25lbnQ7XG5cdFx0XHRjb25zdCBpbnRlcm5hbE1vZGVsQ29udGV4dCA9IHRoaXMudGFibGUuZ2V0QmluZGluZ0NvbnRleHQoXCJpbnRlcm5hbFwiKSBhcyBJbnRlcm5hbE1vZGVsQ29udGV4dCxcblx0XHRcdFx0aW50ZXJuYWxNb2RlbFByb3BlcnR5ID0gIXRoaXMub25Db250ZXh0TWVudSA/IFwibnVtYmVyT2ZTZWxlY3RlZENvbnRleHRzXCIgOiBcImNvbnRleHRtZW51L251bWJlck9mU2VsZWN0ZWRDb250ZXh0c1wiLFxuXHRcdFx0XHRzZWxlY3RlZENvbnRleHRzID0gaW50ZXJuYWxNb2RlbENvbnRleHQuZ2V0UHJvcGVydHkoaW50ZXJuYWxNb2RlbFByb3BlcnR5KSB8fCAwO1xuXHRcdFx0dGhpcy5maWVsZFByb3BlcnRpZXMgPSBhd2FpdCB0aGlzLmdldEZpZWxkc1Byb3BlcnRpZXNGcm9tSW5mbyh0aGlzLmdldEZpZWxkc0luZm8oKSk7XG5cdFx0XHRpZiAoIXRoaXMuaXNBZGFwdGF0aW9uKSB7XG5cdFx0XHRcdC8vIG5vIGZpZWxkIHRvIGVkaXRcblx0XHRcdFx0aWYgKCF0aGlzLmZpZWxkUHJvcGVydGllcy5zb21lKChmaWVsZCkgPT4gZmllbGQudmlzaWJsZSkpIHtcblx0XHRcdFx0XHR0aGlzLm5vRmllbGRJbmZvcm1hdGlvbigpO1xuXHRcdFx0XHRcdHJldHVybjtcblx0XHRcdFx0fVxuXHRcdFx0XHQvL1NvbWUgcm93cyBhcmUgbm90IGVkaXRhYmxlIC0+IGRvIHdlIHdhbnQgdG8gY29udGludWU/XG5cdFx0XHRcdGlmICh0aGlzLmNvbnRleHRzLmxlbmd0aCAhPT0gc2VsZWN0ZWRDb250ZXh0cykge1xuXHRcdFx0XHRcdHRoaXMuY29udGV4dHMgPSBhd2FpdCB0aGlzLmNvbmZpcm1TZWxlY3Rpb24odGhpcy5jb250ZXh0cywgc2VsZWN0ZWRDb250ZXh0cyk7XG5cdFx0XHRcdFx0aWYgKCF0aGlzLmNvbnRleHRzLmxlbmd0aCkge1xuXHRcdFx0XHRcdFx0Ly8gdGhlIHVzZXIgZG9lc24ndCB3YW50IHRvIGNvbnRpbnVlXG5cdFx0XHRcdFx0XHR0aGlzLm9uRGlhbG9nQ2xvc2U/LigpO1xuXHRcdFx0XHRcdFx0cmV0dXJuO1xuXHRcdFx0XHRcdH1cblx0XHRcdFx0fVxuXHRcdFx0fVxuXHRcdFx0YXdhaXQgdGVtcGxhdGVDb21wb25lbnQucnVuQXNPd25lcihhc3luYyAoKSA9PiB7XG5cdFx0XHRcdHRoaXMubWFzc0VkaXREaWFsb2cgPSBuZXcgTWFzc0VkaXREaWFsb2coe1xuXHRcdFx0XHRcdHRhYmxlOiB0aGlzLnRhYmxlLFxuXHRcdFx0XHRcdGNvbnRleHRzOiB0aGlzLmNvbnRleHRzLFxuXHRcdFx0XHRcdGZpZWxkUHJvcGVydGllczogdGhpcy5maWVsZFByb3BlcnRpZXNcblx0XHRcdFx0fSk7XG5cdFx0XHRcdGNvbnN0IGRpYWxvZyA9IGF3YWl0IHRoaXMubWFzc0VkaXREaWFsb2cuY3JlYXRlKCk7XG5cdFx0XHRcdGRpYWxvZy5hdHRhY2hCZWZvcmVDbG9zZSgoKSA9PiB7XG5cdFx0XHRcdFx0dGhpcy5vbkRpYWxvZ0Nsb3NlPy4oKTtcblx0XHRcdFx0fSk7XG5cdFx0XHRcdGRpYWxvZy5vcGVuKCk7XG5cdFx0XHRcdGNvbnN0IHJlcXVpcmVkRGF0YVByb21pc2UgPSB0aGlzLm1hc3NFZGl0RGlhbG9nLmdldFJlcXVpcmVkRGF0YVByb21pc2UoKTtcblx0XHRcdFx0dHJ5IHtcblx0XHRcdFx0XHRhd2FpdCB0aGlzLmdldERhdGFBZnRlck9wZW5pbmdEaWFsb2codGhpcy5maWVsZFByb3BlcnRpZXMpO1xuXHRcdFx0XHRcdHJlcXVpcmVkRGF0YVByb21pc2UucmVzb2x2ZSgpO1xuXHRcdFx0XHR9IGNhdGNoIChlcnJvcikge1xuXHRcdFx0XHRcdExvZy5lcnJvcihcIk1hc3MgRWRpdDogU29tZXRoaW5nIHdlbnQgd3JvbmcgaW4gbWFzcyBlZGl0IGRpYWxvZyB0byBnZXQgcmVxdWlyZWQgZGF0YS5cIiwgZXJyb3IgYXMgc3RyaW5nKTtcblx0XHRcdFx0XHRyZXF1aXJlZERhdGFQcm9taXNlLnJlamVjdCgpO1xuXHRcdFx0XHR9XG5cdFx0XHR9KTtcblx0XHR9IGNhdGNoIChlcnJvcjogdW5rbm93bikge1xuXHRcdFx0TG9nLmVycm9yKFwiTWFzcyBFZGl0OiBTb21ldGhpbmcgd2VudCB3cm9uZyBpbiBtYXNzIGVkaXQgZGlhbG9nIGNyZWF0aW9uLlwiLCBlcnJvciBhcyBzdHJpbmcpO1xuXHRcdH1cblx0fVxuXG5cdC8qKlxuXHQgKiBPcGVucyB0aGUgbWVzc2FnZSBib3ggdG8gbm90aWZ5IG5vIGZpZWxkcyBhcmUgZWRpdGFibGUuXG5cdCAqL1xuXHRwcml2YXRlIG5vRmllbGRJbmZvcm1hdGlvbigpOiB2b2lkIHtcblx0XHRjb25zdCB2aXNpYmxlRmllbGRzRnJvbU1hbmlmZXN0ID0gKHRoaXMudGFibGUuZ2V0UGFyZW50KCkgYXMgVGFibGVBUEkpLmdldFRhYmxlRGVmaW5pdGlvbigpLmNvbnRyb2wubWFzc0VkaXQudmlzaWJsZUZpZWxkcztcblx0XHRjb25zdCByZXNvdXJjZUJ1bmRsZSA9IExpYnJhcnkuZ2V0UmVzb3VyY2VCdW5kbGVGb3IoXCJzYXAuZmUubWFjcm9zXCIpIGFzIFJlc291cmNlQnVuZGxlO1xuXHRcdGxldCBtZXNzYWdlID0gXCJcIixcblx0XHRcdG1lc3NhZ2VEZXRhaWw7XG5cdFx0aWYgKHZpc2libGVGaWVsZHNGcm9tTWFuaWZlc3QubGVuZ3RoID4gMCkge1xuXHRcdFx0bWVzc2FnZSA9IHJlc291cmNlQnVuZGxlLmdldFRleHQoXCJDX01BU1NfRURJVF9OT19FRElUQUJMRV9GSUVMRFNfV0lUSF9NQU5JRkVTVFwiLCBbXG5cdFx0XHRcdHRoaXMuZ2V0UmVzb3VyY2VUZXh0KHRoaXMuaGVhZGVySW5mbz8uVHlwZU5hbWUpID8/IHJlc291cmNlQnVuZGxlLmdldFRleHQoXCJDX01BU1NfRURJVF9ESUFMT0dfREVGQVVMVF9UWVBFTkFNRVwiKVxuXHRcdFx0XSk7XG5cdFx0XHRtZXNzYWdlRGV0YWlsID0gYDx1bD5cblx0XHRcdCR7dGhpcy5maWVsZFByb3BlcnRpZXNcblx0XHRcdFx0LnJlZHVjZSgoZmllbGRzOiBzdHJpbmdbXSwgZmllbGRQcm9wZXJ0eSkgPT4ge1xuXHRcdFx0XHRcdGlmICh2aXNpYmxlRmllbGRzRnJvbU1hbmlmZXN0LmluY2x1ZGVzKGZpZWxkUHJvcGVydHkucHJvcGVydHlJbmZvLnJlbGF0aXZlUGF0aCkpIHtcblx0XHRcdFx0XHRcdGZpZWxkcy5wdXNoKGA8bGk+JHtmaWVsZFByb3BlcnR5LmxhYmVsfTwvbGk+YCk7XG5cdFx0XHRcdFx0fVxuXHRcdFx0XHRcdHJldHVybiBmaWVsZHM7XG5cdFx0XHRcdH0sIFtdKVxuXHRcdFx0XHQuam9pbihcIlwiKX0gPC91bD5gO1xuXHRcdH0gZWxzZSB7XG5cdFx0XHRtZXNzYWdlID0gcmVzb3VyY2VCdW5kbGUuZ2V0VGV4dChcIkNfTUFTU19FRElUX05PX0VESVRBQkxFX0ZJRUxEU19ERUZBVUxUXCIpO1xuXHRcdH1cblxuXHRcdE1lc3NhZ2VCb3guaW5mb3JtYXRpb24obWVzc2FnZSwge1xuXHRcdFx0ZGV0YWlsczogbWVzc2FnZURldGFpbCxcblx0XHRcdG9uQ2xvc2U6ICgpID0+IHtcblx0XHRcdFx0dGhpcy5vbkRpYWxvZ0Nsb3NlPy4oKTtcblx0XHRcdH1cblx0XHR9KTtcblx0fVxuXG5cdC8qKlxuXHQgKiBPcGVucyB0aGUgY29uZmlybWF0aW9uIGRpYWxvZyB0byB2YWxpZGF0ZSB0aGUgc2VsZWN0ZWQgY29udGV4dHMuXG5cdCAqIEBwYXJhbSBjb250ZXh0cyBUaGUgY29udGV4dHMgc2V0IGFzIHVwZGF0YWJsZVxuXHQgKiBAcGFyYW0gc2VsZWN0ZWRDb250ZXh0cyAgVGhlIG51bWJlciBvZiBzZWxlY3RlZCBjb250ZXh0c1xuXHQgKiBAcmV0dXJucyBBIHByb21pc2UgdGhhdCByZXNvbHZlcyB0aGUgY29udGV4dHMgdG8gYmUgZmluYWxseSBtYW5hZ2VkLlxuXHQgKi9cblx0cHJpdmF0ZSBhc3luYyBjb25maXJtU2VsZWN0aW9uKGNvbnRleHRzOiBPRGF0YVY0Q29udGV4dFtdLCBzZWxlY3RlZENvbnRleHRzOiBudW1iZXIpOiBQcm9taXNlPE9EYXRhVjRDb250ZXh0W10+IHtcblx0XHRjb25zdCByZXNvdXJjZUJ1bmRsZSA9IExpYnJhcnkuZ2V0UmVzb3VyY2VCdW5kbGVGb3IoXCJzYXAuZmUubWFjcm9zXCIpIGFzIFJlc291cmNlQnVuZGxlO1xuXHRcdGNvbnN0IGNvcmVSZXNvdXJjZUJ1bmRsZSA9IExpYnJhcnkuZ2V0UmVzb3VyY2VCdW5kbGVGb3IoXCJzYXAuZmUuY29yZVwiKSBhcyBSZXNvdXJjZUJ1bmRsZTtcblxuXHRcdGNvbnN0IHVwZGF0YWJsZUNvbnRleHRzID0gY29udGV4dHMubGVuZ3RoO1xuXHRcdHJldHVybiBuZXcgUHJvbWlzZSgocmVzb2x2ZSkgPT4ge1xuXHRcdFx0dHJ5IHtcblx0XHRcdFx0Y29uc3QgdGFibGVBUEkgPSB0aGlzLnRhYmxlLmdldFBhcmVudCgpIGFzIFRhYmxlQVBJO1xuXHRcdFx0XHRjb25zdCBlZGl0QnV0dG9uID0gcmVzb3VyY2VCdW5kbGUuZ2V0VGV4dChcIkNfTUFTU19FRElUX0NPTkZJUk1fQlVUVE9OX1RFWFRcIiksXG5cdFx0XHRcdFx0Y2FuY2VsQnV0dG9uID0gY29yZVJlc291cmNlQnVuZGxlLmdldFRleHQoXCJDX0NPTU1PTl9PQkpFQ1RfUEFHRV9DQU5DRUxcIiksXG5cdFx0XHRcdFx0bWV0YU1vZGVsID0gKHRoaXMudGFibGUuZ2V0TW9kZWwoKSBhcyBPRGF0YU1vZGVsKS5nZXRNZXRhTW9kZWwoKSxcblx0XHRcdFx0XHR0eXBlTmFtZSA9XG5cdFx0XHRcdFx0XHR0aGlzLmdldFJlc291cmNlVGV4dCh0aGlzLmhlYWRlckluZm8/LlR5cGVOYW1lKSA/PyByZXNvdXJjZUJ1bmRsZS5nZXRUZXh0KFwiQ19NQVNTX0VESVRfRElBTE9HX0RFRkFVTFRfVFlQRU5BTUVcIiksXG5cdFx0XHRcdFx0dHlwZU5hbWVQbHVyYWwgPVxuXHRcdFx0XHRcdFx0dGhpcy5nZXRSZXNvdXJjZVRleHQodGhpcy5oZWFkZXJJbmZvPy5UeXBlTmFtZVBsdXJhbCkgPz9cblx0XHRcdFx0XHRcdHJlc291cmNlQnVuZGxlLmdldFRleHQoXCJDX01BU1NfRURJVF9ESUFMT0dfREVGQVVMVF9UWVBFTkFNRV9QTFVSQUxcIiksXG5cdFx0XHRcdFx0bWVzc2FnZURldGFpbCA9XG5cdFx0XHRcdFx0XHRNb2RlbEhlbHBlci5pc0RyYWZ0U3VwcG9ydGVkKG1ldGFNb2RlbCwgdGhpcy50YWJsZS5kYXRhKFwidGFyZ2V0Q29sbGVjdGlvblBhdGhcIikpICYmIHRhYmxlQVBJLnJlYWRPbmx5XG5cdFx0XHRcdFx0XHRcdD8gdGhpcy5nZXRNZXNzYWdlRGV0YWlsRm9yTm9uRWRpdGFibGUodHlwZU5hbWUsIHR5cGVOYW1lUGx1cmFsKVxuXHRcdFx0XHRcdFx0XHQ6IFwiXCI7XG5cblx0XHRcdFx0TWVzc2FnZUJveC53YXJuaW5nKFxuXHRcdFx0XHRcdHJlc291cmNlQnVuZGxlLmdldFRleHQoXCJDX01BU1NfRURJVF9DT05GSVJNX01FU1NBR0VcIiwgW1xuXHRcdFx0XHRcdFx0c2VsZWN0ZWRDb250ZXh0cyAtIHVwZGF0YWJsZUNvbnRleHRzLFxuXHRcdFx0XHRcdFx0c2VsZWN0ZWRDb250ZXh0cyxcblx0XHRcdFx0XHRcdHVwZGF0YWJsZUNvbnRleHRzLFxuXHRcdFx0XHRcdFx0dHlwZU5hbWVQbHVyYWxcblx0XHRcdFx0XHRdKSxcblx0XHRcdFx0XHR7XG5cdFx0XHRcdFx0XHRkZXRhaWxzOiBtZXNzYWdlRGV0YWlsLFxuXHRcdFx0XHRcdFx0YWN0aW9uczogW2VkaXRCdXR0b24sIGNhbmNlbEJ1dHRvbl0sXG5cdFx0XHRcdFx0XHRlbXBoYXNpemVkQWN0aW9uOiBlZGl0QnV0dG9uLFxuXHRcdFx0XHRcdFx0b25DbG9zZTogZnVuY3Rpb24gKHNlbGVjdGlvbjogc3RyaW5nKSB7XG5cdFx0XHRcdFx0XHRcdHJlc29sdmUoc2VsZWN0aW9uID09PSBlZGl0QnV0dG9uID8gY29udGV4dHMgOiBbXSk7XG5cdFx0XHRcdFx0XHR9XG5cdFx0XHRcdFx0fVxuXHRcdFx0XHQpO1xuXHRcdFx0fSBjYXRjaCAoZXJyb3IpIHtcblx0XHRcdFx0TG9nLmVycm9yKGVycm9yIGFzIHN0cmluZyk7XG5cdFx0XHR9XG5cdFx0fSk7XG5cdH1cblxuXHQvKipcblx0ICogR2V0cyB0aGUgdGV4dCBhY2NvcmRpbmcgdG8gYW4gYW5ub3RhdGlvbi5cblx0ICogQHBhcmFtIGFubm90YXRpb24gVGhlIGFubm90YXRpb25cblx0ICogQHJldHVybnMgVGhlIHRleHQuXG5cdCAqL1xuXHRwcml2YXRlIGdldFJlc291cmNlVGV4dChhbm5vdGF0aW9uOiBQcm9wZXJ0eUFubm90YXRpb25WYWx1ZTxTdHJpbmc+IHwgdW5kZWZpbmVkKTogc3RyaW5nIHwgdW5kZWZpbmVkIHtcblx0XHRpZiAoIWFubm90YXRpb24pIHtcblx0XHRcdHJldHVybiB1bmRlZmluZWQ7XG5cdFx0fVxuXHRcdHJldHVybiBDb21tb25VdGlscy5nZXRUcmFuc2xhdGVkVGV4dEZyb21FeHBCaW5kaW5nU3RyaW5nKFxuXHRcdFx0Y29tcGlsZUV4cHJlc3Npb24oZ2V0RXhwcmVzc2lvbkZyb21Bbm5vdGF0aW9uKGFubm90YXRpb24pKSBhcyBzdHJpbmcsXG5cdFx0XHR0aGlzLnZpZXdcblx0XHQpPy50b0xvY2FsZUxvd2VyQ2FzZSgpO1xuXHR9XG5cblx0LyoqXG5cdCAqIEdldHMgdGhlIG1lc3NhZ2UgZGV0YWlsIG9mIHRoZSBjb25maXJtYXRpb24gZGlhbG9nLlxuXHQgKiBAcGFyYW0gdHlwZU5hbWUgVGhlIHR5cGUgbmFtZSBvZiB0aGUgZW50aXR5IHNldFxuXHQgKiBAcGFyYW0gdHlwZU5hbWVQbHVyYWwgVGhlIHR5cGUgbmFtZSBwbHVyYWwgb2YgdGhlIGVudGl0eSBzZXRcblx0ICogQHJldHVybnMgVGhlIHRleHQuXG5cdCAqL1xuXHRwcml2YXRlIGdldE1lc3NhZ2VEZXRhaWxGb3JOb25FZGl0YWJsZSh0eXBlTmFtZTogc3RyaW5nLCB0eXBlTmFtZVBsdXJhbDogc3RyaW5nKTogc3RyaW5nIHtcblx0XHRjb25zdCByZXNvdXJjZUJ1bmRsZSA9IExpYnJhcnkuZ2V0UmVzb3VyY2VCdW5kbGVGb3IoXCJzYXAuZmUubWFjcm9zXCIpIGFzIFJlc291cmNlQnVuZGxlO1xuXHRcdHJldHVybiBgPHA+PHN0cm9uZz4ke3Jlc291cmNlQnVuZGxlLmdldFRleHQoXCJDX01BU1NfRURJVF9DT05GSVJNX01FU1NBR0VfREVUQUlMX0hFQURFUlwiKX08L3N0cm9uZz48L3A+XFxuXG5cdFx0XHQ8cD4ke3Jlc291cmNlQnVuZGxlLmdldFRleHQoXCJDX01BU1NfRURJVF9DT05GSVJNX01FU1NBR0VfREVUQUlMX1JFQVNPTlwiLCBbdHlwZU5hbWVQbHVyYWxdKX08L3A+XFxuXG5cdFx0XHQ8dWw+XG5cdFx0XHRcdDxsaT4ke3Jlc291cmNlQnVuZGxlLmdldFRleHQoXCJDX01BU1NfRURJVF9DT05GSVJNX01FU1NBR0VfREVUQUlMX1JFQVNPTl9EUkFGVFwiLCBbdHlwZU5hbWVdKX08L2xpPlxuXHRcdFx0XHQ8bGk+JHtyZXNvdXJjZUJ1bmRsZS5nZXRUZXh0KFwiQ19NQVNTX0VESVRfQ09ORklSTV9NRVNTQUdFX0RFVEFJTF9SRUFTT05fTk9OX0VESVRBQkxFXCIsIFt0eXBlTmFtZV0pfTwvbGk+XG5cdFx0XHQ8L3VsPmA7XG5cdH1cblxuXHQvKipcblx0ICogR2V0cyBpbmZvcm1hdGlvbiBhYm91dCB0aGUgZW50aXR5IHdoaWNoIGlzIGNvbXBsaWFudCBmb3IgYSBNYXNzIEVkaXQuXG5cdCAqIEByZXR1cm5zIEFycmF5IG9mIHRoZSBmaWVsZCBpbmZvcm1hdGlvbi5cblx0ICovXG5cblx0cHJpdmF0ZSBnZXRFbnRpdHlGaWVsZHNJbmZvKCk6IEZpZWxkSW5mb1tdIHtcblx0XHRjb25zdCB0YWJsZUFQSSA9IHRoaXMudGFibGUuZ2V0UGFyZW50KCkgYXMgVGFibGVBUEk7XG5cdFx0Y29uc3QgY29sdW1uc0RhdGEgPSB0YWJsZUFQSS5nZXRUYWJsZURlZmluaXRpb24oKS5jb2x1bW5zO1xuXG5cdFx0Y29uc3QgcHJvcGVydGllc0tleXMgPSBuZXcgU2V0KFxuXHRcdFx0Y29sdW1uc0RhdGEucmVkdWNlKChmaWVsZHM6IHN0cmluZ1tdLCBjb2x1bW4pID0+IHtcblx0XHRcdFx0aWYgKGNvbHVtbi50eXBlID09PSBcIkFubm90YXRpb25cIikge1xuXHRcdFx0XHRcdGZpZWxkcy5wdXNoKGNvbHVtbi5uYW1lKTtcblx0XHRcdFx0fVxuXHRcdFx0XHRyZXR1cm4gZmllbGRzO1xuXHRcdFx0fSwgW10pXG5cdFx0KTtcblx0XHRyZXR1cm4gdGhpcy50cmFuc2Zvcm1QYXRoc1RvSW5mbyhwcm9wZXJ0aWVzS2V5cyk7XG5cdH1cblxuXHQvKipcblx0ICogR2V0cyBpbmZvcm1hdGlvbiBhYm91dCB0aGUgcHJvcGVydGllcyBvZiB0aGUgdGFibGUgd2hpY2ggYXJlIGNvbXBsaWFudCBmb3IgYSBNYXNzIEVkaXQuXG5cdCAqIEByZXR1cm5zIEFycmF5IG9mIHRoZSBmaWVsZCBpbmZvcm1hdGlvbi5cblx0ICovXG5cdHByaXZhdGUgZ2V0RmllbGRzSW5mbygpOiBGaWVsZEluZm9bXSB7XG5cdFx0Y29uc3QgcHJvcGVydGllc0tleXMgPVxuXHRcdFx0dGhpcy5tYW5pZmVzdFNldHRpbmdzLnZpc2libGVGaWVsZHMubGVuZ3RoID4gMFxuXHRcdFx0XHQ/IG5ldyBTZXQodGhpcy5tYW5pZmVzdFNldHRpbmdzLnZpc2libGVGaWVsZHMpXG5cdFx0XHRcdDogbmV3IFNldCh0aGlzLnRhYmxlLmdldENvbHVtbnMoKS5tYXAoKGNvbHVtbikgPT4gY29sdW1uLmdldFByb3BlcnR5S2V5KCkpKTtcblxuXHRcdGlmICh0aGlzLm1hbmlmZXN0U2V0dGluZ3MuaWdub3JlZEZpZWxkcy5sZW5ndGggPiAwKSB7XG5cdFx0XHRmb3IgKGNvbnN0IGlnbm9yZWRGaWVsZCBvZiB0aGlzLm1hbmlmZXN0U2V0dGluZ3MuaWdub3JlZEZpZWxkcykge1xuXHRcdFx0XHRwcm9wZXJ0aWVzS2V5cy5kZWxldGUoaWdub3JlZEZpZWxkKTtcblx0XHRcdH1cblx0XHR9XG5cdFx0cmV0dXJuIHRoaXMudHJhbnNmb3JtUGF0aHNUb0luZm8ocHJvcGVydGllc0tleXMpO1xuXHR9XG5cblx0LyoqXG5cdCAqIFRyYW5zZm9ybXMgYSBzZXQgb2YgcHJvcGVydHkgcGF0aHMgdG8gYW4gYXJyYXkgb2YgZmllbGQgaW5mb3JtYXRpb24uXG5cdCAqIEBwYXJhbSBwcm9wZXJ0aWVzUGF0aHMgVGhlIHNldCBvZiBwcm9wZXJ0eSBwYXRoc1xuXHQgKiBAcmV0dXJucyBBcnJheSBvZiB0aGUgZmllbGQgaW5mb3JtYXRpb24uXG5cdCAqL1xuXHRwcml2YXRlIHRyYW5zZm9ybVBhdGhzVG9JbmZvKHByb3BlcnRpZXNQYXRoczogU2V0PHN0cmluZz4pOiBGaWVsZEluZm9bXSB7XG5cdFx0cmV0dXJuIEFycmF5LmZyb20ocHJvcGVydGllc1BhdGhzKS5yZWR1Y2UoKGNvbHVtbkluZm9zOiBGaWVsZEluZm9bXSwgcHJvcGVydHlQYXRoKSA9PiB7XG5cdFx0XHRjb25zdCBjb2x1bW5JbmZvID0gdGhpcy5nZXRGaWVsZEluZm8ocHJvcGVydHlQYXRoKTtcblx0XHRcdGlmIChjb2x1bW5JbmZvKSB7XG5cdFx0XHRcdGNvbHVtbkluZm9zLnB1c2goY29sdW1uSW5mbyk7XG5cdFx0XHR9XG5cdFx0XHRyZXR1cm4gY29sdW1uSW5mb3M7XG5cdFx0fSwgW10pO1xuXHR9XG5cblx0LyoqXG5cdCAqIEdldHMgaW5mb3JtYXRpb24gYWJvdXQgYSBwcm9wZXJ0eS5cblx0ICogQHBhcmFtIHByb3BlcnR5UGF0aFxuXHQgKiBAcmV0dXJucyBGaWVsZCBpbmZvcm1hdGlvbi5cblx0ICovXG5cdHByaXZhdGUgZ2V0RmllbGRJbmZvKHByb3BlcnR5UGF0aDogc3RyaW5nKTogRmllbGRJbmZvIHwgdW5kZWZpbmVkIHtcblx0XHRjb25zdCBjb2x1bW5zRGF0YSA9ICh0aGlzLnRhYmxlLmdldFBhcmVudCgpIGFzIFRhYmxlQVBJKS5nZXRUYWJsZURlZmluaXRpb24oKS5jb2x1bW5zO1xuXHRcdGNvbnN0IG1ldGFNb2RlbCA9ICh0aGlzLnRhYmxlLmdldE1vZGVsKCkgYXMgT0RhdGFNb2RlbCkuZ2V0TWV0YU1vZGVsKCk7XG5cdFx0Y29uc3QgZW50aXR5UGF0aCA9IG1ldGFNb2RlbC5nZXRNZXRhUGF0aCh0aGlzLnRhYmxlLmRhdGEoXCJtZXRhUGF0aFwiKSk7XG5cdFx0Y29uc3QgZW50aXR5U2V0RGF0YU1vZGVsID0gZ2V0SW52b2x2ZWREYXRhTW9kZWxPYmplY3RzKG1ldGFNb2RlbC5nZXRDb250ZXh0KGVudGl0eVBhdGgpKTtcblx0XHRjb25zdCByZWxhdGVkQ29sdW1uSW5mbyA9IGNvbHVtbnNEYXRhLmZpbmQoKGZpZWxkSW5mbykgPT4gZmllbGRJbmZvLm5hbWUgPT09IHByb3BlcnR5UGF0aCAmJiBmaWVsZEluZm8udHlwZSA9PT0gXCJBbm5vdGF0aW9uXCIpO1xuXHRcdGlmIChyZWxhdGVkQ29sdW1uSW5mbykge1xuXHRcdFx0Y29uc3QgYW5ub3RhdGlvblBhdGggPSAocmVsYXRlZENvbHVtbkluZm8gYXMgQW5ub3RhdGlvblRhYmxlQ29sdW1uKS5hbm5vdGF0aW9uUGF0aDtcblx0XHRcdGlmIChhbm5vdGF0aW9uUGF0aCAmJiBwcm9wZXJ0eVBhdGgpIHtcblx0XHRcdFx0Y29uc3QgcHJvcGVydHlEYXRhTW9kZWwgPSBlbmhhbmNlRGF0YU1vZGVsUGF0aDxQcm9wZXJ0eT4oZW50aXR5U2V0RGF0YU1vZGVsLCBwcm9wZXJ0eVBhdGgpO1xuXHRcdFx0XHRjb25zdCBjb252ZXJ0ZWRBbm5vdGF0aW9uID0gY29udmVydE1ldGFNb2RlbENvbnRleHQobWV0YU1vZGVsLmdldENvbnRleHQoYW5ub3RhdGlvblBhdGgpKSBhc1xuXHRcdFx0XHRcdHwgRGF0YUZpZWxkXG5cdFx0XHRcdFx0fCBEYXRhRmllbGRGb3JBbm5vdGF0aW9uXG5cdFx0XHRcdFx0fCBEYXRhRmllbGRGb3JBY3Rpb247XG5cdFx0XHRcdGNvbnN0IHRhcmdldFByb3BlcnR5ID0gdGhpcy5nZXRDb21wbGlhbnRQcm9wZXJ0eShwcm9wZXJ0eURhdGFNb2RlbCwgY29udmVydGVkQW5ub3RhdGlvbik7XG5cdFx0XHRcdGlmICh0YXJnZXRQcm9wZXJ0eSAmJiBlbnRpdHlTZXREYXRhTW9kZWwudGFyZ2V0RW50aXR5VHlwZS5lbnRpdHlQcm9wZXJ0aWVzLmluY2x1ZGVzKHRhcmdldFByb3BlcnR5KSlcblx0XHRcdFx0XHRyZXR1cm4ge1xuXHRcdFx0XHRcdFx0a2V5OiByZWxhdGVkQ29sdW1uSW5mby5rZXksXG5cdFx0XHRcdFx0XHRwcm9wZXJ0eURhdGFNb2RlbCxcblx0XHRcdFx0XHRcdHRhcmdldFByb3BlcnR5LFxuXHRcdFx0XHRcdFx0bGFiZWw6IHJlbGF0ZWRDb2x1bW5JbmZvLmxhYmVsID8/IHJlbGF0ZWRDb2x1bW5JbmZvLmtleSxcblx0XHRcdFx0XHRcdGNvbnZlcnRlZEFubm90YXRpb25cblx0XHRcdFx0XHR9O1xuXHRcdFx0fVxuXHRcdH1cblx0XHRyZXR1cm4gdW5kZWZpbmVkO1xuXHR9XG5cblx0LyoqXG5cdCAqIEdldHMgdGhlIHByb3BlcnR5IHRvIGRpc3BsYXkgb24gdGhlIERpYWxvZy5cblx0ICogQHBhcmFtIHByb3BlcnR5RGF0YU1vZGVsIFRoZSBkYXRhTW9kZWxPYmplY3RQYXRoIG9mIHRoZSBjb2x1bW5cblx0ICogQHBhcmFtIGFubm90YXRpb24gIFRoZSBjb252ZXJ0ZWQgYW5ub3RhdGlvbiBvZiB0aGUgY29sdW1uXG5cdCAqIEByZXR1cm5zIFRoZSBwcm9wZXJ0eSBpZiBpdCBpcyBjb21wbGlhbnQsIHVuZGVmaW5lZCBvdGhlcndpc2Vcblx0ICovXG5cdHByaXZhdGUgZ2V0Q29tcGxpYW50UHJvcGVydHkocHJvcGVydHlEYXRhTW9kZWw6IERhdGFNb2RlbE9iamVjdFBhdGg8UHJvcGVydHk+LCBhbm5vdGF0aW9uOiBEYXRhRmllbGRUeXBlcyk6IFByb3BlcnR5IHwgdW5kZWZpbmVkIHtcblx0XHRjb25zdCB0YXJnZXRPYmplY3QgPSBwcm9wZXJ0eURhdGFNb2RlbC50YXJnZXRPYmplY3Q7XG5cdFx0bGV0IHRhcmdldFByb3BlcnR5OiBQcm9wZXJ0eTtcblx0XHRpZiAoaXNQcm9wZXJ0eSh0YXJnZXRPYmplY3QpKSB7XG5cdFx0XHR0YXJnZXRQcm9wZXJ0eSA9IHRhcmdldE9iamVjdDtcblx0XHRcdGlmICh0YXJnZXRPYmplY3QuYW5ub3RhdGlvbnMuVUk/LklzSW1hZ2VVUkwpIHtcblx0XHRcdFx0cmV0dXJuO1xuXHRcdFx0fVxuXHRcdH0gZWxzZSBpZiAoaXNEYXRhRmllbGRUeXBlcyhhbm5vdGF0aW9uKSAmJiAhYW5ub3RhdGlvbi5oYXNPd25Qcm9wZXJ0eShcIkFjdGlvblwiKSkge1xuXHRcdFx0dGFyZ2V0UHJvcGVydHkgPSBhbm5vdGF0aW9uLlZhbHVlLiR0YXJnZXQ7XG5cdFx0fSBlbHNlIHtcblx0XHRcdHJldHVybjtcblx0XHR9XG5cblx0XHQvLyBDaGVjayBpZiB0aGUgZmllbGQgaXMgY29tcGxpYW50IGZvciB0aGUgTWFzc0VkaXRcblx0XHRjb25zdCB1bml0UHJvcGVydHkgPSBnZXRBc3NvY2lhdGVkVW5pdFByb3BlcnR5KHRhcmdldFByb3BlcnR5KTtcblx0XHRpZiAoXG5cdFx0XHRpc011bHRpVmFsdWVGaWVsZChwcm9wZXJ0eURhdGFNb2RlbCkgfHxcblx0XHRcdChoYXNWYWx1ZUhlbHAodGFyZ2V0UHJvcGVydHkpICYmIHRhcmdldFByb3BlcnR5LmFubm90YXRpb25zPy5Db21tb24/LlZhbHVlTGlzdFJlbGV2YW50UXVhbGlmaWVycykgfHwgLy8gY29udGV4dCBkZXBlbmRlbnQgVkggaXMgbm90IHN1cHBvcnRlZCBmb3IgTWFzcyBFZGl0LlxuXHRcdFx0KHVuaXRQcm9wZXJ0eSAmJiBoYXNWYWx1ZUhlbHAodW5pdFByb3BlcnR5KSAmJiB1bml0UHJvcGVydHkuYW5ub3RhdGlvbnM/LkNvbW1vbj8uVmFsdWVMaXN0UmVsZXZhbnRRdWFsaWZpZXJzKVxuXHRcdCkge1xuXHRcdFx0cmV0dXJuO1xuXHRcdH1cblx0XHRyZXR1cm4gdGFyZ2V0UHJvcGVydHk7XG5cdH1cblxuXHQvKipcblx0ICogQ2hlY2tzIGlmIHRoZSBmaWVsZCBpcyBoaWRkZW4gZm9yIHRoZSBwcm92aWRlZCBjb250ZXh0cy5cblx0ICogQHBhcmFtIGV4cEJpbmRpbmcgVGhlIGV4cHJlc3Npb24gYmluZGluZyBvZiB0aGUgcHJvcGVydHkuXG5cdCAqIEByZXR1cm5zIFRydWUgaWYgdGhlIGZpZWxkIGlzIGhpZGRlbiBmb3IgYWxsIGNvbnRleHRzLCBmYWxzZSBvdGhlcndpc2Vcblx0ICovXG5cdHByaXZhdGUgaXNIaWRkZW5Gb3JDb250ZXh0cyhleHBCaW5kaW5nOiBDb21waWxlZEJpbmRpbmdUb29sa2l0RXhwcmVzc2lvbik6IGJvb2xlYW4ge1xuXHRcdGlmIChleHBCaW5kaW5nID09PSBcInRydWVcIikge1xuXHRcdFx0cmV0dXJuIGZhbHNlO1xuXHRcdH0gZWxzZSBpZiAoZXhwQmluZGluZyA9PT0gXCJmYWxzZVwiKSB7XG5cdFx0XHRyZXR1cm4gdHJ1ZTtcblx0XHR9XG5cdFx0Y29uc3QgYW55T2JqZWN0ID0gbmV3IEFueSh7IGFueUJvb2xlYW46IGV4cEJpbmRpbmcgfSk7XG5cdFx0YW55T2JqZWN0LnNldE1vZGVsKHRoaXMuYW5hbHl6ZWRDb250ZXh0c1swXS5nZXRNb2RlbCgpKTtcblx0XHRjb25zdCBpc0hpZGRlbiA9ICF0aGlzLmFuYWx5emVkQ29udGV4dHMuZmluZCgoY29udGV4dCkgPT4ge1xuXHRcdFx0YW55T2JqZWN0LnNldEJpbmRpbmdDb250ZXh0KGNvbnRleHQpO1xuXHRcdFx0cmV0dXJuIChhbnlPYmplY3QuZ2V0QmluZGluZyhcImFueUJvb2xlYW5cIikgYXMgUHJvcGVydHlCaW5kaW5nKS5nZXRFeHRlcm5hbFZhbHVlKCk7XG5cdFx0fSk7XG5cdFx0YW55T2JqZWN0LmRlc3Ryb3koKTtcblx0XHRyZXR1cm4gaXNIaWRkZW47XG5cdH1cblxuXHQvKipcblx0ICogR2V0cyB0aGUgc2VsZWN0ZWQgY29udGV4dCBzZXQgYXMgdXBkYXRhYmxlLlxuXHQgKiBAcmV0dXJucyBUaGUgY29udGV4dHMuXG5cdCAqL1xuXHRwcml2YXRlIGZldGNoQ29udGV4dHNGb3JFZGl0KCk6IE9EYXRhVjRDb250ZXh0W10ge1xuXHRcdGNvbnN0IGludGVybmFsTW9kZWxDb250ZXh0ID0gdGhpcy50YWJsZS5nZXRCaW5kaW5nQ29udGV4dChcImludGVybmFsXCIpLFxuXHRcdFx0dXBkYXRhYmxlQ29udGV4dFByb3BlcnR5ID0gIXRoaXMub25Db250ZXh0TWVudSA/IFwidXBkYXRhYmxlQ29udGV4dHNcIiA6IFwiY29udGV4dG1lbnUvdXBkYXRhYmxlQ29udGV4dHNcIjtcblx0XHRyZXR1cm4gaW50ZXJuYWxNb2RlbENvbnRleHQ/LmdldFByb3BlcnR5KHVwZGF0YWJsZUNvbnRleHRQcm9wZXJ0eSkgPz8gW107XG5cdH1cblxuXHQvKipcblx0ICogR2V0cyB0aGUgcHJvcGVydGllcyBvZiB0aGUgbWFzcyBlZGl0IGZpZWxkcy5cblx0ICogQHJldHVybnMgVGhlIHByb3BlcnRpZXMgb2YgdGhlIG1hc3MgZWRpdCBmaWVsZC5cblx0ICovXG5cdGdldEZpZWxkUHJvcGVydGllcygpOiBNYXNzRmllbGRQcm9wZXJ0aWVzW10ge1xuXHRcdHJldHVybiBkZWVwQ2xvbmUodGhpcy5maWVsZFByb3BlcnRpZXMpO1xuXHR9XG5cblx0LyoqXG5cdCAqIEdldHMgdGhlIHByb3BlcnRpZXMgb2YgdGhlIG1hc3MgZWRpdCBmaWVsZHMgZnJvbSBhbiBhcnJheSBvZiBmaWVsZCBpbmZvcm1hdGlvbi5cblx0ICogQHBhcmFtIGZpZWxkc0luZm8gVGhlIGZpZWxkIGluZm9ybWF0aW9uLlxuXHQgKiBAcmV0dXJucyBUaGUgcHJvcGVydGllcyBvZiB0aGUgbWFzcyBlZGl0IGZpZWxkcy5cblx0ICovXG5cdHByaXZhdGUgYXN5bmMgZ2V0RmllbGRzUHJvcGVydGllc0Zyb21JbmZvKGZpZWxkc0luZm86IEZpZWxkSW5mb1tdKTogUHJvbWlzZTxNYXNzRmllbGRQcm9wZXJ0aWVzW10+IHtcblx0XHRjb25zdCBmaWVsZFByb3BlcnRpZXM6IE1hc3NGaWVsZFByb3BlcnRpZXNbXSA9IFtdO1xuXG5cdFx0Zm9yIChjb25zdCBmaWVsZEluZm8gb2YgZmllbGRzSW5mbykge1xuXHRcdFx0Y29uc3QgeyB0YXJnZXRQcm9wZXJ0eSwgcHJvcGVydHlEYXRhTW9kZWwsIGNvbnZlcnRlZEFubm90YXRpb24gfSA9IGZpZWxkSW5mbztcblx0XHRcdGNvbnN0IGRhdGFQcm9wZXJ0eVBhdGggPSBnZXRDb250ZXh0UmVsYXRpdmVUYXJnZXRPYmplY3RQYXRoKHByb3BlcnR5RGF0YU1vZGVsKTtcblx0XHRcdGlmIChkYXRhUHJvcGVydHlQYXRoKSB7XG5cdFx0XHRcdGNvbnN0IHVuaXRPckN1cnJlbmN5UHJvcGVydHlQYXRoID1cblx0XHRcdFx0XHRnZXRBc3NvY2lhdGVkVW5pdFByb3BlcnR5UGF0aCh0YXJnZXRQcm9wZXJ0eSkgfHwgZ2V0QXNzb2NpYXRlZEN1cnJlbmN5UHJvcGVydHlQYXRoKHRhcmdldFByb3BlcnR5KTtcblx0XHRcdFx0Y29uc3QgaW5wdXRUeXBlID0gdGhpcy5nZXRJbnB1dFR5cGUoY29udmVydGVkQW5ub3RhdGlvbiwgcHJvcGVydHlEYXRhTW9kZWwpO1xuXHRcdFx0XHRpZiAoaW5wdXRUeXBlICYmIHByb3BlcnR5RGF0YU1vZGVsLnRhcmdldE9iamVjdCkge1xuXHRcdFx0XHRcdGNvbnN0IHJlbGF0aXZlUGF0aCA9IGdldFJlbGF0aXZlUGF0aHMocHJvcGVydHlEYXRhTW9kZWwpO1xuXHRcdFx0XHRcdGNvbnN0IGZpZWxkRGF0YSA9IHtcblx0XHRcdFx0XHRcdHZpc2liaWxpdHlCaW5kaW5nczoge1xuXHRcdFx0XHRcdFx0XHRpc1Zpc2libGU6IGNvbXBpbGVFeHByZXNzaW9uKGlzVmlzaWJsZShjb252ZXJ0ZWRBbm5vdGF0aW9uKSksXG5cdFx0XHRcdFx0XHRcdGVkaXRNb2RlOiBnZXRFZGl0TW9kZShcblx0XHRcdFx0XHRcdFx0XHR0YXJnZXRQcm9wZXJ0eSxcblx0XHRcdFx0XHRcdFx0XHRwcm9wZXJ0eURhdGFNb2RlbCxcblx0XHRcdFx0XHRcdFx0XHRmYWxzZSxcblx0XHRcdFx0XHRcdFx0XHRmYWxzZSxcblx0XHRcdFx0XHRcdFx0XHRjb252ZXJ0ZWRBbm5vdGF0aW9uLFxuXHRcdFx0XHRcdFx0XHRcdGNvbnN0YW50KHRydWUpXG5cdFx0XHRcdFx0XHRcdCkgYXMgQ29tcGlsZWRCaW5kaW5nVG9vbGtpdEV4cHJlc3Npb25cblx0XHRcdFx0XHRcdH0sXG5cdFx0XHRcdFx0XHR2aXNpYmxlOiB0cnVlLCAvL2J5IGRlZmF1bHQgdGhlIGZpZWxkIGlzIHZpc2libGVcblx0XHRcdFx0XHRcdGxhYmVsOiBmaWVsZEluZm8ubGFiZWwgfHwgKHRhcmdldFByb3BlcnR5LmFubm90YXRpb25zLkNvbW1vbj8uTGFiZWwgYXMgc3RyaW5nIHwgdW5kZWZpbmVkKSB8fCBkYXRhUHJvcGVydHlQYXRoLFxuXHRcdFx0XHRcdFx0aXNGaWVsZFJlcXVpcmVkOiBnZXRSZXF1aXJlZEV4cHJlc3Npb24oXG5cdFx0XHRcdFx0XHRcdHRhcmdldFByb3BlcnR5LFxuXHRcdFx0XHRcdFx0XHRjb252ZXJ0ZWRBbm5vdGF0aW9uLFxuXHRcdFx0XHRcdFx0XHR0cnVlLFxuXHRcdFx0XHRcdFx0XHRmYWxzZSxcblx0XHRcdFx0XHRcdFx0e30sXG5cdFx0XHRcdFx0XHRcdHByb3BlcnR5RGF0YU1vZGVsXG5cdFx0XHRcdFx0XHQpIGFzIENvbXBpbGVkQmluZGluZ1Rvb2xraXRFeHByZXNzaW9uLFxuXHRcdFx0XHRcdFx0ZGVzY3JpcHRpb25QYXRoOiBnZXRBc3NvY2lhdGVkVGV4dFByb3BlcnR5UGF0aChwcm9wZXJ0eURhdGFNb2RlbC50YXJnZXRPYmplY3QpLFxuXHRcdFx0XHRcdFx0dGV4dEJpbmRpbmc6IHtcblx0XHRcdFx0XHRcdFx0ZXhwcmVzc2lvbjogZ2V0VGV4dEJpbmRpbmcocHJvcGVydHlEYXRhTW9kZWwsIHtcblx0XHRcdFx0XHRcdFx0XHRkaXNwbGF5TW9kZTogZ2V0RGlzcGxheU1vZGUodGFyZ2V0UHJvcGVydHksIHByb3BlcnR5RGF0YU1vZGVsKVxuXHRcdFx0XHRcdFx0XHR9KSBhcyBDb21waWxlZEJpbmRpbmdUb29sa2l0RXhwcmVzc2lvbixcblx0XHRcdFx0XHRcdFx0dHlwZTpcblx0XHRcdFx0XHRcdFx0XHR0YXJnZXRQcm9wZXJ0eS50eXBlID09PSBcIkVkbS5EYXRlVGltZU9mZnNldFwiIHx8IHRhcmdldFByb3BlcnR5Py5hbm5vdGF0aW9ucz8uQ29tbW9uPy5Jc1RpbWV6b25lXG5cdFx0XHRcdFx0XHRcdFx0XHQ/IFwiYW55VGV4dFwiXG5cdFx0XHRcdFx0XHRcdFx0XHQ6IFwiYW55XCJcblx0XHRcdFx0XHRcdH0sXG5cdFx0XHRcdFx0XHRyZWFkT25seUV4cHJlc3Npb246IGlzUmVhZE9ubHlFeHByZXNzaW9uKHRhcmdldFByb3BlcnR5LCByZWxhdGl2ZVBhdGgpLFxuXHRcdFx0XHRcdFx0aW5wdXRUeXBlLFxuXHRcdFx0XHRcdFx0cHJvcGVydHlJbmZvOiB7XG5cdFx0XHRcdFx0XHRcdGNsZWFyYWJsZTogdGhpcy5pc1Byb3BlcnR5Q2xlYXJhYmxlKHRhcmdldFByb3BlcnR5KSxcblx0XHRcdFx0XHRcdFx0ZW1wdHlWYWx1ZTogdGhpcy5nZXRFbXB0eVZhbHVlRm9yUHJvcGVydHkodGFyZ2V0UHJvcGVydHksIGRhdGFQcm9wZXJ0eVBhdGgpLFxuXHRcdFx0XHRcdFx0XHRrZXk6IGZpZWxkSW5mby5rZXksXG5cdFx0XHRcdFx0XHRcdHJlbGF0aXZlUGF0aDogZGF0YVByb3BlcnR5UGF0aCxcblx0XHRcdFx0XHRcdFx0dW5pdE9yQ3VycmVuY3lQcm9wZXJ0eVBhdGhcblx0XHRcdFx0XHRcdH0sXG5cdFx0XHRcdFx0XHRzZWxlY3RJdGVtczogW10gYXMgU2VsZWN0SW5mb1tdXG5cdFx0XHRcdFx0fTtcblx0XHRcdFx0XHRmaWVsZFByb3BlcnRpZXMucHVzaChmaWVsZERhdGEpO1xuXHRcdFx0XHR9XG5cdFx0XHR9XG5cdFx0fVxuXHRcdGF3YWl0IHRoaXMuZ2V0RGF0YUZvck9wZW5pbmdEaWFsb2coZmllbGRQcm9wZXJ0aWVzKTtcblx0XHRhd2FpdCBQcm9taXNlLmFsbChcblx0XHRcdGZpZWxkUHJvcGVydGllcy5tYXAoYXN5bmMgKGZpZWxkRGF0YSkgPT4ge1xuXHRcdFx0XHRmaWVsZERhdGEudmlzaWJsZSA9IHRoaXMubWFuaWZlc3RTZXR0aW5ncy52aXNpYmxlRmllbGRzLmxlbmd0aCA9PT0gMCA/IHRoaXMuaXNGaWVsZFZpc2libGUoZmllbGREYXRhKSA6IHRydWU7XG5cdFx0XHRcdGNvbnN0IHJ1bnRpbWVTZWxlY3Rpb24gPSAhdGhpcy5pc0FkYXB0YXRpb24gPyBhd2FpdCB0aGlzLmdldFJ1bnRpbWVTZWxlY3Rpb24oZmllbGREYXRhKSA6IFtdO1xuXHRcdFx0XHRmaWVsZERhdGEuc2VsZWN0SXRlbXMgPSBbLi4udGhpcy5nZXREZWZhdWx0U2VsZWN0T3B0aW9ucyhmaWVsZERhdGEpLCAuLi5ydW50aW1lU2VsZWN0aW9uXTtcblx0XHRcdH0pXG5cdFx0KTtcblx0XHRyZXR1cm4gZmllbGRQcm9wZXJ0aWVzO1xuXHR9XG5cblx0LyoqXG5cdCAqIEdldHMgdGhlIHByb3BlcnRpZXMgb2YgZGlhbG9nIGZpZWxkcy5cblx0ICogQHJldHVybnMgVGhlIHByb3BlcnRpZXMuXG5cdCAqL1xuXHRhc3luYyBnZW5lcmF0ZUZpZWxkc1Byb3BlcnRpZXMoKTogUHJvbWlzZTxNYXNzRmllbGRQcm9wZXJ0aWVzW10+IHtcblx0XHRyZXR1cm4gdGhpcy5nZXRGaWVsZHNQcm9wZXJ0aWVzRnJvbUluZm8odGhpcy5nZXRGaWVsZHNJbmZvKCkpO1xuXHR9XG5cblx0LyoqXG5cdCAqIEdldHMgdGhlIHByb3BlcnRpZXMgb2YgdGhlIGVudGl0eS5cblx0ICogQHJldHVybnMgVGhlIHByb3BlcnRpZXMuXG5cdCAqL1xuXHRhc3luYyBnZW5lcmF0ZUVudGl0eUZpZWxkc1Byb3BlcnRpZXMoKTogUHJvbWlzZTxNYXNzRmllbGRQcm9wZXJ0aWVzW10+IHtcblx0XHRyZXR1cm4gdGhpcy5nZXRGaWVsZHNQcm9wZXJ0aWVzRnJvbUluZm8odGhpcy5nZXRFbnRpdHlGaWVsZHNJbmZvKCkpO1xuXHR9XG5cblx0LyoqXG5cdCAqIEdldHMgdGhlIHJlbGV2YW50IGRhdGEgZnJvbSB0aGUgbW9kZWwgbmVlZGVkIGFmdGVyIHRoZSBvcGVuaW5nIG9mIHRoZSBkaWFsb2cuXG5cdCAqIFRoaXMgbWV0aG9kIGlzIGNhbGxlZCBvbmx5IGluIHRoZSBkZWdyYWRlZCBtb2RlIHNpbmNlIHRoZSBkYXRhIGlzIGFscmVhZHkgZmV0Y2hlZCBpbiB0aGUgbm9ybWFsIG1vZGUuXG5cdCAqIHRoZSBkZWdyYWRlZCBtb2RlIGlzIHNldCB3aGVuIHRoZSBudW1iZXIgb2Ygc2VsZWN0ZWQgY29udGV4dHMgaXMgZ3JlYXRlciB0aGFuIHRoZSBtYXggYW5hbHl6ZWQgcm93cy5cblx0ICogQHBhcmFtIGZpZWxkUHJvcGVydGllcyBUaGUgZmllbGQgcHJvcGVydGllc1xuXHQgKiBAcmV0dXJucyBBIHByb21pc2UgdGhhdCByZXNvbHZlcyB3aGVuIHRoZSBkYXRhIGlzIGZldGNoZWQuXG5cdCAqL1xuXHRwcml2YXRlIGFzeW5jIGdldERhdGFBZnRlck9wZW5pbmdEaWFsb2coZmllbGRQcm9wZXJ0aWVzOiBNYXNzRmllbGRQcm9wZXJ0aWVzW10pOiBQcm9taXNlPHZvaWQ+IHtcblx0XHRpZiAodGhpcy5kZWdyYWRlZE1vZGUpIHtcblx0XHRcdGNvbnN0IG1pc3NpbmdDb250ZXh0cyA9IHRoaXMuY29udGV4dHMuc2xpY2UodGhpcy5tYXhBbmFseXplZFJvd3MsIHRoaXMuY29udGV4dHMubGVuZ3RoKTtcblx0XHRcdGNvbnN0IGJpbmRpbmdzVG9GZXRjaCA9IChbXSBhcyBCaW5kaW5nVG9GZXRjaFtdKS5jb25jYXQoXG5cdFx0XHRcdC4uLmZpZWxkUHJvcGVydGllcy5tYXAoKGZpZWxkRGF0YSkgPT4gW1xuXHRcdFx0XHRcdHsgZXhwcmVzc2lvbjogY29tcGlsZUV4cHJlc3Npb24oZmllbGREYXRhLnJlYWRPbmx5RXhwcmVzc2lvbiksIGNvbnRleHRzOiB0aGlzLmNvbnRleHRzIH0sXG5cdFx0XHRcdFx0e1xuXHRcdFx0XHRcdFx0ZXhwcmVzc2lvbjogY29tcGlsZUV4cHJlc3Npb24ocGF0aEluTW9kZWwoZmllbGREYXRhLnByb3BlcnR5SW5mby5yZWxhdGl2ZVBhdGgpKSxcblx0XHRcdFx0XHRcdGNvbnRleHRzOiBtaXNzaW5nQ29udGV4dHMsXG5cdFx0XHRcdFx0XHR0eXBlOiBmaWVsZERhdGEudGV4dEJpbmRpbmcudHlwZVxuXHRcdFx0XHRcdH0sXG5cdFx0XHRcdFx0e1xuXHRcdFx0XHRcdFx0ZXhwcmVzc2lvbjogY29tcGlsZUV4cHJlc3Npb24ocGF0aEluTW9kZWwoZmllbGREYXRhLnByb3BlcnR5SW5mby51bml0T3JDdXJyZW5jeVByb3BlcnR5UGF0aCkpLFxuXHRcdFx0XHRcdFx0Y29udGV4dHM6IG1pc3NpbmdDb250ZXh0c1xuXHRcdFx0XHRcdH1cblx0XHRcdFx0XSlcblx0XHRcdCk7XG5cdFx0XHRhd2FpdCB0aGlzLmdldE1pc3NpbmdEYXRhKGJpbmRpbmdzVG9GZXRjaCk7XG5cdFx0fVxuXHR9XG5cblx0LyoqXG5cdCAqIEdldHMgdGhlIHJlbGV2YW50IGRhdGEgZnJvbSB0aGUgbW9kZWwgbmVlZGVkIHRvIG9wZW4gdGhlIGRpYWxvZy5cblx0ICogQHBhcmFtIGZpZWxkUHJvcGVydGllcyBUaGUgZmllbGQgcHJvcGVydGllc1xuXHQgKiBAcmV0dXJucyBBIHByb21pc2UgdGhhdCByZXNvbHZlcyB3aGVuIHRoZSBkYXRhIGlzIGZldGNoZWQuXG5cdCAqL1xuXHRwcml2YXRlIGFzeW5jIGdldERhdGFGb3JPcGVuaW5nRGlhbG9nKGZpZWxkUHJvcGVydGllczogTWFzc0ZpZWxkUHJvcGVydGllc1tdKTogUHJvbWlzZTx2b2lkPiB7XG5cdFx0Y29uc3QgYmluZGluZ3NUb1Jlc29sdmUgPSAoW10gYXMgQmluZGluZ1RvRmV0Y2hbXSkuY29uY2F0KFxuXHRcdFx0ZmllbGRQcm9wZXJ0aWVzLnJlZHVjZSgoYmluZGluZ3M6IEJpbmRpbmdUb0ZldGNoW10sIGZpZWxkRGF0YSkgPT4ge1xuXHRcdFx0XHRiaW5kaW5ncyA9IGJpbmRpbmdzLmNvbmNhdChbXG5cdFx0XHRcdFx0e1xuXHRcdFx0XHRcdFx0ZXhwcmVzc2lvbjogZmllbGREYXRhLnRleHRCaW5kaW5nLmV4cHJlc3Npb24sXG5cdFx0XHRcdFx0XHR0eXBlOiBmaWVsZERhdGEudGV4dEJpbmRpbmcudHlwZVxuXHRcdFx0XHRcdH0sXG5cdFx0XHRcdFx0e1xuXHRcdFx0XHRcdFx0ZXhwcmVzc2lvbjogY29tcGlsZUV4cHJlc3Npb24ocGF0aEluTW9kZWwoZmllbGREYXRhLnByb3BlcnR5SW5mby5yZWxhdGl2ZVBhdGgpKSxcblx0XHRcdFx0XHRcdHR5cGU6IGZpZWxkRGF0YS50ZXh0QmluZGluZy50eXBlXG5cdFx0XHRcdFx0fSxcblx0XHRcdFx0XHR7IGV4cHJlc3Npb246IGNvbXBpbGVFeHByZXNzaW9uKHBhdGhJbk1vZGVsKGZpZWxkRGF0YS5wcm9wZXJ0eUluZm8udW5pdE9yQ3VycmVuY3lQcm9wZXJ0eVBhdGgpKSB9XG5cdFx0XHRcdF0pO1xuXHRcdFx0XHRpZiAoIXRoaXMubWFuaWZlc3RTZXR0aW5ncy52aXNpYmxlRmllbGRzLmxlbmd0aCkge1xuXHRcdFx0XHRcdGJpbmRpbmdzID0gYmluZGluZ3MuY29uY2F0KFtcblx0XHRcdFx0XHRcdHsgZXhwcmVzc2lvbjogZmllbGREYXRhLnZpc2liaWxpdHlCaW5kaW5ncy5pc1Zpc2libGUgfSxcblx0XHRcdFx0XHRcdHsgZXhwcmVzc2lvbjogZmllbGREYXRhLnZpc2liaWxpdHlCaW5kaW5ncy5lZGl0TW9kZSB9XG5cdFx0XHRcdFx0XSk7XG5cdFx0XHRcdH1cblx0XHRcdFx0aWYgKCF0aGlzLmRlZ3JhZGVkTW9kZSkge1xuXHRcdFx0XHRcdGJpbmRpbmdzLnB1c2goeyBleHByZXNzaW9uOiBjb21waWxlRXhwcmVzc2lvbihmaWVsZERhdGEucmVhZE9ubHlFeHByZXNzaW9uKSB9KTtcblx0XHRcdFx0fVxuXHRcdFx0XHRyZXR1cm4gYmluZGluZ3M7XG5cdFx0XHR9LCBbXSlcblx0XHQpO1xuXHRcdGF3YWl0IHRoaXMuZ2V0TWlzc2luZ0RhdGEoYmluZGluZ3NUb1Jlc29sdmUpO1xuXHR9XG5cblx0LyoqXG5cdCAqIEdldHMgdGhlIG1pc3NpbmcgZGF0YSBmb3IgdGhlIGZpZWxkcy5cblx0ICogVGhpcyBtZXRob2QgZ2VuZXJhdGVzIGNvbnRyb2xzIHdpdGggdGhlIHByb3ZpZGVkIGJpbmRpbmdzIHRvIGZldGNoIHRoZSBtaXNzaW5nIGRhdGEuXG5cdCAqIFRoZSBtb2RlbCByZXF1ZXN0cyB0aGUgZGF0YSB0byB0aGUgYmFja2VuZCB3aGVuIHRoZSBjb250ZXh0cyBkb2Vzbid0IGNvbnRhaW5zIHRoZSByZWxhdGVkIHByb3BlcnRpZXMuXG5cdCAqIEBwYXJhbSBiaW5kaW5nc1RvRmV0Y2ggVGhlIGJpbmRpbmcgdG8gcmVzb2x2ZSBhbmQgaXRzIHByb3BlcnR5IHBhdGggcmVmZXJlbmNlXG5cdCAqIEByZXR1cm5zIEEgcHJvbWlzZSB0aGF0IHJlc29sdmVzIHdoZW4gdGhlIGRhdGEgaXMgZmV0Y2hlZC5cblx0ICovXG5cdHByaXZhdGUgYXN5bmMgZ2V0TWlzc2luZ0RhdGEoYmluZGluZ3NUb0ZldGNoOiBCaW5kaW5nVG9GZXRjaFtdKTogUHJvbWlzZTx1bmRlZmluZWQ+IHtcblx0XHRpZiAodGhpcy5pc0FkYXB0YXRpb24pIHtcblx0XHRcdHJldHVybjtcblx0XHR9XG5cdFx0aWYgKHRoaXMudmlldy5nZXRWaWV3RGF0YSgpLmNvbnZlcnRlclR5cGUgPT09IFwiT2JqZWN0UGFnZVwiKSB7XG5cdFx0XHRjb25zdCBkaXNwbGF5ZWRQcm9wZXJ0aWVzID0gdGhpcy50YWJsZS5nZXRDb2x1bW5zKCkubWFwKChjb2x1bW4pID0+IGNvbHVtbi5nZXRQcm9wZXJ0eUtleSgpKTtcblx0XHRcdGlmICh0aGlzLm1hbmlmZXN0U2V0dGluZ3MudmlzaWJsZUZpZWxkcy5ldmVyeSgoZmllbGQpID0+IGRpc3BsYXllZFByb3BlcnRpZXMuaW5jbHVkZXMoZmllbGQpKSkge1xuXHRcdFx0XHRyZXR1cm47XG5cdFx0XHR9XG5cdFx0fVxuXHRcdGNvbnN0IHByb21pc2VzID0gW107XG5cdFx0Y29uc3QgY29udHJvbHMgPSBbXTtcblx0XHRjb25zdCBtb2RlbCA9IHRoaXMuY29udGV4dHNbMF0uZ2V0TW9kZWwoKTtcblx0XHRmb3IgKGNvbnN0IGJpbmRpbmcgb2YgYmluZGluZ3NUb0ZldGNoLmZpbHRlcigoYmluZGluZykgPT4gYmluZGluZy5leHByZXNzaW9uPy5zdGFydHNXaXRoKFwie1wiKSkpIHtcblx0XHRcdC8vIEF2b2lkIHRvIGZldGNoIGNvbnN0YW50IGJpbmRpbmdzXG5cdFx0XHRjb25zdCBwYXJhbWV0ZXJzID0ge30gYXMgUmVjb3JkPHN0cmluZywgQ29tcGlsZWRCaW5kaW5nVG9vbGtpdEV4cHJlc3Npb24+O1xuXHRcdFx0Y29uc3QgYW5hbHl6ZWRDb250ZXh0cyA9IGJpbmRpbmcuY29udGV4dHMgPz8gdGhpcy5hbmFseXplZENvbnRleHRzO1xuXHRcdFx0Y29uc3QgYmluZGluZ1R5cGUgPSBiaW5kaW5nLnR5cGUgPz8gXCJhbnlcIjtcblx0XHRcdHBhcmFtZXRlcnNbYmluZGluZ1R5cGVdID0gYmluZGluZy5leHByZXNzaW9uO1xuXHRcdFx0Zm9yIChjb25zdCBjb250ZXh0IG9mIGFuYWx5emVkQ29udGV4dHMpIHtcblx0XHRcdFx0Y29uc3QgY29udHJvbCA9IG5ldyBBbnkocGFyYW1ldGVycyk7XG5cdFx0XHRcdGNvbnRyb2wuc2V0TW9kZWwobW9kZWwpO1xuXHRcdFx0XHRjb250cm9sLnNldEJpbmRpbmdDb250ZXh0KGNvbnRleHQpO1xuXHRcdFx0XHRjb250cm9scy5wdXNoKGNvbnRyb2wpO1xuXHRcdFx0XHRwcm9taXNlcy5wdXNoKGFzeW5jICgpID0+IHtcblx0XHRcdFx0XHRjb25zdCBjb250cm9sQmluZGluZyA9IGNvbnRyb2wuZ2V0QmluZGluZyhiaW5kaW5nVHlwZSkgYXMgT0RhdGFQcm9wZXJ0eUJpbmRpbmcgfCB1bmRlZmluZWQ7XG5cdFx0XHRcdFx0aWYgKGNvbnRyb2xCaW5kaW5nKSB7XG5cdFx0XHRcdFx0XHRjb250cm9sQmluZGluZy5zZXRCaW5kaW5nTW9kZShCaW5kaW5nTW9kZS5PbmVUaW1lKTtcblx0XHRcdFx0XHRcdGlmIChjb250cm9sQmluZGluZy5pc0E8Q29tcG9zaXRlQmluZGluZz4oXCJzYXAudWkubW9kZWwuQ29tcG9zaXRlQmluZGluZ1wiKSkge1xuXHRcdFx0XHRcdFx0XHRhd2FpdCBQcm9taXNlLmFsbChjb250cm9sQmluZGluZy5nZXRCaW5kaW5ncygpLm1hcCgobmVzdGVkQmluZGluZykgPT4gbmVzdGVkQmluZGluZy5yZXF1ZXN0VmFsdWU/LigpKSk7XG5cdFx0XHRcdFx0XHR9IGVsc2Uge1xuXHRcdFx0XHRcdFx0XHRhd2FpdCBjb250cm9sQmluZGluZy5yZXF1ZXN0VmFsdWU/LigpO1xuXHRcdFx0XHRcdFx0fVxuXHRcdFx0XHRcdH1cblx0XHRcdFx0fSk7XG5cdFx0XHR9XG5cdFx0fVxuXHRcdGF3YWl0IFByb21pc2UuYWxsKHByb21pc2VzLm1hcChhc3luYyAocHJvbWlzZSkgPT4gcHJvbWlzZSgpKSk7XG5cdFx0Zm9yIChjb25zdCBjb250cm9sIG9mIGNvbnRyb2xzKSB7XG5cdFx0XHRjb250cm9sLmRlc3Ryb3koKTtcblx0XHR9XG5cdH1cblxuXHQvKipcblx0ICogR2V0cyB0aGUgZGVmYXVsdCB2YWx1ZSBvZiB0aGUgcHJvcGVydHkgd2hlbiB0aGUgcmVsYXRlZCBmaWVsZCBpcyBlbXB0eS5cblx0ICogQHBhcmFtIHByb3BlcnR5IFRoZSBwcm9wZXJ0eVxuXHQgKiBAcGFyYW0gcHJvcGVydHlQYXRoIFRoZSBwcm9wZXJ0eSBwYXRoXG5cdCAqIEByZXR1cm5zIFRoZSBkZWZhdWx0IHZhbHVlLlxuXHQgKi9cblx0Z2V0RW1wdHlWYWx1ZUZvclByb3BlcnR5KHByb3BlcnR5OiBQcm9wZXJ0eSwgcHJvcGVydHlQYXRoOiBzdHJpbmcpOiBQcmltaXRpdmVUeXBlIHtcblx0XHRpZiAocHJvcGVydHkubnVsbGFibGUgIT09IGZhbHNlKSB7XG5cdFx0XHRyZXR1cm4gbnVsbDtcblx0XHR9IGVsc2Uge1xuXHRcdFx0Y29uc3QgY29udGV4dCA9IHRoaXMuY29udGV4dHNbMF07XG5cdFx0XHRjb25zdCBhbnlPYmplY3QgPSBuZXcgQW55KHsgYW55OiBjb21waWxlRXhwcmVzc2lvbihmb3JtYXRXaXRoVHlwZUluZm9ybWF0aW9uKHByb3BlcnR5LCBwYXRoSW5Nb2RlbChwcm9wZXJ0eVBhdGgpKSkgfSk7XG5cdFx0XHRhbnlPYmplY3Quc2V0TW9kZWwoY29udGV4dC5nZXRNb2RlbCgpKTtcblx0XHRcdGFueU9iamVjdC5zZXRCaW5kaW5nQ29udGV4dChjb250ZXh0KTtcblx0XHRcdGNvbnN0IHZhbHVlID0gYW55T2JqZWN0LmdldEJpbmRpbmdJbmZvKFwiYW55XCIpLmJpbmRpbmcuZ2V0VHlwZSgpLnBhcnNlVmFsdWUoXCJcIiwgXCJzdHJpbmdcIik7XG5cdFx0XHRhbnlPYmplY3QuZGVzdHJveSgpO1xuXHRcdFx0cmV0dXJuIHZhbHVlO1xuXHRcdH1cblx0fVxuXG5cdC8qKlxuXHQgKiBDaGVja3MgaWYgdGhlIHByb3BlcnR5IGlzIGNsZWFyYWJsZS5cblx0ICogU29tZSBPRGF0YSB0eXBlcyBkb24ndCBhY2Nlc3MgZW1wdHkgc3RyaW5nIG9yIDAgYXMgYSB2YWxpZCB2YWx1ZSB3aGVuIGl0J3Mgbm90IG51bGxhYmxlLlxuXHQgKiBGb3IgZXhhbXBsZSwgRWRtLkRhdGVUaW1lIGRvZXNuJ3QgYWNjZXB0IGFuIGVtcHR5IHN0cmluZyBhcyBhIHZhbGlkIHZhbHVlLlxuXHQgKiBAcGFyYW0gcHJvcGVydHkgVGhlIHByb3BlcnR5XG5cdCAqIEByZXR1cm5zIFRydWUgaWYgdGhlIHByb3BlcnR5IGlzIGNsZWFyYWJsZSwgZmFsc2Ugb3RoZXJ3aXNlLlxuXHQgKi9cblx0aXNQcm9wZXJ0eUNsZWFyYWJsZShwcm9wZXJ0eTogUHJvcGVydHkpOiBQcmltaXRpdmVUeXBlIHtcblx0XHRpZiAocHJvcGVydHkubnVsbGFibGUgIT09IGZhbHNlKSB7XG5cdFx0XHRyZXR1cm4gdHJ1ZTtcblx0XHR9IGVsc2Uge1xuXHRcdFx0cmV0dXJuICFbXCJFZG0uRGF0ZVRpbWVcIiwgXCJFZG0uRGF0ZVRpbWVPZmZzZXRcIiwgXCJFZG0uVGltZU9mRGF5XCIsIFwiRWRtLlRpbWVcIiwgXCJFZG0uRGF0ZVwiLCBcIkVkbS5EYXRlVGltZVdpdGhUaW1lem9uZVwiXS5pbmNsdWRlcyhcblx0XHRcdFx0cHJvcGVydHkudHlwZVxuXHRcdFx0KTtcblx0XHR9XG5cdH1cblxuXHQvKipcblx0ICogR2V0cyB0aGUgc2VsZWN0aW9uIG9wdGlvbnMgb2YgYSBmaWVsZCBnZW5lcmF0ZWQgYnkgdGhlIHNlbGVjdGVkIGNvbnRleHRzLlxuXHQgKiBAcGFyYW0gZmllbGREYXRhIERhdGEgb2YgdGhlIGZpZWxkIHVzZWQgYnkgYm90aCB0aGUgc3RhdGljIGFuZCB0aGUgcnVudGltZSBtb2RlbFxuXHQgKiBAcmV0dXJucyBUaGUgc2VsZWN0IG9wdGlvbnMgb2YgdGhlIGZpZWxkXG5cdCAqL1xuXHRwcml2YXRlIGFzeW5jIGdldFJ1bnRpbWVTZWxlY3Rpb24oZmllbGREYXRhOiBNYXNzRmllbGRQcm9wZXJ0aWVzKTogUHJvbWlzZTxTZWxlY3RJbmZvW10+IHtcblx0XHRjb25zdCBkaXN0aW5jdE1hcCA9IG5ldyBTZXQ8c3RyaW5nPigpO1xuXHRcdGNvbnN0IHNlbGVjdE9wdGlvbnM6IFNlbGVjdEluZm9bXSA9IFtdO1xuXHRcdGlmIChmaWVsZERhdGEuaW5wdXRUeXBlID09PSBcIkNoZWNrQm94XCIpIHtcblx0XHRcdHJldHVybiBbXTtcblx0XHR9XG5cdFx0Y29uc3QgYW55T2JqZWN0ID0gbmV3IEFueSh7IGFueVRleHQ6IGZpZWxkRGF0YS50ZXh0QmluZGluZy5leHByZXNzaW9uIH0pO1xuXHRcdGFueU9iamVjdC5zZXRNb2RlbCh0aGlzLmNvbnRleHRzWzBdLmdldE1vZGVsKCkpO1xuXHRcdGZvciAoY29uc3Qgc2VsZWN0ZWRDb250ZXh0IG9mIHRoaXMuYW5hbHl6ZWRDb250ZXh0cykge1xuXHRcdFx0YW55T2JqZWN0LnNldEJpbmRpbmdDb250ZXh0KHNlbGVjdGVkQ29udGV4dCk7XG5cdFx0XHRjb25zdCB0ZXh0QmluZGluZyA9IGFueU9iamVjdC5nZXRCaW5kaW5nKFwiYW55VGV4dFwiKTtcblx0XHRcdGlmICh0ZXh0QmluZGluZz8uaXNBPENvbXBvc2l0ZUJpbmRpbmc+KFwic2FwLnVpLm1vZGVsLkNvbXBvc2l0ZUJpbmRpbmdcIikpIHtcblx0XHRcdFx0Ly8gSWYgdGhlIHRleHQgYmluZGluZyBpcyBhIGNvbXBvc2l0ZSBiaW5kaW5nLCB3ZSBuZWVkIHRvIHJlcXVlc3QgdGhlIHZhbHVlIG9mIGVhY2ggYmluZGluZ1xuXHRcdFx0XHQvLyB0byB3YWl0IGZvciB0aGUgcHJvbWlzZSB0byByZXNvbHZlIGJlZm9yZSBnZXR0aW5nIHRoZSB2YWx1ZSBvZiByZXF1ZXN0VW5pdHNPZk1lYXN1cmUvcmVxdWVzdEN1cnJlbmN5Q29kZXNcblx0XHRcdFx0Ly8gZm9yIHRoZSBjdXN0b20gdW5pdHMgb2YgbWVhc3VyZSBhbmQgY3VycmVuY3kgY29kZXMuXG5cdFx0XHRcdC8vIFdlIGhhdmUgdG8gc2V0IHRoZSBiaW5kaW5nIG1vZGUgdG8gT25lVGltZSB0byBhdm9pZCB0aGUgYmluZGluZyB0byBiZSB1cGRhdGVkIHdoZW4gdGhlIGNvbnRleHQgY2hhbmdlcy5cblx0XHRcdFx0Ly8gSW5kZWVkIGV2ZW4gaWYgdGhlIHJlcXVlc3RVbml0c09mTWVhc3VyZS9yZXF1ZXN0Q3VycmVuY3lDb2RlcyBkb2Vzbid0IGNoYW5nZSBpdCdzIHRyaWdnZXIgYSBQQVRDSCByZXF1ZXN0XG5cdFx0XHRcdHRleHRCaW5kaW5nLnNldEJpbmRpbmdNb2RlKEJpbmRpbmdNb2RlLk9uZVRpbWUpO1xuXHRcdFx0XHRhd2FpdCBQcm9taXNlLmFsbCh0ZXh0QmluZGluZy5nZXRCaW5kaW5ncygpLm1hcCgoYmluZGluZykgPT4gYmluZGluZy5yZXF1ZXN0VmFsdWU/LigpKSk7XG5cdFx0XHR9XG5cdFx0XHRjb25zdCBwcm9wZXJ0eVRleHQgPSAoYW55T2JqZWN0LmdldEJpbmRpbmcoXCJhbnlUZXh0XCIpIGFzIFByb3BlcnR5QmluZGluZyB8IHVuZGVmaW5lZCk/LmdldEV4dGVybmFsVmFsdWUoKTtcblx0XHRcdGlmIChwcm9wZXJ0eVRleHQgJiYgIWRpc3RpbmN0TWFwLmhhcyhwcm9wZXJ0eVRleHQpKSB7XG5cdFx0XHRcdGRpc3RpbmN0TWFwLmFkZChwcm9wZXJ0eVRleHQpO1xuXHRcdFx0XHRzZWxlY3RPcHRpb25zLnB1c2goe1xuXHRcdFx0XHRcdHRleHQ6IHByb3BlcnR5VGV4dCxcblx0XHRcdFx0XHRrZXk6IHByb3BlcnR5VGV4dCxcblx0XHRcdFx0XHR1bml0T3JDdXJyZW5jeVZhbHVlOiBmaWVsZERhdGEucHJvcGVydHlJbmZvLnVuaXRPckN1cnJlbmN5UHJvcGVydHlQYXRoXG5cdFx0XHRcdFx0XHQ/IHNlbGVjdGVkQ29udGV4dC5nZXRPYmplY3QoZmllbGREYXRhLnByb3BlcnR5SW5mby51bml0T3JDdXJyZW5jeVByb3BlcnR5UGF0aClcblx0XHRcdFx0XHRcdDogXCJcIixcblx0XHRcdFx0XHRwcm9wZXJ0eVZhbHVlOiBzZWxlY3RlZENvbnRleHQuZ2V0T2JqZWN0KGZpZWxkRGF0YS5wcm9wZXJ0eUluZm8ucmVsYXRpdmVQYXRoKVxuXHRcdFx0XHR9KTtcblx0XHRcdH1cblx0XHR9XG5cdFx0YW55T2JqZWN0LmRlc3Ryb3koKTtcblx0XHRyZXR1cm4gc2VsZWN0T3B0aW9ucztcblx0fVxuXG5cdC8qKlxuXHQgKiBHZXRzIHRoZSBkZWZhdWx0IHNlbGVjdGlvbiBvcHRpb25zIG9mIGEgZmllbGQuXG5cdCAqIEBwYXJhbSBmaWVsZERhdGEgVGhlIHByb3BlcnR5IGluZm9ybWF0aW9uXG5cdCAqIEByZXR1cm5zIFRoZSBkZWZhdWx0IHNlbGVjdCBvcHRpb25zLlxuXHQgKi9cblx0cHJpdmF0ZSBnZXREZWZhdWx0U2VsZWN0T3B0aW9ucyhmaWVsZERhdGE6IE1hc3NGaWVsZFByb3BlcnRpZXMpOiBTZWxlY3RJbmZvW10ge1xuXHRcdGNvbnN0IHJlc291cmNlQnVuZGxlID0gTGlicmFyeS5nZXRSZXNvdXJjZUJ1bmRsZUZvcihcInNhcC5mZS5tYWNyb3NcIikgYXMgUmVzb3VyY2VCdW5kbGU7XG5cdFx0Y29uc3Qga2VlcEVudHJ5ID0ge1xuXHRcdFx0dGV4dDogcmVzb3VyY2VCdW5kbGUuZ2V0VGV4dChcIkNfTUFTU19FRElUX0NPTUJPQk9YX0tFRVBfVkFMVUVTXCIpLFxuXHRcdFx0a2V5OiBTcGVjaWZpY1NlbGVjdEtleXMuS2VlcEtleVxuXHRcdH07XG5cdFx0Y29uc3QgZGVmYXVsdE9wdGlvbnM6IFNlbGVjdEluZm9bXSA9IFtdO1xuXHRcdGRlZmF1bHRPcHRpb25zLnB1c2goa2VlcEVudHJ5KTtcblx0XHRpZiAoZmllbGREYXRhLmlucHV0VHlwZSA9PT0gXCJDaGVja0JveFwiKSB7XG5cdFx0XHRkZWZhdWx0T3B0aW9ucy5wdXNoKHsgdGV4dDogcmVzb3VyY2VCdW5kbGUuZ2V0VGV4dChcInllc1wiKSwga2V5OiBcInRydWVcIiB9LCB7IHRleHQ6IHJlc291cmNlQnVuZGxlLmdldFRleHQoXCJub1wiKSwga2V5OiBcImZhbHNlXCIgfSk7XG5cdFx0fSBlbHNlIHtcblx0XHRcdGRlZmF1bHRPcHRpb25zLnB1c2goe1xuXHRcdFx0XHR0ZXh0OiByZXNvdXJjZUJ1bmRsZS5nZXRUZXh0KFwiQ19NQVNTX0VESVRfQ09NQk9CT1hfUkVQTEFDRV9WQUxVRVNcIiksXG5cdFx0XHRcdGtleTogU3BlY2lmaWNTZWxlY3RLZXlzLlJlcGxhY2VLZXlcblx0XHRcdH0pO1xuXHRcdFx0aWYgKGZpZWxkRGF0YS5pc0ZpZWxkUmVxdWlyZWQgIT09IFwidHJ1ZVwiICYmIGZpZWxkRGF0YS5wcm9wZXJ0eUluZm8uY2xlYXJhYmxlKSB7XG5cdFx0XHRcdGRlZmF1bHRPcHRpb25zLnB1c2goe1xuXHRcdFx0XHRcdHRleHQ6IHJlc291cmNlQnVuZGxlLmdldFRleHQoXCJDX01BU1NfRURJVF9DT01CT0JPWF9DTEVBUl9WQUxVRVNcIiksXG5cdFx0XHRcdFx0a2V5OiBTcGVjaWZpY1NlbGVjdEtleXMuQ2xlYXJGaWVsZFZhbHVlS2V5XG5cdFx0XHRcdH0pO1xuXHRcdFx0fVxuXHRcdH1cblx0XHRyZXR1cm4gZGVmYXVsdE9wdGlvbnM7XG5cdH1cblxuXHQvKipcblx0ICogQ2hlY2tzIGlmIHRoZSB0aGUgZmllbGQgaXMgZWRpdGFibGUuXG5cdCAqIEBwYXJhbSBleHBCaW5kaW5nIFRoZSBleHByZXNzaW9uIGJpbmRpbmcgb2YgdGhlIHByb3BlcnR5LlxuXHQgKiBAcmV0dXJucyBSZXR1cm5zIHRydWUgaWYgdGhlIG1hc3MgZWRpdCBmaWVsZCBpcyBlZGl0YWJsZS5cblx0ICovXG5cdHByaXZhdGUgZ2V0RmllbGRFZGl0YWJsZShleHBCaW5kaW5nOiBDb21waWxlZEJpbmRpbmdUb29sa2l0RXhwcmVzc2lvbik6IGJvb2xlYW4ge1xuXHRcdGlmIChleHBCaW5kaW5nID09PSBGaWVsZEVkaXRNb2RlLkVkaXRhYmxlKSB7XG5cdFx0XHRyZXR1cm4gdHJ1ZTtcblx0XHR9IGVsc2UgaWYgKE9iamVjdC5rZXlzKEZpZWxkRWRpdE1vZGUpLmluY2x1ZGVzKGV4cEJpbmRpbmcgYXMgRmllbGRFZGl0TW9kZSkpIHtcblx0XHRcdHJldHVybiBmYWxzZTtcblx0XHR9IGVsc2UgaWYgKGV4cEJpbmRpbmcpIHtcblx0XHRcdGNvbnN0IGFueUNvbnRyb2wgPSBuZXcgQW55KHsgYW55OiBleHBCaW5kaW5nIH0pO1xuXHRcdFx0Y29uc3QgbW9kZWwgPSB0aGlzLmFuYWx5emVkQ29udGV4dHNbMF0uZ2V0TW9kZWwoKTtcblx0XHRcdGFueUNvbnRyb2wuc2V0TW9kZWwobW9kZWwpO1xuXHRcdFx0Y29uc3QgdmlzaWJsZSA9IHRoaXMuYW5hbHl6ZWRDb250ZXh0cy5zb21lKChjb250ZXh0KSA9PiB7XG5cdFx0XHRcdGFueUNvbnRyb2wuc2V0QmluZGluZ0NvbnRleHQoY29udGV4dCk7XG5cdFx0XHRcdHJldHVybiAoYW55Q29udHJvbC5nZXRCaW5kaW5nKFwiYW55XCIpIGFzIFByb3BlcnR5QmluZGluZykuZ2V0RXh0ZXJuYWxWYWx1ZSgpID09PSBGaWVsZEVkaXRNb2RlLkVkaXRhYmxlO1xuXHRcdFx0fSk7XG5cdFx0XHRhbnlDb250cm9sLmRlc3Ryb3koKTtcblx0XHRcdHJldHVybiB2aXNpYmxlO1xuXHRcdH0gZWxzZSB7XG5cdFx0XHRyZXR1cm4gdHJ1ZTtcblx0XHR9XG5cdH1cblxuXHQvKipcblx0ICogR2V0cyB0aGUgaW5wdXQgdHlwZSBvZiB0aGUgZmllbGQuXG5cdCAqIEBwYXJhbSBkYXRhRmllbGRDb252ZXJ0ZWQgVGhlIGNvbnZlcnRlZCBhbm5vdGF0aW9uIGZvIHRoZSBmaWVsZFxuXHQgKiBAcGFyYW0gZGF0YU1vZGVsUGF0aCBUaGUgZGF0YU1vZGVsT2JqZWN0UGF0aCBvZiB0aGUgcHJvcGVydHlcblx0ICogQHJldHVybnMgVGhlIGlucHV0IHR5cGUuXG5cdCAqL1xuXHRwcml2YXRlIGdldElucHV0VHlwZShkYXRhRmllbGRDb252ZXJ0ZWQ6IERhdGFGaWVsZFR5cGVzLCBkYXRhTW9kZWxQYXRoOiBEYXRhTW9kZWxPYmplY3RQYXRoPFByb3BlcnR5Pik6IHN0cmluZyB8IHVuZGVmaW5lZCB8IG51bGwge1xuXHRcdGNvbnN0IGVkaXRTdHlsZVByb3BlcnRpZXMgPSB7fSBhcyBGaWVsZEJsb2NrUHJvcGVydGllcztcblx0XHRzZXRFZGl0U3R5bGVQcm9wZXJ0aWVzKGVkaXRTdHlsZVByb3BlcnRpZXMsIGRhdGFGaWVsZENvbnZlcnRlZCwgZGF0YU1vZGVsUGF0aCwgdHJ1ZSk7XG5cdFx0cmV0dXJuIGVkaXRTdHlsZVByb3BlcnRpZXM/LmVkaXRTdHlsZTtcblx0fVxuXG5cdC8qKlxuXHQgKiBHZXRzIHRoZSB2aXNpYmlsaXR5IG9mIHRoZSBmaWVsZFxuXHQgKiBUaGlzIHZpc2liaWxpdHkgaXMgbm90IGRlcGVuZGVudCBvbiB0aGUgY29udGV4dCB3aGVuXG5cdCAqICAtIGVpdGhlciB0aGUgYWRhcHRhdGlvbiBtb2RlIGlzIHNldC5cblx0ICogIC0gb3IgdGhlIGZpZWxkIGlzIHZpc2libGUgaW4gdGhlIG1hbmlmZXN0IGFuZCB0aGUgZGVncmFkZWQgbW9kZSBpcyBzZXQuXG5cdCAqIEBwYXJhbSBmaWVsZFByb3BlcnRpZXMgVGhlIHByb3BlcnRpZXMgb2YgdGhlIG1hc3MgZWRpdCBmaWVsZFxuXHQgKiBAcmV0dXJucyBUcnVlIGlmIHRoZSBmaWVsZCBpcyB2aXNpYmxlLCBmYWxzZSBvdGhlcndpc2Vcblx0ICovXG5cdHByaXZhdGUgaXNGaWVsZFZpc2libGUoZmllbGRQcm9wZXJ0aWVzOiBNYXNzRmllbGRQcm9wZXJ0aWVzKTogYm9vbGVhbiB7XG5cdFx0aWYgKHRoaXMuaXNBZGFwdGF0aW9uIHx8ICh0aGlzLm1hbmlmZXN0U2V0dGluZ3MudmlzaWJsZUZpZWxkcy5sZW5ndGggJiYgdGhpcy5kZWdyYWRlZE1vZGUpKSB7XG5cdFx0XHRjb25zdCBpc1N0YXRpY0VkaXRNb2RlID0gT2JqZWN0LmtleXMoRmllbGRFZGl0TW9kZSkuaW5jbHVkZXMoZmllbGRQcm9wZXJ0aWVzLnZpc2liaWxpdHlCaW5kaW5ncy5lZGl0TW9kZSBhcyBGaWVsZEVkaXRNb2RlKTtcblx0XHRcdGNvbnN0IGlzRWRpdGFibGUgPVxuXHRcdFx0XHQhaXNTdGF0aWNFZGl0TW9kZSB8fCAoaXNTdGF0aWNFZGl0TW9kZSAmJiBmaWVsZFByb3BlcnRpZXMudmlzaWJpbGl0eUJpbmRpbmdzLmVkaXRNb2RlID09PSBGaWVsZEVkaXRNb2RlLkVkaXRhYmxlKTtcblx0XHRcdHJldHVybiBpc0VkaXRhYmxlICYmIGZpZWxkUHJvcGVydGllcy52aXNpYmlsaXR5QmluZGluZ3MuaXNWaXNpYmxlICE9PSBcImZhbHNlXCI7XG5cdFx0fVxuXHRcdHJldHVybiAoXG5cdFx0XHR0aGlzLmdldEZpZWxkRWRpdGFibGUoZmllbGRQcm9wZXJ0aWVzLnZpc2liaWxpdHlCaW5kaW5ncy5lZGl0TW9kZSkgJiZcblx0XHRcdCF0aGlzLmlzSGlkZGVuRm9yQ29udGV4dHMoZmllbGRQcm9wZXJ0aWVzLnZpc2liaWxpdHlCaW5kaW5ncy5pc1Zpc2libGUpXG5cdFx0KTtcblx0fVxufVxuIl0sIm1hcHBpbmdzIjoiOzs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7O0VBaUVBO0FBQ0E7QUFDQTtFQUZBLElBR3FCQSxvQkFBb0I7SUEyQnhDLFNBQUFBLHFCQUFZQyxLQUFxRSxFQUFFO01BQUEsS0FsQmxFQyxlQUFlLEdBQUcsRUFBRTtNQUFBLEtBSXBCQyxnQkFBZ0IsR0FBcUIsRUFBRTtNQUFBLEtBTWhEQyxlQUFlLEdBQTBCLEVBQUU7TUFTbEQsTUFBTUMsY0FBYyxHQUFJSixLQUFLLENBQUNLLEtBQUssQ0FBQ0MsU0FBUyxDQUFDLENBQUMsQ0FBY0Msa0JBQWtCLENBQUMsQ0FBQyxDQUFDQyxVQUFVLENBQUNDLFVBQVU7UUFDdEdDLFNBQVMsR0FBSVYsS0FBSyxDQUFDSyxLQUFLLENBQUNNLFFBQVEsQ0FBQyxDQUFDLENBQWdCQyxZQUFZLENBQUMsQ0FBQztNQUVsRSxJQUFJLENBQUNQLEtBQUssR0FBR0wsS0FBSyxDQUFDSyxLQUFLO01BQ3hCLElBQUksQ0FBQ1EsZ0JBQWdCLEdBQUksSUFBSSxDQUFDUixLQUFLLENBQUNDLFNBQVMsQ0FBQyxDQUFDLENBQWNDLGtCQUFrQixDQUFDLENBQUMsQ0FBQ08sT0FBTyxDQUFDQyxRQUFRO01BQ2xH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
|
|
704
|
+
//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJuYW1lcyI6WyJNYXNzRWRpdERpYWxvZ0hlbHBlciIsInByb3BzIiwibWF4QW5hbHl6ZWRSb3dzIiwiYW5hbHl6ZWRDb250ZXh0cyIsImZpZWxkUHJvcGVydGllcyIsImVudGl0eVR5cGVQYXRoIiwidGFibGUiLCJnZXRQYXJlbnQiLCJnZXRUYWJsZURlZmluaXRpb24iLCJhbm5vdGF0aW9uIiwiY29sbGVjdGlvbiIsIm1ldGFNb2RlbCIsImdldE1vZGVsIiwiZ2V0TWV0YU1vZGVsIiwibWFuaWZlc3RTZXR0aW5ncyIsImNvbnRyb2wiLCJtYXNzRWRpdCIsIm9uQ29udGV4dE1lbnUiLCJvbkRpYWxvZ0Nsb3NlIiwib25DbG9zZSIsInZpZXciLCJDb21tb25VdGlscyIsImdldFRhcmdldFZpZXciLCJjb250ZXh0cyIsImZldGNoQ29udGV4dHNGb3JFZGl0IiwiZGVncmFkZWRNb2RlIiwibGVuZ3RoIiwic2xpY2UiLCJpc0FkYXB0YXRpb24iLCJnZXRBcHBDb21wb25lbnQiLCJpc0FkYXB0YXRpb25Nb2RlIiwiaGVhZGVySW5mbyIsImdldEludm9sdmVkRGF0YU1vZGVsT2JqZWN0cyIsImdldENvbnRleHQiLCJ0YXJnZXRFbnRpdHlUeXBlIiwiYW5ub3RhdGlvbnMiLCJVSSIsIkhlYWRlckluZm8iLCJfZXhwb3J0cyIsIl9wcm90byIsInByb3RvdHlwZSIsIm9wZW4iLCJ0ZW1wbGF0ZUNvbXBvbmVudCIsIkNvbXBvbmVudCIsImdldE93bmVyQ29tcG9uZW50Rm9yIiwiaW50ZXJuYWxNb2RlbENvbnRleHQiLCJnZXRCaW5kaW5nQ29udGV4dCIsImludGVybmFsTW9kZWxQcm9wZXJ0eSIsInNlbGVjdGVkQ29udGV4dHMiLCJnZXRQcm9wZXJ0eSIsImdldEZpZWxkc1Byb3BlcnRpZXNGcm9tSW5mbyIsImdldEZpZWxkc0luZm8iLCJzb21lIiwiZmllbGQiLCJ2aXNpYmxlIiwibm9GaWVsZEluZm9ybWF0aW9uIiwiY29uZmlybVNlbGVjdGlvbiIsInJ1bkFzT3duZXIiLCJtYXNzRWRpdERpYWxvZyIsIk1hc3NFZGl0RGlhbG9nIiwiZGlhbG9nIiwiY3JlYXRlIiwiYXR0YWNoQmVmb3JlQ2xvc2UiLCJyZXF1aXJlZERhdGFQcm9taXNlIiwiZ2V0UmVxdWlyZWREYXRhUHJvbWlzZSIsImdldERhdGFBZnRlck9wZW5pbmdEaWFsb2ciLCJyZXNvbHZlIiwiZXJyb3IiLCJMb2ciLCJyZWplY3QiLCJ2aXNpYmxlRmllbGRzRnJvbU1hbmlmZXN0IiwidmlzaWJsZUZpZWxkcyIsInJlc291cmNlQnVuZGxlIiwiTGlicmFyeSIsImdldFJlc291cmNlQnVuZGxlRm9yIiwibWVzc2FnZSIsIm1lc3NhZ2VEZXRhaWwiLCJnZXRUZXh0IiwiZ2V0UmVzb3VyY2VUZXh0IiwiVHlwZU5hbWUiLCJyZWR1Y2UiLCJmaWVsZHMiLCJmaWVsZFByb3BlcnR5IiwiaW5jbHVkZXMiLCJwcm9wZXJ0eUluZm8iLCJyZWxhdGl2ZVBhdGgiLCJwdXNoIiwibGFiZWwiLCJqb2luIiwiTWVzc2FnZUJveCIsImluZm9ybWF0aW9uIiwiZGV0YWlscyIsInJlc291cmNlTW9kZWwiLCJSZXNvdXJjZU1vZGVsSGVscGVyIiwiZ2V0UmVzb3VyY2VNb2RlbCIsImNvcmVSZXNvdXJjZUJ1bmRsZSIsInVwZGF0YWJsZUNvbnRleHRzIiwiUHJvbWlzZSIsInRhYmxlQVBJIiwiZWRpdEJ1dHRvbiIsImNhbmNlbEJ1dHRvbiIsInR5cGVOYW1lIiwidHlwZU5hbWVQbHVyYWwiLCJUeXBlTmFtZVBsdXJhbCIsIk1vZGVsSGVscGVyIiwiaXNEcmFmdFN1cHBvcnRlZCIsImRhdGEiLCJyZWFkT25seSIsImdldE1lc3NhZ2VEZXRhaWxGb3JOb25FZGl0YWJsZSIsIndhcm5pbmciLCJhY3Rpb25zIiwiZW1waGFzaXplZEFjdGlvbiIsInNlbGVjdGlvbiIsInVuZGVmaW5lZCIsImdldFRyYW5zbGF0ZWRUZXh0RnJvbUV4cEJpbmRpbmdTdHJpbmciLCJjb21waWxlRXhwcmVzc2lvbiIsImdldEV4cHJlc3Npb25Gcm9tQW5ub3RhdGlvbiIsInRvTG9jYWxlTG93ZXJDYXNlIiwiZ2V0RW50aXR5RmllbGRzSW5mbyIsImNvbHVtbnNEYXRhIiwiY29sdW1ucyIsInByb3BlcnRpZXNLZXlzIiwiU2V0IiwiY29sdW1uIiwidHlwZSIsIm5hbWUiLCJ0cmFuc2Zvcm1QYXRoc1RvSW5mbyIsImdldENvbHVtbnMiLCJtYXAiLCJnZXRQcm9wZXJ0eUtleSIsImlnbm9yZWRGaWVsZHMiLCJpZ25vcmVkRmllbGQiLCJkZWxldGUiLCJwcm9wZXJ0aWVzUGF0aHMiLCJBcnJheSIsImZyb20iLCJjb2x1bW5JbmZvcyIsInByb3BlcnR5UGF0aCIsImNvbHVtbkluZm8iLCJnZXRGaWVsZEluZm8iLCJlbnRpdHlQYXRoIiwiZ2V0TWV0YVBhdGgiLCJlbnRpdHlTZXREYXRhTW9kZWwiLCJyZWxhdGVkQ29sdW1uSW5mbyIsImZpbmQiLCJmaWVsZEluZm8iLCJhbm5vdGF0aW9uUGF0aCIsInByb3BlcnR5RGF0YU1vZGVsIiwiZW5oYW5jZURhdGFNb2RlbFBhdGgiLCJjb252ZXJ0ZWRBbm5vdGF0aW9uIiwiY29udmVydE1ldGFNb2RlbENvbnRleHQiLCJ0YXJnZXRQcm9wZXJ0eSIsImdldENvbXBsaWFudFByb3BlcnR5IiwiZW50aXR5UHJvcGVydGllcyIsImtleSIsInRhcmdldE9iamVjdCIsImlzUHJvcGVydHkiLCJJc0ltYWdlVVJMIiwiaXNEYXRhRmllbGRUeXBlcyIsImhhc093blByb3BlcnR5IiwiVmFsdWUiLCIkdGFyZ2V0IiwidW5pdFByb3BlcnR5IiwiZ2V0QXNzb2NpYXRlZFVuaXRQcm9wZXJ0eSIsImlzTXVsdGlWYWx1ZUZpZWxkIiwiaGFzVmFsdWVIZWxwIiwiQ29tbW9uIiwiVmFsdWVMaXN0UmVsZXZhbnRRdWFsaWZpZXJzIiwiaXNIaWRkZW5Gb3JDb250ZXh0cyIsImV4cEJpbmRpbmciLCJhbnlPYmplY3QiLCJBbnkiLCJhbnlCb29sZWFuIiwic2V0TW9kZWwiLCJpc0hpZGRlbiIsImNvbnRleHQiLCJzZXRCaW5kaW5nQ29udGV4dCIsImdldEJpbmRpbmciLCJnZXRFeHRlcm5hbFZhbHVlIiwiZGVzdHJveSIsInVwZGF0YWJsZUNvbnRleHRQcm9wZXJ0eSIsImdldEZpZWxkUHJvcGVydGllcyIsImRlZXBDbG9uZSIsImZpZWxkc0luZm8iLCJkYXRhUHJvcGVydHlQYXRoIiwiZ2V0Q29udGV4dFJlbGF0aXZlVGFyZ2V0T2JqZWN0UGF0aCIsInVuaXRPckN1cnJlbmN5UHJvcGVydHlQYXRoIiwiZ2V0QXNzb2NpYXRlZFVuaXRQcm9wZXJ0eVBhdGgiLCJnZXRBc3NvY2lhdGVkQ3VycmVuY3lQcm9wZXJ0eVBhdGgiLCJpbnB1dFR5cGUiLCJnZXRJbnB1dFR5cGUiLCJnZXRSZWxhdGl2ZVBhdGhzIiwiZmllbGREYXRhIiwidmlzaWJpbGl0eUJpbmRpbmdzIiwiaXNWaXNpYmxlIiwiZWRpdE1vZGUiLCJnZXRFZGl0TW9kZSIsImNvbnN0YW50IiwiTGFiZWwiLCJpc0ZpZWxkUmVxdWlyZWQiLCJnZXRSZXF1aXJlZEV4cHJlc3Npb24iLCJkZXNjcmlwdGlvblBhdGgiLCJnZXRBc3NvY2lhdGVkVGV4dFByb3BlcnR5UGF0aCIsInRleHRCaW5kaW5nIiwiZXhwcmVzc2lvbiIsImdldFRleHRCaW5kaW5nIiwiZGlzcGxheU1vZGUiLCJnZXREaXNwbGF5TW9kZSIsIklzVGltZXpvbmUiLCJyZWFkT25seUV4cHJlc3Npb24iLCJpc1JlYWRPbmx5RXhwcmVzc2lvbiIsImNsZWFyYWJsZSIsImlzUHJvcGVydHlDbGVhcmFibGUiLCJlbXB0eVZhbHVlIiwiZ2V0RW1wdHlWYWx1ZUZvclByb3BlcnR5Iiwic2VsZWN0SXRlbXMiLCJnZXREYXRhRm9yT3BlbmluZ0RpYWxvZyIsImFsbCIsImlzRmllbGRWaXNpYmxlIiwicnVudGltZVNlbGVjdGlvbiIsImdldFJ1bnRpbWVTZWxlY3Rpb24iLCJnZXREZWZhdWx0U2VsZWN0T3B0aW9ucyIsImdlbmVyYXRlRmllbGRzUHJvcGVydGllcyIsImdlbmVyYXRlRW50aXR5RmllbGRzUHJvcGVydGllcyIsIm1pc3NpbmdDb250ZXh0cyIsImJpbmRpbmdzVG9GZXRjaCIsImNvbmNhdCIsInBhdGhJbk1vZGVsIiwiZ2V0TWlzc2luZ0RhdGEiLCJiaW5kaW5nc1RvUmVzb2x2ZSIsImJpbmRpbmdzIiwiZ2V0Vmlld0RhdGEiLCJjb252ZXJ0ZXJUeXBlIiwiZGlzcGxheWVkUHJvcGVydGllcyIsImV2ZXJ5IiwicHJvbWlzZXMiLCJjb250cm9scyIsIm1vZGVsIiwiYmluZGluZyIsImZpbHRlciIsInN0YXJ0c1dpdGgiLCJwYXJhbWV0ZXJzIiwiYmluZGluZ1R5cGUiLCJjb250cm9sQmluZGluZyIsInNldEJpbmRpbmdNb2RlIiwiQmluZGluZ01vZGUiLCJPbmVUaW1lIiwiaXNBIiwiZ2V0QmluZGluZ3MiLCJuZXN0ZWRCaW5kaW5nIiwicmVxdWVzdFZhbHVlIiwicHJvbWlzZSIsInByb3BlcnR5IiwibnVsbGFibGUiLCJhbnkiLCJmb3JtYXRXaXRoVHlwZUluZm9ybWF0aW9uIiwidmFsdWUiLCJnZXRCaW5kaW5nSW5mbyIsImdldFR5cGUiLCJwYXJzZVZhbHVlIiwiZGlzdGluY3RNYXAiLCJzZWxlY3RPcHRpb25zIiwiYW55VGV4dCIsInNlbGVjdGVkQ29udGV4dCIsInByb3BlcnR5VGV4dCIsImhhcyIsImFkZCIsInRleHQiLCJ1bml0T3JDdXJyZW5jeVZhbHVlIiwiZ2V0T2JqZWN0IiwicHJvcGVydHlWYWx1ZSIsImtlZXBFbnRyeSIsIlNwZWNpZmljU2VsZWN0S2V5cyIsIktlZXBLZXkiLCJkZWZhdWx0T3B0aW9ucyIsIlJlcGxhY2VLZXkiLCJDbGVhckZpZWxkVmFsdWVLZXkiLCJnZXRGaWVsZEVkaXRhYmxlIiwiRmllbGRFZGl0TW9kZSIsIkVkaXRhYmxlIiwiT2JqZWN0Iiwia2V5cyIsImFueUNvbnRyb2wiLCJkYXRhRmllbGRDb252ZXJ0ZWQiLCJkYXRhTW9kZWxQYXRoIiwiZWRpdFN0eWxlUHJvcGVydGllcyIsInNldEVkaXRTdHlsZVByb3BlcnRpZXMiLCJlZGl0U3R5bGUiLCJpc1N0YXRpY0VkaXRNb2RlIiwiaXNFZGl0YWJsZSJdLCJzb3VyY2VSb290IjoiLiIsInNvdXJjZXMiOlsiTWFzc0VkaXREaWFsb2dIZWxwZXIudHN4Il0sInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB0eXBlIHsgUHJpbWl0aXZlVHlwZSwgUHJvcGVydHksIFByb3BlcnR5QW5ub3RhdGlvblZhbHVlIH0gZnJvbSBcIkBzYXAtdXgvdm9jYWJ1bGFyaWVzLXR5cGVzXCI7XG5pbXBvcnQgdHlwZSB7IERhdGFGaWVsZCwgRGF0YUZpZWxkRm9yQWN0aW9uLCBEYXRhRmllbGRGb3JBbm5vdGF0aW9uLCBIZWFkZXJJbmZvIH0gZnJvbSBcIkBzYXAtdXgvdm9jYWJ1bGFyaWVzLXR5cGVzL3ZvY2FidWxhcmllcy9VSVwiO1xuaW1wb3J0IExvZyBmcm9tIFwic2FwL2Jhc2UvTG9nXCI7XG5pbXBvcnQgdHlwZSBSZXNvdXJjZUJ1bmRsZSBmcm9tIFwic2FwL2Jhc2UvaTE4bi9SZXNvdXJjZUJ1bmRsZVwiO1xuaW1wb3J0IGRlZXBDbG9uZSBmcm9tIFwic2FwL2Jhc2UvdXRpbC9kZWVwQ2xvbmVcIjtcbmltcG9ydCB0eXBlIHsgQ29tcGlsZWRCaW5kaW5nVG9vbGtpdEV4cHJlc3Npb24gfSBmcm9tIFwic2FwL2ZlL2Jhc2UvQmluZGluZ1Rvb2xraXRcIjtcbmltcG9ydCB7XG5cdGNvbXBpbGVFeHByZXNzaW9uLFxuXHRjb25zdGFudCxcblx0Zm9ybWF0V2l0aFR5cGVJbmZvcm1hdGlvbixcblx0Z2V0RXhwcmVzc2lvbkZyb21Bbm5vdGF0aW9uLFxuXHRwYXRoSW5Nb2RlbFxufSBmcm9tIFwic2FwL2ZlL2Jhc2UvQmluZGluZ1Rvb2xraXRcIjtcbmltcG9ydCB0eXBlIHsgRkVWaWV3IH0gZnJvbSBcInNhcC9mZS9jb3JlL0Jhc2VDb250cm9sbGVyXCI7XG5pbXBvcnQgQ29tbW9uVXRpbHMgZnJvbSBcInNhcC9mZS9jb3JlL0NvbW1vblV0aWxzXCI7XG5pbXBvcnQgdHlwZSBUZW1wbGF0ZUNvbXBvbmVudCBmcm9tIFwic2FwL2ZlL2NvcmUvVGVtcGxhdGVDb21wb25lbnRcIjtcbmltcG9ydCBBbnkgZnJvbSBcInNhcC9mZS9jb3JlL2NvbnRyb2xzL0FueVwiO1xuaW1wb3J0IHsgY29udmVydE1ldGFNb2RlbENvbnRleHQsIGdldEludm9sdmVkRGF0YU1vZGVsT2JqZWN0cyB9IGZyb20gXCJzYXAvZmUvY29yZS9jb252ZXJ0ZXJzL01ldGFNb2RlbENvbnZlcnRlclwiO1xuaW1wb3J0IHsgaXNEYXRhRmllbGRUeXBlcyB9IGZyb20gXCJzYXAvZmUvY29yZS9jb252ZXJ0ZXJzL2Fubm90YXRpb25zL0RhdGFGaWVsZFwiO1xuaW1wb3J0IHR5cGUgeyBNYXNzRWRpdFRhYmxlQ29uZmlndXJhdGlvbiB9IGZyb20gXCJzYXAvZmUvY29yZS9jb252ZXJ0ZXJzL2NvbnRyb2xzL0NvbW1vbi9UYWJsZVwiO1xuaW1wb3J0IHR5cGUgeyBBbm5vdGF0aW9uVGFibGVDb2x1bW4gfSBmcm9tIFwic2FwL2ZlL2NvcmUvY29udmVydGVycy9jb250cm9scy9Db21tb24vdGFibGUvQ29sdW1uc1wiO1xuaW1wb3J0IHR5cGUgeyBJbnRlcm5hbE1vZGVsQ29udGV4dCB9IGZyb20gXCJzYXAvZmUvY29yZS9oZWxwZXJzL01vZGVsSGVscGVyXCI7XG5pbXBvcnQgTW9kZWxIZWxwZXIgZnJvbSBcInNhcC9mZS9jb3JlL2hlbHBlcnMvTW9kZWxIZWxwZXJcIjtcbmltcG9ydCBSZXNvdXJjZU1vZGVsSGVscGVyIGZyb20gXCJzYXAvZmUvY29yZS9oZWxwZXJzL1Jlc291cmNlTW9kZWxIZWxwZXJcIjtcbmltcG9ydCB7IGlzUHJvcGVydHkgfSBmcm9tIFwic2FwL2ZlL2NvcmUvaGVscGVycy9UeXBlR3VhcmRzXCI7XG5pbXBvcnQgdHlwZSB7IERhdGFNb2RlbE9iamVjdFBhdGggfSBmcm9tIFwic2FwL2ZlL2NvcmUvdGVtcGxhdGluZy9EYXRhTW9kZWxQYXRoSGVscGVyXCI7XG5pbXBvcnQgeyBlbmhhbmNlRGF0YU1vZGVsUGF0aCwgZ2V0Q29udGV4dFJlbGF0aXZlVGFyZ2V0T2JqZWN0UGF0aCwgZ2V0UmVsYXRpdmVQYXRocyB9IGZyb20gXCJzYXAvZmUvY29yZS90ZW1wbGF0aW5nL0RhdGFNb2RlbFBhdGhIZWxwZXJcIjtcbmltcG9ydCB7IGdldERpc3BsYXlNb2RlIH0gZnJvbSBcInNhcC9mZS9jb3JlL3RlbXBsYXRpbmcvRGlzcGxheU1vZGVGb3JtYXR0ZXJcIjtcbmltcG9ydCB7IGlzUmVhZE9ubHlFeHByZXNzaW9uIH0gZnJvbSBcInNhcC9mZS9jb3JlL3RlbXBsYXRpbmcvRmllbGRDb250cm9sSGVscGVyXCI7XG5pbXBvcnQge1xuXHRnZXRBc3NvY2lhdGVkQ3VycmVuY3lQcm9wZXJ0eVBhdGgsXG5cdGdldEFzc29jaWF0ZWRUZXh0UHJvcGVydHlQYXRoLFxuXHRnZXRBc3NvY2lhdGVkVW5pdFByb3BlcnR5LFxuXHRnZXRBc3NvY2lhdGVkVW5pdFByb3BlcnR5UGF0aCxcblx0aGFzVmFsdWVIZWxwXG59IGZyb20gXCJzYXAvZmUvY29yZS90ZW1wbGF0aW5nL1Byb3BlcnR5SGVscGVyXCI7XG5pbXBvcnQgeyBnZXRFZGl0TW9kZSwgZ2V0UmVxdWlyZWRFeHByZXNzaW9uLCBpc011bHRpVmFsdWVGaWVsZCwgaXNWaXNpYmxlIH0gZnJvbSBcInNhcC9mZS9jb3JlL3RlbXBsYXRpbmcvVUlGb3JtYXR0ZXJzXCI7XG5pbXBvcnQgeyBnZXRUZXh0QmluZGluZywgc2V0RWRpdFN0eWxlUHJvcGVydGllcyB9IGZyb20gXCJzYXAvZmUvbWFjcm9zL2ZpZWxkL0ZpZWxkVGVtcGxhdGluZ1wiO1xuaW1wb3J0IHR5cGUgeyBGaWVsZEJsb2NrUHJvcGVydGllcyB9IGZyb20gXCJzYXAvZmUvbWFjcm9zL2ludGVybmFsL2ZpZWxkL0ZpZWxkU3RydWN0dXJlSGVscGVyXCI7XG5pbXBvcnQgdHlwZSBUYWJsZUFQSSBmcm9tIFwic2FwL2ZlL21hY3Jvcy90YWJsZS9UYWJsZUFQSVwiO1xuaW1wb3J0IE1lc3NhZ2VCb3ggZnJvbSBcInNhcC9tL01lc3NhZ2VCb3hcIjtcbmltcG9ydCBDb21wb25lbnQgZnJvbSBcInNhcC91aS9jb3JlL0NvbXBvbmVudFwiO1xuaW1wb3J0IExpYnJhcnkgZnJvbSBcInNhcC91aS9jb3JlL0xpYlwiO1xuaW1wb3J0IHR5cGUgVGFibGUgZnJvbSBcInNhcC91aS9tZGMvVGFibGVcIjtcbmltcG9ydCBGaWVsZEVkaXRNb2RlIGZyb20gXCJzYXAvdWkvbWRjL2VudW1zL0ZpZWxkRWRpdE1vZGVcIjtcbmltcG9ydCBCaW5kaW5nTW9kZSBmcm9tIFwic2FwL3VpL21vZGVsL0JpbmRpbmdNb2RlXCI7XG5pbXBvcnQgdHlwZSBDb21wb3NpdGVCaW5kaW5nIGZyb20gXCJzYXAvdWkvbW9kZWwvQ29tcG9zaXRlQmluZGluZ1wiO1xuaW1wb3J0IHR5cGUgUHJvcGVydHlCaW5kaW5nIGZyb20gXCJzYXAvdWkvbW9kZWwvUHJvcGVydHlCaW5kaW5nXCI7XG5pbXBvcnQgdHlwZSBPRGF0YVY0Q29udGV4dCBmcm9tIFwic2FwL3VpL21vZGVsL29kYXRhL3Y0L0NvbnRleHRcIjtcbmltcG9ydCB0eXBlIE9EYXRhTW9kZWwgZnJvbSBcInNhcC91aS9tb2RlbC9vZGF0YS92NC9PRGF0YU1vZGVsXCI7XG5pbXBvcnQgdHlwZSBPRGF0YVByb3BlcnR5QmluZGluZyBmcm9tIFwic2FwL3VpL21vZGVsL29kYXRhL3Y0L09EYXRhUHJvcGVydHlCaW5kaW5nXCI7XG5pbXBvcnQgTWFzc0VkaXREaWFsb2cgZnJvbSBcIi4vTWFzc0VkaXREaWFsb2dcIjtcbmltcG9ydCB0eXBlIHsgQmluZGluZ0luZm8sIE1hc3NGaWVsZFByb3BlcnRpZXMsIFNlbGVjdEluZm8gfSBmcm9tIFwiLi9saWJyYXJ5XCI7XG5pbXBvcnQgeyBTcGVjaWZpY1NlbGVjdEtleXMgfSBmcm9tIFwiLi9saWJyYXJ5XCI7XG5cbnR5cGUgRGF0YUZpZWxkVHlwZXMgPSBEYXRhRmllbGQgfCBEYXRhRmllbGRGb3JBbm5vdGF0aW9uIHwgRGF0YUZpZWxkRm9yQWN0aW9uO1xudHlwZSBGaWVsZEluZm8gPSB7XG5cdGtleTogc3RyaW5nO1xuXHRwcm9wZXJ0eURhdGFNb2RlbDogRGF0YU1vZGVsT2JqZWN0UGF0aDxQcm9wZXJ0eT47XG5cdHRhcmdldFByb3BlcnR5OiBQcm9wZXJ0eTtcblx0bGFiZWw6IHN0cmluZztcblx0Y29udmVydGVkQW5ub3RhdGlvbjogRGF0YUZpZWxkVHlwZXM7XG59O1xuXG50eXBlIEJpbmRpbmdUb0ZldGNoID0gQmluZGluZ0luZm8gJiB7IGNvbnRleHRzPzogT0RhdGFWNENvbnRleHRbXSB9O1xuXG4vKipcbiAqIERpc3BsYXkgdGhlIG1hc3NFZGl0IGRpYWxvZy5cbiAqL1xuZXhwb3J0IGRlZmF1bHQgY2xhc3MgTWFzc0VkaXREaWFsb2dIZWxwZXIge1xuXHRwcml2YXRlIHJlYWRvbmx5IHRhYmxlOiBUYWJsZTtcblxuXHRwcml2YXRlIHJlYWRvbmx5IG9uQ29udGV4dE1lbnU6IGJvb2xlYW47XG5cblx0cHJpdmF0ZSByZWFkb25seSBvbkRpYWxvZ0Nsb3NlOiAoKCkgPT4gdm9pZCkgfCB1bmRlZmluZWQ7XG5cblx0cHJpdmF0ZSByZWFkb25seSB2aWV3OiBGRVZpZXc7XG5cblx0cHJpdmF0ZSByZWFkb25seSBtYXhBbmFseXplZFJvd3MgPSAzMDtcblxuXHRwcml2YXRlIGNvbnRleHRzOiBPRGF0YVY0Q29udGV4dFtdO1xuXG5cdHByaXZhdGUgcmVhZG9ubHkgYW5hbHl6ZWRDb250ZXh0czogT0RhdGFWNENvbnRleHRbXSA9IFtdO1xuXG5cdHByaXZhdGUgcmVhZG9ubHkgZGVncmFkZWRNb2RlOiBib29sZWFuO1xuXG5cdHByaXZhdGUgcmVhZG9ubHkgbWFuaWZlc3RTZXR0aW5nczogTWFzc0VkaXRUYWJsZUNvbmZpZ3VyYXRpb247XG5cblx0cHJpdmF0ZSBmaWVsZFByb3BlcnRpZXM6IE1hc3NGaWVsZFByb3BlcnRpZXNbXSA9IFtdO1xuXG5cdHByaXZhdGUgcmVhZG9ubHkgaXNBZGFwdGF0aW9uOiBib29sZWFuO1xuXG5cdHByaXZhdGUgcmVhZG9ubHkgaGVhZGVySW5mbzogSGVhZGVySW5mbyB8IHVuZGVmaW5lZDtcblxuXHRtYXNzRWRpdERpYWxvZzogTWFzc0VkaXREaWFsb2cgfCB1bmRlZmluZWQ7XG5cblx0Y29uc3RydWN0b3IocHJvcHM6IHsgdGFibGU6IFRhYmxlOyBvbkNvbnRleHRNZW51OiBib29sZWFuOyBvbkNsb3NlPzogKCkgPT4gdm9pZCB9KSB7XG5cdFx0Y29uc3QgZW50aXR5VHlwZVBhdGggPSAocHJvcHMudGFibGUuZ2V0UGFyZW50KCkgYXMgVGFibGVBUEkpLmdldFRhYmxlRGVmaW5pdGlvbigpLmFubm90YXRpb24uY29sbGVjdGlvbixcblx0XHRcdG1ldGFNb2RlbCA9IChwcm9wcy50YWJsZS5nZXRNb2RlbCgpIGFzIE9EYXRhTW9kZWwpLmdldE1ldGFNb2RlbCgpO1xuXG5cdFx0dGhpcy50YWJsZSA9IHByb3BzLnRhYmxlO1xuXHRcdHRoaXMubWFuaWZlc3RTZXR0aW5ncyA9ICh0aGlzLnRhYmxlLmdldFBhcmVudCgpIGFzIFRhYmxlQVBJKS5nZXRUYWJsZURlZmluaXRpb24oKS5jb250cm9sLm1hc3NFZGl0O1xuXHRcdHRoaXMub25Db250ZXh0TWVudSA9IHByb3BzLm9uQ29udGV4dE1lbnU7XG5cdFx0dGhpcy5vbkRpYWxvZ0Nsb3NlID0gcHJvcHMub25DbG9zZTtcblx0XHR0aGlzLnZpZXcgPSBDb21tb25VdGlscy5nZXRUYXJnZXRWaWV3KHRoaXMudGFibGUpO1xuXHRcdHRoaXMuY29udGV4dHMgPSB0aGlzLmZldGNoQ29udGV4dHNGb3JFZGl0KCk7XG5cdFx0dGhpcy5kZWdyYWRlZE1vZGUgPSB0aGlzLmNvbnRleHRzLmxlbmd0aCA+IHRoaXMubWF4QW5hbHl6ZWRSb3dzO1xuXHRcdHRoaXMuYW5hbHl6ZWRDb250ZXh0cyA9IHRoaXMuZGVncmFkZWRNb2RlID8gdGhpcy5jb250ZXh0cy5zbGljZSgwLCB0aGlzLm1heEFuYWx5emVkUm93cykgOiB0aGlzLmNvbnRleHRzO1xuXHRcdHRoaXMuaXNBZGFwdGF0aW9uID0gQ29tbW9uVXRpbHMuZ2V0QXBwQ29tcG9uZW50KHRoaXMudGFibGUpLmlzQWRhcHRhdGlvbk1vZGUoKTtcblx0XHR0aGlzLmhlYWRlckluZm8gPSBnZXRJbnZvbHZlZERhdGFNb2RlbE9iamVjdHMobWV0YU1vZGVsLmdldENvbnRleHQoZW50aXR5VHlwZVBhdGgpKS50YXJnZXRFbnRpdHlUeXBlLmFubm90YXRpb25zLlVJPy5IZWFkZXJJbmZvO1xuXHR9XG5cblx0LyoqXG5cdCAqIE9wZW5zIHRoZSBtYXNzIGVkaXQgZGlhbG9nIGlmIGFsbCBzZWxlY3RlZCBjb250ZXh0cyBhcmUgZWRpdGFibGUsXG5cdCAqIG90aGVyd2lzZSBhIG1lc3NhZ2UgYm94IHRvIGNvbmZpcm0gdGhlIHNlbGVjdGlvbi5cblx0ICogQHJldHVybnMgQSBwcm9taXNlIHRoYXQgcmVzb2x2ZXMgb24gb3BlbiBvZiB0aGUgbWFzcyBlZGl0IGRpYWxvZy5cblx0ICovXG5cdGFzeW5jIG9wZW4oKTogUHJvbWlzZTx2b2lkPiB7XG5cdFx0dHJ5IHtcblx0XHRcdGNvbnN0IHRlbXBsYXRlQ29tcG9uZW50ID0gQ29tcG9uZW50LmdldE93bmVyQ29tcG9uZW50Rm9yKHRoaXMudmlldykgYXMgVGVtcGxhdGVDb21wb25lbnQ7XG5cdFx0XHRjb25zdCBpbnRlcm5hbE1vZGVsQ29udGV4dCA9IHRoaXMudGFibGUuZ2V0QmluZGluZ0NvbnRleHQoXCJpbnRlcm5hbFwiKSBhcyBJbnRlcm5hbE1vZGVsQ29udGV4dCxcblx0XHRcdFx0aW50ZXJuYWxNb2RlbFByb3BlcnR5ID0gIXRoaXMub25Db250ZXh0TWVudSA/IFwibnVtYmVyT2ZTZWxlY3RlZENvbnRleHRzXCIgOiBcImNvbnRleHRtZW51L251bWJlck9mU2VsZWN0ZWRDb250ZXh0c1wiLFxuXHRcdFx0XHRzZWxlY3RlZENvbnRleHRzID0gaW50ZXJuYWxNb2RlbENvbnRleHQuZ2V0UHJvcGVydHkoaW50ZXJuYWxNb2RlbFByb3BlcnR5KSB8fCAwO1xuXHRcdFx0dGhpcy5maWVsZFByb3BlcnRpZXMgPSBhd2FpdCB0aGlzLmdldEZpZWxkc1Byb3BlcnRpZXNGcm9tSW5mbyh0aGlzLmdldEZpZWxkc0luZm8oKSk7XG5cdFx0XHRpZiAoIXRoaXMuaXNBZGFwdGF0aW9uKSB7XG5cdFx0XHRcdC8vIG5vIGZpZWxkIHRvIGVkaXRcblx0XHRcdFx0aWYgKCF0aGlzLmZpZWxkUHJvcGVydGllcy5zb21lKChmaWVsZCkgPT4gZmllbGQudmlzaWJsZSkpIHtcblx0XHRcdFx0XHR0aGlzLm5vRmllbGRJbmZvcm1hdGlvbigpO1xuXHRcdFx0XHRcdHJldHVybjtcblx0XHRcdFx0fVxuXHRcdFx0XHQvL1NvbWUgcm93cyBhcmUgbm90IGVkaXRhYmxlIC0+IGRvIHdlIHdhbnQgdG8gY29udGludWU/XG5cdFx0XHRcdGlmICh0aGlzLmNvbnRleHRzLmxlbmd0aCAhPT0gc2VsZWN0ZWRDb250ZXh0cykge1xuXHRcdFx0XHRcdHRoaXMuY29udGV4dHMgPSBhd2FpdCB0aGlzLmNvbmZpcm1TZWxlY3Rpb24odGhpcy5jb250ZXh0cywgc2VsZWN0ZWRDb250ZXh0cyk7XG5cdFx0XHRcdFx0aWYgKCF0aGlzLmNvbnRleHRzLmxlbmd0aCkge1xuXHRcdFx0XHRcdFx0Ly8gdGhlIHVzZXIgZG9lc24ndCB3YW50IHRvIGNvbnRpbnVlXG5cdFx0XHRcdFx0XHR0aGlzLm9uRGlhbG9nQ2xvc2U/LigpO1xuXHRcdFx0XHRcdFx0cmV0dXJuO1xuXHRcdFx0XHRcdH1cblx0XHRcdFx0fVxuXHRcdFx0fVxuXHRcdFx0YXdhaXQgdGVtcGxhdGVDb21wb25lbnQucnVuQXNPd25lcihhc3luYyAoKSA9PiB7XG5cdFx0XHRcdHRoaXMubWFzc0VkaXREaWFsb2cgPSBuZXcgTWFzc0VkaXREaWFsb2coe1xuXHRcdFx0XHRcdHRhYmxlOiB0aGlzLnRhYmxlLFxuXHRcdFx0XHRcdGNvbnRleHRzOiB0aGlzLmNvbnRleHRzLFxuXHRcdFx0XHRcdGZpZWxkUHJvcGVydGllczogdGhpcy5maWVsZFByb3BlcnRpZXNcblx0XHRcdFx0fSk7XG5cdFx0XHRcdGNvbnN0IGRpYWxvZyA9IGF3YWl0IHRoaXMubWFzc0VkaXREaWFsb2cuY3JlYXRlKCk7XG5cdFx0XHRcdGRpYWxvZy5hdHRhY2hCZWZvcmVDbG9zZSgoKSA9PiB7XG5cdFx0XHRcdFx0dGhpcy5vbkRpYWxvZ0Nsb3NlPy4oKTtcblx0XHRcdFx0fSk7XG5cdFx0XHRcdGRpYWxvZy5vcGVuKCk7XG5cdFx0XHRcdGNvbnN0IHJlcXVpcmVkRGF0YVByb21pc2UgPSB0aGlzLm1hc3NFZGl0RGlhbG9nLmdldFJlcXVpcmVkRGF0YVByb21pc2UoKTtcblx0XHRcdFx0dHJ5IHtcblx0XHRcdFx0XHRhd2FpdCB0aGlzLmdldERhdGFBZnRlck9wZW5pbmdEaWFsb2codGhpcy5maWVsZFByb3BlcnRpZXMpO1xuXHRcdFx0XHRcdHJlcXVpcmVkRGF0YVByb21pc2UucmVzb2x2ZSgpO1xuXHRcdFx0XHR9IGNhdGNoIChlcnJvcikge1xuXHRcdFx0XHRcdExvZy5lcnJvcihcIk1hc3MgRWRpdDogU29tZXRoaW5nIHdlbnQgd3JvbmcgaW4gbWFzcyBlZGl0IGRpYWxvZyB0byBnZXQgcmVxdWlyZWQgZGF0YS5cIiwgZXJyb3IgYXMgc3RyaW5nKTtcblx0XHRcdFx0XHRyZXF1aXJlZERhdGFQcm9taXNlLnJlamVjdCgpO1xuXHRcdFx0XHR9XG5cdFx0XHR9KTtcblx0XHR9IGNhdGNoIChlcnJvcjogdW5rbm93bikge1xuXHRcdFx0TG9nLmVycm9yKFwiTWFzcyBFZGl0OiBTb21ldGhpbmcgd2VudCB3cm9uZyBpbiBtYXNzIGVkaXQgZGlhbG9nIGNyZWF0aW9uLlwiLCBlcnJvciBhcyBzdHJpbmcpO1xuXHRcdH1cblx0fVxuXG5cdC8qKlxuXHQgKiBPcGVucyB0aGUgbWVzc2FnZSBib3ggdG8gbm90aWZ5IG5vIGZpZWxkcyBhcmUgZWRpdGFibGUuXG5cdCAqL1xuXHRwcml2YXRlIG5vRmllbGRJbmZvcm1hdGlvbigpOiB2b2lkIHtcblx0XHRjb25zdCB2aXNpYmxlRmllbGRzRnJvbU1hbmlmZXN0ID0gKHRoaXMudGFibGUuZ2V0UGFyZW50KCkgYXMgVGFibGVBUEkpLmdldFRhYmxlRGVmaW5pdGlvbigpLmNvbnRyb2wubWFzc0VkaXQudmlzaWJsZUZpZWxkcztcblx0XHRjb25zdCByZXNvdXJjZUJ1bmRsZSA9IExpYnJhcnkuZ2V0UmVzb3VyY2VCdW5kbGVGb3IoXCJzYXAuZmUubWFjcm9zXCIpIGFzIFJlc291cmNlQnVuZGxlO1xuXHRcdGxldCBtZXNzYWdlID0gXCJcIixcblx0XHRcdG1lc3NhZ2VEZXRhaWw7XG5cdFx0aWYgKHZpc2libGVGaWVsZHNGcm9tTWFuaWZlc3QubGVuZ3RoID4gMCkge1xuXHRcdFx0bWVzc2FnZSA9IHJlc291cmNlQnVuZGxlLmdldFRleHQoXCJDX01BU1NfRURJVF9OT19FRElUQUJMRV9GSUVMRFNfV0lUSF9NQU5JRkVTVFwiLCBbXG5cdFx0XHRcdHRoaXMuZ2V0UmVzb3VyY2VUZXh0KHRoaXMuaGVhZGVySW5mbz8uVHlwZU5hbWUpID8/IHJlc291cmNlQnVuZGxlLmdldFRleHQoXCJDX01BU1NfRURJVF9ESUFMT0dfREVGQVVMVF9UWVBFTkFNRVwiKVxuXHRcdFx0XSk7XG5cdFx0XHRtZXNzYWdlRGV0YWlsID0gYDx1bD5cblx0XHRcdCR7dGhpcy5maWVsZFByb3BlcnRpZXNcblx0XHRcdFx0LnJlZHVjZSgoZmllbGRzOiBzdHJpbmdbXSwgZmllbGRQcm9wZXJ0eSkgPT4ge1xuXHRcdFx0XHRcdGlmICh2aXNpYmxlRmllbGRzRnJvbU1hbmlmZXN0LmluY2x1ZGVzKGZpZWxkUHJvcGVydHkucHJvcGVydHlJbmZvLnJlbGF0aXZlUGF0aCkpIHtcblx0XHRcdFx0XHRcdGZpZWxkcy5wdXNoKGA8bGk+JHtmaWVsZFByb3BlcnR5LmxhYmVsfTwvbGk+YCk7XG5cdFx0XHRcdFx0fVxuXHRcdFx0XHRcdHJldHVybiBmaWVsZHM7XG5cdFx0XHRcdH0sIFtdKVxuXHRcdFx0XHQuam9pbihcIlwiKX0gPC91bD5gO1xuXHRcdH0gZWxzZSB7XG5cdFx0XHRtZXNzYWdlID0gcmVzb3VyY2VCdW5kbGUuZ2V0VGV4dChcIkNfTUFTU19FRElUX05PX0VESVRBQkxFX0ZJRUxEU19ERUZBVUxUXCIpO1xuXHRcdH1cblxuXHRcdE1lc3NhZ2VCb3guaW5mb3JtYXRpb24obWVzc2FnZSwge1xuXHRcdFx0ZGV0YWlsczogbWVzc2FnZURldGFpbCxcblx0XHRcdG9uQ2xvc2U6ICgpID0+IHtcblx0XHRcdFx0dGhpcy5vbkRpYWxvZ0Nsb3NlPy4oKTtcblx0XHRcdH1cblx0XHR9KTtcblx0fVxuXG5cdC8qKlxuXHQgKiBPcGVucyB0aGUgY29uZmlybWF0aW9uIGRpYWxvZyB0byB2YWxpZGF0ZSB0aGUgc2VsZWN0ZWQgY29udGV4dHMuXG5cdCAqIEBwYXJhbSBjb250ZXh0cyBUaGUgY29udGV4dHMgc2V0IGFzIHVwZGF0YWJsZVxuXHQgKiBAcGFyYW0gc2VsZWN0ZWRDb250ZXh0cyAgVGhlIG51bWJlciBvZiBzZWxlY3RlZCBjb250ZXh0c1xuXHQgKiBAcmV0dXJucyBBIHByb21pc2UgdGhhdCByZXNvbHZlcyB0aGUgY29udGV4dHMgdG8gYmUgZmluYWxseSBtYW5hZ2VkLlxuXHQgKi9cblx0cHJpdmF0ZSBhc3luYyBjb25maXJtU2VsZWN0aW9uKGNvbnRleHRzOiBPRGF0YVY0Q29udGV4dFtdLCBzZWxlY3RlZENvbnRleHRzOiBudW1iZXIpOiBQcm9taXNlPE9EYXRhVjRDb250ZXh0W10+IHtcblx0XHRjb25zdCByZXNvdXJjZU1vZGVsID0gUmVzb3VyY2VNb2RlbEhlbHBlci5nZXRSZXNvdXJjZU1vZGVsKHRoaXMudGFibGUpO1xuXHRcdGNvbnN0IGNvcmVSZXNvdXJjZUJ1bmRsZSA9IExpYnJhcnkuZ2V0UmVzb3VyY2VCdW5kbGVGb3IoXCJzYXAuZmUuY29yZVwiKSBhcyBSZXNvdXJjZUJ1bmRsZTtcblxuXHRcdGNvbnN0IHVwZGF0YWJsZUNvbnRleHRzID0gY29udGV4dHMubGVuZ3RoO1xuXHRcdHJldHVybiBuZXcgUHJvbWlzZSgocmVzb2x2ZSkgPT4ge1xuXHRcdFx0dHJ5IHtcblx0XHRcdFx0Y29uc3QgdGFibGVBUEkgPSB0aGlzLnRhYmxlLmdldFBhcmVudCgpIGFzIFRhYmxlQVBJO1xuXHRcdFx0XHRjb25zdCBlZGl0QnV0dG9uID0gcmVzb3VyY2VNb2RlbC5nZXRUZXh0KFwiQ19NQVNTX0VESVRfQ09ORklSTV9CVVRUT05fVEVYVFwiKSxcblx0XHRcdFx0XHRjYW5jZWxCdXR0b24gPSBjb3JlUmVzb3VyY2VCdW5kbGUuZ2V0VGV4dChcIkNfQ09NTU9OX09CSkVDVF9QQUdFX0NBTkNFTFwiKSxcblx0XHRcdFx0XHRtZXRhTW9kZWwgPSAodGhpcy50YWJsZS5nZXRNb2RlbCgpIGFzIE9EYXRhTW9kZWwpLmdldE1ldGFNb2RlbCgpLFxuXHRcdFx0XHRcdHR5cGVOYW1lID1cblx0XHRcdFx0XHRcdHRoaXMuZ2V0UmVzb3VyY2VUZXh0KHRoaXMuaGVhZGVySW5mbz8uVHlwZU5hbWUpID8/IHJlc291cmNlTW9kZWwuZ2V0VGV4dChcIkNfTUFTU19FRElUX0RJQUxPR19ERUZBVUxUX1RZUEVOQU1FXCIpLFxuXHRcdFx0XHRcdHR5cGVOYW1lUGx1cmFsID1cblx0XHRcdFx0XHRcdHRoaXMuZ2V0UmVzb3VyY2VUZXh0KHRoaXMuaGVhZGVySW5mbz8uVHlwZU5hbWVQbHVyYWwpID8/XG5cdFx0XHRcdFx0XHRyZXNvdXJjZU1vZGVsLmdldFRleHQoXCJDX01BU1NfRURJVF9ESUFMT0dfREVGQVVMVF9UWVBFTkFNRV9QTFVSQUxcIiksXG5cdFx0XHRcdFx0bWVzc2FnZURldGFpbCA9XG5cdFx0XHRcdFx0XHRNb2RlbEhlbHBlci5pc0RyYWZ0U3VwcG9ydGVkKG1ldGFNb2RlbCwgdGhpcy50YWJsZS5kYXRhKFwidGFyZ2V0Q29sbGVjdGlvblBhdGhcIikpICYmIHRhYmxlQVBJLnJlYWRPbmx5XG5cdFx0XHRcdFx0XHRcdD8gdGhpcy5nZXRNZXNzYWdlRGV0YWlsRm9yTm9uRWRpdGFibGUodHlwZU5hbWUsIHR5cGVOYW1lUGx1cmFsKVxuXHRcdFx0XHRcdFx0XHQ6IFwiXCI7XG5cblx0XHRcdFx0TWVzc2FnZUJveC53YXJuaW5nKFxuXHRcdFx0XHRcdHJlc291cmNlTW9kZWwuZ2V0VGV4dChcIkNfTUFTU19FRElUX0NPTkZJUk1fTUVTU0FHRVwiLCBbXG5cdFx0XHRcdFx0XHRzZWxlY3RlZENvbnRleHRzIC0gdXBkYXRhYmxlQ29udGV4dHMsXG5cdFx0XHRcdFx0XHRzZWxlY3RlZENvbnRleHRzLFxuXHRcdFx0XHRcdFx0dXBkYXRhYmxlQ29udGV4dHMsXG5cdFx0XHRcdFx0XHR0eXBlTmFtZVBsdXJhbFxuXHRcdFx0XHRcdF0pLFxuXHRcdFx0XHRcdHtcblx0XHRcdFx0XHRcdGRldGFpbHM6IG1lc3NhZ2VEZXRhaWwsXG5cdFx0XHRcdFx0XHRhY3Rpb25zOiBbZWRpdEJ1dHRvbiwgY2FuY2VsQnV0dG9uXSxcblx0XHRcdFx0XHRcdGVtcGhhc2l6ZWRBY3Rpb246IGVkaXRCdXR0b24sXG5cdFx0XHRcdFx0XHRvbkNsb3NlOiBmdW5jdGlvbiAoc2VsZWN0aW9uOiBzdHJpbmcpIHtcblx0XHRcdFx0XHRcdFx0cmVzb2x2ZShzZWxlY3Rpb24gPT09IGVkaXRCdXR0b24gPyBjb250ZXh0cyA6IFtdKTtcblx0XHRcdFx0XHRcdH1cblx0XHRcdFx0XHR9XG5cdFx0XHRcdCk7XG5cdFx0XHR9IGNhdGNoIChlcnJvcikge1xuXHRcdFx0XHRMb2cuZXJyb3IoZXJyb3IgYXMgc3RyaW5nKTtcblx0XHRcdH1cblx0XHR9KTtcblx0fVxuXG5cdC8qKlxuXHQgKiBHZXRzIHRoZSB0ZXh0IGFjY29yZGluZyB0byBhbiBhbm5vdGF0aW9uLlxuXHQgKiBAcGFyYW0gYW5ub3RhdGlvbiBUaGUgYW5ub3RhdGlvblxuXHQgKiBAcmV0dXJucyBUaGUgdGV4dC5cblx0ICovXG5cdHByaXZhdGUgZ2V0UmVzb3VyY2VUZXh0KGFubm90YXRpb246IFByb3BlcnR5QW5ub3RhdGlvblZhbHVlPFN0cmluZz4gfCB1bmRlZmluZWQpOiBzdHJpbmcgfCB1bmRlZmluZWQge1xuXHRcdGlmICghYW5ub3RhdGlvbikge1xuXHRcdFx0cmV0dXJuIHVuZGVmaW5lZDtcblx0XHR9XG5cdFx0cmV0dXJuIENvbW1vblV0aWxzLmdldFRyYW5zbGF0ZWRUZXh0RnJvbUV4cEJpbmRpbmdTdHJpbmcoXG5cdFx0XHRjb21waWxlRXhwcmVzc2lvbihnZXRFeHByZXNzaW9uRnJvbUFubm90YXRpb24oYW5ub3RhdGlvbikpIGFzIHN0cmluZyxcblx0XHRcdHRoaXMudmlld1xuXHRcdCk/LnRvTG9jYWxlTG93ZXJDYXNlKCk7XG5cdH1cblxuXHQvKipcblx0ICogR2V0cyB0aGUgbWVzc2FnZSBkZXRhaWwgb2YgdGhlIGNvbmZpcm1hdGlvbiBkaWFsb2cuXG5cdCAqIEBwYXJhbSB0eXBlTmFtZSBUaGUgdHlwZSBuYW1lIG9mIHRoZSBlbnRpdHkgc2V0XG5cdCAqIEBwYXJhbSB0eXBlTmFtZVBsdXJhbCBUaGUgdHlwZSBuYW1lIHBsdXJhbCBvZiB0aGUgZW50aXR5IHNldFxuXHQgKiBAcmV0dXJucyBUaGUgdGV4dC5cblx0ICovXG5cdHByaXZhdGUgZ2V0TWVzc2FnZURldGFpbEZvck5vbkVkaXRhYmxlKHR5cGVOYW1lOiBzdHJpbmcsIHR5cGVOYW1lUGx1cmFsOiBzdHJpbmcpOiBzdHJpbmcge1xuXHRcdGNvbnN0IHJlc291cmNlQnVuZGxlID0gTGlicmFyeS5nZXRSZXNvdXJjZUJ1bmRsZUZvcihcInNhcC5mZS5tYWNyb3NcIikgYXMgUmVzb3VyY2VCdW5kbGU7XG5cdFx0cmV0dXJuIGA8cD48c3Ryb25nPiR7cmVzb3VyY2VCdW5kbGUuZ2V0VGV4dChcIkNfTUFTU19FRElUX0NPTkZJUk1fTUVTU0FHRV9ERVRBSUxfSEVBREVSXCIpfTwvc3Ryb25nPjwvcD5cXG5cblx0XHRcdDxwPiR7cmVzb3VyY2VCdW5kbGUuZ2V0VGV4dChcIkNfTUFTU19FRElUX0NPTkZJUk1fTUVTU0FHRV9ERVRBSUxfUkVBU09OXCIsIFt0eXBlTmFtZVBsdXJhbF0pfTwvcD5cXG5cblx0XHRcdDx1bD5cblx0XHRcdFx0PGxpPiR7cmVzb3VyY2VCdW5kbGUuZ2V0VGV4dChcIkNfTUFTU19FRElUX0NPTkZJUk1fTUVTU0FHRV9ERVRBSUxfUkVBU09OX0RSQUZUXCIsIFt0eXBlTmFtZV0pfTwvbGk+XG5cdFx0XHRcdDxsaT4ke3Jlc291cmNlQnVuZGxlLmdldFRleHQoXCJDX01BU1NfRURJVF9DT05GSVJNX01FU1NBR0VfREVUQUlMX1JFQVNPTl9OT05fRURJVEFCTEVcIiwgW3R5cGVOYW1lXSl9PC9saT5cblx0XHRcdDwvdWw+YDtcblx0fVxuXG5cdC8qKlxuXHQgKiBHZXRzIGluZm9ybWF0aW9uIGFib3V0IHRoZSBlbnRpdHkgd2hpY2ggaXMgY29tcGxpYW50IGZvciBhIE1hc3MgRWRpdC5cblx0ICogQHJldHVybnMgQXJyYXkgb2YgdGhlIGZpZWxkIGluZm9ybWF0aW9uLlxuXHQgKi9cblxuXHRwcml2YXRlIGdldEVudGl0eUZpZWxkc0luZm8oKTogRmllbGRJbmZvW10ge1xuXHRcdGNvbnN0IHRhYmxlQVBJID0gdGhpcy50YWJsZS5nZXRQYXJlbnQoKSBhcyBUYWJsZUFQSTtcblx0XHRjb25zdCBjb2x1bW5zRGF0YSA9IHRhYmxlQVBJLmdldFRhYmxlRGVmaW5pdGlvbigpLmNvbHVtbnM7XG5cblx0XHRjb25zdCBwcm9wZXJ0aWVzS2V5cyA9IG5ldyBTZXQoXG5cdFx0XHRjb2x1bW5zRGF0YS5yZWR1Y2UoKGZpZWxkczogc3RyaW5nW10sIGNvbHVtbikgPT4ge1xuXHRcdFx0XHRpZiAoY29sdW1uLnR5cGUgPT09IFwiQW5ub3RhdGlvblwiKSB7XG5cdFx0XHRcdFx0ZmllbGRzLnB1c2goY29sdW1uLm5hbWUpO1xuXHRcdFx0XHR9XG5cdFx0XHRcdHJldHVybiBmaWVsZHM7XG5cdFx0XHR9LCBbXSlcblx0XHQpO1xuXHRcdHJldHVybiB0aGlzLnRyYW5zZm9ybVBhdGhzVG9JbmZvKHByb3BlcnRpZXNLZXlzKTtcblx0fVxuXG5cdC8qKlxuXHQgKiBHZXRzIGluZm9ybWF0aW9uIGFib3V0IHRoZSBwcm9wZXJ0aWVzIG9mIHRoZSB0YWJsZSB3aGljaCBhcmUgY29tcGxpYW50IGZvciBhIE1hc3MgRWRpdC5cblx0ICogQHJldHVybnMgQXJyYXkgb2YgdGhlIGZpZWxkIGluZm9ybWF0aW9uLlxuXHQgKi9cblx0cHJpdmF0ZSBnZXRGaWVsZHNJbmZvKCk6IEZpZWxkSW5mb1tdIHtcblx0XHRjb25zdCBwcm9wZXJ0aWVzS2V5cyA9XG5cdFx0XHR0aGlzLm1hbmlmZXN0U2V0dGluZ3MudmlzaWJsZUZpZWxkcy5sZW5ndGggPiAwXG5cdFx0XHRcdD8gbmV3IFNldCh0aGlzLm1hbmlmZXN0U2V0dGluZ3MudmlzaWJsZUZpZWxkcylcblx0XHRcdFx0OiBuZXcgU2V0KHRoaXMudGFibGUuZ2V0Q29sdW1ucygpLm1hcCgoY29sdW1uKSA9PiBjb2x1bW4uZ2V0UHJvcGVydHlLZXkoKSkpO1xuXG5cdFx0aWYgKHRoaXMubWFuaWZlc3RTZXR0aW5ncy5pZ25vcmVkRmllbGRzLmxlbmd0aCA+IDApIHtcblx0XHRcdGZvciAoY29uc3QgaWdub3JlZEZpZWxkIG9mIHRoaXMubWFuaWZlc3RTZXR0aW5ncy5pZ25vcmVkRmllbGRzKSB7XG5cdFx0XHRcdHByb3BlcnRpZXNLZXlzLmRlbGV0ZShpZ25vcmVkRmllbGQpO1xuXHRcdFx0fVxuXHRcdH1cblx0XHRyZXR1cm4gdGhpcy50cmFuc2Zvcm1QYXRoc1RvSW5mbyhwcm9wZXJ0aWVzS2V5cyk7XG5cdH1cblxuXHQvKipcblx0ICogVHJhbnNmb3JtcyBhIHNldCBvZiBwcm9wZXJ0eSBwYXRocyB0byBhbiBhcnJheSBvZiBmaWVsZCBpbmZvcm1hdGlvbi5cblx0ICogQHBhcmFtIHByb3BlcnRpZXNQYXRocyBUaGUgc2V0IG9mIHByb3BlcnR5IHBhdGhzXG5cdCAqIEByZXR1cm5zIEFycmF5IG9mIHRoZSBmaWVsZCBpbmZvcm1hdGlvbi5cblx0ICovXG5cdHByaXZhdGUgdHJhbnNmb3JtUGF0aHNUb0luZm8ocHJvcGVydGllc1BhdGhzOiBTZXQ8c3RyaW5nPik6IEZpZWxkSW5mb1tdIHtcblx0XHRyZXR1cm4gQXJyYXkuZnJvbShwcm9wZXJ0aWVzUGF0aHMpLnJlZHVjZSgoY29sdW1uSW5mb3M6IEZpZWxkSW5mb1tdLCBwcm9wZXJ0eVBhdGgpID0+IHtcblx0XHRcdGNvbnN0IGNvbHVtbkluZm8gPSB0aGlzLmdldEZpZWxkSW5mbyhwcm9wZXJ0eVBhdGgpO1xuXHRcdFx0aWYgKGNvbHVtbkluZm8pIHtcblx0XHRcdFx0Y29sdW1uSW5mb3MucHVzaChjb2x1bW5JbmZvKTtcblx0XHRcdH1cblx0XHRcdHJldHVybiBjb2x1bW5JbmZvcztcblx0XHR9LCBbXSk7XG5cdH1cblxuXHQvKipcblx0ICogR2V0cyBpbmZvcm1hdGlvbiBhYm91dCBhIHByb3BlcnR5LlxuXHQgKiBAcGFyYW0gcHJvcGVydHlQYXRoXG5cdCAqIEByZXR1cm5zIEZpZWxkIGluZm9ybWF0aW9uLlxuXHQgKi9cblx0cHJpdmF0ZSBnZXRGaWVsZEluZm8ocHJvcGVydHlQYXRoOiBzdHJpbmcpOiBGaWVsZEluZm8gfCB1bmRlZmluZWQge1xuXHRcdGNvbnN0IGNvbHVtbnNEYXRhID0gKHRoaXMudGFibGUuZ2V0UGFyZW50KCkgYXMgVGFibGVBUEkpLmdldFRhYmxlRGVmaW5pdGlvbigpLmNvbHVtbnM7XG5cdFx0Y29uc3QgbWV0YU1vZGVsID0gKHRoaXMudGFibGUuZ2V0TW9kZWwoKSBhcyBPRGF0YU1vZGVsKS5nZXRNZXRhTW9kZWwoKTtcblx0XHRjb25zdCBlbnRpdHlQYXRoID0gbWV0YU1vZGVsLmdldE1ldGFQYXRoKHRoaXMudGFibGUuZGF0YShcIm1ldGFQYXRoXCIpKTtcblx0XHRjb25zdCBlbnRpdHlTZXREYXRhTW9kZWwgPSBnZXRJbnZvbHZlZERhdGFNb2RlbE9iamVjdHMobWV0YU1vZGVsLmdldENvbnRleHQoZW50aXR5UGF0aCkpO1xuXHRcdGNvbnN0IHJlbGF0ZWRDb2x1bW5JbmZvID0gY29sdW1uc0RhdGEuZmluZCgoZmllbGRJbmZvKSA9PiBmaWVsZEluZm8ubmFtZSA9PT0gcHJvcGVydHlQYXRoICYmIGZpZWxkSW5mby50eXBlID09PSBcIkFubm90YXRpb25cIik7XG5cdFx0aWYgKHJlbGF0ZWRDb2x1bW5JbmZvKSB7XG5cdFx0XHRjb25zdCBhbm5vdGF0aW9uUGF0aCA9IChyZWxhdGVkQ29sdW1uSW5mbyBhcyBBbm5vdGF0aW9uVGFibGVDb2x1bW4pLmFubm90YXRpb25QYXRoO1xuXHRcdFx0aWYgKGFubm90YXRpb25QYXRoICYmIHByb3BlcnR5UGF0aCkge1xuXHRcdFx0XHRjb25zdCBwcm9wZXJ0eURhdGFNb2RlbCA9IGVuaGFuY2VEYXRhTW9kZWxQYXRoPFByb3BlcnR5PihlbnRpdHlTZXREYXRhTW9kZWwsIHByb3BlcnR5UGF0aCk7XG5cdFx0XHRcdGNvbnN0IGNvbnZlcnRlZEFubm90YXRpb24gPSBjb252ZXJ0TWV0YU1vZGVsQ29udGV4dChtZXRhTW9kZWwuZ2V0Q29udGV4dChhbm5vdGF0aW9uUGF0aCkpIGFzXG5cdFx0XHRcdFx0fCBEYXRhRmllbGRcblx0XHRcdFx0XHR8IERhdGFGaWVsZEZvckFubm90YXRpb25cblx0XHRcdFx0XHR8IERhdGFGaWVsZEZvckFjdGlvbjtcblx0XHRcdFx0Y29uc3QgdGFyZ2V0UHJvcGVydHkgPSB0aGlzLmdldENvbXBsaWFudFByb3BlcnR5KHByb3BlcnR5RGF0YU1vZGVsLCBjb252ZXJ0ZWRBbm5vdGF0aW9uKTtcblx0XHRcdFx0aWYgKHRhcmdldFByb3BlcnR5ICYmIGVudGl0eVNldERhdGFNb2RlbC50YXJnZXRFbnRpdHlUeXBlLmVudGl0eVByb3BlcnRpZXMuaW5jbHVkZXModGFyZ2V0UHJvcGVydHkpKVxuXHRcdFx0XHRcdHJldHVybiB7XG5cdFx0XHRcdFx0XHRrZXk6IHJlbGF0ZWRDb2x1bW5JbmZvLmtleSxcblx0XHRcdFx0XHRcdHByb3BlcnR5RGF0YU1vZGVsLFxuXHRcdFx0XHRcdFx0dGFyZ2V0UHJvcGVydHksXG5cdFx0XHRcdFx0XHRsYWJlbDogcmVsYXRlZENvbHVtbkluZm8ubGFiZWwgPz8gcmVsYXRlZENvbHVtbkluZm8ua2V5LFxuXHRcdFx0XHRcdFx0Y29udmVydGVkQW5ub3RhdGlvblxuXHRcdFx0XHRcdH07XG5cdFx0XHR9XG5cdFx0fVxuXHRcdHJldHVybiB1bmRlZmluZWQ7XG5cdH1cblxuXHQvKipcblx0ICogR2V0cyB0aGUgcHJvcGVydHkgdG8gZGlzcGxheSBvbiB0aGUgRGlhbG9nLlxuXHQgKiBAcGFyYW0gcHJvcGVydHlEYXRhTW9kZWwgVGhlIGRhdGFNb2RlbE9iamVjdFBhdGggb2YgdGhlIGNvbHVtblxuXHQgKiBAcGFyYW0gYW5ub3RhdGlvbiAgVGhlIGNvbnZlcnRlZCBhbm5vdGF0aW9uIG9mIHRoZSBjb2x1bW5cblx0ICogQHJldHVybnMgVGhlIHByb3BlcnR5IGlmIGl0IGlzIGNvbXBsaWFudCwgdW5kZWZpbmVkIG90aGVyd2lzZVxuXHQgKi9cblx0cHJpdmF0ZSBnZXRDb21wbGlhbnRQcm9wZXJ0eShwcm9wZXJ0eURhdGFNb2RlbDogRGF0YU1vZGVsT2JqZWN0UGF0aDxQcm9wZXJ0eT4sIGFubm90YXRpb246IERhdGFGaWVsZFR5cGVzKTogUHJvcGVydHkgfCB1bmRlZmluZWQge1xuXHRcdGNvbnN0IHRhcmdldE9iamVjdCA9IHByb3BlcnR5RGF0YU1vZGVsLnRhcmdldE9iamVjdDtcblx0XHRsZXQgdGFyZ2V0UHJvcGVydHk6IFByb3BlcnR5O1xuXHRcdGlmIChpc1Byb3BlcnR5KHRhcmdldE9iamVjdCkpIHtcblx0XHRcdHRhcmdldFByb3BlcnR5ID0gdGFyZ2V0T2JqZWN0O1xuXHRcdFx0aWYgKHRhcmdldE9iamVjdC5hbm5vdGF0aW9ucy5VST8uSXNJbWFnZVVSTCkge1xuXHRcdFx0XHRyZXR1cm47XG5cdFx0XHR9XG5cdFx0fSBlbHNlIGlmIChpc0RhdGFGaWVsZFR5cGVzKGFubm90YXRpb24pICYmICFhbm5vdGF0aW9uLmhhc093blByb3BlcnR5KFwiQWN0aW9uXCIpKSB7XG5cdFx0XHR0YXJnZXRQcm9wZXJ0eSA9IGFubm90YXRpb24uVmFsdWUuJHRhcmdldDtcblx0XHR9IGVsc2Uge1xuXHRcdFx0cmV0dXJuO1xuXHRcdH1cblxuXHRcdC8vIENoZWNrIGlmIHRoZSBmaWVsZCBpcyBjb21wbGlhbnQgZm9yIHRoZSBNYXNzRWRpdFxuXHRcdGNvbnN0IHVuaXRQcm9wZXJ0eSA9IGdldEFzc29jaWF0ZWRVbml0UHJvcGVydHkodGFyZ2V0UHJvcGVydHkpO1xuXHRcdGlmIChcblx0XHRcdGlzTXVsdGlWYWx1ZUZpZWxkKHByb3BlcnR5RGF0YU1vZGVsKSB8fFxuXHRcdFx0KGhhc1ZhbHVlSGVscCh0YXJnZXRQcm9wZXJ0eSkgJiYgdGFyZ2V0UHJvcGVydHkuYW5ub3RhdGlvbnM/LkNvbW1vbj8uVmFsdWVMaXN0UmVsZXZhbnRRdWFsaWZpZXJzKSB8fCAvLyBjb250ZXh0IGRlcGVuZGVudCBWSCBpcyBub3Qgc3VwcG9ydGVkIGZvciBNYXNzIEVkaXQuXG5cdFx0XHQodW5pdFByb3BlcnR5ICYmIGhhc1ZhbHVlSGVscCh1bml0UHJvcGVydHkpICYmIHVuaXRQcm9wZXJ0eS5hbm5vdGF0aW9ucz8uQ29tbW9uPy5WYWx1ZUxpc3RSZWxldmFudFF1YWxpZmllcnMpXG5cdFx0KSB7XG5cdFx0XHRyZXR1cm47XG5cdFx0fVxuXHRcdHJldHVybiB0YXJnZXRQcm9wZXJ0eTtcblx0fVxuXG5cdC8qKlxuXHQgKiBDaGVja3MgaWYgdGhlIGZpZWxkIGlzIGhpZGRlbiBmb3IgdGhlIHByb3ZpZGVkIGNvbnRleHRzLlxuXHQgKiBAcGFyYW0gZXhwQmluZGluZyBUaGUgZXhwcmVzc2lvbiBiaW5kaW5nIG9mIHRoZSBwcm9wZXJ0eS5cblx0ICogQHJldHVybnMgVHJ1ZSBpZiB0aGUgZmllbGQgaXMgaGlkZGVuIGZvciBhbGwgY29udGV4dHMsIGZhbHNlIG90aGVyd2lzZVxuXHQgKi9cblx0cHJpdmF0ZSBpc0hpZGRlbkZvckNvbnRleHRzKGV4cEJpbmRpbmc6IENvbXBpbGVkQmluZGluZ1Rvb2xraXRFeHByZXNzaW9uKTogYm9vbGVhbiB7XG5cdFx0aWYgKGV4cEJpbmRpbmcgPT09IFwidHJ1ZVwiKSB7XG5cdFx0XHRyZXR1cm4gZmFsc2U7XG5cdFx0fSBlbHNlIGlmIChleHBCaW5kaW5nID09PSBcImZhbHNlXCIpIHtcblx0XHRcdHJldHVybiB0cnVlO1xuXHRcdH1cblx0XHRjb25zdCBhbnlPYmplY3QgPSBuZXcgQW55KHsgYW55Qm9vbGVhbjogZXhwQmluZGluZyB9KTtcblx0XHRhbnlPYmplY3Quc2V0TW9kZWwodGhpcy5hbmFseXplZENvbnRleHRzWzBdLmdldE1vZGVsKCkpO1xuXHRcdGNvbnN0IGlzSGlkZGVuID0gIXRoaXMuYW5hbHl6ZWRDb250ZXh0cy5maW5kKChjb250ZXh0KSA9PiB7XG5cdFx0XHRhbnlPYmplY3Quc2V0QmluZGluZ0NvbnRleHQoY29udGV4dCk7XG5cdFx0XHRyZXR1cm4gKGFueU9iamVjdC5nZXRCaW5kaW5nKFwiYW55Qm9vbGVhblwiKSBhcyBQcm9wZXJ0eUJpbmRpbmcpLmdldEV4dGVybmFsVmFsdWUoKTtcblx0XHR9KTtcblx0XHRhbnlPYmplY3QuZGVzdHJveSgpO1xuXHRcdHJldHVybiBpc0hpZGRlbjtcblx0fVxuXG5cdC8qKlxuXHQgKiBHZXRzIHRoZSBzZWxlY3RlZCBjb250ZXh0IHNldCBhcyB1cGRhdGFibGUuXG5cdCAqIEByZXR1cm5zIFRoZSBjb250ZXh0cy5cblx0ICovXG5cdHByaXZhdGUgZmV0Y2hDb250ZXh0c0ZvckVkaXQoKTogT0RhdGFWNENvbnRleHRbXSB7XG5cdFx0Y29uc3QgaW50ZXJuYWxNb2RlbENvbnRleHQgPSB0aGlzLnRhYmxlLmdldEJpbmRpbmdDb250ZXh0KFwiaW50ZXJuYWxcIiksXG5cdFx0XHR1cGRhdGFibGVDb250ZXh0UHJvcGVydHkgPSAhdGhpcy5vbkNvbnRleHRNZW51ID8gXCJ1cGRhdGFibGVDb250ZXh0c1wiIDogXCJjb250ZXh0bWVudS91cGRhdGFibGVDb250ZXh0c1wiO1xuXHRcdHJldHVybiBpbnRlcm5hbE1vZGVsQ29udGV4dD8uZ2V0UHJvcGVydHkodXBkYXRhYmxlQ29udGV4dFByb3BlcnR5KSA/PyBbXTtcblx0fVxuXG5cdC8qKlxuXHQgKiBHZXRzIHRoZSBwcm9wZXJ0aWVzIG9mIHRoZSBtYXNzIGVkaXQgZmllbGRzLlxuXHQgKiBAcmV0dXJucyBUaGUgcHJvcGVydGllcyBvZiB0aGUgbWFzcyBlZGl0IGZpZWxkLlxuXHQgKi9cblx0Z2V0RmllbGRQcm9wZXJ0aWVzKCk6IE1hc3NGaWVsZFByb3BlcnRpZXNbXSB7XG5cdFx0cmV0dXJuIGRlZXBDbG9uZSh0aGlzLmZpZWxkUHJvcGVydGllcyk7XG5cdH1cblxuXHQvKipcblx0ICogR2V0cyB0aGUgcHJvcGVydGllcyBvZiB0aGUgbWFzcyBlZGl0IGZpZWxkcyBmcm9tIGFuIGFycmF5IG9mIGZpZWxkIGluZm9ybWF0aW9uLlxuXHQgKiBAcGFyYW0gZmllbGRzSW5mbyBUaGUgZmllbGQgaW5mb3JtYXRpb24uXG5cdCAqIEByZXR1cm5zIFRoZSBwcm9wZXJ0aWVzIG9mIHRoZSBtYXNzIGVkaXQgZmllbGRzLlxuXHQgKi9cblx0cHJpdmF0ZSBhc3luYyBnZXRGaWVsZHNQcm9wZXJ0aWVzRnJvbUluZm8oZmllbGRzSW5mbzogRmllbGRJbmZvW10pOiBQcm9taXNlPE1hc3NGaWVsZFByb3BlcnRpZXNbXT4ge1xuXHRcdGNvbnN0IGZpZWxkUHJvcGVydGllczogTWFzc0ZpZWxkUHJvcGVydGllc1tdID0gW107XG5cblx0XHRmb3IgKGNvbnN0IGZpZWxkSW5mbyBvZiBmaWVsZHNJbmZvKSB7XG5cdFx0XHRjb25zdCB7IHRhcmdldFByb3BlcnR5LCBwcm9wZXJ0eURhdGFNb2RlbCwgY29udmVydGVkQW5ub3RhdGlvbiB9ID0gZmllbGRJbmZvO1xuXHRcdFx0Y29uc3QgZGF0YVByb3BlcnR5UGF0aCA9IGdldENvbnRleHRSZWxhdGl2ZVRhcmdldE9iamVjdFBhdGgocHJvcGVydHlEYXRhTW9kZWwpO1xuXHRcdFx0aWYgKGRhdGFQcm9wZXJ0eVBhdGgpIHtcblx0XHRcdFx0Y29uc3QgdW5pdE9yQ3VycmVuY3lQcm9wZXJ0eVBhdGggPVxuXHRcdFx0XHRcdGdldEFzc29jaWF0ZWRVbml0UHJvcGVydHlQYXRoKHRhcmdldFByb3BlcnR5KSB8fCBnZXRBc3NvY2lhdGVkQ3VycmVuY3lQcm9wZXJ0eVBhdGgodGFyZ2V0UHJvcGVydHkpO1xuXHRcdFx0XHRjb25zdCBpbnB1dFR5cGUgPSB0aGlzLmdldElucHV0VHlwZShjb252ZXJ0ZWRBbm5vdGF0aW9uLCBwcm9wZXJ0eURhdGFNb2RlbCk7XG5cdFx0XHRcdGlmIChpbnB1dFR5cGUgJiYgcHJvcGVydHlEYXRhTW9kZWwudGFyZ2V0T2JqZWN0KSB7XG5cdFx0XHRcdFx0Y29uc3QgcmVsYXRpdmVQYXRoID0gZ2V0UmVsYXRpdmVQYXRocyhwcm9wZXJ0eURhdGFNb2RlbCk7XG5cdFx0XHRcdFx0Y29uc3QgZmllbGREYXRhID0ge1xuXHRcdFx0XHRcdFx0dmlzaWJpbGl0eUJpbmRpbmdzOiB7XG5cdFx0XHRcdFx0XHRcdGlzVmlzaWJsZTogY29tcGlsZUV4cHJlc3Npb24oaXNWaXNpYmxlKGNvbnZlcnRlZEFubm90YXRpb24pKSxcblx0XHRcdFx0XHRcdFx0ZWRpdE1vZGU6IGdldEVkaXRNb2RlKFxuXHRcdFx0XHRcdFx0XHRcdHRhcmdldFByb3BlcnR5LFxuXHRcdFx0XHRcdFx0XHRcdHByb3BlcnR5RGF0YU1vZGVsLFxuXHRcdFx0XHRcdFx0XHRcdGZhbHNlLFxuXHRcdFx0XHRcdFx0XHRcdGZhbHNlLFxuXHRcdFx0XHRcdFx0XHRcdGNvbnZlcnRlZEFubm90YXRpb24sXG5cdFx0XHRcdFx0XHRcdFx0Y29uc3RhbnQodHJ1ZSlcblx0XHRcdFx0XHRcdFx0KSBhcyBDb21waWxlZEJpbmRpbmdUb29sa2l0RXhwcmVzc2lvblxuXHRcdFx0XHRcdFx0fSxcblx0XHRcdFx0XHRcdHZpc2libGU6IHRydWUsIC8vYnkgZGVmYXVsdCB0aGUgZmllbGQgaXMgdmlzaWJsZVxuXHRcdFx0XHRcdFx0bGFiZWw6IGZpZWxkSW5mby5sYWJlbCB8fCAodGFyZ2V0UHJvcGVydHkuYW5ub3RhdGlvbnMuQ29tbW9uPy5MYWJlbCBhcyBzdHJpbmcgfCB1bmRlZmluZWQpIHx8IGRhdGFQcm9wZXJ0eVBhdGgsXG5cdFx0XHRcdFx0XHRpc0ZpZWxkUmVxdWlyZWQ6IGdldFJlcXVpcmVkRXhwcmVzc2lvbihcblx0XHRcdFx0XHRcdFx0dGFyZ2V0UHJvcGVydHksXG5cdFx0XHRcdFx0XHRcdGNvbnZlcnRlZEFubm90YXRpb24sXG5cdFx0XHRcdFx0XHRcdHRydWUsXG5cdFx0XHRcdFx0XHRcdGZhbHNlLFxuXHRcdFx0XHRcdFx0XHR7fSxcblx0XHRcdFx0XHRcdFx0cHJvcGVydHlEYXRhTW9kZWxcblx0XHRcdFx0XHRcdCkgYXMgQ29tcGlsZWRCaW5kaW5nVG9vbGtpdEV4cHJlc3Npb24sXG5cdFx0XHRcdFx0XHRkZXNjcmlwdGlvblBhdGg6IGdldEFzc29jaWF0ZWRUZXh0UHJvcGVydHlQYXRoKHByb3BlcnR5RGF0YU1vZGVsLnRhcmdldE9iamVjdCksXG5cdFx0XHRcdFx0XHR0ZXh0QmluZGluZzoge1xuXHRcdFx0XHRcdFx0XHRleHByZXNzaW9uOiBnZXRUZXh0QmluZGluZyhwcm9wZXJ0eURhdGFNb2RlbCwge1xuXHRcdFx0XHRcdFx0XHRcdGRpc3BsYXlNb2RlOiBnZXREaXNwbGF5TW9kZSh0YXJnZXRQcm9wZXJ0eSwgcHJvcGVydHlEYXRhTW9kZWwudGFyZ2V0RW50aXR5VHlwZSlcblx0XHRcdFx0XHRcdFx0fSkgYXMgQ29tcGlsZWRCaW5kaW5nVG9vbGtpdEV4cHJlc3Npb24sXG5cdFx0XHRcdFx0XHRcdHR5cGU6XG5cdFx0XHRcdFx0XHRcdFx0dGFyZ2V0UHJvcGVydHkudHlwZSA9PT0gXCJFZG0uRGF0ZVRpbWVPZmZzZXRcIiB8fCB0YXJnZXRQcm9wZXJ0eT8uYW5ub3RhdGlvbnM/LkNvbW1vbj8uSXNUaW1lem9uZVxuXHRcdFx0XHRcdFx0XHRcdFx0PyBcImFueVRleHRcIlxuXHRcdFx0XHRcdFx0XHRcdFx0OiBcImFueVwiXG5cdFx0XHRcdFx0XHR9LFxuXHRcdFx0XHRcdFx0cmVhZE9ubHlFeHByZXNzaW9uOiBpc1JlYWRPbmx5RXhwcmVzc2lvbih0YXJnZXRQcm9wZXJ0eSwgcmVsYXRpdmVQYXRoKSxcblx0XHRcdFx0XHRcdGlucHV0VHlwZSxcblx0XHRcdFx0XHRcdHByb3BlcnR5SW5mbzoge1xuXHRcdFx0XHRcdFx0XHRjbGVhcmFibGU6IHRoaXMuaXNQcm9wZXJ0eUNsZWFyYWJsZSh0YXJnZXRQcm9wZXJ0eSksXG5cdFx0XHRcdFx0XHRcdGVtcHR5VmFsdWU6IHRoaXMuZ2V0RW1wdHlWYWx1ZUZvclByb3BlcnR5KHRhcmdldFByb3BlcnR5LCBkYXRhUHJvcGVydHlQYXRoKSxcblx0XHRcdFx0XHRcdFx0a2V5OiBmaWVsZEluZm8ua2V5LFxuXHRcdFx0XHRcdFx0XHRyZWxhdGl2ZVBhdGg6IGRhdGFQcm9wZXJ0eVBhdGgsXG5cdFx0XHRcdFx0XHRcdHVuaXRPckN1cnJlbmN5UHJvcGVydHlQYXRoXG5cdFx0XHRcdFx0XHR9LFxuXHRcdFx0XHRcdFx0c2VsZWN0SXRlbXM6IFtdIGFzIFNlbGVjdEluZm9bXVxuXHRcdFx0XHRcdH07XG5cdFx0XHRcdFx0ZmllbGRQcm9wZXJ0aWVzLnB1c2goZmllbGREYXRhKTtcblx0XHRcdFx0fVxuXHRcdFx0fVxuXHRcdH1cblx0XHRhd2FpdCB0aGlzLmdldERhdGFGb3JPcGVuaW5nRGlhbG9nKGZpZWxkUHJvcGVydGllcyk7XG5cdFx0YXdhaXQgUHJvbWlzZS5hbGwoXG5cdFx0XHRmaWVsZFByb3BlcnRpZXMubWFwKGFzeW5jIChmaWVsZERhdGEpID0+IHtcblx0XHRcdFx0ZmllbGREYXRhLnZpc2libGUgPSB0aGlzLm1hbmlmZXN0U2V0dGluZ3MudmlzaWJsZUZpZWxkcy5sZW5ndGggPT09IDAgPyB0aGlzLmlzRmllbGRWaXNpYmxlKGZpZWxkRGF0YSkgOiB0cnVlO1xuXHRcdFx0XHRjb25zdCBydW50aW1lU2VsZWN0aW9uID0gIXRoaXMuaXNBZGFwdGF0aW9uID8gYXdhaXQgdGhpcy5nZXRSdW50aW1lU2VsZWN0aW9uKGZpZWxkRGF0YSkgOiBbXTtcblx0XHRcdFx0ZmllbGREYXRhLnNlbGVjdEl0ZW1zID0gWy4uLnRoaXMuZ2V0RGVmYXVsdFNlbGVjdE9wdGlvbnMoZmllbGREYXRhKSwgLi4ucnVudGltZVNlbGVjdGlvbl07XG5cdFx0XHR9KVxuXHRcdCk7XG5cdFx0cmV0dXJuIGZpZWxkUHJvcGVydGllcztcblx0fVxuXG5cdC8qKlxuXHQgKiBHZXRzIHRoZSBwcm9wZXJ0aWVzIG9mIGRpYWxvZyBmaWVsZHMuXG5cdCAqIEByZXR1cm5zIFRoZSBwcm9wZXJ0aWVzLlxuXHQgKi9cblx0YXN5bmMgZ2VuZXJhdGVGaWVsZHNQcm9wZXJ0aWVzKCk6IFByb21pc2U8TWFzc0ZpZWxkUHJvcGVydGllc1tdPiB7XG5cdFx0cmV0dXJuIHRoaXMuZ2V0RmllbGRzUHJvcGVydGllc0Zyb21JbmZvKHRoaXMuZ2V0RmllbGRzSW5mbygpKTtcblx0fVxuXG5cdC8qKlxuXHQgKiBHZXRzIHRoZSBwcm9wZXJ0aWVzIG9mIHRoZSBlbnRpdHkuXG5cdCAqIEByZXR1cm5zIFRoZSBwcm9wZXJ0aWVzLlxuXHQgKi9cblx0YXN5bmMgZ2VuZXJhdGVFbnRpdHlGaWVsZHNQcm9wZXJ0aWVzKCk6IFByb21pc2U8TWFzc0ZpZWxkUHJvcGVydGllc1tdPiB7XG5cdFx0cmV0dXJuIHRoaXMuZ2V0RmllbGRzUHJvcGVydGllc0Zyb21JbmZvKHRoaXMuZ2V0RW50aXR5RmllbGRzSW5mbygpKTtcblx0fVxuXG5cdC8qKlxuXHQgKiBHZXRzIHRoZSByZWxldmFudCBkYXRhIGZyb20gdGhlIG1vZGVsIG5lZWRlZCBhZnRlciB0aGUgb3BlbmluZyBvZiB0aGUgZGlhbG9nLlxuXHQgKiBUaGlzIG1ldGhvZCBpcyBjYWxsZWQgb25seSBpbiB0aGUgZGVncmFkZWQgbW9kZSBzaW5jZSB0aGUgZGF0YSBpcyBhbHJlYWR5IGZldGNoZWQgaW4gdGhlIG5vcm1hbCBtb2RlLlxuXHQgKiB0aGUgZGVncmFkZWQgbW9kZSBpcyBzZXQgd2hlbiB0aGUgbnVtYmVyIG9mIHNlbGVjdGVkIGNvbnRleHRzIGlzIGdyZWF0ZXIgdGhhbiB0aGUgbWF4IGFuYWx5emVkIHJvd3MuXG5cdCAqIEBwYXJhbSBmaWVsZFByb3BlcnRpZXMgVGhlIGZpZWxkIHByb3BlcnRpZXNcblx0ICogQHJldHVybnMgQSBwcm9taXNlIHRoYXQgcmVzb2x2ZXMgd2hlbiB0aGUgZGF0YSBpcyBmZXRjaGVkLlxuXHQgKi9cblx0cHJpdmF0ZSBhc3luYyBnZXREYXRhQWZ0ZXJPcGVuaW5nRGlhbG9nKGZpZWxkUHJvcGVydGllczogTWFzc0ZpZWxkUHJvcGVydGllc1tdKTogUHJvbWlzZTx2b2lkPiB7XG5cdFx0aWYgKHRoaXMuZGVncmFkZWRNb2RlKSB7XG5cdFx0XHRjb25zdCBtaXNzaW5nQ29udGV4dHMgPSB0aGlzLmNvbnRleHRzLnNsaWNlKHRoaXMubWF4QW5hbHl6ZWRSb3dzLCB0aGlzLmNvbnRleHRzLmxlbmd0aCk7XG5cdFx0XHRjb25zdCBiaW5kaW5nc1RvRmV0Y2ggPSAoW10gYXMgQmluZGluZ1RvRmV0Y2hbXSkuY29uY2F0KFxuXHRcdFx0XHQuLi5maWVsZFByb3BlcnRpZXMubWFwKChmaWVsZERhdGEpID0+IFtcblx0XHRcdFx0XHR7IGV4cHJlc3Npb246IGNvbXBpbGVFeHByZXNzaW9uKGZpZWxkRGF0YS5yZWFkT25seUV4cHJlc3Npb24pLCBjb250ZXh0czogdGhpcy5jb250ZXh0cyB9LFxuXHRcdFx0XHRcdHtcblx0XHRcdFx0XHRcdGV4cHJlc3Npb246IGNvbXBpbGVFeHByZXNzaW9uKHBhdGhJbk1vZGVsKGZpZWxkRGF0YS5wcm9wZXJ0eUluZm8ucmVsYXRpdmVQYXRoKSksXG5cdFx0XHRcdFx0XHRjb250ZXh0czogbWlzc2luZ0NvbnRleHRzLFxuXHRcdFx0XHRcdFx0dHlwZTogZmllbGREYXRhLnRleHRCaW5kaW5nLnR5cGVcblx0XHRcdFx0XHR9LFxuXHRcdFx0XHRcdHtcblx0XHRcdFx0XHRcdGV4cHJlc3Npb246IGNvbXBpbGVFeHByZXNzaW9uKHBhdGhJbk1vZGVsKGZpZWxkRGF0YS5wcm9wZXJ0eUluZm8udW5pdE9yQ3VycmVuY3lQcm9wZXJ0eVBhdGgpKSxcblx0XHRcdFx0XHRcdGNvbnRleHRzOiBtaXNzaW5nQ29udGV4dHNcblx0XHRcdFx0XHR9XG5cdFx0XHRcdF0pXG5cdFx0XHQpO1xuXHRcdFx0YXdhaXQgdGhpcy5nZXRNaXNzaW5nRGF0YShiaW5kaW5nc1RvRmV0Y2gpO1xuXHRcdH1cblx0fVxuXG5cdC8qKlxuXHQgKiBHZXRzIHRoZSByZWxldmFudCBkYXRhIGZyb20gdGhlIG1vZGVsIG5lZWRlZCB0byBvcGVuIHRoZSBkaWFsb2cuXG5cdCAqIEBwYXJhbSBmaWVsZFByb3BlcnRpZXMgVGhlIGZpZWxkIHByb3BlcnRpZXNcblx0ICogQHJldHVybnMgQSBwcm9taXNlIHRoYXQgcmVzb2x2ZXMgd2hlbiB0aGUgZGF0YSBpcyBmZXRjaGVkLlxuXHQgKi9cblx0cHJpdmF0ZSBhc3luYyBnZXREYXRhRm9yT3BlbmluZ0RpYWxvZyhmaWVsZFByb3BlcnRpZXM6IE1hc3NGaWVsZFByb3BlcnRpZXNbXSk6IFByb21pc2U8dm9pZD4ge1xuXHRcdGNvbnN0IGJpbmRpbmdzVG9SZXNvbHZlID0gKFtdIGFzIEJpbmRpbmdUb0ZldGNoW10pLmNvbmNhdChcblx0XHRcdGZpZWxkUHJvcGVydGllcy5yZWR1Y2UoKGJpbmRpbmdzOiBCaW5kaW5nVG9GZXRjaFtdLCBmaWVsZERhdGEpID0+IHtcblx0XHRcdFx0YmluZGluZ3MgPSBiaW5kaW5ncy5jb25jYXQoW1xuXHRcdFx0XHRcdHtcblx0XHRcdFx0XHRcdGV4cHJlc3Npb246IGZpZWxkRGF0YS50ZXh0QmluZGluZy5leHByZXNzaW9uLFxuXHRcdFx0XHRcdFx0dHlwZTogZmllbGREYXRhLnRleHRCaW5kaW5nLnR5cGVcblx0XHRcdFx0XHR9LFxuXHRcdFx0XHRcdHtcblx0XHRcdFx0XHRcdGV4cHJlc3Npb246IGNvbXBpbGVFeHByZXNzaW9uKHBhdGhJbk1vZGVsKGZpZWxkRGF0YS5wcm9wZXJ0eUluZm8ucmVsYXRpdmVQYXRoKSksXG5cdFx0XHRcdFx0XHR0eXBlOiBmaWVsZERhdGEudGV4dEJpbmRpbmcudHlwZVxuXHRcdFx0XHRcdH0sXG5cdFx0XHRcdFx0eyBleHByZXNzaW9uOiBjb21waWxlRXhwcmVzc2lvbihwYXRoSW5Nb2RlbChmaWVsZERhdGEucHJvcGVydHlJbmZvLnVuaXRPckN1cnJlbmN5UHJvcGVydHlQYXRoKSkgfVxuXHRcdFx0XHRdKTtcblx0XHRcdFx0aWYgKCF0aGlzLm1hbmlmZXN0U2V0dGluZ3MudmlzaWJsZUZpZWxkcy5sZW5ndGgpIHtcblx0XHRcdFx0XHRiaW5kaW5ncyA9IGJpbmRpbmdzLmNvbmNhdChbXG5cdFx0XHRcdFx0XHR7IGV4cHJlc3Npb246IGZpZWxkRGF0YS52aXNpYmlsaXR5QmluZGluZ3MuaXNWaXNpYmxlIH0sXG5cdFx0XHRcdFx0XHR7IGV4cHJlc3Npb246IGZpZWxkRGF0YS52aXNpYmlsaXR5QmluZGluZ3MuZWRpdE1vZGUgfVxuXHRcdFx0XHRcdF0pO1xuXHRcdFx0XHR9XG5cdFx0XHRcdGlmICghdGhpcy5kZWdyYWRlZE1vZGUpIHtcblx0XHRcdFx0XHRiaW5kaW5ncy5wdXNoKHsgZXhwcmVzc2lvbjogY29tcGlsZUV4cHJlc3Npb24oZmllbGREYXRhLnJlYWRPbmx5RXhwcmVzc2lvbikgfSk7XG5cdFx0XHRcdH1cblx0XHRcdFx0cmV0dXJuIGJpbmRpbmdzO1xuXHRcdFx0fSwgW10pXG5cdFx0KTtcblx0XHRhd2FpdCB0aGlzLmdldE1pc3NpbmdEYXRhKGJpbmRpbmdzVG9SZXNvbHZlKTtcblx0fVxuXG5cdC8qKlxuXHQgKiBHZXRzIHRoZSBtaXNzaW5nIGRhdGEgZm9yIHRoZSBmaWVsZHMuXG5cdCAqIFRoaXMgbWV0aG9kIGdlbmVyYXRlcyBjb250cm9scyB3aXRoIHRoZSBwcm92aWRlZCBiaW5kaW5ncyB0byBmZXRjaCB0aGUgbWlzc2luZyBkYXRhLlxuXHQgKiBUaGUgbW9kZWwgcmVxdWVzdHMgdGhlIGRhdGEgdG8gdGhlIGJhY2tlbmQgd2hlbiB0aGUgY29udGV4dHMgZG9lc24ndCBjb250YWlucyB0aGUgcmVsYXRlZCBwcm9wZXJ0aWVzLlxuXHQgKiBAcGFyYW0gYmluZGluZ3NUb0ZldGNoIFRoZSBiaW5kaW5nIHRvIHJlc29sdmUgYW5kIGl0cyBwcm9wZXJ0eSBwYXRoIHJlZmVyZW5jZVxuXHQgKiBAcmV0dXJucyBBIHByb21pc2UgdGhhdCByZXNvbHZlcyB3aGVuIHRoZSBkYXRhIGlzIGZldGNoZWQuXG5cdCAqL1xuXHRwcml2YXRlIGFzeW5jIGdldE1pc3NpbmdEYXRhKGJpbmRpbmdzVG9GZXRjaDogQmluZGluZ1RvRmV0Y2hbXSk6IFByb21pc2U8dW5kZWZpbmVkPiB7XG5cdFx0aWYgKHRoaXMuaXNBZGFwdGF0aW9uKSB7XG5cdFx0XHRyZXR1cm47XG5cdFx0fVxuXHRcdGlmICh0aGlzLnZpZXcuZ2V0Vmlld0RhdGEoKS5jb252ZXJ0ZXJUeXBlID09PSBcIk9iamVjdFBhZ2VcIikge1xuXHRcdFx0Y29uc3QgZGlzcGxheWVkUHJvcGVydGllcyA9IHRoaXMudGFibGUuZ2V0Q29sdW1ucygpLm1hcCgoY29sdW1uKSA9PiBjb2x1bW4uZ2V0UHJvcGVydHlLZXkoKSk7XG5cdFx0XHRpZiAodGhpcy5tYW5pZmVzdFNldHRpbmdzLnZpc2libGVGaWVsZHMuZXZlcnkoKGZpZWxkKSA9PiBkaXNwbGF5ZWRQcm9wZXJ0aWVzLmluY2x1ZGVzKGZpZWxkKSkpIHtcblx0XHRcdFx0cmV0dXJuO1xuXHRcdFx0fVxuXHRcdH1cblx0XHRjb25zdCBwcm9taXNlcyA9IFtdO1xuXHRcdGNvbnN0IGNvbnRyb2xzID0gW107XG5cdFx0Y29uc3QgbW9kZWwgPSB0aGlzLmNvbnRleHRzWzBdLmdldE1vZGVsKCk7XG5cdFx0Zm9yIChjb25zdCBiaW5kaW5nIG9mIGJpbmRpbmdzVG9GZXRjaC5maWx0ZXIoKGJpbmRpbmcpID0+IGJpbmRpbmcuZXhwcmVzc2lvbj8uc3RhcnRzV2l0aChcIntcIikpKSB7XG5cdFx0XHQvLyBBdm9pZCB0byBmZXRjaCBjb25zdGFudCBiaW5kaW5nc1xuXHRcdFx0Y29uc3QgcGFyYW1ldGVycyA9IHt9IGFzIFJlY29yZDxzdHJpbmcsIENvbXBpbGVkQmluZGluZ1Rvb2xraXRFeHByZXNzaW9uPjtcblx0XHRcdGNvbnN0IGFuYWx5emVkQ29udGV4dHMgPSBiaW5kaW5nLmNvbnRleHRzID8/IHRoaXMuYW5hbHl6ZWRDb250ZXh0cztcblx0XHRcdGNvbnN0IGJpbmRpbmdUeXBlID0gYmluZGluZy50eXBlID8/IFwiYW55XCI7XG5cdFx0XHRwYXJhbWV0ZXJzW2JpbmRpbmdUeXBlXSA9IGJpbmRpbmcuZXhwcmVzc2lvbjtcblx0XHRcdGZvciAoY29uc3QgY29udGV4dCBvZiBhbmFseXplZENvbnRleHRzKSB7XG5cdFx0XHRcdGNvbnN0IGNvbnRyb2wgPSBuZXcgQW55KHBhcmFtZXRlcnMpO1xuXHRcdFx0XHRjb250cm9sLnNldE1vZGVsKG1vZGVsKTtcblx0XHRcdFx0Y29udHJvbC5zZXRCaW5kaW5nQ29udGV4dChjb250ZXh0KTtcblx0XHRcdFx0Y29udHJvbHMucHVzaChjb250cm9sKTtcblx0XHRcdFx0cHJvbWlzZXMucHVzaChhc3luYyAoKSA9PiB7XG5cdFx0XHRcdFx0Y29uc3QgY29udHJvbEJpbmRpbmcgPSBjb250cm9sLmdldEJpbmRpbmcoYmluZGluZ1R5cGUpIGFzIE9EYXRhUHJvcGVydHlCaW5kaW5nIHwgdW5kZWZpbmVkO1xuXHRcdFx0XHRcdGlmIChjb250cm9sQmluZGluZykge1xuXHRcdFx0XHRcdFx0Y29udHJvbEJpbmRpbmcuc2V0QmluZGluZ01vZGUoQmluZGluZ01vZGUuT25lVGltZSk7XG5cdFx0XHRcdFx0XHRpZiAoY29udHJvbEJpbmRpbmcuaXNBPENvbXBvc2l0ZUJpbmRpbmc+KFwic2FwLnVpLm1vZGVsLkNvbXBvc2l0ZUJpbmRpbmdcIikpIHtcblx0XHRcdFx0XHRcdFx0YXdhaXQgUHJvbWlzZS5hbGwoY29udHJvbEJpbmRpbmcuZ2V0QmluZGluZ3MoKS5tYXAoKG5lc3RlZEJpbmRpbmcpID0+IG5lc3RlZEJpbmRpbmcucmVxdWVzdFZhbHVlPy4oKSkpO1xuXHRcdFx0XHRcdFx0fSBlbHNlIHtcblx0XHRcdFx0XHRcdFx0YXdhaXQgY29udHJvbEJpbmRpbmcucmVxdWVzdFZhbHVlPy4oKTtcblx0XHRcdFx0XHRcdH1cblx0XHRcdFx0XHR9XG5cdFx0XHRcdH0pO1xuXHRcdFx0fVxuXHRcdH1cblx0XHRhd2FpdCBQcm9taXNlLmFsbChwcm9taXNlcy5tYXAoYXN5bmMgKHByb21pc2UpID0+IHByb21pc2UoKSkpO1xuXHRcdGZvciAoY29uc3QgY29udHJvbCBvZiBjb250cm9scykge1xuXHRcdFx0Y29udHJvbC5kZXN0cm95KCk7XG5cdFx0fVxuXHR9XG5cblx0LyoqXG5cdCAqIEdldHMgdGhlIGRlZmF1bHQgdmFsdWUgb2YgdGhlIHByb3BlcnR5IHdoZW4gdGhlIHJlbGF0ZWQgZmllbGQgaXMgZW1wdHkuXG5cdCAqIEBwYXJhbSBwcm9wZXJ0eSBUaGUgcHJvcGVydHlcblx0ICogQHBhcmFtIHByb3BlcnR5UGF0aCBUaGUgcHJvcGVydHkgcGF0aFxuXHQgKiBAcmV0dXJucyBUaGUgZGVmYXVsdCB2YWx1ZS5cblx0ICovXG5cdGdldEVtcHR5VmFsdWVGb3JQcm9wZXJ0eShwcm9wZXJ0eTogUHJvcGVydHksIHByb3BlcnR5UGF0aDogc3RyaW5nKTogUHJpbWl0aXZlVHlwZSB7XG5cdFx0aWYgKHByb3BlcnR5Lm51bGxhYmxlICE9PSBmYWxzZSkge1xuXHRcdFx0cmV0dXJuIG51bGw7XG5cdFx0fSBlbHNlIHtcblx0XHRcdGNvbnN0IGNvbnRleHQgPSB0aGlzLmNvbnRleHRzWzBdO1xuXHRcdFx0Y29uc3QgYW55T2JqZWN0ID0gbmV3IEFueSh7IGFueTogY29tcGlsZUV4cHJlc3Npb24oZm9ybWF0V2l0aFR5cGVJbmZvcm1hdGlvbihwcm9wZXJ0eSwgcGF0aEluTW9kZWwocHJvcGVydHlQYXRoKSkpIH0pO1xuXHRcdFx0YW55T2JqZWN0LnNldE1vZGVsKGNvbnRleHQuZ2V0TW9kZWwoKSk7XG5cdFx0XHRhbnlPYmplY3Quc2V0QmluZGluZ0NvbnRleHQoY29udGV4dCk7XG5cdFx0XHRjb25zdCB2YWx1ZSA9IGFueU9iamVjdC5nZXRCaW5kaW5nSW5mbyhcImFueVwiKS5iaW5kaW5nLmdldFR5cGUoKS5wYXJzZVZhbHVlKFwiXCIsIFwic3RyaW5nXCIpO1xuXHRcdFx0YW55T2JqZWN0LmRlc3Ryb3koKTtcblx0XHRcdHJldHVybiB2YWx1ZTtcblx0XHR9XG5cdH1cblxuXHQvKipcblx0ICogQ2hlY2tzIGlmIHRoZSBwcm9wZXJ0eSBpcyBjbGVhcmFibGUuXG5cdCAqIFNvbWUgT0RhdGEgdHlwZXMgZG9uJ3QgYWNjZXNzIGVtcHR5IHN0cmluZyBvciAwIGFzIGEgdmFsaWQgdmFsdWUgd2hlbiBpdCdzIG5vdCBudWxsYWJsZS5cblx0ICogRm9yIGV4YW1wbGUsIEVkbS5EYXRlVGltZSBkb2Vzbid0IGFjY2VwdCBhbiBlbXB0eSBzdHJpbmcgYXMgYSB2YWxpZCB2YWx1ZS5cblx0ICogQHBhcmFtIHByb3BlcnR5IFRoZSBwcm9wZXJ0eVxuXHQgKiBAcmV0dXJucyBUcnVlIGlmIHRoZSBwcm9wZXJ0eSBpcyBjbGVhcmFibGUsIGZhbHNlIG90aGVyd2lzZS5cblx0ICovXG5cdGlzUHJvcGVydHlDbGVhcmFibGUocHJvcGVydHk6IFByb3BlcnR5KTogUHJpbWl0aXZlVHlwZSB7XG5cdFx0aWYgKHByb3BlcnR5Lm51bGxhYmxlICE9PSBmYWxzZSkge1xuXHRcdFx0cmV0dXJuIHRydWU7XG5cdFx0fSBlbHNlIHtcblx0XHRcdHJldHVybiAhW1wiRWRtLkRhdGVUaW1lXCIsIFwiRWRtLkRhdGVUaW1lT2Zmc2V0XCIsIFwiRWRtLlRpbWVPZkRheVwiLCBcIkVkbS5UaW1lXCIsIFwiRWRtLkRhdGVcIiwgXCJFZG0uRGF0ZVRpbWVXaXRoVGltZXpvbmVcIl0uaW5jbHVkZXMoXG5cdFx0XHRcdHByb3BlcnR5LnR5cGVcblx0XHRcdCk7XG5cdFx0fVxuXHR9XG5cblx0LyoqXG5cdCAqIEdldHMgdGhlIHNlbGVjdGlvbiBvcHRpb25zIG9mIGEgZmllbGQgZ2VuZXJhdGVkIGJ5IHRoZSBzZWxlY3RlZCBjb250ZXh0cy5cblx0ICogQHBhcmFtIGZpZWxkRGF0YSBEYXRhIG9mIHRoZSBmaWVsZCB1c2VkIGJ5IGJvdGggdGhlIHN0YXRpYyBhbmQgdGhlIHJ1bnRpbWUgbW9kZWxcblx0ICogQHJldHVybnMgVGhlIHNlbGVjdCBvcHRpb25zIG9mIHRoZSBmaWVsZFxuXHQgKi9cblx0cHJpdmF0ZSBhc3luYyBnZXRSdW50aW1lU2VsZWN0aW9uKGZpZWxkRGF0YTogTWFzc0ZpZWxkUHJvcGVydGllcyk6IFByb21pc2U8U2VsZWN0SW5mb1tdPiB7XG5cdFx0Y29uc3QgZGlzdGluY3RNYXAgPSBuZXcgU2V0PHN0cmluZz4oKTtcblx0XHRjb25zdCBzZWxlY3RPcHRpb25zOiBTZWxlY3RJbmZvW10gPSBbXTtcblx0XHRpZiAoZmllbGREYXRhLmlucHV0VHlwZSA9PT0gXCJDaGVja0JveFwiKSB7XG5cdFx0XHRyZXR1cm4gW107XG5cdFx0fVxuXHRcdGNvbnN0IGFueU9iamVjdCA9IG5ldyBBbnkoeyBhbnlUZXh0OiBmaWVsZERhdGEudGV4dEJpbmRpbmcuZXhwcmVzc2lvbiB9KTtcblx0XHRhbnlPYmplY3Quc2V0TW9kZWwodGhpcy5jb250ZXh0c1swXS5nZXRNb2RlbCgpKTtcblx0XHRmb3IgKGNvbnN0IHNlbGVjdGVkQ29udGV4dCBvZiB0aGlzLmFuYWx5emVkQ29udGV4dHMpIHtcblx0XHRcdGFueU9iamVjdC5zZXRCaW5kaW5nQ29udGV4dChzZWxlY3RlZENvbnRleHQpO1xuXHRcdFx0Y29uc3QgdGV4dEJpbmRpbmcgPSBhbnlPYmplY3QuZ2V0QmluZGluZyhcImFueVRleHRcIik7XG5cdFx0XHRpZiAodGV4dEJpbmRpbmc/LmlzQTxDb21wb3NpdGVCaW5kaW5nPihcInNhcC51aS5tb2RlbC5Db21wb3NpdGVCaW5kaW5nXCIpKSB7XG5cdFx0XHRcdC8vIElmIHRoZSB0ZXh0IGJpbmRpbmcgaXMgYSBjb21wb3NpdGUgYmluZGluZywgd2UgbmVlZCB0byByZXF1ZXN0IHRoZSB2YWx1ZSBvZiBlYWNoIGJpbmRpbmdcblx0XHRcdFx0Ly8gdG8gd2FpdCBmb3IgdGhlIHByb21pc2UgdG8gcmVzb2x2ZSBiZWZvcmUgZ2V0dGluZyB0aGUgdmFsdWUgb2YgcmVxdWVzdFVuaXRzT2ZNZWFzdXJlL3JlcXVlc3RDdXJyZW5jeUNvZGVzXG5cdFx0XHRcdC8vIGZvciB0aGUgY3VzdG9tIHVuaXRzIG9mIG1lYXN1cmUgYW5kIGN1cnJlbmN5IGNvZGVzLlxuXHRcdFx0XHQvLyBXZSBoYXZlIHRvIHNldCB0aGUgYmluZGluZyBtb2RlIHRvIE9uZVRpbWUgdG8gYXZvaWQgdGhlIGJpbmRpbmcgdG8gYmUgdXBkYXRlZCB3aGVuIHRoZSBjb250ZXh0IGNoYW5nZXMuXG5cdFx0XHRcdC8vIEluZGVlZCBldmVuIGlmIHRoZSByZXF1ZXN0VW5pdHNPZk1lYXN1cmUvcmVxdWVzdEN1cnJlbmN5Q29kZXMgZG9lc24ndCBjaGFuZ2UgaXQncyB0cmlnZ2VyIGEgUEFUQ0ggcmVxdWVzdFxuXHRcdFx0XHR0ZXh0QmluZGluZy5zZXRCaW5kaW5nTW9kZShCaW5kaW5nTW9kZS5PbmVUaW1lKTtcblx0XHRcdFx0YXdhaXQgUHJvbWlzZS5hbGwodGV4dEJpbmRpbmcuZ2V0QmluZGluZ3MoKS5tYXAoKGJpbmRpbmcpID0+IGJpbmRpbmcucmVxdWVzdFZhbHVlPy4oKSkpO1xuXHRcdFx0fVxuXHRcdFx0Y29uc3QgcHJvcGVydHlUZXh0ID0gKGFueU9iamVjdC5nZXRCaW5kaW5nKFwiYW55VGV4dFwiKSBhcyBQcm9wZXJ0eUJpbmRpbmcgfCB1bmRlZmluZWQpPy5nZXRFeHRlcm5hbFZhbHVlKCk7XG5cdFx0XHRpZiAocHJvcGVydHlUZXh0ICYmICFkaXN0aW5jdE1hcC5oYXMocHJvcGVydHlUZXh0KSkge1xuXHRcdFx0XHRkaXN0aW5jdE1hcC5hZGQocHJvcGVydHlUZXh0KTtcblx0XHRcdFx0c2VsZWN0T3B0aW9ucy5wdXNoKHtcblx0XHRcdFx0XHR0ZXh0OiBwcm9wZXJ0eVRleHQsXG5cdFx0XHRcdFx0a2V5OiBwcm9wZXJ0eVRleHQsXG5cdFx0XHRcdFx0dW5pdE9yQ3VycmVuY3lWYWx1ZTogZmllbGREYXRhLnByb3BlcnR5SW5mby51bml0T3JDdXJyZW5jeVByb3BlcnR5UGF0aFxuXHRcdFx0XHRcdFx0PyBzZWxlY3RlZENvbnRleHQuZ2V0T2JqZWN0KGZpZWxkRGF0YS5wcm9wZXJ0eUluZm8udW5pdE9yQ3VycmVuY3lQcm9wZXJ0eVBhdGgpXG5cdFx0XHRcdFx0XHQ6IFwiXCIsXG5cdFx0XHRcdFx0cHJvcGVydHlWYWx1ZTogc2VsZWN0ZWRDb250ZXh0LmdldE9iamVjdChmaWVsZERhdGEucHJvcGVydHlJbmZvLnJlbGF0aXZlUGF0aClcblx0XHRcdFx0fSk7XG5cdFx0XHR9XG5cdFx0fVxuXHRcdGFueU9iamVjdC5kZXN0cm95KCk7XG5cdFx0cmV0dXJuIHNlbGVjdE9wdGlvbnM7XG5cdH1cblxuXHQvKipcblx0ICogR2V0cyB0aGUgZGVmYXVsdCBzZWxlY3Rpb24gb3B0aW9ucyBvZiBhIGZpZWxkLlxuXHQgKiBAcGFyYW0gZmllbGREYXRhIFRoZSBwcm9wZXJ0eSBpbmZvcm1hdGlvblxuXHQgKiBAcmV0dXJucyBUaGUgZGVmYXVsdCBzZWxlY3Qgb3B0aW9ucy5cblx0ICovXG5cdHByaXZhdGUgZ2V0RGVmYXVsdFNlbGVjdE9wdGlvbnMoZmllbGREYXRhOiBNYXNzRmllbGRQcm9wZXJ0aWVzKTogU2VsZWN0SW5mb1tdIHtcblx0XHRjb25zdCByZXNvdXJjZUJ1bmRsZSA9IExpYnJhcnkuZ2V0UmVzb3VyY2VCdW5kbGVGb3IoXCJzYXAuZmUubWFjcm9zXCIpIGFzIFJlc291cmNlQnVuZGxlO1xuXHRcdGNvbnN0IGtlZXBFbnRyeSA9IHtcblx0XHRcdHRleHQ6IHJlc291cmNlQnVuZGxlLmdldFRleHQoXCJDX01BU1NfRURJVF9DT01CT0JPWF9LRUVQX1ZBTFVFU1wiKSxcblx0XHRcdGtleTogU3BlY2lmaWNTZWxlY3RLZXlzLktlZXBLZXlcblx0XHR9O1xuXHRcdGNvbnN0IGRlZmF1bHRPcHRpb25zOiBTZWxlY3RJbmZvW10gPSBbXTtcblx0XHRkZWZhdWx0T3B0aW9ucy5wdXNoKGtlZXBFbnRyeSk7XG5cdFx0aWYgKGZpZWxkRGF0YS5pbnB1dFR5cGUgPT09IFwiQ2hlY2tCb3hcIikge1xuXHRcdFx0ZGVmYXVsdE9wdGlvbnMucHVzaCh7IHRleHQ6IHJlc291cmNlQnVuZGxlLmdldFRleHQoXCJ5ZXNcIiksIGtleTogXCJ0cnVlXCIgfSwgeyB0ZXh0OiByZXNvdXJjZUJ1bmRsZS5nZXRUZXh0KFwibm9cIiksIGtleTogXCJmYWxzZVwiIH0pO1xuXHRcdH0gZWxzZSB7XG5cdFx0XHRkZWZhdWx0T3B0aW9ucy5wdXNoKHtcblx0XHRcdFx0dGV4dDogcmVzb3VyY2VCdW5kbGUuZ2V0VGV4dChcIkNfTUFTU19FRElUX0NPTUJPQk9YX1JFUExBQ0VfVkFMVUVTXCIpLFxuXHRcdFx0XHRrZXk6IFNwZWNpZmljU2VsZWN0S2V5cy5SZXBsYWNlS2V5XG5cdFx0XHR9KTtcblx0XHRcdGlmIChmaWVsZERhdGEuaXNGaWVsZFJlcXVpcmVkICE9PSBcInRydWVcIiAmJiBmaWVsZERhdGEucHJvcGVydHlJbmZvLmNsZWFyYWJsZSkge1xuXHRcdFx0XHRkZWZhdWx0T3B0aW9ucy5wdXNoKHtcblx0XHRcdFx0XHR0ZXh0OiByZXNvdXJjZUJ1bmRsZS5nZXRUZXh0KFwiQ19NQVNTX0VESVRfQ09NQk9CT1hfQ0xFQVJfVkFMVUVTXCIpLFxuXHRcdFx0XHRcdGtleTogU3BlY2lmaWNTZWxlY3RLZXlzLkNsZWFyRmllbGRWYWx1ZUtleVxuXHRcdFx0XHR9KTtcblx0XHRcdH1cblx0XHR9XG5cdFx0cmV0dXJuIGRlZmF1bHRPcHRpb25zO1xuXHR9XG5cblx0LyoqXG5cdCAqIENoZWNrcyBpZiB0aGUgdGhlIGZpZWxkIGlzIGVkaXRhYmxlLlxuXHQgKiBAcGFyYW0gZXhwQmluZGluZyBUaGUgZXhwcmVzc2lvbiBiaW5kaW5nIG9mIHRoZSBwcm9wZXJ0eS5cblx0ICogQHJldHVybnMgUmV0dXJucyB0cnVlIGlmIHRoZSBtYXNzIGVkaXQgZmllbGQgaXMgZWRpdGFibGUuXG5cdCAqL1xuXHRwcml2YXRlIGdldEZpZWxkRWRpdGFibGUoZXhwQmluZGluZzogQ29tcGlsZWRCaW5kaW5nVG9vbGtpdEV4cHJlc3Npb24pOiBib29sZWFuIHtcblx0XHRpZiAoZXhwQmluZGluZyA9PT0gRmllbGRFZGl0TW9kZS5FZGl0YWJsZSkge1xuXHRcdFx0cmV0dXJuIHRydWU7XG5cdFx0fSBlbHNlIGlmIChPYmplY3Qua2V5cyhGaWVsZEVkaXRNb2RlKS5pbmNsdWRlcyhleHBCaW5kaW5nIGFzIEZpZWxkRWRpdE1vZGUpKSB7XG5cdFx0XHRyZXR1cm4gZmFsc2U7XG5cdFx0fSBlbHNlIGlmIChleHBCaW5kaW5nKSB7XG5cdFx0XHRjb25zdCBhbnlDb250cm9sID0gbmV3IEFueSh7IGFueTogZXhwQmluZGluZyB9KTtcblx0XHRcdGNvbnN0IG1vZGVsID0gdGhpcy5hbmFseXplZENvbnRleHRzWzBdLmdldE1vZGVsKCk7XG5cdFx0XHRhbnlDb250cm9sLnNldE1vZGVsKG1vZGVsKTtcblx0XHRcdGNvbnN0IHZpc2libGUgPSB0aGlzLmFuYWx5emVkQ29udGV4dHMuc29tZSgoY29udGV4dCkgPT4ge1xuXHRcdFx0XHRhbnlDb250cm9sLnNldEJpbmRpbmdDb250ZXh0KGNvbnRleHQpO1xuXHRcdFx0XHRyZXR1cm4gKGFueUNvbnRyb2wuZ2V0QmluZGluZyhcImFueVwiKSBhcyBQcm9wZXJ0eUJpbmRpbmcpLmdldEV4dGVybmFsVmFsdWUoKSA9PT0gRmllbGRFZGl0TW9kZS5FZGl0YWJsZTtcblx0XHRcdH0pO1xuXHRcdFx0YW55Q29udHJvbC5kZXN0cm95KCk7XG5cdFx0XHRyZXR1cm4gdmlzaWJsZTtcblx0XHR9IGVsc2Uge1xuXHRcdFx0cmV0dXJuIHRydWU7XG5cdFx0fVxuXHR9XG5cblx0LyoqXG5cdCAqIEdldHMgdGhlIGlucHV0IHR5cGUgb2YgdGhlIGZpZWxkLlxuXHQgKiBAcGFyYW0gZGF0YUZpZWxkQ29udmVydGVkIFRoZSBjb252ZXJ0ZWQgYW5ub3RhdGlvbiBmbyB0aGUgZmllbGRcblx0ICogQHBhcmFtIGRhdGFNb2RlbFBhdGggVGhlIGRhdGFNb2RlbE9iamVjdFBhdGggb2YgdGhlIHByb3BlcnR5XG5cdCAqIEByZXR1cm5zIFRoZSBpbnB1dCB0eXBlLlxuXHQgKi9cblx0cHJpdmF0ZSBnZXRJbnB1dFR5cGUoZGF0YUZpZWxkQ29udmVydGVkOiBEYXRhRmllbGRUeXBlcywgZGF0YU1vZGVsUGF0aDogRGF0YU1vZGVsT2JqZWN0UGF0aDxQcm9wZXJ0eT4pOiBzdHJpbmcgfCB1bmRlZmluZWQgfCBudWxsIHtcblx0XHRjb25zdCBlZGl0U3R5bGVQcm9wZXJ0aWVzID0ge30gYXMgRmllbGRCbG9ja1Byb3BlcnRpZXM7XG5cdFx0c2V0RWRpdFN0eWxlUHJvcGVydGllcyhlZGl0U3R5bGVQcm9wZXJ0aWVzLCBkYXRhRmllbGRDb252ZXJ0ZWQsIGRhdGFNb2RlbFBhdGgsIHRydWUpO1xuXHRcdHJldHVybiBlZGl0U3R5bGVQcm9wZXJ0aWVzPy5lZGl0U3R5bGU7XG5cdH1cblxuXHQvKipcblx0ICogR2V0cyB0aGUgdmlzaWJpbGl0eSBvZiB0aGUgZmllbGRcblx0ICogVGhpcyB2aXNpYmlsaXR5IGlzIG5vdCBkZXBlbmRlbnQgb24gdGhlIGNvbnRleHQgd2hlblxuXHQgKiAgLSBlaXRoZXIgdGhlIGFkYXB0YXRpb24gbW9kZSBpcyBzZXQuXG5cdCAqICAtIG9yIHRoZSBmaWVsZCBpcyB2aXNpYmxlIGluIHRoZSBtYW5pZmVzdCBhbmQgdGhlIGRlZ3JhZGVkIG1vZGUgaXMgc2V0LlxuXHQgKiBAcGFyYW0gZmllbGRQcm9wZXJ0aWVzIFRoZSBwcm9wZXJ0aWVzIG9mIHRoZSBtYXNzIGVkaXQgZmllbGRcblx0ICogQHJldHVybnMgVHJ1ZSBpZiB0aGUgZmllbGQgaXMgdmlzaWJsZSwgZmFsc2Ugb3RoZXJ3aXNlXG5cdCAqL1xuXHRwcml2YXRlIGlzRmllbGRWaXNpYmxlKGZpZWxkUHJvcGVydGllczogTWFzc0ZpZWxkUHJvcGVydGllcyk6IGJvb2xlYW4ge1xuXHRcdGlmICh0aGlzLmlzQWRhcHRhdGlvbiB8fCAodGhpcy5tYW5pZmVzdFNldHRpbmdzLnZpc2libGVGaWVsZHMubGVuZ3RoICYmIHRoaXMuZGVncmFkZWRNb2RlKSkge1xuXHRcdFx0Y29uc3QgaXNTdGF0aWNFZGl0TW9kZSA9IE9iamVjdC5rZXlzKEZpZWxkRWRpdE1vZGUpLmluY2x1ZGVzKGZpZWxkUHJvcGVydGllcy52aXNpYmlsaXR5QmluZGluZ3MuZWRpdE1vZGUgYXMgRmllbGRFZGl0TW9kZSk7XG5cdFx0XHRjb25zdCBpc0VkaXRhYmxlID1cblx0XHRcdFx0IWlzU3RhdGljRWRpdE1vZGUgfHwgKGlzU3RhdGljRWRpdE1vZGUgJiYgZmllbGRQcm9wZXJ0aWVzLnZpc2liaWxpdHlCaW5kaW5ncy5lZGl0TW9kZSA9PT0gRmllbGRFZGl0TW9kZS5FZGl0YWJsZSk7XG5cdFx0XHRyZXR1cm4gaXNFZGl0YWJsZSAmJiBmaWVsZFByb3BlcnRpZXMudmlzaWJpbGl0eUJpbmRpbmdzLmlzVmlzaWJsZSAhPT0gXCJmYWxzZVwiO1xuXHRcdH1cblx0XHRyZXR1cm4gKFxuXHRcdFx0dGhpcy5nZXRGaWVsZEVkaXRhYmxlKGZpZWxkUHJvcGVydGllcy52aXNpYmlsaXR5QmluZGluZ3MuZWRpdE1vZGUpICYmXG5cdFx0XHQhdGhpcy5pc0hpZGRlbkZvckNvbnRleHRzKGZpZWxkUHJvcGVydGllcy52aXNpYmlsaXR5QmluZGluZ3MuaXNWaXNpYmxlKVxuXHRcdCk7XG5cdH1cbn1cbiJdLCJtYXBwaW5ncyI6Ijs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7OztFQWtFQTtBQUNBO0FBQ0E7RUFGQSxJQUdxQkEsb0JBQW9CO0lBMkJ4QyxTQUFBQSxxQkFBWUMsS0FBcUUsRUFBRTtNQUFBLEtBbEJsRUMsZUFBZSxHQUFHLEVBQUU7TUFBQSxLQUlwQkMsZ0JBQWdCLEdBQXFCLEVBQUU7TUFBQSxLQU1oREMsZUFBZSxHQUEwQixFQUFFO01BU2xELE1BQU1DLGNBQWMsR0FBSUosS0FBSyxDQUFDSyxLQUFLLENBQUNDLFNBQVMsQ0FBQyxDQUFDLENBQWNDLGtCQUFrQixDQUFDLENBQUMsQ0FBQ0MsVUFBVSxDQUFDQyxVQUFVO1FBQ3RHQyxTQUFTLEdBQUlWLEtBQUssQ0FBQ0ssS0FBSyxDQUFDTSxRQUFRLENBQUMsQ0FBQyxDQUFnQkMsWUFBWSxDQUFDLENBQUM7TUFFbEUsSUFBSSxDQUFDUCxLQUFLLEdBQUdMLEtB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
|
|
@@ -21,6 +21,7 @@ import type { MassEditTableConfiguration } from "sap/fe/core/converters/controls
|
|
|
21
21
|
import type { AnnotationTableColumn } from "sap/fe/core/converters/controls/Common/table/Columns";
|
|
22
22
|
import type { InternalModelContext } from "sap/fe/core/helpers/ModelHelper";
|
|
23
23
|
import ModelHelper from "sap/fe/core/helpers/ModelHelper";
|
|
24
|
+
import ResourceModelHelper from "sap/fe/core/helpers/ResourceModelHelper";
|
|
24
25
|
import { isProperty } from "sap/fe/core/helpers/TypeGuards";
|
|
25
26
|
import type { DataModelObjectPath } from "sap/fe/core/templating/DataModelPathHelper";
|
|
26
27
|
import { enhanceDataModelPath, getContextRelativeTargetObjectPath, getRelativePaths } from "sap/fe/core/templating/DataModelPathHelper";
|
|
@@ -202,28 +203,28 @@ export default class MassEditDialogHelper {
|
|
|
202
203
|
* @returns A promise that resolves the contexts to be finally managed.
|
|
203
204
|
*/
|
|
204
205
|
private async confirmSelection(contexts: ODataV4Context[], selectedContexts: number): Promise<ODataV4Context[]> {
|
|
205
|
-
const
|
|
206
|
+
const resourceModel = ResourceModelHelper.getResourceModel(this.table);
|
|
206
207
|
const coreResourceBundle = Library.getResourceBundleFor("sap.fe.core") as ResourceBundle;
|
|
207
208
|
|
|
208
209
|
const updatableContexts = contexts.length;
|
|
209
210
|
return new Promise((resolve) => {
|
|
210
211
|
try {
|
|
211
212
|
const tableAPI = this.table.getParent() as TableAPI;
|
|
212
|
-
const editButton =
|
|
213
|
+
const editButton = resourceModel.getText("C_MASS_EDIT_CONFIRM_BUTTON_TEXT"),
|
|
213
214
|
cancelButton = coreResourceBundle.getText("C_COMMON_OBJECT_PAGE_CANCEL"),
|
|
214
215
|
metaModel = (this.table.getModel() as ODataModel).getMetaModel(),
|
|
215
216
|
typeName =
|
|
216
|
-
this.getResourceText(this.headerInfo?.TypeName) ??
|
|
217
|
+
this.getResourceText(this.headerInfo?.TypeName) ?? resourceModel.getText("C_MASS_EDIT_DIALOG_DEFAULT_TYPENAME"),
|
|
217
218
|
typeNamePlural =
|
|
218
219
|
this.getResourceText(this.headerInfo?.TypeNamePlural) ??
|
|
219
|
-
|
|
220
|
+
resourceModel.getText("C_MASS_EDIT_DIALOG_DEFAULT_TYPENAME_PLURAL"),
|
|
220
221
|
messageDetail =
|
|
221
222
|
ModelHelper.isDraftSupported(metaModel, this.table.data("targetCollectionPath")) && tableAPI.readOnly
|
|
222
223
|
? this.getMessageDetailForNonEditable(typeName, typeNamePlural)
|
|
223
224
|
: "";
|
|
224
225
|
|
|
225
226
|
MessageBox.warning(
|
|
226
|
-
|
|
227
|
+
resourceModel.getText("C_MASS_EDIT_CONFIRM_MESSAGE", [
|
|
227
228
|
selectedContexts - updatableContexts,
|
|
228
229
|
selectedContexts,
|
|
229
230
|
updatableContexts,
|
|
@@ -474,7 +475,7 @@ export default class MassEditDialogHelper {
|
|
|
474
475
|
descriptionPath: getAssociatedTextPropertyPath(propertyDataModel.targetObject),
|
|
475
476
|
textBinding: {
|
|
476
477
|
expression: getTextBinding(propertyDataModel, {
|
|
477
|
-
displayMode: getDisplayMode(targetProperty, propertyDataModel)
|
|
478
|
+
displayMode: getDisplayMode(targetProperty, propertyDataModel.targetEntityType)
|
|
478
479
|
}) as CompiledBindingToolkitExpression,
|
|
479
480
|
type:
|
|
480
481
|
targetProperty.type === "Edm.DateTimeOffset" || targetProperty?.annotations?.Common?.IsTimezone
|