@sapui5/sap.fe.macros 1.139.0 → 1.141.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 (254) hide show
  1. package/package.json +1 -1
  2. package/src/sap/fe/macros/.library +1 -1
  3. package/src/sap/fe/macros/Chart.js +53 -2
  4. package/src/sap/fe/macros/Chart.tsx +55 -0
  5. package/src/sap/fe/macros/CollaborativeDraftHandler.js +230 -0
  6. package/src/sap/fe/macros/CollaborativeDraftHandler.tsx +218 -0
  7. package/src/sap/fe/macros/CommonHelper.js +59 -15
  8. package/src/sap/fe/macros/CommonHelper.ts +65 -14
  9. package/src/sap/fe/macros/ConditionalSwitch.js +174 -0
  10. package/src/sap/fe/macros/ConditionalSwitch.tsx +141 -0
  11. package/src/sap/fe/macros/ConditionalSwitchProperty.js +78 -0
  12. package/src/sap/fe/macros/ConditionalSwitchProperty.tsx +62 -0
  13. package/src/sap/fe/macros/Field.js +78 -64
  14. package/src/sap/fe/macros/Field.ts +97 -68
  15. package/src/sap/fe/macros/FooterContent.js +5 -2
  16. package/src/sap/fe/macros/FooterContent.tsx +4 -1
  17. package/src/sap/fe/macros/MacroAPI.js +9 -4
  18. package/src/sap/fe/macros/MacroAPI.ts +9 -4
  19. package/src/sap/fe/macros/MessageButton.js +1 -2
  20. package/src/sap/fe/macros/MessageButton.tsx +0 -1
  21. package/src/sap/fe/macros/MultiValueField.js +10 -7
  22. package/src/sap/fe/macros/MultiValueField.tsx +7 -3
  23. package/src/sap/fe/macros/Page.js +5 -7
  24. package/src/sap/fe/macros/Page.tsx +4 -6
  25. package/src/sap/fe/macros/Paginator.js +9 -4
  26. package/src/sap/fe/macros/Paginator.tsx +12 -3
  27. package/src/sap/fe/macros/RichTextEditor.js +3 -2
  28. package/src/sap/fe/macros/RichTextEditor.tsx +2 -1
  29. package/src/sap/fe/macros/Share.js +14 -2
  30. package/src/sap/fe/macros/Share.tsx +13 -0
  31. package/src/sap/fe/macros/Status.js +251 -0
  32. package/src/sap/fe/macros/Status.tsx +212 -0
  33. package/src/sap/fe/macros/ValueHelp.js +4 -28
  34. package/src/sap/fe/macros/ValueHelp.tsx +2 -42
  35. package/src/sap/fe/macros/ai/EasyFillDialog.js +11 -17
  36. package/src/sap/fe/macros/ai/EasyFillDialog.tsx +11 -16
  37. package/src/sap/fe/macros/ai/EasyFilterBar.js +246 -97
  38. package/src/sap/fe/macros/ai/EasyFilterBar.tsx +302 -106
  39. package/src/sap/fe/macros/ai/EasyFilterDataFetcher.js +76 -33
  40. package/src/sap/fe/macros/ai/EasyFilterDataFetcher.ts +89 -40
  41. package/src/sap/fe/macros/ai/SummarizationButton.js +2 -2
  42. package/src/sap/fe/macros/ai/SummarizationButton.tsx +1 -1
  43. package/src/sap/fe/macros/chart/Chart.js +2 -2
  44. package/src/sap/fe/macros/chart/Chart.tsx +1 -1
  45. package/src/sap/fe/macros/chart/ChartHelper.js +1 -2
  46. package/src/sap/fe/macros/chart/ChartHelper.ts +0 -1
  47. package/src/sap/fe/macros/chart/ChartRuntime.js +1 -2
  48. package/src/sap/fe/macros/chart/ChartRuntime.ts +0 -1
  49. package/src/sap/fe/macros/chart/MdcChartTemplate.js +5 -5
  50. package/src/sap/fe/macros/chart/MdcChartTemplate.tsx +5 -5
  51. package/src/sap/fe/macros/contentSwitcher/ContentSwitcher.js +9 -2
  52. package/src/sap/fe/macros/contentSwitcher/ContentSwitcher.tsx +8 -0
  53. package/src/sap/fe/macros/controls/BuildingBlockObjectProperty.js +5 -1
  54. package/src/sap/fe/macros/controls/BuildingBlockObjectProperty.ts +4 -0
  55. package/src/sap/fe/macros/controls/BuildingBlockWithTemplating.js +4 -2
  56. package/src/sap/fe/macros/controls/BuildingBlockWithTemplating.ts +3 -1
  57. package/src/sap/fe/macros/controls/FilterBar.js +14 -5
  58. package/src/sap/fe/macros/controls/FilterBar.ts +3 -0
  59. package/src/sap/fe/macros/controls/NumberWithUnitOrCurrency.js +2 -2
  60. package/src/sap/fe/macros/controls/NumberWithUnitOrCurrency.tsx +2 -2
  61. package/src/sap/fe/macros/controls/RadioButtons.js +61 -38
  62. package/src/sap/fe/macros/controls/RadioButtons.tsx +39 -18
  63. package/src/sap/fe/macros/controls/Section.js +4 -3
  64. package/src/sap/fe/macros/controls/Section.ts +3 -2
  65. package/src/sap/fe/macros/controls/section/SubSection.js +63 -8
  66. package/src/sap/fe/macros/controls/section/SubSection.ts +67 -1
  67. package/src/sap/fe/macros/coreUI/OperationParameterDialog.js +43 -4
  68. package/src/sap/fe/macros/coreUI/OperationParameterDialog.tsx +48 -1
  69. package/src/sap/fe/macros/designtime/Designtime.helper.js +28 -1
  70. package/src/sap/fe/macros/designtime/Designtime.helper.ts +27 -0
  71. package/src/sap/fe/macros/field/Field.js +2 -2
  72. package/src/sap/fe/macros/field/Field.tsx +1 -1
  73. package/src/sap/fe/macros/field/FieldBaseDelegate.js +13 -7
  74. package/src/sap/fe/macros/field/FieldBaseDelegate.ts +12 -8
  75. package/src/sap/fe/macros/field/FieldFormatOptions.js +25 -2
  76. package/src/sap/fe/macros/field/FieldFormatOptions.ts +13 -0
  77. package/src/sap/fe/macros/field/FieldHelper.js +2 -2
  78. package/src/sap/fe/macros/field/FieldHelper.ts +1 -4
  79. package/src/sap/fe/macros/field/FieldRuntime.js +1 -2
  80. package/src/sap/fe/macros/field/FieldRuntime.ts +0 -1
  81. package/src/sap/fe/macros/field/FieldTemplating.js +3 -3
  82. package/src/sap/fe/macros/field/FieldTemplating.ts +4 -2
  83. package/src/sap/fe/macros/filter/FilterUtils.js +233 -5
  84. package/src/sap/fe/macros/filter/FilterUtils.ts +291 -7
  85. package/src/sap/fe/macros/filterBar/FilterBar.block.js +5 -3
  86. package/src/sap/fe/macros/filterBar/FilterBar.block.tsx +4 -2
  87. package/src/sap/fe/macros/filterBar/FilterBar.js +2 -2
  88. package/src/sap/fe/macros/filterBar/FilterBar.tsx +1 -1
  89. package/src/sap/fe/macros/filterBar/FilterBarAPI.js +63 -27
  90. package/src/sap/fe/macros/filterBar/FilterBarAPI.ts +49 -3
  91. package/src/sap/fe/macros/filterBar/FilterBarDelegate.js +5 -3
  92. package/src/sap/fe/macros/filterBar/FilterBarDelegate.ts +5 -2
  93. package/src/sap/fe/macros/filterBar/mixin/FilterBarAPIStateHandler.js +7 -2
  94. package/src/sap/fe/macros/filterBar/mixin/FilterBarAPIStateHandler.ts +6 -1
  95. package/src/sap/fe/macros/form/Form.block.js +7 -8
  96. package/src/sap/fe/macros/form/Form.block.ts +4 -6
  97. package/src/sap/fe/macros/form/Form.js +1 -4
  98. package/src/sap/fe/macros/form/Form.tsx +0 -3
  99. package/src/sap/fe/macros/form/FormContainer.block.js +555 -5
  100. package/src/sap/fe/macros/form/FormContainer.block.ts +665 -7
  101. package/src/sap/fe/macros/form/FormContainer.fragment.xml +1 -0
  102. package/src/sap/fe/macros/form/FormDelegate.js +24 -8
  103. package/src/sap/fe/macros/form/FormDelegate.ts +29 -7
  104. package/src/sap/fe/macros/form/FormHelper.js +1 -2
  105. package/src/sap/fe/macros/form/FormHelper.ts +0 -1
  106. package/src/sap/fe/macros/fpm/CustomFragment.block.js +1 -2
  107. package/src/sap/fe/macros/fpm/CustomFragment.block.ts +0 -1
  108. package/src/sap/fe/macros/internal/ActionCommand.block.js +1 -2
  109. package/src/sap/fe/macros/internal/ActionCommand.block.ts +0 -1
  110. package/src/sap/fe/macros/internal/DataPoint.js +3 -2
  111. package/src/sap/fe/macros/internal/DataPoint.tsx +10 -1
  112. package/src/sap/fe/macros/internal/FilterField.block.js +19 -5
  113. package/src/sap/fe/macros/internal/FilterField.block.ts +16 -4
  114. package/src/sap/fe/macros/internal/field/DisplayStyle.js +9 -3
  115. package/src/sap/fe/macros/internal/field/DisplayStyle.tsx +10 -2
  116. package/src/sap/fe/macros/internal/field/EditStyle.js +21 -4
  117. package/src/sap/fe/macros/internal/field/EditStyle.tsx +18 -4
  118. package/src/sap/fe/macros/internal/field/FieldStructureHelper.js +3 -2
  119. package/src/sap/fe/macros/internal/field/FieldStructureHelper.ts +5 -1
  120. package/src/sap/fe/macros/internal/filterField/FilterFieldTemplate.fragment.xml +1 -0
  121. package/src/sap/fe/macros/internal/helpers/ActionHelper.js +36 -5
  122. package/src/sap/fe/macros/internal/helpers/ActionHelper.ts +34 -4
  123. package/src/sap/fe/macros/internal/valuehelp/AdditionalValueHelper.js +46 -8
  124. package/src/sap/fe/macros/internal/valuehelp/AdditionalValueHelper.ts +60 -6
  125. package/src/sap/fe/macros/internal/valuehelp/TableDelegate.js +38 -2
  126. package/src/sap/fe/macros/internal/valuehelp/TableDelegate.ts +37 -2
  127. package/src/sap/fe/macros/internal/valuehelp/ValueListDialogTable.fragment.xml +1 -1
  128. package/src/sap/fe/macros/internal/valuehelp/ValueListHelper.js +10 -3
  129. package/src/sap/fe/macros/internal/valuehelp/ValueListHelper.ts +13 -2
  130. package/src/sap/fe/macros/library.js +1 -1
  131. package/src/sap/fe/macros/mdc/adapter/StateFilterToSelectionVariant.js +2 -1
  132. package/src/sap/fe/macros/mdc/adapter/StateFilterToSelectionVariant.ts +1 -0
  133. package/src/sap/fe/macros/messagebundle.properties +24 -4
  134. package/src/sap/fe/macros/messagebundle_ar.properties +8 -2
  135. package/src/sap/fe/macros/messagebundle_bg.properties +8 -2
  136. package/src/sap/fe/macros/messagebundle_ca.properties +11 -5
  137. package/src/sap/fe/macros/messagebundle_cnr.properties +8 -2
  138. package/src/sap/fe/macros/messagebundle_cs.properties +7 -1
  139. package/src/sap/fe/macros/messagebundle_cy.properties +9 -3
  140. package/src/sap/fe/macros/messagebundle_da.properties +8 -2
  141. package/src/sap/fe/macros/messagebundle_de.properties +13 -7
  142. package/src/sap/fe/macros/messagebundle_el.properties +7 -1
  143. package/src/sap/fe/macros/messagebundle_en.properties +11 -5
  144. package/src/sap/fe/macros/messagebundle_en_GB.properties +9 -3
  145. package/src/sap/fe/macros/messagebundle_en_US_saprigi.properties +11 -5
  146. package/src/sap/fe/macros/messagebundle_es.properties +10 -4
  147. package/src/sap/fe/macros/messagebundle_es_MX.properties +11 -5
  148. package/src/sap/fe/macros/messagebundle_et.properties +9 -3
  149. package/src/sap/fe/macros/messagebundle_fi.properties +7 -1
  150. package/src/sap/fe/macros/messagebundle_fr.properties +9 -3
  151. package/src/sap/fe/macros/messagebundle_fr_CA.properties +8 -2
  152. package/src/sap/fe/macros/messagebundle_hi.properties +8 -2
  153. package/src/sap/fe/macros/messagebundle_hr.properties +8 -2
  154. package/src/sap/fe/macros/messagebundle_hu.properties +7 -1
  155. package/src/sap/fe/macros/messagebundle_id.properties +15 -9
  156. package/src/sap/fe/macros/messagebundle_it.properties +7 -1
  157. package/src/sap/fe/macros/messagebundle_iw.properties +8 -2
  158. package/src/sap/fe/macros/messagebundle_ja.properties +13 -7
  159. package/src/sap/fe/macros/messagebundle_kk.properties +11 -5
  160. package/src/sap/fe/macros/messagebundle_ko.properties +8 -2
  161. package/src/sap/fe/macros/messagebundle_lt.properties +9 -3
  162. package/src/sap/fe/macros/messagebundle_lv.properties +8 -2
  163. package/src/sap/fe/macros/messagebundle_mk.properties +8 -2
  164. package/src/sap/fe/macros/messagebundle_ms.properties +7 -1
  165. package/src/sap/fe/macros/messagebundle_nl.properties +7 -1
  166. package/src/sap/fe/macros/messagebundle_no.properties +7 -1
  167. package/src/sap/fe/macros/messagebundle_pl.properties +8 -2
  168. package/src/sap/fe/macros/messagebundle_pt.properties +7 -1
  169. package/src/sap/fe/macros/messagebundle_pt_PT.properties +7 -1
  170. package/src/sap/fe/macros/messagebundle_ro.properties +8 -2
  171. package/src/sap/fe/macros/messagebundle_ru.properties +10 -4
  172. package/src/sap/fe/macros/messagebundle_sh.properties +8 -2
  173. package/src/sap/fe/macros/messagebundle_sk.properties +7 -1
  174. package/src/sap/fe/macros/messagebundle_sl.properties +7 -1
  175. package/src/sap/fe/macros/messagebundle_sr.properties +8 -2
  176. package/src/sap/fe/macros/messagebundle_sv.properties +7 -1
  177. package/src/sap/fe/macros/messagebundle_th.properties +8 -2
  178. package/src/sap/fe/macros/messagebundle_tr.properties +7 -1
  179. package/src/sap/fe/macros/messagebundle_uk.properties +10 -4
  180. package/src/sap/fe/macros/messagebundle_vi.properties +10 -4
  181. package/src/sap/fe/macros/messagebundle_zh_CN.properties +7 -1
  182. package/src/sap/fe/macros/messagebundle_zh_TW.properties +8 -2
  183. package/src/sap/fe/macros/messages/MessageButton.js +39 -18
  184. package/src/sap/fe/macros/messages/MessageButton.ts +42 -19
  185. package/src/sap/fe/macros/messages/MessagePopover.js +4 -2
  186. package/src/sap/fe/macros/messages/MessagePopover.ts +6 -4
  187. package/src/sap/fe/macros/microchart/MicroChart.js +2 -2
  188. package/src/sap/fe/macros/microchart/MicroChart.tsx +1 -1
  189. package/src/sap/fe/macros/microchart/MicroChartContainer.js +1 -2
  190. package/src/sap/fe/macros/microchart/MicroChartContainer.ts +1 -2
  191. package/src/sap/fe/macros/microchart/MicroChartHelper.js +2 -3
  192. package/src/sap/fe/macros/microchart/MicroChartHelper.tsx +1 -2
  193. package/src/sap/fe/macros/share/ShareAPI.js +4 -29
  194. package/src/sap/fe/macros/share/ShareAPI.ts +1 -32
  195. package/src/sap/fe/macros/situations/SituationsPopover.js +3 -1
  196. package/src/sap/fe/macros/situations/SituationsPopover.ts +2 -0
  197. package/src/sap/fe/macros/table/ActionsTemplating.js +4 -8
  198. package/src/sap/fe/macros/table/ActionsTemplating.tsx +5 -8
  199. package/src/sap/fe/macros/table/BasicSearch.js +1 -1
  200. package/src/sap/fe/macros/table/BasicSearch.ts +2 -1
  201. package/src/sap/fe/macros/table/Column.js +14 -2
  202. package/src/sap/fe/macros/table/Column.ts +7 -0
  203. package/src/sap/fe/macros/table/ColumnExportSettings.js +83 -15
  204. package/src/sap/fe/macros/table/ColumnExportSettings.ts +44 -0
  205. package/src/sap/fe/macros/table/ColumnOverride.js +14 -2
  206. package/src/sap/fe/macros/table/ColumnOverride.ts +7 -0
  207. package/src/sap/fe/macros/table/MdcTableTemplate.js +7 -5
  208. package/src/sap/fe/macros/table/MdcTableTemplate.tsx +21 -11
  209. package/src/sap/fe/macros/table/QuickFilterSelector.js +12 -3
  210. package/src/sap/fe/macros/table/QuickFilterSelector.tsx +15 -2
  211. package/src/sap/fe/macros/table/Table.block.js +188 -147
  212. package/src/sap/fe/macros/table/Table.block.tsx +41 -11
  213. package/src/sap/fe/macros/table/Table.js +16 -10
  214. package/src/sap/fe/macros/table/Table.tsx +16 -10
  215. package/src/sap/fe/macros/table/TableAPI.js +224 -184
  216. package/src/sap/fe/macros/table/TableAPI.ts +63 -19
  217. package/src/sap/fe/macros/table/TableEventHandlerProvider.js +6 -6
  218. package/src/sap/fe/macros/table/TableEventHandlerProvider.ts +5 -4
  219. package/src/sap/fe/macros/table/TableHelper.js +2 -3
  220. package/src/sap/fe/macros/table/TableHelper.ts +1 -2
  221. package/src/sap/fe/macros/table/TableRuntime.js +24 -5
  222. package/src/sap/fe/macros/table/TableRuntime.ts +31 -3
  223. package/src/sap/fe/macros/table/TreeTable.js +16 -10
  224. package/src/sap/fe/macros/table/TreeTable.tsx +16 -10
  225. package/src/sap/fe/macros/table/Utils.js +8 -3
  226. package/src/sap/fe/macros/table/Utils.ts +12 -3
  227. package/src/sap/fe/macros/table/delegates/ALPTableDelegate.js +1 -2
  228. package/src/sap/fe/macros/table/delegates/ALPTableDelegate.ts +0 -1
  229. package/src/sap/fe/macros/table/delegates/TableDelegate.js +69 -34
  230. package/src/sap/fe/macros/table/delegates/TableDelegate.ts +75 -33
  231. package/src/sap/fe/macros/table/delegates/TreeTableDelegate.js +1 -2
  232. package/src/sap/fe/macros/table/delegates/TreeTableDelegate.ts +0 -1
  233. package/src/sap/fe/macros/table/massEdit/MassEditDialog.js +10 -10
  234. package/src/sap/fe/macros/table/massEdit/MassEditDialog.tsx +11 -9
  235. package/src/sap/fe/macros/table/massEdit/MassEditDialogHelper.js +14 -12
  236. package/src/sap/fe/macros/table/massEdit/MassEditDialogHelper.tsx +11 -10
  237. package/src/sap/fe/macros/table/mixin/ContextMenuHandler.js +34 -4
  238. package/src/sap/fe/macros/table/mixin/ContextMenuHandler.ts +45 -2
  239. package/src/sap/fe/macros/table/mixin/EmptyRowsHandler.js +55 -12
  240. package/src/sap/fe/macros/table/mixin/EmptyRowsHandler.ts +71 -9
  241. package/src/sap/fe/macros/table/mixin/TableAPIStateHandler.js +53 -2
  242. package/src/sap/fe/macros/table/mixin/TableAPIStateHandler.ts +55 -0
  243. package/src/sap/fe/macros/table/mixin/TableExport.js +22 -3
  244. package/src/sap/fe/macros/table/mixin/TableExport.ts +25 -4
  245. package/src/sap/fe/macros/table/mixin/TableHierarchy.js +5 -1
  246. package/src/sap/fe/macros/table/mixin/TableHierarchy.ts +7 -0
  247. package/src/sap/fe/macros/table/mixin/TableSharing.js +4 -2
  248. package/src/sap/fe/macros/table/mixin/TableSharing.ts +10 -1
  249. package/src/sap/fe/macros/valuehelp/ValueHelpDelegate.js +36 -10
  250. package/src/sap/fe/macros/valuehelp/ValueHelpDelegate.ts +44 -9
  251. package/src/sap/fe/macros/visualfilters/VisualFilter.js +5 -4
  252. package/src/sap/fe/macros/visualfilters/VisualFilter.tsx +3 -2
  253. package/src/sap/fe/macros/visualfilters/VisualFilterRuntime.js +2 -3
  254. package/src/sap/fe/macros/visualfilters/VisualFilterRuntime.ts +1 -2
