@sapui5/sap.fe.core 1.102.0 → 1.103.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 (311) hide show
  1. package/package.json +5 -5
  2. package/src/sap/fe/core/.library +1 -1
  3. package/src/sap/fe/core/AppComponent.js +62 -26
  4. package/src/sap/fe/core/AppComponent.ts +56 -40
  5. package/src/sap/fe/core/AppStateHandler.js +10 -10
  6. package/src/sap/fe/core/AppStateHandler.ts +9 -9
  7. package/src/sap/fe/core/BaseController.js +11 -9
  8. package/src/sap/fe/core/BaseController.ts +15 -13
  9. package/src/sap/fe/core/CommonUtils.js +236 -109
  10. package/src/sap/fe/core/CommonUtils.ts +252 -136
  11. package/src/sap/fe/core/ExtensionAPI.js +24 -27
  12. package/src/sap/fe/core/ExtensionAPI.ts +36 -38
  13. package/src/sap/fe/core/PageController.js +4 -4
  14. package/src/sap/fe/core/PageController.ts +4 -5
  15. package/src/sap/fe/core/TemplateComponent.js +1 -1
  16. package/src/sap/fe/core/TemplateComponent.ts +6 -6
  17. package/src/sap/fe/core/TemplateModel.js +1 -1
  18. package/src/sap/fe/core/TemplateModel.ts +1 -1
  19. package/src/sap/fe/core/buildingBlocks/AttributeModel.js +1 -1
  20. package/src/sap/fe/core/buildingBlocks/AttributeModel.ts +1 -1
  21. package/src/sap/fe/core/buildingBlocks/BuildingBlockRuntime.js +8 -8
  22. package/src/sap/fe/core/buildingBlocks/BuildingBlockRuntime.ts +11 -10
  23. package/src/sap/fe/core/buildingBlocks/TraceInfo.js +27 -27
  24. package/src/sap/fe/core/buildingBlocks/TraceInfo.ts +28 -26
  25. package/src/sap/fe/core/controllerextensions/EditFlow.js +129 -118
  26. package/src/sap/fe/core/controllerextensions/EditFlow.ts +154 -141
  27. package/src/sap/fe/core/controllerextensions/IntentBasedNavigation.js +9 -9
  28. package/src/sap/fe/core/controllerextensions/IntentBasedNavigation.ts +10 -10
  29. package/src/sap/fe/core/controllerextensions/InternalEditFlow.js +31 -26
  30. package/src/sap/fe/core/controllerextensions/InternalEditFlow.ts +34 -35
  31. package/src/sap/fe/core/controllerextensions/InternalIntentBasedNavigation.js +70 -70
  32. package/src/sap/fe/core/controllerextensions/InternalIntentBasedNavigation.ts +77 -77
  33. package/src/sap/fe/core/controllerextensions/InternalRouting.js +84 -78
  34. package/src/sap/fe/core/controllerextensions/InternalRouting.ts +105 -101
  35. package/src/sap/fe/core/controllerextensions/KPIManagement.js +66 -68
  36. package/src/sap/fe/core/controllerextensions/KPIManagement.ts +106 -123
  37. package/src/sap/fe/core/controllerextensions/MassEdit.js +8 -8
  38. package/src/sap/fe/core/controllerextensions/MassEdit.ts +19 -26
  39. package/src/sap/fe/core/controllerextensions/MessageHandler.js +20 -12
  40. package/src/sap/fe/core/controllerextensions/MessageHandler.ts +29 -14
  41. package/src/sap/fe/core/controllerextensions/PageReady.js +97 -25
  42. package/src/sap/fe/core/controllerextensions/PageReady.ts +94 -34
  43. package/src/sap/fe/core/controllerextensions/Paginator.js +21 -22
  44. package/src/sap/fe/core/controllerextensions/Paginator.ts +24 -25
  45. package/src/sap/fe/core/controllerextensions/Placeholder.js +4 -6
  46. package/src/sap/fe/core/controllerextensions/Placeholder.ts +12 -14
  47. package/src/sap/fe/core/controllerextensions/Routing.js +10 -11
  48. package/src/sap/fe/core/controllerextensions/Routing.ts +12 -13
  49. package/src/sap/fe/core/controllerextensions/Share.js +22 -22
  50. package/src/sap/fe/core/controllerextensions/Share.ts +30 -29
  51. package/src/sap/fe/core/controllerextensions/SideEffects.js +46 -50
  52. package/src/sap/fe/core/controllerextensions/SideEffects.ts +56 -60
  53. package/src/sap/fe/core/controllerextensions/ViewState.js +65 -62
  54. package/src/sap/fe/core/controllerextensions/ViewState.ts +68 -63
  55. package/src/sap/fe/core/controllerextensions/collaboration/ActivityBase.js +5 -5
  56. package/src/sap/fe/core/controllerextensions/collaboration/ActivityBase.ts +8 -7
  57. package/src/sap/fe/core/controllerextensions/collaboration/ActivitySync.js +6 -6
  58. package/src/sap/fe/core/controllerextensions/collaboration/ActivitySync.ts +12 -17
  59. package/src/sap/fe/core/controllerextensions/collaboration/CollaborationCommon.js +2 -2
  60. package/src/sap/fe/core/controllerextensions/collaboration/CollaborationCommon.ts +4 -4
  61. package/src/sap/fe/core/controllerextensions/collaboration/Manage.js +7 -9
  62. package/src/sap/fe/core/controllerextensions/collaboration/Manage.ts +18 -19
  63. package/src/sap/fe/core/controllerextensions/editFlow/TransactionHelper.js +184 -137
  64. package/src/sap/fe/core/controllerextensions/editFlow/TransactionHelper.ts +253 -206
  65. package/src/sap/fe/core/controllerextensions/editFlow/draft.js +113 -121
  66. package/src/sap/fe/core/controllerextensions/editFlow/draft.ts +148 -158
  67. package/src/sap/fe/core/controllerextensions/editFlow/operations.js +198 -148
  68. package/src/sap/fe/core/controllerextensions/editFlow/operations.ts +223 -159
  69. package/src/sap/fe/core/controllerextensions/editFlow/sticky.js +24 -26
  70. package/src/sap/fe/core/controllerextensions/editFlow/sticky.ts +35 -33
  71. package/src/sap/fe/core/controllerextensions/messageHandler/messageHandling.js +78 -44
  72. package/src/sap/fe/core/controllerextensions/messageHandler/messageHandling.ts +90 -60
  73. package/src/sap/fe/core/controllerextensions/routing/RouterProxy.js +52 -55
  74. package/src/sap/fe/core/controllerextensions/routing/RouterProxy.ts +55 -58
  75. package/src/sap/fe/core/controls/Any.js +9 -5
  76. package/src/sap/fe/core/controls/Any.ts +10 -4
  77. package/src/sap/fe/core/controls/CommandExecution.js +11 -25
  78. package/src/sap/fe/core/controls/CommandExecution.ts +11 -25
  79. package/src/sap/fe/core/controls/ConditionalWrapper.js +2 -2
  80. package/src/sap/fe/core/controls/ConditionalWrapper.ts +3 -3
  81. package/src/sap/fe/core/controls/CustomFilterFieldContentWrapper.js +22 -22
  82. package/src/sap/fe/core/controls/CustomFilterFieldContentWrapper.ts +25 -24
  83. package/src/sap/fe/core/controls/CustomQuickViewPage.js +2 -2
  84. package/src/sap/fe/core/controls/CustomQuickViewPage.ts +2 -2
  85. package/src/sap/fe/core/controls/DataLossOrDraftDiscard/DataLossOrDraftDiscardHandler.js +3 -3
  86. package/src/sap/fe/core/controls/DataLossOrDraftDiscard/DataLossOrDraftDiscardHandler.ts +5 -5
  87. package/src/sap/fe/core/controls/FieldWrapper.js +2 -2
  88. package/src/sap/fe/core/controls/FieldWrapper.ts +3 -3
  89. package/src/sap/fe/core/controls/FileWrapper.js +2 -2
  90. package/src/sap/fe/core/controls/FileWrapper.ts +11 -11
  91. package/src/sap/fe/core/controls/FilterBar.js +6 -2
  92. package/src/sap/fe/core/controls/FilterBar.ts +13 -9
  93. package/src/sap/fe/core/controls/FormElementWrapper.js +1 -1
  94. package/src/sap/fe/core/controls/FormElementWrapper.ts +2 -2
  95. package/src/sap/fe/core/controls/MassEditSelect.js +1 -1
  96. package/src/sap/fe/core/controls/MassEditSelect.ts +0 -4
  97. package/src/sap/fe/core/controls/NonComputedVisibleKeyFieldsDialog.fragment.xml +3 -3
  98. package/src/sap/fe/core/controls/filterbar/VisualFilter.js +16 -12
  99. package/src/sap/fe/core/controls/filterbar/VisualFilter.ts +20 -22
  100. package/src/sap/fe/core/controls/filterbar/VisualFilterContainer.js +3 -3
  101. package/src/sap/fe/core/controls/filterbar/VisualFilterContainer.ts +8 -8
  102. package/src/sap/fe/core/controls/filterbar/utils/VisualFilterUtils.js +47 -47
  103. package/src/sap/fe/core/controls/filterbar/utils/VisualFilterUtils.ts +52 -52
  104. package/src/sap/fe/core/controls/massEdit/MassEditDialog.fragment.xml +8 -2
  105. package/src/sap/fe/core/controls/massEdit/MassEditHandlers.js +89 -88
  106. package/src/sap/fe/core/controls/massEdit/MassEditHandlers.ts +107 -106
  107. package/src/sap/fe/core/converters/ConverterContext.js +26 -33
  108. package/src/sap/fe/core/converters/ConverterContext.ts +51 -60
  109. package/src/sap/fe/core/converters/ManifestSettings.js +1 -1
  110. package/src/sap/fe/core/converters/ManifestSettings.ts +14 -14
  111. package/src/sap/fe/core/converters/ManifestWrapper.js +59 -45
  112. package/src/sap/fe/core/converters/ManifestWrapper.ts +55 -45
  113. package/src/sap/fe/core/converters/MetaModelConverter.js +50 -32
  114. package/src/sap/fe/core/converters/MetaModelConverter.ts +145 -127
  115. package/src/sap/fe/core/converters/TemplateConverter.js +21 -20
  116. package/src/sap/fe/core/converters/TemplateConverter.ts +27 -24
  117. package/src/sap/fe/core/converters/annotations/DataField.js +54 -34
  118. package/src/sap/fe/core/converters/annotations/DataField.ts +97 -75
  119. package/src/sap/fe/core/converters/common/AnnotationConverter.js +1911 -1495
  120. package/src/sap/fe/core/converters/controls/Common/Action.js +50 -41
  121. package/src/sap/fe/core/converters/controls/Common/Action.ts +56 -46
  122. package/src/sap/fe/core/converters/controls/Common/Chart.js +14 -14
  123. package/src/sap/fe/core/converters/controls/Common/Chart.ts +23 -26
  124. package/src/sap/fe/core/converters/controls/Common/Criticality.js +3 -3
  125. package/src/sap/fe/core/converters/controls/Common/Criticality.ts +4 -4
  126. package/src/sap/fe/core/converters/controls/Common/DataVisualization.js +28 -28
  127. package/src/sap/fe/core/converters/controls/Common/DataVisualization.ts +40 -36
  128. package/src/sap/fe/core/converters/controls/Common/Form.js +25 -27
  129. package/src/sap/fe/core/converters/controls/Common/Form.ts +37 -45
  130. package/src/sap/fe/core/converters/controls/Common/KPI.js +11 -11
  131. package/src/sap/fe/core/converters/controls/Common/KPI.ts +35 -39
  132. package/src/sap/fe/core/converters/controls/Common/Table.js +174 -183
  133. package/src/sap/fe/core/converters/controls/Common/Table.ts +237 -250
  134. package/src/sap/fe/core/converters/controls/Common/table/StandardActions.js +119 -119
  135. package/src/sap/fe/core/converters/controls/Common/table/StandardActions.ts +144 -141
  136. package/src/sap/fe/core/converters/controls/ListReport/FilterBar.js +45 -41
  137. package/src/sap/fe/core/converters/controls/ListReport/FilterBar.ts +64 -57
  138. package/src/sap/fe/core/converters/controls/ListReport/VisualFilters.js +28 -26
  139. package/src/sap/fe/core/converters/controls/ListReport/VisualFilters.ts +46 -43
  140. package/src/sap/fe/core/converters/controls/ObjectPage/Avatar.js +9 -9
  141. package/src/sap/fe/core/converters/controls/ObjectPage/Avatar.ts +14 -13
  142. package/src/sap/fe/core/converters/controls/ObjectPage/HeaderFacet.js +67 -64
  143. package/src/sap/fe/core/converters/controls/ObjectPage/HeaderFacet.ts +69 -66
  144. package/src/sap/fe/core/converters/controls/ObjectPage/SubSection.js +73 -72
  145. package/src/sap/fe/core/converters/controls/ObjectPage/SubSection.ts +98 -96
  146. package/src/sap/fe/core/converters/helpers/Aggregation.js +2 -4
  147. package/src/sap/fe/core/converters/helpers/Aggregation.ts +10 -13
  148. package/src/sap/fe/core/converters/helpers/BindingHelper.js +31 -31
  149. package/src/sap/fe/core/converters/helpers/BindingHelper.ts +30 -29
  150. package/src/sap/fe/core/converters/helpers/ConfigurableObject.js +4 -4
  151. package/src/sap/fe/core/converters/helpers/ConfigurableObject.ts +9 -9
  152. package/src/sap/fe/core/converters/helpers/ID.js +46 -46
  153. package/src/sap/fe/core/converters/helpers/ID.ts +25 -25
  154. package/src/sap/fe/core/converters/helpers/Key.js +7 -7
  155. package/src/sap/fe/core/converters/helpers/Key.ts +7 -7
  156. package/src/sap/fe/core/converters/helpers/SelectionVariantHelper.js +1 -1
  157. package/src/sap/fe/core/converters/helpers/SelectionVariantHelper.ts +4 -4
  158. package/src/sap/fe/core/converters/objectPage/FormMenuActions.js +6 -6
  159. package/src/sap/fe/core/converters/objectPage/FormMenuActions.ts +10 -10
  160. package/src/sap/fe/core/converters/objectPage/HeaderAndFooterAction.js +46 -62
  161. package/src/sap/fe/core/converters/objectPage/HeaderAndFooterAction.ts +54 -82
  162. package/src/sap/fe/core/converters/templates/ListReportConverter.js +30 -29
  163. package/src/sap/fe/core/converters/templates/ListReportConverter.ts +40 -40
  164. package/src/sap/fe/core/converters/templates/ObjectPageConverter.js +39 -38
  165. package/src/sap/fe/core/converters/templates/ObjectPageConverter.ts +52 -61
  166. package/src/sap/fe/core/designtime/AppComponent.designtime.js +4 -4
  167. package/src/sap/fe/core/designtime/AppComponent.designtime.ts +4 -4
  168. package/src/sap/fe/core/formatters/CollaborationFormatter.js +2 -2
  169. package/src/sap/fe/core/formatters/CollaborationFormatter.ts +3 -3
  170. package/src/sap/fe/core/formatters/FPMFormatter.js +5 -5
  171. package/src/sap/fe/core/formatters/FPMFormatter.ts +10 -10
  172. package/src/sap/fe/core/formatters/KPIFormatter.js +7 -7
  173. package/src/sap/fe/core/formatters/KPIFormatter.ts +10 -10
  174. package/src/sap/fe/core/formatters/StandardFormatter.js +89 -0
  175. package/src/sap/fe/core/formatters/StandardFormatter.ts +64 -0
  176. package/src/sap/fe/core/formatters/TableFormatter.js +11 -11
  177. package/src/sap/fe/core/formatters/TableFormatter.ts +12 -12
  178. package/src/sap/fe/core/formatters/ValueFormatter.js +8 -8
  179. package/src/sap/fe/core/formatters/ValueFormatter.ts +9 -9
  180. package/src/sap/fe/core/helpers/AppStartupHelper.js +15 -15
  181. package/src/sap/fe/core/helpers/AppStartupHelper.ts +37 -40
  182. package/src/sap/fe/core/helpers/BindingToolkit.js +1809 -0
  183. package/src/sap/fe/core/helpers/{BindingExpression.ts → BindingToolkit.ts} +365 -264
  184. package/src/sap/fe/core/helpers/ClassSupport.js +20 -11
  185. package/src/sap/fe/core/helpers/ClassSupport.ts +14 -10
  186. package/src/sap/fe/core/helpers/DynamicAnnotationPathHelper.js +2 -2
  187. package/src/sap/fe/core/helpers/DynamicAnnotationPathHelper.ts +1 -1
  188. package/src/sap/fe/core/helpers/EditState.js +1 -6
  189. package/src/sap/fe/core/helpers/EditState.ts +5 -10
  190. package/src/sap/fe/core/helpers/ExcelFormatHelper.js +2 -2
  191. package/src/sap/fe/core/helpers/ExcelFormatHelper.ts +4 -4
  192. package/src/sap/fe/core/helpers/FPMHelper.js +1 -1
  193. package/src/sap/fe/core/helpers/FPMHelper.ts +2 -2
  194. package/src/sap/fe/core/helpers/KeepAliveHelper.js +31 -31
  195. package/src/sap/fe/core/helpers/KeepAliveHelper.ts +52 -56
  196. package/src/sap/fe/core/helpers/MassEditHelper.js +281 -254
  197. package/src/sap/fe/core/helpers/MassEditHelper.ts +337 -289
  198. package/src/sap/fe/core/helpers/ModelHelper.js +25 -25
  199. package/src/sap/fe/core/helpers/ModelHelper.ts +34 -32
  200. package/src/sap/fe/core/helpers/PasteHelper.js +3 -10
  201. package/src/sap/fe/core/helpers/PasteHelper.ts +20 -25
  202. package/src/sap/fe/core/helpers/SemanticDateOperators.js +1 -1
  203. package/src/sap/fe/core/helpers/SemanticDateOperators.ts +11 -11
  204. package/src/sap/fe/core/helpers/SemanticKeyHelper.js +3 -3
  205. package/src/sap/fe/core/helpers/SemanticKeyHelper.ts +8 -8
  206. package/src/sap/fe/core/helpers/StableIdHelper.js +12 -12
  207. package/src/sap/fe/core/helpers/StableIdHelper.ts +12 -12
  208. package/src/sap/fe/core/jsx-runtime/jsx.js +1 -1
  209. package/src/sap/fe/core/jsx-runtime/jsx.ts +8 -8
  210. package/src/sap/fe/core/library.js +42 -3
  211. package/src/sap/fe/core/library.ts +38 -0
  212. package/src/sap/fe/core/manifestMerger/ChangePageConfiguration.js +3 -3
  213. package/src/sap/fe/core/manifestMerger/ChangePageConfiguration.ts +2 -2
  214. package/src/sap/fe/core/messagebundle.properties +49 -35
  215. package/src/sap/fe/core/messagebundle_ar.properties +13 -5
  216. package/src/sap/fe/core/messagebundle_bg.properties +13 -5
  217. package/src/sap/fe/core/messagebundle_ca.properties +13 -5
  218. package/src/sap/fe/core/messagebundle_cs.properties +13 -5
  219. package/src/sap/fe/core/messagebundle_cy.properties +14 -6
  220. package/src/sap/fe/core/messagebundle_da.properties +13 -5
  221. package/src/sap/fe/core/messagebundle_de.properties +15 -7
  222. package/src/sap/fe/core/messagebundle_el.properties +14 -6
  223. package/src/sap/fe/core/messagebundle_en.properties +9 -1
  224. package/src/sap/fe/core/messagebundle_en_GB.properties +11 -3
  225. package/src/sap/fe/core/messagebundle_en_US_sappsd.properties +7 -1
  226. package/src/sap/fe/core/messagebundle_en_US_saprigi.properties +9 -1
  227. package/src/sap/fe/core/messagebundle_en_US_saptrc.properties +44 -85
  228. package/src/sap/fe/core/messagebundle_es.properties +13 -5
  229. package/src/sap/fe/core/messagebundle_es_MX.properties +13 -5
  230. package/src/sap/fe/core/messagebundle_et.properties +13 -5
  231. package/src/sap/fe/core/messagebundle_fi.properties +14 -6
  232. package/src/sap/fe/core/messagebundle_fr.properties +14 -6
  233. package/src/sap/fe/core/messagebundle_fr_CA.properties +14 -6
  234. package/src/sap/fe/core/messagebundle_hi.properties +14 -6
  235. package/src/sap/fe/core/messagebundle_hr.properties +14 -6
  236. package/src/sap/fe/core/messagebundle_hu.properties +13 -5
  237. package/src/sap/fe/core/messagebundle_id.properties +13 -5
  238. package/src/sap/fe/core/messagebundle_it.properties +33 -25
  239. package/src/sap/fe/core/messagebundle_iw.properties +13 -5
  240. package/src/sap/fe/core/messagebundle_ja.properties +14 -6
  241. package/src/sap/fe/core/messagebundle_kk.properties +13 -5
  242. package/src/sap/fe/core/messagebundle_ko.properties +13 -5
  243. package/src/sap/fe/core/messagebundle_lt.properties +13 -5
  244. package/src/sap/fe/core/messagebundle_lv.properties +14 -6
  245. package/src/sap/fe/core/messagebundle_ms.properties +13 -5
  246. package/src/sap/fe/core/messagebundle_nl.properties +13 -5
  247. package/src/sap/fe/core/messagebundle_no.properties +13 -5
  248. package/src/sap/fe/core/messagebundle_pl.properties +13 -5
  249. package/src/sap/fe/core/messagebundle_pt.properties +13 -5
  250. package/src/sap/fe/core/messagebundle_pt_PT.properties +14 -6
  251. package/src/sap/fe/core/messagebundle_ro.properties +13 -5
  252. package/src/sap/fe/core/messagebundle_ru.properties +13 -5
  253. package/src/sap/fe/core/messagebundle_sh.properties +13 -5
  254. package/src/sap/fe/core/messagebundle_sk.properties +13 -5
  255. package/src/sap/fe/core/messagebundle_sl.properties +17 -9
  256. package/src/sap/fe/core/messagebundle_sv.properties +14 -6
  257. package/src/sap/fe/core/messagebundle_th.properties +13 -5
  258. package/src/sap/fe/core/messagebundle_tr.properties +13 -5
  259. package/src/sap/fe/core/messagebundle_uk.properties +13 -5
  260. package/src/sap/fe/core/messagebundle_vi.properties +13 -5
  261. package/src/sap/fe/core/messagebundle_zh_CN.properties +14 -6
  262. package/src/sap/fe/core/messagebundle_zh_TW.properties +13 -5
  263. package/src/sap/fe/core/services/AsyncComponentServiceFactory.js +2 -2
  264. package/src/sap/fe/core/services/AsyncComponentServiceFactory.ts +5 -5
  265. package/src/sap/fe/core/services/CacheHandlerServiceFactory.js +2 -2
  266. package/src/sap/fe/core/services/CacheHandlerServiceFactory.ts +14 -14
  267. package/src/sap/fe/core/services/EnvironmentServiceFactory.js +1 -1
  268. package/src/sap/fe/core/services/EnvironmentServiceFactory.ts +3 -2
  269. package/src/sap/fe/core/services/NavigationServiceFactory.js +53 -44
  270. package/src/sap/fe/core/services/NavigationServiceFactory.ts +54 -46
  271. package/src/sap/fe/core/services/ResourceModelServiceFactory.js +2 -2
  272. package/src/sap/fe/core/services/ResourceModelServiceFactory.ts +4 -4
  273. package/src/sap/fe/core/services/RoutingServiceFactory.js +55 -55
  274. package/src/sap/fe/core/services/RoutingServiceFactory.ts +67 -65
  275. package/src/sap/fe/core/services/ShellServicesFactory.js +72 -76
  276. package/src/sap/fe/core/services/ShellServicesFactory.ts +76 -82
  277. package/src/sap/fe/core/services/SideEffectsServiceFactory.js +61 -61
  278. package/src/sap/fe/core/services/SideEffectsServiceFactory.ts +102 -92
  279. package/src/sap/fe/core/services/TemplatedViewServiceFactory.js +20 -15
  280. package/src/sap/fe/core/services/TemplatedViewServiceFactory.ts +26 -21
  281. package/src/sap/fe/core/support/CommonHelper.js +3 -2
  282. package/src/sap/fe/core/support/CommonHelper.ts +9 -13
  283. package/src/sap/fe/core/support/Diagnostics.js +1 -1
  284. package/src/sap/fe/core/support/Diagnostics.ts +5 -5
  285. package/src/sap/fe/core/templating/CommonFormatters.js +84 -0
  286. package/src/sap/fe/core/templating/CommonFormatters.ts +86 -0
  287. package/src/sap/fe/core/templating/CriticalityFormatters.js +31 -31
  288. package/src/sap/fe/core/templating/CriticalityFormatters.ts +42 -40
  289. package/src/sap/fe/core/templating/DataFieldFormatters.js +8 -8
  290. package/src/sap/fe/core/templating/DataFieldFormatters.ts +13 -10
  291. package/src/sap/fe/core/templating/DataModelPathHelper.js +16 -15
  292. package/src/sap/fe/core/templating/DataModelPathHelper.ts +42 -32
  293. package/src/sap/fe/core/templating/DisplayModeFormatter.js +1 -1
  294. package/src/sap/fe/core/templating/DisplayModeFormatter.ts +2 -3
  295. package/src/sap/fe/core/templating/EntitySetHelper.js +7 -7
  296. package/src/sap/fe/core/templating/EntitySetHelper.ts +6 -8
  297. package/src/sap/fe/core/templating/FieldControlHelper.js +35 -34
  298. package/src/sap/fe/core/templating/FieldControlHelper.ts +29 -46
  299. package/src/sap/fe/core/templating/FilterHelper.js +10 -9
  300. package/src/sap/fe/core/templating/FilterHelper.ts +13 -13
  301. package/src/sap/fe/core/templating/FilterTemplating.js +1 -1
  302. package/src/sap/fe/core/templating/FilterTemplating.ts +3 -3
  303. package/src/sap/fe/core/templating/PropertyFormatters.js +7 -7
  304. package/src/sap/fe/core/templating/PropertyFormatters.ts +21 -19
  305. package/src/sap/fe/core/templating/PropertyHelper.js +25 -25
  306. package/src/sap/fe/core/templating/PropertyHelper.ts +25 -26
  307. package/src/sap/fe/core/templating/UIFormatters.js +148 -93
  308. package/src/sap/fe/core/templating/UIFormatters.ts +196 -124
  309. package/src/sap/fe/core/type/Email.js +2 -2
  310. package/src/sap/fe/core/type/Email.ts +2 -2
  311. package/src/sap/fe/core/helpers/BindingExpression.js +0 -1732
