@sapui5/sap.fe.core 1.131.0 → 1.133.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 (317) hide show
  1. package/package.json +1 -1
  2. package/src/sap/fe/core/.library +1 -1
  3. package/src/sap/fe/core/ActionRuntime.js +17 -23
  4. package/src/sap/fe/core/AppComponent.js +74 -36
  5. package/src/sap/fe/core/AppComponent.ts +70 -3
  6. package/src/sap/fe/core/AppStateHandler.js +44 -13
  7. package/src/sap/fe/core/AppStateHandler.ts +38 -0
  8. package/src/sap/fe/core/BaseController.js +3 -3
  9. package/src/sap/fe/core/CommonUtils.js +30 -37
  10. package/src/sap/fe/core/CommonUtils.ts +15 -13
  11. package/src/sap/fe/core/ExtensionAPI.js +29 -34
  12. package/src/sap/fe/core/ExtensionAPI.ts +3 -0
  13. package/src/sap/fe/core/InsightsFormattersExtension.js +2 -2
  14. package/src/sap/fe/core/PageController.js +40 -31
  15. package/src/sap/fe/core/PageController.ts +14 -1
  16. package/src/sap/fe/core/ResourceModel.js +4 -4
  17. package/src/sap/fe/core/ReuseComponent.js +27 -13
  18. package/src/sap/fe/core/ReuseComponent.ts +18 -0
  19. package/src/sap/fe/core/TemplateComponent.js +102 -89
  20. package/src/sap/fe/core/TemplateComponent.ts +20 -1
  21. package/src/sap/fe/core/TemplateModel.js +6 -7
  22. package/src/sap/fe/core/UIProvider.js +1 -1
  23. package/src/sap/fe/core/UIProvider.ts +2 -9
  24. package/src/sap/fe/core/buildingBlocks/BuildingBlock.js +63 -48
  25. package/src/sap/fe/core/buildingBlocks/BuildingBlock.ts +56 -27
  26. package/src/sap/fe/core/buildingBlocks/IBuildingBlockOwnerComponent.js +9 -0
  27. package/src/sap/fe/core/buildingBlocks/IBuildingBlockOwnerComponent.ts +48 -0
  28. package/src/sap/fe/core/buildingBlocks/TraceInfo.js +4 -6
  29. package/src/sap/fe/core/buildingBlocks/templating/AttributeModel.js +2 -2
  30. package/src/sap/fe/core/buildingBlocks/templating/BuildingBlockSupport.js +2 -3
  31. package/src/sap/fe/core/buildingBlocks/templating/BuildingBlockTemplateProcessor.js +32 -18
  32. package/src/sap/fe/core/buildingBlocks/templating/BuildingBlockTemplateProcessor.ts +30 -3
  33. package/src/sap/fe/core/buildingBlocks/templating/BuildingBlockTemplatingBase.js +9 -13
  34. package/src/sap/fe/core/buildingBlocks/templating/BuildingBlockTemplatingBase.ts +2 -1
  35. package/src/sap/fe/core/buildingBlocks/templating/RuntimeBuildingBlock.js +2 -2
  36. package/src/sap/fe/core/buildingBlocks/templating/RuntimeBuildingBlockFragment.js +19 -25
  37. package/src/sap/fe/core/buildingBlocks/templating/RuntimeBuildingBlockFragment.ts +1 -1
  38. package/src/sap/fe/core/controllerextensions/BaseControllerExtension.js +3 -4
  39. package/src/sap/fe/core/controllerextensions/CollaborativeDraft.js +20 -24
  40. package/src/sap/fe/core/controllerextensions/CollaborativeDraft.ts +10 -15
  41. package/src/sap/fe/core/controllerextensions/ContextSharing.js +3 -3
  42. package/src/sap/fe/core/controllerextensions/EditFlow.js +296 -246
  43. package/src/sap/fe/core/controllerextensions/EditFlow.ts +253 -175
  44. package/src/sap/fe/core/controllerextensions/Feedback.js +10 -11
  45. package/src/sap/fe/core/controllerextensions/IntentBasedNavigation.js +6 -6
  46. package/src/sap/fe/core/controllerextensions/IntentBasedNavigation.ts +1 -0
  47. package/src/sap/fe/core/controllerextensions/InternalIntentBasedNavigation.js +27 -36
  48. package/src/sap/fe/core/controllerextensions/InternalRouting.js +57 -78
  49. package/src/sap/fe/core/controllerextensions/InternalRouting.ts +42 -50
  50. package/src/sap/fe/core/controllerextensions/KPIManagement.js +12 -19
  51. package/src/sap/fe/core/controllerextensions/MessageHandler.js +23 -17
  52. package/src/sap/fe/core/controllerextensions/MessageHandler.ts +21 -7
  53. package/src/sap/fe/core/controllerextensions/PageReady.js +15 -21
  54. package/src/sap/fe/core/controllerextensions/Paginator.js +3 -3
  55. package/src/sap/fe/core/controllerextensions/Placeholder.js +3 -3
  56. package/src/sap/fe/core/controllerextensions/Recommendations.js +23 -36
  57. package/src/sap/fe/core/controllerextensions/Recommendations.ts +1 -1
  58. package/src/sap/fe/core/controllerextensions/Routing.js +3 -3
  59. package/src/sap/fe/core/controllerextensions/Share.js +19 -28
  60. package/src/sap/fe/core/controllerextensions/SideEffects.js +68 -32
  61. package/src/sap/fe/core/controllerextensions/SideEffects.ts +58 -6
  62. package/src/sap/fe/core/controllerextensions/Telemetry.js +4 -5
  63. package/src/sap/fe/core/controllerextensions/ViewState.js +23 -24
  64. package/src/sap/fe/core/controllerextensions/ViewState.ts +6 -1
  65. package/src/sap/fe/core/controllerextensions/cards/CollaborationManager.js +13 -10
  66. package/src/sap/fe/core/controllerextensions/cards/CollaborationManager.ts +13 -8
  67. package/src/sap/fe/core/controllerextensions/collaboration/ActivityBase.js +5 -5
  68. package/src/sap/fe/core/controllerextensions/collaboration/CollaborationCommon.js +15 -16
  69. package/src/sap/fe/core/controllerextensions/collaboration/CollaborationCommon.ts +3 -4
  70. package/src/sap/fe/core/controllerextensions/dialog/OperationsDialog.js +288 -0
  71. package/src/sap/fe/core/controllerextensions/dialog/{OperationsDialog.block.tsx → OperationsDialog.tsx} +27 -29
  72. package/src/sap/fe/core/controllerextensions/editFlow/NotApplicableContextDialog.js +41 -5
  73. package/src/sap/fe/core/controllerextensions/editFlow/NotApplicableContextDialog.tsx +61 -8
  74. package/src/sap/fe/core/controllerextensions/editFlow/ODataOperation.js +404 -0
  75. package/src/sap/fe/core/controllerextensions/editFlow/ODataOperation.ts +502 -0
  76. package/src/sap/fe/core/controllerextensions/editFlow/TransactionHelper.js +35 -43
  77. package/src/sap/fe/core/controllerextensions/editFlow/TransactionHelper.ts +34 -14
  78. package/src/sap/fe/core/controllerextensions/editFlow/draft.js +37 -27
  79. package/src/sap/fe/core/controllerextensions/editFlow/draft.ts +27 -15
  80. package/src/sap/fe/core/controllerextensions/editFlow/draftDataLossPopup.js +51 -39
  81. package/src/sap/fe/core/controllerextensions/editFlow/draftDataLossPopup.ts +75 -34
  82. package/src/sap/fe/core/controllerextensions/editFlow/editFlowConstants.js +4 -4
  83. package/src/sap/fe/core/controllerextensions/editFlow/operations/facade.js +88 -427
  84. package/src/sap/fe/core/controllerextensions/editFlow/operations/facade.ts +82 -620
  85. package/src/sap/fe/core/controllerextensions/editFlow/sticky.js +9 -5
  86. package/src/sap/fe/core/controllerextensions/editFlow/sticky.ts +6 -5
  87. package/src/sap/fe/core/controllerextensions/messageHandler/messageHandling.js +116 -79
  88. package/src/sap/fe/core/controllerextensions/messageHandler/messageHandling.ts +87 -13
  89. package/src/sap/fe/core/controllerextensions/pageReady/DataQueryWatcher.js +4 -6
  90. package/src/sap/fe/core/controllerextensions/recommendations/Telemetry.js +5 -7
  91. package/src/sap/fe/core/controllerextensions/routing/ContextPathHelper.js +6 -7
  92. package/src/sap/fe/core/controllerextensions/routing/NavigationReason.js +4 -4
  93. package/src/sap/fe/core/controllerextensions/routing/RouterProxy.js +58 -20
  94. package/src/sap/fe/core/controllerextensions/routing/RouterProxy.ts +55 -4
  95. package/src/sap/fe/core/controllerextensions/viewState/IViewStateContributor.js +1 -1
  96. package/src/sap/fe/core/controllerextensions/viewState/IViewStateContributor.ts +1 -1
  97. package/src/sap/fe/core/controllerextensions/viewState/IViewStateContributorMixin.js +9 -12
  98. package/src/sap/fe/core/controls/CommandExecution.js +2 -2
  99. package/src/sap/fe/core/controls/ComponentLoader.js +20 -21
  100. package/src/sap/fe/core/controls/DataLossOrDraftDiscard/DraftDataLossDialog.js +250 -0
  101. package/src/sap/fe/core/controls/DataLossOrDraftDiscard/{DraftDataLossDialog.block.tsx → DraftDataLossDialog.tsx} +31 -19
  102. package/src/sap/fe/core/controls/FormElementWrapper.js +19 -21
  103. package/src/sap/fe/core/controls/HideFormGroupAutomatically.js +114 -0
  104. package/src/sap/fe/core/controls/HideFormGroupAutomatically.ts +115 -0
  105. package/src/sap/fe/core/controls/Recommendations/ConfirmRecommendationDialog.js +454 -0
  106. package/src/sap/fe/core/controls/Recommendations/{ConfirmRecommendationDialog.block.tsx → ConfirmRecommendationDialog.tsx} +5 -9
  107. package/src/sap/fe/core/converters/ConverterContext.js +17 -18
  108. package/src/sap/fe/core/converters/ConverterContext.ts +10 -15
  109. package/src/sap/fe/core/converters/ManifestSettings.js +29 -28
  110. package/src/sap/fe/core/converters/ManifestSettings.ts +22 -1
  111. package/src/sap/fe/core/converters/ManifestWrapper.js +26 -48
  112. package/src/sap/fe/core/converters/MetaModelConverter.js +21 -28
  113. package/src/sap/fe/core/converters/MetaModelConverter.ts +2 -0
  114. package/src/sap/fe/core/converters/TemplateConverter.js +17 -21
  115. package/src/sap/fe/core/converters/TemplateConverter.ts +5 -3
  116. package/src/sap/fe/core/converters/annotations/DataField.js +69 -66
  117. package/src/sap/fe/core/converters/annotations/DataField.ts +30 -0
  118. package/src/sap/fe/core/converters/common/AnnotationConverter.js +20 -23
  119. package/src/sap/fe/core/converters/controls/Common/Action.js +178 -43
  120. package/src/sap/fe/core/converters/controls/Common/Action.ts +202 -19
  121. package/src/sap/fe/core/converters/controls/Common/Chart.js +47 -22
  122. package/src/sap/fe/core/converters/controls/Common/Chart.ts +50 -5
  123. package/src/sap/fe/core/converters/controls/Common/DataVisualization.js +16 -23
  124. package/src/sap/fe/core/converters/controls/Common/Form.js +25 -38
  125. package/src/sap/fe/core/converters/controls/Common/Form.ts +3 -0
  126. package/src/sap/fe/core/converters/controls/Common/KPI.js +32 -47
  127. package/src/sap/fe/core/converters/controls/Common/Table.js +464 -506
  128. package/src/sap/fe/core/converters/controls/Common/Table.ts +335 -219
  129. package/src/sap/fe/core/converters/controls/Common/table/StandardActions.js +17 -28
  130. package/src/sap/fe/core/converters/controls/Common/table/StandardActions.ts +1 -2
  131. package/src/sap/fe/core/converters/controls/ListReport/FilterBar.js +66 -90
  132. package/src/sap/fe/core/converters/controls/ListReport/FilterBar.ts +10 -1
  133. package/src/sap/fe/core/converters/controls/ListReport/VisualFilters.js +49 -73
  134. package/src/sap/fe/core/converters/controls/ObjectPage/Avatar.js +6 -10
  135. package/src/sap/fe/core/converters/controls/ObjectPage/HeaderFacet.js +35 -50
  136. package/src/sap/fe/core/converters/controls/ObjectPage/SubSection.js +110 -60
  137. package/src/sap/fe/core/converters/controls/ObjectPage/SubSection.ts +137 -41
  138. package/src/sap/fe/core/converters/helpers/Aggregation.js +19 -30
  139. package/src/sap/fe/core/converters/helpers/Aggregation.ts +5 -5
  140. package/src/sap/fe/core/converters/helpers/ConfigurableObject.js +11 -14
  141. package/src/sap/fe/core/converters/helpers/DataFieldHelper.js +14 -21
  142. package/src/sap/fe/core/converters/helpers/InsightsHelpers.js +4 -6
  143. package/src/sap/fe/core/converters/helpers/IssueManager.js +7 -7
  144. package/src/sap/fe/core/converters/helpers/Key.js +1 -1
  145. package/src/sap/fe/core/converters/helpers/SelectionVariantHelper.js +2 -3
  146. package/src/sap/fe/core/converters/objectPage/FormMenuActions.js +18 -52
  147. package/src/sap/fe/core/converters/objectPage/FormMenuActions.ts +0 -34
  148. package/src/sap/fe/core/converters/objectPage/HeaderAndFooterAction.js +103 -74
  149. package/src/sap/fe/core/converters/objectPage/HeaderAndFooterAction.ts +111 -39
  150. package/src/sap/fe/core/converters/templates/ListReportConverter.js +28 -31
  151. package/src/sap/fe/core/converters/templates/ListReportConverter.ts +17 -9
  152. package/src/sap/fe/core/converters/templates/ObjectPageConverter.js +61 -52
  153. package/src/sap/fe/core/converters/templates/ObjectPageConverter.ts +60 -21
  154. package/src/sap/fe/core/definition/FEDefinition.js +104 -44
  155. package/src/sap/fe/core/designtime/AppComponent.designtime.js +37 -7
  156. package/src/sap/fe/core/designtime/AppComponent.designtime.ts +42 -2
  157. package/src/sap/fe/core/formatters/CollaborationFormatter.js +4 -5
  158. package/src/sap/fe/core/formatters/FiscalFormat.js +24 -24
  159. package/src/sap/fe/core/formatters/ValueFormatter.js +4 -23
  160. package/src/sap/fe/core/formatters/ValueFormatter.ts +0 -18
  161. package/src/sap/fe/core/fpm/Component.js +12 -14
  162. package/src/sap/fe/core/fpm/manifest.json +1 -1
  163. package/src/sap/fe/core/helpers/AppStartupHelper.js +20 -15
  164. package/src/sap/fe/core/helpers/AppStartupHelper.ts +22 -13
  165. package/src/sap/fe/core/helpers/BindingHelper.js +3 -3
  166. package/src/sap/fe/core/helpers/BindingHelper.ts +1 -1
  167. package/src/sap/fe/core/helpers/DeleteHelper.js +55 -62
  168. package/src/sap/fe/core/helpers/DeleteHelper.ts +48 -51
  169. package/src/sap/fe/core/helpers/ExcelFormatHelper.js +4 -7
  170. package/src/sap/fe/core/helpers/FPMHelper.js +4 -7
  171. package/src/sap/fe/core/helpers/HTTP503Handler.js +2 -1
  172. package/src/sap/fe/core/helpers/HTTP503Handler.ts +4 -3
  173. package/src/sap/fe/core/helpers/KeepAliveHelper.js +5 -5
  174. package/src/sap/fe/core/helpers/KeepAliveRefreshTypes.js +6 -6
  175. package/src/sap/fe/core/helpers/LoaderUtils.js +8 -3
  176. package/src/sap/fe/core/helpers/LoaderUtils.ts +15 -4
  177. package/src/sap/fe/core/helpers/MessageStrip.js +3 -4
  178. package/src/sap/fe/core/helpers/MetaModelFunction.js +26 -40
  179. package/src/sap/fe/core/helpers/MetaPath.js +9 -7
  180. package/src/sap/fe/core/helpers/MetaPath.ts +9 -3
  181. package/src/sap/fe/core/helpers/ModelHelper.js +33 -57
  182. package/src/sap/fe/core/helpers/ModelHelper.ts +3 -3
  183. package/src/sap/fe/core/helpers/PasteHelper.js +11 -19
  184. package/src/sap/fe/core/helpers/PromiseKeeper.js +1 -1
  185. package/src/sap/fe/core/helpers/RecommendationHelper.js +3 -4
  186. package/src/sap/fe/core/helpers/ResourceModelHelper.js +3 -5
  187. package/src/sap/fe/core/helpers/SizeHelper.js +3 -5
  188. package/src/sap/fe/core/helpers/StableIdHelper.js +13 -11
  189. package/src/sap/fe/core/helpers/StableIdHelper.ts +5 -1
  190. package/src/sap/fe/core/helpers/StandardRecommendationHelper.js +28 -38
  191. package/src/sap/fe/core/helpers/Synchronization.js +1 -1
  192. package/src/sap/fe/core/helpers/TitleHelper.js +19 -40
  193. package/src/sap/fe/core/helpers/TitleHelper.ts +5 -25
  194. package/src/sap/fe/core/helpers/TypeGuards.js +25 -18
  195. package/src/sap/fe/core/helpers/TypeGuards.ts +7 -0
  196. package/src/sap/fe/core/helpers/WebSocket.js +4 -4
  197. package/src/sap/fe/core/library.js +8 -7
  198. package/src/sap/fe/core/library.ts +2 -0
  199. package/src/sap/fe/core/manifestMerger/AddNewPage.js +9 -11
  200. package/src/sap/fe/core/manifestMerger/ChangePageConfiguration.js +14 -25
  201. package/src/sap/fe/core/manifestMerger/ChangePageConfiguration.ts +15 -17
  202. package/src/sap/fe/core/messagebundle.properties +21 -0
  203. package/src/sap/fe/core/messagebundle_ar.properties +5 -1
  204. package/src/sap/fe/core/messagebundle_bg.properties +4 -0
  205. package/src/sap/fe/core/messagebundle_ca.properties +4 -0
  206. package/src/sap/fe/core/messagebundle_cnr.properties +4 -0
  207. package/src/sap/fe/core/messagebundle_cs.properties +8 -4
  208. package/src/sap/fe/core/messagebundle_cy.properties +4 -0
  209. package/src/sap/fe/core/messagebundle_da.properties +4 -0
  210. package/src/sap/fe/core/messagebundle_de.properties +4 -0
  211. package/src/sap/fe/core/messagebundle_el.properties +4 -0
  212. package/src/sap/fe/core/messagebundle_en.properties +4 -0
  213. package/src/sap/fe/core/messagebundle_en_GB.properties +4 -0
  214. package/src/sap/fe/core/messagebundle_en_US_saprigi.properties +4 -0
  215. package/src/sap/fe/core/messagebundle_en_US_saptrc.properties +249 -231
  216. package/src/sap/fe/core/messagebundle_es.properties +5 -1
  217. package/src/sap/fe/core/messagebundle_es_MX.properties +4 -0
  218. package/src/sap/fe/core/messagebundle_et.properties +4 -0
  219. package/src/sap/fe/core/messagebundle_fi.properties +4 -0
  220. package/src/sap/fe/core/messagebundle_fr.properties +6 -2
  221. package/src/sap/fe/core/messagebundle_fr_CA.properties +4 -0
  222. package/src/sap/fe/core/messagebundle_hi.properties +4 -0
  223. package/src/sap/fe/core/messagebundle_hr.properties +4 -0
  224. package/src/sap/fe/core/messagebundle_hu.properties +4 -0
  225. package/src/sap/fe/core/messagebundle_id.properties +4 -0
  226. package/src/sap/fe/core/messagebundle_it.properties +4 -0
  227. package/src/sap/fe/core/messagebundle_iw.properties +4 -0
  228. package/src/sap/fe/core/messagebundle_ja.properties +4 -0
  229. package/src/sap/fe/core/messagebundle_kk.properties +4 -0
  230. package/src/sap/fe/core/messagebundle_ko.properties +4 -0
  231. package/src/sap/fe/core/messagebundle_lt.properties +4 -0
  232. package/src/sap/fe/core/messagebundle_lv.properties +4 -0
  233. package/src/sap/fe/core/messagebundle_mk.properties +4 -0
  234. package/src/sap/fe/core/messagebundle_ms.properties +4 -0
  235. package/src/sap/fe/core/messagebundle_nl.properties +4 -0
  236. package/src/sap/fe/core/messagebundle_no.properties +4 -0
  237. package/src/sap/fe/core/messagebundle_pl.properties +4 -0
  238. package/src/sap/fe/core/messagebundle_pt.properties +4 -0
  239. package/src/sap/fe/core/messagebundle_pt_PT.properties +4 -0
  240. package/src/sap/fe/core/messagebundle_ro.properties +4 -0
  241. package/src/sap/fe/core/messagebundle_ru.properties +4 -0
  242. package/src/sap/fe/core/messagebundle_sh.properties +4 -0
  243. package/src/sap/fe/core/messagebundle_sk.properties +4 -0
  244. package/src/sap/fe/core/messagebundle_sl.properties +4 -0
  245. package/src/sap/fe/core/messagebundle_sr.properties +4 -0
  246. package/src/sap/fe/core/messagebundle_sv.properties +4 -0
  247. package/src/sap/fe/core/messagebundle_th.properties +4 -0
  248. package/src/sap/fe/core/messagebundle_tr.properties +5 -1
  249. package/src/sap/fe/core/messagebundle_uk.properties +4 -0
  250. package/src/sap/fe/core/messagebundle_vi.properties +4 -0
  251. package/src/sap/fe/core/messagebundle_zh_CN.properties +4 -0
  252. package/src/sap/fe/core/messagebundle_zh_TW.properties +4 -0
  253. package/src/sap/fe/core/operationsHelper.js +23 -27
  254. package/src/sap/fe/core/operationsHelper.ts +6 -7
  255. package/src/sap/fe/core/rootView/Fcl.controller.js +53 -40
  256. package/src/sap/fe/core/rootView/Fcl.controller.ts +42 -7
  257. package/src/sap/fe/core/rootView/NavContainer.controller.js +7 -10
  258. package/src/sap/fe/core/rootView/RootViewBaseController.js +22 -21
  259. package/src/sap/fe/core/rootView/RootViewBaseController.ts +10 -2
  260. package/src/sap/fe/core/services/AsyncComponentServiceFactory.js +3 -3
  261. package/src/sap/fe/core/services/CacheHandlerServiceFactory.js +4 -3
  262. package/src/sap/fe/core/services/CacheHandlerServiceFactory.ts +1 -0
  263. package/src/sap/fe/core/services/CollaborationManagerServiceFactory.js +12 -10
  264. package/src/sap/fe/core/services/CollaborationManagerServiceFactory.ts +6 -2
  265. package/src/sap/fe/core/services/CollaborativeToolsServiceFactory.js +8 -13
  266. package/src/sap/fe/core/services/ContextSharingServiceFactory.js +5 -7
  267. package/src/sap/fe/core/services/EnvironmentServiceFactory.js +31 -8
  268. package/src/sap/fe/core/services/EnvironmentServiceFactory.ts +31 -5
  269. package/src/sap/fe/core/services/InlineEditServiceFactory.js +190 -0
  270. package/src/sap/fe/core/services/InlineEditServiceFactory.ts +226 -0
  271. package/src/sap/fe/core/services/NavigationServiceFactory.js +10 -15
  272. package/src/sap/fe/core/services/ResourceModelServiceFactory.js +3 -3
  273. package/src/sap/fe/core/services/RoutingServiceFactory.js +76 -56
  274. package/src/sap/fe/core/services/RoutingServiceFactory.ts +47 -14
  275. package/src/sap/fe/core/services/ShellServicesFactory.js +32 -34
  276. package/src/sap/fe/core/services/SideEffectsServiceFactory.js +75 -60
  277. package/src/sap/fe/core/services/SideEffectsServiceFactory.ts +58 -12
  278. package/src/sap/fe/core/services/TelemetryServiceFactory.js +8 -9
  279. package/src/sap/fe/core/services/TemplatedViewServiceFactory.js +13 -18
  280. package/src/sap/fe/core/services/TemplatedViewServiceFactory.ts +3 -0
  281. package/src/sap/fe/core/services/ValueHelpHistoryServiceFactory.js +7 -9
  282. package/src/sap/fe/core/services/collaborativeDraftServiceFactory.js +12 -16
  283. package/src/sap/fe/core/services/collaborativeDraftServiceFactory.ts +1 -1
  284. package/src/sap/fe/core/services/valueHelpService/HistoryOptOutProvider.js +4 -7
  285. package/src/sap/fe/core/services/view/TemplatingErrorPage.controller.js +5 -6
  286. package/src/sap/fe/core/support/CommonHelper.js +2 -3
  287. package/src/sap/fe/core/support/Diagnostics.js +1 -1
  288. package/src/sap/fe/core/templating/ActionHelper.js +3 -4
  289. package/src/sap/fe/core/templating/CommonFormatters.js +6 -8
  290. package/src/sap/fe/core/templating/CommonFormatters.ts +2 -2
  291. package/src/sap/fe/core/templating/CriticalityFormatters.js +53 -5
  292. package/src/sap/fe/core/templating/CriticalityFormatters.ts +129 -7
  293. package/src/sap/fe/core/templating/DataFieldFormatters.js +8 -11
  294. package/src/sap/fe/core/templating/DataFieldFormatters.ts +1 -1
  295. package/src/sap/fe/core/templating/DataModelPathHelper.js +33 -56
  296. package/src/sap/fe/core/templating/DisplayModeFormatter.js +4 -5
  297. package/src/sap/fe/core/templating/EntitySetHelper.js +11 -19
  298. package/src/sap/fe/core/templating/EntityTypeHelper.js +4 -5
  299. package/src/sap/fe/core/templating/FieldControlHelper.js +13 -20
  300. package/src/sap/fe/core/templating/FilterTemplating.js +6 -9
  301. package/src/sap/fe/core/templating/PropertyHelper.js +33 -63
  302. package/src/sap/fe/core/templating/PropertyHelper.ts +0 -1
  303. package/src/sap/fe/core/templating/SemanticObjectHelper.js +13 -21
  304. package/src/sap/fe/core/templating/UIFormatters.js +57 -78
  305. package/src/sap/fe/core/templating/UIFormatters.ts +2 -1
  306. package/src/sap/fe/core/type/Date.js +2 -2
  307. package/src/sap/fe/core/type/DateTimeWithTimezone.js +3 -3
  308. package/src/sap/fe/core/type/EDM.js +3 -5
  309. package/src/sap/fe/core/type/Email.js +17 -6
  310. package/src/sap/fe/core/type/Email.ts +23 -4
  311. package/src/sap/fe/core/type/FiscalDate.js +8 -9
  312. package/src/sap/fe/core/type/InputMask.js +3 -4
  313. package/src/sap/fe/core/controllerextensions/dialog/OperationsDialog.block.js +0 -299
  314. package/src/sap/fe/core/controls/ActionParameterDialog.fragment.xml +0 -87
  315. package/src/sap/fe/core/controls/ActionParameterDialogValueHelp.fragment.xml +0 -43
  316. package/src/sap/fe/core/controls/DataLossOrDraftDiscard/DraftDataLossDialog.block.js +0 -251
  317. package/src/sap/fe/core/controls/Recommendations/ConfirmRecommendationDialog.block.js +0 -471