@@ -73,9 +73,9 @@ sap.ui.define(["sap/fe/base/BindingToolkit", "sap/fe/core/helpers/BindingHelper"
73
73
  },
74
74
  /**
75
75
  * Return UI Control (LineItem/Chart) Operation Available Map.
76
- * @param aCollection Array of records
77
- * @param sControl Control name (lineItem / chart)
78
- * @param oContext Converter context
76
+ * @param collection Array of records
77
+ * @param control Control name (lineItem / chart)
78
+ * @param context Converter context
79
79
  * @returns The record containing all action names and their corresponding Core.OperationAvailable property paths
80
80
  */
81
81
  getOperationAvailableMap(collection, control, context) {
@@ -92,7 +92,12 @@ sap.ui.define(["sap/fe/base/BindingToolkit", "sap/fe/core/helpers/BindingHelper"
92
92
  }
93
93
  }
94
94
  } else if (record.$Type === "com.sap.vocabularies.UI.v1.DataFieldForActionGroup") {
95
- operationAvailableMap = this.getOperationAvailableMap(record.Actions, control, context);
95
+ // Merge recursive results with current operationAvailableMap
96
+ const recursiveMap = this.getOperationAvailableMap(record.Actions, control, context);
97
+ operationAvailableMap = {
98
+ ...operationAvailableMap,
99
+ ...recursiveMap
100
+ };
96
101
  }
97
102
  });
98
103
  }
@@ -157,8 +162,34 @@ sap.ui.define(["sap/fe/base/BindingToolkit", "sap/fe/core/helpers/BindingHelper"
157
162
  oMap[sKey] = oValue;
158
163
  }
159
164
  return oMap;
165
+ },
166
+ /**
167
+ * Ensures primary actions never overflow by setting priority to NeverOverflow.
168
+ * Primary action = emphasized OR has criticality defined.
169
+ * @param actions Array of actions to process
170
+ * @returns Processed actions with primary action overflow protection
171
+ */
172
+ ensurePrimaryActionNeverOverflows(actions) {
173
+ return actions.map(action => action.priority === "NeverOverflow" || !this.isPrimaryAction(action) ? action : {
174
+ ...action,
175
+ priority: "NeverOverflow"
176
+ });
177
+ },
178
+ /**
179
+ * Determines if an action is a primary action.
180
+ * Primary action = emphasized OR has criticality defined.
181
+ * @param action Action to check
182
+ * @returns True if action is primary
183
+ */
184
+ isPrimaryAction(action) {
185
+ // Check if action is emphasized
186
+ const isEmphasized = action.emphasized === true || action.type === "Emphasized";
187
+
188
+ // Check if action has criticality defined
189
+ const hasCriticality = action.criticality !== undefined && action.criticality !== null;
190
+ return isEmphasized || hasCriticality;
160
191
  }
161
192
  };
162
193
  return ActionHelper;
163
194
  }, false);
