@sapui5/sap.fe.core 1.100.0 → 1.102.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 (295) hide show
  1. package/package.json +4 -4
  2. package/src/sap/fe/core/.library +2 -3
  3. package/src/sap/fe/core/AppComponent.js +23 -30
  4. package/src/sap/fe/core/AppComponent.ts +35 -40
  5. package/src/sap/fe/core/AppStateHandler.js +8 -8
  6. package/src/sap/fe/core/AppStateHandler.ts +11 -11
  7. package/src/sap/fe/core/BaseController.js +9 -9
  8. package/src/sap/fe/core/BaseController.ts +3 -4
  9. package/src/sap/fe/core/CommonUtils.js +122 -101
  10. package/src/sap/fe/core/CommonUtils.ts +239 -193
  11. package/src/sap/fe/core/ExtensionAPI.js +12 -13
  12. package/src/sap/fe/core/ExtensionAPI.ts +21 -31
  13. package/src/sap/fe/core/PageController.js +19 -13
  14. package/src/sap/fe/core/PageController.ts +40 -34
  15. package/src/sap/fe/core/TemplateComponent.js +198 -123
  16. package/src/sap/fe/core/TemplateComponent.ts +109 -121
  17. package/src/sap/fe/core/TemplateModel.js +7 -9
  18. package/src/sap/fe/core/TemplateModel.ts +3 -3
  19. package/src/sap/fe/core/buildingBlocks/AttributeModel.js +60 -0
  20. package/src/sap/fe/core/buildingBlocks/AttributeModel.ts +37 -0
  21. package/src/sap/fe/core/buildingBlocks/BuildingBlock.js +165 -0
  22. package/src/sap/fe/core/buildingBlocks/BuildingBlock.ts +178 -0
  23. package/src/sap/fe/core/buildingBlocks/BuildingBlockRuntime.js +935 -0
  24. package/src/sap/fe/core/buildingBlocks/BuildingBlockRuntime.ts +837 -0
  25. package/src/sap/fe/core/buildingBlocks/TraceInfo.js +436 -0
  26. package/src/sap/fe/core/buildingBlocks/TraceInfo.ts +431 -0
  27. package/src/sap/fe/core/{BusyLocker.js → controllerextensions/BusyLocker.js} +1 -1
  28. package/src/sap/fe/core/{BusyLocker.ts → controllerextensions/BusyLocker.ts} +7 -7
  29. package/src/sap/fe/core/controllerextensions/EditFlow.js +660 -288
  30. package/src/sap/fe/core/controllerextensions/EditFlow.ts +513 -331
  31. package/src/sap/fe/core/controllerextensions/IntentBasedNavigation.js +11 -11
  32. package/src/sap/fe/core/controllerextensions/IntentBasedNavigation.ts +6 -7
  33. package/src/sap/fe/core/controllerextensions/InternalEditFlow.js +43 -25
  34. package/src/sap/fe/core/controllerextensions/InternalEditFlow.ts +132 -103
  35. package/src/sap/fe/core/controllerextensions/InternalIntentBasedNavigation.js +16 -16
  36. package/src/sap/fe/core/controllerextensions/InternalIntentBasedNavigation.ts +64 -55
  37. package/src/sap/fe/core/controllerextensions/InternalRouting.js +166 -99
  38. package/src/sap/fe/core/controllerextensions/InternalRouting.ts +187 -149
  39. package/src/sap/fe/core/controllerextensions/KPIManagement.js +14 -14
  40. package/src/sap/fe/core/controllerextensions/KPIManagement.ts +12 -11
  41. package/src/sap/fe/core/controllerextensions/MassEdit.js +13 -12
  42. package/src/sap/fe/core/controllerextensions/MassEdit.ts +22 -22
  43. package/src/sap/fe/core/controllerextensions/MessageHandler.js +14 -26
  44. package/src/sap/fe/core/controllerextensions/MessageHandler.ts +20 -30
  45. package/src/sap/fe/core/controllerextensions/PageReady.js +25 -23
  46. package/src/sap/fe/core/controllerextensions/PageReady.ts +49 -47
  47. package/src/sap/fe/core/controllerextensions/Paginator.js +24 -15
  48. package/src/sap/fe/core/controllerextensions/Paginator.ts +35 -20
  49. package/src/sap/fe/core/controllerextensions/Placeholder.js +10 -10
  50. package/src/sap/fe/core/controllerextensions/Placeholder.ts +12 -14
  51. package/src/sap/fe/core/controllerextensions/Routing.js +11 -11
  52. package/src/sap/fe/core/controllerextensions/Routing.ts +12 -13
  53. package/src/sap/fe/core/controllerextensions/Share.js +34 -16
  54. package/src/sap/fe/core/controllerextensions/Share.ts +50 -32
  55. package/src/sap/fe/core/controllerextensions/SideEffects.js +15 -15
  56. package/src/sap/fe/core/controllerextensions/SideEffects.ts +64 -65
  57. package/src/sap/fe/core/controllerextensions/ViewState.js +27 -31
  58. package/src/sap/fe/core/controllerextensions/ViewState.ts +103 -102
  59. package/src/sap/fe/core/controllerextensions/collaboration/ActivityBase.js +105 -0
  60. package/src/sap/fe/core/controllerextensions/collaboration/ActivityBase.ts +98 -0
  61. package/src/sap/fe/core/controllerextensions/collaboration/ActivitySync.js +360 -0
  62. package/src/sap/fe/core/{actions → controllerextensions}/collaboration/ActivitySync.ts +90 -132
  63. package/src/sap/fe/core/controllerextensions/collaboration/CollaborationCommon.js +146 -0
  64. package/src/sap/fe/core/{actions → controllerextensions}/collaboration/CollaborationCommon.ts +18 -8
  65. package/src/sap/fe/core/controllerextensions/collaboration/Manage.js +264 -0
  66. package/src/sap/fe/core/{actions → controllerextensions}/collaboration/Manage.ts +35 -33
  67. package/src/sap/fe/core/controllerextensions/collaboration/ManageDialog.fragment.xml +100 -0
  68. package/src/sap/fe/core/{actions → controllerextensions}/collaboration/UserDetails.fragment.xml +5 -7
  69. package/src/sap/fe/core/controllerextensions/editFlow/TransactionHelper.js +1584 -0
  70. package/src/sap/fe/core/{TransactionHelper.ts → controllerextensions/editFlow/TransactionHelper.ts} +190 -159
  71. package/src/sap/fe/core/controllerextensions/editFlow/draft.js +780 -0
  72. package/src/sap/fe/core/{actions → controllerextensions/editFlow}/draft.ts +329 -76
  73. package/src/sap/fe/core/controllerextensions/editFlow/operations.js +1149 -0
  74. package/src/sap/fe/core/{actions → controllerextensions/editFlow}/operations.ts +169 -97
  75. package/src/sap/fe/core/controllerextensions/editFlow/sticky.js +190 -0
  76. package/src/sap/fe/core/{actions → controllerextensions/editFlow}/sticky.ts +76 -12
  77. package/src/sap/fe/core/controllerextensions/messageHandler/messageHandling.js +592 -0
  78. package/src/sap/fe/core/{actions → controllerextensions/messageHandler}/messageHandling.ts +83 -60
  79. package/src/sap/fe/core/controllerextensions/routing/RouterProxy.js +940 -0
  80. package/src/sap/fe/core/{RouterProxy.ts → controllerextensions/routing/RouterProxy.ts} +52 -36
  81. package/src/sap/fe/core/controls/ActionParameterDialog.fragment.xml +21 -18
  82. package/src/sap/fe/core/controls/Any.js +28 -0
  83. package/src/sap/fe/core/controls/Any.ts +30 -0
  84. package/src/sap/fe/core/controls/CommandExecution.js +50 -16
  85. package/src/sap/fe/core/controls/CommandExecution.ts +31 -22
  86. package/src/sap/fe/core/controls/ConditionalWrapper.js +136 -65
  87. package/src/sap/fe/core/controls/ConditionalWrapper.ts +49 -58
  88. package/src/sap/fe/core/controls/CustomFilterFieldContentWrapper.js +371 -0
  89. package/src/sap/fe/core/controls/CustomFilterFieldContentWrapper.ts +282 -0
  90. package/src/sap/fe/core/controls/CustomQuickViewPage.js +74 -36
  91. package/src/sap/fe/core/controls/CustomQuickViewPage.ts +23 -32
  92. package/src/sap/fe/core/controls/DataLossOrDraftDiscard/DataLossDraft.fragment.xml +52 -5
  93. package/src/sap/fe/core/controls/DataLossOrDraftDiscard/DataLossOrDraftDiscardHandler.js +127 -67
  94. package/src/sap/fe/core/controls/DataLossOrDraftDiscard/DataLossOrDraftDiscardHandler.ts +127 -67
  95. package/src/sap/fe/core/controls/FieldWrapper.js +171 -87
  96. package/src/sap/fe/core/controls/FieldWrapper.ts +69 -80
  97. package/src/sap/fe/core/controls/FileWrapper.js +360 -0
  98. package/src/sap/fe/core/controls/FileWrapper.ts +202 -0
  99. package/src/sap/fe/core/controls/FilterBar.js +154 -119
  100. package/src/sap/fe/core/controls/FilterBar.ts +128 -123
  101. package/src/sap/fe/core/controls/FormElementWrapper.js +102 -37
  102. package/src/sap/fe/core/controls/FormElementWrapper.ts +43 -35
  103. package/src/sap/fe/core/controls/MassEditSelect.js +33 -0
  104. package/src/sap/fe/core/controls/MassEditSelect.ts +45 -0
  105. package/src/sap/fe/core/controls/filterbar/FilterContainer.js +111 -89
  106. package/src/sap/fe/core/controls/filterbar/FilterContainer.ts +86 -82
  107. package/src/sap/fe/core/controls/filterbar/VisualFilter.js +242 -193
  108. package/src/sap/fe/core/controls/filterbar/VisualFilter.ts +211 -204
  109. package/src/sap/fe/core/controls/filterbar/VisualFilterContainer.js +152 -116
  110. package/src/sap/fe/core/controls/filterbar/VisualFilterContainer.ts +105 -105
  111. package/src/sap/fe/core/controls/filterbar/utils/VisualFilterUtils.js +2 -2
  112. package/src/sap/fe/core/controls/filterbar/utils/VisualFilterUtils.ts +23 -28
  113. package/src/sap/fe/core/controls/massEdit/MassEditDialog.fragment.xml +41 -81
  114. package/src/sap/fe/core/controls/massEdit/MassEditField.fragment.xml +107 -0
  115. package/src/sap/fe/core/controls/massEdit/MassEditHandlers.js +550 -35
  116. package/src/sap/fe/core/controls/massEdit/MassEditHandlers.ts +604 -35
  117. package/src/sap/fe/core/converters/ManifestSettings.js +3 -1
  118. package/src/sap/fe/core/converters/ManifestSettings.ts +9 -2
  119. package/src/sap/fe/core/converters/MetaModelConverter.js +11 -40
  120. package/src/sap/fe/core/converters/MetaModelConverter.ts +56 -84
  121. package/src/sap/fe/core/converters/annotations/DataField.js +20 -5
  122. package/src/sap/fe/core/converters/annotations/DataField.ts +27 -6
  123. package/src/sap/fe/core/converters/controls/Common/Action.js +14 -21
  124. package/src/sap/fe/core/converters/controls/Common/Action.ts +23 -28
  125. package/src/sap/fe/core/converters/controls/Common/Chart.js +17 -10
  126. package/src/sap/fe/core/converters/controls/Common/Chart.ts +20 -14
  127. package/src/sap/fe/core/converters/controls/Common/Form.js +16 -18
  128. package/src/sap/fe/core/converters/controls/Common/Form.ts +20 -20
  129. package/src/sap/fe/core/converters/controls/Common/KPI.js +1 -1
  130. package/src/sap/fe/core/converters/controls/Common/KPI.ts +2 -3
  131. package/src/sap/fe/core/converters/controls/Common/Table.js +389 -173
  132. package/src/sap/fe/core/converters/controls/Common/Table.ts +440 -244
  133. package/src/sap/fe/core/converters/controls/Common/table/StandardActions.js +26 -16
  134. package/src/sap/fe/core/converters/controls/Common/table/StandardActions.ts +27 -19
  135. package/src/sap/fe/core/converters/controls/ListReport/FilterBar.js +78 -47
  136. package/src/sap/fe/core/converters/controls/ListReport/FilterBar.ts +146 -107
  137. package/src/sap/fe/core/converters/controls/ObjectPage/HeaderFacet.js +6 -6
  138. package/src/sap/fe/core/converters/controls/ObjectPage/HeaderFacet.ts +20 -18
  139. package/src/sap/fe/core/converters/controls/ObjectPage/SubSection.js +30 -25
  140. package/src/sap/fe/core/converters/controls/ObjectPage/SubSection.ts +39 -34
  141. package/src/sap/fe/core/converters/helpers/Aggregation.js +10 -2
  142. package/src/sap/fe/core/converters/helpers/Aggregation.ts +18 -13
  143. package/src/sap/fe/core/converters/helpers/BindingHelper.js +3 -2
  144. package/src/sap/fe/core/converters/helpers/BindingHelper.ts +6 -5
  145. package/src/sap/fe/core/converters/objectPage/FormMenuActions.js +1 -1
  146. package/src/sap/fe/core/converters/objectPage/FormMenuActions.ts +0 -4
  147. package/src/sap/fe/core/converters/objectPage/HeaderAndFooterAction.js +27 -24
  148. package/src/sap/fe/core/converters/objectPage/HeaderAndFooterAction.ts +49 -40
  149. package/src/sap/fe/core/converters/templates/ListReportConverter.js +33 -22
  150. package/src/sap/fe/core/converters/templates/ListReportConverter.ts +77 -62
  151. package/src/sap/fe/core/converters/templates/ObjectPageConverter.js +28 -28
  152. package/src/sap/fe/core/converters/templates/ObjectPageConverter.ts +38 -45
  153. package/src/sap/fe/core/designtime/AppComponent.designtime.js +3 -3
  154. package/src/sap/fe/core/designtime/AppComponent.designtime.ts +8 -6
  155. package/src/sap/fe/core/formatters/KPIFormatter.js +3 -12
  156. package/src/sap/fe/core/formatters/KPIFormatter.ts +3 -2
  157. package/src/sap/fe/core/formatters/TableFormatter.js +74 -13
  158. package/src/sap/fe/core/formatters/TableFormatter.ts +71 -16
  159. package/src/sap/fe/core/formatters/ValueFormatter.js +4 -4
  160. package/src/sap/fe/core/formatters/ValueFormatter.ts +4 -7
  161. package/src/sap/fe/core/fpm/Component.js +46 -17
  162. package/src/sap/fe/core/fpm/Component.ts +11 -16
  163. package/src/sap/fe/core/helpers/AppStartupHelper.js +4 -4
  164. package/src/sap/fe/core/helpers/AppStartupHelper.ts +3 -3
  165. package/src/sap/fe/core/helpers/BindingExpression.js +10 -7
  166. package/src/sap/fe/core/helpers/BindingExpression.ts +37 -35
  167. package/src/sap/fe/core/helpers/ClassSupport.js +273 -256
  168. package/src/sap/fe/core/helpers/ClassSupport.ts +315 -237
  169. package/src/sap/fe/core/helpers/FPMHelper.js +3 -2
  170. package/src/sap/fe/core/helpers/FPMHelper.ts +9 -8
  171. package/src/sap/fe/core/helpers/MassEditHelper.js +522 -147
  172. package/src/sap/fe/core/helpers/MassEditHelper.ts +563 -236
  173. package/src/sap/fe/core/helpers/ModelHelper.js +29 -1
  174. package/src/sap/fe/core/helpers/ModelHelper.ts +39 -26
  175. package/src/sap/fe/core/helpers/PasteHelper.js +4 -4
  176. package/src/sap/fe/core/helpers/PasteHelper.ts +4 -3
  177. package/src/sap/fe/core/helpers/SemanticDateOperators.js +3 -3
  178. package/src/sap/fe/core/helpers/SemanticDateOperators.ts +3 -1
  179. package/src/sap/fe/core/helpers/SemanticKeyHelper.js +1 -1
  180. package/src/sap/fe/core/helpers/SemanticKeyHelper.ts +1 -1
  181. package/src/sap/fe/core/helpers/StableIdHelper.js +5 -7
  182. package/src/sap/fe/core/helpers/StableIdHelper.ts +8 -8
  183. package/src/sap/fe/core/{Synchronization.js → helpers/Synchronization.js} +1 -1
  184. package/src/sap/fe/core/{Synchronization.ts → helpers/Synchronization.ts} +1 -1
  185. package/src/sap/fe/core/jsx-runtime/jsx.js +35 -5
  186. package/src/sap/fe/core/jsx-runtime/jsx.ts +22 -8
  187. package/src/sap/fe/core/library.js +13 -5
  188. package/src/sap/fe/core/library.ts +26 -17
  189. package/src/sap/fe/core/manifestMerger/ChangePageConfiguration.js +1 -1
  190. package/src/sap/fe/core/manifestMerger/ChangePageConfiguration.ts +0 -3
  191. package/src/sap/fe/core/messagebundle.properties +135 -180
  192. package/src/sap/fe/core/messagebundle_ar.properties +31 -64
  193. package/src/sap/fe/core/messagebundle_bg.properties +31 -64
  194. package/src/sap/fe/core/messagebundle_ca.properties +31 -64
  195. package/src/sap/fe/core/messagebundle_cs.properties +31 -64
  196. package/src/sap/fe/core/messagebundle_cy.properties +32 -65
  197. package/src/sap/fe/core/messagebundle_da.properties +31 -64
  198. package/src/sap/fe/core/messagebundle_de.properties +29 -62
  199. package/src/sap/fe/core/messagebundle_el.properties +32 -65
  200. package/src/sap/fe/core/messagebundle_en.properties +32 -65
  201. package/src/sap/fe/core/messagebundle_en_GB.properties +29 -62
  202. package/src/sap/fe/core/messagebundle_en_US_sappsd.properties +41 -74
  203. package/src/sap/fe/core/messagebundle_en_US_saprigi.properties +32 -65
  204. package/src/sap/fe/core/messagebundle_en_US_saptrc.properties +20 -6
  205. package/src/sap/fe/core/messagebundle_es.properties +31 -64
  206. package/src/sap/fe/core/messagebundle_es_MX.properties +31 -64
  207. package/src/sap/fe/core/messagebundle_et.properties +31 -64
  208. package/src/sap/fe/core/messagebundle_fi.properties +29 -62
  209. package/src/sap/fe/core/messagebundle_fr.properties +36 -69
  210. package/src/sap/fe/core/messagebundle_fr_CA.properties +33 -66
  211. package/src/sap/fe/core/messagebundle_hi.properties +29 -62
  212. package/src/sap/fe/core/messagebundle_hr.properties +32 -65
  213. package/src/sap/fe/core/messagebundle_hu.properties +30 -63
  214. package/src/sap/fe/core/messagebundle_id.properties +32 -65
  215. package/src/sap/fe/core/messagebundle_it.properties +31 -64
  216. package/src/sap/fe/core/messagebundle_iw.properties +31 -64
  217. package/src/sap/fe/core/messagebundle_ja.properties +29 -62
  218. package/src/sap/fe/core/messagebundle_kk.properties +31 -64
  219. package/src/sap/fe/core/messagebundle_ko.properties +31 -64
  220. package/src/sap/fe/core/messagebundle_lt.properties +31 -64
  221. package/src/sap/fe/core/messagebundle_lv.properties +32 -65
  222. package/src/sap/fe/core/messagebundle_ms.properties +31 -64
  223. package/src/sap/fe/core/messagebundle_nl.properties +31 -64
  224. package/src/sap/fe/core/messagebundle_no.properties +31 -64
  225. package/src/sap/fe/core/messagebundle_pl.properties +34 -67
  226. package/src/sap/fe/core/messagebundle_pt.properties +32 -65
  227. package/src/sap/fe/core/messagebundle_pt_PT.properties +31 -64
  228. package/src/sap/fe/core/messagebundle_ro.properties +33 -66
  229. package/src/sap/fe/core/messagebundle_ru.properties +33 -66
  230. package/src/sap/fe/core/messagebundle_sh.properties +31 -64
  231. package/src/sap/fe/core/messagebundle_sk.properties +31 -64
  232. package/src/sap/fe/core/messagebundle_sl.properties +29 -62
  233. package/src/sap/fe/core/messagebundle_sv.properties +30 -63
  234. package/src/sap/fe/core/messagebundle_th.properties +31 -64
  235. package/src/sap/fe/core/messagebundle_tr.properties +31 -64
  236. package/src/sap/fe/core/messagebundle_uk.properties +32 -65
  237. package/src/sap/fe/core/messagebundle_vi.properties +31 -64
  238. package/src/sap/fe/core/messagebundle_zh_CN.properties +32 -65
  239. package/src/sap/fe/core/messagebundle_zh_TW.properties +34 -67
  240. package/src/sap/fe/core/services/AsyncComponentServiceFactory.js +4 -4
  241. package/src/sap/fe/core/services/AsyncComponentServiceFactory.ts +1 -1
  242. package/src/sap/fe/core/services/CacheHandlerServiceFactory.js +5 -5
  243. package/src/sap/fe/core/services/CacheHandlerServiceFactory.ts +1 -2
  244. package/src/sap/fe/core/services/EnvironmentServiceFactory.js +11 -8
  245. package/src/sap/fe/core/services/EnvironmentServiceFactory.ts +15 -13
  246. package/src/sap/fe/core/services/NavigationServiceFactory.js +5 -5
  247. package/src/sap/fe/core/services/NavigationServiceFactory.ts +9 -5
  248. package/src/sap/fe/core/services/ResourceModelServiceFactory.js +4 -4
  249. package/src/sap/fe/core/services/ResourceModelServiceFactory.ts +1 -1
  250. package/src/sap/fe/core/services/RoutingServiceFactory.js +105 -66
  251. package/src/sap/fe/core/services/RoutingServiceFactory.ts +59 -49
  252. package/src/sap/fe/core/services/ShellServicesFactory.js +104 -29
  253. package/src/sap/fe/core/services/ShellServicesFactory.ts +64 -30
  254. package/src/sap/fe/core/services/SideEffectsServiceFactory.js +4 -4
  255. package/src/sap/fe/core/services/SideEffectsServiceFactory.ts +1 -1
  256. package/src/sap/fe/core/services/TemplatedViewServiceFactory.js +11 -10
  257. package/src/sap/fe/core/services/TemplatedViewServiceFactory.ts +38 -51
  258. package/src/sap/fe/core/services/view/TemplatingErrorPage.controller.js +43 -5
  259. package/src/sap/fe/core/services/view/TemplatingErrorPage.controller.ts +6 -3
  260. package/src/sap/fe/core/support/CommonHelper.js +1 -1
  261. package/src/sap/fe/core/support/CommonHelper.ts +0 -3
  262. package/src/sap/fe/core/templating/DataModelPathHelper.js +2 -9
  263. package/src/sap/fe/core/templating/DataModelPathHelper.ts +32 -38
  264. package/src/sap/fe/core/templating/DisplayModeFormatter.js +23 -3
  265. package/src/sap/fe/core/templating/DisplayModeFormatter.ts +27 -6
  266. package/src/sap/fe/core/templating/EntitySetHelper.js +1 -9
  267. package/src/sap/fe/core/templating/EntitySetHelper.ts +11 -13
  268. package/src/sap/fe/core/templating/FilterHelper.js +4 -4
  269. package/src/sap/fe/core/templating/FilterHelper.ts +6 -5
  270. package/src/sap/fe/core/templating/PropertyHelper.js +70 -33
  271. package/src/sap/fe/core/templating/PropertyHelper.ts +49 -27
  272. package/src/sap/fe/core/templating/UIFormatters.js +133 -22
  273. package/src/sap/fe/core/templating/UIFormatters.ts +144 -50
  274. package/src/sap/fe/core/type/DateTimeWithTimezone.js +47 -0
  275. package/src/sap/fe/core/type/DateTimeWithTimezone.ts +23 -0
  276. package/src/sap/fe/core/type/Email.js +26 -8
  277. package/src/sap/fe/core/type/Email.ts +8 -7
  278. package/src/sap/fe/core/AnnotationHelper.js +0 -312
  279. package/src/sap/fe/core/AnnotationHelper.ts +0 -315
  280. package/src/sap/fe/core/RouterProxy.js +0 -926
  281. package/src/sap/fe/core/TransactionHelper.js +0 -1562
  282. package/src/sap/fe/core/actions/collaboration/ActivitySync.js +0 -392
  283. package/src/sap/fe/core/actions/collaboration/CollaborationCommon.js +0 -136
  284. package/src/sap/fe/core/actions/collaboration/Manage.js +0 -262
  285. package/src/sap/fe/core/actions/collaboration/ManageDialog.fragment.xml +0 -103
  286. package/src/sap/fe/core/actions/draft.js +0 -523
  287. package/src/sap/fe/core/actions/messageHandling.js +0 -567
  288. package/src/sap/fe/core/actions/nonDraft.js +0 -20
  289. package/src/sap/fe/core/actions/nonDraft.ts +0 -12
  290. package/src/sap/fe/core/actions/operations.js +0 -1096
  291. package/src/sap/fe/core/actions/sticky.js +0 -130
  292. package/src/sap/fe/core/controllerextensions/ControllerExtensionMetadata.js +0 -78
  293. package/src/sap/fe/core/controllerextensions/ControllerExtensionMetadata.ts +0 -65
  294. package/src/sap/fe/core/formatters/CriticalityFormatter.js +0 -77
  295. package/src/sap/fe/core/formatters/CriticalityFormatter.ts +0 -58
