@sapui5/sap.fe.macros 1.141.2 → 1.143.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (257) 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 +47 -36
  8. package/src/sap/fe/macros/CollaborativeDraftHandler.tsx +50 -31
  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/ConditionalSwitch.js +1 -2
  14. package/src/sap/fe/macros/ConditionalSwitch.tsx +0 -1
  15. package/src/sap/fe/macros/ConditionalSwitchProperty.js +1 -3
  16. package/src/sap/fe/macros/ConditionalSwitchProperty.tsx +0 -2
  17. package/src/sap/fe/macros/Field.js +34 -17
  18. package/src/sap/fe/macros/Field.ts +64 -32
  19. package/src/sap/fe/macros/FooterContent.js +7 -3
  20. package/src/sap/fe/macros/FooterContent.tsx +8 -13
  21. package/src/sap/fe/macros/KPITag.js +6 -6
  22. package/src/sap/fe/macros/KPITag.tsx +8 -6
  23. package/src/sap/fe/macros/MacroAPI.js +4 -3
  24. package/src/sap/fe/macros/MacroAPI.ts +3 -3
  25. package/src/sap/fe/macros/MessageButton.js +4 -3
  26. package/src/sap/fe/macros/MessageButton.tsx +7 -3
  27. package/src/sap/fe/macros/MicroChart.js +12 -7
  28. package/src/sap/fe/macros/MicroChart.tsx +9 -3
  29. package/src/sap/fe/macros/MultiValueField.js +22 -36
  30. package/src/sap/fe/macros/MultiValueField.tsx +34 -66
  31. package/src/sap/fe/macros/RichTextEditor.js +3 -4
  32. package/src/sap/fe/macros/RichTextEditor.tsx +2 -3
  33. package/src/sap/fe/macros/Share.js +7 -7
  34. package/src/sap/fe/macros/Share.tsx +9 -6
  35. package/src/sap/fe/macros/Status.js +39 -11
  36. package/src/sap/fe/macros/Status.tsx +25 -5
  37. package/src/sap/fe/macros/ValueHelp.js +5 -2
  38. package/src/sap/fe/macros/ValueHelp.tsx +5 -0
  39. package/src/sap/fe/macros/ai/EasyFillDialog.js +2 -1
  40. package/src/sap/fe/macros/ai/EasyFillDialog.tsx +1 -0
  41. package/src/sap/fe/macros/ai/EasyFilterBar.js +7 -34
  42. package/src/sap/fe/macros/ai/EasyFilterBar.tsx +6 -35
  43. package/src/sap/fe/macros/ai/EasyFilterDataFetcher.js +31 -7
  44. package/src/sap/fe/macros/ai/EasyFilterDataFetcher.ts +33 -6
  45. package/src/sap/fe/macros/ai/SummarizationButton.js +6 -4
  46. package/src/sap/fe/macros/ai/SummarizationButton.tsx +5 -3
  47. package/src/sap/fe/macros/chart/Action.js +25 -2
  48. package/src/sap/fe/macros/chart/Action.ts +13 -0
  49. package/src/sap/fe/macros/chart/ActionGroup.js +25 -2
  50. package/src/sap/fe/macros/chart/ActionGroup.ts +13 -0
  51. package/src/sap/fe/macros/chart/ChartDelegate.js +29 -8
  52. package/src/sap/fe/macros/chart/ChartDelegate.ts +46 -14
  53. package/src/sap/fe/macros/chart/MdcChartTemplate.js +58 -12
  54. package/src/sap/fe/macros/chart/MdcChartTemplate.tsx +75 -13
  55. package/src/sap/fe/macros/chart/OverflowGroup.js +62 -0
  56. package/src/sap/fe/macros/chart/OverflowGroup.ts +22 -0
  57. package/src/sap/fe/macros/controls/BuildingBlockObjectProperty.js +7 -7
  58. package/src/sap/fe/macros/controls/BuildingBlockObjectProperty.ts +3 -2
  59. package/src/sap/fe/macros/controls/FileWrapper.js +11 -5
  60. package/src/sap/fe/macros/controls/FileWrapper.ts +10 -4
  61. package/src/sap/fe/macros/controls/FilterBar.js +39 -3
  62. package/src/sap/fe/macros/controls/FilterBar.ts +42 -1
  63. package/src/sap/fe/macros/controls/NumberWithUnitOrCurrency.js +3 -1
  64. package/src/sap/fe/macros/controls/NumberWithUnitOrCurrency.tsx +2 -0
  65. package/src/sap/fe/macros/controls/RadioButtons.js +18 -5
  66. package/src/sap/fe/macros/controls/RadioButtons.tsx +10 -1
  67. package/src/sap/fe/macros/coreUI/CreateDialog.js +3 -3
  68. package/src/sap/fe/macros/coreUI/CreateDialog.tsx +2 -2
  69. package/src/sap/fe/macros/coreUI/OperationParameterDialog.js +40 -12
  70. package/src/sap/fe/macros/coreUI/OperationParameterDialog.tsx +48 -9
  71. package/src/sap/fe/macros/draftIndicator/DraftIndicator.js +4 -2
  72. package/src/sap/fe/macros/draftIndicator/DraftIndicator.tsx +3 -1
  73. package/src/sap/fe/macros/field/FieldFormatOptions.js +4 -4
  74. package/src/sap/fe/macros/field/FieldFormatOptions.ts +2 -2
  75. package/src/sap/fe/macros/field/FieldHelper.js +4 -3
  76. package/src/sap/fe/macros/field/FieldHelper.ts +7 -1
  77. package/src/sap/fe/macros/field/FieldRuntime.js +44 -9
  78. package/src/sap/fe/macros/field/FieldRuntime.ts +72 -8
  79. package/src/sap/fe/macros/field/FieldRuntimeHelper.js +3 -34
  80. package/src/sap/fe/macros/field/FieldRuntimeHelper.ts +28 -53
  81. package/src/sap/fe/macros/field/FieldTemplating.js +5 -4
  82. package/src/sap/fe/macros/field/FieldTemplating.ts +6 -4
  83. package/src/sap/fe/macros/filter/FilterFieldHelper.js +6 -4
  84. package/src/sap/fe/macros/filter/FilterFieldHelper.ts +7 -2
  85. package/src/sap/fe/macros/filter/FilterUtils.js +130 -40
  86. package/src/sap/fe/macros/filter/FilterUtils.ts +167 -45
  87. package/src/sap/fe/macros/filterBar/ExtendedSemanticDateOperators.js +2 -2
  88. package/src/sap/fe/macros/filterBar/ExtendedSemanticDateOperators.ts +1 -1
  89. package/src/sap/fe/macros/filterBar/FilterBar.block.js +4 -3
  90. package/src/sap/fe/macros/filterBar/FilterBar.block.tsx +19 -8
  91. package/src/sap/fe/macros/filterBar/FilterBarAPI.js +15 -9
  92. package/src/sap/fe/macros/filterBar/FilterBarAPI.ts +36 -17
  93. package/src/sap/fe/macros/filterBar/FilterBarDelegate.js +21 -10
  94. package/src/sap/fe/macros/filterBar/FilterBarDelegate.ts +81 -63
  95. package/src/sap/fe/macros/filterBar/UOMValidationDelegate.js +376 -0
  96. package/src/sap/fe/macros/filterBar/UOMValidationDelegate.ts +463 -0
  97. package/src/sap/fe/macros/filterBar/mixin/FilterBarAPIStateHandler.js +4 -3
  98. package/src/sap/fe/macros/filterBar/mixin/FilterBarAPIStateHandler.ts +3 -2
  99. package/src/sap/fe/macros/form/Form.block.js +27 -2
  100. package/src/sap/fe/macros/form/Form.block.ts +31 -11
  101. package/src/sap/fe/macros/form/FormActionButtons.fragment.xml +13 -3
  102. package/src/sap/fe/macros/form/FormContainer.block.js +110 -63
  103. package/src/sap/fe/macros/form/FormContainer.block.ts +121 -64
  104. package/src/sap/fe/macros/formatters/TableFormatter.js +13 -10
  105. package/src/sap/fe/macros/formatters/TableFormatter.ts +11 -9
  106. package/src/sap/fe/macros/formatters/VisualFilterFormatter.js +6 -4
  107. package/src/sap/fe/macros/formatters/VisualFilterFormatter.ts +5 -5
  108. package/src/sap/fe/macros/inlineEdit/InlineEdit.js +5 -5
  109. package/src/sap/fe/macros/inlineEdit/InlineEdit.ts +4 -4
  110. package/src/sap/fe/macros/insights/InsightsService.js +3 -2
  111. package/src/sap/fe/macros/insights/InsightsService.ts +2 -1
  112. package/src/sap/fe/macros/internal/DataPoint.js +7 -8
  113. package/src/sap/fe/macros/internal/DataPoint.tsx +6 -9
  114. package/src/sap/fe/macros/internal/field/DisplayStyle.js +8 -6
  115. package/src/sap/fe/macros/internal/field/DisplayStyle.tsx +7 -8
  116. package/src/sap/fe/macros/internal/field/EditStyle.js +9 -20
  117. package/src/sap/fe/macros/internal/field/EditStyle.tsx +17 -41
  118. package/src/sap/fe/macros/internal/field/FieldBlockStructure.js +2 -2
  119. package/src/sap/fe/macros/internal/field/FieldBlockStructure.tsx +1 -1
  120. package/src/sap/fe/macros/internal/field/FieldStructure.js +1 -2
  121. package/src/sap/fe/macros/internal/field/FieldStructure.tsx +0 -2
  122. package/src/sap/fe/macros/internal/field/FieldStructureHelper.js +7 -7
  123. package/src/sap/fe/macros/internal/field/FieldStructureHelper.ts +17 -11
  124. package/src/sap/fe/macros/internal/helpers/DataPointTemplating.js +6 -2
  125. package/src/sap/fe/macros/internal/helpers/DataPointTemplating.ts +5 -1
  126. package/src/sap/fe/macros/internal/valuehelp/AdditionalValueFormatter.js +9 -6
  127. package/src/sap/fe/macros/internal/valuehelp/AdditionalValueFormatter.ts +7 -5
  128. package/src/sap/fe/macros/internal/valuehelp/TableDelegate.js +4 -4
  129. package/src/sap/fe/macros/internal/valuehelp/TableDelegate.ts +6 -6
  130. package/src/sap/fe/macros/internal/valuehelp/ValueListDialogTable.fragment.xml +5 -2
  131. package/src/sap/fe/macros/internal/valuehelp/ValueListHelper.js +2 -2
  132. package/src/sap/fe/macros/internal/valuehelp/ValueListHelper.ts +2 -1
  133. package/src/sap/fe/macros/library.js +5 -6
  134. package/src/sap/fe/macros/{library.ts → library.tsx} +3 -1
  135. package/src/sap/fe/macros/mdc/adapter/StateHelper.js +15 -5
  136. package/src/sap/fe/macros/mdc/adapter/StateHelper.ts +21 -5
  137. package/src/sap/fe/macros/messagebundle.properties +13 -5
  138. package/src/sap/fe/macros/messagebundle_ar.properties +12 -3
  139. package/src/sap/fe/macros/messagebundle_bg.properties +13 -4
  140. package/src/sap/fe/macros/messagebundle_ca.properties +12 -3
  141. package/src/sap/fe/macros/messagebundle_cnr.properties +12 -3
  142. package/src/sap/fe/macros/messagebundle_cs.properties +11 -2
  143. package/src/sap/fe/macros/messagebundle_cy.properties +12 -3
  144. package/src/sap/fe/macros/messagebundle_da.properties +12 -3
  145. package/src/sap/fe/macros/messagebundle_de.properties +16 -7
  146. package/src/sap/fe/macros/messagebundle_el.properties +13 -4
  147. package/src/sap/fe/macros/messagebundle_en.properties +13 -4
  148. package/src/sap/fe/macros/messagebundle_en_GB.properties +13 -4
  149. package/src/sap/fe/macros/messagebundle_en_US_saprigi.properties +13 -4
  150. package/src/sap/fe/macros/messagebundle_es.properties +12 -3
  151. package/src/sap/fe/macros/messagebundle_es_MX.properties +12 -3
  152. package/src/sap/fe/macros/messagebundle_et.properties +12 -3
  153. package/src/sap/fe/macros/messagebundle_fi.properties +12 -3
  154. package/src/sap/fe/macros/messagebundle_fr.properties +12 -3
  155. package/src/sap/fe/macros/messagebundle_fr_CA.properties +12 -3
  156. package/src/sap/fe/macros/messagebundle_hi.properties +12 -3
  157. package/src/sap/fe/macros/messagebundle_hr.properties +13 -4
  158. package/src/sap/fe/macros/messagebundle_hu.properties +12 -3
  159. package/src/sap/fe/macros/messagebundle_id.properties +18 -9
  160. package/src/sap/fe/macros/messagebundle_it.properties +12 -3
  161. package/src/sap/fe/macros/messagebundle_iw.properties +12 -3
  162. package/src/sap/fe/macros/messagebundle_ja.properties +12 -3
  163. package/src/sap/fe/macros/messagebundle_kk.properties +11 -2
  164. package/src/sap/fe/macros/messagebundle_ko.properties +13 -4
  165. package/src/sap/fe/macros/messagebundle_lt.properties +12 -3
  166. package/src/sap/fe/macros/messagebundle_lv.properties +12 -3
  167. package/src/sap/fe/macros/messagebundle_mk.properties +12 -3
  168. package/src/sap/fe/macros/messagebundle_ms.properties +12 -3
  169. package/src/sap/fe/macros/messagebundle_nl.properties +12 -3
  170. package/src/sap/fe/macros/messagebundle_no.properties +12 -3
  171. package/src/sap/fe/macros/messagebundle_pl.properties +12 -3
  172. package/src/sap/fe/macros/messagebundle_pt.properties +12 -3
  173. package/src/sap/fe/macros/messagebundle_pt_PT.properties +12 -3
  174. package/src/sap/fe/macros/messagebundle_ro.properties +13 -4
  175. package/src/sap/fe/macros/messagebundle_ru.properties +12 -3
  176. package/src/sap/fe/macros/messagebundle_sh.properties +12 -3
  177. package/src/sap/fe/macros/messagebundle_sk.properties +12 -3
  178. package/src/sap/fe/macros/messagebundle_sl.properties +13 -4
  179. package/src/sap/fe/macros/messagebundle_sr.properties +12 -3
  180. package/src/sap/fe/macros/messagebundle_sv.properties +12 -3
  181. package/src/sap/fe/macros/messagebundle_th.properties +11 -2
  182. package/src/sap/fe/macros/messagebundle_tr.properties +12 -3
  183. package/src/sap/fe/macros/messagebundle_uk.properties +12 -3
  184. package/src/sap/fe/macros/messagebundle_vi.properties +13 -4
  185. package/src/sap/fe/macros/messagebundle_zh_CN.properties +12 -3
  186. package/src/sap/fe/macros/messagebundle_zh_TW.properties +12 -3
  187. package/src/sap/fe/macros/messages/MessageButton.js +21 -12
  188. package/src/sap/fe/macros/messages/MessageButton.ts +21 -11
  189. package/src/sap/fe/macros/multivaluefield/MultiValueFieldDelegate.js +7 -3
  190. package/src/sap/fe/macros/multivaluefield/MultiValueFieldDelegate.ts +8 -2
  191. package/src/sap/fe/macros/quickView/QuickView.js +5 -4
  192. package/src/sap/fe/macros/quickView/QuickView.tsx +10 -3
  193. package/src/sap/fe/macros/richtexteditor/ButtonGroup.js +2 -2
  194. package/src/sap/fe/macros/richtexteditor/ButtonGroup.ts +2 -2
  195. package/src/sap/fe/macros/table/Action.js +21 -5
  196. package/src/sap/fe/macros/table/Action.ts +14 -4
  197. package/src/sap/fe/macros/table/ActionGroup.js +15 -2
  198. package/src/sap/fe/macros/table/ActionGroup.ts +8 -0
  199. package/src/sap/fe/macros/table/ActionGroupOverride.js +14 -2
  200. package/src/sap/fe/macros/table/ActionGroupOverride.ts +7 -0
  201. package/src/sap/fe/macros/table/ActionOverride.js +14 -2
  202. package/src/sap/fe/macros/table/ActionOverride.ts +7 -0
  203. package/src/sap/fe/macros/table/ActionsTemplating.js +16 -2
  204. package/src/sap/fe/macros/table/ActionsTemplating.tsx +15 -0
  205. package/src/sap/fe/macros/table/Column.js +3 -2
  206. package/src/sap/fe/macros/table/Column.ts +1 -1
  207. package/src/sap/fe/macros/table/MdcTableTemplate.js +96 -18
  208. package/src/sap/fe/macros/table/MdcTableTemplate.tsx +136 -17
  209. package/src/sap/fe/macros/table/OverflowGroups.js +59 -0
  210. package/src/sap/fe/macros/table/OverflowGroups.ts +27 -0
  211. package/src/sap/fe/macros/table/Table.block.js +74 -30
  212. package/src/sap/fe/macros/table/Table.block.tsx +77 -14
  213. package/src/sap/fe/macros/table/TableAPI.js +175 -132
  214. package/src/sap/fe/macros/table/TableAPI.ts +67 -30
  215. package/src/sap/fe/macros/table/TableDefinition.js +20 -3
  216. package/src/sap/fe/macros/table/TableDefinition.ts +18 -2
  217. package/src/sap/fe/macros/table/TableEventHandlerProvider.js +6 -3
  218. package/src/sap/fe/macros/table/TableEventHandlerProvider.ts +12 -9
  219. package/src/sap/fe/macros/table/TableHelper.js +5 -2
  220. package/src/sap/fe/macros/table/TableHelper.ts +5 -2
  221. package/src/sap/fe/macros/table/TableRuntime.js +25 -13
  222. package/src/sap/fe/macros/table/TableRuntime.ts +31 -17
  223. package/src/sap/fe/macros/table/TableSizeHelper.js +4 -4
  224. package/src/sap/fe/macros/table/TableSizeHelper.ts +6 -11
  225. package/src/sap/fe/macros/table/Utils.js +9 -3
  226. package/src/sap/fe/macros/table/Utils.ts +14 -8
  227. package/src/sap/fe/macros/table/delegates/TableDelegate.js +72 -29
  228. package/src/sap/fe/macros/table/delegates/TableDelegate.ts +114 -123
  229. package/src/sap/fe/macros/table/massEdit/MassEditDialog.js +41 -15
  230. package/src/sap/fe/macros/table/massEdit/MassEditDialog.tsx +41 -22
  231. package/src/sap/fe/macros/table/massEdit/MassEditDialogHelper.js +15 -6
  232. package/src/sap/fe/macros/table/massEdit/MassEditDialogHelper.tsx +14 -5
  233. package/src/sap/fe/macros/table/massEdit/MassEditField.js +1 -1
  234. package/src/sap/fe/macros/table/massEdit/MassEditField.tsx +3 -6
  235. package/src/sap/fe/macros/table/mixin/ContextMenuHandler.js +2 -3
  236. package/src/sap/fe/macros/table/mixin/ContextMenuHandler.ts +3 -2
  237. package/src/sap/fe/macros/table/mixin/EmptyRowsHandler.js +42 -14
  238. package/src/sap/fe/macros/table/mixin/EmptyRowsHandler.ts +49 -19
  239. package/src/sap/fe/macros/table/mixin/TableAPIStateHandler.js +7 -9
  240. package/src/sap/fe/macros/table/mixin/TableAPIStateHandler.ts +7 -8
  241. package/src/sap/fe/macros/table/mixin/TableExport.js +1 -1
  242. package/src/sap/fe/macros/table/mixin/TableExport.ts +3 -3
  243. package/src/sap/fe/macros/table/mixin/TableHierarchy.js +3 -4
  244. package/src/sap/fe/macros/table/mixin/TableHierarchy.ts +2 -3
  245. package/src/sap/fe/macros/table/uploadTable/UploadTableRuntime.js +5 -4
  246. package/src/sap/fe/macros/table/uploadTable/UploadTableRuntime.ts +6 -3
  247. package/src/sap/fe/macros/valuehelp/ValueHelpDelegate.js +17 -10
  248. package/src/sap/fe/macros/valuehelp/ValueHelpDelegate.ts +24 -9
  249. package/src/sap/fe/macros/visualfilters/InteractiveChartHelper.js +4 -4
  250. package/src/sap/fe/macros/visualfilters/InteractiveChartHelper.ts +3 -3
  251. package/src/sap/fe/macros/visualfilters/VisualFilter.js +20 -2
  252. package/src/sap/fe/macros/visualfilters/VisualFilter.tsx +28 -6
  253. package/src/sap/fe/macros/visualfilters/VisualFilterRuntime.js +6 -3
  254. package/src/sap/fe/macros/visualfilters/VisualFilterRuntime.ts +4 -3
  255. package/src/sap/fe/macros/visualfilters/fragments/InteractiveCharts.js +3 -3
  256. package/src/sap/fe/macros/visualfilters/fragments/InteractiveCharts.tsx +10 -4
  257. package/src/sap/fe/macros/visualfilters/fragments/InteractiveDonutChart.fragment.xml +1 -1