164
- //# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJuYW1lcyI6WyJBY3Rpb25IZWxwZXIiLCJnZXRNdWx0aVNlbGVjdERpc2FibGVkQWN0aW9ucyIsImNvbGxlY3Rpb25zIiwibXVsdGlTZWxlY3REaXNhYmxlZEFjdGlvbnMiLCJhY3Rpb25zIiwiZmlsdGVyIiwiY29sbGVjdGlvbiIsIiRUeXBlIiwiYWN0aW9uIiwiYWN0aW9uVGFyZ2V0IiwiQWN0aW9uVGFyZ2V0IiwiaXNCb3VuZCIsInBhcmFtZXRlciIsInBhcmFtZXRlcnMiLCJpc1BhdGhBbm5vdGF0aW9uRXhwcmVzc2lvbiIsImFubm90YXRpb25zIiwiVUkiLCJIaWRkZW4iLCJDb21tb24iLCJGaWVsZENvbnRyb2wiLCJwdXNoIiwibmFtZSIsImdldFByZXNzRXZlbnREYXRhRmllbGRGb3JBY3Rpb25CdXR0b24iLCJzSWQiLCJvQWN0aW9uIiwib1BhcmFtcyIsInNPcGVyYXRpb25BdmFpbGFibGVNYXAiLCJzSW52b2NhdGlvbkdyb3VwaW5nIiwiSW52b2NhdGlvbkdyb3VwaW5nIiwiJEVudW1NZW1iZXIiLCJDb21tb25IZWxwZXIiLCJhZGRTaW5nbGVRdW90ZXMiLCJMYWJlbCIsImdlbmVyYXRlRnVuY3Rpb24iLCJBY3Rpb24iLCJvYmplY3RUb1N0cmluZyIsImdldE51bWJlck9mQ29udGV4dHNFeHByZXNzaW9uIiwidkFjdGlvbkVuYWJsZWQiLCJmb3JDb250ZXh0TWVudSIsImFyZ3VtZW50cyIsImxlbmd0aCIsInVuZGVmaW5lZCIsInNOdW1iZXJPZlNlbGVjdGVkQ29udGV4dHMiLCJzZWxlY3RlZENvbnRleHQiLCJnZXRPcGVyYXRpb25BdmFpbGFibGVNYXAiLCJjb250cm9sIiwiY29udGV4dCIsIm9wZXJhdGlvbkF2YWlsYWJsZU1hcCIsImZvckVhY2giLCJyZWNvcmQiLCJhY3Rpb25OYW1lIiwiaW5jbHVkZXMiLCJEZXRlcm1pbmluZyIsIl9nZXRPcGVyYXRpb25BdmFpbGFibGVNYXBPZlRhYmxlIiwiX2dldE9wZXJhdGlvbkF2YWlsYWJsZU1hcE9mQ2hhcnQiLCJBY3Rpb25zIiwib0RhdGFGaWVsZEZvckFjdGlvbiIsInNBY3Rpb25OYW1lIiwib09wZXJhdGlvbkF2YWlsYWJsZU1hcCIsIm9Db252ZXJ0ZXJDb250ZXh0IiwiQ29yZSIsIk9wZXJhdGlvbkF2YWlsYWJsZSIsImJpbmRpbmdQYXJhbWV0ZXJGdWxsTmFtZSIsImZ1bGx5UXVhbGlmaWVkTmFtZSIsInRhcmdldEV4cHJlc3Npb24iLCJnZXRFeHByZXNzaW9uRnJvbUFubm90YXRpb24iLCJwYXRoIiwiYmluZGluZ0NvbnRleHRQYXRoVmlzaXRvciIsImdldENvbnZlcnRlZFR5cGVzIiwiaXNQYXRoSW5Nb2RlbEV4cHJlc3Npb24iLCJfYWRkVG9NYXAiLCJvQ29udGV4dCIsIm9SZXN1bHQiLCJnZXRBY3Rpb25QYXRoIiwic1Byb3BlcnR5Iiwic3Vic3RyaW5nIiwic0JpbmRpbmdQYXJhbWV0ZXIiLCJzS2V5Iiwib1ZhbHVlIiwib01hcCJdLCJzb3VyY2VSb290IjoiLiIsInNvdXJjZXMiOlsiQWN0aW9uSGVscGVyLnRzIl0sInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB0eXBlIHsgRGF0YUZpZWxkQWJzdHJhY3RUeXBlcywgT3BlcmF0aW9uR3JvdXBpbmdUeXBlIH0gZnJvbSBcIkBzYXAtdXgvdm9jYWJ1bGFyaWVzLXR5cGVzL3ZvY2FidWxhcmllcy9VSVwiO1xuaW1wb3J0IHsgVUlBbm5vdGF0aW9uVHlwZXMsIHR5cGUgRGF0YUZpZWxkRm9yQWN0aW9uIH0gZnJvbSBcIkBzYXAtdXgvdm9jYWJ1bGFyaWVzLXR5cGVzL3ZvY2FidWxhcmllcy9VSVwiO1xuaW1wb3J0IHsgZ2V0RXhwcmVzc2lvbkZyb21Bbm5vdGF0aW9uLCBpc1BhdGhJbk1vZGVsRXhwcmVzc2lvbiB9IGZyb20gXCJzYXAvZmUvYmFzZS9CaW5kaW5nVG9vbGtpdFwiO1xuaW1wb3J0IHR5cGUgQ29udmVydGVyQ29udGV4dCBmcm9tIFwic2FwL2ZlL2NvcmUvY29udmVydGVycy9Db252ZXJ0ZXJDb250ZXh0XCI7XG5pbXBvcnQgeyBiaW5kaW5nQ29udGV4dFBhdGhWaXNpdG9yIH0gZnJvbSBcInNhcC9mZS9jb3JlL2hlbHBlcnMvQmluZGluZ0hlbHBlclwiO1xuaW1wb3J0IHsgaXNQYXRoQW5ub3RhdGlvbkV4cHJlc3Npb24gfSBmcm9tIFwic2FwL2ZlL2NvcmUvaGVscGVycy9UeXBlR3VhcmRzXCI7XG5pbXBvcnQgdHlwZSB7IENvbXB1dGVkQW5ub3RhdGlvbkludGVyZmFjZSB9IGZyb20gXCJzYXAvZmUvY29yZS90ZW1wbGF0aW5nL1VJRm9ybWF0dGVyc1wiO1xuaW1wb3J0IENvbW1vbkhlbHBlciBmcm9tIFwic2FwL2ZlL21hY3Jvcy9Db21tb25IZWxwZXJcIjtcbmltcG9ydCB0eXBlIHsgTWV0YU1vZGVsRW51bSwgTWV0YU1vZGVsVHlwZSB9IGZyb20gXCIuLi8uLi8uLi8uLi8uLi8uLi8uLi8uLi90eXBlcy9tZXRhbW9kZWxfdHlwZXNcIjtcblxuY29uc3QgQWN0aW9uSGVscGVyID0ge1xuXHQvKipcblx0ICogUmV0dXJucyBhbiBhcnJheSBvZiBhY3Rpb25zIHRoYXQgYXJlIG5vdCBlbmFibGVkIHdpdGggYSBtdWx0aXBsZSBzZWxlY3Rpb24uXG5cdCAqIEBwYXJhbSBjb2xsZWN0aW9ucyBBcnJheSBvZiByZWNvcmRzXG5cdCAqIEByZXR1cm5zIEFuIGFycmF5IG9mIGFjdGlvbiBwYXRoc1xuXHQgKi9cblx0Z2V0TXVsdGlTZWxlY3REaXNhYmxlZEFjdGlvbnMoY29sbGVjdGlvbnM/OiBEYXRhRmllbGRBYnN0cmFjdFR5cGVzW10pOiBzdHJpbmdbXSB7XG5cdFx0Y29uc3QgbXVsdGlTZWxlY3REaXNhYmxlZEFjdGlvbnM6IHN0cmluZ1tdID0gW107XG5cdFx0Y29uc3QgYWN0aW9ucyA9IChjb2xsZWN0aW9ucz8uZmlsdGVyKChjb2xsZWN0aW9uKSA9PiBjb2xsZWN0aW9uLiRUeXBlID09PSBVSUFubm90YXRpb25UeXBlcy5EYXRhRmllbGRGb3JBY3Rpb24pID8/XG5cdFx0XHRbXSkgYXMgRGF0YUZpZWxkRm9yQWN0aW9uW107XG5cdFx0Zm9yIChjb25zdCBhY3Rpb24gb2YgYWN0aW9ucykge1xuXHRcdFx0Y29uc3QgYWN0aW9uVGFyZ2V0ID0gYWN0aW9uPy5BY3Rpb25UYXJnZXQ7XG5cdFx0XHRpZiAoYWN0aW9uVGFyZ2V0Py5pc0JvdW5kID09PSB0cnVlKSB7XG5cdFx0XHRcdGZvciAoY29uc3QgcGFyYW1ldGVyIG9mIGFjdGlvblRhcmdldC5wYXJhbWV0ZXJzKSB7XG5cdFx0XHRcdFx0aWYgKFxuXHRcdFx0XHRcdFx0aXNQYXRoQW5ub3RhdGlvbkV4cHJlc3Npb24ocGFyYW1ldGVyLmFubm90YXRpb25zLlVJPy5IaWRkZW4pIHx8XG5cdFx0XHRcdFx0XHRpc1BhdGhBbm5vdGF0aW9uRXhwcmVzc2lvbihwYXJhbWV0ZXIuYW5ub3RhdGlvbnMuQ29tbW9uPy5GaWVsZENvbnRyb2wpXG5cdFx0XHRcdFx0KSB7XG5cdFx0XHRcdFx0XHRtdWx0aVNlbGVjdERpc2FibGVkQWN0aW9ucy5wdXNoKGFjdGlvblRhcmdldC5uYW1lKTtcblx0XHRcdFx0XHR9XG5cdFx0XHRcdH1cblx0XHRcdH1cblx0XHR9XG5cblx0XHRyZXR1cm4gbXVsdGlTZWxlY3REaXNhYmxlZEFjdGlvbnM7XG5cdH0sXG5cblx0LyoqXG5cdCAqIE1ldGhvZCB0byBnZXQgdGhlIGV4cHJlc3Npb24gZm9yIHRoZSAncHJlc3MnIGV2ZW50IGZvciB0aGUgRGF0YUZpZWxkRm9yQWN0aW9uQnV0dG9uLlxuXHQgKiBAcGFyYW0gc0lkIENvbnRyb2wgSURcblx0ICogQHBhcmFtIG9BY3Rpb24gQWN0aW9uIG9iamVjdFxuXHQgKiBAcGFyYW0gb1BhcmFtcyBQYXJhbWV0ZXJzXG5cdCAqIEBwYXJhbSBvUGFyYW1zLmludm9jYXRpb25Hcm91cGluZyBJbnZvY2F0aW9uIGdyb3VwaW5nXG5cdCAqIEBwYXJhbSBvUGFyYW1zLmNvbnRyb2xJZCBDb250cm9sIElEXG5cdCAqIEBwYXJhbSBvUGFyYW1zLm9wZXJhdGlvbkF2YWlsYWJsZU1hcCBPcGVyYXRpb25BdmFpbGFibGVNYXBcblx0ICogQHBhcmFtIG9QYXJhbXMubW9kZWwgTW9kZWxcblx0ICogQHBhcmFtIG9QYXJhbXMubGFiZWwgTGFiZWxcblx0ICogQHBhcmFtIG9QYXJhbXMuY29udGV4dHMgQ29udGV4dHNcblx0ICogQHBhcmFtIHNPcGVyYXRpb25BdmFpbGFibGVNYXAgT3BlcmF0aW9uQXZhaWxhYmxlTWFwIGFzIHN0cmluZ2lmaWVkIEpTT04gb2JqZWN0XG5cdCAqIEByZXR1cm5zIFRoZSBiaW5kaW5nIGV4cHJlc3Npb25cblx0ICovXG5cdGdldFByZXNzRXZlbnREYXRhRmllbGRGb3JBY3Rpb25CdXR0b24oXG5cdFx0c0lkOiBzdHJpbmcsXG5cdFx0b0FjdGlvbjogTWV0YU1vZGVsVHlwZTxEYXRhRmllbGRGb3JBY3Rpb24+ICYgeyBJbnZvY2F0aW9uR3JvdXBpbmc6IE1ldGFNb2RlbEVudW08T3BlcmF0aW9uR3JvdXBpbmdUeXBlPiB9LFxuXHRcdG9QYXJhbXM6IHtcblx0XHRcdGludm9jYXRpb25Hcm91cGluZz86IHN0cmluZztcblx0XHRcdGNvbnRyb2xJZD86IHN0cmluZztcblx0XHRcdG9wZXJhdGlvbkF2YWlsYWJsZU1hcD86IHN0cmluZztcblx0XHRcdG1vZGVsPzogc3RyaW5nO1xuXHRcdFx0bGFiZWw/OiBzdHJpbmc7XG5cdFx0XHRjb250ZXh0cz86IHN0cmluZztcblx0XHR9LFxuXHRcdHNPcGVyYXRpb25BdmFpbGFibGVNYXA6IHN0cmluZ1xuXHQpOiBzdHJpbmcge1xuXHRcdGNvbnN0IHNJbnZvY2F0aW9uR3JvdXBpbmcgPVxuXHRcdFx0b0FjdGlvbi5JbnZvY2F0aW9uR3JvdXBpbmcgJiZcblx0XHRcdG9BY3Rpb24uSW52b2NhdGlvbkdyb3VwaW5nLiRFbnVtTWVtYmVyID09PSBcImNvbS5zYXAudm9jYWJ1bGFyaWVzLlVJLnYxLk9wZXJhdGlvbkdyb3VwaW5nVHlwZS9DaGFuZ2VTZXRcIlxuXHRcdFx0XHQ/IFwiQ2hhbmdlU2V0XCJcblx0XHRcdFx0OiBcIklzb2xhdGVkXCI7XG5cdFx0b1BhcmFtcyA9IG9QYXJhbXMgfHwge307XG5cdFx0b1BhcmFtc1tcImludm9jYXRpb25Hcm91cGluZ1wiXSA9IENvbW1vbkhlbHBlci5hZGRTaW5nbGVRdW90ZXMoc0ludm9jYXRpb25Hcm91cGluZyk7XG5cdFx0b1BhcmFtc1tcImNvbnRyb2xJZFwiXSA9IENvbW1vbkhlbHBlci5hZGRTaW5nbGVRdW90ZXMoc0lkKTtcblx0XHRvUGFyYW1zW1wib3BlcmF0aW9uQXZhaWxhYmxlTWFwXCJdID0gQ29tbW9uSGVscGVyLmFkZFNpbmdsZVF1b3RlcyhzT3BlcmF0aW9uQXZhaWxhYmxlTWFwKTtcblx0XHRvUGFyYW1zW1wibW9kZWxcIl0gPSBcIiR7JHNvdXJjZT4vfS5nZXRNb2RlbCgpXCI7XG5cdFx0b1BhcmFtc1tcImxhYmVsXCJdID0gb0FjdGlvbi5MYWJlbCAmJiBDb21tb25IZWxwZXIuYWRkU2luZ2xlUXVvdGVzKG9BY3Rpb24uTGFiZWwsIHRydWUpO1xuXG5cdFx0cmV0dXJuIENvbW1vbkhlbHBlci5nZW5lcmF0ZUZ1bmN0aW9uKFxuXHRcdFx0XCIuZWRpdEZsb3cuaW52b2tlQWN0aW9uXCIsXG5cdFx0XHRDb21tb25IZWxwZXIuYWRkU2luZ2xlUXVvdGVzKG9BY3Rpb24uQWN0aW9uISksXG5cdFx0XHRDb21tb25IZWxwZXIub2JqZWN0VG9TdHJpbmcob1BhcmFtcylcblx0XHQpO1xuXHR9LFxuXHQvKipcblx0ICogUmV0dXJuIE51bWJlciBvZiBjb250ZXh0cyBleHByZXNzaW9uLlxuXHQgKiBAcGFyYW0gdkFjdGlvbkVuYWJsZWQgU3RhdHVzIG9mIGFjdGlvbiAoc2luZ2xlIG9yIG11bHRpc2VsZWN0KVxuXHQgKiBAcGFyYW0gZm9yQ29udGV4dE1lbnUgSW5kaWNhdGVzIGlmIHRoZSBhY3Rpb24gYXBwZWFycyBpbiB0aGUgY29udGV4dCBtZW51LiBJZiBmYWxzZSwgdGhlIGFjdGlvbiBhcHBlYXJzIGluIHRoZSB0YWJsZSB0b29sYmFyXG5cdCAqIEByZXR1cm5zIE51bWJlciBvZiBjb250ZXh0cyBleHByZXNzaW9uXG5cdCAqL1xuXHRnZXROdW1iZXJPZkNvbnRleHRzRXhwcmVzc2lvbih2QWN0aW9uRW5hYmxlZDogc3RyaW5nLCBmb3JDb250ZXh0TWVudSA9IGZhbHNlKTogc3RyaW5nIHtcblx0XHRsZXQgc051bWJlck9mU2VsZWN0ZWRDb250ZXh0cztcblx0XHRjb25zdCBzZWxlY3RlZENvbnRleHQgPSAhZm9yQ29udGV4dE1lbnVcblx0XHRcdD8gXCIke2ludGVybmFsPm51bWJlck9mU2VsZWN0ZWRDb250ZXh0c31cIlxuXHRcdFx0OiBcIiR7aW50ZXJuYWw+Y29udGV4dG1lbnUvbnVtYmVyT2ZTZWxlY3RlZENvbnRleHRzfVwiO1xuXHRcdGlmICh2QWN0aW9uRW5hYmxlZCA9PT0gXCJzaW5nbGVcIikge1xuXHRcdFx0c051bWJlck9mU2VsZWN0ZWRDb250ZXh0cyA9IHNlbGVjdGVkQ29udGV4dCArIFwiID09PSAxXCI7XG5cdFx0fSBlbHNlIHtcblx0XHRcdHNOdW1iZXJPZlNlbGVjdGVkQ29udGV4dHMgPSBzZWxlY3RlZENvbnRleHQgKyBcIiA+IDBcIjtcblx0XHR9XG5cdFx0cmV0dXJuIHNOdW1iZXJPZlNlbGVjdGVkQ29udGV4dHM7XG5cdH0sXG5cdC8qKlxuXHQgKiBSZXR1cm4gVUkgQ29udHJvbCAoTGluZUl0ZW0vQ2hhcnQpIE9wZXJhdGlvbiBBdmFpbGFibGUgTWFwLlxuXHQgKiBAcGFyYW0gYUNvbGxlY3Rpb24gQXJyYXkgb2YgcmVjb3Jkc1xuXHQgKiBAcGFyYW0gc0NvbnRyb2wgQ29udHJvbCBuYW1lIChsaW5lSXRlbSAvIGNoYXJ0KVxuXHQgKiBAcGFyYW0gb0NvbnRleHQgQ29udmVydGVyIGNvbnRleHRcblx0ICogQHJldHVybnMgVGhlIHJlY29yZCBjb250YWluaW5nIGFsbCBhY3Rpb24gbmFtZXMgYW5kIHRoZWlyIGNvcnJlc3BvbmRpbmcgQ29yZS5PcGVyYXRpb25BdmFpbGFibGUgcHJvcGVydHkgcGF0aHNcblx0ICovXG5cdGdldE9wZXJhdGlvbkF2YWlsYWJsZU1hcChcblx0XHRjb2xsZWN0aW9uOiBEYXRhRmllbGRBYnN0cmFjdFR5cGVzW10gfCB1bmRlZmluZWQsXG5cdFx0Y29udHJvbDogc3RyaW5nLFxuXHRcdGNvbnRleHQ6IENvbnZlcnRlckNvbnRleHQ8dW5rbm93bj4gfCBDb21wdXRlZEFubm90YXRpb25JbnRlcmZhY2Vcblx0KTogUmVjb3JkPHN0cmluZywgdW5rbm93bj4ge1xuXHRcdGxldCBvcGVyYXRpb25BdmFpbGFibGVNYXA6IFJlY29yZDxzdHJpbmcsIHVua25vd24+ID0ge307XG5cdFx0aWYgKGNvbGxlY3Rpb24pIHtcblx0XHRcdGNvbGxlY3Rpb24uZm9yRWFjaCgocmVjb3JkOiBEYXRhRmllbGRBYnN0cmFjdFR5cGVzKSA9PiB7XG5cdFx0XHRcdGlmIChyZWNvcmQuJFR5cGUgPT09IFVJQW5ub3RhdGlvblR5cGVzLkRhdGFGaWVsZEZvckFjdGlvbikge1xuXHRcdFx0XHRcdGNvbnN0IGFjdGlvbk5hbWUgPSByZWNvcmQuQWN0aW9uIGFzIHN0cmluZztcblx0XHRcdFx0XHRpZiAoIWFjdGlvbk5hbWU/LmluY2x1ZGVzKFwiL1wiKSAmJiAhcmVjb3JkLkRldGVybWluaW5nKSB7XG5cdFx0XHRcdFx0XHRpZiAoY29udHJvbCA9PT0gXCJ0YWJsZVwiKSB7XG5cdFx0XHRcdFx0XHRcdG9wZXJhdGlvbkF2YWlsYWJsZU1hcCA9IHRoaXMuX2dldE9wZXJhdGlvbkF2YWlsYWJsZU1hcE9mVGFibGUoXG5cdFx0XHRcdFx0XHRcdFx0cmVjb3JkLFxuXHRcdFx0XHRcdFx0XHRcdGFjdGlvbk5hbWUsXG5cdFx0XHRcdFx0XHRcdFx0b3BlcmF0aW9uQXZhaWxhYmxlTWFwLFxuXHRcdFx0XHRcdFx0XHRcdGNvbnRleHQgYXMgQ29udmVydGVyQ29udGV4dDx1bmtub3duPlxuXHRcdFx0XHRcdFx0XHQpO1xuXHRcdFx0XHRcdFx0fSBlbHNlIGlmIChjb250cm9sID09PSBcImNoYXJ0XCIpIHtcblx0XHRcdFx0XHRcdFx0b3BlcmF0aW9uQXZhaWxhYmxlTWFwID0gdGhpcy5fZ2V0T3BlcmF0aW9uQXZhaWxhYmxlTWFwT2ZDaGFydChcblx0XHRcdFx0XHRcdFx0XHRhY3Rpb25OYW1lLFxuXHRcdFx0XHRcdFx0XHRcdG9wZXJhdGlvbkF2YWlsYWJsZU1hcCxcblx0XHRcdFx0XHRcdFx0XHRjb250ZXh0IGFzIENvbXB1dGVkQW5ub3RhdGlvbkludGVyZmFjZVxuXHRcdFx0XHRcdFx0XHQpO1xuXHRcdFx0XHRcdFx0fVxuXHRcdFx0XHRcdH1cblx0XHRcdFx0fSBlbHNlIGlmIChyZWNvcmQuJFR5cGUgPT09IFVJQW5ub3RhdGlvblR5cGVzLkRhdGFGaWVsZEZvckFjdGlvbkdyb3VwKSB7XG5cdFx0XHRcdFx0b3BlcmF0aW9uQXZhaWxhYmxlTWFwID0gdGhpcy5nZXRPcGVyYXRpb25BdmFpbGFibGVNYXAocmVjb3JkLkFjdGlvbnMsIGNvbnRyb2wsIGNvbnRleHQpO1xuXHRcdFx0XHR9XG5cdFx0XHR9KTtcblx0XHR9XG5cdFx0cmV0dXJuIG9wZXJhdGlvbkF2YWlsYWJsZU1hcDtcblx0fSxcblxuXHQvKipcblx0ICogUmV0dXJuIExpbmVJdGVtIEFjdGlvbiBPcGVyYXRpb24gQXZhaWxhYmxlIE1hcC5cblx0ICogQHByaXZhdGVcblx0ICogQHBhcmFtIG9EYXRhRmllbGRGb3JBY3Rpb24gRGF0YSBmaWVsZCBmb3IgYWN0aW9uIG9iamVjdFxuXHQgKiBAcGFyYW0gc0FjdGlvbk5hbWUgQWN0aW9uIG5hbWVcblx0ICogQHBhcmFtIG9PcGVyYXRpb25BdmFpbGFibGVNYXAgT3BlcmF0aW9uIGF2YWlsYWJsZSBtYXAgb2JqZWN0XG5cdCAqIEBwYXJhbSBvQ29udmVydGVyQ29udGV4dCBDb252ZXJ0ZXIgY29udGV4dCBvYmplY3Rcblx0ICogQHJldHVybnMgVGhlIHJlY29yZCBjb250YWluaW5nIGFsbCBhY3Rpb24gbmFtZSBvZiBsaW5lIGl0ZW0gYW5kIHRoZSBjb3JyZXNwb25kaW5nIENvcmUuT3BlcmF0aW9uQXZhaWxhYmxlIHByb3BlcnR5IHBhdGhcblx0ICovXG5cdF9nZXRPcGVyYXRpb25BdmFpbGFibGVNYXBPZlRhYmxlKFxuXHRcdG9EYXRhRmllbGRGb3JBY3Rpb246IERhdGFGaWVsZEZvckFjdGlvbixcblx0XHRzQWN0aW9uTmFtZTogc3RyaW5nLFxuXHRcdG9PcGVyYXRpb25BdmFpbGFibGVNYXA6IFJlY29yZDxzdHJpbmcsIHVua25vd24+LFxuXHRcdG9Db252ZXJ0ZXJDb250ZXh0OiBDb252ZXJ0ZXJDb250ZXh0PHVua25vd24+XG5cdCk6IFJlY29yZDxzdHJpbmcsIHVua25vd24+IHtcblx0XHRjb25zdCBhY3Rpb25UYXJnZXQgPSBvRGF0YUZpZWxkRm9yQWN0aW9uLkFjdGlvblRhcmdldDtcblx0XHRpZiAoYWN0aW9uVGFyZ2V0Py5hbm5vdGF0aW9ucz8uQ29yZT8uT3BlcmF0aW9uQXZhaWxhYmxlID09PSBudWxsKSB7XG5cdFx0XHQvLyBXZSBkaXNhYmxlZCBhY3Rpb24gYWR2ZXJ0aXNlbWVudCBidXQga2VwdCBpdCBpbiB0aGUgY29kZSBmb3IgdGhlIHRpbWUgYmVpbmdcblx0XHRcdC8vb09wZXJhdGlvbkF2YWlsYWJsZU1hcCA9IHRoaXMuX2FkZFRvTWFwKHNBY3Rpb25OYW1lLCBudWxsLCBvT3BlcmF0aW9uQXZhaWxhYmxlTWFwKTtcblx0XHR9IGVsc2UgaWYgKGFjdGlvblRhcmdldD8ucGFyYW1ldGVycz8ubGVuZ3RoKSB7XG5cdFx0XHRjb25zdCBiaW5kaW5nUGFyYW1ldGVyRnVsbE5hbWUgPSBhY3Rpb25UYXJnZXQucGFyYW1ldGVyc1swXS5mdWxseVF1YWxpZmllZE5hbWUsXG5cdFx0XHRcdHRhcmdldEV4cHJlc3Npb24gPSBnZXRFeHByZXNzaW9uRnJvbUFubm90YXRpb24oXG5cdFx0XHRcdFx0YWN0aW9uVGFyZ2V0Py5hbm5vdGF0aW9ucz8uQ29yZT8uT3BlcmF0aW9uQXZhaWxhYmxlLFxuXHRcdFx0XHRcdFtdLFxuXHRcdFx0XHRcdHVuZGVmaW5lZCxcblx0XHRcdFx0XHQocGF0aDogc3RyaW5nKSA9PiBiaW5kaW5nQ29udGV4dFBhdGhWaXNpdG9yKHBhdGgsIG9Db252ZXJ0ZXJDb250ZXh0LmdldENvbnZlcnRlZFR5cGVzKCksIGJpbmRpbmdQYXJhbWV0ZXJGdWxsTmFtZSlcblx0XHRcdFx0KTtcblx0XHRcdGlmIChpc1BhdGhJbk1vZGVsRXhwcmVzc2lvbih0YXJnZXRFeHByZXNzaW9uKSkge1xuXHRcdFx0XHRvT3BlcmF0aW9uQXZhaWxhYmxlTWFwID0gdGhpcy5fYWRkVG9NYXAoc0FjdGlvbk5hbWUsIHRhcmdldEV4cHJlc3Npb24ucGF0aCwgb09wZXJhdGlvbkF2YWlsYWJsZU1hcCk7XG5cdFx0XHR9IGVsc2UgaWYgKGFjdGlvblRhcmdldD8uYW5ub3RhdGlvbnM/LkNvcmU/Lk9wZXJhdGlvbkF2YWlsYWJsZSAhPT0gdW5kZWZpbmVkKSB7XG5cdFx0XHRcdG9PcGVyYXRpb25BdmFpbGFibGVNYXAgPSB0aGlzLl9hZGRUb01hcChzQWN0aW9uTmFtZSwgdGFyZ2V0RXhwcmVzc2lvbiwgb09wZXJhdGlvbkF2YWlsYWJsZU1hcCk7XG5cdFx0XHR9XG5cdFx0fVxuXHRcdHJldHVybiBvT3BlcmF0aW9uQXZhaWxhYmxlTWFwO1xuXHR9LFxuXG5cdC8qKlxuXHQgKiBSZXR1cm4gTGluZUl0ZW0gQWN0aW9uIE9wZXJhdGlvbiBBdmFpbGFibGUgTWFwLlxuXHQgKiBAcHJpdmF0ZVxuXHQgKiBAcGFyYW0gc0FjdGlvbk5hbWUgQWN0aW9uIG5hbWVcblx0ICogQHBhcmFtIG9PcGVyYXRpb25BdmFpbGFibGVNYXAgT3BlcmF0aW9uIGF2YWlsYWJsZSBtYXAgb2JqZWN0XG5cdCAqIEBwYXJhbSBvQ29udGV4dCBDb250ZXh0IG9iamVjdFxuXHQgKiBAcGFyYW0gb0NvbnRleHQuY29udGV4dCBDb250ZXh0IG9iamVjdFxuXHQgKiBAcmV0dXJucyBUaGUgcmVjb3JkIGNvbnRhaW5pbmcgYWxsIGFjdGlvbiBuYW1lIG9mIGNoYXJ0IGFuZCB0aGUgY29ycmVzcG9uZGluZyBDb3JlLk9wZXJhdGlvbkF2YWlsYWJsZSBwcm9wZXJ0eSBwYXRoXG5cdCAqL1xuXHRfZ2V0T3BlcmF0aW9uQXZhaWxhYmxlTWFwT2ZDaGFydChcblx0XHRzQWN0aW9uTmFtZTogc3RyaW5nLFxuXHRcdG9PcGVyYXRpb25BdmFpbGFibGVNYXA6IFJlY29yZDxzdHJpbmcsIHVua25vd24+LFxuXHRcdG9Db250ZXh0OiBDb21wdXRlZEFubm90YXRpb25JbnRlcmZhY2Vcblx0KTogUmVjb3JkPHN0cmluZywgdW5rbm93bj4ge1xuXHRcdGxldCBvUmVzdWx0ID0gQ29tbW9uSGVscGVyLmdldEFjdGlvblBhdGgob0NvbnRleHQuY29udGV4dCwgZmFsc2UsIHNBY3Rpb25OYW1lLCB0cnVlKTtcblx0XHRpZiAob1Jlc3VsdCA9PT0gbnVsbCkge1xuXHRcdFx0b09wZXJhdGlvbkF2YWlsYWJsZU1hcCA9IHRoaXMuX2FkZFRvTWFwKHNBY3Rpb25OYW1lLCBudWxsLCBvT3BlcmF0aW9uQXZhaWxhYmxlTWFwKTtcblx0XHR9IGVsc2Uge1xuXHRcdFx0b1Jlc3VsdCA9IENvbW1vbkhlbHBlci5nZXRBY3Rpb25QYXRoKG9Db250ZXh0LmNvbnRleHQsIGZhbHNlLCBzQWN0aW9uTmFtZSkgYXMge1xuXHRcdFx0XHRzQ29udGV4dFBhdGg6IHN0cmluZztcblx0XHRcdFx0c1Byb3BlcnR5OiBzdHJpbmc7XG5cdFx0XHRcdHNCaW5kaW5nUGFyYW1ldGVyOiBzdHJpbmc7XG5cdFx0XHR9O1xuXHRcdFx0aWYgKG9SZXN1bHQuc1Byb3BlcnR5KSB7XG5cdFx0XHRcdG9PcGVyYXRpb25BdmFpbGFibGVNYXAgPSB0aGlzLl9hZGRUb01hcChcblx0XHRcdFx0XHRzQWN0aW9uTmFtZSxcblx0XHRcdFx0XHRvUmVzdWx0LnNQcm9wZXJ0eS5zdWJzdHJpbmcob1Jlc3VsdC5zQmluZGluZ1BhcmFtZXRlci5sZW5ndGggKyAxKSxcblx0XHRcdFx0XHRvT3BlcmF0aW9uQXZhaWxhYmxlTWFwXG5cdFx0XHRcdCk7XG5cdFx0XHR9XG5cdFx0fVxuXHRcdHJldHVybiBvT3BlcmF0aW9uQXZhaWxhYmxlTWFwO1xuXHR9LFxuXG5cdC8qKlxuXHQgKiBSZXR1cm4gTWFwLlxuXHQgKiBAcHJpdmF0ZVxuXHQgKiBAcGFyYW0gc0tleSBLZXlcblx0ICogQHBhcmFtIG9WYWx1ZSBWYWx1ZVxuXHQgKiBAcGFyYW0gb01hcCBNYXAgb2JqZWN0XG5cdCAqIEByZXR1cm5zIE1hcCBvYmplY3Rcblx0ICovXG5cdF9hZGRUb01hcChzS2V5OiBzdHJpbmcsIG9WYWx1ZTogdW5rbm93biwgb01hcDogUmVjb3JkPHN0cmluZywgdW5rbm93bj4pOiBSZWNvcmQ8c3RyaW5nLCB1bmtub3duPiB7XG5cdFx0aWYgKHNLZXkgJiYgb01hcCkge1xuXHRcdFx0b01hcFtzS2V5XSA9IG9WYWx1ZTtcblx0XHR9XG5cdFx0cmV0dXJuIG9NYXA7XG5cdH1cbn07XG5cbmV4cG9ydCBkZWZhdWx0IEFjdGlvbkhlbHBlcjtcbiJdLCJtYXBwaW5ncyI6Ijs7Ozs7Ozs7Ozs7RUFVQSxNQUFNQSxZQUFZLEdBQUc7SUFDcEI7QUFDRDtBQUNBO0FBQ0E7QUFDQTtJQUNDQyw2QkFBNkJBLENBQUNDLFdBQXNDLEVBQVk7TUFDL0UsTUFBTUMsMEJBQW9DLEdBQUcsRUFBRTtNQUMvQyxNQUFNQyxPQUFPLEdBQUlGLFdBQVcsRUFBRUcsTUFBTSxDQUFFQyxVQUFVLElBQUtBLFVBQVUsQ0FBQ0MsS0FBSyxvREFBeUMsQ0FBQyxJQUM5RyxFQUEyQjtNQUM1QixLQUFLLE1BQU1DLE1BQU0sSUFBSUosT0FBTyxFQUFFO1FBQzdCLE1BQU1LLFlBQVksR0FBR0QsTUFBTSxFQUFFRSxZQUFZO1FBQ3pDLElBQUlELFlBQVksRUFBRUUsT0FBTyxLQUFLLElBQUksRUFBRTtVQUNuQyxLQUFLLE1BQU1DLFNBQVMsSUFBSUgsWUFBWSxDQUFDSSxVQUFVLEVBQUU7WUFDaEQsSUFDQ0MsMEJBQTBCLENBQUNGLFNBQVMsQ0FBQ0csV0FBVyxDQUFDQyxFQUFFLEVBQUVDLE1BQU0sQ0FBQyxJQUM1REgsMEJBQTBCLENBQUNGLFNBQVMsQ0FBQ0csV0FBVyxDQUFDRyxNQUFNLEVBQUVDLFlBQVksQ0FBQyxFQUNyRTtjQUNEaEIsMEJB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YixXQUFXLEVBQUVPLGdCQUFnQixDQUFDRSxJQUFJLEVBQUVSLHNCQUFzQixDQUFDO1FBQ3BHLENBQUMsTUFBTSxJQUFJakQsWUFBWSxFQUFFTSxXQUFXLEVBQUU2QyxJQUFJLEVBQUVDLGtCQUFrQixLQUFLcEIsU0FBUyxFQUFFO1VBQzdFaUIsc0JBQXNCLEdBQUcsSUFBSSxDQUFDWSxTQUFTLENBQUNiLFdBQVcsRUFBRU8sZ0JBQWdCLEVBQUVOLHNCQUFzQixDQUFDO1FBQy9GO01BQ0Q7TUFDQSxPQUFPQSxzQkFBc0I7SUFDOUIsQ0FBQztJQUVEO0FBQ0Q7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtJQUNDSixnQ0FBZ0NBLENBQy9CRyxXQUFtQixFQUNuQkMsc0JBQStDLEVBQy9DYSxRQUFxQyxFQUNYO01BQzFCLElBQUlDLE9BQU8sR0FBRzFDLFlBQVksQ0FBQzJDLGFBQWEsQ0FBQ0YsUUFBUSxDQUFDekIsT0FBTyxFQUFFLEtBQUssRUFBRVcsV0FBVyxFQUFFLElBQUksQ0FBQztNQUNwRixJQUFJZSxPQUFPLEtBQUssSUFBSSxFQUFFO1FBQ3JCZCxzQkFBc0IsR0FBRyxJQUFJLENBQUNZLFNBQVMsQ0FBQ2IsV0FBVyxFQUFFLElBQUksRUFBRUMsc0JBQXNCLENBQUM7TUFDbkYsQ0FBQyxNQUFNO1FBQ05jLE9BQU8sR0FBRzFDLFlBQVksQ0FBQzJDLGFBQWEsQ0FBQ0YsUUFBUSxDQUFDekIsT0FBTyxFQUFFLEtBQUssRUFBRVcsV0FBVyxDQUl4RTtRQUNELElBQUllLE9BQU8sQ0FBQ0UsU0FBUyxFQUFFO1VBQ3RCaEIsc0JBQXNCLEdBQUcsSUFBSSxDQUFDWSxTQUFTLENBQ3RDYixXQUFXLEVBQ1hlLE9BQU8sQ0FBQ0UsU0FBUyxDQUFDQyxTQUFTLENBQUNILE9BQU8sQ0FBQ0ksaUJBQWlCLENBQUNwQyxNQUFNLEdBQUcsQ0FBQyxDQUFDLEVBQ2pFa0Isc0JBQ0QsQ0FBQztRQUNGO01BQ0Q7TUFDQSxPQUFPQSxzQkFBc0I7SUFDOUIsQ0FBQztJQUVEO0FBQ0Q7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7SUFDQ1ksU0FBU0EsQ0FBQ08sSUFBWSxFQUFFQyxNQUFlLEVBQUVDLElBQTZCLEVBQTJCO01BQ2hHLElBQUlGLElBQUksSUFBSUUsSUFBSSxFQUFFO1FBQ2pCQSxJQUFJLENBQUNGLElBQUksQ0FBQyxHQUFHQyxNQUFNO01BQ3BCO01BQ0EsT0FBT0MsSUFBSTtJQUNaO0VBQ0QsQ0FBQztFQUFDLE9BRWEvRSxZQUFZO0FBQUEiLCJpZ25vcmVMaXN0IjpbXX0=
195
+ //# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJuYW1lcyI6WyJBY3Rpb25IZWxwZXIiLCJnZXRNdWx0aVNlbGVjdERpc2FibGVkQWN0aW9ucyIsImNvbGxlY3Rpb25zIiwibXVsdGlTZWxlY3REaXNhYmxlZEFjdGlvbnMiLCJhY3Rpb25zIiwiZmlsdGVyIiwiY29sbGVjdGlvbiIsIiRUeXBlIiwiYWN0aW9uIiwiYWN0aW9uVGFyZ2V0IiwiQWN0aW9uVGFyZ2V0IiwiaXNCb3VuZCIsInBhcmFtZXRlciIsInBhcmFtZXRlcnMiLCJpc1BhdGhBbm5vdGF0aW9uRXhwcmVzc2lvbiIsImFubm90YXRpb25zIiwiVUkiLCJIaWRkZW4iLCJDb21tb24iLCJGaWVsZENvbnRyb2wiLCJwdXNoIiwibmFtZSIsImdldFByZXNzRXZlbnREYXRhRmllbGRGb3JBY3Rpb25CdXR0b24iLCJzSWQiLCJvQWN0aW9uIiwib1BhcmFtcyIsInNPcGVyYXRpb25BdmFpbGFibGVNYXAiLCJzSW52b2NhdGlvbkdyb3VwaW5nIiwiSW52b2NhdGlvbkdyb3VwaW5nIiwiJEVudW1NZW1iZXIiLCJDb21tb25IZWxwZXIiLCJhZGRTaW5nbGVRdW90ZXMiLCJMYWJlbCIsImdlbmVyYXRlRnVuY3Rpb24iLCJBY3Rpb24iLCJvYmplY3RUb1N0cmluZyIsImdldE51bWJlck9mQ29udGV4dHNFeHByZXNzaW9uIiwidkFjdGlvbkVuYWJsZWQiLCJmb3JDb250ZXh0TWVudSIsImFyZ3VtZW50cyIsImxlbmd0aCIsInVuZGVmaW5lZCIsInNOdW1iZXJPZlNlbGVjdGVkQ29udGV4dHMiLCJzZWxlY3RlZENvbnRleHQiLCJnZXRPcGVyYXRpb25BdmFpbGFibGVNYXAiLCJjb250cm9sIiwiY29udGV4dCIsIm9wZXJhdGlvbkF2YWlsYWJsZU1hcCIsImZvckVhY2giLCJyZWNvcmQiLCJhY3Rpb25OYW1lIiwiaW5jbHVkZXMiLCJEZXRlcm1pbmluZyIsIl9nZXRPcGVyYXRpb25BdmFpbGFibGVNYXBPZlRhYmxlIiwiX2dldE9wZXJhdGlvbkF2YWlsYWJsZU1hcE9mQ2hhcnQiLCJyZWN1cnNpdmVNYXAiLCJBY3Rpb25zIiwib0RhdGFGaWVsZEZvckFjdGlvbiIsInNBY3Rpb25OYW1lIiwib09wZXJhdGlvbkF2YWlsYWJsZU1hcCIsIm9Db252ZXJ0ZXJDb250ZXh0IiwiQ29yZSIsIk9wZXJhdGlvbkF2YWlsYWJsZSIsImJpbmRpbmdQYXJhbWV0ZXJGdWxsTmFtZSIsImZ1bGx5UXVhbGlmaWVkTmFtZSIsInRhcmdldEV4cHJlc3Npb24iLCJnZXRFeHByZXNzaW9uRnJvbUFubm90YXRpb24iLCJwYXRoIiwiYmluZGluZ0NvbnRleHRQYXRoVmlzaXRvciIsImdldENvbnZlcnRlZFR5cGVzIiwiaXNQYXRoSW5Nb2RlbEV4cHJlc3Npb24iLCJfYWRkVG9NYXAiLCJvQ29udGV4dCIsIm9SZXN1bHQiLCJnZXRBY3Rpb25QYXRoIiwic1Byb3BlcnR5Iiwic3Vic3RyaW5nIiwic0JpbmRpbmdQYXJhbWV0ZXIiLCJzS2V5Iiwib1ZhbHVlIiwib01hcCIsImVuc3VyZVByaW1hcnlBY3Rpb25OZXZlck92ZXJmbG93cyIsIm1hcCIsInByaW9yaXR5IiwiaXNQcmltYXJ5QWN0aW9uIiwiaXNFbXBoYXNpemVkIiwiZW1waGFzaXplZCIsInR5cGUiLCJoYXNDcml0aWNhbGl0eSIsImNyaXRpY2FsaXR5Il0sInNvdXJjZVJvb3QiOiIuIiwic291cmNlcyI6WyJBY3Rpb25IZWxwZXIudHMiXSwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHR5cGUgeyBEYXRhRmllbGRBYnN0cmFjdFR5cGVzLCBPcGVyYXRpb25Hcm91cGluZ1R5cGUgfSBmcm9tIFwiQHNhcC11eC92b2NhYnVsYXJpZXMtdHlwZXMvdm9jYWJ1bGFyaWVzL1VJXCI7XG5pbXBvcnQgeyBVSUFubm90YXRpb25UeXBlcywgdHlwZSBEYXRhRmllbGRGb3JBY3Rpb24gfSBmcm9tIFwiQHNhcC11eC92b2NhYnVsYXJpZXMtdHlwZXMvdm9jYWJ1bGFyaWVzL1VJXCI7XG5pbXBvcnQgeyBnZXRFeHByZXNzaW9uRnJvbUFubm90YXRpb24sIGlzUGF0aEluTW9kZWxFeHByZXNzaW9uIH0gZnJvbSBcInNhcC9mZS9iYXNlL0JpbmRpbmdUb29sa2l0XCI7XG5pbXBvcnQgdHlwZSBDb252ZXJ0ZXJDb250ZXh0IGZyb20gXCJzYXAvZmUvY29yZS9jb252ZXJ0ZXJzL0NvbnZlcnRlckNvbnRleHRcIjtcbmltcG9ydCB7IGJpbmRpbmdDb250ZXh0UGF0aFZpc2l0b3IgfSBmcm9tIFwic2FwL2ZlL2NvcmUvaGVscGVycy9CaW5kaW5nSGVscGVyXCI7XG5pbXBvcnQgeyBpc1BhdGhBbm5vdGF0aW9uRXhwcmVzc2lvbiB9IGZyb20gXCJzYXAvZmUvY29yZS9oZWxwZXJzL1R5cGVHdWFyZHNcIjtcbmltcG9ydCB0eXBlIHsgQ29tcHV0ZWRBbm5vdGF0aW9uSW50ZXJmYWNlIH0gZnJvbSBcInNhcC9mZS9jb3JlL3RlbXBsYXRpbmcvVUlGb3JtYXR0ZXJzXCI7XG5pbXBvcnQgQ29tbW9uSGVscGVyIGZyb20gXCJzYXAvZmUvbWFjcm9zL0NvbW1vbkhlbHBlclwiO1xuaW1wb3J0IHR5cGUgeyBNZXRhTW9kZWxFbnVtLCBNZXRhTW9kZWxUeXBlIH0gZnJvbSBcIi4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uL3R5cGVzL21ldGFtb2RlbF90eXBlc1wiO1xuXG5jb25zdCBBY3Rpb25IZWxwZXIgPSB7XG5cdC8qKlxuXHQgKiBSZXR1cm5zIGFuIGFycmF5IG9mIGFjdGlvbnMgdGhhdCBhcmUgbm90IGVuYWJsZWQgd2l0aCBhIG11bHRpcGxlIHNlbGVjdGlvbi5cblx0ICogQHBhcmFtIGNvbGxlY3Rpb25zIEFycmF5IG9mIHJlY29yZHNcblx0ICogQHJldHVybnMgQW4gYXJyYXkgb2YgYWN0aW9uIHBhdGhzXG5cdCAqL1xuXHRnZXRNdWx0aVNlbGVjdERpc2FibGVkQWN0aW9ucyhjb2xsZWN0aW9ucz86IERhdGFGaWVsZEFic3RyYWN0VHlwZXNbXSk6IHN0cmluZ1tdIHtcblx0XHRjb25zdCBtdWx0aVNlbGVjdERpc2FibGVkQWN0aW9uczogc3RyaW5nW10gPSBbXTtcblx0XHRjb25zdCBhY3Rpb25zID0gKGNvbGxlY3Rpb25zPy5maWx0ZXIoKGNvbGxlY3Rpb24pID0+IGNvbGxlY3Rpb24uJFR5cGUgPT09IFVJQW5ub3RhdGlvblR5cGVzLkRhdGFGaWVsZEZvckFjdGlvbikgPz9cblx0XHRcdFtdKSBhcyBEYXRhRmllbGRGb3JBY3Rpb25bXTtcblx0XHRmb3IgKGNvbnN0IGFjdGlvbiBvZiBhY3Rpb25zKSB7XG5cdFx0XHRjb25zdCBhY3Rpb25UYXJnZXQgPSBhY3Rpb24/LkFjdGlvblRhcmdldDtcblx0XHRcdGlmIChhY3Rpb25UYXJnZXQ/LmlzQm91bmQgPT09IHRydWUpIHtcblx0XHRcdFx0Zm9yIChjb25zdCBwYXJhbWV0ZXIgb2YgYWN0aW9uVGFyZ2V0LnBhcmFtZXRlcnMpIHtcblx0XHRcdFx0XHRpZiAoXG5cdFx0XHRcdFx0XHRpc1BhdGhBbm5vdGF0aW9uRXhwcmVzc2lvbihwYXJhbWV0ZXIuYW5ub3RhdGlvbnMuVUk/LkhpZGRlbikgfHxcblx0XHRcdFx0XHRcdGlzUGF0aEFubm90YXRpb25FeHByZXNzaW9uKHBhcmFtZXRlci5hbm5vdGF0aW9ucy5Db21tb24/LkZpZWxkQ29udHJvbClcblx0XHRcdFx0XHQpIHtcblx0XHRcdFx0XHRcdG11bHRpU2VsZWN0RGlzYWJsZWRBY3Rpb25zLnB1c2goYWN0aW9uVGFyZ2V0Lm5hbWUpO1xuXHRcdFx0XHRcdH1cblx0XHRcdFx0fVxuXHRcdFx0fVxuXHRcdH1cblxuXHRcdHJldHVybiBtdWx0aVNlbGVjdERpc2FibGVkQWN0aW9ucztcblx0fSxcblxuXHQvKipcblx0ICogTWV0aG9kIHRvIGdldCB0aGUgZXhwcmVzc2lvbiBmb3IgdGhlICdwcmVzcycgZXZlbnQgZm9yIHRoZSBEYXRhRmllbGRGb3JBY3Rpb25CdXR0b24uXG5cdCAqIEBwYXJhbSBzSWQgQ29udHJvbCBJRFxuXHQgKiBAcGFyYW0gb0FjdGlvbiBBY3Rpb24gb2JqZWN0XG5cdCAqIEBwYXJhbSBvUGFyYW1zIFBhcmFtZXRlcnNcblx0ICogQHBhcmFtIG9QYXJhbXMuaW52b2NhdGlvbkdyb3VwaW5nIEludm9jYXRpb24gZ3JvdXBpbmdcblx0ICogQHBhcmFtIG9QYXJhbXMuY29udHJvbElkIENvbnRyb2wgSURcblx0ICogQHBhcmFtIG9QYXJhbXMub3BlcmF0aW9uQXZhaWxhYmxlTWFwIE9wZXJhdGlvbkF2YWlsYWJsZU1hcFxuXHQgKiBAcGFyYW0gb1BhcmFtcy5tb2RlbCBNb2RlbFxuXHQgKiBAcGFyYW0gb1BhcmFtcy5sYWJlbCBMYWJlbFxuXHQgKiBAcGFyYW0gb1BhcmFtcy5jb250ZXh0cyBDb250ZXh0c1xuXHQgKiBAcGFyYW0gc09wZXJhdGlvbkF2YWlsYWJsZU1hcCBPcGVyYXRpb25BdmFpbGFibGVNYXAgYXMgc3RyaW5naWZpZWQgSlNPTiBvYmplY3Rcblx0ICogQHJldHVybnMgVGhlIGJpbmRpbmcgZXhwcmVzc2lvblxuXHQgKi9cblx0Z2V0UHJlc3NFdmVudERhdGFGaWVsZEZvckFjdGlvbkJ1dHRvbihcblx0XHRzSWQ6IHN0cmluZyxcblx0XHRvQWN0aW9uOiBNZXRhTW9kZWxUeXBlPERhdGFGaWVsZEZvckFjdGlvbj4gJiB7IEludm9jYXRpb25Hcm91cGluZzogTWV0YU1vZGVsRW51bTxPcGVyYXRpb25Hcm91cGluZ1R5cGU+IH0sXG5cdFx0b1BhcmFtczoge1xuXHRcdFx0aW52b2NhdGlvbkdyb3VwaW5nPzogc3RyaW5nO1xuXHRcdFx0Y29udHJvbElkPzogc3RyaW5nO1xuXHRcdFx0b3BlcmF0aW9uQXZhaWxhYmxlTWFwPzogc3RyaW5nO1xuXHRcdFx0bW9kZWw/OiBzdHJpbmc7XG5cdFx0XHRsYWJlbD86IHN0cmluZztcblx0XHRcdGNvbnRleHRzPzogc3RyaW5nO1xuXHRcdH0sXG5cdFx0c09wZXJhdGlvbkF2YWlsYWJsZU1hcDogc3RyaW5nXG5cdCk6IHN0cmluZyB7XG5cdFx0Y29uc3Qgc0ludm9jYXRpb25Hcm91cGluZyA9XG5cdFx0XHRvQWN0aW9uLkludm9jYXRpb25Hcm91cGluZyAmJlxuXHRcdFx0b0FjdGlvbi5JbnZvY2F0aW9uR3JvdXBpbmcuJEVudW1NZW1iZXIgPT09IFwiY29tLnNhcC52b2NhYnVsYXJpZXMuVUkudjEuT3BlcmF0aW9uR3JvdXBpbmdUeXBlL0NoYW5nZVNldFwiXG5cdFx0XHRcdD8gXCJDaGFuZ2VTZXRcIlxuXHRcdFx0XHQ6IFwiSXNvbGF0ZWRcIjtcblx0XHRvUGFyYW1zID0gb1BhcmFtcyB8fCB7fTtcblx0XHRvUGFyYW1zW1wiaW52b2NhdGlvbkdyb3VwaW5nXCJdID0gQ29tbW9uSGVscGVyLmFkZFNpbmdsZVF1b3RlcyhzSW52b2NhdGlvbkdyb3VwaW5nKTtcblx0XHRvUGFyYW1zW1wiY29udHJvbElkXCJdID0gQ29tbW9uSGVscGVyLmFkZFNpbmdsZVF1b3RlcyhzSWQpO1xuXHRcdG9QYXJhbXNbXCJvcGVyYXRpb25BdmFpbGFibGVNYXBcIl0gPSBDb21tb25IZWxwZXIuYWRkU2luZ2xlUXVvdGVzKHNPcGVyYXRpb25BdmFpbGFibGVNYXApO1xuXHRcdG9QYXJhbXNbXCJtb2RlbFwiXSA9IFwiJHskc291cmNlPi99LmdldE1vZGVsKClcIjtcblx0XHRvUGFyYW1zW1wibGFiZWxcIl0gPSBvQWN0aW9uLkxhYmVsICYmIENvbW1vbkhlbHBlci5hZGRTaW5nbGVRdW90ZXMob0FjdGlvbi5MYWJlbCwgdHJ1ZSk7XG5cblx0XHRyZXR1cm4gQ29tbW9uSGVscGVyLmdlbmVyYXRlRnVuY3Rpb24oXG5cdFx0XHRcIi5lZGl0Rmxvdy5pbnZva2VBY3Rpb25cIixcblx0XHRcdENvbW1vbkhlbHBlci5hZGRTaW5nbGVRdW90ZXMob0FjdGlvbi5BY3Rpb24hKSxcblx0XHRcdENvbW1vbkhlbHBlci5vYmplY3RUb1N0cmluZyhvUGFyYW1zKVxuXHRcdCk7XG5cdH0sXG5cdC8qKlxuXHQgKiBSZXR1cm4gTnVtYmVyIG9mIGNvbnRleHRzIGV4cHJlc3Npb24uXG5cdCAqIEBwYXJhbSB2QWN0aW9uRW5hYmxlZCBTdGF0dXMgb2YgYWN0aW9uIChzaW5nbGUgb3IgbXVsdGlzZWxlY3QpXG5cdCAqIEBwYXJhbSBmb3JDb250ZXh0TWVudSBJbmRpY2F0ZXMgaWYgdGhlIGFjdGlvbiBhcHBlYXJzIGluIHRoZSBjb250ZXh0IG1lbnUuIElmIGZhbHNlLCB0aGUgYWN0aW9uIGFwcGVhcnMgaW4gdGhlIHRhYmxlIHRvb2xiYXJcblx0ICogQHJldHVybnMgTnVtYmVyIG9mIGNvbnRleHRzIGV4cHJlc3Npb25cblx0ICovXG5cdGdldE51bWJlck9mQ29udGV4dHNFeHByZXNzaW9uKHZBY3Rpb25FbmFibGVkOiBzdHJpbmcsIGZvckNvbnRleHRNZW51ID0gZmFsc2UpOiBzdHJpbmcge1xuXHRcdGxldCBzTnVtYmVyT2ZTZWxlY3RlZENvbnRleHRzO1xuXHRcdGNvbnN0IHNlbGVjdGVkQ29udGV4dCA9ICFmb3JDb250ZXh0TWVudVxuXHRcdFx0PyBcIiR7aW50ZXJuYWw+bnVtYmVyT2ZTZWxlY3RlZENvbnRleHRzfVwiXG5cdFx0XHQ6IFwiJHtpbnRlcm5hbD5jb250ZXh0bWVudS9udW1iZXJPZlNlbGVjdGVkQ29udGV4dHN9XCI7XG5cdFx0aWYgKHZBY3Rpb25FbmFibGVkID09PSBcInNpbmdsZVwiKSB7XG5cdFx0XHRzTnVtYmVyT2ZTZWxlY3RlZENvbnRleHRzID0gc2VsZWN0ZWRDb250ZXh0ICsgXCIgPT09IDFcIjtcblx0XHR9IGVsc2Uge1xuXHRcdFx0c051bWJlck9mU2VsZWN0ZWRDb250ZXh0cyA9IHNlbGVjdGVkQ29udGV4dCArIFwiID4gMFwiO1xuXHRcdH1cblx0XHRyZXR1cm4gc051bWJlck9mU2VsZWN0ZWRDb250ZXh0cztcblx0fSxcblx0LyoqXG5cdCAqIFJldHVybiBVSSBDb250cm9sIChMaW5lSXRlbS9DaGFydCkgT3BlcmF0aW9uIEF2YWlsYWJsZSBNYXAuXG5cdCAqIEBwYXJhbSBjb2xsZWN0aW9uIEFycmF5IG9mIHJlY29yZHNcblx0ICogQHBhcmFtIGNvbnRyb2wgQ29udHJvbCBuYW1lIChsaW5lSXRlbSAvIGNoYXJ0KVxuXHQgKiBAcGFyYW0gY29udGV4dCBDb252ZXJ0ZXIgY29udGV4dFxuXHQgKiBAcmV0dXJucyBUaGUgcmVjb3JkIGNvbnRhaW5pbmcgYWxsIGFjdGlvbiBuYW1lcyBhbmQgdGhlaXIgY29ycmVzcG9uZGluZyBDb3JlLk9wZXJhdGlvbkF2YWlsYWJsZSBwcm9wZXJ0eSBwYXRoc1xuXHQgKi9cblx0Z2V0T3BlcmF0aW9uQXZhaWxhYmxlTWFwKFxuXHRcdGNvbGxlY3Rpb246IERhdGFGaWVsZEFic3RyYWN0VHlwZXNbXSB8IHVuZGVmaW5lZCxcblx0XHRjb250cm9sOiBzdHJpbmcsXG5cdFx0Y29udGV4dDogQ29udmVydGVyQ29udGV4dDx1bmtub3duPiB8IENvbXB1dGVkQW5ub3RhdGlvbkludGVyZmFjZVxuXHQpOiBSZWNvcmQ8c3RyaW5nLCB1bmtub3duPiB7XG5cdFx0bGV0IG9wZXJhdGlvbkF2YWlsYWJsZU1hcDogUmVjb3JkPHN0cmluZywgdW5rbm93bj4gPSB7fTtcblx0XHRpZiAoY29sbGVjdGlvbikge1xuXHRcdFx0Y29sbGVjdGlvbi5mb3JFYWNoKChyZWNvcmQ6IERhdGFGaWVsZEFic3RyYWN0VHlwZXMpID0+IHtcblx0XHRcdFx0aWYgKHJlY29yZC4kVHlwZSA9PT0gVUlBbm5vdGF0aW9uVHlwZXMuRGF0YUZpZWxkRm9yQWN0aW9uKSB7XG5cdFx0XHRcdFx0Y29uc3QgYWN0aW9uTmFtZSA9IHJlY29yZC5BY3Rpb24gYXMgc3RyaW5nO1xuXHRcdFx0XHRcdGlmICghYWN0aW9uTmFtZT8uaW5jbHVkZXMoXCIvXCIpICYmICFyZWNvcmQuRGV0ZXJtaW5pbmcpIHtcblx0XHRcdFx0XHRcdGlmIChjb250cm9sID09PSBcInRhYmxlXCIpIHtcblx0XHRcdFx0XHRcdFx0b3BlcmF0aW9uQXZhaWxhYmxlTWFwID0gdGhpcy5fZ2V0T3BlcmF0aW9uQXZhaWxhYmxlTWFwT2ZUYWJsZShcblx0XHRcdFx0XHRcdFx0XHRyZWNvcmQsXG5cdFx0XHRcdFx0XHRcdFx0YWN0aW9uTmFtZSxcblx0XHRcdFx0XHRcdFx0XHRvcGVyYXRpb25BdmFpbGFibGVNYXAsXG5cdFx0XHRcdFx0XHRcdFx0Y29udGV4dCBhcyBDb252ZXJ0ZXJDb250ZXh0PHVua25vd24+XG5cdFx0XHRcdFx0XHRcdCk7XG5cdFx0XHRcdFx0XHR9IGVsc2UgaWYgKGNvbnRyb2wgPT09IFwiY2hhcnRcIikge1xuXHRcdFx0XHRcdFx0XHRvcGVyYXRpb25BdmFpbGFibGVNYXAgPSB0aGlzLl9nZXRPcGVyYXRpb25BdmFpbGFibGVNYXBPZkNoYXJ0KFxuXHRcdFx0XHRcdFx0XHRcdGFjdGlvbk5hbWUsXG5cdFx0XHRcdFx0XHRcdFx0b3BlcmF0aW9uQXZhaWxhYmxlTWFwLFxuXHRcdFx0XHRcdFx0XHRcdGNvbnRleHQgYXMgQ29tcHV0ZWRBbm5vdGF0aW9uSW50ZXJmYWNlXG5cdFx0XHRcdFx0XHRcdCk7XG5cdFx0XHRcdFx0XHR9XG5cdFx0XHRcdFx0fVxuXHRcdFx0XHR9IGVsc2UgaWYgKHJlY29yZC4kVHlwZSA9PT0gVUlBbm5vdGF0aW9uVHlwZXMuRGF0YUZpZWxkRm9yQWN0aW9uR3JvdXApIHtcblx0XHRcdFx0XHQvLyBNZXJnZSByZWN1cnNpdmUgcmVzdWx0cyB3aXRoIGN1cnJlbnQgb3BlcmF0aW9uQXZhaWxhYmxlTWFwXG5cdFx0XHRcdFx0Y29uc3QgcmVjdXJzaXZlTWFwOiBSZWNvcmQ8c3RyaW5nLCB1bmtub3duPiA9IHRoaXMuZ2V0T3BlcmF0aW9uQXZhaWxhYmxlTWFwKHJlY29yZC5BY3Rpb25zLCBjb250cm9sLCBjb250ZXh0KTtcblx0XHRcdFx0XHRvcGVyYXRpb25BdmFpbGFibGVNYXAgPSB7IC4uLm9wZXJhdGlvbkF2YWlsYWJsZU1hcCwgLi4ucmVjdXJzaXZlTWFwIH07XG5cdFx0XHRcdH1cblx0XHRcdH0pO1xuXHRcdH1cblx0XHRyZXR1cm4gb3BlcmF0aW9uQXZhaWxhYmxlTWFwO1xuXHR9LFxuXG5cdC8qKlxuXHQgKiBSZXR1cm4gTGluZUl0ZW0gQWN0aW9uIE9wZXJhdGlvbiBBdmFpbGFibGUgTWFwLlxuXHQgKiBAcHJpdmF0ZVxuXHQgKiBAcGFyYW0gb0RhdGFGaWVsZEZvckFjdGlvbiBEYXRhIGZpZWxkIGZvciBhY3Rpb24gb2JqZWN0XG5cdCAqIEBwYXJhbSBzQWN0aW9uTmFtZSBBY3Rpb24gbmFtZVxuXHQgKiBAcGFyYW0gb09wZXJhdGlvbkF2YWlsYWJsZU1hcCBPcGVyYXRpb24gYXZhaWxhYmxlIG1hcCBvYmplY3Rcblx0ICogQHBhcmFtIG9Db252ZXJ0ZXJDb250ZXh0IENvbnZlcnRlciBjb250ZXh0IG9iamVjdFxuXHQgKiBAcmV0dXJucyBUaGUgcmVjb3JkIGNvbnRhaW5pbmcgYWxsIGFjdGlvbiBuYW1lIG9mIGxpbmUgaXRlbSBhbmQgdGhlIGNvcnJlc3BvbmRpbmcgQ29yZS5PcGVyYXRpb25BdmFpbGFibGUgcHJvcGVydHkgcGF0aFxuXHQgKi9cblx0X2dldE9wZXJhdGlvbkF2YWlsYWJsZU1hcE9mVGFibGUoXG5cdFx0b0RhdGFGaWVsZEZvckFjdGlvbjogRGF0YUZpZWxkRm9yQWN0aW9uLFxuXHRcdHNBY3Rpb25OYW1lOiBzdHJpbmcsXG5cdFx0b09wZXJhdGlvbkF2YWlsYWJsZU1hcDogUmVjb3JkPHN0cmluZywgdW5rbm93bj4sXG5cdFx0b0NvbnZlcnRlckNvbnRleHQ6IENvbnZlcnRlckNvbnRleHQ8dW5rbm93bj5cblx0KTogUmVjb3JkPHN0cmluZywgdW5rbm93bj4ge1xuXHRcdGNvbnN0IGFjdGlvblRhcmdldCA9IG9EYXRhRmllbGRGb3JBY3Rpb24uQWN0aW9uVGFyZ2V0O1xuXHRcdGlmIChhY3Rpb25UYXJnZXQ/LmFubm90YXRpb25zPy5Db3JlPy5PcGVyYXRpb25BdmFpbGFibGUgPT09IG51bGwpIHtcblx0XHRcdC8vIFdlIGRpc2FibGVkIGFjdGlvbiBhZHZlcnRpc2VtZW50IGJ1dCBrZXB0IGl0IGluIHRoZSBjb2RlIGZvciB0aGUgdGltZSBiZWluZ1xuXHRcdFx0Ly9vT3BlcmF0aW9uQXZhaWxhYmxlTWFwID0gdGhpcy5fYWRkVG9NYXAoc0FjdGlvbk5hbWUsIG51bGwsIG9PcGVyYXRpb25BdmFpbGFibGVNYXApO1xuXHRcdH0gZWxzZSBpZiAoYWN0aW9uVGFyZ2V0Py5wYXJhbWV0ZXJzPy5sZW5ndGgpIHtcblx0XHRcdGNvbnN0IGJpbmRpbmdQYXJhbWV0ZXJGdWxsTmFtZSA9IGFjdGlvblRhcmdldC5wYXJhbWV0ZXJzWzBdLmZ1bGx5UXVhbGlmaWVkTmFtZSxcblx0XHRcdFx0dGFyZ2V0RXhwcmVzc2lvbiA9IGdldEV4cHJlc3Npb25Gcm9tQW5ub3RhdGlvbihcblx0XHRcdFx0XHRhY3Rpb25UYXJnZXQ/LmFubm90YXRpb25zPy5Db3JlPy5PcGVyYXRpb25BdmFpbGFibGUsXG5cdFx0XHRcdFx0W10sXG5cdFx0XHRcdFx0dW5kZWZpbmVkLFxuXHRcdFx0XHRcdChwYXRoOiBzdHJpbmcpID0+IGJpbmRpbmdDb250ZXh0UGF0aFZpc2l0b3IocGF0aCwgb0NvbnZlcnRlckNvbnRleHQuZ2V0Q29udmVydGVkVHlwZXMoKSwgYmluZGluZ1BhcmFtZXRlckZ1bGxOYW1lKVxuXHRcdFx0XHQpO1xuXHRcdFx0aWYgKGlzUGF0aEluTW9kZWxFeHByZXNzaW9uKHRhcmdldEV4cHJlc3Npb24pKSB7XG5cdFx0XHRcdG9PcGVyYXRpb25BdmFpbGFibGVNYXAgPSB0aGlzLl9hZGRUb01hcChzQWN0aW9uTmFtZSwgdGFyZ2V0RXhwcmVzc2lvbi5wYXRoLCBvT3BlcmF0aW9uQXZhaWxhYmxlTWFwKTtcblx0XHRcdH0gZWxzZSBpZiAoYWN0aW9uVGFyZ2V0Py5hbm5vdGF0aW9ucz8uQ29yZT8uT3BlcmF0aW9uQXZhaWxhYmxlICE9PSB1bmRlZmluZWQpIHtcblx0XHRcdFx0b09wZXJhdGlvbkF2YWlsYWJsZU1hcCA9IHRoaXMuX2FkZFRvTWFwKHNBY3Rpb25OYW1lLCB0YXJnZXRFeHByZXNzaW9uLCBvT3BlcmF0aW9uQXZhaWxhYmxlTWFwKTtcblx0XHRcdH1cblx0XHR9XG5cdFx0cmV0dXJuIG9PcGVyYXRpb25BdmFpbGFibGVNYXA7XG5cdH0sXG5cblx0LyoqXG5cdCAqIFJldHVybiBMaW5lSXRlbSBBY3Rpb24gT3BlcmF0aW9uIEF2YWlsYWJsZSBNYXAuXG5cdCAqIEBwcml2YXRlXG5cdCAqIEBwYXJhbSBzQWN0aW9uTmFtZSBBY3Rpb24gbmFtZVxuXHQgKiBAcGFyYW0gb09wZXJhdGlvbkF2YWlsYWJsZU1hcCBPcGVyYXRpb24gYXZhaWxhYmxlIG1hcCBvYmplY3Rcblx0ICogQHBhcmFtIG9Db250ZXh0IENvbnRleHQgb2JqZWN0XG5cdCAqIEBwYXJhbSBvQ29udGV4dC5jb250ZXh0IENvbnRleHQgb2JqZWN0XG5cdCAqIEByZXR1cm5zIFRoZSByZWNvcmQgY29udGFpbmluZyBhbGwgYWN0aW9uIG5hbWUgb2YgY2hhcnQgYW5kIHRoZSBjb3JyZXNwb25kaW5nIENvcmUuT3BlcmF0aW9uQXZhaWxhYmxlIHByb3BlcnR5IHBhdGhcblx0ICovXG5cdF9nZXRPcGVyYXRpb25BdmFpbGFibGVNYXBPZkNoYXJ0KFxuXHRcdHNBY3Rpb25OYW1lOiBzdHJpbmcsXG5cdFx0b09wZXJhdGlvbkF2YWlsYWJsZU1hcDogUmVjb3JkPHN0cmluZywgdW5rbm93bj4sXG5cdFx0b0NvbnRleHQ6IENvbXB1dGVkQW5ub3RhdGlvbkludGVyZmFjZVxuXHQpOiBSZWNvcmQ8c3RyaW5nLCB1bmtub3duPiB7XG5cdFx0bGV0IG9SZXN1bHQgPSBDb21tb25IZWxwZXIuZ2V0QWN0aW9uUGF0aChvQ29udGV4dC5jb250ZXh0LCBmYWxzZSwgc0FjdGlvbk5hbWUsIHRydWUpO1xuXHRcdGlmIChvUmVzdWx0ID09PSBudWxsKSB7XG5cdFx0XHRvT3BlcmF0aW9uQXZhaWxhYmxlTWFwID0gdGhpcy5fYWRkVG9NYXAoc0FjdGlvbk5hbWUsIG51bGwsIG9PcGVyYXRpb25BdmFpbGFibGVNYXApO1xuXHRcdH0gZWxzZSB7XG5cdFx0XHRvUmVzdWx0ID0gQ29tbW9uSGVscGVyLmdldEFjdGlvblBhdGgob0NvbnRleHQuY29udGV4dCwgZmFsc2UsIHNBY3Rpb25OYW1lKSBhcyB7XG5cdFx0XHRcdHNDb250ZXh0UGF0aDogc3RyaW5nO1xuXHRcdFx0XHRzUHJvcGVydHk6IHN0cmluZztcblx0XHRcdFx0c0JpbmRpbmdQYXJhbWV0ZXI6IHN0cmluZztcblx0XHRcdH07XG5cdFx0XHRpZiAob1Jlc3VsdC5zUHJvcGVydHkpIHtcblx0XHRcdFx0b09wZXJhdGlvbkF2YWlsYWJsZU1hcCA9IHRoaXMuX2FkZFRvTWFwKFxuXHRcdFx0XHRcdHNBY3Rpb25OYW1lLFxuXHRcdFx0XHRcdG9SZXN1bHQuc1Byb3BlcnR5LnN1YnN0cmluZyhvUmVzdWx0LnNCaW5kaW5nUGFyYW1ldGVyLmxlbmd0aCArIDEpLFxuXHRcdFx0XHRcdG9PcGVyYXRpb25BdmFpbGFibGVNYXBcblx0XHRcdFx0KTtcblx0XHRcdH1cblx0XHR9XG5cdFx0cmV0dXJuIG9PcGVyYXRpb25BdmFpbGFibGVNYXA7XG5cdH0sXG5cblx0LyoqXG5cdCAqIFJldHVybiBNYXAuXG5cdCAqIEBwcml2YXRlXG5cdCAqIEBwYXJhbSBzS2V5IEtleVxuXHQgKiBAcGFyYW0gb1ZhbHVlIFZhbHVlXG5cdCAqIEBwYXJhbSBvTWFwIE1hcCBvYmplY3Rcblx0ICogQHJldHVybnMgTWFwIG9iamVjdFxuXHQgKi9cblx0X2FkZFRvTWFwKHNLZXk6IHN0cmluZywgb1ZhbHVlOiB1bmtub3duLCBvTWFwOiBSZWNvcmQ8c3RyaW5nLCB1bmtub3duPik6IFJlY29yZDxzdHJpbmcsIHVua25vd24+IHtcblx0XHRpZiAoc0tleSAmJiBvTWFwKSB7XG5cdFx0XHRvTWFwW3NLZXldID0gb1ZhbHVlO1xuXHRcdH1cblx0XHRyZXR1cm4gb01hcDtcblx0fSxcblxuXHQvKipcblx0ICogRW5zdXJlcyBwcmltYXJ5IGFjdGlvbnMgbmV2ZXIgb3ZlcmZsb3cgYnkgc2V0dGluZyBwcmlvcml0eSB0byBOZXZlck92ZXJmbG93LlxuXHQgKiBQcmltYXJ5IGFjdGlvbiA9IGVtcGhhc2l6ZWQgT1IgaGFzIGNyaXRpY2FsaXR5IGRlZmluZWQuXG5cdCAqIEBwYXJhbSBhY3Rpb25zIEFycmF5IG9mIGFjdGlvbnMgdG8gcHJvY2Vzc1xuXHQgKiBAcmV0dXJucyBQcm9jZXNzZWQgYWN0aW9ucyB3aXRoIHByaW1hcnkgYWN0aW9uIG92ZXJmbG93IHByb3RlY3Rpb25cblx0ICovXG5cdGVuc3VyZVByaW1hcnlBY3Rpb25OZXZlck92ZXJmbG93czxUIGV4dGVuZHMgUmVjb3JkPHN0cmluZywgdW5rbm93bj4+KGFjdGlvbnM6IFRbXSk6IFRbXSB7XG5cdFx0cmV0dXJuIGFjdGlvbnMubWFwKChhY3Rpb24pID0+XG5cdFx0XHRhY3Rpb24ucHJpb3JpdHkgPT09IFwiTmV2ZXJPdmVyZmxvd1wiIHx8ICF0aGlzLmlzUHJpbWFyeUFjdGlvbihhY3Rpb24pID8gYWN0aW9uIDogeyAuLi5hY3Rpb24sIHByaW9yaXR5OiBcIk5ldmVyT3ZlcmZsb3dcIiB9XG5cdFx0KTtcblx0fSxcblxuXHQvKipcblx0ICogRGV0ZXJtaW5lcyBpZiBhbiBhY3Rpb24gaXMgYSBwcmltYXJ5IGFjdGlvbi5cblx0ICogUHJpbWFyeSBhY3Rpb24gPSBlbXBoYXNpemVkIE9SIGhhcyBjcml0aWNhbGl0eSBkZWZpbmVkLlxuXHQgKiBAcGFyYW0gYWN0aW9uIEFjdGlvbiB0byBjaGVja1xuXHQgKiBAcmV0dXJucyBUcnVlIGlmIGFjdGlvbiBpcyBwcmltYXJ5XG5cdCAqL1xuXHRpc1ByaW1hcnlBY3Rpb24oYWN0aW9uOiBSZWNvcmQ8c3RyaW5nLCB1bmtub3duPik6IGJvb2xlYW4ge1xuXHRcdC8vIENoZWNrIGlmIGFjdGlvbiBpcyBlbXBoYXNpemVkXG5cdFx0Y29uc3QgaXNFbXBoYXNpemVkID0gYWN0aW9uLmVtcGhhc2l6ZWQgPT09IHRydWUgfHwgYWN0aW9uLnR5cGUgPT09IFwiRW1waGFzaXplZFwiO1xuXG5cdFx0Ly8gQ2hlY2sgaWYgYWN0aW9uIGhhcyBjcml0aWNhbGl0eSBkZWZpbmVkXG5cdFx0Y29uc3QgaGFzQ3JpdGljYWxpdHkgPSBhY3Rpb24uY3JpdGljYWxpdHkgIT09IHVuZGVmaW5lZCAmJiBhY3Rpb24uY3JpdGljYWxpdHkgIT09IG51bGw7XG5cblx0XHRyZXR1cm4gaXNFbXBoYXNpemVkIHx8IGhhc0NyaXRpY2FsaXR5O1xuXHR9XG59O1xuXG5l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
@@ -100,9 +100,9 @@ const ActionHelper = {
100
100
  },
