@sapui5/sap.fe.macros 1.130.6 → 1.130.8

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 CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@sapui5/sap.fe.macros",
3
- "version": "1.130.6",
3
+ "version": "1.130.8",
4
4
  "description": "SAPUI5 Library sap.fe.macros",
5
5
  "keywords": [
6
6
  "sapui5",
@@ -6,7 +6,7 @@
6
6
  SAP UI development toolkit for HTML5 (SAPUI5)
7
7
  (c) Copyright 2009-2021 SAP SE. All rights reserved
8
8
  </copyright>
9
- <version>1.130.6</version>
9
+ <version>1.130.8</version>
10
10
 
11
11
  <documentation>UI5 library: sap.fe.macros</documentation>
12
12
 
@@ -2,7 +2,7 @@
2
2
  * SAP UI development toolkit for HTML5 (SAPUI5)
3
3
  * (c) Copyright 2009-2024 SAP SE. All rights reserved
4
4
  */
5
- sap.ui.define(["sap/fe/core/templating/PropertyHelper", "sap/fe/core/templating/UIFormatters"], function (PropertyHelper, UIFormatters) {
5
+ sap.ui.define(["sap/fe/core/templating/PropertyHelper", "sap/fe/core/templating/UIFormatters", "sap/fe/core/converters/MetaModelConverter"], function (PropertyHelper, UIFormatters, MetaModelConverter) {
6
6
  "use strict";
7
7
 
8
8
  var _exports = {};
@@ -51,11 +51,11 @@ sap.ui.define(["sap/fe/core/templating/PropertyHelper", "sap/fe/core/templating/
51
51
  return ((_element$LocalDataPro = element.LocalDataProperty) === null || _element$LocalDataPro === void 0 ? void 0 : _element$LocalDataPro.$PropertyPath) === (propertyObjectPath === null || propertyObjectPath === void 0 ? void 0 : (_propertyObjectPath$t4 = propertyObjectPath.targetObject) === null || _propertyObjectPath$t4 === void 0 ? void 0 : _propertyObjectPath$t4.name);
52
52
  });
53
53
  const valueListProperty = valueListParameter === null || valueListParameter === void 0 ? void 0 : valueListParameter.ValueListProperty;
54
- const textAnnotation = metaModel.getObject("/" + firstValueListInfo.CollectionPath + "/" + valueListProperty + "@com.sap.vocabularies.Common.v1.Text");
55
- return textAnnotation ? "DescriptionValue" : "Value";
54
+ const propertyConverted = MetaModelConverter.getInvolvedDataModelObjects(metaModel.createBindingContext("/" + firstValueListInfo.CollectionPath + "/" + valueListProperty));
55
+ return getDisplayMode(propertyConverted);
56
56
  });
57
57
  }
58
58
  _exports._getDisplayModeFromValueHelp = _getDisplayModeFromValueHelp;
59
59
  return _exports;
60
60
  }, false);
61
- //# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJuYW1lcyI6WyJnZXREaXNwbGF5UHJvcGVydHkiLCJwcm9wZXJ0eU9iamVjdFBhdGgiLCJwcm9wZXJ0eUNvbnZlcnRlZCIsImhhc1ZhbHVlSGVscCIsImdldERpc3BsYXlNb2RlIiwiX2V4cG9ydHMiLCJnZXRGaWx0ZXJGaWVsZERpc3BsYXlGb3JtYXQiLCJwcm9wZXJ0eUludGVyZmFjZSIsIl9wcm9wZXJ0eUNvbnZlcnRlZCRhbiIsIl9wcm9wZXJ0eUNvbnZlcnRlZCRhbjIiLCJvVGV4dEFubm90YXRpb24iLCJhbm5vdGF0aW9ucyIsIkNvbW1vbiIsIlRleHQiLCJiSGFzVmFsdWVIZWxwIiwiX3Byb3BlcnR5T2JqZWN0UGF0aCR0IiwiX3Byb3BlcnR5T2JqZWN0UGF0aCR0MiIsIl9wcm9wZXJ0eU9iamVjdFBhdGgkdDMiLCJlbnRpdHlUZXh0QXJyYW5nZW1lbnQiLCJ0YXJnZXRFbnRpdHlUeXBlIiwiVUkiLCJUZXh0QXJyYW5nZW1lbnQiLCJfZ2V0RGlzcGxheU1vZGVGcm9tVmFsdWVIZWxwIiwiSW50ZXJmYWNlIiwiY29udGV4dCIsIm1ldGFNb2RlbCIsImdldE1vZGVsIiwicmVxdWVzdFZhbHVlTGlzdEluZm8iLCJnZXRQYXRoIiwidGhlbiIsInZhbHVlTGlzdEluZm8iLCJfZmlyc3RWYWx1ZUxpc3RJbmZvJFAiLCJmaXJzdEtleSIsIk9iamVjdCIsImtleXMiLCJmaXJzdFZhbHVlTGlzdEluZm8iLCJ2YWx1ZUxpc3RQYXJhbWV0ZXIiLCJQYXJhbWV0ZXJzIiwiZmluZCIsImVsZW1lbnQiLCJfZWxlbWVudCRMb2NhbERhdGFQcm8iLCJfcHJvcGVydHlPYmplY3RQYXRoJHQ0IiwiTG9jYWxEYXRhUHJvcGVydHkiLCIkUHJvcGVydHlQYXRoIiwidGFyZ2V0T2JqZWN0IiwibmFtZSIsInZhbHVlTGlzdFByb3BlcnR5IiwiVmFsdWVMaXN0UHJvcGVydHkiLCJ0ZXh0QW5ub3RhdGlvbiIsImdldE9iamVjdCIsIkNvbGxlY3Rpb25QYXRoIl0sInNvdXJjZVJvb3QiOiIuIiwic291cmNlcyI6WyJGaWx0ZXJGaWVsZFRlbXBsYXRpbmcudHMiXSwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHR5cGUgeyBEYXRhTW9kZWxPYmplY3RQYXRoIH0gZnJvbSBcInNhcC9mZS9jb3JlL3RlbXBsYXRpbmcvRGF0YU1vZGVsUGF0aEhlbHBlclwiO1xuaW1wb3J0IHsgaGFzVmFsdWVIZWxwIH0gZnJvbSBcInNhcC9mZS9jb3JlL3RlbXBsYXRpbmcvUHJvcGVydHlIZWxwZXJcIjtcbmltcG9ydCB7IGdldERpc3BsYXlNb2RlIH0gZnJvbSBcInNhcC9mZS9jb3JlL3RlbXBsYXRpbmcvVUlGb3JtYXR0ZXJzXCI7XG5cbmltcG9ydCB0eXBlIHsgUHJvcGVydHkgfSBmcm9tIFwiQHNhcC11eC92b2NhYnVsYXJpZXMtdHlwZXNcIjtcbmltcG9ydCB0eXBlIHsgQ29tcHV0ZWRBbm5vdGF0aW9uSW50ZXJmYWNlIH0gZnJvbSBcInNhcC9mZS9jb3JlL3RlbXBsYXRpbmcvVUlGb3JtYXR0ZXJzXCI7XG5pbXBvcnQgdHlwZSBDb250ZXh0IGZyb20gXCJzYXAvdWkvbW9kZWwvb2RhdGEvdjQvQ29udGV4dFwiO1xuaW1wb3J0IHR5cGUgT0RhdGFNZXRhTW9kZWwgZnJvbSBcInNhcC91aS9tb2RlbC9vZGF0YS92NC9PRGF0YU1ldGFNb2RlbFwiO1xuaW1wb3J0IHR5cGUgeyBWYWx1ZUxpc3RJbmZvIH0gZnJvbSBcInNhcC91aS9tb2RlbC9vZGF0YS92NC9PRGF0YU1ldGFNb2RlbFwiO1xuXG5leHBvcnQgY29uc3QgZ2V0RGlzcGxheVByb3BlcnR5ID0gZnVuY3Rpb24gKHByb3BlcnR5T2JqZWN0UGF0aDogRGF0YU1vZGVsT2JqZWN0UGF0aDxQcm9wZXJ0eT4sIHByb3BlcnR5Q29udmVydGVkOiBQcm9wZXJ0eSk6IHN0cmluZyB7XG5cdHJldHVybiBoYXNWYWx1ZUhlbHAocHJvcGVydHlDb252ZXJ0ZWQpID8gZ2V0RGlzcGxheU1vZGUocHJvcGVydHlPYmplY3RQYXRoKSA6IFwiVmFsdWVcIjtcbn07XG5cbmV4cG9ydCBjb25zdCBnZXRGaWx0ZXJGaWVsZERpc3BsYXlGb3JtYXQgPSBhc3luYyBmdW5jdGlvbiAoXG5cdHByb3BlcnR5T2JqZWN0UGF0aDogRGF0YU1vZGVsT2JqZWN0UGF0aDxQcm9wZXJ0eT4sXG5cdHByb3BlcnR5Q29udmVydGVkOiBQcm9wZXJ0eSxcblx0cHJvcGVydHlJbnRlcmZhY2U6IENvbXB1dGVkQW5ub3RhdGlvbkludGVyZmFjZVxuKTogUHJvbWlzZTxzdHJpbmc+IHtcblx0Y29uc3Qgb1RleHRBbm5vdGF0aW9uID0gcHJvcGVydHlDb252ZXJ0ZWQ/LmFubm90YXRpb25zPy5Db21tb24/LlRleHQ7XG5cdGlmIChvVGV4dEFubm90YXRpb24pIHtcblx0XHQvLyBUaGUgdGV4dCBhbm5vdGF0aW9uIHNob3VsZCBiZSBvbiB0aGUgcHJvcGVydHkgZGVmaW5lZFxuXHRcdHJldHVybiBnZXREaXNwbGF5UHJvcGVydHkocHJvcGVydHlPYmplY3RQYXRoLCBwcm9wZXJ0eUNvbnZlcnRlZCk7XG5cdH1cblx0Y29uc3QgYkhhc1ZhbHVlSGVscCA9IGhhc1ZhbHVlSGVscChwcm9wZXJ0eUNvbnZlcnRlZCk7XG5cdGlmIChiSGFzVmFsdWVIZWxwKSB7XG5cdFx0Ly8gRXhjZXB0aW9uYWwgY2FzZSBmb3IgbWlzc2luZyB0ZXh0IGFubm90YXRpb24gb24gdGhlIHByb3BlcnR5IChyZXRyaWV2ZSB0ZXh0IGZyb20gdmFsdWUgbGlzdClcblx0XHQvLyBDb25zaWRlciBUZXh0QXJyYW5nZW1lbnQgYXQgRW50aXR5VHlwZSBvdGhlcndpc2Ugc2V0IGRlZmF1bHQgZGlzcGxheSBmb3JtYXQgJ0Rlc2NyaXB0aW9uVmFsdWUnXG5cdFx0Y29uc3QgZW50aXR5VGV4dEFycmFuZ2VtZW50ID0gcHJvcGVydHlPYmplY3RQYXRoPy50YXJnZXRFbnRpdHlUeXBlPy5hbm5vdGF0aW9ucz8uVUk/LlRleHRBcnJhbmdlbWVudDtcblx0XHRyZXR1cm4gZW50aXR5VGV4dEFycmFuZ2VtZW50XG5cdFx0XHQ/IGdldERpc3BsYXlNb2RlKHByb3BlcnR5T2JqZWN0UGF0aClcblx0XHRcdDogX2dldERpc3BsYXlNb2RlRnJvbVZhbHVlSGVscChwcm9wZXJ0eUludGVyZmFjZSwgcHJvcGVydHlPYmplY3RQYXRoKTtcblx0fVxuXHRyZXR1cm4gXCJWYWx1ZVwiO1xufTtcblxuLyoqXG4gKiBNZXRob2QgdG8gZGV0ZXJtaW5lIHRoZSBkaXNwbGF5IG1vZGUgZnJvbSB0aGUgdmFsdWUgaGVscC5cbiAqIEBwYXJhbSBJbnRlcmZhY2UgVGhlIGN1cnJlbnQgdGVtcGxhdGluZyBjb250ZXh0XG4gKiBAcGFyYW0gcHJvcGVydHlPYmplY3RQYXRoIFRoZSBnbG9iYWwgcGF0aCB0byByZWFjaCB0aGUgZW50aXR5U2V0XG4gKiBAcmV0dXJucyBBIHByb21pc2Ugd2l0aCB0aGUgc3RyaW5nICdEZXNjcmlwdGlvblZhbHVlJyBvciAnVmFsdWUnLCBkZXBlbmRpbmcgb24gd2hldGhlciBhIHRleHQgYW5ub3RhdGlvbiBleGlzdHMgZm9yIHRoZSBwcm9wZXJ0eSBpbiB0aGUgdmFsdWUgaGVscFxuICogSGludDogQSB0ZXh0IGFycmFuZ2VtZW50IGlzIGNvbnNjaW91c2x5IGlnbm9yZWQuIElmIHRoZSB0ZXh0IGlzIHJldHJpZXZlZCBmcm9tIHRoZSB2YWx1ZSBoZWxwLCB0aGUgdGV4dCBhcnJhbmdlbWVudCBvZiB0aGUgdmFsdWUgaGVscCBwcm9wZXJ0eSBpc27CtHQgY29uc2lkZXJlZC4gSW5zdGVhZCwgdGhlIGRlZmF1bHQgdGV4dCBhcnJhbmdlbWVudCAjVGV4dEZpcnN0XG4gKiBpcyB1c2VkLlxuICovXG5leHBvcnQgYXN5bmMgZnVuY3Rpb24gX2dldERpc3BsYXlNb2RlRnJvbVZhbHVlSGVscChcblx0SW50ZXJmYWNlOiBDb21wdXRlZEFubm90YXRpb25JbnRlcmZhY2UsXG5cdHByb3BlcnR5T2JqZWN0UGF0aDogRGF0YU1vZGVsT2JqZWN0UGF0aDxQcm9wZXJ0eT5cbik6IFByb21pc2U8c3RyaW5nPiB7XG5cdGNvbnN0IGNvbnRleHQgPSBJbnRlcmZhY2UuY29udGV4dCBhcyB1bmtub3duIGFzIENvbnRleHQ7XG5cdGNvbnN0IG1ldGFNb2RlbCA9IEludGVyZmFjZS5jb250ZXh0LmdldE1vZGVsKCkgYXMgT0RhdGFNZXRhTW9kZWw7XG5cblx0cmV0dXJuIG1ldGFNb2RlbC5yZXF1ZXN0VmFsdWVMaXN0SW5mbyhjb250ZXh0LmdldFBhdGgoKSwgdHJ1ZSwgY29udGV4dCkudGhlbihmdW5jdGlvbiAodmFsdWVMaXN0SW5mbykge1xuXHRcdGNvbnN0IGZpcnN0S2V5ID0gT2JqZWN0LmtleXModmFsdWVMaXN0SW5mbylbMF07XG5cdFx0Y29uc3QgZmlyc3RWYWx1ZUxpc3RJbmZvID0gdmFsdWVMaXN0SW5mb1tmaXJzdEtleV0gYXMgVmFsdWVMaXN0SW5mbztcblx0XHRjb25zdCB2YWx1ZUxpc3RQYXJhbWV0ZXIgPSBmaXJzdFZhbHVlTGlzdEluZm8uUGFyYW1ldGVycz8uZmluZCgoZWxlbWVudCkgPT4ge1xuXHRcdFx0cmV0dXJuIGVsZW1lbnQuTG9jYWxEYXRhUHJvcGVydHk/LiRQcm9wZXJ0eVBhdGggPT09IHByb3BlcnR5T2JqZWN0UGF0aD8udGFyZ2V0T2JqZWN0Py5uYW1lO1xuXHRcdH0pO1xuXHRcdGNvbnN0IHZhbHVlTGlzdFByb3BlcnR5ID0gdmFsdWVMaXN0UGFyYW1ldGVyPy5WYWx1ZUxpc3RQcm9wZXJ0eTtcblxuXHRcdGNvbnN0IHRleHRBbm5vdGF0aW9uID0gbWV0YU1vZGVsLmdldE9iamVjdChcblx0XHRcdFwiL1wiICsgZmlyc3RWYWx1ZUxpc3RJbmZvLkNvbGxlY3Rpb25QYXRoICsgXCIvXCIgKyB2YWx1ZUxpc3RQcm9wZXJ0eSArIFwiQGNvbS5zYXAudm9jYWJ1bGFyaWVzLkNvbW1vbi52MS5UZXh0XCJcblx0XHQpO1xuXHRcdHJldHVybiB0ZXh0QW5ub3RhdGlvbiA/IFwiRGVzY3JpcHRpb25WYWx1ZVwiIDogXCJWYWx1ZVwiO1xuXHR9KTtcbn1cbiJdLCJtYXBwaW5ncyI6Ijs7Ozs7Ozs7OztFQVVPLE1BQU1BLGtCQUFrQixHQUFHLFNBQUFBLENBQVVDLGtCQUFpRCxFQUFFQyxpQkFBMkIsRUFBVTtJQUNuSSxPQUFPQyxZQUFZLENBQUNELGlCQUFpQixDQUFDLEdBQUdFLGNBQWMsQ0FBQ0gsa0JBQWtCLENBQUMsR0FBRyxPQUFPO0VBQ3RGLENBQUM7RUFBQ0ksUUFBQSxDQUFBTCxrQkFBQSxHQUFBQSxrQkFBQTtFQUVLLE1BQU1NLDJCQUEyQixHQUFHLGVBQUFBLENBQzFDTCxrQkFBaUQsRUFDakRDLGlCQUEyQixFQUMzQkssaUJBQThDLEVBQzVCO0lBQUEsSUFBQUMscUJBQUEsRUFBQUMsc0JBQUE7SUFDbEIsTUFBTUMsZUFBZSxHQUFHUixpQkFBaUIsYUFBakJBLGlCQUFpQix3QkFBQU0scUJBQUEsR0FBakJOLGlCQUFpQixDQUFFUyxXQUFXLGNBQUFILHFCQUFBLHdCQUFBQyxzQkFBQSxHQUE5QkQscUJBQUEsQ0FBZ0NJLE1BQU0sY0FBQUgsc0JBQUEsdUJBQXRDQSxzQkFBQSxDQUF3Q0ksSUFBSTtJQUNwRSxJQUFJSCxlQUFlLEVBQUU7TUFDcEI7TUFDQSxPQUFPVixrQkFBa0IsQ0FBQ0Msa0JBQWtCLEVBQUVDLGlCQUFpQixDQUFDO0lBQ2pFO0lBQ0EsTUFBTVksYUFBYSxHQUFHWCxZQUFZLENBQUNELGlCQUFpQixDQUFDO0lBQ3JELElBQUlZLGFBQWEsRUFBRTtNQUFBLElBQUFDLHFCQUFBLEVBQUFDLHNCQUFBLEVBQUFDLHNCQUFBO01BQ2xCO01BQ0E7TUFDQSxNQUFNQyxxQkFBcUIsR0FBR2pCLGtCQUFrQixhQUFsQkEsa0JBQWtCLHdCQUFBYyxxQkFBQSxHQUFsQmQsa0JBQWtCLENBQUVrQixnQkFBZ0IsY0FBQUoscUJBQUEsd0JBQUFDLHNCQUFBLEdBQXBDRCxxQkFBQSxDQUFzQ0osV0FBVyxjQUFBSyxzQkFBQSx3QkFBQUMsc0JBQUEsR0FBakRELHNCQUFBLENBQW1ESSxFQUFFLGNBQUFILHNCQUFBLHVCQUFyREEsc0JBQUEsQ0FBdURJLGVBQWU7TUFDcEcsT0FBT0gscUJBQXFCLEdBQ3pCZCxjQUFjLENBQUNILGtCQUFrQixDQUFDLEdBQ2xDcUIsNEJBQTRCLENBQUNmLGlCQUFpQixFQUFFTixrQkFBa0IsQ0FBQztJQUN2RTtJQUNBLE9BQU8sT0FBTztFQUNmLENBQUM7O0VBRUQ7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtFQVBBSSxRQUFBLENBQUFDLDJCQUFBLEdBQUFBLDJCQUFBO0VBUU8sZUFBZWdCLDRCQUE0QkEsQ0FDakRDLFNBQXNDLEVBQ3RDdEIsa0JBQWlELEVBQy9CO0lBQ2xCLE1BQU11QixPQUFPLEdBQUdELFNBQVMsQ0FBQ0MsT0FBNkI7SUFDdkQsTUFBTUMsU0FBUyxHQUFHRixTQUFTLENBQUNDLE9BQU8sQ0FBQ0UsUUFBUSxDQUFDLENBQW1CO0lBRWhFLE9BQU9ELFNBQVMsQ0FBQ0Usb0JBQW9CLENBQUNILE9BQU8sQ0FBQ0ksT0FBTyxDQUFDLENBQUMsRUFBRSxJQUFJLEVBQUVKLE9BQU8sQ0FBQyxDQUFDSyxJQUFJLENBQUMsVUFBVUMsYUFBYSxFQUFFO01BQUEsSUFBQUMscUJBQUE7TUFDckcsTUFBTUMsUUFBUSxHQUFHQyxNQUFNLENBQUNDLElBQUksQ0FBQ0osYUFBYSxDQUFDLENBQUMsQ0FBQyxDQUFDO01BQzlDLE1BQU1LLGtCQUFrQixHQUFHTCxhQUFhLENBQUNFLFFBQVEsQ0FBa0I7TUFDbkUsTUFBTUksa0JBQWtCLElBQUFMLHFCQUFBLEdBQUdJLGtCQUFrQixDQUFDRSxVQUFVLGNBQUFOLHFCQUFBLHVCQUE3QkEscUJBQUEsQ0FBK0JPLElBQUksQ0FBRUMsT0FBTyxJQUFLO1FBQUEsSUFBQUMscUJBQUEsRUFBQUMsc0JBQUE7UUFDM0UsT0FBTyxFQUFBRCxxQkFBQSxHQUFBRCxPQUFPLENBQUNHLGlCQUFpQixjQUFBRixxQkFBQSx1QkFBekJBLHFCQUFBLENBQTJCRyxhQUFhLE9BQUsxQyxrQkFBa0IsYUFBbEJBLGtCQUFrQix3QkFBQXdDLHNCQUFBLEdBQWxCeEMsa0JBQWtCLENBQUUyQyxZQUFZLGNBQUFILHNCQUFBLHVCQUFoQ0Esc0JBQUEsQ0FBa0NJLElBQUk7TUFDM0YsQ0FBQyxDQUFDO01BQ0YsTUFBTUMsaUJBQWlCLEdBQUdWLGtCQUFrQixhQUFsQkEsa0JBQWtCLHVCQUFsQkEsa0JBQWtCLENBQUVXLGlCQUFpQjtNQUUvRCxNQUFNQyxjQUFjLEdBQUd2QixTQUFTLENBQUN3QixTQUFTLENBQ3pDLEdBQUcsR0FBR2Qsa0JBQWtCLENBQUNlLGNBQWMsR0FBRyxHQUFHLEdBQUdKLGlCQUFpQixHQUFHLHNDQUNyRSxDQUFDO01BQ0QsT0FBT0UsY0FBYyxHQUFHLGtCQUFrQixHQUFHLE9BQU87SUFDckQsQ0FBQyxDQUFDO0VBQ0g7RUFBQzNDLFFBQUEsQ0FBQWlCLDRCQUFBLEdBQUFBLDRCQUFBO0VBQUEsT0FBQWpCLFFBQUE7QUFBQSIsImlnbm9yZUxpc3QiOltdfQ==
61
+ //# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJuYW1lcyI6WyJnZXREaXNwbGF5UHJvcGVydHkiLCJwcm9wZXJ0eU9iamVjdFBhdGgiLCJwcm9wZXJ0eUNvbnZlcnRlZCIsImhhc1ZhbHVlSGVscCIsImdldERpc3BsYXlNb2RlIiwiX2V4cG9ydHMiLCJnZXRGaWx0ZXJGaWVsZERpc3BsYXlGb3JtYXQiLCJwcm9wZXJ0eUludGVyZmFjZSIsIl9wcm9wZXJ0eUNvbnZlcnRlZCRhbiIsIl9wcm9wZXJ0eUNvbnZlcnRlZCRhbjIiLCJvVGV4dEFubm90YXRpb24iLCJhbm5vdGF0aW9ucyIsIkNvbW1vbiIsIlRleHQiLCJiSGFzVmFsdWVIZWxwIiwiX3Byb3BlcnR5T2JqZWN0UGF0aCR0IiwiX3Byb3BlcnR5T2JqZWN0UGF0aCR0MiIsIl9wcm9wZXJ0eU9iamVjdFBhdGgkdDMiLCJlbnRpdHlUZXh0QXJyYW5nZW1lbnQiLCJ0YXJnZXRFbnRpdHlUeXBlIiwiVUkiLCJUZXh0QXJyYW5nZW1lbnQiLCJfZ2V0RGlzcGxheU1vZGVGcm9tVmFsdWVIZWxwIiwiSW50ZXJmYWNlIiwiY29udGV4dCIsIm1ldGFNb2RlbCIsImdldE1vZGVsIiwicmVxdWVzdFZhbHVlTGlzdEluZm8iLCJnZXRQYXRoIiwidGhlbiIsInZhbHVlTGlzdEluZm8iLCJfZmlyc3RWYWx1ZUxpc3RJbmZvJFAiLCJmaXJzdEtleSIsIk9iamVjdCIsImtleXMiLCJmaXJzdFZhbHVlTGlzdEluZm8iLCJ2YWx1ZUxpc3RQYXJhbWV0ZXIiLCJQYXJhbWV0ZXJzIiwiZmluZCIsImVsZW1lbnQiLCJfZWxlbWVudCRMb2NhbERhdGFQcm8iLCJfcHJvcGVydHlPYmplY3RQYXRoJHQ0IiwiTG9jYWxEYXRhUHJvcGVydHkiLCIkUHJvcGVydHlQYXRoIiwidGFyZ2V0T2JqZWN0IiwibmFtZSIsInZhbHVlTGlzdFByb3BlcnR5IiwiVmFsdWVMaXN0UHJvcGVydHkiLCJNZXRhTW9kZWxDb252ZXJ0ZXIiLCJnZXRJbnZvbHZlZERhdGFNb2RlbE9iamVjdHMiLCJjcmVhdGVCaW5kaW5nQ29udGV4dCIsIkNvbGxlY3Rpb25QYXRoIl0sInNvdXJjZVJvb3QiOiIuIiwic291cmNlcyI6WyJGaWx0ZXJGaWVsZFRlbXBsYXRpbmcudHMiXSwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHR5cGUgeyBEYXRhTW9kZWxPYmplY3RQYXRoIH0gZnJvbSBcInNhcC9mZS9jb3JlL3RlbXBsYXRpbmcvRGF0YU1vZGVsUGF0aEhlbHBlclwiO1xuaW1wb3J0IHsgaGFzVmFsdWVIZWxwIH0gZnJvbSBcInNhcC9mZS9jb3JlL3RlbXBsYXRpbmcvUHJvcGVydHlIZWxwZXJcIjtcbmltcG9ydCB7IGdldERpc3BsYXlNb2RlIH0gZnJvbSBcInNhcC9mZS9jb3JlL3RlbXBsYXRpbmcvVUlGb3JtYXR0ZXJzXCI7XG5cbmltcG9ydCB0eXBlIHsgUHJvcGVydHkgfSBmcm9tIFwiQHNhcC11eC92b2NhYnVsYXJpZXMtdHlwZXNcIjtcbmltcG9ydCAqIGFzIE1ldGFNb2RlbENvbnZlcnRlciBmcm9tIFwic2FwL2ZlL2NvcmUvY29udmVydGVycy9NZXRhTW9kZWxDb252ZXJ0ZXJcIjtcbmltcG9ydCB0eXBlIHsgQ29tcHV0ZWRBbm5vdGF0aW9uSW50ZXJmYWNlIH0gZnJvbSBcInNhcC9mZS9jb3JlL3RlbXBsYXRpbmcvVUlGb3JtYXR0ZXJzXCI7XG5pbXBvcnQgdHlwZSBDb250ZXh0IGZyb20gXCJzYXAvdWkvbW9kZWwvb2RhdGEvdjQvQ29udGV4dFwiO1xuaW1wb3J0IHR5cGUgT0RhdGFNZXRhTW9kZWwgZnJvbSBcInNhcC91aS9tb2RlbC9vZGF0YS92NC9PRGF0YU1ldGFNb2RlbFwiO1xuaW1wb3J0IHR5cGUgeyBWYWx1ZUxpc3RJbmZvIH0gZnJvbSBcInNhcC91aS9tb2RlbC9vZGF0YS92NC9PRGF0YU1ldGFNb2RlbFwiO1xuXG5leHBvcnQgY29uc3QgZ2V0RGlzcGxheVByb3BlcnR5ID0gZnVuY3Rpb24gKHByb3BlcnR5T2JqZWN0UGF0aDogRGF0YU1vZGVsT2JqZWN0UGF0aDxQcm9wZXJ0eT4sIHByb3BlcnR5Q29udmVydGVkOiBQcm9wZXJ0eSk6IHN0cmluZyB7XG5cdHJldHVybiBoYXNWYWx1ZUhlbHAocHJvcGVydHlDb252ZXJ0ZWQpID8gZ2V0RGlzcGxheU1vZGUocHJvcGVydHlPYmplY3RQYXRoKSA6IFwiVmFsdWVcIjtcbn07XG5cbmV4cG9ydCBjb25zdCBnZXRGaWx0ZXJGaWVsZERpc3BsYXlGb3JtYXQgPSBhc3luYyBmdW5jdGlvbiAoXG5cdHByb3BlcnR5T2JqZWN0UGF0aDogRGF0YU1vZGVsT2JqZWN0UGF0aDxQcm9wZXJ0eT4sXG5cdHByb3BlcnR5Q29udmVydGVkOiBQcm9wZXJ0eSxcblx0cHJvcGVydHlJbnRlcmZhY2U6IENvbXB1dGVkQW5ub3RhdGlvbkludGVyZmFjZVxuKTogUHJvbWlzZTxzdHJpbmc+IHtcblx0Y29uc3Qgb1RleHRBbm5vdGF0aW9uID0gcHJvcGVydHlDb252ZXJ0ZWQ/LmFubm90YXRpb25zPy5Db21tb24/LlRleHQ7XG5cdGlmIChvVGV4dEFubm90YXRpb24pIHtcblx0XHQvLyBUaGUgdGV4dCBhbm5vdGF0aW9uIHNob3VsZCBiZSBvbiB0aGUgcHJvcGVydHkgZGVmaW5lZFxuXHRcdHJldHVybiBnZXREaXNwbGF5UHJvcGVydHkocHJvcGVydHlPYmplY3RQYXRoLCBwcm9wZXJ0eUNvbnZlcnRlZCk7XG5cdH1cblx0Y29uc3QgYkhhc1ZhbHVlSGVscCA9IGhhc1ZhbHVlSGVscChwcm9wZXJ0eUNvbnZlcnRlZCk7XG5cdGlmIChiSGFzVmFsdWVIZWxwKSB7XG5cdFx0Ly8gRXhjZXB0aW9uYWwgY2FzZSBmb3IgbWlzc2luZyB0ZXh0IGFubm90YXRpb24gb24gdGhlIHByb3BlcnR5IChyZXRyaWV2ZSB0ZXh0IGZyb20gdmFsdWUgbGlzdClcblx0XHQvLyBDb25zaWRlciBUZXh0QXJyYW5nZW1lbnQgYXQgRW50aXR5VHlwZSBvdGhlcndpc2Ugc2V0IGRlZmF1bHQgZGlzcGxheSBmb3JtYXQgJ0Rlc2NyaXB0aW9uVmFsdWUnXG5cdFx0Y29uc3QgZW50aXR5VGV4dEFycmFuZ2VtZW50ID0gcHJvcGVydHlPYmplY3RQYXRoPy50YXJnZXRFbnRpdHlUeXBlPy5hbm5vdGF0aW9ucz8uVUk/LlRleHRBcnJhbmdlbWVudDtcblx0XHRyZXR1cm4gZW50aXR5VGV4dEFycmFuZ2VtZW50XG5cdFx0XHQ/IGdldERpc3BsYXlNb2RlKHByb3BlcnR5T2JqZWN0UGF0aClcblx0XHRcdDogX2dldERpc3BsYXlNb2RlRnJvbVZhbHVlSGVscChwcm9wZXJ0eUludGVyZmFjZSwgcHJvcGVydHlPYmplY3RQYXRoKTtcblx0fVxuXHRyZXR1cm4gXCJWYWx1ZVwiO1xufTtcblxuLyoqXG4gKiBNZXRob2QgdG8gZGV0ZXJtaW5lIHRoZSBkaXNwbGF5IG1vZGUgZnJvbSB0aGUgdmFsdWUgaGVscC5cbiAqIEBwYXJhbSBJbnRlcmZhY2UgVGhlIGN1cnJlbnQgdGVtcGxhdGluZyBjb250ZXh0XG4gKiBAcGFyYW0gcHJvcGVydHlPYmplY3RQYXRoIFRoZSBnbG9iYWwgcGF0aCB0byByZWFjaCB0aGUgZW50aXR5U2V0XG4gKiBAcmV0dXJucyBBIHByb21pc2Ugd2l0aCB0aGUgc3RyaW5nICdEZXNjcmlwdGlvblZhbHVlJyBvciAnVmFsdWUnLCBkZXBlbmRpbmcgb24gd2hldGhlciBhIHRleHQgYW5ub3RhdGlvbiBleGlzdHMgZm9yIHRoZSBwcm9wZXJ0eSBpbiB0aGUgdmFsdWUgaGVscFxuICogSGludDogQSB0ZXh0IGFycmFuZ2VtZW50IGlzIGNvbnNjaW91c2x5IGlnbm9yZWQuIElmIHRoZSB0ZXh0IGlzIHJldHJpZXZlZCBmcm9tIHRoZSB2YWx1ZSBoZWxwLCB0aGUgdGV4dCBhcnJhbmdlbWVudCBvZiB0aGUgdmFsdWUgaGVscCBwcm9wZXJ0eSBpc27CtHQgY29uc2lkZXJlZC4gSW5zdGVhZCwgdGhlIGRlZmF1bHQgdGV4dCBhcnJhbmdlbWVudCAjVGV4dEZpcnN0XG4gKiBpcyB1c2VkLlxuICovXG5leHBvcnQgYXN5bmMgZnVuY3Rpb24gX2dldERpc3BsYXlNb2RlRnJvbVZhbHVlSGVscChcblx0SW50ZXJmYWNlOiBDb21wdXRlZEFubm90YXRpb25JbnRlcmZhY2UsXG5cdHByb3BlcnR5T2JqZWN0UGF0aDogRGF0YU1vZGVsT2JqZWN0UGF0aDxQcm9wZXJ0eT5cbik6IFByb21pc2U8c3RyaW5nPiB7XG5cdGNvbnN0IGNvbnRleHQgPSBJbnRlcmZhY2UuY29udGV4dCBhcyB1bmtub3duIGFzIENvbnRleHQ7XG5cdGNvbnN0IG1ldGFNb2RlbCA9IEludGVyZmFjZS5jb250ZXh0LmdldE1vZGVsKCkgYXMgT0RhdGFNZXRhTW9kZWw7XG5cblx0cmV0dXJuIG1ldGFNb2RlbC5yZXF1ZXN0VmFsdWVMaXN0SW5mbyhjb250ZXh0LmdldFBhdGgoKSwgdHJ1ZSwgY29udGV4dCkudGhlbihmdW5jdGlvbiAodmFsdWVMaXN0SW5mbykge1xuXHRcdGNvbnN0IGZpcnN0S2V5ID0gT2JqZWN0LmtleXModmFsdWVMaXN0SW5mbylbMF07XG5cdFx0Y29uc3QgZmlyc3RWYWx1ZUxpc3RJbmZvID0gdmFsdWVMaXN0SW5mb1tmaXJzdEtleV0gYXMgVmFsdWVMaXN0SW5mbztcblx0XHRjb25zdCB2YWx1ZUxpc3RQYXJhbWV0ZXIgPSBmaXJzdFZhbHVlTGlzdEluZm8uUGFyYW1ldGVycz8uZmluZCgoZWxlbWVudCkgPT4ge1xuXHRcdFx0cmV0dXJuIGVsZW1lbnQuTG9jYWxEYXRhUHJvcGVydHk/LiRQcm9wZXJ0eVBhdGggPT09IHByb3BlcnR5T2JqZWN0UGF0aD8udGFyZ2V0T2JqZWN0Py5uYW1lO1xuXHRcdH0pO1xuXHRcdGNvbnN0IHZhbHVlTGlzdFByb3BlcnR5ID0gdmFsdWVMaXN0UGFyYW1ldGVyPy5WYWx1ZUxpc3RQcm9wZXJ0eTtcblx0XHRjb25zdCBwcm9wZXJ0eUNvbnZlcnRlZCA9IE1ldGFNb2RlbENvbnZlcnRlci5nZXRJbnZvbHZlZERhdGFNb2RlbE9iamVjdHM8UHJvcGVydHk+KFxuXHRcdFx0bWV0YU1vZGVsLmNyZWF0ZUJpbmRpbmdDb250ZXh0KFwiL1wiICsgZmlyc3RWYWx1ZUxpc3RJbmZvLkNvbGxlY3Rpb25QYXRoICsgXCIvXCIgKyB2YWx1ZUxpc3RQcm9wZXJ0eSkhXG5cdFx0KTtcblx0XHRyZXR1cm4gZ2V0RGlzcGxheU1vZGUocHJvcGVydHlDb252ZXJ0ZWQpO1xuXHR9KTtcbn1cbiJdLCJtYXBwaW5ncyI6Ijs7Ozs7Ozs7OztFQVdPLE1BQU1BLGtCQUFrQixHQUFHLFNBQUFBLENBQVVDLGtCQUFpRCxFQUFFQyxpQkFBMkIsRUFBVTtJQUNuSSxPQUFPQyxZQUFZLENBQUNELGlCQUFpQixDQUFDLEdBQUdFLGNBQWMsQ0FBQ0gsa0JBQWtCLENBQUMsR0FBRyxPQUFPO0VBQ3RGLENBQUM7RUFBQ0ksUUFBQSxDQUFBTCxrQkFBQSxHQUFBQSxrQkFBQTtFQUVLLE1BQU1NLDJCQUEyQixHQUFHLGVBQUFBLENBQzFDTCxrQkFBaUQsRUFDakRDLGlCQUEyQixFQUMzQkssaUJBQThDLEVBQzVCO0lBQUEsSUFBQUMscUJBQUEsRUFBQUMsc0JBQUE7SUFDbEIsTUFBTUMsZUFBZSxHQUFHUixpQkFBaUIsYUFBakJBLGlCQUFpQix3QkFBQU0scUJBQUEsR0FBakJOLGlCQUFpQixDQUFFUyxXQUFXLGNBQUFILHFCQUFBLHdCQUFBQyxzQkFBQSxHQUE5QkQscUJBQUEsQ0FBZ0NJLE1BQU0sY0FBQUgsc0JBQUEsdUJBQXRDQSxzQkFBQSxDQUF3Q0ksSUFBSTtJQUNwRSxJQUFJSCxlQUFlLEVBQUU7TUFDcEI7TUFDQSxPQUFPVixrQkFBa0IsQ0FBQ0Msa0JBQWtCLEVBQUVDLGlCQUFpQixDQUFDO0lBQ2pFO0lBQ0EsTUFBTVksYUFBYSxHQUFHWCxZQUFZLENBQUNELGlCQUFpQixDQUFDO0lBQ3JELElBQUlZLGFBQWEsRUFBRTtNQUFBLElBQUFDLHFCQUFBLEVBQUFDLHNCQUFBLEVBQUFDLHNCQUFBO01BQ2xCO01BQ0E7TUFDQSxNQUFNQyxxQkFBcUIsR0FBR2pCLGtCQUFrQixhQUFsQkEsa0JBQWtCLHdCQUFBYyxxQkFBQSxHQUFsQmQsa0JBQWtCLENBQUVrQixnQkFBZ0IsY0FBQUoscUJBQUEsd0JBQUFDLHNCQUFBLEdBQXBDRCxxQkFBQSxDQUFzQ0osV0FBVyxjQUFBSyxzQkFBQSx3QkFBQUMsc0JBQUEsR0FBakRELHNCQUFBLENBQW1ESSxFQUFFLGNBQUFILHNCQUFBLHVCQUFyREEsc0JBQUEsQ0FBdURJLGVBQWU7TUFDcEcsT0FBT0gscUJBQXFCLEdBQ3pCZCxjQUFjLENBQUNILGtCQUFrQixDQUFDLEdBQ2xDcUIsNEJBQTRCLENBQUNmLGlCQUFpQixFQUFFTixrQkFBa0IsQ0FBQztJQUN2RTtJQUNBLE9BQU8sT0FBTztFQUNmLENBQUM7O0VBRUQ7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtFQVBBSSxRQUFBLENBQUFDLDJCQUFBLEdBQUFBLDJCQUFBO0VBUU8sZUFBZWdCLDRCQUE0QkEsQ0FDakRDLFNBQXNDLEVBQ3RDdEIsa0JBQWlELEVBQy9CO0lBQ2xCLE1BQU11QixPQUFPLEdBQUdELFNBQVMsQ0FBQ0MsT0FBNkI7SUFDdkQsTUFBTUMsU0FBUyxHQUFHRixTQUFTLENBQUNDLE9BQU8sQ0FBQ0UsUUFBUSxDQUFDLENBQW1CO0lBRWhFLE9BQU9ELFNBQVMsQ0FBQ0Usb0JBQW9CLENBQUNILE9BQU8sQ0FBQ0ksT0FBTyxDQUFDLENBQUMsRUFBRSxJQUFJLEVBQUVKLE9BQU8sQ0FBQyxDQUFDSyxJQUFJLENBQUMsVUFBVUMsYUFBYSxFQUFFO01BQUEsSUFBQUMscUJBQUE7TUFDckcsTUFBTUMsUUFBUSxHQUFHQyxNQUFNLENBQUNDLElBQUksQ0FBQ0osYUFBYSxDQUFDLENBQUMsQ0FBQyxDQUFDO01BQzlDLE1BQU1LLGtCQUFrQixHQUFHTCxhQUFhLENBQUNFLFFBQVEsQ0FBa0I7TUFDbkUsTUFBTUksa0JBQWtCLElBQUFMLHFCQUFBLEdBQUdJLGtCQUFrQixDQUFDRSxVQUFVLGNBQUFOLHFCQUFBLHVCQUE3QkEscUJBQUEsQ0FBK0JPLElBQUksQ0FBRUMsT0FBTyxJQUFLO1FBQUEsSUFBQUMscUJBQUEsRUFBQUMsc0JBQUE7UUFDM0UsT0FBTyxFQUFBRCxxQkFBQSxHQUFBRCxPQUFPLENBQUNHLGlCQUFpQixjQUFBRixxQkFBQSx1QkFBekJBLHFCQUFBLENBQTJCRyxhQUFhLE9BQUsxQyxrQkFBa0IsYUFBbEJBLGtCQUFrQix3QkFBQXdDLHNCQUFBLEdBQWxCeEMsa0JBQWtCLENBQUUyQyxZQUFZLGNBQUFILHNCQUFBLHVCQUFoQ0Esc0JBQUEsQ0FBa0NJLElBQUk7TUFDM0YsQ0FBQyxDQUFDO01BQ0YsTUFBTUMsaUJBQWlCLEdBQUdWLGtCQUFrQixhQUFsQkEsa0JBQWtCLHVCQUFsQkEsa0JBQWtCLENBQUVXLGlCQUFpQjtNQUMvRCxNQUFNN0MsaUJBQWlCLEdBQUc4QyxrQkFBa0IsQ0FBQ0MsMkJBQTJCLENBQ3ZFeEIsU0FBUyxDQUFDeUIsb0JBQW9CLENBQUMsR0FBRyxHQUFHZixrQkFBa0IsQ0FBQ2dCLGNBQWMsR0FBRyxHQUFHLEdBQUdMLGlCQUFpQixDQUNqRyxDQUFDO01BQ0QsT0FBTzFDLGNBQWMsQ0FBQ0YsaUJBQWlCLENBQUM7SUFDekMsQ0FBQyxDQUFDO0VBQ0g7RUFBQ0csUUFBQSxDQUFBaUIsNEJBQUEsR0FBQUEsNEJBQUE7RUFBQSxPQUFBakIsUUFBQTtBQUFBIiwiaWdub3JlTGlzdCI6W119
@@ -3,6 +3,7 @@ import { hasValueHelp } from "sap/fe/core/templating/PropertyHelper";
3
3
  import { getDisplayMode } from "sap/fe/core/templating/UIFormatters";
4
4
 
5
5
  import type { Property } from "@sap-ux/vocabularies-types";
6
+ import * as MetaModelConverter from "sap/fe/core/converters/MetaModelConverter";
6
7
  import type { ComputedAnnotationInterface } from "sap/fe/core/templating/UIFormatters";
7
8
  import type Context from "sap/ui/model/odata/v4/Context";
8
9
  import type ODataMetaModel from "sap/ui/model/odata/v4/ODataMetaModel";
@@ -56,10 +57,9 @@ export async function _getDisplayModeFromValueHelp(
56
57
  return element.LocalDataProperty?.$PropertyPath === propertyObjectPath?.targetObject?.name;
57
58
  });
58
59
  const valueListProperty = valueListParameter?.ValueListProperty;
59
-
60
- const textAnnotation = metaModel.getObject(
61
- "/" + firstValueListInfo.CollectionPath + "/" + valueListProperty + "@com.sap.vocabularies.Common.v1.Text"
60
+ const propertyConverted = MetaModelConverter.getInvolvedDataModelObjects<Property>(
61
+ metaModel.createBindingContext("/" + firstValueListInfo.CollectionPath + "/" + valueListProperty)!
62
62
  );
63
- return textAnnotation ? "DescriptionValue" : "Value";
63
+ return getDisplayMode(propertyConverted);
64
64
  });
65
65
  }
@@ -14,7 +14,8 @@
14
14
  ValueHelpTemplating: 'sap/fe/macros/internal/valuehelp/ValueHelpTemplating',
15
15
  Property: 'sap/fe/core/templating/PropertyFormatters',
16
16
  UI: 'sap/fe/core/templating/UIFormatters',
17
- TableHelper: 'sap/fe/macros/table/TableHelper'
17
+ TableHelper: 'sap/fe/macros/table/TableHelper',
18
+ Device: 'sap/ui/Device'
18
19
  }"
19
20
  >
20
21
  <template:with path="valueList>" helper="VLH.getValueListCollectionEntitySet" var="entitySet">
@@ -61,6 +62,9 @@
61
62
  <template:then>
62
63
  <mdc:table.TreeTableType />
63
64
  </template:then>
65
+ <template:elseif test="{= Device.system.phone}">
66
+ <mdc:table.ResponsiveTableType />
67
+ </template:elseif>
64
68
  <template:else>
65
69
  <mdc:table.GridTableType />
66
70
  </template:else>
@@ -942,7 +942,7 @@ sap.ui.define(["sap/base/Log", "sap/base/util/ObjectPath", "sap/fe/core/CommonUt
942
942
  Log.info(`Value List- suggest Table XML content created [${propertyPath}]`, table.getMetadata().getName(), "MDC Templating");
943
943
  content.setTable(table);
944
944
  const field = valueHelp.getControl();
945
- if (field !== undefined && (field.isA("sap.ui.mdc.FilterField") || field.isA("sap.ui.mdc.Field") || field.isA("sap.ui.mdc.MultiValueField"))) {
945
+ if (field !== undefined && (field.isA("sap.ui.mdc.FilterField") || field.isA("sap.ui.mdc.Field") && !field.getValue() || field.isA("sap.ui.mdc.MultiValueField"))) {
946
946
  //Can the filterfield be something else that we need the .isA() check?
947
947
  const tableMode = valueHelpWithFixedValues && field.getMaxConditions() !== 1 ? "MultiSelect" : "SingleSelectMaster";
948
948
  table.setMode(tableMode);
@@ -1231,4 +1231,4 @@ sap.ui.define(["sap/base/Log", "sap/base/util/ObjectPath", "sap/fe/core/CommonUt
1231
1231
  };
1232
1232
  return ValueListHelper;
1233
1233
  }, false);
1234
- //# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJuYW1lcyI6WyJjb2x1bW5Ob3RBbHJlYWR5RGVmaW5lZCIsImNvbHVtbkRlZnMiLCJ2aEtleSIsInNvbWUiLCJjb2x1bW4iLCJwYXRoIiwiQW5ub3RhdGlvbkxhYmVsIiwiQW5ub3RhdGlvblRleHQiLCJBbm5vdGF0aW9uVGV4dFVJVGV4dEFycmFuZ2VtZW50IiwiQW5ub3RhdGlvblZhbHVlTGlzdFBhcmFtZXRlckluIiwiQW5ub3RhdGlvblZhbHVlTGlzdFBhcmFtZXRlckNvbnN0YW50IiwiQW5ub3RhdGlvblZhbHVlTGlzdFBhcmFtZXRlck91dCIsIkFubm90YXRpb25WYWx1ZUxpc3RQYXJhbWV0ZXJJbk91dCIsIkFubm90YXRpb25WYWx1ZUxpc3RXaXRoRml4ZWRWYWx1ZXMiLCJBbm5vdGF0aW9uc1BlcnNvbmFsRGF0YVBvdGVudGlhbGx5U2Vuc2l0aXZlIiwiQW5ub3RhdGlvbnNWYWx1ZUxpc3RSZWxldmFudFF1YWxpZmllcnMiLCJfZXhwb3J0cyIsIl9nZXREZWZhdWx0U29ydFByb3BlcnR5TmFtZSIsInZhbHVlTGlzdEluZm8iLCJzb3J0RmllbGROYW1lIiwibWV0YU1vZGVsIiwiJG1vZGVsIiwiZ2V0TWV0YU1vZGVsIiwiZW50aXR5U2V0QW5ub3RhdGlvbnMiLCJnZXRPYmplY3QiLCJDb2xsZWN0aW9uUGF0aCIsInNvcnRSZXN0cmljdGlvbnNJbmZvIiwiZ2V0U29ydFJlc3RyaWN0aW9uc0luZm8iLCJmb3VuZEVsZW1lbnQiLCJQYXJhbWV0ZXJzIiwiZmluZCIsImVsZW1lbnQiLCIkVHlwZSIsIlZhbHVlTGlzdFByb3BlcnR5IiwicHJvcGVydHlJbmZvIiwic29ydGFibGUiLCJ1bmRlZmluZWQiLCJfcmVkdW5kYW50RGVzY3JpcHRpb24iLCJvVkxQYXJhbWV0ZXIiLCJhQ29sdW1uSW5mbyIsIm9Db2x1bW5JbmZvIiwiY29sdW1uSW5mbyIsInRleHRDb2x1bW5OYW1lIiwia2V5Q29sdW1uSGlkZGVuIiwia2V5Q29sdW1uRGlzcGxheUZvcm1hdCIsIl9oYXNJbXBvcnRhbmNlSGlnaCIsIm9WYWx1ZUxpc3RDb250ZXh0Iiwib1BhcmFtZXRlciIsIiRFbnVtTWVtYmVyIiwiX2J1aWxkJFNlbGVjdFN0cmluZyIsImNvbnRyb2wiLCJvVmlld0RhdGEiLCJnZXRNb2RlbCIsIm9EYXRhIiwiZ2V0RGF0YSIsImFDb2x1bW5zIiwiY29sdW1ucyIsInJlZHVjZSIsInNRdWVyeSIsIm9Qcm9wZXJ0eSIsImluY2x1ZGVzIiwiX2dldFZhbHVlSGVscENvbHVtbkRpc3BsYXlGb3JtYXQiLCJvUHJvcGVydHlBbm5vdGF0aW9ucyIsImlzVmFsdWVIZWxwV2l0aEZpeGVkVmFsdWVzIiwic0Rpc3BsYXlNb2RlIiwiQ29tbW9uVXRpbHMiLCJjb21wdXRlRGlzcGxheU1vZGUiLCJvVGV4dEFubm90YXRpb24iLCJvVGV4dEFycmFuZ2VtZW50QW5ub3RhdGlvbiIsIiRQYXRoIiwiZ2V0UHJlc2VudGF0aW9uVmFyaWFudCIsInZhbHVlTGlzdCIsInByZXNlbnRhdGlvblZhcmlhbnRRdWFsaWZpZXIiLCJQcmVzZW50YXRpb25WYXJpYW50UXVhbGlmaWVyIiwicHJlc2VudGF0aW9uVmFyaWFudFBhdGgiLCJWYWx1ZUxpc3RIZWxwZXIiLCJnZXRWYWx1ZUxpc3RDb2xsZWN0aW9uRW50aXR5U2V0IiwibVZhbHVlTGlzdCIsImNyZWF0ZUJpbmRpbmdDb250ZXh0IiwiaXNUcmVlVGFibGVUeXBlIiwiX2dldFByZXNlbnRhdGlvblZhcmlhIiwiUmVjdXJzaXZlSGllcmFyY2h5UXVhbGlmaWVyIiwiZ2V0VGFibGVEZWxlZ2F0ZSIsInNEZWZhdWx0U29ydFByb3BlcnR5TmFtZSIsInByZXNlbnRhdGlvblZhcmlhbnQiLCJyZWN1cnNpdmVIaWVyYXJjaHlRdWFsaWZpZXIiLCJpbml0aWFsRXhwYW5zaW9uTGV2ZWwiLCJJbml0aWFsRXhwYW5zaW9uTGV2ZWwiLCJnZXRTb3J0Q29uZGl0aW9uc0Zyb21QcmVzZW50YXRpb25WYXJpYW50IiwiaXNTdWdnZXN0aW9uIiwiU29ydE9yZGVyIiwic29ydENvbmRpdGlvbnMiLCJzb3J0ZXJzIiwiZm9yRWFjaCIsImNvbmRpdGlvbiIsIl9jb25kaXRpb24kUHJvcGVydHkiLCJzb3J0ZXIiLCJwcm9wZXJ0eVBhdGgiLCJQcm9wZXJ0eSIsIiRQcm9wZXJ0eVBhdGgiLCJuYW1lIiwiRGVzY2VuZGluZyIsImRlc2NlbmRpbmciLCJhc2NlbmRpbmciLCJwdXNoIiwiSlNPTiIsInN0cmluZ2lmeSIsImdldFNvcnRDb25kaXRpb25zRm9yVmFsdWVMaXN0Iiwic29ydENvbmRpdGlvbnNGcm9tUHJlc2VudGF0aW9uVmFyaWFudCIsImdldFByb3BlcnR5UGF0aCIsIm9QYXJhbWV0ZXJzIiwiVW5ib3VuZEFjdGlvbiIsIkVudGl0eVR5cGVQYXRoIiwiQWN0aW9uIiwic3Vic3RyaW5nIiwibGFzdEluZGV4T2YiLCJnZXRWYWx1ZUxpc3RQcm9wZXJ0eSIsIm9Qcm9wZXJ0eUNvbnRleHQiLCJvVmFsdWVMaXN0TW9kZWwiLCJnZXRDb2x1bW5WaXNpYmlsaXR5Iiwib1ZhbHVlTGlzdCIsIm9Tb3VyY2UiLCJpc0Ryb3BEb3duTGlzdCIsInZhbHVlSGVscFdpdGhGaXhlZFZhbHVlcyIsImlzVmlzaWJsZSIsImNvbHVtbkluZm9zIiwiaXNEaWFsb2dUYWJsZSIsImNvbHVtbldpdGhIaWRkZW5Bbm5vdGF0aW9uIiwiY29sdW1uTmFtZSIsImhhc0hpZGRlbkFubm90YXRpb24iLCJnZXRDb2x1bW5WaXNpYmlsaXR5SW5mbyIsInNQcm9wZXJ0eUZ1bGxQYXRoIiwiYklzRHJvcERvd25MaXN0ZSIsIm9NZXRhTW9kZWwiLCJhQ29sdW1uSW5mb3MiLCJvQ29sdW1uSW5mb3MiLCJnZXRUYWJsZUl0ZW1zUGFyYW1ldGVycyIsInJlcXVlc3RHcm91cElkIiwiaXRlbVBhcmFtZXRlcnMiLCJzZWxlY3RTdHJpbmciLCJzZWxlY3RTdHJpbmdQYXJ0IiwiaXNTdXNwZW5kZWQiLCJkZWZhdWx0U29ydFByb3BlcnR5TmFtZSIsImpvaW4iLCJoYXNJbXBvcnRhbmNlIiwiZ2V0TWluU2NyZWVuV2lkdGgiLCJnZXRDb2x1bW5XaWR0aCIsIl9wcm9wZXJ0eSRhbm5vdGF0aW9ucyIsIl9wcm9wZXJ0eSRhbm5vdGF0aW9uczIiLCJfdGV4dEFubm90YXRpb24kYW5ub3QiLCJfdGV4dEFubm90YXRpb24kYW5ub3QyIiwiX3RleHRBbm5vdGF0aW9uJGFubm90MyIsIl9wcm9wZXJ0eSRhbm5vdGF0aW9uczMiLCJfcHJvcGVydHkkYW5ub3RhdGlvbnM0IiwiX3Byb3BlcnR5JGFubm90YXRpb25zNSIsImlzVmFsdWVMaXN0V2l0aEZpeGVkVmFsdWVzIiwiYXJndW1lbnRzIiwibGVuZ3RoIiwiaXNTbWFsbERldmljZSIsInRhcmdldE9iamVjdCIsInByb3BlcnR5IiwicmVsYXRlZFByb3BlcnR5IiwiYWRkaXRpb25hbFByb3BlcnR5IiwiZ2V0QXNzb2NpYXRlZFRleHRQcm9wZXJ0eSIsImdldEFzc29jaWF0ZWRDdXJyZW5jeVByb3BlcnR5IiwiZ2V0QXNzb2NpYXRlZFVuaXRQcm9wZXJ0eSIsImdldEFzc29jaWF0ZWRUaW1lem9uZVByb3BlcnR5IiwidGV4dEFubm90YXRpb24iLCJhbm5vdGF0aW9ucyIsIkNvbW1vbiIsIlRleHQiLCJ0ZXh0QXJyYW5nZW1lbnQiLCJVSSIsIlRleHRBcnJhbmdlbWVudCIsInRvU3RyaW5nIiwibGFiZWwiLCJMYWJlbCIsImRpc3BsYXlNb2RlIiwiZ2V0RGlzcGxheU1vZGUiLCJzaXplIiwiaW5zdGFuY2VzIiwicHJvcCIsInByb3BlcnR5VHlwZUNvbmZpZyIsImdldFR5cGVDb25maWciLCJQcm9wZXJ0eU9EYXRhQ29uc3RydWN0b3IiLCJPYmplY3RQYXRoIiwiZ2V0IiwidHlwZSIsImZvcm1hdE9wdGlvbnMiLCJjb25zdHJhaW50cyIsInNXaWR0aCIsIlV0aWwiLCJjYWxjQ29sdW1uV2lkdGgiLCJwYXJzZUZsb2F0IiwicmVwbGFjZSIsIkxvZyIsImVycm9yIiwiZ2V0T3V0UGFyYW1ldGVyUGF0aHMiLCJhUGFyYW1ldGVycyIsInNQYXRoIiwiZW5kc1dpdGgiLCJlbnRpdHlJc1NlYXJjaGFibGUiLCJwcm9wZXJ0eUFubm90YXRpb25zIiwiY29sbGVjdGlvbkFubm90YXRpb25zIiwiX3Byb3BlcnR5QW5ub3RhdGlvbnMkIiwiX2NvbGxlY3Rpb25Bbm5vdGF0aW9uIiwic2VhcmNoU3VwcG9ydGVkIiwiU2VhcmNoU3VwcG9ydGVkIiwic2VhcmNoYWJsZSIsIlNlYXJjaGFibGUiLCJfZ2V0Q29uZGl0aW9uUGF0aCIsImVudGl0eVNldCIsInBhcnRzIiwic3BsaXQiLCJjb25kaXRpb25QYXRoIiwicGFydGlhbFBhdGgiLCJwYXJ0Iiwic2hpZnQiLCIka2luZCIsIiRpc0NvbGxlY3Rpb24iLCJfZ2V0Q29sdW1uRGVmaW5pdGlvbkZyb21TZWxlY3Rpb25GaWVsZHMiLCJlbnRpdHlUeXBlQW5ub3RhdGlvbnMiLCJzZWxlY3Rpb25GaWVsZHMiLCJzZWxlY3Rpb25GaWVsZCIsIl9tZXRhTW9kZWwkZ2V0T2JqZWN0Iiwic2VsZWN0aW9uRmllbGRQYXRoIiwiY29sdW1uRGVmIiwiZmlsdGVyYWJsZSIsImlzUHJvcGVydHlGaWx0ZXJhYmxlIiwiX21lcmdlQ29sdW1uRGVmaW5pdGlvbnNGcm9tUHJvcGVydGllcyIsInZhbHVlTGlzdFByb3BlcnR5IiwiX3Byb3BlcnR5QW5ub3RhdGlvbnMkMiIsImNvbHVtblBhdGgiLCJjb2x1bW5Qcm9wZXJ0eVR5cGUiLCJfdmFsdWVMaXN0SW5mbyQkbW9kZWwiLCJfdmFsdWVMaXN0SW5mbyQkbW9kZWwyIiwidGV4dFByb3BlcnR5UGF0aCIsInRleHRQYXRoIiwiZmlsdGVySW5PdXRQYXJhbWV0ZXJzIiwidmhQYXJhbWV0ZXJzIiwidHlwZUZpbHRlciIsImZpbHRlciIsInBhcmFtZXRlciIsInBhcm1ldGVyVHlwZSIsImdldEluUGFyYW1ldGVycyIsImdldE91dFBhcmFtZXRlcnMiLCJnZXRJbkFuZE91dFBhcmFtZXRlcnMiLCJnZXRJbkFuZE91dFBhcmFtZXRlcnNMaXN0IiwiY3JlYXRlVkhVSU1vZGVsIiwidmFsdWVIZWxwIiwidmhVSU1vZGVsIiwiSlNPTk1vZGVsIiwic2V0TW9kZWwiLCJzZXRQcm9wZXJ0eSIsIl9nZXREaWFsb2dUaXRsZSIsInZhbHVlaGVscExhYmVsIiwiX3ZhbHVlSGVscCRnZXRDb250cm9sIiwicHJvcGVydHlMYWJlbCIsImdldFByb3BlcnR5IiwiZGF0YUZpZWxkTGFiZWwiLCJnZXRDb250cm9sIiwiZGVzdHJveVZIQ29udGVudCIsImdldERpYWxvZyIsImRlc3Ryb3lDb250ZW50IiwiZ2V0VHlwZWFoZWFkIiwicHV0RGVmYXVsdFF1YWxpZmllckZpcnN0IiwicXVhbGlmaWVycyIsImluZGV4RGVmYXVsdFZIIiwiaW5kZXhPZiIsInVuc2hpZnQiLCJzcGxpY2UiLCJfZ2V0Q29udGV4dFByZWZpeCIsImJpbmRpbmdDb250ZXh0IiwicHJvcGVydHlCaW5kaW5nUGFydHMiLCJnZXRQYXRoIiwiYmluZGlnQ29udGV4dFBhcnRzIiwiY29udGV4dFByZWZpeFBhcnRzIiwiaSIsIl9nZXRWaFBhcmFtZXRlciIsImNvbmRpdGlvbk1vZGVsIiwiY29udGV4dFByZWZpeCIsInZoTWV0YU1vZGVsIiwibG9jYWxEYXRhUHJvcGVydHlQYXRoIiwidmFsdWVQYXRoIiwiZ2V0QmluZGluZ0NvbnRleHQiLCJfdmFsdWVIZWxwJGdldFBhcmVudCIsIl92YWx1ZUhlbHAkZ2V0UGFyZW50MiIsIl92YWx1ZUhlbHAkZ2V0UGFyZW50MyIsIl92YWx1ZUhlbHAkZ2V0UGFyZW50NCIsImdldFBhcmVudCIsImlzQSIsIl9wYXJhbWV0ZXJJc0EiLCJmaXJzdE5hdmlnYXRpb25Qcm9wZXJ0eSIsIm9Cb3VuZEVudGl0eSIsImdldE1ldGFDb250ZXh0Iiwic1BhdGhPZlRhYmxlIiwiZ2V0Um93QmluZGluZyIsIl92YWx1ZUhlbHAkZ2V0UGFyZW50NSIsIl92YWx1ZUhlbHAkZ2V0UGFyZW50NiIsImZpbHRlckJhckFQSSIsImZpbHRlckJhck1ldGFQYXRoIiwibWV0YVBhdGgiLCJ2YWx1ZUhlbHBDb250ZXh0UGF0aCIsImdldE1ldGFQYXRoIiwiY29udGV4dE1ldGFQYXRoIiwiTWV0YVBhdGgiLCJjb252ZXJ0VHlwZXMiLCJuZXdQYXRoIiwiZ2V0TWV0YVBhdGhGb3JQYXRoIiwiZ2V0VGFyZ2V0IiwidGFyZ2V0RW50aXR5U2V0IiwiZ2V0Q2xvc2VzdEVudGl0eVNldCIsIl9jb250ZXh0TWV0YVBhdGgkZ2V0TSIsImdldE1ldGFQYXRoRm9yT2JqZWN0IiwiZ2V0UmVsYXRpdmVQYXRoIiwic291cmNlIiwiaGVscFBhdGgiLCJjb25zdGFudFZhbHVlIiwiQ29uc3RhbnQiLCJpbml0aWFsVmFsdWVJc1NpZ25pZmljYW50IiwiQm9vbGVhbiIsIkluaXRpYWxWYWx1ZUlzU2lnbmlmaWNhbnQiLCJwYXJhbWV0ZXJUeXBlcyIsIl9lbnJpY2hQYXRoIiwicHJvcGVydHlOYW1lIiwiZXh0ZXJuYWxJZFBhdGgiLCJrZXkiLCJfcHJvcGVydHlBbm5vdGF0aW9ucyQzIiwiZXh0ZXJuYWxJZFByb3BlcnR5IiwicG9wIiwiZmllbGRQcm9wZXJ0eVBhdGgiLCJkZXNjcmlwdGlvblBhdGgiLCJfZW5yaWNoS2V5cyIsInZoS2V5cyIsIl9wcm9jZXNzUGFyYW1ldGVycyIsImFubm90YXRpb25WYWx1ZUxpc3RUeXBlIiwidmFsdWVIZWxwUXVhbGlmaWVyIiwicGF5bG9hZCIsImlzRm9yTXVsdGlWYWx1ZUZpZWxkIiwidXNlTXVsdGlWYWx1ZUZpZWxkIiwiZW50aXR5U2V0UGF0aCIsImVudGl0eVR5cGUiLCIkS2V5IiwiX3BhcmFtZXRlciRMb2NhbERhdGFQIiwiTG9jYWxEYXRhUHJvcGVydHkiLCJpc1BvdGVudGlhbGx5U2Vuc2l0aXZlIiwidmhQYXJhbWV0ZXIiLCJfbWV0YU1vZGVsJGdldE9iamVjdDIiLCJ2YWx1ZWxpc3RJbmZvIiwia2V5UGF0aCIsIl9sb2dFcnJvciIsInN0YXR1cyIsIm1lc3NhZ2UiLCJFcnJvciIsIlN0cmluZyIsIm1zZyIsImdldFZhbHVlTGlzdEluZm8iLCJ2YWx1ZUxpc3RJbmZvcyIsInByb3BlcnR5UGF0aFBhcnRzIiwidmFsdWVMaXN0QnlRdWFsaWZpZXIiLCJyZXF1ZXN0VmFsdWVMaXN0SW5mbyIsInZhbHVlSGVscFF1YWxpZmllcnMiLCJPYmplY3QiLCJrZXlzIiwiJHF1YWxpZmllciIsImVyciIsIkFMTEZSQUdNRU5UUyIsImxvZ0ZyYWdtZW50IiwiX2xvZ1RlbXBsYXRlZEZyYWdtZW50cyIsImZyYWdtZW50TmFtZSIsImZyYWdtZW50RGVmaW5pdGlvbiIsImxvZ0luZm8iLCJmcmFnbWVudCIsImdldExldmVsIiwiTGV2ZWwiLCJERUJVRyIsInNldFRpbWVvdXQiLCJfVmFsdWVMaXN0SGVscGVyJGxvZ0YiLCJjYWxsIiwiX3RlbXBsYXRlRnJhZ21lbnQiLCJzb3VyY2VNb2RlbCIsIl9jb250YWluaW5nVmlldyRnZXRDbyIsImNvbnRhaW5pbmdWaWV3IiwiZ2V0VGFyZ2V0VmlldyIsImFwcENvbXBvbmVudCIsImdldEFwcENvbXBvbmVudCIsImxvY2FsVmFsdWVMaXN0SW5mbyIsInZhbHVlTGlzdE1vZGVsIiwidmFsdWVMaXN0U2VydmljZU1ldGFNb2RlbCIsInZpZXdEYXRhIiwiY29udmVydGVyVHlwZSIsIlhNTFByZXByb2Nlc3NvciIsInByb2Nlc3MiLCJYTUxUZW1wbGF0ZVByb2Nlc3NvciIsImxvYWRUZW1wbGF0ZSIsImJpbmRpbmdDb250ZXh0cyIsImNvbnRleHRQYXRoIiwibW9kZWxzIiwidGVtcGxhdGVDb21wb25lbnQiLCJnZXRDb250cm9sbGVyIiwiZ2V0T3duZXJDb21wb25lbnQiLCJydW5Bc093bmVyIiwiRnJhZ21lbnQiLCJsb2FkIiwiZGVmaW5pdGlvbiIsImNvbnRyb2xsZXIiLCJfZ2V0Q29udGVudElkIiwidmFsdWVIZWxwSWQiLCJpc1R5cGVhaGVhZCIsImNvbnRlbnRUeXBlIiwiX2FkZEluT3V0UGFyYW1ldGVyc1RvUGF5bG9hZCIsInZoUHJvcGVydGllcyIsIlNldCIsImFkZCIsIkFycmF5IiwiZnJvbSIsInRleHRBcnJhbmdlbWVudEFubm90YXRpb24iLCJfZ2V0V2lkdGhJblJlbSIsImlzVW5pdFZhbHVlSGVscCIsIndpZHRoIiwiJCIsImZsb2F0V2lkdGgiLCJSZW0iLCJmcm9tUHgiLCJpc05hTiIsIl9nZXRUYWJsZVdpZHRoIiwidGFibGUiLCJtaW5XaWR0aCIsImlzTXVsdGlTZWxlY3QiLCJnZXRDb2x1bW5zIiwidmlzaWJsZUNvbHVtbnMiLCJnZXRWaXNpYmxlIiwiaW5pdGlhbFN1bSIsInN1bVdpZHRoIiwic3VtIiwiZ2V0V2lkdGgiLCJNYXRoIiwibWF4IiwiX2dldEpTT05Nb2RlbEZvckRpYWxvZyIsImNvbnRlbnQiLCJpc0Ryb3BEb3duTGlzdGUiLCJpZCIsImdldElkIiwiZ3JvdXBJZCIsImJTdWdnZXN0aW9uIiwiX2dldEpTT05Nb2RlbEZvckNvbmRpdGlvbiIsImNhc2VTZW5zaXRpdmUiLCJfZ2V0SlNPTk1vZGVsRm9yVHlwZWFoZWFkIiwiY29udGVudElkIiwiX2NyZWF0ZVZhbHVlSGVscFR5cGVhaGVhZCIsInNldEtleVBhdGgiLCJzZXREZXNjcmlwdGlvblBhdGgiLCJoaXN0b3J5IiwiZW5hYmxlZCIsImNoZWNrSGlzdG9yeUVuYWJsZWQiLCJkYXRhIiwiaW5mbyIsImdldE1ldGFkYXRhIiwiZ2V0TmFtZSIsInNldFRhYmxlIiwiZmllbGQiLCJ0YWJsZU1vZGUiLCJnZXRNYXhDb25kaXRpb25zIiwic2V0TW9kZSIsImFkZEV2ZW50RGVsZWdhdGUiLCJvbkFmdGVyUmVuZGVyaW5nIiwiUmVzaXplSGFuZGxlciIsInJlZ2lzdGVyIiwiX3NldFRhYmxlV2lkdGgiLCJyZWR1Y2VXaWR0aEZvclVuaXRWYWx1ZUhlbHAiLCJ0YWJsZVdpZHRoIiwic2V0V2lkdGgiLCJfYXBwQ29tcG9uZW50JGdldE1hbmkiLCJfaGlzdG9yeVNldHRpbmdzJGZpZWwiLCJfaGlzdG9yeVNldHRpbmdzJGZpZWwyIiwiaGlzdG9yeVNldHRpbmdzIiwiZ2V0TWFuaWZlc3RFbnRyeSIsImZpZWxkcyIsImhpc3RvcnlFbmFibGVkIiwiX2NyZWF0ZVZhbHVlSGVscERpYWxvZyIsImNvbmRpdGlvbkNvbnRlbnQiLCJzb3VyY2VNb2RlbERpYWxvZyIsImZpcnN0VHlwZUFoZWFkQ29udGVudCIsImdldENvbnRlbnQiLCJnZXRDYXNlU2Vuc2l0aXZlIiwic291cmNlTW9kZWxDb25kaXRpb24iLCJhZGREZXBlbmRlbnQiLCJzZXRWYWx1ZUhlbHAiLCJjb25kaXRpb25UYWJsZSIsImdldFRhYmxlIiwidGFibGVQcm9taXNlIiwiZmlsdGVyQmFyUHJvbWlzZSIsImZpbHRlckJhciIsIlByb21pc2UiLCJhbGwiLCJzZXRGaWx0ZXJCYXIiLCJzZXRGaWx0ZXIiLCJpbml0aWFsaXplZCIsInNldENvcHlQcm92aWRlclZpc2liaWxpdHkiLCJtZGNUYWJsZSIsIl9zZXRTaG93UDEzbkJ1dHRvbiIsIl92YWx1ZUhlbHAkZ2V0Q29udHJvbDIiLCJfdGFibGUkZ2V0Q29weVByb3ZpZGUiLCJnZXRDb3B5UHJvdmlkZXIiLCJzZXRWaXNpYmxlIiwiX2dldENvbnRlbnRCeUlkIiwiY29udGVudExpc3QiLCJpdGVtIiwiX2NyZWF0ZVBvcG92ZXJDb250ZW50IiwidXNlQXNWYWx1ZUhlbHAiLCJNVGFibGUiLCJncm91cCIsIl9jcmVhdGVEaWFsb2dDb250ZW50IiwiZm9yY2VCaW5kIiwiTURDVGFibGUiLCJfc2hvd0NvbmRpdGlvbnNDb250ZW50IiwiY29udGFpbmVyIiwiY29uZGl0aW9uc0NvbnRlbnQiLCJDb25kaXRpb25zIiwiYWRkQ29udGVudCIsIl9hbGlnbk9yQ3JlYXRlQ29udGVudCIsInNob3dDb25kaXRpb25QYW5lbCIsIkZldGNoVmFsdWVzIiwiaW5zZXJ0Q29udGVudCIsIl9wcmVwYXJlVmFsdWVIZWxwVHlwZUFoZWFkIiwicXVhbGlmaWVyRm9yVHlwZWFoZWFkIiwic3ViVmFsdWVMaXN0SW5mbyIsImdldFVzZUFzVmFsdWVIZWxwIiwicmVtb3ZlQ29udGVudCIsIl9wcmVwYXJlVmFsdWVIZWxwRGlhbG9nIiwic2VsZWN0ZWRDb250ZW50SWQiLCJjb250ZW50TGlzdEl0ZW0iLCJoYXNPcGVyYXRvckVRIiwiZ2V0T3BlcmF0b3JzIiwic2VsZWN0ZWRJbmZvIiwic2VsZWN0ZWRDb250ZW50IiwidGl0bGUiLCJnZXRUcmFuc2xhdGVkVGV4dEZyb21FeHBCaW5kaW5nU3RyaW5nIiwic2V0VGl0bGUiLCJfYWRkRGVzY3JpcHRpb25JbmZvc1RvUGF5bG9hZCIsInZhbHVlSGVscERlc2NyaXB0aW9uUGF0aCIsIl9jb252ZXJ0ZWRNZXRhZGF0YSRyZSIsIl9jb252ZXJ0ZWRNZXRhZGF0YSRyZTIiLCJfY29udmVydGVkTWV0YWRhdGEkcmUzIiwiX2NvbnZlcnRlZE1ldGFkYXRhJHJlNCIsImNvbnZlcnRlZE1ldGFkYXRhIiwicHJvcGVydHlEZXNjcmlwdGlvblBhdGgiLCJyZXNvbHZlUGF0aCIsInRhcmdldCIsInZhbHVlSGVscEtleVBhdGgiLCJfY29udmVydGVkTWV0YWRhdGEkcmU1IiwiX2NvbnZlcnRlZE1ldGFkYXRhJHJlNiIsIm1heExlbmd0aCIsIl9jb252ZXJ0ZWRNZXRhZGF0YSRyZTciLCJfY29udmVydGVkTWV0YWRhdGEkcmU4IiwiX2NvbnZlcnRlZE1ldGFkYXRhJHJlOSIsIl9jb252ZXJ0ZWRNZXRhZGF0YSRyZTEwIiwiZXh0ZXJuYWxJZEZ1bGxQYXRoIiwic2hvd1ZhbHVlTGlzdCIsIl92YWx1ZUhlbHAkZ2V0Q29udHJvbDMiLCJfbWV0YU1vZGVsJGdldE9iamVjdDMiLCJtYXAiLCJjb2wiLCJfc2VsZWN0ZWRJbmZvJHZhbHVlTGkiLCJnZXRUZWNobmljYWxLZXlzIiwiaW5PdXRQYXJhbWV0ZXJzIl0sInNvdXJjZVJvb3QiOiIuIiwic291cmNlcyI6WyJWYWx1ZUxpc3RIZWxwZXIudHMiXSwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHR5cGUgeyBQYXRoQW5ub3RhdGlvbkV4cHJlc3Npb24sIFByb3BlcnR5IH0gZnJvbSBcIkBzYXAtdXgvdm9jYWJ1bGFyaWVzLXR5cGVzXCI7XG5pbXBvcnQgeyBDb21tb25Bbm5vdGF0aW9uVHlwZXMgfSBmcm9tIFwiQHNhcC11eC92b2NhYnVsYXJpZXMtdHlwZXMvdm9jYWJ1bGFyaWVzL0NvbW1vblwiO1xuaW1wb3J0IHR5cGUgeyBQcmVzZW50YXRpb25WYXJpYW50IH0gZnJvbSBcIkBzYXAtdXgvdm9jYWJ1bGFyaWVzLXR5cGVzL3ZvY2FidWxhcmllcy9VSVwiO1xuaW1wb3J0IExvZyBmcm9tIFwic2FwL2Jhc2UvTG9nXCI7XG5pbXBvcnQgT2JqZWN0UGF0aCBmcm9tIFwic2FwL2Jhc2UvdXRpbC9PYmplY3RQYXRoXCI7XG5pbXBvcnQgdHlwZSB7IENvbXBpbGVkQmluZGluZ1Rvb2xraXRFeHByZXNzaW9uIH0gZnJvbSBcInNhcC9mZS9iYXNlL0JpbmRpbmdUb29sa2l0XCI7XG5pbXBvcnQgQ29tbW9uVXRpbHMgZnJvbSBcInNhcC9mZS9jb3JlL0NvbW1vblV0aWxzXCI7XG5pbXBvcnQgdHlwZSB7IE1ldGFNb2RlbFByb3BlcnR5QW5ub3RhdGlvbnMgfSBmcm9tIFwic2FwL2ZlL2NvcmUvY29udmVydGVycy9NZXRhTW9kZWxDb252ZXJ0ZXJcIjtcbmltcG9ydCB7IGNvbnZlcnRUeXBlcyB9IGZyb20gXCJzYXAvZmUvY29yZS9jb252ZXJ0ZXJzL01ldGFNb2RlbENvbnZlcnRlclwiO1xuaW1wb3J0IHsgZ2V0U29ydFJlc3RyaWN0aW9uc0luZm8sIGlzUHJvcGVydHlGaWx0ZXJhYmxlIH0gZnJvbSBcInNhcC9mZS9jb3JlL2hlbHBlcnMvTWV0YU1vZGVsRnVuY3Rpb25cIjtcbmltcG9ydCBNZXRhUGF0aCBmcm9tIFwic2FwL2ZlL2NvcmUvaGVscGVycy9NZXRhUGF0aFwiO1xuaW1wb3J0IHR5cGUgeyBGaWVsZERhdGFUeXBlIH0gZnJvbSBcInNhcC9mZS9jb3JlL3NlcnZpY2VzL1ZhbHVlSGVscEhpc3RvcnlTZXJ2aWNlRmFjdG9yeVwiO1xuaW1wb3J0IHR5cGUgeyBEYXRhTW9kZWxPYmplY3RQYXRoIH0gZnJvbSBcInNhcC9mZS9jb3JlL3RlbXBsYXRpbmcvRGF0YU1vZGVsUGF0aEhlbHBlclwiO1xuaW1wb3J0IHtcblx0Z2V0QXNzb2NpYXRlZEN1cnJlbmN5UHJvcGVydHksXG5cdGdldEFzc29jaWF0ZWRUZXh0UHJvcGVydHksXG5cdGdldEFzc29jaWF0ZWRUaW1lem9uZVByb3BlcnR5LFxuXHRnZXRBc3NvY2lhdGVkVW5pdFByb3BlcnR5XG59IGZyb20gXCJzYXAvZmUvY29yZS90ZW1wbGF0aW5nL1Byb3BlcnR5SGVscGVyXCI7XG5pbXBvcnQgeyBnZXREaXNwbGF5TW9kZSwgZ2V0VHlwZUNvbmZpZyB9IGZyb20gXCJzYXAvZmUvY29yZS90ZW1wbGF0aW5nL1VJRm9ybWF0dGVyc1wiO1xuaW1wb3J0IHR5cGUgRmlsdGVyQmFyQVBJIGZyb20gXCJzYXAvZmUvbWFjcm9zL2ZpbHRlckJhci9GaWx0ZXJCYXJBUElcIjtcbmltcG9ydCB0eXBlIFRhYmxlIGZyb20gXCJzYXAvbS9UYWJsZVwiO1xuaW1wb3J0IFV0aWwgZnJvbSBcInNhcC9tL3RhYmxlL1V0aWxcIjtcbmltcG9ydCB0eXBlIENvbnRyb2wgZnJvbSBcInNhcC91aS9jb3JlL0NvbnRyb2xcIjtcbmltcG9ydCBGcmFnbWVudCBmcm9tIFwic2FwL3VpL2NvcmUvRnJhZ21lbnRcIjtcbmltcG9ydCBSZXNpemVIYW5kbGVyIGZyb20gXCJzYXAvdWkvY29yZS9SZXNpemVIYW5kbGVyXCI7XG5pbXBvcnQgWE1MVGVtcGxhdGVQcm9jZXNzb3IgZnJvbSBcInNhcC91aS9jb3JlL1hNTFRlbXBsYXRlUHJvY2Vzc29yXCI7XG5pbXBvcnQgWE1MUHJlcHJvY2Vzc29yIGZyb20gXCJzYXAvdWkvY29yZS91dGlsL1hNTFByZXByb2Nlc3NvclwiO1xuaW1wb3J0IFJlbSBmcm9tIFwic2FwL3VpL2RvbS91bml0cy9SZW1cIjtcbmltcG9ydCB0eXBlIEZpZWxkIGZyb20gXCJzYXAvdWkvbWRjL0ZpZWxkXCI7XG5pbXBvcnQgdHlwZSBGaWx0ZXJGaWVsZCBmcm9tIFwic2FwL3VpL21kYy9GaWx0ZXJGaWVsZFwiO1xuaW1wb3J0IHR5cGUgTXVsdGlWYWx1ZUZpZWxkIGZyb20gXCJzYXAvdWkvbWRjL011bHRpVmFsdWVGaWVsZFwiO1xuaW1wb3J0IHR5cGUgTWRjSW5uZXJUYWJsZSBmcm9tIFwic2FwL3VpL21kYy9UYWJsZVwiO1xuaW1wb3J0IHR5cGUgVmFsdWVIZWxwIGZyb20gXCJzYXAvdWkvbWRjL1ZhbHVlSGVscFwiO1xuaW1wb3J0IHR5cGUgRmllbGRCYXNlIGZyb20gXCJzYXAvdWkvbWRjL2ZpZWxkL0ZpZWxkQmFzZVwiO1xuaW1wb3J0IHR5cGUgTWRjRmlsdGVyQmFyIGZyb20gXCJzYXAvdWkvbWRjL2ZpbHRlcmJhci9GaWx0ZXJCYXJCYXNlXCI7XG5pbXBvcnQgdHlwZSBGaWx0ZXJCYXIgZnJvbSBcInNhcC91aS9tZGMvdmFsdWVoZWxwL0ZpbHRlckJhclwiO1xuaW1wb3J0IHR5cGUgQ29udGFpbmVyIGZyb20gXCJzYXAvdWkvbWRjL3ZhbHVlaGVscC9iYXNlL0NvbnRhaW5lclwiO1xuaW1wb3J0IHR5cGUgQ29udGVudCBmcm9tIFwic2FwL3VpL21kYy92YWx1ZWhlbHAvYmFzZS9Db250ZW50XCI7XG5pbXBvcnQgQ29uZGl0aW9ucyBmcm9tIFwic2FwL3VpL21kYy92YWx1ZWhlbHAvY29udGVudC9Db25kaXRpb25zXCI7XG5pbXBvcnQgTURDVGFibGUsIHsgdHlwZSAkTURDVGFibGVTZXR0aW5ncyB9IGZyb20gXCJzYXAvdWkvbWRjL3ZhbHVlaGVscC9jb250ZW50L01EQ1RhYmxlXCI7XG5pbXBvcnQgTVRhYmxlLCB7IHR5cGUgJE1UYWJsZVNldHRpbmdzIH0gZnJvbSBcInNhcC91aS9tZGMvdmFsdWVoZWxwL2NvbnRlbnQvTVRhYmxlXCI7XG5pbXBvcnQgdHlwZSBCYXNlQ29udGV4dCBmcm9tIFwic2FwL3VpL21vZGVsL0NvbnRleHRcIjtcbmltcG9ydCBKU09OTW9kZWwgZnJvbSBcInNhcC91aS9tb2RlbC9qc29uL0pTT05Nb2RlbFwiO1xuaW1wb3J0IHR5cGUgT0RhdGFUeXBlIGZyb20gXCJzYXAvdWkvbW9kZWwvb2RhdGEvdHlwZS9PRGF0YVR5cGVcIjtcbmltcG9ydCB0eXBlIENvbnRleHQgZnJvbSBcInNhcC91aS9tb2RlbC9vZGF0YS92NC9Db250ZXh0XCI7XG5pbXBvcnQgdHlwZSBPRGF0YU1ldGFNb2RlbCBmcm9tIFwic2FwL3VpL21vZGVsL29kYXRhL3Y0L09EYXRhTWV0YU1vZGVsXCI7XG5pbXBvcnQgdHlwZSBPRGF0YU1vZGVsIGZyb20gXCJzYXAvdWkvbW9kZWwvb2RhdGEvdjQvT0RhdGFNb2RlbFwiO1xuaW1wb3J0IHR5cGUgeyBNZXRhTW9kZWxFbnRpdHlTZXRBbm5vdGF0aW9uLCBNZXRhTW9kZWxUeXBlIH0gZnJvbSBcInR5cGVzL21ldGFtb2RlbF90eXBlc1wiO1xuXG5leHBvcnQgdHlwZSBBbm5vdGF0aW9uVmFsdWVMaXN0UGFyYW1ldGVyID0ge1xuXHQkVHlwZTogc3RyaW5nO1xuXHRWYWx1ZUxpc3RQcm9wZXJ0eTogc3RyaW5nO1xuXHRMb2NhbERhdGFQcm9wZXJ0eT86IHtcblx0XHQkUHJvcGVydHlQYXRoOiBzdHJpbmc7XG5cdH07XG5cdENvbnN0YW50Pzogc3RyaW5nO1xuXHRJbml0aWFsVmFsdWVJc1NpZ25pZmljYW50PzogYm9vbGVhbjtcblx0W1wiQGNvbS5zYXAudm9jYWJ1bGFyaWVzLlVJLnYxLkltcG9ydGFuY2VcIl0/OiB7XG5cdFx0JEVudW1NZW1iZXI6IHN0cmluZztcblx0fTtcbn07XG5cbnR5cGUgTG9nRnJhZ21lbnRNZXRob2QgPSAoaW5mbzogeyBwYXRoOiBzdHJpbmc7IGZyYWdtZW50TmFtZTogc3RyaW5nOyBmcmFnbWVudDogdW5rbm93biB9KSA9PiB2b2lkO1xuXG4vLyBjb20uc2FwLnZvY2FidWxhcmllcy5Db21tb24udjEuVmFsdWVMaXN0VHlwZVxuZXhwb3J0IHR5cGUgQW5ub3RhdGlvblZhbHVlTGlzdFR5cGUgPSB7XG5cdCRUeXBlOiBzdHJpbmc7IC8vIENvbW1vbkFubm90YXRpb25UeXBlcy5WYWx1ZUxpc3RUeXBlO1xuXHRMYWJlbD86IHN0cmluZztcblx0Q29sbGVjdGlvblBhdGg6IHN0cmluZztcblx0Q29sbGVjdGlvblJvb3Q/OiBzdHJpbmc7XG5cdERpc3RpbmN0VmFsdWVzU3VwcG9ydGVkPzogYm9vbGVhbjtcblx0U2VhcmNoU3VwcG9ydGVkPzogYm9vbGVhbjtcblx0RmV0Y2hWYWx1ZXM/OiBudW1iZXI7XG5cdFByZXNlbnRhdGlvblZhcmlhbnRRdWFsaWZpZXI/OiBzdHJpbmc7XG5cdFNlbGVjdGlvblZhcmlhbnRRdWFsaWZpZXI/OiBzdHJpbmc7XG5cdFBhcmFtZXRlcnM6IEFubm90YXRpb25WYWx1ZUxpc3RQYXJhbWV0ZXJbXTtcblx0JG1vZGVsOiBPRGF0YU1vZGVsO1xuXHQkcXVhbGlmaWVyPzogc3RyaW5nOyAvLyBkZWZpbmVkIGluIGNhc2Ugb2YgVmFsdWVMaXN0V2l0aEZpeGVkVmFsdWVzXG59O1xuXG5leHBvcnQgdHlwZSBBbm5vdGF0aW9uVmFsdWVMaXN0VHlwZUJ5UXVhbGlmaWVyID0gUmVjb3JkPHN0cmluZywgQW5ub3RhdGlvblZhbHVlTGlzdFR5cGU+O1xuXG5jb25zdCBjb2x1bW5Ob3RBbHJlYWR5RGVmaW5lZCA9IChjb2x1bW5EZWZzOiBDb2x1bW5EZWZbXSwgdmhLZXk6IHN0cmluZyk6IGJvb2xlYW4gPT4gIWNvbHVtbkRlZnMuc29tZSgoY29sdW1uKSA9PiBjb2x1bW4ucGF0aCA9PT0gdmhLZXkpO1xuXG5leHBvcnQgY29uc3QgQW5ub3RhdGlvbkxhYmVsID0gXCJAY29tLnNhcC52b2NhYnVsYXJpZXMuQ29tbW9uLnYxLkxhYmVsXCIsXG5cdEFubm90YXRpb25UZXh0ID0gXCJAY29tLnNhcC52b2NhYnVsYXJpZXMuQ29tbW9uLnYxLlRleHRcIixcblx0QW5ub3RhdGlvblRleHRVSVRleHRBcnJhbmdlbWVudCA9IFwiQGNvbS5zYXAudm9jYWJ1bGFyaWVzLkNvbW1vbi52MS5UZXh0QGNvbS5zYXAudm9jYWJ1bGFyaWVzLlVJLnYxLlRleHRBcnJhbmdlbWVudFwiLFxuXHRBbm5vdGF0aW9uVmFsdWVMaXN0UGFyYW1ldGVySW4gPSBcImNvbS5zYXAudm9jYWJ1bGFyaWVzLkNvbW1vbi52MS5WYWx1ZUxpc3RQYXJhbWV0ZXJJblwiLFxuXHRBbm5vdGF0aW9uVmFsdWVMaXN0UGFyYW1ldGVyQ29uc3RhbnQgPSBcImNvbS5zYXAudm9jYWJ1bGFyaWVzLkNvbW1vbi52MS5WYWx1ZUxpc3RQYXJhbWV0ZXJDb25zdGFudFwiLFxuXHRBbm5vdGF0aW9uVmFsdWVMaXN0UGFyYW1ldGVyT3V0ID0gXCJjb20uc2FwLnZvY2FidWxhcmllcy5Db21tb24udjEuVmFsdWVMaXN0UGFyYW1ldGVyT3V0XCIsXG5cdEFubm90YXRpb25WYWx1ZUxpc3RQYXJhbWV0ZXJJbk91dCA9IFwiY29tLnNhcC52b2NhYnVsYXJpZXMuQ29tbW9uLnYxLlZhbHVlTGlzdFBhcmFtZXRlckluT3V0XCIsXG5cdEFubm90YXRpb25WYWx1ZUxpc3RXaXRoRml4ZWRWYWx1ZXMgPSBcIkBjb20uc2FwLnZvY2FidWxhcmllcy5Db21tb24udjEuVmFsdWVMaXN0V2l0aEZpeGVkVmFsdWVzXCIsXG5cdEFubm90YXRpb25zUGVyc29uYWxEYXRhUG90ZW50aWFsbHlTZW5zaXRpdmUgPSBcIkBjb20uc2FwLnZvY2FidWxhcmllcy5QZXJzb25hbERhdGEudjEuSXNQb3RlbnRpYWxseVNlbnNpdGl2ZVwiLFxuXHRBbm5vdGF0aW9uc1ZhbHVlTGlzdFJlbGV2YW50UXVhbGlmaWVycyA9IFwiQGNvbS5zYXAudm9jYWJ1bGFyaWVzLkNvbW1vbi52MS5WYWx1ZUxpc3RSZWxldmFudFF1YWxpZmllcnNcIjtcblxudHlwZSBBbm5vdGF0aW9uc0ZvclByb3BlcnR5ID0ge1xuXHRcIkBjb20uc2FwLnZvY2FidWxhcmllcy5Db21tb24udjEuVmFsdWVMaXN0XCI/OiB7XG5cdFx0U2VhcmNoU3VwcG9ydGVkPzogYm9vbGVhbjtcblx0fTtcblx0XCJAY29tLnNhcC52b2NhYnVsYXJpZXMuQ29tbW9uLnYxLkxhYmVsXCI/OiBzdHJpbmc7IC8vIEFubm90YXRpb25MYWJlbFxuXHRcIkBjb20uc2FwLnZvY2FidWxhcmllcy5Db21tb24udjEuVGV4dFwiPzoge1xuXHRcdC8vIEFubm90YXRpb25UZXh0XG5cdFx0JFBhdGg6IHN0cmluZztcblx0fTtcblx0XCJAY29tLnNhcC52b2NhYnVsYXJpZXMuQ29tbW9uLnYxLlRleHRAY29tLnNhcC52b2NhYnVsYXJpZXMuVUkudjEuVGV4dEFycmFuZ2VtZW50XCI/OiB7XG5cdFx0Ly8gQW5ub3RhdGlvblRleHRVSVRleHRBcnJhbmdlbWVudFxuXHRcdCRFbnVtTWVtYmVyPzogc3RyaW5nO1xuXHR9O1xuXHRcIkBjb20uc2FwLnZvY2FidWxhcmllcy5VSS52MS5IaWRkZW5GaWx0ZXJcIj86IGJvb2xlYW47XG5cdFwiQGNvbS5zYXAudm9jYWJ1bGFyaWVzLkNvbW1vbi52MS5WYWx1ZUxpc3RXaXRoRml4ZWRWYWx1ZXNcIj86IGJvb2xlYW47IC8vIEFubm90YXRpb25WYWx1ZUxpc3RXaXRoRml4ZWRWYWx1ZXNcblx0XCJAY29tLnNhcC52b2NhYnVsYXJpZXMuQ29tbW9uLnYxLlZhbHVlTGlzdFJlbGV2YW50UXVhbGlmaWVyc1wiPzogc3RyaW5nW107XG5cdFwiQGNvbS5zYXAudm9jYWJ1bGFyaWVzLlVJLnYxLkhpZGRlblwiPzogc3RyaW5nO1xuXHRcIkBjb20uc2FwLnZvY2FidWxhcmllcy5QZXJzb25hbERhdGEudjEuSXNQb3RlbnRpYWxseVNlbnNpdGl2ZVwiPzogYm9vbGVhbjtcbn07XG5cbnR5cGUgQW5ub3RhdGlvblNlbGVjdGlvbkZpZWxkID0ge1xuXHQkUHJvcGVydHlQYXRoOiBzdHJpbmc7XG59O1xuXG50eXBlIEFubm90YXRpb25zRm9yRW50aXR5VHlwZSA9IHtcblx0XCJAY29tLnNhcC52b2NhYnVsYXJpZXMuVUkudjEuU2VsZWN0aW9uRmllbGRzXCI/OiBBbm5vdGF0aW9uU2VsZWN0aW9uRmllbGRbXTtcbn07XG5cbnR5cGUgQ29sdW1uUHJvcGVydHkgPSB7XG5cdCRUeXBlOiBzdHJpbmc7XG5cdCRraW5kOiBzdHJpbmc7XG5cdCRpc0NvbGxlY3Rpb246IGJvb2xlYW47XG59O1xuXG5leHBvcnQgdHlwZSBJbk91dFBhcmFtZXRlciA9IHtcblx0cGFybWV0ZXJUeXBlOiBzdHJpbmc7XG5cdHNvdXJjZTogc3RyaW5nO1xuXHRoZWxwUGF0aDogc3RyaW5nO1xuXHRpbml0aWFsVmFsdWVJc1NpZ25pZmljYW50OiBib29sZWFuO1xuXHRjb25zdGFudFZhbHVlPzogc3RyaW5nIHwgYm9vbGVhbjtcbn07XG5cbnR5cGUgVmFsdWVIZWxwUGF5bG9hZEluZm8gPSB7XG5cdHZoS2V5cz86IHN0cmluZ1tdO1xuXHR2aFBhcmFtZXRlcnM/OiBJbk91dFBhcmFtZXRlcltdO1xuXHR2aFByb3BlcnRpZXM/OiBzdHJpbmdbXTtcbn07XG5cbnR5cGUgVmFsdWVIZWxwUXVhbGlmaWVyTWFwID0gUmVjb3JkPHN0cmluZywgVmFsdWVIZWxwUGF5bG9hZEluZm8+O1xuXG50eXBlIEhpc3RvcnlQYXlsb2FkID0ge1xuXHRlbmFibGVkPzogYm9vbGVhbjtcblx0ZGF0YT86IEZpZWxkRGF0YVR5cGVbXTtcblx0aGFzUmVsZXZhbnREYXRhPzogYm9vbGVhbjtcbn07XG5cbmV4cG9ydCB0eXBlIFZhbHVlSGVscFBheWxvYWQgPSB7XG5cdHByb3BlcnR5UGF0aDogc3RyaW5nO1xuXHRxdWFsaWZpZXJzOiBWYWx1ZUhlbHBRdWFsaWZpZXJNYXA7XG5cdHZhbHVlSGVscFF1YWxpZmllcjogc3RyaW5nO1xuXHRjb25kaXRpb25Nb2RlbD86IHN0cmluZztcblx0aXNBY3Rpb25QYXJhbWV0ZXJEaWFsb2c/OiBib29sZWFuO1xuXHRpc1VuaXRWYWx1ZUhlbHA/OiBib29sZWFuO1xuXHRyZXF1ZXN0R3JvdXBJZD86IHN0cmluZztcblx0dXNlTXVsdGlWYWx1ZUZpZWxkPzogYm9vbGVhbjtcblx0aXNWYWx1ZUxpc3RXaXRoRml4ZWRWYWx1ZXM/OiBib29sZWFuO1xuXHR2YWx1ZUhlbHBEZXNjcmlwdGlvblBhdGg/OiBzdHJpbmc7XG5cdHByb3BlcnR5RGVzY3JpcHRpb25QYXRoPzogc3RyaW5nO1xuXHRtYXhMZW5ndGg/OiBudW1iZXI7XG5cdHZhbHVlSGVscEtleVBhdGg/OiBzdHJpbmc7XG5cdGlzRGVmaW5lQ29uZGl0aW9uVmFsdWVIZWxwPzogYm9vbGVhbjtcblx0aXNQb3RlbnRpYWxseVNlbnNpdGl2ZT86IGJvb2xlYW47XG5cdGhpc3Rvcnk/OiBIaXN0b3J5UGF5bG9hZDtcblx0ZXh0ZXJuYWxJZFBhdGg/OiBzdHJpbmc7XG59O1xuXG50eXBlIENvbHVtbkRlZiA9IHtcblx0cGF0aDogc3RyaW5nO1xuXHR0ZXh0UGF0aD86IHN0cmluZztcblx0bGFiZWw6IHN0cmluZztcblx0c29ydGFibGU6IGJvb2xlYW47XG5cdGZpbHRlcmFibGU6IGJvb2xlYW4gfCBDb21waWxlZEJpbmRpbmdUb29sa2l0RXhwcmVzc2lvbjtcblx0JFR5cGU6IHN0cmluZztcbn07XG5cbmV4cG9ydCB0eXBlIFZhbHVlTGlzdEluZm8gPSB7XG5cdGtleVBhdGg6IHN0cmluZztcblx0ZGVzY3JpcHRpb25QYXRoOiBzdHJpbmc7XG5cdGZpZWxkUHJvcGVydHlQYXRoOiBzdHJpbmc7XG5cdHZoS2V5czogc3RyaW5nW107XG5cdHZoUGFyYW1ldGVyczogSW5PdXRQYXJhbWV0ZXJbXTtcblx0dmFsdWVMaXN0SW5mbzogQW5ub3RhdGlvblZhbHVlTGlzdFR5cGU7XG5cdGNvbHVtbkRlZnM6IENvbHVtbkRlZltdO1xuXHR2YWx1ZUhlbHBRdWFsaWZpZXI6IHN0cmluZztcbn07XG5cbnR5cGUgRGlzcGxheUZvcm1hdCA9IFwiRGVzY3JpcHRpb25cIiB8IFwiVmFsdWVEZXNjcmlwdGlvblwiIHwgXCJWYWx1ZVwiIHwgXCJEZXNjcmlwdGlvblZhbHVlXCI7XG5cbnR5cGUgUGF0aCA9IHtcblx0ZmllbGRQcm9wZXJ0eVBhdGg6IHN0cmluZztcblx0ZGVzY3JpcHRpb25QYXRoOiBzdHJpbmc7XG5cdGtleTogc3RyaW5nO1xufTtcblxuZXhwb3J0IHR5cGUgU29ydGVyVHlwZSA9IHtcblx0YXNjZW5kaW5nPzogYm9vbGVhbjtcblx0ZGVzY2VuZGluZz86IGJvb2xlYW47XG5cdHBhdGg/OiBzdHJpbmc7XG5cdG5hbWU/OiBzdHJpbmc7XG59O1xuXG5mdW5jdGlvbiBfZ2V0RGVmYXVsdFNvcnRQcm9wZXJ0eU5hbWUodmFsdWVMaXN0SW5mbzogQW5ub3RhdGlvblZhbHVlTGlzdFR5cGUpOiBzdHJpbmcgfCB1bmRlZmluZWQge1xuXHRsZXQgc29ydEZpZWxkTmFtZTogc3RyaW5nIHwgdW5kZWZpbmVkO1xuXHRjb25zdCBtZXRhTW9kZWwgPSB2YWx1ZUxpc3RJbmZvLiRtb2RlbC5nZXRNZXRhTW9kZWwoKTtcblx0Y29uc3QgZW50aXR5U2V0QW5ub3RhdGlvbnMgPSBtZXRhTW9kZWwuZ2V0T2JqZWN0KGAvJHt2YWx1ZUxpc3RJbmZvLkNvbGxlY3Rpb25QYXRofUBgKSB8fCB7fTtcblx0Y29uc3Qgc29ydFJlc3RyaWN0aW9uc0luZm8gPSBnZXRTb3J0UmVzdHJpY3Rpb25zSW5mbyhlbnRpdHlTZXRBbm5vdGF0aW9ucyk7XG5cdGNvbnN0IGZvdW5kRWxlbWVudCA9IHZhbHVlTGlzdEluZm8uUGFyYW1ldGVycy5maW5kKGZ1bmN0aW9uIChlbGVtZW50KSB7XG5cdFx0cmV0dXJuIChcblx0XHRcdChlbGVtZW50LiRUeXBlID09PSBDb21tb25Bbm5vdGF0aW9uVHlwZXMuVmFsdWVMaXN0UGFyYW1ldGVySW5PdXQgfHxcblx0XHRcdFx0ZWxlbWVudC4kVHlwZSA9PT0gQ29tbW9uQW5ub3RhdGlvblR5cGVzLlZhbHVlTGlzdFBhcmFtZXRlck91dCB8fFxuXHRcdFx0XHRlbGVtZW50LiRUeXBlID09PSBDb21tb25Bbm5vdGF0aW9uVHlwZXMuVmFsdWVMaXN0UGFyYW1ldGVyRGlzcGxheU9ubHkpICYmXG5cdFx0XHQhKFxuXHRcdFx0XHRtZXRhTW9kZWwuZ2V0T2JqZWN0KGAvJHt2YWx1ZUxpc3RJbmZvLkNvbGxlY3Rpb25QYXRofS8ke2VsZW1lbnQuVmFsdWVMaXN0UHJvcGVydHl9QGNvbS5zYXAudm9jYWJ1bGFyaWVzLlVJLnYxLkhpZGRlbmApID09PVxuXHRcdFx0XHR0cnVlXG5cdFx0XHQpXG5cdFx0KTtcblx0fSk7XG5cdGlmIChmb3VuZEVsZW1lbnQpIHtcblx0XHRpZiAoXG5cdFx0XHRtZXRhTW9kZWwuZ2V0T2JqZWN0KFxuXHRcdFx0XHRgLyR7dmFsdWVMaXN0SW5mby5Db2xsZWN0aW9uUGF0aH0vJHtmb3VuZEVsZW1lbnQuVmFsdWVMaXN0UHJvcGVydHl9QGNvbS5zYXAudm9jYWJ1bGFyaWVzLkNvbW1vbi52MS5UZXh0QGNvbS5zYXAudm9jYWJ1bGFyaWVzLlVJLnYxLlRleHRBcnJhbmdlbWVudC8kRW51bU1lbWJlcmBcblx0XHRcdCkgPT09IFwiY29tLnNhcC52b2NhYnVsYXJpZXMuVUkudjEuVGV4dEFycmFuZ2VtZW50VHlwZS9UZXh0T25seVwiXG5cdFx0KSB7XG5cdFx0XHRzb3J0RmllbGROYW1lID0gbWV0YU1vZGVsLmdldE9iamVjdChcblx0XHRcdFx0YC8ke3ZhbHVlTGlzdEluZm8uQ29sbGVjdGlvblBhdGh9LyR7Zm91bmRFbGVtZW50LlZhbHVlTGlzdFByb3BlcnR5fUBjb20uc2FwLnZvY2FidWxhcmllcy5Db21tb24udjEuVGV4dC8kUGF0aGBcblx0XHRcdCk7XG5cdFx0fSBlbHNlIHtcblx0XHRcdHNvcnRGaWVsZE5hbWUgPSBmb3VuZEVsZW1lbnQuVmFsdWVMaXN0UHJvcGVydHk7XG5cdFx0fVxuXHR9XG5cdGlmIChzb3J0RmllbGROYW1lICYmICghc29ydFJlc3RyaWN0aW9uc0luZm8ucHJvcGVydHlJbmZvW3NvcnRGaWVsZE5hbWVdIHx8IHNvcnRSZXN0cmljdGlvbnNJbmZvLnByb3BlcnR5SW5mb1tzb3J0RmllbGROYW1lXS5zb3J0YWJsZSkpIHtcblx0XHRyZXR1cm4gc29ydEZpZWxkTmFtZTtcblx0fSBlbHNlIHtcblx0XHRyZXR1cm4gdW5kZWZpbmVkO1xuXHR9XG59XG5cbmZ1bmN0aW9uIF9yZWR1bmRhbnREZXNjcmlwdGlvbihcblx0b1ZMUGFyYW1ldGVyOiB7XG5cdFx0VmFsdWVMaXN0UHJvcGVydHk6IHN0cmluZztcblx0fSxcblx0YUNvbHVtbkluZm86IENvbHVtbkluZm9bXVxuKTogYm9vbGVhbiB8IHVuZGVmaW5lZCB7XG5cdGNvbnN0IG9Db2x1bW5JbmZvID0gYUNvbHVtbkluZm8uZmluZChmdW5jdGlvbiAoY29sdW1uSW5mbzogQ29sdW1uSW5mbykge1xuXHRcdHJldHVybiBvVkxQYXJhbWV0ZXIuVmFsdWVMaXN0UHJvcGVydHkgPT09IGNvbHVtbkluZm8udGV4dENvbHVtbk5hbWU7XG5cdH0pO1xuXHRpZiAoXG5cdFx0b1ZMUGFyYW1ldGVyLlZhbHVlTGlzdFByb3BlcnR5ID09PSBvQ29sdW1uSW5mbz8udGV4dENvbHVtbk5hbWUgJiZcblx0XHQhb0NvbHVtbkluZm8ua2V5Q29sdW1uSGlkZGVuICYmXG5cdFx0b0NvbHVtbkluZm8ua2V5Q29sdW1uRGlzcGxheUZvcm1hdCAhPT0gXCJWYWx1ZVwiXG5cdCkge1xuXHRcdHJldHVybiB0cnVlO1xuXHR9XG5cdHJldHVybiB1bmRlZmluZWQ7XG59XG5cbmZ1bmN0aW9uIF9oYXNJbXBvcnRhbmNlSGlnaChvVmFsdWVMaXN0Q29udGV4dDogeyBQYXJhbWV0ZXJzOiBBbm5vdGF0aW9uVmFsdWVMaXN0UGFyYW1ldGVyW10gfSk6IGJvb2xlYW4ge1xuXHRyZXR1cm4gb1ZhbHVlTGlzdENvbnRleHQuUGFyYW1ldGVycy5zb21lKGZ1bmN0aW9uIChvUGFyYW1ldGVyOiBBbm5vdGF0aW9uVmFsdWVMaXN0UGFyYW1ldGVyKSB7XG5cdFx0cmV0dXJuIChcblx0XHRcdG9QYXJhbWV0ZXJbXCJAY29tLnNhcC52b2NhYnVsYXJpZXMuVUkudjEuSW1wb3J0YW5jZVwiXSAmJlxuXHRcdFx0b1BhcmFtZXRlcltcIkBjb20uc2FwLnZvY2FidWxhcmllcy5VSS52MS5JbXBvcnRhbmNlXCJdLiRFbnVtTWVtYmVyID09PSBcImNvbS5zYXAudm9jYWJ1bGFyaWVzLlVJLnYxLkltcG9ydGFuY2VUeXBlL0hpZ2hcIlxuXHRcdCk7XG5cdH0pO1xufVxuXG5mdW5jdGlvbiBfYnVpbGQkU2VsZWN0U3RyaW5nKGNvbnRyb2w6IENvbnRyb2wpOiBzdHJpbmcgfCB1bmRlZmluZWQge1xuXHRjb25zdCBvVmlld0RhdGEgPSBjb250cm9sLmdldE1vZGVsKFwidmlld0RhdGFcIikgYXMgSlNPTk1vZGVsO1xuXHRpZiAob1ZpZXdEYXRhKSB7XG5cdFx0Y29uc3Qgb0RhdGEgPSBvVmlld0RhdGEuZ2V0RGF0YSgpO1xuXHRcdGlmIChvRGF0YSkge1xuXHRcdFx0Y29uc3QgYUNvbHVtbnMgPSBvRGF0YS5jb2x1bW5zO1xuXHRcdFx0aWYgKGFDb2x1bW5zKSB7XG5cdFx0XHRcdHJldHVybiBhQ29sdW1ucy5yZWR1Y2UoZnVuY3Rpb24gKFxuXHRcdFx0XHRcdHNRdWVyeTogc3RyaW5nLFxuXHRcdFx0XHRcdG9Qcm9wZXJ0eToge1xuXHRcdFx0XHRcdFx0cGF0aD86IHN0cmluZztcblx0XHRcdFx0XHR9XG5cdFx0XHRcdCkge1xuXHRcdFx0XHRcdC8vIE5hdmlnYXRpb24gcHJvcGVydGllcyAocmVwcmVzZW50ZWQgYnkgWC9ZKSBzaG91bGQgbm90IGJlIGFkZGVkIHRvICRzZWxlY3QuXG5cdFx0XHRcdFx0Ly8gVE9ETyA6IFRoZXkgc2hvdWxkIGJlIGFkZGVkIGFzICRleHBhbmQ9WCgkc2VsZWN0PVkpIGluc3RlYWRcblx0XHRcdFx0XHRpZiAob1Byb3BlcnR5LnBhdGggJiYgIW9Qcm9wZXJ0eS5wYXRoLmluY2x1ZGVzKFwiL1wiKSkge1xuXHRcdFx0XHRcdFx0c1F1ZXJ5ID0gc1F1ZXJ5ID8gYCR7c1F1ZXJ5fSwke29Qcm9wZXJ0eS5wYXRofWAgOiBvUHJvcGVydHkucGF0aDtcblx0XHRcdFx0XHR9XG5cdFx0XHRcdFx0cmV0dXJuIHNRdWVyeTtcblx0XHRcdFx0fSwgdW5kZWZpbmVkKTtcblx0XHRcdH1cblx0XHR9XG5cdH1cblx0cmV0dXJuIHVuZGVmaW5lZDtcbn1cblxuZnVuY3Rpb24gX2dldFZhbHVlSGVscENvbHVtbkRpc3BsYXlGb3JtYXQob1Byb3BlcnR5QW5ub3RhdGlvbnM6IE1ldGFNb2RlbFByb3BlcnR5QW5ub3RhdGlvbnMsIGlzVmFsdWVIZWxwV2l0aEZpeGVkVmFsdWVzOiBib29sZWFuKTogc3RyaW5nIHtcblx0Y29uc3Qgc0Rpc3BsYXlNb2RlID0gQ29tbW9uVXRpbHMuY29tcHV0ZURpc3BsYXlNb2RlKG9Qcm9wZXJ0eUFubm90YXRpb25zKTtcblx0Y29uc3Qgb1RleHRBbm5vdGF0aW9uID0gb1Byb3BlcnR5QW5ub3RhdGlvbnMgJiYgb1Byb3BlcnR5QW5ub3RhdGlvbnNbXCJAY29tLnNhcC52b2NhYnVsYXJpZXMuQ29tbW9uLnYxLlRleHRcIl07XG5cdGNvbnN0IG9UZXh0QXJyYW5nZW1lbnRBbm5vdGF0aW9uID1cblx0XHRvVGV4dEFubm90YXRpb24gJiYgb1Byb3BlcnR5QW5ub3RhdGlvbnNbXCJAY29tLnNhcC52b2NhYnVsYXJpZXMuQ29tbW9uLnYxLlRleHRAY29tLnNhcC52b2NhYnVsYXJpZXMuVUkudjEuVGV4dEFycmFuZ2VtZW50XCJdO1xuXHRpZiAoaXNWYWx1ZUhlbHBXaXRoRml4ZWRWYWx1ZXMpIHtcblx0XHRyZXR1cm4gb1RleHRBbm5vdGF0aW9uICYmIHR5cGVvZiBvVGV4dEFubm90YXRpb24gIT09IFwic3RyaW5nXCIgJiYgXCIkUGF0aFwiIGluIG9UZXh0QW5ub3RhdGlvbiAmJiBvVGV4dEFubm90YXRpb24uJFBhdGhcblx0XHRcdD8gc0Rpc3BsYXlNb2RlXG5cdFx0XHQ6IFwiVmFsdWVcIjtcblx0fSBlbHNlIHtcblx0XHQvLyBPbmx5IGV4cGxpY2l0IGRlZmluZWQgVGV4dEFycmFuZ2VtZW50cyBpbiBhIFZhbHVlIEhlbHAgd2l0aCBEaWFsb2cgYXJlIGNvbnNpZGVyZWRcblx0XHRyZXR1cm4gb1RleHRBcnJhbmdlbWVudEFubm90YXRpb24gPyBzRGlzcGxheU1vZGUgOiBcIlZhbHVlXCI7XG5cdH1cbn1cblxuLyoqXG4gKiBSZXRyaWV2ZXMgdGhlIHZhbHVlTGlzdCdzIFByZXNlbnRhdGlvblZhcmlhbnQuXG4gKiBAcGFyYW0gdmFsdWVMaXN0IFRoZSB2YWx1ZUxpc3QgYW5ub3RhdGlvblxuICogQHJldHVybnMgVGhlIFByZXNlbnRhdGlvblZhcmlhbnQgKGlmIGFueSkgb2YgdGhlIHZhbHVlTGlzdFxuICovXG5mdW5jdGlvbiBnZXRQcmVzZW50YXRpb25WYXJpYW50KHZhbHVlTGlzdDogQW5ub3RhdGlvblZhbHVlTGlzdFR5cGUpOiBNZXRhTW9kZWxUeXBlPFByZXNlbnRhdGlvblZhcmlhbnQ+IHwgdW5kZWZpbmVkIHtcblx0Y29uc3QgcHJlc2VudGF0aW9uVmFyaWFudFF1YWxpZmllciA9IHZhbHVlTGlzdC5QcmVzZW50YXRpb25WYXJpYW50UXVhbGlmaWVyID8gYCMke3ZhbHVlTGlzdC5QcmVzZW50YXRpb25WYXJpYW50UXVhbGlmaWVyfWAgOiBcIlwiO1xuXHRjb25zdCBwcmVzZW50YXRpb25WYXJpYW50UGF0aCA9IGAvJHt2YWx1ZUxpc3QuQ29sbGVjdGlvblBhdGh9L0Bjb20uc2FwLnZvY2FidWxhcmllcy5VSS52MS5QcmVzZW50YXRpb25WYXJpYW50JHtwcmVzZW50YXRpb25WYXJpYW50UXVhbGlmaWVyfWA7XG5cdHJldHVybiB2YWx1ZUxpc3QuJG1vZGVsLmdldE1ldGFNb2RlbCgpLmdldE9iamVjdChwcmVzZW50YXRpb25WYXJpYW50UGF0aCkgYXMgTWV0YU1vZGVsVHlwZTxQcmVzZW50YXRpb25WYXJpYW50PiB8IHVuZGVmaW5lZDtcbn1cblxudHlwZSBDb2x1bW5JbmZvID0ge1xuXHRrZXlDb2x1bW5IaWRkZW4/OiBib29sZWFuO1xuXHRrZXlDb2x1bW5EaXNwbGF5Rm9ybWF0Pzogc3RyaW5nO1xuXHR0ZXh0Q29sdW1uTmFtZT86IHN0cmluZztcblx0Y29sdW1uTmFtZTogc3RyaW5nO1xuXHRoYXNIaWRkZW5Bbm5vdGF0aW9uPzogYm9vbGVhbjtcbn07XG5jb25zdCBWYWx1ZUxpc3RIZWxwZXIgPSB7XG5cdGdldFZhbHVlTGlzdENvbGxlY3Rpb25FbnRpdHlTZXQ6IGZ1bmN0aW9uIChvVmFsdWVMaXN0Q29udGV4dDogQ29udGV4dCk6IEJhc2VDb250ZXh0IHwgdW5kZWZpbmVkIHtcblx0XHRjb25zdCBtVmFsdWVMaXN0ID0gb1ZhbHVlTGlzdENvbnRleHQuZ2V0T2JqZWN0KCk7XG5cdFx0cmV0dXJuIG1WYWx1ZUxpc3QuJG1vZGVsLmdldE1ldGFNb2RlbCgpLmNyZWF0ZUJpbmRpbmdDb250ZXh0KGAvJHttVmFsdWVMaXN0LkNvbGxlY3Rpb25QYXRofWApO1xuXHR9LFxuXG5cdC8qKlxuXHQgKiBDaGVja3MgaWYgdGhlIFZhbHVlTGlzdCBpcyBhbm5vdGF0ZWQgd2l0aCBhIFByZXNlbnRhdGlvblZhcmlhbnQuXG5cdCAqIElmIHRoZSBQcmVzZW50YXRpb25WYXJpYW50IGlzIGFubm90YXRlZCB3aXRoIGEgUmVjdXJzaXZlSGllcmFyY2h5UXVhbGlmaWVyLCB0aGUgVmFsdWVMaXN0J3MgdGFibGUgaGFzIHRvIGJlIGEgVHJlZVRhYmxlLlxuXHQgKiBAcGFyYW0gdmFsdWVMaXN0IFRoZSB2YWx1ZUxpc3QgYW5ub3RhdGlvblxuXHQgKiBAcmV0dXJucyBUcnVlIGlmIHRoZSB0YWJsZSBoYXMgdG8gYmUgYSBUcmVlVGFibGUsIGZhbHNlIG90aGVyd2lzZVxuXHQgKi9cblx0aXNUcmVlVGFibGVUeXBlKHZhbHVlTGlzdDogQW5ub3RhdGlvblZhbHVlTGlzdFR5cGUpOiBib29sZWFuIHtcblx0XHRyZXR1cm4gZ2V0UHJlc2VudGF0aW9uVmFyaWFudCh2YWx1ZUxpc3QpPy5SZWN1cnNpdmVIaWVyYXJjaHlRdWFsaWZpZXIgPyB0cnVlIDogZmFsc2U7XG5cdH0sXG5cblx0LyoqXG5cdCAqIEdldHMgdGhlIGRlbGVnYXRlIGZvciB0aGUgVmFsdWVMaXN0J3MgdGFibGUuXG5cdCAqIEBwYXJhbSB2YWx1ZUxpc3QgVGhlIHZhbHVlTGlzdCBhbm5vdGF0aW9uXG5cdCAqIEByZXR1cm5zIFRoZSBjYWxjdWxhdGVkIGRlbGVnYXRlIGZvciB0aGUgVmFsdWVMaXN0J3MgdGFibGVcblx0ICovXG5cdGdldFRhYmxlRGVsZWdhdGU6IGZ1bmN0aW9uICh2YWx1ZUxpc3Q6IEFubm90YXRpb25WYWx1ZUxpc3RUeXBlKTogc3RyaW5nIHtcblx0XHRsZXQgc0RlZmF1bHRTb3J0UHJvcGVydHlOYW1lID0gX2dldERlZmF1bHRTb3J0UHJvcGVydHlOYW1lKHZhbHVlTGlzdCk7XG5cdFx0aWYgKHNEZWZhdWx0U29ydFByb3BlcnR5TmFtZSkge1xuXHRcdFx0c0RlZmF1bHRTb3J0UHJvcGVydHlOYW1lID0gYCcke3NEZWZhdWx0U29ydFByb3BlcnR5TmFtZX0nYDtcblx0XHR9XG5cdFx0Y29uc3QgcHJlc2VudGF0aW9uVmFyaWFudCA9IGdldFByZXNlbnRhdGlvblZhcmlhbnQodmFsdWVMaXN0KTtcblx0XHRjb25zdCByZWN1cnNpdmVIaWVyYXJjaHlRdWFsaWZpZXIgPSBwcmVzZW50YXRpb25WYXJpYW50Py5SZWN1cnNpdmVIaWVyYXJjaHlRdWFsaWZpZXI7XG5cdFx0aWYgKHJlY3Vyc2l2ZUhpZXJhcmNoeVF1YWxpZmllcikge1xuXHRcdFx0Y29uc3QgaW5pdGlhbEV4cGFuc2lvbkxldmVsID0gcHJlc2VudGF0aW9uVmFyaWFudC5Jbml0aWFsRXhwYW5zaW9uTGV2ZWw7XG5cdFx0XHRyZXR1cm4gKFxuXHRcdFx0XHRcIntuYW1lOiAnc2FwL2ZlL21hY3Jvcy9pbnRlcm5hbC92YWx1ZWhlbHAvVGFibGVEZWxlZ2F0ZScsIHBheWxvYWQ6IHtjb2xsZWN0aW9uTmFtZTogJ1wiICtcblx0XHRcdFx0dmFsdWVMaXN0LkNvbGxlY3Rpb25QYXRoICtcblx0XHRcdFx0XCInXCIgK1xuXHRcdFx0XHQoc0RlZmF1bHRTb3J0UHJvcGVydHlOYW1lID8gXCIsIGRlZmF1bHRTb3J0UHJvcGVydHlOYW1lOiBcIiArIHNEZWZhdWx0U29ydFByb3BlcnR5TmFtZSA6IFwiXCIpICtcblx0XHRcdFx0XCIsIGhpZXJhcmNoeVF1YWxpZmllcjogJ1wiICtcblx0XHRcdFx0cmVjdXJzaXZlSGllcmFyY2h5UXVhbGlmaWVyICtcblx0XHRcdFx0XCInXCIgK1xuXHRcdFx0XHQoaW5pdGlhbEV4cGFuc2lvbkxldmVsID8gXCIsIGluaXRpYWxFeHBhbnNpb25MZXZlbDogXCIgKyBpbml0aWFsRXhwYW5zaW9uTGV2ZWwgOiBcIlwiKSArXG5cdFx0XHRcdFwifX1cIlxuXHRcdFx0KTtcblx0XHR9XG5cdFx0cmV0dXJuIChcblx0XHRcdFwie25hbWU6ICdzYXAvZmUvbWFjcm9zL2ludGVybmFsL3ZhbHVlaGVscC9UYWJsZURlbGVnYXRlJywgcGF5bG9hZDoge2NvbGxlY3Rpb25OYW1lOiAnXCIgK1xuXHRcdFx0dmFsdWVMaXN0LkNvbGxlY3Rpb25QYXRoICtcblx0XHRcdFwiJ1wiICtcblx0XHRcdChzRGVmYXVsdFNvcnRQcm9wZXJ0eU5hbWUgPyBcIiwgZGVmYXVsdFNvcnRQcm9wZXJ0eU5hbWU6IFwiICsgc0RlZmF1bHRTb3J0UHJvcGVydHlOYW1lIDogXCJcIikgK1xuXHRcdFx0XCJ9fVwiXG5cdFx0KTtcblx0fSxcblxuXHQvKipcblx0ICogR2V0cyB0aGUgc29ydCBjb25kaXRpb25zIHNldCBvbiB0aGUgVmFsdWVMaXN0J3MgUHJlc2VudGF0aW9uVmFyaWFudC5cblx0ICogQHBhcmFtIHZhbHVlTGlzdEluZm8gVGhlIHZhbHVlTGlzdCBhbm5vdGF0aW9uXG5cdCAqIEBwYXJhbSBpc1N1Z2dlc3Rpb24gSW5kaWNhdGVzIGlmIHRoZSBWYWx1ZUxpc3QgaXMgdXNlZCBpbiBhIHN1Z2dlc3Rpb24gc2NlbmFyaW9cblx0ICogQHJldHVybnMgVGhlIHNvcnQgY29uZGl0aW9ucyBpZiBhbnksIHVuZGVmaW5lZCBvdGhlcndpc2Vcblx0ICovXG5cdGdldFNvcnRDb25kaXRpb25zRnJvbVByZXNlbnRhdGlvblZhcmlhbnQ6IGZ1bmN0aW9uICh2YWx1ZUxpc3RJbmZvOiBBbm5vdGF0aW9uVmFsdWVMaXN0VHlwZSwgaXNTdWdnZXN0aW9uOiBib29sZWFuKTogc3RyaW5nIHwgdW5kZWZpbmVkIHtcblx0XHRjb25zdCBwcmVzZW50YXRpb25WYXJpYW50ID0gZ2V0UHJlc2VudGF0aW9uVmFyaWFudCh2YWx1ZUxpc3RJbmZvKTtcblx0XHRpZiAocHJlc2VudGF0aW9uVmFyaWFudD8uU29ydE9yZGVyKSB7XG5cdFx0XHRjb25zdCBzb3J0Q29uZGl0aW9ucyA9IHtcblx0XHRcdFx0c29ydGVyczogW10gYXMgU29ydGVyVHlwZVtdXG5cdFx0XHR9O1xuXG5cdFx0XHRwcmVzZW50YXRpb25WYXJpYW50LlNvcnRPcmRlci5mb3JFYWNoKGZ1bmN0aW9uIChjb25kaXRpb24pIHtcblx0XHRcdFx0Y29uc3Qgc29ydGVyOiBTb3J0ZXJUeXBlID0ge30sXG5cdFx0XHRcdFx0cHJvcGVydHlQYXRoID0gY29uZGl0aW9uPy5Qcm9wZXJ0eT8uJFByb3BlcnR5UGF0aDtcblx0XHRcdFx0aWYgKGlzU3VnZ2VzdGlvbikge1xuXHRcdFx0XHRcdHNvcnRlci5wYXRoID0gcHJvcGVydHlQYXRoO1xuXHRcdFx0XHR9IGVsc2Uge1xuXHRcdFx0XHRcdHNvcnRlci5uYW1lID0gcHJvcGVydHlQYXRoO1xuXHRcdFx0XHR9XG5cblx0XHRcdFx0aWYgKGNvbmRpdGlvbi5EZXNjZW5kaW5nKSB7XG5cdFx0XHRcdFx0c29ydGVyLmRlc2NlbmRpbmcgPSB0cnVlO1xuXHRcdFx0XHR9IGVsc2Uge1xuXHRcdFx0XHRcdHNvcnRlci5hc2NlbmRpbmcgPSB0cnVlO1xuXHRcdFx0XHR9XG5cdFx0XHRcdHNvcnRDb25kaXRpb25zLnNvcnRlcnMucHVzaChzb3J0ZXIpO1xuXHRcdFx0fSk7XG5cdFx0XHRyZXR1cm4gaXNTdWdnZXN0aW9uID8gYHNvcnRlcjogJHtKU09OLnN0cmluZ2lmeShzb3J0Q29uZGl0aW9ucy5zb3J0ZXJzKX1gIDogSlNPTi5zdHJpbmdpZnkoc29ydENvbmRpdGlvbnMpO1xuXHRcdH1cblx0XHRyZXR1cm47XG5cdH0sXG5cblx0LyoqXG5cdCAqIEdldHMgdGhlIHNvcnQgY29uZGl0aW9ucyBmb3IgdGhlIFZhbHVlTGlzdC5cblx0ICogQHBhcmFtIHZhbHVlTGlzdEluZm8gVGhlIFZhbHVlTGlzdCBhbm5vdGF0aW9uXG5cdCAqIEBwYXJhbSBpc1ZhbHVlSGVscFdpdGhGaXhlZFZhbHVlcyBJbmRpY2F0ZXMgaWYgVmFsdWVMaXN0IGhhcyBmaXhlZCB2YWx1ZXNcblx0ICogQHJldHVybnMgVGhlIHNvcnQgY29uZGl0aW9ucyBlaXRoZXIgZnJvbSB0aGUgcHJlc2VudGF0aW9uIHZhcmlhbnQgb3IgdGhlIGRlZmF1bHQgb25lLCB1bmRlZmluZWQgb3RoZXJ3aXNlXG5cdCAqL1xuXHRnZXRTb3J0Q29uZGl0aW9uc0ZvclZhbHVlTGlzdDogZnVuY3Rpb24gKFxuXHRcdHZhbHVlTGlzdEluZm86IEFubm90YXRpb25WYWx1ZUxpc3RUeXBlLFxuXHRcdGlzVmFsdWVIZWxwV2l0aEZpeGVkVmFsdWVzOiBib29sZWFuXG5cdCk6IHN0cmluZyB8IHVuZGVmaW5lZCB7XG5cdFx0Y29uc3Qgc29ydENvbmRpdGlvbnNGcm9tUHJlc2VudGF0aW9uVmFyaWFudCA9IFZhbHVlTGlzdEhlbHBlci5nZXRTb3J0Q29uZGl0aW9uc0Zyb21QcmVzZW50YXRpb25WYXJpYW50KHZhbHVlTGlzdEluZm8sIGZhbHNlKTtcblxuXHRcdGlmIChzb3J0Q29uZGl0aW9uc0Zyb21QcmVzZW50YXRpb25WYXJpYW50KSB7XG5cdFx0XHRyZXR1cm4gc29ydENvbmRpdGlvbnNGcm9tUHJlc2VudGF0aW9uVmFyaWFudDtcblx0XHR9XG5cdFx0aWYgKGlzVmFsdWVIZWxwV2l0aEZpeGVkVmFsdWVzKSB7XG5cdFx0XHRjb25zdCBzb3J0Q29uZGl0aW9ucyA9IHtcblx0XHRcdFx0c29ydGVyczogW1xuXHRcdFx0XHRcdHtcblx0XHRcdFx0XHRcdG5hbWU6IF9nZXREZWZhdWx0U29ydFByb3BlcnR5TmFtZSh2YWx1ZUxpc3RJbmZvKSxcblx0XHRcdFx0XHRcdGFzY2VuZGluZzogdHJ1ZVxuXHRcdFx0XHRcdH1cblx0XHRcdFx0XSBhcyBTb3J0ZXJUeXBlW11cblx0XHRcdH07XG5cdFx0XHRyZXR1cm4gSlNPTi5zdHJpbmdpZnkoc29ydENvbmRpdGlvbnMpO1xuXHRcdH1cblx0fSxcblxuXHRnZXRQcm9wZXJ0eVBhdGg6IGZ1bmN0aW9uIChvUGFyYW1ldGVyczogeyBVbmJvdW5kQWN0aW9uPzogYm9vbGVhbjsgUHJvcGVydHk6IHN0cmluZzsgRW50aXR5VHlwZVBhdGg6IHN0cmluZzsgQWN0aW9uOiBzdHJpbmcgfSk6IHN0cmluZyB7XG5cdFx0cmV0dXJuICFvUGFyYW1ldGVycy5VbmJvdW5kQWN0aW9uXG5cdFx0XHQ/IGAke29QYXJhbWV0ZXJzLkVudGl0eVR5cGVQYXRofS8ke29QYXJhbWV0ZXJzLkFjdGlvbn0vJHtvUGFyYW1ldGVycy5Qcm9wZXJ0eX1gXG5cdFx0XHQ6IGAvJHtvUGFyYW1ldGVycy5BY3Rpb24uc3Vic3RyaW5nKG9QYXJhbWV0ZXJzLkFjdGlvbi5sYXN0SW5kZXhPZihcIi5cIikgKyAxKX0vJHtvUGFyYW1ldGVycy5Qcm9wZXJ0eX1gO1xuXHR9LFxuXG5cdGdldFZhbHVlTGlzdFByb3BlcnR5OiBmdW5jdGlvbiAob1Byb3BlcnR5Q29udGV4dDogQmFzZUNvbnRleHQpOiBCYXNlQ29udGV4dCB8IHVuZGVmaW5lZCB7XG5cdFx0Y29uc3Qgb1ZhbHVlTGlzdE1vZGVsID0gb1Byb3BlcnR5Q29udGV4dC5nZXRNb2RlbCgpO1xuXHRcdGNvbnN0IG1WYWx1ZUxpc3QgPSBvVmFsdWVMaXN0TW9kZWwuZ2V0T2JqZWN0KFwiL1wiKSBhcyB1bmtub3duIGFzIHsgQ29sbGVjdGlvblBhdGg6IHN0cmluZzsgJG1vZGVsOiBPRGF0YU1vZGVsIH07XG5cdFx0cmV0dXJuIG1WYWx1ZUxpc3QuJG1vZGVsLmdldE1ldGFNb2RlbCgpLmNyZWF0ZUJpbmRpbmdDb250ZXh0KGAvJHttVmFsdWVMaXN0LkNvbGxlY3Rpb25QYXRofS8ke29Qcm9wZXJ0eUNvbnRleHQuZ2V0T2JqZWN0KCl9YCk7XG5cdH0sXG5cblx0Ly8gVGhpcyBmdW5jdGlvbiBpcyB1c2VkIGZvciB2YWx1ZSBoZWxwIG0tdGFibGUgYW5kIG1kYy10YWJsZVxuXHRnZXRDb2x1bW5WaXNpYmlsaXR5OiBmdW5jdGlvbiAoXG5cdFx0b1ZhbHVlTGlzdDogeyBQYXJhbWV0ZXJzOiBBbm5vdGF0aW9uVmFsdWVMaXN0UGFyYW1ldGVyW10gfSxcblx0XHRvVkxQYXJhbWV0ZXI6IEFubm90YXRpb25WYWx1ZUxpc3RQYXJhbWV0ZXIsXG5cdFx0b1NvdXJjZToge1xuXHRcdFx0dmFsdWVIZWxwV2l0aEZpeGVkVmFsdWVzOiBib29sZWFuO1xuXHRcdFx0Y29sdW1uSW5mbzoge1xuXHRcdFx0XHRpc0RpYWxvZ1RhYmxlOiBib29sZWFuO1xuXHRcdFx0XHRjb2x1bW5JbmZvczogQ29sdW1uSW5mb1tdO1xuXHRcdFx0fTtcblx0XHR9XG5cdCk6IGJvb2xlYW4ge1xuXHRcdGNvbnN0IGlzRHJvcERvd25MaXN0ID0gb1NvdXJjZSAmJiAhIW9Tb3VyY2UudmFsdWVIZWxwV2l0aEZpeGVkVmFsdWVzLFxuXHRcdFx0b0NvbHVtbkluZm8gPSBvU291cmNlLmNvbHVtbkluZm8sXG5cdFx0XHRpc1Zpc2libGUgPSAhX3JlZHVuZGFudERlc2NyaXB0aW9uKG9WTFBhcmFtZXRlciwgb0NvbHVtbkluZm8uY29sdW1uSW5mb3MpLFxuXHRcdFx0aXNEaWFsb2dUYWJsZSA9IG9Db2x1bW5JbmZvLmlzRGlhbG9nVGFibGU7XG5cblx0XHRpZiAoaXNEcm9wRG93bkxpc3QgfHwgKCFpc0Ryb3BEb3duTGlzdCAmJiBpc0RpYWxvZ1RhYmxlKSB8fCAoIWlzRHJvcERvd25MaXN0ICYmICFfaGFzSW1wb3J0YW5jZUhpZ2gob1ZhbHVlTGlzdCkpKSB7XG5cdFx0XHRjb25zdCBjb2x1bW5XaXRoSGlkZGVuQW5ub3RhdGlvbiA9IG9Db2x1bW5JbmZvLmNvbHVtbkluZm9zLmZpbmQoZnVuY3Rpb24gKGNvbHVtbkluZm86IENvbHVtbkluZm8pIHtcblx0XHRcdFx0cmV0dXJuIG9WTFBhcmFtZXRlci5WYWx1ZUxpc3RQcm9wZXJ0eSA9PT0gY29sdW1uSW5mby5jb2x1bW5OYW1lICYmIGNvbHVtbkluZm8uaGFzSGlkZGVuQW5ub3RhdGlvbiA9PT0gdHJ1ZTtcblx0XHRcdH0pO1xuXHRcdFx0cmV0dXJuICFjb2x1bW5XaXRoSGlkZGVuQW5ub3RhdGlvbiA/IGlzVmlzaWJsZSA6IGZhbHNlO1xuXHRcdH0gZWxzZSBpZiAoIWlzRHJvcERvd25MaXN0ICYmIF9oYXNJbXBvcnRhbmNlSGlnaChvVmFsdWVMaXN0KSkge1xuXHRcdFx0cmV0dXJuIG9WTFBhcmFtZXRlciAmJlxuXHRcdFx0XHRvVkxQYXJhbWV0ZXJbXCJAY29tLnNhcC52b2NhYnVsYXJpZXMuVUkudjEuSW1wb3J0YW5jZVwiXSAmJlxuXHRcdFx0XHRvVkxQYXJhbWV0ZXJbXCJAY29tLnNhcC52b2NhYnVsYXJpZXMuVUkudjEuSW1wb3J0YW5jZVwiXS4kRW51bU1lbWJlciA9PT0gXCJjb20uc2FwLnZvY2FidWxhcmllcy5VSS52MS5JbXBvcnRhbmNlVHlwZS9IaWdoXCJcblx0XHRcdFx0PyB0cnVlXG5cdFx0XHRcdDogZmFsc2U7XG5cdFx0fVxuXHRcdHJldHVybiB0cnVlO1xuXHR9LFxuXG5cdGdldENvbHVtblZpc2liaWxpdHlJbmZvOiBmdW5jdGlvbiAoXG5cdFx0b1ZhbHVlTGlzdDoge1xuXHRcdFx0JG1vZGVsOiBPRGF0YU1vZGVsO1xuXHRcdFx0Q29sbGVjdGlvblBhdGg6IHN0cmluZztcblx0XHRcdFBhcmFtZXRlcnM6IEFubm90YXRpb25WYWx1ZUxpc3RQYXJhbWV0ZXJbXTtcblx0XHR9LFxuXHRcdHNQcm9wZXJ0eUZ1bGxQYXRoOiBzdHJpbmcsXG5cdFx0YklzRHJvcERvd25MaXN0ZTogYm9vbGVhbixcblx0XHRpc0RpYWxvZ1RhYmxlOiBib29sZWFuXG5cdCk6IHtcblx0XHRpc0RpYWxvZ1RhYmxlOiBib29sZWFuO1xuXHRcdGNvbHVtbkluZm9zOiBDb2x1bW5JbmZvW107XG5cdH0ge1xuXHRcdGNvbnN0IG9NZXRhTW9kZWwgPSBvVmFsdWVMaXN0LiRtb2RlbC5nZXRNZXRhTW9kZWwoKTtcblx0XHRjb25zdCBhQ29sdW1uSW5mb3M6IENvbHVtbkluZm9bXSA9IFtdO1xuXHRcdGNvbnN0IG9Db2x1bW5JbmZvcyA9IHtcblx0XHRcdGlzRGlhbG9nVGFibGU6IGlzRGlhbG9nVGFibGUsXG5cdFx0XHRjb2x1bW5JbmZvczogYUNvbHVtbkluZm9zXG5cdFx0fTtcblxuXHRcdG9WYWx1ZUxpc3QuUGFyYW1ldGVycy5mb3JFYWNoKGZ1bmN0aW9uIChvUGFyYW1ldGVyOiBBbm5vdGF0aW9uVmFsdWVMaXN0UGFyYW1ldGVyKSB7XG5cdFx0XHRjb25zdCBvUHJvcGVydHlBbm5vdGF0aW9ucyA9IG9NZXRhTW9kZWwuZ2V0T2JqZWN0KGAvJHtvVmFsdWVMaXN0LkNvbGxlY3Rpb25QYXRofS8ke29QYXJhbWV0ZXIuVmFsdWVMaXN0UHJvcGVydHl9QGApO1xuXHRcdFx0Y29uc3Qgb1RleHRBbm5vdGF0aW9uID0gb1Byb3BlcnR5QW5ub3RhdGlvbnMgJiYgb1Byb3BlcnR5QW5ub3RhdGlvbnNbXCJAY29tLnNhcC52b2NhYnVsYXJpZXMuQ29tbW9uLnYxLlRleHRcIl07XG5cdFx0XHRsZXQgY29sdW1uSW5mbzogQ29sdW1uSW5mbyA9IHt9IGFzIHVua25vd24gYXMgQ29sdW1uSW5mbztcblx0XHRcdGlmIChvVGV4dEFubm90YXRpb24pIHtcblx0XHRcdFx0Y29sdW1uSW5mbyA9IHtcblx0XHRcdFx0XHRrZXlDb2x1bW5IaWRkZW46IG9Qcm9wZXJ0eUFubm90YXRpb25zW1wiQGNvbS5zYXAudm9jYWJ1bGFyaWVzLlVJLnYxLkhpZGRlblwiXSA/IHRydWUgOiBmYWxzZSxcblx0XHRcdFx0XHRrZXlDb2x1bW5EaXNwbGF5Rm9ybWF0OiBvVGV4dEFubm90YXRpb24gJiYgX2dldFZhbHVlSGVscENvbHVtbkRpc3BsYXlGb3JtYXQob1Byb3BlcnR5QW5ub3RhdGlvbnMsIGJJc0Ryb3BEb3duTGlzdGUpLFxuXHRcdFx0XHRcdHRleHRDb2x1bW5OYW1lOiBvVGV4dEFubm90YXRpb24gJiYgb1RleHRBbm5vdGF0aW9uLiRQYXRoLFxuXHRcdFx0XHRcdGNvbHVtbk5hbWU6IG9QYXJhbWV0ZXIuVmFsdWVMaXN0UHJvcGVydHksXG5cdFx0XHRcdFx0aGFzSGlkZGVuQW5ub3RhdGlvbjogb1Byb3BlcnR5QW5ub3RhdGlvbnMgJiYgb1Byb3BlcnR5QW5ub3RhdGlvbnNbXCJAY29tLnNhcC52b2NhYnVsYXJpZXMuVUkudjEuSGlkZGVuXCJdID8gdHJ1ZSA6IGZhbHNlXG5cdFx0XHRcdH07XG5cdFx0XHR9IGVsc2UgaWYgKG9Qcm9wZXJ0eUFubm90YXRpb25zICYmIG9Qcm9wZXJ0eUFubm90YXRpb25zW1wiQGNvbS5zYXAudm9jYWJ1bGFyaWVzLlVJLnYxLkhpZGRlblwiXSkge1xuXHRcdFx0XHRjb2x1bW5JbmZvID0ge1xuXHRcdFx0XHRcdGNvbHVtbk5hbWU6IG9QYXJhbWV0ZXIuVmFsdWVMaXN0UHJvcGVydHksXG5cdFx0XHRcdFx0aGFzSGlkZGVuQW5ub3RhdGlvbjogb1Byb3BlcnR5QW5ub3RhdGlvbnMgJiYgb1Byb3BlcnR5QW5ub3RhdGlvbnNbXCJAY29tLnNhcC52b2NhYnVsYXJpZXMuVUkudjEuSGlkZGVuXCJdID8gdHJ1ZSA6IGZhbHNlXG5cdFx0XHRcdH07XG5cdFx0XHR9XG5cdFx0XHRvQ29sdW1uSW5mb3MuY29sdW1uSW5mb3MucHVzaChjb2x1bW5JbmZvKTtcblx0XHR9KTtcblxuXHRcdHJldHVybiBvQ29sdW1uSW5mb3M7XG5cdH0sXG5cblx0Z2V0VGFibGVJdGVtc1BhcmFtZXRlcnM6IGZ1bmN0aW9uIChcblx0XHR0aGlzOiBDb250cm9sLFxuXHRcdHZhbHVlTGlzdEluZm86IEFubm90YXRpb25WYWx1ZUxpc3RUeXBlLFxuXHRcdHJlcXVlc3RHcm91cElkOiBzdHJpbmcsXG5cdFx0aXNTdWdnZXN0aW9uOiBib29sZWFuLFxuXHRcdGlzVmFsdWVIZWxwV2l0aEZpeGVkVmFsdWVzOiBib29sZWFuXG5cdCk6IHN0cmluZyB7XG5cdFx0Y29uc3QgaXRlbVBhcmFtZXRlcnMgPSBbYHBhdGg6ICcvJHt2YWx1ZUxpc3RJbmZvLkNvbGxlY3Rpb25QYXRofSdgXTtcblxuXHRcdC8vIGFkZCBzZWxlY3QgdG8gb0JpbmRpbmdJbmZvIChCQ1AgMjE4MDI1NTk1NiAvIDIxNzAxNjMwMTIpXG5cdFx0Y29uc3Qgc2VsZWN0U3RyaW5nID0gX2J1aWxkJFNlbGVjdFN0cmluZyh0aGlzKTtcblxuXHRcdC8vIHNpbmNlIHRoZXJlIGNvdWxkIGJlIHJlY29tbWVuZGF0aW9ucy9yZWNlbnRseSB1c2VkIHZhbHVlcyB0byBzaG93IGluIHRoZSBzdWdnZXN0aW9uIHBvcG92ZXJcblx0XHQvLyBoZW5jZSB3ZSBuZWVkIHRvIGNyZWF0ZSBzb21lIHRyYW5zaWVudCBjb250ZXh0cyBvbiB0aGUgdmFsdWVIZWxwIGxpc3QgYmluZGluZ1xuXHRcdC8vIHNvIHdlIHdpbGwgc2V0IHRoZSB1cGRhdGVHcm91cElkIG9mIHRoZSBsaXN0IGJpbmRpbmcgdG8gYXZvaWQgc2VuZGluZyBjYWxscyB0byB0aGUgYmFja2VuZFxuXHRcdC8vIHdlIG5lZWQgdG8gZXhwbGljaXRseSBzZXQgJCRzaGFyZWRSZXF1ZXN0IHRvIGZhbHNlIHRvIG1ha2Ugc3VyZSB3ZSBjYW4gY3JlYXRlIHRyYW5zaWVudCBjb250ZXh0cyBpbiBSQVBcblx0XHRpZiAocmVxdWVzdEdyb3VwSWQpIHtcblx0XHRcdGNvbnN0IHNlbGVjdFN0cmluZ1BhcnQgPSBzZWxlY3RTdHJpbmcgPyBgLCAnJHtzZWxlY3RTdHJpbmd9J2AgOiBcIlwiO1xuXG5cdFx0XHRpdGVtUGFyYW1ldGVycy5wdXNoKFxuXHRcdFx0XHRgcGFyYW1ldGVyczogeyQkc2hhcmVkUmVxdWVzdDogZmFsc2UsICQkdXBkYXRlR3JvdXBJZDogXCJkb25vdHN1Ym1pdFwiLCAkJGdyb3VwSWQ6ICcke3JlcXVlc3RHcm91cElkfScke3NlbGVjdFN0cmluZ1BhcnR9fWBcblx0XHRcdCk7XG5cdFx0fSBlbHNlIGlmIChzZWxlY3RTdHJpbmcpIHtcblx0XHRcdGl0ZW1QYXJhbWV0ZXJzLnB1c2goYHBhcmFtZXRlcnM6IHskJHNoYXJlZFJlcXVlc3Q6IGZhbHNlLCAkJHVwZGF0ZUdyb3VwSWQ6IFwiZG9ub3RzdWJtaXRcIiwgJHNlbGVjdDogJyR7c2VsZWN0U3RyaW5nfSd9YCk7XG5cdFx0fVxuXG5cdFx0Y29uc3QgaXNTdXNwZW5kZWQgPSB2YWx1ZUxpc3RJbmZvLlBhcmFtZXRlcnMuc29tZShmdW5jdGlvbiAob1BhcmFtZXRlcikge1xuXHRcdFx0cmV0dXJuIGlzU3VnZ2VzdGlvbiB8fCBvUGFyYW1ldGVyLiRUeXBlID09PSBDb21tb25Bbm5vdGF0aW9uVHlwZXMuVmFsdWVMaXN0UGFyYW1ldGVySW47XG5cdFx0fSk7XG5cdFx0aXRlbVBhcmFtZXRlcnMucHVzaChgc3VzcGVuZGVkOiAke2lzU3VzcGVuZGVkfWApO1xuXG5cdFx0aWYgKCFpc1ZhbHVlSGVscFdpdGhGaXhlZFZhbHVlcykge1xuXHRcdFx0aXRlbVBhcmFtZXRlcnMucHVzaChcImxlbmd0aDogMTBcIik7XG5cdFx0fVxuXG5cdFx0Y29uc3Qgc29ydENvbmRpdGlvbnNGcm9tUHJlc2VudGF0aW9uVmFyaWFudCA9IFZhbHVlTGlzdEhlbHBlci5nZXRTb3J0Q29uZGl0aW9uc0Zyb21QcmVzZW50YXRpb25WYXJpYW50KHZhbHVlTGlzdEluZm8sIGlzU3VnZ2VzdGlvbik7XG5cblx0XHRpZiAoc29ydENvbmRpdGlvbnNGcm9tUHJlc2VudGF0aW9uVmFyaWFudCkge1xuXHRcdFx0aXRlbVBhcmFtZXRlcnMucHVzaChzb3J0Q29uZGl0aW9uc0Zyb21QcmVzZW50YXRpb25WYXJpYW50KTtcblx0XHR9IGVsc2UgaWYgKGlzVmFsdWVIZWxwV2l0aEZpeGVkVmFsdWVzKSB7XG5cdFx0XHRjb25zdCBkZWZhdWx0U29ydFByb3BlcnR5TmFtZSA9IF9nZXREZWZhdWx0U29ydFByb3BlcnR5TmFtZSh2YWx1ZUxpc3RJbmZvKTtcblxuXHRcdFx0aWYgKGRlZmF1bHRTb3J0UHJvcGVydHlOYW1lKSB7XG5cdFx0XHRcdGl0ZW1QYXJhbWV0ZXJzLnB1c2goYHNvcnRlcjogW3twYXRoOiAnJHtkZWZhdWx0U29ydFByb3BlcnR5TmFtZX0nLCBhc2NlbmRpbmc6IHRydWV9XWApO1xuXHRcdFx0fVxuXHRcdH1cblxuXHRcdHJldHVybiBcIntcIiArIGl0ZW1QYXJhbWV0ZXJzLmpvaW4oXCIsIFwiKSArIFwifVwiO1xuXHR9LFxuXG5cdC8vIElzIG5lZWRlZCBmb3IgXCJleHRlcm5hbFwiIHJlcHJlc2VudGF0aW9uIGluIHF1bml0XG5cdGhhc0ltcG9ydGFuY2U6IGZ1bmN0aW9uIChvVmFsdWVMaXN0Q29udGV4dDogQ29udGV4dCk6IHN0cmluZyB7XG5cdFx0cmV0dXJuIF9oYXNJbXBvcnRhbmNlSGlnaChvVmFsdWVMaXN0Q29udGV4dC5nZXRPYmplY3QoKSkgPyBcIkltcG9ydGFuY2UvSGlnaFwiIDogXCJOb25lXCI7XG5cdH0sXG5cblx0Ly8gSXMgbmVlZGVkIGZvciBcImV4dGVybmFsXCIgcmVwcmVzZW50YXRpb24gaW4gcXVuaXRcblx0Z2V0TWluU2NyZWVuV2lkdGg6IGZ1bmN0aW9uIChvVmFsdWVMaXN0OiB7IFBhcmFtZXRlcnM6IEFubm90YXRpb25WYWx1ZUxpc3RQYXJhbWV0ZXJbXSB9KTogc3RyaW5nIHtcblx0XHRyZXR1cm4gX2hhc0ltcG9ydGFuY2VIaWdoKG9WYWx1ZUxpc3QpID8gXCJ7PSAke19WSFVJPi9taW5TY3JlZW5XaWR0aH19XCIgOiBcIjQxNnB4XCI7XG5cdH0sXG5cblx0LyoqXG5cdCAqIFJldHJpZXZlcyB0aGUgY29sdW1uIHdpZHRoIGZvciBhIGdpdmVuIHByb3BlcnR5LlxuXHQgKiBAcGFyYW0gcHJvcGVydHlQYXRoIFRoZSBwcm9wZXJ0eVBhdGhcblx0ICogQHBhcmFtIGlzVmFsdWVMaXN0V2l0aEZpeGVkVmFsdWVzIEFuIGluZGljYXRvciBzdGF0aW5nIGlmIHRoZSB2YWx1ZUhlbHAgaGFzIGZpeGVkIHZhbHVlc1xuXHQgKiBAcmV0dXJucyBUaGUgd2lkdGggYXMgYSBzdHJpbmcgb3IgdW5kZWZpbmVkLlxuXHQgKi9cblx0Z2V0Q29sdW1uV2lkdGg6IGZ1bmN0aW9uIChwcm9wZXJ0eVBhdGg6IERhdGFNb2RlbE9iamVjdFBhdGg8UHJvcGVydHk+LCBpc1ZhbHVlTGlzdFdpdGhGaXhlZFZhbHVlcyA9IGZhbHNlKTogc3RyaW5nIHwgdW5kZWZpbmVkIHtcblx0XHRpZiAoQ29tbW9uVXRpbHMuaXNTbWFsbERldmljZSgpIHx8ICFwcm9wZXJ0eVBhdGgudGFyZ2V0T2JqZWN0KSByZXR1cm47XG5cdFx0Y29uc3QgcHJvcGVydHkgPSBwcm9wZXJ0eVBhdGgudGFyZ2V0T2JqZWN0O1xuXHRcdGxldCByZWxhdGVkUHJvcGVydHk6IFByb3BlcnR5W10gPSBbcHJvcGVydHldO1xuXHRcdC8vIFRoZSBhZGRpdGlvbmFsIHByb3BlcnR5IGNvdWxkIHJlZmVyIHRvIHRoZSB0ZXh0LCBjdXJyZW5jeSwgdW5pdCBvciB0aW1lem9uZVxuXHRcdGNvbnN0IGFkZGl0aW9uYWxQcm9wZXJ0eSA9XG5cdFx0XHRcdGdldEFzc29jaWF0ZWRUZXh0UHJvcGVydHkocHJvcGVydHkpIHx8XG5cdFx0XHRcdGdldEFzc29jaWF0ZWRDdXJyZW5jeVByb3BlcnR5KHByb3BlcnR5KSB8fFxuXHRcdFx0XHRnZXRBc3NvY2lhdGVkVW5pdFByb3BlcnR5KHByb3BlcnR5KSB8fFxuXHRcdFx0XHRnZXRBc3NvY2lhdGVkVGltZXpvbmVQcm9wZXJ0eShwcm9wZXJ0eSksXG5cdFx0XHR0ZXh0QW5ub3RhdGlvbiA9IHByb3BlcnR5LmFubm90YXRpb25zPy5Db21tb24/LlRleHQsXG5cdFx0XHR0ZXh0QXJyYW5nZW1lbnQgPSB0ZXh0QW5ub3RhdGlvbj8uYW5ub3RhdGlvbnM/LlVJPy5UZXh0QXJyYW5nZW1lbnQ/LnRvU3RyaW5nKCksXG5cdFx0XHRsYWJlbCA9IHByb3BlcnR5LmFubm90YXRpb25zPy5Db21tb24/LkxhYmVsPy50b1N0cmluZygpO1xuXHRcdGxldCBkaXNwbGF5TW9kZTogc3RyaW5nIHwgdW5kZWZpbmVkO1xuXG5cdFx0Ly8gZGVmYXVsdCB0ZXh0YXJyYW5nZW1lbnQgaXMgb25seSB1c2VkIGZvciBWSCB3aXRoIGZpeGVkIHZhbHVlc1xuXHRcdGlmIChpc1ZhbHVlTGlzdFdpdGhGaXhlZFZhbHVlcyAmJiAhdGV4dEFycmFuZ2VtZW50KSB7XG5cdFx0XHQvL2Rpc3BsYXlNb2RlID0gYXMgYW5ub3RhdGVkIG9yIGRlZmF1bHRcblx0XHRcdGRpc3BsYXlNb2RlID0gZ2V0RGlzcGxheU1vZGUocHJvcGVydHlQYXRoKTtcblx0XHR9IGVsc2Uge1xuXHRcdFx0Ly9kaXNwbGF5TW9kZSA9IGFzIGFubm90YXRlZCBvciB1bmRlZmluZWRcblx0XHRcdGRpc3BsYXlNb2RlID0gdGV4dEFycmFuZ2VtZW50ICYmIGdldERpc3BsYXlNb2RlKHByb3BlcnR5UGF0aCk7XG5cdFx0fVxuXG5cdFx0aWYgKGFkZGl0aW9uYWxQcm9wZXJ0eSkge1xuXHRcdFx0aWYgKGRpc3BsYXlNb2RlID09PSBcIkRlc2NyaXB0aW9uXCIpIHtcblx0XHRcdFx0cmVsYXRlZFByb3BlcnR5ID0gW2FkZGl0aW9uYWxQcm9wZXJ0eV07XG5cdFx0XHR9IGVsc2UgaWYgKCF0ZXh0QW5ub3RhdGlvbiB8fCAoZGlzcGxheU1vZGUgJiYgZGlzcGxheU1vZGUgIT09IFwiVmFsdWVcIikpIHtcblx0XHRcdFx0cmVsYXRlZFByb3BlcnR5LnB1c2goYWRkaXRpb25hbFByb3BlcnR5KTtcblx0XHRcdH1cblx0XHR9XG5cblx0XHRsZXQgc2l6ZSA9IDA7XG5cdFx0Y29uc3QgaW5zdGFuY2VzOiBPRGF0YVR5cGVbXSA9IFtdO1xuXG5cdFx0cmVsYXRlZFByb3BlcnR5LmZvckVhY2goKHByb3A6IFByb3BlcnR5KSA9PiB7XG5cdFx0XHRjb25zdCBwcm9wZXJ0eVR5cGVDb25maWcgPSBnZXRUeXBlQ29uZmlnKHByb3AsIHVuZGVmaW5lZCk7XG5cdFx0XHRjb25zdCBQcm9wZXJ0eU9EYXRhQ29uc3RydWN0b3IgPSBPYmplY3RQYXRoLmdldChwcm9wZXJ0eVR5cGVDb25maWcudHlwZSk7XG5cdFx0XHRpZiAoUHJvcGVydHlPRGF0YUNvbnN0cnVjdG9yKSB7XG5cdFx0XHRcdGluc3RhbmNlcy5wdXNoKG5ldyBQcm9wZXJ0eU9EYXRhQ29uc3RydWN0b3IocHJvcGVydHlUeXBlQ29uZmlnLmZvcm1hdE9wdGlvbnMsIHByb3BlcnR5VHlwZUNvbmZpZy5jb25zdHJhaW50cykpO1xuXHRcdFx0fVxuXHRcdH0pO1xuXHRcdGNvbnN0IHNXaWR0aCA9IFV0aWwuY2FsY0NvbHVtbldpZHRoKGluc3RhbmNlcywgbGFiZWwpO1xuXHRcdHNpemUgPSBzV2lkdGggPyBwYXJzZUZsb2F0KHNXaWR0aC5yZXBsYWNlKFwicmVtXCIsIFwiXCIpKSA6IDA7XG5cblx0XHRpZiAoc2l6ZSA9PT0gMCkge1xuXHRcdFx0TG9nLmVycm9yKGBDYW5ub3QgY29tcHV0ZSB0aGUgY29sdW1uIHdpZHRoIGZvciBwcm9wZXJ0eTogJHtwcm9wZXJ0eS5uYW1lfWApO1xuXHRcdH1cblx0XHRyZXR1cm4gc2l6ZSA8PSAyMCA/IHNpemUudG9TdHJpbmcoKSArIFwicmVtXCIgOiBcIjIwcmVtXCI7XG5cdH0sXG5cblx0Z2V0T3V0UGFyYW1ldGVyUGF0aHM6IGZ1bmN0aW9uIChhUGFyYW1ldGVyczogQW5ub3RhdGlvblZhbHVlTGlzdFBhcmFtZXRlcltdKTogc3RyaW5nIHtcblx0XHRsZXQgc1BhdGggPSBcIlwiO1xuXHRcdGFQYXJhbWV0ZXJzLmZvckVhY2goZnVuY3Rpb24gKG9QYXJhbWV0ZXI6IEFubm90YXRpb25WYWx1ZUxpc3RQYXJhbWV0ZXIpIHtcblx0XHRcdGlmIChvUGFyYW1ldGVyLiRUeXBlLmVuZHNXaXRoKFwiT3V0XCIpKSB7XG5cdFx0XHRcdHNQYXRoICs9IGB7JHtvUGFyYW1ldGVyLlZhbHVlTGlzdFByb3BlcnR5fX1gO1xuXHRcdFx0fVxuXHRcdH0pO1xuXHRcdHJldHVybiBzUGF0aDtcblx0fSxcblxuXHRlbnRpdHlJc1NlYXJjaGFibGU6IGZ1bmN0aW9uIChcblx0XHRwcm9wZXJ0eUFubm90YXRpb25zOiBBbm5vdGF0aW9uc0ZvclByb3BlcnR5LFxuXHRcdGNvbGxlY3Rpb25Bbm5vdGF0aW9uczogTWV0YU1vZGVsRW50aXR5U2V0QW5ub3RhdGlvblxuXHQpOiBib29sZWFuIHtcblx0XHRjb25zdCBzZWFyY2hTdXBwb3J0ZWQgPSBwcm9wZXJ0eUFubm90YXRpb25zW1wiQGNvbS5zYXAudm9jYWJ1bGFyaWVzLkNvbW1vbi52MS5WYWx1ZUxpc3RcIl0/LlNlYXJjaFN1cHBvcnRlZCxcblx0XHRcdHNlYXJjaGFibGUgPSBjb2xsZWN0aW9uQW5ub3RhdGlvbnNbXCJAT3JnLk9EYXRhLkNhcGFiaWxpdGllcy5WMS5TZWFyY2hSZXN0cmljdGlvbnNcIl0/LlNlYXJjaGFibGU7XG5cblx0XHRpZiAoXG5cdFx0XHQoc2VhcmNoYWJsZSA9PT0gdW5kZWZpbmVkICYmIHNlYXJjaFN1cHBvcnRlZCA9PT0gZmFsc2UpIHx8XG5cdFx0XHQoc2VhcmNoYWJsZSA9PT0gdHJ1ZSAmJiBzZWFyY2hTdXBwb3J0ZWQgPT09IGZhbHNlKSB8fFxuXHRcdFx0c2VhcmNoYWJsZSA9PT0gZmFsc2Vcblx0XHQpIHtcblx0XHRcdHJldHVybiBmYWxzZTtcblx0XHR9XG5cdFx0cmV0dXJuIHRydWU7XG5cdH0sXG5cblx0LyoqXG5cdCAqIFJldHVybnMgdGhlIGNvbmRpdGlvbiBwYXRoIHJlcXVpcmVkIGZvciB0aGUgY29uZGl0aW9uIG1vZGVsLlxuXHQgKiBGb3IgZS5nLiA8MTpOLVByb3BlcnR5TmFtZT4qXFwvPDE6MS1Qcm9wZXJ0eU5hbWU+LzxQcm9wZXJ0eU5hbWU+LlxuXHQgKiBAcGFyYW0gbWV0YU1vZGVsIFRoZSBtZXRhbW9kZWwgaW5zdGFuY2Vcblx0ICogQHBhcmFtIGVudGl0eVNldCBUaGUgZW50aXR5IHNldCBwYXRoXG5cdCAqIEBwYXJhbSBwcm9wZXJ0eVBhdGggVGhlIHByb3BlcnR5IHBhdGhcblx0ICogQHJldHVybnMgVGhlIGZvcm1hdHRlZCBjb25kaXRpb24gcGF0aFxuXHQgKiBAcHJpdmF0ZVxuXHQgKi9cblx0X2dldENvbmRpdGlvblBhdGg6IGZ1bmN0aW9uIChtZXRhTW9kZWw6IE9EYXRhTWV0YU1vZGVsLCBlbnRpdHlTZXQ6IHN0cmluZywgcHJvcGVydHlQYXRoOiBzdHJpbmcpOiBzdHJpbmcge1xuXHRcdC8vIChzZWUgYWxzbzogc2FwL2ZlL2NvcmUvY29udmVydGVycy9jb250cm9scy9MaXN0UmVwb3J0L0ZpbHRlckJhci50cylcblx0XHRjb25zdCBwYXJ0cyA9IHByb3BlcnR5UGF0aC5zcGxpdChcIi9cIik7XG5cdFx0bGV0IGNvbmRpdGlvblBhdGggPSBcIlwiLFxuXHRcdFx0cGFydGlhbFBhdGg6IHN0cmluZyB8IHVuZGVmaW5lZDtcblxuXHRcdHdoaWxlIChwYXJ0cy5sZW5ndGgpIHtcblx0XHRcdGxldCBwYXJ0ID0gcGFydHMuc2hpZnQoKSBhcyBzdHJpbmc7XG5cdFx0XHRwYXJ0aWFsUGF0aCA9IHBhcnRpYWxQYXRoID8gYCR7cGFydGlhbFBhdGh9LyR7cGFydH1gIDogcGFydDtcblx0XHRcdGNvbnN0IHByb3BlcnR5ID0gbWV0YU1vZGVsLmdldE9iamVjdChgJHtlbnRpdHlTZXR9LyR7cGFydGlhbFBhdGh9YCk7XG5cdFx0XHRpZiAocHJvcGVydHkgJiYgcHJvcGVydHkuJGtpbmQgPT09IFwiTmF2aWdhdGlvblByb3BlcnR5XCIgJiYgcHJvcGVydHkuJGlzQ29sbGVjdGlvbikge1xuXHRcdFx0XHRwYXJ0ICs9IFwiKlwiO1xuXHRcdFx0fVxuXHRcdFx0Y29uZGl0aW9uUGF0aCA9IGNvbmRpdGlvblBhdGggPyBgJHtjb25kaXRpb25QYXRofS8ke3BhcnR9YCA6IHBhcnQ7XG5cdFx0fVxuXHRcdHJldHVybiBjb25kaXRpb25QYXRoO1xuXHR9LFxuXG5cdC8qKlxuXHQgKiBSZXR1cm5zIGFycmF5IG9mIGNvbHVtbiBkZWZpbml0aW9ucyBjb3JyZXNwb25kaW5nIHRvIHByb3BlcnRpZXMgZGVmaW5lZCBhcyBTZWxlY3Rpb24gRmllbGRzIG9uIHRoZSBDb2xsZWN0aW9uUGF0aCBlbnRpdHkgc2V0IGluIGEgVmFsdWVIZWxwLlxuXHQgKiBAcGFyYW0gbWV0YU1vZGVsIFRoZSBtZXRhbW9kZWwgaW5zdGFuY2Vcblx0ICogQHBhcmFtIGVudGl0eVNldCBUaGUgZW50aXR5IHNldCBwYXRoXG5cdCAqIEByZXR1cm5zIEFycmF5IG9mIGNvbHVtbiBkZWZpbml0aW9uc1xuXHQgKiBAcHJpdmF0ZVxuXHQgKi9cblx0X2dldENvbHVtbkRlZmluaXRpb25Gcm9tU2VsZWN0aW9uRmllbGRzOiBmdW5jdGlvbiAobWV0YU1vZGVsOiBPRGF0YU1ldGFNb2RlbCwgZW50aXR5U2V0OiBzdHJpbmcpOiBDb2x1bW5EZWZbXSB7XG5cdFx0Y29uc3QgY29sdW1uRGVmczogQ29sdW1uRGVmW10gPSBbXSxcblx0XHRcdGVudGl0eVR5cGVBbm5vdGF0aW9ucyA9IG1ldGFNb2RlbC5nZXRPYmplY3QoYCR7ZW50aXR5U2V0fS9AYCkgYXMgQW5ub3RhdGlvbnNGb3JFbnRpdHlUeXBlLFxuXHRcdFx0c2VsZWN0aW9uRmllbGRzID0gZW50aXR5VHlwZUFubm90YXRpb25zW1wiQGNvbS5zYXAudm9jYWJ1bGFyaWVzLlVJLnYxLlNlbGVjdGlvbkZpZWxkc1wiXTtcblxuXHRcdGlmIChzZWxlY3Rpb25GaWVsZHMpIHtcblx0XHRcdHNlbGVjdGlvbkZpZWxkcy5mb3JFYWNoKGZ1bmN0aW9uIChzZWxlY3Rpb25GaWVsZDogQW5ub3RhdGlvblNlbGVjdGlvbkZpZWxkKSB7XG5cdFx0XHRcdGNvbnN0IHNlbGVjdGlvbkZpZWxkUGF0aCA9IGAke2VudGl0eVNldH0vJHtzZWxlY3Rpb25GaWVsZC4kUHJvcGVydHlQYXRofWAsXG5cdFx0XHRcdFx0Y29uZGl0aW9uUGF0aCA9IFZhbHVlTGlzdEhlbHBlci5fZ2V0Q29uZGl0aW9uUGF0aChtZXRhTW9kZWwsIGVudGl0eVNldCwgc2VsZWN0aW9uRmllbGQuJFByb3BlcnR5UGF0aCksXG5cdFx0XHRcdFx0cHJvcGVydHlBbm5vdGF0aW9ucyA9IG1ldGFNb2RlbC5nZXRPYmplY3QoYCR7c2VsZWN0aW9uRmllbGRQYXRofUBgKSBhcyBBbm5vdGF0aW9uc0ZvclByb3BlcnR5LFxuXHRcdFx0XHRcdGNvbHVtbkRlZiA9IHtcblx0XHRcdFx0XHRcdHBhdGg6IGNvbmRpdGlvblBhdGgsXG5cdFx0XHRcdFx0XHRsYWJlbDogcHJvcGVydHlBbm5vdGF0aW9uc1tBbm5vdGF0aW9uTGFiZWxdIHx8IHNlbGVjdGlvbkZpZWxkUGF0aCxcblx0XHRcdFx0XHRcdHNvcnRhYmxlOiB0cnVlLFxuXHRcdFx0XHRcdFx0ZmlsdGVyYWJsZTogaXNQcm9wZXJ0eUZpbHRlcmFibGUobWV0YU1vZGVsLCBlbnRpdHlTZXQsIHNlbGVjdGlvbkZpZWxkLiRQcm9wZXJ0eVBhdGgsIGZhbHNlKSxcblx0XHRcdFx0XHRcdCRUeXBlOiBtZXRhTW9kZWwuZ2V0T2JqZWN0KHNlbGVjdGlvbkZpZWxkUGF0aCk/LiRUeXBlXG5cdFx0XHRcdFx0fTtcblx0XHRcdFx0Y29sdW1uRGVmcy5wdXNoKGNvbHVtbkRlZik7XG5cdFx0XHR9KTtcblx0XHR9XG5cblx0XHRyZXR1cm4gY29sdW1uRGVmcztcblx0fSxcblxuXHRfbWVyZ2VDb2x1bW5EZWZpbml0aW9uc0Zyb21Qcm9wZXJ0aWVzOiBmdW5jdGlvbiAoXG5cdFx0Y29sdW1uRGVmczogQ29sdW1uRGVmW10sXG5cdFx0dmFsdWVMaXN0SW5mbzogQW5ub3RhdGlvblZhbHVlTGlzdFR5cGUsXG5cdFx0dmFsdWVMaXN0UHJvcGVydHk6IHN0cmluZyxcblx0XHRwcm9wZXJ0eTogQ29sdW1uUHJvcGVydHksXG5cdFx0cHJvcGVydHlBbm5vdGF0aW9uczogQW5ub3RhdGlvbnNGb3JQcm9wZXJ0eVxuXHQpOiB2b2lkIHtcblx0XHRsZXQgY29sdW1uUGF0aCA9IHZhbHVlTGlzdFByb3BlcnR5LFxuXHRcdFx0Y29sdW1uUHJvcGVydHlUeXBlID0gcHJvcGVydHkuJFR5cGU7XG5cdFx0Y29uc3QgbGFiZWwgPSBwcm9wZXJ0eUFubm90YXRpb25zW0Fubm90YXRpb25MYWJlbF0gfHwgY29sdW1uUGF0aCxcblx0XHRcdHRleHRBbm5vdGF0aW9uID0gcHJvcGVydHlBbm5vdGF0aW9uc1tBbm5vdGF0aW9uVGV4dF07XG5cblx0XHRpZiAoXG5cdFx0XHR0ZXh0QW5ub3RhdGlvbiAmJlxuXHRcdFx0cHJvcGVydHlBbm5vdGF0aW9uc1tBbm5vdGF0aW9uVGV4dFVJVGV4dEFycmFuZ2VtZW50XT8uJEVudW1NZW1iZXIgPT09IFwiY29tLnNhcC52b2NhYnVsYXJpZXMuVUkudjEuVGV4dEFycmFuZ2VtZW50VHlwZS9UZXh0T25seVwiXG5cdFx0KSB7XG5cdFx0XHQvLyB0aGUgY29sdW1uIHByb3BlcnR5IGlzIHRoZSBvbmUgY29taW5nIGZyb20gdGhlIHRleHQgYW5ub3RhdGlvblxuXHRcdFx0Y29sdW1uUGF0aCA9IHRleHRBbm5vdGF0aW9uLiRQYXRoO1xuXHRcdFx0Y29uc3QgdGV4dFByb3BlcnR5UGF0aCA9IGAvJHt2YWx1ZUxpc3RJbmZvLkNvbGxlY3Rpb25QYXRofS8ke2NvbHVtblBhdGh9YDtcblx0XHRcdGNvbHVtblByb3BlcnR5VHlwZSA9IHZhbHVlTGlzdEluZm8uJG1vZGVsLmdldE1ldGFNb2RlbCgpPy5nZXRPYmplY3QodGV4dFByb3BlcnR5UGF0aCk/LiRUeXBlIGFzIHN0cmluZztcblx0XHR9XG5cblx0XHRpZiAoY29sdW1uTm90QWxyZWFkeURlZmluZWQoY29sdW1uRGVmcywgY29sdW1uUGF0aCkpIHtcblx0XHRcdGNvbnN0IGNvbHVtbkRlZjogQ29sdW1uRGVmID0ge1xuXHRcdFx0XHRwYXRoOiBjb2x1bW5QYXRoLFxuXHRcdFx0XHQvLyBlbnN1cmUgdGhlIHRleHQgYXNzb2NpYXRlZCB3aXRoIGEgY29sdW1uIHRoYXQgcmVmZXJlbmNlcyBhIG5hdmlnYXRpb24gcHJvcGVydHkgcmVmbGVjdHMgdGhlIHNhbWUgbmF2aWdhdGlvbiBzdHJ1Y3R1cmUgYXMgdGhlIGNvbHVtblxuXHRcdFx0XHR0ZXh0UGF0aDpcblx0XHRcdFx0XHR0ZXh0QW5ub3RhdGlvbj8uJFBhdGggJiYgdmFsdWVMaXN0UHJvcGVydHkuaW5jbHVkZXMoXCIvXCIpXG5cdFx0XHRcdFx0XHQ/IHZhbHVlTGlzdFByb3BlcnR5LnN1YnN0cmluZygwLCB2YWx1ZUxpc3RQcm9wZXJ0eS5sYXN0SW5kZXhPZihcIi9cIikpICsgXCIvXCIgKyB0ZXh0QW5ub3RhdGlvbi4kUGF0aFxuXHRcdFx0XHRcdFx0OiB0ZXh0QW5ub3RhdGlvbj8uJFBhdGgsXG5cdFx0XHRcdGxhYmVsOiBsYWJlbCxcblx0XHRcdFx0c29ydGFibGU6IHRydWUsXG5cdFx0XHRcdGZpbHRlcmFibGU6ICFwcm9wZXJ0eUFubm90YXRpb25zW1wiQGNvbS5zYXAudm9jYWJ1bGFyaWVzLlVJLnYxLkhpZGRlbkZpbHRlclwiXSxcblx0XHRcdFx0JFR5cGU6IGNvbHVtblByb3BlcnR5VHlwZVxuXHRcdFx0fTtcblx0XHRcdGNvbHVtbkRlZnMucHVzaChjb2x1bW5EZWYpO1xuXHRcdH1cblx0fSxcblxuXHRmaWx0ZXJJbk91dFBhcmFtZXRlcnM6IGZ1bmN0aW9uICh2aFBhcmFtZXRlcnM6IEluT3V0UGFyYW1ldGVyW10sIHR5cGVGaWx0ZXI6IHN0cmluZ1tdKTogSW5PdXRQYXJhbWV0ZXJbXSB7XG5cdFx0cmV0dXJuIHZoUGFyYW1ldGVycy5maWx0ZXIoZnVuY3Rpb24gKHBhcmFtZXRlcikge1xuXHRcdFx0cmV0dXJuIHR5cGVGaWx0ZXIuaW5jbHVkZXMocGFyYW1ldGVyLnBhcm1ldGVyVHlwZSk7XG5cdFx0fSk7XG5cdH0sXG5cblx0Z2V0SW5QYXJhbWV0ZXJzOiBmdW5jdGlvbiAodmhQYXJhbWV0ZXJzOiBJbk91dFBhcmFtZXRlcltdKTogSW5PdXRQYXJhbWV0ZXJbXSB7XG5cdFx0cmV0dXJuIFZhbHVlTGlzdEhlbHBlci5maWx0ZXJJbk91dFBhcmFtZXRlcnModmhQYXJhbWV0ZXJzLCBbXG5cdFx0XHRBbm5vdGF0aW9uVmFsdWVMaXN0UGFyYW1ldGVySW4sXG5cdFx0XHRBbm5vdGF0aW9uVmFsdWVMaXN0UGFyYW1ldGVyQ29uc3RhbnQsXG5cdFx0XHRBbm5vdGF0aW9uVmFsdWVMaXN0UGFyYW1ldGVySW5PdXRcblx0XHRdKTtcblx0fSxcblxuXHRnZXRPdXRQYXJhbWV0ZXJzOiBmdW5jdGlvbiAodmhQYXJhbWV0ZXJzOiBJbk91dFBhcmFtZXRlcltdKTogSW5PdXRQYXJhbWV0ZXJbXSB7XG5cdFx0cmV0dXJuIFZhbHVlTGlzdEhlbHBlci5maWx0ZXJJbk91dFBhcmFtZXRlcnModmhQYXJhbWV0ZXJzLCBbQW5ub3RhdGlvblZhbHVlTGlzdFBhcmFtZXRlck91dCwgQW5ub3RhdGlvblZhbHVlTGlzdFBhcmFtZXRlckluT3V0XSk7XG5cdH0sXG5cblx0Z2V0SW5BbmRPdXRQYXJhbWV0ZXJzOiBmdW5jdGlvbiAodmhQYXJhbWV0ZXJzOiBJbk91dFBhcmFtZXRlcltdKTogSW5PdXRQYXJhbWV0ZXJbXSB7XG5cdFx0cmV0dXJuIFZhbHVlTGlzdEhlbHBlci5maWx0ZXJJbk91dFBhcmFtZXRlcnModmhQYXJhbWV0ZXJzLCBWYWx1ZUxpc3RIZWxwZXIuZ2V0SW5BbmRPdXRQYXJhbWV0ZXJzTGlzdCgpKTtcblx0fSxcblxuXHRjcmVhdGVWSFVJTW9kZWw6IGZ1bmN0aW9uICh2YWx1ZUhlbHA6IFZhbHVlSGVscCwgcHJvcGVydHlQYXRoOiBzdHJpbmcsIG1ldGFNb2RlbDogT0RhdGFNZXRhTW9kZWwpOiBKU09OTW9kZWwge1xuXHRcdC8vIHNldHRpbmcgdGhlIF9WSFVJIG1vZGVsIGV2YWx1YXRlZCBpbiB0aGUgVmFsdWVMaXN0VGFibGUgZnJhZ21lbnRcblx0XHRjb25zdCB2aFVJTW9kZWwgPSBuZXcgSlNPTk1vZGVsKHt9KSxcblx0XHRcdHByb3BlcnR5QW5ub3RhdGlvbnMgPSBtZXRhTW9kZWwuZ2V0T2JqZWN0KGAke3Byb3BlcnR5UGF0aH1AYCkgYXMgQW5ub3RhdGlvbnNGb3JQcm9wZXJ0eTtcblxuXHRcdHZhbHVlSGVscC5zZXRNb2RlbCh2aFVJTW9kZWwsIFwiX1ZIVUlcIik7XG5cdFx0Ly8gSWRlbnRpZmllcyB0aGUgXCJDb250ZXh0RGVwZW5kZW50LVNjZW5hcmlvXCJcblx0XHR2aFVJTW9kZWwuc2V0UHJvcGVydHkoXCIvaGFzVmFsdWVMaXN0UmVsZXZhbnRRdWFsaWZpZXJzXCIsICEhcHJvcGVydHlBbm5vdGF0aW9uc1tBbm5vdGF0aW9uc1ZhbHVlTGlzdFJlbGV2YW50UXVhbGlmaWVyc10pO1xuXHRcdC8qIFByb3BlcnR5IGxhYmVsIGZvciBkaWFsb2cgdGl0bGUgKi9cblx0XHR2aFVJTW9kZWwuc2V0UHJvcGVydHkoXCIvcHJvcGVydHlMYWJlbFwiLCBwcm9wZXJ0eUFubm90YXRpb25zW0Fubm90YXRpb25MYWJlbF0pO1xuXG5cdFx0cmV0dXJuIHZoVUlNb2RlbDtcblx0fSxcblxuXHQvKipcblx0ICogUmV0dXJucyB0aGUgdGl0bGUgb2YgdGhlIHZhbHVlIGhlbHAgZGlhbG9nLlxuXHQgKiBCeSBkZWZhdWx0LCB0aGUgZGF0YSBmaWVsZCBsYWJlbCBpcyB1c2VkLCBvdGhlcndpc2UgZWl0aGVyIHRoZSBwcm9wZXJ0eSBsYWJlbCBvciB0aGUgdmFsdWUgbGlzdCBsYWJlbCBpcyB1c2VkIGFzIGEgZmFsbGJhY2suXG5cdCAqIEZvciBjb250ZXh0LWRlcGVuZGVudCB2YWx1ZSBoZWxwcywgYnkgZGVmYXVsdCB0aGUgdmFsdWUgbGlzdCBsYWJlbCBpcyB1c2VkLCBvdGhlcndpc2UgZWl0aGVyIHRoZSBwcm9wZXJ0eSBsYWJlbCBvciB0aGUgZGF0YSBmaWVsZCBsYWJlbCBpcyB1c2VkIGFzIGEgZmFsbGJhY2suXG5cdCAqIEBwYXJhbSB2YWx1ZUhlbHAgVGhlIHZhbHVlSGVscCBpbnN0YW5jZVxuXHQgKiBAcGFyYW0gdmFsdWVoZWxwTGFiZWwgVGhlIGxhYmVsIGluIHRoZSB2YWx1ZSBoZWxwIG1ldGFkYXRhXG5cdCAqIEByZXR1cm5zIFRoZSB0aXRsZSBmb3IgdGhlIHZhbHVlSGVscCBkaWFsb2dcblx0ICogQHByaXZhdGVcblx0ICovXG5cdF9nZXREaWFsb2dUaXRsZTogZnVuY3Rpb24gKHZhbHVlSGVscDogVmFsdWVIZWxwLCB2YWx1ZWhlbHBMYWJlbDogc3RyaW5nIHwgdW5kZWZpbmVkKTogc3RyaW5nIHtcblx0XHRjb25zdCBwcm9wZXJ0eUxhYmVsID0gKHZhbHVlSGVscC5nZXRNb2RlbChcIl9WSFVJXCIpIGFzIEpTT05Nb2RlbCkuZ2V0UHJvcGVydHkoXCIvcHJvcGVydHlMYWJlbFwiKTtcblx0XHRjb25zdCBkYXRhRmllbGRMYWJlbCA9IHZhbHVlSGVscC5nZXRDb250cm9sKCk/LmdldFByb3BlcnR5KFwibGFiZWxcIik7XG5cdFx0cmV0dXJuICh2YWx1ZUhlbHAuZ2V0TW9kZWwoXCJfVkhVSVwiKSBhcyBKU09OTW9kZWwpLmdldFByb3BlcnR5KFwiL2hhc1ZhbHVlTGlzdFJlbGV2YW50UXVhbGlmaWVyc1wiKVxuXHRcdFx0PyB2YWx1ZWhlbHBMYWJlbCB8fCBwcm9wZXJ0eUxhYmVsIHx8IGRhdGFGaWVsZExhYmVsXG5cdFx0XHQ6IGRhdGFGaWVsZExhYmVsIHx8IHByb3BlcnR5TGFiZWwgfHwgdmFsdWVoZWxwTGFiZWw7XG5cdH0sXG5cblx0ZGVzdHJveVZIQ29udGVudDogZnVuY3Rpb24gKHZhbHVlSGVscDogVmFsdWVIZWxwKTogdm9pZCB7XG5cdFx0aWYgKHZhbHVlSGVscC5nZXREaWFsb2coKSkge1xuXHRcdFx0dmFsdWVIZWxwLmdldERpYWxvZygpLmRlc3Ryb3lDb250ZW50KCk7XG5cdFx0fVxuXHRcdGlmICh2YWx1ZUhlbHAuZ2V0VHlwZWFoZWFkKCkpIHtcblx0XHRcdHZhbHVlSGVscC5nZXRUeXBlYWhlYWQoKS5kZXN0cm95Q29udGVudCgpO1xuXHRcdH1cblx0fSxcblxuXHRwdXREZWZhdWx0UXVhbGlmaWVyRmlyc3Q6IGZ1bmN0aW9uIChxdWFsaWZpZXJzOiBzdHJpbmdbXSk6IHN0cmluZ1tdIHtcblx0XHRjb25zdCBpbmRleERlZmF1bHRWSCA9IHF1YWxpZmllcnMuaW5kZXhPZihcIlwiKTtcblxuXHRcdC8vIGRlZmF1bHQgVmFsdWVIZWxwIHdpdGhvdXQgcXVhbGlmaWVyIHNob3VsZCBiZSB0aGUgZmlyc3Rcblx0XHRpZiAoaW5kZXhEZWZhdWx0VkggPiAwKSB7XG5cdFx0XHRxdWFsaWZpZXJzLnVuc2hpZnQocXVhbGlmaWVyc1tpbmRleERlZmF1bHRWSF0pO1xuXHRcdFx0cXVhbGlmaWVycy5zcGxpY2UoaW5kZXhEZWZhdWx0VkggKyAxLCAxKTtcblx0XHR9XG5cdFx0cmV0dXJuIHF1YWxpZmllcnM7XG5cdH0sXG5cblx0X2dldENvbnRleHRQcmVmaXg6IGZ1bmN0aW9uIChiaW5kaW5nQ29udGV4dDogQ29udGV4dCB8IHVuZGVmaW5lZCwgcHJvcGVydHlCaW5kaW5nUGFydHM6IHN0cmluZ1tdKTogc3RyaW5nIHtcblx0XHRpZiAoYmluZGluZ0NvbnRleHQgJiYgYmluZGluZ0NvbnRleHQuZ2V0UGF0aCgpKSB7XG5cdFx0XHRjb25zdCBiaW5kaWdDb250ZXh0UGFydHMgPSBiaW5kaW5nQ29udGV4dC5nZXRQYXRoKCkuc3BsaXQoXCIvXCIpO1xuXHRcdFx0aWYgKHByb3BlcnR5QmluZGluZ1BhcnRzLmxlbmd0aCAtIGJpbmRpZ0NvbnRleHRQYXJ0cy5sZW5ndGggPiAxKSB7XG5cdFx0XHRcdGNvbnN0IGNvbnRleHRQcmVmaXhQYXJ0cyA9IFtdO1xuXHRcdFx0XHRmb3IgKGxldCBpID0gYmluZGlnQ29udGV4dFBhcnRzLmxlbmd0aDsgaSA8IHByb3BlcnR5QmluZGluZ1BhcnRzLmxlbmd0aCAtIDE7IGkrKykge1xuXHRcdFx0XHRcdGNvbnRleHRQcmVmaXhQYXJ0cy5wdXNoKHByb3BlcnR5QmluZGluZ1BhcnRzW2ldKTtcblx0XHRcdFx0fVxuXHRcdFx0XHRyZXR1cm4gYCR7Y29udGV4dFByZWZpeFBhcnRzLmpvaW4oXCIvXCIpfS9gO1xuXHRcdFx0fVxuXHRcdH1cblxuXHRcdHJldHVybiBcIlwiO1xuXHR9LFxuXG5cdF9nZXRWaFBhcmFtZXRlcjogZnVuY3Rpb24gKFxuXHRcdGNvbmRpdGlvbk1vZGVsOiBzdHJpbmcgfCB1bmRlZmluZWQsXG5cdFx0dmFsdWVIZWxwOiBWYWx1ZUhlbHAsXG5cdFx0Y29udGV4dFByZWZpeDogc3RyaW5nLFxuXHRcdHBhcmFtZXRlcjogQW5ub3RhdGlvblZhbHVlTGlzdFBhcmFtZXRlcixcblx0XHR2aE1ldGFNb2RlbDogT0RhdGFNZXRhTW9kZWwsXG5cdFx0bG9jYWxEYXRhUHJvcGVydHlQYXRoOiBzdHJpbmdcblx0KTogSW5PdXRQYXJhbWV0ZXIge1xuXHRcdGxldCB2YWx1ZVBhdGg6IHN0cmluZyB8IHVuZGVmaW5lZCA9IFwiXCI7XG5cdFx0Y29uc3QgYmluZGluZ0NvbnRleHQgPSB2YWx1ZUhlbHAuZ2V0QmluZGluZ0NvbnRleHQoKTtcblx0XHRpZiAoY29uZGl0aW9uTW9kZWwgJiYgY29uZGl0aW9uTW9kZWwubGVuZ3RoID4gMCkge1xuXHRcdFx0aWYgKFxuXHRcdFx0XHR2YWx1ZUhlbHAuZ2V0UGFyZW50KCk/LmlzQShcInNhcC51aS5tZGMuVGFibGVcIikgJiZcblx0XHRcdFx0YmluZGluZ0NvbnRleHQgJiZcblx0XHRcdFx0VmFsdWVMaXN0SGVscGVyLl9wYXJhbWV0ZXJJc0EocGFyYW1ldGVyLCBbXG5cdFx0XHRcdFx0Q29tbW9uQW5ub3RhdGlvblR5cGVzLlZhbHVlTGlzdFBhcmFtZXRlckluLFxuXHRcdFx0XHRcdENvbW1vbkFubm90YXRpb25UeXBlcy5WYWx1ZUxpc3RQYXJhbWV0ZXJJbk91dFxuXHRcdFx0XHRdKVxuXHRcdFx0KSB7XG5cdFx0XHRcdC8vIFNwZWNpYWwgaGFuZGxpbmcgZm9yIHZhbHVlIGhlbHAgdXNlZCBpbiBmaWx0ZXIgZGlhbG9nXG5cdFx0XHRcdGNvbnN0IHBhcnRzID0gbG9jYWxEYXRhUHJvcGVydHlQYXRoLnNwbGl0KFwiL1wiKTtcblx0XHRcdFx0aWYgKHBhcnRzLmxlbmd0aCA+IDEpIHtcblx0XHRcdFx0XHRjb25zdCBmaXJzdE5hdmlnYXRpb25Qcm9wZXJ0eSA9IHBhcnRzWzBdO1xuXHRcdFx0XHRcdGNvbnN0IG9Cb3VuZEVudGl0eSA9IHZoTWV0YU1vZGVsLmdldE1ldGFDb250ZXh0KGJpbmRpbmdDb250ZXh0LmdldFBhdGgoKSk7XG5cdFx0XHRcdFx0Y29uc3Qgc1BhdGhPZlRhYmxlID0gKHZhbHVlSGVscC5nZXRQYXJlbnQoKSBhcyB1bmtub3duIGFzIHsgZ2V0Um93QmluZGluZzogRnVuY3Rpb24gfSkuZ2V0Um93QmluZGluZygpLmdldFBhdGgoKTsgLy9UT0RPXG5cdFx0XHRcdFx0aWYgKG9Cb3VuZEVudGl0eS5nZXRPYmplY3QoYCR7c1BhdGhPZlRhYmxlfS8kUGFydG5lcmApID09PSBmaXJzdE5hdmlnYXRpb25Qcm9wZXJ0eSkge1xuXHRcdFx0XHRcdFx0Ly8gVXNpbmcgdGhlIGNvbmRpdGlvbiBtb2RlbCBkb2Vzbid0IG1ha2UgYW55IHNlbnNlIGluIGNhc2UgYW4gaW4tcGFyYW1ldGVyIHVzZXMgYSBuYXZpZ2F0aW9uIHByb3BlcnR5XG5cdFx0XHRcdFx0XHQvLyByZWZlcnJpbmcgdG8gdGhlIHBhcnRuZXIuIFRoZXJlZm9yZSB1c2luZyB0aGUgRlZIIGNvbnRleHQgaW5zdGVhZCBvZiB0aGUgY29uZGl0aW9uIG1vZGVsLlxuXHRcdFx0XHRcdFx0dmFsdWVQYXRoID0gbG9jYWxEYXRhUHJvcGVydHlQYXRoO1xuXHRcdFx0XHRcdH1cblx0XHRcdFx0fVxuXHRcdFx0fSBlbHNlIGlmIChcblx0XHRcdFx0dmFsdWVIZWxwLmdldFBhcmVudCgpPy5nZXRQYXJlbnQoKT8uZ2V0UGFyZW50KCk/LmlzQTxGaWx0ZXJCYXJBUEk+KFwic2FwLmZlLm1hY3Jvcy5maWx0ZXJCYXIuRmlsdGVyQmFyQVBJXCIpICYmXG5cdFx0XHRcdGJpbmRpbmdDb250ZXh0ICYmXG5cdFx0XHRcdFZhbHVlTGlzdEhlbHBlci5fcGFyYW1ldGVySXNBKHBhcmFtZXRlciwgW1xuXHRcdFx0XHRcdENvbW1vbkFubm90YXRpb25UeXBlcy5WYWx1ZUxpc3RQYXJhbWV0ZXJJbixcblx0XHRcdFx0XHRDb21tb25Bbm5vdGF0aW9uVHlwZXMuVmFsdWVMaXN0UGFyYW1ldGVySW5PdXRcblx0XHRcdFx0XSlcblx0XHRcdCkge1xuXHRcdFx0XHQvLyBJbiBjYXNlIHdlIGFyZSBhIHZhbHVlIGhlbHAgb2YgYSBGaWx0ZXJCYXIsIHdlIGNhbiBnbyB1cCB0byB0aGUgQVBJIHRvIGNoZWNrIGlmIHdlIGFyZSBvbiBhIGZpbHRlcmJhciByZXByZXNlbnRpbmcgYSBuYXZpZ2F0aW9uIHByb3BlcnR5XG5cdFx0XHRcdGNvbnN0IGZpbHRlckJhckFQSSA9IHZhbHVlSGVscC5nZXRQYXJlbnQoKT8uZ2V0UGFyZW50KCk/LmdldFBhcmVudCgpIGFzIEZpbHRlckJhckFQSTtcblx0XHRcdFx0Y29uc3QgZmlsdGVyQmFyTWV0YVBhdGggPSBmaWx0ZXJCYXJBUEkubWV0YVBhdGg7XG5cdFx0XHRcdGNvbnN0IHZhbHVlSGVscENvbnRleHRQYXRoID0gdmhNZXRhTW9kZWwuZ2V0TWV0YVBhdGgoYmluZGluZ0NvbnRleHQuZ2V0UGF0aCgpKTtcblx0XHRcdFx0Y29uc3QgY29udGV4dE1ldGFQYXRoID0gbmV3IE1ldGFQYXRoKGNvbnZlcnRUeXBlcyh2aE1ldGFNb2RlbCksIHZhbHVlSGVscENvbnRleHRQYXRoLCB2YWx1ZUhlbHBDb250ZXh0UGF0aCk7XG5cdFx0XHRcdGNvbnN0IG1ldGFQYXRoID0gbmV3IE1ldGFQYXRoKGNvbnZlcnRUeXBlcyh2aE1ldGFNb2RlbCksIGZpbHRlckJhck1ldGFQYXRoLCB2YWx1ZUhlbHBDb250ZXh0UGF0aCk7XG5cdFx0XHRcdGNvbnN0IG5ld1BhdGggPSBtZXRhUGF0aC5nZXRNZXRhUGF0aEZvclBhdGg8UHJvcGVydHk+KGxvY2FsRGF0YVByb3BlcnR5UGF0aCk7XG5cdFx0XHRcdGlmIChuZXdQYXRoICYmIG5ld1BhdGguZ2V0VGFyZ2V0KCkpIHtcblx0XHRcdFx0XHRjb25zdCB0YXJnZXRFbnRpdHlTZXQgPSBuZXdQYXRoLmdldENsb3Nlc3RFbnRpdHlTZXQoKTtcblx0XHRcdFx0XHRpZiAodGFyZ2V0RW50aXR5U2V0ID09PSBjb250ZXh0TWV0YVBhdGguZ2V0Q2xvc2VzdEVudGl0eVNldCgpKSB7XG5cdFx0XHRcdFx0XHR2YWx1ZVBhdGggPSBjb250ZXh0TWV0YVBhdGguZ2V0TWV0YVBhdGhGb3JPYmplY3QobmV3UGF0aC5nZXRUYXJnZXQoKSk/LmdldFJlbGF0aXZlUGF0aCgpO1xuXHRcdFx0XHRcdH1cblx0XHRcdFx0fVxuXHRcdFx0fVxuXHRcdFx0aWYgKCF2YWx1ZVBhdGgpIHtcblx0XHRcdFx0dmFsdWVQYXRoID0gY29uZGl0aW9uTW9kZWwgKyBcIj4vY29uZGl0aW9ucy9cIiArIGxvY2FsRGF0YVByb3BlcnR5UGF0aDtcblx0XHRcdH1cblx0XHR9IGVsc2Uge1xuXHRcdFx0dmFsdWVQYXRoID0gY29udGV4dFByZWZpeCArIGxvY2FsRGF0YVByb3BlcnR5UGF0aDtcblx0XHR9XG5cblx0XHRyZXR1cm4ge1xuXHRcdFx0cGFybWV0ZXJUeXBlOiBwYXJhbWV0ZXIuJFR5cGUsXG5cdFx0XHRzb3VyY2U6IHZhbHVlUGF0aCxcblx0XHRcdGhlbHBQYXRoOiBwYXJhbWV0ZXIuVmFsdWVMaXN0UHJvcGVydHksXG5cdFx0XHRjb25zdGFudFZhbHVlOiBwYXJhbWV0ZXIuQ29uc3RhbnQsXG5cdFx0XHRpbml0aWFsVmFsdWVJc1NpZ25pZmljYW50OiBCb29sZWFuKHBhcmFtZXRlci5Jbml0aWFsVmFsdWVJc1NpZ25pZmljYW50KVxuXHRcdH07XG5cdH0sXG5cblx0X3BhcmFtZXRlcklzQShwYXJhbWV0ZXI6IEFubm90YXRpb25WYWx1ZUxpc3RQYXJhbWV0ZXIsIHBhcmFtZXRlclR5cGVzOiBDb21tb25Bbm5vdGF0aW9uVHlwZXNbXSk6IGJvb2xlYW4ge1xuXHRcdHJldHVybiBwYXJhbWV0ZXJUeXBlcy5pbmNsdWRlcyhwYXJhbWV0ZXIuJFR5cGUgYXMgQ29tbW9uQW5ub3RhdGlvblR5cGVzKTtcblx0fSxcblxuXHRfZW5yaWNoUGF0aDogZnVuY3Rpb24gKFxuXHRcdHBhdGg6IFBhdGgsXG5cdFx0cHJvcGVydHlQYXRoOiBzdHJpbmcsXG5cdFx0bG9jYWxEYXRhUHJvcGVydHlQYXRoOiBzdHJpbmcsXG5cdFx0cGFyYW1ldGVyOiBBbm5vdGF0aW9uVmFsdWVMaXN0UGFyYW1ldGVyLFxuXHRcdHByb3BlcnR5TmFtZTogc3RyaW5nIHwgdW5kZWZpbmVkLFxuXHRcdHByb3BlcnR5QW5ub3RhdGlvbnM6IEFubm90YXRpb25zRm9yUHJvcGVydHksXG5cdFx0ZXh0ZXJuYWxJZFBhdGg6IHN0cmluZyB8IHVuZGVmaW5lZFxuXHQpOiB2b2lkIHtcblx0XHRpZiAoXG5cdFx0XHQhcGF0aC5rZXkgJiZcblx0XHRcdFZhbHVlTGlzdEhlbHBlci5fcGFyYW1ldGVySXNBKHBhcmFtZXRlciwgW1xuXHRcdFx0XHRDb21tb25Bbm5vdGF0aW9uVHlwZXMuVmFsdWVMaXN0UGFyYW1ldGVyT3V0LFxuXHRcdFx0XHRDb21tb25Bbm5vdGF0aW9uVHlwZXMuVmFsdWVMaXN0UGFyYW1ldGVySW5PdXRcblx0XHRcdF0pICYmXG5cdFx0XHRsb2NhbERhdGFQcm9wZXJ0eVBhdGggPT09IHByb3BlcnR5TmFtZVxuXHRcdCkge1xuXHRcdFx0LyogRVhURVJOQUxJRCAqL1xuXHRcdFx0Y29uc3QgZXh0ZXJuYWxJZFByb3BlcnR5ID0gZXh0ZXJuYWxJZFBhdGg/LnNwbGl0KFwiL1wiKS5wb3AoKTtcblx0XHRcdHBhcmFtZXRlci5WYWx1ZUxpc3RQcm9wZXJ0eSA9IGV4dGVybmFsSWRQcm9wZXJ0eSA/IGV4dGVybmFsSWRQcm9wZXJ0eSA6IHBhcmFtZXRlci5WYWx1ZUxpc3RQcm9wZXJ0eTtcblx0XHRcdHBhdGguZmllbGRQcm9wZXJ0eVBhdGggPSBwcm9wZXJ0eVBhdGg7XG5cdFx0XHRwYXRoLmtleSA9IHBhcmFtZXRlci5WYWx1ZUxpc3RQcm9wZXJ0eTtcblxuXHRcdFx0Ly9Pbmx5IHRoZSB0ZXh0IGFubm90YXRpb24gb2YgdGhlIGtleSBjYW4gc3BlY2lmeSB0aGUgZGVzY3JpcHRpb25cblx0XHRcdHBhdGguZGVzY3JpcHRpb25QYXRoID0gcHJvcGVydHlBbm5vdGF0aW9uc1tBbm5vdGF0aW9uVGV4dF0/LiRQYXRoIHx8IFwiXCI7XG5cdFx0fVxuXHR9LFxuXG5cdF9lbnJpY2hLZXlzOiBmdW5jdGlvbiAodmhLZXlzOiBzdHJpbmdbXSwgcGFyYW1ldGVyOiBBbm5vdGF0aW9uVmFsdWVMaXN0UGFyYW1ldGVyKTogdm9pZCB7XG5cdFx0aWYgKFxuXHRcdFx0VmFsdWVMaXN0SGVscGVyLl9wYXJhbWV0ZXJJc0EocGFyYW1ldGVyLCBWYWx1ZUxpc3RIZWxwZXIuZ2V0SW5BbmRPdXRQYXJhbWV0ZXJzTGlzdCgpKSAmJlxuXHRcdFx0IXZoS2V5cy5pbmNsdWRlcyhwYXJhbWV0ZXIuVmFsdWVMaXN0UHJvcGVydHkpXG5cdFx0KSB7XG5cdFx0XHR2aEtleXMucHVzaChwYXJhbWV0ZXIuVmFsdWVMaXN0UHJvcGVydHkpO1xuXHRcdH1cblx0fSxcblxuXHQvKipcblx0ICogTWV0aG9kIHRvIHByZS1wcm9jZXNzIGEgdmFsdWUgbGlzdCBhbm5vdGF0aW9uIGJlZm9yZSB1c2luZyB0aGVtIGluIHRoZSB0ZW1wbGF0aW5nLlxuXHQgKiBAcGFyYW0gYW5ub3RhdGlvblZhbHVlTGlzdFR5cGVcblx0ICogQHBhcmFtIHByb3BlcnR5TmFtZVxuXHQgKiBAcGFyYW0gY29uZGl0aW9uTW9kZWxcblx0ICogQHBhcmFtIHZhbHVlSGVscFxuXHQgKiBAcGFyYW0gY29udGV4dFByZWZpeFxuXHQgKiBAcGFyYW0gdmhNZXRhTW9kZWxcblx0ICogQHBhcmFtIHZhbHVlSGVscFF1YWxpZmllclxuXHQgKiBAcGFyYW0gcGF5bG9hZFxuXHQgKiBAcmV0dXJucyBUaGUgVmFsdWVMaXN0SW5mbyB0byBiZSB1c2VkIGluIHRlbXBsYXRpbmdcblx0ICovXG5cdF9wcm9jZXNzUGFyYW1ldGVyczogZnVuY3Rpb24gKFxuXHRcdGFubm90YXRpb25WYWx1ZUxpc3RUeXBlOiBBbm5vdGF0aW9uVmFsdWVMaXN0VHlwZSxcblx0XHRwcm9wZXJ0eU5hbWU6IHN0cmluZyB8IHVuZGVmaW5lZCxcblx0XHRjb25kaXRpb25Nb2RlbDogc3RyaW5nIHwgdW5kZWZpbmVkLFxuXHRcdHZhbHVlSGVscDogVmFsdWVIZWxwLFxuXHRcdGNvbnRleHRQcmVmaXg6IHN0cmluZyxcblx0XHR2aE1ldGFNb2RlbDogT0RhdGFNZXRhTW9kZWwsXG5cdFx0dmFsdWVIZWxwUXVhbGlmaWVyOiBzdHJpbmcsXG5cdFx0cGF5bG9hZDogVmFsdWVIZWxwUGF5bG9hZFxuXHQpOiBWYWx1ZUxpc3RJbmZvIHwgdW5kZWZpbmVkIHtcblx0XHRjb25zdCBpc0Zvck11bHRpVmFsdWVGaWVsZCA9IHBheWxvYWQudXNlTXVsdGlWYWx1ZUZpZWxkO1xuXHRcdGNvbnN0IG1ldGFNb2RlbCA9IGFubm90YXRpb25WYWx1ZUxpc3RUeXBlLiRtb2RlbC5nZXRNZXRhTW9kZWwoKSxcblx0XHRcdGVudGl0eVNldFBhdGggPSBgLyR7YW5ub3RhdGlvblZhbHVlTGlzdFR5cGUuQ29sbGVjdGlvblBhdGh9YCxcblx0XHRcdGVudGl0eVR5cGUgPSBtZXRhTW9kZWwuZ2V0T2JqZWN0KGAke2VudGl0eVNldFBhdGh9L2ApO1xuXHRcdGlmIChlbnRpdHlUeXBlID09PSB1bmRlZmluZWQpIHtcblx0XHRcdExvZy5lcnJvcihgSW5jb25zaXN0ZW50IHZhbHVlIGhlbHAgbWV0YWRhdGE6IEVudGl0eSAke2VudGl0eVNldFBhdGh9IGlzIG5vdCBkZWZpbmVkYCk7XG5cdFx0XHRyZXR1cm47XG5cdFx0fVxuXG5cdFx0Y29uc3QgY29sdW1uRGVmcyA9IFZhbHVlTGlzdEhlbHBlci5fZ2V0Q29sdW1uRGVmaW5pdGlvbkZyb21TZWxlY3Rpb25GaWVsZHMobWV0YU1vZGVsLCBlbnRpdHlTZXRQYXRoKSxcblx0XHRcdHZoUGFyYW1ldGVyczogSW5PdXRQYXJhbWV0ZXJbXSA9IFtdLFxuXHRcdFx0dmhLZXlzOiBzdHJpbmdbXSA9IGVudGl0eVR5cGUuJEtleSA/IFsuLi5lbnRpdHlUeXBlLiRLZXldIDogW107XG5cblx0XHRjb25zdCBwYXRoOiBQYXRoID0ge1xuXHRcdFx0ZmllbGRQcm9wZXJ0eVBhdGg6IFwiXCIsXG5cdFx0XHRkZXNjcmlwdGlvblBhdGg6IFwiXCIsXG5cdFx0XHRrZXk6IFwiXCJcblx0XHR9O1xuXG5cdFx0Zm9yIChjb25zdCBwYXJhbWV0ZXIgb2YgYW5ub3RhdGlvblZhbHVlTGlzdFR5cGUuUGFyYW1ldGVycykge1xuXHRcdFx0Ly9BbGwgU3RyaW5nIGZpZWxkcyBhcmUgYWxsb3dlZCBmb3IgZmlsdGVyXG5cdFx0XHRjb25zdCBwcm9wZXJ0eVBhdGggPSBgLyR7YW5ub3RhdGlvblZhbHVlTGlzdFR5cGUuQ29sbGVjdGlvblBhdGh9LyR7cGFyYW1ldGVyLlZhbHVlTGlzdFByb3BlcnR5fWAsXG5cdFx0XHRcdHByb3BlcnR5ID0gbWV0YU1vZGVsLmdldE9iamVjdChwcm9wZXJ0eVBhdGgpLFxuXHRcdFx0XHRwcm9wZXJ0eUFubm90YXRpb25zID0gKG1ldGFNb2RlbC5nZXRPYmplY3QoYCR7cHJvcGVydHlQYXRofUBgKSB8fCB7fSkgYXMgQW5ub3RhdGlvbnNGb3JQcm9wZXJ0eSxcblx0XHRcdFx0bG9jYWxEYXRhUHJvcGVydHlQYXRoID0gcGFyYW1ldGVyLkxvY2FsRGF0YVByb3BlcnR5Py4kUHJvcGVydHlQYXRoIHx8IFwiXCI7XG5cblx0XHRcdGlmIChwcm9wZXJ0eUFubm90YXRpb25zW0Fubm90YXRpb25zUGVyc29uYWxEYXRhUG90ZW50aWFsbHlTZW5zaXRpdmVdKSB7XG5cdFx0XHRcdHBheWxvYWQuaXNQb3RlbnRpYWxseVNlbnNpdGl2ZSA9IHRydWU7XG5cdFx0XHR9XG5cblx0XHRcdC8vIElmIHByb3BlcnR5IGlzIHVuZGVmaW5lZCwgdGhlbiB0aGUgcHJvcGVydHkgY29taW5nIGZvciB0aGUgZW50cnkgaXNuJ3QgZGVmaW5lZCBpblxuXHRcdFx0Ly8gdGhlIG1ldGFtb2RlbCwgdGhlcmVmb3JlIHdlIGRvbid0IG5lZWQgdG8gYWRkIGl0IGluIHRoZSBpbi9vdXQgcGFyYW1ldGVyc1xuXHRcdFx0aWYgKHByb3BlcnR5KSB7XG5cdFx0XHRcdC8vIFNlYXJjaCBmb3IgdGhlICpvdXQgUGFyYW1ldGVyIG1hcHBlZCB0byB0aGUgbG9jYWwgcHJvcGVydHlcblx0XHRcdFx0VmFsdWVMaXN0SGVscGVyLl9lbnJpY2hQYXRoKFxuXHRcdFx0XHRcdHBhdGgsXG5cdFx0XHRcdFx0cHJvcGVydHlQYXRoLFxuXHRcdFx0XHRcdGxvY2FsRGF0YVByb3BlcnR5UGF0aCxcblx0XHRcdFx0XHRwYXJhbWV0ZXIsXG5cdFx0XHRcdFx0cHJvcGVydHlOYW1lLFxuXHRcdFx0XHRcdHByb3BlcnR5QW5ub3RhdGlvbnMsXG5cdFx0XHRcdFx0cGF5bG9hZC5leHRlcm5hbElkUGF0aFxuXHRcdFx0XHQpO1xuXG5cdFx0XHRcdGNvbnN0IHZhbHVlTGlzdFByb3BlcnR5ID0gcGFyYW1ldGVyLlZhbHVlTGlzdFByb3BlcnR5O1xuXHRcdFx0XHRWYWx1ZUxpc3RIZWxwZXIuX21lcmdlQ29sdW1uRGVmaW5pdGlvbnNGcm9tUHJvcGVydGllcyhcblx0XHRcdFx0XHRjb2x1bW5EZWZzLFxuXHRcdFx0XHRcdGFubm90YXRpb25WYWx1ZUxpc3RUeXBlLFxuXHRcdFx0XHRcdHZhbHVlTGlzdFByb3BlcnR5LFxuXHRcdFx0XHRcdHByb3BlcnR5LFxuXHRcdFx0XHRcdHByb3BlcnR5QW5ub3RhdGlvbnNcblx0XHRcdFx0KTtcblx0XHRcdH1cblxuXHRcdFx0Ly9JbiBhbmQgSW5PdXQgYW5kIE91dFxuXHRcdFx0aWYgKFxuXHRcdFx0XHRWYWx1ZUxpc3RIZWxwZXIuX3BhcmFtZXRlcklzQShwYXJhbWV0ZXIsIFtcblx0XHRcdFx0XHRDb21tb25Bbm5vdGF0aW9uVHlwZXMuVmFsdWVMaXN0UGFyYW1ldGVySW4sXG5cdFx0XHRcdFx0Q29tbW9uQW5ub3RhdGlvblR5cGVzLlZhbHVlTGlzdFBhcmFtZXRlck91dCxcblx0XHRcdFx0XHRDb21tb25Bbm5vdGF0aW9uVHlwZXMuVmFsdWVMaXN0UGFyYW1ldGVySW5PdXRcblx0XHRcdFx0XSkgJiZcblx0XHRcdFx0bG9jYWxEYXRhUHJvcGVydHlQYXRoICE9PSBwcm9wZXJ0eU5hbWVcblx0XHRcdCkge1xuXHRcdFx0XHRjb25zdCB2aFBhcmFtZXRlciA9IFZhbHVlTGlzdEhlbHBlci5fZ2V0VmhQYXJhbWV0ZXIoXG5cdFx0XHRcdFx0Y29uZGl0aW9uTW9kZWwsXG5cdFx0XHRcdFx0dmFsdWVIZWxwLFxuXHRcdFx0XHRcdGNvbnRleHRQcmVmaXgsXG5cdFx0XHRcdFx0cGFyYW1ldGVyLFxuXHRcdFx0XHRcdHZoTWV0YU1vZGVsLFxuXHRcdFx0XHRcdGxvY2FsRGF0YVByb3BlcnR5UGF0aFxuXHRcdFx0XHQpO1xuXHRcdFx0XHRpZiAoXG5cdFx0XHRcdFx0IWlzRm9yTXVsdGlWYWx1ZUZpZWxkIHx8XG5cdFx0XHRcdFx0KGlzRm9yTXVsdGlWYWx1ZUZpZWxkICYmIFZhbHVlTGlzdEhlbHBlci5fcGFyYW1ldGVySXNBKHBhcmFtZXRlciwgW0NvbW1vbkFubm90YXRpb25UeXBlcy5WYWx1ZUxpc3RQYXJhbWV0ZXJJbl0pKVxuXHRcdFx0XHQpIHtcblx0XHRcdFx0XHQvLyBpbiBjYXNlIG9mIE11bHRpdmFsdWUgRmllbGQgd2UgZGlzcmVnYXJkIFZhbHVlTGlzdFBhcmFtZXRlckluT3V0XG5cdFx0XHRcdFx0dmhQYXJhbWV0ZXJzLnB1c2godmhQYXJhbWV0ZXIpO1xuXHRcdFx0XHR9XG5cdFx0XHR9XG5cblx0XHRcdC8vQ29uc3RhbnQgYXMgSW5QYXJhbXRlciBmb3IgZmlsdGVyaW5nXG5cdFx0XHRpZiAocGFyYW1ldGVyLiRUeXBlID09PSBBbm5vdGF0aW9uVmFsdWVMaXN0UGFyYW1ldGVyQ29uc3RhbnQpIHtcblx0XHRcdFx0dmhQYXJhbWV0ZXJzLnB1c2goe1xuXHRcdFx0XHRcdHBhcm1ldGVyVHlwZTogcGFyYW1ldGVyLiRUeXBlLFxuXHRcdFx0XHRcdHNvdXJjZTogcGFyYW1ldGVyLlZhbHVlTGlzdFByb3BlcnR5LFxuXHRcdFx0XHRcdGhlbHBQYXRoOiBwYXJhbWV0ZXIuVmFsdWVMaXN0UHJvcGVydHksXG5cdFx0XHRcdFx0Y29uc3RhbnRWYWx1ZTogcGFyYW1ldGVyLkNvbnN0YW50LFxuXHRcdFx0XHRcdGluaXRpYWxWYWx1ZUlzU2lnbmlmaWNhbnQ6IEJvb2xlYW4ocGFyYW1ldGVyLkluaXRpYWxWYWx1ZUlzU2lnbmlmaWNhbnQpXG5cdFx0XHRcdH0pO1xuXHRcdFx0fVxuXG5cdFx0XHQvLyBFbnJpY2gga2V5cyB3aXRoIG91dC1wYXJhbWV0ZXJzXG5cdFx0XHRWYWx1ZUxpc3RIZWxwZXIuX2VucmljaEtleXModmhLZXlzLCBwYXJhbWV0ZXIpO1xuXHRcdH1cblxuXHRcdC8qIEVuc3VyZSB0aGF0IHZoS2V5cyBhcmUgcGFydCBvZiB0aGUgY29sdW1uRGVmcywgb3RoZXJ3aXNlIGl0IGlzIG5vdCBjb25zaWRlcmVkIGluICRzZWxlY3QgKEJDUCAyMjcwMTQxMTU0KSAqL1xuXHRcdGZvciAoY29uc3QgdmhLZXkgb2YgdmhLZXlzKSB7XG5cdFx0XHRpZiAoY29sdW1uTm90QWxyZWFkeURlZmluZWQoY29sdW1uRGVmcywgdmhLZXkpKSB7XG5cdFx0XHRcdGNvbnN0IGNvbHVtbkRlZjogQ29sdW1uRGVmID0ge1xuXHRcdFx0XHRcdHBhdGg6IHZoS2V5LFxuXHRcdFx0XHRcdCRUeXBlOiBtZXRhTW9kZWwuZ2V0T2JqZWN0KGAvJHthbm5vdGF0aW9uVmFsdWVMaXN0VHlwZS5Db2xsZWN0aW9uUGF0aH0vJHtwYXRoLmtleX1gKT8uJFR5cGUsXG5cdFx0XHRcdFx0bGFiZWw6IFwiXCIsXG5cdFx0XHRcdFx0c29ydGFibGU6IGZhbHNlLFxuXHRcdFx0XHRcdGZpbHRlcmFibGU6IHVuZGVmaW5lZFxuXHRcdFx0XHR9O1xuXHRcdFx0XHRjb2x1bW5EZWZzLnB1c2goY29sdW1uRGVmKTtcblx0XHRcdH1cblx0XHR9XG5cblx0XHRjb25zdCB2YWx1ZWxpc3RJbmZvOiBWYWx1ZUxpc3RJbmZvID0ge1xuXHRcdFx0a2V5UGF0aDogcGF0aC5rZXksXG5cdFx0XHRkZXNjcmlwdGlvblBhdGg6IHBhdGguZGVzY3JpcHRpb25QYXRoLFxuXHRcdFx0ZmllbGRQcm9wZXJ0eVBhdGg6IHBhdGguZmllbGRQcm9wZXJ0eVBhdGgsXG5cdFx0XHR2aEtleXM6IHZoS2V5cyxcblx0XHRcdHZoUGFyYW1ldGVyczogdmhQYXJhbWV0ZXJzLFxuXHRcdFx0dmFsdWVMaXN0SW5mbzogYW5ub3RhdGlvblZhbHVlTGlzdFR5cGUsXG5cdFx0XHRjb2x1bW5EZWZzOiBjb2x1bW5EZWZzLFxuXHRcdFx0dmFsdWVIZWxwUXVhbGlmaWVyXG5cdFx0fTtcblx0XHRyZXR1cm4gdmFsdWVsaXN0SW5mbztcblx0fSxcblxuXHRfbG9nRXJyb3I6IGZ1bmN0aW9uIChwcm9wZXJ0eVBhdGg6IHN0cmluZywgZXJyb3I/OiB1bmtub3duKTogdm9pZCB7XG5cdFx0Y29uc3Qgc3RhdHVzID0gZXJyb3IgPyAoZXJyb3IgYXMgWE1MSHR0cFJlcXVlc3QpLnN0YXR1cyA6IHVuZGVmaW5lZDtcblx0XHRjb25zdCBtZXNzYWdlID0gZXJyb3IgaW5zdGFuY2VvZiBFcnJvciA/IGVycm9yLm1lc3NhZ2UgOiBTdHJpbmcoZXJyb3IpO1xuXHRcdGNvbnN0IG1zZyA9IHN0YXR1cyA9PT0gNDA0ID8gYE1ldGFkYXRhIG5vdCBmb3VuZCAoJHtzdGF0dXN9KSBmb3IgdmFsdWUgaGVscCBvZiBwcm9wZXJ0eSAke3Byb3BlcnR5UGF0aH1gIDogbWVzc2FnZTtcblxuXHRcdExvZy5lcnJvcihtc2cpO1xuXHR9LFxuXHQvKipcblx0ICogTWV0aG9kIHRvIGNvbXB1dGUgdGhlIHZhbHVlIGxpc3QgaW5mb3MgYmFzZWQgb24gdGhlIHZhbHVlIGxpc3QgYW5ub3RhdGlvbnMgYmVmb3JlIHVzaW5nIHRoZW0gYXQgdGVtcGxhdGluZy5cblx0ICogQHBhcmFtIHZhbHVlSGVscFxuXHQgKiBAcGFyYW0gcHJvcGVydHlQYXRoXG5cdCAqIEBwYXJhbSBwYXlsb2FkXG5cdCAqIEBwYXJhbSB2aE1ldGFNb2RlbFxuXHQgKiBAcmV0dXJucyBUaGUgdmFsdWUgbGlzdCBpbmZvc1xuXHQgKi9cblx0Z2V0VmFsdWVMaXN0SW5mbzogYXN5bmMgZnVuY3Rpb24gKFxuXHRcdHZhbHVlSGVscDogVmFsdWVIZWxwLFxuXHRcdHByb3BlcnR5UGF0aDogc3RyaW5nLFxuXHRcdHBheWxvYWQ6IFZhbHVlSGVscFBheWxvYWQsXG5cdFx0dmhNZXRhTW9kZWw6IE9EYXRhTWV0YU1vZGVsXG5cdCk6IFByb21pc2U8VmFsdWVMaXN0SW5mb1tdPiB7XG5cdFx0Y29uc3QgYmluZGluZ0NvbnRleHQgPSB2YWx1ZUhlbHAuZ2V0QmluZGluZ0NvbnRleHQoKSBhcyBDb250ZXh0IHwgdW5kZWZpbmVkLFxuXHRcdFx0Y29uZGl0aW9uTW9kZWwgPSBwYXlsb2FkLmNvbmRpdGlvbk1vZGVsLFxuXHRcdFx0dmFsdWVMaXN0SW5mb3M6IFZhbHVlTGlzdEluZm9bXSA9IFtdLFxuXHRcdFx0cHJvcGVydHlQYXRoUGFydHMgPSBwcm9wZXJ0eVBhdGguc3BsaXQoXCIvXCIpO1xuXHRcdHRyeSB7XG5cdFx0XHRjb25zdCB2YWx1ZUxpc3RCeVF1YWxpZmllciA9IGF3YWl0IHZoTWV0YU1vZGVsLnJlcXVlc3RWYWx1ZUxpc3RJbmZvKHByb3BlcnR5UGF0aCwgdHJ1ZSwgYmluZGluZ0NvbnRleHQpO1xuXHRcdFx0Y29uc3QgdmFsdWVIZWxwUXVhbGlmaWVycyA9IFZhbHVlTGlzdEhlbHBlci5wdXREZWZhdWx0UXVhbGlmaWVyRmlyc3QoT2JqZWN0LmtleXModmFsdWVMaXN0QnlRdWFsaWZpZXIpKSxcblx0XHRcdFx0cHJvcGVydHlOYW1lID0gcHJvcGVydHlQYXRoUGFydHMucG9wKCk7XG5cblx0XHRcdGNvbnN0IGNvbnRleHRQcmVmaXggPSBwYXlsb2FkLnVzZU11bHRpVmFsdWVGaWVsZCA/IFZhbHVlTGlzdEhlbHBlci5fZ2V0Q29udGV4dFByZWZpeChiaW5kaW5nQ29udGV4dCwgcHJvcGVydHlQYXRoUGFydHMpIDogXCJcIjtcblxuXHRcdFx0Zm9yIChjb25zdCB2YWx1ZUhlbHBRdWFsaWZpZXIgb2YgdmFsdWVIZWxwUXVhbGlmaWVycykge1xuXHRcdFx0XHQvLyBBZGQgY29sdW1uIGRlZmluaXRpb25zIGZvciBwcm9wZXJ0aWVzIGRlZmluZWQgYXMgU2VsZWN0aW9uIGZpZWxkcyBvbiB0aGUgQ29sbGVjdGlvblBhdGggZW50aXR5IHNldC5cblx0XHRcdFx0Y29uc3QgYW5ub3RhdGlvblZhbHVlTGlzdFR5cGUgPSB2YWx1ZUxpc3RCeVF1YWxpZmllclt2YWx1ZUhlbHBRdWFsaWZpZXJdO1xuXG5cdFx0XHRcdGNvbnN0IHZhbHVlTGlzdEluZm8gPSBWYWx1ZUxpc3RIZWxwZXIuX3Byb2Nlc3NQYXJhbWV0ZXJzKFxuXHRcdFx0XHRcdGFubm90YXRpb25WYWx1ZUxpc3RUeXBlLFxuXHRcdFx0XHRcdHByb3BlcnR5TmFtZSxcblx0XHRcdFx0XHRjb25kaXRpb25Nb2RlbCxcblx0XHRcdFx0XHR2YWx1ZUhlbHAsXG5cdFx0XHRcdFx0Y29udGV4dFByZWZpeCxcblx0XHRcdFx0XHR2aE1ldGFNb2RlbCxcblx0XHRcdFx0XHRhbm5vdGF0aW9uVmFsdWVMaXN0VHlwZS4kcXVhbGlmaWVyID8/IHZhbHVlSGVscFF1YWxpZmllciwgLy8gZm9yIFZhbHVlTGlzdFdpdGhGaXhlZFZhbHVlcywgZ2V0IHRoZSBxdWFsaWZpZXIgZnJvbSAkcXVhbGlmaWVyXG5cdFx0XHRcdFx0cGF5bG9hZFxuXHRcdFx0XHQpO1xuXHRcdFx0XHQvKiBPbmx5IGNvbnNpc3RlbnQgdmFsdWUgaGVscCBkZWZpbml0aW9ucyBzaGFsbCBiZSBwYXJ0IG9mIHRoZSB2YWx1ZSBoZWxwICovXG5cdFx0XHRcdGlmICh2YWx1ZUxpc3RJbmZvKSB7XG5cdFx0XHRcdFx0dmFsdWVMaXN0SW5mb3MucHVzaCh2YWx1ZUxpc3RJbmZvKTtcblx0XHRcdFx0fVxuXHRcdFx0fVxuXHRcdH0gY2F0Y2ggKGVycikge1xuXHRcdFx0dGhpcy5fbG9nRXJyb3IocHJvcGVydHlQYXRoLCBlcnIpO1xuXG5cdFx0XHRWYWx1ZUxpc3RIZWxwZXIuZGVzdHJveVZIQ29udGVudCh2YWx1ZUhlbHApO1xuXHRcdH1cblx0XHRyZXR1cm4gdmFsdWVMaXN0SW5mb3M7XG5cdH0sXG5cblx0QUxMRlJBR01FTlRTOiBbXSBhcyB7XG5cdFx0cGF0aDogc3RyaW5nO1xuXHRcdGZyYWdtZW50TmFtZTogc3RyaW5nO1xuXHRcdGZyYWdtZW50OiB1bmtub3duO1xuXHR9W10sXG5cdGxvZ0ZyYWdtZW50OiB1bmRlZmluZWQgYXMgTG9nRnJhZ21lbnRNZXRob2QgfCB1bmRlZmluZWQsXG5cblx0X2xvZ1RlbXBsYXRlZEZyYWdtZW50czogZnVuY3Rpb24gKHByb3BlcnR5UGF0aDogc3RyaW5nLCBmcmFnbWVudE5hbWU6IHN0cmluZywgZnJhZ21lbnREZWZpbml0aW9uOiB1bmtub3duKTogdm9pZCB7XG5cdFx0Y29uc3QgbG9nSW5mbyA9IHtcblx0XHRcdHBhdGg6IHByb3BlcnR5UGF0aCxcblx0XHRcdGZyYWdtZW50TmFtZTogZnJhZ21lbnROYW1lLFxuXHRcdFx0ZnJhZ21lbnQ6IGZyYWdtZW50RGVmaW5pdGlvblxuXHRcdH07XG5cdFx0aWYgKExvZy5nZXRMZXZlbCgpID09PSBMb2cuTGV2ZWwuREVCVUcpIHtcblx0XHRcdC8vSW4gZGVidWcgbW9kZSB3ZSBsb2cgYWxsIGdlbmVyYXRlZCBmcmFnbWVudHNcblx0XHRcdFZhbHVlTGlzdEhlbHBlci5BTExGUkFHTUVOVFMgPSBWYWx1ZUxpc3RIZWxwZXIuQUxMRlJBR01FTlRTIHx8IFtdO1xuXHRcdFx0VmFsdWVMaXN0SGVscGVyLkFMTEZSQUdNRU5UUy5wdXNoKGxvZ0luZm8pO1xuXHRcdH1cblx0XHRpZiAoVmFsdWVMaXN0SGVscGVyLmxvZ0ZyYWdtZW50KSB7XG5cdFx0XHQvL09uZSBUb29sIFN1YnNjcmliZXIgYWxsb3dlZFxuXHRcdFx0c2V0VGltZW91dChmdW5jdGlvbiAoKSB7XG5cdFx0XHRcdFZhbHVlTGlzdEhlbHBlci5sb2dGcmFnbWVudD8uKGxvZ0luZm8pO1xuXHRcdFx0fSwgMCk7XG5cdFx0fVxuXHR9LFxuXG5cdF90ZW1wbGF0ZUZyYWdtZW50OiBhc3luYyBmdW5jdGlvbiA8VCBleHRlbmRzIFRhYmxlIHwgTWRjSW5uZXJUYWJsZSB8IE1kY0ZpbHRlckJhciB8IFZhbHVlSGVscD4oXG5cdFx0ZnJhZ21lbnROYW1lOiBzdHJpbmcsXG5cdFx0dmFsdWVMaXN0SW5mbzogVmFsdWVMaXN0SW5mbyxcblx0XHRzb3VyY2VNb2RlbDogSlNPTk1vZGVsLFxuXHRcdHByb3BlcnR5UGF0aDogc3RyaW5nLFxuXHRcdHZhbHVlSGVscDogVmFsdWVIZWxwXG5cdCk6IFByb21pc2U8VD4ge1xuXHRcdGNvbnN0IGNvbnRhaW5pbmdWaWV3ID0gQ29tbW9uVXRpbHMuZ2V0VGFyZ2V0Vmlldyh2YWx1ZUhlbHApO1xuXHRcdGNvbnN0IGFwcENvbXBvbmVudCA9IENvbW1vblV0aWxzLmdldEFwcENvbXBvbmVudChDb21tb25VdGlscy5nZXRUYXJnZXRWaWV3KHZhbHVlSGVscCkpO1xuXG5cdFx0Y29uc3QgbG9jYWxWYWx1ZUxpc3RJbmZvID0gdmFsdWVMaXN0SW5mby52YWx1ZUxpc3RJbmZvLFxuXHRcdFx0dmFsdWVMaXN0TW9kZWwgPSBuZXcgSlNPTk1vZGVsKGxvY2FsVmFsdWVMaXN0SW5mbyksXG5cdFx0XHR2YWx1ZUxpc3RTZXJ2aWNlTWV0YU1vZGVsID0gbG9jYWxWYWx1ZUxpc3RJbmZvLiRtb2RlbC5nZXRNZXRhTW9kZWwoKSxcblx0XHRcdHZpZXdEYXRhID0gbmV3IEpTT05Nb2RlbCh7XG5cdFx0XHRcdGNvbnZlcnRlclR5cGU6IFwiTGlzdFJlcG9ydFwiLFxuXHRcdFx0XHRjb2x1bW5zOiB2YWx1ZUxpc3RJbmZvLmNvbHVtbkRlZnMgfHwgbnVsbFxuXHRcdFx0fSk7XG5cblx0XHRjb25zdCBmcmFnbWVudERlZmluaXRpb24gPSBhd2FpdCBYTUxQcmVwcm9jZXNzb3IucHJvY2Vzcyhcblx0XHRcdFhNTFRlbXBsYXRlUHJvY2Vzc29yLmxvYWRUZW1wbGF0ZShmcmFnbWVudE5hbWUsIFwiZnJhZ21lbnRcIiksXG5cdFx0XHR7IG5hbWU6IGZyYWdtZW50TmFtZSB9LFxuXHRcdFx0e1xuXHRcdFx0XHRiaW5kaW5nQ29udGV4dHM6IHtcblx0XHRcdFx0XHR2YWx1ZUxpc3Q6IHZhbHVlTGlzdE1vZGVsLmNyZWF0ZUJpbmRpbmdDb250ZXh0KFwiL1wiKSxcblx0XHRcdFx0XHRjb250ZXh0UGF0aDogdmFsdWVMaXN0U2VydmljZU1ldGFNb2RlbC5jcmVhdGVCaW5kaW5nQ29udGV4dChgLyR7bG9jYWxWYWx1ZUxpc3RJbmZvLkNvbGxlY3Rpb25QYXRofS9gKSxcblx0XHRcdFx0XHRzb3VyY2U6IHNvdXJjZU1vZGVsLmNyZWF0ZUJpbmRpbmdDb250ZXh0KFwiL1wiKVxuXHRcdFx0XHR9LFxuXHRcdFx0XHRtb2RlbHM6IHtcblx0XHRcdFx0XHR2YWx1ZUxpc3Q6IHZhbHVlTGlzdE1vZGVsLFxuXHRcdFx0XHRcdGNvbnRleHRQYXRoOiB2YWx1ZUxpc3RTZXJ2aWNlTWV0YU1vZGVsLFxuXHRcdFx0XHRcdHNvdXJjZTogc291cmNlTW9kZWwsXG5cdFx0XHRcdFx0bWV0YU1vZGVsOiB2YWx1ZUxpc3RTZXJ2aWNlTWV0YU1vZGVsLFxuXHRcdFx0XHRcdHZpZXdEYXRhOiB2aWV3RGF0YVxuXHRcdFx0XHR9LFxuXHRcdFx0XHRhcHBDb21wb25lbnRcblx0XHRcdH1cblx0XHQpO1xuXHRcdFZhbHVlTGlzdEhlbHBlci5fbG9nVGVtcGxhdGVkRnJhZ21lbnRzKHByb3BlcnR5UGF0aCwgZnJhZ21lbnROYW1lLCBmcmFnbWVudERlZmluaXRpb24pO1xuXHRcdGNvbnN0IHRlbXBsYXRlQ29tcG9uZW50ID0gY29udGFpbmluZ1ZpZXcuZ2V0Q29udHJvbGxlcigpPy5nZXRPd25lckNvbXBvbmVudCgpO1xuXHRcdGlmICh0ZW1wbGF0ZUNvbXBvbmVudCkge1xuXHRcdFx0cmV0dXJuIHRlbXBsYXRlQ29tcG9uZW50LnJ1bkFzT3duZXIoYXN5bmMgKCkgPT4ge1xuXHRcdFx0XHRyZXR1cm4gKGF3YWl0IEZyYWdtZW50LmxvYWQoe1xuXHRcdFx0XHRcdGRlZmluaXRpb246IGZyYWdtZW50RGVmaW5pdGlvbixcblx0XHRcdFx0XHRjb250cm9sbGVyOiBjb250YWluaW5nVmlldy5nZXRDb250cm9sbGVyKClcblx0XHRcdFx0fSkpIGFzIFQ7XG5cdFx0XHR9KTtcblx0XHR9IGVsc2Uge1xuXHRcdFx0cmV0dXJuIChhd2FpdCBGcmFnbWVudC5sb2FkKHtcblx0XHRcdFx0ZGVmaW5pdGlvbjogZnJhZ21lbnREZWZpbml0aW9uLFxuXHRcdFx0XHRjb250cm9sbGVyOiBjb250YWluaW5nVmlldy5nZXRDb250cm9sbGVyKClcblx0XHRcdH0pKSBhcyBUO1xuXHRcdH1cblx0fSxcblxuXHRfZ2V0Q29udGVudElkOiBmdW5jdGlvbiAodmFsdWVIZWxwSWQ6IHN0cmluZywgdmFsdWVIZWxwUXVhbGlmaWVyOiBzdHJpbmcsIGlzVHlwZWFoZWFkOiBib29sZWFuKTogc3RyaW5nIHtcblx0XHRjb25zdCBjb250ZW50VHlwZSA9IGlzVHlwZWFoZWFkID8gXCJQb3BvdmVyXCIgOiBcIkRpYWxvZ1wiO1xuXG5cdFx0cmV0dXJuIGAke3ZhbHVlSGVscElkfTo6JHtjb250ZW50VHlwZX06OnF1YWxpZmllcjo6JHt2YWx1ZUhlbHBRdWFsaWZpZXJ9YDtcblx0fSxcblxuXHRfYWRkSW5PdXRQYXJhbWV0ZXJzVG9QYXlsb2FkOiBmdW5jdGlvbiAocGF5bG9hZDogVmFsdWVIZWxwUGF5bG9hZCwgdmFsdWVMaXN0SW5mbzogVmFsdWVMaXN0SW5mbyk6IHZvaWQge1xuXHRcdGNvbnN0IHZhbHVlSGVscFF1YWxpZmllciA9IHZhbHVlTGlzdEluZm8udmFsdWVIZWxwUXVhbGlmaWVyO1xuXG5cdFx0aWYgKCFwYXlsb2FkLnF1YWxpZmllcnMpIHtcblx0XHRcdHBheWxvYWQucXVhbGlmaWVycyA9IHt9O1xuXHRcdH1cblxuXHRcdGlmICghcGF5bG9hZC5xdWFsaWZpZXJzW3ZhbHVlSGVscFF1YWxpZmllcl0pIHtcblx0XHRcdGNvbnN0IHZoUHJvcGVydGllcyA9IG5ldyBTZXQ8c3RyaW5nPigpO1xuXHRcdFx0dmFsdWVMaXN0SW5mby5jb2x1bW5EZWZzLmZvckVhY2goKGNvbHVtbikgPT4ge1xuXHRcdFx0XHRpZiAoIWNvbHVtbi5wYXRoLmluY2x1ZGVzKFwiKlwiKSkge1xuXHRcdFx0XHRcdC8vIEluIGNhc2Ugb2YgMS4ubiB0aGUgY29uZGl0aW9uIHBhdGggaW5jbHVkZXMgYSAqIHNvIHdlIGhhdmUgdG8gcmVtb3ZlIHRoaXNcblx0XHRcdFx0XHR2aFByb3BlcnRpZXMuYWRkKGNvbHVtbi5wYXRoKTtcblx0XHRcdFx0fVxuXHRcdFx0XHRpZiAoY29sdW1uLnRleHRQYXRoKSB7XG5cdFx0XHRcdFx0dmhQcm9wZXJ0aWVzLmFkZChjb2x1bW4udGV4dFBhdGgpO1xuXHRcdFx0XHR9XG5cdFx0XHR9KTtcblx0XHRcdHBheWxvYWQucXVhbGlmaWVyc1t2YWx1ZUhlbHBRdWFsaWZpZXJdID0ge1xuXHRcdFx0XHR2aEtleXM6IHZhbHVlTGlzdEluZm8udmhLZXlzLFxuXHRcdFx0XHR2aFBhcmFtZXRlcnM6IHZhbHVlTGlzdEluZm8udmhQYXJhbWV0ZXJzLFxuXHRcdFx0XHR2aFByb3BlcnRpZXM6IEFycmF5LmZyb20odmhQcm9wZXJ0aWVzKVxuXHRcdFx0fTtcblx0XHR9XG5cdH0sXG5cblx0X2dldFZhbHVlSGVscENvbHVtbkRpc3BsYXlGb3JtYXQ6IGZ1bmN0aW9uIChcblx0XHRwcm9wZXJ0eUFubm90YXRpb25zOiBBbm5vdGF0aW9uc0ZvclByb3BlcnR5LFxuXHRcdGlzVmFsdWVIZWxwV2l0aEZpeGVkVmFsdWVzOiBib29sZWFuXG5cdCk6IERpc3BsYXlGb3JtYXQge1xuXHRcdGNvbnN0IGRpc3BsYXlNb2RlID0gQ29tbW9uVXRpbHMuY29tcHV0ZURpc3BsYXlNb2RlKHByb3BlcnR5QW5ub3RhdGlvbnMsIHVuZGVmaW5lZCksXG5cdFx0XHR0ZXh0QW5ub3RhdGlvbiA9IHByb3BlcnR5QW5ub3RhdGlvbnMgJiYgcHJvcGVydHlBbm5vdGF0aW9uc1tBbm5vdGF0aW9uVGV4dF0sXG5cdFx0XHR0ZXh0QXJyYW5nZW1lbnRBbm5vdGF0aW9uID0gdGV4dEFubm90YXRpb24gJiYgcHJvcGVydHlBbm5vdGF0aW9uc1tBbm5vdGF0aW9uVGV4dFVJVGV4dEFycmFuZ2VtZW50XTtcblxuXHRcdGlmIChpc1ZhbHVlSGVscFdpdGhGaXhlZFZhbHVlcykge1xuXHRcdFx0cmV0dXJuIHRleHRBbm5vdGF0aW9uICYmIHR5cGVvZiB0ZXh0QW5ub3RhdGlvbiAhPT0gXCJzdHJpbmdcIiAmJiB0ZXh0QW5ub3RhdGlvbi4kUGF0aCA/IGRpc3BsYXlNb2RlIDogXCJWYWx1ZVwiO1xuXHRcdH0gZWxzZSB7XG5cdFx0XHQvLyBPbmx5IGV4cGxpY2l0IGRlZmluZWQgVGV4dEFycmFuZ2VtZW50cyBpbiBhIFZhbHVlIEhlbHAgd2l0aCBEaWFsb2cgYXJlIGNvbnNpZGVyZWRcblx0XHRcdHJldHVybiB0ZXh0QXJyYW5nZW1lbnRBbm5vdGF0aW9uID8gZGlzcGxheU1vZGUgOiBcIlZhbHVlXCI7XG5cdFx0fVxuXHR9LFxuXG5cdF9nZXRXaWR0aEluUmVtOiBmdW5jdGlvbiAoY29udHJvbDogQ29udHJvbCwgaXNVbml0VmFsdWVIZWxwOiBib29sZWFuKTogbnVtYmVyIHtcblx0XHRsZXQgd2lkdGggPSBjb250cm9sLiQoKS53aWR0aCgpOyAvLyBKUXVlcnlcblx0XHRpZiAoaXNVbml0VmFsdWVIZWxwICYmIHdpZHRoKSB7XG5cdFx0XHR3aWR0aCA9IDAuMyAqIHdpZHRoO1xuXHRcdH1cblx0XHRjb25zdCBmbG9hdFdpZHRoID0gd2lkdGggPyBwYXJzZUZsb2F0KFN0cmluZyhSZW0uZnJvbVB4KHdpZHRoKSkpIDogMDtcblxuXHRcdHJldHVybiBpc05hTihmbG9hdFdpZHRoKSA/IDAgOiBmbG9hdFdpZHRoO1xuXHR9LFxuXG5cdF9nZXRUYWJsZVdpZHRoOiBmdW5jdGlvbiAodGFibGU6IFRhYmxlLCBtaW5XaWR0aDogbnVtYmVyLCBpc011bHRpU2VsZWN0OiBib29sZWFuKTogc3RyaW5nIHtcblx0XHRsZXQgd2lkdGg6IHN0cmluZztcblx0XHRjb25zdCBjb2x1bW5zID0gdGFibGUuZ2V0Q29sdW1ucygpLFxuXHRcdFx0dmlzaWJsZUNvbHVtbnMgPVxuXHRcdFx0XHQoY29sdW1ucyAmJlxuXHRcdFx0XHRcdGNvbHVtbnMuZmlsdGVyKGZ1bmN0aW9uIChjb2x1bW4pIHtcblx0XHRcdFx0XHRcdHJldHVybiBjb2x1bW4gJiYgY29sdW1uLmdldFZpc2libGUgJiYgY29sdW1uLmdldFZpc2libGUoKTtcblx0XHRcdFx0XHR9KSkgfHxcblx0XHRcdFx0W10sXG5cdFx0XHQvLyB3ZSBhZGQgMWVtIGZvciBldmVyeSBjb2x1bW4gYW5kIDIuNWVtIGZvciBhIG11bHRpc2VsZWN0IGNoZWNrYm94XG5cdFx0XHRpbml0aWFsU3VtID0gdmlzaWJsZUNvbHVtbnMubGVuZ3RoICsgKGlzTXVsdGlTZWxlY3QgPyAyLjUgOiAwKSxcblx0XHRcdHN1bVdpZHRoID0gdmlzaWJsZUNvbHVtbnMucmVkdWNlKGZ1bmN0aW9uIChzdW0sIGNvbHVtbikge1xuXHRcdFx0XHR3aWR0aCA9IGNvbHVtbi5nZXRXaWR0aCgpO1xuXHRcdFx0XHRpZiAod2lkdGggJiYgd2lkdGguZW5kc1dpdGgoXCJweFwiKSkge1xuXHRcdFx0XHRcdHdpZHRoID0gU3RyaW5nKFJlbS5mcm9tUHgod2lkdGgpKTtcblx0XHRcdFx0fVxuXHRcdFx0XHRjb25zdCBmbG9hdFdpZHRoID0gcGFyc2VGbG9hdCh3aWR0aCk7XG5cblx0XHRcdFx0cmV0dXJuIHN1bSArIChpc05hTihmbG9hdFdpZHRoKSA/IDkgOiBmbG9hdFdpZHRoKTtcblx0XHRcdH0sIGluaXRpYWxTdW0pO1xuXHRcdHJldHVybiBgJHtNYXRoLm1heChzdW1XaWR0aCwgbWluV2lkdGgpfWVtYDtcblx0fSxcblxuXHQvKipcblx0ICogQ29uc3RydWN0cyBKU09OIE1vZGVsIHdpdGggdGhlIHByb3BlcnRpZXMgZm9yIHRoZSB2YWx1ZSBoZWxwIGRpYWxvZyBmcmFnbWVudCB3aGVyZSBpdCBpcyB1c2VkIGFzIGEgc291cmNlIG9iamVjdC5cblx0ICogQHBhcmFtIHZhbHVlTGlzdEluZm8gVmFsdWUgbGlzdCBpbmZvXG5cdCAqIEBwYXJhbSBwcm9wZXJ0eVBhdGggVGhlIHByb3BlcnR5IHBhdGhcblx0ICogQHBhcmFtIGNvbnRlbnQgQ29udGVudCBmb3Igd2hpY2ggdGhpcyBmcmFnbWVudCB3aWxsIGJlIHNldFxuXHQgKiBAcGFyYW0gcGF5bG9hZCBWYWx1ZSBoZWxwIHBheWxvYWRcblx0ICogQHJldHVybnMgSlNPTk1vZGVsXG5cdCAqIEBwcml2YXRlXG5cdCAqL1xuXHRfZ2V0SlNPTk1vZGVsRm9yRGlhbG9nOiBmdW5jdGlvbiAoXG5cdFx0dmFsdWVMaXN0SW5mbzogVmFsdWVMaXN0SW5mbyxcblx0XHRwcm9wZXJ0eVBhdGg6IHN0cmluZyxcblx0XHRjb250ZW50OiBNRENUYWJsZSxcblx0XHRwYXlsb2FkOiBWYWx1ZUhlbHBQYXlsb2FkXG5cdCk6IEpTT05Nb2RlbCB7XG5cdFx0Y29uc3QgaXNEcm9wRG93bkxpc3RlID0gZmFsc2UsXG5cdFx0XHRpc0RpYWxvZ1RhYmxlID0gdHJ1ZSxcblx0XHRcdGNvbHVtbkluZm8gPSBWYWx1ZUxpc3RIZWxwZXIuZ2V0Q29sdW1uVmlzaWJpbGl0eUluZm8odmFsdWVMaXN0SW5mby52YWx1ZUxpc3RJbmZvLCBwcm9wZXJ0eVBhdGgsIGlzRHJvcERvd25MaXN0ZSwgaXNEaWFsb2dUYWJsZSk7XG5cblx0XHRyZXR1cm4gbmV3IEpTT05Nb2RlbCh7XG5cdFx0XHRpZDogY29udGVudC5nZXRJZCgpLFxuXHRcdFx0Z3JvdXBJZDogcGF5bG9hZC5yZXF1ZXN0R3JvdXBJZCxcblx0XHRcdGJTdWdnZXN0aW9uOiBmYWxzZSxcblx0XHRcdGNvbHVtbkluZm86IGNvbHVtbkluZm8sXG5cdFx0XHR2YWx1ZUhlbHBXaXRoRml4ZWRWYWx1ZXM6IGlzRHJvcERvd25MaXN0ZVxuXHRcdH0pO1xuXHR9LFxuXG5cdC8qKlxuXHQgKiBDb25zdHJ1Y3RzIEpTT04gTW9kZWwgd2l0aCB0aGUgcHJvcGVydGllcyBmb3IgdGhlIGRlZmluZSBjb25kaXRpb24gdmFsdWUgaGVscCBmcmFnbWVudCBpbiB0aGUgdmFsdWUgaGVscCBkaWFsb2cgd2hlcmUgaXQgaXMgdXNlZCBhcyBhIHNvdXJjZSBvYmplY3QuXG5cdCAqIEBwYXJhbSB2YWx1ZUxpc3RJbmZvIFZhbHVlIGxpc3QgaW5mb1xuXHQgKiBAcGFyYW0gcHJvcGVydHlQYXRoIFRoZSBwcm9wZXJ0eSBwYXRoXG5cdCAqIEBwYXJhbSBjb250ZW50IENvbnRlbnQgZm9yIHdoaWNoIHRoaXMgZnJhZ21lbnQgd2lsbCBiZSBzZXRcblx0ICogQHBhcmFtIHBheWxvYWQgVmFsdWUgaGVscCBwYXlsb2FkXG5cdCAqIEBwYXJhbSBjYXNlU2Vuc2l0aXZlXG5cdCAqIEByZXR1cm5zIEpTT05Nb2RlbFxuXHQgKiBAcHJpdmF0ZVxuXHQgKi9cblx0X2dldEpTT05Nb2RlbEZvckNvbmRpdGlvbjogZnVuY3Rpb24gKFxuXHRcdHZhbHVlTGlzdEluZm86IFZhbHVlTGlzdEluZm8sXG5cdFx0cHJvcGVydHlQYXRoOiBzdHJpbmcsXG5cdFx0Y29udGVudDogTURDVGFibGUsXG5cdFx0cGF5bG9hZDogVmFsdWVIZWxwUGF5bG9hZCxcblx0XHRjYXNlU2Vuc2l0aXZlOiBib29sZWFuXG5cdCk6IEpTT05Nb2RlbCB7XG5cdFx0Y29uc3QgaXNEcm9wRG93bkxpc3RlID0gZmFsc2UsXG5cdFx0XHRpc0RpYWxvZ1RhYmxlID0gZmFsc2UsXG5cdFx0XHRjb2x1bW5JbmZvID0gVmFsdWVMaXN0SGVscGVyLmdldENvbHVtblZpc2liaWxpdHlJbmZvKHZhbHVlTGlzdEluZm8udmFsdWVMaXN0SW5mbywgcHJvcGVydHlQYXRoLCBpc0Ryb3BEb3duTGlzdGUsIGlzRGlhbG9nVGFibGUpO1xuXG5cdFx0cmV0dXJuIG5ldyBKU09OTW9kZWwoe1xuXHRcdFx0aWQ6IGNvbnRlbnQuZ2V0SWQoKSxcblx0XHRcdGdyb3VwSWQ6IHBheWxvYWQucmVxdWVzdEdyb3VwSWQgfHwgdW5kZWZpbmVkLFxuXHRcdFx0YlN1Z2dlc3Rpb246IHRydWUsXG5cdFx0XHRjb2x1bW5JbmZvOiBjb2x1bW5JbmZvLFxuXHRcdFx0dmFsdWVIZWxwV2l0aEZpeGVkVmFsdWVzOiBpc0Ryb3BEb3duTGlzdGUsXG5cdFx0XHRkZXNjcmlwdGlvblBhdGg6IHZhbHVlTGlzdEluZm8uZGVzY3JpcHRpb25QYXRoLFxuXHRcdFx0a2V5UGF0aDogdmFsdWVMaXN0SW5mby5rZXlQYXRoLFxuXHRcdFx0cHJvcGVydHlQYXRoLFxuXHRcdFx0Y2FzZVNlbnNpdGl2ZVxuXHRcdH0pO1xuXHR9LFxuXG5cdC8qKlxuXHQgKiBDb25zdHJ1Y3RzIEpTT04gTW9kZWwgd2l0aCB0aGUgcHJvcGVydGllcyBmb3IgdGhlIHZhbHVlIGhlbHAgdHlwZWFoZWFkIGZyYWdtZW50IHdoZXJlIGl0IGlzIHVzZWQgYXMgYSBzb3VyY2Ugb2JqZWN0LlxuXHQgKiBAcGFyYW0gdmFsdWVMaXN0SW5mbyBWYWx1ZSBsaXN0IGluZm9cblx0ICogQHBhcmFtIHByb3BlcnR5UGF0aCBUaGUgcHJvcGVydHkgcGF0aFxuXHQgKiBAcGFyYW0gY29udGVudCBDb250ZW50IGZvciB3aGljaCB0aGlzIGZyYWdtZW50IHdpbGwgYmUgc2V0XG5cdCAqIEBwYXJhbSBwYXlsb2FkIFZhbHVlIGhlbHAgcGF5bG9hZFxuXHQgKiBAcGFyYW0gdmFsdWVIZWxwV2l0aEZpeGVkVmFsdWVzIFNwZWNpZnkgaXMgaXQgZHJvcGRvd25saXN0IG9yIG5vdFxuXHQgKiBAcmV0dXJucyBKU09OTW9kZWxcblx0ICogQHByaXZhdGVcblx0ICovXG5cdF9nZXRKU09OTW9kZWxGb3JUeXBlYWhlYWQ6IGZ1bmN0aW9uIChcblx0XHR2YWx1ZUxpc3RJbmZvOiBWYWx1ZUxpc3RJbmZvLFxuXHRcdHByb3BlcnR5UGF0aDogc3RyaW5nLFxuXHRcdGNvbnRlbnQ6IE1UYWJsZSxcblx0XHRwYXlsb2FkOiBWYWx1ZUhlbHBQYXlsb2FkLFxuXHRcdHZhbHVlSGVscFdpdGhGaXhlZFZhbHVlczogYm9vbGVhblxuXHQpOiBKU09OTW9kZWwge1xuXHRcdGNvbnN0IGlzRGlhbG9nVGFibGUgPSBmYWxzZSxcblx0XHRcdGNvbnRlbnRJZCA9IGNvbnRlbnQuZ2V0SWQoKSxcblx0XHRcdGNvbHVtbkluZm8gPSBWYWx1ZUxpc3RIZWxwZXIuZ2V0Q29sdW1uVmlzaWJpbGl0eUluZm8oXG5cdFx0XHRcdHZhbHVlTGlzdEluZm8udmFsdWVMaXN0SW5mbyxcblx0XHRcdFx0cHJvcGVydHlQYXRoLFxuXHRcdFx0XHR2YWx1ZUhlbHBXaXRoRml4ZWRWYWx1ZXMsXG5cdFx0XHRcdGlzRGlhbG9nVGFibGVcblx0XHRcdCk7XG5cblx0XHRyZXR1cm4gbmV3IEpTT05Nb2RlbCh7XG5cdFx0XHRpZDogY29udGVudElkLFxuXHRcdFx0Z3JvdXBJZDogcGF5bG9hZC5yZXF1ZXN0R3JvdXBJZCB8fCB1bmRlZmluZWQsXG5cdFx0XHRiU3VnZ2VzdGlvbjogdHJ1ZSxcblx0XHRcdHByb3BlcnR5UGF0aDogcHJvcGVydHlQYXRoLFxuXHRcdFx0Y29sdW1uSW5mbzogY29sdW1uSW5mbyxcblx0XHRcdHZhbHVlSGVscFdpdGhGaXhlZFZhbHVlczogdmFsdWVIZWxwV2l0aEZpeGVkVmFsdWVzXG5cdFx0fSk7XG5cdH0sXG5cblx0X2NyZWF0ZVZhbHVlSGVscFR5cGVhaGVhZDogYXN5bmMgZnVuY3Rpb24gKFxuXHRcdHByb3BlcnR5UGF0aDogc3RyaW5nLFxuXHRcdHZhbHVlSGVscDogVmFsdWVIZWxwLFxuXHRcdGNvbnRlbnQ6IE1UYWJsZSxcblx0XHR2YWx1ZUxpc3RJbmZvOiBWYWx1ZUxpc3RJbmZvLFxuXHRcdHBheWxvYWQ6IFZhbHVlSGVscFBheWxvYWQsXG5cdFx0bWV0YU1vZGVsOiBPRGF0YU1ldGFNb2RlbFxuXHQpOiBQcm9taXNlPHZvaWQ+IHtcblx0XHRjb25zdCBwcm9wZXJ0eUFubm90YXRpb25zID0gbWV0YU1vZGVsLmdldE9iamVjdChgJHtwcm9wZXJ0eVBhdGh9QGApIGFzIEFubm90YXRpb25zRm9yUHJvcGVydHksXG5cdFx0XHR2YWx1ZUhlbHBXaXRoRml4ZWRWYWx1ZXMgPSBwcm9wZXJ0eUFubm90YXRpb25zW0Fubm90YXRpb25WYWx1ZUxpc3RXaXRoRml4ZWRWYWx1ZXNdID8/IGZhbHNlLFxuXHRcdFx0c291cmNlTW9kZWwgPSB0aGlzLl9nZXRKU09OTW9kZWxGb3JUeXBlYWhlYWQodmFsdWVMaXN0SW5mbywgcHJvcGVydHlQYXRoLCBjb250ZW50LCBwYXlsb2FkLCB2YWx1ZUhlbHBXaXRoRml4ZWRWYWx1ZXMpO1xuXG5cdFx0Y29udGVudC5zZXRLZXlQYXRoKHZhbHVlTGlzdEluZm8ua2V5UGF0aCk7XG5cdFx0Y29udGVudC5zZXREZXNjcmlwdGlvblBhdGgodmFsdWVMaXN0SW5mby5kZXNjcmlwdGlvblBhdGgpO1xuXHRcdHBheWxvYWQuaXNWYWx1ZUxpc3RXaXRoRml4ZWRWYWx1ZXMgPSB2YWx1ZUhlbHBXaXRoRml4ZWRWYWx1ZXM7XG5cdFx0cGF5bG9hZC5pc1BvdGVudGlhbGx5U2Vuc2l0aXZlID0gcGF5bG9hZC5pc1BvdGVudGlhbGx5U2Vuc2l0aXZlID8/IHByb3BlcnR5QW5ub3RhdGlvbnNbQW5ub3RhdGlvbnNQZXJzb25hbERhdGFQb3RlbnRpYWxseVNlbnNpdGl2ZV07XG5cdFx0cGF5bG9hZC5oaXN0b3J5ID0ge1xuXHRcdFx0ZW5hYmxlZDogdGhpcy5jaGVja0hpc3RvcnlFbmFibGVkKHZhbHVlSGVscCwgcGF5bG9hZClcblx0XHR9O1xuXG5cdFx0Y29uc3QgY29sbGVjdGlvbkFubm90YXRpb25zID1cblx0XHRcdHZhbHVlTGlzdEluZm8udmFsdWVMaXN0SW5mby4kbW9kZWwuZ2V0TWV0YU1vZGVsKCkuZ2V0T2JqZWN0KGAvJHt2YWx1ZUxpc3RJbmZvLnZhbHVlTGlzdEluZm8uQ29sbGVjdGlvblBhdGh9QGApIHx8IHt9O1xuXG5cdFx0Y29udGVudC5kYXRhKFwic2VhcmNoU3VwcG9ydGVkXCIsIFZhbHVlTGlzdEhlbHBlci5lbnRpdHlJc1NlYXJjaGFibGUocHJvcGVydHlBbm5vdGF0aW9ucywgY29sbGVjdGlvbkFubm90YXRpb25zKSA/IHRydWUgOiBmYWxzZSk7XG5cblx0XHRjb25zdCB0YWJsZSA9IGF3YWl0IFZhbHVlTGlzdEhlbHBlci5fdGVtcGxhdGVGcmFnbWVudDxUYWJsZT4oXG5cdFx0XHRcInNhcC5mZS5tYWNyb3MuaW50ZXJuYWwudmFsdWVoZWxwLlZhbHVlTGlzdFRhYmxlXCIsXG5cdFx0XHR2YWx1ZUxpc3RJbmZvLFxuXHRcdFx0c291cmNlTW9kZWwsXG5cdFx0XHRwcm9wZXJ0eVBhdGgsXG5cdFx0XHR2YWx1ZUhlbHBcblx0XHQpO1xuXG5cdFx0dGFibGUuc2V0TW9kZWwodmFsdWVMaXN0SW5mby52YWx1ZUxpc3RJbmZvLiRtb2RlbCk7XG5cblx0XHRMb2cuaW5mbyhgVmFsdWUgTGlzdC0gc3VnZ2VzdCBUYWJsZSBYTUwgY29udGVudCBjcmVhdGVkIFske3Byb3BlcnR5UGF0aH1dYCwgdGFibGUuZ2V0TWV0YWRhdGEoKS5nZXROYW1lKCksIFwiTURDIFRlbXBsYXRpbmdcIik7XG5cblx0XHRjb250ZW50LnNldFRhYmxlKHRhYmxlKTtcblxuXHRcdGNvbnN0IGZpZWxkID0gdmFsdWVIZWxwLmdldENvbnRyb2woKTtcblxuXHRcdGlmIChcblx0XHRcdGZpZWxkICE9PSB1bmRlZmluZWQgJiZcblx0XHRcdChmaWVsZC5pc0E8RmlsdGVyRmllbGQ+KFwic2FwLnVpLm1kYy5GaWx0ZXJGaWVsZFwiKSB8fFxuXHRcdFx0XHRmaWVsZC5pc0E8RmllbGQ+KFwic2FwLnVpLm1kYy5GaWVsZFwiKSB8fFxuXHRcdFx0XHRmaWVsZC5pc0E8TXVsdGlWYWx1ZUZpZWxkPihcInNhcC51aS5tZGMuTXVsdGlWYWx1ZUZpZWxkXCIpKVxuXHRcdCkge1xuXHRcdFx0Ly9DYW4gdGhlIGZpbHRlcmZpZWxkIGJlIHNvbWV0aGluZyBlbHNlIHRoYXQgd2UgbmVlZCB0aGUgLmlzQSgpIGNoZWNrP1xuXHRcdFx0Y29uc3QgdGFibGVNb2RlID1cblx0XHRcdFx0dmFsdWVIZWxwV2l0aEZpeGVkVmFsdWVzICYmIChmaWVsZCBhcyBGaWVsZEJhc2UpLmdldE1heENvbmRpdGlvbnMoKSAhPT0gMSA/IFwiTXVsdGlTZWxlY3RcIiA6IFwiU2luZ2xlU2VsZWN0TWFzdGVyXCI7XG5cdFx0XHR0YWJsZS5zZXRNb2RlKHRhYmxlTW9kZSk7XG5cblx0XHRcdHRhYmxlLmFkZEV2ZW50RGVsZWdhdGUoe1xuXHRcdFx0XHRvbkFmdGVyUmVuZGVyaW5nOiBmdW5jdGlvbiAoKSB7XG5cdFx0XHRcdFx0UmVzaXplSGFuZGxlci5yZWdpc3Rlcih0YWJsZSwgZnVuY3Rpb24gKCkge1xuXHRcdFx0XHRcdFx0VmFsdWVMaXN0SGVscGVyLl9zZXRUYWJsZVdpZHRoKHRhYmxlLCBmaWVsZCwgdGFibGVNb2RlLCBwYXlsb2FkLmlzVW5pdFZhbHVlSGVscCk7XG5cdFx0XHRcdFx0fSk7XG5cdFx0XHRcdH1cblx0XHRcdH0pO1xuXHRcdFx0dGhpcy5fc2V0VGFibGVXaWR0aCh0YWJsZSwgZmllbGQsIHRhYmxlTW9kZSwgcGF5bG9hZC5pc1VuaXRWYWx1ZUhlbHApO1xuXHRcdH1cblx0fSxcblxuXHRfc2V0VGFibGVXaWR0aCh0YWJsZTogVGFibGUsIGZpZWxkOiBDb250cm9sLCB0YWJsZU1vZGU6IHN0cmluZywgaXNVbml0VmFsdWVIZWxwPzogYm9vbGVhbik6IHZvaWQge1xuXHRcdGNvbnN0IHJlZHVjZVdpZHRoRm9yVW5pdFZhbHVlSGVscCA9IEJvb2xlYW4oaXNVbml0VmFsdWVIZWxwKTtcblx0XHRjb25zdCB0YWJsZVdpZHRoID0gVmFsdWVMaXN0SGVscGVyLl9nZXRUYWJsZVdpZHRoKFxuXHRcdFx0dGFibGUsXG5cdFx0XHRWYWx1ZUxpc3RIZWxwZXIuX2dldFdpZHRoSW5SZW0oZmllbGQsIHJlZHVjZVdpZHRoRm9yVW5pdFZhbHVlSGVscCksXG5cdFx0XHR0YWJsZU1vZGUgPT09IFwiTXVsdGlTZWxlY3RcIlxuXHRcdCk7XG5cblx0XHR0YWJsZS5zZXRXaWR0aCh0YWJsZVdpZHRoKTtcblx0fSxcblxuXHQvKipcblx0ICogQ2hlY2sgaWYgdGhlIGhpc3RvcnkgaXMgZW5hYmxlZCBmb3IgYSBjZXJ0YWluIGZpZWxkLlxuXHQgKiBAcGFyYW0gdmFsdWVIZWxwIFRoZSB2YWx1ZSBoZWxwIGluc3RhbmNlXG5cdCAqIEBwYXJhbSBwYXlsb2FkIFZhbHVlIGhlbHAgcGF5bG9hZFxuXHQgKiBAcmV0dXJucyBUcnVlIGlmIHRoZSBoaXN0b3J5IGlzIGVuYWJsZWQsIGZhbHNlIG90aGVyd2lzZVxuXHQgKi9cblx0Y2hlY2tIaXN0b3J5RW5hYmxlZDogZnVuY3Rpb24gKHZhbHVlSGVscDogVmFsdWVIZWxwLCBwYXlsb2FkOiBWYWx1ZUhlbHBQYXlsb2FkKTogYm9vbGVhbiB7XG5cdFx0Y29uc3QgYXBwQ29tcG9uZW50ID0gQ29tbW9uVXRpbHMuZ2V0QXBwQ29tcG9uZW50KENvbW1vblV0aWxzLmdldFRhcmdldFZpZXcodmFsdWVIZWxwKSk7XG5cdFx0Y29uc3QgaGlzdG9yeVNldHRpbmdzID0gYXBwQ29tcG9uZW50LmdldE1hbmlmZXN0RW50cnkoXCJzYXAuZmVcIik/Lmhpc3RvcnlTZXR0aW5ncztcblx0XHRyZXR1cm4gaGlzdG9yeVNldHRpbmdzPy5maWVsZHM/LltwYXlsb2FkLnByb3BlcnR5UGF0aF0/Lmhpc3RvcnlFbmFibGVkID8/IHRydWU7XG5cdH0sXG5cblx0X2NyZWF0ZVZhbHVlSGVscERpYWxvZzogYXN5bmMgZnVuY3Rpb24gKFxuXHRcdG1ldGFNb2RlbDogT0RhdGFNZXRhTW9kZWwsXG5cdFx0cHJvcGVydHlQYXRoOiBzdHJpbmcsXG5cdFx0dmFsdWVIZWxwOiBWYWx1ZUhlbHAsXG5cdFx0Y29udGVudDogTURDVGFibGUsXG5cdFx0dmFsdWVMaXN0SW5mbzogVmFsdWVMaXN0SW5mbyxcblx0XHRwYXlsb2FkOiBWYWx1ZUhlbHBQYXlsb2FkLFxuXHRcdGNvbmRpdGlvbkNvbnRlbnQ/OiBDb25kaXRpb25zXG5cdCk6IFByb21pc2U8dm9pZD4ge1xuXHRcdGNvbnN0IHByb3BlcnR5QW5ub3RhdGlvbnMgPSAodmFsdWVIZWxwLmdldE1vZGVsKCkgYXMgT0RhdGFNb2RlbClcblx0XHRcdFx0LmdldE1ldGFNb2RlbCgpIVxuXHRcdFx0XHQuZ2V0T2JqZWN0KGAke3Byb3BlcnR5UGF0aH1AYCkgYXMgQW5ub3RhdGlvbnNGb3JQcm9wZXJ0eSxcblx0XHRcdHNvdXJjZU1vZGVsRGlhbG9nID0gdGhpcy5fZ2V0SlNPTk1vZGVsRm9yRGlhbG9nKHZhbHVlTGlzdEluZm8sIHByb3BlcnR5UGF0aCwgY29udGVudCwgcGF5bG9hZCk7XG5cblx0XHRjb250ZW50LnNldEtleVBhdGgodmFsdWVMaXN0SW5mby5rZXlQYXRoKTtcblx0XHRjb250ZW50LnNldERlc2NyaXB0aW9uUGF0aCh2YWx1ZUxpc3RJbmZvLmRlc2NyaXB0aW9uUGF0aCk7XG5cblx0XHRjb25zdCBjb2xsZWN0aW9uQW5ub3RhdGlvbnMgPVxuXHRcdFx0dmFsdWVMaXN0SW5mby52YWx1ZUxpc3RJbmZvLiRtb2RlbC5nZXRNZXRhTW9kZWwoKS5nZXRPYmplY3QoYC8ke3ZhbHVlTGlzdEluZm8udmFsdWVMaXN0SW5mby5Db2xsZWN0aW9uUGF0aH1AYCkgfHwge307XG5cblx0XHRjb250ZW50LmRhdGEoXCJzZWFyY2hTdXBwb3J0ZWRcIiwgVmFsdWVMaXN0SGVscGVyLmVudGl0eUlzU2VhcmNoYWJsZShwcm9wZXJ0eUFubm90YXRpb25zLCBjb2xsZWN0aW9uQW5ub3RhdGlvbnMpID8gdHJ1ZSA6IGZhbHNlKTtcblx0XHRwYXlsb2FkLmlzUG90ZW50aWFsbHlTZW5zaXRpdmUgPSBwYXlsb2FkLmlzUG90ZW50aWFsbHlTZW5zaXRpdmUgPz8gcHJvcGVydHlBbm5vdGF0aW9uc1tBbm5vdGF0aW9uc1BlcnNvbmFsRGF0YVBvdGVudGlhbGx5U2Vuc2l0aXZlXTtcblxuXHRcdGlmIChjb25kaXRpb25Db250ZW50KSB7XG5cdFx0XHRjb25zdCBmaXJzdFR5cGVBaGVhZENvbnRlbnQgPSB2YWx1ZUhlbHAuZ2V0VHlwZWFoZWFkKCkuZ2V0Q29udGVudCgpWzBdIGFzIE1UYWJsZSxcblx0XHRcdFx0Y2FzZVNlbnNpdGl2ZSA9IGZpcnN0VHlwZUFoZWFkQ29udGVudC5nZXRDYXNlU2Vuc2l0aXZlKCk7XG5cblx0XHRcdGNvbnN0IHNvdXJjZU1vZGVsQ29uZGl0aW9uID0gdGhpcy5fZ2V0SlNPTk1vZGVsRm9yQ29uZGl0aW9uKHZhbHVlTGlzdEluZm8sIHByb3BlcnR5UGF0aCwgY29udGVudCwgcGF5bG9hZCwgY2FzZVNlbnNpdGl2ZSk7XG5cblx0XHRcdGNvbnN0IGNvbmRpdGlvbiA9IGF3YWl0IFZhbHVlTGlzdEhlbHBlci5fdGVtcGxhdGVGcmFnbWVudDxWYWx1ZUhlbHA+KFxuXHRcdFx0XHRcInNhcC5mZS5tYWNyb3MuaW50ZXJuYWwudmFsdWVoZWxwLlZhbHVlTGlzdEZvckNvbmRpdGlvblwiLFxuXHRcdFx0XHR2YWx1ZUxpc3RJbmZvLFxuXHRcdFx0XHRzb3VyY2VNb2RlbENvbmRpdGlvbixcblx0XHRcdFx0cHJvcGVydHlQYXRoLFxuXHRcdFx0XHR2YWx1ZUhlbHBcblx0XHRcdCk7XG5cdFx0XHQvKiBBcyB0aGUgY29uZGl0aW9uIGlzIG5vdCBhZGRlZCB0byBhbiBhZ2dyZWdhdGlvbiwgYnV0IGp1c3QgYXNzb2NpYXRlZCwgd2UgbmVlZCB0byBleHBsaWNpdGx5IHNldCB0aGUgbW9kZWwgKi9cblx0XHRcdGNvbmRpdGlvbi5zZXRNb2RlbChtZXRhTW9kZWwpO1xuXG5cdFx0XHQvKiBBZGQgYXMgZGVwZW5kZW50LCBvdGhlcndpc2UgaXQgd2lsbCBub3QgYmUgcHJvcGVybHkgZGVzdHJveWVkIGR1cmluZyBsaWZlY3ljbGUgaGFuZGxpbmcgKi9cblx0XHRcdGNvbmRpdGlvbkNvbnRlbnQuYWRkRGVwZW5kZW50KGNvbmRpdGlvbik7XG5cdFx0XHRjb25kaXRpb25Db250ZW50LnNldFZhbHVlSGVscChjb25kaXRpb24uZ2V0SWQoKSk7XG5cblx0XHRcdGNvbnN0IGNvbmRpdGlvblRhYmxlID0gY29uZGl0aW9uXG5cdFx0XHRcdC5nZXRUeXBlYWhlYWQoKVxuXHRcdFx0XHQuZ2V0Q29udGVudCgpWzBdIC8vIHRoZXJlIGlzIG9ubHkgb25lIHRhYmxlXG5cdFx0XHRcdC5nZXRUYWJsZSgpO1xuXG5cdFx0XHRjb25zdCB0YWJsZVdpZHRoID0gVmFsdWVMaXN0SGVscGVyLl9nZXRUYWJsZVdpZHRoKGNvbmRpdGlvblRhYmxlLCAwLCBmYWxzZSk7XG5cdFx0XHRjb25kaXRpb25UYWJsZS5zZXRXaWR0aCh0YWJsZVdpZHRoKTtcblx0XHR9XG5cblx0XHRjb25zdCB0YWJsZVByb21pc2UgPSBWYWx1ZUxpc3RIZWxwZXIuX3RlbXBsYXRlRnJhZ21lbnQ8TWRjSW5uZXJUYWJsZT4oXG5cdFx0XHRcInNhcC5mZS5tYWNyb3MuaW50ZXJuYWwudmFsdWVoZWxwLlZhbHVlTGlzdERpYWxvZ1RhYmxlXCIsXG5cdFx0XHR2YWx1ZUxpc3RJbmZvLFxuXHRcdFx0c291cmNlTW9kZWxEaWFsb2csXG5cdFx0XHRwcm9wZXJ0eVBhdGgsXG5cdFx0XHR2YWx1ZUhlbHBcblx0XHQpO1xuXG5cdFx0Y29uc3QgZmlsdGVyQmFyUHJvbWlzZSA9IFZhbHVlTGlzdEhlbHBlci5fdGVtcGxhdGVGcmFnbWVudDxGaWx0ZXJCYXI+KFxuXHRcdFx0XCJzYXAuZmUubWFjcm9zLmludGVybmFsLnZhbHVlaGVscC5WYWx1ZUxpc3RGaWx0ZXJCYXJcIixcblx0XHRcdHZhbHVlTGlzdEluZm8sXG5cdFx0XHRzb3VyY2VNb2RlbERpYWxvZyxcblx0XHRcdHByb3BlcnR5UGF0aCxcblx0XHRcdHZhbHVlSGVscFxuXHRcdCk7XG5cblx0XHRjb25zdCBbdGFibGUsIGZpbHRlckJhcl0gPSBhd2FpdCBQcm9taXNlLmFsbChbdGFibGVQcm9taXNlLCBmaWx0ZXJCYXJQcm9taXNlXSk7XG5cblx0XHR0YWJsZS5zZXRNb2RlbCh2YWx1ZUxpc3RJbmZvLnZhbHVlTGlzdEluZm8uJG1vZGVsKTtcblx0XHRmaWx0ZXJCYXIuc2V0TW9kZWwodmFsdWVMaXN0SW5mby52YWx1ZUxpc3RJbmZvLiRtb2RlbCk7XG5cblx0XHRjb250ZW50LnNldEZpbHRlckJhcihmaWx0ZXJCYXIpO1xuXHRcdGNvbnRlbnQuc2V0VGFibGUodGFibGUpO1xuXG5cdFx0dGFibGUuc2V0RmlsdGVyKGZpbHRlckJhci5nZXRJZCgpKTtcblx0XHR0YWJsZS5pbml0aWFsaXplZCgpO1xuXG5cdFx0dGFibGUuc2V0V2lkdGgoXCIxMDAlXCIpO1xuXG5cdFx0VmFsdWVMaXN0SGVscGVyLnNldENvcHlQcm92aWRlclZpc2liaWxpdHkodGFibGUsIHZhbHVlSGVscCk7XG5cblx0XHQvL1RoaXMgaXMgYSB0ZW1wb3Jhcnkgd29ya2Fycm91bmQgLSBwcm92aWRlZCBieSBNREMgKHNlZSBGSU9SSVRFQ0hQMS0yNDAwMilcblx0XHRjb25zdCBtZGNUYWJsZSA9IHRhYmxlIGFzIHVua25vd24gYXMgeyBfc2V0U2hvd1AxM25CdXR0b246IEZ1bmN0aW9uIH07XG5cdFx0bWRjVGFibGUuX3NldFNob3dQMTNuQnV0dG9uKGZhbHNlKTtcblx0fSxcblxuXHQvKipcblx0ICogU2V0IHRoZSB2aXNpYmxlIGF0dHJpYnV0ZSBvZiB0aGUgQ29weVByb3ZpZGVyIGJhc2VkIG9uIHRoZSBNYXhDb25kaXRpb24gb2YgdGhlIGZpZWxkLlxuXHQgKiBJbiBjYXNlIG9mIGEgc2luZ2xlIHNlbGVjdGlvbiwgdGhlIGNvcHkgYnV0dG9uIGlzIGhpZGRlbi4gSW4gYW5vdGhlciBjYXNlLCBpdCBpcyB2aXNpYmxlLlxuXHQgKiBAcGFyYW0gdGFibGUgVGhlIE1EQyB0YWJsZSBvZiB0aGUgVmFsdWUgSGVscCBkaWFsb2dcblx0ICogQHBhcmFtIHZhbHVlSGVscCBUaGUgVmFsdWUgSGVscCBvYmplY3Rcblx0ICovXG5cdHNldENvcHlQcm92aWRlclZpc2liaWxpdHk6IGZ1bmN0aW9uICh0YWJsZTogTWRjSW5uZXJUYWJsZSwgdmFsdWVIZWxwOiBWYWx1ZUhlbHApOiB2b2lkIHtcblx0XHRpZiAodmFsdWVIZWxwLmdldENvbnRyb2woKT8uaXNBPEZpZWxkQmFzZT4oXCJzYXAudWkubWRjLmZpZWxkLkZpZWxkQmFzZVwiKSkge1xuXHRcdFx0dGFibGUuZ2V0Q29weVByb3ZpZGVyKCk/LnNldFZpc2libGUodHJ1ZSk7XG5cdFx0fVxuXHR9LFxuXG5cdF9nZXRDb250ZW50QnlJZDogZnVuY3Rpb24gPFQgZXh0ZW5kcyBNVGFibGUgfCBNRENUYWJsZT4oY29udGVudExpc3Q6IENvbnRlbnRbXSwgY29udGVudElkOiBzdHJpbmcpOiBUIHwgdW5kZWZpbmVkIHtcblx0XHRyZXR1cm4gY29udGVudExpc3QuZmluZChmdW5jdGlvbiAoaXRlbSkge1xuXHRcdFx0cmV0dXJuIGl0ZW0uZ2V0SWQoKSA9PT0gY29udGVudElkO1xuXHRcdH0pIGFzIFQgfCB1bmRlZmluZWQ7XG5cdH0sXG5cblx0X2NyZWF0ZVBvcG92ZXJDb250ZW50OiBmdW5jdGlvbiAoY29udGVudElkOiBzdHJpbmcsIGNhc2VTZW5zaXRpdmU6IGJvb2xlYW4sIHVzZUFzVmFsdWVIZWxwOiBib29sZWFuKTogTVRhYmxlIHtcblx0XHRyZXR1cm4gbmV3IE1UYWJsZSh7XG5cdFx0XHRpZDogY29udGVudElkLFxuXHRcdFx0Z3JvdXA6IFwiZ3JvdXAxXCIsXG5cdFx0XHRjYXNlU2Vuc2l0aXZlOiBjYXNlU2Vuc2l0aXZlLFxuXHRcdFx0dXNlQXNWYWx1ZUhlbHA6IHVzZUFzVmFsdWVIZWxwXG5cdFx0fSBhcyAkTVRhYmxlU2V0dGluZ3MpO1xuXHR9LFxuXG5cdF9jcmVhdGVEaWFsb2dDb250ZW50OiBmdW5jdGlvbiAoY29udGVudElkOiBzdHJpbmcsIGNhc2VTZW5zaXRpdmU6IGJvb2xlYW4sIGZvcmNlQmluZDogYm9vbGVhbik6IE1EQ1RhYmxlIHtcblx0XHRyZXR1cm4gbmV3IE1EQ1RhYmxlKHtcblx0XHRcdGlkOiBjb250ZW50SWQsXG5cdFx0XHRncm91cDogXCJncm91cDFcIixcblx0XHRcdGNhc2VTZW5zaXRpdmU6IGNhc2VTZW5zaXRpdmUsXG5cdFx0XHRmb3JjZUJpbmQ6IGZvcmNlQmluZFxuXHRcdH0gYXMgJE1EQ1RhYmxlU2V0dGluZ3MpO1xuXHR9LFxuXG5cdF9zaG93Q29uZGl0aW9uc0NvbnRlbnQ6IGZ1bmN0aW9uIChjb250ZW50TGlzdDogQ29udGVudFtdLCBjb250YWluZXI6IENvbnRhaW5lcik6IENvbmRpdGlvbnMgfCB1bmRlZmluZWQge1xuXHRcdGxldCBjb25kaXRpb25zQ29udGVudCA9XG5cdFx0XHRjb250ZW50TGlzdC5sZW5ndGggJiYgY29udGVudExpc3RbY29udGVudExpc3QubGVuZ3RoIC0gMV0uZ2V0TWV0YWRhdGEoKS5nZXROYW1lKCkgPT09IFwic2FwLnVpLm1kYy52YWx1ZWhlbHAuY29udGVudC5Db25kaXRpb25zXCJcblx0XHRcdFx0PyAoY29udGVudExpc3RbY29udGVudExpc3QubGVuZ3RoIC0gMV0gYXMgQ29uZGl0aW9ucylcblx0XHRcdFx0OiB1bmRlZmluZWQ7XG5cblx0XHRpZiAoY29uZGl0aW9uc0NvbnRlbnQpIHtcblx0XHRcdGNvbmRpdGlvbnNDb250ZW50LnNldFZpc2libGUodHJ1ZSk7XG5cdFx0fSBlbHNlIHtcblx0XHRcdGNvbmRpdGlvbnNDb250ZW50ID0gbmV3IENvbmRpdGlvbnMoKTtcblx0XHRcdGNvbnRhaW5lci5hZGRDb250ZW50KGNvbmRpdGlvbnNDb250ZW50KTtcblx0XHR9XG5cblx0XHRyZXR1cm4gY29uZGl0aW9uc0NvbnRlbnQ7XG5cdH0sXG5cblx0X2FsaWduT3JDcmVhdGVDb250ZW50OiBmdW5jdGlvbiAoXG5cdFx0dmFsdWVMaXN0SW5mbzogVmFsdWVMaXN0SW5mbyxcblx0XHRjb250ZW50SWQ6IHN0cmluZyxcblx0XHRjYXNlU2Vuc2l0aXZlOiBib29sZWFuLFxuXHRcdHNob3dDb25kaXRpb25QYW5lbDogYm9vbGVhbixcblx0XHRjb250YWluZXI6IENvbnRhaW5lclxuXHQpOiBNRENUYWJsZSB7XG5cdFx0Y29uc3QgY29udGVudExpc3QgPSBjb250YWluZXIuZ2V0Q29udGVudCgpO1xuXHRcdGxldCBjb250ZW50ID0gVmFsdWVMaXN0SGVscGVyLl9nZXRDb250ZW50QnlJZDxNRENUYWJsZT4oY29udGVudExpc3QsIGNvbnRlbnRJZCk7XG5cblx0XHRpZiAoIWNvbnRlbnQpIHtcblx0XHRcdGNvbnN0IGZvcmNlQmluZCA9IHZhbHVlTGlzdEluZm8udmFsdWVMaXN0SW5mby5GZXRjaFZhbHVlcyA9PT0gMiA/IGZhbHNlIDogdHJ1ZTtcblxuXHRcdFx0Y29udGVudCA9IFZhbHVlTGlzdEhlbHBlci5fY3JlYXRlRGlhbG9nQ29udGVudChjb250ZW50SWQsIGNhc2VTZW5zaXRpdmUsIGZvcmNlQmluZCk7XG5cblx0XHRcdGlmICghc2hvd0NvbmRpdGlvblBhbmVsKSB7XG5cdFx0XHRcdGNvbnRhaW5lci5hZGRDb250ZW50KGNvbnRlbnQpO1xuXHRcdFx0fSBlbHNlIHtcblx0XHRcdFx0Y29udGFpbmVyLmluc2VydENvbnRlbnQoY29udGVudCwgY29udGVudExpc3QubGVuZ3RoIC0gMSk7IC8vIGluc2VydCBjb250ZW50IGJlZm9yZSBjb25kaXRpb25zIGNvbnRlbnRcblx0XHRcdH1cblx0XHR9XG5cblx0XHRyZXR1cm4gY29udGVudDtcblx0fSxcblxuXHRfcHJlcGFyZVZhbHVlSGVscFR5cGVBaGVhZDogZnVuY3Rpb24gKFxuXHRcdHZhbHVlSGVscDogVmFsdWVIZWxwLFxuXHRcdGNvbnRhaW5lcjogQ29udGFpbmVyLFxuXHRcdHZhbHVlTGlzdEluZm9zOiBWYWx1ZUxpc3RJbmZvW10sXG5cdFx0cGF5bG9hZDogVmFsdWVIZWxwUGF5bG9hZCxcblx0XHRjYXNlU2Vuc2l0aXZlOiBib29sZWFuLFxuXHRcdGZpcnN0VHlwZUFoZWFkQ29udGVudDogTVRhYmxlXG5cdCk6IHsgdmFsdWVMaXN0SW5mbzogVmFsdWVMaXN0SW5mbzsgY29udGVudDogTVRhYmxlIH0ge1xuXHRcdGNvbnN0IGNvbnRlbnRMaXN0ID0gY29udGFpbmVyLmdldENvbnRlbnQoKTtcblx0XHRsZXQgcXVhbGlmaWVyRm9yVHlwZWFoZWFkID0gdmFsdWVIZWxwLmRhdGEoXCJ2YWx1ZWxpc3RGb3JWYWxpZGF0aW9uXCIpIHx8IFwiXCI7IC8vIGNhbiBhbHNvIGJlIG51bGxcblx0XHRpZiAocXVhbGlmaWVyRm9yVHlwZWFoZWFkID09PSBcIiBcIikge1xuXHRcdFx0cXVhbGlmaWVyRm9yVHlwZWFoZWFkID0gXCJcIjtcblx0XHR9XG5cdFx0Y29uc3QgdmFsdWVMaXN0SW5mbyA9IHF1YWxpZmllckZvclR5cGVhaGVhZCAvLyBmYWxsYmFjayBpZiBxdWFsaWZpZXIgZm9yIFR5cGVhaGVhZCBub3QgZXhpc3RzXG5cdFx0XHQ/IHZhbHVlTGlzdEluZm9zLmZpbHRlcihmdW5jdGlvbiAoc3ViVmFsdWVMaXN0SW5mbykge1xuXHRcdFx0XHRcdHJldHVybiBzdWJWYWx1ZUxpc3RJbmZvLnZhbHVlSGVscFF1YWxpZmllciA9PT0gcXVhbGlmaWVyRm9yVHlwZWFoZWFkO1xuXHRcdFx0ICB9KVswXSB8fCB2YWx1ZUxpc3RJbmZvc1swXVxuXHRcdFx0OiB2YWx1ZUxpc3RJbmZvc1swXTtcblxuXHRcdFZhbHVlTGlzdEhlbHBlci5fYWRkSW5PdXRQYXJhbWV0ZXJzVG9QYXlsb2FkKHBheWxvYWQsIHZhbHVlTGlzdEluZm8pO1xuXG5cdFx0Y29uc3QgY29udGVudElkID0gVmFsdWVMaXN0SGVscGVyLl9nZXRDb250ZW50SWQodmFsdWVIZWxwLmdldElkKCksIHZhbHVlTGlzdEluZm8udmFsdWVIZWxwUXVhbGlmaWVyLCB0cnVlKTtcblx0XHRsZXQgY29udGVudCA9IFZhbHVlTGlzdEhlbHBlci5fZ2V0Q29udGVudEJ5SWQ8TVRhYmxlPihjb250ZW50TGlzdCwgY29udGVudElkKTtcblxuXHRcdGlmICghY29udGVudCkge1xuXHRcdFx0Y29uc3QgdXNlQXNWYWx1ZUhlbHAgPSBmaXJzdFR5cGVBaGVhZENvbnRlbnQuZ2V0VXNlQXNWYWx1ZUhlbHAoKTtcblx0XHRcdGNvbnRlbnQgPSBWYWx1ZUxpc3RIZWxwZXIuX2NyZWF0ZVBvcG92ZXJDb250ZW50KGNvbnRlbnRJZCwgY2FzZVNlbnNpdGl2ZSwgdXNlQXNWYWx1ZUhlbHApO1xuXG5cdFx0XHRjb250YWluZXIuaW5zZXJ0Q29udGVudChjb250ZW50LCAwKTsgLy8gaW5zZXJ0IGNvbnRlbnQgYXMgZmlyc3QgY29udGVudFxuXHRcdH0gZWxzZSBpZiAoY29udGVudElkICE9PSBjb250ZW50TGlzdFswXS5nZXRJZCgpKSB7XG5cdFx0XHQvLyBjb250ZW50IGFscmVhZHkgYXZhaWxhYmxlIGJ1dCBub3QgYXMgZmlyc3QgY29udGVudD9cblx0XHRcdGNvbnRhaW5lci5yZW1vdmVDb250ZW50KGNvbnRlbnQpO1xuXHRcdFx0Y29udGFpbmVyLmluc2VydENvbnRlbnQoY29udGVudCwgMCk7IC8vIG1vdmUgY29udGVudCB0byBmaXJzdCBwb3NpdGlvblxuXHRcdH1cblxuXHRcdHJldHVybiB7IHZhbHVlTGlzdEluZm8sIGNvbnRlbnQgfTtcblx0fSxcblxuXHRfcHJlcGFyZVZhbHVlSGVscERpYWxvZzogZnVuY3Rpb24gKFxuXHRcdHZhbHVlSGVscDogVmFsdWVIZWxwLFxuXHRcdGNvbnRhaW5lcjogQ29udGFpbmVyLFxuXHRcdHZhbHVlTGlzdEluZm9zOiBWYWx1ZUxpc3RJbmZvW10sXG5cdFx0cGF5bG9hZDogVmFsdWVIZWxwUGF5bG9hZCxcblx0XHRzZWxlY3RlZENvbnRlbnRJZDogc3RyaW5nLFxuXHRcdGNhc2VTZW5zaXRpdmU6IGJvb2xlYW5cblx0KToge1xuXHRcdHNlbGVjdGVkSW5mbzogVmFsdWVMaXN0SW5mbztcblx0XHRzZWxlY3RlZENvbnRlbnQ6IE1EQ1RhYmxlO1xuXHRcdGNvbmRpdGlvbkNvbnRlbnQ/OiBDb25kaXRpb25zO1xuXHR9IHtcblx0XHRjb25zdCBzaG93Q29uZGl0aW9uUGFuZWwgPSB2YWx1ZUhlbHAuZGF0YShcInNob3dDb25kaXRpb25QYW5lbFwiKSAmJiB2YWx1ZUhlbHAuZGF0YShcInNob3dDb25kaXRpb25QYW5lbFwiKSAhPT0gXCJmYWxzZVwiO1xuXHRcdGNvbnN0IGNvbnRlbnRMaXN0ID0gY29udGFpbmVyLmdldENvbnRlbnQoKTtcblxuXHRcdC8vIHNldCBhbGwgY29udGVudHMgdG8gaW52aXNpYmxlXG5cdFx0Zm9yIChjb25zdCBjb250ZW50TGlzdEl0ZW0gb2YgY29udGVudExpc3QpIHtcblx0XHRcdGNvbnRlbnRMaXN0SXRlbS5zZXRWaXNpYmxlKGZhbHNlKTtcblx0XHR9XG5cblx0XHRjb25zdCBjb25kaXRpb25Db250ZW50ID0gc2hvd0NvbmRpdGlvblBhbmVsID8gdGhpcy5fc2hvd0NvbmRpdGlvbnNDb250ZW50KGNvbnRlbnRMaXN0LCBjb250YWluZXIpIDogdW5kZWZpbmVkO1xuXHRcdGNvbnN0IGZpZWxkID0gdmFsdWVIZWxwLmdldENvbnRyb2woKTtcblxuXHRcdC8vIEZvciBhIEZpbHRlckZpZWxkIHdlIGNoZWNrIHRoZSBvcGVyYXRvcnMgaWYgdGhleSBhcmUgZGVmYXVsdCAoZW1wdHkgbGlzdD1hbGwpIG9yIGluY2x1ZGUgRVFcblx0XHRjb25zdCBoYXNPcGVyYXRvckVRID1cblx0XHRcdGZpZWxkICYmIGZpZWxkLmlzQTxGaWx0ZXJGaWVsZD4oXCJzYXAudWkubWRjLkZpbHRlckZpZWxkXCIpXG5cdFx0XHRcdD8gZmllbGQuZ2V0T3BlcmF0b3JzKCkubGVuZ3RoID09PSAwIHx8IGZpZWxkLmdldE9wZXJhdG9ycygpLmluY2x1ZGVzKFwiRVFcIilcblx0XHRcdFx0OiB0cnVlO1xuXG5cdFx0bGV0IHNlbGVjdGVkSW5mbzogVmFsdWVMaXN0SW5mbyB8IHVuZGVmaW5lZCwgc2VsZWN0ZWRDb250ZW50OiBNRENUYWJsZSB8IHVuZGVmaW5lZDtcblxuXHRcdC8vIENyZWF0ZSBvciByZXVzZSBjb250ZW50cyBmb3IgdGhlIGN1cnJlbnQgY29udGV4dFxuXHRcdGZvciAoY29uc3QgdmFsdWVMaXN0SW5mbyBvZiB2YWx1ZUxpc3RJbmZvcykge1xuXHRcdFx0Y29uc3QgdmFsdWVIZWxwUXVhbGlmaWVyID0gdmFsdWVMaXN0SW5mby52YWx1ZUhlbHBRdWFsaWZpZXI7XG5cblx0XHRcdFZhbHVlTGlzdEhlbHBlci5fYWRkSW5PdXRQYXJhbWV0ZXJzVG9QYXlsb2FkKHBheWxvYWQsIHZhbHVlTGlzdEluZm8pO1xuXG5cdFx0XHRjb25zdCBjb250ZW50SWQgPSBWYWx1ZUxpc3RIZWxwZXIuX2dldENvbnRlbnRJZCh2YWx1ZUhlbHAuZ2V0SWQoKSwgdmFsdWVIZWxwUXVhbGlmaWVyLCBmYWxzZSk7XG5cblx0XHRcdGNvbnN0IGNvbnRlbnQgPSB0aGlzLl9hbGlnbk9yQ3JlYXRlQ29udGVudCh2YWx1ZUxpc3RJbmZvLCBjb250ZW50SWQsIGNhc2VTZW5zaXRpdmUsIHNob3dDb25kaXRpb25QYW5lbCwgY29udGFpbmVyKTtcblx0XHRcdGNvbnRlbnQuc2V0VmlzaWJsZShoYXNPcGVyYXRvckVRKTsgLy8gRG8gbm90IHNob3cgYSB2YWx1ZSBoZWxwIHRhYmxlIGZvciBhIGZpbHRlciBmaWVsZCB3aXRob3V0IG9wZXJhdG9yICdFUSdcblxuXHRcdFx0aWYgKHZhbHVlTGlzdEluZm8udmFsdWVMaXN0SW5mby5MYWJlbCAmJiBmaWVsZCkge1xuXHRcdFx0XHRjb25zdCB0aXRsZSA9IENvbW1vblV0aWxzLmdldFRyYW5zbGF0ZWRUZXh0RnJvbUV4cEJpbmRpbmdTdHJpbmcodmFsdWVMaXN0SW5mby52YWx1ZUxpc3RJbmZvLkxhYmVsLCBmaWVsZCk7XG5cdFx0XHRcdGNvbnRlbnQuc2V0VGl0bGUodGl0bGUpO1xuXHRcdFx0fVxuXG5cdFx0XHRpZiAoIXNlbGVjdGVkQ29udGVudCB8fCAoc2VsZWN0ZWRDb250ZW50SWQgJiYgc2VsZWN0ZWRDb250ZW50SWQgPT09IGNvbnRlbnRJZCkpIHtcblx0XHRcdFx0c2VsZWN0ZWRDb250ZW50ID0gY29udGVudDtcblx0XHRcdFx0c2VsZWN0ZWRJbmZvID0gdmFsdWVMaXN0SW5mbztcblx0XHRcdH1cblx0XHR9XG5cblx0XHRpZiAoIXNlbGVjdGVkSW5mbyB8fCAhc2VsZWN0ZWRDb250ZW50KSB7XG5cdFx0XHR0aHJvdyBuZXcgRXJyb3IoXCJzZWxlY3RlZEluZm8gb3Igc2VsZWN0ZWRDb250ZW50IHVuZGVmaW5lZFwiKTtcblx0XHR9XG5cblx0XHRyZXR1cm4geyBzZWxlY3RlZEluZm8sIHNlbGVjdGVkQ29udGVudCwgY29uZGl0aW9uQ29udGVudCB9O1xuXHR9LFxuXG5cdF9hZGREZXNjcmlwdGlvbkluZm9zVG9QYXlsb2FkOiBmdW5jdGlvbiAocGF5bG9hZDogVmFsdWVIZWxwUGF5bG9hZCwgdmFsdWVMaXN0SW5mbzogVmFsdWVMaXN0SW5mbywgbWV0YU1vZGVsOiBPRGF0YU1ldGFNb2RlbCk6IHZvaWQge1xuXHRcdGlmIChwYXlsb2FkLnZhbHVlSGVscERlc2NyaXB0aW9uUGF0aCAhPT0gdmFsdWVMaXN0SW5mby5kZXNjcmlwdGlvblBhdGggfHwgcGF5bG9hZC5leHRlcm5hbElkUGF0aCkge1xuXHRcdFx0Y29uc3QgY29udmVydGVkTWV0YWRhdGEgPSBjb252ZXJ0VHlwZXMobWV0YU1vZGVsKTtcblx0XHRcdGNvbnN0IHByb3BlcnR5RGVzY3JpcHRpb25QYXRoID0gKFxuXHRcdFx0XHRjb252ZXJ0ZWRNZXRhZGF0YS5yZXNvbHZlUGF0aDxQcm9wZXJ0eT4ocGF5bG9hZC5wcm9wZXJ0eVBhdGgpLnRhcmdldD8uYW5ub3RhdGlvbnM/LkNvbW1vblxuXHRcdFx0XHRcdD8uVGV4dCBhcyB1bmtub3duIGFzIFBhdGhBbm5vdGF0aW9uRXhwcmVzc2lvbjxzdHJpbmc+XG5cdFx0XHQpPy5wYXRoO1xuXG5cdFx0XHQvKiBFbnJpY2ggcGF5bG9hZCB3aXRoIFRleHQgUHJvcGVydHkgSW5mb3MgKi9cblx0XHRcdHBheWxvYWQudmFsdWVIZWxwRGVzY3JpcHRpb25QYXRoID0gdmFsdWVMaXN0SW5mby5kZXNjcmlwdGlvblBhdGg7XG5cdFx0XHRwYXlsb2FkLnZhbHVlSGVscEtleVBhdGggPSB2YWx1ZUxpc3RJbmZvLmtleVBhdGg7XG5cdFx0XHRpZiAocHJvcGVydHlEZXNjcmlwdGlvblBhdGgpIHtcblx0XHRcdFx0cGF5bG9hZC5tYXhMZW5ndGggPSBwYXlsb2FkLnZhbHVlSGVscERlc2NyaXB0aW9uUGF0aFxuXHRcdFx0XHRcdD8gY29udmVydGVkTWV0YWRhdGEucmVzb2x2ZVBhdGg8UHJvcGVydHk+KFxuXHRcdFx0XHRcdFx0XHRgLyR7dmFsdWVMaXN0SW5mby52YWx1ZUxpc3RJbmZvLkNvbGxlY3Rpb25QYXRofS8ke3BheWxvYWQudmFsdWVIZWxwRGVzY3JpcHRpb25QYXRofWBcblx0XHRcdFx0XHQgICk/LnRhcmdldD8ubWF4TGVuZ3RoXG5cdFx0XHRcdFx0OiB1bmRlZmluZWQ7XG5cdFx0XHRcdHBheWxvYWQucHJvcGVydHlEZXNjcmlwdGlvblBhdGggPSBwcm9wZXJ0eURlc2NyaXB0aW9uUGF0aDtcblx0XHRcdH1cblxuXHRcdFx0LyogRVhURVJOQUxJRCAqL1xuXHRcdFx0Ly8gQWRkIGRlc2NyaXB0aW9uUGF0aCB0byB0aGUgcGF5bG9hZCBhbmQgdmFsdWVMaXN0SW5mb1xuXHRcdFx0Y29uc3QgZXh0ZXJuYWxJZFBhdGggPSBwYXlsb2FkLmV4dGVybmFsSWRQYXRoO1xuXHRcdFx0aWYgKGV4dGVybmFsSWRQYXRoICYmICFwYXlsb2FkLnZhbHVlSGVscERlc2NyaXB0aW9uUGF0aCkge1xuXHRcdFx0XHRjb25zdCBwcm9wZXJ0eU5hbWUgPSBtZXRhTW9kZWwuZ2V0T2JqZWN0KGAke3BheWxvYWQucHJvcGVydHlQYXRofUBzYXB1aS5uYW1lYCk7XG5cdFx0XHRcdGNvbnN0IGV4dGVybmFsSWRGdWxsUGF0aCA9IHBheWxvYWQucHJvcGVydHlQYXRoLnJlcGxhY2UocHJvcGVydHlOYW1lLCBleHRlcm5hbElkUGF0aCk7XG5cdFx0XHRcdGNvbnN0IGRlc2NyaXB0aW9uUGF0aCA9IChcblx0XHRcdFx0XHRjb252ZXJ0ZWRNZXRhZGF0YS5yZXNvbHZlUGF0aDxQcm9wZXJ0eT4oZXh0ZXJuYWxJZEZ1bGxQYXRoKS50YXJnZXQ/LmFubm90YXRpb25zPy5Db21tb25cblx0XHRcdFx0XHRcdD8uVGV4dCBhcyB1bmtub3duIGFzIFBhdGhBbm5vdGF0aW9uRXhwcmVzc2lvbjxzdHJpbmc+XG5cdFx0XHRcdCk/LnBhdGg7XG5cdFx0XHRcdHZhbHVlTGlzdEluZm8uZGVzY3JpcHRpb25QYXRoID0gZGVzY3JpcHRpb25QYXRoO1xuXHRcdFx0XHRwYXlsb2FkLnZhbHVlSGVscERlc2NyaXB0aW9uUGF0aCA9IGRlc2NyaXB0aW9uUGF0aDtcblx0XHRcdH1cblx0XHR9XG5cdH0sXG5cblx0c2hvd1ZhbHVlTGlzdDogYXN5bmMgZnVuY3Rpb24gKHBheWxvYWQ6IFZhbHVlSGVscFBheWxvYWQsIGNvbnRhaW5lcjogQ29udGFpbmVyLCBzZWxlY3RlZENvbnRlbnRJZDogc3RyaW5nKTogUHJvbWlzZTx2b2lkPiB7XG5cdFx0Y29uc3QgdmFsdWVIZWxwID0gY29udGFpbmVyLmdldFBhcmVudCgpIGFzIFZhbHVlSGVscCxcblx0XHRcdGlzVHlwZWFoZWFkID0gY29udGFpbmVyLmlzVHlwZWFoZWFkKCksXG5cdFx0XHRwcm9wZXJ0eVBhdGggPSBwYXlsb2FkLnByb3BlcnR5UGF0aCxcblx0XHRcdC8qIEluIGNhc2Ugb2YgUkFQIHRoZSB2YWx1ZUhlbHAgbW9kZWwgaXMgZGlmZmVyZW50IHRvIHRoZSBjb250cm9sIG1vZGVsICovXG5cdFx0XHRjb250cm9sID0gdmFsdWVIZWxwLmdldENvbnRyb2woKSxcblx0XHRcdG1ldGFNb2RlbCA9IGNvbnRyb2xcblx0XHRcdFx0PyAodmFsdWVIZWxwLmdldENvbnRyb2woKT8uZ2V0TW9kZWwoKSBhcyBPRGF0YU1vZGVsKS5nZXRNZXRhTW9kZWwoKVxuXHRcdFx0XHQ6ICh2YWx1ZUhlbHAuZ2V0TW9kZWwoKSBhcyBPRGF0YU1vZGVsKS5nZXRNZXRhTW9kZWwoKSxcblx0XHRcdHZoVUlNb2RlbCA9XG5cdFx0XHRcdHZhbHVlSGVscC5nZXRNb2RlbChcIl9WSFVJXCIpICE9PSB1bmRlZmluZWRcblx0XHRcdFx0XHQ/ICh2YWx1ZUhlbHAuZ2V0TW9kZWwoXCJfVkhVSVwiKSBhcyBKU09OTW9kZWwpXG5cdFx0XHRcdFx0OiBWYWx1ZUxpc3RIZWxwZXIuY3JlYXRlVkhVSU1vZGVsKHZhbHVlSGVscCwgcHJvcGVydHlQYXRoLCBtZXRhTW9kZWwpO1xuXHRcdC8qIEVYVEVSTkFMSUQgKi9cblx0XHRwYXlsb2FkLmV4dGVybmFsSWRQYXRoID0gbWV0YU1vZGVsPy5nZXRPYmplY3QoYCR7cGF5bG9hZC5wcm9wZXJ0eVBhdGh9QGNvbS5zYXAudm9jYWJ1bGFyaWVzLkNvbW1vbi52MS5FeHRlcm5hbElEYCk/LiRQYXRoO1xuXG5cdFx0dmhVSU1vZGVsLnNldFByb3BlcnR5KFwiL2lzU3VnZ2VzdGlvblwiLCBpc1R5cGVhaGVhZCk7XG5cdFx0dmhVSU1vZGVsLnNldFByb3BlcnR5KFwiL21pblNjcmVlbldpZHRoXCIsICFpc1R5cGVhaGVhZCA/IFwiNDE4cHhcIiA6IHVuZGVmaW5lZCk7XG5cblx0XHR0cnkge1xuXHRcdFx0Y29uc3QgdmFsdWVMaXN0SW5mb3MgPSBhd2FpdCBWYWx1ZUxpc3RIZWxwZXIuZ2V0VmFsdWVMaXN0SW5mbyh2YWx1ZUhlbHAsIHByb3BlcnR5UGF0aCwgcGF5bG9hZCwgbWV0YU1vZGVsKTtcblx0XHRcdGNvbnN0IGZpcnN0VHlwZUFoZWFkQ29udGVudCA9IHZhbHVlSGVscC5nZXRUeXBlYWhlYWQoKS5nZXRDb250ZW50KClbMF0gYXMgTVRhYmxlLFxuXHRcdFx0XHRjYXNlU2Vuc2l0aXZlID0gZmlyc3RUeXBlQWhlYWRDb250ZW50LmdldENhc2VTZW5zaXRpdmUoKTsgLy8gdGFrZSBjYXNlU2Vuc2l0aXZlIGZyb20gZmlyc3QgVHlwZWFoZWFkIGNvbnRlbnRcblxuXHRcdFx0aWYgKGlzVHlwZWFoZWFkKSB7XG5cdFx0XHRcdGNvbnN0IHsgdmFsdWVMaXN0SW5mbywgY29udGVudCB9ID0gVmFsdWVMaXN0SGVscGVyLl9wcmVwYXJlVmFsdWVIZWxwVHlwZUFoZWFkKFxuXHRcdFx0XHRcdHZhbHVlSGVscCxcblx0XHRcdFx0XHRjb250YWluZXIsXG5cdFx0XHRcdFx0dmFsdWVMaXN0SW5mb3MsXG5cdFx0XHRcdFx0cGF5bG9hZCxcblx0XHRcdFx0XHRjYXNlU2Vuc2l0aXZlLFxuXHRcdFx0XHRcdGZpcnN0VHlwZUFoZWFkQ29udGVudFxuXHRcdFx0XHQpO1xuXG5cdFx0XHRcdHBheWxvYWQudmFsdWVIZWxwUXVhbGlmaWVyID0gdmFsdWVMaXN0SW5mby52YWx1ZUhlbHBRdWFsaWZpZXI7XG5cdFx0XHRcdHZoVUlNb2RlbC5zZXRQcm9wZXJ0eShcblx0XHRcdFx0XHRcIi9zZWxlY3RlZFByb3BlcnRpZXNcIixcblx0XHRcdFx0XHR2YWx1ZUxpc3RJbmZvLmNvbHVtbkRlZnMubWFwKChjb2wpID0+IGNvbC5wYXRoKVxuXHRcdFx0XHQpO1xuXHRcdFx0XHRWYWx1ZUxpc3RIZWxwZXIuX2FkZERlc2NyaXB0aW9uSW5mb3NUb1BheWxvYWQocGF5bG9hZCwgdmFsdWVMaXN0SW5mbywgbWV0YU1vZGVsKTtcblxuXHRcdFx0XHRpZiAoY29udGVudC5nZXRUYWJsZSgpID09PSB1bmRlZmluZWQgfHwgY29udGVudC5nZXRUYWJsZSgpID09PSBudWxsKSB7XG5cdFx0XHRcdFx0YXdhaXQgVmFsdWVMaXN0SGVscGVyLl9jcmVhdGVWYWx1ZUhlbHBUeXBlYWhlYWQocHJvcGVydHlQYXRoLCB2YWx1ZUhlbHAsIGNvbnRlbnQsIHZhbHVlTGlzdEluZm8sIHBheWxvYWQsIG1ldGFNb2RlbCk7XG5cdFx0XHRcdH1cblx0XHRcdH0gZWxzZSB7XG5cdFx0XHRcdGNvbnN0IHsgc2VsZWN0ZWRJbmZvLCBzZWxlY3RlZENvbnRlbnQsIGNvbmRpdGlvbkNvbnRlbnQgfSA9IFZhbHVlTGlzdEhlbHBlci5fcHJlcGFyZVZhbHVlSGVscERpYWxvZyhcblx0XHRcdFx0XHR2YWx1ZUhlbHAsXG5cdFx0XHRcdFx0Y29udGFpbmVyLFxuXHRcdFx0XHRcdHZhbHVlTGlzdEluZm9zLFxuXHRcdFx0XHRcdHBheWxvYWQsXG5cdFx0XHRcdFx0c2VsZWN0ZWRDb250ZW50SWQsXG5cdFx0XHRcdFx0Y2FzZVNlbnNpdGl2ZVxuXHRcdFx0XHQpO1xuXG5cdFx0XHRcdHBheWxvYWQudmFsdWVIZWxwUXVhbGlmaWVyID0gc2VsZWN0ZWRJbmZvLnZhbHVlSGVscFF1YWxpZmllcjtcblx0XHRcdFx0VmFsdWVMaXN0SGVscGVyLl9hZGREZXNjcmlwdGlvbkluZm9zVG9QYXlsb2FkKHBheWxvYWQsIHNlbGVjdGVkSW5mbywgbWV0YU1vZGVsKTtcblxuXHRcdFx0XHQvKiBGb3IgY29udGV4dCBkZXBlbnRlbnQgdmFsdWUgaGVscHMgdGhlIHZhbHVlIGxpc3QgbGFiZWwgaXMgdXNlZCBmb3IgdGhlIGRpYWxvZyB0aXRsZSAqL1xuXHRcdFx0XHRjb25zdCBmaWVsZCA9IHZhbHVlSGVscC5nZXRDb250cm9sKCk7XG5cdFx0XHRcdGlmIChmaWVsZCkge1xuXHRcdFx0XHRcdGNvbnN0IHRpdGxlID0gQ29tbW9uVXRpbHMuZ2V0VHJhbnNsYXRlZFRleHRGcm9tRXhwQmluZGluZ1N0cmluZyhcblx0XHRcdFx0XHRcdFZhbHVlTGlzdEhlbHBlci5fZ2V0RGlhbG9nVGl0bGUodmFsdWVIZWxwLCBzZWxlY3RlZEluZm8udmFsdWVMaXN0SW5mbz8uTGFiZWwpLFxuXHRcdFx0XHRcdFx0ZmllbGRcblx0XHRcdFx0XHQpO1xuXHRcdFx0XHRcdGNvbnRhaW5lci5zZXRUaXRsZSh0aXRsZSk7XG5cdFx0XHRcdH1cblxuXHRcdFx0XHRpZiAoc2VsZWN0ZWRDb250ZW50LmdldFRhYmxlKCkgPT09IHVuZGVmaW5lZCB8fCBzZWxlY3RlZENvbnRlbnQuZ2V0VGFibGUoKSA9PT0gbnVsbCkge1xuXHRcdFx0XHRcdGF3YWl0IFZhbHVlTGlzdEhlbHBlci5fY3JlYXRlVmFsdWVIZWxwRGlhbG9nKFxuXHRcdFx0XHRcdFx0bWV0YU1vZGVsLFxuXHRcdFx0XHRcdFx0cHJvcGVydHlQYXRoLFxuXHRcdFx0XHRcdFx0dmFsdWVIZWxwLFxuXHRcdFx0XHRcdFx0c2VsZWN0ZWRDb250ZW50LFxuXHRcdFx0XHRcdFx0c2VsZWN0ZWRJbmZvLFxuXHRcdFx0XHRcdFx0cGF5bG9hZCxcblx0XHRcdFx0XHRcdGNvbmRpdGlvbkNvbnRlbnRcblx0XHRcdFx0XHQpO1xuXHRcdFx0XHR9XG5cdFx0XHR9XG5cdFx0fSBjYXRjaCAoZXJyKSB7XG5cdFx0XHR0aGlzLl9sb2dFcnJvcihwcm9wZXJ0eVBhdGgsIGVycik7XG5cdFx0XHRWYWx1ZUxpc3RIZWxwZXIuZGVzdHJveVZIQ29udGVudCh2YWx1ZUhlbHApO1xuXHRcdH1cblx0fSxcblxuXHRnZXRJbkFuZE91dFBhcmFtZXRlcnNMaXN0KCk6IENvbW1vbkFubm90YXRpb25UeXBlc1tdIHtcblx0XHRyZXR1cm4gW1xuXHRcdFx0Q29tbW9uQW5ub3RhdGlvblR5cGVzLlZhbHVlTGlzdFBhcmFtZXRlck91dCxcblx0XHRcdENvbW1vbkFubm90YXRpb25UeXBlcy5WYWx1ZUxpc3RQYXJhbWV0ZXJJbixcblx0XHRcdENvbW1vbkFubm90YXRpb25UeXBlcy5WYWx1ZUxpc3RQYXJhbWV0ZXJJbk91dFxuXHRcdF07XG5cdH0sXG5cblx0Z2V0VGVjaG5pY2FsS2V5cyh2aFBhcmFtZXRlcnM6IEluT3V0UGFyYW1ldGVyW10sIHZoS2V5czogc3RyaW5nW10gfCB1bmRlZmluZWQpOiBzdHJpbmdbXSB7XG5cdFx0Y29uc3QgaW5PdXRQYXJhbWV0ZXJzID0gVmFsdWVMaXN0SGVscGVyLmdldEluQW5kT3V0UGFyYW1ldGVycyh2aFBhcmFtZXRlcnMpLm1hcCgocGFyYW1ldGVyKSA9PiBwYXJhbWV0ZXIuaGVscFBhdGgpO1xuXHRcdHJldHVybiAodmhLZXlzID8/IFtdKS5maWx0ZXIoKHZoS2V5KSA9PiAhaW5PdXRQYXJhbWV0ZXJzLmluY2x1ZGVzKHZoS2V5KSk7XG5cdH1cbn07XG5cbmV4cG9ydCBkZWZhdWx0IFZhbHVlTGlzdEhlbHBlcjtcbiJdLCJtYXBwaW5ncyI6Ijs7Ozs7Ozs7Ozs7Ozs7Ozs7RUFpRUE7O0VBa0JBLE1BQU1BLHVCQUF1QixHQUFHQSxDQUFDQyxVQUF1QixFQUFFQyxLQUFhLEtBQWMsQ0FBQ0QsVUFBVSxDQUFDRSxJQUFJLENBQUVDLE1BQU0sSUFBS0EsTUFBTSxDQUFDQyxJQUFJLEtBQUtILEtBQUssQ0FBQztFQUVqSSxNQUFNSSxlQUFlLEdBQUcsdUNBQXVDO0lBQ3JFQyxjQUFjLEdBQUcsc0NBQXNDO0lBQ3ZEQywrQkFBK0IsR0FBRyxpRkFBaUY7SUFDbkhDLDhCQUE4QixHQUFHLHFEQUFxRDtJQUN0RkMsb0NBQW9DLEdBQUcsMkRBQTJEO0lBQ2xHQywrQkFBK0IsR0FBRyxzREFBc0Q7SUFDeEZDLGlDQUFpQyxHQUFHLHdEQUF3RDtJQUM1RkMsa0NBQWtDLEdBQUcsMERBQTBEO0lBQy9GQywyQ0FBMkMsR0FBRyw4REFBOEQ7SUFDNUdDLHNDQUFzQyxHQUFHLDZEQUE2RDtFQUFDQyxRQUFBLENBQUFWLGVBQUEsR0FBQUEsZUFBQTtFQUFBVSxRQUFBLENBQUFELHNDQUFBLEdBQUFBLHNDQUFBO0VBQUFDLFFBQUEsQ0FBQUYsMkNBQUEsR0FBQUEsMkNBQUE7RUFBQUUsUUFBQSxDQUFBSCxrQ0FBQSxHQUFBQSxrQ0FBQTtFQUFBRyxRQUFBLENBQUFKLGlDQUFBLEdBQUFBLGlDQUFBO0VBQUFJLFFBQUEsQ0FBQUwsK0JBQUEsR0FBQUEsK0JBQUE7RUFBQUssUUFBQSxDQUFBTixvQ0FBQSxHQUFBQSxvQ0FBQTtFQUFBTSxRQUFBLENB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
1234
+ //# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJuYW1lcyI6WyJjb2x1bW5Ob3RBbHJlYWR5RGVmaW5lZCIsImNvbHVtbkRlZnMiLCJ2aEtleSIsInNvbWUiLCJjb2x1bW4iLCJwYXRoIiwiQW5ub3RhdGlvbkxhYmVsIiwiQW5ub3RhdGlvblRleHQiLCJBbm5vdGF0aW9uVGV4dFVJVGV4dEFycmFuZ2VtZW50IiwiQW5ub3RhdGlvblZhbHVlTGlzdFBhcmFtZXRlckluIiwiQW5ub3RhdGlvblZhbHVlTGlzdFBhcmFtZXRlckNvbnN0YW50IiwiQW5ub3RhdGlvblZhbHVlTGlzdFBhcmFtZXRlck91dCIsIkFubm90YXRpb25WYWx1ZUxpc3RQYXJhbWV0ZXJJbk91dCIsIkFubm90YXRpb25WYWx1ZUxpc3RXaXRoRml4ZWRWYWx1ZXMiLCJBbm5vdGF0aW9uc1BlcnNvbmFsRGF0YVBvdGVudGlhbGx5U2Vuc2l0aXZlIiwiQW5ub3RhdGlvbnNWYWx1ZUxpc3RSZWxldmFudFF1YWxpZmllcnMiLCJfZXhwb3J0cyIsIl9nZXREZWZhdWx0U29ydFByb3BlcnR5TmFtZSIsInZhbHVlTGlzdEluZm8iLCJzb3J0RmllbGROYW1lIiwibWV0YU1vZGVsIiwiJG1vZGVsIiwiZ2V0TWV0YU1vZGVsIiwiZW50aXR5U2V0QW5ub3RhdGlvbnMiLCJnZXRPYmplY3QiLCJDb2xsZWN0aW9uUGF0aCIsInNvcnRSZXN0cmljdGlvbnNJbmZvIiwiZ2V0U29ydFJlc3RyaWN0aW9uc0luZm8iLCJmb3VuZEVsZW1lbnQiLCJQYXJhbWV0ZXJzIiwiZmluZCIsImVsZW1lbnQiLCIkVHlwZSIsIlZhbHVlTGlzdFByb3BlcnR5IiwicHJvcGVydHlJbmZvIiwic29ydGFibGUiLCJ1bmRlZmluZWQiLCJfcmVkdW5kYW50RGVzY3JpcHRpb24iLCJvVkxQYXJhbWV0ZXIiLCJhQ29sdW1uSW5mbyIsIm9Db2x1bW5JbmZvIiwiY29sdW1uSW5mbyIsInRleHRDb2x1bW5OYW1lIiwia2V5Q29sdW1uSGlkZGVuIiwia2V5Q29sdW1uRGlzcGxheUZvcm1hdCIsIl9oYXNJbXBvcnRhbmNlSGlnaCIsIm9WYWx1ZUxpc3RDb250ZXh0Iiwib1BhcmFtZXRlciIsIiRFbnVtTWVtYmVyIiwiX2J1aWxkJFNlbGVjdFN0cmluZyIsImNvbnRyb2wiLCJvVmlld0RhdGEiLCJnZXRNb2RlbCIsIm9EYXRhIiwiZ2V0RGF0YSIsImFDb2x1bW5zIiwiY29sdW1ucyIsInJlZHVjZSIsInNRdWVyeSIsIm9Qcm9wZXJ0eSIsImluY2x1ZGVzIiwiX2dldFZhbHVlSGVscENvbHVtbkRpc3BsYXlGb3JtYXQiLCJvUHJvcGVydHlBbm5vdGF0aW9ucyIsImlzVmFsdWVIZWxwV2l0aEZpeGVkVmFsdWVzIiwic0Rpc3BsYXlNb2RlIiwiQ29tbW9uVXRpbHMiLCJjb21wdXRlRGlzcGxheU1vZGUiLCJvVGV4dEFubm90YXRpb24iLCJvVGV4dEFycmFuZ2VtZW50QW5ub3RhdGlvbiIsIiRQYXRoIiwiZ2V0UHJlc2VudGF0aW9uVmFyaWFudCIsInZhbHVlTGlzdCIsInByZXNlbnRhdGlvblZhcmlhbnRRdWFsaWZpZXIiLCJQcmVzZW50YXRpb25WYXJpYW50UXVhbGlmaWVyIiwicHJlc2VudGF0aW9uVmFyaWFudFBhdGgiLCJWYWx1ZUxpc3RIZWxwZXIiLCJnZXRWYWx1ZUxpc3RDb2xsZWN0aW9uRW50aXR5U2V0IiwibVZhbHVlTGlzdCIsImNyZWF0ZUJpbmRpbmdDb250ZXh0IiwiaXNUcmVlVGFibGVUeXBlIiwiX2dldFByZXNlbnRhdGlvblZhcmlhIiwiUmVjdXJzaXZlSGllcmFyY2h5UXVhbGlmaWVyIiwiZ2V0VGFibGVEZWxlZ2F0ZSIsInNEZWZhdWx0U29ydFByb3BlcnR5TmFtZSIsInByZXNlbnRhdGlvblZhcmlhbnQiLCJyZWN1cnNpdmVIaWVyYXJjaHlRdWFsaWZpZXIiLCJpbml0aWFsRXhwYW5zaW9uTGV2ZWwiLCJJbml0aWFsRXhwYW5zaW9uTGV2ZWwiLCJnZXRTb3J0Q29uZGl0aW9uc0Zyb21QcmVzZW50YXRpb25WYXJpYW50IiwiaXNTdWdnZXN0aW9uIiwiU29ydE9yZGVyIiwic29ydENvbmRpdGlvbnMiLCJzb3J0ZXJzIiwiZm9yRWFjaCIsImNvbmRpdGlvbiIsIl9jb25kaXRpb24kUHJvcGVydHkiLCJzb3J0ZXIiLCJwcm9wZXJ0eVBhdGgiLCJQcm9wZXJ0eSIsIiRQcm9wZXJ0eVBhdGgiLCJuYW1lIiwiRGVzY2VuZGluZyIsImRlc2NlbmRpbmciLCJhc2NlbmRpbmciLCJwdXNoIiwiSlNPTiIsInN0cmluZ2lmeSIsImdldFNvcnRDb25kaXRpb25zRm9yVmFsdWVMaXN0Iiwic29ydENvbmRpdGlvbnNGcm9tUHJlc2VudGF0aW9uVmFyaWFudCIsImdldFByb3BlcnR5UGF0aCIsIm9QYXJhbWV0ZXJzIiwiVW5ib3VuZEFjdGlvbiIsIkVudGl0eVR5cGVQYXRoIiwiQWN0aW9uIiwic3Vic3RyaW5nIiwibGFzdEluZGV4T2YiLCJnZXRWYWx1ZUxpc3RQcm9wZXJ0eSIsIm9Qcm9wZXJ0eUNvbnRleHQiLCJvVmFsdWVMaXN0TW9kZWwiLCJnZXRDb2x1bW5WaXNpYmlsaXR5Iiwib1ZhbHVlTGlzdCIsIm9Tb3VyY2UiLCJpc0Ryb3BEb3duTGlzdCIsInZhbHVlSGVscFdpdGhGaXhlZFZhbHVlcyIsImlzVmlzaWJsZSIsImNvbHVtbkluZm9zIiwiaXNEaWFsb2dUYWJsZSIsImNvbHVtbldpdGhIaWRkZW5Bbm5vdGF0aW9uIiwiY29sdW1uTmFtZSIsImhhc0hpZGRlbkFubm90YXRpb24iLCJnZXRDb2x1bW5WaXNpYmlsaXR5SW5mbyIsInNQcm9wZXJ0eUZ1bGxQYXRoIiwiYklzRHJvcERvd25MaXN0ZSIsIm9NZXRhTW9kZWwiLCJhQ29sdW1uSW5mb3MiLCJvQ29sdW1uSW5mb3MiLCJnZXRUYWJsZUl0ZW1zUGFyYW1ldGVycyIsInJlcXVlc3RHcm91cElkIiwiaXRlbVBhcmFtZXRlcnMiLCJzZWxlY3RTdHJpbmciLCJzZWxlY3RTdHJpbmdQYXJ0IiwiaXNTdXNwZW5kZWQiLCJkZWZhdWx0U29ydFByb3BlcnR5TmFtZSIsImpvaW4iLCJoYXNJbXBvcnRhbmNlIiwiZ2V0TWluU2NyZWVuV2lkdGgiLCJnZXRDb2x1bW5XaWR0aCIsIl9wcm9wZXJ0eSRhbm5vdGF0aW9ucyIsIl9wcm9wZXJ0eSRhbm5vdGF0aW9uczIiLCJfdGV4dEFubm90YXRpb24kYW5ub3QiLCJfdGV4dEFubm90YXRpb24kYW5ub3QyIiwiX3RleHRBbm5vdGF0aW9uJGFubm90MyIsIl9wcm9wZXJ0eSRhbm5vdGF0aW9uczMiLCJfcHJvcGVydHkkYW5ub3RhdGlvbnM0IiwiX3Byb3BlcnR5JGFubm90YXRpb25zNSIsImlzVmFsdWVMaXN0V2l0aEZpeGVkVmFsdWVzIiwiYXJndW1lbnRzIiwibGVuZ3RoIiwiaXNTbWFsbERldmljZSIsInRhcmdldE9iamVjdCIsInByb3BlcnR5IiwicmVsYXRlZFByb3BlcnR5IiwiYWRkaXRpb25hbFByb3BlcnR5IiwiZ2V0QXNzb2NpYXRlZFRleHRQcm9wZXJ0eSIsImdldEFzc29jaWF0ZWRDdXJyZW5jeVByb3BlcnR5IiwiZ2V0QXNzb2NpYXRlZFVuaXRQcm9wZXJ0eSIsImdldEFzc29jaWF0ZWRUaW1lem9uZVByb3BlcnR5IiwidGV4dEFubm90YXRpb24iLCJhbm5vdGF0aW9ucyIsIkNvbW1vbiIsIlRleHQiLCJ0ZXh0QXJyYW5nZW1lbnQiLCJVSSIsIlRleHRBcnJhbmdlbWVudCIsInRvU3RyaW5nIiwibGFiZWwiLCJMYWJlbCIsImRpc3BsYXlNb2RlIiwiZ2V0RGlzcGxheU1vZGUiLCJzaXplIiwiaW5zdGFuY2VzIiwicHJvcCIsInByb3BlcnR5VHlwZUNvbmZpZyIsImdldFR5cGVDb25maWciLCJQcm9wZXJ0eU9EYXRhQ29uc3RydWN0b3IiLCJPYmplY3RQYXRoIiwiZ2V0IiwidHlwZSIsImZvcm1hdE9wdGlvbnMiLCJjb25zdHJhaW50cyIsInNXaWR0aCIsIlV0aWwiLCJjYWxjQ29sdW1uV2lkdGgiLCJwYXJzZUZsb2F0IiwicmVwbGFjZSIsIkxvZyIsImVycm9yIiwiZ2V0T3V0UGFyYW1ldGVyUGF0aHMiLCJhUGFyYW1ldGVycyIsInNQYXRoIiwiZW5kc1dpdGgiLCJlbnRpdHlJc1NlYXJjaGFibGUiLCJwcm9wZXJ0eUFubm90YXRpb25zIiwiY29sbGVjdGlvbkFubm90YXRpb25zIiwiX3Byb3BlcnR5QW5ub3RhdGlvbnMkIiwiX2NvbGxlY3Rpb25Bbm5vdGF0aW9uIiwic2VhcmNoU3VwcG9ydGVkIiwiU2VhcmNoU3VwcG9ydGVkIiwic2VhcmNoYWJsZSIsIlNlYXJjaGFibGUiLCJfZ2V0Q29uZGl0aW9uUGF0aCIsImVudGl0eVNldCIsInBhcnRzIiwic3BsaXQiLCJjb25kaXRpb25QYXRoIiwicGFydGlhbFBhdGgiLCJwYXJ0Iiwic2hpZnQiLCIka2luZCIsIiRpc0NvbGxlY3Rpb24iLCJfZ2V0Q29sdW1uRGVmaW5pdGlvbkZyb21TZWxlY3Rpb25GaWVsZHMiLCJlbnRpdHlUeXBlQW5ub3RhdGlvbnMiLCJzZWxlY3Rpb25GaWVsZHMiLCJzZWxlY3Rpb25GaWVsZCIsIl9tZXRhTW9kZWwkZ2V0T2JqZWN0Iiwic2VsZWN0aW9uRmllbGRQYXRoIiwiY29sdW1uRGVmIiwiZmlsdGVyYWJsZSIsImlzUHJvcGVydHlGaWx0ZXJhYmxlIiwiX21lcmdlQ29sdW1uRGVmaW5pdGlvbnNGcm9tUHJvcGVydGllcyIsInZhbHVlTGlzdFByb3BlcnR5IiwiX3Byb3BlcnR5QW5ub3RhdGlvbnMkMiIsImNvbHVtblBhdGgiLCJjb2x1bW5Qcm9wZXJ0eVR5cGUiLCJfdmFsdWVMaXN0SW5mbyQkbW9kZWwiLCJfdmFsdWVMaXN0SW5mbyQkbW9kZWwyIiwidGV4dFByb3BlcnR5UGF0aCIsInRleHRQYXRoIiwiZmlsdGVySW5PdXRQYXJhbWV0ZXJzIiwidmhQYXJhbWV0ZXJzIiwidHlwZUZpbHRlciIsImZpbHRlciIsInBhcmFtZXRlciIsInBhcm1ldGVyVHlwZSIsImdldEluUGFyYW1ldGVycyIsImdldE91dFBhcmFtZXRlcnMiLCJnZXRJbkFuZE91dFBhcmFtZXRlcnMiLCJnZXRJbkFuZE91dFBhcmFtZXRlcnNMaXN0IiwiY3JlYXRlVkhVSU1vZGVsIiwidmFsdWVIZWxwIiwidmhVSU1vZGVsIiwiSlNPTk1vZGVsIiwic2V0TW9kZWwiLCJzZXRQcm9wZXJ0eSIsIl9nZXREaWFsb2dUaXRsZSIsInZhbHVlaGVscExhYmVsIiwiX3ZhbHVlSGVscCRnZXRDb250cm9sIiwicHJvcGVydHlMYWJlbCIsImdldFByb3BlcnR5IiwiZGF0YUZpZWxkTGFiZWwiLCJnZXRDb250cm9sIiwiZGVzdHJveVZIQ29udGVudCIsImdldERpYWxvZyIsImRlc3Ryb3lDb250ZW50IiwiZ2V0VHlwZWFoZWFkIiwicHV0RGVmYXVsdFF1YWxpZmllckZpcnN0IiwicXVhbGlmaWVycyIsImluZGV4RGVmYXVsdFZIIiwiaW5kZXhPZiIsInVuc2hpZnQiLCJzcGxpY2UiLCJfZ2V0Q29udGV4dFByZWZpeCIsImJpbmRpbmdDb250ZXh0IiwicHJvcGVydHlCaW5kaW5nUGFydHMiLCJnZXRQYXRoIiwiYmluZGlnQ29udGV4dFBhcnRzIiwiY29udGV4dFByZWZpeFBhcnRzIiwiaSIsIl9nZXRWaFBhcmFtZXRlciIsImNvbmRpdGlvbk1vZGVsIiwiY29udGV4dFByZWZpeCIsInZoTWV0YU1vZGVsIiwibG9jYWxEYXRhUHJvcGVydHlQYXRoIiwidmFsdWVQYXRoIiwiZ2V0QmluZGluZ0NvbnRleHQiLCJfdmFsdWVIZWxwJGdldFBhcmVudCIsIl92YWx1ZUhlbHAkZ2V0UGFyZW50MiIsIl92YWx1ZUhlbHAkZ2V0UGFyZW50MyIsIl92YWx1ZUhlbHAkZ2V0UGFyZW50NCIsImdldFBhcmVudCIsImlzQSIsIl9wYXJhbWV0ZXJJc0EiLCJmaXJzdE5hdmlnYXRpb25Qcm9wZXJ0eSIsIm9Cb3VuZEVudGl0eSIsImdldE1ldGFDb250ZXh0Iiwic1BhdGhPZlRhYmxlIiwiZ2V0Um93QmluZGluZyIsIl92YWx1ZUhlbHAkZ2V0UGFyZW50NSIsIl92YWx1ZUhlbHAkZ2V0UGFyZW50NiIsImZpbHRlckJhckFQSSIsImZpbHRlckJhck1ldGFQYXRoIiwibWV0YVBhdGgiLCJ2YWx1ZUhlbHBDb250ZXh0UGF0aCIsImdldE1ldGFQYXRoIiwiY29udGV4dE1ldGFQYXRoIiwiTWV0YVBhdGgiLCJjb252ZXJ0VHlwZXMiLCJuZXdQYXRoIiwiZ2V0TWV0YVBhdGhGb3JQYXRoIiwiZ2V0VGFyZ2V0IiwidGFyZ2V0RW50aXR5U2V0IiwiZ2V0Q2xvc2VzdEVudGl0eVNldCIsIl9jb250ZXh0TWV0YVBhdGgkZ2V0TSIsImdldE1ldGFQYXRoRm9yT2JqZWN0IiwiZ2V0UmVsYXRpdmVQYXRoIiwic291cmNlIiwiaGVscFBhdGgiLCJjb25zdGFudFZhbHVlIiwiQ29uc3RhbnQiLCJpbml0aWFsVmFsdWVJc1NpZ25pZmljYW50IiwiQm9vbGVhbiIsIkluaXRpYWxWYWx1ZUlzU2lnbmlmaWNhbnQiLCJwYXJhbWV0ZXJUeXBlcyIsIl9lbnJpY2hQYXRoIiwicHJvcGVydHlOYW1lIiwiZXh0ZXJuYWxJZFBhdGgiLCJrZXkiLCJfcHJvcGVydHlBbm5vdGF0aW9ucyQzIiwiZXh0ZXJuYWxJZFByb3BlcnR5IiwicG9wIiwiZmllbGRQcm9wZXJ0eVBhdGgiLCJkZXNjcmlwdGlvblBhdGgiLCJfZW5yaWNoS2V5cyIsInZoS2V5cyIsIl9wcm9jZXNzUGFyYW1ldGVycyIsImFubm90YXRpb25WYWx1ZUxpc3RUeXBlIiwidmFsdWVIZWxwUXVhbGlmaWVyIiwicGF5bG9hZCIsImlzRm9yTXVsdGlWYWx1ZUZpZWxkIiwidXNlTXVsdGlWYWx1ZUZpZWxkIiwiZW50aXR5U2V0UGF0aCIsImVudGl0eVR5cGUiLCIkS2V5IiwiX3BhcmFtZXRlciRMb2NhbERhdGFQIiwiTG9jYWxEYXRhUHJvcGVydHkiLCJpc1BvdGVudGlhbGx5U2Vuc2l0aXZlIiwidmhQYXJhbWV0ZXIiLCJfbWV0YU1vZGVsJGdldE9iamVjdDIiLCJ2YWx1ZWxpc3RJbmZvIiwia2V5UGF0aCIsIl9sb2dFcnJvciIsInN0YXR1cyIsIm1lc3NhZ2UiLCJFcnJvciIsIlN0cmluZyIsIm1zZyIsImdldFZhbHVlTGlzdEluZm8iLCJ2YWx1ZUxpc3RJbmZvcyIsInByb3BlcnR5UGF0aFBhcnRzIiwidmFsdWVMaXN0QnlRdWFsaWZpZXIiLCJyZXF1ZXN0VmFsdWVMaXN0SW5mbyIsInZhbHVlSGVscFF1YWxpZmllcnMiLCJPYmplY3QiLCJrZXlzIiwiJHF1YWxpZmllciIsImVyciIsIkFMTEZSQUdNRU5UUyIsImxvZ0ZyYWdtZW50IiwiX2xvZ1RlbXBsYXRlZEZyYWdtZW50cyIsImZyYWdtZW50TmFtZSIsImZyYWdtZW50RGVmaW5pdGlvbiIsImxvZ0luZm8iLCJmcmFnbWVudCIsImdldExldmVsIiwiTGV2ZWwiLCJERUJVRyIsInNldFRpbWVvdXQiLCJfVmFsdWVMaXN0SGVscGVyJGxvZ0YiLCJjYWxsIiwiX3RlbXBsYXRlRnJhZ21lbnQiLCJzb3VyY2VNb2RlbCIsIl9jb250YWluaW5nVmlldyRnZXRDbyIsImNvbnRhaW5pbmdWaWV3IiwiZ2V0VGFyZ2V0VmlldyIsImFwcENvbXBvbmVudCIsImdldEFwcENvbXBvbmVudCIsImxvY2FsVmFsdWVMaXN0SW5mbyIsInZhbHVlTGlzdE1vZGVsIiwidmFsdWVMaXN0U2VydmljZU1ldGFNb2RlbCIsInZpZXdEYXRhIiwiY29udmVydGVyVHlwZSIsIlhNTFByZXByb2Nlc3NvciIsInByb2Nlc3MiLCJYTUxUZW1wbGF0ZVByb2Nlc3NvciIsImxvYWRUZW1wbGF0ZSIsImJpbmRpbmdDb250ZXh0cyIsImNvbnRleHRQYXRoIiwibW9kZWxzIiwidGVtcGxhdGVDb21wb25lbnQiLCJnZXRDb250cm9sbGVyIiwiZ2V0T3duZXJDb21wb25lbnQiLCJydW5Bc093bmVyIiwiRnJhZ21lbnQiLCJsb2FkIiwiZGVmaW5pdGlvbiIsImNvbnRyb2xsZXIiLCJfZ2V0Q29udGVudElkIiwidmFsdWVIZWxwSWQiLCJpc1R5cGVhaGVhZCIsImNvbnRlbnRUeXBlIiwiX2FkZEluT3V0UGFyYW1ldGVyc1RvUGF5bG9hZCIsInZoUHJvcGVydGllcyIsIlNldCIsImFkZCIsIkFycmF5IiwiZnJvbSIsInRleHRBcnJhbmdlbWVudEFubm90YXRpb24iLCJfZ2V0V2lkdGhJblJlbSIsImlzVW5pdFZhbHVlSGVscCIsIndpZHRoIiwiJCIsImZsb2F0V2lkdGgiLCJSZW0iLCJmcm9tUHgiLCJpc05hTiIsIl9nZXRUYWJsZVdpZHRoIiwidGFibGUiLCJtaW5XaWR0aCIsImlzTXVsdGlTZWxlY3QiLCJnZXRDb2x1bW5zIiwidmlzaWJsZUNvbHVtbnMiLCJnZXRWaXNpYmxlIiwiaW5pdGlhbFN1bSIsInN1bVdpZHRoIiwic3VtIiwiZ2V0V2lkdGgiLCJNYXRoIiwibWF4IiwiX2dldEpTT05Nb2RlbEZvckRpYWxvZyIsImNvbnRlbnQiLCJpc0Ryb3BEb3duTGlzdGUiLCJpZCIsImdldElkIiwiZ3JvdXBJZCIsImJTdWdnZXN0aW9uIiwiX2dldEpTT05Nb2RlbEZvckNvbmRpdGlvbiIsImNhc2VTZW5zaXRpdmUiLCJfZ2V0SlNPTk1vZGVsRm9yVHlwZWFoZWFkIiwiY29udGVudElkIiwiX2NyZWF0ZVZhbHVlSGVscFR5cGVhaGVhZCIsInNldEtleVBhdGgiLCJzZXREZXNjcmlwdGlvblBhdGgiLCJoaXN0b3J5IiwiZW5hYmxlZCIsImNoZWNrSGlzdG9yeUVuYWJsZWQiLCJkYXRhIiwiaW5mbyIsImdldE1ldGFkYXRhIiwiZ2V0TmFtZSIsInNldFRhYmxlIiwiZmllbGQiLCJnZXRWYWx1ZSIsInRhYmxlTW9kZSIsImdldE1heENvbmRpdGlvbnMiLCJzZXRNb2RlIiwiYWRkRXZlbnREZWxlZ2F0ZSIsIm9uQWZ0ZXJSZW5kZXJpbmciLCJSZXNpemVIYW5kbGVyIiwicmVnaXN0ZXIiLCJfc2V0VGFibGVXaWR0aCIsInJlZHVjZVdpZHRoRm9yVW5pdFZhbHVlSGVscCIsInRhYmxlV2lkdGgiLCJzZXRXaWR0aCIsIl9hcHBDb21wb25lbnQkZ2V0TWFuaSIsIl9oaXN0b3J5U2V0dGluZ3MkZmllbCIsIl9oaXN0b3J5U2V0dGluZ3MkZmllbDIiLCJoaXN0b3J5U2V0dGluZ3MiLCJnZXRNYW5pZmVzdEVudHJ5IiwiZmllbGRzIiwiaGlzdG9yeUVuYWJsZWQiLCJfY3JlYXRlVmFsdWVIZWxwRGlhbG9nIiwiY29uZGl0aW9uQ29udGVudCIsInNvdXJjZU1vZGVsRGlhbG9nIiwiZmlyc3RUeXBlQWhlYWRDb250ZW50IiwiZ2V0Q29udGVudCIsImdldENhc2VTZW5zaXRpdmUiLCJzb3VyY2VNb2RlbENvbmRpdGlvbiIsImFkZERlcGVuZGVudCIsInNldFZhbHVlSGVscCIsImNvbmRpdGlvblRhYmxlIiwiZ2V0VGFibGUiLCJ0YWJsZVByb21pc2UiLCJmaWx0ZXJCYXJQcm9taXNlIiwiZmlsdGVyQmFyIiwiUHJvbWlzZSIsImFsbCIsInNldEZpbHRlckJhciIsInNldEZpbHRlciIsImluaXRpYWxpemVkIiwic2V0Q29weVByb3ZpZGVyVmlzaWJpbGl0eSIsIm1kY1RhYmxlIiwiX3NldFNob3dQMTNuQnV0dG9uIiwiX3ZhbHVlSGVscCRnZXRDb250cm9sMiIsIl90YWJsZSRnZXRDb3B5UHJvdmlkZSIsImdldENvcHlQcm92aWRlciIsInNldFZpc2libGUiLCJfZ2V0Q29udGVudEJ5SWQiLCJjb250ZW50TGlzdCIsIml0ZW0iLCJfY3JlYXRlUG9wb3ZlckNvbnRlbnQiLCJ1c2VBc1ZhbHVlSGVscCIsIk1UYWJsZSIsImdyb3VwIiwiX2NyZWF0ZURpYWxvZ0NvbnRlbnQiLCJmb3JjZUJpbmQiLCJNRENUYWJsZSIsIl9zaG93Q29uZGl0aW9uc0NvbnRlbnQiLCJjb250YWluZXIiLCJjb25kaXRpb25zQ29udGVudCIsIkNvbmRpdGlvbnMiLCJhZGRDb250ZW50IiwiX2FsaWduT3JDcmVhdGVDb250ZW50Iiwic2hvd0NvbmRpdGlvblBhbmVsIiwiRmV0Y2hWYWx1ZXMiLCJpbnNlcnRDb250ZW50IiwiX3ByZXBhcmVWYWx1ZUhlbHBUeXBlQWhlYWQiLCJxdWFsaWZpZXJGb3JUeXBlYWhlYWQiLCJzdWJWYWx1ZUxpc3RJbmZvIiwiZ2V0VXNlQXNWYWx1ZUhlbHAiLCJyZW1vdmVDb250ZW50IiwiX3ByZXBhcmVWYWx1ZUhlbHBEaWFsb2ciLCJzZWxlY3RlZENvbnRlbnRJZCIsImNvbnRlbnRMaXN0SXRlbSIsImhhc09wZXJhdG9yRVEiLCJnZXRPcGVyYXRvcnMiLCJzZWxlY3RlZEluZm8iLCJzZWxlY3RlZENvbnRlbnQiLCJ0aXRsZSIsImdldFRyYW5zbGF0ZWRUZXh0RnJvbUV4cEJpbmRpbmdTdHJpbmciLCJzZXRUaXRsZSIsIl9hZGREZXNjcmlwdGlvbkluZm9zVG9QYXlsb2FkIiwidmFsdWVIZWxwRGVzY3JpcHRpb25QYXRoIiwiX2NvbnZlcnRlZE1ldGFkYXRhJHJlIiwiX2NvbnZlcnRlZE1ldGFkYXRhJHJlMiIsIl9jb252ZXJ0ZWRNZXRhZGF0YSRyZTMiLCJfY29udmVydGVkTWV0YWRhdGEkcmU0IiwiY29udmVydGVkTWV0YWRhdGEiLCJwcm9wZXJ0eURlc2NyaXB0aW9uUGF0aCIsInJlc29sdmVQYXRoIiwidGFyZ2V0IiwidmFsdWVIZWxwS2V5UGF0aCIsIl9jb252ZXJ0ZWRNZXRhZGF0YSRyZTUiLCJfY29udmVydGVkTWV0YWRhdGEkcmU2IiwibWF4TGVuZ3RoIiwiX2NvbnZlcnRlZE1ldGFkYXRhJHJlNyIsIl9jb252ZXJ0ZWRNZXRhZGF0YSRyZTgiLCJfY29udmVydGVkTWV0YWRhdGEkcmU5IiwiX2NvbnZlcnRlZE1ldGFkYXRhJHJlMTAiLCJleHRlcm5hbElkRnVsbFBhdGgiLCJzaG93VmFsdWVMaXN0IiwiX3ZhbHVlSGVscCRnZXRDb250cm9sMyIsIl9tZXRhTW9kZWwkZ2V0T2JqZWN0MyIsIm1hcCIsImNvbCIsIl9zZWxlY3RlZEluZm8kdmFsdWVMaSIsImdldFRlY2huaWNhbEtleXMiLCJpbk91dFBhcmFtZXRlcnMiXSwic291cmNlUm9vdCI6Ii4iLCJzb3VyY2VzIjpbIlZhbHVlTGlzdEhlbHBlci50cyJdLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgdHlwZSB7IFBhdGhBbm5vdGF0aW9uRXhwcmVzc2lvbiwgUHJvcGVydHkgfSBmcm9tIFwiQHNhcC11eC92b2NhYnVsYXJpZXMtdHlwZXNcIjtcbmltcG9ydCB7IENvbW1vbkFubm90YXRpb25UeXBlcyB9IGZyb20gXCJAc2FwLXV4L3ZvY2FidWxhcmllcy10eXBlcy92b2NhYnVsYXJpZXMvQ29tbW9uXCI7XG5pbXBvcnQgdHlwZSB7IFByZXNlbnRhdGlvblZhcmlhbnQgfSBmcm9tIFwiQHNhcC11eC92b2NhYnVsYXJpZXMtdHlwZXMvdm9jYWJ1bGFyaWVzL1VJXCI7XG5pbXBvcnQgTG9nIGZyb20gXCJzYXAvYmFzZS9Mb2dcIjtcbmltcG9ydCBPYmplY3RQYXRoIGZyb20gXCJzYXAvYmFzZS91dGlsL09iamVjdFBhdGhcIjtcbmltcG9ydCB0eXBlIHsgQ29tcGlsZWRCaW5kaW5nVG9vbGtpdEV4cHJlc3Npb24gfSBmcm9tIFwic2FwL2ZlL2Jhc2UvQmluZGluZ1Rvb2xraXRcIjtcbmltcG9ydCBDb21tb25VdGlscyBmcm9tIFwic2FwL2ZlL2NvcmUvQ29tbW9uVXRpbHNcIjtcbmltcG9ydCB0eXBlIHsgTWV0YU1vZGVsUHJvcGVydHlBbm5vdGF0aW9ucyB9IGZyb20gXCJzYXAvZmUvY29yZS9jb252ZXJ0ZXJzL01ldGFNb2RlbENvbnZlcnRlclwiO1xuaW1wb3J0IHsgY29udmVydFR5cGVzIH0gZnJvbSBcInNhcC9mZS9jb3JlL2NvbnZlcnRlcnMvTWV0YU1vZGVsQ29udmVydGVyXCI7XG5pbXBvcnQgeyBnZXRTb3J0UmVzdHJpY3Rpb25zSW5mbywgaXNQcm9wZXJ0eUZpbHRlcmFibGUgfSBmcm9tIFwic2FwL2ZlL2NvcmUvaGVscGVycy9NZXRhTW9kZWxGdW5jdGlvblwiO1xuaW1wb3J0IE1ldGFQYXRoIGZyb20gXCJzYXAvZmUvY29yZS9oZWxwZXJzL01ldGFQYXRoXCI7XG5pbXBvcnQgdHlwZSB7IEZpZWxkRGF0YVR5cGUgfSBmcm9tIFwic2FwL2ZlL2NvcmUvc2VydmljZXMvVmFsdWVIZWxwSGlzdG9yeVNlcnZpY2VGYWN0b3J5XCI7XG5pbXBvcnQgdHlwZSB7IERhdGFNb2RlbE9iamVjdFBhdGggfSBmcm9tIFwic2FwL2ZlL2NvcmUvdGVtcGxhdGluZy9EYXRhTW9kZWxQYXRoSGVscGVyXCI7XG5pbXBvcnQge1xuXHRnZXRBc3NvY2lhdGVkQ3VycmVuY3lQcm9wZXJ0eSxcblx0Z2V0QXNzb2NpYXRlZFRleHRQcm9wZXJ0eSxcblx0Z2V0QXNzb2NpYXRlZFRpbWV6b25lUHJvcGVydHksXG5cdGdldEFzc29jaWF0ZWRVbml0UHJvcGVydHlcbn0gZnJvbSBcInNhcC9mZS9jb3JlL3RlbXBsYXRpbmcvUHJvcGVydHlIZWxwZXJcIjtcbmltcG9ydCB7IGdldERpc3BsYXlNb2RlLCBnZXRUeXBlQ29uZmlnIH0gZnJvbSBcInNhcC9mZS9jb3JlL3RlbXBsYXRpbmcvVUlGb3JtYXR0ZXJzXCI7XG5pbXBvcnQgdHlwZSBGaWx0ZXJCYXJBUEkgZnJvbSBcInNhcC9mZS9tYWNyb3MvZmlsdGVyQmFyL0ZpbHRlckJhckFQSVwiO1xuaW1wb3J0IHR5cGUgVGFibGUgZnJvbSBcInNhcC9tL1RhYmxlXCI7XG5pbXBvcnQgVXRpbCBmcm9tIFwic2FwL20vdGFibGUvVXRpbFwiO1xuaW1wb3J0IHR5cGUgQ29udHJvbCBmcm9tIFwic2FwL3VpL2NvcmUvQ29udHJvbFwiO1xuaW1wb3J0IEZyYWdtZW50IGZyb20gXCJzYXAvdWkvY29yZS9GcmFnbWVudFwiO1xuaW1wb3J0IFJlc2l6ZUhhbmRsZXIgZnJvbSBcInNhcC91aS9jb3JlL1Jlc2l6ZUhhbmRsZXJcIjtcbmltcG9ydCBYTUxUZW1wbGF0ZVByb2Nlc3NvciBmcm9tIFwic2FwL3VpL2NvcmUvWE1MVGVtcGxhdGVQcm9jZXNzb3JcIjtcbmltcG9ydCBYTUxQcmVwcm9jZXNzb3IgZnJvbSBcInNhcC91aS9jb3JlL3V0aWwvWE1MUHJlcHJvY2Vzc29yXCI7XG5pbXBvcnQgUmVtIGZyb20gXCJzYXAvdWkvZG9tL3VuaXRzL1JlbVwiO1xuaW1wb3J0IHR5cGUgRmllbGQgZnJvbSBcInNhcC91aS9tZGMvRmllbGRcIjtcbmltcG9ydCB0eXBlIEZpbHRlckZpZWxkIGZyb20gXCJzYXAvdWkvbWRjL0ZpbHRlckZpZWxkXCI7XG5pbXBvcnQgdHlwZSBNdWx0aVZhbHVlRmllbGQgZnJvbSBcInNhcC91aS9tZGMvTXVsdGlWYWx1ZUZpZWxkXCI7XG5pbXBvcnQgdHlwZSBNZGNJbm5lclRhYmxlIGZyb20gXCJzYXAvdWkvbWRjL1RhYmxlXCI7XG5pbXBvcnQgdHlwZSBWYWx1ZUhlbHAgZnJvbSBcInNhcC91aS9tZGMvVmFsdWVIZWxwXCI7XG5pbXBvcnQgdHlwZSBGaWVsZEJhc2UgZnJvbSBcInNhcC91aS9tZGMvZmllbGQvRmllbGRCYXNlXCI7XG5pbXBvcnQgdHlwZSBNZGNGaWx0ZXJCYXIgZnJvbSBcInNhcC91aS9tZGMvZmlsdGVyYmFyL0ZpbHRlckJhckJhc2VcIjtcbmltcG9ydCB0eXBlIEZpbHRlckJhciBmcm9tIFwic2FwL3VpL21kYy92YWx1ZWhlbHAvRmlsdGVyQmFyXCI7XG5pbXBvcnQgdHlwZSBDb250YWluZXIgZnJvbSBcInNhcC91aS9tZGMvdmFsdWVoZWxwL2Jhc2UvQ29udGFpbmVyXCI7XG5pbXBvcnQgdHlwZSBDb250ZW50IGZyb20gXCJzYXAvdWkvbWRjL3ZhbHVlaGVscC9iYXNlL0NvbnRlbnRcIjtcbmltcG9ydCBDb25kaXRpb25zIGZyb20gXCJzYXAvdWkvbWRjL3ZhbHVlaGVscC9jb250ZW50L0NvbmRpdGlvbnNcIjtcbmltcG9ydCBNRENUYWJsZSwgeyB0eXBlICRNRENUYWJsZVNldHRpbmdzIH0gZnJvbSBcInNhcC91aS9tZGMvdmFsdWVoZWxwL2NvbnRlbnQvTURDVGFibGVcIjtcbmltcG9ydCBNVGFibGUsIHsgdHlwZSAkTVRhYmxlU2V0dGluZ3MgfSBmcm9tIFwic2FwL3VpL21kYy92YWx1ZWhlbHAvY29udGVudC9NVGFibGVcIjtcbmltcG9ydCB0eXBlIEJhc2VDb250ZXh0IGZyb20gXCJzYXAvdWkvbW9kZWwvQ29udGV4dFwiO1xuaW1wb3J0IEpTT05Nb2RlbCBmcm9tIFwic2FwL3VpL21vZGVsL2pzb24vSlNPTk1vZGVsXCI7XG5pbXBvcnQgdHlwZSBPRGF0YVR5cGUgZnJvbSBcInNhcC91aS9tb2RlbC9vZGF0YS90eXBlL09EYXRhVHlwZVwiO1xuaW1wb3J0IHR5cGUgQ29udGV4dCBmcm9tIFwic2FwL3VpL21vZGVsL29kYXRhL3Y0L0NvbnRleHRcIjtcbmltcG9ydCB0eXBlIE9EYXRhTWV0YU1vZGVsIGZyb20gXCJzYXAvdWkvbW9kZWwvb2RhdGEvdjQvT0RhdGFNZXRhTW9kZWxcIjtcbmltcG9ydCB0eXBlIE9EYXRhTW9kZWwgZnJvbSBcInNhcC91aS9tb2RlbC9vZGF0YS92NC9PRGF0YU1vZGVsXCI7XG5pbXBvcnQgdHlwZSB7IE1ldGFNb2RlbEVudGl0eVNldEFubm90YXRpb24sIE1ldGFNb2RlbFR5cGUgfSBmcm9tIFwidHlwZXMvbWV0YW1vZGVsX3R5cGVzXCI7XG5cbmV4cG9ydCB0eXBlIEFubm90YXRpb25WYWx1ZUxpc3RQYXJhbWV0ZXIgPSB7XG5cdCRUeXBlOiBzdHJpbmc7XG5cdFZhbHVlTGlzdFByb3BlcnR5OiBzdHJpbmc7XG5cdExvY2FsRGF0YVByb3BlcnR5Pzoge1xuXHRcdCRQcm9wZXJ0eVBhdGg6IHN0cmluZztcblx0fTtcblx0Q29uc3RhbnQ/OiBzdHJpbmc7XG5cdEluaXRpYWxWYWx1ZUlzU2lnbmlmaWNhbnQ/OiBib29sZWFuO1xuXHRbXCJAY29tLnNhcC52b2NhYnVsYXJpZXMuVUkudjEuSW1wb3J0YW5jZVwiXT86IHtcblx0XHQkRW51bU1lbWJlcjogc3RyaW5nO1xuXHR9O1xufTtcblxudHlwZSBMb2dGcmFnbWVudE1ldGhvZCA9IChpbmZvOiB7IHBhdGg6IHN0cmluZzsgZnJhZ21lbnROYW1lOiBzdHJpbmc7IGZyYWdtZW50OiB1bmtub3duIH0pID0+IHZvaWQ7XG5cbi8vIGNvbS5zYXAudm9jYWJ1bGFyaWVzLkNvbW1vbi52MS5WYWx1ZUxpc3RUeXBlXG5leHBvcnQgdHlwZSBBbm5vdGF0aW9uVmFsdWVMaXN0VHlwZSA9IHtcblx0JFR5cGU6IHN0cmluZzsgLy8gQ29tbW9uQW5ub3RhdGlvblR5cGVzLlZhbHVlTGlzdFR5cGU7XG5cdExhYmVsPzogc3RyaW5nO1xuXHRDb2xsZWN0aW9uUGF0aDogc3RyaW5nO1xuXHRDb2xsZWN0aW9uUm9vdD86IHN0cmluZztcblx0RGlzdGluY3RWYWx1ZXNTdXBwb3J0ZWQ/OiBib29sZWFuO1xuXHRTZWFyY2hTdXBwb3J0ZWQ/OiBib29sZWFuO1xuXHRGZXRjaFZhbHVlcz86IG51bWJlcjtcblx0UHJlc2VudGF0aW9uVmFyaWFudFF1YWxpZmllcj86IHN0cmluZztcblx0U2VsZWN0aW9uVmFyaWFudFF1YWxpZmllcj86IHN0cmluZztcblx0UGFyYW1ldGVyczogQW5ub3RhdGlvblZhbHVlTGlzdFBhcmFtZXRlcltdO1xuXHQkbW9kZWw6IE9EYXRhTW9kZWw7XG5cdCRxdWFsaWZpZXI/OiBzdHJpbmc7IC8vIGRlZmluZWQgaW4gY2FzZSBvZiBWYWx1ZUxpc3RXaXRoRml4ZWRWYWx1ZXNcbn07XG5cbmV4cG9ydCB0eXBlIEFubm90YXRpb25WYWx1ZUxpc3RUeXBlQnlRdWFsaWZpZXIgPSBSZWNvcmQ8c3RyaW5nLCBBbm5vdGF0aW9uVmFsdWVMaXN0VHlwZT47XG5cbmNvbnN0IGNvbHVtbk5vdEFscmVhZHlEZWZpbmVkID0gKGNvbHVtbkRlZnM6IENvbHVtbkRlZltdLCB2aEtleTogc3RyaW5nKTogYm9vbGVhbiA9PiAhY29sdW1uRGVmcy5zb21lKChjb2x1bW4pID0+IGNvbHVtbi5wYXRoID09PSB2aEtleSk7XG5cbmV4cG9ydCBjb25zdCBBbm5vdGF0aW9uTGFiZWwgPSBcIkBjb20uc2FwLnZvY2FidWxhcmllcy5Db21tb24udjEuTGFiZWxcIixcblx0QW5ub3RhdGlvblRleHQgPSBcIkBjb20uc2FwLnZvY2FidWxhcmllcy5Db21tb24udjEuVGV4dFwiLFxuXHRBbm5vdGF0aW9uVGV4dFVJVGV4dEFycmFuZ2VtZW50ID0gXCJAY29tLnNhcC52b2NhYnVsYXJpZXMuQ29tbW9uLnYxLlRleHRAY29tLnNhcC52b2NhYnVsYXJpZXMuVUkudjEuVGV4dEFycmFuZ2VtZW50XCIsXG5cdEFubm90YXRpb25WYWx1ZUxpc3RQYXJhbWV0ZXJJbiA9IFwiY29tLnNhcC52b2NhYnVsYXJpZXMuQ29tbW9uLnYxLlZhbHVlTGlzdFBhcmFtZXRlckluXCIsXG5cdEFubm90YXRpb25WYWx1ZUxpc3RQYXJhbWV0ZXJDb25zdGFudCA9IFwiY29tLnNhcC52b2NhYnVsYXJpZXMuQ29tbW9uLnYxLlZhbHVlTGlzdFBhcmFtZXRlckNvbnN0YW50XCIsXG5cdEFubm90YXRpb25WYWx1ZUxpc3RQYXJhbWV0ZXJPdXQgPSBcImNvbS5zYXAudm9jYWJ1bGFyaWVzLkNvbW1vbi52MS5WYWx1ZUxpc3RQYXJhbWV0ZXJPdXRcIixcblx0QW5ub3RhdGlvblZhbHVlTGlzdFBhcmFtZXRlckluT3V0ID0gXCJjb20uc2FwLnZvY2FidWxhcmllcy5Db21tb24udjEuVmFsdWVMaXN0UGFyYW1ldGVySW5PdXRcIixcblx0QW5ub3RhdGlvblZhbHVlTGlzdFdpdGhGaXhlZFZhbHVlcyA9IFwiQGNvbS5zYXAudm9jYWJ1bGFyaWVzLkNvbW1vbi52MS5WYWx1ZUxpc3RXaXRoRml4ZWRWYWx1ZXNcIixcblx0QW5ub3RhdGlvbnNQZXJzb25hbERhdGFQb3RlbnRpYWxseVNlbnNpdGl2ZSA9IFwiQGNvbS5zYXAudm9jYWJ1bGFyaWVzLlBlcnNvbmFsRGF0YS52MS5Jc1BvdGVudGlhbGx5U2Vuc2l0aXZlXCIsXG5cdEFubm90YXRpb25zVmFsdWVMaXN0UmVsZXZhbnRRdWFsaWZpZXJzID0gXCJAY29tLnNhcC52b2NhYnVsYXJpZXMuQ29tbW9uLnYxLlZhbHVlTGlzdFJlbGV2YW50UXVhbGlmaWVyc1wiO1xuXG50eXBlIEFubm90YXRpb25zRm9yUHJvcGVydHkgPSB7XG5cdFwiQGNvbS5zYXAudm9jYWJ1bGFyaWVzLkNvbW1vbi52MS5WYWx1ZUxpc3RcIj86IHtcblx0XHRTZWFyY2hTdXBwb3J0ZWQ/OiBib29sZWFuO1xuXHR9O1xuXHRcIkBjb20uc2FwLnZvY2FidWxhcmllcy5Db21tb24udjEuTGFiZWxcIj86IHN0cmluZzsgLy8gQW5ub3RhdGlvbkxhYmVsXG5cdFwiQGNvbS5zYXAudm9jYWJ1bGFyaWVzLkNvbW1vbi52MS5UZXh0XCI/OiB7XG5cdFx0Ly8gQW5ub3RhdGlvblRleHRcblx0XHQkUGF0aDogc3RyaW5nO1xuXHR9O1xuXHRcIkBjb20uc2FwLnZvY2FidWxhcmllcy5Db21tb24udjEuVGV4dEBjb20uc2FwLnZvY2FidWxhcmllcy5VSS52MS5UZXh0QXJyYW5nZW1lbnRcIj86IHtcblx0XHQvLyBBbm5vdGF0aW9uVGV4dFVJVGV4dEFycmFuZ2VtZW50XG5cdFx0JEVudW1NZW1iZXI/OiBzdHJpbmc7XG5cdH07XG5cdFwiQGNvbS5zYXAudm9jYWJ1bGFyaWVzLlVJLnYxLkhpZGRlbkZpbHRlclwiPzogYm9vbGVhbjtcblx0XCJAY29tLnNhcC52b2NhYnVsYXJpZXMuQ29tbW9uLnYxLlZhbHVlTGlzdFdpdGhGaXhlZFZhbHVlc1wiPzogYm9vbGVhbjsgLy8gQW5ub3RhdGlvblZhbHVlTGlzdFdpdGhGaXhlZFZhbHVlc1xuXHRcIkBjb20uc2FwLnZvY2FidWxhcmllcy5Db21tb24udjEuVmFsdWVMaXN0UmVsZXZhbnRRdWFsaWZpZXJzXCI/OiBzdHJpbmdbXTtcblx0XCJAY29tLnNhcC52b2NhYnVsYXJpZXMuVUkudjEuSGlkZGVuXCI/OiBzdHJpbmc7XG5cdFwiQGNvbS5zYXAudm9jYWJ1bGFyaWVzLlBlcnNvbmFsRGF0YS52MS5Jc1BvdGVudGlhbGx5U2Vuc2l0aXZlXCI/OiBib29sZWFuO1xufTtcblxudHlwZSBBbm5vdGF0aW9uU2VsZWN0aW9uRmllbGQgPSB7XG5cdCRQcm9wZXJ0eVBhdGg6IHN0cmluZztcbn07XG5cbnR5cGUgQW5ub3RhdGlvbnNGb3JFbnRpdHlUeXBlID0ge1xuXHRcIkBjb20uc2FwLnZvY2FidWxhcmllcy5VSS52MS5TZWxlY3Rpb25GaWVsZHNcIj86IEFubm90YXRpb25TZWxlY3Rpb25GaWVsZFtdO1xufTtcblxudHlwZSBDb2x1bW5Qcm9wZXJ0eSA9IHtcblx0JFR5cGU6IHN0cmluZztcblx0JGtpbmQ6IHN0cmluZztcblx0JGlzQ29sbGVjdGlvbjogYm9vbGVhbjtcbn07XG5cbmV4cG9ydCB0eXBlIEluT3V0UGFyYW1ldGVyID0ge1xuXHRwYXJtZXRlclR5cGU6IHN0cmluZztcblx0c291cmNlOiBzdHJpbmc7XG5cdGhlbHBQYXRoOiBzdHJpbmc7XG5cdGluaXRpYWxWYWx1ZUlzU2lnbmlmaWNhbnQ6IGJvb2xlYW47XG5cdGNvbnN0YW50VmFsdWU/OiBzdHJpbmcgfCBib29sZWFuO1xufTtcblxudHlwZSBWYWx1ZUhlbHBQYXlsb2FkSW5mbyA9IHtcblx0dmhLZXlzPzogc3RyaW5nW107XG5cdHZoUGFyYW1ldGVycz86IEluT3V0UGFyYW1ldGVyW107XG5cdHZoUHJvcGVydGllcz86IHN0cmluZ1tdO1xufTtcblxudHlwZSBWYWx1ZUhlbHBRdWFsaWZpZXJNYXAgPSBSZWNvcmQ8c3RyaW5nLCBWYWx1ZUhlbHBQYXlsb2FkSW5mbz47XG5cbnR5cGUgSGlzdG9yeVBheWxvYWQgPSB7XG5cdGVuYWJsZWQ/OiBib29sZWFuO1xuXHRkYXRhPzogRmllbGREYXRhVHlwZVtdO1xuXHRoYXNSZWxldmFudERhdGE/OiBib29sZWFuO1xufTtcblxuZXhwb3J0IHR5cGUgVmFsdWVIZWxwUGF5bG9hZCA9IHtcblx0cHJvcGVydHlQYXRoOiBzdHJpbmc7XG5cdHF1YWxpZmllcnM6IFZhbHVlSGVscFF1YWxpZmllck1hcDtcblx0dmFsdWVIZWxwUXVhbGlmaWVyOiBzdHJpbmc7XG5cdGNvbmRpdGlvbk1vZGVsPzogc3RyaW5nO1xuXHRpc0FjdGlvblBhcmFtZXRlckRpYWxvZz86IGJvb2xlYW47XG5cdGlzVW5pdFZhbHVlSGVscD86IGJvb2xlYW47XG5cdHJlcXVlc3RHcm91cElkPzogc3RyaW5nO1xuXHR1c2VNdWx0aVZhbHVlRmllbGQ/OiBib29sZWFuO1xuXHRpc1ZhbHVlTGlzdFdpdGhGaXhlZFZhbHVlcz86IGJvb2xlYW47XG5cdHZhbHVlSGVscERlc2NyaXB0aW9uUGF0aD86IHN0cmluZztcblx0cHJvcGVydHlEZXNjcmlwdGlvblBhdGg/OiBzdHJpbmc7XG5cdG1heExlbmd0aD86IG51bWJlcjtcblx0dmFsdWVIZWxwS2V5UGF0aD86IHN0cmluZztcblx0aXNEZWZpbmVDb25kaXRpb25WYWx1ZUhlbHA/OiBib29sZWFuO1xuXHRpc1BvdGVudGlhbGx5U2Vuc2l0aXZlPzogYm9vbGVhbjtcblx0aGlzdG9yeT86IEhpc3RvcnlQYXlsb2FkO1xuXHRleHRlcm5hbElkUGF0aD86IHN0cmluZztcbn07XG5cbnR5cGUgQ29sdW1uRGVmID0ge1xuXHRwYXRoOiBzdHJpbmc7XG5cdHRleHRQYXRoPzogc3RyaW5nO1xuXHRsYWJlbDogc3RyaW5nO1xuXHRzb3J0YWJsZTogYm9vbGVhbjtcblx0ZmlsdGVyYWJsZTogYm9vbGVhbiB8IENvbXBpbGVkQmluZGluZ1Rvb2xraXRFeHByZXNzaW9uO1xuXHQkVHlwZTogc3RyaW5nO1xufTtcblxuZXhwb3J0IHR5cGUgVmFsdWVMaXN0SW5mbyA9IHtcblx0a2V5UGF0aDogc3RyaW5nO1xuXHRkZXNjcmlwdGlvblBhdGg6IHN0cmluZztcblx0ZmllbGRQcm9wZXJ0eVBhdGg6IHN0cmluZztcblx0dmhLZXlzOiBzdHJpbmdbXTtcblx0dmhQYXJhbWV0ZXJzOiBJbk91dFBhcmFtZXRlcltdO1xuXHR2YWx1ZUxpc3RJbmZvOiBBbm5vdGF0aW9uVmFsdWVMaXN0VHlwZTtcblx0Y29sdW1uRGVmczogQ29sdW1uRGVmW107XG5cdHZhbHVlSGVscFF1YWxpZmllcjogc3RyaW5nO1xufTtcblxudHlwZSBEaXNwbGF5Rm9ybWF0ID0gXCJEZXNjcmlwdGlvblwiIHwgXCJWYWx1ZURlc2NyaXB0aW9uXCIgfCBcIlZhbHVlXCIgfCBcIkRlc2NyaXB0aW9uVmFsdWVcIjtcblxudHlwZSBQYXRoID0ge1xuXHRmaWVsZFByb3BlcnR5UGF0aDogc3RyaW5nO1xuXHRkZXNjcmlwdGlvblBhdGg6IHN0cmluZztcblx0a2V5OiBzdHJpbmc7XG59O1xuXG5leHBvcnQgdHlwZSBTb3J0ZXJUeXBlID0ge1xuXHRhc2NlbmRpbmc/OiBib29sZWFuO1xuXHRkZXNjZW5kaW5nPzogYm9vbGVhbjtcblx0cGF0aD86IHN0cmluZztcblx0bmFtZT86IHN0cmluZztcbn07XG5cbmZ1bmN0aW9uIF9nZXREZWZhdWx0U29ydFByb3BlcnR5TmFtZSh2YWx1ZUxpc3RJbmZvOiBBbm5vdGF0aW9uVmFsdWVMaXN0VHlwZSk6IHN0cmluZyB8IHVuZGVmaW5lZCB7XG5cdGxldCBzb3J0RmllbGROYW1lOiBzdHJpbmcgfCB1bmRlZmluZWQ7XG5cdGNvbnN0IG1ldGFNb2RlbCA9IHZhbHVlTGlzdEluZm8uJG1vZGVsLmdldE1ldGFNb2RlbCgpO1xuXHRjb25zdCBlbnRpdHlTZXRBbm5vdGF0aW9ucyA9IG1ldGFNb2RlbC5nZXRPYmplY3QoYC8ke3ZhbHVlTGlzdEluZm8uQ29sbGVjdGlvblBhdGh9QGApIHx8IHt9O1xuXHRjb25zdCBzb3J0UmVzdHJpY3Rpb25zSW5mbyA9IGdldFNvcnRSZXN0cmljdGlvbnNJbmZvKGVudGl0eVNldEFubm90YXRpb25zKTtcblx0Y29uc3QgZm91bmRFbGVtZW50ID0gdmFsdWVMaXN0SW5mby5QYXJhbWV0ZXJzLmZpbmQoZnVuY3Rpb24gKGVsZW1lbnQpIHtcblx0XHRyZXR1cm4gKFxuXHRcdFx0KGVsZW1lbnQuJFR5cGUgPT09IENvbW1vbkFubm90YXRpb25UeXBlcy5WYWx1ZUxpc3RQYXJhbWV0ZXJJbk91dCB8fFxuXHRcdFx0XHRlbGVtZW50LiRUeXBlID09PSBDb21tb25Bbm5vdGF0aW9uVHlwZXMuVmFsdWVMaXN0UGFyYW1ldGVyT3V0IHx8XG5cdFx0XHRcdGVsZW1lbnQuJFR5cGUgPT09IENvbW1vbkFubm90YXRpb25UeXBlcy5WYWx1ZUxpc3RQYXJhbWV0ZXJEaXNwbGF5T25seSkgJiZcblx0XHRcdCEoXG5cdFx0XHRcdG1ldGFNb2RlbC5nZXRPYmplY3QoYC8ke3ZhbHVlTGlzdEluZm8uQ29sbGVjdGlvblBhdGh9LyR7ZWxlbWVudC5WYWx1ZUxpc3RQcm9wZXJ0eX1AY29tLnNhcC52b2NhYnVsYXJpZXMuVUkudjEuSGlkZGVuYCkgPT09XG5cdFx0XHRcdHRydWVcblx0XHRcdClcblx0XHQpO1xuXHR9KTtcblx0aWYgKGZvdW5kRWxlbWVudCkge1xuXHRcdGlmIChcblx0XHRcdG1ldGFNb2RlbC5nZXRPYmplY3QoXG5cdFx0XHRcdGAvJHt2YWx1ZUxpc3RJbmZvLkNvbGxlY3Rpb25QYXRofS8ke2ZvdW5kRWxlbWVudC5WYWx1ZUxpc3RQcm9wZXJ0eX1AY29tLnNhcC52b2NhYnVsYXJpZXMuQ29tbW9uLnYxLlRleHRAY29tLnNhcC52b2NhYnVsYXJpZXMuVUkudjEuVGV4dEFycmFuZ2VtZW50LyRFbnVtTWVtYmVyYFxuXHRcdFx0KSA9PT0gXCJjb20uc2FwLnZvY2FidWxhcmllcy5VSS52MS5UZXh0QXJyYW5nZW1lbnRUeXBlL1RleHRPbmx5XCJcblx0XHQpIHtcblx0XHRcdHNvcnRGaWVsZE5hbWUgPSBtZXRhTW9kZWwuZ2V0T2JqZWN0KFxuXHRcdFx0XHRgLyR7dmFsdWVMaXN0SW5mby5Db2xsZWN0aW9uUGF0aH0vJHtmb3VuZEVsZW1lbnQuVmFsdWVMaXN0UHJvcGVydHl9QGNvbS5zYXAudm9jYWJ1bGFyaWVzLkNvbW1vbi52MS5UZXh0LyRQYXRoYFxuXHRcdFx0KTtcblx0XHR9IGVsc2Uge1xuXHRcdFx0c29ydEZpZWxkTmFtZSA9IGZvdW5kRWxlbWVudC5WYWx1ZUxpc3RQcm9wZXJ0eTtcblx0XHR9XG5cdH1cblx0aWYgKHNvcnRGaWVsZE5hbWUgJiYgKCFzb3J0UmVzdHJpY3Rpb25zSW5mby5wcm9wZXJ0eUluZm9bc29ydEZpZWxkTmFtZV0gfHwgc29ydFJlc3RyaWN0aW9uc0luZm8ucHJvcGVydHlJbmZvW3NvcnRGaWVsZE5hbWVdLnNvcnRhYmxlKSkge1xuXHRcdHJldHVybiBzb3J0RmllbGROYW1lO1xuXHR9IGVsc2Uge1xuXHRcdHJldHVybiB1bmRlZmluZWQ7XG5cdH1cbn1cblxuZnVuY3Rpb24gX3JlZHVuZGFudERlc2NyaXB0aW9uKFxuXHRvVkxQYXJhbWV0ZXI6IHtcblx0XHRWYWx1ZUxpc3RQcm9wZXJ0eTogc3RyaW5nO1xuXHR9LFxuXHRhQ29sdW1uSW5mbzogQ29sdW1uSW5mb1tdXG4pOiBib29sZWFuIHwgdW5kZWZpbmVkIHtcblx0Y29uc3Qgb0NvbHVtbkluZm8gPSBhQ29sdW1uSW5mby5maW5kKGZ1bmN0aW9uIChjb2x1bW5JbmZvOiBDb2x1bW5JbmZvKSB7XG5cdFx0cmV0dXJuIG9WTFBhcmFtZXRlci5WYWx1ZUxpc3RQcm9wZXJ0eSA9PT0gY29sdW1uSW5mby50ZXh0Q29sdW1uTmFtZTtcblx0fSk7XG5cdGlmIChcblx0XHRvVkxQYXJhbWV0ZXIuVmFsdWVMaXN0UHJvcGVydHkgPT09IG9Db2x1bW5JbmZvPy50ZXh0Q29sdW1uTmFtZSAmJlxuXHRcdCFvQ29sdW1uSW5mby5rZXlDb2x1bW5IaWRkZW4gJiZcblx0XHRvQ29sdW1uSW5mby5rZXlDb2x1bW5EaXNwbGF5Rm9ybWF0ICE9PSBcIlZhbHVlXCJcblx0KSB7XG5cdFx0cmV0dXJuIHRydWU7XG5cdH1cblx0cmV0dXJuIHVuZGVmaW5lZDtcbn1cblxuZnVuY3Rpb24gX2hhc0ltcG9ydGFuY2VIaWdoKG9WYWx1ZUxpc3RDb250ZXh0OiB7IFBhcmFtZXRlcnM6IEFubm90YXRpb25WYWx1ZUxpc3RQYXJhbWV0ZXJbXSB9KTogYm9vbGVhbiB7XG5cdHJldHVybiBvVmFsdWVMaXN0Q29udGV4dC5QYXJhbWV0ZXJzLnNvbWUoZnVuY3Rpb24gKG9QYXJhbWV0ZXI6IEFubm90YXRpb25WYWx1ZUxpc3RQYXJhbWV0ZXIpIHtcblx0XHRyZXR1cm4gKFxuXHRcdFx0b1BhcmFtZXRlcltcIkBjb20uc2FwLnZvY2FidWxhcmllcy5VSS52MS5JbXBvcnRhbmNlXCJdICYmXG5cdFx0XHRvUGFyYW1ldGVyW1wiQGNvbS5zYXAudm9jYWJ1bGFyaWVzLlVJLnYxLkltcG9ydGFuY2VcIl0uJEVudW1NZW1iZXIgPT09IFwiY29tLnNhcC52b2NhYnVsYXJpZXMuVUkudjEuSW1wb3J0YW5jZVR5cGUvSGlnaFwiXG5cdFx0KTtcblx0fSk7XG59XG5cbmZ1bmN0aW9uIF9idWlsZCRTZWxlY3RTdHJpbmcoY29udHJvbDogQ29udHJvbCk6IHN0cmluZyB8IHVuZGVmaW5lZCB7XG5cdGNvbnN0IG9WaWV3RGF0YSA9IGNvbnRyb2wuZ2V0TW9kZWwoXCJ2aWV3RGF0YVwiKSBhcyBKU09OTW9kZWw7XG5cdGlmIChvVmlld0RhdGEpIHtcblx0XHRjb25zdCBvRGF0YSA9IG9WaWV3RGF0YS5nZXREYXRhKCk7XG5cdFx0aWYgKG9EYXRhKSB7XG5cdFx0XHRjb25zdCBhQ29sdW1ucyA9IG9EYXRhLmNvbHVtbnM7XG5cdFx0XHRpZiAoYUNvbHVtbnMpIHtcblx0XHRcdFx0cmV0dXJuIGFDb2x1bW5zLnJlZHVjZShmdW5jdGlvbiAoXG5cdFx0XHRcdFx0c1F1ZXJ5OiBzdHJpbmcsXG5cdFx0XHRcdFx0b1Byb3BlcnR5OiB7XG5cdFx0XHRcdFx0XHRwYXRoPzogc3RyaW5nO1xuXHRcdFx0XHRcdH1cblx0XHRcdFx0KSB7XG5cdFx0XHRcdFx0Ly8gTmF2aWdhdGlvbiBwcm9wZXJ0aWVzIChyZXByZXNlbnRlZCBieSBYL1kpIHNob3VsZCBub3QgYmUgYWRkZWQgdG8gJHNlbGVjdC5cblx0XHRcdFx0XHQvLyBUT0RPIDogVGhleSBzaG91bGQgYmUgYWRkZWQgYXMgJGV4cGFuZD1YKCRzZWxlY3Q9WSkgaW5zdGVhZFxuXHRcdFx0XHRcdGlmIChvUHJvcGVydHkucGF0aCAmJiAhb1Byb3BlcnR5LnBhdGguaW5jbHVkZXMoXCIvXCIpKSB7XG5cdFx0XHRcdFx0XHRzUXVlcnkgPSBzUXVlcnkgPyBgJHtzUXVlcnl9LCR7b1Byb3BlcnR5LnBhdGh9YCA6IG9Qcm9wZXJ0eS5wYXRoO1xuXHRcdFx0XHRcdH1cblx0XHRcdFx0XHRyZXR1cm4gc1F1ZXJ5O1xuXHRcdFx0XHR9LCB1bmRlZmluZWQpO1xuXHRcdFx0fVxuXHRcdH1cblx0fVxuXHRyZXR1cm4gdW5kZWZpbmVkO1xufVxuXG5mdW5jdGlvbiBfZ2V0VmFsdWVIZWxwQ29sdW1uRGlzcGxheUZvcm1hdChvUHJvcGVydHlBbm5vdGF0aW9uczogTWV0YU1vZGVsUHJvcGVydHlBbm5vdGF0aW9ucywgaXNWYWx1ZUhlbHBXaXRoRml4ZWRWYWx1ZXM6IGJvb2xlYW4pOiBzdHJpbmcge1xuXHRjb25zdCBzRGlzcGxheU1vZGUgPSBDb21tb25VdGlscy5jb21wdXRlRGlzcGxheU1vZGUob1Byb3BlcnR5QW5ub3RhdGlvbnMpO1xuXHRjb25zdCBvVGV4dEFubm90YXRpb24gPSBvUHJvcGVydHlBbm5vdGF0aW9ucyAmJiBvUHJvcGVydHlBbm5vdGF0aW9uc1tcIkBjb20uc2FwLnZvY2FidWxhcmllcy5Db21tb24udjEuVGV4dFwiXTtcblx0Y29uc3Qgb1RleHRBcnJhbmdlbWVudEFubm90YXRpb24gPVxuXHRcdG9UZXh0QW5ub3RhdGlvbiAmJiBvUHJvcGVydHlBbm5vdGF0aW9uc1tcIkBjb20uc2FwLnZvY2FidWxhcmllcy5Db21tb24udjEuVGV4dEBjb20uc2FwLnZvY2FidWxhcmllcy5VSS52MS5UZXh0QXJyYW5nZW1lbnRcIl07XG5cdGlmIChpc1ZhbHVlSGVscFdpdGhGaXhlZFZhbHVlcykge1xuXHRcdHJldHVybiBvVGV4dEFubm90YXRpb24gJiYgdHlwZW9mIG9UZXh0QW5ub3RhdGlvbiAhPT0gXCJzdHJpbmdcIiAmJiBcIiRQYXRoXCIgaW4gb1RleHRBbm5vdGF0aW9uICYmIG9UZXh0QW5ub3RhdGlvbi4kUGF0aFxuXHRcdFx0PyBzRGlzcGxheU1vZGVcblx0XHRcdDogXCJWYWx1ZVwiO1xuXHR9IGVsc2Uge1xuXHRcdC8vIE9ubHkgZXhwbGljaXQgZGVmaW5lZCBUZXh0QXJyYW5nZW1lbnRzIGluIGEgVmFsdWUgSGVscCB3aXRoIERpYWxvZyBhcmUgY29uc2lkZXJlZFxuXHRcdHJldHVybiBvVGV4dEFycmFuZ2VtZW50QW5ub3RhdGlvbiA/IHNEaXNwbGF5TW9kZSA6IFwiVmFsdWVcIjtcblx0fVxufVxuXG4vKipcbiAqIFJldHJpZXZlcyB0aGUgdmFsdWVMaXN0J3MgUHJlc2VudGF0aW9uVmFyaWFudC5cbiAqIEBwYXJhbSB2YWx1ZUxpc3QgVGhlIHZhbHVlTGlzdCBhbm5vdGF0aW9uXG4gKiBAcmV0dXJucyBUaGUgUHJlc2VudGF0aW9uVmFyaWFudCAoaWYgYW55KSBvZiB0aGUgdmFsdWVMaXN0XG4gKi9cbmZ1bmN0aW9uIGdldFByZXNlbnRhdGlvblZhcmlhbnQodmFsdWVMaXN0OiBBbm5vdGF0aW9uVmFsdWVMaXN0VHlwZSk6IE1ldGFNb2RlbFR5cGU8UHJlc2VudGF0aW9uVmFyaWFudD4gfCB1bmRlZmluZWQge1xuXHRjb25zdCBwcmVzZW50YXRpb25WYXJpYW50UXVhbGlmaWVyID0gdmFsdWVMaXN0LlByZXNlbnRhdGlvblZhcmlhbnRRdWFsaWZpZXIgPyBgIyR7dmFsdWVMaXN0LlByZXNlbnRhdGlvblZhcmlhbnRRdWFsaWZpZXJ9YCA6IFwiXCI7XG5cdGNvbnN0IHByZXNlbnRhdGlvblZhcmlhbnRQYXRoID0gYC8ke3ZhbHVlTGlzdC5Db2xsZWN0aW9uUGF0aH0vQGNvbS5zYXAudm9jYWJ1bGFyaWVzLlVJLnYxLlByZXNlbnRhdGlvblZhcmlhbnQke3ByZXNlbnRhdGlvblZhcmlhbnRRdWFsaWZpZXJ9YDtcblx0cmV0dXJuIHZhbHVlTGlzdC4kbW9kZWwuZ2V0TWV0YU1vZGVsKCkuZ2V0T2JqZWN0KHByZXNlbnRhdGlvblZhcmlhbnRQYXRoKSBhcyBNZXRhTW9kZWxUeXBlPFByZXNlbnRhdGlvblZhcmlhbnQ+IHwgdW5kZWZpbmVkO1xufVxuXG50eXBlIENvbHVtbkluZm8gPSB7XG5cdGtleUNvbHVtbkhpZGRlbj86IGJvb2xlYW47XG5cdGtleUNvbHVtbkRpc3BsYXlGb3JtYXQ/OiBzdHJpbmc7XG5cdHRleHRDb2x1bW5OYW1lPzogc3RyaW5nO1xuXHRjb2x1bW5OYW1lOiBzdHJpbmc7XG5cdGhhc0hpZGRlbkFubm90YXRpb24/OiBib29sZWFuO1xufTtcbmNvbnN0IFZhbHVlTGlzdEhlbHBlciA9IHtcblx0Z2V0VmFsdWVMaXN0Q29sbGVjdGlvbkVudGl0eVNldDogZnVuY3Rpb24gKG9WYWx1ZUxpc3RDb250ZXh0OiBDb250ZXh0KTogQmFzZUNvbnRleHQgfCB1bmRlZmluZWQge1xuXHRcdGNvbnN0IG1WYWx1ZUxpc3QgPSBvVmFsdWVMaXN0Q29udGV4dC5nZXRPYmplY3QoKTtcblx0XHRyZXR1cm4gbVZhbHVlTGlzdC4kbW9kZWwuZ2V0TWV0YU1vZGVsKCkuY3JlYXRlQmluZGluZ0NvbnRleHQoYC8ke21WYWx1ZUxpc3QuQ29sbGVjdGlvblBhdGh9YCk7XG5cdH0sXG5cblx0LyoqXG5cdCAqIENoZWNrcyBpZiB0aGUgVmFsdWVMaXN0IGlzIGFubm90YXRlZCB3aXRoIGEgUHJlc2VudGF0aW9uVmFyaWFudC5cblx0ICogSWYgdGhlIFByZXNlbnRhdGlvblZhcmlhbnQgaXMgYW5ub3RhdGVkIHdpdGggYSBSZWN1cnNpdmVIaWVyYXJjaHlRdWFsaWZpZXIsIHRoZSBWYWx1ZUxpc3QncyB0YWJsZSBoYXMgdG8gYmUgYSBUcmVlVGFibGUuXG5cdCAqIEBwYXJhbSB2YWx1ZUxpc3QgVGhlIHZhbHVlTGlzdCBhbm5vdGF0aW9uXG5cdCAqIEByZXR1cm5zIFRydWUgaWYgdGhlIHRhYmxlIGhhcyB0byBiZSBhIFRyZWVUYWJsZSwgZmFsc2Ugb3RoZXJ3aXNlXG5cdCAqL1xuXHRpc1RyZWVUYWJsZVR5cGUodmFsdWVMaXN0OiBBbm5vdGF0aW9uVmFsdWVMaXN0VHlwZSk6IGJvb2xlYW4ge1xuXHRcdHJldHVybiBnZXRQcmVzZW50YXRpb25WYXJpYW50KHZhbHVlTGlzdCk/LlJlY3Vyc2l2ZUhpZXJhcmNoeVF1YWxpZmllciA/IHRydWUgOiBmYWxzZTtcblx0fSxcblxuXHQvKipcblx0ICogR2V0cyB0aGUgZGVsZWdhdGUgZm9yIHRoZSBWYWx1ZUxpc3QncyB0YWJsZS5cblx0ICogQHBhcmFtIHZhbHVlTGlzdCBUaGUgdmFsdWVMaXN0IGFubm90YXRpb25cblx0ICogQHJldHVybnMgVGhlIGNhbGN1bGF0ZWQgZGVsZWdhdGUgZm9yIHRoZSBWYWx1ZUxpc3QncyB0YWJsZVxuXHQgKi9cblx0Z2V0VGFibGVEZWxlZ2F0ZTogZnVuY3Rpb24gKHZhbHVlTGlzdDogQW5ub3RhdGlvblZhbHVlTGlzdFR5cGUpOiBzdHJpbmcge1xuXHRcdGxldCBzRGVmYXVsdFNvcnRQcm9wZXJ0eU5hbWUgPSBfZ2V0RGVmYXVsdFNvcnRQcm9wZXJ0eU5hbWUodmFsdWVMaXN0KTtcblx0XHRpZiAoc0RlZmF1bHRTb3J0UHJvcGVydHlOYW1lKSB7XG5cdFx0XHRzRGVmYXVsdFNvcnRQcm9wZXJ0eU5hbWUgPSBgJyR7c0RlZmF1bHRTb3J0UHJvcGVydHlOYW1lfSdgO1xuXHRcdH1cblx0XHRjb25zdCBwcmVzZW50YXRpb25WYXJpYW50ID0gZ2V0UHJlc2VudGF0aW9uVmFyaWFudCh2YWx1ZUxpc3QpO1xuXHRcdGNvbnN0IHJlY3Vyc2l2ZUhpZXJhcmNoeVF1YWxpZmllciA9IHByZXNlbnRhdGlvblZhcmlhbnQ/LlJlY3Vyc2l2ZUhpZXJhcmNoeVF1YWxpZmllcjtcblx0XHRpZiAocmVjdXJzaXZlSGllcmFyY2h5UXVhbGlmaWVyKSB7XG5cdFx0XHRjb25zdCBpbml0aWFsRXhwYW5zaW9uTGV2ZWwgPSBwcmVzZW50YXRpb25WYXJpYW50LkluaXRpYWxFeHBhbnNpb25MZXZlbDtcblx0XHRcdHJldHVybiAoXG5cdFx0XHRcdFwie25hbWU6ICdzYXAvZmUvbWFjcm9zL2ludGVybmFsL3ZhbHVlaGVscC9UYWJsZURlbGVnYXRlJywgcGF5bG9hZDoge2NvbGxlY3Rpb25OYW1lOiAnXCIgK1xuXHRcdFx0XHR2YWx1ZUxpc3QuQ29sbGVjdGlvblBhdGggK1xuXHRcdFx0XHRcIidcIiArXG5cdFx0XHRcdChzRGVmYXVsdFNvcnRQcm9wZXJ0eU5hbWUgPyBcIiwgZGVmYXVsdFNvcnRQcm9wZXJ0eU5hbWU6IFwiICsgc0RlZmF1bHRTb3J0UHJvcGVydHlOYW1lIDogXCJcIikgK1xuXHRcdFx0XHRcIiwgaGllcmFyY2h5UXVhbGlmaWVyOiAnXCIgK1xuXHRcdFx0XHRyZWN1cnNpdmVIaWVyYXJjaHlRdWFsaWZpZXIgK1xuXHRcdFx0XHRcIidcIiArXG5cdFx0XHRcdChpbml0aWFsRXhwYW5zaW9uTGV2ZWwgPyBcIiwgaW5pdGlhbEV4cGFuc2lvbkxldmVsOiBcIiArIGluaXRpYWxFeHBhbnNpb25MZXZlbCA6IFwiXCIpICtcblx0XHRcdFx0XCJ9fVwiXG5cdFx0XHQpO1xuXHRcdH1cblx0XHRyZXR1cm4gKFxuXHRcdFx0XCJ7bmFtZTogJ3NhcC9mZS9tYWNyb3MvaW50ZXJuYWwvdmFsdWVoZWxwL1RhYmxlRGVsZWdhdGUnLCBwYXlsb2FkOiB7Y29sbGVjdGlvbk5hbWU6ICdcIiArXG5cdFx0XHR2YWx1ZUxpc3QuQ29sbGVjdGlvblBhdGggK1xuXHRcdFx0XCInXCIgK1xuXHRcdFx0KHNEZWZhdWx0U29ydFByb3BlcnR5TmFtZSA/IFwiLCBkZWZhdWx0U29ydFByb3BlcnR5TmFtZTogXCIgKyBzRGVmYXVsdFNvcnRQcm9wZXJ0eU5hbWUgOiBcIlwiKSArXG5cdFx0XHRcIn19XCJcblx0XHQpO1xuXHR9LFxuXG5cdC8qKlxuXHQgKiBHZXRzIHRoZSBzb3J0IGNvbmRpdGlvbnMgc2V0IG9uIHRoZSBWYWx1ZUxpc3QncyBQcmVzZW50YXRpb25WYXJpYW50LlxuXHQgKiBAcGFyYW0gdmFsdWVMaXN0SW5mbyBUaGUgdmFsdWVMaXN0IGFubm90YXRpb25cblx0ICogQHBhcmFtIGlzU3VnZ2VzdGlvbiBJbmRpY2F0ZXMgaWYgdGhlIFZhbHVlTGlzdCBpcyB1c2VkIGluIGEgc3VnZ2VzdGlvbiBzY2VuYXJpb1xuXHQgKiBAcmV0dXJucyBUaGUgc29ydCBjb25kaXRpb25zIGlmIGFueSwgdW5kZWZpbmVkIG90aGVyd2lzZVxuXHQgKi9cblx0Z2V0U29ydENvbmRpdGlvbnNGcm9tUHJlc2VudGF0aW9uVmFyaWFudDogZnVuY3Rpb24gKHZhbHVlTGlzdEluZm86IEFubm90YXRpb25WYWx1ZUxpc3RUeXBlLCBpc1N1Z2dlc3Rpb246IGJvb2xlYW4pOiBzdHJpbmcgfCB1bmRlZmluZWQge1xuXHRcdGNvbnN0IHByZXNlbnRhdGlvblZhcmlhbnQgPSBnZXRQcmVzZW50YXRpb25WYXJpYW50KHZhbHVlTGlzdEluZm8pO1xuXHRcdGlmIChwcmVzZW50YXRpb25WYXJpYW50Py5Tb3J0T3JkZXIpIHtcblx0XHRcdGNvbnN0IHNvcnRDb25kaXRpb25zID0ge1xuXHRcdFx0XHRzb3J0ZXJzOiBbXSBhcyBTb3J0ZXJUeXBlW11cblx0XHRcdH07XG5cblx0XHRcdHByZXNlbnRhdGlvblZhcmlhbnQuU29ydE9yZGVyLmZvckVhY2goZnVuY3Rpb24gKGNvbmRpdGlvbikge1xuXHRcdFx0XHRjb25zdCBzb3J0ZXI6IFNvcnRlclR5cGUgPSB7fSxcblx0XHRcdFx0XHRwcm9wZXJ0eVBhdGggPSBjb25kaXRpb24/LlByb3BlcnR5Py4kUHJvcGVydHlQYXRoO1xuXHRcdFx0XHRpZiAoaXNTdWdnZXN0aW9uKSB7XG5cdFx0XHRcdFx0c29ydGVyLnBhdGggPSBwcm9wZXJ0eVBhdGg7XG5cdFx0XHRcdH0gZWxzZSB7XG5cdFx0XHRcdFx0c29ydGVyLm5hbWUgPSBwcm9wZXJ0eVBhdGg7XG5cdFx0XHRcdH1cblxuXHRcdFx0XHRpZiAoY29uZGl0aW9uLkRlc2NlbmRpbmcpIHtcblx0XHRcdFx0XHRzb3J0ZXIuZGVzY2VuZGluZyA9IHRydWU7XG5cdFx0XHRcdH0gZWxzZSB7XG5cdFx0XHRcdFx0c29ydGVyLmFzY2VuZGluZyA9IHRydWU7XG5cdFx0XHRcdH1cblx0XHRcdFx0c29ydENvbmRpdGlvbnMuc29ydGVycy5wdXNoKHNvcnRlcik7XG5cdFx0XHR9KTtcblx0XHRcdHJldHVybiBpc1N1Z2dlc3Rpb24gPyBgc29ydGVyOiAke0pTT04uc3RyaW5naWZ5KHNvcnRDb25kaXRpb25zLnNvcnRlcnMpfWAgOiBKU09OLnN0cmluZ2lmeShzb3J0Q29uZGl0aW9ucyk7XG5cdFx0fVxuXHRcdHJldHVybjtcblx0fSxcblxuXHQvKipcblx0ICogR2V0cyB0aGUgc29ydCBjb25kaXRpb25zIGZvciB0aGUgVmFsdWVMaXN0LlxuXHQgKiBAcGFyYW0gdmFsdWVMaXN0SW5mbyBUaGUgVmFsdWVMaXN0IGFubm90YXRpb25cblx0ICogQHBhcmFtIGlzVmFsdWVIZWxwV2l0aEZpeGVkVmFsdWVzIEluZGljYXRlcyBpZiBWYWx1ZUxpc3QgaGFzIGZpeGVkIHZhbHVlc1xuXHQgKiBAcmV0dXJucyBUaGUgc29ydCBjb25kaXRpb25zIGVpdGhlciBmcm9tIHRoZSBwcmVzZW50YXRpb24gdmFyaWFudCBvciB0aGUgZGVmYXVsdCBvbmUsIHVuZGVmaW5lZCBvdGhlcndpc2Vcblx0ICovXG5cdGdldFNvcnRDb25kaXRpb25zRm9yVmFsdWVMaXN0OiBmdW5jdGlvbiAoXG5cdFx0dmFsdWVMaXN0SW5mbzogQW5ub3RhdGlvblZhbHVlTGlzdFR5cGUsXG5cdFx0aXNWYWx1ZUhlbHBXaXRoRml4ZWRWYWx1ZXM6IGJvb2xlYW5cblx0KTogc3RyaW5nIHwgdW5kZWZpbmVkIHtcblx0XHRjb25zdCBzb3J0Q29uZGl0aW9uc0Zyb21QcmVzZW50YXRpb25WYXJpYW50ID0gVmFsdWVMaXN0SGVscGVyLmdldFNvcnRDb25kaXRpb25zRnJvbVByZXNlbnRhdGlvblZhcmlhbnQodmFsdWVMaXN0SW5mbywgZmFsc2UpO1xuXG5cdFx0aWYgKHNvcnRDb25kaXRpb25zRnJvbVByZXNlbnRhdGlvblZhcmlhbnQpIHtcblx0XHRcdHJldHVybiBzb3J0Q29uZGl0aW9uc0Zyb21QcmVzZW50YXRpb25WYXJpYW50O1xuXHRcdH1cblx0XHRpZiAoaXNWYWx1ZUhlbHBXaXRoRml4ZWRWYWx1ZXMpIHtcblx0XHRcdGNvbnN0IHNvcnRDb25kaXRpb25zID0ge1xuXHRcdFx0XHRzb3J0ZXJzOiBbXG5cdFx0XHRcdFx0e1xuXHRcdFx0XHRcdFx0bmFtZTogX2dldERlZmF1bHRTb3J0UHJvcGVydHlOYW1lKHZhbHVlTGlzdEluZm8pLFxuXHRcdFx0XHRcdFx0YXNjZW5kaW5nOiB0cnVlXG5cdFx0XHRcdFx0fVxuXHRcdFx0XHRdIGFzIFNvcnRlclR5cGVbXVxuXHRcdFx0fTtcblx0XHRcdHJldHVybiBKU09OLnN0cmluZ2lmeShzb3J0Q29uZGl0aW9ucyk7XG5cdFx0fVxuXHR9LFxuXG5cdGdldFByb3BlcnR5UGF0aDogZnVuY3Rpb24gKG9QYXJhbWV0ZXJzOiB7IFVuYm91bmRBY3Rpb24/OiBib29sZWFuOyBQcm9wZXJ0eTogc3RyaW5nOyBFbnRpdHlUeXBlUGF0aDogc3RyaW5nOyBBY3Rpb246IHN0cmluZyB9KTogc3RyaW5nIHtcblx0XHRyZXR1cm4gIW9QYXJhbWV0ZXJzLlVuYm91bmRBY3Rpb25cblx0XHRcdD8gYCR7b1BhcmFtZXRlcnMuRW50aXR5VHlwZVBhdGh9LyR7b1BhcmFtZXRlcnMuQWN0aW9ufS8ke29QYXJhbWV0ZXJzLlByb3BlcnR5fWBcblx0XHRcdDogYC8ke29QYXJhbWV0ZXJzLkFjdGlvbi5zdWJzdHJpbmcob1BhcmFtZXRlcnMuQWN0aW9uLmxhc3RJbmRleE9mKFwiLlwiKSArIDEpfS8ke29QYXJhbWV0ZXJzLlByb3BlcnR5fWA7XG5cdH0sXG5cblx0Z2V0VmFsdWVMaXN0UHJvcGVydHk6IGZ1bmN0aW9uIChvUHJvcGVydHlDb250ZXh0OiBCYXNlQ29udGV4dCk6IEJhc2VDb250ZXh0IHwgdW5kZWZpbmVkIHtcblx0XHRjb25zdCBvVmFsdWVMaXN0TW9kZWwgPSBvUHJvcGVydHlDb250ZXh0LmdldE1vZGVsKCk7XG5cdFx0Y29uc3QgbVZhbHVlTGlzdCA9IG9WYWx1ZUxpc3RNb2RlbC5nZXRPYmplY3QoXCIvXCIpIGFzIHVua25vd24gYXMgeyBDb2xsZWN0aW9uUGF0aDogc3RyaW5nOyAkbW9kZWw6IE9EYXRhTW9kZWwgfTtcblx0XHRyZXR1cm4gbVZhbHVlTGlzdC4kbW9kZWwuZ2V0TWV0YU1vZGVsKCkuY3JlYXRlQmluZGluZ0NvbnRleHQoYC8ke21WYWx1ZUxpc3QuQ29sbGVjdGlvblBhdGh9LyR7b1Byb3BlcnR5Q29udGV4dC5nZXRPYmplY3QoKX1gKTtcblx0fSxcblxuXHQvLyBUaGlzIGZ1bmN0aW9uIGlzIHVzZWQgZm9yIHZhbHVlIGhlbHAgbS10YWJsZSBhbmQgbWRjLXRhYmxlXG5cdGdldENvbHVtblZpc2liaWxpdHk6IGZ1bmN0aW9uIChcblx0XHRvVmFsdWVMaXN0OiB7IFBhcmFtZXRlcnM6IEFubm90YXRpb25WYWx1ZUxpc3RQYXJhbWV0ZXJbXSB9LFxuXHRcdG9WTFBhcmFtZXRlcjogQW5ub3RhdGlvblZhbHVlTGlzdFBhcmFtZXRlcixcblx0XHRvU291cmNlOiB7XG5cdFx0XHR2YWx1ZUhlbHBXaXRoRml4ZWRWYWx1ZXM6IGJvb2xlYW47XG5cdFx0XHRjb2x1bW5JbmZvOiB7XG5cdFx0XHRcdGlzRGlhbG9nVGFibGU6IGJvb2xlYW47XG5cdFx0XHRcdGNvbHVtbkluZm9zOiBDb2x1bW5JbmZvW107XG5cdFx0XHR9O1xuXHRcdH1cblx0KTogYm9vbGVhbiB7XG5cdFx0Y29uc3QgaXNEcm9wRG93bkxpc3QgPSBvU291cmNlICYmICEhb1NvdXJjZS52YWx1ZUhlbHBXaXRoRml4ZWRWYWx1ZXMsXG5cdFx0XHRvQ29sdW1uSW5mbyA9IG9Tb3VyY2UuY29sdW1uSW5mbyxcblx0XHRcdGlzVmlzaWJsZSA9ICFfcmVkdW5kYW50RGVzY3JpcHRpb24ob1ZMUGFyYW1ldGVyLCBvQ29sdW1uSW5mby5jb2x1bW5JbmZvcyksXG5cdFx0XHRpc0RpYWxvZ1RhYmxlID0gb0NvbHVtbkluZm8uaXNEaWFsb2dUYWJsZTtcblxuXHRcdGlmIChpc0Ryb3BEb3duTGlzdCB8fCAoIWlzRHJvcERvd25MaXN0ICYmIGlzRGlhbG9nVGFibGUpIHx8ICghaXNEcm9wRG93bkxpc3QgJiYgIV9oYXNJbXBvcnRhbmNlSGlnaChvVmFsdWVMaXN0KSkpIHtcblx0XHRcdGNvbnN0IGNvbHVtbldpdGhIaWRkZW5Bbm5vdGF0aW9uID0gb0NvbHVtbkluZm8uY29sdW1uSW5mb3MuZmluZChmdW5jdGlvbiAoY29sdW1uSW5mbzogQ29sdW1uSW5mbykge1xuXHRcdFx0XHRyZXR1cm4gb1ZMUGFyYW1ldGVyLlZhbHVlTGlzdFByb3BlcnR5ID09PSBjb2x1bW5JbmZvLmNvbHVtbk5hbWUgJiYgY29sdW1uSW5mby5oYXNIaWRkZW5Bbm5vdGF0aW9uID09PSB0cnVlO1xuXHRcdFx0fSk7XG5cdFx0XHRyZXR1cm4gIWNvbHVtbldpdGhIaWRkZW5Bbm5vdGF0aW9uID8gaXNWaXNpYmxlIDogZmFsc2U7XG5cdFx0fSBlbHNlIGlmICghaXNEcm9wRG93bkxpc3QgJiYgX2hhc0ltcG9ydGFuY2VIaWdoKG9WYWx1ZUxpc3QpKSB7XG5cdFx0XHRyZXR1cm4gb1ZMUGFyYW1ldGVyICYmXG5cdFx0XHRcdG9WTFBhcmFtZXRlcltcIkBjb20uc2FwLnZvY2FidWxhcmllcy5VSS52MS5JbXBvcnRhbmNlXCJdICYmXG5cdFx0XHRcdG9WTFBhcmFtZXRlcltcIkBjb20uc2FwLnZvY2FidWxhcmllcy5VSS52MS5JbXBvcnRhbmNlXCJdLiRFbnVtTWVtYmVyID09PSBcImNvbS5zYXAudm9jYWJ1bGFyaWVzLlVJLnYxLkltcG9ydGFuY2VUeXBlL0hpZ2hcIlxuXHRcdFx0XHQ/IHRydWVcblx0XHRcdFx0OiBmYWxzZTtcblx0XHR9XG5cdFx0cmV0dXJuIHRydWU7XG5cdH0sXG5cblx0Z2V0Q29sdW1uVmlzaWJpbGl0eUluZm86IGZ1bmN0aW9uIChcblx0XHRvVmFsdWVMaXN0OiB7XG5cdFx0XHQkbW9kZWw6IE9EYXRhTW9kZWw7XG5cdFx0XHRDb2xsZWN0aW9uUGF0aDogc3RyaW5nO1xuXHRcdFx0UGFyYW1ldGVyczogQW5ub3RhdGlvblZhbHVlTGlzdFBhcmFtZXRlcltdO1xuXHRcdH0sXG5cdFx0c1Byb3BlcnR5RnVsbFBhdGg6IHN0cmluZyxcblx0XHRiSXNEcm9wRG93bkxpc3RlOiBib29sZWFuLFxuXHRcdGlzRGlhbG9nVGFibGU6IGJvb2xlYW5cblx0KToge1xuXHRcdGlzRGlhbG9nVGFibGU6IGJvb2xlYW47XG5cdFx0Y29sdW1uSW5mb3M6IENvbHVtbkluZm9bXTtcblx0fSB7XG5cdFx0Y29uc3Qgb01ldGFNb2RlbCA9IG9WYWx1ZUxpc3QuJG1vZGVsLmdldE1ldGFNb2RlbCgpO1xuXHRcdGNvbnN0IGFDb2x1bW5JbmZvczogQ29sdW1uSW5mb1tdID0gW107XG5cdFx0Y29uc3Qgb0NvbHVtbkluZm9zID0ge1xuXHRcdFx0aXNEaWFsb2dUYWJsZTogaXNEaWFsb2dUYWJsZSxcblx0XHRcdGNvbHVtbkluZm9zOiBhQ29sdW1uSW5mb3Ncblx0XHR9O1xuXG5cdFx0b1ZhbHVlTGlzdC5QYXJhbWV0ZXJzLmZvckVhY2goZnVuY3Rpb24gKG9QYXJhbWV0ZXI6IEFubm90YXRpb25WYWx1ZUxpc3RQYXJhbWV0ZXIpIHtcblx0XHRcdGNvbnN0IG9Qcm9wZXJ0eUFubm90YXRpb25zID0gb01ldGFNb2RlbC5nZXRPYmplY3QoYC8ke29WYWx1ZUxpc3QuQ29sbGVjdGlvblBhdGh9LyR7b1BhcmFtZXRlci5WYWx1ZUxpc3RQcm9wZXJ0eX1AYCk7XG5cdFx0XHRjb25zdCBvVGV4dEFubm90YXRpb24gPSBvUHJvcGVydHlBbm5vdGF0aW9ucyAmJiBvUHJvcGVydHlBbm5vdGF0aW9uc1tcIkBjb20uc2FwLnZvY2FidWxhcmllcy5Db21tb24udjEuVGV4dFwiXTtcblx0XHRcdGxldCBjb2x1bW5JbmZvOiBDb2x1bW5JbmZvID0ge30gYXMgdW5rbm93biBhcyBDb2x1bW5JbmZvO1xuXHRcdFx0aWYgKG9UZXh0QW5ub3RhdGlvbikge1xuXHRcdFx0XHRjb2x1bW5JbmZvID0ge1xuXHRcdFx0XHRcdGtleUNvbHVtbkhpZGRlbjogb1Byb3BlcnR5QW5ub3RhdGlvbnNbXCJAY29tLnNhcC52b2NhYnVsYXJpZXMuVUkudjEuSGlkZGVuXCJdID8gdHJ1ZSA6IGZhbHNlLFxuXHRcdFx0XHRcdGtleUNvbHVtbkRpc3BsYXlGb3JtYXQ6IG9UZXh0QW5ub3RhdGlvbiAmJiBfZ2V0VmFsdWVIZWxwQ29sdW1uRGlzcGxheUZvcm1hdChvUHJvcGVydHlBbm5vdGF0aW9ucywgYklzRHJvcERvd25MaXN0ZSksXG5cdFx0XHRcdFx0dGV4dENvbHVtbk5hbWU6IG9UZXh0QW5ub3RhdGlvbiAmJiBvVGV4dEFubm90YXRpb24uJFBhdGgsXG5cdFx0XHRcdFx0Y29sdW1uTmFtZTogb1BhcmFtZXRlci5WYWx1ZUxpc3RQcm9wZXJ0eSxcblx0XHRcdFx0XHRoYXNIaWRkZW5Bbm5vdGF0aW9uOiBvUHJvcGVydHlBbm5vdGF0aW9ucyAmJiBvUHJvcGVydHlBbm5vdGF0aW9uc1tcIkBjb20uc2FwLnZvY2FidWxhcmllcy5VSS52MS5IaWRkZW5cIl0gPyB0cnVlIDogZmFsc2Vcblx0XHRcdFx0fTtcblx0XHRcdH0gZWxzZSBpZiAob1Byb3BlcnR5QW5ub3RhdGlvbnMgJiYgb1Byb3BlcnR5QW5ub3RhdGlvbnNbXCJAY29tLnNhcC52b2NhYnVsYXJpZXMuVUkudjEuSGlkZGVuXCJdKSB7XG5cdFx0XHRcdGNvbHVtbkluZm8gPSB7XG5cdFx0XHRcdFx0Y29sdW1uTmFtZTogb1BhcmFtZXRlci5WYWx1ZUxpc3RQcm9wZXJ0eSxcblx0XHRcdFx0XHRoYXNIaWRkZW5Bbm5vdGF0aW9uOiBvUHJvcGVydHlBbm5vdGF0aW9ucyAmJiBvUHJvcGVydHlBbm5vdGF0aW9uc1tcIkBjb20uc2FwLnZvY2FidWxhcmllcy5VSS52MS5IaWRkZW5cIl0gPyB0cnVlIDogZmFsc2Vcblx0XHRcdFx0fTtcblx0XHRcdH1cblx0XHRcdG9Db2x1bW5JbmZvcy5jb2x1bW5JbmZvcy5wdXNoKGNvbHVtbkluZm8pO1xuXHRcdH0pO1xuXG5cdFx0cmV0dXJuIG9Db2x1bW5JbmZvcztcblx0fSxcblxuXHRnZXRUYWJsZUl0ZW1zUGFyYW1ldGVyczogZnVuY3Rpb24gKFxuXHRcdHRoaXM6IENvbnRyb2wsXG5cdFx0dmFsdWVMaXN0SW5mbzogQW5ub3RhdGlvblZhbHVlTGlzdFR5cGUsXG5cdFx0cmVxdWVzdEdyb3VwSWQ6IHN0cmluZyxcblx0XHRpc1N1Z2dlc3Rpb246IGJvb2xlYW4sXG5cdFx0aXNWYWx1ZUhlbHBXaXRoRml4ZWRWYWx1ZXM6IGJvb2xlYW5cblx0KTogc3RyaW5nIHtcblx0XHRjb25zdCBpdGVtUGFyYW1ldGVycyA9IFtgcGF0aDogJy8ke3ZhbHVlTGlzdEluZm8uQ29sbGVjdGlvblBhdGh9J2BdO1xuXG5cdFx0Ly8gYWRkIHNlbGVjdCB0byBvQmluZGluZ0luZm8gKEJDUCAyMTgwMjU1OTU2IC8gMjE3MDE2MzAxMilcblx0XHRjb25zdCBzZWxlY3RTdHJpbmcgPSBfYnVpbGQkU2VsZWN0U3RyaW5nKHRoaXMpO1xuXG5cdFx0Ly8gc2luY2UgdGhlcmUgY291bGQgYmUgcmVjb21tZW5kYXRpb25zL3JlY2VudGx5IHVzZWQgdmFsdWVzIHRvIHNob3cgaW4gdGhlIHN1Z2dlc3Rpb24gcG9wb3ZlclxuXHRcdC8vIGhlbmNlIHdlIG5lZWQgdG8gY3JlYXRlIHNvbWUgdHJhbnNpZW50IGNvbnRleHRzIG9uIHRoZSB2YWx1ZUhlbHAgbGlzdCBiaW5kaW5nXG5cdFx0Ly8gc28gd2Ugd2lsbCBzZXQgdGhlIHVwZGF0ZUdyb3VwSWQgb2YgdGhlIGxpc3QgYmluZGluZyB0byBhdm9pZCBzZW5kaW5nIGNhbGxzIHRvIHRoZSBiYWNrZW5kXG5cdFx0Ly8gd2UgbmVlZCB0byBleHBsaWNpdGx5IHNldCAkJHNoYXJlZFJlcXVlc3QgdG8gZmFsc2UgdG8gbWFrZSBzdXJlIHdlIGNhbiBjcmVhdGUgdHJhbnNpZW50IGNvbnRleHRzIGluIFJBUFxuXHRcdGlmIChyZXF1ZXN0R3JvdXBJZCkge1xuXHRcdFx0Y29uc3Qgc2VsZWN0U3RyaW5nUGFydCA9IHNlbGVjdFN0cmluZyA/IGAsICcke3NlbGVjdFN0cmluZ30nYCA6IFwiXCI7XG5cblx0XHRcdGl0ZW1QYXJhbWV0ZXJzLnB1c2goXG5cdFx0XHRcdGBwYXJhbWV0ZXJzOiB7JCRzaGFyZWRSZXF1ZXN0OiBmYWxzZSwgJCR1cGRhdGVHcm91cElkOiBcImRvbm90c3VibWl0XCIsICQkZ3JvdXBJZDogJyR7cmVxdWVzdEdyb3VwSWR9JyR7c2VsZWN0U3RyaW5nUGFydH19YFxuXHRcdFx0KTtcblx0XHR9IGVsc2UgaWYgKHNlbGVjdFN0cmluZykge1xuXHRcdFx0aXRlbVBhcmFtZXRlcnMucHVzaChgcGFyYW1ldGVyczogeyQkc2hhcmVkUmVxdWVzdDogZmFsc2UsICQkdXBkYXRlR3JvdXBJZDogXCJkb25vdHN1Ym1pdFwiLCAkc2VsZWN0OiAnJHtzZWxlY3RTdHJpbmd9J31gKTtcblx0XHR9XG5cblx0XHRjb25zdCBpc1N1c3BlbmRlZCA9IHZhbHVlTGlzdEluZm8uUGFyYW1ldGVycy5zb21lKGZ1bmN0aW9uIChvUGFyYW1ldGVyKSB7XG5cdFx0XHRyZXR1cm4gaXNTdWdnZXN0aW9uIHx8IG9QYXJhbWV0ZXIuJFR5cGUgPT09IENvbW1vbkFubm90YXRpb25UeXBlcy5WYWx1ZUxpc3RQYXJhbWV0ZXJJbjtcblx0XHR9KTtcblx0XHRpdGVtUGFyYW1ldGVycy5wdXNoKGBzdXNwZW5kZWQ6ICR7aXNTdXNwZW5kZWR9YCk7XG5cblx0XHRpZiAoIWlzVmFsdWVIZWxwV2l0aEZpeGVkVmFsdWVzKSB7XG5cdFx0XHRpdGVtUGFyYW1ldGVycy5wdXNoKFwibGVuZ3RoOiAxMFwiKTtcblx0XHR9XG5cblx0XHRjb25zdCBzb3J0Q29uZGl0aW9uc0Zyb21QcmVzZW50YXRpb25WYXJpYW50ID0gVmFsdWVMaXN0SGVscGVyLmdldFNvcnRDb25kaXRpb25zRnJvbVByZXNlbnRhdGlvblZhcmlhbnQodmFsdWVMaXN0SW5mbywgaXNTdWdnZXN0aW9uKTtcblxuXHRcdGlmIChzb3J0Q29uZGl0aW9uc0Zyb21QcmVzZW50YXRpb25WYXJpYW50KSB7XG5cdFx0XHRpdGVtUGFyYW1ldGVycy5wdXNoKHNvcnRDb25kaXRpb25zRnJvbVByZXNlbnRhdGlvblZhcmlhbnQpO1xuXHRcdH0gZWxzZSBpZiAoaXNWYWx1ZUhlbHBXaXRoRml4ZWRWYWx1ZXMpIHtcblx0XHRcdGNvbnN0IGRlZmF1bHRTb3J0UHJvcGVydHlOYW1lID0gX2dldERlZmF1bHRTb3J0UHJvcGVydHlOYW1lKHZhbHVlTGlzdEluZm8pO1xuXG5cdFx0XHRpZiAoZGVmYXVsdFNvcnRQcm9wZXJ0eU5hbWUpIHtcblx0XHRcdFx0aXRlbVBhcmFtZXRlcnMucHVzaChgc29ydGVyOiBbe3BhdGg6ICcke2RlZmF1bHRTb3J0UHJvcGVydHlOYW1lfScsIGFzY2VuZGluZzogdHJ1ZX1dYCk7XG5cdFx0XHR9XG5cdFx0fVxuXG5cdFx0cmV0dXJuIFwie1wiICsgaXRlbVBhcmFtZXRlcnMuam9pbihcIiwgXCIpICsgXCJ9XCI7XG5cdH0sXG5cblx0Ly8gSXMgbmVlZGVkIGZvciBcImV4dGVybmFsXCIgcmVwcmVzZW50YXRpb24gaW4gcXVuaXRcblx0aGFzSW1wb3J0YW5jZTogZnVuY3Rpb24gKG9WYWx1ZUxpc3RDb250ZXh0OiBDb250ZXh0KTogc3RyaW5nIHtcblx0XHRyZXR1cm4gX2hhc0ltcG9ydGFuY2VIaWdoKG9WYWx1ZUxpc3RDb250ZXh0LmdldE9iamVjdCgpKSA/IFwiSW1wb3J0YW5jZS9IaWdoXCIgOiBcIk5vbmVcIjtcblx0fSxcblxuXHQvLyBJcyBuZWVkZWQgZm9yIFwiZXh0ZXJuYWxcIiByZXByZXNlbnRhdGlvbiBpbiBxdW5pdFxuXHRnZXRNaW5TY3JlZW5XaWR0aDogZnVuY3Rpb24gKG9WYWx1ZUxpc3Q6IHsgUGFyYW1ldGVyczogQW5ub3RhdGlvblZhbHVlTGlzdFBhcmFtZXRlcltdIH0pOiBzdHJpbmcge1xuXHRcdHJldHVybiBfaGFzSW1wb3J0YW5jZUhpZ2gob1ZhbHVlTGlzdCkgPyBcIns9ICR7X1ZIVUk+L21pblNjcmVlbldpZHRofX1cIiA6IFwiNDE2cHhcIjtcblx0fSxcblxuXHQvKipcblx0ICogUmV0cmlldmVzIHRoZSBjb2x1bW4gd2lkdGggZm9yIGEgZ2l2ZW4gcHJvcGVydHkuXG5cdCAqIEBwYXJhbSBwcm9wZXJ0eVBhdGggVGhlIHByb3BlcnR5UGF0aFxuXHQgKiBAcGFyYW0gaXNWYWx1ZUxpc3RXaXRoRml4ZWRWYWx1ZXMgQW4gaW5kaWNhdG9yIHN0YXRpbmcgaWYgdGhlIHZhbHVlSGVscCBoYXMgZml4ZWQgdmFsdWVzXG5cdCAqIEByZXR1cm5zIFRoZSB3aWR0aCBhcyBhIHN0cmluZyBvciB1bmRlZmluZWQuXG5cdCAqL1xuXHRnZXRDb2x1bW5XaWR0aDogZnVuY3Rpb24gKHByb3BlcnR5UGF0aDogRGF0YU1vZGVsT2JqZWN0UGF0aDxQcm9wZXJ0eT4sIGlzVmFsdWVMaXN0V2l0aEZpeGVkVmFsdWVzID0gZmFsc2UpOiBzdHJpbmcgfCB1bmRlZmluZWQge1xuXHRcdGlmIChDb21tb25VdGlscy5pc1NtYWxsRGV2aWNlKCkgfHwgIXByb3BlcnR5UGF0aC50YXJnZXRPYmplY3QpIHJldHVybjtcblx0XHRjb25zdCBwcm9wZXJ0eSA9IHByb3BlcnR5UGF0aC50YXJnZXRPYmplY3Q7XG5cdFx0bGV0IHJlbGF0ZWRQcm9wZXJ0eTogUHJvcGVydHlbXSA9IFtwcm9wZXJ0eV07XG5cdFx0Ly8gVGhlIGFkZGl0aW9uYWwgcHJvcGVydHkgY291bGQgcmVmZXIgdG8gdGhlIHRleHQsIGN1cnJlbmN5LCB1bml0IG9yIHRpbWV6b25lXG5cdFx0Y29uc3QgYWRkaXRpb25hbFByb3BlcnR5ID1cblx0XHRcdFx0Z2V0QXNzb2NpYXRlZFRleHRQcm9wZXJ0eShwcm9wZXJ0eSkgfHxcblx0XHRcdFx0Z2V0QXNzb2NpYXRlZEN1cnJlbmN5UHJvcGVydHkocHJvcGVydHkpIHx8XG5cdFx0XHRcdGdldEFzc29jaWF0ZWRVbml0UHJvcGVydHkocHJvcGVydHkpIHx8XG5cdFx0XHRcdGdldEFzc29jaWF0ZWRUaW1lem9uZVByb3BlcnR5KHByb3BlcnR5KSxcblx0XHRcdHRleHRBbm5vdGF0aW9uID0gcHJvcGVydHkuYW5ub3RhdGlvbnM/LkNvbW1vbj8uVGV4dCxcblx0XHRcdHRleHRBcnJhbmdlbWVudCA9IHRleHRBbm5vdGF0aW9uPy5hbm5vdGF0aW9ucz8uVUk/LlRleHRBcnJhbmdlbWVudD8udG9TdHJpbmcoKSxcblx0XHRcdGxhYmVsID0gcHJvcGVydHkuYW5ub3RhdGlvbnM/LkNvbW1vbj8uTGFiZWw/LnRvU3RyaW5nKCk7XG5cdFx0bGV0IGRpc3BsYXlNb2RlOiBzdHJpbmcgfCB1bmRlZmluZWQ7XG5cblx0XHQvLyBkZWZhdWx0IHRleHRhcnJhbmdlbWVudCBpcyBvbmx5IHVzZWQgZm9yIFZIIHdpdGggZml4ZWQgdmFsdWVzXG5cdFx0aWYgKGlzVmFsdWVMaXN0V2l0aEZpeGVkVmFsdWVzICYmICF0ZXh0QXJyYW5nZW1lbnQpIHtcblx0XHRcdC8vZGlzcGxheU1vZGUgPSBhcyBhbm5vdGF0ZWQgb3IgZGVmYXVsdFxuXHRcdFx0ZGlzcGxheU1vZGUgPSBnZXREaXNwbGF5TW9kZShwcm9wZXJ0eVBhdGgpO1xuXHRcdH0gZWxzZSB7XG5cdFx0XHQvL2Rpc3BsYXlNb2RlID0gYXMgYW5ub3RhdGVkIG9yIHVuZGVmaW5lZFxuXHRcdFx0ZGlzcGxheU1vZGUgPSB0ZXh0QXJyYW5nZW1lbnQgJiYgZ2V0RGlzcGxheU1vZGUocHJvcGVydHlQYXRoKTtcblx0XHR9XG5cblx0XHRpZiAoYWRkaXRpb25hbFByb3BlcnR5KSB7XG5cdFx0XHRpZiAoZGlzcGxheU1vZGUgPT09IFwiRGVzY3JpcHRpb25cIikge1xuXHRcdFx0XHRyZWxhdGVkUHJvcGVydHkgPSBbYWRkaXRpb25hbFByb3BlcnR5XTtcblx0XHRcdH0gZWxzZSBpZiAoIXRleHRBbm5vdGF0aW9uIHx8IChkaXNwbGF5TW9kZSAmJiBkaXNwbGF5TW9kZSAhPT0gXCJWYWx1ZVwiKSkge1xuXHRcdFx0XHRyZWxhdGVkUHJvcGVydHkucHVzaChhZGRpdGlvbmFsUHJvcGVydHkpO1xuXHRcdFx0fVxuXHRcdH1cblxuXHRcdGxldCBzaXplID0gMDtcblx0XHRjb25zdCBpbnN0YW5jZXM6IE9EYXRhVHlwZVtdID0gW107XG5cblx0XHRyZWxhdGVkUHJvcGVydHkuZm9yRWFjaCgocHJvcDogUHJvcGVydHkpID0+IHtcblx0XHRcdGNvbnN0IHByb3BlcnR5VHlwZUNvbmZpZyA9IGdldFR5cGVDb25maWcocHJvcCwgdW5kZWZpbmVkKTtcblx0XHRcdGNvbnN0IFByb3BlcnR5T0RhdGFDb25zdHJ1Y3RvciA9IE9iamVjdFBhdGguZ2V0KHByb3BlcnR5VHlwZUNvbmZpZy50eXBlKTtcblx0XHRcdGlmIChQcm9wZXJ0eU9EYXRhQ29uc3RydWN0b3IpIHtcblx0XHRcdFx0aW5zdGFuY2VzLnB1c2gobmV3IFByb3BlcnR5T0RhdGFDb25zdHJ1Y3Rvcihwcm9wZXJ0eVR5cGVDb25maWcuZm9ybWF0T3B0aW9ucywgcHJvcGVydHlUeXBlQ29uZmlnLmNvbnN0cmFpbnRzKSk7XG5cdFx0XHR9XG5cdFx0fSk7XG5cdFx0Y29uc3Qgc1dpZHRoID0gVXRpbC5jYWxjQ29sdW1uV2lkdGgoaW5zdGFuY2VzLCBsYWJlbCk7XG5cdFx0c2l6ZSA9IHNXaWR0aCA/IHBhcnNlRmxvYXQoc1dpZHRoLnJlcGxhY2UoXCJyZW1cIiwgXCJcIikpIDogMDtcblxuXHRcdGlmIChzaXplID09PSAwKSB7XG5cdFx0XHRMb2cuZXJyb3IoYENhbm5vdCBjb21wdXRlIHRoZSBjb2x1bW4gd2lkdGggZm9yIHByb3BlcnR5OiAke3Byb3BlcnR5Lm5hbWV9YCk7XG5cdFx0fVxuXHRcdHJldHVybiBzaXplIDw9IDIwID8gc2l6ZS50b1N0cmluZygpICsgXCJyZW1cIiA6IFwiMjByZW1cIjtcblx0fSxcblxuXHRnZXRPdXRQYXJhbWV0ZXJQYXRoczogZnVuY3Rpb24gKGFQYXJhbWV0ZXJzOiBBbm5vdGF0aW9uVmFsdWVMaXN0UGFyYW1ldGVyW10pOiBzdHJpbmcge1xuXHRcdGxldCBzUGF0aCA9IFwiXCI7XG5cdFx0YVBhcmFtZXRlcnMuZm9yRWFjaChmdW5jdGlvbiAob1BhcmFtZXRlcjogQW5ub3RhdGlvblZhbHVlTGlzdFBhcmFtZXRlcikge1xuXHRcdFx0aWYgKG9QYXJhbWV0ZXIuJFR5cGUuZW5kc1dpdGgoXCJPdXRcIikpIHtcblx0XHRcdFx0c1BhdGggKz0gYHske29QYXJhbWV0ZXIuVmFsdWVMaXN0UHJvcGVydHl9fWA7XG5cdFx0XHR9XG5cdFx0fSk7XG5cdFx0cmV0dXJuIHNQYXRoO1xuXHR9LFxuXG5cdGVudGl0eUlzU2VhcmNoYWJsZTogZnVuY3Rpb24gKFxuXHRcdHByb3BlcnR5QW5ub3RhdGlvbnM6IEFubm90YXRpb25zRm9yUHJvcGVydHksXG5cdFx0Y29sbGVjdGlvbkFubm90YXRpb25zOiBNZXRhTW9kZWxFbnRpdHlTZXRBbm5vdGF0aW9uXG5cdCk6IGJvb2xlYW4ge1xuXHRcdGNvbnN0IHNlYXJjaFN1cHBvcnRlZCA9IHByb3BlcnR5QW5ub3RhdGlvbnNbXCJAY29tLnNhcC52b2NhYnVsYXJpZXMuQ29tbW9uLnYxLlZhbHVlTGlzdFwiXT8uU2VhcmNoU3VwcG9ydGVkLFxuXHRcdFx0c2VhcmNoYWJsZSA9IGNvbGxlY3Rpb25Bbm5vdGF0aW9uc1tcIkBPcmcuT0RhdGEuQ2FwYWJpbGl0aWVzLlYxLlNlYXJjaFJlc3RyaWN0aW9uc1wiXT8uU2VhcmNoYWJsZTtcblxuXHRcdGlmIChcblx0XHRcdChzZWFyY2hhYmxlID09PSB1bmRlZmluZWQgJiYgc2VhcmNoU3VwcG9ydGVkID09PSBmYWxzZSkgfHxcblx0XHRcdChzZWFyY2hhYmxlID09PSB0cnVlICYmIHNlYXJjaFN1cHBvcnRlZCA9PT0gZmFsc2UpIHx8XG5cdFx0XHRzZWFyY2hhYmxlID09PSBmYWxzZVxuXHRcdCkge1xuXHRcdFx0cmV0dXJuIGZhbHNlO1xuXHRcdH1cblx0XHRyZXR1cm4gdHJ1ZTtcblx0fSxcblxuXHQvKipcblx0ICogUmV0dXJucyB0aGUgY29uZGl0aW9uIHBhdGggcmVxdWlyZWQgZm9yIHRoZSBjb25kaXRpb24gbW9kZWwuXG5cdCAqIEZvciBlLmcuIDwxOk4tUHJvcGVydHlOYW1lPipcXC88MToxLVByb3BlcnR5TmFtZT4vPFByb3BlcnR5TmFtZT4uXG5cdCAqIEBwYXJhbSBtZXRhTW9kZWwgVGhlIG1ldGFtb2RlbCBpbnN0YW5jZVxuXHQgKiBAcGFyYW0gZW50aXR5U2V0IFRoZSBlbnRpdHkgc2V0IHBhdGhcblx0ICogQHBhcmFtIHByb3BlcnR5UGF0aCBUaGUgcHJvcGVydHkgcGF0aFxuXHQgKiBAcmV0dXJucyBUaGUgZm9ybWF0dGVkIGNvbmRpdGlvbiBwYXRoXG5cdCAqIEBwcml2YXRlXG5cdCAqL1xuXHRfZ2V0Q29uZGl0aW9uUGF0aDogZnVuY3Rpb24gKG1ldGFNb2RlbDogT0RhdGFNZXRhTW9kZWwsIGVudGl0eVNldDogc3RyaW5nLCBwcm9wZXJ0eVBhdGg6IHN0cmluZyk6IHN0cmluZyB7XG5cdFx0Ly8gKHNlZSBhbHNvOiBzYXAvZmUvY29yZS9jb252ZXJ0ZXJzL2NvbnRyb2xzL0xpc3RSZXBvcnQvRmlsdGVyQmFyLnRzKVxuXHRcdGNvbnN0IHBhcnRzID0gcHJvcGVydHlQYXRoLnNwbGl0KFwiL1wiKTtcblx0XHRsZXQgY29uZGl0aW9uUGF0aCA9IFwiXCIsXG5cdFx0XHRwYXJ0aWFsUGF0aDogc3RyaW5nIHwgdW5kZWZpbmVkO1xuXG5cdFx0d2hpbGUgKHBhcnRzLmxlbmd0aCkge1xuXHRcdFx0bGV0IHBhcnQgPSBwYXJ0cy5zaGlmdCgpIGFzIHN0cmluZztcblx0XHRcdHBhcnRpYWxQYXRoID0gcGFydGlhbFBhdGggPyBgJHtwYXJ0aWFsUGF0aH0vJHtwYXJ0fWAgOiBwYXJ0O1xuXHRcdFx0Y29uc3QgcHJvcGVydHkgPSBtZXRhTW9kZWwuZ2V0T2JqZWN0KGAke2VudGl0eVNldH0vJHtwYXJ0aWFsUGF0aH1gKTtcblx0XHRcdGlmIChwcm9wZXJ0eSAmJiBwcm9wZXJ0eS4ka2luZCA9PT0gXCJOYXZpZ2F0aW9uUHJvcGVydHlcIiAmJiBwcm9wZXJ0eS4kaXNDb2xsZWN0aW9uKSB7XG5cdFx0XHRcdHBhcnQgKz0gXCIqXCI7XG5cdFx0XHR9XG5cdFx0XHRjb25kaXRpb25QYXRoID0gY29uZGl0aW9uUGF0aCA/IGAke2NvbmRpdGlvblBhdGh9LyR7cGFydH1gIDogcGFydDtcblx0XHR9XG5cdFx0cmV0dXJuIGNvbmRpdGlvblBhdGg7XG5cdH0sXG5cblx0LyoqXG5cdCAqIFJldHVybnMgYXJyYXkgb2YgY29sdW1uIGRlZmluaXRpb25zIGNvcnJlc3BvbmRpbmcgdG8gcHJvcGVydGllcyBkZWZpbmVkIGFzIFNlbGVjdGlvbiBGaWVsZHMgb24gdGhlIENvbGxlY3Rpb25QYXRoIGVudGl0eSBzZXQgaW4gYSBWYWx1ZUhlbHAuXG5cdCAqIEBwYXJhbSBtZXRhTW9kZWwgVGhlIG1ldGFtb2RlbCBpbnN0YW5jZVxuXHQgKiBAcGFyYW0gZW50aXR5U2V0IFRoZSBlbnRpdHkgc2V0IHBhdGhcblx0ICogQHJldHVybnMgQXJyYXkgb2YgY29sdW1uIGRlZmluaXRpb25zXG5cdCAqIEBwcml2YXRlXG5cdCAqL1xuXHRfZ2V0Q29sdW1uRGVmaW5pdGlvbkZyb21TZWxlY3Rpb25GaWVsZHM6IGZ1bmN0aW9uIChtZXRhTW9kZWw6IE9EYXRhTWV0YU1vZGVsLCBlbnRpdHlTZXQ6IHN0cmluZyk6IENvbHVtbkRlZltdIHtcblx0XHRjb25zdCBjb2x1bW5EZWZzOiBDb2x1bW5EZWZbXSA9IFtdLFxuXHRcdFx0ZW50aXR5VHlwZUFubm90YXRpb25zID0gbWV0YU1vZGVsLmdldE9iamVjdChgJHtlbnRpdHlTZXR9L0BgKSBhcyBBbm5vdGF0aW9uc0ZvckVudGl0eVR5cGUsXG5cdFx0XHRzZWxlY3Rpb25GaWVsZHMgPSBlbnRpdHlUeXBlQW5ub3RhdGlvbnNbXCJAY29tLnNhcC52b2NhYnVsYXJpZXMuVUkudjEuU2VsZWN0aW9uRmllbGRzXCJdO1xuXG5cdFx0aWYgKHNlbGVjdGlvbkZpZWxkcykge1xuXHRcdFx0c2VsZWN0aW9uRmllbGRzLmZvckVhY2goZnVuY3Rpb24gKHNlbGVjdGlvbkZpZWxkOiBBbm5vdGF0aW9uU2VsZWN0aW9uRmllbGQpIHtcblx0XHRcdFx0Y29uc3Qgc2VsZWN0aW9uRmllbGRQYXRoID0gYCR7ZW50aXR5U2V0fS8ke3NlbGVjdGlvbkZpZWxkLiRQcm9wZXJ0eVBhdGh9YCxcblx0XHRcdFx0XHRjb25kaXRpb25QYXRoID0gVmFsdWVMaXN0SGVscGVyLl9nZXRDb25kaXRpb25QYXRoKG1ldGFNb2RlbCwgZW50aXR5U2V0LCBzZWxlY3Rpb25GaWVsZC4kUHJvcGVydHlQYXRoKSxcblx0XHRcdFx0XHRwcm9wZXJ0eUFubm90YXRpb25zID0gbWV0YU1vZGVsLmdldE9iamVjdChgJHtzZWxlY3Rpb25GaWVsZFBhdGh9QGApIGFzIEFubm90YXRpb25zRm9yUHJvcGVydHksXG5cdFx0XHRcdFx0Y29sdW1uRGVmID0ge1xuXHRcdFx0XHRcdFx0cGF0aDogY29uZGl0aW9uUGF0aCxcblx0XHRcdFx0XHRcdGxhYmVsOiBwcm9wZXJ0eUFubm90YXRpb25zW0Fubm90YXRpb25MYWJlbF0gfHwgc2VsZWN0aW9uRmllbGRQYXRoLFxuXHRcdFx0XHRcdFx0c29ydGFibGU6IHRydWUsXG5cdFx0XHRcdFx0XHRmaWx0ZXJhYmxlOiBpc1Byb3BlcnR5RmlsdGVyYWJsZShtZXRhTW9kZWwsIGVudGl0eVNldCwgc2VsZWN0aW9uRmllbGQuJFByb3BlcnR5UGF0aCwgZmFsc2UpLFxuXHRcdFx0XHRcdFx0JFR5cGU6IG1ldGFNb2RlbC5nZXRPYmplY3Qoc2VsZWN0aW9uRmllbGRQYXRoKT8uJFR5cGVcblx0XHRcdFx0XHR9O1xuXHRcdFx0XHRjb2x1bW5EZWZzLnB1c2goY29sdW1uRGVmKTtcblx0XHRcdH0pO1xuXHRcdH1cblxuXHRcdHJldHVybiBjb2x1bW5EZWZzO1xuXHR9LFxuXG5cdF9tZXJnZUNvbHVtbkRlZmluaXRpb25zRnJvbVByb3BlcnRpZXM6IGZ1bmN0aW9uIChcblx0XHRjb2x1bW5EZWZzOiBDb2x1bW5EZWZbXSxcblx0XHR2YWx1ZUxpc3RJbmZvOiBBbm5vdGF0aW9uVmFsdWVMaXN0VHlwZSxcblx0XHR2YWx1ZUxpc3RQcm9wZXJ0eTogc3RyaW5nLFxuXHRcdHByb3BlcnR5OiBDb2x1bW5Qcm9wZXJ0eSxcblx0XHRwcm9wZXJ0eUFubm90YXRpb25zOiBBbm5vdGF0aW9uc0ZvclByb3BlcnR5XG5cdCk6IHZvaWQge1xuXHRcdGxldCBjb2x1bW5QYXRoID0gdmFsdWVMaXN0UHJvcGVydHksXG5cdFx0XHRjb2x1bW5Qcm9wZXJ0eVR5cGUgPSBwcm9wZXJ0eS4kVHlwZTtcblx0XHRjb25zdCBsYWJlbCA9IHByb3BlcnR5QW5ub3RhdGlvbnNbQW5ub3RhdGlvbkxhYmVsXSB8fCBjb2x1bW5QYXRoLFxuXHRcdFx0dGV4dEFubm90YXRpb24gPSBwcm9wZXJ0eUFubm90YXRpb25zW0Fubm90YXRpb25UZXh0XTtcblxuXHRcdGlmIChcblx0XHRcdHRleHRBbm5vdGF0aW9uICYmXG5cdFx0XHRwcm9wZXJ0eUFubm90YXRpb25zW0Fubm90YXRpb25UZXh0VUlUZXh0QXJyYW5nZW1lbnRdPy4kRW51bU1lbWJlciA9PT0gXCJjb20uc2FwLnZvY2FidWxhcmllcy5VSS52MS5UZXh0QXJyYW5nZW1lbnRUeXBlL1RleHRPbmx5XCJcblx0XHQpIHtcblx0XHRcdC8vIHRoZSBjb2x1bW4gcHJvcGVydHkgaXMgdGhlIG9uZSBjb21pbmcgZnJvbSB0aGUgdGV4dCBhbm5vdGF0aW9uXG5cdFx0XHRjb2x1bW5QYXRoID0gdGV4dEFubm90YXRpb24uJFBhdGg7XG5cdFx0XHRjb25zdCB0ZXh0UHJvcGVydHlQYXRoID0gYC8ke3ZhbHVlTGlzdEluZm8uQ29sbGVjdGlvblBhdGh9LyR7Y29sdW1uUGF0aH1gO1xuXHRcdFx0Y29sdW1uUHJvcGVydHlUeXBlID0gdmFsdWVMaXN0SW5mby4kbW9kZWwuZ2V0TWV0YU1vZGVsKCk/LmdldE9iamVjdCh0ZXh0UHJvcGVydHlQYXRoKT8uJFR5cGUgYXMgc3RyaW5nO1xuXHRcdH1cblxuXHRcdGlmIChjb2x1bW5Ob3RBbHJlYWR5RGVmaW5lZChjb2x1bW5EZWZzLCBjb2x1bW5QYXRoKSkge1xuXHRcdFx0Y29uc3QgY29sdW1uRGVmOiBDb2x1bW5EZWYgPSB7XG5cdFx0XHRcdHBhdGg6IGNvbHVtblBhdGgsXG5cdFx0XHRcdC8vIGVuc3VyZSB0aGUgdGV4dCBhc3NvY2lhdGVkIHdpdGggYSBjb2x1bW4gdGhhdCByZWZlcmVuY2VzIGEgbmF2aWdhdGlvbiBwcm9wZXJ0eSByZWZsZWN0cyB0aGUgc2FtZSBuYXZpZ2F0aW9uIHN0cnVjdHVyZSBhcyB0aGUgY29sdW1uXG5cdFx0XHRcdHRleHRQYXRoOlxuXHRcdFx0XHRcdHRleHRBbm5vdGF0aW9uPy4kUGF0aCAmJiB2YWx1ZUxpc3RQcm9wZXJ0eS5pbmNsdWRlcyhcIi9cIilcblx0XHRcdFx0XHRcdD8gdmFsdWVMaXN0UHJvcGVydHkuc3Vic3RyaW5nKDAsIHZhbHVlTGlzdFByb3BlcnR5Lmxhc3RJbmRleE9mKFwiL1wiKSkgKyBcIi9cIiArIHRleHRBbm5vdGF0aW9uLiRQYXRoXG5cdFx0XHRcdFx0XHQ6IHRleHRBbm5vdGF0aW9uPy4kUGF0aCxcblx0XHRcdFx0bGFiZWw6IGxhYmVsLFxuXHRcdFx0XHRzb3J0YWJsZTogdHJ1ZSxcblx0XHRcdFx0ZmlsdGVyYWJsZTogIXByb3BlcnR5QW5ub3RhdGlvbnNbXCJAY29tLnNhcC52b2NhYnVsYXJpZXMuVUkudjEuSGlkZGVuRmlsdGVyXCJdLFxuXHRcdFx0XHQkVHlwZTogY29sdW1uUHJvcGVydHlUeXBlXG5cdFx0XHR9O1xuXHRcdFx0Y29sdW1uRGVmcy5wdXNoKGNvbHVtbkRlZik7XG5cdFx0fVxuXHR9LFxuXG5cdGZpbHRlckluT3V0UGFyYW1ldGVyczogZnVuY3Rpb24gKHZoUGFyYW1ldGVyczogSW5PdXRQYXJhbWV0ZXJbXSwgdHlwZUZpbHRlcjogc3RyaW5nW10pOiBJbk91dFBhcmFtZXRlcltdIHtcblx0XHRyZXR1cm4gdmhQYXJhbWV0ZXJzLmZpbHRlcihmdW5jdGlvbiAocGFyYW1ldGVyKSB7XG5cdFx0XHRyZXR1cm4gdHlwZUZpbHRlci5pbmNsdWRlcyhwYXJhbWV0ZXIucGFybWV0ZXJUeXBlKTtcblx0XHR9KTtcblx0fSxcblxuXHRnZXRJblBhcmFtZXRlcnM6IGZ1bmN0aW9uICh2aFBhcmFtZXRlcnM6IEluT3V0UGFyYW1ldGVyW10pOiBJbk91dFBhcmFtZXRlcltdIHtcblx0XHRyZXR1cm4gVmFsdWVMaXN0SGVscGVyLmZpbHRlckluT3V0UGFyYW1ldGVycyh2aFBhcmFtZXRlcnMsIFtcblx0XHRcdEFubm90YXRpb25WYWx1ZUxpc3RQYXJhbWV0ZXJJbixcblx0XHRcdEFubm90YXRpb25WYWx1ZUxpc3RQYXJhbWV0ZXJDb25zdGFudCxcblx0XHRcdEFubm90YXRpb25WYWx1ZUxpc3RQYXJhbWV0ZXJJbk91dFxuXHRcdF0pO1xuXHR9LFxuXG5cdGdldE91dFBhcmFtZXRlcnM6IGZ1bmN0aW9uICh2aFBhcmFtZXRlcnM6IEluT3V0UGFyYW1ldGVyW10pOiBJbk91dFBhcmFtZXRlcltdIHtcblx0XHRyZXR1cm4gVmFsdWVMaXN0SGVscGVyLmZpbHRlckluT3V0UGFyYW1ldGVycyh2aFBhcmFtZXRlcnMsIFtBbm5vdGF0aW9uVmFsdWVMaXN0UGFyYW1ldGVyT3V0LCBBbm5vdGF0aW9uVmFsdWVMaXN0UGFyYW1ldGVySW5PdXRdKTtcblx0fSxcblxuXHRnZXRJbkFuZE91dFBhcmFtZXRlcnM6IGZ1bmN0aW9uICh2aFBhcmFtZXRlcnM6IEluT3V0UGFyYW1ldGVyW10pOiBJbk91dFBhcmFtZXRlcltdIHtcblx0XHRyZXR1cm4gVmFsdWVMaXN0SGVscGVyLmZpbHRlckluT3V0UGFyYW1ldGVycyh2aFBhcmFtZXRlcnMsIFZhbHVlTGlzdEhlbHBlci5nZXRJbkFuZE91dFBhcmFtZXRlcnNMaXN0KCkpO1xuXHR9LFxuXG5cdGNyZWF0ZVZIVUlNb2RlbDogZnVuY3Rpb24gKHZhbHVlSGVscDogVmFsdWVIZWxwLCBwcm9wZXJ0eVBhdGg6IHN0cmluZywgbWV0YU1vZGVsOiBPRGF0YU1ldGFNb2RlbCk6IEpTT05Nb2RlbCB7XG5cdFx0Ly8gc2V0dGluZyB0aGUgX1ZIVUkgbW9kZWwgZXZhbHVhdGVkIGluIHRoZSBWYWx1ZUxpc3RUYWJsZSBmcmFnbWVudFxuXHRcdGNvbnN0IHZoVUlNb2RlbCA9IG5ldyBKU09OTW9kZWwoe30pLFxuXHRcdFx0cHJvcGVydHlBbm5vdGF0aW9ucyA9IG1ldGFNb2RlbC5nZXRPYmplY3QoYCR7cHJvcGVydHlQYXRofUBgKSBhcyBBbm5vdGF0aW9uc0ZvclByb3BlcnR5O1xuXG5cdFx0dmFsdWVIZWxwLnNldE1vZGVsKHZoVUlNb2RlbCwgXCJfVkhVSVwiKTtcblx0XHQvLyBJZGVudGlmaWVzIHRoZSBcIkNvbnRleHREZXBlbmRlbnQtU2NlbmFyaW9cIlxuXHRcdHZoVUlNb2RlbC5zZXRQcm9wZXJ0eShcIi9oYXNWYWx1ZUxpc3RSZWxldmFudFF1YWxpZmllcnNcIiwgISFwcm9wZXJ0eUFubm90YXRpb25zW0Fubm90YXRpb25zVmFsdWVMaXN0UmVsZXZhbnRRdWFsaWZpZXJzXSk7XG5cdFx0LyogUHJvcGVydHkgbGFiZWwgZm9yIGRpYWxvZyB0aXRsZSAqL1xuXHRcdHZoVUlNb2RlbC5zZXRQcm9wZXJ0eShcIi9wcm9wZXJ0eUxhYmVsXCIsIHByb3BlcnR5QW5ub3RhdGlvbnNbQW5ub3RhdGlvbkxhYmVsXSk7XG5cblx0XHRyZXR1cm4gdmhVSU1vZGVsO1xuXHR9LFxuXG5cdC8qKlxuXHQgKiBSZXR1cm5zIHRoZSB0aXRsZSBvZiB0aGUgdmFsdWUgaGVscCBkaWFsb2cuXG5cdCAqIEJ5IGRlZmF1bHQsIHRoZSBkYXRhIGZpZWxkIGxhYmVsIGlzIHVzZWQsIG90aGVyd2lzZSBlaXRoZXIgdGhlIHByb3BlcnR5IGxhYmVsIG9yIHRoZSB2YWx1ZSBsaXN0IGxhYmVsIGlzIHVzZWQgYXMgYSBmYWxsYmFjay5cblx0ICogRm9yIGNvbnRleHQtZGVwZW5kZW50IHZhbHVlIGhlbHBzLCBieSBkZWZhdWx0IHRoZSB2YWx1ZSBsaXN0IGxhYmVsIGlzIHVzZWQsIG90aGVyd2lzZSBlaXRoZXIgdGhlIHByb3BlcnR5IGxhYmVsIG9yIHRoZSBkYXRhIGZpZWxkIGxhYmVsIGlzIHVzZWQgYXMgYSBmYWxsYmFjay5cblx0ICogQHBhcmFtIHZhbHVlSGVscCBUaGUgdmFsdWVIZWxwIGluc3RhbmNlXG5cdCAqIEBwYXJhbSB2YWx1ZWhlbHBMYWJlbCBUaGUgbGFiZWwgaW4gdGhlIHZhbHVlIGhlbHAgbWV0YWRhdGFcblx0ICogQHJldHVybnMgVGhlIHRpdGxlIGZvciB0aGUgdmFsdWVIZWxwIGRpYWxvZ1xuXHQgKiBAcHJpdmF0ZVxuXHQgKi9cblx0X2dldERpYWxvZ1RpdGxlOiBmdW5jdGlvbiAodmFsdWVIZWxwOiBWYWx1ZUhlbHAsIHZhbHVlaGVscExhYmVsOiBzdHJpbmcgfCB1bmRlZmluZWQpOiBzdHJpbmcge1xuXHRcdGNvbnN0IHByb3BlcnR5TGFiZWwgPSAodmFsdWVIZWxwLmdldE1vZGVsKFwiX1ZIVUlcIikgYXMgSlNPTk1vZGVsKS5nZXRQcm9wZXJ0eShcIi9wcm9wZXJ0eUxhYmVsXCIpO1xuXHRcdGNvbnN0IGRhdGFGaWVsZExhYmVsID0gdmFsdWVIZWxwLmdldENvbnRyb2woKT8uZ2V0UHJvcGVydHkoXCJsYWJlbFwiKTtcblx0XHRyZXR1cm4gKHZhbHVlSGVscC5nZXRNb2RlbChcIl9WSFVJXCIpIGFzIEpTT05Nb2RlbCkuZ2V0UHJvcGVydHkoXCIvaGFzVmFsdWVMaXN0UmVsZXZhbnRRdWFsaWZpZXJzXCIpXG5cdFx0XHQ/IHZhbHVlaGVscExhYmVsIHx8IHByb3BlcnR5TGFiZWwgfHwgZGF0YUZpZWxkTGFiZWxcblx0XHRcdDogZGF0YUZpZWxkTGFiZWwgfHwgcHJvcGVydHlMYWJlbCB8fCB2YWx1ZWhlbHBMYWJlbDtcblx0fSxcblxuXHRkZXN0cm95VkhDb250ZW50OiBmdW5jdGlvbiAodmFsdWVIZWxwOiBWYWx1ZUhlbHApOiB2b2lkIHtcblx0XHRpZiAodmFsdWVIZWxwLmdldERpYWxvZygpKSB7XG5cdFx0XHR2YWx1ZUhlbHAuZ2V0RGlhbG9nKCkuZGVzdHJveUNvbnRlbnQoKTtcblx0XHR9XG5cdFx0aWYgKHZhbHVlSGVscC5nZXRUeXBlYWhlYWQoKSkge1xuXHRcdFx0dmFsdWVIZWxwLmdldFR5cGVhaGVhZCgpLmRlc3Ryb3lDb250ZW50KCk7XG5cdFx0fVxuXHR9LFxuXG5cdHB1dERlZmF1bHRRdWFsaWZpZXJGaXJzdDogZnVuY3Rpb24gKHF1YWxpZmllcnM6IHN0cmluZ1tdKTogc3RyaW5nW10ge1xuXHRcdGNvbnN0IGluZGV4RGVmYXVsdFZIID0gcXVhbGlmaWVycy5pbmRleE9mKFwiXCIpO1xuXG5cdFx0Ly8gZGVmYXVsdCBWYWx1ZUhlbHAgd2l0aG91dCBxdWFsaWZpZXIgc2hvdWxkIGJlIHRoZSBmaXJzdFxuXHRcdGlmIChpbmRleERlZmF1bHRWSCA+IDApIHtcblx0XHRcdHF1YWxpZmllcnMudW5zaGlmdChxdWFsaWZpZXJzW2luZGV4RGVmYXVsdFZIXSk7XG5cdFx0XHRxdWFsaWZpZXJzLnNwbGljZShpbmRleERlZmF1bHRWSCArIDEsIDEpO1xuXHRcdH1cblx0XHRyZXR1cm4gcXVhbGlmaWVycztcblx0fSxcblxuXHRfZ2V0Q29udGV4dFByZWZpeDogZnVuY3Rpb24gKGJpbmRpbmdDb250ZXh0OiBDb250ZXh0IHwgdW5kZWZpbmVkLCBwcm9wZXJ0eUJpbmRpbmdQYXJ0czogc3RyaW5nW10pOiBzdHJpbmcge1xuXHRcdGlmIChiaW5kaW5nQ29udGV4dCAmJiBiaW5kaW5nQ29udGV4dC5nZXRQYXRoKCkpIHtcblx0XHRcdGNvbnN0IGJpbmRpZ0NvbnRleHRQYXJ0cyA9IGJpbmRpbmdDb250ZXh0LmdldFBhdGgoKS5zcGxpdChcIi9cIik7XG5cdFx0XHRpZiAocHJvcGVydHlCaW5kaW5nUGFydHMubGVuZ3RoIC0gYmluZGlnQ29udGV4dFBhcnRzLmxlbmd0aCA+IDEpIHtcblx0XHRcdFx0Y29uc3QgY29udGV4dFByZWZpeFBhcnRzID0gW107XG5cdFx0XHRcdGZvciAobGV0IGkgPSBiaW5kaWdDb250ZXh0UGFydHMubGVuZ3RoOyBpIDwgcHJvcGVydHlCaW5kaW5nUGFydHMubGVuZ3RoIC0gMTsgaSsrKSB7XG5cdFx0XHRcdFx0Y29udGV4dFByZWZpeFBhcnRzLnB1c2gocHJvcGVydHlCaW5kaW5nUGFydHNbaV0pO1xuXHRcdFx0XHR9XG5cdFx0XHRcdHJldHVybiBgJHtjb250ZXh0UHJlZml4UGFydHMuam9pbihcIi9cIil9L2A7XG5cdFx0XHR9XG5cdFx0fVxuXG5cdFx0cmV0dXJuIFwiXCI7XG5cdH0sXG5cblx0X2dldFZoUGFyYW1ldGVyOiBmdW5jdGlvbiAoXG5cdFx0Y29uZGl0aW9uTW9kZWw6IHN0cmluZyB8IHVuZGVmaW5lZCxcblx0XHR2YWx1ZUhlbHA6IFZhbHVlSGVscCxcblx0XHRjb250ZXh0UHJlZml4OiBzdHJpbmcsXG5cdFx0cGFyYW1ldGVyOiBBbm5vdGF0aW9uVmFsdWVMaXN0UGFyYW1ldGVyLFxuXHRcdHZoTWV0YU1vZGVsOiBPRGF0YU1ldGFNb2RlbCxcblx0XHRsb2NhbERhdGFQcm9wZXJ0eVBhdGg6IHN0cmluZ1xuXHQpOiBJbk91dFBhcmFtZXRlciB7XG5cdFx0bGV0IHZhbHVlUGF0aDogc3RyaW5nIHwgdW5kZWZpbmVkID0gXCJcIjtcblx0XHRjb25zdCBiaW5kaW5nQ29udGV4dCA9IHZhbHVlSGVscC5nZXRCaW5kaW5nQ29udGV4dCgpO1xuXHRcdGlmIChjb25kaXRpb25Nb2RlbCAmJiBjb25kaXRpb25Nb2RlbC5sZW5ndGggPiAwKSB7XG5cdFx0XHRpZiAoXG5cdFx0XHRcdHZhbHVlSGVscC5nZXRQYXJlbnQoKT8uaXNBKFwic2FwLnVpLm1kYy5UYWJsZVwiKSAmJlxuXHRcdFx0XHRiaW5kaW5nQ29udGV4dCAmJlxuXHRcdFx0XHRWYWx1ZUxpc3RIZWxwZXIuX3BhcmFtZXRlcklzQShwYXJhbWV0ZXIsIFtcblx0XHRcdFx0XHRDb21tb25Bbm5vdGF0aW9uVHlwZXMuVmFsdWVMaXN0UGFyYW1ldGVySW4sXG5cdFx0XHRcdFx0Q29tbW9uQW5ub3RhdGlvblR5cGVzLlZhbHVlTGlzdFBhcmFtZXRlckluT3V0XG5cdFx0XHRcdF0pXG5cdFx0XHQpIHtcblx0XHRcdFx0Ly8gU3BlY2lhbCBoYW5kbGluZyBmb3IgdmFsdWUgaGVscCB1c2VkIGluIGZpbHRlciBkaWFsb2dcblx0XHRcdFx0Y29uc3QgcGFydHMgPSBsb2NhbERhdGFQcm9wZXJ0eVBhdGguc3BsaXQoXCIvXCIpO1xuXHRcdFx0XHRpZiAocGFydHMubGVuZ3RoID4gMSkge1xuXHRcdFx0XHRcdGNvbnN0IGZpcnN0TmF2aWdhdGlvblByb3BlcnR5ID0gcGFydHNbMF07XG5cdFx0XHRcdFx0Y29uc3Qgb0JvdW5kRW50aXR5ID0gdmhNZXRhTW9kZWwuZ2V0TWV0YUNvbnRleHQoYmluZGluZ0NvbnRleHQuZ2V0UGF0aCgpKTtcblx0XHRcdFx0XHRjb25zdCBzUGF0aE9mVGFibGUgPSAodmFsdWVIZWxwLmdldFBhcmVudCgpIGFzIHVua25vd24gYXMgeyBnZXRSb3dCaW5kaW5nOiBGdW5jdGlvbiB9KS5nZXRSb3dCaW5kaW5nKCkuZ2V0UGF0aCgpOyAvL1RPRE9cblx0XHRcdFx0XHRpZiAob0JvdW5kRW50aXR5LmdldE9iamVjdChgJHtzUGF0aE9mVGFibGV9LyRQYXJ0bmVyYCkgPT09IGZpcnN0TmF2aWdhdGlvblByb3BlcnR5KSB7XG5cdFx0XHRcdFx0XHQvLyBVc2luZyB0aGUgY29uZGl0aW9uIG1vZGVsIGRvZXNuJ3QgbWFrZSBhbnkgc2Vuc2UgaW4gY2FzZSBhbiBpbi1wYXJhbWV0ZXIgdXNlcyBhIG5hdmlnYXRpb24gcHJvcGVydHlcblx0XHRcdFx0XHRcdC8vIHJlZmVycmluZyB0byB0aGUgcGFydG5lci4gVGhlcmVmb3JlIHVzaW5nIHRoZSBGVkggY29udGV4dCBpbnN0ZWFkIG9mIHRoZSBjb25kaXRpb24gbW9kZWwuXG5cdFx0XHRcdFx0XHR2YWx1ZVBhdGggPSBsb2NhbERhdGFQcm9wZXJ0eVBhdGg7XG5cdFx0XHRcdFx0fVxuXHRcdFx0XHR9XG5cdFx0XHR9IGVsc2UgaWYgKFxuXHRcdFx0XHR2YWx1ZUhlbHAuZ2V0UGFyZW50KCk/LmdldFBhcmVudCgpPy5nZXRQYXJlbnQoKT8uaXNBPEZpbHRlckJhckFQST4oXCJzYXAuZmUubWFjcm9zLmZpbHRlckJhci5GaWx0ZXJCYXJBUElcIikgJiZcblx0XHRcdFx0YmluZGluZ0NvbnRleHQgJiZcblx0XHRcdFx0VmFsdWVMaXN0SGVscGVyLl9wYXJhbWV0ZXJJc0EocGFyYW1ldGVyLCBbXG5cdFx0XHRcdFx0Q29tbW9uQW5ub3RhdGlvblR5cGVzLlZhbHVlTGlzdFBhcmFtZXRlckluLFxuXHRcdFx0XHRcdENvbW1vbkFubm90YXRpb25UeXBlcy5WYWx1ZUxpc3RQYXJhbWV0ZXJJbk91dFxuXHRcdFx0XHRdKVxuXHRcdFx0KSB7XG5cdFx0XHRcdC8vIEluIGNhc2Ugd2UgYXJlIGEgdmFsdWUgaGVscCBvZiBhIEZpbHRlckJhciwgd2UgY2FuIGdvIHVwIHRvIHRoZSBBUEkgdG8gY2hlY2sgaWYgd2UgYXJlIG9uIGEgZmlsdGVyYmFyIHJlcHJlc2VudGluZyBhIG5hdmlnYXRpb24gcHJvcGVydHlcblx0XHRcdFx0Y29uc3QgZmlsdGVyQmFyQVBJID0gdmFsdWVIZWxwLmdldFBhcmVudCgpPy5nZXRQYXJlbnQoKT8uZ2V0UGFyZW50KCkgYXMgRmlsdGVyQmFyQVBJO1xuXHRcdFx0XHRjb25zdCBmaWx0ZXJCYXJNZXRhUGF0aCA9IGZpbHRlckJhckFQSS5tZXRhUGF0aDtcblx0XHRcdFx0Y29uc3QgdmFsdWVIZWxwQ29udGV4dFBhdGggPSB2aE1ldGFNb2RlbC5nZXRNZXRhUGF0aChiaW5kaW5nQ29udGV4dC5nZXRQYXRoKCkpO1xuXHRcdFx0XHRjb25zdCBjb250ZXh0TWV0YVBhdGggPSBuZXcgTWV0YVBhdGgoY29udmVydFR5cGVzKHZoTWV0YU1vZGVsKSwgdmFsdWVIZWxwQ29udGV4dFBhdGgsIHZhbHVlSGVscENvbnRleHRQYXRoKTtcblx0XHRcdFx0Y29uc3QgbWV0YVBhdGggPSBuZXcgTWV0YVBhdGgoY29udmVydFR5cGVzKHZoTWV0YU1vZGVsKSwgZmlsdGVyQmFyTWV0YVBhdGgsIHZhbHVlSGVscENvbnRleHRQYXRoKTtcblx0XHRcdFx0Y29uc3QgbmV3UGF0aCA9IG1ldGFQYXRoLmdldE1ldGFQYXRoRm9yUGF0aDxQcm9wZXJ0eT4obG9jYWxEYXRhUHJvcGVydHlQYXRoKTtcblx0XHRcdFx0aWYgKG5ld1BhdGggJiYgbmV3UGF0aC5nZXRUYXJnZXQoKSkge1xuXHRcdFx0XHRcdGNvbnN0IHRhcmdldEVudGl0eVNldCA9IG5ld1BhdGguZ2V0Q2xvc2VzdEVudGl0eVNldCgpO1xuXHRcdFx0XHRcdGlmICh0YXJnZXRFbnRpdHlTZXQgPT09IGNvbnRleHRNZXRhUGF0aC5nZXRDbG9zZXN0RW50aXR5U2V0KCkpIHtcblx0XHRcdFx0XHRcdHZhbHVlUGF0aCA9IGNvbnRleHRNZXRhUGF0aC5nZXRNZXRhUGF0aEZvck9iamVjdChuZXdQYXRoLmdldFRhcmdldCgpKT8uZ2V0UmVsYXRpdmVQYXRoKCk7XG5cdFx0XHRcdFx0fVxuXHRcdFx0XHR9XG5cdFx0XHR9XG5cdFx0XHRpZiAoIXZhbHVlUGF0aCkge1xuXHRcdFx0XHR2YWx1ZVBhdGggPSBjb25kaXRpb25Nb2RlbCArIFwiPi9jb25kaXRpb25zL1wiICsgbG9jYWxEYXRhUHJvcGVydHlQYXRoO1xuXHRcdFx0fVxuXHRcdH0gZWxzZSB7XG5cdFx0XHR2YWx1ZVBhdGggPSBjb250ZXh0UHJlZml4ICsgbG9jYWxEYXRhUHJvcGVydHlQYXRoO1xuXHRcdH1cblxuXHRcdHJldHVybiB7XG5cdFx0XHRwYXJtZXRlclR5cGU6IHBhcmFtZXRlci4kVHlwZSxcblx0XHRcdHNvdXJjZTogdmFsdWVQYXRoLFxuXHRcdFx0aGVscFBhdGg6IHBhcmFtZXRlci5WYWx1ZUxpc3RQcm9wZXJ0eSxcblx0XHRcdGNvbnN0YW50VmFsdWU6IHBhcmFtZXRlci5Db25zdGFudCxcblx0XHRcdGluaXRpYWxWYWx1ZUlzU2lnbmlmaWNhbnQ6IEJvb2xlYW4ocGFyYW1ldGVyLkluaXRpYWxWYWx1ZUlzU2lnbmlmaWNhbnQpXG5cdFx0fTtcblx0fSxcblxuXHRfcGFyYW1ldGVySXNBKHBhcmFtZXRlcjogQW5ub3RhdGlvblZhbHVlTGlzdFBhcmFtZXRlciwgcGFyYW1ldGVyVHlwZXM6IENvbW1vbkFubm90YXRpb25UeXBlc1tdKTogYm9vbGVhbiB7XG5cdFx0cmV0dXJuIHBhcmFtZXRlclR5cGVzLmluY2x1ZGVzKHBhcmFtZXRlci4kVHlwZSBhcyBDb21tb25Bbm5vdGF0aW9uVHlwZXMpO1xuXHR9LFxuXG5cdF9lbnJpY2hQYXRoOiBmdW5jdGlvbiAoXG5cdFx0cGF0aDogUGF0aCxcblx0XHRwcm9wZXJ0eVBhdGg6IHN0cmluZyxcblx0XHRsb2NhbERhdGFQcm9wZXJ0eVBhdGg6IHN0cmluZyxcblx0XHRwYXJhbWV0ZXI6IEFubm90YXRpb25WYWx1ZUxpc3RQYXJhbWV0ZXIsXG5cdFx0cHJvcGVydHlOYW1lOiBzdHJpbmcgfCB1bmRlZmluZWQsXG5cdFx0cHJvcGVydHlBbm5vdGF0aW9uczogQW5ub3RhdGlvbnNGb3JQcm9wZXJ0eSxcblx0XHRleHRlcm5hbElkUGF0aDogc3RyaW5nIHwgdW5kZWZpbmVkXG5cdCk6IHZvaWQge1xuXHRcdGlmIChcblx0XHRcdCFwYXRoLmtleSAmJlxuXHRcdFx0VmFsdWVMaXN0SGVscGVyLl9wYXJhbWV0ZXJJc0EocGFyYW1ldGVyLCBbXG5cdFx0XHRcdENvbW1vbkFubm90YXRpb25UeXBlcy5WYWx1ZUxpc3RQYXJhbWV0ZXJPdXQsXG5cdFx0XHRcdENvbW1vbkFubm90YXRpb25UeXBlcy5WYWx1ZUxpc3RQYXJhbWV0ZXJJbk91dFxuXHRcdFx0XSkgJiZcblx0XHRcdGxvY2FsRGF0YVByb3BlcnR5UGF0aCA9PT0gcHJvcGVydHlOYW1lXG5cdFx0KSB7XG5cdFx0XHQvKiBFWFRFUk5BTElEICovXG5cdFx0XHRjb25zdCBleHRlcm5hbElkUHJvcGVydHkgPSBleHRlcm5hbElkUGF0aD8uc3BsaXQoXCIvXCIpLnBvcCgpO1xuXHRcdFx0cGFyYW1ldGVyLlZhbHVlTGlzdFByb3BlcnR5ID0gZXh0ZXJuYWxJZFByb3BlcnR5ID8gZXh0ZXJuYWxJZFByb3BlcnR5IDogcGFyYW1ldGVyLlZhbHVlTGlzdFByb3BlcnR5O1xuXHRcdFx0cGF0aC5maWVsZFByb3BlcnR5UGF0aCA9IHByb3BlcnR5UGF0aDtcblx0XHRcdHBhdGgua2V5ID0gcGFyYW1ldGVyLlZhbHVlTGlzdFByb3BlcnR5O1xuXG5cdFx0XHQvL09ubHkgdGhlIHRleHQgYW5ub3RhdGlvbiBvZiB0aGUga2V5IGNhbiBzcGVjaWZ5IHRoZSBkZXNjcmlwdGlvblxuXHRcdFx0cGF0aC5kZXNjcmlwdGlvblBhdGggPSBwcm9wZXJ0eUFubm90YXRpb25zW0Fubm90YXRpb25UZXh0XT8uJFBhdGggfHwgXCJcIjtcblx0XHR9XG5cdH0sXG5cblx0X2VucmljaEtleXM6IGZ1bmN0aW9uICh2aEtleXM6IHN0cmluZ1tdLCBwYXJhbWV0ZXI6IEFubm90YXRpb25WYWx1ZUxpc3RQYXJhbWV0ZXIpOiB2b2lkIHtcblx0XHRpZiAoXG5cdFx0XHRWYWx1ZUxpc3RIZWxwZXIuX3BhcmFtZXRlcklzQShwYXJhbWV0ZXIsIFZhbHVlTGlzdEhlbHBlci5nZXRJbkFuZE91dFBhcmFtZXRlcnNMaXN0KCkpICYmXG5cdFx0XHQhdmhLZXlzLmluY2x1ZGVzKHBhcmFtZXRlci5WYWx1ZUxpc3RQcm9wZXJ0eSlcblx0XHQpIHtcblx0XHRcdHZoS2V5cy5wdXNoKHBhcmFtZXRlci5WYWx1ZUxpc3RQcm9wZXJ0eSk7XG5cdFx0fVxuXHR9LFxuXG5cdC8qKlxuXHQgKiBNZXRob2QgdG8gcHJlLXByb2Nlc3MgYSB2YWx1ZSBsaXN0IGFubm90YXRpb24gYmVmb3JlIHVzaW5nIHRoZW0gaW4gdGhlIHRlbXBsYXRpbmcuXG5cdCAqIEBwYXJhbSBhbm5vdGF0aW9uVmFsdWVMaXN0VHlwZVxuXHQgKiBAcGFyYW0gcHJvcGVydHlOYW1lXG5cdCAqIEBwYXJhbSBjb25kaXRpb25Nb2RlbFxuXHQgKiBAcGFyYW0gdmFsdWVIZWxwXG5cdCAqIEBwYXJhbSBjb250ZXh0UHJlZml4XG5cdCAqIEBwYXJhbSB2aE1ldGFNb2RlbFxuXHQgKiBAcGFyYW0gdmFsdWVIZWxwUXVhbGlmaWVyXG5cdCAqIEBwYXJhbSBwYXlsb2FkXG5cdCAqIEByZXR1cm5zIFRoZSBWYWx1ZUxpc3RJbmZvIHRvIGJlIHVzZWQgaW4gdGVtcGxhdGluZ1xuXHQgKi9cblx0X3Byb2Nlc3NQYXJhbWV0ZXJzOiBmdW5jdGlvbiAoXG5cdFx0YW5ub3RhdGlvblZhbHVlTGlzdFR5cGU6IEFubm90YXRpb25WYWx1ZUxpc3RUeXBlLFxuXHRcdHByb3BlcnR5TmFtZTogc3RyaW5nIHwgdW5kZWZpbmVkLFxuXHRcdGNvbmRpdGlvbk1vZGVsOiBzdHJpbmcgfCB1bmRlZmluZWQsXG5cdFx0dmFsdWVIZWxwOiBWYWx1ZUhlbHAsXG5cdFx0Y29udGV4dFByZWZpeDogc3RyaW5nLFxuXHRcdHZoTWV0YU1vZGVsOiBPRGF0YU1ldGFNb2RlbCxcblx0XHR2YWx1ZUhlbHBRdWFsaWZpZXI6IHN0cmluZyxcblx0XHRwYXlsb2FkOiBWYWx1ZUhlbHBQYXlsb2FkXG5cdCk6IFZhbHVlTGlzdEluZm8gfCB1bmRlZmluZWQge1xuXHRcdGNvbnN0IGlzRm9yTXVsdGlWYWx1ZUZpZWxkID0gcGF5bG9hZC51c2VNdWx0aVZhbHVlRmllbGQ7XG5cdFx0Y29uc3QgbWV0YU1vZGVsID0gYW5ub3RhdGlvblZhbHVlTGlzdFR5cGUuJG1vZGVsLmdldE1ldGFNb2RlbCgpLFxuXHRcdFx0ZW50aXR5U2V0UGF0aCA9IGAvJHthbm5vdGF0aW9uVmFsdWVMaXN0VHlwZS5Db2xsZWN0aW9uUGF0aH1gLFxuXHRcdFx0ZW50aXR5VHlwZSA9IG1ldGFNb2RlbC5nZXRPYmplY3QoYCR7ZW50aXR5U2V0UGF0aH0vYCk7XG5cdFx0aWYgKGVudGl0eVR5cGUgPT09IHVuZGVmaW5lZCkge1xuXHRcdFx0TG9nLmVycm9yKGBJbmNvbnNpc3RlbnQgdmFsdWUgaGVscCBtZXRhZGF0YTogRW50aXR5ICR7ZW50aXR5U2V0UGF0aH0gaXMgbm90IGRlZmluZWRgKTtcblx0XHRcdHJldHVybjtcblx0XHR9XG5cblx0XHRjb25zdCBjb2x1bW5EZWZzID0gVmFsdWVMaXN0SGVscGVyLl9nZXRDb2x1bW5EZWZpbml0aW9uRnJvbVNlbGVjdGlvbkZpZWxkcyhtZXRhTW9kZWwsIGVudGl0eVNldFBhdGgpLFxuXHRcdFx0dmhQYXJhbWV0ZXJzOiBJbk91dFBhcmFtZXRlcltdID0gW10sXG5cdFx0XHR2aEtleXM6IHN0cmluZ1tdID0gZW50aXR5VHlwZS4kS2V5ID8gWy4uLmVudGl0eVR5cGUuJEtleV0gOiBbXTtcblxuXHRcdGNvbnN0IHBhdGg6IFBhdGggPSB7XG5cdFx0XHRmaWVsZFByb3BlcnR5UGF0aDogXCJcIixcblx0XHRcdGRlc2NyaXB0aW9uUGF0aDogXCJcIixcblx0XHRcdGtleTogXCJcIlxuXHRcdH07XG5cblx0XHRmb3IgKGNvbnN0IHBhcmFtZXRlciBvZiBhbm5vdGF0aW9uVmFsdWVMaXN0VHlwZS5QYXJhbWV0ZXJzKSB7XG5cdFx0XHQvL0FsbCBTdHJpbmcgZmllbGRzIGFyZSBhbGxvd2VkIGZvciBmaWx0ZXJcblx0XHRcdGNvbnN0IHByb3BlcnR5UGF0aCA9IGAvJHthbm5vdGF0aW9uVmFsdWVMaXN0VHlwZS5Db2xsZWN0aW9uUGF0aH0vJHtwYXJhbWV0ZXIuVmFsdWVMaXN0UHJvcGVydHl9YCxcblx0XHRcdFx0cHJvcGVydHkgPSBtZXRhTW9kZWwuZ2V0T2JqZWN0KHByb3BlcnR5UGF0aCksXG5cdFx0XHRcdHByb3BlcnR5QW5ub3RhdGlvbnMgPSAobWV0YU1vZGVsLmdldE9iamVjdChgJHtwcm9wZXJ0eVBhdGh9QGApIHx8IHt9KSBhcyBBbm5vdGF0aW9uc0ZvclByb3BlcnR5LFxuXHRcdFx0XHRsb2NhbERhdGFQcm9wZXJ0eVBhdGggPSBwYXJhbWV0ZXIuTG9jYWxEYXRhUHJvcGVydHk/LiRQcm9wZXJ0eVBhdGggfHwgXCJcIjtcblxuXHRcdFx0aWYgKHByb3BlcnR5QW5ub3RhdGlvbnNbQW5ub3RhdGlvbnNQZXJzb25hbERhdGFQb3RlbnRpYWxseVNlbnNpdGl2ZV0pIHtcblx0XHRcdFx0cGF5bG9hZC5pc1BvdGVudGlhbGx5U2Vuc2l0aXZlID0gdHJ1ZTtcblx0XHRcdH1cblxuXHRcdFx0Ly8gSWYgcHJvcGVydHkgaXMgdW5kZWZpbmVkLCB0aGVuIHRoZSBwcm9wZXJ0eSBjb21pbmcgZm9yIHRoZSBlbnRyeSBpc24ndCBkZWZpbmVkIGluXG5cdFx0XHQvLyB0aGUgbWV0YW1vZGVsLCB0aGVyZWZvcmUgd2UgZG9uJ3QgbmVlZCB0byBhZGQgaXQgaW4gdGhlIGluL291dCBwYXJhbWV0ZXJzXG5cdFx0XHRpZiAocHJvcGVydHkpIHtcblx0XHRcdFx0Ly8gU2VhcmNoIGZvciB0aGUgKm91dCBQYXJhbWV0ZXIgbWFwcGVkIHRvIHRoZSBsb2NhbCBwcm9wZXJ0eVxuXHRcdFx0XHRWYWx1ZUxpc3RIZWxwZXIuX2VucmljaFBhdGgoXG5cdFx0XHRcdFx0cGF0aCxcblx0XHRcdFx0XHRwcm9wZXJ0eVBhdGgsXG5cdFx0XHRcdFx0bG9jYWxEYXRhUHJvcGVydHlQYXRoLFxuXHRcdFx0XHRcdHBhcmFtZXRlcixcblx0XHRcdFx0XHRwcm9wZXJ0eU5hbWUsXG5cdFx0XHRcdFx0cHJvcGVydHlBbm5vdGF0aW9ucyxcblx0XHRcdFx0XHRwYXlsb2FkLmV4dGVybmFsSWRQYXRoXG5cdFx0XHRcdCk7XG5cblx0XHRcdFx0Y29uc3QgdmFsdWVMaXN0UHJvcGVydHkgPSBwYXJhbWV0ZXIuVmFsdWVMaXN0UHJvcGVydHk7XG5cdFx0XHRcdFZhbHVlTGlzdEhlbHBlci5fbWVyZ2VDb2x1bW5EZWZpbml0aW9uc0Zyb21Qcm9wZXJ0aWVzKFxuXHRcdFx0XHRcdGNvbHVtbkRlZnMsXG5cdFx0XHRcdFx0YW5ub3RhdGlvblZhbHVlTGlzdFR5cGUsXG5cdFx0XHRcdFx0dmFsdWVMaXN0UHJvcGVydHksXG5cdFx0XHRcdFx0cHJvcGVydHksXG5cdFx0XHRcdFx0cHJvcGVydHlBbm5vdGF0aW9uc1xuXHRcdFx0XHQpO1xuXHRcdFx0fVxuXG5cdFx0XHQvL0luIGFuZCBJbk91dCBhbmQgT3V0XG5cdFx0XHRpZiAoXG5cdFx0XHRcdFZhbHVlTGlzdEhlbHBlci5fcGFyYW1ldGVySXNBKHBhcmFtZXRlciwgW1xuXHRcdFx0XHRcdENvbW1vbkFubm90YXRpb25UeXBlcy5WYWx1ZUxpc3RQYXJhbWV0ZXJJbixcblx0XHRcdFx0XHRDb21tb25Bbm5vdGF0aW9uVHlwZXMuVmFsdWVMaXN0UGFyYW1ldGVyT3V0LFxuXHRcdFx0XHRcdENvbW1vbkFubm90YXRpb25UeXBlcy5WYWx1ZUxpc3RQYXJhbWV0ZXJJbk91dFxuXHRcdFx0XHRdKSAmJlxuXHRcdFx0XHRsb2NhbERhdGFQcm9wZXJ0eVBhdGggIT09IHByb3BlcnR5TmFtZVxuXHRcdFx0KSB7XG5cdFx0XHRcdGNvbnN0IHZoUGFyYW1ldGVyID0gVmFsdWVMaXN0SGVscGVyLl9nZXRWaFBhcmFtZXRlcihcblx0XHRcdFx0XHRjb25kaXRpb25Nb2RlbCxcblx0XHRcdFx0XHR2YWx1ZUhlbHAsXG5cdFx0XHRcdFx0Y29udGV4dFByZWZpeCxcblx0XHRcdFx0XHRwYXJhbWV0ZXIsXG5cdFx0XHRcdFx0dmhNZXRhTW9kZWwsXG5cdFx0XHRcdFx0bG9jYWxEYXRhUHJvcGVydHlQYXRoXG5cdFx0XHRcdCk7XG5cdFx0XHRcdGlmIChcblx0XHRcdFx0XHQhaXNGb3JNdWx0aVZhbHVlRmllbGQgfHxcblx0XHRcdFx0XHQoaXNGb3JNdWx0aVZhbHVlRmllbGQgJiYgVmFsdWVMaXN0SGVscGVyLl9wYXJhbWV0ZXJJc0EocGFyYW1ldGVyLCBbQ29tbW9uQW5ub3RhdGlvblR5cGVzLlZhbHVlTGlzdFBhcmFtZXRlckluXSkpXG5cdFx0XHRcdCkge1xuXHRcdFx0XHRcdC8vIGluIGNhc2Ugb2YgTXVsdGl2YWx1ZSBGaWVsZCB3ZSBkaXNyZWdhcmQgVmFsdWVMaXN0UGFyYW1ldGVySW5PdXRcblx0XHRcdFx0XHR2aFBhcmFtZXRlcnMucHVzaCh2aFBhcmFtZXRlcik7XG5cdFx0XHRcdH1cblx0XHRcdH1cblxuXHRcdFx0Ly9Db25zdGFudCBhcyBJblBhcmFtdGVyIGZvciBmaWx0ZXJpbmdcblx0XHRcdGlmIChwYXJhbWV0ZXIuJFR5cGUgPT09IEFubm90YXRpb25WYWx1ZUxpc3RQYXJhbWV0ZXJDb25zdGFudCkge1xuXHRcdFx0XHR2aFBhcmFtZXRlcnMucHVzaCh7XG5cdFx0XHRcdFx0cGFybWV0ZXJUeXBlOiBwYXJhbWV0ZXIuJFR5cGUsXG5cdFx0XHRcdFx0c291cmNlOiBwYXJhbWV0ZXIuVmFsdWVMaXN0UHJvcGVydHksXG5cdFx0XHRcdFx0aGVscFBhdGg6IHBhcmFtZXRlci5WYWx1ZUxpc3RQcm9wZXJ0eSxcblx0XHRcdFx0XHRjb25zdGFudFZhbHVlOiBwYXJhbWV0ZXIuQ29uc3RhbnQsXG5cdFx0XHRcdFx0aW5pdGlhbFZhbHVlSXNTaWduaWZpY2FudDogQm9vbGVhbihwYXJhbWV0ZXIuSW5pdGlhbFZhbHVlSXNTaWduaWZpY2FudClcblx0XHRcdFx0fSk7XG5cdFx0XHR9XG5cblx0XHRcdC8vIEVucmljaCBrZXlzIHdpdGggb3V0LXBhcmFtZXRlcnNcblx0XHRcdFZhbHVlTGlzdEhlbHBlci5fZW5yaWNoS2V5cyh2aEtleXMsIHBhcmFtZXRlcik7XG5cdFx0fVxuXG5cdFx0LyogRW5zdXJlIHRoYXQgdmhLZXlzIGFyZSBwYXJ0IG9mIHRoZSBjb2x1bW5EZWZzLCBvdGhlcndpc2UgaXQgaXMgbm90IGNvbnNpZGVyZWQgaW4gJHNlbGVjdCAoQkNQIDIyNzAxNDExNTQpICovXG5cdFx0Zm9yIChjb25zdCB2aEtleSBvZiB2aEtleXMpIHtcblx0XHRcdGlmIChjb2x1bW5Ob3RBbHJlYWR5RGVmaW5lZChjb2x1bW5EZWZzLCB2aEtleSkpIHtcblx0XHRcdFx0Y29uc3QgY29sdW1uRGVmOiBDb2x1bW5EZWYgPSB7XG5cdFx0XHRcdFx0cGF0aDogdmhLZXksXG5cdFx0XHRcdFx0JFR5cGU6IG1ldGFNb2RlbC5nZXRPYmplY3QoYC8ke2Fubm90YXRpb25WYWx1ZUxpc3RUeXBlLkNvbGxlY3Rpb25QYXRofS8ke3BhdGgua2V5fWApPy4kVHlwZSxcblx0XHRcdFx0XHRsYWJlbDogXCJcIixcblx0XHRcdFx0XHRzb3J0YWJsZTogZmFsc2UsXG5cdFx0XHRcdFx0ZmlsdGVyYWJsZTogdW5kZWZpbmVkXG5cdFx0XHRcdH07XG5cdFx0XHRcdGNvbHVtbkRlZnMucHVzaChjb2x1bW5EZWYpO1xuXHRcdFx0fVxuXHRcdH1cblxuXHRcdGNvbnN0IHZhbHVlbGlzdEluZm86IFZhbHVlTGlzdEluZm8gPSB7XG5cdFx0XHRrZXlQYXRoOiBwYXRoLmtleSxcblx0XHRcdGRlc2NyaXB0aW9uUGF0aDogcGF0aC5kZXNjcmlwdGlvblBhdGgsXG5cdFx0XHRmaWVsZFByb3BlcnR5UGF0aDogcGF0aC5maWVsZFByb3BlcnR5UGF0aCxcblx0XHRcdHZoS2V5czogdmhLZXlzLFxuXHRcdFx0dmhQYXJhbWV0ZXJzOiB2aFBhcmFtZXRlcnMsXG5cdFx0XHR2YWx1ZUxpc3RJbmZvOiBhbm5vdGF0aW9uVmFsdWVMaXN0VHlwZSxcblx0XHRcdGNvbHVtbkRlZnM6IGNvbHVtbkRlZnMsXG5cdFx0XHR2YWx1ZUhlbHBRdWFsaWZpZXJcblx0XHR9O1xuXHRcdHJldHVybiB2YWx1ZWxpc3RJbmZvO1xuXHR9LFxuXG5cdF9sb2dFcnJvcjogZnVuY3Rpb24gKHByb3BlcnR5UGF0aDogc3RyaW5nLCBlcnJvcj86IHVua25vd24pOiB2b2lkIHtcblx0XHRjb25zdCBzdGF0dXMgPSBlcnJvciA/IChlcnJvciBhcyBYTUxIdHRwUmVxdWVzdCkuc3RhdHVzIDogdW5kZWZpbmVkO1xuXHRcdGNvbnN0IG1lc3NhZ2UgPSBlcnJvciBpbnN0YW5jZW9mIEVycm9yID8gZXJyb3IubWVzc2FnZSA6IFN0cmluZyhlcnJvcik7XG5cdFx0Y29uc3QgbXNnID0gc3RhdHVzID09PSA0MDQgPyBgTWV0YWRhdGEgbm90IGZvdW5kICgke3N0YXR1c30pIGZvciB2YWx1ZSBoZWxwIG9mIHByb3BlcnR5ICR7cHJvcGVydHlQYXRofWAgOiBtZXNzYWdlO1xuXG5cdFx0TG9nLmVycm9yKG1zZyk7XG5cdH0sXG5cdC8qKlxuXHQgKiBNZXRob2QgdG8gY29tcHV0ZSB0aGUgdmFsdWUgbGlzdCBpbmZvcyBiYXNlZCBvbiB0aGUgdmFsdWUgbGlzdCBhbm5vdGF0aW9ucyBiZWZvcmUgdXNpbmcgdGhlbSBhdCB0ZW1wbGF0aW5nLlxuXHQgKiBAcGFyYW0gdmFsdWVIZWxwXG5cdCAqIEBwYXJhbSBwcm9wZXJ0eVBhdGhcblx0ICogQHBhcmFtIHBheWxvYWRcblx0ICogQHBhcmFtIHZoTWV0YU1vZGVsXG5cdCAqIEByZXR1cm5zIFRoZSB2YWx1ZSBsaXN0IGluZm9zXG5cdCAqL1xuXHRnZXRWYWx1ZUxpc3RJbmZvOiBhc3luYyBmdW5jdGlvbiAoXG5cdFx0dmFsdWVIZWxwOiBWYWx1ZUhlbHAsXG5cdFx0cHJvcGVydHlQYXRoOiBzdHJpbmcsXG5cdFx0cGF5bG9hZDogVmFsdWVIZWxwUGF5bG9hZCxcblx0XHR2aE1ldGFNb2RlbDogT0RhdGFNZXRhTW9kZWxcblx0KTogUHJvbWlzZTxWYWx1ZUxpc3RJbmZvW10+IHtcblx0XHRjb25zdCBiaW5kaW5nQ29udGV4dCA9IHZhbHVlSGVscC5nZXRCaW5kaW5nQ29udGV4dCgpIGFzIENvbnRleHQgfCB1bmRlZmluZWQsXG5cdFx0XHRjb25kaXRpb25Nb2RlbCA9IHBheWxvYWQuY29uZGl0aW9uTW9kZWwsXG5cdFx0XHR2YWx1ZUxpc3RJbmZvczogVmFsdWVMaXN0SW5mb1tdID0gW10sXG5cdFx0XHRwcm9wZXJ0eVBhdGhQYXJ0cyA9IHByb3BlcnR5UGF0aC5zcGxpdChcIi9cIik7XG5cdFx0dHJ5IHtcblx0XHRcdGNvbnN0IHZhbHVlTGlzdEJ5UXVhbGlmaWVyID0gYXdhaXQgdmhNZXRhTW9kZWwucmVxdWVzdFZhbHVlTGlzdEluZm8ocHJvcGVydHlQYXRoLCB0cnVlLCBiaW5kaW5nQ29udGV4dCk7XG5cdFx0XHRjb25zdCB2YWx1ZUhlbHBRdWFsaWZpZXJzID0gVmFsdWVMaXN0SGVscGVyLnB1dERlZmF1bHRRdWFsaWZpZXJGaXJzdChPYmplY3Qua2V5cyh2YWx1ZUxpc3RCeVF1YWxpZmllcikpLFxuXHRcdFx0XHRwcm9wZXJ0eU5hbWUgPSBwcm9wZXJ0eVBhdGhQYXJ0cy5wb3AoKTtcblxuXHRcdFx0Y29uc3QgY29udGV4dFByZWZpeCA9IHBheWxvYWQudXNlTXVsdGlWYWx1ZUZpZWxkID8gVmFsdWVMaXN0SGVscGVyLl9nZXRDb250ZXh0UHJlZml4KGJpbmRpbmdDb250ZXh0LCBwcm9wZXJ0eVBhdGhQYXJ0cykgOiBcIlwiO1xuXG5cdFx0XHRmb3IgKGNvbnN0IHZhbHVlSGVscFF1YWxpZmllciBvZiB2YWx1ZUhlbHBRdWFsaWZpZXJzKSB7XG5cdFx0XHRcdC8vIEFkZCBjb2x1bW4gZGVmaW5pdGlvbnMgZm9yIHByb3BlcnRpZXMgZGVmaW5lZCBhcyBTZWxlY3Rpb24gZmllbGRzIG9uIHRoZSBDb2xsZWN0aW9uUGF0aCBlbnRpdHkgc2V0LlxuXHRcdFx0XHRjb25zdCBhbm5vdGF0aW9uVmFsdWVMaXN0VHlwZSA9IHZhbHVlTGlzdEJ5UXVhbGlmaWVyW3ZhbHVlSGVscFF1YWxpZmllcl07XG5cblx0XHRcdFx0Y29uc3QgdmFsdWVMaXN0SW5mbyA9IFZhbHVlTGlzdEhlbHBlci5fcHJvY2Vzc1BhcmFtZXRlcnMoXG5cdFx0XHRcdFx0YW5ub3RhdGlvblZhbHVlTGlzdFR5cGUsXG5cdFx0XHRcdFx0cHJvcGVydHlOYW1lLFxuXHRcdFx0XHRcdGNvbmRpdGlvbk1vZGVsLFxuXHRcdFx0XHRcdHZhbHVlSGVscCxcblx0XHRcdFx0XHRjb250ZXh0UHJlZml4LFxuXHRcdFx0XHRcdHZoTWV0YU1vZGVsLFxuXHRcdFx0XHRcdGFubm90YXRpb25WYWx1ZUxpc3RUeXBlLiRxdWFsaWZpZXIgPz8gdmFsdWVIZWxwUXVhbGlmaWVyLCAvLyBmb3IgVmFsdWVMaXN0V2l0aEZpeGVkVmFsdWVzLCBnZXQgdGhlIHF1YWxpZmllciBmcm9tICRxdWFsaWZpZXJcblx0XHRcdFx0XHRwYXlsb2FkXG5cdFx0XHRcdCk7XG5cdFx0XHRcdC8qIE9ubHkgY29uc2lzdGVudCB2YWx1ZSBoZWxwIGRlZmluaXRpb25zIHNoYWxsIGJlIHBhcnQgb2YgdGhlIHZhbHVlIGhlbHAgKi9cblx0XHRcdFx0aWYgKHZhbHVlTGlzdEluZm8pIHtcblx0XHRcdFx0XHR2YWx1ZUxpc3RJbmZvcy5wdXNoKHZhbHVlTGlzdEluZm8pO1xuXHRcdFx0XHR9XG5cdFx0XHR9XG5cdFx0fSBjYXRjaCAoZXJyKSB7XG5cdFx0XHR0aGlzLl9sb2dFcnJvcihwcm9wZXJ0eVBhdGgsIGVycik7XG5cblx0XHRcdFZhbHVlTGlzdEhlbHBlci5kZXN0cm95VkhDb250ZW50KHZhbHVlSGVscCk7XG5cdFx0fVxuXHRcdHJldHVybiB2YWx1ZUxpc3RJbmZvcztcblx0fSxcblxuXHRBTExGUkFHTUVOVFM6IFtdIGFzIHtcblx0XHRwYXRoOiBzdHJpbmc7XG5cdFx0ZnJhZ21lbnROYW1lOiBzdHJpbmc7XG5cdFx0ZnJhZ21lbnQ6IHVua25vd247XG5cdH1bXSxcblx0bG9nRnJhZ21lbnQ6IHVuZGVmaW5lZCBhcyBMb2dGcmFnbWVudE1ldGhvZCB8IHVuZGVmaW5lZCxcblxuXHRfbG9nVGVtcGxhdGVkRnJhZ21lbnRzOiBmdW5jdGlvbiAocHJvcGVydHlQYXRoOiBzdHJpbmcsIGZyYWdtZW50TmFtZTogc3RyaW5nLCBmcmFnbWVudERlZmluaXRpb246IHVua25vd24pOiB2b2lkIHtcblx0XHRjb25zdCBsb2dJbmZvID0ge1xuXHRcdFx0cGF0aDogcHJvcGVydHlQYXRoLFxuXHRcdFx0ZnJhZ21lbnROYW1lOiBmcmFnbWVudE5hbWUsXG5cdFx0XHRmcmFnbWVudDogZnJhZ21lbnREZWZpbml0aW9uXG5cdFx0fTtcblx0XHRpZiAoTG9nLmdldExldmVsKCkgPT09IExvZy5MZXZlbC5ERUJVRykge1xuXHRcdFx0Ly9JbiBkZWJ1ZyBtb2RlIHdlIGxvZyBhbGwgZ2VuZXJhdGVkIGZyYWdtZW50c1xuXHRcdFx0VmFsdWVMaXN0SGVscGVyLkFMTEZSQUdNRU5UUyA9IFZhbHVlTGlzdEhlbHBlci5BTExGUkFHTUVOVFMgfHwgW107XG5cdFx0XHRWYWx1ZUxpc3RIZWxwZXIuQUxMRlJBR01FTlRTLnB1c2gobG9nSW5mbyk7XG5cdFx0fVxuXHRcdGlmIChWYWx1ZUxpc3RIZWxwZXIubG9nRnJhZ21lbnQpIHtcblx0XHRcdC8vT25lIFRvb2wgU3Vic2NyaWJlciBhbGxvd2VkXG5cdFx0XHRzZXRUaW1lb3V0KGZ1bmN0aW9uICgpIHtcblx0XHRcdFx0VmFsdWVMaXN0SGVscGVyLmxvZ0ZyYWdtZW50Py4obG9nSW5mbyk7XG5cdFx0XHR9LCAwKTtcblx0XHR9XG5cdH0sXG5cblx0X3RlbXBsYXRlRnJhZ21lbnQ6IGFzeW5jIGZ1bmN0aW9uIDxUIGV4dGVuZHMgVGFibGUgfCBNZGNJbm5lclRhYmxlIHwgTWRjRmlsdGVyQmFyIHwgVmFsdWVIZWxwPihcblx0XHRmcmFnbWVudE5hbWU6IHN0cmluZyxcblx0XHR2YWx1ZUxpc3RJbmZvOiBWYWx1ZUxpc3RJbmZvLFxuXHRcdHNvdXJjZU1vZGVsOiBKU09OTW9kZWwsXG5cdFx0cHJvcGVydHlQYXRoOiBzdHJpbmcsXG5cdFx0dmFsdWVIZWxwOiBWYWx1ZUhlbHBcblx0KTogUHJvbWlzZTxUPiB7XG5cdFx0Y29uc3QgY29udGFpbmluZ1ZpZXcgPSBDb21tb25VdGlscy5nZXRUYXJnZXRWaWV3KHZhbHVlSGVscCk7XG5cdFx0Y29uc3QgYXBwQ29tcG9uZW50ID0gQ29tbW9uVXRpbHMuZ2V0QXBwQ29tcG9uZW50KENvbW1vblV0aWxzLmdldFRhcmdldFZpZXcodmFsdWVIZWxwKSk7XG5cblx0XHRjb25zdCBsb2NhbFZhbHVlTGlzdEluZm8gPSB2YWx1ZUxpc3RJbmZvLnZhbHVlTGlzdEluZm8sXG5cdFx0XHR2YWx1ZUxpc3RNb2RlbCA9IG5ldyBKU09OTW9kZWwobG9jYWxWYWx1ZUxpc3RJbmZvKSxcblx0XHRcdHZhbHVlTGlzdFNlcnZpY2VNZXRhTW9kZWwgPSBsb2NhbFZhbHVlTGlzdEluZm8uJG1vZGVsLmdldE1ldGFNb2RlbCgpLFxuXHRcdFx0dmlld0RhdGEgPSBuZXcgSlNPTk1vZGVsKHtcblx0XHRcdFx0Y29udmVydGVyVHlwZTogXCJMaXN0UmVwb3J0XCIsXG5cdFx0XHRcdGNvbHVtbnM6IHZhbHVlTGlzdEluZm8uY29sdW1uRGVmcyB8fCBudWxsXG5cdFx0XHR9KTtcblxuXHRcdGNvbnN0IGZyYWdtZW50RGVmaW5pdGlvbiA9IGF3YWl0IFhNTFByZXByb2Nlc3Nvci5wcm9jZXNzKFxuXHRcdFx0WE1MVGVtcGxhdGVQcm9jZXNzb3IubG9hZFRlbXBsYXRlKGZyYWdtZW50TmFtZSwgXCJmcmFnbWVudFwiKSxcblx0XHRcdHsgbmFtZTogZnJhZ21lbnROYW1lIH0sXG5cdFx0XHR7XG5cdFx0XHRcdGJpbmRpbmdDb250ZXh0czoge1xuXHRcdFx0XHRcdHZhbHVlTGlzdDogdmFsdWVMaXN0TW9kZWwuY3JlYXRlQmluZGluZ0NvbnRleHQoXCIvXCIpLFxuXHRcdFx0XHRcdGNvbnRleHRQYXRoOiB2YWx1ZUxpc3RTZXJ2aWNlTWV0YU1vZGVsLmNyZWF0ZUJpbmRpbmdDb250ZXh0KGAvJHtsb2NhbFZhbHVlTGlzdEluZm8uQ29sbGVjdGlvblBhdGh9L2ApLFxuXHRcdFx0XHRcdHNvdXJjZTogc291cmNlTW9kZWwuY3JlYXRlQmluZGluZ0NvbnRleHQoXCIvXCIpXG5cdFx0XHRcdH0sXG5cdFx0XHRcdG1vZGVsczoge1xuXHRcdFx0XHRcdHZhbHVlTGlzdDogdmFsdWVMaXN0TW9kZWwsXG5cdFx0XHRcdFx0Y29udGV4dFBhdGg6IHZhbHVlTGlzdFNlcnZpY2VNZXRhTW9kZWwsXG5cdFx0XHRcdFx0c291cmNlOiBzb3VyY2VNb2RlbCxcblx0XHRcdFx0XHRtZXRhTW9kZWw6IHZhbHVlTGlzdFNlcnZpY2VNZXRhTW9kZWwsXG5cdFx0XHRcdFx0dmlld0RhdGE6IHZpZXdEYXRhXG5cdFx0XHRcdH0sXG5cdFx0XHRcdGFwcENvbXBvbmVudFxuXHRcdFx0fVxuXHRcdCk7XG5cdFx0VmFsdWVMaXN0SGVscGVyLl9sb2dUZW1wbGF0ZWRGcmFnbWVudHMocHJvcGVydHlQYXRoLCBmcmFnbWVudE5hbWUsIGZyYWdtZW50RGVmaW5pdGlvbik7XG5cdFx0Y29uc3QgdGVtcGxhdGVDb21wb25lbnQgPSBjb250YWluaW5nVmlldy5nZXRDb250cm9sbGVyKCk/LmdldE93bmVyQ29tcG9uZW50KCk7XG5cdFx0aWYgKHRlbXBsYXRlQ29tcG9uZW50KSB7XG5cdFx0XHRyZXR1cm4gdGVtcGxhdGVDb21wb25lbnQucnVuQXNPd25lcihhc3luYyAoKSA9PiB7XG5cdFx0XHRcdHJldHVybiAoYXdhaXQgRnJhZ21lbnQubG9hZCh7XG5cdFx0XHRcdFx0ZGVmaW5pdGlvbjogZnJhZ21lbnREZWZpbml0aW9uLFxuXHRcdFx0XHRcdGNvbnRyb2xsZXI6IGNvbnRhaW5pbmdWaWV3LmdldENvbnRyb2xsZXIoKVxuXHRcdFx0XHR9KSkgYXMgVDtcblx0XHRcdH0pO1xuXHRcdH0gZWxzZSB7XG5cdFx0XHRyZXR1cm4gKGF3YWl0IEZyYWdtZW50LmxvYWQoe1xuXHRcdFx0XHRkZWZpbml0aW9uOiBmcmFnbWVudERlZmluaXRpb24sXG5cdFx0XHRcdGNvbnRyb2xsZXI6IGNvbnRhaW5pbmdWaWV3LmdldENvbnRyb2xsZXIoKVxuXHRcdFx0fSkpIGFzIFQ7XG5cdFx0fVxuXHR9LFxuXG5cdF9nZXRDb250ZW50SWQ6IGZ1bmN0aW9uICh2YWx1ZUhlbHBJZDogc3RyaW5nLCB2YWx1ZUhlbHBRdWFsaWZpZXI6IHN0cmluZywgaXNUeXBlYWhlYWQ6IGJvb2xlYW4pOiBzdHJpbmcge1xuXHRcdGNvbnN0IGNvbnRlbnRUeXBlID0gaXNUeXBlYWhlYWQgPyBcIlBvcG92ZXJcIiA6IFwiRGlhbG9nXCI7XG5cblx0XHRyZXR1cm4gYCR7dmFsdWVIZWxwSWR9Ojoke2NvbnRlbnRUeXBlfTo6cXVhbGlmaWVyOjoke3ZhbHVlSGVscFF1YWxpZmllcn1gO1xuXHR9LFxuXG5cdF9hZGRJbk91dFBhcmFtZXRlcnNUb1BheWxvYWQ6IGZ1bmN0aW9uIChwYXlsb2FkOiBWYWx1ZUhlbHBQYXlsb2FkLCB2YWx1ZUxpc3RJbmZvOiBWYWx1ZUxpc3RJbmZvKTogdm9pZCB7XG5cdFx0Y29uc3QgdmFsdWVIZWxwUXVhbGlmaWVyID0gdmFsdWVMaXN0SW5mby52YWx1ZUhlbHBRdWFsaWZpZXI7XG5cblx0XHRpZiAoIXBheWxvYWQucXVhbGlmaWVycykge1xuXHRcdFx0cGF5bG9hZC5xdWFsaWZpZXJzID0ge307XG5cdFx0fVxuXG5cdFx0aWYgKCFwYXlsb2FkLnF1YWxpZmllcnNbdmFsdWVIZWxwUXVhbGlmaWVyXSkge1xuXHRcdFx0Y29uc3QgdmhQcm9wZXJ0aWVzID0gbmV3IFNldDxzdHJpbmc+KCk7XG5cdFx0XHR2YWx1ZUxpc3RJbmZvLmNvbHVtbkRlZnMuZm9yRWFjaCgoY29sdW1uKSA9PiB7XG5cdFx0XHRcdGlmICghY29sdW1uLnBhdGguaW5jbHVkZXMoXCIqXCIpKSB7XG5cdFx0XHRcdFx0Ly8gSW4gY2FzZSBvZiAxLi5uIHRoZSBjb25kaXRpb24gcGF0aCBpbmNsdWRlcyBhICogc28gd2UgaGF2ZSB0byByZW1vdmUgdGhpc1xuXHRcdFx0XHRcdHZoUHJvcGVydGllcy5hZGQoY29sdW1uLnBhdGgpO1xuXHRcdFx0XHR9XG5cdFx0XHRcdGlmIChjb2x1bW4udGV4dFBhdGgpIHtcblx0XHRcdFx0XHR2aFByb3BlcnRpZXMuYWRkKGNvbHVtbi50ZXh0UGF0aCk7XG5cdFx0XHRcdH1cblx0XHRcdH0pO1xuXHRcdFx0cGF5bG9hZC5xdWFsaWZpZXJzW3ZhbHVlSGVscFF1YWxpZmllcl0gPSB7XG5cdFx0XHRcdHZoS2V5czogdmFsdWVMaXN0SW5mby52aEtleXMsXG5cdFx0XHRcdHZoUGFyYW1ldGVyczogdmFsdWVMaXN0SW5mby52aFBhcmFtZXRlcnMsXG5cdFx0XHRcdHZoUHJvcGVydGllczogQXJyYXkuZnJvbSh2aFByb3BlcnRpZXMpXG5cdFx0XHR9O1xuXHRcdH1cblx0fSxcblxuXHRfZ2V0VmFsdWVIZWxwQ29sdW1uRGlzcGxheUZvcm1hdDogZnVuY3Rpb24gKFxuXHRcdHByb3BlcnR5QW5ub3RhdGlvbnM6IEFubm90YXRpb25zRm9yUHJvcGVydHksXG5cdFx0aXNWYWx1ZUhlbHBXaXRoRml4ZWRWYWx1ZXM6IGJvb2xlYW5cblx0KTogRGlzcGxheUZvcm1hdCB7XG5cdFx0Y29uc3QgZGlzcGxheU1vZGUgPSBDb21tb25VdGlscy5jb21wdXRlRGlzcGxheU1vZGUocHJvcGVydHlBbm5vdGF0aW9ucywgdW5kZWZpbmVkKSxcblx0XHRcdHRleHRBbm5vdGF0aW9uID0gcHJvcGVydHlBbm5vdGF0aW9ucyAmJiBwcm9wZXJ0eUFubm90YXRpb25zW0Fubm90YXRpb25UZXh0XSxcblx0XHRcdHRleHRBcnJhbmdlbWVudEFubm90YXRpb24gPSB0ZXh0QW5ub3RhdGlvbiAmJiBwcm9wZXJ0eUFubm90YXRpb25zW0Fubm90YXRpb25UZXh0VUlUZXh0QXJyYW5nZW1lbnRdO1xuXG5cdFx0aWYgKGlzVmFsdWVIZWxwV2l0aEZpeGVkVmFsdWVzKSB7XG5cdFx0XHRyZXR1cm4gdGV4dEFubm90YXRpb24gJiYgdHlwZW9mIHRleHRBbm5vdGF0aW9uICE9PSBcInN0cmluZ1wiICYmIHRleHRBbm5vdGF0aW9uLiRQYXRoID8gZGlzcGxheU1vZGUgOiBcIlZhbHVlXCI7XG5cdFx0fSBlbHNlIHtcblx0XHRcdC8vIE9ubHkgZXhwbGljaXQgZGVmaW5lZCBUZXh0QXJyYW5nZW1lbnRzIGluIGEgVmFsdWUgSGVscCB3aXRoIERpYWxvZyBhcmUgY29uc2lkZXJlZFxuXHRcdFx0cmV0dXJuIHRleHRBcnJhbmdlbWVudEFubm90YXRpb24gPyBkaXNwbGF5TW9kZSA6IFwiVmFsdWVcIjtcblx0XHR9XG5cdH0sXG5cblx0X2dldFdpZHRoSW5SZW06IGZ1bmN0aW9uIChjb250cm9sOiBDb250cm9sLCBpc1VuaXRWYWx1ZUhlbHA6IGJvb2xlYW4pOiBudW1iZXIge1xuXHRcdGxldCB3aWR0aCA9IGNvbnRyb2wuJCgpLndpZHRoKCk7IC8vIEpRdWVyeVxuXHRcdGlmIChpc1VuaXRWYWx1ZUhlbHAgJiYgd2lkdGgpIHtcblx0XHRcdHdpZHRoID0gMC4zICogd2lkdGg7XG5cdFx0fVxuXHRcdGNvbnN0IGZsb2F0V2lkdGggPSB3aWR0aCA/IHBhcnNlRmxvYXQoU3RyaW5nKFJlbS5mcm9tUHgod2lkdGgpKSkgOiAwO1xuXG5cdFx0cmV0dXJuIGlzTmFOKGZsb2F0V2lkdGgpID8gMCA6IGZsb2F0V2lkdGg7XG5cdH0sXG5cblx0X2dldFRhYmxlV2lkdGg6IGZ1bmN0aW9uICh0YWJsZTogVGFibGUsIG1pbldpZHRoOiBudW1iZXIsIGlzTXVsdGlTZWxlY3Q6IGJvb2xlYW4pOiBzdHJpbmcge1xuXHRcdGxldCB3aWR0aDogc3RyaW5nO1xuXHRcdGNvbnN0IGNvbHVtbnMgPSB0YWJsZS5nZXRDb2x1bW5zKCksXG5cdFx0XHR2aXNpYmxlQ29sdW1ucyA9XG5cdFx0XHRcdChjb2x1bW5zICYmXG5cdFx0XHRcdFx0Y29sdW1ucy5maWx0ZXIoZnVuY3Rpb24gKGNvbHVtbikge1xuXHRcdFx0XHRcdFx0cmV0dXJuIGNvbHVtbiAmJiBjb2x1bW4uZ2V0VmlzaWJsZSAmJiBjb2x1bW4uZ2V0VmlzaWJsZSgpO1xuXHRcdFx0XHRcdH0pKSB8fFxuXHRcdFx0XHRbXSxcblx0XHRcdC8vIHdlIGFkZCAxZW0gZm9yIGV2ZXJ5IGNvbHVtbiBhbmQgMi41ZW0gZm9yIGEgbXVsdGlzZWxlY3QgY2hlY2tib3hcblx0XHRcdGluaXRpYWxTdW0gPSB2aXNpYmxlQ29sdW1ucy5sZW5ndGggKyAoaXNNdWx0aVNlbGVjdCA/IDIuNSA6IDApLFxuXHRcdFx0c3VtV2lkdGggPSB2aXNpYmxlQ29sdW1ucy5yZWR1Y2UoZnVuY3Rpb24gKHN1bSwgY29sdW1uKSB7XG5cdFx0XHRcdHdpZHRoID0gY29sdW1uLmdldFdpZHRoKCk7XG5cdFx0XHRcdGlmICh3aWR0aCAmJiB3aWR0aC5lbmRzV2l0aChcInB4XCIpKSB7XG5cdFx0XHRcdFx0d2lkdGggPSBTdHJpbmcoUmVtLmZyb21QeCh3aWR0aCkpO1xuXHRcdFx0XHR9XG5cdFx0XHRcdGNvbnN0IGZsb2F0V2lkdGggPSBwYXJzZUZsb2F0KHdpZHRoKTtcblxuXHRcdFx0XHRyZXR1cm4gc3VtICsgKGlzTmFOKGZsb2F0V2lkdGgpID8gOSA6IGZsb2F0V2lkdGgpO1xuXHRcdFx0fSwgaW5pdGlhbFN1bSk7XG5cdFx0cmV0dXJuIGAke01hdGgubWF4KHN1bVdpZHRoLCBtaW5XaWR0aCl9ZW1gO1xuXHR9LFxuXG5cdC8qKlxuXHQgKiBDb25zdHJ1Y3RzIEpTT04gTW9kZWwgd2l0aCB0aGUgcHJvcGVydGllcyBmb3IgdGhlIHZhbHVlIGhlbHAgZGlhbG9nIGZyYWdtZW50IHdoZXJlIGl0IGlzIHVzZWQgYXMgYSBzb3VyY2Ugb2JqZWN0LlxuXHQgKiBAcGFyYW0gdmFsdWVMaXN0SW5mbyBWYWx1ZSBsaXN0IGluZm9cblx0ICogQHBhcmFtIHByb3BlcnR5UGF0aCBUaGUgcHJvcGVydHkgcGF0aFxuXHQgKiBAcGFyYW0gY29udGVudCBDb250ZW50IGZvciB3aGljaCB0aGlzIGZyYWdtZW50IHdpbGwgYmUgc2V0XG5cdCAqIEBwYXJhbSBwYXlsb2FkIFZhbHVlIGhlbHAgcGF5bG9hZFxuXHQgKiBAcmV0dXJucyBKU09OTW9kZWxcblx0ICogQHByaXZhdGVcblx0ICovXG5cdF9nZXRKU09OTW9kZWxGb3JEaWFsb2c6IGZ1bmN0aW9uIChcblx0XHR2YWx1ZUxpc3RJbmZvOiBWYWx1ZUxpc3RJbmZvLFxuXHRcdHByb3BlcnR5UGF0aDogc3RyaW5nLFxuXHRcdGNvbnRlbnQ6IE1EQ1RhYmxlLFxuXHRcdHBheWxvYWQ6IFZhbHVlSGVscFBheWxvYWRcblx0KTogSlNPTk1vZGVsIHtcblx0XHRjb25zdCBpc0Ryb3BEb3duTGlzdGUgPSBmYWxzZSxcblx0XHRcdGlzRGlhbG9nVGFibGUgPSB0cnVlLFxuXHRcdFx0Y29sdW1uSW5mbyA9IFZhbHVlTGlzdEhlbHBlci5nZXRDb2x1bW5WaXNpYmlsaXR5SW5mbyh2YWx1ZUxpc3RJbmZvLnZhbHVlTGlzdEluZm8sIHByb3BlcnR5UGF0aCwgaXNEcm9wRG93bkxpc3RlLCBpc0RpYWxvZ1RhYmxlKTtcblxuXHRcdHJldHVybiBuZXcgSlNPTk1vZGVsKHtcblx0XHRcdGlkOiBjb250ZW50LmdldElkKCksXG5cdFx0XHRncm91cElkOiBwYXlsb2FkLnJlcXVlc3RHcm91cElkLFxuXHRcdFx0YlN1Z2dlc3Rpb246IGZhbHNlLFxuXHRcdFx0Y29sdW1uSW5mbzogY29sdW1uSW5mbyxcblx0XHRcdHZhbHVlSGVscFdpdGhGaXhlZFZhbHVlczogaXNEcm9wRG93bkxpc3RlXG5cdFx0fSk7XG5cdH0sXG5cblx0LyoqXG5cdCAqIENvbnN0cnVjdHMgSlNPTiBNb2RlbCB3aXRoIHRoZSBwcm9wZXJ0aWVzIGZvciB0aGUgZGVmaW5lIGNvbmRpdGlvbiB2YWx1ZSBoZWxwIGZyYWdtZW50IGluIHRoZSB2YWx1ZSBoZWxwIGRpYWxvZyB3aGVyZSBpdCBpcyB1c2VkIGFzIGEgc291cmNlIG9iamVjdC5cblx0ICogQHBhcmFtIHZhbHVlTGlzdEluZm8gVmFsdWUgbGlzdCBpbmZvXG5cdCAqIEBwYXJhbSBwcm9wZXJ0eVBhdGggVGhlIHByb3BlcnR5IHBhdGhcblx0ICogQHBhcmFtIGNvbnRlbnQgQ29udGVudCBmb3Igd2hpY2ggdGhpcyBmcmFnbWVudCB3aWxsIGJlIHNldFxuXHQgKiBAcGFyYW0gcGF5bG9hZCBWYWx1ZSBoZWxwIHBheWxvYWRcblx0ICogQHBhcmFtIGNhc2VTZW5zaXRpdmVcblx0ICogQHJldHVybnMgSlNPTk1vZGVsXG5cdCAqIEBwcml2YXRlXG5cdCAqL1xuXHRfZ2V0SlNPTk1vZGVsRm9yQ29uZGl0aW9uOiBmdW5jdGlvbiAoXG5cdFx0dmFsdWVMaXN0SW5mbzogVmFsdWVMaXN0SW5mbyxcblx0XHRwcm9wZXJ0eVBhdGg6IHN0cmluZyxcblx0XHRjb250ZW50OiBNRENUYWJsZSxcblx0XHRwYXlsb2FkOiBWYWx1ZUhlbHBQYXlsb2FkLFxuXHRcdGNhc2VTZW5zaXRpdmU6IGJvb2xlYW5cblx0KTogSlNPTk1vZGVsIHtcblx0XHRjb25zdCBpc0Ryb3BEb3duTGlzdGUgPSBmYWxzZSxcblx0XHRcdGlzRGlhbG9nVGFibGUgPSBmYWxzZSxcblx0XHRcdGNvbHVtbkluZm8gPSBWYWx1ZUxpc3RIZWxwZXIuZ2V0Q29sdW1uVmlzaWJpbGl0eUluZm8odmFsdWVMaXN0SW5mby52YWx1ZUxpc3RJbmZvLCBwcm9wZXJ0eVBhdGgsIGlzRHJvcERvd25MaXN0ZSwgaXNEaWFsb2dUYWJsZSk7XG5cblx0XHRyZXR1cm4gbmV3IEpTT05Nb2RlbCh7XG5cdFx0XHRpZDogY29udGVudC5nZXRJZCgpLFxuXHRcdFx0Z3JvdXBJZDogcGF5bG9hZC5yZXF1ZXN0R3JvdXBJZCB8fCB1bmRlZmluZWQsXG5cdFx0XHRiU3VnZ2VzdGlvbjogdHJ1ZSxcblx0XHRcdGNvbHVtbkluZm86IGNvbHVtbkluZm8sXG5cdFx0XHR2YWx1ZUhlbHBXaXRoRml4ZWRWYWx1ZXM6IGlzRHJvcERvd25MaXN0ZSxcblx0XHRcdGRlc2NyaXB0aW9uUGF0aDogdmFsdWVMaXN0SW5mby5kZXNjcmlwdGlvblBhdGgsXG5cdFx0XHRrZXlQYXRoOiB2YWx1ZUxpc3RJbmZvLmtleVBhdGgsXG5cdFx0XHRwcm9wZXJ0eVBhdGgsXG5cdFx0XHRjYXNlU2Vuc2l0aXZlXG5cdFx0fSk7XG5cdH0sXG5cblx0LyoqXG5cdCAqIENvbnN0cnVjdHMgSlNPTiBNb2RlbCB3aXRoIHRoZSBwcm9wZXJ0aWVzIGZvciB0aGUgdmFsdWUgaGVscCB0eXBlYWhlYWQgZnJhZ21lbnQgd2hlcmUgaXQgaXMgdXNlZCBhcyBhIHNvdXJjZSBvYmplY3QuXG5cdCAqIEBwYXJhbSB2YWx1ZUxpc3RJbmZvIFZhbHVlIGxpc3QgaW5mb1xuXHQgKiBAcGFyYW0gcHJvcGVydHlQYXRoIFRoZSBwcm9wZXJ0eSBwYXRoXG5cdCAqIEBwYXJhbSBjb250ZW50IENvbnRlbnQgZm9yIHdoaWNoIHRoaXMgZnJhZ21lbnQgd2lsbCBiZSBzZXRcblx0ICogQHBhcmFtIHBheWxvYWQgVmFsdWUgaGVscCBwYXlsb2FkXG5cdCAqIEBwYXJhbSB2YWx1ZUhlbHBXaXRoRml4ZWRWYWx1ZXMgU3BlY2lmeSBpcyBpdCBkcm9wZG93bmxpc3Qgb3Igbm90XG5cdCAqIEByZXR1cm5zIEpTT05Nb2RlbFxuXHQgKiBAcHJpdmF0ZVxuXHQgKi9cblx0X2dldEpTT05Nb2RlbEZvclR5cGVhaGVhZDogZnVuY3Rpb24gKFxuXHRcdHZhbHVlTGlzdEluZm86IFZhbHVlTGlzdEluZm8sXG5cdFx0cHJvcGVydHlQYXRoOiBzdHJpbmcsXG5cdFx0Y29udGVudDogTVRhYmxlLFxuXHRcdHBheWxvYWQ6IFZhbHVlSGVscFBheWxvYWQsXG5cdFx0dmFsdWVIZWxwV2l0aEZpeGVkVmFsdWVzOiBib29sZWFuXG5cdCk6IEpTT05Nb2RlbCB7XG5cdFx0Y29uc3QgaXNEaWFsb2dUYWJsZSA9IGZhbHNlLFxuXHRcdFx0Y29udGVudElkID0gY29udGVudC5nZXRJZCgpLFxuXHRcdFx0Y29sdW1uSW5mbyA9IFZhbHVlTGlzdEhlbHBlci5nZXRDb2x1bW5WaXNpYmlsaXR5SW5mbyhcblx0XHRcdFx0dmFsdWVMaXN0SW5mby52YWx1ZUxpc3RJbmZvLFxuXHRcdFx0XHRwcm9wZXJ0eVBhdGgsXG5cdFx0XHRcdHZhbHVlSGVscFdpdGhGaXhlZFZhbHVlcyxcblx0XHRcdFx0aXNEaWFsb2dUYWJsZVxuXHRcdFx0KTtcblxuXHRcdHJldHVybiBuZXcgSlNPTk1vZGVsKHtcblx0XHRcdGlkOiBjb250ZW50SWQsXG5cdFx0XHRncm91cElkOiBwYXlsb2FkLnJlcXVlc3RHcm91cElkIHx8IHVuZGVmaW5lZCxcblx0XHRcdGJTdWdnZXN0aW9uOiB0cnVlLFxuXHRcdFx0cHJvcGVydHlQYXRoOiBwcm9wZXJ0eVBhdGgsXG5cdFx0XHRjb2x1bW5JbmZvOiBjb2x1bW5JbmZvLFxuXHRcdFx0dmFsdWVIZWxwV2l0aEZpeGVkVmFsdWVzOiB2YWx1ZUhlbHBXaXRoRml4ZWRWYWx1ZXNcblx0XHR9KTtcblx0fSxcblxuXHRfY3JlYXRlVmFsdWVIZWxwVHlwZWFoZWFkOiBhc3luYyBmdW5jdGlvbiAoXG5cdFx0cHJvcGVydHlQYXRoOiBzdHJpbmcsXG5cdFx0dmFsdWVIZWxwOiBWYWx1ZUhlbHAsXG5cdFx0Y29udGVudDogTVRhYmxlLFxuXHRcdHZhbHVlTGlzdEluZm86IFZhbHVlTGlzdEluZm8sXG5cdFx0cGF5bG9hZDogVmFsdWVIZWxwUGF5bG9hZCxcblx0XHRtZXRhTW9kZWw6IE9EYXRhTWV0YU1vZGVsXG5cdCk6IFByb21pc2U8dm9pZD4ge1xuXHRcdGNvbnN0IHByb3BlcnR5QW5ub3RhdGlvbnMgPSBtZXRhTW9kZWwuZ2V0T2JqZWN0KGAke3Byb3BlcnR5UGF0aH1AYCkgYXMgQW5ub3RhdGlvbnNGb3JQcm9wZXJ0eSxcblx0XHRcdHZhbHVlSGVscFdpdGhGaXhlZFZhbHVlcyA9IHByb3BlcnR5QW5ub3RhdGlvbnNbQW5ub3RhdGlvblZhbHVlTGlzdFdpdGhGaXhlZFZhbHVlc10gPz8gZmFsc2UsXG5cdFx0XHRzb3VyY2VNb2RlbCA9IHRoaXMuX2dldEpTT05Nb2RlbEZvclR5cGVhaGVhZCh2YWx1ZUxpc3RJbmZvLCBwcm9wZXJ0eVBhdGgsIGNvbnRlbnQsIHBheWxvYWQsIHZhbHVlSGVscFdpdGhGaXhlZFZhbHVlcyk7XG5cblx0XHRjb250ZW50LnNldEtleVBhdGgodmFsdWVMaXN0SW5mby5rZXlQYXRoKTtcblx0XHRjb250ZW50LnNldERlc2NyaXB0aW9uUGF0aCh2YWx1ZUxpc3RJbmZvLmRlc2NyaXB0aW9uUGF0aCk7XG5cdFx0cGF5bG9hZC5pc1ZhbHVlTGlzdFdpdGhGaXhlZFZhbHVlcyA9IHZhbHVlSGVscFdpdGhGaXhlZFZhbHVlcztcblx0XHRwYXlsb2FkLmlzUG90ZW50aWFsbHlTZW5zaXRpdmUgPSBwYXlsb2FkLmlzUG90ZW50aWFsbHlTZW5zaXRpdmUgPz8gcHJvcGVydHlBbm5vdGF0aW9uc1tBbm5vdGF0aW9uc1BlcnNvbmFsRGF0YVBvdGVudGlhbGx5U2Vuc2l0aXZlXTtcblx0XHRwYXlsb2FkLmhpc3RvcnkgPSB7XG5cdFx0XHRlbmFibGVkOiB0aGlzLmNoZWNrSGlzdG9yeUVuYWJsZWQodmFsdWVIZWxwLCBwYXlsb2FkKVxuXHRcdH07XG5cblx0XHRjb25zdCBjb2xsZWN0aW9uQW5ub3RhdGlvbnMgPVxuXHRcdFx0dmFsdWVMaXN0SW5mby52YWx1ZUxpc3RJbmZvLiRtb2RlbC5nZXRNZXRhTW9kZWwoKS5nZXRPYmplY3QoYC8ke3ZhbHVlTGlzdEluZm8udmFsdWVMaXN0SW5mby5Db2xsZWN0aW9uUGF0aH1AYCkgfHwge307XG5cblx0XHRjb250ZW50LmRhdGEoXCJzZWFyY2hTdXBwb3J0ZWRcIiwgVmFsdWVMaXN0SGVscGVyLmVudGl0eUlzU2VhcmNoYWJsZShwcm9wZXJ0eUFubm90YXRpb25zLCBjb2xsZWN0aW9uQW5ub3RhdGlvbnMpID8gdHJ1ZSA6IGZhbHNlKTtcblxuXHRcdGNvbnN0IHRhYmxlID0gYXdhaXQgVmFsdWVMaXN0SGVscGVyLl90ZW1wbGF0ZUZyYWdtZW50PFRhYmxlPihcblx0XHRcdFwic2FwLmZlLm1hY3Jvcy5pbnRlcm5hbC52YWx1ZWhlbHAuVmFsdWVMaXN0VGFibGVcIixcblx0XHRcdHZhbHVlTGlzdEluZm8sXG5cdFx0XHRzb3VyY2VNb2RlbCxcblx0XHRcdHByb3BlcnR5UGF0aCxcblx0XHRcdHZhbHVlSGVscFxuXHRcdCk7XG5cblx0XHR0YWJsZS5zZXRNb2RlbCh2YWx1ZUxpc3RJbmZvLnZhbHVlTGlzdEluZm8uJG1vZGVsKTtcblxuXHRcdExvZy5pbmZvKGBWYWx1ZSBMaXN0LSBzdWdnZXN0IFRhYmxlIFhNTCBjb250ZW50IGNyZWF0ZWQgWyR7cHJvcGVydHlQYXRofV1gLCB0YWJsZS5nZXRNZXRhZGF0YSgpLmdldE5hbWUoKSwgXCJNREMgVGVtcGxhdGluZ1wiKTtcblxuXHRcdGNvbnRlbnQuc2V0VGFibGUodGFibGUpO1xuXG5cdFx0Y29uc3QgZmllbGQgPSB2YWx1ZUhlbHAuZ2V0Q29udHJvbCgpO1xuXG5cdFx0aWYgKFxuXHRcdFx0ZmllbGQgIT09IHVuZGVmaW5lZCAmJlxuXHRcdFx0KGZpZWxkLmlzQTxGaWx0ZXJGaWVsZD4oXCJzYXAudWkubWRjLkZpbHRlckZpZWxkXCIpIHx8XG5cdFx0XHQoZmllbGQuaXNBPEZpZWxkPihcInNhcC51aS5tZGMuRmllbGRcIikgJiYgIWZpZWxkLmdldFZhbHVlKCkpIHx8XG5cdFx0XHRcdGZpZWxkLmlzQTxNdWx0aVZhbHVlRmllbGQ+KFwic2FwLnVpLm1kYy5NdWx0aVZhbHVlRmllbGRcIikpXG5cdFx0KSB7XG5cdFx0XHQvL0NhbiB0aGUgZmlsdGVyZmllbGQgYmUgc29tZXRoaW5nIGVsc2UgdGhhdCB3ZSBuZWVkIHRoZSAuaXNBKCkgY2hlY2s/XG5cdFx0XHRjb25zdCB0YWJsZU1vZGUgPVxuXHRcdFx0XHR2YWx1ZUhlbHBXaXRoRml4ZWRWYWx1ZXMgJiYgKGZpZWxkIGFzIEZpZWxkQmFzZSkuZ2V0TWF4Q29uZGl0aW9ucygpICE9PSAxID8gXCJNdWx0aVNlbGVjdFwiIDogXCJTaW5nbGVTZWxlY3RNYXN0ZXJcIjtcblx0XHRcdHRhYmxlLnNldE1vZGUodGFibGVNb2RlKTtcblxuXHRcdFx0dGFibGUuYWRkRXZlbnREZWxlZ2F0ZSh7XG5cdFx0XHRcdG9uQWZ0ZXJSZW5kZXJpbmc6IGZ1bmN0aW9uICgpIHtcblx0XHRcdFx0XHRSZXNpemVIYW5kbGVyLnJlZ2lzdGVyKHRhYmxlLCBmdW5jdGlvbiAoKSB7XG5cdFx0XHRcdFx0XHRWYWx1ZUxpc3RIZWxwZXIuX3NldFRhYmxlV2lkdGgodGFibGUsIGZpZWxkLCB0YWJsZU1vZGUsIHBheWxvYWQuaXNVbml0VmFsdWVIZWxwKTtcblx0XHRcdFx0XHR9KTtcblx0XHRcdFx0fVxuXHRcdFx0fSk7XG5cdFx0XHR0aGlzLl9zZXRUYWJsZVdpZHRoKHRhYmxlLCBmaWVsZCwgdGFibGVNb2RlLCBwYXlsb2FkLmlzVW5pdFZhbHVlSGVscCk7XG5cdFx0fVxuXHR9LFxuXG5cdF9zZXRUYWJsZVdpZHRoKHRhYmxlOiBUYWJsZSwgZmllbGQ6IENvbnRyb2wsIHRhYmxlTW9kZTogc3RyaW5nLCBpc1VuaXRWYWx1ZUhlbHA/OiBib29sZWFuKTogdm9pZCB7XG5cdFx0Y29uc3QgcmVkdWNlV2lkdGhGb3JVbml0VmFsdWVIZWxwID0gQm9vbGVhbihpc1VuaXRWYWx1ZUhlbHApO1xuXHRcdGNvbnN0IHRhYmxlV2lkdGggPSBWYWx1ZUxpc3RIZWxwZXIuX2dldFRhYmxlV2lkdGgoXG5cdFx0XHR0YWJsZSxcblx0XHRcdFZhbHVlTGlzdEhlbHBlci5fZ2V0V2lkdGhJblJlbShmaWVsZCwgcmVkdWNlV2lkdGhGb3JVbml0VmFsdWVIZWxwKSxcblx0XHRcdHRhYmxlTW9kZSA9PT0gXCJNdWx0aVNlbGVjdFwiXG5cdFx0KTtcblxuXHRcdHRhYmxlLnNldFdpZHRoKHRhYmxlV2lkdGgpO1xuXHR9LFxuXG5cdC8qKlxuXHQgKiBDaGVjayBpZiB0aGUgaGlzdG9yeSBpcyBlbmFibGVkIGZvciBhIGNlcnRhaW4gZmllbGQuXG5cdCAqIEBwYXJhbSB2YWx1ZUhlbHAgVGhlIHZhbHVlIGhlbHAgaW5zdGFuY2Vcblx0ICogQHBhcmFtIHBheWxvYWQgVmFsdWUgaGVscCBwYXlsb2FkXG5cdCAqIEByZXR1cm5zIFRydWUgaWYgdGhlIGhpc3RvcnkgaXMgZW5hYmxlZCwgZmFsc2Ugb3RoZXJ3aXNlXG5cdCAqL1xuXHRjaGVja0hpc3RvcnlFbmFibGVkOiBmdW5jdGlvbiAodmFsdWVIZWxwOiBWYWx1ZUhlbHAsIHBheWxvYWQ6IFZhbHVlSGVscFBheWxvYWQpOiBib29sZWFuIHtcblx0XHRjb25zdCBhcHBDb21wb25lbnQgPSBDb21tb25VdGlscy5nZXRBcHBDb21wb25lbnQoQ29tbW9uVXRpbHMuZ2V0VGFyZ2V0Vmlldyh2YWx1ZUhlbHApKTtcblx0XHRjb25zdCBoaXN0b3J5U2V0dGluZ3MgPSBhcHBDb21wb25lbnQuZ2V0TWFuaWZlc3RFbnRyeShcInNhcC5mZVwiKT8uaGlzdG9yeVNldHRpbmdzO1xuXHRcdHJldHVybiBoaXN0b3J5U2V0dGluZ3M/LmZpZWxkcz8uW3BheWxvYWQucHJvcGVydHlQYXRoXT8uaGlzdG9yeUVuYWJsZWQgPz8gdHJ1ZTtcblx0fSxcblxuXHRfY3JlYXRlVmFsdWVIZWxwRGlhbG9nOiBhc3luYyBmdW5jdGlvbiAoXG5cdFx0bWV0YU1vZGVsOiBPRGF0YU1ldGFNb2RlbCxcblx0XHRwcm9wZXJ0eVBhdGg6IHN0cmluZyxcblx0XHR2YWx1ZUhlbHA6IFZhbHVlSGVscCxcblx0XHRjb250ZW50OiBNRENUYWJsZSxcblx0XHR2YWx1ZUxpc3RJbmZvOiBWYWx1ZUxpc3RJbmZvLFxuXHRcdHBheWxvYWQ6IFZhbHVlSGVscFBheWxvYWQsXG5cdFx0Y29uZGl0aW9uQ29udGVudD86IENvbmRpdGlvbnNcblx0KTogUHJvbWlzZTx2b2lkPiB7XG5cdFx0Y29uc3QgcHJvcGVydHlBbm5vdGF0aW9ucyA9ICh2YWx1ZUhlbHAuZ2V0TW9kZWwoKSBhcyBPRGF0YU1vZGVsKVxuXHRcdFx0XHQuZ2V0TWV0YU1vZGVsKCkhXG5cdFx0XHRcdC5nZXRPYmplY3QoYCR7cHJvcGVydHlQYXRofUBgKSBhcyBBbm5vdGF0aW9uc0ZvclByb3BlcnR5LFxuXHRcdFx0c291cmNlTW9kZWxEaWFsb2cgPSB0aGlzLl9nZXRKU09OTW9kZWxGb3JEaWFsb2codmFsdWVMaXN0SW5mbywgcHJvcGVydHlQYXRoLCBjb250ZW50LCBwYXlsb2FkKTtcblxuXHRcdGNvbnRlbnQuc2V0S2V5UGF0aCh2YWx1ZUxpc3RJbmZvLmtleVBhdGgpO1xuXHRcdGNvbnRlbnQuc2V0RGVzY3JpcHRpb25QYXRoKHZhbHVlTGlzdEluZm8uZGVzY3JpcHRpb25QYXRoKTtcblxuXHRcdGNvbnN0IGNvbGxlY3Rpb25Bbm5vdGF0aW9ucyA9XG5cdFx0XHR2YWx1ZUxpc3RJbmZvLnZhbHVlTGlzdEluZm8uJG1vZGVsLmdldE1ldGFNb2RlbCgpLmdldE9iamVjdChgLyR7dmFsdWVMaXN0SW5mby52YWx1ZUxpc3RJbmZvLkNvbGxlY3Rpb25QYXRofUBgKSB8fCB7fTtcblxuXHRcdGNvbnRlbnQuZGF0YShcInNlYXJjaFN1cHBvcnRlZFwiLCBWYWx1ZUxpc3RIZWxwZXIuZW50aXR5SXNTZWFyY2hhYmxlKHByb3BlcnR5QW5ub3RhdGlvbnMsIGNvbGxlY3Rpb25Bbm5vdGF0aW9ucykgPyB0cnVlIDogZmFsc2UpO1xuXHRcdHBheWxvYWQuaXNQb3RlbnRpYWxseVNlbnNpdGl2ZSA9IHBheWxvYWQuaXNQb3RlbnRpYWxseVNlbnNpdGl2ZSA/PyBwcm9wZXJ0eUFubm90YXRpb25zW0Fubm90YXRpb25zUGVyc29uYWxEYXRhUG90ZW50aWFsbHlTZW5zaXRpdmVdO1xuXG5cdFx0aWYgKGNvbmRpdGlvbkNvbnRlbnQpIHtcblx0XHRcdGNvbnN0IGZpcnN0VHlwZUFoZWFkQ29udGVudCA9IHZhbHVlSGVscC5nZXRUeXBlYWhlYWQoKS5nZXRDb250ZW50KClbMF0gYXMgTVRhYmxlLFxuXHRcdFx0XHRjYXNlU2Vuc2l0aXZlID0gZmlyc3RUeXBlQWhlYWRDb250ZW50LmdldENhc2VTZW5zaXRpdmUoKTtcblxuXHRcdFx0Y29uc3Qgc291cmNlTW9kZWxDb25kaXRpb24gPSB0aGlzLl9nZXRKU09OTW9kZWxGb3JDb25kaXRpb24odmFsdWVMaXN0SW5mbywgcHJvcGVydHlQYXRoLCBjb250ZW50LCBwYXlsb2FkLCBjYXNlU2Vuc2l0aXZlKTtcblxuXHRcdFx0Y29uc3QgY29uZGl0aW9uID0gYXdhaXQgVmFsdWVMaXN0SGVscGVyLl90ZW1wbGF0ZUZyYWdtZW50PFZhbHVlSGVscD4oXG5cdFx0XHRcdFwic2FwLmZlLm1hY3Jvcy5pbnRlcm5hbC52YWx1ZWhlbHAuVmFsdWVMaXN0Rm9yQ29uZGl0aW9uXCIsXG5cdFx0XHRcdHZhbHVlTGlzdEluZm8sXG5cdFx0XHRcdHNvdXJjZU1vZGVsQ29uZGl0aW9uLFxuXHRcdFx0XHRwcm9wZXJ0eVBhdGgsXG5cdFx0XHRcdHZhbHVlSGVscFxuXHRcdFx0KTtcblx0XHRcdC8qIEFzIHRoZSBjb25kaXRpb24gaXMgbm90IGFkZGVkIHRvIGFuIGFnZ3JlZ2F0aW9uLCBidXQganVzdCBhc3NvY2lhdGVkLCB3ZSBuZWVkIHRvIGV4cGxpY2l0bHkgc2V0IHRoZSBtb2RlbCAqL1xuXHRcdFx0Y29uZGl0aW9uLnNldE1vZGVsKG1ldGFNb2RlbCk7XG5cblx0XHRcdC8qIEFkZCBhcyBkZXBlbmRlbnQsIG90aGVyd2lzZSBpdCB3aWxsIG5vdCBiZSBwcm9wZXJseSBkZXN0cm95ZWQgZHVyaW5nIGxpZmVjeWNsZSBoYW5kbGluZyAqL1xuXHRcdFx0Y29uZGl0aW9uQ29udGVudC5hZGREZXBlbmRlbnQoY29uZGl0aW9uKTtcblx0XHRcdGNvbmRpdGlvbkNvbnRlbnQuc2V0VmFsdWVIZWxwKGNvbmRpdGlvbi5nZXRJZCgpKTtcblxuXHRcdFx0Y29uc3QgY29uZGl0aW9uVGFibGUgPSBjb25kaXRpb25cblx0XHRcdFx0LmdldFR5cGVhaGVhZCgpXG5cdFx0XHRcdC5nZXRDb250ZW50KClbMF0gLy8gdGhlcmUgaXMgb25seSBvbmUgdGFibGVcblx0XHRcdFx0LmdldFRhYmxlKCk7XG5cblx0XHRcdGNvbnN0IHRhYmxlV2lkdGggPSBWYWx1ZUxpc3RIZWxwZXIuX2dldFRhYmxlV2lkdGgoY29uZGl0aW9uVGFibGUsIDAsIGZhbHNlKTtcblx0XHRcdGNvbmRpdGlvblRhYmxlLnNldFdpZHRoKHRhYmxlV2lkdGgpO1xuXHRcdH1cblxuXHRcdGNvbnN0IHRhYmxlUHJvbWlzZSA9IFZhbHVlTGlzdEhlbHBlci5fdGVtcGxhdGVGcmFnbWVudDxNZGNJbm5lclRhYmxlPihcblx0XHRcdFwic2FwLmZlLm1hY3Jvcy5pbnRlcm5hbC52YWx1ZWhlbHAuVmFsdWVMaXN0RGlhbG9nVGFibGVcIixcblx0XHRcdHZhbHVlTGlzdEluZm8sXG5cdFx0XHRzb3VyY2VNb2RlbERpYWxvZyxcblx0XHRcdHByb3BlcnR5UGF0aCxcblx0XHRcdHZhbHVlSGVscFxuXHRcdCk7XG5cblx0XHRjb25zdCBmaWx0ZXJCYXJQcm9taXNlID0gVmFsdWVMaXN0SGVscGVyLl90ZW1wbGF0ZUZyYWdtZW50PEZpbHRlckJhcj4oXG5cdFx0XHRcInNhcC5mZS5tYWNyb3MuaW50ZXJuYWwudmFsdWVoZWxwLlZhbHVlTGlzdEZpbHRlckJhclwiLFxuXHRcdFx0dmFsdWVMaXN0SW5mbyxcblx0XHRcdHNvdXJjZU1vZGVsRGlhbG9nLFxuXHRcdFx0cHJvcGVydHlQYXRoLFxuXHRcdFx0dmFsdWVIZWxwXG5cdFx0KTtcblxuXHRcdGNvbnN0IFt0YWJsZSwgZmlsdGVyQmFyXSA9IGF3YWl0IFByb21pc2UuYWxsKFt0YWJsZVByb21pc2UsIGZpbHRlckJhclByb21pc2VdKTtcblxuXHRcdHRhYmxlLnNldE1vZGVsKHZhbHVlTGlzdEluZm8udmFsdWVMaXN0SW5mby4kbW9kZWwpO1xuXHRcdGZpbHRlckJhci5zZXRNb2RlbCh2YWx1ZUxpc3RJbmZvLnZhbHVlTGlzdEluZm8uJG1vZGVsKTtcblxuXHRcdGNvbnRlbnQuc2V0RmlsdGVyQmFyKGZpbHRlckJhcik7XG5cdFx0Y29udGVudC5zZXRUYWJsZSh0YWJsZSk7XG5cblx0XHR0YWJsZS5zZXRGaWx0ZXIoZmlsdGVyQmFyLmdldElkKCkpO1xuXHRcdHRhYmxlLmluaXRpYWxpemVkKCk7XG5cblx0XHR0YWJsZS5zZXRXaWR0aChcIjEwMCVcIik7XG5cblx0XHRWYWx1ZUxpc3RIZWxwZXIuc2V0Q29weVByb3ZpZGVyVmlzaWJpbGl0eSh0YWJsZSwgdmFsdWVIZWxwKTtcblxuXHRcdC8vVGhpcyBpcyBhIHRlbXBvcmFyeSB3b3JrYXJyb3VuZCAtIHByb3ZpZGVkIGJ5IE1EQyAoc2VlIEZJT1JJVEVDSFAxLTI0MDAyKVxuXHRcdGNvbnN0IG1kY1RhYmxlID0gdGFibGUgYXMgdW5rbm93biBhcyB7IF9zZXRTaG93UDEzbkJ1dHRvbjogRnVuY3Rpb24gfTtcblx0XHRtZGNUYWJsZS5fc2V0U2hvd1AxM25CdXR0b24oZmFsc2UpO1xuXHR9LFxuXG5cdC8qKlxuXHQgKiBTZXQgdGhlIHZpc2libGUgYXR0cmlidXRlIG9mIHRoZSBDb3B5UHJvdmlkZXIgYmFzZWQgb24gdGhlIE1heENvbmRpdGlvbiBvZiB0aGUgZmllbGQuXG5cdCAqIEluIGNhc2Ugb2YgYSBzaW5nbGUgc2VsZWN0aW9uLCB0aGUgY29weSBidXR0b24gaXMgaGlkZGVuLiBJbiBhbm90aGVyIGNhc2UsIGl0IGlzIHZpc2libGUuXG5cdCAqIEBwYXJhbSB0YWJsZSBUaGUgTURDIHRhYmxlIG9mIHRoZSBWYWx1ZSBIZWxwIGRpYWxvZ1xuXHQgKiBAcGFyYW0gdmFsdWVIZWxwIFRoZSBWYWx1ZSBIZWxwIG9iamVjdFxuXHQgKi9cblx0c2V0Q29weVByb3ZpZGVyVmlzaWJpbGl0eTogZnVuY3Rpb24gKHRhYmxlOiBNZGNJbm5lclRhYmxlLCB2YWx1ZUhlbHA6IFZhbHVlSGVscCk6IHZvaWQge1xuXHRcdGlmICh2YWx1ZUhlbHAuZ2V0Q29udHJvbCgpPy5pc0E8RmllbGRCYXNlPihcInNhcC51aS5tZGMuZmllbGQuRmllbGRCYXNlXCIpKSB7XG5cdFx0XHR0YWJsZS5nZXRDb3B5UHJvdmlkZXIoKT8uc2V0VmlzaWJsZSh0cnVlKTtcblx0XHR9XG5cdH0sXG5cblx0X2dldENvbnRlbnRCeUlkOiBmdW5jdGlvbiA8VCBleHRlbmRzIE1UYWJsZSB8IE1EQ1RhYmxlPihjb250ZW50TGlzdDogQ29udGVudFtdLCBjb250ZW50SWQ6IHN0cmluZyk6IFQgfCB1bmRlZmluZWQge1xuXHRcdHJldHVybiBjb250ZW50TGlzdC5maW5kKGZ1bmN0aW9uIChpdGVtKSB7XG5cdFx0XHRyZXR1cm4gaXRlbS5nZXRJZCgpID09PSBjb250ZW50SWQ7XG5cdFx0fSkgYXMgVCB8IHVuZGVmaW5lZDtcblx0fSxcblxuXHRfY3JlYXRlUG9wb3ZlckNvbnRlbnQ6IGZ1bmN0aW9uIChjb250ZW50SWQ6IHN0cmluZywgY2FzZVNlbnNpdGl2ZTogYm9vbGVhbiwgdXNlQXNWYWx1ZUhlbHA6IGJvb2xlYW4pOiBNVGFibGUge1xuXHRcdHJldHVybiBuZXcgTVRhYmxlKHtcblx0XHRcdGlkOiBjb250ZW50SWQsXG5cdFx0XHRncm91cDogXCJncm91cDFcIixcblx0XHRcdGNhc2VTZW5zaXRpdmU6IGNhc2VTZW5zaXRpdmUsXG5cdFx0XHR1c2VBc1ZhbHVlSGVscDogdXNlQXNWYWx1ZUhlbHBcblx0XHR9IGFzICRNVGFibGVTZXR0aW5ncyk7XG5cdH0sXG5cblx0X2NyZWF0ZURpYWxvZ0NvbnRlbnQ6IGZ1bmN0aW9uIChjb250ZW50SWQ6IHN0cmluZywgY2FzZVNlbnNpdGl2ZTogYm9vbGVhbiwgZm9yY2VCaW5kOiBib29sZWFuKTogTURDVGFibGUge1xuXHRcdHJldHVybiBuZXcgTURDVGFibGUoe1xuXHRcdFx0aWQ6IGNvbnRlbnRJZCxcblx0XHRcdGdyb3VwOiBcImdyb3VwMVwiLFxuXHRcdFx0Y2FzZVNlbnNpdGl2ZTogY2FzZVNlbnNpdGl2ZSxcblx0XHRcdGZvcmNlQmluZDogZm9yY2VCaW5kXG5cdFx0fSBhcyAkTURDVGFibGVTZXR0aW5ncyk7XG5cdH0sXG5cblx0X3Nob3dDb25kaXRpb25zQ29udGVudDogZnVuY3Rpb24gKGNvbnRlbnRMaXN0OiBDb250ZW50W10sIGNvbnRhaW5lcjogQ29udGFpbmVyKTogQ29uZGl0aW9ucyB8IHVuZGVmaW5lZCB7XG5cdFx0bGV0IGNvbmRpdGlvbnNDb250ZW50ID1cblx0XHRcdGNvbnRlbnRMaXN0Lmxlbmd0aCAmJiBjb250ZW50TGlzdFtjb250ZW50TGlzdC5sZW5ndGggLSAxXS5nZXRNZXRhZGF0YSgpLmdldE5hbWUoKSA9PT0gXCJzYXAudWkubWRjLnZhbHVlaGVscC5jb250ZW50LkNvbmRpdGlvbnNcIlxuXHRcdFx0XHQ/IChjb250ZW50TGlzdFtjb250ZW50TGlzdC5sZW5ndGggLSAxXSBhcyBDb25kaXRpb25zKVxuXHRcdFx0XHQ6IHVuZGVmaW5lZDtcblxuXHRcdGlmIChjb25kaXRpb25zQ29udGVudCkge1xuXHRcdFx0Y29uZGl0aW9uc0NvbnRlbnQuc2V0VmlzaWJsZSh0cnVlKTtcblx0XHR9IGVsc2Uge1xuXHRcdFx0Y29uZGl0aW9uc0NvbnRlbnQgPSBuZXcgQ29uZGl0aW9ucygpO1xuXHRcdFx0Y29udGFpbmVyLmFkZENvbnRlbnQoY29uZGl0aW9uc0NvbnRlbnQpO1xuXHRcdH1cblxuXHRcdHJldHVybiBjb25kaXRpb25zQ29udGVudDtcblx0fSxcblxuXHRfYWxpZ25PckNyZWF0ZUNvbnRlbnQ6IGZ1bmN0aW9uIChcblx0XHR2YWx1ZUxpc3RJbmZvOiBWYWx1ZUxpc3RJbmZvLFxuXHRcdGNvbnRlbnRJZDogc3RyaW5nLFxuXHRcdGNhc2VTZW5zaXRpdmU6IGJvb2xlYW4sXG5cdFx0c2hvd0NvbmRpdGlvblBhbmVsOiBib29sZWFuLFxuXHRcdGNvbnRhaW5lcjogQ29udGFpbmVyXG5cdCk6IE1EQ1RhYmxlIHtcblx0XHRjb25zdCBjb250ZW50TGlzdCA9IGNvbnRhaW5lci5nZXRDb250ZW50KCk7XG5cdFx0bGV0IGNvbnRlbnQgPSBWYWx1ZUxpc3RIZWxwZXIuX2dldENvbnRlbnRCeUlkPE1EQ1RhYmxlPihjb250ZW50TGlzdCwgY29udGVudElkKTtcblxuXHRcdGlmICghY29udGVudCkge1xuXHRcdFx0Y29uc3QgZm9yY2VCaW5kID0gdmFsdWVMaXN0SW5mby52YWx1ZUxpc3RJbmZvLkZldGNoVmFsdWVzID09PSAyID8gZmFsc2UgOiB0cnVlO1xuXG5cdFx0XHRjb250ZW50ID0gVmFsdWVMaXN0SGVscGVyLl9jcmVhdGVEaWFsb2dDb250ZW50KGNvbnRlbnRJZCwgY2FzZVNlbnNpdGl2ZSwgZm9yY2VCaW5kKTtcblxuXHRcdFx0aWYgKCFzaG93Q29uZGl0aW9uUGFuZWwpIHtcblx0XHRcdFx0Y29udGFpbmVyLmFkZENvbnRlbnQoY29udGVudCk7XG5cdFx0XHR9IGVsc2Uge1xuXHRcdFx0XHRjb250YWluZXIuaW5zZXJ0Q29udGVudChjb250ZW50LCBjb250ZW50TGlzdC5sZW5ndGggLSAxKTsgLy8gaW5zZXJ0IGNvbnRlbnQgYmVmb3JlIGNvbmRpdGlvbnMgY29udGVudFxuXHRcdFx0fVxuXHRcdH1cblxuXHRcdHJldHVybiBjb250ZW50O1xuXHR9LFxuXG5cdF9wcmVwYXJlVmFsdWVIZWxwVHlwZUFoZWFkOiBmdW5jdGlvbiAoXG5cdFx0dmFsdWVIZWxwOiBWYWx1ZUhlbHAsXG5cdFx0Y29udGFpbmVyOiBDb250YWluZXIsXG5cdFx0dmFsdWVMaXN0SW5mb3M6IFZhbHVlTGlzdEluZm9bXSxcblx0XHRwYXlsb2FkOiBWYWx1ZUhlbHBQYXlsb2FkLFxuXHRcdGNhc2VTZW5zaXRpdmU6IGJvb2xlYW4sXG5cdFx0Zmlyc3RUeXBlQWhlYWRDb250ZW50OiBNVGFibGVcblx0KTogeyB2YWx1ZUxpc3RJbmZvOiBWYWx1ZUxpc3RJbmZvOyBjb250ZW50OiBNVGFibGUgfSB7XG5cdFx0Y29uc3QgY29udGVudExpc3QgPSBjb250YWluZXIuZ2V0Q29udGVudCgpO1xuXHRcdGxldCBxdWFsaWZpZXJGb3JUeXBlYWhlYWQgPSB2YWx1ZUhlbHAuZGF0YShcInZhbHVlbGlzdEZvclZhbGlkYXRpb25cIikgfHwgXCJcIjsgLy8gY2FuIGFsc28gYmUgbnVsbFxuXHRcdGlmIChxdWFsaWZpZXJGb3JUeXBlYWhlYWQgPT09IFwiIFwiKSB7XG5cdFx0XHRxdWFsaWZpZXJGb3JUeXBlYWhlYWQgPSBcIlwiO1xuXHRcdH1cblx0XHRjb25zdCB2YWx1ZUxpc3RJbmZvID0gcXVhbGlmaWVyRm9yVHlwZWFoZWFkIC8vIGZhbGxiYWNrIGlmIHF1YWxpZmllciBmb3IgVHlwZWFoZWFkIG5vdCBleGlzdHNcblx0XHRcdD8gdmFsdWVMaXN0SW5mb3MuZmlsdGVyKGZ1bmN0aW9uIChzdWJWYWx1ZUxpc3RJbmZvKSB7XG5cdFx0XHRcdFx0cmV0dXJuIHN1YlZhbHVlTGlzdEluZm8udmFsdWVIZWxwUXVhbGlmaWVyID09PSBxdWFsaWZpZXJGb3JUeXBlYWhlYWQ7XG5cdFx0XHQgIH0pWzBdIHx8IHZhbHVlTGlzdEluZm9zWzBdXG5cdFx0XHQ6IHZhbHVlTGlzdEluZm9zWzBdO1xuXG5cdFx0VmFsdWVMaXN0SGVscGVyLl9hZGRJbk91dFBhcmFtZXRlcnNUb1BheWxvYWQocGF5bG9hZCwgdmFsdWVMaXN0SW5mbyk7XG5cblx0XHRjb25zdCBjb250ZW50SWQgPSBWYWx1ZUxpc3RIZWxwZXIuX2dldENvbnRlbnRJZCh2YWx1ZUhlbHAuZ2V0SWQoKSwgdmFsdWVMaXN0SW5mby52YWx1ZUhlbHBRdWFsaWZpZXIsIHRydWUpO1xuXHRcdGxldCBjb250ZW50ID0gVmFsdWVMaXN0SGVscGVyLl9nZXRDb250ZW50QnlJZDxNVGFibGU+KGNvbnRlbnRMaXN0LCBjb250ZW50SWQpO1xuXG5cdFx0aWYgKCFjb250ZW50KSB7XG5cdFx0XHRjb25zdCB1c2VBc1ZhbHVlSGVscCA9IGZpcnN0VHlwZUFoZWFkQ29udGVudC5nZXRVc2VBc1ZhbHVlSGVscCgpO1xuXHRcdFx0Y29udGVudCA9IFZhbHVlTGlzdEhlbHBlci5fY3JlYXRlUG9wb3ZlckNvbnRlbnQoY29udGVudElkLCBjYXNlU2Vuc2l0aXZlLCB1c2VBc1ZhbHVlSGVscCk7XG5cblx0XHRcdGNvbnRhaW5lci5pbnNlcnRDb250ZW50KGNvbnRlbnQsIDApOyAvLyBpbnNlcnQgY29udGVudCBhcyBmaXJzdCBjb250ZW50XG5cdFx0fSBlbHNlIGlmIChjb250ZW50SWQgIT09IGNvbnRlbnRMaXN0WzBdLmdldElkKCkpIHtcblx0XHRcdC8vIGNvbnRlbnQgYWxyZWFkeSBhdmFpbGFibGUgYnV0IG5vdCBhcyBmaXJzdCBjb250ZW50P1xuXHRcdFx0Y29udGFpbmVyLnJlbW92ZUNvbnRlbnQoY29udGVudCk7XG5cdFx0XHRjb250YWluZXIuaW5zZXJ0Q29udGVudChjb250ZW50LCAwKTsgLy8gbW92ZSBjb250ZW50IHRvIGZpcnN0IHBvc2l0aW9uXG5cdFx0fVxuXG5cdFx0cmV0dXJuIHsgdmFsdWVMaXN0SW5mbywgY29udGVudCB9O1xuXHR9LFxuXG5cdF9wcmVwYXJlVmFsdWVIZWxwRGlhbG9nOiBmdW5jdGlvbiAoXG5cdFx0dmFsdWVIZWxwOiBWYWx1ZUhlbHAsXG5cdFx0Y29udGFpbmVyOiBDb250YWluZXIsXG5cdFx0dmFsdWVMaXN0SW5mb3M6IFZhbHVlTGlzdEluZm9bXSxcblx0XHRwYXlsb2FkOiBWYWx1ZUhlbHBQYXlsb2FkLFxuXHRcdHNlbGVjdGVkQ29udGVudElkOiBzdHJpbmcsXG5cdFx0Y2FzZVNlbnNpdGl2ZTogYm9vbGVhblxuXHQpOiB7XG5cdFx0c2VsZWN0ZWRJbmZvOiBWYWx1ZUxpc3RJbmZvO1xuXHRcdHNlbGVjdGVkQ29udGVudDogTURDVGFibGU7XG5cdFx0Y29uZGl0aW9uQ29udGVudD86IENvbmRpdGlvbnM7XG5cdH0ge1xuXHRcdGNvbnN0IHNob3dDb25kaXRpb25QYW5lbCA9IHZhbHVlSGVscC5kYXRhKFwic2hvd0NvbmRpdGlvblBhbmVsXCIpICYmIHZhbHVlSGVscC5kYXRhKFwic2hvd0NvbmRpdGlvblBhbmVsXCIpICE9PSBcImZhbHNlXCI7XG5cdFx0Y29uc3QgY29udGVudExpc3QgPSBjb250YWluZXIuZ2V0Q29udGVudCgpO1xuXG5cdFx0Ly8gc2V0IGFsbCBjb250ZW50cyB0byBpbnZpc2libGVcblx0XHRmb3IgKGNvbnN0IGNvbnRlbnRMaXN0SXRlbSBvZiBjb250ZW50TGlzdCkge1xuXHRcdFx0Y29udGVudExpc3RJdGVtLnNldFZpc2libGUoZmFsc2UpO1xuXHRcdH1cblxuXHRcdGNvbnN0IGNvbmRpdGlvbkNvbnRlbnQgPSBzaG93Q29uZGl0aW9uUGFuZWwgPyB0aGlzLl9zaG93Q29uZGl0aW9uc0NvbnRlbnQoY29udGVudExpc3QsIGNvbnRhaW5lcikgOiB1bmRlZmluZWQ7XG5cdFx0Y29uc3QgZmllbGQgPSB2YWx1ZUhlbHAuZ2V0Q29udHJvbCgpO1xuXG5cdFx0Ly8gRm9yIGEgRmlsdGVyRmllbGQgd2UgY2hlY2sgdGhlIG9wZXJhdG9ycyBpZiB0aGV5IGFyZSBkZWZhdWx0IChlbXB0eSBsaXN0PWFsbCkgb3IgaW5jbHVkZSBFUVxuXHRcdGNvbnN0IGhhc09wZXJhdG9yRVEgPVxuXHRcdFx0ZmllbGQgJiYgZmllbGQuaXNBPEZpbHRlckZpZWxkPihcInNhcC51aS5tZGMuRmlsdGVyRmllbGRcIilcblx0XHRcdFx0PyBmaWVsZC5nZXRPcGVyYXRvcnMoKS5sZW5ndGggPT09IDAgfHwgZmllbGQuZ2V0T3BlcmF0b3JzKCkuaW5jbHVkZXMoXCJFUVwiKVxuXHRcdFx0XHQ6IHRydWU7XG5cblx0XHRsZXQgc2VsZWN0ZWRJbmZvOiBWYWx1ZUxpc3RJbmZvIHwgdW5kZWZpbmVkLCBzZWxlY3RlZENvbnRlbnQ6IE1EQ1RhYmxlIHwgdW5kZWZpbmVkO1xuXG5cdFx0Ly8gQ3JlYXRlIG9yIHJldXNlIGNvbnRlbnRzIGZvciB0aGUgY3VycmVudCBjb250ZXh0XG5cdFx0Zm9yIChjb25zdCB2YWx1ZUxpc3RJbmZvIG9mIHZhbHVlTGlzdEluZm9zKSB7XG5cdFx0XHRjb25zdCB2YWx1ZUhlbHBRdWFsaWZpZXIgPSB2YWx1ZUxpc3RJbmZvLnZhbHVlSGVscFF1YWxpZmllcjtcblxuXHRcdFx0VmFsdWVMaXN0SGVscGVyLl9hZGRJbk91dFBhcmFtZXRlcnNUb1BheWxvYWQocGF5bG9hZCwgdmFsdWVMaXN0SW5mbyk7XG5cblx0XHRcdGNvbnN0IGNvbnRlbnRJZCA9IFZhbHVlTGlzdEhlbHBlci5fZ2V0Q29udGVudElkKHZhbHVlSGVscC5nZXRJZCgpLCB2YWx1ZUhlbHBRdWFsaWZpZXIsIGZhbHNlKTtcblxuXHRcdFx0Y29uc3QgY29udGVudCA9IHRoaXMuX2FsaWduT3JDcmVhdGVDb250ZW50KHZhbHVlTGlzdEluZm8sIGNvbnRlbnRJZCwgY2FzZVNlbnNpdGl2ZSwgc2hvd0NvbmRpdGlvblBhbmVsLCBjb250YWluZXIpO1xuXHRcdFx0Y29udGVudC5zZXRWaXNpYmxlKGhhc09wZXJhdG9yRVEpOyAvLyBEbyBub3Qgc2hvdyBhIHZhbHVlIGhlbHAgdGFibGUgZm9yIGEgZmlsdGVyIGZpZWxkIHdpdGhvdXQgb3BlcmF0b3IgJ0VRJ1xuXG5cdFx0XHRpZiAodmFsdWVMaXN0SW5mby52YWx1ZUxpc3RJbmZvLkxhYmVsICYmIGZpZWxkKSB7XG5cdFx0XHRcdGNvbnN0IHRpdGxlID0gQ29tbW9uVXRpbHMuZ2V0VHJhbnNsYXRlZFRleHRGcm9tRXhwQmluZGluZ1N0cmluZyh2YWx1ZUxpc3RJbmZvLnZhbHVlTGlzdEluZm8uTGFiZWwsIGZpZWxkKTtcblx0XHRcdFx0Y29udGVudC5zZXRUaXRsZSh0aXRsZSk7XG5cdFx0XHR9XG5cblx0XHRcdGlmICghc2VsZWN0ZWRDb250ZW50IHx8IChzZWxlY3RlZENvbnRlbnRJZCAmJiBzZWxlY3RlZENvbnRlbnRJZCA9PT0gY29udGVudElkKSkge1xuXHRcdFx0XHRzZWxlY3RlZENvbnRlbnQgPSBjb250ZW50O1xuXHRcdFx0XHRzZWxlY3RlZEluZm8gPSB2YWx1ZUxpc3RJbmZvO1xuXHRcdFx0fVxuXHRcdH1cblxuXHRcdGlmICghc2VsZWN0ZWRJbmZvIHx8ICFzZWxlY3RlZENvbnRlbnQpIHtcblx0XHRcdHRocm93IG5ldyBFcnJvcihcInNlbGVjdGVkSW5mbyBvciBzZWxlY3RlZENvbnRlbnQgdW5kZWZpbmVkXCIpO1xuXHRcdH1cblxuXHRcdHJldHVybiB7IHNlbGVjdGVkSW5mbywgc2VsZWN0ZWRDb250ZW50LCBjb25kaXRpb25Db250ZW50IH07XG5cdH0sXG5cblx0X2FkZERlc2NyaXB0aW9uSW5mb3NUb1BheWxvYWQ6IGZ1bmN0aW9uIChwYXlsb2FkOiBWYWx1ZUhlbHBQYXlsb2FkLCB2YWx1ZUxpc3RJbmZvOiBWYWx1ZUxpc3RJbmZvLCBtZXRhTW9kZWw6IE9EYXRhTWV0YU1vZGVsKTogdm9pZCB7XG5cdFx0aWYgKHBheWxvYWQudmFsdWVIZWxwRGVzY3JpcHRpb25QYXRoICE9PSB2YWx1ZUxpc3RJbmZvLmRlc2NyaXB0aW9uUGF0aCB8fCBwYXlsb2FkLmV4dGVybmFsSWRQYXRoKSB7XG5cdFx0XHRjb25zdCBjb252ZXJ0ZWRNZXRhZGF0YSA9IGNvbnZlcnRUeXBlcyhtZXRhTW9kZWwpO1xuXHRcdFx0Y29uc3QgcHJvcGVydHlEZXNjcmlwdGlvblBhdGggPSAoXG5cdFx0XHRcdGNvbnZlcnRlZE1ldGFkYXRhLnJlc29sdmVQYXRoPFByb3BlcnR5PihwYXlsb2FkLnByb3BlcnR5UGF0aCkudGFyZ2V0Py5hbm5vdGF0aW9ucz8uQ29tbW9uXG5cdFx0XHRcdFx0Py5UZXh0IGFzIHVua25vd24gYXMgUGF0aEFubm90YXRpb25FeHByZXNzaW9uPHN0cmluZz5cblx0XHRcdCk/LnBhdGg7XG5cblx0XHRcdC8qIEVucmljaCBwYXlsb2FkIHdpdGggVGV4dCBQcm9wZXJ0eSBJbmZvcyAqL1xuXHRcdFx0cGF5bG9hZC52YWx1ZUhlbHBEZXNjcmlwdGlvblBhdGggPSB2YWx1ZUxpc3RJbmZvLmRlc2NyaXB0aW9uUGF0aDtcblx0XHRcdHBheWxvYWQudmFsdWVIZWxwS2V5UGF0aCA9IHZhbHVlTGlzdEluZm8ua2V5UGF0aDtcblx0XHRcdGlmIChwcm9wZXJ0eURlc2NyaXB0aW9uUGF0aCkge1xuXHRcdFx0XHRwYXlsb2FkLm1heExlbmd0aCA9IHBheWxvYWQudmFsdWVIZWxwRGVzY3JpcHRpb25QYXRoXG5cdFx0XHRcdFx0PyBjb252ZXJ0ZWRNZXRhZGF0YS5yZXNvbHZlUGF0aDxQcm9wZXJ0eT4oXG5cdFx0XHRcdFx0XHRcdGAvJHt2YWx1ZUxpc3RJbmZvLnZhbHVlTGlzdEluZm8uQ29sbGVjdGlvblBhdGh9LyR7cGF5bG9hZC52YWx1ZUhlbHBEZXNjcmlwdGlvblBhdGh9YFxuXHRcdFx0XHRcdCAgKT8udGFyZ2V0Py5tYXhMZW5ndGhcblx0XHRcdFx0XHQ6IHVuZGVmaW5lZDtcblx0XHRcdFx0cGF5bG9hZC5wcm9wZXJ0eURlc2NyaXB0aW9uUGF0aCA9IHByb3BlcnR5RGVzY3JpcHRpb25QYXRoO1xuXHRcdFx0fVxuXG5cdFx0XHQvKiBFWFRFUk5BTElEICovXG5cdFx0XHQvLyBBZGQgZGVzY3JpcHRpb25QYXRoIHRvIHRoZSBwYXlsb2FkIGFuZCB2YWx1ZUxpc3RJbmZvXG5cdFx0XHRjb25zdCBleHRlcm5hbElkUGF0aCA9IHBheWxvYWQuZXh0ZXJuYWxJZFBhdGg7XG5cdFx0XHRpZiAoZXh0ZXJuYWxJZFBhdGggJiYgIXBheWxvYWQudmFsdWVIZWxwRGVzY3JpcHRpb25QYXRoKSB7XG5cdFx0XHRcdGNvbnN0IHByb3BlcnR5TmFtZSA9IG1ldGFNb2RlbC5nZXRPYmplY3QoYCR7cGF5bG9hZC5wcm9wZXJ0eVBhdGh9QHNhcHVpLm5hbWVgKTtcblx0XHRcdFx0Y29uc3QgZXh0ZXJuYWxJZEZ1bGxQYXRoID0gcGF5bG9hZC5wcm9wZXJ0eVBhdGgucmVwbGFjZShwcm9wZXJ0eU5hbWUsIGV4dGVybmFsSWRQYXRoKTtcblx0XHRcdFx0Y29uc3QgZGVzY3JpcHRpb25QYXRoID0gKFxuXHRcdFx0XHRcdGNvbnZlcnRlZE1ldGFkYXRhLnJlc29sdmVQYXRoPFByb3BlcnR5PihleHRlcm5hbElkRnVsbFBhdGgpLnRhcmdldD8uYW5ub3RhdGlvbnM/LkNvbW1vblxuXHRcdFx0XHRcdFx0Py5UZXh0IGFzIHVua25vd24gYXMgUGF0aEFubm90YXRpb25FeHByZXNzaW9uPHN0cmluZz5cblx0XHRcdFx0KT8ucGF0aDtcblx0XHRcdFx0dmFsdWVMaXN0SW5mby5kZXNjcmlwdGlvblBhdGggPSBkZXNjcmlwdGlvblBhdGg7XG5cdFx0XHRcdHBheWxvYWQudmFsdWVIZWxwRGVzY3JpcHRpb25QYXRoID0gZGVzY3JpcHRpb25QYXRoO1xuXHRcdFx0fVxuXHRcdH1cblx0fSxcblxuXHRzaG93VmFsdWVMaXN0OiBhc3luYyBmdW5jdGlvbiAocGF5bG9hZDogVmFsdWVIZWxwUGF5bG9hZCwgY29udGFpbmVyOiBDb250YWluZXIsIHNlbGVjdGVkQ29udGVudElkOiBzdHJpbmcpOiBQcm9taXNlPHZvaWQ+IHtcblx0XHRjb25zdCB2YWx1ZUhlbHAgPSBjb250YWluZXIuZ2V0UGFyZW50KCkgYXMgVmFsdWVIZWxwLFxuXHRcdFx0aXNUeXBlYWhlYWQgPSBjb250YWluZXIuaXNUeXBlYWhlYWQoKSxcblx0XHRcdHByb3BlcnR5UGF0aCA9IHBheWxvYWQucHJvcGVydHlQYXRoLFxuXHRcdFx0LyogSW4gY2FzZSBvZiBSQVAgdGhlIHZhbHVlSGVscCBtb2RlbCBpcyBkaWZmZXJlbnQgdG8gdGhlIGNvbnRyb2wgbW9kZWwgKi9cblx0XHRcdGNvbnRyb2wgPSB2YWx1ZUhlbHAuZ2V0Q29udHJvbCgpLFxuXHRcdFx0bWV0YU1vZGVsID0gY29udHJvbFxuXHRcdFx0XHQ/ICh2YWx1ZUhlbHAuZ2V0Q29udHJvbCgpPy5nZXRNb2RlbCgpIGFzIE9EYXRhTW9kZWwpLmdldE1ldGFNb2RlbCgpXG5cdFx0XHRcdDogKHZhbHVlSGVscC5nZXRNb2RlbCgpIGFzIE9EYXRhTW9kZWwpLmdldE1ldGFNb2RlbCgpLFxuXHRcdFx0dmhVSU1vZGVsID1cblx0XHRcdFx0dmFsdWVIZWxwLmdldE1vZGVsKFwiX1ZIVUlcIikgIT09IHVuZGVmaW5lZFxuXHRcdFx0XHRcdD8gKHZhbHVlSGVscC5nZXRNb2RlbChcIl9WSFVJXCIpIGFzIEpTT05Nb2RlbClcblx0XHRcdFx0XHQ6IFZhbHVlTGlzdEhlbHBlci5jcmVhdGVWSFVJTW9kZWwodmFsdWVIZWxwLCBwcm9wZXJ0eVBhdGgsIG1ldGFNb2RlbCk7XG5cdFx0LyogRVhURVJOQUxJRCAqL1xuXHRcdHBheWxvYWQuZXh0ZXJuYWxJZFBhdGggPSBtZXRhTW9kZWw/LmdldE9iamVjdChgJHtwYXlsb2FkLnByb3BlcnR5UGF0aH1AY29tLnNhcC52b2NhYnVsYXJpZXMuQ29tbW9uLnYxLkV4dGVybmFsSURgKT8uJFBhdGg7XG5cblx0XHR2aFVJTW9kZWwuc2V0UHJvcGVydHkoXCIvaXNTdWdnZXN0aW9uXCIsIGlzVHlwZWFoZWFkKTtcblx0XHR2aFVJTW9kZWwuc2V0UHJvcGVydHkoXCIvbWluU2NyZWVuV2lkdGhcIiwgIWlzVHlwZWFoZWFkID8gXCI0MThweFwiIDogdW5kZWZpbmVkKTtcblxuXHRcdHRyeSB7XG5cdFx0XHRjb25zdCB2YWx1ZUxpc3RJbmZvcyA9IGF3YWl0IFZhbHVlTGlzdEhlbHBlci5nZXRWYWx1ZUxpc3RJbmZvKHZhbHVlSGVscCwgcHJvcGVydHlQYXRoLCBwYXlsb2FkLCBtZXRhTW9kZWwpO1xuXHRcdFx0Y29uc3QgZmlyc3RUeXBlQWhlYWRDb250ZW50ID0gdmFsdWVIZWxwLmdldFR5cGVhaGVhZCgpLmdldENvbnRlbnQoKVswXSBhcyBNVGFibGUsXG5cdFx0XHRcdGNhc2VTZW5zaXRpdmUgPSBmaXJzdFR5cGVBaGVhZENvbnRlbnQuZ2V0Q2FzZVNlbnNpdGl2ZSgpOyAvLyB0YWtlIGNhc2VTZW5zaXRpdmUgZnJvbSBmaXJzdCBUeXBlYWhlYWQgY29udGVudFxuXG5cdFx0XHRpZiAoaXNUeXBlYWhlYWQpIHtcblx0XHRcdFx0Y29uc3QgeyB2YWx1ZUxpc3RJbmZvLCBjb250ZW50IH0gPSBWYWx1ZUxpc3RIZWxwZXIuX3ByZXBhcmVWYWx1ZUhlbHBUeXBlQWhlYWQoXG5cdFx0XHRcdFx0dmFsdWVIZWxwLFxuXHRcdFx0XHRcdGNvbnRhaW5lcixcblx0XHRcdFx0XHR2YWx1ZUxpc3RJbmZvcyxcblx0XHRcdFx0XHRwYXlsb2FkLFxuXHRcdFx0XHRcdGNhc2VTZW5zaXRpdmUsXG5cdFx0XHRcdFx0Zmlyc3RUeXBlQWhlYWRDb250ZW50XG5cdFx0XHRcdCk7XG5cblx0XHRcdFx0cGF5bG9hZC52YWx1ZUhlbHBRdWFsaWZpZXIgPSB2YWx1ZUxpc3RJbmZvLnZhbHVlSGVscFF1YWxpZmllcjtcblx0XHRcdFx0dmhVSU1vZGVsLnNldFByb3BlcnR5KFxuXHRcdFx0XHRcdFwiL3NlbGVjdGVkUHJvcGVydGllc1wiLFxuXHRcdFx0XHRcdHZhbHVlTGlzdEluZm8uY29sdW1uRGVmcy5tYXAoKGNvbCkgPT4gY29sLnBhdGgpXG5cdFx0XHRcdCk7XG5cdFx0XHRcdFZhbHVlTGlzdEhlbHBlci5fYWRkRGVzY3JpcHRpb25JbmZvc1RvUGF5bG9hZChwYXlsb2FkLCB2YWx1ZUxpc3RJbmZvLCBtZXRhTW9kZWwpO1xuXG5cdFx0XHRcdGlmIChjb250ZW50LmdldFRhYmxlKCkgPT09IHVuZGVmaW5lZCB8fCBjb250ZW50LmdldFRhYmxlKCkgPT09IG51bGwpIHtcblx0XHRcdFx0XHRhd2FpdCBWYWx1ZUxpc3RIZWxwZXIuX2NyZWF0ZVZhbHVlSGVscFR5cGVhaGVhZChwcm9wZXJ0eVBhdGgsIHZhbHVlSGVscCwgY29udGVudCwgdmFsdWVMaXN0SW5mbywgcGF5bG9hZCwgbWV0YU1vZGVsKTtcblx0XHRcdFx0fVxuXHRcdFx0fSBlbHNlIHtcblx0XHRcdFx0Y29uc3QgeyBzZWxlY3RlZEluZm8sIHNlbGVjdGVkQ29udGVudCwgY29uZGl0aW9uQ29udGVudCB9ID0gVmFsdWVMaXN0SGVscGVyLl9wcmVwYXJlVmFsdWVIZWxwRGlhbG9nKFxuXHRcdFx0XHRcdHZhbHVlSGVscCxcblx0XHRcdFx0XHRjb250YWluZXIsXG5cdFx0XHRcdFx0dmFsdWVMaXN0SW5mb3MsXG5cdFx0XHRcdFx0cGF5bG9hZCxcblx0XHRcdFx0XHRzZWxlY3RlZENvbnRlbnRJZCxcblx0XHRcdFx0XHRjYXNlU2Vuc2l0aXZlXG5cdFx0XHRcdCk7XG5cblx0XHRcdFx0cGF5bG9hZC52YWx1ZUhlbHBRdWFsaWZpZXIgPSBzZWxlY3RlZEluZm8udmFsdWVIZWxwUXVhbGlmaWVyO1xuXHRcdFx0XHRWYWx1ZUxpc3RIZWxwZXIuX2FkZERlc2NyaXB0aW9uSW5mb3NUb1BheWxvYWQocGF5bG9hZCwgc2VsZWN0ZWRJbmZvLCBtZXRhTW9kZWwpO1xuXG5cdFx0XHRcdC8qIEZvciBjb250ZXh0IGRlcGVudGVudCB2YWx1ZSBoZWxwcyB0aGUgdmFsdWUgbGlzdCBsYWJlbCBpcyB1c2VkIGZvciB0aGUgZGlhbG9nIHRpdGxlICovXG5cdFx0XHRcdGNvbnN0IGZpZWxkID0gdmFsdWVIZWxwLmdldENvbnRyb2woKTtcblx0XHRcdFx0aWYgKGZpZWxkKSB7XG5cdFx0XHRcdFx0Y29uc3QgdGl0bGUgPSBDb21tb25VdGlscy5nZXRUcmFuc2xhdGVkVGV4dEZyb21FeHBCaW5kaW5nU3RyaW5nKFxuXHRcdFx0XHRcdFx0VmFsdWVMaXN0SGVscGVyLl9nZXREaWFsb2dUaXRsZSh2YWx1ZUhlbHAsIHNlbGVjdGVkSW5mby52YWx1ZUxpc3RJbmZvPy5MYWJlbCksXG5cdFx0XHRcdFx0XHRmaWVsZFxuXHRcdFx0XHRcdCk7XG5cdFx0XHRcdFx0Y29udGFpbmVyLnNldFRpdGxlKHRpdGxlKTtcblx0XHRcdFx0fVxuXG5cdFx0XHRcdGlmIChzZWxlY3RlZENvbnRlbnQuZ2V0VGFibGUoKSA9PT0gdW5kZWZpbmVkIHx8IHNlbGVjdGVkQ29udGVudC5nZXRUYWJsZSgpID09PSBudWxsKSB7XG5cdFx0XHRcdFx0YXdhaXQgVmFsdWVMaXN0SGVscGVyLl9jcmVhdGVWYWx1ZUhlbHBEaWFsb2coXG5cdFx0XHRcdFx0XHRtZXRhTW9kZWwsXG5cdFx0XHRcdFx0XHRwcm9wZXJ0eVBhdGgsXG5cdFx0XHRcdFx0XHR2YWx1ZUhlbHAsXG5cdFx0XHRcdFx0XHRzZWxlY3RlZENvbnRlbnQsXG5cdFx0XHRcdFx0XHRzZWxlY3RlZEluZm8sXG5cdFx0XHRcdFx0XHRwYXlsb2FkLFxuXHRcdFx0XHRcdFx0Y29uZGl0aW9uQ29udGVudFxuXHRcdFx0XHRcdCk7XG5cdFx0XHRcdH1cblx0XHRcdH1cblx0XHR9IGNhdGNoIChlcnIpIHtcblx0XHRcdHRoaXMuX2xvZ0Vycm9yKHByb3BlcnR5UGF0aCwgZXJyKTtcblx0XHRcdFZhbHVlTGlzdEhlbHBlci5kZXN0cm95VkhDb250ZW50KHZhbHVlSGVscCk7XG5cdFx0fVxuXHR9LFxuXG5cdGdldEluQW5kT3V0UGFyYW1ldGVyc0xpc3QoKTogQ29tbW9uQW5ub3RhdGlvblR5cGVzW10ge1xuXHRcdHJldHVybiBbXG5cdFx0XHRDb21tb25Bbm5vdGF0aW9uVHlwZXMuVmFsdWVMaXN0UGFyYW1ldGVyT3V0LFxuXHRcdFx0Q29tbW9uQW5ub3RhdGlvblR5cGVzLlZhbHVlTGlzdFBhcmFtZXRlckluLFxuXHRcdFx0Q29tbW9uQW5ub3RhdGlvblR5cGVzLlZhbHVlTGlzdFBhcmFtZXRlckluT3V0XG5cdFx0XTtcblx0fSxcblxuXHRnZXRUZWNobmljYWxLZXlzKHZoUGFyYW1ldGVyczogSW5PdXRQYXJhbWV0ZXJbXSwgdmhLZXlzOiBzdHJpbmdbXSB8IHVuZGVmaW5lZCk6IHN0cmluZ1tdIHtcblx0XHRjb25zdCBpbk91dFBhcmFtZXRlcnMgPSBWYWx1ZUxpc3RIZWxwZXIuZ2V0SW5BbmRPdXRQYXJhbWV0ZXJzKHZoUGFyYW1ldGVycykubWFwKChwYXJhbWV0ZXIpID0+IHBhcmFtZXRlci5oZWxwUGF0aCk7XG5cdFx0cmV0dXJuICh2aEtleXMgPz8gW10pLmZpbHRlcigodmhLZXkpID0+ICFpbk91dFBhcmFtZXRlcnMuaW5jbHVkZXModmhLZXkpKTtcblx0fVxufTtcblxuZXhwb3J0IGRlZmF1bHQgVmFsdWVMaXN0SGVscGVyO1xuIl0sIm1hcHBpbmdzIjoiOzs7Ozs7Ozs7Ozs7Ozs7OztFQWlFQTs7RUFrQkEsTUFBTUEsdUJBQXVCLEdBQUdBLENBQUNDLFVBQXVCLEVBQUVDLEtBQWEsS0FBYyxDQUFDRCxVQUFVLENBQUNFLElBQUksQ0FBRUMsTUFBTSxJQUFLQSxNQUFNLENBQUNDLElBQUksS0FBS0gsS0FBSyxDQUFDO0VBRWpJLE1BQU1JLGVBQWUsR0FBRyx1Q0FBdUM7SUFDckVDLGNBQWMsR0FBRyxzQ0FBc0M7SUFDdkRDLCtCQUErQixHQUFHLGlGQUFpRjtJQUNuSEMsOEJBQThCLEdBQUcscURBQXFEO0lBQ3RGQyxvQ0FBb0MsR0FBRywyREFBMkQ7SUFDbEdDLCtCQUErQixHQUFHLHNEQUFzRDtJQUN4RkMsaUNBQWlDLEdBQUcsd0RBQXdEO0lBQzVGQyxrQ0FBa0MsR0FBRywwREFBMEQ7SUFDL0ZDLDJDQUEyQyxHQUFHLDhEQUE4RDtJQUM1R0Msc0NBQXNDLEdBQUcsNkRBQTZEO0VBQUNDLFFBQUEsQ0FBQVYsZUFBQSxHQUFBQSxlQUFBO0VBQUFVLFFBQUEsQ0FBQUQsc0NBQUEsR0FBQUEsc0NBQUE7RUFBQUMsUUFBQSxDQUFBRiwyQ0FBQSxHQUFBQSwyQ0FBQTtFQUFBRSxRQUFBLENBQUFILGtDQUFBLEdBQUFBLGtDQUFBO0VBQUFHLFFBQUEsQ0FBQUosaUNBQUEsR0FBQUEsaUNBQUE7RUFBQUksUUFBQSxDQUFBTCwrQkFBQSxHQUFBQSwrQkFBQTtFQUFBSyxRQUFBLENBQUFO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
@@ -1474,7 +1474,7 @@ const ValueListHelper = {
1474
1474
  if (
1475
1475
  field !== undefined &&
1476
1476
  (field.isA<FilterField>("sap.ui.mdc.FilterField") ||
1477
- field.isA<Field>("sap.ui.mdc.Field") ||
1477
+ (field.isA<Field>("sap.ui.mdc.Field") && !field.getValue()) ||
1478
1478
  field.isA<MultiValueField>("sap.ui.mdc.MultiValueField"))
1479
1479
  ) {
1480
1480
  //Can the filterfield be something else that we need the .isA() check?
@@ -23,7 +23,7 @@ sap.ui.define(["sap/base/Log", "sap/f/library", "sap/fe/controls/library", "sap/
23
23
  controls: [],
24
24
  elements: [],
25
25
  // eslint-disable-next-line no-template-curly-in-string
26
- version: "1.130.6",
26
+ version: "1.130.8",
27
27
  noLibraryCSS: true,
28
28
  extensions: {
29
29
  flChangeHandlers: {