@sapui5/sap.fe.macros 1.141.2 → 1.142.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 (239) hide show
  1. package/package.json +1 -1
  2. package/src/sap/fe/macros/.library +1 -1
  3. package/src/sap/fe/macros/Breadcrumbs.js +4 -10
  4. package/src/sap/fe/macros/Breadcrumbs.tsx +2 -8
  5. package/src/sap/fe/macros/Chart.js +34 -23
  6. package/src/sap/fe/macros/Chart.tsx +25 -11
  7. package/src/sap/fe/macros/CollaborativeDraftHandler.js +48 -31
  8. package/src/sap/fe/macros/CollaborativeDraftHandler.tsx +51 -26
  9. package/src/sap/fe/macros/CollectionBindingInfo.js +8 -2
  10. package/src/sap/fe/macros/CollectionBindingInfo.ts +11 -6
  11. package/src/sap/fe/macros/CommonHelper.js +14 -24
  12. package/src/sap/fe/macros/CommonHelper.ts +18 -25
  13. package/src/sap/fe/macros/Field.js +34 -17
  14. package/src/sap/fe/macros/Field.ts +64 -32
  15. package/src/sap/fe/macros/FooterContent.js +7 -3
  16. package/src/sap/fe/macros/FooterContent.tsx +8 -13
  17. package/src/sap/fe/macros/KPITag.js +1 -1
  18. package/src/sap/fe/macros/KPITag.tsx +3 -1
  19. package/src/sap/fe/macros/MacroAPI.js +3 -2
  20. package/src/sap/fe/macros/MacroAPI.ts +2 -2
  21. package/src/sap/fe/macros/MessageButton.js +4 -3
  22. package/src/sap/fe/macros/MessageButton.tsx +7 -3
  23. package/src/sap/fe/macros/MicroChart.js +10 -6
  24. package/src/sap/fe/macros/MicroChart.tsx +8 -2
  25. package/src/sap/fe/macros/MultiValueField.js +22 -36
  26. package/src/sap/fe/macros/MultiValueField.tsx +34 -66
  27. package/src/sap/fe/macros/Page.js +8 -4
  28. package/src/sap/fe/macros/Page.tsx +13 -4
  29. package/src/sap/fe/macros/RichTextEditor.js +14 -17
  30. package/src/sap/fe/macros/RichTextEditor.tsx +12 -16
  31. package/src/sap/fe/macros/Status.js +35 -8
  32. package/src/sap/fe/macros/Status.tsx +23 -2
  33. package/src/sap/fe/macros/ValueHelp.js +5 -2
  34. package/src/sap/fe/macros/ValueHelp.tsx +5 -0
  35. package/src/sap/fe/macros/ai/EasyFillDialog.js +2 -1
  36. package/src/sap/fe/macros/ai/EasyFillDialog.tsx +1 -0
  37. package/src/sap/fe/macros/ai/EasyFilterBar.js +7 -34
  38. package/src/sap/fe/macros/ai/EasyFilterBar.tsx +6 -35
  39. package/src/sap/fe/macros/ai/EasyFilterDataFetcher.js +31 -7
  40. package/src/sap/fe/macros/ai/EasyFilterDataFetcher.ts +33 -6
  41. package/src/sap/fe/macros/ai/SummarizationButton.js +6 -4
  42. package/src/sap/fe/macros/ai/SummarizationButton.tsx +5 -3
  43. package/src/sap/fe/macros/chart/Action.js +37 -2
  44. package/src/sap/fe/macros/chart/Action.ts +21 -0
  45. package/src/sap/fe/macros/chart/ActionGroup.js +25 -2
  46. package/src/sap/fe/macros/chart/ActionGroup.ts +13 -0
  47. package/src/sap/fe/macros/chart/ChartDelegate.js +19 -8
  48. package/src/sap/fe/macros/chart/ChartDelegate.ts +36 -12
  49. package/src/sap/fe/macros/chart/MdcChartTemplate.js +59 -14
  50. package/src/sap/fe/macros/chart/MdcChartTemplate.tsx +81 -31
  51. package/src/sap/fe/macros/chart/OverflowGroup.js +62 -0
  52. package/src/sap/fe/macros/chart/OverflowGroup.ts +22 -0
  53. package/src/sap/fe/macros/controls/FilterBar.js +39 -3
  54. package/src/sap/fe/macros/controls/FilterBar.ts +50 -2
  55. package/src/sap/fe/macros/controls/RadioButtons.js +18 -5
  56. package/src/sap/fe/macros/controls/RadioButtons.tsx +10 -1
  57. package/src/sap/fe/macros/controls/TextLink.js +15 -1
  58. package/src/sap/fe/macros/controls/TextLink.tsx +19 -0
  59. package/src/sap/fe/macros/coreUI/CreateDialog.js +2 -2
  60. package/src/sap/fe/macros/coreUI/CreateDialog.tsx +1 -1
  61. package/src/sap/fe/macros/coreUI/OperationParameterDialog.js +46 -13
  62. package/src/sap/fe/macros/coreUI/OperationParameterDialog.tsx +51 -10
  63. package/src/sap/fe/macros/draftIndicator/DraftIndicator.js +4 -2
  64. package/src/sap/fe/macros/draftIndicator/DraftIndicator.tsx +3 -1
  65. package/src/sap/fe/macros/field/FieldFormatOptions.js +3 -3
  66. package/src/sap/fe/macros/field/FieldFormatOptions.ts +1 -1
  67. package/src/sap/fe/macros/field/FieldHelper.js +4 -3
  68. package/src/sap/fe/macros/field/FieldHelper.ts +7 -1
  69. package/src/sap/fe/macros/field/FieldRuntime.js +38 -8
  70. package/src/sap/fe/macros/field/FieldRuntime.ts +65 -7
  71. package/src/sap/fe/macros/field/FieldRuntimeHelper.js +6 -35
  72. package/src/sap/fe/macros/field/FieldRuntimeHelper.ts +35 -60
  73. package/src/sap/fe/macros/field/FieldTemplating.js +10 -4
  74. package/src/sap/fe/macros/field/FieldTemplating.ts +12 -5
  75. package/src/sap/fe/macros/filter/FilterFieldHelper.js +6 -4
  76. package/src/sap/fe/macros/filter/FilterFieldHelper.ts +7 -2
  77. package/src/sap/fe/macros/filter/FilterUtils.js +100 -36
  78. package/src/sap/fe/macros/filter/FilterUtils.ts +127 -39
  79. package/src/sap/fe/macros/filterBar/ExtendedSemanticDateOperators.js +2 -2
  80. package/src/sap/fe/macros/filterBar/ExtendedSemanticDateOperators.ts +1 -1
  81. package/src/sap/fe/macros/filterBar/FilterBar.block.js +13 -3
  82. package/src/sap/fe/macros/filterBar/FilterBar.block.tsx +29 -8
  83. package/src/sap/fe/macros/filterBar/FilterBarAPI.js +10 -7
  84. package/src/sap/fe/macros/filterBar/FilterBarAPI.ts +31 -16
  85. package/src/sap/fe/macros/filterBar/FilterBarDelegate.js +4 -3
  86. package/src/sap/fe/macros/filterBar/FilterBarDelegate.ts +5 -2
  87. package/src/sap/fe/macros/filterBar/mixin/FilterBarAPIStateHandler.js +4 -3
  88. package/src/sap/fe/macros/filterBar/mixin/FilterBarAPIStateHandler.ts +3 -2
  89. package/src/sap/fe/macros/form/Form.block.js +27 -2
  90. package/src/sap/fe/macros/form/Form.block.ts +31 -11
  91. package/src/sap/fe/macros/form/FormActionButtons.fragment.xml +13 -3
  92. package/src/sap/fe/macros/form/FormContainer.block.js +104 -72
  93. package/src/sap/fe/macros/form/FormContainer.block.ts +114 -72
  94. package/src/sap/fe/macros/formatters/TableFormatter.js +13 -10
  95. package/src/sap/fe/macros/formatters/TableFormatter.ts +11 -9
  96. package/src/sap/fe/macros/formatters/VisualFilterFormatter.js +6 -4
  97. package/src/sap/fe/macros/formatters/VisualFilterFormatter.ts +5 -5
  98. package/src/sap/fe/macros/inlineEdit/InlineEdit.js +5 -5
  99. package/src/sap/fe/macros/inlineEdit/InlineEdit.ts +4 -4
  100. package/src/sap/fe/macros/insights/InsightsService.js +3 -2
  101. package/src/sap/fe/macros/insights/InsightsService.ts +2 -1
  102. package/src/sap/fe/macros/internal/DataPoint.js +7 -8
  103. package/src/sap/fe/macros/internal/DataPoint.tsx +6 -9
  104. package/src/sap/fe/macros/internal/field/DisplayStyle.js +8 -6
  105. package/src/sap/fe/macros/internal/field/DisplayStyle.tsx +7 -8
  106. package/src/sap/fe/macros/internal/field/EditStyle.js +18 -24
  107. package/src/sap/fe/macros/internal/field/EditStyle.tsx +24 -44
  108. package/src/sap/fe/macros/internal/field/FieldBlockStructure.js +2 -2
  109. package/src/sap/fe/macros/internal/field/FieldBlockStructure.tsx +1 -1
  110. package/src/sap/fe/macros/internal/field/FieldStructure.js +1 -2
  111. package/src/sap/fe/macros/internal/field/FieldStructure.tsx +0 -2
  112. package/src/sap/fe/macros/internal/field/FieldStructureHelper.js +7 -7
  113. package/src/sap/fe/macros/internal/field/FieldStructureHelper.ts +17 -11
  114. package/src/sap/fe/macros/internal/helpers/DataPointTemplating.js +6 -2
  115. package/src/sap/fe/macros/internal/helpers/DataPointTemplating.ts +5 -1
  116. package/src/sap/fe/macros/internal/valuehelp/AdditionalValueFormatter.js +44 -12
  117. package/src/sap/fe/macros/internal/valuehelp/AdditionalValueFormatter.ts +42 -11
  118. package/src/sap/fe/macros/internal/valuehelp/AdditionalValueHelper.js +54 -1
  119. package/src/sap/fe/macros/internal/valuehelp/AdditionalValueHelper.ts +59 -0
  120. package/src/sap/fe/macros/internal/valuehelp/TableDelegate.js +4 -4
  121. package/src/sap/fe/macros/internal/valuehelp/TableDelegate.ts +6 -6
  122. package/src/sap/fe/macros/internal/valuehelp/ValueListDialogTable.fragment.xml +5 -2
  123. package/src/sap/fe/macros/library.js +5 -6
  124. package/src/sap/fe/macros/{library.ts → library.tsx} +3 -1
  125. package/src/sap/fe/macros/mdc/adapter/StateHelper.js +15 -5
  126. package/src/sap/fe/macros/mdc/adapter/StateHelper.ts +21 -5
  127. package/src/sap/fe/macros/messagebundle.properties +13 -5
  128. package/src/sap/fe/macros/messagebundle_ar.properties +12 -3
  129. package/src/sap/fe/macros/messagebundle_bg.properties +13 -4
  130. package/src/sap/fe/macros/messagebundle_ca.properties +12 -3
  131. package/src/sap/fe/macros/messagebundle_cnr.properties +12 -3
  132. package/src/sap/fe/macros/messagebundle_cs.properties +11 -2
  133. package/src/sap/fe/macros/messagebundle_cy.properties +12 -3
  134. package/src/sap/fe/macros/messagebundle_da.properties +12 -3
  135. package/src/sap/fe/macros/messagebundle_de.properties +16 -7
  136. package/src/sap/fe/macros/messagebundle_el.properties +13 -4
  137. package/src/sap/fe/macros/messagebundle_en.properties +13 -4
  138. package/src/sap/fe/macros/messagebundle_en_GB.properties +13 -4
  139. package/src/sap/fe/macros/messagebundle_en_US_saprigi.properties +12 -3
  140. package/src/sap/fe/macros/messagebundle_es.properties +12 -3
  141. package/src/sap/fe/macros/messagebundle_es_MX.properties +12 -3
  142. package/src/sap/fe/macros/messagebundle_et.properties +12 -3
  143. package/src/sap/fe/macros/messagebundle_fi.properties +12 -3
  144. package/src/sap/fe/macros/messagebundle_fr.properties +12 -3
  145. package/src/sap/fe/macros/messagebundle_fr_CA.properties +12 -3
  146. package/src/sap/fe/macros/messagebundle_hi.properties +12 -3
  147. package/src/sap/fe/macros/messagebundle_hr.properties +13 -4
  148. package/src/sap/fe/macros/messagebundle_hu.properties +12 -3
  149. package/src/sap/fe/macros/messagebundle_id.properties +18 -9
  150. package/src/sap/fe/macros/messagebundle_it.properties +12 -3
  151. package/src/sap/fe/macros/messagebundle_iw.properties +12 -3
  152. package/src/sap/fe/macros/messagebundle_ja.properties +12 -3
  153. package/src/sap/fe/macros/messagebundle_kk.properties +11 -2
  154. package/src/sap/fe/macros/messagebundle_ko.properties +13 -4
  155. package/src/sap/fe/macros/messagebundle_lt.properties +12 -3
  156. package/src/sap/fe/macros/messagebundle_lv.properties +12 -3
  157. package/src/sap/fe/macros/messagebundle_mk.properties +12 -3
  158. package/src/sap/fe/macros/messagebundle_ms.properties +12 -3
  159. package/src/sap/fe/macros/messagebundle_nl.properties +12 -3
  160. package/src/sap/fe/macros/messagebundle_no.properties +12 -3
  161. package/src/sap/fe/macros/messagebundle_pl.properties +12 -3
  162. package/src/sap/fe/macros/messagebundle_pt.properties +12 -3
  163. package/src/sap/fe/macros/messagebundle_pt_PT.properties +12 -3
  164. package/src/sap/fe/macros/messagebundle_ro.properties +13 -4
  165. package/src/sap/fe/macros/messagebundle_ru.properties +12 -3
  166. package/src/sap/fe/macros/messagebundle_sh.properties +12 -3
  167. package/src/sap/fe/macros/messagebundle_sk.properties +12 -3
  168. package/src/sap/fe/macros/messagebundle_sl.properties +13 -4
  169. package/src/sap/fe/macros/messagebundle_sr.properties +12 -3
  170. package/src/sap/fe/macros/messagebundle_sv.properties +12 -3
  171. package/src/sap/fe/macros/messagebundle_th.properties +11 -2
  172. package/src/sap/fe/macros/messagebundle_tr.properties +12 -3
  173. package/src/sap/fe/macros/messagebundle_uk.properties +12 -3
  174. package/src/sap/fe/macros/messagebundle_vi.properties +13 -4
  175. package/src/sap/fe/macros/messagebundle_zh_CN.properties +12 -3
  176. package/src/sap/fe/macros/messagebundle_zh_TW.properties +12 -3
  177. package/src/sap/fe/macros/messages/MessageButton.js +21 -12
  178. package/src/sap/fe/macros/messages/MessageButton.ts +21 -11
  179. package/src/sap/fe/macros/multivaluefield/MultiValueFieldDelegate.js +4 -3
  180. package/src/sap/fe/macros/multivaluefield/MultiValueFieldDelegate.ts +5 -2
  181. package/src/sap/fe/macros/quickView/QuickView.js +5 -4
  182. package/src/sap/fe/macros/quickView/QuickView.tsx +10 -3
  183. package/src/sap/fe/macros/richtexteditor/ButtonGroup.js +2 -2
  184. package/src/sap/fe/macros/richtexteditor/ButtonGroup.ts +2 -2
  185. package/src/sap/fe/macros/table/Action.js +15 -2
  186. package/src/sap/fe/macros/table/Action.ts +11 -1
  187. package/src/sap/fe/macros/table/ActionGroup.js +15 -2
  188. package/src/sap/fe/macros/table/ActionGroup.ts +8 -0
  189. package/src/sap/fe/macros/table/ActionGroupOverride.js +14 -2
  190. package/src/sap/fe/macros/table/ActionGroupOverride.ts +7 -0
  191. package/src/sap/fe/macros/table/ActionOverride.js +14 -2
  192. package/src/sap/fe/macros/table/ActionOverride.ts +7 -0
  193. package/src/sap/fe/macros/table/ActionsTemplating.js +21 -6
  194. package/src/sap/fe/macros/table/ActionsTemplating.tsx +19 -4
  195. package/src/sap/fe/macros/table/MdcTableTemplate.js +113 -15
  196. package/src/sap/fe/macros/table/MdcTableTemplate.tsx +162 -14
  197. package/src/sap/fe/macros/table/OverflowGroups.js +59 -0
  198. package/src/sap/fe/macros/table/OverflowGroups.ts +27 -0
  199. package/src/sap/fe/macros/table/Table.block.js +72 -29
  200. package/src/sap/fe/macros/table/Table.block.tsx +71 -15
  201. package/src/sap/fe/macros/table/TableAPI.js +213 -154
  202. package/src/sap/fe/macros/table/TableAPI.ts +116 -60
  203. package/src/sap/fe/macros/table/TableDefinition.js +19 -2
  204. package/src/sap/fe/macros/table/TableDefinition.ts +17 -1
  205. package/src/sap/fe/macros/table/TableEventHandlerProvider.js +8 -5
  206. package/src/sap/fe/macros/table/TableEventHandlerProvider.ts +14 -12
  207. package/src/sap/fe/macros/table/TableHelper.js +5 -2
  208. package/src/sap/fe/macros/table/TableHelper.ts +5 -2
  209. package/src/sap/fe/macros/table/TableRuntime.js +2 -2
  210. package/src/sap/fe/macros/table/TableRuntime.ts +4 -6
  211. package/src/sap/fe/macros/table/TableSizeHelper.js +4 -4
  212. package/src/sap/fe/macros/table/TableSizeHelper.ts +6 -11
  213. package/src/sap/fe/macros/table/delegates/TableDelegate.js +69 -28
  214. package/src/sap/fe/macros/table/delegates/TableDelegate.ts +111 -122
  215. package/src/sap/fe/macros/table/massEdit/MassEditDialog.js +41 -15
  216. package/src/sap/fe/macros/table/massEdit/MassEditDialog.tsx +41 -22
  217. package/src/sap/fe/macros/table/massEdit/MassEditDialogHelper.js +2 -2
  218. package/src/sap/fe/macros/table/massEdit/MassEditDialogHelper.tsx +1 -1
  219. package/src/sap/fe/macros/table/massEdit/MassEditField.js +1 -1
  220. package/src/sap/fe/macros/table/massEdit/MassEditField.tsx +3 -6
  221. package/src/sap/fe/macros/table/mixin/EmptyRowsHandler.js +6 -5
  222. package/src/sap/fe/macros/table/mixin/EmptyRowsHandler.ts +10 -4
  223. package/src/sap/fe/macros/table/mixin/TableAPIStateHandler.js +7 -9
  224. package/src/sap/fe/macros/table/mixin/TableAPIStateHandler.ts +7 -8
  225. package/src/sap/fe/macros/table/mixin/TableExport.js +1 -1
  226. package/src/sap/fe/macros/table/mixin/TableExport.ts +3 -3
  227. package/src/sap/fe/macros/table/mixin/TableHierarchy.js +6 -6
  228. package/src/sap/fe/macros/table/mixin/TableHierarchy.ts +5 -5
  229. package/src/sap/fe/macros/valuehelp/ValueHelpDelegate.js +5 -3
  230. package/src/sap/fe/macros/valuehelp/ValueHelpDelegate.ts +7 -4
  231. package/src/sap/fe/macros/visualfilters/InteractiveChartHelper.js +4 -4
  232. package/src/sap/fe/macros/visualfilters/InteractiveChartHelper.ts +3 -3
  233. package/src/sap/fe/macros/visualfilters/VisualFilter.js +20 -2
  234. package/src/sap/fe/macros/visualfilters/VisualFilter.tsx +28 -6
  235. package/src/sap/fe/macros/visualfilters/VisualFilterRuntime.js +6 -3
  236. package/src/sap/fe/macros/visualfilters/VisualFilterRuntime.ts +4 -3
  237. package/src/sap/fe/macros/visualfilters/fragments/InteractiveCharts.js +3 -3
  238. package/src/sap/fe/macros/visualfilters/fragments/InteractiveCharts.tsx +10 -4
  239. package/src/sap/fe/macros/visualfilters/fragments/InteractiveDonutChart.fragment.xml +1 -1
@@ -36,7 +36,7 @@ import {
36
36
  } from "sap/fe/core/templating/CriticalityFormatters";
37
37
  import type { DataModelObjectPath } from "sap/fe/core/templating/DataModelPathHelper";
38
38
  import { enhanceDataModelPath, getContextRelativeTargetObjectPath } from "sap/fe/core/templating/DataModelPathHelper";
39
- import { hasValidAnalyticalCurrencyOrUnit } from "sap/fe/core/templating/UIFormatters";
39
+ import { getTooltipValue, hasValidAnalyticalCurrencyOrUnit } from "sap/fe/core/templating/UIFormatters";
40
40
  import FieldHelper from "sap/fe/macros/field/FieldHelper";
41
41
  import * as FieldTemplating from "sap/fe/macros/field/FieldTemplating";
42
42
  import type { FieldBlockProperties } from "sap/fe/macros/internal/field/FieldStructureHelper";
@@ -848,7 +848,9 @@ const DisplayStyle = {
848
848
  emptyIndicatorMode={field.emptyIndicatorMode}
849
849
  renderWhitespace="true"
850
850
  >
851
- {customdata}
851
+ {{
852
+ customData: [customdata]
853
+ }}
852
854
  </Text>
853
855
  );
854
856
  }
