@sapui5/sap.fe.macros 1.139.0 → 1.140.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (152) hide show
  1. package/package.json +1 -1
  2. package/src/sap/fe/macros/.library +1 -1
  3. package/src/sap/fe/macros/Field.js +65 -55
  4. package/src/sap/fe/macros/Field.ts +83 -57
  5. package/src/sap/fe/macros/FooterContent.js +5 -2
  6. package/src/sap/fe/macros/FooterContent.tsx +4 -1
  7. package/src/sap/fe/macros/MessageButton.js +1 -2
  8. package/src/sap/fe/macros/MessageButton.tsx +0 -1
  9. package/src/sap/fe/macros/MultiValueField.js +1 -3
  10. package/src/sap/fe/macros/MultiValueField.tsx +0 -2
  11. package/src/sap/fe/macros/Share.js +14 -2
  12. package/src/sap/fe/macros/Share.tsx +13 -0
  13. package/src/sap/fe/macros/Status.js +226 -0
  14. package/src/sap/fe/macros/Status.tsx +192 -0
  15. package/src/sap/fe/macros/ValueHelp.js +4 -28
  16. package/src/sap/fe/macros/ValueHelp.tsx +2 -42
  17. package/src/sap/fe/macros/ai/EasyFilterBar.js +105 -96
  18. package/src/sap/fe/macros/ai/EasyFilterBar.tsx +122 -103
  19. package/src/sap/fe/macros/ai/SummarizationButton.js +2 -2
  20. package/src/sap/fe/macros/ai/SummarizationButton.tsx +1 -1
  21. package/src/sap/fe/macros/chart/ChartHelper.js +1 -2
  22. package/src/sap/fe/macros/chart/ChartHelper.ts +0 -1
  23. package/src/sap/fe/macros/chart/ChartRuntime.js +1 -2
  24. package/src/sap/fe/macros/chart/ChartRuntime.ts +0 -1
  25. package/src/sap/fe/macros/chart/MdcChartTemplate.js +2 -4
  26. package/src/sap/fe/macros/chart/MdcChartTemplate.tsx +1 -4
  27. package/src/sap/fe/macros/controls/BuildingBlockWithTemplating.js +3 -1
  28. package/src/sap/fe/macros/controls/BuildingBlockWithTemplating.ts +2 -0
  29. package/src/sap/fe/macros/controls/NumberWithUnitOrCurrency.js +2 -2
  30. package/src/sap/fe/macros/controls/NumberWithUnitOrCurrency.tsx +2 -2
  31. package/src/sap/fe/macros/coreUI/OperationParameterDialog.js +43 -4
  32. package/src/sap/fe/macros/coreUI/OperationParameterDialog.tsx +48 -1
  33. package/src/sap/fe/macros/designtime/Designtime.helper.js +28 -1
  34. package/src/sap/fe/macros/designtime/Designtime.helper.ts +27 -0
  35. package/src/sap/fe/macros/field/FieldBaseDelegate.js +13 -7
  36. package/src/sap/fe/macros/field/FieldBaseDelegate.ts +12 -8
  37. package/src/sap/fe/macros/field/FieldRuntime.js +1 -2
  38. package/src/sap/fe/macros/field/FieldRuntime.ts +0 -1
  39. package/src/sap/fe/macros/filter/FilterUtils.js +3 -5
  40. package/src/sap/fe/macros/filter/FilterUtils.ts +2 -4
  41. package/src/sap/fe/macros/form/Form.js +1 -4
  42. package/src/sap/fe/macros/form/Form.tsx +0 -3
  43. package/src/sap/fe/macros/form/FormContainer.block.js +1 -2
  44. package/src/sap/fe/macros/form/FormContainer.block.ts +0 -1
  45. package/src/sap/fe/macros/form/FormDelegate.js +20 -1
  46. package/src/sap/fe/macros/form/FormDelegate.ts +25 -0
  47. package/src/sap/fe/macros/form/FormHelper.js +1 -2
  48. package/src/sap/fe/macros/form/FormHelper.ts +0 -1
  49. package/src/sap/fe/macros/fpm/CustomFragment.block.js +1 -2
  50. package/src/sap/fe/macros/fpm/CustomFragment.block.ts +0 -1
  51. package/src/sap/fe/macros/internal/ActionCommand.block.js +1 -2
  52. package/src/sap/fe/macros/internal/ActionCommand.block.ts +0 -1
  53. package/src/sap/fe/macros/internal/FilterField.block.js +7 -1
  54. package/src/sap/fe/macros/internal/FilterField.block.ts +8 -0
  55. package/src/sap/fe/macros/internal/field/DisplayStyle.js +3 -3
  56. package/src/sap/fe/macros/internal/field/DisplayStyle.tsx +2 -2
  57. package/src/sap/fe/macros/internal/field/FieldStructureHelper.js +1 -1
  58. package/src/sap/fe/macros/internal/field/FieldStructureHelper.ts +1 -0
  59. package/src/sap/fe/macros/internal/valuehelp/AdditionalValueHelper.js +46 -8
  60. package/src/sap/fe/macros/internal/valuehelp/AdditionalValueHelper.ts +60 -6
  61. package/src/sap/fe/macros/internal/valuehelp/TableDelegate.js +38 -2
  62. package/src/sap/fe/macros/internal/valuehelp/TableDelegate.ts +37 -2
  63. package/src/sap/fe/macros/internal/valuehelp/ValueListDialogTable.fragment.xml +1 -1
  64. package/src/sap/fe/macros/internal/valuehelp/ValueListHelper.js +10 -3
  65. package/src/sap/fe/macros/internal/valuehelp/ValueListHelper.ts +13 -2
  66. package/src/sap/fe/macros/library.js +1 -1
  67. package/src/sap/fe/macros/messagebundle.properties +5 -3
  68. package/src/sap/fe/macros/messagebundle_ar.properties +7 -1
  69. package/src/sap/fe/macros/messagebundle_bg.properties +7 -1
  70. package/src/sap/fe/macros/messagebundle_ca.properties +10 -4
  71. package/src/sap/fe/macros/messagebundle_cnr.properties +7 -1
  72. package/src/sap/fe/macros/messagebundle_cs.properties +6 -0
  73. package/src/sap/fe/macros/messagebundle_cy.properties +8 -2
  74. package/src/sap/fe/macros/messagebundle_da.properties +7 -1
  75. package/src/sap/fe/macros/messagebundle_de.properties +13 -7
  76. package/src/sap/fe/macros/messagebundle_el.properties +6 -0
  77. package/src/sap/fe/macros/messagebundle_en.properties +10 -4
  78. package/src/sap/fe/macros/messagebundle_en_GB.properties +8 -2
  79. package/src/sap/fe/macros/messagebundle_en_US_saprigi.properties +10 -4
  80. package/src/sap/fe/macros/messagebundle_es.properties +8 -2
  81. package/src/sap/fe/macros/messagebundle_es_MX.properties +10 -4
  82. package/src/sap/fe/macros/messagebundle_et.properties +8 -2
  83. package/src/sap/fe/macros/messagebundle_fi.properties +6 -0
  84. package/src/sap/fe/macros/messagebundle_fr.properties +8 -2
  85. package/src/sap/fe/macros/messagebundle_fr_CA.properties +7 -1
  86. package/src/sap/fe/macros/messagebundle_hi.properties +7 -1
  87. package/src/sap/fe/macros/messagebundle_hr.properties +7 -1
  88. package/src/sap/fe/macros/messagebundle_hu.properties +6 -0
  89. package/src/sap/fe/macros/messagebundle_id.properties +10 -4
  90. package/src/sap/fe/macros/messagebundle_it.properties +6 -0
  91. package/src/sap/fe/macros/messagebundle_iw.properties +7 -1
  92. package/src/sap/fe/macros/messagebundle_ja.properties +8 -2
  93. package/src/sap/fe/macros/messagebundle_kk.properties +10 -4
  94. package/src/sap/fe/macros/messagebundle_ko.properties +6 -0
  95. package/src/sap/fe/macros/messagebundle_lt.properties +7 -1
  96. package/src/sap/fe/macros/messagebundle_lv.properties +7 -1
  97. package/src/sap/fe/macros/messagebundle_mk.properties +7 -1
  98. package/src/sap/fe/macros/messagebundle_ms.properties +6 -0
  99. package/src/sap/fe/macros/messagebundle_nl.properties +6 -0
  100. package/src/sap/fe/macros/messagebundle_no.properties +6 -0
  101. package/src/sap/fe/macros/messagebundle_pl.properties +7 -1
  102. package/src/sap/fe/macros/messagebundle_pt.properties +6 -0
  103. package/src/sap/fe/macros/messagebundle_pt_PT.properties +6 -0
  104. package/src/sap/fe/macros/messagebundle_ro.properties +7 -1
  105. package/src/sap/fe/macros/messagebundle_ru.properties +9 -3
  106. package/src/sap/fe/macros/messagebundle_sh.properties +7 -1
  107. package/src/sap/fe/macros/messagebundle_sk.properties +6 -0
  108. package/src/sap/fe/macros/messagebundle_sl.properties +6 -0
  109. package/src/sap/fe/macros/messagebundle_sr.properties +7 -1
  110. package/src/sap/fe/macros/messagebundle_sv.properties +6 -0
  111. package/src/sap/fe/macros/messagebundle_th.properties +7 -1
  112. package/src/sap/fe/macros/messagebundle_tr.properties +6 -0
  113. package/src/sap/fe/macros/messagebundle_uk.properties +9 -3
  114. package/src/sap/fe/macros/messagebundle_vi.properties +8 -2
  115. package/src/sap/fe/macros/messagebundle_zh_CN.properties +6 -0
  116. package/src/sap/fe/macros/messagebundle_zh_TW.properties +7 -1
  117. package/src/sap/fe/macros/messages/MessageButton.js +39 -18
  118. package/src/sap/fe/macros/messages/MessageButton.ts +40 -17
  119. package/src/sap/fe/macros/messages/MessagePopover.js +2 -2
  120. package/src/sap/fe/macros/messages/MessagePopover.ts +4 -4
  121. package/src/sap/fe/macros/microchart/MicroChartContainer.js +1 -2
  122. package/src/sap/fe/macros/microchart/MicroChartContainer.ts +1 -2
  123. package/src/sap/fe/macros/microchart/MicroChartHelper.js +1 -2
  124. package/src/sap/fe/macros/microchart/MicroChartHelper.tsx +0 -1
  125. package/src/sap/fe/macros/share/ShareAPI.js +4 -29
  126. package/src/sap/fe/macros/share/ShareAPI.ts +1 -32
  127. package/src/sap/fe/macros/situations/SituationsPopover.js +3 -1
  128. package/src/sap/fe/macros/situations/SituationsPopover.ts +2 -0
  129. package/src/sap/fe/macros/table/MdcTableTemplate.js +3 -1
  130. package/src/sap/fe/macros/table/MdcTableTemplate.tsx +6 -2
  131. package/src/sap/fe/macros/table/TableHelper.js +1 -2
  132. package/src/sap/fe/macros/table/TableHelper.ts +0 -1
  133. package/src/sap/fe/macros/table/TableRuntime.js +24 -5
  134. package/src/sap/fe/macros/table/TableRuntime.ts +31 -3
  135. package/src/sap/fe/macros/table/Utils.js +6 -2
  136. package/src/sap/fe/macros/table/Utils.ts +5 -1
  137. package/src/sap/fe/macros/table/delegates/ALPTableDelegate.js +1 -2
  138. package/src/sap/fe/macros/table/delegates/ALPTableDelegate.ts +0 -1
  139. package/src/sap/fe/macros/table/delegates/TableDelegate.js +1 -2
  140. package/src/sap/fe/macros/table/delegates/TableDelegate.ts +0 -1
  141. package/src/sap/fe/macros/table/delegates/TreeTableDelegate.js +1 -2
  142. package/src/sap/fe/macros/table/delegates/TreeTableDelegate.ts +0 -1
  143. package/src/sap/fe/macros/table/mixin/TableHierarchy.js +5 -1
  144. package/src/sap/fe/macros/table/mixin/TableHierarchy.ts +7 -0
  145. package/src/sap/fe/macros/table/mixin/TableSharing.js +3 -2
  146. package/src/sap/fe/macros/table/mixin/TableSharing.ts +9 -1
  147. package/src/sap/fe/macros/valuehelp/ValueHelpDelegate.js +10 -1
  148. package/src/sap/fe/macros/valuehelp/ValueHelpDelegate.ts +17 -0
  149. package/src/sap/fe/macros/visualfilters/VisualFilter.js +1 -2
  150. package/src/sap/fe/macros/visualfilters/VisualFilter.tsx +0 -1
  151. package/src/sap/fe/macros/visualfilters/VisualFilterRuntime.js +2 -3
  152. package/src/sap/fe/macros/visualfilters/VisualFilterRuntime.ts +1 -2