@@ -1,14 +1,24 @@
1
- import {
2
- MultipleViewsConfiguration,
3
- ViewPathConfiguration,
4
- SingleViewPathConfiguration,
5
- VisualizationType,
6
- TemplateType,
7
- CombinedViewPathConfiguration,
8
- CustomViewTemplateConfiguration,
9
- VariantManagementType
10
- } from "../ManifestSettings";
11
1
  import { EntityType } from "@sap-ux/annotation-converter";
2
+ import { UIAnnotationTerms } from "@sap-ux/vocabularies-types";
3
+ import {
4
+ LineItem,
5
+ PresentationVariantTypeTypes,
6
+ SelectionPresentationVariantTypeTypes,
7
+ 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";
12
+ import {
13
+ CustomElementFilterField,
14
+ FilterField,
15
+ getFilterBarhideBasicSearch,
16
+ getManifestFilterFields,
17
+ getSelectionFields
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";
12
22
  import {
13
23
  DataVisualizationAnnotations,
14
24
  DataVisualizationDefinition,
@@ -17,32 +27,22 @@ import {
17
27
  getDefaultLineItem,
18
28
  getDefaultPresentationVariant,
19
29
  getSelectionPresentationVariant,
20
- isPresentationCompliant,
21
30
  getSelectionVariant,
31
+ isPresentationCompliant,
22
32
  isSelectionPresentationCompliant
23
33
  } from "../controls/Common/DataVisualization";
34
+ import { getKPIDefinitions, KPIDefinition } from "../controls/Common/KPI";
35
+ import { ChartID, CustomTabID, FilterBarID, FilterVariantManagementID, IconTabBarID, TableID } from "../helpers/ID";
24
36
  import {
25
- LineItem,
26
- PresentationVariantTypeTypes,
27
- SelectionPresentationVariantTypeTypes,
28
- SelectionVariantTypeTypes
29
- } from "@sap-ux/vocabularies-types/dist/generated/UI";
30
- import { UIAnnotationTerms } from "@sap-ux/vocabularies-types";
31
- import { CustomTabID, FilterBarID, FilterVariantManagementID, TableID, ChartID, IconTabBarID } from "../helpers/ID";
32
- import { TableVisualization } from "sap/fe/core/converters/controls/Common/Table";
33
- import { ChartVisualization } from "sap/fe/core/converters/controls/Common/Chart";
34
- import { BaseAction, getActionsFromManifest } from "sap/fe/core/converters/controls/Common/Action";
35
- import { ConfigurableObject, insertCustomElements } from "sap/fe/core/converters/helpers/ConfigurableObject";
36
- import { annotationExpression, compileBinding } from "sap/fe/core/helpers/BindingExpression";
37
- import ConverterContext from "sap/fe/core/converters/ConverterContext";
38
- import { KPIDefinition, getKPIDefinitions } from "../controls/Common/KPI";
39
- import {
40
- getSelectionFields,
41
- getManifestFilterFields,
42
- getFilterBarhideBasicSearch,
43
- FilterField,
44
- CustomElementFilterField
45
- } from "sap/fe/core/converters/controls/ListReport/FilterBar";
37
+ CombinedViewPathConfiguration,
38
+ CustomViewTemplateConfiguration,
39
+ MultipleViewsConfiguration,
40
+ SingleViewPathConfiguration,
41
+ TemplateType,
42
+ VariantManagementType,
43
+ ViewPathConfiguration,
44
+ VisualizationType
45
+ } from "../ManifestSettings";
46
46
 
47
47
  type ViewAnnotationsTypeTypes = SelectionPresentationVariantTypeTypes | SelectionVariantTypeTypes;
48
48
  type VariantManagementDefinition = {
@@ -113,6 +113,7 @@ export type CombinedViewDefinition = {
113
113
  tableControlId: string;
114
114
  chartControlId: string;
115
115
  defaultPath?: string;
116
+ visible?: string;
116
117
  };
117
118
 
118
119
  export type CustomViewDefinition = {
@@ -120,6 +121,7 @@ export type CustomViewDefinition = {
120
121
  fragment: string;
121
122
  type: string;
122
123
  customTabId: string;
124
+ visible?: string;
123
125
  };
124
126
  export type SingleViewDefinition = SingleTableViewDefinition | SingleChartViewDefinition;
125
127
 
@@ -131,10 +133,12 @@ export type BaseSingleViewDefinition = {
131
133
 
132
134
  export type SingleTableViewDefinition = BaseSingleViewDefinition & {
133
135
  tableControlId?: string;
136
+ visible?: string;
134
137
  };
135
138
 
136
139
  export type SingleChartViewDefinition = BaseSingleViewDefinition & {
137
140
  chartControlId?: string;
141
+ visible?: string;
138
142
  };
139
143
 
140
144
  type ContentAreaID = {
@@ -149,13 +153,13 @@ type ContentAreaID = {
149
153
  */
150
154
  function getTableVisualizations(views: ListReportViewDefinition[]): TableVisualization[] {
151
155
  const tables: TableVisualization[] = [];
152
- views.forEach(function(view) {
156
+ views.forEach(function (view) {
153
157
  if (!(view as CustomViewDefinition).type) {
154
158
  const visualizations = (view as CombinedViewDefinition).secondaryVisualization
155
159
  ? (view as CombinedViewDefinition).secondaryVisualization.visualizations
156
160
  : (view as SingleViewDefinition).presentation.visualizations;
157
161
 
158
- visualizations.forEach(function(visualization) {
162
+ visualizations.forEach(function (visualization) {
159
163
  if (visualization.type === VisualizationType.Table) {
160
164
  tables.push(visualization);
161
165
  }
@@ -167,13 +171,13 @@ function getTableVisualizations(views: ListReportViewDefinition[]): TableVisuali
167
171
 
168
172
  function getChartVisualizations(views: ListReportViewDefinition[]): ChartVisualization[] {
169
173
  const charts: ChartVisualization[] = [];
170
- views.forEach(function(view) {
174
+ views.forEach(function (view) {
171
175
  if (!(view as CustomViewDefinition).type) {
172
176
  const visualizations = (view as CombinedViewDefinition).primaryVisualization
173
177
  ? (view as CombinedViewDefinition).primaryVisualization.visualizations
174
178
  : (view as SingleViewDefinition).presentation.visualizations;
175
179
 
176
- visualizations.forEach(function(visualization) {
180
+ visualizations.forEach(function (visualization) {
177
181
  if (visualization.type === VisualizationType.Chart) {
178
182
  charts.push(visualization);
179
183
  }
@@ -183,7 +187,7 @@ function getChartVisualizations(views: ListReportViewDefinition[]): ChartVisuali
183
187
  return charts;
184
188
  }
185
189
 
186
- const getDefaultSemanticDates = function(filterFields: Record<string, CustomElementFilterField>): Record<string, DefaultSemanticDate> {
190
+ const getDefaultSemanticDates = function (filterFields: Record<string, CustomElementFilterField>): Record<string, DefaultSemanticDate> {
187
191
  const defaultSemanticDates: any = {};
188
192
  for (const filterField in filterFields) {
189
193
  if (filterFields[filterField]?.settings?.defaultValues?.length) {
@@ -241,7 +245,7 @@ function getCompliantVisualizationAnnotation(
241
245
  return undefined;
242
246
  }
243
247
 
244
- const getView = function(viewConverterConfiguration: ViewConverterSettings): ListReportViewDefinition {
248
+ const getView = function (viewConverterConfiguration: ViewConverterSettings): ListReportViewDefinition {
245
249
  let config = viewConverterConfiguration;
246
250
  if (config.converterContext) {
247
251
  let converterContext = config.converterContext;
@@ -258,10 +262,10 @@ const getView = function(viewConverterConfiguration: ViewConverterSettings): Lis
258
262
  let chartControlId = "";
259
263
  let title: string | undefined = "";
260
264
  let selectionVariantPath = "";
261
- const isMultipleViewConfiguration = function(config: ViewConfiguration): config is MultipleViewConfiguration {
265
+ const isMultipleViewConfiguration = function (config: ViewConfiguration): config is MultipleViewConfiguration {
262
266
  return (config as MultipleViewConfiguration).key !== undefined;
263
267
  };
264
- const createVisualization = function(presentation: DataVisualizationDefinition, isPrimary?: boolean) {
268
+ const createVisualization = function (presentation: DataVisualizationDefinition, isPrimary?: boolean) {
265
269
  let defaultVisualization;
266
270
  for (const visualization of presentation.visualizations) {
267
271
  if (isPrimary && visualization.type === VisualizationType.Chart) {
@@ -279,7 +283,7 @@ const getView = function(viewConverterConfiguration: ViewConverterSettings): Lis
279
283
  }
280
284
  return presentationCreated;
281
285
  };
282
- const getPresentation = function(item: SingleViewPathConfiguration) {
286
+ const getPresentation = function (item: SingleViewPathConfiguration) {
283
287
  const resolvedTarget = converterContext.getEntityTypeAnnotation(item.annotationPath);
284
288
  const targetAnnotation = resolvedTarget.annotation as DataVisualizationAnnotations;
285
289
  converterContext = resolvedTarget.converterContext;
@@ -294,7 +298,7 @@ const getView = function(viewConverterConfiguration: ViewConverterSettings): Lis
294
298
  );
295
299
  return presentation;
296
300
  };
297
- const createAlpView = function(
301
+ const createAlpView = function (
298
302
  presentations: DataVisualizationDefinition[],
299
303
  defaultPath: "both" | "primary" | "secondary" | undefined
300
304
  ) {
@@ -305,12 +309,15 @@ const getView = function(viewConverterConfiguration: ViewConverterSettings): Lis
305
309
  );
306
310
  tableControlId = (secondaryVisualization?.visualizations[0] as TableVisualization).annotation.id;
307
311
  if (primaryVisualization && secondaryVisualization) {
312
+ config = config as ViewPathConfiguration;
313
+ const visible = config.visible;
308
314
  const view: CombinedViewDefinition = {
309
315
  primaryVisualization,
310
316
  secondaryVisualization,
311
317
  tableControlId,
312
318
  chartControlId,
313
- defaultPath
319
+ defaultPath,
320
+ visible
314
321
  };
315
322
  return view;
316
323
  }
@@ -355,9 +362,9 @@ const getView = function(viewConverterConfiguration: ViewConverterSettings): Lis
355
362
  }
356
363
  config = config as ViewAnnotationConfiguration;
357
364
  if (config && config.annotation && config.annotation.term === UIAnnotationTerms.SelectionPresentationVariant) {
358
- selectionVariantPath = (config.annotation as SelectionPresentationVariantTypeTypes).SelectionVariant.fullyQualifiedName.split(
359
- "@"
360
- )[1];
365
+ selectionVariantPath = (
366
+ config.annotation as SelectionPresentationVariantTypeTypes
367
+ ).SelectionVariant.fullyQualifiedName.split("@")[1];
361
368
  } else {
362
369
  selectionVariantPath = (config as SingleViewPathConfiguration).annotationPath;
363
370
  }
@@ -372,42 +379,48 @@ const getView = function(viewConverterConfiguration: ViewConverterSettings): Lis
372
379
  case VisualizationType.Chart:
373
380
  const chartVisualization = presentation.visualizations[index] as ChartVisualization;
374
381
  chartVisualization.id = ChartID((config as SingleViewPathConfiguration).key || "", "Chart");
382
+ chartVisualization.multiViews = true;
375
383
  break;
376
384
  default:
377
385
  break;
378
386
  }
379
387
  });
380
388
  }
381
- presentation.visualizations.forEach(visualizationDefinition => {
389
+ presentation.visualizations.forEach((visualizationDefinition) => {
382
390
  if (visualizationDefinition.type === VisualizationType.Table) {
383
391
  tableControlId = visualizationDefinition.annotation.id;
384
392
  } else if (visualizationDefinition.type === VisualizationType.Chart) {
385
393
  chartControlId = visualizationDefinition.id;
386
394
  }
387
395
  });
396
+ config = config as ViewPathConfiguration;
397
+ const visible = config.visible;
388
398
  return {
389
399
  presentation,
390
400
  tableControlId,
391
401
  chartControlId,
392
402
  title,
393
- selectionVariantPath
403
+ selectionVariantPath,
404
+ visible
394
405
  };
395
406
  } else {
396
407
  config = config as CustomViewConfiguration;
397
408
  const title = config.label,
398
409
  fragment = config.template,
399
410
  type = config.type,
400
- customTabId = CustomTabID(config.key || "");
411
+ customTabId = CustomTabID(config.key || ""),
412
+ visible = config.visible;
401
413
  return {
402
414
  title,
403
415
  fragment,
404
416
  type,
405
- customTabId
417
+ customTabId,
418
+ visible
406
419
  };
407
420
  }
408
421
  };
409
422
 
410
- const getViews = function(
423
+ const getViews = function (
411
424
  converterContext: ConverterContext,
412
425
  settingsViews: MultipleViewsConfiguration | undefined
413
426
  ): ListReportViewDefinition[] {
@@ -432,7 +445,8 @@ const getViews = function(
432
445
  key: path.key,
433
446
  label: path.label,
434
447
  template: path.template,
435
- type: "Custom"
448
+ type: "Custom",
449
+ visible: path.visible
436
450
  });
437
451
  } else {
438
452
  path = path as SingleViewPathConfiguration;
@@ -467,7 +481,8 @@ const getViews = function(
467
481
  annotation,
468
482
  annotationPath: path.annotationPath,
469
483
  keepPreviousPresonalization: path.keepPreviousPresonalization,
470
- key: path.key
484
+ key: path.key,
485
+ visible: path.visible
471
486
  });
472
487
  }
473
488
  } else {
@@ -486,7 +501,7 @@ const getViews = function(
486
501
  });
487
502
  }
488
503
  }
489
- return viewConverterConfigs.map(viewConverterConfig => {
504
+ return viewConverterConfigs.map((viewConverterConfig) => {
490
505
  return getView(viewConverterConfig);
491
506
  });
492
507
  };
@@ -517,16 +532,16 @@ function getAlpViewConfig(converterContext: ConverterContext, viewConfigs: ViewC
517
532
  return viewConfigs;
518
533
  }
519
534
 
520
- export const getHeaderActions = function(converterContext: ConverterContext): BaseAction[] {
535
+ export const getHeaderActions = function (converterContext: ConverterContext): BaseAction[] {
521
536
  const manifestWrapper = converterContext.getManifestWrapper();
522
537
  return insertCustomElements([], getActionsFromManifest(manifestWrapper.getHeaderActions(), converterContext));
523
538
  };
524
539
 
525
- export const checkChartFilterBarId = function(views: ListReportViewDefinition[], filterBarId: string) {
526
- views.forEach(view => {
540
+ export const checkChartFilterBarId = function (views: ListReportViewDefinition[], filterBarId: string) {
541
+ views.forEach((view) => {
527
542
  if (!(view as CustomViewDefinition).type) {
528
543
  const presentation: DataVisualizationDefinition = (view as SingleViewDefinition).presentation;
529
- presentation.visualizations.forEach(visualizationDefinition => {
544
+ presentation.visualizations.forEach((visualizationDefinition) => {
530
545
  if (visualizationDefinition.type === VisualizationType.Chart && visualizationDefinition.filterId !== filterBarId) {
531
546
  visualizationDefinition.filterId = filterBarId;
532
547
  }
@@ -541,7 +556,7 @@ export const checkChartFilterBarId = function(views: ListReportViewDefinition[],
541
556
  * @param converterContext The converter context
542
557
  * @returns {ListReportDefinition} The list report definition based on annotation + manifest
543
558
  */
544
- export const convertPage = function(converterContext: ConverterContext): ListReportDefinition {
559
+ export const convertPage = function (converterContext: ConverterContext): ListReportDefinition {
545
560
  const entityType = converterContext.getEntityType();
546
561
  const sContextPath = converterContext.getContextPath();
547
562
 
@@ -558,7 +573,7 @@ export const convertPage = function(converterContext: ConverterContext): ListRep
558
573
  const showTabCounts = viewsDefinition ? viewsDefinition?.showCounts || hasMultipleEntitySets : undefined; // with multi EntitySets, tab counts are displayed by default
559
574
  const lrTableVisualizations = getTableVisualizations(views);
560
575
  const lrChartVisualizations = getChartVisualizations(views);
561
- const showPinnableToggle = lrTableVisualizations.some(table => table.control.type === "ResponsiveTable");
576
+ const showPinnableToggle = lrTableVisualizations.some((table) => table.control.type === "ResponsiveTable");
562
577
  let singleTableId = "";
563
578
  let singleChartId = "";
564
579
  const filterBarId = FilterBarID(sContextPath);
@@ -593,11 +608,11 @@ export const convertPage = function(converterContext: ConverterContext): ListRep
593
608
  }
594
609
 
595
610
  const visualizationIds = lrTableVisualizations
596
- .map(visualization => {
611
+ .map((visualization) => {
597
612
  return visualization.annotation.id;
598
613
  })
599
614
  .concat(
600
- lrChartVisualizations.map(visualization => {
615
+ lrChartVisualizations.map((visualization) => {
601
616
  return visualization.id;
602
617
  })
603
618
  );
@@ -2,34 +2,34 @@
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(["../ManifestSettings", "../controls/ObjectPage/SubSection", "../controls/ObjectPage/HeaderFacet", "../helpers/ID", "../helpers/ConfigurableObject", "sap/fe/core/converters/controls/Common/Action", "sap/fe/core/converters/objectPage/HeaderAndFooterAction", "../controls/ObjectPage/Avatar", "sap/fe/core/helpers/BindingExpression"], function (ManifestSettings, SubSection, HeaderFacet, ID, ConfigurableObject, Action, HeaderAndFooterAction, Avatar, BindingExpression) {
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) {
6
6
  "use strict";
7
7
 
8
8
  var _exports = {};
9
- var constant = BindingExpression.constant;
10
- var ifElse = BindingExpression.ifElse;
9
+ var TemplateType = ManifestSettings.TemplateType;
10
+ var SectionID = ID.SectionID;
11
+ var EditableHeaderSectionID = ID.EditableHeaderSectionID;
12
+ var CustomSectionID = ID.CustomSectionID;
13
+ var Placement = ConfigurableObject.Placement;
14
+ var insertCustomElements = ConfigurableObject.insertCustomElements;
15
+ var UI = BindingHelper.UI;
16
+ var createSubSections = SubSection.createSubSections;
17
+ var createCustomSubSections = SubSection.createCustomSubSections;
18
+ var createCustomHeaderFacetSubSections = SubSection.createCustomHeaderFacetSubSections;
19
+ var getHeaderFacetsFromManifest = HeaderFacet.getHeaderFacetsFromManifest;
20
+ var getHeaderFacetsFromAnnotations = HeaderFacet.getHeaderFacetsFromAnnotations;
21
+ var getAvatar = Avatar.getAvatar;
11
22
  var not = BindingExpression.not;
23
+ var ifElse = BindingExpression.ifElse;
12
24
  var equal = BindingExpression.equal;
25
+ var constant = BindingExpression.constant;
13
26
  var compileBinding = BindingExpression.compileBinding;
14
- var bindingExpression = BindingExpression.bindingExpression;
15
27
  var annotationExpression = BindingExpression.annotationExpression;
16
- var getAvatar = Avatar.getAvatar;
17
28
  var getHiddenHeaderActions = HeaderAndFooterAction.getHiddenHeaderActions;
18
- var getFooterDefaultActions = HeaderAndFooterAction.getFooterDefaultActions;
19
29
  var getHeaderDefaultActions = HeaderAndFooterAction.getHeaderDefaultActions;
30
+ var getFooterDefaultActions = HeaderAndFooterAction.getFooterDefaultActions;
20
31
  var removeDuplicateActions = Action.removeDuplicateActions;
21
32
  var getActionsFromManifest = Action.getActionsFromManifest;
22
- var Placement = ConfigurableObject.Placement;
23
- var insertCustomElements = ConfigurableObject.insertCustomElements;
24
- var SectionID = ID.SectionID;
25
- var EditableHeaderSectionID = ID.EditableHeaderSectionID;
26
- var CustomSectionID = ID.CustomSectionID;
27
- var getHeaderFacetsFromManifest = HeaderFacet.getHeaderFacetsFromManifest;
28
- var getHeaderFacetsFromAnnotations = HeaderFacet.getHeaderFacetsFromAnnotations;
29
- var createCustomHeaderFacetSubSections = SubSection.createCustomHeaderFacetSubSections;
30
- var createSubSections = SubSection.createSubSections;
31
- var createCustomSubSections = SubSection.createCustomSubSections;
32
- var TemplateType = ManifestSettings.TemplateType;
33
33
 
34
34
  function ownKeys(object, enumerableOnly) { var keys = Object.keys(object); if (Object.getOwnPropertySymbols) { var symbols = Object.getOwnPropertySymbols(object); if (enumerableOnly) { symbols = symbols.filter(function (sym) { return Object.getOwnPropertyDescriptor(object, sym).enumerable; }); } keys.push.apply(keys, symbols); } return keys; }
35
35
 
@@ -90,7 +90,7 @@ sap.ui.define(["../ManifestSettings", "../controls/ObjectPage/SubSection", "../c
90
90
  id: editableHeaderSectionID,
91
91
  key: "EditableHeaderContent",
92
92
  title: "{sap.fe.i18n>T_COMMON_OBJECT_PAGE_HEADER_SECTION}",
93
- visible: "{= ${ui>/editMode} === 'Editable' }",
93
+ visible: compileBinding(UI.IsEditable),
94
94
  subSections: allHeaderFacetsSubSections
95
95
  };
96
96
  return headerSection;
@@ -212,7 +212,8 @@ sap.ui.define(["../ManifestSettings", "../controls/ObjectPage/SubSection", "../c
212
212
  var headerActions = insertCustomElements(aAnnotationHeaderActions, getActionsFromManifest(manifestWrapper.getHeaderActions(), converterContext, aAnnotationHeaderActions, undefined, undefined, getHiddenHeaderActions(converterContext)), {
213
213
  isNavigable: "overwrite",
214
214
  enabled: "overwrite",
215
- defaultValuesExtensionFunction: "overwrite"
215
+ defaultValuesExtensionFunction: "overwrite",
216
+ command: "overwrite"
216
217
  });
217
218
  return removeDuplicateActions(headerActions);
218
219
  };
@@ -232,7 +233,8 @@ sap.ui.define(["../ManifestSettings", "../controls/ObjectPage/SubSection", "../c
232
233
  var footerActions = insertCustomElements(aAnnotationFooterActions, getActionsFromManifest(manifestWrapper.getFooterActions(), converterContext, aAnnotationFooterActions), {
233
234
  isNavigable: "overwrite",
234
235
  enabled: "overwrite",
235
- defaultValuesExtensionFunction: "overwrite"
236
+ defaultValuesExtensionFunction: "overwrite",
237
+ command: "overwrite"
236
238
  });
237
239
  return footerActions;
238
240
  };
@@ -312,7 +314,7 @@ sap.ui.define(["../ManifestSettings", "../controls/ObjectPage/SubSection", "../c
312
314
 
313
315
  function getShowHeaderContentExpression(converterContext) {
314
316
  var manifestWrapper = converterContext.getManifestWrapper();
315
- return ifElse(!hasHeaderContent(converterContext), constant(false), ifElse(equal(manifestWrapper.isHeaderEditable(), false), constant(true), not(equal(bindingExpression("/editMode", "ui"), "Editable"))));
317
+ return ifElse(!hasHeaderContent(converterContext), constant(false), ifElse(equal(manifestWrapper.isHeaderEditable(), false), constant(true), not(UI.IsEditable)));
316
318
  }
317
319
  /**
318
320
  * Gets the binding expression to evaluate the visibility of the header content.
@@ -342,12 +344,11 @@ sap.ui.define(["../ManifestSettings", "../controls/ObjectPage/SubSection", "../c
342
344
  _exports.getExpandedImageVisible = getExpandedImageVisible;
343
345
 
344
346
  var convertPage = function (converterContext) {
345
- var _entityType$annotatio4, _entityType$annotatio5, _entityType$annotatio6, _entityType$annotatio7;
347
+ var _entityType$annotatio4, _entityType$annotatio5;
346
348
 
347
349
  var manifestWrapper = converterContext.getManifestWrapper();
348
350
  var headerSection;
349
- var entityType = converterContext.getEntityType();
350
- var situationAnnotations = (_entityType$annotatio4 = entityType.annotations) === null || _entityType$annotatio4 === void 0 ? void 0 : (_entityType$annotatio5 = _entityType$annotatio4.FE) === null || _entityType$annotatio5 === void 0 ? void 0 : _entityType$annotatio5.Situations; // Retrieve all header facets (from annotations & custom)
351
+ var entityType = converterContext.getEntityType(); // Retrieve all header facets (from annotations & custom)
351
352
 
352
353
  var headerFacets = insertCustomElements(getHeaderFacetsFromAnnotations(converterContext), getHeaderFacetsFromManifest(manifestWrapper.getHeaderFacets())); // Retrieve the page header actions
353
354
 
@@ -355,7 +356,7 @@ sap.ui.define(["../ManifestSettings", "../controls/ObjectPage/SubSection", "../c
355
356
 
356
357
  var footerActions = getFooterActions(converterContext);
357
358
 
358
- if (manifestWrapper.isHeaderEditable() && ((_entityType$annotatio6 = entityType.annotations.UI) !== null && _entityType$annotatio6 !== void 0 && _entityType$annotatio6.HeaderFacets || (_entityType$annotatio7 = entityType.annotations.UI) !== null && _entityType$annotatio7 !== void 0 && _entityType$annotatio7.HeaderInfo)) {
359
+ if (manifestWrapper.isHeaderEditable() && ((_entityType$annotatio4 = entityType.annotations.UI) !== null && _entityType$annotatio4 !== void 0 && _entityType$annotatio4.HeaderFacets || (_entityType$annotatio5 = entityType.annotations.UI) !== null && _entityType$annotatio5 !== void 0 && _entityType$annotatio5.HeaderInfo)) {
359
360
  headerSection = createEditableHeaderSection(converterContext, headerFacets);
360
361
  }
361
362
 
@@ -372,8 +373,7 @@ sap.ui.define(["../ManifestSettings", "../controls/ObjectPage/SubSection", "../c
372
373
  avatar: getAvatar(converterContext),
373
374
  title: {
374
375
  expandedImageVisible: getExpandedImageVisible(converterContext)
375
- },
376
- situations: situationAnnotations
376
+ }
377
377
  },
378
378
  sections: sections,
379
379
  footerActions: footerActions,
@@ -385,4 +385,4 @@ sap.ui.define(["../ManifestSettings", "../controls/ObjectPage/SubSection", "../c
385
385
  _exports.convertPage = convertPage;
386
386
  return _exports;
387
387
  }, false);
388
- //# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIk9iamVjdFBhZ2VDb252ZXJ0ZXIudHMiXSwibmFtZXMiOlsiZ2V0U2VjdGlvbktleSIsImZhY2V0RGVmaW5pdGlvbiIsImZhbGxiYWNrIiwiSUQiLCJ0b1N0cmluZyIsIkxhYmVsIiwiY3JlYXRlRWRpdGFibGVIZWFkZXJTZWN0aW9uIiwiY29udmVydGVyQ29udGV4dCIsImFsbEhlYWRlckZhY2V0cyIsImVkaXRhYmxlSGVhZGVyU2VjdGlvbklEIiwiRWRpdGFibGVIZWFkZXJTZWN0aW9uSUQiLCJoZWFkZXJGYWNldHMiLCJnZXRFbnRpdHlUeXBlIiwiYW5ub3RhdGlvbnMiLCJVSSIsIkhlYWRlckZhY2V0cyIsImhlYWRlcmZhY2V0U3ViU2VjdGlvbnMiLCJjcmVhdGVTdWJTZWN0aW9ucyIsImN1c3RvbUhlYWRlckZhY2V0U3ViU2VjdGlvbnMiLCJjcmVhdGVDdXN0b21IZWFkZXJGYWNldFN1YlNlY3Rpb25zIiwiYWxsSGVhZGVyRmFjZXRzU3ViU2VjdGlvbnMiLCJsZW5ndGgiLCJpIiwiZm9yRWFjaCIsIml0ZW0iLCJ2aXNpYmxlIiwicHVzaCIsImtleSIsInNsaWNlIiwibGFzdEluZGV4T2YiLCJjdXN0b21JdGVtIiwiaGVhZGVyU2VjdGlvbiIsImlkIiwidGl0bGUiLCJzdWJTZWN0aW9ucyIsImdldFNlY3Rpb25zRnJvbUFubm90YXRpb24iLCJlbnRpdHlUeXBlIiwib2JqZWN0UGFnZVNlY3Rpb25zIiwiRmFjZXRzIiwibWFwIiwiZ2V0U2VjdGlvbkZyb21Bbm5vdGF0aW9uIiwiZmFjZXQiLCJzZWN0aW9uSUQiLCJTZWN0aW9uSUQiLCJGYWNldCIsInNlY3Rpb24iLCJjb21waWxlQmluZGluZyIsImFubm90YXRpb25FeHByZXNzaW9uIiwic2hvd1RpdGxlIiwibm90IiwiZXF1YWwiLCJIaWRkZW4iLCJ2YWx1ZU9mIiwiZ2V0U2VjdGlvbnNGcm9tTWFuaWZlc3QiLCJtYW5pZmVzdFNlY3Rpb25zIiwic2VjdGlvbnMiLCJPYmplY3QiLCJrZXlzIiwibWFuaWZlc3RTZWN0aW9uS2V5IiwiZ2V0U2VjdGlvbkZyb21NYW5pZmVzdCIsImN1c3RvbVNlY3Rpb25EZWZpbml0aW9uIiwic2VjdGlvbktleSIsImN1c3RvbVNlY3Rpb25JRCIsIkN1c3RvbVNlY3Rpb25JRCIsInBvc2l0aW9uIiwicGxhY2VtZW50IiwiUGxhY2VtZW50IiwiQWZ0ZXIiLCJtYW5pZmVzdFN1YlNlY3Rpb25zIiwidW5kZWZpbmVkIiwiY3JlYXRlQ3VzdG9tU3ViU2VjdGlvbnMiLCJjdXN0b21TZWN0aW9uIiwiZ2V0SGVhZGVyQWN0aW9ucyIsImFBbm5vdGF0aW9uSGVhZGVyQWN0aW9ucyIsImdldEhlYWRlckRlZmF1bHRBY3Rpb25zIiwibWFuaWZlc3RXcmFwcGVyIiwiZ2V0TWFuaWZlc3RXcmFwcGVyIiwiaGVhZGVyQWN0aW9ucyIsImluc2VydEN1c3RvbUVsZW1lbnRzIiwiZ2V0QWN0aW9uc0Zyb21NYW5pZmVzdCIsImdldEhpZGRlbkhlYWRlckFjdGlvbnMiLCJpc05hdmlnYWJsZSIsImVuYWJsZWQiLCJkZWZhdWx0VmFsdWVzRXh0ZW5zaW9uRnVuY3Rpb24iLCJyZW1vdmVEdXBsaWNhdGVBY3Rpb25zIiwiZ2V0Rm9vdGVyQWN0aW9ucyIsImFBbm5vdGF0aW9uRm9vdGVyQWN0aW9ucyIsImdldEZvb3RlckRlZmF1bHRBY3Rpb25zIiwiZ2V0Vmlld0xldmVsIiwiZm9vdGVyQWN0aW9ucyIsImdldFNlY3Rpb25zIiwic3ViU2VjdGlvbiIsInR5cGUiLCJzaWRlQ29udGVudCIsImNvbnRlbnQiLCJhY3Rpb25zIiwiaGFzSGVhZGVyQ29udGVudCIsImdldEhlYWRlckZhY2V0cyIsImdldFNob3dIZWFkZXJDb250ZW50RXhwcmVzc2lvbiIsImlmRWxzZSIsImNvbnN0YW50IiwiaXNIZWFkZXJFZGl0YWJsZSIsImJpbmRpbmdFeHByZXNzaW9uIiwiZ2V0U2hvd0hlYWRlckNvbnRlbnQiLCJnZXRFeHBhbmRlZEltYWdlVmlzaWJsZSIsImNvbnZlcnRQYWdlIiwic2l0dWF0aW9uQW5ub3RhdGlvbnMiLCJGRSIsIlNpdHVhdGlvbnMiLCJnZXRIZWFkZXJGYWNldHNGcm9tQW5ub3RhdGlvbnMiLCJnZXRIZWFkZXJGYWNldHNGcm9tTWFuaWZlc3QiLCJIZWFkZXJJbmZvIiwidGVtcGxhdGUiLCJUZW1wbGF0ZVR5cGUiLCJPYmplY3RQYWdlIiwiaGVhZGVyIiwiZ2V0U2hvd09iamVjdFBhZ2VIZWFkZXIiLCJmYWNldHMiLCJzaG93Q29udGVudCIsImhhc0NvbnRlbnQiLCJhdmF0YXIiLCJnZXRBdmF0YXIiLCJleHBhbmRlZEltYWdlVmlzaWJsZSIsInNpdHVhdGlvbnMiLCJzaG93QW5jaG9yQmFyIiwiZ2V0U2hvd0FuY2hvckJhciIsInVzZUljb25UYWJCYXIiXSwibWFwcGluZ3MiOiI7QUFBQTtBQUNBO0FBQ0E7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7OztBQXNEQSxNQUFNQSxhQUFhLEdBQUcsVUFBQ0MsZUFBRCxFQUE4QkMsUUFBOUIsRUFBMkQ7QUFBQTs7QUFDaEYsV0FBTyx3QkFBQUQsZUFBZSxDQUFDRSxFQUFoQiw0RUFBb0JDLFFBQXBCLGlDQUFrQ0gsZUFBZSxDQUFDSSxLQUFsRCwwREFBa0Msc0JBQXVCRCxRQUF2QixFQUFsQyxLQUF1RUYsUUFBOUU7QUFDQSxHQUZEO0FBSUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7OztBQUNPLFdBQVNJLDJCQUFULENBQ05DLGdCQURNLEVBRU5DLGVBRk0sRUFHYztBQUFBOztBQUNwQixRQUFNQyx1QkFBdUIsR0FBR0MsdUJBQXVCLEVBQXZEO0FBQ0EsUUFBTUMsWUFBWSw0QkFBR0osZ0JBQWdCLENBQUNLLGFBQWpCLEdBQWlDQyxXQUFwQyxvRkFBRyxzQkFBOENDLEVBQWpELDJEQUFHLHVCQUFrREMsWUFBdkU7QUFDQSxRQUFNQyxzQkFBc0IsR0FBR0wsWUFBWSxHQUFHTSxpQkFBaUIsQ0FBQ04sWUFBRCxFQUFlSixnQkFBZixFQUFpQyxJQUFqQyxDQUFwQixHQUE2RCxFQUF4RztBQUNBLFFBQU1XLDRCQUE0QixHQUFH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aEJUO0FBaUJObUMsTUFBQUEsYUFBYSxFQUFFakQsZUFBZSxDQUFDa0QsZ0JBQWhCLEVBakJUO0FBa0JOQyxNQUFBQSxhQUFhLEVBQUVuRCxlQUFlLENBQUNtRCxhQUFoQjtBQWxCVCxLQUFQO0FBb0JBLEdBNUNNIiwic291cmNlUm9vdCI6Ii4iLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBGYWNldFR5cGVzIH0gZnJvbSBcIkBzYXAtdXgvdm9jYWJ1bGFyaWVzLXR5cGVzXCI7XG5pbXBvcnQgeyBNYW5pZmVzdFNlY3Rpb24sIE1hbmlmZXN0U3ViU2VjdGlvbiwgVGVtcGxhdGVUeXBlIH0gZnJvbSBcIi4uL01hbmlmZXN0U2V0dGluZ3NcIjtcbmltcG9ydCB7IFBhZ2VEZWZpbml0aW9uIH0gZnJvbSBcIi4uL1RlbXBsYXRlQ29udmVydGVyXCI7XG5pbXBvcnQgeyBFbnRpdHlUeXBlIH0gZnJvbSBcIkBzYXAtdXgvYW5ub3RhdGlvbi1jb252ZXJ0ZXJcIjtcbmltcG9ydCB7XG5cdGNyZWF0ZUN1c3RvbVN1YlNlY3Rpb25zLFxuXHRjcmVhdGVTdWJTZWN0aW9ucyxcblx0Y3JlYXRlQ3VzdG9tSGVhZGVyRmFjZXRTdWJTZWN0aW9ucyxcblx0Q3VzdG9tT2JqZWN0UGFnZVNlY3Rpb24sXG5cdE9iamVjdFBhZ2VTZWN0aW9uLFxuXHRPYmplY3RQYWdlU3ViU2VjdGlvbixcblx0Rm9ybVN1YlNlY3Rpb25cbn0gZnJvbSBcIi4uL2NvbnRyb2xzL09iamVjdFBhZ2UvU3ViU2VjdGlvblwiO1xuaW1wb3J0IHsgZ2V0SGVhZGVyRmFjZXRzRnJvbUFubm90YXRpb25zLCBnZXRIZWFkZXJGYWNldHNGcm9tTWFuaWZlc3QsIE9iamVjdFBhZ2VIZWFkZXJGYWNldCB9IGZyb20gXCIuLi9jb250cm9scy9PYmplY3RQYWdlL0hlYWRlckZhY2V0XCI7XG5pbXBvcnQgeyBDdXN0b21TZWN0aW9uSUQsIEVkaXRhYmxlSGVhZGVyU2VjdGlvbklELCBTZWN0aW9uSUQgfSBmcm9tIFwiLi4vaGVscGVycy9JRFwiO1xuaW1wb3J0IHsgQ29uZmlndXJhYmxlUmVjb3JkLCBpbnNlcnRDdXN0b21FbGVtZW50cywgUGxhY2VtZW50LCBQb3NpdGlvbiB9IGZyb20gXCIuLi9oZWxwZXJzL0NvbmZpZ3VyYWJsZU9iamVjdFwiO1xuaW1wb3J0IHsgQmFzZUFjdGlvbiwgZ2V0QWN0aW9uc0Zyb21NYW5pZmVzdCwgcmVtb3ZlRHVwbGljYXRlQWN0aW9ucyB9IGZyb20gXCJzYXAvZmUvY29yZS9jb252ZXJ0ZXJzL2NvbnRyb2xzL0NvbW1vbi9BY3Rpb25cIjtcbmltcG9ydCB7XG5cdGdldEhlYWRlckRlZmF1bHRBY3Rpb25zLFxuXHRnZXRGb290ZXJEZWZhdWx0QWN0aW9ucyxcblx0Z2V0SGlkZGVuSGVhZGVyQWN0aW9uc1xufSBmcm9tIFwic2FwL2ZlL2NvcmUvY29udmVydGVycy9vYmplY3RQYWdlL0hlYWRlckFuZEZvb3RlckFjdGlvblwiO1xuaW1wb3J0IHsgQXZhdGFyLCBnZXRBdmF0YXIgfSBmcm9tIFwiLi4vY29udHJvbHMvT2JqZWN0UGFnZS9BdmF0YXJcIjtcbmltcG9ydCB7XG5cdGFubm90YXRpb25FeHByZXNzaW9uLFxuXHRiaW5kaW5nRXhwcmVzc2lvbixcblx0Y29tcGlsZUJpbmRpbmcsXG5cdGVxdWFsLFxuXHRub3QsXG5cdGlmRWxzZSxcblx0Y29uc3RhbnQsXG5cdEJpbmRpbmdFeHByZXNzaW9uLFxuXHRFeHByZXNzaW9uXG59IGZyb20gXCJzYXAvZmUvY29yZS9oZWxwZXJzL0JpbmRpbmdFeHByZXNzaW9uXCI7XG5pbXBvcnQgQ29udmVydGVyQ29udGV4dCBmcm9tIFwiLi4vQ29udmVydGVyQ29udGV4dFwiO1xuXG5leHBvcnQgdHlwZSBPYmplY3RQYWdlRGVmaW5pdGlvbiA9IFBhZ2VEZWZpbml0aW9uICYge1xuXHRoZWFkZXI6IHtcblx0XHR2aXNpYmxlOiBib29sZWFuO1xuXHRcdHNlY3Rpb24/OiBPYmplY3RQYWdlU2VjdGlvbjtcblx0XHRmYWNldHM6IE9iamVjdFBhZ2VIZWFkZXJGYWNldFtdO1xuXHRcdGFjdGlvbnM6IEJhc2VBY3Rpb25bXTtcblx0XHRzaG93Q29udGVudDogQmluZGluZ0V4cHJlc3Npb248Ym9vbGVhbj47XG5cdFx0aGFzQ29udGVudDogYm9vbGVhbjtcblx0XHRhdmF0YXI/OiBBdmF0YXI7XG5cdFx0dGl0bGU6IHtcblx0XHRcdGV4cGFuZGVkSW1hZ2VWaXNpYmxlOiBCaW5kaW5nRXhwcmVzc2lvbjxzdHJpbmc+O1xuXHRcdH07XG5cdFx0c2l0dWF0aW9uczogYm9vbGVhbjtcblx0fTtcblx0c2VjdGlvbnM6IE9iamVjdFBhZ2VTZWN0aW9uW107XG5cdGZvb3RlckFjdGlvbnM6IEJhc2VBY3Rpb25bXTtcblx0c2hvd0FuY2hvckJhcjogYm9vbGVhbjtcblx0dXNlSWNvblRhYkJhcjogYm9vbGVhbjtcbn07XG5cbmNvbnN0IGdldFNlY3Rpb25LZXkgPSAoZmFjZXREZWZpbml0aW9uOiBGYWNldFR5cGVzLCBmYWxsYmFjazogc3RyaW5nKTogc3RyaW5nID0+IHtcblx0cmV0dXJuIGZhY2V0RGVmaW5pdGlvbi5JRD8udG9TdHJpbmcoKSB8fCBmYWNldERlZmluaXRpb24uTGFiZWw/LnRvU3RyaW5nKCkgfHwgZmFsbGJhY2s7XG59O1xuXG4vKipcbiAqIENyZWF0ZXMgYSBzZWN0aW9uIHRoYXQgcmVwcmVzZW50cyB0aGUgZWRpdGFibGUgaGVhZGVyIHBhcnQ7IGl0IGlzIG9ubHkgdmlzaWJsZSBpbiBlZGl0IG1vZGUuXG4gKlxuICogQHBhcmFtIGNvbnZlcnRlckNvbnRleHQgVGhlIGNvbnZlcnRlciBjb250ZXh0XG4gKiBAcGFyYW0gYWxsSGVhZGVyRmFjZXRzIFRoZSBjb252ZXJ0ZXIgY29udGV4dFxuICogQHJldHVybnMge09iamVjdFBhZ2VTZWN0aW9ufSBUaGUgc2VjdGlvbiByZXByZXNlbnRpbmcgdGhlIGVkaXRhYmxlIGhlYWRlciBwYXJ0c1xuICovXG5leHBvcnQgZnVuY3Rpb24gY3JlYXRlRWRpdGFibGVIZWFkZXJTZWN0aW9uKFxuXHRjb252ZXJ0ZXJDb250ZXh0OiBDb252ZXJ0ZXJDb250ZXh0LFxuXHRhbGxIZWFkZXJGYWNldHM6IE9iamVjdFBhZ2VIZWFkZXJGYWNldFtdXG4pOiBPYmplY3RQYWdlU2VjdGlvbiB7XG5cdGNvbnN0IGVkaXRhYmxlSGVhZGVyU2VjdGlvbklEID0gRWRpdGFibGVIZWFkZXJTZWN0aW9uSUQoKTtcblx0Y29uc3QgaGVhZGVyRmFjZXRzID0gY29udmVydGVyQ29udGV4dC5nZXRFbnRpdHlUeXBlKCkuYW5ub3RhdGlvbnM/LlVJPy5IZWFkZXJGYWNldHM7XG5cdGNvbnN0IGhlYWRlcmZhY2V0U3ViU2VjdGlvbnMgPSBoZWFkZXJGYWNldHMgPyBjcmVhdGVTdWJTZWN0aW9ucyhoZWFkZXJGYWNldHMsIGNvbnZlcnRlckNvbnRleHQsIHRydWUpIDogW107XG5cdGNvbnN0IGN1c3RvbUhlYWRlckZhY2V0U3ViU2VjdGlvbnMgPSBjcmVhdGVDdXN0b21IZWFkZXJGYWNldFN1YlNlY3Rpb25zKGNvbnZlcnRlckNvbnRleHQpO1xuXHRsZXQgYWxsSGVhZGVyRmFjZXRzU3ViU2VjdGlvbnM6IE9iamVjdFBhZ2VTdWJTZWN0aW9uW10gPSBbXTtcblx0aWYgKGN1c3RvbUhlYWRlckZhY2V0U3ViU2VjdGlvbnMubGVuZ3RoID4gMCkge1xuXHRcdC8vIG1lcmdlIGFubm90YXRpb24gYmFzZWQgaGVhZGVyIGZhY2V0cyBhbmQgY3VzdG9tIGhlYWRlciBmYWNldHMgaW4gdGhlIHJpZ2h0IG9yZGVyXG5cdFx0bGV0IGkgPSAwO1xuXHRcdGFsbEhlYWRlckZhY2V0cy5mb3JFYWNoKGZ1bmN0aW9uKGl0ZW0pIHtcblx0XHRcdC8vIGhpZGRlbiBoZWFkZXIgZmFjZXRzIGFyZSBub3QgaW5jbHVkZWQgaW4gYWxsSGVhZGVyRmFjZXRzIGFycmF5ID0+IGFkZCB0aGVtIGFueXdheVxuXHRcdFx0d2hpbGUgKGhlYWRlcmZhY2V0U3ViU2VjdGlvbnMubGVuZ3RoID4gaSAmJiBoZWFkZXJmYWNldFN1YlNlY3Rpb25zW2ldLnZpc2libGUgPT09IFwiZmFsc2VcIikge1xuXHRcdFx0XHRhbGxIZWFkZXJGYWNldHNTdWJTZWN0aW9ucy5wdXNoKGhlYWRlcmZhY2V0U3ViU2VjdGlvbnNbaV0pO1xuXHRcdFx0XHRpKys7XG5cdFx0XHR9XG5cdFx0XHRpZiAoXG5cdFx0XHRcdGhlYWRlcmZhY2V0U3ViU2VjdGlvbnMubGVuZ3RoID4gaSAmJlxuXHRcdFx0XHQoaXRlbS5rZXkgPT09IGhlYWRlcmZhY2V0U3ViU2VjdGlvbnNbaV0ua2V5IHx8XG5cdFx0XHRcdFx0Ly8gZm9yIGhlYWRlciBmYWNldHMgd2l0aCBubyBpZCB0aGUga2V5cyBvZiBoZWFkZXIgZmFjZXQgYW5kIHN1YnNlY3Rpb24gYXJlIGRpZmZlcmVudCA9PiBjaGVjayBvbmx5IHRoZSBsYXN0IHBhcnRcblx0XHRcdFx0XHRpdGVtLmtleS5zbGljZShpdGVtLmtleS5sYXN0SW5kZXhPZihcIjo6XCIpICsgMikgPT09XG5cdFx0XHRcdFx0XHRoZWFkZXJmYWNldFN1YlNlY3Rpb25zW2ldLmtleS5zbGljZShoZWFkZXJmYWNldFN1YlNlY3Rpb25zW2ldLmtleS5sYXN0SW5kZXhPZihcIjo6XCIpICsgMikpXG5cdFx0XHQpIHtcblx0XHRcdFx0YWxsSGVhZGVyRmFjZXRzU3ViU2VjdGlvbnMucHVzaChoZWFkZXJmYWNldFN1YlNlY3Rpb25zW2ldKTtcblx0XHRcdFx0aSsrO1xuXHRcdFx0fSBlbHNlIHtcblx0XHRcdFx0Y3VzdG9tSGVhZGVyRmFjZXRTdWJTZWN0aW9ucy5mb3JFYWNoKGZ1bmN0aW9uKGN1c3RvbUl0ZW0pIHtcblx0XHRcdFx0XHRpZiAoaXRlbS5rZXkgPT09IGN1c3RvbUl0ZW0ua2V5KSB7XG5cdFx0XHRcdFx0XHRhbGxIZWFkZXJGYWNldHNTdWJTZWN0aW9ucy5wdXNoKGN1c3RvbUl0ZW0pO1xuXHRcdFx0XHRcdH1cblx0XHRcdFx0fSk7XG5cdFx0XHR9XG5cdFx0fSk7XG5cdH0gZWxzZSB7XG5cdFx0YWxsSGVhZGVyRmFjZXRzU3ViU2VjdGlvbnMgPSBoZWFkZXJmYWNldFN1YlNlY3Rpb25zO1xuXHR9XG5cdGNvbnN0IGhlYWRlclNlY3Rpb246IE9iamVjdFBhZ2VTZWN0aW9uID0ge1xuXHRcdGlkOiBlZGl0YWJsZUhlYWRlclNlY3Rpb25JRCxcblx0XHRrZXk6IFwiRWRpdGFibGVIZWFkZXJDb250ZW50XCIsXG5cdFx0dGl0bGU6IFwie3NhcC5mZS5pMThuPlRfQ09NTU9OX09CSkVDVF9QQUdFX0hFQURFUl9TRUNUSU9OfVwiLFxuXHRcdHZpc2libGU6IFwiez0gJHt1aT4vZWRpdE1vZGV9ID09PSAnRWRpdGFibGUnIH1cIixcblx0XHRzdWJTZWN0aW9uczogYWxsSGVhZGVyRmFjZXRzU3ViU2VjdGlvbnNcblx0fTtcblx0cmV0dXJuIGhlYWRlclNlY3Rpb247XG59XG5cbi8qKlxuICogQ3JlYXRlcyBhIGRlZmluaXRpb24gZm9yIGEgc2VjdGlvbiBiYXNlZCBvbiB0aGUgRmFjZXQgYW5ub3RhdGlvbi5cbiAqXG4gKiBAcGFyYW0gY29udmVydGVyQ29udGV4dCBUaGUgY29udmVydGVyIGNvbnRleHRcbiAqIEByZXR1cm5zIHtPYmplY3RQYWdlU2VjdGlvbltdfSBBbGwgc2VjdGlvbnNcbiAqL1xuZnVuY3Rpb24gZ2V0U2VjdGlvbnNGcm9tQW5ub3RhdGlvbihjb252ZXJ0ZXJDb250ZXh0OiBDb252ZXJ0ZXJDb250ZXh0KTogT2JqZWN0UGFnZVNlY3Rpb25bXSB7XG5cdGNvbnN0IGVudGl0eVR5cGUgPSBjb252ZXJ0ZXJDb250ZXh0LmdldEVudGl0eVR5cGUoKTtcblx0Y29uc3Qgb2JqZWN0UGFnZVNlY3Rpb25zOiBPYmplY3RQYWdlU2VjdGlvbltdID1cblx0XHRlbnRpdHlUeXBlLmFubm90YXRpb25zPy5VST8uRmFjZXRzPy5tYXAoKGZhY2V0RGVmaW5pdGlvbjogRmFjZXRUeXBlcykgPT5cblx0XHRcdGdldFNlY3Rpb25Gcm9tQW5ub3RhdGlvbihmYWNldERlZmluaXRpb24sIGNvbnZlcnRlckNvbnRleHQpXG5cdFx0KSB8fCBbXTtcblx0cmV0dXJuIG9iamVjdFBhZ2VTZWN0aW9ucztcbn1cblxuLyoqXG4gKiBDcmVhdGUgYW4gYW5ub3RhdGlvbiBiYXNlZCBzZWN0aW9uLlxuICpcbiAqIEBwYXJhbSBmYWNldFxuICogQHBhcmFtIGNvbnZlcnRlckNvbnRleHRcbiAqIEByZXR1cm5zIHtPYmplY3RQYWdlU2VjdGlvbn0gVGhlIGN1cnJlbnQgc2VjdGlvblxuICovXG5mdW5jdGlvbiBnZXRTZWN0aW9uRnJvbUFubm90YXRpb24oZmFjZXQ6IEZhY2V0VHlwZXMsIGNvbnZlcnRlckNvbnRleHQ6IENvbnZlcnRlckNvbnRleHQpOiBPYmplY3RQYWdlU2VjdGlvbiB7XG5cdGNvbnN0IHNlY3Rpb25JRCA9IFNlY3Rpb25JRCh7IEZhY2V0OiBmYWNldCB9KTtcblx0Y29uc3Qgc2VjdGlvbjogT2JqZWN0UGFnZVNlY3Rpb24gPSB7XG5cdFx0aWQ6IHNlY3Rpb25JRCxcblx0XHRrZXk6IGdldFNlY3Rpb25LZXkoZmFjZXQsIHNlY3Rpb25JRCksXG5cdFx0dGl0bGU6IGNvbXBpbGVCaW5kaW5nKGFubm90YXRpb25FeHByZXNzaW9uKGZhY2V0LkxhYmVsKSksXG5cdFx0c2hvd1RpdGxlOiAhIWZhY2V0LkxhYmVsLFxuXHRcdHZpc2libGU6IGNvbXBpbGVCaW5kaW5nKG5vdChlcXVhbChhbm5vdGF0aW9uRXhwcmVzc2lvbihmYWNldC5hbm5vdGF0aW9ucz8uVUk/LkhpZGRlbj8udmFsdWVPZigpKSwgdHJ1ZSkpKSxcblx0XHRzdWJTZWN0aW9uczogY3JlYXRlU3ViU2VjdGlvbnMoW2ZhY2V0XSwgY29udmVydGVyQ29udGV4dClcblx0fTtcblx0cmV0dXJuIHNlY3Rpb247XG59XG5cbi8qKlxuICogQ3JlYXRlcyBzZWN0aW9uIGRlZmluaXRpb24gYmFzZWQgb24gbWFuaWZlc3QgZGVmaW5pdGlvbi5cbiAqIEBwYXJhbSBtYW5pZmVzdFNlY3Rpb25zIFRoZSBtYW5pZmVzdCBkZWZpbmVkIHNlY3Rpb25zXG4gKiBAcGFyYW0gY29udmVydGVyQ29udGV4dFxuICogQHJldHVybnMge1JlY29yZDxzdHJpbmcsIEN1c3RvbU9iamVjdFBhZ2VTZWN0aW9uPn0gVGhlIG1hbmlmZXN0IGRlZmluZWQgc2VjdGlvbnNcbiAqL1xuZnVuY3Rpb24gZ2V0U2VjdGlvbnNGcm9tTWFuaWZlc3QoXG5cdG1hbmlmZXN0U2VjdGlvbnM6IENvbmZpZ3VyYWJsZVJlY29yZDxNYW5pZmVzdFNlY3Rpb24+LFxuXHRjb252ZXJ0ZXJDb250ZXh0OiBDb252ZXJ0ZXJDb250ZXh0XG4pOiBSZWNvcmQ8c3RyaW5nLCBDdXN0b21PYmplY3RQYWdlU2VjdGlvbj4ge1xuXHRjb25zdCBzZWN0aW9uczogUmVjb3JkPHN0cmluZywgQ3VzdG9tT2JqZWN0UGFnZVNlY3Rpb24+ID0ge307XG5cdE9iamVjdC5rZXlzKG1hbmlmZXN0U2VjdGlvbnMpLmZvckVhY2gobWFuaWZlc3RTZWN0aW9uS2V5ID0+IHtcblx0XHRzZWN0aW9uc1ttYW5pZmVzdFNlY3Rpb25LZXldID0gZ2V0U2VjdGlvbkZyb21NYW5pZmVzdChtYW5pZmVzdFNlY3Rpb25zW21hbmlmZXN0U2VjdGlvbktleV0sIG1hbmlmZXN0U2VjdGlvbktleSwgY29udmVydGVyQ29udGV4dCk7XG5cdH0pO1xuXHRyZXR1cm4gc2VjdGlvbnM7XG59XG5cbi8qKlxuICogQ3JlYXRlIGEgbWFuaWZlc3QgYmFzZWQgY3VzdG9tIHNlY3Rpb24uXG4gKiBAcGFyYW0gY3VzdG9tU2VjdGlvbkRlZmluaXRpb25cbiAqIEBwYXJhbSBzZWN0aW9uS2V5XG4gKiBAcGFyYW0gY29udmVydGVyQ29udGV4dFxuICogQHJldHVybnMge0N1c3RvbU9iamVjdFBhZ2VTZWN0aW9ufSBUaGUgY3VycmVudCBjdXN0b20gc2VjdGlvblxuICovXG5mdW5jdGlvbiBnZXRTZWN0aW9uRnJvbU1hbmlmZXN0KFxuXHRjdXN0b21TZWN0aW9uRGVmaW5pdGlvbjogTWFuaWZlc3RTZWN0aW9uLFxuXHRzZWN0aW9uS2V5OiBzdHJpbmcsXG5cdGNvbnZlcnRlckNvbnRleHQ6IENvbnZlcnRlckNvbnRleHRcbik6IEN1c3RvbU9iamVjdFBhZ2VTZWN0aW9uIHtcblx0Y29uc3QgY3VzdG9tU2VjdGlvbklEID0gY3VzdG9tU2VjdGlvbkRlZmluaXRpb24uaWQgfHwgQ3VzdG9tU2VjdGlvbklEKHNlY3Rpb25LZXkpO1xuXHRsZXQgcG9zaXRpb246IFBvc2l0aW9uIHwgdW5kZWZpbmVkID0gY3VzdG9tU2VjdGlvbkRlZmluaXRpb24ucG9zaXRpb247XG5cdGlmICghcG9zaXRpb24pIHtcblx0XHRwb3NpdGlvbiA9IHtcblx0XHRcdHBsYWNlbWVudDogUGxhY2VtZW50LkFmdGVyXG5cdFx0fTtcblx0fVxuXHRsZXQgbWFuaWZlc3RTdWJTZWN0aW9uczogUmVjb3JkPHN0cmluZywgTWFuaWZlc3RTdWJTZWN0aW9uPjtcblx0aWYgKCFjdXN0b21TZWN0aW9uRGVmaW5pdGlvbi5zdWJTZWN0aW9ucykge1xuXHRcdC8vIElmIHRoZXJlIGlzIG5vIHN1YlNlY3Rpb24gZGVmaW5lZCwgd2UgYWRkIHRoZSBjb250ZW50IG9mIHRoZSBjdXN0b20gc2VjdGlvbiBhcyBzdWJzZWN0aW9uc1xuXHRcdC8vIGFuZCBtYWtlIHN1cmUgdG8gc2V0IHRoZSB2aXNpYmlsaXR5IHRvICd0cnVlJywgYXMgdGhlIGFjdHVhbCB2aXNpYmlsaXR5IGlzIGhhbmRsZWQgYnkgdGhlIHNlY3Rpb24gaXRzZWxmXG5cdFx0bWFuaWZlc3RTdWJTZWN0aW9ucyA9IHtcblx0XHRcdFtzZWN0aW9uS2V5XToge1xuXHRcdFx0XHQuLi5jdXN0b21TZWN0aW9uRGVmaW5pdGlvbixcblx0XHRcdFx0cG9zaXRpb246IHVuZGVmaW5lZCxcblx0XHRcdFx0dmlzaWJsZTogdHJ1ZVxuXHRcdFx0fVxuXHRcdH07XG5cdH0gZWxzZSB7XG5cdFx0bWFuaWZlc3RTdWJTZWN0aW9ucyA9IGN1c3RvbVNlY3Rpb25EZWZpbml0aW9uLnN1YlNlY3Rpb25zO1xuXHR9XG5cdGNvbnN0IHN1YlNlY3Rpb25zID0gY3JlYXRlQ3VzdG9tU3ViU2VjdGlvbnMobWFuaWZlc3RTdWJTZWN0aW9ucywgY29udmVydGVyQ29udGV4dCk7XG5cblx0Y29uc3QgY3VzdG9tU2VjdGlvbjogQ3VzdG9tT2JqZWN0UGFnZVNlY3Rpb24gPSB7XG5cdFx0aWQ6IGN1c3RvbVNlY3Rpb25JRCxcblx0XHRrZXk6IHNlY3Rpb25LZXksXG5cdFx0dGl0bGU6IGN1c3RvbVNlY3Rpb25EZWZpbml0aW9uLnRpdGxlLFxuXHRcdHNob3dUaXRsZTogISFjdXN0b21TZWN0aW9uRGVmaW5pdGlvbi50aXRsZSxcblx0XHR2aXNpYmxlOiBjdXN0b21TZWN0aW9uRGVmaW5pdGlvbi52aXNpYmxlICE9PSB1bmRlZmluZWQgPyBjdXN0b21TZWN0aW9uRGVmaW5pdGlvbi52aXNpYmxlIDogdHJ1ZSxcblx0XHRwb3NpdGlvbjogcG9zaXRpb24sXG5cdFx0c3ViU2VjdGlvbnM6IHN1YlNlY3Rpb25zIGFzIGFueVxuXHR9O1xuXHRyZXR1cm4gY3VzdG9tU2VjdGlvbjtcbn1cblxuLyoqXG4gKiBSZXRyaWV2ZXMgdGhlIE9iamVjdFBhZ2UgaGVhZGVyIGFjdGlvbnMgKGJvdGggdGhlIGRlZmF1bHQgb25lcyBhbmQgdGhlIGN1c3RvbSBvbmVzIGRlZmluZWQgaW4gdGhlIG1hbmlmZXN0KS5cbiAqXG4gKiBAcGFyYW0ge0NvbnZlcnRlckNvbnRleHR9IGNvbnZlcnRlckNvbnRleHQgVGhlIGNvbnZlcnRlciBjb250ZXh0XG4gKiBAcmV0dXJucyBBbiBhcnJheSBjb250YWluaW5nIGFsbCB0aGUgYWN0aW9ucyBmb3IgdGhpcyBPYmplY3RQYWdlIGhlYWRlclxuICovXG5leHBvcnQgY29uc3QgZ2V0SGVhZGVyQWN0aW9ucyA9IGZ1bmN0aW9uKGNvbnZlcnRlckNvbnRleHQ6IENvbnZlcnRlckNvbnRleHQpOiBCYXNlQWN0aW9uW10ge1xuXHRjb25zdCBhQW5ub3RhdGlvbkhlYWRlckFjdGlvbnM6IEJhc2VBY3Rpb25bXSA9IGdldEhlYWRlckRlZmF1bHRBY3Rpb25zKGNvbnZlcnRlckNvbnRleHQpO1xuXHRjb25zdCBtYW5pZmVzdFdyYXBwZXIgPSBjb252ZXJ0ZXJDb250ZXh0LmdldE1hbmlmZXN0V3JhcHBlcigpO1xuXHRjb25zdCBoZWFkZXJBY3Rpb25zID0gaW5zZXJ0Q3VzdG9tRWxlbWVudHMoXG5cdFx0YUFubm90YXRpb25IZWFkZXJBY3Rpb25zLFxuXHRcdGdldEFjdGlvbnNGcm9tTWFuaWZlc3QoXG5cdFx0XHRtYW5pZmVzdFdyYXBwZXIuZ2V0SGVhZGVyQWN0aW9ucygpLFxuXHRcdFx0Y29udmVydGVyQ29udGV4dCxcblx0XHRcdGFBbm5vdGF0aW9uSGVhZGVyQWN0aW9ucyxcblx0XHRcdHVuZGVmaW5lZCxcblx0XHRcdHVuZGVmaW5lZCxcblx0XHRcdGdldEhpZGRlbkhlYWRlckFjdGlvbnMoY29udmVydGVyQ29udGV4dClcblx0XHQpLFxuXHRcdHsgaXNOYXZpZ2FibGU6IFwib3ZlcndyaXRlXCIsIGVuYWJsZWQ6IFwib3ZlcndyaXRlXCIsIGRlZmF1bHRWYWx1ZXNFeHRlbnNpb25GdW5jdGlvbjogXCJvdmVyd3JpdGVcIiB9XG5cdCk7XG5cdHJldHVybiByZW1vdmVEdXBsaWNhdGVBY3Rpb25zKGhlYWRlckFjdGlvbnMpO1xufTtcblxuLyoqXG4gKiBSZXRyaWV2ZXMgdGhlIE9iamVjdFBhZ2UgZm9vdGVyIGFjdGlvbnMgKGJvdGggdGhlIGRlZmF1bHQgb25lcyBhbmQgdGhlIGN1c3RvbSBvbmVzIGRlZmluZWQgaW4gdGhlIG1hbmlmZXN0KS5cbiAqXG4gKiBAcGFyYW0ge0NvbnZlcnRlckNvbnRleHR9IGNvbnZlcnRlckNvbnRleHQgVGhlIGNvbnZlcnRlciBjb250ZXh0XG4gKiBAcmV0dXJucyBBbiBhcnJheSBjb250YWluaW5nIGFsbCB0aGUgYWN0aW9ucyBmb3IgdGhpcyBPYmplY3RQYWdlIGZvb3RlclxuICovXG5leHBvcnQgY29uc3QgZ2V0Rm9vdGVyQWN0aW9ucyA9IGZ1bmN0aW9uKGNvbnZlcnRlckNvbnRleHQ6IENvbnZlcnRlckNvbnRleHQpOiBCYXNlQWN0aW9uW10ge1xuXHRjb25zdCBtYW5pZmVzdFdyYXBwZXIgPSBjb252ZXJ0ZXJDb250ZXh0LmdldE1hbmlmZXN0V3JhcHBlcigpO1xuXHRjb25zdCBhQW5ub3RhdGlvbkZvb3RlckFjdGlvbnM6IEJhc2VBY3Rpb25bXSA9IGdldEZvb3RlckRlZmF1bHRBY3Rpb25zKG1hbmlmZXN0V3JhcHBlci5nZXRWaWV3TGV2ZWwoKSwgY29udmVydGVyQ29udGV4dCk7XG5cdGNvbnN0IGZvb3RlckFjdGlvbnMgPSBpbnNlcnRDdXN0b21FbGVtZW50cyhcblx0XHRhQW5ub3RhdGlvbkZvb3RlckFjdGlvbnMsXG5cdFx0Z2V0QWN0aW9uc0Zyb21NYW5pZmVzdChtYW5pZmVzdFdyYXBwZXIuZ2V0Rm9vdGVyQWN0aW9ucygpLCBjb252ZXJ0ZXJDb250ZXh0LCBhQW5ub3RhdGlvbkZvb3RlckFjdGlvbnMpLFxuXHRcdHsgaXNOYXZpZ2FibGU6IFwib3ZlcndyaXRlXCIsIGVuYWJsZWQ6IFwib3ZlcndyaXRlXCIsIGRlZmF1bHRWYWx1ZXNFeHRlbnNpb25GdW5jdGlvbjogXCJvdmVyd3JpdGVcIiB9XG5cdCk7XG5cdHJldHVybiBmb290ZXJBY3Rpb25zO1xufTtcblxuLyoqXG4gKiBSZXRyaWV2ZXMgYW5kIG1lcmdlcyB0aGUgT2JqZWN0UGFnZSBzZWN0aW9ucyBkZWZpbmVkIGluIHRoZSBhbm5vdGF0aW9uIGFuZCBpbiB0aGUgbWFuaWZlc3QuXG4gKlxuICogQHBhcmFtIHtDb252ZXJ0ZXJDb250ZXh0fSBjb252ZXJ0ZXJDb250ZXh0IFRoZSBjb252ZXJ0ZXIgY29udGV4dFxuICogQHJldHVybnMgQW4gYXJyYXkgb2Ygc2VjdGlvbnMuXG4gKi9cbmV4cG9ydCBjb25zdCBnZXRTZWN0aW9ucyA9IGZ1bmN0aW9uKGNvbnZlcnRlckNvbnRleHQ6IENvbnZlcnRlckNvbnRleHQpOiBPYmplY3RQYWdlU2VjdGlvbltdIHtcblx0Y29uc3QgbWFuaWZlc3RXcmFwcGVyID0gY29udmVydGVyQ29udGV4dC5nZXRNYW5pZmVzdFdyYXBwZXIoKTtcblx0Y29uc3Qgc2VjdGlvbnMgPSBpbnNlcnRDdXN0b21FbGVtZW50cyhcblx0XHRnZXRTZWN0aW9uc0Zyb21Bbm5vdGF0aW9uKGNvbnZlcnRlckNvbnRleHQpLFxuXHRcdGdldFNlY3Rpb25zRnJvbU1hbmlmZXN0KG1hbmlmZXN0V3JhcHBlci5nZXRTZWN0aW9ucygpLCBjb252ZXJ0ZXJDb250ZXh0KSxcblx0XHR7XG5cdFx0XHRcInRpdGxlXCI6IFwib3ZlcndyaXRlXCIsXG5cdFx0XHRcInZpc2libGVcIjogXCJvdmVyd3JpdGVcIixcblx0XHRcdFwic3ViU2VjdGlvbnNcIjoge1xuXHRcdFx0XHRcImFjdGlvbnNcIjogXCJtZXJnZVwiLFxuXHRcdFx0XHRcInRpdGxlXCI6IFwib3ZlcndyaXRlXCIsXG5cdFx0XHRcdFwic2lkZUNvbnRlbnRcIjogXCJvdmVyd3JpdGVcIlxuXHRcdFx0fVxuXHRcdH1cblx0KTtcblx0Ly8gTGV2ZWwgQWRqdXN0bWVudCBmb3IgXCJNaXhlZFwiIENvbGxlY3Rpb24gRmFjZXRzOlxuXHQvLyA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XG5cdC8vIFRoZSBtYW5pZmVzdCBkZWZpbml0aW9uIG9mIGN1c3RvbSBzaWRlIGNvbnRlbnRzIGFuZCBhY3Rpb25zIHN0aWxsIG5lZWRzIHRvIGJlIGFsaWduZWQgZm9yIFwiTWl4ZWRcIiBjb2xsZWN0aW9uIGZhY2V0czpcblx0Ly8gQ29sbGVjdGlvbiBmYWNldHMgY29udGFpbmluZyB0YWJsZXMgZ2FpbiBhbiBleHRyYSByZWZlcmVuY2UgZmFjZXQgYXMgYSB0YWJsZSB3cmFwcGVyIHRvIGVuc3VyZSwgdGhhdCB0aGUgdGFibGUgaXMgYWx3YXlzXG5cdC8vIHBsYWNlZCBpbiBhbiBvd24gaW5kaXZpZHVhbCBPYmplY3QgUGFnZSBCbG9jazsgdGhpcyBhZGRpdGlvbmFsIGhpZXJhcmNoeSBsZXZlbCBpcyB1bmtub3duIHRvIGFwcCBkZXZlbG9wZXJzLCB3aGljaCBhcmVcblx0Ly8gZGVmaW5pbmcgdGhlIHNpZGUgY29udGVudCBhbmQgYWN0aW9ucyBpbiB0aGUgbWFuaWZlc3QgYXQgY29sbGVjdGlvbiBmYWNldCBsZXZlbDsgbm93LCBzaW5jZSB0aGUgc2lkZUNvbnRlbnQgYWx3YXlzIG5lZWRzXG5cdC8vIHRvIGJlIGFzc2lnbmVkIHRvIGEgYmxvY2ssIHdlIG5lZWQgdG8gbW92ZSB0aGUgc2lkZUNvbnRlbnQgb2YgZnJvbSBhIG1peGVkIGNvbGxlY3Rpb24gZmFjZXQgdG8gaXRzIGZpcnN0IGNoaWxkIHJlZmVyZW5jZSBmYWNldC5cblx0Ly8gPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxuXHRzZWN0aW9ucy5mb3JFYWNoKGZ1bmN0aW9uKHNlY3Rpb24pIHtcblx0XHRzZWN0aW9uLnN1YlNlY3Rpb25zPy5mb3JFYWNoKGZ1bmN0aW9uKHN1YlNlY3Rpb24pIHtcblx0XHRcdGlmIChzdWJTZWN0aW9uLnR5cGUgPT09IFwiTWl4ZWRcIiAmJiBzdWJTZWN0aW9uLnNpZGVDb250ZW50ICE9IHVuZGVmaW5lZCAmJiBzdWJTZWN0aW9uLmNvbnRlbnQgJiYgc3ViU2VjdGlvbi5jb250ZW50Lmxlbmd0aCA+IDApIHtcblx0XHRcdFx0Ly8gMS4gQ29weSBzaWRlQ29udGVudCAvIGFjdGlvbnMgdG8gdGhlIFN1YlNlY3Rpb24ncyBjb250ZW50XG5cdFx0XHRcdC8vIDIuIERlbGV0ZSBzaWRlQ29udGVudCAvIGFjdGlvbnMgYXQgdGhlIChpbnZhbGlkKSBtYW5pZmVzdCBsZXZlbFxuXHRcdFx0XHRpZiAoKHN1YlNlY3Rpb24gYXMgRm9ybVN1YlNlY3Rpb24pLnNpZGVDb250ZW50KSB7XG5cdFx0XHRcdFx0c3ViU2VjdGlvbi5jb250ZW50WzBdLnNpZGVDb250ZW50ID0gc3ViU2VjdGlvbi5zaWRlQ29udGVudDtcblx0XHRcdFx0XHRzdWJTZWN0aW9uLnNpZGVDb250ZW50ID0gdW5kZWZpbmVkO1xuXHRcdFx0XHR9XG5cdFx0XHRcdGlmICgoc3ViU2VjdGlvbiBhcyBGb3JtU3ViU2VjdGlvbikuYWN0aW9ucy5sZW5ndGggPiAwKSB7XG5cdFx0XHRcdFx0KHN1YlNlY3Rpb24uY29udGVudFswXSBhcyBGb3JtU3ViU2VjdGlvbikuYWN0aW9ucyA9IChzdWJTZWN0aW9uIGFzIEZvcm1TdWJTZWN0aW9uKS5hY3Rpb25zO1xuXHRcdFx0XHRcdChzdWJTZWN0aW9uIGFzIEZvcm1TdWJTZWN0aW9uKS5hY3Rpb25zID0gW107XG5cdFx0XHRcdH1cblx0XHRcdH1cblx0XHR9KTtcblx0fSk7XG5cdHJldHVybiBzZWN0aW9ucztcbn07XG5cbi8qKlxuICogRGV0ZXJtaW5lcyBpZiB0aGUgT2JqZWN0UGFnZSBoYXMgaGVhZGVyIGNvbnRlbnQuXG4gKlxuICogQHBhcmFtIGNvbnZlcnRlckNvbnRleHQgVGhlIGluc3RhbmNlIG9mIHRoZSBjb252ZXJ0ZXIgY29udGV4dFxuICogQHJldHVybnMge2Jvb2xlYW59IGB0cnVlYCBpZiB0aGVyZSBpcyBhdCBsZWFzdCBvbiBoZWFkZXIgZmFjZXRcbiAqL1xuZnVuY3Rpb24gaGFzSGVhZGVyQ29udGVudChjb252ZXJ0ZXJDb250ZXh0OiBDb252ZXJ0ZXJDb250ZXh0KTogYm9vbGVhbiB7XG5cdGNvbnN0IG1hbmlmZXN0V3JhcHBlciA9IGNvbnZlcnRlckNvbnRleHQuZ2V0TWFuaWZlc3RXcmFwcGVyKCk7XG5cdHJldHVybiAoXG5cdFx0KGNvbnZlcnRlckNvbnRleHQuZ2V0RW50aXR5VHlwZSgpLmFubm90YXRpb25zPy5VST8uSGVhZGVyRmFjZXRzIHx8IFtdKS5sZW5ndGggPiAwIHx8XG5cdFx0T2JqZWN0LmtleXMobWFuaWZlc3RXcmFwcGVyLmdldEhlYWRlckZhY2V0cygpKS5sZW5ndGggPiAwXG5cdCk7XG59XG5cbi8qKlxuICogR2V0cyB0aGUgZXhwcmVzc2lvbiB0byBldmFsdWF0ZSB0aGUgdmlzaWJpbGl0eSBvZiB0aGUgaGVhZGVyIGNvbnRlbnQuXG4gKlxuICogQHBhcmFtIGNvbnZlcnRlckNvbnRleHQgVGhlIGluc3RhbmNlIG9mIHRoZSBjb252ZXJ0ZXIgY29udGV4dFxuICogQHJldHVybnMge0JpbmRpbmdFeHByZXNzaW9uPGJvb2xlYW4+fSBUaGUgYmluZGluZyBleHByZXNzaW9uIGZvciB0aGUgRGVsZXRlIGJ1dHRvblxuICovXG5mdW5jdGlvbiBnZXRTaG93SGVhZGVyQ29udGVudEV4cHJlc3Npb24oY29udmVydGVyQ29udGV4dDogQ29udmVydGVyQ29udGV4dCk6IEV4cHJlc3Npb248YW55PiB7XG5cdGNvbnN0IG1hbmlmZXN0V3JhcHBlciA9IGNvbnZlcnRlckNvbnRleHQuZ2V0TWFuaWZlc3RXcmFwcGVyKCk7XG5cdHJldHVybiBpZkVsc2UoXG5cdFx0IWhhc0hlYWRlckNvbnRlbnQoY29udmVydGVyQ29udGV4dCksXG5cdFx0Y29uc3RhbnQoZmFsc2UpLFxuXHRcdGlmRWxzZShcblx0XHRcdGVxdWFsKG1hbmlmZXN0V3JhcHBlci5pc0hlYWRlckVkaXRhYmxlKCksIGZhbHNlKSxcblx0XHRcdGNvbnN0YW50KHRydWUpLFxuXHRcdFx0bm90KGVxdWFsKGJpbmRpbmdFeHByZXNzaW9uKFwiL2VkaXRNb2RlXCIsIFwidWlcIiksIFwiRWRpdGFibGVcIikpXG5cdFx0KVxuXHQpO1xufVxuXG4vKipcbiAqIEdldHMgdGhlIGJpbmRpbmcgZXhwcmVzc2lvbiB0byBldmFsdWF0ZSB0aGUgdmlzaWJpbGl0eSBvZiB0aGUgaGVhZGVyIGNvbnRlbnQuXG4gKlxuICogQHBhcmFtIGNvbnZlcnRlckNvbnRleHQgVGhlIGluc3RhbmNlIG9mIHRoZSBjb252ZXJ0ZXIgY29udGV4dFxuICogQHJldHVybnMge0JpbmRpbmdFeHByZXNzaW9uPGJvb2xlYW4+fSBUaGUgYmluZGluZyBleHByZXNzaW9uIGZvciB0aGUgRGVsZXRlIGJ1dHRvblxuICovXG5leHBvcnQgY29uc3QgZ2V0U2hvd0hlYWRlckNvbnRlbnQgPSBmdW5jdGlvbihjb252ZXJ0ZXJDb250ZXh0OiBDb252ZXJ0ZXJDb250ZXh0KTogQmluZGluZ0V4cHJlc3Npb248Ym9vbGVhbj4ge1xuXHRyZXR1cm4gY29tcGlsZUJpbmRpbmcoZ2V0U2hvd0hlYWRlckNvbnRlbnRFeHByZXNzaW9uKGNvbnZlcnRlckNvbnRleHQpKTtcbn07XG5cbi8qKlxuICogR2V0cyB0aGUgYmluZGluZyBleHByZXNzaW9uIHRvIGV2YWx1YXRlIHRoZSB2aXNpYmlsaXR5IG9mIHRoZSBhdmF0YXIgd2hlbiB0aGUgaGVhZGVyIGlzIGluIGV4cGFuZGVkIHN0YXRlLlxuICpcbiAqIEBwYXJhbSBjb252ZXJ0ZXJDb250ZXh0IFRoZSBpbnN0YW5jZSBvZiB0aGUgY29udmVydGVyIGNvbnRleHRcbiAqIEByZXR1cm5zIHtCaW5kaW5nRXhwcmVzc2lvbjxzdHJpbmc+fSBUaGUgYmluZGluZyBleHByZXNzaW9uIGZvciB0aGUgRGVsZXRlIGJ1dHRvblxuICovXG5leHBvcnQgY29uc3QgZ2V0RXhwYW5kZWRJbWFnZVZpc2libGUgPSBmdW5jdGlvbihjb252ZXJ0ZXJDb250ZXh0OiBDb252ZXJ0ZXJDb250ZXh0KTogQmluZGluZ0V4cHJlc3Npb248c3RyaW5nPiB7XG5cdHJldHVybiBjb21waWxlQmluZGluZyhub3QoZ2V0U2hvd0hlYWRlckNvbnRlbnRFeHByZXNzaW9uKGNvbnZlcnRlckNvbnRleHQpKSk7XG59O1xuXG5leHBvcnQgY29uc3QgY29udmVydFBhZ2UgPSBmdW5jdGlvbihjb252ZXJ0ZXJDb250ZXh0OiBDb252ZXJ0ZXJDb250ZXh0KTogT2JqZWN0UGFnZURlZmluaXRpb24ge1xuXHRjb25zdCBtYW5pZmVzdFdyYXBwZXIgPSBjb252ZXJ0ZXJDb250ZXh0LmdldE1hbmlmZXN0V3JhcHBlcigpO1xuXHRsZXQgaGVhZGVyU2VjdGlvbjogT2JqZWN0UGFnZVNlY3Rpb24gfCB1bmRlZmluZWQ7XG5cdGNvbnN0IGVudGl0eVR5cGU6IEVudGl0eVR5cGUgPSBjb252ZXJ0ZXJDb250ZXh0LmdldEVudGl0eVR5cGUoKTtcblxuXHRjb25zdCBzaXR1YXRpb25Bbm5vdGF0aW9ucyA9IChlbnRpdHlUeXBlLmFubm90YXRpb25zIGFzIGFueSk/LkZFPy5TaXR1YXRpb25zO1xuXHQvLyBSZXRyaWV2ZSBhbGwgaGVhZGVyIGZhY2V0cyAoZnJvbSBhbm5vdGF0aW9ucyAmIGN1c3RvbSlcblx0Y29uc3QgaGVhZGVyRmFjZXRzID0gaW5zZXJ0Q3VzdG9tRWxlbWVudHMoXG5cdFx0Z2V0SGVhZGVyRmFjZXRzRnJvbUFubm90YXRpb25zKGNvbnZlcnRlckNvbnRleHQpLFxuXHRcdGdldEhlYWRlckZhY2V0c0Zyb21NYW5pZmVzdChtYW5pZmVzdFdyYXBwZXIuZ2V0SGVhZGVyRmFjZXRzKCkpXG5cdCk7XG5cblx0Ly8gUmV0cmlldmUgdGhlIHBhZ2UgaGVhZGVyIGFjdGlvbnNcblx0Y29uc3QgaGVhZGVyQWN0aW9ucyA9IGdldEhlYWRlckFjdGlvbnMoY29udmVydGVyQ29udGV4dCk7XG5cblx0Ly8gUmV0cmlldmUgdGhlIHBhZ2UgZm9vdGVyIGFjdGlvbnNcblx0Y29uc3QgZm9vdGVyQWN0aW9ucyA9IGdldEZvb3RlckFjdGlvbnMoY29udmVydGVyQ29udGV4dCk7XG5cblx0aWYgKG1hbmlmZXN0V3JhcHBlci5pc0hlYWRlckVkaXRhYmxlKCkgJiYgKGVudGl0eVR5cGUuYW5ub3RhdGlvbnMuVUk/LkhlYWRlckZhY2V0cyB8fCBlbnRpdHlUeXBlLmFubm90YXRpb25zLlVJPy5IZWFkZXJJbmZvKSkge1xuXHRcdGhlYWRlclNlY3Rpb24gPSBjcmVhdGVFZGl0YWJsZUhlYWRlclNlY3Rpb24oY29udmVydGVyQ29udGV4dCwgaGVhZGVyRmFjZXRzKTtcblx0fVxuXG5cdGNvbnN0IHNlY3Rpb25zID0gZ2V0U2VjdGlvbnMoY29udmVydGVyQ29udGV4dCk7XG5cblx0cmV0dXJuIHtcblx0XHR0ZW1wbGF0ZTogVGVtcGxhdGVUeXBlLk9iamVjdFBhZ2UsXG5cdFx0aGVhZGVyOiB7XG5cdFx0XHR2aXNpYmxlOiBtYW5pZmVzdFdyYXBwZXIuZ2V0U2hvd09iamVjdFBhZ2VIZWFkZXIoKSxcblx0XHRcdHNlY3Rpb246IGhlYWRlclNlY3Rpb24sXG5cdFx0XHRmYWNldHM6IGhlYWRlckZhY2V0cyxcblx0XHRcdGFjdGlvbnM6IGhlYWRlckFjdGlvbnMsXG5cdFx0XHRzaG93Q29udGVudDogZ2V0U2hvd0hlYWRlckNvbnRlbnQoY29udmVydGVyQ29udGV4dCksXG5cdFx0XHRoYXNDb250ZW50OiBoYXNIZWFkZXJDb250ZW50KGNvbnZlcnRlckNvbnRleHQpLFxuXHRcdFx0YXZhdGFyOiBnZXRBdmF0YXIoY29udmVydGVyQ29udGV4dCksXG5cdFx0XHR0aXRsZToge1xuXHRcdFx0XHRleHBhbmRlZEltYWdlVmlzaWJsZTogZ2V0RXhwYW5kZWRJbWFnZVZpc2libGUoY29udmVydGVyQ29udGV4dClcblx0XHRcdH0sXG5cdFx0XHRzaXR1YXRpb25zOiBzaXR1YXRpb25Bbm5vdGF0aW9uc1xuXHRcdH0sXG5cdFx0c2VjdGlvbnM6IHNlY3Rpb25zLFxuXHRcdGZvb3RlckFjdGlvbnM6IGZvb3RlckFjdGlvbnMsXG5cdFx0c2hvd0FuY2hvckJhcjogbWFuaWZlc3RXcmFwcGVyLmdldFNob3dBbmNob3JCYXIoKSxcblx0XHR1c2VJY29uVGFiQmFyOiBtYW5pZmVzdFdyYXBwZXIudXNlSWNvblRhYkJhcigpXG5cdH07XG59O1xuIl19
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