@sapui5/sap.fe.core 1.97.0 → 1.100.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 (306) hide show
  1. package/package.json +7 -4
  2. package/src/sap/fe/core/.library +1 -1
  3. package/src/sap/fe/core/AnnotationHelper.js +309 -405
  4. package/src/sap/fe/core/AnnotationHelper.ts +315 -0
  5. package/src/sap/fe/core/AppComponent.js +389 -397
  6. package/src/sap/fe/core/AppComponent.ts +403 -0
  7. package/src/sap/fe/core/AppStateHandler.js +198 -181
  8. package/src/sap/fe/core/AppStateHandler.ts +171 -0
  9. package/src/sap/fe/core/BaseController.js +83 -58
  10. package/src/sap/fe/core/BaseController.ts +68 -0
  11. package/src/sap/fe/core/BusyLocker.js +105 -121
  12. package/src/sap/fe/core/BusyLocker.ts +98 -0
  13. package/src/sap/fe/core/CommonUtils.js +2164 -2379
  14. package/src/sap/fe/core/CommonUtils.ts +2177 -0
  15. package/src/sap/fe/core/ExtensionAPI.js +279 -266
  16. package/src/sap/fe/core/ExtensionAPI.ts +250 -0
  17. package/src/sap/fe/core/PageController.js +218 -125
  18. package/src/sap/fe/core/PageController.ts +129 -0
  19. package/src/sap/fe/core/RouterProxy.js +924 -807
  20. package/src/sap/fe/core/RouterProxy.ts +840 -0
  21. package/src/sap/fe/core/Synchronization.js +41 -35
  22. package/src/sap/fe/core/Synchronization.ts +29 -0
  23. package/src/sap/fe/core/TemplateComponent.js +173 -155
  24. package/src/sap/fe/core/TemplateComponent.ts +173 -0
  25. package/src/sap/fe/core/TemplateModel.js +79 -54
  26. package/src/sap/fe/core/TemplateModel.ts +63 -0
  27. package/src/sap/fe/core/TransactionHelper.js +1560 -1579
  28. package/src/sap/fe/core/TransactionHelper.ts +1717 -0
  29. package/src/sap/fe/core/actions/collaboration/ActivitySync.js +392 -0
  30. package/src/sap/fe/core/actions/collaboration/ActivitySync.ts +355 -0
  31. package/src/sap/fe/core/actions/collaboration/CollaborationCommon.js +136 -0
  32. package/src/sap/fe/core/actions/collaboration/CollaborationCommon.ts +119 -0
  33. package/src/sap/fe/core/actions/collaboration/Manage.js +262 -0
  34. package/src/sap/fe/core/actions/collaboration/Manage.ts +244 -0
  35. package/src/sap/fe/core/actions/collaboration/ManageDialog.fragment.xml +103 -0
  36. package/src/sap/fe/core/actions/collaboration/UserDetails.fragment.xml +13 -0
  37. package/src/sap/fe/core/actions/draft.js +521 -581
  38. package/src/sap/fe/core/actions/draft.ts +566 -0
  39. package/src/sap/fe/core/actions/messageHandling.js +564 -511
  40. package/src/sap/fe/core/actions/messageHandling.ts +552 -0
  41. package/src/sap/fe/core/actions/nonDraft.js +17 -19
  42. package/src/sap/fe/core/actions/nonDraft.ts +12 -0
  43. package/src/sap/fe/core/actions/operations.js +1093 -1211
  44. package/src/sap/fe/core/actions/operations.ts +1192 -0
  45. package/src/sap/fe/core/actions/sticky.js +114 -104
  46. package/src/sap/fe/core/actions/sticky.ts +119 -0
  47. package/src/sap/fe/core/controllerextensions/ControllerExtensionMetadata.js +70 -66
  48. package/src/sap/fe/core/controllerextensions/ControllerExtensionMetadata.ts +65 -0
  49. package/src/sap/fe/core/controllerextensions/EditFlow.js +1594 -1701
  50. package/src/sap/fe/core/controllerextensions/EditFlow.ts +1672 -0
  51. package/src/sap/fe/core/controllerextensions/IntentBasedNavigation.js +80 -54
  52. package/src/sap/fe/core/controllerextensions/IntentBasedNavigation.ts +61 -0
  53. package/src/sap/fe/core/controllerextensions/InternalEditFlow.js +719 -505
  54. package/src/sap/fe/core/controllerextensions/InternalEditFlow.ts +783 -0
  55. package/src/sap/fe/core/controllerextensions/InternalIntentBasedNavigation.js +797 -813
  56. package/src/sap/fe/core/controllerextensions/InternalIntentBasedNavigation.ts +803 -0
  57. package/src/sap/fe/core/controllerextensions/InternalRouting.js +1005 -973
  58. package/src/sap/fe/core/controllerextensions/InternalRouting.ts +978 -0
  59. package/src/sap/fe/core/controllerextensions/KPIManagement.js +530 -476
  60. package/src/sap/fe/core/controllerextensions/KPIManagement.ts +137 -46
  61. package/src/sap/fe/core/controllerextensions/MassEdit.js +144 -0
  62. package/src/sap/fe/core/controllerextensions/MassEdit.ts +156 -0
  63. package/src/sap/fe/core/controllerextensions/MessageHandler.js +234 -232
  64. package/src/sap/fe/core/controllerextensions/MessageHandler.ts +225 -0
  65. package/src/sap/fe/core/controllerextensions/PageReady.js +302 -337
  66. package/src/sap/fe/core/controllerextensions/PageReady.ts +23 -17
  67. package/src/sap/fe/core/controllerextensions/Paginator.js +189 -148
  68. package/src/sap/fe/core/controllerextensions/Paginator.ts +163 -0
  69. package/src/sap/fe/core/controllerextensions/Placeholder.js +158 -146
  70. package/src/sap/fe/core/controllerextensions/Placeholder.ts +151 -0
  71. package/src/sap/fe/core/controllerextensions/Routing.js +145 -106
  72. package/src/sap/fe/core/controllerextensions/Routing.ts +132 -0
  73. package/src/sap/fe/core/controllerextensions/RoutingListener.js +8 -6
  74. package/src/sap/fe/core/controllerextensions/RoutingListener.ts +3 -0
  75. package/src/sap/fe/core/controllerextensions/Share.js +220 -244
  76. package/src/sap/fe/core/controllerextensions/Share.ts +231 -0
  77. package/src/sap/fe/core/controllerextensions/SideEffects.js +593 -634
  78. package/src/sap/fe/core/controllerextensions/SideEffects.ts +29 -27
  79. package/src/sap/fe/core/controllerextensions/ViewState.js +789 -806
  80. package/src/sap/fe/core/controllerextensions/ViewState.ts +805 -0
  81. package/src/sap/fe/core/controls/ActionParameterDialog.fragment.xml +4 -3
  82. package/src/sap/fe/core/controls/ActionPartial.fragment.xml +2 -2
  83. package/src/sap/fe/core/controls/CommandExecution.js +68 -66
  84. package/src/sap/fe/core/controls/CommandExecution.ts +72 -0
  85. package/src/sap/fe/core/controls/ConditionalWrapper.js +91 -75
  86. package/src/sap/fe/core/controls/ConditionalWrapper.ts +83 -0
  87. package/src/sap/fe/core/controls/CustomQuickViewPage.js +131 -125
  88. package/src/sap/fe/core/controls/CustomQuickViewPage.ts +126 -0
  89. package/src/sap/fe/core/controls/DataLossOrDraftDiscard/DataLossOrDraftDiscardHandler.js +105 -110
  90. package/src/sap/fe/core/controls/DataLossOrDraftDiscard/DataLossOrDraftDiscardHandler.ts +101 -0
  91. package/src/sap/fe/core/controls/FieldWrapper.js +122 -140
  92. package/src/sap/fe/core/controls/FieldWrapper.ts +115 -0
  93. package/src/sap/fe/core/controls/FilterBar.js +163 -159
  94. package/src/sap/fe/core/controls/FilterBar.ts +143 -0
  95. package/src/sap/fe/core/controls/FormElementWrapper.js +46 -44
  96. package/src/sap/fe/core/controls/FormElementWrapper.ts +40 -0
  97. package/src/sap/fe/core/controls/MultiValueParameterDelegate.js +38 -42
  98. package/src/sap/fe/core/controls/MultiValueParameterDelegate.ts +31 -0
  99. package/src/sap/fe/core/controls/NonComputedVisibleKeyFieldsDialog.fragment.xml +2 -1
  100. package/src/sap/fe/core/controls/filterbar/FilterContainer.js +127 -116
  101. package/src/sap/fe/core/controls/filterbar/FilterContainer.ts +98 -0
  102. package/src/sap/fe/core/controls/filterbar/VisualFilter.js +242 -255
  103. package/src/sap/fe/core/controls/filterbar/VisualFilter.ts +245 -0
  104. package/src/sap/fe/core/controls/filterbar/VisualFilterContainer.js +151 -141
  105. package/src/sap/fe/core/controls/filterbar/VisualFilterContainer.ts +125 -0
  106. package/src/sap/fe/core/controls/filterbar/utils/VisualFilterUtils.js +336 -322
  107. package/src/sap/fe/core/controls/filterbar/utils/VisualFilterUtils.ts +337 -0
  108. package/src/sap/fe/core/controls/massEdit/MassEditDialog.fragment.xml +106 -0
  109. package/src/sap/fe/core/controls/massEdit/MassEditHandlers.js +79 -0
  110. package/src/sap/fe/core/controls/massEdit/MassEditHandlers.ts +70 -0
  111. package/src/sap/fe/core/converters/ConverterContext.js +348 -367
  112. package/src/sap/fe/core/converters/ConverterContext.ts +33 -19
  113. package/src/sap/fe/core/converters/ManifestSettings.js +12 -1
  114. package/src/sap/fe/core/converters/ManifestSettings.ts +16 -1
  115. package/src/sap/fe/core/converters/ManifestWrapper.js +354 -354
  116. package/src/sap/fe/core/converters/ManifestWrapper.ts +34 -6
  117. package/src/sap/fe/core/converters/MetaModelConverter.js +72 -9
  118. package/src/sap/fe/core/converters/MetaModelConverter.ts +75 -16
  119. package/src/sap/fe/core/converters/TemplateConverter.js +1 -1
  120. package/src/sap/fe/core/converters/TemplateConverter.ts +4 -3
  121. package/src/sap/fe/core/converters/annotations/DataField.js +28 -14
  122. package/src/sap/fe/core/converters/annotations/DataField.ts +38 -14
  123. package/src/sap/fe/core/converters/common/AnnotationConverter.js +33 -21
  124. package/src/sap/fe/core/converters/controls/Common/Action.js +11 -2
  125. package/src/sap/fe/core/converters/controls/Common/Action.ts +8 -2
  126. package/src/sap/fe/core/converters/controls/Common/Chart.js +5 -3
  127. package/src/sap/fe/core/converters/controls/Common/Chart.ts +11 -3
  128. package/src/sap/fe/core/converters/controls/Common/DataVisualization.js +3 -3
  129. package/src/sap/fe/core/converters/controls/Common/DataVisualization.ts +2 -2
  130. package/src/sap/fe/core/converters/controls/Common/Form.js +21 -11
  131. package/src/sap/fe/core/converters/controls/Common/Form.ts +28 -6
  132. package/src/sap/fe/core/converters/controls/Common/KPI.js +69 -4
  133. package/src/sap/fe/core/converters/controls/Common/KPI.ts +75 -2
  134. package/src/sap/fe/core/converters/controls/Common/Table.js +507 -408
  135. package/src/sap/fe/core/converters/controls/Common/Table.ts +618 -500
  136. package/src/sap/fe/core/converters/controls/Common/table/StandardActions.js +592 -0
  137. package/src/sap/fe/core/converters/controls/Common/table/StandardActions.ts +718 -0
  138. package/src/sap/fe/core/converters/controls/ListReport/FilterBar.js +465 -59
  139. package/src/sap/fe/core/converters/controls/ListReport/FilterBar.ts +462 -72
  140. package/src/sap/fe/core/converters/controls/ListReport/VisualFilters.js +2 -2
  141. package/src/sap/fe/core/converters/controls/ListReport/VisualFilters.ts +1 -1
  142. package/src/sap/fe/core/converters/controls/ObjectPage/SubSection.js +17 -9
  143. package/src/sap/fe/core/converters/controls/ObjectPage/SubSection.ts +24 -9
  144. package/src/sap/fe/core/converters/helpers/Aggregation.js +118 -121
  145. package/src/sap/fe/core/converters/helpers/Aggregation.ts +28 -5
  146. package/src/sap/fe/core/converters/helpers/BindingHelper.js +20 -6
  147. package/src/sap/fe/core/converters/helpers/BindingHelper.ts +16 -4
  148. package/src/sap/fe/core/converters/helpers/ConfigurableObject.js +12 -1
  149. package/src/sap/fe/core/converters/helpers/ConfigurableObject.ts +11 -0
  150. package/src/sap/fe/core/converters/helpers/IssueManager.js +7 -1
  151. package/src/sap/fe/core/converters/helpers/IssueManager.ts +6 -0
  152. package/src/sap/fe/core/converters/helpers/Key.js +42 -57
  153. package/src/sap/fe/core/converters/helpers/Key.ts +1 -1
  154. package/src/sap/fe/core/converters/objectPage/HeaderAndFooterAction.js +28 -7
  155. package/src/sap/fe/core/converters/objectPage/HeaderAndFooterAction.ts +23 -6
  156. package/src/sap/fe/core/converters/templates/ListReportConverter.js +20 -7
  157. package/src/sap/fe/core/converters/templates/ListReportConverter.ts +36 -14
  158. package/src/sap/fe/core/converters/templates/ObjectPageConverter.js +7 -5
  159. package/src/sap/fe/core/converters/templates/ObjectPageConverter.ts +5 -1
  160. package/src/sap/fe/core/designtime/AppComponent.designtime.js +93 -90
  161. package/src/sap/fe/core/designtime/AppComponent.designtime.ts +91 -0
  162. package/src/sap/fe/core/formatters/CollaborationFormatter.js +104 -0
  163. package/src/sap/fe/core/formatters/CollaborationFormatter.ts +60 -0
  164. package/src/sap/fe/core/formatters/CriticalityFormatter.js +1 -1
  165. package/src/sap/fe/core/formatters/CriticalityFormatter.ts +1 -1
  166. package/src/sap/fe/core/formatters/FPMFormatter.js +1 -1
  167. package/src/sap/fe/core/formatters/FPMFormatter.ts +4 -10
  168. package/src/sap/fe/core/formatters/KPIFormatter.js +1 -1
  169. package/src/sap/fe/core/formatters/KPIFormatter.ts +3 -1
  170. package/src/sap/fe/core/formatters/TableFormatter.js +91 -29
  171. package/src/sap/fe/core/formatters/TableFormatter.ts +94 -28
  172. package/src/sap/fe/core/formatters/ValueFormatter.js +30 -5
  173. package/src/sap/fe/core/formatters/ValueFormatter.ts +30 -7
  174. package/src/sap/fe/core/fpm/Component.js +51 -54
  175. package/src/sap/fe/core/fpm/Component.ts +48 -0
  176. package/src/sap/fe/core/helpers/AppStartupHelper.js +373 -0
  177. package/src/sap/fe/core/helpers/AppStartupHelper.ts +417 -0
  178. package/src/sap/fe/core/helpers/BindingExpression.js +489 -442
  179. package/src/sap/fe/core/helpers/BindingExpression.ts +486 -469
  180. package/src/sap/fe/core/helpers/ClassSupport.js +212 -76
  181. package/src/sap/fe/core/helpers/ClassSupport.ts +198 -71
  182. package/src/sap/fe/core/helpers/DynamicAnnotationPathHelper.js +64 -59
  183. package/src/sap/fe/core/helpers/DynamicAnnotationPathHelper.ts +52 -0
  184. package/src/sap/fe/core/helpers/EditState.js +81 -84
  185. package/src/sap/fe/core/helpers/EditState.ts +81 -0
  186. package/src/sap/fe/core/helpers/ExcelFormatHelper.js +62 -48
  187. package/src/sap/fe/core/helpers/ExcelFormatHelper.ts +49 -0
  188. package/src/sap/fe/core/helpers/FPMHelper.js +52 -56
  189. package/src/sap/fe/core/helpers/FPMHelper.ts +62 -0
  190. package/src/sap/fe/core/helpers/KeepAliveHelper.js +4 -5
  191. package/src/sap/fe/core/helpers/KeepAliveHelper.ts +10 -10
  192. package/src/sap/fe/core/helpers/MassEditHelper.js +604 -0
  193. package/src/sap/fe/core/helpers/MassEditHelper.ts +699 -0
  194. package/src/sap/fe/core/helpers/ModelHelper.js +253 -225
  195. package/src/sap/fe/core/helpers/ModelHelper.ts +250 -0
  196. package/src/sap/fe/core/helpers/PasteHelper.js +210 -132
  197. package/src/sap/fe/core/helpers/PasteHelper.ts +196 -0
  198. package/src/sap/fe/core/helpers/SemanticDateOperators.js +336 -313
  199. package/src/sap/fe/core/helpers/SemanticDateOperators.ts +334 -0
  200. package/src/sap/fe/core/helpers/SemanticKeyHelper.js +66 -67
  201. package/src/sap/fe/core/helpers/SemanticKeyHelper.ts +73 -0
  202. package/src/sap/fe/core/helpers/StableIdHelper.js +4 -7
  203. package/src/sap/fe/core/helpers/StableIdHelper.ts +2 -6
  204. package/src/sap/fe/core/jsx-runtime/jsx.js +1 -1
  205. package/src/sap/fe/core/jsx-runtime/jsx.ts +1 -1
  206. package/src/sap/fe/core/library.js +427 -425
  207. package/src/sap/fe/core/library.support.js +23 -27
  208. package/src/sap/fe/core/library.support.ts +23 -0
  209. package/src/sap/fe/core/library.ts +420 -0
  210. package/src/sap/fe/core/manifestMerger/ChangePageConfiguration.js +64 -0
  211. package/src/sap/fe/core/manifestMerger/ChangePageConfiguration.ts +69 -0
  212. package/src/sap/fe/core/messagebundle.properties +78 -13
  213. package/src/sap/fe/core/messagebundle_ar.properties +58 -7
  214. package/src/sap/fe/core/messagebundle_bg.properties +58 -7
  215. package/src/sap/fe/core/messagebundle_ca.properties +58 -7
  216. package/src/sap/fe/core/messagebundle_cs.properties +59 -8
  217. package/src/sap/fe/core/messagebundle_cy.properties +58 -7
  218. package/src/sap/fe/core/messagebundle_da.properties +58 -7
  219. package/src/sap/fe/core/messagebundle_de.properties +58 -7
  220. package/src/sap/fe/core/messagebundle_el.properties +58 -7
  221. package/src/sap/fe/core/messagebundle_en.properties +57 -6
  222. package/src/sap/fe/core/messagebundle_en_GB.properties +57 -6
  223. package/src/sap/fe/core/messagebundle_en_US_sappsd.properties +61 -6
  224. package/src/sap/fe/core/messagebundle_en_US_saprigi.properties +58 -7
  225. package/src/sap/fe/core/messagebundle_en_US_saptrc.properties +58 -7
  226. package/src/sap/fe/core/messagebundle_es.properties +58 -7
  227. package/src/sap/fe/core/messagebundle_es_MX.properties +58 -7
  228. package/src/sap/fe/core/messagebundle_et.properties +58 -7
  229. package/src/sap/fe/core/messagebundle_fi.properties +60 -9
  230. package/src/sap/fe/core/messagebundle_fr.properties +64 -13
  231. package/src/sap/fe/core/messagebundle_fr_CA.properties +59 -8
  232. package/src/sap/fe/core/messagebundle_hi.properties +58 -7
  233. package/src/sap/fe/core/messagebundle_hr.properties +58 -7
  234. package/src/sap/fe/core/messagebundle_hu.properties +59 -8
  235. package/src/sap/fe/core/messagebundle_id.properties +61 -10
  236. package/src/sap/fe/core/messagebundle_it.properties +58 -7
  237. package/src/sap/fe/core/messagebundle_iw.properties +58 -7
  238. package/src/sap/fe/core/messagebundle_ja.properties +58 -7
  239. package/src/sap/fe/core/messagebundle_kk.properties +58 -7
  240. package/src/sap/fe/core/messagebundle_ko.properties +58 -7
  241. package/src/sap/fe/core/messagebundle_lt.properties +58 -7
  242. package/src/sap/fe/core/messagebundle_lv.properties +59 -8
  243. package/src/sap/fe/core/messagebundle_ms.properties +58 -7
  244. package/src/sap/fe/core/messagebundle_nl.properties +58 -7
  245. package/src/sap/fe/core/messagebundle_no.properties +58 -7
  246. package/src/sap/fe/core/messagebundle_pl.properties +58 -7
  247. package/src/sap/fe/core/messagebundle_pt.properties +59 -8
  248. package/src/sap/fe/core/messagebundle_pt_PT.properties +58 -7
  249. package/src/sap/fe/core/messagebundle_ro.properties +58 -7
  250. package/src/sap/fe/core/messagebundle_ru.properties +58 -7
  251. package/src/sap/fe/core/messagebundle_sh.properties +58 -7
  252. package/src/sap/fe/core/messagebundle_sk.properties +58 -7
  253. package/src/sap/fe/core/messagebundle_sl.properties +58 -7
  254. package/src/sap/fe/core/messagebundle_sv.properties +59 -8
  255. package/src/sap/fe/core/messagebundle_th.properties +58 -7
  256. package/src/sap/fe/core/messagebundle_tr.properties +60 -9
  257. package/src/sap/fe/core/messagebundle_uk.properties +58 -7
  258. package/src/sap/fe/core/messagebundle_vi.properties +58 -7
  259. package/src/sap/fe/core/messagebundle_zh_CN.properties +58 -7
  260. package/src/sap/fe/core/messagebundle_zh_TW.properties +58 -7
  261. package/src/sap/fe/core/services/AsyncComponentServiceFactory.js +45 -71
  262. package/src/sap/fe/core/services/AsyncComponentServiceFactory.ts +3 -1
  263. package/src/sap/fe/core/services/CacheHandlerServiceFactory.js +231 -202
  264. package/src/sap/fe/core/services/CacheHandlerServiceFactory.ts +212 -0
  265. package/src/sap/fe/core/services/EnvironmentServiceFactory.js +67 -92
  266. package/src/sap/fe/core/services/EnvironmentServiceFactory.ts +10 -6
  267. package/src/sap/fe/core/services/NavigationServiceFactory.js +351 -300
  268. package/src/sap/fe/core/services/NavigationServiceFactory.ts +313 -0
  269. package/src/sap/fe/core/services/ResourceModelServiceFactory.js +114 -81
  270. package/src/sap/fe/core/services/ResourceModelServiceFactory.ts +83 -0
  271. package/src/sap/fe/core/services/RoutingServiceFactory.js +927 -1152
  272. package/src/sap/fe/core/services/RoutingServiceFactory.ts +898 -0
  273. package/src/sap/fe/core/services/ShellServicesFactory.js +649 -707
  274. package/src/sap/fe/core/services/ShellServicesFactory.ts +52 -15
  275. package/src/sap/fe/core/services/SideEffectsServiceFactory.js +569 -637
  276. package/src/sap/fe/core/services/SideEffectsServiceFactory.ts +78 -102
  277. package/src/sap/fe/core/services/TemplatedViewServiceFactory.js +429 -478
  278. package/src/sap/fe/core/services/TemplatedViewServiceFactory.ts +460 -0
  279. package/src/sap/fe/core/services/view/TemplatingErrorPage.controller.js +10 -8
  280. package/src/sap/fe/core/services/view/TemplatingErrorPage.controller.ts +8 -0
  281. package/src/sap/fe/core/support/AnnotationIssue.support.js +15 -3
  282. package/src/sap/fe/core/support/AnnotationIssue.support.ts +16 -2
  283. package/src/sap/fe/core/support/CollectionFacetUnsupportedLevel.support.js +2 -2
  284. package/src/sap/fe/core/support/CollectionFacetUnsupportedLevel.support.ts +1 -1
  285. package/src/sap/fe/core/support/CommonHelper.js +1 -1
  286. package/src/sap/fe/core/support/CommonHelper.ts +1 -1
  287. package/src/sap/fe/core/support/Diagnostics.js +36 -48
  288. package/src/sap/fe/core/support/InvalidAnnotationColumnKey.support.js +38 -0
  289. package/src/sap/fe/core/support/InvalidAnnotationColumnKey.support.ts +18 -0
  290. package/src/sap/fe/core/templating/DataModelPathHelper.js +97 -127
  291. package/src/sap/fe/core/templating/DataModelPathHelper.ts +112 -135
  292. package/src/sap/fe/core/templating/DisplayModeFormatter.js +114 -0
  293. package/src/sap/fe/core/templating/DisplayModeFormatter.ts +86 -0
  294. package/src/sap/fe/core/templating/FieldControlHelper.js +8 -8
  295. package/src/sap/fe/core/templating/FieldControlHelper.ts +25 -7
  296. package/src/sap/fe/core/templating/FilterHelper.js +140 -78
  297. package/src/sap/fe/core/templating/FilterHelper.ts +149 -78
  298. package/src/sap/fe/core/templating/PropertyHelper.js +3 -3
  299. package/src/sap/fe/core/templating/PropertyHelper.ts +2 -2
  300. package/src/sap/fe/core/templating/UIFormatters.js +76 -135
  301. package/src/sap/fe/core/templating/UIFormatters.ts +76 -99
  302. package/src/sap/fe/core/type/Email.js +1 -1
  303. package/src/sap/fe/core/type/Email.ts +4 -6
  304. package/ui5.yaml +0 -3
  305. package/src/sap/fe/core/controls/filterbar.d.js +0 -8
  306. package/src/sap/fe/core/controls/filterbar.d.ts +0 -0