@@ -301,7 +301,6 @@ export default class FormContainerBlock extends BuildingBlockTemplatingBase {
301
301
  : "sap/fe/macros/form/FormElement.designtime";
302
302
 
303
303
  getDataPointTemplate = xml`
304
- <template:then>
305
304
  <template:with path="formElements>0/annotationPath" var="dataPoint">
306
305
  <f:FormElement
307
306
  dt:designtime="${designtime}"
@@ -324,15 +323,12 @@ export default class FormContainerBlock extends BuildingBlockTemplatingBase {
324
323
  </f:fields>
325
324
  </f:FormElement>
326
325
  </template:with>
327
- </template:then>
326
+
328
327
  `;
329
328
  }
330
329
  }
331
330
 
332
331
  const getContactTemplate = xml`
333
- <template:elseif
334
- test="{= \${formElements>0/annotationPath}.indexOf('com.sap.vocabularies.Communication.v1.Contact') > -1 }"
335
- >
336
332
  <template:with path="formElements>0/annotationPath" var="metaPath">
337
333
  <f:FormElement
338
334
  dt:designtime="{= \${metaPath>./@com.sap.vocabularies.UI.v1.AdaptationHidden} ? 'not-adaptable-tree' : 'sap/fe/macros/form/FormElement.designtime' }"
@@ -356,18 +352,22 @@ export default class FormContainerBlock extends BuildingBlockTemplatingBase {
356
352
  />
357
353
  </f:fields>
358
354
  </f:FormElement>
359
- </template:with>
360
- </template:elseif>`;
355
+ </template:with>`;
361
356
 
362
357
  return xml`
363
358
  <template:if test="{= \${formElements>0/annotationPath}.indexOf('com.sap.vocabularies.UI.v1.DataPoint') > -1 }">
364
- ${getDataPointTemplate}
365
- ${getContactTemplate}
359
+ <template:then>
360
+ ${getDataPointTemplate}
361
+ </template:then>
362
+ <template:elseif
363
+ test="{= \${formElements>0/annotationPath}.indexOf('com.sap.vocabularies.Communication.v1.Contact') > -1 }"
364
+ >
365
+ ${getContactTemplate}
366
+ </template:elseif>
366
367
  <template:else>
367
368
  ${this.getDataFieldsForAnnotations()}
368
369
  </template:else>
369
- </template:if>
370
- `;
370
+ </template:if>`;
371
371
  }
372
372
 
373
373
  /**
@@ -378,19 +378,58 @@ export default class FormContainerBlock extends BuildingBlockTemplatingBase {
378
378
  getConnectedFieldsFormElement(formElement: AnnotationFormElement): string {
379
379
  let connectedFieldElements = "";
380
380
 
381
- for (const connectedField of formElement.connectedFields!) {
381
+ // Create a sorted copy of the connected fields based on the placeholder order in the template string.
382
+ // The template string is expected to look like "{FieldA} / {FieldB}" etc. We extract the placeholder
383
+ // sequence and sort the connected fields accordingly (falling back to original order for unmatched fields).
384
+ let sortedConnectedFields = formElement.connectedFields ? [...formElement.connectedFields] : [];
385
+ if (sortedConnectedFields.length > 1) {
386
+ const templateString = sortedConnectedFields[0].originalTemplate || "";
387
+ // Extract placeholders in the sequence defined by the template (e.g. "{FieldA} / {FieldB}")
388
+ const placeholders = Array.from(templateString.matchAll(/\{([^}]+)\}/g))
389
+ .map((m) => String(m[1]).trim())
390
+ .filter((p) => p.length > 0);
391
+
392
+ // Helper to derive the identifier from the connected field (last segment of fullyQualifiedName)
393
+ const getFieldIdentifier = (cf: (typeof sortedConnectedFields)[number]): string => {
394
+ const originalObject = cf.originalObject;
395
+ return originalObject?.fullyQualifiedName
396
+ ? originalObject.fullyQualifiedName.substring(originalObject.fullyQualifiedName.lastIndexOf("/") + 1)
397
+ : "";
398
+ };
399
+
400
+ const fieldIds = sortedConnectedFields.map(getFieldIdentifier);
401
+ const uniquePlaceholders = new Set(placeholders);
402
+
403
+ // We only reorder if the template is perfectly annotated:
404
+ // 1. Same number of placeholders as connected fields
405
+ // 2. All placeholders are unique
406
+ // 3. Every connected field id is referenced exactly once
407
+ const isPerfectMatch =
408
+ placeholders.length === sortedConnectedFields.length &&
409
+ uniquePlaceholders.size === placeholders.length &&
410
+ fieldIds.every((id) => uniquePlaceholders.has(id));
411
+
412
+ // Review feedback: Do NOT "fix" badly annotated connected fields.
413
+ // If the annotation is not perfect, we keep the original order.
414
+ if (isPerfectMatch) {
415
+ const mapById = new Map(sortedConnectedFields.map((cf) => [getFieldIdentifier(cf), cf]));
416
+ sortedConnectedFields = placeholders.map((ph) => mapById.get(ph)!);
417
+ }
418
+ }
419
+
420
+ for (const connectedField of sortedConnectedFields) {
382
421
  const model = this.contextPath.getModel();
383
422
  const tempName = connectedField.originalObject?.fullyQualifiedName;
384
423
  const path = tempName?.substring(tempName.lastIndexOf("/") + 1);
385
424
  const bindingContext = model.createBindingContext(formElement.annotationPath + "Target/$AnnotationPath/Data/" + path);
386
425
  const delimiter = CommonHelper.getDelimiter(connectedField.originalTemplate ?? "");
387
426
  const notLastIndexCondition =
388
- formElement.connectedFields!.indexOf(connectedField) !== formElement.connectedFields!.length - 1
427
+ sortedConnectedFields.indexOf(connectedField) !== sortedConnectedFields.length - 1
389
428
  ? xml`<Text
390
- text="${delimiter}"
391
- class="sapUiSmallMarginBeginEnd"
392
- width="100%"
393
- />`
429
+ text="${delimiter}"
430
+ class="sapUiSmallMarginBeginEnd"
431
+ width="100%"
432
+ />`
394
433
  : "";
395
434
 
396
435
  const computedIdPrefix = this.id
@@ -403,34 +442,51 @@ export default class FormContainerBlock extends BuildingBlockTemplatingBase {
403
442
  : "";
404
443
  const computedVhIdPrefix = this.id ? StableIDHelper.generate([this.id, formElement.key, "FieldValueHelp"]) : "";
405
444
 
406
- let connectedFieldElement = "";
445
+ // if there is a label on the connected field, we create an invisible text for aria-labelledby for proper screen reading
446
+ const connectedFieldPath = (connectedField.originalObject as DataField)?.Value?.path?.valueOf();
447
+ const connectedFieldLabel = (connectedField.originalObject as DataField)?.Value?.$target?.annotations?.Common?.Label?.valueOf();
448
+ let ariaLabelId = "";
449
+ let ariaLabelText = "";
450
+ if (this.id && connectedFieldPath && connectedFieldLabel) {
451
+ ariaLabelId = StableIDHelper.generate([this.id, "AriaText", formElement.key, connectedFieldPath]);
452
+ ariaLabelText = xml`
453
+ <core:InvisibleText
454
+ text="${connectedFieldLabel}"
455
+ id="${ariaLabelId}"
456
+ />
457
+ `;
458
+ }
407
459
 
460
+ let connectedFieldElement = "";
408
461
  connectedFieldElement = xml`
462
+ ${ariaLabelText}
409
463
  <macro:Field
410
- idPrefix="${computedIdPrefix}"
411
- vhIdPrefix="${computedVhIdPrefix}"
412
- contextPath="${this.entitySet?.getPath()}"
413
- metaPath="${bindingContext.getPath()}"
414
- onChange="${this.onChange}"
415
- ariaLabelledBy="${this.id ? StableIDHelper.generate([this.id, "SemanticFormElementLabel", formElement.key]) : ""}"
416
- >
417
- <formatOptions
418
- textLinesEdit="${formElement.formatOptions?.textLinesEdit}"
419
- textMaxLines="${formElement.formatOptions?.textMaxLines}"
420
- textMaxCharactersDisplay="${formElement.formatOptions?.textMaxCharactersDisplay}"
421
- textMaxLength="${formElement.formatOptions?.textMaxLength}"
422
- textExpandBehaviorDisplay="${formElement.formatOptions?.textExpandBehaviorDisplay}"
423
- textAlignMode="Form"
424
- showEmptyIndicator="true"
425
- fieldEditStyle="${formElement.formatOptions?.fieldEditStyle}"
426
- radioButtonsHorizontalLayout="${formElement.formatOptions?.radioButtonsHorizontalLayout}"
427
- />
428
- <macro:layoutData>
429
- <FlexItemData growFactor="{= %{ui>/isEditable} ? 1 : 0}" />
430
- </macro:layoutData>
431
- </macro:Field>
432
- ${notLastIndexCondition}
433
- `;
464
+ idPrefix="${computedIdPrefix}"
465
+ vhIdPrefix="${computedVhIdPrefix}"
466
+ contextPath="${this.entitySet?.getPath()}"
467
+ metaPath="${bindingContext.getPath()}"
468
+ onChange="${this.onChange}"
469
+ ariaLabelledBy="${
470
+ this.id ? [StableIDHelper.generate([this.id, "SemanticFormElementLabel", formElement.key]), ariaLabelId] : ""
471
+ }"
472
+ >
473
+ <formatOptions
474
+ textLinesEdit="${formElement.formatOptions?.textLinesEdit}"
475
+ textMaxLines="${formElement.formatOptions?.textMaxLines}"
476
+ textMaxCharactersDisplay="${formElement.formatOptions?.textMaxCharactersDisplay}"
477
+ textMaxLength="${formElement.formatOptions?.textMaxLength}"
478
+ textExpandBehaviorDisplay="${formElement.formatOptions?.textExpandBehaviorDisplay}"
479
+ textAlignMode="Form"
480
+ showEmptyIndicator="true"
481
+ fieldEditStyle="${formElement.formatOptions?.fieldEditStyle}"
482
+ radioButtonsHorizontalLayout="${formElement.formatOptions?.radioButtonsHorizontalLayout}"
483
+ />
484
+ <macro:layoutData>
485
+ <FlexItemData growFactor="{= %{ui>/isEditable} ? 1 : 0}" />
486
+ </macro:layoutData>
487
+ </macro:Field>
488
+ ${notLastIndexCondition}
489
+ `;
434
490
 
435
491
  connectedFieldElements += connectedFieldElement;
436
492
  }
@@ -463,29 +519,29 @@ export default class FormContainerBlock extends BuildingBlockTemplatingBase {
463
519
  )?.toString();
464
520
 
465
521
  return xml`
466
- <f:FormElement
467
- xmlns:f="sap.ui.layout.form"
468
- dt:designtime="${designtime}"
469
- id="${formElementId}"
470
- visible="${visibleExpression}"
471
- ${this.attr("binding", bindingString)}
472
- >
473
- <f:label>
474
- <Label
475
- text="${targetObject?.Label ?? formElement.label}"
476
- id="${this.id ? StableIDHelper.generate([this.id, "SemanticFormElementLabel", formElement.key]) : ""}"
477
-
478
- />
479
- </f:label>
522
+ <f:FormElement
523
+ xmlns:f="sap.ui.layout.form"
524
+ dt:designtime="${designtime}"
525
+ id="${formElementId}"
526
+ visible="${visibleExpression}"
527
+ ${this.attr("binding", bindingString)}
528
+ >
529
+ <f:label>
530
+ <Label
531
+ text="${targetObject?.Label ?? formElement.label}"
532
+ id="${this.id ? StableIDHelper.generate([this.id, "SemanticFormElementLabel", formElement.key]) : ""}"
533
+
534
+ />
535
+ </f:label>
480
536
  <f:fields>
481
- <controls:FieldWrapper required="${isRequired}">
482
- <HBox wrap="Wrap">
537
+ <controls:FieldWrapper required="${isRequired}">
538
+ <HBox wrap="Wrap">
483
539
  ${connectedFieldElements}
484
- </HBox>
485
- </controls:FieldWrapper>
486
- </f:fields>
487
- </f:FormElement>
488
- `;
540
+ </HBox>
541
+ </controls:FieldWrapper>
542
+ </f:fields>
543
+ </f:FormElement>
544
+ `;
489
545
  }
490
546
 
491
547
  /**
@@ -725,12 +781,13 @@ export default class FormContainerBlock extends BuildingBlockTemplatingBase {
725
781
  ? "not-adaptable-tree"
726
782
  : "sap/fe/macros/form/FormElement.designtime";
727
783
  const formElementKey = StableIDHelper.generate([this.id, formElement.key]);
784
+
728
785
  return xml`
729
786
  <f:FormElement
730
787
  dt:designtime="${designtime}"
731
788
  id="${formElementId}"
732
789
  label="${formElement.label}"
733
- visible="${formElement.visible}"
790
+ ${this.attr("visible", formElement.visible)}
734
791
  ${this.attr("binding", bindingString)}
735
792
  >
736
793
  <f:fields>
@@ -2,7 +2,7 @@
2
2
  * SAP UI development toolkit for HTML5 (SAPUI5)
3
3
  * (c) Copyright 2009-2025 SAP SE. All rights reserved
4
4
  */
