@sapui5/sap.fe.core 1.103.0 → 1.106.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 (303) hide show
  1. package/package.json +5 -5
  2. package/src/sap/fe/core/.library +1 -1
  3. package/src/sap/fe/core/ActionRuntime.js +121 -0
  4. package/src/sap/fe/core/ActionRuntime.ts +122 -0
  5. package/src/sap/fe/core/AppComponent.js +24 -11
  6. package/src/sap/fe/core/AppComponent.ts +17 -5
  7. package/src/sap/fe/core/AppStateHandler.js +74 -62
  8. package/src/sap/fe/core/AppStateHandler.ts +24 -29
  9. package/src/sap/fe/core/BaseController.js +2 -2
  10. package/src/sap/fe/core/CommonUtils.js +147 -180
  11. package/src/sap/fe/core/CommonUtils.ts +166 -193
  12. package/src/sap/fe/core/ExtensionAPI.js +2 -2
  13. package/src/sap/fe/core/PageController.js +2 -2
  14. package/src/sap/fe/core/TemplateComponent.js +21 -10
  15. package/src/sap/fe/core/TemplateComponent.ts +3 -0
  16. package/src/sap/fe/core/TemplateModel.js +2 -2
  17. package/src/sap/fe/core/buildingBlocks/AttributeModel.js +11 -3
  18. package/src/sap/fe/core/buildingBlocks/AttributeModel.ts +7 -1
  19. package/src/sap/fe/core/buildingBlocks/BuildingBlock.js +194 -43
  20. package/src/sap/fe/core/buildingBlocks/BuildingBlock.ts +162 -24
  21. package/src/sap/fe/core/buildingBlocks/BuildingBlockFormatter.js +14 -0
  22. package/src/sap/fe/core/buildingBlocks/BuildingBlockFormatter.ts +5 -0
  23. package/src/sap/fe/core/buildingBlocks/BuildingBlockRuntime.js +609 -227
  24. package/src/sap/fe/core/buildingBlocks/BuildingBlockRuntime.ts +268 -119
  25. package/src/sap/fe/core/buildingBlocks/TraceInfo.js +111 -76
  26. package/src/sap/fe/core/buildingBlocks/TraceInfo.ts +96 -76
  27. package/src/sap/fe/core/controllerextensions/BusyLocker.js +1 -1
  28. package/src/sap/fe/core/controllerextensions/EditFlow.js +723 -637
  29. package/src/sap/fe/core/controllerextensions/EditFlow.ts +361 -398
  30. package/src/sap/fe/core/controllerextensions/IntentBasedNavigation.js +2 -2
  31. package/src/sap/fe/core/controllerextensions/InternalEditFlow.js +83 -55
  32. package/src/sap/fe/core/controllerextensions/InternalEditFlow.ts +42 -44
  33. package/src/sap/fe/core/controllerextensions/InternalIntentBasedNavigation.js +29 -27
  34. package/src/sap/fe/core/controllerextensions/InternalIntentBasedNavigation.ts +35 -30
  35. package/src/sap/fe/core/controllerextensions/InternalRouting.js +171 -74
  36. package/src/sap/fe/core/controllerextensions/InternalRouting.ts +167 -76
  37. package/src/sap/fe/core/controllerextensions/KPIManagement.js +5 -21
  38. package/src/sap/fe/core/controllerextensions/KPIManagement.ts +2 -17
  39. package/src/sap/fe/core/controllerextensions/MassEdit.js +3 -3
  40. package/src/sap/fe/core/controllerextensions/MassEdit.ts +1 -1
  41. package/src/sap/fe/core/controllerextensions/MessageHandler.js +2 -2
  42. package/src/sap/fe/core/controllerextensions/PageReady.js +3 -3
  43. package/src/sap/fe/core/controllerextensions/PageReady.ts +5 -1
  44. package/src/sap/fe/core/controllerextensions/Paginator.js +13 -13
  45. package/src/sap/fe/core/controllerextensions/Paginator.ts +11 -11
  46. package/src/sap/fe/core/controllerextensions/Placeholder.js +2 -2
  47. package/src/sap/fe/core/controllerextensions/Routing.js +2 -2
  48. package/src/sap/fe/core/controllerextensions/RoutingListener.js +1 -1
  49. package/src/sap/fe/core/controllerextensions/Share.js +154 -123
  50. package/src/sap/fe/core/controllerextensions/Share.ts +93 -95
  51. package/src/sap/fe/core/controllerextensions/SideEffects.js +157 -97
  52. package/src/sap/fe/core/controllerextensions/SideEffects.ts +151 -95
  53. package/src/sap/fe/core/controllerextensions/ViewState.js +151 -80
  54. package/src/sap/fe/core/controllerextensions/ViewState.ts +95 -93
  55. package/src/sap/fe/core/controllerextensions/collaboration/ActivityBase.js +1 -1
  56. package/src/sap/fe/core/controllerextensions/collaboration/ActivitySync.js +9 -9
  57. package/src/sap/fe/core/controllerextensions/collaboration/ActivitySync.ts +6 -7
  58. package/src/sap/fe/core/controllerextensions/collaboration/CollaborationCommon.js +26 -11
  59. package/src/sap/fe/core/controllerextensions/collaboration/CollaborationCommon.ts +30 -11
  60. package/src/sap/fe/core/controllerextensions/collaboration/Manage.js +57 -40
  61. package/src/sap/fe/core/controllerextensions/collaboration/Manage.ts +55 -47
  62. package/src/sap/fe/core/controllerextensions/collaboration/ManageDialog.fragment.xml +31 -32
  63. package/src/sap/fe/core/controllerextensions/editFlow/TransactionHelper.js +1376 -914
  64. package/src/sap/fe/core/controllerextensions/editFlow/TransactionHelper.ts +654 -714
  65. package/src/sap/fe/core/controllerextensions/editFlow/draft.js +372 -326
  66. package/src/sap/fe/core/controllerextensions/editFlow/draft.ts +210 -276
  67. package/src/sap/fe/core/controllerextensions/editFlow/draftDataLossPopup.js +309 -0
  68. package/src/sap/fe/core/controllerextensions/editFlow/draftDataLossPopup.ts +320 -0
  69. package/src/sap/fe/core/controllerextensions/editFlow/operations.js +670 -521
  70. package/src/sap/fe/core/controllerextensions/editFlow/operations.ts +537 -535
  71. package/src/sap/fe/core/controllerextensions/editFlow/sticky.js +85 -65
  72. package/src/sap/fe/core/controllerextensions/editFlow/sticky.ts +16 -21
  73. package/src/sap/fe/core/controllerextensions/messageHandler/messageHandling.js +25 -13
  74. package/src/sap/fe/core/controllerextensions/messageHandler/messageHandling.ts +53 -43
  75. package/src/sap/fe/core/controllerextensions/routing/RouterProxy.js +18 -27
  76. package/src/sap/fe/core/controllerextensions/routing/RouterProxy.ts +9 -15
  77. package/src/sap/fe/core/controls/ActionParameterDialog.fragment.xml +19 -3
  78. package/src/sap/fe/core/controls/ActionParameterDialogFieldValueHelp.fragment.xml +35 -0
  79. package/src/sap/fe/core/controls/ActionParameterDialogValueHelp.fragment.xml +26 -16
  80. package/src/sap/fe/core/controls/Any.js +1 -1
  81. package/src/sap/fe/core/controls/CommandExecution.js +2 -2
  82. package/src/sap/fe/core/controls/ConditionalWrapper.js +2 -2
  83. package/src/sap/fe/core/controls/CustomFilterFieldContentWrapper.js +5 -5
  84. package/src/sap/fe/core/controls/CustomFilterFieldContentWrapper.ts +0 -3
  85. package/src/sap/fe/core/controls/CustomQuickViewPage.js +2 -2
  86. package/src/sap/fe/core/controls/DataLossOrDraftDiscard/DataLossOrDraftDiscardHandler.js +1 -1
  87. package/src/sap/fe/core/controls/FieldWrapper.js +2 -2
  88. package/src/sap/fe/core/controls/FileWrapper.js +8 -3
  89. package/src/sap/fe/core/controls/FileWrapper.ts +5 -1
  90. package/src/sap/fe/core/controls/FilterBar.js +2 -2
  91. package/src/sap/fe/core/controls/FormElementWrapper.js +2 -2
  92. package/src/sap/fe/core/controls/MassEditSelect.js +1 -1
  93. package/src/sap/fe/core/controls/MultiValueParameterDelegate.js +1 -1
  94. package/src/sap/fe/core/controls/NonComputedVisibleKeyFieldsDialog.fragment.xml +48 -17
  95. package/src/sap/fe/core/controls/filterbar/FilterContainer.js +2 -2
  96. package/src/sap/fe/core/controls/filterbar/VisualFilter.js +2 -2
  97. package/src/sap/fe/core/controls/filterbar/VisualFilterContainer.js +2 -2
  98. package/src/sap/fe/core/controls/filterbar/utils/VisualFilterUtils.js +3 -3
  99. package/src/sap/fe/core/controls/filterbar/utils/VisualFilterUtils.ts +2 -2
  100. package/src/sap/fe/core/controls/massEdit/MassEditField.fragment.xml +22 -35
  101. package/src/sap/fe/core/controls/massEdit/MassEditHandlers.js +2 -2
  102. package/src/sap/fe/core/controls/massEdit/MassEditHandlers.ts +1 -1
  103. package/src/sap/fe/core/converters/ConverterContext.js +23 -2
  104. package/src/sap/fe/core/converters/ConverterContext.ts +34 -9
  105. package/src/sap/fe/core/converters/ManifestSettings.js +19 -18
  106. package/src/sap/fe/core/converters/ManifestSettings.ts +53 -47
  107. package/src/sap/fe/core/converters/ManifestWrapper.js +1 -1
  108. package/src/sap/fe/core/converters/MetaModelConverter.js +32 -10
  109. package/src/sap/fe/core/converters/MetaModelConverter.ts +42 -19
  110. package/src/sap/fe/core/converters/TemplateConverter.js +1 -1
  111. package/src/sap/fe/core/converters/annotations/DataField.js +5 -2
  112. package/src/sap/fe/core/converters/annotations/DataField.ts +5 -1
  113. package/src/sap/fe/core/converters/common/AnnotationConverter.js +69 -23
  114. package/src/sap/fe/core/converters/controls/Common/Action.js +98 -51
  115. package/src/sap/fe/core/converters/controls/Common/Action.ts +121 -44
  116. package/src/sap/fe/core/converters/controls/Common/Chart.js +31 -34
  117. package/src/sap/fe/core/converters/controls/Common/Chart.ts +26 -34
  118. package/src/sap/fe/core/converters/controls/Common/Criticality.js +1 -1
  119. package/src/sap/fe/core/converters/controls/Common/DataVisualization.js +43 -7
  120. package/src/sap/fe/core/converters/controls/Common/DataVisualization.ts +60 -33
  121. package/src/sap/fe/core/converters/controls/Common/Form.js +8 -6
  122. package/src/sap/fe/core/converters/controls/Common/Form.ts +11 -14
  123. package/src/sap/fe/core/converters/controls/Common/KPI.js +1 -1
  124. package/src/sap/fe/core/converters/controls/Common/KPI.ts +16 -15
  125. package/src/sap/fe/core/converters/controls/Common/Table.js +188 -157
  126. package/src/sap/fe/core/converters/controls/Common/Table.ts +279 -230
  127. package/src/sap/fe/core/converters/controls/Common/table/StandardActions.js +1 -1
  128. package/src/sap/fe/core/converters/controls/Common/table/StandardActions.ts +4 -4
  129. package/src/sap/fe/core/converters/controls/ListReport/FilterBar.js +57 -21
  130. package/src/sap/fe/core/converters/controls/ListReport/FilterBar.ts +71 -18
  131. package/src/sap/fe/core/converters/controls/ListReport/VisualFilters.js +30 -8
  132. package/src/sap/fe/core/converters/controls/ListReport/VisualFilters.ts +24 -7
  133. package/src/sap/fe/core/converters/controls/ObjectPage/Avatar.js +1 -1
  134. package/src/sap/fe/core/converters/controls/ObjectPage/HeaderFacet.js +43 -34
  135. package/src/sap/fe/core/converters/controls/ObjectPage/HeaderFacet.ts +37 -25
  136. package/src/sap/fe/core/converters/controls/ObjectPage/SubSection.js +85 -49
  137. package/src/sap/fe/core/converters/controls/ObjectPage/SubSection.ts +74 -50
  138. package/src/sap/fe/core/converters/helpers/Aggregation.js +54 -4
  139. package/src/sap/fe/core/converters/helpers/Aggregation.ts +56 -8
  140. package/src/sap/fe/core/converters/helpers/BindingHelper.js +1 -1
  141. package/src/sap/fe/core/converters/helpers/ConfigurableObject.js +6 -4
  142. package/src/sap/fe/core/converters/helpers/ConfigurableObject.ts +10 -2
  143. package/src/sap/fe/core/converters/helpers/DataFieldHelper.js +182 -0
  144. package/src/sap/fe/core/converters/helpers/DataFieldHelper.ts +167 -0
  145. package/src/sap/fe/core/converters/helpers/ID.js +3 -1
  146. package/src/sap/fe/core/converters/helpers/ID.ts +1 -0
  147. package/src/sap/fe/core/converters/helpers/IssueManager.js +1 -1
  148. package/src/sap/fe/core/converters/helpers/Key.js +1 -1
  149. package/src/sap/fe/core/converters/helpers/SelectionVariantHelper.js +1 -1
  150. package/src/sap/fe/core/converters/helpers/SelectionVariantHelper.ts +2 -3
  151. package/src/sap/fe/core/converters/objectPage/FormMenuActions.js +1 -1
  152. package/src/sap/fe/core/converters/objectPage/HeaderAndFooterAction.js +8 -14
  153. package/src/sap/fe/core/converters/objectPage/HeaderAndFooterAction.ts +6 -9
  154. package/src/sap/fe/core/converters/templates/ListReportConverter.js +31 -31
  155. package/src/sap/fe/core/converters/templates/ListReportConverter.ts +54 -47
  156. package/src/sap/fe/core/converters/templates/ObjectPageConverter.js +44 -15
  157. package/src/sap/fe/core/converters/templates/ObjectPageConverter.ts +64 -30
  158. package/src/sap/fe/core/designtime/AppComponent.designtime.js +1 -1
  159. package/src/sap/fe/core/formatters/CollaborationFormatter.js +1 -1
  160. package/src/sap/fe/core/formatters/FPMFormatter.js +1 -1
  161. package/src/sap/fe/core/formatters/KPIFormatter.js +1 -1
  162. package/src/sap/fe/core/formatters/StandardFormatter.js +13 -6
  163. package/src/sap/fe/core/formatters/StandardFormatter.ts +20 -14
  164. package/src/sap/fe/core/formatters/TableFormatter.js +1 -1
  165. package/src/sap/fe/core/formatters/TableFormatterTypes.js +1 -1
  166. package/src/sap/fe/core/formatters/ValueFormatter.js +1 -1
  167. package/src/sap/fe/core/fpm/Component.js +33 -7
  168. package/src/sap/fe/core/fpm/Component.ts +14 -0
  169. package/src/sap/fe/core/helpers/AnnotationEnum.js +1 -1
  170. package/src/sap/fe/core/helpers/AppStartupHelper.js +5 -4
  171. package/src/sap/fe/core/helpers/AppStartupHelper.ts +4 -3
  172. package/src/sap/fe/core/helpers/BindingToolkit.js +56 -24
  173. package/src/sap/fe/core/helpers/BindingToolkit.ts +67 -21
  174. package/src/sap/fe/core/helpers/ClassSupport.js +31 -3
  175. package/src/sap/fe/core/helpers/ClassSupport.ts +24 -1
  176. package/src/sap/fe/core/helpers/DynamicAnnotationPathHelper.js +1 -1
  177. package/src/sap/fe/core/helpers/EditState.js +1 -1
  178. package/src/sap/fe/core/helpers/ExcelFormatHelper.js +1 -1
  179. package/src/sap/fe/core/helpers/FPMHelper.js +1 -1
  180. package/src/sap/fe/core/helpers/KeepAliveHelper.js +1 -1
  181. package/src/sap/fe/core/helpers/KeepAliveRefreshTypes.js +1 -1
  182. package/src/sap/fe/core/helpers/LoaderUtils.js +39 -0
  183. package/src/sap/fe/core/helpers/LoaderUtils.ts +14 -0
  184. package/src/sap/fe/core/helpers/MassEditHelper.js +475 -99
  185. package/src/sap/fe/core/helpers/MassEditHelper.ts +468 -155
  186. package/src/sap/fe/core/helpers/MessageStrip.js +81 -0
  187. package/src/sap/fe/core/helpers/MessageStrip.ts +79 -0
  188. package/src/sap/fe/core/helpers/ModelHelper.js +1 -1
  189. package/src/sap/fe/core/helpers/PasteHelper.js +1 -1
  190. package/src/sap/fe/core/helpers/SemanticDateOperators.js +82 -36
  191. package/src/sap/fe/core/helpers/SemanticDateOperators.ts +52 -36
  192. package/src/sap/fe/core/helpers/SemanticKeyHelper.js +1 -1
  193. package/src/sap/fe/core/helpers/SideEffectsHelper.js +146 -0
  194. package/src/sap/fe/core/helpers/SideEffectsHelper.ts +128 -0
  195. package/src/sap/fe/core/helpers/StableIdHelper.js +1 -1
  196. package/src/sap/fe/core/helpers/Synchronization.js +1 -1
  197. package/src/sap/fe/core/helpers/ToES6Promise.js +32 -0
  198. package/src/sap/fe/core/helpers/ToES6Promise.ts +19 -0
  199. package/src/sap/fe/core/jsx-runtime/Fragment.js +16 -0
  200. package/src/sap/fe/core/jsx-runtime/Fragment.ts +3 -0
  201. package/src/sap/fe/core/jsx-runtime/ViewLoader.js +109 -0
  202. package/src/sap/fe/core/jsx-runtime/ViewLoader.tsx +47 -0
  203. package/src/sap/fe/core/jsx-runtime/jsx-control.js +119 -0
  204. package/src/sap/fe/core/jsx-runtime/jsx-control.ts +98 -0
  205. package/src/sap/fe/core/jsx-runtime/jsx-xml.js +105 -0
  206. package/src/sap/fe/core/jsx-runtime/jsx-xml.ts +89 -0
  207. package/src/sap/fe/core/jsx-runtime/jsx.js +12 -90
  208. package/src/sap/fe/core/jsx-runtime/jsx.ts +24 -85
  209. package/src/sap/fe/core/jsx-runtime/jsxs.js +1 -1
  210. package/src/sap/fe/core/jsx-runtime/useMDXComponents.js +179 -0
  211. package/src/sap/fe/core/jsx-runtime/useMDXComponents.tsx +150 -0
  212. package/src/sap/fe/core/library.js +2 -2
  213. package/src/sap/fe/core/library.support.js +1 -1
  214. package/src/sap/fe/core/manifestMerger/ChangePageConfiguration.js +1 -1
  215. package/src/sap/fe/core/messagebundle.properties +4 -41
  216. package/src/sap/fe/core/messagebundle_ar.properties +22 -45
  217. package/src/sap/fe/core/messagebundle_bg.properties +22 -45
  218. package/src/sap/fe/core/messagebundle_ca.properties +22 -45
  219. package/src/sap/fe/core/messagebundle_cs.properties +22 -45
  220. package/src/sap/fe/core/messagebundle_cy.properties +21 -44
  221. package/src/sap/fe/core/messagebundle_da.properties +22 -45
  222. package/src/sap/fe/core/messagebundle_de.properties +22 -45
  223. package/src/sap/fe/core/messagebundle_el.properties +22 -45
  224. package/src/sap/fe/core/messagebundle_en.properties +21 -44
  225. package/src/sap/fe/core/messagebundle_en_GB.properties +21 -44
  226. package/src/sap/fe/core/messagebundle_en_US_sappsd.properties +21 -42
  227. package/src/sap/fe/core/messagebundle_en_US_saprigi.properties +20 -40
  228. package/src/sap/fe/core/messagebundle_en_US_saptrc.properties +21 -42
  229. package/src/sap/fe/core/messagebundle_es.properties +22 -45
  230. package/src/sap/fe/core/messagebundle_es_MX.properties +22 -45
  231. package/src/sap/fe/core/messagebundle_et.properties +22 -45
  232. package/src/sap/fe/core/messagebundle_fi.properties +22 -45
  233. package/src/sap/fe/core/messagebundle_fr.properties +21 -44
  234. package/src/sap/fe/core/messagebundle_fr_CA.properties +20 -43
  235. package/src/sap/fe/core/messagebundle_hi.properties +22 -45
  236. package/src/sap/fe/core/messagebundle_hr.properties +22 -45
  237. package/src/sap/fe/core/messagebundle_hu.properties +22 -45
  238. package/src/sap/fe/core/messagebundle_id.properties +22 -45
  239. package/src/sap/fe/core/messagebundle_it.properties +22 -45
  240. package/src/sap/fe/core/messagebundle_iw.properties +22 -45
  241. package/src/sap/fe/core/messagebundle_ja.properties +22 -45
  242. package/src/sap/fe/core/messagebundle_kk.properties +22 -45
  243. package/src/sap/fe/core/messagebundle_ko.properties +27 -50
  244. package/src/sap/fe/core/messagebundle_lt.properties +22 -45
  245. package/src/sap/fe/core/messagebundle_lv.properties +22 -45
  246. package/src/sap/fe/core/messagebundle_ms.properties +22 -45
  247. package/src/sap/fe/core/messagebundle_nl.properties +24 -47
  248. package/src/sap/fe/core/messagebundle_no.properties +22 -45
  249. package/src/sap/fe/core/messagebundle_pl.properties +23 -46
  250. package/src/sap/fe/core/messagebundle_pt.properties +23 -46
  251. package/src/sap/fe/core/messagebundle_pt_PT.properties +22 -45
  252. package/src/sap/fe/core/messagebundle_ro.properties +22 -45
  253. package/src/sap/fe/core/messagebundle_ru.properties +22 -45
  254. package/src/sap/fe/core/messagebundle_sh.properties +22 -45
  255. package/src/sap/fe/core/messagebundle_sk.properties +22 -45
  256. package/src/sap/fe/core/messagebundle_sl.properties +22 -45
  257. package/src/sap/fe/core/messagebundle_sv.properties +22 -45
  258. package/src/sap/fe/core/messagebundle_th.properties +20 -43
  259. package/src/sap/fe/core/messagebundle_tr.properties +22 -45
  260. package/src/sap/fe/core/messagebundle_uk.properties +22 -45
  261. package/src/sap/fe/core/messagebundle_vi.properties +22 -45
  262. package/src/sap/fe/core/messagebundle_zh_CN.properties +22 -45
  263. package/src/sap/fe/core/messagebundle_zh_TW.properties +22 -45
  264. package/src/sap/fe/core/services/AsyncComponentServiceFactory.js +2 -2
  265. package/src/sap/fe/core/services/CacheHandlerServiceFactory.js +102 -74
  266. package/src/sap/fe/core/services/CacheHandlerServiceFactory.ts +62 -63
  267. package/src/sap/fe/core/services/EnvironmentServiceFactory.js +2 -2
  268. package/src/sap/fe/core/services/NavigationServiceFactory.js +11 -8
  269. package/src/sap/fe/core/services/NavigationServiceFactory.ts +10 -7
  270. package/src/sap/fe/core/services/ResourceModelServiceFactory.js +2 -2
  271. package/src/sap/fe/core/services/RoutingServiceFactory.js +2 -2
  272. package/src/sap/fe/core/services/ShellServicesFactory.js +22 -2
  273. package/src/sap/fe/core/services/ShellServicesFactory.ts +19 -0
  274. package/src/sap/fe/core/services/SideEffectsServiceFactory.js +4 -4
  275. package/src/sap/fe/core/services/SideEffectsServiceFactory.ts +2 -2
  276. package/src/sap/fe/core/services/TemplatedViewServiceFactory.js +251 -200
  277. package/src/sap/fe/core/services/TemplatedViewServiceFactory.ts +160 -144
  278. package/src/sap/fe/core/services/view/TemplatingErrorPage.controller.js +2 -2
  279. package/src/sap/fe/core/support/AnnotationIssue.support.js +1 -1
  280. package/src/sap/fe/core/support/CollectionFacetMissingID.support.js +1 -1
  281. package/src/sap/fe/core/support/CollectionFacetUnsupportedLevel.support.js +1 -1
  282. package/src/sap/fe/core/support/CommonHelper.js +1 -1
  283. package/src/sap/fe/core/support/Diagnostics.js +1 -1
  284. package/src/sap/fe/core/support/InvalidAnnotationColumnKey.support.js +1 -1
  285. package/src/sap/fe/core/templating/CommonFormatters.js +4 -3
  286. package/src/sap/fe/core/templating/CommonFormatters.ts +5 -1
  287. package/src/sap/fe/core/templating/CriticalityFormatters.js +1 -1
  288. package/src/sap/fe/core/templating/DataFieldFormatters.js +1 -1
  289. package/src/sap/fe/core/templating/DataModelPathHelper.js +8 -1
  290. package/src/sap/fe/core/templating/DataModelPathHelper.ts +5 -2
  291. package/src/sap/fe/core/templating/DisplayModeFormatter.js +1 -1
  292. package/src/sap/fe/core/templating/EntitySetHelper.js +4 -5
  293. package/src/sap/fe/core/templating/EntitySetHelper.ts +4 -3
  294. package/src/sap/fe/core/templating/FieldControlHelper.js +1 -1
  295. package/src/sap/fe/core/templating/FilterHelper.js +34 -15
  296. package/src/sap/fe/core/templating/FilterHelper.ts +28 -12
  297. package/src/sap/fe/core/templating/FilterTemplating.js +1 -1
  298. package/src/sap/fe/core/templating/PropertyFormatters.js +1 -1
  299. package/src/sap/fe/core/templating/PropertyHelper.js +1 -1
  300. package/src/sap/fe/core/templating/UIFormatters.js +5 -3
  301. package/src/sap/fe/core/templating/UIFormatters.ts +7 -5
  302. package/src/sap/fe/core/type/DateTimeWithTimezone.js +2 -2
  303. package/src/sap/fe/core/type/Email.js +2 -2
