@sapui5/sap.fe.core 1.101.0 → 1.103.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (339) hide show
  1. package/package.json +5 -5
  2. package/src/sap/fe/core/.library +1 -1
  3. package/src/sap/fe/core/AppComponent.js +66 -30
  4. package/src/sap/fe/core/AppComponent.ts +68 -51
  5. package/src/sap/fe/core/AppStateHandler.js +13 -13
  6. package/src/sap/fe/core/AppStateHandler.ts +18 -18
  7. package/src/sap/fe/core/BaseController.js +11 -9
  8. package/src/sap/fe/core/BaseController.ts +15 -13
  9. package/src/sap/fe/core/CommonUtils.js +279 -188
  10. package/src/sap/fe/core/CommonUtils.ts +306 -215
  11. package/src/sap/fe/core/ExtensionAPI.js +25 -30
  12. package/src/sap/fe/core/ExtensionAPI.ts +37 -41
  13. package/src/sap/fe/core/PageController.js +12 -7
  14. package/src/sap/fe/core/PageController.ts +10 -5
  15. package/src/sap/fe/core/TemplateComponent.js +6 -6
  16. package/src/sap/fe/core/TemplateComponent.ts +11 -11
  17. package/src/sap/fe/core/TemplateModel.js +2 -2
  18. package/src/sap/fe/core/TemplateModel.ts +3 -3
  19. package/src/sap/fe/core/buildingBlocks/AttributeModel.js +1 -1
  20. package/src/sap/fe/core/buildingBlocks/AttributeModel.ts +1 -1
  21. package/src/sap/fe/core/buildingBlocks/BuildingBlockRuntime.js +306 -78
  22. package/src/sap/fe/core/buildingBlocks/BuildingBlockRuntime.ts +280 -70
  23. package/src/sap/fe/core/buildingBlocks/TraceInfo.js +27 -27
  24. package/src/sap/fe/core/buildingBlocks/TraceInfo.ts +28 -26
  25. package/src/sap/fe/core/{BusyLocker.js → controllerextensions/BusyLocker.js} +1 -1
  26. package/src/sap/fe/core/{BusyLocker.ts → controllerextensions/BusyLocker.ts} +7 -7
  27. package/src/sap/fe/core/controllerextensions/EditFlow.js +351 -229
  28. package/src/sap/fe/core/controllerextensions/EditFlow.ts +321 -246
  29. package/src/sap/fe/core/controllerextensions/IntentBasedNavigation.js +9 -9
  30. package/src/sap/fe/core/controllerextensions/IntentBasedNavigation.ts +10 -10
  31. package/src/sap/fe/core/controllerextensions/InternalEditFlow.js +59 -34
  32. package/src/sap/fe/core/controllerextensions/InternalEditFlow.ts +71 -45
  33. package/src/sap/fe/core/controllerextensions/InternalIntentBasedNavigation.js +72 -72
  34. package/src/sap/fe/core/controllerextensions/InternalIntentBasedNavigation.ts +82 -80
  35. package/src/sap/fe/core/controllerextensions/InternalRouting.js +152 -131
  36. package/src/sap/fe/core/controllerextensions/InternalRouting.ts +171 -152
  37. package/src/sap/fe/core/controllerextensions/KPIManagement.js +66 -68
  38. package/src/sap/fe/core/controllerextensions/KPIManagement.ts +106 -123
  39. package/src/sap/fe/core/controllerextensions/MassEdit.js +11 -10
  40. package/src/sap/fe/core/controllerextensions/MassEdit.ts +31 -37
  41. package/src/sap/fe/core/controllerextensions/MessageHandler.js +21 -13
  42. package/src/sap/fe/core/controllerextensions/MessageHandler.ts +30 -15
  43. package/src/sap/fe/core/controllerextensions/PageReady.js +97 -25
  44. package/src/sap/fe/core/controllerextensions/PageReady.ts +94 -34
  45. package/src/sap/fe/core/controllerextensions/Paginator.js +19 -11
  46. package/src/sap/fe/core/controllerextensions/Paginator.ts +22 -14
  47. package/src/sap/fe/core/controllerextensions/Placeholder.js +4 -6
  48. package/src/sap/fe/core/controllerextensions/Placeholder.ts +12 -14
  49. package/src/sap/fe/core/controllerextensions/Routing.js +10 -11
  50. package/src/sap/fe/core/controllerextensions/Routing.ts +12 -13
  51. package/src/sap/fe/core/controllerextensions/Share.js +39 -21
  52. package/src/sap/fe/core/controllerextensions/Share.ts +45 -26
  53. package/src/sap/fe/core/controllerextensions/SideEffects.js +47 -51
  54. package/src/sap/fe/core/controllerextensions/SideEffects.ts +58 -62
  55. package/src/sap/fe/core/controllerextensions/ViewState.js +75 -62
  56. package/src/sap/fe/core/controllerextensions/ViewState.ts +78 -63
  57. package/src/sap/fe/core/controllerextensions/collaboration/ActivityBase.js +105 -0
  58. package/src/sap/fe/core/controllerextensions/collaboration/ActivityBase.ts +99 -0
  59. package/src/sap/fe/core/controllerextensions/collaboration/ActivitySync.js +360 -0
  60. package/src/sap/fe/core/{actions → controllerextensions}/collaboration/ActivitySync.ts +58 -112
  61. package/src/sap/fe/core/{actions → controllerextensions}/collaboration/CollaborationCommon.js +2 -2
  62. package/src/sap/fe/core/{actions → controllerextensions}/collaboration/CollaborationCommon.ts +7 -7
  63. package/src/sap/fe/core/controllerextensions/collaboration/Manage.js +262 -0
  64. package/src/sap/fe/core/{actions → controllerextensions}/collaboration/Manage.ts +20 -21
  65. package/src/sap/fe/core/{actions → controllerextensions}/collaboration/ManageDialog.fragment.xml +0 -0
  66. package/src/sap/fe/core/{actions → controllerextensions}/collaboration/UserDetails.fragment.xml +5 -7
  67. package/src/sap/fe/core/controllerextensions/editFlow/TransactionHelper.js +1631 -0
  68. package/src/sap/fe/core/{TransactionHelper.ts → controllerextensions/editFlow/TransactionHelper.ts} +270 -211
  69. package/src/sap/fe/core/controllerextensions/editFlow/draft.js +772 -0
  70. package/src/sap/fe/core/{actions → controllerextensions/editFlow}/draft.ts +240 -100
  71. package/src/sap/fe/core/controllerextensions/editFlow/operations.js +1199 -0
  72. package/src/sap/fe/core/{actions → controllerextensions/editFlow}/operations.ts +364 -229
  73. package/src/sap/fe/core/controllerextensions/editFlow/sticky.js +188 -0
  74. package/src/sap/fe/core/controllerextensions/editFlow/sticky.ts +185 -0
  75. package/src/sap/fe/core/controllerextensions/messageHandler/messageHandling.js +626 -0
  76. package/src/sap/fe/core/{actions → controllerextensions/messageHandler}/messageHandling.ts +112 -69
  77. package/src/sap/fe/core/controllerextensions/routing/RouterProxy.js +937 -0
  78. package/src/sap/fe/core/{RouterProxy.ts → controllerextensions/routing/RouterProxy.ts} +72 -73
  79. package/src/sap/fe/core/controls/ActionParameterDialog.fragment.xml +21 -18
  80. package/src/sap/fe/core/controls/Any.js +9 -5
  81. package/src/sap/fe/core/controls/Any.ts +10 -4
  82. package/src/sap/fe/core/controls/CommandExecution.js +21 -24
  83. package/src/sap/fe/core/controls/CommandExecution.ts +19 -24
  84. package/src/sap/fe/core/controls/ConditionalWrapper.js +2 -2
  85. package/src/sap/fe/core/controls/ConditionalWrapper.ts +3 -3
  86. package/src/sap/fe/core/controls/CustomFilterFieldContentWrapper.js +48 -43
  87. package/src/sap/fe/core/controls/CustomFilterFieldContentWrapper.ts +51 -46
  88. package/src/sap/fe/core/controls/CustomQuickViewPage.js +3 -2
  89. package/src/sap/fe/core/controls/CustomQuickViewPage.ts +3 -2
  90. package/src/sap/fe/core/controls/DataLossOrDraftDiscard/DataLossDraft.fragment.xml +11 -3
  91. package/src/sap/fe/core/controls/DataLossOrDraftDiscard/DataLossOrDraftDiscardHandler.js +19 -9
  92. package/src/sap/fe/core/controls/DataLossOrDraftDiscard/DataLossOrDraftDiscardHandler.ts +14 -8
  93. package/src/sap/fe/core/controls/FieldWrapper.js +2 -2
  94. package/src/sap/fe/core/controls/FieldWrapper.ts +3 -3
  95. package/src/sap/fe/core/controls/FileWrapper.js +50 -3
  96. package/src/sap/fe/core/controls/FileWrapper.ts +45 -12
  97. package/src/sap/fe/core/controls/FilterBar.js +6 -2
  98. package/src/sap/fe/core/controls/FilterBar.ts +13 -9
  99. package/src/sap/fe/core/controls/FormElementWrapper.js +12 -2
  100. package/src/sap/fe/core/controls/FormElementWrapper.ts +14 -3
  101. package/src/sap/fe/core/controls/MassEditSelect.js +33 -0
  102. package/src/sap/fe/core/controls/MassEditSelect.ts +41 -0
  103. package/src/sap/fe/core/controls/NonComputedVisibleKeyFieldsDialog.fragment.xml +3 -3
  104. package/src/sap/fe/core/controls/filterbar/VisualFilter.js +16 -12
  105. package/src/sap/fe/core/controls/filterbar/VisualFilter.ts +20 -22
  106. package/src/sap/fe/core/controls/filterbar/VisualFilterContainer.js +3 -3
  107. package/src/sap/fe/core/controls/filterbar/VisualFilterContainer.ts +8 -8
  108. package/src/sap/fe/core/controls/filterbar/utils/VisualFilterUtils.js +48 -48
  109. package/src/sap/fe/core/controls/filterbar/utils/VisualFilterUtils.ts +71 -76
  110. package/src/sap/fe/core/controls/massEdit/MassEditDialog.fragment.xml +36 -65
  111. package/src/sap/fe/core/controls/massEdit/MassEditField.fragment.xml +107 -0
  112. package/src/sap/fe/core/controls/massEdit/MassEditHandlers.js +551 -36
  113. package/src/sap/fe/core/controls/massEdit/MassEditHandlers.ts +605 -36
  114. package/src/sap/fe/core/converters/ConverterContext.js +26 -33
  115. package/src/sap/fe/core/converters/ConverterContext.ts +51 -60
  116. package/src/sap/fe/core/converters/ManifestSettings.js +2 -1
  117. package/src/sap/fe/core/converters/ManifestSettings.ts +17 -14
  118. package/src/sap/fe/core/converters/ManifestWrapper.js +59 -45
  119. package/src/sap/fe/core/converters/ManifestWrapper.ts +55 -45
  120. package/src/sap/fe/core/converters/MetaModelConverter.js +56 -67
  121. package/src/sap/fe/core/converters/MetaModelConverter.ts +183 -193
  122. package/src/sap/fe/core/converters/TemplateConverter.js +21 -20
  123. package/src/sap/fe/core/converters/TemplateConverter.ts +27 -24
  124. package/src/sap/fe/core/converters/annotations/DataField.js +73 -37
  125. package/src/sap/fe/core/converters/annotations/DataField.ts +121 -77
  126. package/src/sap/fe/core/converters/common/AnnotationConverter.js +1911 -1495
  127. package/src/sap/fe/core/converters/controls/Common/Action.js +51 -49
  128. package/src/sap/fe/core/converters/controls/Common/Action.ts +58 -54
  129. package/src/sap/fe/core/converters/controls/Common/Chart.js +22 -15
  130. package/src/sap/fe/core/converters/controls/Common/Chart.ts +29 -27
  131. package/src/sap/fe/core/converters/controls/Common/Criticality.js +3 -3
  132. package/src/sap/fe/core/converters/controls/Common/Criticality.ts +4 -4
  133. package/src/sap/fe/core/converters/controls/Common/DataVisualization.js +28 -28
  134. package/src/sap/fe/core/converters/controls/Common/DataVisualization.ts +40 -36
  135. package/src/sap/fe/core/converters/controls/Common/Form.js +30 -34
  136. package/src/sap/fe/core/converters/controls/Common/Form.ts +48 -58
  137. package/src/sap/fe/core/converters/controls/Common/KPI.js +11 -11
  138. package/src/sap/fe/core/converters/controls/Common/KPI.ts +35 -39
  139. package/src/sap/fe/core/converters/controls/Common/Table.js +318 -244
  140. package/src/sap/fe/core/converters/controls/Common/Table.ts +368 -297
  141. package/src/sap/fe/core/converters/controls/Common/table/StandardActions.js +135 -125
  142. package/src/sap/fe/core/converters/controls/Common/table/StandardActions.ts +162 -148
  143. package/src/sap/fe/core/converters/controls/ListReport/FilterBar.js +51 -45
  144. package/src/sap/fe/core/converters/controls/ListReport/FilterBar.ts +79 -67
  145. package/src/sap/fe/core/converters/controls/ListReport/VisualFilters.js +28 -26
  146. package/src/sap/fe/core/converters/controls/ListReport/VisualFilters.ts +46 -43
  147. package/src/sap/fe/core/converters/controls/ObjectPage/Avatar.js +9 -9
  148. package/src/sap/fe/core/converters/controls/ObjectPage/Avatar.ts +14 -13
  149. package/src/sap/fe/core/converters/controls/ObjectPage/HeaderFacet.js +67 -64
  150. package/src/sap/fe/core/converters/controls/ObjectPage/HeaderFacet.ts +69 -66
  151. package/src/sap/fe/core/converters/controls/ObjectPage/SubSection.js +92 -89
  152. package/src/sap/fe/core/converters/controls/ObjectPage/SubSection.ts +124 -120
  153. package/src/sap/fe/core/converters/helpers/Aggregation.js +11 -5
  154. package/src/sap/fe/core/converters/helpers/Aggregation.ts +25 -23
  155. package/src/sap/fe/core/converters/helpers/BindingHelper.js +31 -30
  156. package/src/sap/fe/core/converters/helpers/BindingHelper.ts +31 -29
  157. package/src/sap/fe/core/converters/helpers/ConfigurableObject.js +4 -4
  158. package/src/sap/fe/core/converters/helpers/ConfigurableObject.ts +9 -9
  159. package/src/sap/fe/core/converters/helpers/ID.js +46 -46
  160. package/src/sap/fe/core/converters/helpers/ID.ts +25 -25
  161. package/src/sap/fe/core/converters/helpers/Key.js +7 -7
  162. package/src/sap/fe/core/converters/helpers/Key.ts +7 -7
  163. package/src/sap/fe/core/converters/helpers/SelectionVariantHelper.js +1 -1
  164. package/src/sap/fe/core/converters/helpers/SelectionVariantHelper.ts +4 -4
  165. package/src/sap/fe/core/converters/objectPage/FormMenuActions.js +6 -6
  166. package/src/sap/fe/core/converters/objectPage/FormMenuActions.ts +10 -10
  167. package/src/sap/fe/core/converters/objectPage/HeaderAndFooterAction.js +46 -62
  168. package/src/sap/fe/core/converters/objectPage/HeaderAndFooterAction.ts +54 -82
  169. package/src/sap/fe/core/converters/templates/ListReportConverter.js +30 -29
  170. package/src/sap/fe/core/converters/templates/ListReportConverter.ts +40 -40
  171. package/src/sap/fe/core/converters/templates/ObjectPageConverter.js +56 -55
  172. package/src/sap/fe/core/converters/templates/ObjectPageConverter.ts +65 -77
  173. package/src/sap/fe/core/designtime/AppComponent.designtime.js +6 -6
  174. package/src/sap/fe/core/designtime/AppComponent.designtime.ts +10 -8
  175. package/src/sap/fe/core/formatters/CollaborationFormatter.js +2 -2
  176. package/src/sap/fe/core/formatters/CollaborationFormatter.ts +3 -3
  177. package/src/sap/fe/core/formatters/FPMFormatter.js +5 -5
  178. package/src/sap/fe/core/formatters/FPMFormatter.ts +10 -10
  179. package/src/sap/fe/core/formatters/KPIFormatter.js +7 -7
  180. package/src/sap/fe/core/formatters/KPIFormatter.ts +10 -10
  181. package/src/sap/fe/core/formatters/StandardFormatter.js +89 -0
  182. package/src/sap/fe/core/formatters/StandardFormatter.ts +64 -0
  183. package/src/sap/fe/core/formatters/TableFormatter.js +83 -22
  184. package/src/sap/fe/core/formatters/TableFormatter.ts +80 -25
  185. package/src/sap/fe/core/formatters/ValueFormatter.js +8 -8
  186. package/src/sap/fe/core/formatters/ValueFormatter.ts +9 -9
  187. package/src/sap/fe/core/fpm/Component.js +2 -2
  188. package/src/sap/fe/core/fpm/Component.ts +1 -1
  189. package/src/sap/fe/core/helpers/AppStartupHelper.js +15 -15
  190. package/src/sap/fe/core/helpers/AppStartupHelper.ts +37 -40
  191. package/src/sap/fe/core/helpers/BindingToolkit.js +1809 -0
  192. package/src/sap/fe/core/helpers/{BindingExpression.ts → BindingToolkit.ts} +388 -285
  193. package/src/sap/fe/core/helpers/ClassSupport.js +20 -11
  194. package/src/sap/fe/core/helpers/ClassSupport.ts +15 -10
  195. package/src/sap/fe/core/helpers/DynamicAnnotationPathHelper.js +2 -2
  196. package/src/sap/fe/core/helpers/DynamicAnnotationPathHelper.ts +1 -1
  197. package/src/sap/fe/core/helpers/EditState.js +1 -6
  198. package/src/sap/fe/core/helpers/EditState.ts +5 -10
  199. package/src/sap/fe/core/helpers/ExcelFormatHelper.js +2 -2
  200. package/src/sap/fe/core/helpers/ExcelFormatHelper.ts +4 -4
  201. package/src/sap/fe/core/helpers/FPMHelper.js +3 -2
  202. package/src/sap/fe/core/helpers/FPMHelper.ts +10 -9
  203. package/src/sap/fe/core/helpers/KeepAliveHelper.js +31 -31
  204. package/src/sap/fe/core/helpers/KeepAliveHelper.ts +52 -56
  205. package/src/sap/fe/core/helpers/MassEditHelper.js +532 -264
  206. package/src/sap/fe/core/helpers/MassEditHelper.ts +560 -289
  207. package/src/sap/fe/core/helpers/ModelHelper.js +25 -25
  208. package/src/sap/fe/core/helpers/ModelHelper.ts +50 -58
  209. package/src/sap/fe/core/helpers/PasteHelper.js +3 -10
  210. package/src/sap/fe/core/helpers/PasteHelper.ts +20 -25
  211. package/src/sap/fe/core/helpers/SemanticDateOperators.js +1 -1
  212. package/src/sap/fe/core/helpers/SemanticDateOperators.ts +11 -11
  213. package/src/sap/fe/core/helpers/SemanticKeyHelper.js +3 -3
  214. package/src/sap/fe/core/helpers/SemanticKeyHelper.ts +8 -8
  215. package/src/sap/fe/core/helpers/StableIdHelper.js +16 -12
  216. package/src/sap/fe/core/helpers/StableIdHelper.ts +20 -16
  217. package/src/sap/fe/core/{Synchronization.js → helpers/Synchronization.js} +1 -1
  218. package/src/sap/fe/core/{Synchronization.ts → helpers/Synchronization.ts} +1 -1
  219. package/src/sap/fe/core/jsx-runtime/jsx.js +1 -1
  220. package/src/sap/fe/core/jsx-runtime/jsx.ts +8 -8
  221. package/src/sap/fe/core/library.js +51 -3
  222. package/src/sap/fe/core/library.ts +47 -0
  223. package/src/sap/fe/core/manifestMerger/ChangePageConfiguration.js +3 -3
  224. package/src/sap/fe/core/manifestMerger/ChangePageConfiguration.ts +2 -2
  225. package/src/sap/fe/core/messagebundle.properties +151 -197
  226. package/src/sap/fe/core/messagebundle_ar.properties +36 -63
  227. package/src/sap/fe/core/messagebundle_bg.properties +36 -63
  228. package/src/sap/fe/core/messagebundle_ca.properties +36 -63
  229. package/src/sap/fe/core/messagebundle_cs.properties +36 -63
  230. package/src/sap/fe/core/messagebundle_cy.properties +36 -63
  231. package/src/sap/fe/core/messagebundle_da.properties +37 -64
  232. package/src/sap/fe/core/messagebundle_de.properties +36 -63
  233. package/src/sap/fe/core/messagebundle_el.properties +38 -65
  234. package/src/sap/fe/core/messagebundle_en.properties +37 -64
  235. package/src/sap/fe/core/messagebundle_en_GB.properties +37 -64
  236. package/src/sap/fe/core/messagebundle_en_US_sappsd.properties +44 -73
  237. package/src/sap/fe/core/messagebundle_en_US_saprigi.properties +37 -64
  238. package/src/sap/fe/core/messagebundle_en_US_saptrc.properties +52 -81
  239. package/src/sap/fe/core/messagebundle_es.properties +36 -63
  240. package/src/sap/fe/core/messagebundle_es_MX.properties +36 -63
  241. package/src/sap/fe/core/messagebundle_et.properties +36 -63
  242. package/src/sap/fe/core/messagebundle_fi.properties +36 -63
  243. package/src/sap/fe/core/messagebundle_fr.properties +39 -66
  244. package/src/sap/fe/core/messagebundle_fr_CA.properties +36 -63
  245. package/src/sap/fe/core/messagebundle_hi.properties +36 -63
  246. package/src/sap/fe/core/messagebundle_hr.properties +36 -63
  247. package/src/sap/fe/core/messagebundle_hu.properties +35 -62
  248. package/src/sap/fe/core/messagebundle_id.properties +37 -64
  249. package/src/sap/fe/core/messagebundle_it.properties +54 -81
  250. package/src/sap/fe/core/messagebundle_iw.properties +36 -63
  251. package/src/sap/fe/core/messagebundle_ja.properties +36 -63
  252. package/src/sap/fe/core/messagebundle_kk.properties +36 -63
  253. package/src/sap/fe/core/messagebundle_ko.properties +36 -63
  254. package/src/sap/fe/core/messagebundle_lt.properties +36 -63
  255. package/src/sap/fe/core/messagebundle_lv.properties +36 -63
  256. package/src/sap/fe/core/messagebundle_ms.properties +37 -64
  257. package/src/sap/fe/core/messagebundle_nl.properties +37 -64
  258. package/src/sap/fe/core/messagebundle_no.properties +36 -63
  259. package/src/sap/fe/core/messagebundle_pl.properties +37 -64
  260. package/src/sap/fe/core/messagebundle_pt.properties +37 -64
  261. package/src/sap/fe/core/messagebundle_pt_PT.properties +36 -63
  262. package/src/sap/fe/core/messagebundle_ro.properties +36 -63
  263. package/src/sap/fe/core/messagebundle_ru.properties +36 -63
  264. package/src/sap/fe/core/messagebundle_sh.properties +36 -63
  265. package/src/sap/fe/core/messagebundle_sk.properties +36 -63
  266. package/src/sap/fe/core/messagebundle_sl.properties +38 -65
  267. package/src/sap/fe/core/messagebundle_sv.properties +36 -63
  268. package/src/sap/fe/core/messagebundle_th.properties +36 -63
  269. package/src/sap/fe/core/messagebundle_tr.properties +36 -63
  270. package/src/sap/fe/core/messagebundle_uk.properties +37 -64
  271. package/src/sap/fe/core/messagebundle_vi.properties +37 -64
  272. package/src/sap/fe/core/messagebundle_zh_CN.properties +36 -63
  273. package/src/sap/fe/core/messagebundle_zh_TW.properties +37 -64
  274. package/src/sap/fe/core/services/AsyncComponentServiceFactory.js +2 -2
  275. package/src/sap/fe/core/services/AsyncComponentServiceFactory.ts +5 -5
  276. package/src/sap/fe/core/services/CacheHandlerServiceFactory.js +2 -2
  277. package/src/sap/fe/core/services/CacheHandlerServiceFactory.ts +14 -14
  278. package/src/sap/fe/core/services/EnvironmentServiceFactory.js +6 -3
  279. package/src/sap/fe/core/services/EnvironmentServiceFactory.ts +12 -10
  280. package/src/sap/fe/core/services/NavigationServiceFactory.js +54 -45
  281. package/src/sap/fe/core/services/NavigationServiceFactory.ts +61 -49
  282. package/src/sap/fe/core/services/ResourceModelServiceFactory.js +2 -2
  283. package/src/sap/fe/core/services/ResourceModelServiceFactory.ts +4 -4
  284. package/src/sap/fe/core/services/RoutingServiceFactory.js +63 -60
  285. package/src/sap/fe/core/services/RoutingServiceFactory.ts +76 -73
  286. package/src/sap/fe/core/services/ShellServicesFactory.js +102 -71
  287. package/src/sap/fe/core/services/ShellServicesFactory.ts +109 -78
  288. package/src/sap/fe/core/services/SideEffectsServiceFactory.js +61 -61
  289. package/src/sap/fe/core/services/SideEffectsServiceFactory.ts +102 -92
  290. package/src/sap/fe/core/services/TemplatedViewServiceFactory.js +24 -18
  291. package/src/sap/fe/core/services/TemplatedViewServiceFactory.ts +53 -50
  292. package/src/sap/fe/core/support/CommonHelper.js +3 -2
  293. package/src/sap/fe/core/support/CommonHelper.ts +9 -13
  294. package/src/sap/fe/core/support/Diagnostics.js +1 -1
  295. package/src/sap/fe/core/support/Diagnostics.ts +5 -5
  296. package/src/sap/fe/core/templating/CommonFormatters.js +84 -0
  297. package/src/sap/fe/core/templating/CommonFormatters.ts +86 -0
  298. package/src/sap/fe/core/templating/CriticalityFormatters.js +31 -31
  299. package/src/sap/fe/core/templating/CriticalityFormatters.ts +42 -40
  300. package/src/sap/fe/core/templating/DataFieldFormatters.js +8 -8
  301. package/src/sap/fe/core/templating/DataFieldFormatters.ts +13 -10
  302. package/src/sap/fe/core/templating/DataModelPathHelper.js +16 -15
  303. package/src/sap/fe/core/templating/DataModelPathHelper.ts +42 -32
  304. package/src/sap/fe/core/templating/DisplayModeFormatter.js +1 -1
  305. package/src/sap/fe/core/templating/DisplayModeFormatter.ts +3 -4
  306. package/src/sap/fe/core/templating/EntitySetHelper.js +7 -15
  307. package/src/sap/fe/core/templating/EntitySetHelper.ts +14 -18
  308. package/src/sap/fe/core/templating/FieldControlHelper.js +35 -34
  309. package/src/sap/fe/core/templating/FieldControlHelper.ts +29 -46
  310. package/src/sap/fe/core/templating/FilterHelper.js +12 -11
  311. package/src/sap/fe/core/templating/FilterHelper.ts +17 -16
  312. package/src/sap/fe/core/templating/FilterTemplating.js +1 -1
  313. package/src/sap/fe/core/templating/FilterTemplating.ts +3 -3
  314. package/src/sap/fe/core/templating/PropertyFormatters.js +7 -7
  315. package/src/sap/fe/core/templating/PropertyFormatters.ts +21 -19
  316. package/src/sap/fe/core/templating/PropertyHelper.js +79 -56
  317. package/src/sap/fe/core/templating/PropertyHelper.ts +41 -27
  318. package/src/sap/fe/core/templating/UIFormatters.js +163 -97
  319. package/src/sap/fe/core/templating/UIFormatters.ts +210 -129
  320. package/src/sap/fe/core/type/DateTimeWithTimezone.js +47 -0
  321. package/src/sap/fe/core/type/DateTimeWithTimezone.ts +23 -0
  322. package/src/sap/fe/core/type/Email.js +2 -2
  323. package/src/sap/fe/core/type/Email.ts +2 -2
  324. package/src/sap/fe/core/AnnotationHelper.js +0 -331
  325. package/src/sap/fe/core/AnnotationHelper.ts +0 -321
  326. package/src/sap/fe/core/RouterProxy.js +0 -938
  327. package/src/sap/fe/core/TransactionHelper.js +0 -1577
  328. package/src/sap/fe/core/actions/collaboration/ActivitySync.js +0 -406
  329. package/src/sap/fe/core/actions/collaboration/Manage.js +0 -264
  330. package/src/sap/fe/core/actions/draft.js +0 -665
  331. package/src/sap/fe/core/actions/messageHandling.js +0 -579
  332. package/src/sap/fe/core/actions/nonDraft.js +0 -20
  333. package/src/sap/fe/core/actions/nonDraft.ts +0 -12
  334. package/src/sap/fe/core/actions/operations.js +0 -1096
  335. package/src/sap/fe/core/actions/sticky.js +0 -130
  336. package/src/sap/fe/core/actions/sticky.ts +0 -119
  337. package/src/sap/fe/core/formatters/CriticalityFormatter.js +0 -77
  338. package/src/sap/fe/core/formatters/CriticalityFormatter.ts +0 -58
  339. package/src/sap/fe/core/helpers/BindingExpression.js +0 -1729