5
- sap.ui.define(["sap/base/Log", "sap/base/util/ObjectPath", "sap/fe/core/CommonUtils", "sap/fe/core/helpers/SizeHelper", "sap/fe/macros/DelegateUtil", "sap/fe/macros/table/TableSizeHelper", "sap/ui/core/message/MessageType", "sap/ui/mdc/enums/FieldEditMode"], function (Log, ObjectPath, CommonUtils, SizeHelper, DelegateUtil, TableSizeHelper, MessageType, FieldEditMode) {
5
+ sap.ui.define(["sap/base/Log", "sap/fe/core/CommonUtils", "sap/fe/core/formatters/Scope", "sap/fe/core/helpers/SizeHelper", "sap/fe/macros/DelegateUtil", "sap/fe/macros/table/TableSizeHelper", "sap/ui/core/message/MessageType", "sap/ui/mdc/enums/FieldEditMode"], function (Log, CommonUtils, Scope, SizeHelper, DelegateUtil, TableSizeHelper, MessageType, FieldEditMode) {
6
6
  "use strict";
7
7
 
8
8
  const getMessagetypeOrder = function (messageType) {
@@ -34,7 +34,7 @@ sap.ui.define(["sap/base/Log", "sap/base/util/ObjectPath", "sap/fe/core/CommonUt
34
34
  return fieldValidityObject[key]["validity"];
35
35
  });
36
36
  };
37
- validateCreationRowFields.__functionName = "sap.fe.macros.formatters.TableFormatter#validateCreationRowFields";
37
+ validateCreationRowFields.__functionName = "._formatters.TableFormatter#validateCreationRowFields";
38
38
 
39
39
  /**
40
40
  * @param this The object status control.
@@ -57,7 +57,7 @@ sap.ui.define(["sap/base/Log", "sap/base/util/ObjectPath", "sap/fe/core/CommonUt
57
57
  }
58
58
  return statusVisibility;
59
59
  };
60
- getErrorStatusTextVisibilityFormatter.__functionName = "sap.fe.macros.formatters.TableFormatter#getErrorStatusTextVisibilityFormatter";
60
+ getErrorStatusTextVisibilityFormatter.__functionName = "._formatters.TableFormatter.bind($control)#getErrorStatusTextVisibilityFormatter";
61
61
 
62
62
  /**
63
63
  * Method to calculate the row highlighting based on the criticality value and the messages.
@@ -119,7 +119,7 @@ sap.ui.define(["sap/base/Log", "sap/base/util/ObjectPath", "sap/fe/core/CommonUt
119
119
  const isNewObject = !hasActiveEntity && !isActiveEntity && !isInactive;
120
120
  return isDraftMode === "true" && isNewObject ? MessageType.Information : MessageType.None;
121
121
  };
122
- rowHighlighting.__functionName = "sap.fe.macros.formatters.TableFormatter#rowHighlighting";
122
+ rowHighlighting.__functionName = "._formatters.TableFormatter.bind($control)#rowHighlighting";
123
123
  const navigatedRow = function (deepestPath) {
124
124
  const sPath = this.getBindingContext()?.getPath();
125
125
  if (sPath && deepestPath) {
@@ -128,7 +128,7 @@ sap.ui.define(["sap/base/Log", "sap/base/util/ObjectPath", "sap/fe/core/CommonUt
128
128
  return false;
129
129
  }
130
130
  };
131
- navigatedRow.__functionName = "sap.fe.macros.formatters.TableFormatter#navigatedRow";
131
+ navigatedRow.__functionName = "._formatters.TableFormatter.bind($control)#navigatedRow";
132
132
 
133
133
  /**
134
134
  * Method to calculate the width of an MDCColumn based on the property definition.
@@ -182,7 +182,7 @@ sap.ui.define(["sap/base/Log", "sap/base/util/ObjectPath", "sap/fe/core/CommonUt
182
182
  }
183
183
  return columnWidth;
184
184
  };
185
- getColumnWidth.__functionName = "sap.fe.macros.formatters.TableFormatter#getColumnWidth";
185
+ getColumnWidth.__functionName = "._formatters.TableFormatter.bind($control)#getColumnWidth";
186
186
 
187
187
  /**
188
188
  * Method to calculate the width of an MDCColumn for valueHelp the table.
@@ -199,7 +199,7 @@ sap.ui.define(["sap/base/Log", "sap/base/util/ObjectPath", "sap/fe/core/CommonUt
199
199
  const withUnit = !isSmallDevice;
200
200
  return isSmallDevice && isTargetSmallDevice || !isSmallDevice && !isTargetSmallDevice ? tableFormatter.getColumnWidth.call(this, FieldEditMode.Display, isPropertiesCacheAvailable, propertyName, withUnit, widthIncludingColumnHeader) : null;
201
201
  };
202
- getColumnWidthForValueHelpTable.__functionName = "sap.fe.macros.formatters.TableFormatter#getColumnWidthForValueHelpTable";
202
+ getColumnWidthForValueHelpTable.__functionName = "._formatters.TableFormatter.bind($control)#getColumnWidthForValueHelpTable";
203
203
  function isRatingIndicator(oControl) {
204
204
  if (oControl.isA("sap.fe.macros.controls.FieldWrapper")) {
205
205
  const vContentDisplay = Array.isArray(oControl.getContentDisplay()) ? oControl.getContentDisplay()[0] : oControl.getContentDisplay();
@@ -246,7 +246,7 @@ sap.ui.define(["sap/base/Log", "sap/base/util/ObjectPath", "sap/fe/core/CommonUt
246
246
  }
247
247
  return true;
248
248
  }
249
- getVBoxVisibility.__functionName = "sap.fe.macros.formatters.TableFormatter#getVBoxVisibility";
249
+ getVBoxVisibility.__functionName = "._formatters.TableFormatter.bind($control)#getVBoxVisibility";
250
250
 
251
251
  // See https://www.typescriptlang.org/docs/handbook/functions.html#this-parameters for more detail on this weird syntax
252
252
  /**
@@ -274,7 +274,10 @@ sap.ui.define(["sap/base/Log", "sap/base/util/ObjectPath", "sap/fe/core/CommonUt
274
274
  tableFormatter.isRatingIndicator = isRatingIndicator; // for unit tests
275
275
  tableFormatter.getColumnWidth = getColumnWidth;
276
276
  tableFormatter.getColumnWidthForValueHelpTable = getColumnWidthForValueHelpTable;
277
- ObjectPath.set("sap.fe.macros.formatters.TableFormatter", tableFormatter);
277
+
278
+ // eslint-disable-next-line @typescript-eslint/ban-ts-comment
279
+ // @ts-ignore
280
+ Scope._formatters.TableFormatter = tableFormatter;
278
281
  return tableFormatter;
279
282
  }, false);
280
- //# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJuYW1lcyI6WyJnZXRNZXNzYWdldHlwZU9yZGVyIiwibWVzc2FnZVR5cGUiLCJ2YWxpZGF0ZUNyZWF0aW9uUm93RmllbGRzIiwiZmllbGRWYWxpZGl0eU9iamVjdCIsImZpZWxkS2V5cyIsIk9iamVjdCIsImtleXMiLCJsZW5ndGgiLCJldmVyeSIsImtleSIsIl9fZnVuY3Rpb25OYW1lIiwiZ2V0RXJyb3JTdGF0dXNUZXh0VmlzaWJpbGl0eUZvcm1hdHRlciIsInNlbWFudGljS2V5SGFzRHJhZnRJbmRpY2F0b3IiLCJhRmlsdGVyZWRNZXNzYWdlcyIsImNvbHVtbk5hbWUiLCJpc1NlbWFudGljS2V5SW5GaWVsZEdyb3VwIiwic3RhdHVzVmlzaWJpbGl0eSIsInNDdXJyZW50Q29udGV4dFBhdGgiLCJnZXRCaW5kaW5nQ29udGV4dCIsImdldFBhdGgiLCJ1bmRlZmluZWQiLCJmb3JFYWNoIiwib01lc3NhZ2UiLCJnZXRUeXBlIiwiZ2V0VGFyZ2V0cyIsImluZGV4T2YiLCJyb3dIaWdobGlnaHRpbmciLCJjcml0aWNhbGl0eVZhbHVlIiwiaGFzQWN0aXZlRW50aXR5IiwiaXNBY3RpdmVFbnRpdHkiLCJpc0RyYWZ0TW9kZSIsImNvbnRleHRQYXRoIiwiaXNJbmFjdGl2ZSIsImlIaWdoZXN0Q3JpdGljYWxpdHlWYWx1ZSIsIm1lc3NhZ2UiLCJNZXNzYWdlVHlwZSIsIkVycm9yIiwiV2FybmluZyIsIlN1Y2Nlc3MiLCJJbmZvcm1hdGlvbiIsIk5vbmUiLCJ2YWx1ZXMiLCJpbmNsdWRlcyIsIkxvZyIsImVycm9yIiwiaXNOZXdPYmplY3QiLCJuYXZpZ2F0ZWRSb3ciLCJkZWVwZXN0UGF0aCIsInNQYXRoIiwiZ2V0Q29sdW1uV2lkdGgiLCJlZGl0TW9kZSIsImlzUHJvcGVydGllc0NhY2hlQXZhaWxhYmxlIiwicHJvcGVydHlOYW1lIiwidXNlUmVtVW5pdCIsImFyZ3VtZW50cyIsIndpZHRoSW5jbHVkaW5nQ29sdW1uSGVhZGVyIiwiaXNTb3J0YWJsZUNvbHVtbiIsImlzQ29sdW1uUmVxdWlyZWQiLCJtZGNUYWJsZSIsImdldFBhcmVudCIsInByb3BlcnRpZXMiLCJpc0EiLCJEZWxlZ2F0ZVV0aWwiLCJnZXRDYWNoZWRQcm9wZXJ0aWVzIiwiZ2V0RW5oYW5jZWRGZXRjaGVkUHJvcGVydHlJbmZvcyIsInByb3BlcnR5IiwiZmluZCIsInByb3AiLCJjb2x1bW5XaWR0aCIsIlRhYmxlU2l6ZUhlbHBlciIsImdldE1EQ0NvbHVtbldpZHRoRnJvbVByb3BlcnR5IiwidW5pdE9yVGltZXpvbmUiLCJleHBvcnRTZXR0aW5ncyIsInVuaXQiLCJ0aW1lem9uZSIsIlNpemVIZWxwZXIiLCJnZXRCdXR0b25XaWR0aCIsIkZpZWxkRWRpdE1vZGUiLCJFZGl0YWJsZSIsInVuaXRPckN1cnJlbmN5UHJvcGVydHkiLCJ1bml0UHJvcGVydHkiLCJ0eXBlQ29uZmlnIiwiYmFzZVR5cGUiLCJnZXRDb2x1bW5XaWR0aEZvclZhbHVlSGVscFRhYmxlIiwiaXNUYXJnZXRTbWFsbERldmljZSIsImlzU21hbGxEZXZpY2UiLCJDb21tb25VdGlscyIsIndpdGhVbml0IiwidGFibGVGb3JtYXR0ZXIiLCJjYWxsIiwiRGlzcGxheSIsImlzUmF0aW5nSW5kaWNhdG9yIiwib0NvbnRyb2wiLCJ2Q29udGVudERpc3BsYXkiLCJBcnJheSIsImlzQXJyYXkiLCJnZXRDb250ZW50RGlzcGxheSIsIl91cGRhdGVTdHlsZUNsYXNzRm9yUmF0aW5nSW5kaWNhdG9yIiwiZmllbGRXcmFwcGVyIiwibGFzdCIsInZDb250ZW50RWRpdCIsImdldENvbnRlbnRFZGl0IiwiYWRkU3R5bGVDbGFzcyIsInJlbW92ZVN0eWxlQ2xhc3MiLCJnZXRWQm94VmlzaWJpbGl0eSIsImFJdGVtcyIsImdldEl0ZW1zIiwiYkxhc3RFbGVtZW50Rm91bmQiLCJfbGVuIiwiYXJncyIsIl9rZXkiLCJpbmRleCIsInNOYW1lIiwiaGFzT3duUHJvcGVydHkiLCJfbGVuMiIsIm9BcmdzIiwiX2tleTIiLCJhcHBseSIsIk9iamVjdFBhdGgiLCJzZXQiXSwic291cmNlUm9vdCI6Ii4iLCJzb3VyY2VzIjpbIlRhYmxlRm9ybWF0dGVyLnRzIl0sInNvdXJjZXNDb250ZW50IjpbImltcG9ydCBMb2cgZnJvbSBcInNhcC9iYXNlL0xvZ1wiO1xuaW1wb3J0IE9iamVjdFBhdGggZnJvbSBcInNhcC9iYXNlL3V0aWwvT2JqZWN0UGF0aFwiO1xuaW1wb3J0IENvbW1vblV0aWxzIGZyb20gXCJzYXAvZmUvY29yZS9Db21tb25VdGlsc1wiO1xuaW1wb3J0IFNpemVIZWxwZXIgZnJvbSBcInNhcC9mZS9jb3JlL2hlbHBlcnMvU2l6ZUhlbHBlclwiO1xuaW1wb3J0IERlbGVnYXRlVXRpbCBmcm9tIFwic2FwL2ZlL21hY3Jvcy9EZWxlZ2F0ZVV0aWxcIjtcbmltcG9ydCB0eXBlIFRhYmxlQVBJIGZyb20gXCJzYXAvZmUvbWFjcm9zL3RhYmxlL1RhYmxlQVBJXCI7XG5pbXBvcnQgdHlwZSB7IEVuaGFuY2VkRkVQcm9wZXJ0eUluZm8gfSBmcm9tIFwic2FwL2ZlL21hY3Jvcy90YWJsZS9UYWJsZUFQSVwiO1xuaW1wb3J0IFRhYmxlU2l6ZUhlbHBlciBmcm9tIFwic2FwL2ZlL21hY3Jvcy90YWJsZS9UYWJsZVNpemVIZWxwZXJcIjtcbmltcG9ydCB0eXBlIFRhYmxlIGZyb20gXCJzYXAvbS9UYWJsZVwiO1xuaW1wb3J0IHR5cGUgTWFuYWdlZE9iamVjdCBmcm9tIFwic2FwL3VpL2Jhc2UvTWFuYWdlZE9iamVjdFwiO1xuaW1wb3J0IHR5cGUgTWVzc2FnZSBmcm9tIFwic2FwL3VpL2NvcmUvbWVzc2FnZS9NZXNzYWdlXCI7XG5pbXBvcnQgTWVzc2FnZVR5cGUgZnJvbSBcInNhcC91aS9jb3JlL21lc3NhZ2UvTWVzc2FnZVR5cGVcIjtcbmltcG9ydCBGaWVsZEVkaXRNb2RlIGZyb20gXCJzYXAvdWkvbWRjL2VudW1zL0ZpZWxkRWRpdE1vZGVcIjtcbmltcG9ydCB0eXBlIENvbHVtbiBmcm9tIFwic2FwL3VpL21kYy90YWJsZS9Db2x1bW5cIjtcbmltcG9ydCB0eXBlIE1EQ1RhYmxlIGZyb20gXCJzYXAvdWkvbWRjL3ZhbHVlaGVscC9jb250ZW50L01EQ1RhYmxlXCI7XG5pbXBvcnQgdHlwZSBGaWVsZFdyYXBwZXIgZnJvbSBcIi4uL2NvbnRyb2xzL0ZpZWxkV3JhcHBlclwiO1xuXG5jb25zdCBnZXRNZXNzYWdldHlwZU9yZGVyID0gZnVuY3Rpb24gKG1lc3NhZ2VUeXBlOiBzdHJpbmcpOiBudW1iZXIge1xuXHRzd2l0Y2ggKG1lc3NhZ2VUeXBlKSB7XG5cdFx0Y2FzZSBcIkVycm9yXCI6XG5cdFx0XHRyZXR1cm4gNDtcblx0XHRjYXNlIFwiV2FybmluZ1wiOlxuXHRcdFx0cmV0dXJuIDM7XG5cdFx0Y2FzZSBcIkluZm9ybWF0aW9uXCI6XG5cdFx0XHRyZXR1cm4gMjtcblx0XHRjYXNlIFwiTm9uZVwiOlxuXHRcdFx0cmV0dXJuIDE7XG5cdFx0ZGVmYXVsdDpcblx0XHRcdHJldHVybiAtMTtcblx0fVxufTtcblxuLyoqXG4gKiBHZXRzIHRoZSB2YWxpZGl0eSBvZiBjcmVhdGlvbiByb3cgZmllbGRzLlxuICogQHBhcmFtIGZpZWxkVmFsaWRpdHlPYmplY3QgT2JqZWN0IGhvbGRpbmcgdGhlIGZpZWxkc1xuICogQHJldHVybnMgYHRydWVgIGlmIGFsbCB0aGUgZmllbGRzIGluIHRoZSBjcmVhdGlvbiByb3cgYXJlIHZhbGlkLCBgZmFsc2VgIG90aGVyd2lzZVxuICovXG5jb25zdCB2YWxpZGF0ZUNyZWF0aW9uUm93RmllbGRzID0gZnVuY3Rpb24gKGZpZWxkVmFsaWRpdHlPYmplY3Q/OiBSZWNvcmQ8c3RyaW5nLCB7IHZhbGlkaXR5OiBib29sZWFuIH0+KTogYm9vbGVhbiB7XG5cdGlmICghZmllbGRWYWxpZGl0eU9iamVjdCkge1xuXHRcdHJldHVybiBmYWxzZTtcblx0fVxuXHRjb25zdCBmaWVsZEtleXMgPSBPYmplY3Qua2V5cyhmaWVsZFZhbGlkaXR5T2JqZWN0KTtcblx0cmV0dXJuIChcblx0XHRmaWVsZEtleXMubGVuZ3RoID4gMCAmJlxuXHRcdGZpZWxkS2V5cy5ldmVyeShmdW5jdGlvbiAoa2V5KSB7XG5cdFx0XHRyZXR1cm4gZmllbGRWYWxpZGl0eU9iamVjdFtrZXldW1widmFsaWRpdHlcIl07XG5cdFx0fSlcblx0KTtcbn07XG52YWxpZGF0ZUNyZWF0aW9uUm93RmllbGRzLl9fZnVuY3Rpb25OYW1lID0gXCJzYXAuZmUubWFjcm9zLmZvcm1hdHRlcnMuVGFibGVGb3JtYXR0ZXIjdmFsaWRhdGVDcmVhdGlvblJvd0ZpZWxkc1wiO1xuXG4vKipcbiAqIEBwYXJhbSB0aGlzIFRoZSBvYmplY3Qgc3RhdHVzIGNvbnRyb2wuXG4gKiBAcGFyYW0gc2VtYW50aWNLZXlIYXNEcmFmdEluZGljYXRvciBUaGUgcHJvcGVydHkgbmFtZSBvZiB0aGUgZHJhZnQgaW5kaWNhdG9yLlxuICogQHBhcmFtIGFGaWx0ZXJlZE1lc3NhZ2VzIEFycmF5IG9mIG1lc3NhZ2VzLlxuICogQHBhcmFtIGNvbHVtbk5hbWVcbiAqIEBwYXJhbSBpc1NlbWFudGljS2V5SW5GaWVsZEdyb3VwIEZsYWcgd2hpY2ggc2F5cyBpZiBzZW1hbnRpYyBrZXkgaXMgYSBwYXJ0IG9mIGZpZWxkIGdyb3VwLlxuICogQHJldHVybnMgVGhlIHZhbHVlIGZvciB0aGUgdmlzaWJpbGl0eSBwcm9wZXJ0eSBvZiB0aGUgb2JqZWN0IHN0YXR1c1xuICovXG5jb25zdCBnZXRFcnJvclN0YXR1c1RleHRWaXNpYmlsaXR5Rm9ybWF0dGVyID0gZnVuY3Rpb24gKFxuXHR0aGlzOiBNYW5hZ2VkT2JqZWN0LFxuXHRzZW1hbnRpY0tleUhhc0RyYWZ0SW5kaWNhdG9yOiBzdHJpbmcsXG5cdGFGaWx0ZXJlZE1lc3NhZ2VzOiBNZXNzYWdlW10sXG5cdGNvbHVtbk5hbWU6IHN0cmluZyxcblx0aXNTZW1hbnRpY0tleUluRmllbGRHcm91cD86IGJvb2xlYW5cbik6IGJvb2xlYW4ge1xuXHRsZXQgc3RhdHVzVmlzaWJpbGl0eSA9IGZhbHNlO1xuXHRpZiAoYUZpbHRlcmVkTWVzc2FnZXMgJiYgYUZpbHRlcmVkTWVzc2FnZXMubGVuZ3RoID4gMCAmJiAoaXNTZW1hbnRpY0tleUluRmllbGRHcm91cCB8fCBjb2x1bW5OYW1lID09PSBzZW1hbnRpY0tleUhhc0RyYWZ0SW5kaWNhdG9yKSkge1xuXHRcdGNvbnN0IHNDdXJyZW50Q29udGV4dFBhdGggPSB0aGlzLmdldEJpbmRpbmdDb250ZXh0KCkgPyB0aGlzLmdldEJpbmRpbmdDb250ZXh0KCk/LmdldFBhdGgoKSA6IHVuZGVmaW5lZDtcblx0XHRhRmlsdGVyZWRNZXNzYWdlcy5mb3JFYWNoKChvTWVzc2FnZSkgPT4ge1xuXHRcdFx0aWYgKG9NZXNzYWdlLmdldFR5cGUoKSA9PT0gXCJFcnJvclwiICYmIHNDdXJyZW50Q29udGV4dFBhdGggJiYgb01lc3NhZ2UuZ2V0VGFyZ2V0cygpWzBdLmluZGV4T2Yoc0N1cnJlbnRDb250ZXh0UGF0aCkgPT09IDApIHtcblx0XHRcdFx0c3RhdHVzVmlzaWJpbGl0eSA9IHRydWU7XG5cdFx0XHRcdHJldHVybiBzdGF0dXNWaXNpYmlsaXR5O1xuXHRcdFx0fVxuXHRcdH0pO1xuXHR9XG5cdHJldHVybiBzdGF0dXNWaXNpYmlsaXR5O1xufTtcbmdldEVycm9yU3RhdHVzVGV4dFZpc2liaWxpdHlGb3JtYXR0ZXIuX19mdW5jdGlvbk5hbWUgPSBcInNhcC5mZS5tYWNyb3MuZm9ybWF0dGVycy5UYWJsZUZvcm1hdHRlciNnZXRFcnJvclN0YXR1c1RleHRWaXNpYmlsaXR5Rm9ybWF0dGVyXCI7XG5cbi8qKlxuICogTWV0aG9kIHRvIGNhbGN1bGF0ZSB0aGUgcm93IGhpZ2hsaWdodGluZyBiYXNlZCBvbiB0aGUgY3JpdGljYWxpdHkgdmFsdWUgYW5kIHRoZSBtZXNzYWdlcy5cbiAqIEBwYXJhbSBjcml0aWNhbGl0eVZhbHVlXG4gKiBAcGFyYW0gYUZpbHRlcmVkTWVzc2FnZXNcbiAqIEBwYXJhbSBoYXNBY3RpdmVFbnRpdHlcbiAqIEBwYXJhbSBpc0FjdGl2ZUVudGl0eVxuICogQHBhcmFtIGlzRHJhZnRNb2RlXG4gKiBAcGFyYW0gY29udGV4dFBhdGhcbiAqIEBwYXJhbSBpc0luYWN0aXZlXG4gKi9cbmNvbnN0IHJvd0hpZ2hsaWdodGluZyA9IGZ1bmN0aW9uIChcblx0dGhpczogTWFuYWdlZE9iamVjdCxcblx0Y3JpdGljYWxpdHlWYWx1ZTogc3RyaW5nIHwgbnVtYmVyLFxuXHRhRmlsdGVyZWRNZXNzYWdlczogTWVzc2FnZVtdIHwgc3RyaW5nIHwgdW5kZWZpbmVkLFxuXHRoYXNBY3RpdmVFbnRpdHk6IGJvb2xlYW4gfCBzdHJpbmcgfCB1bmRlZmluZWQsXG5cdGlzQWN0aXZlRW50aXR5OiBib29sZWFuIHwgc3RyaW5nIHwgdW5kZWZpbmVkLFxuXHRpc0RyYWZ0TW9kZTogc3RyaW5nLFxuXHQvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgQHR5cGVzY3JpcHQtZXNsaW50L25vLXVudXNlZC12YXJzXG5cdGNvbnRleHRQYXRoOiBzdHJpbmcsXG5cdGlzSW5hY3RpdmU6IGJvb2xlYW4gfCBzdHJpbmcgfCB1bmRlZmluZWRcbik6IE1lc3NhZ2VUeXBlIHtcblx0Ly8gU2FuaXRpemUgc3RyaW5nIFwidW5kZWZpbmVkXCIgdmFsdWVzIHRvIGFjdHVhbCB1bmRlZmluZWRcblx0YUZpbHRlcmVkTWVzc2FnZXMgPSBhRmlsdGVyZWRNZXNzYWdlcyA9PT0gXCJ1bmRlZmluZWRcIiA/IHVuZGVmaW5lZCA6IGFGaWx0ZXJlZE1lc3NhZ2VzO1xuXHRoYXNBY3RpdmVFbnRpdHkgPSBoYXNBY3RpdmVFbnRpdHkgPT09IFwidW5kZWZpbmVkXCIgPyB1bmRlZmluZWQgOiBoYXNBY3RpdmVFbnRpdHk7XG5cdGlzQWN0aXZlRW50aXR5ID0gaXNBY3RpdmVFbnRpdHkgPT09IFwidW5kZWZpbmVkXCIgPyB1bmRlZmluZWQgOiBpc0FjdGl2ZUVudGl0eTtcblx0aXNJbmFjdGl2ZSA9IGlzSW5hY3RpdmUgPT09IFwidW5kZWZpbmVkXCIgPyB1bmRlZmluZWQgOiBpc0luYWN0aXZlO1xuXHRsZXQgaUhpZ2hlc3RDcml0aWNhbGl0eVZhbHVlID0gLTE7XG5cdGlmIChhRmlsdGVyZWRNZXNzYWdlcyAmJiBhRmlsdGVyZWRNZXNzYWdlcy5sZW5ndGggPiAwKSB7XG5cdFx0Y29uc3Qgc0N1cnJlbnRDb250ZXh0UGF0aCA9IHRoaXMuZ2V0QmluZGluZ0NvbnRleHQoKT8uZ2V0UGF0aCgpO1xuXHRcdChhRmlsdGVyZWRNZXNzYWdlcyBhcyBNZXNzYWdlW10pLmZvckVhY2goKG1lc3NhZ2UpID0+IHtcblx0XHRcdGlmIChcblx0XHRcdFx0c0N1cnJlbnRDb250ZXh0UGF0aCAmJlxuXHRcdFx0XHRtZXNzYWdlLmdldFRhcmdldHMoKVswXS5pbmRleE9mKHNDdXJyZW50Q29udGV4dFBhdGgpID09PSAwICYmXG5cdFx0XHRcdGlIaWdoZXN0Q3JpdGljYWxpdHlWYWx1ZSA8IGdldE1lc3NhZ2V0eXBlT3JkZXIobWVzc2FnZS5nZXRUeXBlKCkpXG5cdFx0XHQpIHtcblx0XHRcdFx0aUhpZ2hlc3RDcml0aWNhbGl0eVZhbHVlID0gZ2V0TWVzc2FnZXR5cGVPcmRlcihtZXNzYWdlLmdldFR5cGUoKSk7XG5cdFx0XHRcdGNyaXRpY2FsaXR5VmFsdWUgPSBtZXNzYWdlLmdldFR5cGUoKTtcblx0XHRcdH1cblx0XHR9KTtcblx0fVxuXHRpZiAodHlwZW9mIGNyaXRpY2FsaXR5VmFsdWUgIT09IFwic3RyaW5nXCIpIHtcblx0XHRzd2l0Y2ggKGNyaXRpY2FsaXR5VmFsdWUpIHtcblx0XHRcdGNhc2UgMTpcblx0XHRcdFx0Y3JpdGljYWxpdHlWYWx1ZSA9IE1lc3NhZ2VUeXBlLkVycm9yO1xuXHRcdFx0XHRicmVhaztcblx0XHRcdGNhc2UgMjpcblx0XHRcdFx0Y3JpdGljYWxpdHlWYWx1ZSA9IE1lc3NhZ2VUeXBlLldhcm5pbmc7XG5cdFx0XHRcdGJyZWFrO1xuXHRcdFx0Y2FzZSAzOlxuXHRcdFx0XHRjcml0aWNhbGl0eVZhbHVlID0gTWVzc2FnZVR5cGUuU3VjY2Vzcztcblx0XHRcdFx0YnJlYWs7XG5cdFx0XHRjYXNlIDU6XG5cdFx0XHRcdGNyaXRpY2FsaXR5VmFsdWUgPSBNZXNzYWdlVHlwZS5JbmZvcm1hdGlvbjtcblx0XHRcdFx0YnJlYWs7XG5cdFx0XHRkZWZhdWx0OlxuXHRcdFx0XHRjcml0aWNhbGl0eVZhbHVlID0gTWVzc2FnZVR5cGUuTm9uZTtcblx0XHR9XG5cdH1cblxuXHRpZiAoIShPYmplY3QudmFsdWVzKE1lc3NhZ2VUeXBlKSBhcyBzdHJpbmdbXSkuaW5jbHVkZXMoY3JpdGljYWxpdHlWYWx1ZSkpIHtcblx0XHRMb2cuZXJyb3IoYCcke2NyaXRpY2FsaXR5VmFsdWV9JyBpc24ndCBhIHZhbGlkIHZhbHVlIGZvciBhIHJvdyBoaWdobGlnaHQuYCk7XG5cdFx0cmV0dXJuIE1lc3NhZ2VUeXBlLk5vbmU7XG5cdH1cblxuXHQvLyBJZiB3ZSBoYXZlIGNhbGN1bGF0ZWQgYSBjcml0aWNhbGl0eSA8PiBOb25lLCByZXR1cm4gaXRcblx0aWYgKGNyaXRpY2FsaXR5VmFsdWUgIT09IE1lc3NhZ2VUeXBlLk5vbmUpIHtcblx0XHRyZXR1cm4gY3JpdGljYWxpdHlWYWx1ZSBhcyBNZXNzYWdlVHlwZTtcblx0fVxuXG5cdC8vIElmIG5vdCwgd2Ugc2V0IGNyaXRpY2FsaXR5IHRvICdJbmZvcm1hdGlvbicgZm9yIG5ld2x5IGNyZWF0ZWQgcm93cyBpbiBEcmFmdCBtb2RlLCBhbmQga2VlcCAnTm9uZScgb3RoZXJ3aXNlXG5cdGNvbnN0IGlzTmV3T2JqZWN0ID0gIWhhc0FjdGl2ZUVudGl0eSAmJiAhaXNBY3RpdmVFbnRpdHkgJiYgIWlzSW5hY3RpdmU7XG5cdHJldHVybiBpc0RyYWZ0TW9kZSA9PT0gXCJ0cnVlXCIgJiYgaXNOZXdPYmplY3QgPyBNZXNzYWdlVHlwZS5JbmZvcm1hdGlvbiA6IE1lc3NhZ2VUeXBlLk5vbmU7XG59O1xucm93SGlnaGxpZ2h0aW5nLl9fZnVuY3Rpb25OYW1lID0gXCJzYXAuZmUubWFjcm9zLmZvcm1hdHRlcnMuVGFibGVGb3JtYXR0ZXIjcm93SGlnaGxpZ2h0aW5nXCI7XG5cbmNvbnN0IG5hdmlnYXRlZFJvdyA9IGZ1bmN0aW9uICh0aGlzOiBNYW5hZ2VkT2JqZWN0LCBkZWVwZXN0UGF0aDogc3RyaW5nKTogYm9vbGVhbiB7XG5cdGNvbnN0IHNQYXRoID0gdGhpcy5nZXRCaW5kaW5nQ29udGV4dCgpPy5nZXRQYXRoKCk7XG5cdGlmIChzUGF0aCAmJiBkZWVwZXN0UGF0aCkge1xuXHRcdHJldHVybiBkZWVwZXN0UGF0aC5pbmRleE9mKHNQYXRoKSA9PT0gMDtcblx0fSBlbHNlIHtcblx0XHRyZXR1cm4gZmFsc2U7XG5cdH1cbn07XG5uYXZpZ2F0ZWRSb3cuX19mdW5jdGlvbk5hbWUgPSBcInNhcC5mZS5tYWNyb3MuZm9ybWF0dGVycy5UYWJsZUZvcm1hdHRlciNuYXZpZ2F0ZWRSb3dcIjtcblxuLyoqXG4gKiBNZXRob2QgdG8gY2FsY3VsYXRlIHRoZSB3aWR0aCBvZiBhbiBNRENDb2x1bW4gYmFzZWQgb24gdGhlIHByb3BlcnR5IGRlZmluaXRpb24uXG4gKiBAcGFyYW0gdGhpcyBUaGUgTURDQ29sdW1uIG9iamVjdFxuICogQHBhcmFtIGVkaXRNb2RlIFRoZSBFZGl0TW9kZSBvZiB0aGUgdGFibGVcbiAqIEBwYXJhbSBpc1Byb3BlcnRpZXNDYWNoZUF2YWlsYWJsZSBJbmRpY2F0ZXMgaWYgdGhlIHByb3BlcnRpZXMgY2FjaGUgaXMgYXZhaWxhYmxlXG4gKiBAcGFyYW0gcHJvcGVydHlOYW1lIFRoZSBuYW1lIG9mIHRoZSBwcm9wZXJ0eSB3ZSB3YW50IHRvIGNhbGN1bGF0ZSB0aGUgd2lkdGhcbiAqIEBwYXJhbSB1c2VSZW1Vbml0IEluZGljYXRlcyBpZiB0aGUgcmVtIHVuaXQgbXVzdCBiZSBjb25jYXRlbmF0ZWQgd2l0aCB0aGUgY29sdW1uIHdpZHRoIHJlc3VsdFxuICogQHBhcmFtIHdpZHRoSW5jbHVkaW5nQ29sdW1uSGVhZGVyIEluZGljYXRlcyBpZiB0aGUgY29sdW1uIGhlYWRlciBzaG91bGQgYmUgYSBwYXJ0IG9mIHRoZSB3aWR0aCBjYWxjdWxhdGlvbi5cbiAqIEBwYXJhbSBpc1NvcnRhYmxlQ29sdW1uIEluZGljYXRlcyBpZiB0aGUgY29sdW1uIGlzIHNvcnRhYmxlXG4gKiBAcGFyYW0gaXNDb2x1bW5SZXF1aXJlZFxuICogQHJldHVybnMgVGhlIHdpZHRoIG9mIHRoZSBjb2x1bW5cbiAqL1xuY29uc3QgZ2V0Q29sdW1uV2lkdGggPSBmdW5jdGlvbiAoXG5cdHRoaXM6IENvbHVtbixcblx0ZWRpdE1vZGU6IEZpZWxkRWRpdE1vZGUsXG5cdGlzUHJvcGVydGllc0NhY2hlQXZhaWxhYmxlOiBib29sZWFuLFxuXHRwcm9wZXJ0eU5hbWU6IHN0cmluZyxcblx0dXNlUmVtVW5pdCA9IHRydWUsXG5cdHdpZHRoSW5jbHVkaW5nQ29sdW1uSGVhZGVyID0gZmFsc2UsXG5cdGlzU29ydGFibGVDb2x1bW4gPSBmYWxzZSxcblx0aXNDb2x1bW5SZXF1aXJlZCA9IGZhbHNlXG4pOiBzdHJpbmcgfCBudWxsIHwgbnVtYmVyIHtcblx0aWYgKCFpc1Byb3BlcnRpZXNDYWNoZUF2YWlsYWJsZSkge1xuXHRcdHJldHVybiBudWxsO1xuXHR9XG5cdGNvbnN0IG1kY1RhYmxlID0gdGhpcy5nZXRQYXJlbnQoKSBhcyBNRENUYWJsZTtcblx0bGV0IHByb3BlcnRpZXM6IEVuaGFuY2VkRkVQcm9wZXJ0eUluZm9bXTtcblx0aWYgKG1kY1RhYmxlPy5nZXRQYXJlbnQoKT8uaXNBKFwic2FwLnVpLm1kYy52YWx1ZWhlbHAuY29udGVudC5NRENUYWJsZVwiKSkge1xuXHRcdHByb3BlcnRpZXMgPSBEZWxlZ2F0ZVV0aWwuZ2V0Q2FjaGVkUHJvcGVydGllcyh0aGlzLmdldFBhcmVudCgpIGFzIE1EQ1RhYmxlKSBhcyBFbmhhbmNlZEZFUHJvcGVydHlJbmZvW107XG5cdH0gZWxzZSB7XG5cdFx0cHJvcGVydGllcyA9IChtZGNUYWJsZS5nZXRQYXJlbnQoKSBhcyBUYWJsZUFQSSkuZ2V0RW5oYW5jZWRGZXRjaGVkUHJvcGVydHlJbmZvcygpO1xuXHR9XG5cdGlmICghcHJvcGVydGllcykgcmV0dXJuIG51bGw7XG5cdGNvbnN0IHByb3BlcnR5ID0gcHJvcGVydGllcy5maW5kKChwcm9wKSA9PiBwcm9wLmtleSA9PT0gcHJvcGVydHlOYW1lKTtcblx0aWYgKCFwcm9wZXJ0eSkgcmV0dXJuIG51bGw7XG5cblx0bGV0IGNvbHVtbldpZHRoID0gVGFibGVTaXplSGVscGVyLmdldE1EQ0NvbHVtbldpZHRoRnJvbVByb3BlcnR5KFxuXHRcdHByb3BlcnR5LFxuXHRcdHByb3BlcnRpZXMsXG5cdFx0d2lkdGhJbmNsdWRpbmdDb2x1bW5IZWFkZXIsXG5cdFx0aXNTb3J0YWJsZUNvbHVtbixcblx0XHRpc0NvbHVtblJlcXVpcmVkXG5cdCk7XG5cdGNvbnN0IHVuaXRPclRpbWV6b25lID0gcHJvcGVydHkuZXhwb3J0U2V0dGluZ3M/LnVuaXQgfHwgcHJvcGVydHkuZXhwb3J0U2V0dGluZ3M/LnRpbWV6b25lO1xuXHRjb2x1bW5XaWR0aCArPSB1bml0T3JUaW1lem9uZSA/IFNpemVIZWxwZXIuZ2V0QnV0dG9uV2lkdGgodW5pdE9yVGltZXpvbmUpIDogMDtcblx0aWYgKGVkaXRNb2RlID09PSBGaWVsZEVkaXRNb2RlLkVkaXRhYmxlKSB7XG5cdFx0Y29uc3QgdW5pdE9yQ3VycmVuY3lQcm9wZXJ0eSA9IHByb3BlcnR5LmV4cG9ydFNldHRpbmdzPy51bml0UHJvcGVydHk7IC8vIHRoZSB1bml0UHJvcGVydHkgYXR0cmlidXRlIGlzIHVzZWQgZm9yIGN1cnJlbmN5IGFuZCB1bml0IG9uIHRoZSBleHBvcnQgc2V0dGluZ3Ncblx0XHRpZiAodW5pdE9yQ3VycmVuY3lQcm9wZXJ0eSkge1xuXHRcdFx0Y29sdW1uV2lkdGggKz0gMztcblx0XHR9XG5cdFx0c3dpdGNoIChwcm9wZXJ0eS50eXBlQ29uZmlnPy5iYXNlVHlwZSkge1xuXHRcdFx0Y2FzZSBcIkRhdGVcIjpcblx0XHRcdGNhc2UgXCJUaW1lXCI6XG5cdFx0XHRjYXNlIFwiRGF0ZVRpbWVcIjpcblx0XHRcdFx0Y29sdW1uV2lkdGggKz0gMi44O1xuXHRcdFx0XHRicmVhaztcblx0XHRcdGRlZmF1bHQ6XG5cdFx0fVxuXHR9XG5cdGlmICh1c2VSZW1Vbml0KSB7XG5cdFx0cmV0dXJuIGNvbHVtbldpZHRoICsgXCJyZW1cIjtcblx0fVxuXHRyZXR1cm4gY29sdW1uV2lkdGg7XG59O1xuZ2V0Q29sdW1uV2lkdGguX19mdW5jdGlvbk5hbWUgPSBcInNhcC5mZS5tYWNyb3MuZm9ybWF0dGVycy5UYWJsZUZvcm1hdHRlciNnZXRDb2x1bW5XaWR0aFwiO1xuXG4vKipcbiAqIE1ldGhvZCB0byBjYWxjdWxhdGUgdGhlIHdpZHRoIG9mIGFuIE1EQ0NvbHVtbiBmb3IgdmFsdWVIZWxwIHRoZSB0YWJsZS5cbiAqIEBwYXJhbSB0aGlzIFRoZSBNRENDb2x1bW4gb2JqZWN0XG4gKiBAcGFyYW0gaXNQcm9wZXJ0aWVzQ2FjaGVBdmFpbGFibGUgSW5kaWNhdGVzIGlmIHRoZSBwcm9wZXJ0aWVzIGNhY2hlIGlzIGF2YWlsYWJsZVxuICogQHBhcmFtIHByb3BlcnR5TmFtZSBUaGUgbmFtZSBvZiB0aGUgcHJvcGVydHkgd2Ugd2FudCB0byBjYWxjdWxhdGUgdGhlIHdpZHRoXG4gKiBAcGFyYW0gaXNUYXJnZXRTbWFsbERldmljZSBJbmRpY2F0ZXMgdGhlIGN1cnJlbnQgZGV2aWNlIGhhcyBhIHNtYWxsIGRldmljZVxuICogQHBhcmFtIHdpZHRoSW5jbHVkaW5nQ29sdW1uSGVhZGVyXG4gKiBAcmV0dXJucyBUaGUgd2lkdGggb2YgdGhlIGNvbHVtblxuICovXG5jb25zdCBnZXRDb2x1bW5XaWR0aEZvclZhbHVlSGVscFRhYmxlID0gZnVuY3Rpb24gKFxuXHR0aGlzOiBDb2x1bW4sXG5cdGlzUHJvcGVydGllc0NhY2hlQXZhaWxhYmxlOiBib29sZWFuLFxuXHRwcm9wZXJ0eU5hbWU6IHN0cmluZyxcblx0aXNUYXJnZXRTbWFsbERldmljZTogYm9vbGVhbixcblx0d2lkdGhJbmNsdWRpbmdDb2x1bW5IZWFkZXIgPSBmYWxzZVxuKTogbnVsbCB8IG51bWJlciB7XG5cdGNvbnN0IGlzU21hbGxEZXZpY2UgPSBDb21tb25VdGlscy5pc1NtYWxsRGV2aWNlKCk7XG5cdGNvbnN0IHdpdGhVbml0ID0gIWlzU21hbGxEZXZpY2U7XG5cblx0cmV0dXJuIChpc1NtYWxsRGV2aWNlICYmIGlzVGFyZ2V0U21hbGxEZXZpY2UpIHx8ICghaXNTbWFsbERldmljZSAmJiAhaXNUYXJnZXRTbWFsbERldmljZSlcblx0XHQ/ICh0YWJsZUZvcm1hdHRlci5nZXRDb2x1bW5XaWR0aC5jYWxsKFxuXHRcdFx0XHR0aGlzLFxuXHRcdFx0XHRGaWVsZEVkaXRNb2RlLkRpc3BsYXksXG5cdFx0XHRcdGlzUHJvcGVydGllc0NhY2hlQXZhaWxhYmxlLFxuXHRcdFx0XHRwcm9wZXJ0eU5hbWUsXG5cdFx0XHRcdHdpdGhVbml0LFxuXHRcdFx0XHR3aWR0aEluY2x1ZGluZ0NvbHVtbkhlYWRlclxuXHRcdCAgKSBhcyBudWxsIHwgbnVtYmVyKVxuXHRcdDogbnVsbDtcbn07XG5cbmdldENvbHVtbldpZHRoRm9yVmFsdWVIZWxwVGFibGUuX19mdW5jdGlvbk5hbWUgPSBcInNhcC5mZS5tYWNyb3MuZm9ybWF0dGVycy5UYWJsZUZvcm1hdHRlciNnZXRDb2x1bW5XaWR0aEZvclZhbHVlSGVscFRhYmxlXCI7XG5cbnR5cGUgRmllbGRXcmFwcGVyRml4ZWQgPSBGaWVsZFdyYXBwZXIgJiB7IGdldENvbnRlbnREaXNwbGF5OiBGdW5jdGlvbjsgZ2V0Q29udGVudEVkaXQ6IEZ1bmN0aW9uIH07XG5mdW5jdGlvbiBpc1JhdGluZ0luZGljYXRvcihvQ29udHJvbDogRmllbGRXcmFwcGVyRml4ZWQpOiBib29sZWFuIHtcblx0aWYgKG9Db250cm9sLmlzQShcInNhcC5mZS5tYWNyb3MuY29udHJvbHMuRmllbGRXcmFwcGVyXCIpKSB7XG5cdFx0Y29uc3QgdkNvbnRlbnREaXNwbGF5ID0gQXJyYXkuaXNBcnJheShvQ29udHJvbC5nZXRDb250ZW50RGlzcGxheSgpKVxuXHRcdFx0PyBvQ29udHJvbC5nZXRDb250ZW50RGlzcGxheSgpWzBdXG5cdFx0XHQ6IG9Db250cm9sLmdldENvbnRlbnREaXNwbGF5KCk7XG5cdFx0aWYgKHZDb250ZW50RGlzcGxheSAmJiB2Q29udGVudERpc3BsYXkuaXNBKFwic2FwLm0uUmF0aW5nSW5kaWNhdG9yXCIpKSB7XG5cdFx0XHRyZXR1cm4gdHJ1ZTtcblx0XHR9XG5cdH1cblx0cmV0dXJuIGZhbHNlO1xufVxuXG5mdW5jdGlvbiBfdXBkYXRlU3R5bGVDbGFzc0ZvclJhdGluZ0luZGljYXRvcihmaWVsZFdyYXBwZXI6IEZpZWxkV3JhcHBlckZpeGVkLCBsYXN0OiBib29sZWFuKTogdm9pZCB7XG5cdGNvbnN0IHZDb250ZW50RGlzcGxheSA9IEFycmF5LmlzQXJyYXkoZmllbGRXcmFwcGVyLmdldENvbnRlbnREaXNwbGF5KCkpXG5cdFx0PyBmaWVsZFdyYXBwZXIuZ2V0Q29udGVudERpc3BsYXkoKVswXVxuXHRcdDogZmllbGRXcmFwcGVyLmdldENvbnRlbnREaXNwbGF5KCk7XG5cdGNvbnN0IHZDb250ZW50RWRpdCA9IEFycmF5LmlzQXJyYXkoZmllbGRXcmFwcGVyLmdldENvbnRlbnRFZGl0KCkpID8gZmllbGRXcmFwcGVyLmdldENvbnRlbnRFZGl0KClbMF0gOiBmaWVsZFdyYXBwZXIuZ2V0Q29udGVudEVkaXQoKTtcblxuXHRpZiAobGFzdCkge1xuXHRcdHZDb250ZW50RGlzcGxheS5hZGRTdHlsZUNsYXNzKFwic2FwVWlOb01hcmdpbkJvdHRvbVwiKTtcblx0XHR2Q29udGVudERpc3BsYXkuYWRkU3R5bGVDbGFzcyhcInNhcFVpTm9NYXJnaW5Ub3BcIik7XG5cdFx0dkNvbnRlbnRFZGl0LnJlbW92ZVN0eWxlQ2xhc3MoXCJzYXBVaVRpbnlNYXJnaW5Cb3R0b21cIik7XG5cdH0gZWxzZSB7XG5cdFx0dkNvbnRlbnREaXNwbGF5LmFkZFN0eWxlQ2xhc3MoXCJzYXBVaU5vTWFyZ2luQm90dG9tXCIpO1xuXHRcdHZDb250ZW50RGlzcGxheS5yZW1vdmVTdHlsZUNsYXNzKFwic2FwVWlOb01hcmdpblRvcFwiKTtcblx0XHR2Q29udGVudEVkaXQuYWRkU3R5bGVDbGFzcyhcInNhcFVpVGlueU1hcmdpbkJvdHRvbVwiKTtcblx0fVxufVxuZnVuY3Rpb24gZ2V0VkJveFZpc2liaWxpdHkodGhpczogVGFibGUsIC4uLmFyZ3M6IHVua25vd25bXSk6IGJvb2xlYW4ge1xuXHRjb25zdCBhSXRlbXMgPSB0aGlzLmdldEl0ZW1zKCkgYXMgdW5rbm93biBhcyBGaWVsZFdyYXBwZXJGaXhlZFtdO1xuXHRsZXQgYkxhc3RFbGVtZW50Rm91bmQgPSBmYWxzZTtcblx0Zm9yIChsZXQgaW5kZXggPSBhSXRlbXMubGVuZ3RoIC0gMTsgaW5kZXggPj0gMDsgaW5kZXgtLSkge1xuXHRcdGlmICghYkxhc3RFbGVtZW50Rm91bmQpIHtcblx0XHRcdGlmIChhcmdzW2luZGV4XSAhPT0gdHJ1ZSkge1xuXHRcdFx0XHRiTGFzdEVsZW1lbnRGb3VuZCA9IHRydWU7XG5cdFx0XHRcdGlmIChpc1JhdGluZ0luZGljYXRvcihhSXRlbXNbaW5kZXhdKSkge1xuXHRcdFx0XHRcdF91cGRhdGVTdHlsZUNsYXNzRm9yUmF0aW5nSW5kaWNhdG9yKGFJdGVtc1tpbmRleF0sIHRydWUpO1xuXHRcdFx0XHR9IGVsc2Uge1xuXHRcdFx0XHRcdGFJdGVtc1tpbmRleF0ucmVtb3ZlU3R5bGVDbGFzcyhcInNhcFVpVGlueU1hcmdpbkJvdHRvbVwiKTtcblx0XHRcdFx0fVxuXHRcdFx0fVxuXHRcdH0gZWxzZSBpZiAoaXNSYXRpbmdJbmRpY2F0b3IoYUl0ZW1zW2luZGV4XSkpIHtcblx0XHRcdF91cGRhdGVTdHlsZUNsYXNzRm9yUmF0aW5nSW5kaWNhdG9yKGFJdGVtc1tpbmRleF0sIGZhbHNlKTtcblx0XHR9IGVsc2Uge1xuXHRcdFx0YUl0ZW1zW2luZGV4XS5hZGRTdHlsZUNsYXNzKFwic2FwVWlUaW55TWFyZ2luQm90dG9tXCIpO1xuXHRcdH1cblx0fVxuXHRyZXR1cm4gdHJ1ZTtcbn1cbmdldFZCb3hWaXNpYmlsaXR5Ll9fZnVuY3Rpb25OYW1lID0gXCJzYXAuZmUubWFjcm9zLmZvcm1hdHRlcnMuVGFibGVGb3JtYXR0ZXIjZ2V0VkJveFZpc2liaWxpdHlcIjtcblxuLy8gU2VlIGh0dHBzOi8vd3d3LnR5cGVzY3JpcHRsYW5nLm9yZy9kb2NzL2hhbmRib29rL2Z1bmN0aW9ucy5odG1sI3RoaXMtcGFyYW1ldGVycyBmb3IgbW9yZSBkZXRhaWwgb24gdGhpcyB3ZWlyZCBzeW50YXhcbi8qKlxuICogQ29sbGVjdGlvbiBvZiB0YWJsZSBmb3JtYXR0ZXJzLlxuICogQHBhcmFtIHRoaXMgVGhlIGNvbnRleHRcbiAqIEBwYXJhbSBzTmFtZSBUaGUgaW5uZXIgZnVuY3Rpb24gbmFtZVxuICogQHBhcmFtIG9BcmdzIFRoZSBpbm5lciBmdW5jdGlvbiBwYXJhbWV0ZXJzXG4gKiBAcmV0dXJucyBUaGUgdmFsdWUgZnJvbSB0aGUgaW5uZXIgZnVuY3Rpb25cbiAqL1xuY29uc3QgdGFibGVGb3JtYXR0ZXIgPSBmdW5jdGlvbiAodGhpczogb2JqZWN0LCBzTmFtZTogc3RyaW5nLCAuLi5vQXJnczogdW5rbm93bltdKTogdW5rbm93biB7XG5cdGlmICh0YWJsZUZvcm1hdHRlci5oYXNPd25Qcm9wZXJ0eShzTmFtZSkpIHtcblx0XHRyZXR1cm4gKHRhYmxlRm9ybWF0dGVyIGFzIHVua25vd24gYXMgUmVjb3JkPHN0cmluZywgRnVuY3Rpb24+KVtzTmFtZV0uYXBwbHkodGhpcywgb0FyZ3MpO1xuXHR9IGVsc2Uge1xuXHRcdHJldHVybiBcIlwiO1xuXHR9XG59O1xuXG50YWJsZUZvcm1hdHRlci52YWxpZGF0ZUNyZWF0aW9uUm93RmllbGRzID0gdmFsaWRhdGVDcmVhdGlvblJvd0ZpZWxkcztcbnRhYmxlRm9ybWF0dGVyLnJvd0hpZ2hsaWdodGluZyA9IHJvd0hpZ2hsaWdodGluZztcbnRhYmxlRm9ybWF0dGVyLm5hdmlnYXRlZFJvdyA9IG5hdmlnYXRlZFJvdztcbnRhYmxlRm9ybWF0dGVyLmdldEVycm9yU3RhdHVzVGV4dFZpc2liaWxpdHlGb3JtYXR0ZXIgPSBnZXRFcnJvclN0YXR1c1RleHRWaXNpYmlsaXR5Rm9ybWF0dGVyO1xudGFibGVGb3JtYXR0ZXIuZ2V0VkJveFZpc2liaWxpdHkgPSBnZXRWQm94VmlzaWJpbGl0eTtcbnRhYmxlRm9ybWF0dGVyLmlzUmF0aW5nSW5kaWNhdG9yID0gaXNSYXRpbmdJbmRpY2F0b3I7IC8vIGZvciB1bml0IHRlc3RzXG50YWJsZUZvcm1hdHRlci5nZXRDb2x1bW5XaWR0aCA9IGdldENvbHVtbldpZHRoO1xudGFibGVGb3JtYXR0ZXIuZ2V0Q29sdW1uV2lkdGhGb3JWYWx1ZUhlbHBUYWJsZSA9IGdldENvbHVtbldpZHRoRm9yVmFsdWVIZWxwVGFibGU7XG5cbk9iamVjdFBhdGguc2V0KFwic2FwLmZlLm1hY3Jvcy5mb3JtYXR0ZXJzLlRhYmxlRm9ybWF0dGVyXCIsIHRhYmxlRm9ybWF0dGVyKTtcblxuZXhwb3J0IGRlZmF1bHQgdGFibGVGb3JtYXR0ZXI7XG4iXSwibWFwcGluZ3MiOiI7Ozs7Ozs7RUFpQkEsTUFBTUEsbUJBQW1CLEdBQUcsU0FBQUEsQ0FBVUMsV0FBbUIsRUFBVTtJQUNsRSxRQUFRQSxXQUFXO01BQ2xCLEtBQUssT0FBTztRQUNYLE9BQU8sQ0FBQztNQUNULEtBQUssU0FBUztRQUNiLE9BQU8sQ0FBQztNQUNULEtBQUssYUFBYTtRQUNqQixPQUFPLENBQUM7TUFDVCxLQUFLLE1BQU07UUFDVixPQUFPLENBQUM7TUFDVDtRQUNDLE9BQU8sQ0FBQyxDQUFDO0lBQ1g7RUFDRCxDQUFDOztFQUVEO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7RUFDQSxNQUFNQyx5QkFBeUIsR0FBRyxTQUFBQSxDQUFVQyxtQkFBMkQsRUFBVztJQUNqSCxJQUFJLENBQUNBLG1CQUFtQixFQUFFO01BQ3pCLE9BQU8sS0FBSztJQUNiO0lBQ0EsTUFBTUMsU0FBUyxHQUFHQyxNQUFNLENBQUNDLElBQUksQ0FBQ0gsbUJBQW1CLENBQUM7SUFDbEQsT0FDQ0MsU0FBUyxDQUFDRyxNQUFNLEdBQUcsQ0FBQyxJQUNwQkgsU0FBUyxDQUFDSSxLQUFLLENBQUMsVUFBVUMsR0FBRyxFQUFFO01BQzlCLE9BQU9OLG1CQUFtQixDQUFDTSxHQUFHLENBQUMsQ0FBQyxVQUFVLENBQUM7SUFDNUMsQ0FBQyxD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
283
+ //# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJuYW1lcyI6WyJnZXRNZXNzYWdldHlwZU9yZGVyIiwibWVzc2FnZVR5cGUiLCJ2YWxpZGF0ZUNyZWF0aW9uUm93RmllbGRzIiwiZmllbGRWYWxpZGl0eU9iamVjdCIsImZpZWxkS2V5cyIsIk9iamVjdCIsImtleXMiLCJsZW5ndGgiLCJldmVyeSIsImtleSIsIl9fZnVuY3Rpb25OYW1lIiwiZ2V0RXJyb3JTdGF0dXNUZXh0VmlzaWJpbGl0eUZvcm1hdHRlciIsInNlbWFudGljS2V5SGFzRHJhZnRJbmRpY2F0b3IiLCJhRmlsdGVyZWRNZXNzYWdlcyIsImNvbHVtbk5hbWUiLCJpc1NlbWFudGljS2V5SW5GaWVsZEdyb3VwIiwic3RhdHVzVmlzaWJpbGl0eSIsInNDdXJyZW50Q29udGV4dFBhdGgiLCJnZXRCaW5kaW5nQ29udGV4dCIsImdldFBhdGgiLCJ1bmRlZmluZWQiLCJmb3JFYWNoIiwib01lc3NhZ2UiLCJnZXRUeXBlIiwiZ2V0VGFyZ2V0cyIsImluZGV4T2YiLCJyb3dIaWdobGlnaHRpbmciLCJjcml0aWNhbGl0eVZhbHVlIiwiaGFzQWN0aXZlRW50aXR5IiwiaXNBY3RpdmVFbnRpdHkiLCJpc0RyYWZ0TW9kZSIsImNvbnRleHRQYXRoIiwiaXNJbmFjdGl2ZSIsImlIaWdoZXN0Q3JpdGljYWxpdHlWYWx1ZSIsIm1lc3NhZ2UiLCJNZXNzYWdlVHlwZSIsIkVycm9yIiwiV2FybmluZyIsIlN1Y2Nlc3MiLCJJbmZvcm1hdGlvbiIsIk5vbmUiLCJ2YWx1ZXMiLCJpbmNsdWRlcyIsIkxvZyIsImVycm9yIiwiaXNOZXdPYmplY3QiLCJuYXZpZ2F0ZWRSb3ciLCJkZWVwZXN0UGF0aCIsInNQYXRoIiwiZ2V0Q29sdW1uV2lkdGgiLCJlZGl0TW9kZSIsImlzUHJvcGVydGllc0NhY2hlQXZhaWxhYmxlIiwicHJvcGVydHlOYW1lIiwidXNlUmVtVW5pdCIsImFyZ3VtZW50cyIsIndpZHRoSW5jbHVkaW5nQ29sdW1uSGVhZGVyIiwiaXNTb3J0YWJsZUNvbHVtbiIsImlzQ29sdW1uUmVxdWlyZWQiLCJtZGNUYWJsZSIsImdldFBhcmVudCIsInByb3BlcnRpZXMiLCJpc0EiLCJEZWxlZ2F0ZVV0aWwiLCJnZXRDYWNoZWRQcm9wZXJ0aWVzIiwiZ2V0RW5oYW5jZWRGZXRjaGVkUHJvcGVydHlJbmZvcyIsInByb3BlcnR5IiwiZmluZCIsInByb3AiLCJjb2x1bW5XaWR0aCIsIlRhYmxlU2l6ZUhlbHBlciIsImdldE1EQ0NvbHVtbldpZHRoRnJvbVByb3BlcnR5IiwidW5pdE9yVGltZXpvbmUiLCJleHBvcnRTZXR0aW5ncyIsInVuaXQiLCJ0aW1lem9uZSIsIlNpemVIZWxwZXIiLCJnZXRCdXR0b25XaWR0aCIsIkZpZWxkRWRpdE1vZGUiLCJFZGl0YWJsZSIsInVuaXRPckN1cnJlbmN5UHJvcGVydHkiLCJ1bml0UHJvcGVydHkiLCJ0eXBlQ29uZmlnIiwiYmFzZVR5cGUiLCJnZXRDb2x1bW5XaWR0aEZvclZhbHVlSGVscFRhYmxlIiwiaXNUYXJnZXRTbWFsbERldmljZSIsImlzU21hbGxEZXZpY2UiLCJDb21tb25VdGlscyIsIndpdGhVbml0IiwidGFibGVGb3JtYXR0ZXIiLCJjYWxsIiwiRGlzcGxheSIsImlzUmF0aW5nSW5kaWNhdG9yIiwib0NvbnRyb2wiLCJ2Q29udGVudERpc3BsYXkiLCJBcnJheSIsImlzQXJyYXkiLCJnZXRDb250ZW50RGlzcGxheSIsIl91cGRhdGVTdHlsZUNsYXNzRm9yUmF0aW5nSW5kaWNhdG9yIiwiZmllbGRXcmFwcGVyIiwibGFzdCIsInZDb250ZW50RWRpdCIsImdldENvbnRlbnRFZGl0IiwiYWRkU3R5bGVDbGFzcyIsInJlbW92ZVN0eWxlQ2xhc3MiLCJnZXRWQm94VmlzaWJpbGl0eSIsImFJdGVtcyIsImdldEl0ZW1zIiwiYkxhc3RFbGVtZW50Rm91bmQiLCJfbGVuIiwiYXJncyIsIl9rZXkiLCJpbmRleCIsInNOYW1lIiwiaGFzT3duUHJvcGVydHkiLCJfbGVuMiIsIm9BcmdzIiwiX2tleTIiLCJhcHBseSIsIlNjb3BlIiwiX2Zvcm1hdHRlcnMiLCJUYWJsZUZvcm1hdHRlciJdLCJzb3VyY2VSb290IjoiLiIsInNvdXJjZXMiOlsiVGFibGVGb3JtYXR0ZXIudHMiXSwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IExvZyBmcm9tIFwic2FwL2Jhc2UvTG9nXCI7XG5pbXBvcnQgQ29tbW9uVXRpbHMgZnJvbSBcInNhcC9mZS9jb3JlL0NvbW1vblV0aWxzXCI7XG5pbXBvcnQgU2NvcGUgZnJvbSBcInNhcC9mZS9jb3JlL2Zvcm1hdHRlcnMvU2NvcGVcIjtcbmltcG9ydCBTaXplSGVscGVyIGZyb20gXCJzYXAvZmUvY29yZS9oZWxwZXJzL1NpemVIZWxwZXJcIjtcbmltcG9ydCBEZWxlZ2F0ZVV0aWwgZnJvbSBcInNhcC9mZS9tYWNyb3MvRGVsZWdhdGVVdGlsXCI7XG5pbXBvcnQgdHlwZSBUYWJsZUFQSSBmcm9tIFwic2FwL2ZlL21hY3Jvcy90YWJsZS9UYWJsZUFQSVwiO1xuaW1wb3J0IHR5cGUgeyBFbmhhbmNlZEZFUHJvcGVydHlJbmZvIH0gZnJvbSBcInNhcC9mZS9tYWNyb3MvdGFibGUvVGFibGVBUElcIjtcbmltcG9ydCBUYWJsZVNpemVIZWxwZXIgZnJvbSBcInNhcC9mZS9tYWNyb3MvdGFibGUvVGFibGVTaXplSGVscGVyXCI7XG5pbXBvcnQgdHlwZSBUYWJsZSBmcm9tIFwic2FwL20vVGFibGVcIjtcbmltcG9ydCB0eXBlIE1hbmFnZWRPYmplY3QgZnJvbSBcInNhcC91aS9iYXNlL01hbmFnZWRPYmplY3RcIjtcbmltcG9ydCB0eXBlIE1lc3NhZ2UgZnJvbSBcInNhcC91aS9jb3JlL21lc3NhZ2UvTWVzc2FnZVwiO1xuaW1wb3J0IE1lc3NhZ2VUeXBlIGZyb20gXCJzYXAvdWkvY29yZS9tZXNzYWdlL01lc3NhZ2VUeXBlXCI7XG5pbXBvcnQgRmllbGRFZGl0TW9kZSBmcm9tIFwic2FwL3VpL21kYy9lbnVtcy9GaWVsZEVkaXRNb2RlXCI7XG5pbXBvcnQgdHlwZSBDb2x1bW4gZnJvbSBcInNhcC91aS9tZGMvdGFibGUvQ29sdW1uXCI7XG5pbXBvcnQgdHlwZSBNRENUYWJsZSBmcm9tIFwic2FwL3VpL21kYy92YWx1ZWhlbHAvY29udGVudC9NRENUYWJsZVwiO1xuaW1wb3J0IHR5cGUgRmllbGRXcmFwcGVyIGZyb20gXCIuLi9jb250cm9scy9GaWVsZFdyYXBwZXJcIjtcblxuY29uc3QgZ2V0TWVzc2FnZXR5cGVPcmRlciA9IGZ1bmN0aW9uIChtZXNzYWdlVHlwZTogc3RyaW5nKTogbnVtYmVyIHtcblx0c3dpdGNoIChtZXNzYWdlVHlwZSkge1xuXHRcdGNhc2UgXCJFcnJvclwiOlxuXHRcdFx0cmV0dXJuIDQ7XG5cdFx0Y2FzZSBcIldhcm5pbmdcIjpcblx0XHRcdHJldHVybiAzO1xuXHRcdGNhc2UgXCJJbmZvcm1hdGlvblwiOlxuXHRcdFx0cmV0dXJuIDI7XG5cdFx0Y2FzZSBcIk5vbmVcIjpcblx0XHRcdHJldHVybiAxO1xuXHRcdGRlZmF1bHQ6XG5cdFx0XHRyZXR1cm4gLTE7XG5cdH1cbn07XG5cbi8qKlxuICogR2V0cyB0aGUgdmFsaWRpdHkgb2YgY3JlYXRpb24gcm93IGZpZWxkcy5cbiAqIEBwYXJhbSBmaWVsZFZhbGlkaXR5T2JqZWN0IE9iamVjdCBob2xkaW5nIHRoZSBmaWVsZHNcbiAqIEByZXR1cm5zIGB0cnVlYCBpZiBhbGwgdGhlIGZpZWxkcyBpbiB0aGUgY3JlYXRpb24gcm93IGFyZSB2YWxpZCwgYGZhbHNlYCBvdGhlcndpc2VcbiAqL1xuY29uc3QgdmFsaWRhdGVDcmVhdGlvblJvd0ZpZWxkcyA9IGZ1bmN0aW9uIChmaWVsZFZhbGlkaXR5T2JqZWN0PzogUmVjb3JkPHN0cmluZywgeyB2YWxpZGl0eTogYm9vbGVhbiB9Pik6IGJvb2xlYW4ge1xuXHRpZiAoIWZpZWxkVmFsaWRpdHlPYmplY3QpIHtcblx0XHRyZXR1cm4gZmFsc2U7XG5cdH1cblx0Y29uc3QgZmllbGRLZXlzID0gT2JqZWN0LmtleXMoZmllbGRWYWxpZGl0eU9iamVjdCk7XG5cdHJldHVybiAoXG5cdFx0ZmllbGRLZXlzLmxlbmd0aCA+IDAgJiZcblx0XHRmaWVsZEtleXMuZXZlcnkoZnVuY3Rpb24gKGtleSkge1xuXHRcdFx0cmV0dXJuIGZpZWxkVmFsaWRpdHlPYmplY3Rba2V5XVtcInZhbGlkaXR5XCJdO1xuXHRcdH0pXG5cdCk7XG59O1xudmFsaWRhdGVDcmVhdGlvblJvd0ZpZWxkcy5fX2Z1bmN0aW9uTmFtZSA9IFwiLl9mb3JtYXR0ZXJzLlRhYmxlRm9ybWF0dGVyI3ZhbGlkYXRlQ3JlYXRpb25Sb3dGaWVsZHNcIjtcblxuLyoqXG4gKiBAcGFyYW0gdGhpcyBUaGUgb2JqZWN0IHN0YXR1cyBjb250cm9sLlxuICogQHBhcmFtIHNlbWFudGljS2V5SGFzRHJhZnRJbmRpY2F0b3IgVGhlIHByb3BlcnR5IG5hbWUgb2YgdGhlIGRyYWZ0IGluZGljYXRvci5cbiAqIEBwYXJhbSBhRmlsdGVyZWRNZXNzYWdlcyBBcnJheSBvZiBtZXNzYWdlcy5cbiAqIEBwYXJhbSBjb2x1bW5OYW1lXG4gKiBAcGFyYW0gaXNTZW1hbnRpY0tleUluRmllbGRHcm91cCBGbGFnIHdoaWNoIHNheXMgaWYgc2VtYW50aWMga2V5IGlzIGEgcGFydCBvZiBmaWVsZCBncm91cC5cbiAqIEByZXR1cm5zIFRoZSB2YWx1ZSBmb3IgdGhlIHZpc2liaWxpdHkgcHJvcGVydHkgb2YgdGhlIG9iamVjdCBzdGF0dXNcbiAqL1xuY29uc3QgZ2V0RXJyb3JTdGF0dXNUZXh0VmlzaWJpbGl0eUZvcm1hdHRlciA9IGZ1bmN0aW9uIChcblx0dGhpczogTWFuYWdlZE9iamVjdCxcblx0c2VtYW50aWNLZXlIYXNEcmFmdEluZGljYXRvcjogc3RyaW5nLFxuXHRhRmlsdGVyZWRNZXNzYWdlczogTWVzc2FnZVtdLFxuXHRjb2x1bW5OYW1lOiBzdHJpbmcsXG5cdGlzU2VtYW50aWNLZXlJbkZpZWxkR3JvdXA/OiBib29sZWFuXG4pOiBib29sZWFuIHtcblx0bGV0IHN0YXR1c1Zpc2liaWxpdHkgPSBmYWxzZTtcblx0aWYgKGFGaWx0ZXJlZE1lc3NhZ2VzICYmIGFGaWx0ZXJlZE1lc3NhZ2VzLmxlbmd0aCA+IDAgJiYgKGlzU2VtYW50aWNLZXlJbkZpZWxkR3JvdXAgfHwgY29sdW1uTmFtZSA9PT0gc2VtYW50aWNLZXlIYXNEcmFmdEluZGljYXRvcikpIHtcblx0XHRjb25zdCBzQ3VycmVudENvbnRleHRQYXRoID0gdGhpcy5nZXRCaW5kaW5nQ29udGV4dCgpID8gdGhpcy5nZXRCaW5kaW5nQ29udGV4dCgpPy5nZXRQYXRoKCkgOiB1bmRlZmluZWQ7XG5cdFx0YUZpbHRlcmVkTWVzc2FnZXMuZm9yRWFjaCgob01lc3NhZ2UpID0+IHtcblx0XHRcdGlmIChvTWVzc2FnZS5nZXRUeXBlKCkgPT09IFwiRXJyb3JcIiAmJiBzQ3VycmVudENvbnRleHRQYXRoICYmIG9NZXNzYWdlLmdldFRhcmdldHMoKVswXS5pbmRleE9mKHNDdXJyZW50Q29udGV4dFBhdGgpID09PSAwKSB7XG5cdFx0XHRcdHN0YXR1c1Zpc2liaWxpdHkgPSB0cnVlO1xuXHRcdFx0XHRyZXR1cm4gc3RhdHVzVmlzaWJpbGl0eTtcblx0XHRcdH1cblx0XHR9KTtcblx0fVxuXHRyZXR1cm4gc3RhdHVzVmlzaWJpbGl0eTtcbn07XG5nZXRFcnJvclN0YXR1c1RleHRWaXNpYmlsaXR5Rm9ybWF0dGVyLl9fZnVuY3Rpb25OYW1lID0gXCIuX2Zvcm1hdHRlcnMuVGFibGVGb3JtYXR0ZXIuYmluZCgkY29udHJvbCkjZ2V0RXJyb3JTdGF0dXNUZXh0VmlzaWJpbGl0eUZvcm1hdHRlclwiO1xuXG4vKipcbiAqIE1ldGhvZCB0byBjYWxjdWxhdGUgdGhlIHJvdyBoaWdobGlnaHRpbmcgYmFzZWQgb24gdGhlIGNyaXRpY2FsaXR5IHZhbHVlIGFuZCB0aGUgbWVzc2FnZXMuXG4gKiBAcGFyYW0gY3JpdGljYWxpdHlWYWx1ZVxuICogQHBhcmFtIGFGaWx0ZXJlZE1lc3NhZ2VzXG4gKiBAcGFyYW0gaGFzQWN0aXZlRW50aXR5XG4gKiBAcGFyYW0gaXNBY3RpdmVFbnRpdHlcbiAqIEBwYXJhbSBpc0RyYWZ0TW9kZVxuICogQHBhcmFtIGNvbnRleHRQYXRoXG4gKiBAcGFyYW0gaXNJbmFjdGl2ZVxuICovXG5jb25zdCByb3dIaWdobGlnaHRpbmcgPSBmdW5jdGlvbiAoXG5cdHRoaXM6IE1hbmFnZWRPYmplY3QsXG5cdGNyaXRpY2FsaXR5VmFsdWU6IHN0cmluZyB8IG51bWJlcixcblx0YUZpbHRlcmVkTWVzc2FnZXM6IE1lc3NhZ2VbXSB8IHN0cmluZyB8IHVuZGVmaW5lZCxcblx0aGFzQWN0aXZlRW50aXR5OiBib29sZWFuIHwgc3RyaW5nIHwgdW5kZWZpbmVkLFxuXHRpc0FjdGl2ZUVudGl0eTogYm9vbGVhbiB8IHN0cmluZyB8IHVuZGVmaW5lZCxcblx0aXNEcmFmdE1vZGU6IHN0cmluZyxcblx0Ly8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIEB0eXBlc2NyaXB0LWVzbGludC9uby11bnVzZWQtdmFyc1xuXHRjb250ZXh0UGF0aDogc3RyaW5nLFxuXHRpc0luYWN0aXZlOiBib29sZWFuIHwgc3RyaW5nIHwgdW5kZWZpbmVkXG4pOiBNZXNzYWdlVHlwZSB7XG5cdC8vIFNhbml0aXplIHN0cmluZyBcInVuZGVmaW5lZFwiIHZhbHVlcyB0byBhY3R1YWwgdW5kZWZpbmVkXG5cdGFGaWx0ZXJlZE1lc3NhZ2VzID0gYUZpbHRlcmVkTWVzc2FnZXMgPT09IFwidW5kZWZpbmVkXCIgPyB1bmRlZmluZWQgOiBhRmlsdGVyZWRNZXNzYWdlcztcblx0aGFzQWN0aXZlRW50aXR5ID0gaGFzQWN0aXZlRW50aXR5ID09PSBcInVuZGVmaW5lZFwiID8gdW5kZWZpbmVkIDogaGFzQWN0aXZlRW50aXR5O1xuXHRpc0FjdGl2ZUVudGl0eSA9IGlzQWN0aXZlRW50aXR5ID09PSBcInVuZGVmaW5lZFwiID8gdW5kZWZpbmVkIDogaXNBY3RpdmVFbnRpdHk7XG5cdGlzSW5hY3RpdmUgPSBpc0luYWN0aXZlID09PSBcInVuZGVmaW5lZFwiID8gdW5kZWZpbmVkIDogaXNJbmFjdGl2ZTtcblx0bGV0IGlIaWdoZXN0Q3JpdGljYWxpdHlWYWx1ZSA9IC0xO1xuXHRpZiAoYUZpbHRlcmVkTWVzc2FnZXMgJiYgYUZpbHRlcmVkTWVzc2FnZXMubGVuZ3RoID4gMCkge1xuXHRcdGNvbnN0IHNDdXJyZW50Q29udGV4dFBhdGggPSB0aGlzLmdldEJpbmRpbmdDb250ZXh0KCk/LmdldFBhdGgoKTtcblx0XHQoYUZpbHRlcmVkTWVzc2FnZXMgYXMgTWVzc2FnZVtdKS5mb3JFYWNoKChtZXNzYWdlKSA9PiB7XG5cdFx0XHRpZiAoXG5cdFx0XHRcdHNDdXJyZW50Q29udGV4dFBhdGggJiZcblx0XHRcdFx0bWVzc2FnZS5nZXRUYXJnZXRzKClbMF0uaW5kZXhPZihzQ3VycmVudENvbnRleHRQYXRoKSA9PT0gMCAmJlxuXHRcdFx0XHRpSGlnaGVzdENyaXRpY2FsaXR5VmFsdWUgPCBnZXRNZXNzYWdldHlwZU9yZGVyKG1lc3NhZ2UuZ2V0VHlwZSgpKVxuXHRcdFx0KSB7XG5cdFx0XHRcdGlIaWdoZXN0Q3JpdGljYWxpdHlWYWx1ZSA9IGdldE1lc3NhZ2V0eXBlT3JkZXIobWVzc2FnZS5nZXRUeXBlKCkpO1xuXHRcdFx0XHRjcml0aWNhbGl0eVZhbHVlID0gbWVzc2FnZS5nZXRUeXBlKCk7XG5cdFx0XHR9XG5cdFx0fSk7XG5cdH1cblx0aWYgKHR5cGVvZiBjcml0aWNhbGl0eVZhbHVlICE9PSBcInN0cmluZ1wiKSB7XG5cdFx0c3dpdGNoIChjcml0aWNhbGl0eVZhbHVlKSB7XG5cdFx0XHRjYXNlIDE6XG5cdFx0XHRcdGNyaXRpY2FsaXR5VmFsdWUgPSBNZXNzYWdlVHlwZS5FcnJvcjtcblx0XHRcdFx0YnJlYWs7XG5cdFx0XHRjYXNlIDI6XG5cdFx0XHRcdGNyaXRpY2FsaXR5VmFsdWUgPSBNZXNzYWdlVHlwZS5XYXJuaW5nO1xuXHRcdFx0XHRicmVhaztcblx0XHRcdGNhc2UgMzpcblx0XHRcdFx0Y3JpdGljYWxpdHlWYWx1ZSA9IE1lc3NhZ2VUeXBlLlN1Y2Nlc3M7XG5cdFx0XHRcdGJyZWFrO1xuXHRcdFx0Y2FzZSA1OlxuXHRcdFx0XHRjcml0aWNhbGl0eVZhbHVlID0gTWVzc2FnZVR5cGUuSW5mb3JtYXRpb247XG5cdFx0XHRcdGJyZWFrO1xuXHRcdFx0ZGVmYXVsdDpcblx0XHRcdFx0Y3JpdGljYWxpdHlWYWx1ZSA9IE1lc3NhZ2VUeXBlLk5vbmU7XG5cdFx0fVxuXHR9XG5cblx0aWYgKCEoT2JqZWN0LnZhbHVlcyhNZXNzYWdlVHlwZSkgYXMgc3RyaW5nW10pLmluY2x1ZGVzKGNyaXRpY2FsaXR5VmFsdWUpKSB7XG5cdFx0TG9nLmVycm9yKGAnJHtjcml0aWNhbGl0eVZhbHVlfScgaXNuJ3QgYSB2YWxpZCB2YWx1ZSBmb3IgYSByb3cgaGlnaGxpZ2h0LmApO1xuXHRcdHJldHVybiBNZXNzYWdlVHlwZS5Ob25lO1xuXHR9XG5cblx0Ly8gSWYgd2UgaGF2ZSBjYWxjdWxhdGVkIGEgY3JpdGljYWxpdHkgPD4gTm9uZSwgcmV0dXJuIGl0XG5cdGlmIChjcml0aWNhbGl0eVZhbHVlICE9PSBNZXNzYWdlVHlwZS5Ob25lKSB7XG5cdFx0cmV0dXJuIGNyaXRpY2FsaXR5VmFsdWUgYXMgTWVzc2FnZVR5cGU7XG5cdH1cblxuXHQvLyBJZiBub3QsIHdlIHNldCBjcml0aWNhbGl0eSB0byAnSW5mb3JtYXRpb24nIGZvciBuZXdseSBjcmVhdGVkIHJvd3MgaW4gRHJhZnQgbW9kZSwgYW5kIGtlZXAgJ05vbmUnIG90aGVyd2lzZVxuXHRjb25zdCBpc05ld09iamVjdCA9ICFoYXNBY3RpdmVFbnRpdHkgJiYgIWlzQWN0aXZlRW50aXR5ICYmICFpc0luYWN0aXZlO1xuXHRyZXR1cm4gaXNEcmFmdE1vZGUgPT09IFwidHJ1ZVwiICYmIGlzTmV3T2JqZWN0ID8gTWVzc2FnZVR5cGUuSW5mb3JtYXRpb24gOiBNZXNzYWdlVHlwZS5Ob25lO1xufTtcbnJvd0hpZ2hsaWdodGluZy5fX2Z1bmN0aW9uTmFtZSA9IFwiLl9mb3JtYXR0ZXJzLlRhYmxlRm9ybWF0dGVyLmJpbmQoJGNvbnRyb2wpI3Jvd0hpZ2hsaWdodGluZ1wiO1xuXG5jb25zdCBuYXZpZ2F0ZWRSb3cgPSBmdW5jdGlvbiAodGhpczogTWFuYWdlZE9iamVjdCwgZGVlcGVzdFBhdGg6IHN0cmluZyk6IGJvb2xlYW4ge1xuXHRjb25zdCBzUGF0aCA9IHRoaXMuZ2V0QmluZGluZ0NvbnRleHQoKT8uZ2V0UGF0aCgpO1xuXHRpZiAoc1BhdGggJiYgZGVlcGVzdFBhdGgpIHtcblx0XHRyZXR1cm4gZGVlcGVzdFBhdGguaW5kZXhPZihzUGF0aCkgPT09IDA7XG5cdH0gZWxzZSB7XG5cdFx0cmV0dXJuIGZhbHNlO1xuXHR9XG59O1xubmF2aWdhdGVkUm93Ll9fZnVuY3Rpb25OYW1lID0gXCIuX2Zvcm1hdHRlcnMuVGFibGVGb3JtYXR0ZXIuYmluZCgkY29udHJvbCkjbmF2aWdhdGVkUm93XCI7XG5cbi8qKlxuICogTWV0aG9kIHRvIGNhbGN1bGF0ZSB0aGUgd2lkdGggb2YgYW4gTURDQ29sdW1uIGJhc2VkIG9uIHRoZSBwcm9wZXJ0eSBkZWZpbml0aW9uLlxuICogQHBhcmFtIHRoaXMgVGhlIE1EQ0NvbHVtbiBvYmplY3RcbiAqIEBwYXJhbSBlZGl0TW9kZSBUaGUgRWRpdE1vZGUgb2YgdGhlIHRhYmxlXG4gKiBAcGFyYW0gaXNQcm9wZXJ0aWVzQ2FjaGVBdmFpbGFibGUgSW5kaWNhdGVzIGlmIHRoZSBwcm9wZXJ0aWVzIGNhY2hlIGlzIGF2YWlsYWJsZVxuICogQHBhcmFtIHByb3BlcnR5TmFtZSBUaGUgbmFtZSBvZiB0aGUgcHJvcGVydHkgd2Ugd2FudCB0byBjYWxjdWxhdGUgdGhlIHdpZHRoXG4gKiBAcGFyYW0gdXNlUmVtVW5pdCBJbmRpY2F0ZXMgaWYgdGhlIHJlbSB1bml0IG11c3QgYmUgY29uY2F0ZW5hdGVkIHdpdGggdGhlIGNvbHVtbiB3aWR0aCByZXN1bHRcbiAqIEBwYXJhbSB3aWR0aEluY2x1ZGluZ0NvbHVtbkhlYWRlciBJbmRpY2F0ZXMgaWYgdGhlIGNvbHVtbiBoZWFkZXIgc2hvdWxkIGJlIGEgcGFydCBvZiB0aGUgd2lkdGggY2FsY3VsYXRpb24uXG4gKiBAcGFyYW0gaXNTb3J0YWJsZUNvbHVtbiBJbmRpY2F0ZXMgaWYgdGhlIGNvbHVtbiBpcyBzb3J0YWJsZVxuICogQHBhcmFtIGlzQ29sdW1uUmVxdWlyZWRcbiAqIEByZXR1cm5zIFRoZSB3aWR0aCBvZiB0aGUgY29sdW1uXG4gKi9cbmNvbnN0IGdldENvbHVtbldpZHRoID0gZnVuY3Rpb24gKFxuXHR0aGlzOiBDb2x1bW4sXG5cdGVkaXRNb2RlOiBGaWVsZEVkaXRNb2RlLFxuXHRpc1Byb3BlcnRpZXNDYWNoZUF2YWlsYWJsZTogYm9vbGVhbixcblx0cHJvcGVydHlOYW1lOiBzdHJpbmcsXG5cdHVzZVJlbVVuaXQgPSB0cnVlLFxuXHR3aWR0aEluY2x1ZGluZ0NvbHVtbkhlYWRlciA9IGZhbHNlLFxuXHRpc1NvcnRhYmxlQ29sdW1uID0gZmFsc2UsXG5cdGlzQ29sdW1uUmVxdWlyZWQgPSBmYWxzZVxuKTogc3RyaW5nIHwgbnVsbCB8IG51bWJlciB7XG5cdGlmICghaXNQcm9wZXJ0aWVzQ2FjaGVBdmFpbGFibGUpIHtcblx0XHRyZXR1cm4gbnVsbDtcblx0fVxuXHRjb25zdCBtZGNUYWJsZSA9IHRoaXMuZ2V0UGFyZW50KCkgYXMgTURDVGFibGU7XG5cdGxldCBwcm9wZXJ0aWVzOiBFbmhhbmNlZEZFUHJvcGVydHlJbmZvW107XG5cdGlmIChtZGNUYWJsZT8uZ2V0UGFyZW50KCk/LmlzQShcInNhcC51aS5tZGMudmFsdWVoZWxwLmNvbnRlbnQuTURDVGFibGVcIikpIHtcblx0XHRwcm9wZXJ0aWVzID0gRGVsZWdhdGVVdGlsLmdldENhY2hlZFByb3BlcnRpZXModGhpcy5nZXRQYXJlbnQoKSBhcyBNRENUYWJsZSkgYXMgRW5oYW5jZWRGRVByb3BlcnR5SW5mb1tdO1xuXHR9IGVsc2Uge1xuXHRcdHByb3BlcnRpZXMgPSAobWRjVGFibGUuZ2V0UGFyZW50KCkgYXMgVGFibGVBUEkpLmdldEVuaGFuY2VkRmV0Y2hlZFByb3BlcnR5SW5mb3MoKTtcblx0fVxuXHRpZiAoIXByb3BlcnRpZXMpIHJldHVybiBudWxsO1xuXHRjb25zdCBwcm9wZXJ0eSA9IHByb3BlcnRpZXMuZmluZCgocHJvcCkgPT4gcHJvcC5rZXkgPT09IHByb3BlcnR5TmFtZSk7XG5cdGlmICghcHJvcGVydHkpIHJldHVybiBudWxsO1xuXG5cdGxldCBjb2x1bW5XaWR0aCA9IFRhYmxlU2l6ZUhlbHBlci5nZXRNRENDb2x1bW5XaWR0aEZyb21Qcm9wZXJ0eShcblx0XHRwcm9wZXJ0eSxcblx0XHRwcm9wZXJ0aWVzLFxuXHRcdHdpZHRoSW5jbHVkaW5nQ29sdW1uSGVhZGVyLFxuXHRcdGlzU29ydGFibGVDb2x1bW4sXG5cdFx0aXNDb2x1bW5SZXF1aXJlZFxuXHQpO1xuXHRjb25zdCB1bml0T3JUaW1lem9uZSA9IHByb3BlcnR5LmV4cG9ydFNldHRpbmdzPy51bml0IHx8IHByb3BlcnR5LmV4cG9ydFNldHRpbmdzPy50aW1lem9uZTtcblx0Y29sdW1uV2lkdGggKz0gdW5pdE9yVGltZXpvbmUgPyBTaXplSGVscGVyLmdldEJ1dHRvbldpZHRoKHVuaXRPclRpbWV6b25lKSA6IDA7XG5cdGlmIChlZGl0TW9kZSA9PT0gRmllbGRFZGl0TW9kZS5FZGl0YWJsZSkge1xuXHRcdGNvbnN0IHVuaXRPckN1cnJlbmN5UHJvcGVydHkgPSBwcm9wZXJ0eS5leHBvcnRTZXR0aW5ncz8udW5pdFByb3BlcnR5OyAvLyB0aGUgdW5pdFByb3BlcnR5IGF0dHJpYnV0ZSBpcyB1c2VkIGZvciBjdXJyZW5jeSBhbmQgdW5pdCBvbiB0aGUgZXhwb3J0IHNldHRpbmdzXG5cdFx0aWYgKHVuaXRPckN1cnJlbmN5UHJvcGVydHkpIHtcblx0XHRcdGNvbHVtbldpZHRoICs9IDM7XG5cdFx0fVxuXHRcdHN3aXRjaCAocHJvcGVydHkudHlwZUNvbmZpZz8uYmFzZVR5cGUpIHtcblx0XHRcdGNhc2UgXCJEYXRlXCI6XG5cdFx0XHRjYXNlIFwiVGltZVwiOlxuXHRcdFx0Y2FzZSBcIkRhdGVUaW1lXCI6XG5cdFx0XHRcdGNvbHVtbldpZHRoICs9IDIuODtcblx0XHRcdFx0YnJlYWs7XG5cdFx0XHRkZWZhdWx0OlxuXHRcdH1cblx0fVxuXHRpZiAodXNlUmVtVW5pdCkge1xuXHRcdHJldHVybiBjb2x1bW5XaWR0aCArIFwicmVtXCI7XG5cdH1cblx0cmV0dXJuIGNvbHVtbldpZHRoO1xufTtcbmdldENvbHVtbldpZHRoLl9fZnVuY3Rpb25OYW1lID0gXCIuX2Zvcm1hdHRlcnMuVGFibGVGb3JtYXR0ZXIuYmluZCgkY29udHJvbCkjZ2V0Q29sdW1uV2lkdGhcIjtcblxuLyoqXG4gKiBNZXRob2QgdG8gY2FsY3VsYXRlIHRoZSB3aWR0aCBvZiBhbiBNRENDb2x1bW4gZm9yIHZhbHVlSGVscCB0aGUgdGFibGUuXG4gKiBAcGFyYW0gdGhpcyBUaGUgTURDQ29sdW1uIG9iamVjdFxuICogQHBhcmFtIGlzUHJvcGVydGllc0NhY2hlQXZhaWxhYmxlIEluZGljYXRlcyBpZiB0aGUgcHJvcGVydGllcyBjYWNoZSBpcyBhdmFpbGFibGVcbiAqIEBwYXJhbSBwcm9wZXJ0eU5hbWUgVGhlIG5hbWUgb2YgdGhlIHByb3BlcnR5IHdlIHdhbnQgdG8gY2FsY3VsYXRlIHRoZSB3aWR0aFxuICogQHBhcmFtIGlzVGFyZ2V0U21hbGxEZXZpY2UgSW5kaWNhdGVzIHRoZSBjdXJyZW50IGRldmljZSBoYXMgYSBzbWFsbCBkZXZpY2VcbiAqIEBwYXJhbSB3aWR0aEluY2x1ZGluZ0NvbHVtbkhlYWRlclxuICogQHJldHVybnMgVGhlIHdpZHRoIG9mIHRoZSBjb2x1bW5cbiAqL1xuY29uc3QgZ2V0Q29sdW1uV2lkdGhGb3JWYWx1ZUhlbHBUYWJsZSA9IGZ1bmN0aW9uIChcblx0dGhpczogQ29sdW1uLFxuXHRpc1Byb3BlcnRpZXNDYWNoZUF2YWlsYWJsZTogYm9vbGVhbixcblx0cHJvcGVydHlOYW1lOiBzdHJpbmcsXG5cdGlzVGFyZ2V0U21hbGxEZXZpY2U6IGJvb2xlYW4sXG5cdHdpZHRoSW5jbHVkaW5nQ29sdW1uSGVhZGVyID0gZmFsc2Vcbik6IG51bGwgfCBudW1iZXIge1xuXHRjb25zdCBpc1NtYWxsRGV2aWNlID0gQ29tbW9uVXRpbHMuaXNTbWFsbERldmljZSgpO1xuXHRjb25zdCB3aXRoVW5pdCA9ICFpc1NtYWxsRGV2aWNlO1xuXG5cdHJldHVybiAoaXNTbWFsbERldmljZSAmJiBpc1RhcmdldFNtYWxsRGV2aWNlKSB8fCAoIWlzU21hbGxEZXZpY2UgJiYgIWlzVGFyZ2V0U21hbGxEZXZpY2UpXG5cdFx0PyAodGFibGVGb3JtYXR0ZXIuZ2V0Q29sdW1uV2lkdGguY2FsbChcblx0XHRcdFx0dGhpcyxcblx0XHRcdFx0RmllbGRFZGl0TW9kZS5EaXNwbGF5LFxuXHRcdFx0XHRpc1Byb3BlcnRpZXNDYWNoZUF2YWlsYWJsZSxcblx0XHRcdFx0cHJvcGVydHlOYW1lLFxuXHRcdFx0XHR3aXRoVW5pdCxcblx0XHRcdFx0d2lkdGhJbmNsdWRpbmdDb2x1bW5IZWFkZXJcblx0XHQgICkgYXMgbnVsbCB8IG51bWJlcilcblx0XHQ6IG51bGw7XG59O1xuXG5nZXRDb2x1bW5XaWR0aEZvclZhbHVlSGVscFRhYmxlLl9fZnVuY3Rpb25OYW1lID0gXCIuX2Zvcm1hdHRlcnMuVGFibGVGb3JtYXR0ZXIuYmluZCgkY29udHJvbCkjZ2V0Q29sdW1uV2lkdGhGb3JWYWx1ZUhlbHBUYWJsZVwiO1xuXG50eXBlIEZpZWxkV3JhcHBlckZpeGVkID0gRmllbGRXcmFwcGVyICYgeyBnZXRDb250ZW50RGlzcGxheTogRnVuY3Rpb247IGdldENvbnRlbnRFZGl0OiBGdW5jdGlvbiB9O1xuZnVuY3Rpb24gaXNSYXRpbmdJbmRpY2F0b3Iob0NvbnRyb2w6IEZpZWxkV3JhcHBlckZpeGVkKTogYm9vbGVhbiB7XG5cdGlmIChvQ29udHJvbC5pc0EoXCJzYXAuZmUubWFjcm9zLmNvbnRyb2xzLkZpZWxkV3JhcHBlclwiKSkge1xuXHRcdGNvbnN0IHZDb250ZW50RGlzcGxheSA9IEFycmF5LmlzQXJyYXkob0NvbnRyb2wuZ2V0Q29udGVudERpc3BsYXkoKSlcblx0XHRcdD8gb0NvbnRyb2wuZ2V0Q29udGVudERpc3BsYXkoKVswXVxuXHRcdFx0OiBvQ29udHJvbC5nZXRDb250ZW50RGlzcGxheSgpO1xuXHRcdGlmICh2Q29udGVudERpc3BsYXkgJiYgdkNvbnRlbnREaXNwbGF5LmlzQShcInNhcC5tLlJhdGluZ0luZGljYXRvclwiKSkge1xuXHRcdFx0cmV0dXJuIHRydWU7XG5cdFx0fVxuXHR9XG5cdHJldHVybiBmYWxzZTtcbn1cblxuZnVuY3Rpb24gX3VwZGF0ZVN0eWxlQ2xhc3NGb3JSYXRpbmdJbmRpY2F0b3IoZmllbGRXcmFwcGVyOiBGaWVsZFdyYXBwZXJGaXhlZCwgbGFzdDogYm9vbGVhbik6IHZvaWQge1xuXHRjb25zdCB2Q29udGVudERpc3BsYXkgPSBBcnJheS5pc0FycmF5KGZpZWxkV3JhcHBlci5nZXRDb250ZW50RGlzcGxheSgpKVxuXHRcdD8gZmllbGRXcmFwcGVyLmdldENvbnRlbnREaXNwbGF5KClbMF1cblx0XHQ6IGZpZWxkV3JhcHBlci5nZXRDb250ZW50RGlzcGxheSgpO1xuXHRjb25zdCB2Q29udGVudEVkaXQgPSBBcnJheS5pc0FycmF5KGZpZWxkV3JhcHBlci5nZXRDb250ZW50RWRpdCgpKSA/IGZpZWxkV3JhcHBlci5nZXRDb250ZW50RWRpdCgpWzBdIDogZmllbGRXcmFwcGVyLmdldENvbnRlbnRFZGl0KCk7XG5cblx0aWYgKGxhc3QpIHtcblx0XHR2Q29udGVudERpc3BsYXkuYWRkU3R5bGVDbGFzcyhcInNhcFVpTm9NYXJnaW5Cb3R0b21cIik7XG5cdFx0dkNvbnRlbnREaXNwbGF5LmFkZFN0eWxlQ2xhc3MoXCJzYXBVaU5vTWFyZ2luVG9wXCIpO1xuXHRcdHZDb250ZW50RWRpdC5yZW1vdmVTdHlsZUNsYXNzKFwic2FwVWlUaW55TWFyZ2luQm90dG9tXCIpO1xuXHR9IGVsc2Uge1xuXHRcdHZDb250ZW50RGlzcGxheS5hZGRTdHlsZUNsYXNzKFwic2FwVWlOb01hcmdpbkJvdHRvbVwiKTtcblx0XHR2Q29udGVudERpc3BsYXkucmVtb3ZlU3R5bGVDbGFzcyhcInNhcFVpTm9NYXJnaW5Ub3BcIik7XG5cdFx0dkNvbnRlbnRFZGl0LmFkZFN0eWxlQ2xhc3MoXCJzYXBVaVRpbnlNYXJnaW5Cb3R0b21cIik7XG5cdH1cbn1cbmZ1bmN0aW9uIGdldFZCb3hWaXNpYmlsaXR5KHRoaXM6IFRhYmxlLCAuLi5hcmdzOiB1bmtub3duW10pOiBib29sZWFuIHtcblx0Y29uc3QgYUl0ZW1zID0gdGhpcy5nZXRJdGVtcygpIGFzIHVua25vd24gYXMgRmllbGRXcmFwcGVyRml4ZWRbXTtcblx0bGV0IGJMYXN0RWxlbWVudEZvdW5kID0gZmFsc2U7XG5cdGZvciAobGV0IGluZGV4ID0gYUl0ZW1zLmxlbmd0aCAtIDE7IGluZGV4ID49IDA7IGluZGV4LS0pIHtcblx0XHRpZiAoIWJMYXN0RWxlbWVudEZvdW5kKSB7XG5cdFx0XHRpZiAoYXJnc1tpbmRleF0gIT09IHRydWUpIHtcblx0XHRcdFx0Ykxhc3RFbGVtZW50Rm91bmQgPSB0cnVlO1xuXHRcdFx0XHRpZiAoaXNSYXRpbmdJbmRpY2F0b3IoYUl0ZW1zW2luZGV4XSkpIHtcblx0XHRcdFx0XHRfdXBkYXRlU3R5bGVDbGFzc0ZvclJhdGluZ0luZGljYXRvcihhSXRlbXNbaW5kZXhdLCB0cnVlKTtcblx0XHRcdFx0fSBlbHNlIHtcblx0XHRcdFx0XHRhSXRlbXNbaW5kZXhdLnJlbW92ZVN0eWxlQ2xhc3MoXCJzYXBVaVRpbnlNYXJnaW5Cb3R0b21cIik7XG5cdFx0XHRcdH1cblx0XHRcdH1cblx0XHR9IGVsc2UgaWYgKGlzUmF0aW5nSW5kaWNhdG9yKGFJdGVtc1tpbmRleF0pKSB7XG5cdFx0XHRfdXBkYXRlU3R5bGVDbGFzc0ZvclJhdGluZ0luZGljYXRvcihhSXRlbXNbaW5kZXhdLCBmYWxzZSk7XG5cdFx0fSBlbHNlIHtcblx0XHRcdGFJdGVtc1tpbmRleF0uYWRkU3R5bGVDbGFzcyhcInNhcFVpVGlueU1hcmdpbkJvdHRvbVwiKTtcblx0XHR9XG5cdH1cblx0cmV0dXJuIHRydWU7XG59XG5nZXRWQm94VmlzaWJpbGl0eS5fX2Z1bmN0aW9uTmFtZSA9IFwiLl9mb3JtYXR0ZXJzLlRhYmxlRm9ybWF0dGVyLmJpbmQoJGNvbnRyb2wpI2dldFZCb3hWaXNpYmlsaXR5XCI7XG5cbi8vIFNlZSBodHRwczovL3d3dy50eXBlc2NyaXB0bGFuZy5vcmcvZG9jcy9oYW5kYm9vay9mdW5jdGlvbnMuaHRtbCN0aGlzLXBhcmFtZXRlcnMgZm9yIG1vcmUgZGV0YWlsIG9uIHRoaXMgd2VpcmQgc3ludGF4XG4vKipcbiAqIENvbGxlY3Rpb24gb2YgdGFibGUgZm9ybWF0dGVycy5cbiAqIEBwYXJhbSB0aGlzIFRoZSBjb250ZXh0XG4gKiBAcGFyYW0gc05hbWUgVGhlIGlubmVyIGZ1bmN0aW9uIG5hbWVcbiAqIEBwYXJhbSBvQXJncyBUaGUgaW5uZXIgZnVuY3Rpb24gcGFyYW1ldGVyc1xuICogQHJldHVybnMgVGhlIHZhbHVlIGZyb20gdGhlIGlubmVyIGZ1bmN0aW9uXG4gKi9cbmNvbnN0IHRhYmxlRm9ybWF0dGVyID0gZnVuY3Rpb24gKHRoaXM6IG9iamVjdCwgc05hbWU6IHN0cmluZywgLi4ub0FyZ3M6IHVua25vd25bXSk6IHVua25vd24ge1xuXHRpZiAodGFibGVGb3JtYXR0ZXIuaGFzT3duUHJvcGVydHkoc05hbWUpKSB7XG5cdFx0cmV0dXJuICh0YWJsZUZvcm1hdHRlciBhcyB1bmtub3duIGFzIFJlY29yZDxzdHJpbmcsIEZ1bmN0aW9uPilbc05hbWVdLmFwcGx5KHRoaXMsIG9BcmdzKTtcblx0fSBlbHNlIHtcblx0XHRyZXR1cm4gXCJcIjtcblx0fVxufTtcblxudGFibGVGb3JtYXR0ZXIudmFsaWRhdGVDcmVhdGlvblJvd0ZpZWxkcyA9IHZhbGlkYXRlQ3JlYXRpb25Sb3dGaWVsZHM7XG50YWJsZUZvcm1hdHRlci5yb3dIaWdobGlnaHRpbmcgPSByb3dIaWdobGlnaHRpbmc7XG50YWJsZUZvcm1hdHRlci5uYXZpZ2F0ZWRSb3cgPSBuYXZpZ2F0ZWRSb3c7XG50YWJsZUZvcm1hdHRlci5nZXRFcnJvclN0YXR1c1RleHRWaXNpYmlsaXR5Rm9ybWF0dGVyID0gZ2V0RXJyb3JTdGF0dXNUZXh0VmlzaWJpbGl0eUZvcm1hdHRlcjtcbnRhYmxlRm9ybWF0dGVyLmdldFZCb3hWaXNpYmlsaXR5ID0gZ2V0VkJveFZpc2liaWxpdHk7XG50YWJsZUZvcm1hdHRlci5pc1JhdGluZ0luZGljYXRvciA9IGlzUmF0aW5nSW5kaWNhdG9yOyAvLyBmb3IgdW5pdCB0ZXN0c1xudGFibGVGb3JtYXR0ZXIuZ2V0Q29sdW1uV2lkdGggPSBnZXRDb2x1bW5XaWR0aDtcbnRhYmxlRm9ybWF0dGVyLmdldENvbHVtbldpZHRoRm9yVmFsdWVIZWxwVGFibGUgPSBnZXRDb2x1bW5XaWR0aEZvclZhbHVlSGVscFRhYmxlO1xuXG4vLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgQHR5cGVzY3JpcHQtZXNsaW50L2Jhbi10cy1jb21tZW50XG4vLyBAdHMtaWdub3JlXG5TY29wZS5fZm9ybWF0dGVycy5UYWJsZUZvcm1hdHRlciA9IHRhYmxlRm9ybWF0dGVyO1xuXG5leHBvcnQgZGVmYXVsdCB0YWJsZUZvcm1hdHRlcjtcbiJdLCJtYXBwaW5ncyI6Ijs7Ozs7OztFQWlCQSxNQUFNQSxtQkFBbUIsR0FBRyxTQUFBQSxDQUFVQyxXQUFtQixFQUFVO0lBQ2xFLFFBQVFBLFdBQVc7TUFDbEIsS0FBSyxPQUFPO1FBQ1gsT0FBTyxDQUFDO01BQ1QsS0FBSyxTQUFTO1FBQ2IsT0FBTyxDQUFDO01BQ1QsS0FBSyxhQUFhO1FBQ2pCLE9BQU8sQ0FBQztNQUNULEtBQUssTUFBTTtRQUNWLE9BQU8sQ0FBQztNQUNUO1FBQ0MsT0FBTyxDQUFDLENBQUM7SUFDWDtFQUNELENBQUM7O0VBRUQ7QUFDQTtBQUNBO0FBQ0E7QUFDQTtFQUNBLE1BQU1DLHlCQUF5QixHQUFHLFNBQUFBLENBQVVDLG1CQUEyRCxFQUFXO0lBQ2pILElBQUksQ0FBQ0EsbUJBQW1CLEVBQUU7TUFDekIsT0FBTyxLQUFLO0lBQ2I7SUFDQSxNQUFNQyxTQUFTLEdBQUdDLE1BQU0sQ0FBQ0MsSUFBSSxDQUFDSCxtQkFBbUIsQ0FBQztJQUNsRCxPQUNDQyxTQUFTLENBQUNHLE1BQU0sR0FBRyxDQUFDLElBQ3BCSCxTQUFTLENBQUNJLEtBQUssQ0FBQyxV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
@@ -1,6 +1,6 @@
1
1
  import Log from "sap/base/Log";
2
- import ObjectPath from "sap/base/util/ObjectPath";
3
2
  import CommonUtils from "sap/fe/core/CommonUtils";
3
+ import Scope from "sap/fe/core/formatters/Scope";
4
4
  import SizeHelper from "sap/fe/core/helpers/SizeHelper";
5
5
  import DelegateUtil from "sap/fe/macros/DelegateUtil";
6
6
  import type TableAPI from "sap/fe/macros/table/TableAPI";
@@ -47,7 +47,7 @@ const validateCreationRowFields = function (fieldValidityObject?: Record<string,
47
47
  })
48
48
  );
49
49
  };
50
- validateCreationRowFields.__functionName = "sap.fe.macros.formatters.TableFormatter#validateCreationRowFields";
50
+ validateCreationRowFields.__functionName = "._formatters.TableFormatter#validateCreationRowFields";
51
51
 
52
52
  /**
53
53
  * @param this The object status control.
@@ -76,7 +76,7 @@ const getErrorStatusTextVisibilityFormatter = function (
76
76
  }
77
77
  return statusVisibility;
78
78
  };
79
- getErrorStatusTextVisibilityFormatter.__functionName = "sap.fe.macros.formatters.TableFormatter#getErrorStatusTextVisibilityFormatter";
79
+ getErrorStatusTextVisibilityFormatter.__functionName = "._formatters.TableFormatter.bind($control)#getErrorStatusTextVisibilityFormatter";
80
80
 
81
81
  /**
82
82
  * Method to calculate the row highlighting based on the criticality value and the messages.
@@ -151,7 +151,7 @@ const rowHighlighting = function (
151
151
  const isNewObject = !hasActiveEntity && !isActiveEntity && !isInactive;
152
152
  return isDraftMode === "true" && isNewObject ? MessageType.Information : MessageType.None;
153
153
  };
154
- rowHighlighting.__functionName = "sap.fe.macros.formatters.TableFormatter#rowHighlighting";
154
+ rowHighlighting.__functionName = "._formatters.TableFormatter.bind($control)#rowHighlighting";
155
155
 
156
156
  const navigatedRow = function (this: ManagedObject, deepestPath: string): boolean {
157
157
  const sPath = this.getBindingContext()?.getPath();
@@ -161,7 +161,7 @@ const navigatedRow = function (this: ManagedObject, deepestPath: string): boolea
161
161
  return false;
162
162
  }
163
163
  };
164
- navigatedRow.__functionName = "sap.fe.macros.formatters.TableFormatter#navigatedRow";
164
+ navigatedRow.__functionName = "._formatters.TableFormatter.bind($control)#navigatedRow";
165
165
 
166
166
  /**
167
167
  * Method to calculate the width of an MDCColumn based on the property definition.
@@ -227,7 +227,7 @@ const getColumnWidth = function (
227
227
  }
228
228
  return columnWidth;
229
229
  };
230
- getColumnWidth.__functionName = "sap.fe.macros.formatters.TableFormatter#getColumnWidth";
230
+ getColumnWidth.__functionName = "._formatters.TableFormatter.bind($control)#getColumnWidth";
231
231
 
232
232
  /**
233
233
  * Method to calculate the width of an MDCColumn for valueHelp the table.
@@ -260,7 +260,7 @@ const getColumnWidthForValueHelpTable = function (
260
260
  : null;
261
261
  };
262
262
 
263
- getColumnWidthForValueHelpTable.__functionName = "sap.fe.macros.formatters.TableFormatter#getColumnWidthForValueHelpTable";
263
+ getColumnWidthForValueHelpTable.__functionName = "._formatters.TableFormatter.bind($control)#getColumnWidthForValueHelpTable";
264
264
 
265
265
  type FieldWrapperFixed = FieldWrapper & { getContentDisplay: Function; getContentEdit: Function };
266
266
  function isRatingIndicator(oControl: FieldWrapperFixed): boolean {
@@ -312,7 +312,7 @@ function getVBoxVisibility(this: Table, ...args: unknown[]): boolean {
312
312
  }
313
313
  return true;
314
314
  }
315
- getVBoxVisibility.__functionName = "sap.fe.macros.formatters.TableFormatter#getVBoxVisibility";
315
+ getVBoxVisibility.__functionName = "._formatters.TableFormatter.bind($control)#getVBoxVisibility";
316
316
 
317
317
  // See https://www.typescriptlang.org/docs/handbook/functions.html#this-parameters for more detail on this weird syntax
318
318
  /**
@@ -339,6 +339,8 @@ tableFormatter.isRatingIndicator = isRatingIndicator; // for unit tests
339
339
  tableFormatter.getColumnWidth = getColumnWidth;
340
340
  tableFormatter.getColumnWidthForValueHelpTable = getColumnWidthForValueHelpTable;
341
341
 
342
- ObjectPath.set("sap.fe.macros.formatters.TableFormatter", tableFormatter);
342
+ // eslint-disable-next-line @typescript-eslint/ban-ts-comment
343
+ // @ts-ignore
344
+ Scope._formatters.TableFormatter = tableFormatter;
343
345
 
344
346
  export default tableFormatter;
@@ -2,7 +2,7 @@
2
2
  * SAP UI development toolkit for HTML5 (SAPUI5)
3
3
  * (c) Copyright 2009-2025 SAP SE. All rights reserved
4
4
  */
5
- sap.ui.define(["sap/base/util/ObjectPath"], function (ObjectPath) {
5
+ sap.ui.define(["sap/fe/core/formatters/Scope"], function (Scope) {
6
6
  "use strict";
7
7
 
8
8
  const formatScaleAndUOM = function (separator, uom, scale) {
@@ -13,7 +13,7 @@ sap.ui.define(["sap/base/util/ObjectPath"], function (ObjectPath) {
13
13
  const onlyOneOfUOMOrScale = scale ? `${separator}${scale}` : onlyUOM;
14
14
  return uom && scale ? UOMAndScale : onlyOneOfUOMOrScale;
15
15
  };
16
- formatScaleAndUOM.__functionName = "sap.fe.macros.formatters.VisualFilterFormatter#formatScaleAndUOM";
16
+ formatScaleAndUOM.__functionName = "._formatters.VisualFilterFormatter#formatScaleAndUOM";
17
17
 
18
18
  // See https://www.typescriptlang.org/docs/handbook/functions.html#this-parameters for more detail on this weird syntax
19
19
  /**
@@ -34,7 +34,9 @@ sap.ui.define(["sap/base/util/ObjectPath"], function (ObjectPath) {
34
34
  }
35
35
  };
36
36
  visualFilterFormatter.formatScaleAndUOM = formatScaleAndUOM;
37
- ObjectPath.set("sap.fe.macros.formatters.VisualFilterFormatter", visualFilterFormatter);
37
+ // eslint-disable-next-line @typescript-eslint/ban-ts-comment
38
+ // @ts-ignore
39
+ Scope._formatters.VisualFilterFormatter = visualFilterFormatter;
38
40
  return visualFilterFormatter;
39
41
  }, false);
40
- //# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJuYW1lcyI6WyJmb3JtYXRTY2FsZUFuZFVPTSIsInNlcGFyYXRvciIsInVvbSIsInNjYWxlIiwiVU9NQW5kU2NhbGUiLCJvbmx5VU9NIiwib25seU9uZU9mVU9NT3JTY2FsZSIsIl9fZnVuY3Rpb25OYW1lIiwidmlzdWFsRmlsdGVyRm9ybWF0dGVyIiwic05hbWUiLCJoYXNPd25Qcm9wZXJ0eSIsIl9sZW4iLCJhcmd1bWVudHMiLCJsZW5ndGgiLCJvQXJncyIsIkFycmF5IiwiX2tleSIsImFwcGx5IiwiT2JqZWN0UGF0aCIsInNldCJdLCJzb3VyY2VSb290IjoiLiIsInNvdXJjZXMiOlsiVmlzdWFsRmlsdGVyRm9ybWF0dGVyLnRzIl0sInNvdXJjZXNDb250ZW50IjpbImltcG9ydCBPYmplY3RQYXRoIGZyb20gXCJzYXAvYmFzZS91dGlsL09iamVjdFBhdGhcIjtcblxuY29uc3QgZm9ybWF0U2NhbGVBbmRVT00gPSBmdW5jdGlvbiAoc2VwYXJhdG9yOiBzdHJpbmcsIHVvbT86IHN0cmluZywgc2NhbGU/OiBzdHJpbmcpOiBzdHJpbmcge1xuXHR1b20gPSB1b20gPT09IFwidW5kZWZpbmVkXCIgPyBcIlwiIDogdW9tO1xuXHRzY2FsZSA9IHNjYWxlID09PSBcInVuZGVmaW5lZFwiID8gXCJcIiA6IHNjYWxlO1xuXHRjb25zdCBVT01BbmRTY2FsZSA9IGAke3NlcGFyYXRvcn0ke3NjYWxlfSAke3VvbX1gO1xuXHRjb25zdCBvbmx5VU9NID0gdW9tID8gYCR7c2VwYXJhdG9yfSR7dW9tfWAgOiBcIlwiO1xuXHRjb25zdCBvbmx5T25lT2ZVT01PclNjYWxlID0gc2NhbGUgPyBgJHtzZXBhcmF0b3J9JHtzY2FsZX1gIDogb25seVVPTTtcblx0cmV0dXJuIHVvbSAmJiBzY2FsZSA/IFVPTUFuZFNjYWxlIDogb25seU9uZU9mVU9NT3JTY2FsZTtcbn07XG5mb3JtYXRTY2FsZUFuZFVPTS5fX2Z1bmN0aW9uTmFtZSA9IFwic2FwLmZlLm1hY3Jvcy5mb3JtYXR0ZXJzLlZpc3VhbEZpbHRlckZvcm1hdHRlciNmb3JtYXRTY2FsZUFuZFVPTVwiO1xuXG4vLyBTZWUgaHR0cHM6Ly93d3cudHlwZXNjcmlwdGxhbmcub3JnL2RvY3MvaGFuZGJvb2svZnVuY3Rpb25zLmh0bWwjdGhpcy1wYXJhbWV0ZXJzIGZvciBtb3JlIGRldGFpbCBvbiB0aGlzIHdlaXJkIHN5bnRheFxuLyoqXG4gKiBDb2xsZWN0aW9uIG9mIFZpc3VhbEZpbHRlciBmb3JtYXR0ZXJzLlxuICogQHBhcmFtIHRoaXMgVGhlIGNvbnRleHRcbiAqIEBwYXJhbSBzTmFtZSBUaGUgaW5uZXIgZnVuY3Rpb24gbmFtZVxuICogQHBhcmFtIG9BcmdzIFRoZSBpbm5lciBmdW5jdGlvbiBwYXJhbWV0ZXJzXG4gKiBAcmV0dXJucyBUaGUgdmFsdWUgZnJvbSB0aGUgaW5uZXIgZnVuY3Rpb25cbiAqL1xuY29uc3QgdmlzdWFsRmlsdGVyRm9ybWF0dGVyID0gZnVuY3Rpb24gKHRoaXM6IG9iamVjdCwgc05hbWU6IHN0cmluZywgLi4ub0FyZ3M6IHVua25vd25bXSk6IHVua25vd24ge1xuXHRpZiAodmlzdWFsRmlsdGVyRm9ybWF0dGVyLmhhc093blByb3BlcnR5KHNOYW1lKSkge1xuXHRcdHJldHVybiAodmlzdWFsRmlsdGVyRm9ybWF0dGVyIGFzIHVua25vd24gYXMgUmVjb3JkPHN0cmluZywgRnVuY3Rpb24+KVtzTmFtZV0uYXBwbHkodGhpcywgb0FyZ3MpO1xuXHR9IGVsc2Uge1xuXHRcdHJldHVybiBcIlwiO1xuXHR9XG59O1xuXG52aXN1YWxGaWx0ZXJGb3JtYXR0ZXIuZm9ybWF0U2NhbGVBbmRVT00gPSBmb3JtYXRTY2FsZUFuZFVPTTtcblxuT2JqZWN0UGF0aC5zZXQoXCJzYXAuZmUubWFjcm9zLmZvcm1hdHRlcnMuVmlzdWFsRmlsdGVyRm9ybWF0dGVyXCIsIHZpc3VhbEZpbHRlckZvcm1hdHRlcik7XG5cbmV4cG9ydCBkZWZhdWx0IHZpc3VhbEZpbHRlckZvcm1hdHRlcjtcbiJdLCJtYXBwaW5ncyI6Ijs7Ozs7OztFQUVBLE1BQU1BLGlCQUFpQixHQUFHLFNBQUFBLENBQVVDLFNBQWlCLEVBQUVDLEdBQVksRUFBRUMsS0FBYyxFQUFVO0lBQzVGRCxHQUFHLEdBQUdBLEdBQUcsS0FBSyxXQUFXLEdBQUcsRUFBRSxHQUFHQSxHQUFHO0lBQ3BDQyxLQUFLLEdBQUdBLEtBQUssS0FBSyxXQUFXLEdBQUcsRUFBRSxHQUFHQSxLQUFLO0lBQzFDLE1BQU1DLFdBQVcsR0FBRyxHQUFHSCxTQUFTLEdBQUdFLEtBQUssSUFBSUQsR0FBRyxFQUFFO0lBQ2pELE1BQU1HLE9BQU8sR0FBR0gsR0FBRyxHQUFHLEdBQUdELFNBQVMsR0FBR0MsR0FBRyxFQUFFLEdBQUcsRUFBRTtJQUMvQyxNQUFNSSxtQkFBbUIsR0FBR0gsS0FBSyxHQUFHLEdBQUdGLFNBQVMsR0FBR0UsS0FBSyxFQUFFLEdBQUdFLE9BQU87SUFDcEUsT0FBT0gsR0FBRyxJQUFJQyxLQUFLLEdBQUdDLFdBQVcsR0FBR0UsbUJBQW1CO0VBQ3hELENBQUM7RUFDRE4saUJBQWlCLENBQUNPLGNBQWMsR0FBRyxrRUFBa0U7O0VBRXJHO0VBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7RUFDQSxNQUFNQyxxQkFBcUIsR0FBRyxTQUFBQSxDQUF3QkMsS0FBYSxFQUFnQztJQUNsRyxJQUFJRCxxQkFBcUIsQ0FBQ0UsY0FBYyxDQUFDRCxLQUFLLENBQUMsRUFBRTtNQUFBLFNBQUFFLElBQUEsR0FBQUMsU0FBQSxDQUFBQyxNQUFBLEVBRHNCQyxLQUFLLE9BQUFDLEtBQUEsQ0FBQUosSUFBQSxPQUFBQSxJQUFBLFdBQUFLLElBQUEsTUFBQUEsSUFBQSxHQUFBTCxJQUFBLEVBQUFLLElBQUE7UUFBTEYsS0FBSyxDQUFBRSxJQUFBLFFBQUFKLFNBQUEsQ0FBQUksSUFBQTtNQUFBO01BRTNFLE9BQVFSLHFCQUFxQixDQUF5Q0MsS0FBSyxDQUFDLENBQUNRLEtBQUssQ0FBQyxJQUFJLEVBQUVILEtBQUssQ0FBQztJQUNoRyxDQUFDLE1BQU07TUFDTixPQUFPLEVBQUU7SUFDVjtFQUNELENBQUM7RUFFRE4scUJBQXFCLENBQUNSLGlCQUFpQixHQUFHQSxpQkFBaUI7RUFFM0RrQixVQUFVLENBQUNDLEdBQUcsQ0FBQyxnREFBZ0QsRUFBRVgscUJBQXFCLENBQUM7RUFBQyxPQUV6RUEscUJBQXFCO0FBQUEiLCJpZ25vcmVMaXN0IjpbXX0=
42
+ //# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJuYW1lcyI6WyJmb3JtYXRTY2FsZUFuZFVPTSIsInNlcGFyYXRvciIsInVvbSIsInNjYWxlIiwiVU9NQW5kU2NhbGUiLCJvbmx5VU9NIiwib25seU9uZU9mVU9NT3JTY2FsZSIsIl9fZnVuY3Rpb25OYW1lIiwidmlzdWFsRmlsdGVyRm9ybWF0dGVyIiwic05hbWUiLCJoYXNPd25Qcm9wZXJ0eSIsIl9sZW4iLCJhcmd1bWVudHMiLCJsZW5ndGgiLCJvQXJncyIsIkFycmF5IiwiX2tleSIsImFwcGx5IiwiU2NvcGUiLCJfZm9ybWF0dGVycyIsIlZpc3VhbEZpbHRlckZvcm1hdHRlciJdLCJzb3VyY2VSb290IjoiLiIsInNvdXJjZXMiOlsiVmlzdWFsRmlsdGVyRm9ybWF0dGVyLnRzIl0sInNvdXJjZXNDb250ZW50IjpbImltcG9ydCBTY29wZSBmcm9tIFwic2FwL2ZlL2NvcmUvZm9ybWF0dGVycy9TY29wZVwiO1xuXG5jb25zdCBmb3JtYXRTY2FsZUFuZFVPTSA9IGZ1bmN0aW9uIChzZXBhcmF0b3I6IHN0cmluZywgdW9tPzogc3RyaW5nLCBzY2FsZT86IHN0cmluZyk6IHN0cmluZyB7XG5cdHVvbSA9IHVvbSA9PT0gXCJ1bmRlZmluZWRcIiA/IFwiXCIgOiB1b207XG5cdHNjYWxlID0gc2NhbGUgPT09IFwidW5kZWZpbmVkXCIgPyBcIlwiIDogc2NhbGU7XG5cdGNvbnN0IFVPTUFuZFNjYWxlID0gYCR7c2VwYXJhdG9yfSR7c2NhbGV9ICR7dW9tfWA7XG5cdGNvbnN0IG9ubHlVT00gPSB1b20gPyBgJHtzZXBhcmF0b3J9JHt1b219YCA6IFwiXCI7XG5cdGNvbnN0IG9ubHlPbmVPZlVPTU9yU2NhbGUgPSBzY2FsZSA/IGAke3NlcGFyYXRvcn0ke3NjYWxlfWAgOiBvbmx5VU9NO1xuXHRyZXR1cm4gdW9tICYmIHNjYWxlID8gVU9NQW5kU2NhbGUgOiBvbmx5T25lT2ZVT01PclNjYWxlO1xufTtcbmZvcm1hdFNjYWxlQW5kVU9NLl9fZnVuY3Rpb25OYW1lID0gXCIuX2Zvcm1hdHRlcnMuVmlzdWFsRmlsdGVyRm9ybWF0dGVyI2Zvcm1hdFNjYWxlQW5kVU9NXCI7XG5cbi8vIFNlZSBodHRwczovL3d3dy50eXBlc2NyaXB0bGFuZy5vcmcvZG9jcy9oYW5kYm9vay9mdW5jdGlvbnMuaHRtbCN0aGlzLXBhcmFtZXRlcnMgZm9yIG1vcmUgZGV0YWlsIG9uIHRoaXMgd2VpcmQgc3ludGF4XG4vKipcbiAqIENvbGxlY3Rpb24gb2YgVmlzdWFsRmlsdGVyIGZvcm1hdHRlcnMuXG4gKiBAcGFyYW0gdGhpcyBUaGUgY29udGV4dFxuICogQHBhcmFtIHNOYW1lIFRoZSBpbm5lciBmdW5jdGlvbiBuYW1lXG4gKiBAcGFyYW0gb0FyZ3MgVGhlIGlubmVyIGZ1bmN0aW9uIHBhcmFtZXRlcnNcbiAqIEByZXR1cm5zIFRoZSB2YWx1ZSBmcm9tIHRoZSBpbm5lciBmdW5jdGlvblxuICovXG5jb25zdCB2aXN1YWxGaWx0ZXJGb3JtYXR0ZXIgPSBmdW5jdGlvbiAodGhpczogb2JqZWN0LCBzTmFtZTogc3RyaW5nLCAuLi5vQXJnczogdW5rbm93bltdKTogdW5rbm93biB7XG5cdGlmICh2aXN1YWxGaWx0ZXJGb3JtYXR0ZXIuaGFzT3duUHJvcGVydHkoc05hbWUpKSB7XG5cdFx0cmV0dXJuICh2aXN1YWxGaWx0ZXJGb3JtYXR0ZXIgYXMgdW5rbm93biBhcyBSZWNvcmQ8c3RyaW5nLCBGdW5jdGlvbj4pW3NOYW1lXS5hcHBseSh0aGlzLCBvQXJncyk7XG5cdH0gZWxzZSB7XG5cdFx0cmV0dXJuIFwiXCI7XG5cdH1cbn07XG5cbnZpc3VhbEZpbHRlckZvcm1hdHRlci5mb3JtYXRTY2FsZUFuZFVPTSA9IGZvcm1hdFNjYWxlQW5kVU9NO1xuLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIEB0eXBlc2NyaXB0LWVzbGludC9iYW4tdHMtY29tbWVudFxuLy8gQHRzLWlnbm9yZVxuU2NvcGUuX2Zvcm1hdHRlcnMuVmlzdWFsRmlsdGVyRm9ybWF0dGVyID0gdmlzdWFsRmlsdGVyRm9ybWF0dGVyO1xuZXhwb3J0IGRlZmF1bHQgdmlzdWFsRmlsdGVyRm9ybWF0dGVyO1xuIl0sIm1hcHBpbmdzIjoiOzs7Ozs7O0VBRUEsTUFBTUEsaUJBQWlCLEdBQUcsU0FBQUEsQ0FBVUMsU0FBaUIsRUFBRUMsR0FBWSxFQUFFQyxLQUFjLEVBQVU7SUFDNUZELEdBQUcsR0FBR0EsR0FBRyxLQUFLLFdBQVcsR0FBRyxFQUFFLEdBQUdBLEdBQUc7SUFDcENDLEtBQUssR0FBR0EsS0FBSyxLQUFLLFdBQVcsR0FBRyxFQUFFLEdBQUdBLEtBQUs7SUFDMUMsTUFBTUMsV0FBVyxHQUFHLEdBQUdILFNBQVMsR0FBR0UsS0FBSyxJQUFJRCxHQUFHLEVBQUU7SUFDakQsTUFBTUcsT0FBTyxHQUFHSCxHQUFHLEdBQUcsR0FBR0QsU0FBUyxHQUFHQyxHQUFHLEVBQUUsR0FBRyxFQUFFO0lBQy9DLE1BQU1JLG1CQUFtQixHQUFHSCxLQUFLLEdBQUcsR0FBR0YsU0FBUyxHQUFHRSxLQUFLLEVBQUUsR0FBR0UsT0FBTztJQUNwRSxPQUFPSCxHQUFHLElBQUlDLEtBQUssR0FBR0MsV0FBVyxHQUFHRSxtQkFBbUI7RUFDeEQsQ0FBQztFQUNETixpQkFBaUIsQ0FBQ08sY0FBYyxHQUFHLHNEQUFzRDs7RUFFekY7RUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtFQUNBLE1BQU1DLHFCQUFxQixHQUFHLFNBQUFBLENBQXdCQyxLQUFhLEVBQWdDO0lBQ2xHLElBQUlELHFCQUFxQixDQUFDRSxjQUFjLENBQUNELEtBQUssQ0FBQyxFQUFFO01BQUEsU0FBQUUsSUFBQSxHQUFBQyxTQUFBLENBQUFDLE1BQUEsRUFEc0JDLEtBQUssT0FBQUMsS0FBQSxDQUFBSixJQUFBLE9BQUFBLElBQUEsV0FBQUssSUFBQSxNQUFBQSxJQUFBLEdBQUFMLElBQUEsRUFBQUssSUFBQTtRQUFMRixLQUFLLENBQUFFLElBQUEsUUFBQUosU0FBQSxDQUFBSSxJQUFBO01BQUE7TUFFM0UsT0FBUVIscUJBQXFCLENBQXlDQyxLQUFLLENBQUMsQ0FBQ1EsS0FBSyxDQUFDLElBQUksRUFBRUgsS0FBSyxDQUFDO0lBQ2hHLENBQUMsTUFBTTtNQUNOLE9BQU8sRUFBRTtJQUNWO0VBQ0QsQ0FBQztFQUVETixxQkFBcUIsQ0FBQ1IsaUJBQWlCLEdBQUdBLGlCQUFpQjtFQUMzRDtFQUNBO0VBQ0FrQixLQUFLLENBQUNDLFdBQVcsQ0FBQ0MscUJBQXFCLEdBQUdaLHFCQUFxQjtFQUFDLE9BQ2pEQSxxQkFBcUI7QUFBQSIsImlnbm9yZUxpc3QiOltdfQ==