@@ -956,10 +958,7 @@ const DisplayStyle = {
956
958
  const state = buildExpressionForCriticalityColor(convertedDataField);
957
959
 
958
960
  // Extract tooltip from QuickInfo annotation - check DataField first, then property
959
- const tooltipAnnotation =
960
- dataModelObjectPath.targetObject?.annotations?.Common?.QuickInfo ||
961
- enhancedValueDataModelPath.targetObject?.annotations?.Common?.QuickInfo;
962
- const tooltipExpression = tooltipAnnotation ? compileExpression(getExpressionFromAnnotation(tooltipAnnotation)) : undefined;
961
+ const toolTipValue = getTooltipValue(dataModelObjectPath, enhancedValueDataModelPath);
963
962
 
964
963
  const linkUrl = (field.convertedMetaPath as DataFieldWithUrl).Url
965
964
  ? compileExpression(
@@ -980,7 +979,7 @@ const DisplayStyle = {
980
979
  state={state}
981
980
  visible={field.displayVisible}
982
981
  text={field.text}
983
- tooltip={tooltipExpression}
982
+ tooltip={toolTipValue}
984
983
  emptyIndicatorMode={field.emptyIndicatorMode}
985
984
  class="sapMTextRenderWhitespaceWrap"
986
985
  />
@@ -1013,7 +1012,7 @@ const DisplayStyle = {
1013
1012
  icon={criticalityIcon}
1014
1013
  state={state}
1015
1014
  text={field.text}
1016
- tooltip={tooltipExpression}
1015
+ tooltip={toolTipValue}
1017
1016
  visible={field.displayVisible}
1018
1017
  emptyIndicatorMode={field.emptyIndicatorMode}
1019
1018
  {...requiredHelper}
@@ -2,14 +2,15 @@
2
2
  * SAP UI development toolkit for HTML5 (SAPUI5)
3
3
  * (c) Copyright 2009-2025 SAP SE. All rights reserved
4
4
  */
5
- sap.ui.define(["sap/fe/base/BindingToolkit", "sap/fe/base/EventDelegateHook", "sap/fe/core/converters/MetaModelConverter", "sap/fe/core/formatters/CollaborationFormatter", "sap/fe/core/templating/PropertyHelper", "sap/fe/core/templating/UIFormatters", "sap/fe/macros/controls/CollaborationHBox", "sap/fe/macros/controls/RadioButtons", "sap/fe/macros/field/FieldTemplating", "sap/m/Avatar", "sap/m/CheckBox", "sap/m/DatePicker", "sap/m/DateTimePicker", "sap/m/FlexItemData", "sap/m/Input", "sap/m/MaskInput", "sap/m/MaskInputRule", "sap/m/RatingIndicator", "sap/m/TextArea", "sap/m/TimePicker", "sap/ui/core/CustomData", "sap/ui/mdc/Field", "sap/ui/mdc/enums/FieldEditMode", "../../field/FieldHelper", "../../field/TextAreaEx", "sap/fe/base/jsx-runtime/jsx", "sap/fe/base/jsx-runtime/jsxs"], function (BindingToolkit, EventDelegateHook, MetaModelConverter, CollaborationFormatters, PropertyHelper, UIFormatter, CollaborationHBox, RadioButtons, FieldTemplating, Avatar, CheckBox, DatePicker, DateTimePicker, FlexItemData, Input, MaskInput, MaskInputRule, RatingIndicator, TextArea, TimePicker, CustomData, Field, FieldEditMode, FieldHelper, TextAreaEx, _jsx, _jsxs) {
5
+ sap.ui.define(["sap/fe/base/BindingToolkit", "sap/fe/core/converters/MetaModelConverter", "sap/fe/core/templating/DataModelPathHelper", "sap/fe/core/templating/PropertyHelper", "sap/fe/core/templating/UIFormatters", "sap/fe/macros/controls/CollaborationHBox", "sap/fe/macros/controls/RadioButtons", "sap/fe/macros/field/FieldTemplating", "sap/m/CheckBox", "sap/m/DatePicker", "sap/m/DateTimePicker", "sap/m/FlexItemData", "sap/m/Input", "sap/m/MaskInput", "sap/m/MaskInputRule", "sap/m/RatingIndicator", "sap/m/TextArea", "sap/m/TimePicker", "sap/ui/core/CustomData", "sap/ui/mdc/enums/FieldEditMode", "sap/ui/mdc/Field", "../../CollaborativeDraftHandler", "../../field/FieldHelper", "../../field/TextAreaEx", "../../TSXUtils", "sap/fe/base/jsx-runtime/jsx", "sap/fe/base/jsx-runtime/jsxs"], function (BindingToolkit, MetaModelConverter, DataModelPathHelper, PropertyHelper, UIFormatter, CollaborationHBox, RadioButtons, FieldTemplating, CheckBox, DatePicker, DateTimePicker, FlexItemData, Input, MaskInput, MaskInputRule, RatingIndicator, TextArea, TimePicker, CustomData, FieldEditMode, Field, CollaborativeDraftHandler, FieldHelper, TextAreaEx, TSXUtils, _jsx, _jsxs) {
6
6
  "use strict";
7
7
 
8
+ var createCustomDatas = TSXUtils.createCustomDatas;
8
9
  var getTextAlignment = FieldTemplating.getTextAlignment;
9
10
  var getMultipleLinesForDataField = FieldTemplating.getMultipleLinesForDataField;
10
11
  var hasValueHelpWithFixedValues = PropertyHelper.hasValueHelpWithFixedValues;
12
+ var getContextRelativeTargetObjectPath = DataModelPathHelper.getContextRelativeTargetObjectPath;
11
13
  var pathInModel = BindingToolkit.pathInModel;
12
- var compileExpression = BindingToolkit.compileExpression;
13
14
  const EditStyle = {
14
15
  /**
15
16
  * An internal helper to retrieve the reused layout data.
@@ -31,23 +32,10 @@ sap.ui.define(["sap/fe/base/BindingToolkit", "sap/fe/base/EventDelegateHook", "s
31
32
  * @returns An XML-based string with the definition of the avatar
32
33
  */
33
34
  getCollaborationAvatar(field) {
34
- const collaborationHasActivityExpression = compileExpression(field.collaborationExpression);
35
- const collaborationInitialsExpression = compileExpression(UIFormatter.getCollaborationExpression(field.dataModelPath, CollaborationFormatters.getCollaborationActivityInitials));
36
- const collaborationColorExpression = compileExpression(UIFormatter.getCollaborationExpression(field.dataModelPath, CollaborationFormatters.getCollaborationActivityColor));
37
- return _jsx(Avatar, {
38
- "core:require": "{FieldRuntimeHelper: 'sap/fe/macros/field/FieldRuntimeHelper'}",
39
- visible: collaborationHasActivityExpression,
40
- initials: collaborationInitialsExpression,
41
- displaySize: "Custom",
42
- customDisplaySize: "1.5rem",
43
- customFontSize: "0.8rem",
44
- backgroundColor: collaborationColorExpression,
45
- press: field.eventHandlers.showCollaborationEditUser,
46
- children: {
47
- dependents: _jsx(EventDelegateHook, {
48
- stopTapPropagation: true
49
- })
50
- }
35
+ return _jsx(CollaborativeDraftHandler, {
36
+ metaPath: getContextRelativeTargetObjectPath(field.dataModelPath),
37
+ contextPath: field.contextPath.getPath(),
38
+ showAvatar: true
51
39
  });
52
40
  },
53
41
  /**
@@ -130,6 +118,7 @@ sap.ui.define(["sap/fe/base/BindingToolkit", "sap/fe/base/EventDelegateHook", "s
130
118
  value: field.valueBindingExpression,
131
119
  placeholder: field.editStylePlaceholder,
132
120
  width: "100%",
121
+ fieldWidth: "70%",
133
122
  editable: field.editableExpression,
134
123
  description: field.staticDescription,
135
124
  enabled: field.enabledExpression,
@@ -208,6 +197,7 @@ sap.ui.define(["sap/fe/base/BindingToolkit", "sap/fe/base/EventDelegateHook", "s
208
197
  fixedValuesPath: fixedValuesPath,
209
198
  fieldGroupIds: field.fieldGroupIds,
210
199
  value: field.valueBindingExpression,
200
+ editableExpression: field.editableExpression,
211
201
  enabledExpression: field.enabledExpression,
212
202
  radioButtonTextProperty: valueListDescriptionPath,
213
203
  radioButtonKeyProperty: valueListKeyPath,
@@ -249,13 +239,19 @@ sap.ui.define(["sap/fe/base/BindingToolkit", "sap/fe/base/EventDelegateHook", "s
249
239
  });
250
240
  }
251
241
  if (this.showAsRadioButton(field) !== true) {
242
+ const customData = createCustomDatas([{
243
+ key: "sourcePath",
244
+ value: field.dataSourcePath
245
+ }, {
246
+ key: "valueState",
247
+ value: field.valueState
248
+ }]);
252
249
  return _jsx(Field, {
253
250
  "core:require": "{Field: 'sap/fe/macros/Field'}",
254
251
  delegate: delegate,
255
252
  id: field.editStyleId,
256
253
  value: field.valueBindingExpression,
257
254
  placeholder: field.editStylePlaceholder,
258
- valueState: field.valueState,
259
255
  editMode: field.editMode ?? field.computedEditMode,
260
256
  width: "100%",
261
257
  required: field.requiredExpression,
@@ -273,9 +269,7 @@ sap.ui.define(["sap/fe/base/BindingToolkit", "sap/fe/base/EventDelegateHook", "s
273
269
  children: {
274
270
  contentEdit: optionalContentEdit,
275
271
  layoutData: optionalLayoutData,
276
- customData: _jsx(CustomData, {
277
- value: field.dataSourcePath
278
- }, "sourcePath")
272
+ customData: customData
279
273
  }
280
274
  });
281
275
  } else {
@@ -493,4 +487,4 @@ sap.ui.define(["sap/fe/base/BindingToolkit", "sap/fe/base/EventDelegateHook", "s
493
487
  };
494
488
  return EditStyle;
495
489
  }, false);
496
- //# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJuYW1lcyI6WyJFZGl0U3R5bGUiLCJnZXRMYXlvdXREYXRhIiwiZmllbGQiLCJsYXlvdXREYXRhIiwiY29sbGFib3JhdGlvbkVuYWJsZWQiLCJfanN4IiwiRmxleEl0ZW1EYXRhIiwiZ3Jvd0ZhY3RvciIsImdldENvbGxhYm9yYXRpb25BdmF0YXIiLCJjb2xsYWJvcmF0aW9uSGFzQWN0aXZpdHlFeHByZXNzaW9uIiwiY29tcGlsZUV4cHJlc3Npb24iLCJjb2xsYWJvcmF0aW9uRXhwcmVzc2lvbiIsImNvbGxhYm9yYXRpb25Jbml0aWFsc0V4cHJlc3Npb24iLCJVSUZvcm1hdHRlciIsImdldENvbGxhYm9yYXRpb25FeHByZXNzaW9uIiwiZGF0YU1vZGVsUGF0aCIsIkNvbGxhYm9yYXRpb25Gb3JtYXR0ZXJzIiwiZ2V0Q29sbGFib3JhdGlvbkFjdGl2aXR5SW5pdGlhbHMiLCJjb2xsYWJvcmF0aW9uQ29sb3JFeHByZXNzaW9uIiwiZ2V0Q29sbGFib3JhdGlvbkFjdGl2aXR5Q29sb3IiLCJBdmF0YXIiLCJ2aXNpYmxlIiwiaW5pdGlhbHMiLCJkaXNwbGF5U2l6ZSIsImN1c3RvbURpc3BsYXlTaXplIiwiY3VzdG9tRm9udFNpemUiLCJiYWNrZ3JvdW5kQ29sb3IiLCJwcmVzcyIsImV2ZW50SGFuZGxlcnMiLCJzaG93Q29sbGFib3JhdGlvbkVkaXRVc2VyIiwiY2hpbGRyZW4iLCJkZXBlbmRlbnRzIiwiRXZlbnREZWxlZ2F0ZUhvb2siLCJzdG9wVGFwUHJvcGFnYXRpb24iLCJnZXREYXRlVGltZVBpY2tlckdlbmVyaWMiLCJ0eXBlIiwiZGF0YU1vZGVsT2JqZWN0UGF0aCIsIk1ldGFNb2RlbENvbnZlcnRlciIsImdldEludm9sdmVkRGF0YU1vZGVsT2JqZWN0cyIsIm1ldGFQYXRoIiwiY29udGV4dFBhdGgiLCJ0ZXh0QWxpZ24iLCJnZXRUZXh0QWxpZ25tZW50IiwiZm9ybWF0T3B0aW9ucyIsImVkaXRNb2RlQXNPYmplY3QiLCJkYXRlVGltZVBpY2tlclByb3BlcnRpZXMiLCJpZCIsImVkaXRTdHlsZUlkIiwid2lkdGgiLCJlZGl0YWJsZSIsImVkaXRhYmxlRXhwcmVzc2lvbiIsImVuYWJsZWQiLCJlbmFibGVkRXhwcmVzc2lvbiIsInJlcXVpcmVkIiwicmVxdWlyZWRFeHByZXNzaW9uIiwiYXJpYUxhYmVsbGVkQnkiLCJ2YWx1ZSIsInZhbHVlQmluZGluZ0V4cHJlc3Npb24iLCJmaWVsZEdyb3VwSWRzIiwic2hvd1RpbWV6b25lIiwibWluRGF0ZSIsIm1pbkRhdGVFeHByZXNzaW9uIiwidW5kZWZpbmVkIiwibWF4RGF0ZSIsIm1heERhdGVFeHByZXNzaW9uIiwiY2hhbmdlIiwibGl2ZUNoYW5nZSIsInZhbHVlRm9ybWF0IiwidmFsaWRhdGVGaWVsZEdyb3VwIiwiZ2V0RGF0ZVRpbWVQaWNrZXIiLCJkYXRlVGltZVBpY2tlclR5cGUiLCJkYXRlVGltZVBpY2tlciIsIkRhdGVQaWNrZXIiLCJjdXN0b21EYXRhIiwiQ3VzdG9tRGF0YSIsImRhdGFTb3VyY2VQYXRoIiwiRGF0ZVRpbWVQaWNrZXIiLCJUaW1lUGlja2VyIiwiZ2V0SW5wdXRUZW1wbGF0ZSIsIklucHV0IiwicGxhY2Vob2xkZXIiLCJlZGl0U3R5bGVQbGFjZWhvbGRlciIsImRlc2NyaXB0aW9uIiwic3RhdGljRGVzY3JpcHRpb24iLCJlZGl0U3R5bGUiLCJtYXhMZW5ndGgiLCJ0ZXh0TWF4TGVuZ3RoIiwic2hvd0FzUmFkaW9CdXR0b24iLCJyYWRpb0J1dHRvbkNvbmZpZ3VyZWQiLCJwcm9wZXJ0eSIsImFubm90YXRpb25zIiwiQ29tbW9uIiwiVmFsdWVMaXN0V2l0aEZpeGVkVmFsdWVzIiwiaGFzVmFsdWVIZWxwV2l0aEZpeGVkVmFsdWVzIiwiVmFsdWVMaXN0U2hvd1ZhbHVlc0ltbWVkaWF0ZWx5IiwidmFsdWVPZiIsImZpZWxkRWRpdFN0eWxlIiwidmFsdWVMaXN0UGFyYW1ldGVySW5PdXQiLCJWYWx1ZUxpc3QiLCJQYXJhbWV0ZXJzIiwiZmluZCIsInZhbHVlTGlzdFBhcmFtZXRlciIsIiRUeXBlIiwiTG9jYWxEYXRhUHJvcGVydHkiLCJuYW1lIiwiVmFsdWVMaXN0UmVsZXZhbnRRdWFsaWZpZXJzIiwiZ2V0UmFkaW9CdXR0b25UZW1wbGF0ZSIsImZvckJvb2xlYW4iLCJhcmd1bWVudHMiLCJsZW5ndGgiLCJmaXhlZFZhbHVlc1BhdGgiLCJDb2xsZWN0aW9uUGF0aCIsInZhbHVlTGlzdEtleVBhdGgiLCJwYXRoSW5Nb2RlbCIsIlZhbHVlTGlzdFByb3BlcnR5IiwidmFsdWVMaXN0RGVzY3JpcHRpb25QYXRoIiwidmFsdWVIZWxwS2V5VGV4dEFubm90YXRpb25QYXRoIiwidGFyZ2V0RW50aXR5VHlwZSIsInJlc29sdmVQYXRoIiwiZW50aXR5VHlwZSIsImtleXMiLCJUZXh0IiwicGF0aCIsInBvc3NpYmxlVmFsdWVzIiwia2V5IiwidGV4dCIsImdldFRyYW5zbGF0ZWRUZXh0IiwiUmFkaW9CdXR0b25zIiwicmFkaW9CdXR0b25UZXh0UHJvcGVydHkiLCJyYWRpb0J1dHRvbktleVByb3BlcnR5IiwiaG9yaXpvbnRhbExheW91dCIsInJhZGlvQnV0dG9uc0hvcml6b250YWxMYXlvdXQiLCJnZXRJbnB1dFdpdGhWYWx1ZUhlbHBUZW1wbGF0ZSIsImRhdGFGaWVsZERhdGFNb2RlbE9iamVjdFBhdGgiLCJkZWxlZ2F0ZSIsIkZpZWxkSGVscGVyIiwiY29tcHV0ZUZpZWxkQmFzZURlbGVnYXRlIiwicmV0cmlldmVUZXh0RnJvbVZhbHVlTGlzdCIsImRpc3BsYXkiLCJnZXRGaWVsZERpc3BsYXkiLCJkaXNwbGF5TW9kZSIsImhhc011bHRpbGluZUFubm90YXRpb24iLCJVSSIsIk11bHRpTGluZVRleHQiLCJtdWx0aXBsZUxpbmVzIiwiZ2V0TXVsdGlwbGVMaW5lc0ZvckRhdGFGaWVsZCIsImxhYmVsIiwiY29tcHV0ZUxhYmVsVGV4dCIsImNvbnRleHQiLCJvcHRpb25hbENvbnRlbnRFZGl0IiwiVGV4dEFyZWEiLCJyb3dzIiwidGV4dExpbmVzRWRpdCIsImdyb3dpbmciLCJ0ZXh0TWF4TGluZXMiLCJncm93aW5nTWF4TGluZXMiLCJvcHRpb25hbExheW91dERhdGEiLCJGaWVsZCIsInZhbHVlU3RhdGUiLCJlZGl0TW9kZSIsImNvbXB1dGVkRWRpdE1vZGUiLCJhZGRpdGlvbmFsVmFsdWUiLCJ0ZXh0QmluZGluZ0V4cHJlc3Npb24iLCJ2YWx1ZUhlbHAiLCJ2YWx1ZUhlbHBJZCIsImNvbnRlbnRFZGl0IiwiZ2V0Q2hlY2tCb3hUZW1wbGF0ZSIsImlzQ2hlY2tCb3hHcm91cEl0ZW0iLCJpc0ZpZWxkR3JvdXBJdGVtIiwiQ2hlY2tCb3giLCJzZWxlY3RlZCIsIndyYXBwaW5nIiwic2VsZWN0IiwiZ2V0VGV4dEFyZWFUZW1wbGF0ZSIsInNob3dFeGNlZWRlZFRleHQiLCJUZXh0QXJlYUV4IiwiY29scyIsImdldFJhdGluZ0luZGljYXRvclRlbXBsYXRlIiwidG9vbHRpcCIsInJhdGluZ0luZGljYXRvclRvb2x0aXAiLCJSYXRpbmdJbmRpY2F0b3IiLCJtYXhWYWx1ZSIsInJhdGluZ0luZGljYXRvclRhcmdldFZhbHVlIiwiaWNvblNpemUiLCJjbGFzcyIsImdldFRlbXBsYXRlV2l0aFdyYXBwZXIiLCJGaWVsZEVkaXRNb2RlIiwiRGlzcGxheSIsIl9qc3hzIiwiQ29sbGFib3JhdGlvbkhCb3giLCJhbGlnbkl0ZW1zIiwiZ2V0VGVtcGxhdGUiLCJnZXRJbnB1dE1hc2tUZW1wbGF0ZSIsIm9wdGlvbmFsTWFza0lucHV0UnVsZXMiLCJtYXNrIiwibWFza1J1bGUiLCJydWxlIiwicHVzaCIsIk1hc2tJbnB1dFJ1bGUiLCJtYXNrRm9ybWF0U3ltYm9sIiwic3ltYm9sIiwicmVnZXgiLCJNYXNrSW5wdXQiLCJwbGFjZWhvbGRlclN5bWJvbCIsInJ1bGVzIiwiaW5uZXJGaWVsZENvbnRlbnQiLCJ1c2VSYWRpb0J1dHRvbnNGb3JCb29sZWFuIl0sInNvdXJjZVJvb3QiOiIuIiwic291cmNlcyI6WyJFZGl0U3R5bGUudHN4Il0sInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB0eXBlIHsgRGF0YUZpZWxkVHlwZXMgfSBmcm9tIFwiQHNhcC11eC92b2NhYnVsYXJpZXMtdHlwZXMvdm9jYWJ1bGFyaWVzL1VJXCI7XG5pbXBvcnQgdHlwZSB7IEJpbmRpbmdUb29sa2l0RXhwcmVzc2lvbiB9IGZyb20gXCJzYXAvZmUvYmFzZS9CaW5kaW5nVG9vbGtpdFwiO1xuaW1wb3J0IHsgY29tcGlsZUV4cHJlc3Npb24sIHBhdGhJbk1vZGVsIH0gZnJvbSBcInNhcC9mZS9iYXNlL0JpbmRpbmdUb29sa2l0XCI7XG5pbXBvcnQgRXZlbnREZWxlZ2F0ZUhvb2sgZnJvbSBcInNhcC9mZS9iYXNlL0V2ZW50RGVsZWdhdGVIb29rXCI7XG5pbXBvcnQgKiBhcyBNZXRhTW9kZWxDb252ZXJ0ZXIgZnJvbSBcInNhcC9mZS9jb3JlL2NvbnZlcnRlcnMvTWV0YU1vZGVsQ29udmVydGVyXCI7XG5pbXBvcnQgKiBhcyBDb2xsYWJvcmF0aW9uRm9ybWF0dGVycyBmcm9tIFwic2FwL2ZlL2NvcmUvZm9ybWF0dGVycy9Db2xsYWJvcmF0aW9uRm9ybWF0dGVyXCI7XG5pbXBvcnQgeyBoYXNWYWx1ZUhlbHBXaXRoRml4ZWRWYWx1ZXMgfSBmcm9tIFwic2FwL2ZlL2NvcmUvdGVtcGxhdGluZy9Qcm9wZXJ0eUhlbHBlclwiO1xuaW1wb3J0ICogYXMgVUlGb3JtYXR0ZXIgZnJvbSBcInNhcC9mZS9jb3JlL3RlbXBsYXRpbmcvVUlGb3JtYXR0ZXJzXCI7XG5pbXBvcnQgQ29sbGFib3JhdGlvbkhCb3ggZnJvbSBcInNhcC9mZS9tYWNyb3MvY29udHJvbHMvQ29sbGFib3JhdGlvbkhCb3hcIjtcbmltcG9ydCBSYWRpb0J1dHRvbnMgZnJvbSBcInNhcC9mZS9tYWNyb3MvY29udHJvbHMvUmFkaW9CdXR0b25zXCI7XG5pbXBvcnQgeyBnZXRNdWx0aXBsZUxpbmVzRm9yRGF0YUZpZWxkLCBnZXRUZXh0QWxpZ25tZW50IH0gZnJvbSBcInNhcC9mZS9tYWNyb3MvZmllbGQvRmllbGRUZW1wbGF0aW5nXCI7XG5pbXBvcnQgdHlwZSB7IEZpZWxkQmxvY2tQcm9wZXJ0aWVzIH0gZnJvbSBcInNhcC9mZS9tYWNyb3MvaW50ZXJuYWwvZmllbGQvRmllbGRTdHJ1Y3R1cmVIZWxwZXJcIjtcbmltcG9ydCBBdmF0YXIgZnJvbSBcInNhcC9tL0F2YXRhclwiO1xuaW1wb3J0IHR5cGUgeyBDaGVja0JveCRTZWxlY3RFdmVudCB9IGZyb20gXCJzYXAvbS9DaGVja0JveFwiO1xuaW1wb3J0IENoZWNrQm94IGZyb20gXCJzYXAvbS9DaGVja0JveFwiO1xuaW1wb3J0IERhdGVQaWNrZXIgZnJvbSBcInNhcC9tL0RhdGVQaWNrZXJcIjtcbmltcG9ydCBEYXRlVGltZVBpY2tlciBmcm9tIFwic2FwL20vRGF0ZVRpbWVQaWNrZXJcIjtcbmltcG9ydCBGbGV4SXRlbURhdGEgZnJvbSBcInNhcC9tL0ZsZXhJdGVtRGF0YVwiO1xuaW1wb3J0IElucHV0IGZyb20gXCJzYXAvbS9JbnB1dFwiO1xuaW1wb3J0IHR5cGUgeyBJbnB1dEJhc2UkQ2hhbmdlRXZlbnQgfSBmcm9tIFwic2FwL20vSW5wdXRCYXNlXCI7XG5pbXBvcnQgdHlwZSB7IE1hc2tJbnB1dCRMaXZlQ2hhbmdlRXZlbnQgfSBmcm9tIFwic2FwL20vTWFza0lucHV0XCI7XG5pbXBvcnQgTWFza0lucHV0IGZyb20gXCJzYXAvbS9NYXNrSW5wdXRcIjtcbmltcG9ydCBNYXNrSW5wdXRSdWxlIGZyb20gXCJzYXAvbS9NYXNrSW5wdXRSdWxlXCI7XG5pbXBvcnQgdHlwZSB7IFJhdGluZ0luZGljYXRvciRDaGFuZ2VFdmVudCB9IGZyb20gXCJzYXAvbS9SYXRpbmdJbmRpY2F0b3JcIjtcbmltcG9ydCBSYXRpbmdJbmRpY2F0b3IgZnJvbSBcInNhcC9tL1JhdGluZ0luZGljYXRvclwiO1xuaW1wb3J0IFRleHRBcmVhIGZyb20gXCJzYXAvbS9UZXh0QXJlYVwiO1xuaW1wb3J0IFRpbWVQaWNrZXIgZnJvbSBcInNhcC9tL1RpbWVQaWNrZXJcIjtcbmltcG9ydCB0eXBlIEV2ZW50IGZyb20gXCJzYXAvdWkvYmFzZS9FdmVudFwiO1xuaW1wb3J0IHR5cGUgeyBkZWZhdWx0IGFzIENvbnRyb2wsIENvbnRyb2wkVmFsaWRhdGVGaWVsZEdyb3VwRXZlbnQsIGRlZmF1bHQgYXMgQ29udHJvbDEgfSBmcm9tIFwic2FwL3VpL2NvcmUvQ29udHJvbFwiO1xuaW1wb3J0IEN1c3RvbURhdGEgZnJvbSBcInNhcC91aS9jb3JlL0N1c3RvbURhdGFcIjtcbmltcG9ydCB0eXBlIHsgRmllbGQkQ2hhbmdlRXZlbnQgfSBmcm9tIFwic2FwL3VpL21kYy9GaWVsZFwiO1xuaW1wb3J0IEZpZWxkIGZyb20gXCJzYXAvdWkvbWRjL0ZpZWxkXCI7XG5pbXBvcnQgRmllbGRFZGl0TW9kZSBmcm9tIFwic2FwL3VpL21kYy9lbnVtcy9GaWVsZEVkaXRNb2RlXCI7XG5pbXBvcnQgdHlwZSB7IE1ldGFNb2RlbFR5cGUgfSBmcm9tIFwiLi4vLi4vLi4vLi4vLi4vLi4vLi4vLi4vdHlwZXMvbWV0YW1vZGVsX3R5cGVzXCI7XG5pbXBvcnQgRmllbGRIZWxwZXIgZnJvbSBcIi4uLy4uL2ZpZWxkL0ZpZWxkSGVscGVyXCI7XG5pbXBvcnQgVGV4dEFyZWFFeCBmcm9tIFwiLi4vLi4vZmllbGQvVGV4dEFyZWFFeFwiO1xuXG5jb25zdCBFZGl0U3R5bGUgPSB7XG5cdC8qKlxuXHQgKiBBbiBpbnRlcm5hbCBoZWxwZXIgdG8gcmV0cmlldmUgdGhlIHJldXNlZCBsYXlvdXQgZGF0YS5cblx0ICogQHBhcmFtIGZpZWxkIFJlZmVyZW5jZSB0byB0aGUgY3VycmVudCBmaWVsZCBpbnN0YW5jZVxuXHQgKiBAcmV0dXJucyBBbiBYTUwtYmFzZWQgc3RyaW5nIHdpdGggdGhlIGRlZmluaXRpb24gb2YgdGhlIGZpZWxkIGNvbnRyb2xcblx0ICovXG5cdGdldExheW91dERhdGEoZmllbGQ6IEZpZWxkQmxvY2tQcm9wZXJ0aWVzKTogc3RyaW5nIHtcblx0XHRsZXQgbGF5b3V0RGF0YSA9IFwiXCI7XG5cdFx0aWYgKGZpZWxkLmNvbGxhYm9yYXRpb25FbmFibGVkKSB7XG5cdFx0XHRsYXlvdXREYXRhID0gPEZsZXhJdGVtRGF0YSBncm93RmFjdG9yPVwiOVwiIC8+O1xuXHRcdH1cblx0XHRyZXR1cm4gbGF5b3V0RGF0YTtcblx0fSxcblxuXHQvKipcblx0ICogR2VuZXJhdGVzIHRoZSBhdmF0YXIgY29udHJvbCBuZXh0IGEgZmllbGQgbG9ja2VkLlxuXHQgKiBAcGFyYW0gZmllbGQgUmVmZXJlbmNlIHRvIHRoZSBjdXJyZW50IGZpZWxkIGluc3RhbmNlXG5cdCAqIEByZXR1cm5zIEFuIFhNTC1iYXNlZCBzdHJpbmcgd2l0aCB0aGUgZGVmaW5pdGlvbiBvZiB0aGUgYXZhdGFyXG5cdCAqL1xuXHRnZXRDb2xsYWJvcmF0aW9uQXZhdGFyKGZpZWxkOiBGaWVsZEJsb2NrUHJvcGVydGllcyk6IHN0cmluZyB7XG5cdFx0Y29uc3QgY29sbGFib3JhdGlvbkhhc0FjdGl2aXR5RXhwcmVzc2lvbiA9IGNvbXBpbGVFeHByZXNzaW9uKGZpZWxkLmNvbGxhYm9yYXRpb25FeHByZXNzaW9uKTtcblx0XHRjb25zdCBjb2xsYWJvcmF0aW9uSW5pdGlhbHNFeHByZXNzaW9uID0gY29tcGlsZUV4cHJlc3Npb24oXG5cdFx0XHRVSUZvcm1hdHRlci5nZXRDb2xsYWJvcmF0aW9uRXhwcmVzc2lvbihmaWVsZC5kYXRhTW9kZWxQYXRoLCBDb2xsYWJvcmF0aW9uRm9ybWF0dGVycy5nZXRDb2xsYWJvcmF0aW9uQWN0aXZpdHlJbml0aWFscylcblx0XHQpO1xuXHRcdGNvbnN0IGNvbGxhYm9yYXRpb25Db2xvckV4cHJlc3Npb24gPSBjb21waWxlRXhwcmVzc2lvbihcblx0XHRcdFVJRm9ybWF0dGVyLmdldENvbGxhYm9yYXRpb25FeHByZXNzaW9uKGZpZWxkLmRhdGFNb2RlbFBhdGgsIENvbGxhYm9yYXRpb25Gb3JtYXR0ZXJzLmdldENvbGxhYm9yYXRpb25BY3Rpdml0eUNvbG9yKVxuXHRcdCk7XG5cblx0XHRyZXR1cm4gKFxuXHRcdFx0PEF2YXRhclxuXHRcdFx0XHRjb3JlOnJlcXVpcmU9XCJ7RmllbGRSdW50aW1lSGVscGVyOiAnc2FwL2ZlL21hY3Jvcy9maWVsZC9GaWVsZFJ1bnRpbWVIZWxwZXInfVwiXG5cdFx0XHRcdHZpc2libGU9e2NvbGxhYm9yYXRpb25IYXNBY3Rpdml0eUV4cHJlc3Npb259XG5cdFx0XHRcdGluaXRpYWxzPXtjb2xsYWJvcmF0aW9uSW5pdGlhbHNFeHByZXNzaW9ufVxuXHRcdFx0XHRkaXNwbGF5U2l6ZT1cIkN1c3RvbVwiXG5cdFx0XHRcdGN1c3RvbURpc3BsYXlTaXplPVwiMS41cmVtXCJcblx0XHRcdFx0Y3VzdG9tRm9udFNpemU9XCIwLjhyZW1cIlxuXHRcdFx0XHRiYWNrZ3JvdW5kQ29sb3I9e2NvbGxhYm9yYXRpb25Db2xvckV4cHJlc3Npb259XG5cdFx0XHRcdHByZXNzPXtmaWVsZC5ldmVudEhhbmRsZXJzLnNob3dDb2xsYWJvcmF0aW9uRWRpdFVzZXIgYXMgdW5rbm93biBhcyAoKG9FdmVudDogRXZlbnQpID0+IHZvaWQpIHwgdW5kZWZpbmVkfVxuXHRcdFx0PlxuXHRcdFx0XHR7e1xuXHRcdFx0XHRcdGRlcGVuZGVudHM6IDxFdmVudERlbGVnYXRlSG9vayBzdG9wVGFwUHJvcGFnYXRpb249e3RydWV9IC8+XG5cdFx0XHRcdH19XG5cdFx0XHQ8L0F2YXRhcj5cblx0XHQpO1xuXHR9LFxuXG5cdC8qKlxuXHQgKiBHZW5lcmF0ZXMgYSB0ZW1wbGF0ZSBmb3Igb25lIG9mIHRoZSBwaWNrZXJzIHJlZmVyZW5jZSBpbiB0aGUgdHlwZS5cblx0ICogQHBhcmFtIGZpZWxkIFJlZmVyZW5jZSB0byB0aGUgY3VycmVudCBmaWVsZCBpbnN0YW5jZVxuXHQgKiBAcGFyYW0gdHlwZSBSZWZlcmVuY2UgdG8gb25lIG9mIHRoZSBlZGl0IHN0eWxlIHBpY2tlciB0eXBlc1xuXHQgKiBAcmV0dXJucyBBbiBYTUwtYmFzZWQgc3RyaW5nIHdpdGggdGhlIGRlZmluaXRpb24gb2YgdGhlIGZpZWxkIGNvbnRyb2xcblx0ICovXG5cdGdldERhdGVUaW1lUGlja2VyR2VuZXJpYyhmaWVsZDogRmllbGRCbG9ja1Byb3BlcnRpZXMsIHR5cGU6IFwiRGF0ZVBpY2tlclwiIHwgXCJEYXRlVGltZVBpY2tlclwiIHwgXCJUaW1lUGlja2VyXCIpOiBzdHJpbmcge1xuXHRcdGNvbnN0IGRhdGFNb2RlbE9iamVjdFBhdGggPSBNZXRhTW9kZWxDb252ZXJ0ZXIuZ2V0SW52b2x2ZWREYXRhTW9kZWxPYmplY3RzPERhdGFGaWVsZFR5cGVzPihmaWVsZC5tZXRhUGF0aCwgZmllbGQuY29udGV4dFBhdGgpO1xuXHRcdGNvbnN0IHRleHRBbGlnbiA9IGdldFRleHRBbGlnbm1lbnQoXG5cdFx0XHRkYXRhTW9kZWxPYmplY3RQYXRoLFxuXHRcdFx0ZmllbGQuZm9ybWF0T3B0aW9ucyxcblx0XHRcdGZpZWxkLmVkaXRNb2RlQXNPYmplY3QgYXMgQmluZGluZ1Rvb2xraXRFeHByZXNzaW9uPHN0cmluZz5cblx0XHQpO1xuXG5cdFx0Y29uc3QgZGF0ZVRpbWVQaWNrZXJQcm9wZXJ0aWVzID0ge1xuXHRcdFx0XCJjb3JlOnJlcXVpcmVcIjogXCJ7RmllbGQ6ICdzYXAvZmUvbWFjcm9zL0ZpZWxkJ31cIixcblx0XHRcdGlkOiBmaWVsZC5lZGl0U3R5bGVJZCxcblx0XHRcdHdpZHRoOiBcIjEwMCVcIixcblx0XHRcdGVkaXRhYmxlOiBmaWVsZC5lZGl0YWJsZUV4cHJlc3Npb24sXG5cdFx0XHRlbmFibGVkOiBmaWVsZC5lbmFibGVkRXhwcmVzc2lvbixcblx0XHRcdHJlcXVpcmVkOiBmaWVsZC5yZXF1aXJlZEV4cHJlc3Npb24sXG5cdFx0XHR0ZXh0QWxpZ246IHRleHRBbGlnbixcblx0XHRcdGFyaWFMYWJlbGxlZEJ5OiBmaWVsZC5hcmlhTGFiZWxsZWRCeSBhcyB1bmtub3duIGFzIEFycmF5PENvbnRyb2wgfCBzdHJpbmc+LFxuXHRcdFx0dmFsdWU6IGZpZWxkLnZhbHVlQmluZGluZ0V4cHJlc3Npb24sXG5cdFx0XHRmaWVsZEdyb3VwSWRzOiBmaWVsZC5maWVsZEdyb3VwSWRzLFxuXHRcdFx0c2hvd1RpbWV6b25lOiBmaWVsZC5zaG93VGltZXpvbmUsXG5cdFx0XHRtaW5EYXRlOiB0eXBlID09PSBcIkRhdGVUaW1lUGlja2VyXCIgfHwgdHlwZSA9PT0gXCJEYXRlUGlja2VyXCIgPyBmaWVsZC5taW5EYXRlRXhwcmVzc2lvbiA6IHVuZGVmaW5lZCxcblx0XHRcdG1heERhdGU6IHR5cGUgPT09IFwiRGF0ZVRpbWVQaWNrZXJcIiB8fCB0eXBlID09PSBcIkRhdGVQaWNrZXJcIiA/IGZpZWxkLm1heERhdGVFeHByZXNzaW9uIDogdW5kZWZpbmVkLFxuXHRcdFx0Y2hhbmdlOlxuXHRcdFx0XHR0eXBlID09PSBcIkRhdGVUaW1lUGlja2VyXCJcblx0XHRcdFx0XHQ/ICgoZmllbGQuY2hhbmdlIHx8IGZpZWxkLmV2ZW50SGFuZGxlcnMuY2hhbmdlKSBhcyB1bmtub3duIGFzIChvRXZlbnQ6IElucHV0QmFzZSRDaGFuZ2VFdmVudCkgPT4gdm9pZClcblx0XHRcdFx0XHQ6IChmaWVsZC5ldmVudEhhbmRsZXJzLmNoYW5nZSBhcyB1bmtub3duIGFzIChvRXZlbnQ6IElucHV0QmFzZSRDaGFuZ2VFdmVudCkgPT4gdm9pZCksXG5cdFx0XHRsaXZlQ2hhbmdlOiBmaWVsZC5ldmVudEhhbmRsZXJzLmxpdmVDaGFuZ2UsXG5cdFx0XHR2YWx1ZUZvcm1hdDogdHlwZSA9PT0gXCJEYXRlUGlja2VyXCIgPyBcIm1lZGl1bVwiIDogdW5kZWZpbmVkLFxuXHRcdFx0dmFsaWRhdGVGaWVsZEdyb3VwOiBmaWVsZC5ldmVudEhhbmRsZXJzLnZhbGlkYXRlRmllbGRHcm91cCBhcyAob0V2ZW50OiBDb250cm9sJFZhbGlkYXRlRmllbGRHcm91cEV2ZW50KSA9PiB2b2lkXG5cdFx0fTtcblxuXHRcdGZ1bmN0aW9uIGdldERhdGVUaW1lUGlja2VyKGRhdGVUaW1lUGlja2VyVHlwZTogc3RyaW5nKTogc3RyaW5nIHtcblx0XHRcdGxldCBkYXRlVGltZVBpY2tlcjtcblx0XHRcdHN3aXRjaCAoZGF0ZVRpbWVQaWNrZXJUeXBlKSB7XG5cdFx0XHRcdGNhc2UgXCJEYXRlUGlja2VyXCI6XG5cdFx0XHRcdFx0ZGF0ZVRpbWVQaWNrZXIgPSAoXG5cdFx0XHRcdFx0XHQ8RGF0ZVBpY2tlciB7Li4uZGF0ZVRpbWVQaWNrZXJQcm9wZXJ0aWVzfT5cblx0XHRcdFx0XHRcdFx0e3sgY3VzdG9tRGF0YTogPEN1c3RvbURhdGEga2V5PVwic291cmNlUGF0aFwiIHZhbHVlPXtmaWVsZC5kYXRhU291cmNlUGF0aH0gLz4gfX1cblx0XHRcdFx0XHRcdDwvRGF0ZVBpY2tlcj5cblx0XHRcdFx0XHQpO1xuXHRcdFx0XHRcdGJyZWFrO1xuXHRcdFx0XHRjYXNlIFwiRGF0ZVRpbWVQaWNrZXJcIjpcblx0XHRcdFx0XHRkYXRlVGltZVBpY2tlciA9IChcblx0XHRcdFx0XHRcdDxEYXRlVGltZVBpY2tlciB7Li4uZGF0ZVRpbWVQaWNrZXJQcm9wZXJ0aWVzfT5cblx0XHRcdFx0XHRcdFx0e3sgY3VzdG9tRGF0YTogPEN1c3RvbURhdGEga2V5PVwic291cmNlUGF0aFwiIHZhbHVlPXtmaWVsZC5kYXRhU291cmNlUGF0aH0gLz4gfX1cblx0XHRcdFx0XHRcdDwvRGF0ZVRpbWVQaWNrZXI+XG5cdFx0XHRcdFx0KTtcblx0XHRcdFx0XHRicmVhaztcblx0XHRcdFx0Y2FzZSBcIlRpbWVQaWNrZXJcIjpcblx0XHRcdFx0XHRkYXRlVGltZVBpY2tlciA9IChcblx0XHRcdFx0XHRcdDxUaW1lUGlja2VyIHsuLi5kYXRlVGltZVBpY2tlclByb3BlcnRpZXN9PlxuXHRcdFx0XHRcdFx0XHR7eyBjdXN0b21EYXRhOiA8Q3VzdG9tRGF0YSBrZXk9XCJzb3VyY2VQYXRoXCIgdmFsdWU9e2ZpZWxkLmRhdGFTb3VyY2VQYXRofSAvPiB9fVxuXHRcdFx0XHRcdFx0PC9UaW1lUGlja2VyPlxuXHRcdFx0XHRcdCk7XG5cdFx0XHRcdFx0YnJlYWs7XG5cdFx0XHR9XG5cdFx0XHRyZXR1cm4gZGF0ZVRpbWVQaWNrZXI7XG5cdFx0fVxuXG5cdFx0cmV0dXJuIGdldERhdGVUaW1lUGlja2VyKHR5cGUpO1xuXHR9LFxuXG5cdC8qKlxuXHQgKiBHZW5lcmF0ZXMgdGhlIElucHV0IHRlbXBsYXRlLlxuXHQgKiBAcGFyYW0gZmllbGQgUmVmZXJlbmNlIHRvIHRoZSBjdXJyZW50IGZpZWxkIGluc3RhbmNlXG5cdCAqIEByZXR1cm5zIEFuIFhNTC1iYXNlZCBzdHJpbmcgd2l0aCB0aGUgZGVmaW5pdGlvbiBvZiB0aGUgZmllbGQgY29udHJvbFxuXHQgKi9cblx0Z2V0SW5wdXRUZW1wbGF0ZShmaWVsZDogRmllbGRCbG9ja1Byb3BlcnRpZXMpOiBzdHJpbmcge1xuXHRcdGNvbnN0IGRhdGFNb2RlbE9iamVjdFBhdGggPSBNZXRhTW9kZWxDb252ZXJ0ZXIuZ2V0SW52b2x2ZWREYXRhTW9kZWxPYmplY3RzPERhdGFGaWVsZFR5cGVzPihmaWVsZC5tZXRhUGF0aCwgZmllbGQuY29udGV4dFBhdGgpO1xuXG5cdFx0Y29uc3QgdGV4dEFsaWduID0gZ2V0VGV4dEFsaWdubWVudChcblx0XHRcdGRhdGFNb2RlbE9iamVjdFBhdGgsXG5cdFx0XHRmaWVsZC5mb3JtYXRPcHRpb25zLFxuXHRcdFx0ZmllbGQuZWRpdE1vZGVBc09iamVjdCBhcyBCaW5kaW5nVG9vbGtpdEV4cHJlc3Npb248c3RyaW5nPlxuXHRcdCk7XG5cblx0XHRyZXR1cm4gKFxuXHRcdFx0PElucHV0XG5cdFx0XHRcdGNvcmU6cmVxdWlyZT1cIntGaWVsZDogJ3NhcC9mZS9tYWNyb3MvRmllbGQnfVwiXG5cdFx0XHRcdGlkPXtmaWVsZC5lZGl0U3R5bGVJZH1cblx0XHRcdFx0dmFsdWU9e2ZpZWxkLnZhbHVlQmluZGluZ0V4cHJlc3Npb259XG5cdFx0XHRcdHBsYWNlaG9sZGVyPXtmaWVsZC5lZGl0U3R5bGVQbGFjZWhvbGRlcn1cblx0XHRcdFx0d2lkdGg9XCIxMDAlXCJcblx0XHRcdFx0ZWRpdGFibGU9e2ZpZWxkLmVkaXRhYmxlRXhwcmVzc2lvbn1cblx0XHRcdFx0ZGVzY3JpcHRpb249e2ZpZWxkLnN0YXRpY0Rlc2NyaXB0aW9ufVxuXHRcdFx0XHRlbmFibGVkPXtmaWVsZC5lbmFibGVkRXhwcmVzc2lvbn1cblx0XHRcdFx0cmVxdWlyZWQ9e2ZpZWxkLnJlcXVpcmVkRXhwcmVzc2lvbn1cblx0XHRcdFx0ZmllbGRHcm91cElkcz17ZmllbGQuZmllbGRHcm91cElkc31cblx0XHRcdFx0dGV4dEFsaWduPXt0ZXh0QWxpZ259XG5cdFx0XHRcdHR5cGU9e2ZpZWxkLmVkaXRTdHlsZSA9PT0gXCJNYXNrZWRcIiA/IFwiUGFzc3dvcmRcIiA6IHVuZGVmaW5lZH1cblx0XHRcdFx0YXJpYUxhYmVsbGVkQnk9e2ZpZWxkLmFyaWFMYWJlbGxlZEJ5IGFzIHVua25vd24gYXMgQXJyYXk8Q29udHJvbCB8IHN0cmluZz59XG5cdFx0XHRcdG1heExlbmd0aD17ZmllbGQuZm9ybWF0T3B0aW9ucy50ZXh0TWF4TGVuZ3RofVxuXHRcdFx0XHRjaGFuZ2U9e2ZpZWxkLmV2ZW50SGFuZGxlcnMuY2hhbmdlIGFzIChvRXZlbnQ6IElucHV0QmFzZSRDaGFuZ2VFdmVudCkgPT4gdm9pZH1cblx0XHRcdFx0bGl2ZUNoYW5nZT17ZmllbGQuZXZlbnRIYW5kbGVycy5saXZlQ2hhbmdlfVxuXHRcdFx0XHR2YWxpZGF0ZUZpZWxkR3JvdXA9e2ZpZWxkLmV2ZW50SGFuZGxlcnMudmFsaWRhdGVGaWVsZEdyb3VwIGFzIChvRXZlbnQ6IENvbnRyb2wkVmFsaWRhdGVGaWVsZEdyb3VwRXZlbnQpID0+IHZvaWR9XG5cdFx0XHQ+XG5cdFx0XHRcdHt7XG5cdFx0XHRcdFx0bGF5b3V0RGF0YTogRWRpdFN0eWxlLmdldExheW91dERhdGEoZmllbGQpLFxuXHRcdFx0XHRcdGN1c3RvbURhdGE6IDxDdXN0b21EYXRhIGtleT1cInNvdXJjZVBhdGhcIiB2YWx1ZT17ZmllbGQuZGF0YVNvdXJjZVBhdGh9IC8+XG5cdFx0XHRcdH19XG5cdFx0XHQ8L0lucHV0PlxuXHRcdCk7XG5cdH0sXG5cblx0LyoqXG5cdCAqIFJldHVybnMgaWYgYSBmaWVsZCBzaGFsbCBiZSB0ZW1wbGF0ZWQgYXMgYSByYWRpbyBidXR0b24gZ3JvdXAuXG5cdCAqIEBwYXJhbSBmaWVsZCBSZWZlcmVuY2UgdG8gdGhlIGN1cnJlbnQgZmllbGQgaW5zdGFuY2Vcblx0ICogQHJldHVybnMgVGhlIGV2YWx1YXRpb24gcmVzdWx0XG5cdCAqL1xuXHRzaG93QXNSYWRpb0J1dHRvbihmaWVsZDogRmllbGRCbG9ja1Byb3BlcnRpZXMpOiBib29sZWFuIHtcblx0XHQvLyBEZXRlcm1pbmUgaWYgd2UgbmVlZCB0byByZW5kZXIgdGhlIGZpZWxkIGFzIGEgcmFkaW8gYnV0dG9uIGdyb3VwXG5cdFx0Ly8gVE9ETzogUmVtb3ZlIHRoZSBuZXh0IHR3byBsaW5lcyBvbmNlIFVYIHVwZGF0ZWQgdGhlIHZvY2FidWxhcnkgbW9kdWxlIGluY2x1ZGluZyB0aGUgbmV3IGV4cGVyaW1lbnRhbCBhbm5vdGF0aW9uXG5cdFx0Ly8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIEB0eXBlc2NyaXB0LWVzbGludC9iYW4tdHMtY29tbWVudFxuXHRcdC8vIEB0cy1pZ25vcmVcblx0XHRjb25zdCByYWRpb0J1dHRvbkNvbmZpZ3VyZWQ6IGJvb2xlYW4gPVxuXHRcdFx0ZmllbGQucHJvcGVydHkuYW5ub3RhdGlvbnM/LkNvbW1vbj8uVmFsdWVMaXN0V2l0aEZpeGVkVmFsdWVzICYmXG5cdFx0XHRoYXNWYWx1ZUhlbHBXaXRoRml4ZWRWYWx1ZXMoZmllbGQucHJvcGVydHkpID09PSB0cnVlICYmXG5cdFx0XHQoKGZpZWxkLnByb3BlcnR5LmFubm90YXRpb25zLkNvbW1vbi5WYWx1ZUxpc3RXaXRoRml4ZWRWYWx1ZXMuYW5ub3RhdGlvbnM/LkNvbW1vbj8uVmFsdWVMaXN0U2hvd1ZhbHVlc0ltbWVkaWF0ZWx5ICYmXG5cdFx0XHRcdGZpZWxkLnByb3BlcnR5LmFubm90YXRpb25zLkNvbW1vbi5WYWx1ZUxpc3RXaXRoRml4ZWRWYWx1ZXMuYW5ub3RhdGlvbnM/LkNvbW1vbj8uVmFsdWVMaXN0U2hvd1ZhbHVlc0ltbWVkaWF0ZWx5LnZhbHVlT2YoKSA9PT1cblx0XHRcdFx0XHR0cnVlKSB8fFxuXHRcdFx0XHRmaWVsZC5mb3JtYXRPcHRpb25zLmZpZWxkRWRpdFN0eWxlID09PSBcIlJhZGlvQnV0dG9uc1wiKTtcblxuXHRcdC8vIEV4Y2x1ZGUgbm90IHN1cHBvcnRlZCBjYXNlc1xuXHRcdC8vIC0gVmFsdWVMaXN0UGFyYW1hdGVySW5PdXQgLyAuLi5PdXQgbXVzdCBub3QgYmUgZW1wdHlcblx0XHQvLyAtIFZhbHVlTGlzdFJlbGV2YW50UXVhbGlmaWVycyBhbm5vdGF0aW9uIG11c3Qgbm90IGJlIHVzZWRcblx0XHQvLyBGdXJ0aGVyIGNhc2VzIG1heSBub3QgbWFrZSBzZW5zZSB3aXRoIHJhZGlvIGJ1dHRvbnMgYnV0IHdlIGRvIG5vdCBleHBsaWNpdGx5IGV4Y2x1ZGUgdGhlbSBidXQgbWVudGlvbiB0aGlzIGluIGRvY3VtZW50YXRpb24uXG5cdFx0Ly8gQ2hlY2sgZG9jdW1lbnRhdGlvbiwgZGlzY3VzcyBhbmQgZGVjaWRlIGJlZm9yZSBhZGRpbmcgZnVydGhlciByZXN0cmljdGlvbnMgaGVyZS5cblx0XHRjb25zdCB2YWx1ZUxpc3RQYXJhbWV0ZXJJbk91dCA9IGZpZWxkLnByb3BlcnR5Py5hbm5vdGF0aW9ucz8uQ29tbW9uPy5WYWx1ZUxpc3Q/LlBhcmFtZXRlcnMuZmluZChcblx0XHRcdCh2YWx1ZUxpc3RQYXJhbWV0ZXIpID0+XG5cdFx0XHRcdCh2YWx1ZUxpc3RQYXJhbWV0ZXIuJFR5cGUgPT09IFwiY29tLnNhcC52b2NhYnVsYXJpZXMuQ29tbW9uLnYxLlZhbHVlTGlzdFBhcmFtZXRlckluT3V0XCIgfHxcblx0XHRcdFx0XHR2YWx1ZUxpc3RQYXJhbWV0ZXIuJFR5cGUgPT09IFwiY29tLnNhcC52b2NhYnVsYXJpZXMuQ29tbW9uLnYxLlZhbHVlTGlzdFBhcmFtZXRlck91dFwiKSAmJlxuXHRcdFx0XHR2YWx1ZUxpc3RQYXJhbWV0ZXIuTG9jYWxEYXRhUHJvcGVydHkudmFsdWUgPT09IGZpZWxkLnByb3BlcnR5Lm5hbWVcblx0XHQpO1xuXHRcdHJldHVybiAoXG5cdFx0XHRyYWRpb0J1dHRvbkNvbmZpZ3VyZWQgJiZcblx0XHRcdHZhbHVlTGlzdFBhcmFtZXRlckluT3V0ICE9PSB1bmRlZmluZWQgJiZcblx0XHRcdCFmaWVsZC5wcm9wZXJ0eS5hbm5vdGF0aW9ucz8uQ29tbW9uPy5WYWx1ZUxpc3RSZWxldmFudFF1YWxpZmllcnNcblx0XHQpO1xuXHR9LFxuXG5cdC8qKlxuXHQgKiBHZW5lcmF0ZXMgdGhlIFJhZGlvQnV0dG9uIHRlbXBsYXRlLlxuXHQgKiBAcGFyYW0gZmllbGQgUmVmZXJlbmNlIHRvIHRoZSBjdXJyZW50IGZpZWxkIGluc3RhbmNlXG5cdCAqIEBwYXJhbSBmb3JCb29sZWFuXG5cdCAqIEByZXR1cm5zIEFuIFhNTC1iYXNlZCBzdHJpbmcgd2l0aCB0aGUgcmFkaW8gYnV0dG9uIGRlZmluaXRpb25cblx0ICovXG5cdGdldFJhZGlvQnV0dG9uVGVtcGxhdGUoZmllbGQ6IEZpZWxkQmxvY2tQcm9wZXJ0aWVzLCBmb3JCb29sZWFuID0gZmFsc2UpOiBzdHJpbmcge1xuXHRcdGNvbnN0IGZpeGVkVmFsdWVzUGF0aCA9IFwiL1wiICsgZmllbGQucHJvcGVydHk/LmFubm90YXRpb25zPy5Db21tb24/LlZhbHVlTGlzdD8uQ29sbGVjdGlvblBhdGg7XG5cblx0XHRjb25zdCB2YWx1ZUxpc3RQYXJhbWV0ZXJJbk91dCA9IGZpZWxkLnByb3BlcnR5Py5hbm5vdGF0aW9ucz8uQ29tbW9uPy5WYWx1ZUxpc3Q/LlBhcmFtZXRlcnMuZmluZChcblx0XHRcdCh2YWx1ZUxpc3RQYXJhbWV0ZXIpID0+XG5cdFx0XHRcdCh2YWx1ZUxpc3RQYXJhbWV0ZXIuJFR5cGUgPT09IFwiY29tLnNhcC52b2NhYnVsYXJpZXMuQ29tbW9uLnYxLlZhbHVlTGlzdFBhcmFtZXRlckluT3V0XCIgfHxcblx0XHRcdFx0XHR2YWx1ZUxpc3RQYXJhbWV0ZXIuJFR5cGUgPT09IFwiY29tLnNhcC52b2NhYnVsYXJpZXMuQ29tbW9uLnYxLlZhbHVlTGlzdFBhcmFtZXRlck91dFwiKSAmJlxuXHRcdFx0XHR2YWx1ZUxpc3RQYXJhbWV0ZXIuTG9jYWxEYXRhUHJvcGVydHkudmFsdWUgPT09IGZpZWxkLnByb3BlcnR5Lm5hbWVcblx0XHQpO1xuXG5cdFx0Ly8gd2Uga25vdyB0aGF0IGEgdmFsdWVMaXN0UHJvcGVydHkgZXhpc3RzIGJlY2F1c2Ugd2UgY2hlY2sgdGhpcyBhbHJlYWR5IGluIHNob3dBc1JhZGlvQnV0dG9uXG5cdFx0Y29uc3QgdmFsdWVMaXN0S2V5UGF0aCA9IHBhdGhJbk1vZGVsKHZhbHVlTGlzdFBhcmFtZXRlckluT3V0Py5WYWx1ZUxpc3RQcm9wZXJ0eSBhcyBzdHJpbmcpID8/IHBhdGhJbk1vZGVsKFwiXCIpO1xuXG5cdFx0bGV0IHZhbHVlTGlzdERlc2NyaXB0aW9uUGF0aDtcblx0XHRjb25zdCB2YWx1ZUhlbHBLZXlUZXh0QW5ub3RhdGlvblBhdGggPVxuXHRcdFx0ZmllbGQuZGF0YU1vZGVsUGF0aC50YXJnZXRFbnRpdHlUeXBlLnJlc29sdmVQYXRoKGZpeGVkVmFsdWVzUGF0aCk/LmVudGl0eVR5cGUua2V5c1swXS5hbm5vdGF0aW9ucz8uQ29tbW9uPy5UZXh0Py5wYXRoO1xuXHRcdGlmICh2YWx1ZUhlbHBLZXlUZXh0QW5ub3RhdGlvblBhdGgpIHtcblx0XHRcdHZhbHVlTGlzdERlc2NyaXB0aW9uUGF0aCA9IHBhdGhJbk1vZGVsKHZhbHVlSGVscEtleVRleHRBbm5vdGF0aW9uUGF0aCk7XG5cdFx0fSBlbHNlIHtcblx0XHRcdHZhbHVlTGlzdERlc2NyaXB0aW9uUGF0aCA9IHZhbHVlTGlzdEtleVBhdGg7XG5cdFx0fVxuXG5cdFx0bGV0IHBvc3NpYmxlVmFsdWVzOiB7IGtleTogc3RyaW5nIHwgbnVtYmVyIHwgYm9vbGVhbiB8IG51bGw7IHRleHQ6IHN0cmluZyB9W10gfCB1bmRlZmluZWQ7XG5cdFx0aWYgKGZvckJvb2xlYW4pIHtcblx0XHRcdHBvc3NpYmxlVmFsdWVzID0gW1xuXHRcdFx0XHR7IGtleTogdHJ1ZSwgdGV4dDogZmllbGQuZ2V0VHJhbnNsYXRlZFRleHQoXCJUX1JBRElPQlVUVE9OU19CT09MRUFOX1lFU1wiKSB9LFxuXHRcdFx0XHR7IGtleTogZmFsc2UsIHRleHQ6IGZpZWxkLmdldFRyYW5zbGF0ZWRUZXh0KFwiVF9SQURJT0JVVFRPTlNfQk9PTEVBTl9OT1wiKSB9XG5cdFx0XHRdO1xuXHRcdH1cblxuXHRcdHJldHVybiAoXG5cdFx0XHQ8UmFkaW9CdXR0b25zXG5cdFx0XHRcdGlkPXtmaWVsZC5lZGl0U3R5bGVJZH1cblx0XHRcdFx0cG9zc2libGVWYWx1ZXM9e3Bvc3NpYmxlVmFsdWVzfVxuXHRcdFx0XHRyZXF1aXJlZEV4cHJlc3Npb249e2ZpZWxkLnJlcXVpcmVkRXhwcmVzc2lvbn1cblx0XHRcdFx0dmFsaWRhdGVGaWVsZEdyb3VwPXtmaWVsZC5ldmVudEhhbmRsZXJzLnZhbGlkYXRlRmllbGRHcm91cCBhcyAob0V2ZW50OiBDb250cm9sJFZhbGlkYXRlRmllbGRHcm91cEV2ZW50KSA9PiB2b2lkfVxuXHRcdFx0XHRmaXhlZFZhbHVlc1BhdGg9e2ZpeGVkVmFsdWVzUGF0aCBhcyB1bmtub3duIGFzIGB7JHtzdHJpbmd9fWB9XG5cdFx0XHRcdGZpZWxkR3JvdXBJZHM9e2ZpZWxkLmZpZWxkR3JvdXBJZHN9XG5cdFx0XHRcdHZhbHVlPXtmaWVsZC52YWx1ZUJpbmRpbmdFeHByZXNzaW9ufVxuXHRcdFx0XHRlbmFibGVkRXhwcmVzc2lvbj17ZmllbGQuZW5hYmxlZEV4cHJlc3Npb259XG5cdFx0XHRcdHJhZGlvQnV0dG9uVGV4dFByb3BlcnR5PXt2YWx1ZUxpc3REZXNjcmlwdGlvblBhdGh9XG5cdFx0XHRcdHJhZGlvQnV0dG9uS2V5UHJvcGVydHk9e3ZhbHVlTGlzdEtleVBhdGh9XG5cdFx0XHRcdGhvcml6b250YWxMYXlvdXQ9e2ZpZWxkLmZvcm1hdE9wdGlvbnMucmFkaW9CdXR0b25zSG9yaXpvbnRhbExheW91dH1cblx0XHRcdC8+XG5cdFx0KTtcblx0fSxcblxuXHQvKipcblx0ICogR2VuZXJhdGVzIHRoZSBJbnB1dFdpdGhWYWx1ZUhlbHAgdGVtcGxhdGUuXG5cdCAqIEBwYXJhbSBmaWVsZCBSZWZlcmVuY2UgdG8gdGhlIGN1cnJlbnQgZmllbGQgaW5zdGFuY2Vcblx0ICogQHJldHVybnMgQW4gWE1MLWJhc2VkIHN0cmluZyB3aXRoIHRoZSBkZWZpbml0aW9uIG9mIHRoZSBmaWVsZCBjb250cm9sXG5cdCAqL1xuXHRnZXRJbnB1dFdpdGhWYWx1ZUhlbHBUZW1wbGF0ZShmaWVsZDogRmllbGRCbG9ja1Byb3BlcnRpZXMpOiBzdHJpbmcge1xuXHRcdGNvbnN0IGRhdGFGaWVsZERhdGFNb2RlbE9iamVjdFBhdGggPSBNZXRhTW9kZWxDb252ZXJ0ZXIuZ2V0SW52b2x2ZWREYXRhTW9kZWxPYmplY3RzPERhdGFGaWVsZFR5cGVzPihcblx0XHRcdGZpZWxkLm1ldGFQYXRoLFxuXHRcdFx0ZmllbGQuY29udGV4dFBhdGhcblx0XHQpO1xuXG5cdFx0Y29uc3QgZGVsZWdhdGUgPSBGaWVsZEhlbHBlci5jb21wdXRlRmllbGRCYXNlRGVsZWdhdGUoXG5cdFx0XHRcInNhcC9mZS9tYWNyb3MvZmllbGQvRmllbGRCYXNlRGVsZWdhdGVcIixcblx0XHRcdGZpZWxkLmZvcm1hdE9wdGlvbnMucmV0cmlldmVUZXh0RnJvbVZhbHVlTGlzdCBhcyBib29sZWFuXG5cdFx0KTtcblx0XHRjb25zdCBkaXNwbGF5ID0gVUlGb3JtYXR0ZXIuZ2V0RmllbGREaXNwbGF5KFxuXHRcdFx0ZmllbGQucHJvcGVydHksXG5cdFx0XHRmaWVsZC5mb3JtYXRPcHRpb25zLmRpc3BsYXlNb2RlIGFzIHN0cmluZyxcblx0XHRcdGZpZWxkLmVkaXRNb2RlQXNPYmplY3QgYXMgQmluZGluZ1Rvb2xraXRFeHByZXNzaW9uPHN0cmluZz5cblx0XHQpO1xuXHRcdGNvbnN0IGhhc011bHRpbGluZUFubm90YXRpb24gPSAhIWZpZWxkLnByb3BlcnR5Py5hbm5vdGF0aW9ucz8uVUk/Lk11bHRpTGluZVRleHQ7XG5cdFx0Y29uc3QgbXVsdGlwbGVMaW5lcyA9IGdldE11bHRpcGxlTGluZXNGb3JEYXRhRmllbGQoZmllbGQsIGhhc011bHRpbGluZUFubm90YXRpb24pO1xuXG5cdFx0Y29uc3QgdGV4dEFsaWduID0gZ2V0VGV4dEFsaWdubWVudChcblx0XHRcdGRhdGFGaWVsZERhdGFNb2RlbE9iamVjdFBhdGgsXG5cdFx0XHRmaWVsZC5mb3JtYXRPcHRpb25zLFxuXHRcdFx0ZmllbGQuZWRpdE1vZGVBc09iamVjdCBhcyBCaW5kaW5nVG9vbGtpdEV4cHJlc3Npb248c3RyaW5nPixcblx0XHRcdHRydWVcblx0XHQpO1xuXHRcdGNvbnN0IGxhYmVsID0gRmllbGRIZWxwZXIuY29tcHV0ZUxhYmVsVGV4dChmaWVsZCBhcyB1bmtub3duIGFzIE1ldGFNb2RlbFR5cGU8RGF0YUZpZWxkVHlwZXM+LCB7XG5cdFx0XHRjb250ZXh0OiBmaWVsZC5tZXRhUGF0aFxuXHRcdH0pO1xuXG5cdFx0bGV0IG9wdGlvbmFsQ29udGVudEVkaXQgPSBcIlwiO1xuXHRcdGlmIChmaWVsZC5wcm9wZXJ0eS50eXBlID09PSBcIkVkbS5TdHJpbmdcIiAmJiBoYXNNdWx0aWxpbmVBbm5vdGF0aW9uKSB7XG5cdFx0XHRvcHRpb25hbENvbnRlbnRFZGl0ID0gKFxuXHRcdFx0XHQ8VGV4dEFyZWFcblx0XHRcdFx0XHR2YWx1ZT17ZmllbGQudmFsdWVCaW5kaW5nRXhwcmVzc2lvbn1cblx0XHRcdFx0XHRyZXF1aXJlZD17ZmllbGQucmVxdWlyZWRFeHByZXNzaW9ufVxuXHRcdFx0XHRcdHJvd3M9e2ZpZWxkLmZvcm1hdE9wdGlvbnMudGV4dExpbmVzRWRpdH1cblx0XHRcdFx0XHRncm93aW5nPXsoZmllbGQuZm9ybWF0T3B0aW9ucy50ZXh0TWF4TGluZXMgYXMgdW5rbm93biBhcyBudW1iZXIpID4gMCA/IHRydWUgOiB1bmRlZmluZWR9XG5cdFx0XHRcdFx0Z3Jvd2luZ01heExpbmVzPXtmaWVsZC5mb3JtYXRPcHRpb25zLnRleHRNYXhMaW5lc31cblx0XHRcdFx0XHR3aWR0aD1cIjEwMCVcIlxuXHRcdFx0XHRcdGNoYW5nZT17ZmllbGQuZXZlbnRIYW5kbGVycy5jaGFuZ2UgYXMgdW5rbm93biBhcyAob0V2ZW50OiBJbnB1dEJhc2UkQ2hhbmdlRXZlbnQpID0+IHZvaWR9XG5cdFx0XHRcdFx0ZmllbGRHcm91cElkcz17ZmllbGQuZmllbGRHcm91cElkc31cblx0XHRcdFx0Lz5cblx0XHRcdCk7XG5cdFx0fVxuXG5cdFx0bGV0IG9wdGlvbmFsTGF5b3V0RGF0YSA9IFwiXCI7XG5cdFx0aWYgKGZpZWxkLmNvbGxhYm9yYXRpb25FbmFibGVkID09PSB0cnVlKSB7XG5cdFx0XHRvcHRpb25hbExheW91dERhdGEgPSA8RmxleEl0ZW1EYXRhIGdyb3dGYWN0b3I9XCI5XCIgLz47XG5cdFx0fVxuXG5cdFx0aWYgKHRoaXMuc2hvd0FzUmFkaW9CdXR0b24oZmllbGQpICE9PSB0cnVlKSB7XG5cdFx0XHRyZXR1cm4gKFxuXHRcdFx0XHQ8RmllbGRcblx0XHRcdFx0XHRjb3JlOnJlcXVpcmU9XCJ7RmllbGQ6ICdzYXAvZmUvbWFjcm9zL0ZpZWxkJ31cIlxuXHRcdFx0XHRcdGRlbGVnYXRlPXtkZWxlZ2F0ZX1cblx0XHRcdFx0XHRpZD17ZmllbGQuZWRpdFN0eWxlSWR9XG5cdFx0XHRcdFx0dmFsdWU9e2ZpZWxkLnZhbHVlQmluZGluZ0V4cHJlc3Npb259XG5cdFx0XHRcdFx0cGxhY2Vob2xkZXI9e2ZpZWxkLmVkaXRTdHlsZVBsYWNlaG9sZGVyfVxuXHRcdFx0XHRcdHZhbHVlU3RhdGU9e2ZpZWxkLnZhbHVlU3RhdGV9XG5cdFx0XHRcdFx0ZWRpdE1vZGU9e2ZpZWxkLmVkaXRNb2RlID8/IGZpZWxkLmNvbXB1dGVkRWRpdE1vZGV9XG5cdFx0XHRcdFx0d2lkdGg9XCIxMDAlXCJcblx0XHRcdFx0XHRyZXF1aXJlZD17ZmllbGQucmVxdWlyZWRFeHByZXNzaW9ufVxuXHRcdFx0XHRcdGFkZGl0aW9uYWxWYWx1ZT17ZmllbGQudGV4dEJpbmRpbmdFeHByZXNzaW9ufVxuXHRcdFx0XHRcdGRpc3BsYXk9e2Rpc3BsYXl9XG5cdFx0XHRcdFx0bXVsdGlwbGVMaW5lcz17bXVsdGlwbGVMaW5lcyA9PT0gZmFsc2UgPyB1bmRlZmluZWQgOiBtdWx0aXBsZUxpbmVzfVxuXHRcdFx0XHRcdHZhbHVlSGVscD17ZmllbGQudmFsdWVIZWxwSWR9XG5cdFx0XHRcdFx0ZmllbGRHcm91cElkcz17ZmllbGQuZmllbGRHcm91cElkc31cblx0XHRcdFx0XHR0ZXh0QWxpZ249e3RleHRBbGlnbn1cblx0XHRcdFx0XHRhcmlhTGFiZWxsZWRCeT17ZmllbGQuYXJpYUxhYmVsbGVkQnkgYXMgdW5rbm93biBhcyBBcnJheTxDb250cm9sMSB8IHN0cmluZz59XG5cdFx0XHRcdFx0bGFiZWw9e2xhYmVsfVxuXHRcdFx0XHRcdGNoYW5nZT17ZmllbGQuZXZlbnRIYW5kbGVycy5jaGFuZ2UgYXMgKG9FdmVudDogRmllbGQkQ2hhbmdlRXZlbnQpID0+IHZvaWR9XG5cdFx0XHRcdFx0bGl2ZUNoYW5nZT17ZmllbGQuZXZlbnRIYW5kbGVycy5saXZlQ2hhbmdlfVxuXHRcdFx0XHRcdHZhbGlkYXRlRmllbGRHcm91cD17ZmllbGQuZXZlbnRIYW5kbGVycy52YWxpZGF0ZUZpZWxkR3JvdXAgYXMgKG9FdmVudDogQ29udHJvbCRWYWxpZGF0ZUZpZWxkR3JvdXBFdmVudCkgPT4gdm9pZH1cblx0XHRcdFx0PlxuXHRcdFx0XHRcdHt7XG5cdFx0XHRcdFx0XHRjb250ZW50RWRpdDogb3B0aW9uYWxDb250ZW50RWRpdCxcblx0XHRcdFx0XHRcdGxheW91dERhdGE6IG9wdGlvbmFsTGF5b3V0RGF0YSxcblx0XHRcdFx0XHRcdGN1c3RvbURhdGE6IDxDdXN0b21EYXRhIGtleT1cInNvdXJjZVBhdGhcIiB2YWx1ZT17ZmllbGQuZGF0YVNvdXJjZVBhdGh9IC8+XG5cdFx0XHRcdFx0fX1cblx0XHRcdFx0PC9GaWVsZD5cblx0XHRcdCk7XG5cdFx0fSBlbHNlIHtcblx0XHRcdHJldHVybiB0aGlzLmdldFJhZGlvQnV0dG9uVGVtcGxhdGUoZmllbGQpO1xuXHRcdH1cblx0fSxcblxuXHQvKipcblx0ICogR2VuZXJhdGVzIHRoZSBDaGVja0JveCB0ZW1wbGF0ZS5cblx0ICogQHBhcmFtIGZpZWxkIFJlZmVyZW5jZSB0byB0aGUgY3VycmVudCBmaWVsZCBpbnN0YW5jZVxuXHQgKiBAcmV0dXJucyBBbiBYTUwtYmFzZWQgc3RyaW5nIHdpdGggdGhlIGRlZmluaXRpb24gb2YgdGhlIGZpZWxkIGNvbnRyb2xcblx0ICovXG5cdGdldENoZWNrQm94VGVtcGxhdGUoZmllbGQ6IEZpZWxkQmxvY2tQcm9wZXJ0aWVzKTogc3RyaW5nIHtcblx0XHRjb25zdCBpc0NoZWNrQm94R3JvdXBJdGVtID0gZmllbGQuZm9ybWF0T3B0aW9ucy5pc0ZpZWxkR3JvdXBJdGVtID09PSB0cnVlO1xuXHRcdHJldHVybiAoXG5cdFx0XHQ8Q2hlY2tCb3hcblx0XHRcdFx0Y29yZTpyZXF1aXJlPVwie0ZpZWxkOiAnc2FwL2ZlL21hY3Jvcy9GaWVsZCd9XCJcblx0XHRcdFx0aWQ9e2ZpZWxkLmVkaXRTdHlsZUlkfVxuXHRcdFx0XHRyZXF1aXJlZD17aXNDaGVja0JveEdyb3VwSXRlbSA/IGZpZWxkLnJlcXVpcmVkRXhwcmVzc2lvbiA6IHVuZGVmaW5lZH1cblx0XHRcdFx0c2VsZWN0ZWQ9e2ZpZWxkLnZhbHVlQmluZGluZ0V4cHJlc3Npb259XG5cdFx0XHRcdGVkaXRhYmxlPXtmaWVsZC5lZGl0YWJsZUV4cHJlc3Npb259XG5cdFx0XHRcdGVuYWJsZWQ9e2ZpZWxkLmVuYWJsZWRFeHByZXNzaW9ufVxuXHRcdFx0XHRmaWVsZEdyb3VwSWRzPXtmaWVsZC5maWVsZEdyb3VwSWRzfVxuXHRcdFx0XHR0ZXh0PXtpc0NoZWNrQm94R3JvdXBJdGVtID8gZmllbGQubGFiZWwgOiB1bmRlZmluZWR9XG5cdFx0XHRcdHdyYXBwaW5nPXtpc0NoZWNrQm94R3JvdXBJdGVtID8gdHJ1ZSA6IHVuZGVmaW5lZH1cblx0XHRcdFx0YXJpYUxhYmVsbGVkQnk9e2ZpZWxkLmFyaWFMYWJlbGxlZEJ5IGFzIHVua25vd24gYXMgQXJyYXk8Q29udHJvbCB8IHN0cmluZz59XG5cdFx0XHRcdHNlbGVjdD17ZmllbGQuZXZlbnRIYW5kbGVycy5jaGFuZ2UgYXMgKG9FdmVudDogQ2hlY2tCb3gkU2VsZWN0RXZlbnQpID0+IHZvaWR9XG5cdFx0XHRcdHZhbGlkYXRlRmllbGRHcm91cD17ZmllbGQuZXZlbnRIYW5kbGVycy52YWxpZGF0ZUZpZWxkR3JvdXAgYXMgKG9FdmVudDogQ29udHJvbCRWYWxpZGF0ZUZpZWxkR3JvdXBFdmVudCkgPT4gdm9pZH1cblx0XHRcdD5cblx0XHRcdFx0e3sgY3VzdG9tRGF0YTogPEN1c3RvbURhdGEga2V5PVwic291cmNlUGF0aFwiIHZhbHVlPXtmaWVsZC5kYXRhU291cmNlUGF0aH0gLz4gfX1cblx0XHRcdDwvQ2hlY2tCb3g+XG5cdFx0KTtcblx0fSxcblxuXHQvKipcblx0ICogR2VuZXJhdGVzIHRoZSBUZXh0QXJlYSB0ZW1wbGF0ZS5cblx0ICogQHBhcmFtIGZpZWxkIFJlZmVyZW5jZSB0byB0aGUgY3VycmVudCBmaWVsZCBpbnN0YW5jZVxuXHQgKiBAcmV0dXJucyBBbiBYTUwtYmFzZWQgc3RyaW5nIHdpdGggdGhlIGRlZmluaXRpb24gb2YgdGhlIGZpZWxkIGNvbnRyb2xcblx0ICovXG5cdGdldFRleHRBcmVhVGVtcGxhdGUoZmllbGQ6IEZpZWxkQmxvY2tQcm9wZXJ0aWVzKTogc3RyaW5nIHtcblx0XHRjb25zdCBncm93aW5nID0gZmllbGQuZm9ybWF0T3B0aW9ucy50ZXh0TWF4TGluZXMgPyB0cnVlIDogZmFsc2U7XG5cblx0XHRjb25zdCBzaG93RXhjZWVkZWRUZXh0ID0gISFmaWVsZC5mb3JtYXRPcHRpb25zLnRleHRNYXhMZW5ndGg7XG5cblx0XHQvL3VuZm9ydHVuYXRlbHkgdGhpcyBvbmUgaXMgYSBcImRpZmZlcmVudFwiIGxheW91dERhdGEgdGhhbiB0aGUgb3RoZXJzLCB0aGVyZWZvcmUgdGhlIHJldXNlIGZ1bmN0aW9uIGZyb20gYWJvdmUgY2Fubm90IGJlIHVzZWQgZm9yIHRoZSB0ZXh0QXJlYSB0ZW1wbGF0ZVxuXHRcdGxldCBsYXlvdXREYXRhID0gXCJcIjtcblx0XHRpZiAoZmllbGQuY29sbGFib3JhdGlvbkVuYWJsZWQpIHtcblx0XHRcdGxheW91dERhdGEgPSA8RmxleEl0ZW1EYXRhIGdyb3dGYWN0b3I9XCI5XCIgLz47XG5cdFx0fVxuXG5cdFx0cmV0dXJuIChcblx0XHRcdDxUZXh0QXJlYUV4XG5cdFx0XHRcdGNvcmU6cmVxdWlyZT1cIntGaWVsZDogJ3NhcC9mZS9tYWNyb3MvRmllbGQnfVwiXG5cdFx0XHRcdGlkPXtmaWVsZC5lZGl0U3R5bGVJZH1cblx0XHRcdFx0dmFsdWU9e2ZpZWxkLnZhbHVlQmluZGluZ0V4cHJlc3Npb259XG5cdFx0XHRcdHBsYWNlaG9sZGVyPXtmaWVsZC5lZGl0U3R5bGVQbGFjZWhvbGRlcn1cblx0XHRcdFx0cmVxdWlyZWQ9e2ZpZWxkLnJlcXVpcmVkRXhwcmVzc2lvbn1cblx0XHRcdFx0cm93cz17ZmllbGQuZm9ybWF0T3B0aW9ucy50ZXh0TGluZXNFZGl0fVxuXHRcdFx0XHRncm93aW5nPXtncm93aW5nfVxuXHRcdFx0XHRncm93aW5nTWF4TGluZXM9e2ZpZWxkLmZvcm1hdE9wdGlvbnMudGV4dE1heExpbmVzfVxuXHRcdFx0XHRjb2xzPXszMDB9IC8vQXMgdGhlIGRlZmF1bHQgaXMgMjAsIHRoZSBcImNvbHNcIiBwcm9wZXJ0eSBpcyBjb25maWd1cmVkIHdpdGggYSB2YWx1ZSBvZiAzMDAgdG8gZ3VhcmFudGVlIHRoYXQgdGhlIHRleHRhcmVhIHdpbGwgb2NjdXB5IGFsbCB0aGUgYXZhaWxhYmxlIHNwYWNlLlxuXHRcdFx0XHR3aWR0aD1cIjEwMCVcIlxuXHRcdFx0XHRlZGl0YWJsZT17ZmllbGQuZWRpdGFibGVFeHByZXNzaW9ufVxuXHRcdFx0XHRlbmFibGVkPXtmaWVsZC5lbmFibGVkRXhwcmVzc2lvbn1cblx0XHRcdFx0ZmllbGRHcm91cElkcz17ZmllbGQuZmllbGRHcm91cElkc31cblx0XHRcdFx0YXJpYUxhYmVsbGVkQnk9e2ZpZWxkLmFyaWFMYWJlbGxlZEJ5IGFzIHVua25vd24gYXMgQXJyYXk8Q29udHJvbCB8IHN0cmluZz59XG5cdFx0XHRcdG1heExlbmd0aD17ZmllbGQuZm9ybWF0T3B0aW9ucy50ZXh0TWF4TGVuZ3RofVxuXHRcdFx0XHRzaG93RXhjZWVkZWRUZXh0PXtzaG93RXhjZWVkZWRUZXh0fVxuXHRcdFx0XHRjaGFuZ2U9e2ZpZWxkLmV2ZW50SGFuZGxlcnMuY2hhbmdlIGFzIChvRXZlbnQ6IElucHV0QmFzZSRDaGFuZ2VFdmVudCkgPT4gdm9pZH1cblx0XHRcdFx0bGl2ZUNoYW5nZT17ZmllbGQuZXZlbnRIYW5kbGVycy5saXZlQ2hhbmdlfVxuXHRcdFx0XHR2YWxpZGF0ZUZpZWxkR3JvdXA9e2ZpZWxkLmV2ZW50SGFuZGxlcnMudmFsaWRhdGVGaWVsZEdyb3VwIGFzIChvRXZlbnQ6IENvbnRyb2wkVmFsaWRhdGVGaWVsZEdyb3VwRXZlbnQpID0+IHZvaWR9XG5cdFx0XHQ+XG5cdFx0XHRcdHt7XG5cdFx0XHRcdFx0bGF5b3V0RGF0YTogbGF5b3V0RGF0YSxcblx0XHRcdFx0XHRjdXN0b21EYXRhOiA8Q3VzdG9tRGF0YSBrZXk9XCJzb3VyY2VQYXRoXCIgdmFsdWU9e2ZpZWxkLmRhdGFTb3VyY2VQYXRofSAvPlxuXHRcdFx0XHR9fVxuXHRcdFx0PC9UZXh0QXJlYUV4PlxuXHRcdCk7XG5cdH0sXG5cblx0LyoqXG5cdCAqIEdlbmVyYXRlcyB0aGUgUmF0aW5nSW5kaWNhdG9yIHRlbXBsYXRlLlxuXHQgKiBAcGFyYW0gZmllbGQgUmVmZXJlbmNlIHRvIHRoZSBjdXJyZW50IGZpZWxkIGluc3RhbmNlXG5cdCAqIEByZXR1cm5zIEFuIFhNTC1iYXNlZCBzdHJpbmcgd2l0aCB0aGUgZGVmaW5pdGlvbiBvZiB0aGUgZmllbGQgY29udHJvbFxuXHQgKi9cblx0Z2V0UmF0aW5nSW5kaWNhdG9yVGVtcGxhdGU6IChmaWVsZDogRmllbGRCbG9ja1Byb3BlcnRpZXMpOiBzdHJpbmcgPT4ge1xuXHRcdGNvbnN0IHRvb2x0aXAgPSBmaWVsZC5yYXRpbmdJbmRpY2F0b3JUb29sdGlwIHx8IFwie3NhcC5mZS5pMThuPlRfQ09NTU9OX1JBVElOR19JTkRJQ0FUT1JfVElUTEVfTEFCRUx9XCI7XG5cblx0XHRyZXR1cm4gKFxuXHRcdFx0PFJhdGluZ0luZGljYXRvclxuXHRcdFx0XHRjb3JlOnJlcXVpcmU9XCJ7RmllbGQ6ICdzYXAvZmUvbWFjcm9zL0ZpZWxkJ31cIlxuXHRcdFx0XHRpZD17ZmllbGQuZWRpdFN0eWxlSWR9XG5cdFx0XHRcdG1heFZhbHVlPXtmaWVsZC5yYXRpbmdJbmRpY2F0b3JUYXJnZXRWYWx1ZX1cblx0XHRcdFx0dmFsdWU9e2ZpZWxkLnZhbHVlQmluZGluZ0V4cHJlc3Npb259XG5cdFx0XHRcdHRvb2x0aXA9e3Rvb2x0aXB9XG5cdFx0XHRcdGZpZWxkR3JvdXBJZHM9e2ZpZWxkLmZpZWxkR3JvdXBJZHN9XG5cdFx0XHRcdGljb25TaXplPVwiMS4zNzVyZW1cIlxuXHRcdFx0XHRjbGFzcz1cInNhcFVpVGlueU1hcmdpblRvcEJvdHRvbVwiXG5cdFx0XHRcdGVkaXRhYmxlPVwidHJ1ZVwiXG5cdFx0XHRcdGNoYW5nZT17ZmllbGQuZXZlbnRIYW5kbGVycy5jaGFuZ2UgYXMgKG9FdmVudDogUmF0aW5nSW5kaWNhdG9yJENoYW5nZUV2ZW50KSA9PiB2b2lkfVxuXHRcdFx0PlxuXHRcdFx0XHR7e1xuXHRcdFx0XHRcdGxheW91dERhdGE6IEVkaXRTdHlsZS5nZXRMYXlvdXREYXRhKGZpZWxkKVxuXHRcdFx0XHR9fVxuXHRcdFx0PC9SYXRpbmdJbmRpY2F0b3I+XG5cdFx0KTtcblx0fSxcblxuXHQvKipcblx0ICogSGVscHMgdG8gY2FsY3VsYXRlIHRoZSBjb250ZW50IGVkaXQgZnVuY3Rpb25hbGl0eSAvIHRlbXBsYXRpbmcuXG5cdCAqIEluY2x1ZGluZyBhIHdyYXBwZXIgYW4gaGJveCBpbiBjYXNlIG9mIGNvbGxhYm9yYXRpb24gbW9kZSBmaW5hbGx5XG5cdCAqIGl0IGNhbGxzIGludGVybmFsbHkgRWRpdFN0eWxlLmdldFRlbXBsYXRlLlxuXHQgKiBAcGFyYW0gZmllbGQgUmVmZXJlbmNlIHRvIHRoZSBjdXJyZW50IGZpZWxkIGluc3RhbmNlXG5cdCAqIEByZXR1cm5zIEFuIFhNTC1iYXNlZCBzdHJpbmcgd2l0aCB0aGUgZGVmaW5pdGlvbiBvZiB0aGUgZmllbGQgY29udHJvbFxuXHQgKi9cblx0Z2V0VGVtcGxhdGVXaXRoV3JhcHBlcihmaWVsZDogRmllbGRCbG9ja1Byb3BlcnRpZXMpOiBzdHJpbmcge1xuXHRcdGxldCBjb250ZW50RWRpdDtcblxuXHRcdGlmICgoZmllbGQuZWRpdE1vZGUgPz8gZmllbGQuY29tcHV0ZWRFZGl0TW9kZSkgIT09IEZpZWxkRWRpdE1vZGUuRGlzcGxheSAmJiAhIWZpZWxkLmVkaXRTdHlsZSkge1xuXHRcdFx0aWYgKGZpZWxkLmNvbGxhYm9yYXRpb25FbmFibGVkID8/IGZhbHNlKSB7XG5cdFx0XHRcdGNvbnRlbnRFZGl0ID0gKFxuXHRcdFx0XHRcdDxDb2xsYWJvcmF0aW9uSEJveCB3aWR0aD1cIjEwMCVcIiBhbGlnbkl0ZW1zPVwiRW5kXCI+XG5cdFx0XHRcdFx0XHR7RWRpdFN0eWxlLmdldFRlbXBsYXRlKGZpZWxkKX1cblx0XHRcdFx0XHRcdHtFZGl0U3R5bGUuZ2V0Q29sbGFib3JhdGlvbkF2YXRhcihmaWVsZCl9XG5cdFx0XHRcdFx0PC9Db2xsYWJvcmF0aW9uSEJveD5cblx0XHRcdFx0KTtcblx0XHRcdH0gZWxzZSB7XG5cdFx0XHRcdGNvbnRlbnRFZGl0ID0gRWRpdFN0eWxlLmdldFRlbXBsYXRlKGZpZWxkKTtcblx0XHRcdH1cblx0XHR9XG5cblx0XHRyZXR1cm4gY29udGVudEVkaXQgfHwgXCJcIjtcblx0fSxcblxuXHQvKipcblx0ICogR2VuZXJhdGVzIHRoZSBJbnB1dE1hc2sgdGVtcGxhdGUuXG5cdCAqIEBwYXJhbSBmaWVsZCBSZWZlcmVuY2UgdG8gdGhlIGN1cnJlbnQgZmllbGQgaW5zdGFuY2Vcblx0ICogQHJldHVybnMgQW4gWE1MLWJhc2VkIHN0cmluZyB3aXRoIHRoZSBkZWZpbml0aW9uIG9mIHRoZSBmaWVsZCBjb250cm9sXG5cdCAqL1xuXHRnZXRJbnB1dE1hc2tUZW1wbGF0ZShmaWVsZDogRmllbGRCbG9ja1Byb3BlcnRpZXMpOiBzdHJpbmcge1xuXHRcdGNvbnN0IG9wdGlvbmFsTWFza0lucHV0UnVsZXMgPSBbXTtcblx0XHRjb25zdCBkYXRhTW9kZWxPYmplY3RQYXRoID0gTWV0YU1vZGVsQ29udmVydGVyLmdldEludm9sdmVkRGF0YU1vZGVsT2JqZWN0czxEYXRhRmllbGRUeXBlcz4oZmllbGQubWV0YVBhdGgsIGZpZWxkLmNvbnRleHRQYXRoKTtcblx0XHRjb25zdCB0ZXh0QWxpZ24gPSBnZXRUZXh0QWxpZ25tZW50KFxuXHRcdFx0ZGF0YU1vZGVsT2JqZWN0UGF0aCxcblx0XHRcdGZpZWxkLmZvcm1hdE9wdGlvbnMsXG5cdFx0XHRmaWVsZC5lZGl0TW9kZUFzT2JqZWN0IGFzIEJpbmRpbmdUb29sa2l0RXhwcmVzc2lvbjxzdHJpbmc+XG5cdFx0KTtcblx0XHRpZiAoZmllbGQubWFzaz8ubWFza1J1bGUpIHtcblx0XHRcdGZvciAoY29uc3QgcnVsZSBvZiBmaWVsZC5tYXNrLm1hc2tSdWxlKSB7XG5cdFx0XHRcdG9wdGlvbmFsTWFza0lucHV0UnVsZXMucHVzaCg8TWFza0lucHV0UnVsZSBtYXNrRm9ybWF0U3ltYm9sPXtydWxlLnN5bWJvbH0gcmVnZXg9e3J1bGUucmVnZXh9IC8+KTtcblx0XHRcdH1cblx0XHR9XG5cblx0XHRyZXR1cm4gKFxuXHRcdFx0PE1hc2tJbnB1dFxuXHRcdFx0XHRjb3JlOnJlcXVpcmU9XCJ7RmllbGQ6ICdzYXAvZmUvbWFjcm9zL0ZpZWxkJ31cIlxuXHRcdFx0XHRpZD17ZmllbGQuZWRpdFN0eWxlSWR9XG5cdFx0XHRcdHZhbHVlPXtmaWVsZC52YWx1ZUJpbmRpbmdFeHByZXNzaW9ufVxuXHRcdFx0XHRwbGFjZWhvbGRlcj17ZmllbGQuZWRpdFN0eWxlUGxhY2Vob2xkZXJ9XG5cdFx0XHRcdHdpZHRoPVwiMTAwJVwiXG5cdFx0XHRcdGVkaXRhYmxlPXtmaWVsZC5lZGl0YWJsZUV4cHJlc3Npb259XG5cdFx0XHRcdGFyaWFMYWJlbGxlZEJ5PXtmaWVsZC5hcmlhTGFiZWxsZWRCeSBhcyB1bmtub3duIGFzIEFycmF5PENvbnRyb2wgfCBzdHJpbmc+fVxuXHRcdFx0XHRtYXNrPXtmaWVsZC5tYXNrPy5tYXNrfVxuXHRcdFx0XHRlbmFibGVkPXtmaWVsZC5lbmFibGVkRXhwcmVzc2lvbn1cblx0XHRcdFx0cmVxdWlyZWQ9e2ZpZWxkLnJlcXVpcmVkRXhwcmVzc2lvbn1cblx0XHRcdFx0ZmllbGRHcm91cElkcz17ZmllbGQuZmllbGRHcm91cElkc31cblx0XHRcdFx0dGV4dEFsaWduPXt0ZXh0QWxpZ259XG5cdFx0XHRcdHBsYWNlaG9sZGVyU3ltYm9sPXtmaWVsZC5tYXNrPy5wbGFjZWhvbGRlclN5bWJvbH1cblx0XHRcdFx0bGl2ZUNoYW5nZT17ZmllbGQuZXZlbnRIYW5kbGVycy5saXZlQ2hhbmdlIGFzIChvRXZlbnQ6IE1hc2tJbnB1dCRMaXZlQ2hhbmdlRXZlbnQpID0+IHZvaWR9XG5cdFx0XHRcdHZhbGlkYXRlRmllbGRHcm91cD17ZmllbGQuZXZlbnRIYW5kbGVycy52YWxpZGF0ZUZpZWxkR3JvdXAgYXMgKG9FdmVudDogQ29udHJvbCRWYWxpZGF0ZUZpZWxkR3JvdXBFdmVudCkgPT4gdm9pZH1cblx0XHRcdD5cblx0XHRcdFx0e3tcblx0XHRcdFx0XHRydWxlczogb3B0aW9uYWxNYXNrSW5wdXRSdWxlcyxcblx0XHRcdFx0XHRjdXN0b21EYXRhOiA8Q3VzdG9tRGF0YSBrZXk9XCJzb3VyY2VQYXRoXCIgdmFsdWU9e2ZpZWxkLmRhdGFTb3VyY2VQYXRofSAvPlxuXHRcdFx0XHR9fVxuXHRcdFx0PC9NYXNrSW5wdXQ+XG5cdFx0KTtcblx0fSxcblxuXHQvKipcblx0ICogRW50cnkgcG9pbnQgZm9yIGZ1cnRoZXIgdGVtcGxhdGluZyBwcm9jZXNzaW5ncy5cblx0ICogQHBhcmFtIGZpZWxkIFJlZmVyZW5jZSB0byB0aGUgY3VycmVudCBmaWVsZCBpbnN0YW5jZVxuXHQgKiBAcmV0dXJucyBBbiBYTUwtYmFzZWQgc3RyaW5nIHdpdGggdGhlIGRlZmluaXRpb24gb2YgdGhlIGZpZWxkIGNvbnRyb2xcblx0ICovXG5cdGdldFRlbXBsYXRlOiAoZmllbGQ6IEZpZWxkQmxvY2tQcm9wZXJ0aWVzKTogc3RyaW5nIHwgdW5kZWZpbmVkID0+IHtcblx0XHRsZXQgaW5uZXJGaWVsZENvbnRlbnQ7XG5cdFx0c3dpdGNoIChmaWVsZC5lZGl0U3R5bGUpIHtcblx0XHRcdGNhc2UgXCJDaGVja0JveFwiOlxuXHRcdFx0XHRpZiAoZmllbGQuZm9ybWF0T3B0aW9ucy51c2VSYWRpb0J1dHRvbnNGb3JCb29sZWFuKSB7XG5cdFx0XHRcdFx0aW5uZXJGaWVsZENvbnRlbnQgPSBFZGl0U3R5bGUuZ2V0UmFkaW9CdXR0b25UZW1wbGF0ZShmaWVsZCwgdHJ1ZSk7XG5cdFx0XHRcdH0gZWxzZSB7XG5cdFx0XHRcdFx0aW5uZXJGaWVsZENvbnRlbnQgPSBFZGl0U3R5bGUuZ2V0Q2hlY2tCb3hUZW1wbGF0ZShmaWVsZCk7XG5cdFx0XHRcdH1cblx0XHRcdFx0YnJlYWs7XG5cdFx0XHRjYXNlIFwiRGF0ZVBpY2tlclwiOlxuXHRcdFx0Y2FzZSBcIkRhdGVUaW1lUGlja2VyXCI6XG5cdFx0XHRjYXNlIFwiVGltZVBpY2tlclwiOiB7XG5cdFx0XHRcdGlubmVyRmllbGRDb250ZW50ID0gRWRpdFN0eWxlLmdldERhdGVUaW1lUGlja2VyR2VuZXJpYyhmaWVsZCwgZmllbGQuZWRpdFN0eWxlKTtcblx0XHRcdFx0YnJlYWs7XG5cdFx0XHR9XG5cdFx0XHRjYXNlIFwiSW5wdXRcIjoge1xuXHRcdFx0XHRpbm5lckZpZWxkQ29udGVudCA9IEVkaXRTdHlsZS5nZXRJbnB1dFRlbXBsYXRlKGZpZWxkKTtcblx0XHRcdFx0YnJlYWs7XG5cdFx0XHR9XG5cdFx0XHRjYXNlIFwiTWFza2VkXCI6IHtcblx0XHRcdFx0aW5uZXJGaWVsZENvbnRlbnQgPSBFZGl0U3R5bGUuZ2V0SW5wdXRUZW1wbGF0ZShmaWVsZCk7XG5cdFx0XHRcdGJyZWFrO1xuXHRcdFx0fVxuXHRcdFx0Y2FzZSBcIklucHV0V2l0aFZhbHVlSGVscFwiOiB7XG5cdFx0XHRcdGlubmVyRmllbGRDb250ZW50ID0gRWRpdFN0eWxlLmdldElucHV0V2l0aFZhbHVlSGVscFRlbXBsYXRlKGZpZWxkKTtcblx0XHRcdFx0YnJlYWs7XG5cdFx0XHR9XG5cdFx0XHRjYXNlIFwiUmF0aW5nSW5kaWNhdG9yXCI6XG5cdFx0XHRcdGlubmVyRmllbGRDb250ZW50ID0gRWRpdFN0eWxlLmdldFJhdGluZ0luZGljYXRvclRlbXBsYXRlKGZpZWxkKTtcblx0XHRcdFx0YnJlYWs7XG5cdFx0XHRjYXNlIFwiVGV4dEFyZWFcIjpcblx0XHRcdFx0aW5uZXJGaWVsZENvbnRlbnQgPSBFZGl0U3R5bGUuZ2V0VGV4dEFyZWFUZW1wbGF0ZShmaWVsZCk7XG5cdFx0XHRcdGJyZWFrO1xuXHRcdFx0Y2FzZSBcIklucHV0TWFza1wiOlxuXHRcdFx0XHRpbm5lckZpZWxkQ29udGVudCA9IEVkaXRTdHlsZS5nZXRJbnB1dE1hc2tUZW1wbGF0ZShmaWVsZCk7XG5cdFx0XHRcdGJyZWFrO1xuXHRcdFx0ZGVmYXVsdDpcblx0XHR9XG5cblx0XHRyZXR1cm4gaW5uZXJGaWVsZENvbnRlbnQ7XG5cdH1cbn07XG5cbmV4cG9ydCBkZWZhdWx0IEVkaXRTdHlsZTtcbiJdLCJtYXBwaW5ncyI6Ijs7Ozs7Ozs7Ozs7O0VBcUNBLE1BQU1BLFNBQVMsR0FBRztJQUNqQjtBQUNEO0FBQ0E7QUFDQTtBQUNBO0lBQ0NDLGFBQWFBLENBQUNDLEtBQTJCLEVBQVU7TUFDbEQsSUFBSUMsVUFBVSxHQUFHLEVBQUU7TUFDbkIsSUFBSUQsS0FBSyxDQUFDRSxvQkFBb0IsRUFBRTtRQUMvQkQsVUFBVSxHQUFHRSxJQUFBLENBQUNDLFlBQVk7VUFBQ0MsVUFBVSxFQUFDO1FBQUcsQ0FBRSxDQUFDO01BQzdDO01BQ0EsT0FBT0osVUFBVTtJQUNsQixDQUFDO0lBRUQ7QUFDRDtBQUNBO0FBQ0E7QUFDQTtJQUNDSyxzQkFBc0JBLENBQUNOLEtBQTJCLEVBQVU7TUFDM0QsTUFBTU8s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
490
+ //# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJuYW1lcyI6WyJFZGl0U3R5bGUiLCJnZXRMYXlvdXREYXRhIiwiZmllbGQiLCJsYXlvdXREYXRhIiwiY29sbGFib3JhdGlvbkVuYWJsZWQiLCJfanN4IiwiRmxleEl0ZW1EYXRhIiwiZ3Jvd0ZhY3RvciIsImdldENvbGxhYm9yYXRpb25BdmF0YXIiLCJDb2xsYWJvcmF0aXZlRHJhZnRIYW5kbGVyIiwibWV0YVBhdGgiLCJnZXRDb250ZXh0UmVsYXRpdmVUYXJnZXRPYmplY3RQYXRoIiwiZGF0YU1vZGVsUGF0aCIsImNvbnRleHRQYXRoIiwiZ2V0UGF0aCIsInNob3dBdmF0YXIiLCJnZXREYXRlVGltZVBpY2tlckdlbmVyaWMiLCJ0eXBlIiwiZGF0YU1vZGVsT2JqZWN0UGF0aCIsIk1ldGFNb2RlbENvbnZlcnRlciIsImdldEludm9sdmVkRGF0YU1vZGVsT2JqZWN0cyIsInRleHRBbGlnbiIsImdldFRleHRBbGlnbm1lbnQiLCJmb3JtYXRPcHRpb25zIiwiZWRpdE1vZGVBc09iamVjdCIsImRhdGVUaW1lUGlja2VyUHJvcGVydGllcyIsImlkIiwiZWRpdFN0eWxlSWQiLCJ3aWR0aCIsImVkaXRhYmxlIiwiZWRpdGFibGVFeHByZXNzaW9uIiwiZW5hYmxlZCIsImVuYWJsZWRFeHByZXNzaW9uIiwicmVxdWlyZWQiLCJyZXF1aXJlZEV4cHJlc3Npb24iLCJhcmlhTGFiZWxsZWRCeSIsInZhbHVlIiwidmFsdWVCaW5kaW5nRXhwcmVzc2lvbiIsImZpZWxkR3JvdXBJZHMiLCJzaG93VGltZXpvbmUiLCJtaW5EYXRlIiwibWluRGF0ZUV4cHJlc3Npb24iLCJ1bmRlZmluZWQiLCJtYXhEYXRlIiwibWF4RGF0ZUV4cHJlc3Npb24iLCJjaGFuZ2UiLCJldmVudEhhbmRsZXJzIiwibGl2ZUNoYW5nZSIsInZhbHVlRm9ybWF0IiwidmFsaWRhdGVGaWVsZEdyb3VwIiwiZ2V0RGF0ZVRpbWVQaWNrZXIiLCJkYXRlVGltZVBpY2tlclR5cGUiLCJkYXRlVGltZVBpY2tlciIsIkRhdGVQaWNrZXIiLCJjaGlsZHJlbiIsImN1c3RvbURhdGEiLCJDdXN0b21EYXRhIiwiZGF0YVNvdXJjZVBhdGgiLCJEYXRlVGltZVBpY2tlciIsIlRpbWVQaWNrZXIiLCJnZXRJbnB1dFRlbXBsYXRlIiwiSW5wdXQiLCJwbGFjZWhvbGRlciIsImVkaXRTdHlsZVBsYWNlaG9sZGVyIiwiZmllbGRXaWR0aCIsImRlc2NyaXB0aW9uIiwic3RhdGljRGVzY3JpcHRpb24iLCJlZGl0U3R5bGUiLCJtYXhMZW5ndGgiLCJ0ZXh0TWF4TGVuZ3RoIiwic2hvd0FzUmFkaW9CdXR0b24iLCJyYWRpb0J1dHRvbkNvbmZpZ3VyZWQiLCJwcm9wZXJ0eSIsImFubm90YXRpb25zIiwiQ29tbW9uIiwiVmFsdWVMaXN0V2l0aEZpeGVkVmFsdWVzIiwiaGFzVmFsdWVIZWxwV2l0aEZpeGVkVmFsdWVzIiwiVmFsdWVMaXN0U2hvd1ZhbHVlc0ltbWVkaWF0ZWx5IiwidmFsdWVPZiIsImZpZWxkRWRpdFN0eWxlIiwidmFsdWVMaXN0UGFyYW1ldGVySW5PdXQiLCJWYWx1ZUxpc3QiLCJQYXJhbWV0ZXJzIiwiZmluZCIsInZhbHVlTGlzdFBhcmFtZXRlciIsIiRUeXBlIiwiTG9jYWxEYXRhUHJvcGVydHkiLCJuYW1lIiwiVmFsdWVMaXN0UmVsZXZhbnRRdWFsaWZpZXJzIiwiZ2V0UmFkaW9CdXR0b25UZW1wbGF0ZSIsImZvckJvb2xlYW4iLCJhcmd1bWVudHMiLCJsZW5ndGgiLCJmaXhlZFZhbHVlc1BhdGgiLCJDb2xsZWN0aW9uUGF0aCIsInZhbHVlTGlzdEtleVBhdGgiLCJwYXRoSW5Nb2RlbCIsIlZhbHVlTGlzdFByb3BlcnR5IiwidmFsdWVMaXN0RGVzY3JpcHRpb25QYXRoIiwidmFsdWVIZWxwS2V5VGV4dEFubm90YXRpb25QYXRoIiwidGFyZ2V0RW50aXR5VHlwZSIsInJlc29sdmVQYXRoIiwiZW50aXR5VHlwZSIsImtleXMiLCJUZXh0IiwicGF0aCIsInBvc3NpYmxlVmFsdWVzIiwia2V5IiwidGV4dCIsImdldFRyYW5zbGF0ZWRUZXh0IiwiUmFkaW9CdXR0b25zIiwicmFkaW9CdXR0b25UZXh0UHJvcGVydHkiLCJyYWRpb0J1dHRvbktleVByb3BlcnR5IiwiaG9yaXpvbnRhbExheW91dCIsInJhZGlvQnV0dG9uc0hvcml6b250YWxMYXlvdXQiLCJnZXRJbnB1dFdpdGhWYWx1ZUhlbHBUZW1wbGF0ZSIsImRhdGFGaWVsZERhdGFNb2RlbE9iamVjdFBhdGgiLCJkZWxlZ2F0ZSIsIkZpZWxkSGVscGVyIiwiY29tcHV0ZUZpZWxkQmFzZURlbGVnYXRlIiwicmV0cmlldmVUZXh0RnJvbVZhbHVlTGlzdCIsImRpc3BsYXkiLCJVSUZvcm1hdHRlciIsImdldEZpZWxkRGlzcGxheSIsImRpc3BsYXlNb2RlIiwiaGFzTXVsdGlsaW5lQW5ub3RhdGlvbiIsIlVJIiwiTXVsdGlMaW5lVGV4dCIsIm11bHRpcGxlTGluZXMiLCJnZXRNdWx0aXBsZUxpbmVzRm9yRGF0YUZpZWxkIiwibGFiZWwiLCJjb21wdXRlTGFiZWxUZXh0IiwiY29udGV4dCIsIm9wdGlvbmFsQ29udGVudEVkaXQiLCJUZXh0QXJlYSIsInJvd3MiLCJ0ZXh0TGluZXNFZGl0IiwiZ3Jvd2luZyIsInRleHRNYXhMaW5lcyIsImdyb3dpbmdNYXhMaW5lcyIsIm9wdGlvbmFsTGF5b3V0RGF0YSIsImNyZWF0ZUN1c3RvbURhdGFzIiwidmFsdWVTdGF0ZSIsIkZpZWxkIiwiZWRpdE1vZGUiLCJjb21wdXRlZEVkaXRNb2RlIiwiYWRkaXRpb25hbFZhbHVlIiwidGV4dEJpbmRpbmdFeHByZXNzaW9uIiwidmFsdWVIZWxwIiwidmFsdWVIZWxwSWQiLCJjb250ZW50RWRpdCIsImdldENoZWNrQm94VGVtcGxhdGUiLCJpc0NoZWNrQm94R3JvdXBJdGVtIiwiaXNGaWVsZEdyb3VwSXRlbSIsIkNoZWNrQm94Iiwic2VsZWN0ZWQiLCJ3cmFwcGluZyIsInNlbGVjdCIsImdldFRleHRBcmVhVGVtcGxhdGUiLCJzaG93RXhjZWVkZWRUZXh0IiwiVGV4dEFyZWFFeCIsImNvbHMiLCJnZXRSYXRpbmdJbmRpY2F0b3JUZW1wbGF0ZSIsInRvb2x0aXAiLCJyYXRpbmdJbmRpY2F0b3JUb29sdGlwIiwiUmF0aW5nSW5kaWNhdG9yIiwibWF4VmFsdWUiLCJyYXRpbmdJbmRpY2F0b3JUYXJnZXRWYWx1ZSIsImljb25TaXplIiwiY2xhc3MiLCJnZXRUZW1wbGF0ZVdpdGhXcmFwcGVyIiwiRmllbGRFZGl0TW9kZSIsIkRpc3BsYXkiLCJfanN4cyIsIkNvbGxhYm9yYXRpb25IQm94IiwiYWxpZ25JdGVtcyIsImdldFRlbXBsYXRlIiwiZ2V0SW5wdXRNYXNrVGVtcGxhdGUiLCJvcHRpb25hbE1hc2tJbnB1dFJ1bGVzIiwibWFzayIsIm1hc2tSdWxlIiwicnVsZSIsInB1c2giLCJNYXNrSW5wdXRSdWxlIiwibWFza0Zvcm1hdFN5bWJvbCIsInN5bWJvbCIsInJlZ2V4IiwiTWFza0lucHV0IiwicGxhY2Vob2xkZXJTeW1ib2wiLCJydWxlcyIsImlubmVyRmllbGRDb250ZW50IiwidXNlUmFkaW9CdXR0b25zRm9yQm9vbGVhbiJdLCJzb3VyY2VSb290IjoiLiIsInNvdXJjZXMiOlsiRWRpdFN0eWxlLnRzeCJdLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgdHlwZSB7IERhdGFGaWVsZFR5cGVzIH0gZnJvbSBcIkBzYXAtdXgvdm9jYWJ1bGFyaWVzLXR5cGVzL3ZvY2FidWxhcmllcy9VSVwiO1xuaW1wb3J0IHR5cGUgeyBCaW5kaW5nVG9vbGtpdEV4cHJlc3Npb24gfSBmcm9tIFwic2FwL2ZlL2Jhc2UvQmluZGluZ1Rvb2xraXRcIjtcbmltcG9ydCB7IHBhdGhJbk1vZGVsIH0gZnJvbSBcInNhcC9mZS9iYXNlL0JpbmRpbmdUb29sa2l0XCI7XG5pbXBvcnQgKiBhcyBNZXRhTW9kZWxDb252ZXJ0ZXIgZnJvbSBcInNhcC9mZS9jb3JlL2NvbnZlcnRlcnMvTWV0YU1vZGVsQ29udmVydGVyXCI7XG5pbXBvcnQgeyBnZXRDb250ZXh0UmVsYXRpdmVUYXJnZXRPYmplY3RQYXRoIH0gZnJvbSBcInNhcC9mZS9jb3JlL3RlbXBsYXRpbmcvRGF0YU1vZGVsUGF0aEhlbHBlclwiO1xuaW1wb3J0IHsgaGFzVmFsdWVIZWxwV2l0aEZpeGVkVmFsdWVzIH0gZnJvbSBcInNhcC9mZS9jb3JlL3RlbXBsYXRpbmcvUHJvcGVydHlIZWxwZXJcIjtcbmltcG9ydCAqIGFzIFVJRm9ybWF0dGVyIGZyb20gXCJzYXAvZmUvY29yZS90ZW1wbGF0aW5nL1VJRm9ybWF0dGVyc1wiO1xuaW1wb3J0IENvbGxhYm9yYXRpb25IQm94IGZyb20gXCJzYXAvZmUvbWFjcm9zL2NvbnRyb2xzL0NvbGxhYm9yYXRpb25IQm94XCI7XG5pbXBvcnQgUmFkaW9CdXR0b25zIGZyb20gXCJzYXAvZmUvbWFjcm9zL2NvbnRyb2xzL1JhZGlvQnV0dG9uc1wiO1xuaW1wb3J0IHsgZ2V0TXVsdGlwbGVMaW5lc0ZvckRhdGFGaWVsZCwgZ2V0VGV4dEFsaWdubWVudCB9IGZyb20gXCJzYXAvZmUvbWFjcm9zL2ZpZWxkL0ZpZWxkVGVtcGxhdGluZ1wiO1xuaW1wb3J0IHR5cGUgeyBGaWVsZEJsb2NrUHJvcGVydGllcyB9IGZyb20gXCJzYXAvZmUvbWFjcm9zL2ludGVybmFsL2ZpZWxkL0ZpZWxkU3RydWN0dXJlSGVscGVyXCI7XG5pbXBvcnQgQ2hlY2tCb3ggZnJvbSBcInNhcC9tL0NoZWNrQm94XCI7XG5pbXBvcnQgRGF0ZVBpY2tlciBmcm9tIFwic2FwL20vRGF0ZVBpY2tlclwiO1xuaW1wb3J0IERhdGVUaW1lUGlja2VyIGZyb20gXCJzYXAvbS9EYXRlVGltZVBpY2tlclwiO1xuaW1wb3J0IEZsZXhJdGVtRGF0YSBmcm9tIFwic2FwL20vRmxleEl0ZW1EYXRhXCI7XG5pbXBvcnQgSW5wdXQgZnJvbSBcInNhcC9tL0lucHV0XCI7XG5pbXBvcnQgdHlwZSB7IE1hc2tJbnB1dCRMaXZlQ2hhbmdlRXZlbnQgfSBmcm9tIFwic2FwL20vTWFza0lucHV0XCI7XG5pbXBvcnQgTWFza0lucHV0IGZyb20gXCJzYXAvbS9NYXNrSW5wdXRcIjtcbmltcG9ydCBNYXNrSW5wdXRSdWxlIGZyb20gXCJzYXAvbS9NYXNrSW5wdXRSdWxlXCI7XG5pbXBvcnQgUmF0aW5nSW5kaWNhdG9yIGZyb20gXCJzYXAvbS9SYXRpbmdJbmRpY2F0b3JcIjtcbmltcG9ydCBUZXh0QXJlYSBmcm9tIFwic2FwL20vVGV4dEFyZWFcIjtcbmltcG9ydCBUaW1lUGlja2VyIGZyb20gXCJzYXAvbS9UaW1lUGlja2VyXCI7XG5pbXBvcnQgdHlwZSB7IGRlZmF1bHQgYXMgQ29udHJvbCwgQ29udHJvbCRWYWxpZGF0ZUZpZWxkR3JvdXBFdmVudCwgZGVmYXVsdCBhcyBDb250cm9sMSB9IGZyb20gXCJzYXAvdWkvY29yZS9Db250cm9sXCI7XG5pbXBvcnQgQ3VzdG9tRGF0YSBmcm9tIFwic2FwL3VpL2NvcmUvQ3VzdG9tRGF0YVwiO1xuaW1wb3J0IEZpZWxkRWRpdE1vZGUgZnJvbSBcInNhcC91aS9tZGMvZW51bXMvRmllbGRFZGl0TW9kZVwiO1xuaW1wb3J0IEZpZWxkIGZyb20gXCJzYXAvdWkvbWRjL0ZpZWxkXCI7XG5pbXBvcnQgdHlwZSB7IE1ldGFNb2RlbFR5cGUgfSBmcm9tIFwiLi4vLi4vLi4vLi4vLi4vLi4vLi4vLi4vdHlwZXMvbWV0YW1vZGVsX3R5cGVzXCI7XG5pbXBvcnQgQ29sbGFib3JhdGl2ZURyYWZ0SGFuZGxlciBmcm9tIFwiLi4vLi4vQ29sbGFib3JhdGl2ZURyYWZ0SGFuZGxlclwiO1xuaW1wb3J0IEZpZWxkSGVscGVyIGZyb20gXCIuLi8uLi9maWVsZC9GaWVsZEhlbHBlclwiO1xuaW1wb3J0IFRleHRBcmVhRXggZnJvbSBcIi4uLy4uL2ZpZWxkL1RleHRBcmVhRXhcIjtcbmltcG9ydCB7IGNyZWF0ZUN1c3RvbURhdGFzIH0gZnJvbSBcIi4uLy4uL1RTWFV0aWxzXCI7XG5cbmNvbnN0IEVkaXRTdHlsZSA9IHtcblx0LyoqXG5cdCAqIEFuIGludGVybmFsIGhlbHBlciB0byByZXRyaWV2ZSB0aGUgcmV1c2VkIGxheW91dCBkYXRhLlxuXHQgKiBAcGFyYW0gZmllbGQgUmVmZXJlbmNlIHRvIHRoZSBjdXJyZW50IGZpZWxkIGluc3RhbmNlXG5cdCAqIEByZXR1cm5zIEFuIFhNTC1iYXNlZCBzdHJpbmcgd2l0aCB0aGUgZGVmaW5pdGlvbiBvZiB0aGUgZmllbGQgY29udHJvbFxuXHQgKi9cblx0Z2V0TGF5b3V0RGF0YShmaWVsZDogRmllbGRCbG9ja1Byb3BlcnRpZXMpOiBzdHJpbmcge1xuXHRcdGxldCBsYXlvdXREYXRhID0gXCJcIjtcblx0XHRpZiAoZmllbGQuY29sbGFib3JhdGlvbkVuYWJsZWQpIHtcblx0XHRcdGxheW91dERhdGEgPSA8RmxleEl0ZW1EYXRhIGdyb3dGYWN0b3I9XCI5XCIgLz47XG5cdFx0fVxuXHRcdHJldHVybiBsYXlvdXREYXRhO1xuXHR9LFxuXG5cdC8qKlxuXHQgKiBHZW5lcmF0ZXMgdGhlIGF2YXRhciBjb250cm9sIG5leHQgYSBmaWVsZCBsb2NrZWQuXG5cdCAqIEBwYXJhbSBmaWVsZCBSZWZlcmVuY2UgdG8gdGhlIGN1cnJlbnQgZmllbGQgaW5zdGFuY2Vcblx0ICogQHJldHVybnMgQW4gWE1MLWJhc2VkIHN0cmluZyB3aXRoIHRoZSBkZWZpbml0aW9uIG9mIHRoZSBhdmF0YXJcblx0ICovXG5cdGdldENvbGxhYm9yYXRpb25BdmF0YXIoZmllbGQ6IEZpZWxkQmxvY2tQcm9wZXJ0aWVzKTogc3RyaW5nIHtcblx0XHRyZXR1cm4gKFxuXHRcdFx0PENvbGxhYm9yYXRpdmVEcmFmdEhhbmRsZXJcblx0XHRcdFx0bWV0YVBhdGg9e2dldENvbnRleHRSZWxhdGl2ZVRhcmdldE9iamVjdFBhdGgoZmllbGQuZGF0YU1vZGVsUGF0aCl9XG5cdFx0XHRcdGNvbnRleHRQYXRoPXtmaWVsZC5jb250ZXh0UGF0aC5nZXRQYXRoKCl9XG5cdFx0XHRcdHNob3dBdmF0YXI9e3RydWV9XG5cdFx0XHQvPlxuXHRcdCk7XG5cdH0sXG5cblx0LyoqXG5cdCAqIEdlbmVyYXRlcyBhIHRlbXBsYXRlIGZvciBvbmUgb2YgdGhlIHBpY2tlcnMgcmVmZXJlbmNlIGluIHRoZSB0eXBlLlxuXHQgKiBAcGFyYW0gZmllbGQgUmVmZXJlbmNlIHRvIHRoZSBjdXJyZW50IGZpZWxkIGluc3RhbmNlXG5cdCAqIEBwYXJhbSB0eXBlIFJlZmVyZW5jZSB0byBvbmUgb2YgdGhlIGVkaXQgc3R5bGUgcGlja2VyIHR5cGVzXG5cdCAqIEByZXR1cm5zIEFuIFhNTC1iYXNlZCBzdHJpbmcgd2l0aCB0aGUgZGVmaW5pdGlvbiBvZiB0aGUgZmllbGQgY29udHJvbFxuXHQgKi9cblx0Z2V0RGF0ZVRpbWVQaWNrZXJHZW5lcmljKGZpZWxkOiBGaWVsZEJsb2NrUHJvcGVydGllcywgdHlwZTogXCJEYXRlUGlja2VyXCIgfCBcIkRhdGVUaW1lUGlja2VyXCIgfCBcIlRpbWVQaWNrZXJcIik6IHN0cmluZyB7XG5cdFx0Y29uc3QgZGF0YU1vZGVsT2JqZWN0UGF0aCA9IE1ldGFNb2RlbENvbnZlcnRlci5nZXRJbnZvbHZlZERhdGFNb2RlbE9iamVjdHM8RGF0YUZpZWxkVHlwZXM+KGZpZWxkLm1ldGFQYXRoLCBmaWVsZC5jb250ZXh0UGF0aCk7XG5cdFx0Y29uc3QgdGV4dEFsaWduID0gZ2V0VGV4dEFsaWdubWVudChcblx0XHRcdGRhdGFNb2RlbE9iamVjdFBhdGgsXG5cdFx0XHRmaWVsZC5mb3JtYXRPcHRpb25zLFxuXHRcdFx0ZmllbGQuZWRpdE1vZGVBc09iamVjdCBhcyBCaW5kaW5nVG9vbGtpdEV4cHJlc3Npb248c3RyaW5nPlxuXHRcdCk7XG5cblx0XHRjb25zdCBkYXRlVGltZVBpY2tlclByb3BlcnRpZXMgPSB7XG5cdFx0XHRcImNvcmU6cmVxdWlyZVwiOiBcIntGaWVsZDogJ3NhcC9mZS9tYWNyb3MvRmllbGQnfVwiLFxuXHRcdFx0aWQ6IGZpZWxkLmVkaXRTdHlsZUlkLFxuXHRcdFx0d2lkdGg6IFwiMTAwJVwiLFxuXHRcdFx0ZWRpdGFibGU6IGZpZWxkLmVkaXRhYmxlRXhwcmVzc2lvbixcblx0XHRcdGVuYWJsZWQ6IGZpZWxkLmVuYWJsZWRFeHByZXNzaW9uLFxuXHRcdFx0cmVxdWlyZWQ6IGZpZWxkLnJlcXVpcmVkRXhwcmVzc2lvbixcblx0XHRcdHRleHRBbGlnbjogdGV4dEFsaWduLFxuXHRcdFx0YXJpYUxhYmVsbGVkQnk6IGZpZWxkLmFyaWFMYWJlbGxlZEJ5IGFzIHVua25vd24gYXMgQXJyYXk8Q29udHJvbCB8IHN0cmluZz4sXG5cdFx0XHR2YWx1ZTogZmllbGQudmFsdWVCaW5kaW5nRXhwcmVzc2lvbixcblx0XHRcdGZpZWxkR3JvdXBJZHM6IGZpZWxkLmZpZWxkR3JvdXBJZHMsXG5cdFx0XHRzaG93VGltZXpvbmU6IGZpZWxkLnNob3dUaW1lem9uZSxcblx0XHRcdG1pbkRhdGU6IHR5cGUgPT09IFwiRGF0ZVRpbWVQaWNrZXJcIiB8fCB0eXBlID09PSBcIkRhdGVQaWNrZXJcIiA/IGZpZWxkLm1pbkRhdGVFeHByZXNzaW9uIDogdW5kZWZpbmVkLFxuXHRcdFx0bWF4RGF0ZTogdHlwZSA9PT0gXCJEYXRlVGltZVBpY2tlclwiIHx8IHR5cGUgPT09IFwiRGF0ZVBpY2tlclwiID8gZmllbGQubWF4RGF0ZUV4cHJlc3Npb24gOiB1bmRlZmluZWQsXG5cdFx0XHRjaGFuZ2U6IHR5cGUgPT09IFwiRGF0ZVRpbWVQaWNrZXJcIiA/IGZpZWxkLmNoYW5nZSB8fCBmaWVsZC5ldmVudEhhbmRsZXJzLmNoYW5nZSA6IGZpZWxkLmV2ZW50SGFuZGxlcnMuY2hhbmdlLFxuXHRcdFx0bGl2ZUNoYW5nZTogZmllbGQuZXZlbnRIYW5kbGVycy5saXZlQ2hhbmdlLFxuXHRcdFx0dmFsdWVGb3JtYXQ6IHR5cGUgPT09IFwiRGF0ZVBpY2tlclwiID8gXCJtZWRpdW1cIiA6IHVuZGVmaW5lZCxcblx0XHRcdHZhbGlkYXRlRmllbGRHcm91cDogZmllbGQuZXZlbnRIYW5kbGVycy52YWxpZGF0ZUZpZWxkR3JvdXAgYXMgKG9FdmVudDogQ29udHJvbCRWYWxpZGF0ZUZpZWxkR3JvdXBFdmVudCkgPT4gdm9pZFxuXHRcdH07XG5cblx0XHRmdW5jdGlvbiBnZXREYXRlVGltZVBpY2tlcihkYXRlVGltZVBpY2tlclR5cGU6IHN0cmluZyk6IHN0cmluZyB7XG5cdFx0XHRsZXQgZGF0ZVRpbWVQaWNrZXI7XG5cdFx0XHRzd2l0Y2ggKGRhdGVUaW1lUGlja2VyVHlwZSkge1xuXHRcdFx0XHRjYXNlIFwiRGF0ZVBpY2tlclwiOlxuXHRcdFx0XHRcdGRhdGVUaW1lUGlja2VyID0gKFxuXHRcdFx0XHRcdFx0PERhdGVQaWNrZXIgey4uLmRhdGVUaW1lUGlja2VyUHJvcGVydGllc30+XG5cdFx0XHRcdFx0XHRcdHt7IGN1c3RvbURhdGE6IDxDdXN0b21EYXRhIGtleT1cInNvdXJjZVBhdGhcIiB2YWx1ZT17ZmllbGQuZGF0YVNvdXJjZVBhdGh9IC8+IH19XG5cdFx0XHRcdFx0XHQ8L0RhdGVQaWNrZXI+XG5cdFx0XHRcdFx0KTtcblx0XHRcdFx0XHRicmVhaztcblx0XHRcdFx0Y2FzZSBcIkRhdGVUaW1lUGlja2VyXCI6XG5cdFx0XHRcdFx0ZGF0ZVRpbWVQaWNrZXIgPSAoXG5cdFx0XHRcdFx0XHQ8RGF0ZVRpbWVQaWNrZXIgey4uLmRhdGVUaW1lUGlja2VyUHJvcGVydGllc30+XG5cdFx0XHRcdFx0XHRcdHt7IGN1c3RvbURhdGE6IDxDdXN0b21EYXRhIGtleT1cInNvdXJjZVBhdGhcIiB2YWx1ZT17ZmllbGQuZGF0YVNvdXJjZVBhdGh9IC8+IH19XG5cdFx0XHRcdFx0XHQ8L0RhdGVUaW1lUGlja2VyPlxuXHRcdFx0XHRcdCk7XG5cdFx0XHRcdFx0YnJlYWs7XG5cdFx0XHRcdGNhc2UgXCJUaW1lUGlja2VyXCI6XG5cdFx0XHRcdFx0ZGF0ZVRpbWVQaWNrZXIgPSAoXG5cdFx0XHRcdFx0XHQ8VGltZVBpY2tlciB7Li4uZGF0ZVRpbWVQaWNrZXJQcm9wZXJ0aWVzfT5cblx0XHRcdFx0XHRcdFx0e3sgY3VzdG9tRGF0YTogPEN1c3RvbURhdGEga2V5PVwic291cmNlUGF0aFwiIHZhbHVlPXtmaWVsZC5kYXRhU291cmNlUGF0aH0gLz4gfX1cblx0XHRcdFx0XHRcdDwvVGltZVBpY2tlcj5cblx0XHRcdFx0XHQpO1xuXHRcdFx0XHRcdGJyZWFrO1xuXHRcdFx0fVxuXHRcdFx0cmV0dXJuIGRhdGVUaW1lUGlja2VyO1xuXHRcdH1cblxuXHRcdHJldHVybiBnZXREYXRlVGltZVBpY2tlcih0eXBlKTtcblx0fSxcblxuXHQvKipcblx0ICogR2VuZXJhdGVzIHRoZSBJbnB1dCB0ZW1wbGF0ZS5cblx0ICogQHBhcmFtIGZpZWxkIFJlZmVyZW5jZSB0byB0aGUgY3VycmVudCBmaWVsZCBpbnN0YW5jZVxuXHQgKiBAcmV0dXJucyBBbiBYTUwtYmFzZWQgc3RyaW5nIHdpdGggdGhlIGRlZmluaXRpb24gb2YgdGhlIGZpZWxkIGNvbnRyb2xcblx0ICovXG5cdGdldElucHV0VGVtcGxhdGUoZmllbGQ6IEZpZWxkQmxvY2tQcm9wZXJ0aWVzKTogc3RyaW5nIHtcblx0XHRjb25zdCBkYXRhTW9kZWxPYmplY3RQYXRoID0gTWV0YU1vZGVsQ29udmVydGVyLmdldEludm9sdmVkRGF0YU1vZGVsT2JqZWN0czxEYXRhRmllbGRUeXBlcz4oZmllbGQubWV0YVBhdGgsIGZpZWxkLmNvbnRleHRQYXRoKTtcblxuXHRcdGNvbnN0IHRleHRBbGlnbiA9IGdldFRleHRBbGlnbm1lbnQoXG5cdFx0XHRkYXRhTW9kZWxPYmplY3RQYXRoLFxuXHRcdFx0ZmllbGQuZm9ybWF0T3B0aW9ucyxcblx0XHRcdGZpZWxkLmVkaXRNb2RlQXNPYmplY3QgYXMgQmluZGluZ1Rvb2xraXRFeHByZXNzaW9uPHN0cmluZz5cblx0XHQpO1xuXG5cdFx0cmV0dXJuIChcblx0XHRcdDxJbnB1dFxuXHRcdFx0XHRjb3JlOnJlcXVpcmU9XCJ7RmllbGQ6ICdzYXAvZmUvbWFjcm9zL0ZpZWxkJ31cIlxuXHRcdFx0XHRpZD17ZmllbGQuZWRpdFN0eWxlSWR9XG5cdFx0XHRcdHZhbHVlPXtmaWVsZC52YWx1ZUJpbmRpbmdFeHByZXNzaW9ufVxuXHRcdFx0XHRwbGFjZWhvbGRlcj17ZmllbGQuZWRpdFN0eWxlUGxhY2Vob2xkZXJ9XG5cdFx0XHRcdHdpZHRoPVwiMTAwJVwiXG5cdFx0XHRcdGZpZWxkV2lkdGg9e1wiNzAlXCJ9XG5cdFx0XHRcdGVkaXRhYmxlPXtmaWVsZC5lZGl0YWJsZUV4cHJlc3Npb259XG5cdFx0XHRcdGRlc2NyaXB0aW9uPXtmaWVsZC5zdGF0aWNEZXNjcmlwdGlvbn1cblx0XHRcdFx0ZW5hYmxlZD17ZmllbGQuZW5hYmxlZEV4cHJlc3Npb259XG5cdFx0XHRcdHJlcXVpcmVkPXtmaWVsZC5yZXF1aXJlZEV4cHJlc3Npb259XG5cdFx0XHRcdGZpZWxkR3JvdXBJZHM9e2ZpZWxkLmZpZWxkR3JvdXBJZHN9XG5cdFx0XHRcdHRleHRBbGlnbj17dGV4dEFsaWdufVxuXHRcdFx0XHR0eXBlPXtmaWVsZC5lZGl0U3R5bGUgPT09IFwiTWFza2VkXCIgPyBcIlBhc3N3b3JkXCIgOiB1bmRlZmluZWR9XG5cdFx0XHRcdGFyaWFMYWJlbGxlZEJ5PXtmaWVsZC5hcmlhTGFiZWxsZWRCeSBhcyB1bmtub3duIGFzIEFycmF5PENvbnRyb2wgfCBzdHJpbmc+fVxuXHRcdFx0XHRtYXhMZW5ndGg9e2ZpZWxkLmZvcm1hdE9wdGlvbnMudGV4dE1heExlbmd0aH1cblx0XHRcdFx0Y2hhbmdlPXtmaWVsZC5ldmVudEhhbmRsZXJzLmNoYW5nZX1cblx0XHRcdFx0bGl2ZUNoYW5nZT17ZmllbGQuZXZlbnRIYW5kbGVycy5saXZlQ2hhbmdlfVxuXHRcdFx0XHR2YWxpZGF0ZUZpZWxkR3JvdXA9e2ZpZWxkLmV2ZW50SGFuZGxlcnMudmFsaWRhdGVGaWVsZEdyb3VwIGFzIChvRXZlbnQ6IENvbnRyb2wkVmFsaWRhdGVGaWVsZEdyb3VwRXZlbnQpID0+IHZvaWR9XG5cdFx0XHQ+XG5cdFx0XHRcdHt7XG5cdFx0XHRcdFx0bGF5b3V0RGF0YTogRWRpdFN0eWxlLmdldExheW91dERhdGEoZmllbGQpLFxuXHRcdFx0XHRcdGN1c3RvbURhdGE6IDxDdXN0b21EYXRhIGtleT1cInNvdXJjZVBhdGhcIiB2YWx1ZT17ZmllbGQuZGF0YVNvdXJjZVBhdGh9IC8+XG5cdFx0XHRcdH19XG5cdFx0XHQ8L0lucHV0PlxuXHRcdCk7XG5cdH0sXG5cblx0LyoqXG5cdCAqIFJldHVybnMgaWYgYSBmaWVsZCBzaGFsbCBiZSB0ZW1wbGF0ZWQgYXMgYSByYWRpbyBidXR0b24gZ3JvdXAuXG5cdCAqIEBwYXJhbSBmaWVsZCBSZWZlcmVuY2UgdG8gdGhlIGN1cnJlbnQgZmllbGQgaW5zdGFuY2Vcblx0ICogQHJldHVybnMgVGhlIGV2YWx1YXRpb24gcmVzdWx0XG5cdCAqL1xuXHRzaG93QXNSYWRpb0J1dHRvbihmaWVsZDogRmllbGRCbG9ja1Byb3BlcnRpZXMpOiBib29sZWFuIHtcblx0XHQvLyBEZXRlcm1pbmUgaWYgd2UgbmVlZCB0byByZW5kZXIgdGhlIGZpZWxkIGFzIGEgcmFkaW8gYnV0dG9uIGdyb3VwXG5cdFx0Ly8gVE9ETzogUmVtb3ZlIHRoZSBuZXh0IHR3byBsaW5lcyBvbmNlIFVYIHVwZGF0ZWQgdGhlIHZvY2FidWxhcnkgbW9kdWxlIGluY2x1ZGluZyB0aGUgbmV3IGV4cGVyaW1lbnRhbCBhbm5vdGF0aW9uXG5cdFx0Ly8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIEB0eXBlc2NyaXB0LWVzbGludC9iYW4tdHMtY29tbWVudFxuXHRcdC8vIEB0cy1pZ25vcmVcblx0XHRjb25zdCByYWRpb0J1dHRvbkNvbmZpZ3VyZWQ6IGJvb2xlYW4gPVxuXHRcdFx0ZmllbGQucHJvcGVydHkuYW5ub3RhdGlvbnM/LkNvbW1vbj8uVmFsdWVMaXN0V2l0aEZpeGVkVmFsdWVzICYmXG5cdFx0XHRoYXNWYWx1ZUhlbHBXaXRoRml4ZWRWYWx1ZXMoZmllbGQucHJvcGVydHkpID09PSB0cnVlICYmXG5cdFx0XHQoKGZpZWxkLnByb3BlcnR5LmFubm90YXRpb25zLkNvbW1vbi5WYWx1ZUxpc3RXaXRoRml4ZWRWYWx1ZXMuYW5ub3RhdGlvbnM/LkNvbW1vbj8uVmFsdWVMaXN0U2hvd1ZhbHVlc0ltbWVkaWF0ZWx5ICYmXG5cdFx0XHRcdGZpZWxkLnByb3BlcnR5LmFubm90YXRpb25zLkNvbW1vbi5WYWx1ZUxpc3RXaXRoRml4ZWRWYWx1ZXMuYW5ub3RhdGlvbnM/LkNvbW1vbj8uVmFsdWVMaXN0U2hvd1ZhbHVlc0ltbWVkaWF0ZWx5LnZhbHVlT2YoKSA9PT1cblx0XHRcdFx0XHR0cnVlKSB8fFxuXHRcdFx0XHRmaWVsZC5mb3JtYXRPcHRpb25zLmZpZWxkRWRpdFN0eWxlID09PSBcIlJhZGlvQnV0dG9uc1wiKTtcblxuXHRcdC8vIEV4Y2x1ZGUgbm90IHN1cHBvcnRlZCBjYXNlc1xuXHRcdC8vIC0gVmFsdWVMaXN0UGFyYW1hdGVySW5PdXQgLyAuLi5PdXQgbXVzdCBub3QgYmUgZW1wdHlcblx0XHQvLyAtIFZhbHVlTGlzdFJlbGV2YW50UXVhbGlmaWVycyBhbm5vdGF0aW9uIG11c3Qgbm90IGJlIHVzZWRcblx0XHQvLyBGdXJ0aGVyIGNhc2VzIG1heSBub3QgbWFrZSBzZW5zZSB3aXRoIHJhZGlvIGJ1dHRvbnMgYnV0IHdlIGRvIG5vdCBleHBsaWNpdGx5IGV4Y2x1ZGUgdGhlbSBidXQgbWVudGlvbiB0aGlzIGluIGRvY3VtZW50YXRpb24uXG5cdFx0Ly8gQ2hlY2sgZG9jdW1lbnRhdGlvbiwgZGlzY3VzcyBhbmQgZGVjaWRlIGJlZm9yZSBhZGRpbmcgZnVydGhlciByZXN0cmljdGlvbnMgaGVyZS5cblx0XHRjb25zdCB2YWx1ZUxpc3RQYXJhbWV0ZXJJbk91dCA9IGZpZWxkLnByb3BlcnR5Py5hbm5vdGF0aW9ucz8uQ29tbW9uPy5WYWx1ZUxpc3Q/LlBhcmFtZXRlcnMuZmluZChcblx0XHRcdCh2YWx1ZUxpc3RQYXJhbWV0ZXIpID0+XG5cdFx0XHRcdCh2YWx1ZUxpc3RQYXJhbWV0ZXIuJFR5cGUgPT09IFwiY29tLnNhcC52b2NhYnVsYXJpZXMuQ29tbW9uLnYxLlZhbHVlTGlzdFBhcmFtZXRlckluT3V0XCIgfHxcblx0XHRcdFx0XHR2YWx1ZUxpc3RQYXJhbWV0ZXIuJFR5cGUgPT09IFwiY29tLnNhcC52b2NhYnVsYXJpZXMuQ29tbW9uLnYxLlZhbHVlTGlzdFBhcmFtZXRlck91dFwiKSAmJlxuXHRcdFx0XHR2YWx1ZUxpc3RQYXJhbWV0ZXIuTG9jYWxEYXRhUHJvcGVydHkudmFsdWUgPT09IGZpZWxkLnByb3BlcnR5Lm5hbWVcblx0XHQpO1xuXHRcdHJldHVybiAoXG5cdFx0XHRyYWRpb0J1dHRvbkNvbmZpZ3VyZWQgJiZcblx0XHRcdHZhbHVlTGlzdFBhcmFtZXRlckluT3V0ICE9PSB1bmRlZmluZWQgJiZcblx0XHRcdCFmaWVsZC5wcm9wZXJ0eS5hbm5vdGF0aW9ucz8uQ29tbW9uPy5WYWx1ZUxpc3RSZWxldmFudFF1YWxpZmllcnNcblx0XHQpO1xuXHR9LFxuXG5cdC8qKlxuXHQgKiBHZW5lcmF0ZXMgdGhlIFJhZGlvQnV0dG9uIHRlbXBsYXRlLlxuXHQgKiBAcGFyYW0gZmllbGQgUmVmZXJlbmNlIHRvIHRoZSBjdXJyZW50IGZpZWxkIGluc3RhbmNlXG5cdCAqIEBwYXJhbSBmb3JCb29sZWFuXG5cdCAqIEByZXR1cm5zIEFuIFhNTC1iYXNlZCBzdHJpbmcgd2l0aCB0aGUgcmFkaW8gYnV0dG9uIGRlZmluaXRpb25cblx0ICovXG5cdGdldFJhZGlvQnV0dG9uVGVtcGxhdGUoZmllbGQ6IEZpZWxkQmxvY2tQcm9wZXJ0aWVzLCBmb3JCb29sZWFuID0gZmFsc2UpOiBzdHJpbmcge1xuXHRcdGNvbnN0IGZpeGVkVmFsdWVzUGF0aCA9IFwiL1wiICsgZmllbGQucHJvcGVydHk/LmFubm90YXRpb25zPy5Db21tb24/LlZhbHVlTGlzdD8uQ29sbGVjdGlvblBhdGg7XG5cblx0XHRjb25zdCB2YWx1ZUxpc3RQYXJhbWV0ZXJJbk91dCA9IGZpZWxkLnByb3BlcnR5Py5hbm5vdGF0aW9ucz8uQ29tbW9uPy5WYWx1ZUxpc3Q/LlBhcmFtZXRlcnMuZmluZChcblx0XHRcdCh2YWx1ZUxpc3RQYXJhbWV0ZXIpID0+XG5cdFx0XHRcdCh2YWx1ZUxpc3RQYXJhbWV0ZXIuJFR5cGUgPT09IFwiY29tLnNhcC52b2NhYnVsYXJpZXMuQ29tbW9uLnYxLlZhbHVlTGlzdFBhcmFtZXRlckluT3V0XCIgfHxcblx0XHRcdFx0XHR2YWx1ZUxpc3RQYXJhbWV0ZXIuJFR5cGUgPT09IFwiY29tLnNhcC52b2NhYnVsYXJpZXMuQ29tbW9uLnYxLlZhbHVlTGlzdFBhcmFtZXRlck91dFwiKSAmJlxuXHRcdFx0XHR2YWx1ZUxpc3RQYXJhbWV0ZXIuTG9jYWxEYXRhUHJvcGVydHkudmFsdWUgPT09IGZpZWxkLnByb3BlcnR5Lm5hbWVcblx0XHQpO1xuXG5cdFx0Ly8gd2Uga25vdyB0aGF0IGEgdmFsdWVMaXN0UHJvcGVydHkgZXhpc3RzIGJlY2F1c2Ugd2UgY2hlY2sgdGhpcyBhbHJlYWR5IGluIHNob3dBc1JhZGlvQnV0dG9uXG5cdFx0Y29uc3QgdmFsdWVMaXN0S2V5UGF0aCA9IHBhdGhJbk1vZGVsKHZhbHVlTGlzdFBhcmFtZXRlckluT3V0Py5WYWx1ZUxpc3RQcm9wZXJ0eSBhcyBzdHJpbmcpID8/IHBhdGhJbk1vZGVsKFwiXCIpO1xuXG5cdFx0bGV0IHZhbHVlTGlzdERlc2NyaXB0aW9uUGF0aDtcblx0XHRjb25zdCB2YWx1ZUhlbHBLZXlUZXh0QW5ub3RhdGlvblBhdGggPVxuXHRcdFx0ZmllbGQuZGF0YU1vZGVsUGF0aC50YXJnZXRFbnRpdHlUeXBlLnJlc29sdmVQYXRoKGZpeGVkVmFsdWVzUGF0aCk/LmVudGl0eVR5cGUua2V5c1swXS5hbm5vdGF0aW9ucz8uQ29tbW9uPy5UZXh0Py5wYXRoO1xuXHRcdGlmICh2YWx1ZUhlbHBLZXlUZXh0QW5ub3RhdGlvblBhdGgpIHtcblx0XHRcdHZhbHVlTGlzdERlc2NyaXB0aW9uUGF0aCA9IHBhdGhJbk1vZGVsKHZhbHVlSGVscEtleVRleHRBbm5vdGF0aW9uUGF0aCk7XG5cdFx0fSBlbHNlIHtcblx0XHRcdHZhbHVlTGlzdERlc2NyaXB0aW9uUGF0aCA9IHZhbHVlTGlzdEtleVBhdGg7XG5cdFx0fVxuXG5cdFx0bGV0IHBvc3NpYmxlVmFsdWVzOiB7IGtleTogc3RyaW5nIHwgbnVtYmVyIHwgYm9vbGVhbiB8IG51bGw7IHRleHQ6IHN0cmluZyB9W10gfCB1bmRlZmluZWQ7XG5cdFx0aWYgKGZvckJvb2xlYW4pIHtcblx0XHRcdHBvc3NpYmxlVmFsdWVzID0gW1xuXHRcdFx0XHR7IGtleTogdHJ1ZSwgdGV4dDogZmllbGQuZ2V0VHJhbnNsYXRlZFRleHQoXCJUX1JBRElPQlVUVE9OU19CT09MRUFOX1lFU1wiKSB9LFxuXHRcdFx0XHR7IGtleTogZmFsc2UsIHRleHQ6IGZpZWxkLmdldFRyYW5zbGF0ZWRUZXh0KFwiVF9SQURJT0JVVFRPTlNfQk9PTEVBTl9OT1wiKSB9XG5cdFx0XHRdO1xuXHRcdH1cblxuXHRcdHJldHVybiAoXG5cdFx0XHQ8UmFkaW9CdXR0b25zXG5cdFx0XHRcdGlkPXtmaWVsZC5lZGl0U3R5bGVJZH1cblx0XHRcdFx0cG9zc2libGVWYWx1ZXM9e3Bvc3NpYmxlVmFsdWVzfVxuXHRcdFx0XHRyZXF1aXJlZEV4cHJlc3Npb249e2ZpZWxkLnJlcXVpcmVkRXhwcmVzc2lvbn1cblx0XHRcdFx0dmFsaWRhdGVGaWVsZEdyb3VwPXtmaWVsZC5ldmVudEhhbmRsZXJzLnZhbGlkYXRlRmllbGRHcm91cCBhcyAob0V2ZW50OiBDb250cm9sJFZhbGlkYXRlRmllbGRHcm91cEV2ZW50KSA9PiB2b2lkfVxuXHRcdFx0XHRmaXhlZFZhbHVlc1BhdGg9e2ZpeGVkVmFsdWVzUGF0aCBhcyB1bmtub3duIGFzIGB7JHtzdHJpbmd9fWB9XG5cdFx0XHRcdGZpZWxkR3JvdXBJZHM9e2ZpZWxkLmZpZWxkR3JvdXBJZHN9XG5cdFx0XHRcdHZhbHVlPXtmaWVsZC52YWx1ZUJpbmRpbmdFeHByZXNzaW9ufVxuXHRcdFx0XHRlZGl0YWJsZUV4cHJlc3Npb249e2ZpZWxkLmVkaXRhYmxlRXhwcmVzc2lvbn1cblx0XHRcdFx0ZW5hYmxlZEV4cHJlc3Npb249e2ZpZWxkLmVuYWJsZWRFeHByZXNzaW9ufVxuXHRcdFx0XHRyYWRpb0J1dHRvblRleHRQcm9wZXJ0eT17dmFsdWVMaXN0RGVzY3JpcHRpb25QYXRofVxuXHRcdFx0XHRyYWRpb0J1dHRvbktleVByb3BlcnR5PXt2YWx1ZUxpc3RLZXlQYXRofVxuXHRcdFx0XHRob3Jpem9udGFsTGF5b3V0PXtmaWVsZC5mb3JtYXRPcHRpb25zLnJhZGlvQnV0dG9uc0hvcml6b250YWxMYXlvdXR9XG5cdFx0XHQvPlxuXHRcdCk7XG5cdH0sXG5cblx0LyoqXG5cdCAqIEdlbmVyYXRlcyB0aGUgSW5wdXRXaXRoVmFsdWVIZWxwIHRlbXBsYXRlLlxuXHQgKiBAcGFyYW0gZmllbGQgUmVmZXJlbmNlIHRvIHRoZSBjdXJyZW50IGZpZWxkIGluc3RhbmNlXG5cdCAqIEByZXR1cm5zIEFuIFhNTC1iYXNlZCBzdHJpbmcgd2l0aCB0aGUgZGVmaW5pdGlvbiBvZiB0aGUgZmllbGQgY29udHJvbFxuXHQgKi9cblx0Z2V0SW5wdXRXaXRoVmFsdWVIZWxwVGVtcGxhdGUoZmllbGQ6IEZpZWxkQmxvY2tQcm9wZXJ0aWVzKTogc3RyaW5nIHtcblx0XHRjb25zdCBkYXRhRmllbGREYXRhTW9kZWxPYmplY3RQYXRoID0gTWV0YU1vZGVsQ29udmVydGVyLmdldEludm9sdmVkRGF0YU1vZGVsT2JqZWN0czxEYXRhRmllbGRUeXBlcz4oXG5cdFx0XHRmaWVsZC5tZXRhUGF0aCxcblx0XHRcdGZpZWxkLmNvbnRleHRQYXRoXG5cdFx0KTtcblxuXHRcdGNvbnN0IGRlbGVnYXRlID0gRmllbGRIZWxwZXIuY29tcHV0ZUZpZWxkQmFzZURlbGVnYXRlKFxuXHRcdFx0XCJzYXAvZmUvbWFjcm9zL2ZpZWxkL0ZpZWxkQmFzZURlbGVnYXRlXCIsXG5cdFx0XHRmaWVsZC5mb3JtYXRPcHRpb25zLnJldHJpZXZlVGV4dEZyb21WYWx1ZUxpc3QgYXMgYm9vbGVhblxuXHRcdCk7XG5cdFx0Y29uc3QgZGlzcGxheSA9IFVJRm9ybWF0dGVyLmdldEZpZWxkRGlzcGxheShcblx0XHRcdGZpZWxkLnByb3BlcnR5LFxuXHRcdFx0ZmllbGQuZm9ybWF0T3B0aW9ucy5kaXNwbGF5TW9kZSBhcyBzdHJpbmcsXG5cdFx0XHRmaWVsZC5lZGl0TW9kZUFzT2JqZWN0IGFzIEJpbmRpbmdUb29sa2l0RXhwcmVzc2lvbjxzdHJpbmc+XG5cdFx0KTtcblx0XHRjb25zdCBoYXNNdWx0aWxpbmVBbm5vdGF0aW9uID0gISFmaWVsZC5wcm9wZXJ0eT8uYW5ub3RhdGlvbnM/LlVJPy5NdWx0aUxpbmVUZXh0O1xuXHRcdGNvbnN0IG11bHRpcGxlTGluZXMgPSBnZXRNdWx0aXBsZUxpbmVzRm9yRGF0YUZpZWxkKGZpZWxkLCBoYXNNdWx0aWxpbmVBbm5vdGF0aW9uKTtcblxuXHRcdGNvbnN0IHRleHRBbGlnbiA9IGdldFRleHRBbGlnbm1lbnQoXG5cdFx0XHRkYXRhRmllbGREYXRhTW9kZWxPYmplY3RQYXRoLFxuXHRcdFx0ZmllbGQuZm9ybWF0T3B0aW9ucyxcblx0XHRcdGZpZWxkLmVkaXRNb2RlQXNPYmplY3QgYXMgQmluZGluZ1Rvb2xraXRFeHByZXNzaW9uPHN0cmluZz4sXG5cdFx0XHR0cnVlXG5cdFx0KTtcblx0XHRjb25zdCBsYWJlbCA9IEZpZWxkSGVscGVyLmNvbXB1dGVMYWJlbFRleHQoZmllbGQgYXMgdW5rbm93biBhcyBNZXRhTW9kZWxUeXBlPERhdGFGaWVsZFR5cGVzPiwge1xuXHRcdFx0Y29udGV4dDogZmllbGQubWV0YVBhdGhcblx0XHR9KTtcblxuXHRcdGxldCBvcHRpb25hbENvbnRlbnRFZGl0ID0gXCJcIjtcblx0XHRpZiAoZmllbGQucHJvcGVydHkudHlwZSA9PT0gXCJFZG0uU3RyaW5nXCIgJiYgaGFzTXVsdGlsaW5lQW5ub3RhdGlvbikge1xuXHRcdFx0b3B0aW9uYWxDb250ZW50RWRpdCA9IChcblx0XHRcdFx0PFRleHRBcmVhXG5cdFx0XHRcdFx0dmFsdWU9e2ZpZWxkLnZhbHVlQmluZGluZ0V4cHJlc3Npb259XG5cdFx0XHRcdFx0cmVxdWlyZWQ9e2ZpZWxkLnJlcXVpcmVkRXhwcmVzc2lvbn1cblx0XHRcdFx0XHRyb3dzPXtmaWVsZC5mb3JtYXRPcHRpb25zLnRleHRMaW5lc0VkaXR9XG5cdFx0XHRcdFx0Z3Jvd2luZz17KGZpZWxkLmZvcm1hdE9wdGlvbnMudGV4dE1heExpbmVzIGFzIHVua25vd24gYXMgbnVtYmVyKSA+IDAgPyB0cnVlIDogdW5kZWZpbmVkfVxuXHRcdFx0XHRcdGdyb3dpbmdNYXhMaW5lcz17ZmllbGQuZm9ybWF0T3B0aW9ucy50ZXh0TWF4TGluZXN9XG5cdFx0XHRcdFx0d2lkdGg9XCIxMDAlXCJcblx0XHRcdFx0XHRjaGFuZ2U9e2ZpZWxkLmV2ZW50SGFuZGxlcnMuY2hhbmdlfVxuXHRcdFx0XHRcdGZpZWxkR3JvdXBJZHM9e2ZpZWxkLmZpZWxkR3JvdXBJZHN9XG5cdFx0XHRcdC8+XG5cdFx0XHQpO1xuXHRcdH1cblxuXHRcdGxldCBvcHRpb25hbExheW91dERhdGEgPSBcIlwiO1xuXHRcdGlmIChmaWVsZC5jb2xsYWJvcmF0aW9uRW5hYmxlZCA9PT0gdHJ1ZSkge1xuXHRcdFx0b3B0aW9uYWxMYXlvdXREYXRhID0gPEZsZXhJdGVtRGF0YSBncm93RmFjdG9yPVwiOVwiIC8+O1xuXHRcdH1cblxuXHRcdGlmICh0aGlzLnNob3dBc1JhZGlvQnV0dG9uKGZpZWxkKSAhPT0gdHJ1ZSkge1xuXHRcdFx0Y29uc3QgY3VzdG9tRGF0YSA9IGNyZWF0ZUN1c3RvbURhdGFzKFtcblx0XHRcdFx0eyBrZXk6IFwic291cmNlUGF0aFwiLCB2YWx1ZTogZmllbGQuZGF0YVNvdXJjZVBhdGggfSxcblx0XHRcdFx0eyBrZXk6IFwidmFsdWVTdGF0ZVwiLCB2YWx1ZTogZmllbGQudmFsdWVTdGF0ZSB9XG5cdFx0XHRdKTtcblx0XHRcdHJldHVybiAoXG5cdFx0XHRcdDxGaWVsZFxuXHRcdFx0XHRcdGNvcmU6cmVxdWlyZT1cIntGaWVsZDogJ3NhcC9mZS9tYWNyb3MvRmllbGQnfVwiXG5cdFx0XHRcdFx0ZGVsZWdhdGU9e2RlbGVnYXRlfVxuXHRcdFx0XHRcdGlkPXtmaWVsZC5lZGl0U3R5bGVJZH1cblx0XHRcdFx0XHR2YWx1ZT17ZmllbGQudmFsdWVCaW5kaW5nRXhwcmVzc2lvbn1cblx0XHRcdFx0XHRwbGFjZWhvbGRlcj17ZmllbGQuZWRpdFN0eWxlUGxhY2Vob2xkZXJ9XG5cdFx0XHRcdFx0ZWRpdE1vZGU9e2ZpZWxkLmVkaXRNb2RlID8/IGZpZWxkLmNvbXB1dGVkRWRpdE1vZGV9XG5cdFx0XHRcdFx0d2lkdGg9XCIxMDAlXCJcblx0XHRcdFx0XHRyZXF1aXJlZD17ZmllbGQucmVxdWlyZWRFeHByZXNzaW9ufVxuXHRcdFx0XHRcdGFkZGl0aW9uYWxWYWx1ZT17ZmllbGQudGV4dEJpbmRpbmdFeHByZXNzaW9ufVxuXHRcdFx0XHRcdGRpc3BsYXk9e2Rpc3BsYXl9XG5cdFx0XHRcdFx0bXVsdGlwbGVMaW5lcz17bXVsdGlwbGVMaW5lcyA9PT0gZmFsc2UgPyB1bmRlZmluZWQgOiBtdWx0aXBsZUxpbmVzfVxuXHRcdFx0XHRcdHZhbHVlSGVscD17ZmllbGQudmFsdWVIZWxwSWR9XG5cdFx0XHRcdFx0ZmllbGRHcm91cElkcz17ZmllbGQuZmllbGRHcm91cElkc31cblx0XHRcdFx0XHR0ZXh0QWxpZ249e3RleHRBbGlnbn1cblx0XHRcdFx0XHRhcmlhTGFiZWxsZWRCeT17ZmllbGQuYXJpYUxhYmVsbGVkQnkgYXMgdW5rbm93biBhcyBBcnJheTxDb250cm9sMSB8IHN0cmluZz59XG5cdFx0XHRcdFx0bGFiZWw9e2xhYmVsfVxuXHRcdFx0XHRcdGNoYW5nZT17ZmllbGQuZXZlbnRIYW5kbGVycy5jaGFuZ2V9XG5cdFx0XHRcdFx0bGl2ZUNoYW5nZT17ZmllbGQuZXZlbnRIYW5kbGVycy5saXZlQ2hhbmdlfVxuXHRcdFx0XHRcdHZhbGlkYXRlRmllbGRHcm91cD17ZmllbGQuZXZlbnRIYW5kbGVycy52YWxpZGF0ZUZpZWxkR3JvdXAgYXMgKG9FdmVudDogQ29udHJvbCRWYWxpZGF0ZUZpZWxkR3JvdXBFdmVudCkgPT4gdm9pZH1cblx0XHRcdFx0PlxuXHRcdFx0XHRcdHt7XG5cdFx0XHRcdFx0XHRjb250ZW50RWRpdDogb3B0aW9uYWxDb250ZW50RWRpdCxcblx0XHRcdFx0XHRcdGxheW91dERhdGE6IG9wdGlvbmFsTGF5b3V0RGF0YSxcblx0XHRcdFx0XHRcdGN1c3RvbURhdGE6IGN1c3RvbURhdGFcblx0XHRcdFx0XHR9fVxuXHRcdFx0XHQ8L0ZpZWxkPlxuXHRcdFx0KTtcblx0XHR9IGVsc2Uge1xuXHRcdFx0cmV0dXJuIHRoaXMuZ2V0UmFkaW9CdXR0b25UZW1wbGF0ZShmaWVsZCk7XG5cdFx0fVxuXHR9LFxuXG5cdC8qKlxuXHQgKiBHZW5lcmF0ZXMgdGhlIENoZWNrQm94IHRlbXBsYXRlLlxuXHQgKiBAcGFyYW0gZmllbGQgUmVmZXJlbmNlIHRvIHRoZSBjdXJyZW50IGZpZWxkIGluc3RhbmNlXG5cdCAqIEByZXR1cm5zIEFuIFhNTC1iYXNlZCBzdHJpbmcgd2l0aCB0aGUgZGVmaW5pdGlvbiBvZiB0aGUgZmllbGQgY29udHJvbFxuXHQgKi9cblx0Z2V0Q2hlY2tCb3hUZW1wbGF0ZShmaWVsZDogRmllbGRCbG9ja1Byb3BlcnRpZXMpOiBzdHJpbmcge1xuXHRcdGNvbnN0IGlzQ2hlY2tCb3hHcm91cEl0ZW0gPSBmaWVsZC5mb3JtYXRPcHRpb25zLmlzRmllbGRHcm91cEl0ZW0gPT09IHRydWU7XG5cdFx0cmV0dXJuIChcblx0XHRcdDxDaGVja0JveFxuXHRcdFx0XHRjb3JlOnJlcXVpcmU9XCJ7RmllbGQ6ICdzYXAvZmUvbWFjcm9zL0ZpZWxkJ31cIlxuXHRcdFx0XHRpZD17ZmllbGQuZWRpdFN0eWxlSWR9XG5cdFx0XHRcdHJlcXVpcmVkPXtpc0NoZWNrQm94R3JvdXBJdGVtID8gZmllbGQucmVxdWlyZWRFeHByZXNzaW9uIDogdW5kZWZpbmVkfVxuXHRcdFx0XHRzZWxlY3RlZD17ZmllbGQudmFsdWVCaW5kaW5nRXhwcmVzc2lvbn1cblx0XHRcdFx0ZWRpdGFibGU9e2ZpZWxkLmVkaXRhYmxlRXhwcmVzc2lvbn1cblx0XHRcdFx0ZW5hYmxlZD17ZmllbGQuZW5hYmxlZEV4cHJlc3Npb259XG5cdFx0XHRcdGZpZWxkR3JvdXBJZHM9e2ZpZWxkLmZpZWxkR3JvdXBJZHN9XG5cdFx0XHRcdHRleHQ9e2lzQ2hlY2tCb3hHcm91cEl0ZW0gPyBmaWVsZC5sYWJlbCA6IHVuZGVmaW5lZH1cblx0XHRcdFx0d3JhcHBpbmc9e2lzQ2hlY2tCb3hHcm91cEl0ZW0gPyB0cnVlIDogdW5kZWZpbmVkfVxuXHRcdFx0XHRhcmlhTGFiZWxsZWRCeT17ZmllbGQuYXJpYUxhYmVsbGVkQnkgYXMgdW5rbm93biBhcyBBcnJheTxDb250cm9sIHwgc3RyaW5nPn1cblx0XHRcdFx0c2VsZWN0PXtmaWVsZC5ldmVudEhhbmRsZXJzLmNoYW5nZX1cblx0XHRcdFx0dmFsaWRhdGVGaWVsZEdyb3VwPXtmaWVsZC5ldmVudEhhbmRsZXJzLnZhbGlkYXRlRmllbGRHcm91cCBhcyAob0V2ZW50OiBDb250cm9sJFZhbGlkYXRlRmllbGRHcm91cEV2ZW50KSA9PiB2b2lkfVxuXHRcdFx0PlxuXHRcdFx0XHR7eyBjdXN0b21EYXRhOiA8Q3VzdG9tRGF0YSBrZXk9XCJzb3VyY2VQYXRoXCIgdmFsdWU9e2ZpZWxkLmRhdGFTb3VyY2VQYXRofSAvPiB9fVxuXHRcdFx0PC9DaGVja0JveD5cblx0XHQpO1xuXHR9LFxuXG5cdC8qKlxuXHQgKiBHZW5lcmF0ZXMgdGhlIFRleHRBcmVhIHRlbXBsYXRlLlxuXHQgKiBAcGFyYW0gZmllbGQgUmVmZXJlbmNlIHRvIHRoZSBjdXJyZW50IGZpZWxkIGluc3RhbmNlXG5cdCAqIEByZXR1cm5zIEFuIFhNTC1iYXNlZCBzdHJpbmcgd2l0aCB0aGUgZGVmaW5pdGlvbiBvZiB0aGUgZmllbGQgY29udHJvbFxuXHQgKi9cblx0Z2V0VGV4dEFyZWFUZW1wbGF0ZShmaWVsZDogRmllbGRCbG9ja1Byb3BlcnRpZXMpOiBzdHJpbmcge1xuXHRcdGNvbnN0IGdyb3dpbmcgPSBmaWVsZC5mb3JtYXRPcHRpb25zLnRleHRNYXhMaW5lcyA/IHRydWUgOiBmYWxzZTtcblxuXHRcdGNvbnN0IHNob3dFeGNlZWRlZFRleHQgPSAhIWZpZWxkLmZvcm1hdE9wdGlvbnMudGV4dE1heExlbmd0aDtcblxuXHRcdC8vdW5mb3J0dW5hdGVseSB0aGlzIG9uZSBpcyBhIFwiZGlmZmVyZW50XCIgbGF5b3V0RGF0YSB0aGFuIHRoZSBvdGhlcnMsIHRoZXJlZm9yZSB0aGUgcmV1c2UgZnVuY3Rpb24gZnJvbSBhYm92ZSBjYW5ub3QgYmUgdXNlZCBmb3IgdGhlIHRleHRBcmVhIHRlbXBsYXRlXG5cdFx0bGV0IGxheW91dERhdGEgPSBcIlwiO1xuXHRcdGlmIChmaWVsZC5jb2xsYWJvcmF0aW9uRW5hYmxlZCkge1xuXHRcdFx0bGF5b3V0RGF0YSA9IDxGbGV4SXRlbURhdGEgZ3Jvd0ZhY3Rvcj1cIjlcIiAvPjtcblx0XHR9XG5cblx0XHRyZXR1cm4gKFxuXHRcdFx0PFRleHRBcmVhRXhcblx0XHRcdFx0Y29yZTpyZXF1aXJlPVwie0ZpZWxkOiAnc2FwL2ZlL21hY3Jvcy9GaWVsZCd9XCJcblx0XHRcdFx0aWQ9e2ZpZWxkLmVkaXRTdHlsZUlkfVxuXHRcdFx0XHR2YWx1ZT17ZmllbGQudmFsdWVCaW5kaW5nRXhwcmVzc2lvbn1cblx0XHRcdFx0cGxhY2Vob2xkZXI9e2ZpZWxkLmVkaXRTdHlsZVBsYWNlaG9sZGVyfVxuXHRcdFx0XHRyZXF1aXJlZD17ZmllbGQucmVxdWlyZWRFeHByZXNzaW9ufVxuXHRcdFx0XHRyb3dzPXtmaWVsZC5mb3JtYXRPcHRpb25zLnRleHRMaW5lc0VkaXR9XG5cdFx0XHRcdGdyb3dpbmc9e2dyb3dpbmd9XG5cdFx0XHRcdGdyb3dpbmdNYXhMaW5lcz17ZmllbGQuZm9ybWF0T3B0aW9ucy50ZXh0TWF4TGluZXN9XG5cdFx0XHRcdGNvbHM9ezMwMH0gLy9BcyB0aGUgZGVmYXVsdCBpcyAyMCwgdGhlIFwiY29sc1wiIHByb3BlcnR5IGlzIGNvbmZpZ3VyZWQgd2l0aCBhIHZhbHVlIG9mIDMwMCB0byBndWFyYW50ZWUgdGhhdCB0aGUgdGV4dGFyZWEgd2lsbCBvY2N1cHkgYWxsIHRoZSBhdmFpbGFibGUgc3BhY2UuXG5cdFx0XHRcdHdpZHRoPVwiMTAwJVwiXG5cdFx0XHRcdGVkaXRhYmxlPXtmaWVsZC5lZGl0YWJsZUV4cHJlc3Npb259XG5cdFx0XHRcdGVuYWJsZWQ9e2ZpZWxkLmVuYWJsZWRFeHByZXNzaW9ufVxuXHRcdFx0XHRmaWVsZEdyb3VwSWRzPXtmaWVsZC5maWVsZEdyb3VwSWRzfVxuXHRcdFx0XHRhcmlhTGFiZWxsZWRCeT17ZmllbGQuYXJpYUxhYmVsbGVkQnkgYXMgdW5rbm93biBhcyBBcnJheTxDb250cm9sIHwgc3RyaW5nPn1cblx0XHRcdFx0bWF4TGVuZ3RoPXtmaWVsZC5mb3JtYXRPcHRpb25zLnRleHRNYXhMZW5ndGh9XG5cdFx0XHRcdHNob3dFeGNlZWRlZFRleHQ9e3Nob3dFeGNlZWRlZFRleHR9XG5cdFx0XHRcdGNoYW5nZT17ZmllbGQuZXZlbnRIYW5kbGVycy5jaGFuZ2V9XG5cdFx0XHRcdGxpdmVDaGFuZ2U9e2ZpZWxkLmV2ZW50SGFuZGxlcnMubGl2ZUNoYW5nZX1cblx0XHRcdFx0dmFsaWRhdGVGaWVsZEdyb3VwPXtmaWVsZC5ldmVudEhhbmRsZXJzLnZhbGlkYXRlRmllbGRHcm91cCBhcyAob0V2ZW50OiBDb250cm9sJFZhbGlkYXRlRmllbGRHcm91cEV2ZW50KSA9PiB2b2lkfVxuXHRcdFx0PlxuXHRcdFx0XHR7e1xuXHRcdFx0XHRcdGxheW91dERhdGE6IGxheW91dERhdGEsXG5cdFx0XHRcdFx0Y3VzdG9tRGF0YTogPEN1c3RvbURhdGEga2V5PVwic291cmNlUGF0aFwiIHZhbHVlPXtmaWVsZC5kYXRhU291cmNlUGF0aH0gLz5cblx0XHRcdFx0fX1cblx0XHRcdDwvVGV4dEFyZWFFeD5cblx0XHQpO1xuXHR9LFxuXG5cdC8qKlxuXHQgKiBHZW5lcmF0ZXMgdGhlIFJhdGluZ0luZGljYXRvciB0ZW1wbGF0ZS5cblx0ICogQHBhcmFtIGZpZWxkIFJlZmVyZW5jZSB0byB0aGUgY3VycmVudCBmaWVsZCBpbnN0YW5jZVxuXHQgKiBAcmV0dXJucyBBbiBYTUwtYmFzZWQgc3RyaW5nIHdpdGggdGhlIGRlZmluaXRpb24gb2YgdGhlIGZpZWxkIGNvbnRyb2xcblx0ICovXG5cdGdldFJhdGluZ0luZGljYXRvclRlbXBsYXRlOiAoZmllbGQ6IEZpZWxkQmxvY2tQcm9wZXJ0aWVzKTogc3RyaW5nID0+IHtcblx0XHRjb25zdCB0b29sdGlwID0gZmllbGQucmF0aW5nSW5kaWNhdG9yVG9vbHRpcCB8fCBcIntzYXAuZmUuaTE4bj5UX0NPTU1PTl9SQVRJTkdfSU5ESUNBVE9SX1RJVExFX0xBQkVMfVwiO1xuXG5cdFx0cmV0dXJuIChcblx0XHRcdDxSYXRpbmdJbmRpY2F0b3Jcblx0XHRcdFx0Y29yZTpyZXF1aXJlPVwie0ZpZWxkOiAnc2FwL2ZlL21hY3Jvcy9GaWVsZCd9XCJcblx0XHRcdFx0aWQ9e2ZpZWxkLmVkaXRTdHlsZUlkfVxuXHRcdFx0XHRtYXhWYWx1ZT17ZmllbGQucmF0aW5nSW5kaWNhdG9yVGFyZ2V0VmFsdWV9XG5cdFx0XHRcdHZhbHVlPXtmaWVsZC52YWx1ZUJpbmRpbmdFeHByZXNzaW9ufVxuXHRcdFx0XHR0b29sdGlwPXt0b29sdGlwfVxuXHRcdFx0XHRmaWVsZEdyb3VwSWRzPXtmaWVsZC5maWVsZEdyb3VwSWRzfVxuXHRcdFx0XHRpY29uU2l6ZT1cIjEuMzc1cmVtXCJcblx0XHRcdFx0Y2xhc3M9XCJzYXBVaVRpbnlNYXJnaW5Ub3BCb3R0b21cIlxuXHRcdFx0XHRlZGl0YWJsZT1cInRydWVcIlxuXHRcdFx0XHRjaGFuZ2U9e2ZpZWxkLmV2ZW50SGFuZGxlcnMuY2hhbmdlfVxuXHRcdFx0PlxuXHRcdFx0XHR7e1xuXHRcdFx0XHRcdGxheW91dERhdGE6IEVkaXRTdHlsZS5nZXRMYXlvdXREYXRhKGZpZWxkKVxuXHRcdFx0XHR9fVxuXHRcdFx0PC9SYXRpbmdJbmRpY2F0b3I+XG5cdFx0KTtcblx0fSxcblxuXHQvKipcblx0ICogSGVscHMgdG8gY2FsY3VsYXRlIHRoZSBjb250ZW50IGVkaXQgZnVuY3Rpb25hbGl0eSAvIHRlbXBsYXRpbmcuXG5cdCAqIEluY2x1ZGluZyBhIHdyYXBwZXIgYW4gaGJveCBpbiBjYXNlIG9mIGNvbGxhYm9yYXRpb24gbW9kZSBmaW5hbGx5XG5cdCAqIGl0IGNhbGxzIGludGVybmFsbHkgRWRpdFN0eWxlLmdldFRlbXBsYXRlLlxuXHQgKiBAcGFyYW0gZmllbGQgUmVmZXJlbmNlIHRvIHRoZSBjdXJyZW50IGZpZWxkIGluc3RhbmNlXG5cdCAqIEByZXR1cm5zIEFuIFhNTC1iYXNlZCBzdHJpbmcgd2l0aCB0aGUgZGVmaW5pdGlvbiBvZiB0aGUgZmllbGQgY29udHJvbFxuXHQgKi9cblx0Z2V0VGVtcGxhdGVXaXRoV3JhcHBlcihmaWVsZDogRmllbGRCbG9ja1Byb3BlcnRpZXMpOiBzdHJpbmcge1xuXHRcdGxldCBjb250ZW50RWRpdDtcblxuXHRcdGlmICgoZmllbGQuZWRpdE1vZGUgPz8gZmllbGQuY29tcHV0ZWRFZGl0TW9kZSkgIT09IEZpZWxkRWRpdE1vZGUuRGlzcGxheSAmJiAhIWZpZWxkLmVkaXRTdHlsZSkge1xuXHRcdFx0aWYgKGZpZWxkLmNvbGxhYm9yYXRpb25FbmFibGVkID8/IGZhbHNlKSB7XG5cdFx0XHRcdGNvbnRlbnRFZGl0ID0gKFxuXHRcdFx0XHRcdDxDb2xsYWJvcmF0aW9uSEJveCB3aWR0aD1cIjEwMCVcIiBhbGlnbkl0ZW1zPVwiRW5kXCI+XG5cdFx0XHRcdFx0XHR7RWRpdFN0eWxlLmdldFRlbXBsYXRlKGZpZWxkKX1cblx0XHRcdFx0XHRcdHtFZGl0U3R5bGUuZ2V0Q29sbGFib3JhdGlvbkF2YXRhcihmaWVsZCl9XG5cdFx0XHRcdFx0PC9Db2xsYWJvcmF0aW9uSEJveD5cblx0XHRcdFx0KTtcblx0XHRcdH0gZWxzZSB7XG5cdFx0XHRcdGNvbnRlbnRFZGl0ID0gRWRpdFN0eWxlLmdldFRlbXBsYXRlKGZpZWxkKTtcblx0XHRcdH1cblx0XHR9XG5cblx0XHRyZXR1cm4gY29udGVudEVkaXQgfHwgXCJcIjtcblx0fSxcblxuXHQvKipcblx0ICogR2VuZXJhdGVzIHRoZSBJbnB1dE1hc2sgdGVtcGxhdGUuXG5cdCAqIEBwYXJhbSBmaWVsZCBSZWZlcmVuY2UgdG8gdGhlIGN1cnJlbnQgZmllbGQgaW5zdGFuY2Vcblx0ICogQHJldHVybnMgQW4gWE1MLWJhc2VkIHN0cmluZyB3aXRoIHRoZSBkZWZpbml0aW9uIG9mIHRoZSBmaWVsZCBjb250cm9sXG5cdCAqL1xuXHRnZXRJbnB1dE1hc2tUZW1wbGF0ZShmaWVsZDogRmllbGRCbG9ja1Byb3BlcnRpZXMpOiBzdHJpbmcge1xuXHRcdGNvbnN0IG9wdGlvbmFsTWFza0lucHV0UnVsZXMgPSBbXTtcblx0XHRjb25zdCBkYXRhTW9kZWxPYmplY3RQYXRoID0gTWV0YU1vZGVsQ29udmVydGVyLmdldEludm9sdmVkRGF0YU1vZGVsT2JqZWN0czxEYXRhRmllbGRUeXBlcz4oZmllbGQubWV0YVBhdGgsIGZpZWxkLmNvbnRleHRQYXRoKTtcblx0XHRjb25zdCB0ZXh0QWxpZ24gPSBnZXRUZXh0QWxpZ25tZW50KFxuXHRcdFx0ZGF0YU1vZGVsT2JqZWN0UGF0aCxcblx0XHRcdGZpZWxkLmZvcm1hdE9wdGlvbnMsXG5cdFx0XHRmaWVsZC5lZGl0TW9kZUFzT2JqZWN0IGFzIEJpbmRpbmdUb29sa2l0RXhwcmVzc2lvbjxzdHJpbmc+XG5cdFx0KTtcblx0XHRpZiAoZmllbGQubWFzaz8ubWFza1J1bGUpIHtcblx0XHRcdGZvciAoY29uc3QgcnVsZSBvZiBmaWVsZC5tYXNrLm1hc2tSdWxlKSB7XG5cdFx0XHRcdG9wdGlvbmFsTWFza0lucHV0UnVsZXMucHVzaCg8TWFza0lucHV0UnVsZSBtYXNrRm9ybWF0U3ltYm9sPXtydWxlLnN5bWJvbH0gcmVnZXg9e3J1bGUucmVnZXh9IC8+KTtcblx0XHRcdH1cblx0XHR9XG5cblx0XHRyZXR1cm4gKFxuXHRcdFx0PE1hc2tJbnB1dFxuXHRcdFx0XHRjb3JlOnJlcXVpcmU9XCJ7RmllbGQ6ICdzYXAvZmUvbWFjcm9zL0ZpZWxkJ31cIlxuXHRcdFx0XHRpZD17ZmllbGQuZWRpdFN0eWxlSWR9XG5cdFx0XHRcdHZhbHVlPXtmaWVsZC52YWx1ZUJpbmRpbmdFeHByZXNzaW9ufVxuXHRcdFx0XHRwbGFjZWhvbGRlcj17ZmllbGQuZWRpdFN0eWxlUGxhY2Vob2xkZXJ9XG5cdFx0XHRcdHdpZHRoPVwiMTAwJVwiXG5cdFx0XHRcdGVkaXRhYmxlPXtmaWVsZC5lZGl0YWJsZUV4cHJlc3Npb259XG5cdFx0XHRcdGFyaWFMYWJlbGxlZEJ5PXtmaWVsZC5hcmlhTGFiZWxsZWRCeSBhcyB1bmtub3duIGFzIEFycmF5PENvbnRyb2wgfCBzdHJpbmc+fVxuXHRcdFx0XHRtYXNrPXtmaWVsZC5tYXNrPy5tYXNrfVxuXHRcdFx0XHRlbmFibGVkPXtmaWVsZC5lbmFibGVkRXhwcmVzc2lvbn1cblx0XHRcdFx0cmVxdWlyZWQ9e2ZpZWxkLnJlcXVpcmVkRXhwcmVzc2lvbn1cblx0XHRcdFx0ZmllbGRHcm91cElkcz17ZmllbGQuZmllbGRHcm91cElkc31cblx0XHRcdFx0dGV4dEFsaWduPXt0ZXh0QWxpZ259XG5cdFx0XHRcdHBsYWNlaG9sZGVyU3ltYm9sPXtmaWVsZC5tYXNrPy5wbGFjZWhvbGRlclN5bWJvbH1cblx0XHRcdFx0bGl2ZUNoYW5nZT17ZmllbGQuZXZlbnRIYW5kbGVycy5saXZlQ2hhbmdlIGFzIChvRXZlbnQ6IE1hc2tJbnB1dCRMaXZlQ2hhbmdlRXZlbnQpID0+IHZvaWR9XG5cdFx0XHRcdHZhbGlkYXRlRmllbGRHcm91cD17ZmllbGQuZXZlbnRIYW5kbGVycy52YWxpZGF0ZUZpZWxkR3JvdXAgYXMgKG9FdmVudDogQ29udHJvbCRWYWxpZGF0ZUZpZWxkR3JvdXBFdmVudCkgPT4gdm9pZH1cblx0XHRcdD5cblx0XHRcdFx0e3tcblx0XHRcdFx0XHRydWxlczogb3B0aW9uYWxNYXNrSW5wdXRSdWxlcyxcblx0XHRcdFx0XHRjdXN0b21EYXRhOiA8Q3VzdG9tRGF0YSBrZXk9XCJzb3VyY2VQYXRoXCIgdmFsdWU9e2ZpZWxkLmRhdGFTb3VyY2VQYXRofSAvPlxuXHRcdFx0XHR9fVxuXHRcdFx0PC9NYXNrSW5wdXQ+XG5cdFx0KTtcblx0fSxcblxuXHQvKipcblx0ICogRW50cnkgcG9pbnQgZm9yIGZ1cnRoZXIgdGVtcGxhdGluZyBwcm9jZXNzaW5ncy5cblx0ICogQHBhcmFtIGZpZWxkIFJlZmVyZW5jZSB0byB0aGUgY3VycmVudCBmaWVsZCBpbnN0YW5jZVxuXHQgKiBAcmV0dXJucyBBbiBYTUwtYmFzZWQgc3RyaW5nIHdpdGggdGhlIGRlZmluaXRpb24gb2YgdGhlIGZpZWxkIGNvbnRyb2xcblx0ICovXG5cdGdldFRlbXBsYXRlOiAoZmllbGQ6IEZpZWxkQmxvY2tQcm9wZXJ0aWVzKTogc3RyaW5nIHwgdW5kZWZpbmVkID0+IHtcblx0XHRsZXQgaW5uZXJGaWVsZENvbnRlbnQ7XG5cdFx0c3dpdGNoIChmaWVsZC5lZGl0U3R5bGUpIHtcblx0XHRcdGNhc2UgXCJDaGVja0JveFwiOlxuXHRcdFx0XHRpZiAoZmllbGQuZm9ybWF0T3B0aW9ucy51c2VSYWRpb0J1dHRvbnNGb3JCb29sZWFuKSB7XG5cdFx0XHRcdFx0aW5uZXJGaWVsZENvbnRlbnQgPSBFZGl0U3R5bGUuZ2V0UmFkaW9CdXR0b25UZW1wbGF0ZShmaWVsZCwgdHJ1ZSk7XG5cdFx0XHRcdH0gZWxzZSB7XG5cdFx0XHRcdFx0aW5uZXJGaWVsZENvbnRlbnQgPSBFZGl0U3R5bGUuZ2V0Q2hlY2tCb3hUZW1wbGF0ZShmaWVsZCk7XG5cdFx0XHRcdH1cblx0XHRcdFx0YnJlYWs7XG5cdFx0XHRjYXNlIFwiRGF0ZVBpY2tlclwiOlxuXHRcdFx0Y2FzZSBcIkRhdGVUaW1lUGlja2VyXCI6XG5cdFx0XHRjYXNlIFwiVGltZVBpY2tlclwiOiB7XG5cdFx0XHRcdGlubmVyRmllbGRDb250ZW50ID0gRWRpdFN0eWxlLmdldERhdGVUaW1lUGlja2VyR2VuZXJpYyhmaWVsZCwgZmllbGQuZWRpdFN0eWxlKTtcblx0XHRcdFx0YnJlYWs7XG5cdFx0XHR9XG5cdFx0XHRjYXNlIFwiSW5wdXRcIjoge1xuXHRcdFx0XHRpbm5lckZpZWxkQ29udGVudCA9IEVkaXRTdHlsZS5nZXRJbnB1dFRlbXBsYXRlKGZpZWxkKTtcblx0XHRcdFx0YnJlYWs7XG5cdFx0XHR9XG5cdFx0XHRjYXNlIFwiTWFza2VkXCI6IHtcblx0XHRcdFx0aW5uZXJGaWVsZENvbnRlbnQgPSBFZGl0U3R5bGUuZ2V0SW5wdXRUZW1wbGF0ZShmaWVsZCk7XG5cdFx0XHRcdGJyZWFrO1xuXHRcdFx0fVxuXHRcdFx0Y2FzZSBcIklucHV0V2l0aFZhbHVlSGVscFwiOiB7XG5cdFx0XHRcdGlubmVyRmllbGRDb250ZW50ID0gRWRpdFN0eWxlLmdldElucHV0V2l0aFZhbHVlSGVscFRlbXBsYXRlKGZpZWxkKTtcblx0XHRcdFx0YnJlYWs7XG5cdFx0XHR9XG5cdFx0XHRjYXNlIFwiUmF0aW5nSW5kaWNhdG9yXCI6XG5cdFx0XHRcdGlubmVyRmllbGRDb250ZW50ID0gRWRpdFN0eWxlLmdldFJhdGluZ0luZGljYXRvclRlbXBsYXRlKGZpZWxkKTtcblx0XHRcdFx0YnJlYWs7XG5cdFx0XHRjYXNlIFwiVGV4dEFyZWFcIjpcblx0XHRcdFx0aW5uZXJGaWVsZENvbnRlbnQgPSBFZGl0U3R5bGUuZ2V0VGV4dEFyZWFUZW1wbGF0ZShmaWVsZCk7XG5cdFx0XHRcdGJyZWFrO1xuXHRcdFx0Y2FzZSBcIklucHV0TWFza1wiOlxuXHRcdFx0XHRpbm5lckZpZWxkQ29udGVudCA9IEVkaXRTdHlsZS5nZXRJbnB1dE1hc2tUZW1wbGF0ZShmaWVsZCk7XG5cdFx0XHRcdGJyZWFrO1xuXHRcdFx0ZGVmYXVsdDpcblx0XHR9XG5cblx0XHRyZXR1cm4gaW5uZXJGaWVsZENvbnRlbnQ7XG5cdH1cbn07XG5cbmV4cG9ydCBkZWZhdWx0IEVkaXRTdHlsZTtcbiJdLCJtYXBwaW5ncyI6Ijs7Ozs7Ozs7Ozs7OztFQWdDQSxNQUFNQSxTQUFTLEdBQUc7SUFDakI7QUFDRDtBQUNBO0FBQ0E7QUFDQTtJQUNDQyxhQUFhQSxDQUFDQyxLQUEyQixFQUFVO01BQ2xELElBQUlDLFVBQVUsR0FBRyxFQUFFO01BQ25CLElBQUlELEtBQUssQ0FBQ0Usb0JBQW9CLEVBQUU7UUFDL0JELFVBQVUsR0FBR0UsSUFBQSxDQUFDQyxZQUFZO1VBQUNDLFVBQVUsRUFBQztRQUFHLENBQUUsQ0FBQztNQUM3QztNQUNBLE9BQU9KLFVBQVU7SUFDbEIsQ0FBQztJQUVEO0FBQ0Q7QUFDQTtBQUNBO0FBQ0E7SUFDQ0ssc0JBQXNCQSxDQUFDTixL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
@@ -1,39 +1,34 @@
1
1
  import type { DataFieldTypes } from "@sap-ux/vocabularies-types/vocabularies/UI";
2
2
  import type { BindingToolkitExpression } from "sap/fe/base/BindingToolkit";
3
- import { compileExpression, pathInModel } from "sap/fe/base/BindingToolkit";
4
- import EventDelegateHook from "sap/fe/base/EventDelegateHook";
3
+ import { pathInModel } from "sap/fe/base/BindingToolkit";
5
4
  import * as MetaModelConverter from "sap/fe/core/converters/MetaModelConverter";
6
- import * as CollaborationFormatters from "sap/fe/core/formatters/CollaborationFormatter";
5
+ import { getContextRelativeTargetObjectPath } from "sap/fe/core/templating/DataModelPathHelper";
7
6
  import { hasValueHelpWithFixedValues } from "sap/fe/core/templating/PropertyHelper";
8
7
  import * as UIFormatter from "sap/fe/core/templating/UIFormatters";
9
8
  import CollaborationHBox from "sap/fe/macros/controls/CollaborationHBox";
10
9
  import RadioButtons from "sap/fe/macros/controls/RadioButtons";
11
10
  import { getMultipleLinesForDataField, getTextAlignment } from "sap/fe/macros/field/FieldTemplating";
12
11
  import type { FieldBlockProperties } from "sap/fe/macros/internal/field/FieldStructureHelper";
13
- import Avatar from "sap/m/Avatar";
14
- import type { CheckBox$SelectEvent } from "sap/m/CheckBox";
15
12
  import CheckBox from "sap/m/CheckBox";
16
13
  import DatePicker from "sap/m/DatePicker";
17
14
  import DateTimePicker from "sap/m/DateTimePicker";
18
15
  import FlexItemData from "sap/m/FlexItemData";
19
16
  import Input from "sap/m/Input";
20
- import type { InputBase$ChangeEvent } from "sap/m/InputBase";
21
17
  import type { MaskInput$LiveChangeEvent } from "sap/m/MaskInput";
22
18
  import MaskInput from "sap/m/MaskInput";
23
19
  import MaskInputRule from "sap/m/MaskInputRule";
24
- import type { RatingIndicator$ChangeEvent } from "sap/m/RatingIndicator";
25
20
  import RatingIndicator from "sap/m/RatingIndicator";
26
21
  import TextArea from "sap/m/TextArea";
27
22
  import TimePicker from "sap/m/TimePicker";
28
- import type Event from "sap/ui/base/Event";
29
23
  import type { default as Control, Control$ValidateFieldGroupEvent, default as Control1 } from "sap/ui/core/Control";
30
24
  import CustomData from "sap/ui/core/CustomData";
31
- import type { Field$ChangeEvent } from "sap/ui/mdc/Field";
32
- import Field from "sap/ui/mdc/Field";
33
25
  import FieldEditMode from "sap/ui/mdc/enums/FieldEditMode";
26
+ import Field from "sap/ui/mdc/Field";
34
27
  import type { MetaModelType } from "../../../../../../../../types/metamodel_types";
28
+ import CollaborativeDraftHandler from "../../CollaborativeDraftHandler";
35
29
  import FieldHelper from "../../field/FieldHelper";
36
30
  import TextAreaEx from "../../field/TextAreaEx";
31
+ import { createCustomDatas } from "../../TSXUtils";
37
32
 
38
33
  const EditStyle = {
39
34
  /**
@@ -55,29 +50,12 @@ const EditStyle = {
55
50
  * @returns An XML-based string with the definition of the avatar
56
51
  */
57
52
  getCollaborationAvatar(field: FieldBlockProperties): string {
58
- const collaborationHasActivityExpression = compileExpression(field.collaborationExpression);
59
- const collaborationInitialsExpression = compileExpression(
60
- UIFormatter.getCollaborationExpression(field.dataModelPath, CollaborationFormatters.getCollaborationActivityInitials)
61
- );
62
- const collaborationColorExpression = compileExpression(
63
- UIFormatter.getCollaborationExpression(field.dataModelPath, CollaborationFormatters.getCollaborationActivityColor)
64
- );
65
-
66
53
  return (
67
- <Avatar
68
- core:require="{FieldRuntimeHelper: 'sap/fe/macros/field/FieldRuntimeHelper'}"
69
- visible={collaborationHasActivityExpression}
70
- initials={collaborationInitialsExpression}
71
- displaySize="Custom"
72
- customDisplaySize="1.5rem"
73
- customFontSize="0.8rem"
74
- backgroundColor={collaborationColorExpression}
75
- press={field.eventHandlers.showCollaborationEditUser as unknown as ((oEvent: Event) => void) | undefined}
76
- >
77
- {{
78
- dependents: <EventDelegateHook stopTapPropagation={true} />
79
- }}
80
- </Avatar>
54
+ <CollaborativeDraftHandler
55
+ metaPath={getContextRelativeTargetObjectPath(field.dataModelPath)}
56
+ contextPath={field.contextPath.getPath()}
57
+ showAvatar={true}
58
+ />
81
59
  );
82
60
  },
83
61
 
@@ -109,10 +87,7 @@ const EditStyle = {
109
87
  showTimezone: field.showTimezone,
110
88
  minDate: type === "DateTimePicker" || type === "DatePicker" ? field.minDateExpression : undefined,
111
89
  maxDate: type === "DateTimePicker" || type === "DatePicker" ? field.maxDateExpression : undefined,
112
- change:
113
- type === "DateTimePicker"
114
- ? ((field.change || field.eventHandlers.change) as unknown as (oEvent: InputBase$ChangeEvent) => void)
115
- : (field.eventHandlers.change as unknown as (oEvent: InputBase$ChangeEvent) => void),
90
+ change: type === "DateTimePicker" ? field.change || field.eventHandlers.change : field.eventHandlers.change,
116
91
  liveChange: field.eventHandlers.liveChange,
117
92
  valueFormat: type === "DatePicker" ? "medium" : undefined,
118
93
  validateFieldGroup: field.eventHandlers.validateFieldGroup as (oEvent: Control$ValidateFieldGroupEvent) => void
@@ -170,6 +145,7 @@ const EditStyle = {
170
145
  value={field.valueBindingExpression}
171
146
  placeholder={field.editStylePlaceholder}
172
147
  width="100%"
148
+ fieldWidth={"70%"}
173
149
  editable={field.editableExpression}
174
150
  description={field.staticDescription}
175
151
  enabled={field.enabledExpression}
@@ -179,7 +155,7 @@ const EditStyle = {
179
155
  type={field.editStyle === "Masked" ? "Password" : undefined}
180
156
  ariaLabelledBy={field.ariaLabelledBy as unknown as Array<Control | string>}
181
157
  maxLength={field.formatOptions.textMaxLength}
182
- change={field.eventHandlers.change as (oEvent: InputBase$ChangeEvent) => void}
158
+ change={field.eventHandlers.change}
183
159
  liveChange={field.eventHandlers.liveChange}
184
160
  validateFieldGroup={field.eventHandlers.validateFieldGroup as (oEvent: Control$ValidateFieldGroupEvent) => void}
185
161
  >
@@ -272,6 +248,7 @@ const EditStyle = {
272
248
  fixedValuesPath={fixedValuesPath as unknown as `{${string}}`}
273
249
  fieldGroupIds={field.fieldGroupIds}
274
250
  value={field.valueBindingExpression}
251
+ editableExpression={field.editableExpression}
275
252
  enabledExpression={field.enabledExpression}
276
253
  radioButtonTextProperty={valueListDescriptionPath}
277
254
  radioButtonKeyProperty={valueListKeyPath}
@@ -323,7 +300,7 @@ const EditStyle = {
323
300
  growing={(field.formatOptions.textMaxLines as unknown as number) > 0 ? true : undefined}
324
301
  growingMaxLines={field.formatOptions.textMaxLines}
325
302
  width="100%"
326
- change={field.eventHandlers.change as unknown as (oEvent: InputBase$ChangeEvent) => void}
303
+ change={field.eventHandlers.change}
327
304
  fieldGroupIds={field.fieldGroupIds}
328
305
  />
329
306
  );
@@ -335,6 +312,10 @@ const EditStyle = {
335
312
  }
336
313
 
337
314
  if (this.showAsRadioButton(field) !== true) {
315
+ const customData = createCustomDatas([
316
+ { key: "sourcePath", value: field.dataSourcePath },
317
+ { key: "valueState", value: field.valueState }
318
+ ]);
338
319
  return (
339
320
  <Field
340
321
  core:require="{Field: 'sap/fe/macros/Field'}"
@@ -342,7 +323,6 @@ const EditStyle = {
342
323
  id={field.editStyleId}
343
324
  value={field.valueBindingExpression}
344
325
  placeholder={field.editStylePlaceholder}
345
- valueState={field.valueState}
346
326
  editMode={field.editMode ?? field.computedEditMode}
347
327
  width="100%"
348
328
  required={field.requiredExpression}
@@ -354,14 +334,14 @@ const EditStyle = {
354
334
  textAlign={textAlign}
355
335
  ariaLabelledBy={field.ariaLabelledBy as unknown as Array<Control1 | string>}
356
336
  label={label}
357
- change={field.eventHandlers.change as (oEvent: Field$ChangeEvent) => void}
337
+ change={field.eventHandlers.change}
358
338
  liveChange={field.eventHandlers.liveChange}
359
339
  validateFieldGroup={field.eventHandlers.validateFieldGroup as (oEvent: Control$ValidateFieldGroupEvent) => void}
360
340
  >
361
341
  {{
362
342
  contentEdit: optionalContentEdit,
363
343
  layoutData: optionalLayoutData,
364
- customData: <CustomData key="sourcePath" value={field.dataSourcePath} />
344
+ customData: customData
365
345
  }}
366
346
  </Field>
367
347
  );
@@ -389,7 +369,7 @@ const EditStyle = {
389
369
  text={isCheckBoxGroupItem ? field.label : undefined}
390
370
  wrapping={isCheckBoxGroupItem ? true : undefined}
391
371
  ariaLabelledBy={field.ariaLabelledBy as unknown as Array<Control | string>}
392
- select={field.eventHandlers.change as (oEvent: CheckBox$SelectEvent) => void}
372
+ select={field.eventHandlers.change}
393
373
  validateFieldGroup={field.eventHandlers.validateFieldGroup as (oEvent: Control$ValidateFieldGroupEvent) => void}
394
374
  >
395
375
  {{ customData: <CustomData key="sourcePath" value={field.dataSourcePath} /> }}
@@ -431,7 +411,7 @@ const EditStyle = {
431
411
  ariaLabelledBy={field.ariaLabelledBy as unknown as Array<Control | string>}
432
412
  maxLength={field.formatOptions.textMaxLength}
433
413
  showExceededText={showExceededText}
434
- change={field.eventHandlers.change as (oEvent: InputBase$ChangeEvent) => void}
414
+ change={field.eventHandlers.change}
435
415
  liveChange={field.eventHandlers.liveChange}
436
416
  validateFieldGroup={field.eventHandlers.validateFieldGroup as (oEvent: Control$ValidateFieldGroupEvent) => void}
437
417
  >
@@ -462,7 +442,7 @@ const EditStyle = {
462
442
  iconSize="1.375rem"
463
443
  class="sapUiTinyMarginTopBottom"
464
444
  editable="true"
465
- change={field.eventHandlers.change as (oEvent: RatingIndicator$ChangeEvent) => void}
445
+ change={field.eventHandlers.change}
466
446
  >
467
447
  {{
468
448
  layoutData: EditStyle.getLayoutData(field)