@@ -9,7 +9,6 @@ sap.ui.define(["sap/base/Log", "sap/base/util/ObjectPath", "sap/fe/macros/Common
9
9
  /**
10
10
  * Static class used by Visual Filter during runtime
11
11
  * @private
12
- * @experimental This module is only for internal/experimental use!
13
12
  */
14
13
  const VisualFilterRuntime = {
15
14
  selectionChanged(oEvent) {
@@ -211,7 +210,7 @@ sap.ui.define(["sap/base/Log", "sap/base/util/ObjectPath", "sap/fe/macros/Common
211
210
  const sLabel = oMetaModel.getObject(`${sEntitySetPath}/${aNotMatchedConditions[0]}@com.sap.vocabularies.Common.v1.Label`) || aNotMatchedConditions[0];
212
211
  oInternalModelContext.setProperty(sInfoPath, {
213
212
  errorMessageTitle: oResourceBundle.getText("M_VISUAL_FILTERS_ERROR_MESSAGE_TITLE"),
214
- errorMessage: oResourceBundle.getText("M_VISUAL_FILTERS_PROVIDE_FILTER_VAL_SINGLEVF", sLabel),
213
+ errorMessage: oResourceBundle.getText("M_VISUAL_FILTERS_PROVIDE_FILTER_VAL_SINGLEVF", [sLabel]),
215
214
  showError: true
216
215
  });
217
216
  return;
@@ -306,4 +305,4 @@ sap.ui.define(["sap/base/Log", "sap/base/util/ObjectPath", "sap/fe/macros/Common
306
305
  ObjectPath.set("sap.fe.macros.visualfilters.VisualFilterRuntime", VisualFilterRuntime);
307
306
  return VisualFilterRuntime;
308
307
  }, false);
309
- //# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJuYW1lcyI6WyJWaXN1YWxGaWx0ZXJSdW50aW1lIiwic2VsZWN0aW9uQ2hhbmdlZCIsIm9FdmVudCIsIm9JbnRlcmFjdGl2ZUNoYXJ0IiwiZ2V0U291cmNlIiwic091dFBhcmFtZXRlciIsImRhdGEiLCJzVmFsdWVMaXN0UHJvcGVydHkiLCJzRGltZW5zaW9uIiwic0RpbWVuc2lvblRleHQiLCJiTXVsdGlwbGVTZWxlY3Rpb25BbGxvd2VkIiwic0RpbWVuc2lvblR5cGUiLCJvU2VsZWN0ZWRBZ2dyZWdhdGlvbiIsImdldFBhcmFtZXRlciIsImJJc0FnZ3JlZ2F0aW9uU2VsZWN0ZWQiLCJvQ29uZGl0aW9uTW9kZWwiLCJnZXRNb2RlbCIsImFDb25kaXRpb25zIiwiZ2V0UHJvcGVydHkiLCJMb2ciLCJlcnJvciIsInNTZWxlY3Rpb25DaGFuZ2VkVmFsdWUiLCJnZXRCaW5kaW5nQ29udGV4dCIsImdldE9iamVjdCIsInNTZWxlY3Rpb25DaGFuZ2VkVmFsdWVUZXh0IiwiU3RyaW5nIiwidW5kZWZpbmVkIiwiVmlzdWFsRmlsdGVyVXRpbHMiLCJfcGFyc2VEYXRlVGltZSIsIm9Db25kaXRpb24iLCJDb25kaXRpb24iLCJjcmVhdGVJdGVtQ29uZGl0aW9uIiwicHVzaCIsImZpbHRlciIsIm9wZXJhdG9yIiwiRGF0ZSIsInBhcnNlIiwidmFsdWVzIiwic2V0UHJvcGVydHkiLCJnZXRBZ2dyZWdhdGlvblNlbGVjdGVkIiwiYVNlbGVjdGFibGVWYWx1ZXMiLCJpIiwibGVuZ3RoIiwiZ2V0UGFyZW50Iiwic0RpbWVuc2lvblZhbHVlIiwiaW5jbHVkZXMiLCJnZXRQYXJlbnRWaXN1YWxGaWx0ZXJDb250cm9sQkIiLCJwb3RlbnRpYWxWaXN1YWxGaWx0ZXIiLCJpc0EiLCJnZXRGaWx0ZXJzRnJvbUNvbmRpdGlvbnMiLCJfbGVuIiwiYXJndW1lbnRzIiwiYUFyZ3VtZW50cyIsIkFycmF5IiwiX2tleSIsIm9GaWx0ZXJCYXIiLCJhSW5QYXJhbWV0ZXJzIiwiY3VzdG9tRGF0YSIsImJJc0RyYWZ0U3VwcG9ydGVkIiwiYVByb3BlcnR5SW5mb1NldCIsIkZpbHRlclV0aWxzIiwiZ2V0RmlsdGVyUHJvcGVydHlJbmZvIiwibUNvbmRpdGlvbnMiLCJhVmFsdWVMaXN0UHJvcGVydHlJbmZvU2V0Iiwib0ZpbHRlcnMiLCJhRmlsdGVycyIsImFQYXJhbWV0ZXJzIiwib1NlbGVjdGlvblZhcmlhbnRBbm5vdGF0aW9uIiwib0ludGVyYWN0aXZlQ2hhcnRMaXN0QmluZGluZyIsImdldEJpbmRpbmciLCJzUGF0aCIsImdldFBhdGgiLCJvTWV0YU1vZGVsIiwiZ2V0TWV0YU1vZGVsIiwic0VudGl0eVNldFBhdGgiLCJmaWx0ZXJDb25kaXRpb25zIiwiZ2V0RmlsdGVyc0NvbmRpdGlvbnNGcm9tU2VsZWN0aW9uVmFyaWFudCIsImdldEN1c3RvbUNvbmRpdGlvbnMiLCJiaW5kIiwidHlwZUNvbmZpZyIsIlR5cGVNYXAiLCJnZXRUeXBlQ29uZmlnIiwiZGF0YVR5cGUiLCJvU2VsZWN0aW9uVmFyaWFudENvbmRpdGlvbnMiLCJjb252ZXJ0RmlsdGVyQ29uZGlvbnMiLCJPYmplY3QiLCJrZXlzIiwiZm9yRWFjaCIsInNLZXkiLCJpblBhcmFtZXRlckZvcktleSIsImZpbmQiLCJpblBhcmFtZXRlciIsInZhbHVlTGlzdFByb3BlcnR5IiwibG9jYWxEYXRhUHJvcGVydHkiLCJwcm9wZXJ0eUluZm9TZXQiLCJuYW1lIiwiYmFzZVR5cGUiLCJjb25kaXRpb24iLCJfZm9ybWF0RGF0ZVRpbWUiLCJvSW5QYXJhbWV0ZXIiLCJpbmRleCIsIm9JbnRlcm5hbE1vZGVsQ29udGV4dCIsInNJbmZvUGF0aCIsImJFbmFibGVCaW5kaW5nIiwib1Jlc291cmNlQnVuZGxlIiwiTGlicmFyeSIsImdldFJlc291cmNlQnVuZGxlRm9yIiwiYVJlcXVpcmVkUHJvcGVydGllcyIsIkNvbW1vbkhlbHBlciIsInBhcnNlQ3VzdG9tRGF0YSIsImFOb3RNYXRjaGVkQ29uZGl0aW9ucyIsInJlcXVpcmVkUHJvcGVydHlQYXRoIiwiZXJyb3JNZXNzYWdlVGl0bGUiLCJlcnJvck1lc3NhZ2UiLCJzaG93RXJyb3IiLCJnZXRUZXh0Iiwic0xhYmVsIiwic0ZpbHRlckVudGl0eU5hbWUiLCJzcGxpdCIsInNDaGFydEVudGl0eU5hbWUiLCJzQmluZGluZ1BhdGgiLCJnZXRCaW5kaW5nUGF0aEZvclBhcmFtZXRlcnMiLCJwYXJhbWV0ZXIiLCJNZGNGaWx0ZXJVdGlsIiwiZ2V0RmlsdGVySW5mbyIsImZpbHRlcnMiLCJlIiwiZGVidWciLCJnZXRGaWx0ZXJzIiwiRmlsdGVyIiwiRmlsdGVyT3BlcmF0b3IiLCJFUSIsInZpc3VhbEZpbHRlckJCIiwiX3NldEludGVybmFsVXBkYXRlUGVuZGluZyIsImdldEZpbHRlckNvdW50cyIsIm9Db25kaXRpb25zIiwic2NhbGVWaXN1YWxGaWx0ZXJWYWx1ZSIsIm9WYWx1ZSIsInNjYWxlRmFjdG9yIiwibnVtYmVyT2ZGcmFjdGlvbmFsRGlnaXRzIiwiY3VycmVuY3kiLCJvUmF3VmFsdWUiLCJnZXRGb3JtYXR0ZWROdW1iZXIiLCJmaXJlVmFsdWVIZWxwIiwiZmlyZUV2ZW50IiwiT2JqZWN0UGF0aCIsInNldCJdLCJzb3VyY2VSb290IjoiLiIsInNvdXJjZXMiOlsiVmlzdWFsRmlsdGVyUnVudGltZS50cyJdLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgdHlwZSB7IFNlbGVjdGlvblZhcmlhbnRUeXBlIH0gZnJvbSBcIkBzYXAtdXgvdm9jYWJ1bGFyaWVzLXR5cGVzL3ZvY2FidWxhcmllcy9VSVwiO1xuaW1wb3J0IExvZyBmcm9tIFwic2FwL2Jhc2UvTG9nXCI7XG5pbXBvcnQgT2JqZWN0UGF0aCBmcm9tIFwic2FwL2Jhc2UvdXRpbC9PYmplY3RQYXRoXCI7XG5pbXBvcnQgdHlwZSB7IEludGVybmFsTW9kZWxDb250ZXh0IH0gZnJvbSBcInNhcC9mZS9jb3JlL2hlbHBlcnMvTW9kZWxIZWxwZXJcIjtcbmltcG9ydCBDb21tb25IZWxwZXIgZnJvbSBcInNhcC9mZS9tYWNyb3MvQ29tbW9uSGVscGVyXCI7XG5pbXBvcnQgVmlzdWFsRmlsdGVyVXRpbHMgZnJvbSBcInNhcC9mZS9tYWNyb3MvY29udHJvbHMvZmlsdGVyYmFyL3V0aWxzL1Zpc3VhbEZpbHRlclV0aWxzXCI7XG5pbXBvcnQgdHlwZSB7IElGaWx0ZXJDb250cm9sIH0gZnJvbSBcInNhcC9mZS9tYWNyb3MvZmlsdGVyL0ZpbHRlclV0aWxzXCI7XG5pbXBvcnQgRmlsdGVyVXRpbHMgZnJvbSBcInNhcC9mZS9tYWNyb3MvZmlsdGVyL0ZpbHRlclV0aWxzXCI7XG5pbXBvcnQgeyBnZXRGaWx0ZXJzQ29uZGl0aW9uc0Zyb21TZWxlY3Rpb25WYXJpYW50IH0gZnJvbSBcInNhcC9mZS9tYWNyb3MvZmlsdGVyQmFyL0ZpbHRlckhlbHBlclwiO1xuaW1wb3J0IHR5cGUgeyBQcm9wZXJ0eUluZm8gfSBmcm9tIFwic2FwL2ZlL21hY3Jvcy9pbnRlcm5hbC9Qcm9wZXJ0eUluZm9cIjtcbmltcG9ydCB0eXBlIFZpc3VhbEZpbHRlckJsb2NrIGZyb20gXCJzYXAvZmUvbWFjcm9zL3Zpc3VhbGZpbHRlcnMvVmlzdWFsRmlsdGVyXCI7XG5pbXBvcnQgdHlwZSB7IEludGVyYWN0aXZlQmFyQ2hhcnQkU2VsZWN0aW9uQ2hhbmdlZEV2ZW50IH0gZnJvbSBcInNhcC9zdWl0ZS91aS9taWNyb2NoYXJ0L0ludGVyYWN0aXZlQmFyQ2hhcnRcIjtcbmltcG9ydCB0eXBlIHsgSW50ZXJhY3RpdmVEb251dENoYXJ0JFNlbGVjdGlvbkNoYW5nZWRFdmVudCB9IGZyb20gXCJzYXAvc3VpdGUvdWkvbWljcm9jaGFydC9JbnRlcmFjdGl2ZURvbnV0Q2hhcnRcIjtcbmltcG9ydCB0eXBlIHsgSW50ZXJhY3RpdmVMaW5lQ2hhcnQkU2VsZWN0aW9uQ2hhbmdlZEV2ZW50IH0gZnJvbSBcInNhcC9zdWl0ZS91aS9taWNyb2NoYXJ0L0ludGVyYWN0aXZlTGluZUNoYXJ0XCI7XG5pbXBvcnQgdHlwZSBVSTVFdmVudCBmcm9tIFwic2FwL3VpL2Jhc2UvRXZlbnRcIjtcbmltcG9ydCB0eXBlIE1hbmFnZWRPYmplY3QgZnJvbSBcInNhcC91aS9iYXNlL01hbmFnZWRPYmplY3RcIjtcbmltcG9ydCB0eXBlIENvbnRyb2wgZnJvbSBcInNhcC91aS9jb3JlL0NvbnRyb2xcIjtcbmltcG9ydCBMaWJyYXJ5IGZyb20gXCJzYXAvdWkvY29yZS9MaWJcIjtcbmltcG9ydCB0eXBlIHsgQ29uZGl0aW9uT2JqZWN0IH0gZnJvbSBcInNhcC91aS9tZGMvY29uZGl0aW9uL0NvbmRpdGlvblwiO1xuaW1wb3J0IENvbmRpdGlvbiBmcm9tIFwic2FwL3VpL21kYy9jb25kaXRpb24vQ29uZGl0aW9uXCI7XG5pbXBvcnQgVHlwZU1hcCBmcm9tIFwic2FwL3VpL21kYy9vZGF0YS92NC9UeXBlTWFwXCI7XG5pbXBvcnQgTWRjRmlsdGVyVXRpbCBmcm9tIFwic2FwL3VpL21kYy91dGlsL0ZpbHRlclV0aWxcIjtcbmltcG9ydCBGaWx0ZXIgZnJvbSBcInNhcC91aS9tb2RlbC9GaWx0ZXJcIjtcbmltcG9ydCBGaWx0ZXJPcGVyYXRvciBmcm9tIFwic2FwL3VpL21vZGVsL0ZpbHRlck9wZXJhdG9yXCI7XG5pbXBvcnQgdHlwZSBKU09OTW9kZWwgZnJvbSBcInNhcC91aS9tb2RlbC9qc29uL0pTT05Nb2RlbFwiO1xuaW1wb3J0IHR5cGUgT0RhdGFMaXN0QmluZGluZyBmcm9tIFwic2FwL3VpL21vZGVsL29kYXRhL3Y0L09EYXRhTGlzdEJpbmRpbmdcIjtcbmltcG9ydCB0eXBlIE9EYXRhTW9kZWwgZnJvbSBcInNhcC91aS9tb2RlbC9vZGF0YS92NC9PRGF0YU1vZGVsXCI7XG5pbXBvcnQgdHlwZSB7IE1ldGFNb2RlbFR5cGUgfSBmcm9tIFwiLi4vLi4vLi4vLi4vLi4vLi4vLi4vdHlwZXMvbWV0YW1vZGVsX3R5cGVzXCI7XG5cbi8qKlxuICogU3RhdGljIGNsYXNzIHVzZWQgYnkgVmlzdWFsIEZpbHRlciBkdXJpbmcgcnVudGltZVxuICogQHByaXZhdGVcbiAqIEBleHBlcmltZW50YWwgVGhpcyBtb2R1bGUgaXMgb25seSBmb3IgaW50ZXJuYWwvZXhwZXJpbWVudGFsIHVzZSFcbiAqL1xuY29uc3QgVmlzdWFsRmlsdGVyUnVudGltZSA9IHtcblx0c2VsZWN0aW9uQ2hhbmdlZChcblx0XHRvRXZlbnQ6XG5cdFx0XHR8IFVJNUV2ZW50XG5cdFx0XHR8IEludGVyYWN0aXZlQmFyQ2hhcnQkU2VsZWN0aW9uQ2hhbmdlZEV2ZW50XG5cdFx0XHR8IEludGVyYWN0aXZlTGluZUNoYXJ0JFNlbGVjdGlvbkNoYW5nZWRFdmVudFxuXHRcdFx0fCBJbnRlcmFjdGl2ZURvbnV0Q2hhcnQkU2VsZWN0aW9uQ2hhbmdlZEV2ZW50XG5cdCk6IHZvaWQge1xuXHRcdGNvbnN0IG9JbnRlcmFjdGl2ZUNoYXJ0OiBDb250cm9sID0gKG9FdmVudCBhcyBVSTVFdmVudCkuZ2V0U291cmNlKCk7XG5cdFx0Y29uc3Qgc091dFBhcmFtZXRlciA9IG9JbnRlcmFjdGl2ZUNoYXJ0LmRhdGEoXCJvdXRQYXJhbWV0ZXJcIik7XG5cdFx0Y29uc3Qgc1ZhbHVlTGlzdFByb3BlcnR5ID0gb0ludGVyYWN0aXZlQ2hhcnQuZGF0YShcInZhbHVlbGlzdFByb3BlcnR5XCIpO1xuXHRcdGNvbnN0IHNEaW1lbnNpb24gPSBvSW50ZXJhY3RpdmVDaGFydC5kYXRhKFwiZGltZW5zaW9uXCIpO1xuXHRcdGNvbnN0IHNEaW1lbnNpb25UZXh0ID0gb0ludGVyYWN0aXZlQ2hhcnQuZGF0YShcImRpbWVuc2lvblRleHRcIik7XG5cdFx0Y29uc3QgYk11bHRpcGxlU2VsZWN0aW9uQWxsb3dlZCA9IG9JbnRlcmFjdGl2ZUNoYXJ0LmRhdGEoXCJtdWx0aXBsZVNlbGVjdGlvbkFsbG93ZWRcIik7XG5cdFx0Y29uc3Qgc0RpbWVuc2lvblR5cGUgPSBvSW50ZXJhY3RpdmVDaGFydC5kYXRhKFwiZGltZW5zaW9uVHlwZVwiKTtcblx0XHRjb25zdCBvU2VsZWN0ZWRBZ2dyZWdhdGlvbiA9XG5cdFx0XHQob0V2ZW50IGFzIEludGVyYWN0aXZlQmFyQ2hhcnQkU2VsZWN0aW9uQ2hhbmdlZEV2ZW50KS5nZXRQYXJhbWV0ZXIoXCJiYXJcIikgfHxcblx0XHRcdChvRXZlbnQgYXMgSW50ZXJhY3RpdmVMaW5lQ2hhcnQkU2VsZWN0aW9uQ2hhbmdlZEV2ZW50KS5nZXRQYXJhbWV0ZXIoXCJwb2ludFwiKSB8fFxuXHRcdFx0KG9FdmVudCBhcyBJbnRlcmFjdGl2ZURvbnV0Q2hhcnQkU2VsZWN0aW9uQ2hhbmdlZEV2ZW50KS5nZXRQYXJhbWV0ZXIoXCJzZWdtZW50XCIpO1xuXHRcdGNvbnN0IGJJc0FnZ3JlZ2F0aW9uU2VsZWN0ZWQgPSAob0V2ZW50IGFzIEludGVyYWN0aXZlQmFyQ2hhcnQkU2VsZWN0aW9uQ2hhbmdlZEV2ZW50KS5nZXRQYXJhbWV0ZXIoXCJzZWxlY3RlZFwiKTtcblx0XHRjb25zdCBvQ29uZGl0aW9uTW9kZWwgPSBvSW50ZXJhY3RpdmVDaGFydC5nZXRNb2RlbChcIiRmaWVsZFwiKSBhcyBKU09OTW9kZWw7XG5cdFx0bGV0IGFDb25kaXRpb25zID0gb0NvbmRpdGlvbk1vZGVsLmdldFByb3BlcnR5KFwiL2NvbmRpdGlvbnNcIik7XG5cblx0XHRpZiAoIXNPdXRQYXJhbWV0ZXIgfHwgc1ZhbHVlTGlzdFByb3BlcnR5ICE9PSBzRGltZW5zaW9uKSB7XG5cdFx0XHRMb2cuZXJyb3IoXCJWaXN1YWxGaWx0ZXI6IENhbm5vdCBzeW5jIHZhbHVlcyB3aXRoIHJlZ3VsYXIgZmlsdGVyIGFzIG91dCBwYXJhbWV0ZXIgaXMgbm90IGNvbmZpZ3VyZWQgcHJvcGVybHkhXCIpO1xuXHRcdH0gZWxzZSB7XG5cdFx0XHRsZXQgc1NlbGVjdGlvbkNoYW5nZWRWYWx1ZSA9IG9TZWxlY3RlZEFnZ3JlZ2F0aW9uPy5nZXRCaW5kaW5nQ29udGV4dCgpPy5nZXRPYmplY3Qoc1ZhbHVlTGlzdFByb3BlcnR5KTtcblx0XHRcdGlmIChzU2VsZWN0aW9uQ2hhbmdlZFZhbHVlKSB7XG5cdFx0XHRcdGxldCBzU2VsZWN0aW9uQ2hhbmdlZFZhbHVlVGV4dCA9IG9TZWxlY3RlZEFnZ3JlZ2F0aW9uPy5nZXRCaW5kaW5nQ29udGV4dCgpPy5nZXRPYmplY3Qoc0RpbWVuc2lvblRleHQpO1xuXHRcdFx0XHRpZiAodHlwZW9mIHNTZWxlY3Rpb25DaGFuZ2VkVmFsdWVUZXh0ICE9PSBcInN0cmluZ1wiICYmICEoc1NlbGVjdGlvbkNoYW5nZWRWYWx1ZVRleHQgaW5zdGFuY2VvZiBTdHJpbmcpKSB7XG5cdFx0XHRcdFx0c1NlbGVjdGlvbkNoYW5nZWRWYWx1ZVRleHQgPSB1bmRlZmluZWQ7XG5cdFx0XHRcdH1cblx0XHRcdFx0Ly8gaWYgc2VsZWN0aW9uIGhhcyBiZWVuIGRvbmUgb24gdGhlIGFnZ3JlZ2F0aW9uIHRoZW4gYWRkIHRvIGNvbmRpdGlvbnNcblx0XHRcdFx0aWYgKGJJc0FnZ3JlZ2F0aW9uU2VsZWN0ZWQpIHtcblx0XHRcdFx0XHRpZiAoYk11bHRpcGxlU2VsZWN0aW9uQWxsb3dlZCA9PT0gZmFsc2UpIHtcblx0XHRcdFx0XHRcdGFDb25kaXRpb25zID0gW107XG5cdFx0XHRcdFx0fVxuXHRcdFx0XHRcdGlmIChzRGltZW5zaW9uVHlwZSA9PT0gXCJFZG0uRGF0ZVRpbWVPZmZzZXRcIikge1xuXHRcdFx0XHRcdFx0c1NlbGVjdGlvbkNoYW5nZWRWYWx1ZSA9IFZpc3VhbEZpbHRlclV0aWxzLl9wYXJzZURhdGVUaW1lKHNTZWxlY3Rpb25DaGFuZ2VkVmFsdWUpO1xuXHRcdFx0XHRcdH1cblx0XHRcdFx0XHRjb25zdCBvQ29uZGl0aW9uID0gQ29uZGl0aW9uLmNyZWF0ZUl0ZW1Db25kaXRpb24oXG5cdFx0XHRcdFx0XHRzU2VsZWN0aW9uQ2hhbmdlZFZhbHVlLFxuXHRcdFx0XHRcdFx0c1NlbGVjdGlvbkNoYW5nZWRWYWx1ZVRleHQgfHwgdW5kZWZpbmVkLFxuXHRcdFx0XHRcdFx0e30sXG5cdFx0XHRcdFx0XHR7fVxuXHRcdFx0XHRcdCk7XG5cdFx0XHRcdFx0YUNvbmRpdGlvbnMucHVzaChvQ29uZGl0aW9uKTtcblx0XHRcdFx0fSBlbHNlIHtcblx0XHRcdFx0XHQvLyBiZWNhdXNlIHNlbGVjdGlvbiB3YXMgcmVtb3ZlZCBvbiB0aGUgYWdncmVnYXRpb24gaGVuY2UgcmVtb3ZlIHRoaXMgZnJvbSBjb25kaXRpb25zXG5cdFx0XHRcdFx0YUNvbmRpdGlvbnMgPSBhQ29uZGl0aW9ucy5maWx0ZXIoZnVuY3Rpb24gKG9Db25kaXRpb246IENvbmRpdGlvbk9iamVjdCkge1xuXHRcdFx0XHRcdFx0aWYgKHNEaW1lbnNpb25UeXBlID09PSBcIkVkbS5EYXRlVGltZU9mZnNldFwiKSB7XG5cdFx0XHRcdFx0XHRcdHJldHVybiBvQ29uZGl0aW9uLm9wZXJhdG9yICE9PSBcIkVRXCIgfHwgRGF0ZS5wYXJzZShvQ29uZGl0aW9uLnZhbHVlc1swXSkgIT09IERhdGUucGFyc2Uoc1NlbGVjdGlvbkNoYW5nZWRWYWx1ZSk7XG5cdFx0XHRcdFx0XHR9XG5cdFx0XHRcdFx0XHRyZXR1cm4gb0NvbmRpdGlvbi5vcGVyYXRvciAhPT0gXCJFUVwiIHx8IG9Db25kaXRpb24udmFsdWVzWzBdICE9PSBzU2VsZWN0aW9uQ2hhbmdlZFZhbHVlO1xuXHRcdFx0XHRcdH0pO1xuXHRcdFx0XHR9XG5cdFx0XHRcdG9Db25kaXRpb25Nb2RlbC5zZXRQcm9wZXJ0eShcIi9jb25kaXRpb25zXCIsIGFDb25kaXRpb25zKTtcblx0XHRcdH0gZWxzZSB7XG5cdFx0XHRcdExvZy5lcnJvcihcIlZpc3VhbEZpbHRlcjogTm8gdmF1ZSBmb3VuZCBmb3IgdGhlIG91dFBhcmFtZXRlclwiKTtcblx0XHRcdH1cblx0XHR9XG5cdH0sXG5cdC8vIFRISVMgSVMgQSBGT1JNQVRURVJcblx0Z2V0QWdncmVnYXRpb25TZWxlY3RlZCh0aGlzOiBNYW5hZ2VkT2JqZWN0LCBhQ29uZGl0aW9uczogQ29uZGl0aW9uT2JqZWN0W10pOiBib29sZWFuIHwgdW5kZWZpbmVkIHtcblx0XHRsZXQgYVNlbGVjdGFibGVWYWx1ZXMgPSBbXTtcblx0XHRpZiAoIXRoaXMuZ2V0QmluZGluZ0NvbnRleHQoKSkge1xuXHRcdFx0cmV0dXJuO1xuXHRcdH1cblx0XHRmb3IgKGxldCBpID0gMDsgaSA8PSBhQ29uZGl0aW9ucy5sZW5ndGggLSAxOyBpKyspIHtcblx0XHRcdGNvbnN0IG9Db25kaXRpb24gPSBhQ29uZGl0aW9uc1tpXTtcblx0XHRcdC8vIDEuIGdldCBjb25kaXRpb25zIHdpdGggRVEgb3BlcmF0b3IgKHNpbmNlIHZpc3VhbCBmaWx0ZXIgY2FuIG9ubHkgZGVhbCB3aXRoIEVRIG9wZXJhdG9ycykgYW5kIGdldCB0aGVpciB2YWx1ZXNcblx0XHRcdGlmIChvQ29uZGl0aW9uLm9wZXJhdG9yID09PSBcIkVRXCIpIHtcblx0XHRcdFx0YVNlbGVjdGFibGVWYWx1ZXMucHVzaChvQ29uZGl0aW9uLnZhbHVlc1swXSk7XG5cdFx0XHR9XG5cdFx0fVxuXG5cdFx0Ly8gYWNjZXNzIHRoZSBpbnRlcmFjdGl2ZSBjaGFydCBmcm9tIHRoZSBjb250cm9sLlxuXHRcdGNvbnN0IG9JbnRlcmFjdGl2ZUNoYXJ0ID0gdGhpcy5nZXRQYXJlbnQoKSBhcyBDb250cm9sO1xuXHRcdGNvbnN0IHNEaW1lbnNpb24gPSBvSW50ZXJhY3RpdmVDaGFydC5kYXRhKFwiZGltZW5zaW9uXCIpO1xuXHRcdGNvbnN0IHNEaW1lbnNpb25UeXBlID0gb0ludGVyYWN0aXZlQ2hhcnQuZGF0YShcImRpbWVuc2lvblR5cGVcIik7XG5cdFx0bGV0IHNEaW1lbnNpb25WYWx1ZSA9IHRoaXMuZ2V0QmluZGluZ0NvbnRleHQoKT8uZ2V0T2JqZWN0KHNEaW1lbnNpb24pO1xuXHRcdGlmIChzRGltZW5zaW9uVHlwZSA9PT0gXCJFZG0uRGF0ZVRpbWVPZmZzZXRcIikge1xuXHRcdFx0c0RpbWVuc2lvblZhbHVlID0gVmlzdWFsRmlsdGVyVXRpbHMuX3BhcnNlRGF0ZVRpbWUoc0RpbWVuc2lvblZhbHVlKSBhcyB1bmtub3duO1xuXHRcdH1cblx0XHRpZiAob0ludGVyYWN0aXZlQ2hhcnQuZGF0YShcIm11bHRpcGxlU2VsZWN0aW9uQWxsb3dlZFwiKSA9PT0gZmFsc2UgJiYgYVNlbGVjdGFibGVWYWx1ZXMubGVuZ3RoID4gMSkge1xuXHRcdFx0YVNlbGVjdGFibGVWYWx1ZXMgPSBbYVNlbGVjdGFibGVWYWx1ZXNbMF1dO1xuXHRcdH1cblx0XHRyZXR1cm4gYVNlbGVjdGFibGVWYWx1ZXMuaW5jbHVkZXMoc0RpbWVuc2lvblZhbHVlKTtcblx0fSxcblxuXHQvKipcblx0ICogR2V0IFZpc3VhbCBGaWx0ZXIgY29udHJvbCBmb3IgdGhlIGdpdmVuIGNoaWxkIGNvbnRyb2wuXG5cdCAqIEBwYXJhbSBwb3RlbnRpYWxWaXN1YWxGaWx0ZXIgRXhwZWN0ZWQgaW5zdGFuY2Ugb2YgVmlzdWFsIEZpbHRlciBjaGlsZCBjb250cm9sLlxuXHQgKiBAcmV0dXJucyBUaGUgcGFyZW50IFZpc3VhbCBGaWx0ZXIgQnVpbGRpbmdibG9jayBjb250cm9sIGluc3RhbmNlIGlmIGZvdW5kLCBvdGhlcndpc2UgbnVsbC5cblx0ICovXG5cdGdldFBhcmVudFZpc3VhbEZpbHRlckNvbnRyb2xCQihwb3RlbnRpYWxWaXN1YWxGaWx0ZXI6IE1hbmFnZWRPYmplY3QgfCBudWxsKTogVmlzdWFsRmlsdGVyQmxvY2sgfCBudWxsIHtcblx0XHR3aGlsZSAocG90ZW50aWFsVmlzdWFsRmlsdGVyICYmICFwb3RlbnRpYWxWaXN1YWxGaWx0ZXIuaXNBPFZpc3VhbEZpbHRlckJsb2NrPihcInNhcC5mZS5tYWNyb3MudmlzdWFsZmlsdGVycy5WaXN1YWxGaWx0ZXJcIikpIHtcblx0XHRcdHBvdGVudGlhbFZpc3VhbEZpbHRlciA9IHBvdGVudGlhbFZpc3VhbEZpbHRlci5nZXRQYXJlbnQoKTtcblx0XHR9XG5cdFx0cmV0dXJuIHBvdGVudGlhbFZpc3VhbEZpbHRlcjtcblx0fSxcblxuXHQvLyBUSElTIElTIEEgRk9STUFUVEVSXG5cdGdldEZpbHRlcnNGcm9tQ29uZGl0aW9ucyh0aGlzOiBNYW5hZ2VkT2JqZWN0LCAuLi5hQXJndW1lbnRzOiBDb25kaXRpb25PYmplY3RbXVtdKTogRmlsdGVyW10gfCB1bmRlZmluZWQge1xuXHRcdGNvbnN0IG9JbnRlcmFjdGl2ZUNoYXJ0ID0gdGhpcy5nZXRQYXJlbnQoKSBhcyBDb250cm9sO1xuXHRcdGNvbnN0IG9GaWx0ZXJCYXIgPSBvSW50ZXJhY3RpdmVDaGFydC5nZXRQYXJlbnQoKT8uZ2V0UGFyZW50KCk/LmdldFBhcmVudCgpPy5nZXRQYXJlbnQoKT8uZ2V0UGFyZW50KCkgYXMgSUZpbHRlckNvbnRyb2w7XG5cdFx0Y29uc3QgYUluUGFyYW1ldGVycyA9IG9JbnRlcmFjdGl2ZUNoYXJ0LmRhdGEoXCJpblBhcmFtZXRlcnNcIikuY3VzdG9tRGF0YTtcblx0XHRjb25zdCBiSXNEcmFmdFN1cHBvcnRlZCA9IG9JbnRlcmFjdGl2ZUNoYXJ0LmRhdGEoXCJkcmFmdFN1cHBvcnRlZFwiKSA9PT0gdHJ1ZTtcblx0XHRjb25zdCBhUHJvcGVydHlJbmZvU2V0ID0gRmlsdGVyVXRpbHMuZ2V0RmlsdGVyUHJvcGVydHlJbmZvKG9GaWx0ZXJCYXIpIGFzIFByb3BlcnR5SW5mb1tdO1xuXHRcdGNvbnN0IG1Db25kaXRpb25zOiBSZWNvcmQ8c3RyaW5nLCBDb25kaXRpb25PYmplY3RbXT4gPSB7fTtcblx0XHRjb25zdCBhVmFsdWVMaXN0UHJvcGVydHlJbmZvU2V0OiB1bmtub3duW10gPSBbXTtcblx0XHRsZXQgb0ZpbHRlcnM7XG5cdFx0bGV0IGFGaWx0ZXJzOiBGaWx0ZXJbXSA9IFtdO1xuXHRcdGNvbnN0IGFQYXJhbWV0ZXJzID0gb0ludGVyYWN0aXZlQ2hhcnQuZGF0YShcInBhcmFtZXRlcnNcIikgYXMgc3RyaW5nW107XG5cdFx0Y29uc3Qgb1NlbGVjdGlvblZhcmlhbnRBbm5vdGF0aW9uID0gb0ludGVyYWN0aXZlQ2hhcnQuZGF0YShcInNlbGVjdGlvblZhcmlhbnRBbm5vdGF0aW9uXCIpIGFzXG5cdFx0XHR8IE1ldGFNb2RlbFR5cGU8U2VsZWN0aW9uVmFyaWFudFR5cGU+XG5cdFx0XHR8IFNlbGVjdGlvblZhcmlhbnRUeXBlO1xuXHRcdGNvbnN0IG9JbnRlcmFjdGl2ZUNoYXJ0TGlzdEJpbmRpbmcgPVxuXHRcdFx0b0ludGVyYWN0aXZlQ2hhcnQuZ2V0QmluZGluZyhcImJhcnNcIikgfHwgb0ludGVyYWN0aXZlQ2hhcnQuZ2V0QmluZGluZyhcInBvaW50c1wiKSB8fCBvSW50ZXJhY3RpdmVDaGFydC5nZXRCaW5kaW5nKFwic2VnbWVudHNcIik7XG5cdFx0Y29uc3Qgc1BhdGggPSBvSW50ZXJhY3RpdmVDaGFydExpc3RCaW5kaW5nIS5nZXRQYXRoKCk7XG5cdFx0Y29uc3Qgb01ldGFNb2RlbCA9IChvSW50ZXJhY3RpdmVDaGFydC5nZXRNb2RlbCgpIGFzIE9EYXRhTW9kZWwpLmdldE1ldGFNb2RlbCgpO1xuXHRcdGNvbnN0IHNFbnRpdHlTZXRQYXRoID0gb0ludGVyYWN0aXZlQ2hhcnRMaXN0QmluZGluZyEuZ2V0UGF0aCgpO1xuXHRcdGNvbnN0IGZpbHRlckNvbmRpdGlvbnMgPSBnZXRGaWx0ZXJzQ29uZGl0aW9uc0Zyb21TZWxlY3Rpb25WYXJpYW50KFxuXHRcdFx0c0VudGl0eVNldFBhdGgsXG5cdFx0XHRvTWV0YU1vZGVsLFxuXHRcdFx0b1NlbGVjdGlvblZhcmlhbnRBbm5vdGF0aW9uLFxuXHRcdFx0VmlzdWFsRmlsdGVyVXRpbHMuZ2V0Q3VzdG9tQ29uZGl0aW9ucy5iaW5kKFZpc3VhbEZpbHRlclV0aWxzKVxuXHRcdCk7XG5cdFx0Zm9yIChjb25zdCBpIGluIGFQcm9wZXJ0eUluZm9TZXQpIHtcblx0XHRcdGFQcm9wZXJ0eUluZm9TZXRbaV0udHlwZUNvbmZpZyA9IFR5cGVNYXAuZ2V0VHlwZUNvbmZpZyhhUHJvcGVydHlJbmZvU2V0W2ldLmRhdGFUeXBlLCB7fSwge30pO1xuXHRcdH1cblx0XHRjb25zdCBvU2VsZWN0aW9uVmFyaWFudENvbmRpdGlvbnMgPSBWaXN1YWxGaWx0ZXJVdGlscy5jb252ZXJ0RmlsdGVyQ29uZGlvbnMoZmlsdGVyQ29uZGl0aW9ucyk7XG5cdFx0Ly8gYUluUGFyYW1ldGVycyBhbmQgdGhlIGJpbmRpbmdzIHRvIGluIHBhcmFtZXRlcnMgYXJlIGluIHRoZSBzYW1lIG9yZGVyIHNvIHdlIGNhbiByZWx5IG9uIGl0IHRvIGNyZWF0ZSBvdXIgY29uZGl0aW9uc1xuXHRcdE9iamVjdC5rZXlzKG9TZWxlY3Rpb25WYXJpYW50Q29uZGl0aW9ucykuZm9yRWFjaChmdW5jdGlvbiAoc0tleTogc3RyaW5nKSB7XG5cdFx0XHRtQ29uZGl0aW9uc1tzS2V5XSA9IG9TZWxlY3Rpb25WYXJpYW50Q29uZGl0aW9uc1tzS2V5XTtcblx0XHRcdC8vZmV0Y2ggbG9jYWxEYXRhUHJvcGVydHkgaWYgc2VsZWN0aW9uIHZhcmlhbnQga2V5IGlzIGJhc2VkIG9uIHZhdWUgbGlzdCBwcm9wZXJ0eVxuXHRcdFx0Y29uc3QgaW5QYXJhbWV0ZXJGb3JLZXkgPSBhSW5QYXJhbWV0ZXJzLmZpbmQoZnVuY3Rpb24gKGluUGFyYW1ldGVyOiB7IHZhbHVlTGlzdFByb3BlcnR5OiBzdHJpbmcgfSkge1xuXHRcdFx0XHRyZXR1cm4gaW5QYXJhbWV0ZXIudmFsdWVMaXN0UHJvcGVydHkgPT09IHNLZXk7XG5cdFx0XHR9KTtcblx0XHRcdGNvbnN0IGxvY2FsRGF0YVByb3BlcnR5ID0gaW5QYXJhbWV0ZXJGb3JLZXkgPyBpblBhcmFtZXRlckZvcktleS5sb2NhbERhdGFQcm9wZXJ0eSA6IHNLZXk7XG5cdFx0XHRpZiAoIWFQYXJhbWV0ZXJzIHx8IChhUGFyYW1ldGVycyAmJiAhYVBhcmFtZXRlcnMuaW5jbHVkZXMoc0tleSkpKSB7XG5cdFx0XHRcdGZvciAoY29uc3QgaSBpbiBhUHJvcGVydHlJbmZvU2V0KSB7XG5cdFx0XHRcdFx0Y29uc3QgcHJvcGVydHlJbmZvU2V0ID0gYVByb3BlcnR5SW5mb1NldFtpXTtcblx0XHRcdFx0XHRpZiAobG9jYWxEYXRhUHJvcGVydHkgPT09IHByb3BlcnR5SW5mb1NldC5uYW1lKSB7XG5cdFx0XHRcdFx0XHRpZiAocHJvcGVydHlJbmZvU2V0Py50eXBlQ29uZmlnPy5iYXNlVHlwZSA9PT0gXCJEYXRlVGltZVwiKSB7XG5cdFx0XHRcdFx0XHRcdGlmIChtQ29uZGl0aW9uc1tzS2V5XSkge1xuXHRcdFx0XHRcdFx0XHRcdG1Db25kaXRpb25zW3NLZXldLmZvckVhY2goZnVuY3Rpb24gKGNvbmRpdGlvbikge1xuXHRcdFx0XHRcdFx0XHRcdFx0Y29uZGl0aW9uLnZhbHVlc1swXSA9IFZpc3VhbEZpbHRlclV0aWxzLl9mb3JtYXREYXRlVGltZShjb25kaXRpb24udmFsdWVzWzBdKTtcblx0XHRcdFx0XHRcdFx0XHR9KTtcblx0XHRcdFx0XHRcdFx0fVxuXHRcdFx0XHRcdFx0fVxuXHRcdFx0XHRcdFx0YVZhbHVlTGlzdFByb3BlcnR5SW5mb1NldC5wdXNoKHtcblx0XHRcdFx0XHRcdFx0bmFtZTogc0tleSxcblx0XHRcdFx0XHRcdFx0dHlwZUNvbmZpZzogcHJvcGVydHlJbmZvU2V0LnR5cGVDb25maWdcblx0XHRcdFx0XHRcdH0pO1xuXHRcdFx0XHRcdH1cblx0XHRcdFx0fVxuXHRcdFx0fVxuXHRcdH0pO1xuXHRcdGFJblBhcmFtZXRlcnMuZm9yRWFjaChmdW5jdGlvbiAob0luUGFyYW1ldGVyOiB7IHZhbHVlTGlzdFByb3BlcnR5OiBzdHJpbmc7IGxvY2FsRGF0YVByb3BlcnR5OiBzdHJpbmcgfSwgaW5kZXg6IG51bWJlcikge1xuXHRcdFx0aWYgKGFBcmd1bWVudHNbaW5kZXhdLmxlbmd0aCA+IDApIHtcblx0XHRcdFx0Ly8gc3RvcmUgY29uZGl0aW9ucyB3aXRoIHZhbHVlIGxpc3QgcHJvcGVydHkgc2luY2Ugd2UgYXJlIGZpbHRlcmluZyBvbiB0aGUgdmFsdWUgbGlzdCBjb2xsZWN0aW9uIHBhdGhcblx0XHRcdFx0bUNvbmRpdGlvbnNbb0luUGFyYW1ldGVyLnZhbHVlTGlzdFByb3BlcnR5XSA9IGFBcmd1bWVudHNbaW5kZXhdO1xuXHRcdFx0XHRpZiAoIWFQYXJhbWV0ZXJzIHx8IChhUGFyYW1ldGVycyAmJiAhYVBhcmFtZXRlcnMuaW5jbHVkZXMob0luUGFyYW1ldGVyLnZhbHVlTGlzdFByb3BlcnR5KSkpIHtcblx0XHRcdFx0XHQvLyBhUHJvcGVydHlJbmZvU2V0IGlzIGxpc3Qgb2YgcHJvcGVydGllcyBmcm9tIHRoZSBmaWx0ZXIgYmFyIGJ1dCB3ZSBuZWVkIHRvIGNyZWF0ZSBjb25kaXRpb25zIGZvciB0aGUgdmFsdWUgbGlzdFxuXHRcdFx0XHRcdC8vIHdoaWNoIGNvdWxkIGhhdmUgYSBkaWZmZXJlbnQgY29sbGVjdGlvblBhdGguXG5cdFx0XHRcdFx0Ly8gT25seSB0eXBlQ29uZmlnIGZyb20gYVByb3BlcnR5SW5mb1NldCBpcyByZXF1aXJlZCBmb3IgZ2V0dGluZyB0aGUgY29udmVydGVkIGZpbHRlcnMgZnJvbSBjb25kaXRpb25zXG5cdFx0XHRcdFx0Ly8gc28gd2UgdXBkYXRlIGFQcm9wZXJ0eUluZm9TZXQgdG8gaGF2ZSB0aGUgdmFsdWVMaXN0UHJvcGVydGllcyBvbmx5XG5cdFx0XHRcdFx0Ly8gVGhpcyB3YXkgY29uZGl0aW9ucyB3aWxsIGJlIGNvbnZlcnRlZCB0byBzYXAudWkubW9kZWwuRmlsdGVyIGZvciB0aGUgdmFsdWUgbGlzdFxuXHRcdFx0XHRcdC8vIFRoaXMgd29ya3MgYmVjYXVzZSBmb3IgaW4gcGFyYW1ldGVyIG1hcHBpbmcgdGhlIHByb3BlcnR5IGZyb20gdGhlIG1haW4gZW50aXR5IHR5cGUgc2hvdWxkIGJlIG9mIHRoZSBzYW1lIHR5cGUgYXMgdGhlIHZhbHVlIGxpc3QgZW50aXR5IHR5cGVcblx0XHRcdFx0XHQvLyBUT0RPOiBGb2xsb3cgdXAgd2l0aCBNREMgdG8gY2hlY2sgaWYgdGhleSBjYW4gcHJvdmlkZSBhIGNsZWFuIGFwaSB0byBjb252ZXJ0IGNvbmRpdGlvbnMgaW50byBmaWx0ZXJzXG5cdFx0XHRcdFx0Zm9yIChjb25zdCBpIGluIGFQcm9wZXJ0eUluZm9TZXQpIHtcblx0XHRcdFx0XHRcdC8vIHN0b3JlIGNvbmRpdGlvbnMgd2l0aCB2YWx1ZSBsaXN0IHByb3BlcnR5IHNpbmNlIHdlIGFyZSBmaWx0ZXJpbmcgb24gdGhlIHZhbHVlIGxpc3QgY29sbGVjdGlvbiBwYXRoXG5cdFx0XHRcdFx0XHRjb25zdCBwcm9wZXJ0eUluZm9TZXQgPSBhUHJvcGVydHlJbmZvU2V0W2ldO1xuXHRcdFx0XHRcdFx0aWYgKHByb3BlcnR5SW5mb1NldC5uYW1lID09PSBvSW5QYXJhbWV0ZXIubG9jYWxEYXRhUHJvcGVydHkpIHtcblx0XHRcdFx0XHRcdFx0aWYgKHByb3BlcnR5SW5mb1NldD8udHlwZUNvbmZpZz8uYmFzZVR5cGUgPT09IFwiRGF0ZVRpbWVcIikge1xuXHRcdFx0XHRcdFx0XHRcdGlmIChtQ29uZGl0aW9uc1tvSW5QYXJhbWV0ZXIudmFsdWVMaXN0UHJvcGVydHldKSB7XG5cdFx0XHRcdFx0XHRcdFx0XHRtQ29uZGl0aW9uc1tvSW5QYXJhbWV0ZXIudmFsdWVMaXN0UHJvcGVydHldLmZvckVhY2goZnVuY3Rpb24gKGNvbmRpdGlvbikge1xuXHRcdFx0XHRcdFx0XHRcdFx0XHRjb25kaXRpb24udmFsdWVzWzBdID0gVmlzdWFsRmlsdGVyVXRpbHMuX2Zvcm1hdERhdGVUaW1lKGNvbmRpdGlvbi52YWx1ZXNbMF0pO1xuXHRcdFx0XHRcdFx0XHRcdFx0fSk7XG5cdFx0XHRcdFx0XHRcdFx0fVxuXHRcdFx0XHRcdFx0XHR9XG5cdFx0XHRcdFx0XHRcdGFWYWx1ZUxpc3RQcm9wZXJ0eUluZm9TZXQucHVzaCh7XG5cdFx0XHRcdFx0XHRcdFx0bmFtZTogb0luUGFyYW1ldGVyLnZhbHVlTGlzdFByb3BlcnR5LFxuXHRcdFx0XHRcdFx0XHRcdHR5cGVDb25maWc6IHByb3BlcnR5SW5mb1NldC50eXBlQ29uZmlnXG5cdFx0XHRcdFx0XHRcdH0pO1xuXHRcdFx0XHRcdFx0fVxuXHRcdFx0XHRcdH1cblx0XHRcdFx0fVxuXHRcdFx0fVxuXHRcdH0pO1xuXG5cdFx0Y29uc3Qgb0ludGVybmFsTW9kZWxDb250ZXh0ID0gb0ludGVyYWN0aXZlQ2hhcnQuZ2V0QmluZGluZ0NvbnRleHQoXCJpbnRlcm5hbFwiKSBhcyBJbnRlcm5hbE1vZGVsQ29udGV4dDtcblx0XHRjb25zdCBzSW5mb1BhdGggPSBvSW50ZXJhY3RpdmVDaGFydC5kYXRhKFwiaW5mb1BhdGhcIik7XG5cdFx0bGV0IGJFbmFibGVCaW5kaW5nO1xuXHRcdGNvbnN0IG9SZXNvdXJjZUJ1bmRsZSA9IExpYnJhcnkuZ2V0UmVzb3VyY2VCdW5kbGVGb3IoXCJzYXAuZmUubWFjcm9zXCIpITtcblx0XHRjb25zdCBhUmVxdWlyZWRQcm9wZXJ0aWVzID0gQ29tbW9uSGVscGVyLnBhcnNlQ3VzdG9tRGF0YShvSW50ZXJhY3RpdmVDaGFydC5kYXRhKFwicmVxdWlyZWRQcm9wZXJ0aWVzXCIpKSBhcyBzdHJpbmdbXTtcblx0XHRpZiAoYVJlcXVpcmVkUHJvcGVydGllcy5sZW5ndGgpIHtcblx0XHRcdGNvbnN0IGFDb25kaXRpb25zID0gT2JqZWN0LmtleXMobUNvbmRpdGlvbnMpIHx8IFtdO1xuXHRcdFx0Y29uc3QgYU5vdE1hdGNoZWRDb25kaXRpb25zOiBzdHJpbmdbXSA9IFtdO1xuXHRcdFx0YVJlcXVpcmVkUHJvcGVydGllcy5mb3JFYWNoKGZ1bmN0aW9uIChyZXF1aXJlZFByb3BlcnR5UGF0aDogc3RyaW5nKSB7XG5cdFx0XHRcdGlmICghYUNvbmRpdGlvbnMuaW5jbHVkZXMocmVxdWlyZWRQcm9wZXJ0eVBhdGgpKSB7XG5cdFx0XHRcdFx0YU5vdE1hdGNoZWRDb25kaXRpb25zLnB1c2gocmVxdWlyZWRQcm9wZXJ0eVBhdGgpO1xuXHRcdFx0XHR9XG5cdFx0XHR9KTtcblx0XHRcdGlmICghYU5vdE1hdGNoZWRDb25kaXRpb25zLmxlbmd0aCkge1xuXHRcdFx0XHRiRW5hYmxlQmluZGluZyA9IG9JbnRlcm5hbE1vZGVsQ29udGV4dC5nZXRQcm9wZXJ0eShgJHtzSW5mb1BhdGh9L3Nob3dFcnJvcmApO1xuXHRcdFx0XHRvSW50ZXJuYWxNb2RlbENvbnRleHQuc2V0UHJvcGVydHkoc0luZm9QYXRoLCB7XG5cdFx0XHRcdFx0ZXJyb3JNZXNzYWdlVGl0bGU6IFwiXCIsXG5cdFx0XHRcdFx0ZXJyb3JNZXNzYWdlOiBcIlwiLFxuXHRcdFx0XHRcdHNob3dFcnJvcjogZmFsc2Vcblx0XHRcdFx0fSk7XG5cdFx0XHR9IGVsc2UgaWYgKGFOb3RNYXRjaGVkQ29uZGl0aW9ucy5sZW5ndGggPiAxKSB7XG5cdFx0XHRcdG9JbnRlcm5hbE1vZGVsQ29udGV4dC5zZXRQcm9wZXJ0eShzSW5mb1BhdGgsIHtcblx0XHRcdFx0XHRlcnJvck1lc3NhZ2VUaXRsZTogb1Jlc291cmNlQnVuZGxlLmdldFRleHQoXCJNX1ZJU1VBTF9GSUxURVJTX0VSUk9SX01FU1NBR0VfVElUTEVcIiksXG5cdFx0XHRcdFx0ZXJyb3JNZXNzYWdlOiBvUmVzb3VyY2VCdW5kbGUuZ2V0VGV4dChcIk1fVklTVUFMX0ZJTFRFUlNfUFJPVklERV9GSUxURVJfVkFMX01VTFRJUExFVkZcIiksXG5cdFx0XHRcdFx0c2hvd0Vycm9yOiB0cnVlXG5cdFx0XHRcdH0pO1xuXHRcdFx0XHRyZXR1cm47XG5cdFx0XHR9IGVsc2Uge1xuXHRcdFx0XHRjb25zdCBzTGFiZWwgPVxuXHRcdFx0XHRcdG9NZXRhTW9kZWwuZ2V0T2JqZWN0KGAke3NFbnRpdHlTZXRQYXRofS8ke2FOb3RNYXRjaGVkQ29uZGl0aW9uc1swXX1AY29tLnNhcC52b2NhYnVsYXJpZXMuQ29tbW9uLnYxLkxhYmVsYCkgfHxcblx0XHRcdFx0XHRhTm90TWF0Y2hlZENvbmRpdGlvbnNbMF07XG5cdFx0XHRcdG9JbnRlcm5hbE1vZGVsQ29udGV4dC5zZXRQcm9wZXJ0eShzSW5mb1BhdGgsIHtcblx0XHRcdFx0XHRlcnJvck1lc3NhZ2VUaXRsZTogb1Jlc291cmNlQnVuZGxlLmdldFRleHQoXCJNX1ZJU1VBTF9GSUxURVJTX0VSUk9SX01FU1NBR0VfVElUTEVcIiksXG5cdFx0XHRcdFx0ZXJyb3JNZXNzYWdlOiBvUmVzb3VyY2VCdW5kbGUuZ2V0VGV4dChcIk1fVklTVUFMX0ZJTFRFUlNfUFJPVklERV9GSUxURVJfVkFMX1NJTkdMRVZGXCIsIHNMYWJlbCksXG5cdFx0XHRcdFx0c2hvd0Vycm9yOiB0cnVlXG5cdFx0XHRcdH0pO1xuXHRcdFx0XHRyZXR1cm47XG5cdFx0XHR9XG5cdFx0fSBlbHNlIHtcblx0XHRcdGJFbmFibGVCaW5kaW5nID0gb0ludGVybmFsTW9kZWxDb250ZXh0LmdldFByb3BlcnR5KGAke3NJbmZvUGF0aH0vc2hvd0Vycm9yYCk7XG5cdFx0XHRvSW50ZXJuYWxNb2RlbENvbnRleHQuc2V0UHJvcGVydHkoc0luZm9QYXRoLCB7IGVycm9yTWVzc2FnZVRpdGxlOiBcIlwiLCBlcnJvck1lc3NhZ2U6IFwiXCIsIHNob3dFcnJvcjogZmFsc2UgfSk7XG5cdFx0fVxuXG5cdFx0Y29uc3Qgc0ZpbHRlckVudGl0eU5hbWUgPSBvRmlsdGVyQmFyLmRhdGEoXCJlbnRpdHlUeXBlXCIpLnNwbGl0KFwiL1wiKVsxXTtcblx0XHRjb25zdCBzQ2hhcnRFbnRpdHlOYW1lID0gc1BhdGguc3BsaXQoXCIvXCIpWzFdLnNwbGl0KFwiKFwiKVswXTtcblx0XHRpZiAoYVBhcmFtZXRlcnMgJiYgYVBhcmFtZXRlcnMubGVuZ3RoICYmIHNGaWx0ZXJFbnRpdHlOYW1lID09PSBzQ2hhcnRFbnRpdHlOYW1lKSB7XG5cdFx0XHRjb25zdCBzQmluZGluZ1BhdGggPSBiRW5hYmxlQmluZGluZ1xuXHRcdFx0XHQ/IEZpbHRlclV0aWxzLmdldEJpbmRpbmdQYXRoRm9yUGFyYW1ldGVycyhvRmlsdGVyQmFyLCBtQ29uZGl0aW9ucywgYVByb3BlcnR5SW5mb1NldCwgYVBhcmFtZXRlcnMpXG5cdFx0XHRcdDogdW5kZWZpbmVkO1xuXG5cdFx0XHRpZiAoc0JpbmRpbmdQYXRoKSB7XG5cdFx0XHRcdChvSW50ZXJhY3RpdmVDaGFydExpc3RCaW5kaW5nIGFzIHsgc1BhdGg/OiBzdHJpbmcgfSkuc1BhdGggPSBzQmluZGluZ1BhdGg7XG5cdFx0XHR9XG5cdFx0fVxuXG5cdFx0aWYgKGFQYXJhbWV0ZXJzICYmIGFQYXJhbWV0ZXJzLmxlbmd0aCkge1xuXHRcdFx0Ly9SZW1vdmUgcGFyYW1ldGVycyBmcm9tIG1Db25kaXRpb25zIHNpbmNlIGl0IHNob3VsZCBub3QgYmUgYSBwYXJ0IG9mICRmaWx0ZXJcblx0XHRcdGFQYXJhbWV0ZXJzLmZvckVhY2goZnVuY3Rpb24gKHBhcmFtZXRlcjogc3RyaW5nKSB7XG5cdFx0XHRcdGlmIChtQ29uZGl0aW9uc1twYXJhbWV0ZXJdKSB7XG5cdFx0XHRcdFx0ZGVsZXRlIG1Db25kaXRpb25zW3BhcmFtZXRlcl07XG5cdFx0XHRcdH1cblx0XHRcdH0pO1xuXHRcdH1cblxuXHRcdC8vIE9uIEluaXRpYWxMb2FkIHdoZW4gaW5pdGlhbGxheW91dCBpcyB2aXN1YWwsIGFQcm9wZXJ0eUluZm9TZXQgaXMgYWx3YXlzIGVtcHR5IGFuZCB3ZSBjYW5ub3QgZ2V0IGZpbHRlcnMgZnJvbSBNRENGaWx0ZXJVdGlsLlxuXHRcdC8vIEFsc28gd2hlbiBTVlF1YWxpZmllciBpcyB0aGVyZSB0aGVuIHdlIHNob3VsZCBub3QgY2hhbmdlIHRoZSBsaXN0YmluZGluZyBmaWx0ZXJzIHRvIGVtcHR5IGFzIHdlIGFyZSBub3QgZ2V0dGluZyBmaWx0ZXJzIGZyb20gTURDRmlsdGVyVXRpbCBidXRcblx0XHQvLyBpbnN0ZWFkIHdlIG5lZWQgdG8gbm90IGNhbGwgbGlzdGJpbmRpbmcuZmlsdGVyIGFuZCB1c2UgdGhlIHRlbXBsYXRlIHRpbWUgYmluZGluZyBpdHNlbGYuXG5cdFx0aWYgKE9iamVjdC5rZXlzKG1Db25kaXRpb25zKS5sZW5ndGggPiAwICYmIGFWYWx1ZUxpc3RQcm9wZXJ0eUluZm9TZXQubGVuZ3RoKSB7XG5cdFx0XHR0cnkge1xuXHRcdFx0XHRvRmlsdGVycyA9IChNZGNGaWx0ZXJVdGlsLmdldEZpbHRlckluZm8ob0ZpbHRlckJhciwgbUNvbmRpdGlvbnMsIGFWYWx1ZUxpc3RQcm9wZXJ0eUluZm9TZXQsIFtdKSBhcyB7IGZpbHRlcnM6IEZpbHRlciB9KVxuXHRcdFx0XHRcdC5maWx0ZXJzO1xuXHRcdFx0fSBjYXRjaCAoZSkge1xuXHRcdFx0XHRMb2cuZGVidWcoXCJWaXN1YWxGaWx0ZXI6IEVycm9yIHdoaWxlIGdldHRpbmcgZmlsdGVycyBmcm9tIE1EQ0ZpbHRlclV0aWxcIik7XG5cdFx0XHR9XG5cdFx0XHRpZiAob0ZpbHRlcnMpIHtcblx0XHRcdFx0aWYgKCFvRmlsdGVycy5nZXRGaWx0ZXJzKCkpIHtcblx0XHRcdFx0XHRhRmlsdGVycy5wdXNoKG9GaWx0ZXJzKTtcblx0XHRcdFx0fSBlbHNlIGlmIChvRmlsdGVycy5nZXRGaWx0ZXJzKCkpIHtcblx0XHRcdFx0XHRhRmlsdGVycyA9IG9GaWx0ZXJzLmdldEZpbHRlcnMoKSE7XG5cdFx0XHRcdH1cblx0XHRcdH1cblx0XHR9XG5cdFx0aWYgKGJJc0RyYWZ0U3VwcG9ydGVkKSB7XG5cdFx0XHRhRmlsdGVycy5wdXNoKG5ldyBGaWx0ZXIoXCJJc0FjdGl2ZUVudGl0eVwiLCBGaWx0ZXJPcGVyYXRvci5FUSwgdHJ1ZSkpO1xuXHRcdH1cblx0XHRpZiAoYUZpbHRlcnMgJiYgYUZpbHRlcnMubGVuZ3RoID4gMCkge1xuXHRcdFx0KG9JbnRlcmFjdGl2ZUNoYXJ0TGlzdEJpbmRpbmcgYXMgT0RhdGFMaXN0QmluZGluZyk/LmZpbHRlcihhRmlsdGVycyk7XG5cdFx0fSBlbHNlIGlmICghT2JqZWN0LmtleXMobUNvbmRpdGlvbnMpLmxlbmd0aCkge1xuXHRcdFx0KG9JbnRlcmFjdGl2ZUNoYXJ0TGlzdEJpbmRpbmcgYXMgT0RhdGFMaXN0QmluZGluZyk/LmZpbHRlcigpO1xuXHRcdH1cblx0XHQvLyB1cGRhdGUgdGhlIGludGVyYWN0aXZlIGNoYXJ0IGJpbmRpbmdcblx0XHRpZiAoYkVuYWJsZUJpbmRpbmcpIHtcblx0XHRcdGNvbnN0IHZpc3VhbEZpbHRlckJCID0gVmlzdWFsRmlsdGVyUnVudGltZS5nZXRQYXJlbnRWaXN1YWxGaWx0ZXJDb250cm9sQkIob0ludGVyYWN0aXZlQ2hhcnQpO1xuXHRcdFx0dmlzdWFsRmlsdGVyQkI/Ll9zZXRJbnRlcm5hbFVwZGF0ZVBlbmRpbmcoZmFsc2UpO1xuXHRcdH1cblx0XHRyZXR1cm4gYUZpbHRlcnM7XG5cdH0sXG5cdGdldEZpbHRlckNvdW50cyh0aGlzOiBDb250cm9sLCBvQ29uZGl0aW9uczogQ29uZGl0aW9uT2JqZWN0W10pOiBzdHJpbmcgfCB1bmRlZmluZWQge1xuXHRcdGlmICh0aGlzLmRhdGEoXCJtdWx0aXBsZVNlbGVjdGlvbkFsbG93ZWRcIikgPT09IGZhbHNlICYmIG9Db25kaXRpb25zLmxlbmd0aCA+IDApIHtcblx0XHRcdHJldHVybiBgKDEpYDtcblx0XHR9XG5cdFx0aWYgKG9Db25kaXRpb25zLmxlbmd0aCA+IDApIHtcblx0XHRcdHJldHVybiBgKCR7b0NvbmRpdGlvbnMubGVuZ3RofSlgO1xuXHRcdH0gZWxzZSB7XG5cdFx0XHRyZXR1cm4gdW5kZWZpbmVkO1xuXHRcdH1cblx0fSxcblxuXHRzY2FsZVZpc3VhbEZpbHRlclZhbHVlKFxuXHRcdG9WYWx1ZTogc3RyaW5nLFxuXHRcdHNjYWxlRmFjdG9yOiBudW1iZXIsXG5cdFx0bnVtYmVyT2ZGcmFjdGlvbmFsRGlnaXRzOiBudW1iZXIsXG5cdFx0Y3VycmVuY3k6IHN0cmluZyxcblx0XHRvUmF3VmFsdWU6IHN0cmluZyB8IG51bWJlclxuXHQpOiBzdHJpbmcge1xuXHRcdC8vIFNjYWxlRmFjdG9yIGlmIGRlZmluZWQgaXMgcHJpb3JpdHkgZm9yIGZvcm1hdHRpbmdcblx0XHRpZiAoc2NhbGVGYWN0b3IpIHtcblx0XHRcdHJldHVybiBWaXN1YWxGaWx0ZXJVdGlscy5nZXRGb3JtYXR0ZWROdW1iZXIob1Jhd1ZhbHVlLCBzY2FsZUZhY3RvciwgbnVtYmVyT2ZGcmFjdGlvbmFsRGlnaXRzKTtcblx0XHRcdC8vIElmIFNjYWxlIEZhY3RvciBpcyBub3QgZGVmaW5lZCwgdXNlIGN1cnJlbmN5IGZvcm1hdHRpbmdcblx0XHR9IGVsc2UgaWYgKGN1cnJlbmN5KSB7XG5cdFx0XHRyZXR1cm4gVmlzdWFsRmlsdGVyVXRpbHMuZ2V0Rm9ybWF0dGVkTnVtYmVyKG9SYXdWYWx1ZSwgdW5kZWZpbmVkLCB1bmRlZmluZWQsIGN1cnJlbmN5KTtcblx0XHRcdC8vIE5vIFNjYWxlRmFjdG9yIGFuZCBubyBDdXJyZW5jeSwgdXNlIG51bWJlck9mRnJhY3Rpb25hbERpZ2l0cyBkZWZpbmVkIGluIERhdGFQb2ludFxuXHRcdH0gZWxzZSBpZiAobnVtYmVyT2ZGcmFjdGlvbmFsRGlnaXRzID4gMCkge1xuXHRcdFx0Ly8gTnVtYmVyIG9mIGZyYWN0aW9uYWwgZGlnaXRzIHNoYWxsIG5vdCBleGNlZWQgMiwgdW5sZXNzIHJlcXVpcmVkIGJ5IGN1cnJlbmN5XG5cdFx0XHRudW1iZXJPZkZyYWN0aW9uYWxEaWdpdHMgPSBudW1iZXJPZkZyYWN0aW9uYWxEaWdpdHMgPiAyID8gMiA6IG51bWJlck9mRnJhY3Rpb25hbERpZ2l0cztcblx0XHRcdHJldHVybiBWaXN1YWxGaWx0ZXJVdGlscy5nZXRGb3JtYXR0ZWROdW1iZXIob1Jhd1ZhbHVlLCB1bmRlZmluZWQsIG51bWJlck9mRnJhY3Rpb25hbERpZ2l0cyk7XG5cdFx0fSBlbHNlIHtcblx0XHRcdHJldHVybiBvVmFsdWU7XG5cdFx0fVxuXHR9LFxuXHRmaXJlVmFsdWVIZWxwKG9FdmVudDogVUk1RXZlbnQ8e30sIENvbnRyb2w+KTogdm9pZCB7XG5cdFx0b0V2ZW50LmdldFNvdXJjZSgpLmdldFBhcmVudCgpPy5nZXRQYXJlbnQoKT8uZ2V0UGFyZW50KCk/LmdldFBhcmVudCgpPy5maXJlRXZlbnQoXCJ2YWx1ZUhlbHBSZXF1ZXN0XCIpO1xuXHR9XG59O1xuXG5PYmplY3RQYXRoLnNldChcInNhcC5mZS5tYWNyb3MudmlzdWFsZmlsdGVycy5WaXN1YWxGaWx0ZXJSdW50aW1lXCIsIFZpc3VhbEZpbHRlclJ1bnRpbWUpO1xuXG5leHBvcnQgZGVmYXVsdCBWaXN1YWxGaWx0ZXJSdW50aW1lO1xuIl0sIm1hcHBpbmdzIjoiOzs7Ozs7OztFQTZCQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0VBQ0EsTUFBTUEsbUJBQW1CLEdBQUc7SUFDM0JDLGdCQUFnQkEsQ0FDZkMsTUFJOEMsRUFDdkM7TUFDUCxNQUFNQyxpQkFBMEIsR0FBSUQsTUFBTSxDQUFjRSxTQUFTLENBQUMsQ0FBQztNQUNuRSxNQUFNQyxhQUFhLEdBQUdGLGlCQUFpQixDQUFDRyxJQUFJLENBQUMsY0FBYyxDQUFDO01BQzVELE1BQU1DLGtCQUFr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
308
+ //# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJuYW1lcyI6WyJWaXN1YWxGaWx0ZXJSdW50aW1lIiwic2VsZWN0aW9uQ2hhbmdlZCIsIm9FdmVudCIsIm9JbnRlcmFjdGl2ZUNoYXJ0IiwiZ2V0U291cmNlIiwic091dFBhcmFtZXRlciIsImRhdGEiLCJzVmFsdWVMaXN0UHJvcGVydHkiLCJzRGltZW5zaW9uIiwic0RpbWVuc2lvblRleHQiLCJiTXVsdGlwbGVTZWxlY3Rpb25BbGxvd2VkIiwic0RpbWVuc2lvblR5cGUiLCJvU2VsZWN0ZWRBZ2dyZWdhdGlvbiIsImdldFBhcmFtZXRlciIsImJJc0FnZ3JlZ2F0aW9uU2VsZWN0ZWQiLCJvQ29uZGl0aW9uTW9kZWwiLCJnZXRNb2RlbCIsImFDb25kaXRpb25zIiwiZ2V0UHJvcGVydHkiLCJMb2ciLCJlcnJvciIsInNTZWxlY3Rpb25DaGFuZ2VkVmFsdWUiLCJnZXRCaW5kaW5nQ29udGV4dCIsImdldE9iamVjdCIsInNTZWxlY3Rpb25DaGFuZ2VkVmFsdWVUZXh0IiwiU3RyaW5nIiwidW5kZWZpbmVkIiwiVmlzdWFsRmlsdGVyVXRpbHMiLCJfcGFyc2VEYXRlVGltZSIsIm9Db25kaXRpb24iLCJDb25kaXRpb24iLCJjcmVhdGVJdGVtQ29uZGl0aW9uIiwicHVzaCIsImZpbHRlciIsIm9wZXJhdG9yIiwiRGF0ZSIsInBhcnNlIiwidmFsdWVzIiwic2V0UHJvcGVydHkiLCJnZXRBZ2dyZWdhdGlvblNlbGVjdGVkIiwiYVNlbGVjdGFibGVWYWx1ZXMiLCJpIiwibGVuZ3RoIiwiZ2V0UGFyZW50Iiwic0RpbWVuc2lvblZhbHVlIiwiaW5jbHVkZXMiLCJnZXRQYXJlbnRWaXN1YWxGaWx0ZXJDb250cm9sQkIiLCJwb3RlbnRpYWxWaXN1YWxGaWx0ZXIiLCJpc0EiLCJnZXRGaWx0ZXJzRnJvbUNvbmRpdGlvbnMiLCJfbGVuIiwiYXJndW1lbnRzIiwiYUFyZ3VtZW50cyIsIkFycmF5IiwiX2tleSIsIm9GaWx0ZXJCYXIiLCJhSW5QYXJhbWV0ZXJzIiwiY3VzdG9tRGF0YSIsImJJc0RyYWZ0U3VwcG9ydGVkIiwiYVByb3BlcnR5SW5mb1NldCIsIkZpbHRlclV0aWxzIiwiZ2V0RmlsdGVyUHJvcGVydHlJbmZvIiwibUNvbmRpdGlvbnMiLCJhVmFsdWVMaXN0UHJvcGVydHlJbmZvU2V0Iiwib0ZpbHRlcnMiLCJhRmlsdGVycyIsImFQYXJhbWV0ZXJzIiwib1NlbGVjdGlvblZhcmlhbnRBbm5vdGF0aW9uIiwib0ludGVyYWN0aXZlQ2hhcnRMaXN0QmluZGluZyIsImdldEJpbmRpbmciLCJzUGF0aCIsImdldFBhdGgiLCJvTWV0YU1vZGVsIiwiZ2V0TWV0YU1vZGVsIiwic0VudGl0eVNldFBhdGgiLCJmaWx0ZXJDb25kaXRpb25zIiwiZ2V0RmlsdGVyc0NvbmRpdGlvbnNGcm9tU2VsZWN0aW9uVmFyaWFudCIsImdldEN1c3RvbUNvbmRpdGlvbnMiLCJiaW5kIiwidHlwZUNvbmZpZyIsIlR5cGVNYXAiLCJnZXRUeXBlQ29uZmlnIiwiZGF0YVR5cGUiLCJvU2VsZWN0aW9uVmFyaWFudENvbmRpdGlvbnMiLCJjb252ZXJ0RmlsdGVyQ29uZGlvbnMiLCJPYmplY3QiLCJrZXlzIiwiZm9yRWFjaCIsInNLZXkiLCJpblBhcmFtZXRlckZvcktleSIsImZpbmQiLCJpblBhcmFtZXRlciIsInZhbHVlTGlzdFByb3BlcnR5IiwibG9jYWxEYXRhUHJvcGVydHkiLCJwcm9wZXJ0eUluZm9TZXQiLCJuYW1lIiwiYmFzZVR5cGUiLCJjb25kaXRpb24iLCJfZm9ybWF0RGF0ZVRpbWUiLCJvSW5QYXJhbWV0ZXIiLCJpbmRleCIsIm9JbnRlcm5hbE1vZGVsQ29udGV4dCIsInNJbmZvUGF0aCIsImJFbmFibGVCaW5kaW5nIiwib1Jlc291cmNlQnVuZGxlIiwiTGlicmFyeSIsImdldFJlc291cmNlQnVuZGxlRm9yIiwiYVJlcXVpcmVkUHJvcGVydGllcyIsIkNvbW1vbkhlbHBlciIsInBhcnNlQ3VzdG9tRGF0YSIsImFOb3RNYXRjaGVkQ29uZGl0aW9ucyIsInJlcXVpcmVkUHJvcGVydHlQYXRoIiwiZXJyb3JNZXNzYWdlVGl0bGUiLCJlcnJvck1lc3NhZ2UiLCJzaG93RXJyb3IiLCJnZXRUZXh0Iiwic0xhYmVsIiwic0ZpbHRlckVudGl0eU5hbWUiLCJzcGxpdCIsInNDaGFydEVudGl0eU5hbWUiLCJzQmluZGluZ1BhdGgiLCJnZXRCaW5kaW5nUGF0aEZvclBhcmFtZXRlcnMiLCJwYXJhbWV0ZXIiLCJNZGNGaWx0ZXJVdGlsIiwiZ2V0RmlsdGVySW5mbyIsImZpbHRlcnMiLCJlIiwiZGVidWciLCJnZXRGaWx0ZXJzIiwiRmlsdGVyIiwiRmlsdGVyT3BlcmF0b3IiLCJFUSIsInZpc3VhbEZpbHRlckJCIiwiX3NldEludGVybmFsVXBkYXRlUGVuZGluZyIsImdldEZpbHRlckNvdW50cyIsIm9Db25kaXRpb25zIiwic2NhbGVWaXN1YWxGaWx0ZXJWYWx1ZSIsIm9WYWx1ZSIsInNjYWxlRmFjdG9yIiwibnVtYmVyT2ZGcmFjdGlvbmFsRGlnaXRzIiwiY3VycmVuY3kiLCJvUmF3VmFsdWUiLCJnZXRGb3JtYXR0ZWROdW1iZXIiLCJmaXJlVmFsdWVIZWxwIiwiZmlyZUV2ZW50IiwiT2JqZWN0UGF0aCIsInNldCJdLCJzb3VyY2VSb290IjoiLiIsInNvdXJjZXMiOlsiVmlzdWFsRmlsdGVyUnVudGltZS50cyJdLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgdHlwZSB7IFNlbGVjdGlvblZhcmlhbnRUeXBlIH0gZnJvbSBcIkBzYXAtdXgvdm9jYWJ1bGFyaWVzLXR5cGVzL3ZvY2FidWxhcmllcy9VSVwiO1xuaW1wb3J0IExvZyBmcm9tIFwic2FwL2Jhc2UvTG9nXCI7XG5pbXBvcnQgT2JqZWN0UGF0aCBmcm9tIFwic2FwL2Jhc2UvdXRpbC9PYmplY3RQYXRoXCI7XG5pbXBvcnQgdHlwZSB7IEludGVybmFsTW9kZWxDb250ZXh0IH0gZnJvbSBcInNhcC9mZS9jb3JlL2hlbHBlcnMvTW9kZWxIZWxwZXJcIjtcbmltcG9ydCBDb21tb25IZWxwZXIgZnJvbSBcInNhcC9mZS9tYWNyb3MvQ29tbW9uSGVscGVyXCI7XG5pbXBvcnQgVmlzdWFsRmlsdGVyVXRpbHMgZnJvbSBcInNhcC9mZS9tYWNyb3MvY29udHJvbHMvZmlsdGVyYmFyL3V0aWxzL1Zpc3VhbEZpbHRlclV0aWxzXCI7XG5pbXBvcnQgdHlwZSB7IElGaWx0ZXJDb250cm9sIH0gZnJvbSBcInNhcC9mZS9tYWNyb3MvZmlsdGVyL0ZpbHRlclV0aWxzXCI7XG5pbXBvcnQgRmlsdGVyVXRpbHMgZnJvbSBcInNhcC9mZS9tYWNyb3MvZmlsdGVyL0ZpbHRlclV0aWxzXCI7XG5pbXBvcnQgeyBnZXRGaWx0ZXJzQ29uZGl0aW9uc0Zyb21TZWxlY3Rpb25WYXJpYW50IH0gZnJvbSBcInNhcC9mZS9tYWNyb3MvZmlsdGVyQmFyL0ZpbHRlckhlbHBlclwiO1xuaW1wb3J0IHR5cGUgeyBQcm9wZXJ0eUluZm8gfSBmcm9tIFwic2FwL2ZlL21hY3Jvcy9pbnRlcm5hbC9Qcm9wZXJ0eUluZm9cIjtcbmltcG9ydCB0eXBlIFZpc3VhbEZpbHRlckJsb2NrIGZyb20gXCJzYXAvZmUvbWFjcm9zL3Zpc3VhbGZpbHRlcnMvVmlzdWFsRmlsdGVyXCI7XG5pbXBvcnQgdHlwZSB7IEludGVyYWN0aXZlQmFyQ2hhcnQkU2VsZWN0aW9uQ2hhbmdlZEV2ZW50IH0gZnJvbSBcInNhcC9zdWl0ZS91aS9taWNyb2NoYXJ0L0ludGVyYWN0aXZlQmFyQ2hhcnRcIjtcbmltcG9ydCB0eXBlIHsgSW50ZXJhY3RpdmVEb251dENoYXJ0JFNlbGVjdGlvbkNoYW5nZWRFdmVudCB9IGZyb20gXCJzYXAvc3VpdGUvdWkvbWljcm9jaGFydC9JbnRlcmFjdGl2ZURvbnV0Q2hhcnRcIjtcbmltcG9ydCB0eXBlIHsgSW50ZXJhY3RpdmVMaW5lQ2hhcnQkU2VsZWN0aW9uQ2hhbmdlZEV2ZW50IH0gZnJvbSBcInNhcC9zdWl0ZS91aS9taWNyb2NoYXJ0L0ludGVyYWN0aXZlTGluZUNoYXJ0XCI7XG5pbXBvcnQgdHlwZSBVSTVFdmVudCBmcm9tIFwic2FwL3VpL2Jhc2UvRXZlbnRcIjtcbmltcG9ydCB0eXBlIE1hbmFnZWRPYmplY3QgZnJvbSBcInNhcC91aS9iYXNlL01hbmFnZWRPYmplY3RcIjtcbmltcG9ydCB0eXBlIENvbnRyb2wgZnJvbSBcInNhcC91aS9jb3JlL0NvbnRyb2xcIjtcbmltcG9ydCBMaWJyYXJ5IGZyb20gXCJzYXAvdWkvY29yZS9MaWJcIjtcbmltcG9ydCB0eXBlIHsgQ29uZGl0aW9uT2JqZWN0IH0gZnJvbSBcInNhcC91aS9tZGMvY29uZGl0aW9uL0NvbmRpdGlvblwiO1xuaW1wb3J0IENvbmRpdGlvbiBmcm9tIFwic2FwL3VpL21kYy9jb25kaXRpb24vQ29uZGl0aW9uXCI7XG5pbXBvcnQgVHlwZU1hcCBmcm9tIFwic2FwL3VpL21kYy9vZGF0YS92NC9UeXBlTWFwXCI7XG5pbXBvcnQgTWRjRmlsdGVyVXRpbCBmcm9tIFwic2FwL3VpL21kYy91dGlsL0ZpbHRlclV0aWxcIjtcbmltcG9ydCBGaWx0ZXIgZnJvbSBcInNhcC91aS9tb2RlbC9GaWx0ZXJcIjtcbmltcG9ydCBGaWx0ZXJPcGVyYXRvciBmcm9tIFwic2FwL3VpL21vZGVsL0ZpbHRlck9wZXJhdG9yXCI7XG5pbXBvcnQgdHlwZSBKU09OTW9kZWwgZnJvbSBcInNhcC91aS9tb2RlbC9qc29uL0pTT05Nb2RlbFwiO1xuaW1wb3J0IHR5cGUgT0RhdGFMaXN0QmluZGluZyBmcm9tIFwic2FwL3VpL21vZGVsL29kYXRhL3Y0L09EYXRhTGlzdEJpbmRpbmdcIjtcbmltcG9ydCB0eXBlIE9EYXRhTW9kZWwgZnJvbSBcInNhcC91aS9tb2RlbC9vZGF0YS92NC9PRGF0YU1vZGVsXCI7XG5pbXBvcnQgdHlwZSB7IE1ldGFNb2RlbFR5cGUgfSBmcm9tIFwiLi4vLi4vLi4vLi4vLi4vLi4vLi4vdHlwZXMvbWV0YW1vZGVsX3R5cGVzXCI7XG5cbi8qKlxuICogU3RhdGljIGNsYXNzIHVzZWQgYnkgVmlzdWFsIEZpbHRlciBkdXJpbmcgcnVudGltZVxuICogQHByaXZhdGVcbiAqL1xuY29uc3QgVmlzdWFsRmlsdGVyUnVudGltZSA9IHtcblx0c2VsZWN0aW9uQ2hhbmdlZChcblx0XHRvRXZlbnQ6XG5cdFx0XHR8IFVJNUV2ZW50XG5cdFx0XHR8IEludGVyYWN0aXZlQmFyQ2hhcnQkU2VsZWN0aW9uQ2hhbmdlZEV2ZW50XG5cdFx0XHR8IEludGVyYWN0aXZlTGluZUNoYXJ0JFNlbGVjdGlvbkNoYW5nZWRFdmVudFxuXHRcdFx0fCBJbnRlcmFjdGl2ZURvbnV0Q2hhcnQkU2VsZWN0aW9uQ2hhbmdlZEV2ZW50XG5cdCk6IHZvaWQge1xuXHRcdGNvbnN0IG9JbnRlcmFjdGl2ZUNoYXJ0OiBDb250cm9sID0gKG9FdmVudCBhcyBVSTVFdmVudCkuZ2V0U291cmNlKCk7XG5cdFx0Y29uc3Qgc091dFBhcmFtZXRlciA9IG9JbnRlcmFjdGl2ZUNoYXJ0LmRhdGEoXCJvdXRQYXJhbWV0ZXJcIik7XG5cdFx0Y29uc3Qgc1ZhbHVlTGlzdFByb3BlcnR5ID0gb0ludGVyYWN0aXZlQ2hhcnQuZGF0YShcInZhbHVlbGlzdFByb3BlcnR5XCIpO1xuXHRcdGNvbnN0IHNEaW1lbnNpb24gPSBvSW50ZXJhY3RpdmVDaGFydC5kYXRhKFwiZGltZW5zaW9uXCIpO1xuXHRcdGNvbnN0IHNEaW1lbnNpb25UZXh0ID0gb0ludGVyYWN0aXZlQ2hhcnQuZGF0YShcImRpbWVuc2lvblRleHRcIik7XG5cdFx0Y29uc3QgYk11bHRpcGxlU2VsZWN0aW9uQWxsb3dlZCA9IG9JbnRlcmFjdGl2ZUNoYXJ0LmRhdGEoXCJtdWx0aXBsZVNlbGVjdGlvbkFsbG93ZWRcIik7XG5cdFx0Y29uc3Qgc0RpbWVuc2lvblR5cGUgPSBvSW50ZXJhY3RpdmVDaGFydC5kYXRhKFwiZGltZW5zaW9uVHlwZVwiKTtcblx0XHRjb25zdCBvU2VsZWN0ZWRBZ2dyZWdhdGlvbiA9XG5cdFx0XHQob0V2ZW50IGFzIEludGVyYWN0aXZlQmFyQ2hhcnQkU2VsZWN0aW9uQ2hhbmdlZEV2ZW50KS5nZXRQYXJhbWV0ZXIoXCJiYXJcIikgfHxcblx0XHRcdChvRXZlbnQgYXMgSW50ZXJhY3RpdmVMaW5lQ2hhcnQkU2VsZWN0aW9uQ2hhbmdlZEV2ZW50KS5nZXRQYXJhbWV0ZXIoXCJwb2ludFwiKSB8fFxuXHRcdFx0KG9FdmVudCBhcyBJbnRlcmFjdGl2ZURvbnV0Q2hhcnQkU2VsZWN0aW9uQ2hhbmdlZEV2ZW50KS5nZXRQYXJhbWV0ZXIoXCJzZWdtZW50XCIpO1xuXHRcdGNvbnN0IGJJc0FnZ3JlZ2F0aW9uU2VsZWN0ZWQgPSAob0V2ZW50IGFzIEludGVyYWN0aXZlQmFyQ2hhcnQkU2VsZWN0aW9uQ2hhbmdlZEV2ZW50KS5nZXRQYXJhbWV0ZXIoXCJzZWxlY3RlZFwiKTtcblx0XHRjb25zdCBvQ29uZGl0aW9uTW9kZWwgPSBvSW50ZXJhY3RpdmVDaGFydC5nZXRNb2RlbChcIiRmaWVsZFwiKSBhcyBKU09OTW9kZWw7XG5cdFx0bGV0IGFDb25kaXRpb25zID0gb0NvbmRpdGlvbk1vZGVsLmdldFByb3BlcnR5KFwiL2NvbmRpdGlvbnNcIik7XG5cblx0XHRpZiAoIXNPdXRQYXJhbWV0ZXIgfHwgc1ZhbHVlTGlzdFByb3BlcnR5ICE9PSBzRGltZW5zaW9uKSB7XG5cdFx0XHRMb2cuZXJyb3IoXCJWaXN1YWxGaWx0ZXI6IENhbm5vdCBzeW5jIHZhbHVlcyB3aXRoIHJlZ3VsYXIgZmlsdGVyIGFzIG91dCBwYXJhbWV0ZXIgaXMgbm90IGNvbmZpZ3VyZWQgcHJvcGVybHkhXCIpO1xuXHRcdH0gZWxzZSB7XG5cdFx0XHRsZXQgc1NlbGVjdGlvbkNoYW5nZWRWYWx1ZSA9IG9TZWxlY3RlZEFnZ3JlZ2F0aW9uPy5nZXRCaW5kaW5nQ29udGV4dCgpPy5nZXRPYmplY3Qoc1ZhbHVlTGlzdFByb3BlcnR5KTtcblx0XHRcdGlmIChzU2VsZWN0aW9uQ2hhbmdlZFZhbHVlKSB7XG5cdFx0XHRcdGxldCBzU2VsZWN0aW9uQ2hhbmdlZFZhbHVlVGV4dCA9IG9TZWxlY3RlZEFnZ3JlZ2F0aW9uPy5nZXRCaW5kaW5nQ29udGV4dCgpPy5nZXRPYmplY3Qoc0RpbWVuc2lvblRleHQpO1xuXHRcdFx0XHRpZiAodHlwZW9mIHNTZWxlY3Rpb25DaGFuZ2VkVmFsdWVUZXh0ICE9PSBcInN0cmluZ1wiICYmICEoc1NlbGVjdGlvbkNoYW5nZWRWYWx1ZVRleHQgaW5zdGFuY2VvZiBTdHJpbmcpKSB7XG5cdFx0XHRcdFx0c1NlbGVjdGlvbkNoYW5nZWRWYWx1ZVRleHQgPSB1bmRlZmluZWQ7XG5cdFx0XHRcdH1cblx0XHRcdFx0Ly8gaWYgc2VsZWN0aW9uIGhhcyBiZWVuIGRvbmUgb24gdGhlIGFnZ3JlZ2F0aW9uIHRoZW4gYWRkIHRvIGNvbmRpdGlvbnNcblx0XHRcdFx0aWYgKGJJc0FnZ3JlZ2F0aW9uU2VsZWN0ZWQpIHtcblx0XHRcdFx0XHRpZiAoYk11bHRpcGxlU2VsZWN0aW9uQWxsb3dlZCA9PT0gZmFsc2UpIHtcblx0XHRcdFx0XHRcdGFDb25kaXRpb25zID0gW107XG5cdFx0XHRcdFx0fVxuXHRcdFx0XHRcdGlmIChzRGltZW5zaW9uVHlwZSA9PT0gXCJFZG0uRGF0ZVRpbWVPZmZzZXRcIikge1xuXHRcdFx0XHRcdFx0c1NlbGVjdGlvbkNoYW5nZWRWYWx1ZSA9IFZpc3VhbEZpbHRlclV0aWxzLl9wYXJzZURhdGVUaW1lKHNTZWxlY3Rpb25DaGFuZ2VkVmFsdWUpO1xuXHRcdFx0XHRcdH1cblx0XHRcdFx0XHRjb25zdCBvQ29uZGl0aW9uID0gQ29uZGl0aW9uLmNyZWF0ZUl0ZW1Db25kaXRpb24oXG5cdFx0XHRcdFx0XHRzU2VsZWN0aW9uQ2hhbmdlZFZhbHVlLFxuXHRcdFx0XHRcdFx0c1NlbGVjdGlvbkNoYW5nZWRWYWx1ZVRleHQgfHwgdW5kZWZpbmVkLFxuXHRcdFx0XHRcdFx0e30sXG5cdFx0XHRcdFx0XHR7fVxuXHRcdFx0XHRcdCk7XG5cdFx0XHRcdFx0YUNvbmRpdGlvbnMucHVzaChvQ29uZGl0aW9uKTtcblx0XHRcdFx0fSBlbHNlIHtcblx0XHRcdFx0XHQvLyBiZWNhdXNlIHNlbGVjdGlvbiB3YXMgcmVtb3ZlZCBvbiB0aGUgYWdncmVnYXRpb24gaGVuY2UgcmVtb3ZlIHRoaXMgZnJvbSBjb25kaXRpb25zXG5cdFx0XHRcdFx0YUNvbmRpdGlvbnMgPSBhQ29uZGl0aW9ucy5maWx0ZXIoZnVuY3Rpb24gKG9Db25kaXRpb246IENvbmRpdGlvbk9iamVjdCkge1xuXHRcdFx0XHRcdFx0aWYgKHNEaW1lbnNpb25UeXBlID09PSBcIkVkbS5EYXRlVGltZU9mZnNldFwiKSB7XG5cdFx0XHRcdFx0XHRcdHJldHVybiBvQ29uZGl0aW9uLm9wZXJhdG9yICE9PSBcIkVRXCIgfHwgRGF0ZS5wYXJzZShvQ29uZGl0aW9uLnZhbHVlc1swXSkgIT09IERhdGUucGFyc2Uoc1NlbGVjdGlvbkNoYW5nZWRWYWx1ZSk7XG5cdFx0XHRcdFx0XHR9XG5cdFx0XHRcdFx0XHRyZXR1cm4gb0NvbmRpdGlvbi5vcGVyYXRvciAhPT0gXCJFUVwiIHx8IG9Db25kaXRpb24udmFsdWVzWzBdICE9PSBzU2VsZWN0aW9uQ2hhbmdlZFZhbHVlO1xuXHRcdFx0XHRcdH0pO1xuXHRcdFx0XHR9XG5cdFx0XHRcdG9Db25kaXRpb25Nb2RlbC5zZXRQcm9wZXJ0eShcIi9jb25kaXRpb25zXCIsIGFDb25kaXRpb25zKTtcblx0XHRcdH0gZWxzZSB7XG5cdFx0XHRcdExvZy5lcnJvcihcIlZpc3VhbEZpbHRlcjogTm8gdmF1ZSBmb3VuZCBmb3IgdGhlIG91dFBhcmFtZXRlclwiKTtcblx0XHRcdH1cblx0XHR9XG5cdH0sXG5cdC8vIFRISVMgSVMgQSBGT1JNQVRURVJcblx0Z2V0QWdncmVnYXRpb25TZWxlY3RlZCh0aGlzOiBNYW5hZ2VkT2JqZWN0LCBhQ29uZGl0aW9uczogQ29uZGl0aW9uT2JqZWN0W10pOiBib29sZWFuIHwgdW5kZWZpbmVkIHtcblx0XHRsZXQgYVNlbGVjdGFibGVWYWx1ZXMgPSBbXTtcblx0XHRpZiAoIXRoaXMuZ2V0QmluZGluZ0NvbnRleHQoKSkge1xuXHRcdFx0cmV0dXJuO1xuXHRcdH1cblx0XHRmb3IgKGxldCBpID0gMDsgaSA8PSBhQ29uZGl0aW9ucy5sZW5ndGggLSAxOyBpKyspIHtcblx0XHRcdGNvbnN0IG9Db25kaXRpb24gPSBhQ29uZGl0aW9uc1tpXTtcblx0XHRcdC8vIDEuIGdldCBjb25kaXRpb25zIHdpdGggRVEgb3BlcmF0b3IgKHNpbmNlIHZpc3VhbCBmaWx0ZXIgY2FuIG9ubHkgZGVhbCB3aXRoIEVRIG9wZXJhdG9ycykgYW5kIGdldCB0aGVpciB2YWx1ZXNcblx0XHRcdGlmIChvQ29uZGl0aW9uLm9wZXJhdG9yID09PSBcIkVRXCIpIHtcblx0XHRcdFx0YVNlbGVjdGFibGVWYWx1ZXMucHVzaChvQ29uZGl0aW9uLnZhbHVlc1swXSk7XG5cdFx0XHR9XG5cdFx0fVxuXG5cdFx0Ly8gYWNjZXNzIHRoZSBpbnRlcmFjdGl2ZSBjaGFydCBmcm9tIHRoZSBjb250cm9sLlxuXHRcdGNvbnN0IG9JbnRlcmFjdGl2ZUNoYXJ0ID0gdGhpcy5nZXRQYXJlbnQoKSBhcyBDb250cm9sO1xuXHRcdGNvbnN0IHNEaW1lbnNpb24gPSBvSW50ZXJhY3RpdmVDaGFydC5kYXRhKFwiZGltZW5zaW9uXCIpO1xuXHRcdGNvbnN0IHNEaW1lbnNpb25UeXBlID0gb0ludGVyYWN0aXZlQ2hhcnQuZGF0YShcImRpbWVuc2lvblR5cGVcIik7XG5cdFx0bGV0IHNEaW1lbnNpb25WYWx1ZSA9IHRoaXMuZ2V0QmluZGluZ0NvbnRleHQoKT8uZ2V0T2JqZWN0KHNEaW1lbnNpb24pO1xuXHRcdGlmIChzRGltZW5zaW9uVHlwZSA9PT0gXCJFZG0uRGF0ZVRpbWVPZmZzZXRcIikge1xuXHRcdFx0c0RpbWVuc2lvblZhbHVlID0gVmlzdWFsRmlsdGVyVXRpbHMuX3BhcnNlRGF0ZVRpbWUoc0RpbWVuc2lvblZhbHVlKSBhcyB1bmtub3duO1xuXHRcdH1cblx0XHRpZiAob0ludGVyYWN0aXZlQ2hhcnQuZGF0YShcIm11bHRpcGxlU2VsZWN0aW9uQWxsb3dlZFwiKSA9PT0gZmFsc2UgJiYgYVNlbGVjdGFibGVWYWx1ZXMubGVuZ3RoID4gMSkge1xuXHRcdFx0YVNlbGVjdGFibGVWYWx1ZXMgPSBbYVNlbGVjdGFibGVWYWx1ZXNbMF1dO1xuXHRcdH1cblx0XHRyZXR1cm4gYVNlbGVjdGFibGVWYWx1ZXMuaW5jbHVkZXMoc0RpbWVuc2lvblZhbHVlKTtcblx0fSxcblxuXHQvKipcblx0ICogR2V0IFZpc3VhbCBGaWx0ZXIgY29udHJvbCBmb3IgdGhlIGdpdmVuIGNoaWxkIGNvbnRyb2wuXG5cdCAqIEBwYXJhbSBwb3RlbnRpYWxWaXN1YWxGaWx0ZXIgRXhwZWN0ZWQgaW5zdGFuY2Ugb2YgVmlzdWFsIEZpbHRlciBjaGlsZCBjb250cm9sLlxuXHQgKiBAcmV0dXJucyBUaGUgcGFyZW50IFZpc3VhbCBGaWx0ZXIgQnVpbGRpbmdibG9jayBjb250cm9sIGluc3RhbmNlIGlmIGZvdW5kLCBvdGhlcndpc2UgbnVsbC5cblx0ICovXG5cdGdldFBhcmVudFZpc3VhbEZpbHRlckNvbnRyb2xCQihwb3RlbnRpYWxWaXN1YWxGaWx0ZXI6IE1hbmFnZWRPYmplY3QgfCBudWxsKTogVmlzdWFsRmlsdGVyQmxvY2sgfCBudWxsIHtcblx0XHR3aGlsZSAocG90ZW50aWFsVmlzdWFsRmlsdGVyICYmICFwb3RlbnRpYWxWaXN1YWxGaWx0ZXIuaXNBPFZpc3VhbEZpbHRlckJsb2NrPihcInNhcC5mZS5tYWNyb3MudmlzdWFsZmlsdGVycy5WaXN1YWxGaWx0ZXJcIikpIHtcblx0XHRcdHBvdGVudGlhbFZpc3VhbEZpbHRlciA9IHBvdGVudGlhbFZpc3VhbEZpbHRlci5nZXRQYXJlbnQoKTtcblx0XHR9XG5cdFx0cmV0dXJuIHBvdGVudGlhbFZpc3VhbEZpbHRlcjtcblx0fSxcblxuXHQvLyBUSElTIElTIEEgRk9STUFUVEVSXG5cdGdldEZpbHRlcnNGcm9tQ29uZGl0aW9ucyh0aGlzOiBNYW5hZ2VkT2JqZWN0LCAuLi5hQXJndW1lbnRzOiBDb25kaXRpb25PYmplY3RbXVtdKTogRmlsdGVyW10gfCB1bmRlZmluZWQge1xuXHRcdGNvbnN0IG9JbnRlcmFjdGl2ZUNoYXJ0ID0gdGhpcy5nZXRQYXJlbnQoKSBhcyBDb250cm9sO1xuXHRcdGNvbnN0IG9GaWx0ZXJCYXIgPSBvSW50ZXJhY3RpdmVDaGFydC5nZXRQYXJlbnQoKT8uZ2V0UGFyZW50KCk/LmdldFBhcmVudCgpPy5nZXRQYXJlbnQoKT8uZ2V0UGFyZW50KCkgYXMgSUZpbHRlckNvbnRyb2w7XG5cdFx0Y29uc3QgYUluUGFyYW1ldGVycyA9IG9JbnRlcmFjdGl2ZUNoYXJ0LmRhdGEoXCJpblBhcmFtZXRlcnNcIikuY3VzdG9tRGF0YTtcblx0XHRjb25zdCBiSXNEcmFmdFN1cHBvcnRlZCA9IG9JbnRlcmFjdGl2ZUNoYXJ0LmRhdGEoXCJkcmFmdFN1cHBvcnRlZFwiKSA9PT0gdHJ1ZTtcblx0XHRjb25zdCBhUHJvcGVydHlJbmZvU2V0ID0gRmlsdGVyVXRpbHMuZ2V0RmlsdGVyUHJvcGVydHlJbmZvKG9GaWx0ZXJCYXIpIGFzIFByb3BlcnR5SW5mb1tdO1xuXHRcdGNvbnN0IG1Db25kaXRpb25zOiBSZWNvcmQ8c3RyaW5nLCBDb25kaXRpb25PYmplY3RbXT4gPSB7fTtcblx0XHRjb25zdCBhVmFsdWVMaXN0UHJvcGVydHlJbmZvU2V0OiB1bmtub3duW10gPSBbXTtcblx0XHRsZXQgb0ZpbHRlcnM7XG5cdFx0bGV0IGFGaWx0ZXJzOiBGaWx0ZXJbXSA9IFtdO1xuXHRcdGNvbnN0IGFQYXJhbWV0ZXJzID0gb0ludGVyYWN0aXZlQ2hhcnQuZGF0YShcInBhcmFtZXRlcnNcIikgYXMgc3RyaW5nW107XG5cdFx0Y29uc3Qgb1NlbGVjdGlvblZhcmlhbnRBbm5vdGF0aW9uID0gb0ludGVyYWN0aXZlQ2hhcnQuZGF0YShcInNlbGVjdGlvblZhcmlhbnRBbm5vdGF0aW9uXCIpIGFzXG5cdFx0XHR8IE1ldGFNb2RlbFR5cGU8U2VsZWN0aW9uVmFyaWFudFR5cGU+XG5cdFx0XHR8IFNlbGVjdGlvblZhcmlhbnRUeXBlO1xuXHRcdGNvbnN0IG9JbnRlcmFjdGl2ZUNoYXJ0TGlzdEJpbmRpbmcgPVxuXHRcdFx0b0ludGVyYWN0aXZlQ2hhcnQuZ2V0QmluZGluZyhcImJhcnNcIikgfHwgb0ludGVyYWN0aXZlQ2hhcnQuZ2V0QmluZGluZyhcInBvaW50c1wiKSB8fCBvSW50ZXJhY3RpdmVDaGFydC5nZXRCaW5kaW5nKFwic2VnbWVudHNcIik7XG5cdFx0Y29uc3Qgc1BhdGggPSBvSW50ZXJhY3RpdmVDaGFydExpc3RCaW5kaW5nIS5nZXRQYXRoKCk7XG5cdFx0Y29uc3Qgb01ldGFNb2RlbCA9IChvSW50ZXJhY3RpdmVDaGFydC5nZXRNb2RlbCgpIGFzIE9EYXRhTW9kZWwpLmdldE1ldGFNb2RlbCgpO1xuXHRcdGNvbnN0IHNFbnRpdHlTZXRQYXRoID0gb0ludGVyYWN0aXZlQ2hhcnRMaXN0QmluZGluZyEuZ2V0UGF0aCgpO1xuXHRcdGNvbnN0IGZpbHRlckNvbmRpdGlvbnMgPSBnZXRGaWx0ZXJzQ29uZGl0aW9uc0Zyb21TZWxlY3Rpb25WYXJpYW50KFxuXHRcdFx0c0VudGl0eVNldFBhdGgsXG5cdFx0XHRvTWV0YU1vZGVsLFxuXHRcdFx0b1NlbGVjdGlvblZhcmlhbnRBbm5vdGF0aW9uLFxuXHRcdFx0VmlzdWFsRmlsdGVyVXRpbHMuZ2V0Q3VzdG9tQ29uZGl0aW9ucy5iaW5kKFZpc3VhbEZpbHRlclV0aWxzKVxuXHRcdCk7XG5cdFx0Zm9yIChjb25zdCBpIGluIGFQcm9wZXJ0eUluZm9TZXQpIHtcblx0XHRcdGFQcm9wZXJ0eUluZm9TZXRbaV0udHlwZUNvbmZpZyA9IFR5cGVNYXAuZ2V0VHlwZUNvbmZpZyhhUHJvcGVydHlJbmZvU2V0W2ldLmRhdGFUeXBlLCB7fSwge30pO1xuXHRcdH1cblx0XHRjb25zdCBvU2VsZWN0aW9uVmFyaWFudENvbmRpdGlvbnMgPSBWaXN1YWxGaWx0ZXJVdGlscy5jb252ZXJ0RmlsdGVyQ29uZGlvbnMoZmlsdGVyQ29uZGl0aW9ucyk7XG5cdFx0Ly8gYUluUGFyYW1ldGVycyBhbmQgdGhlIGJpbmRpbmdzIHRvIGluIHBhcmFtZXRlcnMgYXJlIGluIHRoZSBzYW1lIG9yZGVyIHNvIHdlIGNhbiByZWx5IG9uIGl0IHRvIGNyZWF0ZSBvdXIgY29uZGl0aW9uc1xuXHRcdE9iamVjdC5rZXlzKG9TZWxlY3Rpb25WYXJpYW50Q29uZGl0aW9ucykuZm9yRWFjaChmdW5jdGlvbiAoc0tleTogc3RyaW5nKSB7XG5cdFx0XHRtQ29uZGl0aW9uc1tzS2V5XSA9IG9TZWxlY3Rpb25WYXJpYW50Q29uZGl0aW9uc1tzS2V5XTtcblx0XHRcdC8vZmV0Y2ggbG9jYWxEYXRhUHJvcGVydHkgaWYgc2VsZWN0aW9uIHZhcmlhbnQga2V5IGlzIGJhc2VkIG9uIHZhdWUgbGlzdCBwcm9wZXJ0eVxuXHRcdFx0Y29uc3QgaW5QYXJhbWV0ZXJGb3JLZXkgPSBhSW5QYXJhbWV0ZXJzLmZpbmQoZnVuY3Rpb24gKGluUGFyYW1ldGVyOiB7IHZhbHVlTGlzdFByb3BlcnR5OiBzdHJpbmcgfSkge1xuXHRcdFx0XHRyZXR1cm4gaW5QYXJhbWV0ZXIudmFsdWVMaXN0UHJvcGVydHkgPT09IHNLZXk7XG5cdFx0XHR9KTtcblx0XHRcdGNvbnN0IGxvY2FsRGF0YVByb3BlcnR5ID0gaW5QYXJhbWV0ZXJGb3JLZXkgPyBpblBhcmFtZXRlckZvcktleS5sb2NhbERhdGFQcm9wZXJ0eSA6IHNLZXk7XG5cdFx0XHRpZiAoIWFQYXJhbWV0ZXJzIHx8IChhUGFyYW1ldGVycyAmJiAhYVBhcmFtZXRlcnMuaW5jbHVkZXMoc0tleSkpKSB7XG5cdFx0XHRcdGZvciAoY29uc3QgaSBpbiBhUHJvcGVydHlJbmZvU2V0KSB7XG5cdFx0XHRcdFx0Y29uc3QgcHJvcGVydHlJbmZvU2V0ID0gYVByb3BlcnR5SW5mb1NldFtpXTtcblx0XHRcdFx0XHRpZiAobG9jYWxEYXRhUHJvcGVydHkgPT09IHByb3BlcnR5SW5mb1NldC5uYW1lKSB7XG5cdFx0XHRcdFx0XHRpZiAocHJvcGVydHlJbmZvU2V0Py50eXBlQ29uZmlnPy5iYXNlVHlwZSA9PT0gXCJEYXRlVGltZVwiKSB7XG5cdFx0XHRcdFx0XHRcdGlmIChtQ29uZGl0aW9uc1tzS2V5XSkge1xuXHRcdFx0XHRcdFx0XHRcdG1Db25kaXRpb25zW3NLZXldLmZvckVhY2goZnVuY3Rpb24gKGNvbmRpdGlvbikge1xuXHRcdFx0XHRcdFx0XHRcdFx0Y29uZGl0aW9uLnZhbHVlc1swXSA9IFZpc3VhbEZpbHRlclV0aWxzLl9mb3JtYXREYXRlVGltZShjb25kaXRpb24udmFsdWVzWzBdKTtcblx0XHRcdFx0XHRcdFx0XHR9KTtcblx0XHRcdFx0XHRcdFx0fVxuXHRcdFx0XHRcdFx0fVxuXHRcdFx0XHRcdFx0YVZhbHVlTGlzdFByb3BlcnR5SW5mb1NldC5wdXNoKHtcblx0XHRcdFx0XHRcdFx0bmFtZTogc0tleSxcblx0XHRcdFx0XHRcdFx0dHlwZUNvbmZpZzogcHJvcGVydHlJbmZvU2V0LnR5cGVDb25maWdcblx0XHRcdFx0XHRcdH0pO1xuXHRcdFx0XHRcdH1cblx0XHRcdFx0fVxuXHRcdFx0fVxuXHRcdH0pO1xuXHRcdGFJblBhcmFtZXRlcnMuZm9yRWFjaChmdW5jdGlvbiAob0luUGFyYW1ldGVyOiB7IHZhbHVlTGlzdFByb3BlcnR5OiBzdHJpbmc7IGxvY2FsRGF0YVByb3BlcnR5OiBzdHJpbmcgfSwgaW5kZXg6IG51bWJlcikge1xuXHRcdFx0aWYgKGFBcmd1bWVudHNbaW5kZXhdLmxlbmd0aCA+IDApIHtcblx0XHRcdFx0Ly8gc3RvcmUgY29uZGl0aW9ucyB3aXRoIHZhbHVlIGxpc3QgcHJvcGVydHkgc2luY2Ugd2UgYXJlIGZpbHRlcmluZyBvbiB0aGUgdmFsdWUgbGlzdCBjb2xsZWN0aW9uIHBhdGhcblx0XHRcdFx0bUNvbmRpdGlvbnNbb0luUGFyYW1ldGVyLnZhbHVlTGlzdFByb3BlcnR5XSA9IGFBcmd1bWVudHNbaW5kZXhdO1xuXHRcdFx0XHRpZiAoIWFQYXJhbWV0ZXJzIHx8IChhUGFyYW1ldGVycyAmJiAhYVBhcmFtZXRlcnMuaW5jbHVkZXMob0luUGFyYW1ldGVyLnZhbHVlTGlzdFByb3BlcnR5KSkpIHtcblx0XHRcdFx0XHQvLyBhUHJvcGVydHlJbmZvU2V0IGlzIGxpc3Qgb2YgcHJvcGVydGllcyBmcm9tIHRoZSBmaWx0ZXIgYmFyIGJ1dCB3ZSBuZWVkIHRvIGNyZWF0ZSBjb25kaXRpb25zIGZvciB0aGUgdmFsdWUgbGlzdFxuXHRcdFx0XHRcdC8vIHdoaWNoIGNvdWxkIGhhdmUgYSBkaWZmZXJlbnQgY29sbGVjdGlvblBhdGguXG5cdFx0XHRcdFx0Ly8gT25seSB0eXBlQ29uZmlnIGZyb20gYVByb3BlcnR5SW5mb1NldCBpcyByZXF1aXJlZCBmb3IgZ2V0dGluZyB0aGUgY29udmVydGVkIGZpbHRlcnMgZnJvbSBjb25kaXRpb25zXG5cdFx0XHRcdFx0Ly8gc28gd2UgdXBkYXRlIGFQcm9wZXJ0eUluZm9TZXQgdG8gaGF2ZSB0aGUgdmFsdWVMaXN0UHJvcGVydGllcyBvbmx5XG5cdFx0XHRcdFx0Ly8gVGhpcyB3YXkgY29uZGl0aW9ucyB3aWxsIGJlIGNvbnZlcnRlZCB0byBzYXAudWkubW9kZWwuRmlsdGVyIGZvciB0aGUgdmFsdWUgbGlzdFxuXHRcdFx0XHRcdC8vIFRoaXMgd29ya3MgYmVjYXVzZSBmb3IgaW4gcGFyYW1ldGVyIG1hcHBpbmcgdGhlIHByb3BlcnR5IGZyb20gdGhlIG1haW4gZW50aXR5IHR5cGUgc2hvdWxkIGJlIG9mIHRoZSBzYW1lIHR5cGUgYXMgdGhlIHZhbHVlIGxpc3QgZW50aXR5IHR5cGVcblx0XHRcdFx0XHQvLyBUT0RPOiBGb2xsb3cgdXAgd2l0aCBNREMgdG8gY2hlY2sgaWYgdGhleSBjYW4gcHJvdmlkZSBhIGNsZWFuIGFwaSB0byBjb252ZXJ0IGNvbmRpdGlvbnMgaW50byBmaWx0ZXJzXG5cdFx0XHRcdFx0Zm9yIChjb25zdCBpIGluIGFQcm9wZXJ0eUluZm9TZXQpIHtcblx0XHRcdFx0XHRcdC8vIHN0b3JlIGNvbmRpdGlvbnMgd2l0aCB2YWx1ZSBsaXN0IHByb3BlcnR5IHNpbmNlIHdlIGFyZSBmaWx0ZXJpbmcgb24gdGhlIHZhbHVlIGxpc3QgY29sbGVjdGlvbiBwYXRoXG5cdFx0XHRcdFx0XHRjb25zdCBwcm9wZXJ0eUluZm9TZXQgPSBhUHJvcGVydHlJbmZvU2V0W2ldO1xuXHRcdFx0XHRcdFx0aWYgKHByb3BlcnR5SW5mb1NldC5uYW1lID09PSBvSW5QYXJhbWV0ZXIubG9jYWxEYXRhUHJvcGVydHkpIHtcblx0XHRcdFx0XHRcdFx0aWYgKHByb3BlcnR5SW5mb1NldD8udHlwZUNvbmZpZz8uYmFzZVR5cGUgPT09IFwiRGF0ZVRpbWVcIikge1xuXHRcdFx0XHRcdFx0XHRcdGlmIChtQ29uZGl0aW9uc1tvSW5QYXJhbWV0ZXIudmFsdWVMaXN0UHJvcGVydHldKSB7XG5cdFx0XHRcdFx0XHRcdFx0XHRtQ29uZGl0aW9uc1tvSW5QYXJhbWV0ZXIudmFsdWVMaXN0UHJvcGVydHldLmZvckVhY2goZnVuY3Rpb24gKGNvbmRpdGlvbikge1xuXHRcdFx0XHRcdFx0XHRcdFx0XHRjb25kaXRpb24udmFsdWVzWzBdID0gVmlzdWFsRmlsdGVyVXRpbHMuX2Zvcm1hdERhdGVUaW1lKGNvbmRpdGlvbi52YWx1ZXNbMF0pO1xuXHRcdFx0XHRcdFx0XHRcdFx0fSk7XG5cdFx0XHRcdFx0XHRcdFx0fVxuXHRcdFx0XHRcdFx0XHR9XG5cdFx0XHRcdFx0XHRcdGFWYWx1ZUxpc3RQcm9wZXJ0eUluZm9TZXQucHVzaCh7XG5cdFx0XHRcdFx0XHRcdFx0bmFtZTogb0luUGFyYW1ldGVyLnZhbHVlTGlzdFByb3BlcnR5LFxuXHRcdFx0XHRcdFx0XHRcdHR5cGVDb25maWc6IHByb3BlcnR5SW5mb1NldC50eXBlQ29uZmlnXG5cdFx0XHRcdFx0XHRcdH0pO1xuXHRcdFx0XHRcdFx0fVxuXHRcdFx0XHRcdH1cblx0XHRcdFx0fVxuXHRcdFx0fVxuXHRcdH0pO1xuXG5cdFx0Y29uc3Qgb0ludGVybmFsTW9kZWxDb250ZXh0ID0gb0ludGVyYWN0aXZlQ2hhcnQuZ2V0QmluZGluZ0NvbnRleHQoXCJpbnRlcm5hbFwiKSBhcyBJbnRlcm5hbE1vZGVsQ29udGV4dDtcblx0XHRjb25zdCBzSW5mb1BhdGggPSBvSW50ZXJhY3RpdmVDaGFydC5kYXRhKFwiaW5mb1BhdGhcIik7XG5cdFx0bGV0IGJFbmFibGVCaW5kaW5nO1xuXHRcdGNvbnN0IG9SZXNvdXJjZUJ1bmRsZSA9IExpYnJhcnkuZ2V0UmVzb3VyY2VCdW5kbGVGb3IoXCJzYXAuZmUubWFjcm9zXCIpITtcblx0XHRjb25zdCBhUmVxdWlyZWRQcm9wZXJ0aWVzID0gQ29tbW9uSGVscGVyLnBhcnNlQ3VzdG9tRGF0YShvSW50ZXJhY3RpdmVDaGFydC5kYXRhKFwicmVxdWlyZWRQcm9wZXJ0aWVzXCIpKSBhcyBzdHJpbmdbXTtcblx0XHRpZiAoYVJlcXVpcmVkUHJvcGVydGllcy5sZW5ndGgpIHtcblx0XHRcdGNvbnN0IGFDb25kaXRpb25zID0gT2JqZWN0LmtleXMobUNvbmRpdGlvbnMpIHx8IFtdO1xuXHRcdFx0Y29uc3QgYU5vdE1hdGNoZWRDb25kaXRpb25zOiBzdHJpbmdbXSA9IFtdO1xuXHRcdFx0YVJlcXVpcmVkUHJvcGVydGllcy5mb3JFYWNoKGZ1bmN0aW9uIChyZXF1aXJlZFByb3BlcnR5UGF0aDogc3RyaW5nKSB7XG5cdFx0XHRcdGlmICghYUNvbmRpdGlvbnMuaW5jbHVkZXMocmVxdWlyZWRQcm9wZXJ0eVBhdGgpKSB7XG5cdFx0XHRcdFx0YU5vdE1hdGNoZWRDb25kaXRpb25zLnB1c2gocmVxdWlyZWRQcm9wZXJ0eVBhdGgpO1xuXHRcdFx0XHR9XG5cdFx0XHR9KTtcblx0XHRcdGlmICghYU5vdE1hdGNoZWRDb25kaXRpb25zLmxlbmd0aCkge1xuXHRcdFx0XHRiRW5hYmxlQmluZGluZyA9IG9JbnRlcm5hbE1vZGVsQ29udGV4dC5nZXRQcm9wZXJ0eShgJHtzSW5mb1BhdGh9L3Nob3dFcnJvcmApO1xuXHRcdFx0XHRvSW50ZXJuYWxNb2RlbENvbnRleHQuc2V0UHJvcGVydHkoc0luZm9QYXRoLCB7XG5cdFx0XHRcdFx0ZXJyb3JNZXNzYWdlVGl0bGU6IFwiXCIsXG5cdFx0XHRcdFx0ZXJyb3JNZXNzYWdlOiBcIlwiLFxuXHRcdFx0XHRcdHNob3dFcnJvcjogZmFsc2Vcblx0XHRcdFx0fSk7XG5cdFx0XHR9IGVsc2UgaWYgKGFOb3RNYXRjaGVkQ29uZGl0aW9ucy5sZW5ndGggPiAxKSB7XG5cdFx0XHRcdG9JbnRlcm5hbE1vZGVsQ29udGV4dC5zZXRQcm9wZXJ0eShzSW5mb1BhdGgsIHtcblx0XHRcdFx0XHRlcnJvck1lc3NhZ2VUaXRsZTogb1Jlc291cmNlQnVuZGxlLmdldFRleHQoXCJNX1ZJU1VBTF9GSUxURVJTX0VSUk9SX01FU1NBR0VfVElUTEVcIiksXG5cdFx0XHRcdFx0ZXJyb3JNZXNzYWdlOiBvUmVzb3VyY2VCdW5kbGUuZ2V0VGV4dChcIk1fVklTVUFMX0ZJTFRFUlNfUFJPVklERV9GSUxURVJfVkFMX01VTFRJUExFVkZcIiksXG5cdFx0XHRcdFx0c2hvd0Vycm9yOiB0cnVlXG5cdFx0XHRcdH0pO1xuXHRcdFx0XHRyZXR1cm47XG5cdFx0XHR9IGVsc2Uge1xuXHRcdFx0XHRjb25zdCBzTGFiZWwgPVxuXHRcdFx0XHRcdG9NZXRhTW9kZWwuZ2V0T2JqZWN0KGAke3NFbnRpdHlTZXRQYXRofS8ke2FOb3RNYXRjaGVkQ29uZGl0aW9uc1swXX1AY29tLnNhcC52b2NhYnVsYXJpZXMuQ29tbW9uLnYxLkxhYmVsYCkgfHxcblx0XHRcdFx0XHRhTm90TWF0Y2hlZENvbmRpdGlvbnNbMF07XG5cdFx0XHRcdG9JbnRlcm5hbE1vZGVsQ29udGV4dC5zZXRQcm9wZXJ0eShzSW5mb1BhdGgsIHtcblx0XHRcdFx0XHRlcnJvck1lc3NhZ2VUaXRsZTogb1Jlc291cmNlQnVuZGxlLmdldFRleHQoXCJNX1ZJU1VBTF9GSUxURVJTX0VSUk9SX01FU1NBR0VfVElUTEVcIiksXG5cdFx0XHRcdFx0ZXJyb3JNZXNzYWdlOiBvUmVzb3VyY2VCdW5kbGUuZ2V0VGV4dChcIk1fVklTVUFMX0ZJTFRFUlNfUFJPVklERV9GSUxURVJfVkFMX1NJTkdMRVZGXCIsIFtzTGFiZWxdKSxcblx0XHRcdFx0XHRzaG93RXJyb3I6IHRydWVcblx0XHRcdFx0fSk7XG5cdFx0XHRcdHJldHVybjtcblx0XHRcdH1cblx0XHR9IGVsc2Uge1xuXHRcdFx0YkVuYWJsZUJpbmRpbmcgPSBvSW50ZXJuYWxNb2RlbENvbnRleHQuZ2V0UHJvcGVydHkoYCR7c0luZm9QYXRofS9zaG93RXJyb3JgKTtcblx0XHRcdG9JbnRlcm5hbE1vZGVsQ29udGV4dC5zZXRQcm9wZXJ0eShzSW5mb1BhdGgsIHsgZXJyb3JNZXNzYWdlVGl0bGU6IFwiXCIsIGVycm9yTWVzc2FnZTogXCJcIiwgc2hvd0Vycm9yOiBmYWxzZSB9KTtcblx0XHR9XG5cblx0XHRjb25zdCBzRmlsdGVyRW50aXR5TmFtZSA9IG9GaWx0ZXJCYXIuZGF0YShcImVudGl0eVR5cGVcIikuc3BsaXQoXCIvXCIpWzFdO1xuXHRcdGNvbnN0IHNDaGFydEVudGl0eU5hbWUgPSBzUGF0aC5zcGxpdChcIi9cIilbMV0uc3BsaXQoXCIoXCIpWzBdO1xuXHRcdGlmIChhUGFyYW1ldGVycyAmJiBhUGFyYW1ldGVycy5sZW5ndGggJiYgc0ZpbHRlckVudGl0eU5hbWUgPT09IHNDaGFydEVudGl0eU5hbWUpIHtcblx0XHRcdGNvbnN0IHNCaW5kaW5nUGF0aCA9IGJFbmFibGVCaW5kaW5nXG5cdFx0XHRcdD8gRmlsdGVyVXRpbHMuZ2V0QmluZGluZ1BhdGhGb3JQYXJhbWV0ZXJzKG9GaWx0ZXJCYXIsIG1Db25kaXRpb25zLCBhUHJvcGVydHlJbmZvU2V0LCBhUGFyYW1ldGVycylcblx0XHRcdFx0OiB1bmRlZmluZWQ7XG5cblx0XHRcdGlmIChzQmluZGluZ1BhdGgpIHtcblx0XHRcdFx0KG9JbnRlcmFjdGl2ZUNoYXJ0TGlzdEJpbmRpbmcgYXMgeyBzUGF0aD86IHN0cmluZyB9KS5zUGF0aCA9IHNCaW5kaW5nUGF0aDtcblx0XHRcdH1cblx0XHR9XG5cblx0XHRpZiAoYVBhcmFtZXRlcnMgJiYgYVBhcmFtZXRlcnMubGVuZ3RoKSB7XG5cdFx0XHQvL1JlbW92ZSBwYXJhbWV0ZXJzIGZyb20gbUNvbmRpdGlvbnMgc2luY2UgaXQgc2hvdWxkIG5vdCBiZSBhIHBhcnQgb2YgJGZpbHRlclxuXHRcdFx0YVBhcmFtZXRlcnMuZm9yRWFjaChmdW5jdGlvbiAocGFyYW1ldGVyOiBzdHJpbmcpIHtcblx0XHRcdFx0aWYgKG1Db25kaXRpb25zW3BhcmFtZXRlcl0pIHtcblx0XHRcdFx0XHRkZWxldGUgbUNvbmRpdGlvbnNbcGFyYW1ldGVyXTtcblx0XHRcdFx0fVxuXHRcdFx0fSk7XG5cdFx0fVxuXG5cdFx0Ly8gT24gSW5pdGlhbExvYWQgd2hlbiBpbml0aWFsbGF5b3V0IGlzIHZpc3VhbCwgYVByb3BlcnR5SW5mb1NldCBpcyBhbHdheXMgZW1wdHkgYW5kIHdlIGNhbm5vdCBnZXQgZmlsdGVycyBmcm9tIE1EQ0ZpbHRlclV0aWwuXG5cdFx0Ly8gQWxzbyB3aGVuIFNWUXVhbGlmaWVyIGlzIHRoZXJlIHRoZW4gd2Ugc2hvdWxkIG5vdCBjaGFuZ2UgdGhlIGxpc3RiaW5kaW5nIGZpbHRlcnMgdG8gZW1wdHkgYXMgd2UgYXJlIG5vdCBnZXR0aW5nIGZpbHRlcnMgZnJvbSBNRENGaWx0ZXJVdGlsIGJ1dFxuXHRcdC8vIGluc3RlYWQgd2UgbmVlZCB0byBub3QgY2FsbCBsaXN0YmluZGluZy5maWx0ZXIgYW5kIHVzZSB0aGUgdGVtcGxhdGUgdGltZSBiaW5kaW5nIGl0c2VsZi5cblx0XHRpZiAoT2JqZWN0LmtleXMobUNvbmRpdGlvbnMpLmxlbmd0aCA+IDAgJiYgYVZhbHVlTGlzdFByb3BlcnR5SW5mb1NldC5sZW5ndGgpIHtcblx0XHRcdHRyeSB7XG5cdFx0XHRcdG9GaWx0ZXJzID0gKE1kY0ZpbHRlclV0aWwuZ2V0RmlsdGVySW5mbyhvRmlsdGVyQmFyLCBtQ29uZGl0aW9ucywgYVZhbHVlTGlzdFByb3BlcnR5SW5mb1NldCwgW10pIGFzIHsgZmlsdGVyczogRmlsdGVyIH0pXG5cdFx0XHRcdFx0LmZpbHRlcnM7XG5cdFx0XHR9IGNhdGNoIChlKSB7XG5cdFx0XHRcdExvZy5kZWJ1ZyhcIlZpc3VhbEZpbHRlcjogRXJyb3Igd2hpbGUgZ2V0dGluZyBmaWx0ZXJzIGZyb20gTURDRmlsdGVyVXRpbFwiKTtcblx0XHRcdH1cblx0XHRcdGlmIChvRmlsdGVycykge1xuXHRcdFx0XHRpZiAoIW9GaWx0ZXJzLmdldEZpbHRlcnMoKSkge1xuXHRcdFx0XHRcdGFGaWx0ZXJzLnB1c2gob0ZpbHRlcnMpO1xuXHRcdFx0XHR9IGVsc2UgaWYgKG9GaWx0ZXJzLmdldEZpbHRlcnMoKSkge1xuXHRcdFx0XHRcdGFGaWx0ZXJzID0gb0ZpbHRlcnMuZ2V0RmlsdGVycygpITtcblx0XHRcdFx0fVxuXHRcdFx0fVxuXHRcdH1cblx0XHRpZiAoYklzRHJhZnRTdXBwb3J0ZWQpIHtcblx0XHRcdGFGaWx0ZXJzLnB1c2gobmV3IEZpbHRlcihcIklzQWN0aXZlRW50aXR5XCIsIEZpbHRlck9wZXJhdG9yLkVRLCB0cnVlKSk7XG5cdFx0fVxuXHRcdGlmIChhRmlsdGVycyAmJiBhRmlsdGVycy5sZW5ndGggPiAwKSB7XG5cdFx0XHQob0ludGVyYWN0aXZlQ2hhcnRMaXN0QmluZGluZyBhcyBPRGF0YUxpc3RCaW5kaW5nKT8uZmlsdGVyKGFGaWx0ZXJzKTtcblx0XHR9IGVsc2UgaWYgKCFPYmplY3Qua2V5cyhtQ29uZGl0aW9ucykubGVuZ3RoKSB7XG5cdFx0XHQob0ludGVyYWN0aXZlQ2hhcnRMaXN0QmluZGluZyBhcyBPRGF0YUxpc3RCaW5kaW5nKT8uZmlsdGVyKCk7XG5cdFx0fVxuXHRcdC8vIHVwZGF0ZSB0aGUgaW50ZXJhY3RpdmUgY2hhcnQgYmluZGluZ1xuXHRcdGlmIChiRW5hYmxlQmluZGluZykge1xuXHRcdFx0Y29uc3QgdmlzdWFsRmlsdGVyQkIgPSBWaXN1YWxGaWx0ZXJSdW50aW1lLmdldFBhcmVudFZpc3VhbEZpbHRlckNvbnRyb2xCQihvSW50ZXJhY3RpdmVDaGFydCk7XG5cdFx0XHR2aXN1YWxGaWx0ZXJCQj8uX3NldEludGVybmFsVXBkYXRlUGVuZGluZyhmYWxzZSk7XG5cdFx0fVxuXHRcdHJldHVybiBhRmlsdGVycztcblx0fSxcblx0Z2V0RmlsdGVyQ291bnRzKHRoaXM6IENvbnRyb2wsIG9Db25kaXRpb25zOiBDb25kaXRpb25PYmplY3RbXSk6IHN0cmluZyB8IHVuZGVmaW5lZCB7XG5cdFx0aWYgKHRoaXMuZGF0YShcIm11bHRpcGxlU2VsZWN0aW9uQWxsb3dlZFwiKSA9PT0gZmFsc2UgJiYgb0NvbmRpdGlvbnMubGVuZ3RoID4gMCkge1xuXHRcdFx0cmV0dXJuIGAoMSlgO1xuXHRcdH1cblx0XHRpZiAob0NvbmRpdGlvbnMubGVuZ3RoID4gMCkge1xuXHRcdFx0cmV0dXJuIGAoJHtvQ29uZGl0aW9ucy5sZW5ndGh9KWA7XG5cdFx0fSBlbHNlIHtcblx0XHRcdHJldHVybiB1bmRlZmluZWQ7XG5cdFx0fVxuXHR9LFxuXG5cdHNjYWxlVmlzdWFsRmlsdGVyVmFsdWUoXG5cdFx0b1ZhbHVlOiBzdHJpbmcsXG5cdFx0c2NhbGVGYWN0b3I6IG51bWJlcixcblx0XHRudW1iZXJPZkZyYWN0aW9uYWxEaWdpdHM6IG51bWJlcixcblx0XHRjdXJyZW5jeTogc3RyaW5nLFxuXHRcdG9SYXdWYWx1ZTogc3RyaW5nIHwgbnVtYmVyXG5cdCk6IHN0cmluZyB7XG5cdFx0Ly8gU2NhbGVGYWN0b3IgaWYgZGVmaW5lZCBpcyBwcmlvcml0eSBmb3IgZm9ybWF0dGluZ1xuXHRcdGlmIChzY2FsZUZhY3Rvcikge1xuXHRcdFx0cmV0dXJuIFZpc3VhbEZpbHRlclV0aWxzLmdldEZvcm1hdHRlZE51bWJlcihvUmF3VmFsdWUsIHNjYWxlRmFjdG9yLCBudW1iZXJPZkZyYWN0aW9uYWxEaWdpdHMpO1xuXHRcdFx0Ly8gSWYgU2NhbGUgRmFjdG9yIGlzIG5vdCBkZWZpbmVkLCB1c2UgY3VycmVuY3kgZm9ybWF0dGluZ1xuXHRcdH0gZWxzZSBpZiAoY3VycmVuY3kpIHtcblx0XHRcdHJldHVybiBWaXN1YWxGaWx0ZXJVdGlscy5nZXRGb3JtYXR0ZWROdW1iZXIob1Jhd1ZhbHVlLCB1bmRlZmluZWQsIHVuZGVmaW5lZCwgY3VycmVuY3kpO1xuXHRcdFx0Ly8gTm8gU2NhbGVGYWN0b3IgYW5kIG5vIEN1cnJlbmN5LCB1c2UgbnVtYmVyT2ZGcmFjdGlvbmFsRGlnaXRzIGRlZmluZWQgaW4gRGF0YVBvaW50XG5cdFx0fSBlbHNlIGlmIChudW1iZXJPZkZyYWN0aW9uYWxEaWdpdHMgPiAwKSB7XG5cdFx0XHQvLyBOdW1iZXIgb2YgZnJhY3Rpb25hbCBkaWdpdHMgc2hhbGwgbm90IGV4Y2VlZCAyLCB1bmxlc3MgcmVxdWlyZWQgYnkgY3VycmVuY3lcblx0XHRcdG51bWJlck9mRnJhY3Rpb25hbERpZ2l0cyA9IG51bWJlck9mRnJhY3Rpb25hbERpZ2l0cyA+IDIgPyAyIDogbnVtYmVyT2ZGcmFjdGlvbmFsRGlnaXRzO1xuXHRcdFx0cmV0dXJuIFZpc3VhbEZpbHRlclV0aWxzLmdldEZvcm1hdHRlZE51bWJlcihvUmF3VmFsdWUsIHVuZGVmaW5lZCwgbnVtYmVyT2ZGcmFjdGlvbmFsRGlnaXRzKTtcblx0XHR9IGVsc2Uge1xuXHRcdFx0cmV0dXJuIG9WYWx1ZTtcblx0XHR9XG5cdH0sXG5cdGZpcmVWYWx1ZUhlbHAob0V2ZW50OiBVSTVFdmVudDx7fSwgQ29udHJvbD4pOiB2b2lkIHtcblx0XHRvRXZlbnQuZ2V0U291cmNlKCkuZ2V0UGFyZW50KCk/LmdldFBhcmVudCgpPy5nZXRQYXJlbnQoKT8uZ2V0UGFyZW50KCk/LmZpcmVFdmVudChcInZhbHVlSGVscFJlcXVlc3RcIik7XG5cdH1cbn07XG5cbk9iamVjdFBhdGguc2V0KFwic2FwLmZlLm1hY3Jvcy52aXN1YWxmaWx0ZXJzLlZpc3VhbEZpbHRlclJ1bnRpbWVcIiwgVmlzdWFsRmlsdGVyUnVudGltZSk7XG5cbmV4cG9ydCBkZWZhdWx0IFZpc3VhbEZpbHRlclJ1bnRpbWU7XG4iXSwibWFwcGluZ3MiOiI7Ozs7Ozs7O0VBNkJBO0FBQ0E7QUFDQTtBQUNBO0VBQ0EsTUFBTUEsbUJBQW1CLEdBQUc7SUFDM0JDLGdCQUFnQkEsQ0FDZkMsTUFJOEMsRUFDdkM7TUFDUCxNQUFNQyxpQkFBMEIsR0FBSUQsTUFBTSxDQUFjRSxTQUFTLENBQUMsQ0FBQztNQUNuRSxNQUFNQyxhQUFhLEdBQUdGLGlCQUFpQixDQUFDRyxJQUFJLENBQUMsY0FBYyxDQUFDO01BQzVELE1BQU1DLGtCQUFrQixHQUFHSixpQkFBaUIsQ0FBQ0csSUFBSSxDQUFDLG1CQUFtQixDQUFDO01BQ3RFLE1BQU1FLFVBQVUsR0FBR0wsaUJBQWlC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
@@ -30,7 +30,6 @@ import type { MetaModelType } from "../../../../../../../types/metamodel_types";
30
30
  /**
31
31
  * Static class used by Visual Filter during runtime
32
32
  * @private
33
- * @experimental This module is only for internal/experimental use!
34
33
  */
35
34
  const VisualFilterRuntime = {
36
35
  selectionChanged(
@@ -257,7 +256,7 @@ const VisualFilterRuntime = {
257
256
  aNotMatchedConditions[0];
258
257
  oInternalModelContext.setProperty(sInfoPath, {
259
258
  errorMessageTitle: oResourceBundle.getText("M_VISUAL_FILTERS_ERROR_MESSAGE_TITLE"),
260
- errorMessage: oResourceBundle.getText("M_VISUAL_FILTERS_PROVIDE_FILTER_VAL_SINGLEVF", sLabel),
259
+ errorMessage: oResourceBundle.getText("M_VISUAL_FILTERS_PROVIDE_FILTER_VAL_SINGLEVF", [sLabel]),
261
260
  showError: true
262
261
  });
263
262
  return;