@@ -1,27 +1,27 @@
1
- import { EntityType } from "@sap-ux/annotation-converter";
2
- import { UIAnnotationTerms } from "@sap-ux/vocabularies-types";
3
- import {
1
+ import type { EntityType } from "@sap-ux/vocabularies-types";
2
+ import type {
4
3
  LineItem,
5
4
  PresentationVariantTypeTypes,
6
5
  SelectionPresentationVariantTypeTypes,
7
6
  SelectionVariantTypeTypes
8
- } from "@sap-ux/vocabularies-types/dist/generated/UI";
9
- import { BaseAction, getActionsFromManifest } from "sap/fe/core/converters/controls/Common/Action";
10
- import { ChartVisualization } from "sap/fe/core/converters/controls/Common/Chart";
11
- import { TableVisualization } from "sap/fe/core/converters/controls/Common/Table";
7
+ } from "@sap-ux/vocabularies-types/vocabularies/UI";
8
+ import { UIAnnotationTerms } from "@sap-ux/vocabularies-types/vocabularies/UI";
9
+ import type { BaseAction } from "sap/fe/core/converters/controls/Common/Action";
10
+ import { getActionsFromManifest } from "sap/fe/core/converters/controls/Common/Action";
11
+ import type { ChartVisualization } from "sap/fe/core/converters/controls/Common/Chart";
12
+ import type { TableVisualization } from "sap/fe/core/converters/controls/Common/Table";
13
+ import type { CustomElementFilterField, FilterField } from "sap/fe/core/converters/controls/ListReport/FilterBar";
12
14
  import {
13
- CustomElementFilterField,
14
- FilterField,
15
15
  getFilterBarhideBasicSearch,
16
16
  getManifestFilterFields,
17
17
  getSelectionFields
18
18
  } from "sap/fe/core/converters/controls/ListReport/FilterBar";