@@ -2,12 +2,14 @@
2
2
  * SAP UI development toolkit for HTML5 (SAPUI5)
3
3
  * (c) Copyright 2009-2021 SAP SE. All rights reserved
4
4
  */
5
- sap.ui.define(["sap/fe/core/converters/annotations/DataField", "sap/fe/core/converters/helpers/ConfigurableObject", "sap/fe/core/converters/helpers/ID", "sap/fe/core/converters/helpers/Key", "sap/fe/core/helpers/BindingToolkit", "../../../helpers/StableIdHelper", "../Common/Form"], function (DataField, ConfigurableObject, ID, Key, BindingToolkit, StableIdHelper, Form) {
5
+ sap.ui.define(["sap/fe/core/converters/annotations/DataField", "sap/fe/core/converters/helpers/ConfigurableObject", "sap/fe/core/converters/helpers/ID", "sap/fe/core/converters/helpers/Key", "sap/fe/core/helpers/BindingToolkit", "../../../helpers/StableIdHelper", "../../helpers/DataFieldHelper", "../Common/Form"], function (DataField, ConfigurableObject, ID, Key, BindingToolkit, StableIdHelper, DataFieldHelper, Form) {
6
6
  "use strict";
7
7
 
8
8
  var _exports = {};
9
9
  var getFormElementsFromManifest = Form.getFormElementsFromManifest;
10
10
  var FormElementType = Form.FormElementType;
11
+ var isReferencePropertyStaticallyHidden = DataFieldHelper.isReferencePropertyStaticallyHidden;
12
+ var isAnnotationFieldStaticallyHidden = DataFieldHelper.isAnnotationFieldStaticallyHidden;
11
13
  var generate = StableIdHelper.generate;
12
14
  var not = BindingToolkit.not;
13
15
  var getExpressionFromAnnotation = BindingToolkit.getExpressionFromAnnotation;
@@ -22,9 +24,9 @@ sap.ui.define(["sap/fe/core/converters/annotations/DataField", "sap/fe/core/conv
22
24
  var insertCustomElements = ConfigurableObject.insertCustomElements;
23
25
  var getSemanticObjectPath = DataField.getSemanticObjectPath;
24
26
 
25
- function ownKeys(object, enumerableOnly) { var keys = Object.keys(object); if (Object.getOwnPropertySymbols) { var symbols = Object.getOwnPropertySymbols(object); if (enumerableOnly) { symbols = symbols.filter(function (sym) { return Object.getOwnPropertyDescriptor(object, sym).enumerable; }); } keys.push.apply(keys, symbols); } return keys; }
27
+ function ownKeys(object, enumerableOnly) { var keys = Object.keys(object); if (Object.getOwnPropertySymbols) { var symbols = Object.getOwnPropertySymbols(object); enumerableOnly && (symbols = symbols.filter(function (sym) { return Object.getOwnPropertyDescriptor(object, sym).enumerable; })), keys.push.apply(keys, symbols); } return keys; }
26
28
 
27
- function _objectSpread(target) { for (var i = 1; i < arguments.length; i++) { var source = arguments[i] != null ? arguments[i] : {}; if (i % 2) { ownKeys(Object(source), true).forEach(function (key) { _defineProperty(target, key, source[key]); }); } else if (Object.getOwnPropertyDescriptors) { Object.defineProperties(target, Object.getOwnPropertyDescriptors(source)); } else { ownKeys(Object(source)).forEach(function (key) { Object.defineProperty(target, key, Object.getOwnPropertyDescriptor(source, key)); }); } } return target; }
29
+ function _objectSpread(target) { for (var i = 1; i < arguments.length; i++) { var source = null != arguments[i] ? arguments[i] : {}; i % 2 ? ownKeys(Object(source), !0).forEach(function (key) { _defineProperty(target, key, source[key]); }) : Object.getOwnPropertyDescriptors ? Object.defineProperties(target, Object.getOwnPropertyDescriptors(source)) : ownKeys(Object(source)).forEach(function (key) { Object.defineProperty(target, key, Object.getOwnPropertyDescriptor(source, key)); }); } return target; }
28
30
 
29
31
  function _defineProperty(obj, key, value) { if (key in obj) { Object.defineProperty(obj, key, { value: value, enumerable: true, configurable: true, writable: true }); } else { obj[key] = value; } return obj; }
30
32
 
@@ -200,7 +202,7 @@ sap.ui.define(["sap/fe/core/converters/annotations/DataField", "sap/fe/core/conv
200
202
  var _facetDefinition$anno, _facetDefinition$anno2, _facetDefinition$anno3;
201
203
 
202
204
  if (facetDefinition.$Type === "com.sap.vocabularies.UI.v1.ReferenceFacet" && !(((_facetDefinition$anno = facetDefinition.annotations) === null || _facetDefinition$anno === void 0 ? void 0 : (_facetDefinition$anno2 = _facetDefinition$anno.UI) === null || _facetDefinition$anno2 === void 0 ? void 0 : (_facetDefinition$anno3 = _facetDefinition$anno2.Hidden) === null || _facetDefinition$anno3 === void 0 ? void 0 : _facetDefinition$anno3.valueOf()) === true)) {
203
- var _annotations$UI, _annotations$UI$Hidde;
205
+ var _facetDefinition$Targ, _facetDefinition$Targ2;
204
206
 
205
207
  var headerFacetID = getHeaderFacetID({
206
208
  Facet: facetDefinition
@@ -231,25 +233,32 @@ sap.ui.define(["sap/fe/core/converters/annotations/DataField", "sap/fe/core/conv
231
233
  }
232
234
 
233
235
  var annotations = facetDefinition.annotations;
234
- return {
235
- type: HeaderFacetType.Annotation,
236
- facetType: FacetType.Reference,
237
- id: headerFacetID,
238
- containerId: getHeaderFacetContainerID({
239
- Facet: facetDefinition
240
- }),
241
- key: getHeaderFacetKey(facetDefinition, headerFacetID),
242
- flexSettings: {
243
- designtime: getDesignTimeMetadataSettingsForHeaderFacet(facetDefinition, collectionFacetDefinition, converterContext)
244
- },
245
- stashed: getStashedSettingsForHeaderFacet(facetDefinition, collectionFacetDefinition, converterContext),
246
- visible: compileExpression(not(equal(getExpressionFromAnnotation(annotations === null || annotations === void 0 ? void 0 : (_annotations$UI = annotations.UI) === null || _annotations$UI === void 0 ? void 0 : (_annotations$UI$Hidde = _annotations$UI.Hidden) === null || _annotations$UI$Hidde === void 0 ? void 0 : _annotations$UI$Hidde.valueOf()), true))),
247
- annotationPath: "".concat(converterContext.getEntitySetBasedAnnotationPath(facetDefinition.fullyQualifiedName), "/"),
248
- targetAnnotationValue: targetAnnotationValue,
249
- targetAnnotationType: targetAnnotationType,
250
- headerFormData: headerFormData,
251
- headerDataPointData: headerDataPointData
252
- };
236
+
237
+ if (((_facetDefinition$Targ = facetDefinition.Target) === null || _facetDefinition$Targ === void 0 ? void 0 : (_facetDefinition$Targ2 = _facetDefinition$Targ.$target) === null || _facetDefinition$Targ2 === void 0 ? void 0 : _facetDefinition$Targ2.term) === "com.sap.vocabularies.UI.v1.Chart" && isAnnotationFieldStaticallyHidden(facetDefinition)) {
238
+ return undefined;
239
+ } else {
240
+ var _annotations$UI, _annotations$UI$Hidde;
241
+
242
+ return {
243
+ type: HeaderFacetType.Annotation,
244
+ facetType: FacetType.Reference,
245
+ id: headerFacetID,
246
+ containerId: getHeaderFacetContainerID({
247
+ Facet: facetDefinition
248
+ }),
249
+ key: getHeaderFacetKey(facetDefinition, headerFacetID),
250
+ flexSettings: {
251
+ designtime: getDesignTimeMetadataSettingsForHeaderFacet(facetDefinition, collectionFacetDefinition, converterContext)
252
+ },
253
+ stashed: getStashedSettingsForHeaderFacet(facetDefinition, collectionFacetDefinition, converterContext),
254
+ visible: compileExpression(not(equal(getExpressionFromAnnotation(annotations === null || annotations === void 0 ? void 0 : (_annotations$UI = annotations.UI) === null || _annotations$UI === void 0 ? void 0 : (_annotations$UI$Hidde = _annotations$UI.Hidden) === null || _annotations$UI$Hidde === void 0 ? void 0 : _annotations$UI$Hidde.valueOf()), true))),
255
+ annotationPath: "".concat(converterContext.getEntitySetBasedAnnotationPath(facetDefinition.fullyQualifiedName), "/"),
256
+ targetAnnotationValue: targetAnnotationValue,
257
+ targetAnnotationType: targetAnnotationType,
258
+ headerFormData: headerFormData,
259
+ headerDataPointData: headerDataPointData
260
+ };
261
+ }
253
262
  }
254
263
 
255
264
  return undefined;
@@ -309,9 +318,9 @@ sap.ui.define(["sap/fe/core/converters/annotations/DataField", "sap/fe/core/conv
309
318
  }; // ReferenceURLFacet and CollectionFacet do not have Target property.
310
319
 
311
320
  if (facetDefinition.$Type !== "com.sap.vocabularies.UI.v1.ReferenceURLFacet" && facetDefinition.$Type !== "com.sap.vocabularies.UI.v1.CollectionFacet") {
312
- var _facetDefinition$Targ, _facetDefinition$Targ2;
321
+ var _facetDefinition$Targ3, _facetDefinition$Targ4;
313
322
 
314
- annotationType = annotationTypeMap[(_facetDefinition$Targ = facetDefinition.Target) === null || _facetDefinition$Targ === void 0 ? void 0 : (_facetDefinition$Targ2 = _facetDefinition$Targ.$target) === null || _facetDefinition$Targ2 === void 0 ? void 0 : _facetDefinition$Targ2.term] || TargetAnnotationType.None;
323
+ annotationType = annotationTypeMap[(_facetDefinition$Targ3 = facetDefinition.Target) === null || _facetDefinition$Targ3 === void 0 ? void 0 : (_facetDefinition$Targ4 = _facetDefinition$Targ3.$target) === null || _facetDefinition$Targ4 === void 0 ? void 0 : _facetDefinition$Targ4.term] || TargetAnnotationType.None;
315
324
  }
316
325
 
317
326
  return annotationType;
@@ -347,15 +356,15 @@ sap.ui.define(["sap/fe/core/converters/annotations/DataField", "sap/fe/core/conv
347
356
  var annotationBasedFormElements = []; // ReferenceURLFacet and CollectionFacet do not have Target property.
348
357
 
349
358
  if (facetDefinition.$Type !== "com.sap.vocabularies.UI.v1.ReferenceURLFacet" && facetDefinition.$Type !== "com.sap.vocabularies.UI.v1.CollectionFacet") {
350
- var _facetDefinition$Targ3, _facetDefinition$Targ4;
359
+ var _facetDefinition$Targ5, _facetDefinition$Targ6;
351
360
 
352
- (_facetDefinition$Targ3 = facetDefinition.Target) === null || _facetDefinition$Targ3 === void 0 ? void 0 : (_facetDefinition$Targ4 = _facetDefinition$Targ3.$target) === null || _facetDefinition$Targ4 === void 0 ? void 0 : _facetDefinition$Targ4.Data.forEach(function (dataField) {
361
+ (_facetDefinition$Targ5 = facetDefinition.Target) === null || _facetDefinition$Targ5 === void 0 ? void 0 : (_facetDefinition$Targ6 = _facetDefinition$Targ5.$target) === null || _facetDefinition$Targ6 === void 0 ? void 0 : _facetDefinition$Targ6.Data.forEach(function (dataField) {
353
362
  var _dataField$annotation, _dataField$annotation2, _dataField$annotation3;
354
363
 
355
364
  if (!(((_dataField$annotation = dataField.annotations) === null || _dataField$annotation === void 0 ? void 0 : (_dataField$annotation2 = _dataField$annotation.UI) === null || _dataField$annotation2 === void 0 ? void 0 : (_dataField$annotation3 = _dataField$annotation2.Hidden) === null || _dataField$annotation3 === void 0 ? void 0 : _dataField$annotation3.valueOf()) === true)) {
356
365
  var semanticObjectAnnotationPath = getSemanticObjectPath(converterContext, dataField);
357
366
 
358
- if (dataField.$Type === "com.sap.vocabularies.UI.v1.DataField" || dataField.$Type === "com.sap.vocabularies.UI.v1.DataFieldWithUrl" || dataField.$Type === "com.sap.vocabularies.UI.v1.DataFieldWithNavigationPath" || dataField.$Type === "com.sap.vocabularies.UI.v1.DataFieldWithIntentBasedNavigation" || dataField.$Type === "com.sap.vocabularies.UI.v1.DataFieldWithAction") {
367
+ if ((dataField.$Type === "com.sap.vocabularies.UI.v1.DataField" || dataField.$Type === "com.sap.vocabularies.UI.v1.DataFieldWithUrl" || dataField.$Type === "com.sap.vocabularies.UI.v1.DataFieldWithNavigationPath" || dataField.$Type === "com.sap.vocabularies.UI.v1.DataFieldWithIntentBasedNavigation" || dataField.$Type === "com.sap.vocabularies.UI.v1.DataFieldWithAction") && !isReferencePropertyStaticallyHidden(dataField)) {
359
368
  var _dataField$Value, _dataField$Value$$tar, _dataField$Value$$tar2, _dataField$Value$$tar3, _dataField$Value$$tar4, _annotations$UI2, _annotations$UI2$Hidd, _dataField$Value2, _dataField$Value2$$ta, _dataField$Value2$$ta2, _dataField$Value2$$ta3;
360
369
 
361
370
  var annotations = dataField.annotations;
@@ -371,7 +380,7 @@ sap.ui.define(["sap/fe/core/converters/annotations/DataField", "sap/fe/core/conv
371
380
  annotationPath: "".concat(converterContext.getEntitySetBasedAnnotationPath(dataField.fullyQualifiedName), "/"),
372
381
  semanticObjectPath: semanticObjectAnnotationPath
373
382
  });
374
- } else if (dataField.$Type === "com.sap.vocabularies.UI.v1.DataFieldForAnnotation") {
383
+ } else if (dataField.$Type === "com.sap.vocabularies.UI.v1.DataFieldForAnnotation" && !isReferencePropertyStaticallyHidden(dataField)) {
375
384
  var _dataField$Target, _dataField$Target$$ta, _dataField$Target$$ta2, _dataField$Target$$ta3, _dataField$Target$$ta4, _annotations$UI3, _annotations$UI3$Hidd, _dataField$Target2, _dataField$Target2$$t, _dataField$Target2$$t2, _dataField$Target2$$t3, _dataField$Target2$$t4, _dataField$Label;
376
385
 
377
386
  var _annotations = dataField.annotations;
@@ -399,12 +408,12 @@ sap.ui.define(["sap/fe/core/converters/annotations/DataField", "sap/fe/core/conv
399
408
  function getDataPointData(facetDefinition) {
400
409
  var type = HeaderDataPointType.Content;
401
410
 
402
- if (facetDefinition.$Type === "com.sap.vocabularies.UI.v1.ReferenceFacet") {
403
- var _facetDefinition$Targ5, _facetDefinition$Targ6, _facetDefinition$Targ7, _facetDefinition$Targ8;
411
+ if (facetDefinition.$Type === "com.sap.vocabularies.UI.v1.ReferenceFacet" && !isAnnotationFieldStaticallyHidden(facetDefinition)) {
412
+ var _facetDefinition$Targ7, _facetDefinition$Targ8, _facetDefinition$Targ9, _facetDefinition$Targ10;
404
413
 
405
- if (((_facetDefinition$Targ5 = facetDefinition.Target) === null || _facetDefinition$Targ5 === void 0 ? void 0 : (_facetDefinition$Targ6 = _facetDefinition$Targ5.$target) === null || _facetDefinition$Targ6 === void 0 ? void 0 : _facetDefinition$Targ6.Visualization) === "UI.VisualizationType/Progress") {
414
+ if (((_facetDefinition$Targ7 = facetDefinition.Target) === null || _facetDefinition$Targ7 === void 0 ? void 0 : (_facetDefinition$Targ8 = _facetDefinition$Targ7.$target) === null || _facetDefinition$Targ8 === void 0 ? void 0 : _facetDefinition$Targ8.Visualization) === "UI.VisualizationType/Progress") {
406
415
  type = HeaderDataPointType.ProgressIndicator;
407
- } else if (((_facetDefinition$Targ7 = facetDefinition.Target) === null || _facetDefinition$Targ7 === void 0 ? void 0 : (_facetDefinition$Targ8 = _facetDefinition$Targ7.$target) === null || _facetDefinition$Targ8 === void 0 ? void 0 : _facetDefinition$Targ8.Visualization) === "UI.VisualizationType/Rating") {
416
+ } else if (((_facetDefinition$Targ9 = facetDefinition.Target) === null || _facetDefinition$Targ9 === void 0 ? void 0 : (_facetDefinition$Targ10 = _facetDefinition$Targ9.$target) === null || _facetDefinition$Targ10 === void 0 ? void 0 : _facetDefinition$Targ10.Visualization) === "UI.VisualizationType/Rating") {
408
417
  type = HeaderDataPointType.RatingIndicator;
409
418
  }
410
419
  }
@@ -495,4 +504,4 @@ sap.ui.define(["sap/fe/core/converters/annotations/DataField", "sap/fe/core/conv
495
504
 
496
505
  return _exports;
497
506
  }, false);
498
- //# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIkhlYWRlckZhY2V0LnRzIl0sIm5hbWVzIjpbIkhlYWRlckZhY2V0VHlwZSIsIkZhY2V0VHlwZSIsIkZsZXhEZXNpZ25UaW1lVHlwZSIsIkhlYWRlckRhdGFQb2ludFR5cGUiLCJUYXJnZXRBbm5vdGF0aW9uVHlwZSIsImdldEhlYWRlckZhY2V0c0Zyb21Bbm5vdGF0aW9ucyIsImNvbnZlcnRlckNvbnRleHQiLCJoZWFkZXJGYWNldHMiLCJnZXRFbnRpdHlUeXBlIiwiYW5ub3RhdGlvbnMiLCJVSSIsIkhlYWRlckZhY2V0cyIsImZvckVhY2giLCJmYWNldCIsImhlYWRlckZhY2V0IiwiY3JlYXRlSGVhZGVyRmFjZXQiLCJwdXNoIiwiZ2V0SGVhZGVyRmFjZXRzRnJvbU1hbmlmZXN0IiwibWFuaWZlc3RDdXN0b21IZWFkZXJGYWNldHMiLCJjdXN0b21IZWFkZXJGYWNldHMiLCJPYmplY3QiLCJrZXlzIiwibWFuaWZlc3RIZWFkZXJGYWNldEtleSIsImN1c3RvbUhlYWRlckZhY2V0IiwiY3JlYXRlQ3VzdG9tSGVhZGVyRmFjZXQiLCJnZXRTdGFzaGVkU2V0dGluZ3NGb3JIZWFkZXJGYWNldCIsImZhY2V0RGVmaW5pdGlvbiIsImNvbGxlY3Rpb25GYWNldERlZmluaXRpb24iLCIkVHlwZSIsImhlYWRlckZhY2V0SUQiLCJnZW5lcmF0ZSIsIkZhY2V0IiwiaGVhZGVyRmFjZXRzQ29udHJvbENvbmZpZyIsImdldE1hbmlmZXN0V3JhcHBlciIsImdldEhlYWRlckZhY2V0cyIsInN0YXNoZWRTZXR0aW5nIiwic3Rhc2hlZCIsImdldERlc2lnblRpbWVNZXRhZGF0YVNldHRpbmdzRm9ySGVhZGVyRmFjZXQiLCJkZXNpZ25UaW1lTWV0YWRhdGEiLCJEZWZhdWx0IiwiTm90QWRhcHRhYmxlVHJlZSIsImRlc2lnblRpbWUiLCJmbGV4U2V0dGluZ3MiLCJkZXNpZ250aW1lIiwiTm90QWRhcHRhYmxlIiwiTm90QWRhcHRhYmxlVmlzaWJpbGl0eSIsImNyZWF0ZVJlZmVyZW5jZUhlYWRlckZhY2V0IiwiSGlkZGVuIiwidmFsdWVPZiIsImdldEhlYWRlckZhY2V0SUQiLCJnZXRIZWFkZXJGYWNldEtleSIsImZhY2V0RGVmaW5pdGlvblRvQ2hlY2siLCJmYWxsYmFjayIsIklEIiwidG9TdHJpbmciLCJMYWJlbCIsInRhcmdldEFubm90YXRpb25WYWx1ZSIsIlRhcmdldCIsInZhbHVlIiwidGFyZ2V0QW5ub3RhdGlvblR5cGUiLCJnZXRUYXJnZXRBbm5vdGF0aW9uVHlwZSIsImhlYWRlckZvcm1EYXRhIiwiaGVhZGVyRGF0YVBvaW50RGF0YSIsIkZpZWxkR3JvdXAiLCJnZXRGaWVsZEdyb3VwRm9ybURhdGEiLCJEYXRhUG9pbnQiLCJnZXREYXRhUG9pbnREYXRhIiwidHlwZSIsIkFubm90YXRpb24iLCJmYWNldFR5cGUiLCJSZWZlcmVuY2UiLCJpZCIsImNvbnRhaW5lcklkIiwiZ2V0SGVhZGVyRmFjZXRDb250YWluZXJJRCIsImtleSIsInZpc2libGUiLCJjb21waWxlRXhwcmVzc2lvbiIsIm5vdCIsImVxdWFsIiwiZ2V0RXhwcmVzc2lvbkZyb21Bbm5vdGF0aW9uIiwiYW5ub3RhdGlvblBhdGgiLCJnZXRFbnRpdHlTZXRCYXNlZEFubm90YXRpb25QYXRoIiwiZnVsbHlRdWFsaWZpZWROYW1lIiwidW5kZWZpbmVkIiwiY3JlYXRlQ29sbGVjdGlvbkhlYWRlckZhY2V0IiwiZmFjZXRzIiwiRmFjZXRzIiwiQ29sbGVjdGlvbiIsImFubm90YXRpb25UeXBlIiwiTm9uZSIsImFubm90YXRpb25UeXBlTWFwIiwiQ2hhcnQiLCJJZGVudGlmaWNhdGlvbiIsIkNvbnRhY3QiLCJBZGRyZXNzIiwiJHRhcmdldCIsInRlcm0iLCJFcnJvciIsImZvcm1FbGVtZW50cyIsImluc2VydEN1c3RvbUVsZW1lbnRzIiwiZ2V0Rm9ybUVsZW1lbnRzRnJvbUFubm90YXRpb25zIiwiZ2V0Rm9ybUVsZW1lbnRzRnJvbU1hbmlmZXN0IiwiZ2V0SGVhZGVyRmFjZXRGb3JtSUQiLCJsYWJlbCIsImFubm90YXRpb25CYXNlZEZvcm1FbGVtZW50cyIsIkRhdGEiLCJkYXRhRmllbGQiLCJzZW1hbnRpY09iamVjdEFubm90YXRpb25QYXRoIiwiZ2V0U2VtYW50aWNPYmplY3RQYXRoIiwiaXNWYWx1ZU11bHRpbGluZVRleHQiLCJWYWx1ZSIsIk11bHRpTGluZVRleHQiLCJGb3JtRWxlbWVudFR5cGUiLCJLZXlIZWxwZXIiLCJnZW5lcmF0ZUtleUZyb21EYXRhRmllbGQiLCJDb21tb24iLCJpZFByZWZpeCIsInNlbWFudGljT2JqZWN0UGF0aCIsIkNvbnRlbnQiLCJWaXN1YWxpemF0aW9uIiwiUHJvZ3Jlc3NJbmRpY2F0b3IiLCJSYXRpbmdJbmRpY2F0b3IiLCJnZW5lcmF0ZUJpbmRpbmciLCJyZXF1ZXN0R3JvdXBJZCIsImdyb3VwSWQiLCJpbmRleE9mIiwiY3VzdG9tSGVhZGVyRmFjZXREZWZpbml0aW9uIiwiaGVhZGVyRmFjZXRLZXkiLCJjdXN0b21IZWFkZXJGYWNldElEIiwiZ2V0Q3VzdG9tSGVhZGVyRmFjZXRJRCIsInBvc2l0aW9uIiwicGxhY2VtZW50IiwiUGxhY2VtZW50IiwiQWZ0ZXIiLCJmcmFnbWVudE5hbWUiLCJ0ZW1wbGF0ZSIsIm5hbWUiLCJ0aXRsZSIsInN1YlRpdGxlIiwiYmluZGluZyIsInRlbXBsYXRlRWRpdCJdLCJtYXBwaW5ncyI6IjtBQUFBO0FBQ0E7QUFDQTs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7O0FBd0JBO0FBQ0E7QUFDQTtBQUNBO01BRVlBLGU7O2FBQUFBLGU7QUFBQUEsSUFBQUEsZTtBQUFBQSxJQUFBQSxlO0tBQUFBLGUsS0FBQUEsZTs7O01BS0FDLFM7O2FBQUFBLFM7QUFBQUEsSUFBQUEsUztBQUFBQSxJQUFBQSxTO0tBQUFBLFMsS0FBQUEsUzs7O01BS0FDLGtCOzthQUFBQSxrQjtBQUFBQSxJQUFBQSxrQjtBQUFBQSxJQUFBQSxrQjtBQUFBQSxJQUFBQSxrQjtBQUFBQSxJQUFBQSxrQjtLQUFBQSxrQixLQUFBQSxrQjs7O01BaUJQQyxtQjs7YUFBQUEsbUI7QUFBQUEs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QUFFQyxRQUFBQSxVQUFVLEVBQUV6QyxrQkFBa0IsQ0FBQ3FDO0FBQWpDLE9BQVAsR0FBc0R1RiwyQkFBMkIsQ0FBQ3BGLFlBQWxGLENBYk47QUFjTmlHLE1BQUFBLE9BQU8sRUFBRWpCLGVBQWUsQ0FBQ0ksMkJBQTJCLENBQUNILGNBQTdCLENBZGxCO0FBZU5pQixNQUFBQSxZQUFZLEVBQUVkLDJCQUEyQixDQUFDYztBQWZwQyxLQUFQO0FBaUJBIiwic291cmNlUm9vdCI6Ii4iLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgdHlwZSB7XG5cdERhdGFGaWVsZEFic3RyYWN0VHlwZXMsXG5cdERhdGFQb2ludCxcblx0RmFjZXRUeXBlcyxcblx0RmllbGRHcm91cCxcblx0UmVmZXJlbmNlRmFjZXRUeXBlc1xufSBmcm9tIFwiQHNhcC11eC92b2NhYnVsYXJpZXMtdHlwZXMvdm9jYWJ1bGFyaWVzL1VJXCI7XG5pbXBvcnQgeyBVSUFubm90YXRpb25UeXBlcyB9IGZyb20gXCJAc2FwLXV4L3ZvY2FidWxhcmllcy10eXBlcy92b2NhYnVsYXJpZXMvVUlcIjtcbmltcG9ydCB7IGdldFNlbWFudGljT2JqZWN0UGF0aCB9IGZyb20gXCJzYXAvZmUvY29yZS9jb252ZXJ0ZXJzL2Fubm90YXRpb25zL0RhdGFGaWVsZFwiO1xuaW1wb3J0IHR5cGUgeyBDb25maWd1cmFibGVPYmplY3QsIENvbmZpZ3VyYWJsZVJlY29yZCwgQ3VzdG9tRWxlbWVudCwgUG9zaXRpb24gfSBmcm9tIFwic2FwL2ZlL2NvcmUvY29udmVydGVycy9oZWxwZXJzL0NvbmZpZ3VyYWJsZU9iamVjdFwiO1xuaW1wb3J0IHsgaW5zZXJ0Q3VzdG9tRWxlbWVudHMsIFBsYWNlbWVudCB9IGZyb20gXCJzYXAvZmUvY29yZS9jb252ZXJ0ZXJzL2hlbHBlcnMvQ29uZmlndXJhYmxlT2JqZWN0XCI7XG5pbXBvcnQge1xuXHRnZXRDdXN0b21IZWFkZXJGYWNldElELFxuXHRnZXRIZWFkZXJGYWNldENvbnRhaW5lcklELFxuXHRnZXRIZWFkZXJGYWNldEZvcm1JRCxcblx0Z2V0SGVhZGVyRmFjZXRJRFxufSBmcm9tIFwic2FwL2ZlL2NvcmUvY29udmVydGVycy9oZWxwZXJzL0lEXCI7XG5pbXBvcnQgeyBLZXlIZWxwZXIgfSBmcm9tIFwic2FwL2ZlL2NvcmUvY29udmVydGVycy9oZWxwZXJzL0tleVwiO1xuaW1wb3J0IHR5cGUgeyBNYW5pZmVzdEhlYWRlckZhY2V0IH0gZnJvbSBcInNhcC9mZS9jb3JlL2NvbnZlcnRlcnMvTWFuaWZlc3RTZXR0aW5nc1wiO1xuaW1wb3J0IHR5cGUgeyBDb21waWxlZEJpbmRpbmdUb29sa2l0RXhwcmVzc2lvbiB9IGZyb20gXCJzYXAvZmUvY29yZS9oZWxwZXJzL0JpbmRpbmdUb29sa2l0XCI7XG5pbXBvcnQgeyBjb21waWxlRXhwcmVzc2lvbiwgZXF1YWwsIGdldEV4cHJlc3Npb25Gcm9tQW5ub3RhdGlvbiwgbm90IH0gZnJvbSBcInNhcC9mZS9jb3JlL2hlbHBlcnMvQmluZGluZ1Rvb2xraXRcIjtcbmltcG9ydCB7IGdlbmVyYXRlIH0gZnJvbSBcIi4uLy4uLy4uL2hlbHBlcnMvU3RhYmxlSWRIZWxwZXJcIjtcbmltcG9ydCB0eXBlIENvbnZlcnRlckNvbnRleHQgZnJvbSBcIi4uLy4uL0NvbnZlcnRlckNvbnRleHRcIjtcbmltcG9ydCB0eXBlIHsgQW5ub3RhdGlvbkZvcm1FbGVtZW50LCBGb3JtRWxlbWVudCB9IGZyb20gXCIuLi9Db21tb24vRm9ybVwiO1xuaW1wb3J0IHsgRm9ybUVsZW1lbnRUeXBlLCBnZXRGb3JtRWxlbWVudHNGcm9tTWFuaWZlc3QgfSBmcm9tIFwiLi4vQ29tbW9uL0Zvcm1cIjtcblxuLy8gcmVnaW9uIGRlZmluaXRpb25zXG4vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy9cbi8vIERlZmluaXRpb25zOiBIZWFkZXIgRmFjZXQgVHlwZXMsIEdlbmVyaWMgT1AgSGVhZGVyIEZhY2V0LCBNYW5pZmVzdCBQcm9wZXJ0aWVzIGZvciBDdXN0b20gSGVhZGVyIEZhY2V0XG4vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy9cblxuZXhwb3J0IGVudW0gSGVhZGVyRmFjZXRUeXBlIHtcblx0QW5ub3RhdGlvbiA9IFwiQW5ub3RhdGlvblwiLFxuXHRYTUxGcmFnbWVudCA9IFwiWE1MRnJhZ21lbnRcIlxufVxuXG5leHBvcnQgZW51bSBGYWNldFR5cGUge1xuXHRSZWZlcmVuY2UgPSBcIlJlZmVyZW5jZVwiLFxuXHRDb2xsZWN0aW9uID0gXCJDb2xsZWN0aW9uXCJcbn1cblxuZXhwb3J0IGVudW0gRmxleERlc2lnblRpbWVUeXBlIHtcblx0RGVmYXVsdCA9IFwiRGVmYXVsdFwiLFxuXHROb3RBZGFwdGFibGUgPSBcIm5vdC1hZGFwdGFibGVcIiwgLy8gZGlzYWJsZSBhbGwgYWN0aW9ucyBvbiB0aGF0IGluc3RhbmNlXG5cdE5vdEFkYXB0YWJsZVRyZWUgPSBcIm5vdC1hZGFwdGFibGUtdHJlZVwiLCAvLyBkaXNhYmxlIGFsbCBhY3Rpb25zIG9uIHRoYXQgaW5zdGFuY2UgYW5kIG9uIGFsbCBjaGlsZHJlbiBvZiB0aGF0IGluc3RhbmNlXG5cdE5vdEFkYXB0YWJsZVZpc2liaWxpdHkgPSBcIm5vdC1hZGFwdGFibGUtdmlzaWJpbGl0eVwiIC8vIGRpc2FibGUgYWxsIGFjdGlvbnMgdGhhdCBpbmZsdWVuY2UgdGhlIHZpc2liaWxpdHksIG5hbWVseSByZXZlYWwgYW5kIHJlbW92ZVxufVxuXG5leHBvcnQgdHlwZSBGbGV4U2V0dGluZ3MgPSB7XG5cdGRlc2lnbnRpbWU/OiBGbGV4RGVzaWduVGltZVR5cGU7XG59O1xuXG50eXBlIEhlYWRlckZvcm1EYXRhID0ge1xuXHRpZDogc3RyaW5nO1xuXHRsYWJlbD86IHN0cmluZztcblx0Zm9ybUVsZW1lbnRzOiBGb3JtRWxlbWVudFtdO1xufTtcblxuZW51bSBIZWFkZXJEYXRhUG9pbnRUeXBlIHtcblx0UHJvZ3Jlc3NJbmRpY2F0b3IgPSBcIlByb2dyZXNzSW5kaWNhdG9yXCIsXG5cdFJhdGluZ0luZGljYXRvciA9IFwiUmF0aW5nSW5kaWNhdG9yXCIsXG5cdENvbnRlbnQgPSBcIkNvbnRlbnRcIlxufVxuXG50eXBlIEhlYWRlckRhdGFQb2ludERhdGEgPSB7XG5cdHR5cGU6IEhlYWRlckRhdGFQb2ludFR5cGU7XG59O1xuXG5lbnVtIFRhcmdldEFubm90YXRpb25UeXBlIHtcblx0Tm9uZSA9IFwiTm9uZVwiLFxuXHREYXRhUG9pbnQgPSBcIkRhdGFQb2ludFwiLFxuXHRDaGFydCA9IFwiQ2hhcnRcIixcblx0SWRlbnRpZmljYXRpb24gPSBcIklkZW50aWZpY2F0aW9uXCIsXG5cdENvbnRhY3QgPSBcIkNvbnRhY3RcIixcblx0QWRkcmVzcyA9IFwiQWRkcmVzc1wiLFxuXHRGaWVsZEdyb3VwID0gXCJGaWVsZEdyb3VwXCJcbn1cblxudHlwZSBCYXNlSGVhZGVyRmFjZXQgPSBDb25maWd1cmFibGVPYmplY3QgJiB7XG5cdHR5cGU/OiBIZWFkZXJGYWNldFR5cGU7IC8vIE1hbmlmZXN0IG9yIE1ldGFkYXRhXG5cdGlkOiBzdHJpbmc7XG5cdGNvbnRhaW5lcklkOiBzdHJpbmc7XG5cdGFubm90YXRpb25QYXRoPzogc3RyaW5nO1xuXHRmbGV4U2V0dGluZ3M6IEZsZXhTZXR0aW5ncztcblx0c3Rhc2hlZDogYm9vbGVhbjtcblx0dmlzaWJsZTogQ29tcGlsZWRCaW5kaW5nVG9vbGtpdEV4cHJlc3Npb247XG5cdHRhcmdldEFubm90YXRpb25WYWx1ZT86IHN0cmluZztcblx0dGFyZ2V0QW5ub3RhdGlvblR5cGU/OiBUYXJnZXRBbm5vdGF0aW9uVHlwZTtcbn07XG5cbnR5cGUgQmFzZVJlZmVyZW5jZUZhY2V0ID0gQmFzZUhlYWRlckZhY2V0ICYge1xuXHRmYWNldFR5cGU6IEZhY2V0VHlwZS5SZWZlcmVuY2U7XG59O1xuXG5leHBvcnQgdHlwZSBGaWVsZEdyb3VwRmFjZXQgPSBCYXNlUmVmZXJlbmNlRmFjZXQgJiB7XG5cdGhlYWRlckZvcm1EYXRhOiBIZWFkZXJGb3JtRGF0YTtcbn07XG5cbnR5cGUgRGF0YVBvaW50RmFjZXQgPSBCYXNlUmVmZXJlbmNlRmFjZXQgJiB7XG5cdGhlYWRlckRhdGFQb2ludERhdGE/OiBIZWFkZXJEYXRhUG9pbnREYXRhO1xufTtcblxudHlwZSBSZWZlcmVuY2VGYWNldCA9IEZpZWxkR3JvdXBGYWNldCB8IERhdGFQb2ludEZhY2V0O1xuXG5leHBvcnQgdHlwZSBDb2xsZWN0aW9uRmFjZXQgPSBCYXNlSGVhZGVyRmFjZXQgJiB7XG5cdGZhY2V0VHlwZTogRmFjZXRUeXBlLkNvbGxlY3Rpb247XG5cdGZhY2V0czogUmVmZXJlbmNlRmFjZXRbXTtcbn07XG5cbmV4cG9ydCB0eXBlIE9iamVjdFBhZ2VIZWFkZXJGYWNldCA9IFJlZmVyZW5jZUZhY2V0IHwgQ29sbGVjdGlvbkZhY2V0O1xuXG5leHBvcnQgdHlwZSBDdXN0b21PYmplY3RQYWdlSGVhZGVyRmFjZXQgPSBDdXN0b21FbGVtZW50PE9iamVjdFBhZ2VIZWFkZXJGYWNldD4gJiB7XG5cdGZyYWdtZW50TmFtZT86IHN0cmluZztcblx0dGl0bGU/OiBzdHJpbmc7XG5cdHN1YlRpdGxlPzogc3RyaW5nO1xuXHRzdGFzaGVkPzogYm9vbGVhbjtcblx0YmluZGluZz86IHN0cmluZztcblx0dGVtcGxhdGVFZGl0Pzogc3RyaW5nO1xufTtcblxuLy8gZW5kcmVnaW9uIGRlZmluaXRpb25zXG5cbi8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vL1xuLy8gQ29sbGVjdCBBbGwgSGVhZGVyIEZhY2V0czogQ3VzdG9tICh2aWEgTWFuaWZlc3QpIGFuZCBBbm5vdGF0aW9uIEJhc2VkICh2aWEgTWV0YW1vZGVsKVxuLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vXG5cbi8qKlxuICogUmV0cmlldmUgaGVhZGVyIGZhY2V0cyBmcm9tIGFubm90YXRpb25zLlxuICpcbiAqIEBwYXJhbSBjb252ZXJ0ZXJDb250ZXh0XG4gKiBAcmV0dXJucyBIZWFkZXIgZmFjZXRzIGZyb20gYW5ub3RhdGlvbnNcbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGdldEhlYWRlckZhY2V0c0Zyb21Bbm5vdGF0aW9ucyhjb252ZXJ0ZXJDb250ZXh0OiBDb252ZXJ0ZXJDb250ZXh0KTogT2JqZWN0UGFnZUhlYWRlckZhY2V0W10ge1xuXHRjb25zdCBoZWFkZXJGYWNldHM6IE9iamVjdFBhZ2VIZWFkZXJGYWNldFtdID0gW107XG5cdGNvbnZlcnRlckNvbnRleHQuZ2V0RW50aXR5VHlwZSgpLmFubm90YXRpb25zPy5VST8uSGVhZGVyRmFjZXRzPy5mb3JFYWNoKChmYWNldCkgPT4ge1xuXHRcdGNvbnN0IGhlYWRlckZhY2V0OiBPYmplY3RQYWdlSGVhZGVyRmFjZXQgfCB1bmRlZmluZWQgPSBjcmVhdGVIZWFkZXJGYWNldChmYWNldCwgY29udmVydGVyQ29udGV4dCk7XG5cdFx0aWYgKGhlYWRlckZhY2V0KSB7XG5cdFx0XHRoZWFkZXJGYWNldHMucHVzaChoZWFkZXJGYWNldCk7XG5cdFx0fVxuXHR9KTtcblxuXHRyZXR1cm4gaGVhZGVyRmFjZXRzO1xufVxuXG4vKipcbiAqIFJldHJpZXZlIGN1c3RvbSBoZWFkZXIgZmFjZXRzIGZyb20gbWFuaWZlc3QuXG4gKlxuICogQHBhcmFtIG1hbmlmZXN0Q3VzdG9tSGVhZGVyRmFjZXRzXG4gKiBAcmV0dXJucyBIZWFkZXJGYWNldHMgZnJvbSBtYW5pZmVzdFxuICovXG5leHBvcnQgZnVuY3Rpb24gZ2V0SGVhZGVyRmFjZXRzRnJvbU1hbmlmZXN0KFxuXHRtYW5pZmVzdEN1c3RvbUhlYWRlckZhY2V0czogQ29uZmlndXJhYmxlUmVjb3JkPE1hbmlmZXN0SGVhZGVyRmFjZXQ+XG4pOiBSZWNvcmQ8c3RyaW5nLCBDdXN0b21PYmplY3RQYWdlSGVhZGVyRmFjZXQ+IHtcblx0Y29uc3QgY3VzdG9tSGVhZGVyRmFjZXRzOiBSZWNvcmQ8c3RyaW5nLCBDdXN0b21PYmplY3RQYWdlSGVhZGVyRmFjZXQ+ID0ge307XG5cblx0T2JqZWN0LmtleXMobWFuaWZlc3RDdXN0b21IZWFkZXJGYWNldHMpLmZvckVhY2goKG1hbmlmZXN0SGVhZGVyRmFjZXRLZXkpID0+IHtcblx0XHRjb25zdCBjdXN0b21IZWFkZXJGYWNldDogTWFuaWZlc3RIZWFkZXJGYWNldCA9IG1hbmlmZXN0Q3VzdG9tSGVhZGVyRmFjZXRzW21hbmlmZXN0SGVhZGVyRmFjZXRLZXldO1xuXHRcdGN1c3RvbUhlYWRlckZhY2V0c1ttYW5pZmVzdEhlYWRlckZhY2V0S2V5XSA9IGNyZWF0ZUN1c3RvbUhlYWRlckZhY2V0KGN1c3RvbUhlYWRlckZhY2V0LCBtYW5pZmVzdEhlYWRlckZhY2V0S2V5KTtcblx0fSk7XG5cblx0cmV0dXJuIGN1c3RvbUhlYWRlckZhY2V0cztcbn1cblxuLyoqXG4gKiBSZXRyaWV2ZSBzdGFzaGVkIHNldHRpbmdzIGZvciBoZWFkZXIgZmFjZXRzIGZyb20gbWFuaWZlc3QuXG4gKlxuICogQHBhcmFtIGZhY2V0RGVmaW5pdGlvblxuICogQHBhcmFtIGNvbGxlY3Rpb25GYWNldERlZmluaXRpb25cbiAqIEBwYXJhbSBjb252ZXJ0ZXJDb250ZXh0XG4gKiBAcmV0dXJucyBTdGFzaGVkIHNldHRpbmcgZm9yIGhlYWRlciBmYWNldCBvciBmYWxzZVxuICovXG5leHBvcnQgZnVuY3Rpb24gZ2V0U3Rhc2hlZFNldHRpbmdzRm9ySGVhZGVyRmFjZXQoXG5cdGZhY2V0RGVmaW5pdGlvbjogRmFjZXRUeXBlcyxcblx0Y29sbGVjdGlvbkZhY2V0RGVmaW5pdGlvbjogRmFjZXRUeXBlcyxcblx0Y29udmVydGVyQ29udGV4dDogQ29udmVydGVyQ29udGV4dFxuKTogYm9vbGVhbiB7XG5cdC8vIFdoZW4gYSBIZWFkZXJGYWNldCBpcyBuZXN0ZWQgaW5zaWRlIGEgQ29sbGVjdGlvbkZhY2V0LCBzdGFzaGluZyBpcyBub3Qgc3VwcG9ydGVkXG5cdGlmIChcblx0XHRmYWNldERlZmluaXRpb24uJFR5cGUgPT09IFVJQW5ub3RhdGlvblR5cGVzLlJlZmVyZW5jZUZhY2V0ICYmXG5cdFx0Y29sbGVjdGlvbkZhY2V0RGVmaW5pdGlvbi4kVHlwZSA9PT0gVUlBbm5vdGF0aW9uVHlwZXMuQ29sbGVjdGlvbkZhY2V0XG5cdCkge1xuXHRcdHJldHVybiBmYWxzZTtcblx0fVxuXHRjb25zdCBoZWFkZXJGYWNldElEID0gZ2VuZXJhdGUoW3sgRmFjZXQ6IGZhY2V0RGVmaW5pdGlvbiB9XSk7XG5cdGNvbnN0IGhlYWRlckZhY2V0c0NvbnRyb2xDb25maWcgPSBjb252ZXJ0ZXJDb250ZXh0LmdldE1hbmlmZXN0V3JhcHBlcigpLmdldEhlYWRlckZhY2V0cygpO1xuXHRjb25zdCBzdGFzaGVkU2V0dGluZyA9IGhlYWRlckZhY2V0c0NvbnRyb2xDb25maWdbaGVhZGVyRmFjZXRJRF0/LnN0YXNoZWQ7XG5cdHJldHVybiBzdGFzaGVkU2V0dGluZyA9PT0gdHJ1ZTtcbn1cblxuLyoqXG4gKiBSZXRyaWV2ZSBmbGV4aWJpbGl0eSBkZXNpZ250aW1lIHNldHRpbmdzIGZyb20gbWFuaWZlc3QuXG4gKlxuICogQHBhcmFtIGZhY2V0RGVmaW5pdGlvblxuICogQHBhcmFtIGNvbGxlY3Rpb25GYWNldERlZmluaXRpb25cbiAqIEBwYXJhbSBjb252ZXJ0ZXJDb250ZXh0XG4gKiBAcmV0dXJucyBEZXNpZ250aW1lIHNldHRpbmcgb3IgZGVmYXVsdFxuICovXG5leHBvcnQgZnVuY3Rpb24gZ2V0RGVzaWduVGltZU1ldGFkYXRhU2V0dGluZ3NGb3JIZWFkZXJGYWNldChcblx0ZmFjZXREZWZpbml0aW9uOiBGYWNldFR5cGVzLFxuXHRjb2xsZWN0aW9uRmFjZXREZWZpbml0aW9uOiBGYWNldFR5cGVzLFxuXHRjb252ZXJ0ZXJDb250ZXh0OiBDb252ZXJ0ZXJDb250ZXh0XG4pOiBGbGV4RGVzaWduVGltZVR5cGUge1xuXHRsZXQgZGVzaWduVGltZU1ldGFkYXRhOiBGbGV4RGVzaWduVGltZVR5cGUgPSBGbGV4RGVzaWduVGltZVR5cGUuRGVmYXVsdDtcblx0Y29uc3QgaGVhZGVyRmFjZXRJRCA9IGdlbmVyYXRlKFt7IEZhY2V0OiBmYWNldERlZmluaXRpb24gfV0pO1xuXG5cdC8vIEZvciBIZWFkZXJGYWNldHMgbmVzdGVkIGluc2lkZSBDb2xsZWN0aW9uRmFjZXQgUlRBIHNob3VsZCBiZSBkaXNhYmxlZCwgdGhlcmVmb3JlIHNldCB0byBcIm5vdC1hZGFwdGFibGUtdHJlZVwiXG5cdGlmIChcblx0XHRmYWNldERlZmluaXRpb24uJFR5cGUgPT09IFVJQW5ub3RhdGlvblR5cGVzLlJlZmVyZW5jZUZhY2V0ICYmXG5cdFx0Y29sbGVjdGlvbkZhY2V0RGVmaW5pdGlvbi4kVHlwZSA9PT0gVUlBbm5vdGF0aW9uVHlwZXMuQ29sbGVjdGlvbkZhY2V0XG5cdCkge1xuXHRcdGRlc2lnblRpbWVNZXRhZGF0YSA9IEZsZXhEZXNpZ25UaW1lVHlwZS5Ob3RBZGFwdGFibGVUcmVlO1xuXHR9IGVsc2Uge1xuXHRcdGNvbnN0IGhlYWRlckZhY2V0c0NvbnRyb2xDb25maWcgPSBjb252ZXJ0ZXJDb250ZXh0LmdldE1hbmlmZXN0V3JhcHBlcigpLmdldEhlYWRlckZhY2V0cygpO1xuXHRcdGlmIChoZWFkZXJGYWNldElEKSB7XG5cdFx0XHRjb25zdCBkZXNpZ25UaW1lID0gaGVhZGVyRmFjZXRzQ29udHJvbENvbmZpZ1toZWFkZXJGYWNldElEXT8uZmxleFNldHRpbmdzPy5kZXNpZ250aW1lO1xuXHRcdFx0c3dpdGNoIChkZXNpZ25UaW1lKSB7XG5cdFx0XHRcdGNhc2UgRmxleERlc2lnblRpbWVUeXBlLk5vdEFkYXB0YWJsZTpcblx0XHRcdFx0Y2FzZSBGbGV4RGVzaWduVGltZVR5cGUuTm90QWRhcHRhYmxlVHJlZTpcblx0XHRcdFx0Y2FzZSBGbGV4RGVzaWduVGltZVR5cGUuTm90QWRhcHRhYmxlVmlzaWJpbGl0eTpcblx0XHRcdFx0XHRkZXNpZ25UaW1lTWV0YWRhdGEgPSBkZXNpZ25UaW1lO1xuXHRcdFx0XHRcdGJyZWFrO1xuXHRcdFx0XHRkZWZhdWx0OlxuXHRcdFx0XHRcdGJyZWFrO1xuXHRcdFx0fVxuXHRcdH1cblx0fVxuXHRyZXR1cm4gZGVzaWduVGltZU1ldGFkYXRhO1xufVxuXG4vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy9cbi8vIENvbnZlcnQgJiBCdWlsZCBBbm5vdGF0aW9uIEJhc2VkIEhlYWRlciBGYWNldHNcbi8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vL1xuZnVuY3Rpb24gY3JlYXRlUmVmZXJlbmNlSGVhZGVyRmFjZXQoXG5cdGZhY2V0RGVmaW5pdGlvbjogRmFjZXRUeXBlcyxcblx0Y29sbGVjdGlvbkZhY2V0RGVmaW5pdGlvbjogRmFjZXRUeXBlcyxcblx0Y29udmVydGVyQ29udGV4dDogQ29udmVydGVyQ29udGV4dFxuKTogUmVmZXJlbmNlRmFjZXQgfCB1bmRlZmluZWQge1xuXHRpZiAoZmFjZXREZWZpbml0aW9uLiRUeXBlID09PSBVSUFubm90YXRpb25UeXBlcy5SZWZlcmVuY2VGYWNldCAmJiAhKGZhY2V0RGVmaW5pdGlvbi5hbm5vdGF0aW9ucz8uVUk/LkhpZGRlbj8udmFsdWVPZigpID09PSB0cnVlKSkge1xuXHRcdGNvbnN0IGhlYWRlckZhY2V0SUQgPSBnZXRIZWFkZXJGYWNldElEKHsgRmFjZXQ6IGZhY2V0RGVmaW5pdGlvbiB9KSxcblx0XHRcdGdldEhlYWRlckZhY2V0S2V5ID0gKGZhY2V0RGVmaW5pdGlvblRvQ2hlY2s6IEZhY2V0VHlwZXMsIGZhbGxiYWNrOiBzdHJpbmcpOiBzdHJpbmcgPT4ge1xuXHRcdFx0XHRyZXR1cm4gZmFjZXREZWZpbml0aW9uVG9DaGVjay5JRD8udG9TdHJpbmcoKSB8fCBmYWNldERlZmluaXRpb25Ub0NoZWNrLkxhYmVsPy50b1N0cmluZygpIHx8IGZhbGxiYWNrO1xuXHRcdFx0fSxcblx0XHRcdHRhcmdldEFubm90YXRpb25WYWx1ZSA9IGZhY2V0RGVmaW5pdGlvbi5UYXJnZXQudmFsdWUsXG5cdFx0XHR0YXJnZXRBbm5vdGF0aW9uVHlwZSA9IGdldFRhcmdldEFubm90YXRpb25UeXBlKGZhY2V0RGVmaW5pdGlvbik7XG5cblx0XHRsZXQgaGVhZGVyRm9ybURhdGE6IEhlYWRlckZvcm1EYXRhIHwgdW5kZWZpbmVkO1xuXHRcdGxldCBoZWFkZXJEYXRhUG9pbnREYXRhOiBIZWFkZXJEYXRhUG9pbnREYXRhIHwgdW5kZWZpbmVkO1xuXG5cdFx0c3dpdGNoICh0YXJnZXRBbm5vdGF0aW9uVHlwZSkge1xuXHRcdFx0Y2FzZSBUYXJnZXRBbm5vdGF0aW9uVHlwZS5GaWVsZEdyb3VwOlxuXHRcdFx0XHRoZWFkZXJGb3JtRGF0YSA9IGdldEZpZWxkR3JvdXBGb3JtRGF0YShmYWNldERlZmluaXRpb24sIGNvbnZlcnRlckNvbnRleHQpO1xuXHRcdFx0XHRicmVhaztcblxuXHRcdFx0Y2FzZSBUYXJnZXRBbm5vdGF0aW9uVHlwZS5EYXRhUG9pbnQ6XG5cdFx0XHRcdGhlYWRlckRhdGFQb2ludERhdGEgPSBnZXREYXRhUG9pbnREYXRhKGZhY2V0RGVmaW5pdGlvbik7XG5cdFx0XHRcdGJyZWFrO1xuXHRcdFx0Ly8gVG9EbzogSGFuZGxlIG90aGVyIGNhc2VzXG5cdFx0XHRkZWZhdWx0OlxuXHRcdFx0XHRicmVhaztcblx0XHR9XG5cblx0XHRjb25zdCB7IGFubm90YXRpb25zIH0gPSBmYWNldERlZmluaXRpb247XG5cdFx0cmV0dXJuIHtcblx0XHRcdHR5cGU6IEhlYWRlckZhY2V0VHlwZS5Bbm5vdGF0aW9uLFxuXHRcdFx0ZmFjZXRUeXBlOiBGYWNldFR5cGUuUmVmZXJlbmNlLFxuXHRcdFx0aWQ6IGhlYWRlckZhY2V0SUQsXG5cdFx0XHRjb250YWluZXJJZDogZ2V0SGVhZGVyRmFjZXRDb250YWluZXJJRCh7IEZhY2V0OiBmYWNldERlZmluaXRpb24gfSksXG5cdFx0XHRrZXk6IGdldEhlYWRlckZhY2V0S2V5KGZhY2V0RGVmaW5pdGlvbiwgaGVhZGVyRmFjZXRJRCksXG5cdFx0XHRmbGV4U2V0dGluZ3M6IHtcblx0XHRcdFx0ZGVzaWdudGltZTogZ2V0RGVzaWduVGltZU1ldGFkYXRhU2V0dGluZ3NGb3JIZWFkZXJGYWNldChmYWNldERlZmluaXRpb24sIGNvbGxlY3Rpb25GYWNldERlZmluaXRpb24sIGNvbnZlcnRlckNvbnRleHQpXG5cdFx0XHR9LFxuXHRcdFx0c3Rhc2hlZDogZ2V0U3Rhc2hlZFNldHRpbmdzRm9ySGVhZGVyRmFjZXQoZmFjZXREZWZpbml0aW9uLCBjb2xsZWN0aW9uRmFjZXREZWZpbml0aW9uLCBjb252ZXJ0ZXJDb250ZXh0KSxcblx0XHRcdHZpc2libGU6IGNvbXBpbGVFeHByZXNzaW9uKG5vdChlcXVhbChnZXRFeHByZXNzaW9uRnJvbUFubm90YXRpb24oYW5ub3RhdGlvbnM/LlVJPy5IaWRkZW4/LnZhbHVlT2YoKSksIHRydWUpKSksXG5cdFx0XHRhbm5vdGF0aW9uUGF0aDogYCR7Y29udmVydGVyQ29udGV4dC5nZXRFbnRpdHlTZXRCYXNlZEFubm90YXRpb25QYXRoKGZhY2V0RGVmaW5pdGlvbi5mdWxseVF1YWxpZmllZE5hbWUpfS9gLFxuXHRcdFx0dGFyZ2V0QW5ub3RhdGlvblZhbHVlLFxuXHRcdFx0dGFyZ2V0QW5ub3RhdGlvblR5cGUsXG5cdFx0XHRoZWFkZXJGb3JtRGF0YSxcblx0XHRcdGhlYWRlckRhdGFQb2ludERhdGFcblx0XHR9O1xuXHR9XG5cblx0cmV0dXJuIHVuZGVmaW5lZDtcbn1cblxuZnVuY3Rpb24gY3JlYXRlQ29sbGVjdGlvbkhlYWRlckZhY2V0KFxuXHRjb2xsZWN0aW9uRmFjZXREZWZpbml0aW9uOiBGYWNldFR5cGVzLFxuXHRjb252ZXJ0ZXJDb250ZXh0OiBDb252ZXJ0ZXJDb250ZXh0XG4pOiBDb2xsZWN0aW9uRmFjZXQgfCB1bmRlZmluZWQge1xuXHRpZiAoY29sbGVjdGlvbkZhY2V0RGVmaW5pdGlvbi4kVHlwZSA9PT0gVUlBbm5vdGF0aW9uVHlwZXMuQ29sbGVjdGlvbkZhY2V0KSB7XG5cdFx0Y29uc3QgZmFjZXRzOiBSZWZlcmVuY2VGYWNldFtdID0gW10sXG5cdFx0XHRoZWFkZXJGYWNldElEID0gZ2V0SGVhZGVyRmFjZXRJRCh7IEZhY2V0OiBjb2xsZWN0aW9uRmFjZXREZWZpbml0aW9uIH0pLFxuXHRcdFx0Z2V0SGVhZGVyRmFjZXRLZXkgPSAoZmFjZXREZWZpbml0aW9uOiBGYWNldFR5cGVzLCBmYWxsYmFjazogc3RyaW5nKTogc3RyaW5nID0+IHtcblx0XHRcdFx0cmV0dXJuIGZhY2V0RGVmaW5pdGlvbi5JRD8udG9TdHJpbmcoKSB8fCBmYWNldERlZmluaXRpb24uTGFiZWw/LnRvU3RyaW5nKCkgfHwgZmFsbGJhY2s7XG5cdFx0XHR9O1xuXG5cdFx0Y29sbGVjdGlvbkZhY2V0RGVmaW5pdGlvbi5GYWNldHMuZm9yRWFjaCgoZmFjZXREZWZpbml0aW9uKSA9PiB7XG5cdFx0XHRjb25zdCBmYWNldDogUmVmZXJlbmNlRmFjZXQgfCB1bmRlZmluZWQgPSBjcmVhdGVSZWZlcmVuY2VIZWFkZXJGYWNldChcblx0XHRcdFx0ZmFjZXREZWZpbml0aW9uLFxuXHRcdFx0XHRjb2xsZWN0aW9uRmFjZXREZWZpbml0aW9uLFxuXHRcdFx0XHRjb252ZXJ0ZXJDb250ZXh0XG5cdFx0XHQpO1xuXHRcdFx0aWYgKGZhY2V0KSB7XG5cdFx0XHRcdGZhY2V0cy5wdXNoKGZhY2V0KTtcblx0XHRcdH1cblx0XHR9KTtcblxuXHRcdHJldHVybiB7XG5cdFx0XHR0eXBlOiBIZWFkZXJGYWNldFR5cGUuQW5ub3RhdGlvbixcblx0XHRcdGZhY2V0VHlwZTogRmFjZXRUeXBlLkNvbGxlY3Rpb24sXG5cdFx0XHRpZDogaGVhZGVyRmFjZXRJRCxcblx0XHRcdGNvbnRhaW5lcklkOiBnZXRIZWFkZXJGYWNldENvbnRhaW5lcklEKHsgRmFjZXQ6IGNvbGxlY3Rpb25GYWNldERlZmluaXRpb24gfSksXG5cdFx0XHRrZXk6IGdldEhlYWRlckZhY2V0S2V5KGNvbGxlY3Rpb25GYWNldERlZmluaXRpb24sIGhlYWRlckZhY2V0SUQpLFxuXHRcdFx0ZmxleFNldHRpbmdzOiB7XG5cdFx0XHRcdGRlc2lnbnRpbWU6IGdldERlc2lnblRpbWVNZXRhZGF0YVNldHRpbmdzRm9ySGVhZGVyRmFjZXQoXG5cdFx0XHRcdFx0Y29sbGVjdGlvbkZhY2V0RGVmaW5pdGlvbixcblx0XHRcdFx0XHRjb2xsZWN0aW9uRmFjZXREZWZpbml0aW9uLFxuXHRcdFx0XHRcdGNvbnZlcnRlckNvbnRleHRcblx0XHRcdFx0KVxuXHRcdFx0fSxcblx0XHRcdHN0YXNoZWQ6IGdldFN0YXNoZWRTZXR0aW5nc0ZvckhlYWRlckZhY2V0KGNvbGxlY3Rpb25GYWNldERlZmluaXRpb24sIGNvbGxlY3Rpb25GYWNldERlZmluaXRpb24sIGNvbnZlcnRlckNvbnRleHQpLFxuXHRcdFx0dmlzaWJsZTogY29tcGlsZUV4cHJlc3Npb24oXG5cdFx0XHRcdG5vdChlcXVhbChnZXRFeHByZXNzaW9uRnJvbUFubm90YXRpb24oY29sbGVjdGlvbkZhY2V0RGVmaW5pdGlvbi5hbm5vdGF0aW9ucz8uVUk/LkhpZGRlbj8udmFsdWVPZigpKSwgdHJ1ZSkpXG5cdFx0XHQpLFxuXHRcdFx0YW5ub3RhdGlvblBhdGg6IGAke2NvbnZlcnRlckNvbnRleHQuZ2V0RW50aXR5U2V0QmFzZWRBbm5vdGF0aW9uUGF0aChjb2xsZWN0aW9uRmFjZXREZWZpbml0aW9uLmZ1bGx5UXVhbGlmaWVkTmFtZSl9L2AsXG5cdFx0XHRmYWNldHNcblx0XHR9O1xuXHR9XG5cblx0cmV0dXJuIHVuZGVmaW5lZDtcbn1cblxuZnVuY3Rpb24gZ2V0VGFyZ2V0QW5ub3RhdGlvblR5cGUoZmFjZXREZWZpbml0aW9uOiBGYWNldFR5cGVzKTogVGFyZ2V0QW5ub3RhdGlvblR5cGUge1xuXHRsZXQgYW5ub3RhdGlvblR5cGUgPSBUYXJnZXRBbm5vdGF0aW9uVHlwZS5Ob25lO1xuXHRjb25zdCBhbm5vdGF0aW9uVHlwZU1hcDogUmVjb3JkPHN0cmluZywgVGFyZ2V0QW5ub3RhdGlvblR5cGU+ID0ge1xuXHRcdFwiY29tLnNhcC52b2NhYnVsYXJpZXMuVUkudjEuRGF0YVBvaW50XCI6IFRhcmdldEFubm90YXRpb25UeXBlLkRhdGFQb2ludCxcblx0XHRcImNvbS5zYXAudm9jYWJ1bGFyaWVzLlVJLnYxLkNoYXJ0XCI6IFRhcmdldEFubm90YXRpb25UeXBlLkNoYXJ0LFxuXHRcdFwiY29tLnNhcC52b2NhYnVsYXJpZXMuVUkudjEuSWRlbnRpZmljYXRpb25cIjogVGFyZ2V0QW5ub3RhdGlvblR5cGUuSWRlbnRpZmljYXRpb24sXG5cdFx0XCJjb20uc2FwLnZvY2FidWxhcmllcy5Db21tdW5pY2F0aW9uLnYxLkNvbnRhY3RcIjogVGFyZ2V0QW5ub3RhdGlvblR5cGUuQ29udGFjdCxcblx0XHRcImNvbS5zYXAudm9jYWJ1bGFyaWVzLkNvbW11bmljYXRpb24udjEuQWRkcmVzc1wiOiBUYXJnZXRBbm5vdGF0aW9uVHlwZS5BZGRyZXNzLFxuXHRcdFwiY29tLnNhcC52b2NhYnVsYXJpZXMuVUkudjEuRmllbGRHcm91cFwiOiBUYXJnZXRBbm5vdGF0aW9uVHlwZS5GaWVsZEdyb3VwXG5cdH07XG5cdC8vIFJlZmVyZW5jZVVSTEZhY2V0IGFuZCBDb2xsZWN0aW9uRmFjZXQgZG8gbm90IGhhdmUgVGFyZ2V0IHByb3BlcnR5LlxuXHRpZiAoZmFjZXREZWZpbml0aW9uLiRUeXBlICE9PSBVSUFubm90YXRpb25UeXBlcy5SZWZlcmVuY2VVUkxGYWNldCAmJiBmYWNldERlZmluaXRpb24uJFR5cGUgIT09IFVJQW5ub3RhdGlvblR5cGVzLkNvbGxlY3Rpb25GYWNldCkge1xuXHRcdGFubm90YXRpb25UeXBlID0gYW5ub3RhdGlvblR5cGVNYXBbZmFjZXREZWZpbml0aW9uLlRhcmdldD8uJHRhcmdldD8udGVybV0gfHwgVGFyZ2V0QW5ub3RhdGlvblR5cGUuTm9uZTtcblx0fVxuXG5cdHJldHVybiBhbm5vdGF0aW9uVHlwZTtcbn1cblxuZnVuY3Rpb24gZ2V0RmllbGRHcm91cEZvcm1EYXRhKGZhY2V0RGVmaW5pdGlvbjogUmVmZXJlbmNlRmFjZXRUeXBlcywgY29udmVydGVyQ29udGV4dDogQ29udmVydGVyQ29udGV4dCk6IEhlYWRlckZvcm1EYXRhIHtcblx0Ly8gc3BsaXQgaW4gdGhpcyBmcm9tIGFubm90YXRpb24gKyBnZXRGaWVsZEdyb3VwRnJvbURlZmF1bHRcblx0aWYgKCFmYWNldERlZmluaXRpb24pIHtcblx0XHR0aHJvdyBuZXcgRXJyb3IoXCJDYW5ub3QgZ2V0IEZpZWxkR3JvdXAgZm9ybSBkYXRhIHdpdGhvdXQgZmFjZXQgZGVmaW5pdGlvblwiKTtcblx0fVxuXG5cdGNvbnN0IGZvcm1FbGVtZW50cyA9IGluc2VydEN1c3RvbUVsZW1lbnRzKFxuXHRcdGdldEZvcm1FbGVtZW50c0Zyb21Bbm5vdGF0aW9ucyhmYWNldERlZmluaXRpb24sIGNvbnZlcnRlckNvbnRleHQpLFxuXHRcdGdldEZvcm1FbGVtZW50c0Zyb21NYW5pZmVzdChmYWNldERlZmluaXRpb24sIGNvbnZlcnRlckNvbnRleHQpXG5cdCk7XG5cblx0cmV0dXJuIHtcblx0XHRpZDogZ2V0SGVhZGVyRmFjZXRGb3JtSUQoeyBGYWNldDogZmFjZXREZWZpbml0aW9uIH0pLFxuXHRcdGxhYmVsOiBmYWNldERlZmluaXRpb24uTGFiZWw/LnRvU3RyaW5nKCksXG5cdFx0Zm9ybUVsZW1lbnRzXG5cdH07XG59XG5cbi8qKlxuICogQ3JlYXRlcyBhbiBhcnJheSBvZiBtYW5pZmVzdC1iYXNlZCBGb3JtRWxlbWVudHMuXG4gKlxuICogQHBhcmFtIGZhY2V0RGVmaW5pdGlvbiBUaGUgZGVmaW5pdGlvbiBvZiB0aGUgZmFjZXRcbiAqIEBwYXJhbSBjb252ZXJ0ZXJDb250ZXh0IFRoZSBjb252ZXJ0ZXIgY29udGV4dCBmb3IgdGhlIGZhY2V0XG4gKiBAcmV0dXJucyBBbm5vdGF0aW9uLWJhc2VkIEZvcm1FbGVtZW50c1xuICovXG5mdW5jdGlvbiBnZXRGb3JtRWxlbWVudHNGcm9tQW5ub3RhdGlvbnMoZmFjZXREZWZpbml0aW9uOiBGYWNldFR5cGVzLCBjb252ZXJ0ZXJDb250ZXh0OiBDb252ZXJ0ZXJDb250ZXh0KTogQW5ub3RhdGlvbkZvcm1FbGVtZW50W10ge1xuXHRjb25zdCBhbm5vdGF0aW9uQmFzZWRGb3JtRWxlbWVudHM6IEFubm90YXRpb25Gb3JtRWxlbWVudFtdID0gW107XG5cblx0Ly8gUmVmZXJlbmNlVVJMRmFjZXQgYW5kIENvbGxlY3Rpb25GYWNldCBkbyBub3QgaGF2ZSBUYXJnZXQgcHJvcGVydHkuXG5cdGlmIChmYWNldERlZmluaXRpb24uJFR5cGUgIT09IFVJQW5ub3RhdGlvblR5cGVzLlJlZmVyZW5jZVVSTEZhY2V0ICYmIGZhY2V0RGVmaW5pdGlvbi4kVHlwZSAhPT0gVUlBbm5vdGF0aW9uVHlwZXMuQ29sbGVjdGlvbkZhY2V0KSB7XG5cdFx0KGZhY2V0RGVmaW5pdGlvbi5UYXJnZXQ/LiR0YXJnZXQgYXMgRmllbGRHcm91cCk/LkRhdGEuZm9yRWFjaCgoZGF0YUZpZWxkOiBEYXRhRmllbGRBYnN0cmFjdFR5cGVzKSA9PiB7XG5cdFx0XHRpZiAoIShkYXRhRmllbGQuYW5ub3RhdGlvbnM/LlVJPy5IaWRkZW4/LnZhbHVlT2YoKSA9PT0gdHJ1ZSkpIHtcblx0XHRcdFx0Y29uc3Qgc2VtYW50aWNPYmplY3RBbm5vdGF0aW9uUGF0aCA9IGdldFNlbWFudGljT2JqZWN0UGF0aChjb252ZXJ0ZXJDb250ZXh0LCBkYXRhRmllbGQpO1xuXHRcdFx0XHRpZiAoXG5cdFx0XHRcdFx0ZGF0YUZpZWxkLiRUeXBlID09PSBVSUFubm90YXRpb25UeXBlcy5EYXRhRmllbGQgfHxcblx0XHRcdFx0XHRkYXRhRmllbGQuJFR5cGUgPT09IFVJQW5ub3RhdGlvblR5cGVzLkRhdGFGaWVsZFdpdGhVcmwgfHxcblx0XHRcdFx0XHRkYXRhRmllbGQuJFR5cGUgPT09IFVJQW5ub3RhdGlvblR5cGVzLkRhdGFGaWVsZFdpdGhOYXZpZ2F0aW9uUGF0aCB8fFxuXHRcdFx0XHRcdGRhdGFGaWVsZC4kVHlwZSA9PT0gVUlBbm5vdGF0aW9uVHlwZXMuRGF0YUZpZWxkV2l0aEludGVudEJhc2VkTmF2aWdhdGlvbiB8fFxuXHRcdFx0XHRcdGRhdGFGaWVsZC4kVHlwZSA9PT0gVUlBbm5vdGF0aW9uVHlwZXMuRGF0YUZpZWxkV2l0aEFjdGlvblxuXHRcdFx0XHQpIHtcblx0XHRcdFx0XHRjb25zdCB7IGFubm90YXRpb25zIH0gPSBkYXRhRmllbGQ7XG5cdFx0XHRcdFx0YW5ub3RhdGlvbkJhc2VkRm9ybUVsZW1lbnRzLnB1c2goe1xuXHRcdFx0XHRcdFx0aXNWYWx1ZU11bHRpbGluZVRleHQ6IGRhdGFGaWVsZC5WYWx1ZT8uJHRhcmdldD8uYW5ub3RhdGlvbnM/LlVJPy5NdWx0aUxpbmVUZXh0Py52YWx1ZU9mKCkgPT09IHRydWUsXG5cdFx0XHRcdFx0XHR0eXBlOiBGb3JtRWxlbWVudFR5cGUuQW5ub3RhdGlvbixcblx0XHRcdFx0XHRcdGtleTogS2V5SGVscGVyLmdlbmVyYXRlS2V5RnJvbURhdGFGaWVsZChkYXRhRmllbGQpLFxuXHRcdFx0XHRcdFx0dmlzaWJsZTogY29tcGlsZUV4cHJlc3Npb24obm90KGVxdWFsKGdldEV4cHJlc3Npb25Gcm9tQW5ub3RhdGlvbihhbm5vdGF0aW9ucz8uVUk/LkhpZGRlbj8udmFsdWVPZigpKSwgdHJ1ZSkpKSxcblx0XHRcdFx0XHRcdGxhYmVsOiBkYXRhRmllbGQuVmFsdWU/LiR0YXJnZXQ/LmFubm90YXRpb25zPy5Db21tb24/LkxhYmVsIHx8IGRhdGFGaWVsZC5MYWJlbCxcblx0XHRcdFx0XHRcdGlkUHJlZml4OiBnZXRIZWFkZXJGYWNldEZvcm1JRCh7IEZhY2V0OiBmYWNldERlZmluaXRpb24gfSwgZGF0YUZpZWxkKSxcblx0XHRcdFx0XHRcdGFubm90YXRpb25QYXRoOiBgJHtjb252ZXJ0ZXJDb250ZXh0LmdldEVudGl0eVNldEJhc2VkQW5ub3RhdGlvblBhdGgoZGF0YUZpZWxkLmZ1bGx5UXVhbGlmaWVkTmFtZSl9L2AsXG5cdFx0XHRcdFx0XHRzZW1hbnRpY09iamVjdFBhdGg6IHNlbWFudGljT2JqZWN0QW5ub3RhdGlvblBhdGhcblx0XHRcdFx0XHR9KTtcblx0XHRcdFx0fSBlbHNlIGlmIChkYXRhRmllbGQuJFR5cGUgPT09IFVJQW5ub3RhdGlvblR5cGVzLkRhdGFGaWVsZEZvckFubm90YXRpb24pIHtcblx0XHRcdFx0XHRjb25zdCB7IGFubm90YXRpb25zIH0gPSBkYXRhRmllbGQ7XG5cdFx0XHRcdFx0YW5ub3RhdGlvbkJhc2VkRm9ybUVsZW1lbnRzLnB1c2goe1xuXHRcdFx0XHRcdFx0Ly8gRklYTUUgdGhpcyBpcyB3cm9uZywgdGhlIGFubm90YXRpb24gc2hvdWxkIGV4aXN0LCBzbyB0aGUgdGFyZ2V0IGlzIG5vdCBwcm9wZXJseSBpZGVudGlmaWVkXG5cdFx0XHRcdFx0XHRpc1ZhbHVlTXVsdGlsaW5lVGV4dDogKGRhdGFGaWVsZC5UYXJnZXQ/LiR0YXJnZXQ/LmFubm90YXRpb25zPy5VSSBhcyBhbnkpPy5NdWx0aUxpbmVUZXh0Py52YWx1ZU9mKCkgPT09IHRydWUsXG5cdFx0XHRcdFx0XHR0eXBlOiBGb3JtRWxlbWVudFR5cGUuQW5ub3RhdGlvbixcblx0XHRcdFx0XHRcdGtleTogS2V5SGVscGVyLmdlbmVyYXRlS2V5RnJvbURhdGFGaWVsZChkYXRhRmllbGQpLFxuXHRcdFx0XHRcdFx0dmlzaWJsZTogY29tcGlsZUV4cHJlc3Npb24obm90KGVxdWFsKGdldEV4cHJlc3Npb25Gcm9tQW5ub3RhdGlvbihhbm5vdGF0aW9ucz8uVUk/LkhpZGRlbj8udmFsdWVPZigpKSwgdHJ1ZSkpKSxcblx0XHRcdFx0XHRcdGxhYmVsOiBkYXRhRmllbGQuVGFyZ2V0Py4kdGFyZ2V0Py5hbm5vdGF0aW9ucz8uQ29tbW9uPy5MYWJlbD8udG9TdHJpbmcoKSB8fCBkYXRhRmllbGQuTGFiZWw/LnRvU3RyaW5nKCksXG5cdFx0XHRcdFx0XHRpZFByZWZpeDogZ2V0SGVhZGVyRmFjZXRGb3JtSUQoeyBGYWNldDogZmFjZXREZWZpbml0aW9uIH0sIGRhdGFGaWVsZCksXG5cdFx0XHRcdFx0XHRhbm5vdGF0aW9uUGF0aDogYCR7Y29udmVydGVyQ29udGV4dC5nZXRFbnRpdHlTZXRCYXNlZEFubm90YXRpb25QYXRoKGRhdGFGaWVsZC5mdWxseVF1YWxpZmllZE5hbWUpfS9gLFxuXHRcdFx0XHRcdFx0c2VtYW50aWNPYmplY3RQYXRoOiBzZW1hbnRpY09iamVjdEFubm90YXRpb25QYXRoXG5cdFx0XHRcdFx0fSk7XG5cdFx0XHRcdH1cblx0XHRcdH1cblx0XHR9KTtcblx0fVxuXG5cdHJldHVybiBhbm5vdGF0aW9uQmFzZWRGb3JtRWxlbWVudHM7XG59XG5cbmZ1bmN0aW9uIGdldERhdGFQb2ludERhdGEoZmFjZXREZWZpbml0aW9uOiBGYWNldFR5cGVzKTogSGVhZGVyRGF0YVBvaW50RGF0YSB7XG5cdGxldCB0eXBlID0gSGVhZGVyRGF0YVBvaW50VHlwZS5Db250ZW50O1xuXHRpZiAoZmFjZXREZWZpbml0aW9uLiRUeXBlID09PSBVSUFubm90YXRpb25UeXBlcy5SZWZlcmVuY2VGYWNldCkge1xuXHRcdGlmICgoZmFjZXREZWZpbml0aW9uLlRhcmdldD8uJHRhcmdldCBhcyBEYXRhUG9pbnQpPy5WaXN1YWxpemF0aW9uID09PSBcIlVJLlZpc3VhbGl6YXRpb25UeXBlL1Byb2dyZXNzXCIpIHtcblx0XHRcdHR5cGUgPSBIZWFkZXJEYXRhUG9pbnRUeXBlLlByb2dyZXNzSW5kaWNhdG9yO1xuXHRcdH0gZWxzZSBpZiAoKGZhY2V0RGVmaW5pdGlvbi5UYXJnZXQ/LiR0YXJnZXQgYXMgRGF0YVBvaW50KT8uVmlzdWFsaXphdGlvbiA9PT0gXCJVSS5WaXN1YWxpemF0aW9uVHlwZS9SYXRpbmdcIikge1xuXHRcdFx0dHlwZSA9IEhlYWRlckRhdGFQb2ludFR5cGUuUmF0aW5nSW5kaWNhdG9yO1xuXHRcdH1cblx0fVxuXG5cdHJldHVybiB7IHR5cGUgfTtcbn1cblxuLyoqXG4gKiBDcmVhdGVzIGFuIGFubm90YXRpb24tYmFzZWQgaGVhZGVyIGZhY2V0LlxuICpcbiAqIEBwYXJhbSBmYWNldERlZmluaXRpb24gVGhlIGRlZmluaXRpb24gb2YgdGhlIGZhY2V0XG4gKiBAcGFyYW0gY29udmVydGVyQ29udGV4dCBUaGUgY29udmVydGVyIGNvbnRleHRcbiAqIEByZXR1cm5zIFRoZSBjcmVhdGVkIGFubm90YXRpb24tYmFzZWQgaGVhZGVyIGZhY2V0XG4gKi9cbmZ1bmN0aW9uIGNyZWF0ZUhlYWRlckZhY2V0KGZhY2V0RGVmaW5pdGlvbjogRmFjZXRUeXBlcywgY29udmVydGVyQ29udGV4dDogQ29udmVydGVyQ29udGV4dCk6IE9iamVjdFBhZ2VIZWFkZXJGYWNldCB8IHVuZGVmaW5lZCB7XG5cdGxldCBoZWFkZXJGYWNldDogT2JqZWN0UGFnZUhlYWRlckZhY2V0IHwgdW5kZWZpbmVkO1xuXHRzd2l0Y2ggKGZhY2V0RGVmaW5pdGlvbi4kVHlwZSkge1xuXHRcdGNhc2UgVUlBbm5vdGF0aW9uVHlwZXMuUmVmZXJlbmNlRmFjZXQ6XG5cdFx0XHRoZWFkZXJGYWNldCA9IGNyZWF0ZVJlZmVyZW5jZUhlYWRlckZhY2V0KGZhY2V0RGVmaW5pdGlvbiwgZmFjZXREZWZpbml0aW9uLCBjb252ZXJ0ZXJDb250ZXh0KTtcblx0XHRcdGJyZWFrO1xuXG5cdFx0Y2FzZSBVSUFubm90YXRpb25UeXBlcy5Db2xsZWN0aW9uRmFjZXQ6XG5cdFx0XHRoZWFkZXJGYWNldCA9IGNyZWF0ZUNvbGxlY3Rpb25IZWFkZXJGYWNldChmYWNldERlZmluaXRpb24sIGNvbnZlcnRlckNvbnRleHQpO1xuXHRcdFx0YnJlYWs7XG5cdFx0ZGVmYXVsdDpcblx0XHRcdGJyZWFrO1xuXHR9XG5cblx0cmV0dXJuIGhlYWRlckZhY2V0O1xufVxuXG4vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy9cbi8vIENvbnZlcnQgJiBCdWlsZCBNYW5pZmVzdCBCYXNlZCBIZWFkZXIgRmFjZXRzXG4vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy9cblxuZnVuY3Rpb24gZ2VuZXJhdGVCaW5kaW5nKHJlcXVlc3RHcm91cElkPzogc3RyaW5nKTogc3RyaW5nIHwgdW5kZWZpbmVkIHtcblx0aWYgKCFyZXF1ZXN0R3JvdXBJZCkge1xuXHRcdHJldHVybiB1bmRlZmluZWQ7XG5cdH1cblx0Y29uc3QgZ3JvdXBJZCA9XG5cdFx0W1wiSGVyb2VzXCIsIFwiRGVjb3JhdGlvblwiLCBcIldvcmtlcnNcIiwgXCJMb25nUnVubmVyc1wiXS5pbmRleE9mKHJlcXVlc3RHcm91cElkKSAhPT0gLTEgPyBgJGF1dG8uJHtyZXF1ZXN0R3JvdXBJZH1gIDogcmVxdWVzdEdyb3VwSWQ7XG5cblx0cmV0dXJuIGB7IHBhdGggOiAnJywgcGFyYW1ldGVycyA6IHsgJCRncm91cElkIDogJyR7Z3JvdXBJZH0nIH0gfWA7XG59XG5cbi8qKlxuICogQ3JlYXRlIGEgbWFuaWZlc3QgYmFzZWQgY3VzdG9tIGhlYWRlciBmYWNldC5cbiAqXG4gKiBAcGFyYW0gY3VzdG9tSGVhZGVyRmFjZXREZWZpbml0aW9uXG4gKiBAcGFyYW0gaGVhZGVyRmFjZXRLZXlcbiAqIEByZXR1cm5zIFRoZSBtYW5pZmVzdCBiYXNlZCBjdXN0b20gaGVhZGVyIGZhY2V0IGNyZWF0ZWRcbiAqL1xuZnVuY3Rpb24gY3JlYXRlQ3VzdG9tSGVhZGVyRmFjZXQoY3VzdG9tSGVhZGVyRmFjZXREZWZpbml0aW9uOiBNYW5pZmVzdEhlYWRlckZhY2V0LCBoZWFkZXJGYWNldEtleTogc3RyaW5nKTogQ3VzdG9tT2JqZWN0UGFnZUhlYWRlckZhY2V0IHtcblx0Y29uc3QgY3VzdG9tSGVhZGVyRmFjZXRJRCA9IGdldEN1c3RvbUhlYWRlckZhY2V0SUQoaGVhZGVyRmFjZXRLZXkpO1xuXG5cdGxldCBwb3NpdGlvbjogUG9zaXRpb24gfCB1bmRlZmluZWQgPSBjdXN0b21IZWFkZXJGYWNldERlZmluaXRpb24ucG9zaXRpb247XG5cdGlmICghcG9zaXRpb24pIHtcblx0XHRwb3NpdGlvbiA9IHtcblx0XHRcdHBsYWNlbWVudDogUGxhY2VtZW50LkFmdGVyXG5cdFx0fTtcblx0fVxuXHQvLyBUT0RPIGZvciBhbiBub24gYW5ub3RhdGlvbiBmcmFnbWVudCB0aGUgbmFtZSBpcyBtYW5kYXRvcnkgLT4gTm90IGNoZWNrZWRcblx0cmV0dXJuIHtcblx0XHRmYWNldFR5cGU6IEZhY2V0VHlwZS5SZWZlcmVuY2UsXG5cdFx0ZmFjZXRzOiBbXSxcblx0XHR0eXBlOiBjdXN0b21IZWFkZXJGYWNldERlZmluaXRpb24udHlwZSxcblx0XHRpZDogY3VzdG9tSGVhZGVyRmFjZXRJRCxcblx0XHRjb250YWluZXJJZDogY3VzdG9tSGVhZGVyRmFjZXRJRCxcblx0XHRrZXk6IGhlYWRlckZhY2V0S2V5LFxuXHRcdHBvc2l0aW9uOiBwb3NpdGlvbixcblx0XHR2aXNpYmxlOiBjdXN0b21IZWFkZXJGYWNldERlZmluaXRpb24udmlzaWJsZSxcblx0XHRmcmFnbWVudE5hbWU6IGN1c3RvbUhlYWRlckZhY2V0RGVmaW5pdGlvbi50ZW1wbGF0ZSB8fCBjdXN0b21IZWFkZXJGYWNldERlZmluaXRpb24ubmFtZSxcblx0XHR0aXRsZTogY3VzdG9tSGVhZGVyRmFjZXREZWZpbml0aW9uLnRpdGxlLFxuXHRcdHN1YlRpdGxlOiBjdXN0b21IZWFkZXJGYWNldERlZmluaXRpb24uc3ViVGl0bGUsXG5cdFx0c3Rhc2hlZDogY3VzdG9tSGVhZGVyRmFjZXREZWZpbml0aW9uLnN0YXNoZWQgfHwgZmFsc2UsXG5cdFx0ZmxleFNldHRpbmdzOiB7IC4uLnsgZGVzaWdudGltZTogRmxleERlc2lnblRpbWVUeXBlLkRlZmF1bHQgfSwgLi4uY3VzdG9tSGVhZGVyRmFjZXREZWZpbml0aW9uLmZsZXhTZXR0aW5ncyB9LFxuXHRcdGJpbmRpbmc6IGdlbmVyYXRlQmluZGluZyhjdXN0b21IZWFkZXJGYWNldERlZmluaXRpb24ucmVxdWVzdEdyb3VwSWQpLFxuXHRcdHRlbXBsYXRlRWRpdDogY3VzdG9tSGVhZGVyRmFjZXREZWZpbml0aW9uLnRlbXBsYXRlRWRpdFxuXHR9O1xufVxuIl19
507
+ //# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJuYW1lcyI6WyJIZWFkZXJGYWNldFR5cGUiLCJGYWNldFR5cGUiLCJGbGV4RGVzaWduVGltZVR5cGUiLCJIZWFkZXJEYXRhUG9pbnRUeXBlIiwiVGFyZ2V0QW5ub3RhdGlvblR5cGUiLCJnZXRIZWFkZXJGYWNldHNGcm9tQW5ub3RhdGlvbnMiLCJjb252ZXJ0ZXJDb250ZXh0IiwiaGVhZGVyRmFjZXRzIiwiZ2V0RW50aXR5VHlwZSIsImFubm90YXRpb25zIiwiVUkiLCJIZWFkZXJGYWNldHMiLCJmb3JFYWNoIiwiZmFjZXQiLCJoZWFkZXJGYWNldCIsImNyZWF0ZUhlYWRlckZhY2V0IiwicHVzaCIsImdldEhlYWRlckZhY2V0c0Zyb21NYW5pZmVzdCIsIm1hbmlmZXN0Q3VzdG9tSGVhZGVyRmFjZXRzIiwiY3VzdG9tSGVhZGVyRmFjZXRzIiwiT2JqZWN0Iiwia2V5cyIsIm1hbmlmZXN0SGVhZGVyRmFjZXRLZXkiLCJjdXN0b21IZWFkZXJGYWNldCIsImNyZWF0ZUN1c3RvbUhlYWRlckZhY2V0IiwiZ2V0U3Rhc2hlZFNldHRpbmdzRm9ySGVhZGVyRmFjZXQiLCJmYWNldERlZmluaXRpb24iLCJjb2xsZWN0aW9uRmFjZXREZWZpbml0aW9uIiwiJFR5cGUiLCJoZWFkZXJGYWNldElEIiwiZ2VuZXJhdGUiLCJGYWNldCIsImhlYWRlckZhY2V0c0NvbnRyb2xDb25maWciLCJnZXRNYW5pZmVzdFdyYXBwZXIiLCJnZXRIZWFkZXJGYWNldHMiLCJzdGFzaGVkU2V0dGluZyIsInN0YXNoZWQiLCJnZXREZXNpZ25UaW1lTWV0YWRhdGFTZXR0aW5nc0ZvckhlYWRlckZhY2V0IiwiZGVzaWduVGltZU1ldGFkYXRhIiwiRGVmYXVsdCIsIk5vdEFkYXB0YWJsZVRyZWUiLCJkZXNpZ25UaW1lIiwiZmxleFNldHRpbmdzIiwiZGVzaWdudGltZSIsIk5vdEFkYXB0YWJsZSIsIk5vdEFkYXB0YWJsZVZpc2liaWxpdHkiLCJjcmVhdGVSZWZlcmVuY2VIZWFkZXJGYWNldCIsIkhpZGRlbiIsInZhbHVlT2YiLCJnZXRIZWFkZXJGYWNldElEIiwiZ2V0SGVhZGVyRmFjZXRLZXkiLCJmYWNldERlZmluaXRpb25Ub0NoZWNrIiwiZmFsbGJhY2siLCJJRCIsInRvU3RyaW5nIiwiTGFiZWwiLCJ0YXJnZXRBbm5vdGF0aW9uVmFsdWUiLCJUYXJnZXQiLCJ2YWx1ZSIsInRhcmdldEFubm90YXRpb25UeXBlIiwiZ2V0VGFyZ2V0QW5ub3RhdGlvblR5cGUiLCJoZWFkZXJGb3JtRGF0YSIsImhlYWRlckRhdGFQb2ludERhdGEiLCJGaWVsZEdyb3VwIiwiZ2V0RmllbGRHcm91cEZvcm1EYXRhIiwiRGF0YVBvaW50IiwiZ2V0RGF0YVBvaW50RGF0YSIsIiR0YXJnZXQiLCJ0ZXJtIiwiaXNBbm5vdGF0aW9uRmllbGRTdGF0aWNhbGx5SGlkZGVuIiwidW5kZWZpbmVkIiwidHlwZSIsIkFubm90YXRpb24iLCJmYWNldFR5cGUiLCJSZWZlcmVuY2UiLCJpZCIsImNvbnRhaW5lcklkIiwiZ2V0SGVhZGVyRmFjZXRDb250YWluZXJJRCIsImtleSIsInZpc2libGUiLCJjb21waWxlRXhwcmVzc2lvbiIsIm5vdCIsImVxdWFsIiwiZ2V0RXhwcmVzc2lvbkZyb21Bbm5vdGF0aW9uIiwiYW5ub3RhdGlvblBhdGgiLCJnZXRFbnRpdHlTZXRCYXNlZEFubm90YXRpb25QYXRoIiwiZnVsbHlRdWFsaWZpZWROYW1lIiwiY3JlYXRlQ29sbGVjdGlvbkhlYWRlckZhY2V0IiwiZmFjZXRzIiwiRmFjZXRzIiwiQ29sbGVjdGlvbiIsImFubm90YXRpb25UeXBlIiwiTm9uZSIsImFubm90YXRpb25UeXBlTWFwIiwiQ2hhcnQiLCJJZGVudGlmaWNhdGlvbiIsIkNvbnRhY3QiLCJBZGRyZXNzIiwiRXJyb3IiLCJmb3JtRWxlbWVudHMiLCJpbnNlcnRDdXN0b21FbGVtZW50cyIsImdldEZvcm1FbGVtZW50c0Zyb21Bbm5vdGF0aW9ucyIsImdldEZvcm1FbGVtZW50c0Zyb21NYW5pZmVzdCIsImdldEhlYWRlckZhY2V0Rm9ybUlEIiwibGFiZWwiLCJhbm5vdGF0aW9uQmFzZWRGb3JtRWxlbWVudHMiLCJEYXRhIiwiZGF0YUZpZWxkIiwic2VtYW50aWNPYmplY3RBbm5vdGF0aW9uUGF0aCIsImdldFNlbWFudGljT2JqZWN0UGF0aCIsImlzUmVmZXJlbmNlUHJvcGVydHlTdGF0aWNhbGx5SGlkZGVuIiwiaXNWYWx1ZU11bHRpbGluZVRleHQiLCJWYWx1ZSIsIk11bHRpTGluZVRleHQiLCJGb3JtRWxlbWVudFR5cGUiLCJLZXlIZWxwZXIiLCJnZW5lcmF0ZUtleUZyb21EYXRhRmllbGQiLCJDb21tb24iLCJpZFByZWZpeCIsInNlbWFudGljT2JqZWN0UGF0aCIsIkNvbnRlbnQiLCJWaXN1YWxpemF0aW9uIiwiUHJvZ3Jlc3NJbmRpY2F0b3IiLCJSYXRpbmdJbmRpY2F0b3IiLCJnZW5lcmF0ZUJpbmRpbmciLCJyZXF1ZXN0R3JvdXBJZCIsImdyb3VwSWQiLCJpbmRleE9mIiwiY3VzdG9tSGVhZGVyRmFjZXREZWZpbml0aW9uIiwiaGVhZGVyRmFjZXRLZXkiLCJjdXN0b21IZWFkZXJGYWNldElEIiwiZ2V0Q3VzdG9tSGVhZGVyRmFjZXRJRCIsInBvc2l0aW9uIiwicGxhY2VtZW50IiwiUGxhY2VtZW50IiwiQWZ0ZXIiLCJmcmFnbWVudE5hbWUiLCJ0ZW1wbGF0ZSIsIm5hbWUiLCJ0aXRsZSIsInN1YlRpdGxlIiwiYmluZGluZyIsInRlbXBsYXRlRWRpdCJdLCJzb3VyY2VSb290IjoiLiIsInNvdXJjZXMiOlsiSGVhZGVyRmFjZXQudHMiXSwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHR5cGUge1xuXHREYXRhRmllbGRBYnN0cmFjdFR5cGVzLFxuXHREYXRhUG9pbnQsXG5cdEZhY2V0VHlwZXMsXG5cdEZpZWxkR3JvdXAsXG5cdFJlZmVyZW5jZUZhY2V0VHlwZXNcbn0gZnJvbSBcIkBzYXAtdXgvdm9jYWJ1bGFyaWVzLXR5cGVzL3ZvY2FidWxhcmllcy9VSVwiO1xuaW1wb3J0IHsgVUlBbm5vdGF0aW9uVGVybXMsIFVJQW5ub3RhdGlvblR5cGVzIH0gZnJvbSBcIkBzYXAtdXgvdm9jYWJ1bGFyaWVzLXR5cGVzL3ZvY2FidWxhcmllcy9VSVwiO1xuaW1wb3J0IHsgZ2V0U2VtYW50aWNPYmplY3RQYXRoIH0gZnJvbSBcInNhcC9mZS9jb3JlL2NvbnZlcnRlcnMvYW5ub3RhdGlvbnMvRGF0YUZpZWxkXCI7XG5pbXBvcnQgdHlwZSB7IENvbmZpZ3VyYWJsZU9iamVjdCwgQ29uZmlndXJhYmxlUmVjb3JkLCBDdXN0b21FbGVtZW50LCBQb3NpdGlvbiB9IGZyb20gXCJzYXAvZmUvY29yZS9jb252ZXJ0ZXJzL2hlbHBlcnMvQ29uZmlndXJhYmxlT2JqZWN0XCI7XG5pbXBvcnQgeyBpbnNlcnRDdXN0b21FbGVtZW50cywgUGxhY2VtZW50IH0gZnJvbSBcInNhcC9mZS9jb3JlL2NvbnZlcnRlcnMvaGVscGVycy9Db25maWd1cmFibGVPYmplY3RcIjtcbmltcG9ydCB7XG5cdGdldEN1c3RvbUhlYWRlckZhY2V0SUQsXG5cdGdldEhlYWRlckZhY2V0Q29udGFpbmVySUQsXG5cdGdldEhlYWRlckZhY2V0Rm9ybUlELFxuXHRnZXRIZWFkZXJGYWNldElEXG59IGZyb20gXCJzYXAvZmUvY29yZS9jb252ZXJ0ZXJzL2hlbHBlcnMvSURcIjtcbmltcG9ydCB7IEtleUhlbHBlciB9IGZyb20gXCJzYXAvZmUvY29yZS9jb252ZXJ0ZXJzL2hlbHBlcnMvS2V5XCI7XG5pbXBvcnQgdHlwZSB7IE1hbmlmZXN0SGVhZGVyRmFjZXQgfSBmcm9tIFwic2FwL2ZlL2NvcmUvY29udmVydGVycy9NYW5pZmVzdFNldHRpbmdzXCI7XG5pbXBvcnQgdHlwZSB7IENvbXBpbGVkQmluZGluZ1Rvb2xraXRFeHByZXNzaW9uIH0gZnJvbSBcInNhcC9mZS9jb3JlL2hlbHBlcnMvQmluZGluZ1Rvb2xraXRcIjtcbmltcG9ydCB7IGNvbXBpbGVFeHByZXNzaW9uLCBlcXVhbCwgZ2V0RXhwcmVzc2lvbkZyb21Bbm5vdGF0aW9uLCBub3QgfSBmcm9tIFwic2FwL2ZlL2NvcmUvaGVscGVycy9CaW5kaW5nVG9vbGtpdFwiO1xuaW1wb3J0IHsgZ2VuZXJhdGUgfSBmcm9tIFwiLi4vLi4vLi4vaGVscGVycy9TdGFibGVJZEhlbHBlclwiO1xuaW1wb3J0IHR5cGUgQ29udmVydGVyQ29udGV4dCBmcm9tIFwiLi4vLi4vQ29udmVydGVyQ29udGV4dFwiO1xuaW1wb3J0IHsgaXNBbm5vdGF0aW9uRmllbGRTdGF0aWNhbGx5SGlkZGVuLCBpc1JlZmVyZW5jZVByb3BlcnR5U3RhdGljYWxseUhpZGRlbiB9IGZyb20gXCIuLi8uLi9oZWxwZXJzL0RhdGFGaWVsZEhlbHBlclwiO1xuaW1wb3J0IHR5cGUgeyBBbm5vdGF0aW9uRm9ybUVsZW1lbnQsIEZvcm1FbGVtZW50IH0gZnJvbSBcIi4uL0NvbW1vbi9Gb3JtXCI7XG5pbXBvcnQgeyBGb3JtRWxlbWVudFR5cGUsIGdldEZvcm1FbGVtZW50c0Zyb21NYW5pZmVzdCB9IGZyb20gXCIuLi9Db21tb24vRm9ybVwiO1xuXG4vLyByZWdpb24gZGVmaW5pdGlvbnNcbi8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vL1xuLy8gRGVmaW5pdGlvbnM6IEhlYWRlciBGYWNldCBUeXBlcywgR2VuZXJpYyBPUCBIZWFkZXIgRmFjZXQsIE1hbmlmZXN0IFByb3BlcnRpZXMgZm9yIEN1c3RvbSBIZWFkZXIgRmFjZXRcbi8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vL1xuXG5leHBvcnQgZW51bSBIZWFkZXJGYWNldFR5cGUge1xuXHRBbm5vdGF0aW9uID0gXCJBbm5vdGF0aW9uXCIsXG5cdFhNTEZyYWdtZW50ID0gXCJYTUxGcmFnbWVudFwiXG59XG5cbmV4cG9ydCBlbnVtIEZhY2V0VHlwZSB7XG5cdFJlZmVyZW5jZSA9IFwiUmVmZXJlbmNlXCIsXG5cdENvbGxlY3Rpb24gPSBcIkNvbGxlY3Rpb25cIlxufVxuXG5leHBvcnQgZW51bSBGbGV4RGVzaWduVGltZVR5cGUge1xuXHREZWZhdWx0ID0gXCJEZWZhdWx0XCIsXG5cdE5vdEFkYXB0YWJsZSA9IFwibm90LWFkYXB0YWJsZVwiLCAvLyBkaXNhYmxlIGFsbCBhY3Rpb25zIG9uIHRoYXQgaW5zdGFuY2Vcblx0Tm90QWRhcHRhYmxlVHJlZSA9IFwibm90LWFkYXB0YWJsZS10cmVlXCIsIC8vIGRpc2FibGUgYWxsIGFjdGlvbnMgb24gdGhhdCBpbnN0YW5jZSBhbmQgb24gYWxsIGNoaWxkcmVuIG9mIHRoYXQgaW5zdGFuY2Vcblx0Tm90QWRhcHRhYmxlVmlzaWJpbGl0eSA9IFwibm90LWFkYXB0YWJsZS12aXNpYmlsaXR5XCIgLy8gZGlzYWJsZSBhbGwgYWN0aW9ucyB0aGF0IGluZmx1ZW5jZSB0aGUgdmlzaWJpbGl0eSwgbmFtZWx5IHJldmVhbCBhbmQgcmVtb3ZlXG59XG5cbmV4cG9ydCB0eXBlIEZsZXhTZXR0aW5ncyA9IHtcblx0ZGVzaWdudGltZT86IEZsZXhEZXNpZ25UaW1lVHlwZTtcbn07XG5cbnR5cGUgSGVhZGVyRm9ybURhdGEgPSB7XG5cdGlkOiBzdHJpbmc7XG5cdGxhYmVsPzogc3RyaW5nO1xuXHRmb3JtRWxlbWVudHM6IEZvcm1FbGVtZW50W107XG59O1xuXG5lbnVtIEhlYWRlckRhdGFQb2ludFR5cGUge1xuXHRQcm9ncmVzc0luZGljYXRvciA9IFwiUHJvZ3Jlc3NJbmRpY2F0b3JcIixcblx0UmF0aW5nSW5kaWNhdG9yID0gXCJSYXRpbmdJbmRpY2F0b3JcIixcblx0Q29udGVudCA9IFwiQ29udGVudFwiXG59XG5cbnR5cGUgSGVhZGVyRGF0YVBvaW50RGF0YSA9IHtcblx0dHlwZTogSGVhZGVyRGF0YVBvaW50VHlwZTtcbn07XG5cbmVudW0gVGFyZ2V0QW5ub3RhdGlvblR5cGUge1xuXHROb25lID0gXCJOb25lXCIsXG5cdERhdGFQb2ludCA9IFwiRGF0YVBvaW50XCIsXG5cdENoYXJ0ID0gXCJDaGFydFwiLFxuXHRJZGVudGlmaWNhdGlvbiA9IFwiSWRlbnRpZmljYXRpb25cIixcblx0Q29udGFjdCA9IFwiQ29udGFjdFwiLFxuXHRBZGRyZXNzID0gXCJBZGRyZXNzXCIsXG5cdEZpZWxkR3JvdXAgPSBcIkZpZWxkR3JvdXBcIlxufVxuXG50eXBlIEJhc2VIZWFkZXJGYWNldCA9IENvbmZpZ3VyYWJsZU9iamVjdCAmIHtcblx0dHlwZT86IEhlYWRlckZhY2V0VHlwZTsgLy8gTWFuaWZlc3Qgb3IgTWV0YWRhdGFcblx0aWQ6IHN0cmluZztcblx0Y29udGFpbmVySWQ6IHN0cmluZztcblx0YW5ub3RhdGlvblBhdGg/OiBzdHJpbmc7XG5cdGZsZXhTZXR0aW5nczogRmxleFNldHRpbmdzO1xuXHRzdGFzaGVkOiBib29sZWFuO1xuXHR2aXNpYmxlOiBDb21waWxlZEJpbmRpbmdUb29sa2l0RXhwcmVzc2lvbjtcblx0dGFyZ2V0QW5ub3RhdGlvblZhbHVlPzogc3RyaW5nO1xuXHR0YXJnZXRBbm5vdGF0aW9uVHlwZT86IFRhcmdldEFubm90YXRpb25UeXBlO1xufTtcblxudHlwZSBCYXNlUmVmZXJlbmNlRmFjZXQgPSBCYXNlSGVhZGVyRmFjZXQgJiB7XG5cdGZhY2V0VHlwZTogRmFjZXRUeXBlLlJlZmVyZW5jZTtcbn07XG5cbmV4cG9ydCB0eXBlIEZpZWxkR3JvdXBGYWNldCA9IEJhc2VSZWZlcmVuY2VGYWNldCAmIHtcblx0aGVhZGVyRm9ybURhdGE6IEhlYWRlckZvcm1EYXRhO1xufTtcblxudHlwZSBEYXRhUG9pbnRGYWNldCA9IEJhc2VSZWZlcmVuY2VGYWNldCAmIHtcblx0aGVhZGVyRGF0YVBvaW50RGF0YT86IEhlYWRlckRhdGFQb2ludERhdGE7XG59O1xuXG50eXBlIFJlZmVyZW5jZUZhY2V0ID0gRmllbGRHcm91cEZhY2V0IHwgRGF0YVBvaW50RmFjZXQ7XG5cbmV4cG9ydCB0eXBlIENvbGxlY3Rpb25GYWNldCA9IEJhc2VIZWFkZXJGYWNldCAmIHtcblx0ZmFjZXRUeXBlOiBGYWNldFR5cGUuQ29sbGVjdGlvbjtcblx0ZmFjZXRzOiBSZWZlcmVuY2VGYWNldFtdO1xufTtcblxuZXhwb3J0IHR5cGUgT2JqZWN0UGFnZUhlYWRlckZhY2V0ID0gUmVmZXJlbmNlRmFjZXQgfCBDb2xsZWN0aW9uRmFjZXQ7XG5cbmV4cG9ydCB0eXBlIEN1c3RvbU9iamVjdFBhZ2VIZWFkZXJGYWNldCA9IEN1c3RvbUVsZW1lbnQ8T2JqZWN0UGFnZUhlYWRlckZhY2V0PiAmIHtcblx0ZnJhZ21lbnROYW1lPzogc3RyaW5nO1xuXHR0aXRsZT86IHN0cmluZztcblx0c3ViVGl0bGU/OiBzdHJpbmc7XG5cdHN0YXNoZWQ/OiBib29sZWFuO1xuXHRiaW5kaW5nPzogc3RyaW5nO1xuXHR0ZW1wbGF0ZUVkaXQ/OiBzdHJpbmc7XG59O1xuXG4vLyBlbmRyZWdpb24gZGVmaW5pdGlvbnNcblxuLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vXG4vLyBDb2xsZWN0IEFsbCBIZWFkZXIgRmFjZXRzOiBDdXN0b20gKHZpYSBNYW5pZmVzdCkgYW5kIEFubm90YXRpb24gQmFzZWQgKHZpYSBNZXRhbW9kZWwpXG4vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy9cblxuLyoqXG4gKiBSZXRyaWV2ZSBoZWFkZXIgZmFjZXRzIGZyb20gYW5ub3RhdGlvbnMuXG4gKlxuICogQHBhcmFtIGNvbnZlcnRlckNvbnRleHRcbiAqIEByZXR1cm5zIEhlYWRlciBmYWNldHMgZnJvbSBhbm5vdGF0aW9uc1xuICovXG5leHBvcnQgZnVuY3Rpb24gZ2V0SGVhZGVyRmFjZXRzRnJvbUFubm90YXRpb25zKGNvbnZlcnRlckNvbnRleHQ6IENvbnZlcnRlckNvbnRleHQpOiBPYmplY3RQYWdlSGVhZGVyRmFjZXRbXSB7XG5cdGNvbnN0IGhlYWRlckZhY2V0czogT2JqZWN0UGFnZUhlYWRlckZhY2V0W10gPSBbXTtcblx0Y29udmVydGVyQ29udGV4dC5nZXRFbnRpdHlUeXBlKCkuYW5ub3RhdGlvbnM/LlVJPy5IZWFkZXJGYWNldHM/LmZvckVhY2goKGZhY2V0KSA9PiB7XG5cdFx0Y29uc3QgaGVhZGVyRmFjZXQ6IE9iamVjdFBhZ2VIZWFkZXJGYWNldCB8IHVuZGVmaW5lZCA9IGNyZWF0ZUhlYWRlckZhY2V0KGZhY2V0LCBjb252ZXJ0ZXJDb250ZXh0KTtcblx0XHRpZiAoaGVhZGVyRmFjZXQpIHtcblx0XHRcdGhlYWRlckZhY2V0cy5wdXNoKGhlYWRlckZhY2V0KTtcblx0XHR9XG5cdH0pO1xuXG5cdHJldHVybiBoZWFkZXJGYWNldHM7XG59XG5cbi8qKlxuICogUmV0cmlldmUgY3VzdG9tIGhlYWRlciBmYWNldHMgZnJvbSBtYW5pZmVzdC5cbiAqXG4gKiBAcGFyYW0gbWFuaWZlc3RDdXN0b21IZWFkZXJGYWNldHNcbiAqIEByZXR1cm5zIEhlYWRlckZhY2V0cyBmcm9tIG1hbmlmZXN0XG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBnZXRIZWFkZXJGYWNldHNGcm9tTWFuaWZlc3QoXG5cdG1hbmlmZXN0Q3VzdG9tSGVhZGVyRmFjZXRzOiBDb25maWd1cmFibGVSZWNvcmQ8TWFuaWZlc3RIZWFkZXJGYWNldD5cbik6IFJlY29yZDxzdHJpbmcsIEN1c3RvbU9iamVjdFBhZ2VIZWFkZXJGYWNldD4ge1xuXHRjb25zdCBjdXN0b21IZWFkZXJGYWNldHM6IFJlY29yZDxzdHJpbmcsIEN1c3RvbU9iamVjdFBhZ2VIZWFkZXJGYWNldD4gPSB7fTtcblxuXHRPYmplY3Qua2V5cyhtYW5pZmVzdEN1c3RvbUhlYWRlckZhY2V0cykuZm9yRWFjaCgobWFuaWZlc3RIZWFkZXJGYWNldEtleSkgPT4ge1xuXHRcdGNvbnN0IGN1c3RvbUhlYWRlckZhY2V0OiBNYW5pZmVzdEhlYWRlckZhY2V0ID0gbWFuaWZlc3RDdXN0b21IZWFkZXJGYWNldHNbbWFuaWZlc3RIZWFkZXJGYWNldEtleV07XG5cdFx0Y3VzdG9tSGVhZGVyRmFjZXRzW21hbmlmZXN0SGVhZGVyRmFjZXRLZXldID0gY3JlYXRlQ3VzdG9tSGVhZGVyRmFjZXQoY3VzdG9tSGVhZGVyRmFjZXQsIG1hbmlmZXN0SGVhZGVyRmFjZXRLZXkpO1xuXHR9KTtcblxuXHRyZXR1cm4gY3VzdG9tSGVhZGVyRmFjZXRzO1xufVxuXG4vKipcbiAqIFJldHJpZXZlIHN0YXNoZWQgc2V0dGluZ3MgZm9yIGhlYWRlciBmYWNldHMgZnJvbSBtYW5pZmVzdC5cbiAqXG4gKiBAcGFyYW0gZmFjZXREZWZpbml0aW9uXG4gKiBAcGFyYW0gY29sbGVjdGlvbkZhY2V0RGVmaW5pdGlvblxuICogQHBhcmFtIGNvbnZlcnRlckNvbnRleHRcbiAqIEByZXR1cm5zIFN0YXNoZWQgc2V0dGluZyBmb3IgaGVhZGVyIGZhY2V0IG9yIGZhbHNlXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBnZXRTdGFzaGVkU2V0dGluZ3NGb3JIZWFkZXJGYWNldChcblx0ZmFjZXREZWZpbml0aW9uOiBGYWNldFR5cGVzLFxuXHRjb2xsZWN0aW9uRmFjZXREZWZpbml0aW9uOiBGYWNldFR5cGVzLFxuXHRjb252ZXJ0ZXJDb250ZXh0OiBDb252ZXJ0ZXJDb250ZXh0XG4pOiBib29sZWFuIHtcblx0Ly8gV2hlbiBhIEhlYWRlckZhY2V0IGlzIG5lc3RlZCBpbnNpZGUgYSBDb2xsZWN0aW9uRmFjZXQsIHN0YXNoaW5nIGlzIG5vdCBzdXBwb3J0ZWRcblx0aWYgKFxuXHRcdGZhY2V0RGVmaW5pdGlvbi4kVHlwZSA9PT0gVUlBbm5vdGF0aW9uVHlwZXMuUmVmZXJlbmNlRmFjZXQgJiZcblx0XHRjb2xsZWN0aW9uRmFjZXREZWZpbml0aW9uLiRUeXBlID09PSBVSUFubm90YXRpb25UeXBlcy5Db2xsZWN0aW9uRmFjZXRcblx0KSB7XG5cdFx0cmV0dXJuIGZhbHNlO1xuXHR9XG5cdGNvbnN0IGhlYWRlckZhY2V0SUQgPSBnZW5lcmF0ZShbeyBGYWNldDogZmFjZXREZWZpbml0aW9uIH1dKTtcblx0Y29uc3QgaGVhZGVyRmFjZXRzQ29udHJvbENvbmZpZyA9IGNvbnZlcnRlckNvbnRleHQuZ2V0TWFuaWZlc3RXcmFwcGVyKCkuZ2V0SGVhZGVyRmFjZXRzKCk7XG5cdGNvbnN0IHN0YXNoZWRTZXR0aW5nID0gaGVhZGVyRmFjZXRzQ29udHJvbENvbmZpZ1toZWFkZXJGYWNldElEXT8uc3Rhc2hlZDtcblx0cmV0dXJuIHN0YXNoZWRTZXR0aW5nID09PSB0cnVlO1xufVxuXG4vKipcbiAqIFJldHJpZXZlIGZsZXhpYmlsaXR5IGRlc2lnbnRpbWUgc2V0dGluZ3MgZnJvbSBtYW5pZmVzdC5cbiAqXG4gKiBAcGFyYW0gZmFjZXREZWZpbml0aW9uXG4gKiBAcGFyYW0gY29sbGVjdGlvbkZhY2V0RGVmaW5pdGlvblxuICogQHBhcmFtIGNvbnZlcnRlckNvbnRleHRcbiAqIEByZXR1cm5zIERlc2lnbnRpbWUgc2V0dGluZyBvciBkZWZhdWx0XG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBnZXREZXNpZ25UaW1lTWV0YWRhdGFTZXR0aW5nc0ZvckhlYWRlckZhY2V0KFxuXHRmYWNldERlZmluaXRpb246IEZhY2V0VHlwZXMsXG5cdGNvbGxlY3Rpb25GYWNldERlZmluaXRpb246IEZhY2V0VHlwZXMsXG5cdGNvbnZlcnRlckNvbnRleHQ6IENvbnZlcnRlckNvbnRleHRcbik6IEZsZXhEZXNpZ25UaW1lVHlwZSB7XG5cdGxldCBkZXNpZ25UaW1lTWV0YWRhdGE6IEZsZXhEZXNpZ25UaW1lVHlwZSA9IEZsZXhEZXNpZ25UaW1lVHlwZS5EZWZhdWx0O1xuXHRjb25zdCBoZWFkZXJGYWNldElEID0gZ2VuZXJhdGUoW3sgRmFjZXQ6IGZhY2V0RGVmaW5pdGlvbiB9XSk7XG5cblx0Ly8gRm9yIEhlYWRlckZhY2V0cyBuZXN0ZWQgaW5zaWRlIENvbGxlY3Rpb25GYWNldCBSVEEgc2hvdWxkIGJlIGRpc2FibGVkLCB0aGVyZWZvcmUgc2V0IHRvIFwibm90LWFkYXB0YWJsZS10cmVlXCJcblx0aWYgKFxuXHRcdGZhY2V0RGVmaW5pdGlvbi4kVHlwZSA9PT0gVUlBbm5vdGF0aW9uVHlwZXMuUmVmZXJlbmNlRmFjZXQgJiZcblx0XHRjb2xsZWN0aW9uRmFjZXREZWZpbml0aW9uLiRUeXBlID09PSBVSUFubm90YXRpb25UeXBlcy5Db2xsZWN0aW9uRmFjZXRcblx0KSB7XG5cdFx0ZGVzaWduVGltZU1ldGFkYXRhID0gRmxleERlc2lnblRpbWVUeXBlLk5vdEFkYXB0YWJsZVRyZWU7XG5cdH0gZWxzZSB7XG5cdFx0Y29uc3QgaGVhZGVyRmFjZXRzQ29udHJvbENvbmZpZyA9IGNvbnZlcnRlckNvbnRleHQuZ2V0TWFuaWZlc3RXcmFwcGVyKCkuZ2V0SGVhZGVyRmFjZXRzKCk7XG5cdFx0aWYgKGhlYWRlckZhY2V0SUQpIHtcblx0XHRcdGNvbnN0IGRlc2lnblRpbWUgPSBoZWFkZXJGYWNldHNDb250cm9sQ29uZmlnW2hlYWRlckZhY2V0SURdPy5mbGV4U2V0dGluZ3M/LmRlc2lnbnRpbWU7XG5cdFx0XHRzd2l0Y2ggKGRlc2lnblRpbWUpIHtcblx0XHRcdFx0Y2FzZSBGbGV4RGVzaWduVGltZVR5cGUuTm90QWRhcHRhYmxlOlxuXHRcdFx0XHRjYXNlIEZsZXhEZXNpZ25UaW1lVHlwZS5Ob3RBZGFwdGFibGVUcmVlOlxuXHRcdFx0XHRjYXNlIEZsZXhEZXNpZ25UaW1lVHlwZS5Ob3RBZGFwdGFibGVWaXNpYmlsaXR5OlxuXHRcdFx0XHRcdGRlc2lnblRpbWVNZXRhZGF0YSA9IGRlc2lnblRpbWU7XG5cdFx0XHRcdFx0YnJlYWs7XG5cdFx0XHRcdGRlZmF1bHQ6XG5cdFx0XHRcdFx0YnJlYWs7XG5cdFx0XHR9XG5cdFx0fVxuXHR9XG5cdHJldHVybiBkZXNpZ25UaW1lTWV0YWRhdGE7XG59XG5cbi8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vL1xuLy8gQ29udmVydCAmIEJ1aWxkIEFubm90YXRpb24gQmFzZWQgSGVhZGVyIEZhY2V0c1xuLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vXG5mdW5jdGlvbiBjcmVhdGVSZWZlcmVuY2VIZWFkZXJGYWNldChcblx0ZmFjZXREZWZpbml0aW9uOiBGYWNldFR5cGVzLFxuXHRjb2xsZWN0aW9uRmFjZXREZWZpbml0aW9uOiBGYWNldFR5cGVzLFxuXHRjb252ZXJ0ZXJDb250ZXh0OiBDb252ZXJ0ZXJDb250ZXh0XG4pOiBSZWZlcmVuY2VGYWNldCB8IHVuZGVmaW5lZCB7XG5cdGlmIChmYWNldERlZmluaXRpb24uJFR5cGUgPT09IFVJQW5ub3RhdGlvblR5cGVzLlJlZmVyZW5jZUZhY2V0ICYmICEoZmFjZXREZWZpbml0aW9uLmFubm90YXRpb25zPy5VST8uSGlkZGVuPy52YWx1ZU9mKCkgPT09IHRydWUpKSB7XG5cdFx0Y29uc3QgaGVhZGVyRmFjZXRJRCA9IGdldEhlYWRlckZhY2V0SUQoeyBGYWNldDogZmFjZXREZWZpbml0aW9uIH0pLFxuXHRcdFx0Z2V0SGVhZGVyRmFjZXRLZXkgPSAoZmFjZXREZWZpbml0aW9uVG9DaGVjazogRmFjZXRUeXBlcywgZmFsbGJhY2s6IHN0cmluZyk6IHN0cmluZyA9PiB7XG5cdFx0XHRcdHJldHVybiBmYWNldERlZmluaXRpb25Ub0NoZWNrLklEPy50b1N0cmluZygpIHx8IGZhY2V0RGVmaW5pdGlvblRvQ2hlY2suTGFiZWw/LnRvU3RyaW5nKCkgfHwgZmFsbGJhY2s7XG5cdFx0XHR9LFxuXHRcdFx0dGFyZ2V0QW5ub3RhdGlvblZhbHVlID0gZmFjZXREZWZpbml0aW9uLlRhcmdldC52YWx1ZSxcblx0XHRcdHRhcmdldEFubm90YXRpb25UeXBlID0gZ2V0VGFyZ2V0QW5ub3RhdGlvblR5cGUoZmFjZXREZWZpbml0aW9uKTtcblxuXHRcdGxldCBoZWFkZXJGb3JtRGF0YTogSGVhZGVyRm9ybURhdGEgfCB1bmRlZmluZWQ7XG5cdFx0bGV0IGhlYWRlckRhdGFQb2ludERhdGE6IEhlYWRlckRhdGFQb2ludERhdGEgfCB1bmRlZmluZWQ7XG5cblx0XHRzd2l0Y2ggKHRhcmdldEFubm90YXRpb25UeXBlKSB7XG5cdFx0XHRjYXNlIFRhcmdldEFubm90YXRpb25UeXBlLkZpZWxkR3JvdXA6XG5cdFx0XHRcdGhlYWRlckZvcm1EYXRhID0gZ2V0RmllbGRHcm91cEZvcm1EYXRhKGZhY2V0RGVmaW5pdGlvbiwgY29udmVydGVyQ29udGV4dCk7XG5cdFx0XHRcdGJyZWFrO1xuXG5cdFx0XHRjYXNlIFRhcmdldEFubm90YXRpb25UeXBlLkRhdGFQb2ludDpcblx0XHRcdFx0aGVhZGVyRGF0YVBvaW50RGF0YSA9IGdldERhdGFQb2ludERhdGEoZmFjZXREZWZpbml0aW9uKTtcblx0XHRcdFx0YnJlYWs7XG5cdFx0XHQvLyBUb0RvOiBIYW5kbGUgb3RoZXIgY2FzZXNcblx0XHRcdGRlZmF1bHQ6XG5cdFx0XHRcdGJyZWFrO1xuXHRcdH1cblxuXHRcdGNvbnN0IHsgYW5ub3RhdGlvbnMgfSA9IGZhY2V0RGVmaW5pdGlvbjtcblx0XHRpZiAoXG5cdFx0XHRmYWNldERlZmluaXRpb24uVGFyZ2V0Py4kdGFyZ2V0Py50ZXJtID09PSBVSUFubm90YXRpb25UZXJtcy5DaGFydCAmJlxuXHRcdFx0aXNBbm5vdGF0aW9uRmllbGRTdGF0aWNhbGx5SGlkZGVuKGZhY2V0RGVmaW5pdGlvbiBhcyBhbnkpXG5cdFx0KSB7XG5cdFx0XHRyZXR1cm4gdW5kZWZpbmVkO1xuXHRcdH0gZWxzZSB7XG5cdFx0XHRyZXR1cm4ge1xuXHRcdFx0XHR0eXBlOiBIZWFkZXJGYWNldFR5cGUuQW5ub3RhdGlvbixcblx0XHRcdFx0ZmFjZXRUeXBlOiBGYWNldFR5cGUuUmVmZXJlbmNlLFxuXHRcdFx0XHRpZDogaGVhZGVyRmFjZXRJRCxcblx0XHRcdFx0Y29udGFpbmVySWQ6IGdldEhlYWRlckZhY2V0Q29udGFpbmVySUQoeyBGYWNldDogZmFjZXREZWZpbml0aW9uIH0pLFxuXHRcdFx0XHRrZXk6IGdldEhlYWRlckZhY2V0S2V5KGZhY2V0RGVmaW5pdGlvbiwgaGVhZGVyRmFjZXRJRCksXG5cdFx0XHRcdGZsZXhTZXR0aW5nczoge1xuXHRcdFx0XHRcdGRlc2lnbnRpbWU6IGdldERlc2lnblRpbWVNZXRhZGF0YVNldHRpbmdzRm9ySGVhZGVyRmFjZXQoZmFjZXREZWZpbml0aW9uLCBjb2xsZWN0aW9uRmFjZXREZWZpbml0aW9uLCBjb252ZXJ0ZXJDb250ZXh0KVxuXHRcdFx0XHR9LFxuXHRcdFx0XHRzdGFzaGVkOiBnZXRTdGFzaGVkU2V0dGluZ3NGb3JIZWFkZXJGYWNldChmYWNldERlZmluaXRpb24sIGNvbGxlY3Rpb25GYWNldERlZmluaXRpb24sIGNvbnZlcnRlckNvbnRleHQpLFxuXHRcdFx0XHR2aXNpYmxlOiBjb21waWxlRXhwcmVzc2lvbihub3QoZXF1YWwoZ2V0RXhwcmVzc2lvbkZyb21Bbm5vdGF0aW9uKGFubm90YXRpb25zPy5VST8uSGlkZGVuPy52YWx1ZU9mKCkpLCB0cnVlKSkpLFxuXHRcdFx0XHRhbm5vdGF0aW9uUGF0aDogYCR7Y29udmVydGVyQ29udGV4dC5nZXRFbnRpdHlTZXRCYXNlZEFubm90YXRpb25QYXRoKGZhY2V0RGVmaW5pdGlvbi5mdWxseVF1YWxpZmllZE5hbWUpfS9gLFxuXHRcdFx0XHR0YXJnZXRBbm5vdGF0aW9uVmFsdWUsXG5cdFx0XHRcdHRhcmdldEFubm90YXRpb25UeXBlLFxuXHRcdFx0XHRoZWFkZXJGb3JtRGF0YSxcblx0XHRcdFx0aGVhZGVyRGF0YVBvaW50RGF0YVxuXHRcdFx0fTtcblx0XHR9XG5cdH1cblxuXHRyZXR1cm4gdW5kZWZpbmVkO1xufVxuXG5mdW5jdGlvbiBjcmVhdGVDb2xsZWN0aW9uSGVhZGVyRmFjZXQoXG5cdGNvbGxlY3Rpb25GYWNldERlZmluaXRpb246IEZhY2V0VHlwZXMsXG5cdGNvbnZlcnRlckNvbnRleHQ6IENvbnZlcnRlckNvbnRleHRcbik6IENvbGxlY3Rpb25GYWNldCB8IHVuZGVmaW5lZCB7XG5cdGlmIChjb2xsZWN0aW9uRmFjZXREZWZpbml0aW9uLiRUeXBlID09PSBVSUFubm90YXRpb25UeXBlcy5Db2xsZWN0aW9uRmFjZXQpIHtcblx0XHRjb25zdCBmYWNldHM6IFJlZmVyZW5jZUZhY2V0W10gPSBbXSxcblx0XHRcdGhlYWRlckZhY2V0SUQgPSBnZXRIZWFkZXJGYWNldElEKHsgRmFjZXQ6IGNvbGxlY3Rpb25GYWNldERlZmluaXRpb24gfSksXG5cdFx0XHRnZXRIZWFkZXJGYWNldEtleSA9IChmYWNldERlZmluaXRpb246IEZhY2V0VHlwZXMsIGZhbGxiYWNrOiBzdHJpbmcpOiBzdHJpbmcgPT4ge1xuXHRcdFx0XHRyZXR1cm4gZmFjZXREZWZpbml0aW9uLklEPy50b1N0cmluZygpIHx8IGZhY2V0RGVmaW5pdGlvbi5MYWJlbD8udG9TdHJpbmcoKSB8fCBmYWxsYmFjaztcblx0XHRcdH07XG5cblx0XHRjb2xsZWN0aW9uRmFjZXREZWZpbml0aW9uLkZhY2V0cy5mb3JFYWNoKChmYWNldERlZmluaXRpb24pID0+IHtcblx0XHRcdGNvbnN0IGZhY2V0OiBSZWZlcmVuY2VGYWNldCB8IHVuZGVmaW5lZCA9IGNyZWF0ZVJlZmVyZW5jZUhlYWRlckZhY2V0KFxuXHRcdFx0XHRmYWNldERlZmluaXRpb24sXG5cdFx0XHRcdGNvbGxlY3Rpb25GYWNldERlZmluaXRpb24sXG5cdFx0XHRcdGNvbnZlcnRlckNvbnRleHRcblx0XHRcdCk7XG5cdFx0XHRpZiAoZmFjZXQpIHtcblx0XHRcdFx0ZmFjZXRzLnB1c2goZmFjZXQpO1xuXHRcdFx0fVxuXHRcdH0pO1xuXG5cdFx0cmV0dXJuIHtcblx0XHRcdHR5cGU6IEhlYWRlckZhY2V0VHlwZS5Bbm5vdGF0aW9uLFxuXHRcdFx0ZmFjZXRUeXBlOiBGYWNldFR5cGUuQ29sbGVjdGlvbixcblx0XHRcdGlkOiBoZWFkZXJGYWNldElELFxuXHRcdFx0Y29udGFpbmVySWQ6IGdldEhlYWRlckZhY2V0Q29udGFpbmVySUQoeyBGYWNldDogY29sbGVjdGlvbkZhY2V0RGVmaW5pdGlvbiB9KSxcblx0XHRcdGtleTogZ2V0SGVhZGVyRmFjZXRLZXkoY29sbGVjdGlvbkZhY2V0RGVmaW5pdGlvbiwgaGVhZGVyRmFjZXRJRCksXG5cdFx0XHRmbGV4U2V0dGluZ3M6IHtcblx0XHRcdFx0ZGVzaWdudGltZTogZ2V0RGVzaWduVGltZU1ldGFkYXRhU2V0dGluZ3NGb3JIZWFkZXJGYWNldChcblx0XHRcdFx0XHRjb2xsZWN0aW9uRmFjZXREZWZpbml0aW9uLFxuXHRcdFx0XHRcdGNvbGxlY3Rpb25GYWNldERlZmluaXRpb24sXG5cdFx0XHRcdFx0Y29udmVydGVyQ29udGV4dFxuXHRcdFx0XHQpXG5cdFx0XHR9LFxuXHRcdFx0c3Rhc2hlZDogZ2V0U3Rhc2hlZFNldHRpbmdzRm9ySGVhZGVyRmFjZXQoY29sbGVjdGlvbkZhY2V0RGVmaW5pdGlvbiwgY29sbGVjdGlvbkZhY2V0RGVmaW5pdGlvbiwgY29udmVydGVyQ29udGV4dCksXG5cdFx0XHR2aXNpYmxlOiBjb21waWxlRXhwcmVzc2lvbihcblx0XHRcdFx0bm90KGVxdWFsKGdldEV4cHJlc3Npb25Gcm9tQW5ub3RhdGlvbihjb2xsZWN0aW9uRmFjZXREZWZpbml0aW9uLmFubm90YXRpb25zPy5VST8uSGlkZGVuPy52YWx1ZU9mKCkpLCB0cnVlKSlcblx0XHRcdCksXG5cdFx0XHRhbm5vdGF0aW9uUGF0aDogYCR7Y29udmVydGVyQ29udGV4dC5nZXRFbnRpdHlTZXRCYXNlZEFubm90YXRpb25QYXRoKGNvbGxlY3Rpb25GYWNldERlZmluaXRpb24uZnVsbHlRdWFsaWZpZWROYW1lKX0vYCxcblx0XHRcdGZhY2V0c1xuXHRcdH07XG5cdH1cblxuXHRyZXR1cm4gdW5kZWZpbmVkO1xufVxuXG5mdW5jdGlvbiBnZXRUYXJnZXRBbm5vdGF0aW9uVHlwZShmYWNldERlZmluaXRpb246IEZhY2V0VHlwZXMpOiBUYXJnZXRBbm5vdGF0aW9uVHlwZSB7XG5cdGxldCBhbm5vdGF0aW9uVHlwZSA9IFRhcmdldEFubm90YXRpb25UeXBlLk5vbmU7XG5cdGNvbnN0IGFubm90YXRpb25UeXBlTWFwOiBSZWNvcmQ8c3RyaW5nLCBUYXJnZXRBbm5vdGF0aW9uVHlwZT4gPSB7XG5cdFx0XCJjb20uc2FwLnZvY2FidWxhcmllcy5VSS52MS5EYXRhUG9pbnRcIjogVGFyZ2V0QW5ub3RhdGlvblR5cGUuRGF0YVBvaW50LFxuXHRcdFwiY29tLnNhcC52b2NhYnVsYXJpZXMuVUkudjEuQ2hhcnRcIjogVGFyZ2V0QW5ub3RhdGlvblR5cGUuQ2hhcnQsXG5cdFx0XCJjb20uc2FwLnZvY2FidWxhcmllcy5VSS52MS5JZGVudGlmaWNhdGlvblwiOiBUYXJnZXRBbm5vdGF0aW9uVHlwZS5JZGVudGlmaWNhdGlvbixcblx0XHRcImNvbS5zYXAudm9jYWJ1bGFyaWVzLkNvbW11bmljYXRpb24udjEuQ29udGFjdFwiOiBUYXJnZXRBbm5vdGF0aW9uVHlwZS5Db250YWN0LFxuXHRcdFwiY29tLnNhcC52b2NhYnVsYXJpZXMuQ29tbXVuaWNhdGlvbi52MS5BZGRyZXNzXCI6IFRhcmdldEFubm90YXRpb25UeXBlLkFkZHJlc3MsXG5cdFx0XCJjb20uc2FwLnZvY2FidWxhcmllcy5VSS52MS5GaWVsZEdyb3VwXCI6IFRhcmdldEFubm90YXRpb25UeXBlLkZpZWxkR3JvdXBcblx0fTtcblx0Ly8gUmVmZXJlbmNlVVJMRmFjZXQgYW5kIENvbGxlY3Rpb25GYWNldCBkbyBub3QgaGF2ZSBUYXJnZXQgcHJvcGVydHkuXG5cdGlmIChmYWNldERlZmluaXRpb24uJFR5cGUgIT09IFVJQW5ub3RhdGlvblR5cGVzLlJlZmVyZW5jZVVSTEZhY2V0ICYmIGZhY2V0RGVmaW5pdGlvbi4kVHlwZSAhPT0gVUlBbm5vdGF0aW9uVHlwZXMuQ29sbGVjdGlvbkZhY2V0KSB7XG5cdFx0YW5ub3RhdGlvblR5cGUgPSBhbm5vdGF0aW9uVHlwZU1hcFtmYWNldERlZmluaXRpb24uVGFyZ2V0Py4kdGFyZ2V0Py50ZXJtXSB8fCBUYXJnZXRBbm5vdGF0aW9uVHlwZS5Ob25lO1xuXHR9XG5cblx0cmV0dXJuIGFubm90YXRpb25UeXBlO1xufVxuXG5mdW5jdGlvbiBnZXRGaWVsZEdyb3VwRm9ybURhdGEoZmFjZXREZWZpbml0aW9uOiBSZWZlcmVuY2VGYWNldFR5cGVzLCBjb252ZXJ0ZXJDb250ZXh0OiBDb252ZXJ0ZXJDb250ZXh0KTogSGVhZGVyRm9ybURhdGEge1xuXHQvLyBzcGxpdCBpbiB0aGlzIGZyb20gYW5ub3RhdGlvbiArIGdldEZpZWxkR3JvdXBGcm9tRGVmYXVsdFxuXHRpZiAoIWZhY2V0RGVmaW5pdGlvbikge1xuXHRcdHRocm93IG5ldyBFcnJvcihcIkNhbm5vdCBnZXQgRmllbGRHcm91cCBmb3JtIGRhdGEgd2l0aG91dCBmYWNldCBkZWZpbml0aW9uXCIpO1xuXHR9XG5cblx0Y29uc3QgZm9ybUVsZW1lbnRzID0gaW5zZXJ0Q3VzdG9tRWxlbWVudHMoXG5cdFx0Z2V0Rm9ybUVsZW1lbnRzRnJvbUFubm90YXRpb25zKGZhY2V0RGVmaW5pdGlvbiwgY29udmVydGVyQ29udGV4dCksXG5cdFx0Z2V0Rm9ybUVsZW1lbnRzRnJvbU1hbmlmZXN0KGZhY2V0RGVmaW5pdGlvbiwgY29udmVydGVyQ29udGV4dClcblx0KTtcblxuXHRyZXR1cm4ge1xuXHRcdGlkOiBnZXRIZWFkZXJGYWNldEZvcm1JRCh7IEZhY2V0OiBmYWNldERlZmluaXRpb24gfSksXG5cdFx0bGFiZWw6IGZhY2V0RGVmaW5pdGlvbi5MYWJlbD8udG9TdHJpbmcoKSxcblx0XHRmb3JtRWxlbWVudHNcblx0fTtcbn1cblxuLyoqXG4gKiBDcmVhdGVzIGFuIGFycmF5IG9mIG1hbmlmZXN0LWJhc2VkIEZvcm1FbGVtZW50cy5cbiAqXG4gKiBAcGFyYW0gZmFjZXREZWZpbml0aW9uIFRoZSBkZWZpbml0aW9uIG9mIHRoZSBmYWNldFxuICogQHBhcmFtIGNvbnZlcnRlckNvbnRleHQgVGhlIGNvbnZlcnRlciBjb250ZXh0IGZvciB0aGUgZmFjZXRcbiAqIEByZXR1cm5zIEFubm90YXRpb24tYmFzZWQgRm9ybUVsZW1lbnRzXG4gKi9cbmZ1bmN0aW9uIGdldEZvcm1FbGVtZW50c0Zyb21Bbm5vdGF0aW9ucyhmYWNldERlZmluaXRpb246IEZhY2V0VHlwZXMsIGNvbnZlcnRlckNvbnRleHQ6IENvbnZlcnRlckNvbnRleHQpOiBBbm5vdGF0aW9uRm9ybUVsZW1lbnRbXSB7XG5cdGNvbnN0IGFubm90YXRpb25CYXNlZEZvcm1FbGVtZW50czogQW5ub3RhdGlvbkZvcm1FbGVtZW50W10gPSBbXTtcblxuXHQvLyBSZWZlcmVuY2VVUkxGYWNldCBhbmQgQ29sbGVjdGlvbkZhY2V0IGRvIG5vdCBoYXZlIFRhcmdldCBwcm9wZXJ0eS5cblx0aWYgKGZhY2V0RGVmaW5pdGlvbi4kVHlwZSAhPT0gVUlBbm5vdGF0aW9uVHlwZXMuUmVmZXJlbmNlVVJMRmFjZXQgJiYgZmFjZXREZWZpbml0aW9uLiRUeXBlICE9PSBVSUFubm90YXRpb25UeXBlcy5Db2xsZWN0aW9uRmFjZXQpIHtcblx0XHQoZmFjZXREZWZpbml0aW9uLlRhcmdldD8uJHRhcmdldCBhcyBGaWVsZEdyb3VwKT8uRGF0YS5mb3JFYWNoKChkYXRhRmllbGQ6IERhdGFGaWVsZEFic3RyYWN0VHlwZXMpID0+IHtcblx0XHRcdGlmICghKGRhdGFGaWVsZC5hbm5vdGF0aW9ucz8uVUk/LkhpZGRlbj8udmFsdWVPZigpID09PSB0cnVlKSkge1xuXHRcdFx0XHRjb25zdCBzZW1hbnRpY09iamVjdEFubm90YXRpb25QYXRoID0gZ2V0U2VtYW50aWNPYmplY3RQYXRoKGNvbnZlcnRlckNvbnRleHQsIGRhdGFGaWVsZCk7XG5cdFx0XHRcdGlmIChcblx0XHRcdFx0XHQoZGF0YUZpZWxkLiRUeXBlID09PSBVSUFubm90YXRpb25UeXBlcy5EYXRhRmllbGQgfHxcblx0XHRcdFx0XHRcdGRhdGFGaWVsZC4kVHlwZSA9PT0gVUlBbm5vdGF0aW9uVHlwZXMuRGF0YUZpZWxkV2l0aFVybCB8fFxuXHRcdFx0XHRcdFx0ZGF0YUZpZWxkLiRUeXBlID09PSBVSUFubm90YXRpb25UeXBlcy5EYXRhRmllbGRXaXRoTmF2aWdhdGlvblBhdGggfHxcblx0XHRcdFx0XHRcdGRhdGFGaWVsZC4kVHlwZSA9PT0gVUlBbm5vdGF0aW9uVHlwZXMuRGF0YUZpZWxkV2l0aEludGVudEJhc2VkTmF2aWdhdGlvbiB8fFxuXHRcdFx0XHRcdFx0ZGF0YUZpZWxkLiRUeXBlID09PSBVSUFubm90YXRpb25UeXBlcy5EYXRhRmllbGRXaXRoQWN0aW9uKSAmJlxuXHRcdFx0XHRcdCFpc1JlZmVyZW5jZVByb3BlcnR5U3RhdGljYWxseUhpZGRlbihkYXRhRmllbGQpXG5cdFx0XHRcdCkge1xuXHRcdFx0XHRcdGNvbnN0IHsgYW5ub3RhdGlvbnMgfSA9IGRhdGFGaWVsZDtcblx0XHRcdFx0XHRhbm5vdGF0aW9uQmFzZWRGb3JtRWxlbWVudHMucHVzaCh7XG5cdFx0XHRcdFx0XHRpc1ZhbHVlTXVsdGlsaW5lVGV4dDogZGF0YUZpZWxkLlZhbHVlPy4kdGFyZ2V0Py5hbm5vdGF0aW9ucz8uVUk/Lk11bHRpTGluZVRleHQ/LnZhbHVlT2YoKSA9PT0gdHJ1ZSxcblx0XHRcdFx0XHRcdHR5cGU6IEZvcm1FbGVtZW50VHlwZS5Bbm5vdGF0aW9uLFxuXHRcdFx0XHRcdFx0a2V5OiBLZXlIZWxwZXIuZ2VuZXJhdGVLZXlGcm9tRGF0YUZpZWxkKGRhdGFGaWVsZCksXG5cdFx0XHRcdFx0XHR2aXNpYmxlOiBjb21waWxlRXhwcmVzc2lvbihub3QoZXF1YWwoZ2V0RXhwcmVzc2lvbkZyb21Bbm5vdGF0aW9uKGFubm90YXRpb25zPy5VST8uSGlkZGVuPy52YWx1ZU9mKCkpLCB0cnVlKSkpLFxuXHRcdFx0XHRcdFx0bGFiZWw6IGRhdGFGaWVsZC5WYWx1ZT8uJHRhcmdldD8uYW5ub3RhdGlvbnM/LkNvbW1vbj8uTGFiZWwgfHwgZGF0YUZpZWxkLkxhYmVsLFxuXHRcdFx0XHRcdFx0aWRQcmVmaXg6IGdldEhlYWRlckZhY2V0Rm9ybUlEKHsgRmFjZXQ6IGZhY2V0RGVmaW5pdGlvbiB9LCBkYXRhRmllbGQpLFxuXHRcdFx0XHRcdFx0YW5ub3RhdGlvblBhdGg6IGAke2NvbnZlcnRlckNvbnRleHQuZ2V0RW50aXR5U2V0QmFzZWRBbm5vdGF0aW9uUGF0aChkYXRhRmllbGQuZnVsbHlRdWFsaWZpZWROYW1lKX0vYCxcblx0XHRcdFx0XHRcdHNlbWFudGljT2JqZWN0UGF0aDogc2VtYW50aWNPYmplY3RBbm5vdGF0aW9uUGF0aFxuXHRcdFx0XHRcdH0pO1xuXHRcdFx0XHR9IGVsc2UgaWYgKFxuXHRcdFx0XHRcdGRhdGFGaWVsZC4kVHlwZSA9PT0gVUlBbm5vdGF0aW9uVHlwZXMuRGF0YUZpZWxkRm9yQW5ub3RhdGlvbiAmJlxuXHRcdFx0XHRcdCFpc1JlZmVyZW5jZVByb3BlcnR5U3RhdGljYWxseUhpZGRlbihkYXRhRmllbGQpXG5cdFx0XHRcdCkge1xuXHRcdFx0XHRcdGNvbnN0IHsgYW5ub3RhdGlvbnMgfSA9IGRhdGFGaWVsZDtcblx0XHRcdFx0XHRhbm5vdGF0aW9uQmFzZWRGb3JtRWxlbWVudHMucHVzaCh7XG5cdFx0XHRcdFx0XHQvLyBGSVhNRSB0aGlzIGlzIHdyb25nLCB0aGUgYW5ub3RhdGlvbiBzaG91bGQgZXhpc3QsIHNvIHRoZSB0YXJnZXQgaXMgbm90IHByb3Blcmx5IGlkZW50aWZpZWRcblx0XHRcdFx0XHRcdGlzVmFsdWVNdWx0aWxpbmVUZXh0OiAoZGF0YUZpZWxkLlRhcmdldD8uJHRhcmdldD8uYW5ub3RhdGlvbnM/LlVJIGFzIGFueSk/Lk11bHRpTGluZVRleHQ/LnZhbHVlT2YoKSA9PT0gdHJ1ZSxcblx0XHRcdFx0XHRcdHR5cGU6IEZvcm1FbGVtZW50VHlwZS5Bbm5vdGF0aW9uLFxuXHRcdFx0XHRcdFx0a2V5OiBLZXlIZWxwZXIuZ2VuZXJhdGVLZXlGcm9tRGF0YUZpZWxkKGRhdGFGaWVsZCksXG5cdFx0XHRcdFx0XHR2aXNpYmxlOiBjb21waWxlRXhwcmVzc2lvbihub3QoZXF1YWwoZ2V0RXhwcmVzc2lvbkZyb21Bbm5vdGF0aW9uKGFubm90YXRpb25zPy5VST8uSGlkZGVuPy52YWx1ZU9mKCkpLCB0cnVlKSkpLFxuXHRcdFx0XHRcdFx0bGFiZWw6IGRhdGFGaWVsZC5UYXJnZXQ/LiR0YXJnZXQ/LmFubm90YXRpb25zPy5Db21tb24/LkxhYmVsPy50b1N0cmluZygpIHx8IGRhdGFGaWVsZC5MYWJlbD8udG9TdHJpbmcoKSxcblx0XHRcdFx0XHRcdGlkUHJlZml4OiBnZXRIZWFkZXJGYWNldEZvcm1JRCh7IEZhY2V0OiBmYWNldERlZmluaXRpb24gfSwgZGF0YUZpZWxkKSxcblx0XHRcdFx0XHRcdGFubm90YXRpb25QYXRoOiBgJHtjb252ZXJ0ZXJDb250ZXh0LmdldEVudGl0eVNldEJhc2VkQW5ub3RhdGlvblBhdGgoZGF0YUZpZWxkLmZ1bGx5UXVhbGlmaWVkTmFtZSl9L2AsXG5cdFx0XHRcdFx0XHRzZW1hbnRpY09iamVjdFBhdGg6IHNlbWFudGljT2JqZWN0QW5ub3RhdGlvblBhdGhcblx0XHRcdFx0XHR9KTtcblx0XHRcdFx0fVxuXHRcdFx0fVxuXHRcdH0pO1xuXHR9XG5cblx0cmV0dXJuIGFubm90YXRpb25CYXNlZEZvcm1FbGVtZW50cztcbn1cblxuZnVuY3Rpb24gZ2V0RGF0YVBvaW50RGF0YShmYWNldERlZmluaXRpb246IEZhY2V0VHlwZXMpOiBIZWFkZXJEYXRhUG9pbnREYXRhIHtcblx0bGV0IHR5cGUgPSBIZWFkZXJEYXRhUG9pbnRUeXBlLkNvbnRlbnQ7XG5cdGlmIChmYWNldERlZmluaXRpb24uJFR5cGUgPT09IFVJQW5ub3RhdGlvblR5cGVzLlJlZmVyZW5jZUZhY2V0ICYmICFpc0Fubm90YXRpb25GaWVsZFN0YXRpY2FsbHlIaWRkZW4oZmFjZXREZWZpbml0aW9uIGFzIGFueSkpIHtcblx0XHRpZiAoKGZhY2V0RGVmaW5pdGlvbi5UYXJnZXQ/LiR0YXJnZXQgYXMgRGF0YVBvaW50KT8uVmlzdWFsaXphdGlvbiA9PT0gXCJVSS5WaXN1YWxpemF0aW9uVHlwZS9Qcm9ncmVzc1wiKSB7XG5cdFx0XHR0eXBlID0gSGVhZGVyRGF0YVBvaW50VHlwZS5Qcm9ncmVzc0luZGljYXRvcjtcblx0XHR9IGVsc2UgaWYgKChmYWNldERlZmluaXRpb24uVGFyZ2V0Py4kdGFyZ2V0IGFzIERhdGFQb2ludCk/LlZpc3VhbGl6YXRpb24gPT09IFwiVUkuVmlzdWFsaXphdGlvblR5cGUvUmF0aW5nXCIpIHtcblx0XHRcdHR5cGUgPSBIZWFkZXJEYXRhUG9pbnRUeXBlLlJhdGluZ0luZGljYXRvcjtcblx0XHR9XG5cdH1cblxuXHRyZXR1cm4geyB0eXBlIH07XG59XG5cbi8qKlxuICogQ3JlYXRlcyBhbiBhbm5vdGF0aW9uLWJhc2VkIGhlYWRlciBmYWNldC5cbiAqXG4gKiBAcGFyYW0gZmFjZXREZWZpbml0aW9uIFRoZSBkZWZpbml0aW9uIG9mIHRoZSBmYWNldFxuICogQHBhcmFtIGNvbnZlcnRlckNvbnRleHQgVGhlIGNvbnZlcnRlciBjb250ZXh0XG4gKiBAcmV0dXJucyBUaGUgY3JlYXRlZCBhbm5vdGF0aW9uLWJhc2VkIGhlYWRlciBmYWNldFxuICovXG5mdW5jdGlvbiBjcmVhdGVIZWFkZXJGYWNldChmYWNldERlZmluaXRpb246IEZhY2V0VHlwZXMsIGNvbnZlcnRlckNvbnRleHQ6IENvbnZlcnRlckNvbnRleHQpOiBPYmplY3RQYWdlSGVhZGVyRmFjZXQgfCB1bmRlZmluZWQge1xuXHRsZXQgaGVhZGVyRmFjZXQ6IE9iamVjdFBhZ2VIZWFkZXJGYWNldCB8IHVuZGVmaW5lZDtcblx0c3dpdGNoIChmYWNldERlZmluaXRpb24uJFR5cGUpIHtcblx0XHRjYXNlIFVJQW5ub3RhdGlvblR5cGVzLlJlZmVyZW5jZUZhY2V0OlxuXHRcdFx0aGVhZGVyRmFjZXQgPSBjcmVhdGVSZWZlcmVuY2VIZWFkZXJGYWNldChmYWNldERlZmluaXRpb24sIGZhY2V0RGVmaW5pdGlvbiwgY29udmVydGVyQ29udGV4dCk7XG5cdFx0XHRicmVhaztcblxuXHRcdGNhc2UgVUlBbm5vdGF0aW9uVHlwZXMuQ29sbGVjdGlvbkZhY2V0OlxuXHRcdFx0aGVhZGVyRmFjZXQgPSBjcmVhdGVDb2xsZWN0aW9uSGVhZGVyRmFjZXQoZmFjZXREZWZpbml0aW9uLCBjb252ZXJ0ZXJDb250ZXh0KTtcblx0XHRcdGJyZWFrO1xuXHRcdGRlZmF1bHQ6XG5cdFx0XHRicmVhaztcblx0fVxuXG5cdHJldHVybiBoZWFkZXJGYWNldDtcbn1cblxuLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vXG4vLyBDb252ZXJ0ICYgQnVpbGQgTWFuaWZlc3QgQmFzZWQgSGVhZGVyIEZhY2V0c1xuLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vXG5cbmZ1bmN0aW9uIGdlbmVyYXRlQmluZGluZyhyZXF1ZXN0R3JvdXBJZD86IHN0cmluZyk6IHN0cmluZyB8IHVuZGVmaW5lZCB7XG5cdGlmICghcmVxdWVzdEdyb3VwSWQpIHtcblx0XHRyZXR1cm4gdW5kZWZpbmVkO1xuXHR9XG5cdGNvbnN0IGdyb3VwSWQgPVxuXHRcdFtcIkhlcm9lc1wiLCBcIkRlY29yYXRpb25cIiwgXCJXb3JrZXJzXCIsIFwiTG9uZ1J1bm5lcnNcIl0uaW5kZXhPZihyZXF1ZXN0R3JvdXBJZCkgIT09IC0xID8gYCRhdXRvLiR7cmVxdWVzdEdyb3VwSWR9YCA6IHJlcXVlc3RHcm91cElkO1xuXG5cdHJldHVybiBgeyBwYXRoIDogJycsIHBhcmFtZXRlcnMgOiB7ICQkZ3JvdXBJZCA6ICcke2dyb3VwSWR9JyB9IH1gO1xufVxuXG4vKipcbiAqIENyZWF0ZSBhIG1hbmlmZXN0IGJhc2VkIGN1c3RvbSBoZWFkZXIgZmFjZXQuXG4gKlxuICogQHBhcmFtIGN1c3RvbUhlYWRlckZhY2V0RGVmaW5pdGlvblxuICogQHBhcmFtIGhlYWRlckZhY2V0S2V5XG4gKiBAcmV0dXJucyBUaGUgbWFuaWZlc3QgYmFzZWQgY3VzdG9tIGhlYWRlciBmYWNldCBjcmVhdGVkXG4gKi9cbmZ1bmN0aW9uIGNyZWF0ZUN1c3RvbUhlYWRlckZhY2V0KGN1c3RvbUhlYWRlckZhY2V0RGVmaW5pdGlvbjogTWFuaWZlc3RIZWFkZXJGYWNldCwgaGVhZGVyRmFjZXRLZXk6IHN0cmluZyk6IEN1c3RvbU9iamVjdFBhZ2VIZWFkZXJGYWNldCB7XG5cdGNvbnN0IGN1c3RvbUhlYWRlckZhY2V0SUQgPSBnZXRDdXN0b21IZWFkZXJGYWNldElEKGhlYWRlckZhY2V0S2V5KTtcblxuXHRsZXQgcG9zaXRpb246IFBvc2l0aW9uIHwgdW5kZWZpbmVkID0gY3VzdG9tSGVhZGVyRmFjZXREZWZpbml0aW9uLnBvc2l0aW9uO1xuXHRpZiAoIXBvc2l0aW9uKSB7XG5cdFx0cG9zaXRpb24gPSB7XG5cdFx0XHRwbGFjZW1lbnQ6IFBsYWNlbWVudC5BZnRlclxuXHRcdH07XG5cdH1cblx0Ly8gVE9ETyBmb3IgYW4gbm9uIGFubm90YXRpb24gZnJhZ21lbnQgdGhlIG5hbWUgaXMgbWFuZGF0b3J5IC0+IE5vdCBjaGVja2VkXG5cdHJldHVybiB7XG5cdFx0ZmFjZXRUeXBlOiBGYWNldFR5cGUuUmVmZXJlbmNlLFxuXHRcdGZhY2V0czogW10sXG5cdFx0dHlwZTogY3VzdG9tSGVhZGVyRmFjZXREZWZpbml0aW9uLnR5cGUsXG5cdFx0aWQ6IGN1c3RvbUhlYWRlckZhY2V0SUQsXG5cdFx0Y29udGFpbmVySWQ6IGN1c3RvbUhlYWRlckZhY2V0SUQsXG5cdFx0a2V5OiBoZWFkZXJGYWNldEtleSxcblx0XHRwb3NpdGlvbjogcG9zaXRpb24sXG5cdFx0dmlzaWJsZTogY3VzdG9tSGVhZGVyRmFjZXREZWZpbml0aW9uLnZpc2libGUsXG5cdFx0ZnJhZ21lbnROYW1lOiBjdXN0b21IZWFkZXJGYWNldERlZmluaXRpb24udGVtcGxhdGUgfHwgY3VzdG9tSGVhZGVyRmFjZXREZWZpbml0aW9uLm5hbWUsXG5cdFx0dGl0bGU6IGN1c3RvbUhlYWRlckZhY2V0RGVmaW5pdGlvbi50aXRsZSxcblx0XHRzdWJUaXRsZTogY3VzdG9tSGVhZGVyRmFjZXREZWZpbml0aW9uLnN1YlRpdGxlLFxuXHRcdHN0YXNoZWQ6IGN1c3RvbUhlYWRlckZhY2V0RGVmaW5pdGlvbi5zdGFzaGVkIHx8IGZhbHNlLFxuXHRcdGZsZXhTZXR0aW5nczogeyAuLi57IGRlc2lnbnRpbWU6IEZsZXhEZXNpZ25UaW1lVHlwZS5EZWZhdWx0IH0sIC4uLmN1c3RvbUhlYWRlckZhY2V0RGVmaW5pdGlvbi5mbGV4U2V0dGluZ3MgfSxcblx0XHRiaW5kaW5nOiBnZW5lcmF0ZUJpbmRpbmcoY3VzdG9tSGVhZGVyRmFjZXREZWZpbml0aW9uLnJlcXVlc3RHcm91cElkKSxcblx0XHR0ZW1wbGF0ZUVkaXQ6IGN1c3RvbUhlYWRlckZhY2V0RGVmaW5pdGlvbi50ZW1wbGF0ZUVkaXRcblx0fTtcbn1cbiJdLCJtYXBwaW5ncyI6IjtBQUFBO0FBQUE7QUFBQTs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7RUEyQkE7RUFDQTtFQUNBO0VBQ0E7TUFFWUEsZTs7YUFBQUEsZTtJQUFBQSxlO0lBQUFBLGU7S0FBQUEsZSxLQUFBQSxlOzs7TUFLQUMsUzs7YUFBQUEsUztJQUFBQSxTO0lBQUFBLFM7S0FBQUEsUyxLQUFBQSxTOzs7TUFLQUMsa0I7O2FBQUFBLGtCO0lBQUFBLGtCO0lBQUFBLGtCO0lBQUFBLGtCO0lBQUFBLGtCO0tBQUFBLGtCLEtBQUFBLGtCOzs7TUFpQlBDLG1COzthQUFBQSxtQjtJQUFBQSxtQjtJQUFBQSxtQjtJQUFBQSxtQjtLQUFB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
@@ -5,7 +5,7 @@ import type {
5
5
  FieldGroup,
6
6
  ReferenceFacetTypes
7
7
  } from "@sap-ux/vocabularies-types/vocabularies/UI";
8
- import { UIAnnotationTypes } from "@sap-ux/vocabularies-types/vocabularies/UI";
8
+ import { UIAnnotationTerms, UIAnnotationTypes } from "@sap-ux/vocabularies-types/vocabularies/UI";
9
9
  import { getSemanticObjectPath } from "sap/fe/core/converters/annotations/DataField";
10
10
  import type { ConfigurableObject, ConfigurableRecord, CustomElement, Position } from "sap/fe/core/converters/helpers/ConfigurableObject";
11
11
  import { insertCustomElements, Placement } from "sap/fe/core/converters/helpers/ConfigurableObject";
@@ -21,6 +21,7 @@ import type { CompiledBindingToolkitExpression } from "sap/fe/core/helpers/Bindi
21
21
  import { compileExpression, equal, getExpressionFromAnnotation, not } from "sap/fe/core/helpers/BindingToolkit";
22
22
  import { generate } from "../../../helpers/StableIdHelper";
23
23
  import type ConverterContext from "../../ConverterContext";
24
+ import { isAnnotationFieldStaticallyHidden, isReferencePropertyStaticallyHidden } from "../../helpers/DataFieldHelper";
24
25
  import type { AnnotationFormElement, FormElement } from "../Common/Form";
25
26
  import { FormElementType, getFormElementsFromManifest } from "../Common/Form";
26
27
 
@@ -260,23 +261,30 @@ function createReferenceHeaderFacet(
260
261
  }
261
262
 
262
263
  const { annotations } = facetDefinition;
263
- return {
264
- type: HeaderFacetType.Annotation,
265
- facetType: FacetType.Reference,
266
- id: headerFacetID,
267
- containerId: getHeaderFacetContainerID({ Facet: facetDefinition }),
268
- key: getHeaderFacetKey(facetDefinition, headerFacetID),
269
- flexSettings: {
270
- designtime: getDesignTimeMetadataSettingsForHeaderFacet(facetDefinition, collectionFacetDefinition, converterContext)
271
- },
272
- stashed: getStashedSettingsForHeaderFacet(facetDefinition, collectionFacetDefinition, converterContext),
273
- visible: compileExpression(not(equal(getExpressionFromAnnotation(annotations?.UI?.Hidden?.valueOf()), true))),
274
- annotationPath: `${converterContext.getEntitySetBasedAnnotationPath(facetDefinition.fullyQualifiedName)}/`,
275
- targetAnnotationValue,
276
- targetAnnotationType,
277
- headerFormData,
278
- headerDataPointData
279
- };
264
+ if (
265
+ facetDefinition.Target?.$target?.term === UIAnnotationTerms.Chart &&
266
+ isAnnotationFieldStaticallyHidden(facetDefinition as any)
267
+ ) {
268
+ return undefined;
269
+ } else {
270
+ return {
271
+ type: HeaderFacetType.Annotation,
272
+ facetType: FacetType.Reference,
273
+ id: headerFacetID,
274
+ containerId: getHeaderFacetContainerID({ Facet: facetDefinition }),
275
+ key: getHeaderFacetKey(facetDefinition, headerFacetID),
276
+ flexSettings: {
277
+ designtime: getDesignTimeMetadataSettingsForHeaderFacet(facetDefinition, collectionFacetDefinition, converterContext)
278
+ },
279
+ stashed: getStashedSettingsForHeaderFacet(facetDefinition, collectionFacetDefinition, converterContext),
280
+ visible: compileExpression(not(equal(getExpressionFromAnnotation(annotations?.UI?.Hidden?.valueOf()), true))),
281
+ annotationPath: `${converterContext.getEntitySetBasedAnnotationPath(facetDefinition.fullyQualifiedName)}/`,
282
+ targetAnnotationValue,
283
+ targetAnnotationType,
284
+ headerFormData,
285
+ headerDataPointData
286
+ };
287
+ }
280
288
  }
281
289
 
282
290
  return undefined;
@@ -381,11 +389,12 @@ function getFormElementsFromAnnotations(facetDefinition: FacetTypes, converterCo
381
389
  if (!(dataField.annotations?.UI?.Hidden?.valueOf() === true)) {
382
390
  const semanticObjectAnnotationPath = getSemanticObjectPath(converterContext, dataField);
383
391
  if (
384
- dataField.$Type === UIAnnotationTypes.DataField ||
385
- dataField.$Type === UIAnnotationTypes.DataFieldWithUrl ||
386
- dataField.$Type === UIAnnotationTypes.DataFieldWithNavigationPath ||
387
- dataField.$Type === UIAnnotationTypes.DataFieldWithIntentBasedNavigation ||
388
- dataField.$Type === UIAnnotationTypes.DataFieldWithAction
392
+ (dataField.$Type === UIAnnotationTypes.DataField ||
393
+ dataField.$Type === UIAnnotationTypes.DataFieldWithUrl ||
394
+ dataField.$Type === UIAnnotationTypes.DataFieldWithNavigationPath ||
395
+ dataField.$Type === UIAnnotationTypes.DataFieldWithIntentBasedNavigation ||
396
+ dataField.$Type === UIAnnotationTypes.DataFieldWithAction) &&
397
+ !isReferencePropertyStaticallyHidden(dataField)
389
398
  ) {
390
399
  const { annotations } = dataField;
391
400
  annotationBasedFormElements.push({
@@ -398,7 +407,10 @@ function getFormElementsFromAnnotations(facetDefinition: FacetTypes, converterCo
398
407
  annotationPath: `${converterContext.getEntitySetBasedAnnotationPath(dataField.fullyQualifiedName)}/`,
399
408
  semanticObjectPath: semanticObjectAnnotationPath
400
409
  });
401
- } else if (dataField.$Type === UIAnnotationTypes.DataFieldForAnnotation) {
410
+ } else if (
411
+ dataField.$Type === UIAnnotationTypes.DataFieldForAnnotation &&
412
+ !isReferencePropertyStaticallyHidden(dataField)
413
+ ) {
402
414
  const { annotations } = dataField;
403
415
  annotationBasedFormElements.push({
404
416
  // FIXME this is wrong, the annotation should exist, so the target is not properly identified
@@ -421,7 +433,7 @@ function getFormElementsFromAnnotations(facetDefinition: FacetTypes, converterCo
421
433
 
422
434
  function getDataPointData(facetDefinition: FacetTypes): HeaderDataPointData {
423
435
  let type = HeaderDataPointType.Content;
424
- if (facetDefinition.$Type === UIAnnotationTypes.ReferenceFacet) {
436
+ if (facetDefinition.$Type === UIAnnotationTypes.ReferenceFacet && !isAnnotationFieldStaticallyHidden(facetDefinition as any)) {
425
437
  if ((facetDefinition.Target?.$target as DataPoint)?.Visualization === "UI.VisualizationType/Progress") {
426
438
  type = HeaderDataPointType.ProgressIndicator;
427
439
  } else if ((facetDefinition.Target?.$target as DataPoint)?.Visualization === "UI.VisualizationType/Rating") {