@sapui5/sap.fe.core 1.124.2 → 1.126.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 (300) hide show
  1. package/package.json +1 -1
  2. package/src/sap/fe/core/.library +5 -1
  3. package/src/sap/fe/core/ActionRuntime.js +2 -2
  4. package/src/sap/fe/core/ActionRuntime.ts +4 -4
  5. package/src/sap/fe/core/AppComponent.js +2 -2
  6. package/src/sap/fe/core/AppComponent.ts +1 -1
  7. package/src/sap/fe/core/AppStateHandler.js +2 -2
  8. package/src/sap/fe/core/AppStateHandler.ts +1 -1
  9. package/src/sap/fe/core/BaseController.js +2 -2
  10. package/src/sap/fe/core/BaseController.ts +1 -1
  11. package/src/sap/fe/core/CommonUtils.js +3 -3
  12. package/src/sap/fe/core/CommonUtils.ts +12 -15
  13. package/src/sap/fe/core/ExtensionAPI.js +2 -2
  14. package/src/sap/fe/core/ExtensionAPI.ts +4 -3
  15. package/src/sap/fe/core/PageController.js +2 -2
  16. package/src/sap/fe/core/PageController.ts +1 -1
  17. package/src/sap/fe/core/ResourceModel.js +2 -2
  18. package/src/sap/fe/core/ResourceModel.ts +1 -1
  19. package/src/sap/fe/core/ReuseComponent.js +172 -0
  20. package/src/sap/fe/core/ReuseComponent.ts +165 -0
  21. package/src/sap/fe/core/TemplateComponent.js +2 -2
  22. package/src/sap/fe/core/TemplateComponent.ts +5 -1
  23. package/src/sap/fe/core/TemplateModel.js +2 -2
  24. package/src/sap/fe/core/TemplateModel.ts +1 -1
  25. package/src/sap/fe/core/buildingBlocks/BuildingBlockBase.js +92 -6
  26. package/src/sap/fe/core/buildingBlocks/BuildingBlockBase.ts +90 -10
  27. package/src/sap/fe/core/buildingBlocks/templating/BuildingBlockSupport.js +1 -1
  28. package/src/sap/fe/core/buildingBlocks/templating/BuildingBlockSupport.ts +1 -1
  29. package/src/sap/fe/core/buildingBlocks/templating/BuildingBlockTemplateProcessor.js +30 -3
  30. package/src/sap/fe/core/buildingBlocks/templating/BuildingBlockTemplateProcessor.ts +28 -4
  31. package/src/sap/fe/core/buildingBlocks/templating/BuildingBlockTemplatingBase.js +10 -16
  32. package/src/sap/fe/core/buildingBlocks/templating/BuildingBlockTemplatingBase.ts +19 -16
  33. package/src/sap/fe/core/buildingBlocks/templating/RuntimeBuildingBlockFragment.js +3 -3
  34. package/src/sap/fe/core/buildingBlocks/templating/RuntimeBuildingBlockFragment.ts +5 -5
  35. package/src/sap/fe/core/controllerextensions/BaseControllerExtension.js +2 -2
  36. package/src/sap/fe/core/controllerextensions/BaseControllerExtension.ts +1 -1
  37. package/src/sap/fe/core/controllerextensions/CollaborativeDraft.js +17 -5
  38. package/src/sap/fe/core/controllerextensions/CollaborativeDraft.ts +14 -6
  39. package/src/sap/fe/core/controllerextensions/ContextSharing.js +2 -2
  40. package/src/sap/fe/core/controllerextensions/ContextSharing.ts +1 -1
  41. package/src/sap/fe/core/controllerextensions/EditFlow.js +57 -43
  42. package/src/sap/fe/core/controllerextensions/EditFlow.ts +61 -46
  43. package/src/sap/fe/core/controllerextensions/IntentBasedNavigation.js +2 -2
  44. package/src/sap/fe/core/controllerextensions/IntentBasedNavigation.ts +1 -1
  45. package/src/sap/fe/core/controllerextensions/InternalIntentBasedNavigation.js +8 -11
  46. package/src/sap/fe/core/controllerextensions/InternalIntentBasedNavigation.ts +8 -16
  47. package/src/sap/fe/core/controllerextensions/InternalRouting.js +10 -7
  48. package/src/sap/fe/core/controllerextensions/InternalRouting.ts +5 -5
  49. package/src/sap/fe/core/controllerextensions/KPIManagement.js +22 -18
  50. package/src/sap/fe/core/controllerextensions/KPIManagement.ts +28 -23
  51. package/src/sap/fe/core/controllerextensions/MessageHandler.js +4 -4
  52. package/src/sap/fe/core/controllerextensions/MessageHandler.ts +4 -1
  53. package/src/sap/fe/core/controllerextensions/PageReady.js +21 -15
  54. package/src/sap/fe/core/controllerextensions/PageReady.ts +29 -20
  55. package/src/sap/fe/core/controllerextensions/Paginator.js +2 -2
  56. package/src/sap/fe/core/controllerextensions/Paginator.ts +1 -1
  57. package/src/sap/fe/core/controllerextensions/Placeholder.js +12 -6
  58. package/src/sap/fe/core/controllerextensions/Placeholder.ts +15 -1
  59. package/src/sap/fe/core/controllerextensions/Recommendations.js +26 -8
  60. package/src/sap/fe/core/controllerextensions/Recommendations.ts +29 -3
  61. package/src/sap/fe/core/controllerextensions/Routing.js +5 -7
  62. package/src/sap/fe/core/controllerextensions/Routing.ts +4 -4
  63. package/src/sap/fe/core/controllerextensions/Share.js +4 -4
  64. package/src/sap/fe/core/controllerextensions/Share.ts +10 -6
  65. package/src/sap/fe/core/controllerextensions/SideEffects.js +20 -5
  66. package/src/sap/fe/core/controllerextensions/SideEffects.ts +22 -2
  67. package/src/sap/fe/core/controllerextensions/Telemetry.js +2 -2
  68. package/src/sap/fe/core/controllerextensions/Telemetry.ts +1 -1
  69. package/src/sap/fe/core/controllerextensions/ViewState.js +79 -81
  70. package/src/sap/fe/core/controllerextensions/ViewState.ts +117 -105
  71. package/src/sap/fe/core/controllerextensions/cards/CollaborationManager.js +3 -3
  72. package/src/sap/fe/core/controllerextensions/cards/CollaborationManager.ts +1 -1
  73. package/src/sap/fe/core/controllerextensions/collaboration/CollaborationCommon.js +2 -2
  74. package/src/sap/fe/core/controllerextensions/collaboration/CollaborationCommon.ts +2 -2
  75. package/src/sap/fe/core/controllerextensions/dialog/OperationsDialog.block.js +17 -8
  76. package/src/sap/fe/core/controllerextensions/dialog/OperationsDialog.block.tsx +8 -2
  77. package/src/sap/fe/core/controllerextensions/editFlow/NotApplicableContextDialog.js +1 -1
  78. package/src/sap/fe/core/controllerextensions/editFlow/TransactionHelper.js +10 -9
  79. package/src/sap/fe/core/controllerextensions/editFlow/TransactionHelper.ts +15 -10
  80. package/src/sap/fe/core/controllerextensions/editFlow/draftDataLossPopup.js +2 -2
  81. package/src/sap/fe/core/controllerextensions/editFlow/draftDataLossPopup.ts +1 -1
  82. package/src/sap/fe/core/controllerextensions/editFlow/operations/facade.js +130 -158
  83. package/src/sap/fe/core/controllerextensions/editFlow/operations/facade.ts +240 -275
  84. package/src/sap/fe/core/controllerextensions/editFlow/sticky.js +2 -2
  85. package/src/sap/fe/core/controllerextensions/editFlow/sticky.ts +1 -1
  86. package/src/sap/fe/core/controllerextensions/messageHandler/messageHandling.js +46 -28
  87. package/src/sap/fe/core/controllerextensions/messageHandler/messageHandling.ts +60 -32
  88. package/src/sap/fe/core/controllerextensions/routing/RouterProxy.js +2 -2
  89. package/src/sap/fe/core/controllerextensions/routing/RouterProxy.ts +1 -1
  90. package/src/sap/fe/core/controllerextensions/viewState/IViewStateContributor.js +2 -2
  91. package/src/sap/fe/core/controllerextensions/viewState/IViewStateContributor.ts +27 -3
  92. package/src/sap/fe/core/controls/CommandExecution.js +2 -2
  93. package/src/sap/fe/core/controls/CommandExecution.ts +2 -2
  94. package/src/sap/fe/core/controls/ComponentLoader.js +3 -3
  95. package/src/sap/fe/core/controls/ComponentLoader.ts +2 -2
  96. package/src/sap/fe/core/controls/DataLossOrDraftDiscard/DraftDataLossDialog.block.js +3 -3
  97. package/src/sap/fe/core/controls/DataLossOrDraftDiscard/DraftDataLossDialog.block.tsx +2 -2
  98. package/src/sap/fe/core/controls/EventDelegateHook.js +2 -2
  99. package/src/sap/fe/core/controls/EventDelegateHook.ts +2 -2
  100. package/src/sap/fe/core/controls/FormElementWrapper.js +51 -6
  101. package/src/sap/fe/core/controls/FormElementWrapper.ts +43 -2
  102. package/src/sap/fe/core/controls/Recommendations/ConfirmRecommendationDialog.block.js +3 -3
  103. package/src/sap/fe/core/controls/Recommendations/ConfirmRecommendationDialog.block.tsx +3 -3
  104. package/src/sap/fe/core/converters/ConverterContext.js +4 -2
  105. package/src/sap/fe/core/converters/ConverterContext.ts +5 -2
  106. package/src/sap/fe/core/converters/ManifestSettings.js +8 -2
  107. package/src/sap/fe/core/converters/ManifestSettings.ts +25 -3
  108. package/src/sap/fe/core/converters/ManifestWrapper.js +12 -3
  109. package/src/sap/fe/core/converters/ManifestWrapper.ts +11 -1
  110. package/src/sap/fe/core/converters/MetaModelConverter.js +7 -6
  111. package/src/sap/fe/core/converters/MetaModelConverter.ts +6 -2
  112. package/src/sap/fe/core/converters/annotations/DataField.js +56 -16
  113. package/src/sap/fe/core/converters/annotations/DataField.ts +74 -25
  114. package/src/sap/fe/core/converters/common/AnnotationConverter.js +19 -18
  115. package/src/sap/fe/core/converters/controls/Common/Action.js +5 -5
  116. package/src/sap/fe/core/converters/controls/Common/Action.ts +14 -14
  117. package/src/sap/fe/core/converters/controls/Common/Chart.js +40 -7
  118. package/src/sap/fe/core/converters/controls/Common/Chart.ts +56 -20
  119. package/src/sap/fe/core/converters/controls/Common/DataVisualization.js +8 -11
  120. package/src/sap/fe/core/converters/controls/Common/DataVisualization.ts +23 -27
  121. package/src/sap/fe/core/converters/controls/Common/Form.js +10 -3
  122. package/src/sap/fe/core/converters/controls/Common/Form.ts +13 -4
  123. package/src/sap/fe/core/converters/controls/Common/KPI.js +3 -2
  124. package/src/sap/fe/core/converters/controls/Common/KPI.ts +6 -2
  125. package/src/sap/fe/core/converters/controls/Common/Table.js +137 -48
  126. package/src/sap/fe/core/converters/controls/Common/Table.ts +174 -52
  127. package/src/sap/fe/core/converters/controls/Common/table/StandardActions.js +73 -21
  128. package/src/sap/fe/core/converters/controls/Common/table/StandardActions.ts +91 -20
  129. package/src/sap/fe/core/converters/controls/ListReport/VisualFilters.js +4 -4
  130. package/src/sap/fe/core/converters/controls/ListReport/VisualFilters.ts +2 -2
  131. package/src/sap/fe/core/converters/controls/ObjectPage/Avatar.js +2 -2
  132. package/src/sap/fe/core/converters/controls/ObjectPage/Avatar.ts +2 -2
  133. package/src/sap/fe/core/converters/controls/ObjectPage/HeaderFacet.js +3 -3
  134. package/src/sap/fe/core/converters/controls/ObjectPage/HeaderFacet.ts +1 -1
  135. package/src/sap/fe/core/converters/controls/ObjectPage/SubSection.js +17 -16
  136. package/src/sap/fe/core/converters/controls/ObjectPage/SubSection.ts +18 -17
  137. package/src/sap/fe/core/converters/helpers/InsightsHelpers.js +2 -2
  138. package/src/sap/fe/core/converters/helpers/InsightsHelpers.ts +1 -1
  139. package/src/sap/fe/core/converters/objectPage/HeaderAndFooterAction.js +9 -9
  140. package/src/sap/fe/core/converters/objectPage/HeaderAndFooterAction.ts +12 -12
  141. package/src/sap/fe/core/converters/templates/ListReportConverter.js +13 -7
  142. package/src/sap/fe/core/converters/templates/ListReportConverter.ts +12 -5
  143. package/src/sap/fe/core/converters/templates/ObjectPageConverter.js +9 -73
  144. package/src/sap/fe/core/converters/templates/ObjectPageConverter.ts +4 -74
  145. package/src/sap/fe/core/designtime/AppComponent.designtime.js +5 -10
  146. package/src/sap/fe/core/designtime/AppComponent.designtime.ts +3 -12
  147. package/src/sap/fe/core/formatters/CriticalityFormatter.js +4 -7
  148. package/src/sap/fe/core/formatters/CriticalityFormatter.ts +3 -3
  149. package/src/sap/fe/core/formatters/FiscalFormat.js +5 -3
  150. package/src/sap/fe/core/formatters/FiscalFormat.ts +4 -2
  151. package/src/sap/fe/core/formatters/StandardFormatter.js +2 -2
  152. package/src/sap/fe/core/formatters/StandardFormatter.ts +3 -3
  153. package/src/sap/fe/core/fpm/Component.js +3 -3
  154. package/src/sap/fe/core/fpm/Component.ts +3 -3
  155. package/src/sap/fe/core/fpm/manifest.json +1 -1
  156. package/src/sap/fe/core/helpers/AdaptiveCardExpressionCompiler.js +2 -2
  157. package/src/sap/fe/core/helpers/AdaptiveCardExpressionCompiler.ts +1 -1
  158. package/src/sap/fe/core/helpers/BindingHelper.js +2 -2
  159. package/src/sap/fe/core/helpers/BindingHelper.ts +2 -2
  160. package/src/sap/fe/core/helpers/BindingToolkitEvaluator.js +2 -2
  161. package/src/sap/fe/core/helpers/BindingToolkitEvaluator.ts +2 -2
  162. package/src/sap/fe/core/helpers/DeleteHelper.js +7 -4
  163. package/src/sap/fe/core/helpers/DeleteHelper.ts +9 -3
  164. package/src/sap/fe/core/helpers/MetaModelFunction.js +5 -5
  165. package/src/sap/fe/core/helpers/MetaModelFunction.ts +2 -2
  166. package/src/sap/fe/core/helpers/MetaPath.js +9 -3
  167. package/src/sap/fe/core/helpers/MetaPath.ts +8 -2
  168. package/src/sap/fe/core/helpers/ModelHelper.js +149 -3
  169. package/src/sap/fe/core/helpers/ModelHelper.ts +202 -6
  170. package/src/sap/fe/core/helpers/StandardRecommendationHelper.js +3 -3
  171. package/src/sap/fe/core/helpers/StandardRecommendationHelper.ts +2 -2
  172. package/src/sap/fe/core/helpers/TitleHelper.js +4 -4
  173. package/src/sap/fe/core/helpers/TitleHelper.ts +4 -4
  174. package/src/sap/fe/core/library.js +4 -4
  175. package/src/sap/fe/core/library.ts +2 -1
  176. package/src/sap/fe/core/manifestMerger/ChangePageConfiguration.js +11 -3
  177. package/src/sap/fe/core/manifestMerger/ChangePageConfiguration.ts +10 -2
  178. package/src/sap/fe/core/messagebundle.properties +8 -57
  179. package/src/sap/fe/core/messagebundle_ar.properties +2 -0
  180. package/src/sap/fe/core/messagebundle_bg.properties +2 -0
  181. package/src/sap/fe/core/messagebundle_ca.properties +2 -0
  182. package/src/sap/fe/core/messagebundle_cnr.properties +2 -0
  183. package/src/sap/fe/core/messagebundle_cs.properties +2 -0
  184. package/src/sap/fe/core/messagebundle_cy.properties +4 -2
  185. package/src/sap/fe/core/messagebundle_da.properties +2 -0
  186. package/src/sap/fe/core/messagebundle_de.properties +2 -0
  187. package/src/sap/fe/core/messagebundle_el.properties +2 -0
  188. package/src/sap/fe/core/messagebundle_en.properties +6 -57
  189. package/src/sap/fe/core/messagebundle_en_GB.properties +2 -0
  190. package/src/sap/fe/core/messagebundle_en_US_saprigi.properties +3 -36
  191. package/src/sap/fe/core/messagebundle_es.properties +2 -0
  192. package/src/sap/fe/core/messagebundle_es_MX.properties +2 -0
  193. package/src/sap/fe/core/messagebundle_et.properties +2 -0
  194. package/src/sap/fe/core/messagebundle_fi.properties +2 -0
  195. package/src/sap/fe/core/messagebundle_fr.properties +2 -0
  196. package/src/sap/fe/core/messagebundle_fr_CA.properties +3 -1
  197. package/src/sap/fe/core/messagebundle_hi.properties +2 -0
  198. package/src/sap/fe/core/messagebundle_hr.properties +2 -0
  199. package/src/sap/fe/core/messagebundle_hu.properties +3 -1
  200. package/src/sap/fe/core/messagebundle_id.properties +2 -0
  201. package/src/sap/fe/core/messagebundle_it.properties +2 -0
  202. package/src/sap/fe/core/messagebundle_iw.properties +3 -1
  203. package/src/sap/fe/core/messagebundle_ja.properties +2 -0
  204. package/src/sap/fe/core/messagebundle_kk.properties +2 -0
  205. package/src/sap/fe/core/messagebundle_ko.properties +2 -0
  206. package/src/sap/fe/core/messagebundle_lt.properties +2 -0
  207. package/src/sap/fe/core/messagebundle_lv.properties +2 -0
  208. package/src/sap/fe/core/messagebundle_mk.properties +2 -0
  209. package/src/sap/fe/core/messagebundle_ms.properties +2 -0
  210. package/src/sap/fe/core/messagebundle_nl.properties +2 -0
  211. package/src/sap/fe/core/messagebundle_no.properties +2 -0
  212. package/src/sap/fe/core/messagebundle_pl.properties +2 -0
  213. package/src/sap/fe/core/messagebundle_pt.properties +2 -0
  214. package/src/sap/fe/core/messagebundle_pt_PT.properties +2 -0
  215. package/src/sap/fe/core/messagebundle_ro.properties +2 -0
  216. package/src/sap/fe/core/messagebundle_ru.properties +2 -0
  217. package/src/sap/fe/core/messagebundle_sh.properties +64 -62
  218. package/src/sap/fe/core/messagebundle_sk.properties +2 -0
  219. package/src/sap/fe/core/messagebundle_sl.properties +2 -0
  220. package/src/sap/fe/core/messagebundle_sr.properties +2 -0
  221. package/src/sap/fe/core/messagebundle_sv.properties +2 -0
  222. package/src/sap/fe/core/messagebundle_th.properties +2 -0
  223. package/src/sap/fe/core/messagebundle_tr.properties +2 -0
  224. package/src/sap/fe/core/messagebundle_uk.properties +3 -1
  225. package/src/sap/fe/core/messagebundle_vi.properties +2 -0
  226. package/src/sap/fe/core/messagebundle_zh_CN.properties +2 -0
  227. package/src/sap/fe/core/messagebundle_zh_TW.properties +2 -0
  228. package/src/sap/fe/core/operationsHelper.js +3 -3
  229. package/src/sap/fe/core/operationsHelper.ts +2 -2
  230. package/src/sap/fe/core/rootView/Fcl.controller.js +3 -3
  231. package/src/sap/fe/core/rootView/Fcl.controller.ts +2 -2
  232. package/src/sap/fe/core/rootView/NavContainer.controller.js +2 -2
  233. package/src/sap/fe/core/rootView/NavContainer.controller.ts +1 -1
  234. package/src/sap/fe/core/rootView/RootViewBaseController.js +114 -92
  235. package/src/sap/fe/core/rootView/RootViewBaseController.ts +120 -106
  236. package/src/sap/fe/core/services/CollaborativeToolsServiceFactory.js +2 -2
  237. package/src/sap/fe/core/services/CollaborativeToolsServiceFactory.ts +1 -1
  238. package/src/sap/fe/core/services/NavigationServiceFactory.js +6 -4
  239. package/src/sap/fe/core/services/NavigationServiceFactory.ts +4 -3
  240. package/src/sap/fe/core/services/RoutingServiceFactory.js +2 -2
  241. package/src/sap/fe/core/services/RoutingServiceFactory.ts +1 -1
  242. package/src/sap/fe/core/services/ShellServicesFactory.js +1 -1
  243. package/src/sap/fe/core/services/ShellServicesFactory.ts +12 -2
  244. package/src/sap/fe/core/services/TelemetryServiceFactory.js +8 -2
  245. package/src/sap/fe/core/services/TelemetryServiceFactory.ts +7 -1
  246. package/src/sap/fe/core/services/TemplatedViewServiceFactory.js +16 -9
  247. package/src/sap/fe/core/services/TemplatedViewServiceFactory.ts +22 -11
  248. package/src/sap/fe/core/services/ValueHelpHistoryServiceFactory.js +2 -2
  249. package/src/sap/fe/core/services/ValueHelpHistoryServiceFactory.ts +1 -1
  250. package/src/sap/fe/core/services/view/TemplatingErrorPage.controller.js +2 -2
  251. package/src/sap/fe/core/services/view/TemplatingErrorPage.controller.ts +1 -1
  252. package/src/sap/fe/core/templating/ActionHelper.js +2 -2
  253. package/src/sap/fe/core/templating/ActionHelper.ts +2 -2
  254. package/src/sap/fe/core/templating/CommonFormatters.js +2 -2
  255. package/src/sap/fe/core/templating/CommonFormatters.ts +3 -3
  256. package/src/sap/fe/core/templating/CriticalityFormatters.js +2 -2
  257. package/src/sap/fe/core/templating/CriticalityFormatters.ts +2 -2
  258. package/src/sap/fe/core/templating/DataFieldFormatters.js +4 -4
  259. package/src/sap/fe/core/templating/DataFieldFormatters.ts +2 -2
  260. package/src/sap/fe/core/templating/DataModelPathHelper.js +2 -2
  261. package/src/sap/fe/core/templating/DataModelPathHelper.ts +2 -2
  262. package/src/sap/fe/core/templating/EntityTypeHelper.js +2 -2
  263. package/src/sap/fe/core/templating/EntityTypeHelper.ts +2 -2
  264. package/src/sap/fe/core/templating/FieldControlHelper.js +2 -2
  265. package/src/sap/fe/core/templating/FieldControlHelper.ts +2 -2
  266. package/src/sap/fe/core/templating/SemanticObjectHelper.js +2 -2
  267. package/src/sap/fe/core/templating/SemanticObjectHelper.ts +2 -2
  268. package/src/sap/fe/core/templating/UIFormatters.js +7 -7
  269. package/src/sap/fe/core/templating/UIFormatters.ts +6 -6
  270. package/src/sap/fe/core/type/DateTimeWithTimezone.js +2 -2
  271. package/src/sap/fe/core/type/DateTimeWithTimezone.ts +1 -1
  272. package/src/sap/fe/core/type/Email.js +2 -2
  273. package/src/sap/fe/core/type/Email.ts +1 -1
  274. package/src/sap/fe/core/type/FiscalDate.js +2 -2
  275. package/src/sap/fe/core/type/FiscalDate.ts +1 -1
  276. package/src/sap/fe/core/type/InputMask.js +124 -0
  277. package/src/sap/fe/core/type/InputMask.ts +131 -0
  278. package/ui5.yaml +19 -0
  279. package/src/sap/fe/core/controllerextensions/editFlow/operations/_internal.js +0 -81
  280. package/src/sap/fe/core/controllerextensions/editFlow/operations/_internal.ts +0 -117
  281. package/src/sap/fe/core/helpers/AnnotationEnum.js +0 -33
  282. package/src/sap/fe/core/helpers/AnnotationEnum.ts +0 -21
  283. package/src/sap/fe/core/helpers/BindingToolkit.js +0 -1813
  284. package/src/sap/fe/core/helpers/BindingToolkit.ts +0 -2450
  285. package/src/sap/fe/core/helpers/ClassSupport.js +0 -584
  286. package/src/sap/fe/core/helpers/ClassSupport.ts +0 -697
  287. package/src/sap/fe/core/jsx-runtime/Fragment.js +0 -14
  288. package/src/sap/fe/core/jsx-runtime/Fragment.ts +0 -3
  289. package/src/sap/fe/core/jsx-runtime/ViewLoader.js +0 -93
  290. package/src/sap/fe/core/jsx-runtime/ViewLoader.tsx +0 -86
  291. package/src/sap/fe/core/jsx-runtime/jsx-control.js +0 -177
  292. package/src/sap/fe/core/jsx-runtime/jsx-control.ts +0 -197
  293. package/src/sap/fe/core/jsx-runtime/jsx-xml.js +0 -237
  294. package/src/sap/fe/core/jsx-runtime/jsx-xml.ts +0 -246
  295. package/src/sap/fe/core/jsx-runtime/jsx.js +0 -47
  296. package/src/sap/fe/core/jsx-runtime/jsx.ts +0 -71
  297. package/src/sap/fe/core/jsx-runtime/jsxs.js +0 -10
  298. package/src/sap/fe/core/jsx-runtime/jsxs.ts +0 -3
  299. package/src/sap/fe/core/jsx-runtime/useMDXComponents.js +0 -172
  300. package/src/sap/fe/core/jsx-runtime/useMDXComponents.tsx +0 -194
@@ -2,7 +2,7 @@
2
2
  * SAP UI development toolkit for HTML5 (SAPUI5)
3
3
  * (c) Copyright 2009-2024 SAP SE. All rights reserved
4
4
  */