101
101
  /**
102
102
  * Return UI Control (LineItem/Chart) Operation Available Map.
103
- * @param aCollection Array of records
104
- * @param sControl Control name (lineItem / chart)
105
- * @param oContext Converter context
103
+ * @param collection Array of records
104
+ * @param control Control name (lineItem / chart)
105
+ * @param context Converter context
106
106
  * @returns The record containing all action names and their corresponding Core.OperationAvailable property paths
107
107
  */
108
108
  getOperationAvailableMap(
@@ -132,7 +132,9 @@ const ActionHelper = {
132
132
  }
133
133
  }
134
134
  } else if (record.$Type === UIAnnotationTypes.DataFieldForActionGroup) {
135
- operationAvailableMap = this.getOperationAvailableMap(record.Actions, control, context);
135
+ // Merge recursive results with current operationAvailableMap
136
+ const recursiveMap: Record<string, unknown> = this.getOperationAvailableMap(record.Actions, control, context);
137
+ operationAvailableMap = { ...operationAvailableMap, ...recursiveMap };
136
138
  }
137
139
  });
138
140
  }
@@ -222,6 +224,34 @@ const ActionHelper = {
222
224
  oMap[sKey] = oValue;
223
225
  }
224
226
  return oMap;
227
+ },
228
+
229
+ /**
230
+ * Ensures primary actions never overflow by setting priority to NeverOverflow.
231
+ * Primary action = emphasized OR has criticality defined.
232
+ * @param actions Array of actions to process
233
+ * @returns Processed actions with primary action overflow protection
234
+ */
235
+ ensurePrimaryActionNeverOverflows<T extends Record<string, unknown>>(actions: T[]): T[] {
236
+ return actions.map((action) =>
237
+ action.priority === "NeverOverflow" || !this.isPrimaryAction(action) ? action : { ...action, priority: "NeverOverflow" }
238
+ );
239
+ },
240
+
241
+ /**
242
+ * Determines if an action is a primary action.
243
+ * Primary action = emphasized OR has criticality defined.
244
+ * @param action Action to check
245
+ * @returns True if action is primary
246
+ */
247
+ isPrimaryAction(action: Record<string, unknown>): boolean {
248
+ // Check if action is emphasized
249
+ const isEmphasized = action.emphasized === true || action.type === "Emphasized";
250
+
251
+ // Check if action has criticality defined
252
+ const hasCriticality = action.criticality !== undefined && action.criticality !== null;
253
+
254
+ return isEmphasized || hasCriticality;
225
255
  }
226
256
  };
227
257