@@ -2,12 +2,12 @@
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/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) {
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", "./recommendations/Telemetry"], function (Log, ClassSupport, RecommendationHelper, StandardRecommendationHelper, ControllerExtension, OverrideExecution, CommonUtils, TransactionHelper, ConfirmRecommendationDialog, 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;
9
9
  var _exports = {};
10
- var RecommendationDialogDecision = ConfirmRecommendationDialog_block.RecommendationDialogDecision;
10
+ var RecommendationDialogDecision = ConfirmRecommendationDialog.RecommendationDialogDecision;
11
11
  var standardRecommendationHelper = StandardRecommendationHelper.standardRecommendationHelper;
12
12
  var recommendationHelper = RecommendationHelper.recommendationHelper;
13
13
  var publicExtension = ClassSupport.publicExtension;
@@ -19,16 +19,15 @@ sap.ui.define(["sap/base/Log", "sap/fe/base/ClassSupport", "sap/fe/core/helpers/
19
19
  function _setPrototypeOf(t, e) { return _setPrototypeOf = Object.setPrototypeOf ? Object.setPrototypeOf.bind() : function (t, e) { return t.__proto__ = e, t; }, _setPrototypeOf(t, e); }
20
20
  function _applyDecoratedDescriptor(i, e, r, n, l) { var a = {}; return Object.keys(n).forEach(function (i) { a[i] = n[i]; }), a.enumerable = !!a.enumerable, a.configurable = !!a.configurable, ("value" in a || a.initializer) && (a.writable = !0), a = r.slice().reverse().reduce(function (r, n) { return n(i, e, r) || r; }, a), l && void 0 !== a.initializer && (a.value = a.initializer ? a.initializer.call(l) : void 0, a.initializer = void 0), void 0 === a.initializer ? (Object.defineProperty(i, e, a), null) : a; }
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
- _inheritsLoose(Recommendations, _ControllerExtension);
23
- // the data shown in Accept/Ignore dialog of Recommendations
24
-
25
22
  function Recommendations() {
26
23
  var _this;
27
24
  _this = _ControllerExtension.call(this) || this;
25
+ // the data shown in Accept/Ignore dialog of Recommendations
28
26
  _this.dataToBeAccepted = [];
29
27
  return _this;
30
28
  }
31
29
  _exports = Recommendations;
30
+ _inheritsLoose(Recommendations, _ControllerExtension);
32
31
  var _proto = Recommendations.prototype;
33
32
  _proto.onInit = function onInit() {
34
33
  this.telemetry = new Telemetry();
@@ -38,9 +37,8 @@ sap.ui.define(["sap/base/Log", "sap/fe/base/ClassSupport", "sap/fe/core/helpers/
38
37
  };
39
38
  _proto.onAfterBinding = async function onAfterBinding(context) {
40
39
  if (context) {
41
- var _this$previousContext;
42
40
  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];
41
+ const previousContextBasePath = this.previousContext?.getPath().split("/")[1];
44
42
  // console.log('current::', currentContextBasePath);
45
43
  // console.log('previous', previousContextBasePath);
46
44
  this.rootContext = undefined;
@@ -105,8 +103,7 @@ sap.ui.define(["sap/base/Log", "sap/fe/base/ClassSupport", "sap/fe/core/helpers/
105
103
  * @returns True if recommendation is enabled else false.
106
104
  */;
107
105
  _proto.isRecommendationEnabled = function isRecommendationEnabled() {
108
- var _this$internalModel;
109
- return !!((_this$internalModel = this.internalModel) !== null && _this$internalModel !== void 0 && _this$internalModel.getProperty("/isRecommendationEnabled"));
106
+ return !!this.internalModel?.getProperty("/isRecommendationEnabled");
110
107
  }
111
108
 
112
109
  /**
@@ -144,7 +141,7 @@ sap.ui.define(["sap/base/Log", "sap/fe/base/ClassSupport", "sap/fe/core/helpers/
144
141
  const recommendationData = await this.base.recommendations.fetchRecommendations(contexts, rootContext);
145
142
  const endTime = performance.now();
146
143
  this.telemetry.updateResponseTimeInfo(endTime - startTime);
147
- if (recommendationData !== null && recommendationData !== void 0 && recommendationData.length) {
144
+ if (recommendationData?.length) {
148
145
  this.updateAllRecommendedFields(recommendationData);
149
146
  this.telemetry.updateDataFromRecommendationResponse(recommendationData);
150
147
  } else {
@@ -177,12 +174,11 @@ sap.ui.define(["sap/base/Log", "sap/fe/base/ClassSupport", "sap/fe/core/helpers/
177
174
  const filteredRecommendationContexts = this.fetchFilteredRecommendationContexts(targets);
178
175
  //filtering the child contexts from the available contexts
179
176
  const recommendationContext = filteredRecommendationContexts.filter(function (filteredRecommendationContext) {
180
- var _getPath;
181
- if ((_getPath = filteredRecommendationContext.context.getPath()) !== null && _getPath !== void 0 && _getPath.includes((contextInfo === null || contextInfo === void 0 ? void 0 : contextInfo.context).getPath())) {
177
+ if (filteredRecommendationContext.context.getPath()?.includes((contextInfo?.context).getPath())) {
182
178
  return filteredRecommendationContext;
183
179
  }
184
180
  });
185
- standardRecommendationHelper.clearIgnoredContexts(this.internalModel, (contextInfo === null || contextInfo === void 0 ? void 0 : contextInfo.context).getPath());
181
+ standardRecommendationHelper.clearIgnoredContexts(this.internalModel, (contextInfo?.context).getPath());
186
182
  return this.fetchAndApplyRecommendations(recommendationContext);
187
183
  } else {
188
184
  return false;
@@ -227,14 +223,13 @@ sap.ui.define(["sap/base/Log", "sap/fe/base/ClassSupport", "sap/fe/core/helpers/
227
223
  * @param contextsInfo
228
224
  */;
229
225
  _proto.storeRecommendationContexts = function storeRecommendationContexts(contextsInfo) {
230
- var _recommendationContex;
231
226
  const contextPaths = [];
232
227
  let recommendationContexts = this.internalModel.getProperty("/recommendationContexts") || [];
233
228
  contextsInfo.forEach(contextInfo => {
234
229
  contextPaths.push(contextInfo.context.getPath());
235
230
  });
236
- recommendationContexts = (_recommendationContex = recommendationContexts) === null || _recommendationContex === void 0 ? void 0 : _recommendationContex.filter(recommendationContext => {
237
- const context = recommendationContext === null || recommendationContext === void 0 ? void 0 : recommendationContext.context;
231
+ recommendationContexts = recommendationContexts?.filter(recommendationContext => {
232
+ const context = recommendationContext?.context;
238
233
  if (context) {
239
234
  const contextPath = context.getPath();
240
235
  const index = contextPaths.indexOf(contextPath);
@@ -280,9 +275,8 @@ sap.ui.define(["sap/base/Log", "sap/fe/base/ClassSupport", "sap/fe/core/helpers/
280
275
  * @returns RecommendationData
281
276
  */;
282
277
  _proto.fetchFilteredRecommendationData = function fetchFilteredRecommendationData(filteredTargets) {
283
- var _this$getView$getMode;
284
278
  const filterRecommendationsData = {};
285
- const recommendationData = (_this$getView$getMode = this.getView().getModel("internal")) === null || _this$getView$getMode === void 0 ? void 0 : _this$getView$getMode.getProperty("/recommendationsData");
279
+ const recommendationData = this.getView().getModel("internal")?.getProperty("/recommendationsData");
286
280
  Object.keys(recommendationData).forEach(key => {
287
281
  if (filteredTargets.includes(key)) {
288
282
  filterRecommendationsData[key] = Object.assign(recommendationData[key], {});
@@ -297,8 +291,7 @@ sap.ui.define(["sap/base/Log", "sap/fe/base/ClassSupport", "sap/fe/core/helpers/
297
291
  * @returns Array of Filtered targets
298
292
  */;
299
293
  _proto.fetchTargets = function fetchTargets(considerRecommendationContexts) {
300
- var _this$getView$getMode2;
301
- const recommendationData = (_this$getView$getMode2 = this.getView().getModel("internal")) === null || _this$getView$getMode2 === void 0 ? void 0 : _this$getView$getMode2.getProperty("/recommendationsData");
294
+ const recommendationData = this.getView().getModel("internal")?.getProperty("/recommendationsData");
302
295
  if (recommendationData.version === null) {
303
296
  return [];
304
297
  }
@@ -319,8 +312,8 @@ sap.ui.define(["sap/base/Log", "sap/fe/base/ClassSupport", "sap/fe/core/helpers/
319
312
  };
320
313
  if (isFclEnabled && !isFullScreen) {
321
314
  const rightMostContext = this.base.getAppComponent().getRootViewController().getRightmostContext();
322
- if (key.includes(rightMostContext === null || rightMostContext === void 0 ? void 0 : rightMostContext.getPath())) {
323
- return splitPathAndCheckIfRecommendationAcceptable(rightMostContext === null || rightMostContext === void 0 ? void 0 : rightMostContext.getPath());
315
+ if (key.includes(rightMostContext?.getPath())) {
316
+ return splitPathAndCheckIfRecommendationAcceptable(rightMostContext?.getPath());
324
317
  } else {
325
318
  return splitPathAndCheckIfRecommendationAcceptable(contextPath);
326
319
  }
@@ -330,8 +323,7 @@ sap.ui.define(["sap/base/Log", "sap/fe/base/ClassSupport", "sap/fe/core/helpers/
330
323
  };
331
324
  const dataToBeFiltered = this.fetchDataToBeFiltered(recommendationData, considerRecommendationContexts);
332
325
  return dataToBeFiltered.filter(key => {
333
- var _this$getView$getBind, _this$getView$getBind2;
334
- return key.includes((_this$getView$getBind = this.getView().getBindingContext()) === null || _this$getView$getBind === void 0 ? void 0 : _this$getView$getBind.getPath()) && isRecommendationAcceptable((_this$getView$getBind2 = this.getView().getBindingContext()) === null || _this$getView$getBind2 === void 0 ? void 0 : _this$getView$getBind2.getPath(), key);
326
+ return key.includes(this.getView().getBindingContext()?.getPath()) && isRecommendationAcceptable(this.getView().getBindingContext()?.getPath(), key);
335
327
  }) || [];
336
328
  }
337
329
 
@@ -345,8 +337,7 @@ sap.ui.define(["sap/base/Log", "sap/fe/base/ClassSupport", "sap/fe/core/helpers/
345
337
  let dataToBeFiltered = [];
346
338
  // consider recommendationContexts for fetching the paths in case of field change so that contexts for which empty recommendation data is returned are also considered
347
339
  if (considerRecommendationContexts) {
348
- var _this$getView$getMode3;
349
- const recommendationContexts = (_this$getView$getMode3 = this.getView().getModel("internal")) === null || _this$getView$getMode3 === void 0 ? void 0 : _this$getView$getMode3.getProperty("/recommendationContexts");
340
+ const recommendationContexts = this.getView().getModel("internal")?.getProperty("/recommendationContexts");
350
341
  recommendationContexts.forEach(recommendationContext => {
351
342
  dataToBeFiltered.push(recommendationContext.context.getPath());
352
343
  });
@@ -374,11 +365,11 @@ sap.ui.define(["sap/base/Log", "sap/fe/base/ClassSupport", "sap/fe/core/helpers/
374
365
  const contextPathFromKey = key.substring(0, key.lastIndexOf(")") + 1);
375
366
  const propertyPathFromKey = key.substring(key.lastIndexOf(")") + 2);
376
367
  const matchingContext = filterRecommendationContexts.filter(function (contextInfo) {
377
- if ((contextInfo === null || contextInfo === void 0 ? void 0 : contextInfo.context).getPath() === contextPathFromKey) {
368
+ if ((contextInfo?.context).getPath() === contextPathFromKey) {
378
369
  return true;
379
370
  }
380
371
  });
381
- if ((matchingContext === null || matchingContext === void 0 ? void 0 : matchingContext.length) > 0 && standardRecommendationHelper.isRecommendationFieldNull(matchingContext[0].context, key, propertyPathFromKey)) {
372
+ if (matchingContext?.length > 0 && standardRecommendationHelper.isRecommendationFieldNull(matchingContext[0].context, key, propertyPathFromKey)) {
382
373
  params.recommendationData.push({
383
374
  context: matchingContext[0].context,
384
375
  contextIdentifier: matchingContext[0].contextIdentifier,
@@ -396,14 +387,13 @@ sap.ui.define(["sap/base/Log", "sap/fe/base/ClassSupport", "sap/fe/core/helpers/
396
387
  * @returns Promise which resolves with AcceptallParams
397
388
  */;
398
389
  _proto.fetchAcceptAllParams = async function fetchAcceptAllParams() {
399
- var _this$getView, _this$getView$getBind3;
400
390
  const targets = this.fetchTargets();
401
391
  const filterRecommendationData = this.fetchFilteredRecommendationData(targets);
402
392
  const filterRecommendationContexts = this.fetchFilteredRecommendationContexts(targets);
403
393
  const params = {};
404
394
  this.adjustAcceptAllParams(filterRecommendationData, filterRecommendationContexts, params);
405
395
  await this.getView().getController().recommendations.onBeforeAcceptRecommendations(params);
406
- standardRecommendationHelper.addContextIdentifierText(params, (_this$getView = this.getView()) === null || _this$getView === void 0 ? void 0 : (_this$getView$getBind3 = _this$getView.getBindingContext()) === null || _this$getView$getBind3 === void 0 ? void 0 : _this$getView$getBind3.getPath());
396
+ standardRecommendationHelper.addContextIdentifierText(params, this.getView()?.getBindingContext()?.getPath());
407
397
  this.dataToBeAccepted = params.recommendationData || [];
408
398
  return params;
409
399
  }
@@ -481,10 +471,7 @@ sap.ui.define(["sap/base/Log", "sap/fe/base/ClassSupport", "sap/fe/core/helpers/
481
471
  */;
482
472
  _proto.updateAllRecommendedFields = function updateAllRecommendedFields(recommendationData) {
483
473
  const viewBindingContextPath = this.getView().getBindingContext().getPath();
484
- const newRecommendationsForCurrentContexts = recommendationData.filter(response => {
485
- var _response$AIRecommend;
486
- return (_response$AIRecommend = response["AIRecommendedFieldPath"]) === null || _response$AIRecommend === void 0 ? void 0 : _response$AIRecommend.includes(viewBindingContextPath);
487
- });
474
+ const newRecommendationsForCurrentContexts = recommendationData.filter(response => response["AIRecommendedFieldPath"]?.includes(viewBindingContextPath));
488
475
  if (!this.allRecommendedFields) {
489
476
  this.allRecommendedFields = [];
490
477
  }
@@ -499,8 +486,8 @@ sap.ui.define(["sap/base/Log", "sap/fe/base/ClassSupport", "sap/fe/core/helpers/
499
486
  });
500
487
  };
501
488
  return Recommendations;
502
- }(ControllerExtension), (_applyDecoratedDescriptor(_class2.prototype, "onInit", [_dec2], Object.getOwnPropertyDescriptor(_class2.prototype, "onInit"), _class2.prototype), _applyDecoratedDescriptor(_class2.prototype, "onAfterBinding", [_dec3], Object.getOwnPropertyDescriptor(_class2.prototype, "onAfterBinding"), _class2.prototype), _applyDecoratedDescriptor(_class2.prototype, "clearRecommendations", [_dec4], Object.getOwnPropertyDescriptor(_class2.prototype, "clearRecommendations"), _class2.prototype), _applyDecoratedDescriptor(_class2.prototype, "isEnabled", [_dec5, _dec6], Object.getOwnPropertyDescriptor(_class2.prototype, "isEnabled"), _class2.prototype), _applyDecoratedDescriptor(_class2.prototype, "isRecommendationEnabled", [_dec7, _dec8], Object.getOwnPropertyDescriptor(_class2.prototype, "isRecommendationEnabled"), _class2.prototype), _applyDecoratedDescriptor(_class2.prototype, "fetchRecommendations", [_dec9, _dec10], Object.getOwnPropertyDescriptor(_class2.prototype, "fetchRecommendations"), _class2.prototype), _applyDecoratedDescriptor(_class2.prototype, "fetchAndApplyRecommendations", [_dec11], Object.getOwnPropertyDescriptor(_class2.prototype, "fetchAndApplyRecommendations"), _class2.prototype), _applyDecoratedDescriptor(_class2.prototype, "fetchAndApplyRecommendationsOnFieldChange", [_dec12], Object.getOwnPropertyDescriptor(_class2.prototype, "fetchAndApplyRecommendationsOnFieldChange"), _class2.prototype), _applyDecoratedDescriptor(_class2.prototype, "onBeforeAcceptRecommendations", [_dec13, _dec14], Object.getOwnPropertyDescriptor(_class2.prototype, "onBeforeAcceptRecommendations"), _class2.prototype), _applyDecoratedDescriptor(_class2.prototype, "acceptRecommendations", [_dec15, _dec16], Object.getOwnPropertyDescriptor(_class2.prototype, "acceptRecommendations"), _class2.prototype)), _class2)) || _class);
489
+ }(ControllerExtension), _applyDecoratedDescriptor(_class2.prototype, "onInit", [_dec2], Object.getOwnPropertyDescriptor(_class2.prototype, "onInit"), _class2.prototype), _applyDecoratedDescriptor(_class2.prototype, "onAfterBinding", [_dec3], Object.getOwnPropertyDescriptor(_class2.prototype, "onAfterBinding"), _class2.prototype), _applyDecoratedDescriptor(_class2.prototype, "clearRecommendations", [_dec4], Object.getOwnPropertyDescriptor(_class2.prototype, "clearRecommendations"), _class2.prototype), _applyDecoratedDescriptor(_class2.prototype, "isEnabled", [_dec5, _dec6], Object.getOwnPropertyDescriptor(_class2.prototype, "isEnabled"), _class2.prototype), _applyDecoratedDescriptor(_class2.prototype, "isRecommendationEnabled", [_dec7, _dec8], Object.getOwnPropertyDescriptor(_class2.prototype, "isRecommendationEnabled"), _class2.prototype), _applyDecoratedDescriptor(_class2.prototype, "fetchRecommendations", [_dec9, _dec10], Object.getOwnPropertyDescriptor(_class2.prototype, "fetchRecommendations"), _class2.prototype), _applyDecoratedDescriptor(_class2.prototype, "fetchAndApplyRecommendations", [_dec11], Object.getOwnPropertyDescriptor(_class2.prototype, "fetchAndApplyRecommendations"), _class2.prototype), _applyDecoratedDescriptor(_class2.prototype, "fetchAndApplyRecommendationsOnFieldChange", [_dec12], Object.getOwnPropertyDescriptor(_class2.prototype, "fetchAndApplyRecommendationsOnFieldChange"), _class2.prototype), _applyDecoratedDescriptor(_class2.prototype, "onBeforeAcceptRecommendations", [_dec13, _dec14], Object.getOwnPropertyDescriptor(_class2.prototype, "onBeforeAcceptRecommendations"), _class2.prototype), _applyDecoratedDescriptor(_class2.prototype, "acceptRecommendations", [_dec15, _dec16], Object.getOwnPropertyDescriptor(_class2.prototype, "acceptRecommendations"), _class2.prototype), _class2)) || _class);
503
490
  _exports = Recommendations;
504
491
  return _exports;
505
492
  }, false);
506
- //# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJuYW1lcyI6WyJSZWNvbW1lbmRhdGlvbnMiLCJfZGVjIiwiZGVmaW5lVUk1Q2xhc3MiLCJfZGVjMiIsIm1ldGhvZE92ZXJyaWRlIiwiX2RlYzMiLCJfZGVjNCIsInB1YmxpY0V4dGVuc2lvbiIsIl9kZWM1IiwiX2RlYzYiLCJleHRlbnNpYmxlIiwiT3ZlcnJpZGVFeGVjdXRpb24iLCJJbnN0ZWFkIiwiX2RlYzciLCJfZGVjOCIsImZpbmFsRXh0ZW5zaW9uIiwiX2RlYzkiLCJfZGVjMTAiLCJfZGVjMTEiLCJfZGVjMTIiLCJfZGVjMTMiLCJfZGVjMTQiLCJfZGVjMTUiLCJfZGVjMTYiLCJfY2xhc3MiLCJfY2xhc3MyIiwiX0NvbnRyb2xsZXJFeHRlbnNpb24iLCJfaW5oZXJpdHNMb29zZSIsIl90aGlzIiwiY2FsbCIsImRhdGFUb0JlQWNjZXB0ZWQiLCJfZXhwb3J0cyIsIl9wcm90byIsInByb3RvdHlwZSIsIm9uSW5pdCIsInRlbGVtZXRyeSIsIlRlbGVtZXRyeSIsImFsbFJlY29tbWVuZGVkRmllbGRzIiwiaW50ZXJuYWxNb2RlbCIsImJhc2UiLCJnZXRWaWV3IiwiZ2V0TW9kZWwiLCJwcmV2aW91c0NvbnRleHQiLCJ1bmRlZmluZWQiLCJvbkFmdGVyQmluZGluZyIsImNvbnRleHQiLCJfdGhpcyRwcmV2aW91c0NvbnRleHQiLCJjdXJyZW50Q29udGV4dEJhc2VQYXRoIiwiZ2V0UGF0aCIsInNwbGl0IiwicHJldmlvdXNDb250ZXh0QmFzZVBhdGgiLCJyb290Q29udGV4dCIsImlzUmVjb21tZW5kYXRpb25FbmFibGVkIiwiZ2V0UHJvcGVydHkiLCJfZ2V0Um9vdENvbnRleHQiLCJyZWNvbW1lbmRhdGlvbnMiLCJpc0VuYWJsZWQiLCJzZXRQcm9wZXJ0eSIsImlzRmNsRW5hYmxlZCIsImdldEFwcENvbXBvbmVudCIsIl9pc0ZjbEVuYWJsZWQiLCJpc0Z1bGxTY3JlZW4iLCJnZXRSb290Vmlld0NvbnRyb2xsZXIiLCJnZXRIZWxwZXIiLCJnZXRDdXJyZW50VUlTdGF0ZSIsInRyeVJlc2V0UmVjb21tZW5kYXRpb25zIiwicmVzZXREYXRhIiwicHJvZ3JhbW1pbmdNb2RlbCIsIlRyYW5zYWN0aW9uSGVscGVyIiwiZ2V0UHJvZ3JhbW1pbmdNb2RlbCIsIkNvbW1vblV0aWxzIiwiY3JlYXRlUm9vdENvbnRleHQiLCJjbGVhclJlY29tbWVuZGF0aW9ucyIsImJpbmRpbmdDb250ZXh0IiwiZ2V0QmluZGluZ0NvbnRleHQiLCJyZWNvbW1lbmRhdGlvbkhlbHBlciIsIl9yb290Q29udGV4dCIsIl90aGlzJGludGVybmFsTW9kZWwiLCJmZXRjaFJlY29tbWVuZGF0aW9ucyIsIl9jb250ZXh0IiwiUHJvbWlzZSIsInJlc29sdmUiLCJmZXRjaEFuZEFwcGx5UmVjb21tZW5kYXRpb25zIiwiY3VycmVudENvbnRleHRzSW5mbyIsImNvbnNpZGVyT25seU5ld0NvbnRleHQiLCJpc1N1Y2Nlc3MiLCJzaWRlRWZmZWN0cyIsImdldFNpZGVFZmZlY3RzU2VydmljZSIsInJlY29tbWVuZGF0aW9uUmVnaXN0cnkiLCJnZXRSZWNvbW1lbmRhdGlvbnNNYXBwaW5nIiwiZmlsdGVyZWRDb250ZXh0c0luZm8iLCJmaWx0ZXIiLCJjb250ZXh0SW5mbyIsInN0YW5kYXJkUmVjb21tZW5kYXRpb25IZWxwZXIiLCJjaGVja0lmUmVjb21tZW5kYXRpb25Sb2xlRXhpc3RzRm9yQ29udGV4dCIsImNvbnRleHRzSW5mbyIsImdldENvbnRleHRzV2l0aE5vUmVjb21tZW5kYXRpb25zIiwiY29udGV4dHMiLCJtYXAiLCJsZW5ndGgiLCJzdGFydFRpbWUiLCJwZXJmb3JtYW5jZSIsIm5vdyIsInJlY29tbWVuZGF0aW9uRGF0YSIsImVuZFRpbWUiLCJ1cGRhdGVSZXNwb25zZVRpbWVJbmZvIiwidXBkYXRlQWxsUmVjb21tZW5kZWRGaWVsZHMiLCJ1cGRhdGVEYXRhRnJvbVJlY29tbWVuZGF0aW9uUmVzcG9uc2UiLCJpbmNyZWFzZUNvdW50IiwiYXBwbHlSZWNvbW1lbmRhdGlvbiIsImUiLCJMb2ciLCJlcnJvciIsInN0b3JlUmVjb21tZW5kYXRpb25Db250ZXh0cyIsImZldGNoQW5kQXBwbHlSZWNvbW1lbmRhdGlvbnNPbkZpZWxkQ2hhbmdlIiwiZmllbGQiLCJhcHBDb21wb25lbnQiLCJpc0ZpZWxkUmVjb21tZW5kYXRpb25SZWxldmFudCIsImNoZWNrSWZGaWVsZElzUmVjb21tZW5kYXRpb25SZWxldmFudCIsInRhcmdldHMiLCJmZXRjaFRhcmdldHMiLCJmaWx0ZXJlZFJlY29tbWVuZGF0aW9uQ29udGV4dHMiLCJmZXRjaEZpbHRlcmVkUmVjb21tZW5kYXRpb25Db250ZXh0cyIsInJlY29tbWVuZGF0aW9uQ29udGV4dCIsImZpbHRlcmVkUmVjb21tZW5kYXRpb25Db250ZXh0IiwiX2dldFBhdGgiLCJpbmNsdWRlcyIsImNsZWFySWdub3JlZENvbnRleHRzIiwib25CZWZvcmVBY2NlcHRSZWNvbW1lbmRhdGlvbnMiLCJfcGFyYW1zIiwiYWNjZXB0UmVjb21tZW5kYXRpb25zIiwicHJvbWlzZXMiLCJwcm9wZXJ0eVBhdGgiLCJwdXNoIiwidmFsdWUiLCJhbGwiLCJyZWNvbW1lbmRhdGlvblJlc3BvbnNlcyIsInN0b3JlUmVjb21tZW5kYXRpb25zIiwiX3JlY29tbWVuZGF0aW9uQ29udGV4IiwiY29udGV4dFBhdGhzIiwicmVjb21tZW5kYXRpb25Db250ZXh0cyIsImZvckVhY2giLCJjb250ZXh0UGF0aCIsImluZGV4IiwiaW5kZXhPZiIsImNvbnRleHRJZGVudGlmaWVyIiwia2V5IiwiY29udGV4dFBhdGhGcm9tS2V5Iiwic3Vic3RyaW5nIiwibGFzdEluZGV4T2YiLCJmZXRjaEZpbHRlcmVkUmVjb21tZW5kYXRpb25EYXRhIiwiZmlsdGVyZWRUYXJnZXRzIiwiX3RoaXMkZ2V0VmlldyRnZXRNb2RlIiwiZmlsdGVyUmVjb21tZW5kYXRpb25zRGF0YSIsIk9iamVjdCIsImtleXMiLCJhc3NpZ24iLCJjb25zaWRlclJlY29tbWVuZGF0aW9uQ29udGV4dHMiLCJfdGhpcyRnZXRWaWV3JGdldE1vZGUyIiwidmVyc2lvbiIsImlzUmVjb21tZW5kYXRpb25BY2NlcHRhYmxlIiwic3BsaXRQYXRoQW5kQ2hlY2tJZlJlY29tbWVuZGF0aW9uQWNjZXB0YWJsZSIsImN0eHRQYXRoIiwicGF0aEFycmF5IiwibmV3UGF0aCIsIm5ld1BhdGhBcnJheSIsInNsaWNlIiwic29tZSIsInJpZ2h0TW9zdENvbnRleHQiLCJnZXRSaWdodG1vc3RDb250ZXh0IiwiZGF0YVRvQmVGaWx0ZXJlZCIsImZldGNoRGF0YVRvQmVGaWx0ZXJlZCIsIl90aGlzJGdldFZpZXckZ2V0QmluZCIsIl90aGlzJGdldFZpZXckZ2V0QmluZDIiLCJfdGhpcyRnZXRWaWV3JGdldE1vZGUzIiwiYWRqdXN0QWNjZXB0QWxsUGFyYW1zIiwiZmlsdGVyUmVjb21tZW5kYXRpb25EYXRhIiwiZmlsdGVyUmVjb21tZW5kYXRpb25Db250ZXh0cyIsInBhcmFtcyIsInRleHQiLCJwcm9wZXJ0eVBhdGhGcm9tS2V5IiwibWF0Y2hpbmdDb250ZXh0IiwiaXNSZWNvbW1lbmRhdGlvbkZpZWxkTnVsbCIsImZldGNoQWNjZXB0QWxsUGFyYW1zIiwiX3RoaXMkZ2V0VmlldyIsIl90aGlzJGdldFZpZXckZ2V0QmluZDMiLCJnZXRDb250cm9sbGVyIiwiYWRkQ29udGV4dElkZW50aWZpZXJUZXh0IiwiY2hlY2tJZlJlY29tbWVuZGF0aW9uc0V4aXN0IiwiaWdub3JlUmVjb21tZW5kYXRpb25Gb3JDb250ZXh0cyIsInZpZXciLCJzZXRDdXJyZW50Um9vdENvbnRleHQiLCJyZXNldFJlY29tbWVuZGF0aW9ucyIsInN0b3JlRGF0YUZvclRlbGVtZXRyeSIsInJlY29tbWVuZGF0aW9uT3B0aW9uQ2hvb3NlbiIsIlJlY29tbWVuZGF0aW9uRGlhbG9nRGVjaXNpb24iLCJBY2NlcHQiLCJ1cGRhdGVEYXRhIiwiSWdub3JlIiwic3RvcmVEYXRhIiwiaW5jcmVhc2VUZWxlbWV0cnlEYXRhQ291bnQiLCJ1cGRhdGVUZWxlbWV0cnlEYXRhQmFzZWRPblVzZXJTZWxlY3Rpb24iLCJmaWVsZFBhdGgiLCJzZWxlY3RlZFZhbHVlIiwidmlld0JpbmRpbmdDb250ZXh0UGF0aCIsIm5ld1JlY29tbWVuZGF0aW9uc0ZvckN1cnJlbnRDb250ZXh0cyIsInJlc3BvbnNlIiwiX3Jlc3BvbnNlJEFJUmVjb21tZW5kIiwiQ29udHJvbGxlckV4dGVuc2lvbiIsIl9hcHBseURlY29yYXRlZERlc2NyaXB0b3IiLCJnZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3IiXSwic291cmNlUm9vdCI6Ii4iLCJzb3VyY2VzIjpbIlJlY29tbWVuZGF0aW9ucy50cyJdLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgTG9nIGZyb20gXCJzYXAvYmFzZS9Mb2dcIjtcbmltcG9ydCB7IGRlZmluZVVJNUNsYXNzLCBleHRlbnNpYmxlLCBmaW5hbEV4dGVuc2lvbiwgbWV0aG9kT3ZlcnJpZGUsIHB1YmxpY0V4dGVuc2lvbiB9IGZyb20gXCJzYXAvZmUvYmFzZS9DbGFzc1N1cHBvcnRcIjtcbmltcG9ydCB0eXBlIFBhZ2VDb250cm9sbGVyIGZyb20gXCJzYXAvZmUvY29yZS9QYWdlQ29udHJvbGxlclwiO1xuaW1wb3J0IHsgcmVjb21tZW5kYXRpb25IZWxwZXIgfSBmcm9tIFwic2FwL2ZlL2NvcmUvaGVscGVycy9SZWNvbW1lbmRhdGlvbkhlbHBlclwiO1xuaW1wb3J0IHR5cGUge1xuXHRSZWNvbW1lbmRhdGlvbkNvbnRleHRzSW5mbyxcblx0UmVjb21tZW5kYXRpb25JbmZvLFxuXHRTdGFuZGFyZFJlY29tbWVuZGF0aW9uUmVzcG9uc2Vcbn0gZnJvbSBcInNhcC9mZS9jb3JlL2hlbHBlcnMvU3RhbmRhcmRSZWNvbW1lbmRhdGlvbkhlbHBlclwiO1xuaW1wb3J0IHsgc3RhbmRhcmRSZWNvbW1lbmRhdGlvbkhlbHBlciB9IGZyb20gXCJzYXAvZmUvY29yZS9oZWxwZXJzL1N0YW5kYXJkUmVjb21tZW5kYXRpb25IZWxwZXJcIjtcbmltcG9ydCB0eXBlIENvbnRyb2wgZnJvbSBcInNhcC91aS9jb3JlL0NvbnRyb2xcIjtcbmltcG9ydCBDb250cm9sbGVyRXh0ZW5zaW9uIGZyb20gXCJzYXAvdWkvY29yZS9tdmMvQ29udHJvbGxlckV4dGVuc2lvblwiO1xuaW1wb3J0IE92ZXJyaWRlRXhlY3V0aW9uIGZyb20gXCJzYXAvdWkvY29yZS9tdmMvT3ZlcnJpZGVFeGVjdXRpb25cIjtcbmltcG9ydCB0eXBlIENvbnRleHQgZnJvbSBcInNhcC91aS9tb2RlbC9Db250ZXh0XCI7XG5pbXBvcnQgdHlwZSBKU09OTW9kZWwgZnJvbSBcInNhcC91aS9tb2RlbC9qc29uL0pTT05Nb2RlbFwiO1xuaW1wb3J0IHR5cGUgeyBkZWZhdWx0IGFzIE9EYXRhVjRDb250ZXh0IH0gZnJvbSBcInNhcC91aS9tb2RlbC9vZGF0YS92NC9Db250ZXh0XCI7XG5pbXBvcnQgdHlwZSB7IEZFVmlldyB9IGZyb20gXCIuLi9CYXNlQ29udHJvbGxlclwiO1xuaW1wb3J0IENvbW1vblV0aWxzIGZyb20gXCIuLi9Db21tb25VdGlsc1wiO1xuaW1wb3J0IHR5cGUgRmNsQ29udHJvbGxlciBmcm9tIFwiLi4vcm9vdFZpZXcvRmNsLmNvbnRyb2xsZXJcIjtcbmltcG9ydCBUcmFuc2FjdGlvbkhlbHBlciBmcm9tIFwiLi9lZGl0Rmxvdy9UcmFuc2FjdGlvbkhlbHBlclwiO1xuXG5pbXBvcnQgeyBSZWNvbW1lbmRhdGlvbkRpYWxvZ0RlY2lzaW9uIH0gZnJvbSBcIi4uL2NvbnRyb2xzL1JlY29tbWVuZGF0aW9ucy9Db25maXJtUmVjb21tZW5kYXRpb25EaWFsb2cuYmxvY2tcIjtcbmltcG9ydCB0eXBlIHsgUmVjb21tZW5kYXRpb25UZWxlbWV0cnkgfSBmcm9tIFwiLi4vc2VydmljZXMvVGVsZW1ldHJ5U2VydmljZUZhY3RvcnlcIjtcbmltcG9ydCBUZWxlbWV0cnkgZnJvbSBcIi4vcmVjb21tZW5kYXRpb25zL1RlbGVtZXRyeVwiO1xuXG5leHBvcnQgdHlwZSBBY2NlcHRBbGxQYXJhbXMgPSB7XG5cdHJlY29tbWVuZGF0aW9uRGF0YT86IFJlY29tbWVuZGF0aW9uRGF0YVtdO1xufTtcblxuZXhwb3J0IHR5cGUgUmVjb21tZW5kYXRpb25EYXRhID0ge1xuXHRjb250ZXh0PzogT0RhdGFWNENvbnRleHQ7XG5cdGNvbnRleHRJZGVudGlmaWVyPzogc3RyaW5nW107XG5cdGNvbnRleHRJZGVudGlmaWVyVGV4dD86IHN0cmluZ1tdO1xuXHRwcm9wZXJ0eVBhdGg/OiBzdHJpbmc7XG5cdHZhbHVlPzogc3RyaW5nO1xuXHR0ZXh0Pzogc3RyaW5nO1xufTtcbkBkZWZpbmVVSTVDbGFzcyhcInNhcC5mZS5jb3JlLmNvbnRyb2xsZXJleHRlbnNpb25zLlJlY29tbWVuZGF0aW9uc1wiKVxuZXhwb3J0IGRlZmF1bHQgY2xhc3MgUmVjb21tZW5kYXRpb25zIGV4dGVuZHMgQ29udHJvbGxlckV4dGVuc2lvbiB7XG5cdGJhc2UhOiBQYWdlQ29udHJvbGxlcjtcblxuXHRyZWNvbW1lbmRhdGlvbkNvbnRleHRzITogUmVjb21tZW5kYXRpb25Db250ZXh0c0luZm9bXTtcblxuXHRyb290Q29udGV4dCE6IENvbnRleHQgfCB1bmRlZmluZWQ7XG5cblx0aW50ZXJuYWxNb2RlbCE6IEpTT05Nb2RlbDtcblxuXHR0ZWxlbWV0cnkhOiBUZWxlbWV0cnk7XG5cblx0YWxsUmVjb21tZW5kZWRGaWVsZHMhOiBzdHJpbmdbXTtcblxuXHQvLyB0aGUgZGF0YSBzaG93biBpbiBBY2NlcHQvSWdub3JlIGRpYWxvZyBvZiBSZWNvbW1lbmRhdGlvbnNcblx0ZGF0YVRvQmVBY2NlcHRlZDogUmVjb21tZW5kYXRpb25EYXRhW10gPSBbXTtcblxuXHRwcmV2aW91c0NvbnRleHQ6IENvbnRleHQgfCBudWxsIHwgdW5kZWZpbmVkO1xuXG5cdGNvbnN0cnVjdG9yKCkge1xuXHRcdHN1cGVyKCk7XG5cdH1cblxuXHRAbWV0aG9kT3ZlcnJpZGUoKVxuXHRvbkluaXQoKTogdm9pZCB7XG5cdFx0dGhpcy50ZWxlbWV0cnkgPSBuZXcgVGVsZW1ldHJ5KCk7XG5cdFx0dGhpcy5hbGxSZWNvbW1lbmRlZEZpZWxkcyA9IFtdO1xuXHRcdHRoaXMuaW50ZXJuYWxNb2RlbCA9IHRoaXMuYmFzZS5nZXRWaWV3KCkuZ2V0TW9kZWwoXCJpbnRlcm5hbFwiKTtcblx0XHR0aGlzLnByZXZpb3VzQ29udGV4dCA9IHVuZGVmaW5lZDtcblx0fVxuXG5cdEBtZXRob2RPdmVycmlkZShcIl9yb3V0aW5nXCIpXG5cdGFzeW5jIG9uQWZ0ZXJCaW5kaW5nKGNvbnRleHQ6IENvbnRleHQgfCBudWxsKTogUHJvbWlzZTx2b2lkPiB7XG5cdFx0aWYgKGNvbnRleHQpIHtcblx0XHRcdGNvbnN0IGN1cnJlbnRDb250ZXh0QmFzZVBhdGggPSBjb250ZXh0LmdldFBhdGgoKS5zcGxpdChcIi9cIilbMV07XG5cdFx0XHRjb25zdCBwcmV2aW91c0NvbnRleHRCYXNlUGF0aCA9IHRoaXMucHJldmlvdXNDb250ZXh0Py5nZXRQYXRoKCkuc3BsaXQoXCIvXCIpWzFdO1xuXHRcdFx0Ly9cdGNvbnNvbGUubG9nKCdjdXJyZW50OjonLCBjdXJyZW50Q29udGV4dEJhc2VQYXRoKTtcblx0XHRcdC8vXHRjb25zb2xlLmxvZygncHJldmlvdXMnLCBwcmV2aW91c0NvbnRleHRCYXNlUGF0aCk7XG5cdFx0XHR0aGlzLnJvb3RDb250ZXh0ID0gdW5kZWZpbmVkO1xuXHRcdFx0Ly8gdXNlIGludGVybmFsIG1vZGVsIGJlY2F1c2Ugd2UgaGF2ZSB0byB1c2UgdGhpcyBpbmZvcm1hdGlvbiBhY3Jvc3MgdGhlIGFwcGxpY2F0aW9uIGZvciBkaWZmZXJlbnQgaW5zdGFuY2VzLlxuXHRcdFx0bGV0IGlzUmVjb21tZW5kYXRpb25FbmFibGVkID0gdGhpcy5pbnRlcm5hbE1vZGVsLmdldFByb3BlcnR5KFwiL2lzUmVjb21tZW5kYXRpb25FbmFibGVkXCIpO1xuXHRcdFx0Ly8gb25BZnRlciBiaW5kaW5nIGlzIGNhbGxlZCBmb3IgYWxsIGNvbnRleHRzXG5cdFx0XHQvLyBidXQgd2UgZG8gbm90IG5lZWQgdG8gY2FsbCB0aGUgaXNFbmFibGVkIGhvb2sgYWxsIHRoZSB0aW1lXG5cdFx0XHQvLyBzbyBjaGVjayBpZiByZWNvbW1lbmRhdGlvbiBlbmFibGVkIGlzIGFscmVhZHkgYXZhaWxhYmxlXG5cdFx0XHR0aGlzLnByZXZpb3VzQ29udGV4dCA9IGNvbnRleHQ7XG5cdFx0XHRjb25zdCByb290Q29udGV4dCA9IGF3YWl0IHRoaXMuX2dldFJvb3RDb250ZXh0KGNvbnRleHQgYXMgT0RhdGFWNENvbnRleHQpO1xuXHRcdFx0aWYgKHJvb3RDb250ZXh0KSB7XG5cdFx0XHRcdGlmIChpc1JlY29tbWVuZGF0aW9uRW5hYmxlZCA9PT0gdW5kZWZpbmVkKSB7XG5cdFx0XHRcdFx0aXNSZWNvbW1lbmRhdGlvbkVuYWJsZWQgPSB0aGlzLmJhc2UucmVjb21tZW5kYXRpb25zLmlzRW5hYmxlZChyb290Q29udGV4dCk7XG5cdFx0XHRcdFx0dGhpcy5pbnRlcm5hbE1vZGVsLnNldFByb3BlcnR5KFwiL2lzUmVjb21tZW5kYXRpb25FbmFibGVkXCIsIGlzUmVjb21tZW5kYXRpb25FbmFibGVkKTtcblx0XHRcdFx0fVxuXHRcdFx0XHQvL1x0aWYoIXRoaXMucHJldmlvdXNDb250ZXh0KSB7XG5cblx0XHRcdFx0Ly9cdH1cblx0XHRcdFx0Y29uc3QgaXNGY2xFbmFibGVkID0gdGhpcy5iYXNlLmdldEFwcENvbXBvbmVudCgpLl9pc0ZjbEVuYWJsZWQoKTtcblx0XHRcdFx0Y29uc3QgaXNGdWxsU2NyZWVuID0gaXNGY2xFbmFibGVkXG5cdFx0XHRcdFx0PyAodGhpcy5iYXNlLmdldEFwcENvbXBvbmVudCgpLmdldFJvb3RWaWV3Q29udHJvbGxlcigpIGFzIEZjbENvbnRyb2xsZXIpLmdldEhlbHBlcigpLmdldEN1cnJlbnRVSVN0YXRlKCkuaXNGdWxsU2NyZWVuXG5cdFx0XHRcdFx0OiB0cnVlO1xuXHRcdFx0XHRpZiAoY3VycmVudENvbnRleHRCYXNlUGF0aCAhPT0gcHJldmlvdXNDb250ZXh0QmFzZVBhdGgpIHtcblx0XHRcdFx0XHQvLyBkaWZmZXJlbnQgY29udGV4dHMvIE9QXG5cdFx0XHRcdFx0Ly9cdGNvbnNvbGUubG9nKFwicnVuIHJlc2V0IGxvZ2ljXCIpXG5cdFx0XHRcdFx0dGhpcy50cnlSZXNldFJlY29tbWVuZGF0aW9ucyhyb290Q29udGV4dCBhcyBPRGF0YVY0Q29udGV4dCk7XG5cdFx0XHRcdFx0dGhpcy50ZWxlbWV0cnkucmVzZXREYXRhKCk7XG5cdFx0XHRcdH1cblx0XHRcdFx0aWYgKGlzRmNsRW5hYmxlZCAmJiAhaXNGdWxsU2NyZWVuKSB7XG5cdFx0XHRcdFx0cmV0dXJuO1xuXHRcdFx0XHR9XG5cdFx0XHR9XG5cdFx0fVxuXHR9XG5cblx0cHJpdmF0ZSBhc3luYyBfZ2V0Um9vdENvbnRleHQoY29udGV4dDogT0RhdGFWNENvbnRleHQpOiBQcm9taXNlPENvbnRleHQgfCB1bmRlZmluZWQ+IHtcblx0XHRjb25zdCBwcm9ncmFtbWluZ01vZGVsID0gVHJhbnNhY3Rpb25IZWxwZXIuZ2V0UHJvZ3JhbW1pbmdNb2RlbChjb250ZXh0KTtcblx0XHRyZXR1cm4gQ29tbW9uVXRpbHMuY3JlYXRlUm9vdENvbnRleHQocHJvZ3JhbW1pbmdNb2RlbCwgdGhpcy5iYXNlLmdldFZpZXcoKSwgdGhpcy5iYXNlLmdldEFwcENvbXBvbmVudCgpKTtcblx0fVxuXG5cdC8qKlxuXHQgKiBDbGVhciBhbGwgcmVjb21tZW5kYXRpb25zIGN1cnJlbnRseSBhdmFpbGFibGUgb24gdGhlIFVJLlxuXHQgKiBAcHVibGljXG5cdCAqL1xuXHRAcHVibGljRXh0ZW5zaW9uKClcblx0cHVibGljIGNsZWFyUmVjb21tZW5kYXRpb25zKCk6IHZvaWQge1xuXHRcdGNvbnN0IGJpbmRpbmdDb250ZXh0ID0gdGhpcy5nZXRWaWV3KCkuZ2V0QmluZGluZ0NvbnRleHQoKTtcblx0XHRpZiAoYmluZGluZ0NvbnRleHQpIHtcblx0XHRcdHJlY29tbWVuZGF0aW9uSGVscGVyLmNsZWFyUmVjb21tZW5kYXRpb25zKHRoaXMuYmFzZS5nZXRWaWV3KCksIGJpbmRpbmdDb250ZXh0KTtcblx0XHR9XG5cdH1cblxuXHQvKipcblx0ICogQ2hlY2sgaWYgcmVjb21tZW5kYXRpb25zIGFyZSBlbmFibGVkIG9yIG5vdC5cblx0ICogQHBhcmFtIF9yb290Q29udGV4dCBUaGUgcm9vdCBlbnRpdHkgY29udGV4dFxuXHQgKiBAcmV0dXJucyBUcnVlIGlmIHJlY29tbWVuZGF0aW9uIGlzIGVuYWJsZWQuIEZhbHNlIGlmIHJlY29tbWVuZGF0aW9uIGlzIGRpc2FibGVkLlxuXHQgKiBAcHVibGljXG5cdCAqL1xuXHRAcHVibGljRXh0ZW5zaW9uKClcblx0QGV4dGVuc2libGUoT3ZlcnJpZGVFeGVjdXRpb24uSW5zdGVhZClcblx0cHVibGljIGlzRW5hYmxlZChfcm9vdENvbnRleHQ6IENvbnRleHQpOiBib29sZWFuIHtcblx0XHRyZXR1cm4gZmFsc2U7XG5cdH1cblxuXHQvKipcblx0ICogTWV0aG9kIHJldHVybnMgYSBib29sZWFuIHZhbHVlIGluZGljYXRpbmcgcmVjb21tZW5kYXRpb24gaXMgZW5hYmxlZCBvciBub3QuIEluIGNhc2UgY2FsbGVkIGJlZm9yZVxuXHQgKiB0aGUgZW5hYmxlbWVudCBjaGVjayBpcyBjb21wbGV0ZWQsIG1ldGhvZCB3aWxsIHJldHVybiBmYWxzZSB3aGljaCBpcyB0aGUgZGVmYXVsdCB2YWx1ZS5cblx0ICogQHJldHVybnMgVHJ1ZSBpZiByZWNvbW1lbmRhdGlvbiBpcyBlbmFibGVkIGVsc2UgZmFsc2UuXG5cdCAqL1xuXHRAcHVibGljRXh0ZW5zaW9uKClcblx0QGZpbmFsRXh0ZW5zaW9uKClcblx0cHVibGljIGlzUmVjb21tZW5kYXRpb25FbmFibGVkKCk6IGJvb2xlYW4ge1xuXHRcdHJldHVybiAhIXRoaXMuaW50ZXJuYWxNb2RlbD8uZ2V0UHJvcGVydHkoXCIvaXNSZWNvbW1lbmRhdGlvbkVuYWJsZWRcIik7XG5cdH1cblxuXHQvKipcblx0ICogRmV0Y2ggdGhlIHJlY29tbWVuZGF0aW9uIGZvciBhIHNwZWNpZmljIGNvbnRleHQuXG5cdCAqIEBwYXJhbSBfY29udGV4dCBUaGUgY29udGV4dCB0aGF0IHNoYWxsIGJlIGNvbnNpZGVyZWQgd2hlbiBmZXRjaGluZyByZWNvbW1lbmRhdGlvbnNcblx0ICogQHBhcmFtIF9yb290Q29udGV4dCBUaGUgcm9vdCBlbnRpdHkgY29udGV4dFxuXHQgKiBAcmV0dXJucyBUaGUgcmVjb21tZW5kYXRpb24gZW50cmllc1xuXHQgKiBAcHVibGljXG5cdCAqL1xuXHRAcHVibGljRXh0ZW5zaW9uKClcblx0QGV4dGVuc2libGUoT3ZlcnJpZGVFeGVjdXRpb24uSW5zdGVhZClcblx0cHVibGljIGFzeW5jIGZldGNoUmVjb21tZW5kYXRpb25zKF9jb250ZXh0OiBPRGF0YVY0Q29udGV4dFtdLCBfcm9vdENvbnRleHQ/OiBDb250ZXh0KTogUHJvbWlzZTxTdGFuZGFyZFJlY29tbWVuZGF0aW9uUmVzcG9uc2VbXT4ge1xuXHRcdHJldHVybiBQcm9taXNlLnJlc29sdmUoW10pO1xuXHR9XG5cblx0LyoqXG5cdCAqIEZldGNoIHRoZSByZWNvbW1lbmRhdGlvbnMgYW5kIGFwcGx5IHRoZW0gb24gdGhlIFVJLlxuXHQgKiBAcGFyYW0gY3VycmVudENvbnRleHRzSW5mbyBDb250ZXh0cyBJbmZvIHRoYXQgY29udGFpbnMgdGhlIGNvbnRleHQgdGhhdCBzaGFsbCBiZSBjb25zaWRlcmVkIHdoZW4gZmV0Y2hpbmcgcmVjb21tZW5kYXRpb25zIGFsb25nIHdpdGggY29udGV4dElkZW50aWZpZXJcblx0ICogQHBhcmFtIGNvbnNpZGVyT25seU5ld0NvbnRleHQgQm9vbGVhbiBwcm9wZXJ0eSBpbmRpY2F0aW5nIFJlY29tbWVuZGF0aW9uXG5cdCAqIHNob3VsZCBiZSBmZXRjaGVkIG9ubHkgZm9yIG5ldyBjb250ZXh0cyB3aXRoIG5vIHJlY29tbWVuZGF0aW9uIGZldGNoIGNhbGxcblx0ICogQHJldHVybnMgYHRydWVgIGlmIHRoZSByZWNvbW1lbmRhdGlvbnMgd2VyZSBmZXRjaGVkIGFuZCBhcHBsaWVkIGNvcnJlY3RseVxuXHQgKi9cblx0QHB1YmxpY0V4dGVuc2lvbigpXG5cdHB1YmxpYyBhc3luYyBmZXRjaEFuZEFwcGx5UmVjb21tZW5kYXRpb25zKFxuXHRcdGN1cnJlbnRDb250ZXh0c0luZm86IFJlY29tbWVuZGF0aW9uQ29udGV4dHNJbmZvW10sXG5cdFx0Y29uc2lkZXJPbmx5TmV3Q29udGV4dD86IGJvb2xlYW5cblx0KTogUHJvbWlzZTxib29sZWFuPiB7XG5cdFx0bGV0IGlzU3VjY2VzcyA9IGZhbHNlO1xuXHRcdGNvbnN0IHNpZGVFZmZlY3RzID0gdGhpcy5iYXNlLmdldEFwcENvbXBvbmVudCgpLmdldFNpZGVFZmZlY3RzU2VydmljZSgpO1xuXHRcdGNvbnN0IHJlY29tbWVuZGF0aW9uUmVnaXN0cnkgPSBzaWRlRWZmZWN0cy5nZXRSZWNvbW1lbmRhdGlvbnNNYXBwaW5nKCk7XG5cdFx0Y29uc3QgZmlsdGVyZWRDb250ZXh0c0luZm8gPSBjdXJyZW50Q29udGV4dHNJbmZvLmZpbHRlcigoY29udGV4dEluZm86IFJlY29tbWVuZGF0aW9uQ29udGV4dHNJbmZvKSA9PiB7XG5cdFx0XHRyZXR1cm4gc3RhbmRhcmRSZWNvbW1lbmRhdGlvbkhlbHBlci5jaGVja0lmUmVjb21tZW5kYXRpb25Sb2xlRXhpc3RzRm9yQ29udGV4dChjb250ZXh0SW5mbywgcmVjb21tZW5kYXRpb25SZWdpc3RyeSk7XG5cdFx0fSk7XG5cdFx0aWYgKHRoaXMuaXNSZWNvbW1lbmRhdGlvbkVuYWJsZWQoKSkge1xuXHRcdFx0Y29uc3QgY29udGV4dHNJbmZvOiBSZWNvbW1lbmRhdGlvbkNvbnRleHRzSW5mb1tdID0gY29uc2lkZXJPbmx5TmV3Q29udGV4dFxuXHRcdFx0XHQ/IHN0YW5kYXJkUmVjb21tZW5kYXRpb25IZWxwZXIuZ2V0Q29udGV4dHNXaXRoTm9SZWNvbW1lbmRhdGlvbnMoZmlsdGVyZWRDb250ZXh0c0luZm8sIHRoaXMuaW50ZXJuYWxNb2RlbClcblx0XHRcdFx0OiBmaWx0ZXJlZENvbnRleHRzSW5mbztcblx0XHRcdGNvbnN0IGNvbnRleHRzOiBPRGF0YVY0Q29udGV4dFtdID0gY29udGV4dHNJbmZvLm1hcChcblx0XHRcdFx0KGNvbnRleHRJbmZvOiBSZWNvbW1lbmRhdGlvbkNvbnRleHRzSW5mbykgPT4gY29udGV4dEluZm8uY29udGV4dFxuXHRcdFx0KSBhcyBPRGF0YVY0Q29udGV4dFtdO1xuXHRcdFx0aWYgKGNvbnRleHRzICYmIGNvbnRleHRzLmxlbmd0aCA+IDApIHtcblx0XHRcdFx0dHJ5IHtcblx0XHRcdFx0XHRjb25zdCByb290Q29udGV4dCA9IGF3YWl0IHRoaXMuX2dldFJvb3RDb250ZXh0KGNvbnRleHRzWzBdKTtcblx0XHRcdFx0XHRjb25zdCBzdGFydFRpbWUgPSBwZXJmb3JtYW5jZS5ub3coKTtcblx0XHRcdFx0XHRjb25zdCByZWNvbW1lbmRhdGlvbkRhdGEgPSBhd2FpdCB0aGlzLmJhc2UucmVjb21tZW5kYXRpb25zLmZldGNoUmVjb21tZW5kYXRpb25zKGNvbnRleHRzLCByb290Q29udGV4dCk7XG5cdFx0XHRcdFx0Y29uc3QgZW5kVGltZSA9IHBlcmZvcm1hbmNlLm5vdygpO1xuXHRcdFx0XHRcdHRoaXMudGVsZW1ldHJ5LnVwZGF0ZVJlc3BvbnNlVGltZUluZm8oZW5kVGltZSAtIHN0YXJ0VGltZSk7XG5cdFx0XHRcdFx0aWYgKHJlY29tbWVuZGF0aW9uRGF0YT8ubGVuZ3RoKSB7XG5cdFx0XHRcdFx0XHR0aGlzLnVwZGF0ZUFsbFJlY29tbWVuZGVkRmllbGRzKHJlY29tbWVuZGF0aW9uRGF0YSk7XG5cdFx0XHRcdFx0XHR0aGlzLnRlbGVtZXRyeS51cGRhdGVEYXRhRnJvbVJlY29tbWVuZGF0aW9uUmVzcG9uc2UocmVjb21tZW5kYXRpb25EYXRhKTtcblx0XHRcdFx0XHR9IGVsc2Uge1xuXHRcdFx0XHRcdFx0Ly8gaWYgZW1wdHkgcmVjb21tZW5kYXRpb25zLCB0aGVuIHN0b3JlIGl0IGZvciB0ZWxlbWV0cnkgcHVycG9zZVxuXHRcdFx0XHRcdFx0dGhpcy50ZWxlbWV0cnkuaW5jcmVhc2VDb3VudChcIm51bWJlck9mVGltZXNFbXB0eVJlY29tbWVuZGF0aW9uc1wiKTtcblx0XHRcdFx0XHR9XG5cdFx0XHRcdFx0Ly8gbmVlZCB0byB2YWxpZGF0ZSB0aGF0IHRoZSByZXNwb25zZSBpcyBwcm9wZXJseSBmb3JtYXR0ZWRcblx0XHRcdFx0XHRpc1N1Y2Nlc3MgPSB0aGlzLmFwcGx5UmVjb21tZW5kYXRpb24ocmVjb21tZW5kYXRpb25EYXRhLCBjb250ZXh0cyk7XG5cdFx0XHRcdH0gY2F0Y2ggKGUpIHtcblx0XHRcdFx0XHRMb2cuZXJyb3IoXCJUaGVyZSB3YXMgYW4gZXJyb3IgZmV0Y2hpbmcgdGhlIHJlY29tbWVuZGF0aW9uc1wiLCBlIGFzIEVycm9yKTtcblx0XHRcdFx0fVxuXHRcdFx0fVxuXG5cdFx0XHR0aGlzLnN0b3JlUmVjb21tZW5kYXRpb25Db250ZXh0cyhmaWx0ZXJlZENvbnRleHRzSW5mbyk7XG5cdFx0fVxuXG5cdFx0cmV0dXJuIGlzU3VjY2Vzcztcblx0fVxuXG5cdC8qKlxuXHQgKiBGZXRjaCB0aGUgcmVjb21tZW5kYXRpb25zIG9uIGZpZWxkIGNoYW5nZSBhbmQgYXBwbHkgdGhlbSBvbiB0aGUgVUkuXG5cdCAqIEBwYXJhbSBmaWVsZCBUaGUgY2hhbmdlZCBmaWVsZC5cblx0ICogQHBhcmFtIGNvbnRleHRJbmZvIENvbnRleHRJbmZvIHdoaWNoIGNvbnRhaW5zIHRoZSBjb250ZXh0IGlzIG9ubHkgY29uc2lkZXJlZCB3aGVuIGZldGNoaW5nIHRoZSByZWNvbW1lbmRhdGlvbnMgYWxvbmcgd2l0aCBjb250ZXh0SWRlbnRpZmllclxuXHQgKiBAcmV0dXJucyBgdHJ1ZWAgaWYgdGhlIHJlY29tbWVuZGF0aW9uIHdlcmUgZmV0Y2hlZCBhbmQgYXBwbGllZCBjb3JyZWN0bHlcblx0ICovXG5cdEBwdWJsaWNFeHRlbnNpb24oKVxuXHRwdWJsaWMgYXN5bmMgZmV0Y2hBbmRBcHBseVJlY29tbWVuZGF0aW9uc09uRmllbGRDaGFuZ2UoZmllbGQ6IENvbnRyb2wsIGNvbnRleHRJbmZvOiBSZWNvbW1lbmRhdGlvbkNvbnRleHRzSW5mbyk6IFByb21pc2U8Ym9vbGVhbj4ge1xuXHRcdGNvbnN0IGFwcENvbXBvbmVudCA9IHRoaXMuYmFzZS5nZXRBcHBDb21wb25lbnQoKTtcblx0XHRjb25zdCBpc0ZpZWxkUmVjb21tZW5kYXRpb25SZWxldmFudCA9IGFwcENvbXBvbmVudC5nZXRTaWRlRWZmZWN0c1NlcnZpY2UoKS5jaGVja0lmRmllbGRJc1JlY29tbWVuZGF0aW9uUmVsZXZhbnQoZmllbGQpO1xuXHRcdGlmIChpc0ZpZWxkUmVjb21tZW5kYXRpb25SZWxldmFudCkge1xuXHRcdFx0Ly9nZXR0aW5nIHRoZSB2aXNpYmxlIHRhcmdldHMgb24gdGhlIFVJIGFuZCB0aGVpciByZXNwZWN0aXZlIGNvbnRleHRzXG5cdFx0XHRjb25zdCB0YXJnZXRzID0gdGhpcy5mZXRjaFRhcmdldHModHJ1ZSk7XG5cdFx0XHRjb25zdCBmaWx0ZXJlZFJlY29tbWVuZGF0aW9uQ29udGV4dHMgPSB0aGlzLmZldGNoRmlsdGVyZWRSZWNvbW1lbmRhdGlvbkNvbnRleHRzKHRhcmdldHMpO1xuXHRcdFx0Ly9maWx0ZXJpbmcgdGhlIGNoaWxkIGNvbnRleHRzIGZyb20gdGhlIGF2YWlsYWJsZSBjb250ZXh0c1xuXHRcdFx0Y29uc3QgcmVjb21tZW5kYXRpb25Db250ZXh0ID0gZmlsdGVyZWRSZWNvbW1lbmRhdGlvbkNvbnRleHRzLmZpbHRlcihmdW5jdGlvbiAoZmlsdGVyZWRSZWNvbW1lbmRhdGlvbkNvbnRleHQpIHtcblx0XHRcdFx0aWYgKFxuXHRcdFx0XHRcdChmaWx0ZXJlZFJlY29tbWVuZGF0aW9uQ29udGV4dC5jb250ZXh0IGFzIE9EYXRhVjRDb250ZXh0KVxuXHRcdFx0XHRcdFx0LmdldFBhdGgoKVxuXHRcdFx0XHRcdFx0Py5pbmNsdWRlcygoY29udGV4dEluZm8/LmNvbnRleHQgYXMgT0RhdGFWNENvbnRleHQpLmdldFBhdGgoKSlcblx0XHRcdFx0KSB7XG5cdFx0XHRcdFx0cmV0dXJuIGZpbHRlcmVkUmVjb21tZW5kYXRpb25Db250ZXh0O1xuXHRcdFx0XHR9XG5cdFx0XHR9KTtcblx0XHRcdHN0YW5kYXJkUmVjb21tZW5kYXRpb25IZWxwZXIuY2xlYXJJZ25vcmVkQ29udGV4dHModGhpcy5pbnRlcm5hbE1vZGVsLCAoY29udGV4dEluZm8/LmNvbnRleHQgYXMgT0RhdGFWNENvbnRleHQpLmdldFBhdGgoKSk7XG5cdFx0XHRyZXR1cm4gdGhpcy5mZXRjaEFuZEFwcGx5UmVjb21tZW5kYXRpb25zKHJlY29tbWVuZGF0aW9uQ29udGV4dCk7XG5cdFx0fSBlbHNlIHtcblx0XHRcdHJldHVybiBmYWxzZTtcblx0XHR9XG5cdH1cblxuXHQvKipcblx0ICogUmV0dXJucyB0aGUgZmlsdGVyZWQgcmVjb21tZW5kYXRpb25zIGZyb20gcGFzc2VkIHJlY29tbWVuZGF0aW9ucyBhbmQgdGhlbiBiYXNlZCBvbiBpdCB3ZSBlaXRoZXIgc2hvdyB0aGUgZmlsdGVyZWQgcmVjb21tZW5kYXRpb25zIG9yIG5vdCBzaG93IHRoZSBBY2NlcHQgYWxsIERpYWxvZyBpZiB0aGVyZSBhcmUgbm8gcmVjb21tZW5kYXRpb25zLlxuXHQgKiBAcGFyYW0gX3BhcmFtcyBQYXJhbXMgb2JqZWN0IGNvbnRhaW5pbmcgcmVjb21tZW5kYXRpb25EYXRhIHByb3BlcnR5IHdoaWNoIGlzIGFuIGFycmF5IG9mIG9iamVjdHMgY29udGFpbmluZyBjb250ZXh0LCBwcm9wZXJ0eVBhdGgsIHZhbHVlIGFuZCB0ZXh0IGZvciBhIHJlY29tbWVuZGF0aW9uXG5cdCAqIEByZXR1cm5zIFByb21pc2Vcblx0ICovXG5cdEBwdWJsaWNFeHRlbnNpb24oKVxuXHRAZXh0ZW5zaWJsZShcIkFmdGVyQXN5bmNcIilcblx0cHVibGljIGFzeW5jIG9uQmVmb3JlQWNjZXB0UmVjb21tZW5kYXRpb25zKF9wYXJhbXM6IEFjY2VwdEFsbFBhcmFtcyk6IFByb21pc2U8dm9pZD4ge1xuXHRcdC8vZG8gbm90aGluZ1xuXHRcdHJldHVybiBQcm9taXNlLnJlc29sdmUoKTsgLy9oYWQgdG8gZG8gdGhpcyBiZWNhdXNlIG9mIGVzbGludCBlcnJvciBvZiBub3QgaGF2aW5nIGF3YWl0IHdoZW4gdGhlIGZ1bmN0aW9uIGlzIGFzeW5jXG5cdH1cblxuXHQvKipcblx0ICogVGhpcyBmdW5jdGlvbiBpcyByZXNwb25zaWJsZSBmb3IgYWNjZXB0aW5nIHRoZSByZWNvbW1lbmRhdGlvbnMuXG5cdCAqIEBwYXJhbSBfcGFyYW1zIFBhcmFtcyBvYmplY3QgY29udGFpbmluZyByZWNvbW1lbmRhdGlvbkRhdGEgcHJvcGVydHkgd2hpY2ggaXMgYW4gYXJyYXkgb2Ygb2JqZWN0cyBjb250YWluaW5nIGNvbnRleHQsIHByb3BlcnR5UGF0aCwgdmFsdWUgYW5kIHRleHQgZm9yIGEgcmVjb21tZW5kYXRpb25cblx0ICogQHJldHVybnMgUHJvbWlzZSB3aGljaCByZXNvbHZlZCB0byBhIEJvb2xlYW4gdmFsdWUgYmFzZWQgb24gd2hldGhlciByZWNvbW1lbmRhdGlvbnMgYXJlIGFjY2VwdGVkIG9yIG5vdFxuXHQgKi9cblx0QHB1YmxpY0V4dGVuc2lvbigpXG5cdEBleHRlbnNpYmxlKE92ZXJyaWRlRXhlY3V0aW9uLkluc3RlYWQpXG5cdHB1YmxpYyBhc3luYyBhY2NlcHRSZWNvbW1lbmRhdGlvbnMoX3BhcmFtczogQWNjZXB0QWxsUGFyYW1zKTogUHJvbWlzZTxib29sZWFuPiB7XG5cdFx0Ly8gdGhlIGZvbGxvd2luZyBjb2RlIHdpbGwgYmUgZXhlY3V0ZWQgaWYgdGhlcmUgaXMgbm8gaG9vayBpbXBsZW1lbnRhdGlvbiBpLmUuIGZvciB0aGUgbmV3IG9yY2hlc3RyYXRpb25cblx0XHRjb25zdCBwcm9taXNlcyA9IFtdO1xuXHRcdGlmIChfcGFyYW1zLnJlY29tbWVuZGF0aW9uRGF0YSkge1xuXHRcdFx0Zm9yIChjb25zdCByZWNvbW1lbmRhdGlvbkRhdGEgb2YgX3BhcmFtcy5yZWNvbW1lbmRhdGlvbkRhdGEpIHtcblx0XHRcdFx0aWYgKHJlY29tbWVuZGF0aW9uRGF0YS5jb250ZXh0ICYmIHJlY29tbWVuZGF0aW9uRGF0YS5wcm9wZXJ0eVBhdGgpIHtcblx0XHRcdFx0XHRwcm9taXNlcy5wdXNoKFxuXHRcdFx0XHRcdFx0cmVjb21tZW5kYXRpb25EYXRhLmNvbnRleHQuc2V0UHJvcGVydHkocmVjb21tZW5kYXRpb25EYXRhLnByb3BlcnR5UGF0aCwgcmVjb21tZW5kYXRpb25EYXRhLnZhbHVlLCBcIiRhdXRvLmFiY1wiKVxuXHRcdFx0XHRcdCk7XG5cdFx0XHRcdH1cblx0XHRcdH1cblx0XHRcdGF3YWl0IFByb21pc2UuYWxsKHByb21pc2VzKTtcblx0XHR9XG5cdFx0cmV0dXJuIHRydWU7XG5cdH1cblxuXHRwcml2YXRlIGFwcGx5UmVjb21tZW5kYXRpb24ocmVjb21tZW5kYXRpb25SZXNwb25zZXM6IFN0YW5kYXJkUmVjb21tZW5kYXRpb25SZXNwb25zZVtdLCBfY29udGV4dDogT0RhdGFWNENvbnRleHRbXSk6IGJvb2xlYW4ge1xuXHRcdHN0YW5kYXJkUmVjb21tZW5kYXRpb25IZWxwZXIuc3RvcmVSZWNvbW1lbmRhdGlvbnMoXG5cdFx0XHRyZWNvbW1lbmRhdGlvblJlc3BvbnNlcyxcblx0XHRcdHRoaXMuZ2V0VmlldygpLmdldE1vZGVsKFwiaW50ZXJuYWxcIikgYXMgSlNPTk1vZGVsLFxuXHRcdFx0X2NvbnRleHRcblx0XHQpO1xuXHRcdHJldHVybiB0cnVlO1xuXHR9XG5cblx0LyoqXG5cdCAqIFN0b3JlcyB0aGUgcmVjb21tZW5kYXRpb24gY29udGV4dHMuXG5cdCAqIEBwYXJhbSBjb250ZXh0c0luZm9cblx0ICovXG5cdHByaXZhdGUgc3RvcmVSZWNvbW1lbmRhdGlvbkNvbnRleHRzKGNvbnRleHRzSW5mbzogUmVjb21tZW5kYXRpb25Db250ZXh0c0luZm9bXSk6IHZvaWQge1xuXHRcdGNvbnN0IGNvbnRleHRQYXRoczogc3RyaW5nW10gPSBbXTtcblx0XHRsZXQgcmVjb21tZW5kYXRpb25Db250ZXh0cyA9IHRoaXMuaW50ZXJuYWxNb2RlbC5nZXRQcm9wZXJ0eShcIi9yZWNvbW1lbmRhdGlvbkNvbnRleHRzXCIpIHx8IFtdO1xuXHRcdGNvbnRleHRzSW5mby5mb3JFYWNoKChjb250ZXh0SW5mbzogUmVjb21tZW5kYXRpb25Db250ZXh0c0luZm8pID0+IHtcblx0XHRcdGNvbnRleHRQYXRocy5wdXNoKChjb250ZXh0SW5mby5jb250ZXh0IGFzIE9EYXRhVjRDb250ZXh0KS5nZXRQYXRoKCkpO1xuXHRcdH0pO1xuXG5cdFx0cmVjb21tZW5kYXRpb25Db250ZXh0cyA9IHJlY29tbWVuZGF0aW9uQ29udGV4dHM/LmZpbHRlcigocmVjb21tZW5kYXRpb25Db250ZXh0OiBSZWNvbW1lbmRhdGlvbkNvbnRleHRzSW5mbykgPT4ge1xuXHRcdFx0Y29uc3QgY29udGV4dCA9IHJlY29tbWVuZGF0aW9uQ29udGV4dD8uY29udGV4dDtcblx0XHRcdGlmIChjb250ZXh0KSB7XG5cdFx0XHRcdGNvbnN0IGNvbnRleHRQYXRoID0gY29udGV4dC5nZXRQYXRoKCk7XG5cdFx0XHRcdGNvbnN0IGluZGV4ID0gY29udGV4dFBhdGhzLmluZGV4T2YoY29udGV4dFBhdGgpO1xuXHRcdFx0XHRpZiAoaW5kZXggPCAwKSB7XG5cdFx0XHRcdFx0Ly8gRXhpc3RpbmcgY29udGV4dCBwYXRoIGlzIG5vdCBmb3VuZCBpbiB0aGUgbmV3bHkgZmV0Y2hlZCByZWNvbW1lbmRhdGlvbiAmIHRoZXJlZm9yZSBkb24ndCBkbyBhbnl0aGluZ1xuXHRcdFx0XHRcdHJldHVybiB0cnVlO1xuXHRcdFx0XHR9IGVsc2UgaWYgKHJlY29tbWVuZGF0aW9uQ29udGV4dC5jb250ZXh0SWRlbnRpZmllcikge1xuXHRcdFx0XHRcdC8vIEV4aXN0aW5nIGNvbnRleHQgcGF0aCBpcyBmb3VuZC4gd2UgdHJ5IHRvIHVwZGF0ZSB0aGUgY29udGV4dEluZm8gd2l0aCB0aGUgbGF0ZXN0IGNvbnRleHRcblx0XHRcdFx0XHQvLyBpbnN0ZWFkIG9mIG91dGRhdGVkIG9uZVxuXHRcdFx0XHRcdGNvbnRleHRzSW5mb1tpbmRleF0uY29udGV4dElkZW50aWZpZXIgPSByZWNvbW1lbmRhdGlvbkNvbnRleHQuY29udGV4dElkZW50aWZpZXI7XG5cdFx0XHRcdH1cblx0XHRcdH1cblx0XHRcdHJldHVybiBmYWxzZTtcblx0XHR9KTtcblxuXHRcdHRoaXMuaW50ZXJuYWxNb2RlbC5zZXRQcm9wZXJ0eShcIi9yZWNvbW1lbmRhdGlvbkNvbnRleHRzXCIsIFsuLi5yZWNvbW1lbmRhdGlvbkNvbnRleHRzLCAuLi5jb250ZXh0c0luZm9dKTtcblx0fVxuXG5cdC8qKlxuXHQgKiBGaWx0ZXJzIHRoZSBjb250ZXh0cyBhbmQgb25seSByZXR1cm5zIHRob3NlIHRoYXQgbWF0Y2hlcyB0aGUgY29udGV4dHMuXG5cdCAqIEBwYXJhbSB0YXJnZXRzXG5cdCAqIEByZXR1cm5zIFJldHVybnMgdGhlIGZpbHRlcmVkIHJlY29tbWVuZGF0aW9uIHJlbGV2YW50IGNvbnRleHRzXG5cdCAqL1xuXHRwcml2YXRlIGZldGNoRmlsdGVyZWRSZWNvbW1lbmRhdGlvbkNvbnRleHRzKHRhcmdldHM6IHN0cmluZ1tdKTogUmVjb21tZW5kYXRpb25Db250ZXh0c0luZm9bXSB7XG5cdFx0Y29uc3QgY29udGV4dFBhdGhzOiBzdHJpbmdbXSA9IFtdO1xuXHRcdGNvbnN0IGZpbHRlcmVkUmVjb21tZW5kYXRpb25Db250ZXh0czogUmVjb21tZW5kYXRpb25Db250ZXh0c0luZm9bXSA9IFtdO1xuXHRcdGZvciAoY29uc3Qga2V5IG9mIHRhcmdldHMpIHtcblx0XHRcdGNvbnN0IGNvbnRleHRQYXRoRnJvbUtleSA9IGtleS5zdWJzdHJpbmcoMCwga2V5Lmxhc3RJbmRleE9mKFwiKVwiKSArIDEpO1xuXHRcdFx0Y29uc3QgcmVjb21tZW5kYXRpb25Db250ZXh0cyA9ICh0aGlzLmdldFZpZXcoKS5nZXRNb2RlbChcImludGVybmFsXCIpIGFzIEpTT05Nb2RlbCkuZ2V0UHJvcGVydHkoXCIvcmVjb21tZW5kYXRpb25Db250ZXh0c1wiKTtcblx0XHRcdHJlY29tbWVuZGF0aW9uQ29udGV4dHMuZm9yRWFjaCgoY29udGV4dEluZm86IFJlY29tbWVuZGF0aW9uQ29udGV4dHNJbmZvKSA9PiB7XG5cdFx0XHRcdGNvbnN0IGNvbnRleHQgPSBjb250ZXh0SW5mby5jb250ZXh0O1xuXHRcdFx0XHRpZiAoKGNvbnRleHQgYXMgT0RhdGFWNENvbnRleHQpLmdldFBhdGgoKSA9PSBjb250ZXh0UGF0aEZyb21LZXkgJiYgIWNvbnRleHRQYXRocy5pbmNsdWRlcyhjb250ZXh0UGF0aEZyb21LZXkpKSB7XG5cdFx0XHRcdFx0Y29udGV4dFBhdGhzLnB1c2goY29udGV4dFBhdGhGcm9tS2V5KTtcblx0XHRcdFx0XHRmaWx0ZXJlZFJlY29tbWVuZGF0aW9uQ29udGV4dHMucHVzaChjb250ZXh0SW5mbyk7XG5cdFx0XHRcdH1cblx0XHRcdH0pO1xuXHRcdH1cblx0XHRyZXR1cm4gZmlsdGVyZWRSZWNvbW1lbmRhdGlvbkNvbnRleHRzO1xuXHR9XG5cblx0LyoqXG5cdCAqIEZldGNoZXMgUmVjb21tZW5kYXRpb25EYXRhIGJhc2VkIG9uIGZpbHRlcmVkIHRhcmdldHMuXG5cdCAqIEBwYXJhbSBmaWx0ZXJlZFRhcmdldHNcblx0ICogQHJldHVybnMgUmVjb21tZW5kYXRpb25EYXRhXG5cdCAqL1xuXHRwcml2YXRlIGZldGNoRmlsdGVyZWRSZWNvbW1lbmRhdGlvbkRhdGEoZmlsdGVyZWRUYXJnZXRzOiBzdHJpbmdbXSk6IFJlY29tbWVuZGF0aW9uSW5mbyB7XG5cdFx0Y29uc3QgZmlsdGVyUmVjb21tZW5kYXRpb25zRGF0YTogUmVjb21tZW5kYXRpb25JbmZvID0ge307XG5cdFx0Y29uc3QgcmVjb21tZW5kYXRpb25EYXRhID0gdGhpcy5nZXRWaWV3KCkuZ2V0TW9kZWwoXCJpbnRlcm5hbFwiKT8uZ2V0UHJvcGVydHkoXCIvcmVjb21tZW5kYXRpb25zRGF0YVwiKTtcblx0XHRPYmplY3Qua2V5cyhyZWNvbW1lbmRhdGlvbkRhdGEpLmZvckVhY2goKGtleTogc3RyaW5nKSA9PiB7XG5cdFx0XHRpZiAoZmlsdGVyZWRUYXJnZXRzLmluY2x1ZGVzKGtleSkpIHtcblx0XHRcdFx0ZmlsdGVyUmVjb21tZW5kYXRpb25zRGF0YVtrZXldID0gT2JqZWN0LmFzc2lnbihyZWNvbW1lbmRhdGlvbkRhdGFba2V5XSwge30pO1xuXHRcdFx0fVxuXHRcdH0pO1xuXHRcdHJldHVybiBmaWx0ZXJSZWNvbW1lbmRhdGlvbnNEYXRhO1xuXHR9XG5cblx0LyoqXG5cdCAqIEZldGNoZXMgdGhlIGZpbHRlcmVkIHRhcmdldHMuXG5cdCAqIEBwYXJhbSBjb25zaWRlclJlY29tbWVuZGF0aW9uQ29udGV4dHMgUGFzc2VkIGFzIHRydWUgd2hlbiByZWNvbW1lbmRhdGlvbiBjb250ZXh0cyBzaG91bGQgYmUgY29uc2lkZXJlZCBpbnN0ZWFkIG9mIGRhdGFcblx0ICogQHJldHVybnMgQXJyYXkgb2YgRmlsdGVyZWQgdGFyZ2V0c1xuXHQgKi9cblx0cHJpdmF0ZSBmZXRjaFRhcmdldHMoY29uc2lkZXJSZWNvbW1lbmRhdGlvbkNvbnRleHRzPzogYm9vbGVhbik6IHN0cmluZ1tdIHtcblx0XHRjb25zdCByZWNvbW1lbmRhdGlvbkRhdGEgPSB0aGlzLmdldFZpZXcoKS5nZXRNb2RlbChcImludGVybmFsXCIpPy5nZXRQcm9wZXJ0eShcIi9yZWNvbW1lbmRhdGlvbnNEYXRhXCIpO1xuXHRcdGlmIChyZWNvbW1lbmRhdGlvbkRhdGEudmVyc2lvbiA9PT0gbnVsbCkge1xuXHRcdFx0cmV0dXJuIFtdO1xuXHRcdH1cblx0XHRjb25zdCBpc0ZjbEVuYWJsZWQgPSB0aGlzLmJhc2UuZ2V0QXBwQ29tcG9uZW50KCkuX2lzRmNsRW5hYmxlZCgpO1xuXHRcdGNvbnN0IGlzRnVsbFNjcmVlbiA9IGlzRmNsRW5hYmxlZFxuXHRcdFx0PyAodGhpcy5iYXNlLmdldEFwcENvbXBvbmVudCgpLmdldFJvb3RWaWV3Q29udHJvbGxlcigpIGFzIEZjbENvbnRyb2xsZXIpLmdldEhlbHBlcigpLmdldEN1cnJlbnRVSVN0YXRlKCkuaXNGdWxsU2NyZWVuXG5cdFx0XHQ6IHRydWU7XG5cdFx0Y29uc3QgaXNSZWNvbW1lbmRhdGlvbkFjY2VwdGFibGUgPSAoY29udGV4dFBhdGg6IHN0cmluZywga2V5OiBzdHJpbmcpOiBib29sZWFuID0+IHtcblx0XHRcdGNvbnN0IHNwbGl0UGF0aEFuZENoZWNrSWZSZWNvbW1lbmRhdGlvbkFjY2VwdGFibGUgPSAoY3R4dFBhdGg6IHN0cmluZyk6IGJvb2xlYW4gPT4ge1xuXHRcdFx0XHRjb25zdCBwYXRoQXJyYXkgPSBrZXkuc3BsaXQoY3R4dFBhdGgpO1xuXHRcdFx0XHRjb25zdCBuZXdQYXRoID0gcGF0aEFycmF5WzFdO1xuXHRcdFx0XHRsZXQgbmV3UGF0aEFycmF5ID0gbmV3UGF0aC5zcGxpdChcIi9cIik7XG5cdFx0XHRcdC8vaGVyZSB3ZSBjaGVjayB0aGUgcGF0aCBieSBzcGxpdHRpbmcgdG8gZGVjaWRlIHdoZXRoZXIgdG8gaW5jbHVkZSByZWNvbW1lbmRhdGlvbnMgb3Igbm90IGluIGRpYWxvZ1xuXHRcdFx0XHRpZiAobmV3UGF0aEFycmF5Lmxlbmd0aCA8PSAzKSB7XG5cdFx0XHRcdFx0cmV0dXJuIHRydWU7XG5cdFx0XHRcdH0gZWxzZSB7XG5cdFx0XHRcdFx0bmV3UGF0aEFycmF5ID0gbmV3UGF0aEFycmF5LnNsaWNlKDIpO1xuXHRcdFx0XHRcdHJldHVybiAhbmV3UGF0aEFycmF5LnNvbWUoKHZhbHVlOiBzdHJpbmcpID0+IHZhbHVlLmluY2x1ZGVzKFwiKFwiKSk7XG5cdFx0XHRcdH1cblx0XHRcdH07XG5cdFx0XHRpZiAoaXNGY2xFbmFibGVkICYmICFpc0Z1bGxTY3JlZW4pIHtcblx0XHRcdFx0Y29uc3QgcmlnaHRNb3N0Q29udGV4dCA9ICh0aGlzLmJhc2UuZ2V0QXBwQ29tcG9uZW50KCkuZ2V0Um9vdFZpZXdDb250cm9sbGVyKCkgYXMgRmNsQ29udHJvbGxlcikuZ2V0UmlnaHRtb3N0Q29udGV4dCgpO1xuXHRcdFx0XHRpZiAoa2V5LmluY2x1ZGVzKHJpZ2h0TW9zdENvbnRleHQ/LmdldFBhdGgoKSBhcyBzdHJpbmcpKSB7XG5cdFx0XHRcdFx0cmV0dXJuIHNwbGl0UGF0aEFuZENoZWNrSWZSZWNvbW1lbmRhdGlvbkFjY2VwdGFibGUocmlnaHRNb3N0Q29udGV4dD8uZ2V0UGF0aCgpIGFzIHN0cmluZyk7XG5cdFx0XHRcdH0gZWxzZSB7XG5cdFx0XHRcdFx0cmV0dXJuIHNwbGl0UGF0aEFuZENoZWNrSWZSZWNvbW1lbmRhdGlvbkFjY2VwdGFibGUoY29udGV4dFBhdGgpO1xuXHRcdFx0XHR9XG5cdFx0XHR9IGVsc2Uge1xuXHRcdFx0XHRyZXR1cm4gc3BsaXRQYXRoQW5kQ2hlY2tJZlJlY29tbWVuZGF0aW9uQWNjZXB0YWJsZShjb250ZXh0UGF0aCk7XG5cdFx0XHR9XG5cdFx0fTtcblxuXHRcdGNvbnN0IGRhdGFUb0JlRmlsdGVyZWQgPSB0aGlzLmZldGNoRGF0YVRvQmVGaWx0ZXJlZChyZWNvbW1lbmRhdGlvbkRhdGEsIGNvbnNpZGVyUmVjb21tZW5kYXRpb25Db250ZXh0cyk7XG5cdFx0cmV0dXJuIChcblx0XHRcdGRhdGFUb0JlRmlsdGVyZWQuZmlsdGVyKChrZXk6IHN0cmluZykgPT4ge1xuXHRcdFx0XHRyZXR1cm4gKFxuXHRcdFx0XHRcdGtleS5pbmNsdWRlcyh0aGlzLmdldFZpZXcoKS5nZXRCaW5kaW5nQ29udGV4dCgpPy5nZXRQYXRoKCkgYXMgc3RyaW5nKSAmJlxuXHRcdFx0XHRcdGlzUmVjb21tZW5kYXRpb25BY2NlcHRhYmxlKHRoaXMuZ2V0VmlldygpLmdldEJpbmRpbmdDb250ZXh0KCk/LmdldFBhdGgoKSBhcyBzdHJpbmcsIGtleSlcblx0XHRcdFx0KTtcblx0XHRcdH0pIHx8IFtdXG5cdFx0KTtcblx0fVxuXG5cdC8qKlxuXHQgKiBGZXRjaGVzIHRoZSBkYXRhIHRvIGJlIGZpbHRlcmVkIGRlcGVuZGluZyBvbiB0aGUgcmVjb21tZW5kYXRpb25EYXRhLlxuXHQgKiBAcGFyYW0gcmVjb21tZW5kYXRpb25EYXRhXG5cdCAqIEBwYXJhbSBjb25zaWRlclJlY29tbWVuZGF0aW9uQ29udGV4dHMgUGFzc2VkIGFzIHRydWUgd2hlbiByZWNvbW1lbmRhdGlvbiBjb250ZXh0cyBzaG91bGQgYmUgY29uc2lkZXJlZCBpbnN0ZWFkIG9mIGRhdGFcblx0ICogQHJldHVybnMgQXJyYXkgb2YgY29udGV4dFBhdGhzIHRvIGJlIGZpbHRlcmVkXG5cdCAqL1xuXHRwcml2YXRlIGZldGNoRGF0YVRvQmVGaWx0ZXJlZChyZWNvbW1lbmRhdGlvbkRhdGE6IFJlY29tbWVuZGF0aW9uSW5mbywgY29uc2lkZXJSZWNvbW1lbmRhdGlvbkNvbnRleHRzOiBib29sZWFuIHwgdW5kZWZpbmVkKTogc3RyaW5nW10ge1xuXHRcdGxldCBkYXRhVG9CZUZpbHRlcmVkOiBzdHJpbmdbXSA9IFtdO1xuXHRcdC8vIGNvbnNpZGVyIHJlY29tbWVuZGF0aW9uQ29udGV4dHMgZm9yIGZldGNoaW5nIHRoZSBwYXRocyBpbiBjYXNlIG9mIGZpZWxkIGNoYW5nZSBzbyB0aGF0IGNvbnRleHRzIGZvciB3aGljaCBlbXB0eSByZWNvbW1lbmRhdGlvbiBkYXRhIGlzIHJldHVybmVkIGFyZSBhbHNvIGNvbnNpZGVyZWRcblx0XHRpZiAoY29uc2lkZXJSZWNvbW1lbmRhdGlvbkNvbnRleHRzKSB7XG5cdFx0XHRjb25zdCByZWNvbW1lbmRhdGlvbkNvbnRleHRzID0gdGhpcy5nZXRWaWV3KCkuZ2V0TW9kZWwoXCJpbnRlcm5hbFwiKT8uZ2V0UHJvcGVydHkoXCIvcmVjb21tZW5kYXRpb25Db250ZXh0c1wiKTtcblx0XHRcdHJlY29tbWVuZGF0aW9uQ29udGV4dHMuZm9yRWFjaCgocmVjb21tZW5kYXRpb25Db250ZXh0OiBSZWNvbW1lbmRhdGlvbkNvbnRleHRzSW5mbykgPT4ge1xuXHRcdFx0XHRkYXRhVG9CZUZpbHRlcmVkLnB1c2goKHJlY29tbWVuZGF0aW9uQ29udGV4dC5jb250ZXh0IGFzIE9EYXRhVjRDb250ZXh0KS5nZXRQYXRoKCkpO1xuXHRcdFx0fSk7XG5cdFx0fSBlbHNlIHtcblx0XHRcdC8vIGNvbnNpZGVyIHJlY29tbWVuZGF0aW9uRGF0YSBpbiBjYXNlIG9mIGFjY2VwdCBhbGwgZGlhbG9nIHNjZW5hcmlvc1xuXHRcdFx0ZGF0YVRvQmVGaWx0ZXJlZCA9IE9iamVjdC5rZXlzKHJlY29tbWVuZGF0aW9uRGF0YSkuZmlsdGVyKChrZXkpID0+IHtcblx0XHRcdFx0cmV0dXJuIGtleSAhPT0gXCJ2ZXJzaW9uXCIgJiYga2V5ICE9PSBcImtleXNcIjtcblx0XHRcdH0pO1xuXHRcdH1cblx0XHRyZXR1cm4gZGF0YVRvQmVGaWx0ZXJlZDtcblx0fVxuXG5cdC8qKlxuXHQgKiBPdmVyd3JpdGVzIEFjY2VwdEFsbCBQYXJhbXMgYmFzZWQgb2YgcmVjb21tZW5kYXRpb24gZGF0YSBhbmQgY29udGV4dHMuXG5cdCAqIEBwYXJhbSBmaWx0ZXJSZWNvbW1lbmRhdGlvbkRhdGFcblx0ICogQHBhcmFtIGZpbHRlclJlY29tbWVuZGF0aW9uQ29udGV4dHNcblx0ICogQHBhcmFtIHBhcmFtc1xuXHQgKi9cblx0cHJpdmF0ZSBhZGp1c3RBY2NlcHRBbGxQYXJhbXMoXG5cdFx0ZmlsdGVyUmVjb21tZW5kYXRpb25EYXRhOiBSZWNvbW1lbmRhdGlvbkluZm8sXG5cdFx0ZmlsdGVyUmVjb21tZW5kYXRpb25Db250ZXh0czogUmVjb21tZW5kYXRpb25Db250ZXh0c0luZm9bXSxcblx0XHRwYXJhbXM6IEFjY2VwdEFsbFBhcmFtc1xuXHQpOiB2b2lkIHtcblx0XHRwYXJhbXMucmVjb21tZW5kYXRpb25EYXRhID0gW107XG5cdFx0Zm9yIChjb25zdCBrZXkgaW4gZmlsdGVyUmVjb21tZW5kYXRpb25EYXRhKSB7XG5cdFx0XHRpZiAoZmlsdGVyUmVjb21tZW5kYXRpb25EYXRhW2tleV0udmFsdWUgfHwgZmlsdGVyUmVjb21tZW5kYXRpb25EYXRhW2tleV0udGV4dCkge1xuXHRcdFx0XHQvLyBJbiBjYXNlIHRoZXJlIGlzIG5vIHBsYWNlaG9sZGVyIHZhbHVlIG9yIHBsYWNlaG9sZGVyIHRleHQgdGhlbiB0aGlzIHJlY29tbWVuZGF0aW9uIGlzIG5vdCByZWxldmFudCBmb3IgQWNjZXB0LlxuXHRcdFx0XHQvLyBVc2VyIG5lZWRzIHRvIG1hbnVhbGx5IHNlbGVjdCB0aGUgcmVjb21tZW5kZWQgdmFsdWUgaW4gdGhlc2UgY2FzZXMgJiB0aGVyZWZvcmUgZmlsdGVyIHRoZSBzYW1lLlxuXHRcdFx0XHRjb25zdCBjb250ZXh0UGF0aEZyb21LZXkgPSBrZXkuc3Vic3RyaW5nKDAsIGtleS5sYXN0SW5kZXhPZihcIilcIikgKyAxKTtcblx0XHRcdFx0Y29uc3QgcHJvcGVydHlQYXRoRnJvbUtleSA9IGtleS5zdWJzdHJpbmcoa2V5Lmxhc3RJbmRleE9mKFwiKVwiKSArIDIpO1xuXHRcdFx0XHRjb25zdCBtYXRjaGluZ0NvbnRleHQgPSBmaWx0ZXJSZWNvbW1lbmRhdGlvbkNvbnRleHRzLmZpbHRlcihmdW5jdGlvbiAoY29udGV4dEluZm8pIHtcblx0XHRcdFx0XHRpZiAoKGNvbnRleHRJbmZvPy5jb250ZXh0IGFzIE9EYXRhVjRDb250ZXh0KS5nZXRQYXRoKCkgPT09IGNvbnRleHRQYXRoRnJvbUtleSkge1xuXHRcdFx0XHRcdFx0cmV0dXJuIHRydWU7XG5cdFx0XHRcdFx0fVxuXHRcdFx0XHR9KTtcblx0XHRcdFx0aWYgKFxuXHRcdFx0XHRcdG1hdGNoaW5nQ29udGV4dD8ubGVuZ3RoID4gMCAmJlxuXHRcdFx0XHRcdHN0YW5kYXJkUmVjb21tZW5kYXRpb25IZWxwZXIuaXNSZWNvbW1lbmRhdGlvbkZpZWxkTnVsbChcblx0XHRcdFx0XHRcdG1hdGNoaW5nQ29udGV4dFswXS5jb250ZXh0IGFzIE9EYXRhVjRDb250ZXh0LFxuXHRcdFx0XHRcdFx0a2V5LFxuXHRcdFx0XHRcdFx0cHJvcGVydHlQYXRoRnJvbUtleVxuXHRcdFx0XHRcdClcblx0XHRcdFx0KSB7XG5cdFx0XHRcdFx0cGFyYW1zLnJlY29tbWVuZGF0aW9uRGF0YS5wdXNoKHtcblx0XHRcdFx0XHRcdGNvbnRleHQ6IG1hdGNoaW5nQ29udGV4dFswXS5jb250ZXh0LFxuXHRcdFx0XHRcdFx0Y29udGV4dElkZW50aWZpZXI6IG1hdGNoaW5nQ29udGV4dFswXS5jb250ZXh0SWRlbnRpZmllcixcblx0XHRcdFx0XHRcdHByb3BlcnR5UGF0aDogcHJvcGVydHlQYXRoRnJvbUtleSxcblx0XHRcdFx0XHRcdHZhbHVlOiBmaWx0ZXJSZWNvbW1lbmRhdGlvbkRhdGFba2V5XS52YWx1ZSxcblx0XHRcdFx0XHRcdHRleHQ6IGZpbHRlclJlY29tbWVuZGF0aW9uRGF0YVtrZXldLnRleHRcblx0XHRcdFx0XHR9KTtcblx0XHRcdFx0fVxuXHRcdFx0fVxuXHRcdH1cblx0fVxuXG5cdC8qKlxuXHQgKiBGZXRjaGVzIFJlY29tbWVuZGF0aW9uSW5mbyB0aGF0IGNvbnRhaW5zIHRhcmdldHMsIGZpbHRlclJlY29tbWVuZGF0aW9uRGF0YSwgZmlsdGVyUmVjb21tZW5kYXRpb25Db250ZXh0cy5cblx0ICogQHJldHVybnMgUHJvbWlzZSB3aGljaCByZXNvbHZlcyB3aXRoIEFjY2VwdGFsbFBhcmFtc1xuXHQgKi9cblx0cHVibGljIGFzeW5jIGZldGNoQWNjZXB0QWxsUGFyYW1zKCk6IFByb21pc2U8QWNjZXB0QWxsUGFyYW1zPiB7XG5cdFx0Y29uc3QgdGFyZ2V0czogc3RyaW5nW10gPSB0aGlzLmZldGNoVGFyZ2V0cygpO1xuXHRcdGNvbnN0IGZpbHRlclJlY29tbWVuZGF0aW9uRGF0YSA9IHRoaXMuZmV0Y2hGaWx0ZXJlZFJlY29tbWVuZGF0aW9uRGF0YSh0YXJnZXRzKTtcblx0XHRjb25zdCBmaWx0ZXJSZWNvbW1lbmRhdGlvbkNvbnRleHRzID0gdGhpcy5mZXRjaEZpbHRlcmVkUmVjb21tZW5kYXRpb25Db250ZXh0cyh0YXJnZXRzKTtcblx0XHRjb25zdCBwYXJhbXMgPSB7fTtcblx0XHR0aGlzLmFkanVzdEFjY2VwdEFsbFBhcmFtcyhmaWx0ZXJSZWNvbW1lbmRhdGlvbkRhdGEsIGZpbHRlclJlY29tbWVuZGF0aW9uQ29udGV4dHMsIHBhcmFtcyk7XG5cdFx0YXdhaXQgKHRoaXMuZ2V0VmlldygpLmdldENvbnRyb2xsZXIoKSBhcyBQYWdlQ29udHJvbGxlcikucmVjb21tZW5kYXRpb25zLm9uQmVmb3JlQWNjZXB0UmVjb21tZW5kYXRpb25zKHBhcmFtcyk7XG5cdFx0c3RhbmRhcmRSZWNvbW1lbmRhdGlvbkhlbHBlci5hZGRDb250ZXh0SWRlbnRpZmllclRleHQocGFyYW1zLCB0aGlzLmdldFZpZXcoKT8uZ2V0QmluZGluZ0NvbnRleHQoKT8uZ2V0UGF0aCgpKTtcblx0XHR0aGlzLmRhdGFUb0JlQWNjZXB0ZWQgPSAocGFyYW1zIGFzIEFjY2VwdEFsbFBhcmFtcykucmVjb21tZW5kYXRpb25EYXRhIHx8IFtdO1xuXHRcdHJldHVybiBwYXJhbXM7XG5cdH1cblxuXHQvKipcblx0ICogQ2hlY2tzIGlmIHJlY29tbWVuZGF0aW9ucyBleGlzdCBvciBub3QuXG5cdCAqIEByZXR1cm5zIEJvb2xlYW4gdmFsdWUgYmFzZWQgb24gd2hldGhlciByZWNvbW1lbmRhdGlvbnMgYXJlIHByZXNlbnQgb3Igbm90XG5cdCAqL1xuXHRwdWJsaWMgY2hlY2tJZlJlY29tbWVuZGF0aW9uc0V4aXN0KCk6IGJvb2xlYW4ge1xuXHRcdGNvbnN0IHJlY29tbWVuZGF0aW9uRGF0YSA9IHRoaXMuaW50ZXJuYWxNb2RlbC5nZXRQcm9wZXJ0eShcIi9yZWNvbW1lbmRhdGlvbnNEYXRhXCIpIHx8IHt9O1xuXHRcdHJldHVybiBPYmplY3Qua2V5cyhyZWNvbW1lbmRhdGlvbkRhdGEpLmxlbmd0aCAhPT0gMDtcblx0fVxuXG5cdC8qKlxuXHQgKiBUaGlzIGZ1bmN0aW9uIHdpbGwgY2xlYXIgcmVjb21tZW5kYXRpb24gRGF0YSBmb3IgYSBnaXZlbiBjb250ZXh0IGFuZCBhbGwgaXRzIGNoaWxkcmVuLlxuXHQgKiBAcGFyYW0gY29udGV4dHMgQ29udGV4dCBmb3Igd2hpY2ggcmVjb21tZW5kYXRpb24gaGFzIHRvIGJlIGNsZWFyZWRcblx0ICovXG5cdHB1YmxpYyBpZ25vcmVSZWNvbW1lbmRhdGlvbkZvckNvbnRleHRzKGNvbnRleHRzPzogT0RhdGFWNENvbnRleHRbXSk6IHZvaWQge1xuXHRcdGlmICghY29udGV4dHMgfHwgIWNvbnRleHRzLmxlbmd0aCkge1xuXHRcdFx0Y29uc3QgdmlldyA9IHRoaXMuZ2V0VmlldygpO1xuXHRcdFx0Y29uc3QgYmluZGluZ0NvbnRleHQgPSB2aWV3LmdldEJpbmRpbmdDb250ZXh0KCkgYXMgT0RhdGFWNENvbnRleHQ7XG5cdFx0XHRjb250ZXh0cyA9IFtiaW5kaW5nQ29udGV4dF07XG5cdFx0fVxuXHRcdHN0YW5kYXJkUmVjb21tZW5kYXRpb25IZWxwZXIuaWdub3JlUmVjb21tZW5kYXRpb25Gb3JDb250ZXh0cyhjb250ZXh0cywgdGhpcy5pbnRlcm5hbE1vZGVsKTtcblx0fVxuXG5cdHByaXZhdGUgdHJ5UmVzZXRSZWNvbW1lbmRhdGlvbnMocm9vdENvbnRleHQ6IE9EYXRhVjRDb250ZXh0KTogdm9pZCB7XG5cdFx0c3RhbmRhcmRSZWNvbW1lbmRhdGlvbkhlbHBlci5zZXRDdXJyZW50Um9vdENvbnRleHQocm9vdENvbnRleHQpO1xuXHRcdC8vIFRPRE86IFN0YW5kYXJkUmVjb21tZW5kYXRpb25IZWxwZXIgc3RvcmVzIGFsbCB0aGUgcmVjb21tZW5kYXRpb25zIGZvciBhbiBpbnN0YW5jZSBvZiBidXNpbmVzcyBvYmplY3Rcblx0XHQvLyBtZWFuaW5nIGRvZXNuJ3QgbWF0dGVyIHRoZSByZWNvbW1lbmRhdGlvbnMgYXJlIG9uIHRoZSBPUC9TdWJPUC4gQnV0IHRoZSByZWNvbW1lbmRhdGlvbnMgY29udGV4dHMgaGVyZVxuXHRcdC8vIGlzIHNwZWNpZmljIHRvIHRoaXMgY29udHJvbGxlciwgU3ViT1AgY29udHJvbGxlciB3aWxsIGhhdmUgaXRzIG93biByZWNvbW1lbmRhdGlvbiBjb250ZXh0cy4gSWRlYWxseSBpdFxuXHRcdC8vIHNob3VsZCBiZSBjbGVhcmVkIGJ1dCB0aGlzIGlzIG5vdCBkb25lIGhlcmUuIFRoaXMgY29tcGxldGUgdGhpbmcgbmVlZHMgdG8gYmUgcmVmYWN0b3JlZFxuXHRcdHRoaXMuaW50ZXJuYWxNb2RlbC5zZXRQcm9wZXJ0eShcIi9yZWNvbW1lbmRhdGlvbkNvbnRleHRzXCIsIFtdKTtcblx0XHRzdGFuZGFyZFJlY29tbWVuZGF0aW9uSGVscGVyLnJlc2V0UmVjb21tZW5kYXRpb25zKHRoaXMuaW50ZXJuYWxNb2RlbCk7XG5cdH1cblxuXHQvKipcblx0ICogVGhpcyBmdW5jdGlvbiB3aWxsIHN0b3JlIHRoZSBudW1iZXIgb2YgZmllbGRzIEFjY2VwdGVkL0lnbm9yZWQgd2hlbiBTYXZlIGJ1dHRvbiBpcyBjbGlja2VkLCBkZXBlbmRpbmcgb24gd2hpY2ggcmVjb21tZWRhdGlvbiBvcHRpb24gd2FzIGNob29zZW4gQWNjZXB0L0lnbm9yZSBhbmQgU2F2ZS5cblx0ICogQHBhcmFtIHJlY29tbWVuZGF0aW9uT3B0aW9uQ2hvb3NlblxuXHQgKi9cblx0cHVibGljIGFzeW5jIHN0b3JlRGF0YUZvclRlbGVtZXRyeShyZWNvbW1lbmRhdGlvbk9wdGlvbkNob29zZW46IHVuZGVmaW5lZCB8IFJlY29tbWVuZGF0aW9uRGlhbG9nRGVjaXNpb24pOiBQcm9taXNlPHZvaWQ+IHtcblx0XHRjb25zdCByb290Q29udGV4dCA9IGF3YWl0IHRoaXMuX2dldFJvb3RDb250ZXh0KHRoaXMuZ2V0VmlldygpLmdldEJpbmRpbmdDb250ZXh0KCkgYXMgT0RhdGFWNENvbnRleHQpO1xuXHRcdGlmIChyb290Q29udGV4dCAmJiB0aGlzLmJhc2UucmVjb21tZW5kYXRpb25zLmlzRW5hYmxlZChyb290Q29udGV4dCkpIHtcblx0XHRcdGlmIChyZWNvbW1lbmRhdGlvbk9wdGlvbkNob29zZW4gPT09IFJlY29tbWVuZGF0aW9uRGlhbG9nRGVjaXNpb24uQWNjZXB0KSB7XG5cdFx0XHRcdC8vIGluY3JlYXNlIGFjY2VwdCBjb3VudFxuXHRcdFx0XHR0aGlzLnRlbGVtZXRyeS51cGRhdGVEYXRhKFwibnVtYmVyT2ZGaWVsZHNBY2NlcHRlZFRocm91Z2hBY2NlcHRCdXR0b25cIiwgdGhpcy5kYXRhVG9CZUFjY2VwdGVkLmxlbmd0aCk7XG5cdFx0XHR9IGVsc2UgaWYgKHJlY29tbWVuZGF0aW9uT3B0aW9uQ2hvb3NlbiA9PT0gUmVjb21tZW5kYXRpb25EaWFsb2dEZWNpc2lvbi5JZ25vcmUpIHtcblx0XHRcdFx0Ly8gaW5jcmVhc2UgaWdub3JlIGNvdW50XG5cdFx0XHRcdHRoaXMudGVsZW1ldHJ5LnVwZGF0ZURhdGEoXCJudW1iZXJPZkZpZWxkc0lnbm9yZWRUaHJvdWdoSWdub3JlQnV0dG9uXCIsIHRoaXMuZGF0YVRvQmVBY2NlcHRlZC5sZW5ndGgpO1xuXHRcdFx0fVxuXHRcdFx0dGhpcy50ZWxlbWV0cnkuc3RvcmVEYXRhKHRoaXMuZ2V0VmlldygpIGFzIEZFVmlldyk7XG5cdFx0fVxuXHR9XG5cblx0LyoqXG5cdCAqIFRoaXMgZnVuY3Rpb24gd2lsbCB1cGRhdGUgdGhlIGNvdW50IGJ5IDEgaW4gdGVsZW1ldHJ5IGRhdGEuXG5cdCAqIEBwYXJhbSBrZXlcblx0ICovXG5cdHB1YmxpYyBpbmNyZWFzZVRlbGVtZXRyeURhdGFDb3VudChrZXk6IGtleW9mIFJlY29tbWVuZGF0aW9uVGVsZW1ldHJ5KTogdm9pZCB7XG5cdFx0dGhpcy50ZWxlbWV0cnkuaW5jcmVhc2VDb3VudChrZXkpO1xuXHR9XG5cblx0LyoqXG5cdCAqIFRoaXMgZnVuY3Rpb24gd2lsbCB1cGRhdGUgdGVsZW1ldHJ5IGRhdGEgZm9yIHdoaWNoIG9wdGlvbiB1c2VyIGNob3NlIHdoZW4gc2VsZWN0aW5nIGEgZmllbGQgdmFsdWUsIGFzIHRvcC9ub24tdG9wIHJlY29tbWVuZGF0aW9uIG9yIHNvbWUgb3RoZXIgdmFsdWUuXG5cdCAqIEBwYXJhbSBmaWVsZFBhdGhcblx0ICogQHBhcmFtIHNlbGVjdGVkVmFsdWVcblx0ICovXG5cdHB1YmxpYyB1cGRhdGVUZWxlbWV0cnlEYXRhQmFzZWRPblVzZXJTZWxlY3Rpb24oZmllbGRQYXRoOiBzdHJpbmcsIHNlbGVjdGVkVmFsdWU6IHN0cmluZyk6IHZvaWQge1xuXHRcdHRoaXMudGVsZW1ldHJ5LnVwZGF0ZVRlbGVtZXRyeURhdGFCYXNlZE9uVXNlclNlbGVjdGlvbih0aGlzLmdldFZpZXcoKSwgZmllbGRQYXRoLCBzZWxlY3RlZFZhbHVlKTtcblx0fVxuXG5cdC8qKlxuXHQgKiBUaGlzIGZ1bmN0aW9uIHdpbGwgdXBkYXRlIHRoZSB0b3RhbCBudW1iZXIgb2YgZmllbGRzIHJlY29tbWVuZGVkLiBJZiB0aGUgZmllbGQgaXMgYWxyZWFkeSBpbmNsdWRlZCBpbiB0ZWxlbWV0cnkgY291bnQgdGhlbiB3ZSBkbyBub3QgaW5jbHVkZS5cblx0ICogVGhpcyB3YXkgd2Uga25vdyB0aGUgdG90YWwgbnVtYmVyIG9mIHVuaXF1ZSBmaWVsZHMgcmVjb21tZW5kZWQuXG5cdCAqIEBwYXJhbSByZWNvbW1lbmRhdGlvbkRhdGFcblx0ICovXG5cdHVwZGF0ZUFsbFJlY29tbWVuZGVkRmllbGRzKHJlY29tbWVuZGF0aW9uRGF0YTogU3RhbmRhcmRSZWNvbW1lbmRhdGlvblJlc3BvbnNlW10pOiB2b2lkIHtcblx0XHRjb25zdCB2aWV3QmluZGluZ0NvbnRleHRQYXRoID0gKHRoaXMuZ2V0VmlldygpLmdldEJpbmRpbmdDb250ZXh0KCkgYXMgQ29udGV4dCkuZ2V0UGF0aCgpO1xuXHRcdGNvbnN0IG5ld1JlY29tbWVuZGF0aW9uc0ZvckN1cnJlbnRDb250ZXh0cyA9IHJlY29tbWVuZGF0aW9uRGF0YS5maWx0ZXIoXG5cdFx0XHQocmVzcG9uc2UpID0+IHJlc3BvbnNlW1wiQUlSZWNvbW1lbmRlZEZpZWxkUGF0aFwiXT8uaW5jbHVkZXModmlld0JpbmRpbmdDb250ZXh0UGF0aClcblx0XHQpO1xuXHRcdGlmICghdGhpcy5hbGxSZWNvbW1lbmRlZEZpZWxkcykge1xuXHRcdFx0dGhpcy5hbGxSZWNvbW1lbmRlZEZpZWxkcyA9IFtdO1xuXHRcdH1cblx0XHRuZXdSZWNvbW1lbmRhdGlvbnNGb3JDdXJyZW50Q29udGV4dHMuZm9yRWFjaCgocmVzcG9uc2UpID0+IHtcblx0XHRcdGNvbnN0IGZpZWxkUGF0aCA9IHJlc3BvbnNlW1wiQUlSZWNvbW1lbmRlZEZpZWxkUGF0aFwiXTtcblx0XHRcdGlmIChmaWVsZFBhdGgpIHtcblx0XHRcdFx0aWYgKCF0aGlzLmFsbFJlY29tbWVuZGVkRmllbGRzLmluY2x1ZGVzKGZpZWxkUGF0aCkpIHtcblx0XHRcdFx0XHR0aGlzLmFsbFJlY29tbWVuZGVkRmllbGRzLnB1c2goZmllbGRQYXRoKTtcblx0XHRcdFx0XHR0aGlzLnRlbGVtZXRyeS5pbmNyZWFzZUNvdW50KFwibnVtYmVyT2ZSZWNvbW1lbmRlZEZpZWxkc1wiKTtcblx0XHRcdFx0fVxuXHRcdFx0fVxuXHRcdH0pO1xuXHR9XG59XG4iXSwibWFwcGluZ3MiOiI7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7O01Bc0NxQkEsZUFBZSxJQUFBQyxJQUFBLEdBRG5DQyxjQUFjLENBQUMsa0RBQWtELENBQUMsRUFBQUMsS0FBQSxHQXVCakVDLGNBQWMsQ0FBQyxDQUFDLEVBQUFDLEtBQUEsR0FRaEJELGNBQWMsQ0FBQyxVQUFVLENBQUMsRUFBQUUsS0FBQSxHQWlEMUJDLGVBQWUsQ0FBQyxDQUFDLEVBQUFDLEtBQUEsR0FjakJELGVBQWUsQ0FBQyxDQUFDLEVBQUFFLEtBQUEsR0FDakJDLFVBQVUsQ0FBQ0MsaUJBQWlCLENBQUNDLE9BQU8sQ0FBQyxFQUFBQyxLQUFBLEdBVXJDTixlQUFlLENBQUMsQ0FBQyxFQUFBTyxLQUFBLEdBQ2pCQyxjQUFjLENBQUMsQ0FBQyxFQUFBQyxLQUFBLEdBWWhCVCxlQUFlLENBQUMsQ0FBQyxFQUFBVSxNQUFBLEdBQ2pCUCxVQUFVLENBQUNDLGlCQUFpQixDQUFDQyxPQUFPLENBQUMsRUFBQU0sTUFBQSxHQVlyQ1gsZUFBZSxDQUFDLENBQUMsRUFBQVksTUFBQSxHQW1EakJaLGVBQWUsQ0FBQyxDQUFDLEVBQUFhLE1BQUEsR0E4QmpCYixlQUFlLENBQUMsQ0FBQyxFQUFBYyxNQUFBLEdBQ2pCWCxVQUFVLENBQUMsWUFBWSxDQUFDLEVBQUFZLE1BQUEsR0FXeEJmLGVBQWUsQ0FBQyxDQUFDLEVBQUFnQixNQUFBLEdBQ2pCYixVQUFVLENBQUNDLGlCQUFpQixDQUFDQyxPQUFPLENBQUMsRUFBQVgsSUFBQSxDQUFBdUIsTUFBQSxJQUFBQyxPQUFBLDBCQUFBQyxvQkFBQTtJQUFBQyxjQUFBLENBQUEz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
493
+ //# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJuYW1lcyI6WyJSZWNvbW1lbmRhdGlvbnMiLCJfZGVjIiwiZGVmaW5lVUk1Q2xhc3MiLCJfZGVjMiIsIm1ldGhvZE92ZXJyaWRlIiwiX2RlYzMiLCJfZGVjNCIsInB1YmxpY0V4dGVuc2lvbiIsIl9kZWM1IiwiX2RlYzYiLCJleHRlbnNpYmxlIiwiT3ZlcnJpZGVFeGVjdXRpb24iLCJJbnN0ZWFkIiwiX2RlYzciLCJfZGVjOCIsImZpbmFsRXh0ZW5zaW9uIiwiX2RlYzkiLCJfZGVjMTAiLCJfZGVjMTEiLCJfZGVjMTIiLCJfZGVjMTMiLCJfZGVjMTQiLCJfZGVjMTUiLCJfZGVjMTYiLCJfY2xhc3MiLCJfY2xhc3MyIiwiX0NvbnRyb2xsZXJFeHRlbnNpb24iLCJfdGhpcyIsImNhbGwiLCJkYXRhVG9CZUFjY2VwdGVkIiwiX2V4cG9ydHMiLCJfaW5oZXJpdHNMb29zZSIsIl9wcm90byIsInByb3RvdHlwZSIsIm9uSW5pdCIsInRlbGVtZXRyeSIsIlRlbGVtZXRyeSIsImFsbFJlY29tbWVuZGVkRmllbGRzIiwiaW50ZXJuYWxNb2RlbCIsImJhc2UiLCJnZXRWaWV3IiwiZ2V0TW9kZWwiLCJwcmV2aW91c0NvbnRleHQiLCJ1bmRlZmluZWQiLCJvbkFmdGVyQmluZGluZyIsImNvbnRleHQiLCJjdXJyZW50Q29udGV4dEJhc2VQYXRoIiwiZ2V0UGF0aCIsInNwbGl0IiwicHJldmlvdXNDb250ZXh0QmFzZVBhdGgiLCJyb290Q29udGV4dCIsImlzUmVjb21tZW5kYXRpb25FbmFibGVkIiwiZ2V0UHJvcGVydHkiLCJfZ2V0Um9vdENvbnRleHQiLCJyZWNvbW1lbmRhdGlvbnMiLCJpc0VuYWJsZWQiLCJzZXRQcm9wZXJ0eSIsImlzRmNsRW5hYmxlZCIsImdldEFwcENvbXBvbmVudCIsIl9pc0ZjbEVuYWJsZWQiLCJpc0Z1bGxTY3JlZW4iLCJnZXRSb290Vmlld0NvbnRyb2xsZXIiLCJnZXRIZWxwZXIiLCJnZXRDdXJyZW50VUlTdGF0ZSIsInRyeVJlc2V0UmVjb21tZW5kYXRpb25zIiwicmVzZXREYXRhIiwicHJvZ3JhbW1pbmdNb2RlbCIsIlRyYW5zYWN0aW9uSGVscGVyIiwiZ2V0UHJvZ3JhbW1pbmdNb2RlbCIsIkNvbW1vblV0aWxzIiwiY3JlYXRlUm9vdENvbnRleHQiLCJjbGVhclJlY29tbWVuZGF0aW9ucyIsImJpbmRpbmdDb250ZXh0IiwiZ2V0QmluZGluZ0NvbnRleHQiLCJyZWNvbW1lbmRhdGlvbkhlbHBlciIsIl9yb290Q29udGV4dCIsImZldGNoUmVjb21tZW5kYXRpb25zIiwiX2NvbnRleHQiLCJQcm9taXNlIiwicmVzb2x2ZSIsImZldGNoQW5kQXBwbHlSZWNvbW1lbmRhdGlvbnMiLCJjdXJyZW50Q29udGV4dHNJbmZvIiwiY29uc2lkZXJPbmx5TmV3Q29udGV4dCIsImlzU3VjY2VzcyIsInNpZGVFZmZlY3RzIiwiZ2V0U2lkZUVmZmVjdHNTZXJ2aWNlIiwicmVjb21tZW5kYXRpb25SZWdpc3RyeSIsImdldFJlY29tbWVuZGF0aW9uc01hcHBpbmciLCJmaWx0ZXJlZENvbnRleHRzSW5mbyIsImZpbHRlciIsImNvbnRleHRJbmZvIiwic3RhbmRhcmRSZWNvbW1lbmRhdGlvbkhlbHBlciIsImNoZWNrSWZSZWNvbW1lbmRhdGlvblJvbGVFeGlzdHNGb3JDb250ZXh0IiwiY29udGV4dHNJbmZvIiwiZ2V0Q29udGV4dHNXaXRoTm9SZWNvbW1lbmRhdGlvbnMiLCJjb250ZXh0cyIsIm1hcCIsImxlbmd0aCIsInN0YXJ0VGltZSIsInBlcmZvcm1hbmNlIiwibm93IiwicmVjb21tZW5kYXRpb25EYXRhIiwiZW5kVGltZSIsInVwZGF0ZVJlc3BvbnNlVGltZUluZm8iLCJ1cGRhdGVBbGxSZWNvbW1lbmRlZEZpZWxkcyIsInVwZGF0ZURhdGFGcm9tUmVjb21tZW5kYXRpb25SZXNwb25zZSIsImluY3JlYXNlQ291bnQiLCJhcHBseVJlY29tbWVuZGF0aW9uIiwiZSIsIkxvZyIsImVycm9yIiwic3RvcmVSZWNvbW1lbmRhdGlvbkNvbnRleHRzIiwiZmV0Y2hBbmRBcHBseVJlY29tbWVuZGF0aW9uc09uRmllbGRDaGFuZ2UiLCJmaWVsZCIsImFwcENvbXBvbmVudCIsImlzRmllbGRSZWNvbW1lbmRhdGlvblJlbGV2YW50IiwiY2hlY2tJZkZpZWxkSXNSZWNvbW1lbmRhdGlvblJlbGV2YW50IiwidGFyZ2V0cyIsImZldGNoVGFyZ2V0cyIsImZpbHRlcmVkUmVjb21tZW5kYXRpb25Db250ZXh0cyIsImZldGNoRmlsdGVyZWRSZWNvbW1lbmRhdGlvbkNvbnRleHRzIiwicmVjb21tZW5kYXRpb25Db250ZXh0IiwiZmlsdGVyZWRSZWNvbW1lbmRhdGlvbkNvbnRleHQiLCJpbmNsdWRlcyIsImNsZWFySWdub3JlZENvbnRleHRzIiwib25CZWZvcmVBY2NlcHRSZWNvbW1lbmRhdGlvbnMiLCJfcGFyYW1zIiwiYWNjZXB0UmVjb21tZW5kYXRpb25zIiwicHJvbWlzZXMiLCJwcm9wZXJ0eVBhdGgiLCJwdXNoIiwidmFsdWUiLCJhbGwiLCJyZWNvbW1lbmRhdGlvblJlc3BvbnNlcyIsInN0b3JlUmVjb21tZW5kYXRpb25zIiwiY29udGV4dFBhdGhzIiwicmVjb21tZW5kYXRpb25Db250ZXh0cyIsImZvckVhY2giLCJjb250ZXh0UGF0aCIsImluZGV4IiwiaW5kZXhPZiIsImNvbnRleHRJZGVudGlmaWVyIiwia2V5IiwiY29udGV4dFBhdGhGcm9tS2V5Iiwic3Vic3RyaW5nIiwibGFzdEluZGV4T2YiLCJmZXRjaEZpbHRlcmVkUmVjb21tZW5kYXRpb25EYXRhIiwiZmlsdGVyZWRUYXJnZXRzIiwiZmlsdGVyUmVjb21tZW5kYXRpb25zRGF0YSIsIk9iamVjdCIsImtleXMiLCJhc3NpZ24iLCJjb25zaWRlclJlY29tbWVuZGF0aW9uQ29udGV4dHMiLCJ2ZXJzaW9uIiwiaXNSZWNvbW1lbmRhdGlvbkFjY2VwdGFibGUiLCJzcGxpdFBhdGhBbmRDaGVja0lmUmVjb21tZW5kYXRpb25BY2NlcHRhYmxlIiwiY3R4dFBhdGgiLCJwYXRoQXJyYXkiLCJuZXdQYXRoIiwibmV3UGF0aEFycmF5Iiwic2xpY2UiLCJzb21lIiwicmlnaHRNb3N0Q29udGV4dCIsImdldFJpZ2h0bW9zdENvbnRleHQiLCJkYXRhVG9CZUZpbHRlcmVkIiwiZmV0Y2hEYXRhVG9CZUZpbHRlcmVkIiwiYWRqdXN0QWNjZXB0QWxsUGFyYW1zIiwiZmlsdGVyUmVjb21tZW5kYXRpb25EYXRhIiwiZmlsdGVyUmVjb21tZW5kYXRpb25Db250ZXh0cyIsInBhcmFtcyIsInRleHQiLCJwcm9wZXJ0eVBhdGhGcm9tS2V5IiwibWF0Y2hpbmdDb250ZXh0IiwiaXNSZWNvbW1lbmRhdGlvbkZpZWxkTnVsbCIsImZldGNoQWNjZXB0QWxsUGFyYW1zIiwiZ2V0Q29udHJvbGxlciIsImFkZENvbnRleHRJZGVudGlmaWVyVGV4dCIsImNoZWNrSWZSZWNvbW1lbmRhdGlvbnNFeGlzdCIsImlnbm9yZVJlY29tbWVuZGF0aW9uRm9yQ29udGV4dHMiLCJ2aWV3Iiwic2V0Q3VycmVudFJvb3RDb250ZXh0IiwicmVzZXRSZWNvbW1lbmRhdGlvbnMiLCJzdG9yZURhdGFGb3JUZWxlbWV0cnkiLCJyZWNvbW1lbmRhdGlvbk9wdGlvbkNob29zZW4iLCJSZWNvbW1lbmRhdGlvbkRpYWxvZ0RlY2lzaW9uIiwiQWNjZXB0IiwidXBkYXRlRGF0YSIsIklnbm9yZSIsInN0b3JlRGF0YSIsImluY3JlYXNlVGVsZW1ldHJ5RGF0YUNvdW50IiwidXBkYXRlVGVsZW1ldHJ5RGF0YUJhc2VkT25Vc2VyU2VsZWN0aW9uIiwiZmllbGRQYXRoIiwic2VsZWN0ZWRWYWx1ZSIsInZpZXdCaW5kaW5nQ29udGV4dFBhdGgiLCJuZXdSZWNvbW1lbmRhdGlvbnNGb3JDdXJyZW50Q29udGV4dHMiLCJyZXNwb25zZSIsIkNvbnRyb2xsZXJFeHRlbnNpb24iLCJfYXBwbHlEZWNvcmF0ZWREZXNjcmlwdG9yIiwiZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9yIl0sInNvdXJjZVJvb3QiOiIuIiwic291cmNlcyI6WyJSZWNvbW1lbmRhdGlvbnMudHMiXSwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IExvZyBmcm9tIFwic2FwL2Jhc2UvTG9nXCI7XG5pbXBvcnQgeyBkZWZpbmVVSTVDbGFzcywgZXh0ZW5zaWJsZSwgZmluYWxFeHRlbnNpb24sIG1ldGhvZE92ZXJyaWRlLCBwdWJsaWNFeHRlbnNpb24gfSBmcm9tIFwic2FwL2ZlL2Jhc2UvQ2xhc3NTdXBwb3J0XCI7XG5pbXBvcnQgdHlwZSBQYWdlQ29udHJvbGxlciBmcm9tIFwic2FwL2ZlL2NvcmUvUGFnZUNvbnRyb2xsZXJcIjtcbmltcG9ydCB7IHJlY29tbWVuZGF0aW9uSGVscGVyIH0gZnJvbSBcInNhcC9mZS9jb3JlL2hlbHBlcnMvUmVjb21tZW5kYXRpb25IZWxwZXJcIjtcbmltcG9ydCB0eXBlIHtcblx0UmVjb21tZW5kYXRpb25Db250ZXh0c0luZm8sXG5cdFJlY29tbWVuZGF0aW9uSW5mbyxcblx0U3RhbmRhcmRSZWNvbW1lbmRhdGlvblJlc3BvbnNlXG59IGZyb20gXCJzYXAvZmUvY29yZS9oZWxwZXJzL1N0YW5kYXJkUmVjb21tZW5kYXRpb25IZWxwZXJcIjtcbmltcG9ydCB7IHN0YW5kYXJkUmVjb21tZW5kYXRpb25IZWxwZXIgfSBmcm9tIFwic2FwL2ZlL2NvcmUvaGVscGVycy9TdGFuZGFyZFJlY29tbWVuZGF0aW9uSGVscGVyXCI7XG5pbXBvcnQgdHlwZSBDb250cm9sIGZyb20gXCJzYXAvdWkvY29yZS9Db250cm9sXCI7XG5pbXBvcnQgQ29udHJvbGxlckV4dGVuc2lvbiBmcm9tIFwic2FwL3VpL2NvcmUvbXZjL0NvbnRyb2xsZXJFeHRlbnNpb25cIjtcbmltcG9ydCBPdmVycmlkZUV4ZWN1dGlvbiBmcm9tIFwic2FwL3VpL2NvcmUvbXZjL092ZXJyaWRlRXhlY3V0aW9uXCI7XG5pbXBvcnQgdHlwZSBDb250ZXh0IGZyb20gXCJzYXAvdWkvbW9kZWwvQ29udGV4dFwiO1xuaW1wb3J0IHR5cGUgSlNPTk1vZGVsIGZyb20gXCJzYXAvdWkvbW9kZWwvanNvbi9KU09OTW9kZWxcIjtcbmltcG9ydCB0eXBlIHsgZGVmYXVsdCBhcyBPRGF0YVY0Q29udGV4dCB9IGZyb20gXCJzYXAvdWkvbW9kZWwvb2RhdGEvdjQvQ29udGV4dFwiO1xuaW1wb3J0IHR5cGUgeyBGRVZpZXcgfSBmcm9tIFwiLi4vQmFzZUNvbnRyb2xsZXJcIjtcbmltcG9ydCBDb21tb25VdGlscyBmcm9tIFwiLi4vQ29tbW9uVXRpbHNcIjtcbmltcG9ydCB0eXBlIEZjbENvbnRyb2xsZXIgZnJvbSBcIi4uL3Jvb3RWaWV3L0ZjbC5jb250cm9sbGVyXCI7XG5pbXBvcnQgVHJhbnNhY3Rpb25IZWxwZXIgZnJvbSBcIi4vZWRpdEZsb3cvVHJhbnNhY3Rpb25IZWxwZXJcIjtcblxuaW1wb3J0IHsgUmVjb21tZW5kYXRpb25EaWFsb2dEZWNpc2lvbiB9IGZyb20gXCIuLi9jb250cm9scy9SZWNvbW1lbmRhdGlvbnMvQ29uZmlybVJlY29tbWVuZGF0aW9uRGlhbG9nXCI7XG5pbXBvcnQgdHlwZSB7IFJlY29tbWVuZGF0aW9uVGVsZW1ldHJ5IH0gZnJvbSBcIi4uL3NlcnZpY2VzL1RlbGVtZXRyeVNlcnZpY2VGYWN0b3J5XCI7XG5pbXBvcnQgVGVsZW1ldHJ5IGZyb20gXCIuL3JlY29tbWVuZGF0aW9ucy9UZWxlbWV0cnlcIjtcblxuZXhwb3J0IHR5cGUgQWNjZXB0QWxsUGFyYW1zID0ge1xuXHRyZWNvbW1lbmRhdGlvbkRhdGE/OiBSZWNvbW1lbmRhdGlvbkRhdGFbXTtcbn07XG5cbmV4cG9ydCB0eXBlIFJlY29tbWVuZGF0aW9uRGF0YSA9IHtcblx0Y29udGV4dD86IE9EYXRhVjRDb250ZXh0O1xuXHRjb250ZXh0SWRlbnRpZmllcj86IHN0cmluZ1tdO1xuXHRjb250ZXh0SWRlbnRpZmllclRleHQ/OiBzdHJpbmdbXTtcblx0cHJvcGVydHlQYXRoPzogc3RyaW5nO1xuXHR2YWx1ZT86IHN0cmluZztcblx0dGV4dD86IHN0cmluZztcbn07XG5AZGVmaW5lVUk1Q2xhc3MoXCJzYXAuZmUuY29yZS5jb250cm9sbGVyZXh0ZW5zaW9ucy5SZWNvbW1lbmRhdGlvbnNcIilcbmV4cG9ydCBkZWZhdWx0IGNsYXNzIFJlY29tbWVuZGF0aW9ucyBleHRlbmRzIENvbnRyb2xsZXJFeHRlbnNpb24ge1xuXHRiYXNlITogUGFnZUNvbnRyb2xsZXI7XG5cblx0cmVjb21tZW5kYXRpb25Db250ZXh0cyE6IFJlY29tbWVuZGF0aW9uQ29udGV4dHNJbmZvW107XG5cblx0cm9vdENvbnRleHQhOiBDb250ZXh0IHwgdW5kZWZpbmVkO1xuXG5cdGludGVybmFsTW9kZWwhOiBKU09OTW9kZWw7XG5cblx0dGVsZW1ldHJ5ITogVGVsZW1ldHJ5O1xuXG5cdGFsbFJlY29tbWVuZGVkRmllbGRzITogc3RyaW5nW107XG5cblx0Ly8gdGhlIGRhdGEgc2hvd24gaW4gQWNjZXB0L0lnbm9yZSBkaWFsb2cgb2YgUmVjb21tZW5kYXRpb25zXG5cdGRhdGFUb0JlQWNjZXB0ZWQ6IFJlY29tbWVuZGF0aW9uRGF0YVtdID0gW107XG5cblx0cHJldmlvdXNDb250ZXh0OiBDb250ZXh0IHwgbnVsbCB8IHVuZGVmaW5lZDtcblxuXHRjb25zdHJ1Y3RvcigpIHtcblx0XHRzdXBlcigpO1xuXHR9XG5cblx0QG1ldGhvZE92ZXJyaWRlKClcblx0b25Jbml0KCk6IHZvaWQge1xuXHRcdHRoaXMudGVsZW1ldHJ5ID0gbmV3IFRlbGVtZXRyeSgpO1xuXHRcdHRoaXMuYWxsUmVjb21tZW5kZWRGaWVsZHMgPSBbXTtcblx0XHR0aGlzLmludGVybmFsTW9kZWwgPSB0aGlzLmJhc2UuZ2V0VmlldygpLmdldE1vZGVsKFwiaW50ZXJuYWxcIik7XG5cdFx0dGhpcy5wcmV2aW91c0NvbnRleHQgPSB1bmRlZmluZWQ7XG5cdH1cblxuXHRAbWV0aG9kT3ZlcnJpZGUoXCJfcm91dGluZ1wiKVxuXHRhc3luYyBvbkFmdGVyQmluZGluZyhjb250ZXh0OiBDb250ZXh0IHwgbnVsbCk6IFByb21pc2U8dm9pZD4ge1xuXHRcdGlmIChjb250ZXh0KSB7XG5cdFx0XHRjb25zdCBjdXJyZW50Q29udGV4dEJhc2VQYXRoID0gY29udGV4dC5nZXRQYXRoKCkuc3BsaXQoXCIvXCIpWzFdO1xuXHRcdFx0Y29uc3QgcHJldmlvdXNDb250ZXh0QmFzZVBhdGggPSB0aGlzLnByZXZpb3VzQ29udGV4dD8uZ2V0UGF0aCgpLnNwbGl0KFwiL1wiKVsxXTtcblx0XHRcdC8vXHRjb25zb2xlLmxvZygnY3VycmVudDo6JywgY3VycmVudENvbnRleHRCYXNlUGF0aCk7XG5cdFx0XHQvL1x0Y29uc29sZS5sb2coJ3ByZXZpb3VzJywgcHJldmlvdXNDb250ZXh0QmFzZVBhdGgpO1xuXHRcdFx0dGhpcy5yb290Q29udGV4dCA9IHVuZGVmaW5lZDtcblx0XHRcdC8vIHVzZSBpbnRlcm5hbCBtb2RlbCBiZWNhdXNlIHdlIGhhdmUgdG8gdXNlIHRoaXMgaW5mb3JtYXRpb24gYWNyb3NzIHRoZSBhcHBsaWNhdGlvbiBmb3IgZGlmZmVyZW50IGluc3RhbmNlcy5cblx0XHRcdGxldCBpc1JlY29tbWVuZGF0aW9uRW5hYmxlZCA9IHRoaXMuaW50ZXJuYWxNb2RlbC5nZXRQcm9wZXJ0eShcIi9pc1JlY29tbWVuZGF0aW9uRW5hYmxlZFwiKTtcblx0XHRcdC8vIG9uQWZ0ZXIgYmluZGluZyBpcyBjYWxsZWQgZm9yIGFsbCBjb250ZXh0c1xuXHRcdFx0Ly8gYnV0IHdlIGRvIG5vdCBuZWVkIHRvIGNhbGwgdGhlIGlzRW5hYmxlZCBob29rIGFsbCB0aGUgdGltZVxuXHRcdFx0Ly8gc28gY2hlY2sgaWYgcmVjb21tZW5kYXRpb24gZW5hYmxlZCBpcyBhbHJlYWR5IGF2YWlsYWJsZVxuXHRcdFx0dGhpcy5wcmV2aW91c0NvbnRleHQgPSBjb250ZXh0O1xuXHRcdFx0Y29uc3Qgcm9vdENvbnRleHQgPSBhd2FpdCB0aGlzLl9nZXRSb290Q29udGV4dChjb250ZXh0IGFzIE9EYXRhVjRDb250ZXh0KTtcblx0XHRcdGlmIChyb290Q29udGV4dCkge1xuXHRcdFx0XHRpZiAoaXNSZWNvbW1lbmRhdGlvbkVuYWJsZWQgPT09IHVuZGVmaW5lZCkge1xuXHRcdFx0XHRcdGlzUmVjb21tZW5kYXRpb25FbmFibGVkID0gdGhpcy5iYXNlLnJlY29tbWVuZGF0aW9ucy5pc0VuYWJsZWQocm9vdENvbnRleHQpO1xuXHRcdFx0XHRcdHRoaXMuaW50ZXJuYWxNb2RlbC5zZXRQcm9wZXJ0eShcIi9pc1JlY29tbWVuZGF0aW9uRW5hYmxlZFwiLCBpc1JlY29tbWVuZGF0aW9uRW5hYmxlZCk7XG5cdFx0XHRcdH1cblx0XHRcdFx0Ly9cdGlmKCF0aGlzLnByZXZpb3VzQ29udGV4dCkge1xuXG5cdFx0XHRcdC8vXHR9XG5cdFx0XHRcdGNvbnN0IGlzRmNsRW5hYmxlZCA9IHRoaXMuYmFzZS5nZXRBcHBDb21wb25lbnQoKS5faXNGY2xFbmFibGVkKCk7XG5cdFx0XHRcdGNvbnN0IGlzRnVsbFNjcmVlbiA9IGlzRmNsRW5hYmxlZFxuXHRcdFx0XHRcdD8gKHRoaXMuYmFzZS5nZXRBcHBDb21wb25lbnQoKS5nZXRSb290Vmlld0NvbnRyb2xsZXIoKSBhcyBGY2xDb250cm9sbGVyKS5nZXRIZWxwZXIoKS5nZXRDdXJyZW50VUlTdGF0ZSgpLmlzRnVsbFNjcmVlblxuXHRcdFx0XHRcdDogdHJ1ZTtcblx0XHRcdFx0aWYgKGN1cnJlbnRDb250ZXh0QmFzZVBhdGggIT09IHByZXZpb3VzQ29udGV4dEJhc2VQYXRoKSB7XG5cdFx0XHRcdFx0Ly8gZGlmZmVyZW50IGNvbnRleHRzLyBPUFxuXHRcdFx0XHRcdC8vXHRjb25zb2xlLmxvZyhcInJ1biByZXNldCBsb2dpY1wiKVxuXHRcdFx0XHRcdHRoaXMudHJ5UmVzZXRSZWNvbW1lbmRhdGlvbnMocm9vdENvbnRleHQgYXMgT0RhdGFWNENvbnRleHQpO1xuXHRcdFx0XHRcdHRoaXMudGVsZW1ldHJ5LnJlc2V0RGF0YSgpO1xuXHRcdFx0XHR9XG5cdFx0XHRcdGlmIChpc0ZjbEVuYWJsZWQgJiYgIWlzRnVsbFNjcmVlbikge1xuXHRcdFx0XHRcdHJldHVybjtcblx0XHRcdFx0fVxuXHRcdFx0fVxuXHRcdH1cblx0fVxuXG5cdHByaXZhdGUgYXN5bmMgX2dldFJvb3RDb250ZXh0KGNvbnRleHQ6IE9EYXRhVjRDb250ZXh0KTogUHJvbWlzZTxDb250ZXh0IHwgdW5kZWZpbmVkPiB7XG5cdFx0Y29uc3QgcHJvZ3JhbW1pbmdNb2RlbCA9IFRyYW5zYWN0aW9uSGVscGVyLmdldFByb2dyYW1taW5nTW9kZWwoY29udGV4dCk7XG5cdFx0cmV0dXJuIENvbW1vblV0aWxzLmNyZWF0ZVJvb3RDb250ZXh0KHByb2dyYW1taW5nTW9kZWwsIHRoaXMuYmFzZS5nZXRWaWV3KCksIHRoaXMuYmFzZS5nZXRBcHBDb21wb25lbnQoKSk7XG5cdH1cblxuXHQvKipcblx0ICogQ2xlYXIgYWxsIHJlY29tbWVuZGF0aW9ucyBjdXJyZW50bHkgYXZhaWxhYmxlIG9uIHRoZSBVSS5cblx0ICogQHB1YmxpY1xuXHQgKi9cblx0QHB1YmxpY0V4dGVuc2lvbigpXG5cdHB1YmxpYyBjbGVhclJlY29tbWVuZGF0aW9ucygpOiB2b2lkIHtcblx0XHRjb25zdCBiaW5kaW5nQ29udGV4dCA9IHRoaXMuZ2V0VmlldygpLmdldEJpbmRpbmdDb250ZXh0KCk7XG5cdFx0aWYgKGJpbmRpbmdDb250ZXh0KSB7XG5cdFx0XHRyZWNvbW1lbmRhdGlvbkhlbHBlci5jbGVhclJlY29tbWVuZGF0aW9ucyh0aGlzLmJhc2UuZ2V0VmlldygpLCBiaW5kaW5nQ29udGV4dCk7XG5cdFx0fVxuXHR9XG5cblx0LyoqXG5cdCAqIENoZWNrIGlmIHJlY29tbWVuZGF0aW9ucyBhcmUgZW5hYmxlZCBvciBub3QuXG5cdCAqIEBwYXJhbSBfcm9vdENvbnRleHQgVGhlIHJvb3QgZW50aXR5IGNvbnRleHRcblx0ICogQHJldHVybnMgVHJ1ZSBpZiByZWNvbW1lbmRhdGlvbiBpcyBlbmFibGVkLiBGYWxzZSBpZiByZWNvbW1lbmRhdGlvbiBpcyBkaXNhYmxlZC5cblx0ICogQHB1YmxpY1xuXHQgKi9cblx0QHB1YmxpY0V4dGVuc2lvbigpXG5cdEBleHRlbnNpYmxlKE92ZXJyaWRlRXhlY3V0aW9uLkluc3RlYWQpXG5cdHB1YmxpYyBpc0VuYWJsZWQoX3Jvb3RDb250ZXh0OiBDb250ZXh0KTogYm9vbGVhbiB7XG5cdFx0cmV0dXJuIGZhbHNlO1xuXHR9XG5cblx0LyoqXG5cdCAqIE1ldGhvZCByZXR1cm5zIGEgYm9vbGVhbiB2YWx1ZSBpbmRpY2F0aW5nIHJlY29tbWVuZGF0aW9uIGlzIGVuYWJsZWQgb3Igbm90LiBJbiBjYXNlIGNhbGxlZCBiZWZvcmVcblx0ICogdGhlIGVuYWJsZW1lbnQgY2hlY2sgaXMgY29tcGxldGVkLCBtZXRob2Qgd2lsbCByZXR1cm4gZmFsc2Ugd2hpY2ggaXMgdGhlIGRlZmF1bHQgdmFsdWUuXG5cdCAqIEByZXR1cm5zIFRydWUgaWYgcmVjb21tZW5kYXRpb24gaXMgZW5hYmxlZCBlbHNlIGZhbHNlLlxuXHQgKi9cblx0QHB1YmxpY0V4dGVuc2lvbigpXG5cdEBmaW5hbEV4dGVuc2lvbigpXG5cdHB1YmxpYyBpc1JlY29tbWVuZGF0aW9uRW5hYmxlZCgpOiBib29sZWFuIHtcblx0XHRyZXR1cm4gISF0aGlzLmludGVybmFsTW9kZWw/LmdldFByb3BlcnR5KFwiL2lzUmVjb21tZW5kYXRpb25FbmFibGVkXCIpO1xuXHR9XG5cblx0LyoqXG5cdCAqIEZldGNoIHRoZSByZWNvbW1lbmRhdGlvbiBmb3IgYSBzcGVjaWZpYyBjb250ZXh0LlxuXHQgKiBAcGFyYW0gX2NvbnRleHQgVGhlIGNvbnRleHQgdGhhdCBzaGFsbCBiZSBjb25zaWRlcmVkIHdoZW4gZmV0Y2hpbmcgcmVjb21tZW5kYXRpb25zXG5cdCAqIEBwYXJhbSBfcm9vdENvbnRleHQgVGhlIHJvb3QgZW50aXR5IGNvbnRleHRcblx0ICogQHJldHVybnMgVGhlIHJlY29tbWVuZGF0aW9uIGVudHJpZXNcblx0ICogQHB1YmxpY1xuXHQgKi9cblx0QHB1YmxpY0V4dGVuc2lvbigpXG5cdEBleHRlbnNpYmxlKE92ZXJyaWRlRXhlY3V0aW9uLkluc3RlYWQpXG5cdHB1YmxpYyBhc3luYyBmZXRjaFJlY29tbWVuZGF0aW9ucyhfY29udGV4dDogT0RhdGFWNENvbnRleHRbXSwgX3Jvb3RDb250ZXh0PzogQ29udGV4dCk6IFByb21pc2U8U3RhbmRhcmRSZWNvbW1lbmRhdGlvblJlc3BvbnNlW10+IHtcblx0XHRyZXR1cm4gUHJvbWlzZS5yZXNvbHZlKFtdKTtcblx0fVxuXG5cdC8qKlxuXHQgKiBGZXRjaCB0aGUgcmVjb21tZW5kYXRpb25zIGFuZCBhcHBseSB0aGVtIG9uIHRoZSBVSS5cblx0ICogQHBhcmFtIGN1cnJlbnRDb250ZXh0c0luZm8gQ29udGV4dHMgSW5mbyB0aGF0IGNvbnRhaW5zIHRoZSBjb250ZXh0IHRoYXQgc2hhbGwgYmUgY29uc2lkZXJlZCB3aGVuIGZldGNoaW5nIHJlY29tbWVuZGF0aW9ucyBhbG9uZyB3aXRoIGNvbnRleHRJZGVudGlmaWVyXG5cdCAqIEBwYXJhbSBjb25zaWRlck9ubHlOZXdDb250ZXh0IEJvb2xlYW4gcHJvcGVydHkgaW5kaWNhdGluZyBSZWNvbW1lbmRhdGlvblxuXHQgKiBzaG91bGQgYmUgZmV0Y2hlZCBvbmx5IGZvciBuZXcgY29udGV4dHMgd2l0aCBubyByZWNvbW1lbmRhdGlvbiBmZXRjaCBjYWxsXG5cdCAqIEByZXR1cm5zIGB0cnVlYCBpZiB0aGUgcmVjb21tZW5kYXRpb25zIHdlcmUgZmV0Y2hlZCBhbmQgYXBwbGllZCBjb3JyZWN0bHlcblx0ICovXG5cdEBwdWJsaWNFeHRlbnNpb24oKVxuXHRwdWJsaWMgYXN5bmMgZmV0Y2hBbmRBcHBseVJlY29tbWVuZGF0aW9ucyhcblx0XHRjdXJyZW50Q29udGV4dHNJbmZvOiBSZWNvbW1lbmRhdGlvbkNvbnRleHRzSW5mb1tdLFxuXHRcdGNvbnNpZGVyT25seU5ld0NvbnRleHQ/OiBib29sZWFuXG5cdCk6IFByb21pc2U8Ym9vbGVhbj4ge1xuXHRcdGxldCBpc1N1Y2Nlc3MgPSBmYWxzZTtcblx0XHRjb25zdCBzaWRlRWZmZWN0cyA9IHRoaXMuYmFzZS5nZXRBcHBDb21wb25lbnQoKS5nZXRTaWRlRWZmZWN0c1NlcnZpY2UoKTtcblx0XHRjb25zdCByZWNvbW1lbmRhdGlvblJlZ2lzdHJ5ID0gc2lkZUVmZmVjdHMuZ2V0UmVjb21tZW5kYXRpb25zTWFwcGluZygpO1xuXHRcdGNvbnN0IGZpbHRlcmVkQ29udGV4dHNJbmZvID0gY3VycmVudENvbnRleHRzSW5mby5maWx0ZXIoKGNvbnRleHRJbmZvOiBSZWNvbW1lbmRhdGlvbkNvbnRleHRzSW5mbykgPT4ge1xuXHRcdFx0cmV0dXJuIHN0YW5kYXJkUmVjb21tZW5kYXRpb25IZWxwZXIuY2hlY2tJZlJlY29tbWVuZGF0aW9uUm9sZUV4aXN0c0ZvckNvbnRleHQoY29udGV4dEluZm8sIHJlY29tbWVuZGF0aW9uUmVnaXN0cnkpO1xuXHRcdH0pO1xuXHRcdGlmICh0aGlzLmlzUmVjb21tZW5kYXRpb25FbmFibGVkKCkpIHtcblx0XHRcdGNvbnN0IGNvbnRleHRzSW5mbzogUmVjb21tZW5kYXRpb25Db250ZXh0c0luZm9bXSA9IGNvbnNpZGVyT25seU5ld0NvbnRleHRcblx0XHRcdFx0PyBzdGFuZGFyZFJlY29tbWVuZGF0aW9uSGVscGVyLmdldENvbnRleHRzV2l0aE5vUmVjb21tZW5kYXRpb25zKGZpbHRlcmVkQ29udGV4dHNJbmZvLCB0aGlzLmludGVybmFsTW9kZWwpXG5cdFx0XHRcdDogZmlsdGVyZWRDb250ZXh0c0luZm87XG5cdFx0XHRjb25zdCBjb250ZXh0czogT0RhdGFWNENvbnRleHRbXSA9IGNvbnRleHRzSW5mby5tYXAoXG5cdFx0XHRcdChjb250ZXh0SW5mbzogUmVjb21tZW5kYXRpb25Db250ZXh0c0luZm8pID0+IGNvbnRleHRJbmZvLmNvbnRleHRcblx0XHRcdCkgYXMgT0RhdGFWNENvbnRleHRbXTtcblx0XHRcdGlmIChjb250ZXh0cyAmJiBjb250ZXh0cy5sZW5ndGggPiAwKSB7XG5cdFx0XHRcdHRyeSB7XG5cdFx0XHRcdFx0Y29uc3Qgcm9vdENvbnRleHQgPSBhd2FpdCB0aGlzLl9nZXRSb290Q29udGV4dChjb250ZXh0c1swXSk7XG5cdFx0XHRcdFx0Y29uc3Qgc3RhcnRUaW1lID0gcGVyZm9ybWFuY2Uubm93KCk7XG5cdFx0XHRcdFx0Y29uc3QgcmVjb21tZW5kYXRpb25EYXRhID0gYXdhaXQgdGhpcy5iYXNlLnJlY29tbWVuZGF0aW9ucy5mZXRjaFJlY29tbWVuZGF0aW9ucyhjb250ZXh0cywgcm9vdENvbnRleHQpO1xuXHRcdFx0XHRcdGNvbnN0IGVuZFRpbWUgPSBwZXJmb3JtYW5jZS5ub3coKTtcblx0XHRcdFx0XHR0aGlzLnRlbGVtZXRyeS51cGRhdGVSZXNwb25zZVRpbWVJbmZvKGVuZFRpbWUgLSBzdGFydFRpbWUpO1xuXHRcdFx0XHRcdGlmIChyZWNvbW1lbmRhdGlvbkRhdGE/Lmxlbmd0aCkge1xuXHRcdFx0XHRcdFx0dGhpcy51cGRhdGVBbGxSZWNvbW1lbmRlZEZpZWxkcyhyZWNvbW1lbmRhdGlvbkRhdGEpO1xuXHRcdFx0XHRcdFx0dGhpcy50ZWxlbWV0cnkudXBkYXRlRGF0YUZyb21SZWNvbW1lbmRhdGlvblJlc3BvbnNlKHJlY29tbWVuZGF0aW9uRGF0YSk7XG5cdFx0XHRcdFx0fSBlbHNlIHtcblx0XHRcdFx0XHRcdC8vIGlmIGVtcHR5IHJlY29tbWVuZGF0aW9ucywgdGhlbiBzdG9yZSBpdCBmb3IgdGVsZW1ldHJ5IHB1cnBvc2Vcblx0XHRcdFx0XHRcdHRoaXMudGVsZW1ldHJ5LmluY3JlYXNlQ291bnQoXCJudW1iZXJPZlRpbWVzRW1wdHlSZWNvbW1lbmRhdGlvbnNcIik7XG5cdFx0XHRcdFx0fVxuXHRcdFx0XHRcdC8vIG5lZWQgdG8gdmFsaWRhdGUgdGhhdCB0aGUgcmVzcG9uc2UgaXMgcHJvcGVybHkgZm9ybWF0dGVkXG5cdFx0XHRcdFx0aXNTdWNjZXNzID0gdGhpcy5hcHBseVJlY29tbWVuZGF0aW9uKHJlY29tbWVuZGF0aW9uRGF0YSwgY29udGV4dHMpO1xuXHRcdFx0XHR9IGNhdGNoIChlKSB7XG5cdFx0XHRcdFx0TG9nLmVycm9yKFwiVGhlcmUgd2FzIGFuIGVycm9yIGZldGNoaW5nIHRoZSByZWNvbW1lbmRhdGlvbnNcIiwgZSBhcyBFcnJvcik7XG5cdFx0XHRcdH1cblx0XHRcdH1cblxuXHRcdFx0dGhpcy5zdG9yZVJlY29tbWVuZGF0aW9uQ29udGV4dHMoZmlsdGVyZWRDb250ZXh0c0luZm8pO1xuXHRcdH1cblxuXHRcdHJldHVybiBpc1N1Y2Nlc3M7XG5cdH1cblxuXHQvKipcblx0ICogRmV0Y2ggdGhlIHJlY29tbWVuZGF0aW9ucyBvbiBmaWVsZCBjaGFuZ2UgYW5kIGFwcGx5IHRoZW0gb24gdGhlIFVJLlxuXHQgKiBAcGFyYW0gZmllbGQgVGhlIGNoYW5nZWQgZmllbGQuXG5cdCAqIEBwYXJhbSBjb250ZXh0SW5mbyBDb250ZXh0SW5mbyB3aGljaCBjb250YWlucyB0aGUgY29udGV4dCBpcyBvbmx5IGNvbnNpZGVyZWQgd2hlbiBmZXRjaGluZyB0aGUgcmVjb21tZW5kYXRpb25zIGFsb25nIHdpdGggY29udGV4dElkZW50aWZpZXJcblx0ICogQHJldHVybnMgYHRydWVgIGlmIHRoZSByZWNvbW1lbmRhdGlvbiB3ZXJlIGZldGNoZWQgYW5kIGFwcGxpZWQgY29ycmVjdGx5XG5cdCAqL1xuXHRAcHVibGljRXh0ZW5zaW9uKClcblx0cHVibGljIGFzeW5jIGZldGNoQW5kQXBwbHlSZWNvbW1lbmRhdGlvbnNPbkZpZWxkQ2hhbmdlKGZpZWxkOiBDb250cm9sLCBjb250ZXh0SW5mbzogUmVjb21tZW5kYXRpb25Db250ZXh0c0luZm8pOiBQcm9taXNlPGJvb2xlYW4+IHtcblx0XHRjb25zdCBhcHBDb21wb25lbnQgPSB0aGlzLmJhc2UuZ2V0QXBwQ29tcG9uZW50KCk7XG5cdFx0Y29uc3QgaXNGaWVsZFJlY29tbWVuZGF0aW9uUmVsZXZhbnQgPSBhcHBDb21wb25lbnQuZ2V0U2lkZUVmZmVjdHNTZXJ2aWNlKCkuY2hlY2tJZkZpZWxkSXNSZWNvbW1lbmRhdGlvblJlbGV2YW50KGZpZWxkKTtcblx0XHRpZiAoaXNGaWVsZFJlY29tbWVuZGF0aW9uUmVsZXZhbnQpIHtcblx0XHRcdC8vZ2V0dGluZyB0aGUgdmlzaWJsZSB0YXJnZXRzIG9uIHRoZSBVSSBhbmQgdGhlaXIgcmVzcGVjdGl2ZSBjb250ZXh0c1xuXHRcdFx0Y29uc3QgdGFyZ2V0cyA9IHRoaXMuZmV0Y2hUYXJnZXRzKHRydWUpO1xuXHRcdFx0Y29uc3QgZmlsdGVyZWRSZWNvbW1lbmRhdGlvbkNvbnRleHRzID0gdGhpcy5mZXRjaEZpbHRlcmVkUmVjb21tZW5kYXRpb25Db250ZXh0cyh0YXJnZXRzKTtcblx0XHRcdC8vZmlsdGVyaW5nIHRoZSBjaGlsZCBjb250ZXh0cyBmcm9tIHRoZSBhdmFpbGFibGUgY29udGV4dHNcblx0XHRcdGNvbnN0IHJlY29tbWVuZGF0aW9uQ29udGV4dCA9IGZpbHRlcmVkUmVjb21tZW5kYXRpb25Db250ZXh0cy5maWx0ZXIoZnVuY3Rpb24gKGZpbHRlcmVkUmVjb21tZW5kYXRpb25Db250ZXh0KSB7XG5cdFx0XHRcdGlmIChcblx0XHRcdFx0XHQoZmlsdGVyZWRSZWNvbW1lbmRhdGlvbkNvbnRleHQuY29udGV4dCBhcyBPRGF0YVY0Q29udGV4dClcblx0XHRcdFx0XHRcdC5nZXRQYXRoKClcblx0XHRcdFx0XHRcdD8uaW5jbHVkZXMoKGNvbnRleHRJbmZvPy5jb250ZXh0IGFzIE9EYXRhVjRDb250ZXh0KS5nZXRQYXRoKCkpXG5cdFx0XHRcdCkge1xuXHRcdFx0XHRcdHJldHVybiBmaWx0ZXJlZFJlY29tbWVuZGF0aW9uQ29udGV4dDtcblx0XHRcdFx0fVxuXHRcdFx0fSk7XG5cdFx0XHRzdGFuZGFyZFJlY29tbWVuZGF0aW9uSGVscGVyLmNsZWFySWdub3JlZENvbnRleHRzKHRoaXMuaW50ZXJuYWxNb2RlbCwgKGNvbnRleHRJbmZvPy5jb250ZXh0IGFzIE9EYXRhVjRDb250ZXh0KS5nZXRQYXRoKCkpO1xuXHRcdFx0cmV0dXJuIHRoaXMuZmV0Y2hBbmRBcHBseVJlY29tbWVuZGF0aW9ucyhyZWNvbW1lbmRhdGlvbkNvbnRleHQpO1xuXHRcdH0gZWxzZSB7XG5cdFx0XHRyZXR1cm4gZmFsc2U7XG5cdFx0fVxuXHR9XG5cblx0LyoqXG5cdCAqIFJldHVybnMgdGhlIGZpbHRlcmVkIHJlY29tbWVuZGF0aW9ucyBmcm9tIHBhc3NlZCByZWNvbW1lbmRhdGlvbnMgYW5kIHRoZW4gYmFzZWQgb24gaXQgd2UgZWl0aGVyIHNob3cgdGhlIGZpbHRlcmVkIHJlY29tbWVuZGF0aW9ucyBvciBub3Qgc2hvdyB0aGUgQWNjZXB0IGFsbCBEaWFsb2cgaWYgdGhlcmUgYXJlIG5vIHJlY29tbWVuZGF0aW9ucy5cblx0ICogQHBhcmFtIF9wYXJhbXMgUGFyYW1zIG9iamVjdCBjb250YWluaW5nIHJlY29tbWVuZGF0aW9uRGF0YSBwcm9wZXJ0eSB3aGljaCBpcyBhbiBhcnJheSBvZiBvYmplY3RzIGNvbnRhaW5pbmcgY29udGV4dCwgcHJvcGVydHlQYXRoLCB2YWx1ZSBhbmQgdGV4dCBmb3IgYSByZWNvbW1lbmRhdGlvblxuXHQgKiBAcmV0dXJucyBQcm9taXNlXG5cdCAqL1xuXHRAcHVibGljRXh0ZW5zaW9uKClcblx0QGV4dGVuc2libGUoXCJBZnRlckFzeW5jXCIpXG5cdHB1YmxpYyBhc3luYyBvbkJlZm9yZUFjY2VwdFJlY29tbWVuZGF0aW9ucyhfcGFyYW1zOiBBY2NlcHRBbGxQYXJhbXMpOiBQcm9taXNlPHZvaWQ+IHtcblx0XHQvL2RvIG5vdGhpbmdcblx0XHRyZXR1cm4gUHJvbWlzZS5yZXNvbHZlKCk7IC8vaGFkIHRvIGRvIHRoaXMgYmVjYXVzZSBvZiBlc2xpbnQgZXJyb3Igb2Ygbm90IGhhdmluZyBhd2FpdCB3aGVuIHRoZSBmdW5jdGlvbiBpcyBhc3luY1xuXHR9XG5cblx0LyoqXG5cdCAqIFRoaXMgZnVuY3Rpb24gaXMgcmVzcG9uc2libGUgZm9yIGFjY2VwdGluZyB0aGUgcmVjb21tZW5kYXRpb25zLlxuXHQgKiBAcGFyYW0gX3BhcmFtcyBQYXJhbXMgb2JqZWN0IGNvbnRhaW5pbmcgcmVjb21tZW5kYXRpb25EYXRhIHByb3BlcnR5IHdoaWNoIGlzIGFuIGFycmF5IG9mIG9iamVjdHMgY29udGFpbmluZyBjb250ZXh0LCBwcm9wZXJ0eVBhdGgsIHZhbHVlIGFuZCB0ZXh0IGZvciBhIHJlY29tbWVuZGF0aW9uXG5cdCAqIEByZXR1cm5zIFByb21pc2Ugd2hpY2ggcmVzb2x2ZWQgdG8gYSBCb29sZWFuIHZhbHVlIGJhc2VkIG9uIHdoZXRoZXIgcmVjb21tZW5kYXRpb25zIGFyZSBhY2NlcHRlZCBvciBub3Rcblx0ICovXG5cdEBwdWJsaWNFeHRlbnNpb24oKVxuXHRAZXh0ZW5zaWJsZShPdmVycmlkZUV4ZWN1dGlvbi5JbnN0ZWFkKVxuXHRwdWJsaWMgYXN5bmMgYWNjZXB0UmVjb21tZW5kYXRpb25zKF9wYXJhbXM6IEFjY2VwdEFsbFBhcmFtcyk6IFByb21pc2U8Ym9vbGVhbj4ge1xuXHRcdC8vIHRoZSBmb2xsb3dpbmcgY29kZSB3aWxsIGJlIGV4ZWN1dGVkIGlmIHRoZXJlIGlzIG5vIGhvb2sgaW1wbGVtZW50YXRpb24gaS5lLiBmb3IgdGhlIG5ldyBvcmNoZXN0cmF0aW9uXG5cdFx0Y29uc3QgcHJvbWlzZXMgPSBbXTtcblx0XHRpZiAoX3BhcmFtcy5yZWNvbW1lbmRhdGlvbkRhdGEpIHtcblx0XHRcdGZvciAoY29uc3QgcmVjb21tZW5kYXRpb25EYXRhIG9mIF9wYXJhbXMucmVjb21tZW5kYXRpb25EYXRhKSB7XG5cdFx0XHRcdGlmIChyZWNvbW1lbmRhdGlvbkRhdGEuY29udGV4dCAmJiByZWNvbW1lbmRhdGlvbkRhdGEucHJvcGVydHlQYXRoKSB7XG5cdFx0XHRcdFx0cHJvbWlzZXMucHVzaChcblx0XHRcdFx0XHRcdHJlY29tbWVuZGF0aW9uRGF0YS5jb250ZXh0LnNldFByb3BlcnR5KHJlY29tbWVuZGF0aW9uRGF0YS5wcm9wZXJ0eVBhdGgsIHJlY29tbWVuZGF0aW9uRGF0YS52YWx1ZSwgXCIkYXV0by5hYmNcIilcblx0XHRcdFx0XHQpO1xuXHRcdFx0XHR9XG5cdFx0XHR9XG5cdFx0XHRhd2FpdCBQcm9taXNlLmFsbChwcm9taXNlcyk7XG5cdFx0fVxuXHRcdHJldHVybiB0cnVlO1xuXHR9XG5cblx0cHJpdmF0ZSBhcHBseVJlY29tbWVuZGF0aW9uKHJlY29tbWVuZGF0aW9uUmVzcG9uc2VzOiBTdGFuZGFyZFJlY29tbWVuZGF0aW9uUmVzcG9uc2VbXSwgX2NvbnRleHQ6IE9EYXRhVjRDb250ZXh0W10pOiBib29sZWFuIHtcblx0XHRzdGFuZGFyZFJlY29tbWVuZGF0aW9uSGVscGVyLnN0b3JlUmVjb21tZW5kYXRpb25zKFxuXHRcdFx0cmVjb21tZW5kYXRpb25SZXNwb25zZXMsXG5cdFx0XHR0aGlzLmdldFZpZXcoKS5nZXRNb2RlbChcImludGVybmFsXCIpIGFzIEpTT05Nb2RlbCxcblx0XHRcdF9jb250ZXh0XG5cdFx0KTtcblx0XHRyZXR1cm4gdHJ1ZTtcblx0fVxuXG5cdC8qKlxuXHQgKiBTdG9yZXMgdGhlIHJlY29tbWVuZGF0aW9uIGNvbnRleHRzLlxuXHQgKiBAcGFyYW0gY29udGV4dHNJbmZvXG5cdCAqL1xuXHRwcml2YXRlIHN0b3JlUmVjb21tZW5kYXRpb25Db250ZXh0cyhjb250ZXh0c0luZm86IFJlY29tbWVuZGF0aW9uQ29udGV4dHNJbmZvW10pOiB2b2lkIHtcblx0XHRjb25zdCBjb250ZXh0UGF0aHM6IHN0cmluZ1tdID0gW107XG5cdFx0bGV0IHJlY29tbWVuZGF0aW9uQ29udGV4dHMgPSB0aGlzLmludGVybmFsTW9kZWwuZ2V0UHJvcGVydHkoXCIvcmVjb21tZW5kYXRpb25Db250ZXh0c1wiKSB8fCBbXTtcblx0XHRjb250ZXh0c0luZm8uZm9yRWFjaCgoY29udGV4dEluZm86IFJlY29tbWVuZGF0aW9uQ29udGV4dHNJbmZvKSA9PiB7XG5cdFx0XHRjb250ZXh0UGF0aHMucHVzaCgoY29udGV4dEluZm8uY29udGV4dCBhcyBPRGF0YVY0Q29udGV4dCkuZ2V0UGF0aCgpKTtcblx0XHR9KTtcblxuXHRcdHJlY29tbWVuZGF0aW9uQ29udGV4dHMgPSByZWNvbW1lbmRhdGlvbkNvbnRleHRzPy5maWx0ZXIoKHJlY29tbWVuZGF0aW9uQ29udGV4dDogUmVjb21tZW5kYXRpb25Db250ZXh0c0luZm8pID0+IHtcblx0XHRcdGNvbnN0IGNvbnRleHQgPSByZWNvbW1lbmRhdGlvbkNvbnRleHQ/LmNvbnRleHQ7XG5cdFx0XHRpZiAoY29udGV4dCkge1xuXHRcdFx0XHRjb25zdCBjb250ZXh0UGF0aCA9IGNvbnRleHQuZ2V0UGF0aCgpO1xuXHRcdFx0XHRjb25zdCBpbmRleCA9IGNvbnRleHRQYXRocy5pbmRleE9mKGNvbnRleHRQYXRoKTtcblx0XHRcdFx0aWYgKGluZGV4IDwgMCkge1xuXHRcdFx0XHRcdC8vIEV4aXN0aW5nIGNvbnRleHQgcGF0aCBpcyBub3QgZm91bmQgaW4gdGhlIG5ld2x5IGZldGNoZWQgcmVjb21tZW5kYXRpb24gJiB0aGVyZWZvcmUgZG9uJ3QgZG8gYW55dGhpbmdcblx0XHRcdFx0XHRyZXR1cm4gdHJ1ZTtcblx0XHRcdFx0fSBlbHNlIGlmIChyZWNvbW1lbmRhdGlvbkNvbnRleHQuY29udGV4dElkZW50aWZpZXIpIHtcblx0XHRcdFx0XHQvLyBFeGlzdGluZyBjb250ZXh0IHBhdGggaXMgZm91bmQuIHdlIHRyeSB0byB1cGRhdGUgdGhlIGNvbnRleHRJbmZvIHdpdGggdGhlIGxhdGVzdCBjb250ZXh0XG5cdFx0XHRcdFx0Ly8gaW5zdGVhZCBvZiBvdXRkYXRlZCBvbmVcblx0XHRcdFx0XHRjb250ZXh0c0luZm9baW5kZXhdLmNvbnRleHRJZGVudGlmaWVyID0gcmVjb21tZW5kYXRpb25Db250ZXh0LmNvbnRleHRJZGVudGlmaWVyO1xuXHRcdFx0XHR9XG5cdFx0XHR9XG5cdFx0XHRyZXR1cm4gZmFsc2U7XG5cdFx0fSk7XG5cblx0XHR0aGlzLmludGVybmFsTW9kZWwuc2V0UHJvcGVydHkoXCIvcmVjb21tZW5kYXRpb25Db250ZXh0c1wiLCBbLi4ucmVjb21tZW5kYXRpb25Db250ZXh0cywgLi4uY29udGV4dHNJbmZvXSk7XG5cdH1cblxuXHQvKipcblx0ICogRmlsdGVycyB0aGUgY29udGV4dHMgYW5kIG9ubHkgcmV0dXJucyB0aG9zZSB0aGF0IG1hdGNoZXMgdGhlIGNvbnRleHRzLlxuXHQgKiBAcGFyYW0gdGFyZ2V0c1xuXHQgKiBAcmV0dXJucyBSZXR1cm5zIHRoZSBmaWx0ZXJlZCByZWNvbW1lbmRhdGlvbiByZWxldmFudCBjb250ZXh0c1xuXHQgKi9cblx0cHJpdmF0ZSBmZXRjaEZpbHRlcmVkUmVjb21tZW5kYXRpb25Db250ZXh0cyh0YXJnZXRzOiBzdHJpbmdbXSk6IFJlY29tbWVuZGF0aW9uQ29udGV4dHNJbmZvW10ge1xuXHRcdGNvbnN0IGNvbnRleHRQYXRoczogc3RyaW5nW10gPSBbXTtcblx0XHRjb25zdCBmaWx0ZXJlZFJlY29tbWVuZGF0aW9uQ29udGV4dHM6IFJlY29tbWVuZGF0aW9uQ29udGV4dHNJbmZvW10gPSBbXTtcblx0XHRmb3IgKGNvbnN0IGtleSBvZiB0YXJnZXRzKSB7XG5cdFx0XHRjb25zdCBjb250ZXh0UGF0aEZyb21LZXkgPSBrZXkuc3Vic3RyaW5nKDAsIGtleS5sYXN0SW5kZXhPZihcIilcIikgKyAxKTtcblx0XHRcdGNvbnN0IHJlY29tbWVuZGF0aW9uQ29udGV4dHMgPSAodGhpcy5nZXRWaWV3KCkuZ2V0TW9kZWwoXCJpbnRlcm5hbFwiKSBhcyBKU09OTW9kZWwpLmdldFByb3BlcnR5KFwiL3JlY29tbWVuZGF0aW9uQ29udGV4dHNcIik7XG5cdFx0XHRyZWNvbW1lbmRhdGlvbkNvbnRleHRzLmZvckVhY2goKGNvbnRleHRJbmZvOiBSZWNvbW1lbmRhdGlvbkNvbnRleHRzSW5mbykgPT4ge1xuXHRcdFx0XHRjb25zdCBjb250ZXh0ID0gY29udGV4dEluZm8uY29udGV4dDtcblx0XHRcdFx0aWYgKChjb250ZXh0IGFzIE9EYXRhVjRDb250ZXh0KS5nZXRQYXRoKCkgPT0gY29udGV4dFBhdGhGcm9tS2V5ICYmICFjb250ZXh0UGF0aHMuaW5jbHVkZXMoY29udGV4dFBhdGhGcm9tS2V5KSkge1xuXHRcdFx0XHRcdGNvbnRleHRQYXRocy5wdXNoKGNvbnRleHRQYXRoRnJvbUtleSk7XG5cdFx0XHRcdFx0ZmlsdGVyZWRSZWNvbW1lbmRhdGlvbkNvbnRleHRzLnB1c2goY29udGV4dEluZm8pO1xuXHRcdFx0XHR9XG5cdFx0XHR9KTtcblx0XHR9XG5cdFx0cmV0dXJuIGZpbHRlcmVkUmVjb21tZW5kYXRpb25Db250ZXh0cztcblx0fVxuXG5cdC8qKlxuXHQgKiBGZXRjaGVzIFJlY29tbWVuZGF0aW9uRGF0YSBiYXNlZCBvbiBmaWx0ZXJlZCB0YXJnZXRzLlxuXHQgKiBAcGFyYW0gZmlsdGVyZWRUYXJnZXRzXG5cdCAqIEByZXR1cm5zIFJlY29tbWVuZGF0aW9uRGF0YVxuXHQgKi9cblx0cHJpdmF0ZSBmZXRjaEZpbHRlcmVkUmVjb21tZW5kYXRpb25EYXRhKGZpbHRlcmVkVGFyZ2V0czogc3RyaW5nW10pOiBSZWNvbW1lbmRhdGlvbkluZm8ge1xuXHRcdGNvbnN0IGZpbHRlclJlY29tbWVuZGF0aW9uc0RhdGE6IFJlY29tbWVuZGF0aW9uSW5mbyA9IHt9O1xuXHRcdGNvbnN0IHJlY29tbWVuZGF0aW9uRGF0YSA9IHRoaXMuZ2V0VmlldygpLmdldE1vZGVsKFwiaW50ZXJuYWxcIik/LmdldFByb3BlcnR5KFwiL3JlY29tbWVuZGF0aW9uc0RhdGFcIik7XG5cdFx0T2JqZWN0LmtleXMocmVjb21tZW5kYXRpb25EYXRhKS5mb3JFYWNoKChrZXk6IHN0cmluZykgPT4ge1xuXHRcdFx0aWYgKGZpbHRlcmVkVGFyZ2V0cy5pbmNsdWRlcyhrZXkpKSB7XG5cdFx0XHRcdGZpbHRlclJlY29tbWVuZGF0aW9uc0RhdGFba2V5XSA9IE9iamVjdC5hc3NpZ24ocmVjb21tZW5kYXRpb25EYXRhW2tleV0sIHt9KTtcblx0XHRcdH1cblx0XHR9KTtcblx0XHRyZXR1cm4gZmlsdGVyUmVjb21tZW5kYXRpb25zRGF0YTtcblx0fVxuXG5cdC8qKlxuXHQgKiBGZXRjaGVzIHRoZSBmaWx0ZXJlZCB0YXJnZXRzLlxuXHQgKiBAcGFyYW0gY29uc2lkZXJSZWNvbW1lbmRhdGlvbkNvbnRleHRzIFBhc3NlZCBhcyB0cnVlIHdoZW4gcmVjb21tZW5kYXRpb24gY29udGV4dHMgc2hvdWxkIGJlIGNvbnNpZGVyZWQgaW5zdGVhZCBvZiBkYXRhXG5cdCAqIEByZXR1cm5zIEFycmF5IG9mIEZpbHRlcmVkIHRhcmdldHNcblx0ICovXG5cdHByaXZhdGUgZmV0Y2hUYXJnZXRzKGNvbnNpZGVyUmVjb21tZW5kYXRpb25Db250ZXh0cz86IGJvb2xlYW4pOiBzdHJpbmdbXSB7XG5cdFx0Y29uc3QgcmVjb21tZW5kYXRpb25EYXRhID0gdGhpcy5nZXRWaWV3KCkuZ2V0TW9kZWwoXCJpbnRlcm5hbFwiKT8uZ2V0UHJvcGVydHkoXCIvcmVjb21tZW5kYXRpb25zRGF0YVwiKTtcblx0XHRpZiAocmVjb21tZW5kYXRpb25EYXRhLnZlcnNpb24gPT09IG51bGwpIHtcblx0XHRcdHJldHVybiBbXTtcblx0XHR9XG5cdFx0Y29uc3QgaXNGY2xFbmFibGVkID0gdGhpcy5iYXNlLmdldEFwcENvbXBvbmVudCgpLl9pc0ZjbEVuYWJsZWQoKTtcblx0XHRjb25zdCBpc0Z1bGxTY3JlZW4gPSBpc0ZjbEVuYWJsZWRcblx0XHRcdD8gKHRoaXMuYmFzZS5nZXRBcHBDb21wb25lbnQoKS5nZXRSb290Vmlld0NvbnRyb2xsZXIoKSBhcyBGY2xDb250cm9sbGVyKS5nZXRIZWxwZXIoKS5nZXRDdXJyZW50VUlTdGF0ZSgpLmlzRnVsbFNjcmVlblxuXHRcdFx0OiB0cnVlO1xuXHRcdGNvbnN0IGlzUmVjb21tZW5kYXRpb25BY2NlcHRhYmxlID0gKGNvbnRleHRQYXRoOiBzdHJpbmcsIGtleTogc3RyaW5nKTogYm9vbGVhbiA9PiB7XG5cdFx0XHRjb25zdCBzcGxpdFBhdGhBbmRDaGVja0lmUmVjb21tZW5kYXRpb25BY2NlcHRhYmxlID0gKGN0eHRQYXRoOiBzdHJpbmcpOiBib29sZWFuID0+IHtcblx0XHRcdFx0Y29uc3QgcGF0aEFycmF5ID0ga2V5LnNwbGl0KGN0eHRQYXRoKTtcblx0XHRcdFx0Y29uc3QgbmV3UGF0aCA9IHBhdGhBcnJheVsxXTtcblx0XHRcdFx0bGV0IG5ld1BhdGhBcnJheSA9IG5ld1BhdGguc3BsaXQoXCIvXCIpO1xuXHRcdFx0XHQvL2hlcmUgd2UgY2hlY2sgdGhlIHBhdGggYnkgc3BsaXR0aW5nIHRvIGRlY2lkZSB3aGV0aGVyIHRvIGluY2x1ZGUgcmVjb21tZW5kYXRpb25zIG9yIG5vdCBpbiBkaWFsb2dcblx0XHRcdFx0aWYgKG5ld1BhdGhBcnJheS5sZW5ndGggPD0gMykge1xuXHRcdFx0XHRcdHJldHVybiB0cnVlO1xuXHRcdFx0XHR9IGVsc2Uge1xuXHRcdFx0XHRcdG5ld1BhdGhBcnJheSA9IG5ld1BhdGhBcnJheS5zbGljZSgyKTtcblx0XHRcdFx0XHRyZXR1cm4gIW5ld1BhdGhBcnJheS5zb21lKCh2YWx1ZTogc3RyaW5nKSA9PiB2YWx1ZS5pbmNsdWRlcyhcIihcIikpO1xuXHRcdFx0XHR9XG5cdFx0XHR9O1xuXHRcdFx0aWYgKGlzRmNsRW5hYmxlZCAmJiAhaXNGdWxsU2NyZWVuKSB7XG5cdFx0XHRcdGNvbnN0IHJpZ2h0TW9zdENvbnRleHQgPSAodGhpcy5iYXNlLmdldEFwcENvbXBvbmVudCgpLmdldFJvb3RWaWV3Q29udHJvbGxlcigpIGFzIEZjbENvbnRyb2xsZXIpLmdldFJpZ2h0bW9zdENvbnRleHQoKTtcblx0XHRcdFx0aWYgKGtleS5pbmNsdWRlcyhyaWdodE1vc3RDb250ZXh0Py5nZXRQYXRoKCkgYXMgc3RyaW5nKSkge1xuXHRcdFx0XHRcdHJldHVybiBzcGxpdFBhdGhBbmRDaGVja0lmUmVjb21tZW5kYXRpb25BY2NlcHRhYmxlKHJpZ2h0TW9zdENvbnRleHQ/LmdldFBhdGgoKSBhcyBzdHJpbmcpO1xuXHRcdFx0XHR9IGVsc2Uge1xuXHRcdFx0XHRcdHJldHVybiBzcGxpdFBhdGhBbmRDaGVja0lmUmVjb21tZW5kYXRpb25BY2NlcHRhYmxlKGNvbnRleHRQYXRoKTtcblx0XHRcdFx0fVxuXHRcdFx0fSBlbHNlIHtcblx0XHRcdFx0cmV0dXJuIHNwbGl0UGF0aEFuZENoZWNrSWZSZWNvbW1lbmRhdGlvbkFjY2VwdGFibGUoY29udGV4dFBhdGgpO1xuXHRcdFx0fVxuXHRcdH07XG5cblx0XHRjb25zdCBkYXRhVG9CZUZpbHRlcmVkID0gdGhpcy5mZXRjaERhdGFUb0JlRmlsdGVyZWQocmVjb21tZW5kYXRpb25EYXRhLCBjb25zaWRlclJlY29tbWVuZGF0aW9uQ29udGV4dHMpO1xuXHRcdHJldHVybiAoXG5cdFx0XHRkYXRhVG9CZUZpbHRlcmVkLmZpbHRlcigoa2V5OiBzdHJpbmcpID0+IHtcblx0XHRcdFx0cmV0dXJuIChcblx0XHRcdFx0XHRrZXkuaW5jbHVkZXModGhpcy5nZXRWaWV3KCkuZ2V0QmluZGluZ0NvbnRleHQoKT8uZ2V0UGF0aCgpIGFzIHN0cmluZykgJiZcblx0XHRcdFx0XHRpc1JlY29tbWVuZGF0aW9uQWNjZXB0YWJsZSh0aGlzLmdldFZpZXcoKS5nZXRCaW5kaW5nQ29udGV4dCgpPy5nZXRQYXRoKCkgYXMgc3RyaW5nLCBrZXkpXG5cdFx0XHRcdCk7XG5cdFx0XHR9KSB8fCBbXVxuXHRcdCk7XG5cdH1cblxuXHQvKipcblx0ICogRmV0Y2hlcyB0aGUgZGF0YSB0byBiZSBmaWx0ZXJlZCBkZXBlbmRpbmcgb24gdGhlIHJlY29tbWVuZGF0aW9uRGF0YS5cblx0ICogQHBhcmFtIHJlY29tbWVuZGF0aW9uRGF0YVxuXHQgKiBAcGFyYW0gY29uc2lkZXJSZWNvbW1lbmRhdGlvbkNvbnRleHRzIFBhc3NlZCBhcyB0cnVlIHdoZW4gcmVjb21tZW5kYXRpb24gY29udGV4dHMgc2hvdWxkIGJlIGNvbnNpZGVyZWQgaW5zdGVhZCBvZiBkYXRhXG5cdCAqIEByZXR1cm5zIEFycmF5IG9mIGNvbnRleHRQYXRocyB0byBiZSBmaWx0ZXJlZFxuXHQgKi9cblx0cHJpdmF0ZSBmZXRjaERhdGFUb0JlRmlsdGVyZWQocmVjb21tZW5kYXRpb25EYXRhOiBSZWNvbW1lbmRhdGlvbkluZm8sIGNvbnNpZGVyUmVjb21tZW5kYXRpb25Db250ZXh0czogYm9vbGVhbiB8IHVuZGVmaW5lZCk6IHN0cmluZ1tdIHtcblx0XHRsZXQgZGF0YVRvQmVGaWx0ZXJlZDogc3RyaW5nW10gPSBbXTtcblx0XHQvLyBjb25zaWRlciByZWNvbW1lbmRhdGlvbkNvbnRleHRzIGZvciBmZXRjaGluZyB0aGUgcGF0aHMgaW4gY2FzZSBvZiBmaWVsZCBjaGFuZ2Ugc28gdGhhdCBjb250ZXh0cyBmb3Igd2hpY2ggZW1wdHkgcmVjb21tZW5kYXRpb24gZGF0YSBpcyByZXR1cm5lZCBhcmUgYWxzbyBjb25zaWRlcmVkXG5cdFx0aWYgKGNvbnNpZGVyUmVjb21tZW5kYXRpb25Db250ZXh0cykge1xuXHRcdFx0Y29uc3QgcmVjb21tZW5kYXRpb25Db250ZXh0cyA9IHRoaXMuZ2V0VmlldygpLmdldE1vZGVsKFwiaW50ZXJuYWxcIik/LmdldFByb3BlcnR5KFwiL3JlY29tbWVuZGF0aW9uQ29udGV4dHNcIik7XG5cdFx0XHRyZWNvbW1lbmRhdGlvbkNvbnRleHRzLmZvckVhY2goKHJlY29tbWVuZGF0aW9uQ29udGV4dDogUmVjb21tZW5kYXRpb25Db250ZXh0c0luZm8pID0+IHtcblx0XHRcdFx0ZGF0YVRvQmVGaWx0ZXJlZC5wdXNoKChyZWNvbW1lbmRhdGlvbkNvbnRleHQuY29udGV4dCBhcyBPRGF0YVY0Q29udGV4dCkuZ2V0UGF0aCgpKTtcblx0XHRcdH0pO1xuXHRcdH0gZWxzZSB7XG5cdFx0XHQvLyBjb25zaWRlciByZWNvbW1lbmRhdGlvbkRhdGEgaW4gY2FzZSBvZiBhY2NlcHQgYWxsIGRpYWxvZyBzY2VuYXJpb3Ncblx0XHRcdGRhdGFUb0JlRmlsdGVyZWQgPSBPYmplY3Qua2V5cyhyZWNvbW1lbmRhdGlvbkRhdGEpLmZpbHRlcigoa2V5KSA9PiB7XG5cdFx0XHRcdHJldHVybiBrZXkgIT09IFwidmVyc2lvblwiICYmIGtleSAhPT0gXCJrZXlzXCI7XG5cdFx0XHR9KTtcblx0XHR9XG5cdFx0cmV0dXJuIGRhdGFUb0JlRmlsdGVyZWQ7XG5cdH1cblxuXHQvKipcblx0ICogT3ZlcndyaXRlcyBBY2NlcHRBbGwgUGFyYW1zIGJhc2VkIG9mIHJlY29tbWVuZGF0aW9uIGRhdGEgYW5kIGNvbnRleHRzLlxuXHQgKiBAcGFyYW0gZmlsdGVyUmVjb21tZW5kYXRpb25EYXRhXG5cdCAqIEBwYXJhbSBmaWx0ZXJSZWNvbW1lbmRhdGlvbkNvbnRleHRzXG5cdCAqIEBwYXJhbSBwYXJhbXNcblx0ICovXG5cdHByaXZhdGUgYWRqdXN0QWNjZXB0QWxsUGFyYW1zKFxuXHRcdGZpbHRlclJlY29tbWVuZGF0aW9uRGF0YTogUmVjb21tZW5kYXRpb25JbmZvLFxuXHRcdGZpbHRlclJlY29tbWVuZGF0aW9uQ29udGV4dHM6IFJlY29tbWVuZGF0aW9uQ29udGV4dHNJbmZvW10sXG5cdFx0cGFyYW1zOiBBY2NlcHRBbGxQYXJhbXNcblx0KTogdm9pZCB7XG5cdFx0cGFyYW1zLnJlY29tbWVuZGF0aW9uRGF0YSA9IFtdO1xuXHRcdGZvciAoY29uc3Qga2V5IGluIGZpbHRlclJlY29tbWVuZGF0aW9uRGF0YSkge1xuXHRcdFx0aWYgKGZpbHRlclJlY29tbWVuZGF0aW9uRGF0YVtrZXldLnZhbHVlIHx8IGZpbHRlclJlY29tbWVuZGF0aW9uRGF0YVtrZXldLnRleHQpIHtcblx0XHRcdFx0Ly8gSW4gY2FzZSB0aGVyZSBpcyBubyBwbGFjZWhvbGRlciB2YWx1ZSBvciBwbGFjZWhvbGRlciB0ZXh0IHRoZW4gdGhpcyByZWNvbW1lbmRhdGlvbiBpcyBub3QgcmVsZXZhbnQgZm9yIEFjY2VwdC5cblx0XHRcdFx0Ly8gVXNlciBuZWVkcyB0byBtYW51YWxseSBzZWxlY3QgdGhlIHJlY29tbWVuZGVkIHZhbHVlIGluIHRoZXNlIGNhc2VzICYgdGhlcmVmb3JlIGZpbHRlciB0aGUgc2FtZS5cblx0XHRcdFx0Y29uc3QgY29udGV4dFBhdGhGcm9tS2V5ID0ga2V5LnN1YnN0cmluZygwLCBrZXkubGFzdEluZGV4T2YoXCIpXCIpICsgMSk7XG5cdFx0XHRcdGNvbnN0IHByb3BlcnR5UGF0aEZyb21LZXkgPSBrZXkuc3Vic3RyaW5nKGtleS5sYXN0SW5kZXhPZihcIilcIikgKyAyKTtcblx0XHRcdFx0Y29uc3QgbWF0Y2hpbmdDb250ZXh0ID0gZmlsdGVyUmVjb21tZW5kYXRpb25Db250ZXh0cy5maWx0ZXIoZnVuY3Rpb24gKGNvbnRleHRJbmZvKSB7XG5cdFx0XHRcdFx0aWYgKChjb250ZXh0SW5mbz8uY29udGV4dCBhcyBPRGF0YVY0Q29udGV4dCkuZ2V0UGF0aCgpID09PSBjb250ZXh0UGF0aEZyb21LZXkpIHtcblx0XHRcdFx0XHRcdHJldHVybiB0cnVlO1xuXHRcdFx0XHRcdH1cblx0XHRcdFx0fSk7XG5cdFx0XHRcdGlmIChcblx0XHRcdFx0XHRtYXRjaGluZ0NvbnRleHQ/Lmxlbmd0aCA+IDAgJiZcblx0XHRcdFx0XHRzdGFuZGFyZFJlY29tbWVuZGF0aW9uSGVscGVyLmlzUmVjb21tZW5kYXRpb25GaWVsZE51bGwoXG5cdFx0XHRcdFx0XHRtYXRjaGluZ0NvbnRleHRbMF0uY29udGV4dCBhcyBPRGF0YVY0Q29udGV4dCxcblx0XHRcdFx0XHRcdGtleSxcblx0XHRcdFx0XHRcdHByb3BlcnR5UGF0aEZyb21LZXlcblx0XHRcdFx0XHQpXG5cdFx0XHRcdCkge1xuXHRcdFx0XHRcdHBhcmFtcy5yZWNvbW1lbmRhdGlvbkRhdGEucHVzaCh7XG5cdFx0XHRcdFx0XHRjb250ZXh0OiBtYXRjaGluZ0NvbnRleHRbMF0uY29udGV4dCxcblx0XHRcdFx0XHRcdGNvbnRleHRJZGVudGlmaWVyOiBtYXRjaGluZ0NvbnRleHRbMF0uY29udGV4dElkZW50aWZpZXIsXG5cdFx0XHRcdFx0XHRwcm9wZXJ0eVBhdGg6IHByb3BlcnR5UGF0aEZyb21LZXksXG5cdFx0XHRcdFx0XHR2YWx1ZTogZmlsdGVyUmVjb21tZW5kYXRpb25EYXRhW2tleV0udmFsdWUsXG5cdFx0XHRcdFx0XHR0ZXh0OiBmaWx0ZXJSZWNvbW1lbmRhdGlvbkRhdGFba2V5XS50ZXh0XG5cdFx0XHRcdFx0fSk7XG5cdFx0XHRcdH1cblx0XHRcdH1cblx0XHR9XG5cdH1cblxuXHQvKipcblx0ICogRmV0Y2hlcyBSZWNvbW1lbmRhdGlvbkluZm8gdGhhdCBjb250YWlucyB0YXJnZXRzLCBmaWx0ZXJSZWNvbW1lbmRhdGlvbkRhdGEsIGZpbHRlclJlY29tbWVuZGF0aW9uQ29udGV4dHMuXG5cdCAqIEByZXR1cm5zIFByb21pc2Ugd2hpY2ggcmVzb2x2ZXMgd2l0aCBBY2NlcHRhbGxQYXJhbXNcblx0ICovXG5cdHB1YmxpYyBhc3luYyBmZXRjaEFjY2VwdEFsbFBhcmFtcygpOiBQcm9taXNlPEFjY2VwdEFsbFBhcmFtcz4ge1xuXHRcdGNvbnN0IHRhcmdldHM6IHN0cmluZ1tdID0gdGhpcy5mZXRjaFRhcmdldHMoKTtcblx0XHRjb25zdCBmaWx0ZXJSZWNvbW1lbmRhdGlvbkRhdGEgPSB0aGlzLmZldGNoRmlsdGVyZWRSZWNvbW1lbmRhdGlvbkRhdGEodGFyZ2V0cyk7XG5cdFx0Y29uc3QgZmlsdGVyUmVjb21tZW5kYXRpb25Db250ZXh0cyA9IHRoaXMuZmV0Y2hGaWx0ZXJlZFJlY29tbWVuZGF0aW9uQ29udGV4dHModGFyZ2V0cyk7XG5cdFx0Y29uc3QgcGFyYW1zID0ge307XG5cdFx0dGhpcy5hZGp1c3RBY2NlcHRBbGxQYXJhbXMoZmlsdGVyUmVjb21tZW5kYXRpb25EYXRhLCBmaWx0ZXJSZWNvbW1lbmRhdGlvbkNvbnRleHRzLCBwYXJhbXMpO1xuXHRcdGF3YWl0ICh0aGlzLmdldFZpZXcoKS5nZXRDb250cm9sbGVyKCkgYXMgUGFnZUNvbnRyb2xsZXIpLnJlY29tbWVuZGF0aW9ucy5vbkJlZm9yZUFjY2VwdFJlY29tbWVuZGF0aW9ucyhwYXJhbXMpO1xuXHRcdHN0YW5kYXJkUmVjb21tZW5kYXRpb25IZWxwZXIuYWRkQ29udGV4dElkZW50aWZpZXJUZXh0KHBhcmFtcywgdGhpcy5nZXRWaWV3KCk/LmdldEJpbmRpbmdDb250ZXh0KCk/LmdldFBhdGgoKSk7XG5cdFx0dGhpcy5kYXRhVG9CZUFjY2VwdGVkID0gKHBhcmFtcyBhcyBBY2NlcHRBbGxQYXJhbXMpLnJlY29tbWVuZGF0aW9uRGF0YSB8fCBbXTtcblx0XHRyZXR1cm4gcGFyYW1zO1xuXHR9XG5cblx0LyoqXG5cdCAqIENoZWNrcyBpZiByZWNvbW1lbmRhdGlvbnMgZXhpc3Qgb3Igbm90LlxuXHQgKiBAcmV0dXJucyBCb29sZWFuIHZhbHVlIGJhc2VkIG9uIHdoZXRoZXIgcmVjb21tZW5kYXRpb25zIGFyZSBwcmVzZW50IG9yIG5vdFxuXHQgKi9cblx0cHVibGljIGNoZWNrSWZSZWNvbW1lbmRhdGlvbnNFeGlzdCgpOiBib29sZWFuIHtcblx0XHRjb25zdCByZWNvbW1lbmRhdGlvbkRhdGEgPSB0aGlzLmludGVybmFsTW9kZWwuZ2V0UHJvcGVydHkoXCIvcmVjb21tZW5kYXRpb25zRGF0YVwiKSB8fCB7fTtcblx0XHRyZXR1cm4gT2JqZWN0LmtleXMocmVjb21tZW5kYXRpb25EYXRhKS5sZW5ndGggIT09IDA7XG5cdH1cblxuXHQvKipcblx0ICogVGhpcyBmdW5jdGlvbiB3aWxsIGNsZWFyIHJlY29tbWVuZGF0aW9uIERhdGEgZm9yIGEgZ2l2ZW4gY29udGV4dCBhbmQgYWxsIGl0cyBjaGlsZHJlbi5cblx0ICogQHBhcmFtIGNvbnRleHRzIENvbnRleHQgZm9yIHdoaWNoIHJlY29tbWVuZGF0aW9uIGhhcyB0byBiZSBjbGVhcmVkXG5cdCAqL1xuXHRwdWJsaWMgaWdub3JlUmVjb21tZW5kYXRpb25Gb3JDb250ZXh0cyhjb250ZXh0cz86IE9EYXRhVjRDb250ZXh0W10pOiB2b2lkIHtcblx0XHRpZiAoIWNvbnRleHRzIHx8ICFjb250ZXh0cy5sZW5ndGgpIHtcblx0XHRcdGNvbnN0IHZpZXcgPSB0aGlzLmdldFZpZXcoKTtcblx0XHRcdGNvbnN0IGJpbmRpbmdDb250ZXh0ID0gdmlldy5nZXRCaW5kaW5nQ29udGV4dCgpIGFzIE9EYXRhVjRDb250ZXh0O1xuXHRcdFx0Y29udGV4dHMgPSBbYmluZGluZ0NvbnRleHRdO1xuXHRcdH1cblx0XHRzdGFuZGFyZFJlY29tbWVuZGF0aW9uSGVscGVyLmlnbm9yZVJlY29tbWVuZGF0aW9uRm9yQ29udGV4dHMoY29udGV4dHMsIHRoaXMuaW50ZXJuYWxNb2RlbCk7XG5cdH1cblxuXHRwcml2YXRlIHRyeVJlc2V0UmVjb21tZW5kYXRpb25zKHJvb3RDb250ZXh0OiBPRGF0YVY0Q29udGV4dCk6IHZvaWQge1xuXHRcdHN0YW5kYXJkUmVjb21tZW5kYXRpb25IZWxwZXIuc2V0Q3VycmVudFJvb3RDb250ZXh0KHJvb3RDb250ZXh0KTtcblx0XHQvLyBUT0RPOiBTdGFuZGFyZFJlY29tbWVuZGF0aW9uSGVscGVyIHN0b3JlcyBhbGwgdGhlIHJlY29tbWVuZGF0aW9ucyBmb3IgYW4gaW5zdGFuY2Ugb2YgYnVzaW5lc3Mgb2JqZWN0XG5cdFx0Ly8gbWVhbmluZyBkb2Vzbid0IG1hdHRlciB0aGUgcmVjb21tZW5kYXRpb25zIGFyZSBvbiB0aGUgT1AvU3ViT1AuIEJ1dCB0aGUgcmVjb21tZW5kYXRpb25zIGNvbnRleHRzIGhlcmVcblx0XHQvLyBpcyBzcGVjaWZpYyB0byB0aGlzIGNvbnRyb2xsZXIsIFN1Yk9QIGNvbnRyb2xsZXIgd2lsbCBoYXZlIGl0cyBvd24gcmVjb21tZW5kYXRpb24gY29udGV4dHMuIElkZWFsbHkgaXRcblx0XHQvLyBzaG91bGQgYmUgY2xlYXJlZCBidXQgdGhpcyBpcyBub3QgZG9uZSBoZXJlLiBUaGlzIGNvbXBsZXRlIHRoaW5nIG5lZWRzIHRvIGJlIHJlZmFjdG9yZWRcblx0XHR0aGlzLmludGVybmFsTW9kZWwuc2V0UHJvcGVydHkoXCIvcmVjb21tZW5kYXRpb25Db250ZXh0c1wiLCBbXSk7XG5cdFx0c3RhbmRhcmRSZWNvbW1lbmRhdGlvbkhlbHBlci5yZXNldFJlY29tbWVuZGF0aW9ucyh0aGlzLmludGVybmFsTW9kZWwpO1xuXHR9XG5cblx0LyoqXG5cdCAqIFRoaXMgZnVuY3Rpb24gd2lsbCBzdG9yZSB0aGUgbnVtYmVyIG9mIGZpZWxkcyBBY2NlcHRlZC9JZ25vcmVkIHdoZW4gU2F2ZSBidXR0b24gaXMgY2xpY2tlZCwgZGVwZW5kaW5nIG9uIHdoaWNoIHJlY29tbWVkYXRpb24gb3B0aW9uIHdhcyBjaG9vc2VuIEFjY2VwdC9JZ25vcmUgYW5kIFNhdmUuXG5cdCAqIEBwYXJhbSByZWNvbW1lbmRhdGlvbk9wdGlvbkNob29zZW5cblx0ICovXG5cdHB1YmxpYyBhc3luYyBzdG9yZURhdGFGb3JUZWxlbWV0cnkocmVjb21tZW5kYXRpb25PcHRpb25DaG9vc2VuOiB1bmRlZmluZWQgfCBSZWNvbW1lbmRhdGlvbkRpYWxvZ0RlY2lzaW9uKTogUHJvbWlzZTx2b2lkPiB7XG5cdFx0Y29uc3Qgcm9vdENvbnRleHQgPSBhd2FpdCB0aGlzLl9nZXRSb290Q29udGV4dCh0aGlzLmdldFZpZXcoKS5nZXRCaW5kaW5nQ29udGV4dCgpIGFzIE9EYXRhVjRDb250ZXh0KTtcblx0XHRpZiAocm9vdENvbnRleHQgJiYgdGhpcy5iYXNlLnJlY29tbWVuZGF0aW9ucy5pc0VuYWJsZWQocm9vdENvbnRleHQpKSB7XG5cdFx0XHRpZiAocmVjb21tZW5kYXRpb25PcHRpb25DaG9vc2VuID09PSBSZWNvbW1lbmRhdGlvbkRpYWxvZ0RlY2lzaW9uLkFjY2VwdCkge1xuXHRcdFx0XHQvLyBpbmNyZWFzZSBhY2NlcHQgY291bnRcblx0XHRcdFx0dGhpcy50ZWxlbWV0cnkudXBkYXRlRGF0YShcIm51bWJlck9mRmllbGRzQWNjZXB0ZWRUaHJvdWdoQWNjZXB0QnV0dG9uXCIsIHRoaXMuZGF0YVRvQmVBY2NlcHRlZC5sZW5ndGgpO1xuXHRcdFx0fSBlbHNlIGlmIChyZWNvbW1lbmRhdGlvbk9wdGlvbkNob29zZW4gPT09IFJlY29tbWVuZGF0aW9uRGlhbG9nRGVjaXNpb24uSWdub3JlKSB7XG5cdFx0XHRcdC8vIGluY3JlYXNlIGlnbm9yZSBjb3VudFxuXHRcdFx0XHR0aGlzLnRlbGVtZXRyeS51cGRhdGVEYXRhKFwibnVtYmVyT2ZGaWVsZHNJZ25vcmVkVGhyb3VnaElnbm9yZUJ1dHRvblwiLCB0aGlzLmRhdGFUb0JlQWNjZXB0ZWQubGVuZ3RoKTtcblx0XHRcdH1cblx0XHRcdHRoaXMudGVsZW1ldHJ5LnN0b3JlRGF0YSh0aGlzLmdldFZpZXcoKSBhcyBGRVZpZXcpO1xuXHRcdH1cblx0fVxuXG5cdC8qKlxuXHQgKiBUaGlzIGZ1bmN0aW9uIHdpbGwgdXBkYXRlIHRoZSBjb3VudCBieSAxIGluIHRlbGVtZXRyeSBkYXRhLlxuXHQgKiBAcGFyYW0ga2V5XG5cdCAqL1xuXHRwdWJsaWMgaW5jcmVhc2VUZWxlbWV0cnlEYXRhQ291bnQoa2V5OiBrZXlvZiBSZWNvbW1lbmRhdGlvblRlbGVtZXRyeSk6IHZvaWQge1xuXHRcdHRoaXMudGVsZW1ldHJ5LmluY3JlYXNlQ291bnQoa2V5KTtcblx0fVxuXG5cdC8qKlxuXHQgKiBUaGlzIGZ1bmN0aW9uIHdpbGwgdXBkYXRlIHRlbGVtZXRyeSBkYXRhIGZvciB3aGljaCBvcHRpb24gdXNlciBjaG9zZSB3aGVuIHNlbGVjdGluZyBhIGZpZWxkIHZhbHVlLCBhcyB0b3Avbm9uLXRvcCByZWNvbW1lbmRhdGlvbiBvciBzb21lIG90aGVyIHZhbHVlLlxuXHQgKiBAcGFyYW0gZmllbGRQYXRoXG5cdCAqIEBwYXJhbSBzZWxlY3RlZFZhbHVlXG5cdCAqL1xuXHRwdWJsaWMgdXBkYXRlVGVsZW1ldHJ5RGF0YUJhc2VkT25Vc2VyU2VsZWN0aW9uKGZpZWxkUGF0aDogc3RyaW5nLCBzZWxlY3RlZFZhbHVlOiBzdHJpbmcpOiB2b2lkIHtcblx0XHR0aGlzLnRlbGVtZXRyeS51cGRhdGVUZWxlbWV0cnlEYXRhQmFzZWRPblVzZXJTZWxlY3Rpb24odGhpcy5nZXRWaWV3KCksIGZpZWxkUGF0aCwgc2VsZWN0ZWRWYWx1ZSk7XG5cdH1cblxuXHQvKipcblx0ICogVGhpcyBmdW5jdGlvbiB3aWxsIHVwZGF0ZSB0aGUgdG90YWwgbnVtYmVyIG9mIGZpZWxkcyByZWNvbW1lbmRlZC4gSWYgdGhlIGZpZWxkIGlzIGFscmVhZHkgaW5jbHVkZWQgaW4gdGVsZW1ldHJ5IGNvdW50IHRoZW4gd2UgZG8gbm90IGluY2x1ZGUuXG5cdCAqIFRoaXMgd2F5IHdlIGtub3cgdGhlIHRvdGFsIG51bWJlciBvZiB1bmlxdWUgZmllbGRzIHJlY29tbWVuZGVkLlxuXHQgKiBAcGFyYW0gcmVjb21tZW5kYXRpb25EYXRhXG5cdCAqL1xuXHR1cGRhdGVBbGxSZWNvbW1lbmRlZEZpZWxkcyhyZWNvbW1lbmRhdGlvbkRhdGE6IFN0YW5kYXJkUmVjb21tZW5kYXRpb25SZXNwb25zZVtdKTogdm9pZCB7XG5cdFx0Y29uc3Qgdmlld0JpbmRpbmdDb250ZXh0UGF0aCA9ICh0aGlzLmdldFZpZXcoKS5nZXRCaW5kaW5nQ29udGV4dCgpIGFzIENvbnRleHQpLmdldFBhdGgoKTtcblx0XHRjb25zdCBuZXdSZWNvbW1lbmRhdGlvbnNGb3JDdXJyZW50Q29udGV4dHMgPSByZWNvbW1lbmRhdGlvbkRhdGEuZmlsdGVyKFxuXHRcdFx0KHJlc3BvbnNlKSA9PiByZXNwb25zZVtcIkFJUmVjb21tZW5kZWRGaWVsZFBhdGhcIl0/LmluY2x1ZGVzKHZpZXdCaW5kaW5nQ29udGV4dFBhdGgpXG5cdFx0KTtcblx0XHRpZiAoIXRoaXMuYWxsUmVjb21tZW5kZWRGaWVsZHMpIHtcblx0XHRcdHRoaXMuYWxsUmVjb21tZW5kZWRGaWVsZHMgPSBbXTtcblx0XHR9XG5cdFx0bmV3UmVjb21tZW5kYXRpb25zRm9yQ3VycmVudENvbnRleHRzLmZvckVhY2goKHJlc3BvbnNlKSA9PiB7XG5cdFx0XHRjb25zdCBmaWVsZFBhdGggPSByZXNwb25zZVtcIkFJUmVjb21tZW5kZWRGaWVsZFBhdGhcIl07XG5cdFx0XHRpZiAoZmllbGRQYXRoKSB7XG5cdFx0XHRcdGlmICghdGhpcy5hbGxSZWNvbW1lbmRlZEZpZWxkcy5pbmNsdWRlcyhmaWVsZFBhdGgpKSB7XG5cdFx0XHRcdFx0dGhpcy5hbGxSZWNvbW1lbmRlZEZpZWxkcy5wdXNoKGZpZWxkUGF0aCk7XG5cdFx0XHRcdFx0dGhpcy50ZWxlbWV0cnkuaW5jcmVhc2VDb3VudChcIm51bWJlck9mUmVjb21tZW5kZWRGaWVsZHNcIik7XG5cdFx0XHRcdH1cblx0XHRcdH1cblx0XHR9KTtcblx0fVxufVxuIl0sIm1hcHBpbmdzIjoiOzs7Ozs7Ozs7Ozs7Ozs7Ozs7OztNQXNDcUJBLGVBQWUsSUFBQUMsSUFBQSxHQURuQ0MsY0FBYyxDQUFDLGtEQUFrRCxDQUFDLEVBQUFD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
@@ -19,7 +19,7 @@ import CommonUtils from "../CommonUtils";
19
19
  import type FclController from "../rootView/Fcl.controller";
20
20
  import TransactionHelper from "./editFlow/TransactionHelper";
21
21
 
22
- import { RecommendationDialogDecision } from "../controls/Recommendations/ConfirmRecommendationDialog.block";
22
+ import { RecommendationDialogDecision } from "../controls/Recommendations/ConfirmRecommendationDialog";
23
23
  import type { RecommendationTelemetry } from "../services/TelemetryServiceFactory";
24
24
  import Telemetry from "./recommendations/Telemetry";
25
25
 
@@ -20,10 +20,10 @@ sap.ui.define(["sap/fe/base/ClassSupport", "sap/fe/core/helpers/ModelHelper", "s
20
20
  * @since 1.86.0
21
21
  */
22
22
  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 = publicExtension(), _dec11 = finalExtension(), _dec(_class = (_class2 = /*#__PURE__*/function (_ControllerExtension) {
23
- _inheritsLoose(Routing, _ControllerExtension);
24
23
  function Routing() {
25
24
  return _ControllerExtension.apply(this, arguments) || this;
26
25
  }
26
+ _inheritsLoose(Routing, _ControllerExtension);
27
27
  var _proto = Routing.prototype;
28
28
  /**
29
29
  * This function can be used to intercept the routing event happening during the normal process of navigating from one page to another (like clicking on the table row to navigate, or when pagination buttons are clicked).
@@ -114,7 +114,7 @@ sap.ui.define(["sap/fe/base/ClassSupport", "sap/fe/core/helpers/ModelHelper", "s
114
114
  return this.base._routing.navigateToRoute(sTargetRouteName, oParameters);
115
115
  };
116
116
  return Routing;
117
- }(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], Object.getOwnPropertyDescriptor(_class2.prototype, "onAfterBinding"), _class2.prototype), _applyDecoratedDescriptor(_class2.prototype, "navigateToRoute", [_dec10, _dec11], Object.getOwnPropertyDescriptor(_class2.prototype, "navigateToRoute"), _class2.prototype)), _class2)) || _class);
117
+ }(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], Object.getOwnPropertyDescriptor(_class2.prototype, "onAfterBinding"), _class2.prototype), _applyDecoratedDescriptor(_class2.prototype, "navigateToRoute", [_dec10, _dec11], Object.getOwnPropertyDescriptor(_class2.prototype, "navigateToRoute"), _class2.prototype), _class2)) || _class);
118
118
  return Routing;
119
119
  }, false);
120
- //# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJuYW1lcyI6WyJSb3V0aW5nIiwiX2RlYyIsImRlZmluZVVJNUNsYXNzIiwiX2RlYzIiLCJwdWJsaWNFeHRlbnNpb24iLCJfZGVjMyIsImV4dGVuc2libGUiLCJfZGVjNCIsIl9kZWM1IiwiZmluYWxFeHRlbnNpb24iLCJfZGVjNiIsIl9kZWM3IiwiT3ZlcnJpZGVFeGVjdXRpb24iLCJBZnRlciIsIl9kZWM4IiwiX2RlYzkiLCJfZGVjMTAiLCJfZGVjMTEiLCJfY2xhc3MiLCJfY2xhc3MyIiwiX0NvbnRyb2xsZXJFeHRlbnNpb24iLCJfaW5oZXJpdHNMb29zZSIsImFwcGx5IiwiYXJndW1lbnRzIiwiX3Byb3RvIiwicHJvdG90eXBlIiwib25CZWZvcmVOYXZpZ2F0aW9uIiwibU5hdmlnYXRpb25QYXJhbWV0ZXJzIiwiUHJvbWlzZSIsInJlc29sdmUiLCJuYXZpZ2F0ZSIsIm9Db250ZXh0IiwicGFyYW1ldGVycyIsImludGVybmFsTW9kZWwiLCJiYXNlIiwiZ2V0TW9kZWwiLCJzZXRQcm9wZXJ0eSIsIl9yb3V0aW5nIiwibmF2aWdhdGVUb0NvbnRleHQiLCJvbkJlZm9yZUJpbmRpbmciLCJvbkFmdGVyQmluZGluZyIsIm5hdmlnYXRlVG9Sb3V0ZSIsInNUYXJnZXRSb3V0ZU5hbWUiLCJvUGFyYW1ldGVycyIsIm9NZXRhTW9kZWwiLCJnZXRNZXRhTW9kZWwiLCJiSXNTdGlja3lNb2RlIiwiTW9kZWxIZWxwZXIiLCJpc1N0aWNreVNlc3Npb25TdXBwb3J0ZWQiLCJDb250cm9sbGVyRXh0ZW5zaW9uIiwiX2FwcGx5RGVjb3JhdGVkRGVzY3JpcHRvciIsIk9iamVjdCIsImdldE93blByb3BlcnR5RGVzY3JpcHRvciJdLCJzb3VyY2VSb290IjoiLiIsInNvdXJjZXMiOlsiUm91dGluZy50cyJdLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBkZWZpbmVVSTVDbGFzcywgZXh0ZW5zaWJsZSwgZmluYWxFeHRlbnNpb24sIHB1YmxpY0V4dGVuc2lvbiB9IGZyb20gXCJzYXAvZmUvYmFzZS9DbGFzc1N1cHBvcnRcIjtcbmltcG9ydCB0eXBlIFBhZ2VDb250cm9sbGVyIGZyb20gXCJzYXAvZmUvY29yZS9QYWdlQ29udHJvbGxlclwiO1xuaW1wb3J0IE1vZGVsSGVscGVyIGZyb20gXCJzYXAvZmUvY29yZS9oZWxwZXJzL01vZGVsSGVscGVyXCI7XG5pbXBvcnQgQ29udHJvbGxlckV4dGVuc2lvbiBmcm9tIFwic2FwL3VpL2NvcmUvbXZjL0NvbnRyb2xsZXJFeHRlbnNpb25cIjtcbmltcG9ydCBPdmVycmlkZUV4ZWN1dGlvbiBmcm9tIFwic2FwL3VpL2NvcmUvbXZjL092ZXJyaWRlRXhlY3V0aW9uXCI7XG5pbXBvcnQgdHlwZSBKU09OTW9kZWwgZnJvbSBcInNhcC91aS9tb2RlbC9qc29uL0pTT05Nb2RlbFwiO1xuaW1wb3J0IHR5cGUgQ29udGV4dCBmcm9tIFwic2FwL3VpL21vZGVsL29kYXRhL3Y0L0NvbnRleHRcIjtcblxuLyoqXG4gKiBBIGNvbnRyb2xsZXIgZXh0ZW5zaW9uIG9mZmVyaW5nIGhvb2tzIGludG8gdGhlIHJvdXRpbmcgZmxvdyBvZiB0aGUgYXBwbGljYXRpb25cbiAqIEBoaWRlY29uc3RydWN0b3JcbiAqIEBwdWJsaWNcbiAqIEBzaW5jZSAxLjg2LjBcbiAqL1xuQGRlZmluZVVJNUNsYXNzKFwic2FwLmZlLmNvcmUuY29udHJvbGxlcmV4dGVuc2lvbnMuUm91dGluZ1wiKVxuY2xhc3MgUm91dGluZyBleHRlbmRzIENvbnRyb2xsZXJFeHRlbnNpb24ge1xuXHRwcml2YXRlIGJhc2UhOiBQYWdlQ29udHJvbGxlcjtcblxuXHQvKipcblx0ICogVGhpcyBmdW5jdGlvbiBjYW4gYmUgdXNlZCB0byBpbnRlcmNlcHQgdGhlIHJvdXRpbmcgZXZlbnQgaGFwcGVuaW5nIGR1cmluZyB0aGUgbm9ybWFsIHByb2Nlc3Mgb2YgbmF2aWdhdGluZyBmcm9tIG9uZSBwYWdlIHRvIGFub3RoZXIgKGxpa2UgY2xpY2tpbmcgb24gdGhlIHRhYmxlIHJvdyB0byBuYXZpZ2F0ZSwgb3Igd2hlbiBwYWdpbmF0aW9uIGJ1dHRvbnMgYXJlIGNsaWNrZWQpLlxuXHQgKlxuXHQgKiBUaGUgZnVuY3Rpb24gaXMgTk9UIGNhbGxlZCBkdXJpbmcgb3RoZXIgbWVhbnMgb2YgZXh0ZXJuYWwgb3V0Ym91bmQgbmF2aWdhdGlvbiAobGlrZSBhIG5hdmlnYXRpb24gY29uZmlndXJlZCB2aWEgYSBsaW5rLCBvciBieSB1c2luZyBuYXZpZ2F0aW9uIGJ1dHRvbnMpLlxuXHQgKlxuXHQgKiBJZiBkZWNsYXJlZCBhcyBhbiBleHRlbnNpb24sIGl0IGFsbG93cyB5b3UgdG8gaW50ZXJjZXB0IGFuZCBjaGFuZ2UgdGhlIG5vcm1hbCBuYXZpZ2F0aW9uIGZsb3cuXG5cdCAqIElmIHlvdSBkZWNpZGUgdG8gZG8geW91ciBvd24gbmF2aWdhdGlvbiBwcm9jZXNzaW5nLCB5b3UgY2FuIHJldHVybiBgdHJ1ZWAgdG8gcHJldmVudCB0aGUgZGVmYXVsdCByb3V0aW5nIGJlaGF2aW9yLlxuXHQgKlxuXHQgKiBUaGlzIGZ1bmN0aW9uIGlzIG1lYW50IHRvIGJlIGluZGl2aWR1YWxseSBvdmVycmlkZGVuIGJ5IGNvbnN1bWluZyBjb250cm9sbGVycywgYnV0IG5vdCB0byBiZSBjYWxsZWQgZGlyZWN0bHkuXG5cdCAqIFRoZSBvdmVycmlkZSBleGVjdXRpb24gaXM6IHtAbGluayBzYXAudWkuY29yZS5tdmMuT3ZlcnJpZGVFeGVjdXRpb24uQWZ0ZXJ9LlxuXHQgKiBAcGFyYW0gbU5hdmlnYXRpb25QYXJhbWV0ZXJzIE9iamVjdCBjb250YWluaW5nIHJvdyBjb250ZXh0IGFuZCBwYWdlIGNvbnRleHRcblx0ICogQHBhcmFtIG1OYXZpZ2F0aW9uUGFyYW1ldGVycy5iaW5kaW5nQ29udGV4dCBUaGUgY3VycmVudGx5IHNlbGVjdGVkIGNvbnRleHRcblx0ICogQHJldHVybnMgYHRydWVgIHRvIHByZXZlbnQgdGhlIGRlZmF1bHQgZXhlY3V0aW9uLCBmYWxzZSB0byBrZWVwIHRoZSBzdGFuZGFyZCBiZWhhdmlvclxuXHQgKiBAcHVibGljXG5cdCAqIEBzaW5jZSAxLjg2LjBcblx0ICovXG5cdEBwdWJsaWNFeHRlbnNpb24oKVxuXHRAZXh0ZW5zaWJsZShcIkFmdGVyQXN5bmNcIilcblx0Ly8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIEB0eXBlc2NyaXB0LWVzbGludC9uby11bnVzZWQtdmFyc1xuXHRhc3luYyBvbkJlZm9yZU5hdmlnYXRpb24obU5hdmlnYXRpb25QYXJhbWV0ZXJzOiB7IGJpbmRpbmdDb250ZXh0OiBDb250ZXh0IH0pOiBQcm9taXNlPGJvb2xlYW4+IHtcblx0XHQvLyB0byBiZSBvdmVycmlkZW4gYnkgdGhlIGFwcGxpY2F0aW9uXG5cdFx0cmV0dXJuIFByb21pc2UucmVzb2x2ZShmYWxzZSk7XG5cdH1cblxuXHQvKipcblx0ICogQWxsb3dzIG5hdmlnYXRpb24gdG8gYSBzcGVjaWZpYyBjb250ZXh0LlxuXHQgKiBAcGFyYW0gb0NvbnRleHQgT2JqZWN0IGNvbnRhaW5pbmcgdGhlIGNvbnRleHQgdG8gYmUgbmF2aWdhdGVkIHRvXG5cdCAqIEBwYXJhbSBwYXJhbWV0ZXJzIE9iamVjdCBjb250YWluaW5nIHRoZSBwYXJhbWV0ZXJzIGZvciB0aGUgbmF2aWdhdGlvblxuXHQgKiBAcGFyYW0gcGFyYW1ldGVycy5wcmVzZXJ2ZUhpc3RvcnkgIEJ5IGRlZmF1bHQsIHRoZSBpbnRlcm5hbCBhbGdvcml0aG0gZGVjaWRlcyB3aGV0aGVyIHRoZSBuYXZpZ2F0aW9uIHByZXNlcnZlcyB0aGUgcHJldmlvdXMgZW50cnkuIFRoaXMgcGFyYW1ldGVyIGFsbG93cyB5b3UgdG8gb3ZlcnJpZGUgdGhpcyBiZWhhdmlvci5cblx0ICogQHB1YmxpY1xuXHQgKiBAc2luY2UgMS45MC4wXG5cdCAqL1xuXHRAcHVibGljRXh0ZW5zaW9uKClcblx0QGZpbmFsRXh0ZW5zaW9uKClcblx0bmF2aWdhdGUob0NvbnRleHQ6IENvbnRleHQsIHBhcmFtZXRlcnM/OiB7IHByZXNlcnZlSGlzdG9yeTogYm9vbGVhbiB9KTogdm9pZCB7XG5cdFx0Y29uc3QgaW50ZXJuYWxNb2RlbCA9IHRoaXMuYmFzZS5nZXRNb2RlbChcImludGVybmFsXCIpIGFzIEpTT05Nb2RlbDtcblx0XHQvLyBXZSBoYXZlIHRvIGRlbGV0ZSB0aGUgaW50ZXJuYWwgbW9kZWwgdmFsdWUgZm9yIFwicGFnaW5hdG9yQ3VycmVudENvbnRleHRcIiB0byBlbnN1cmUgaXQgaXMgcmUtZXZhbHVhdGVkIGJ5IHRoZSBuYXZpZ2F0ZVRvQ29udGV4dCBmdW5jdGlvblxuXHRcdC8vIEJDUDogMjI3MDEyMzgyMFxuXHRcdGludGVybmFsTW9kZWwuc2V0UHJvcGVydHkoXCIvcGFnaW5hdG9yQ3VycmVudENvbnRleHRcIiwgbnVsbCk7XG5cdFx0dGhpcy5iYXNlLl9yb3V0aW5nLm5hdmlnYXRlVG9Db250ZXh0KG9Db250ZXh0LCBwYXJhbWV0ZXJzKTtcblx0fVxuXG5cdC8qKlxuXHQgKiBUaGlzIGZ1bmN0aW9uIGlzIHVzZWQgdG8gaW50ZXJjZXB0IHRoZSByb3V0aW5nIGV2ZW50IGJlZm9yZSBiaW5kaW5nIGEgcGFnZS5cblx0ICpcblx0ICogSWYgaXQgaXMgZGVjbGFyZWQgYXMgYW4gZXh0ZW5zaW9uLCBpdCBhbGxvd3MgeW91IHRvIGludGVyY2VwdCBhbmQgY2hhbmdlIHRoZSBub3JtYWwgZmxvdyBvZiBiaW5kaW5nLlxuXHQgKlxuXHQgKiBUaGlzIGZ1bmN0aW9uIGlzIG5vdCBjYWxsZWQgZGlyZWN0bHksIGJ1dCBvdmVycmlkZGVuIHNlcGFyYXRlbHkgYnkgY29uc3VtaW5nIGNvbnRyb2xsZXJzLlxuXHQgKiBUaGUgb3ZlcnJpZGUgZXhlY3V0aW9uIGlzOiB7QGxpbmsgc2FwLnVpLmNvcmUubXZjLk92ZXJyaWRlRXhlY3V0aW9uLkFmdGVyfS5cblx0ICogQHBhcmFtIG9Db250ZXh0IE9iamVjdCBjb250YWluaW5nIHRoZSBjb250ZXh0IGZvciB0aGUgbmF2aWdhdGlvblxuXHQgKiBAcHVibGljXG5cdCAqIEBzaW5jZSAxLjkwLjBcblx0ICovXG5cdEBwdWJsaWNFeHRlbnNpb24oKVxuXHRAZXh0ZW5zaWJsZShPdmVycmlkZUV4ZWN1dGlvbi5BZnRlcilcblx0Ly8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIEB0eXBlc2NyaXB0LWVzbGludC9uby11bnVzZWQtdmFyc1xuXHRvbkJlZm9yZUJpbmRpbmcob0NvbnRleHQ6IG9iamVjdCB8IG51bGwpOiB2b2lkIHtcblx0XHQvLyB0byBiZSBvdmVycmlkZW4gYnkgdGhlIGFwcGxpY2F0aW9uXG5cdH1cblxuXHQvKipcblx0ICogVGhpcyBmdW5jdGlvbiBpcyB1c2VkIHRvIGludGVyY2VwdCB0aGUgcm91dGluZyBldmVudCBhZnRlciBiaW5kaW5nIGEgcGFnZS5cblx0ICpcblx0ICogSWYgaXQgaXMgZGVjbGFyZWQgYXMgYW4gZXh0ZW5zaW9uLCBpdCBhbGxvd3MgeW91IHRvIGludGVyY2VwdCBhbmQgY2hhbmdlIHRoZSBub3JtYWwgZmxvdyBvZiBiaW5kaW5nLlxuXHQgKlxuXHQgKiBUaGlzIGZ1bmN0aW9uIGlzIG5vdCBjYWxsZWQgZGlyZWN0bHksIGJ1dCBvdmVycmlkZGVuIHNlcGFyYXRlbHkgYnkgY29uc3VtaW5nIGNvbnRyb2xsZXJzLlxuXHQgKiBUaGUgb3ZlcnJpZGUgZXhlY3V0aW9uIGlzOiB7QGxpbmsgc2FwLnVpLmNvcmUubXZjLk92ZXJyaWRlRXhlY3V0aW9uLkFmdGVyfS5cblx0ICogQHBhcmFtIG9Db250ZXh0IE9iamVjdCBjb250YWluaW5nIHRoZSBjb250ZXh0IHRvIGJlIG5hdmlnYXRlZFxuXHQgKiBAcHVibGljXG5cdCAqIEBzaW5jZSAxLjkwLjBcblx0ICovXG5cdEBwdWJsaWNFeHRlbnNpb24oKVxuXHRAZXh0ZW5zaWJsZShPdmVycmlkZUV4ZWN1dGlvbi5BZnRlcilcblx0Ly8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIEB0eXBlc2NyaXB0LWVzbGludC9uby11bnVzZWQtdmFyc1xuXHRvbkFmdGVyQmluZGluZyhvQ29udGV4dDogb2JqZWN0IHwgbnVsbCk6IHZvaWQge1xuXHRcdC8vIHRvIGJlIG92ZXJyaWRlbiBieSB0aGUgYXBwbGljYXRpb25cblx0fVxuXG5cdC8qKlxuXHQgKiBOYXZpZ2F0ZSB0byBhbm90aGVyIHRhcmdldC5cblx0ICogQHBhcmFtIHNUYXJnZXRSb3V0ZU5hbWUgTmFtZSBvZiB0aGUgdGFyZ2V0IHJvdXRlXG5cdCAqIEBwYXJhbSBvUGFyYW1ldGVycyBQYXJhbWV0ZXJzIHRvIGJlIHVzZWQgd2l0aCByb3V0ZSB0byBjcmVhdGUgdGhlIHRhcmdldCBoYXNoXG5cdCAqIEBwYXJhbSBvUGFyYW1ldGVycy5iSXNTdGlja3lNb2RlIFBSSVZBVEVcblx0ICogQHJldHVybnMgUHJvbWlzZSB0aGF0IGlzIHJlc29sdmVkIHdoZW4gdGhlIG5hdmlnYXRpb24gaXMgZmluYWxpemVkXG5cdCAqIEBwdWJsaWNcblx0ICovXG5cdEBwdWJsaWNFeHRlbnNpb24oKVxuXHRAZmluYWxFeHRlbnNpb24oKVxuXHRhc3luYyBuYXZpZ2F0ZVRvUm91dGUoc1RhcmdldFJvdXRlTmFtZTogc3RyaW5nLCBvUGFyYW1ldGVycz86IHsgYklzU3RpY2t5TW9kZT86IGJvb2xlYW4gfSk6IFByb21pc2U8Ym9vbGVhbj4ge1xuXHRcdGNvbnN0IG9NZXRhTW9kZWwgPSB0aGlzLmJhc2UuZ2V0TW9kZWwoKS5nZXRNZXRhTW9kZWwoKTtcblx0XHRjb25zdCBiSXNTdGlja3lNb2RlID0gTW9kZWxIZWxwZXIuaXNTdGlja3lTZXNzaW9uU3VwcG9ydGVkKG9NZXRhTW9kZWwpO1xuXHRcdGlmICghb1BhcmFtZXRlcnMpIHtcblx0XHRcdG9QYXJhbWV0ZXJzID0ge307XG5cdFx0fVxuXHRcdG9QYXJhbWV0ZXJzLmJJc1N0aWNreU1vZGUgPSBiSXNTdGlja3lNb2RlO1xuXHRcdHJldHVybiB0aGlzLmJhc2UuX3JvdXRpbmcubmF2aWdhdGVUb1JvdXRlKHNUYXJnZXRSb3V0ZU5hbWUsIG9QYXJhbWV0ZXJzKTtcblx0fVxufVxuXG5leHBvcnQgZGVmYXVsdCBSb3V0aW5nO1xuIl0sIm1hcHBpbmdzIjoiOzs7Ozs7Ozs7Ozs7Ozs7RUFRQTtBQUNBO0FBQ0E7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
120
+ //# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJuYW1lcyI6WyJSb3V0aW5nIiwiX2RlYyIsImRlZmluZVVJNUNsYXNzIiwiX2RlYzIiLCJwdWJsaWNFeHRlbnNpb24iLCJfZGVjMyIsImV4dGVuc2libGUiLCJfZGVjNCIsIl9kZWM1IiwiZmluYWxFeHRlbnNpb24iLCJfZGVjNiIsIl9kZWM3IiwiT3ZlcnJpZGVFeGVjdXRpb24iLCJBZnRlciIsIl9kZWM4IiwiX2RlYzkiLCJfZGVjMTAiLCJfZGVjMTEiLCJfY2xhc3MiLCJfY2xhc3MyIiwiX0NvbnRyb2xsZXJFeHRlbnNpb24iLCJhcHBseSIsImFyZ3VtZW50cyIsIl9pbmhlcml0c0xvb3NlIiwiX3Byb3RvIiwicHJvdG90eXBlIiwib25CZWZvcmVOYXZpZ2F0aW9uIiwibU5hdmlnYXRpb25QYXJhbWV0ZXJzIiwiUHJvbWlzZSIsInJlc29sdmUiLCJuYXZpZ2F0ZSIsIm9Db250ZXh0IiwicGFyYW1ldGVycyIsImludGVybmFsTW9kZWwiLCJiYXNlIiwiZ2V0TW9kZWwiLCJzZXRQcm9wZXJ0eSIsIl9yb3V0aW5nIiwibmF2aWdhdGVUb0NvbnRleHQiLCJvbkJlZm9yZUJpbmRpbmciLCJvbkFmdGVyQmluZGluZyIsIm5hdmlnYXRlVG9Sb3V0ZSIsInNUYXJnZXRSb3V0ZU5hbWUiLCJvUGFyYW1ldGVycyIsIm9NZXRhTW9kZWwiLCJnZXRNZXRhTW9kZWwiLCJiSXNTdGlja3lNb2RlIiwiTW9kZWxIZWxwZXIiLCJpc1N0aWNreVNlc3Npb25TdXBwb3J0ZWQiLCJDb250cm9sbGVyRXh0ZW5zaW9uIiwiX2FwcGx5RGVjb3JhdGVkRGVzY3JpcHRvciIsIk9iamVjdCIsImdldE93blByb3BlcnR5RGVzY3JpcHRvciJdLCJzb3VyY2VSb290IjoiLiIsInNvdXJjZXMiOlsiUm91dGluZy50cyJdLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBkZWZpbmVVSTVDbGFzcywgZXh0ZW5zaWJsZSwgZmluYWxFeHRlbnNpb24sIHB1YmxpY0V4dGVuc2lvbiB9IGZyb20gXCJzYXAvZmUvYmFzZS9DbGFzc1N1cHBvcnRcIjtcbmltcG9ydCB0eXBlIFBhZ2VDb250cm9sbGVyIGZyb20gXCJzYXAvZmUvY29yZS9QYWdlQ29udHJvbGxlclwiO1xuaW1wb3J0IE1vZGVsSGVscGVyIGZyb20gXCJzYXAvZmUvY29yZS9oZWxwZXJzL01vZGVsSGVscGVyXCI7XG5pbXBvcnQgQ29udHJvbGxlckV4dGVuc2lvbiBmcm9tIFwic2FwL3VpL2NvcmUvbXZjL0NvbnRyb2xsZXJFeHRlbnNpb25cIjtcbmltcG9ydCBPdmVycmlkZUV4ZWN1dGlvbiBmcm9tIFwic2FwL3VpL2NvcmUvbXZjL092ZXJyaWRlRXhlY3V0aW9uXCI7XG5pbXBvcnQgdHlwZSBKU09OTW9kZWwgZnJvbSBcInNhcC91aS9tb2RlbC9qc29uL0pTT05Nb2RlbFwiO1xuaW1wb3J0IHR5cGUgQ29udGV4dCBmcm9tIFwic2FwL3VpL21vZGVsL29kYXRhL3Y0L0NvbnRleHRcIjtcblxuLyoqXG4gKiBBIGNvbnRyb2xsZXIgZXh0ZW5zaW9uIG9mZmVyaW5nIGhvb2tzIGludG8gdGhlIHJvdXRpbmcgZmxvdyBvZiB0aGUgYXBwbGljYXRpb25cbiAqIEBoaWRlY29uc3RydWN0b3JcbiAqIEBwdWJsaWNcbiAqIEBzaW5jZSAxLjg2LjBcbiAqL1xuQGRlZmluZVVJNUNsYXNzKFwic2FwLmZlLmNvcmUuY29udHJvbGxlcmV4dGVuc2lvbnMuUm91dGluZ1wiKVxuY2xhc3MgUm91dGluZyBleHRlbmRzIENvbnRyb2xsZXJFeHRlbnNpb24ge1xuXHRwcml2YXRlIGJhc2UhOiBQYWdlQ29udHJvbGxlcjtcblxuXHQvKipcblx0ICogVGhpcyBmdW5jdGlvbiBjYW4gYmUgdXNlZCB0byBpbnRlcmNlcHQgdGhlIHJvdXRpbmcgZXZlbnQgaGFwcGVuaW5nIGR1cmluZyB0aGUgbm9ybWFsIHByb2Nlc3Mgb2YgbmF2aWdhdGluZyBmcm9tIG9uZSBwYWdlIHRvIGFub3RoZXIgKGxpa2UgY2xpY2tpbmcgb24gdGhlIHRhYmxlIHJvdyB0byBuYXZpZ2F0ZSwgb3Igd2hlbiBwYWdpbmF0aW9uIGJ1dHRvbnMgYXJlIGNsaWNrZWQpLlxuXHQgKlxuXHQgKiBUaGUgZnVuY3Rpb24gaXMgTk9UIGNhbGxlZCBkdXJpbmcgb3RoZXIgbWVhbnMgb2YgZXh0ZXJuYWwgb3V0Ym91bmQgbmF2aWdhdGlvbiAobGlrZSBhIG5hdmlnYXRpb24gY29uZmlndXJlZCB2aWEgYSBsaW5rLCBvciBieSB1c2luZyBuYXZpZ2F0aW9uIGJ1dHRvbnMpLlxuXHQgKlxuXHQgKiBJZiBkZWNsYXJlZCBhcyBhbiBleHRlbnNpb24sIGl0IGFsbG93cyB5b3UgdG8gaW50ZXJjZXB0IGFuZCBjaGFuZ2UgdGhlIG5vcm1hbCBuYXZpZ2F0aW9uIGZsb3cuXG5cdCAqIElmIHlvdSBkZWNpZGUgdG8gZG8geW91ciBvd24gbmF2aWdhdGlvbiBwcm9jZXNzaW5nLCB5b3UgY2FuIHJldHVybiBgdHJ1ZWAgdG8gcHJldmVudCB0aGUgZGVmYXVsdCByb3V0aW5nIGJlaGF2aW9yLlxuXHQgKlxuXHQgKiBUaGlzIGZ1bmN0aW9uIGlzIG1lYW50IHRvIGJlIGluZGl2aWR1YWxseSBvdmVycmlkZGVuIGJ5IGNvbnN1bWluZyBjb250cm9sbGVycywgYnV0IG5vdCB0byBiZSBjYWxsZWQgZGlyZWN0bHkuXG5cdCAqIFRoZSBvdmVycmlkZSBleGVjdXRpb24gaXM6IHtAbGluayBzYXAudWkuY29yZS5tdmMuT3ZlcnJpZGVFeGVjdXRpb24uQWZ0ZXJ9LlxuXHQgKiBAcGFyYW0gbU5hdmlnYXRpb25QYXJhbWV0ZXJzIE9iamVjdCBjb250YWluaW5nIHJvdyBjb250ZXh0IGFuZCBwYWdlIGNvbnRleHRcblx0ICogQHBhcmFtIG1OYXZpZ2F0aW9uUGFyYW1ldGVycy5iaW5kaW5nQ29udGV4dCBUaGUgY3VycmVudGx5IHNlbGVjdGVkIGNvbnRleHRcblx0ICogQHJldHVybnMgYHRydWVgIHRvIHByZXZlbnQgdGhlIGRlZmF1bHQgZXhlY3V0aW9uLCBmYWxzZSB0byBrZWVwIHRoZSBzdGFuZGFyZCBiZWhhdmlvclxuXHQgKiBAcHVibGljXG5cdCAqIEBzaW5jZSAxLjg2LjBcblx0ICovXG5cdEBwdWJsaWNFeHRlbnNpb24oKVxuXHRAZXh0ZW5zaWJsZShcIkFmdGVyQXN5bmNcIilcblx0Ly8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIEB0eXBlc2NyaXB0LWVzbGludC9uby11bnVzZWQtdmFyc1xuXHRhc3luYyBvbkJlZm9yZU5hdmlnYXRpb24obU5hdmlnYXRpb25QYXJhbWV0ZXJzOiB7IGJpbmRpbmdDb250ZXh0OiBDb250ZXh0IH0pOiBQcm9taXNlPGJvb2xlYW4+IHtcblx0XHQvLyB0byBiZSBvdmVycmlkZW4gYnkgdGhlIGFwcGxpY2F0aW9uXG5cdFx0cmV0dXJuIFByb21pc2UucmVzb2x2ZShmYWxzZSk7XG5cdH1cblxuXHQvKipcblx0ICogQWxsb3dzIG5hdmlnYXRpb24gdG8gYSBzcGVjaWZpYyBjb250ZXh0LlxuXHQgKiBAcGFyYW0gb0NvbnRleHQgT2JqZWN0IGNvbnRhaW5pbmcgdGhlIGNvbnRleHQgdG8gYmUgbmF2aWdhdGVkIHRvXG5cdCAqIEBwYXJhbSBwYXJhbWV0ZXJzIE9iamVjdCBjb250YWluaW5nIHRoZSBwYXJhbWV0ZXJzIGZvciB0aGUgbmF2aWdhdGlvblxuXHQgKiBAcGFyYW0gcGFyYW1ldGVycy5wcmVzZXJ2ZUhpc3RvcnkgIEJ5IGRlZmF1bHQsIHRoZSBpbnRlcm5hbCBhbGdvcml0aG0gZGVjaWRlcyB3aGV0aGVyIHRoZSBuYXZpZ2F0aW9uIHByZXNlcnZlcyB0aGUgcHJldmlvdXMgZW50cnkuIFRoaXMgcGFyYW1ldGVyIGFsbG93cyB5b3UgdG8gb3ZlcnJpZGUgdGhpcyBiZWhhdmlvci5cblx0ICogQHB1YmxpY1xuXHQgKiBAc2luY2UgMS45MC4wXG5cdCAqL1xuXHRAcHVibGljRXh0ZW5zaW9uKClcblx0QGZpbmFsRXh0ZW5zaW9uKClcblx0bmF2aWdhdGUob0NvbnRleHQ6IENvbnRleHQsIHBhcmFtZXRlcnM/OiB7IHByZXNlcnZlSGlzdG9yeTogYm9vbGVhbiB9KTogdm9pZCB7XG5cdFx0Y29uc3QgaW50ZXJuYWxNb2RlbCA9IHRoaXMuYmFzZS5nZXRNb2RlbChcImludGVybmFsXCIpIGFzIEpTT05Nb2RlbDtcblx0XHQvLyBXZSBoYXZlIHRvIGRlbGV0ZSB0aGUgaW50ZXJuYWwgbW9kZWwgdmFsdWUgZm9yIFwicGFnaW5hdG9yQ3VycmVudENvbnRleHRcIiB0byBlbnN1cmUgaXQgaXMgcmUtZXZhbHVhdGVkIGJ5IHRoZSBuYXZpZ2F0ZVRvQ29udGV4dCBmdW5jdGlvblxuXHRcdC8vIEJDUDogMjI3MDEyMzgyMFxuXHRcdGludGVybmFsTW9kZWwuc2V0UHJvcGVydHkoXCIvcGFnaW5hdG9yQ3VycmVudENvbnRleHRcIiwgbnVsbCk7XG5cdFx0dGhpcy5iYXNlLl9yb3V0aW5nLm5hdmlnYXRlVG9Db250ZXh0KG9Db250ZXh0LCBwYXJhbWV0ZXJzKTtcblx0fVxuXG5cdC8qKlxuXHQgKiBUaGlzIGZ1bmN0aW9uIGlzIHVzZWQgdG8gaW50ZXJjZXB0IHRoZSByb3V0aW5nIGV2ZW50IGJlZm9yZSBiaW5kaW5nIGEgcGFnZS5cblx0ICpcblx0ICogSWYgaXQgaXMgZGVjbGFyZWQgYXMgYW4gZXh0ZW5zaW9uLCBpdCBhbGxvd3MgeW91IHRvIGludGVyY2VwdCBhbmQgY2hhbmdlIHRoZSBub3JtYWwgZmxvdyBvZiBiaW5kaW5nLlxuXHQgKlxuXHQgKiBUaGlzIGZ1bmN0aW9uIGlzIG5vdCBjYWxsZWQgZGlyZWN0bHksIGJ1dCBvdmVycmlkZGVuIHNlcGFyYXRlbHkgYnkgY29uc3VtaW5nIGNvbnRyb2xsZXJzLlxuXHQgKiBUaGUgb3ZlcnJpZGUgZXhlY3V0aW9uIGlzOiB7QGxpbmsgc2FwLnVpLmNvcmUubXZjLk92ZXJyaWRlRXhlY3V0aW9uLkFmdGVyfS5cblx0ICogQHBhcmFtIG9Db250ZXh0IE9iamVjdCBjb250YWluaW5nIHRoZSBjb250ZXh0IGZvciB0aGUgbmF2aWdhdGlvblxuXHQgKiBAcHVibGljXG5cdCAqIEBzaW5jZSAxLjkwLjBcblx0ICovXG5cdEBwdWJsaWNFeHRlbnNpb24oKVxuXHRAZXh0ZW5zaWJsZShPdmVycmlkZUV4ZWN1dGlvbi5BZnRlcilcblx0Ly8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIEB0eXBlc2NyaXB0LWVzbGludC9uby11bnVzZWQtdmFyc1xuXHRvbkJlZm9yZUJpbmRpbmcob0NvbnRleHQ6IG9iamVjdCB8IG51bGwpOiB2b2lkIHtcblx0XHQvLyB0byBiZSBvdmVycmlkZW4gYnkgdGhlIGFwcGxpY2F0aW9uXG5cdH1cblxuXHQvKipcblx0ICogVGhpcyBmdW5jdGlvbiBpcyB1c2VkIHRvIGludGVyY2VwdCB0aGUgcm91dGluZyBldmVudCBhZnRlciBiaW5kaW5nIGEgcGFnZS5cblx0ICpcblx0ICogSWYgaXQgaXMgZGVjbGFyZWQgYXMgYW4gZXh0ZW5zaW9uLCBpdCBhbGxvd3MgeW91IHRvIGludGVyY2VwdCBhbmQgY2hhbmdlIHRoZSBub3JtYWwgZmxvdyBvZiBiaW5kaW5nLlxuXHQgKlxuXHQgKiBUaGlzIGZ1bmN0aW9uIGlzIG5vdCBjYWxsZWQgZGlyZWN0bHksIGJ1dCBvdmVycmlkZGVuIHNlcGFyYXRlbHkgYnkgY29uc3VtaW5nIGNvbnRyb2xsZXJzLlxuXHQgKiBUaGUgb3ZlcnJpZGUgZXhlY3V0aW9uIGlzOiB7QGxpbmsgc2FwLnVpLmNvcmUubXZjLk92ZXJyaWRlRXhlY3V0aW9uLkFmdGVyfS5cblx0ICogQHBhcmFtIG9Db250ZXh0IE9iamVjdCBjb250YWluaW5nIHRoZSBjb250ZXh0IHRvIGJlIG5hdmlnYXRlZFxuXHQgKiBAcHVibGljXG5cdCAqIEBzaW5jZSAxLjkwLjBcblx0ICovXG5cdEBwdWJsaWNFeHRlbnNpb24oKVxuXHRAZXh0ZW5zaWJsZShPdmVycmlkZUV4ZWN1dGlvbi5BZnRlcilcblx0Ly8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIEB0eXBlc2NyaXB0LWVzbGludC9uby11bnVzZWQtdmFyc1xuXHRvbkFmdGVyQmluZGluZyhvQ29udGV4dDogb2JqZWN0IHwgbnVsbCk6IHZvaWQge1xuXHRcdC8vIHRvIGJlIG92ZXJyaWRlbiBieSB0aGUgYXBwbGljYXRpb25cblx0fVxuXG5cdC8qKlxuXHQgKiBOYXZpZ2F0ZSB0byBhbm90aGVyIHRhcmdldC5cblx0ICogQHBhcmFtIHNUYXJnZXRSb3V0ZU5hbWUgTmFtZSBvZiB0aGUgdGFyZ2V0IHJvdXRlXG5cdCAqIEBwYXJhbSBvUGFyYW1ldGVycyBQYXJhbWV0ZXJzIHRvIGJlIHVzZWQgd2l0aCByb3V0ZSB0byBjcmVhdGUgdGhlIHRhcmdldCBoYXNoXG5cdCAqIEBwYXJhbSBvUGFyYW1ldGVycy5iSXNTdGlja3lNb2RlIFBSSVZBVEVcblx0ICogQHJldHVybnMgUHJvbWlzZSB0aGF0IGlzIHJlc29sdmVkIHdoZW4gdGhlIG5hdmlnYXRpb24gaXMgZmluYWxpemVkXG5cdCAqIEBwdWJsaWNcblx0ICovXG5cdEBwdWJsaWNFeHRlbnNpb24oKVxuXHRAZmluYWxFeHRlbnNpb24oKVxuXHRhc3luYyBuYXZpZ2F0ZVRvUm91dGUoc1RhcmdldFJvdXRlTmFtZTogc3RyaW5nLCBvUGFyYW1ldGVycz86IHsgYklzU3RpY2t5TW9kZT86IGJvb2xlYW4gfSk6IFByb21pc2U8Ym9vbGVhbj4ge1xuXHRcdGNvbnN0IG9NZXRhTW9kZWwgPSB0aGlzLmJhc2UuZ2V0TW9kZWwoKS5nZXRNZXRhTW9kZWwoKTtcblx0XHRjb25zdCBiSXNTdGlja3lNb2RlID0gTW9kZWxIZWxwZXIuaXNTdGlja3lTZXNzaW9uU3VwcG9ydGVkKG9NZXRhTW9kZWwpO1xuXHRcdGlmICghb1BhcmFtZXRlcnMpIHtcblx0XHRcdG9QYXJhbWV0ZXJzID0ge307XG5cdFx0fVxuXHRcdG9QYXJhbWV0ZXJzLmJJc1N0aWNreU1vZGUgPSBiSXNTdGlja3lNb2RlO1xuXHRcdHJldHVybiB0aGlzLmJhc2UuX3JvdXRpbmcubmF2aWdhdGVUb1JvdXRlKHNUYXJnZXRSb3V0ZU5hbWUsIG9QYXJhbWV0ZXJzKTtcblx0fVxufVxuXG5leHBvcnQgZGVmYXVsdCBSb3V0aW5nO1xuIl0sIm1hcHBpbmdzIjoiOzs7Ozs7Ozs7Ozs7Ozs7RUFRQTtBQUNBO0FBQ0E7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