@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
@@ -2,7 +2,7 @@
2
2
  * SAP UI development toolkit for HTML5 (SAPUI5)
3
3
  * (c) Copyright 2009-2021 SAP SE. All rights reserved
4
4
  */
5
- sap.ui.define(["sap/base/util/ObjectPath", "sap/ui/core/ElementMetadata", "sap/ui/base/Metadata", "sap/fe/core/controllerextensions/ControllerExtensionMetadata", "sap/ui/core/mvc/ControllerMetadata", "sap/base/util/uid", "sap/base/util/merge"], function (ObjectPath, ElementMetadata, Metadata, ControllerExtensionMetadata, ControllerMetadata, uid, merge) {
5
+ sap.ui.define(["sap/base/util/merge", "sap/base/util/ObjectPath", "sap/base/util/uid", "sap/ui/base/Metadata", "sap/ui/core/mvc/ControllerMetadata"], function (merge, ObjectPath, uid, Metadata, ControllerMetadata) {
6
6
  "use strict";
7
7
 
8
8
  var _exports = {};
@@ -15,12 +15,22 @@ sap.ui.define(["sap/base/util/ObjectPath", "sap/ui/core/ElementMetadata", "sap/u
15
15
  aggregations: {},
16
16
  associations: {},
17
17
  methods: {},
18
- events: {}
18
+ events: {},
19
+ interfaces: []
19
20
  }, target.metadata || {});
20
21
  return target.metadata;
21
22
  };
23
+ /* #region CONTROLLER EXTENSIONS */
22
24
 
23
- function Override(sTarget) {
25
+ /**
26
+ * Defines that the following method is an override for the method name with the same name in the specific controller extension or base implementation.
27
+ *
28
+ * @param extensionName The name of the extension that will be overriden
29
+ * @returns The decorated method
30
+ */
31
+
32
+
33
+ function methodOverride(extensionName) {
24
34
  return function (target, propertyKey) {
25
35
  if (!target.override) {
26
36
  target.override = {};
@@ -28,255 +38,300 @@ sap.ui.define(["sap/base/util/ObjectPath", "sap/ui/core/ElementMetadata", "sap/u
28
38
 
29
39
  var currentTarget = target.override;
30
40
 
31
- if (sTarget) {
41
+ if (extensionName) {
32
42
  if (!currentTarget.extension) {
33
43
  currentTarget.extension = {};
34
44
  }
35
45
 
36
- if (!currentTarget.extension[sTarget]) {
37
- currentTarget.extension[sTarget] = {};
46
+ if (!currentTarget.extension[extensionName]) {
47
+ currentTarget.extension[extensionName] = {};
38
48
  }
39
49
 
40
- currentTarget = currentTarget.extension[sTarget];
50
+ currentTarget = currentTarget.extension[extensionName];
41
51
  }
42
52
 
43
- currentTarget[propertyKey] = target[propertyKey];
53
+ currentTarget[propertyKey.toString()] = target[propertyKey.toString()];
44
54
  };
45
55
  }
56
+ /**
57
+ * Defines that the method can be extended by other controller extension based on the defined overrideExecutionType.
58
+ *
59
+ * @param overrideExecutionType The OverrideExecution defining when the override should run (Before / After / Instead)
60
+ * @returns The decorated method
61
+ */
62
+
46
63
 
47
- _exports.Override = Override;
64
+ _exports.methodOverride = methodOverride;
48
65
 
49
- function Extensible(oOverrideExecution) {
66
+ function extensible(overrideExecutionType) {
50
67
  return function (target, propertyKey) {
51
68
  var metadata = ensureMetadata(target);
52
69
 
53
- if (!metadata.methods[propertyKey]) {
54
- metadata.methods[propertyKey] = {};
70
+ if (!metadata.methods[propertyKey.toString()]) {
71
+ metadata.methods[propertyKey.toString()] = {};
55
72
  }
56
73
 
57
- metadata.methods[propertyKey].overrideExecution = oOverrideExecution;
74
+ metadata.methods[propertyKey.toString()].overrideExecution = overrideExecutionType;
58
75
  };
59
76
  }
77
+ /**
78
+ * Defines that the method will be publicly available for controller extension usage.
79
+ *
80
+ * @returns The decorated method
81
+ */
60
82
 
61
- _exports.Extensible = Extensible;
62
-
63
- function Public(target, propertyKey, descriptor) {
64
- var metadata = ensureMetadata(target);
65
- descriptor.enumerable = true;
66
-
67
- if (!metadata.methods[propertyKey]) {
68
- metadata.methods[propertyKey] = {};
69
- }
70
-
71
- metadata.methods[propertyKey].public = true;
72
- }
73
83
 
74
- _exports.Public = Public;
84
+ _exports.extensible = extensible;
75
85
 
76
- function Private(target, propertyKey, descriptor) {
77
- var metadata = ensureMetadata(target);
78
- descriptor.enumerable = true;
86
+ function publicExtension() {
87
+ return function (target, propertyKey, descriptor) {
88
+ var metadata = ensureMetadata(target);
89
+ descriptor.enumerable = true;
79
90
 
80
- if (!metadata.methods[propertyKey]) {
81
- metadata.methods[propertyKey] = {};
82
- }
91
+ if (!metadata.methods[propertyKey.toString()]) {
92
+ metadata.methods[propertyKey.toString()] = {};
93
+ }
83
94
 
84
- metadata.methods[propertyKey].public = false;
95
+ metadata.methods[propertyKey.toString()].public = true;
96
+ };
85
97
  }
98
+ /**
99
+ * Defines that the method will be only available for internal usage of the controller extension.
100
+ *
101
+ * @returns The decorated method
102
+ */
86
103
 
87
- _exports.Private = Private;
88
104
 
89
- function Final(target, propertyKey, descriptor) {
90
- var metadata = ensureMetadata(target);
91
- descriptor.enumerable = true;
105
+ _exports.publicExtension = publicExtension;
92
106
 
93
- if (!metadata.methods[propertyKey]) {
94
- metadata.methods[propertyKey] = {};
95
- }
107
+ function privateExtension() {
108
+ return function (target, propertyKey, descriptor) {
109
+ var metadata = ensureMetadata(target);
110
+ descriptor.enumerable = true;
111
+
112
+ if (!metadata.methods[propertyKey.toString()]) {
113
+ metadata.methods[propertyKey.toString()] = {};
114
+ }
96
115
 
97
- metadata.methods[propertyKey].final = true;
116
+ metadata.methods[propertyKey.toString()].public = false;
117
+ };
98
118
  }
119
+ /**
120
+ * Defines that the method cannot be further extended by other controller extension.
121
+ *
122
+ * @returns The decorated method
123
+ */
99
124
 
100
- _exports.Final = Final;
101
125
 
102
- function Event(target, eventKey) {
103
- var metadata = ensureMetadata(target);
126
+ _exports.privateExtension = privateExtension;
104
127
 
105
- if (!metadata.events[eventKey]) {
106
- metadata.events[eventKey] = {};
107
- }
108
- }
128
+ function finalExtension() {
129
+ return function (target, propertyKey, descriptor) {
130
+ var metadata = ensureMetadata(target);
131
+ descriptor.enumerable = true;
109
132
 
110
- _exports.Event = Event;
133
+ if (!metadata.methods[propertyKey.toString()]) {
134
+ metadata.methods[propertyKey.toString()] = {};
135
+ }
111
136
 
112
- function EventHandler(target, propertykey) {
113
- target.constructor[propertykey] = function () {
114
- var currentTarget = target.constructor.getAPI(arguments.length <= 0 ? undefined : arguments[0]);
115
- currentTarget[propertykey].apply(currentTarget, arguments);
137
+ metadata.methods[propertyKey.toString()].final = true;
116
138
  };
117
139
  }
140
+ /**
141
+ * Defines that we are going to use instantiate a controller extension under the following variable name.
142
+ *
143
+ * @param extensionClass The controller extension that will be instantiated
144
+ * @returns The decorated property
145
+ */
118
146
 
119
- _exports.EventHandler = EventHandler;
120
-
121
- function MacroContext() {
122
- var bMetaModelObject = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : false;
123
- return Property({
124
- type: "sap.ui.model.Context",
125
- macroContext: true,
126
- metaModelObject: bMetaModelObject
127
- });
128
- }
129
147
 
130
- _exports.MacroContext = MacroContext;
148
+ _exports.finalExtension = finalExtension;
131
149
 
132
- function UsingExtension(extensionClass) {
150
+ function usingExtension(extensionClass) {
133
151
  return function (target, propertyKey, propertyDescriptor) {
134
152
  var metadata = ensureMetadata(target);
135
153
  delete propertyDescriptor.initializer;
136
- metadata.controllerExtensions[propertyKey] = extensionClass;
154
+ metadata.controllerExtensions[propertyKey.toString()] = extensionClass;
137
155
  return propertyDescriptor;
138
- };
156
+ }; // This is technically an accessor decorator, but somehow the compiler doesn't like it if i declare it as such.
139
157
  }
158
+ /* #endregion */
140
159
 
141
- _exports.UsingExtension = UsingExtension;
160
+ /* #region CONTROL */
142
161
 
143
- function Property(oPropertyParams) {
144
- return function (target, propertyKey, propertyDescriptor) {
162
+ /**
163
+ * Indicates that the property shall be declared as an event on the control metadata.
164
+ *
165
+ * @returns The decorated property
166
+ */
167
+
168
+
169
+ _exports.usingExtension = usingExtension;
170
+
171
+ function event() {
172
+ return function (target, eventKey) {
145
173
  var metadata = ensureMetadata(target);
146
174
 
147
- if (oPropertyParams !== null && oPropertyParams !== void 0 && oPropertyParams.macroContext) {
148
- if (!metadata.macroContexts[propertyKey]) {
149
- metadata.macroContexts[propertyKey] = oPropertyParams;
150
- }
175
+ if (!metadata.events[eventKey.toString()]) {
176
+ metadata.events[eventKey.toString()] = {};
151
177
  }
178
+ };
179
+ }
180
+ /**
181
+ * Defines the following property in the control metatada.
182
+ *
183
+ * @param ui5PropertyMetadata The property definition
184
+ * @returns The decorated property.
185
+ */
186
+
187
+
188
+ _exports.event = event;
189
+
190
+ function property(ui5PropertyMetadata) {
191
+ return function (target, propertyKey, propertyDescriptor) {
192
+ var metadata = ensureMetadata(target);
152
193
 
153
194
  if (!metadata.properties[propertyKey]) {
154
- metadata.properties[propertyKey] = oPropertyParams;
195
+ metadata.properties[propertyKey] = ui5PropertyMetadata;
155
196
  }
156
197
 
157
198
  delete propertyDescriptor.writable;
158
- delete propertyDescriptor.initializer; // (propertyDescriptor as any).set = function(v: any) {
159
- // return this.setProperty(propertyKey, v);
160
- // };
161
- // (propertyDescriptor as any).get = function() {
162
- // return this.getProperty(propertyKey);
163
- // };
164
-
199
+ delete propertyDescriptor.initializer;
165
200
  return propertyDescriptor;
166
- };
201
+ }; // This is technically an accessor decorator, but somehow the compiler doesn't like it if i declare it as such.;
167
202
  }
203
+ /**
204
+ * Defines and configure the following aggregation in the control metatada.
205
+ *
206
+ * @param ui5AggregationMetadata The aggregation definition
207
+ * @returns The decorated property.
208
+ */
209
+
168
210
 
169
- _exports.Property = Property;
211
+ _exports.property = property;
170
212
 
171
- function Aggregation(oAggregationDescriptor) {
213
+ function aggregation(ui5AggregationMetadata) {
172
214
  return function (target, propertyKey, propertyDescriptor) {
173
215
  var metadata = ensureMetadata(target);
174
216
 
217
+ if (ui5AggregationMetadata.multiple === undefined) {
218
+ // UI5 defaults this to true but this is just weird...
219
+ ui5AggregationMetadata.multiple = false;
220
+ }
221
+
175
222
  if (!metadata.aggregations[propertyKey]) {
176
- metadata.aggregations[propertyKey] = oAggregationDescriptor;
223
+ metadata.aggregations[propertyKey] = ui5AggregationMetadata;
177
224
  }
178
225
 
179
- if (oAggregationDescriptor.isDefault) {
226
+ if (ui5AggregationMetadata.isDefault) {
180
227
  metadata.defaultAggregation = propertyKey;
181
228
  }
182
229
 
183
230
  delete propertyDescriptor.writable;
184
- delete propertyDescriptor.initializer; // (propertyDescriptor as any).set = function(v: any) {
185
- // return this.setAggregation(propertyKey, v);
186
- // };
187
- // (propertyDescriptor as any).get = function() {
188
- // return this.getAggregation(propertyKey);
189
- // };
190
-
231
+ delete propertyDescriptor.initializer;
191
232
  return propertyDescriptor;
192
- };
233
+ }; // This is technically an accessor decorator, but somehow the compiler doesn't like it if i declare it as such.;
193
234
  }
235
+ /**
236
+ * Defines and configure the following association in the control metatada.
237
+ *
238
+ * @param ui5AssociationMetadata The definition of the association.
239
+ * @returns The decorated property
240
+ */
241
+
194
242
 
195
- _exports.Aggregation = Aggregation;
243
+ _exports.aggregation = aggregation;
196
244
 
197
- function Association(oAssociationDescription) {
245
+ function association(ui5AssociationMetadata) {
198
246
  return function (target, propertyKey, propertyDescriptor) {
199
247
  var metadata = ensureMetadata(target);
200
248
 
201
249
  if (!metadata.associations[propertyKey]) {
202
- metadata.associations[propertyKey] = oAssociationDescription;
250
+ metadata.associations[propertyKey] = ui5AssociationMetadata;
203
251
  }
204
252
 
205
253
  delete propertyDescriptor.writable;
206
- delete propertyDescriptor.initializer; // (propertyDescriptor as any).set = function(v: any) {
207
- // return this.setAggregation(propertyKey, v);
208
- // };
209
- // (propertyDescriptor as any).get = function() {
210
- // return this.getAggregation(propertyKey);
211
- // };
212
-
254
+ delete propertyDescriptor.initializer;
213
255
  return propertyDescriptor;
214
- };
256
+ }; // This is technically an accessor decorator, but somehow the compiler doesn't like it if i declare it as such.;
215
257
  }
258
+ /**
259
+ * Defines in the metadata that this control implements a specific interface.
260
+ *
261
+ * @param interfaceName The name of the implemented interface
262
+ * @returns The decorated method
263
+ */
264
+
216
265
 
217
- _exports.Association = Association;
266
+ _exports.association = association;
218
267
 
268
+ function implementInterface(interfaceName) {
269
+ return function (target) {
270
+ var metadata = ensureMetadata(target);
271
+ metadata.interfaces.push(interfaceName);
272
+ };
273
+ }
219
274
  /**
220
- * Decorator to provide a new API class to be used in the macros.
275
+ * Indicates that the following method should also be exposed statically so we can call it from the XML.
221
276
  *
222
- * @param sTarget The fully qualified name of the macro API
223
- * @param isDependentBound Whether this API will be used as a dependent or not
224
- * @class
277
+ * @returns The decorated method
225
278
  */
226
- function APIClass(sTarget) {
227
- var isDependentBound = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : false;
228
- return function (constructor) {
229
- if (!constructor.prototype.metadata) {
230
- constructor.prototype.metadata = {};
231
- }
232
279
 
233
- if (!constructor.prototype.metadata.interfaces) {
234
- constructor.prototype.metadata.interfaces = [];
235
- }
236
280
 
237
- constructor.prototype.metadata.interfaces.push("sap.ui.core.IFormContent");
238
- constructor.isDependentBound = isDependentBound;
281
+ _exports.implementInterface = implementInterface;
239
282
 
240
- if (!constructor.prototype.renderer) {
241
- constructor.prototype.renderer = {
242
- apiVersion: 2,
243
- render: function (oRm, oControl) {
244
- oRm.renderControl(oControl.getContent());
245
- }
246
- };
247
- }
283
+ function xmlEventHandler() {
284
+ return function (target, propertykey) {
285
+ var currentConstructor = target.constructor;
248
286
 
249
- describe(constructor, sTarget, constructor.prototype, ElementMetadata);
287
+ currentConstructor[propertykey.toString()] = function () {
288
+ var currentTarget = currentConstructor.getAPI(arguments.length <= 0 ? undefined : arguments[0]);
289
+ currentTarget[propertykey.toString()].apply(currentTarget, arguments);
290
+ };
250
291
  };
251
292
  }
293
+ /**
294
+ * Indicates that the following class should define a ui5 control of the specified name.
295
+ *
296
+ * @param sTarget The fully qualified name of the macro API
297
+ * @param metadataDefinition Inline metadata definition
298
+ * @class
299
+ */
252
300
 
253
- _exports.APIClass = APIClass;
254
301
 
255
- function UI5Class(sTarget, metadataClass, metadataDefinition) {
256
- var useExtend = arguments.length > 3 && arguments[3] !== undefined ? arguments[3] : true;
302
+ _exports.xmlEventHandler = xmlEventHandler;
303
+
304
+ function defineUI5Class(sTarget, metadataDefinition) {
257
305
  return function (constructor) {
258
306
  if (!constructor.prototype.metadata) {
259
307
  constructor.prototype.metadata = {};
260
308
  }
261
309
 
262
310
  if (metadataDefinition) {
263
- Object.keys(metadataDefinition).forEach(function (key) {
311
+ for (var key in metadataDefinition) {
264
312
  constructor.prototype.metadata[key] = metadataDefinition[key];
265
- });
313
+ }
266
314
  }
267
315
 
268
- return describe(constructor, sTarget, constructor.prototype, metadataClass, useExtend);
316
+ return registerUI5Metadata(constructor, sTarget, constructor.prototype);
269
317
  };
270
318
  }
319
+ /**
320
+ * Internal heavy lifting that will take care of creating the class property for ui5 to use.
321
+ *
322
+ * @param clazz The class prototype
323
+ * @param name The name of the class to create
324
+ * @param inObj The metadata object
325
+ * @returns The metadata class
326
+ */
271
327
 
272
- _exports.UI5Class = UI5Class;
273
328
 
274
- function describe(clazz, name, inObj, metadataClass) {
275
- var _inObj$metadata, _clazz$metadata, _obj$metadata;
329
+ _exports.defineUI5Class = defineUI5Class;
276
330
 
277
- var useExtend = arguments.length > 4 && arguments[4] !== undefined ? arguments[4] : true;
331
+ function registerUI5Metadata(clazz, name, inObj) {
332
+ var _clazz$getMetadata, _inObj$metadata, _clazz$metadata, _obj$metadata;
278
333
 
279
- if (metadataClass === ControllerExtensionMetadata) {
334
+ if (clazz.getMetadata && clazz.getMetadata().isA("sap.ui.core.mvc.ControllerExtension")) {
280
335
  Object.getOwnPropertyNames(inObj).forEach(function (objName) {
281
336
  var descriptor = Object.getOwnPropertyDescriptor(inObj, objName);
282
337
 
@@ -291,29 +346,29 @@ sap.ui.define(["sap/base/util/ObjectPath", "sap/ui/core/ElementMetadata", "sap/u
291
346
  obj.override = inObj.override;
292
347
  obj.constructor = clazz;
293
348
  obj.metadata.baseType = Object.getPrototypeOf(clazz.prototype).getMetadata().getName();
294
- var rendererDefinition = inObj.renderer || clazz.renderer;
295
- obj.renderer = {
296
- apiVersion: 2
297
- };
298
349
 
299
- if (typeof rendererDefinition === "function") {
300
- obj.renderer.render = rendererDefinition;
301
- } else if (rendererDefinition != undefined) {
302
- obj.renderer = rendererDefinition;
350
+ if ((clazz === null || clazz === void 0 ? void 0 : (_clazz$getMetadata = clazz.getMetadata()) === null || _clazz$getMetadata === void 0 ? void 0 : _clazz$getMetadata.getStereotype()) === "control") {
351
+ var rendererDefinition = inObj.renderer || clazz.renderer || clazz.render;
352
+ obj.renderer = {
353
+ apiVersion: 2
354
+ };
355
+
356
+ if (typeof rendererDefinition === "function") {
357
+ obj.renderer.render = rendererDefinition;
358
+ } else if (rendererDefinition != undefined) {
359
+ obj.renderer = rendererDefinition;
360
+ }
303
361
  }
304
362
 
305
363
  obj.metadata.interfaces = ((_inObj$metadata = inObj.metadata) === null || _inObj$metadata === void 0 ? void 0 : _inObj$metadata.interfaces) || ((_clazz$metadata = clazz.metadata) === null || _clazz$metadata === void 0 ? void 0 : _clazz$metadata.interfaces);
306
-
307
- if (useExtend) {
308
- Object.keys(clazz.prototype).forEach(function (key) {
309
- if (key !== "metadata") {
310
- try {
311
- obj[key] = clazz.prototype[key];
312
- } catch (e) {//console.log(e);
313
- }
364
+ Object.keys(clazz.prototype).forEach(function (key) {
365
+ if (key !== "metadata") {
366
+ try {
367
+ obj[key] = clazz.prototype[key];
368
+ } catch (e) {//console.log(e);
314
369
  }
315
- });
316
- }
370
+ }
371
+ });
317
372
 
318
373
  if ((_obj$metadata = obj.metadata) !== null && _obj$metadata !== void 0 && _obj$metadata.controllerExtensions && Object.keys(obj.metadata.controllerExtensions).length > 0) {
319
374
  for (var cExtName in obj.metadata.controllerExtensions) {
@@ -321,88 +376,77 @@ sap.ui.define(["sap/base/util/ObjectPath", "sap/ui/core/ElementMetadata", "sap/u
321
376
  }
322
377
  }
323
378
 
324
- var output = clazz;
325
-
326
- if (useExtend) {
327
- output = clazz.extend(name, obj, metadataClass);
328
- var _fnInit = output.prototype.init;
379
+ var output = clazz.extend(name, obj);
380
+ var fnInit = output.prototype.init;
329
381
 
330
- output.prototype.init = function () {
331
- for (var _len = arguments.length, args = new Array(_len), _key = 0; _key < _len; _key++) {
332
- args[_key] = arguments[_key];
333
- }
334
-
335
- _fnInit && _fnInit.apply(this, args);
336
- this.metadata = obj.metadata;
337
-
338
- if (obj.metadata.properties) {
339
- var aPropertyKeys = Object.keys(obj.metadata.properties); // eslint-disable-next-line @typescript-eslint/no-this-alias
340
-
341
- var that = this;
342
- aPropertyKeys.forEach(function (propertyKey) {
343
- Object.defineProperty(that, propertyKey, {
344
- configurable: true,
345
- set: function (v) {
346
- return that.setProperty(propertyKey, v);
347
- },
348
- get: function () {
349
- return that.getProperty(propertyKey);
350
- }
351
- });
352
- });
353
- var aAggregationKeys = Object.keys(obj.metadata.aggregations);
354
- aAggregationKeys.forEach(function (aggregationKey) {
355
- Object.defineProperty(that, aggregationKey, {
356
- configurable: true,
357
- set: function (v) {
358
- return that.setAggregation(aggregationKey, v);
359
- },
360
- get: function () {
361
- return that.getAggregation(aggregationKey);
362
- }
363
- });
364
- });
365
- }
366
- };
367
- } else {
368
- var metadata;
382
+ output.prototype.init = function () {
383
+ var _this = this;
369
384
 
370
- if (metadataClass) {
371
- metadata = new metadataClass(name, obj);
372
- } else {
373
- metadata = new ElementMetadata(name, obj);
385
+ for (var _len = arguments.length, args = new Array(_len), _key = 0; _key < _len; _key++) {
386
+ args[_key] = arguments[_key];
374
387
  }
375
388
 
376
- clazz.getMetadata = clazz.prototype.getMetadata = function () {
377
- return metadata;
378
- };
389
+ fnInit && fnInit.apply(this, args);
390
+ this.metadata = obj.metadata;
379
391
 
380
- if (!clazz.getMetadata().isFinal()) {
381
- clazz.extend = function (sSCName, oSCClassInfo, fnSCMetaImpl) {
382
- // the default constructor created by ui5 does not return the value which is problematic with TS
383
- oSCClassInfo.constructor = function () {
384
- for (var _len2 = arguments.length, args = new Array(_len2), _key2 = 0; _key2 < _len2; _key2++) {
385
- args[_key2] = arguments[_key2];
392
+ if (obj.metadata.properties) {
393
+ var aPropertyKeys = Object.keys(obj.metadata.properties);
394
+ aPropertyKeys.forEach(function (propertyKey) {
395
+ Object.defineProperty(_this, propertyKey, {
396
+ configurable: true,
397
+ set: function (v) {
398
+ return _this.setProperty(propertyKey, v);
399
+ },
400
+ get: function () {
401
+ return _this.getProperty(propertyKey);
386
402
  }
403
+ });
404
+ });
405
+ var aAggregationKeys = Object.keys(obj.metadata.aggregations);
406
+ aAggregationKeys.forEach(function (aggregationKey) {
407
+ Object.defineProperty(_this, aggregationKey, {
408
+ configurable: true,
409
+ set: function (v) {
410
+ return _this.setAggregation(aggregationKey, v);
411
+ },
412
+ get: function () {
413
+ var aggregationContent = _this.getAggregation(aggregationKey);
387
414
 
388
- return clazz.apply(this, args);
389
- };
390
-
391
- var fnClass = Metadata.createClass(clazz, sSCName, oSCClassInfo, fnSCMetaImpl || metadataClass || ElementMetadata); // fnClass.prototype.constructor = function(...args: any[]) {
392
- // return clazz.apply(this, ...args);
393
- // };
415
+ if (obj.metadata.aggregations[aggregationKey].multiple) {
416
+ return aggregationContent || [];
417
+ } else {
418
+ return aggregationContent;
419
+ }
420
+ }
421
+ });
422
+ });
423
+ var aAssociationKeys = Object.keys(obj.metadata.associations);
424
+ aAssociationKeys.forEach(function (associationKey) {
425
+ Object.defineProperty(_this, associationKey, {
426
+ configurable: true,
427
+ set: function (v) {
428
+ return _this.setAssociation(associationKey, v);
429
+ },
430
+ get: function () {
431
+ var aggregationContent = _this.getAssociation(associationKey);
394
432
 
395
- return fnClass;
396
- };
433
+ if (obj.metadata.associations[associationKey].multiple) {
434
+ return aggregationContent || [];
435
+ } else {
436
+ return aggregationContent;
437
+ }
438
+ }
439
+ });
440
+ });
397
441
  }
398
- }
442
+ };
399
443
 
400
444
  clazz.override = function (oExtension) {
401
445
  var pol = {};
402
446
 
403
447
  pol.constructor = function () {
404
- for (var _len3 = arguments.length, args = new Array(_len3), _key3 = 0; _key3 < _len3; _key3++) {
405
- args[_key3] = arguments[_key3];
448
+ for (var _len2 = arguments.length, args = new Array(_len2), _key2 = 0; _key2 < _len2; _key2++) {
449
+ args[_key2] = arguments[_key2];
406
450
  }
407
451
 
408
452
  return clazz.apply(this, args);
@@ -414,37 +458,10 @@ sap.ui.define(["sap/base/util/ObjectPath", "sap/ui/core/ElementMetadata", "sap/u
414
458
  return oClass;
415
459
  };
416
460
 
417
- var fnInit = clazz.prototype.init;
418
-
419
- output.prototype.init = function () {
420
- for (var _len4 = arguments.length, args = new Array(_len4), _key4 = 0; _key4 < _len4; _key4++) {
421
- args[_key4] = arguments[_key4];
422
- }
423
-
424
- fnInit && fnInit.apply(this, args);
425
-
426
- if (obj.metadata.properties) {
427
- var aPropertyKeys = Object.keys(obj.metadata.properties); // eslint-disable-next-line @typescript-eslint/no-this-alias
428
-
429
- var that = this;
430
- aPropertyKeys.forEach(function (propertyKey) {
431
- Object.defineProperty(that, propertyKey, {
432
- configurable: true,
433
- set: function (v) {
434
- return that.setProperty(propertyKey, v);
435
- },
436
- get: function () {
437
- return that.getProperty(propertyKey);
438
- }
439
- });
440
- });
441
- }
442
- };
443
-
444
461
  ObjectPath.set(name, output);
445
462
  return output;
446
463
  }
447
464
 
448
465
  return _exports;
449
466
  }, false);
450
- //# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIkNsYXNzU3VwcG9ydC50cyJdLCJuYW1lcyI6WyJlbnN1cmVNZXRhZGF0YSIsInRhcmdldCIsIm1ldGFkYXRhIiwibWVyZ2UiLCJjb250cm9sbGVyRXh0ZW5zaW9ucyIsInByb3BlcnRpZXMiLCJtYWNyb0NvbnRleHRzIiwiYWdncmVnYXRpb25zIiwiYXNzb2NpYXRpb25zIiwibWV0aG9kcyIsImV2ZW50cyIsIk92ZXJyaWRlIiwic1RhcmdldCIsInByb3BlcnR5S2V5Iiwib3ZlcnJpZGUiLCJjdXJyZW50VGFyZ2V0IiwiZXh0ZW5zaW9uIiwiRXh0ZW5zaWJsZSIsIm9PdmVycmlkZUV4ZWN1dGlvbiIsIm92ZXJyaWRlRXhlY3V0aW9uIiwiUHVibGljIiwiZGVzY3JpcHRvciIsImVudW1lcmFibGUiLCJwdWJsaWMiLCJQcml2YXRlIiwiRmluYWwiLCJmaW5hbCIsIkV2ZW50IiwiZXZlbnRLZXkiLCJFdmVudEhhbmRsZXIiLCJwcm9wZXJ0eWtleSIsImNvbnN0cnVjdG9yIiwiZ2V0QVBJIiwiTWFjcm9Db250ZXh0IiwiYk1ldGFNb2RlbE9iamVjdCIsIlByb3BlcnR5IiwidHlwZSIsIm1hY3JvQ29udGV4dCIsIm1ldGFNb2RlbE9iamVjdCIsIlVzaW5nRXh0ZW5zaW9uIiwiZXh0ZW5zaW9uQ2xhc3MiLCJwcm9wZXJ0eURlc2NyaXB0b3IiLCJpbml0aWFsaXplciIsIm9Qcm9wZXJ0eVBhcmFtcyIsIndyaXRhYmxlIiwiQWdncmVnYXRpb24iLCJvQWdncmVnYXRpb25EZXNjcmlwdG9yIiwiaXNEZWZhdWx0IiwiZGVmYXVsdEFnZ3JlZ2F0aW9uIiwiQXNzb2NpYXRpb24iLCJvQXNzb2NpYXRpb25EZXNjcmlwdGlvbiIsIkFQSUNsYXNzIiwiaXNEZXBlbmRlbnRCb3VuZCIsInByb3RvdHlwZSIsImludGVyZmFjZXMiLCJwdXNoIiwicmVuZGVyZXIiLCJhcGlWZXJzaW9uIiwicmVuZGVyIiwib1JtIiwib0NvbnRyb2wiLCJyZW5kZXJDb250cm9sIiwiZ2V0Q29udGVudCIsImRlc2NyaWJlIiwiRWxlbWVudE1ldGFkYXRhIiwiVUk1Q2xhc3MiLCJtZXRhZGF0YUNsYXNzIiwibWV0YWRhdGFEZWZpbml0aW9uIiwidXNlRXh0ZW5kIiwiT2JqZWN0Iiwia2V5cyIsImZvckVhY2giLCJrZXkiLCJjbGF6eiIsIm5hbWUiLCJpbk9iaiIsIkNvbnRyb2xsZXJFeHRlbnNpb25NZXRhZGF0YSIsImdldE93blByb3BlcnR5TmFtZXMiLCJvYmpOYW1lIiwiZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9yIiwib2JqIiwiYmFzZVR5cGUiLCJnZXRQcm90b3R5cGVPZiIsImdldE1ldGFkYXRhIiwiZ2V0TmFtZSIsInJlbmRlcmVyRGVmaW5pdGlvbiIsInVuZGVmaW5lZCIsImUiLCJsZW5ndGgiLCJjRXh0TmFtZSIsIm91dHB1dCIsImV4dGVuZCIsImZuSW5pdCIsImluaXQiLCJhcmdzIiwiYXBwbHkiLCJhUHJvcGVydHlLZXlzIiwidGhhdCIsImRlZmluZVByb3BlcnR5IiwiY29uZmlndXJhYmxlIiwic2V0IiwidiIsInNldFByb3BlcnR5IiwiZ2V0IiwiZ2V0UHJvcGVydHkiLCJhQWdncmVnYXRpb25LZXlzIiwiYWdncmVnYXRpb25LZXkiLCJzZXRBZ2dyZWdhdGlvbiIsImdldEFnZ3JlZ2F0aW9uIiwiaXNGaW5hbCIsInNTQ05hbWUiLCJvU0NDbGFzc0luZm8iLCJmblNDTWV0YUltcGwiLCJmbkNsYXNzIiwiTWV0YWRhdGEiLCJjcmVhdGVDbGFzcyIsIm9FeHRlbnNpb24iLCJwb2wiLCJvQ2xhc3MiLCJ1aWQiLCJDb250cm9sbGVyTWV0YWRhdGEiLCJfc3RhdGljT3ZlcnJpZGUiLCJfb3ZlcnJpZGUiLCJPYmplY3RQYXRoIl0sIm1hcHBpbmdzIjoiO0FBQUE7QUFDQTtBQUNBOzs7Ozs7QUFTQSxNQUFNQSxjQUFjLEdBQUcsVUFBU0MsTUFBVCxFQUFzQjtBQUM1Q0EsSUFBQUEsTUFBTSxDQUFDQyxRQUFQLEdBQWtCQyxLQUFLLENBQ3RCO0FBQ0NDLE1BQUFBLG9CQUFvQixFQUFFLEVBRHZC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Q0FBYUcsVUFBekIsQ0FBdEIsQ0FENEIsQ0FFNUI7O0FBQ0EsWUFBTTRGLElBQUksR0FBRyxJQUFiO0FBQ0FELFFBQUFBLGFBQWEsQ0FBQ3pCLE9BQWQsQ0FBc0IsVUFBQTFELFdBQVcsRUFBSTtBQUNwQ3dELFVBQUFBLE1BQU0sQ0FBQzZCLGNBQVAsQ0FBc0JELElBQXRCLEVBQTRCcEYsV0FBNUIsRUFBeUM7QUFDeENzRixZQUFBQSxZQUFZLEVBQUUsSUFEMEI7QUFFeENDLFlBQUFBLEdBQUcsRUFBRSxVQUFDQyxDQUFELEVBQVk7QUFDaEIscUJBQU9KLElBQUksQ0FBQ0ssV0FBTCxDQUFpQnpGLFdBQWpCLEVBQThCd0YsQ0FBOUIsQ0FBUDtBQUNBLGFBSnVDO0FBS3hDRSxZQUFBQSxHQUFHLEVBQUUsWUFBTTtBQUNWLHFCQUFPTixJQUFJLENBQUNPLFdBQUwsQ0FBaUIzRixXQUFqQixDQUFQO0FBQ0E7QUFQdUMsV0FBekM7QUFTQSxTQVZEO0FBV0E7QUFDRCxLQWxCRDs7QUFtQkE4RyxJQUFBQSxVQUFVLENBQUN2QixHQUFYLENBQWUxQixJQUFmLEVBQXFCZ0IsTUFBckI7QUFDQSxXQUFPQSxNQUFQO0FBQ0EiLCJzb3VyY2VSb290IjoiLiIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCBPdmVycmlkZUV4ZWN1dGlvbiBmcm9tIFwic2FwL3VpL2NvcmUvbXZjL092ZXJyaWRlRXhlY3V0aW9uXCI7XG5pbXBvcnQgT2JqZWN0UGF0aCBmcm9tIFwic2FwL2Jhc2UvdXRpbC9PYmplY3RQYXRoXCI7XG5pbXBvcnQgRWxlbWVudE1ldGFkYXRhIGZyb20gXCJzYXAvdWkvY29yZS9FbGVtZW50TWV0YWRhdGFcIjtcbmltcG9ydCBSZW5kZXJNYW5hZ2VyIGZyb20gXCJzYXAvdWkvY29yZS9SZW5kZXJNYW5hZ2VyXCI7XG5pbXBvcnQgTWV0YWRhdGEgZnJvbSBcInNhcC91aS9iYXNlL01ldGFkYXRhXCI7XG5pbXBvcnQgQ29udHJvbGxlckV4dGVuc2lvbk1ldGFkYXRhIGZyb20gXCJzYXAvZmUvY29yZS9jb250cm9sbGVyZXh0ZW5zaW9ucy9Db250cm9sbGVyRXh0ZW5zaW9uTWV0YWRhdGFcIjtcbmltcG9ydCBDb250cm9sbGVyTWV0YWRhdGEgZnJvbSBcInNhcC91aS9jb3JlL212Yy9Db250cm9sbGVyTWV0YWRhdGFcIjtcbmltcG9ydCB1aWQgZnJvbSBcInNhcC9iYXNlL3V0aWwvdWlkXCI7XG5pbXBvcnQgbWVyZ2UgZnJvbSBcInNhcC9iYXNlL3V0aWwvbWVyZ2VcIjtcbmltcG9ydCBVSTVFdmVudCBmcm9tIFwic2FwL3VpL2Jhc2UvRXZlbnRcIjtcblxuY29uc3QgZW5zdXJlTWV0YWRhdGEgPSBmdW5jdGlvbih0YXJnZXQ6IGFueSkge1xuXHR0YXJnZXQubWV0YWRhdGEgPSBtZXJnZShcblx0XHR7XG5cdFx0XHRjb250cm9sbGVyRXh0ZW5zaW9uczoge30sXG5cdFx0XHRwcm9wZXJ0aWVzOiB7fSxcblx0XHRcdG1hY3JvQ29udGV4dHM6IHt9LFxuXHRcdFx0YWdncmVnYXRpb25zOiB7fSxcblx0XHRcdGFzc29jaWF0aW9uczoge30sXG5cdFx0XHRtZXRob2RzOiB7fSxcblx0XHRcdGV2ZW50czoge31cblx0XHR9LFxuXHRcdHRhcmdldC5tZXRhZGF0YSB8fCB7fVxuXHQpO1xuXHRyZXR1cm4gdGFyZ2V0Lm1ldGFkYXRhO1xufTtcbmV4cG9ydCBmdW5jdGlvbiBPdmVycmlkZShzVGFyZ2V0Pzogc3RyaW5nKSB7XG5cdHJldHVybiBmdW5jdGlvbih0YXJnZXQ6IGFueSwgcHJvcGVydHlLZXk6IHN0cmluZykge1xuXHRcdGlmICghdGFyZ2V0Lm92ZXJyaWRlKSB7XG5cdFx0XHR0YXJnZXQub3ZlcnJpZGUgPSB7fTtcblx0XHR9XG5cdFx0bGV0IGN1cnJlbnRUYXJnZXQgPSB0YXJnZXQub3ZlcnJpZGU7XG5cdFx0aWYgKHNUYXJnZXQpIHtcblx0XHRcdGlmICghY3VycmVudFRhcmdldC5leHRlbnNpb24pIHtcblx0XHRcdFx0Y3VycmVudFRhcmdldC5leHRlbnNpb24gPSB7fTtcblx0XHRcdH1cblx0XHRcdGlmICghY3VycmVudFRhcmdldC5leHRlbnNpb25bc1RhcmdldF0pIHtcblx0XHRcdFx0Y3VycmVudFRhcmdldC5leHRlbnNpb25bc1RhcmdldF0gPSB7fTtcblx0XHRcdH1cblx0XHRcdGN1cnJlbnRUYXJnZXQgPSBjdXJyZW50VGFyZ2V0LmV4dGVuc2lvbltzVGFyZ2V0XTtcblx0XHR9XG5cdFx0Y3VycmVudFRhcmdldFtwcm9wZXJ0eUtleV0gPSB0YXJnZXRbcHJvcGVydHlLZXldO1xuXHR9O1xufVxuZXhwb3J0IGZ1bmN0aW9uIEV4dGVuc2libGUob092ZXJyaWRlRXhlY3V0aW9uPzogT3ZlcnJpZGVFeGVjdXRpb24pIHtcblx0cmV0dXJuIGZ1bmN0aW9uKHRhcmdldDogYW55LCBwcm9wZXJ0eUtleTogc3RyaW5nKSB7XG5cdFx0Y29uc3QgbWV0YWRhdGEgPSBlbnN1cmVNZXRhZGF0YSh0YXJnZXQpO1xuXHRcdGlmICghbWV0YWRhdGEubWV0aG9kc1twcm9wZXJ0eUtleV0pIHtcblx0XHRcdG1ldGFkYXRhLm1ldGhvZHNbcHJvcGVydHlLZXldID0ge307XG5cdFx0fVxuXHRcdG1ldGFkYXRhLm1ldGhvZHNbcHJvcGVydHlLZXldLm92ZXJyaWRlRXhlY3V0aW9uID0gb092ZXJyaWRlRXhlY3V0aW9uO1xuXHR9O1xufVxuZXhwb3J0IGZ1bmN0aW9uIFB1YmxpYyh0YXJnZXQ6IGFueSwgcHJvcGVydHlLZXk6IHN0cmluZywgZGVzY3JpcHRvcjogYW55KTogYW55IHtcblx0Y29uc3QgbWV0YWRhdGEgPSBlbnN1cmVNZXRhZGF0YSh0YXJnZXQpO1xuXHRkZXNjcmlwdG9yLmVudW1lcmFibGUgPSB0cnVlO1xuXHRpZiAoIW1ldGFkYXRhLm1ldGhvZHNbcHJvcGVydHlLZXldKSB7XG5cdFx0bWV0YWRhdGEubWV0aG9kc1twcm9wZXJ0eUtleV0gPSB7fTtcblx0fVxuXHRtZXRhZGF0YS5tZXRob2RzW3Byb3BlcnR5S2V5XS5wdWJsaWMgPSB0cnVlO1xufVxuZXhwb3J0IGZ1bmN0aW9uIFByaXZhdGUodGFyZ2V0OiBhbnksIHByb3BlcnR5S2V5OiBzdHJpbmcsIGRlc2NyaXB0b3I6IGFueSkge1xuXHRjb25zdCBtZXRhZGF0YSA9IGVuc3VyZU1ldGFkYXRhKHRhcmdldCk7XG5cdGRlc2NyaXB0b3IuZW51bWVyYWJsZSA9IHRydWU7XG5cdGlmICghbWV0YWRhdGEubWV0aG9kc1twcm9wZXJ0eUtleV0pIHtcblx0XHRtZXRhZGF0YS5tZXRob2RzW3Byb3BlcnR5S2V5XSA9IHt9O1xuXHR9XG5cdG1ldGFkYXRhLm1ldGhvZHNbcHJvcGVydHlLZXldLnB1YmxpYyA9IGZhbHNlO1xufVxuZXhwb3J0IGZ1bmN0aW9uIEZpbmFsKHRhcmdldDogYW55LCBwcm9wZXJ0eUtleTogc3RyaW5nLCBkZXNjcmlwdG9yOiBhbnkpIHtcblx0Y29uc3QgbWV0YWRhdGEgPSBlbnN1cmVNZXRhZGF0YSh0YXJnZXQpO1xuXHRkZXNjcmlwdG9yLmVudW1lcmFibGUgPSB0cnVlO1xuXHRpZiAoIW1ldGFkYXRhLm1ldGhvZHNbcHJvcGVydHlLZXldKSB7XG5cdFx0bWV0YWRhdGEubWV0aG9kc1twcm9wZXJ0eUtleV0gPSB7fTtcblx0fVxuXHRtZXRhZGF0YS5tZXRob2RzW3Byb3BlcnR5S2V5XS5maW5hbCA9IHRydWU7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBFdmVudCh0YXJnZXQ6IGFueSwgZXZlbnRLZXk6IHN0cmluZykge1xuXHRjb25zdCBtZXRhZGF0YSA9IGVuc3VyZU1ldGFkYXRhKHRhcmdldCk7XG5cdGlmICghbWV0YWRhdGEuZXZlbnRzW2V2ZW50S2V5XSkge1xuXHRcdG1ldGFkYXRhLmV2ZW50c1tldmVudEtleV0gPSB7fTtcblx0fVxufVxuXG5leHBvcnQgZnVuY3Rpb24gRXZlbnRIYW5kbGVyKHRhcmdldDogYW55LCBwcm9wZXJ0eWtleTogYW55KSB7XG5cdHRhcmdldC5jb25zdHJ1Y3Rvcltwcm9wZXJ0eWtleV0gPSBmdW5jdGlvbiguLi5hcmdzOiBhbnlbXSkge1xuXHRcdGNvbnN0IGN1cnJlbnRUYXJnZXQgPSB0YXJnZXQuY29uc3RydWN0b3IuZ2V0QVBJKGFyZ3NbMF0gYXMgVUk1RXZlbnQpO1xuXHRcdGN1cnJlbnRUYXJnZXRbcHJvcGVydHlrZXldKC4uLmFyZ3MpO1xuXHR9O1xufVxuXG5leHBvcnQgZnVuY3Rpb24gTWFjcm9Db250ZXh0KGJNZXRhTW9kZWxPYmplY3Q6IGJvb2xlYW4gPSBmYWxzZSk6IGFueSB7XG5cdHJldHVybiBQcm9wZXJ0eSh7IHR5cGU6IFwic2FwLnVpLm1vZGVsLkNvbnRleHRcIiwgbWFjcm9Db250ZXh0OiB0cnVlLCBtZXRhTW9kZWxPYmplY3Q6IGJNZXRhTW9kZWxPYmplY3QgfSk7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBVc2luZ0V4dGVuc2lvbihleHRlbnNpb25DbGFzczogYW55KTogYW55IHtcblx0cmV0dXJuIGZ1bmN0aW9uKHRhcmdldDogYW55LCBwcm9wZXJ0eUtleTogc3RyaW5nLCBwcm9wZXJ0eURlc2NyaXB0b3I6IFByb3BlcnR5RGVzY3JpcHRvcik6IGFueSB7XG5cdFx0Y29uc3QgbWV0YWRhdGEgPSBlbnN1cmVNZXRhZGF0YSh0YXJnZXQpO1xuXHRcdGRlbGV0ZSAocHJvcGVydHlEZXNjcmlwdG9yIGFzIGFueSkuaW5pdGlhbGl6ZXI7XG5cdFx0bWV0YWRhdGEuY29udHJvbGxlckV4dGVuc2lvbnNbcHJvcGVydHlLZXldID0gZXh0ZW5zaW9uQ2xhc3M7XG5cdFx0cmV0dXJuIHByb3BlcnR5RGVzY3JpcHRvcjtcblx0fTtcbn1cbmV4cG9ydCBmdW5jdGlvbiBQcm9wZXJ0eShvUHJvcGVydHlQYXJhbXM6IGFueSk6IGFueSB7XG5cdHJldHVybiBmdW5jdGlvbih0YXJnZXQ6IGFueSwgcHJvcGVydHlLZXk6IHN0cmluZywgcHJvcGVydHlEZXNjcmlwdG9yOiBQcm9wZXJ0eURlc2NyaXB0b3IpOiBhbnkge1xuXHRcdGNvbnN0IG1ldGFkYXRhID0gZW5zdXJlTWV0YWRhdGEodGFyZ2V0KTtcblx0XHRpZiAob1Byb3BlcnR5UGFyYW1zPy5tYWNyb0NvbnRleHQpIHtcblx0XHRcdGlmICghbWV0YWRhdGEubWFjcm9Db250ZXh0c1twcm9wZXJ0eUtleV0pIHtcblx0XHRcdFx0bWV0YWRhdGEubWFjcm9Db250ZXh0c1twcm9wZXJ0eUtleV0gPSBvUHJvcGVydHlQYXJhbXM7XG5cdFx0XHR9XG5cdFx0fVxuXHRcdGlmICghbWV0YWRhdGEucHJvcGVydGllc1twcm9wZXJ0eUtleV0pIHtcblx0XHRcdG1ldGFkYXRhLnByb3BlcnRpZXNbcHJvcGVydHlLZXldID0gb1Byb3BlcnR5UGFyYW1zO1xuXHRcdH1cblx0XHRkZWxldGUgcHJvcGVydHlEZXNjcmlwdG9yLndyaXRhYmxlO1xuXHRcdGRlbGV0ZSAocHJvcGVydHlEZXNjcmlwdG9yIGFzIGFueSkuaW5pdGlhbGl6ZXI7XG5cdFx0Ly8gKHByb3BlcnR5RGVzY3JpcHRvciBhcyBhbnkpLnNldCA9IGZ1bmN0aW9uKHY6IGFueSkge1xuXHRcdC8vIFx0cmV0dXJuIHRoaXMuc2V0UHJvcGVydHkocHJvcGVydHlLZXksIHYpO1xuXHRcdC8vIH07XG5cdFx0Ly8gKHByb3BlcnR5RGVzY3JpcHRvciBhcyBhbnkpLmdldCA9IGZ1bmN0aW9uKCkge1xuXHRcdC8vIFx0cmV0dXJuIHRoaXMuZ2V0UHJvcGVydHkocHJvcGVydHlLZXkpO1xuXHRcdC8vIH07XG5cblx0XHRyZXR1cm4gcHJvcGVydHlEZXNjcmlwdG9yO1xuXHR9O1xufVxuXG5leHBvcnQgZnVuY3Rpb24gQWdncmVnYXRpb24ob0FnZ3JlZ2F0aW9uRGVzY3JpcHRvcj86IGFueSk6IGFueSB7XG5cdHJldHVybiBmdW5jdGlvbih0YXJnZXQ6IGFueSwgcHJvcGVydHlLZXk6IHN0cmluZywgcHJvcGVydHlEZXNjcmlwdG9yOiBQcm9wZXJ0eURlc2NyaXB0b3IpOiBhbnkge1xuXHRcdGNvbnN0IG1ldGFkYXRhID0gZW5zdXJlTWV0YWRhdGEodGFyZ2V0KTtcblx0XHRpZiAoIW1ldGFkYXRhLmFnZ3JlZ2F0aW9uc1twcm9wZXJ0eUtleV0pIHtcblx0XHRcdG1ldGFkYXRhLmFnZ3JlZ2F0aW9uc1twcm9wZXJ0eUtleV0gPSBvQWdncmVnYXRpb25EZXNjcmlwdG9yO1xuXHRcdH1cblx0XHRpZiAob0FnZ3JlZ2F0aW9uRGVzY3JpcHRvci5pc0RlZmF1bHQpIHtcblx0XHRcdG1ldGFkYXRhLmRlZmF1bHRBZ2dyZWdhdGlvbiA9IHByb3BlcnR5S2V5O1xuXHRcdH1cblx0XHRkZWxldGUgcHJvcGVydHlEZXNjcmlwdG9yLndyaXRhYmxlO1xuXHRcdGRlbGV0ZSAocHJvcGVydHlEZXNjcmlwdG9yIGFzIGFueSkuaW5pdGlhbGl6ZXI7XG5cdFx0Ly8gKHByb3BlcnR5RGVzY3JpcHRvciBhcyBhbnkpLnNldCA9IGZ1bmN0aW9uKHY6IGFueSkge1xuXHRcdC8vIFx0cmV0dXJuIHRoaXMuc2V0QWdncmVnYXRpb24ocHJvcGVydHlLZXksIHYpO1xuXHRcdC8vIH07XG5cdFx0Ly8gKHByb3BlcnR5RGVzY3JpcHRvciBhcyBhbnkpLmdldCA9IGZ1bmN0aW9uKCkge1xuXHRcdC8vIFx0cmV0dXJuIHRoaXMuZ2V0QWdncmVnYXRpb24ocHJvcGVydHlLZXkpO1xuXHRcdC8vIH07XG5cblx0XHRyZXR1cm4gcHJvcGVydHlEZXNjcmlwdG9yO1xuXHR9O1xufVxuXG5leHBvcnQgZnVuY3Rpb24gQXNzb2NpYXRpb24ob0Fzc29jaWF0aW9uRGVzY3JpcHRpb24/OiBhbnkpOiBhbnkge1xuXHRyZXR1cm4gZnVuY3Rpb24odGFyZ2V0OiBhbnksIHByb3BlcnR5S2V5OiBzdHJpbmcsIHByb3BlcnR5RGVzY3JpcHRvcjogUHJvcGVydHlEZXNjcmlwdG9yKTogYW55IHtcblx0XHRjb25zdCBtZXRhZGF0YSA9IGVuc3VyZU1ldGFkYXRhKHRhcmdldCk7XG5cdFx0aWYgKCFtZXRhZGF0YS5hc3NvY2lhdGlvbnNbcHJvcGVydHlLZXldKSB7XG5cdFx0XHRtZXRhZGF0YS5hc3NvY2lhdGlvbnNbcHJvcGVydHlLZXldID0gb0Fzc29jaWF0aW9uRGVzY3JpcHRpb247XG5cdFx0fVxuXHRcdGRlbGV0ZSBwcm9wZXJ0eURlc2NyaXB0b3Iud3JpdGFibGU7XG5cdFx0ZGVsZXRlIChwcm9wZXJ0eURlc2NyaXB0b3IgYXMgYW55KS5pbml0aWFsaXplcjtcblx0XHQvLyAocHJvcGVydHlEZXNjcmlwdG9yIGFzIGFueSkuc2V0ID0gZnVuY3Rpb24odjogYW55KSB7XG5cdFx0Ly8gXHRyZXR1cm4gdGhpcy5zZXRBZ2dyZWdhdGlvbihwcm9wZXJ0eUtleSwgdik7XG5cdFx0Ly8gfTtcblx0XHQvLyAocHJvcGVydHlEZXNjcmlwdG9yIGFzIGFueSkuZ2V0ID0gZnVuY3Rpb24oKSB7XG5cdFx0Ly8gXHRyZXR1cm4gdGhpcy5nZXRBZ2dyZWdhdGlvbihwcm9wZXJ0eUtleSk7XG5cdFx0Ly8gfTtcblxuXHRcdHJldHVybiBwcm9wZXJ0eURlc2NyaXB0b3I7XG5cdH07XG59XG50eXBlIENvbnRyb2xQcm9wZXJ0eU5hbWVzPFQ+ID0ge1xuXHRbSyBpbiBrZXlvZiBUXTogVFtLXSBleHRlbmRzIEZ1bmN0aW9uID8gbmV2ZXIgOiBLO1xufVtrZXlvZiBUXTtcbmV4cG9ydCB0eXBlIFByb3BlcnRpZXNPZjxUPiA9IFBhcnRpYWw8UGljazxULCBDb250cm9sUHJvcGVydHlOYW1lczxUPj4+O1xuXG4vKipcbiAqIERlY29yYXRvciB0byBwcm92aWRlIGEgbmV3IEFQSSBjbGFzcyB0byBiZSB1c2VkIGluIHRoZSBtYWNyb3MuXG4gKlxuICogQHBhcmFtIHNUYXJnZXQgVGhlIGZ1bGx5IHF1YWxpZmllZCBuYW1lIG9mIHRoZSBtYWNybyBBUElcbiAqIEBwYXJhbSBpc0RlcGVuZGVudEJvdW5kIFdoZXRoZXIgdGhpcyBBUEkgd2lsbCBiZSB1c2VkIGFzIGEgZGVwZW5kZW50IG9yIG5vdFxuICogQGNsYXNzXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBBUElDbGFzcyhzVGFyZ2V0OiBzdHJpbmcsIGlzRGVwZW5kZW50Qm91bmQgPSBmYWxzZSkge1xuXHRyZXR1cm4gZnVuY3Rpb24oY29uc3RydWN0b3I6IEZ1bmN0aW9uKSB7XG5cdFx0aWYgKCFjb25zdHJ1Y3Rvci5wcm90b3R5cGUubWV0YWRhdGEpIHtcblx0XHRcdGNvbnN0cnVjdG9yLnByb3RvdHlwZS5tZXRhZGF0YSA9IHt9O1xuXHRcdH1cblxuXHRcdGlmICghY29uc3RydWN0b3IucHJvdG90eXBlLm1ldGFkYXRhLmludGVyZmFjZXMpIHtcblx0XHRcdGNvbnN0cnVjdG9yLnByb3RvdHlwZS5tZXRhZGF0YS5pbnRlcmZhY2VzID0gW107XG5cdFx0fVxuXHRcdGNvbnN0cnVjdG9yLnByb3RvdHlwZS5tZXRhZGF0YS5pbnRlcmZhY2VzLnB1c2goXCJzYXAudWkuY29yZS5JRm9ybUNvbnRlbnRcIik7XG5cdFx0KGNvbnN0cnVjdG9yIGFzIGFueSkuaXNEZXBlbmRlbnRCb3VuZCA9IGlzRGVwZW5kZW50Qm91bmQ7XG5cdFx0aWYgKCFjb25zdHJ1Y3Rvci5wcm90b3R5cGUucmVuZGVyZXIpIHtcblx0XHRcdGNvbnN0cnVjdG9yLnByb3RvdHlwZS5yZW5kZXJlciA9IHtcblx0XHRcdFx0YXBpVmVyc2lvbjogMixcblx0XHRcdFx0cmVuZGVyOiBmdW5jdGlvbihvUm06IFJlbmRlck1hbmFnZXIsIG9Db250cm9sOiBhbnkpIHtcblx0XHRcdFx0XHRvUm0ucmVuZGVyQ29udHJvbChvQ29udHJvbC5nZXRDb250ZW50KCkpO1xuXHRcdFx0XHR9XG5cdFx0XHR9O1xuXHRcdH1cblxuXHRcdGRlc2NyaWJlKGNvbnN0cnVjdG9yLCBzVGFyZ2V0LCBjb25zdHJ1Y3Rvci5wcm90b3R5cGUsIEVsZW1lbnRNZXRhZGF0YSk7XG5cdH07XG59XG5leHBvcnQgZnVuY3Rpb24gVUk1Q2xhc3Moc1RhcmdldDogc3RyaW5nLCBtZXRhZGF0YUNsYXNzPzogYW55LCBtZXRhZGF0YURlZmluaXRpb24/OiBhbnksIHVzZUV4dGVuZDogYm9vbGVhbiA9IHRydWUpIHtcblx0cmV0dXJuIGZ1bmN0aW9uKGNvbnN0cnVjdG9yOiBGdW5jdGlvbikge1xuXHRcdGlmICghY29uc3RydWN0b3IucHJvdG90eXBlLm1ldGFkYXRhKSB7XG5cdFx0XHRjb25zdHJ1Y3Rvci5wcm90b3R5cGUubWV0YWRhdGEgPSB7fTtcblx0XHR9XG5cdFx0aWYgKG1ldGFkYXRhRGVmaW5pdGlvbikge1xuXHRcdFx0T2JqZWN0LmtleXMobWV0YWRhdGFEZWZpbml0aW9uKS5mb3JFYWNoKGtleSA9PiB7XG5cdFx0XHRcdGNvbnN0cnVjdG9yLnByb3RvdHlwZS5tZXRhZGF0YVtrZXldID0gbWV0YWRhdGFEZWZpbml0aW9uW2tleV07XG5cdFx0XHR9KTtcblx0XHR9XG5cdFx0cmV0dXJuIGRlc2NyaWJlKGNvbnN0cnVjdG9yLCBzVGFyZ2V0LCBjb25zdHJ1Y3Rvci5wcm90b3R5cGUsIG1ldGFkYXRhQ2xhc3MsIHVzZUV4dGVuZCk7XG5cdH07XG59XG5mdW5jdGlvbiBkZXNjcmliZShjbGF6ejogYW55LCBuYW1lOiBzdHJpbmcsIGluT2JqOiBhbnksIG1ldGFkYXRhQ2xhc3M/OiBhbnksIHVzZUV4dGVuZDogYm9vbGVhbiA9IHRydWUpIHtcblx0aWYgKG1ldGFkYXRhQ2xhc3MgPT09IENvbnRyb2xsZXJFeHRlbnNpb25NZXRhZGF0YSkge1xuXHRcdE9iamVjdC5nZXRPd25Qcm9wZXJ0eU5hbWVzKGluT2JqKS5mb3JFYWNoKG9iak5hbWUgPT4ge1xuXHRcdFx0Y29uc3QgZGVzY3JpcHRvciA9IE9iamVjdC5nZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3IoaW5PYmosIG9iak5hbWUpO1xuXHRcdFx0aWYgKGRlc2NyaXB0b3IgJiYgIWRlc2NyaXB0b3IuZW51bWVyYWJsZSkge1xuXHRcdFx0XHRkZXNjcmlwdG9yLmVudW1lcmFibGUgPSB0cnVlO1xuXHRcdFx0XHQvL1x0XHRMb2cuZXJyb3IoYFByb3BlcnR5ICR7b2JqTmFtZX0gZnJvbSAke25hbWV9IHNob3VsZCBiZSBkZWNvcmF0ZWQgYXMgcHVibGljYCk7XG5cdFx0XHR9XG5cdFx0fSk7XG5cdH1cblx0Y29uc3Qgb2JqOiBhbnkgPSB7fTtcblx0b2JqLm1ldGFkYXRhID0gaW5PYmoubWV0YWRhdGEgfHwge307XG5cdG9iai5vdmVycmlkZSA9IGluT2JqLm92ZXJyaWRlO1xuXHRvYmouY29uc3RydWN0b3IgPSBjbGF6ejtcblx0b2JqLm1ldGFkYXRhLmJhc2VUeXBlID0gT2JqZWN0LmdldFByb3RvdHlwZU9mKGNsYXp6LnByb3RvdHlwZSlcblx0XHQuZ2V0TWV0YWRhdGEoKVxuXHRcdC5nZXROYW1lKCk7XG5cblx0Y29uc3QgcmVuZGVyZXJEZWZpbml0aW9uID0gaW5PYmoucmVuZGVyZXIgfHwgY2xhenoucmVuZGVyZXI7XG5cdG9iai5yZW5kZXJlciA9IHsgYXBpVmVyc2lvbjogMiB9O1xuXHRpZiAodHlwZW9mIHJlbmRlcmVyRGVmaW5pdGlvbiA9PT0gXCJmdW5jdGlvblwiKSB7XG5cdFx0b2JqLnJlbmRlcmVyLnJlbmRlciA9IHJlbmRlcmVyRGVmaW5pdGlvbjtcblx0fSBlbHNlIGlmIChyZW5kZXJlckRlZmluaXRpb24gIT0gdW5kZWZpbmVkKSB7XG5cdFx0b2JqLnJlbmRlcmVyID0gcmVuZGVyZXJEZWZpbml0aW9uO1xuXHR9XG5cdG9iai5tZXRhZGF0YS5pbnRlcmZhY2VzID0gaW5PYmoubWV0YWRhdGE/LmludGVyZmFjZXMgfHwgY2xhenoubWV0YWRhdGE/LmludGVyZmFjZXM7XG5cdGlmICh1c2VFeHRlbmQpIHtcblx0XHRPYmplY3Qua2V5cyhjbGF6ei5wcm90b3R5cGUpLmZvckVhY2goa2V5ID0+IHtcblx0XHRcdGlmIChrZXkgIT09IFwibWV0YWRhdGFcIikge1xuXHRcdFx0XHR0cnkge1xuXHRcdFx0XHRcdG9ialtrZXldID0gY2xhenoucHJvdG90eXBlW2tleV07XG5cdFx0XHRcdH0gY2F0Y2ggKGUpIHtcblx0XHRcdFx0XHQvL2NvbnNvbGUubG9nKGUpO1xuXHRcdFx0XHR9XG5cdFx0XHR9XG5cdFx0fSk7XG5cdH1cblx0aWYgKG9iai5tZXRhZGF0YT8uY29udHJvbGxlckV4dGVuc2lvbnMgJiYgT2JqZWN0LmtleXMob2JqLm1ldGFkYXRhLmNvbnRyb2xsZXJFeHRlbnNpb25zKS5sZW5ndGggPiAwKSB7XG5cdFx0Zm9yIChjb25zdCBjRXh0TmFtZSBpbiBvYmoubWV0YWRhdGEuY29udHJvbGxlckV4dGVuc2lvbnMpIHtcblx0XHRcdG9ialtjRXh0TmFtZV0gPSBvYmoubWV0YWRhdGEuY29udHJvbGxlckV4dGVuc2lvbnNbY0V4dE5hbWVdO1xuXHRcdH1cblx0fVxuXHRsZXQgb3V0cHV0ID0gY2xheno7XG5cdGlmICh1c2VFeHRlbmQpIHtcblx0XHRvdXRwdXQgPSBjbGF6ei5leHRlbmQobmFtZSwgb2JqLCBtZXRhZGF0YUNsYXNzKTtcblx0XHRjb25zdCBmbkluaXQgPSBvdXRwdXQucHJvdG90eXBlLmluaXQ7XG5cdFx0b3V0cHV0LnByb3RvdHlwZS5pbml0ID0gZnVuY3Rpb24oLi4uYXJnczogYW55W10pIHtcblx0XHRcdGZuSW5pdCAmJiBmbkluaXQuYXBwbHkodGhpcywgYXJncyk7XG5cdFx0XHR0aGlzLm1ldGFkYXRhID0gb2JqLm1ldGFkYXRhO1xuXG5cdFx0XHRpZiAob2JqLm1ldGFkYXRhLnByb3BlcnRpZXMpIHtcblx0XHRcdFx0Y29uc3QgYVByb3BlcnR5S2V5cyA9IE9iamVjdC5rZXlzKG9iai5tZXRhZGF0YS5wcm9wZXJ0aWVzKTtcblx0XHRcdFx0Ly8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIEB0eXBlc2NyaXB0LWVzbGludC9uby10aGlzLWFsaWFzXG5cdFx0XHRcdGNvbnN0IHRoYXQgPSB0aGlzO1xuXHRcdFx0XHRhUHJvcGVydHlLZXlzLmZvckVhY2gocHJvcGVydHlLZXkgPT4ge1xuXHRcdFx0XHRcdE9iamVjdC5kZWZpbmVQcm9wZXJ0eSh0aGF0LCBwcm9wZXJ0eUtleSwge1xuXHRcdFx0XHRcdFx0Y29uZmlndXJhYmxlOiB0cnVlLFxuXHRcdFx0XHRcdFx0c2V0OiAodjogYW55KSA9PiB7XG5cdFx0XHRcdFx0XHRcdHJldHVybiB0aGF0LnNldFByb3BlcnR5KHByb3BlcnR5S2V5LCB2KTtcblx0XHRcdFx0XHRcdH0sXG5cdFx0XHRcdFx0XHRnZXQ6ICgpID0+IHtcblx0XHRcdFx0XHRcdFx0cmV0dXJuIHRoYXQuZ2V0UHJvcGVydHkocHJvcGVydHlLZXkpO1xuXHRcdFx0XHRcdFx0fVxuXHRcdFx0XHRcdH0pO1xuXHRcdFx0XHR9KTtcblx0XHRcdFx0Y29uc3QgYUFnZ3JlZ2F0aW9uS2V5cyA9IE9iamVjdC5rZXlzKG9iai5tZXRhZGF0YS5hZ2dyZWdhdGlvbnMpO1xuXHRcdFx0XHRhQWdncmVnYXRpb25LZXlzLmZvckVhY2goYWdncmVnYXRpb25LZXkgPT4ge1xuXHRcdFx0XHRcdE9iamVjdC5kZWZpbmVQcm9wZXJ0eSh0aGF0LCBhZ2dyZWdhdGlvbktleSwge1xuXHRcdFx0XHRcdFx0Y29uZmlndXJhYmxlOiB0cnVlLFxuXHRcdFx0XHRcdFx0c2V0OiAodjogYW55KSA9PiB7XG5cdFx0XHRcdFx0XHRcdHJldHVybiB0aGF0LnNldEFnZ3JlZ2F0aW9uKGFnZ3JlZ2F0aW9uS2V5LCB2KTtcblx0XHRcdFx0XHRcdH0sXG5cdFx0XHRcdFx0XHRnZXQ6ICgpID0+IHtcblx0XHRcdFx0XHRcdFx0cmV0dXJuIHRoYXQuZ2V0QWdncmVnYXRpb24oYWdncmVnYXRpb25LZXkpO1xuXHRcdFx0XHRcdFx0fVxuXHRcdFx0XHRcdH0pO1xuXHRcdFx0XHR9KTtcblx0XHRcdH1cblx0XHR9O1xuXHR9IGVsc2Uge1xuXHRcdGxldCBtZXRhZGF0YTogYW55O1xuXHRcdGlmIChtZXRhZGF0YUNsYXNzKSB7XG5cdFx0XHRtZXRhZGF0YSA9IG5ldyBtZXRhZGF0YUNsYXNzKG5hbWUsIG9iaik7XG5cdFx0fSBlbHNlIHtcblx0XHRcdG1ldGFkYXRhID0gbmV3IEVsZW1lbnRNZXRhZGF0YShuYW1lLCBvYmopO1xuXHRcdH1cblx0XHRjbGF6ei5nZXRNZXRhZGF0YSA9IGNsYXp6LnByb3RvdHlwZS5nZXRNZXRhZGF0YSA9IGZ1bmN0aW9uKCkge1xuXHRcdFx0cmV0dXJuIG1ldGFkYXRhO1xuXHRcdH07XG5cdFx0aWYgKCFjbGF6ei5nZXRNZXRhZGF0YSgpLmlzRmluYWwoKSkge1xuXHRcdFx0Y2xhenouZXh0ZW5kID0gZnVuY3Rpb24oc1NDTmFtZTogc3RyaW5nLCBvU0NDbGFzc0luZm86IGFueSwgZm5TQ01ldGFJbXBsOiBGdW5jdGlvbikge1xuXHRcdFx0XHQvLyB0aGUgZGVmYXVsdCBjb25zdHJ1Y3RvciBjcmVhdGVkIGJ5IHVpNSBkb2VzIG5vdCByZXR1cm4gdGhlIHZhbHVlIHdoaWNoIGlzIHByb2JsZW1hdGljIHdpdGggVFNcblx0XHRcdFx0b1NDQ2xhc3NJbmZvLmNvbnN0cnVjdG9yID0gZnVuY3Rpb24oLi4uYXJnczogYW55W10pIHtcblx0XHRcdFx0XHRyZXR1cm4gY2xhenouYXBwbHkodGhpcywgYXJncyk7XG5cdFx0XHRcdH07XG5cblx0XHRcdFx0Y29uc3QgZm5DbGFzcyA9IChNZXRhZGF0YSBhcyBhbnkpLmNyZWF0ZUNsYXNzKFxuXHRcdFx0XHRcdGNsYXp6LFxuXHRcdFx0XHRcdHNTQ05hbWUsXG5cdFx0XHRcdFx0b1NDQ2xhc3NJbmZvLFxuXHRcdFx0XHRcdGZuU0NNZXRhSW1wbCB8fCBtZXRhZGF0YUNsYXNzIHx8IEVsZW1lbnRNZXRhZGF0YVxuXHRcdFx0XHQpO1xuXHRcdFx0XHQvLyBmbkNsYXNzLnByb3RvdHlwZS5jb25zdHJ1Y3RvciA9IGZ1bmN0aW9uKC4uLmFyZ3M6IGFueVtdKSB7XG5cdFx0XHRcdC8vIFx0cmV0dXJuIGNsYXp6LmFwcGx5KHRoaXMsIC4uLmFyZ3MpO1xuXHRcdFx0XHQvLyB9O1xuXHRcdFx0XHRyZXR1cm4gZm5DbGFzcztcblx0XHRcdH07XG5cdFx0fVxuXHR9XG5cdGNsYXp6Lm92ZXJyaWRlID0gZnVuY3Rpb24ob0V4dGVuc2lvbjogYW55KSB7XG5cdFx0Y29uc3QgcG9sID0ge307XG5cdFx0KHBvbCBhcyBhbnkpLmNvbnN0cnVjdG9yID0gZnVuY3Rpb24oLi4uYXJnczogYW55W10pIHtcblx0XHRcdHJldHVybiBjbGF6ei5hcHBseSh0aGlzLCBhcmdzIGFzIGFueSk7XG5cdFx0fTtcblx0XHRjb25zdCBvQ2xhc3MgPSAoTWV0YWRhdGEgYXMgYW55KS5jcmVhdGVDbGFzcyhjbGF6eiwgXCJhbm9ueW1vdXNFeHRlbnNpb25+XCIgKyB1aWQoKSwgcG9sLCBDb250cm9sbGVyTWV0YWRhdGEpO1xuXHRcdG9DbGFzcy5nZXRNZXRhZGF0YSgpLl9zdGF0aWNPdmVycmlkZSA9IG9FeHRlbnNpb247XG5cdFx0b0NsYXNzLmdldE1ldGFkYXRhKCkuX292ZXJyaWRlID0gKGNsYXp6LmdldE1ldGFkYXRhKCkgYXMgYW55KS5fb3ZlcnJpZGU7XG5cdFx0cmV0dXJuIG9DbGFzcztcblx0fTtcblxuXHRjb25zdCBmbkluaXQgPSBjbGF6ei5wcm90b3R5cGUuaW5pdDtcblx0b3V0cHV0LnByb3RvdHlwZS5pbml0ID0gZnVuY3Rpb24oLi4uYXJnczogYW55W10pIHtcblx0XHRmbkluaXQgJiYgZm5Jbml0LmFwcGx5KHRoaXMsIGFyZ3MpO1xuXHRcdGlmIChvYmoubWV0YWRhdGEucHJvcGVydGllcykge1xuXHRcdFx0Y29uc3QgYVByb3BlcnR5S2V5cyA9IE9iamVjdC5rZXlzKG9iai5tZXRhZGF0YS5wcm9wZXJ0aWVzKTtcblx0XHRcdC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBAdHlwZXNjcmlwdC1lc2xpbnQvbm8tdGhpcy1hbGlhc1xuXHRcdFx0Y29uc3QgdGhhdCA9IHRoaXM7XG5cdFx0XHRhUHJvcGVydHlLZXlzLmZvckVhY2gocHJvcGVydHlLZXkgPT4ge1xuXHRcdFx0XHRPYmplY3QuZGVmaW5lUHJvcGVydHkodGhhdCwgcHJvcGVydHlLZXksIHtcblx0XHRcdFx0XHRjb25maWd1cmFibGU6IHRydWUsXG5cdFx0XHRcdFx0c2V0OiAodjogYW55KSA9PiB7XG5cdFx0XHRcdFx0XHRyZXR1cm4gdGhhdC5zZXRQcm9wZXJ0eShwcm9wZXJ0eUtleSwgdik7XG5cdFx0XHRcdFx0fSxcblx0XHRcdFx0XHRnZXQ6ICgpID0+IHtcblx0XHRcdFx0XHRcdHJldHVybiB0aGF0LmdldFByb3BlcnR5KHByb3BlcnR5S2V5KTtcblx0XHRcdFx0XHR9XG5cdFx0XHRcdH0pO1xuXHRcdFx0fSk7XG5cdFx0fVxuXHR9O1xuXHRPYmplY3RQYXRoLnNldChuYW1lLCBvdXRwdXQpO1xuXHRyZXR1cm4gb3V0cHV0O1xufVxuIl19
467
+ //# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIkNsYXNzU3VwcG9ydC50cyJdLCJuYW1lcyI6WyJlbnN1cmVNZXRhZGF0YSIsInRhcmdldCIsIm1ldGFkYXRhIiwibWVyZ2UiLCJjb250cm9sbGVyRXh0ZW5zaW9ucyIsInByb3BlcnRpZXMiLCJtYWNyb0NvbnRleHRzIiwiYWdncmVnYXRpb25zIiwiYXNzb2NpYXRpb25zIiwibWV0aG9kcyIsImV2ZW50cyIsImludGVyZmFjZXMiLCJtZXRob2RPdmVycmlkZSIsImV4dGVuc2lvbk5hbWUiLCJwcm9wZXJ0eUtleSIsIm92ZXJyaWRlIiwiY3VycmVudFRhcmdldCIsImV4dGVuc2lvbiIsInRvU3RyaW5nIiwiZXh0ZW5zaWJsZSIsIm92ZXJyaWRlRXhlY3V0aW9uVHlwZSIsIm92ZXJyaWRlRXhlY3V0aW9uIiwicHVibGljRXh0ZW5zaW9uIiwiZGVzY3JpcHRvciIsImVudW1lcmFibGUiLCJwdWJsaWMiLCJwcml2YXRlRXh0ZW5zaW9uIiwiZmluYWxFeHRlbnNpb24iLCJmaW5hbCIsInVzaW5nRXh0ZW5zaW9uIiwiZXh0ZW5zaW9uQ2xhc3MiLCJwcm9wZXJ0eURlc2NyaXB0b3IiLCJpbml0aWFsaXplciIsImV2ZW50IiwiZXZlbnRLZXkiLCJwcm9wZXJ0eSIsInVpNVByb3BlcnR5TWV0YWRhdGEiLCJ3cml0YWJsZSIsImFnZ3JlZ2F0aW9uIiwidWk1QWdncmVnYXRpb25NZXRhZGF0YSIsIm11bHRpcGxlIiwidW5kZWZpbmVkIiwiaXNEZWZhdWx0IiwiZGVmYXVsdEFnZ3JlZ2F0aW9uIiwiYXNzb2NpYXRpb24iLCJ1aTVBc3NvY2lhdGlvbk1ldGFkYXRhIiwiaW1wbGVtZW50SW50ZXJmYWNlIiwiaW50ZXJmYWNlTmFtZSIsInB1c2giLCJ4bWxFdmVudEhhbmRsZXIiLCJwcm9wZXJ0eWtleSIsImN1cnJlbnRDb25zdHJ1Y3RvciIsImNvbnN0cnVjdG9yIiwiZ2V0QVBJIiwiZGVmaW5lVUk1Q2xhc3MiLCJzVGFyZ2V0IiwibWV0YWRhdGFEZWZpbml0aW9uIiwicHJvdG90eXBlIiwia2V5IiwicmVnaXN0ZXJVSTVNZXRhZGF0YSIsImNsYXp6IiwibmFtZSIsImluT2JqIiwiZ2V0TWV0YWRhdGEiLCJpc0EiLCJPYmplY3QiLCJnZXRPd25Qcm9wZXJ0eU5hbWVzIiwiZm9yRWFjaCIsIm9iak5hbWUiLCJnZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3IiLCJvYmoiLCJiYXNlVHlwZSIsImdldFByb3RvdHlwZU9mIiwiZ2V0TmFtZSIsImdldFN0ZXJlb3R5cGUiLCJyZW5kZXJlckRlZmluaXRpb24iLCJyZW5kZXJlciIsInJlbmRlciIsImFwaVZlcnNpb24iLCJrZXlzIiwiZSIsImxlbmd0aCIsImNFeHROYW1lIiwib3V0cHV0IiwiZXh0ZW5kIiwiZm5Jbml0IiwiaW5pdCIsImFyZ3MiLCJhcHBseSIsImFQcm9wZXJ0eUtleXMiLCJkZWZpbmVQcm9wZXJ0eSIsImNvbmZpZ3VyYWJsZSIsInNldCIsInYiLCJzZXRQcm9wZXJ0eSIsImdldCIsImdldFByb3BlcnR5IiwiYUFnZ3JlZ2F0aW9uS2V5cyIsImFnZ3JlZ2F0aW9uS2V5Iiwic2V0QWdncmVnYXRpb24iLCJhZ2dyZWdhdGlvbkNvbnRlbnQiLCJnZXRBZ2dyZWdhdGlvbiIsImFBc3NvY2lhdGlvbktleXMiLCJhc3NvY2lhdGlvbktleSIsInNldEFzc29jaWF0aW9uIiwiZ2V0QXNzb2NpYXRpb24iLCJvRXh0ZW5zaW9uIiwicG9sIiwib0NsYXNzIiwiTWV0YWRhdGEiLCJjcmVhdGVDbGFzcyIsInVpZCIsIkNvbnRyb2xsZXJNZXRhZGF0YSIsIl9zdGF0aWNPdmVycmlkZSIsIl9vdmVycmlkZSIsIk9iamVjdFBhdGgiXSwibWFwcGluZ3MiOiI7QUFBQTtBQUNBO0FBQ0E7Ozs7OztBQW1FQSxNQUFNQSxjQUFjLEdBQUcsVUFBVUMsTUFBVixFQUFpQztBQUN2REEsSUFBQUEsTUFBTSxDQUFDQyxRQUFQLEdBQWtCQyxLQUFLLENBQ3RCO0FBQ0NDLE1BQUFBLG9CQUFvQixFQUFFLEVBRHZCO0FBRUNDLE1BQUFBLFVBQVUsRUFBRSxF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QkQsSUFBbEIsQ0FBUDtBQUNBLE9BRkQ7O0FBR0EsVUFBTXFCLE1BQU0sR0FBSUMsUUFBRCxDQUFrQkMsV0FBbEIsQ0FBOEJsRCxLQUE5QixFQUFxQyx3QkFBd0JtRCxHQUFHLEVBQWhFLEVBQW9FSixHQUFwRSxFQUF5RUssa0JBQXpFLENBQWY7QUFDQUosTUFBQUEsTUFBTSxDQUFDN0MsV0FBUCxHQUFxQmtELGVBQXJCLEdBQXVDUCxVQUF2QztBQUNBRSxNQUFBQSxNQUFNLENBQUM3QyxXQUFQLEdBQXFCbUQsU0FBckIsR0FBa0N0RCxLQUFLLENBQUNHLFdBQU4sRUFBRCxDQUE2Qm1ELFNBQTlEO0FBQ0EsYUFBT04sTUFBUDtBQUNBLEtBVEQ7O0FBV0FPLElBQUFBLFVBQVUsQ0FBQ3ZCLEdBQVgsQ0FBZS9CLElBQWYsRUFBcUJzQixNQUFyQjtBQUNBLFdBQU9BLE1BQVA7QUFDQSIsInNvdXJjZVJvb3QiOiIuIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IG1lcmdlIGZyb20gXCJzYXAvYmFzZS91dGlsL21lcmdlXCI7XG5pbXBvcnQgT2JqZWN0UGF0aCBmcm9tIFwic2FwL2Jhc2UvdXRpbC9PYmplY3RQYXRoXCI7XG5pbXBvcnQgdWlkIGZyb20gXCJzYXAvYmFzZS91dGlsL3VpZFwiO1xuaW1wb3J0IFVJNUV2ZW50IGZyb20gXCJzYXAvdWkvYmFzZS9FdmVudFwiO1xuaW1wb3J0IE1ldGFkYXRhIGZyb20gXCJzYXAvdWkvYmFzZS9NZXRhZGF0YVwiO1xuaW1wb3J0IENvbnRyb2xsZXJFeHRlbnNpb24gZnJvbSBcInNhcC91aS9jb3JlL212Yy9Db250cm9sbGVyRXh0ZW5zaW9uXCI7XG5pbXBvcnQgQ29udHJvbGxlck1ldGFkYXRhIGZyb20gXCJzYXAvdWkvY29yZS9tdmMvQ29udHJvbGxlck1ldGFkYXRhXCI7XG5pbXBvcnQgT3ZlcnJpZGVFeGVjdXRpb24gZnJvbSBcInNhcC91aS9jb3JlL212Yy9PdmVycmlkZUV4ZWN1dGlvblwiO1xuXG50eXBlIE92ZXJyaWRlRGVmaW5pdGlvbiA9IFJlY29yZDxzdHJpbmcsIEZ1bmN0aW9uPjtcbnR5cGUgVUk1Q29udHJvbGxlck1ldGhvZERlZmluaXRpb24gPSB7XG5cdG92ZXJyaWRlRXhlY3V0aW9uPzogT3ZlcnJpZGVFeGVjdXRpb247XG5cdHB1YmxpYz86IGJvb2xlYW47XG5cdGZpbmFsPzogYm9vbGVhbjtcbn07XG50eXBlIFVJNVByb3BlcnR5TWV0YWRhdGEgPSB7XG5cdHR5cGU6IHN0cmluZztcblx0cmVxdWlyZWQ/OiBib29sZWFuO1xuXHRncm91cD86IHN0cmluZztcblx0ZGVmYXVsdFZhbHVlPzogYW55O1xufTtcbnR5cGUgVUk1QWdncmVnYXRpb25NZXRhZGF0YSA9IHtcblx0dHlwZTogc3RyaW5nO1xuXHRtdWx0aXBsZT86IGJvb2xlYW47XG5cdGlzRGVmYXVsdD86IGJvb2xlYW47XG5cdHNpbmd1bGFyTmFtZT86IHN0cmluZztcblx0dmlzaWJpbGl0eT86IHN0cmluZztcbn07XG50eXBlIFVJNUFzc29jaWF0aW9uTWV0YWRhdGEgPSB7XG5cdHR5cGU6IHN0cmluZztcblx0bXVsdGlwbGU/OiBib29sZWFuO1xuXHRzaW5ndWxhck5hbWU/OiBzdHJpbmc7XG59O1xudHlwZSBVSTVDb250cm9sTWV0YWRhdGFEZWZpbml0aW9uID0ge1xuXHRkZWZhdWx0QWdncmVnYXRpb24/OiBzdHJpbmc7XG5cdGNvbnRyb2xsZXJFeHRlbnNpb25zOiBSZWNvcmQ8c3RyaW5nLCB0eXBlb2YgQ29udHJvbGxlckV4dGVuc2lvbiB8IEZ1bmN0aW9uPjtcblx0cHJvcGVydGllczogUmVjb3JkPHN0cmluZywgVUk1UHJvcGVydHlNZXRhZGF0YT47XG5cdG1hY3JvQ29udGV4dHM6IFJlY29yZDxzdHJpbmcsIFVJNVByb3BlcnR5TWV0YWRhdGE+O1xuXHRhZ2dyZWdhdGlvbnM6IFJlY29yZDxzdHJpbmcsIFVJNUFnZ3JlZ2F0aW9uTWV0YWRhdGE+O1xuXHRhc3NvY2lhdGlvbnM6IFJlY29yZDxzdHJpbmcsIFVJNUFzc29jaWF0aW9uTWV0YWRhdGE+O1xuXHRtZXRob2RzOiBSZWNvcmQ8c3RyaW5nLCBVSTVDb250cm9sbGVyTWV0aG9kRGVmaW5pdGlvbj47XG5cdGV2ZW50czogUmVjb3JkPHN0cmluZywge30+O1xuXHRpbnRlcmZhY2VzOiBzdHJpbmdbXTtcbn07XG50eXBlIFVJNUNvbnRyb2xsZXIgPSB7XG5cdG92ZXJyaWRlPzogeyBleHRlbnNpb24/OiBSZWNvcmQ8c3RyaW5nLCBPdmVycmlkZURlZmluaXRpb24+IH0gJiB7XG5cdFx0W2s6IHN0cmluZ106IEZ1bmN0aW9uO1xuXHR9O1xuXHRtZXRhZGF0YT86IFVJNUNvbnRyb2xNZXRhZGF0YURlZmluaXRpb247XG59O1xuXG50eXBlIFVJNUNvbnRyb2wgPSB7XG5cdG1ldGFkYXRhPzogVUk1Q29udHJvbE1ldGFkYXRhRGVmaW5pdGlvbjtcbn07XG5cbnR5cGUgVUk1QVBJQ29udHJvbCA9IFVJNUNvbnRyb2wgJiB7XG5cdGdldEFQSShldmVudDogVUk1RXZlbnQpOiBVSTVBUElDb250cm9sO1xuXHRbazogc3RyaW5nXTogRnVuY3Rpb247XG59O1xuXG50eXBlIENvbnRyb2xQcm9wZXJ0eU5hbWVzPFQ+ID0ge1xuXHRbSyBpbiBrZXlvZiBUXTogVFtLXSBleHRlbmRzIEZ1bmN0aW9uID8gbmV2ZXIgOiBLO1xufVtrZXlvZiBUXTtcbmV4cG9ydCB0eXBlIFByb3BlcnRpZXNPZjxUPiA9IFBhcnRpYWw8UGljazxULCBDb250cm9sUHJvcGVydHlOYW1lczxUPj4+O1xuZXhwb3J0IHR5cGUgU3RyaWN0UHJvcGVydGllc09mPFQ+ID0gUGljazxULCBDb250cm9sUHJvcGVydHlOYW1lczxUPj47XG5leHBvcnQgdHlwZSBFbmhhbmNlV2l0aFVJNTxUPiA9IFQgJiB7XG5cdC8vIEFkZCBhbGwgdGhlIGdldFhYWCBtZXRob2QsIG1pZ2h0IGFkZCB0b28gbXVjaCBhcyBpJ20gbm90IGZpbHRlcmluZyBvbiBhY3R1YWwgcHJvcGVydGllcyBhY3R1YWxseS4uLlxuXHRbUCBpbiBrZXlvZiBUIGFzIGBnZXQke0NhcGl0YWxpemU8c3RyaW5nICYgUD59YF06ICgpID0+IFRbUF07XG59O1xuY29uc3QgZW5zdXJlTWV0YWRhdGEgPSBmdW5jdGlvbiAodGFyZ2V0OiBVSTVDb250cm9sbGVyKSB7XG5cdHRhcmdldC5tZXRhZGF0YSA9IG1lcmdlKFxuXHRcdHtcblx0XHRcdGNvbnRyb2xsZXJFeHRlbnNpb25zOiB7fSxcblx0XHRcdHByb3BlcnRpZXM6IHt9LFxuXHRcdFx0bWFjcm9Db250ZXh0czoge30sXG5cdFx0XHRhZ2dyZWdhdGlvbnM6IHt9LFxuXHRcdFx0YXNzb2NpYXRpb25zOiB7fSxcblx0XHRcdG1ldGhvZHM6IHt9LFxuXHRcdFx0ZXZlbnRzOiB7fSxcblx0XHRcdGludGVyZmFjZXM6IFtdXG5cdFx0fSxcblx0XHR0YXJnZXQubWV0YWRhdGEgfHwge31cblx0KSBhcyBVSTVDb250cm9sTWV0YWRhdGFEZWZpbml0aW9uO1xuXHRyZXR1cm4gdGFyZ2V0Lm1ldGFkYXRhO1xufTtcblxuLyogI3JlZ2lvbiBDT05UUk9MTEVSIEVYVEVOU0lPTlMgKi9cblxuLyoqXG4gKiBEZWZpbmVzIHRoYXQgdGhlIGZvbGxvd2luZyBtZXRob2QgaXMgYW4gb3ZlcnJpZGUgZm9yIHRoZSBtZXRob2QgbmFtZSB3aXRoIHRoZSBzYW1lIG5hbWUgaW4gdGhlIHNwZWNpZmljIGNvbnRyb2xsZXIgZXh0ZW5zaW9uIG9yIGJhc2UgaW1wbGVtZW50YXRpb24uXG4gKlxuICogQHBhcmFtIGV4dGVuc2lvbk5hbWUgVGhlIG5hbWUgb2YgdGhlIGV4dGVuc2lvbiB0aGF0IHdpbGwgYmUgb3ZlcnJpZGVuXG4gKiBAcmV0dXJucyBUaGUgZGVjb3JhdGVkIG1ldGhvZFxuICovXG5leHBvcnQgZnVuY3Rpb24gbWV0aG9kT3ZlcnJpZGUoZXh0ZW5zaW9uTmFtZT86IHN0cmluZyk6IE1ldGhvZERlY29yYXRvciB7XG5cdHJldHVybiBmdW5jdGlvbiAodGFyZ2V0OiBVSTVDb250cm9sbGVyLCBwcm9wZXJ0eUtleSkge1xuXHRcdGlmICghdGFyZ2V0Lm92ZXJyaWRlKSB7XG5cdFx0XHR0YXJnZXQub3ZlcnJpZGUgPSB7fTtcblx0XHR9XG5cdFx0bGV0IGN1cnJlbnRUYXJnZXQgPSB0YXJnZXQub3ZlcnJpZGU7XG5cdFx0aWYgKGV4dGVuc2lvbk5hbWUpIHtcblx0XHRcdGlmICghY3VycmVudFRhcmdldC5leHRlbnNpb24pIHtcblx0XHRcdFx0Y3VycmVudFRhcmdldC5leHRlbnNpb24gPSB7fTtcblx0XHRcdH1cblx0XHRcdGlmICghY3VycmVudFRhcmdldC5leHRlbnNpb25bZXh0ZW5zaW9uTmFtZV0pIHtcblx0XHRcdFx0Y3VycmVudFRhcmdldC5leHRlbnNpb25bZXh0ZW5zaW9uTmFtZV0gPSB7fTtcblx0XHRcdH1cblx0XHRcdGN1cnJlbnRUYXJnZXQgPSBjdXJyZW50VGFyZ2V0LmV4dGVuc2lvbltleHRlbnNpb25OYW1lXTtcblx0XHR9XG5cdFx0Y3VycmVudFRhcmdldFtwcm9wZXJ0eUtleS50b1N0cmluZygpXSA9ICh0YXJnZXQgYXMgYW55KVtwcm9wZXJ0eUtleS50b1N0cmluZygpXTtcblx0fTtcbn1cblxuLyoqXG4gKiBEZWZpbmVzIHRoYXQgdGhlIG1ldGhvZCBjYW4gYmUgZXh0ZW5kZWQgYnkgb3RoZXIgY29udHJvbGxlciBleHRlbnNpb24gYmFzZWQgb24gdGhlIGRlZmluZWQgb3ZlcnJpZGVFeGVjdXRpb25UeXBlLlxuICpcbiAqIEBwYXJhbSBvdmVycmlkZUV4ZWN1dGlvblR5cGUgVGhlIE92ZXJyaWRlRXhlY3V0aW9uIGRlZmluaW5nIHdoZW4gdGhlIG92ZXJyaWRlIHNob3VsZCBydW4gKEJlZm9yZSAvIEFmdGVyIC8gSW5zdGVhZClcbiAqIEByZXR1cm5zIFRoZSBkZWNvcmF0ZWQgbWV0aG9kXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBleHRlbnNpYmxlKG92ZXJyaWRlRXhlY3V0aW9uVHlwZT86IE92ZXJyaWRlRXhlY3V0aW9uKTogTWV0aG9kRGVjb3JhdG9yIHtcblx0cmV0dXJuIGZ1bmN0aW9uICh0YXJnZXQ6IFVJNUNvbnRyb2xsZXIsIHByb3BlcnR5S2V5KSB7XG5cdFx0Y29uc3QgbWV0YWRhdGEgPSBlbnN1cmVNZXRhZGF0YSh0YXJnZXQpO1xuXHRcdGlmICghbWV0YWRhdGEubWV0aG9kc1twcm9wZXJ0eUtleS50b1N0cmluZygpXSkge1xuXHRcdFx0bWV0YWRhdGEubWV0aG9kc1twcm9wZXJ0eUtleS50b1N0cmluZygpXSA9IHt9O1xuXHRcdH1cblx0XHRtZXRhZGF0YS5tZXRob2RzW3Byb3BlcnR5S2V5LnRvU3RyaW5nKCldLm92ZXJyaWRlRXhlY3V0aW9uID0gb3ZlcnJpZGVFeGVjdXRpb25UeXBlO1xuXHR9O1xufVxuXG4vKipcbiAqIERlZmluZXMgdGhhdCB0aGUgbWV0aG9kIHdpbGwgYmUgcHVibGljbHkgYXZhaWxhYmxlIGZvciBjb250cm9sbGVyIGV4dGVuc2lvbiB1c2FnZS5cbiAqXG4gKiBAcmV0dXJucyBUaGUgZGVjb3JhdGVkIG1ldGhvZFxuICovXG5leHBvcnQgZnVuY3Rpb24gcHVibGljRXh0ZW5zaW9uKCk6IE1ldGhvZERlY29yYXRvciB7XG5cdHJldHVybiBmdW5jdGlvbiAodGFyZ2V0OiBVSTVDb250cm9sbGVyLCBwcm9wZXJ0eUtleSwgZGVzY3JpcHRvcik6IHZvaWQge1xuXHRcdGNvbnN0IG1ldGFkYXRhID0gZW5zdXJlTWV0YWRhdGEodGFyZ2V0KTtcblx0XHRkZXNjcmlwdG9yLmVudW1lcmFibGUgPSB0cnVlO1xuXHRcdGlmICghbWV0YWRhdGEubWV0aG9kc1twcm9wZXJ0eUtleS50b1N0cmluZygpXSkge1xuXHRcdFx0bWV0YWRhdGEubWV0aG9kc1twcm9wZXJ0eUtleS50b1N0cmluZygpXSA9IHt9O1xuXHRcdH1cblx0XHRtZXRhZGF0YS5tZXRob2RzW3Byb3BlcnR5S2V5LnRvU3RyaW5nKCldLnB1YmxpYyA9IHRydWU7XG5cdH07XG59XG4vKipcbiAqIERlZmluZXMgdGhhdCB0aGUgbWV0aG9kIHdpbGwgYmUgb25seSBhdmFpbGFibGUgZm9yIGludGVybmFsIHVzYWdlIG9mIHRoZSBjb250cm9sbGVyIGV4dGVuc2lvbi5cbiAqXG4gKiBAcmV0dXJucyBUaGUgZGVjb3JhdGVkIG1ldGhvZFxuICovXG5leHBvcnQgZnVuY3Rpb24gcHJpdmF0ZUV4dGVuc2lvbigpOiBNZXRob2REZWNvcmF0b3Ige1xuXHRyZXR1cm4gZnVuY3Rpb24gKHRhcmdldDogVUk1Q29udHJvbGxlciwgcHJvcGVydHlLZXksIGRlc2NyaXB0b3IpIHtcblx0XHRjb25zdCBtZXRhZGF0YSA9IGVuc3VyZU1ldGFkYXRhKHRhcmdldCk7XG5cdFx0ZGVzY3JpcHRvci5lbnVtZXJhYmxlID0gdHJ1ZTtcblx0XHRpZiAoIW1ldGFkYXRhLm1ldGhvZHNbcHJvcGVydHlLZXkudG9TdHJpbmcoKV0pIHtcblx0XHRcdG1ldGFkYXRhLm1ldGhvZHNbcHJvcGVydHlLZXkudG9TdHJpbmcoKV0gPSB7fTtcblx0XHR9XG5cdFx0bWV0YWRhdGEubWV0aG9kc1twcm9wZXJ0eUtleS50b1N0cmluZygpXS5wdWJsaWMgPSBmYWxzZTtcblx0fTtcbn1cbi8qKlxuICogRGVmaW5lcyB0aGF0IHRoZSBtZXRob2QgY2Fubm90IGJlIGZ1cnRoZXIgZXh0ZW5kZWQgYnkgb3RoZXIgY29udHJvbGxlciBleHRlbnNpb24uXG4gKlxuICogQHJldHVybnMgVGhlIGRlY29yYXRlZCBtZXRob2RcbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGZpbmFsRXh0ZW5zaW9uKCk6IE1ldGhvZERlY29yYXRvciB7XG5cdHJldHVybiBmdW5jdGlvbiAodGFyZ2V0OiBVSTVDb250cm9sbGVyLCBwcm9wZXJ0eUtleSwgZGVzY3JpcHRvcikge1xuXHRcdGNvbnN0IG1ldGFkYXRhID0gZW5zdXJlTWV0YWRhdGEodGFyZ2V0KTtcblx0XHRkZXNjcmlwdG9yLmVudW1lcmFibGUgPSB0cnVlO1xuXHRcdGlmICghbWV0YWRhdGEubWV0aG9kc1twcm9wZXJ0eUtleS50b1N0cmluZygpXSkge1xuXHRcdFx0bWV0YWRhdGEubWV0aG9kc1twcm9wZXJ0eUtleS50b1N0cmluZygpXSA9IHt9O1xuXHRcdH1cblx0XHRtZXRhZGF0YS5tZXRob2RzW3Byb3BlcnR5S2V5LnRvU3RyaW5nKCldLmZpbmFsID0gdHJ1ZTtcblx0fTtcbn1cblxuLyoqXG4gKiBEZWZpbmVzIHRoYXQgd2UgYXJlIGdvaW5nIHRvIHVzZSBpbnN0YW50aWF0ZSBhIGNvbnRyb2xsZXIgZXh0ZW5zaW9uIHVuZGVyIHRoZSBmb2xsb3dpbmcgdmFyaWFibGUgbmFtZS5cbiAqXG4gKiBAcGFyYW0gZXh0ZW5zaW9uQ2xhc3MgVGhlIGNvbnRyb2xsZXIgZXh0ZW5zaW9uIHRoYXQgd2lsbCBiZSBpbnN0YW50aWF0ZWRcbiAqIEByZXR1cm5zIFRoZSBkZWNvcmF0ZWQgcHJvcGVydHlcbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIHVzaW5nRXh0ZW5zaW9uKGV4dGVuc2lvbkNsYXNzOiB0eXBlb2YgQ29udHJvbGxlckV4dGVuc2lvbiB8IEZ1bmN0aW9uKTogUHJvcGVydHlEZWNvcmF0b3Ige1xuXHRyZXR1cm4gZnVuY3Rpb24gKHRhcmdldDogVUk1Q29udHJvbGxlciwgcHJvcGVydHlLZXk6IHN0cmluZywgcHJvcGVydHlEZXNjcmlwdG9yOiBUeXBlZFByb3BlcnR5RGVzY3JpcHRvcjxhbnk+KSB7XG5cdFx0Y29uc3QgbWV0YWRhdGEgPSBlbnN1cmVNZXRhZGF0YSh0YXJnZXQpO1xuXHRcdGRlbGV0ZSAocHJvcGVydHlEZXNjcmlwdG9yIGFzIGFueSkuaW5pdGlhbGl6ZXI7XG5cdFx0bWV0YWRhdGEuY29udHJvbGxlckV4dGVuc2lvbnNbcHJvcGVydHlLZXkudG9TdHJpbmcoKV0gPSBleHRlbnNpb25DbGFzcztcblx0XHRyZXR1cm4gcHJvcGVydHlEZXNjcmlwdG9yO1xuXHR9IGFzIGFueTsgLy8gVGhpcyBpcyB0ZWNobmljYWxseSBhbiBhY2Nlc3NvciBkZWNvcmF0b3IsIGJ1dCBzb21laG93IHRoZSBjb21waWxlciBkb2Vzbid0IGxpa2UgaXQgaWYgaSBkZWNsYXJlIGl0IGFzIHN1Y2guXG59XG5cbi8qICNlbmRyZWdpb24gKi9cblxuLyogI3JlZ2lvbiBDT05UUk9MICovXG4vKipcbiAqIEluZGljYXRlcyB0aGF0IHRoZSBwcm9wZXJ0eSBzaGFsbCBiZSBkZWNsYXJlZCBhcyBhbiBldmVudCBvbiB0aGUgY29udHJvbCBtZXRhZGF0YS5cbiAqXG4gKiBAcmV0dXJucyBUaGUgZGVjb3JhdGVkIHByb3BlcnR5XG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBldmVudCgpOiBQcm9wZXJ0eURlY29yYXRvciB7XG5cdHJldHVybiBmdW5jdGlvbiAodGFyZ2V0OiBVSTVDb250cm9sLCBldmVudEtleSkge1xuXHRcdGNvbnN0IG1ldGFkYXRhID0gZW5zdXJlTWV0YWRhdGEodGFyZ2V0KTtcblx0XHRpZiAoIW1ldGFkYXRhLmV2ZW50c1tldmVudEtleS50b1N0cmluZygpXSkge1xuXHRcdFx0bWV0YWRhdGEuZXZlbnRzW2V2ZW50S2V5LnRvU3RyaW5nKCldID0ge307XG5cdFx0fVxuXHR9O1xufVxuXG4vKipcbiAqIERlZmluZXMgdGhlIGZvbGxvd2luZyBwcm9wZXJ0eSBpbiB0aGUgY29udHJvbCBtZXRhdGFkYS5cbiAqXG4gKiBAcGFyYW0gdWk1UHJvcGVydHlNZXRhZGF0YSBUaGUgcHJvcGVydHkgZGVmaW5pdGlvblxuICogQHJldHVybnMgVGhlIGRlY29yYXRlZCBwcm9wZXJ0eS5cbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIHByb3BlcnR5KHVpNVByb3BlcnR5TWV0YWRhdGE6IFVJNVByb3BlcnR5TWV0YWRhdGEpOiBQcm9wZXJ0eURlY29yYXRvciB7XG5cdHJldHVybiBmdW5jdGlvbiAodGFyZ2V0OiBVSTVDb250cm9sLCBwcm9wZXJ0eUtleTogc3RyaW5nLCBwcm9wZXJ0eURlc2NyaXB0b3I6IFR5cGVkUHJvcGVydHlEZXNjcmlwdG9yPGFueT4pIHtcblx0XHRjb25zdCBtZXRhZGF0YSA9IGVuc3VyZU1ldGFkYXRhKHRhcmdldCk7XG5cdFx0aWYgKCFtZXRhZGF0YS5wcm9wZXJ0aWVzW3Byb3BlcnR5S2V5XSkge1xuXHRcdFx0bWV0YWRhdGEucHJvcGVydGllc1twcm9wZXJ0eUtleV0gPSB1aTVQcm9wZXJ0eU1ldGFkYXRhO1xuXHRcdH1cblx0XHRkZWxldGUgcHJvcGVydHlEZXNjcmlwdG9yLndyaXRhYmxlO1xuXHRcdGRlbGV0ZSAocHJvcGVydHlEZXNjcmlwdG9yIGFzIGFueSkuaW5pdGlhbGl6ZXI7XG5cblx0XHRyZXR1cm4gcHJvcGVydHlEZXNjcmlwdG9yO1xuXHR9IGFzIGFueTsgLy8gVGhpcyBpcyB0ZWNobmljYWxseSBhbiBhY2Nlc3NvciBkZWNvcmF0b3IsIGJ1dCBzb21laG93IHRoZSBjb21waWxlciBkb2Vzbid0IGxpa2UgaXQgaWYgaSBkZWNsYXJlIGl0IGFzIHN1Y2guO1xufVxuLyoqXG4gKiBEZWZpbmVzIGFuZCBjb25maWd1cmUgdGhlIGZvbGxvd2luZyBhZ2dyZWdhdGlvbiBpbiB0aGUgY29udHJvbCBtZXRhdGFkYS5cbiAqXG4gKiBAcGFyYW0gdWk1QWdncmVnYXRpb25NZXRhZGF0YSBUaGUgYWdncmVnYXRpb24gZGVmaW5pdGlvblxuICogQHJldHVybnMgVGhlIGRlY29yYXRlZCBwcm9wZXJ0eS5cbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGFnZ3JlZ2F0aW9uKHVpNUFnZ3JlZ2F0aW9uTWV0YWRhdGE6IFVJNUFnZ3JlZ2F0aW9uTWV0YWRhdGEpOiBQcm9wZXJ0eURlY29yYXRvciB7XG5cdHJldHVybiBmdW5jdGlvbiAodGFyZ2V0OiBVSTVDb250cm9sLCBwcm9wZXJ0eUtleTogc3RyaW5nLCBwcm9wZXJ0eURlc2NyaXB0b3I6IFR5cGVkUHJvcGVydHlEZXNjcmlwdG9yPGFueT4pIHtcblx0XHRjb25zdCBtZXRhZGF0YSA9IGVuc3VyZU1ldGFkYXRhKHRhcmdldCk7XG5cdFx0aWYgKHVpNUFnZ3JlZ2F0aW9uTWV0YWRhdGEubXVsdGlwbGUgPT09IHVuZGVmaW5lZCkge1xuXHRcdFx0Ly8gVUk1IGRlZmF1bHRzIHRoaXMgdG8gdHJ1ZSBidXQgdGhpcyBpcyBqdXN0IHdlaXJkLi4uXG5cdFx0XHR1aTVBZ2dyZWdhdGlvbk1ldGFkYXRhLm11bHRpcGxlID0gZmFsc2U7XG5cdFx0fVxuXHRcdGlmICghbWV0YWRhdGEuYWdncmVnYXRpb25zW3Byb3BlcnR5S2V5XSkge1xuXHRcdFx0bWV0YWRhdGEuYWdncmVnYXRpb25zW3Byb3BlcnR5S2V5XSA9IHVpNUFnZ3JlZ2F0aW9uTWV0YWRhdGE7XG5cdFx0fVxuXHRcdGlmICh1aTVBZ2dyZWdhdGlvbk1ldGFkYXRhLmlzRGVmYXVsdCkge1xuXHRcdFx0bWV0YWRhdGEuZGVmYXVsdEFnZ3JlZ2F0aW9uID0gcHJvcGVydHlLZXk7XG5cdFx0fVxuXHRcdGRlbGV0ZSBwcm9wZXJ0eURlc2NyaXB0b3Iud3JpdGFibGU7XG5cdFx0ZGVsZXRlIChwcm9wZXJ0eURlc2NyaXB0b3IgYXMgYW55KS5pbml0aWFsaXplcjtcblxuXHRcdHJldHVybiBwcm9wZXJ0eURlc2NyaXB0b3I7XG5cdH0gYXMgYW55OyAvLyBUaGlzIGlzIHRlY2huaWNhbGx5IGFuIGFjY2Vzc29yIGRlY29yYXRvciwgYnV0IHNvbWVob3cgdGhlIGNvbXBpbGVyIGRvZXNuJ3QgbGlrZSBpdCBpZiBpIGRlY2xhcmUgaXQgYXMgc3VjaC47XG59XG5cbi8qKlxuICogRGVmaW5lcyBhbmQgY29uZmlndXJlIHRoZSBmb2xsb3dpbmcgYXNzb2NpYXRpb24gaW4gdGhlIGNvbnRyb2wgbWV0YXRhZGEuXG4gKlxuICogQHBhcmFtIHVpNUFzc29jaWF0aW9uTWV0YWRhdGEgVGhlIGRlZmluaXRpb24gb2YgdGhlIGFzc29jaWF0aW9uLlxuICogQHJldHVybnMgVGhlIGRlY29yYXRlZCBwcm9wZXJ0eVxuICovXG5leHBvcnQgZnVuY3Rpb24gYXNzb2NpYXRpb24odWk1QXNzb2NpYXRpb25NZXRhZGF0YTogVUk1QXNzb2NpYXRpb25NZXRhZGF0YSk6IFByb3BlcnR5RGVjb3JhdG9yIHtcblx0cmV0dXJuIGZ1bmN0aW9uICh0YXJnZXQ6IFVJNUNvbnRyb2wsIHByb3BlcnR5S2V5OiBzdHJpbmcsIHByb3BlcnR5RGVzY3JpcHRvcjogVHlwZWRQcm9wZXJ0eURlc2NyaXB0b3I8YW55Pikge1xuXHRcdGNvbnN0IG1ldGFkYXRhID0gZW5zdXJlTWV0YWRhdGEodGFyZ2V0KTtcblx0XHRpZiAoIW1ldGFkYXRhLmFzc29jaWF0aW9uc1twcm9wZXJ0eUtleV0pIHtcblx0XHRcdG1ldGFkYXRhLmFzc29jaWF0aW9uc1twcm9wZXJ0eUtleV0gPSB1aTVBc3NvY2lhdGlvbk1ldGFkYXRhO1xuXHRcdH1cblx0XHRkZWxldGUgcHJvcGVydHlEZXNjcmlwdG9yLndyaXRhYmxlO1xuXHRcdGRlbGV0ZSAocHJvcGVydHlEZXNjcmlwdG9yIGFzIGFueSkuaW5pdGlhbGl6ZXI7XG5cblx0XHRyZXR1cm4gcHJvcGVydHlEZXNjcmlwdG9yO1xuXHR9IGFzIGFueTsgLy8gVGhpcyBpcyB0ZWNobmljYWxseSBhbiBhY2Nlc3NvciBkZWNvcmF0b3IsIGJ1dCBzb21laG93IHRoZSBjb21waWxlciBkb2Vzbid0IGxpa2UgaXQgaWYgaSBkZWNsYXJlIGl0IGFzIHN1Y2guO1xufVxuXG4vKipcbiAqIERlZmluZXMgaW4gdGhlIG1ldGFkYXRhIHRoYXQgdGhpcyBjb250cm9sIGltcGxlbWVudHMgYSBzcGVjaWZpYyBpbnRlcmZhY2UuXG4gKlxuICogQHBhcmFtIGludGVyZmFjZU5hbWUgVGhlIG5hbWUgb2YgdGhlIGltcGxlbWVudGVkIGludGVyZmFjZVxuICogQHJldHVybnMgVGhlIGRlY29yYXRlZCBtZXRob2RcbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGltcGxlbWVudEludGVyZmFjZShpbnRlcmZhY2VOYW1lOiBzdHJpbmcpOiBQcm9wZXJ0eURlY29yYXRvciB7XG5cdHJldHVybiBmdW5jdGlvbiAodGFyZ2V0OiBVSTVDb250cm9sKSB7XG5cdFx0Y29uc3QgbWV0YWRhdGEgPSBlbnN1cmVNZXRhZGF0YSh0YXJnZXQpO1xuXG5cdFx0bWV0YWRhdGEuaW50ZXJmYWNlcy5wdXNoKGludGVyZmFjZU5hbWUpO1xuXHR9O1xufVxuXG4vKipcbiAqIEluZGljYXRlcyB0aGF0IHRoZSBmb2xsb3dpbmcgbWV0aG9kIHNob3VsZCBhbHNvIGJlIGV4cG9zZWQgc3RhdGljYWxseSBzbyB3ZSBjYW4gY2FsbCBpdCBmcm9tIHRoZSBYTUwuXG4gKlxuICogQHJldHVybnMgVGhlIGRlY29yYXRlZCBtZXRob2RcbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIHhtbEV2ZW50SGFuZGxlcigpOiBNZXRob2REZWNvcmF0b3Ige1xuXHRyZXR1cm4gZnVuY3Rpb24gKHRhcmdldDogVUk1Q29udHJvbCwgcHJvcGVydHlrZXkpIHtcblx0XHRjb25zdCBjdXJyZW50Q29uc3RydWN0b3I6IFVJNUFQSUNvbnRyb2wgPSB0YXJnZXQuY29uc3RydWN0b3IgYXMgdW5rbm93biBhcyBVSTVBUElDb250cm9sO1xuXHRcdGN1cnJlbnRDb25zdHJ1Y3Rvcltwcm9wZXJ0eWtleS50b1N0cmluZygpXSA9IGZ1bmN0aW9uICguLi5hcmdzOiBhbnlbXSkge1xuXHRcdFx0Y29uc3QgY3VycmVudFRhcmdldCA9IGN1cnJlbnRDb25zdHJ1Y3Rvci5nZXRBUEkoYXJnc1swXSBhcyBVSTVFdmVudCk7XG5cdFx0XHRjdXJyZW50VGFyZ2V0W3Byb3BlcnR5a2V5LnRvU3RyaW5nKCldKC4uLmFyZ3MpO1xuXHRcdH07XG5cdH07XG59XG5cbi8qKlxuICogSW5kaWNhdGVzIHRoYXQgdGhlIGZvbGxvd2luZyBjbGFzcyBzaG91bGQgZGVmaW5lIGEgdWk1IGNvbnRyb2wgb2YgdGhlIHNwZWNpZmllZCBuYW1lLlxuICpcbiAqIEBwYXJhbSBzVGFyZ2V0IFRoZSBmdWxseSBxdWFsaWZpZWQgbmFtZSBvZiB0aGUgbWFjcm8gQVBJXG4gKiBAcGFyYW0gbWV0YWRhdGFEZWZpbml0aW9uIElubGluZSBtZXRhZGF0YSBkZWZpbml0aW9uXG4gKiBAY2xhc3NcbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGRlZmluZVVJNUNsYXNzKHNUYXJnZXQ6IHN0cmluZywgbWV0YWRhdGFEZWZpbml0aW9uPzogYW55KTogQ2xhc3NEZWNvcmF0b3Ige1xuXHRyZXR1cm4gZnVuY3Rpb24gKGNvbnN0cnVjdG9yOiBGdW5jdGlvbikge1xuXHRcdGlmICghY29uc3RydWN0b3IucHJvdG90eXBlLm1ldGFkYXRhKSB7XG5cdFx0XHRjb25zdHJ1Y3Rvci5wcm90b3R5cGUubWV0YWRhdGEgPSB7fTtcblx0XHR9XG5cdFx0aWYgKG1ldGFkYXRhRGVmaW5pdGlvbikge1xuXHRcdFx0Zm9yIChjb25zdCBrZXkgaW4gbWV0YWRhdGFEZWZpbml0aW9uKSB7XG5cdFx0XHRcdGNvbnN0cnVjdG9yLnByb3RvdHlwZS5tZXRhZGF0YVtrZXldID0gbWV0YWRhdGFEZWZpbml0aW9uW2tleSBhcyBrZXlvZiBVSTVDb250cm9sTWV0YWRhdGFEZWZpbml0aW9uXTtcblx0XHRcdH1cblx0XHR9XG5cdFx0cmV0dXJuIHJlZ2lzdGVyVUk1TWV0YWRhdGEoY29uc3RydWN0b3IsIHNUYXJnZXQsIGNvbnN0cnVjdG9yLnByb3RvdHlwZSk7XG5cdH07XG59XG5cbi8qKlxuICogSW50ZXJuYWwgaGVhdnkgbGlmdGluZyB0aGF0IHdpbGwgdGFrZSBjYXJlIG9mIGNyZWF0aW5nIHRoZSBjbGFzcyBwcm9wZXJ0eSBmb3IgdWk1IHRvIHVzZS5cbiAqXG4gKiBAcGFyYW0gY2xhenogVGhlIGNsYXNzIHByb3RvdHlwZVxuICogQHBhcmFtIG5hbWUgVGhlIG5hbWUgb2YgdGhlIGNsYXNzIHRvIGNyZWF0ZVxuICogQHBhcmFtIGluT2JqIFRoZSBtZXRhZGF0YSBvYmplY3RcbiAqIEByZXR1cm5zIFRoZSBtZXRhZGF0YSBjbGFzc1xuICovXG5mdW5jdGlvbiByZWdpc3RlclVJNU1ldGFkYXRhKGNsYXp6OiBhbnksIG5hbWU6IHN0cmluZywgaW5PYmo6IGFueSk6IGFueSB7XG5cdGlmIChjbGF6ei5nZXRNZXRhZGF0YSAmJiBjbGF6ei5nZXRNZXRhZGF0YSgpLmlzQShcInNhcC51aS5jb3JlLm12Yy5Db250cm9sbGVyRXh0ZW5zaW9uXCIpKSB7XG5cdFx0T2JqZWN0LmdldE93blByb3BlcnR5TmFtZXMoaW5PYmopLmZvckVhY2goKG9iak5hbWUpID0+IHtcblx0XHRcdGNvbnN0IGRlc2NyaXB0b3IgPSBPYmplY3QuZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9yKGluT2JqLCBvYmpOYW1lKTtcblx0XHRcdGlmIChkZXNjcmlwdG9yICYmICFkZXNjcmlwdG9yLmVudW1lcmFibGUpIHtcblx0XHRcdFx0ZGVzY3JpcHRvci5lbnVtZXJhYmxlID0gdHJ1ZTtcblx0XHRcdFx0Ly9cdFx0TG9nLmVycm9yKGBQcm9wZXJ0eSAke29iak5hbWV9IGZyb20gJHtuYW1lfSBzaG91bGQgYmUgZGVjb3JhdGVkIGFzIHB1YmxpY2ApO1xuXHRcdFx0fVxuXHRcdH0pO1xuXHR9XG5cdGNvbnN0IG9iajogYW55ID0ge307XG5cdG9iai5tZXRhZGF0YSA9IGluT2JqLm1ldGFkYXRhIHx8IHt9O1xuXHRvYmoub3ZlcnJpZGUgPSBpbk9iai5vdmVycmlkZTtcblx0b2JqLmNvbnN0cnVjdG9yID0gY2xheno7XG5cdG9iai5tZXRhZGF0YS5iYXNlVHlwZSA9IE9iamVjdC5nZXRQcm90b3R5cGVPZihjbGF6ei5wcm90b3R5cGUpLmdldE1ldGFkYXRhKCkuZ2V0TmFtZSgpO1xuXG5cdGlmIChjbGF6ej8uZ2V0TWV0YWRhdGEoKT8uZ2V0U3RlcmVvdHlwZSgpID09PSBcImNvbnRyb2xcIikge1xuXHRcdGNvbnN0IHJlbmRlcmVyRGVmaW5pdGlvbiA9IGluT2JqLnJlbmRlcmVyIHx8IGNsYXp6LnJlbmRlcmVyIHx8IGNsYXp6LnJlbmRlcjtcblx0XHRvYmoucmVuZGVyZXIgPSB7IGFwaVZlcnNpb246IDIgfTtcblx0XHRpZiAodHlwZW9mIHJlbmRlcmVyRGVmaW5pdGlvbiA9PT0gXCJmdW5jdGlvblwiKSB7XG5cdFx0XHRvYmoucmVuZGVyZXIucmVuZGVyID0gcmVuZGVyZXJEZWZpbml0aW9uO1xuXHRcdH0gZWxzZSBpZiAocmVuZGVyZXJEZWZpbml0aW9uICE9IHVuZGVmaW5lZCkge1xuXHRcdFx0b2JqLnJlbmRlcmVyID0gcmVuZGVyZXJEZWZpbml0aW9uO1xuXHRcdH1cblx0fVxuXHRvYmoubWV0YWRhdGEuaW50ZXJmYWNlcyA9IGluT2JqLm1ldGFkYXRhPy5pbnRlcmZhY2VzIHx8IGNsYXp6Lm1ldGFkYXRhPy5pbnRlcmZhY2VzO1xuXHRPYmplY3Qua2V5cyhjbGF6ei5wcm90b3R5cGUpLmZvckVhY2goKGtleSkgPT4ge1xuXHRcdGlmIChrZXkgIT09IFwibWV0YWRhdGFcIikge1xuXHRcdFx0dHJ5IHtcblx0XHRcdFx0b2JqW2tleV0gPSBjbGF6ei5wcm90b3R5cGVba2V5XTtcblx0XHRcdH0gY2F0Y2ggKGUpIHtcblx0XHRcdFx0Ly9jb25zb2xlLmxvZyhlKTtcblx0XHRcdH1cblx0XHR9XG5cdH0pO1xuXHRpZiAob2JqLm1ldGFkYXRhPy5jb250cm9sbGVyRXh0ZW5zaW9ucyAmJiBPYmplY3Qua2V5cyhvYmoubWV0YWRhdGEuY29udHJvbGxlckV4dGVuc2lvbnMpLmxlbmd0aCA+IDApIHtcblx0XHRmb3IgKGNvbnN0IGNFeHROYW1lIGluIG9iai5tZXRhZGF0YS5jb250cm9sbGVyRXh0ZW5zaW9ucykge1xuXHRcdFx0b2JqW2NFeHROYW1lXSA9IG9iai5tZXRhZGF0YS5jb250cm9sbGVyRXh0ZW5zaW9uc1tjRXh0TmFtZV07XG5cdFx0fVxuXHR9XG5cdGNvbnN0IG91dHB1dCA9IGNsYXp6LmV4dGVuZChuYW1lLCBvYmopO1xuXHRjb25zdCBmbkluaXQgPSBvdXRwdXQucHJvdG90eXBlLmluaXQ7XG5cdG91dHB1dC5wcm90b3R5cGUuaW5pdCA9IGZ1bmN0aW9uICguLi5hcmdzOiBhbnlbXSkge1xuXHRcdGZuSW5pdCAmJiBmbkluaXQuYXBwbHkodGhpcywgYXJncyk7XG5cdFx0dGhpcy5tZXRhZGF0YSA9IG9iai5tZXRhZGF0YTtcblxuXHRcdGlmIChvYmoubWV0YWRhdGEucHJvcGVydGllcykge1xuXHRcdFx0Y29uc3QgYVByb3BlcnR5S2V5cyA9IE9iamVjdC5rZXlzKG9iai5tZXRhZGF0YS5wcm9wZXJ0aWVzKTtcblx0XHRcdGFQcm9wZXJ0eUtleXMuZm9yRWFjaCgocHJvcGVydHlLZXkpID0+IHtcblx0XHRcdFx0T2JqZWN0LmRlZmluZVByb3BlcnR5KHRoaXMsIHByb3BlcnR5S2V5LCB7XG5cdFx0XHRcdFx0Y29uZmlndXJhYmxlOiB0cnVlLFxuXHRcdFx0XHRcdHNldDogKHY6IGFueSkgPT4ge1xuXHRcdFx0XHRcdFx0cmV0dXJuIHRoaXMuc2V0UHJvcGVydHkocHJvcGVydHlLZXksIHYpO1xuXHRcdFx0XHRcdH0sXG5cdFx0XHRcdFx0Z2V0OiAoKSA9PiB7XG5cdFx0XHRcdFx0XHRyZXR1cm4gdGhpcy5nZXRQcm9wZXJ0eShwcm9wZXJ0eUtleSk7XG5cdFx0XHRcdFx0fVxuXHRcdFx0XHR9KTtcblx0XHRcdH0pO1xuXHRcdFx0Y29uc3QgYUFnZ3JlZ2F0aW9uS2V5cyA9IE9iamVjdC5rZXlzKG9iai5tZXRhZGF0YS5hZ2dyZWdhdGlvbnMpO1xuXHRcdFx0YUFnZ3JlZ2F0aW9uS2V5cy5mb3JFYWNoKChhZ2dyZWdhdGlvbktleSkgPT4ge1xuXHRcdFx0XHRPYmplY3QuZGVmaW5lUHJvcGVydHkodGhpcywgYWdncmVnYXRpb25LZXksIHtcblx0XHRcdFx0XHRjb25maWd1cmFibGU6IHRydWUsXG5cdFx0XHRcdFx0c2V0OiAodjogYW55KSA9PiB7XG5cdFx0XHRcdFx0XHRyZXR1cm4gdGhpcy5zZXRBZ2dyZWdhdGlvbihhZ2dyZWdhdGlvbktleSwgdik7XG5cdFx0XHRcdFx0fSxcblx0XHRcdFx0XHRnZXQ6ICgpID0+IHtcblx0XHRcdFx0XHRcdGNvbnN0IGFnZ3JlZ2F0aW9uQ29udGVudCA9IHRoaXMuZ2V0QWdncmVnYXRpb24oYWdncmVnYXRpb25LZXkpO1xuXHRcdFx0XHRcdFx0aWYgKG9iai5tZXRhZGF0YS5hZ2dyZWdhdGlvbnNbYWdncmVnYXRpb25LZXldLm11bHRpcGxlKSB7XG5cdFx0XHRcdFx0XHRcdHJldHVybiBhZ2dyZWdhdGlvbkNvbnRlbnQgfHwgW107XG5cdFx0XHRcdFx0XHR9IGVsc2Uge1xuXHRcdFx0XHRcdFx0XHRyZXR1cm4gYWdncmVnYXRpb25Db250ZW50O1xuXHRcdFx0XHRcdFx0fVxuXHRcdFx0XHRcdH1cblx0XHRcdFx0fSk7XG5cdFx0XHR9KTtcblx0XHRcdGNvbnN0IGFBc3NvY2lhdGlvbktleXMgPSBPYmplY3Qua2V5cyhvYmoubWV0YWRhdGEuYXNzb2NpYXRpb25zKTtcblx0XHRcdGFBc3NvY2lhdGlvbktleXMuZm9yRWFjaCgoYXNzb2NpYXRpb25LZXkpID0+IHtcblx0XHRcdFx0T2JqZWN0LmRlZmluZVByb3BlcnR5KHRoaXMsIGFzc29jaWF0aW9uS2V5LCB7XG5cdFx0XHRcdFx0Y29uZmlndXJhYmxlOiB0cnVlLFxuXHRcdFx0XHRcdHNldDogKHY6IGFueSkgPT4ge1xuXHRcdFx0XHRcdFx0cmV0dXJuIHRoaXMuc2V0QXNzb2NpYXRpb24oYXNzb2NpYXRpb25LZXksIHYpO1xuXHRcdFx0XHRcdH0sXG5cdFx0XHRcdFx0Z2V0OiAoKSA9PiB7XG5cdFx0XHRcdFx0XHRjb25zdCBhZ2dyZWdhdGlvbkNvbnRlbnQgPSB0aGlzLmdldEFzc29jaWF0aW9uKGFzc29jaWF0aW9uS2V5KTtcblx0XHRcdFx0XHRcdGlmIChvYmoubWV0YWRhdGEuYXNzb2NpYXRpb25zW2Fzc29jaWF0aW9uS2V5XS5tdWx0aXBsZSkge1xuXHRcdFx0XHRcdFx0XHRyZXR1cm4gYWdncmVnYXRpb25Db250ZW50IHx8IFtdO1xuXHRcdFx0XHRcdFx0fSBlbHNlIHtcblx0XHRcdFx0XHRcdFx0cmV0dXJuIGFnZ3JlZ2F0aW9uQ29udGVudDtcblx0XHRcdFx0XHRcdH1cblx0XHRcdFx0XHR9XG5cdFx0XHRcdH0pO1xuXHRcdFx0fSk7XG5cdFx0fVxuXHR9O1xuXHRjbGF6ei5vdmVycmlkZSA9IGZ1bmN0aW9uIChvRXh0ZW5zaW9uOiBhbnkpIHtcblx0XHRjb25zdCBwb2wgPSB7fTtcblx0XHQocG9sIGFzIGFueSkuY29uc3RydWN0b3IgPSBmdW5jdGlvbiAoLi4uYXJnczogYW55W10pIHtcblx0XHRcdHJldHVybiBjbGF6ei5hcHBseSh0aGlzLCBhcmdzIGFzIGFueSk7XG5cdFx0fTtcblx0XHRjb25zdCBvQ2xhc3MgPSAoTWV0YWRhdGEgYXMgYW55KS5jcmVhdGVDbGFzcyhjbGF6eiwgXCJhbm9ueW1vdXNFeHRlbnNpb25+XCIgKyB1aWQoKSwgcG9sLCBDb250cm9sbGVyTWV0YWRhdGEpO1xuXHRcdG9DbGFzcy5nZXRNZXRhZGF0YSgpLl9zdGF0aWNPdmVycmlkZSA9IG9FeHRlbnNpb247XG5cdFx0b0NsYXNzLmdldE1ldGFkYXRhKCkuX292ZXJyaWRlID0gKGNsYXp6LmdldE1ldGFkYXRhKCkgYXMgYW55KS5fb3ZlcnJpZGU7XG5cdFx0cmV0dXJuIG9DbGFzcztcblx0fTtcblxuXHRPYmplY3RQYXRoLnNldChuYW1lLCBvdXRwdXQpO1xuXHRyZXR1cm4gb3V0cHV0O1xufVxuIl19