@@ -1,227 +1,255 @@
1
1
  /*!
2
- * SAPUI5
3
- * (c) Copyright 2009-2021 SAP SE. All rights reserved.
2
+ * SAP UI development toolkit for HTML5 (SAPUI5)
3
+ * (c) Copyright 2009-2021 SAP SE. All rights reserved
4
4
  */
5
- sap.ui.define([], function() {
6
- "use strict";
7
-
8
- /* This class contains helpers to be used at runtime to retrieve further information on the model */
9
-
10
- var ModelHelper = {
11
- /**
12
- * Method to determine if the programming model is sticky.
13
- *
14
- * @function
15
- * @name isStickySessionSupported
16
- * @param {sap.ui.model.odata.v4.MetaModel} oMetaModel ODataModelMetaModel to check for sticky enabled entity
17
- * @returns {boolean} Returns true if sticky, else false
18
- */
19
- isStickySessionSupported: function(oMetaModel) {
20
- var oEntityContainer = oMetaModel.getObject("/");
21
- for (var sEntitySet in oEntityContainer) {
22
- if (
23
- oEntityContainer[sEntitySet].$kind === "EntitySet" &&
24
- oMetaModel.getObject("/" + sEntitySet + "@com.sap.vocabularies.Session.v1.StickySessionSupported")
25
- ) {
26
- return true;
27
- }
28
- }
29
- return false;
30
- },
31
-
32
- /**
33
- * Method to determine if the programming model is draft.
34
- *
35
- * @function
36
- * @name isDraftSupported
37
- * @param {sap.ui.model.odata.v4.MetaModel} oMetaModel ODataModelMetaModel of the context for which draft support shall be checked
38
- * @param {string} sPath Path for which draft support shall be checked
39
- * @returns {boolean} Returns true if draft, else false
40
- */
41
- isDraftSupported: function(oMetaModel, sPath) {
42
- var oMetaContext = oMetaModel.getMetaContext(sPath),
43
- sTargetEntitySet = this.getTargetEntitySet(oMetaContext),
44
- oParentEntitySetContext,
45
- aParts;
46
-
47
- if (oMetaContext.getProperty && oMetaContext.getProperty() && oMetaContext.getProperty().$ContainsTarget === true) {
48
- aParts = oMetaModel
49
- .getMetaPath(sPath)
50
- .split("/")
51
- .filter(Boolean);
52
- if (aParts.length) {
53
- for (var i = aParts.length - 1; i >= 0; i--) {
54
- oParentEntitySetContext = oMetaModel.getMetaContext(oMetaModel.getMetaPath("/" + aParts[i]));
55
- if (oParentEntitySetContext.getObject("$kind") === "EntitySet") {
56
- sTargetEntitySet = this.getTargetEntitySet(oParentEntitySetContext);
57
- break;
58
- }
59
- }
60
- }
61
- } else {
62
- sTargetEntitySet = this.getTargetEntitySet(oMetaContext);
63
- }
64
- var oEntityContext = oMetaModel.getMetaContext(sTargetEntitySet);
65
- if (
66
- oEntityContext.getObject("@com.sap.vocabularies.Common.v1.DraftRoot") ||
67
- oEntityContext.getObject("@com.sap.vocabularies.Common.v1.DraftNode")
68
- ) {
69
- return true;
70
- }
71
- return false;
72
- },
73
-
74
- /**
75
- * Returns path to the target entity set via using navigation property binding.
76
- *
77
- * @function
78
- * @name getTargetEntitySet
79
- * @param {sap.ui.model.odata.v4.Context} oContext Context for which the target entity set shall be determined
80
- * @returns {string} Returns path to the target entity set
81
- */
82
- getTargetEntitySet: function(oContext) {
83
- var sPath = oContext.getPath();
84
- if (
85
- oContext.getObject("$kind") === "EntitySet" ||
86
- oContext.getObject("$kind") === "Action" ||
87
- oContext.getObject("0/$kind") === "Action"
88
- ) {
89
- return sPath;
90
- }
91
- var sEntitySetPath = ModelHelper.getEntitySetPath(sPath);
92
- return "/" + oContext.getObject(sEntitySetPath);
93
- },
94
-
95
- /**
96
- * Returns complete path to the entity set via using navigation property binding.
97
- *
98
- * @function
99
- * @name getEntitySetPath
100
- * @param {string} sPath Path for which complete entitySet path needs to be determined
101
- * @returns {string} Returns complete path to the entity set
102
- */
103
- getEntitySetPath: function(sPath) {
104
- return (
105
- "/" +
106
- sPath
107
- .split("/")
108
- .filter(ModelHelper.filterOutNavPropBinding)
109
- .join("/$NavigationPropertyBinding/")
110
- );
111
- },
112
-
113
- /**
114
- * Gets the path for the items property of MultiValueField parameters.
115
- *
116
- * @function
117
- * @name getActionParameterItemsModelPath
118
- * @param {object} oParameter Action Parameter
119
- * @returns {string} Returns the complete model path for the items property of MultiValueField parameters
120
- */
121
- getActionParameterItemsModelPath: function(oParameter) {
122
- return oParameter && oParameter.$Name ? "{path: 'mvfview>/" + oParameter.$Name + "'}" : undefined;
123
- },
124
-
125
- filterOutNavPropBinding: function(sPathPart) {
126
- return sPathPart !== "" && sPathPart !== "$NavigationPropertyBinding";
127
- },
128
-
129
- /**
130
- * Adds a setProperty to the created binding contexts of the internal JSON model.
131
- *
132
- * @function
133
- * @name enhanceInternalJSONModel
134
- * @param {sap.ui.model.json.JSONModel} Internal JSON Model which is enhanced
135
- */
136
-
137
- enhanceInternalJSONModel: function(oInternalModel) {
138
- var fnBindContext = oInternalModel.bindContext;
139
- oInternalModel.bindContext = function(sPath, oContext, mParameters) {
140
- var oContext = fnBindContext.apply(this, arguments);
141
- var fnGetBoundContext = oContext.getBoundContext;
142
-
143
- oContext.getBoundContext = function() {
144
- var oBoundContext = fnGetBoundContext.apply(this, arguments);
145
- if (oBoundContext && !oBoundContext.setProperty) {
146
- oBoundContext.setProperty = function(sPath, value) {
147
- if (this.getObject() === undefined) {
148
- // initialize
149
- this.getModel().setProperty(this.getPath(), {});
150
- }
151
- this.getModel().setProperty(sPath, value, this);
152
- };
153
- }
154
- return oBoundContext;
155
- };
156
- return oContext;
157
- };
158
- },
159
-
160
- /**
161
- * Returns whether filtering on the table is case sensitive.
162
- *
163
- * @param oMetaModel The instance of the meta model
164
- * @returns {boolean|undefined} Returns 'false' if FilterFunctions annotation supports 'tolower', else 'true'
165
- */
166
- isFilteringCaseSensitive: function(oMetaModel) {
167
- if (!oMetaModel) {
168
- return undefined;
169
- }
170
- var aFilterFunctions = oMetaModel.getObject("/@Org.OData.Capabilities.V1.FilterFunctions");
171
- // Get filter functions defined at EntityContainer and check for existence of 'tolower'
172
- return aFilterFunctions ? aFilterFunctions.indexOf("tolower") === -1 : true;
173
- },
174
-
175
- /**
176
- * Get MetaPath for the context.
177
- *
178
- * @param {Context} oContext Context to be used
179
- * @returns {string | undefined} Returns meta path for the context.
180
- */
181
- getMetaPathForContext: function(oContext) {
182
- var oModel = oContext.getModel(),
183
- oMetaModel = oModel.getMetaModel(),
184
- sPath = oContext.getPath();
185
- return oMetaModel && sPath && oMetaModel.getMetaPath(sPath);
186
- },
187
-
188
- /**
189
- * Get MetaPath for the listbinding.
190
- *
191
- * @param {View} oView View of the control using listBinding
192
- * @param {ODataListBinding | string} vListBinding ODataListBinding object or the binding path for a temporary list binding
193
- * @returns {string | undefined} Returns meta path for the listbinding.
194
- */
195
- getAbsoluteMetaPathForListBinding: function(oView, vListBinding) {
196
- var oMetaModel = oView.getModel().getMetaModel();
197
- var sMetaPath;
198
-
199
- if (typeof vListBinding === "string") {
200
- if (vListBinding.startsWith("/")) {
201
- // absolute path
202
- sMetaPath = oMetaModel.getMetaPath(vListBinding);
203
- } else {
204
- // relative path
205
- var oBindingContext = oView.getBindingContext();
206
- var sRootContextPath = oBindingContext.getPath();
207
- sMetaPath = oMetaModel.getMetaPath(sRootContextPath + "/" + vListBinding);
208
- }
209
- } else {
210
- // we already get a list binding use this one
211
- var oBinding = vListBinding;
212
- var oRootBinding = oBinding.getRootBinding();
213
- if (oBinding === oRootBinding) {
214
- // absolute path
215
- sMetaPath = oMetaModel.getMetaPath(oBinding.getPath());
216
- } else {
217
- // relative path
218
- var sRootBindingPath = oRootBinding.getPath();
219
- var sRelativePath = oBinding.getPath();
220
- sMetaPath = oMetaModel.getMetaPath(sRootBindingPath + "/" + sRelativePath);
221
- }
222
- }
223
- return sMetaPath;
224
- }
225
- };
226
- return ModelHelper;
227
- });
5
+ sap.ui.define([], function () {
6
+ "use strict";
7
+
8
+ /* This class contains helpers to be used at runtime to retrieve further information on the model */
9
+ var ModelHelper = {
10
+ /**
11
+ * Method to determine if the programming model is sticky.
12
+ *
13
+ * @function
14
+ * @name isStickySessionSupported
15
+ * @param {sap.ui.model.odata.v4.ODataMetaModel} oMetaModel ODataModelMetaModel to check for sticky enabled entity
16
+ * @returns {boolean} Returns true if sticky, else false
17
+ */
18
+ isStickySessionSupported: function (oMetaModel) {
19
+ var oEntityContainer = oMetaModel.getObject("/");
20
+
21
+ for (var sEntitySet in oEntityContainer) {
22
+ if (oEntityContainer[sEntitySet].$kind === "EntitySet" && oMetaModel.getObject("/".concat(sEntitySet, "@com.sap.vocabularies.Session.v1.StickySessionSupported"))) {
23
+ return true;
24
+ }
25
+ }
26
+
27
+ return false;
28
+ },
29
+
30
+ /**
31
+ * Method to determine if the programming model is draft.
32
+ *
33
+ * @function
34
+ * @name isDraftSupported
35
+ * @param {sap.ui.model.odata.v4.MetaModel} oMetaModel ODataModelMetaModel of the context for which draft support shall be checked
36
+ * @param {string} sPath Path for which draft support shall be checked
37
+ * @returns {boolean} Returns true if draft, else false
38
+ */
39
+ isDraftSupported: function (oMetaModel, sPath) {
40
+ var oMetaContext = oMetaModel.getMetaContext(sPath);
41
+ var sTargetEntitySet = this.getTargetEntitySet(oMetaContext),
42
+ oParentEntitySetContext,
43
+ aParts;
44
+
45
+ if (oMetaContext.getProperty && oMetaContext.getProperty() && oMetaContext.getProperty().$ContainsTarget === true) {
46
+ aParts = oMetaModel.getMetaPath(sPath).split("/").filter(Boolean);
47
+
48
+ if (aParts.length) {
49
+ for (var i = aParts.length - 1; i >= 0; i--) {
50
+ oParentEntitySetContext = oMetaModel.getMetaContext(oMetaModel.getMetaPath("/" + aParts[i]));
51
+
52
+ if (oParentEntitySetContext.getObject("$kind") === "EntitySet") {
53
+ sTargetEntitySet = this.getTargetEntitySet(oParentEntitySetContext);
54
+ break;
55
+ }
56
+ }
57
+ }
58
+ } else {
59
+ sTargetEntitySet = this.getTargetEntitySet(oMetaContext);
60
+ }
61
+
62
+ var oEntityContext = oMetaModel.getMetaContext(sTargetEntitySet);
63
+
64
+ if (oEntityContext.getObject("@com.sap.vocabularies.Common.v1.DraftRoot") || oEntityContext.getObject("@com.sap.vocabularies.Common.v1.DraftNode")) {
65
+ return true;
66
+ }
67
+
68
+ return false;
69
+ },
70
+
71
+ /**
72
+ * Method to determine if the service, supports collaboration draft.
73
+ *
74
+ * @function
75
+ * @name isCollaborationDraftSupported
76
+ * @param {object} metaObject MetaObject to be used for determination
77
+ * @param {object} templateInterface API provided by UI5 templating if used
78
+ * @returns {boolean} Returns true if the service supports collaboration draft, else false
79
+ */
80
+ isCollaborationDraftSupported: function (metaObject, templateInterface) {
81
+ var _templateInterface$co;
82
+
83
+ var oMetaModel = (templateInterface === null || templateInterface === void 0 ? void 0 : (_templateInterface$co = templateInterface.context) === null || _templateInterface$co === void 0 ? void 0 : _templateInterface$co.getModel()) || metaObject;
84
+ var oEntityContainer = oMetaModel.getObject("/");
85
+
86
+ for (var sEntitySet in oEntityContainer) {
87
+ if (oEntityContainer[sEntitySet].$kind === "EntitySet" && oMetaModel.getObject("/" + sEntitySet + "@com.sap.vocabularies.Common.v1.DraftRoot/ShareAction")) {
88
+ return true;
89
+ }
90
+ }
91
+
92
+ return false;
93
+ },
94
+
95
+ /**
96
+ * Returns path to the target entity set via using navigation property binding.
97
+ *
98
+ * @function
99
+ * @name getTargetEntitySet
100
+ * @param {sap.ui.model.odata.v4.Context} oContext Context for which the target entity set shall be determined
101
+ * @returns {string} Returns path to the target entity set
102
+ */
103
+ getTargetEntitySet: function (oContext) {
104
+ var sPath = oContext.getPath();
105
+
106
+ if (oContext.getObject("$kind") === "EntitySet" || oContext.getObject("$kind") === "Action" || oContext.getObject("0/$kind") === "Action") {
107
+ return sPath;
108
+ }
109
+
110
+ var sEntitySetPath = ModelHelper.getEntitySetPath(sPath);
111
+ return "/" + oContext.getObject(sEntitySetPath);
112
+ },
113
+
114
+ /**
115
+ * Returns complete path to the entity set via using navigation property binding.
116
+ *
117
+ * @function
118
+ * @name getEntitySetPath
119
+ * @param {string} sPath Path for which complete entitySet path needs to be determined
120
+ * @returns {string} Returns complete path to the entity set
121
+ */
122
+ getEntitySetPath: function (sPath) {
123
+ return "/" + sPath.split("/").filter(ModelHelper.filterOutNavPropBinding).join("/$NavigationPropertyBinding/");
124
+ },
125
+
126
+ /**
127
+ * Gets the path for the items property of MultiValueField parameters.
128
+ *
129
+ * @function
130
+ * @name getActionParameterItemsModelPath
131
+ * @param {object} oParameter Action Parameter
132
+ * @returns {string} Returns the complete model path for the items property of MultiValueField parameters
133
+ */
134
+ getActionParameterItemsModelPath: function (oParameter) {
135
+ return oParameter && oParameter.$Name ? "{path: 'mvfview>/".concat(oParameter.$Name, "'}") : undefined;
136
+ },
137
+ filterOutNavPropBinding: function (sPathPart) {
138
+ return sPathPart !== "" && sPathPart !== "$NavigationPropertyBinding";
139
+ },
140
+
141
+ /**
142
+ * Adds a setProperty to the created binding contexts of the internal JSON model.
143
+ *
144
+ * @function
145
+ * @name enhanceInternalJSONModel
146
+ * @param {sap.ui.model.json.JSONModel} Internal JSON Model which is enhanced
147
+ */
148
+ enhanceInternalJSONModel: function (oInternalModel) {
149
+ var fnBindContext = oInternalModel.bindContext;
150
+
151
+ oInternalModel.bindContext = function (sPath, oContext, mParameters) {
152
+ for (var _len = arguments.length, args = new Array(_len > 3 ? _len - 3 : 0), _key = 3; _key < _len; _key++) {
153
+ args[_key - 3] = arguments[_key];
154
+ }
155
+
156
+ oContext = fnBindContext.apply(this, [sPath, oContext, mParameters].concat(args));
157
+ var fnGetBoundContext = oContext.getBoundContext;
158
+
159
+ oContext.getBoundContext = function () {
160
+ for (var _len2 = arguments.length, subArgs = new Array(_len2), _key2 = 0; _key2 < _len2; _key2++) {
161
+ subArgs[_key2] = arguments[_key2];
162
+ }
163
+
164
+ var oBoundContext = fnGetBoundContext.apply.apply(fnGetBoundContext, [this].concat(subArgs));
165
+
166
+ if (oBoundContext && !oBoundContext.setProperty) {
167
+ oBoundContext.setProperty = function (sSetPropPath, value) {
168
+ if (this.getObject() === undefined) {
169
+ // initialize
170
+ this.getModel().setProperty(this.getPath(), {});
171
+ }
172
+
173
+ this.getModel().setProperty(sSetPropPath, value, this);
174
+ };
175
+ }
176
+
177
+ return oBoundContext;
178
+ };
179
+
180
+ return oContext;
181
+ };
182
+ },
183
+
184
+ /**
185
+ * Returns whether filtering on the table is case sensitive.
186
+ *
187
+ * @param oMetaModel The instance of the meta model
188
+ * @returns {boolean|undefined} Returns 'false' if FilterFunctions annotation supports 'tolower', else 'true'
189
+ */
190
+ isFilteringCaseSensitive: function (oMetaModel) {
191
+ if (!oMetaModel) {
192
+ return undefined;
193
+ }
194
+
195
+ var aFilterFunctions = oMetaModel.getObject("/@Org.OData.Capabilities.V1.FilterFunctions"); // Get filter functions defined at EntityContainer and check for existence of 'tolower'
196
+
197
+ return aFilterFunctions ? aFilterFunctions.indexOf("tolower") === -1 : true;
198
+ },
199
+
200
+ /**
201
+ * Get MetaPath for the context.
202
+ *
203
+ * @param {Context} oContext Context to be used
204
+ * @returns {string | undefined} Returns meta path for the context.
205
+ */
206
+ getMetaPathForContext: function (oContext) {
207
+ var oModel = oContext.getModel(),
208
+ oMetaModel = oModel.getMetaModel(),
209
+ sPath = oContext.getPath();
210
+ return oMetaModel && sPath && oMetaModel.getMetaPath(sPath);
211
+ },
212
+
213
+ /**
214
+ * Get MetaPath for the listbinding.
215
+ *
216
+ * @param {View} oView View of the control using listBinding
217
+ * @param {ODataListBinding | string} vListBinding ODataListBinding object or the binding path for a temporary list binding
218
+ * @returns {string | undefined} Returns meta path for the listbinding.
219
+ */
220
+ getAbsoluteMetaPathForListBinding: function (oView, vListBinding) {
221
+ var oMetaModel = oView.getModel().getMetaModel();
222
+ var sMetaPath;
223
+
224
+ if (typeof vListBinding === "string") {
225
+ if (vListBinding.startsWith("/")) {
226
+ // absolute path
227
+ sMetaPath = oMetaModel.getMetaPath(vListBinding);
228
+ } else {
229
+ // relative path
230
+ var oBindingContext = oView.getBindingContext();
231
+ var sRootContextPath = oBindingContext.getPath();
232
+ sMetaPath = oMetaModel.getMetaPath("".concat(sRootContextPath, "/").concat(vListBinding));
233
+ }
234
+ } else {
235
+ // we already get a list binding use this one
236
+ var oBinding = vListBinding;
237
+ var oRootBinding = oBinding.getRootBinding();
238
+
239
+ if (oBinding === oRootBinding) {
240
+ // absolute path
241
+ sMetaPath = oMetaModel.getMetaPath(oBinding.getPath());
242
+ } else {
243
+ // relative path
244
+ var sRootBindingPath = oRootBinding.getPath();
245
+ var sRelativePath = oBinding.getPath();
246
+ sMetaPath = oMetaModel.getMetaPath("".concat(sRootBindingPath, "/").concat(sRelativePath));
247
+ }
248
+ }
249
+
250
+ return sMetaPath;
251
+ }
252
+ };
253
+ return ModelHelper;
254
+ }, false);
255
+ //# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIk1vZGVsSGVscGVyLnRzIl0sIm5hbWVzIjpbIk1vZGVsSGVscGVyIiwiaXNTdGlja3lTZXNzaW9uU3VwcG9ydGVkIiwib01ldGFNb2RlbCIsIm9FbnRpdHlDb250YWluZXIiLCJnZXRPYmplY3QiLCJzRW50aXR5U2V0IiwiJGtpbmQiLCJpc0RyYWZ0U3VwcG9ydGVkIiwic1BhdGgiLCJvTWV0YUNvbnRleHQiLCJnZXRNZXRhQ29udGV4dCIsInNUYXJnZXRFbnRpdHlTZXQiLCJnZXRUYXJnZXRFbnRpdHlTZXQiLCJvUGFyZW50RW50aXR5U2V0Q29udGV4dCIsImFQYXJ0cyIsImdldFByb3BlcnR5IiwiJENvbnRhaW5zVGFyZ2V0IiwiZ2V0TWV0YVBhdGgiLCJzcGxpdCIsImZpbHRlciIsIkJvb2xlYW4iLCJsZW5ndGgiLCJpIiwib0VudGl0eUNvbnRleHQiLCJpc0NvbGxhYm9yYXRpb25EcmFmdFN1cHBvcnRlZCIsIm1ldGFPYmplY3QiLCJ0ZW1wbGF0ZUludGVyZmFjZSIsImNvbnRleHQiLCJnZXRNb2RlbCIsIm9Db250ZXh0IiwiZ2V0UGF0aCIsInNFbnRpdHlTZXRQYXRoIiwiZ2V0RW50aXR5U2V0UGF0aCIsImZpbHRlck91dE5hdlByb3BCaW5kaW5nIiwiam9pbiIsImdldEFjdGlvblBhcmFtZXRlckl0ZW1zTW9kZWxQYXRoIiwib1BhcmFtZXRlciIsIiROYW1lIiwidW5kZWZpbmVkIiwic1BhdGhQYXJ0IiwiZW5oYW5jZUludGVybmFsSlNPTk1vZGVsIiwib0ludGVybmFsTW9kZWwiLCJmbkJpbmRDb250ZXh0IiwiYmluZENvbnRleHQiLCJtUGFyYW1ldGVycyIsImFyZ3MiLCJhcHBseSIsImZuR2V0Qm91bmRDb250ZXh0IiwiZ2V0Qm91bmRDb250ZXh0Iiwic3ViQXJncyIsIm9Cb3VuZENvbnRleHQiLCJzZXRQcm9wZXJ0eSIsInNTZXRQcm9wUGF0aCIsInZhbHVlIiwiaXNGaWx0ZXJpbmdDYXNlU2Vuc2l0aXZlIiwiYUZpbHRlckZ1bmN0aW9ucyIsImluZGV4T2YiLCJnZXRNZXRhUGF0aEZvckNvbnRleHQiLCJvTW9kZWwiLCJnZXRNZXRhTW9kZWwiLCJnZXRBYnNvbHV0ZU1ldGFQYXRoRm9yTGlzdEJpbmRpbmciLCJvVmlldyIsInZMaXN0QmluZGluZyIsInNNZXRhUGF0aCIsInN0YXJ0c1dpdGgiLCJvQmluZGluZ0NvbnRleHQiLCJnZXRCaW5kaW5nQ29udGV4dCIsInNSb290Q29udGV4dFBhdGgiLCJvQmluZGluZyIsIm9Sb290QmluZGluZyIsImdldFJvb3RCaW5kaW5nIiwic1Jvb3RCaW5kaW5nUGF0aCIsInNSZWxhdGl2ZVBhdGgiXSwibWFwcGluZ3MiOiI7QUFBQTtBQUNBO0FBQ0E7Ozs7QUFGQTtBQUtBLE1BQU1BLFdBQVcsR0FBRztBQUNuQjtBQUNEO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0NDLElBQUFBLHdCQUF3QixFQUFFLFVBQVNDLFVBQVQsRUFBcUM7QUFDOUQsVUFBTUMsZ0JBQWdCLEdBQUdELFVBQVUsQ0FBQ0UsU0FBWCxDQUFxQixHQUFyQixDQUF6Qjs7QUFDQSxXQUFLLElBQU1DLFVBQVgsSUFBeUJGLGdCQUF6QixFQUEyQztBQUMxQyxZQUNDQSxnQkFBZ0IsQ0FBQ0UsVUFBRCxDQUFoQixDQUE2QkMsS0FBN0IsS0FBdUMsV0FBdkMsSUFDQUosVUFBVSxDQUFDRSxTQUFYLFlBQXlCQyxVQUF6Qiw2REFGRCxFQUdFO0FBQ0QsaUJBQU8sSUFBUDtBQUNBO0FBQ0Q7O0FBQ0QsYUFBTyxLQUFQO0FBQ0EsS0FwQmtCOztBQXNCbkI7QUFDRDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0NFLElBQUFBLGdCQUFnQixFQUFFLFVBQVNMLFVBQVQsRUFBMEJNLEtBQTFCLEVBQXlDO0FBQzFELFVBQU1DLFlBQVksR0FBR1AsVUFBVSxDQUFDUSxjQUFYLENBQTBCRixLQUExQixDQUFyQjtBQUNBLFVBQUlHLGdCQUFnQixHQUFHLEtBQUtDLGtCQUFMLENBQXdCSCxZQUF4QixDQUF2QjtBQUFBLFVBQ0NJLHVCQUREO0FBQUEsVUFFQ0MsTUFGRDs7QUFJQSxVQUFJTCxZQUFZLENBQUNNLFdBQWIsSUFBNEJOLFlBQVksQ0FBQ00sV0FBYixFQUE1QixJQUEwRE4sWUFBWSxDQUFDTSxXQUFiLEdBQTJCQyxlQUEzQixLQUErQyxJQUE3RyxFQUFtSDtBQUNsSEYsUUFBQUEsTUFBTSxHQUFHWixVQUFVLENBQ2pCZSxXQURPLENBQ0tULEtBREwsRUFFUFUsS0FGTyxDQUVELEdBRkMsRUFHUEMsTUFITyxDQUdBQyxPQUhBLENBQVQ7O0FBSUEsWUFBSU4sTUFBTSxDQUFDTyxNQUFYLEVBQW1CO0FBQ2xCLGVBQUssSUFBSUMsQ0FBQyxHQUFHUixNQUFNLENBQUNPLE1BQVAsR0FBZ0IsQ0FBN0IsRUFBZ0NDLENBQUMsSUFBSSxDQUFyQyxFQUF3Q0EsQ0FBQyxFQUF6QyxFQUE2QztBQUM1Q1QsWUFBQUEsdUJBQXVCLEdBQUdYLFVBQVUsQ0FBQ1EsY0FBWCxDQUEwQlIsVUFBVSxDQUFDZSxXQUFYLENBQXVCLE1BQU1ILE1BQU0sQ0FBQ1EsQ0FBRCxDQUFuQyxDQUExQixDQUExQjs7QUFDQSxnQkFBSVQsdUJBQXVCLENBQUNULFNBQXhCLENBQWtDLE9BQWxDLE1BQStDLFdBQW5ELEVBQWdFO0FBQy9ETyxjQUFBQSxnQkFBZ0IsR0FBRyxLQUFLQyxrQkFBTCxDQUF3QkMsdUJBQXhCLENBQW5CO0FBQ0E7QUFDQTtBQUNEO0FBQ0Q7QUFDRCxPQWRELE1BY087QUFDTkYsUUFBQUEsZ0JBQWdCLEdBQUcsS0FBS0Msa0JBQUwsQ0FBd0JILFlBQXhCLENBQW5CO0FBQ0E7O0FBQ0QsVUFBTWMsY0FBYyxHQUFHckIsVUFBVSxDQUFDUSxjQUFYLENBQTBCQyxnQkFBMUIsQ0FBdkI7O0FBQ0EsVUFDQ1ksY0FBYyxDQUFDbkIsU0FBZixDQUF5QiwyQ0FBekIsS0FDQW1CLGNBQWMsQ0FBQ25CLFNBQWYsQ0FBeUIsMkNBQXpCLENBRkQsRUFHRTtBQUNELGVBQU8sSUFBUDtBQUNBOztBQUNELGFBQU8sS0FBUDtBQUNBLEtBOURrQjs7QUFnRW5CO0FBQ0Q7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNDb0IsSUFBQUEsNkJBQTZCLEVBQUUsVUFBU0MsVUFBVCxFQUEwQkMsaUJBQTFCLEVBQW1EO0FBQUE7O0FBQ2pGLFVBQU14QixVQUFVLEdBQUksQ0FBQXdCLGlCQUFpQixTQUFqQixJQUFBQSxpQkFBaUIsV0FBakIscUNBQUFBLGlCQUFpQixDQUFFQyxPQUFuQixnRkFBNEJDLFFBQTVCLE9BQTBDSCxVQUE5RDtBQUNBLFVBQU10QixnQkFBZ0IsR0FBR0QsVUFBVSxDQUFDRSxTQUFYLENBQXFCLEdBQXJCLENBQXpCOztBQUNBLFdBQUssSUFBTUMsVUFBWCxJQUF5QkYsZ0JBQXpCLEVBQTJDO0FBQzFDLFlBQ0NBLGdCQUFnQixDQUFDRSxVQUFELENBQWhCLENBQTZCQyxLQUE3QixLQUF1QyxXQUF2QyxJQUNBSixVQUFVLENBQUNFLFNBQVgsQ0FBcUIsTUFBTUMsVUFBTixHQUFtQix1REFBeEMsQ0FGRCxFQUdFO0FBQ0QsaUJBQU8sSUFBUDtBQUNBO0FBQ0Q7O0FBQ0QsYUFBTyxLQUFQO0FBQ0EsS0FyRmtCOztBQXVGbkI7QUFDRDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNDTyxJQUFBQSxrQkFBa0IsRUFBRSxVQUFTaUIsUUFBVCxFQUE0QjtBQUMvQyxVQUFNckIsS0FBSyxHQUFHcUIsUUFBUSxDQUFDQyxPQUFULEVBQWQ7O0FBQ0EsVUFDQ0QsUUFBUSxDQUFDekIsU0FBVCxDQUFtQixPQUFuQixNQUFnQyxXQUFoQyxJQUNBeUIsUUFBUSxDQUFDekIsU0FBVCxDQUFtQixPQUFuQixNQUFnQyxRQURoQyxJQUVBeUIsUUFBUSxDQUFDekIsU0FBVCxDQUFtQixTQUFuQixNQUFrQyxRQUhuQyxFQUlFO0FBQ0QsZUFBT0ksS0FBUDtBQUNBOztBQUNELFVBQU11QixjQUFjLEdBQUcvQixXQUFXLENBQUNnQyxnQkFBWixDQUE2QnhCLEtBQTdCLENBQXZCO0FBQ0EsYUFBTyxNQUFNcUIsUUFBUSxDQUFDekIsU0FBVCxDQUFtQjJCLGNBQW5CLENBQWI7QUFDQSxLQTFHa0I7O0FBNEduQjtBQUNEO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0NDLElBQUFBLGdCQUFnQixFQUFFLFVBQVN4QixLQUFULEVBQXdCO0FBQ3pDLGFBQ0MsTUFDQUEsS0FBSyxDQUNIVSxLQURGLENBQ1EsR0FEUixFQUVFQyxNQUZGLENBRVNuQixXQUFXLENBQUNpQyx1QkFGckIsRUFHRUMsSUFIRixDQUdPLDhCQUhQLENBRkQ7QUFPQSxLQTVIa0I7O0FBOEhuQjtBQUNEO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0NDLElBQUFBLGdDQUFnQyxFQUFFLFVBQVNDLFVBQVQsRUFBMEI7QUFDM0QsYUFBT0EsVUFBVSxJQUFJQSxVQUFVLENBQUNDLEtBQXpCLDhCQUFxREQsVUFBVSxDQUFDQyxLQUFoRSxVQUE0RUMsU0FBbkY7QUFDQSxLQXhJa0I7QUEwSW5CTCxJQUFBQSx1QkFBdUIsRUFBRSxVQUFTTSxTQUFULEVBQXlCO0FBQ2pELGFBQU9BLFNBQVMsS0FBSyxFQUFkLElBQW9CQSxTQUFTLEtBQUssNEJBQXpDO0FBQ0EsS0E1SWtCOztBQThJbkI7QUFDRDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFFQ0MsSUFBQUEsd0JBQXdCLEVBQUUsVUFBU0MsY0FBVCxFQUE4QjtBQUN2RCxVQUFNQyxhQUFhLEdBQUdELGNBQWMsQ0FBQ0UsV0FBckM7O0FBQ0FGLE1BQUFBLGNBQWMsQ0FBQ0UsV0FBZixHQUE2QixVQUFTbkMsS0FBVCxFQUFxQnFCLFFBQXJCLEVBQW9DZSxXQUFwQyxFQUFzRTtBQUFBLDBDQUFiQyxJQUFhO0FBQWJBLFVBQUFBLElBQWE7QUFBQTs7QUFDbEdoQixRQUFBQSxRQUFRLEdBQUdhLGFBQWEsQ0FBQ0ksS0FBZCxDQUFvQixJQUFwQixHQUEyQnRDLEtBQTNCLEVBQWtDcUIsUUFBbEMsRUFBNENlLFdBQTVDLFNBQTREQyxJQUE1RCxFQUFYO0FBQ0EsWUFBTUUsaUJBQWlCLEdBQUdsQixRQUFRLENBQUNtQixlQUFuQzs7QUFFQW5CLFFBQUFBLFFBQVEsQ0FBQ21CLGVBQVQsR0FBMkIsWUFBNEI7QUFBQSw2Q0FBaEJDLE9BQWdCO0FBQWhCQSxZQUFBQSxPQUFnQjtBQUFBOztBQUN0RCxjQUFNQyxhQUFhLEdBQUdILGlCQUFpQixDQUFDRCxLQUFsQixPQUFBQyxpQkFBaUIsR0FBTyxJQUFQLFNBQWdCRSxPQUFoQixFQUF2Qzs7QUFDQSxjQUFJQyxhQUFhLElBQUksQ0FBQ0EsYUFBYSxDQUFDQyxXQUFwQyxFQUFpRDtBQUNoREQsWUFBQUEsYUFBYSxDQUFDQyxXQUFkLEdBQTRCLFVBQVNDLFlBQVQsRUFBNEJDLEtBQTVCLEVBQXdDO0FBQ25FLGtCQUFJLEtBQUtqRCxTQUFMLE9BQXFCa0MsU0FBekIsRUFBb0M7QUFDbkM7QUFDQSxxQkFBS1YsUUFBTCxHQUFnQnVCLFdBQWhCLENBQTRCLEtBQUtyQixPQUFMLEVBQTVCLEVBQTRDLEVBQTVDO0FBQ0E7O0FBQ0QsbUJBQUtGLFFBQUwsR0FBZ0J1QixXQUFoQixDQUE0QkMsWUFBNUIsRUFBMENDLEtBQTFDLEVBQWlELElBQWpEO0FBQ0EsYUFORDtBQU9BOztBQUNELGlCQUFPSCxhQUFQO0FBQ0EsU0FaRDs7QUFhQSxlQUFPckIsUUFBUDtBQUNBLE9BbEJEO0FBbUJBLEtBM0trQjs7QUE2S25CO0FBQ0Q7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNDeUIsSUFBQUEsd0JBQXdCLEVBQUUsVUFBU3BELFVBQVQsRUFBMEI7QUFDbkQsVUFBSSxDQUFDQSxVQUFMLEVBQWlCO0FBQ2hCLGVBQU9vQyxTQUFQO0FBQ0E7O0FBQ0QsVUFBTWlCLGdCQUFnQixHQUFHckQsVUFBVSxDQUFDRSxTQUFYLENBQXFCLDZDQUFyQixDQUF6QixDQUptRCxDQUtuRDs7QUFDQSxhQUFPbUQsZ0JBQWdCLEdBQUdBLGdCQUFnQixDQUFDQyxPQUFqQixDQUF5QixTQUF6QixNQUF3QyxDQUFDLENBQTVDLEdBQWdELElBQXZFO0FBQ0EsS0ExTGtCOztBQTRMbkI7QUFDRDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0NDLElBQUFBLHFCQUFxQixFQUFFLFVBQVM1QixRQUFULEVBQXdCO0FBQzlDLFVBQU02QixNQUFNLEdBQUc3QixRQUFRLENBQUNELFFBQVQsRUFBZjtBQUFBLFVBQ0MxQixVQUFVLEdBQUd3RCxNQUFNLENBQUNDLFlBQVAsRUFEZDtBQUFBLFVBRUNuRCxLQUFLLEdBQUdxQixRQUFRLENBQUNDLE9BQVQsRUFGVDtBQUdBLGFBQU81QixVQUFVLElBQUlNLEtBQWQsSUFBdUJOLFVBQVUsQ0FBQ2UsV0FBWCxDQUF1QlQsS0FBdkIsQ0FBOUI7QUFDQSxLQXZNa0I7O0FBeU1uQjtBQUNEO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNDb0QsSUFBQUEsaUNBQWlDLEVBQUUsVUFBU0MsS0FBVCxFQUFxQkMsWUFBckIsRUFBd0M7QUFDMUUsVUFBTTVELFVBQVUsR0FBRzJELEtBQUssQ0FBQ2pDLFFBQU4sR0FBaUIrQixZQUFqQixFQUFuQjtBQUNBLFVBQUlJLFNBQUo7O0FBRUEsVUFBSSxPQUFPRCxZQUFQLEtBQXdCLFFBQTVCLEVBQXNDO0FBQ3JDLFlBQUlBLFlBQVksQ0FBQ0UsVUFBYixDQUF3QixHQUF4QixDQUFKLEVBQWtDO0FBQ2pDO0FBQ0FELFVBQUFBLFNBQVMsR0FBRzdELFVBQVUsQ0FBQ2UsV0FBWCxDQUF1QjZDLFlBQXZCLENBQVo7QUFDQSxTQUhELE1BR087QUFDTjtBQUNBLGNBQU1HLGVBQWUsR0FBR0osS0FBSyxDQUFDSyxpQkFBTixFQUF4QjtBQUNBLGNBQU1DLGdCQUFnQixHQUFHRixlQUFlLENBQUNuQyxPQUFoQixFQUF6QjtBQUNBaUMsVUFBQUEsU0FBUyxHQUFHN0QsVUFBVSxDQUFDZSxXQUFYLFdBQTBCa0QsZ0JBQTFCLGNBQThDTCxZQUE5QyxFQUFaO0FBQ0E7QUFDRCxPQVZELE1BVU87QUFDTjtBQUNBLFlBQU1NLFFBQVEsR0FBR04sWUFBakI7QUFDQSxZQUFNTyxZQUFZLEdBQUdELFFBQVEsQ0FBQ0UsY0FBVCxFQUFyQjs7QUFDQSxZQUFJRixRQUFRLEtBQUtDLFlBQWpCLEVBQStCO0FBQzlCO0FBQ0FOLFVBQUFBLFNBQVMsR0FBRzdELFVBQVUsQ0FBQ2UsV0FBWCxDQUF1Qm1ELFFBQVEsQ0FBQ3RDLE9BQVQsRUFBdkIsQ0FBWjtBQUNBLFNBSEQsTUFHTztBQUNOO0FBQ0EsY0FBTXlDLGdCQUFnQixHQUFHRixZQUFZLENBQUN2QyxPQUFiLEVBQXpCO0FBQ0EsY0FBTTBDLGFBQWEsR0FBR0osUUFBUSxDQUFDdEMsT0FBVCxFQUF0QjtBQUNBaUMsVUFBQUEsU0FBUyxHQUFHN0QsVUFBVSxDQUFDZSxXQUFYLFdBQTBCc0QsZ0JBQTFCLGNBQThDQyxhQUE5QyxFQUFaO0FBQ0E7QUFDRDs7QUFDRCxhQUFPVCxTQUFQO0FBQ0E7QUE3T2tCLEdBQXBCO1NBb1BlL0QsVyIsInNvdXJjZVJvb3QiOiIuIiwic291cmNlc0NvbnRlbnQiOlsiLyogVGhpcyBjbGFzcyBjb250YWlucyBoZWxwZXJzIHRvIGJlIHVzZWQgYXQgcnVudGltZSB0byByZXRyaWV2ZSBmdXJ0aGVyIGluZm9ybWF0aW9uIG9uIHRoZSBtb2RlbCAqL1xuaW1wb3J0IENvbnRleHQgZnJvbSBcInNhcC91aS9tb2RlbC9vZGF0YS92NC9Db250ZXh0XCI7XG5pbXBvcnQgQmFzZUNvbnRleHQgZnJvbSBcInNhcC91aS9tb2RlbC9Db250ZXh0XCI7XG5pbXBvcnQgT0RhdGFNZXRhTW9kZWwgZnJvbSBcInNhcC91aS9tb2RlbC9vZGF0YS92NC9PRGF0YU1ldGFNb2RlbFwiO1xuXG5jb25zdCBNb2RlbEhlbHBlciA9IHtcblx0LyoqXG5cdCAqIE1ldGhvZCB0byBkZXRlcm1pbmUgaWYgdGhlIHByb2dyYW1taW5nIG1vZGVsIGlzIHN0aWNreS5cblx0ICpcblx0ICogQGZ1bmN0aW9uXG5cdCAqIEBuYW1lIGlzU3RpY2t5U2Vzc2lvblN1cHBvcnRlZFxuXHQgKiBAcGFyYW0ge3NhcC51aS5tb2RlbC5vZGF0YS52NC5PRGF0YU1ldGFNb2RlbH0gb01ldGFNb2RlbCBPRGF0YU1vZGVsTWV0YU1vZGVsIHRvIGNoZWNrIGZvciBzdGlja3kgZW5hYmxlZCBlbnRpdHlcblx0ICogQHJldHVybnMge2Jvb2xlYW59IFJldHVybnMgdHJ1ZSBpZiBzdGlja3ksIGVsc2UgZmFsc2Vcblx0ICovXG5cdGlzU3RpY2t5U2Vzc2lvblN1cHBvcnRlZDogZnVuY3Rpb24ob01ldGFNb2RlbDogT0RhdGFNZXRhTW9kZWwpIHtcblx0XHRjb25zdCBvRW50aXR5Q29udGFpbmVyID0gb01ldGFNb2RlbC5nZXRPYmplY3QoXCIvXCIpO1xuXHRcdGZvciAoY29uc3Qgc0VudGl0eVNldCBpbiBvRW50aXR5Q29udGFpbmVyKSB7XG5cdFx0XHRpZiAoXG5cdFx0XHRcdG9FbnRpdHlDb250YWluZXJbc0VudGl0eVNldF0uJGtpbmQgPT09IFwiRW50aXR5U2V0XCIgJiZcblx0XHRcdFx0b01ldGFNb2RlbC5nZXRPYmplY3QoYC8ke3NFbnRpdHlTZXR9QGNvbS5zYXAudm9jYWJ1bGFyaWVzLlNlc3Npb24udjEuU3RpY2t5U2Vzc2lvblN1cHBvcnRlZGApXG5cdFx0XHQpIHtcblx0XHRcdFx0cmV0dXJuIHRydWU7XG5cdFx0XHR9XG5cdFx0fVxuXHRcdHJldHVybiBmYWxzZTtcblx0fSxcblxuXHQvKipcblx0ICogTWV0aG9kIHRvIGRldGVybWluZSBpZiB0aGUgcHJvZ3JhbW1pbmcgbW9kZWwgaXMgZHJhZnQuXG5cdCAqXG5cdCAqIEBmdW5jdGlvblxuXHQgKiBAbmFtZSBpc0RyYWZ0U3VwcG9ydGVkXG5cdCAqIEBwYXJhbSB7c2FwLnVpLm1vZGVsLm9kYXRhLnY0Lk1ldGFNb2RlbH0gb01ldGFNb2RlbCBPRGF0YU1vZGVsTWV0YU1vZGVsIG9mIHRoZSBjb250ZXh0IGZvciB3aGljaCBkcmFmdCBzdXBwb3J0IHNoYWxsIGJlIGNoZWNrZWRcblx0ICogQHBhcmFtIHtzdHJpbmd9IHNQYXRoIFBhdGggZm9yIHdoaWNoIGRyYWZ0IHN1cHBvcnQgc2hhbGwgYmUgY2hlY2tlZFxuXHQgKiBAcmV0dXJucyB7Ym9vbGVhbn0gUmV0dXJucyB0cnVlIGlmIGRyYWZ0LCBlbHNlIGZhbHNlXG5cdCAqL1xuXHRpc0RyYWZ0U3VwcG9ydGVkOiBmdW5jdGlvbihvTWV0YU1vZGVsOiBhbnksIHNQYXRoOiBzdHJpbmcpIHtcblx0XHRjb25zdCBvTWV0YUNvbnRleHQgPSBvTWV0YU1vZGVsLmdldE1ldGFDb250ZXh0KHNQYXRoKTtcblx0XHRsZXQgc1RhcmdldEVudGl0eVNldCA9IHRoaXMuZ2V0VGFyZ2V0RW50aXR5U2V0KG9NZXRhQ29udGV4dCksXG5cdFx0XHRvUGFyZW50RW50aXR5U2V0Q29udGV4dCxcblx0XHRcdGFQYXJ0cztcblxuXHRcdGlmIChvTWV0YUNvbnRleHQuZ2V0UHJvcGVydHkgJiYgb01ldGFDb250ZXh0LmdldFByb3BlcnR5KCkgJiYgb01ldGFDb250ZXh0LmdldFByb3BlcnR5KCkuJENvbnRhaW5zVGFyZ2V0ID09PSB0cnVlKSB7XG5cdFx0XHRhUGFydHMgPSBvTWV0YU1vZGVsXG5cdFx0XHRcdC5nZXRNZXRhUGF0aChzUGF0aClcblx0XHRcdFx0LnNwbGl0KFwiL1wiKVxuXHRcdFx0XHQuZmlsdGVyKEJvb2xlYW4pO1xuXHRcdFx0aWYgKGFQYXJ0cy5sZW5ndGgpIHtcblx0XHRcdFx0Zm9yIChsZXQgaSA9IGFQYXJ0cy5sZW5ndGggLSAxOyBpID49IDA7IGktLSkge1xuXHRcdFx0XHRcdG9QYXJlbnRFbnRpdHlTZXRDb250ZXh0ID0gb01ldGFNb2RlbC5nZXRNZXRhQ29udGV4dChvTWV0YU1vZGVsLmdldE1ldGFQYXRoKFwiL1wiICsgYVBhcnRzW2ldKSk7XG5cdFx0XHRcdFx0aWYgKG9QYXJlbnRFbnRpdHlTZXRDb250ZXh0LmdldE9iamVjdChcIiRraW5kXCIpID09PSBcIkVudGl0eVNldFwiKSB7XG5cdFx0XHRcdFx0XHRzVGFyZ2V0RW50aXR5U2V0ID0gdGhpcy5nZXRUYXJnZXRFbnRpdHlTZXQob1BhcmVudEVudGl0eVNldENvbnRleHQpO1xuXHRcdFx0XHRcdFx0YnJlYWs7XG5cdFx0XHRcdFx0fVxuXHRcdFx0XHR9XG5cdFx0XHR9XG5cdFx0fSBlbHNlIHtcblx0XHRcdHNUYXJnZXRFbnRpdHlTZXQgPSB0aGlzLmdldFRhcmdldEVudGl0eVNldChvTWV0YUNvbnRleHQpO1xuXHRcdH1cblx0XHRjb25zdCBvRW50aXR5Q29udGV4dCA9IG9NZXRhTW9kZWwuZ2V0TWV0YUNvbnRleHQoc1RhcmdldEVudGl0eVNldCk7XG5cdFx0aWYgKFxuXHRcdFx0b0VudGl0eUNvbnRleHQuZ2V0T2JqZWN0KFwiQGNvbS5zYXAudm9jYWJ1bGFyaWVzLkNvbW1vbi52MS5EcmFmdFJvb3RcIikgfHxcblx0XHRcdG9FbnRpdHlDb250ZXh0LmdldE9iamVjdChcIkBjb20uc2FwLnZvY2FidWxhcmllcy5Db21tb24udjEuRHJhZnROb2RlXCIpXG5cdFx0KSB7XG5cdFx0XHRyZXR1cm4gdHJ1ZTtcblx0XHR9XG5cdFx0cmV0dXJuIGZhbHNlO1xuXHR9LFxuXG5cdC8qKlxuXHQgKiBNZXRob2QgdG8gZGV0ZXJtaW5lIGlmIHRoZSBzZXJ2aWNlLCBzdXBwb3J0cyBjb2xsYWJvcmF0aW9uIGRyYWZ0LlxuXHQgKlxuXHQgKiBAZnVuY3Rpb25cblx0ICogQG5hbWUgaXNDb2xsYWJvcmF0aW9uRHJhZnRTdXBwb3J0ZWRcblx0ICogQHBhcmFtIHtvYmplY3R9IG1ldGFPYmplY3QgTWV0YU9iamVjdCB0byBiZSB1c2VkIGZvciBkZXRlcm1pbmF0aW9uXG5cdCAqIEBwYXJhbSB7b2JqZWN0fSB0ZW1wbGF0ZUludGVyZmFjZSBBUEkgcHJvdmlkZWQgYnkgVUk1IHRlbXBsYXRpbmcgaWYgdXNlZFxuXHQgKiBAcmV0dXJucyB7Ym9vbGVhbn0gUmV0dXJucyB0cnVlIGlmIHRoZSBzZXJ2aWNlIHN1cHBvcnRzIGNvbGxhYm9yYXRpb24gZHJhZnQsIGVsc2UgZmFsc2Vcblx0ICovXG5cdGlzQ29sbGFib3JhdGlvbkRyYWZ0U3VwcG9ydGVkOiBmdW5jdGlvbihtZXRhT2JqZWN0OiBhbnksIHRlbXBsYXRlSW50ZXJmYWNlPzogYW55KSB7XG5cdFx0Y29uc3Qgb01ldGFNb2RlbCA9ICh0ZW1wbGF0ZUludGVyZmFjZT8uY29udGV4dD8uZ2V0TW9kZWwoKSB8fCBtZXRhT2JqZWN0KSBhcyBPRGF0YU1ldGFNb2RlbDtcblx0XHRjb25zdCBvRW50aXR5Q29udGFpbmVyID0gb01ldGFNb2RlbC5nZXRPYmplY3QoXCIvXCIpO1xuXHRcdGZvciAoY29uc3Qgc0VudGl0eVNldCBpbiBvRW50aXR5Q29udGFpbmVyKSB7XG5cdFx0XHRpZiAoXG5cdFx0XHRcdG9FbnRpdHlDb250YWluZXJbc0VudGl0eVNldF0uJGtpbmQgPT09IFwiRW50aXR5U2V0XCIgJiZcblx0XHRcdFx0b01ldGFNb2RlbC5nZXRPYmplY3QoXCIvXCIgKyBzRW50aXR5U2V0ICsgXCJAY29tLnNhcC52b2NhYnVsYXJpZXMuQ29tbW9uLnYxLkRyYWZ0Um9vdC9TaGFyZUFjdGlvblwiKVxuXHRcdFx0KSB7XG5cdFx0XHRcdHJldHVybiB0cnVlO1xuXHRcdFx0fVxuXHRcdH1cblx0XHRyZXR1cm4gZmFsc2U7XG5cdH0sXG5cblx0LyoqXG5cdCAqIFJldHVybnMgcGF0aCB0byB0aGUgdGFyZ2V0IGVudGl0eSBzZXQgdmlhIHVzaW5nIG5hdmlnYXRpb24gcHJvcGVydHkgYmluZGluZy5cblx0ICpcblx0ICogQGZ1bmN0aW9uXG5cdCAqIEBuYW1lIGdldFRhcmdldEVudGl0eVNldFxuXHQgKiBAcGFyYW0ge3NhcC51aS5tb2RlbC5vZGF0YS52NC5Db250ZXh0fSBvQ29udGV4dCBDb250ZXh0IGZvciB3aGljaCB0aGUgdGFyZ2V0IGVudGl0eSBzZXQgc2hhbGwgYmUgZGV0ZXJtaW5lZFxuXHQgKiBAcmV0dXJucyB7c3RyaW5nfSBSZXR1cm5zIHBhdGggdG8gdGhlIHRhcmdldCBlbnRpdHkgc2V0XG5cdCAqL1xuXHRnZXRUYXJnZXRFbnRpdHlTZXQ6IGZ1bmN0aW9uKG9Db250ZXh0OiBDb250ZXh0KSB7XG5cdFx0Y29uc3Qgc1BhdGggPSBvQ29udGV4dC5nZXRQYXRoKCk7XG5cdFx0aWYgKFxuXHRcdFx0b0NvbnRleHQuZ2V0T2JqZWN0KFwiJGtpbmRcIikgPT09IFwiRW50aXR5U2V0XCIgfHxcblx0XHRcdG9Db250ZXh0LmdldE9iamVjdChcIiRraW5kXCIpID09PSBcIkFjdGlvblwiIHx8XG5cdFx0XHRvQ29udGV4dC5nZXRPYmplY3QoXCIwLyRraW5kXCIpID09PSBcIkFjdGlvblwiXG5cdFx0KSB7XG5cdFx0XHRyZXR1cm4gc1BhdGg7XG5cdFx0fVxuXHRcdGNvbnN0IHNFbnRpdHlTZXRQYXRoID0gTW9kZWxIZWxwZXIuZ2V0RW50aXR5U2V0UGF0aChzUGF0aCk7XG5cdFx0cmV0dXJuIFwiL1wiICsgb0NvbnRleHQuZ2V0T2JqZWN0KHNFbnRpdHlTZXRQYXRoKTtcblx0fSxcblxuXHQvKipcblx0ICogUmV0dXJucyBjb21wbGV0ZSBwYXRoIHRvIHRoZSBlbnRpdHkgc2V0IHZpYSB1c2luZyBuYXZpZ2F0aW9uIHByb3BlcnR5IGJpbmRpbmcuXG5cdCAqXG5cdCAqIEBmdW5jdGlvblxuXHQgKiBAbmFtZSBnZXRFbnRpdHlTZXRQYXRoXG5cdCAqIEBwYXJhbSB7c3RyaW5nfSBzUGF0aCBQYXRoIGZvciB3aGljaCBjb21wbGV0ZSBlbnRpdHlTZXQgcGF0aCBuZWVkcyB0byBiZSBkZXRlcm1pbmVkXG5cdCAqIEByZXR1cm5zIHtzdHJpbmd9IFJldHVybnMgY29tcGxldGUgcGF0aCB0byB0aGUgZW50aXR5IHNldFxuXHQgKi9cblx0Z2V0RW50aXR5U2V0UGF0aDogZnVuY3Rpb24oc1BhdGg6IHN0cmluZykge1xuXHRcdHJldHVybiAoXG5cdFx0XHRcIi9cIiArXG5cdFx0XHRzUGF0aFxuXHRcdFx0XHQuc3BsaXQoXCIvXCIpXG5cdFx0XHRcdC5maWx0ZXIoTW9kZWxIZWxwZXIuZmlsdGVyT3V0TmF2UHJvcEJpbmRpbmcpXG5cdFx0XHRcdC5qb2luKFwiLyROYXZpZ2F0aW9uUHJvcGVydHlCaW5kaW5nL1wiKVxuXHRcdCk7XG5cdH0sXG5cblx0LyoqXG5cdCAqIEdldHMgdGhlIHBhdGggZm9yIHRoZSBpdGVtcyBwcm9wZXJ0eSBvZiBNdWx0aVZhbHVlRmllbGQgcGFyYW1ldGVycy5cblx0ICpcblx0ICogQGZ1bmN0aW9uXG5cdCAqIEBuYW1lIGdldEFjdGlvblBhcmFtZXRlckl0ZW1zTW9kZWxQYXRoXG5cdCAqIEBwYXJhbSB7b2JqZWN0fSBvUGFyYW1ldGVyIEFjdGlvbiBQYXJhbWV0ZXJcblx0ICogQHJldHVybnMge3N0cmluZ30gUmV0dXJucyB0aGUgY29tcGxldGUgbW9kZWwgcGF0aCBmb3IgdGhlIGl0ZW1zIHByb3BlcnR5IG9mIE11bHRpVmFsdWVGaWVsZCBwYXJhbWV0ZXJzXG5cdCAqL1xuXHRnZXRBY3Rpb25QYXJhbWV0ZXJJdGVtc01vZGVsUGF0aDogZnVuY3Rpb24ob1BhcmFtZXRlcjogYW55KSB7XG5cdFx0cmV0dXJuIG9QYXJhbWV0ZXIgJiYgb1BhcmFtZXRlci4kTmFtZSA/IGB7cGF0aDogJ212ZnZpZXc+LyR7b1BhcmFtZXRlci4kTmFtZX0nfWAgOiB1bmRlZmluZWQ7XG5cdH0sXG5cblx0ZmlsdGVyT3V0TmF2UHJvcEJpbmRpbmc6IGZ1bmN0aW9uKHNQYXRoUGFydDogYW55KSB7XG5cdFx0cmV0dXJuIHNQYXRoUGFydCAhPT0gXCJcIiAmJiBzUGF0aFBhcnQgIT09IFwiJE5hdmlnYXRpb25Qcm9wZXJ0eUJpbmRpbmdcIjtcblx0fSxcblxuXHQvKipcblx0ICogQWRkcyBhIHNldFByb3BlcnR5IHRvIHRoZSBjcmVhdGVkIGJpbmRpbmcgY29udGV4dHMgb2YgdGhlIGludGVybmFsIEpTT04gbW9kZWwuXG5cdCAqXG5cdCAqIEBmdW5jdGlvblxuXHQgKiBAbmFtZSBlbmhhbmNlSW50ZXJuYWxKU09OTW9kZWxcblx0ICogQHBhcmFtIHtzYXAudWkubW9kZWwuanNvbi5KU09OTW9kZWx9IEludGVybmFsIEpTT04gTW9kZWwgd2hpY2ggaXMgZW5oYW5jZWRcblx0ICovXG5cblx0ZW5oYW5jZUludGVybmFsSlNPTk1vZGVsOiBmdW5jdGlvbihvSW50ZXJuYWxNb2RlbDogYW55KSB7XG5cdFx0Y29uc3QgZm5CaW5kQ29udGV4dCA9IG9JbnRlcm5hbE1vZGVsLmJpbmRDb250ZXh0O1xuXHRcdG9JbnRlcm5hbE1vZGVsLmJpbmRDb250ZXh0ID0gZnVuY3Rpb24oc1BhdGg6IGFueSwgb0NvbnRleHQ6IGFueSwgbVBhcmFtZXRlcnM6IGFueSwgLi4uYXJnczogYW55W10pIHtcblx0XHRcdG9Db250ZXh0ID0gZm5CaW5kQ29udGV4dC5hcHBseSh0aGlzLCBbc1BhdGgsIG9Db250ZXh0LCBtUGFyYW1ldGVycywgLi4uYXJnc10pO1xuXHRcdFx0Y29uc3QgZm5HZXRCb3VuZENvbnRleHQgPSBvQ29udGV4dC5nZXRCb3VuZENvbnRleHQ7XG5cblx0XHRcdG9Db250ZXh0LmdldEJvdW5kQ29udGV4dCA9IGZ1bmN0aW9uKC4uLnN1YkFyZ3M6IGFueVtdKSB7XG5cdFx0XHRcdGNvbnN0IG9Cb3VuZENvbnRleHQgPSBmbkdldEJvdW5kQ29udGV4dC5hcHBseSh0aGlzLCAuLi5zdWJBcmdzKTtcblx0XHRcdFx0aWYgKG9Cb3VuZENvbnRleHQgJiYgIW9Cb3VuZENvbnRleHQuc2V0UHJvcGVydHkpIHtcblx0XHRcdFx0XHRvQm91bmRDb250ZXh0LnNldFByb3BlcnR5ID0gZnVuY3Rpb24oc1NldFByb3BQYXRoOiBhbnksIHZhbHVlOiBhbnkpIHtcblx0XHRcdFx0XHRcdGlmICh0aGlzLmdldE9iamVjdCgpID09PSB1bmRlZmluZWQpIHtcblx0XHRcdFx0XHRcdFx0Ly8gaW5pdGlhbGl6ZVxuXHRcdFx0XHRcdFx0XHR0aGlzLmdldE1vZGVsKCkuc2V0UHJvcGVydHkodGhpcy5nZXRQYXRoKCksIHt9KTtcblx0XHRcdFx0XHRcdH1cblx0XHRcdFx0XHRcdHRoaXMuZ2V0TW9kZWwoKS5zZXRQcm9wZXJ0eShzU2V0UHJvcFBhdGgsIHZhbHVlLCB0aGlzKTtcblx0XHRcdFx0XHR9O1xuXHRcdFx0XHR9XG5cdFx0XHRcdHJldHVybiBvQm91bmRDb250ZXh0O1xuXHRcdFx0fTtcblx0XHRcdHJldHVybiBvQ29udGV4dDtcblx0XHR9O1xuXHR9LFxuXG5cdC8qKlxuXHQgKiBSZXR1cm5zIHdoZXRoZXIgZmlsdGVyaW5nIG9uIHRoZSB0YWJsZSBpcyBjYXNlIHNlbnNpdGl2ZS5cblx0ICpcblx0ICogQHBhcmFtIG9NZXRhTW9kZWwgVGhlIGluc3RhbmNlIG9mIHRoZSBtZXRhIG1vZGVsXG5cdCAqIEByZXR1cm5zIHtib29sZWFufHVuZGVmaW5lZH0gUmV0dXJucyAnZmFsc2UnIGlmIEZpbHRlckZ1bmN0aW9ucyBhbm5vdGF0aW9uIHN1cHBvcnRzICd0b2xvd2VyJywgZWxzZSAndHJ1ZSdcblx0ICovXG5cdGlzRmlsdGVyaW5nQ2FzZVNlbnNpdGl2ZTogZnVuY3Rpb24ob01ldGFNb2RlbDogYW55KSB7XG5cdFx0aWYgKCFvTWV0YU1vZGVsKSB7XG5cdFx0XHRyZXR1cm4gdW5kZWZpbmVkO1xuXHRcdH1cblx0XHRjb25zdCBhRmlsdGVyRnVuY3Rpb25zID0gb01ldGFNb2RlbC5nZXRPYmplY3QoXCIvQE9yZy5PRGF0YS5DYXBhYmlsaXRpZXMuVjEuRmlsdGVyRnVuY3Rpb25zXCIpO1xuXHRcdC8vIEdldCBmaWx0ZXIgZnVuY3Rpb25zIGRlZmluZWQgYXQgRW50aXR5Q29udGFpbmVyIGFuZCBjaGVjayBmb3IgZXhpc3RlbmNlIG9mICd0b2xvd2VyJ1xuXHRcdHJldHVybiBhRmlsdGVyRnVuY3Rpb25zID8gYUZpbHRlckZ1bmN0aW9ucy5pbmRleE9mKFwidG9sb3dlclwiKSA9PT0gLTEgOiB0cnVlO1xuXHR9LFxuXG5cdC8qKlxuXHQgKiBHZXQgTWV0YVBhdGggZm9yIHRoZSBjb250ZXh0LlxuXHQgKlxuXHQgKiBAcGFyYW0ge0NvbnRleHR9IG9Db250ZXh0IENvbnRleHQgdG8gYmUgdXNlZFxuXHQgKiBAcmV0dXJucyB7c3RyaW5nIHwgdW5kZWZpbmVkfSBSZXR1cm5zIG1ldGEgcGF0aCBmb3IgdGhlIGNvbnRleHQuXG5cdCAqL1xuXHRnZXRNZXRhUGF0aEZvckNvbnRleHQ6IGZ1bmN0aW9uKG9Db250ZXh0OiBhbnkpIHtcblx0XHRjb25zdCBvTW9kZWwgPSBvQ29udGV4dC5nZXRNb2RlbCgpLFxuXHRcdFx0b01ldGFNb2RlbCA9IG9Nb2RlbC5nZXRNZXRhTW9kZWwoKSxcblx0XHRcdHNQYXRoID0gb0NvbnRleHQuZ2V0UGF0aCgpO1xuXHRcdHJldHVybiBvTWV0YU1vZGVsICYmIHNQYXRoICYmIG9NZXRhTW9kZWwuZ2V0TWV0YVBhdGgoc1BhdGgpO1xuXHR9LFxuXG5cdC8qKlxuXHQgKiBHZXQgTWV0YVBhdGggZm9yIHRoZSBsaXN0YmluZGluZy5cblx0ICpcblx0ICogQHBhcmFtIHtWaWV3fSBvVmlldyBWaWV3IG9mIHRoZSBjb250cm9sIHVzaW5nIGxpc3RCaW5kaW5nXG5cdCAqIEBwYXJhbSB7T0RhdGFMaXN0QmluZGluZyB8IHN0cmluZ30gdkxpc3RCaW5kaW5nIE9EYXRhTGlzdEJpbmRpbmcgb2JqZWN0IG9yIHRoZSBiaW5kaW5nIHBhdGggZm9yIGEgdGVtcG9yYXJ5IGxpc3QgYmluZGluZ1xuXHQgKiBAcmV0dXJucyB7c3RyaW5nIHwgdW5kZWZpbmVkfSBSZXR1cm5zIG1ldGEgcGF0aCBmb3IgdGhlIGxpc3RiaW5kaW5nLlxuXHQgKi9cblx0Z2V0QWJzb2x1dGVNZXRhUGF0aEZvckxpc3RCaW5kaW5nOiBmdW5jdGlvbihvVmlldzogYW55LCB2TGlzdEJpbmRpbmc6IGFueSkge1xuXHRcdGNvbnN0IG9NZXRhTW9kZWwgPSBvVmlldy5nZXRNb2RlbCgpLmdldE1ldGFNb2RlbCgpO1xuXHRcdGxldCBzTWV0YVBhdGg7XG5cblx0XHRpZiAodHlwZW9mIHZMaXN0QmluZGluZyA9PT0gXCJzdHJpbmdcIikge1xuXHRcdFx0aWYgKHZMaXN0QmluZGluZy5zdGFydHNXaXRoKFwiL1wiKSkge1xuXHRcdFx0XHQvLyBhYnNvbHV0ZSBwYXRoXG5cdFx0XHRcdHNNZXRhUGF0aCA9IG9NZXRhTW9kZWwuZ2V0TWV0YVBhdGgodkxpc3RCaW5kaW5nKTtcblx0XHRcdH0gZWxzZSB7XG5cdFx0XHRcdC8vIHJlbGF0aXZlIHBhdGhcblx0XHRcdFx0Y29uc3Qgb0JpbmRpbmdDb250ZXh0ID0gb1ZpZXcuZ2V0QmluZGluZ0NvbnRleHQoKTtcblx0XHRcdFx0Y29uc3Qgc1Jvb3RDb250ZXh0UGF0aCA9IG9CaW5kaW5nQ29udGV4dC5nZXRQYXRoKCk7XG5cdFx0XHRcdHNNZXRhUGF0aCA9IG9NZXRhTW9kZWwuZ2V0TWV0YVBhdGgoYCR7c1Jvb3RDb250ZXh0UGF0aH0vJHt2TGlzdEJpbmRpbmd9YCk7XG5cdFx0XHR9XG5cdFx0fSBlbHNlIHtcblx0XHRcdC8vIHdlIGFscmVhZHkgZ2V0IGEgbGlzdCBiaW5kaW5nIHVzZSB0aGlzIG9uZVxuXHRcdFx0Y29uc3Qgb0JpbmRpbmcgPSB2TGlzdEJpbmRpbmc7XG5cdFx0XHRjb25zdCBvUm9vdEJpbmRpbmcgPSBvQmluZGluZy5nZXRSb290QmluZGluZygpO1xuXHRcdFx0aWYgKG9CaW5kaW5nID09PSBvUm9vdEJpbmRpbmcpIHtcblx0XHRcdFx0Ly8gYWJzb2x1dGUgcGF0aFxuXHRcdFx0XHRzTWV0YVBhdGggPSBvTWV0YU1vZGVsLmdldE1ldGFQYXRoKG9CaW5kaW5nLmdldFBhdGgoKSk7XG5cdFx0XHR9IGVsc2Uge1xuXHRcdFx0XHQvLyByZWxhdGl2ZSBwYXRoXG5cdFx0XHRcdGNvbnN0IHNSb290QmluZGluZ1BhdGggPSBvUm9vdEJpbmRpbmcuZ2V0UGF0aCgpO1xuXHRcdFx0XHRjb25zdCBzUmVsYXRpdmVQYXRoID0gb0JpbmRpbmcuZ2V0UGF0aCgpO1xuXHRcdFx0XHRzTWV0YVBhdGggPSBvTWV0YU1vZGVsLmdldE1ldGFQYXRoKGAke3NSb290QmluZGluZ1BhdGh9LyR7c1JlbGF0aXZlUGF0aH1gKTtcblx0XHRcdH1cblx0XHR9XG5cdFx0cmV0dXJuIHNNZXRhUGF0aDtcblx0fVxufTtcblxuZXhwb3J0IHR5cGUgSW50ZXJuYWxNb2RlbENvbnRleHQgPSBCYXNlQ29udGV4dCAmIHtcblx0c2V0UHJvcGVydHkoc1BhdGg6IHN0cmluZywgdlZhbHVlOiBhbnkpOiB2b2lkO1xufTtcblxuZXhwb3J0IGRlZmF1bHQgTW9kZWxIZWxwZXI7XG4iXX0=