19
- import ConverterContext from "sap/fe/core/converters/ConverterContext";
20
- import { ConfigurableObject, insertCustomElements } from "sap/fe/core/converters/helpers/ConfigurableObject";
21
- import { annotationExpression, compileBinding } from "sap/fe/core/helpers/BindingExpression";
19
+ import type ConverterContext from "sap/fe/core/converters/ConverterContext";
20
+ import type { ConfigurableObject } from "sap/fe/core/converters/helpers/ConfigurableObject";
21
+ import { insertCustomElements } from "sap/fe/core/converters/helpers/ConfigurableObject";
22
+ import { compileExpression, getExpressionFromAnnotation } from "sap/fe/core/helpers/BindingToolkit";
23
+ import type { DataVisualizationAnnotations, DataVisualizationDefinition } from "../controls/Common/DataVisualization";
22
24
  import {
23
- DataVisualizationAnnotations,
24
- DataVisualizationDefinition,
25
25
  getDataVisualizationConfiguration,
26
26
  getDefaultChart,
27
27
  getDefaultLineItem,
@@ -31,18 +31,17 @@ import {
31
31
  isPresentationCompliant,
32
32
  isSelectionPresentationCompliant
33
33
  } from "../controls/Common/DataVisualization";
34
- import { getKPIDefinitions, KPIDefinition } from "../controls/Common/KPI";
35
- import { ChartID, CustomTabID, FilterBarID, FilterVariantManagementID, IconTabBarID, TableID } from "../helpers/ID";
36
- import {
34
+ import type { KPIDefinition } from "../controls/Common/KPI";
35
+ import { getKPIDefinitions } from "../controls/Common/KPI";
36
+ import { getChartID, getCustomTabID, getFilterBarID, getFilterVariantManagementID, getIconTabBarID, getTableID } from "../helpers/ID";
37
+ import type {
37
38
  CombinedViewPathConfiguration,
38
39
  CustomViewTemplateConfiguration,
39
40
  MultipleViewsConfiguration,
40
41
  SingleViewPathConfiguration,
41
- TemplateType,
42
- VariantManagementType,
43
- ViewPathConfiguration,
44
- VisualizationType
42
+ ViewPathConfiguration
45
43
  } from "../ManifestSettings";
44
+ import { TemplateType, VariantManagementType, VisualizationType } from "../ManifestSettings";
46
45
 
47
46
  type ViewAnnotationsTypeTypes = SelectionPresentationVariantTypeTypes | SelectionVariantTypeTypes;
48
47
  type VariantManagementDefinition = {
@@ -148,8 +147,9 @@ type ContentAreaID = {
148
147
 
149
148
  /**
150
149
  * Retrieves all list report tables.
151
- * @param {ListReportViewDefinition[]} views The list report views configured in the manifest
152
- * @returns {TableVisualization[]} The list report table
150
+ *
151
+ * @param views The list report views configured in the manifest
152
+ * @returns The list report table
153
153
  */
154
154
  function getTableVisualizations(views: ListReportViewDefinition[]): TableVisualization[] {
155
155
  const tables: TableVisualization[] = [];
@@ -200,10 +200,10 @@ const getDefaultSemanticDates = function (filterFields: Record<string, CustomEle
200
200
  /**
201
201
  * Find a visualization annotation that can be used for rendering the list report.
202
202
  *
203
- * @param {EntityType} entityType The current EntityType
203
+ * @param entityType The current EntityType
204
204
  * @param converterContext
205
205
  * @param bIsALP
206
- * @returns {LineItem | PresentationVariantTypeTypes | undefined} A compliant annotation for rendering the list report
206
+ * @returns A compliant annotation for rendering the list report
207
207
  */
208
208
  function getCompliantVisualizationAnnotation(
209
209
  entityType: EntityType,
@@ -262,12 +262,12 @@ const getView = function (viewConverterConfiguration: ViewConverterSettings): Li
262
262
  let chartControlId = "";
263
263
  let title: string | undefined = "";
264
264
  let selectionVariantPath = "";
265
- const isMultipleViewConfiguration = function (config: ViewConfiguration): config is MultipleViewConfiguration {
266
- return (config as MultipleViewConfiguration).key !== undefined;
265
+ const isMultipleViewConfiguration = function (currentConfig: ViewConfiguration): currentConfig is MultipleViewConfiguration {
266
+ return (currentConfig as MultipleViewConfiguration).key !== undefined;
267
267
  };
268
- const createVisualization = function (presentation: DataVisualizationDefinition, isPrimary?: boolean) {
268
+ const createVisualization = function (currentPresentation: DataVisualizationDefinition, isPrimary?: boolean) {
269
269
  let defaultVisualization;
270
- for (const visualization of presentation.visualizations) {
270
+ for (const visualization of currentPresentation.visualizations) {
271
271
  if (isPrimary && visualization.type === VisualizationType.Chart) {
272
272
  defaultVisualization = visualization;
273
273
  break;
@@ -277,7 +277,7 @@ const getView = function (viewConverterConfiguration: ViewConverterSettings): Li
277
277
  break;
278
278
  }
279
279
  }
280
- const presentationCreated = Object.assign({}, presentation);
280
+ const presentationCreated = Object.assign({}, currentPresentation);
281
281
  if (defaultVisualization) {
282
282
  presentationCreated.visualizations = [defaultVisualization];
283
283
  }
@@ -348,7 +348,7 @@ const getView = function (viewConverterConfiguration: ViewConverterSettings): Li
348
348
  const resolvedTarget = converterContext.getEntityTypeAnnotation((config as SingleViewPathConfiguration).annotationPath);
349
349
  const viewAnnotation: ViewAnnotationsTypeTypes = resolvedTarget.annotation as ViewAnnotationsTypeTypes;
350
350
  converterContext = resolvedTarget.converterContext;
351
- title = compileBinding(annotationExpression(viewAnnotation.Text));
351
+ title = compileExpression(getExpressionFromAnnotation(viewAnnotation.Text));
352
352
  // Need to loop on table into views since multi table mode get specific configuration (hidden filters or Table Id)
353
353
  presentation.visualizations.forEach((visualizationDefinition, index) => {
354
354
  switch (visualizationDefinition.type) {
@@ -358,7 +358,7 @@ const getView = function (viewConverterConfiguration: ViewConverterSettings): Li
358
358
  filters.hiddenFilters = filters.hiddenFilters || { paths: [] };
359
359
  if (!(config as SingleViewPathConfiguration).keepPreviousPresonalization) {
360
360
  // Need to override Table Id to match with Tab Key (currently only table is managed in multiple view mode)
361
- tableVisualization.annotation.id = TableID((config as SingleViewPathConfiguration).key || "", "LineItem");
361
+ tableVisualization.annotation.id = getTableID((config as SingleViewPathConfiguration).key || "", "LineItem");
362
362
  }
363
363
  config = config as ViewAnnotationConfiguration;
364
364
  if (config && config.annotation && config.annotation.term === UIAnnotationTerms.SelectionPresentationVariant) {
@@ -378,7 +378,7 @@ const getView = function (viewConverterConfiguration: ViewConverterSettings): Li
378
378
  break;
379
379
  case VisualizationType.Chart:
380
380
  const chartVisualization = presentation.visualizations[index] as ChartVisualization;
381
- chartVisualization.id = ChartID((config as SingleViewPathConfiguration).key || "", "Chart");
381
+ chartVisualization.id = getChartID((config as SingleViewPathConfiguration).key || "", "Chart");
382
382
  chartVisualization.multiViews = true;
383
383
  break;
384
384
  default:
@@ -408,7 +408,7 @@ const getView = function (viewConverterConfiguration: ViewConverterSettings): Li
408
408
  const title = config.label,
409
409
  fragment = config.template,
410
410
  type = config.type,
411
- customTabId = CustomTabID(config.key || ""),
411
+ customTabId = getCustomTabID(config.key || ""),
412
412
  visible = config.visible;
413
413
  return {
414
414
  title,
@@ -452,7 +452,7 @@ const getViews = function (
452
452
  path = path as SingleViewPathConfiguration;
453
453
  const manifestWrapper = converterContext.getManifestWrapper(),
454
454
  viewConverterContext = converterContext.getConverterContextFor(
455
- path.contextPath || (path.entitySet && "/" + path.entitySet) || converterContext.getContextPath()
455
+ path.contextPath || (path.entitySet && `/${path.entitySet}`) || converterContext.getContextPath()
456
456
  ),
457
457
  entityType = viewConverterContext.getEntityType();
458
458
 
@@ -554,7 +554,7 @@ export const checkChartFilterBarId = function (views: ListReportViewDefinition[]
554
554
  * Creates the ListReportDefinition for multiple entity sets (multiple table mode).
555
555
  *
556
556
  * @param converterContext The converter context
557
- * @returns {ListReportDefinition} The list report definition based on annotation + manifest
557
+ * @returns The list report definition based on annotation + manifest
558
558
  */
559
559
  export const convertPage = function (converterContext: ConverterContext): ListReportDefinition {
560
560
  const entityType = converterContext.getEntityType();
@@ -576,8 +576,8 @@ export const convertPage = function (converterContext: ConverterContext): ListRe
576
576
  const showPinnableToggle = lrTableVisualizations.some((table) => table.control.type === "ResponsiveTable");
577
577
  let singleTableId = "";
578
578
  let singleChartId = "";
579
- const filterBarId = FilterBarID(sContextPath);
580
- const filterVariantManagementID = FilterVariantManagementID(filterBarId);
579
+ const filterBarId = getFilterBarID(sContextPath);
580
+ const filterVariantManagementID = getFilterVariantManagementID(filterBarId);
581
581
  const fbConfig = manifestWrapper.getFilterConfiguration();
582
582
  const filterInitialLayout = fbConfig?.initialLayout !== undefined ? fbConfig?.initialLayout.toLowerCase() : "compact";
583
583
  const filterLayout = fbConfig?.layout !== undefined ? fbConfig?.layout.toLowerCase() : "compact";
@@ -619,7 +619,7 @@ export const convertPage = function (converterContext: ConverterContext): ListRe
619
619
  const targetControlIds = [
620
620
  ...(hideFilterBar ? [] : [filterBarId]),
621
621
  ...(manifestWrapper.getVariantManagement() !== VariantManagementType.Control ? visualizationIds : []),
622
- ...(!hasMultiVisualizations && views.length > 1 ? [IconTabBarID()] : [])
622
+ ...(!hasMultiVisualizations && views.length > 1 ? [getIconTabBarID()] : [])
623
623
  ];
624
624
 
625
625
  const iconTabBarId = "fe::TabMultipleMode";
@@ -629,7 +629,7 @@ export const convertPage = function (converterContext: ConverterContext): ListRe
629
629
 
630
630
  return {
631
631
  mainEntitySet: sContextPath,
632
- mainEntityType: sContextPath + "/",
632
+ mainEntityType: `${sContextPath}/`,
633
633
  displayMultiVisualizations,
634
634
  iconTabBarId,
635
635
  stickySubheaderProvider,
@@ -2,14 +2,14 @@
2
2
  * SAP UI development toolkit for HTML5 (SAPUI5)
3
3
  * (c) Copyright 2009-2021 SAP SE. All rights reserved
4
4
  */
5
- sap.ui.define(["sap/fe/core/converters/controls/Common/Action", "sap/fe/core/converters/objectPage/HeaderAndFooterAction", "sap/fe/core/helpers/BindingExpression", "../controls/ObjectPage/Avatar", "../controls/ObjectPage/HeaderFacet", "../controls/ObjectPage/SubSection", "../helpers/BindingHelper", "../helpers/ConfigurableObject", "../helpers/ID", "../ManifestSettings"], function (Action, HeaderAndFooterAction, BindingExpression, Avatar, HeaderFacet, SubSection, BindingHelper, ConfigurableObject, ID, ManifestSettings) {
5
+ sap.ui.define(["sap/fe/core/converters/controls/Common/Action", "sap/fe/core/converters/objectPage/HeaderAndFooterAction", "sap/fe/core/helpers/BindingToolkit", "../controls/ObjectPage/Avatar", "../controls/ObjectPage/HeaderFacet", "../controls/ObjectPage/SubSection", "../helpers/BindingHelper", "../helpers/ConfigurableObject", "../helpers/ID", "../ManifestSettings"], function (Action, HeaderAndFooterAction, BindingToolkit, Avatar, HeaderFacet, SubSection, BindingHelper, ConfigurableObject, ID, ManifestSettings) {
6
6
  "use strict";
7
7
 
8
8
  var _exports = {};
9
9
  var TemplateType = ManifestSettings.TemplateType;
10
- var SectionID = ID.SectionID;
11
- var EditableHeaderSectionID = ID.EditableHeaderSectionID;
12
- var CustomSectionID = ID.CustomSectionID;
10
+ var getSectionID = ID.getSectionID;
11
+ var getEditableHeaderSectionID = ID.getEditableHeaderSectionID;
12
+ var getCustomSectionID = ID.getCustomSectionID;
13
13
  var Placement = ConfigurableObject.Placement;
14
14
  var insertCustomElements = ConfigurableObject.insertCustomElements;
15
15
  var UI = BindingHelper.UI;
@@ -19,12 +19,12 @@ sap.ui.define(["sap/fe/core/converters/controls/Common/Action", "sap/fe/core/con
19
19
  var getHeaderFacetsFromManifest = HeaderFacet.getHeaderFacetsFromManifest;
20
20
  var getHeaderFacetsFromAnnotations = HeaderFacet.getHeaderFacetsFromAnnotations;
21
21
  var getAvatar = Avatar.getAvatar;
22
- var not = BindingExpression.not;
23
- var ifElse = BindingExpression.ifElse;
24
- var equal = BindingExpression.equal;
25
- var constant = BindingExpression.constant;
26
- var compileBinding = BindingExpression.compileBinding;
27
- var annotationExpression = BindingExpression.annotationExpression;
22
+ var not = BindingToolkit.not;
23
+ var ifElse = BindingToolkit.ifElse;
24
+ var getExpressionFromAnnotation = BindingToolkit.getExpressionFromAnnotation;
25
+ var equal = BindingToolkit.equal;
26
+ var constant = BindingToolkit.constant;
27
+ var compileExpression = BindingToolkit.compileExpression;
28
28
  var getHiddenHeaderActions = HeaderAndFooterAction.getHiddenHeaderActions;
29
29
  var getHeaderDefaultActions = HeaderAndFooterAction.getHeaderDefaultActions;
30
30
  var getFooterDefaultActions = HeaderAndFooterAction.getFooterDefaultActions;
@@ -47,14 +47,14 @@ sap.ui.define(["sap/fe/core/converters/controls/Common/Action", "sap/fe/core/con
47
47
  *
48
48
  * @param converterContext The converter context
49
49
  * @param allHeaderFacets The converter context
50
- * @returns {ObjectPageSection} The section representing the editable header parts
50
+ * @returns The section representing the editable header parts
51
51
  */
52
52
 
53
53
 
54
54
  function createEditableHeaderSection(converterContext, allHeaderFacets) {
55
55
  var _converterContext$get, _converterContext$get2;
56
56
 
57
- var editableHeaderSectionID = EditableHeaderSectionID();
57
+ var editableHeaderSectionID = getEditableHeaderSectionID();
58
58
  var headerFacets = (_converterContext$get = converterContext.getEntityType().annotations) === null || _converterContext$get === void 0 ? void 0 : (_converterContext$get2 = _converterContext$get.UI) === null || _converterContext$get2 === void 0 ? void 0 : _converterContext$get2.HeaderFacets;
59
59
  var headerfacetSubSections = headerFacets ? createSubSections(headerFacets, converterContext, true) : [];
60
60
  var customHeaderFacetSubSections = createCustomHeaderFacetSubSections(converterContext);
@@ -90,7 +90,7 @@ sap.ui.define(["sap/fe/core/converters/controls/Common/Action", "sap/fe/core/con
90
90
  id: editableHeaderSectionID,
91
91
  key: "EditableHeaderContent",
92
92
  title: "{sap.fe.i18n>T_COMMON_OBJECT_PAGE_HEADER_SECTION}",
93
- visible: compileBinding(UI.IsEditable),
93
+ visible: compileExpression(UI.IsEditable),
94
94
  subSections: allHeaderFacetsSubSections
95
95
  };
96
96
  return headerSection;
@@ -99,7 +99,7 @@ sap.ui.define(["sap/fe/core/converters/controls/Common/Action", "sap/fe/core/con
99
99
  * Creates a definition for a section based on the Facet annotation.
100
100
  *
101
101
  * @param converterContext The converter context
102
- * @returns {ObjectPageSection[]} All sections
102
+ * @returns All sections
103
103
  */
104
104
 
105
105
 
@@ -119,31 +119,32 @@ sap.ui.define(["sap/fe/core/converters/controls/Common/Action", "sap/fe/core/con
119
119
  *
120
120
  * @param facet
121
121
  * @param converterContext
122
- * @returns {ObjectPageSection} The current section
122
+ * @returns The current section
123
123
  */
124
124
 
125
125
 
126
126
  function getSectionFromAnnotation(facet, converterContext) {
127
127
  var _facet$annotations, _facet$annotations$UI, _facet$annotations$UI2;
128
128
 
129
- var sectionID = SectionID({
129
+ var sectionID = getSectionID({
130
130
  Facet: facet
131
131
  });
132
132
  var section = {
133
133
  id: sectionID,
134
134
  key: getSectionKey(facet, sectionID),
135
- title: compileBinding(annotationExpression(facet.Label)),
135
+ title: compileExpression(getExpressionFromAnnotation(facet.Label)),
136
136
  showTitle: !!facet.Label,
137
- visible: compileBinding(not(equal(annotationExpression((_facet$annotations = facet.annotations) === null || _facet$annotations === void 0 ? void 0 : (_facet$annotations$UI = _facet$annotations.UI) === null || _facet$annotations$UI === void 0 ? void 0 : (_facet$annotations$UI2 = _facet$annotations$UI.Hidden) === null || _facet$annotations$UI2 === void 0 ? void 0 : _facet$annotations$UI2.valueOf()), true))),
137
+ visible: compileExpression(not(equal(getExpressionFromAnnotation((_facet$annotations = facet.annotations) === null || _facet$annotations === void 0 ? void 0 : (_facet$annotations$UI = _facet$annotations.UI) === null || _facet$annotations$UI === void 0 ? void 0 : (_facet$annotations$UI2 = _facet$annotations$UI.Hidden) === null || _facet$annotations$UI2 === void 0 ? void 0 : _facet$annotations$UI2.valueOf()), true))),
138
138
  subSections: createSubSections([facet], converterContext)
139
139
  };
140
140
  return section;
141
141
  }
142
142
  /**
143
- * Creates section definition based on manifest definition.
144
- * @param manifestSections The manifest defined sections
143
+ * Creates section definitions based on the manifest definitions.
144
+ *
145
+ * @param manifestSections The sections defined in the manifest
145
146
  * @param converterContext
146
- * @returns {Record<string, CustomObjectPageSection>} The manifest defined sections
147
+ * @returns The sections defined in the manifest
147
148
  */
148
149
 
149
150
 
@@ -155,16 +156,17 @@ sap.ui.define(["sap/fe/core/converters/controls/Common/Action", "sap/fe/core/con
155
156
  return sections;
156
157
  }
157
158
  /**
158
- * Create a manifest based custom section.
159
+ * Create a manifest-based custom section.
160
+ *
159
161
  * @param customSectionDefinition
160
162
  * @param sectionKey
161
163
  * @param converterContext
162
- * @returns {CustomObjectPageSection} The current custom section
164
+ * @returns The current custom section
163
165
  */
164
166
 
165
167
 
166
168
  function getSectionFromManifest(customSectionDefinition, sectionKey, converterContext) {
167
- var customSectionID = customSectionDefinition.id || CustomSectionID(sectionKey);
169
+ var customSectionID = customSectionDefinition.id || getCustomSectionID(sectionKey);
168
170
  var position = customSectionDefinition.position;
169
171
 
170
172
  if (!position) {
@@ -180,7 +182,7 @@ sap.ui.define(["sap/fe/core/converters/controls/Common/Action", "sap/fe/core/con
180
182
  // and make sure to set the visibility to 'true', as the actual visibility is handled by the section itself
181
183
  manifestSubSections = _defineProperty({}, sectionKey, _objectSpread(_objectSpread({}, customSectionDefinition), {}, {
182
184
  position: undefined,
183
- visible: true
185
+ visible: "true"
184
186
  }));
185
187
  } else {
186
188
  manifestSubSections = customSectionDefinition.subSections;
@@ -192,7 +194,7 @@ sap.ui.define(["sap/fe/core/converters/controls/Common/Action", "sap/fe/core/con
192
194
  key: sectionKey,
193
195
  title: customSectionDefinition.title,
194
196
  showTitle: !!customSectionDefinition.title,
195
- visible: customSectionDefinition.visible !== undefined ? customSectionDefinition.visible : true,
197
+ visible: customSectionDefinition.visible !== undefined ? customSectionDefinition.visible : "true",
196
198
  position: position,
197
199
  subSections: subSections
198
200
  };
@@ -201,7 +203,7 @@ sap.ui.define(["sap/fe/core/converters/controls/Common/Action", "sap/fe/core/con
201
203
  /**
202
204
  * Retrieves the ObjectPage header actions (both the default ones and the custom ones defined in the manifest).
203
205
  *
204
- * @param {ConverterContext} converterContext The converter context
206
+ * @param converterContext The converter context
205
207
  * @returns An array containing all the actions for this ObjectPage header
206
208
  */
207
209
 
@@ -220,7 +222,7 @@ sap.ui.define(["sap/fe/core/converters/controls/Common/Action", "sap/fe/core/con
220
222
  /**
221
223
  * Retrieves the ObjectPage footer actions (both the default ones and the custom ones defined in the manifest).
222
224
  *
223
- * @param {ConverterContext} converterContext The converter context
225
+ * @param converterContext The converter context
224
226
  * @returns An array containing all the actions for this ObjectPage footer
225
227
  */
226
228
 
@@ -230,18 +232,17 @@ sap.ui.define(["sap/fe/core/converters/controls/Common/Action", "sap/fe/core/con
230
232
  var getFooterActions = function (converterContext) {
231
233
  var manifestWrapper = converterContext.getManifestWrapper();
232
234
  var aAnnotationFooterActions = getFooterDefaultActions(manifestWrapper.getViewLevel(), converterContext);
233
- var footerActions = insertCustomElements(aAnnotationFooterActions, getActionsFromManifest(manifestWrapper.getFooterActions(), converterContext, aAnnotationFooterActions), {
235
+ return insertCustomElements(aAnnotationFooterActions, getActionsFromManifest(manifestWrapper.getFooterActions(), converterContext, aAnnotationFooterActions), {
234
236
  isNavigable: "overwrite",
235
237
  enabled: "overwrite",
236
238
  defaultValuesExtensionFunction: "overwrite",
237
239
  command: "overwrite"
238
240
  });
239
- return footerActions;
240
241
  };
241
242
  /**
242
243
  * Retrieves and merges the ObjectPage sections defined in the annotation and in the manifest.
243
244
  *
244
- * @param {ConverterContext} converterContext The converter context
245
+ * @param converterContext The converter context
245
246
  * @returns An array of sections.
246
247
  */
247
248
 
@@ -292,7 +293,7 @@ sap.ui.define(["sap/fe/core/converters/controls/Common/Action", "sap/fe/core/con
292
293
  * Determines if the ObjectPage has header content.
293
294
  *
294
295
  * @param converterContext The instance of the converter context
295
- * @returns {boolean} `true` if there is at least on header facet
296
+ * @returns `true` if there is at least on header facet
296
297
  */
297
298
 
298
299
 
@@ -308,7 +309,7 @@ sap.ui.define(["sap/fe/core/converters/controls/Common/Action", "sap/fe/core/con
308
309
  * Gets the expression to evaluate the visibility of the header content.
309
310
  *
310
311
  * @param converterContext The instance of the converter context
311
- * @returns {BindingExpression<boolean>} The binding expression for the Delete button
312
+ * @returns The binding expression for the Delete button
312
313
  */
313
314
 
314
315
 
@@ -320,25 +321,25 @@ sap.ui.define(["sap/fe/core/converters/controls/Common/Action", "sap/fe/core/con
320
321
  * Gets the binding expression to evaluate the visibility of the header content.
321
322
  *
322
323
  * @param converterContext The instance of the converter context
323
- * @returns {BindingExpression<boolean>} The binding expression for the Delete button
324
+ * @returns The binding expression for the Delete button
324
325
  */
325
326
 
326
327
 
327
328
  var getShowHeaderContent = function (converterContext) {
328
- return compileBinding(getShowHeaderContentExpression(converterContext));
329
+ return compileExpression(getShowHeaderContentExpression(converterContext));
329
330
  };
330
331
  /**
331
332
  * Gets the binding expression to evaluate the visibility of the avatar when the header is in expanded state.
332
333
  *
333
334
  * @param converterContext The instance of the converter context
334
- * @returns {BindingExpression<string>} The binding expression for the Delete button
335
+ * @returns The binding expression for the Delete button
335
336
  */
336
337
 
337
338
 
338
339
  _exports.getShowHeaderContent = getShowHeaderContent;
339
340
 
340
341
  var getExpandedImageVisible = function (converterContext) {
341
- return compileBinding(not(getShowHeaderContentExpression(converterContext)));
342
+ return compileExpression(not(getShowHeaderContentExpression(converterContext)));
342
343
  };
343
344
 
344
345
  _exports.getExpandedImageVisible = getExpandedImageVisible;
@@ -385,4 +386,4 @@ sap.ui.define(["sap/fe/core/converters/controls/Common/Action", "sap/fe/core/con
385
386
  _exports.convertPage = convertPage;
386
387
  return _exports;
387
388
  }, false);
388
- //# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIk9iamVjdFBhZ2VDb252ZXJ0ZXIudHMiXSwibmFtZXMiOlsiZ2V0U2VjdGlvbktleSIsImZhY2V0RGVmaW5pdGlvbiIsImZhbGxiYWNrIiwiSUQiLCJ0b1N0cmluZyIsIkxhYmVsIiwiY3JlYXRlRWRpdGFibGVIZWFkZXJTZWN0aW9uIiwiY29udmVydGVyQ29udGV4dCIsImFsbEhlYWRlckZhY2V0cyIsImVkaXRhYmxlSGVhZGVyU2VjdGlvbklEIiwiRWRpdGFibGVIZWFkZXJTZWN0aW9uSUQiLCJoZWFkZXJGYWNldHMiLCJnZXRFbnRpdHlUeXBlIiwiYW5ub3RhdGlvbnMiLCJVSSIsIkhlYWRlckZhY2V0cyIsImhlYWRlcmZhY2V0U3ViU2VjdGlvbnMiLCJjcmVhdGVTdWJTZWN0aW9ucyIsImN1c3RvbUhlYWRlckZhY2V0U3ViU2VjdGlvbnMiLCJjcmVhdGVDdXN0b21IZWFkZXJGYWNldFN1YlNlY3Rpb25zIiwiYWxsSGVhZGVyRmFjZXRzU3ViU2VjdGlvbnMiLCJsZW5ndGgiLCJpIiwiZm9yRWFjaCIsIml0ZW0iLCJ2aXNpYmxlIiwicHVzaCIsImtleSIsInNsaWNlIiwibGFzdEluZGV4T2YiLCJjdXN0b21JdGVtIiwiaGVhZGVyU2VjdGlvbiIsImlkIiwidGl0bGUiLCJjb21waWxlQmluZGluZyIsIklzRWRpdGFibGUiLCJzdWJTZWN0aW9ucyIsImdldFNlY3Rpb25zRnJvbUFubm90YXRpb24iLCJlbnRpdHlUeXBlIiwib2JqZWN0UGFnZVNlY3Rpb25zIiwiRmFjZXRzIiwibWFwIiwiZ2V0U2VjdGlvbkZyb21Bbm5vdGF0aW9uIiwiZmFjZXQiLCJzZWN0aW9uSUQiLCJTZWN0aW9uSUQiLCJGYWNldCIsInNlY3Rpb24iLCJhbm5vdGF0aW9uRXhwcmVzc2lvbiIsInNob3dUaXRsZSIsIm5vdCIsImVxdWFsIiwiSGlkZGVuIiwidmFsdWVPZiIsImdldFNlY3Rpb25zRnJvbU1hbmlmZXN0IiwibWFuaWZlc3RTZWN0aW9ucyIsInNlY3Rpb25zIiwiT2JqZWN0Iiwia2V5cyIsIm1hbmlmZXN0U2VjdGlvbktleSIsImdldFNlY3Rpb25Gcm9tTWFuaWZlc3QiLCJjdXN0b21TZWN0aW9uRGVmaW5pdGlvbiIsInNlY3Rpb25LZXkiLCJjdXN0b21TZWN0aW9uSUQiLCJDdXN0b21TZWN0aW9uSUQiLCJwb3NpdGlvbiIsInBsYWNlbWVudCIsIlBsYWNlbWVudCIsIkFmdGVyIiwibWFuaWZlc3RTdWJTZWN0aW9ucyIsInVuZGVmaW5lZCIsImNyZWF0ZUN1c3RvbVN1YlNlY3Rpb25zIiwiY3VzdG9tU2VjdGlvbiIsImdldEhlYWRlckFjdGlvbnMiLCJhQW5ub3RhdGlvbkhlYWRlckFjdGlvbnMiLCJnZXRIZWFkZXJEZWZhdWx0QWN0aW9ucyIsIm1hbmlmZXN0V3JhcHBlciIsImdldE1hbmlmZXN0V3JhcHBlciIsImhlYWRlckFjdGlvbnMiLCJpbnNlcnRDdXN0b21FbGVtZW50cyIsImdldEFjdGlvbnNGcm9tTWFuaWZlc3QiLCJnZXRIaWRkZW5IZWFkZXJBY3Rpb25zIiwiaXNOYXZpZ2FibGUiLCJlbmFibGVkIiwiZGVmYXVsdFZhbHVlc0V4dGVuc2lvbkZ1bmN0aW9uIiwiY29tbWFuZCIsInJlbW92ZUR1cGxpY2F0ZUFjdGlvbnMiLCJnZXRGb290ZXJBY3Rpb25zIiwiYUFubm90YXRpb25Gb290ZXJBY3Rpb25zIiwiZ2V0Rm9vdGVyRGVmYXVsdEFjdGlvbnMiLCJnZXRWaWV3TGV2ZWwiLCJmb290ZXJBY3Rpb25zIiwiZ2V0U2VjdGlvbnMiLCJzdWJTZWN0aW9uIiwidHlwZSIsInNpZGVDb250ZW50IiwiY29udGVudCIsImFjdGlvbnMiLCJoYXNIZWFkZXJDb250ZW50IiwiZ2V0SGVhZGVyRmFjZXRzIiwiZ2V0U2hvd0hlYWRlckNvbnRlbnRFeHByZXNzaW9uIiwiaWZFbHNlIiwiY29uc3RhbnQiLCJpc0hlYWRlckVkaXRhYmxlIiwiZ2V0U2hvd0hlYWRlckNvbnRlbnQiLCJnZXRFeHBhbmRlZEltYWdlVmlzaWJsZSIsImNvbnZlcnRQYWdlIiwiZ2V0SGVhZGVyRmFjZXRzRnJvbUFubm90YXRpb25zIiwiZ2V0SGVhZGVyRmFjZXRzRnJvbU1hbmlmZXN0IiwiSGVhZGVySW5mbyIsInRlbXBsYXRlIiwiVGVtcGxhdGVUeXBlIiwiT2JqZWN0UGFnZSIsImhlYWRlciIsImdldFNob3dPYmplY3RQYWdlSGVhZGVyIiwiZmFjZXRzIiwic2hvd0NvbnRlbnQiLCJoYXNDb250ZW50IiwiYXZhdGFyIiwiZ2V0QXZhdGFyIiwiZXhwYW5kZWRJbWFnZVZpc2libGUiLCJzaG93QW5jaG9yQmFyIiwiZ2V0U2hvd0FuY2hvckJhciIsInVzZUljb25UYWJCYXIiXSwibWFwcGluZ3MiOiI7QUFBQTtBQUNBO0FBQ0E7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7OztBQXFEQSxNQUFNQSxhQUFhLEdBQUcsVUFBQ0MsZUFBRCxFQUE4QkMsUUFBOUIsRUFBMkQ7QUFBQTs7QUFDaEYsV0FBTyx3QkFBQUQsZUFBZSxDQUFDRSxFQUFoQiw0RUFBb0JDLFFBQXBCLGlDQUFrQ0gsZUFBZSxDQUFDSSxLQUFsRCwwREFBa0Msc0JBQXVCRCxRQUF2QixFQUFsQyxLQUF1RUYsUUFBOUU7QUFDQSxHQUZEO0FBSUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7OztBQUNPLFdBQVNJLDJCQUFULENBQ05DLGdCQURNLEVBRU5DLGVBRk0sRUFHYztBQUFBOztBQUNwQixRQUFNQyx1QkFBdUIsR0FBR0MsdUJBQXVCLEVBQXZEO0FBQ0EsUUFBTUMsWUFBWSw0QkFBR0osZ0JBQWdCLENBQUNLLGFBQWpCLEdBQWlDQyxXQUFwQyxvRkFBRyxzQkFBOENDLEVBQWpELDJEQUFHLHVCQUFrREMsWUFBdkU7QUFDQSxRQUFNQyxzQkFBc0IsR0FBR0wsWUFBWSxHQUFHTSxpQkFBaUIsQ0FBQ04sWUFBRCxFQUFlSixnQkFBZixFQUFpQyxJQUFqQyxDQUFwQixHQUE2RCxFQUF4RztBQUNBLFFBQU1XLDRCQUE0QixHQUFHQyxrQ0FBa0MsQ0FBQ1osZ0JBQUQsQ0FBdkU7QUFDQSxRQUFJYSwwQkFBa0QsR0FBRyxF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R0ExQ00iLCJzb3VyY2VSb290IjoiLiIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IEVudGl0eVR5cGUgfSBmcm9tIFwiQHNhcC11eC9hbm5vdGF0aW9uLWNvbnZlcnRlclwiO1xuaW1wb3J0IHsgRmFjZXRUeXBlcyB9IGZyb20gXCJAc2FwLXV4L3ZvY2FidWxhcmllcy10eXBlc1wiO1xuaW1wb3J0IHsgQmFzZUFjdGlvbiwgZ2V0QWN0aW9uc0Zyb21NYW5pZmVzdCwgcmVtb3ZlRHVwbGljYXRlQWN0aW9ucyB9IGZyb20gXCJzYXAvZmUvY29yZS9jb252ZXJ0ZXJzL2NvbnRyb2xzL0NvbW1vbi9BY3Rpb25cIjtcbmltcG9ydCB7XG5cdGdldEZvb3RlckRlZmF1bHRBY3Rpb25zLFxuXHRnZXRIZWFkZXJEZWZhdWx0QWN0aW9ucyxcblx0Z2V0SGlkZGVuSGVhZGVyQWN0aW9uc1xufSBmcm9tIFwic2FwL2ZlL2NvcmUvY29udmVydGVycy9vYmplY3RQYWdlL0hlYWRlckFuZEZvb3RlckFjdGlvblwiO1xuaW1wb3J0IHtcblx0YW5ub3RhdGlvbkV4cHJlc3Npb24sXG5cdEJpbmRpbmdFeHByZXNzaW9uLFxuXHRjb21waWxlQmluZGluZyxcblx0Y29uc3RhbnQsXG5cdGVxdWFsLFxuXHRFeHByZXNzaW9uLFxuXHRpZkVsc2UsXG5cdG5vdFxufSBmcm9tIFwic2FwL2ZlL2NvcmUvaGVscGVycy9CaW5kaW5nRXhwcmVzc2lvblwiO1xuaW1wb3J0IHsgQXZhdGFyLCBnZXRBdmF0YXIgfSBmcm9tIFwiLi4vY29udHJvbHMvT2JqZWN0UGFnZS9BdmF0YXJcIjtcbmltcG9ydCB7IGdldEhlYWRlckZhY2V0c0Zyb21Bbm5vdGF0aW9ucywgZ2V0SGVhZGVyRmFjZXRzRnJvbU1hbmlmZXN0LCBPYmplY3RQYWdlSGVhZGVyRmFjZXQgfSBmcm9tIFwiLi4vY29udHJvbHMvT2JqZWN0UGFnZS9IZWFkZXJGYWNldFwiO1xuaW1wb3J0IHtcblx0Y3JlYXRlQ3VzdG9tSGVhZGVyRmFjZXRTdWJTZWN0aW9ucyxcblx0Y3JlYXRlQ3VzdG9tU3ViU2VjdGlvbnMsXG5cdGNyZWF0ZVN1YlNlY3Rpb25zLFxuXHRDdXN0b21PYmplY3RQYWdlU2VjdGlvbixcblx0Rm9ybVN1YlNlY3Rpb24sXG5cdE9iamVjdFBhZ2VTZWN0aW9uLFxuXHRPYmplY3RQYWdlU3ViU2VjdGlvblxufSBmcm9tIFwiLi4vY29udHJvbHMvT2JqZWN0UGFnZS9TdWJTZWN0aW9uXCI7XG5pbXBvcnQgQ29udmVydGVyQ29udGV4dCBmcm9tIFwiLi4vQ29udmVydGVyQ29udGV4dFwiO1xuaW1wb3J0IHsgVUkgfSBmcm9tIFwiLi4vaGVscGVycy9CaW5kaW5nSGVscGVyXCI7XG5pbXBvcnQgeyBDb25maWd1cmFibGVSZWNvcmQsIGluc2VydEN1c3RvbUVsZW1lbnRzLCBQbGFjZW1lbnQsIFBvc2l0aW9uIH0gZnJvbSBcIi4uL2hlbHBlcnMvQ29uZmlndXJhYmxlT2JqZWN0XCI7XG5pbXBvcnQgeyBDdXN0b21TZWN0aW9uSUQsIEVkaXRhYmxlSGVhZGVyU2VjdGlvbklELCBTZWN0aW9uSUQgfSBmcm9tIFwiLi4vaGVscGVycy9JRFwiO1xuaW1wb3J0IHsgTWFuaWZlc3RTZWN0aW9uLCBNYW5pZmVzdFN1YlNlY3Rpb24sIFRlbXBsYXRlVHlwZSB9IGZyb20gXCIuLi9NYW5pZmVzdFNldHRpbmdzXCI7XG5pbXBvcnQgeyBQYWdlRGVmaW5pdGlvbiB9IGZyb20gXCIuLi9UZW1wbGF0ZUNvbnZlcnRlclwiO1xuXG5leHBvcnQgdHlwZSBPYmplY3RQYWdlRGVmaW5pdGlvbiA9IFBhZ2VEZWZpbml0aW9uICYge1xuXHRoZWFkZXI6IHtcblx0XHR2aXNpYmxlOiBib29sZWFuO1xuXHRcdHNlY3Rpb24/OiBPYmplY3RQYWdlU2VjdGlvbjtcblx0XHRmYWNldHM6IE9iamVjdFBhZ2VIZWFkZXJGYWNldFtdO1xuXHRcdGFjdGlvbnM6IEJhc2VBY3Rpb25bXTtcblx0XHRzaG93Q29udGVudDogQmluZGluZ0V4cHJlc3Npb248Ym9vbGVhbj47XG5cdFx0aGFzQ29udGVudDogYm9vbGVhbjtcblx0XHRhdmF0YXI/OiBBdmF0YXI7XG5cdFx0dGl0bGU6IHtcblx0XHRcdGV4cGFuZGVkSW1hZ2VWaXNpYmxlOiBCaW5kaW5nRXhwcmVzc2lvbjxzdHJpbmc+O1xuXHRcdH07XG5cdH07XG5cdHNlY3Rpb25zOiBPYmplY3RQYWdlU2VjdGlvbltdO1xuXHRmb290ZXJBY3Rpb25zOiBCYXNlQWN0aW9uW107XG5cdHNob3dBbmNob3JCYXI6IGJvb2xlYW47XG5cdHVzZUljb25UYWJCYXI6IGJvb2xlYW47XG59O1xuXG5jb25zdCBnZXRTZWN0aW9uS2V5ID0gKGZhY2V0RGVmaW5pdGlvbjogRmFjZXRUeXBlcywgZmFsbGJhY2s6IHN0cmluZyk6IHN0cmluZyA9PiB7XG5cdHJldHVybiBmYWNldERlZmluaXRpb24uSUQ/LnRvU3RyaW5nKCkgfHwgZmFjZXREZWZpbml0aW9uLkxhYmVsPy50b1N0cmluZygpIHx8IGZhbGxiYWNrO1xufTtcblxuLyoqXG4gKiBDcmVhdGVzIGEgc2VjdGlvbiB0aGF0IHJlcHJlc2VudHMgdGhlIGVkaXRhYmxlIGhlYWRlciBwYXJ0OyBpdCBpcyBvbmx5IHZpc2libGUgaW4gZWRpdCBtb2RlLlxuICpcbiAqIEBwYXJhbSBjb252ZXJ0ZXJDb250ZXh0IFRoZSBjb252ZXJ0ZXIgY29udGV4dFxuICogQHBhcmFtIGFsbEhlYWRlckZhY2V0cyBUaGUgY29udmVydGVyIGNvbnRleHRcbiAqIEByZXR1cm5zIHtPYmplY3RQYWdlU2VjdGlvbn0gVGhlIHNlY3Rpb24gcmVwcmVzZW50aW5nIHRoZSBlZGl0YWJsZSBoZWFkZXIgcGFydHNcbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGNyZWF0ZUVkaXRhYmxlSGVhZGVyU2VjdGlvbihcblx0Y29udmVydGVyQ29udGV4dDogQ29udmVydGVyQ29udGV4dCxcblx0YWxsSGVhZGVyRmFjZXRzOiBPYmplY3RQYWdlSGVhZGVyRmFjZXRbXVxuKTogT2JqZWN0UGFnZVNlY3Rpb24ge1xuXHRjb25zdCBlZGl0YWJsZUhlYWRlclNlY3Rpb25JRCA9IEVkaXRhYmxlSGVhZGVyU2VjdGlvbklEKCk7XG5cdGNvbnN0IGhlYWRlckZhY2V0cyA9IGNvbnZlcnRlckNvbnRleHQuZ2V0RW50aXR5VHlwZSgpLmFubm90YXRpb25zPy5VST8uSGVhZGVyRmFjZXRzO1xuXHRjb25zdCBoZWFkZXJmYWNldFN1YlNlY3Rpb25zID0gaGVhZGVyRmFjZXRzID8gY3JlYXRlU3ViU2VjdGlvbnMoaGVhZGVyRmFjZXRzLCBjb252ZXJ0ZXJDb250ZXh0LCB0cnVlKSA6IFtdO1xuXHRjb25zdCBjdXN0b21IZWFkZXJGYWNldFN1YlNlY3Rpb25zID0gY3JlYXRlQ3VzdG9tSGVhZGVyRmFjZXRTdWJTZWN0aW9ucyhjb252ZXJ0ZXJDb250ZXh0KTtcblx0bGV0IGFsbEhlYWRlckZhY2V0c1N1YlNlY3Rpb25zOiBPYmplY3RQYWdlU3ViU2VjdGlvbltdID0gW107XG5cdGlmIChjdXN0b21IZWFkZXJGYWNldFN1YlNlY3Rpb25zLmxlbmd0aCA+IDApIHtcblx0XHQvLyBtZXJnZSBhbm5vdGF0aW9uIGJhc2VkIGhlYWRlciBmYWNldHMgYW5kIGN1c3RvbSBoZWFkZXIgZmFjZXRzIGluIHRoZSByaWdodCBvcmRlclxuXHRcdGxldCBpID0gMDtcblx0XHRhbGxIZWFkZXJGYWNldHMuZm9yRWFjaChmdW5jdGlvbiAoaXRlbSkge1xuXHRcdFx0Ly8gaGlkZGVuIGhlYWRlciBmYWNldHMgYXJlIG5vdCBpbmNsdWRlZCBpbiBhbGxIZWFkZXJGYWNldHMgYXJyYXkgPT4gYWRkIHRoZW0gYW55d2F5XG5cdFx0XHR3aGlsZSAoaGVhZGVyZmFjZXRTdWJTZWN0aW9ucy5sZW5ndGggPiBpICYmIGhlYWRlcmZhY2V0U3ViU2VjdGlvbnNbaV0udmlzaWJsZSA9PT0gXCJmYWxzZVwiKSB7XG5cdFx0XHRcdGFsbEhlYWRlckZhY2V0c1N1YlNlY3Rpb25zLnB1c2goaGVhZGVyZmFjZXRTdWJTZWN0aW9uc1tpXSk7XG5cdFx0XHRcdGkrKztcblx0XHRcdH1cblx0XHRcdGlmIChcblx0XHRcdFx0aGVhZGVyZmFjZXRTdWJTZWN0aW9ucy5sZW5ndGggPiBpICYmXG5cdFx0XHRcdChpdGVtLmtleSA9PT0gaGVhZGVyZmFjZXRTdWJTZWN0aW9uc1tpXS5rZXkgfHxcblx0XHRcdFx0XHQvLyBmb3IgaGVhZGVyIGZhY2V0cyB3aXRoIG5vIGlkIHRoZSBrZXlzIG9mIGhlYWRlciBmYWNldCBhbmQgc3Vic2VjdGlvbiBhcmUgZGlmZmVyZW50ID0+IGNoZWNrIG9ubHkgdGhlIGxhc3QgcGFydFxuXHRcdFx0XHRcdGl0ZW0ua2V5LnNsaWNlKGl0ZW0ua2V5Lmxhc3RJbmRleE9mKFwiOjpcIikgKyAyKSA9PT1cblx0XHRcdFx0XHRcdGhlYWRlcmZhY2V0U3ViU2VjdGlvbnNbaV0ua2V5LnNsaWNlKGhlYWRlcmZhY2V0U3ViU2VjdGlvbnNbaV0ua2V5Lmxhc3RJbmRleE9mKFwiOjpcIikgKyAyKSlcblx0XHRcdCkge1xuXHRcdFx0XHRhbGxIZWFkZXJGYWNldHNTdWJTZWN0aW9ucy5wdXNoKGhlYWRlcmZhY2V0U3ViU2VjdGlvbnNbaV0pO1xuXHRcdFx0XHRpKys7XG5cdFx0XHR9IGVsc2Uge1xuXHRcdFx0XHRjdXN0b21IZWFkZXJGYWNldFN1YlNlY3Rpb25zLmZvckVhY2goZnVuY3Rpb24gKGN1c3RvbUl0ZW0pIHtcblx0XHRcdFx0XHRpZiAoaXRlbS5rZXkgPT09IGN1c3RvbUl0ZW0ua2V5KSB7XG5cdFx0XHRcdFx0XHRhbGxIZWFkZXJGYWNldHNTdWJTZWN0aW9ucy5wdXNoKGN1c3RvbUl0ZW0pO1xuXHRcdFx0XHRcdH1cblx0XHRcdFx0fSk7XG5cdFx0XHR9XG5cdFx0fSk7XG5cdH0gZWxzZSB7XG5cdFx0YWxsSGVhZGVyRmFjZXRzU3ViU2VjdGlvbnMgPSBoZWFkZXJmYWNldFN1YlNlY3Rpb25zO1xuXHR9XG5cdGNvbnN0IGhlYWRlclNlY3Rpb246IE9iamVjdFBhZ2VTZWN0aW9uID0ge1xuXHRcdGlkOiBlZGl0YWJsZUhlYWRlclNlY3Rpb25JRCxcblx0XHRrZXk6IFwiRWRpdGFibGVIZWFkZXJDb250ZW50XCIsXG5cdFx0dGl0bGU6IFwie3NhcC5mZS5pMThuPlRfQ09NTU9OX09CSkVDVF9QQUdFX0hFQURFUl9TRUNUSU9OfVwiLFxuXHRcdHZpc2libGU6IGNvbXBpbGVCaW5kaW5nKFVJLklzRWRpdGFibGUpLFxuXHRcdHN1YlNlY3Rpb25zOiBhbGxIZWFkZXJGYWNldHNTdWJTZWN0aW9uc1xuXHR9O1xuXHRyZXR1cm4gaGVhZGVyU2VjdGlvbjtcbn1cblxuLyoqXG4gKiBDcmVhdGVzIGEgZGVmaW5pdGlvbiBmb3IgYSBzZWN0aW9uIGJhc2VkIG9uIHRoZSBGYWNldCBhbm5vdGF0aW9uLlxuICpcbiAqIEBwYXJhbSBjb252ZXJ0ZXJDb250ZXh0IFRoZSBjb252ZXJ0ZXIgY29udGV4dFxuICogQHJldHVybnMge09iamVjdFBhZ2VTZWN0aW9uW119IEFsbCBzZWN0aW9uc1xuICovXG5mdW5jdGlvbiBnZXRTZWN0aW9uc0Zyb21Bbm5vdGF0aW9uKGNvbnZlcnRlckNvbnRleHQ6IENvbnZlcnRlckNvbnRleHQpOiBPYmplY3RQYWdlU2VjdGlvbltdIHtcblx0Y29uc3QgZW50aXR5VHlwZSA9IGNvbnZlcnRlckNvbnRleHQuZ2V0RW50aXR5VHlwZSgpO1xuXHRjb25zdCBvYmplY3RQYWdlU2VjdGlvbnM6IE9iamVjdFBhZ2VTZWN0aW9uW10gPVxuXHRcdGVudGl0eVR5cGUuYW5ub3RhdGlvbnM/LlVJPy5GYWNldHM/Lm1hcCgoZmFjZXREZWZpbml0aW9uOiBGYWNldFR5cGVzKSA9PlxuXHRcdFx0Z2V0U2VjdGlvbkZyb21Bbm5vdGF0aW9uKGZhY2V0RGVmaW5pdGlvbiwgY29udmVydGVyQ29udGV4dClcblx0XHQpIHx8IFtdO1xuXHRyZXR1cm4gb2JqZWN0UGFnZVNlY3Rpb25zO1xufVxuXG4vKipcbiAqIENyZWF0ZSBhbiBhbm5vdGF0aW9uIGJhc2VkIHNlY3Rpb24uXG4gKlxuICogQHBhcmFtIGZhY2V0XG4gKiBAcGFyYW0gY29udmVydGVyQ29udGV4dFxuICogQHJldHVybnMge09iamVjdFBhZ2VTZWN0aW9ufSBUaGUgY3VycmVudCBzZWN0aW9uXG4gKi9cbmZ1bmN0aW9uIGdldFNlY3Rpb25Gcm9tQW5ub3RhdGlvbihmYWNldDogRmFjZXRUeXBlcywgY29udmVydGVyQ29udGV4dDogQ29udmVydGVyQ29udGV4dCk6IE9iamVjdFBhZ2VTZWN0aW9uIHtcblx0Y29uc3Qgc2VjdGlvbklEID0gU2VjdGlvbklEKHsgRmFjZXQ6IGZhY2V0IH0pO1xuXHRjb25zdCBzZWN0aW9uOiBPYmplY3RQYWdlU2VjdGlvbiA9IHtcblx0XHRpZDogc2VjdGlvbklELFxuXHRcdGtleTogZ2V0U2VjdGlvbktleShmYWNldCwgc2VjdGlvbklEKSxcblx0XHR0aXRsZTogY29tcGlsZUJpbmRpbmcoYW5ub3RhdGlvbkV4cHJlc3Npb24oZmFjZXQuTGFiZWwpKSxcblx0XHRzaG93VGl0bGU6ICEhZmFjZXQuTGFiZWwsXG5cdFx0dmlzaWJsZTogY29tcGlsZUJpbmRpbmcobm90KGVxdWFsKGFubm90YXRpb25FeHByZXNzaW9uKGZhY2V0LmFubm90YXRpb25zPy5VST8uSGlkZGVuPy52YWx1ZU9mKCkpLCB0cnVlKSkpLFxuXHRcdHN1YlNlY3Rpb25zOiBjcmVhdGVTdWJTZWN0aW9ucyhbZmFjZXRdLCBjb252ZXJ0ZXJDb250ZXh0KVxuXHR9O1xuXHRyZXR1cm4gc2VjdGlvbjtcbn1cblxuLyoqXG4gKiBDcmVhdGVzIHNlY3Rpb24gZGVmaW5pdGlvbiBiYXNlZCBvbiBtYW5pZmVzdCBkZWZpbml0aW9uLlxuICogQHBhcmFtIG1hbmlmZXN0U2VjdGlvbnMgVGhlIG1hbmlmZXN0IGRlZmluZWQgc2VjdGlvbnNcbiAqIEBwYXJhbSBjb252ZXJ0ZXJDb250ZXh0XG4gKiBAcmV0dXJucyB7UmVjb3JkPHN0cmluZywgQ3VzdG9tT2JqZWN0UGFnZVNlY3Rpb24+fSBUaGUgbWFuaWZlc3QgZGVmaW5lZCBzZWN0aW9uc1xuICovXG5mdW5jdGlvbiBnZXRTZWN0aW9uc0Zyb21NYW5pZmVzdChcblx0bWFuaWZlc3RTZWN0aW9uczogQ29uZmlndXJhYmxlUmVjb3JkPE1hbmlmZXN0U2VjdGlvbj4sXG5cdGNvbnZlcnRlckNvbnRleHQ6IENvbnZlcnRlckNvbnRleHRcbik6IFJlY29yZDxzdHJpbmcsIEN1c3RvbU9iamVjdFBhZ2VTZWN0aW9uPiB7XG5cdGNvbnN0IHNlY3Rpb25zOiBSZWNvcmQ8c3RyaW5nLCBDdXN0b21PYmplY3RQYWdlU2VjdGlvbj4gPSB7fTtcblx0T2JqZWN0LmtleXMobWFuaWZlc3RTZWN0aW9ucykuZm9yRWFjaCgobWFuaWZlc3RTZWN0aW9uS2V5KSA9PiB7XG5cdFx0c2VjdGlvbnNbbWFuaWZlc3RTZWN0aW9uS2V5XSA9IGdldFNlY3Rpb25Gcm9tTWFuaWZlc3QobWFuaWZlc3RTZWN0aW9uc1ttYW5pZmVzdFNlY3Rpb25LZXldLCBtYW5pZmVzdFNlY3Rpb25LZXksIGNvbnZlcnRlckNvbnRleHQpO1xuXHR9KTtcblx0cmV0dXJuIHNlY3Rpb25zO1xufVxuXG4vKipcbiAqIENyZWF0ZSBhIG1hbmlmZXN0IGJhc2VkIGN1c3RvbSBzZWN0aW9uLlxuICogQHBhcmFtIGN1c3RvbVNlY3Rpb25EZWZpbml0aW9uXG4gKiBAcGFyYW0gc2VjdGlvbktleVxuICogQHBhcmFtIGNvbnZlcnRlckNvbnRleHRcbiAqIEByZXR1cm5zIHtDdXN0b21PYmplY3RQYWdlU2VjdGlvbn0gVGhlIGN1cnJlbnQgY3VzdG9tIHNlY3Rpb25cbiAqL1xuZnVuY3Rpb24gZ2V0U2VjdGlvbkZyb21NYW5pZmVzdChcblx0Y3VzdG9tU2VjdGlvbkRlZmluaXRpb246IE1hbmlmZXN0U2VjdGlvbixcblx0c2VjdGlvbktleTogc3RyaW5nLFxuXHRjb252ZXJ0ZXJDb250ZXh0OiBDb252ZXJ0ZXJDb250ZXh0XG4pOiBDdXN0b21PYmplY3RQYWdlU2VjdGlvbiB7XG5cdGNvbnN0IGN1c3RvbVNlY3Rpb25JRCA9IGN1c3RvbVNlY3Rpb25EZWZpbml0aW9uLmlkIHx8IEN1c3RvbVNlY3Rpb25JRChzZWN0aW9uS2V5KTtcblx0bGV0IHBvc2l0aW9uOiBQb3NpdGlvbiB8IHVuZGVmaW5lZCA9IGN1c3RvbVNlY3Rpb25EZWZpbml0aW9uLnBvc2l0aW9uO1xuXHRpZiAoIXBvc2l0aW9uKSB7XG5cdFx0cG9zaXRpb24gPSB7XG5cdFx0XHRwbGFjZW1lbnQ6IFBsYWNlbWVudC5BZnRlclxuXHRcdH07XG5cdH1cblx0bGV0IG1hbmlmZXN0U3ViU2VjdGlvbnM6IFJlY29yZDxzdHJpbmcsIE1hbmlmZXN0U3ViU2VjdGlvbj47XG5cdGlmICghY3VzdG9tU2VjdGlvbkRlZmluaXRpb24uc3ViU2VjdGlvbnMpIHtcblx0XHQvLyBJZiB0aGVyZSBpcyBubyBzdWJTZWN0aW9uIGRlZmluZWQsIHdlIGFkZCB0aGUgY29udGVudCBvZiB0aGUgY3VzdG9tIHNlY3Rpb24gYXMgc3Vic2VjdGlvbnNcblx0XHQvLyBhbmQgbWFrZSBzdXJlIHRvIHNldCB0aGUgdmlzaWJpbGl0eSB0byAndHJ1ZScsIGFzIHRoZSBhY3R1YWwgdmlzaWJpbGl0eSBpcyBoYW5kbGVkIGJ5IHRoZSBzZWN0aW9uIGl0c2VsZlxuXHRcdG1hbmlmZXN0U3ViU2VjdGlvbnMgPSB7XG5cdFx0XHRbc2VjdGlvbktleV06IHtcblx0XHRcdFx0Li4uY3VzdG9tU2VjdGlvbkRlZmluaXRpb24sXG5cdFx0XHRcdHBvc2l0aW9uOiB1bmRlZmluZWQsXG5cdFx0XHRcdHZpc2libGU6IHRydWVcblx0XHRcdH1cblx0XHR9O1xuXHR9IGVsc2Uge1xuXHRcdG1hbmlmZXN0U3ViU2VjdGlvbnMgPSBjdXN0b21TZWN0aW9uRGVmaW5pdGlvbi5zdWJTZWN0aW9ucztcblx0fVxuXHRjb25zdCBzdWJTZWN0aW9ucyA9IGNyZWF0ZUN1c3RvbVN1YlNlY3Rpb25zKG1hbmlmZXN0U3ViU2VjdGlvbnMsIGNvbnZlcnRlckNvbnRleHQpO1xuXG5cdGNvbnN0IGN1c3RvbVNlY3Rpb246IEN1c3RvbU9iamVjdFBhZ2VTZWN0aW9uID0ge1xuXHRcdGlkOiBjdXN0b21TZWN0aW9uSUQsXG5cdFx0a2V5OiBzZWN0aW9uS2V5LFxuXHRcdHRpdGxlOiBjdXN0b21TZWN0aW9uRGVmaW5pdGlvbi50aXRsZSxcblx0XHRzaG93VGl0bGU6ICEhY3VzdG9tU2VjdGlvbkRlZmluaXRpb24udGl0bGUsXG5cdFx0dmlzaWJsZTogY3VzdG9tU2VjdGlvbkRlZmluaXRpb24udmlzaWJsZSAhPT0gdW5kZWZpbmVkID8gY3VzdG9tU2VjdGlvbkRlZmluaXRpb24udmlzaWJsZSA6IHRydWUsXG5cdFx0cG9zaXRpb246IHBvc2l0aW9uLFxuXHRcdHN1YlNlY3Rpb25zOiBzdWJTZWN0aW9ucyBhcyBhbnlcblx0fTtcblx0cmV0dXJuIGN1c3RvbVNlY3Rpb247XG59XG5cbi8qKlxuICogUmV0cmlldmVzIHRoZSBPYmplY3RQYWdlIGhlYWRlciBhY3Rpb25zIChib3RoIHRoZSBkZWZhdWx0IG9uZXMgYW5kIHRoZSBjdXN0b20gb25lcyBkZWZpbmVkIGluIHRoZSBtYW5pZmVzdCkuXG4gKlxuICogQHBhcmFtIHtDb252ZXJ0ZXJDb250ZXh0fSBjb252ZXJ0ZXJDb250ZXh0IFRoZSBjb252ZXJ0ZXIgY29udGV4dFxuICogQHJldHVybnMgQW4gYXJyYXkgY29udGFpbmluZyBhbGwgdGhlIGFjdGlvbnMgZm9yIHRoaXMgT2JqZWN0UGFnZSBoZWFkZXJcbiAqL1xuZXhwb3J0IGNvbnN0IGdldEhlYWRlckFjdGlvbnMgPSBmdW5jdGlvbiAoY29udmVydGVyQ29udGV4dDogQ29udmVydGVyQ29udGV4dCk6IEJhc2VBY3Rpb25bXSB7XG5cdGNvbnN0IGFBbm5vdGF0aW9uSGVhZGVyQWN0aW9uczogQmFzZUFjdGlvbltdID0gZ2V0SGVhZGVyRGVmYXVsdEFjdGlvbnMoY29udmVydGVyQ29udGV4dCk7XG5cdGNvbnN0IG1hbmlmZXN0V3JhcHBlciA9IGNvbnZlcnRlckNvbnRleHQuZ2V0TWFuaWZlc3RXcmFwcGVyKCk7XG5cdGNvbnN0IGhlYWRlckFjdGlvbnMgPSBpbnNlcnRDdXN0b21FbGVtZW50cyhcblx0XHRhQW5ub3RhdGlvbkhlYWRlckFjdGlvbnMsXG5cdFx0Z2V0QWN0aW9uc0Zyb21NYW5pZmVzdChcblx0XHRcdG1hbmlmZXN0V3JhcHBlci5nZXRIZWFkZXJBY3Rpb25zKCksXG5cdFx0XHRjb252ZXJ0ZXJDb250ZXh0LFxuXHRcdFx0YUFubm90YXRpb25IZWFkZXJBY3Rpb25zLFxuXHRcdFx0dW5kZWZpbmVkLFxuXHRcdFx0dW5kZWZpbmVkLFxuXHRcdFx0Z2V0SGlkZGVuSGVhZGVyQWN0aW9ucyhjb252ZXJ0ZXJDb250ZXh0KVxuXHRcdCksXG5cdFx0eyBpc05hdmlnYWJsZTogXCJvdmVyd3JpdGVcIiwgZW5hYmxlZDogXCJvdmVyd3JpdGVcIiwgZGVmYXVsdFZhbHVlc0V4dGVuc2lvbkZ1bmN0aW9uOiBcIm92ZXJ3cml0ZVwiLCBjb21tYW5kOiBcIm92ZXJ3cml0ZVwiIH1cblx0KTtcblx0cmV0dXJuIHJlbW92ZUR1cGxpY2F0ZUFjdGlvbnMoaGVhZGVyQWN0aW9ucyk7XG59O1xuXG4vKipcbiAqIFJldHJpZXZlcyB0aGUgT2JqZWN0UGFnZSBmb290ZXIgYWN0aW9ucyAoYm90aCB0aGUgZGVmYXVsdCBvbmVzIGFuZCB0aGUgY3VzdG9tIG9uZXMgZGVmaW5lZCBpbiB0aGUgbWFuaWZlc3QpLlxuICpcbiAqIEBwYXJhbSB7Q29udmVydGVyQ29udGV4dH0gY29udmVydGVyQ29udGV4dCBUaGUgY29udmVydGVyIGNvbnRleHRcbiAqIEByZXR1cm5zIEFuIGFycmF5IGNvbnRhaW5pbmcgYWxsIHRoZSBhY3Rpb25zIGZvciB0aGlzIE9iamVjdFBhZ2UgZm9vdGVyXG4gKi9cbmV4cG9ydCBjb25zdCBnZXRGb290ZXJBY3Rpb25zID0gZnVuY3Rpb24gKGNvbnZlcnRlckNvbnRleHQ6IENvbnZlcnRlckNvbnRleHQpOiBCYXNlQWN0aW9uW10ge1xuXHRjb25zdCBtYW5pZmVzdFdyYXBwZXIgPSBjb252ZXJ0ZXJDb250ZXh0LmdldE1hbmlmZXN0V3JhcHBlcigpO1xuXHRjb25zdCBhQW5ub3RhdGlvbkZvb3RlckFjdGlvbnM6IEJhc2VBY3Rpb25bXSA9IGdldEZvb3RlckRlZmF1bHRBY3Rpb25zKG1hbmlmZXN0V3JhcHBlci5nZXRWaWV3TGV2ZWwoKSwgY29udmVydGVyQ29udGV4dCk7XG5cdGNvbnN0IGZvb3RlckFjdGlvbnMgPSBpbnNlcnRDdXN0b21FbGVtZW50cyhcblx0XHRhQW5ub3RhdGlvbkZvb3RlckFjdGlvbnMsXG5cdFx0Z2V0QWN0aW9uc0Zyb21NYW5pZmVzdChtYW5pZmVzdFdyYXBwZXIuZ2V0Rm9vdGVyQWN0aW9ucygpLCBjb252ZXJ0ZXJDb250ZXh0LCBhQW5ub3RhdGlvbkZvb3RlckFjdGlvbnMpLFxuXHRcdHsgaXNOYXZpZ2FibGU6IFwib3ZlcndyaXRlXCIsIGVuYWJsZWQ6IFwib3ZlcndyaXRlXCIsIGRlZmF1bHRWYWx1ZXNFeHRlbnNpb25GdW5jdGlvbjogXCJvdmVyd3JpdGVcIiwgY29tbWFuZDogXCJvdmVyd3JpdGVcIiB9XG5cdCk7XG5cdHJldHVybiBmb290ZXJBY3Rpb25zO1xufTtcblxuLyoqXG4gKiBSZXRyaWV2ZXMgYW5kIG1lcmdlcyB0aGUgT2JqZWN0UGFnZSBzZWN0aW9ucyBkZWZpbmVkIGluIHRoZSBhbm5vdGF0aW9uIGFuZCBpbiB0aGUgbWFuaWZlc3QuXG4gKlxuICogQHBhcmFtIHtDb252ZXJ0ZXJDb250ZXh0fSBjb252ZXJ0ZXJDb250ZXh0IFRoZSBjb252ZXJ0ZXIgY29udGV4dFxuICogQHJldHVybnMgQW4gYXJyYXkgb2Ygc2VjdGlvbnMuXG4gKi9cbmV4cG9ydCBjb25zdCBnZXRTZWN0aW9ucyA9IGZ1bmN0aW9uIChjb252ZXJ0ZXJDb250ZXh0OiBDb252ZXJ0ZXJDb250ZXh0KTogT2JqZWN0UGFnZVNlY3Rpb25bXSB7XG5cdGNvbnN0IG1hbmlmZXN0V3JhcHBlciA9IGNvbnZlcnRlckNvbnRleHQuZ2V0TWFuaWZlc3RXcmFwcGVyKCk7XG5cdGNvbnN0IHNlY3Rpb25zID0gaW5zZXJ0Q3VzdG9tRWxlbWVudHMoXG5cdFx0Z2V0U2VjdGlvbnNGcm9tQW5ub3RhdGlvbihjb252ZXJ0ZXJDb250ZXh0KSxcblx0XHRnZXRTZWN0aW9uc0Zyb21NYW5pZmVzdChtYW5pZmVzdFdyYXBwZXIuZ2V0U2VjdGlvbnMoKSwgY29udmVydGVyQ29udGV4dCksXG5cdFx0e1xuXHRcdFx0XCJ0aXRsZVwiOiBcIm92ZXJ3cml0ZVwiLFxuXHRcdFx0XCJ2aXNpYmxlXCI6IFwib3ZlcndyaXRlXCIsXG5cdFx0XHRcInN1YlNlY3Rpb25zXCI6IHtcblx0XHRcdFx0XCJhY3Rpb25zXCI6IFwibWVyZ2VcIixcblx0XHRcdFx0XCJ0aXRsZVwiOiBcIm92ZXJ3cml0ZVwiLFxuXHRcdFx0XHRcInNpZGVDb250ZW50XCI6IFwib3ZlcndyaXRlXCJcblx0XHRcdH1cblx0XHR9XG5cdCk7XG5cdC8vIExldmVsIEFkanVzdG1lbnQgZm9yIFwiTWl4ZWRcIiBDb2xsZWN0aW9uIEZhY2V0czpcblx0Ly8gPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxuXHQvLyBUaGUgbWFuaWZlc3QgZGVmaW5pdGlvbiBvZiBjdXN0b20gc2lkZSBjb250ZW50cyBhbmQgYWN0aW9ucyBzdGlsbCBuZWVkcyB0byBiZSBhbGlnbmVkIGZvciBcIk1peGVkXCIgY29sbGVjdGlvbiBmYWNldHM6XG5cdC8vIENvbGxlY3Rpb24gZmFjZXRzIGNvbnRhaW5pbmcgdGFibGVzIGdhaW4gYW4gZXh0cmEgcmVmZXJlbmNlIGZhY2V0IGFzIGEgdGFibGUgd3JhcHBlciB0byBlbnN1cmUsIHRoYXQgdGhlIHRhYmxlIGlzIGFsd2F5c1xuXHQvLyBwbGFjZWQgaW4gYW4gb3duIGluZGl2aWR1YWwgT2JqZWN0IFBhZ2UgQmxvY2s7IHRoaXMgYWRkaXRpb25hbCBoaWVyYXJjaHkgbGV2ZWwgaXMgdW5rbm93biB0byBhcHAgZGV2ZWxvcGVycywgd2hpY2ggYXJlXG5cdC8vIGRlZmluaW5nIHRoZSBzaWRlIGNvbnRlbnQgYW5kIGFjdGlvbnMgaW4gdGhlIG1hbmlmZXN0IGF0IGNvbGxlY3Rpb24gZmFjZXQgbGV2ZWw7IG5vdywgc2luY2UgdGhlIHNpZGVDb250ZW50IGFsd2F5cyBuZWVkc1xuXHQvLyB0byBiZSBhc3NpZ25lZCB0byBhIGJsb2NrLCB3ZSBuZWVkIHRvIG1vdmUgdGhlIHNpZGVDb250ZW50IG9mIGZyb20gYSBtaXhlZCBjb2xsZWN0aW9uIGZhY2V0IHRvIGl0cyBmaXJzdCBjaGlsZCByZWZlcmVuY2UgZmFjZXQuXG5cdC8vID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT1cblx0c2VjdGlvbnMuZm9yRWFjaChmdW5jdGlvbiAoc2VjdGlvbikge1xuXHRcdHNlY3Rpb24uc3ViU2VjdGlvbnM/LmZvckVhY2goZnVuY3Rpb24gKHN1YlNlY3Rpb24pIHtcblx0XHRcdGlmIChzdWJTZWN0aW9uLnR5cGUgPT09IFwiTWl4ZWRcIiAmJiBzdWJTZWN0aW9uLnNpZGVDb250ZW50ICE9IHVuZGVmaW5lZCAmJiBzdWJTZWN0aW9uLmNvbnRlbnQgJiYgc3ViU2VjdGlvbi5jb250ZW50Lmxlbmd0aCA+IDApIHtcblx0XHRcdFx0Ly8gMS4gQ29weSBzaWRlQ29udGVudCAvIGFjdGlvbnMgdG8gdGhlIFN1YlNlY3Rpb24ncyBjb250ZW50XG5cdFx0XHRcdC8vIDIuIERlbGV0ZSBzaWRlQ29udGVudCAvIGFjdGlvbnMgYXQgdGhlIChpbnZhbGlkKSBtYW5pZmVzdCBsZXZlbFxuXHRcdFx0XHRpZiAoKHN1YlNlY3Rpb24gYXMgRm9ybVN1YlNlY3Rpb24pLnNpZGVDb250ZW50KSB7XG5cdFx0XHRcdFx0c3ViU2VjdGlvbi5jb250ZW50WzBdLnNpZGVDb250ZW50ID0gc3ViU2VjdGlvbi5zaWRlQ29udGVudDtcblx0XHRcdFx0XHRzdWJTZWN0aW9uLnNpZGVDb250ZW50ID0gdW5kZWZpbmVkO1xuXHRcdFx0XHR9XG5cdFx0XHRcdGlmICgoc3ViU2VjdGlvbiBhcyBGb3JtU3ViU2VjdGlvbikuYWN0aW9ucy5sZW5ndGggPiAwKSB7XG5cdFx0XHRcdFx0KHN1YlNlY3Rpb24uY29udGVudFswXSBhcyBGb3JtU3ViU2VjdGlvbikuYWN0aW9ucyA9IChzdWJTZWN0aW9uIGFzIEZvcm1TdWJTZWN0aW9uKS5hY3Rpb25zO1xuXHRcdFx0XHRcdChzdWJTZWN0aW9uIGFzIEZvcm1TdWJTZWN0aW9uKS5hY3Rpb25zID0gW107XG5cdFx0XHRcdH1cblx0XHRcdH1cblx0XHR9KTtcblx0fSk7XG5cdHJldHVybiBzZWN0aW9ucztcbn07XG5cbi8qKlxuICogRGV0ZXJtaW5lcyBpZiB0aGUgT2JqZWN0UGFnZSBoYXMgaGVhZGVyIGNvbnRlbnQuXG4gKlxuICogQHBhcmFtIGNvbnZlcnRlckNvbnRleHQgVGhlIGluc3RhbmNlIG9mIHRoZSBjb252ZXJ0ZXIgY29udGV4dFxuICogQHJldHVybnMge2Jvb2xlYW59IGB0cnVlYCBpZiB0aGVyZSBpcyBhdCBsZWFzdCBvbiBoZWFkZXIgZmFjZXRcbiAqL1xuZnVuY3Rpb24gaGFzSGVhZGVyQ29udGVudChjb252ZXJ0ZXJDb250ZXh0OiBDb252ZXJ0ZXJDb250ZXh0KTogYm9vbGVhbiB7XG5cdGNvbnN0IG1hbmlmZXN0V3JhcHBlciA9IGNvbnZlcnRlckNvbnRleHQuZ2V0TWFuaWZlc3RXcmFwcGVyKCk7XG5cdHJldHVybiAoXG5cdFx0KGNvbnZlcnRlckNvbnRleHQuZ2V0RW50aXR5VHlwZSgpLmFubm90YXRpb25zPy5VST8uSGVhZGVyRmFjZXRzIHx8IFtdKS5sZW5ndGggPiAwIHx8XG5cdFx0T2JqZWN0LmtleXMobWFuaWZlc3RXcmFwcGVyLmdldEhlYWRlckZhY2V0cygpKS5sZW5ndGggPiAwXG5cdCk7XG59XG5cbi8qKlxuICogR2V0cyB0aGUgZXhwcmVzc2lvbiB0byBldmFsdWF0ZSB0aGUgdmlzaWJpbGl0eSBvZiB0aGUgaGVhZGVyIGNvbnRlbnQuXG4gKlxuICogQHBhcmFtIGNvbnZlcnRlckNvbnRleHQgVGhlIGluc3RhbmNlIG9mIHRoZSBjb252ZXJ0ZXIgY29udGV4dFxuICogQHJldHVybnMge0JpbmRpbmdFeHByZXNzaW9uPGJvb2xlYW4+fSBUaGUgYmluZGluZyBleHByZXNzaW9uIGZvciB0aGUgRGVsZXRlIGJ1dHRvblxuICovXG5mdW5jdGlvbiBnZXRTaG93SGVhZGVyQ29udGVudEV4cHJlc3Npb24oY29udmVydGVyQ29udGV4dDogQ29udmVydGVyQ29udGV4dCk6IEV4cHJlc3Npb248YW55PiB7XG5cdGNvbnN0IG1hbmlmZXN0V3JhcHBlciA9IGNvbnZlcnRlckNvbnRleHQuZ2V0TWFuaWZlc3RXcmFwcGVyKCk7XG5cdHJldHVybiBpZkVsc2UoXG5cdFx0IWhhc0hlYWRlckNvbnRlbnQoY29udmVydGVyQ29udGV4dCksXG5cdFx0Y29uc3RhbnQoZmFsc2UpLFxuXHRcdGlmRWxzZShlcXVhbChtYW5pZmVzdFdyYXBwZXIuaXNIZWFkZXJFZGl0YWJsZSgpLCBmYWxzZSksIGNvbnN0YW50KHRydWUpLCBub3QoVUkuSXNFZGl0YWJsZSkpXG5cdCk7XG59XG5cbi8qKlxuICogR2V0cyB0aGUgYmluZGluZyBleHByZXNzaW9uIHRvIGV2YWx1YXRlIHRoZSB2aXNpYmlsaXR5IG9mIHRoZSBoZWFkZXIgY29udGVudC5cbiAqXG4gKiBAcGFyYW0gY29udmVydGVyQ29udGV4dCBUaGUgaW5zdGFuY2Ugb2YgdGhlIGNvbnZlcnRlciBjb250ZXh0XG4gKiBAcmV0dXJucyB7QmluZGluZ0V4cHJlc3Npb248Ym9vbGVhbj59IFRoZSBiaW5kaW5nIGV4cHJlc3Npb24gZm9yIHRoZSBEZWxldGUgYnV0dG9uXG4gKi9cbmV4cG9ydCBjb25zdCBnZXRTaG93SGVhZGVyQ29udGVudCA9IGZ1bmN0aW9uIChjb252ZXJ0ZXJDb250ZXh0OiBDb252ZXJ0ZXJDb250ZXh0KTogQmluZGluZ0V4cHJlc3Npb248Ym9vbGVhbj4ge1xuXHRyZXR1cm4gY29tcGlsZUJpbmRpbmcoZ2V0U2hvd0hlYWRlckNvbnRlbnRFeHByZXNzaW9uKGNvbnZlcnRlckNvbnRleHQpKTtcbn07XG5cbi8qKlxuICogR2V0cyB0aGUgYmluZGluZyBleHByZXNzaW9uIHRvIGV2YWx1YXRlIHRoZSB2aXNpYmlsaXR5IG9mIHRoZSBhdmF0YXIgd2hlbiB0aGUgaGVhZGVyIGlzIGluIGV4cGFuZGVkIHN0YXRlLlxuICpcbiAqIEBwYXJhbSBjb252ZXJ0ZXJDb250ZXh0IFRoZSBpbnN0YW5jZSBvZiB0aGUgY29udmVydGVyIGNvbnRleHRcbiAqIEByZXR1cm5zIHtCaW5kaW5nRXhwcmVzc2lvbjxzdHJpbmc+fSBUaGUgYmluZGluZyBleHByZXNzaW9uIGZvciB0aGUgRGVsZXRlIGJ1dHRvblxuICovXG5leHBvcnQgY29uc3QgZ2V0RXhwYW5kZWRJbWFnZVZpc2libGUgPSBmdW5jdGlvbiAoY29udmVydGVyQ29udGV4dDogQ29udmVydGVyQ29udGV4dCk6IEJpbmRpbmdFeHByZXNzaW9uPHN0cmluZz4ge1xuXHRyZXR1cm4gY29tcGlsZUJpbmRpbmcobm90KGdldFNob3dIZWFkZXJDb250ZW50RXhwcmVzc2lvbihjb252ZXJ0ZXJDb250ZXh0KSkpO1xufTtcblxuZXhwb3J0IGNvbnN0IGNvbnZlcnRQYWdlID0gZnVuY3Rpb24gKGNvbnZlcnRlckNvbnRleHQ6IENvbnZlcnRlckNvbnRleHQpOiBPYmplY3RQYWdlRGVmaW5pdGlvbiB7XG5cdGNvbnN0IG1hbmlmZXN0V3JhcHBlciA9IGNvbnZlcnRlckNvbnRleHQuZ2V0TWFuaWZlc3RXcmFwcGVyKCk7XG5cdGxldCBoZWFkZXJTZWN0aW9uOiBPYmplY3RQYWdlU2VjdGlvbiB8IHVuZGVmaW5lZDtcblx0Y29uc3QgZW50aXR5VHlwZTogRW50aXR5VHlwZSA9IGNvbnZlcnRlckNvbnRleHQuZ2V0RW50aXR5VHlwZSgpO1xuXG5cdC8vIFJldHJpZXZlIGFsbCBoZWFkZXIgZmFjZXRzIChmcm9tIGFubm90YXRpb25zICYgY3VzdG9tKVxuXHRjb25zdCBoZWFkZXJGYWNldHMgPSBpbnNlcnRDdXN0b21FbGVtZW50cyhcblx0XHRnZXRIZWFkZXJGYWNldHNGcm9tQW5ub3RhdGlvbnMoY29udmVydGVyQ29udGV4dCksXG5cdFx0Z2V0SGVhZGVyRmFjZXRzRnJvbU1hbmlmZXN0KG1hbmlmZXN0V3JhcHBlci5nZXRIZWFkZXJGYWNldHMoKSlcblx0KTtcblxuXHQvLyBSZXRyaWV2ZSB0aGUgcGFnZSBoZWFkZXIgYWN0aW9uc1xuXHRjb25zdCBoZWFkZXJBY3Rpb25zID0gZ2V0SGVhZGVyQWN0aW9ucyhjb252ZXJ0ZXJDb250ZXh0KTtcblxuXHQvLyBSZXRyaWV2ZSB0aGUgcGFnZSBmb290ZXIgYWN0aW9uc1xuXHRjb25zdCBmb290ZXJBY3Rpb25zID0gZ2V0Rm9vdGVyQWN0aW9ucyhjb252ZXJ0ZXJDb250ZXh0KTtcblxuXHRpZiAobWFuaWZlc3RXcmFwcGVyLmlzSGVhZGVyRWRpdGFibGUoKSAmJiAoZW50aXR5VHlwZS5hbm5vdGF0aW9ucy5VST8uSGVhZGVyRmFjZXRzIHx8IGVudGl0eVR5cGUuYW5ub3RhdGlvbnMuVUk/LkhlYWRlckluZm8pKSB7XG5cdFx0aGVhZGVyU2VjdGlvbiA9IGNyZWF0ZUVkaXRhYmxlSGVhZGVyU2VjdGlvbihjb252ZXJ0ZXJDb250ZXh0LCBoZWFkZXJGYWNldHMpO1xuXHR9XG5cblx0Y29uc3Qgc2VjdGlvbnMgPSBnZXRTZWN0aW9ucyhjb252ZXJ0ZXJDb250ZXh0KTtcblxuXHRyZXR1cm4ge1xuXHRcdHRlbXBsYXRlOiBUZW1wbGF0ZVR5cGUuT2JqZWN0UGFnZSxcblx0XHRoZWFkZXI6IHtcblx0XHRcdHZpc2libGU6IG1hbmlmZXN0V3JhcHBlci5nZXRTaG93T2JqZWN0UGFnZUhlYWRlcigpLFxuXHRcdFx0c2VjdGlvbjogaGVhZGVyU2VjdGlvbixcblx0XHRcdGZhY2V0czogaGVhZGVyRmFjZXRzLFxuXHRcdFx0YWN0aW9uczogaGVhZGVyQWN0aW9ucyxcblx0XHRcdHNob3dDb250ZW50OiBnZXRTaG93SGVhZGVyQ29udGVudChjb252ZXJ0ZXJDb250ZXh0KSxcblx0XHRcdGhhc0NvbnRlbnQ6IGhhc0hlYWRlckNvbnRlbnQoY29udmVydGVyQ29udGV4dCksXG5cdFx0XHRhdmF0YXI6IGdldEF2YXRhcihjb252ZXJ0ZXJDb250ZXh0KSxcblx0XHRcdHRpdGxlOiB7XG5cdFx0XHRcdGV4cGFuZGVkSW1hZ2VWaXNpYmxlOiBnZXRFeHBhbmRlZEltYWdlVmlzaWJsZShjb252ZXJ0ZXJDb250ZXh0KVxuXHRcdFx0fVxuXHRcdH0sXG5cdFx0c2VjdGlvbnM6IHNlY3Rpb25zLFxuXHRcdGZvb3RlckFjdGlvbnM6IGZvb3RlckFjdGlvbnMsXG5cdFx0c2hvd0FuY2hvckJhcjogbWFuaWZlc3RXcmFwcGVyLmdldFNob3dBbmNob3JCYXIoKSxcblx0XHR1c2VJY29uVGFiQmFyOiBtYW5pZmVzdFdyYXBwZXIudXNlSWNvblRhYkJhcigpXG5cdH07XG59O1xuIl19
389
+ //# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIk9iamVjdFBhZ2VDb252ZXJ0ZXIudHMiXSwibmFtZXMiOlsiZ2V0U2VjdGlvbktleSIsImZhY2V0RGVmaW5pdGlvbiIsImZhbGxiYWNrIiwiSUQiLCJ0b1N0cmluZyIsIkxhYmVsIiwiY3JlYXRlRWRpdGFibGVIZWFkZXJTZWN0aW9uIiwiY29udmVydGVyQ29udGV4dCIsImFsbEhlYWRlckZhY2V0cyIsImVkaXRhYmxlSGVhZGVyU2VjdGlvbklEIiwiZ2V0RWRpdGFibGVIZWFkZXJTZWN0aW9uSUQiLCJoZWFkZXJGYWNldHMiLCJnZXRFbnRpdHlUeXBlIiwiYW5ub3RhdGlvbnMiLCJVSSIsIkhlYWRlckZhY2V0cyIsImhlYWRlcmZhY2V0U3ViU2VjdGlvbnMiLCJjcmVhdGVTdWJTZWN0aW9ucyIsImN1c3RvbUhlYWRlckZhY2V0U3ViU2VjdGlvbnMiLCJjcmVhdGVDdXN0b21IZWFkZXJGYWNldFN1YlNlY3Rpb25zIiwiYWxsSGVhZGVyRmFjZXRzU3ViU2VjdGlvbnMiLCJsZW5ndGgiLCJpIiwiZm9yRWFjaCIsIml0ZW0iLCJ2aXNpYmxlIiwicHVzaCIsImtleSIsInNsaWNlIiwibGFzdEluZGV4T2YiLCJjdXN0b21JdGVtIiwiaGVhZGVyU2VjdGlvbiIsImlkIiwidGl0bGUiLCJjb21waWxlRXhwcmVzc2lvbiIsIklzRWRpdGFibGUiLCJzdWJTZWN0aW9ucyIsImdldFNlY3Rpb25zRnJvbUFubm90YXRpb24iLCJlbnRpdHlUeXBlIiwib2JqZWN0UGFnZVNlY3Rpb25zIiwiRmFjZXRzIiwibWFwIiwiZ2V0U2VjdGlvbkZyb21Bbm5vdGF0aW9uIiwiZmFjZXQiLCJzZWN0aW9uSUQiLCJnZXRTZWN0aW9uSUQiLCJGYWNldCIsInNlY3Rpb24iLCJnZXRFeHByZXNzaW9uRnJvbUFubm90YXRpb24iLCJzaG93VGl0bGUiLCJub3QiLCJlcXVhbCIsIkhpZGRlbiIsInZhbHVlT2YiLCJnZXRTZWN0aW9uc0Zyb21NYW5pZmVzdCIsIm1hbmlmZXN0U2VjdGlvbnMiLCJzZWN0aW9ucyIsIk9iamVjdCIsImtleXMiLCJtYW5pZmVzdFNlY3Rpb25LZXkiLCJnZXRTZWN0aW9uRnJvbU1hbmlmZXN0IiwiY3VzdG9tU2VjdGlvbkRlZmluaXRpb24iLCJzZWN0aW9uS2V5IiwiY3VzdG9tU2VjdGlvbklEIiwiZ2V0Q3VzdG9tU2VjdGlvbklEIiwicG9zaXRpb24iLCJwbGFjZW1lbnQiLCJQbGFjZW1lbnQiLCJBZnRlciIsIm1hbmlmZXN0U3ViU2VjdGlvbnMiLCJ1bmRlZmluZWQiLCJjcmVhdGVDdXN0b21TdWJTZWN0aW9ucyIsImN1c3RvbVNlY3Rpb24iLCJnZXRIZWFkZXJBY3Rpb25zIiwiYUFubm90YXRpb25IZWFkZXJBY3Rpb25zIiwiZ2V0SGVhZGVyRGVmYXVsdEFjdGlvbnMiLCJtYW5pZmVzdFdyYXBwZXIiLCJnZXRNYW5pZmVzdFdyYXBwZXIiLCJoZWFkZXJBY3Rpb25zIiwiaW5zZXJ0Q3VzdG9tRWxlbWVudHMiLCJnZXRBY3Rpb25zRnJvbU1hbmlmZXN0IiwiZ2V0SGlkZGVuSGVhZGVyQWN0aW9ucyIsImlzTmF2aWdhYmxlIiwiZW5hYmxlZCIsImRlZmF1bHRWYWx1ZXNFeHRlbnNpb25GdW5jdGlvbiIsImNvbW1hbmQiLCJyZW1vdmVEdXBsaWNhdGVBY3Rpb25zIiwiZ2V0Rm9vdGVyQWN0aW9ucyIsImFBbm5vdGF0aW9uRm9vdGVyQWN0aW9ucyIsImdldEZvb3RlckRlZmF1bHRBY3Rpb25zIiwiZ2V0Vmlld0xldmVsIiwiZ2V0U2VjdGlvbnMiLCJzdWJTZWN0aW9uIiwidHlwZSIsInNpZGVDb250ZW50IiwiY29udGVudCIsImFjdGlvbnMiLCJoYXNIZWFkZXJDb250ZW50IiwiZ2V0SGVhZGVyRmFjZXRzIiwiZ2V0U2hvd0hlYWRlckNvbnRlbnRFeHByZXNzaW9uIiwiaWZFbHNlIiwiY29uc3RhbnQiLCJpc0hlYWRlckVkaXRhYmxlIiwiZ2V0U2hvd0hlYWRlckNvbnRlbnQiLCJnZXRFeHBhbmRlZEltYWdlVmlzaWJsZSIsImNvbnZlcnRQYWdlIiwiZ2V0SGVhZGVyRmFjZXRzRnJvbUFubm90YXRpb25zIiwiZ2V0SGVhZGVyRmFjZXRzRnJvbU1hbmlmZXN0IiwiZm9vdGVyQWN0aW9ucyIsIkhlYWRlckluZm8iLCJ0ZW1wbGF0ZSIsIlRlbXBsYXRlVHlwZSIsIk9iamVjdFBhZ2UiLCJoZWFkZXIiLCJnZXRTaG93T2JqZWN0UGFnZUhlYWRlciIsImZhY2V0cyIsInNob3dDb250ZW50IiwiaGFzQ29udGVudCIsImF2YXRhciIsImdldEF2YXRhciIsImV4cGFuZGVkSW1hZ2VWaXNpYmxlIiwic2hvd0FuY2hvckJhciIsImdldFNob3dBbmNob3JCYXIiLCJ1c2VJY29uVGFiQmFyIl0sIm1hcHBpbmdzIjoiO0FBQUE7QUFDQTtBQUNBOzs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7QUEyQ0EsTUFBTUEsYUFBYSxHQUFHLFVBQUNDLGVBQUQsRUFBOEJDLFFBQTlCLEVBQTJEO0FBQUE7O0FBQ2hGLFdBQU8sd0JBQUFELGVBQWUsQ0FBQ0UsRUFBaEIsNEVBQW9CQyxRQUFwQixpQ0FBa0NILGVBQWUsQ0FBQ0ksS0FBbEQsMERBQWtDLHNCQUF1QkQsUUFBdkIsRUFBbEMsS0FBdUVGLFFBQTlFO0FBQ0EsR0FGRDtBQUlBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOzs7QUFDTyxXQUFTSSwyQkFBVCxDQUNOQyxnQkFETSxFQUVOQyxlQUZNLEVBR2M7QUFBQTs7QUFDcEIsUUFBTUMsdUJBQXVCLEdBQUdDLDBCQUEwQixFQUExRDtBQUNBLFFBQU1DLFlBQVksNEJBQUdKLGdCQUFnQixDQUFDSyxhQUFqQixHQUFpQ0MsV0FBcEMsb0ZBQUcsc0JBQThDQyxFQUFqRCwyREFBRyx1QkFBa0RDLFlBQXZFO0FBQ0EsUUFBTUMsc0JBQXNCLEdBQUdMLFlBQVksR0FBR00saUJBQWlCLENBQUNOLFlBQUQsRUFBZUosZ0JBQWYsRUFBaUMsSUFBakMsQ0FBcEIsR0FBNkQsRUFBeEc7QUFDQSxRQUFNVyw0QkFBNEIsR0FBR0Msa0NBQWtDLENBQUNaLGdCQUFELENBQXZFO0FBQ0Es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LEtBQVA7QUFtQkEsR0ExQ00iLCJzb3VyY2VSb290IjoiLiIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB0eXBlIHsgRW50aXR5VHlwZSB9IGZyb20gXCJAc2FwLXV4L3ZvY2FidWxhcmllcy10eXBlc1wiO1xuaW1wb3J0IHR5cGUgeyBGYWNldFR5cGVzIH0gZnJvbSBcIkBzYXAtdXgvdm9jYWJ1bGFyaWVzLXR5cGVzL3ZvY2FidWxhcmllcy9VSVwiO1xuaW1wb3J0IHR5cGUgeyBCYXNlQWN0aW9uIH0gZnJvbSBcInNhcC9mZS9jb3JlL2NvbnZlcnRlcnMvY29udHJvbHMvQ29tbW9uL0FjdGlvblwiO1xuaW1wb3J0IHsgZ2V0QWN0aW9uc0Zyb21NYW5pZmVzdCwgcmVtb3ZlRHVwbGljYXRlQWN0aW9ucyB9IGZyb20gXCJzYXAvZmUvY29yZS9jb252ZXJ0ZXJzL2NvbnRyb2xzL0NvbW1vbi9BY3Rpb25cIjtcbmltcG9ydCB7XG5cdGdldEZvb3RlckRlZmF1bHRBY3Rpb25zLFxuXHRnZXRIZWFkZXJEZWZhdWx0QWN0aW9ucyxcblx0Z2V0SGlkZGVuSGVhZGVyQWN0aW9uc1xufSBmcm9tIFwic2FwL2ZlL2NvcmUvY29udmVydGVycy9vYmplY3RQYWdlL0hlYWRlckFuZEZvb3RlckFjdGlvblwiO1xuaW1wb3J0IHR5cGUgeyBCaW5kaW5nVG9vbGtpdEV4cHJlc3Npb24sIENvbXBpbGVkQmluZGluZ1Rvb2xraXRFeHByZXNzaW9uIH0gZnJvbSBcInNhcC9mZS9jb3JlL2hlbHBlcnMvQmluZGluZ1Rvb2xraXRcIjtcbmltcG9ydCB7IGNvbXBpbGVFeHByZXNzaW9uLCBjb25zdGFudCwgZXF1YWwsIGdldEV4cHJlc3Npb25Gcm9tQW5ub3RhdGlvbiwgaWZFbHNlLCBub3QgfSBmcm9tIFwic2FwL2ZlL2NvcmUvaGVscGVycy9CaW5kaW5nVG9vbGtpdFwiO1xuaW1wb3J0IHR5cGUgeyBBdmF0YXIgfSBmcm9tIFwiLi4vY29udHJvbHMvT2JqZWN0UGFnZS9BdmF0YXJcIjtcbmltcG9ydCB7IGdldEF2YXRhciB9IGZyb20gXCIuLi9jb250cm9scy9PYmplY3RQYWdlL0F2YXRhclwiO1xuaW1wb3J0IHR5cGUgeyBPYmplY3RQYWdlSGVhZGVyRmFjZXQgfSBmcm9tIFwiLi4vY29udHJvbHMvT2JqZWN0UGFnZS9IZWFkZXJGYWNldFwiO1xuaW1wb3J0IHsgZ2V0SGVhZGVyRmFjZXRzRnJvbUFubm90YXRpb25zLCBnZXRIZWFkZXJGYWNldHNGcm9tTWFuaWZlc3QgfSBmcm9tIFwiLi4vY29udHJvbHMvT2JqZWN0UGFnZS9IZWFkZXJGYWNldFwiO1xuaW1wb3J0IHR5cGUgeyBDdXN0b21PYmplY3RQYWdlU2VjdGlvbiwgRm9ybVN1YlNlY3Rpb24sIE9iamVjdFBhZ2VTZWN0aW9uLCBPYmplY3RQYWdlU3ViU2VjdGlvbiB9IGZyb20gXCIuLi9jb250cm9scy9PYmplY3RQYWdlL1N1YlNlY3Rpb25cIjtcbmltcG9ydCB7IGNyZWF0ZUN1c3RvbUhlYWRlckZhY2V0U3ViU2VjdGlvbnMsIGNyZWF0ZUN1c3RvbVN1YlNlY3Rpb25zLCBjcmVhdGVTdWJTZWN0aW9ucyB9IGZyb20gXCIuLi9jb250cm9scy9PYmplY3RQYWdlL1N1YlNlY3Rpb25cIjtcbmltcG9ydCB0eXBlIENvbnZlcnRlckNvbnRleHQgZnJvbSBcIi4uL0NvbnZlcnRlckNvbnRleHRcIjtcbmltcG9ydCB7IFVJIH0gZnJvbSBcIi4uL2hlbHBlcnMvQmluZGluZ0hlbHBlclwiO1xuaW1wb3J0IHR5cGUgeyBDb25maWd1cmFibGVSZWNvcmQsIFBvc2l0aW9uIH0gZnJvbSBcIi4uL2hlbHBlcnMvQ29uZmlndXJhYmxlT2JqZWN0XCI7XG5pbXBvcnQgeyBpbnNlcnRDdXN0b21FbGVtZW50cywgUGxhY2VtZW50IH0gZnJvbSBcIi4uL2hlbHBlcnMvQ29uZmlndXJhYmxlT2JqZWN0XCI7XG5pbXBvcnQgeyBnZXRDdXN0b21TZWN0aW9uSUQsIGdldEVkaXRhYmxlSGVhZGVyU2VjdGlvbklELCBnZXRTZWN0aW9uSUQgfSBmcm9tIFwiLi4vaGVscGVycy9JRFwiO1xuaW1wb3J0IHR5cGUgeyBNYW5pZmVzdFNlY3Rpb24sIE1hbmlmZXN0U3ViU2VjdGlvbiB9IGZyb20gXCIuLi9NYW5pZmVzdFNldHRpbmdzXCI7XG5pbXBvcnQgeyBUZW1wbGF0ZVR5cGUgfSBmcm9tIFwiLi4vTWFuaWZlc3RTZXR0aW5nc1wiO1xuaW1wb3J0IHR5cGUgeyBQYWdlRGVmaW5pdGlvbiB9IGZyb20gXCIuLi9UZW1wbGF0ZUNvbnZlcnRlclwiO1xuXG5leHBvcnQgdHlwZSBPYmplY3RQYWdlRGVmaW5pdGlvbiA9IFBhZ2VEZWZpbml0aW9uICYge1xuXHRoZWFkZXI6IHtcblx0XHR2aXNpYmxlOiBib29sZWFuO1xuXHRcdHNlY3Rpb24/OiBPYmplY3RQYWdlU2VjdGlvbjtcblx0XHRmYWNldHM6IE9iamVjdFBhZ2VIZWFkZXJGYWNldFtdO1xuXHRcdGFjdGlvbnM6IEJhc2VBY3Rpb25bXTtcblx0XHRzaG93Q29udGVudDogQ29tcGlsZWRCaW5kaW5nVG9vbGtpdEV4cHJlc3Npb247XG5cdFx0aGFzQ29udGVudDogYm9vbGVhbjtcblx0XHRhdmF0YXI/OiBBdmF0YXI7XG5cdFx0dGl0bGU6IHtcblx0XHRcdGV4cGFuZGVkSW1hZ2VWaXNpYmxlOiBDb21waWxlZEJpbmRpbmdUb29sa2l0RXhwcmVzc2lvbjtcblx0XHR9O1xuXHR9O1xuXHRzZWN0aW9uczogT2JqZWN0UGFnZVNlY3Rpb25bXTtcblx0Zm9vdGVyQWN0aW9uczogQmFzZUFjdGlvbltdO1xuXHRzaG93QW5jaG9yQmFyOiBib29sZWFuO1xuXHR1c2VJY29uVGFiQmFyOiBib29sZWFuO1xufTtcblxuY29uc3QgZ2V0U2VjdGlvbktleSA9IChmYWNldERlZmluaXRpb246IEZhY2V0VHlwZXMsIGZhbGxiYWNrOiBzdHJpbmcpOiBzdHJpbmcgPT4ge1xuXHRyZXR1cm4gZmFjZXREZWZpbml0aW9uLklEPy50b1N0cmluZygpIHx8IGZhY2V0RGVmaW5pdGlvbi5MYWJlbD8udG9TdHJpbmcoKSB8fCBmYWxsYmFjaztcbn07XG5cbi8qKlxuICogQ3JlYXRlcyBhIHNlY3Rpb24gdGhhdCByZXByZXNlbnRzIHRoZSBlZGl0YWJsZSBoZWFkZXIgcGFydDsgaXQgaXMgb25seSB2aXNpYmxlIGluIGVkaXQgbW9kZS5cbiAqXG4gKiBAcGFyYW0gY29udmVydGVyQ29udGV4dCBUaGUgY29udmVydGVyIGNvbnRleHRcbiAqIEBwYXJhbSBhbGxIZWFkZXJGYWNldHMgVGhlIGNvbnZlcnRlciBjb250ZXh0XG4gKiBAcmV0dXJucyBUaGUgc2VjdGlvbiByZXByZXNlbnRpbmcgdGhlIGVkaXRhYmxlIGhlYWRlciBwYXJ0c1xuICovXG5leHBvcnQgZnVuY3Rpb24gY3JlYXRlRWRpdGFibGVIZWFkZXJTZWN0aW9uKFxuXHRjb252ZXJ0ZXJDb250ZXh0OiBDb252ZXJ0ZXJDb250ZXh0LFxuXHRhbGxIZWFkZXJGYWNldHM6IE9iamVjdFBhZ2VIZWFkZXJGYWNldFtdXG4pOiBPYmplY3RQYWdlU2VjdGlvbiB7XG5cdGNvbnN0IGVkaXRhYmxlSGVhZGVyU2VjdGlvbklEID0gZ2V0RWRpdGFibGVIZWFkZXJTZWN0aW9uSUQoKTtcblx0Y29uc3QgaGVhZGVyRmFjZXRzID0gY29udmVydGVyQ29udGV4dC5nZXRFbnRpdHlUeXBlKCkuYW5ub3RhdGlvbnM/LlVJPy5IZWFkZXJGYWNldHM7XG5cdGNvbnN0IGhlYWRlcmZhY2V0U3ViU2VjdGlvbnMgPSBoZWFkZXJGYWNldHMgPyBjcmVhdGVTdWJTZWN0aW9ucyhoZWFkZXJGYWNldHMsIGNvbnZlcnRlckNvbnRleHQsIHRydWUpIDogW107XG5cdGNvbnN0IGN1c3RvbUhlYWRlckZhY2V0U3ViU2VjdGlvbnMgPSBjcmVhdGVDdXN0b21IZWFkZXJGYWNldFN1YlNlY3Rpb25zKGNvbnZlcnRlckNvbnRleHQpO1xuXHRsZXQgYWxsSGVhZGVyRmFjZXRzU3ViU2VjdGlvbnM6IE9iamVjdFBhZ2VTdWJTZWN0aW9uW10gPSBbXTtcblx0aWYgKGN1c3RvbUhlYWRlckZhY2V0U3ViU2VjdGlvbnMubGVuZ3RoID4gMCkge1xuXHRcdC8vIG1lcmdlIGFubm90YXRpb24gYmFzZWQgaGVhZGVyIGZhY2V0cyBhbmQgY3VzdG9tIGhlYWRlciBmYWNldHMgaW4gdGhlIHJpZ2h0IG9yZGVyXG5cdFx0bGV0IGkgPSAwO1xuXHRcdGFsbEhlYWRlckZhY2V0cy5mb3JFYWNoKGZ1bmN0aW9uIChpdGVtKSB7XG5cdFx0XHQvLyBoaWRkZW4gaGVhZGVyIGZhY2V0cyBhcmUgbm90IGluY2x1ZGVkIGluIGFsbEhlYWRlckZhY2V0cyBhcnJheSA9PiBhZGQgdGhlbSBhbnl3YXlcblx0XHRcdHdoaWxlIChoZWFkZXJmYWNldFN1YlNlY3Rpb25zLmxlbmd0aCA+IGkgJiYgaGVhZGVyZmFjZXRTdWJTZWN0aW9uc1tpXS52aXNpYmxlID09PSBcImZhbHNlXCIpIHtcblx0XHRcdFx0YWxsSGVhZGVyRmFjZXRzU3ViU2VjdGlvbnMucHVzaChoZWFkZXJmYWNldFN1YlNlY3Rpb25zW2ldKTtcblx0XHRcdFx0aSsrO1xuXHRcdFx0fVxuXHRcdFx0aWYgKFxuXHRcdFx0XHRoZWFkZXJmYWNldFN1YlNlY3Rpb25zLmxlbmd0aCA+IGkgJiZcblx0XHRcdFx0KGl0ZW0ua2V5ID09PSBoZWFkZXJmYWNldFN1YlNlY3Rpb25zW2ldLmtleSB8fFxuXHRcdFx0XHRcdC8vIGZvciBoZWFkZXIgZmFjZXRzIHdpdGggbm8gaWQgdGhlIGtleXMgb2YgaGVhZGVyIGZhY2V0IGFuZCBzdWJzZWN0aW9uIGFyZSBkaWZmZXJlbnQgPT4gY2hlY2sgb25seSB0aGUgbGFzdCBwYXJ0XG5cdFx0XHRcdFx0aXRlbS5rZXkuc2xpY2UoaXRlbS5rZXkubGFzdEluZGV4T2YoXCI6OlwiKSArIDIpID09PVxuXHRcdFx0XHRcdFx0aGVhZGVyZmFjZXRTdWJTZWN0aW9uc1tpXS5rZXkuc2xpY2UoaGVhZGVyZmFjZXRTdWJTZWN0aW9uc1tpXS5rZXkubGFzdEluZGV4T2YoXCI6OlwiKSArIDIpKVxuXHRcdFx0KSB7XG5cdFx0XHRcdGFsbEhlYWRlckZhY2V0c1N1YlNlY3Rpb25zLnB1c2goaGVhZGVyZmFjZXRTdWJTZWN0aW9uc1tpXSk7XG5cdFx0XHRcdGkrKztcblx0XHRcdH0gZWxzZSB7XG5cdFx0XHRcdGN1c3RvbUhlYWRlckZhY2V0U3ViU2VjdGlvbnMuZm9yRWFjaChmdW5jdGlvbiAoY3VzdG9tSXRlbSkge1xuXHRcdFx0XHRcdGlmIChpdGVtLmtleSA9PT0gY3VzdG9tSXRlbS5rZXkpIHtcblx0XHRcdFx0XHRcdGFsbEhlYWRlckZhY2V0c1N1YlNlY3Rpb25zLnB1c2goY3VzdG9tSXRlbSk7XG5cdFx0XHRcdFx0fVxuXHRcdFx0XHR9KTtcblx0XHRcdH1cblx0XHR9KTtcblx0fSBlbHNlIHtcblx0XHRhbGxIZWFkZXJGYWNldHNTdWJTZWN0aW9ucyA9IGhlYWRlcmZhY2V0U3ViU2VjdGlvbnM7XG5cdH1cblx0Y29uc3QgaGVhZGVyU2VjdGlvbjogT2JqZWN0UGFnZVNlY3Rpb24gPSB7XG5cdFx0aWQ6IGVkaXRhYmxlSGVhZGVyU2VjdGlvbklELFxuXHRcdGtleTogXCJFZGl0YWJsZUhlYWRlckNvbnRlbnRcIixcblx0XHR0aXRsZTogXCJ7c2FwLmZlLmkxOG4+VF9DT01NT05fT0JKRUNUX1BBR0VfSEVBREVSX1NFQ1RJT059XCIsXG5cdFx0dmlzaWJsZTogY29tcGlsZUV4cHJlc3Npb24oVUkuSXNFZGl0YWJsZSksXG5cdFx0c3ViU2VjdGlvbnM6IGFsbEhlYWRlckZhY2V0c1N1YlNlY3Rpb25zXG5cdH07XG5cdHJldHVybiBoZWFkZXJTZWN0aW9uO1xufVxuXG4vKipcbiAqIENyZWF0ZXMgYSBkZWZpbml0aW9uIGZvciBhIHNlY3Rpb24gYmFzZWQgb24gdGhlIEZhY2V0IGFubm90YXRpb24uXG4gKlxuICogQHBhcmFtIGNvbnZlcnRlckNvbnRleHQgVGhlIGNvbnZlcnRlciBjb250ZXh0XG4gKiBAcmV0dXJucyBBbGwgc2VjdGlvbnNcbiAqL1xuZnVuY3Rpb24gZ2V0U2VjdGlvbnNGcm9tQW5ub3RhdGlvbihjb252ZXJ0ZXJDb250ZXh0OiBDb252ZXJ0ZXJDb250ZXh0KTogT2JqZWN0UGFnZVNlY3Rpb25bXSB7XG5cdGNvbnN0IGVudGl0eVR5cGUgPSBjb252ZXJ0ZXJDb250ZXh0LmdldEVudGl0eVR5cGUoKTtcblx0Y29uc3Qgb2JqZWN0UGFnZVNlY3Rpb25zOiBPYmplY3RQYWdlU2VjdGlvbltdID1cblx0XHRlbnRpdHlUeXBlLmFubm90YXRpb25zPy5VST8uRmFjZXRzPy5tYXAoKGZhY2V0RGVmaW5pdGlvbjogRmFjZXRUeXBlcykgPT5cblx0XHRcdGdldFNlY3Rpb25Gcm9tQW5ub3RhdGlvbihmYWNldERlZmluaXRpb24sIGNvbnZlcnRlckNvbnRleHQpXG5cdFx0KSB8fCBbXTtcblx0cmV0dXJuIG9iamVjdFBhZ2VTZWN0aW9ucztcbn1cblxuLyoqXG4gKiBDcmVhdGUgYW4gYW5ub3RhdGlvbiBiYXNlZCBzZWN0aW9uLlxuICpcbiAqIEBwYXJhbSBmYWNldFxuICogQHBhcmFtIGNvbnZlcnRlckNvbnRleHRcbiAqIEByZXR1cm5zIFRoZSBjdXJyZW50IHNlY3Rpb25cbiAqL1xuZnVuY3Rpb24gZ2V0U2VjdGlvbkZyb21Bbm5vdGF0aW9uKGZhY2V0OiBGYWNldFR5cGVzLCBjb252ZXJ0ZXJDb250ZXh0OiBDb252ZXJ0ZXJDb250ZXh0KTogT2JqZWN0UGFnZVNlY3Rpb24ge1xuXHRjb25zdCBzZWN0aW9uSUQgPSBnZXRTZWN0aW9uSUQoeyBGYWNldDogZmFjZXQgfSk7XG5cdGNvbnN0IHNlY3Rpb246IE9iamVjdFBhZ2VTZWN0aW9uID0ge1xuXHRcdGlkOiBzZWN0aW9uSUQsXG5cdFx0a2V5OiBnZXRTZWN0aW9uS2V5KGZhY2V0LCBzZWN0aW9uSUQpLFxuXHRcdHRpdGxlOiBjb21waWxlRXhwcmVzc2lvbihnZXRFeHByZXNzaW9uRnJvbUFubm90YXRpb24oZmFjZXQuTGFiZWwpKSxcblx0XHRzaG93VGl0bGU6ICEhZmFjZXQuTGFiZWwsXG5cdFx0dmlzaWJsZTogY29tcGlsZUV4cHJlc3Npb24obm90KGVxdWFsKGdldEV4cHJlc3Npb25Gcm9tQW5ub3RhdGlvbihmYWNldC5hbm5vdGF0aW9ucz8uVUk/LkhpZGRlbj8udmFsdWVPZigpKSwgdHJ1ZSkpKSxcblx0XHRzdWJTZWN0aW9uczogY3JlYXRlU3ViU2VjdGlvbnMoW2ZhY2V0XSwgY29udmVydGVyQ29udGV4dClcblx0fTtcblx0cmV0dXJuIHNlY3Rpb247XG59XG5cbi8qKlxuICogQ3JlYXRlcyBzZWN0aW9uIGRlZmluaXRpb25zIGJhc2VkIG9uIHRoZSBtYW5pZmVzdCBkZWZpbml0aW9ucy5cbiAqXG4gKiBAcGFyYW0gbWFuaWZlc3RTZWN0aW9ucyBUaGUgc2VjdGlvbnMgZGVmaW5lZCBpbiB0aGUgbWFuaWZlc3RcbiAqIEBwYXJhbSBjb252ZXJ0ZXJDb250ZXh0XG4gKiBAcmV0dXJucyBUaGUgc2VjdGlvbnMgZGVmaW5lZCBpbiB0aGUgbWFuaWZlc3RcbiAqL1xuZnVuY3Rpb24gZ2V0U2VjdGlvbnNGcm9tTWFuaWZlc3QoXG5cdG1hbmlmZXN0U2VjdGlvbnM6IENvbmZpZ3VyYWJsZVJlY29yZDxNYW5pZmVzdFNlY3Rpb24+LFxuXHRjb252ZXJ0ZXJDb250ZXh0OiBDb252ZXJ0ZXJDb250ZXh0XG4pOiBSZWNvcmQ8c3RyaW5nLCBDdXN0b21PYmplY3RQYWdlU2VjdGlvbj4ge1xuXHRjb25zdCBzZWN0aW9uczogUmVjb3JkPHN0cmluZywgQ3VzdG9tT2JqZWN0UGFnZVNlY3Rpb24+ID0ge307XG5cdE9iamVjdC5rZXlzKG1hbmlmZXN0U2VjdGlvbnMpLmZvckVhY2goKG1hbmlmZXN0U2VjdGlvbktleSkgPT4ge1xuXHRcdHNlY3Rpb25zW21hbmlmZXN0U2VjdGlvbktleV0gPSBnZXRTZWN0aW9uRnJvbU1hbmlmZXN0KG1hbmlmZXN0U2VjdGlvbnNbbWFuaWZlc3RTZWN0aW9uS2V5XSwgbWFuaWZlc3RTZWN0aW9uS2V5LCBjb252ZXJ0ZXJDb250ZXh0KTtcblx0fSk7XG5cdHJldHVybiBzZWN0aW9ucztcbn1cblxuLyoqXG4gKiBDcmVhdGUgYSBtYW5pZmVzdC1iYXNlZCBjdXN0b20gc2VjdGlvbi5cbiAqXG4gKiBAcGFyYW0gY3VzdG9tU2VjdGlvbkRlZmluaXRpb25cbiAqIEBwYXJhbSBzZWN0aW9uS2V5XG4gKiBAcGFyYW0gY29udmVydGVyQ29udGV4dFxuICogQHJldHVybnMgVGhlIGN1cnJlbnQgY3VzdG9tIHNlY3Rpb25cbiAqL1xuZnVuY3Rpb24gZ2V0U2VjdGlvbkZyb21NYW5pZmVzdChcblx0Y3VzdG9tU2VjdGlvbkRlZmluaXRpb246IE1hbmlmZXN0U2VjdGlvbixcblx0c2VjdGlvbktleTogc3RyaW5nLFxuXHRjb252ZXJ0ZXJDb250ZXh0OiBDb252ZXJ0ZXJDb250ZXh0XG4pOiBDdXN0b21PYmplY3RQYWdlU2VjdGlvbiB7XG5cdGNvbnN0IGN1c3RvbVNlY3Rpb25JRCA9IGN1c3RvbVNlY3Rpb25EZWZpbml0aW9uLmlkIHx8IGdldEN1c3RvbVNlY3Rpb25JRChzZWN0aW9uS2V5KTtcblx0bGV0IHBvc2l0aW9uOiBQb3NpdGlvbiB8IHVuZGVmaW5lZCA9IGN1c3RvbVNlY3Rpb25EZWZpbml0aW9uLnBvc2l0aW9uO1xuXHRpZiAoIXBvc2l0aW9uKSB7XG5cdFx0cG9zaXRpb24gPSB7XG5cdFx0XHRwbGFjZW1lbnQ6IFBsYWNlbWVudC5BZnRlclxuXHRcdH07XG5cdH1cblx0bGV0IG1hbmlmZXN0U3ViU2VjdGlvbnM6IFJlY29yZDxzdHJpbmcsIE1hbmlmZXN0U3ViU2VjdGlvbj47XG5cdGlmICghY3VzdG9tU2VjdGlvbkRlZmluaXRpb24uc3ViU2VjdGlvbnMpIHtcblx0XHQvLyBJZiB0aGVyZSBpcyBubyBzdWJTZWN0aW9uIGRlZmluZWQsIHdlIGFkZCB0aGUgY29udGVudCBvZiB0aGUgY3VzdG9tIHNlY3Rpb24gYXMgc3Vic2VjdGlvbnNcblx0XHQvLyBhbmQgbWFrZSBzdXJlIHRvIHNldCB0aGUgdmlzaWJpbGl0eSB0byAndHJ1ZScsIGFzIHRoZSBhY3R1YWwgdmlzaWJpbGl0eSBpcyBoYW5kbGVkIGJ5IHRoZSBzZWN0aW9uIGl0c2VsZlxuXHRcdG1hbmlmZXN0U3ViU2VjdGlvbnMgPSB7XG5cdFx0XHRbc2VjdGlvbktleV06IHtcblx0XHRcdFx0Li4uY3VzdG9tU2VjdGlvbkRlZmluaXRpb24sXG5cdFx0XHRcdHBvc2l0aW9uOiB1bmRlZmluZWQsXG5cdFx0XHRcdHZpc2libGU6IFwidHJ1ZVwiXG5cdFx0XHR9XG5cdFx0fTtcblx0fSBlbHNlIHtcblx0XHRtYW5pZmVzdFN1YlNlY3Rpb25zID0gY3VzdG9tU2VjdGlvbkRlZmluaXRpb24uc3ViU2VjdGlvbnM7XG5cdH1cblx0Y29uc3Qgc3ViU2VjdGlvbnMgPSBjcmVhdGVDdXN0b21TdWJTZWN0aW9ucyhtYW5pZmVzdFN1YlNlY3Rpb25zLCBjb252ZXJ0ZXJDb250ZXh0KTtcblxuXHRjb25zdCBjdXN0b21TZWN0aW9uOiBDdXN0b21PYmplY3RQYWdlU2VjdGlvbiA9IHtcblx0XHRpZDogY3VzdG9tU2VjdGlvbklELFxuXHRcdGtleTogc2VjdGlvbktleSxcblx0XHR0aXRsZTogY3VzdG9tU2VjdGlvbkRlZmluaXRpb24udGl0bGUsXG5cdFx0c2hvd1RpdGxlOiAhIWN1c3RvbVNlY3Rpb25EZWZpbml0aW9uLnRpdGxlLFxuXHRcdHZpc2libGU6IGN1c3RvbVNlY3Rpb25EZWZpbml0aW9uLnZpc2libGUgIT09IHVuZGVmaW5lZCA/IGN1c3RvbVNlY3Rpb25EZWZpbml0aW9uLnZpc2libGUgOiBcInRydWVcIixcblx0XHRwb3NpdGlvbjogcG9zaXRpb24sXG5cdFx0c3ViU2VjdGlvbnM6IHN1YlNlY3Rpb25zIGFzIGFueVxuXHR9O1xuXHRyZXR1cm4gY3VzdG9tU2VjdGlvbjtcbn1cblxuLyoqXG4gKiBSZXRyaWV2ZXMgdGhlIE9iamVjdFBhZ2UgaGVhZGVyIGFjdGlvbnMgKGJvdGggdGhlIGRlZmF1bHQgb25lcyBhbmQgdGhlIGN1c3RvbSBvbmVzIGRlZmluZWQgaW4gdGhlIG1hbmlmZXN0KS5cbiAqXG4gKiBAcGFyYW0gY29udmVydGVyQ29udGV4dCBUaGUgY29udmVydGVyIGNvbnRleHRcbiAqIEByZXR1cm5zIEFuIGFycmF5IGNvbnRhaW5pbmcgYWxsIHRoZSBhY3Rpb25zIGZvciB0aGlzIE9iamVjdFBhZ2UgaGVhZGVyXG4gKi9cbmV4cG9ydCBjb25zdCBnZXRIZWFkZXJBY3Rpb25zID0gZnVuY3Rpb24gKGNvbnZlcnRlckNvbnRleHQ6IENvbnZlcnRlckNvbnRleHQpOiBCYXNlQWN0aW9uW10ge1xuXHRjb25zdCBhQW5ub3RhdGlvbkhlYWRlckFjdGlvbnM6IEJhc2VBY3Rpb25bXSA9IGdldEhlYWRlckRlZmF1bHRBY3Rpb25zKGNvbnZlcnRlckNvbnRleHQpO1xuXHRjb25zdCBtYW5pZmVzdFdyYXBwZXIgPSBjb252ZXJ0ZXJDb250ZXh0LmdldE1hbmlmZXN0V3JhcHBlcigpO1xuXHRjb25zdCBoZWFkZXJBY3Rpb25zID0gaW5zZXJ0Q3VzdG9tRWxlbWVudHMoXG5cdFx0YUFubm90YXRpb25IZWFkZXJBY3Rpb25zLFxuXHRcdGdldEFjdGlvbnNGcm9tTWFuaWZlc3QoXG5cdFx0XHRtYW5pZmVzdFdyYXBwZXIuZ2V0SGVhZGVyQWN0aW9ucygpLFxuXHRcdFx0Y29udmVydGVyQ29udGV4dCxcblx0XHRcdGFBbm5vdGF0aW9uSGVhZGVyQWN0aW9ucyxcblx0XHRcdHVuZGVmaW5lZCxcblx0XHRcdHVuZGVmaW5lZCxcblx0XHRcdGdldEhpZGRlbkhlYWRlckFjdGlvbnMoY29udmVydGVyQ29udGV4dClcblx0XHQpLFxuXHRcdHsgaXNOYXZpZ2FibGU6IFwib3ZlcndyaXRlXCIsIGVuYWJsZWQ6IFwib3ZlcndyaXRlXCIsIGRlZmF1bHRWYWx1ZXNFeHRlbnNpb25GdW5jdGlvbjogXCJvdmVyd3JpdGVcIiwgY29tbWFuZDogXCJvdmVyd3JpdGVcIiB9XG5cdCk7XG5cdHJldHVybiByZW1vdmVEdXBsaWNhdGVBY3Rpb25zKGhlYWRlckFjdGlvbnMpO1xufTtcblxuLyoqXG4gKiBSZXRyaWV2ZXMgdGhlIE9iamVjdFBhZ2UgZm9vdGVyIGFjdGlvbnMgKGJvdGggdGhlIGRlZmF1bHQgb25lcyBhbmQgdGhlIGN1c3RvbSBvbmVzIGRlZmluZWQgaW4gdGhlIG1hbmlmZXN0KS5cbiAqXG4gKiBAcGFyYW0gY29udmVydGVyQ29udGV4dCBUaGUgY29udmVydGVyIGNvbnRleHRcbiAqIEByZXR1cm5zIEFuIGFycmF5IGNvbnRhaW5pbmcgYWxsIHRoZSBhY3Rpb25zIGZvciB0aGlzIE9iamVjdFBhZ2UgZm9vdGVyXG4gKi9cbmV4cG9ydCBjb25zdCBnZXRGb290ZXJBY3Rpb25zID0gZnVuY3Rpb24gKGNvbnZlcnRlckNvbnRleHQ6IENvbnZlcnRlckNvbnRleHQpOiBCYXNlQWN0aW9uW10ge1xuXHRjb25zdCBtYW5pZmVzdFdyYXBwZXIgPSBjb252ZXJ0ZXJDb250ZXh0LmdldE1hbmlmZXN0V3JhcHBlcigpO1xuXHRjb25zdCBhQW5ub3RhdGlvbkZvb3RlckFjdGlvbnM6IEJhc2VBY3Rpb25bXSA9IGdldEZvb3RlckRlZmF1bHRBY3Rpb25zKG1hbmlmZXN0V3JhcHBlci5nZXRWaWV3TGV2ZWwoKSwgY29udmVydGVyQ29udGV4dCk7XG5cdHJldHVybiBpbnNlcnRDdXN0b21FbGVtZW50cyhcblx0XHRhQW5ub3RhdGlvbkZvb3RlckFjdGlvbnMsXG5cdFx0Z2V0QWN0aW9uc0Zyb21NYW5pZmVzdChtYW5pZmVzdFdyYXBwZXIuZ2V0Rm9vdGVyQWN0aW9ucygpLCBjb252ZXJ0ZXJDb250ZXh0LCBhQW5ub3RhdGlvbkZvb3RlckFjdGlvbnMpLFxuXHRcdHsgaXNOYXZpZ2FibGU6IFwib3ZlcndyaXRlXCIsIGVuYWJsZWQ6IFwib3ZlcndyaXRlXCIsIGRlZmF1bHRWYWx1ZXNFeHRlbnNpb25GdW5jdGlvbjogXCJvdmVyd3JpdGVcIiwgY29tbWFuZDogXCJvdmVyd3JpdGVcIiB9XG5cdCk7XG59O1xuXG4vKipcbiAqIFJldHJpZXZlcyBhbmQgbWVyZ2VzIHRoZSBPYmplY3RQYWdlIHNlY3Rpb25zIGRlZmluZWQgaW4gdGhlIGFubm90YXRpb24gYW5kIGluIHRoZSBtYW5pZmVzdC5cbiAqXG4gKiBAcGFyYW0gY29udmVydGVyQ29udGV4dCBUaGUgY29udmVydGVyIGNvbnRleHRcbiAqIEByZXR1cm5zIEFuIGFycmF5IG9mIHNlY3Rpb25zLlxuICovXG5leHBvcnQgY29uc3QgZ2V0U2VjdGlvbnMgPSBmdW5jdGlvbiAoY29udmVydGVyQ29udGV4dDogQ29udmVydGVyQ29udGV4dCk6IE9iamVjdFBhZ2VTZWN0aW9uW10ge1xuXHRjb25zdCBtYW5pZmVzdFdyYXBwZXIgPSBjb252ZXJ0ZXJDb250ZXh0LmdldE1hbmlmZXN0V3JhcHBlcigpO1xuXHRjb25zdCBzZWN0aW9ucyA9IGluc2VydEN1c3RvbUVsZW1lbnRzKFxuXHRcdGdldFNlY3Rpb25zRnJvbUFubm90YXRpb24oY29udmVydGVyQ29udGV4dCksXG5cdFx0Z2V0U2VjdGlvbnNGcm9tTWFuaWZlc3QobWFuaWZlc3RXcmFwcGVyLmdldFNlY3Rpb25zKCksIGNvbnZlcnRlckNvbnRleHQpLFxuXHRcdHtcblx0XHRcdFwidGl0bGVcIjogXCJvdmVyd3JpdGVcIixcblx0XHRcdFwidmlzaWJsZVwiOiBcIm92ZXJ3cml0ZVwiLFxuXHRcdFx0XCJzdWJTZWN0aW9uc1wiOiB7XG5cdFx0XHRcdFwiYWN0aW9uc1wiOiBcIm1lcmdlXCIsXG5cdFx0XHRcdFwidGl0bGVcIjogXCJvdmVyd3JpdGVcIixcblx0XHRcdFx0XCJzaWRlQ29udGVudFwiOiBcIm92ZXJ3cml0ZVwiXG5cdFx0XHR9XG5cdFx0fVxuXHQpO1xuXHQvLyBMZXZlbCBBZGp1c3RtZW50IGZvciBcIk1peGVkXCIgQ29sbGVjdGlvbiBGYWNldHM6XG5cdC8vID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT1cblx0Ly8gVGhlIG1hbmlmZXN0IGRlZmluaXRpb24gb2YgY3VzdG9tIHNpZGUgY29udGVudHMgYW5kIGFjdGlvbnMgc3RpbGwgbmVlZHMgdG8gYmUgYWxpZ25lZCBmb3IgXCJNaXhlZFwiIGNvbGxlY3Rpb24gZmFjZXRzOlxuXHQvLyBDb2xsZWN0aW9uIGZhY2V0cyBjb250YWluaW5nIHRhYmxlcyBnYWluIGFuIGV4dHJhIHJlZmVyZW5jZSBmYWNldCBhcyBhIHRhYmxlIHdyYXBwZXIgdG8gZW5zdXJlLCB0aGF0IHRoZSB0YWJsZSBpcyBhbHdheXNcblx0Ly8gcGxhY2VkIGluIGFuIG93biBpbmRpdmlkdWFsIE9iamVjdCBQYWdlIEJsb2NrOyB0aGlzIGFkZGl0aW9uYWwgaGllcmFyY2h5IGxldmVsIGlzIHVua25vd24gdG8gYXBwIGRldmVsb3BlcnMsIHdoaWNoIGFyZVxuXHQvLyBkZWZpbmluZyB0aGUgc2lkZSBjb250ZW50IGFuZCBhY3Rpb25zIGluIHRoZSBtYW5pZmVzdCBhdCBjb2xsZWN0aW9uIGZhY2V0IGxldmVsOyBub3csIHNpbmNlIHRoZSBzaWRlQ29udGVudCBhbHdheXMgbmVlZHNcblx0Ly8gdG8gYmUgYXNzaWduZWQgdG8gYSBibG9jaywgd2UgbmVlZCB0byBtb3ZlIHRoZSBzaWRlQ29udGVudCBvZiBmcm9tIGEgbWl4ZWQgY29sbGVjdGlvbiBmYWNldCB0byBpdHMgZmlyc3QgY2hpbGQgcmVmZXJlbmNlIGZhY2V0LlxuXHQvLyA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XG5cdHNlY3Rpb25zLmZvckVhY2goZnVuY3Rpb24gKHNlY3Rpb24pIHtcblx0XHRzZWN0aW9uLnN1YlNlY3Rpb25zPy5mb3JFYWNoKGZ1bmN0aW9uIChzdWJTZWN0aW9uKSB7XG5cdFx0XHRpZiAoc3ViU2VjdGlvbi50eXBlID09PSBcIk1peGVkXCIgJiYgc3ViU2VjdGlvbi5zaWRlQ29udGVudCAhPSB1bmRlZmluZWQgJiYgc3ViU2VjdGlvbi5jb250ZW50ICYmIHN1YlNlY3Rpb24uY29udGVudC5sZW5ndGggPiAwKSB7XG5cdFx0XHRcdC8vIDEuIENvcHkgc2lkZUNvbnRlbnQgLyBhY3Rpb25zIHRvIHRoZSBTdWJTZWN0aW9uJ3MgY29udGVudFxuXHRcdFx0XHQvLyAyLiBEZWxldGUgc2lkZUNvbnRlbnQgLyBhY3Rpb25zIGF0IHRoZSAoaW52YWxpZCkgbWFuaWZlc3QgbGV2ZWxcblx0XHRcdFx0aWYgKChzdWJTZWN0aW9uIGFzIEZvcm1TdWJTZWN0aW9uKS5zaWRlQ29udGVudCkge1xuXHRcdFx0XHRcdHN1YlNlY3Rpb24uY29udGVudFswXS5zaWRlQ29udGVudCA9IHN1YlNlY3Rpb24uc2lkZUNvbnRlbnQ7XG5cdFx0XHRcdFx0c3ViU2VjdGlvbi5zaWRlQ29udGVudCA9IHVuZGVmaW5lZDtcblx0XHRcdFx0fVxuXHRcdFx0XHRpZiAoKHN1YlNlY3Rpb24gYXMgRm9ybVN1YlNlY3Rpb24pLmFjdGlvbnMubGVuZ3RoID4gMCkge1xuXHRcdFx0XHRcdChzdWJTZWN0aW9uLmNvbnRlbnRbMF0gYXMgRm9ybVN1YlNlY3Rpb24pLmFjdGlvbnMgPSAoc3ViU2VjdGlvbiBhcyBGb3JtU3ViU2VjdGlvbikuYWN0aW9ucztcblx0XHRcdFx0XHQoc3ViU2VjdGlvbiBhcyBGb3JtU3ViU2VjdGlvbikuYWN0aW9ucyA9IFtdO1xuXHRcdFx0XHR9XG5cdFx0XHR9XG5cdFx0fSk7XG5cdH0pO1xuXHRyZXR1cm4gc2VjdGlvbnM7XG59O1xuXG4vKipcbiAqIERldGVybWluZXMgaWYgdGhlIE9iamVjdFBhZ2UgaGFzIGhlYWRlciBjb250ZW50LlxuICpcbiAqIEBwYXJhbSBjb252ZXJ0ZXJDb250ZXh0IFRoZSBpbnN0YW5jZSBvZiB0aGUgY29udmVydGVyIGNvbnRleHRcbiAqIEByZXR1cm5zIGB0cnVlYCBpZiB0aGVyZSBpcyBhdCBsZWFzdCBvbiBoZWFkZXIgZmFjZXRcbiAqL1xuZnVuY3Rpb24gaGFzSGVhZGVyQ29udGVudChjb252ZXJ0ZXJDb250ZXh0OiBDb252ZXJ0ZXJDb250ZXh0KTogYm9vbGVhbiB7XG5cdGNvbnN0IG1hbmlmZXN0V3JhcHBlciA9IGNvbnZlcnRlckNvbnRleHQuZ2V0TWFuaWZlc3RXcmFwcGVyKCk7XG5cdHJldHVybiAoXG5cdFx0KGNvbnZlcnRlckNvbnRleHQuZ2V0RW50aXR5VHlwZSgpLmFubm90YXRpb25zPy5VST8uSGVhZGVyRmFjZXRzIHx8IFtdKS5sZW5ndGggPiAwIHx8XG5cdFx0T2JqZWN0LmtleXMobWFuaWZlc3RXcmFwcGVyLmdldEhlYWRlckZhY2V0cygpKS5sZW5ndGggPiAwXG5cdCk7XG59XG5cbi8qKlxuICogR2V0cyB0aGUgZXhwcmVzc2lvbiB0byBldmFsdWF0ZSB0aGUgdmlzaWJpbGl0eSBvZiB0aGUgaGVhZGVyIGNvbnRlbnQuXG4gKlxuICogQHBhcmFtIGNvbnZlcnRlckNvbnRleHQgVGhlIGluc3RhbmNlIG9mIHRoZSBjb252ZXJ0ZXIgY29udGV4dFxuICogQHJldHVybnMgVGhlIGJpbmRpbmcgZXhwcmVzc2lvbiBmb3IgdGhlIERlbGV0ZSBidXR0b25cbiAqL1xuZnVuY3Rpb24gZ2V0U2hvd0hlYWRlckNvbnRlbnRFeHByZXNzaW9uKGNvbnZlcnRlckNvbnRleHQ6IENvbnZlcnRlckNvbnRleHQpOiBCaW5kaW5nVG9vbGtpdEV4cHJlc3Npb248YW55PiB7XG5cdGNvbnN0IG1hbmlmZXN0V3JhcHBlciA9IGNvbnZlcnRlckNvbnRleHQuZ2V0TWFuaWZlc3RXcmFwcGVyKCk7XG5cdHJldHVybiBpZkVsc2UoXG5cdFx0IWhhc0hlYWRlckNvbnRlbnQoY29udmVydGVyQ29udGV4dCksXG5cdFx0Y29uc3RhbnQoZmFsc2UpLFxuXHRcdGlmRWxzZShlcXVhbChtYW5pZmVzdFdyYXBwZXIuaXNIZWFkZXJFZGl0YWJsZSgpLCBmYWxzZSksIGNvbnN0YW50KHRydWUpLCBub3QoVUkuSXNFZGl0YWJsZSkpXG5cdCk7XG59XG5cbi8qKlxuICogR2V0cyB0aGUgYmluZGluZyBleHByZXNzaW9uIHRvIGV2YWx1YXRlIHRoZSB2aXNpYmlsaXR5IG9mIHRoZSBoZWFkZXIgY29udGVudC5cbiAqXG4gKiBAcGFyYW0gY29udmVydGVyQ29udGV4dCBUaGUgaW5zdGFuY2Ugb2YgdGhlIGNvbnZlcnRlciBjb250ZXh0XG4gKiBAcmV0dXJucyBUaGUgYmluZGluZyBleHByZXNzaW9uIGZvciB0aGUgRGVsZXRlIGJ1dHRvblxuICovXG5leHBvcnQgY29uc3QgZ2V0U2hvd0hlYWRlckNvbnRlbnQgPSBmdW5jdGlvbiAoY29udmVydGVyQ29udGV4dDogQ29udmVydGVyQ29udGV4dCk6IENvbXBpbGVkQmluZGluZ1Rvb2xraXRFeHByZXNzaW9uIHtcblx0cmV0dXJuIGNvbXBpbGVFeHByZXNzaW9uKGdldFNob3dIZWFkZXJDb250ZW50RXhwcmVzc2lvbihjb252ZXJ0ZXJDb250ZXh0KSk7XG59O1xuXG4vKipcbiAqIEdldHMgdGhlIGJpbmRpbmcgZXhwcmVzc2lvbiB0byBldmFsdWF0ZSB0aGUgdmlzaWJpbGl0eSBvZiB0aGUgYXZhdGFyIHdoZW4gdGhlIGhlYWRlciBpcyBpbiBleHBhbmRlZCBzdGF0ZS5cbiAqXG4gKiBAcGFyYW0gY29udmVydGVyQ29udGV4dCBUaGUgaW5zdGFuY2Ugb2YgdGhlIGNvbnZlcnRlciBjb250ZXh0XG4gKiBAcmV0dXJucyBUaGUgYmluZGluZyBleHByZXNzaW9uIGZvciB0aGUgRGVsZXRlIGJ1dHRvblxuICovXG5leHBvcnQgY29uc3QgZ2V0RXhwYW5kZWRJbWFnZVZpc2libGUgPSBmdW5jdGlvbiAoY29udmVydGVyQ29udGV4dDogQ29udmVydGVyQ29udGV4dCk6IENvbXBpbGVkQmluZGluZ1Rvb2xraXRFeHByZXNzaW9uIHtcblx0cmV0dXJuIGNvbXBpbGVFeHByZXNzaW9uKG5vdChnZXRTaG93SGVhZGVyQ29udGVudEV4cHJlc3Npb24oY29udmVydGVyQ29udGV4dCkpKTtcbn07XG5cbmV4cG9ydCBjb25zdCBjb252ZXJ0UGFnZSA9IGZ1bmN0aW9uIChjb252ZXJ0ZXJDb250ZXh0OiBDb252ZXJ0ZXJDb250ZXh0KTogT2JqZWN0UGFnZURlZmluaXRpb24ge1xuXHRjb25zdCBtYW5pZmVzdFdyYXBwZXIgPSBjb252ZXJ0ZXJDb250ZXh0LmdldE1hbmlmZXN0V3JhcHBlcigpO1xuXHRsZXQgaGVhZGVyU2VjdGlvbjogT2JqZWN0UGFnZVNlY3Rpb24gfCB1bmRlZmluZWQ7XG5cdGNvbnN0IGVudGl0eVR5cGU6IEVudGl0eVR5cGUgPSBjb252ZXJ0ZXJDb250ZXh0LmdldEVudGl0eVR5cGUoKTtcblxuXHQvLyBSZXRyaWV2ZSBhbGwgaGVhZGVyIGZhY2V0cyAoZnJvbSBhbm5vdGF0aW9ucyAmIGN1c3RvbSlcblx0Y29uc3QgaGVhZGVyRmFjZXRzID0gaW5zZXJ0Q3VzdG9tRWxlbWVudHMoXG5cdFx0Z2V0SGVhZGVyRmFjZXRzRnJvbUFubm90YXRpb25zKGNvbnZlcnRlckNvbnRleHQpLFxuXHRcdGdldEhlYWRlckZhY2V0c0Zyb21NYW5pZmVzdChtYW5pZmVzdFdyYXBwZXIuZ2V0SGVhZGVyRmFjZXRzKCkpXG5cdCk7XG5cblx0Ly8gUmV0cmlldmUgdGhlIHBhZ2UgaGVhZGVyIGFjdGlvbnNcblx0Y29uc3QgaGVhZGVyQWN0aW9ucyA9IGdldEhlYWRlckFjdGlvbnMoY29udmVydGVyQ29udGV4dCk7XG5cblx0Ly8gUmV0cmlldmUgdGhlIHBhZ2UgZm9vdGVyIGFjdGlvbnNcblx0Y29uc3QgZm9vdGVyQWN0aW9ucyA9IGdldEZvb3RlckFjdGlvbnMoY29udmVydGVyQ29udGV4dCk7XG5cblx0aWYgKG1hbmlmZXN0V3JhcHBlci5pc0hlYWRlckVkaXRhYmxlKCkgJiYgKGVudGl0eVR5cGUuYW5ub3RhdGlvbnMuVUk/LkhlYWRlckZhY2V0cyB8fCBlbnRpdHlUeXBlLmFubm90YXRpb25zLlVJPy5IZWFkZXJJbmZvKSkge1xuXHRcdGhlYWRlclNlY3Rpb24gPSBjcmVhdGVFZGl0YWJsZUhlYWRlclNlY3Rpb24oY29udmVydGVyQ29udGV4dCwgaGVhZGVyRmFjZXRzKTtcblx0fVxuXG5cdGNvbnN0IHNlY3Rpb25zID0gZ2V0U2VjdGlvbnMoY29udmVydGVyQ29udGV4dCk7XG5cblx0cmV0dXJuIHtcblx0XHR0ZW1wbGF0ZTogVGVtcGxhdGVUeXBlLk9iamVjdFBhZ2UsXG5cdFx0aGVhZGVyOiB7XG5cdFx0XHR2aXNpYmxlOiBtYW5pZmVzdFdyYXBwZXIuZ2V0U2hvd09iamVjdFBhZ2VIZWFkZXIoKSxcblx0XHRcdHNlY3Rpb246IGhlYWRlclNlY3Rpb24sXG5cdFx0XHRmYWNldHM6IGhlYWRlckZhY2V0cyxcblx0XHRcdGFjdGlvbnM6IGhlYWRlckFjdGlvbnMsXG5cdFx0XHRzaG93Q29udGVudDogZ2V0U2hvd0hlYWRlckNvbnRlbnQoY29udmVydGVyQ29udGV4dCksXG5cdFx0XHRoYXNDb250ZW50OiBoYXNIZWFkZXJDb250ZW50KGNvbnZlcnRlckNvbnRleHQpLFxuXHRcdFx0YXZhdGFyOiBnZXRBdmF0YXIoY29udmVydGVyQ29udGV4dCksXG5cdFx0XHR0aXRsZToge1xuXHRcdFx0XHRleHBhbmRlZEltYWdlVmlzaWJsZTogZ2V0RXhwYW5kZWRJbWFnZVZpc2libGUoY29udmVydGVyQ29udGV4dClcblx0XHRcdH1cblx0XHR9LFxuXHRcdHNlY3Rpb25zOiBzZWN0aW9ucyxcblx0XHRmb290ZXJBY3Rpb25zOiBmb290ZXJBY3Rpb25zLFxuXHRcdHNob3dBbmNob3JCYXI6IG1hbmlmZXN0V3JhcHBlci5nZXRTaG93QW5jaG9yQmFyKCksXG5cdFx0dXNlSWNvblRhYkJhcjogbWFuaWZlc3RXcmFwcGVyLnVzZUljb25UYWJCYXIoKVxuXHR9O1xufTtcbiJdfQ==