5
- sap.ui.define(["sap/base/Log", "sap/fe/core/helpers/ClassSupport", "sap/fe/core/helpers/RecommendationHelper", "sap/fe/core/helpers/StandardRecommendationHelper", "sap/ui/core/mvc/ControllerExtension", "sap/ui/core/mvc/OverrideExecution", "../CommonUtils", "./editFlow/TransactionHelper", "../controls/Recommendations/ConfirmRecommendationDialog.block", "./recommendations/Telemetry"], function (Log, ClassSupport, RecommendationHelper, StandardRecommendationHelper, ControllerExtension, OverrideExecution, CommonUtils, TransactionHelper, ConfirmRecommendationDialog_block, Telemetry) {
5
+ sap.ui.define(["sap/base/Log", "sap/fe/base/ClassSupport", "sap/fe/core/helpers/RecommendationHelper", "sap/fe/core/helpers/StandardRecommendationHelper", "sap/ui/core/mvc/ControllerExtension", "sap/ui/core/mvc/OverrideExecution", "../CommonUtils", "./editFlow/TransactionHelper", "../controls/Recommendations/ConfirmRecommendationDialog.block", "./recommendations/Telemetry"], function (Log, ClassSupport, RecommendationHelper, StandardRecommendationHelper, ControllerExtension, OverrideExecution, CommonUtils, TransactionHelper, ConfirmRecommendationDialog_block, Telemetry) {
6
6
  "use strict";
7
7
 
8
8
  var _dec, _dec2, _dec3, _dec4, _dec5, _dec6, _dec7, _dec8, _dec9, _dec10, _dec11, _dec12, _dec13, _dec14, _dec15, _dec16, _class, _class2;
@@ -20,12 +20,11 @@ sap.ui.define(["sap/base/Log", "sap/fe/core/helpers/ClassSupport", "sap/fe/core/
20
20
  function _applyDecoratedDescriptor(target, property, decorators, descriptor, context) { var desc = {}; Object.keys(descriptor).forEach(function (key) { desc[key] = descriptor[key]; }); desc.enumerable = !!desc.enumerable; desc.configurable = !!desc.configurable; if ('value' in desc || desc.initializer) { desc.writable = true; } desc = decorators.slice().reverse().reduce(function (desc, decorator) { return decorator(target, property, desc) || desc; }, desc); if (context && desc.initializer !== void 0) { desc.value = desc.initializer ? desc.initializer.call(context) : void 0; desc.initializer = undefined; } if (desc.initializer === void 0) { Object.defineProperty(target, property, desc); desc = null; } return desc; }
21
21
  let Recommendations = (_dec = defineUI5Class("sap.fe.core.controllerextensions.Recommendations"), _dec2 = methodOverride(), _dec3 = methodOverride("_routing"), _dec4 = publicExtension(), _dec5 = publicExtension(), _dec6 = extensible(OverrideExecution.Instead), _dec7 = publicExtension(), _dec8 = finalExtension(), _dec9 = publicExtension(), _dec10 = extensible(OverrideExecution.Instead), _dec11 = publicExtension(), _dec12 = publicExtension(), _dec13 = publicExtension(), _dec14 = extensible("AfterAsync"), _dec15 = publicExtension(), _dec16 = extensible(OverrideExecution.Instead), _dec(_class = (_class2 = /*#__PURE__*/function (_ControllerExtension) {
22
22
  _inheritsLoose(Recommendations, _ControllerExtension);
23
+ // the data shown in Accept/Ignore dialog of Recommendations
24
+
23
25
  function Recommendations() {
24
26
  var _this;
25
- for (var _len = arguments.length, args = new Array(_len), _key = 0; _key < _len; _key++) {
26
- args[_key] = arguments[_key];
27
- }
28
- _this = _ControllerExtension.call(this, ...args) || this;
27
+ _this = _ControllerExtension.call(this) || this;
29
28
  _this.dataToBeAccepted = [];
30
29
  return _this;
31
30
  }
@@ -35,23 +34,42 @@ sap.ui.define(["sap/base/Log", "sap/fe/core/helpers/ClassSupport", "sap/fe/core/
35
34
  this.telemetry = new Telemetry();
36
35
  this.allRecommendedFields = [];
37
36
  this.internalModel = this.base.getView().getModel("internal");
37
+ this.previousContext = undefined;
38
38
  };
39
39
  _proto.onAfterBinding = async function onAfterBinding(context) {
40
40
  if (context) {
41
+ var _this$previousContext;
42
+ const currentContextBasePath = context.getPath().split("/")[1];
43
+ const previousContextBasePath = (_this$previousContext = this.previousContext) === null || _this$previousContext === void 0 ? void 0 : _this$previousContext.getPath().split("/")[1];
44
+ // console.log('current::', currentContextBasePath);
45
+ // console.log('previous', previousContextBasePath);
41
46
  this.rootContext = undefined;
42
47
  // use internal model because we have to use this information across the application for different instances.
43
48
  let isRecommendationEnabled = this.internalModel.getProperty("/isRecommendationEnabled");
44
49
  // onAfter binding is called for all contexts
45
50
  // but we do not need to call the isEnabled hook all the time
46
51
  // so check if recommendation enabled is already available
52
+ this.previousContext = context;
47
53
  const rootContext = await this._getRootContext(context);
48
54
  if (rootContext) {
49
55
  if (isRecommendationEnabled === undefined) {
50
56
  isRecommendationEnabled = this.base.recommendations.isEnabled(rootContext);
51
57
  this.internalModel.setProperty("/isRecommendationEnabled", isRecommendationEnabled);
52
58
  }
53
- this.tryResetRecommendations(rootContext);
54
- this.telemetry.resetData();
59
+ // if(!this.previousContext) {
60
+
61
+ // }
62
+ const isFclEnabled = this.base.getAppComponent()._isFclEnabled();
63
+ const isFullScreen = isFclEnabled ? this.base.getAppComponent().getRootViewController().getHelper().getCurrentUIState().isFullScreen : true;
64
+ if (currentContextBasePath !== previousContextBasePath) {
65
+ // different contexts/ OP
66
+ // console.log("run reset logic")
67
+ this.tryResetRecommendations(rootContext);
68
+ this.telemetry.resetData();
69
+ }
70
+ if (isFclEnabled && !isFullScreen) {
71
+ return;
72
+ }
55
73
  }
56
74
  }
57
75
  };
@@ -494,4 +512,4 @@ sap.ui.define(["sap/base/Log", "sap/fe/core/helpers/ClassSupport", "sap/fe/core/
494
512
  _exports = Recommendations;
495
513
  return _exports;
496
514
  }, false);
497
- //# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJuYW1lcyI6WyJSZWNvbW1lbmRhdGlvbnMiLCJkZWZpbmVVSTVDbGFzcyIsIm1ldGhvZE92ZXJyaWRlIiwicHVibGljRXh0ZW5zaW9uIiwiZXh0ZW5zaWJsZSIsIk92ZXJyaWRlRXhlY3V0aW9uIiwiSW5zdGVhZCIsImZpbmFsRXh0ZW5zaW9uIiwiZGF0YVRvQmVBY2NlcHRlZCIsIm9uSW5pdCIsInRlbGVtZXRyeSIsIlRlbGVtZXRyeSIsImFsbFJlY29tbWVuZGVkRmllbGRzIiwiaW50ZXJuYWxNb2RlbCIsImJhc2UiLCJnZXRWaWV3IiwiZ2V0TW9kZWwiLCJvbkFmdGVyQmluZGluZyIsImNvbnRleHQiLCJyb290Q29udGV4dCIsInVuZGVmaW5lZCIsImlzUmVjb21tZW5kYXRpb25FbmFibGVkIiwiZ2V0UHJvcGVydHkiLCJfZ2V0Um9vdENvbnRleHQiLCJyZWNvbW1lbmRhdGlvbnMiLCJpc0VuYWJsZWQiLCJzZXRQcm9wZXJ0eSIsInRyeVJlc2V0UmVjb21tZW5kYXRpb25zIiwicmVzZXREYXRhIiwicHJvZ3JhbW1pbmdNb2RlbCIsIlRyYW5zYWN0aW9uSGVscGVyIiwiZ2V0UHJvZ3JhbW1pbmdNb2RlbCIsIkNvbW1vblV0aWxzIiwiY3JlYXRlUm9vdENvbnRleHQiLCJnZXRBcHBDb21wb25lbnQiLCJjbGVhclJlY29tbWVuZGF0aW9ucyIsImJpbmRpbmdDb250ZXh0IiwiZ2V0QmluZGluZ0NvbnRleHQiLCJyZWNvbW1lbmRhdGlvbkhlbHBlciIsIl9yb290Q29udGV4dCIsImZldGNoUmVjb21tZW5kYXRpb25zIiwiX2NvbnRleHQiLCJQcm9taXNlIiwicmVzb2x2ZSIsImZldGNoQW5kQXBwbHlSZWNvbW1lbmRhdGlvbnMiLCJjdXJyZW50Q29udGV4dHNJbmZvIiwiY29uc2lkZXJPbmx5TmV3Q29udGV4dCIsImlzU3VjY2VzcyIsInNpZGVFZmZlY3RzIiwiZ2V0U2lkZUVmZmVjdHNTZXJ2aWNlIiwicmVjb21tZW5kYXRpb25SZWdpc3RyeSIsImdldFJlY29tbWVuZGF0aW9uc01hcHBpbmciLCJmaWx0ZXJlZENvbnRleHRzSW5mbyIsImZpbHRlciIsImNvbnRleHRJbmZvIiwic3RhbmRhcmRSZWNvbW1lbmRhdGlvbkhlbHBlciIsImNoZWNrSWZSZWNvbW1lbmRhdGlvblJvbGVFeGlzdHNGb3JDb250ZXh0IiwiY29udGV4dHNJbmZvIiwiZ2V0Q29udGV4dHNXaXRoTm9SZWNvbW1lbmRhdGlvbnMiLCJjb250ZXh0cyIsIm1hcCIsImxlbmd0aCIsInN0YXJ0VGltZSIsInBlcmZvcm1hbmNlIiwibm93IiwicmVjb21tZW5kYXRpb25EYXRhIiwiZW5kVGltZSIsInVwZGF0ZVJlc3BvbnNlVGltZUluZm8iLCJ1cGRhdGVBbGxSZWNvbW1lbmRlZEZpZWxkcyIsInVwZGF0ZURhdGFGcm9tUmVjb21tZW5kYXRpb25SZXNwb25zZSIsImluY3JlYXNlQ291bnQiLCJhcHBseVJlY29tbWVuZGF0aW9uIiwiZSIsIkxvZyIsImVycm9yIiwic3RvcmVSZWNvbW1lbmRhdGlvbkNvbnRleHRzIiwiZmV0Y2hBbmRBcHBseVJlY29tbWVuZGF0aW9uc09uRmllbGRDaGFuZ2UiLCJmaWVsZCIsImFwcENvbXBvbmVudCIsImlzRmllbGRSZWNvbW1lbmRhdGlvblJlbGV2YW50IiwiY2hlY2tJZkZpZWxkSXNSZWNvbW1lbmRhdGlvblJlbGV2YW50IiwidGFyZ2V0cyIsImZldGNoVGFyZ2V0cyIsImZpbHRlcmVkUmVjb21tZW5kYXRpb25Db250ZXh0cyIsImZldGNoRmlsdGVyZWRSZWNvbW1lbmRhdGlvbkNvbnRleHRzIiwicmVjb21tZW5kYXRpb25Db250ZXh0IiwiZmlsdGVyZWRSZWNvbW1lbmRhdGlvbkNvbnRleHQiLCJnZXRQYXRoIiwiaW5jbHVkZXMiLCJjbGVhcklnbm9yZWRDb250ZXh0cyIsIm9uQmVmb3JlQWNjZXB0UmVjb21tZW5kYXRpb25zIiwiX3BhcmFtcyIsImFjY2VwdFJlY29tbWVuZGF0aW9ucyIsInJlY29tbWVuZGF0aW9uUmVzcG9uc2VzIiwic3RvcmVSZWNvbW1lbmRhdGlvbnMiLCJjb250ZXh0UGF0aHMiLCJyZWNvbW1lbmRhdGlvbkNvbnRleHRzIiwiZm9yRWFjaCIsInB1c2giLCJjb250ZXh0UGF0aCIsImluZGV4IiwiaW5kZXhPZiIsImNvbnRleHRJZGVudGlmaWVyIiwia2V5IiwiY29udGV4dFBhdGhGcm9tS2V5Iiwic3Vic3RyaW5nIiwibGFzdEluZGV4T2YiLCJmZXRjaEZpbHRlcmVkUmVjb21tZW5kYXRpb25EYXRhIiwiZmlsdGVyZWRUYXJnZXRzIiwiZmlsdGVyUmVjb21tZW5kYXRpb25zRGF0YSIsIk9iamVjdCIsImtleXMiLCJhc3NpZ24iLCJjb25zaWRlclJlY29tbWVuZGF0aW9uQ29udGV4dHMiLCJ2ZXJzaW9uIiwiaXNGY2xFbmFibGVkIiwiX2lzRmNsRW5hYmxlZCIsImlzRnVsbFNjcmVlbiIsImdldFJvb3RWaWV3Q29udHJvbGxlciIsImdldEhlbHBlciIsImdldEN1cnJlbnRVSVN0YXRlIiwiaXNSZWNvbW1lbmRhdGlvbkFjY2VwdGFibGUiLCJzcGxpdFBhdGhBbmRDaGVja0lmUmVjb21tZW5kYXRpb25BY2NlcHRhYmxlIiwiY3R4dFBhdGgiLCJwYXRoQXJyYXkiLCJzcGxpdCIsIm5ld1BhdGgiLCJuZXdQYXRoQXJyYXkiLCJzbGljZSIsInNvbWUiLCJ2YWx1ZSIsInJpZ2h0TW9zdENvbnRleHQiLCJnZXRSaWdodG1vc3RDb250ZXh0IiwiZGF0YVRvQmVGaWx0ZXJlZCIsImZldGNoRGF0YVRvQmVGaWx0ZXJlZCIsImFkanVzdEFjY2VwdEFsbFBhcmFtcyIsImZpbHRlclJlY29tbWVuZGF0aW9uRGF0YSIsImZpbHRlclJlY29tbWVuZGF0aW9uQ29udGV4dHMiLCJwYXJhbXMiLCJ0ZXh0IiwicHJvcGVydHlQYXRoRnJvbUtleSIsIm1hdGNoaW5nQ29udGV4dCIsImlzUmVjb21tZW5kYXRpb25GaWVsZE51bGwiLCJwcm9wZXJ0eVBhdGgiLCJmZXRjaEFjY2VwdEFsbFBhcmFtcyIsImdldENvbnRyb2xsZXIiLCJhZGRDb250ZXh0SWRlbnRpZmllclRleHQiLCJjaGVja0lmUmVjb21tZW5kYXRpb25zRXhpc3QiLCJpZ25vcmVSZWNvbW1lbmRhdGlvbkZvckNvbnRleHRzIiwidmlldyIsInNldEN1cnJlbnRSb290Q29udGV4dCIsInJlc2V0UmVjb21tZW5kYXRpb25zIiwic3RvcmVEYXRhRm9yVGVsZW1ldHJ5IiwicmVjb21tZW5kYXRpb25PcHRpb25DaG9vc2VuIiwiUmVjb21tZW5kYXRpb25EaWFsb2dEZWNpc2lvbiIsIkFjY2VwdCIsInVwZGF0ZURhdGEiLCJJZ25vcmUiLCJzdG9yZURhdGEiLCJpbmNyZWFzZVRlbGVtZXRyeURhdGFDb3VudCIsInVwZGF0ZVRlbGVtZXRyeURhdGFCYXNlZE9uVXNlclNlbGVjdGlvbiIsImZpZWxkUGF0aCIsInNlbGVjdGVkVmFsdWUiLCJ2aWV3QmluZGluZ0NvbnRleHRQYXRoIiwibmV3UmVjb21tZW5kYXRpb25zRm9yQ3VycmVudENvbnRleHRzIiwicmVzcG9uc2UiLCJDb250cm9sbGVyRXh0ZW5zaW9uIl0sInNvdXJjZVJvb3QiOiIuIiwic291cmNlcyI6WyJSZWNvbW1lbmRhdGlvbnMudHMiXSwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IExvZyBmcm9tIFwic2FwL2Jhc2UvTG9nXCI7XG5pbXBvcnQgdHlwZSBQYWdlQ29udHJvbGxlciBmcm9tIFwic2FwL2ZlL2NvcmUvUGFnZUNvbnRyb2xsZXJcIjtcbmltcG9ydCB7IGRlZmluZVVJNUNsYXNzLCBleHRlbnNpYmxlLCBmaW5hbEV4dGVuc2lvbiwgbWV0aG9kT3ZlcnJpZGUsIHB1YmxpY0V4dGVuc2lvbiB9IGZyb20gXCJzYXAvZmUvY29yZS9oZWxwZXJzL0NsYXNzU3VwcG9ydFwiO1xuaW1wb3J0IHsgcmVjb21tZW5kYXRpb25IZWxwZXIgfSBmcm9tIFwic2FwL2ZlL2NvcmUvaGVscGVycy9SZWNvbW1lbmRhdGlvbkhlbHBlclwiO1xuaW1wb3J0IHR5cGUge1xuXHRSZWNvbW1lbmRhdGlvbkNvbnRleHRzSW5mbyxcblx0UmVjb21tZW5kYXRpb25JbmZvLFxuXHRTdGFuZGFyZFJlY29tbWVuZGF0aW9uUmVzcG9uc2Vcbn0gZnJvbSBcInNhcC9mZS9jb3JlL2hlbHBlcnMvU3RhbmRhcmRSZWNvbW1lbmRhdGlvbkhlbHBlclwiO1xuaW1wb3J0IHsgc3RhbmRhcmRSZWNvbW1lbmRhdGlvbkhlbHBlciB9IGZyb20gXCJzYXAvZmUvY29yZS9oZWxwZXJzL1N0YW5kYXJkUmVjb21tZW5kYXRpb25IZWxwZXJcIjtcbmltcG9ydCB0eXBlIENvbnRyb2wgZnJvbSBcInNhcC91aS9jb3JlL0NvbnRyb2xcIjtcbmltcG9ydCBDb250cm9sbGVyRXh0ZW5zaW9uIGZyb20gXCJzYXAvdWkvY29yZS9tdmMvQ29udHJvbGxlckV4dGVuc2lvblwiO1xuaW1wb3J0IE92ZXJyaWRlRXhlY3V0aW9uIGZyb20gXCJzYXAvdWkvY29yZS9tdmMvT3ZlcnJpZGVFeGVjdXRpb25cIjtcbmltcG9ydCB0eXBlIENvbnRleHQgZnJvbSBcInNhcC91aS9tb2RlbC9Db250ZXh0XCI7XG5pbXBvcnQgdHlwZSBKU09OTW9kZWwgZnJvbSBcInNhcC91aS9tb2RlbC9qc29uL0pTT05Nb2RlbFwiO1xuaW1wb3J0IHR5cGUgeyBkZWZhdWx0IGFzIE9EYXRhVjRDb250ZXh0IH0gZnJvbSBcInNhcC91aS9tb2RlbC9vZGF0YS92NC9Db250ZXh0XCI7XG5pbXBvcnQgdHlwZSB7IEZFVmlldyB9IGZyb20gXCIuLi9CYXNlQ29udHJvbGxlclwiO1xuaW1wb3J0IENvbW1vblV0aWxzIGZyb20gXCIuLi9Db21tb25VdGlsc1wiO1xuaW1wb3J0IHR5cGUgRmNsQ29udHJvbGxlciBmcm9tIFwiLi4vcm9vdFZpZXcvRmNsLmNvbnRyb2xsZXJcIjtcbmltcG9ydCBUcmFuc2FjdGlvbkhlbHBlciBmcm9tIFwiLi9lZGl0Rmxvdy9UcmFuc2FjdGlvbkhlbHBlclwiO1xuXG5pbXBvcnQgeyBSZWNvbW1lbmRhdGlvbkRpYWxvZ0RlY2lzaW9uIH0gZnJvbSBcIi4uL2NvbnRyb2xzL1JlY29tbWVuZGF0aW9ucy9Db25maXJtUmVjb21tZW5kYXRpb25EaWFsb2cuYmxvY2tcIjtcbmltcG9ydCB0eXBlIHsgUmVjb21tZW5kYXRpb25UZWxlbWV0cnkgfSBmcm9tIFwiLi4vc2VydmljZXMvVGVsZW1ldHJ5U2VydmljZUZhY3RvcnlcIjtcbmltcG9ydCBUZWxlbWV0cnkgZnJvbSBcIi4vcmVjb21tZW5kYXRpb25zL1RlbGVtZXRyeVwiO1xuXG5leHBvcnQgdHlwZSBBY2NlcHRBbGxQYXJhbXMgPSB7XG5cdHJlY29tbWVuZGF0aW9uRGF0YT86IFJlY29tbWVuZGF0aW9uRGF0YVtdO1xufTtcblxuZXhwb3J0IHR5cGUgUmVjb21tZW5kYXRpb25EYXRhID0ge1xuXHRjb250ZXh0PzogT0RhdGFWNENvbnRleHQ7XG5cdGNvbnRleHRJZGVudGlmaWVyPzogc3RyaW5nW107XG5cdGNvbnRleHRJZGVudGlmaWVyVGV4dD86IHN0cmluZ1tdO1xuXHRwcm9wZXJ0eVBhdGg/OiBzdHJpbmc7XG5cdHZhbHVlPzogc3RyaW5nO1xuXHR0ZXh0Pzogc3RyaW5nO1xufTtcbkBkZWZpbmVVSTVDbGFzcyhcInNhcC5mZS5jb3JlLmNvbnRyb2xsZXJleHRlbnNpb25zLlJlY29tbWVuZGF0aW9uc1wiKVxuZXhwb3J0IGRlZmF1bHQgY2xhc3MgUmVjb21tZW5kYXRpb25zIGV4dGVuZHMgQ29udHJvbGxlckV4dGVuc2lvbiB7XG5cdGJhc2UhOiBQYWdlQ29udHJvbGxlcjtcblxuXHRyZWNvbW1lbmRhdGlvbkNvbnRleHRzITogUmVjb21tZW5kYXRpb25Db250ZXh0c0luZm9bXTtcblxuXHRyb290Q29udGV4dCE6IENvbnRleHQgfCB1bmRlZmluZWQ7XG5cblx0aW50ZXJuYWxNb2RlbCE6IEpTT05Nb2RlbDtcblxuXHR0ZWxlbWV0cnkhOiBUZWxlbWV0cnk7XG5cblx0YWxsUmVjb21tZW5kZWRGaWVsZHMhOiBzdHJpbmdbXTtcblxuXHQvLyB0aGUgZGF0YSBzaG93biBpbiBBY2NlcHQvSWdub3JlIGRpYWxvZyBvZiBSZWNvbW1lbmRhdGlvbnNcblx0ZGF0YVRvQmVBY2NlcHRlZDogUmVjb21tZW5kYXRpb25EYXRhW10gPSBbXTtcblxuXHRAbWV0aG9kT3ZlcnJpZGUoKVxuXHRvbkluaXQoKTogdm9pZCB7XG5cdFx0dGhpcy50ZWxlbWV0cnkgPSBuZXcgVGVsZW1ldHJ5KCk7XG5cdFx0dGhpcy5hbGxSZWNvbW1lbmRlZEZpZWxkcyA9IFtdO1xuXHRcdHRoaXMuaW50ZXJuYWxNb2RlbCA9IHRoaXMuYmFzZS5nZXRWaWV3KCkuZ2V0TW9kZWwoXCJpbnRlcm5hbFwiKTtcblx0fVxuXG5cdEBtZXRob2RPdmVycmlkZShcIl9yb3V0aW5nXCIpXG5cdGFzeW5jIG9uQWZ0ZXJCaW5kaW5nKGNvbnRleHQ6IENvbnRleHQgfCBudWxsKTogUHJvbWlzZTx2b2lkPiB7XG5cdFx0aWYgKGNvbnRleHQpIHtcblx0XHRcdHRoaXMucm9vdENvbnRleHQgPSB1bmRlZmluZWQ7XG5cdFx0XHQvLyB1c2UgaW50ZXJuYWwgbW9kZWwgYmVjYXVzZSB3ZSBoYXZlIHRvIHVzZSB0aGlzIGluZm9ybWF0aW9uIGFjcm9zcyB0aGUgYXBwbGljYXRpb24gZm9yIGRpZmZlcmVudCBpbnN0YW5jZXMuXG5cdFx0XHRsZXQgaXNSZWNvbW1lbmRhdGlvbkVuYWJsZWQgPSB0aGlzLmludGVybmFsTW9kZWwuZ2V0UHJvcGVydHkoXCIvaXNSZWNvbW1lbmRhdGlvbkVuYWJsZWRcIik7XG5cdFx0XHQvLyBvbkFmdGVyIGJpbmRpbmcgaXMgY2FsbGVkIGZvciBhbGwgY29udGV4dHNcblx0XHRcdC8vIGJ1dCB3ZSBkbyBub3QgbmVlZCB0byBjYWxsIHRoZSBpc0VuYWJsZWQgaG9vayBhbGwgdGhlIHRpbWVcblx0XHRcdC8vIHNvIGNoZWNrIGlmIHJlY29tbWVuZGF0aW9uIGVuYWJsZWQgaXMgYWxyZWFkeSBhdmFpbGFibGVcblx0XHRcdGNvbnN0IHJvb3RDb250ZXh0ID0gYXdhaXQgdGhpcy5fZ2V0Um9vdENvbnRleHQoY29udGV4dCBhcyBPRGF0YVY0Q29udGV4dCk7XG5cdFx0XHRpZiAocm9vdENvbnRleHQpIHtcblx0XHRcdFx0aWYgKGlzUmVjb21tZW5kYXRpb25FbmFibGVkID09PSB1bmRlZmluZWQpIHtcblx0XHRcdFx0XHRpc1JlY29tbWVuZGF0aW9uRW5hYmxlZCA9IHRoaXMuYmFzZS5yZWNvbW1lbmRhdGlvbnMuaXNFbmFibGVkKHJvb3RDb250ZXh0KTtcblx0XHRcdFx0XHR0aGlzLmludGVybmFsTW9kZWwuc2V0UHJvcGVydHkoXCIvaXNSZWNvbW1lbmRhdGlvbkVuYWJsZWRcIiwgaXNSZWNvbW1lbmRhdGlvbkVuYWJsZWQpO1xuXHRcdFx0XHR9XG5cdFx0XHRcdHRoaXMudHJ5UmVzZXRSZWNvbW1lbmRhdGlvbnMocm9vdENvbnRleHQgYXMgT0RhdGFWNENvbnRleHQpO1xuXHRcdFx0XHR0aGlzLnRlbGVtZXRyeS5yZXNldERhdGEoKTtcblx0XHRcdH1cblx0XHR9XG5cdH1cblxuXHRwcml2YXRlIGFzeW5jIF9nZXRSb290Q29udGV4dChjb250ZXh0OiBPRGF0YVY0Q29udGV4dCk6IFByb21pc2U8Q29udGV4dCB8IHVuZGVmaW5lZD4ge1xuXHRcdGNvbnN0IHByb2dyYW1taW5nTW9kZWwgPSBUcmFuc2FjdGlvbkhlbHBlci5nZXRQcm9ncmFtbWluZ01vZGVsKGNvbnRleHQpO1xuXHRcdHJldHVybiBDb21tb25VdGlscy5jcmVhdGVSb290Q29udGV4dChwcm9ncmFtbWluZ01vZGVsLCB0aGlzLmJhc2UuZ2V0VmlldygpLCB0aGlzLmJhc2UuZ2V0QXBwQ29tcG9uZW50KCkpO1xuXHR9XG5cblx0LyoqXG5cdCAqIENsZWFyIGFsbCByZWNvbW1lbmRhdGlvbnMgY3VycmVudGx5IGF2YWlsYWJsZSBvbiB0aGUgVUkuXG5cdCAqXG5cdCAqIEBwdWJsaWNcblx0ICovXG5cdEBwdWJsaWNFeHRlbnNpb24oKVxuXHRwdWJsaWMgY2xlYXJSZWNvbW1lbmRhdGlvbnMoKTogdm9pZCB7XG5cdFx0Y29uc3QgYmluZGluZ0NvbnRleHQgPSB0aGlzLmdldFZpZXcoKS5nZXRCaW5kaW5nQ29udGV4dCgpO1xuXHRcdGlmIChiaW5kaW5nQ29udGV4dCkge1xuXHRcdFx0cmVjb21tZW5kYXRpb25IZWxwZXIuY2xlYXJSZWNvbW1lbmRhdGlvbnModGhpcy5iYXNlLmdldFZpZXcoKSwgYmluZGluZ0NvbnRleHQpO1xuXHRcdH1cblx0fVxuXG5cdC8qKlxuXHQgKiBDaGVjayBpZiByZWNvbW1lbmRhdGlvbnMgYXJlIGVuYWJsZWQgb3Igbm90LlxuXHQgKlxuXHQgKiBAcGFyYW0gX3Jvb3RDb250ZXh0IFRoZSByb290IGVudGl0eSBjb250ZXh0XG5cdCAqIEByZXR1cm5zIFRydWUgaWYgcmVjb21tZW5kYXRpb24gaXMgZW5hYmxlZC4gRmFsc2UgaWYgcmVjb21tZW5kYXRpb24gaXMgZGlzYWJsZWQuXG5cdCAqIEBwdWJsaWNcblx0ICovXG5cdEBwdWJsaWNFeHRlbnNpb24oKVxuXHRAZXh0ZW5zaWJsZShPdmVycmlkZUV4ZWN1dGlvbi5JbnN0ZWFkKVxuXHRwdWJsaWMgaXNFbmFibGVkKF9yb290Q29udGV4dDogQ29udGV4dCk6IGJvb2xlYW4ge1xuXHRcdHJldHVybiBmYWxzZTtcblx0fVxuXG5cdC8qKlxuXHQgKiBNZXRob2QgcmV0dXJucyBhIGJvb2xlYW4gdmFsdWUgaW5kaWNhdGluZyByZWNvbW1lbmRhdGlvbiBpcyBlbmFibGVkIG9yIG5vdC4gSW4gY2FzZSBjYWxsZWQgYmVmb3JlXG5cdCAqIHRoZSBlbmFibGVtZW50IGNoZWNrIGlzIGNvbXBsZXRlZCwgbWV0aG9kIHdpbGwgcmV0dXJuIGZhbHNlIHdoaWNoIGlzIHRoZSBkZWZhdWx0IHZhbHVlLlxuXHQgKlxuXHQgKiBAcmV0dXJucyBUcnVlIGlmIHJlY29tbWVuZGF0aW9uIGlzIGVuYWJsZWQgZWxzZSBmYWxzZS5cblx0ICovXG5cdEBwdWJsaWNFeHRlbnNpb24oKVxuXHRAZmluYWxFeHRlbnNpb24oKVxuXHRwdWJsaWMgaXNSZWNvbW1lbmRhdGlvbkVuYWJsZWQoKTogYm9vbGVhbiB7XG5cdFx0cmV0dXJuICEhdGhpcy5pbnRlcm5hbE1vZGVsPy5nZXRQcm9wZXJ0eShcIi9pc1JlY29tbWVuZGF0aW9uRW5hYmxlZFwiKTtcblx0fVxuXG5cdC8qKlxuXHQgKiBGZXRjaCB0aGUgcmVjb21tZW5kYXRpb24gZm9yIGEgc3BlY2lmaWMgY29udGV4dC5cblx0ICpcblx0ICogQHBhcmFtIF9jb250ZXh0IFRoZSBjb250ZXh0IHRoYXQgc2hhbGwgYmUgY29uc2lkZXJlZCB3aGVuIGZldGNoaW5nIHJlY29tbWVuZGF0aW9uc1xuXHQgKiBAcGFyYW0gX3Jvb3RDb250ZXh0IFRoZSByb290IGVudGl0eSBjb250ZXh0XG5cdCAqIEByZXR1cm5zIFRoZSByZWNvbW1lbmRhdGlvbiBlbnRyaWVzXG5cdCAqIEBwdWJsaWNcblx0ICovXG5cdEBwdWJsaWNFeHRlbnNpb24oKVxuXHRAZXh0ZW5zaWJsZShPdmVycmlkZUV4ZWN1dGlvbi5JbnN0ZWFkKVxuXHRwdWJsaWMgYXN5bmMgZmV0Y2hSZWNvbW1lbmRhdGlvbnMoX2NvbnRleHQ6IE9EYXRhVjRDb250ZXh0W10sIF9yb290Q29udGV4dD86IENvbnRleHQpOiBQcm9taXNlPFN0YW5kYXJkUmVjb21tZW5kYXRpb25SZXNwb25zZVtdPiB7XG5cdFx0cmV0dXJuIFByb21pc2UucmVzb2x2ZShbXSk7XG5cdH1cblxuXHQvKipcblx0ICogRmV0Y2ggdGhlIHJlY29tbWVuZGF0aW9ucyBhbmQgYXBwbHkgdGhlbSBvbiB0aGUgVUkuXG5cdCAqXG5cdCAqIEBwYXJhbSBjdXJyZW50Q29udGV4dHNJbmZvIENvbnRleHRzIEluZm8gdGhhdCBjb250YWlucyB0aGUgY29udGV4dCB0aGF0IHNoYWxsIGJlIGNvbnNpZGVyZWQgd2hlbiBmZXRjaGluZyByZWNvbW1lbmRhdGlvbnMgYWxvbmcgd2l0aCBjb250ZXh0SWRlbnRpZmllclxuXHQgKiBAcGFyYW0gY29uc2lkZXJPbmx5TmV3Q29udGV4dCBCb29sZWFuIHByb3BlcnR5IGluZGljYXRpbmcgUmVjb21tZW5kYXRpb25cblx0ICogc2hvdWxkIGJlIGZldGNoZWQgb25seSBmb3IgbmV3IGNvbnRleHRzIHdpdGggbm8gcmVjb21tZW5kYXRpb24gZmV0Y2ggY2FsbFxuXHQgKiBAcmV0dXJucyBgdHJ1ZWAgaWYgdGhlIHJlY29tbWVuZGF0aW9ucyB3ZXJlIGZldGNoZWQgYW5kIGFwcGxpZWQgY29ycmVjdGx5XG5cdCAqL1xuXHRAcHVibGljRXh0ZW5zaW9uKClcblx0cHVibGljIGFzeW5jIGZldGNoQW5kQXBwbHlSZWNvbW1lbmRhdGlvbnMoXG5cdFx0Y3VycmVudENvbnRleHRzSW5mbzogUmVjb21tZW5kYXRpb25Db250ZXh0c0luZm9bXSxcblx0XHRjb25zaWRlck9ubHlOZXdDb250ZXh0PzogYm9vbGVhblxuXHQpOiBQcm9taXNlPGJvb2xlYW4+IHtcblx0XHRsZXQgaXNTdWNjZXNzID0gZmFsc2U7XG5cdFx0Y29uc3Qgc2lkZUVmZmVjdHMgPSB0aGlzLmJhc2UuZ2V0QXBwQ29tcG9uZW50KCkuZ2V0U2lkZUVmZmVjdHNTZXJ2aWNlKCk7XG5cdFx0Y29uc3QgcmVjb21tZW5kYXRpb25SZWdpc3RyeSA9IHNpZGVFZmZlY3RzLmdldFJlY29tbWVuZGF0aW9uc01hcHBpbmcoKTtcblx0XHRjb25zdCBmaWx0ZXJlZENvbnRleHRzSW5mbyA9IGN1cnJlbnRDb250ZXh0c0luZm8uZmlsdGVyKChjb250ZXh0SW5mbzogUmVjb21tZW5kYXRpb25Db250ZXh0c0luZm8pID0+IHtcblx0XHRcdHJldHVybiBzdGFuZGFyZFJlY29tbWVuZGF0aW9uSGVscGVyLmNoZWNrSWZSZWNvbW1lbmRhdGlvblJvbGVFeGlzdHNGb3JDb250ZXh0KGNvbnRleHRJbmZvLCByZWNvbW1lbmRhdGlvblJlZ2lzdHJ5KTtcblx0XHR9KTtcblx0XHRpZiAodGhpcy5pc1JlY29tbWVuZGF0aW9uRW5hYmxlZCgpKSB7XG5cdFx0XHRjb25zdCBjb250ZXh0c0luZm86IFJlY29tbWVuZGF0aW9uQ29udGV4dHNJbmZvW10gPSBjb25zaWRlck9ubHlOZXdDb250ZXh0XG5cdFx0XHRcdD8gc3RhbmRhcmRSZWNvbW1lbmRhdGlvbkhlbHBlci5nZXRDb250ZXh0c1dpdGhOb1JlY29tbWVuZGF0aW9ucyhmaWx0ZXJlZENvbnRleHRzSW5mbywgdGhpcy5pbnRlcm5hbE1vZGVsKVxuXHRcdFx0XHQ6IGZpbHRlcmVkQ29udGV4dHNJbmZvO1xuXHRcdFx0Y29uc3QgY29udGV4dHM6IE9EYXRhVjRDb250ZXh0W10gPSBjb250ZXh0c0luZm8ubWFwKChjb250ZXh0SW5mbzogUmVjb21tZW5kYXRpb25Db250ZXh0c0luZm8pID0+IGNvbnRleHRJbmZvLmNvbnRleHQpO1xuXHRcdFx0aWYgKGNvbnRleHRzICYmIGNvbnRleHRzLmxlbmd0aCA+IDApIHtcblx0XHRcdFx0dHJ5IHtcblx0XHRcdFx0XHRjb25zdCByb290Q29udGV4dCA9IGF3YWl0IHRoaXMuX2dldFJvb3RDb250ZXh0KGNvbnRleHRzWzBdKTtcblx0XHRcdFx0XHRjb25zdCBzdGFydFRpbWUgPSBwZXJmb3JtYW5jZS5ub3coKTtcblx0XHRcdFx0XHRjb25zdCByZWNvbW1lbmRhdGlvbkRhdGEgPSBhd2FpdCB0aGlzLmJhc2UucmVjb21tZW5kYXRpb25zLmZldGNoUmVjb21tZW5kYXRpb25zKGNvbnRleHRzLCByb290Q29udGV4dCk7XG5cdFx0XHRcdFx0Y29uc3QgZW5kVGltZSA9IHBlcmZvcm1hbmNlLm5vdygpO1xuXHRcdFx0XHRcdHRoaXMudGVsZW1ldHJ5LnVwZGF0ZVJlc3BvbnNlVGltZUluZm8oZW5kVGltZSAtIHN0YXJ0VGltZSk7XG5cdFx0XHRcdFx0aWYgKHJlY29tbWVuZGF0aW9uRGF0YT8ubGVuZ3RoKSB7XG5cdFx0XHRcdFx0XHR0aGlzLnVwZGF0ZUFsbFJlY29tbWVuZGVkRmllbGRzKHJlY29tbWVuZGF0aW9uRGF0YSk7XG5cdFx0XHRcdFx0XHR0aGlzLnRlbGVtZXRyeS51cGRhdGVEYXRhRnJvbVJlY29tbWVuZGF0aW9uUmVzcG9uc2UocmVjb21tZW5kYXRpb25EYXRhKTtcblx0XHRcdFx0XHR9IGVsc2Uge1xuXHRcdFx0XHRcdFx0Ly8gaWYgZW1wdHkgcmVjb21tZW5kYXRpb25zLCB0aGVuIHN0b3JlIGl0IGZvciB0ZWxlbWV0cnkgcHVycG9zZVxuXHRcdFx0XHRcdFx0dGhpcy50ZWxlbWV0cnkuaW5jcmVhc2VDb3VudChcIm51bWJlck9mVGltZXNFbXB0eVJlY29tbWVuZGF0aW9uc1wiKTtcblx0XHRcdFx0XHR9XG5cdFx0XHRcdFx0Ly8gbmVlZCB0byB2YWxpZGF0ZSB0aGF0IHRoZSByZXNwb25zZSBpcyBwcm9wZXJseSBmb3JtYXR0ZWRcblx0XHRcdFx0XHRpc1N1Y2Nlc3MgPSB0aGlzLmFwcGx5UmVjb21tZW5kYXRpb24ocmVjb21tZW5kYXRpb25EYXRhLCBjb250ZXh0cyk7XG5cdFx0XHRcdH0gY2F0Y2ggKGUpIHtcblx0XHRcdFx0XHRMb2cuZXJyb3IoXCJUaGVyZSB3YXMgYW4gZXJyb3IgZmV0Y2hpbmcgdGhlIHJlY29tbWVuZGF0aW9uc1wiLCBlIGFzIEVycm9yKTtcblx0XHRcdFx0fVxuXHRcdFx0fVxuXG5cdFx0XHR0aGlzLnN0b3JlUmVjb21tZW5kYXRpb25Db250ZXh0cyhmaWx0ZXJlZENvbnRleHRzSW5mbyk7XG5cdFx0fVxuXG5cdFx0cmV0dXJuIGlzU3VjY2Vzcztcblx0fVxuXG5cdC8qKlxuXHQgKiBGZXRjaCB0aGUgcmVjb21tZW5kYXRpb25zIG9uIGZpZWxkIGNoYW5nZSBhbmQgYXBwbHkgdGhlbSBvbiB0aGUgVUkuXG5cdCAqXG5cdCAqIEBwYXJhbSBmaWVsZCBUaGUgY2hhbmdlZCBmaWVsZC5cblx0ICogQHBhcmFtIGNvbnRleHRJbmZvIENvbnRleHRJbmZvIHdoaWNoIGNvbnRhaW5zIHRoZSBjb250ZXh0IGlzIG9ubHkgY29uc2lkZXJlZCB3aGVuIGZldGNoaW5nIHRoZSByZWNvbW1lbmRhdGlvbnMgYWxvbmcgd2l0aCBjb250ZXh0SWRlbnRpZmllclxuXHQgKiBAcmV0dXJucyBgdHJ1ZWAgaWYgdGhlIHJlY29tbWVuZGF0aW9uIHdlcmUgZmV0Y2hlZCBhbmQgYXBwbGllZCBjb3JyZWN0bHlcblx0ICovXG5cdEBwdWJsaWNFeHRlbnNpb24oKVxuXHRwdWJsaWMgYXN5bmMgZmV0Y2hBbmRBcHBseVJlY29tbWVuZGF0aW9uc09uRmllbGRDaGFuZ2UoZmllbGQ6IENvbnRyb2wsIGNvbnRleHRJbmZvOiBSZWNvbW1lbmRhdGlvbkNvbnRleHRzSW5mbyk6IFByb21pc2U8Ym9vbGVhbj4ge1xuXHRcdGNvbnN0IGFwcENvbXBvbmVudCA9IHRoaXMuYmFzZS5nZXRBcHBDb21wb25lbnQoKTtcblx0XHRjb25zdCBpc0ZpZWxkUmVjb21tZW5kYXRpb25SZWxldmFudCA9IGFwcENvbXBvbmVudC5nZXRTaWRlRWZmZWN0c1NlcnZpY2UoKS5jaGVja0lmRmllbGRJc1JlY29tbWVuZGF0aW9uUmVsZXZhbnQoZmllbGQpO1xuXHRcdGlmIChpc0ZpZWxkUmVjb21tZW5kYXRpb25SZWxldmFudCkge1xuXHRcdFx0Ly9nZXR0aW5nIHRoZSB2aXNpYmxlIHRhcmdldHMgb24gdGhlIFVJIGFuZCB0aGVpciByZXNwZWN0aXZlIGNvbnRleHRzXG5cdFx0XHRjb25zdCB0YXJnZXRzID0gdGhpcy5mZXRjaFRhcmdldHModHJ1ZSk7XG5cdFx0XHRjb25zdCBmaWx0ZXJlZFJlY29tbWVuZGF0aW9uQ29udGV4dHMgPSB0aGlzLmZldGNoRmlsdGVyZWRSZWNvbW1lbmRhdGlvbkNvbnRleHRzKHRhcmdldHMpO1xuXHRcdFx0Ly9maWx0ZXJpbmcgdGhlIGNoaWxkIGNvbnRleHRzIGZyb20gdGhlIGF2YWlsYWJsZSBjb250ZXh0c1xuXHRcdFx0Y29uc3QgcmVjb21tZW5kYXRpb25Db250ZXh0ID0gZmlsdGVyZWRSZWNvbW1lbmRhdGlvbkNvbnRleHRzLmZpbHRlcihmdW5jdGlvbiAoZmlsdGVyZWRSZWNvbW1lbmRhdGlvbkNvbnRleHQpIHtcblx0XHRcdFx0aWYgKGZpbHRlcmVkUmVjb21tZW5kYXRpb25Db250ZXh0LmNvbnRleHQuZ2V0UGF0aCgpPy5pbmNsdWRlcyhjb250ZXh0SW5mby5jb250ZXh0LmdldFBhdGgoKSkpIHtcblx0XHRcdFx0XHRyZXR1cm4gZmlsdGVyZWRSZWNvbW1lbmRhdGlvbkNvbnRleHQ7XG5cdFx0XHRcdH1cblx0XHRcdH0pO1xuXHRcdFx0c3RhbmRhcmRSZWNvbW1lbmRhdGlvbkhlbHBlci5jbGVhcklnbm9yZWRDb250ZXh0cyh0aGlzLmludGVybmFsTW9kZWwsIGNvbnRleHRJbmZvPy5jb250ZXh0LmdldFBhdGgoKSk7XG5cdFx0XHRyZXR1cm4gdGhpcy5mZXRjaEFuZEFwcGx5UmVjb21tZW5kYXRpb25zKHJlY29tbWVuZGF0aW9uQ29udGV4dCk7XG5cdFx0fSBlbHNlIHtcblx0XHRcdHJldHVybiBmYWxzZTtcblx0XHR9XG5cdH1cblxuXHQvKipcblx0ICogUmV0dXJucyB0aGUgZmlsdGVyZWQgcmVjb21tZW5kYXRpb25zIGZyb20gcGFzc2VkIHJlY29tbWVuZGF0aW9ucyBhbmQgdGhlbiBiYXNlZCBvbiBpdCB3ZSBlaXRoZXIgc2hvdyB0aGUgZmlsdGVyZWQgcmVjb21tZW5kYXRpb25zIG9yIG5vdCBzaG93IHRoZSBBY2NlcHQgYWxsIERpYWxvZyBpZiB0aGVyZSBhcmUgbm8gcmVjb21tZW5kYXRpb25zLlxuXHQgKiBAcGFyYW0gX3BhcmFtcyBQYXJhbXMgb2JqZWN0IGNvbnRhaW5pbmcgcmVjb21tZW5kYXRpb25EYXRhIHByb3BlcnR5IHdoaWNoIGlzIGFuIGFycmF5IG9mIG9iamVjdHMgY29udGFpbmluZyBjb250ZXh0LCBwcm9wZXJ0eVBhdGgsIHZhbHVlIGFuZCB0ZXh0IGZvciBhIHJlY29tbWVuZGF0aW9uXG5cdCAqIEByZXR1cm5zIFByb21pc2Vcblx0ICovXG5cdEBwdWJsaWNFeHRlbnNpb24oKVxuXHRAZXh0ZW5zaWJsZShcIkFmdGVyQXN5bmNcIilcblx0cHVibGljIGFzeW5jIG9uQmVmb3JlQWNjZXB0UmVjb21tZW5kYXRpb25zKF9wYXJhbXM6IEFjY2VwdEFsbFBhcmFtcyk6IFByb21pc2U8dm9pZD4ge1xuXHRcdC8vZG8gbm90aGluZ1xuXHRcdHJldHVybiBQcm9taXNlLnJlc29sdmUoKTsgLy9oYWQgdG8gZG8gdGhpcyBiZWNhdXNlIG9mIGVzbGludCBlcnJvciBvZiBub3QgaGF2aW5nIGF3YWl0IHdoZW4gdGhlIGZ1bmN0aW9uIGlzIGFzeW5jXG5cdH1cblxuXHQvKipcblx0ICogVGhpcyBmdW5jdGlvbiBpcyByZXNwb25zaWJsZSBmb3IgYWNjZXB0aW5nIHRoZSByZWNvbW1lbmRhdGlvbnMuXG5cdCAqIEBwYXJhbSBfcGFyYW1zIFBhcmFtcyBvYmplY3QgY29udGFpbmluZyByZWNvbW1lbmRhdGlvbkRhdGEgcHJvcGVydHkgd2hpY2ggaXMgYW4gYXJyYXkgb2Ygb2JqZWN0cyBjb250YWluaW5nIGNvbnRleHQsIHByb3BlcnR5UGF0aCwgdmFsdWUgYW5kIHRleHQgZm9yIGEgcmVjb21tZW5kYXRpb25cblx0ICogQHJldHVybnMgUHJvbWlzZSB3aGljaCByZXNvbHZlZCB0byBhIEJvb2xlYW4gdmFsdWUgYmFzZWQgb24gd2hldGhlciByZWNvbW1lbmRhdGlvbnMgYXJlIGFjY2VwdGVkIG9yIG5vdFxuXHQgKi9cblx0QHB1YmxpY0V4dGVuc2lvbigpXG5cdEBleHRlbnNpYmxlKE92ZXJyaWRlRXhlY3V0aW9uLkluc3RlYWQpXG5cdHB1YmxpYyBhc3luYyBhY2NlcHRSZWNvbW1lbmRhdGlvbnMoX3BhcmFtczogQWNjZXB0QWxsUGFyYW1zKTogUHJvbWlzZTxib29sZWFuPiB7XG5cdFx0Ly9kbyBub3RoaW5nXG5cdFx0cmV0dXJuIFByb21pc2UucmVzb2x2ZSh0cnVlKTsgLy9oYWQgdG8gZG8gdGhpcyBiZWNhdXNlIG9mIGVzbGludCBlcnJvciBvZiBub3QgaGF2aW5nIGF3YWl0IHdoZW4gdGhlIGZ1bmN0aW9uIGlzIGFzeW5jXG5cdH1cblxuXHRwcml2YXRlIGFwcGx5UmVjb21tZW5kYXRpb24ocmVjb21tZW5kYXRpb25SZXNwb25zZXM6IFN0YW5kYXJkUmVjb21tZW5kYXRpb25SZXNwb25zZVtdLCBfY29udGV4dDogT0RhdGFWNENvbnRleHRbXSk6IGJvb2xlYW4ge1xuXHRcdHN0YW5kYXJkUmVjb21tZW5kYXRpb25IZWxwZXIuc3RvcmVSZWNvbW1lbmRhdGlvbnMoXG5cdFx0XHRyZWNvbW1lbmRhdGlvblJlc3BvbnNlcyxcblx0XHRcdHRoaXMuZ2V0VmlldygpLmdldE1vZGVsKFwiaW50ZXJuYWxcIikgYXMgSlNPTk1vZGVsLFxuXHRcdFx0X2NvbnRleHRcblx0XHQpO1xuXHRcdHJldHVybiB0cnVlO1xuXHR9XG5cblx0LyoqXG5cdCAqIFN0b3JlcyB0aGUgcmVjb21tZW5kYXRpb24gY29udGV4dHMuXG5cdCAqXG5cdCAqIEBwYXJhbSBjb250ZXh0c0luZm9cblx0ICovXG5cdHByaXZhdGUgc3RvcmVSZWNvbW1lbmRhdGlvbkNvbnRleHRzKGNvbnRleHRzSW5mbzogUmVjb21tZW5kYXRpb25Db250ZXh0c0luZm9bXSk6IHZvaWQge1xuXHRcdGNvbnN0IGNvbnRleHRQYXRoczogc3RyaW5nW10gPSBbXTtcblx0XHRsZXQgcmVjb21tZW5kYXRpb25Db250ZXh0cyA9IHRoaXMuaW50ZXJuYWxNb2RlbC5nZXRQcm9wZXJ0eShcIi9yZWNvbW1lbmRhdGlvbkNvbnRleHRzXCIpIHx8IFtdO1xuXHRcdGNvbnRleHRzSW5mby5mb3JFYWNoKChjb250ZXh0SW5mbzogUmVjb21tZW5kYXRpb25Db250ZXh0c0luZm8pID0+IHtcblx0XHRcdGNvbnRleHRQYXRocy5wdXNoKGNvbnRleHRJbmZvLmNvbnRleHQuZ2V0UGF0aCgpKTtcblx0XHR9KTtcblxuXHRcdHJlY29tbWVuZGF0aW9uQ29udGV4dHMgPSByZWNvbW1lbmRhdGlvbkNvbnRleHRzPy5maWx0ZXIoKHJlY29tbWVuZGF0aW9uQ29udGV4dDogUmVjb21tZW5kYXRpb25Db250ZXh0c0luZm8pID0+IHtcblx0XHRcdGNvbnN0IGNvbnRleHQgPSByZWNvbW1lbmRhdGlvbkNvbnRleHQ/LmNvbnRleHQ7XG5cdFx0XHRpZiAoY29udGV4dCkge1xuXHRcdFx0XHRjb25zdCBjb250ZXh0UGF0aCA9IGNvbnRleHQuZ2V0UGF0aCgpO1xuXHRcdFx0XHRjb25zdCBpbmRleCA9IGNvbnRleHRQYXRocy5pbmRleE9mKGNvbnRleHRQYXRoKTtcblx0XHRcdFx0aWYgKGluZGV4IDwgMCkge1xuXHRcdFx0XHRcdC8vIEV4aXN0aW5nIGNvbnRleHQgcGF0aCBpcyBub3QgZm91bmQgaW4gdGhlIG5ld2x5IGZldGNoZWQgcmVjb21tZW5kYXRpb24gJiB0aGVyZWZvcmUgZG9uJ3QgZG8gYW55dGhpbmdcblx0XHRcdFx0XHRyZXR1cm4gdHJ1ZTtcblx0XHRcdFx0fSBlbHNlIGlmIChyZWNvbW1lbmRhdGlvbkNvbnRleHQuY29udGV4dElkZW50aWZpZXIpIHtcblx0XHRcdFx0XHQvLyBFeGlzdGluZyBjb250ZXh0IHBhdGggaXMgZm91bmQuIHdlIHRyeSB0byB1cGRhdGUgdGhlIGNvbnRleHRJbmZvIHdpdGggdGhlIGxhdGVzdCBjb250ZXh0XG5cdFx0XHRcdFx0Ly8gaW5zdGVhZCBvZiBvdXRkYXRlZCBvbmVcblx0XHRcdFx0XHRjb250ZXh0c0luZm9baW5kZXhdLmNvbnRleHRJZGVudGlmaWVyID0gcmVjb21tZW5kYXRpb25Db250ZXh0LmNvbnRleHRJZGVudGlmaWVyO1xuXHRcdFx0XHR9XG5cdFx0XHR9XG5cdFx0XHRyZXR1cm4gZmFsc2U7XG5cdFx0fSk7XG5cblx0XHR0aGlzLmludGVybmFsTW9kZWwuc2V0UHJvcGVydHkoXCIvcmVjb21tZW5kYXRpb25Db250ZXh0c1wiLCBbLi4ucmVjb21tZW5kYXRpb25Db250ZXh0cywgLi4uY29udGV4dHNJbmZvXSk7XG5cdH1cblxuXHQvKipcblx0ICogRmlsdGVycyB0aGUgY29udGV4dHMgYW5kIG9ubHkgcmV0dXJucyB0aG9zZSB0aGF0IG1hdGNoZXMgdGhlIGNvbnRleHRzLlxuXHQgKlxuXHQgKiBAcGFyYW0gdGFyZ2V0c1xuXHQgKiBAcmV0dXJucyBSZXR1cm5zIHRoZSBmaWx0ZXJlZCByZWNvbW1lbmRhdGlvbiByZWxldmFudCBjb250ZXh0c1xuXHQgKi9cblx0cHJpdmF0ZSBmZXRjaEZpbHRlcmVkUmVjb21tZW5kYXRpb25Db250ZXh0cyh0YXJnZXRzOiBzdHJpbmdbXSk6IFJlY29tbWVuZGF0aW9uQ29udGV4dHNJbmZvW10ge1xuXHRcdGNvbnN0IGNvbnRleHRQYXRoczogc3RyaW5nW10gPSBbXTtcblx0XHRjb25zdCBmaWx0ZXJlZFJlY29tbWVuZGF0aW9uQ29udGV4dHM6IFJlY29tbWVuZGF0aW9uQ29udGV4dHNJbmZvW10gPSBbXTtcblx0XHRmb3IgKGNvbnN0IGtleSBvZiB0YXJnZXRzKSB7XG5cdFx0XHRjb25zdCBjb250ZXh0UGF0aEZyb21LZXkgPSBrZXkuc3Vic3RyaW5nKDAsIGtleS5sYXN0SW5kZXhPZihcIilcIikgKyAxKTtcblx0XHRcdGNvbnN0IHJlY29tbWVuZGF0aW9uQ29udGV4dHMgPSAodGhpcy5nZXRWaWV3KCkuZ2V0TW9kZWwoXCJpbnRlcm5hbFwiKSBhcyBKU09OTW9kZWwpLmdldFByb3BlcnR5KFwiL3JlY29tbWVuZGF0aW9uQ29udGV4dHNcIik7XG5cdFx0XHRyZWNvbW1lbmRhdGlvbkNvbnRleHRzLmZvckVhY2goKGNvbnRleHRJbmZvOiBSZWNvbW1lbmRhdGlvbkNvbnRleHRzSW5mbykgPT4ge1xuXHRcdFx0XHRjb25zdCBjb250ZXh0ID0gY29udGV4dEluZm8uY29udGV4dDtcblx0XHRcdFx0aWYgKGNvbnRleHQuZ2V0UGF0aCgpID09IGNvbnRleHRQYXRoRnJvbUtleSAmJiAhY29udGV4dFBhdGhzLmluY2x1ZGVzKGNvbnRleHRQYXRoRnJvbUtleSkpIHtcblx0XHRcdFx0XHRjb250ZXh0UGF0aHMucHVzaChjb250ZXh0UGF0aEZyb21LZXkpO1xuXHRcdFx0XHRcdGZpbHRlcmVkUmVjb21tZW5kYXRpb25Db250ZXh0cy5wdXNoKGNvbnRleHRJbmZvKTtcblx0XHRcdFx0fVxuXHRcdFx0fSk7XG5cdFx0fVxuXHRcdHJldHVybiBmaWx0ZXJlZFJlY29tbWVuZGF0aW9uQ29udGV4dHM7XG5cdH1cblxuXHQvKipcblx0ICogRmV0Y2hlcyBSZWNvbW1lbmRhdGlvbkRhdGEgYmFzZWQgb24gZmlsdGVyZWQgdGFyZ2V0cy5cblx0ICpcblx0ICogQHBhcmFtIGZpbHRlcmVkVGFyZ2V0c1xuXHQgKiBAcmV0dXJucyBSZWNvbW1lbmRhdGlvbkRhdGFcblx0ICovXG5cdHByaXZhdGUgZmV0Y2hGaWx0ZXJlZFJlY29tbWVuZGF0aW9uRGF0YShmaWx0ZXJlZFRhcmdldHM6IHN0cmluZ1tdKTogUmVjb21tZW5kYXRpb25JbmZvIHtcblx0XHRjb25zdCBmaWx0ZXJSZWNvbW1lbmRhdGlvbnNEYXRhOiBSZWNvbW1lbmRhdGlvbkluZm8gPSB7fTtcblx0XHRjb25zdCByZWNvbW1lbmRhdGlvbkRhdGEgPSB0aGlzLmdldFZpZXcoKS5nZXRNb2RlbChcImludGVybmFsXCIpPy5nZXRQcm9wZXJ0eShcIi9yZWNvbW1lbmRhdGlvbnNEYXRhXCIpO1xuXHRcdE9iamVjdC5rZXlzKHJlY29tbWVuZGF0aW9uRGF0YSkuZm9yRWFjaCgoa2V5OiBzdHJpbmcpID0+IHtcblx0XHRcdGlmIChmaWx0ZXJlZFRhcmdldHMuaW5jbHVkZXMoa2V5KSkge1xuXHRcdFx0XHRmaWx0ZXJSZWNvbW1lbmRhdGlvbnNEYXRhW2tleV0gPSBPYmplY3QuYXNzaWduKHJlY29tbWVuZGF0aW9uRGF0YVtrZXldLCB7fSk7XG5cdFx0XHR9XG5cdFx0fSk7XG5cdFx0cmV0dXJuIGZpbHRlclJlY29tbWVuZGF0aW9uc0RhdGE7XG5cdH1cblxuXHQvKipcblx0ICogRmV0Y2hlcyB0aGUgZmlsdGVyZWQgdGFyZ2V0cy5cblx0ICpcblx0ICogQHBhcmFtIGNvbnNpZGVyUmVjb21tZW5kYXRpb25Db250ZXh0cyBQYXNzZWQgYXMgdHJ1ZSB3aGVuIHJlY29tbWVuZGF0aW9uIGNvbnRleHRzIHNob3VsZCBiZSBjb25zaWRlcmVkIGluc3RlYWQgb2YgZGF0YVxuXHQgKiBAcmV0dXJucyBBcnJheSBvZiBGaWx0ZXJlZCB0YXJnZXRzXG5cdCAqL1xuXHRwcml2YXRlIGZldGNoVGFyZ2V0cyhjb25zaWRlclJlY29tbWVuZGF0aW9uQ29udGV4dHM/OiBib29sZWFuKTogc3RyaW5nW10ge1xuXHRcdGNvbnN0IHJlY29tbWVuZGF0aW9uRGF0YSA9IHRoaXMuZ2V0VmlldygpLmdldE1vZGVsKFwiaW50ZXJuYWxcIik/LmdldFByb3BlcnR5KFwiL3JlY29tbWVuZGF0aW9uc0RhdGFcIik7XG5cdFx0aWYgKHJlY29tbWVuZGF0aW9uRGF0YS52ZXJzaW9uID09PSBudWxsKSB7XG5cdFx0XHRyZXR1cm4gW107XG5cdFx0fVxuXHRcdGNvbnN0IGlzRmNsRW5hYmxlZCA9IHRoaXMuYmFzZS5nZXRBcHBDb21wb25lbnQoKS5faXNGY2xFbmFibGVkKCk7XG5cdFx0Y29uc3QgaXNGdWxsU2NyZWVuID0gaXNGY2xFbmFibGVkXG5cdFx0XHQ/ICh0aGlzLmJhc2UuZ2V0QXBwQ29tcG9uZW50KCkuZ2V0Um9vdFZpZXdDb250cm9sbGVyKCkgYXMgRmNsQ29udHJvbGxlcikuZ2V0SGVscGVyKCkuZ2V0Q3VycmVudFVJU3RhdGUoKS5pc0Z1bGxTY3JlZW5cblx0XHRcdDogdHJ1ZTtcblx0XHRjb25zdCBpc1JlY29tbWVuZGF0aW9uQWNjZXB0YWJsZSA9IChjb250ZXh0UGF0aDogc3RyaW5nLCBrZXk6IHN0cmluZyk6IGJvb2xlYW4gPT4ge1xuXHRcdFx0Y29uc3Qgc3BsaXRQYXRoQW5kQ2hlY2tJZlJlY29tbWVuZGF0aW9uQWNjZXB0YWJsZSA9IChjdHh0UGF0aDogc3RyaW5nKTogYm9vbGVhbiA9PiB7XG5cdFx0XHRcdGNvbnN0IHBhdGhBcnJheSA9IGtleS5zcGxpdChjdHh0UGF0aCk7XG5cdFx0XHRcdGNvbnN0IG5ld1BhdGggPSBwYXRoQXJyYXlbMV07XG5cdFx0XHRcdGxldCBuZXdQYXRoQXJyYXkgPSBuZXdQYXRoLnNwbGl0KFwiL1wiKTtcblx0XHRcdFx0Ly9oZXJlIHdlIGNoZWNrIHRoZSBwYXRoIGJ5IHNwbGl0dGluZyB0byBkZWNpZGUgd2hldGhlciB0byBpbmNsdWRlIHJlY29tbWVuZGF0aW9ucyBvciBub3QgaW4gZGlhbG9nXG5cdFx0XHRcdGlmIChuZXdQYXRoQXJyYXkubGVuZ3RoIDw9IDMpIHtcblx0XHRcdFx0XHRyZXR1cm4gdHJ1ZTtcblx0XHRcdFx0fSBlbHNlIHtcblx0XHRcdFx0XHRuZXdQYXRoQXJyYXkgPSBuZXdQYXRoQXJyYXkuc2xpY2UoMik7XG5cdFx0XHRcdFx0cmV0dXJuICFuZXdQYXRoQXJyYXkuc29tZSgodmFsdWU6IHN0cmluZykgPT4gdmFsdWUuaW5jbHVkZXMoXCIoXCIpKTtcblx0XHRcdFx0fVxuXHRcdFx0fTtcblx0XHRcdGlmIChpc0ZjbEVuYWJsZWQgJiYgIWlzRnVsbFNjcmVlbikge1xuXHRcdFx0XHRjb25zdCByaWdodE1vc3RDb250ZXh0ID0gKHRoaXMuYmFzZS5nZXRBcHBDb21wb25lbnQoKS5nZXRSb290Vmlld0NvbnRyb2xsZXIoKSBhcyBGY2xDb250cm9sbGVyKS5nZXRSaWdodG1vc3RDb250ZXh0KCk7XG5cdFx0XHRcdGlmIChrZXkuaW5jbHVkZXMocmlnaHRNb3N0Q29udGV4dD8uZ2V0UGF0aCgpIGFzIHN0cmluZykpIHtcblx0XHRcdFx0XHRyZXR1cm4gc3BsaXRQYXRoQW5kQ2hlY2tJZlJlY29tbWVuZGF0aW9uQWNjZXB0YWJsZShyaWdodE1vc3RDb250ZXh0Py5nZXRQYXRoKCkgYXMgc3RyaW5nKTtcblx0XHRcdFx0fSBlbHNlIHtcblx0XHRcdFx0XHRyZXR1cm4gc3BsaXRQYXRoQW5kQ2hlY2tJZlJlY29tbWVuZGF0aW9uQWNjZXB0YWJsZShjb250ZXh0UGF0aCk7XG5cdFx0XHRcdH1cblx0XHRcdH0gZWxzZSB7XG5cdFx0XHRcdHJldHVybiBzcGxpdFBhdGhBbmRDaGVja0lmUmVjb21tZW5kYXRpb25BY2NlcHRhYmxlKGNvbnRleHRQYXRoKTtcblx0XHRcdH1cblx0XHR9O1xuXG5cdFx0Y29uc3QgZGF0YVRvQmVGaWx0ZXJlZCA9IHRoaXMuZmV0Y2hEYXRhVG9CZUZpbHRlcmVkKHJlY29tbWVuZGF0aW9uRGF0YSwgY29uc2lkZXJSZWNvbW1lbmRhdGlvbkNvbnRleHRzKTtcblx0XHRyZXR1cm4gKFxuXHRcdFx0ZGF0YVRvQmVGaWx0ZXJlZC5maWx0ZXIoKGtleTogc3RyaW5nKSA9PiB7XG5cdFx0XHRcdHJldHVybiAoXG5cdFx0XHRcdFx0a2V5LmluY2x1ZGVzKHRoaXMuZ2V0VmlldygpLmdldEJpbmRpbmdDb250ZXh0KCk/LmdldFBhdGgoKSBhcyBzdHJpbmcpICYmXG5cdFx0XHRcdFx0aXNSZWNvbW1lbmRhdGlvbkFjY2VwdGFibGUodGhpcy5nZXRWaWV3KCkuZ2V0QmluZGluZ0NvbnRleHQoKT8uZ2V0UGF0aCgpIGFzIHN0cmluZywga2V5KVxuXHRcdFx0XHQpO1xuXHRcdFx0fSkgfHwgW11cblx0XHQpO1xuXHR9XG5cblx0LyoqXG5cdCAqIEZldGNoZXMgdGhlIGRhdGEgdG8gYmUgZmlsdGVyZWQgZGVwZW5kaW5nIG9uIHRoZSByZWNvbW1lbmRhdGlvbkRhdGEuXG5cdCAqXG5cdCAqIEBwYXJhbSByZWNvbW1lbmRhdGlvbkRhdGFcblx0ICogQHBhcmFtIGNvbnNpZGVyUmVjb21tZW5kYXRpb25Db250ZXh0cyBQYXNzZWQgYXMgdHJ1ZSB3aGVuIHJlY29tbWVuZGF0aW9uIGNvbnRleHRzIHNob3VsZCBiZSBjb25zaWRlcmVkIGluc3RlYWQgb2YgZGF0YVxuXHQgKiBAcmV0dXJucyBBcnJheSBvZiBjb250ZXh0UGF0aHMgdG8gYmUgZmlsdGVyZWRcblx0ICovXG5cdHByaXZhdGUgZmV0Y2hEYXRhVG9CZUZpbHRlcmVkKHJlY29tbWVuZGF0aW9uRGF0YTogUmVjb21tZW5kYXRpb25JbmZvLCBjb25zaWRlclJlY29tbWVuZGF0aW9uQ29udGV4dHM6IGJvb2xlYW4gfCB1bmRlZmluZWQpOiBzdHJpbmdbXSB7XG5cdFx0bGV0IGRhdGFUb0JlRmlsdGVyZWQ6IHN0cmluZ1tdID0gW107XG5cdFx0Ly8gY29uc2lkZXIgcmVjb21tZW5kYXRpb25Db250ZXh0cyBmb3IgZmV0Y2hpbmcgdGhlIHBhdGhzIGluIGNhc2Ugb2YgZmllbGQgY2hhbmdlIHNvIHRoYXQgY29udGV4dHMgZm9yIHdoaWNoIGVtcHR5IHJlY29tbWVuZGF0aW9uIGRhdGEgaXMgcmV0dXJuZWQgYXJlIGFsc28gY29uc2lkZXJlZFxuXHRcdGlmIChjb25zaWRlclJlY29tbWVuZGF0aW9uQ29udGV4dHMpIHtcblx0XHRcdGNvbnN0IHJlY29tbWVuZGF0aW9uQ29udGV4dHMgPSB0aGlzLmdldFZpZXcoKS5nZXRNb2RlbChcImludGVybmFsXCIpPy5nZXRQcm9wZXJ0eShcIi9yZWNvbW1lbmRhdGlvbkNvbnRleHRzXCIpO1xuXHRcdFx0cmVjb21tZW5kYXRpb25Db250ZXh0cy5mb3JFYWNoKChyZWNvbW1lbmRhdGlvbkNvbnRleHQ6IFJlY29tbWVuZGF0aW9uQ29udGV4dHNJbmZvKSA9PiB7XG5cdFx0XHRcdGRhdGFUb0JlRmlsdGVyZWQucHVzaChyZWNvbW1lbmRhdGlvbkNvbnRleHQuY29udGV4dC5nZXRQYXRoKCkpO1xuXHRcdFx0fSk7XG5cdFx0fSBlbHNlIHtcblx0XHRcdC8vIGNvbnNpZGVyIHJlY29tbWVuZGF0aW9uRGF0YSBpbiBjYXNlIG9mIGFjY2VwdCBhbGwgZGlhbG9nIHNjZW5hcmlvc1xuXHRcdFx0ZGF0YVRvQmVGaWx0ZXJlZCA9IE9iamVjdC5rZXlzKHJlY29tbWVuZGF0aW9uRGF0YSkuZmlsdGVyKChrZXkpID0+IHtcblx0XHRcdFx0cmV0dXJuIGtleSAhPT0gXCJ2ZXJzaW9uXCIgJiYga2V5ICE9PSBcImtleXNcIjtcblx0XHRcdH0pO1xuXHRcdH1cblx0XHRyZXR1cm4gZGF0YVRvQmVGaWx0ZXJlZDtcblx0fVxuXG5cdC8qKlxuXHQgKiBPdmVyd3JpdGVzIEFjY2VwdEFsbCBQYXJhbXMgYmFzZWQgb2YgcmVjb21tZW5kYXRpb24gZGF0YSBhbmQgY29udGV4dHMuXG5cdCAqXG5cdCAqIEBwYXJhbSBmaWx0ZXJSZWNvbW1lbmRhdGlvbkRhdGFcblx0ICogQHBhcmFtIGZpbHRlclJlY29tbWVuZGF0aW9uQ29udGV4dHNcblx0ICogQHBhcmFtIHBhcmFtc1xuXHQgKi9cblx0cHJpdmF0ZSBhZGp1c3RBY2NlcHRBbGxQYXJhbXMoXG5cdFx0ZmlsdGVyUmVjb21tZW5kYXRpb25EYXRhOiBSZWNvbW1lbmRhdGlvbkluZm8sXG5cdFx0ZmlsdGVyUmVjb21tZW5kYXRpb25Db250ZXh0czogUmVjb21tZW5kYXRpb25Db250ZXh0c0luZm9bXSxcblx0XHRwYXJhbXM6IEFjY2VwdEFsbFBhcmFtc1xuXHQpOiB2b2lkIHtcblx0XHRwYXJhbXMucmVjb21tZW5kYXRpb25EYXRhID0gW107XG5cdFx0Zm9yIChjb25zdCBrZXkgaW4gZmlsdGVyUmVjb21tZW5kYXRpb25EYXRhKSB7XG5cdFx0XHRpZiAoZmlsdGVyUmVjb21tZW5kYXRpb25EYXRhW2tleV0udmFsdWUgfHwgZmlsdGVyUmVjb21tZW5kYXRpb25EYXRhW2tleV0udGV4dCkge1xuXHRcdFx0XHQvLyBJbiBjYXNlIHRoZXJlIGlzIG5vIHBsYWNlaG9sZGVyIHZhbHVlIG9yIHBsYWNlaG9sZGVyIHRleHQgdGhlbiB0aGlzIHJlY29tbWVuZGF0aW9uIGlzIG5vdCByZWxldmFudCBmb3IgQWNjZXB0LlxuXHRcdFx0XHQvLyBVc2VyIG5lZWRzIHRvIG1hbnVhbGx5IHNlbGVjdCB0aGUgcmVjb21tZW5kZWQgdmFsdWUgaW4gdGhlc2UgY2FzZXMgJiB0aGVyZWZvcmUgZmlsdGVyIHRoZSBzYW1lLlxuXHRcdFx0XHRjb25zdCBjb250ZXh0UGF0aEZyb21LZXkgPSBrZXkuc3Vic3RyaW5nKDAsIGtleS5sYXN0SW5kZXhPZihcIilcIikgKyAxKTtcblx0XHRcdFx0Y29uc3QgcHJvcGVydHlQYXRoRnJvbUtleSA9IGtleS5zdWJzdHJpbmcoa2V5Lmxhc3RJbmRleE9mKFwiKVwiKSArIDIpO1xuXHRcdFx0XHRjb25zdCBtYXRjaGluZ0NvbnRleHQgPSBmaWx0ZXJSZWNvbW1lbmRhdGlvbkNvbnRleHRzLmZpbHRlcihmdW5jdGlvbiAoY29udGV4dEluZm8pIHtcblx0XHRcdFx0XHRpZiAoY29udGV4dEluZm8uY29udGV4dC5nZXRQYXRoKCkgPT09IGNvbnRleHRQYXRoRnJvbUtleSkge1xuXHRcdFx0XHRcdFx0cmV0dXJuIHRydWU7XG5cdFx0XHRcdFx0fVxuXHRcdFx0XHR9KTtcblx0XHRcdFx0aWYgKFxuXHRcdFx0XHRcdG1hdGNoaW5nQ29udGV4dD8ubGVuZ3RoID4gMCAmJlxuXHRcdFx0XHRcdHN0YW5kYXJkUmVjb21tZW5kYXRpb25IZWxwZXIuaXNSZWNvbW1lbmRhdGlvbkZpZWxkTnVsbChtYXRjaGluZ0NvbnRleHRbMF0uY29udGV4dCwga2V5LCBwcm9wZXJ0eVBhdGhGcm9tS2V5KVxuXHRcdFx0XHQpIHtcblx0XHRcdFx0XHRwYXJhbXMucmVjb21tZW5kYXRpb25EYXRhLnB1c2goe1xuXHRcdFx0XHRcdFx0Y29udGV4dDogbWF0Y2hpbmdDb250ZXh0WzBdLmNvbnRleHQsXG5cdFx0XHRcdFx0XHRjb250ZXh0SWRlbnRpZmllcjogbWF0Y2hpbmdDb250ZXh0WzBdLmNvbnRleHRJZGVudGlmaWVyLFxuXHRcdFx0XHRcdFx0cHJvcGVydHlQYXRoOiBwcm9wZXJ0eVBhdGhGcm9tS2V5LFxuXHRcdFx0XHRcdFx0dmFsdWU6IGZpbHRlclJlY29tbWVuZGF0aW9uRGF0YVtrZXldLnZhbHVlLFxuXHRcdFx0XHRcdFx0dGV4dDogZmlsdGVyUmVjb21tZW5kYXRpb25EYXRhW2tleV0udGV4dFxuXHRcdFx0XHRcdH0pO1xuXHRcdFx0XHR9XG5cdFx0XHR9XG5cdFx0fVxuXHR9XG5cblx0LyoqXG5cdCAqIEZldGNoZXMgUmVjb21tZW5kYXRpb25JbmZvIHRoYXQgY29udGFpbnMgdGFyZ2V0cywgZmlsdGVyUmVjb21tZW5kYXRpb25EYXRhLCBmaWx0ZXJSZWNvbW1lbmRhdGlvbkNvbnRleHRzLlxuXHQgKlxuXHQgKiBAcmV0dXJucyBQcm9taXNlIHdoaWNoIHJlc29sdmVzIHdpdGggQWNjZXB0YWxsUGFyYW1zXG5cdCAqL1xuXHRwdWJsaWMgYXN5bmMgZmV0Y2hBY2NlcHRBbGxQYXJhbXMoKTogUHJvbWlzZTxBY2NlcHRBbGxQYXJhbXM+IHtcblx0XHRjb25zdCB0YXJnZXRzOiBzdHJpbmdbXSA9IHRoaXMuZmV0Y2hUYXJnZXRzKCk7XG5cdFx0Y29uc3QgZmlsdGVyUmVjb21tZW5kYXRpb25EYXRhID0gdGhpcy5mZXRjaEZpbHRlcmVkUmVjb21tZW5kYXRpb25EYXRhKHRhcmdldHMpO1xuXHRcdGNvbnN0IGZpbHRlclJlY29tbWVuZGF0aW9uQ29udGV4dHMgPSB0aGlzLmZldGNoRmlsdGVyZWRSZWNvbW1lbmRhdGlvbkNvbnRleHRzKHRhcmdldHMpO1xuXHRcdGNvbnN0IHBhcmFtcyA9IHt9O1xuXHRcdHRoaXMuYWRqdXN0QWNjZXB0QWxsUGFyYW1zKGZpbHRlclJlY29tbWVuZGF0aW9uRGF0YSwgZmlsdGVyUmVjb21tZW5kYXRpb25Db250ZXh0cywgcGFyYW1zKTtcblx0XHRhd2FpdCAodGhpcy5nZXRWaWV3KCkuZ2V0Q29udHJvbGxlcigpIGFzIFBhZ2VDb250cm9sbGVyKS5yZWNvbW1lbmRhdGlvbnMub25CZWZvcmVBY2NlcHRSZWNvbW1lbmRhdGlvbnMocGFyYW1zKTtcblx0XHRzdGFuZGFyZFJlY29tbWVuZGF0aW9uSGVscGVyLmFkZENvbnRleHRJZGVudGlmaWVyVGV4dChwYXJhbXMsIHRoaXMuZ2V0VmlldygpPy5nZXRCaW5kaW5nQ29udGV4dCgpPy5nZXRQYXRoKCkpO1xuXHRcdHRoaXMuZGF0YVRvQmVBY2NlcHRlZCA9IChwYXJhbXMgYXMgQWNjZXB0QWxsUGFyYW1zKS5yZWNvbW1lbmRhdGlvbkRhdGEgfHwgW107XG5cdFx0cmV0dXJuIHBhcmFtcztcblx0fVxuXG5cdC8qKlxuXHQgKiBDaGVja3MgaWYgcmVjb21tZW5kYXRpb25zIGV4aXN0IG9yIG5vdC5cblx0ICpcblx0ICogQHJldHVybnMgQm9vbGVhbiB2YWx1ZSBiYXNlZCBvbiB3aGV0aGVyIHJlY29tbWVuZGF0aW9ucyBhcmUgcHJlc2VudCBvciBub3Rcblx0ICovXG5cdHB1YmxpYyBjaGVja0lmUmVjb21tZW5kYXRpb25zRXhpc3QoKTogYm9vbGVhbiB7XG5cdFx0Y29uc3QgcmVjb21tZW5kYXRpb25EYXRhID0gdGhpcy5pbnRlcm5hbE1vZGVsLmdldFByb3BlcnR5KFwiL3JlY29tbWVuZGF0aW9uc0RhdGFcIikgfHwge307XG5cdFx0cmV0dXJuIE9iamVjdC5rZXlzKHJlY29tbWVuZGF0aW9uRGF0YSkubGVuZ3RoICE9PSAwO1xuXHR9XG5cblx0LyoqXG5cdCAqIFRoaXMgZnVuY3Rpb24gd2lsbCBjbGVhciByZWNvbW1lbmRhdGlvbiBEYXRhIGZvciBhIGdpdmVuIGNvbnRleHQgYW5kIGFsbCBpdHMgY2hpbGRyZW4uXG5cdCAqXG5cdCAqIEBwYXJhbSBjb250ZXh0cyBDb250ZXh0IGZvciB3aGljaCByZWNvbW1lbmRhdGlvbiBoYXMgdG8gYmUgY2xlYXJlZFxuXHQgKi9cblx0cHVibGljIGlnbm9yZVJlY29tbWVuZGF0aW9uRm9yQ29udGV4dHMoY29udGV4dHM/OiBPRGF0YVY0Q29udGV4dFtdKTogdm9pZCB7XG5cdFx0aWYgKCFjb250ZXh0cyB8fCAhY29udGV4dHMubGVuZ3RoKSB7XG5cdFx0XHRjb25zdCB2aWV3ID0gdGhpcy5nZXRWaWV3KCk7XG5cdFx0XHRjb25zdCBiaW5kaW5nQ29udGV4dCA9IHZpZXcuZ2V0QmluZGluZ0NvbnRleHQoKSBhcyBPRGF0YVY0Q29udGV4dDtcblx0XHRcdGNvbnRleHRzID0gW2JpbmRpbmdDb250ZXh0XTtcblx0XHR9XG5cdFx0c3RhbmRhcmRSZWNvbW1lbmRhdGlvbkhlbHBlci5pZ25vcmVSZWNvbW1lbmRhdGlvbkZvckNvbnRleHRzKGNvbnRleHRzLCB0aGlzLmludGVybmFsTW9kZWwpO1xuXHR9XG5cblx0cHJpdmF0ZSB0cnlSZXNldFJlY29tbWVuZGF0aW9ucyhyb290Q29udGV4dDogT0RhdGFWNENvbnRleHQpOiB2b2lkIHtcblx0XHRzdGFuZGFyZFJlY29tbWVuZGF0aW9uSGVscGVyLnNldEN1cnJlbnRSb290Q29udGV4dChyb290Q29udGV4dCk7XG5cdFx0Ly8gVE9ETzogU3RhbmRhcmRSZWNvbW1lbmRhdGlvbkhlbHBlciBzdG9yZXMgYWxsIHRoZSByZWNvbW1lbmRhdGlvbnMgZm9yIGFuIGluc3RhbmNlIG9mIGJ1c2luZXNzIG9iamVjdFxuXHRcdC8vIG1lYW5pbmcgZG9lc24ndCBtYXR0ZXIgdGhlIHJlY29tbWVuZGF0aW9ucyBhcmUgb24gdGhlIE9QL1N1Yk9QLiBCdXQgdGhlIHJlY29tbWVuZGF0aW9ucyBjb250ZXh0cyBoZXJlXG5cdFx0Ly8gaXMgc3BlY2lmaWMgdG8gdGhpcyBjb250cm9sbGVyLCBTdWJPUCBjb250cm9sbGVyIHdpbGwgaGF2ZSBpdHMgb3duIHJlY29tbWVuZGF0aW9uIGNvbnRleHRzLiBJZGVhbGx5IGl0XG5cdFx0Ly8gc2hvdWxkIGJlIGNsZWFyZWQgYnV0IHRoaXMgaXMgbm90IGRvbmUgaGVyZS4gVGhpcyBjb21wbGV0ZSB0aGluZyBuZWVkcyB0byBiZSByZWZhY3RvcmVkXG5cdFx0dGhpcy5pbnRlcm5hbE1vZGVsLnNldFByb3BlcnR5KFwiL3JlY29tbWVuZGF0aW9uQ29udGV4dHNcIiwgW10pO1xuXHRcdHN0YW5kYXJkUmVjb21tZW5kYXRpb25IZWxwZXIucmVzZXRSZWNvbW1lbmRhdGlvbnModGhpcy5pbnRlcm5hbE1vZGVsKTtcblx0fVxuXG5cdC8qKlxuXHQgKiBUaGlzIGZ1bmN0aW9uIHdpbGwgc3RvcmUgdGhlIG51bWJlciBvZiBmaWVsZHMgQWNjZXB0ZWQvSWdub3JlZCB3aGVuIFNhdmUgYnV0dG9uIGlzIGNsaWNrZWQsIGRlcGVuZGluZyBvbiB3aGljaCByZWNvbW1lZGF0aW9uIG9wdGlvbiB3YXMgY2hvb3NlbiBBY2NlcHQvSWdub3JlIGFuZCBTYXZlLlxuXHQgKlxuXHQgKiBAcGFyYW0gcmVjb21tZW5kYXRpb25PcHRpb25DaG9vc2VuXG5cdCAqL1xuXHRwdWJsaWMgYXN5bmMgc3RvcmVEYXRhRm9yVGVsZW1ldHJ5KHJlY29tbWVuZGF0aW9uT3B0aW9uQ2hvb3NlbjogdW5kZWZpbmVkIHwgUmVjb21tZW5kYXRpb25EaWFsb2dEZWNpc2lvbik6IFByb21pc2U8dm9pZD4ge1xuXHRcdGNvbnN0IHJvb3RDb250ZXh0ID0gYXdhaXQgdGhpcy5fZ2V0Um9vdENvbnRleHQodGhpcy5nZXRWaWV3KCkuZ2V0QmluZGluZ0NvbnRleHQoKSBhcyBPRGF0YVY0Q29udGV4dCk7XG5cdFx0aWYgKHJvb3RDb250ZXh0ICYmIHRoaXMuYmFzZS5yZWNvbW1lbmRhdGlvbnMuaXNFbmFibGVkKHJvb3RDb250ZXh0KSkge1xuXHRcdFx0aWYgKHJlY29tbWVuZGF0aW9uT3B0aW9uQ2hvb3NlbiA9PT0gUmVjb21tZW5kYXRpb25EaWFsb2dEZWNpc2lvbi5BY2NlcHQpIHtcblx0XHRcdFx0Ly8gaW5jcmVhc2UgYWNjZXB0IGNvdW50XG5cdFx0XHRcdHRoaXMudGVsZW1ldHJ5LnVwZGF0ZURhdGEoXCJudW1iZXJPZkZpZWxkc0FjY2VwdGVkVGhyb3VnaEFjY2VwdEJ1dHRvblwiLCB0aGlzLmRhdGFUb0JlQWNjZXB0ZWQubGVuZ3RoKTtcblx0XHRcdH0gZWxzZSBpZiAocmVjb21tZW5kYXRpb25PcHRpb25DaG9vc2VuID09PSBSZWNvbW1lbmRhdGlvbkRpYWxvZ0RlY2lzaW9uLklnbm9yZSkge1xuXHRcdFx0XHQvLyBpbmNyZWFzZSBpZ25vcmUgY291bnRcblx0XHRcdFx0dGhpcy50ZWxlbWV0cnkudXBkYXRlRGF0YShcIm51bWJlck9mRmllbGRzSWdub3JlZFRocm91Z2hJZ25vcmVCdXR0b25cIiwgdGhpcy5kYXRhVG9CZUFjY2VwdGVkLmxlbmd0aCk7XG5cdFx0XHR9XG5cdFx0XHR0aGlzLnRlbGVtZXRyeS5zdG9yZURhdGEodGhpcy5nZXRWaWV3KCkgYXMgRkVWaWV3KTtcblx0XHR9XG5cdH1cblxuXHQvKipcblx0ICogVGhpcyBmdW5jdGlvbiB3aWxsIHVwZGF0ZSB0aGUgY291bnQgYnkgMSBpbiB0ZWxlbWV0cnkgZGF0YS5cblx0ICpcblx0ICogQHBhcmFtIGtleVxuXHQgKi9cblx0cHVibGljIGluY3JlYXNlVGVsZW1ldHJ5RGF0YUNvdW50KGtleToga2V5b2YgUmVjb21tZW5kYXRpb25UZWxlbWV0cnkpOiB2b2lkIHtcblx0XHR0aGlzLnRlbGVtZXRyeS5pbmNyZWFzZUNvdW50KGtleSk7XG5cdH1cblxuXHQvKipcblx0ICogVGhpcyBmdW5jdGlvbiB3aWxsIHVwZGF0ZSB0ZWxlbWV0cnkgZGF0YSBmb3Igd2hpY2ggb3B0aW9uIHVzZXIgY2hvc2Ugd2hlbiBzZWxlY3RpbmcgYSBmaWVsZCB2YWx1ZSwgYXMgdG9wL25vbi10b3AgcmVjb21tZW5kYXRpb24gb3Igc29tZSBvdGhlciB2YWx1ZS5cblx0ICogQHBhcmFtIGZpZWxkUGF0aFxuXHQgKiBAcGFyYW0gc2VsZWN0ZWRWYWx1ZVxuXHQgKi9cblx0cHVibGljIHVwZGF0ZVRlbGVtZXRyeURhdGFCYXNlZE9uVXNlclNlbGVjdGlvbihmaWVsZFBhdGg6IHN0cmluZywgc2VsZWN0ZWRWYWx1ZTogc3RyaW5nKTogdm9pZCB7XG5cdFx0dGhpcy50ZWxlbWV0cnkudXBkYXRlVGVsZW1ldHJ5RGF0YUJhc2VkT25Vc2VyU2VsZWN0aW9uKHRoaXMuZ2V0VmlldygpLCBmaWVsZFBhdGgsIHNlbGVjdGVkVmFsdWUpO1xuXHR9XG5cblx0LyoqXG5cdCAqIFRoaXMgZnVuY3Rpb24gd2lsbCB1cGRhdGUgdGhlIHRvdGFsIG51bWJlciBvZiBmaWVsZHMgcmVjb21tZW5kZWQuIElmIHRoZSBmaWVsZCBpcyBhbHJlYWR5IGluY2x1ZGVkIGluIHRlbGVtZXRyeSBjb3VudCB0aGVuIHdlIGRvIG5vdCBpbmNsdWRlLlxuXHQgKiBUaGlzIHdheSB3ZSBrbm93IHRoZSB0b3RhbCBudW1iZXIgb2YgdW5pcXVlIGZpZWxkcyByZWNvbW1lbmRlZC5cblx0ICpcblx0ICogQHBhcmFtIHJlY29tbWVuZGF0aW9uRGF0YVxuXHQgKi9cblx0dXBkYXRlQWxsUmVjb21tZW5kZWRGaWVsZHMocmVjb21tZW5kYXRpb25EYXRhOiBTdGFuZGFyZFJlY29tbWVuZGF0aW9uUmVzcG9uc2VbXSk6IHZvaWQge1xuXHRcdGNvbnN0IHZpZXdCaW5kaW5nQ29udGV4dFBhdGggPSAodGhpcy5nZXRWaWV3KCkuZ2V0QmluZGluZ0NvbnRleHQoKSBhcyBDb250ZXh0KS5nZXRQYXRoKCk7XG5cdFx0Y29uc3QgbmV3UmVjb21tZW5kYXRpb25zRm9yQ3VycmVudENvbnRleHRzID0gcmVjb21tZW5kYXRpb25EYXRhLmZpbHRlcihcblx0XHRcdChyZXNwb25zZSkgPT4gcmVzcG9uc2VbXCJBSVJlY29tbWVuZGVkRmllbGRQYXRoXCJdPy5pbmNsdWRlcyh2aWV3QmluZGluZ0NvbnRleHRQYXRoKVxuXHRcdCk7XG5cdFx0aWYgKCF0aGlzLmFsbFJlY29tbWVuZGVkRmllbGRzKSB7XG5cdFx0XHR0aGlzLmFsbFJlY29tbWVuZGVkRmllbGRzID0gW107XG5cdFx0fVxuXHRcdG5ld1JlY29tbWVuZGF0aW9uc0ZvckN1cnJlbnRDb250ZXh0cy5mb3JFYWNoKChyZXNwb25zZSkgPT4ge1xuXHRcdFx0Y29uc3QgZmllbGRQYXRoID0gcmVzcG9uc2VbXCJBSVJlY29tbWVuZGVkRmllbGRQYXRoXCJdO1xuXHRcdFx0aWYgKGZpZWxkUGF0aCkge1xuXHRcdFx0XHRpZiAoIXRoaXMuYWxsUmVjb21tZW5kZWRGaWVsZHMuaW5jbHVkZXMoZmllbGRQYXRoKSkge1xuXHRcdFx0XHRcdHRoaXMuYWxsUmVjb21tZW5kZWRGaWVsZHMucHVzaChmaWVsZFBhdGgpO1xuXHRcdFx0XHRcdHRoaXMudGVsZW1ldHJ5LmluY3JlYXNlQ291bnQoXCJudW1iZXJPZlJlY29tbWVuZGVkRmllbGRzXCIpO1xuXHRcdFx0XHR9XG5cdFx0XHR9XG5cdFx0fSk7XG5cdH1cbn1cbiJdLCJtYXBwaW5ncyI6IjtBQUFBO0FBQUE7QUFBQTs7Ozs7Ozs7Ozs7Ozs7Ozs7TUFzQ3FCQSxlQUFlLFdBRG5DQyxjQUFjLENBQUMsa0RBQWtELENBQUMsVUFpQmpFQyxjQUFjLEVBQUUsVUFPaEJBLGNBQWMsQ0FBQyxVQUFVLENBQUMsVUErQjFCQyxlQUFlLEVBQUUsVUFlakJBLGVBQWUsRUFBRSxVQUNqQkMsVUFBVSxDQUFDQyxpQkFBaUIsQ0FBQ0MsT0FBTyxDQUFDLFVBV3JDSCxlQUFlLEVBQUUsVUFDakJJLGNBQWMsRUFBRSxVQWFoQkosZUFBZSxFQUFFLFdBQ2pCQyxVQUFVLENBQUNDLGlCQUFpQixDQUFDQyxPQUFPLENB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
515
+ //# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJuYW1lcyI6WyJSZWNvbW1lbmRhdGlvbnMiLCJkZWZpbmVVSTVDbGFzcyIsIm1ldGhvZE92ZXJyaWRlIiwicHVibGljRXh0ZW5zaW9uIiwiZXh0ZW5zaWJsZSIsIk92ZXJyaWRlRXhlY3V0aW9uIiwiSW5zdGVhZCIsImZpbmFsRXh0ZW5zaW9uIiwiZGF0YVRvQmVBY2NlcHRlZCIsIm9uSW5pdCIsInRlbGVtZXRyeSIsIlRlbGVtZXRyeSIsImFsbFJlY29tbWVuZGVkRmllbGRzIiwiaW50ZXJuYWxNb2RlbCIsImJhc2UiLCJnZXRWaWV3IiwiZ2V0TW9kZWwiLCJwcmV2aW91c0NvbnRleHQiLCJ1bmRlZmluZWQiLCJvbkFmdGVyQmluZGluZyIsImNvbnRleHQiLCJjdXJyZW50Q29udGV4dEJhc2VQYXRoIiwiZ2V0UGF0aCIsInNwbGl0IiwicHJldmlvdXNDb250ZXh0QmFzZVBhdGgiLCJyb290Q29udGV4dCIsImlzUmVjb21tZW5kYXRpb25FbmFibGVkIiwiZ2V0UHJvcGVydHkiLCJfZ2V0Um9vdENvbnRleHQiLCJyZWNvbW1lbmRhdGlvbnMiLCJpc0VuYWJsZWQiLCJzZXRQcm9wZXJ0eSIsImlzRmNsRW5hYmxlZCIsImdldEFwcENvbXBvbmVudCIsIl9pc0ZjbEVuYWJsZWQiLCJpc0Z1bGxTY3JlZW4iLCJnZXRSb290Vmlld0NvbnRyb2xsZXIiLCJnZXRIZWxwZXIiLCJnZXRDdXJyZW50VUlTdGF0ZSIsInRyeVJlc2V0UmVjb21tZW5kYXRpb25zIiwicmVzZXREYXRhIiwicHJvZ3JhbW1pbmdNb2RlbCIsIlRyYW5zYWN0aW9uSGVscGVyIiwiZ2V0UHJvZ3JhbW1pbmdNb2RlbCIsIkNvbW1vblV0aWxzIiwiY3JlYXRlUm9vdENvbnRleHQiLCJjbGVhclJlY29tbWVuZGF0aW9ucyIsImJpbmRpbmdDb250ZXh0IiwiZ2V0QmluZGluZ0NvbnRleHQiLCJyZWNvbW1lbmRhdGlvbkhlbHBlciIsIl9yb290Q29udGV4dCIsImZldGNoUmVjb21tZW5kYXRpb25zIiwiX2NvbnRleHQiLCJQcm9taXNlIiwicmVzb2x2ZSIsImZldGNoQW5kQXBwbHlSZWNvbW1lbmRhdGlvbnMiLCJjdXJyZW50Q29udGV4dHNJbmZvIiwiY29uc2lkZXJPbmx5TmV3Q29udGV4dCIsImlzU3VjY2VzcyIsInNpZGVFZmZlY3RzIiwiZ2V0U2lkZUVmZmVjdHNTZXJ2aWNlIiwicmVjb21tZW5kYXRpb25SZWdpc3RyeSIsImdldFJlY29tbWVuZGF0aW9uc01hcHBpbmciLCJmaWx0ZXJlZENvbnRleHRzSW5mbyIsImZpbHRlciIsImNvbnRleHRJbmZvIiwic3RhbmRhcmRSZWNvbW1lbmRhdGlvbkhlbHBlciIsImNoZWNrSWZSZWNvbW1lbmRhdGlvblJvbGVFeGlzdHNGb3JDb250ZXh0IiwiY29udGV4dHNJbmZvIiwiZ2V0Q29udGV4dHNXaXRoTm9SZWNvbW1lbmRhdGlvbnMiLCJjb250ZXh0cyIsIm1hcCIsImxlbmd0aCIsInN0YXJ0VGltZSIsInBlcmZvcm1hbmNlIiwibm93IiwicmVjb21tZW5kYXRpb25EYXRhIiwiZW5kVGltZSIsInVwZGF0ZVJlc3BvbnNlVGltZUluZm8iLCJ1cGRhdGVBbGxSZWNvbW1lbmRlZEZpZWxkcyIsInVwZGF0ZURhdGFGcm9tUmVjb21tZW5kYXRpb25SZXNwb25zZSIsImluY3JlYXNlQ291bnQiLCJhcHBseVJlY29tbWVuZGF0aW9uIiwiZSIsIkxvZyIsImVycm9yIiwic3RvcmVSZWNvbW1lbmRhdGlvbkNvbnRleHRzIiwiZmV0Y2hBbmRBcHBseVJlY29tbWVuZGF0aW9uc09uRmllbGRDaGFuZ2UiLCJmaWVsZCIsImFwcENvbXBvbmVudCIsImlzRmllbGRSZWNvbW1lbmRhdGlvblJlbGV2YW50IiwiY2hlY2tJZkZpZWxkSXNSZWNvbW1lbmRhdGlvblJlbGV2YW50IiwidGFyZ2V0cyIsImZldGNoVGFyZ2V0cyIsImZpbHRlcmVkUmVjb21tZW5kYXRpb25Db250ZXh0cyIsImZldGNoRmlsdGVyZWRSZWNvbW1lbmRhdGlvbkNvbnRleHRzIiwicmVjb21tZW5kYXRpb25Db250ZXh0IiwiZmlsdGVyZWRSZWNvbW1lbmRhdGlvbkNvbnRleHQiLCJpbmNsdWRlcyIsImNsZWFySWdub3JlZENvbnRleHRzIiwib25CZWZvcmVBY2NlcHRSZWNvbW1lbmRhdGlvbnMiLCJfcGFyYW1zIiwiYWNjZXB0UmVjb21tZW5kYXRpb25zIiwicmVjb21tZW5kYXRpb25SZXNwb25zZXMiLCJzdG9yZVJlY29tbWVuZGF0aW9ucyIsImNvbnRleHRQYXRocyIsInJlY29tbWVuZGF0aW9uQ29udGV4dHMiLCJmb3JFYWNoIiwicHVzaCIsImNvbnRleHRQYXRoIiwiaW5kZXgiLCJpbmRleE9mIiwiY29udGV4dElkZW50aWZpZXIiLCJrZXkiLCJjb250ZXh0UGF0aEZyb21LZXkiLCJzdWJzdHJpbmciLCJsYXN0SW5kZXhPZiIsImZldGNoRmlsdGVyZWRSZWNvbW1lbmRhdGlvbkRhdGEiLCJmaWx0ZXJlZFRhcmdldHMiLCJmaWx0ZXJSZWNvbW1lbmRhdGlvbnNEYXRhIiwiT2JqZWN0Iiwia2V5cyIsImFzc2lnbiIsImNvbnNpZGVyUmVjb21tZW5kYXRpb25Db250ZXh0cyIsInZlcnNpb24iLCJpc1JlY29tbWVuZGF0aW9uQWNjZXB0YWJsZSIsInNwbGl0UGF0aEFuZENoZWNrSWZSZWNvbW1lbmRhdGlvbkFjY2VwdGFibGUiLCJjdHh0UGF0aCIsInBhdGhBcnJheSIsIm5ld1BhdGgiLCJuZXdQYXRoQXJyYXkiLCJzbGljZSIsInNvbWUiLCJ2YWx1ZSIsInJpZ2h0TW9zdENvbnRleHQiLCJnZXRSaWdodG1vc3RDb250ZXh0IiwiZGF0YVRvQmVGaWx0ZXJlZCIsImZldGNoRGF0YVRvQmVGaWx0ZXJlZCIsImFkanVzdEFjY2VwdEFsbFBhcmFtcyIsImZpbHRlclJlY29tbWVuZGF0aW9uRGF0YSIsImZpbHRlclJlY29tbWVuZGF0aW9uQ29udGV4dHMiLCJwYXJhbXMiLCJ0ZXh0IiwicHJvcGVydHlQYXRoRnJvbUtleSIsIm1hdGNoaW5nQ29udGV4dCIsImlzUmVjb21tZW5kYXRpb25GaWVsZE51bGwiLCJwcm9wZXJ0eVBhdGgiLCJmZXRjaEFjY2VwdEFsbFBhcmFtcyIsImdldENvbnRyb2xsZXIiLCJhZGRDb250ZXh0SWRlbnRpZmllclRleHQiLCJjaGVja0lmUmVjb21tZW5kYXRpb25zRXhpc3QiLCJpZ25vcmVSZWNvbW1lbmRhdGlvbkZvckNvbnRleHRzIiwidmlldyIsInNldEN1cnJlbnRSb290Q29udGV4dCIsInJlc2V0UmVjb21tZW5kYXRpb25zIiwic3RvcmVEYXRhRm9yVGVsZW1ldHJ5IiwicmVjb21tZW5kYXRpb25PcHRpb25DaG9vc2VuIiwiUmVjb21tZW5kYXRpb25EaWFsb2dEZWNpc2lvbiIsIkFjY2VwdCIsInVwZGF0ZURhdGEiLCJJZ25vcmUiLCJzdG9yZURhdGEiLCJpbmNyZWFzZVRlbGVtZXRyeURhdGFDb3VudCIsInVwZGF0ZVRlbGVtZXRyeURhdGFCYXNlZE9uVXNlclNlbGVjdGlvbiIsImZpZWxkUGF0aCIsInNlbGVjdGVkVmFsdWUiLCJ2aWV3QmluZGluZ0NvbnRleHRQYXRoIiwibmV3UmVjb21tZW5kYXRpb25zRm9yQ3VycmVudENvbnRleHRzIiwicmVzcG9uc2UiLCJDb250cm9sbGVyRXh0ZW5zaW9uIl0sInNvdXJjZVJvb3QiOiIuIiwic291cmNlcyI6WyJSZWNvbW1lbmRhdGlvbnMudHMiXSwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IExvZyBmcm9tIFwic2FwL2Jhc2UvTG9nXCI7XG5pbXBvcnQgeyBkZWZpbmVVSTVDbGFzcywgZXh0ZW5zaWJsZSwgZmluYWxFeHRlbnNpb24sIG1ldGhvZE92ZXJyaWRlLCBwdWJsaWNFeHRlbnNpb24gfSBmcm9tIFwic2FwL2ZlL2Jhc2UvQ2xhc3NTdXBwb3J0XCI7XG5pbXBvcnQgdHlwZSBQYWdlQ29udHJvbGxlciBmcm9tIFwic2FwL2ZlL2NvcmUvUGFnZUNvbnRyb2xsZXJcIjtcbmltcG9ydCB7IHJlY29tbWVuZGF0aW9uSGVscGVyIH0gZnJvbSBcInNhcC9mZS9jb3JlL2hlbHBlcnMvUmVjb21tZW5kYXRpb25IZWxwZXJcIjtcbmltcG9ydCB0eXBlIHtcblx0UmVjb21tZW5kYXRpb25Db250ZXh0c0luZm8sXG5cdFJlY29tbWVuZGF0aW9uSW5mbyxcblx0U3RhbmRhcmRSZWNvbW1lbmRhdGlvblJlc3BvbnNlXG59IGZyb20gXCJzYXAvZmUvY29yZS9oZWxwZXJzL1N0YW5kYXJkUmVjb21tZW5kYXRpb25IZWxwZXJcIjtcbmltcG9ydCB7IHN0YW5kYXJkUmVjb21tZW5kYXRpb25IZWxwZXIgfSBmcm9tIFwic2FwL2ZlL2NvcmUvaGVscGVycy9TdGFuZGFyZFJlY29tbWVuZGF0aW9uSGVscGVyXCI7XG5pbXBvcnQgdHlwZSBDb250cm9sIGZyb20gXCJzYXAvdWkvY29yZS9Db250cm9sXCI7XG5pbXBvcnQgQ29udHJvbGxlckV4dGVuc2lvbiBmcm9tIFwic2FwL3VpL2NvcmUvbXZjL0NvbnRyb2xsZXJFeHRlbnNpb25cIjtcbmltcG9ydCBPdmVycmlkZUV4ZWN1dGlvbiBmcm9tIFwic2FwL3VpL2NvcmUvbXZjL092ZXJyaWRlRXhlY3V0aW9uXCI7XG5pbXBvcnQgdHlwZSBDb250ZXh0IGZyb20gXCJzYXAvdWkvbW9kZWwvQ29udGV4dFwiO1xuaW1wb3J0IHR5cGUgSlNPTk1vZGVsIGZyb20gXCJzYXAvdWkvbW9kZWwvanNvbi9KU09OTW9kZWxcIjtcbmltcG9ydCB0eXBlIHsgZGVmYXVsdCBhcyBPRGF0YVY0Q29udGV4dCB9IGZyb20gXCJzYXAvdWkvbW9kZWwvb2RhdGEvdjQvQ29udGV4dFwiO1xuaW1wb3J0IHR5cGUgeyBGRVZpZXcgfSBmcm9tIFwiLi4vQmFzZUNvbnRyb2xsZXJcIjtcbmltcG9ydCBDb21tb25VdGlscyBmcm9tIFwiLi4vQ29tbW9uVXRpbHNcIjtcbmltcG9ydCB0eXBlIEZjbENvbnRyb2xsZXIgZnJvbSBcIi4uL3Jvb3RWaWV3L0ZjbC5jb250cm9sbGVyXCI7XG5pbXBvcnQgVHJhbnNhY3Rpb25IZWxwZXIgZnJvbSBcIi4vZWRpdEZsb3cvVHJhbnNhY3Rpb25IZWxwZXJcIjtcblxuaW1wb3J0IHsgUmVjb21tZW5kYXRpb25EaWFsb2dEZWNpc2lvbiB9IGZyb20gXCIuLi9jb250cm9scy9SZWNvbW1lbmRhdGlvbnMvQ29uZmlybVJlY29tbWVuZGF0aW9uRGlhbG9nLmJsb2NrXCI7XG5pbXBvcnQgdHlwZSB7IFJlY29tbWVuZGF0aW9uVGVsZW1ldHJ5IH0gZnJvbSBcIi4uL3NlcnZpY2VzL1RlbGVtZXRyeVNlcnZpY2VGYWN0b3J5XCI7XG5pbXBvcnQgVGVsZW1ldHJ5IGZyb20gXCIuL3JlY29tbWVuZGF0aW9ucy9UZWxlbWV0cnlcIjtcblxuZXhwb3J0IHR5cGUgQWNjZXB0QWxsUGFyYW1zID0ge1xuXHRyZWNvbW1lbmRhdGlvbkRhdGE/OiBSZWNvbW1lbmRhdGlvbkRhdGFbXTtcbn07XG5cbmV4cG9ydCB0eXBlIFJlY29tbWVuZGF0aW9uRGF0YSA9IHtcblx0Y29udGV4dD86IE9EYXRhVjRDb250ZXh0O1xuXHRjb250ZXh0SWRlbnRpZmllcj86IHN0cmluZ1tdO1xuXHRjb250ZXh0SWRlbnRpZmllclRleHQ/OiBzdHJpbmdbXTtcblx0cHJvcGVydHlQYXRoPzogc3RyaW5nO1xuXHR2YWx1ZT86IHN0cmluZztcblx0dGV4dD86IHN0cmluZztcbn07XG5AZGVmaW5lVUk1Q2xhc3MoXCJzYXAuZmUuY29yZS5jb250cm9sbGVyZXh0ZW5zaW9ucy5SZWNvbW1lbmRhdGlvbnNcIilcbmV4cG9ydCBkZWZhdWx0IGNsYXNzIFJlY29tbWVuZGF0aW9ucyBleHRlbmRzIENvbnRyb2xsZXJFeHRlbnNpb24ge1xuXHRiYXNlITogUGFnZUNvbnRyb2xsZXI7XG5cblx0cmVjb21tZW5kYXRpb25Db250ZXh0cyE6IFJlY29tbWVuZGF0aW9uQ29udGV4dHNJbmZvW107XG5cblx0cm9vdENvbnRleHQhOiBDb250ZXh0IHwgdW5kZWZpbmVkO1xuXG5cdGludGVybmFsTW9kZWwhOiBKU09OTW9kZWw7XG5cblx0dGVsZW1ldHJ5ITogVGVsZW1ldHJ5O1xuXG5cdGFsbFJlY29tbWVuZGVkRmllbGRzITogc3RyaW5nW107XG5cblx0Ly8gdGhlIGRhdGEgc2hvd24gaW4gQWNjZXB0L0lnbm9yZSBkaWFsb2cgb2YgUmVjb21tZW5kYXRpb25zXG5cdGRhdGFUb0JlQWNjZXB0ZWQ6IFJlY29tbWVuZGF0aW9uRGF0YVtdID0gW107XG5cblx0cHJldmlvdXNDb250ZXh0OiBDb250ZXh0IHwgbnVsbCB8IHVuZGVmaW5lZDtcblxuXHRjb25zdHJ1Y3RvcigpIHtcblx0XHRzdXBlcigpO1xuXHR9XG5cblx0QG1ldGhvZE92ZXJyaWRlKClcblx0b25Jbml0KCk6IHZvaWQge1xuXHRcdHRoaXMudGVsZW1ldHJ5ID0gbmV3IFRlbGVtZXRyeSgpO1xuXHRcdHRoaXMuYWxsUmVjb21tZW5kZWRGaWVsZHMgPSBbXTtcblx0XHR0aGlzLmludGVybmFsTW9kZWwgPSB0aGlzLmJhc2UuZ2V0VmlldygpLmdldE1vZGVsKFwiaW50ZXJuYWxcIik7XG5cdFx0dGhpcy5wcmV2aW91c0NvbnRleHQgPSB1bmRlZmluZWQ7XG5cdH1cblxuXHRAbWV0aG9kT3ZlcnJpZGUoXCJfcm91dGluZ1wiKVxuXHRhc3luYyBvbkFmdGVyQmluZGluZyhjb250ZXh0OiBDb250ZXh0IHwgbnVsbCk6IFByb21pc2U8dm9pZD4ge1xuXHRcdGlmIChjb250ZXh0KSB7XG5cdFx0XHRjb25zdCBjdXJyZW50Q29udGV4dEJhc2VQYXRoID0gY29udGV4dC5nZXRQYXRoKCkuc3BsaXQoXCIvXCIpWzFdO1xuXHRcdFx0Y29uc3QgcHJldmlvdXNDb250ZXh0QmFzZVBhdGggPSB0aGlzLnByZXZpb3VzQ29udGV4dD8uZ2V0UGF0aCgpLnNwbGl0KFwiL1wiKVsxXTtcblx0XHRcdC8vXHRjb25zb2xlLmxvZygnY3VycmVudDo6JywgY3VycmVudENvbnRleHRCYXNlUGF0aCk7XG5cdFx0XHQvL1x0Y29uc29sZS5sb2coJ3ByZXZpb3VzJywgcHJldmlvdXNDb250ZXh0QmFzZVBhdGgpO1xuXHRcdFx0dGhpcy5yb290Q29udGV4dCA9IHVuZGVmaW5lZDtcblx0XHRcdC8vIHVzZSBpbnRlcm5hbCBtb2RlbCBiZWNhdXNlIHdlIGhhdmUgdG8gdXNlIHRoaXMgaW5mb3JtYXRpb24gYWNyb3NzIHRoZSBhcHBsaWNhdGlvbiBmb3IgZGlmZmVyZW50IGluc3RhbmNlcy5cblx0XHRcdGxldCBpc1JlY29tbWVuZGF0aW9uRW5hYmxlZCA9IHRoaXMuaW50ZXJuYWxNb2RlbC5nZXRQcm9wZXJ0eShcIi9pc1JlY29tbWVuZGF0aW9uRW5hYmxlZFwiKTtcblx0XHRcdC8vIG9uQWZ0ZXIgYmluZGluZyBpcyBjYWxsZWQgZm9yIGFsbCBjb250ZXh0c1xuXHRcdFx0Ly8gYnV0IHdlIGRvIG5vdCBuZWVkIHRvIGNhbGwgdGhlIGlzRW5hYmxlZCBob29rIGFsbCB0aGUgdGltZVxuXHRcdFx0Ly8gc28gY2hlY2sgaWYgcmVjb21tZW5kYXRpb24gZW5hYmxlZCBpcyBhbHJlYWR5IGF2YWlsYWJsZVxuXHRcdFx0dGhpcy5wcmV2aW91c0NvbnRleHQgPSBjb250ZXh0O1xuXHRcdFx0Y29uc3Qgcm9vdENvbnRleHQgPSBhd2FpdCB0aGlzLl9nZXRSb290Q29udGV4dChjb250ZXh0IGFzIE9EYXRhVjRDb250ZXh0KTtcblx0XHRcdGlmIChyb290Q29udGV4dCkge1xuXHRcdFx0XHRpZiAoaXNSZWNvbW1lbmRhdGlvbkVuYWJsZWQgPT09IHVuZGVmaW5lZCkge1xuXHRcdFx0XHRcdGlzUmVjb21tZW5kYXRpb25FbmFibGVkID0gdGhpcy5iYXNlLnJlY29tbWVuZGF0aW9ucy5pc0VuYWJsZWQocm9vdENvbnRleHQpO1xuXHRcdFx0XHRcdHRoaXMuaW50ZXJuYWxNb2RlbC5zZXRQcm9wZXJ0eShcIi9pc1JlY29tbWVuZGF0aW9uRW5hYmxlZFwiLCBpc1JlY29tbWVuZGF0aW9uRW5hYmxlZCk7XG5cdFx0XHRcdH1cblx0XHRcdFx0Ly9cdGlmKCF0aGlzLnByZXZpb3VzQ29udGV4dCkge1xuXG5cdFx0XHRcdC8vXHR9XG5cdFx0XHRcdGNvbnN0IGlzRmNsRW5hYmxlZCA9IHRoaXMuYmFzZS5nZXRBcHBDb21wb25lbnQoKS5faXNGY2xFbmFibGVkKCk7XG5cdFx0XHRcdGNvbnN0IGlzRnVsbFNjcmVlbiA9IGlzRmNsRW5hYmxlZFxuXHRcdFx0XHRcdD8gKHRoaXMuYmFzZS5nZXRBcHBDb21wb25lbnQoKS5nZXRSb290Vmlld0NvbnRyb2xsZXIoKSBhcyBGY2xDb250cm9sbGVyKS5nZXRIZWxwZXIoKS5nZXRDdXJyZW50VUlTdGF0ZSgpLmlzRnVsbFNjcmVlblxuXHRcdFx0XHRcdDogdHJ1ZTtcblx0XHRcdFx0aWYgKGN1cnJlbnRDb250ZXh0QmFzZVBhdGggIT09IHByZXZpb3VzQ29udGV4dEJhc2VQYXRoKSB7XG5cdFx0XHRcdFx0Ly8gZGlmZmVyZW50IGNvbnRleHRzLyBPUFxuXHRcdFx0XHRcdC8vXHRjb25zb2xlLmxvZyhcInJ1biByZXNldCBsb2dpY1wiKVxuXHRcdFx0XHRcdHRoaXMudHJ5UmVzZXRSZWNvbW1lbmRhdGlvbnMocm9vdENvbnRleHQgYXMgT0RhdGFWNENvbnRleHQpO1xuXHRcdFx0XHRcdHRoaXMudGVsZW1ldHJ5LnJlc2V0RGF0YSgpO1xuXHRcdFx0XHR9XG5cdFx0XHRcdGlmIChpc0ZjbEVuYWJsZWQgJiYgIWlzRnVsbFNjcmVlbikge1xuXHRcdFx0XHRcdHJldHVybjtcblx0XHRcdFx0fVxuXHRcdFx0fVxuXHRcdH1cblx0fVxuXG5cdHByaXZhdGUgYXN5bmMgX2dldFJvb3RDb250ZXh0KGNvbnRleHQ6IE9EYXRhVjRDb250ZXh0KTogUHJvbWlzZTxDb250ZXh0IHwgdW5kZWZpbmVkPiB7XG5cdFx0Y29uc3QgcHJvZ3JhbW1pbmdNb2RlbCA9IFRyYW5zYWN0aW9uSGVscGVyLmdldFByb2dyYW1taW5nTW9kZWwoY29udGV4dCk7XG5cdFx0cmV0dXJuIENvbW1vblV0aWxzLmNyZWF0ZVJvb3RDb250ZXh0KHByb2dyYW1taW5nTW9kZWwsIHRoaXMuYmFzZS5nZXRWaWV3KCksIHRoaXMuYmFzZS5nZXRBcHBDb21wb25lbnQoKSk7XG5cdH1cblxuXHQvKipcblx0ICogQ2xlYXIgYWxsIHJlY29tbWVuZGF0aW9ucyBjdXJyZW50bHkgYXZhaWxhYmxlIG9uIHRoZSBVSS5cblx0ICpcblx0ICogQHB1YmxpY1xuXHQgKi9cblx0QHB1YmxpY0V4dGVuc2lvbigpXG5cdHB1YmxpYyBjbGVhclJlY29tbWVuZGF0aW9ucygpOiB2b2lkIHtcblx0XHRjb25zdCBiaW5kaW5nQ29udGV4dCA9IHRoaXMuZ2V0VmlldygpLmdldEJpbmRpbmdDb250ZXh0KCk7XG5cdFx0aWYgKGJpbmRpbmdDb250ZXh0KSB7XG5cdFx0XHRyZWNvbW1lbmRhdGlvbkhlbHBlci5jbGVhclJlY29tbWVuZGF0aW9ucyh0aGlzLmJhc2UuZ2V0VmlldygpLCBiaW5kaW5nQ29udGV4dCk7XG5cdFx0fVxuXHR9XG5cblx0LyoqXG5cdCAqIENoZWNrIGlmIHJlY29tbWVuZGF0aW9ucyBhcmUgZW5hYmxlZCBvciBub3QuXG5cdCAqXG5cdCAqIEBwYXJhbSBfcm9vdENvbnRleHQgVGhlIHJvb3QgZW50aXR5IGNvbnRleHRcblx0ICogQHJldHVybnMgVHJ1ZSBpZiByZWNvbW1lbmRhdGlvbiBpcyBlbmFibGVkLiBGYWxzZSBpZiByZWNvbW1lbmRhdGlvbiBpcyBkaXNhYmxlZC5cblx0ICogQHB1YmxpY1xuXHQgKi9cblx0QHB1YmxpY0V4dGVuc2lvbigpXG5cdEBleHRlbnNpYmxlKE92ZXJyaWRlRXhlY3V0aW9uLkluc3RlYWQpXG5cdHB1YmxpYyBpc0VuYWJsZWQoX3Jvb3RDb250ZXh0OiBDb250ZXh0KTogYm9vbGVhbiB7XG5cdFx0cmV0dXJuIGZhbHNlO1xuXHR9XG5cblx0LyoqXG5cdCAqIE1ldGhvZCByZXR1cm5zIGEgYm9vbGVhbiB2YWx1ZSBpbmRpY2F0aW5nIHJlY29tbWVuZGF0aW9uIGlzIGVuYWJsZWQgb3Igbm90LiBJbiBjYXNlIGNhbGxlZCBiZWZvcmVcblx0ICogdGhlIGVuYWJsZW1lbnQgY2hlY2sgaXMgY29tcGxldGVkLCBtZXRob2Qgd2lsbCByZXR1cm4gZmFsc2Ugd2hpY2ggaXMgdGhlIGRlZmF1bHQgdmFsdWUuXG5cdCAqXG5cdCAqIEByZXR1cm5zIFRydWUgaWYgcmVjb21tZW5kYXRpb24gaXMgZW5hYmxlZCBlbHNlIGZhbHNlLlxuXHQgKi9cblx0QHB1YmxpY0V4dGVuc2lvbigpXG5cdEBmaW5hbEV4dGVuc2lvbigpXG5cdHB1YmxpYyBpc1JlY29tbWVuZGF0aW9uRW5hYmxlZCgpOiBib29sZWFuIHtcblx0XHRyZXR1cm4gISF0aGlzLmludGVybmFsTW9kZWw/LmdldFByb3BlcnR5KFwiL2lzUmVjb21tZW5kYXRpb25FbmFibGVkXCIpO1xuXHR9XG5cblx0LyoqXG5cdCAqIEZldGNoIHRoZSByZWNvbW1lbmRhdGlvbiBmb3IgYSBzcGVjaWZpYyBjb250ZXh0LlxuXHQgKlxuXHQgKiBAcGFyYW0gX2NvbnRleHQgVGhlIGNvbnRleHQgdGhhdCBzaGFsbCBiZSBjb25zaWRlcmVkIHdoZW4gZmV0Y2hpbmcgcmVjb21tZW5kYXRpb25zXG5cdCAqIEBwYXJhbSBfcm9vdENvbnRleHQgVGhlIHJvb3QgZW50aXR5IGNvbnRleHRcblx0ICogQHJldHVybnMgVGhlIHJlY29tbWVuZGF0aW9uIGVudHJpZXNcblx0ICogQHB1YmxpY1xuXHQgKi9cblx0QHB1YmxpY0V4dGVuc2lvbigpXG5cdEBleHRlbnNpYmxlKE92ZXJyaWRlRXhlY3V0aW9uLkluc3RlYWQpXG5cdHB1YmxpYyBhc3luYyBmZXRjaFJlY29tbWVuZGF0aW9ucyhfY29udGV4dDogT0RhdGFWNENvbnRleHRbXSwgX3Jvb3RDb250ZXh0PzogQ29udGV4dCk6IFByb21pc2U8U3RhbmRhcmRSZWNvbW1lbmRhdGlvblJlc3BvbnNlW10+IHtcblx0XHRyZXR1cm4gUHJvbWlzZS5yZXNvbHZlKFtdKTtcblx0fVxuXG5cdC8qKlxuXHQgKiBGZXRjaCB0aGUgcmVjb21tZW5kYXRpb25zIGFuZCBhcHBseSB0aGVtIG9uIHRoZSBVSS5cblx0ICpcblx0ICogQHBhcmFtIGN1cnJlbnRDb250ZXh0c0luZm8gQ29udGV4dHMgSW5mbyB0aGF0IGNvbnRhaW5zIHRoZSBjb250ZXh0IHRoYXQgc2hhbGwgYmUgY29uc2lkZXJlZCB3aGVuIGZldGNoaW5nIHJlY29tbWVuZGF0aW9ucyBhbG9uZyB3aXRoIGNvbnRleHRJZGVudGlmaWVyXG5cdCAqIEBwYXJhbSBjb25zaWRlck9ubHlOZXdDb250ZXh0IEJvb2xlYW4gcHJvcGVydHkgaW5kaWNhdGluZyBSZWNvbW1lbmRhdGlvblxuXHQgKiBzaG91bGQgYmUgZmV0Y2hlZCBvbmx5IGZvciBuZXcgY29udGV4dHMgd2l0aCBubyByZWNvbW1lbmRhdGlvbiBmZXRjaCBjYWxsXG5cdCAqIEByZXR1cm5zIGB0cnVlYCBpZiB0aGUgcmVjb21tZW5kYXRpb25zIHdlcmUgZmV0Y2hlZCBhbmQgYXBwbGllZCBjb3JyZWN0bHlcblx0ICovXG5cdEBwdWJsaWNFeHRlbnNpb24oKVxuXHRwdWJsaWMgYXN5bmMgZmV0Y2hBbmRBcHBseVJlY29tbWVuZGF0aW9ucyhcblx0XHRjdXJyZW50Q29udGV4dHNJbmZvOiBSZWNvbW1lbmRhdGlvbkNvbnRleHRzSW5mb1tdLFxuXHRcdGNvbnNpZGVyT25seU5ld0NvbnRleHQ/OiBib29sZWFuXG5cdCk6IFByb21pc2U8Ym9vbGVhbj4ge1xuXHRcdGxldCBpc1N1Y2Nlc3MgPSBmYWxzZTtcblx0XHRjb25zdCBzaWRlRWZmZWN0cyA9IHRoaXMuYmFzZS5nZXRBcHBDb21wb25lbnQoKS5nZXRTaWRlRWZmZWN0c1NlcnZpY2UoKTtcblx0XHRjb25zdCByZWNvbW1lbmRhdGlvblJlZ2lzdHJ5ID0gc2lkZUVmZmVjdHMuZ2V0UmVjb21tZW5kYXRpb25zTWFwcGluZygpO1xuXHRcdGNvbnN0IGZpbHRlcmVkQ29udGV4dHNJbmZvID0gY3VycmVudENvbnRleHRzSW5mby5maWx0ZXIoKGNvbnRleHRJbmZvOiBSZWNvbW1lbmRhdGlvbkNvbnRleHRzSW5mbykgPT4ge1xuXHRcdFx0cmV0dXJuIHN0YW5kYXJkUmVjb21tZW5kYXRpb25IZWxwZXIuY2hlY2tJZlJlY29tbWVuZGF0aW9uUm9sZUV4aXN0c0ZvckNvbnRleHQoY29udGV4dEluZm8sIHJlY29tbWVuZGF0aW9uUmVnaXN0cnkpO1xuXHRcdH0pO1xuXHRcdGlmICh0aGlzLmlzUmVjb21tZW5kYXRpb25FbmFibGVkKCkpIHtcblx0XHRcdGNvbnN0IGNvbnRleHRzSW5mbzogUmVjb21tZW5kYXRpb25Db250ZXh0c0luZm9bXSA9IGNvbnNpZGVyT25seU5ld0NvbnRleHRcblx0XHRcdFx0PyBzdGFuZGFyZFJlY29tbWVuZGF0aW9uSGVscGVyLmdldENvbnRleHRzV2l0aE5vUmVjb21tZW5kYXRpb25zKGZpbHRlcmVkQ29udGV4dHNJbmZvLCB0aGlzLmludGVybmFsTW9kZWwpXG5cdFx0XHRcdDogZmlsdGVyZWRDb250ZXh0c0luZm87XG5cdFx0XHRjb25zdCBjb250ZXh0czogT0RhdGFWNENvbnRleHRbXSA9IGNvbnRleHRzSW5mby5tYXAoKGNvbnRleHRJbmZvOiBSZWNvbW1lbmRhdGlvbkNvbnRleHRzSW5mbykgPT4gY29udGV4dEluZm8uY29udGV4dCk7XG5cdFx0XHRpZiAoY29udGV4dHMgJiYgY29udGV4dHMubGVuZ3RoID4gMCkge1xuXHRcdFx0XHR0cnkge1xuXHRcdFx0XHRcdGNvbnN0IHJvb3RDb250ZXh0ID0gYXdhaXQgdGhpcy5fZ2V0Um9vdENvbnRleHQoY29udGV4dHNbMF0pO1xuXHRcdFx0XHRcdGNvbnN0IHN0YXJ0VGltZSA9IHBlcmZvcm1hbmNlLm5vdygpO1xuXHRcdFx0XHRcdGNvbnN0IHJlY29tbWVuZGF0aW9uRGF0YSA9IGF3YWl0IHRoaXMuYmFzZS5yZWNvbW1lbmRhdGlvbnMuZmV0Y2hSZWNvbW1lbmRhdGlvbnMoY29udGV4dHMsIHJvb3RDb250ZXh0KTtcblx0XHRcdFx0XHRjb25zdCBlbmRUaW1lID0gcGVyZm9ybWFuY2Uubm93KCk7XG5cdFx0XHRcdFx0dGhpcy50ZWxlbWV0cnkudXBkYXRlUmVzcG9uc2VUaW1lSW5mbyhlbmRUaW1lIC0gc3RhcnRUaW1lKTtcblx0XHRcdFx0XHRpZiAocmVjb21tZW5kYXRpb25EYXRhPy5sZW5ndGgpIHtcblx0XHRcdFx0XHRcdHRoaXMudXBkYXRlQWxsUmVjb21tZW5kZWRGaWVsZHMocmVjb21tZW5kYXRpb25EYXRhKTtcblx0XHRcdFx0XHRcdHRoaXMudGVsZW1ldHJ5LnVwZGF0ZURhdGFGcm9tUmVjb21tZW5kYXRpb25SZXNwb25zZShyZWNvbW1lbmRhdGlvbkRhdGEpO1xuXHRcdFx0XHRcdH0gZWxzZSB7XG5cdFx0XHRcdFx0XHQvLyBpZiBlbXB0eSByZWNvbW1lbmRhdGlvbnMsIHRoZW4gc3RvcmUgaXQgZm9yIHRlbGVtZXRyeSBwdXJwb3NlXG5cdFx0XHRcdFx0XHR0aGlzLnRlbGVtZXRyeS5pbmNyZWFzZUNvdW50KFwibnVtYmVyT2ZUaW1lc0VtcHR5UmVjb21tZW5kYXRpb25zXCIpO1xuXHRcdFx0XHRcdH1cblx0XHRcdFx0XHQvLyBuZWVkIHRvIHZhbGlkYXRlIHRoYXQgdGhlIHJlc3BvbnNlIGlzIHByb3Blcmx5IGZvcm1hdHRlZFxuXHRcdFx0XHRcdGlzU3VjY2VzcyA9IHRoaXMuYXBwbHlSZWNvbW1lbmRhdGlvbihyZWNvbW1lbmRhdGlvbkRhdGEsIGNvbnRleHRzKTtcblx0XHRcdFx0fSBjYXRjaCAoZSkge1xuXHRcdFx0XHRcdExvZy5lcnJvcihcIlRoZXJlIHdhcyBhbiBlcnJvciBmZXRjaGluZyB0aGUgcmVjb21tZW5kYXRpb25zXCIsIGUgYXMgRXJyb3IpO1xuXHRcdFx0XHR9XG5cdFx0XHR9XG5cblx0XHRcdHRoaXMuc3RvcmVSZWNvbW1lbmRhdGlvbkNvbnRleHRzKGZpbHRlcmVkQ29udGV4dHNJbmZvKTtcblx0XHR9XG5cblx0XHRyZXR1cm4gaXNTdWNjZXNzO1xuXHR9XG5cblx0LyoqXG5cdCAqIEZldGNoIHRoZSByZWNvbW1lbmRhdGlvbnMgb24gZmllbGQgY2hhbmdlIGFuZCBhcHBseSB0aGVtIG9uIHRoZSBVSS5cblx0ICpcblx0ICogQHBhcmFtIGZpZWxkIFRoZSBjaGFuZ2VkIGZpZWxkLlxuXHQgKiBAcGFyYW0gY29udGV4dEluZm8gQ29udGV4dEluZm8gd2hpY2ggY29udGFpbnMgdGhlIGNvbnRleHQgaXMgb25seSBjb25zaWRlcmVkIHdoZW4gZmV0Y2hpbmcgdGhlIHJlY29tbWVuZGF0aW9ucyBhbG9uZyB3aXRoIGNvbnRleHRJZGVudGlmaWVyXG5cdCAqIEByZXR1cm5zIGB0cnVlYCBpZiB0aGUgcmVjb21tZW5kYXRpb24gd2VyZSBmZXRjaGVkIGFuZCBhcHBsaWVkIGNvcnJlY3RseVxuXHQgKi9cblx0QHB1YmxpY0V4dGVuc2lvbigpXG5cdHB1YmxpYyBhc3luYyBmZXRjaEFuZEFwcGx5UmVjb21tZW5kYXRpb25zT25GaWVsZENoYW5nZShmaWVsZDogQ29udHJvbCwgY29udGV4dEluZm86IFJlY29tbWVuZGF0aW9uQ29udGV4dHNJbmZvKTogUHJvbWlzZTxib29sZWFuPiB7XG5cdFx0Y29uc3QgYXBwQ29tcG9uZW50ID0gdGhpcy5iYXNlLmdldEFwcENvbXBvbmVudCgpO1xuXHRcdGNvbnN0IGlzRmllbGRSZWNvbW1lbmRhdGlvblJlbGV2YW50ID0gYXBwQ29tcG9uZW50LmdldFNpZGVFZmZlY3RzU2VydmljZSgpLmNoZWNrSWZGaWVsZElzUmVjb21tZW5kYXRpb25SZWxldmFudChmaWVsZCk7XG5cdFx0aWYgKGlzRmllbGRSZWNvbW1lbmRhdGlvblJlbGV2YW50KSB7XG5cdFx0XHQvL2dldHRpbmcgdGhlIHZpc2libGUgdGFyZ2V0cyBvbiB0aGUgVUkgYW5kIHRoZWlyIHJlc3BlY3RpdmUgY29udGV4dHNcblx0XHRcdGNvbnN0IHRhcmdldHMgPSB0aGlzLmZldGNoVGFyZ2V0cyh0cnVlKTtcblx0XHRcdGNvbnN0IGZpbHRlcmVkUmVjb21tZW5kYXRpb25Db250ZXh0cyA9IHRoaXMuZmV0Y2hGaWx0ZXJlZFJlY29tbWVuZGF0aW9uQ29udGV4dHModGFyZ2V0cyk7XG5cdFx0XHQvL2ZpbHRlcmluZyB0aGUgY2hpbGQgY29udGV4dHMgZnJvbSB0aGUgYXZhaWxhYmxlIGNvbnRleHRzXG5cdFx0XHRjb25zdCByZWNvbW1lbmRhdGlvbkNvbnRleHQgPSBmaWx0ZXJlZFJlY29tbWVuZGF0aW9uQ29udGV4dHMuZmlsdGVyKGZ1bmN0aW9uIChmaWx0ZXJlZFJlY29tbWVuZGF0aW9uQ29udGV4dCkge1xuXHRcdFx0XHRpZiAoZmlsdGVyZWRSZWNvbW1lbmRhdGlvbkNvbnRleHQuY29udGV4dC5nZXRQYXRoKCk/LmluY2x1ZGVzKGNvbnRleHRJbmZvLmNvbnRleHQuZ2V0UGF0aCgpKSkge1xuXHRcdFx0XHRcdHJldHVybiBmaWx0ZXJlZFJlY29tbWVuZGF0aW9uQ29udGV4dDtcblx0XHRcdFx0fVxuXHRcdFx0fSk7XG5cdFx0XHRzdGFuZGFyZFJlY29tbWVuZGF0aW9uSGVscGVyLmNsZWFySWdub3JlZENvbnRleHRzKHRoaXMuaW50ZXJuYWxNb2RlbCwgY29udGV4dEluZm8/LmNvbnRleHQuZ2V0UGF0aCgpKTtcblx0XHRcdHJldHVybiB0aGlzLmZldGNoQW5kQXBwbHlSZWNvbW1lbmRhdGlvbnMocmVjb21tZW5kYXRpb25Db250ZXh0KTtcblx0XHR9IGVsc2Uge1xuXHRcdFx0cmV0dXJuIGZhbHNlO1xuXHRcdH1cblx0fVxuXG5cdC8qKlxuXHQgKiBSZXR1cm5zIHRoZSBmaWx0ZXJlZCByZWNvbW1lbmRhdGlvbnMgZnJvbSBwYXNzZWQgcmVjb21tZW5kYXRpb25zIGFuZCB0aGVuIGJhc2VkIG9uIGl0IHdlIGVpdGhlciBzaG93IHRoZSBmaWx0ZXJlZCByZWNvbW1lbmRhdGlvbnMgb3Igbm90IHNob3cgdGhlIEFjY2VwdCBhbGwgRGlhbG9nIGlmIHRoZXJlIGFyZSBubyByZWNvbW1lbmRhdGlvbnMuXG5cdCAqIEBwYXJhbSBfcGFyYW1zIFBhcmFtcyBvYmplY3QgY29udGFpbmluZyByZWNvbW1lbmRhdGlvbkRhdGEgcHJvcGVydHkgd2hpY2ggaXMgYW4gYXJyYXkgb2Ygb2JqZWN0cyBjb250YWluaW5nIGNvbnRleHQsIHByb3BlcnR5UGF0aCwgdmFsdWUgYW5kIHRleHQgZm9yIGEgcmVjb21tZW5kYXRpb25cblx0ICogQHJldHVybnMgUHJvbWlzZVxuXHQgKi9cblx0QHB1YmxpY0V4dGVuc2lvbigpXG5cdEBleHRlbnNpYmxlKFwiQWZ0ZXJBc3luY1wiKVxuXHRwdWJsaWMgYXN5bmMgb25CZWZvcmVBY2NlcHRSZWNvbW1lbmRhdGlvbnMoX3BhcmFtczogQWNjZXB0QWxsUGFyYW1zKTogUHJvbWlzZTx2b2lkPiB7XG5cdFx0Ly9kbyBub3RoaW5nXG5cdFx0cmV0dXJuIFByb21pc2UucmVzb2x2ZSgpOyAvL2hhZCB0byBkbyB0aGlzIGJlY2F1c2Ugb2YgZXNsaW50IGVycm9yIG9mIG5vdCBoYXZpbmcgYXdhaXQgd2hlbiB0aGUgZnVuY3Rpb24gaXMgYXN5bmNcblx0fVxuXG5cdC8qKlxuXHQgKiBUaGlzIGZ1bmN0aW9uIGlzIHJlc3BvbnNpYmxlIGZvciBhY2NlcHRpbmcgdGhlIHJlY29tbWVuZGF0aW9ucy5cblx0ICogQHBhcmFtIF9wYXJhbXMgUGFyYW1zIG9iamVjdCBjb250YWluaW5nIHJlY29tbWVuZGF0aW9uRGF0YSBwcm9wZXJ0eSB3aGljaCBpcyBhbiBhcnJheSBvZiBvYmplY3RzIGNvbnRhaW5pbmcgY29udGV4dCwgcHJvcGVydHlQYXRoLCB2YWx1ZSBhbmQgdGV4dCBmb3IgYSByZWNvbW1lbmRhdGlvblxuXHQgKiBAcmV0dXJucyBQcm9taXNlIHdoaWNoIHJlc29sdmVkIHRvIGEgQm9vbGVhbiB2YWx1ZSBiYXNlZCBvbiB3aGV0aGVyIHJlY29tbWVuZGF0aW9ucyBhcmUgYWNjZXB0ZWQgb3Igbm90XG5cdCAqL1xuXHRAcHVibGljRXh0ZW5zaW9uKClcblx0QGV4dGVuc2libGUoT3ZlcnJpZGVFeGVjdXRpb24uSW5zdGVhZClcblx0cHVibGljIGFzeW5jIGFjY2VwdFJlY29tbWVuZGF0aW9ucyhfcGFyYW1zOiBBY2NlcHRBbGxQYXJhbXMpOiBQcm9taXNlPGJvb2xlYW4+IHtcblx0XHQvL2RvIG5vdGhpbmdcblx0XHRyZXR1cm4gUHJvbWlzZS5yZXNvbHZlKHRydWUpOyAvL2hhZCB0byBkbyB0aGlzIGJlY2F1c2Ugb2YgZXNsaW50IGVycm9yIG9mIG5vdCBoYXZpbmcgYXdhaXQgd2hlbiB0aGUgZnVuY3Rpb24gaXMgYXN5bmNcblx0fVxuXG5cdHByaXZhdGUgYXBwbHlSZWNvbW1lbmRhdGlvbihyZWNvbW1lbmRhdGlvblJlc3BvbnNlczogU3RhbmRhcmRSZWNvbW1lbmRhdGlvblJlc3BvbnNlW10sIF9jb250ZXh0OiBPRGF0YVY0Q29udGV4dFtdKTogYm9vbGVhbiB7XG5cdFx0c3RhbmRhcmRSZWNvbW1lbmRhdGlvbkhlbHBlci5zdG9yZVJlY29tbWVuZGF0aW9ucyhcblx0XHRcdHJlY29tbWVuZGF0aW9uUmVzcG9uc2VzLFxuXHRcdFx0dGhpcy5nZXRWaWV3KCkuZ2V0TW9kZWwoXCJpbnRlcm5hbFwiKSBhcyBKU09OTW9kZWwsXG5cdFx0XHRfY29udGV4dFxuXHRcdCk7XG5cdFx0cmV0dXJuIHRydWU7XG5cdH1cblxuXHQvKipcblx0ICogU3RvcmVzIHRoZSByZWNvbW1lbmRhdGlvbiBjb250ZXh0cy5cblx0ICpcblx0ICogQHBhcmFtIGNvbnRleHRzSW5mb1xuXHQgKi9cblx0cHJpdmF0ZSBzdG9yZVJlY29tbWVuZGF0aW9uQ29udGV4dHMoY29udGV4dHNJbmZvOiBSZWNvbW1lbmRhdGlvbkNvbnRleHRzSW5mb1tdKTogdm9pZCB7XG5cdFx0Y29uc3QgY29udGV4dFBhdGhzOiBzdHJpbmdbXSA9IFtdO1xuXHRcdGxldCByZWNvbW1lbmRhdGlvbkNvbnRleHRzID0gdGhpcy5pbnRlcm5hbE1vZGVsLmdldFByb3BlcnR5KFwiL3JlY29tbWVuZGF0aW9uQ29udGV4dHNcIikgfHwgW107XG5cdFx0Y29udGV4dHNJbmZvLmZvckVhY2goKGNvbnRleHRJbmZvOiBSZWNvbW1lbmRhdGlvbkNvbnRleHRzSW5mbykgPT4ge1xuXHRcdFx0Y29udGV4dFBhdGhzLnB1c2goY29udGV4dEluZm8uY29udGV4dC5nZXRQYXRoKCkpO1xuXHRcdH0pO1xuXG5cdFx0cmVjb21tZW5kYXRpb25Db250ZXh0cyA9IHJlY29tbWVuZGF0aW9uQ29udGV4dHM/LmZpbHRlcigocmVjb21tZW5kYXRpb25Db250ZXh0OiBSZWNvbW1lbmRhdGlvbkNvbnRleHRzSW5mbykgPT4ge1xuXHRcdFx0Y29uc3QgY29udGV4dCA9IHJlY29tbWVuZGF0aW9uQ29udGV4dD8uY29udGV4dDtcblx0XHRcdGlmIChjb250ZXh0KSB7XG5cdFx0XHRcdGNvbnN0IGNvbnRleHRQYXRoID0gY29udGV4dC5nZXRQYXRoKCk7XG5cdFx0XHRcdGNvbnN0IGluZGV4ID0gY29udGV4dFBhdGhzLmluZGV4T2YoY29udGV4dFBhdGgpO1xuXHRcdFx0XHRpZiAoaW5kZXggPCAwKSB7XG5cdFx0XHRcdFx0Ly8gRXhpc3RpbmcgY29udGV4dCBwYXRoIGlzIG5vdCBmb3VuZCBpbiB0aGUgbmV3bHkgZmV0Y2hlZCByZWNvbW1lbmRhdGlvbiAmIHRoZXJlZm9yZSBkb24ndCBkbyBhbnl0aGluZ1xuXHRcdFx0XHRcdHJldHVybiB0cnVlO1xuXHRcdFx0XHR9IGVsc2UgaWYgKHJlY29tbWVuZGF0aW9uQ29udGV4dC5jb250ZXh0SWRlbnRpZmllcikge1xuXHRcdFx0XHRcdC8vIEV4aXN0aW5nIGNvbnRleHQgcGF0aCBpcyBmb3VuZC4gd2UgdHJ5IHRvIHVwZGF0ZSB0aGUgY29udGV4dEluZm8gd2l0aCB0aGUgbGF0ZXN0IGNvbnRleHRcblx0XHRcdFx0XHQvLyBpbnN0ZWFkIG9mIG91dGRhdGVkIG9uZVxuXHRcdFx0XHRcdGNvbnRleHRzSW5mb1tpbmRleF0uY29udGV4dElkZW50aWZpZXIgPSByZWNvbW1lbmRhdGlvbkNvbnRleHQuY29udGV4dElkZW50aWZpZXI7XG5cdFx0XHRcdH1cblx0XHRcdH1cblx0XHRcdHJldHVybiBmYWxzZTtcblx0XHR9KTtcblxuXHRcdHRoaXMuaW50ZXJuYWxNb2RlbC5zZXRQcm9wZXJ0eShcIi9yZWNvbW1lbmRhdGlvbkNvbnRleHRzXCIsIFsuLi5yZWNvbW1lbmRhdGlvbkNvbnRleHRzLCAuLi5jb250ZXh0c0luZm9dKTtcblx0fVxuXG5cdC8qKlxuXHQgKiBGaWx0ZXJzIHRoZSBjb250ZXh0cyBhbmQgb25seSByZXR1cm5zIHRob3NlIHRoYXQgbWF0Y2hlcyB0aGUgY29udGV4dHMuXG5cdCAqXG5cdCAqIEBwYXJhbSB0YXJnZXRzXG5cdCAqIEByZXR1cm5zIFJldHVybnMgdGhlIGZpbHRlcmVkIHJlY29tbWVuZGF0aW9uIHJlbGV2YW50IGNvbnRleHRzXG5cdCAqL1xuXHRwcml2YXRlIGZldGNoRmlsdGVyZWRSZWNvbW1lbmRhdGlvbkNvbnRleHRzKHRhcmdldHM6IHN0cmluZ1tdKTogUmVjb21tZW5kYXRpb25Db250ZXh0c0luZm9bXSB7XG5cdFx0Y29uc3QgY29udGV4dFBhdGhzOiBzdHJpbmdbXSA9IFtdO1xuXHRcdGNvbnN0IGZpbHRlcmVkUmVjb21tZW5kYXRpb25Db250ZXh0czogUmVjb21tZW5kYXRpb25Db250ZXh0c0luZm9bXSA9IFtdO1xuXHRcdGZvciAoY29uc3Qga2V5IG9mIHRhcmdldHMpIHtcblx0XHRcdGNvbnN0IGNvbnRleHRQYXRoRnJvbUtleSA9IGtleS5zdWJzdHJpbmcoMCwga2V5Lmxhc3RJbmRleE9mKFwiKVwiKSArIDEpO1xuXHRcdFx0Y29uc3QgcmVjb21tZW5kYXRpb25Db250ZXh0cyA9ICh0aGlzLmdldFZpZXcoKS5nZXRNb2RlbChcImludGVybmFsXCIpIGFzIEpTT05Nb2RlbCkuZ2V0UHJvcGVydHkoXCIvcmVjb21tZW5kYXRpb25Db250ZXh0c1wiKTtcblx0XHRcdHJlY29tbWVuZGF0aW9uQ29udGV4dHMuZm9yRWFjaCgoY29udGV4dEluZm86IFJlY29tbWVuZGF0aW9uQ29udGV4dHNJbmZvKSA9PiB7XG5cdFx0XHRcdGNvbnN0IGNvbnRleHQgPSBjb250ZXh0SW5mby5jb250ZXh0O1xuXHRcdFx0XHRpZiAoY29udGV4dC5nZXRQYXRoKCkgPT0gY29udGV4dFBhdGhGcm9tS2V5ICYmICFjb250ZXh0UGF0aHMuaW5jbHVkZXMoY29udGV4dFBhdGhGcm9tS2V5KSkge1xuXHRcdFx0XHRcdGNvbnRleHRQYXRocy5wdXNoKGNvbnRleHRQYXRoRnJvbUtleSk7XG5cdFx0XHRcdFx0ZmlsdGVyZWRSZWNvbW1lbmRhdGlvbkNvbnRleHRzLnB1c2goY29udGV4dEluZm8pO1xuXHRcdFx0XHR9XG5cdFx0XHR9KTtcblx0XHR9XG5cdFx0cmV0dXJuIGZpbHRlcmVkUmVjb21tZW5kYXRpb25Db250ZXh0cztcblx0fVxuXG5cdC8qKlxuXHQgKiBGZXRjaGVzIFJlY29tbWVuZGF0aW9uRGF0YSBiYXNlZCBvbiBmaWx0ZXJlZCB0YXJnZXRzLlxuXHQgKlxuXHQgKiBAcGFyYW0gZmlsdGVyZWRUYXJnZXRzXG5cdCAqIEByZXR1cm5zIFJlY29tbWVuZGF0aW9uRGF0YVxuXHQgKi9cblx0cHJpdmF0ZSBmZXRjaEZpbHRlcmVkUmVjb21tZW5kYXRpb25EYXRhKGZpbHRlcmVkVGFyZ2V0czogc3RyaW5nW10pOiBSZWNvbW1lbmRhdGlvbkluZm8ge1xuXHRcdGNvbnN0IGZpbHRlclJlY29tbWVuZGF0aW9uc0RhdGE6IFJlY29tbWVuZGF0aW9uSW5mbyA9IHt9O1xuXHRcdGNvbnN0IHJlY29tbWVuZGF0aW9uRGF0YSA9IHRoaXMuZ2V0VmlldygpLmdldE1vZGVsKFwiaW50ZXJuYWxcIik/LmdldFByb3BlcnR5KFwiL3JlY29tbWVuZGF0aW9uc0RhdGFcIik7XG5cdFx0T2JqZWN0LmtleXMocmVjb21tZW5kYXRpb25EYXRhKS5mb3JFYWNoKChrZXk6IHN0cmluZykgPT4ge1xuXHRcdFx0aWYgKGZpbHRlcmVkVGFyZ2V0cy5pbmNsdWRlcyhrZXkpKSB7XG5cdFx0XHRcdGZpbHRlclJlY29tbWVuZGF0aW9uc0RhdGFba2V5XSA9IE9iamVjdC5hc3NpZ24ocmVjb21tZW5kYXRpb25EYXRhW2tleV0sIHt9KTtcblx0XHRcdH1cblx0XHR9KTtcblx0XHRyZXR1cm4gZmlsdGVyUmVjb21tZW5kYXRpb25zRGF0YTtcblx0fVxuXG5cdC8qKlxuXHQgKiBGZXRjaGVzIHRoZSBmaWx0ZXJlZCB0YXJnZXRzLlxuXHQgKlxuXHQgKiBAcGFyYW0gY29uc2lkZXJSZWNvbW1lbmRhdGlvbkNvbnRleHRzIFBhc3NlZCBhcyB0cnVlIHdoZW4gcmVjb21tZW5kYXRpb24gY29udGV4dHMgc2hvdWxkIGJlIGNvbnNpZGVyZWQgaW5zdGVhZCBvZiBkYXRhXG5cdCAqIEByZXR1cm5zIEFycmF5IG9mIEZpbHRlcmVkIHRhcmdldHNcblx0ICovXG5cdHByaXZhdGUgZmV0Y2hUYXJnZXRzKGNvbnNpZGVyUmVjb21tZW5kYXRpb25Db250ZXh0cz86IGJvb2xlYW4pOiBzdHJpbmdbXSB7XG5cdFx0Y29uc3QgcmVjb21tZW5kYXRpb25EYXRhID0gdGhpcy5nZXRWaWV3KCkuZ2V0TW9kZWwoXCJpbnRlcm5hbFwiKT8uZ2V0UHJvcGVydHkoXCIvcmVjb21tZW5kYXRpb25zRGF0YVwiKTtcblx0XHRpZiAocmVjb21tZW5kYXRpb25EYXRhLnZlcnNpb24gPT09IG51bGwpIHtcblx0XHRcdHJldHVybiBbXTtcblx0XHR9XG5cdFx0Y29uc3QgaXNGY2xFbmFibGVkID0gdGhpcy5iYXNlLmdldEFwcENvbXBvbmVudCgpLl9pc0ZjbEVuYWJsZWQoKTtcblx0XHRjb25zdCBpc0Z1bGxTY3JlZW4gPSBpc0ZjbEVuYWJsZWRcblx0XHRcdD8gKHRoaXMuYmFzZS5nZXRBcHBDb21wb25lbnQoKS5nZXRSb290Vmlld0NvbnRyb2xsZXIoKSBhcyBGY2xDb250cm9sbGVyKS5nZXRIZWxwZXIoKS5nZXRDdXJyZW50VUlTdGF0ZSgpLmlzRnVsbFNjcmVlblxuXHRcdFx0OiB0cnVlO1xuXHRcdGNvbnN0IGlzUmVjb21tZW5kYXRpb25BY2NlcHRhYmxlID0gKGNvbnRleHRQYXRoOiBzdHJpbmcsIGtleTogc3RyaW5nKTogYm9vbGVhbiA9PiB7XG5cdFx0XHRjb25zdCBzcGxpdFBhdGhBbmRDaGVja0lmUmVjb21tZW5kYXRpb25BY2NlcHRhYmxlID0gKGN0eHRQYXRoOiBzdHJpbmcpOiBib29sZWFuID0+IHtcblx0XHRcdFx0Y29uc3QgcGF0aEFycmF5ID0ga2V5LnNwbGl0KGN0eHRQYXRoKTtcblx0XHRcdFx0Y29uc3QgbmV3UGF0aCA9IHBhdGhBcnJheVsxXTtcblx0XHRcdFx0bGV0IG5ld1BhdGhBcnJheSA9IG5ld1BhdGguc3BsaXQoXCIvXCIpO1xuXHRcdFx0XHQvL2hlcmUgd2UgY2hlY2sgdGhlIHBhdGggYnkgc3BsaXR0aW5nIHRvIGRlY2lkZSB3aGV0aGVyIHRvIGluY2x1ZGUgcmVjb21tZW5kYXRpb25zIG9yIG5vdCBpbiBkaWFsb2dcblx0XHRcdFx0aWYgKG5ld1BhdGhBcnJheS5sZW5ndGggPD0gMykge1xuXHRcdFx0XHRcdHJldHVybiB0cnVlO1xuXHRcdFx0XHR9IGVsc2Uge1xuXHRcdFx0XHRcdG5ld1BhdGhBcnJheSA9IG5ld1BhdGhBcnJheS5zbGljZSgyKTtcblx0XHRcdFx0XHRyZXR1cm4gIW5ld1BhdGhBcnJheS5zb21lKCh2YWx1ZTogc3RyaW5nKSA9PiB2YWx1ZS5pbmNsdWRlcyhcIihcIikpO1xuXHRcdFx0XHR9XG5cdFx0XHR9O1xuXHRcdFx0aWYgKGlzRmNsRW5hYmxlZCAmJiAhaXNGdWxsU2NyZWVuKSB7XG5cdFx0XHRcdGNvbnN0IHJpZ2h0TW9zdENvbnRleHQgPSAodGhpcy5iYXNlLmdldEFwcENvbXBvbmVudCgpLmdldFJvb3RWaWV3Q29udHJvbGxlcigpIGFzIEZjbENvbnRyb2xsZXIpLmdldFJpZ2h0bW9zdENvbnRleHQoKTtcblx0XHRcdFx0aWYgKGtleS5pbmNsdWRlcyhyaWdodE1vc3RDb250ZXh0Py5nZXRQYXRoKCkgYXMgc3RyaW5nKSkge1xuXHRcdFx0XHRcdHJldHVybiBzcGxpdFBhdGhBbmRDaGVja0lmUmVjb21tZW5kYXRpb25BY2NlcHRhYmxlKHJpZ2h0TW9zdENvbnRleHQ/LmdldFBhdGgoKSBhcyBzdHJpbmcpO1xuXHRcdFx0XHR9IGVsc2Uge1xuXHRcdFx0XHRcdHJldHVybiBzcGxpdFBhdGhBbmRDaGVja0lmUmVjb21tZW5kYXRpb25BY2NlcHRhYmxlKGNvbnRleHRQYXRoKTtcblx0XHRcdFx0fVxuXHRcdFx0fSBlbHNlIHtcblx0XHRcdFx0cmV0dXJuIHNwbGl0UGF0aEFuZENoZWNrSWZSZWNvbW1lbmRhdGlvbkFjY2VwdGFibGUoY29udGV4dFBhdGgpO1xuXHRcdFx0fVxuXHRcdH07XG5cblx0XHRjb25zdCBkYXRhVG9CZUZpbHRlcmVkID0gdGhpcy5mZXRjaERhdGFUb0JlRmlsdGVyZWQocmVjb21tZW5kYXRpb25EYXRhLCBjb25zaWRlclJlY29tbWVuZGF0aW9uQ29udGV4dHMpO1xuXHRcdHJldHVybiAoXG5cdFx0XHRkYXRhVG9CZUZpbHRlcmVkLmZpbHRlcigoa2V5OiBzdHJpbmcpID0+IHtcblx0XHRcdFx0cmV0dXJuIChcblx0XHRcdFx0XHRrZXkuaW5jbHVkZXModGhpcy5nZXRWaWV3KCkuZ2V0QmluZGluZ0NvbnRleHQoKT8uZ2V0UGF0aCgpIGFzIHN0cmluZykgJiZcblx0XHRcdFx0XHRpc1JlY29tbWVuZGF0aW9uQWNjZXB0YWJsZSh0aGlzLmdldFZpZXcoKS5nZXRCaW5kaW5nQ29udGV4dCgpPy5nZXRQYXRoKCkgYXMgc3RyaW5nLCBrZXkpXG5cdFx0XHRcdCk7XG5cdFx0XHR9KSB8fCBbXVxuXHRcdCk7XG5cdH1cblxuXHQvKipcblx0ICogRmV0Y2hlcyB0aGUgZGF0YSB0byBiZSBmaWx0ZXJlZCBkZXBlbmRpbmcgb24gdGhlIHJlY29tbWVuZGF0aW9uRGF0YS5cblx0ICpcblx0ICogQHBhcmFtIHJlY29tbWVuZGF0aW9uRGF0YVxuXHQgKiBAcGFyYW0gY29uc2lkZXJSZWNvbW1lbmRhdGlvbkNvbnRleHRzIFBhc3NlZCBhcyB0cnVlIHdoZW4gcmVjb21tZW5kYXRpb24gY29udGV4dHMgc2hvdWxkIGJlIGNvbnNpZGVyZWQgaW5zdGVhZCBvZiBkYXRhXG5cdCAqIEByZXR1cm5zIEFycmF5IG9mIGNvbnRleHRQYXRocyB0byBiZSBmaWx0ZXJlZFxuXHQgKi9cblx0cHJpdmF0ZSBmZXRjaERhdGFUb0JlRmlsdGVyZWQocmVjb21tZW5kYXRpb25EYXRhOiBSZWNvbW1lbmRhdGlvbkluZm8sIGNvbnNpZGVyUmVjb21tZW5kYXRpb25Db250ZXh0czogYm9vbGVhbiB8IHVuZGVmaW5lZCk6IHN0cmluZ1tdIHtcblx0XHRsZXQgZGF0YVRvQmVGaWx0ZXJlZDogc3RyaW5nW10gPSBbXTtcblx0XHQvLyBjb25zaWRlciByZWNvbW1lbmRhdGlvbkNvbnRleHRzIGZvciBmZXRjaGluZyB0aGUgcGF0aHMgaW4gY2FzZSBvZiBmaWVsZCBjaGFuZ2Ugc28gdGhhdCBjb250ZXh0cyBmb3Igd2hpY2ggZW1wdHkgcmVjb21tZW5kYXRpb24gZGF0YSBpcyByZXR1cm5lZCBhcmUgYWxzbyBjb25zaWRlcmVkXG5cdFx0aWYgKGNvbnNpZGVyUmVjb21tZW5kYXRpb25Db250ZXh0cykge1xuXHRcdFx0Y29uc3QgcmVjb21tZW5kYXRpb25Db250ZXh0cyA9IHRoaXMuZ2V0VmlldygpLmdldE1vZGVsKFwiaW50ZXJuYWxcIik/LmdldFByb3BlcnR5KFwiL3JlY29tbWVuZGF0aW9uQ29udGV4dHNcIik7XG5cdFx0XHRyZWNvbW1lbmRhdGlvbkNvbnRleHRzLmZvckVhY2goKHJlY29tbWVuZGF0aW9uQ29udGV4dDogUmVjb21tZW5kYXRpb25Db250ZXh0c0luZm8pID0+IHtcblx0XHRcdFx0ZGF0YVRvQmVGaWx0ZXJlZC5wdXNoKHJlY29tbWVuZGF0aW9uQ29udGV4dC5jb250ZXh0LmdldFBhdGgoKSk7XG5cdFx0XHR9KTtcblx0XHR9IGVsc2Uge1xuXHRcdFx0Ly8gY29uc2lkZXIgcmVjb21tZW5kYXRpb25EYXRhIGluIGNhc2Ugb2YgYWNjZXB0IGFsbCBkaWFsb2cgc2NlbmFyaW9zXG5cdFx0XHRkYXRhVG9CZUZpbHRlcmVkID0gT2JqZWN0LmtleXMocmVjb21tZW5kYXRpb25EYXRhKS5maWx0ZXIoKGtleSkgPT4ge1xuXHRcdFx0XHRyZXR1cm4ga2V5ICE9PSBcInZlcnNpb25cIiAmJiBrZXkgIT09IFwia2V5c1wiO1xuXHRcdFx0fSk7XG5cdFx0fVxuXHRcdHJldHVybiBkYXRhVG9CZUZpbHRlcmVkO1xuXHR9XG5cblx0LyoqXG5cdCAqIE92ZXJ3cml0ZXMgQWNjZXB0QWxsIFBhcmFtcyBiYXNlZCBvZiByZWNvbW1lbmRhdGlvbiBkYXRhIGFuZCBjb250ZXh0cy5cblx0ICpcblx0ICogQHBhcmFtIGZpbHRlclJlY29tbWVuZGF0aW9uRGF0YVxuXHQgKiBAcGFyYW0gZmlsdGVyUmVjb21tZW5kYXRpb25Db250ZXh0c1xuXHQgKiBAcGFyYW0gcGFyYW1zXG5cdCAqL1xuXHRwcml2YXRlIGFkanVzdEFjY2VwdEFsbFBhcmFtcyhcblx0XHRmaWx0ZXJSZWNvbW1lbmRhdGlvbkRhdGE6IFJlY29tbWVuZGF0aW9uSW5mbyxcblx0XHRmaWx0ZXJSZWNvbW1lbmRhdGlvbkNvbnRleHRzOiBSZWNvbW1lbmRhdGlvbkNvbnRleHRzSW5mb1tdLFxuXHRcdHBhcmFtczogQWNjZXB0QWxsUGFyYW1zXG5cdCk6IHZvaWQge1xuXHRcdHBhcmFtcy5yZWNvbW1lbmRhdGlvbkRhdGEgPSBbXTtcblx0XHRmb3IgKGNvbnN0IGtleSBpbiBmaWx0ZXJSZWNvbW1lbmRhdGlvbkRhdGEpIHtcblx0XHRcdGlmIChmaWx0ZXJSZWNvbW1lbmRhdGlvbkRhdGFba2V5XS52YWx1ZSB8fCBmaWx0ZXJSZWNvbW1lbmRhdGlvbkRhdGFba2V5XS50ZXh0KSB7XG5cdFx0XHRcdC8vIEluIGNhc2UgdGhlcmUgaXMgbm8gcGxhY2Vob2xkZXIgdmFsdWUgb3IgcGxhY2Vob2xkZXIgdGV4dCB0aGVuIHRoaXMgcmVjb21tZW5kYXRpb24gaXMgbm90IHJlbGV2YW50IGZvciBBY2NlcHQuXG5cdFx0XHRcdC8vIFVzZXIgbmVlZHMgdG8gbWFudWFsbHkgc2VsZWN0IHRoZSByZWNvbW1lbmRlZCB2YWx1ZSBpbiB0aGVzZSBjYXNlcyAmIHRoZXJlZm9yZSBmaWx0ZXIgdGhlIHNhbWUuXG5cdFx0XHRcdGNvbnN0IGNvbnRleHRQYXRoRnJvbUtleSA9IGtleS5zdWJzdHJpbmcoMCwga2V5Lmxhc3RJbmRleE9mKFwiKVwiKSArIDEpO1xuXHRcdFx0XHRjb25zdCBwcm9wZXJ0eVBhdGhGcm9tS2V5ID0ga2V5LnN1YnN0cmluZyhrZXkubGFzdEluZGV4T2YoXCIpXCIpICsgMik7XG5cdFx0XHRcdGNvbnN0IG1hdGNoaW5nQ29udGV4dCA9IGZpbHRlclJlY29tbWVuZGF0aW9uQ29udGV4dHMuZmlsdGVyKGZ1bmN0aW9uIChjb250ZXh0SW5mbykge1xuXHRcdFx0XHRcdGlmIChjb250ZXh0SW5mby5jb250ZXh0LmdldFBhdGgoKSA9PT0gY29udGV4dFBhdGhGcm9tS2V5KSB7XG5cdFx0XHRcdFx0XHRyZXR1cm4gdHJ1ZTtcblx0XHRcdFx0XHR9XG5cdFx0XHRcdH0pO1xuXHRcdFx0XHRpZiAoXG5cdFx0XHRcdFx0bWF0Y2hpbmdDb250ZXh0Py5sZW5ndGggPiAwICYmXG5cdFx0XHRcdFx0c3RhbmRhcmRSZWNvbW1lbmRhdGlvbkhlbHBlci5pc1JlY29tbWVuZGF0aW9uRmllbGROdWxsKG1hdGNoaW5nQ29udGV4dFswXS5jb250ZXh0LCBrZXksIHByb3BlcnR5UGF0aEZyb21LZXkpXG5cdFx0XHRcdCkge1xuXHRcdFx0XHRcdHBhcmFtcy5yZWNvbW1lbmRhdGlvbkRhdGEucHVzaCh7XG5cdFx0XHRcdFx0XHRjb250ZXh0OiBtYXRjaGluZ0NvbnRleHRbMF0uY29udGV4dCxcblx0XHRcdFx0XHRcdGNvbnRleHRJZGVudGlmaWVyOiBtYXRjaGluZ0NvbnRleHRbMF0uY29udGV4dElkZW50aWZpZXIsXG5cdFx0XHRcdFx0XHRwcm9wZXJ0eVBhdGg6IHByb3BlcnR5UGF0aEZyb21LZXksXG5cdFx0XHRcdFx0XHR2YWx1ZTogZmlsdGVyUmVjb21tZW5kYXRpb25EYXRhW2tleV0udmFsdWUsXG5cdFx0XHRcdFx0XHR0ZXh0OiBmaWx0ZXJSZWNvbW1lbmRhdGlvbkRhdGFba2V5XS50ZXh0XG5cdFx0XHRcdFx0fSk7XG5cdFx0XHRcdH1cblx0XHRcdH1cblx0XHR9XG5cdH1cblxuXHQvKipcblx0ICogRmV0Y2hlcyBSZWNvbW1lbmRhdGlvbkluZm8gdGhhdCBjb250YWlucyB0YXJnZXRzLCBmaWx0ZXJSZWNvbW1lbmRhdGlvbkRhdGEsIGZpbHRlclJlY29tbWVuZGF0aW9uQ29udGV4dHMuXG5cdCAqXG5cdCAqIEByZXR1cm5zIFByb21pc2Ugd2hpY2ggcmVzb2x2ZXMgd2l0aCBBY2NlcHRhbGxQYXJhbXNcblx0ICovXG5cdHB1YmxpYyBhc3luYyBmZXRjaEFjY2VwdEFsbFBhcmFtcygpOiBQcm9taXNlPEFjY2VwdEFsbFBhcmFtcz4ge1xuXHRcdGNvbnN0IHRhcmdldHM6IHN0cmluZ1tdID0gdGhpcy5mZXRjaFRhcmdldHMoKTtcblx0XHRjb25zdCBmaWx0ZXJSZWNvbW1lbmRhdGlvbkRhdGEgPSB0aGlzLmZldGNoRmlsdGVyZWRSZWNvbW1lbmRhdGlvbkRhdGEodGFyZ2V0cyk7XG5cdFx0Y29uc3QgZmlsdGVyUmVjb21tZW5kYXRpb25Db250ZXh0cyA9IHRoaXMuZmV0Y2hGaWx0ZXJlZFJlY29tbWVuZGF0aW9uQ29udGV4dHModGFyZ2V0cyk7XG5cdFx0Y29uc3QgcGFyYW1zID0ge307XG5cdFx0dGhpcy5hZGp1c3RBY2NlcHRBbGxQYXJhbXMoZmlsdGVyUmVjb21tZW5kYXRpb25EYXRhLCBmaWx0ZXJSZWNvbW1lbmRhdGlvbkNvbnRleHRzLCBwYXJhbXMpO1xuXHRcdGF3YWl0ICh0aGlzLmdldFZpZXcoKS5nZXRDb250cm9sbGVyKCkgYXMgUGFnZUNvbnRyb2xsZXIpLnJlY29tbWVuZGF0aW9ucy5vbkJlZm9yZUFjY2VwdFJlY29tbWVuZGF0aW9ucyhwYXJhbXMpO1xuXHRcdHN0YW5kYXJkUmVjb21tZW5kYXRpb25IZWxwZXIuYWRkQ29udGV4dElkZW50aWZpZXJUZXh0KHBhcmFtcywgdGhpcy5nZXRWaWV3KCk/LmdldEJpbmRpbmdDb250ZXh0KCk/LmdldFBhdGgoKSk7XG5cdFx0dGhpcy5kYXRhVG9CZUFjY2VwdGVkID0gKHBhcmFtcyBhcyBBY2NlcHRBbGxQYXJhbXMpLnJlY29tbWVuZGF0aW9uRGF0YSB8fCBbXTtcblx0XHRyZXR1cm4gcGFyYW1zO1xuXHR9XG5cblx0LyoqXG5cdCAqIENoZWNrcyBpZiByZWNvbW1lbmRhdGlvbnMgZXhpc3Qgb3Igbm90LlxuXHQgKlxuXHQgKiBAcmV0dXJucyBCb29sZWFuIHZhbHVlIGJhc2VkIG9uIHdoZXRoZXIgcmVjb21tZW5kYXRpb25zIGFyZSBwcmVzZW50IG9yIG5vdFxuXHQgKi9cblx0cHVibGljIGNoZWNrSWZSZWNvbW1lbmRhdGlvbnNFeGlzdCgpOiBib29sZWFuIHtcblx0XHRjb25zdCByZWNvbW1lbmRhdGlvbkRhdGEgPSB0aGlzLmludGVybmFsTW9kZWwuZ2V0UHJvcGVydHkoXCIvcmVjb21tZW5kYXRpb25zRGF0YVwiKSB8fCB7fTtcblx0XHRyZXR1cm4gT2JqZWN0LmtleXMocmVjb21tZW5kYXRpb25EYXRhKS5sZW5ndGggIT09IDA7XG5cdH1cblxuXHQvKipcblx0ICogVGhpcyBmdW5jdGlvbiB3aWxsIGNsZWFyIHJlY29tbWVuZGF0aW9uIERhdGEgZm9yIGEgZ2l2ZW4gY29udGV4dCBhbmQgYWxsIGl0cyBjaGlsZHJlbi5cblx0ICpcblx0ICogQHBhcmFtIGNvbnRleHRzIENvbnRleHQgZm9yIHdoaWNoIHJlY29tbWVuZGF0aW9uIGhhcyB0byBiZSBjbGVhcmVkXG5cdCAqL1xuXHRwdWJsaWMgaWdub3JlUmVjb21tZW5kYXRpb25Gb3JDb250ZXh0cyhjb250ZXh0cz86IE9EYXRhVjRDb250ZXh0W10pOiB2b2lkIHtcblx0XHRpZiAoIWNvbnRleHRzIHx8ICFjb250ZXh0cy5sZW5ndGgpIHtcblx0XHRcdGNvbnN0IHZpZXcgPSB0aGlzLmdldFZpZXcoKTtcblx0XHRcdGNvbnN0IGJpbmRpbmdDb250ZXh0ID0gdmlldy5nZXRCaW5kaW5nQ29udGV4dCgpIGFzIE9EYXRhVjRDb250ZXh0O1xuXHRcdFx0Y29udGV4dHMgPSBbYmluZGluZ0NvbnRleHRdO1xuXHRcdH1cblx0XHRzdGFuZGFyZFJlY29tbWVuZGF0aW9uSGVscGVyLmlnbm9yZVJlY29tbWVuZGF0aW9uRm9yQ29udGV4dHMoY29udGV4dHMsIHRoaXMuaW50ZXJuYWxNb2RlbCk7XG5cdH1cblxuXHRwcml2YXRlIHRyeVJlc2V0UmVjb21tZW5kYXRpb25zKHJvb3RDb250ZXh0OiBPRGF0YVY0Q29udGV4dCk6IHZvaWQge1xuXHRcdHN0YW5kYXJkUmVjb21tZW5kYXRpb25IZWxwZXIuc2V0Q3VycmVudFJvb3RDb250ZXh0KHJvb3RDb250ZXh0KTtcblx0XHQvLyBUT0RPOiBTdGFuZGFyZFJlY29tbWVuZGF0aW9uSGVscGVyIHN0b3JlcyBhbGwgdGhlIHJlY29tbWVuZGF0aW9ucyBmb3IgYW4gaW5zdGFuY2Ugb2YgYnVzaW5lc3Mgb2JqZWN0XG5cdFx0Ly8gbWVhbmluZyBkb2Vzbid0IG1hdHRlciB0aGUgcmVjb21tZW5kYXRpb25zIGFyZSBvbiB0aGUgT1AvU3ViT1AuIEJ1dCB0aGUgcmVjb21tZW5kYXRpb25zIGNvbnRleHRzIGhlcmVcblx0XHQvLyBpcyBzcGVjaWZpYyB0byB0aGlzIGNvbnRyb2xsZXIsIFN1Yk9QIGNvbnRyb2xsZXIgd2lsbCBoYXZlIGl0cyBvd24gcmVjb21tZW5kYXRpb24gY29udGV4dHMuIElkZWFsbHkgaXRcblx0XHQvLyBzaG91bGQgYmUgY2xlYXJlZCBidXQgdGhpcyBpcyBub3QgZG9uZSBoZXJlLiBUaGlzIGNvbXBsZXRlIHRoaW5nIG5lZWRzIHRvIGJlIHJlZmFjdG9yZWRcblx0XHR0aGlzLmludGVybmFsTW9kZWwuc2V0UHJvcGVydHkoXCIvcmVjb21tZW5kYXRpb25Db250ZXh0c1wiLCBbXSk7XG5cdFx0c3RhbmRhcmRSZWNvbW1lbmRhdGlvbkhlbHBlci5yZXNldFJlY29tbWVuZGF0aW9ucyh0aGlzLmludGVybmFsTW9kZWwpO1xuXHR9XG5cblx0LyoqXG5cdCAqIFRoaXMgZnVuY3Rpb24gd2lsbCBzdG9yZSB0aGUgbnVtYmVyIG9mIGZpZWxkcyBBY2NlcHRlZC9JZ25vcmVkIHdoZW4gU2F2ZSBidXR0b24gaXMgY2xpY2tlZCwgZGVwZW5kaW5nIG9uIHdoaWNoIHJlY29tbWVkYXRpb24gb3B0aW9uIHdhcyBjaG9vc2VuIEFjY2VwdC9JZ25vcmUgYW5kIFNhdmUuXG5cdCAqXG5cdCAqIEBwYXJhbSByZWNvbW1lbmRhdGlvbk9wdGlvbkNob29zZW5cblx0ICovXG5cdHB1YmxpYyBhc3luYyBzdG9yZURhdGFGb3JUZWxlbWV0cnkocmVjb21tZW5kYXRpb25PcHRpb25DaG9vc2VuOiB1bmRlZmluZWQgfCBSZWNvbW1lbmRhdGlvbkRpYWxvZ0RlY2lzaW9uKTogUHJvbWlzZTx2b2lkPiB7XG5cdFx0Y29uc3Qgcm9vdENvbnRleHQgPSBhd2FpdCB0aGlzLl9nZXRSb290Q29udGV4dCh0aGlzLmdldFZpZXcoKS5nZXRCaW5kaW5nQ29udGV4dCgpIGFzIE9EYXRhVjRDb250ZXh0KTtcblx0XHRpZiAocm9vdENvbnRleHQgJiYgdGhpcy5iYXNlLnJlY29tbWVuZGF0aW9ucy5pc0VuYWJsZWQocm9vdENvbnRleHQpKSB7XG5cdFx0XHRpZiAocmVjb21tZW5kYXRpb25PcHRpb25DaG9vc2VuID09PSBSZWNvbW1lbmRhdGlvbkRpYWxvZ0RlY2lzaW9uLkFjY2VwdCkge1xuXHRcdFx0XHQvLyBpbmNyZWFzZSBhY2NlcHQgY291bnRcblx0XHRcdFx0dGhpcy50ZWxlbWV0cnkudXBkYXRlRGF0YShcIm51bWJlck9mRmllbGRzQWNjZXB0ZWRUaHJvdWdoQWNjZXB0QnV0dG9uXCIsIHRoaXMuZGF0YVRvQmVBY2NlcHRlZC5sZW5ndGgpO1xuXHRcdFx0fSBlbHNlIGlmIChyZWNvbW1lbmRhdGlvbk9wdGlvbkNob29zZW4gPT09IFJlY29tbWVuZGF0aW9uRGlhbG9nRGVjaXNpb24uSWdub3JlKSB7XG5cdFx0XHRcdC8vIGluY3JlYXNlIGlnbm9yZSBjb3VudFxuXHRcdFx0XHR0aGlzLnRlbGVtZXRyeS51cGRhdGVEYXRhKFwibnVtYmVyT2ZGaWVsZHNJZ25vcmVkVGhyb3VnaElnbm9yZUJ1dHRvblwiLCB0aGlzLmRhdGFUb0JlQWNjZXB0ZWQubGVuZ3RoKTtcblx0XHRcdH1cblx0XHRcdHRoaXMudGVsZW1ldHJ5LnN0b3JlRGF0YSh0aGlzLmdldFZpZXcoKSBhcyBGRVZpZXcpO1xuXHRcdH1cblx0fVxuXG5cdC8qKlxuXHQgKiBUaGlzIGZ1bmN0aW9uIHdpbGwgdXBkYXRlIHRoZSBjb3VudCBieSAxIGluIHRlbGVtZXRyeSBkYXRhLlxuXHQgKlxuXHQgKiBAcGFyYW0ga2V5XG5cdCAqL1xuXHRwdWJsaWMgaW5jcmVhc2VUZWxlbWV0cnlEYXRhQ291bnQoa2V5OiBrZXlvZiBSZWNvbW1lbmRhdGlvblRlbGVtZXRyeSk6IHZvaWQge1xuXHRcdHRoaXMudGVsZW1ldHJ5LmluY3JlYXNlQ291bnQoa2V5KTtcblx0fVxuXG5cdC8qKlxuXHQgKiBUaGlzIGZ1bmN0aW9uIHdpbGwgdXBkYXRlIHRlbGVtZXRyeSBkYXRhIGZvciB3aGljaCBvcHRpb24gdXNlciBjaG9zZSB3aGVuIHNlbGVjdGluZyBhIGZpZWxkIHZhbHVlLCBhcyB0b3Avbm9uLXRvcCByZWNvbW1lbmRhdGlvbiBvciBzb21lIG90aGVyIHZhbHVlLlxuXHQgKiBAcGFyYW0gZmllbGRQYXRoXG5cdCAqIEBwYXJhbSBzZWxlY3RlZFZhbHVlXG5cdCAqL1xuXHRwdWJsaWMgdXBkYXRlVGVsZW1ldHJ5RGF0YUJhc2VkT25Vc2VyU2VsZWN0aW9uKGZpZWxkUGF0aDogc3RyaW5nLCBzZWxlY3RlZFZhbHVlOiBzdHJpbmcpOiB2b2lkIHtcblx0XHR0aGlzLnRlbGVtZXRyeS51cGRhdGVUZWxlbWV0cnlEYXRhQmFzZWRPblVzZXJTZWxlY3Rpb24odGhpcy5nZXRWaWV3KCksIGZpZWxkUGF0aCwgc2VsZWN0ZWRWYWx1ZSk7XG5cdH1cblxuXHQvKipcblx0ICogVGhpcyBmdW5jdGlvbiB3aWxsIHVwZGF0ZSB0aGUgdG90YWwgbnVtYmVyIG9mIGZpZWxkcyByZWNvbW1lbmRlZC4gSWYgdGhlIGZpZWxkIGlzIGFscmVhZHkgaW5jbHVkZWQgaW4gdGVsZW1ldHJ5IGNvdW50IHRoZW4gd2UgZG8gbm90IGluY2x1ZGUuXG5cdCAqIFRoaXMgd2F5IHdlIGtub3cgdGhlIHRvdGFsIG51bWJlciBvZiB1bmlxdWUgZmllbGRzIHJlY29tbWVuZGVkLlxuXHQgKlxuXHQgKiBAcGFyYW0gcmVjb21tZW5kYXRpb25EYXRhXG5cdCAqL1xuXHR1cGRhdGVBbGxSZWNvbW1lbmRlZEZpZWxkcyhyZWNvbW1lbmRhdGlvbkRhdGE6IFN0YW5kYXJkUmVjb21tZW5kYXRpb25SZXNwb25zZVtdKTogdm9pZCB7XG5cdFx0Y29uc3Qgdmlld0JpbmRpbmdDb250ZXh0UGF0aCA9ICh0aGlzLmdldFZpZXcoKS5nZXRCaW5kaW5nQ29udGV4dCgpIGFzIENvbnRleHQpLmdldFBhdGgoKTtcblx0XHRjb25zdCBuZXdSZWNvbW1lbmRhdGlvbnNGb3JDdXJyZW50Q29udGV4dHMgPSByZWNvbW1lbmRhdGlvbkRhdGEuZmlsdGVyKFxuXHRcdFx0KHJlc3BvbnNlKSA9PiByZXNwb25zZVtcIkFJUmVjb21tZW5kZWRGaWVsZFBhdGhcIl0/LmluY2x1ZGVzKHZpZXdCaW5kaW5nQ29udGV4dFBhdGgpXG5cdFx0KTtcblx0XHRpZiAoIXRoaXMuYWxsUmVjb21tZW5kZWRGaWVsZHMpIHtcblx0XHRcdHRoaXMuYWxsUmVjb21tZW5kZWRGaWVsZHMgPSBbXTtcblx0XHR9XG5cdFx0bmV3UmVjb21tZW5kYXRpb25zRm9yQ3VycmVudENvbnRleHRzLmZvckVhY2goKHJlc3BvbnNlKSA9PiB7XG5cdFx0XHRjb25zdCBmaWVsZFBhdGggPSByZXNwb25zZVtcIkFJUmVjb21tZW5kZWRGaWVsZFBhdGhcIl07XG5cdFx0XHRpZiAoZmllbGRQYXRoKSB7XG5cdFx0XHRcdGlmICghdGhpcy5hbGxSZWNvbW1lbmRlZEZpZWxkcy5pbmNsdWRlcyhmaWVsZFBhdGgpKSB7XG5cdFx0XHRcdFx0dGhpcy5hbGxSZWNvbW1lbmRlZEZpZWxkcy5wdXNoKGZpZWxkUGF0aCk7XG5cdFx0XHRcdFx0dGhpcy50ZWxlbWV0cnkuaW5jcmVhc2VDb3VudChcIm51bWJlck9mUmVjb21tZW5kZWRGaWVsZHNcIik7XG5cdFx0XHRcdH1cblx0XHRcdH1cblx0XHR9KTtcblx0fVxufVxuIl0sIm1hcHBpbmdzIjoiO0FBQUE7QUFBQTtBQUFBOzs7Ozs7Ozs7Ozs7Ozs7OztNQXNDcUJBLGVBQWUsV0FEbkNDLGNBQWMsQ0FBQyxrREFBa0QsQ0FBQyxVQXVCakVDLGNBQWMsRUFBRSxVQVFoQkEsY0FBYyxD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
@@ -1,6 +1,6 @@
1
1
  import Log from "sap/base/Log";
2
+ import { defineUI5Class, extensible, finalExtension, methodOverride, publicExtension } from "sap/fe/base/ClassSupport";
2
3
  import type PageController from "sap/fe/core/PageController";
3
- import { defineUI5Class, extensible, finalExtension, methodOverride, publicExtension } from "sap/fe/core/helpers/ClassSupport";
4
4
  import { recommendationHelper } from "sap/fe/core/helpers/RecommendationHelper";
5
5
  import type {
6
6
  RecommendationContextsInfo,
@@ -52,30 +52,56 @@ export default class Recommendations extends ControllerExtension {
52
52
  // the data shown in Accept/Ignore dialog of Recommendations
53
53
  dataToBeAccepted: RecommendationData[] = [];
54
54
 
55
+ previousContext: Context | null | undefined;
56
+
57
+ constructor() {
58
+ super();
59
+ }
60
+
55
61
  @methodOverride()
56
62
  onInit(): void {
57
63
  this.telemetry = new Telemetry();
58
64
  this.allRecommendedFields = [];
59
65
  this.internalModel = this.base.getView().getModel("internal");
66
+ this.previousContext = undefined;
60
67
  }
61
68
 
62
69
  @methodOverride("_routing")
63
70
  async onAfterBinding(context: Context | null): Promise<void> {
64
71
  if (context) {
72
+ const currentContextBasePath = context.getPath().split("/")[1];
73
+ const previousContextBasePath = this.previousContext?.getPath().split("/")[1];
74
+ // console.log('current::', currentContextBasePath);
75
+ // console.log('previous', previousContextBasePath);
65
76
  this.rootContext = undefined;
66
77
  // use internal model because we have to use this information across the application for different instances.
67
78
  let isRecommendationEnabled = this.internalModel.getProperty("/isRecommendationEnabled");
68
79
  // onAfter binding is called for all contexts
69
80
  // but we do not need to call the isEnabled hook all the time
70
81
  // so check if recommendation enabled is already available
82
+ this.previousContext = context;
71
83
  const rootContext = await this._getRootContext(context as ODataV4Context);
72
84
  if (rootContext) {
73
85
  if (isRecommendationEnabled === undefined) {
74
86
  isRecommendationEnabled = this.base.recommendations.isEnabled(rootContext);
75
87
  this.internalModel.setProperty("/isRecommendationEnabled", isRecommendationEnabled);
76
88
  }
77
- this.tryResetRecommendations(rootContext as ODataV4Context);
78
- this.telemetry.resetData();
89
+ // if(!this.previousContext) {
90
+
91
+ // }
92
+ const isFclEnabled = this.base.getAppComponent()._isFclEnabled();
93
+ const isFullScreen = isFclEnabled
94
+ ? (this.base.getAppComponent().getRootViewController() as FclController).getHelper().getCurrentUIState().isFullScreen
95
+ : true;
96
+ if (currentContextBasePath !== previousContextBasePath) {
97
+ // different contexts/ OP
98
+ // console.log("run reset logic")
99
+ this.tryResetRecommendations(rootContext as ODataV4Context);
100
+ this.telemetry.resetData();
101
+ }
102
+ if (isFclEnabled && !isFullScreen) {
103
+ return;
104
+ }
79
105
  }
80
106
  }
81
107
  }
@@ -2,7 +2,7 @@
2
2
  * SAP UI development toolkit for HTML5 (SAPUI5)
3
3
  * (c) Copyright 2009-2024 SAP SE. All rights reserved
4
4
  */
5
- sap.ui.define(["sap/fe/core/helpers/ClassSupport", "sap/fe/core/helpers/ModelHelper", "sap/ui/core/mvc/ControllerExtension", "sap/ui/core/mvc/OverrideExecution", "./HookSupport"], function (ClassSupport, ModelHelper, ControllerExtension, OverrideExecution, HookSupport) {
5
+ sap.ui.define(["sap/fe/base/ClassSupport", "sap/fe/core/helpers/ModelHelper", "sap/ui/core/mvc/ControllerExtension", "sap/ui/core/mvc/OverrideExecution", "./HookSupport"], function (ClassSupport, ModelHelper, ControllerExtension, OverrideExecution, HookSupport) {
6
6
  "use strict";
7
7
 
8
8
  var _dec, _dec2, _dec3, _dec4, _dec5, _dec6, _dec7, _dec8, _dec9, _dec10, _dec11, _dec12, _class, _class2;
@@ -21,7 +21,7 @@ sap.ui.define(["sap/fe/core/helpers/ClassSupport", "sap/fe/core/helpers/ModelHel
21
21
  * @public
22
22
  * @since 1.86.0
23
23
  */
24
- let Routing = (_dec = defineUI5Class("sap.fe.core.controllerextensions.Routing"), _dec2 = publicExtension(), _dec3 = extensible(OverrideExecution.After), _dec4 = publicExtension(), _dec5 = finalExtension(), _dec6 = publicExtension(), _dec7 = extensible(OverrideExecution.After), _dec8 = publicExtension(), _dec9 = extensible(OverrideExecution.After), _dec10 = hookable("after"), _dec11 = publicExtension(), _dec12 = finalExtension(), _dec(_class = (_class2 = /*#__PURE__*/function (_ControllerExtension) {
24
+ let Routing = (_dec = defineUI5Class("sap.fe.core.controllerextensions.Routing"), _dec2 = publicExtension(), _dec3 = extensible("AfterAsync"), _dec4 = publicExtension(), _dec5 = finalExtension(), _dec6 = publicExtension(), _dec7 = extensible(OverrideExecution.After), _dec8 = publicExtension(), _dec9 = extensible(OverrideExecution.After), _dec10 = hookable("after"), _dec11 = publicExtension(), _dec12 = finalExtension(), _dec(_class = (_class2 = /*#__PURE__*/function (_ControllerExtension) {
25
25
  _inheritsLoose(Routing, _ControllerExtension);
26
26
  function Routing() {
27
27
  return _ControllerExtension.apply(this, arguments) || this;
@@ -44,9 +44,7 @@ sap.ui.define(["sap/fe/core/helpers/ClassSupport", "sap/fe/core/helpers/ModelHel
44
44
  * @public
45
45
  * @since 1.86.0
46
46
  */
47
- _proto.
48
- // eslint-disable-next-line @typescript-eslint/no-unused-vars
49
- onBeforeNavigation = function onBeforeNavigation(mNavigationParameters) {
47
+ _proto.onBeforeNavigation = async function onBeforeNavigation(mNavigationParameters) {
50
48
  // to be overriden by the application
51
49
  return false;
52
50
  }
@@ -56,7 +54,7 @@ sap.ui.define(["sap/fe/core/helpers/ClassSupport", "sap/fe/core/helpers/ModelHel
56
54
  *
57
55
  * @param oContext Object containing the context to be navigated to
58
56
  * @param parameters Object containing the parameters for the navigation
59
- * @param parameters.preserveHistory By default, the internal algorithm decides whether the navigation preserves the previous entry. PreserveHistory allows you to override this behavior.
57
+ * @param parameters.preserveHistory By default, the internal algorithm decides whether the navigation preserves the previous entry. This parameter allows you to override this behavior.
60
58
  * @public
61
59
  * @since 1.90.0
62
60
  */;
@@ -126,4 +124,4 @@ sap.ui.define(["sap/fe/core/helpers/ClassSupport", "sap/fe/core/helpers/ModelHel
126
124
  }(ControllerExtension), (_applyDecoratedDescriptor(_class2.prototype, "onBeforeNavigation", [_dec2, _dec3], Object.getOwnPropertyDescriptor(_class2.prototype, "onBeforeNavigation"), _class2.prototype), _applyDecoratedDescriptor(_class2.prototype, "navigate", [_dec4, _dec5], Object.getOwnPropertyDescriptor(_class2.prototype, "navigate"), _class2.prototype), _applyDecoratedDescriptor(_class2.prototype, "onBeforeBinding", [_dec6, _dec7], Object.getOwnPropertyDescriptor(_class2.prototype, "onBeforeBinding"), _class2.prototype), _applyDecoratedDescriptor(_class2.prototype, "onAfterBinding", [_dec8, _dec9, _dec10], Object.getOwnPropertyDescriptor(_class2.prototype, "onAfterBinding"), _class2.prototype), _applyDecoratedDescriptor(_class2.prototype, "navigateToRoute", [_dec11, _dec12], Object.getOwnPropertyDescriptor(_class2.prototype, "navigateToRoute"), _class2.prototype)), _class2)) || _class);
127
125
  return Routing;
128
126
  }, false);
129
- //# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJuYW1lcyI6WyJSb3V0aW5nIiwiZGVmaW5lVUk1Q2xhc3MiLCJwdWJsaWNFeHRlbnNpb24iLCJleHRlbnNpYmxlIiwiT3ZlcnJpZGVFeGVjdXRpb24iLCJBZnRlciIsImZpbmFsRXh0ZW5zaW9uIiwiaG9va2FibGUiLCJvbkJlZm9yZU5hdmlnYXRpb24iLCJtTmF2aWdhdGlvblBhcmFtZXRlcnMiLCJuYXZpZ2F0ZSIsIm9Db250ZXh0IiwicGFyYW1ldGVycyIsImludGVybmFsTW9kZWwiLCJiYXNlIiwiZ2V0TW9kZWwiLCJzZXRQcm9wZXJ0eSIsIl9yb3V0aW5nIiwibmF2aWdhdGVUb0NvbnRleHQiLCJvbkJlZm9yZUJpbmRpbmciLCJvbkFmdGVyQmluZGluZyIsIm5hdmlnYXRlVG9Sb3V0ZSIsInNUYXJnZXRSb3V0ZU5hbWUiLCJvUGFyYW1ldGVycyIsIm9NZXRhTW9kZWwiLCJnZXRNZXRhTW9kZWwiLCJiSXNTdGlja3lNb2RlIiwiTW9kZWxIZWxwZXIiLCJpc1N0aWNreVNlc3Npb25TdXBwb3J0ZWQiLCJDb250cm9sbGVyRXh0ZW5zaW9uIl0sInNvdXJjZVJvb3QiOiIuIiwic291cmNlcyI6WyJSb3V0aW5nLnRzIl0sInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB0eXBlIFBhZ2VDb250cm9sbGVyIGZyb20gXCJzYXAvZmUvY29yZS9QYWdlQ29udHJvbGxlclwiO1xuaW1wb3J0IHsgZGVmaW5lVUk1Q2xhc3MsIGV4dGVuc2libGUsIGZpbmFsRXh0ZW5zaW9uLCBwdWJsaWNFeHRlbnNpb24gfSBmcm9tIFwic2FwL2ZlL2NvcmUvaGVscGVycy9DbGFzc1N1cHBvcnRcIjtcbmltcG9ydCBNb2RlbEhlbHBlciBmcm9tIFwic2FwL2ZlL2NvcmUvaGVscGVycy9Nb2RlbEhlbHBlclwiO1xuaW1wb3J0IENvbnRyb2xsZXJFeHRlbnNpb24gZnJvbSBcInNhcC91aS9jb3JlL212Yy9Db250cm9sbGVyRXh0ZW5zaW9uXCI7XG5pbXBvcnQgT3ZlcnJpZGVFeGVjdXRpb24gZnJvbSBcInNhcC91aS9jb3JlL212Yy9PdmVycmlkZUV4ZWN1dGlvblwiO1xuaW1wb3J0IHR5cGUgSlNPTk1vZGVsIGZyb20gXCJzYXAvdWkvbW9kZWwvanNvbi9KU09OTW9kZWxcIjtcbmltcG9ydCB0eXBlIENvbnRleHQgZnJvbSBcInNhcC91aS9tb2RlbC9vZGF0YS92NC9Db250ZXh0XCI7XG5pbXBvcnQgeyBob29rYWJsZSB9IGZyb20gXCIuL0hvb2tTdXBwb3J0XCI7XG5cbi8qKlxuICogQSBjb250cm9sbGVyIGV4dGVuc2lvbiBvZmZlcmluZyBob29rcyBpbnRvIHRoZSByb3V0aW5nIGZsb3cgb2YgdGhlIGFwcGxpY2F0aW9uXG4gKlxuICogQGhpZGVjb25zdHJ1Y3RvclxuICogQHB1YmxpY1xuICogQHNpbmNlIDEuODYuMFxuICovXG5AZGVmaW5lVUk1Q2xhc3MoXCJzYXAuZmUuY29yZS5jb250cm9sbGVyZXh0ZW5zaW9ucy5Sb3V0aW5nXCIpXG5jbGFzcyBSb3V0aW5nIGV4dGVuZHMgQ29udHJvbGxlckV4dGVuc2lvbiB7XG5cdHByaXZhdGUgYmFzZSE6IFBhZ2VDb250cm9sbGVyO1xuXG5cdC8qKlxuXHQgKiBUaGlzIGZ1bmN0aW9uIGNhbiBiZSB1c2VkIHRvIGludGVyY2VwdCB0aGUgcm91dGluZyBldmVudCBoYXBwZW5pbmcgZHVyaW5nIHRoZSBub3JtYWwgcHJvY2VzcyBvZiBuYXZpZ2F0aW5nIGZyb20gb25lIHBhZ2UgdG8gYW5vdGhlciAobGlrZSBjbGlja2luZyBvbiB0aGUgdGFibGUgcm93IHRvIG5hdmlnYXRlLCBvciB3aGVuIHBhZ2luYXRpb24gYnV0dG9ucyBhcmUgY2xpY2tlZCkuXG5cdCAqXG5cdCAqIFRoZSBmdW5jdGlvbiBpcyBOT1QgY2FsbGVkIGR1cmluZyBvdGhlciBtZWFucyBvZiBleHRlcm5hbCBvdXRib3VuZCBuYXZpZ2F0aW9uIChsaWtlIGEgbmF2aWdhdGlvbiBjb25maWd1cmVkIHZpYSBhIGxpbmssIG9yIGJ5IHVzaW5nIG5hdmlnYXRpb24gYnV0dG9ucykuXG5cdCAqXG5cdCAqIElmIGRlY2xhcmVkIGFzIGFuIGV4dGVuc2lvbiwgaXQgYWxsb3dzIHlvdSB0byBpbnRlcmNlcHQgYW5kIGNoYW5nZSB0aGUgbm9ybWFsIG5hdmlnYXRpb24gZmxvdy5cblx0ICogSWYgeW91IGRlY2lkZSB0byBkbyB5b3VyIG93biBuYXZpZ2F0aW9uIHByb2Nlc3NpbmcsIHlvdSBjYW4gcmV0dXJuIGB0cnVlYCB0byBwcmV2ZW50IHRoZSBkZWZhdWx0IHJvdXRpbmcgYmVoYXZpb3IuXG5cdCAqXG5cdCAqIFRoaXMgZnVuY3Rpb24gaXMgbWVhbnQgdG8gYmUgaW5kaXZpZHVhbGx5IG92ZXJyaWRkZW4gYnkgY29uc3VtaW5nIGNvbnRyb2xsZXJzLCBidXQgbm90IHRvIGJlIGNhbGxlZCBkaXJlY3RseS5cblx0ICogVGhlIG92ZXJyaWRlIGV4ZWN1dGlvbiBpczoge0BsaW5rIHNhcC51aS5jb3JlLm12Yy5PdmVycmlkZUV4ZWN1dGlvbi5BZnRlcn0uXG5cdCAqXG5cdCAqIEBwYXJhbSBtTmF2aWdhdGlvblBhcmFtZXRlcnMgT2JqZWN0IGNvbnRhaW5pbmcgcm93IGNvbnRleHQgYW5kIHBhZ2UgY29udGV4dFxuXHQgKiBAcGFyYW0gbU5hdmlnYXRpb25QYXJhbWV0ZXJzLmJpbmRpbmdDb250ZXh0IFRoZSBjdXJyZW50bHkgc2VsZWN0ZWQgY29udGV4dFxuXHQgKiBAcmV0dXJucyBgdHJ1ZWAgdG8gcHJldmVudCB0aGUgZGVmYXVsdCBleGVjdXRpb24sIGZhbHNlIHRvIGtlZXAgdGhlIHN0YW5kYXJkIGJlaGF2aW9yXG5cdCAqIEBwdWJsaWNcblx0ICogQHNpbmNlIDEuODYuMFxuXHQgKi9cblx0QHB1YmxpY0V4dGVuc2lvbigpXG5cdEBleHRlbnNpYmxlKE92ZXJyaWRlRXhlY3V0aW9uLkFmdGVyKVxuXHQvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgQHR5cGVzY3JpcHQtZXNsaW50L25vLXVudXNlZC12YXJzXG5cdG9uQmVmb3JlTmF2aWdhdGlvbihtTmF2aWdhdGlvblBhcmFtZXRlcnM6IHsgYmluZGluZ0NvbnRleHQ6IENvbnRleHQgfSk6IGJvb2xlYW4ge1xuXHRcdC8vIHRvIGJlIG92ZXJyaWRlbiBieSB0aGUgYXBwbGljYXRpb25cblx0XHRyZXR1cm4gZmFsc2U7XG5cdH1cblxuXHQvKipcblx0ICogQWxsb3dzIG5hdmlnYXRpb24gdG8gYSBzcGVjaWZpYyBjb250ZXh0LlxuXHQgKlxuXHQgKiBAcGFyYW0gb0NvbnRleHQgT2JqZWN0IGNvbnRhaW5pbmcgdGhlIGNvbnRleHQgdG8gYmUgbmF2aWdhdGVkIHRvXG5cdCAqIEBwYXJhbSBwYXJhbWV0ZXJzIE9iamVjdCBjb250YWluaW5nIHRoZSBwYXJhbWV0ZXJzIGZvciB0aGUgbmF2aWdhdGlvblxuXHQgKiBAcGFyYW0gcGFyYW1ldGVycy5wcmVzZXJ2ZUhpc3RvcnkgIEJ5IGRlZmF1bHQsIHRoZSBpbnRlcm5hbCBhbGdvcml0aG0gZGVjaWRlcyB3aGV0aGVyIHRoZSBuYXZpZ2F0aW9uIHByZXNlcnZlcyB0aGUgcHJldmlvdXMgZW50cnkuIFByZXNlcnZlSGlzdG9yeSBhbGxvd3MgeW91IHRvIG92ZXJyaWRlIHRoaXMgYmVoYXZpb3IuXG5cdCAqIEBwdWJsaWNcblx0ICogQHNpbmNlIDEuOTAuMFxuXHQgKi9cblx0QHB1YmxpY0V4dGVuc2lvbigpXG5cdEBmaW5hbEV4dGVuc2lvbigpXG5cdG5hdmlnYXRlKG9Db250ZXh0OiBDb250ZXh0LCBwYXJhbWV0ZXJzPzogeyBwcmVzZXJ2ZUhpc3Rvcnk6IGJvb2xlYW4gfSk6IHZvaWQge1xuXHRcdGNvbnN0IGludGVybmFsTW9kZWwgPSB0aGlzLmJhc2UuZ2V0TW9kZWwoXCJpbnRlcm5hbFwiKSBhcyBKU09OTW9kZWw7XG5cdFx0Ly8gV2UgaGF2ZSB0byBkZWxldGUgdGhlIGludGVybmFsIG1vZGVsIHZhbHVlIGZvciBcInBhZ2luYXRvckN1cnJlbnRDb250ZXh0XCIgdG8gZW5zdXJlIGl0IGlzIHJlLWV2YWx1YXRlZCBieSB0aGUgbmF2aWdhdGVUb0NvbnRleHQgZnVuY3Rpb25cblx0XHQvLyBCQ1A6IDIyNzAxMjM4MjBcblx0XHRpbnRlcm5hbE1vZGVsLnNldFByb3BlcnR5KFwiL3BhZ2luYXRvckN1cnJlbnRDb250ZXh0XCIsIG51bGwpO1xuXHRcdHRoaXMuYmFzZS5fcm91dGluZy5uYXZpZ2F0ZVRvQ29udGV4dChvQ29udGV4dCwgcGFyYW1ldGVycyk7XG5cdH1cblxuXHQvKipcblx0ICogVGhpcyBmdW5jdGlvbiBpcyB1c2VkIHRvIGludGVyY2VwdCB0aGUgcm91dGluZyBldmVudCBiZWZvcmUgYmluZGluZyBhIHBhZ2UuXG5cdCAqXG5cdCAqIElmIGl0IGlzIGRlY2xhcmVkIGFzIGFuIGV4dGVuc2lvbiwgaXQgYWxsb3dzIHlvdSB0byBpbnRlcmNlcHQgYW5kIGNoYW5nZSB0aGUgbm9ybWFsIGZsb3cgb2YgYmluZGluZy5cblx0ICpcblx0ICogVGhpcyBmdW5jdGlvbiBpcyBub3QgY2FsbGVkIGRpcmVjdGx5LCBidXQgb3ZlcnJpZGRlbiBzZXBhcmF0ZWx5IGJ5IGNvbnN1bWluZyBjb250cm9sbGVycy5cblx0ICogVGhlIG92ZXJyaWRlIGV4ZWN1dGlvbiBpczoge0BsaW5rIHNhcC51aS5jb3JlLm12Yy5PdmVycmlkZUV4ZWN1dGlvbi5BZnRlcn0uXG5cdCAqXG5cdCAqIEBwYXJhbSBvQ29udGV4dCBPYmplY3QgY29udGFpbmluZyB0aGUgY29udGV4dCBmb3IgdGhlIG5hdmlnYXRpb25cblx0ICogQHB1YmxpY1xuXHQgKiBAc2luY2UgMS45MC4wXG5cdCAqL1xuXHRAcHVibGljRXh0ZW5zaW9uKClcblx0QGV4dGVuc2libGUoT3ZlcnJpZGVFeGVjdXRpb24uQWZ0ZXIpXG5cdC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBAdHlwZXNjcmlwdC1lc2xpbnQvbm8tdW51c2VkLXZhcnNcblx0b25CZWZvcmVCaW5kaW5nKG9Db250ZXh0OiBvYmplY3QgfCBudWxsKTogdm9pZCB7XG5cdFx0Ly8gdG8gYmUgb3ZlcnJpZGVuIGJ5IHRoZSBhcHBsaWNhdGlvblxuXHR9XG5cblx0LyoqXG5cdCAqIFRoaXMgZnVuY3Rpb24gaXMgdXNlZCB0byBpbnRlcmNlcHQgdGhlIHJvdXRpbmcgZXZlbnQgYWZ0ZXIgYmluZGluZyBhIHBhZ2UuXG5cdCAqXG5cdCAqIElmIGl0IGlzIGRlY2xhcmVkIGFzIGFuIGV4dGVuc2lvbiwgaXQgYWxsb3dzIHlvdSB0byBpbnRlcmNlcHQgYW5kIGNoYW5nZSB0aGUgbm9ybWFsIGZsb3cgb2YgYmluZGluZy5cblx0ICpcblx0ICogVGhpcyBmdW5jdGlvbiBpcyBub3QgY2FsbGVkIGRpcmVjdGx5LCBidXQgb3ZlcnJpZGRlbiBzZXBhcmF0ZWx5IGJ5IGNvbnN1bWluZyBjb250cm9sbGVycy5cblx0ICogVGhlIG92ZXJyaWRlIGV4ZWN1dGlvbiBpczoge0BsaW5rIHNhcC51aS5jb3JlLm12Yy5PdmVycmlkZUV4ZWN1dGlvbi5BZnRlcn0uXG5cdCAqXG5cdCAqIEBwYXJhbSBvQ29udGV4dCBPYmplY3QgY29udGFpbmluZyB0aGUgY29udGV4dCB0byBiZSBuYXZpZ2F0ZWRcblx0ICogQHB1YmxpY1xuXHQgKiBAc2luY2UgMS45MC4wXG5cdCAqL1xuXHRAcHVibGljRXh0ZW5zaW9uKClcblx0QGV4dGVuc2libGUoT3ZlcnJpZGVFeGVjdXRpb24uQWZ0ZXIpXG5cdEBob29rYWJsZShcImFmdGVyXCIpXG5cdC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBAdHlwZXNjcmlwdC1lc2xpbnQvbm8tdW51c2VkLXZhcnNcblx0b25BZnRlckJpbmRpbmcob0NvbnRleHQ6IG9iamVjdCB8IG51bGwpOiB2b2lkIHtcblx0XHQvLyB0byBiZSBvdmVycmlkZW4gYnkgdGhlIGFwcGxpY2F0aW9uXG5cdH1cblxuXHQvKipcblx0ICogTmF2aWdhdGUgdG8gYW5vdGhlciB0YXJnZXQuXG5cdCAqXG5cdCAqIEBwYXJhbSBzVGFyZ2V0Um91dGVOYW1lIE5hbWUgb2YgdGhlIHRhcmdldCByb3V0ZVxuXHQgKiBAcGFyYW0gb1BhcmFtZXRlcnMgUGFyYW1ldGVycyB0byBiZSB1c2VkIHdpdGggcm91dGUgdG8gY3JlYXRlIHRoZSB0YXJnZXQgaGFzaFxuXHQgKiBAcGFyYW0gb1BhcmFtZXRlcnMuYklzU3RpY2t5TW9kZSBQUklWQVRFXG5cdCAqIEByZXR1cm5zIFByb21pc2UgdGhhdCBpcyByZXNvbHZlZCB3aGVuIHRoZSBuYXZpZ2F0aW9uIGlzIGZpbmFsaXplZFxuXHQgKiBAcHVibGljXG5cdCAqL1xuXHRAcHVibGljRXh0ZW5zaW9uKClcblx0QGZpbmFsRXh0ZW5zaW9uKClcblx0YXN5bmMgbmF2aWdhdGVUb1JvdXRlKHNUYXJnZXRSb3V0ZU5hbWU6IHN0cmluZywgb1BhcmFtZXRlcnM/OiB7IGJJc1N0aWNreU1vZGU/OiBib29sZWFuIH0pOiBQcm9taXNlPGJvb2xlYW4+IHtcblx0XHRjb25zdCBvTWV0YU1vZGVsID0gdGhpcy5iYXNlLmdldE1vZGVsKCkuZ2V0TWV0YU1vZGVsKCk7XG5cdFx0Y29uc3QgYklzU3RpY2t5TW9kZSA9IE1vZGVsSGVscGVyLmlzU3RpY2t5U2Vzc2lvblN1cHBvcnRlZChvTWV0YU1vZGVsKTtcblx0XHRpZiAoIW9QYXJhbWV0ZXJzKSB7XG5cdFx0XHRvUGFyYW1ldGVycyA9IHt9O1xuXHRcdH1cblx0XHRvUGFyYW1ldGVycy5iSXNTdGlja3lNb2RlID0gYklzU3RpY2t5TW9kZTtcblx0XHRyZXR1cm4gdGhpcy5iYXNlLl9yb3V0aW5nLm5hdmlnYXRlVG9Sb3V0ZShzVGFyZ2V0Um91dGVOYW1lLCBvUGFyYW1ldGVycyk7XG5cdH1cbn1cblxuZXhwb3J0IGRlZmF1bHQgUm91dGluZztcbiJdLCJtYXBwaW5ncyI6IjtBQUFBO0FBQUE7QUFBQTs7Ozs7Ozs7Ozs7OztFQVNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0VBTkEsSUFRTUEsT0FBTyxXQURaQyxjQUFjLENBQUMsMENBQTBDLENBQUMsVUFxQnpEQyxlQUFlLEVBQUUsVUFDakJDLFVBQVUsQ0FBQ0MsaUJBQWlCLENBQUNDLEtBQUssQ0FBQyxVQWdCbkNILGVBQWUsRUFBRSxVQUNqQkksY0FBYyxFQUFFLFVBcUJoQkosZUFBZSxFQUFFLFVBQ2pCQyxVQUFVLENBQUNDLGlCQUFpQixDQUFDQyxLQUFLLENBQUMsVUFrQm5DSCxlQUFlLEVBQUUsVUFDakJDLFVBQVUsQ0FBQ0MsaUJBQWlCLENBQUNDLEtBQUssQ0FBQyxXQUNuQ0UsUUFBUSxDQUFDLE9BQU8sQ0FBQyxXQWVqQkwsZUFBZSxFQUFFLFdBQ2pCSSxjQUFjLEVBQUU7SUFBQTtJQUFBO01BQUE7SUFBQTtJQUFBO0lBN0ZqQjtBQUNEO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0lBaEJDO0lBbUJBO0lBQ0FFLGtCQUFrQixHQUhsQiw0QkFHbUJDLHFCQUFrRCxFQUFXO01BQy9FO01BQ0EsT0FBTyxLQUFLO0lBQ2I7O0lBRUE7QUFDRDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLE9BUkM7SUFBQSxPQVdBQyxRQUFRLEdBRlIsa0JBRVNDLFFBQWlCLEVBQUVDLFVBQXlDLEVBQVE7TUFDNUUsTUFBTUMsYUFBYSxHQUFHLElBQUksQ0FBQ0MsSUFBSSxDQUFDQyxRQUFRLENBQUMsVUFBVSxDQUFjO01BQ2pFO01BQ0E7TUFDQUYsYUFBYSxDQUFDRyxXQUFXLENBQUMsMEJBQTBCLEVBQUUsSUFBSSxDQUFDO01BQzNELElBQUksQ0FBQ0YsSUFBSSxDQUFDRyxRQUFRLENBQUNDLGlCQUFpQixDQUFDUCxRQUFRLEVBQUVDLFVBQVUsQ0FBQztJQUMzRDs7SUFFQTtBQUNEO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsT0FYQztJQUFBO0lBY0E7SUFDQU8sZUFBZSxHQUhmLHlCQUdnQlIsUUFBdUIsRUFBUTtNQUM5QztJQUFBOztJQUdEO0FBQ0Q7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxPQVhDO0lBQUE7SUFlQTtJQUNBUyxjQUFjLEdBSmQsd0JBSWVULFFBQXVCLEVBQVE7TUFDN0M7SUFBQTs7SUFHRDtBQUNEO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsT0FSQztJQUFBLE9BV01VLGVBQWUsR0FGckIsK0JBRXNCQyxnQkFBd0IsRUFBRUMsV0FBeUMsRUFBb0I7TUFDNUcsTUFBTUMsVUFBVSxHQUFHLElBQUksQ0FBQ1YsSUFBSSxDQUFDQyxRQUFRLEVBQUUsQ0FBQ1UsWUFBWSxFQUFFO01BQ3RELE1BQU1DLGFBQWEsR0FBR0MsV0FBVyxDQUFDQyx3QkFBd0IsQ0FBQ0osVUFBVSxDQUFDO01BQ3RFLElBQUksQ0FBQ0QsV0FBVyxFQUFFO1FBQ2pCQSxXQUFXLEdBQUcsQ0FBQyxDQUFDO01BQ2pCO01BQ0FBLFdBQVcsQ0FBQ0csYUFBYSxHQUFHQSxhQUFhO01BQ3pDLE9BQU8sSUFBSSxDQUFDWixJQUFJLENBQUNHLFFBQVEsQ0FBQ0ksZUFBZSxDQUFDQyxnQkFBZ0IsRUFBRUMsV0FBVyxDQUFDO0lBQ3pFLENBQUM7SUFBQTtFQUFBLEVBekdvQk0sbUJBQW1CO0VBQUEsT0E0RzFCN0IsT0FBTztBQUFBIn0=
127
+ //# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJuYW1lcyI6WyJSb3V0aW5nIiwiZGVmaW5lVUk1Q2xhc3MiLCJwdWJsaWNFeHRlbnNpb24iLCJleHRlbnNpYmxlIiwiZmluYWxFeHRlbnNpb24iLCJPdmVycmlkZUV4ZWN1dGlvbiIsIkFmdGVyIiwiaG9va2FibGUiLCJvbkJlZm9yZU5hdmlnYXRpb24iLCJtTmF2aWdhdGlvblBhcmFtZXRlcnMiLCJuYXZpZ2F0ZSIsIm9Db250ZXh0IiwicGFyYW1ldGVycyIsImludGVybmFsTW9kZWwiLCJiYXNlIiwiZ2V0TW9kZWwiLCJzZXRQcm9wZXJ0eSIsIl9yb3V0aW5nIiwibmF2aWdhdGVUb0NvbnRleHQiLCJvbkJlZm9yZUJpbmRpbmciLCJvbkFmdGVyQmluZGluZyIsIm5hdmlnYXRlVG9Sb3V0ZSIsInNUYXJnZXRSb3V0ZU5hbWUiLCJvUGFyYW1ldGVycyIsIm9NZXRhTW9kZWwiLCJnZXRNZXRhTW9kZWwiLCJiSXNTdGlja3lNb2RlIiwiTW9kZWxIZWxwZXIiLCJpc1N0aWNreVNlc3Npb25TdXBwb3J0ZWQiLCJDb250cm9sbGVyRXh0ZW5zaW9uIl0sInNvdXJjZVJvb3QiOiIuIiwic291cmNlcyI6WyJSb3V0aW5nLnRzIl0sInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IGRlZmluZVVJNUNsYXNzLCBleHRlbnNpYmxlLCBmaW5hbEV4dGVuc2lvbiwgcHVibGljRXh0ZW5zaW9uIH0gZnJvbSBcInNhcC9mZS9iYXNlL0NsYXNzU3VwcG9ydFwiO1xuaW1wb3J0IHR5cGUgUGFnZUNvbnRyb2xsZXIgZnJvbSBcInNhcC9mZS9jb3JlL1BhZ2VDb250cm9sbGVyXCI7XG5pbXBvcnQgTW9kZWxIZWxwZXIgZnJvbSBcInNhcC9mZS9jb3JlL2hlbHBlcnMvTW9kZWxIZWxwZXJcIjtcbmltcG9ydCBDb250cm9sbGVyRXh0ZW5zaW9uIGZyb20gXCJzYXAvdWkvY29yZS9tdmMvQ29udHJvbGxlckV4dGVuc2lvblwiO1xuaW1wb3J0IE92ZXJyaWRlRXhlY3V0aW9uIGZyb20gXCJzYXAvdWkvY29yZS9tdmMvT3ZlcnJpZGVFeGVjdXRpb25cIjtcbmltcG9ydCB0eXBlIEpTT05Nb2RlbCBmcm9tIFwic2FwL3VpL21vZGVsL2pzb24vSlNPTk1vZGVsXCI7XG5pbXBvcnQgdHlwZSBDb250ZXh0IGZyb20gXCJzYXAvdWkvbW9kZWwvb2RhdGEvdjQvQ29udGV4dFwiO1xuaW1wb3J0IHsgaG9va2FibGUgfSBmcm9tIFwiLi9Ib29rU3VwcG9ydFwiO1xuXG4vKipcbiAqIEEgY29udHJvbGxlciBleHRlbnNpb24gb2ZmZXJpbmcgaG9va3MgaW50byB0aGUgcm91dGluZyBmbG93IG9mIHRoZSBhcHBsaWNhdGlvblxuICpcbiAqIEBoaWRlY29uc3RydWN0b3JcbiAqIEBwdWJsaWNcbiAqIEBzaW5jZSAxLjg2LjBcbiAqL1xuQGRlZmluZVVJNUNsYXNzKFwic2FwLmZlLmNvcmUuY29udHJvbGxlcmV4dGVuc2lvbnMuUm91dGluZ1wiKVxuY2xhc3MgUm91dGluZyBleHRlbmRzIENvbnRyb2xsZXJFeHRlbnNpb24ge1xuXHRwcml2YXRlIGJhc2UhOiBQYWdlQ29udHJvbGxlcjtcblxuXHQvKipcblx0ICogVGhpcyBmdW5jdGlvbiBjYW4gYmUgdXNlZCB0byBpbnRlcmNlcHQgdGhlIHJvdXRpbmcgZXZlbnQgaGFwcGVuaW5nIGR1cmluZyB0aGUgbm9ybWFsIHByb2Nlc3Mgb2YgbmF2aWdhdGluZyBmcm9tIG9uZSBwYWdlIHRvIGFub3RoZXIgKGxpa2UgY2xpY2tpbmcgb24gdGhlIHRhYmxlIHJvdyB0byBuYXZpZ2F0ZSwgb3Igd2hlbiBwYWdpbmF0aW9uIGJ1dHRvbnMgYXJlIGNsaWNrZWQpLlxuXHQgKlxuXHQgKiBUaGUgZnVuY3Rpb24gaXMgTk9UIGNhbGxlZCBkdXJpbmcgb3RoZXIgbWVhbnMgb2YgZXh0ZXJuYWwgb3V0Ym91bmQgbmF2aWdhdGlvbiAobGlrZSBhIG5hdmlnYXRpb24gY29uZmlndXJlZCB2aWEgYSBsaW5rLCBvciBieSB1c2luZyBuYXZpZ2F0aW9uIGJ1dHRvbnMpLlxuXHQgKlxuXHQgKiBJZiBkZWNsYXJlZCBhcyBhbiBleHRlbnNpb24sIGl0IGFsbG93cyB5b3UgdG8gaW50ZXJjZXB0IGFuZCBjaGFuZ2UgdGhlIG5vcm1hbCBuYXZpZ2F0aW9uIGZsb3cuXG5cdCAqIElmIHlvdSBkZWNpZGUgdG8gZG8geW91ciBvd24gbmF2aWdhdGlvbiBwcm9jZXNzaW5nLCB5b3UgY2FuIHJldHVybiBgdHJ1ZWAgdG8gcHJldmVudCB0aGUgZGVmYXVsdCByb3V0aW5nIGJlaGF2aW9yLlxuXHQgKlxuXHQgKiBUaGlzIGZ1bmN0aW9uIGlzIG1lYW50IHRvIGJlIGluZGl2aWR1YWxseSBvdmVycmlkZGVuIGJ5IGNvbnN1bWluZyBjb250cm9sbGVycywgYnV0IG5vdCB0byBiZSBjYWxsZWQgZGlyZWN0bHkuXG5cdCAqIFRoZSBvdmVycmlkZSBleGVjdXRpb24gaXM6IHtAbGluayBzYXAudWkuY29yZS5tdmMuT3ZlcnJpZGVFeGVjdXRpb24uQWZ0ZXJ9LlxuXHQgKlxuXHQgKiBAcGFyYW0gbU5hdmlnYXRpb25QYXJhbWV0ZXJzIE9iamVjdCBjb250YWluaW5nIHJvdyBjb250ZXh0IGFuZCBwYWdlIGNvbnRleHRcblx0ICogQHBhcmFtIG1OYXZpZ2F0aW9uUGFyYW1ldGVycy5iaW5kaW5nQ29udGV4dCBUaGUgY3VycmVudGx5IHNlbGVjdGVkIGNvbnRleHRcblx0ICogQHJldHVybnMgYHRydWVgIHRvIHByZXZlbnQgdGhlIGRlZmF1bHQgZXhlY3V0aW9uLCBmYWxzZSB0byBrZWVwIHRoZSBzdGFuZGFyZCBiZWhhdmlvclxuXHQgKiBAcHVibGljXG5cdCAqIEBzaW5jZSAxLjg2LjBcblx0ICovXG5cdEBwdWJsaWNFeHRlbnNpb24oKVxuXHRAZXh0ZW5zaWJsZShcIkFmdGVyQXN5bmNcIilcblx0Ly8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIEB0eXBlc2NyaXB0LWVzbGludC9uby11bnVzZWQtdmFyc1xuXHRhc3luYyBvbkJlZm9yZU5hdmlnYXRpb24obU5hdmlnYXRpb25QYXJhbWV0ZXJzOiB7IGJpbmRpbmdDb250ZXh0OiBDb250ZXh0IH0pOiBQcm9taXNlPGJvb2xlYW4+IHtcblx0XHQvLyB0byBiZSBvdmVycmlkZW4gYnkgdGhlIGFwcGxpY2F0aW9uXG5cdFx0cmV0dXJuIGZhbHNlO1xuXHR9XG5cblx0LyoqXG5cdCAqIEFsbG93cyBuYXZpZ2F0aW9uIHRvIGEgc3BlY2lmaWMgY29udGV4dC5cblx0ICpcblx0ICogQHBhcmFtIG9Db250ZXh0IE9iamVjdCBjb250YWluaW5nIHRoZSBjb250ZXh0IHRvIGJlIG5hdmlnYXRlZCB0b1xuXHQgKiBAcGFyYW0gcGFyYW1ldGVycyBPYmplY3QgY29udGFpbmluZyB0aGUgcGFyYW1ldGVycyBmb3IgdGhlIG5hdmlnYXRpb25cblx0ICogQHBhcmFtIHBhcmFtZXRlcnMucHJlc2VydmVIaXN0b3J5ICBCeSBkZWZhdWx0LCB0aGUgaW50ZXJuYWwgYWxnb3JpdGhtIGRlY2lkZXMgd2hldGhlciB0aGUgbmF2aWdhdGlvbiBwcmVzZXJ2ZXMgdGhlIHByZXZpb3VzIGVudHJ5LiBUaGlzIHBhcmFtZXRlciBhbGxvd3MgeW91IHRvIG92ZXJyaWRlIHRoaXMgYmVoYXZpb3IuXG5cdCAqIEBwdWJsaWNcblx0ICogQHNpbmNlIDEuOTAuMFxuXHQgKi9cblx0QHB1YmxpY0V4dGVuc2lvbigpXG5cdEBmaW5hbEV4dGVuc2lvbigpXG5cdG5hdmlnYXRlKG9Db250ZXh0OiBDb250ZXh0LCBwYXJhbWV0ZXJzPzogeyBwcmVzZXJ2ZUhpc3Rvcnk6IGJvb2xlYW4gfSk6IHZvaWQge1xuXHRcdGNvbnN0IGludGVybmFsTW9kZWwgPSB0aGlzLmJhc2UuZ2V0TW9kZWwoXCJpbnRlcm5hbFwiKSBhcyBKU09OTW9kZWw7XG5cdFx0Ly8gV2UgaGF2ZSB0byBkZWxldGUgdGhlIGludGVybmFsIG1vZGVsIHZhbHVlIGZvciBcInBhZ2luYXRvckN1cnJlbnRDb250ZXh0XCIgdG8gZW5zdXJlIGl0IGlzIHJlLWV2YWx1YXRlZCBieSB0aGUgbmF2aWdhdGVUb0NvbnRleHQgZnVuY3Rpb25cblx0XHQvLyBCQ1A6IDIyNzAxMjM4MjBcblx0XHRpbnRlcm5hbE1vZGVsLnNldFByb3BlcnR5KFwiL3BhZ2luYXRvckN1cnJlbnRDb250ZXh0XCIsIG51bGwpO1xuXHRcdHRoaXMuYmFzZS5fcm91dGluZy5uYXZpZ2F0ZVRvQ29udGV4dChvQ29udGV4dCwgcGFyYW1ldGVycyk7XG5cdH1cblxuXHQvKipcblx0ICogVGhpcyBmdW5jdGlvbiBpcyB1c2VkIHRvIGludGVyY2VwdCB0aGUgcm91dGluZyBldmVudCBiZWZvcmUgYmluZGluZyBhIHBhZ2UuXG5cdCAqXG5cdCAqIElmIGl0IGlzIGRlY2xhcmVkIGFzIGFuIGV4dGVuc2lvbiwgaXQgYWxsb3dzIHlvdSB0byBpbnRlcmNlcHQgYW5kIGNoYW5nZSB0aGUgbm9ybWFsIGZsb3cgb2YgYmluZGluZy5cblx0ICpcblx0ICogVGhpcyBmdW5jdGlvbiBpcyBub3QgY2FsbGVkIGRpcmVjdGx5LCBidXQgb3ZlcnJpZGRlbiBzZXBhcmF0ZWx5IGJ5IGNvbnN1bWluZyBjb250cm9sbGVycy5cblx0ICogVGhlIG92ZXJyaWRlIGV4ZWN1dGlvbiBpczoge0BsaW5rIHNhcC51aS5jb3JlLm12Yy5PdmVycmlkZUV4ZWN1dGlvbi5BZnRlcn0uXG5cdCAqXG5cdCAqIEBwYXJhbSBvQ29udGV4dCBPYmplY3QgY29udGFpbmluZyB0aGUgY29udGV4dCBmb3IgdGhlIG5hdmlnYXRpb25cblx0ICogQHB1YmxpY1xuXHQgKiBAc2luY2UgMS45MC4wXG5cdCAqL1xuXHRAcHVibGljRXh0ZW5zaW9uKClcblx0QGV4dGVuc2libGUoT3ZlcnJpZGVFeGVjdXRpb24uQWZ0ZXIpXG5cdC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBAdHlwZXNjcmlwdC1lc2xpbnQvbm8tdW51c2VkLXZhcnNcblx0b25CZWZvcmVCaW5kaW5nKG9Db250ZXh0OiBvYmplY3QgfCBudWxsKTogdm9pZCB7XG5cdFx0Ly8gdG8gYmUgb3ZlcnJpZGVuIGJ5IHRoZSBhcHBsaWNhdGlvblxuXHR9XG5cblx0LyoqXG5cdCAqIFRoaXMgZnVuY3Rpb24gaXMgdXNlZCB0byBpbnRlcmNlcHQgdGhlIHJvdXRpbmcgZXZlbnQgYWZ0ZXIgYmluZGluZyBhIHBhZ2UuXG5cdCAqXG5cdCAqIElmIGl0IGlzIGRlY2xhcmVkIGFzIGFuIGV4dGVuc2lvbiwgaXQgYWxsb3dzIHlvdSB0byBpbnRlcmNlcHQgYW5kIGNoYW5nZSB0aGUgbm9ybWFsIGZsb3cgb2YgYmluZGluZy5cblx0ICpcblx0ICogVGhpcyBmdW5jdGlvbiBpcyBub3QgY2FsbGVkIGRpcmVjdGx5LCBidXQgb3ZlcnJpZGRlbiBzZXBhcmF0ZWx5IGJ5IGNvbnN1bWluZyBjb250cm9sbGVycy5cblx0ICogVGhlIG92ZXJyaWRlIGV4ZWN1dGlvbiBpczoge0BsaW5rIHNhcC51aS5jb3JlLm12Yy5PdmVycmlkZUV4ZWN1dGlvbi5BZnRlcn0uXG5cdCAqXG5cdCAqIEBwYXJhbSBvQ29udGV4dCBPYmplY3QgY29udGFpbmluZyB0aGUgY29udGV4dCB0byBiZSBuYXZpZ2F0ZWRcblx0ICogQHB1YmxpY1xuXHQgKiBAc2luY2UgMS45MC4wXG5cdCAqL1xuXHRAcHVibGljRXh0ZW5zaW9uKClcblx0QGV4dGVuc2libGUoT3ZlcnJpZGVFeGVjdXRpb24uQWZ0ZXIpXG5cdEBob29rYWJsZShcImFmdGVyXCIpXG5cdC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBAdHlwZXNjcmlwdC1lc2xpbnQvbm8tdW51c2VkLXZhcnNcblx0b25BZnRlckJpbmRpbmcob0NvbnRleHQ6IG9iamVjdCB8IG51bGwpOiB2b2lkIHtcblx0XHQvLyB0byBiZSBvdmVycmlkZW4gYnkgdGhlIGFwcGxpY2F0aW9uXG5cdH1cblxuXHQvKipcblx0ICogTmF2aWdhdGUgdG8gYW5vdGhlciB0YXJnZXQuXG5cdCAqXG5cdCAqIEBwYXJhbSBzVGFyZ2V0Um91dGVOYW1lIE5hbWUgb2YgdGhlIHRhcmdldCByb3V0ZVxuXHQgKiBAcGFyYW0gb1BhcmFtZXRlcnMgUGFyYW1ldGVycyB0byBiZSB1c2VkIHdpdGggcm91dGUgdG8gY3JlYXRlIHRoZSB0YXJnZXQgaGFzaFxuXHQgKiBAcGFyYW0gb1BhcmFtZXRlcnMuYklzU3RpY2t5TW9kZSBQUklWQVRFXG5cdCAqIEByZXR1cm5zIFByb21pc2UgdGhhdCBpcyByZXNvbHZlZCB3aGVuIHRoZSBuYXZpZ2F0aW9uIGlzIGZpbmFsaXplZFxuXHQgKiBAcHVibGljXG5cdCAqL1xuXHRAcHVibGljRXh0ZW5zaW9uKClcblx0QGZpbmFsRXh0ZW5zaW9uKClcblx0YXN5bmMgbmF2aWdhdGVUb1JvdXRlKHNUYXJnZXRSb3V0ZU5hbWU6IHN0cmluZywgb1BhcmFtZXRlcnM/OiB7IGJJc1N0aWNreU1vZGU/OiBib29sZWFuIH0pOiBQcm9taXNlPGJvb2xlYW4+IHtcblx0XHRjb25zdCBvTWV0YU1vZGVsID0gdGhpcy5iYXNlLmdldE1vZGVsKCkuZ2V0TWV0YU1vZGVsKCk7XG5cdFx0Y29uc3QgYklzU3RpY2t5TW9kZSA9IE1vZGVsSGVscGVyLmlzU3RpY2t5U2Vzc2lvblN1cHBvcnRlZChvTWV0YU1vZGVsKTtcblx0XHRpZiAoIW9QYXJhbWV0ZXJzKSB7XG5cdFx0XHRvUGFyYW1ldGVycyA9IHt9O1xuXHRcdH1cblx0XHRvUGFyYW1ldGVycy5iSXNTdGlja3lNb2RlID0gYklzU3RpY2t5TW9kZTtcblx0XHRyZXR1cm4gdGhpcy5iYXNlLl9yb3V0aW5nLm5hdmlnYXRlVG9Sb3V0ZShzVGFyZ2V0Um91dGVOYW1lLCBvUGFyYW1ldGVycyk7XG5cdH1cbn1cblxuZXhwb3J0IGRlZmF1bHQgUm91dGluZztcbiJdLCJtYXBwaW5ncyI6IjtBQUFBO0FBQUE7QUFBQTs7Ozs7Ozs7Ozs7OztFQVNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0VBTkEsSUFRTUEsT0FBTyxXQURaQyxjQUFjLENBQUMsMENBQTBDLENBQUMsVUFxQnpEQyxlQUFlLEVBQUUsVUFDakJDLFVBQVUsQ0FBQyxZQUFZLENBQUMsVUFnQnhCRCxlQUFlLEVBQUUsVUFDakJFLGNBQWMsRUFBRSxVQXFCaEJGLGVBQWUsRUFBRSxVQUNqQkMsVUFBVSxDQUFDRSxpQkFBaUIsQ0FBQ0MsS0FBSyxDQUFDLFVBa0JuQ0osZUFBZSxFQUFFLFVBQ2pCQyxVQUFVLENBQUNFLGlCQUFpQixDQUFDQyxLQUFLLENBQUMsV0FDbkNDLFFBQVEsQ0FBQyxPQUFPLENBQUMsV0FlakJMLGVBQWUsRUFBRSxXQUNqQkUsY0FBYyxFQUFFO0lBQUE7SUFBQTtNQUFBO0lBQUE7SUFBQTtJQTdGakI7QUFDRDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtJQWhCQyxPQW9CTUksa0JBQWtCLEdBSHhCLGtDQUd5QkMscUJBQWtELEVBQW9CO01BQzlGO01BQ0EsT0FBTyxLQUFLO0lBQ2I7O0lBRUE7QUFDRDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLE9BUkM7SUFBQSxPQVdBQyxRQUFRLEdBRlIsa0JBRVNDLFFBQWlCLEVBQUVDLFVBQXlDLEVBQVE7TUFDNUUsTUFBTUMsYUFBYSxHQUFHLElBQUksQ0FBQ0MsSUFBSSxDQUFDQyxRQUFRLENBQUMsVUFBVSxDQUFjO01BQ2pFO01BQ0E7TUFDQUYsYUFBYSxDQUFDRyxXQUFXLENBQUMsMEJBQTBCLEVBQUUsSUFBSSxDQUFDO01BQzNELElBQUksQ0FBQ0YsSUFBSSxDQUFDRyxRQUFRLENBQUNDLGlCQUFpQixDQUFDUCxRQUFRLEVBQUVDLFVBQVUsQ0FBQztJQUMzRDs7SUFFQTtBQUNEO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsT0FYQztJQUFBO0lBY0E7SUFDQU8sZUFBZSxHQUhmLHlCQUdnQlIsUUFBdUIsRUFBUTtNQUM5QztJQUFBOztJQUdEO0FBQ0Q7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxPQVhDO0lBQUE7SUFlQTtJQUNBUyxjQUFjLEdBSmQsd0JBSWVULFFBQXVCLEVBQVE7TUFDN0M7SUFBQTs7SUFHRDtBQUNEO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsT0FSQztJQUFBLE9BV01VLGVBQWUsR0FGckIsK0JBRXNCQyxnQkFBd0IsRUFBRUMsV0FBeUMsRUFBb0I7TUFDNUcsTUFBTUMsVUFBVSxHQUFHLElBQUksQ0FBQ1YsSUFBSSxDQUFDQyxRQUFRLEVBQUUsQ0FBQ1UsWUFBWSxFQUFFO01BQ3RELE1BQU1DLGFBQWEsR0FBR0MsV0FBVyxDQUFDQyx3QkFBd0IsQ0FBQ0osVUFBVSxDQUFDO01BQ3RFLElBQUksQ0FBQ0QsV0FBVyxFQUFFO1FBQ2pCQSxXQUFXLEdBQUcsQ0FBQyxDQUFDO01BQ2pCO01BQ0FBLFdBQVcsQ0FBQ0csYUFBYSxHQUFHQSxhQUFhO01BQ3pDLE9BQU8sSUFBSSxDQUFDWixJQUFJLENBQUNHLFFBQVEsQ0FBQ0ksZUFBZSxDQUFDQyxnQkFBZ0IsRUFBRUMsV0FBVyxDQUFDO0lBQ3pFLENBQUM7SUFBQTtFQUFBLEVBekdvQk0sbUJBQW1CO0VBQUEsT0E0RzFCN0IsT0FBTztBQUFBIn0=
@@ -1,5 +1,5 @@
1
+ import { defineUI5Class, extensible, finalExtension, publicExtension } from "sap/fe/base/ClassSupport";
1
2
  import type PageController from "sap/fe/core/PageController";
2
- import { defineUI5Class, extensible, finalExtension, publicExtension } from "sap/fe/core/helpers/ClassSupport";
3
3
  import ModelHelper from "sap/fe/core/helpers/ModelHelper";
4
4
  import ControllerExtension from "sap/ui/core/mvc/ControllerExtension";
5
5
  import OverrideExecution from "sap/ui/core/mvc/OverrideExecution";
@@ -36,9 +36,9 @@ class Routing extends ControllerExtension {
36
36
  * @since 1.86.0
37
37
  */
38
38
  @publicExtension()
39
- @extensible(OverrideExecution.After)
39
+ @extensible("AfterAsync")
40
40
  // eslint-disable-next-line @typescript-eslint/no-unused-vars
41
- onBeforeNavigation(mNavigationParameters: { bindingContext: Context }): boolean {
41
+ async onBeforeNavigation(mNavigationParameters: { bindingContext: Context }): Promise<boolean> {
42
42
  // to be overriden by the application
43
43
  return false;
44
44
  }
@@ -48,7 +48,7 @@ class Routing extends ControllerExtension {
48
48
  *
49
49
  * @param oContext Object containing the context to be navigated to
50
50
  * @param parameters Object containing the parameters for the navigation
51
- * @param parameters.preserveHistory By default, the internal algorithm decides whether the navigation preserves the previous entry. PreserveHistory allows you to override this behavior.
51
+ * @param parameters.preserveHistory By default, the internal algorithm decides whether the navigation preserves the previous entry. This parameter allows you to override this behavior.
52
52
  * @public
53
53
  * @since 1.90.0
54
54
  */