@sapui5/sap.fe.macros 1.139.0 → 1.139.1

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (55) hide show
  1. package/package.json +1 -1
  2. package/src/sap/fe/macros/.library +1 -1
  3. package/src/sap/fe/macros/Chart.js +1 -1
  4. package/src/sap/fe/macros/Chart.tsx +1 -1
  5. package/src/sap/fe/macros/RichTextEditor.js +1 -2
  6. package/src/sap/fe/macros/RichTextEditor.tsx +0 -1
  7. package/src/sap/fe/macros/ValueHelp.js +4 -28
  8. package/src/sap/fe/macros/ValueHelp.tsx +2 -42
  9. package/src/sap/fe/macros/chart/MdcChartTemplate.js +2 -4
  10. package/src/sap/fe/macros/chart/MdcChartTemplate.tsx +1 -4
  11. package/src/sap/fe/macros/controls/BuildingBlockObjectProperty.js +5 -1
  12. package/src/sap/fe/macros/controls/BuildingBlockObjectProperty.ts +4 -0
  13. package/src/sap/fe/macros/controls/FilterBar.js +39 -3
  14. package/src/sap/fe/macros/controls/FilterBar.ts +42 -1
  15. package/src/sap/fe/macros/controls/Section.js +3 -2
  16. package/src/sap/fe/macros/controls/Section.ts +2 -1
  17. package/src/sap/fe/macros/draftIndicator/DraftIndicator.js +2 -2
  18. package/src/sap/fe/macros/draftIndicator/DraftIndicator.tsx +1 -1
  19. package/src/sap/fe/macros/field/FieldBaseDelegate.js +13 -7
  20. package/src/sap/fe/macros/field/FieldBaseDelegate.ts +12 -8
  21. package/src/sap/fe/macros/field/FieldRuntime.js +38 -8
  22. package/src/sap/fe/macros/field/FieldRuntime.ts +65 -7
  23. package/src/sap/fe/macros/filter/FilterUtils.js +7 -1
  24. package/src/sap/fe/macros/filter/FilterUtils.ts +7 -0
  25. package/src/sap/fe/macros/form/Form.block.js +6 -2
  26. package/src/sap/fe/macros/form/Form.block.ts +4 -1
  27. package/src/sap/fe/macros/form/FormDelegate.js +20 -1
  28. package/src/sap/fe/macros/form/FormDelegate.ts +25 -0
  29. package/src/sap/fe/macros/internal/field/DisplayStyle.js +4 -2
  30. package/src/sap/fe/macros/internal/field/DisplayStyle.tsx +3 -1
  31. package/src/sap/fe/macros/internal/valuehelp/TableDelegate.js +4 -4
  32. package/src/sap/fe/macros/internal/valuehelp/TableDelegate.ts +3 -3
  33. package/src/sap/fe/macros/internal/valuehelp/ValueListHelper.js +5 -1
  34. package/src/sap/fe/macros/internal/valuehelp/ValueListHelper.ts +4 -0
  35. package/src/sap/fe/macros/library.js +1 -1
  36. package/src/sap/fe/macros/mdc/adapter/StateHelper.js +5 -5
  37. package/src/sap/fe/macros/mdc/adapter/StateHelper.ts +5 -4
  38. package/src/sap/fe/macros/table/MdcTableTemplate.js +3 -1
  39. package/src/sap/fe/macros/table/MdcTableTemplate.tsx +2 -1
  40. package/src/sap/fe/macros/table/Table.js +7 -1
  41. package/src/sap/fe/macros/table/Table.tsx +7 -1
  42. package/src/sap/fe/macros/table/TableAPI.js +8 -1
  43. package/src/sap/fe/macros/table/TableAPI.ts +15 -2
  44. package/src/sap/fe/macros/table/TableSizeHelper.js +3 -3
  45. package/src/sap/fe/macros/table/TableSizeHelper.ts +5 -2
  46. package/src/sap/fe/macros/table/TreeTable.js +7 -1
  47. package/src/sap/fe/macros/table/TreeTable.tsx +7 -1
  48. package/src/sap/fe/macros/table/delegates/TableDelegate.js +3 -2
  49. package/src/sap/fe/macros/table/delegates/TableDelegate.ts +10 -3
  50. package/src/sap/fe/macros/table/massEdit/MassEditDialog.js +10 -10
  51. package/src/sap/fe/macros/table/massEdit/MassEditDialog.tsx +11 -9
  52. package/src/sap/fe/macros/table/massEdit/MassEditDialogHelper.js +8 -8
  53. package/src/sap/fe/macros/table/massEdit/MassEditDialogHelper.tsx +7 -6
  54. package/src/sap/fe/macros/valuehelp/ValueHelpDelegate.js +27 -3
  55. package/src/sap/fe/macros/valuehelp/ValueHelpDelegate.ts +28 -2
@@ -1088,6 +1088,10 @@ const ValueListHelper = {
1088
1088
  }
1089
1089
  if (!path.key) {
1090
1090
  path.key = firstKey;
1091
+ const propertyPath = `/${annotationValueListType.CollectionPath}/${firstKey}`;
1092
+ const propertyAnnotations = (metaModelVH.getObject(`${propertyPath}@`) || {}) as AnnotationsForProperty;
1093
+ // We update path.descriptionPath for the key property
1094
+ path.descriptionPath = propertyAnnotations[AnnotationText]?.$Path || "";
1091
1095
  }
1092
1096
 
1093
1097
  /* Ensure that vhKeys are part of the columnDefs, otherwise it is not considered in $select (BCP 2270141154) */