@@ -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/ui/core/service/Service", "sap/ui/core/service/ServiceFactory", "sap/ui/core/service/ServiceFactoryRegistry", "sap/ui/model/base/ManagedObjectModel", "sap/ui/core/mvc/View", "sap/ui/core/Component", "sap/ui/model/json/JSONModel", "sap/base/Log", "sap/fe/core/TemplateModel", "sap/ui/core/cache/CacheManager", "sap/ui/VersionInfo", "sap/ui/Device", "sap/base/util/UriParameters", "../helpers/DynamicAnnotationPathHelper", "sap/ui/core/Core"], function (Service, ServiceFactory, ServiceFactoryRegistry, ManagedObjectModel, View, Component, JSONModel, Log, TemplateModel, CacheManager, VersionInfo, Device, UriParameters, DynamicAnnotationPathHelper, Core) {
5
+ sap.ui.define(["sap/base/Log", "sap/base/util/UriParameters", "sap/fe/core/TemplateModel", "sap/ui/core/cache/CacheManager", "sap/ui/core/Component", "sap/ui/core/Core", "sap/ui/core/mvc/View", "sap/ui/core/service/Service", "sap/ui/core/service/ServiceFactory", "sap/ui/core/service/ServiceFactoryRegistry", "sap/ui/Device", "sap/ui/model/base/ManagedObjectModel", "sap/ui/model/json/JSONModel", "sap/ui/VersionInfo", "../helpers/DynamicAnnotationPathHelper"], function (Log, UriParameters, TemplateModel, CacheManager, Component, Core, View, Service, ServiceFactory, ServiceFactoryRegistry, Device, ManagedObjectModel, JSONModel, VersionInfo, DynamicAnnotationPathHelper) {
6
6
  "use strict";
7
7
 
8
8
  var resolveDynamicExpression = DynamicAnnotationPathHelper.resolveDynamicExpression;
@@ -28,7 +28,7 @@ sap.ui.define(["sap/ui/core/service/Service", "sap/ui/core/service/ServiceFactor
28
28
  var oComponent = oContext.scopeObject;
29
29
  var oAppComponent = Component.getOwnerComponentFor(oComponent);
30
30
  var oMetaModel = oAppComponent.getMetaModel();
31
- var sStableId = oAppComponent.getMetadata().getComponentName() + "::" + oAppComponent.getLocalId(oComponent.getId());
31
+ var sStableId = "".concat(oAppComponent.getMetadata().getComponentName(), "::").concat(oAppComponent.getLocalId(oComponent.getId()));
32
32
  var aEnhanceI18n = oComponent.getEnhanceI18n() || [];
33
33
  var sAppNamespace;
34
34
  this.oFactory = oContext.factory;
@@ -46,12 +46,12 @@ sap.ui.define(["sap/ui/core/service/Service", "sap/ui/core/service/ServiceFactor
46
46
  if (oResourceModel && oResourceModel.isA("sap.ui.model.resource.ResourceModel")) {
47
47
  aEnhanceI18n[i] = oResourceModel;
48
48
  } else {
49
- aEnhanceI18n[i] = sAppNamespace + "." + aEnhanceI18n[i].replace(".properties", "");
49
+ aEnhanceI18n[i] = "".concat(sAppNamespace, ".").concat(aEnhanceI18n[i].replace(".properties", ""));
50
50
  }
51
51
  }
52
52
  }
53
53
 
54
- var sCacheIdentifier = oAppComponent.getMetadata().getName() + "_" + sStableId + "_" + sap.ui.getCore().getConfiguration().getLanguageTag();
54
+ var sCacheIdentifier = "".concat(oAppComponent.getMetadata().getName(), "_").concat(sStableId, "_").concat(sap.ui.getCore().getConfiguration().getLanguageTag());
55
55
  aServiceDependencies.push(ServiceFactoryRegistry.get("sap.fe.core.services.ResourceModelService").createInstance({
56
56
  scopeType: "component",
57
57
  scopeObject: oComponent,
@@ -97,7 +97,7 @@ sap.ui.define(["sap/ui/core/service/Service", "sap/ui/core/service/ServiceFactor
97
97
  var oSideEffectsServices = oAppComponent.getSideEffectsService();
98
98
  oSideEffectsServices.initializeSideEffects(oAppComponent.getEnvironmentCapabilities().getCapabilities()); // In case there is no cache key we ignore the view cache
99
99
 
100
- sPageModelCacheKey = sCacheKey ? sCacheKey + "-" + sVersionInfo + "-" + sStableId + "-" + oShellServices.instanceType + "-pageModel" : undefined;
100
+ sPageModelCacheKey = sCacheKey ? "".concat(sCacheKey, "-").concat(sVersionInfo, "-").concat(sStableId, "-").concat(oShellServices.instanceType, "-pageModel") : undefined;
101
101
  return Promise.all(aDependenciesResult.concat([_this._getCachedModel(sPageModelCacheKey)]));
102
102
  }).then(function (aDependenciesResult) {
103
103
  var oResourceModel = aDependenciesResult[0];
@@ -134,7 +134,7 @@ sap.ui.define(["sap/ui/core/service/Service", "sap/ui/core/service/ServiceFactor
134
134
  * This is useful for our demokit !
135
135
  *
136
136
  * @param oComponent
137
- * @returns {Promise<void>}
137
+ * @returns A promise indicating when the view is refreshed
138
138
  * @private
139
139
  */
140
140
  ;
@@ -184,20 +184,20 @@ sap.ui.define(["sap/ui/core/service/Service", "sap/ui/core/service/ServiceFactor
184
184
  }
185
185
 
186
186
  if (sPathSoFar === "") {
187
- sPathSoFar = "/" + sNextPathPart;
187
+ sPathSoFar = "/".concat(sNextPathPart);
188
188
  } else {
189
- var oTarget = oMetaModel.getObject(sPathSoFar + "/$NavigationPropertyBinding/" + sNextPathPart);
189
+ var oTarget = oMetaModel.getObject("".concat(sPathSoFar, "/$NavigationPropertyBinding/").concat(sNextPathPart));
190
190
 
191
191
  if (oTarget && Object.keys(oTarget).length > 0) {
192
192
  sPathSoFar += "/$NavigationPropertyBinding";
193
193
  }
194
194
 
195
- sPathSoFar += "/" + sNextPathPart;
195
+ sPathSoFar += "/".concat(sNextPathPart);
196
196
  }
197
197
 
198
198
  return sPathSoFar;
199
199
  }, "");
200
- var oViewSettings = {
200
+ return {
201
201
  type: "XML",
202
202
  preprocessors: {
203
203
  xml: {
@@ -217,7 +217,6 @@ sap.ui.define(["sap/ui/core/service/Service", "sap/ui/core/service/ServiceFactor
217
217
  "sap.fe.i18n": oResourceModel,
218
218
  metaModel: oMetaModel,
219
219
  "device": oDeviceModel,
220
- // TODO: discuss names here
221
220
  manifest: oManifestModel,
222
221
  converterContext: oPageModel,
223
222
  viewData: oViewDataModel
@@ -236,7 +235,6 @@ sap.ui.define(["sap/ui/core/service/Service", "sap/ui/core/service/ServiceFactor
236
235
  },
237
236
  height: "100%"
238
237
  };
239
- return oViewSettings;
240
238
  }
241
239
 
242
240
  var createErrorPage = function (reason) {
@@ -303,7 +301,9 @@ sap.ui.define(["sap/ui/core/service/Service", "sap/ui/core/service/ServiceFactor
303
301
  mViewData.converterType = sConverterType;
304
302
  mViewData.shellContentDensity = oShellServices.getContentDensity();
305
303
  mViewData.useNewLazyLoading = UriParameters.fromQuery(window.location.search).get("sap-fe-xx-lazyloadingtest") === "true";
306
- mViewData.retrieveTextFromValueList = oManifestContent["sap.fe"] && oManifestContent["sap.fe"].form ? oManifestContent["sap.fe"].form.retrieveTextFromValueList : undefined;
304
+ mViewData.retrieveTextFromValueList = oManifestContent["sap.fe"] && oManifestContent["sap.fe"].form ? oManifestContent["sap.fe"].form.retrieveTextFromValueList : undefined; // The manifest switch for the usage of the new ValueHelp should only used internally
305
+
306
+ mViewData._useNewValueHelp = oManifestContent["sap.fe"] && oManifestContent["sap.fe"].app ? oManifestContent["sap.fe"].app._useNewValueHelp : undefined;
307
307
  oViewDataModel = new JSONModel(mViewData);
308
308
 
309
309
  if (mViewData && mViewData.controlConfiguration) {
@@ -318,7 +318,7 @@ sap.ui.define(["sap/ui/core/service/Service", "sap/ui/core/service/ServiceFactor
318
318
  MetaModelConverter.convertTypes(oMetaModel, oAppComponent.getEnvironmentCapabilities().getCapabilities());
319
319
  oPageModel = new TemplateModel(function () {
320
320
  try {
321
- if (!!oPageModelCache) {
321
+ if (oPageModelCache) {
322
322
  return oPageModelCache;
323
323
  } else {
324
324
  var oDiagnostics = oAppComponent.getDiagnostics();
@@ -365,7 +365,7 @@ sap.ui.define(["sap/ui/core/service/Service", "sap/ui/core/service/ServiceFactor
365
365
  }
366
366
  }).catch(function (error) {
367
367
  Log.error(error.message, error);
368
- throw new Error("Error while creating view : " + error);
368
+ throw new Error("Error while creating view : ".concat(error));
369
369
  });
370
370
  };
371
371
 
@@ -379,8 +379,14 @@ sap.ui.define(["sap/ui/core/service/Service", "sap/ui/core/service/ServiceFactor
379
379
 
380
380
  _proto.exit = function exit() {
381
381
  // Deregister global instance
382
- this.oResourceModelService && this.oResourceModelService.destroy();
383
- this.oCacheHandlerService && this.oCacheHandlerService.destroy();
382
+ if (this.oResourceModelService) {
383
+ this.oResourceModelService.destroy();
384
+ }
385
+
386
+ if (this.oCacheHandlerService) {
387
+ this.oCacheHandlerService.destroy();
388
+ }
389
+
384
390
  this.oFactory.removeGlobalInstance();
385
391
  };
386
392
 
@@ -428,4 +434,4 @@ sap.ui.define(["sap/ui/core/service/Service", "sap/ui/core/service/ServiceFactor
428
434
 
429
435
  return TemplatedViewServiceFactory;
430
436
  }, false);
431
- //# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIlRlbXBsYXRlZFZpZXdTZXJ2aWNlRmFjdG9yeS50cyJdLCJuYW1lcyI6WyJUZW1wbGF0ZWRWaWV3U2VydmljZSIsImluaXQiLCJhU2VydmljZURlcGVuZGVuY2llcyIsIm9Db250ZXh0IiwiZ2V0Q29udGV4dCIsIm9Db21wb25lbnQiLCJzY29wZU9iamVjdCIsIm9BcHBDb21wb25lbnQiLCJDb21wb25lbnQiLCJnZXRPd25lckNvbXBvbmVudEZvciIsIm9NZXRhTW9kZWwiLCJnZXRNZXRhTW9kZWwiLCJzU3RhYmxlSWQiLCJnZXRNZXRhZGF0YSIsImdldENvbXBvbmVudE5hbWUiLCJnZXRMb2NhbElkIiwiZ2V0SWQiLCJhRW5oYW5jZUkxOG4iLCJnZXRFbmhhbmNlSTE4biIsInNBcHBOYW1lc3BhY2UiLCJvRmFjdG9yeSIsImZhY3RvcnkiLCJpIiwibGVuZ3RoIiwib1Jlc291cmNlTW9kZWwiLCJnZXRNb2RlbCIsImlzQSIsInJlcGxhY2UiLCJzQ2FjaGVJZGVudGlmaWVyIiwiZ2V0TmFtZSIsInNhcCIsInVpIiwiZ2V0Q29yZSIsImdldENvbmZpZ3VyYXRpb24iLCJnZXRMYW5ndWFnZVRhZyIsInB1c2giLCJTZXJ2aWNlRmFjdG9yeVJlZ2lzdHJ5IiwiZ2V0IiwiY3JlYXRlSW5zdGFuY2UiLCJzY29wZVR5cGUiLCJzZXR0aW5ncyIsImJ1bmRsZXMiLCJlbmhhbmNlSTE4biIsIm1vZGVsTmFtZSIsInRoZW4iLCJvUmVzb3VyY2VNb2RlbFNlcnZpY2UiLCJnZXRSZXNvdXJjZU1vZGVsIiwibWV0YU1vZGVsIiwiYXBwQ29tcG9uZW50IiwiY29tcG9uZW50Iiwib0NhY2hlSGFuZGxlclNlcnZpY2UiLCJ2YWxpZGF0ZUNhY2hlS2V5IiwiVmVyc2lvbkluZm8iLCJsb2FkIiwib0luZm8iLCJzVGltZXN0YW1wIiwibGlicmFyaWVzIiwiYnVpbGRpbmZvIiwiYnVpbGR0aW1lIiwiZm9yRWFjaCIsIm9MaWJyYXJ5IiwiYnVpbGRUaW1lc3RhbXAiLCJjYXRjaCIsInNQYWdlTW9kZWxDYWNoZUtleSIsImluaXRQcm9taXNlIiwiUHJvbWlzZSIsImFsbCIsImFEZXBlbmRlbmNpZXNSZXN1bHQiLCJzQ2FjaGVLZXkiLCJzVmVyc2lvbkluZm8iLCJvU2hlbGxTZXJ2aWNlcyIsImdldFNoZWxsU2VydmljZXMiLCJvU2lkZUVmZmVjdHNTZXJ2aWNlcyIsImdldFNpZGVFZmZlY3RzU2VydmljZSIsImluaXRpYWxpemVTaWRlRWZmZWN0cyIsImdldEVudmlyb25tZW50Q2FwYWJpbGl0aWVzIiwiZ2V0Q2FwYWJpbGl0aWVzIiwiaW5zdGFuY2VUeXBlIiwidW5kZWZpbmVkIiwiY29uY2F0IiwiX2dldENhY2hlZE1vZGVsIiwib1BhZ2VNb2RlbENhY2hlIiwicmVzb2x2ZSIsInJlcXVpcmUiLCJUZW1wbGF0ZUNvbnZlcnRlciIsIk1ldGFNb2RlbENvbnZlcnRlciIsImNyZWF0ZVZpZXciLCJnZXRJbnN0YW5jZSIsImludmFsaWRhdGVJZk5lZWRlZCIsIkNvcmUiLCJnZXRWaWV3Q2FjaGUiLCJDYWNoZU1hbmFnZXIiLCJfc2V0Q2FjaGVkTW9kZWwiLCJvQ2FjaGVNb2RlbCIsInNldCIsInJlZnJlc2hWaWV3Iiwib1Jvb3RWaWV3IiwiZ2V0Um9vdENvbnRyb2wiLCJkZXN0cm95Iiwib1ZpZXciLCJyZXNvdXJjZU1vZGVsIiwic3RhYmxlSWQiLCJvQ29udGFpbmVyIiwiaW52YWxpZGF0ZSIsIm9FcnJvciIsIkxvZyIsImVycm9yIiwibVNlcnZpY2VTZXR0aW5ncyIsInNDb252ZXJ0ZXJUeXBlIiwiY29udmVydGVyVHlwZSIsInNGdWxsQ29udGV4dFBhdGgiLCJnZXRSb3V0aW5nU2VydmljZSIsImdldFRhcmdldEluZm9ybWF0aW9uRm9yIiwib3B0aW9ucyIsImZ1bGxDb250ZXh0UGF0aCIsIm9NYW5pZmVzdENvbnRlbnQiLCJnZXRNYW5pZmVzdCIsIm9EZXZpY2VNb2RlbCIsIkpTT05Nb2RlbCIsIkRldmljZSIsInNldERlZmF1bHRCaW5kaW5nTW9kZSIsIm9NYW5pZmVzdE1vZGVsIiwiYkVycm9yIiwib1BhZ2VNb2RlbCIsIm9WaWV3RGF0YU1vZGVsIiwib1ZpZXdTZXR0aW5ncyIsIm1WaWV3RGF0YSIsImdldFZpZXdTZXR0aW5ncyIsImFTcGxpdFBhdGgiLCJzcGxpdCIsInNFbnRpdHlTZXRQYXRoIiwicmVkdWNlIiwic1BhdGhTb0ZhciIsInNOZXh0UGF0aFBhcnQiLCJvVGFyZ2V0IiwiZ2V0T2JqZWN0IiwiT2JqZWN0Iiwia2V5cyIsInR5cGUiLCJwcmVwcm9jZXNzb3JzIiwieG1sIiwiYmluZGluZ0NvbnRleHRzIiwiZW50aXR5U2V0IiwiY3JlYXRlQmluZGluZ0NvbnRleHQiLCJjb250ZXh0UGF0aCIsImNvbnZlcnRlckNvbnRleHQiLCJub1Jlc29sdmUiLCJ2aWV3RGF0YSIsIm1vZGVscyIsIm1hbmlmZXN0IiwiaWQiLCJ2aWV3TmFtZSIsImdldFZpZXdOYW1lIiwiY2FjaGUiLCJoZWlnaHQiLCJjcmVhdGVFcnJvclBhZ2UiLCJyZWFzb24iLCJtZXNzYWdlIiwiZXJyb3JWaWV3TmFtZSIsInJ1bkFzT3duZXIiLCJWaWV3IiwiY3JlYXRlIiwic2V0TW9kZWwiLCJNYW5hZ2VkT2JqZWN0TW9kZWwiLCJzZXRBZ2dyZWdhdGlvbiIsImdldFNlcnZpY2UiLCJvUm91dGluZ1NlcnZpY2UiLCJvVGFyZ2V0SW5mbyIsIm1PdXRib3VuZHMiLCJjcm9zc05hdmlnYXRpb24iLCJvdXRib3VuZHMiLCJtTmF2aWdhdGlvbiIsImdldE5hdmlnYXRpb24iLCJuYXZpZ2F0aW9uT2JqZWN0S2V5IiwibmF2aWdhdGlvbk9iamVjdCIsIm91dGJvdW5kQ29uZmlnIiwiZGV0YWlsIiwib3V0Ym91bmQiLCJvdXRib3VuZERldGFpbCIsInNlbWFudGljT2JqZWN0IiwiYWN0aW9uIiwicGFyYW1ldGVycyIsIm5hdmlnYXRpb24iLCJ2aWV3TGV2ZWwiLCJjb250ZW50RGVuc2l0aWVzIiwicmVzb3VyY2VCdW5kbGUiLCJfX2J1bmRsZSIsImlzRGVza3RvcCIsInN5c3RlbSIsImRlc2t0b3AiLCJpc1Bob25lIiwicGhvbmUiLCJnZXRWaWV3RGF0YSIsImFzc2lnbiIsInNoZWxsQ29udGVudERlbnNpdHkiLCJnZXRDb250ZW50RGVuc2l0eSIsInVzZU5ld0xhenlMb2FkaW5nIiwiVXJpUGFyYW1ldGVycyIsImZyb21RdWVyeSIsIndpbmRvdyIsImxvY2F0aW9uIiwic2VhcmNoIiwicmV0cmlldmVUZXh0RnJvbVZhbHVlTGlzdCIsImZvcm0iLCJjb250cm9sQ29uZmlndXJhdGlvbiIsInNBbm5vdGF0aW9uUGF0aCIsImluZGV4T2YiLCJzVGFyZ2V0QW5ub3RhdGlvblBhdGgiLCJyZXNvbHZlRHluYW1pY0V4cHJlc3Npb24iLCJjb252ZXJ0VHlwZXMiLCJUZW1wbGF0ZU1vZGVsIiwib0RpYWdub3N0aWNzIiwiZ2V0RGlhZ25vc3RpY3MiLCJpSXNzdWVDb3VudCIsImdldElzc3VlcyIsIm9Db252ZXJ0ZXJQYWdlTW9kZWwiLCJjb252ZXJ0UGFnZSIsImFJc3N1ZXMiLCJhQWRkZWRJc3N1ZXMiLCJzbGljZSIsIndhcm5pbmciLCJnZXREYXRhIiwiZSIsIkVycm9yIiwiZ2V0VmlldyIsImdldEludGVyZmFjZSIsImV4aXQiLCJyZW1vdmVHbG9iYWxJbnN0YW5jZSIsIlNlcnZpY2UiLCJUZW1wbGF0ZWRWaWV3U2VydmljZUZhY3RvcnkiLCJfb0luc3RhbmNlUmVnaXN0cnkiLCJvU2VydmljZUNvbnRleHQiLCJpQ3JlYXRpbmdWaWV3cyIsIm9UZW1wbGF0ZWRWaWV3U2VydmljZSIsImdldE51bWJlck9mVmlld3NJbkNyZWF0aW9uU3RhdGUiLCJTZXJ2aWNlRmFjdG9yeSJdLCJtYXBwaW5ncyI6IjtBQUFBO0FBQ0E7QUFDQTs7Ozs7Ozs7OztNQXNCTUEsb0I7Ozs7Ozs7OztXQVVMQyxJLEdBQUEsZ0JBQU87QUFBQTs7QUFDTixVQUFNQyxvQkFBb0IsR0FBRyxFQUE3QjtBQUNBLFVBQU1DLFFBQVEsR0FBRyxLQUFLQyxVQUFMLEVBQWpCO0FBQ0EsVUFBTUMsVUFBVSxHQUFHRixRQUFRLENBQUNHLFdBQTVCO0FBQ0EsVUFBTUMs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QSxnQkFBTztBQUNOO0FBQ0EsV0FBS3JMLHFCQUFMLElBQThCLEtBQUtBLHFCQUFMLENBQTJCcUQsT0FBM0IsRUFBOUI7QUFDQSxXQUFLaEQsb0JBQUwsSUFBNkIsS0FBS0Esb0JBQUwsQ0FBMEJnRCxPQUExQixFQUE3QjtBQUNBLFdBQUs5RSxRQUFMLENBQWMrTSxvQkFBZDtBQUNBLEs7OztJQWxaaUNDLE87O01Bb1o3QkMsMkI7Ozs7Ozs7Ozs7O2FBQ0xDLGtCLEdBQTJELEU7Ozs7OztZQUUzRGhNLGMsR0FBQSx3QkFBZWlNLGVBQWYsRUFBOEU7QUFDN0VGLE1BQUFBLDJCQUEyQixDQUFDRyxjQUE1QjtBQUVBLFVBQU1DLHFCQUFxQixHQUFHLElBQUl6TyxvQkFBSixDQUF5QndJLE1BQU0sQ0FBQ3lELE1BQVAsQ0FBYztBQUFFNUssUUFBQUEsT0FBTyxFQUFFO0FBQVgsT0FBZCxFQUFpQ2tOLGVBQWpDLENBQXpCLENBQTlCO0FBQ0EsYUFBT0UscUJBQXFCLENBQUN6SyxXQUF0QixDQUFrQ3BCLElBQWxDLENBQXVDLFlBQVc7QUFDeER5TCxRQUFBQSwyQkFBMkIsQ0FBQ0csY0FBNUI7QUFDQSxlQUFPQyxxQkFBUDtBQUNBLE9BSE0sQ0FBUDtBQUlBLEs7O1lBQ0ROLG9CLEdBQUEsZ0NBQXVCO0FBQ3RCLFdBQUtHLGtCQUFMLEdBQTBCLEVBQTFCO0FBQ0EsSzs7Z0NBQ01JLCtCLEdBQVAsMkNBQXlDO0FBQ3hDLGFBQU9MLDJCQUEyQixDQUFDRyxjQUFuQztBQUNBLEs7OztJQWpCd0NHLGM7O1NBb0IzQk4sMkIiLCJzb3VyY2VSb290IjoiLiIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCBTZXJ2aWNlIGZyb20gXCJzYXAvdWkvY29yZS9zZXJ2aWNlL1NlcnZpY2VcIjtcbmltcG9ydCBTZXJ2aWNlRmFjdG9yeSBmcm9tIFwic2FwL3VpL2NvcmUvc2VydmljZS9TZXJ2aWNlRmFjdG9yeVwiO1xuaW1wb3J0IFNlcnZpY2VGYWN0b3J5UmVnaXN0cnkgZnJvbSBcInNhcC91aS9jb3JlL3NlcnZpY2UvU2VydmljZUZhY3RvcnlSZWdpc3RyeVwiO1xuaW1wb3J0IE1hbmFnZWRPYmplY3RNb2RlbCBmcm9tIFwic2FwL3VpL21vZGVsL2Jhc2UvTWFuYWdlZE9iamVjdE1vZGVsXCI7XG5pbXBvcnQgVmlldyBmcm9tIFwic2FwL3VpL2NvcmUvbXZjL1ZpZXdcIjtcbmltcG9ydCBDb21wb25lbnQgZnJvbSBcInNhcC91aS9jb3JlL0NvbXBvbmVudFwiO1xuaW1wb3J0IEpTT05Nb2RlbCBmcm9tIFwic2FwL3VpL21vZGVsL2pzb24vSlNPTk1vZGVsXCI7XG5pbXBvcnQgTG9nIGZyb20gXCJzYXAvYmFzZS9Mb2dcIjtcbmltcG9ydCBUZW1wbGF0ZU1vZGVsIGZyb20gXCJzYXAvZmUvY29yZS9UZW1wbGF0ZU1vZGVsXCI7XG5pbXBvcnQgQ2FjaGVNYW5hZ2VyIGZyb20gXCJzYXAvdWkvY29yZS9jYWNoZS9DYWNoZU1hbmFnZXJcIjtcbmltcG9ydCBWZXJzaW9uSW5mbyBmcm9tIFwic2FwL3VpL1ZlcnNpb25JbmZvXCI7XG5pbXBvcnQgRGV2aWNlIGZyb20gXCJzYXAvdWkvRGV2aWNlXCI7XG5pbXBvcnQgVXJpUGFyYW1ldGVycyBmcm9tIFwic2FwL2Jhc2UvdXRpbC9VcmlQYXJhbWV0ZXJzXCI7XG5pbXBvcnQgeyBSZXNvdXJjZU1vZGVsU2VydmljZSB9IGZyb20gXCIuL1Jlc291cmNlTW9kZWxTZXJ2aWNlRmFjdG9yeVwiO1xuaW1wb3J0IEFwcENvbXBvbmVudCBmcm9tIFwic2FwL2ZlL2NvcmUvQXBwQ29tcG9uZW50XCI7XG5pbXBvcnQgeyBDYWNoZUhhbmRsZXJTZXJ2aWNlIH0gZnJvbSBcInNhcC9mZS9jb3JlL3NlcnZpY2VzL0NhY2hlSGFuZGxlclNlcnZpY2VGYWN0b3J5XCI7XG5pbXBvcnQgUmVzb3VyY2VNb2RlbCBmcm9tIFwic2FwL2ZlL21hY3Jvcy9SZXNvdXJjZU1vZGVsXCI7XG5pbXBvcnQgTW9kZWwgZnJvbSBcInNhcC91aS9tb2RlbC9Nb2RlbFwiO1xuaW1wb3J0IHsgcmVzb2x2ZUR5bmFtaWNFeHByZXNzaW9uIH0gZnJvbSBcIi4uL2hlbHBlcnMvRHluYW1pY0Fubm90YXRpb25QYXRoSGVscGVyXCI7XG5pbXBvcnQgQ29yZSBmcm9tIFwic2FwL3VpL2NvcmUvQ29yZVwiO1xuaW1wb3J0IHsgQ29yZUV4LCBTZXJ2aWNlQ29udGV4dCB9IGZyb20gXCJ0eXBlcy9leHRlbnNpb25fdHlwZXNcIjtcblxudHlwZSBUZW1wbGF0ZWRWaWV3U2VydmljZVNldHRpbmdzID0ge307XG5cbmNsYXNzIFRlbXBsYXRlZFZpZXdTZXJ2aWNlIGV4dGVuZHMgU2VydmljZTxUZW1wbGF0ZWRWaWV3U2VydmljZVNldHRpbmdzPiB7XG5cdGluaXRQcm9taXNlITogUHJvbWlzZTxhbnk+O1xuXHRvVmlldyE6IFZpZXc7XG5cdG9SZXNvdXJjZU1vZGVsU2VydmljZSE6IFJlc291cmNlTW9kZWxTZXJ2aWNlO1xuXHRvQ2FjaGVIYW5kbGVyU2VydmljZSE6IENhY2hlSGFuZGxlclNlcnZpY2U7XG5cdG9GYWN0b3J5ITogVGVtcGxhdGVkVmlld1NlcnZpY2VGYWN0b3J5O1xuXHRyZXNvdXJjZU1vZGVsITogdHlwZW9mIFJlc291cmNlTW9kZWw7XG5cdHN0YWJsZUlkITogc3RyaW5nO1xuXHRUZW1wbGF0ZUNvbnZlcnRlcjogYW55O1xuXHRNZXRhTW9kZWxDb252ZXJ0ZXI6IGFueTtcblx0aW5pdCgpIHtcblx0XHRjb25zdCBhU2VydmljZURlcGVuZGVuY2llcyA9IFtdO1xuXHRcdGNvbnN0IG9Db250ZXh0ID0gdGhpcy5nZXRDb250ZXh0KCk7XG5cdFx0Y29uc3Qgb0NvbXBvbmVudCA9IG9Db250ZXh0LnNjb3BlT2JqZWN0O1xuXHRcdGNvbnN0IG9BcHBDb21wb25lbnQgPSBDb21wb25lbnQuZ2V0T3duZXJDb21wb25lbnRGb3Iob0NvbXBvbmVudCkgYXMgQXBwQ29tcG9uZW50O1xuXHRcdGNvbnN0IG9NZXRhTW9kZWwgPSBvQXBwQ29tcG9uZW50LmdldE1ldGFNb2RlbCgpO1xuXHRcdGNvbnN0IHNTdGFibGVJZCA9IG9BcHBDb21wb25lbnQuZ2V0TWV0YWRhdGEoKS5nZXRDb21wb25lbnROYW1lKCkgKyBcIjo6XCIgKyBvQXBwQ29tcG9uZW50LmdldExvY2FsSWQob0NvbXBvbmVudC5nZXRJZCgpKTtcblx0XHRjb25zdCBhRW5oYW5jZUkxOG4gPSBvQ29tcG9uZW50LmdldEVuaGFuY2VJMThuKCkgfHwgW107XG5cdFx0bGV0IHNBcHBOYW1lc3BhY2U7XG5cdFx0dGhpcy5vRmFjdG9yeSA9IG9Db250ZXh0LmZhY3Rvcnk7XG5cdFx0aWYgKGFFbmhhbmNlSTE4bikge1xuXHRcdFx0c0FwcE5hbWVzcGFjZSA9IG9BcHBDb21wb25lbnQuZ2V0TWV0YWRhdGEoKS5nZXRDb21wb25lbnROYW1lKCk7XG5cdFx0XHRmb3IgKGxldCBpID0gMDsgaSA8IGFFbmhhbmNlSTE4bi5sZW5ndGg7IGkrKykge1xuXHRcdFx0XHQvLyBJbiBvcmRlciB0byBzdXBwb3J0IHRleHQtdmVydGljYWxpemF0aW9uIGFwcGxpY2F0aW9ucyBjYW4gYWxzbyBwYXNzcyBhIHJlc291cmNlIG1vZGVsIGRlZmluZWQgaW4gdGhlIG1hbmlmZXN0XG5cdFx0XHRcdC8vIFVJNSB0YWtlcyBjYXJlIG9mIHRleHQtdmVydGljYWxpemF0aW9uIGZvciByZXNvdXJjZSBtb2RlbHMgZGVmaW5lZCBpbiB0aGUgbWFuaWZlc3Rcblx0XHRcdFx0Ly8gSGVuY2UgY2hlY2sgaWYgdGhlIGdpdmVuIGtleSBpcyBhIHJlc291cmNlIG1vZGVsIGRlZmluZWQgaW4gdGhlIG1hbmlmZXN0XG5cdFx0XHRcdC8vIGlmIHNvIHRoaXMgbW9kZWwgc2hvdWxkIGJlIHVzZWQgdG8gZW5oYW5jZSB0aGUgc2FwLmZlIHJlc291cmNlIG1vZGVsIHNvIHBhc3MgaXQgYXMgaXQgaXNcblx0XHRcdFx0Y29uc3Qgb1Jlc291cmNlTW9kZWwgPSBvQXBwQ29tcG9uZW50LmdldE1vZGVsKGFFbmhhbmNlSTE4bltpXSk7XG5cdFx0XHRcdGlmIChvUmVzb3VyY2VNb2RlbCAmJiBvUmVzb3VyY2VNb2RlbC5pc0EoXCJzYXAudWkubW9kZWwucmVzb3VyY2UuUmVzb3VyY2VNb2RlbFwiKSkge1xuXHRcdFx0XHRcdGFFbmhhbmNlSTE4bltpXSA9IG9SZXNvdXJjZU1vZGVsO1xuXHRcdFx0XHR9IGVsc2Uge1xuXHRcdFx0XHRcdGFFbmhhbmNlSTE4bltpXSA9IHNBcHBOYW1lc3BhY2UgKyBcIi5cIiArIGFFbmhhbmNlSTE4bltpXS5yZXBsYWNlKFwiLnByb3BlcnRpZXNcIiwgXCJcIik7XG5cdFx0XHRcdH1cblx0XHRcdH1cblx0XHR9XG5cblx0XHRjb25zdCBzQ2FjaGVJZGVudGlmaWVyID1cblx0XHRcdG9BcHBDb21wb25lbnQuZ2V0TWV0YWRhdGEoKS5nZXROYW1lKCkgK1xuXHRcdFx0XCJfXCIgK1xuXHRcdFx0c1N0YWJsZUlkICtcblx0XHRcdFwiX1wiICtcblx0XHRcdHNhcC51aVxuXHRcdFx0XHQuZ2V0Q29yZSgpXG5cdFx0XHRcdC5nZXRDb25maWd1cmF0aW9uKClcblx0XHRcdFx0LmdldExhbmd1YWdlVGFnKCk7XG5cdFx0YVNlcnZpY2VEZXBlbmRlbmNpZXMucHVzaChcblx0XHRcdFNlcnZpY2VGYWN0b3J5UmVnaXN0cnkuZ2V0KFwic2FwLmZlLmNvcmUuc2VydmljZXMuUmVzb3VyY2VNb2RlbFNlcnZpY2VcIilcblx0XHRcdFx0LmNyZWF0ZUluc3RhbmNlKHtcblx0XHRcdFx0XHRzY29wZVR5cGU6IFwiY29tcG9uZW50XCIsXG5cdFx0XHRcdFx0c2NvcGVPYmplY3Q6IG9Db21wb25lbnQsXG5cdFx0XHRcdFx0c2V0dGluZ3M6IHtcblx0XHRcdFx0XHRcdGJ1bmRsZXM6IFtcInNhcC5mZS5jb3JlLm1lc3NhZ2VidW5kbGVcIiwgXCJzYXAuZmUubWFjcm9zLm1lc3NhZ2VidW5kbGVcIiwgXCJzYXAuZmUudGVtcGxhdGVzLm1lc3NhZ2VidW5kbGVcIl0sXG5cdFx0XHRcdFx0XHRlbmhhbmNlSTE4bjogYUVuaGFuY2VJMThuLFxuXHRcdFx0XHRcdFx0bW9kZWxOYW1lOiBcInNhcC5mZS5pMThuXCJcblx0XHRcdFx0XHR9XG5cdFx0XHRcdH0pXG5cdFx0XHRcdC50aGVuKChvUmVzb3VyY2VNb2RlbFNlcnZpY2U6IFJlc291cmNlTW9kZWxTZXJ2aWNlKSA9PiB7XG5cdFx0XHRcdFx0dGhpcy5vUmVzb3VyY2VNb2RlbFNlcnZpY2UgPSBvUmVzb3VyY2VNb2RlbFNlcnZpY2U7XG5cdFx0XHRcdFx0cmV0dXJuIG9SZXNvdXJjZU1vZGVsU2VydmljZS5nZXRSZXNvdXJjZU1vZGVsKCk7XG5cdFx0XHRcdH0pXG5cdFx0KTtcblxuXHRcdGFTZXJ2aWNlRGVwZW5kZW5jaWVzLnB1c2goXG5cdFx0XHRTZXJ2aWNlRmFjdG9yeVJlZ2lzdHJ5LmdldChcInNhcC5mZS5jb3JlLnNlcnZpY2VzLkNhY2hlSGFuZGxlclNlcnZpY2VcIilcblx0XHRcdFx0LmNyZWF0ZUluc3RhbmNlKHtcblx0XHRcdFx0XHRzZXR0aW5nczoge1xuXHRcdFx0XHRcdFx0bWV0YU1vZGVsOiBvTWV0YU1vZGVsLFxuXHRcdFx0XHRcdFx0YXBwQ29tcG9uZW50OiBvQXBwQ29tcG9uZW50LFxuXHRcdFx0XHRcdFx0Y29tcG9uZW50OiBvQ29tcG9uZW50XG5cdFx0XHRcdFx0fVxuXHRcdFx0XHR9KVxuXHRcdFx0XHQudGhlbigob0NhY2hlSGFuZGxlclNlcnZpY2U6IGFueSkgPT4ge1xuXHRcdFx0XHRcdHRoaXMub0NhY2hlSGFuZGxlclNlcnZpY2UgPSBvQ2FjaGVIYW5kbGVyU2VydmljZTtcblx0XHRcdFx0XHRyZXR1cm4gb0NhY2hlSGFuZGxlclNlcnZpY2UudmFsaWRhdGVDYWNoZUtleShzQ2FjaGVJZGVudGlmaWVyKTtcblx0XHRcdFx0fSlcblx0XHQpO1xuXHRcdGFTZXJ2aWNlRGVwZW5kZW5jaWVzLnB1c2goXG5cdFx0XHQoVmVyc2lvbkluZm8gYXMgYW55KVxuXHRcdFx0XHQubG9hZCgpXG5cdFx0XHRcdC50aGVuKGZ1bmN0aW9uKG9JbmZvOiBhbnkpIHtcblx0XHRcdFx0XHRsZXQgc1RpbWVzdGFtcCA9IFwiXCI7XG5cdFx0XHRcdFx0aWYgKCFvSW5mby5saWJyYXJpZXMpIHtcblx0XHRcdFx0XHRcdHNUaW1lc3RhbXAgPSAoc2FwLnVpIGFzIGFueSkuYnVpbGRpbmZvLmJ1aWxkdGltZTtcblx0XHRcdFx0XHR9IGVsc2Uge1xuXHRcdFx0XHRcdFx0b0luZm8ubGlicmFyaWVzLmZvckVhY2goZnVuY3Rpb24ob0xpYnJhcnk6IGFueSkge1xuXHRcdFx0XHRcdFx0XHRzVGltZXN0YW1wICs9IG9MaWJyYXJ5LmJ1aWxkVGltZXN0YW1wO1xuXHRcdFx0XHRcdFx0fSk7XG5cdFx0XHRcdFx0fVxuXHRcdFx0XHRcdHJldHVybiBzVGltZXN0YW1wO1xuXHRcdFx0XHR9KVxuXHRcdFx0XHQuY2F0Y2goZnVuY3Rpb24oKSB7XG5cdFx0XHRcdFx0cmV0dXJuIFwiPE5PVkFMVUU+XCI7XG5cdFx0XHRcdH0pXG5cdFx0KTtcblxuXHRcdGxldCBzUGFnZU1vZGVsQ2FjaGVLZXk6IHN0cmluZyB8IHVuZGVmaW5lZDtcblx0XHR0aGlzLmluaXRQcm9taXNlID0gUHJvbWlzZS5hbGwoYVNlcnZpY2VEZXBlbmRlbmNpZXMpXG5cdFx0XHQudGhlbigoYURlcGVuZGVuY2llc1Jlc3VsdDogYW55W10pID0+IHtcblx0XHRcdFx0Y29uc3Qgc0NhY2hlS2V5ID0gYURlcGVuZGVuY2llc1Jlc3VsdFsxXTtcblx0XHRcdFx0Y29uc3Qgc1ZlcnNpb25JbmZvID0gYURlcGVuZGVuY2llc1Jlc3VsdFsyXTtcblx0XHRcdFx0Y29uc3Qgb1NoZWxsU2VydmljZXMgPSBvQXBwQ29tcG9uZW50LmdldFNoZWxsU2VydmljZXMoKTtcblx0XHRcdFx0Y29uc3Qgb1NpZGVFZmZlY3RzU2VydmljZXMgPSBvQXBwQ29tcG9uZW50LmdldFNpZGVFZmZlY3RzU2VydmljZSgpO1xuXG5cdFx0XHRcdG9TaWRlRWZmZWN0c1NlcnZpY2VzLmluaXRpYWxpemVTaWRlRWZmZWN0cyhvQXBwQ29tcG9uZW50LmdldEVudmlyb25tZW50Q2FwYWJpbGl0aWVzKCkuZ2V0Q2FwYWJpbGl0aWVzKCkpO1xuXG5cdFx0XHRcdC8vIEluIGNhc2UgdGhlcmUgaXMgbm8gY2FjaGUga2V5IHdlIGlnbm9yZSB0aGUgdmlldyBjYWNoZVxuXHRcdFx0XHRzUGFnZU1vZGVsQ2FjaGVLZXkgPSBzQ2FjaGVLZXlcblx0XHRcdFx0XHQ/IHNDYWNoZUtleSArIFwiLVwiICsgc1ZlcnNpb25JbmZvICsgXCItXCIgKyBzU3RhYmxlSWQgKyBcIi1cIiArIG9TaGVsbFNlcnZpY2VzLmluc3RhbmNlVHlwZSArIFwiLXBhZ2VNb2RlbFwiXG5cdFx0XHRcdFx0OiB1bmRlZmluZWQ7XG5cdFx0XHRcdHJldHVybiBQcm9taXNlLmFsbChhRGVwZW5kZW5jaWVzUmVzdWx0LmNvbmNhdChbdGhpcy5fZ2V0Q2FjaGVkTW9kZWwoc1BhZ2VNb2RlbENhY2hlS2V5KV0pKTtcblx0XHRcdH0pXG5cdFx0XHQudGhlbigoYURlcGVuZGVuY2llc1Jlc3VsdDogYW55W10pID0+IHtcblx0XHRcdFx0Y29uc3Qgb1Jlc291cmNlTW9kZWwgPSBhRGVwZW5kZW5jaWVzUmVzdWx0WzBdO1xuXHRcdFx0XHRjb25zdCBzQ2FjaGVLZXkgPSBhRGVwZW5kZW5jaWVzUmVzdWx0WzFdO1xuXHRcdFx0XHRjb25zdCBvUGFnZU1vZGVsQ2FjaGUgPSBhRGVwZW5kZW5jaWVzUmVzdWx0WzNdO1xuXHRcdFx0XHRyZXR1cm4gbmV3IFByb21pc2UocmVzb2x2ZSA9PiB7XG5cdFx0XHRcdFx0c2FwLnVpLnJlcXVpcmUoXG5cdFx0XHRcdFx0XHRbXCJzYXAvZmUvY29yZS9jb252ZXJ0ZXJzL1RlbXBsYXRlQ29udmVydGVyXCIsIFwic2FwL2ZlL2NvcmUvY29udmVydGVycy9NZXRhTW9kZWxDb252ZXJ0ZXJcIl0sXG5cdFx0XHRcdFx0XHQoVGVtcGxhdGVDb252ZXJ0ZXI6IGFueSwgTWV0YU1vZGVsQ29udmVydGVyOiBhbnkpID0+IHtcblx0XHRcdFx0XHRcdFx0cmVzb2x2ZShcblx0XHRcdFx0XHRcdFx0XHR0aGlzLmNyZWF0ZVZpZXcoXG5cdFx0XHRcdFx0XHRcdFx0XHRvUmVzb3VyY2VNb2RlbCxcblx0XHRcdFx0XHRcdFx0XHRcdHNTdGFibGVJZCxcblx0XHRcdFx0XHRcdFx0XHRcdHNDYWNoZUtleSxcblx0XHRcdFx0XHRcdFx0XHRcdHNQYWdlTW9kZWxDYWNoZUtleSxcblx0XHRcdFx0XHRcdFx0XHRcdG9QYWdlTW9kZWxDYWNoZSxcblx0XHRcdFx0XHRcdFx0XHRcdFRlbXBsYXRlQ29udmVydGVyLFxuXHRcdFx0XHRcdFx0XHRcdFx0TWV0YU1vZGVsQ29udmVydGVyXG5cdFx0XHRcdFx0XHRcdFx0KVxuXHRcdFx0XHRcdFx0XHQpO1xuXHRcdFx0XHRcdFx0fVxuXHRcdFx0XHRcdCk7XG5cdFx0XHRcdH0pO1xuXHRcdFx0fSlcblx0XHRcdC50aGVuKGZ1bmN0aW9uKHNDYWNoZUtleTogYW55KSB7XG5cdFx0XHRcdGNvbnN0IG9DYWNoZUhhbmRsZXJTZXJ2aWNlID0gU2VydmljZUZhY3RvcnlSZWdpc3RyeS5nZXQoXCJzYXAuZmUuY29yZS5zZXJ2aWNlcy5DYWNoZUhhbmRsZXJTZXJ2aWNlXCIpLmdldEluc3RhbmNlKG9NZXRhTW9kZWwpO1xuXHRcdFx0XHRvQ2FjaGVIYW5kbGVyU2VydmljZS5pbnZhbGlkYXRlSWZOZWVkZWQoc0NhY2hlS2V5LCBzQ2FjaGVJZGVudGlmaWVyKTtcblx0XHRcdH0pO1xuXHR9XG5cdF9nZXRDYWNoZWRNb2RlbChzQ2FjaGVLZXk6IHN0cmluZyB8IHVuZGVmaW5lZCkge1xuXHRcdGlmIChzQ2FjaGVLZXkgJiYgKENvcmUgYXMgQ29yZUV4KS5nZXRDb25maWd1cmF0aW9uKCkuZ2V0Vmlld0NhY2hlKCkpIHtcblx0XHRcdHJldHVybiBDYWNoZU1hbmFnZXIuZ2V0KHNDYWNoZUtleSk7XG5cdFx0fVxuXHRcdHJldHVybiB1bmRlZmluZWQ7XG5cdH1cblx0X3NldENhY2hlZE1vZGVsKHNDYWNoZUtleTogc3RyaW5nIHwgdW5kZWZpbmVkLCBvQ2FjaGVNb2RlbDogYW55KSB7XG5cdFx0aWYgKHNDYWNoZUtleSAmJiAoQ29yZSBhcyBDb3JlRXgpLmdldENvbmZpZ3VyYXRpb24oKS5nZXRWaWV3Q2FjaGUoKSkge1xuXHRcdFx0Q2FjaGVNYW5hZ2VyLnNldChzQ2FjaGVLZXksIG9DYWNoZU1vZGVsKTtcblx0XHR9XG5cdFx0cmV0dXJuIHVuZGVmaW5lZDtcblx0fVxuXHQvKipcblx0ICogUmVmcmVzaCB0aGUgY3VycmVudCB2aWV3IHVzaW5nIHRoZSBzYW1lIGNvbmZpZ3VyYXRpb24gYXMgYmVmb3JlLlxuXHQgKiBUaGlzIGlzIHVzZWZ1bCBmb3Igb3VyIGRlbW9raXQgIVxuXHQgKlxuXHQgKiBAcGFyYW0gb0NvbXBvbmVudFxuXHQgKiBAcmV0dXJucyB7UHJvbWlzZTx2b2lkPn1cblx0ICogQHByaXZhdGVcblx0ICovXG5cdHJlZnJlc2hWaWV3KG9Db21wb25lbnQ6IGFueSkge1xuXHRcdGNvbnN0IG9Sb290VmlldyA9IG9Db21wb25lbnQuZ2V0Um9vdENvbnRyb2woKTtcblx0XHRpZiAob1Jvb3RWaWV3KSB7XG5cdFx0XHRvUm9vdFZpZXcuZGVzdHJveSgpO1xuXHRcdH0gZWxzZSBpZiAodGhpcy5vVmlldykge1xuXHRcdFx0dGhpcy5vVmlldy5kZXN0cm95KCk7XG5cdFx0fVxuXHRcdHJldHVybiB0aGlzLmNyZWF0ZVZpZXcodGhpcy5yZXNvdXJjZU1vZGVsLCB0aGlzLnN0YWJsZUlkLCBcIlwiLCBcIlwiLCB1bmRlZmluZWQsIHRoaXMuVGVtcGxhdGVDb252ZXJ0ZXIsIHRoaXMuTWV0YU1vZGVsQ29udmVydGVyKVxuXHRcdFx0LnRoZW4oZnVuY3Rpb24oKSB7XG5cdFx0XHRcdG9Db21wb25lbnQub0NvbnRhaW5lci5pbnZhbGlkYXRlKCk7XG5cdFx0XHR9KVxuXHRcdFx0LmNhdGNoKGZ1bmN0aW9uKG9FcnJvcjogYW55KSB7XG5cdFx0XHRcdG9Db21wb25lbnQub0NvbnRhaW5lci5pbnZhbGlkYXRlKCk7XG5cdFx0XHRcdExvZy5lcnJvcihvRXJyb3IpO1xuXHRcdFx0fSk7XG5cdH1cblx0Y3JlYXRlVmlldyhcblx0XHRvUmVzb3VyY2VNb2RlbDogYW55LFxuXHRcdHNTdGFibGVJZDogYW55LFxuXHRcdHNDYWNoZUtleTogYW55LFxuXHRcdHNQYWdlTW9kZWxDYWNoZUtleTogc3RyaW5nIHwgdW5kZWZpbmVkLFxuXHRcdG9QYWdlTW9kZWxDYWNoZTogYW55LFxuXHRcdFRlbXBsYXRlQ29udmVydGVyOiBhbnksXG5cdFx0TWV0YU1vZGVsQ29udmVydGVyOiBhbnlcblx0KSB7XG5cdFx0dGhpcy5yZXNvdXJjZU1vZGVsID0gb1Jlc291cmNlTW9kZWw7XG5cdFx0dGhpcy5zdGFibGVJZCA9IHNTdGFibGVJZDtcblx0XHR0aGlzLlRlbXBsYXRlQ29udmVydGVyID0gVGVtcGxhdGVDb252ZXJ0ZXI7XG5cdFx0dGhpcy5NZXRhTW9kZWxDb252ZXJ0ZXIgPSBNZXRhTW9kZWxDb252ZXJ0ZXI7XG5cdFx0Y29uc3Qgb0NvbnRleHQgPSB0aGlzLmdldENvbnRleHQoKTtcblx0XHRjb25zdCBtU2VydmljZVNldHRpbmdzID0gb0NvbnRleHQuc2V0dGluZ3M7XG5cdFx0Y29uc3Qgc0NvbnZlcnRlclR5cGUgPSBtU2VydmljZVNldHRpbmdzLmNvbnZlcnRlclR5cGU7XG5cdFx0Y29uc3Qgb0NvbXBvbmVudCA9IG9Db250ZXh0LnNjb3BlT2JqZWN0O1xuXHRcdGNvbnN0IG9BcHBDb21wb25lbnQ6IEFwcENvbXBvbmVudCA9IENvbXBvbmVudC5nZXRPd25lckNvbXBvbmVudEZvcihvQ29tcG9uZW50KSBhcyBBcHBDb21wb25lbnQ7XG5cdFx0Y29uc3Qgc0Z1bGxDb250ZXh0UGF0aCA9IG9BcHBDb21wb25lbnQuZ2V0Um91dGluZ1NlcnZpY2UoKS5nZXRUYXJnZXRJbmZvcm1hdGlvbkZvcihvQ29tcG9uZW50KS5vcHRpb25zLnNldHRpbmdzLmZ1bGxDb250ZXh0UGF0aDtcblx0XHRjb25zdCBvTWV0YU1vZGVsID0gb0FwcENvbXBvbmVudC5nZXRNZXRhTW9kZWwoKTtcblx0XHRjb25zdCBvTWFuaWZlc3RDb250ZW50OiBhbnkgPSBvQXBwQ29tcG9uZW50LmdldE1hbmlmZXN0KCk7XG5cdFx0Y29uc3Qgb0RldmljZU1vZGVsID0gbmV3IEpTT05Nb2RlbChEZXZpY2UpLnNldERlZmF1bHRCaW5kaW5nTW9kZShcIk9uZVdheVwiKTtcblx0XHRjb25zdCBvTWFuaWZlc3RNb2RlbCA9IG5ldyBKU09OTW9kZWwob01hbmlmZXN0Q29udGVudCk7XG5cdFx0Y29uc3QgYkVycm9yID0gZmFsc2U7XG5cdFx0bGV0IG9QYWdlTW9kZWw6IFRlbXBsYXRlTW9kZWwsIG9WaWV3RGF0YU1vZGVsOiBNb2RlbCwgb1ZpZXdTZXR0aW5nczogYW55LCBtVmlld0RhdGE6IGFueTtcblxuXHRcdGZ1bmN0aW9uIGdldFZpZXdTZXR0aW5ncygpIHtcblx0XHRcdGNvbnN0IGFTcGxpdFBhdGggPSBzRnVsbENvbnRleHRQYXRoLnNwbGl0KFwiL1wiKTtcblx0XHRcdGNvbnN0IHNFbnRpdHlTZXRQYXRoID0gYVNwbGl0UGF0aC5yZWR1Y2UoZnVuY3Rpb24oc1BhdGhTb0ZhcjogYW55LCBzTmV4dFBhdGhQYXJ0OiBhbnkpIHtcblx0XHRcdFx0aWYgKHNOZXh0UGF0aFBhcnQgPT09IFwiXCIpIHtcblx0XHRcdFx0XHRyZXR1cm4gc1BhdGhTb0Zhcjtcblx0XHRcdFx0fVxuXHRcdFx0XHRpZiAoc1BhdGhTb0ZhciA9PT0gXCJcIikge1xuXHRcdFx0XHRcdHNQYXRoU29GYXIgPSBcIi9cIiArIHNOZXh0UGF0aFBhcnQ7XG5cdFx0XHRcdH0gZWxzZSB7XG5cdFx0XHRcdFx0Y29uc3Qgb1RhcmdldCA9IG9NZXRhTW9kZWwuZ2V0T2JqZWN0KHNQYXRoU29GYXIgKyBcIi8kTmF2aWdhdGlvblByb3BlcnR5QmluZGluZy9cIiArIHNOZXh0UGF0aFBhcnQpO1xuXHRcdFx0XHRcdGlmIChvVGFyZ2V0ICYmIE9iamVjdC5rZXlzKG9UYXJnZXQpLmxlbmd0aCA+IDApIHtcblx0XHRcdFx0XHRcdHNQYXRoU29GYXIgKz0gXCIvJE5hdmlnYXRpb25Qcm9wZXJ0eUJpbmRpbmdcIjtcblx0XHRcdFx0XHR9XG5cdFx0XHRcdFx0c1BhdGhTb0ZhciArPSBcIi9cIiArIHNOZXh0UGF0aFBhcnQ7XG5cdFx0XHRcdH1cblx0XHRcdFx0cmV0dXJuIHNQYXRoU29GYXI7XG5cdFx0XHR9LCBcIlwiKTtcblx0XHRcdGNvbnN0IG9WaWV3U2V0dGluZ3MgPSB7XG5cdFx0XHRcdHR5cGU6IFwiWE1MXCIsXG5cdFx0XHRcdHByZXByb2Nlc3NvcnM6IHtcblx0XHRcdFx0XHR4bWw6IHtcblx0XHRcdFx0XHRcdGJpbmRpbmdDb250ZXh0czoge1xuXHRcdFx0XHRcdFx0XHRlbnRpdHlTZXQ6IHNFbnRpdHlTZXRQYXRoID8gb01ldGFNb2RlbC5jcmVhdGVCaW5kaW5nQ29udGV4dChzRW50aXR5U2V0UGF0aCkgOiBudWxsLFxuXHRcdFx0XHRcdFx0XHRmdWxsQ29udGV4dFBhdGg6IHNGdWxsQ29udGV4dFBhdGggPyBvTWV0YU1vZGVsLmNyZWF0ZUJpbmRpbmdDb250ZXh0KHNGdWxsQ29udGV4dFBhdGgpIDogbnVsbCxcblx0XHRcdFx0XHRcdFx0Y29udGV4dFBhdGg6IHNGdWxsQ29udGV4dFBhdGggPyBvTWV0YU1vZGVsLmNyZWF0ZUJpbmRpbmdDb250ZXh0KHNGdWxsQ29udGV4dFBhdGgpIDogbnVsbCxcblx0XHRcdFx0XHRcdFx0Y29udmVydGVyQ29udGV4dDogb1BhZ2VNb2RlbC5jcmVhdGVCaW5kaW5nQ29udGV4dChcIi9cIiwgdW5kZWZpbmVkLCB7IG5vUmVzb2x2ZTogdHJ1ZSB9KSxcblx0XHRcdFx0XHRcdFx0dmlld0RhdGE6IG1WaWV3RGF0YSA/IG9WaWV3RGF0YU1vZGVsLmNyZWF0ZUJpbmRpbmdDb250ZXh0KFwiL1wiKSA6IG51bGxcblx0XHRcdFx0XHRcdH0sXG5cdFx0XHRcdFx0XHRtb2RlbHM6IHtcblx0XHRcdFx0XHRcdFx0ZW50aXR5U2V0OiBvTWV0YU1vZGVsLFxuXHRcdFx0XHRcdFx0XHRmdWxsQ29udGV4dFBhdGg6IG9NZXRhTW9kZWwsXG5cdFx0XHRcdFx0XHRcdGNvbnRleHRQYXRoOiBvTWV0YU1vZGVsLFxuXHRcdFx0XHRcdFx0XHRcInNhcC5mZS5pMThuXCI6IG9SZXNvdXJjZU1vZGVsLFxuXHRcdFx0XHRcdFx0XHRtZXRhTW9kZWw6IG9NZXRhTW9kZWwsXG5cdFx0XHRcdFx0XHRcdFwiZGV2aWNlXCI6IG9EZXZpY2VNb2RlbCwgLy8gVE9ETzogZGlzY3VzcyBuYW1lcyBoZXJlXG5cdFx0XHRcdFx0XHRcdG1hbmlmZXN0OiBvTWFuaWZlc3RNb2RlbCxcblx0XHRcdFx0XHRcdFx0Y29udmVydGVyQ29udGV4dDogb1BhZ2VNb2RlbCxcblx0XHRcdFx0XHRcdFx0dmlld0RhdGE6IG9WaWV3RGF0YU1vZGVsXG5cdFx0XHRcdFx0XHR9LFxuXHRcdFx0XHRcdFx0YXBwQ29tcG9uZW50OiBvQXBwQ29tcG9uZW50XG5cdFx0XHRcdFx0fVxuXHRcdFx0XHR9LFxuXHRcdFx0XHRpZDogc1N0YWJsZUlkLFxuXHRcdFx0XHR2aWV3TmFtZTogbVNlcnZpY2VTZXR0aW5ncy52aWV3TmFtZSB8fCBvQ29tcG9uZW50LmdldFZpZXdOYW1lKCksXG5cdFx0XHRcdHZpZXdEYXRhOiBtVmlld0RhdGEsXG5cdFx0XHRcdGNhY2hlOiB7IGtleXM6IFtzQ2FjaGVLZXldIH0sXG5cdFx0XHRcdG1vZGVsczoge1xuXHRcdFx0XHRcdFwic2FwLmZlLmkxOG5cIjogb1Jlc291cmNlTW9kZWxcblx0XHRcdFx0fSxcblx0XHRcdFx0aGVpZ2h0OiBcIjEwMCVcIlxuXHRcdFx0fTtcblx0XHRcdHJldHVybiBvVmlld1NldHRpbmdzO1xuXHRcdH1cblx0XHRjb25zdCBjcmVhdGVFcnJvclBhZ2UgPSAocmVhc29uOiBhbnkpID0+IHtcblx0XHRcdC8vIGp1c3QgcmVwbGFjZSB0aGUgdmlldyBuYW1lIGFuZCBhZGQgYW4gYWRkaXRpb25hbCBtb2RlbCBjb250YWluaW5nIHRoZSByZWFzb24sIGJ1dFxuXHRcdFx0Ly8ga2VlcCB0aGUgb3RoZXIgc2V0dGluZ3Ncblx0XHRcdExvZy5lcnJvcihyZWFzb24ubWVzc2FnZSwgcmVhc29uKTtcblx0XHRcdG9WaWV3U2V0dGluZ3Mudmlld05hbWUgPSBtU2VydmljZVNldHRpbmdzLmVycm9yVmlld05hbWUgfHwgXCJzYXAuZmUuY29yZS5zZXJ2aWNlcy52aWV3LlRlbXBsYXRpbmdFcnJvclBhZ2VcIjtcblx0XHRcdG9WaWV3U2V0dGluZ3MucHJlcHJvY2Vzc29ycy54bWwubW9kZWxzW1wiZXJyb3JcIl0gPSBuZXcgSlNPTk1vZGVsKHJlYXNvbik7XG5cblx0XHRcdHJldHVybiBvQ29tcG9uZW50LnJ1bkFzT3duZXIoKCkgPT4ge1xuXHRcdFx0XHRyZXR1cm4gVmlldy5jcmVhdGUob1ZpZXdTZXR0aW5ncykudGhlbigob1ZpZXc6IGFueSkgPT4ge1xuXHRcdFx0XHRcdHRoaXMub1ZpZXcgPSBvVmlldztcblx0XHRcdFx0XHR0aGlzLm9WaWV3LnNldE1vZGVsKG5ldyBNYW5hZ2VkT2JqZWN0TW9kZWwodGhpcy5vVmlldyksIFwiJHZpZXdcIik7XG5cdFx0XHRcdFx0b0NvbXBvbmVudC5zZXRBZ2dyZWdhdGlvbihcInJvb3RDb250cm9sXCIsIHRoaXMub1ZpZXcpO1xuXHRcdFx0XHRcdHJldHVybiBzQ2FjaGVLZXk7XG5cdFx0XHRcdH0pO1xuXHRcdFx0fSk7XG5cdFx0fTtcblx0XHRyZXR1cm4gb0FwcENvbXBvbmVudFxuXHRcdFx0LmdldFNlcnZpY2UoXCJyb3V0aW5nU2VydmljZVwiKVxuXHRcdFx0LnRoZW4oKG9Sb3V0aW5nU2VydmljZTogYW55KSA9PiB7XG5cdFx0XHRcdC8vIFJldHJpZXZlIHRoZSB2aWV3TGV2ZWwgZm9yIHRoZSBjb21wb25lbnRcblx0XHRcdFx0Y29uc3Qgb1RhcmdldEluZm8gPSBvUm91dGluZ1NlcnZpY2UuZ2V0VGFyZ2V0SW5mb3JtYXRpb25Gb3Iob0NvbXBvbmVudCk7XG5cdFx0XHRcdGNvbnN0IG1PdXRib3VuZHMgPVxuXHRcdFx0XHRcdG9NYW5pZmVzdENvbnRlbnRbXCJzYXAuYXBwXCJdICYmXG5cdFx0XHRcdFx0b01hbmlmZXN0Q29udGVudFtcInNhcC5hcHBcIl0uY3Jvc3NOYXZpZ2F0aW9uICYmXG5cdFx0XHRcdFx0b01hbmlmZXN0Q29udGVudFtcInNhcC5hcHBcIl0uY3Jvc3NOYXZpZ2F0aW9uLm91dGJvdW5kcztcblx0XHRcdFx0Y29uc3QgbU5hdmlnYXRpb24gPSBvQ29tcG9uZW50LmdldE5hdmlnYXRpb24oKSB8fCB7fTtcblx0XHRcdFx0T2JqZWN0LmtleXMobU5hdmlnYXRpb24pLmZvckVhY2goZnVuY3Rpb24obmF2aWdhdGlvbk9iamVjdEtleTogc3RyaW5nKSB7XG5cdFx0XHRcdFx0Y29uc3QgbmF2aWdhdGlvbk9iamVjdCA9IG1OYXZpZ2F0aW9uW25hdmlnYXRpb25PYmplY3RLZXldO1xuXHRcdFx0XHRcdGxldCBvdXRib3VuZENvbmZpZztcblx0XHRcdFx0XHRpZiAobmF2aWdhdGlvbk9iamVjdC5kZXRhaWwgJiYgbmF2aWdhdGlvbk9iamVjdC5kZXRhaWwub3V0Ym91bmQgJiYgbU91dGJvdW5kc1tuYXZpZ2F0aW9uT2JqZWN0LmRldGFpbC5vdXRib3VuZF0pIHtcblx0XHRcdFx0XHRcdG91dGJvdW5kQ29uZmlnID0gbU91dGJvdW5kc1tuYXZpZ2F0aW9uT2JqZWN0LmRldGFpbC5vdXRib3VuZF07XG5cdFx0XHRcdFx0XHRuYXZpZ2F0aW9uT2JqZWN0LmRldGFpbC5vdXRib3VuZERldGFpbCA9IHtcblx0XHRcdFx0XHRcdFx0c2VtYW50aWNPYmplY3Q6IG91dGJvdW5kQ29uZmlnLnNlbWFudGljT2JqZWN0LFxuXHRcdFx0XHRcdFx0XHRhY3Rpb246IG91dGJvdW5kQ29uZmlnLmFjdGlvbixcblx0XHRcdFx0XHRcdFx0cGFyYW1ldGVyczogb3V0Ym91bmRDb25maWcucGFyYW1ldGVyc1xuXHRcdFx0XHRcdFx0fTtcblx0XHRcdFx0XHR9XG5cdFx0XHRcdFx0aWYgKG5hdmlnYXRpb25PYmplY3QuY3JlYXRlICYmIG5hdmlnYXRpb25PYmplY3QuY3JlYXRlLm91dGJvdW5kICYmIG1PdXRib3VuZHNbbmF2aWdhdGlvbk9iamVjdC5jcmVhdGUub3V0Ym91bmRdKSB7XG5cdFx0XHRcdFx0XHRvdXRib3VuZENvbmZpZyA9IG1PdXRib3VuZHNbbmF2aWdhdGlvbk9iamVjdC5jcmVhdGUub3V0Ym91bmRdO1xuXHRcdFx0XHRcdFx0bmF2aWdhdGlvbk9iamVjdC5jcmVhdGUub3V0Ym91bmREZXRhaWwgPSB7XG5cdFx0XHRcdFx0XHRcdHNlbWFudGljT2JqZWN0OiBvdXRib3VuZENvbmZpZy5zZW1hbnRpY09iamVjdCxcblx0XHRcdFx0XHRcdFx0YWN0aW9uOiBvdXRib3VuZENvbmZpZy5hY3Rpb24sXG5cdFx0XHRcdFx0XHRcdHBhcmFtZXRlcnM6IG91dGJvdW5kQ29uZmlnLnBhcmFtZXRlcnNcblx0XHRcdFx0XHRcdH07XG5cdFx0XHRcdFx0fVxuXHRcdFx0XHR9KTtcblx0XHRcdFx0bVZpZXdEYXRhID0ge1xuXHRcdFx0XHRcdG5hdmlnYXRpb246IG1OYXZpZ2F0aW9uLFxuXHRcdFx0XHRcdHZpZXdMZXZlbDogb1RhcmdldEluZm8udmlld0xldmVsLFxuXHRcdFx0XHRcdHN0YWJsZUlkOiBzU3RhYmxlSWQsXG5cdFx0XHRcdFx0Y29udGVudERlbnNpdGllczogb01hbmlmZXN0Q29udGVudFtcInNhcC51aTVcIl0uY29udGVudERlbnNpdGllcyxcblx0XHRcdFx0XHRyZXNvdXJjZUJ1bmRsZTogb1Jlc291cmNlTW9kZWwuX19idW5kbGUsXG5cdFx0XHRcdFx0ZnVsbENvbnRleHRQYXRoOiBzRnVsbENvbnRleHRQYXRoLFxuXHRcdFx0XHRcdGlzRGVza3RvcDogKERldmljZSBhcyBhbnkpLnN5c3RlbS5kZXNrdG9wLFxuXHRcdFx0XHRcdGlzUGhvbmU6IChEZXZpY2UgYXMgYW55KS5zeXN0ZW0ucGhvbmVcblx0XHRcdFx0fTtcblxuXHRcdFx0XHRpZiAob0NvbXBvbmVudC5nZXRWaWV3RGF0YSkge1xuXHRcdFx0XHRcdE9iamVjdC5hc3NpZ24obVZpZXdEYXRhLCBvQ29tcG9uZW50LmdldFZpZXdEYXRhKCkpO1xuXHRcdFx0XHR9XG5cblx0XHRcdFx0Y29uc3Qgb1NoZWxsU2VydmljZXMgPSBvQXBwQ29tcG9uZW50LmdldFNoZWxsU2VydmljZXMoKTtcblx0XHRcdFx0bVZpZXdEYXRhLmNvbnZlcnRlclR5cGUgPSBzQ29udmVydGVyVHlwZTtcblx0XHRcdFx0bVZpZXdEYXRhLnNoZWxsQ29udGVudERlbnNpdHkgPSBvU2hlbGxTZXJ2aWNlcy5nZXRDb250ZW50RGVuc2l0eSgpO1xuXHRcdFx0XHRtVmlld0RhdGEudXNlTmV3TGF6eUxvYWRpbmcgPSBVcmlQYXJhbWV0ZXJzLmZyb21RdWVyeSh3aW5kb3cubG9jYXRpb24uc2VhcmNoKS5nZXQoXCJzYXAtZmUteHgtbGF6eWxvYWRpbmd0ZXN0XCIpID09PSBcInRydWVcIjtcblx0XHRcdFx0bVZpZXdEYXRhLnJldHJpZXZlVGV4dEZyb21WYWx1ZUxpc3QgPVxuXHRcdFx0XHRcdG9NYW5pZmVzdENvbnRlbnRbXCJzYXAuZmVcIl0gJiYgb01hbmlmZXN0Q29udGVudFtcInNhcC5mZVwiXS5mb3JtXG5cdFx0XHRcdFx0XHQ/IG9NYW5pZmVzdENvbnRlbnRbXCJzYXAuZmVcIl0uZm9ybS5yZXRyaWV2ZVRleHRGcm9tVmFsdWVMaXN0XG5cdFx0XHRcdFx0XHQ6IHVuZGVmaW5lZDtcblx0XHRcdFx0b1ZpZXdEYXRhTW9kZWwgPSBuZXcgSlNPTk1vZGVsKG1WaWV3RGF0YSk7XG5cdFx0XHRcdGlmIChtVmlld0RhdGEgJiYgbVZpZXdEYXRhLmNvbnRyb2xDb25maWd1cmF0aW9uKSB7XG5cdFx0XHRcdFx0T2JqZWN0LmtleXMobVZpZXdEYXRhLmNvbnRyb2xDb25maWd1cmF0aW9uKS5mb3JFYWNoKGZ1bmN0aW9uKHNBbm5vdGF0aW9uUGF0aDogc3RyaW5nKSB7XG5cdFx0XHRcdFx0XHRpZiAoc0Fubm90YXRpb25QYXRoLmluZGV4T2YoXCJbXCIpICE9PSAtMSkge1xuXHRcdFx0XHRcdFx0XHRjb25zdCBzVGFyZ2V0QW5ub3RhdGlvblBhdGggPSByZXNvbHZlRHluYW1pY0V4cHJlc3Npb24oc0Fubm90YXRpb25QYXRoLCBvTWV0YU1vZGVsKTtcblx0XHRcdFx0XHRcdFx0bVZpZXdEYXRhLmNvbnRyb2xDb25maWd1cmF0aW9uW3NUYXJnZXRBbm5vdGF0aW9uUGF0aF0gPSBtVmlld0RhdGEuY29udHJvbENvbmZpZ3VyYXRpb25bc0Fubm90YXRpb25QYXRoXTtcblx0XHRcdFx0XHRcdH1cblx0XHRcdFx0XHR9KTtcblx0XHRcdFx0fVxuXHRcdFx0XHRNZXRhTW9kZWxDb252ZXJ0ZXIuY29udmVydFR5cGVzKG9NZXRhTW9kZWwsIG9BcHBDb21wb25lbnQuZ2V0RW52aXJvbm1lbnRDYXBhYmlsaXRpZXMoKS5nZXRDYXBhYmlsaXRpZXMoKSk7XG5cdFx0XHRcdG9QYWdlTW9kZWwgPSBuZXcgVGVtcGxhdGVNb2RlbCgoKSA9PiB7XG5cdFx0XHRcdFx0dHJ5IHtcblx0XHRcdFx0XHRcdGlmICghIW9QYWdlTW9kZWxDYWNoZSkge1xuXHRcdFx0XHRcdFx0XHRyZXR1cm4gb1BhZ2VNb2RlbENhY2hlO1xuXHRcdFx0XHRcdFx0fSBlbHNlIHtcblx0XHRcdFx0XHRcdFx0Y29uc3Qgb0RpYWdub3N0aWNzID0gb0FwcENvbXBvbmVudC5nZXREaWFnbm9zdGljcygpO1xuXHRcdFx0XHRcdFx0XHRjb25zdCBpSXNzdWVDb3VudCA9IG9EaWFnbm9zdGljcy5nZXRJc3N1ZXMoKS5sZW5ndGg7XG5cdFx0XHRcdFx0XHRcdGNvbnN0IG9Db252ZXJ0ZXJQYWdlTW9kZWwgPSBUZW1wbGF0ZUNvbnZlcnRlci5jb252ZXJ0UGFnZShcblx0XHRcdFx0XHRcdFx0XHRzQ29udmVydGVyVHlwZSxcblx0XHRcdFx0XHRcdFx0XHRvTWV0YU1vZGVsLFxuXHRcdFx0XHRcdFx0XHRcdG1WaWV3RGF0YSxcblx0XHRcdFx0XHRcdFx0XHRvRGlhZ25vc3RpY3MsXG5cdFx0XHRcdFx0XHRcdFx0c0Z1bGxDb250ZXh0UGF0aCxcblx0XHRcdFx0XHRcdFx0XHRvQXBwQ29tcG9uZW50LmdldEVudmlyb25tZW50Q2FwYWJpbGl0aWVzKCkuZ2V0Q2FwYWJpbGl0aWVzKClcblx0XHRcdFx0XHRcdFx0KTtcblxuXHRcdFx0XHRcdFx0XHRjb25zdCBhSXNzdWVzID0gb0RpYWdub3N0aWNzLmdldElzc3VlcygpO1xuXHRcdFx0XHRcdFx0XHRjb25zdCBhQWRkZWRJc3N1ZXMgPSBhSXNzdWVzLnNsaWNlKGlJc3N1ZUNvdW50KTtcblx0XHRcdFx0XHRcdFx0aWYgKGFBZGRlZElzc3Vlcy5sZW5ndGggPiAwKSB7XG5cdFx0XHRcdFx0XHRcdFx0TG9nLndhcm5pbmcoXG5cdFx0XHRcdFx0XHRcdFx0XHRcIlNvbWUgaXNzdWVzIGhhdmUgYmVlbiBkZXRlY3RlZCBpbiB5b3VyIHByb2plY3QsIHBsZWFzZSBjaGVjayB0aGUgVUk1IHN1cHBvcnQgYXNzaXN0YW50IHJ1bGUgZm9yIHNhcC5mZS5jb3JlXCJcblx0XHRcdFx0XHRcdFx0XHQpO1xuXHRcdFx0XHRcdFx0XHR9XG5cdFx0XHRcdFx0XHRcdHJldHVybiBvQ29udmVydGVyUGFnZU1vZGVsO1xuXHRcdFx0XHRcdFx0fVxuXHRcdFx0XHRcdH0gY2F0Y2ggKGVycm9yKSB7XG5cdFx0XHRcdFx0XHRMb2cuZXJyb3IoZXJyb3IgYXMgYW55LCBlcnJvciBhcyBhbnkpO1xuXHRcdFx0XHRcdFx0cmV0dXJuIHt9O1xuXHRcdFx0XHRcdH1cblx0XHRcdFx0fSwgb01ldGFNb2RlbCk7XG5cblx0XHRcdFx0aWYgKCFiRXJyb3IpIHtcblx0XHRcdFx0XHRvVmlld1NldHRpbmdzID0gZ2V0Vmlld1NldHRpbmdzKCk7XG5cdFx0XHRcdFx0Ly8gU2V0dGluZyB0aGUgcGFnZU1vZGVsIG9uIHRoZSBjb21wb25lbnQgZm9yIHBvdGVudGlhbCByZXVzZVxuXHRcdFx0XHRcdG9Db21wb25lbnQuc2V0TW9kZWwob1BhZ2VNb2RlbCwgXCJfcGFnZU1vZGVsXCIpO1xuXHRcdFx0XHRcdHJldHVybiBvQ29tcG9uZW50LnJ1bkFzT3duZXIoKCkgPT4ge1xuXHRcdFx0XHRcdFx0cmV0dXJuIFZpZXcuY3JlYXRlKG9WaWV3U2V0dGluZ3MpXG5cdFx0XHRcdFx0XHRcdC5jYXRjaChjcmVhdGVFcnJvclBhZ2UpXG5cdFx0XHRcdFx0XHRcdC50aGVuKChvVmlldzogYW55KSA9PiB7XG5cdFx0XHRcdFx0XHRcdFx0dGhpcy5vVmlldyA9IG9WaWV3O1xuXHRcdFx0XHRcdFx0XHRcdHRoaXMub1ZpZXcuc2V0TW9kZWwobmV3IE1hbmFnZWRPYmplY3RNb2RlbCh0aGlzLm9WaWV3KSwgXCIkdmlld1wiKTtcblx0XHRcdFx0XHRcdFx0XHR0aGlzLm9WaWV3LnNldE1vZGVsKG9WaWV3RGF0YU1vZGVsLCBcInZpZXdEYXRhXCIpO1xuXHRcdFx0XHRcdFx0XHRcdG9Db21wb25lbnQuc2V0QWdncmVnYXRpb24oXCJyb290Q29udHJvbFwiLCB0aGlzLm9WaWV3KTtcblx0XHRcdFx0XHRcdFx0XHQvLyBGaXJlIGFuZCBmb3JnZXQgaW4gdGhlIGNhY2hlXG5cdFx0XHRcdFx0XHRcdFx0aWYgKCFvUGFnZU1vZGVsQ2FjaGUpIHtcblx0XHRcdFx0XHRcdFx0XHRcdHRoaXMuX3NldENhY2hlZE1vZGVsKHNQYWdlTW9kZWxDYWNoZUtleSwgKG9QYWdlTW9kZWwgYXMgYW55KS5nZXREYXRhKCkpO1xuXHRcdFx0XHRcdFx0XHRcdH1cblx0XHRcdFx0XHRcdFx0XHRyZXR1cm4gc0NhY2hlS2V5O1xuXHRcdFx0XHRcdFx0XHR9KVxuXHRcdFx0XHRcdFx0XHQuY2F0Y2goZSA9PiBMb2cuZXJyb3IoZS5tZXNzYWdlLCBlKSk7XG5cdFx0XHRcdFx0fSk7XG5cdFx0XHRcdH1cblx0XHRcdH0pXG5cdFx0XHQuY2F0Y2goZnVuY3Rpb24oZXJyb3I6IGFueSkge1xuXHRcdFx0XHRMb2cuZXJyb3IoZXJyb3IubWVzc2FnZSwgZXJyb3IpO1xuXHRcdFx0XHR0aHJvdyBuZXcgRXJyb3IoXCJFcnJvciB3aGlsZSBjcmVhdGluZyB2aWV3IDogXCIgKyBlcnJvcik7XG5cdFx0XHR9KTtcblx0fVxuXHRnZXRWaWV3KCkge1xuXHRcdHJldHVybiB0aGlzLm9WaWV3O1xuXHR9XG5cdGdldEludGVyZmFjZSgpOiBhbnkge1xuXHRcdHJldHVybiB0aGlzO1xuXHR9XG5cdGV4aXQoKSB7XG5cdFx0Ly8gRGVyZWdpc3RlciBnbG9iYWwgaW5zdGFuY2Vcblx0XHR0aGlzLm9SZXNvdXJjZU1vZGVsU2VydmljZSAmJiB0aGlzLm9SZXNvdXJjZU1vZGVsU2VydmljZS5kZXN0cm95KCk7XG5cdFx0dGhpcy5vQ2FjaGVIYW5kbGVyU2VydmljZSAmJiB0aGlzLm9DYWNoZUhhbmRsZXJTZXJ2aWNlLmRlc3Ryb3koKTtcblx0XHR0aGlzLm9GYWN0b3J5LnJlbW92ZUdsb2JhbEluc3RhbmNlKCk7XG5cdH1cbn1cbmNsYXNzIFRlbXBsYXRlZFZpZXdTZXJ2aWNlRmFjdG9yeSBleHRlbmRzIFNlcnZpY2VGYWN0b3J5PFRlbXBsYXRlZFZpZXdTZXJ2aWNlU2V0dGluZ3M+IHtcblx0X29JbnN0YW5jZVJlZ2lzdHJ5OiBSZWNvcmQ8c3RyaW5nLCBUZW1wbGF0ZWRWaWV3U2VydmljZT4gPSB7fTtcblx0c3RhdGljIGlDcmVhdGluZ1ZpZXdzOiAwO1xuXHRjcmVhdGVJbnN0YW5jZShvU2VydmljZUNvbnRleHQ6IFNlcnZpY2VDb250ZXh0PFRlbXBsYXRlZFZpZXdTZXJ2aWNlU2V0dGluZ3M+KSB7XG5cdFx0VGVtcGxhdGVkVmlld1NlcnZpY2VGYWN0b3J5LmlDcmVhdGluZ1ZpZXdzKys7XG5cblx0XHRjb25zdCBvVGVtcGxhdGVkVmlld1NlcnZpY2UgPSBuZXcgVGVtcGxhdGVkVmlld1NlcnZpY2UoT2JqZWN0LmFzc2lnbih7IGZhY3Rvcnk6IHRoaXMgfSwgb1NlcnZpY2VDb250ZXh0KSk7XG5cdFx0cmV0dXJuIG9UZW1wbGF0ZWRWaWV3U2VydmljZS5pbml0UHJvbWlzZS50aGVuKGZ1bmN0aW9uKCkge1xuXHRcdFx0VGVtcGxhdGVkVmlld1NlcnZpY2VGYWN0b3J5LmlDcmVhdGluZ1ZpZXdzLS07XG5cdFx0XHRyZXR1cm4gb1RlbXBsYXRlZFZpZXdTZXJ2aWNlO1xuXHRcdH0pO1xuXHR9XG5cdHJlbW92ZUdsb2JhbEluc3RhbmNlKCkge1xuXHRcdHRoaXMuX29JbnN0YW5jZVJlZ2lzdHJ5ID0ge307XG5cdH1cblx0c3RhdGljIGdldE51bWJlck9mVmlld3NJbkNyZWF0aW9uU3RhdGUoKSB7XG5cdFx0cmV0dXJuIFRlbXBsYXRlZFZpZXdTZXJ2aWNlRmFjdG9yeS5pQ3JlYXRpbmdWaWV3cztcblx0fVxufVxuXG5leHBvcnQgZGVmYXVsdCBUZW1wbGF0ZWRWaWV3U2VydmljZUZhY3Rvcnk7XG4iXX0=
437
+ //# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIlRlbXBsYXRlZFZpZXdTZXJ2aWNlRmFjdG9yeS50cyJdLCJuYW1lcyI6WyJUZW1wbGF0ZWRWaWV3U2VydmljZSIsImluaXQiLCJhU2VydmljZURlcGVuZGVuY2llcyIsIm9Db250ZXh0IiwiZ2V0Q29udGV4dCIsIm9Db21wb25lbnQiLCJzY29wZU9iamVjdCIsIm9BcHBDb21wb25lbnQiLCJDb21wb25lbnQiLCJnZXRPd25lckNvbXBvbmVudEZvciIsIm9NZXRhTW9kZWwiLCJnZXRNZXRhTW9kZWwiLCJzU3RhYmxlSWQiLCJnZXRNZXRhZGF0YSIsImdldENvbXBvbmVudE5hbWUiLCJnZXRMb2NhbElkIiwiZ2V0SWQiLCJhRW5oYW5jZUkxOG4iLCJnZXRFbmhhbmNlSTE4biIsInNBcHBOYW1lc3BhY2UiLCJvRmFjdG9yeSIsImZhY3RvcnkiLCJpIiwibGVuZ3RoIiwib1Jlc291cmNlTW9kZWwiLCJnZXRNb2RlbCIsImlzQSIsInJlcGxhY2UiLCJzQ2FjaGVJZGVudGlmaWVyIiwiZ2V0TmFtZSIsInNhcCIsInVpIiwiZ2V0Q29yZSIsImdldENvbmZpZ3VyYXRpb24iLCJnZXRMYW5ndWFnZVRhZyIsInB1c2giLCJTZXJ2aWNlRmFjdG9yeVJlZ2lzdHJ5IiwiZ2V0IiwiY3JlYXRlSW5zdGFuY2UiLCJzY29wZVR5cGUiLCJzZXR0aW5ncyIsImJ1bmRsZXMiLCJlbmhhbmNlSTE4biIsIm1vZGVsTmFtZSIsInRoZW4iLCJvUmVzb3VyY2VNb2RlbFNlcnZpY2UiLCJnZXRSZXNvdXJjZU1vZGVsIiwibWV0YU1vZGVsIiwiYXBwQ29tcG9uZW50IiwiY29tcG9uZW50Iiwib0NhY2hlSGFuZGxlclNlcnZpY2UiLCJ2YWxpZGF0ZUNhY2hlS2V5IiwiVmVyc2lvbkluZm8iLCJsb2FkIiwib0luZm8iLCJzVGltZXN0YW1wIiwibGlicmFyaWVzIiwiYnVpbGRpbmZvIiwiYnVpbGR0aW1lIiwiZm9yRWFjaCIsIm9MaWJyYXJ5IiwiYnVpbGRUaW1lc3RhbXAiLCJjYXRjaCIsInNQYWdlTW9kZWxDYWNoZUtleSIsImluaXRQcm9taXNlIiwiUHJvbWlzZSIsImFsbCIsImFEZXBlbmRlbmNpZXNSZXN1bHQiLCJzQ2FjaGVLZXkiLCJzVmVyc2lvbkluZm8iLCJvU2hlbGxTZXJ2aWNlcyIsImdldFNoZWxsU2VydmljZXMiLCJvU2lkZUVmZmVjdHNTZXJ2aWNlcyIsImdldFNpZGVFZmZlY3RzU2VydmljZSIsImluaXRpYWxpemVTaWRlRWZmZWN0cyIsImdldEVudmlyb25tZW50Q2FwYWJpbGl0aWVzIiwiZ2V0Q2FwYWJpbGl0aWVzIiwiaW5zdGFuY2VUeXBlIiwidW5kZWZpbmVkIiwiY29uY2F0IiwiX2dldENhY2hlZE1vZGVsIiwib1BhZ2VNb2RlbENhY2hlIiwicmVzb2x2ZSIsInJlcXVpcmUiLCJUZW1wbGF0ZUNvbnZlcnRlciIsIk1ldGFNb2RlbENvbnZlcnRlciIsImNyZWF0ZVZpZXciLCJnZXRJbnN0YW5jZSIsImludmFsaWRhdGVJZk5lZWRlZCIsIkNvcmUiLCJnZXRWaWV3Q2FjaGUiLCJDYWNoZU1hbmFnZXIiLCJfc2V0Q2FjaGVkTW9kZWwiLCJvQ2FjaGVNb2RlbCIsInNldCIsInJlZnJlc2hWaWV3Iiwib1Jvb3RWaWV3IiwiZ2V0Um9vdENvbnRyb2wiLCJkZXN0cm95Iiwib1ZpZXciLCJyZXNvdXJjZU1vZGVsIiwic3RhYmxlSWQiLCJvQ29udGFpbmVyIiwiaW52YWxpZGF0ZSIsIm9FcnJvciIsIkxvZyIsImVycm9yIiwibVNlcnZpY2VTZXR0aW5ncyIsInNDb252ZXJ0ZXJUeXBlIiwiY29udmVydGVyVHlwZSIsInNGdWxsQ29udGV4dFBhdGgiLCJnZXRSb3V0aW5nU2VydmljZSIsImdldFRhcmdldEluZm9ybWF0aW9uRm9yIiwib3B0aW9ucyIsImZ1bGxDb250ZXh0UGF0aCIsIm9NYW5pZmVzdENvbnRlbnQiLCJnZXRNYW5pZmVzdCIsIm9EZXZpY2VNb2RlbCIsIkpTT05Nb2RlbCIsIkRldmljZSIsInNldERlZmF1bHRCaW5kaW5nTW9kZSIsIm9NYW5pZmVzdE1vZGVsIiwiYkVycm9yIiwib1BhZ2VNb2RlbCIsIm9WaWV3RGF0YU1vZGVsIiwib1ZpZXdTZXR0aW5ncyIsIm1WaWV3RGF0YSIsImdldFZpZXdTZXR0aW5ncyIsImFTcGxpdFBhdGgiLCJzcGxpdCIsInNFbnRpdHlTZXRQYXRoIiwicmVkdWNlIiwic1BhdGhTb0ZhciIsInNOZXh0UGF0aFBhcnQiLCJvVGFyZ2V0IiwiZ2V0T2JqZWN0IiwiT2JqZWN0Iiwia2V5cyIsInR5cGUiLCJwcmVwcm9jZXNzb3JzIiwieG1sIiwiYmluZGluZ0NvbnRleHRzIiwiZW50aXR5U2V0IiwiY3JlYXRlQmluZGluZ0NvbnRleHQiLCJjb250ZXh0UGF0aCIsImNvbnZlcnRlckNvbnRleHQiLCJub1Jlc29sdmUiLCJ2aWV3RGF0YSIsIm1vZGVscyIsIm1hbmlmZXN0IiwiaWQiLCJ2aWV3TmFtZSIsImdldFZpZXdOYW1lIiwiY2FjaGUiLCJoZWlnaHQiLCJjcmVhdGVFcnJvclBhZ2UiLCJyZWFzb24iLCJtZXNzYWdlIiwiZXJyb3JWaWV3TmFtZSIsInJ1bkFzT3duZXIiLCJWaWV3IiwiY3JlYXRlIiwic2V0TW9kZWwiLCJNYW5hZ2VkT2JqZWN0TW9kZWwiLCJzZXRBZ2dyZWdhdGlvbiIsImdldFNlcnZpY2UiLCJvUm91dGluZ1NlcnZpY2UiLCJvVGFyZ2V0SW5mbyIsIm1PdXRib3VuZHMiLCJjcm9zc05hdmlnYXRpb24iLCJvdXRib3VuZHMiLCJtTmF2aWdhdGlvbiIsImdldE5hdmlnYXRpb24iLCJuYXZpZ2F0aW9uT2JqZWN0S2V5IiwibmF2aWdhdGlvbk9iamVjdCIsIm91dGJvdW5kQ29uZmlnIiwiZGV0YWlsIiwib3V0Ym91bmQiLCJvdXRib3VuZERldGFpbCIsInNlbWFudGljT2JqZWN0IiwiYWN0aW9uIiwicGFyYW1ldGVycyIsIm5hdmlnYXRpb24iLCJ2aWV3TGV2ZWwiLCJjb250ZW50RGVuc2l0aWVzIiwicmVzb3VyY2VCdW5kbGUiLCJfX2J1bmRsZSIsImlzRGVza3RvcCIsInN5c3RlbSIsImRlc2t0b3AiLCJpc1Bob25lIiwicGhvbmUiLCJnZXRWaWV3RGF0YSIsImFzc2lnbiIsInNoZWxsQ29udGVudERlbnNpdHkiLCJnZXRDb250ZW50RGVuc2l0eSIsInVzZU5ld0xhenlMb2FkaW5nIiwiVXJpUGFyYW1ldGVycyIsImZyb21RdWVyeSIsIndpbmRvdyIsImxvY2F0aW9uIiwic2VhcmNoIiwicmV0cmlldmVUZXh0RnJvbVZhbHVlTGlzdCIsImZvcm0iLCJfdXNlTmV3VmFsdWVIZWxwIiwiYXBwIiwiY29udHJvbENvbmZpZ3VyYXRpb24iLCJzQW5ub3RhdGlvblBhdGgiLCJpbmRleE9mIiwic1RhcmdldEFubm90YXRpb25QYXRoIiwicmVzb2x2ZUR5bmFtaWNFeHByZXNzaW9uIiwiY29udmVydFR5cGVzIiwiVGVtcGxhdGVNb2RlbCIsIm9EaWFnbm9zdGljcyIsImdldERpYWdub3N0aWNzIiwiaUlzc3VlQ291bnQiLCJnZXRJc3N1ZXMiLCJvQ29udmVydGVyUGFnZU1vZGVsIiwiY29udmVydFBhZ2UiLCJhSXNzdWVzIiwiYUFkZGVkSXNzdWVzIiwic2xpY2UiLCJ3YXJuaW5nIiwiZ2V0RGF0YSIsImUiLCJFcnJvciIsImdldFZpZXciLCJnZXRJbnRlcmZhY2UiLCJleGl0IiwicmVtb3ZlR2xvYmFsSW5zdGFuY2UiLCJTZXJ2aWNlIiwiVGVtcGxhdGVkVmlld1NlcnZpY2VGYWN0b3J5IiwiX29JbnN0YW5jZVJlZ2lzdHJ5Iiwib1NlcnZpY2VDb250ZXh0IiwiaUNyZWF0aW5nVmlld3MiLCJvVGVtcGxhdGVkVmlld1NlcnZpY2UiLCJnZXROdW1iZXJPZlZpZXdzSW5DcmVhdGlvblN0YXRlIiwiU2VydmljZUZhY3RvcnkiXSwibWFwcGluZ3MiOiI7QUFBQTtBQUNBO0FBQ0E7Ozs7Ozs7Ozs7TUFzQk1BLG9COzs7Ozs7Ozs7V0FVTEMsSSxHQUFBLGdCQUFPO0FBQUE7O0FBQ04sVUFBTUMsb0JBQW9CLEdBQUcsRUFBN0I7QUFDQSxVQUFNQyxRQUFRLEdBQUcsS0FBS0MsVUFBTCxFQUFqQjtBQUNBLFVBQU1DLFVBQVUsR0FBR0YsUUFB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VCxhQUFPLEtBQUsvSCxLQUFaO0FBQ0EsSzs7V0FDRGdJLFksR0FBQSx3QkFBb0I7QUFDbkIsYUFBTyxJQUFQO0FBQ0EsSzs7V0FDREMsSSxHQUFBLGdCQUFPO0FBQ047QUFDQSxVQUFJLEtBQUt2TCxxQkFBVCxFQUFnQztBQUMvQixhQUFLQSxxQkFBTCxDQUEyQnFELE9BQTNCO0FBQ0E7O0FBQ0QsVUFBSSxLQUFLaEQsb0JBQVQsRUFBK0I7QUFDOUIsYUFBS0Esb0JBQUwsQ0FBMEJnRCxPQUExQjtBQUNBOztBQUNELFdBQUs5RSxRQUFMLENBQWNpTixvQkFBZDtBQUNBLEs7OztJQXJaaUNDLE87O01BdVo3QkMsMkI7Ozs7Ozs7Ozs7O2FBQ0xDLGtCLEdBQTJELEU7Ozs7OztZQUUzRGxNLGMsR0FBQSx3QkFBZW1NLGVBQWYsRUFBOEU7QUFDN0VGLE1BQUFBLDJCQUEyQixDQUFDRyxjQUE1QjtBQUVBLFVBQU1DLHFCQUFxQixHQUFHLElBQUkzTyxvQkFBSixDQUF5QndJLE1BQU0sQ0FBQ3lELE1BQVAsQ0FBYztBQUFFNUssUUFBQUEsT0FBTyxFQUFFO0FBQVgsT0FBZCxFQUFpQ29OLGVBQWpDLENBQXpCLENBQTlCO0FBQ0EsYUFBT0UscUJBQXFCLENBQUMzSyxXQUF0QixDQUFrQ3BCLElBQWxDLENBQXVDLFlBQVk7QUFDekQyTCxRQUFBQSwyQkFBMkIsQ0FBQ0csY0FBNUI7QUFDQSxlQUFPQyxxQkFBUDtBQUNBLE9BSE0sQ0FBUDtBQUlBLEs7O1lBQ0ROLG9CLEdBQUEsZ0NBQXVCO0FBQ3RCLFdBQUtHLGtCQUFMLEdBQTBCLEVBQTFCO0FBQ0EsSzs7Z0NBQ01JLCtCLEdBQVAsMkNBQXlDO0FBQ3hDLGFBQU9MLDJCQUEyQixDQUFDRyxjQUFuQztBQUNBLEs7OztJQWpCd0NHLGM7O1NBb0IzQk4sMkIiLCJzb3VyY2VSb290IjoiLiIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCBMb2cgZnJvbSBcInNhcC9iYXNlL0xvZ1wiO1xuaW1wb3J0IFVyaVBhcmFtZXRlcnMgZnJvbSBcInNhcC9iYXNlL3V0aWwvVXJpUGFyYW1ldGVyc1wiO1xuaW1wb3J0IHR5cGUgQXBwQ29tcG9uZW50IGZyb20gXCJzYXAvZmUvY29yZS9BcHBDb21wb25lbnRcIjtcbmltcG9ydCB0eXBlIHsgQ2FjaGVIYW5kbGVyU2VydmljZSB9IGZyb20gXCJzYXAvZmUvY29yZS9zZXJ2aWNlcy9DYWNoZUhhbmRsZXJTZXJ2aWNlRmFjdG9yeVwiO1xuaW1wb3J0IFRlbXBsYXRlTW9kZWwgZnJvbSBcInNhcC9mZS9jb3JlL1RlbXBsYXRlTW9kZWxcIjtcbmltcG9ydCB0eXBlIFJlc291cmNlTW9kZWwgZnJvbSBcInNhcC9mZS9tYWNyb3MvUmVzb3VyY2VNb2RlbFwiO1xuaW1wb3J0IENhY2hlTWFuYWdlciBmcm9tIFwic2FwL3VpL2NvcmUvY2FjaGUvQ2FjaGVNYW5hZ2VyXCI7XG5pbXBvcnQgQ29tcG9uZW50IGZyb20gXCJzYXAvdWkvY29yZS9Db21wb25lbnRcIjtcbmltcG9ydCBDb3JlIGZyb20gXCJzYXAvdWkvY29yZS9Db3JlXCI7XG5pbXBvcnQgVmlldyBmcm9tIFwic2FwL3VpL2NvcmUvbXZjL1ZpZXdcIjtcbmltcG9ydCBTZXJ2aWNlIGZyb20gXCJzYXAvdWkvY29yZS9zZXJ2aWNlL1NlcnZpY2VcIjtcbmltcG9ydCBTZXJ2aWNlRmFjdG9yeSBmcm9tIFwic2FwL3VpL2NvcmUvc2VydmljZS9TZXJ2aWNlRmFjdG9yeVwiO1xuaW1wb3J0IFNlcnZpY2VGYWN0b3J5UmVnaXN0cnkgZnJvbSBcInNhcC91aS9jb3JlL3NlcnZpY2UvU2VydmljZUZhY3RvcnlSZWdpc3RyeVwiO1xuaW1wb3J0IERldmljZSBmcm9tIFwic2FwL3VpL0RldmljZVwiO1xuaW1wb3J0IE1hbmFnZWRPYmplY3RNb2RlbCBmcm9tIFwic2FwL3VpL21vZGVsL2Jhc2UvTWFuYWdlZE9iamVjdE1vZGVsXCI7XG5pbXBvcnQgSlNPTk1vZGVsIGZyb20gXCJzYXAvdWkvbW9kZWwvanNvbi9KU09OTW9kZWxcIjtcbmltcG9ydCB0eXBlIE1vZGVsIGZyb20gXCJzYXAvdWkvbW9kZWwvTW9kZWxcIjtcbmltcG9ydCBWZXJzaW9uSW5mbyBmcm9tIFwic2FwL3VpL1ZlcnNpb25JbmZvXCI7XG5pbXBvcnQgdHlwZSB7IENvcmVFeCwgU2VydmljZUNvbnRleHQgfSBmcm9tIFwidHlwZXMvZXh0ZW5zaW9uX3R5cGVzXCI7XG5pbXBvcnQgeyByZXNvbHZlRHluYW1pY0V4cHJlc3Npb24gfSBmcm9tIFwiLi4vaGVscGVycy9EeW5hbWljQW5ub3RhdGlvblBhdGhIZWxwZXJcIjtcbmltcG9ydCB0eXBlIHsgUmVzb3VyY2VNb2RlbFNlcnZpY2UgfSBmcm9tIFwiLi9SZXNvdXJjZU1vZGVsU2VydmljZUZhY3RvcnlcIjtcblxudHlwZSBUZW1wbGF0ZWRWaWV3U2VydmljZVNldHRpbmdzID0ge307XG5cbmNsYXNzIFRlbXBsYXRlZFZpZXdTZXJ2aWNlIGV4dGVuZHMgU2VydmljZTxUZW1wbGF0ZWRWaWV3U2VydmljZVNldHRpbmdzPiB7XG5cdGluaXRQcm9taXNlITogUHJvbWlzZTxhbnk+O1xuXHRvVmlldyE6IFZpZXc7XG5cdG9SZXNvdXJjZU1vZGVsU2VydmljZSE6IFJlc291cmNlTW9kZWxTZXJ2aWNlO1xuXHRvQ2FjaGVIYW5kbGVyU2VydmljZSE6IENhY2hlSGFuZGxlclNlcnZpY2U7XG5cdG9GYWN0b3J5ITogVGVtcGxhdGVkVmlld1NlcnZpY2VGYWN0b3J5O1xuXHRyZXNvdXJjZU1vZGVsITogdHlwZW9mIFJlc291cmNlTW9kZWw7XG5cdHN0YWJsZUlkITogc3RyaW5nO1xuXHRUZW1wbGF0ZUNvbnZlcnRlcjogYW55O1xuXHRNZXRhTW9kZWxDb252ZXJ0ZXI6IGFueTtcblx0aW5pdCgpIHtcblx0XHRjb25zdCBhU2VydmljZURlcGVuZGVuY2llcyA9IFtdO1xuXHRcdGNvbnN0IG9Db250ZXh0ID0gdGhpcy5nZXRDb250ZXh0KCk7XG5cdFx0Y29uc3Qgb0NvbXBvbmVudCA9IG9Db250ZXh0LnNjb3BlT2JqZWN0O1xuXHRcdGNvbnN0IG9BcHBDb21wb25lbnQgPSBDb21wb25lbnQuZ2V0T3duZXJDb21wb25lbnRGb3Iob0NvbXBvbmVudCkgYXMgQXBwQ29tcG9uZW50O1xuXHRcdGNvbnN0IG9NZXRhTW9kZWwgPSBvQXBwQ29tcG9uZW50LmdldE1ldGFNb2RlbCgpO1xuXHRcdGNvbnN0IHNTdGFibGVJZCA9IGAke29BcHBDb21wb25lbnQuZ2V0TWV0YWRhdGEoKS5nZXRDb21wb25lbnROYW1lKCl9Ojoke29BcHBDb21wb25lbnQuZ2V0TG9jYWxJZChvQ29tcG9uZW50LmdldElkKCkpfWA7XG5cdFx0Y29uc3QgYUVuaGFuY2VJMThuID0gb0NvbXBvbmVudC5nZXRFbmhhbmNlSTE4bigpIHx8IFtdO1xuXHRcdGxldCBzQXBwTmFtZXNwYWNlO1xuXHRcdHRoaXMub0ZhY3RvcnkgPSBvQ29udGV4dC5mYWN0b3J5O1xuXHRcdGlmIChhRW5oYW5jZUkxOG4pIHtcblx0XHRcdHNBcHBOYW1lc3BhY2UgPSBvQXBwQ29tcG9uZW50LmdldE1ldGFkYXRhKCkuZ2V0Q29tcG9uZW50TmFtZSgpO1xuXHRcdFx0Zm9yIChsZXQgaSA9IDA7IGkgPCBhRW5oYW5jZUkxOG4ubGVuZ3RoOyBpKyspIHtcblx0XHRcdFx0Ly8gSW4gb3JkZXIgdG8gc3VwcG9ydCB0ZXh0LXZlcnRpY2FsaXphdGlvbiBhcHBsaWNhdGlvbnMgY2FuIGFsc28gcGFzc3MgYSByZXNvdXJjZSBtb2RlbCBkZWZpbmVkIGluIHRoZSBtYW5pZmVzdFxuXHRcdFx0XHQvLyBVSTUgdGFrZXMgY2FyZSBvZiB0ZXh0LXZlcnRpY2FsaXphdGlvbiBmb3IgcmVzb3VyY2UgbW9kZWxzIGRlZmluZWQgaW4gdGhlIG1hbmlmZXN0XG5cdFx0XHRcdC8vIEhlbmNlIGNoZWNrIGlmIHRoZSBnaXZlbiBrZXkgaXMgYSByZXNvdXJjZSBtb2RlbCBkZWZpbmVkIGluIHRoZSBtYW5pZmVzdFxuXHRcdFx0XHQvLyBpZiBzbyB0aGlzIG1vZGVsIHNob3VsZCBiZSB1c2VkIHRvIGVuaGFuY2UgdGhlIHNhcC5mZSByZXNvdXJjZSBtb2RlbCBzbyBwYXNzIGl0IGFzIGl0IGlzXG5cdFx0XHRcdGNvbnN0IG9SZXNvdXJjZU1vZGVsID0gb0FwcENvbXBvbmVudC5nZXRNb2RlbChhRW5oYW5jZUkxOG5baV0pO1xuXHRcdFx0XHRpZiAob1Jlc291cmNlTW9kZWwgJiYgb1Jlc291cmNlTW9kZWwuaXNBKFwic2FwLnVpLm1vZGVsLnJlc291cmNlLlJlc291cmNlTW9kZWxcIikpIHtcblx0XHRcdFx0XHRhRW5oYW5jZUkxOG5baV0gPSBvUmVzb3VyY2VNb2RlbDtcblx0XHRcdFx0fSBlbHNlIHtcblx0XHRcdFx0XHRhRW5oYW5jZUkxOG5baV0gPSBgJHtzQXBwTmFtZXNwYWNlfS4ke2FFbmhhbmNlSTE4bltpXS5yZXBsYWNlKFwiLnByb3BlcnRpZXNcIiwgXCJcIil9YDtcblx0XHRcdFx0fVxuXHRcdFx0fVxuXHRcdH1cblxuXHRcdGNvbnN0IHNDYWNoZUlkZW50aWZpZXIgPSBgJHtvQXBwQ29tcG9uZW50LmdldE1ldGFkYXRhKCkuZ2V0TmFtZSgpfV8ke3NTdGFibGVJZH1fJHtzYXAudWlcblx0XHRcdC5nZXRDb3JlKClcblx0XHRcdC5nZXRDb25maWd1cmF0aW9uKClcblx0XHRcdC5nZXRMYW5ndWFnZVRhZygpfWA7XG5cdFx0YVNlcnZpY2VEZXBlbmRlbmNpZXMucHVzaChcblx0XHRcdFNlcnZpY2VGYWN0b3J5UmVnaXN0cnkuZ2V0KFwic2FwLmZlLmNvcmUuc2VydmljZXMuUmVzb3VyY2VNb2RlbFNlcnZpY2VcIilcblx0XHRcdFx0LmNyZWF0ZUluc3RhbmNlKHtcblx0XHRcdFx0XHRzY29wZVR5cGU6IFwiY29tcG9uZW50XCIsXG5cdFx0XHRcdFx0c2NvcGVPYmplY3Q6IG9Db21wb25lbnQsXG5cdFx0XHRcdFx0c2V0dGluZ3M6IHtcblx0XHRcdFx0XHRcdGJ1bmRsZXM6IFtcInNhcC5mZS5jb3JlLm1lc3NhZ2VidW5kbGVcIiwgXCJzYXAuZmUubWFjcm9zLm1lc3NhZ2VidW5kbGVcIiwgXCJzYXAuZmUudGVtcGxhdGVzLm1lc3NhZ2VidW5kbGVcIl0sXG5cdFx0XHRcdFx0XHRlbmhhbmNlSTE4bjogYUVuaGFuY2VJMThuLFxuXHRcdFx0XHRcdFx0bW9kZWxOYW1lOiBcInNhcC5mZS5pMThuXCJcblx0XHRcdFx0XHR9XG5cdFx0XHRcdH0pXG5cdFx0XHRcdC50aGVuKChvUmVzb3VyY2VNb2RlbFNlcnZpY2U6IFJlc291cmNlTW9kZWxTZXJ2aWNlKSA9PiB7XG5cdFx0XHRcdFx0dGhpcy5vUmVzb3VyY2VNb2RlbFNlcnZpY2UgPSBvUmVzb3VyY2VNb2RlbFNlcnZpY2U7XG5cdFx0XHRcdFx0cmV0dXJuIG9SZXNvdXJjZU1vZGVsU2VydmljZS5nZXRSZXNvdXJjZU1vZGVsKCk7XG5cdFx0XHRcdH0pXG5cdFx0KTtcblxuXHRcdGFTZXJ2aWNlRGVwZW5kZW5jaWVzLnB1c2goXG5cdFx0XHRTZXJ2aWNlRmFjdG9yeVJlZ2lzdHJ5LmdldChcInNhcC5mZS5jb3JlLnNlcnZpY2VzLkNhY2hlSGFuZGxlclNlcnZpY2VcIilcblx0XHRcdFx0LmNyZWF0ZUluc3RhbmNlKHtcblx0XHRcdFx0XHRzZXR0aW5nczoge1xuXHRcdFx0XHRcdFx0bWV0YU1vZGVsOiBvTWV0YU1vZGVsLFxuXHRcdFx0XHRcdFx0YXBwQ29tcG9uZW50OiBvQXBwQ29tcG9uZW50LFxuXHRcdFx0XHRcdFx0Y29tcG9uZW50OiBvQ29tcG9uZW50XG5cdFx0XHRcdFx0fVxuXHRcdFx0XHR9KVxuXHRcdFx0XHQudGhlbigob0NhY2hlSGFuZGxlclNlcnZpY2U6IGFueSkgPT4ge1xuXHRcdFx0XHRcdHRoaXMub0NhY2hlSGFuZGxlclNlcnZpY2UgPSBvQ2FjaGVIYW5kbGVyU2VydmljZTtcblx0XHRcdFx0XHRyZXR1cm4gb0NhY2hlSGFuZGxlclNlcnZpY2UudmFsaWRhdGVDYWNoZUtleShzQ2FjaGVJZGVudGlmaWVyKTtcblx0XHRcdFx0fSlcblx0XHQpO1xuXHRcdGFTZXJ2aWNlRGVwZW5kZW5jaWVzLnB1c2goXG5cdFx0XHQoVmVyc2lvbkluZm8gYXMgYW55KVxuXHRcdFx0XHQubG9hZCgpXG5cdFx0XHRcdC50aGVuKGZ1bmN0aW9uIChvSW5mbzogYW55KSB7XG5cdFx0XHRcdFx0bGV0IHNUaW1lc3RhbXAgPSBcIlwiO1xuXHRcdFx0XHRcdGlmICghb0luZm8ubGlicmFyaWVzKSB7XG5cdFx0XHRcdFx0XHRzVGltZXN0YW1wID0gKHNhcC51aSBhcyBhbnkpLmJ1aWxkaW5mby5idWlsZHRpbWU7XG5cdFx0XHRcdFx0fSBlbHNlIHtcblx0XHRcdFx0XHRcdG9JbmZvLmxpYnJhcmllcy5mb3JFYWNoKGZ1bmN0aW9uIChvTGlicmFyeTogYW55KSB7XG5cdFx0XHRcdFx0XHRcdHNUaW1lc3RhbXAgKz0gb0xpYnJhcnkuYnVpbGRUaW1lc3RhbXA7XG5cdFx0XHRcdFx0XHR9KTtcblx0XHRcdFx0XHR9XG5cdFx0XHRcdFx0cmV0dXJuIHNUaW1lc3RhbXA7XG5cdFx0XHRcdH0pXG5cdFx0XHRcdC5jYXRjaChmdW5jdGlvbiAoKSB7XG5cdFx0XHRcdFx0cmV0dXJuIFwiPE5PVkFMVUU+XCI7XG5cdFx0XHRcdH0pXG5cdFx0KTtcblxuXHRcdGxldCBzUGFnZU1vZGVsQ2FjaGVLZXk6IHN0cmluZyB8IHVuZGVmaW5lZDtcblx0XHR0aGlzLmluaXRQcm9taXNlID0gUHJvbWlzZS5hbGwoYVNlcnZpY2VEZXBlbmRlbmNpZXMpXG5cdFx0XHQudGhlbigoYURlcGVuZGVuY2llc1Jlc3VsdDogYW55W10pID0+IHtcblx0XHRcdFx0Y29uc3Qgc0NhY2hlS2V5ID0gYURlcGVuZGVuY2llc1Jlc3VsdFsxXTtcblx0XHRcdFx0Y29uc3Qgc1ZlcnNpb25JbmZvID0gYURlcGVuZGVuY2llc1Jlc3VsdFsyXTtcblx0XHRcdFx0Y29uc3Qgb1NoZWxsU2VydmljZXMgPSBvQXBwQ29tcG9uZW50LmdldFNoZWxsU2VydmljZXMoKTtcblx0XHRcdFx0Y29uc3Qgb1NpZGVFZmZlY3RzU2VydmljZXMgPSBvQXBwQ29tcG9uZW50LmdldFNpZGVFZmZlY3RzU2VydmljZSgpO1xuXG5cdFx0XHRcdG9TaWRlRWZmZWN0c1NlcnZpY2VzLmluaXRpYWxpemVTaWRlRWZmZWN0cyhvQXBwQ29tcG9uZW50LmdldEVudmlyb25tZW50Q2FwYWJpbGl0aWVzKCkuZ2V0Q2FwYWJpbGl0aWVzKCkpO1xuXG5cdFx0XHRcdC8vIEluIGNhc2UgdGhlcmUgaXMgbm8gY2FjaGUga2V5IHdlIGlnbm9yZSB0aGUgdmlldyBjYWNoZVxuXHRcdFx0XHRzUGFnZU1vZGVsQ2FjaGVLZXkgPSBzQ2FjaGVLZXlcblx0XHRcdFx0XHQ/IGAke3NDYWNoZUtleX0tJHtzVmVyc2lvbkluZm99LSR7c1N0YWJsZUlkfS0ke29TaGVsbFNlcnZpY2VzLmluc3RhbmNlVHlwZX0tcGFnZU1vZGVsYFxuXHRcdFx0XHRcdDogdW5kZWZpbmVkO1xuXHRcdFx0XHRyZXR1cm4gUHJvbWlzZS5hbGwoYURlcGVuZGVuY2llc1Jlc3VsdC5jb25jYXQoW3RoaXMuX2dldENhY2hlZE1vZGVsKHNQYWdlTW9kZWxDYWNoZUtleSldKSk7XG5cdFx0XHR9KVxuXHRcdFx0LnRoZW4oKGFEZXBlbmRlbmNpZXNSZXN1bHQ6IGFueVtdKSA9PiB7XG5cdFx0XHRcdGNvbnN0IG9SZXNvdXJjZU1vZGVsID0gYURlcGVuZGVuY2llc1Jlc3VsdFswXTtcblx0XHRcdFx0Y29uc3Qgc0NhY2hlS2V5ID0gYURlcGVuZGVuY2llc1Jlc3VsdFsxXTtcblx0XHRcdFx0Y29uc3Qgb1BhZ2VNb2RlbENhY2hlID0gYURlcGVuZGVuY2llc1Jlc3VsdFszXTtcblx0XHRcdFx0cmV0dXJuIG5ldyBQcm9taXNlKChyZXNvbHZlKSA9PiB7XG5cdFx0XHRcdFx0c2FwLnVpLnJlcXVpcmUoXG5cdFx0XHRcdFx0XHRbXCJzYXAvZmUvY29yZS9jb252ZXJ0ZXJzL1RlbXBsYXRlQ29udmVydGVyXCIsIFwic2FwL2ZlL2NvcmUvY29udmVydGVycy9NZXRhTW9kZWxDb252ZXJ0ZXJcIl0sXG5cdFx0XHRcdFx0XHQoVGVtcGxhdGVDb252ZXJ0ZXI6IGFueSwgTWV0YU1vZGVsQ29udmVydGVyOiBhbnkpID0+IHtcblx0XHRcdFx0XHRcdFx0cmVzb2x2ZShcblx0XHRcdFx0XHRcdFx0XHR0aGlzLmNyZWF0ZVZpZXcoXG5cdFx0XHRcdFx0XHRcdFx0XHRvUmVzb3VyY2VNb2RlbCxcblx0XHRcdFx0XHRcdFx0XHRcdHNTdGFibGVJZCxcblx0XHRcdFx0XHRcdFx0XHRcdHNDYWNoZUtleSxcblx0XHRcdFx0XHRcdFx0XHRcdHNQYWdlTW9kZWxDYWNoZUtleSxcblx0XHRcdFx0XHRcdFx0XHRcdG9QYWdlTW9kZWxDYWNoZSxcblx0XHRcdFx0XHRcdFx0XHRcdFRlbXBsYXRlQ29udmVydGVyLFxuXHRcdFx0XHRcdFx0XHRcdFx0TWV0YU1vZGVsQ29udmVydGVyXG5cdFx0XHRcdFx0XHRcdFx0KVxuXHRcdFx0XHRcdFx0XHQpO1xuXHRcdFx0XHRcdFx0fVxuXHRcdFx0XHRcdCk7XG5cdFx0XHRcdH0pO1xuXHRcdFx0fSlcblx0XHRcdC50aGVuKGZ1bmN0aW9uIChzQ2FjaGVLZXk6IGFueSkge1xuXHRcdFx0XHRjb25zdCBvQ2FjaGVIYW5kbGVyU2VydmljZSA9IFNlcnZpY2VGYWN0b3J5UmVnaXN0cnkuZ2V0KFwic2FwLmZlLmNvcmUuc2VydmljZXMuQ2FjaGVIYW5kbGVyU2VydmljZVwiKS5nZXRJbnN0YW5jZShvTWV0YU1vZGVsKTtcblx0XHRcdFx0b0NhY2hlSGFuZGxlclNlcnZpY2UuaW52YWxpZGF0ZUlmTmVlZGVkKHNDYWNoZUtleSwgc0NhY2hlSWRlbnRpZmllcik7XG5cdFx0XHR9KTtcblx0fVxuXHRfZ2V0Q2FjaGVkTW9kZWwoc0NhY2hlS2V5OiBzdHJpbmcgfCB1bmRlZmluZWQpIHtcblx0XHRpZiAoc0NhY2hlS2V5ICYmIChDb3JlIGFzIENvcmVFeCkuZ2V0Q29uZmlndXJhdGlvbigpLmdldFZpZXdDYWNoZSgpKSB7XG5cdFx0XHRyZXR1cm4gQ2FjaGVNYW5hZ2VyLmdldChzQ2FjaGVLZXkpO1xuXHRcdH1cblx0XHRyZXR1cm4gdW5kZWZpbmVkO1xuXHR9XG5cdF9zZXRDYWNoZWRNb2RlbChzQ2FjaGVLZXk6IHN0cmluZyB8IHVuZGVmaW5lZCwgb0NhY2hlTW9kZWw6IGFueSkge1xuXHRcdGlmIChzQ2FjaGVLZXkgJiYgKENvcmUgYXMgQ29yZUV4KS5nZXRDb25maWd1cmF0aW9uKCkuZ2V0Vmlld0NhY2hlKCkpIHtcblx0XHRcdENhY2hlTWFuYWdlci5zZXQoc0NhY2hlS2V5LCBvQ2FjaGVNb2RlbCk7XG5cdFx0fVxuXHRcdHJldHVybiB1bmRlZmluZWQ7XG5cdH1cblx0LyoqXG5cdCAqIFJlZnJlc2ggdGhlIGN1cnJlbnQgdmlldyB1c2luZyB0aGUgc2FtZSBjb25maWd1cmF0aW9uIGFzIGJlZm9yZS5cblx0ICogVGhpcyBpcyB1c2VmdWwgZm9yIG91ciBkZW1va2l0ICFcblx0ICpcblx0ICogQHBhcmFtIG9Db21wb25lbnRcblx0ICogQHJldHVybnMgQSBwcm9taXNlIGluZGljYXRpbmcgd2hlbiB0aGUgdmlldyBpcyByZWZyZXNoZWRcblx0ICogQHByaXZhdGVcblx0ICovXG5cdHJlZnJlc2hWaWV3KG9Db21wb25lbnQ6IGFueSkge1xuXHRcdGNvbnN0IG9Sb290VmlldyA9IG9Db21wb25lbnQuZ2V0Um9vdENvbnRyb2woKTtcblx0XHRpZiAob1Jvb3RWaWV3KSB7XG5cdFx0XHRvUm9vdFZpZXcuZGVzdHJveSgpO1xuXHRcdH0gZWxzZSBpZiAodGhpcy5vVmlldykge1xuXHRcdFx0dGhpcy5vVmlldy5kZXN0cm95KCk7XG5cdFx0fVxuXHRcdHJldHVybiB0aGlzLmNyZWF0ZVZpZXcodGhpcy5yZXNvdXJjZU1vZGVsLCB0aGlzLnN0YWJsZUlkLCBcIlwiLCBcIlwiLCB1bmRlZmluZWQsIHRoaXMuVGVtcGxhdGVDb252ZXJ0ZXIsIHRoaXMuTWV0YU1vZGVsQ29udmVydGVyKVxuXHRcdFx0LnRoZW4oZnVuY3Rpb24gKCkge1xuXHRcdFx0XHRvQ29tcG9uZW50Lm9Db250YWluZXIuaW52YWxpZGF0ZSgpO1xuXHRcdFx0fSlcblx0XHRcdC5jYXRjaChmdW5jdGlvbiAob0Vycm9yOiBhbnkpIHtcblx0XHRcdFx0b0NvbXBvbmVudC5vQ29udGFpbmVyLmludmFsaWRhdGUoKTtcblx0XHRcdFx0TG9nLmVycm9yKG9FcnJvcik7XG5cdFx0XHR9KTtcblx0fVxuXHRjcmVhdGVWaWV3KFxuXHRcdG9SZXNvdXJjZU1vZGVsOiBhbnksXG5cdFx0c1N0YWJsZUlkOiBhbnksXG5cdFx0c0NhY2hlS2V5OiBhbnksXG5cdFx0c1BhZ2VNb2RlbENhY2hlS2V5OiBzdHJpbmcgfCB1bmRlZmluZWQsXG5cdFx0b1BhZ2VNb2RlbENhY2hlOiBhbnksXG5cdFx0VGVtcGxhdGVDb252ZXJ0ZXI6IGFueSxcblx0XHRNZXRhTW9kZWxDb252ZXJ0ZXI6IGFueVxuXHQpIHtcblx0XHR0aGlzLnJlc291cmNlTW9kZWwgPSBvUmVzb3VyY2VNb2RlbDtcblx0XHR0aGlzLnN0YWJsZUlkID0gc1N0YWJsZUlkO1xuXHRcdHRoaXMuVGVtcGxhdGVDb252ZXJ0ZXIgPSBUZW1wbGF0ZUNvbnZlcnRlcjtcblx0XHR0aGlzLk1ldGFNb2RlbENvbnZlcnRlciA9IE1ldGFNb2RlbENvbnZlcnRlcjtcblx0XHRjb25zdCBvQ29udGV4dCA9IHRoaXMuZ2V0Q29udGV4dCgpO1xuXHRcdGNvbnN0IG1TZXJ2aWNlU2V0dGluZ3MgPSBvQ29udGV4dC5zZXR0aW5ncztcblx0XHRjb25zdCBzQ29udmVydGVyVHlwZSA9IG1TZXJ2aWNlU2V0dGluZ3MuY29udmVydGVyVHlwZTtcblx0XHRjb25zdCBvQ29tcG9uZW50ID0gb0NvbnRleHQuc2NvcGVPYmplY3Q7XG5cdFx0Y29uc3Qgb0FwcENvbXBvbmVudDogQXBwQ29tcG9uZW50ID0gQ29tcG9uZW50LmdldE93bmVyQ29tcG9uZW50Rm9yKG9Db21wb25lbnQpIGFzIEFwcENvbXBvbmVudDtcblx0XHRjb25zdCBzRnVsbENvbnRleHRQYXRoID0gb0FwcENvbXBvbmVudC5nZXRSb3V0aW5nU2VydmljZSgpLmdldFRhcmdldEluZm9ybWF0aW9uRm9yKG9Db21wb25lbnQpLm9wdGlvbnMuc2V0dGluZ3MuZnVsbENvbnRleHRQYXRoO1xuXHRcdGNvbnN0IG9NZXRhTW9kZWwgPSBvQXBwQ29tcG9uZW50LmdldE1ldGFNb2RlbCgpO1xuXHRcdGNvbnN0IG9NYW5pZmVzdENvbnRlbnQ6IGFueSA9IG9BcHBDb21wb25lbnQuZ2V0TWFuaWZlc3QoKTtcblx0XHRjb25zdCBvRGV2aWNlTW9kZWwgPSBuZXcgSlNPTk1vZGVsKERldmljZSkuc2V0RGVmYXVsdEJpbmRpbmdNb2RlKFwiT25lV2F5XCIpO1xuXHRcdGNvbnN0IG9NYW5pZmVzdE1vZGVsID0gbmV3IEpTT05Nb2RlbChvTWFuaWZlc3RDb250ZW50KTtcblx0XHRjb25zdCBiRXJyb3IgPSBmYWxzZTtcblx0XHRsZXQgb1BhZ2VNb2RlbDogVGVtcGxhdGVNb2RlbCwgb1ZpZXdEYXRhTW9kZWw6IE1vZGVsLCBvVmlld1NldHRpbmdzOiBhbnksIG1WaWV3RGF0YTogYW55O1xuXG5cdFx0ZnVuY3Rpb24gZ2V0Vmlld1NldHRpbmdzKCkge1xuXHRcdFx0Y29uc3QgYVNwbGl0UGF0aCA9IHNGdWxsQ29udGV4dFBhdGguc3BsaXQoXCIvXCIpO1xuXHRcdFx0Y29uc3Qgc0VudGl0eVNldFBhdGggPSBhU3BsaXRQYXRoLnJlZHVjZShmdW5jdGlvbiAoc1BhdGhTb0ZhcjogYW55LCBzTmV4dFBhdGhQYXJ0OiBhbnkpIHtcblx0XHRcdFx0aWYgKHNOZXh0UGF0aFBhcnQgPT09IFwiXCIpIHtcblx0XHRcdFx0XHRyZXR1cm4gc1BhdGhTb0Zhcjtcblx0XHRcdFx0fVxuXHRcdFx0XHRpZiAoc1BhdGhTb0ZhciA9PT0gXCJcIikge1xuXHRcdFx0XHRcdHNQYXRoU29GYXIgPSBgLyR7c05leHRQYXRoUGFydH1gO1xuXHRcdFx0XHR9IGVsc2Uge1xuXHRcdFx0XHRcdGNvbnN0IG9UYXJnZXQgPSBvTWV0YU1vZGVsLmdldE9iamVjdChgJHtzUGF0aFNvRmFyfS8kTmF2aWdhdGlvblByb3BlcnR5QmluZGluZy8ke3NOZXh0UGF0aFBhcnR9YCk7XG5cdFx0XHRcdFx0aWYgKG9UYXJnZXQgJiYgT2JqZWN0LmtleXMob1RhcmdldCkubGVuZ3RoID4gMCkge1xuXHRcdFx0XHRcdFx0c1BhdGhTb0ZhciArPSBcIi8kTmF2aWdhdGlvblByb3BlcnR5QmluZGluZ1wiO1xuXHRcdFx0XHRcdH1cblx0XHRcdFx0XHRzUGF0aFNvRmFyICs9IGAvJHtzTmV4dFBhdGhQYXJ0fWA7XG5cdFx0XHRcdH1cblx0XHRcdFx0cmV0dXJuIHNQYXRoU29GYXI7XG5cdFx0XHR9LCBcIlwiKTtcblx0XHRcdHJldHVybiB7XG5cdFx0XHRcdHR5cGU6IFwiWE1MXCIsXG5cdFx0XHRcdHByZXByb2Nlc3NvcnM6IHtcblx0XHRcdFx0XHR4bWw6IHtcblx0XHRcdFx0XHRcdGJpbmRpbmdDb250ZXh0czoge1xuXHRcdFx0XHRcdFx0XHRlbnRpdHlTZXQ6IHNFbnRpdHlTZXRQYXRoID8gb01ldGFNb2RlbC5jcmVhdGVCaW5kaW5nQ29udGV4dChzRW50aXR5U2V0UGF0aCkgOiBudWxsLFxuXHRcdFx0XHRcdFx0XHRmdWxsQ29udGV4dFBhdGg6IHNGdWxsQ29udGV4dFBhdGggPyBvTWV0YU1vZGVsLmNyZWF0ZUJpbmRpbmdDb250ZXh0KHNGdWxsQ29udGV4dFBhdGgpIDogbnVsbCxcblx0XHRcdFx0XHRcdFx0Y29udGV4dFBhdGg6IHNGdWxsQ29udGV4dFBhdGggPyBvTWV0YU1vZGVsLmNyZWF0ZUJpbmRpbmdDb250ZXh0KHNGdWxsQ29udGV4dFBhdGgpIDogbnVsbCxcblx0XHRcdFx0XHRcdFx0Y29udmVydGVyQ29udGV4dDogb1BhZ2VNb2RlbC5jcmVhdGVCaW5kaW5nQ29udGV4dChcIi9cIiwgdW5kZWZpbmVkLCB7IG5vUmVzb2x2ZTogdHJ1ZSB9KSxcblx0XHRcdFx0XHRcdFx0dmlld0RhdGE6IG1WaWV3RGF0YSA/IG9WaWV3RGF0YU1vZGVsLmNyZWF0ZUJpbmRpbmdDb250ZXh0KFwiL1wiKSA6IG51bGxcblx0XHRcdFx0XHRcdH0sXG5cdFx0XHRcdFx0XHRtb2RlbHM6IHtcblx0XHRcdFx0XHRcdFx0ZW50aXR5U2V0OiBvTWV0YU1vZGVsLFxuXHRcdFx0XHRcdFx0XHRmdWxsQ29udGV4dFBhdGg6IG9NZXRhTW9kZWwsXG5cdFx0XHRcdFx0XHRcdGNvbnRleHRQYXRoOiBvTWV0YU1vZGVsLFxuXHRcdFx0XHRcdFx0XHRcInNhcC5mZS5pMThuXCI6IG9SZXNvdXJjZU1vZGVsLFxuXHRcdFx0XHRcdFx0XHRtZXRhTW9kZWw6IG9NZXRhTW9kZWwsXG5cdFx0XHRcdFx0XHRcdFwiZGV2aWNlXCI6IG9EZXZpY2VNb2RlbCxcblx0XHRcdFx0XHRcdFx0bWFuaWZlc3Q6IG9NYW5pZmVzdE1vZGVsLFxuXHRcdFx0XHRcdFx0XHRjb252ZXJ0ZXJDb250ZXh0OiBvUGFnZU1vZGVsLFxuXHRcdFx0XHRcdFx0XHR2aWV3RGF0YTogb1ZpZXdEYXRhTW9kZWxcblx0XHRcdFx0XHRcdH0sXG5cdFx0XHRcdFx0XHRhcHBDb21wb25lbnQ6IG9BcHBDb21wb25lbnRcblx0XHRcdFx0XHR9XG5cdFx0XHRcdH0sXG5cdFx0XHRcdGlkOiBzU3RhYmxlSWQsXG5cdFx0XHRcdHZpZXdOYW1lOiBtU2VydmljZVNldHRpbmdzLnZpZXdOYW1lIHx8IG9Db21wb25lbnQuZ2V0Vmlld05hbWUoKSxcblx0XHRcdFx0dmlld0RhdGE6IG1WaWV3RGF0YSxcblx0XHRcdFx0Y2FjaGU6IHsga2V5czogW3NDYWNoZUtleV0gfSxcblx0XHRcdFx0bW9kZWxzOiB7XG5cdFx0XHRcdFx0XCJzYXAuZmUuaTE4blwiOiBvUmVzb3VyY2VNb2RlbFxuXHRcdFx0XHR9LFxuXHRcdFx0XHRoZWlnaHQ6IFwiMTAwJVwiXG5cdFx0XHR9O1xuXHRcdH1cblx0XHRjb25zdCBjcmVhdGVFcnJvclBhZ2UgPSAocmVhc29uOiBhbnkpID0+IHtcblx0XHRcdC8vIGp1c3QgcmVwbGFjZSB0aGUgdmlldyBuYW1lIGFuZCBhZGQgYW4gYWRkaXRpb25hbCBtb2RlbCBjb250YWluaW5nIHRoZSByZWFzb24sIGJ1dFxuXHRcdFx0Ly8ga2VlcCB0aGUgb3RoZXIgc2V0dGluZ3Ncblx0XHRcdExvZy5lcnJvcihyZWFzb24ubWVzc2FnZSwgcmVhc29uKTtcblx0XHRcdG9WaWV3U2V0dGluZ3Mudmlld05hbWUgPSBtU2VydmljZVNldHRpbmdzLmVycm9yVmlld05hbWUgfHwgXCJzYXAuZmUuY29yZS5zZXJ2aWNlcy52aWV3LlRlbXBsYXRpbmdFcnJvclBhZ2VcIjtcblx0XHRcdG9WaWV3U2V0dGluZ3MucHJlcHJvY2Vzc29ycy54bWwubW9kZWxzW1wiZXJyb3JcIl0gPSBuZXcgSlNPTk1vZGVsKHJlYXNvbik7XG5cblx0XHRcdHJldHVybiBvQ29tcG9uZW50LnJ1bkFzT3duZXIoKCkgPT4ge1xuXHRcdFx0XHRyZXR1cm4gVmlldy5jcmVhdGUob1ZpZXdTZXR0aW5ncykudGhlbigob1ZpZXc6IGFueSkgPT4ge1xuXHRcdFx0XHRcdHRoaXMub1ZpZXcgPSBvVmlldztcblx0XHRcdFx0XHR0aGlzLm9WaWV3LnNldE1vZGVsKG5ldyBNYW5hZ2VkT2JqZWN0TW9kZWwodGhpcy5vVmlldyksIFwiJHZpZXdcIik7XG5cdFx0XHRcdFx0b0NvbXBvbmVudC5zZXRBZ2dyZWdhdGlvbihcInJvb3RDb250cm9sXCIsIHRoaXMub1ZpZXcpO1xuXHRcdFx0XHRcdHJldHVybiBzQ2FjaGVLZXk7XG5cdFx0XHRcdH0pO1xuXHRcdFx0fSk7XG5cdFx0fTtcblx0XHRyZXR1cm4gb0FwcENvbXBvbmVudFxuXHRcdFx0LmdldFNlcnZpY2UoXCJyb3V0aW5nU2VydmljZVwiKVxuXHRcdFx0LnRoZW4oKG9Sb3V0aW5nU2VydmljZTogYW55KSA9PiB7XG5cdFx0XHRcdC8vIFJldHJpZXZlIHRoZSB2aWV3TGV2ZWwgZm9yIHRoZSBjb21wb25lbnRcblx0XHRcdFx0Y29uc3Qgb1RhcmdldEluZm8gPSBvUm91dGluZ1NlcnZpY2UuZ2V0VGFyZ2V0SW5mb3JtYXRpb25Gb3Iob0NvbXBvbmVudCk7XG5cdFx0XHRcdGNvbnN0IG1PdXRib3VuZHMgPVxuXHRcdFx0XHRcdG9NYW5pZmVzdENvbnRlbnRbXCJzYXAuYXBwXCJdICYmXG5cdFx0XHRcdFx0b01hbmlmZXN0Q29udGVudFtcInNhcC5hcHBcIl0uY3Jvc3NOYXZpZ2F0aW9uICYmXG5cdFx0XHRcdFx0b01hbmlmZXN0Q29udGVudFtcInNhcC5hcHBcIl0uY3Jvc3NOYXZpZ2F0aW9uLm91dGJvdW5kcztcblx0XHRcdFx0Y29uc3QgbU5hdmlnYXRpb24gPSBvQ29tcG9uZW50LmdldE5hdmlnYXRpb24oKSB8fCB7fTtcblx0XHRcdFx0T2JqZWN0LmtleXMobU5hdmlnYXRpb24pLmZvckVhY2goZnVuY3Rpb24gKG5hdmlnYXRpb25PYmplY3RLZXk6IHN0cmluZykge1xuXHRcdFx0XHRcdGNvbnN0IG5hdmlnYXRpb25PYmplY3QgPSBtTmF2aWdhdGlvbltuYXZpZ2F0aW9uT2JqZWN0S2V5XTtcblx0XHRcdFx0XHRsZXQgb3V0Ym91bmRDb25maWc7XG5cdFx0XHRcdFx0aWYgKG5hdmlnYXRpb25PYmplY3QuZGV0YWlsICYmIG5hdmlnYXRpb25PYmplY3QuZGV0YWlsLm91dGJvdW5kICYmIG1PdXRib3VuZHNbbmF2aWdhdGlvbk9iamVjdC5kZXRhaWwub3V0Ym91bmRdKSB7XG5cdFx0XHRcdFx0XHRvdXRib3VuZENvbmZpZyA9IG1PdXRib3VuZHNbbmF2aWdhdGlvbk9iamVjdC5kZXRhaWwub3V0Ym91bmRdO1xuXHRcdFx0XHRcdFx0bmF2aWdhdGlvbk9iamVjdC5kZXRhaWwub3V0Ym91bmREZXRhaWwgPSB7XG5cdFx0XHRcdFx0XHRcdHNlbWFudGljT2JqZWN0OiBvdXRib3VuZENvbmZpZy5zZW1hbnRpY09iamVjdCxcblx0XHRcdFx0XHRcdFx0YWN0aW9uOiBvdXRib3VuZENvbmZpZy5hY3Rpb24sXG5cdFx0XHRcdFx0XHRcdHBhcmFtZXRlcnM6IG91dGJvdW5kQ29uZmlnLnBhcmFtZXRlcnNcblx0XHRcdFx0XHRcdH07XG5cdFx0XHRcdFx0fVxuXHRcdFx0XHRcdGlmIChuYXZpZ2F0aW9uT2JqZWN0LmNyZWF0ZSAmJiBuYXZpZ2F0aW9uT2JqZWN0LmNyZWF0ZS5vdXRib3VuZCAmJiBtT3V0Ym91bmRzW25hdmlnYXRpb25PYmplY3QuY3JlYXRlLm91dGJvdW5kXSkge1xuXHRcdFx0XHRcdFx0b3V0Ym91bmRDb25maWcgPSBtT3V0Ym91bmRzW25hdmlnYXRpb25PYmplY3QuY3JlYXRlLm91dGJvdW5kXTtcblx0XHRcdFx0XHRcdG5hdmlnYXRpb25PYmplY3QuY3JlYXRlLm91dGJvdW5kRGV0YWlsID0ge1xuXHRcdFx0XHRcdFx0XHRzZW1hbnRpY09iamVjdDogb3V0Ym91bmRDb25maWcuc2VtYW50aWNPYmplY3QsXG5cdFx0XHRcdFx0XHRcdGFjdGlvbjogb3V0Ym91bmRDb25maWcuYWN0aW9uLFxuXHRcdFx0XHRcdFx0XHRwYXJhbWV0ZXJzOiBvdXRib3VuZENvbmZpZy5wYXJhbWV0ZXJzXG5cdFx0XHRcdFx0XHR9O1xuXHRcdFx0XHRcdH1cblx0XHRcdFx0fSk7XG5cdFx0XHRcdG1WaWV3RGF0YSA9IHtcblx0XHRcdFx0XHRuYXZpZ2F0aW9uOiBtTmF2aWdhdGlvbixcblx0XHRcdFx0XHR2aWV3TGV2ZWw6IG9UYXJnZXRJbmZvLnZpZXdMZXZlbCxcblx0XHRcdFx0XHRzdGFibGVJZDogc1N0YWJsZUlkLFxuXHRcdFx0XHRcdGNvbnRlbnREZW5zaXRpZXM6IG9NYW5pZmVzdENvbnRlbnRbXCJzYXAudWk1XCJdLmNvbnRlbnREZW5zaXRpZXMsXG5cdFx0XHRcdFx0cmVzb3VyY2VCdW5kbGU6IG9SZXNvdXJjZU1vZGVsLl9fYnVuZGxlLFxuXHRcdFx0XHRcdGZ1bGxDb250ZXh0UGF0aDogc0Z1bGxDb250ZXh0UGF0aCxcblx0XHRcdFx0XHRpc0Rlc2t0b3A6IChEZXZpY2UgYXMgYW55KS5zeXN0ZW0uZGVza3RvcCxcblx0XHRcdFx0XHRpc1Bob25lOiAoRGV2aWNlIGFzIGFueSkuc3lzdGVtLnBob25lXG5cdFx0XHRcdH07XG5cblx0XHRcdFx0aWYgKG9Db21wb25lbnQuZ2V0Vmlld0RhdGEpIHtcblx0XHRcdFx0XHRPYmplY3QuYXNzaWduKG1WaWV3RGF0YSwgb0NvbXBvbmVudC5nZXRWaWV3RGF0YSgpKTtcblx0XHRcdFx0fVxuXG5cdFx0XHRcdGNvbnN0IG9TaGVsbFNlcnZpY2VzID0gb0FwcENvbXBvbmVudC5nZXRTaGVsbFNlcnZpY2VzKCk7XG5cdFx0XHRcdG1WaWV3RGF0YS5jb252ZXJ0ZXJUeXBlID0gc0NvbnZlcnRlclR5cGU7XG5cdFx0XHRcdG1WaWV3RGF0YS5zaGVsbENvbnRlbnREZW5zaXR5ID0gb1NoZWxsU2VydmljZXMuZ2V0Q29udGVudERlbnNpdHkoKTtcblx0XHRcdFx0bVZpZXdEYXRhLnVzZU5ld0xhenlMb2FkaW5nID0gVXJpUGFyYW1ldGVycy5mcm9tUXVlcnkod2luZG93LmxvY2F0aW9uLnNlYXJjaCkuZ2V0KFwic2FwLWZlLXh4LWxhenlsb2FkaW5ndGVzdFwiKSA9PT0gXCJ0cnVlXCI7XG5cdFx0XHRcdG1WaWV3RGF0YS5yZXRyaWV2ZVRleHRGcm9tVmFsdWVMaXN0ID1cblx0XHRcdFx0XHRvTWFuaWZlc3RDb250ZW50W1wic2FwLmZlXCJdICYmIG9NYW5pZmVzdENvbnRlbnRbXCJzYXAuZmVcIl0uZm9ybVxuXHRcdFx0XHRcdFx0PyBvTWFuaWZlc3RDb250ZW50W1wic2FwLmZlXCJdLmZvcm0ucmV0cmlldmVUZXh0RnJvbVZhbHVlTGlzdFxuXHRcdFx0XHRcdFx0OiB1bmRlZmluZWQ7XG5cdFx0XHRcdC8vIFx0VGhlIG1hbmlmZXN0IHN3aXRjaCBmb3IgdGhlIHVzYWdlIG9mIHRoZSBuZXcgVmFsdWVIZWxwIHNob3VsZCBvbmx5IHVzZWQgaW50ZXJuYWxseVxuXHRcdFx0XHRtVmlld0RhdGEuX3VzZU5ld1ZhbHVlSGVscCA9XG5cdFx0XHRcdFx0b01hbmlmZXN0Q29udGVudFtcInNhcC5mZVwiXSAmJiBvTWFuaWZlc3RDb250ZW50W1wic2FwLmZlXCJdLmFwcFxuXHRcdFx0XHRcdFx0PyBvTWFuaWZlc3RDb250ZW50W1wic2FwLmZlXCJdLmFwcC5fdXNlTmV3VmFsdWVIZWxwXG5cdFx0XHRcdFx0XHQ6IHVuZGVmaW5lZDtcblx0XHRcdFx0b1ZpZXdEYXRhTW9kZWwgPSBuZXcgSlNPTk1vZGVsKG1WaWV3RGF0YSk7XG5cdFx0XHRcdGlmIChtVmlld0RhdGEgJiYgbVZpZXdEYXRhLmNvbnRyb2xDb25maWd1cmF0aW9uKSB7XG5cdFx0XHRcdFx0T2JqZWN0LmtleXMobVZpZXdEYXRhLmNvbnRyb2xDb25maWd1cmF0aW9uKS5mb3JFYWNoKGZ1bmN0aW9uIChzQW5ub3RhdGlvblBhdGg6IHN0cmluZykge1xuXHRcdFx0XHRcdFx0aWYgKHNBbm5vdGF0aW9uUGF0aC5pbmRleE9mKFwiW1wiKSAhPT0gLTEpIHtcblx0XHRcdFx0XHRcdFx0Y29uc3Qgc1RhcmdldEFubm90YXRpb25QYXRoID0gcmVzb2x2ZUR5bmFtaWNFeHByZXNzaW9uKHNBbm5vdGF0aW9uUGF0aCwgb01ldGFNb2RlbCk7XG5cdFx0XHRcdFx0XHRcdG1WaWV3RGF0YS5jb250cm9sQ29uZmlndXJhdGlvbltzVGFyZ2V0QW5ub3RhdGlvblBhdGhdID0gbVZpZXdEYXRhLmNvbnRyb2xDb25maWd1cmF0aW9uW3NBbm5vdGF0aW9uUGF0aF07XG5cdFx0XHRcdFx0XHR9XG5cdFx0XHRcdFx0fSk7XG5cdFx0XHRcdH1cblx0XHRcdFx0TWV0YU1vZGVsQ29udmVydGVyLmNvbnZlcnRUeXBlcyhvTWV0YU1vZGVsLCBvQXBwQ29tcG9uZW50LmdldEVudmlyb25tZW50Q2FwYWJpbGl0aWVzKCkuZ2V0Q2FwYWJpbGl0aWVzKCkpO1xuXHRcdFx0XHRvUGFnZU1vZGVsID0gbmV3IFRlbXBsYXRlTW9kZWwoKCkgPT4ge1xuXHRcdFx0XHRcdHRyeSB7XG5cdFx0XHRcdFx0XHRpZiAob1BhZ2VNb2RlbENhY2hlKSB7XG5cdFx0XHRcdFx0XHRcdHJldHVybiBvUGFnZU1vZGVsQ2FjaGU7XG5cdFx0XHRcdFx0XHR9IGVsc2Uge1xuXHRcdFx0XHRcdFx0XHRjb25zdCBvRGlhZ25vc3RpY3MgPSBvQXBwQ29tcG9uZW50LmdldERpYWdub3N0aWNzKCk7XG5cdFx0XHRcdFx0XHRcdGNvbnN0IGlJc3N1ZUNvdW50ID0gb0RpYWdub3N0aWNzLmdldElzc3VlcygpLmxlbmd0aDtcblx0XHRcdFx0XHRcdFx0Y29uc3Qgb0NvbnZlcnRlclBhZ2VNb2RlbCA9IFRlbXBsYXRlQ29udmVydGVyLmNvbnZlcnRQYWdlKFxuXHRcdFx0XHRcdFx0XHRcdHNDb252ZXJ0ZXJUeXBlLFxuXHRcdFx0XHRcdFx0XHRcdG9NZXRhTW9kZWwsXG5cdFx0XHRcdFx0XHRcdFx0bVZpZXdEYXRhLFxuXHRcdFx0XHRcdFx0XHRcdG9EaWFnbm9zdGljcyxcblx0XHRcdFx0XHRcdFx0XHRzRnVsbENvbnRleHRQYXRoLFxuXHRcdFx0XHRcdFx0XHRcdG9BcHBDb21wb25lbnQuZ2V0RW52aXJvbm1lbnRDYXBhYmlsaXRpZXMoKS5nZXRDYXBhYmlsaXRpZXMoKVxuXHRcdFx0XHRcdFx0XHQpO1xuXG5cdFx0XHRcdFx0XHRcdGNvbnN0IGFJc3N1ZXMgPSBvRGlhZ25vc3RpY3MuZ2V0SXNzdWVzKCk7XG5cdFx0XHRcdFx0XHRcdGNvbnN0IGFBZGRlZElzc3VlcyA9IGFJc3N1ZXMuc2xpY2UoaUlzc3VlQ291bnQpO1xuXHRcdFx0XHRcdFx0XHRpZiAoYUFkZGVkSXNzdWVzLmxlbmd0aCA+IDApIHtcblx0XHRcdFx0XHRcdFx0XHRMb2cud2FybmluZyhcblx0XHRcdFx0XHRcdFx0XHRcdFwiU29tZSBpc3N1ZXMgaGF2ZSBiZWVuIGRldGVjdGVkIGluIHlvdXIgcHJvamVjdCwgcGxlYXNlIGNoZWNrIHRoZSBVSTUgc3VwcG9ydCBhc3Npc3RhbnQgcnVsZSBmb3Igc2FwLmZlLmNvcmVcIlxuXHRcdFx0XHRcdFx0XHRcdCk7XG5cdFx0XHRcdFx0XHRcdH1cblx0XHRcdFx0XHRcdFx0cmV0dXJuIG9Db252ZXJ0ZXJQYWdlTW9kZWw7XG5cdFx0XHRcdFx0XHR9XG5cdFx0XHRcdFx0fSBjYXRjaCAoZXJyb3IpIHtcblx0XHRcdFx0XHRcdExvZy5lcnJvcihlcnJvciBhcyBhbnksIGVycm9yIGFzIGFueSk7XG5cdFx0XHRcdFx0XHRyZXR1cm4ge307XG5cdFx0XHRcdFx0fVxuXHRcdFx0XHR9LCBvTWV0YU1vZGVsKTtcblxuXHRcdFx0XHRpZiAoIWJFcnJvcikge1xuXHRcdFx0XHRcdG9WaWV3U2V0dGluZ3MgPSBnZXRWaWV3U2V0dGluZ3MoKTtcblx0XHRcdFx0XHQvLyBTZXR0aW5nIHRoZSBwYWdlTW9kZWwgb24gdGhlIGNvbXBvbmVudCBmb3IgcG90ZW50aWFsIHJldXNlXG5cdFx0XHRcdFx0b0NvbXBvbmVudC5zZXRNb2RlbChvUGFnZU1vZGVsLCBcIl9wYWdlTW9kZWxcIik7XG5cdFx0XHRcdFx0cmV0dXJuIG9Db21wb25lbnQucnVuQXNPd25lcigoKSA9PiB7XG5cdFx0XHRcdFx0XHRyZXR1cm4gVmlldy5jcmVhdGUob1ZpZXdTZXR0aW5ncylcblx0XHRcdFx0XHRcdFx0LmNhdGNoKGNyZWF0ZUVycm9yUGFnZSlcblx0XHRcdFx0XHRcdFx0LnRoZW4oKG9WaWV3OiBhbnkpID0+IHtcblx0XHRcdFx0XHRcdFx0XHR0aGlzLm9WaWV3ID0gb1ZpZXc7XG5cdFx0XHRcdFx0XHRcdFx0dGhpcy5vVmlldy5zZXRNb2RlbChuZXcgTWFuYWdlZE9iamVjdE1vZGVsKHRoaXMub1ZpZXcpLCBcIiR2aWV3XCIpO1xuXHRcdFx0XHRcdFx0XHRcdHRoaXMub1ZpZXcuc2V0TW9kZWwob1ZpZXdEYXRhTW9kZWwsIFwidmlld0RhdGFcIik7XG5cdFx0XHRcdFx0XHRcdFx0b0NvbXBvbmVudC5zZXRBZ2dyZWdhdGlvbihcInJvb3RDb250cm9sXCIsIHRoaXMub1ZpZXcpO1xuXHRcdFx0XHRcdFx0XHRcdC8vIEZpcmUgYW5kIGZvcmdldCBpbiB0aGUgY2FjaGVcblx0XHRcdFx0XHRcdFx0XHRpZiAoIW9QYWdlTW9kZWxDYWNoZSkge1xuXHRcdFx0XHRcdFx0XHRcdFx0dGhpcy5fc2V0Q2FjaGVkTW9kZWwoc1BhZ2VNb2RlbENhY2hlS2V5LCAob1BhZ2VNb2RlbCBhcyBhbnkpLmdldERhdGEoKSk7XG5cdFx0XHRcdFx0XHRcdFx0fVxuXHRcdFx0XHRcdFx0XHRcdHJldHVybiBzQ2FjaGVLZXk7XG5cdFx0XHRcdFx0XHRcdH0pXG5cdFx0XHRcdFx0XHRcdC5jYXRjaCgoZSkgPT4gTG9nLmVycm9yKGUubWVzc2FnZSwgZSkpO1xuXHRcdFx0XHRcdH0pO1xuXHRcdFx0XHR9XG5cdFx0XHR9KVxuXHRcdFx0LmNhdGNoKGZ1bmN0aW9uIChlcnJvcjogYW55KSB7XG5cdFx0XHRcdExvZy5lcnJvcihlcnJvci5tZXNzYWdlLCBlcnJvcik7XG5cdFx0XHRcdHRocm93IG5ldyBFcnJvcihgRXJyb3Igd2hpbGUgY3JlYXRpbmcgdmlldyA6ICR7ZXJyb3J9YCk7XG5cdFx0XHR9KTtcblx0fVxuXHRnZXRWaWV3KCkge1xuXHRcdHJldHVybiB0aGlzLm9WaWV3O1xuXHR9XG5cdGdldEludGVyZmFjZSgpOiBhbnkge1xuXHRcdHJldHVybiB0aGlzO1xuXHR9XG5cdGV4aXQoKSB7XG5cdFx0Ly8gRGVyZWdpc3RlciBnbG9iYWwgaW5zdGFuY2Vcblx0XHRpZiAodGhpcy5vUmVzb3VyY2VNb2RlbFNlcnZpY2UpIHtcblx0XHRcdHRoaXMub1Jlc291cmNlTW9kZWxTZXJ2aWNlLmRlc3Ryb3koKTtcblx0XHR9XG5cdFx0aWYgKHRoaXMub0NhY2hlSGFuZGxlclNlcnZpY2UpIHtcblx0XHRcdHRoaXMub0NhY2hlSGFuZGxlclNlcnZpY2UuZGVzdHJveSgpO1xuXHRcdH1cblx0XHR0aGlzLm9GYWN0b3J5LnJlbW92ZUdsb2JhbEluc3RhbmNlKCk7XG5cdH1cbn1cbmNsYXNzIFRlbXBsYXRlZFZpZXdTZXJ2aWNlRmFjdG9yeSBleHRlbmRzIFNlcnZpY2VGYWN0b3J5PFRlbXBsYXRlZFZpZXdTZXJ2aWNlU2V0dGluZ3M+IHtcblx0X29JbnN0YW5jZVJlZ2lzdHJ5OiBSZWNvcmQ8c3RyaW5nLCBUZW1wbGF0ZWRWaWV3U2VydmljZT4gPSB7fTtcblx0c3RhdGljIGlDcmVhdGluZ1ZpZXdzOiAwO1xuXHRjcmVhdGVJbnN0YW5jZShvU2VydmljZUNvbnRleHQ6IFNlcnZpY2VDb250ZXh0PFRlbXBsYXRlZFZpZXdTZXJ2aWNlU2V0dGluZ3M+KSB7XG5cdFx0VGVtcGxhdGVkVmlld1NlcnZpY2VGYWN0b3J5LmlDcmVhdGluZ1ZpZXdzKys7XG5cblx0XHRjb25zdCBvVGVtcGxhdGVkVmlld1NlcnZpY2UgPSBuZXcgVGVtcGxhdGVkVmlld1NlcnZpY2UoT2JqZWN0LmFzc2lnbih7IGZhY3Rvcnk6IHRoaXMgfSwgb1NlcnZpY2VDb250ZXh0KSk7XG5cdFx0cmV0dXJuIG9UZW1wbGF0ZWRWaWV3U2VydmljZS5pbml0UHJvbWlzZS50aGVuKGZ1bmN0aW9uICgpIHtcblx0XHRcdFRlbXBsYXRlZFZpZXdTZXJ2aWNlRmFjdG9yeS5pQ3JlYXRpbmdWaWV3cy0tO1xuXHRcdFx0cmV0dXJuIG9UZW1wbGF0ZWRWaWV3U2VydmljZTtcblx0XHR9KTtcblx0fVxuXHRyZW1vdmVHbG9iYWxJbnN0YW5jZSgpIHtcblx0XHR0aGlzLl9vSW5zdGFuY2VSZWdpc3RyeSA9IHt9O1xuXHR9XG5cdHN0YXRpYyBnZXROdW1iZXJPZlZpZXdzSW5DcmVhdGlvblN0YXRlKCkge1xuXHRcdHJldHVybiBUZW1wbGF0ZWRWaWV3U2VydmljZUZhY3RvcnkuaUNyZWF0aW5nVmlld3M7XG5cdH1cbn1cblxuZXhwb3J0IGRlZmF1bHQgVGVtcGxhdGVkVmlld1NlcnZpY2VGYWN0b3J5O1xuIl19
@@ -1,24 +1,24 @@
1
+ import Log from "sap/base/Log";
2
+ import UriParameters from "sap/base/util/UriParameters";
3
+ import type AppComponent from "sap/fe/core/AppComponent";
4
+ import type { CacheHandlerService } from "sap/fe/core/services/CacheHandlerServiceFactory";
5
+ import TemplateModel from "sap/fe/core/TemplateModel";
6
+ import type ResourceModel from "sap/fe/macros/ResourceModel";
7
+ import CacheManager from "sap/ui/core/cache/CacheManager";
8
+ import Component from "sap/ui/core/Component";
9
+ import Core from "sap/ui/core/Core";
10
+ import View from "sap/ui/core/mvc/View";
1
11
  import Service from "sap/ui/core/service/Service";
2
12
  import ServiceFactory from "sap/ui/core/service/ServiceFactory";
3
13
  import ServiceFactoryRegistry from "sap/ui/core/service/ServiceFactoryRegistry";
14
+ import Device from "sap/ui/Device";
4
15
  import ManagedObjectModel from "sap/ui/model/base/ManagedObjectModel";
5
- import View from "sap/ui/core/mvc/View";
6
- import Component from "sap/ui/core/Component";
7
16
  import JSONModel from "sap/ui/model/json/JSONModel";
8
- import Log from "sap/base/Log";
9
- import TemplateModel from "sap/fe/core/TemplateModel";
10
- import CacheManager from "sap/ui/core/cache/CacheManager";
17
+ import type Model from "sap/ui/model/Model";
11
18
  import VersionInfo from "sap/ui/VersionInfo";
12
- import Device from "sap/ui/Device";
13
- import UriParameters from "sap/base/util/UriParameters";
14
- import { ResourceModelService } from "./ResourceModelServiceFactory";
15
- import AppComponent from "sap/fe/core/AppComponent";
16
- import { CacheHandlerService } from "sap/fe/core/services/CacheHandlerServiceFactory";
17
- import ResourceModel from "sap/fe/macros/ResourceModel";
18
- import Model from "sap/ui/model/Model";
19
+ import type { CoreEx, ServiceContext } from "types/extension_types";
19
20
  import { resolveDynamicExpression } from "../helpers/DynamicAnnotationPathHelper";
20
- import Core from "sap/ui/core/Core";
21
- import { CoreEx, ServiceContext } from "types/extension_types";
21
+ import type { ResourceModelService } from "./ResourceModelServiceFactory";
22
22
 
23
23
  type TemplatedViewServiceSettings = {};
24
24
 
@@ -38,7 +38,7 @@ class TemplatedViewService extends Service<TemplatedViewServiceSettings> {
38
38
  const oComponent = oContext.scopeObject;
39
39
  const oAppComponent = Component.getOwnerComponentFor(oComponent) as AppComponent;
40
40
  const oMetaModel = oAppComponent.getMetaModel();
41
- const sStableId = oAppComponent.getMetadata().getComponentName() + "::" + oAppComponent.getLocalId(oComponent.getId());
41
+ const sStableId = `${oAppComponent.getMetadata().getComponentName()}::${oAppComponent.getLocalId(oComponent.getId())}`;
42
42
  const aEnhanceI18n = oComponent.getEnhanceI18n() || [];
43
43
  let sAppNamespace;
44
44
  this.oFactory = oContext.factory;
@@ -53,20 +53,15 @@ class TemplatedViewService extends Service<TemplatedViewServiceSettings> {
53
53
  if (oResourceModel && oResourceModel.isA("sap.ui.model.resource.ResourceModel")) {
54
54
  aEnhanceI18n[i] = oResourceModel;
55
55
  } else {
56
- aEnhanceI18n[i] = sAppNamespace + "." + aEnhanceI18n[i].replace(".properties", "");
56
+ aEnhanceI18n[i] = `${sAppNamespace}.${aEnhanceI18n[i].replace(".properties", "")}`;
57
57
  }
58
58
  }
59
59
  }
60
60
 
61
- const sCacheIdentifier =
62
- oAppComponent.getMetadata().getName() +
63
- "_" +
64
- sStableId +
65
- "_" +
66
- sap.ui
67
- .getCore()
68
- .getConfiguration()
69
- .getLanguageTag();
61
+ const sCacheIdentifier = `${oAppComponent.getMetadata().getName()}_${sStableId}_${sap.ui
62
+ .getCore()
63
+ .getConfiguration()
64
+ .getLanguageTag()}`;
70
65
  aServiceDependencies.push(
71
66
  ServiceFactoryRegistry.get("sap.fe.core.services.ResourceModelService")
72
67
  .createInstance({
@@ -101,18 +96,18 @@ class TemplatedViewService extends Service<TemplatedViewServiceSettings> {
101
96
  aServiceDependencies.push(
102
97
  (VersionInfo as any)
103
98
  .load()
104
- .then(function(oInfo: any) {
99
+ .then(function (oInfo: any) {
105
100
  let sTimestamp = "";
106
101
  if (!oInfo.libraries) {
107
102
  sTimestamp = (sap.ui as any).buildinfo.buildtime;
108
103
  } else {
109
- oInfo.libraries.forEach(function(oLibrary: any) {
104
+ oInfo.libraries.forEach(function (oLibrary: any) {
110
105
  sTimestamp += oLibrary.buildTimestamp;
111
106
  });
112
107
  }
113
108
  return sTimestamp;
114
109
  })
115
- .catch(function() {
110
+ .catch(function () {
116
111
  return "<NOVALUE>";
117
112
  })
118
113
  );
@@ -129,7 +124,7 @@ class TemplatedViewService extends Service<TemplatedViewServiceSettings> {
129
124
 
130
125
  // In case there is no cache key we ignore the view cache
131
126
  sPageModelCacheKey = sCacheKey
132
- ? sCacheKey + "-" + sVersionInfo + "-" + sStableId + "-" + oShellServices.instanceType + "-pageModel"
127
+ ? `${sCacheKey}-${sVersionInfo}-${sStableId}-${oShellServices.instanceType}-pageModel`
133
128
  : undefined;
134
129
  return Promise.all(aDependenciesResult.concat([this._getCachedModel(sPageModelCacheKey)]));
135
130
  })
@@ -137,7 +132,7 @@ class TemplatedViewService extends Service<TemplatedViewServiceSettings> {
137
132
  const oResourceModel = aDependenciesResult[0];
138
133
  const sCacheKey = aDependenciesResult[1];
139
134
  const oPageModelCache = aDependenciesResult[3];
140
- return new Promise(resolve => {
135
+ return new Promise((resolve) => {
141
136
  sap.ui.require(
142
137
  ["sap/fe/core/converters/TemplateConverter", "sap/fe/core/converters/MetaModelConverter"],
143
138
  (TemplateConverter: any, MetaModelConverter: any) => {
@@ -156,7 +151,7 @@ class TemplatedViewService extends Service<TemplatedViewServiceSettings> {
156
151
  );
157
152
  });
158
153
  })
159
- .then(function(sCacheKey: any) {
154
+ .then(function (sCacheKey: any) {
160
155
  const oCacheHandlerService = ServiceFactoryRegistry.get("sap.fe.core.services.CacheHandlerService").getInstance(oMetaModel);
161
156
  oCacheHandlerService.invalidateIfNeeded(sCacheKey, sCacheIdentifier);
162
157
  });
@@ -178,7 +173,7 @@ class TemplatedViewService extends Service<TemplatedViewServiceSettings> {
178
173
  * This is useful for our demokit !
179
174
  *
180
175
  * @param oComponent
181
- * @returns {Promise<void>}
176
+ * @returns A promise indicating when the view is refreshed
182
177
  * @private
183
178
  */
184
179
  refreshView(oComponent: any) {
@@ -189,10 +184,10 @@ class TemplatedViewService extends Service<TemplatedViewServiceSettings> {
189
184
  this.oView.destroy();
190
185
  }
191
186
  return this.createView(this.resourceModel, this.stableId, "", "", undefined, this.TemplateConverter, this.MetaModelConverter)
192
- .then(function() {
187
+ .then(function () {
193
188
  oComponent.oContainer.invalidate();
194
189
  })
195
- .catch(function(oError: any) {
190
+ .catch(function (oError: any) {
196
191
  oComponent.oContainer.invalidate();
197
192
  Log.error(oError);
198
193
  });
@@ -225,22 +220,22 @@ class TemplatedViewService extends Service<TemplatedViewServiceSettings> {
225
220
 
226
221
  function getViewSettings() {
227
222
  const aSplitPath = sFullContextPath.split("/");
228
- const sEntitySetPath = aSplitPath.reduce(function(sPathSoFar: any, sNextPathPart: any) {
223
+ const sEntitySetPath = aSplitPath.reduce(function (sPathSoFar: any, sNextPathPart: any) {
229
224
  if (sNextPathPart === "") {
230
225
  return sPathSoFar;
231
226
  }
232
227
  if (sPathSoFar === "") {
233
- sPathSoFar = "/" + sNextPathPart;
228
+ sPathSoFar = `/${sNextPathPart}`;
234
229
  } else {
235
- const oTarget = oMetaModel.getObject(sPathSoFar + "/$NavigationPropertyBinding/" + sNextPathPart);
230
+ const oTarget = oMetaModel.getObject(`${sPathSoFar}/$NavigationPropertyBinding/${sNextPathPart}`);
236
231
  if (oTarget && Object.keys(oTarget).length > 0) {
237
232
  sPathSoFar += "/$NavigationPropertyBinding";
238
233
  }
239
- sPathSoFar += "/" + sNextPathPart;
234
+ sPathSoFar += `/${sNextPathPart}`;
240
235
  }
241
236
  return sPathSoFar;
242
237
  }, "");
243
- const oViewSettings = {
238
+ return {
244
239
  type: "XML",
245
240
  preprocessors: {
246
241
  xml: {
@@ -257,7 +252,7 @@ class TemplatedViewService extends Service<TemplatedViewServiceSettings> {
257
252
  contextPath: oMetaModel,
258
253
  "sap.fe.i18n": oResourceModel,
259
254
  metaModel: oMetaModel,
260
- "device": oDeviceModel, // TODO: discuss names here
255
+ "device": oDeviceModel,
261
256
  manifest: oManifestModel,
262
257
  converterContext: oPageModel,
263
258
  viewData: oViewDataModel
@@ -274,7 +269,6 @@ class TemplatedViewService extends Service<TemplatedViewServiceSettings> {
274
269
  },
275
270
  height: "100%"
276
271
  };
277
- return oViewSettings;
278
272
  }
279
273
  const createErrorPage = (reason: any) => {
280
274
  // just replace the view name and add an additional model containing the reason, but
@@ -302,7 +296,7 @@ class TemplatedViewService extends Service<TemplatedViewServiceSettings> {
302
296
  oManifestContent["sap.app"].crossNavigation &&
303
297
  oManifestContent["sap.app"].crossNavigation.outbounds;
304
298
  const mNavigation = oComponent.getNavigation() || {};
305
- Object.keys(mNavigation).forEach(function(navigationObjectKey: string) {
299
+ Object.keys(mNavigation).forEach(function (navigationObjectKey: string) {
306
300
  const navigationObject = mNavigation[navigationObjectKey];
307
301
  let outboundConfig;
308
302
  if (navigationObject.detail && navigationObject.detail.outbound && mOutbounds[navigationObject.detail.outbound]) {
@@ -345,9 +339,14 @@ class TemplatedViewService extends Service<TemplatedViewServiceSettings> {
345
339
  oManifestContent["sap.fe"] && oManifestContent["sap.fe"].form
346
340
  ? oManifestContent["sap.fe"].form.retrieveTextFromValueList
347
341
  : undefined;
342
+ // The manifest switch for the usage of the new ValueHelp should only used internally
343
+ mViewData._useNewValueHelp =
344
+ oManifestContent["sap.fe"] && oManifestContent["sap.fe"].app
345
+ ? oManifestContent["sap.fe"].app._useNewValueHelp
346
+ : undefined;
348
347
  oViewDataModel = new JSONModel(mViewData);
349
348
  if (mViewData && mViewData.controlConfiguration) {
350
- Object.keys(mViewData.controlConfiguration).forEach(function(sAnnotationPath: string) {
349
+ Object.keys(mViewData.controlConfiguration).forEach(function (sAnnotationPath: string) {
351
350
  if (sAnnotationPath.indexOf("[") !== -1) {
352
351
  const sTargetAnnotationPath = resolveDynamicExpression(sAnnotationPath, oMetaModel);
353
352
  mViewData.controlConfiguration[sTargetAnnotationPath] = mViewData.controlConfiguration[sAnnotationPath];
@@ -357,7 +356,7 @@ class TemplatedViewService extends Service<TemplatedViewServiceSettings> {
357
356
  MetaModelConverter.convertTypes(oMetaModel, oAppComponent.getEnvironmentCapabilities().getCapabilities());
358
357
  oPageModel = new TemplateModel(() => {
359
358
  try {
360
- if (!!oPageModelCache) {
359
+ if (oPageModelCache) {
361
360
  return oPageModelCache;
362
361
  } else {
363
362
  const oDiagnostics = oAppComponent.getDiagnostics();
@@ -404,13 +403,13 @@ class TemplatedViewService extends Service<TemplatedViewServiceSettings> {
404
403
  }
405
404
  return sCacheKey;
406
405
  })
407
- .catch(e => Log.error(e.message, e));
406
+ .catch((e) => Log.error(e.message, e));
408
407
  });
409
408
  }
410
409
  })
411
- .catch(function(error: any) {
410
+ .catch(function (error: any) {
412
411
  Log.error(error.message, error);
413
- throw new Error("Error while creating view : " + error);
412
+ throw new Error(`Error while creating view : ${error}`);
414
413
  });
415
414
  }
416
415
  getView() {
@@ -421,8 +420,12 @@ class TemplatedViewService extends Service<TemplatedViewServiceSettings> {
421
420
  }
422
421
  exit() {
423
422
  // Deregister global instance
424
- this.oResourceModelService && this.oResourceModelService.destroy();
425
- this.oCacheHandlerService && this.oCacheHandlerService.destroy();
423
+ if (this.oResourceModelService) {
424
+ this.oResourceModelService.destroy();
425
+ }
426
+ if (this.oCacheHandlerService) {
427
+ this.oCacheHandlerService.destroy();
428
+ }
426
429
  this.oFactory.removeGlobalInstance();
427
430
  }
428
431
  }
@@ -433,7 +436,7 @@ class TemplatedViewServiceFactory extends ServiceFactory<TemplatedViewServiceSet
433
436
  TemplatedViewServiceFactory.iCreatingViews++;
434
437
 
435
438
  const oTemplatedViewService = new TemplatedViewService(Object.assign({ factory: this }, oServiceContext));
436
- return oTemplatedViewService.initPromise.then(function() {
439
+ return oTemplatedViewService.initPromise.then(function () {
437
440
  TemplatedViewServiceFactory.iCreatingViews--;
438
441
  return oTemplatedViewService;
439
442
  });