@@ -24,7 +24,7 @@ sap.ui.define(["sap/base/Log", "sap/f/library", "sap/fe/controls/library", "sap/
24
24
  controls: [],
25
25
  elements: [],
26
26
  // eslint-disable-next-line no-template-curly-in-string
27
- version: "1.139.0",
27
+ version: "1.139.1",
28
28
  noLibraryCSS: true,
29
29
  extensions: {
30
30
  flChangeHandlers: {
@@ -99,7 +99,9 @@ sap.ui.define(["sap/base/Log", "sap/base/util/deepClone", "sap/fe/core/templatin
99
99
  * @returns Supported filter fields.
100
100
  */
101
101
  async _getSupportedFilterFields(control) {
102
- if (control.isA("sap.ui.mdc.Filterbar")) {
102
+ if (control.isA("sap.ui.mdc.Table")) {
103
+ return control.getParent().getEnhancedFetchedPropertyInfos();
104
+ } else if (control.isA("sap.ui.mdc.Filterbar")) {
103
105
  await control.waitForInitialization();
104
106
  return control.getControlDelegate().fetchFilterProperties(control);
105
107
  } else if (control.isA("sap.fe.macros.controls.FilterBar")) {
@@ -110,7 +112,7 @@ sap.ui.define(["sap/base/Log", "sap/base/util/deepClone", "sap/fe/core/templatin
110
112
  return control.getControlDelegate().fetchProperties(control);
111
113
  },
112
114
  /**
113
- * Clears all input values of visible filter fields in the table, chart, or filter bar..
115
+ * Clears all input values of visible filter fields in the table, chart, or filter bar.
114
116
  * @param controlInstance This can be a filter bar, chart, or table.
115
117
  */
116
118
  async clearFilterValues(controlInstance) {
@@ -183,9 +185,7 @@ sap.ui.define(["sap/base/Log", "sap/base/util/deepClone", "sap/fe/core/templatin
183
185
  propertyInfos.forEach(propertyInfo => {
184
186
  if (control.isA("sap.ui.mdc.Table")) {
185
187
  propertyInfo["conditionPath"] = propertyInfo.name;
186
- propertyInfo["annotationPath"] = propertyInfo.metadataPath ? propertyInfo.metadataPath : "";
187
188
  propertyInfo["hasValueHelp"] = PropertyHelper.hasValueHelp(control.getPropertyHelper().getProperty(propertyInfo.name));
188
- propertyInfo["dataType"] = propertyInfo?.typeConfig?.className;
189
189
  } else if (control.isA("sap.ui.mdc.Chart")) {
190
190
  if (propertyInfo.path) {
191
191
  propertyInfo["name"] = propertyInfo.path;
@@ -257,4 +257,4 @@ sap.ui.define(["sap/base/Log", "sap/base/util/deepClone", "sap/fe/core/templatin
257
257
  };
258
258
  return StateHelper;
259
259
  }, false);
260
- //# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJuYW1lcyI6WyJTdGF0ZUhlbHBlciIsImdldFNlbGVjdGlvblZhcmlhbnQiLCJjb250cm9sIiwiY29udHJvbFN0YXRlIiwiU3RhdGVVdGlsIiwicmV0cmlldmVFeHRlcm5hbFN0YXRlIiwiY29udHJvbE9iamVjdCIsImZpbHRlciIsInBhcmFtZXRlcnMiLCJnZXRQYXJlbnQiLCJpc0EiLCJnZXRQYXJhbWV0ZXJzIiwidW5kZWZpbmVkIiwic2VsZWN0aW9uVmFyaWFudCIsIlN0YXRlRmlsdGVyc1RvU2VsZWN0aW9uVmFyaWFudCIsImdldFNlbGVjdGlvblZhcmlhbnRGcm9tQ29uZGl0aW9ucyIsImdldFByb3BlcnR5SGVscGVyIiwiZXh0ZXJuYWxTViIsIlNlbGVjdGlvblZhcmlhbnQiLCJzZWxlY3RPcHRpb25zIiwiX2dldFNlbGVjdE9wdGlvbnMiLCJwcm9wZXJ0eSIsIm1hc3NBZGRTZWxlY3RPcHRpb24iLCJzcGxpdCIsImVycm9yIiwiaWQiLCJnZXRJZCIsIm1lc3NhZ2UiLCJFcnJvciIsIlN0cmluZyIsIkxvZyIsImNvbnZlcnRTZWxlY3Rpb25WYXJpYW50VG9TdGF0ZUZpbHRlcnMiLCJwcmVmaWxsRGVzY3JpcHRpb25zIiwibW9kZWwiLCJwcm9wZXJ0eUluZm9zIiwiX2dldFN1cHBvcnRlZEZpbHRlckZpZWxkcyIsImxlbmd0aCIsImZpbHRlckJhckluZm9Gb3JDb252ZXJzaW9uIiwiX2dldENvbnRyb2xJbmZvRm9yQ29udmVyc2lvbiIsIm1ldGFNb2RlbCIsImdldE1ldGFNb2RlbCIsImNvcHlvZlByb3BlcnR5SW5mb3MiLCJKU09OIiwicGFyc2UiLCJzdHJpbmdpZnkiLCJ1cGRhdGVkUHJvcGVydHlJbmZvcyIsIl91cGRhdGVQcm9wZXJ0eUluZm9Ub1N1cHBvcnRTViIsImNvbmRpdGlvbnMiLCJzdlRvU3RhdGVGaWx0ZXJzIiwiZ2V0U3RhdGVGaWx0ZXJzRnJvbVNWIiwiZ2V0TW9kZWwiLCJjb250ZXh0UGF0aCIsImRhdGEiLCJ1c2VTZW1hbnRpY0RhdGVSYW5nZSIsInZpZXdEYXRhSW5zdGFuY2UiLCJ2aWV3RGF0YSIsImdldERhdGEiLCJjb25maWciLCJjb250cm9sQ29uZmlndXJhdGlvbiIsInNlbGVjdGlvbkZpZWxkc0NvbmZpZ3MiLCJmaWx0ZXJGaWVsZHNDb25maWciLCJmaWx0ZXJGaWVsZHMiLCJ3YWl0Rm9ySW5pdGlhbGl6YXRpb24iLCJnZXRDb250cm9sRGVsZWdhdGUiLCJmZXRjaEZpbHRlclByb3BlcnRpZXMiLCJhd2FpdENvbnRyb2xEZWxlZ2F0ZSIsImZldGNoUHJvcGVydGllcyIsImNsZWFyRmlsdGVyVmFsdWVzIiwiY29udHJvbEluc3RhbmNlIiwiX2NsZWFyRmlsdGVyVmFsdWVzV2l0aE9wdGlvbnMiLCJjb250ZW50IiwiZmlyZUV2ZW50Iiwib3B0aW9ucyIsInN0YXRlIiwiZWRpdFN0YXRlUGF0aCIsImN1cnJlbnRFZGl0U3RhdGVDb25kaXRpb24iLCJlZGl0U3RhdGVEZWZhdWx0VmFsdWUiLCJjdXJyZW50RWRpdFN0YXRlSXNEZWZhdWx0Iiwic2hvdWxkQ2xlYXJFZGl0RmlsdGVyIiwiRHJhZnRFZGl0U3RhdGUiLCJBTEwiLCJkZWVwQ2xvbmUiLCJ2YWx1ZXMiLCJPYmplY3QiLCJrZXlzIiwiY2xlYXJFZGl0RmlsdGVyIiwiY29uZGl0aW9uUGF0aCIsImNvbmRpdGlvbiIsImZpbHRlcmVkIiwiYXBwbHlFeHRlcm5hbFN0YXRlIiwiY2xlYW5VcEFsbEZpbHRlckZpZWxkc0luRXJyb3JTdGF0ZSIsImZvckVhY2giLCJwcm9wZXJ0eUluZm8iLCJuYW1lIiwibWV0YWRhdGFQYXRoIiwiUHJvcGVydHlIZWxwZXIiLCJoYXNWYWx1ZUhlbHAiLCJnZXRQcm9wZXJ0eSIsInR5cGVDb25maWciLCJjbGFzc05hbWUiLCJwYXRoIiwiZ2V0UHJvcGVydHlEYXRhTW9kZWwiLCJ0YXJnZXRPYmplY3QiLCJkYXRhVHlwZSIsInNldFNlbGVjdGlvblZhcmlhbnRUb01kY0NvbnRyb2wiLCJhcmd1bWVudHMiLCJzdGF0ZVRvQXBwbHkiLCJnZXRTdGF0ZVRvQXBwbHkiLCJjb252ZXJ0Q29uZGl0aW9uc0ZvckNoYXJ0IiwiZGlmZlN0YXRlIiwiYXBwbHlTdGF0ZVJlc3VsdCIsImVyciIsImFzc2lnbiIsIml0ZW1zIiwicHJvcGVydHlPYmoiXSwic291cmNlUm9vdCI6Ii4iLCJzb3VyY2VzIjpbIlN0YXRlSGVscGVyLnRzIl0sInNvdXJjZXNDb250ZW50IjpbImltcG9ydCBMb2cgZnJvbSBcInNhcC9iYXNlL0xvZ1wiO1xuaW1wb3J0IGRlZXBDbG9uZSBmcm9tIFwic2FwL2Jhc2UvdXRpbC9kZWVwQ2xvbmVcIjtcbmltcG9ydCB0eXBlIHsgVmlld0RhdGEgfSBmcm9tIFwic2FwL2ZlL2NvcmUvc2VydmljZXMvVGVtcGxhdGVkVmlld1NlcnZpY2VGYWN0b3J5XCI7XG5pbXBvcnQgKiBhcyBQcm9wZXJ0eUhlbHBlciBmcm9tIFwic2FwL2ZlL2NvcmUvdGVtcGxhdGluZy9Qcm9wZXJ0eUhlbHBlclwiO1xuaW1wb3J0IERyYWZ0RWRpdFN0YXRlIGZyb20gXCJzYXAvZmUvbWFjcm9zL2ZpbHRlckJhci9EcmFmdEVkaXRTdGF0ZVwiO1xuaW1wb3J0IHR5cGUgRmlsdGVyQmFyQVBJIGZyb20gXCJzYXAvZmUvbWFjcm9zL2ZpbHRlckJhci9GaWx0ZXJCYXJBUElcIjtcbmltcG9ydCB0eXBlIHsgUHJvcGVydHlJbmZvIH0gZnJvbSBcInNhcC9mZS9tYWNyb3MvaW50ZXJuYWwvUHJvcGVydHlJbmZvXCI7XG5pbXBvcnQgdHlwZSB7IENvbnZlcnNpb25JbmZvIH0gZnJvbSBcInNhcC9mZS9tYWNyb3MvbWRjL2FkYXB0ZXIvU2VsZWN0aW9uVmFyaWFudFRvU3RhdGVGaWx0ZXJzXCI7XG5pbXBvcnQgc3ZUb1N0YXRlRmlsdGVycyBmcm9tIFwic2FwL2ZlL21hY3Jvcy9tZGMvYWRhcHRlci9TZWxlY3Rpb25WYXJpYW50VG9TdGF0ZUZpbHRlcnNcIjtcbmltcG9ydCBTdGF0ZUZpbHRlcnNUb1NlbGVjdGlvblZhcmlhbnQgZnJvbSBcInNhcC9mZS9tYWNyb3MvbWRjL2FkYXB0ZXIvU3RhdGVGaWx0ZXJUb1NlbGVjdGlvblZhcmlhbnRcIjtcbmltcG9ydCB0eXBlIHsgRXh0ZXJuYWxTdGF0ZVR5cGUgfSBmcm9tIFwic2FwL2ZlL21hY3Jvcy92YWx1ZWhlbHAvVmFsdWVIZWxwRGVsZWdhdGVcIjtcbmltcG9ydCBTZWxlY3Rpb25WYXJpYW50IGZyb20gXCJzYXAvZmUvbmF2aWdhdGlvbi9TZWxlY3Rpb25WYXJpYW50XCI7XG5pbXBvcnQgdHlwZSBDb3JlQ29udHJvbCBmcm9tIFwic2FwL3VpL2NvcmUvQ29udHJvbFwiO1xuaW1wb3J0IHR5cGUgQ2hhcnQgZnJvbSBcInNhcC91aS9tZGMvQ2hhcnRcIjtcbmltcG9ydCB0eXBlIENvbnRyb2wgZnJvbSBcInNhcC91aS9tZGMvQ29udHJvbFwiO1xuaW1wb3J0IHR5cGUgRmlsdGVyQmFyIGZyb20gXCJzYXAvdWkvbWRjL0ZpbHRlckJhclwiO1xuaW1wb3J0IHR5cGUgVGFibGUgZnJvbSBcInNhcC91aS9tZGMvVGFibGVcIjtcbmltcG9ydCB0eXBlIHsgU3RhdGVUb0FwcGx5LCBGaWx0ZXIgYXMgU3RhdGVVdGlsRmlsdGVyIH0gZnJvbSBcInNhcC91aS9tZGMvcDEzbi9TdGF0ZVV0aWxcIjtcbmltcG9ydCBTdGF0ZVV0aWwgZnJvbSBcInNhcC91aS9tZGMvcDEzbi9TdGF0ZVV0aWxcIjtcbmltcG9ydCB0eXBlIE1vZGVsIGZyb20gXCJzYXAvdWkvbW9kZWwvTW9kZWxcIjtcbmltcG9ydCB0eXBlIEpTT05Nb2RlbCBmcm9tIFwic2FwL3VpL21vZGVsL2pzb24vSlNPTk1vZGVsXCI7XG5pbXBvcnQgdHlwZSBPRGF0YU1ldGFNb2RlbCBmcm9tIFwic2FwL3VpL21vZGVsL29kYXRhL3Y0L09EYXRhTWV0YU1vZGVsXCI7XG5pbXBvcnQgdHlwZSBDaGFydFR5cGUgZnJvbSBcIi4uLy4uL0NoYXJ0XCI7XG5pbXBvcnQgdHlwZSBNYWNyb0FQSSBmcm9tIFwiLi4vLi4vTWFjcm9BUElcIjtcblxuLyoqXG4gKiBUaGlzIGlzIHRvIGV4dGVuZCBNREMgY29udHJvbCBBUElzIGZvciBmaWx0ZXIsIHRhYmxlLCBjaGFydCBidWlsZGluZyBibG9ja3MuXG4gKiBAcHVibGljXG4gKi9cblxuY29uc3QgU3RhdGVIZWxwZXIgPSB7XG5cdC8qKlxuXHQgKiBHZXRzIHNlbGVjdGlvbiB2YXJpYW50IGZyb20gdGhlIG1kYyBjb250cm9sLlxuXHQgKiBAcGFyYW0gY29udHJvbCBUaGUgY29udHJvbCBmb3Igd2hpY2ggU2VsZWN0aW9uIFZhcmlhbnQgaXMgdG8gYmUgZmV0Y2hlZFxuXHQgKiBAcmV0dXJucyBBIHByb21pc2Ugd2hpY2ggcmVzb2x2ZXMgd2l0aCBhIHtAbGluayBzYXAuZmUubmF2aWdhdGlvbi5TZWxlY3Rpb25WYXJpYW50fVxuXHQgKiBAcHVibGljXG5cdCAqL1xuXHRhc3luYyBnZXRTZWxlY3Rpb25WYXJpYW50KGNvbnRyb2w6IENvcmVDb250cm9sIHwgdW5kZWZpbmVkKTogUHJvbWlzZTxTZWxlY3Rpb25WYXJpYW50PiB7XG5cdFx0dHJ5IHtcblx0XHRcdGNvbnN0IGNvbnRyb2xTdGF0ZSA9IGF3YWl0IFN0YXRlVXRpbC5yZXRyaWV2ZUV4dGVybmFsU3RhdGUoY29udHJvbCBhcyBDb250cm9sKTtcblx0XHRcdGNvbnN0IGNvbnRyb2xPYmplY3QgPSBjb250cm9sU3RhdGUuZmlsdGVyIGFzIFN0YXRlVXRpbEZpbHRlcjtcblx0XHRcdGxldCBwYXJhbWV0ZXJzOiBzdHJpbmdbXSB8IHVuZGVmaW5lZCA9IFtdO1xuXHRcdFx0aWYgKFxuXHRcdFx0XHRjb250cm9sPy5nZXRQYXJlbnQoKT8uaXNBKFwic2FwLmZlLm1hY3Jvcy5maWx0ZXJCYXIuRmlsdGVyQmFyQVBJXCIpICYmXG5cdFx0XHRcdChjb250cm9sLmdldFBhcmVudCgpIGFzIEZpbHRlckJhckFQSSkuZ2V0UGFyYW1ldGVycyAhPT0gdW5kZWZpbmVkXG5cdFx0XHQpIHtcblx0XHRcdFx0cGFyYW1ldGVycyA9IChjb250cm9sLmdldFBhcmVudCgpIGFzIEZpbHRlckJhckFQSSkuZ2V0UGFyYW1ldGVycygpO1xuXHRcdFx0fVxuXHRcdFx0Y29uc3Qgc2VsZWN0aW9uVmFyaWFudCA9IFN0YXRlRmlsdGVyc1RvU2VsZWN0aW9uVmFyaWFudC5nZXRTZWxlY3Rpb25WYXJpYW50RnJvbUNvbmRpdGlvbnMoXG5cdFx0XHRcdGNvbnRyb2xPYmplY3QsXG5cdFx0XHRcdChjb250cm9sIGFzIENvbnRyb2wpLmdldFByb3BlcnR5SGVscGVyKCksXG5cdFx0XHRcdHBhcmFtZXRlcnNcblx0XHRcdCk7XG5cdFx0XHRpZiAoY29udHJvbD8uaXNBKFwic2FwLnVpLm1kYy5DaGFydFwiKSkge1xuXHRcdFx0XHRjb25zdCBleHRlcm5hbFNWID0gbmV3IFNlbGVjdGlvblZhcmlhbnQoKTtcblx0XHRcdFx0Y29uc3Qgc2VsZWN0T3B0aW9ucyA9IHNlbGVjdGlvblZhcmlhbnQuX2dldFNlbGVjdE9wdGlvbnMoKTtcblx0XHRcdFx0Zm9yIChjb25zdCBwcm9wZXJ0eSBpbiBzZWxlY3RPcHRpb25zKSB7XG5cdFx0XHRcdFx0ZXh0ZXJuYWxTVi5tYXNzQWRkU2VsZWN0T3B0aW9uKHByb3BlcnR5LnNwbGl0KFwiX2ZlX2dyb3VwYWJsZV9cIilbMV0sIHNlbGVjdE9wdGlvbnNbcHJvcGVydHldKTtcblx0XHRcdFx0fVxuXHRcdFx0XHRyZXR1cm4gZXh0ZXJuYWxTVjtcblx0XHRcdH0gZWxzZSB7XG5cdFx0XHRcdHJldHVybiBzZWxlY3Rpb25WYXJpYW50O1xuXHRcdFx0fVxuXHRcdH0gY2F0Y2ggKGVycm9yOiB1bmtub3duKSB7XG5cdFx0XHRjb25zdCBpZDogc3RyaW5nIHwgdW5kZWZpbmVkID0gY29udHJvbD8uZ2V0SWQoKTtcblx0XHRcdGNvbnN0IG1lc3NhZ2UgPSBlcnJvciBpbnN0YW5jZW9mIEVycm9yID8gZXJyb3IubWVzc2FnZSA6IFN0cmluZyhlcnJvcik7XG5cdFx0XHRMb2cuZXJyb3IoYEJ1aWxkaW5nIEJsb2NrICgke2lkfSkgLSBnZXQgc2VsZWN0aW9uIHZhcmlhbnQgZmFpbGVkIDogJHttZXNzYWdlfWApO1xuXHRcdFx0dGhyb3cgRXJyb3IobWVzc2FnZSk7XG5cdFx0fVxuXHR9LFxuXG5cdC8qKlxuXHQgKiBDb252ZXJ0IHNlbGVjdGlvbiB2YXJpYW50IHRvIGNvbmRpdGlvbnMuXG5cdCAqIEBwYXJhbSBjb250cm9sIENvbnRyb2wgY2FuIGJlIGEgdGFibGUsIGNoYXJ0IG9yIGZpbHRlciBiYXJcblx0ICogQHBhcmFtIHNlbGVjdGlvblZhcmlhbnQgVGhlIHNlbGVjdGlvbiB2YXJpYW50IHRvIGFwcGx5IHRvIHRoZSB0YWJsZSBvciBjaGFydCBvciBmaWx0ZXIgYmFyLlxuXHQgKiBAcGFyYW0gcHJlZmlsbERlc2NyaXB0aW9ucyBJZiB0cnVlLCB3ZSB0cnkgdG8gZmluZCB0aGUgYXNzb2NpYXRlZCBUZXh0IHZhbHVlIGZvciBlYWNoIHByb3BlcnR5IGluIHRoZSBzZWxlY3Rpb25WYXJpYW50ICh0byBhdm9pZCBmZXRjaGluZyBpdCBmcm9tIHRoZSBzZXJ2ZXIpXG5cdCAqIEBwYXJhbSBtb2RlbCBUaGUgY29udHJvbCBtb2RlbFxuXHQgKiBAcmV0dXJucyBBIHByb21pc2UgcmVzb2x2aW5nIHRvIGNvbmRpdGlvbnNcblx0ICovXG5cdGFzeW5jIGNvbnZlcnRTZWxlY3Rpb25WYXJpYW50VG9TdGF0ZUZpbHRlcnMoXG5cdFx0Y29udHJvbDogQ29udHJvbCxcblx0XHRzZWxlY3Rpb25WYXJpYW50OiBTZWxlY3Rpb25WYXJpYW50LFxuXHRcdHByZWZpbGxEZXNjcmlwdGlvbnM6IGJvb2xlYW4sXG5cdFx0bW9kZWw/OiBNb2RlbFxuXHQpOiBQcm9taXNlPFN0YXRlVXRpbEZpbHRlcj4ge1xuXHRcdC8vIE5vdGU6IFRoaXMgbWV0aG9kIGlzIHByaXZhdGUgYW5kIHJlc3RyaWN0ZWQgdG8gdXNhZ2UgYnkgc2FwLmZlKFZpZXdTdGF0ZSBjb250cm9sbGVyIGV4dGVuc2lvbikgZm9yIGZpbHRlciBiYXIvIGNoYXJ0IC8gdGFibGUgc3RhdGUgc2NlbmFyaW9zLlxuXHRcdGNvbnN0IHByb3BlcnR5SW5mb3MgPSBhd2FpdCB0aGlzLl9nZXRTdXBwb3J0ZWRGaWx0ZXJGaWVsZHMoY29udHJvbCk7XG5cblx0XHRpZiAoIXByb3BlcnR5SW5mb3MubGVuZ3RoKSB7XG5cdFx0XHR0aHJvdyBuZXcgRXJyb3IoXCJObyB2YWxpZCBtZXRhZGF0YSBwcm9wZXJ0aWVzIHByZXNlbnQgZm9yIGZpbHRlciBiYXJcIik7XG5cdFx0fVxuXG5cdFx0Y29uc3QgZmlsdGVyQmFySW5mb0ZvckNvbnZlcnNpb24gPSB0aGlzLl9nZXRDb250cm9sSW5mb0ZvckNvbnZlcnNpb24oY29udHJvbCk7XG5cdFx0Y29uc3QgbWV0YU1vZGVsID0gbW9kZWw/LmdldE1ldGFNb2RlbCgpIGFzIE9EYXRhTWV0YU1vZGVsO1xuXHRcdGNvbnN0IGNvcHlvZlByb3BlcnR5SW5mb3MgPSBKU09OLnBhcnNlKEpTT04uc3RyaW5naWZ5KHByb3BlcnR5SW5mb3MpKTtcblx0XHRjb25zdCB1cGRhdGVkUHJvcGVydHlJbmZvcyA9IHRoaXMuX3VwZGF0ZVByb3BlcnR5SW5mb1RvU3VwcG9ydFNWKGNvbnRyb2wsIGNvcHlvZlByb3BlcnR5SW5mb3MpO1xuXHRcdGNvbnN0IGNvbmRpdGlvbnM6IFN0YXRlVXRpbEZpbHRlciA9IHN2VG9TdGF0ZUZpbHRlcnMuZ2V0U3RhdGVGaWx0ZXJzRnJvbVNWKFxuXHRcdFx0c2VsZWN0aW9uVmFyaWFudCxcblx0XHRcdGZpbHRlckJhckluZm9Gb3JDb252ZXJzaW9uLFxuXHRcdFx0dXBkYXRlZFByb3BlcnR5SW5mb3MgPz8gY29weW9mUHJvcGVydHlJbmZvcyxcblx0XHRcdHByZWZpbGxEZXNjcmlwdGlvbnMsXG5cdFx0XHRtZXRhTW9kZWxcblx0XHQpO1xuXG5cdFx0cmV0dXJuIGNvbmRpdGlvbnM7XG5cdH0sXG5cblx0LyoqXG5cdCAqIEdldCB0aGUgZmlsdGVyIGluZm9ybWF0aW9uIG5lZWRlZCBmb3IgdGhlIGNvbnZlcnNpb24gb2Ygc2VsZWN0aW9uIHZhcmlhbnQgdG8gY29uZGl0aW9ucy5cblx0ICogQHBhcmFtIGNvbnRyb2wgVGhpcyBjYW4gYmUgYSB0YWJsZSwgY2hhcnQsIG9yIGZpbHRlcmJhclxuXHQgKiBAcmV0dXJucyBUaGUgY29udHJvbCBpbmZvcm1hdGlvbiAobWV0YU1vZGVsLCBjb250ZXh0UGF0aCwgdXNlIG9mIHNlbWFudGljIGRhdGUgcmFuZ2UsIGFsbCBmaWx0ZXIgZmllbGRzIGNvbmZpZylcblx0ICovXG5cdF9nZXRDb250cm9sSW5mb0ZvckNvbnZlcnNpb24oY29udHJvbDogQ29udHJvbCk6IENvbnZlcnNpb25JbmZvIHtcblx0XHRjb25zdCBtZXRhTW9kZWwgPSBjb250cm9sLmdldE1vZGVsKCk/LmdldE1ldGFNb2RlbCgpIGFzIE9EYXRhTWV0YU1vZGVsLFxuXHRcdFx0Y29udGV4dFBhdGggPSBjb250cm9sLmRhdGEoXCJlbnRpdHlUeXBlXCIpIGFzIHN0cmluZztcblx0XHRpZiAoY29udHJvbC5pc0EoXCJzYXAuZmUubWFjcm9zLmNvbnRyb2xzLkZpbHRlckJhclwiKSkge1xuXHRcdFx0Y29uc3QgdXNlU2VtYW50aWNEYXRlUmFuZ2U6IGJvb2xlYW4gPVxuXHRcdFx0XHRcdGNvbnRyb2wuZGF0YShcInVzZVNlbWFudGljRGF0ZVJhbmdlXCIpID09PSBcInRydWVcIiB8fCBjb250cm9sLmRhdGEoXCJ1c2VTZW1hbnRpY0RhdGVSYW5nZVwiKSA9PT0gdHJ1ZSxcblx0XHRcdFx0dmlld0RhdGFJbnN0YW5jZSA9IGNvbnRyb2wuZ2V0TW9kZWwoXCJ2aWV3RGF0YVwiKSBhcyBKU09OTW9kZWwsXG5cdFx0XHRcdHZpZXdEYXRhID0gdmlld0RhdGFJbnN0YW5jZS5nZXREYXRhKCkgYXMgVmlld0RhdGEsXG5cdFx0XHRcdGNvbmZpZyA9IHZpZXdEYXRhPy5jb250cm9sQ29uZmlndXJhdGlvbixcblx0XHRcdFx0c2VsZWN0aW9uRmllbGRzQ29uZmlncyA9IGNvbmZpZz8uW1wiQGNvbS5zYXAudm9jYWJ1bGFyaWVzLlVJLnYxLlNlbGVjdGlvbkZpZWxkc1wiXSxcblx0XHRcdFx0ZmlsdGVyRmllbGRzQ29uZmlnID0gc2VsZWN0aW9uRmllbGRzQ29uZmlncz8uZmlsdGVyRmllbGRzO1xuXHRcdFx0cmV0dXJuIHsgbWV0YU1vZGVsLCBjb250ZXh0UGF0aCwgdXNlU2VtYW50aWNEYXRlUmFuZ2UsIGZpbHRlckZpZWxkc0NvbmZpZywgc2VsZWN0aW9uRmllbGRzQ29uZmlncyB9O1xuXHRcdH0gZWxzZSB7XG5cdFx0XHRyZXR1cm4geyBtZXRhTW9kZWwsIGNvbnRleHRQYXRoIH07XG5cdFx0fVxuXHR9LFxuXG5cdC8qKlxuXHQgKiBHZXQgc3VwcG9ydGVkIGZpbHRlciBmaWVsZCBwcm9wZXJ0aWVzIGZyb20gdGhlIHRhYmxlLCBjaGFydCwgb3IgZmlsdGVyIGJhci5cblx0ICogQHBhcmFtIGNvbnRyb2wgQ29udHJvbCBjYW4gYmUgYSB0YWJsZSwgY2hhcnQsIG9yIGZpbHRlciBiYXJcblx0ICogQHJldHVybnMgU3VwcG9ydGVkIGZpbHRlciBmaWVsZHMuXG5cdCAqL1xuXHRhc3luYyBfZ2V0U3VwcG9ydGVkRmlsdGVyRmllbGRzKGNvbnRyb2w6IENvbnRyb2wpOiBQcm9taXNlPENvbnRyb2xQcm9wZXJ0eUluZm9bXT4ge1xuXHRcdGlmIChjb250cm9sLmlzQShcInNhcC51aS5tZGMuRmlsdGVyYmFyXCIpKSB7XG5cdFx0XHRhd2FpdCAoY29udHJvbCBhcyBGaWx0ZXJCYXIpLndhaXRGb3JJbml0aWFsaXphdGlvbigpO1xuXHRcdFx0cmV0dXJuIChjb250cm9sIGFzIEZpbHRlckJhcikuZ2V0Q29udHJvbERlbGVnYXRlKCkuZmV0Y2hGaWx0ZXJQcm9wZXJ0aWVzKGNvbnRyb2wpO1xuXHRcdH0gZWxzZSBpZiAoKGNvbnRyb2wgYXMgRmlsdGVyQmFyKS5pc0EoXCJzYXAuZmUubWFjcm9zLmNvbnRyb2xzLkZpbHRlckJhclwiKSkge1xuXHRcdFx0cmV0dXJuIChjb250cm9sIGFzIEZpbHRlckJhcikuZ2V0Q29udHJvbERlbGVnYXRlKCkuZmV0Y2hGaWx0ZXJQcm9wZXJ0aWVzKGNvbnRyb2wpO1xuXHRcdH0gZWxzZSB7XG5cdFx0XHRhd2FpdCAoY29udHJvbCBhcyBUYWJsZSB8IENoYXJ0KS5hd2FpdENvbnRyb2xEZWxlZ2F0ZSgpO1xuXHRcdH1cblx0XHRyZXR1cm4gKGNvbnRyb2wgYXMgVGFibGUgfCBDaGFydCB8IEZpbHRlckJhcikuZ2V0Q29udHJvbERlbGVnYXRlKCkuZmV0Y2hQcm9wZXJ0aWVzKGNvbnRyb2wpO1xuXHR9LFxuXG5cdC8qKlxuXHQgKiBDbGVhcnMgYWxsIGlucHV0IHZhbHVlcyBvZiB2aXNpYmxlIGZpbHRlciBmaWVsZHMgaW4gdGhlIHRhYmxlLCBjaGFydCwgb3IgZmlsdGVyIGJhci4uXG5cdCAqIEBwYXJhbSBjb250cm9sSW5zdGFuY2UgVGhpcyBjYW4gYmUgYSBmaWx0ZXIgYmFyLCBjaGFydCwgb3IgdGFibGUuXG5cdCAqL1xuXHRhc3luYyBjbGVhckZpbHRlclZhbHVlcyhjb250cm9sSW5zdGFuY2U6IE1hY3JvQVBJKTogUHJvbWlzZTx2b2lkPiB7XG5cdFx0YXdhaXQgdGhpcy5fY2xlYXJGaWx0ZXJWYWx1ZXNXaXRoT3B0aW9ucyhjb250cm9sSW5zdGFuY2UuY29udGVudCBhcyBDb250cm9sKTtcblx0XHQvLyBBbGxvdyBhcHAgZGV2ZWxvcGVycyB0byB1cGRhdGUgZmlsdGVycyBhZnRlciBjbGVhcmluZ1xuXHRcdGNvbnRyb2xJbnN0YW5jZS5maXJlRXZlbnQoXCJhZnRlckNsZWFyXCIpO1xuXHR9LFxuXG5cdC8qKlxuXHQgKiBDbGVhcnMgYWxsIGlucHV0IHZhbHVlcyBvZiB2aXNpYmxlIGZpbHRlciBmaWVsZHMgaW4gdGhlIHRhYmxlLCBjaGFydCwgb3IgZmlsdGVyIGJhci5cblx0ICogQHBhcmFtIGNvbnRyb2wgVGhpcyBjYW4gYmUgYSB0YWJsZSwgY2hhcnQsIG9yIGZpbHRlciBiYXJcblx0ICogQHBhcmFtIG9wdGlvbnMgT3B0aW9ucyBmb3IgZmlsdGVyaW5nIHRoZSBmaWx0ZXIgYmFyXG5cdCAqIEBwYXJhbSBvcHRpb25zLmNsZWFyRWRpdEZpbHRlciBXaGV0aGVyIHRvIGNsZWFyIHRoZSBlZGl0IGZpbHRlciBvciByZXRhaW4gdGhlIGRlZmF1bHQgdmFsdWUgJ0FsbCdcblx0ICovXG5cdGFzeW5jIF9jbGVhckZpbHRlclZhbHVlc1dpdGhPcHRpb25zKGNvbnRyb2w6IENvbnRyb2wsIG9wdGlvbnM/OiB7IGNsZWFyRWRpdEZpbHRlcjogYm9vbGVhbiB9KTogUHJvbWlzZTx2b2lkPiB7XG5cdFx0aWYgKCFjb250cm9sKSB7XG5cdFx0XHRyZXR1cm47XG5cdFx0fVxuXHRcdGNvbnN0IHN0YXRlOiBFeHRlcm5hbFN0YXRlVHlwZSA9IGF3YWl0IFN0YXRlVXRpbC5yZXRyaWV2ZUV4dGVybmFsU3RhdGUoY29udHJvbCk7XG5cdFx0bGV0IGVkaXRTdGF0ZVBhdGggPSBcIlwiLFxuXHRcdFx0Y3VycmVudEVkaXRTdGF0ZUNvbmRpdGlvbixcblx0XHRcdGVkaXRTdGF0ZURlZmF1bHRWYWx1ZSxcblx0XHRcdGN1cnJlbnRFZGl0U3RhdGVJc0RlZmF1bHQ6IGJvb2xlYW4gfCB1bmRlZmluZWQsXG5cdFx0XHRzaG91bGRDbGVhckVkaXRGaWx0ZXI6IHVuZGVmaW5lZCB8IGJvb2xlYW47XG5cdFx0aWYgKGNvbnRyb2wuaXNBPEZpbHRlckJhcj4oXCJzYXAudWkubWRjLkZpbHRlckJhclwiKSkge1xuXHRcdFx0ZWRpdFN0YXRlUGF0aCA9IFwiJGVkaXRTdGF0ZVwiO1xuXHRcdFx0ZWRpdFN0YXRlRGVmYXVsdFZhbHVlID0gRHJhZnRFZGl0U3RhdGUuQUxMLmlkO1xuXHRcdFx0Y3VycmVudEVkaXRTdGF0ZUNvbmRpdGlvbiA9IGRlZXBDbG9uZShzdGF0ZS5maWx0ZXJbZWRpdFN0YXRlUGF0aF0/LlswXSk7XG5cdFx0XHRjdXJyZW50RWRpdFN0YXRlSXNEZWZhdWx0ID0gY3VycmVudEVkaXRTdGF0ZUNvbmRpdGlvbj8udmFsdWVzWzBdID09PSBlZGl0U3RhdGVEZWZhdWx0VmFsdWU7XG5cdFx0XHRzaG91bGRDbGVhckVkaXRGaWx0ZXIgPSBvcHRpb25zICYmIE9iamVjdC5rZXlzKG9wdGlvbnMpLmxlbmd0aCA+IDAgJiYgb3B0aW9ucy5jbGVhckVkaXRGaWx0ZXI7XG5cdFx0fVxuXG5cdFx0Ly8gQ2xlYXIgYWxsIGNvbmRpdGlvbnNcblx0XHRmb3IgKGNvbnN0IGNvbmRpdGlvblBhdGggb2YgT2JqZWN0LmtleXMoc3RhdGUuZmlsdGVyKSkge1xuXHRcdFx0aWYgKCFzaG91bGRDbGVhckVkaXRGaWx0ZXIgJiYgY29uZGl0aW9uUGF0aCA9PT0gZWRpdFN0YXRlUGF0aCAmJiBjdXJyZW50RWRpdFN0YXRlSXNEZWZhdWx0KSB7XG5cdFx0XHRcdC8vIERvIG5vdCBjbGVhciBlZGl0IHN0YXRlIGNvbmRpdGlvbiBpZiBpdCBpcyBhbHJlYWR5IFwiQUxMXCJcblx0XHRcdFx0Y29udGludWU7XG5cdFx0XHR9XG5cdFx0XHRmb3IgKGNvbnN0IGNvbmRpdGlvbiBvZiBzdGF0ZS5maWx0ZXJbY29uZGl0aW9uUGF0aF0pIHtcblx0XHRcdFx0Y29uZGl0aW9uLmZpbHRlcmVkID0gZmFsc2U7XG5cdFx0XHR9XG5cdFx0fVxuXHRcdGF3YWl0IFN0YXRlVXRpbC5hcHBseUV4dGVybmFsU3RhdGUoY29udHJvbCwgeyBmaWx0ZXI6IHN0YXRlLmZpbHRlciB9KTtcblxuXHRcdGlmIChjb250cm9sLmlzQTxGaWx0ZXJCYXI+KFwic2FwLnVpLm1kYy5GaWx0ZXJCYXJcIikpIHtcblx0XHRcdC8vIFNldCBlZGl0IHN0YXRlIHRvICdBTEwnIGlmIGl0IHdhc24ndCBiZWZvcmVcblx0XHRcdGlmICghc2hvdWxkQ2xlYXJFZGl0RmlsdGVyICYmIGN1cnJlbnRFZGl0U3RhdGVDb25kaXRpb24gJiYgIWN1cnJlbnRFZGl0U3RhdGVJc0RlZmF1bHQpIHtcblx0XHRcdFx0Y3VycmVudEVkaXRTdGF0ZUNvbmRpdGlvbi52YWx1ZXMgPSBbZWRpdFN0YXRlRGVmYXVsdFZhbHVlXTtcblx0XHRcdFx0YXdhaXQgU3RhdGVVdGlsLmFwcGx5RXh0ZXJuYWxTdGF0ZShjb250cm9sLCB7IGZpbHRlcjogeyBbZWRpdFN0YXRlUGF0aF06IFtjdXJyZW50RWRpdFN0YXRlQ29uZGl0aW9uXSB9IH0pO1xuXHRcdFx0fVxuXG5cdFx0XHQvL2NsZWFyIGZpbHRlciBmaWVsZHMgaW4gZXJyb3Igc3RhdGVcblx0XHRcdGNvbnRyb2wuY2xlYW5VcEFsbEZpbHRlckZpZWxkc0luRXJyb3JTdGF0ZSgpO1xuXHRcdH1cblx0fSxcblxuXHQvKipcblx0ICogTWV0aG9kIHJldHVybnMgdGhlIGNvcHkgb2YgcHJvcGVydHlJbmZvIGJ5IGFkZGluZyBuZWNlc3NhcnkgZmllbGRzIHNvIHRoYXQgc2VsZWN0aW9uIHZhcmlhbnQgY2FuIGJlIHNldCB0byBhIGNvbnRyb2wgbGlrZSB0YWJsZSBhbmQgY2hhcnQuXG5cdCAqIEBwYXJhbSBjb250cm9sIFRoaXMgY291bGQgYmUgYSB0YWJsZSwgY2hhcnQsIG9yIGZpbHRlciBiYXJcblx0ICogQHBhcmFtIHByb3BlcnR5SW5mb3MgQXJyYXkgb2YgUHJvcGVydHlJbmZvIG9mIHRoZSBjb250cm9sXG5cdCAqIEByZXR1cm5zIFRoZSBkZWVwIGNsb25lIG9mIHByb3BlcnR5SW5mb3Mgd2l0aCBzb21lIGFkZGl0aW9uYWwgZmllbGRzXG5cdCAqL1xuXHRfdXBkYXRlUHJvcGVydHlJbmZvVG9TdXBwb3J0U1YoY29udHJvbDogQ29udHJvbCwgcHJvcGVydHlJbmZvczogQ29udHJvbFByb3BlcnR5SW5mb1tdKTogQ29udHJvbFByb3BlcnR5SW5mb1tdIHtcblx0XHRpZiAoY29udHJvbC5pc0EoXCJzYXAudWkubWRjLkZpbHRlckJhclwiKSkge1xuXHRcdFx0cmV0dXJuIHByb3BlcnR5SW5mb3M7XG5cdFx0fVxuXHRcdHByb3BlcnR5SW5mb3MuZm9yRWFjaCgocHJvcGVydHlJbmZvOiBDb250cm9sUHJvcGVydHlJbmZvKSA9PiB7XG5cdFx0XHRpZiAoKGNvbnRyb2wgYXMgQ29udHJvbCkuaXNBKFwic2FwLnVpLm1kYy5UYWJsZVwiKSkge1xuXHRcdFx0XHRwcm9wZXJ0eUluZm9bXCJjb25kaXRpb25QYXRoXCJdID0gcHJvcGVydHlJbmZvLm5hbWU7XG5cdFx0XHRcdHByb3BlcnR5SW5mb1tcImFubm90YXRpb25QYXRoXCJdID0gcHJvcGVydHlJbmZvLm1ldGFkYXRhUGF0aCA/IHByb3BlcnR5SW5mby5tZXRhZGF0YVBhdGggOiBcIlwiO1xuXHRcdFx0XHRwcm9wZXJ0eUluZm9bXCJoYXNWYWx1ZUhlbHBcIl0gPSBQcm9wZXJ0eUhlbHBlci5oYXNWYWx1ZUhlbHAoXG5cdFx0XHRcdFx0KGNvbnRyb2wgYXMgVGFibGUpLmdldFByb3BlcnR5SGVscGVyKCkuZ2V0UHJvcGVydHkocHJvcGVydHlJbmZvLm5hbWUpXG5cdFx0XHRcdCk7XG5cdFx0XHRcdHByb3BlcnR5SW5mb1tcImRhdGFUeXBlXCJdID0gcHJvcGVydHlJbmZvPy50eXBlQ29uZmlnPy5jbGFzc05hbWUgYXMgc3RyaW5nO1xuXHRcdFx0fSBlbHNlIGlmICgoY29udHJvbCBhcyBDb250cm9sKS5pc0EoXCJzYXAudWkubWRjLkNoYXJ0XCIpKSB7XG5cdFx0XHRcdGlmIChwcm9wZXJ0eUluZm8ucGF0aCkge1xuXHRcdFx0XHRcdHByb3BlcnR5SW5mb1tcIm5hbWVcIl0gPSBwcm9wZXJ0eUluZm8ucGF0aDtcblx0XHRcdFx0XHRwcm9wZXJ0eUluZm9bXCJjb25kaXRpb25QYXRoXCJdID0gcHJvcGVydHlJbmZvLnBhdGg7XG5cdFx0XHRcdFx0Y29uc3QgcHJvcGVydHkgPSAoKGNvbnRyb2wgYXMgQ2hhcnQpLmdldFBhcmVudCgpIGFzIENoYXJ0VHlwZSk/LmdldFByb3BlcnR5RGF0YU1vZGVsKHByb3BlcnR5SW5mby5wYXRoKT8udGFyZ2V0T2JqZWN0O1xuXHRcdFx0XHRcdHByb3BlcnR5SW5mb1tcImhhc1ZhbHVlSGVscFwiXSA9IHByb3BlcnR5ID8gUHJvcGVydHlIZWxwZXIuaGFzVmFsdWVIZWxwKHByb3BlcnR5KSA6IGZhbHNlO1xuXHRcdFx0XHRcdHByb3BlcnR5SW5mb1tcImRhdGFUeXBlXCJdID0gKHByb3BlcnR5SW5mbz8udHlwZUNvbmZpZz8uY2xhc3NOYW1lIGFzIHN0cmluZykgfHwgcHJvcGVydHlJbmZvLmRhdGFUeXBlO1xuXHRcdFx0XHR9XG5cdFx0XHR9XG5cdFx0fSk7XG5cdFx0cmV0dXJuIHByb3BlcnR5SW5mb3M7XG5cdH0sXG5cblx0LyoqXG5cdCAqIFNldHMgc2VsZWN0aW9uIHZhcmlhbnQgdG8gdGhlIHRhYmxlLiBOb3RlOiBzZXRTZWxlY3Rpb25WYXJpYW50IHdpbGwgY2xlYXIgdGhlIGV4aXN0aW5nIGZpbHRlcnMgYW5kIHRoZW4gYXBwbHkgdGhlIFNlbGVjdGlvblZhcmlhbnQgdmFsdWVzLlxuXHQgKiBAcGFyYW0gY29udHJvbEluc3RhbmNlIFRoaXMgY291bGQgYmUgYSB0YWJsZSwgY2hhcnQsIG9yIGZpbHRlciBiYXJcblx0ICogQHBhcmFtIHNlbGVjdGlvblZhcmlhbnQgVGhlIHNlbGVjdGlvbiB2YXJpYW50IHRvIGFwcGx5IHRvIHRoZSByZXNwZWN0aXZlIG1kYyBjb250cm9sc1xuXHQgKiBAcGFyYW0gcHJlZmlsbERlc2NyaXB0aW9ucyBPcHRpb25hbC4gSWYgdHJ1ZSwgd2Ugd2lsbCB1c2UgdGhlIGFzc29jaWF0ZWQgdGV4dCBwcm9wZXJ0eSB2YWx1ZXMgKGlmIHRoZXkncmUgYXZhaWxhYmxlIGluIHRoZSBzZWxlY3Rpb25WYXJpYW50KSB0byBkaXNwbGF5IHRoZSBmaWx0ZXIgdmFsdWUgZGVzY3JpcHRpb25zLCBpbnN0ZWFkIG9mIGxvYWRpbmcgdGhlbSBmcm9tIHRoZSBiYWNrZW5kXG5cdCAqIEByZXR1cm5zIEEgcHJvbWlzZSBmb3IgYXN5bmNocm9ub3VzIGhhbmRsaW5nXG5cdCAqIEBwdWJsaWNcblx0ICovXG5cdGFzeW5jIHNldFNlbGVjdGlvblZhcmlhbnRUb01kY0NvbnRyb2woXG5cdFx0Y29udHJvbEluc3RhbmNlOiBDb3JlQ29udHJvbCB8IHVuZGVmaW5lZCxcblx0XHRzZWxlY3Rpb25WYXJpYW50OiBTZWxlY3Rpb25WYXJpYW50LFxuXHRcdHByZWZpbGxEZXNjcmlwdGlvbnMgPSBmYWxzZVxuXHQpOiBQcm9taXNlPHsgZGlmZlN0YXRlOiBFeHRlcm5hbFN0YXRlVHlwZTsgYXBwbHlTdGF0ZVJlc3VsdDogdW5rbm93biB9IHwgdW5kZWZpbmVkPiB7XG5cdFx0dHJ5IHtcblx0XHRcdGNvbnN0IHN0YXRlOiBFeHRlcm5hbFN0YXRlVHlwZSA9IGF3YWl0IFN0YXRlVXRpbC5yZXRyaWV2ZUV4dGVybmFsU3RhdGUoY29udHJvbEluc3RhbmNlIGFzIENvbnRyb2wpO1xuXHRcdFx0aWYgKCFzdGF0ZS5maWx0ZXIpIHtcblx0XHRcdFx0TG9nLmVycm9yKGBGRSA6IHNldFNlbGVjdGlvblZhcmlhbnQgQVBJIGNhbm5vdCBiZSBhcHBsaWVkIG9uIDogJHtjb250cm9sSW5zdGFuY2U/LmdldElkKCl9YCk7XG5cdFx0XHRcdHJldHVybjtcblx0XHRcdH1cblx0XHRcdGNvbnN0IGNvbmRpdGlvbnM6IFN0YXRlVXRpbEZpbHRlciA9IGF3YWl0IHRoaXMuY29udmVydFNlbGVjdGlvblZhcmlhbnRUb1N0YXRlRmlsdGVycyhcblx0XHRcdFx0Y29udHJvbEluc3RhbmNlIGFzIENvbnRyb2wsXG5cdFx0XHRcdHNlbGVjdGlvblZhcmlhbnQsXG5cdFx0XHRcdHByZWZpbGxEZXNjcmlwdGlvbnMsXG5cdFx0XHRcdGNvbnRyb2xJbnN0YW5jZT8uZ2V0TW9kZWwoKVxuXHRcdFx0KTtcblxuXHRcdFx0Ly8gQ2xlYXIgZmlsdGVyIG9mIHRhYmxlIGJlZm9yZSBhcHBseWluZyBzZWxlY3Rpb24gdmFyaWFudFxuXHRcdFx0YXdhaXQgdGhpcy5jbGVhckZpbHRlclZhbHVlcyhjb250cm9sSW5zdGFuY2U/LmdldFBhcmVudCgpIGFzIE1hY3JvQVBJKTtcblxuXHRcdFx0Ly8gU3RhdGUgdG8gYXBwbHlcblx0XHRcdGNvbnN0IHByb3BlcnR5SW5mb3MgPSBhd2FpdCB0aGlzLl9nZXRTdXBwb3J0ZWRGaWx0ZXJGaWVsZHMoY29udHJvbEluc3RhbmNlIGFzIENvbnRyb2wpO1xuXHRcdFx0Y29uc3Qgc3RhdGVUb0FwcGx5ID0gc3ZUb1N0YXRlRmlsdGVycy5nZXRTdGF0ZVRvQXBwbHkocHJvcGVydHlJbmZvcywgY29uZGl0aW9ucyk7XG5cdFx0XHRpZiAoY29udHJvbEluc3RhbmNlPy5pc0EoXCJzYXAudWkubWRjLkNoYXJ0XCIpKSB7XG5cdFx0XHRcdHRoaXMuY29udmVydENvbmRpdGlvbnNGb3JDaGFydChzdGF0ZVRvQXBwbHkpO1xuXHRcdFx0fVxuXHRcdFx0Y29uc3QgZGlmZlN0YXRlOiBFeHRlcm5hbFN0YXRlVHlwZSA9IGF3YWl0IFN0YXRlVXRpbC5kaWZmU3RhdGUoY29udHJvbEluc3RhbmNlIGFzIENvbnRyb2wsIHN0YXRlLCBzdGF0ZVRvQXBwbHkpO1xuXHRcdFx0Y29uc3QgYXBwbHlTdGF0ZVJlc3VsdCA9IGF3YWl0IFN0YXRlVXRpbC5hcHBseUV4dGVybmFsU3RhdGUoY29udHJvbEluc3RhbmNlIGFzIENvbnRyb2wsIHN0YXRlVG9BcHBseSk7XG5cdFx0XHRyZXR1cm4ge1xuXHRcdFx0XHRkaWZmU3RhdGUsXG5cdFx0XHRcdGFwcGx5U3RhdGVSZXN1bHRcblx0XHRcdH07XG5cdFx0fSBjYXRjaCAoZXJyOiB1bmtub3duKSB7XG5cdFx0XHRjb25zdCBpZDogc3RyaW5nIHwgdW5kZWZpbmVkID0gY29udHJvbEluc3RhbmNlPy5nZXRJZCgpO1xuXHRcdFx0Y29uc3QgbWVzc2FnZSA9IGVyciBpbnN0YW5jZW9mIEVycm9yID8gZXJyLm1lc3NhZ2UgOiBTdHJpbmcoZXJyKTtcblx0XHRcdExvZy5lcnJvcihgRkUgOiBCdWlsZGluZ0Jsb2NrICgke2lkfSkgLSBzZXQgc2VsZWN0aW9uIHZhcmlhbnQgZmFpbGVkICA6ICR7bWVzc2FnZX1gKTtcblx0XHRcdHRocm93IEVycm9yKG1lc3NhZ2UpO1xuXHRcdH1cblx0fSxcblx0LyoqXG5cdCAqIENvbnZlcnQgdGhlIGNoYXJ0IHByb3BlcnRpZXMgdG8gaW50ZXJuYWwgcHJvcGVydGllcyBiZWZvcmUgYXBwbHlpbmcgdGhlIGNvbmRpdGlvbnMuXG5cdCAqIEBwYXJhbSBzdGF0ZVRvQXBwbHkgVGhpcyBjb250YWlucyB0aGUgaW5mb3JtYXRpb24gcmVnYXJkaW5nIGZpbHRlciBhbmQgY29uZGl0aW9uc1xuXHQgKi9cblx0Y29udmVydENvbmRpdGlvbnNGb3JDaGFydChzdGF0ZVRvQXBwbHk6IFN0YXRlVG9BcHBseSk6IHZvaWQge1xuXHRcdC8vIHJlcGxhY2Uga2V5cyBvZiBmaWx0ZXIgb2JqZWN0IGZyb20gXCJTYWxlc09kZXJcIiB0byBpbnRlcm5hbCBmb3JtYXQgXCJfZmVfZ3JvdXBhYmxlX1NhbGVzT3JkZXJcIlxuXHRcdGZvciAoY29uc3QgcHJvcGVydHkgaW4gc3RhdGVUb0FwcGx5LmZpbHRlcikge1xuXHRcdFx0ZGVsZXRlIE9iamVjdC5hc3NpZ24oc3RhdGVUb0FwcGx5LmZpbHRlciwgeyBbXCJfZmVfZ3JvdXBhYmxlX1wiICsgcHJvcGVydHldOiBzdGF0ZVRvQXBwbHkuZmlsdGVyW3Byb3BlcnR5XSB9KVtwcm9wZXJ0eV07XG5cdFx0fVxuXHRcdC8vIHJlcGxhY2Uga2V5cyBvZiBpdGVtcyBhcnJheSBmcm9tIFwiU2FsZXNPZGVyXCIgdG8gaW50ZXJuYWwgZm9ybWF0IFwiX2ZlX2dyb3VwYWJsZV9TYWxlc09yZGVyXCJcblx0XHRzdGF0ZVRvQXBwbHkuaXRlbXMuZm9yRWFjaCgocHJvcGVydHlPYmo6IHsgbmFtZTogc3RyaW5nIH0pID0+IHtcblx0XHRcdHByb3BlcnR5T2JqLm5hbWUgPSBcIl9mZV9ncm91cGFibGVfXCIgKyBwcm9wZXJ0eU9iai5uYW1lO1xuXHRcdH0pO1xuXHR9XG59O1xuXG5leHBvcnQgdHlwZSBDb250cm9sUHJvcGVydHlJbmZvID0gUHJvcGVydHlJbmZvICYge1xuXHRjb25kaXRpb25QYXRoOiBzdHJpbmc7XG5cdGRhdGFUeXBlOiBzdHJpbmc7XG5cdGFubm90YXRpb25QYXRoPzogc3RyaW5nO1xuXHRtZXRhZGF0YVBhdGg/OiBzdHJpbmc7XG5cdGlzUGFyYW1ldGVyPzogYm9vbGVhbjtcblx0aGlkZGVuRmlsdGVyPzogYm9vbGVhbjtcblx0aGFzVmFsdWVIZWxwPzogYm9vbGVhbjtcblx0cmVxdWlyZWQ/OiBib29sZWFuO1xufTtcblxu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
260
+ //# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJuYW1lcyI6WyJTdGF0ZUhlbHBlciIsImdldFNlbGVjdGlvblZhcmlhbnQiLCJjb250cm9sIiwiY29udHJvbFN0YXRlIiwiU3RhdGVVdGlsIiwicmV0cmlldmVFeHRlcm5hbFN0YXRlIiwiY29udHJvbE9iamVjdCIsImZpbHRlciIsInBhcmFtZXRlcnMiLCJnZXRQYXJlbnQiLCJpc0EiLCJnZXRQYXJhbWV0ZXJzIiwidW5kZWZpbmVkIiwic2VsZWN0aW9uVmFyaWFudCIsIlN0YXRlRmlsdGVyc1RvU2VsZWN0aW9uVmFyaWFudCIsImdldFNlbGVjdGlvblZhcmlhbnRGcm9tQ29uZGl0aW9ucyIsImdldFByb3BlcnR5SGVscGVyIiwiZXh0ZXJuYWxTViIsIlNlbGVjdGlvblZhcmlhbnQiLCJzZWxlY3RPcHRpb25zIiwiX2dldFNlbGVjdE9wdGlvbnMiLCJwcm9wZXJ0eSIsIm1hc3NBZGRTZWxlY3RPcHRpb24iLCJzcGxpdCIsImVycm9yIiwiaWQiLCJnZXRJZCIsIm1lc3NhZ2UiLCJFcnJvciIsIlN0cmluZyIsIkxvZyIsImNvbnZlcnRTZWxlY3Rpb25WYXJpYW50VG9TdGF0ZUZpbHRlcnMiLCJwcmVmaWxsRGVzY3JpcHRpb25zIiwibW9kZWwiLCJwcm9wZXJ0eUluZm9zIiwiX2dldFN1cHBvcnRlZEZpbHRlckZpZWxkcyIsImxlbmd0aCIsImZpbHRlckJhckluZm9Gb3JDb252ZXJzaW9uIiwiX2dldENvbnRyb2xJbmZvRm9yQ29udmVyc2lvbiIsIm1ldGFNb2RlbCIsImdldE1ldGFNb2RlbCIsImNvcHlvZlByb3BlcnR5SW5mb3MiLCJKU09OIiwicGFyc2UiLCJzdHJpbmdpZnkiLCJ1cGRhdGVkUHJvcGVydHlJbmZvcyIsIl91cGRhdGVQcm9wZXJ0eUluZm9Ub1N1cHBvcnRTViIsImNvbmRpdGlvbnMiLCJzdlRvU3RhdGVGaWx0ZXJzIiwiZ2V0U3RhdGVGaWx0ZXJzRnJvbVNWIiwiZ2V0TW9kZWwiLCJjb250ZXh0UGF0aCIsImRhdGEiLCJ1c2VTZW1hbnRpY0RhdGVSYW5nZSIsInZpZXdEYXRhSW5zdGFuY2UiLCJ2aWV3RGF0YSIsImdldERhdGEiLCJjb25maWciLCJjb250cm9sQ29uZmlndXJhdGlvbiIsInNlbGVjdGlvbkZpZWxkc0NvbmZpZ3MiLCJmaWx0ZXJGaWVsZHNDb25maWciLCJmaWx0ZXJGaWVsZHMiLCJnZXRFbmhhbmNlZEZldGNoZWRQcm9wZXJ0eUluZm9zIiwid2FpdEZvckluaXRpYWxpemF0aW9uIiwiZ2V0Q29udHJvbERlbGVnYXRlIiwiZmV0Y2hGaWx0ZXJQcm9wZXJ0aWVzIiwiYXdhaXRDb250cm9sRGVsZWdhdGUiLCJmZXRjaFByb3BlcnRpZXMiLCJjbGVhckZpbHRlclZhbHVlcyIsImNvbnRyb2xJbnN0YW5jZSIsIl9jbGVhckZpbHRlclZhbHVlc1dpdGhPcHRpb25zIiwiY29udGVudCIsImZpcmVFdmVudCIsIm9wdGlvbnMiLCJzdGF0ZSIsImVkaXRTdGF0ZVBhdGgiLCJjdXJyZW50RWRpdFN0YXRlQ29uZGl0aW9uIiwiZWRpdFN0YXRlRGVmYXVsdFZhbHVlIiwiY3VycmVudEVkaXRTdGF0ZUlzRGVmYXVsdCIsInNob3VsZENsZWFyRWRpdEZpbHRlciIsIkRyYWZ0RWRpdFN0YXRlIiwiQUxMIiwiZGVlcENsb25lIiwidmFsdWVzIiwiT2JqZWN0Iiwia2V5cyIsImNsZWFyRWRpdEZpbHRlciIsImNvbmRpdGlvblBhdGgiLCJjb25kaXRpb24iLCJmaWx0ZXJlZCIsImFwcGx5RXh0ZXJuYWxTdGF0ZSIsImNsZWFuVXBBbGxGaWx0ZXJGaWVsZHNJbkVycm9yU3RhdGUiLCJmb3JFYWNoIiwicHJvcGVydHlJbmZvIiwibmFtZSIsIlByb3BlcnR5SGVscGVyIiwiaGFzVmFsdWVIZWxwIiwiZ2V0UHJvcGVydHkiLCJwYXRoIiwiZ2V0UHJvcGVydHlEYXRhTW9kZWwiLCJ0YXJnZXRPYmplY3QiLCJ0eXBlQ29uZmlnIiwiY2xhc3NOYW1lIiwiZGF0YVR5cGUiLCJzZXRTZWxlY3Rpb25WYXJpYW50VG9NZGNDb250cm9sIiwiYXJndW1lbnRzIiwic3RhdGVUb0FwcGx5IiwiZ2V0U3RhdGVUb0FwcGx5IiwiY29udmVydENvbmRpdGlvbnNGb3JDaGFydCIsImRpZmZTdGF0ZSIsImFwcGx5U3RhdGVSZXN1bHQiLCJlcnIiLCJhc3NpZ24iLCJpdGVtcyIsInByb3BlcnR5T2JqIl0sInNvdXJjZVJvb3QiOiIuIiwic291cmNlcyI6WyJTdGF0ZUhlbHBlci50cyJdLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgTG9nIGZyb20gXCJzYXAvYmFzZS9Mb2dcIjtcbmltcG9ydCBkZWVwQ2xvbmUgZnJvbSBcInNhcC9iYXNlL3V0aWwvZGVlcENsb25lXCI7XG5pbXBvcnQgdHlwZSB7IFZpZXdEYXRhIH0gZnJvbSBcInNhcC9mZS9jb3JlL3NlcnZpY2VzL1RlbXBsYXRlZFZpZXdTZXJ2aWNlRmFjdG9yeVwiO1xuaW1wb3J0ICogYXMgUHJvcGVydHlIZWxwZXIgZnJvbSBcInNhcC9mZS9jb3JlL3RlbXBsYXRpbmcvUHJvcGVydHlIZWxwZXJcIjtcbmltcG9ydCB0eXBlIFRhYmxlQVBJIGZyb20gXCJzYXAvZmUvbWFjcm9zL1RhYmxlXCI7XG5pbXBvcnQgRHJhZnRFZGl0U3RhdGUgZnJvbSBcInNhcC9mZS9tYWNyb3MvZmlsdGVyQmFyL0RyYWZ0RWRpdFN0YXRlXCI7XG5pbXBvcnQgdHlwZSBGaWx0ZXJCYXJBUEkgZnJvbSBcInNhcC9mZS9tYWNyb3MvZmlsdGVyQmFyL0ZpbHRlckJhckFQSVwiO1xuaW1wb3J0IHR5cGUgeyBQcm9wZXJ0eUluZm8gfSBmcm9tIFwic2FwL2ZlL21hY3Jvcy9pbnRlcm5hbC9Qcm9wZXJ0eUluZm9cIjtcbmltcG9ydCB0eXBlIHsgQ29udmVyc2lvbkluZm8gfSBmcm9tIFwic2FwL2ZlL21hY3Jvcy9tZGMvYWRhcHRlci9TZWxlY3Rpb25WYXJpYW50VG9TdGF0ZUZpbHRlcnNcIjtcbmltcG9ydCBzdlRvU3RhdGVGaWx0ZXJzIGZyb20gXCJzYXAvZmUvbWFjcm9zL21kYy9hZGFwdGVyL1NlbGVjdGlvblZhcmlhbnRUb1N0YXRlRmlsdGVyc1wiO1xuaW1wb3J0IFN0YXRlRmlsdGVyc1RvU2VsZWN0aW9uVmFyaWFudCBmcm9tIFwic2FwL2ZlL21hY3Jvcy9tZGMvYWRhcHRlci9TdGF0ZUZpbHRlclRvU2VsZWN0aW9uVmFyaWFudFwiO1xuaW1wb3J0IHR5cGUgeyBFeHRlcm5hbFN0YXRlVHlwZSB9IGZyb20gXCJzYXAvZmUvbWFjcm9zL3ZhbHVlaGVscC9WYWx1ZUhlbHBEZWxlZ2F0ZVwiO1xuaW1wb3J0IFNlbGVjdGlvblZhcmlhbnQgZnJvbSBcInNhcC9mZS9uYXZpZ2F0aW9uL1NlbGVjdGlvblZhcmlhbnRcIjtcbmltcG9ydCB0eXBlIENvcmVDb250cm9sIGZyb20gXCJzYXAvdWkvY29yZS9Db250cm9sXCI7XG5pbXBvcnQgdHlwZSBDaGFydCBmcm9tIFwic2FwL3VpL21kYy9DaGFydFwiO1xuaW1wb3J0IHR5cGUgQ29udHJvbCBmcm9tIFwic2FwL3VpL21kYy9Db250cm9sXCI7XG5pbXBvcnQgdHlwZSBGaWx0ZXJCYXIgZnJvbSBcInNhcC91aS9tZGMvRmlsdGVyQmFyXCI7XG5pbXBvcnQgdHlwZSBUYWJsZSBmcm9tIFwic2FwL3VpL21kYy9UYWJsZVwiO1xuaW1wb3J0IHR5cGUgeyBTdGF0ZVRvQXBwbHksIEZpbHRlciBhcyBTdGF0ZVV0aWxGaWx0ZXIgfSBmcm9tIFwic2FwL3VpL21kYy9wMTNuL1N0YXRlVXRpbFwiO1xuaW1wb3J0IFN0YXRlVXRpbCBmcm9tIFwic2FwL3VpL21kYy9wMTNuL1N0YXRlVXRpbFwiO1xuaW1wb3J0IHR5cGUgTW9kZWwgZnJvbSBcInNhcC91aS9tb2RlbC9Nb2RlbFwiO1xuaW1wb3J0IHR5cGUgSlNPTk1vZGVsIGZyb20gXCJzYXAvdWkvbW9kZWwvanNvbi9KU09OTW9kZWxcIjtcbmltcG9ydCB0eXBlIE9EYXRhTWV0YU1vZGVsIGZyb20gXCJzYXAvdWkvbW9kZWwvb2RhdGEvdjQvT0RhdGFNZXRhTW9kZWxcIjtcbmltcG9ydCB0eXBlIENoYXJ0VHlwZSBmcm9tIFwiLi4vLi4vQ2hhcnRcIjtcbmltcG9ydCB0eXBlIE1hY3JvQVBJIGZyb20gXCIuLi8uLi9NYWNyb0FQSVwiO1xuXG4vKipcbiAqIFRoaXMgaXMgdG8gZXh0ZW5kIE1EQyBjb250cm9sIEFQSXMgZm9yIGZpbHRlciwgdGFibGUsIGNoYXJ0IGJ1aWxkaW5nIGJsb2Nrcy5cbiAqIEBwdWJsaWNcbiAqL1xuXG5jb25zdCBTdGF0ZUhlbHBlciA9IHtcblx0LyoqXG5cdCAqIEdldHMgc2VsZWN0aW9uIHZhcmlhbnQgZnJvbSB0aGUgbWRjIGNvbnRyb2wuXG5cdCAqIEBwYXJhbSBjb250cm9sIFRoZSBjb250cm9sIGZvciB3aGljaCBTZWxlY3Rpb24gVmFyaWFudCBpcyB0byBiZSBmZXRjaGVkXG5cdCAqIEByZXR1cm5zIEEgcHJvbWlzZSB3aGljaCByZXNvbHZlcyB3aXRoIGEge0BsaW5rIHNhcC5mZS5uYXZpZ2F0aW9uLlNlbGVjdGlvblZhcmlhbnR9XG5cdCAqIEBwdWJsaWNcblx0ICovXG5cdGFzeW5jIGdldFNlbGVjdGlvblZhcmlhbnQoY29udHJvbDogQ29yZUNvbnRyb2wgfCB1bmRlZmluZWQpOiBQcm9taXNlPFNlbGVjdGlvblZhcmlhbnQ+IHtcblx0XHR0cnkge1xuXHRcdFx0Y29uc3QgY29udHJvbFN0YXRlID0gYXdhaXQgU3RhdGVVdGlsLnJldHJpZXZlRXh0ZXJuYWxTdGF0ZShjb250cm9sIGFzIENvbnRyb2wpO1xuXHRcdFx0Y29uc3QgY29udHJvbE9iamVjdCA9IGNvbnRyb2xTdGF0ZS5maWx0ZXIgYXMgU3RhdGVVdGlsRmlsdGVyO1xuXHRcdFx0bGV0IHBhcmFtZXRlcnM6IHN0cmluZ1tdIHwgdW5kZWZpbmVkID0gW107XG5cdFx0XHRpZiAoXG5cdFx0XHRcdGNvbnRyb2w/LmdldFBhcmVudCgpPy5pc0EoXCJzYXAuZmUubWFjcm9zLmZpbHRlckJhci5GaWx0ZXJCYXJBUElcIikgJiZcblx0XHRcdFx0KGNvbnRyb2wuZ2V0UGFyZW50KCkgYXMgRmlsdGVyQmFyQVBJKS5nZXRQYXJhbWV0ZXJzICE9PSB1bmRlZmluZWRcblx0XHRcdCkge1xuXHRcdFx0XHRwYXJhbWV0ZXJzID0gKGNvbnRyb2wuZ2V0UGFyZW50KCkgYXMgRmlsdGVyQmFyQVBJKS5nZXRQYXJhbWV0ZXJzKCk7XG5cdFx0XHR9XG5cdFx0XHRjb25zdCBzZWxlY3Rpb25WYXJpYW50ID0gU3RhdGVGaWx0ZXJzVG9TZWxlY3Rpb25WYXJpYW50LmdldFNlbGVjdGlvblZhcmlhbnRGcm9tQ29uZGl0aW9ucyhcblx0XHRcdFx0Y29udHJvbE9iamVjdCxcblx0XHRcdFx0KGNvbnRyb2wgYXMgQ29udHJvbCkuZ2V0UHJvcGVydHlIZWxwZXIoKSxcblx0XHRcdFx0cGFyYW1ldGVyc1xuXHRcdFx0KTtcblx0XHRcdGlmIChjb250cm9sPy5pc0EoXCJzYXAudWkubWRjLkNoYXJ0XCIpKSB7XG5cdFx0XHRcdGNvbnN0IGV4dGVybmFsU1YgPSBuZXcgU2VsZWN0aW9uVmFyaWFudCgpO1xuXHRcdFx0XHRjb25zdCBzZWxlY3RPcHRpb25zID0gc2VsZWN0aW9uVmFyaWFudC5fZ2V0U2VsZWN0T3B0aW9ucygpO1xuXHRcdFx0XHRmb3IgKGNvbnN0IHByb3BlcnR5IGluIHNlbGVjdE9wdGlvbnMpIHtcblx0XHRcdFx0XHRleHRlcm5hbFNWLm1hc3NBZGRTZWxlY3RPcHRpb24ocHJvcGVydHkuc3BsaXQoXCJfZmVfZ3JvdXBhYmxlX1wiKVsxXSwgc2VsZWN0T3B0aW9uc1twcm9wZXJ0eV0pO1xuXHRcdFx0XHR9XG5cdFx0XHRcdHJldHVybiBleHRlcm5hbFNWO1xuXHRcdFx0fSBlbHNlIHtcblx0XHRcdFx0cmV0dXJuIHNlbGVjdGlvblZhcmlhbnQ7XG5cdFx0XHR9XG5cdFx0fSBjYXRjaCAoZXJyb3I6IHVua25vd24pIHtcblx0XHRcdGNvbnN0IGlkOiBzdHJpbmcgfCB1bmRlZmluZWQgPSBjb250cm9sPy5nZXRJZCgpO1xuXHRcdFx0Y29uc3QgbWVzc2FnZSA9IGVycm9yIGluc3RhbmNlb2YgRXJyb3IgPyBlcnJvci5tZXNzYWdlIDogU3RyaW5nKGVycm9yKTtcblx0XHRcdExvZy5lcnJvcihgQnVpbGRpbmcgQmxvY2sgKCR7aWR9KSAtIGdldCBzZWxlY3Rpb24gdmFyaWFudCBmYWlsZWQgOiAke21lc3NhZ2V9YCk7XG5cdFx0XHR0aHJvdyBFcnJvcihtZXNzYWdlKTtcblx0XHR9XG5cdH0sXG5cblx0LyoqXG5cdCAqIENvbnZlcnQgc2VsZWN0aW9uIHZhcmlhbnQgdG8gY29uZGl0aW9ucy5cblx0ICogQHBhcmFtIGNvbnRyb2wgQ29udHJvbCBjYW4gYmUgYSB0YWJsZSwgY2hhcnQgb3IgZmlsdGVyIGJhclxuXHQgKiBAcGFyYW0gc2VsZWN0aW9uVmFyaWFudCBUaGUgc2VsZWN0aW9uIHZhcmlhbnQgdG8gYXBwbHkgdG8gdGhlIHRhYmxlIG9yIGNoYXJ0IG9yIGZpbHRlciBiYXIuXG5cdCAqIEBwYXJhbSBwcmVmaWxsRGVzY3JpcHRpb25zIElmIHRydWUsIHdlIHRyeSB0byBmaW5kIHRoZSBhc3NvY2lhdGVkIFRleHQgdmFsdWUgZm9yIGVhY2ggcHJvcGVydHkgaW4gdGhlIHNlbGVjdGlvblZhcmlhbnQgKHRvIGF2b2lkIGZldGNoaW5nIGl0IGZyb20gdGhlIHNlcnZlcilcblx0ICogQHBhcmFtIG1vZGVsIFRoZSBjb250cm9sIG1vZGVsXG5cdCAqIEByZXR1cm5zIEEgcHJvbWlzZSByZXNvbHZpbmcgdG8gY29uZGl0aW9uc1xuXHQgKi9cblx0YXN5bmMgY29udmVydFNlbGVjdGlvblZhcmlhbnRUb1N0YXRlRmlsdGVycyhcblx0XHRjb250cm9sOiBDb250cm9sLFxuXHRcdHNlbGVjdGlvblZhcmlhbnQ6IFNlbGVjdGlvblZhcmlhbnQsXG5cdFx0cHJlZmlsbERlc2NyaXB0aW9uczogYm9vbGVhbixcblx0XHRtb2RlbD86IE1vZGVsXG5cdCk6IFByb21pc2U8U3RhdGVVdGlsRmlsdGVyPiB7XG5cdFx0Ly8gTm90ZTogVGhpcyBtZXRob2QgaXMgcHJpdmF0ZSBhbmQgcmVzdHJpY3RlZCB0byB1c2FnZSBieSBzYXAuZmUoVmlld1N0YXRlIGNvbnRyb2xsZXIgZXh0ZW5zaW9uKSBmb3IgZmlsdGVyIGJhci8gY2hhcnQgLyB0YWJsZSBzdGF0ZSBzY2VuYXJpb3MuXG5cdFx0Y29uc3QgcHJvcGVydHlJbmZvcyA9IGF3YWl0IHRoaXMuX2dldFN1cHBvcnRlZEZpbHRlckZpZWxkcyhjb250cm9sKTtcblxuXHRcdGlmICghcHJvcGVydHlJbmZvcy5sZW5ndGgpIHtcblx0XHRcdHRocm93IG5ldyBFcnJvcihcIk5vIHZhbGlkIG1ldGFkYXRhIHByb3BlcnRpZXMgcHJlc2VudCBmb3IgZmlsdGVyIGJhclwiKTtcblx0XHR9XG5cblx0XHRjb25zdCBmaWx0ZXJCYXJJbmZvRm9yQ29udmVyc2lvbiA9IHRoaXMuX2dldENvbnRyb2xJbmZvRm9yQ29udmVyc2lvbihjb250cm9sKTtcblx0XHRjb25zdCBtZXRhTW9kZWwgPSBtb2RlbD8uZ2V0TWV0YU1vZGVsKCkgYXMgT0RhdGFNZXRhTW9kZWw7XG5cdFx0Y29uc3QgY29weW9mUHJvcGVydHlJbmZvcyA9IEpTT04ucGFyc2UoSlNPTi5zdHJpbmdpZnkocHJvcGVydHlJbmZvcykpO1xuXHRcdGNvbnN0IHVwZGF0ZWRQcm9wZXJ0eUluZm9zID0gdGhpcy5fdXBkYXRlUHJvcGVydHlJbmZvVG9TdXBwb3J0U1YoY29udHJvbCwgY29weW9mUHJvcGVydHlJbmZvcyk7XG5cdFx0Y29uc3QgY29uZGl0aW9uczogU3RhdGVVdGlsRmlsdGVyID0gc3ZUb1N0YXRlRmlsdGVycy5nZXRTdGF0ZUZpbHRlcnNGcm9tU1YoXG5cdFx0XHRzZWxlY3Rpb25WYXJpYW50LFxuXHRcdFx0ZmlsdGVyQmFySW5mb0ZvckNvbnZlcnNpb24sXG5cdFx0XHR1cGRhdGVkUHJvcGVydHlJbmZvcyA/PyBjb3B5b2ZQcm9wZXJ0eUluZm9zLFxuXHRcdFx0cHJlZmlsbERlc2NyaXB0aW9ucyxcblx0XHRcdG1ldGFNb2RlbFxuXHRcdCk7XG5cblx0XHRyZXR1cm4gY29uZGl0aW9ucztcblx0fSxcblxuXHQvKipcblx0ICogR2V0IHRoZSBmaWx0ZXIgaW5mb3JtYXRpb24gbmVlZGVkIGZvciB0aGUgY29udmVyc2lvbiBvZiBzZWxlY3Rpb24gdmFyaWFudCB0byBjb25kaXRpb25zLlxuXHQgKiBAcGFyYW0gY29udHJvbCBUaGlzIGNhbiBiZSBhIHRhYmxlLCBjaGFydCwgb3IgZmlsdGVyYmFyXG5cdCAqIEByZXR1cm5zIFRoZSBjb250cm9sIGluZm9ybWF0aW9uIChtZXRhTW9kZWwsIGNvbnRleHRQYXRoLCB1c2Ugb2Ygc2VtYW50aWMgZGF0ZSByYW5nZSwgYWxsIGZpbHRlciBmaWVsZHMgY29uZmlnKVxuXHQgKi9cblx0X2dldENvbnRyb2xJbmZvRm9yQ29udmVyc2lvbihjb250cm9sOiBDb250cm9sKTogQ29udmVyc2lvbkluZm8ge1xuXHRcdGNvbnN0IG1ldGFNb2RlbCA9IGNvbnRyb2wuZ2V0TW9kZWwoKT8uZ2V0TWV0YU1vZGVsKCkgYXMgT0RhdGFNZXRhTW9kZWwsXG5cdFx0XHRjb250ZXh0UGF0aCA9IGNvbnRyb2wuZGF0YShcImVudGl0eVR5cGVcIikgYXMgc3RyaW5nO1xuXHRcdGlmIChjb250cm9sLmlzQShcInNhcC5mZS5tYWNyb3MuY29udHJvbHMuRmlsdGVyQmFyXCIpKSB7XG5cdFx0XHRjb25zdCB1c2VTZW1hbnRpY0RhdGVSYW5nZTogYm9vbGVhbiA9XG5cdFx0XHRcdFx0Y29udHJvbC5kYXRhKFwidXNlU2VtYW50aWNEYXRlUmFuZ2VcIikgPT09IFwidHJ1ZVwiIHx8IGNvbnRyb2wuZGF0YShcInVzZVNlbWFudGljRGF0ZVJhbmdlXCIpID09PSB0cnVlLFxuXHRcdFx0XHR2aWV3RGF0YUluc3RhbmNlID0gY29udHJvbC5nZXRNb2RlbChcInZpZXdEYXRhXCIpIGFzIEpTT05Nb2RlbCxcblx0XHRcdFx0dmlld0RhdGEgPSB2aWV3RGF0YUluc3RhbmNlLmdldERhdGEoKSBhcyBWaWV3RGF0YSxcblx0XHRcdFx0Y29uZmlnID0gdmlld0RhdGE/LmNvbnRyb2xDb25maWd1cmF0aW9uLFxuXHRcdFx0XHRzZWxlY3Rpb25GaWVsZHNDb25maWdzID0gY29uZmlnPy5bXCJAY29tLnNhcC52b2NhYnVsYXJpZXMuVUkudjEuU2VsZWN0aW9uRmllbGRzXCJdLFxuXHRcdFx0XHRmaWx0ZXJGaWVsZHNDb25maWcgPSBzZWxlY3Rpb25GaWVsZHNDb25maWdzPy5maWx0ZXJGaWVsZHM7XG5cdFx0XHRyZXR1cm4geyBtZXRhTW9kZWwsIGNvbnRleHRQYXRoLCB1c2VTZW1hbnRpY0RhdGVSYW5nZSwgZmlsdGVyRmllbGRzQ29uZmlnLCBzZWxlY3Rpb25GaWVsZHNDb25maWdzIH07XG5cdFx0fSBlbHNlIHtcblx0XHRcdHJldHVybiB7IG1ldGFNb2RlbCwgY29udGV4dFBhdGggfTtcblx0XHR9XG5cdH0sXG5cblx0LyoqXG5cdCAqIEdldCBzdXBwb3J0ZWQgZmlsdGVyIGZpZWxkIHByb3BlcnRpZXMgZnJvbSB0aGUgdGFibGUsIGNoYXJ0LCBvciBmaWx0ZXIgYmFyLlxuXHQgKiBAcGFyYW0gY29udHJvbCBDb250cm9sIGNhbiBiZSBhIHRhYmxlLCBjaGFydCwgb3IgZmlsdGVyIGJhclxuXHQgKiBAcmV0dXJucyBTdXBwb3J0ZWQgZmlsdGVyIGZpZWxkcy5cblx0ICovXG5cdGFzeW5jIF9nZXRTdXBwb3J0ZWRGaWx0ZXJGaWVsZHMoY29udHJvbDogQ29udHJvbCk6IFByb21pc2U8Q29udHJvbFByb3BlcnR5SW5mb1tdPiB7XG5cdFx0aWYgKChjb250cm9sIGFzIFRhYmxlKS5pc0EoXCJzYXAudWkubWRjLlRhYmxlXCIpKSB7XG5cdFx0XHRyZXR1cm4gKChjb250cm9sIGFzIFRhYmxlKS5nZXRQYXJlbnQoKSBhcyBUYWJsZUFQSSkuZ2V0RW5oYW5jZWRGZXRjaGVkUHJvcGVydHlJbmZvcygpIGFzIHVua25vd24gYXMgQ29udHJvbFByb3BlcnR5SW5mb1tdO1xuXHRcdH0gZWxzZSBpZiAoY29udHJvbC5pc0EoXCJzYXAudWkubWRjLkZpbHRlcmJhclwiKSkge1xuXHRcdFx0YXdhaXQgKGNvbnRyb2wgYXMgRmlsdGVyQmFyKS53YWl0Rm9ySW5pdGlhbGl6YXRpb24oKTtcblx0XHRcdHJldHVybiAoY29udHJvbCBhcyBGaWx0ZXJCYXIpLmdldENvbnRyb2xEZWxlZ2F0ZSgpLmZldGNoRmlsdGVyUHJvcGVydGllcyhjb250cm9sKTtcblx0XHR9IGVsc2UgaWYgKChjb250cm9sIGFzIEZpbHRlckJhcikuaXNBKFwic2FwLmZlLm1hY3Jvcy5jb250cm9scy5GaWx0ZXJCYXJcIikpIHtcblx0XHRcdHJldHVybiAoY29udHJvbCBhcyBGaWx0ZXJCYXIpLmdldENvbnRyb2xEZWxlZ2F0ZSgpLmZldGNoRmlsdGVyUHJvcGVydGllcyhjb250cm9sKTtcblx0XHR9IGVsc2Uge1xuXHRcdFx0YXdhaXQgKGNvbnRyb2wgYXMgVGFibGUgfCBDaGFydCkuYXdhaXRDb250cm9sRGVsZWdhdGUoKTtcblx0XHR9XG5cdFx0cmV0dXJuIChjb250cm9sIGFzIFRhYmxlIHwgQ2hhcnQgfCBGaWx0ZXJCYXIpLmdldENvbnRyb2xEZWxlZ2F0ZSgpLmZldGNoUHJvcGVydGllcyhjb250cm9sKTtcblx0fSxcblxuXHQvKipcblx0ICogQ2xlYXJzIGFsbCBpbnB1dCB2YWx1ZXMgb2YgdmlzaWJsZSBmaWx0ZXIgZmllbGRzIGluIHRoZSB0YWJsZSwgY2hhcnQsIG9yIGZpbHRlciBiYXIuXG5cdCAqIEBwYXJhbSBjb250cm9sSW5zdGFuY2UgVGhpcyBjYW4gYmUgYSBmaWx0ZXIgYmFyLCBjaGFydCwgb3IgdGFibGUuXG5cdCAqL1xuXHRhc3luYyBjbGVhckZpbHRlclZhbHVlcyhjb250cm9sSW5zdGFuY2U6IE1hY3JvQVBJKTogUHJvbWlzZTx2b2lkPiB7XG5cdFx0YXdhaXQgdGhpcy5fY2xlYXJGaWx0ZXJWYWx1ZXNXaXRoT3B0aW9ucyhjb250cm9sSW5zdGFuY2UuY29udGVudCBhcyBDb250cm9sKTtcblx0XHQvLyBBbGxvdyBhcHAgZGV2ZWxvcGVycyB0byB1cGRhdGUgZmlsdGVycyBhZnRlciBjbGVhcmluZ1xuXHRcdGNvbnRyb2xJbnN0YW5jZS5maXJlRXZlbnQoXCJhZnRlckNsZWFyXCIpO1xuXHR9LFxuXG5cdC8qKlxuXHQgKiBDbGVhcnMgYWxsIGlucHV0IHZhbHVlcyBvZiB2aXNpYmxlIGZpbHRlciBmaWVsZHMgaW4gdGhlIHRhYmxlLCBjaGFydCwgb3IgZmlsdGVyIGJhci5cblx0ICogQHBhcmFtIGNvbnRyb2wgVGhpcyBjYW4gYmUgYSB0YWJsZSwgY2hhcnQsIG9yIGZpbHRlciBiYXJcblx0ICogQHBhcmFtIG9wdGlvbnMgT3B0aW9ucyBmb3IgZmlsdGVyaW5nIHRoZSBmaWx0ZXIgYmFyXG5cdCAqIEBwYXJhbSBvcHRpb25zLmNsZWFyRWRpdEZpbHRlciBXaGV0aGVyIHRvIGNsZWFyIHRoZSBlZGl0IGZpbHRlciBvciByZXRhaW4gdGhlIGRlZmF1bHQgdmFsdWUgJ0FsbCdcblx0ICovXG5cdGFzeW5jIF9jbGVhckZpbHRlclZhbHVlc1dpdGhPcHRpb25zKGNvbnRyb2w6IENvbnRyb2wsIG9wdGlvbnM/OiB7IGNsZWFyRWRpdEZpbHRlcjogYm9vbGVhbiB9KTogUHJvbWlzZTx2b2lkPiB7XG5cdFx0aWYgKCFjb250cm9sKSB7XG5cdFx0XHRyZXR1cm47XG5cdFx0fVxuXHRcdGNvbnN0IHN0YXRlOiBFeHRlcm5hbFN0YXRlVHlwZSA9IGF3YWl0IFN0YXRlVXRpbC5yZXRyaWV2ZUV4dGVybmFsU3RhdGUoY29udHJvbCk7XG5cdFx0bGV0IGVkaXRTdGF0ZVBhdGggPSBcIlwiLFxuXHRcdFx0Y3VycmVudEVkaXRTdGF0ZUNvbmRpdGlvbixcblx0XHRcdGVkaXRTdGF0ZURlZmF1bHRWYWx1ZSxcblx0XHRcdGN1cnJlbnRFZGl0U3RhdGVJc0RlZmF1bHQ6IGJvb2xlYW4gfCB1bmRlZmluZWQsXG5cdFx0XHRzaG91bGRDbGVhckVkaXRGaWx0ZXI6IHVuZGVmaW5lZCB8IGJvb2xlYW47XG5cdFx0aWYgKGNvbnRyb2wuaXNBPEZpbHRlckJhcj4oXCJzYXAudWkubWRjLkZpbHRlckJhclwiKSkge1xuXHRcdFx0ZWRpdFN0YXRlUGF0aCA9IFwiJGVkaXRTdGF0ZVwiO1xuXHRcdFx0ZWRpdFN0YXRlRGVmYXVsdFZhbHVlID0gRHJhZnRFZGl0U3RhdGUuQUxMLmlkO1xuXHRcdFx0Y3VycmVudEVkaXRTdGF0ZUNvbmRpdGlvbiA9IGRlZXBDbG9uZShzdGF0ZS5maWx0ZXJbZWRpdFN0YXRlUGF0aF0/LlswXSk7XG5cdFx0XHRjdXJyZW50RWRpdFN0YXRlSXNEZWZhdWx0ID0gY3VycmVudEVkaXRTdGF0ZUNvbmRpdGlvbj8udmFsdWVzWzBdID09PSBlZGl0U3RhdGVEZWZhdWx0VmFsdWU7XG5cdFx0XHRzaG91bGRDbGVhckVkaXRGaWx0ZXIgPSBvcHRpb25zICYmIE9iamVjdC5rZXlzKG9wdGlvbnMpLmxlbmd0aCA+IDAgJiYgb3B0aW9ucy5jbGVhckVkaXRGaWx0ZXI7XG5cdFx0fVxuXG5cdFx0Ly8gQ2xlYXIgYWxsIGNvbmRpdGlvbnNcblx0XHRmb3IgKGNvbnN0IGNvbmRpdGlvblBhdGggb2YgT2JqZWN0LmtleXMoc3RhdGUuZmlsdGVyKSkge1xuXHRcdFx0aWYgKCFzaG91bGRDbGVhckVkaXRGaWx0ZXIgJiYgY29uZGl0aW9uUGF0aCA9PT0gZWRpdFN0YXRlUGF0aCAmJiBjdXJyZW50RWRpdFN0YXRlSXNEZWZhdWx0KSB7XG5cdFx0XHRcdC8vIERvIG5vdCBjbGVhciBlZGl0IHN0YXRlIGNvbmRpdGlvbiBpZiBpdCBpcyBhbHJlYWR5IFwiQUxMXCJcblx0XHRcdFx0Y29udGludWU7XG5cdFx0XHR9XG5cdFx0XHRmb3IgKGNvbnN0IGNvbmRpdGlvbiBvZiBzdGF0ZS5maWx0ZXJbY29uZGl0aW9uUGF0aF0pIHtcblx0XHRcdFx0Y29uZGl0aW9uLmZpbHRlcmVkID0gZmFsc2U7XG5cdFx0XHR9XG5cdFx0fVxuXHRcdGF3YWl0IFN0YXRlVXRpbC5hcHBseUV4dGVybmFsU3RhdGUoY29udHJvbCwgeyBmaWx0ZXI6IHN0YXRlLmZpbHRlciB9KTtcblxuXHRcdGlmIChjb250cm9sLmlzQTxGaWx0ZXJCYXI+KFwic2FwLnVpLm1kYy5GaWx0ZXJCYXJcIikpIHtcblx0XHRcdC8vIFNldCBlZGl0IHN0YXRlIHRvICdBTEwnIGlmIGl0IHdhc24ndCBiZWZvcmVcblx0XHRcdGlmICghc2hvdWxkQ2xlYXJFZGl0RmlsdGVyICYmIGN1cnJlbnRFZGl0U3RhdGVDb25kaXRpb24gJiYgIWN1cnJlbnRFZGl0U3RhdGVJc0RlZmF1bHQpIHtcblx0XHRcdFx0Y3VycmVudEVkaXRTdGF0ZUNvbmRpdGlvbi52YWx1ZXMgPSBbZWRpdFN0YXRlRGVmYXVsdFZhbHVlXTtcblx0XHRcdFx0YXdhaXQgU3RhdGVVdGlsLmFwcGx5RXh0ZXJuYWxTdGF0ZShjb250cm9sLCB7IGZpbHRlcjogeyBbZWRpdFN0YXRlUGF0aF06IFtjdXJyZW50RWRpdFN0YXRlQ29uZGl0aW9uXSB9IH0pO1xuXHRcdFx0fVxuXG5cdFx0XHQvL2NsZWFyIGZpbHRlciBmaWVsZHMgaW4gZXJyb3Igc3RhdGVcblx0XHRcdGNvbnRyb2wuY2xlYW5VcEFsbEZpbHRlckZpZWxkc0luRXJyb3JTdGF0ZSgpO1xuXHRcdH1cblx0fSxcblxuXHQvKipcblx0ICogTWV0aG9kIHJldHVybnMgdGhlIGNvcHkgb2YgcHJvcGVydHlJbmZvIGJ5IGFkZGluZyBuZWNlc3NhcnkgZmllbGRzIHNvIHRoYXQgc2VsZWN0aW9uIHZhcmlhbnQgY2FuIGJlIHNldCB0byBhIGNvbnRyb2wgbGlrZSB0YWJsZSBhbmQgY2hhcnQuXG5cdCAqIEBwYXJhbSBjb250cm9sIFRoaXMgY291bGQgYmUgYSB0YWJsZSwgY2hhcnQsIG9yIGZpbHRlciBiYXJcblx0ICogQHBhcmFtIHByb3BlcnR5SW5mb3MgQXJyYXkgb2YgUHJvcGVydHlJbmZvIG9mIHRoZSBjb250cm9sXG5cdCAqIEByZXR1cm5zIFRoZSBkZWVwIGNsb25lIG9mIHByb3BlcnR5SW5mb3Mgd2l0aCBzb21lIGFkZGl0aW9uYWwgZmllbGRzXG5cdCAqL1xuXHRfdXBkYXRlUHJvcGVydHlJbmZvVG9TdXBwb3J0U1YoY29udHJvbDogQ29udHJvbCwgcHJvcGVydHlJbmZvczogQ29udHJvbFByb3BlcnR5SW5mb1tdKTogQ29udHJvbFByb3BlcnR5SW5mb1tdIHtcblx0XHRpZiAoY29udHJvbC5pc0EoXCJzYXAudWkubWRjLkZpbHRlckJhclwiKSkge1xuXHRcdFx0cmV0dXJuIHByb3BlcnR5SW5mb3M7XG5cdFx0fVxuXHRcdHByb3BlcnR5SW5mb3MuZm9yRWFjaCgocHJvcGVydHlJbmZvOiBDb250cm9sUHJvcGVydHlJbmZvKSA9PiB7XG5cdFx0XHRpZiAoKGNvbnRyb2wgYXMgQ29udHJvbCkuaXNBKFwic2FwLnVpLm1kYy5UYWJsZVwiKSkge1xuXHRcdFx0XHRwcm9wZXJ0eUluZm9bXCJjb25kaXRpb25QYXRoXCJdID0gcHJvcGVydHlJbmZvLm5hbWU7XG5cdFx0XHRcdHByb3BlcnR5SW5mb1tcImhhc1ZhbHVlSGVscFwiXSA9IFByb3BlcnR5SGVscGVyLmhhc1ZhbHVlSGVscChcblx0XHRcdFx0XHQoY29udHJvbCBhcyBUYWJsZSkuZ2V0UHJvcGVydHlIZWxwZXIoKS5nZXRQcm9wZXJ0eShwcm9wZXJ0eUluZm8ubmFtZSlcblx0XHRcdFx0KTtcblx0XHRcdH0gZWxzZSBpZiAoKGNvbnRyb2wgYXMgQ29udHJvbCkuaXNBKFwic2FwLnVpLm1kYy5DaGFydFwiKSkge1xuXHRcdFx0XHRpZiAocHJvcGVydHlJbmZvLnBhdGgpIHtcblx0XHRcdFx0XHRwcm9wZXJ0eUluZm9bXCJuYW1lXCJdID0gcHJvcGVydHlJbmZvLnBhdGg7XG5cdFx0XHRcdFx0cHJvcGVydHlJbmZvW1wiY29uZGl0aW9uUGF0aFwiXSA9IHByb3BlcnR5SW5mby5wYXRoO1xuXHRcdFx0XHRcdGNvbnN0IHByb3BlcnR5ID0gKChjb250cm9sIGFzIENoYXJ0KS5nZXRQYXJlbnQoKSBhcyBDaGFydFR5cGUpPy5nZXRQcm9wZXJ0eURhdGFNb2RlbChwcm9wZXJ0eUluZm8ucGF0aCk/LnRhcmdldE9iamVjdDtcblx0XHRcdFx0XHRwcm9wZXJ0eUluZm9bXCJoYXNWYWx1ZUhlbHBcIl0gPSBwcm9wZXJ0eSA/IFByb3BlcnR5SGVscGVyLmhhc1ZhbHVlSGVscChwcm9wZXJ0eSkgOiBmYWxzZTtcblx0XHRcdFx0XHRwcm9wZXJ0eUluZm9bXCJkYXRhVHlwZVwiXSA9IChwcm9wZXJ0eUluZm8/LnR5cGVDb25maWc/LmNsYXNzTmFtZSBhcyBzdHJpbmcpIHx8IHByb3BlcnR5SW5mby5kYXRhVHlwZTtcblx0XHRcdFx0fVxuXHRcdFx0fVxuXHRcdH0pO1xuXHRcdHJldHVybiBwcm9wZXJ0eUluZm9zO1xuXHR9LFxuXG5cdC8qKlxuXHQgKiBTZXRzIHNlbGVjdGlvbiB2YXJpYW50IHRvIHRoZSB0YWJsZS4gTm90ZTogc2V0U2VsZWN0aW9uVmFyaWFudCB3aWxsIGNsZWFyIHRoZSBleGlzdGluZyBmaWx0ZXJzIGFuZCB0aGVuIGFwcGx5IHRoZSBTZWxlY3Rpb25WYXJpYW50IHZhbHVlcy5cblx0ICogQHBhcmFtIGNvbnRyb2xJbnN0YW5jZSBUaGlzIGNvdWxkIGJlIGEgdGFibGUsIGNoYXJ0LCBvciBmaWx0ZXIgYmFyXG5cdCAqIEBwYXJhbSBzZWxlY3Rpb25WYXJpYW50IFRoZSBzZWxlY3Rpb24gdmFyaWFudCB0byBhcHBseSB0byB0aGUgcmVzcGVjdGl2ZSBtZGMgY29udHJvbHNcblx0ICogQHBhcmFtIHByZWZpbGxEZXNjcmlwdGlvbnMgT3B0aW9uYWwuIElmIHRydWUsIHdlIHdpbGwgdXNlIHRoZSBhc3NvY2lhdGVkIHRleHQgcHJvcGVydHkgdmFsdWVzIChpZiB0aGV5J3JlIGF2YWlsYWJsZSBpbiB0aGUgc2VsZWN0aW9uVmFyaWFudCkgdG8gZGlzcGxheSB0aGUgZmlsdGVyIHZhbHVlIGRlc2NyaXB0aW9ucywgaW5zdGVhZCBvZiBsb2FkaW5nIHRoZW0gZnJvbSB0aGUgYmFja2VuZFxuXHQgKiBAcmV0dXJucyBBIHByb21pc2UgZm9yIGFzeW5jaHJvbm91cyBoYW5kbGluZ1xuXHQgKiBAcHVibGljXG5cdCAqL1xuXHRhc3luYyBzZXRTZWxlY3Rpb25WYXJpYW50VG9NZGNDb250cm9sKFxuXHRcdGNvbnRyb2xJbnN0YW5jZTogQ29yZUNvbnRyb2wgfCB1bmRlZmluZWQsXG5cdFx0c2VsZWN0aW9uVmFyaWFudDogU2VsZWN0aW9uVmFyaWFudCxcblx0XHRwcmVmaWxsRGVzY3JpcHRpb25zID0gZmFsc2Vcblx0KTogUHJvbWlzZTx7IGRpZmZTdGF0ZTogRXh0ZXJuYWxTdGF0ZVR5cGU7IGFwcGx5U3RhdGVSZXN1bHQ6IHVua25vd24gfSB8IHVuZGVmaW5lZD4ge1xuXHRcdHRyeSB7XG5cdFx0XHRjb25zdCBzdGF0ZTogRXh0ZXJuYWxTdGF0ZVR5cGUgPSBhd2FpdCBTdGF0ZVV0aWwucmV0cmlldmVFeHRlcm5hbFN0YXRlKGNvbnRyb2xJbnN0YW5jZSBhcyBDb250cm9sKTtcblx0XHRcdGlmICghc3RhdGUuZmlsdGVyKSB7XG5cdFx0XHRcdExvZy5lcnJvcihgRkUgOiBzZXRTZWxlY3Rpb25WYXJpYW50IEFQSSBjYW5ub3QgYmUgYXBwbGllZCBvbiA6ICR7Y29udHJvbEluc3RhbmNlPy5nZXRJZCgpfWApO1xuXHRcdFx0XHRyZXR1cm47XG5cdFx0XHR9XG5cdFx0XHRjb25zdCBjb25kaXRpb25zOiBTdGF0ZVV0aWxGaWx0ZXIgPSBhd2FpdCB0aGlzLmNvbnZlcnRTZWxlY3Rpb25WYXJpYW50VG9TdGF0ZUZpbHRlcnMoXG5cdFx0XHRcdGNvbnRyb2xJbnN0YW5jZSBhcyBDb250cm9sLFxuXHRcdFx0XHRzZWxlY3Rpb25WYXJpYW50LFxuXHRcdFx0XHRwcmVmaWxsRGVzY3JpcHRpb25zLFxuXHRcdFx0XHRjb250cm9sSW5zdGFuY2U/LmdldE1vZGVsKClcblx0XHRcdCk7XG5cblx0XHRcdC8vIENsZWFyIGZpbHRlciBvZiB0YWJsZSBiZWZvcmUgYXBwbHlpbmcgc2VsZWN0aW9uIHZhcmlhbnRcblx0XHRcdGF3YWl0IHRoaXMuY2xlYXJGaWx0ZXJWYWx1ZXMoY29udHJvbEluc3RhbmNlPy5nZXRQYXJlbnQoKSBhcyBNYWNyb0FQSSk7XG5cblx0XHRcdC8vIFN0YXRlIHRvIGFwcGx5XG5cdFx0XHRjb25zdCBwcm9wZXJ0eUluZm9zID0gYXdhaXQgdGhpcy5fZ2V0U3VwcG9ydGVkRmlsdGVyRmllbGRzKGNvbnRyb2xJbnN0YW5jZSBhcyBDb250cm9sKTtcblx0XHRcdGNvbnN0IHN0YXRlVG9BcHBseSA9IHN2VG9TdGF0ZUZpbHRlcnMuZ2V0U3RhdGVUb0FwcGx5KHByb3BlcnR5SW5mb3MsIGNvbmRpdGlvbnMpO1xuXHRcdFx0aWYgKGNvbnRyb2xJbnN0YW5jZT8uaXNBKFwic2FwLnVpLm1kYy5DaGFydFwiKSkge1xuXHRcdFx0XHR0aGlzLmNvbnZlcnRDb25kaXRpb25zRm9yQ2hhcnQoc3RhdGVUb0FwcGx5KTtcblx0XHRcdH1cblx0XHRcdGNvbnN0IGRpZmZTdGF0ZTogRXh0ZXJuYWxTdGF0ZVR5cGUgPSBhd2FpdCBTdGF0ZVV0aWwuZGlmZlN0YXRlKGNvbnRyb2xJbnN0YW5jZSBhcyBDb250cm9sLCBzdGF0ZSwgc3RhdGVUb0FwcGx5KTtcblx0XHRcdGNvbnN0IGFwcGx5U3RhdGVSZXN1bHQgPSBhd2FpdCBTdGF0ZVV0aWwuYXBwbHlFeHRlcm5hbFN0YXRlKGNvbnRyb2xJbnN0YW5jZSBhcyBDb250cm9sLCBzdGF0ZVRvQXBwbHkpO1xuXHRcdFx0cmV0dXJuIHtcblx0XHRcdFx0ZGlmZlN0YXRlLFxuXHRcdFx0XHRhcHBseVN0YXRlUmVzdWx0XG5cdFx0XHR9O1xuXHRcdH0gY2F0Y2ggKGVycjogdW5rbm93bikge1xuXHRcdFx0Y29uc3QgaWQ6IHN0cmluZyB8IHVuZGVmaW5lZCA9IGNvbnRyb2xJbnN0YW5jZT8uZ2V0SWQoKTtcblx0XHRcdGNvbnN0IG1lc3NhZ2UgPSBlcnIgaW5zdGFuY2VvZiBFcnJvciA/IGVyci5tZXNzYWdlIDogU3RyaW5nKGVycik7XG5cdFx0XHRMb2cuZXJyb3IoYEZFIDogQnVpbGRpbmdCbG9jayAoJHtpZH0pIC0gc2V0IHNlbGVjdGlvbiB2YXJpYW50IGZhaWxlZCAgOiAke21lc3NhZ2V9YCk7XG5cdFx0XHR0aHJvdyBFcnJvcihtZXNzYWdlKTtcblx0XHR9XG5cdH0sXG5cdC8qKlxuXHQgKiBDb252ZXJ0IHRoZSBjaGFydCBwcm9wZXJ0aWVzIHRvIGludGVybmFsIHByb3BlcnRpZXMgYmVmb3JlIGFwcGx5aW5nIHRoZSBjb25kaXRpb25zLlxuXHQgKiBAcGFyYW0gc3RhdGVUb0FwcGx5IFRoaXMgY29udGFpbnMgdGhlIGluZm9ybWF0aW9uIHJlZ2FyZGluZyBmaWx0ZXIgYW5kIGNvbmRpdGlvbnNcblx0ICovXG5cdGNvbnZlcnRDb25kaXRpb25zRm9yQ2hhcnQoc3RhdGVUb0FwcGx5OiBTdGF0ZVRvQXBwbHkpOiB2b2lkIHtcblx0XHQvLyByZXBsYWNlIGtleXMgb2YgZmlsdGVyIG9iamVjdCBmcm9tIFwiU2FsZXNPZGVyXCIgdG8gaW50ZXJuYWwgZm9ybWF0IFwiX2ZlX2dyb3VwYWJsZV9TYWxlc09yZGVyXCJcblx0XHRmb3IgKGNvbnN0IHByb3BlcnR5IGluIHN0YXRlVG9BcHBseS5maWx0ZXIpIHtcblx0XHRcdGRlbGV0ZSBPYmplY3QuYXNzaWduKHN0YXRlVG9BcHBseS5maWx0ZXIsIHsgW1wiX2ZlX2dyb3VwYWJsZV9cIiArIHByb3BlcnR5XTogc3RhdGVUb0FwcGx5LmZpbHRlcltwcm9wZXJ0eV0gfSlbcHJvcGVydHldO1xuXHRcdH1cblx0XHQvLyByZXBsYWNlIGtleXMgb2YgaXRlbXMgYXJyYXkgZnJvbSBcIlNhbGVzT2RlclwiIHRvIGludGVybmFsIGZvcm1hdCBcIl9mZV9ncm91cGFibGVfU2FsZXNPcmRlclwiXG5cdFx0c3RhdGVUb0FwcGx5Lml0ZW1zLmZvckVhY2goKHByb3BlcnR5T2JqOiB7IG5hbWU6IHN0cmluZyB9KSA9PiB7XG5cdFx0XHRwcm9wZXJ0eU9iai5uYW1lID0gXCJfZmVfZ3JvdXBhYmxlX1wiICsgcHJvcGVydHlPYmoubmFtZTtcblx0XHR9KTtcblx0fVxufTtcblxuZXhwb3J0IHR5cGUgQ29udHJvbFByb3BlcnR5SW5mbyA9IFByb3BlcnR5SW5mbyAmIHtcblx0Y29uZGl0aW9uUGF0aDogc3RyaW5nO1xuXHRkYXRhVHlwZTogc3RyaW5nO1xuXHRhbm5vdGF0aW9uUGF0aD86IHN0cmluZztcblx0bWV0YWRhdGFQYXRoPzogc3RyaW5nO1xuXHRpc1BhcmFtZXRlcj86IGJvb2xlYW47XG5cdGhpZGRlbkZpbHRlcj86IGJvb2xlYW47XG5cdGhhc1ZhbHVlSGVscD86IGJvb2xlYW47XG5cdHJlcXVpcmVkPzogYm9vbGVhbjtcbn07XG5cbmV4cG9ydCBkZWZhdWx0IFN0YXRlSGVscGVyO1xuIl0sIm1hcHBpbmdzIjoiOzs7Ozs7O0VBMEJBO0FBQ0E7QUFDQTtBQUNBOztFQUVBLE1BQU1BLFdBQVcsR0FBRztJQUNuQjtBQUNEO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7SUFDQyxNQUFNQyxtQkFBbUJBLENBQUNDLE9BQWdDLEVBQTZCO01BQ3RGLElBQUk7UUFDSCxNQUFNQyxZQUFZLEdBQUcsTUFBTUMsU0FBUyxDQUFDQyxxQkFBcUIsQ0FBQ0gsT0FBa0IsQ0FBQztRQUM5RSxNQUFNSSxhQUFhLEdBQUdILFlBQVksQ0FBQ0ksTUFBeUI7UUFDNUQsSUFBSUMsVUFBZ0MsR0FBRyxFQUFFO1FBQ3pDLElBQ0NOLE9BQU8sRUFBRU8sU0FBUyxDQUFDLENBQUMsRUFBRUMsR0FBRyxDQUFDLHNDQUFzQyxDQUFDLElBQ2hFUixPQUFPLENBQUNPLFNBQVMsQ0FBQyxDQUFDLENBQWtCRSxhQUFhLEtBQUtDLFNBQVMsRUFDaEU7VUFDREosVUFBVSxHQUFJTixPQUFPLENBQUNPLFNBQVMsQ0FBQyxDQUFDLENBQWtCRSxhQUFhLENBQUMsQ0FBQztRQUNuRTtRQUNBLE1BQU1FLGdCQUFnQixHQUFHQyw4QkFBOEIsQ0FBQ0MsaUNBQWlDLENBQ3hGVCxhQUFhLEVBQ1pKLE9BQU8sQ0FBYWMsaUJBQWlCLENBQUMsQ0FBQyxFQUN4Q1IsVUFDRCxDQUFDO1FBQ0QsSUFBSU4sT0FBTyxFQUFFUSxHQUFHLENBQUMsa0JBQWtCLENBQUMsRUFBRTtVQUNyQyxNQUFNTyxVQUFVLEdBQUcsSUFBSUMsZ0JBQWdCLENBQUMsQ0FBQztVQUN6QyxNQUFNQyxhQUFhLEdBQUdOLGdCQUFnQixDQUFDTyxpQkFBaUIsQ0FBQyxDQUFDO1VBQzFELEtBQUssTUFBTUMsUUFBUSxJQUFJRixhQUFhLEVBQUU7WUFDckNGLFVBQVUsQ0FBQ0ssbUJBQW1CLENBQUNELFFB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
@@ -2,6 +2,7 @@ import Log from "sap/base/Log";
2
2
  import deepClone from "sap/base/util/deepClone";
3
3
  import type { ViewData } from "sap/fe/core/services/TemplatedViewServiceFactory";
4
4
  import * as PropertyHelper from "sap/fe/core/templating/PropertyHelper";
5
+ import type TableAPI from "sap/fe/macros/Table";
5
6
  import DraftEditState from "sap/fe/macros/filterBar/DraftEditState";
6
7
  import type FilterBarAPI from "sap/fe/macros/filterBar/FilterBarAPI";
7
8
  import type { PropertyInfo } from "sap/fe/macros/internal/PropertyInfo";
@@ -133,7 +134,9 @@ const StateHelper = {
133
134
  * @returns Supported filter fields.
134
135
  */
135
136
  async _getSupportedFilterFields(control: Control): Promise<ControlPropertyInfo[]> {
136
- if (control.isA("sap.ui.mdc.Filterbar")) {
137
+ if ((control as Table).isA("sap.ui.mdc.Table")) {
138
+ return ((control as Table).getParent() as TableAPI).getEnhancedFetchedPropertyInfos() as unknown as ControlPropertyInfo[];
139
+ } else if (control.isA("sap.ui.mdc.Filterbar")) {
137
140
  await (control as FilterBar).waitForInitialization();
138
141
  return (control as FilterBar).getControlDelegate().fetchFilterProperties(control);
139
142
  } else if ((control as FilterBar).isA("sap.fe.macros.controls.FilterBar")) {
@@ -145,7 +148,7 @@ const StateHelper = {
145
148
  },
146
149
 
147
150
  /**
148
- * Clears all input values of visible filter fields in the table, chart, or filter bar..
151
+ * Clears all input values of visible filter fields in the table, chart, or filter bar.
149
152
  * @param controlInstance This can be a filter bar, chart, or table.
150
153
  */
151
154
  async clearFilterValues(controlInstance: MacroAPI): Promise<void> {
@@ -215,11 +218,9 @@ const StateHelper = {
215
218
  propertyInfos.forEach((propertyInfo: ControlPropertyInfo) => {
216
219
  if ((control as Control).isA("sap.ui.mdc.Table")) {
217
220
  propertyInfo["conditionPath"] = propertyInfo.name;
218
- propertyInfo["annotationPath"] = propertyInfo.metadataPath ? propertyInfo.metadataPath : "";
219
221
  propertyInfo["hasValueHelp"] = PropertyHelper.hasValueHelp(
220
222
  (control as Table).getPropertyHelper().getProperty(propertyInfo.name)
221
223
  );
222
- propertyInfo["dataType"] = propertyInfo?.typeConfig?.className as string;
223
224
  } else if ((control as Control).isA("sap.ui.mdc.Chart")) {
224
225
  if (propertyInfo.path) {
225
226
  propertyInfo["name"] = propertyInfo.path;