@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
@@ -95,10 +95,14 @@ sap.ui.define(["sap/base/Log", "sap/base/util/merge", "sap/fe/base/ClassSupport"
95
95
  };
96
96
  },
97
97
  apply: function (multipleModeControl, controlState) {
98
- if (controlState !== null && controlState !== void 0 && controlState.selectedKey) {
98
+ if (controlState?.selectedKey) {
99
99
  const tabBar = multipleModeControl.content;
100
- if (tabBar.getItems().find(item => item.getKey() === controlState.selectedKey)) {
100
+ const selectedItem = tabBar.getItems().find(item => item.getKey() === controlState.selectedKey);
101
+ if (selectedItem) {
101
102
  tabBar.setSelectedKey(controlState.selectedKey);
103
+ if (multipleModeControl.getModel("_pageModel")?.getProperty("/hideFilterBar") === true) {
104
+ multipleModeControl.refreshSelectedInnerControlContent();
105
+ }
102
106
  }
103
107
  }
104
108
  }
@@ -109,7 +113,7 @@ sap.ui.define(["sap/base/Log", "sap/base/util/merge", "sap/fe/base/ClassSupport"
109
113
  if (oTableBinding) {
110
114
  const oRootBinding = oTableBinding.getRootBinding();
111
115
  const aggregation = oTableBinding.getAggregation();
112
- if (oRootBinding === oTableBinding && (aggregation === null || aggregation === void 0 ? void 0 : aggregation.hierarchyQualifier) === undefined) {
116
+ if (oRootBinding === oTableBinding && aggregation?.hierarchyQualifier === undefined) {
113
117
  // absolute binding (except TreeTable, where we want to keep expansion states)
114
118
  oTableBinding.refresh();
115
119
  } else {
@@ -134,10 +138,9 @@ sap.ui.define(["sap/base/Log", "sap/base/util/merge", "sap/fe/base/ClassSupport"
134
138
  };
135
139
  },
136
140
  apply: function (oSegmentedButton, oControlState) {
137
- if (oControlState !== null && oControlState !== void 0 && oControlState.selectedKey && oControlState.selectedKey !== oSegmentedButton.getSelectedKey()) {
138
- var _oSegmentedButton$get;
141
+ if (oControlState?.selectedKey && oControlState.selectedKey !== oSegmentedButton.getSelectedKey()) {
139
142
  oSegmentedButton.setSelectedKey(oControlState.selectedKey);
140
- if ((_oSegmentedButton$get = oSegmentedButton.getParent()) !== null && _oSegmentedButton$get !== void 0 && _oSegmentedButton$get.isA("sap.ui.mdc.ActionToolbar")) {
143
+ if (oSegmentedButton.getParent()?.isA("sap.ui.mdc.ActionToolbar")) {
141
144
  oSegmentedButton.fireEvent("selectionChange");
142
145
  }
143
146
  }
@@ -150,10 +153,9 @@ sap.ui.define(["sap/base/Log", "sap/base/util/merge", "sap/fe/base/ClassSupport"
150
153
  };
151
154
  },
152
155
  apply: function (oSelect, oControlState) {
153
- if (oControlState !== null && oControlState !== void 0 && oControlState.selectedKey && oControlState.selectedKey !== oSelect.getSelectedKey()) {
154
- var _oSelect$getParent;
156
+ if (oControlState?.selectedKey && oControlState.selectedKey !== oSelect.getSelectedKey()) {
155
157
  oSelect.setSelectedKey(oControlState.selectedKey);
156
- if ((_oSelect$getParent = oSelect.getParent()) !== null && _oSelect$getParent !== void 0 && _oSelect$getParent.isA("sap.ui.mdc.ActionToolbar")) {
158
+ if (oSelect.getParent()?.isA("sap.ui.mdc.ActionToolbar")) {
157
159
  oSelect.fireEvent("change");
158
160
  }
159
161
  }
@@ -217,7 +219,6 @@ sap.ui.define(["sap/base/Log", "sap/base/util/merge", "sap/fe/base/ClassSupport"
217
219
  * @since 1.85.0
218
220
  */
219
221
  let ViewState = (_dec = defineUI5Class("sap.fe.core.controllerextensions.ViewState"), _dec2 = publicExtension(), _dec3 = finalExtension(), _dec4 = publicExtension(), _dec5 = extensible(OverrideExecution.After), _dec6 = privateExtension(), _dec7 = finalExtension(), _dec8 = privateExtension(), _dec9 = finalExtension(), _dec10 = publicExtension(), _dec11 = extensible(OverrideExecution.After), _dec12 = publicExtension(), _dec13 = extensible(OverrideExecution.After), _dec14 = publicExtension(), _dec15 = extensible(OverrideExecution.After), _dec16 = privateExtension(), _dec17 = finalExtension(), _dec18 = publicExtension(), _dec19 = extensible(OverrideExecution.After), _dec20 = privateExtension(), _dec21 = finalExtension(), _dec22 = publicExtension(), _dec23 = extensible(OverrideExecution.After), _dec24 = publicExtension(), _dec25 = finalExtension(), _dec26 = publicExtension(), _dec27 = finalExtension(), _dec28 = publicExtension(), _dec29 = extensible(OverrideExecution.After), _dec30 = privateExtension(), _dec31 = finalExtension(), _dec32 = publicExtension(), _dec33 = extensible(OverrideExecution.Instead), _dec34 = publicExtension(), _dec35 = finalExtension(), _dec36 = privateExtension(), _dec37 = publicExtension(), _dec38 = extensible(OverrideExecution.After), _dec39 = publicExtension(), _dec40 = extensible(OverrideExecution.After), _dec41 = publicExtension(), _dec42 = extensible(OverrideExecution.After), _dec43 = privateExtension(), _dec44 = publicExtension(), _dec45 = extensible(OverrideExecution.After), _dec46 = privateExtension(), _dec47 = finalExtension(), _dec48 = publicExtension(), _dec(_class = (_class2 = /*#__PURE__*/function (_ControllerExtension) {
220
- _inheritsLoose(ViewState, _ControllerExtension);
221
222
  /**
222
223
  * Constructor.
223
224
  */
@@ -229,13 +230,14 @@ sap.ui.define(["sap/base/Log", "sap/base/util/merge", "sap/fe/base/ClassSupport"
229
230
  _this.invalidateInitialStateForApply = [];
230
231
  _this.viewStateControls = [];
231
232
  _this.stateContributors = [];
233
+ //method to store the initial states for delta computation of mdc controls
232
234
  _this._setInitialStatesForDeltaCompute = async variantManagement => {
233
235
  try {
234
236
  const adaptControls = _this.viewStateControls;
235
237
  const externalStatePromises = [];
236
238
  const controlStateKey = [];
237
239
  let initialControlStates = [];
238
- const variantControls = (variantManagement === null || variantManagement === void 0 ? void 0 : variantManagement.getFor()) ?? [];
240
+ const variantControls = variantManagement?.getFor() ?? [];
239
241
  _this.updateInitialState(variantControls);
240
242
  await Promise.all(adaptControls.filter(function (control) {
241
243
  return control && (!variantManagement || variantControls.includes(control.getId())) && (control.isA("sap.ui.mdc.Table") || control.isA("sap.ui.mdc.FilterBar") || control.isA("sap.ui.mdc.Chart"));
@@ -261,6 +263,7 @@ sap.ui.define(["sap/base/Log", "sap/base/util/merge", "sap/fe/base/ClassSupport"
261
263
  });
262
264
  return _this;
263
265
  }
266
+ _inheritsLoose(ViewState, _ControllerExtension);
264
267
  var _proto = ViewState.prototype;
265
268
  _proto.refreshViewBindings = async function refreshViewBindings() {
266
269
  const aControls = await this.collectResults(this.base.viewState.adaptBindingRefreshControls);
@@ -403,7 +406,7 @@ sap.ui.define(["sap/base/Log", "sap/base/util/merge", "sap/fe/base/ClassSupport"
403
406
  // eslint-disable-next-line @typescript-eslint/require-await
404
407
  retrieve: async _control => oControl.retrieveState.bind(oControl)(),
405
408
  apply: async (_control, controlState, oNavParameters, skipMerge) => {
406
- const shouldApplyDiffState = !this.invalidateInitialStateForApply.includes(oControl.getId()) && !this.controlsVariantIdUnavailable.includes(oControl.getId()) && (oNavParameters === null || oNavParameters === void 0 ? void 0 : oNavParameters.navigationType) !== NavType.hybrid && skipMerge !== true;
409
+ const shouldApplyDiffState = !this.invalidateInitialStateForApply.includes(oControl.getId()) && !this.controlsVariantIdUnavailable.includes(oControl.getId()) && oNavParameters?.navigationType !== NavType.hybrid && skipMerge !== true;
407
410
  if (!controlState) {
408
411
  if (oControl.applyLegacyState) {
409
412
  await oControl.applyLegacyState.bind(oControl)(this.getControlState.bind(this), oNavParameters, shouldApplyDiffState, skipMerge);
@@ -785,12 +788,11 @@ sap.ui.define(["sap/base/Log", "sap/base/util/merge", "sap/fe/base/ClassSupport"
785
788
  }
786
789
  this.stateContributors.push(stateContributor);
787
790
  if (this._currentViewState) {
788
- var _this$configOfStateAp, _this$configOfStateAp2, _this$configOfStateAp3, _this$configOfStateAp4, _this$configOfStateAp5;
789
791
  const controlKey = this.getStateKey(stateContributor);
790
792
  const controlState = this._currentViewState[controlKey];
791
- const navigationType = (_this$configOfStateAp = this.configOfStateApply) === null || _this$configOfStateAp === void 0 ? void 0 : (_this$configOfStateAp2 = _this$configOfStateAp.navTypeParameters) === null || _this$configOfStateAp2 === void 0 ? void 0 : _this$configOfStateAp2.navigationType;
792
- const skipMerge = (_this$configOfStateAp3 = this.configOfStateApply) === null || _this$configOfStateAp3 === void 0 ? void 0 : _this$configOfStateAp3.skipMerge;
793
- if (controlState && controlState === ((_this$configOfStateAp4 = this.configOfStateApply) === null || _this$configOfStateAp4 === void 0 ? void 0 : (_this$configOfStateAp5 = _this$configOfStateAp4.state) === null || _this$configOfStateAp5 === void 0 ? void 0 : _this$configOfStateAp5[controlKey])) {
793
+ const navigationType = this.configOfStateApply?.navTypeParameters?.navigationType;
794
+ const skipMerge = this.configOfStateApply?.skipMerge;
795
+ if (controlState && controlState === this.configOfStateApply?.state?.[controlKey]) {
794
796
  // To check whether diffstate shuold be called or not to applyExternalState
795
797
  const shouldApplyDiffState = !this.invalidateInitialStateForApply.includes(stateContributor.getId()) && !this.controlsVariantIdUnavailable.includes(stateContributor.getId()) && navigationType !== NavType.hybrid && skipMerge !== true;
796
798
  stateContributor.applyState(controlState, undefined, shouldApplyDiffState);
@@ -830,10 +832,7 @@ sap.ui.define(["sap/base/Log", "sap/base/util/merge", "sap/fe/base/ClassSupport"
830
832
  };
831
833
  }
832
834
  return controlState;
833
- }
834
-
835
- //method to store the initial states for delta computation of mdc controls
836
- ;
835
+ };
837
836
  // Attach event to save and select of Variant Management to update the initial Control States on variant change
838
837
  _proto._addEventListenersToVariantManagement = function _addEventListenersToVariantManagement(variantManagement, variantControls) {
839
838
  const oPayload = {
@@ -865,8 +864,8 @@ sap.ui.define(["sap/base/Log", "sap/base/util/merge", "sap/fe/base/ClassSupport"
865
864
  _proto.updateInitialState = async function updateInitialState(variantControls) {
866
865
  const viewControls = this.stateContributors;
867
866
  await Promise.all(viewControls.map(async control => {
868
- const controlId = control === null || control === void 0 ? void 0 : control.getId();
869
- if (variantControls.includes(controlId) && control !== null && control !== void 0 && control.isA("sap.fe.core.controllerextensions.viewState.IViewStateContributor") && control.setInitialState) {
867
+ const controlId = control?.getId();
868
+ if (variantControls.includes(controlId) && control?.isA("sap.fe.core.controllerextensions.viewState.IViewStateContributor") && control.setInitialState) {
870
869
  await control.setInitialState();
871
870
  }
872
871
  }));
@@ -875,7 +874,7 @@ sap.ui.define(["sap/base/Log", "sap/base/util/merge", "sap/fe/base/ClassSupport"
875
874
  return !!initialState && !this.invalidateInitialStateForApply.includes(control.getId()) && !this.controlsVariantIdUnavailable.includes(control.getId()) && (isNavHybrid ?? true) && skipMerge !== true;
876
875
  };
877
876
  return ViewState;
878
- }(ControllerExtension), (_applyDecoratedDescriptor(_class2.prototype, "refreshViewBindings", [_dec2, _dec3], Object.getOwnPropertyDescriptor(_class2.prototype, "refreshViewBindings"), _class2.prototype), _applyDecoratedDescriptor(_class2.prototype, "adaptBindingRefreshControls", [_dec4, _dec5], Object.getOwnPropertyDescriptor(_class2.prototype, "adaptBindingRefreshControls"), _class2.prototype), _applyDecoratedDescriptor(_class2.prototype, "refreshControlBinding", [_dec6, _dec7], Object.getOwnPropertyDescriptor(_class2.prototype, "refreshControlBinding"), _class2.prototype), _applyDecoratedDescriptor(_class2.prototype, "getControlRefreshBindingHandler", [_dec8, _dec9], Object.getOwnPropertyDescriptor(_class2.prototype, "getControlRefreshBindingHandler"), _class2.prototype), _applyDecoratedDescriptor(_class2.prototype, "adaptBindingRefreshHandler", [_dec10, _dec11], Object.getOwnPropertyDescriptor(_class2.prototype, "adaptBindingRefreshHandler"), _class2.prototype), _applyDecoratedDescriptor(_class2.prototype, "onSuspend", [_dec12, _dec13], Object.getOwnPropertyDescriptor(_class2.prototype, "onSuspend"), _class2.prototype), _applyDecoratedDescriptor(_class2.prototype, "onRestore", [_dec14, _dec15], Object.getOwnPropertyDescriptor(_class2.prototype, "onRestore"), _class2.prototype), _applyDecoratedDescriptor(_class2.prototype, "collectResults", [_dec16, _dec17], Object.getOwnPropertyDescriptor(_class2.prototype, "collectResults"), _class2.prototype), _applyDecoratedDescriptor(_class2.prototype, "adaptControlStateHandler", [_dec18, _dec19], Object.getOwnPropertyDescriptor(_class2.prototype, "adaptControlStateHandler"), _class2.prototype), _applyDecoratedDescriptor(_class2.prototype, "getControlStateHandler", [_dec20, _dec21], Object.getOwnPropertyDescriptor(_class2.prototype, "getControlStateHandler"), _class2.prototype), _applyDecoratedDescriptor(_class2.prototype, "adaptStateControls", [_dec22, _dec23], Object.getOwnPropertyDescriptor(_class2.prototype, "adaptStateControls"), _class2.prototype), _applyDecoratedDescriptor(_class2.prototype, "getStateKey", [_dec24, _dec25], Object.getOwnPropertyDescriptor(_class2.prototype, "getStateKey"), _class2.prototype), _applyDecoratedDescriptor(_class2.prototype, "retrieveViewState", [_dec26, _dec27], Object.getOwnPropertyDescriptor(_class2.prototype, "retrieveViewState"), _class2.prototype), _applyDecoratedDescriptor(_class2.prototype, "retrieveAdditionalStates", [_dec28, _dec29], Object.getOwnPropertyDescriptor(_class2.prototype, "retrieveAdditionalStates"), _class2.prototype), _applyDecoratedDescriptor(_class2.prototype, "retrieveControlState", [_dec30, _dec31], Object.getOwnPropertyDescriptor(_class2.prototype, "retrieveControlState"), _class2.prototype), _applyDecoratedDescriptor(_class2.prototype, "applyInitialStateOnly", [_dec32, _dec33], Object.getOwnPropertyDescriptor(_class2.prototype, "applyInitialStateOnly"), _class2.prototype), _applyDecoratedDescriptor(_class2.prototype, "applyViewState", [_dec34, _dec35], Object.getOwnPropertyDescriptor(_class2.prototype, "applyViewState"), _class2.prototype), _applyDecoratedDescriptor(_class2.prototype, "_checkIfVariantIdIsAvailable", [_dec36], Object.getOwnPropertyDescriptor(_class2.prototype, "_checkIfVariantIdIsAvailable"), _class2.prototype), _applyDecoratedDescriptor(_class2.prototype, "onBeforeStateApplied", [_dec37, _dec38], Object.getOwnPropertyDescriptor(_class2.prototype, "onBeforeStateApplied"), _class2.prototype), _applyDecoratedDescriptor(_class2.prototype, "onAfterStateApplied", [_dec39, _dec40], Object.getOwnPropertyDescriptor(_class2.prototype, "onAfterStateApplied"), _class2.prototype), _applyDecoratedDescriptor(_class2.prototype, "applyAdditionalStates", [_dec41, _dec42], Object.getOwnPropertyDescriptor(_class2.prototype, "applyAdditionalStates"), _class2.prototype), _applyDecoratedDescriptor(_class2.prototype, "_applyNavigationParametersToFilterbar", [_dec43], Object.getOwnPropertyDescriptor(_class2.prototype, "_applyNavigationParametersToFilterbar"), _class2.prototype), _applyDecoratedDescriptor(_class2.prototype, "applyNavigationParameters", [_dec44, _dec45], Object.getOwnPropertyDescriptor(_class2.prototype, "applyNavigationParameters"), _class2.prototype), _applyDecoratedDescriptor(_class2.prototype, "applyControlState", [_dec46, _dec47], Object.getOwnPropertyDescriptor(_class2.prototype, "applyControlState"), _class2.prototype), _applyDecoratedDescriptor(_class2.prototype, "updateAppStateDebounced", [_dec48], Object.getOwnPropertyDescriptor(_class2.prototype, "updateAppStateDebounced"), _class2.prototype)), _class2)) || _class);
877
+ }(ControllerExtension), _applyDecoratedDescriptor(_class2.prototype, "refreshViewBindings", [_dec2, _dec3], Object.getOwnPropertyDescriptor(_class2.prototype, "refreshViewBindings"), _class2.prototype), _applyDecoratedDescriptor(_class2.prototype, "adaptBindingRefreshControls", [_dec4, _dec5], Object.getOwnPropertyDescriptor(_class2.prototype, "adaptBindingRefreshControls"), _class2.prototype), _applyDecoratedDescriptor(_class2.prototype, "refreshControlBinding", [_dec6, _dec7], Object.getOwnPropertyDescriptor(_class2.prototype, "refreshControlBinding"), _class2.prototype), _applyDecoratedDescriptor(_class2.prototype, "getControlRefreshBindingHandler", [_dec8, _dec9], Object.getOwnPropertyDescriptor(_class2.prototype, "getControlRefreshBindingHandler"), _class2.prototype), _applyDecoratedDescriptor(_class2.prototype, "adaptBindingRefreshHandler", [_dec10, _dec11], Object.getOwnPropertyDescriptor(_class2.prototype, "adaptBindingRefreshHandler"), _class2.prototype), _applyDecoratedDescriptor(_class2.prototype, "onSuspend", [_dec12, _dec13], Object.getOwnPropertyDescriptor(_class2.prototype, "onSuspend"), _class2.prototype), _applyDecoratedDescriptor(_class2.prototype, "onRestore", [_dec14, _dec15], Object.getOwnPropertyDescriptor(_class2.prototype, "onRestore"), _class2.prototype), _applyDecoratedDescriptor(_class2.prototype, "collectResults", [_dec16, _dec17], Object.getOwnPropertyDescriptor(_class2.prototype, "collectResults"), _class2.prototype), _applyDecoratedDescriptor(_class2.prototype, "adaptControlStateHandler", [_dec18, _dec19], Object.getOwnPropertyDescriptor(_class2.prototype, "adaptControlStateHandler"), _class2.prototype), _applyDecoratedDescriptor(_class2.prototype, "getControlStateHandler", [_dec20, _dec21], Object.getOwnPropertyDescriptor(_class2.prototype, "getControlStateHandler"), _class2.prototype), _applyDecoratedDescriptor(_class2.prototype, "adaptStateControls", [_dec22, _dec23], Object.getOwnPropertyDescriptor(_class2.prototype, "adaptStateControls"), _class2.prototype), _applyDecoratedDescriptor(_class2.prototype, "getStateKey", [_dec24, _dec25], Object.getOwnPropertyDescriptor(_class2.prototype, "getStateKey"), _class2.prototype), _applyDecoratedDescriptor(_class2.prototype, "retrieveViewState", [_dec26, _dec27], Object.getOwnPropertyDescriptor(_class2.prototype, "retrieveViewState"), _class2.prototype), _applyDecoratedDescriptor(_class2.prototype, "retrieveAdditionalStates", [_dec28, _dec29], Object.getOwnPropertyDescriptor(_class2.prototype, "retrieveAdditionalStates"), _class2.prototype), _applyDecoratedDescriptor(_class2.prototype, "retrieveControlState", [_dec30, _dec31], Object.getOwnPropertyDescriptor(_class2.prototype, "retrieveControlState"), _class2.prototype), _applyDecoratedDescriptor(_class2.prototype, "applyInitialStateOnly", [_dec32, _dec33], Object.getOwnPropertyDescriptor(_class2.prototype, "applyInitialStateOnly"), _class2.prototype), _applyDecoratedDescriptor(_class2.prototype, "applyViewState", [_dec34, _dec35], Object.getOwnPropertyDescriptor(_class2.prototype, "applyViewState"), _class2.prototype), _applyDecoratedDescriptor(_class2.prototype, "_checkIfVariantIdIsAvailable", [_dec36], Object.getOwnPropertyDescriptor(_class2.prototype, "_checkIfVariantIdIsAvailable"), _class2.prototype), _applyDecoratedDescriptor(_class2.prototype, "onBeforeStateApplied", [_dec37, _dec38], Object.getOwnPropertyDescriptor(_class2.prototype, "onBeforeStateApplied"), _class2.prototype), _applyDecoratedDescriptor(_class2.prototype, "onAfterStateApplied", [_dec39, _dec40], Object.getOwnPropertyDescriptor(_class2.prototype, "onAfterStateApplied"), _class2.prototype), _applyDecoratedDescriptor(_class2.prototype, "applyAdditionalStates", [_dec41, _dec42], Object.getOwnPropertyDescriptor(_class2.prototype, "applyAdditionalStates"), _class2.prototype), _applyDecoratedDescriptor(_class2.prototype, "_applyNavigationParametersToFilterbar", [_dec43], Object.getOwnPropertyDescriptor(_class2.prototype, "_applyNavigationParametersToFilterbar"), _class2.prototype), _applyDecoratedDescriptor(_class2.prototype, "applyNavigationParameters", [_dec44, _dec45], Object.getOwnPropertyDescriptor(_class2.prototype, "applyNavigationParameters"), _class2.prototype), _applyDecoratedDescriptor(_class2.prototype, "applyControlState", [_dec46, _dec47], Object.getOwnPropertyDescriptor(_class2.prototype, "applyControlState"), _class2.prototype), _applyDecoratedDescriptor(_class2.prototype, "updateAppStateDebounced", [_dec48], Object.getOwnPropertyDescriptor(_class2.prototype, "updateAppStateDebounced"), _class2.prototype), _class2)) || _class);
879
878
  return ViewState;
880
879
  }, false);
881
- //# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJuYW1lcyI6WyJOYXZUeXBlIiwiTmF2TGlicmFyeSIsIkFERElUSU9OQUxfU1RBVEVTX0tFWSIsImdldFN0YXRlVXRpbCIsIl9fdWk1X3JlcXVpcmVfYXN5bmMiLCJkZWZhdWx0IiwiX21Db250cm9sU3RhdGVIYW5kbGVyTWFwIiwicmV0cmlldmUiLCJvVk0iLCJ2YXJpYW50SWQiLCJnZXRDdXJyZW50VmFyaWFudEtleSIsImFwcGx5IiwiY29udHJvbFN0YXRlIiwidW5kZWZpbmVkIiwiaXNWYXJpYW50SWRBdmFpbGFibGUiLCJfY2hlY2tJZlZhcmlhbnRJZElzQXZhaWxhYmxlIiwic1ZhcmlhbnRSZWZlcmVuY2UiLCJnZXRTdGFuZGFyZFZhcmlhbnRLZXkiLCJjb250cm9sc1ZhcmlhbnRJZFVuYXZhaWxhYmxlIiwicHVzaCIsImdldEZvciIsIkNvbnRyb2xWYXJpYW50QXBwbHlBUEkiLCJhY3RpdmF0ZVZhcmlhbnQiLCJlbGVtZW50IiwidmFyaWFudFJlZmVyZW5jZSIsIl9zZXRJbml0aWFsU3RhdGVzRm9yRGVsdGFDb21wdXRlIiwiZXJyb3IiLCJMb2ciLCJpbnZhbGlkYXRlSW5pdGlhbFN0YXRlRm9yQXBwbHkiLCJtdWx0aXBsZU1vZGVDb250cm9sIiwic2VsZWN0ZWRLZXkiLCJjb250ZW50IiwiZ2V0U2VsZWN0ZWRLZXkiLCJ0YWJCYXIiLCJnZXRJdGVtcyIsImZpbmQiLCJpdGVtIiwiZ2V0S2V5Iiwic2V0U2VsZWN0ZWRLZXkiLCJyZWZyZXNoQmluZGluZyIsIm9UYWJsZSIsIm9UYWJsZUJpbmRpbmciLCJnZXRSb3dCaW5kaW5nIiwib1Jvb3RCaW5kaW5nIiwiZ2V0Um9vdEJpbmRpbmciLCJhZ2dyZWdhdGlvbiIsImdldEFnZ3JlZ2F0aW9uIiwiaGllcmFyY2h5UXVhbGlmaWVyIiwicmVmcmVzaCIsIm9IZWFkZXJDb250ZXh0IiwiZ2V0SGVhZGVyQ29udGV4dCIsInNHcm91cElkIiwiZ2V0R3JvdXBJZCIsInJlcXVlc3RTaWRlRWZmZWN0cyIsIiROYXZpZ2F0aW9uUHJvcGVydHlQYXRoIiwiaW5mbyIsImdldElkIiwib1NlZ21lbnRlZEJ1dHRvbiIsIm9Db250cm9sU3RhdGUiLCJfb1NlZ21lbnRlZEJ1dHRvbiRnZXQiLCJnZXRQYXJlbnQiLCJpc0EiLCJmaXJlRXZlbnQiLCJvU2VsZWN0IiwiX29TZWxlY3QkZ2V0UGFyZW50Iiwib0R5bmFtaWNQYWdlIiwiaGVhZGVyRXhwYW5kZWQiLCJnZXRIZWFkZXJFeHBhbmRlZCIsInNldEhlYWRlckV4cGFuZGVkIiwib1ZpZXciLCJvQ29udHJvbGxlciIsImdldENvbnRyb2xsZXIiLCJ2aWV3U3RhdGUiLCJyZXRyaWV2ZVZpZXdTdGF0ZSIsIm9OYXZQYXJhbWV0ZXJzIiwic2tpcE1lcmdlIiwiYXBwbHlWaWV3U3RhdGUiLCJyZWZyZXNoVmlld0JpbmRpbmdzIiwib0NvbXBvbmVudENvbnRhaW5lciIsIm9Db21wb25lbnQiLCJnZXRDb21wb25lbnRJbnN0YW5jZSIsInJldHJpZXZlQ29udHJvbFN0YXRlIiwiZ2V0Um9vdENvbnRyb2wiLCJhcHBseUNvbnRyb2xTdGF0ZSIsIlZpZXdTdGF0ZSIsIl9kZWMiLCJkZWZpbmVVSTVDbGFzcyIsIl9kZWMyIiwicHVibGljRXh0ZW5zaW9uIiwiX2RlYzMiLCJmaW5hbEV4dGVuc2lvbiIsIl9kZWM0IiwiX2RlYzUiLCJleHRlbnNpYmxlIiwiT3ZlcnJpZGVFeGVjdXRpb24iLCJBZnRlciIsIl9kZWM2IiwicHJpdmF0ZUV4dGVuc2lvbiIsIl9kZWM3IiwiX2RlYzgiLCJfZGVjOSIsIl9kZWMxMCIsIl9kZWMxMSIsIl9kZWMxMiIsIl9kZWMxMyIsIl9kZWMxNCIsIl9kZWMxNSIsIl9kZWMxNiIsIl9kZWMxNyIsIl9kZWMxOCIsIl9kZWMxOSIsIl9kZWMyMCIsIl9kZWMyMSIsIl9kZWMyMiIsIl9kZWMyMyIsIl9kZWMyNCIsIl9kZWMyNSIsIl9kZWMyNiIsIl9kZWMyNyIsIl9kZWMyOCIsIl9kZWMyOSIsIl9kZWMzMCIsIl9kZWMzMSIsIl9kZWMzMiIsIl9kZWMzMyIsIkluc3RlYWQiLCJfZGVjMzQiLCJfZGVjMzUiLCJfZGVjMzYiLCJfZGVjMzciLCJfZGVjMzgiLCJfZGVjMzkiLCJfZGVjNDAiLCJfZGVjNDEiLCJfZGVjNDIiLCJfZGVjNDMiLCJfZGVjNDQiLCJfZGVjNDUiLCJfZGVjNDYiLCJfZGVjNDciLCJfZGVjNDgiLCJfY2xhc3MiLCJfY2xhc3MyIiwiX0NvbnRyb2xsZXJFeHRlbnNpb24iLCJfaW5oZXJpdHNMb29zZSIsIl90aGlzIiwiY2FsbCIsImluaXRpYWxDb250cm9sU3RhdGVzTWFwcGVyIiwidmlld1N0YXRlQ29udHJvbHMiLCJzdGF0ZUNvbnRyaWJ1dG9ycyIsInZhcmlhbnRNYW5hZ2VtZW50IiwiYWRhcHRDb250cm9scyIsImV4dGVybmFsU3RhdGVQcm9taXNlcyIsImNvbnRyb2xTdGF0ZUtleSIsImluaXRpYWxDb250cm9sU3RhdGVzIiwidmFyaWFudENvbnRyb2xzIiwidXBkYXRlSW5pdGlhbFN0YXRlIiwiUHJvbWlzZSIsImFsbCIsImZpbHRlciIsImNvbnRyb2wiLCJpbmNsdWRlcyIsIm1hcCIsIl9hZGRFdmVudExpc3RlbmVyc1RvVmFyaWFudE1hbmFnZW1lbnQiLCJleHRlcm5hbFN0YXRlUHJvbWlzZSIsInJldHJpZXZlRXh0ZXJuYWxTdGF0ZSIsImdldFN0YXRlS2V5IiwiZm9yRWFjaCIsImluaXRpYWxDb250cm9sU3RhdGUiLCJpIiwiZSIsIl9pUmV0cmlldmluZ1N0YXRlQ291bnRlciIsIl9wSW5pdGlhbFN0YXRlQXBwbGllZCIsInJlc29sdmUiLCJfcEluaXRpYWxTdGF0ZUFwcGxpZWRSZXNvbHZlIiwiX3Byb3RvIiwicHJvdG90eXBlIiwiYUNvbnRyb2xzIiwiY29sbGVjdFJlc3VsdHMiLCJiYXNlIiwiYWRhcHRCaW5kaW5nUmVmcmVzaENvbnRyb2xzIiwib1Byb21pc2VDaGFpbiIsIm9Db250cm9sIiwidGhlbiIsInJlZnJlc2hDb250cm9sQmluZGluZyIsImJpbmQiLCJhQ29sbGVjdGVkQ29udHJvbHMiLCJvQ29udHJvbFJlZnJlc2hCaW5kaW5nSGFuZGxlciIsImdldENvbnRyb2xSZWZyZXNoQmluZGluZ0hhbmRsZXIiLCJnZXRNZXRhZGF0YSIsImdldE5hbWUiLCJvUmVmcmVzaEJpbmRpbmdIYW5kbGVyIiwic1R5cGUiLCJhZGFwdEJpbmRpbmdSZWZyZXNoSGFuZGxlciIsIl9vQ29udHJvbCIsIl9vQ29udHJvbEhhbmRsZXIiLCJvblN1c3BlbmQiLCJvblJlc3RvcmUiLCJkZXN0cm95IiwiZm5DYWxsIiwiYVJlc3VsdHMiLCJfbGVuIiwiYXJndW1lbnRzIiwibGVuZ3RoIiwiYXJncyIsIkFycmF5IiwiX2tleSIsImFkYXB0Q29udHJvbFN0YXRlSGFuZGxlciIsImFDb250cm9sSGFuZGxlciIsImdldENvbnRyb2xTdGF0ZUhhbmRsZXIiLCJhSW50ZXJuYWxDb250cm9sU3RhdGVIYW5kbGVyIiwiYUN1c3RvbUNvbnRyb2xTdGF0ZUhhbmRsZXIiLCJyZXRyaWV2ZVN0YXRlIiwiYXBwbHlTdGF0ZSIsIl9jb250cm9sIiwic2hvdWxkQXBwbHlEaWZmU3RhdGUiLCJuYXZpZ2F0aW9uVHlwZSIsImh5YnJpZCIsImFwcGx5TGVnYWN5U3RhdGUiLCJnZXRDb250cm9sU3RhdGUiLCJPYmplY3QiLCJhc3NpZ24iLCJjb25jYXQiLCJhZGFwdFN0YXRlQ29udHJvbHMiLCJfYUNvbGxlY3RlZENvbnRyb2xzIiwiZ2V0VmlldyIsImdldExvY2FsSWQiLCJvVmlld1N0YXRlIiwiYVJlc29sdmVkU3RhdGVzIiwidlJlc3VsdCIsImtleSIsInZhbHVlIiwicmVkdWNlIiwib1N0YXRlcyIsIm1TdGF0ZSIsIm9DdXJyZW50U3RhdGUiLCJtZXJnZU9iamVjdHMiLCJwcmV2U3RhdGUiLCJfY3VycmVudFZpZXdTdGF0ZSIsImtleXMiLCJfYWRkTWlzc2luZ1N0YXRlIiwibUFkZGl0aW9uYWxTdGF0ZXMiLCJfcmV0cmlldmVBZGRpdGlvbmFsU3RhdGVzIiwicmV0cmlldmVBZGRpdGlvbmFsU3RhdGVzIiwiYUNvbnRyb2xTdGF0ZUhhbmRsZXJzIiwibUNvbnRyb2xTdGF0ZUhhbmRsZXIiLCJFcnJvciIsImFTdGF0ZXMiLCJvRmluYWxTdGF0ZSIsImFwcGx5SW5pdGlhbFN0YXRlT25seSIsImNvbnRyb2xLZXkiLCJvTmF2UGFyYW1ldGVyIiwiX2dldEluaXRpYWxTdGF0ZUFwcGxpZWQiLCJfaXNTdGF0ZUVtcHR5Rm9ySUFwcFN0YXRlTmF2VHlwZSIsIl9faXNSb290Vmlld0NvbnRyb2xsZXIiLCJvbkJlZm9yZVN0YXRlQXBwbGllZCIsImhhc1ZhcmlhbnRNYW5hZ2VtZW50IiwiY29uZmlnT2ZTdGF0ZUFwcGx5IiwibmF2VHlwZVBhcmFtZXRlcnMiLCJzdGF0ZSIsInNvcnRlZEFkYXB0U3RhdGVDb250cm9scyIsIm1vZGlmaWVkQ29udHJvbHMiLCJpc1ZhcmlhbnRNYW5hZ2VtZW50Q29udHJvbCIsInNLZXkiLCJpQXBwU3RhdGUiLCJhcHBseUFkZGl0aW9uYWxTdGF0ZXMiLCJhcHBseU5hdmlnYXRpb25QYXJhbWV0ZXJzIiwiX2FwcGx5TmF2aWdhdGlvblBhcmFtZXRlcnNUb0ZpbHRlcmJhciIsIm9uQWZ0ZXJTdGF0ZUFwcGxpZWQiLCJfc2V0SW5pdGlhbFN0YXRlQXBwbGllZCIsInNWYXJpYW50SWQiLCJhVmFyaWFudHMiLCJnZXRWYXJpYW50cyIsImJJc0NvbnRyb2xTdGF0ZVZhcmlhbnRBdmFpbGFibGUiLCJvVmFyaWFudCIsInBJbml0aWFsU3RhdGVBcHBsaWVkUmVzb2x2ZSIsIm5hdlR5cGUiLCJyb290Vmlld0NvbnRyb2xsZXIiLCJhUHJvbWlzZXMiLCJfb05hdlBhcmFtZXRlciIsIl9hUHJvbWlzZXMiLCJ1cGRhdGVBcHBTdGF0ZURlYm91bmNlZCIsInVwZGF0ZUFwcFN0YXRlVGltZXIiLCJjbGVhclRpbWVvdXQiLCJzZXRUaW1lb3V0IiwiZ2V0RXh0ZW5zaW9uQVBJIiwidXBkYXRlQXBwU3RhdGUiLCJyZWdpc3RlclN0YXRlQ29udHJpYnV0b3IiLCJzdGF0ZUNvbnRyaWJ1dG9yIiwiX3RoaXMkY29uZmlnT2ZTdGF0ZUFwIiwiX3RoaXMkY29uZmlnT2ZTdGF0ZUFwMiIsIl90aGlzJGNvbmZpZ09mU3RhdGVBcDMiLCJfdGhpcyRjb25maWdPZlN0YXRlQXA0IiwiX3RoaXMkY29uZmlnT2ZTdGF0ZUFwNSIsImRlcmVnaXN0ZXJTdGF0ZUNvbnRyaWJ1dG9yIiwidGFyZ2V0SW5kZXgiLCJmaW5kSW5kZXgiLCJjb250cmlidXRvciIsInNwbGljZSIsImdldEludGVyZmFjZSIsIl9nZXRDb250cm9sU3RhdGUiLCJmdWxsU3RhdGUiLCJpbml0aWFsU3RhdGUiLCJvUGF5bG9hZCIsInZhcmlhbnRNYW5hZ2VkQ29udHJvbHMiLCJmbkV2ZW50IiwiX3VwZGF0ZUluaXRpYWxTdGF0ZXNPblZhcmlhbnRDaGFuZ2UiLCJhdHRhY2hTYXZlIiwiYXR0YWNoU2VsZWN0Iiwidm1Bc3NvY2lhdGVkQ29udHJvbHNUb1Jlc2V0Iiwidm1Bc3NvY2lhdGVkY29udHJvbEtleSIsInZpZXdDb250cm9scyIsImNvbnRyb2xJZCIsInNldEluaXRpYWxTdGF0ZSIsIl9pc0luaXRpYWxTdGF0ZXNBcHBsaWNhYmxlIiwiaXNOYXZIeWJyaWQiLCJDb250cm9sbGVyRXh0ZW5zaW9uIiwiX2FwcGx5RGVjb3JhdGVkRGVzY3JpcHRvciIsImdldE93blByb3BlcnR5RGVzY3JpcHRvciJdLCJzb3VyY2VSb290IjoiLiIsInNvdXJjZXMiOlsiVmlld1N0YXRlLnRzIl0sInNvdXJjZXNDb250ZW50IjpbImltcG9ydCBMb2cgZnJvbSBcInNhcC9iYXNlL0xvZ1wiO1xuaW1wb3J0IG1lcmdlT2JqZWN0cyBmcm9tIFwic2FwL2Jhc2UvdXRpbC9tZXJnZVwiO1xuaW1wb3J0IHR5cGUgRHluYW1pY1BhZ2UgZnJvbSBcInNhcC9mL0R5bmFtaWNQYWdlXCI7XG5pbXBvcnQgeyBkZWZpbmVVSTVDbGFzcywgZXh0ZW5zaWJsZSwgZmluYWxFeHRlbnNpb24sIHByaXZhdGVFeHRlbnNpb24sIHB1YmxpY0V4dGVuc2lvbiB9IGZyb20gXCJzYXAvZmUvYmFzZS9DbGFzc1N1cHBvcnRcIjtcbmltcG9ydCB0eXBlIHsgRkVWaWV3IH0gZnJvbSBcInNhcC9mZS9jb3JlL0Jhc2VDb250cm9sbGVyXCI7XG5pbXBvcnQgdHlwZSBQYWdlQ29udHJvbGxlciBmcm9tIFwic2FwL2ZlL2NvcmUvUGFnZUNvbnRyb2xsZXJcIjtcbmltcG9ydCB0eXBlIElWaWV3U3RhdGVDb250cmlidXRvciBmcm9tIFwic2FwL2ZlL2NvcmUvY29udHJvbGxlcmV4dGVuc2lvbnMvdmlld1N0YXRlL0lWaWV3U3RhdGVDb250cmlidXRvclwiO1xuaW1wb3J0IHR5cGUgU2VsZWN0aW9uVmFyaWFudCBmcm9tIFwic2FwL2ZlL25hdmlnYXRpb24vU2VsZWN0aW9uVmFyaWFudFwiO1xuaW1wb3J0IE5hdkxpYnJhcnkgZnJvbSBcInNhcC9mZS9uYXZpZ2F0aW9uL2xpYnJhcnlcIjtcbmltcG9ydCB0eXBlIE11bHRpcGxlTW9kZUNvbnRyb2wgZnJvbSBcInNhcC9mZS90ZW1wbGF0ZXMvTGlzdFJlcG9ydC9jb250cm9scy9NdWx0aXBsZU1vZGVDb250cm9sXCI7XG5pbXBvcnQgdHlwZSBJY29uVGFiRmlsdGVyIGZyb20gXCJzYXAvbS9JY29uVGFiRmlsdGVyXCI7XG5pbXBvcnQgdHlwZSBTZWdtZW50ZWRCdXR0b24gZnJvbSBcInNhcC9tL1NlZ21lbnRlZEJ1dHRvblwiO1xuaW1wb3J0IHR5cGUgU2VsZWN0IGZyb20gXCJzYXAvbS9TZWxlY3RcIjtcbmltcG9ydCB0eXBlIE1hbmFnZWRPYmplY3QgZnJvbSBcInNhcC91aS9iYXNlL01hbmFnZWRPYmplY3RcIjtcbmltcG9ydCB0eXBlIEJhc2VPYmplY3QgZnJvbSBcInNhcC91aS9iYXNlL09iamVjdFwiO1xuaW1wb3J0IHR5cGUgQ29tcG9uZW50Q29udGFpbmVyIGZyb20gXCJzYXAvdWkvY29yZS9Db21wb25lbnRDb250YWluZXJcIjtcbmltcG9ydCB0eXBlIENvbnRyb2wgZnJvbSBcInNhcC91aS9jb3JlL0NvbnRyb2xcIjtcbmltcG9ydCBDb250cm9sbGVyRXh0ZW5zaW9uIGZyb20gXCJzYXAvdWkvY29yZS9tdmMvQ29udHJvbGxlckV4dGVuc2lvblwiO1xuaW1wb3J0IE92ZXJyaWRlRXhlY3V0aW9uIGZyb20gXCJzYXAvdWkvY29yZS9tdmMvT3ZlcnJpZGVFeGVjdXRpb25cIjtcbmltcG9ydCB0eXBlIFZhcmlhbnRNYW5hZ2VtZW50IGZyb20gXCJzYXAvdWkvZmwvdmFyaWFudHMvVmFyaWFudE1hbmFnZW1lbnRcIjtcbmltcG9ydCB0eXBlIE1EQ0NvbnRyb2wgZnJvbSBcInNhcC91aS9tZGMvQ29udHJvbFwiO1xuaW1wb3J0IHR5cGUgRmlsdGVyQmFyIGZyb20gXCJzYXAvdWkvbWRjL0ZpbHRlckJhclwiO1xuaW1wb3J0IHR5cGUgTURDVGFibGUgZnJvbSBcInNhcC91aS9tZGMvVGFibGVcIjtcblxuaW1wb3J0IHR5cGUgU3RhdGVVdGlsIGZyb20gXCJzYXAvdWkvbWRjL3AxM24vU3RhdGVVdGlsXCI7XG5pbXBvcnQgdHlwZSBGY2xDb250cm9sbGVyIGZyb20gXCIuLi9yb290Vmlldy9GY2wuY29udHJvbGxlclwiO1xuaW1wb3J0IHR5cGUgTmF2Q29udGFpbmVyQ29udHJvbGxlciBmcm9tIFwiLi4vcm9vdFZpZXcvTmF2Q29udGFpbmVyLmNvbnRyb2xsZXJcIjtcblxuLy8gYWRkaXRpb25hbFN0YXRlcyBhcmUgc3RvcmVkIG5leHQgdG8gY29udHJvbCBJRHMsIHNvIG5hbWUgY2xhc2ggYXZvaWRhbmNlIG5lZWRlZC4gRm9ydHVuYXRlbHkgSURzIGhhdmUgcmVzdHJpY3Rpb25zOlxuLy8gXCJBbGxvd2VkIGlzIGEgc2VxdWVuY2Ugb2YgY2hhcmFjdGVycyAoY2FwaXRhbC9sb3dlcmNhc2UpLCBkaWdpdHMsIHVuZGVyc2NvcmVzLCBkYXNoZXMsIHBvaW50cyBhbmQvb3IgY29sb25zLlwiXG4vLyBUaGVyZWZvcmUgYWRkaW5nIGEgc3ltYm9sIGxpa2UgIyBvciBAXG5jb25zdCBOYXZUeXBlID0gTmF2TGlicmFyeS5OYXZUeXBlO1xuXG4vKipcbiAqIERlZmluaXRpb24gb2YgYSBuYXZpZ2F0aW9uIHBhcmFtZXRlclxuICogQHB1YmxpY1xuICovXG5leHBvcnQgdHlwZSBOYXZpZ2F0aW9uUGFyYW1ldGVyID0ge1xuXHQvKipcblx0ICogIFRoZSBhY3R1YWwgbmF2aWdhdGlvbiB0eXBlLlxuXHQgKiAgQHB1YmxpY1xuXHQgKi9cblx0bmF2aWdhdGlvblR5cGU6IHN0cmluZztcblx0LyoqXG5cdCAqIFRoZSBzZWxlY3Rpb25WYXJpYW50IGZyb20gdGhlIG5hdmlnYXRpb24uXG5cdCAqIEBwdWJsaWNcblx0ICovXG5cdHNlbGVjdGlvblZhcmlhbnQ/OiBTZWxlY3Rpb25WYXJpYW50O1xuXHQvKipcblx0ICogVGhlIHNlbGVjdGlvblZhcmlhbnQgZGVmYXVsdHMgZnJvbSB0aGUgbmF2aWdhdGlvblxuXHQgKiAgQHB1YmxpY1xuXHQgKi9cblx0c2VsZWN0aW9uVmFyaWFudERlZmF1bHRzPzogU2VsZWN0aW9uVmFyaWFudDtcblx0LyoqXG5cdCAqIERlZmluZXMgd2hldGhlciB0aGUgc3RhbmRhcmQgdmFyaWFudCBtdXN0IGJlIHVzZWQgaW4gdmFyaWFudCBtYW5hZ2VtZW50XG5cdCAqICBAcHVibGljXG5cdCAqL1xuXHRyZXF1aXJlc1N0YW5kYXJkVmFyaWFudD86IGJvb2xlYW47XG59O1xuXG5jb25zdCBBRERJVElPTkFMX1NUQVRFU19LRVkgPSBcIiNhZGRpdGlvbmFsU3RhdGVzXCI7XG5cbmV4cG9ydCB0eXBlIENvbnRyb2xTdGF0ZSA9XG5cdHwgKHtcblx0XHRcdGluaXRpYWxTdGF0ZT86IHtcblx0XHRcdFx0c3VwcGxlbWVudGFyeUNvbmZpZz86IG9iamVjdDtcblx0XHRcdH07XG5cdFx0XHRmdWxsU3RhdGU/OiB7XG5cdFx0XHRcdGZpbHRlcj86IG9iamVjdDtcblx0XHRcdH07XG5cdCAgfSAmIFJlY29yZDxzdHJpbmcsIHVua25vd24+KVxuXHR8IHVuZGVmaW5lZDtcblxuZXhwb3J0IHR5cGUgTmF2UGFyYW1ldGVycyA9IHtcblx0bmF2aWdhdGlvblR5cGU/OiBzdHJpbmc7XG59O1xuZXhwb3J0IHR5cGUgTGVnYWN5RmlsdGVyQmFyU3RhdGUgPSB7XG5cdGZpbHRlcj86IFJlY29yZDxzdHJpbmcsIEFycmF5PG9iamVjdD4+O1xufSAmIFJlY29yZDxzdHJpbmcsIHVua25vd24+O1xuXG4vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vXG4vLyBtZXRob2RzIHRvIHJldHJpZXZlICYgYXBwbHkgc3RhdGVzIGZvciB0aGUgZGlmZmVyZW50IGNvbnRyb2xzIC8vXG4vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vXG5leHBvcnQgdHlwZSBDb250cm9sU3RhdGVIYW5kbGVyPFQgZXh0ZW5kcyBNYW5hZ2VkT2JqZWN0LCBLIGV4dGVuZHMgdW5rbm93biB8IHVuZGVmaW5lZD4gPSB7XG5cdHJldHJpZXZlPzogKG9Db250cm9sOiBUKSA9PiBLIHwgUHJvbWlzZTxLPjtcblx0YXBwbHk/OiAob0NvbnRyb2w6IFQsIGNvbnRyb2xTdGF0ZTogSywgbmF2UGFyYW1ldGVycz86IE5hdmlnYXRpb25QYXJhbWV0ZXIsIHNraXBNZXJnZT86IGJvb2xlYW4pID0+IFByb21pc2U8dm9pZD4gfCB2b2lkO1xuXHRyZWZyZXNoQmluZGluZz86IChvQ29udHJvbDogVCkgPT4gdm9pZDtcbn07XG50eXBlIENvbnRyb2xTdGF0ZU1hcCA9IHtcblx0XCJzYXAudWkuZmwudmFyaWFudHMuVmFyaWFudE1hbmFnZW1lbnRcIjogQ29udHJvbFN0YXRlSGFuZGxlcjxWYXJpYW50TWFuYWdlbWVudCwgeyB2YXJpYW50SWQ6IHN0cmluZyB8IG51bGwgfT47XG5cdFwic2FwLmZlLnRlbXBsYXRlcy5MaXN0UmVwb3J0LmNvbnRyb2xzLk11bHRpcGxlTW9kZUNvbnRyb2xcIjogQ29udHJvbFN0YXRlSGFuZGxlcjxNdWx0aXBsZU1vZGVDb250cm9sLCB7IHNlbGVjdGVkS2V5OiBzdHJpbmcgfT47XG5cdFwic2FwLnVpLm1kYy5UYWJsZVwiOiBDb250cm9sU3RhdGVIYW5kbGVyPE1EQ1RhYmxlLCBDb250cm9sU3RhdGU+O1xuXHRcInNhcC5tLlNlZ21lbnRlZEJ1dHRvblwiOiBDb250cm9sU3RhdGVIYW5kbGVyPFNlZ21lbnRlZEJ1dHRvbiwgeyBzZWxlY3RlZEtleTogc3RyaW5nIH0+O1xuXHRcInNhcC5tLlNlbGVjdFwiOiBDb250cm9sU3RhdGVIYW5kbGVyPFNlbGVjdCwgeyBzZWxlY3RlZEtleTogc3RyaW5nIH0+O1xuXHRcInNhcC5mLkR5bmFtaWNQYWdlXCI6IENvbnRyb2xTdGF0ZUhhbmRsZXI8RHluYW1pY1BhZ2UsIHsgaGVhZGVyRXhwYW5kZWQ6IGJvb2xlYW4gfT47XG5cdFwic2FwLnVpLmNvcmUuQ29tcG9uZW50Q29udGFpbmVyXCI6IENvbnRyb2xTdGF0ZUhhbmRsZXI8Q29tcG9uZW50Q29udGFpbmVyLCBvYmplY3Q+O1xuXHRcInNhcC51aS5jb3JlLm12Yy5WaWV3XCI6IENvbnRyb2xTdGF0ZUhhbmRsZXI8RkVWaWV3LCBDb250cm9sU3RhdGU+O1xufTtcbmNvbnN0IGdldFN0YXRlVXRpbCA9IGFzeW5jIGZ1bmN0aW9uICgpOiBQcm9taXNlPHR5cGVvZiBTdGF0ZVV0aWw+IHtcblx0cmV0dXJuIChhd2FpdCBpbXBvcnQoXCJzYXAvdWkvbWRjL3AxM24vU3RhdGVVdGlsXCIpKS5kZWZhdWx0O1xufTtcbmNvbnN0IF9tQ29udHJvbFN0YXRlSGFuZGxlck1hcDogQ29udHJvbFN0YXRlTWFwID0ge1xuXHRcInNhcC51aS5mbC52YXJpYW50cy5WYXJpYW50TWFuYWdlbWVudFwiOiB7XG5cdFx0cmV0cmlldmU6IGZ1bmN0aW9uIChvVk06IFZhcmlhbnRNYW5hZ2VtZW50KTogeyB2YXJpYW50SWQ6IHN0cmluZyB8IG51bGwgfSB7XG5cdFx0XHRyZXR1cm4ge1xuXHRcdFx0XHR2YXJpYW50SWQ6IG9WTS5nZXRDdXJyZW50VmFyaWFudEtleSgpXG5cdFx0XHR9O1xuXHRcdH0sXG5cdFx0YXBwbHk6IGFzeW5jIGZ1bmN0aW9uICh0aGlzOiBWaWV3U3RhdGUsIG9WTTogVmFyaWFudE1hbmFnZW1lbnQsIGNvbnRyb2xTdGF0ZT86IHsgdmFyaWFudElkPzogc3RyaW5nIHwgbnVsbCB9KTogUHJvbWlzZTx2b2lkPiB7XG5cdFx0XHR0cnkge1xuXHRcdFx0XHRpZiAoY29udHJvbFN0YXRlICYmIGNvbnRyb2xTdGF0ZS52YXJpYW50SWQgIT09IHVuZGVmaW5lZCAmJiBjb250cm9sU3RhdGUudmFyaWFudElkICE9PSBvVk0uZ2V0Q3VycmVudFZhcmlhbnRLZXkoKSkge1xuXHRcdFx0XHRcdGNvbnN0IGlzVmFyaWFudElkQXZhaWxhYmxlID0gdGhpcy5fY2hlY2tJZlZhcmlhbnRJZElzQXZhaWxhYmxlKG9WTSwgY29udHJvbFN0YXRlLnZhcmlhbnRJZCk7XG5cdFx0XHRcdFx0bGV0IHNWYXJpYW50UmVmZXJlbmNlO1xuXHRcdFx0XHRcdGlmIChpc1ZhcmlhbnRJZEF2YWlsYWJsZSkge1xuXHRcdFx0XHRcdFx0c1ZhcmlhbnRSZWZlcmVuY2UgPSBjb250cm9sU3RhdGUudmFyaWFudElkO1xuXHRcdFx0XHRcdH0gZWxzZSB7XG5cdFx0XHRcdFx0XHRzVmFyaWFudFJlZmVyZW5jZSA9IG9WTS5nZXRTdGFuZGFyZFZhcmlhbnRLZXkoKTtcblx0XHRcdFx0XHRcdHRoaXMuY29udHJvbHNWYXJpYW50SWRVbmF2YWlsYWJsZS5wdXNoKC4uLm9WTS5nZXRGb3IoKSk7XG5cdFx0XHRcdFx0fVxuXHRcdFx0XHRcdHRyeSB7XG5cdFx0XHRcdFx0XHRjb25zdCBDb250cm9sVmFyaWFudEFwcGx5QVBJID0gKGF3YWl0IGltcG9ydChcInNhcC91aS9mbC9hcHBseS9hcGkvQ29udHJvbFZhcmlhbnRBcHBseUFQSVwiKSkuZGVmYXVsdDtcblx0XHRcdFx0XHRcdGF3YWl0IENvbnRyb2xWYXJpYW50QXBwbHlBUEkuYWN0aXZhdGVWYXJpYW50KHtcblx0XHRcdFx0XHRcdFx0ZWxlbWVudDogb1ZNLFxuXHRcdFx0XHRcdFx0XHR2YXJpYW50UmVmZXJlbmNlOiBzVmFyaWFudFJlZmVyZW5jZSBhcyBzdHJpbmdcblx0XHRcdFx0XHRcdH0pO1xuXHRcdFx0XHRcdFx0YXdhaXQgdGhpcy5fc2V0SW5pdGlhbFN0YXRlc0ZvckRlbHRhQ29tcHV0ZShvVk0pO1xuXHRcdFx0XHRcdH0gY2F0Y2ggKGVycm9yOiB1bmtub3duKSB7XG5cdFx0XHRcdFx0XHRMb2cuZXJyb3IoZXJyb3IgYXMgc3RyaW5nKTtcblx0XHRcdFx0XHRcdHRoaXMuaW52YWxpZGF0ZUluaXRpYWxTdGF0ZUZvckFwcGx5LnB1c2goLi4ub1ZNLmdldEZvcigpKTtcblx0XHRcdFx0XHRcdGF3YWl0IHRoaXMuX3NldEluaXRpYWxTdGF0ZXNGb3JEZWx0YUNvbXB1dGUob1ZNKTtcblx0XHRcdFx0XHR9XG5cdFx0XHRcdH0gZWxzZSB7XG5cdFx0XHRcdFx0dGhpcy5fc2V0SW5pdGlhbFN0YXRlc0ZvckRlbHRhQ29tcHV0ZShvVk0pO1xuXHRcdFx0XHR9XG5cdFx0XHR9IGNhdGNoIChlcnJvcjogdW5rbm93bikge1xuXHRcdFx0XHRMb2cuZXJyb3IoZXJyb3IgYXMgc3RyaW5nKTtcblx0XHRcdH1cblx0XHR9XG5cdH0sXG5cdFwic2FwLmZlLnRlbXBsYXRlcy5MaXN0UmVwb3J0LmNvbnRyb2xzLk11bHRpcGxlTW9kZUNvbnRyb2xcIjoge1xuXHRcdHJldHJpZXZlOiBmdW5jdGlvbiAobXVsdGlwbGVNb2RlQ29udHJvbDogTXVsdGlwbGVNb2RlQ29udHJvbCk6IHsgc2VsZWN0ZWRLZXk6IHN0cmluZyB9IHtcblx0XHRcdHJldHVybiB7XG5cdFx0XHRcdHNlbGVjdGVkS2V5OiBtdWx0aXBsZU1vZGVDb250cm9sLmNvbnRlbnQuZ2V0U2VsZWN0ZWRLZXkoKVxuXHRcdFx0fTtcblx0XHR9LFxuXHRcdGFwcGx5OiBmdW5jdGlvbiAobXVsdGlwbGVNb2RlQ29udHJvbDogTXVsdGlwbGVNb2RlQ29udHJvbCwgY29udHJvbFN0YXRlPzogeyBzZWxlY3RlZEtleTogc3RyaW5nIH0pIHtcblx0XHRcdGlmIChjb250cm9sU3RhdGU/LnNlbGVjdGVkS2V5KSB7XG5cdFx0XHRcdGNvbnN0IHRhYkJhciA9IG11bHRpcGxlTW9kZUNvbnRyb2wuY29udGVudDtcblx0XHRcdFx0aWYgKHRhYkJhci5nZXRJdGVtcygpLmZpbmQoKGl0ZW0pID0+IChpdGVtIGFzIEljb25UYWJGaWx0ZXIpLmdldEtleSgpID09PSBjb250cm9sU3RhdGUuc2VsZWN0ZWRLZXkpKSB7XG5cdFx0XHRcdFx0dGFiQmFyLnNldFNlbGVjdGVkS2V5KGNvbnRyb2xTdGF0ZS5zZWxlY3RlZEtleSk7XG5cdFx0XHRcdH1cblx0XHRcdH1cblx0XHR9XG5cdH0sXG5cdFwic2FwLnVpLm1kYy5UYWJsZVwiOiB7XG5cdFx0cmVmcmVzaEJpbmRpbmc6IGZ1bmN0aW9uIChvVGFibGU6IE1EQ1RhYmxlKSB7XG5cdFx0XHRjb25zdCBvVGFibGVCaW5kaW5nID0gb1RhYmxlLmdldFJvd0JpbmRpbmcoKTtcblx0XHRcdGlmIChvVGFibGVCaW5kaW5nKSB7XG5cdFx0XHRcdGNvbnN0IG9Sb290QmluZGluZyA9IG9UYWJsZUJpbmRpbmcuZ2V0Um9vdEJpbmRpbmcoKTtcblx0XHRcdFx0Y29uc3QgYWdncmVnYXRpb24gPSBvVGFibGVCaW5kaW5nLmdldEFnZ3JlZ2F0aW9uKCkgYXMgeyBoaWVyYXJjaHlRdWFsaWZpZXI/OiBzdHJpbmcgfSB8IHVuZGVmaW5lZDtcblx0XHRcdFx0aWYgKG9Sb290QmluZGluZyA9PT0gb1RhYmxlQmluZGluZyAmJiBhZ2dyZWdhdGlvbj8uaGllcmFyY2h5UXVhbGlmaWVyID09PSB1bmRlZmluZWQpIHtcblx0XHRcdFx0XHQvLyBhYnNvbHV0ZSBiaW5kaW5nIChleGNlcHQgVHJlZVRhYmxlLCB3aGVyZSB3ZSB3YW50IHRvIGtlZXAgZXhwYW5zaW9uIHN0YXRlcylcblx0XHRcdFx0XHRvVGFibGVCaW5kaW5nLnJlZnJlc2goKTtcblx0XHRcdFx0fSBlbHNlIHtcblx0XHRcdFx0XHQvLyByZWxhdGl2ZSBiaW5kaW5nIG9yIFRyZWVUYWJsZVxuXHRcdFx0XHRcdGNvbnN0IG9IZWFkZXJDb250ZXh0ID0gb1RhYmxlQmluZGluZy5nZXRIZWFkZXJDb250ZXh0KCk7XG5cdFx0XHRcdFx0Y29uc3Qgc0dyb3VwSWQgPSBvVGFibGVCaW5kaW5nLmdldEdyb3VwSWQoKTtcblxuXHRcdFx0XHRcdGlmIChvSGVhZGVyQ29udGV4dCkge1xuXHRcdFx0XHRcdFx0b0hlYWRlckNvbnRleHQucmVxdWVzdFNpZGVFZmZlY3RzKFt7ICROYXZpZ2F0aW9uUHJvcGVydHlQYXRoOiBcIlwiIH1dLCBzR3JvdXBJZCk7XG5cdFx0XHRcdFx0fVxuXHRcdFx0XHR9XG5cdFx0XHR9IGVsc2Uge1xuXHRcdFx0XHRMb2cuaW5mbyhgVGFibGU6ICR7b1RhYmxlLmdldElkKCl9IHdhcyBub3QgcmVmcmVzaGVkLiBObyBiaW5kaW5nIGZvdW5kIWApO1xuXHRcdFx0fVxuXHRcdH1cblx0fSxcblx0XCJzYXAubS5TZWdtZW50ZWRCdXR0b25cIjoge1xuXHRcdHJldHJpZXZlOiBmdW5jdGlvbiAob1NlZ21lbnRlZEJ1dHRvbjogU2VnbWVudGVkQnV0dG9uKTogeyBzZWxlY3RlZEtleTogc3RyaW5nIH0ge1xuXHRcdFx0cmV0dXJuIHtcblx0XHRcdFx0c2VsZWN0ZWRLZXk6IG9TZWdtZW50ZWRCdXR0b24uZ2V0U2VsZWN0ZWRLZXkoKVxuXHRcdFx0fTtcblx0XHR9LFxuXHRcdGFwcGx5OiBmdW5jdGlvbiAodGhpczogVmlld1N0YXRlLCBvU2VnbWVudGVkQnV0dG9uOiBTZWdtZW50ZWRCdXR0b24sIG9Db250cm9sU3RhdGU/OiB7IHNlbGVjdGVkS2V5OiBzdHJpbmcgfSk6IHZvaWQge1xuXHRcdFx0aWYgKG9Db250cm9sU3RhdGU/LnNlbGVjdGVkS2V5ICYmIG9Db250cm9sU3RhdGUuc2VsZWN0ZWRLZXkgIT09IG9TZWdtZW50ZWRCdXR0b24uZ2V0U2VsZWN0ZWRLZXkoKSkge1xuXHRcdFx0XHRvU2VnbWVudGVkQnV0dG9uLnNldFNlbGVjdGVkS2V5KG9Db250cm9sU3RhdGUuc2VsZWN0ZWRLZXkpO1xuXHRcdFx0XHRpZiAob1NlZ21lbnRlZEJ1dHRvbi5nZXRQYXJlbnQoKT8uaXNBKFwic2FwLnVpLm1kYy5BY3Rpb25Ub29sYmFyXCIpKSB7XG5cdFx0XHRcdFx0b1NlZ21lbnRlZEJ1dHRvbi5maXJlRXZlbnQoXCJzZWxlY3Rpb25DaGFuZ2VcIik7XG5cdFx0XHRcdH1cblx0XHRcdH1cblx0XHR9XG5cdH0sXG5cdFwic2FwLm0uU2VsZWN0XCI6IHtcblx0XHRyZXRyaWV2ZTogZnVuY3Rpb24gKG9TZWxlY3Q6IFNlbGVjdCk6IHsgc2VsZWN0ZWRLZXk6IHN0cmluZyB9IHtcblx0XHRcdHJldHVybiB7XG5cdFx0XHRcdHNlbGVjdGVkS2V5OiBvU2VsZWN0LmdldFNlbGVjdGVkS2V5KClcblx0XHRcdH07XG5cdFx0fSxcblx0XHRhcHBseTogZnVuY3Rpb24gKHRoaXM6IFZpZXdTdGF0ZSwgb1NlbGVjdDogU2VsZWN0LCBvQ29udHJvbFN0YXRlPzogeyBzZWxlY3RlZEtleTogc3RyaW5nIH0pOiB2b2lkIHtcblx0XHRcdGlmIChvQ29udHJvbFN0YXRlPy5zZWxlY3RlZEtleSAmJiBvQ29udHJvbFN0YXRlLnNlbGVjdGVkS2V5ICE9PSBvU2VsZWN0LmdldFNlbGVjdGVkS2V5KCkpIHtcblx0XHRcdFx0b1NlbGVjdC5zZXRTZWxlY3RlZEtleShvQ29udHJvbFN0YXRlLnNlbGVjdGVkS2V5KTtcblx0XHRcdFx0aWYgKG9TZWxlY3QuZ2V0UGFyZW50KCk/LmlzQShcInNhcC51aS5tZGMuQWN0aW9uVG9vbGJhclwiKSkge1xuXHRcdFx0XHRcdG9TZWxlY3QuZmlyZUV2ZW50KFwiY2hhbmdlXCIpO1xuXHRcdFx0XHR9XG5cdFx0XHR9XG5cdFx0fVxuXHR9LFxuXHRcInNhcC5mLkR5bmFtaWNQYWdlXCI6IHtcblx0XHRyZXRyaWV2ZTogZnVuY3Rpb24gKG9EeW5hbWljUGFnZTogRHluYW1pY1BhZ2UpOiB7IGhlYWRlckV4cGFuZGVkOiBib29sZWFuIH0ge1xuXHRcdFx0cmV0dXJuIHtcblx0XHRcdFx0aGVhZGVyRXhwYW5kZWQ6IG9EeW5hbWljUGFnZS5nZXRIZWFkZXJFeHBhbmRlZCgpXG5cdFx0XHR9O1xuXHRcdH0sXG5cdFx0YXBwbHk6IGZ1bmN0aW9uIChvRHluYW1pY1BhZ2U6IER5bmFtaWNQYWdlLCBvQ29udHJvbFN0YXRlPzogeyBoZWFkZXJFeHBhbmRlZDogYm9vbGVhbiB9KTogdm9pZCB7XG5cdFx0XHRpZiAob0NvbnRyb2xTdGF0ZSkge1xuXHRcdFx0XHRvRHluYW1pY1BhZ2Uuc2V0SGVhZGVyRXhwYW5kZWQob0NvbnRyb2xTdGF0ZS5oZWFkZXJFeHBhbmRlZCk7XG5cdFx0XHR9XG5cdFx0fVxuXHR9LFxuXHRcInNhcC51aS5jb3JlLm12Yy5WaWV3XCI6IHtcblx0XHRyZXRyaWV2ZTogZnVuY3Rpb24gKG9WaWV3OiBGRVZpZXcpIHtcblx0XHRcdGNvbnN0IG9Db250cm9sbGVyID0gb1ZpZXcuZ2V0Q29udHJvbGxlcigpO1xuXHRcdFx0aWYgKG9Db250cm9sbGVyICYmIG9Db250cm9sbGVyLnZpZXdTdGF0ZSkge1xuXHRcdFx0XHRyZXR1cm4gb0NvbnRyb2xsZXIudmlld1N0YXRlLnJldHJpZXZlVmlld1N0YXRlKCk7XG5cdFx0XHR9XG5cdFx0XHRyZXR1cm4ge307XG5cdFx0fSxcblx0XHRhcHBseTogYXN5bmMgZnVuY3Rpb24gKG9WaWV3OiBGRVZpZXcsIG9Db250cm9sU3RhdGU6IENvbnRyb2xTdGF0ZSwgb05hdlBhcmFtZXRlcnM/OiBOYXZpZ2F0aW9uUGFyYW1ldGVyLCBza2lwTWVyZ2U/OiBib29sZWFuKSB7XG5cdFx0XHRjb25zdCBvQ29udHJvbGxlciA9IG9WaWV3LmdldENvbnRyb2xsZXIoKTtcblx0XHRcdGlmIChvQ29udHJvbGxlciAmJiBvQ29udHJvbGxlci52aWV3U3RhdGUgJiYgb05hdlBhcmFtZXRlcnMpIHtcblx0XHRcdFx0cmV0dXJuIG9Db250cm9sbGVyLnZpZXdTdGF0ZS5hcHBseVZpZXdTdGF0ZShvQ29udHJvbFN0YXRlLCBvTmF2UGFyYW1ldGVycywgc2tpcE1lcmdlKTtcblx0XHRcdH1cblx0XHR9LFxuXHRcdHJlZnJlc2hCaW5kaW5nOiBhc3luYyBmdW5jdGlvbiAob1ZpZXc6IEZFVmlldykge1xuXHRcdFx0Y29uc3Qgb0NvbnRyb2xsZXIgPSBvVmlldy5nZXRDb250cm9sbGVyKCk7XG5cdFx0XHRpZiAob0NvbnRyb2xsZXIgJiYgb0NvbnRyb2xsZXIudmlld1N0YXRlKSB7XG5cdFx0XHRcdHJldHVybiBvQ29udHJvbGxlci52aWV3U3RhdGUucmVmcmVzaFZpZXdCaW5kaW5ncygpO1xuXHRcdFx0fVxuXHRcdH1cblx0fSxcblx0XCJzYXAudWkuY29yZS5Db21wb25lbnRDb250YWluZXJcIjoge1xuXHRcdHJldHJpZXZlOiBhc3luYyBmdW5jdGlvbiAodGhpczogVmlld1N0YXRlLCBvQ29tcG9uZW50Q29udGFpbmVyOiBDb21wb25lbnRDb250YWluZXIpOiBQcm9taXNlPG9iamVjdD4ge1xuXHRcdFx0Y29uc3Qgb0NvbXBvbmVudCA9IG9Db21wb25lbnRDb250YWluZXIuZ2V0Q29tcG9uZW50SW5zdGFuY2UoKTtcblx0XHRcdGlmIChvQ29tcG9uZW50KSB7XG5cdFx0XHRcdHJldHVybiB0aGlzLnJldHJpZXZlQ29udHJvbFN0YXRlKG9Db21wb25lbnQuZ2V0Um9vdENvbnRyb2woKSk7XG5cdFx0XHR9XG5cdFx0XHRyZXR1cm4ge30gYXMgb2JqZWN0O1xuXHRcdH0sXG5cdFx0YXBwbHk6IGFzeW5jIGZ1bmN0aW9uIChcblx0XHRcdHRoaXM6IFZpZXdTdGF0ZSxcblx0XHRcdG9Db21wb25lbnRDb250YWluZXI6IENvbXBvbmVudENvbnRhaW5lcixcblx0XHRcdG9Db250cm9sU3RhdGU6IG9iamVjdCxcblx0XHRcdG9OYXZQYXJhbWV0ZXJzPzogTmF2aWdhdGlvblBhcmFtZXRlclxuXHRcdCk6IFByb21pc2U8dm9pZD4ge1xuXHRcdFx0Y29uc3Qgb0NvbXBvbmVudCA9IG9Db21wb25lbnRDb250YWluZXIuZ2V0Q29tcG9uZW50SW5zdGFuY2UoKTtcblx0XHRcdGlmIChvQ29tcG9uZW50KSB7XG5cdFx0XHRcdHJldHVybiB0aGlzLmFwcGx5Q29udHJvbFN0YXRlKG9Db21wb25lbnQuZ2V0Um9vdENvbnRyb2woKSwgb0NvbnRyb2xTdGF0ZSwgb05hdlBhcmFtZXRlcnMpO1xuXHRcdFx0fVxuXHRcdH1cblx0fVxufTtcbi8qKlxuICogQSBjb250cm9sbGVyIGV4dGVuc2lvbiBvZmZlcmluZyBob29rcyBmb3Igc3RhdGUgaGFuZGxpbmdcbiAqXG4gKiBJZiB5b3UgbmVlZCB0byBtYWludGFpbiBhIHNwZWNpZmljIHN0YXRlIGZvciB5b3VyIGFwcGxpY2F0aW9uLCB5b3UgY2FuIHVzZSB0aGUgY29udHJvbGxlciBleHRlbnNpb24uXG4gKiBAaGlkZWNvbnN0cnVjdG9yXG4gKiBAcHVibGljXG4gKiBAc2luY2UgMS44NS4wXG4gKi9cbkBkZWZpbmVVSTVDbGFzcyhcInNhcC5mZS5jb3JlLmNvbnRyb2xsZXJleHRlbnNpb25zLlZpZXdTdGF0ZVwiKVxuY2xhc3MgVmlld1N0YXRlIGV4dGVuZHMgQ29udHJvbGxlckV4dGVuc2lvbiB7XG5cdHByaXZhdGUgX2lSZXRyaWV2aW5nU3RhdGVDb3VudGVyOiBudW1iZXI7XG5cblx0cHJpdmF0ZSBfcEluaXRpYWxTdGF0ZUFwcGxpZWQ6IFByb21pc2U8dW5rbm93bj47XG5cblx0cHJpdmF0ZSBfcEluaXRpYWxTdGF0ZUFwcGxpZWRSZXNvbHZlPzogRnVuY3Rpb247XG5cblx0cHVibGljIGJhc2UhOiBQYWdlQ29udHJvbGxlcjtcblxuXHRpbml0aWFsQ29udHJvbFN0YXRlc01hcHBlcjogUmVjb3JkPHN0cmluZywgdW5rbm93bj4gPSB7fTtcblxuXHRjb250cm9sc1ZhcmlhbnRJZFVuYXZhaWxhYmxlOiBzdHJpbmdbXSA9IFtdO1xuXG5cdGludmFsaWRhdGVJbml0aWFsU3RhdGVGb3JBcHBseTogc3RyaW5nW10gPSBbXTtcblxuXHR2aWV3U3RhdGVDb250cm9sczogTWFuYWdlZE9iamVjdFtdID0gW107XG5cblx0c3RhdGVDb250cmlidXRvcnM6IChNYW5hZ2VkT2JqZWN0ICYgSVZpZXdTdGF0ZUNvbnRyaWJ1dG9yPHVua25vd24+KVtdID0gW107XG5cblx0X2N1cnJlbnRWaWV3U3RhdGU/OiBSZWNvcmQ8c3RyaW5nLCB1bmtub3duPjtcblxuXHRjb25maWdPZlN0YXRlQXBwbHk/OiB7XG5cdFx0c2tpcE1lcmdlPzogYm9vbGVhbiB8IHVuZGVmaW5lZDtcblx0XHRuYXZUeXBlUGFyYW1ldGVycz86IE5hdlBhcmFtZXRlcnM7XG5cdFx0c3RhdGU/OiBSZWNvcmQ8c3RyaW5nLCB1bmtub3duPjtcblx0fTtcblxuXHRwcml2YXRlIHVwZGF0ZUFwcFN0YXRlVGltZXI6IG51bWJlciB8IHVuZGVmaW5lZDtcblxuXHQvKipcblx0ICogQ29uc3RydWN0b3IuXG5cdCAqL1xuXHRjb25zdHJ1Y3RvcigpIHtcblx0XHRzdXBlcigpO1xuXHRcdHRoaXMuX2lSZXRyaWV2aW5nU3RhdGVDb3VudGVyID0gMDtcblx0XHR0aGlzLl9wSW5pdGlhbFN0YXRlQXBwbGllZCA9IG5ldyBQcm9taXNlKChyZXNvbHZlKSA9PiB7XG5cdFx0XHR0aGlzLl9wSW5pdGlhbFN0YXRlQXBwbGllZFJlc29sdmUgPSByZXNvbHZlO1xuXHRcdH0pO1xuXHR9XG5cblx0QHB1YmxpY0V4dGVuc2lvbigpXG5cdEBmaW5hbEV4dGVuc2lvbigpXG5cdGFzeW5jIHJlZnJlc2hWaWV3QmluZGluZ3MoKTogUHJvbWlzZTx2b2lkPiB7XG5cdFx0Y29uc3QgYUNvbnRyb2xzID0gYXdhaXQgdGhpcy5jb2xsZWN0UmVzdWx0cyh0aGlzLmJhc2Uudmlld1N0YXRlLmFkYXB0QmluZGluZ1JlZnJlc2hDb250cm9scyk7XG5cdFx0bGV0IG9Qcm9taXNlQ2hhaW4gPSBQcm9taXNlLnJlc29sdmUoKTtcblx0XHRhQ29udHJvbHNcblx0XHRcdC5maWx0ZXIoKG9Db250cm9sKSA9PiB7XG5cdFx0XHRcdHJldHVybiBvQ29udHJvbCAmJiBvQ29udHJvbC5pc0EgJiYgb0NvbnRyb2wuaXNBPE1hbmFnZWRPYmplY3Q+KFwic2FwLnVpLmJhc2UuTWFuYWdlZE9iamVjdFwiKTtcblx0XHRcdH0pXG5cdFx0XHQuZm9yRWFjaCgob0NvbnRyb2w6IE1hbmFnZWRPYmplY3QpID0+IHtcblx0XHRcdFx0b1Byb21pc2VDaGFpbiA9IG9Qcm9taXNlQ2hhaW4udGhlbih0aGlzLnJlZnJlc2hDb250cm9sQmluZGluZy5iaW5kKHRoaXMsIG9Db250cm9sKSk7XG5cdFx0XHR9KTtcblx0XHRyZXR1cm4gb1Byb21pc2VDaGFpbjtcblx0fVxuXG5cdC8qKlxuXHQgKiBUaGlzIGZ1bmN0aW9uIHNob3VsZCBhZGQgYWxsIGNvbnRyb2xzIHJlbGV2YW50IGZvciByZWZyZXNoaW5nIHRvIHRoZSBwcm92aWRlZCBjb250cm9sIGFycmF5LlxuXHQgKlxuXHQgKiBUaGlzIGZ1bmN0aW9uIGlzIG1lYW50IHRvIGJlIGluZGl2aWR1YWxseSBvdmVycmlkZGVuIGJ5IGNvbnN1bWluZyBjb250cm9sbGVycywgYnV0IG5vdCB0byBiZSBjYWxsZWQgZGlyZWN0bHkuXG5cdCAqIFRoZSBvdmVycmlkZSBleGVjdXRpb24gaXM6IHtAbGluayBzYXAudWkuY29yZS5tdmMuT3ZlcnJpZGVFeGVjdXRpb24uQWZ0ZXJ9LlxuXHQgKiBAcGFyYW0gYUNvbGxlY3RlZENvbnRyb2xzIFRoZSBjb2xsZWN0ZWQgY29udHJvbHNcblx0ICogQHByb3RlY3RlZFxuXHQgKi9cblx0QHB1YmxpY0V4dGVuc2lvbigpXG5cdEBleHRlbnNpYmxlKE92ZXJyaWRlRXhlY3V0aW9uLkFmdGVyKVxuXHQvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgQHR5cGVzY3JpcHQtZXNsaW50L25vLXVudXNlZC12YXJzXG5cdGFkYXB0QmluZGluZ1JlZnJlc2hDb250cm9scyhhQ29sbGVjdGVkQ29udHJvbHM6IE1hbmFnZWRPYmplY3RbXSk6IHZvaWQge1xuXHRcdC8vIHRvIGJlIG92ZXJyaWRlblxuXHR9XG5cblx0QHByaXZhdGVFeHRlbnNpb24oKVxuXHRAZmluYWxFeHRlbnNpb24oKVxuXHRhc3luYyByZWZyZXNoQ29udHJvbEJpbmRpbmcob0NvbnRyb2w6IE1hbmFnZWRPYmplY3QpOiBQcm9taXNlPHZvaWQ+IHtcblx0XHRjb25zdCBvQ29udHJvbFJlZnJlc2hCaW5kaW5nSGFuZGxlciA9IHRoaXMuZ2V0Q29udHJvbFJlZnJlc2hCaW5kaW5nSGFuZGxlcihvQ29udHJvbCk7XG5cdFx0bGV0IG9Qcm9taXNlQ2hhaW4gPSBQcm9taXNlLnJlc29sdmUoKTtcblx0XHRpZiAodHlwZW9mIG9Db250cm9sUmVmcmVzaEJpbmRpbmdIYW5kbGVyLnJlZnJlc2hCaW5kaW5nICE9PSBcImZ1bmN0aW9uXCIpIHtcblx0XHRcdExvZy5pbmZvKGByZWZyZXNoQmluZGluZyBoYW5kbGVyIGZvciBjb250cm9sOiAke29Db250cm9sLmdldE1ldGFkYXRhKCkuZ2V0TmFtZSgpfSBpcyBub3QgcHJvdmlkZWRgKTtcblx0XHR9IGVsc2Uge1xuXHRcdFx0b1Byb21pc2VDaGFpbiA9IG9Qcm9taXNlQ2hhaW4udGhlbihvQ29udHJvbFJlZnJlc2hCaW5kaW5nSGFuZGxlci5yZWZyZXNoQmluZGluZy5iaW5kKHRoaXMsIG9Db250cm9sKSk7XG5cdFx0fVxuXHRcdHJldHVybiBvUHJvbWlzZUNoYWluO1xuXHR9XG5cblx0LyoqXG5cdCAqIFJldHVybnMgYSBtYXAgb2YgPGNvZGU+cmVmcmVzaEJpbmRpbmc8L2NvZGU+IGZ1bmN0aW9uIGZvciBhIGNlcnRhaW4gY29udHJvbC5cblx0ICogQHBhcmFtIG9Db250cm9sIFRoZSBjb250cm9sIHRvIGdldCBzdGF0ZSBoYW5kbGVyIGZvclxuXHQgKiBAcmV0dXJucyBBIHBsYWluIG9iamVjdCB3aXRoIG9uZSBmdW5jdGlvbjogPGNvZGU+cmVmcmVzaEJpbmRpbmc8L2NvZGU+XG5cdCAqL1xuXG5cdEBwcml2YXRlRXh0ZW5zaW9uKClcblx0QGZpbmFsRXh0ZW5zaW9uKClcblx0Z2V0Q29udHJvbFJlZnJlc2hCaW5kaW5nSGFuZGxlcihvQ29udHJvbDogTWFuYWdlZE9iamVjdCk6IHtcblx0XHRyZWZyZXNoQmluZGluZz86IChvQ29udHJvbDogTWFuYWdlZE9iamVjdCkgPT4gdm9pZDtcblx0fSB7XG5cdFx0Y29uc3Qgb1JlZnJlc2hCaW5kaW5nSGFuZGxlcjoge1xuXHRcdFx0cmVmcmVzaEJpbmRpbmc/OiAob0NvbnRyb2w6IE1hbmFnZWRPYmplY3QpID0+IHZvaWQ7XG5cdFx0fSA9IHt9O1xuXHRcdGlmIChvQ29udHJvbCkge1xuXHRcdFx0Zm9yIChjb25zdCBzVHlwZSBpbiBfbUNvbnRyb2xTdGF0ZUhhbmRsZXJNYXApIHtcblx0XHRcdFx0aWYgKG9Db250cm9sLmlzQShzVHlwZSkpIHtcblx0XHRcdFx0XHQvLyBwYXNzIG9ubHkgdGhlIHJlZnJlc2hCaW5kaW5nIGhhbmRsZXIgaW4gYW4gb2JqZWN0IHNvIHRoYXQgOlxuXHRcdFx0XHRcdC8vIDEuIEFwcGxpY2F0aW9uIGhhcyBhY2Nlc3Mgb25seSB0byByZWZyZXNoQmluZGluZyBhbmQgbm90IGFwcGx5IGFuZCByZXRlcml2ZSBhdCB0aGlzIHN0YWdlXG5cdFx0XHRcdFx0Ly8gMi4gQXBwbGljYXRpb24gbW9kaWZpY2F0aW9ucyB0byB0aGUgb2JqZWN0IHdpbGwgYmUgcmVmbGVjdGVkIGhlcmUgKGFzIHdlIHBhc3MgYnkgcmVmZXJlbmNlKVxuXHRcdFx0XHRcdG9SZWZyZXNoQmluZGluZ0hhbmRsZXJbXCJyZWZyZXNoQmluZGluZ1wiXSA9XG5cdFx0XHRcdFx0XHQoX21Db250cm9sU3RhdGVIYW5kbGVyTWFwW3NUeXBlIGFzIGtleW9mIENvbnRyb2xTdGF0ZU1hcF0ucmVmcmVzaEJpbmRpbmcgYXMgKG9Db250cm9sOiBNYW5hZ2VkT2JqZWN0KSA9PiB2b2lkKSB8fFxuXHRcdFx0XHRcdFx0e307XG5cdFx0XHRcdFx0YnJlYWs7XG5cdFx0XHRcdH1cblx0XHRcdH1cblx0XHR9XG5cdFx0dGhpcy5iYXNlLnZpZXdTdGF0ZS5hZGFwdEJpbmRpbmdSZWZyZXNoSGFuZGxlcihvQ29udHJvbCwgb1JlZnJlc2hCaW5kaW5nSGFuZGxlcik7XG5cdFx0cmV0dXJuIG9SZWZyZXNoQmluZGluZ0hhbmRsZXI7XG5cdH1cblxuXHQvKipcblx0ICogQ3VzdG9taXplIHRoZSA8Y29kZT5yZWZyZXNoQmluZGluZzwvY29kZT4gZnVuY3Rpb24gZm9yIGEgY2VydGFpbiBjb250cm9sLlxuXHQgKlxuXHQgKiBUaGlzIGZ1bmN0aW9uIGlzIG1lYW50IHRvIGJlIGluZGl2aWR1YWxseSBvdmVycmlkZGVuIGJ5IGNvbnN1bWluZyBjb250cm9sbGVycywgYnV0IG5vdCB0byBiZSBjYWxsZWQgZGlyZWN0bHkuXG5cdCAqIFRoZSBvdmVycmlkZSBleGVjdXRpb24gaXM6IHtAbGluayBzYXAudWkuY29yZS5tdmMuT3ZlcnJpZGVFeGVjdXRpb24uQWZ0ZXJ9LlxuXHQgKiBAcGFyYW0gX29Db250cm9sIFRoZSBjb250cm9sIGZvciB3aGljaCB0aGUgcmVmcmVzaCBoYW5kbGVyIGlzIGFkYXB0ZWQuXG5cdCAqIEBwYXJhbSBfb0NvbnRyb2xIYW5kbGVyIEEgcGxhaW4gb2JqZWN0IHdoaWNoIGNhbiBoYXZlIG9uZSBmdW5jdGlvbjogPGNvZGU+cmVmcmVzaEJpbmRpbmc8L2NvZGU+XG5cdCAqIEBwYXJhbSBfb0NvbnRyb2xIYW5kbGVyLnJlZnJlc2hCaW5kaW5nXG5cdCAqIEBwcm90ZWN0ZWRcblx0ICovXG5cdEBwdWJsaWNFeHRlbnNpb24oKVxuXHRAZXh0ZW5zaWJsZShPdmVycmlkZUV4ZWN1dGlvbi5BZnRlcilcblx0YWRhcHRCaW5kaW5nUmVmcmVzaEhhbmRsZXIoXG5cdFx0X29Db250cm9sOiBNYW5hZ2VkT2JqZWN0LFxuXHRcdF9vQ29udHJvbEhhbmRsZXI6IHtcblx0XHRcdHJlZnJlc2hCaW5kaW5nPzogKG9Db250cm9sOiBNYW5hZ2VkT2JqZWN0KSA9PiB2b2lkO1xuXHRcdH1cblx0KTogdm9pZCB7XG5cdFx0Ly8gdG8gYmUgb3ZlcnJpZGVuXG5cdH1cblxuXHQvKipcblx0ICogQ2FsbGVkIHdoZW4gdGhlIGFwcGxpY2F0aW9uIGlzIHN1c3BlbmRlZCBkdWUgdG8ga2VlcC1hbGl2ZSBtb2RlLlxuXHQgKiBAcHVibGljXG5cdCAqL1xuXHRAcHVibGljRXh0ZW5zaW9uKClcblx0QGV4dGVuc2libGUoT3ZlcnJpZGVFeGVjdXRpb24uQWZ0ZXIpXG5cdG9uU3VzcGVuZCgpOiB2b2lkIHtcblx0XHQvLyB0byBiZSBvdmVycmlkZW5cblx0fVxuXG5cdC8qKlxuXHQgKiBDYWxsZWQgd2hlbiB0aGUgYXBwbGljYXRpb24gaXMgcmVzdG9yZWQgZHVlIHRvIGtlZXAtYWxpdmUgbW9kZS5cblx0ICogQHB1YmxpY1xuXHQgKi9cblx0QHB1YmxpY0V4dGVuc2lvbigpXG5cdEBleHRlbnNpYmxlKE92ZXJyaWRlRXhlY3V0aW9uLkFmdGVyKVxuXHRvblJlc3RvcmUoKTogdm9pZCB7XG5cdFx0Ly8gdG8gYmUgb3ZlcnJpZGVuXG5cdH1cblxuXHQvKipcblx0ICogRGVzdHJ1Y3RvciBtZXRob2QgZm9yIG9iamVjdHMuXG5cdCAqL1xuXHRkZXN0cm95KCk6IHZvaWQge1xuXHRcdGRlbGV0ZSB0aGlzLl9wSW5pdGlhbFN0YXRlQXBwbGllZFJlc29sdmU7XG5cdFx0c3VwZXIuZGVzdHJveSgpO1xuXHR9XG5cblx0LyoqXG5cdCAqIEhlbHBlciBmdW5jdGlvbiB0byBlbmFibGUgbXVsdGkgb3ZlcnJpZGUuIEl0IGlzIGFkZGluZyBhbiBhZGRpdGlvbmFsIHBhcmFtZXRlciAoYXJyYXkpIHRvIHRoZSBwcm92aWRlZFxuXHQgKiBmdW5jdGlvbiAoYW5kIGl0cyBwYXJhbWV0ZXJzKSwgdGhhdCB3aWxsIGJlIGV2YWx1YXRlZCB2aWEgPGNvZGU+UHJvbWlzZS5hbGw8L2NvZGU+LlxuXHQgKiBAcGFyYW0gZm5DYWxsIFRoZSBmdW5jdGlvbiB0byBiZSBjYWxsZWRcblx0ICogQHBhcmFtIGFyZ3Ncblx0ICogQHJldHVybnMgQSBwcm9taXNlIHRvIGJlIHJlc29sdmVkIHdpdGggdGhlIHJlc3VsdCBvZiBhbGwgb3ZlcnJpZGVzXG5cdCAqL1xuXHRAcHJpdmF0ZUV4dGVuc2lvbigpXG5cdEBmaW5hbEV4dGVuc2lvbigpXG5cdGFzeW5jIGNvbGxlY3RSZXN1bHRzKGZuQ2FsbDogRnVuY3Rpb24sIC4uLmFyZ3M6IHVua25vd25bXSk6IFByb21pc2U8Q29udHJvbFtdPiB7XG5cdFx0Y29uc3QgYVJlc3VsdHM6IENvbnRyb2xbXSA9IFtdO1xuXHRcdGFyZ3MucHVzaChhUmVzdWx0cyk7XG5cdFx0Zm5DYWxsLmFwcGx5KHRoaXMsIGFyZ3MpO1xuXHRcdHJldHVybiBQcm9taXNlLmFsbChhUmVzdWx0cyk7XG5cdH1cblxuXHQvKipcblx0ICogQ3VzdG9taXplIHRoZSA8Y29kZT5yZXRyaWV2ZTwvY29kZT4gYW5kIDxjb2RlPmFwcGx5PC9jb2RlPiBmdW5jdGlvbnMgZm9yIGEgY2VydGFpbiBjb250cm9sLlxuXHQgKlxuXHQgKiBUaGlzIGZ1bmN0aW9uIGlzIG1lYW50IHRvIGJlIGluZGl2aWR1YWxseSBvdmVycmlkZGVuIGJ5IGNvbnN1bWluZyBjb250cm9sbGVycywgYnV0IG5vdCB0byBiZSBjYWxsZWQgZGlyZWN0bHkuXG5cdCAqIFRoZSBvdmVycmlkZSBleGVjdXRpb24gaXM6IHtAbGluayBzYXAudWkuY29yZS5tdmMuT3ZlcnJpZGVFeGVjdXRpb24uQWZ0ZXJ9LlxuXHQgKiBAcGFyYW0gb0NvbnRyb2wgVGhlIGNvbnRyb2wgdG8gZ2V0IHN0YXRlIGhhbmRsZXIgZm9yXG5cdCAqIEBwYXJhbSBhQ29udHJvbEhhbmRsZXIgQSBsaXN0IG9mIHBsYWluIG9iamVjdHMgd2l0aCB0d28gZnVuY3Rpb25zOiA8Y29kZT5yZXRyaWV2ZTwvY29kZT4gYW5kIDxjb2RlPmFwcGx5PC9jb2RlPlxuXHQgKiBAcHJvdGVjdGVkXG5cdCAqL1xuXHRAcHVibGljRXh0ZW5zaW9uKClcblx0QGV4dGVuc2libGUoT3ZlcnJpZGVFeGVjdXRpb24uQWZ0ZXIpXG5cdC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBAdHlwZXNjcmlwdC1lc2xpbnQvbm8tdW51c2VkLXZhcnNcblx0YWRhcHRDb250cm9sU3RhdGVIYW5kbGVyKG9Db250cm9sOiBNYW5hZ2VkT2JqZWN0LCBhQ29udHJvbEhhbmRsZXI6IG9iamVjdFtdKTogdm9pZCB7XG5cdFx0Ly8gdG8gYmUgb3ZlcnJpZGRlbiBpZiBuZWVkZWRcblx0fVxuXG5cdC8qKlxuXHQgKiBSZXR1cm5zIGEgbWFwIG9mIDxjb2RlPnJldHJpZXZlPC9jb2RlPiBhbmQgPGNvZGU+YXBwbHk8L2NvZGU+IGZ1bmN0aW9ucyBmb3IgYSBjZXJ0YWluIGNvbnRyb2wuXG5cdCAqIEBwYXJhbSBvQ29udHJvbCBUaGUgY29udHJvbCB0byBnZXQgc3RhdGUgaGFuZGxlciBmb3Jcblx0ICogQHJldHVybnMgQSBwbGFpbiBvYmplY3Qgd2l0aCB0d28gZnVuY3Rpb25zOiA8Y29kZT5yZXRyaWV2ZTwvY29kZT4gYW5kIDxjb2RlPmFwcGx5PC9jb2RlPlxuXHQgKi9cblx0QHByaXZhdGVFeHRlbnNpb24oKVxuXHRAZmluYWxFeHRlbnNpb24oKVxuXHRnZXRDb250cm9sU3RhdGVIYW5kbGVyKG9Db250cm9sOiBNYW5hZ2VkT2JqZWN0KTogQ29udHJvbFN0YXRlSGFuZGxlcjxNYW5hZ2VkT2JqZWN0LCBvYmplY3Q+W10ge1xuXHRcdGNvbnN0IGFJbnRlcm5hbENvbnRyb2xTdGF0ZUhhbmRsZXI6IENvbnRyb2xTdGF0ZUhhbmRsZXI8TWFuYWdlZE9iamVjdCwgb2JqZWN0PltdID0gW10sXG5cdFx0XHRhQ3VzdG9tQ29udHJvbFN0YXRlSGFuZGxlcjogQ29udHJvbFN0YXRlSGFuZGxlcjxNYW5hZ2VkT2JqZWN0LCBvYmplY3Q+W10gPSBbXTtcblx0XHRpZiAob0NvbnRyb2wpIHtcblx0XHRcdGlmIChcblx0XHRcdFx0b0NvbnRyb2wuaXNBPElWaWV3U3RhdGVDb250cmlidXRvcjxvYmplY3Q+PihcInNhcC5mZS5jb3JlLmNvbnRyb2xsZXJleHRlbnNpb25zLnZpZXdTdGF0ZS5JVmlld1N0YXRlQ29udHJpYnV0b3JcIikgJiZcblx0XHRcdFx0b0NvbnRyb2wucmV0cmlldmVTdGF0ZSAmJlxuXHRcdFx0XHRvQ29udHJvbC5hcHBseVN0YXRlXG5cdFx0XHQpIHtcblx0XHRcdFx0YUludGVybmFsQ29udHJvbFN0YXRlSGFuZGxlci5wdXNoKHtcblx0XHRcdFx0XHQvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgQHR5cGVzY3JpcHQtZXNsaW50L3JlcXVpcmUtYXdhaXRcblx0XHRcdFx0XHRyZXRyaWV2ZTogYXN5bmMgKF9jb250cm9sKSA9PiBvQ29udHJvbC5yZXRyaWV2ZVN0YXRlLmJpbmQob0NvbnRyb2wpKCksXG5cblx0XHRcdFx0XHRhcHBseTogYXN5bmMgKFxuXHRcdFx0XHRcdFx0X2NvbnRyb2w6IE1hbmFnZWRPYmplY3QsXG5cdFx0XHRcdFx0XHRjb250cm9sU3RhdGU/OiBvYmplY3QsXG5cdFx0XHRcdFx0XHRvTmF2UGFyYW1ldGVycz86IE5hdmlnYXRpb25QYXJhbWV0ZXIsXG5cdFx0XHRcdFx0XHRza2lwTWVyZ2U/OiBib29sZWFuXG5cdFx0XHRcdFx0XHQvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgQHR5cGVzY3JpcHQtZXNsaW50L3JlcXVpcmUtYXdhaXRcblx0XHRcdFx0XHQpID0+IHtcblx0XHRcdFx0XHRcdGNvbnN0IHNob3VsZEFwcGx5RGlmZlN0YXRlID1cblx0XHRcdFx0XHRcdFx0IXRoaXMuaW52YWxpZGF0ZUluaXRpYWxTdGF0ZUZvckFwcGx5LmluY2x1ZGVzKG9Db250cm9sLmdldElkKCkpICYmXG5cdFx0XHRcdFx0XHRcdCF0aGlzLmNvbnRyb2xzVmFyaWFudElkVW5hdmFpbGFibGUuaW5jbHVkZXMob0NvbnRyb2wuZ2V0SWQoKSkgJiZcblx0XHRcdFx0XHRcdFx0b05hdlBhcmFtZXRlcnM/Lm5hdmlnYXRpb25UeXBlICE9PSBOYXZUeXBlLmh5YnJpZCAmJlxuXHRcdFx0XHRcdFx0XHRza2lwTWVyZ2UgIT09IHRydWU7XG5cdFx0XHRcdFx0XHRpZiAoIWNvbnRyb2xTdGF0ZSkge1xuXHRcdFx0XHRcdFx0XHRpZiAob0NvbnRyb2wuYXBwbHlMZWdhY3lTdGF0ZSkge1xuXHRcdFx0XHRcdFx0XHRcdGF3YWl0IG9Db250cm9sLmFwcGx5TGVnYWN5U3RhdGUuYmluZChvQ29udHJvbCkoXG5cdFx0XHRcdFx0XHRcdFx0XHR0aGlzLmdldENvbnRyb2xTdGF0ZS5iaW5kKHRoaXMpLFxuXHRcdFx0XHRcdFx0XHRcdFx0b05hdlBhcmFtZXRlcnMsXG5cdFx0XHRcdFx0XHRcdFx0XHRzaG91bGRBcHBseURpZmZTdGF0ZSxcblx0XHRcdFx0XHRcdFx0XHRcdHNraXBNZXJnZVxuXHRcdFx0XHRcdFx0XHRcdCk7XG5cdFx0XHRcdFx0XHRcdH1cblx0XHRcdFx0XHRcdH0gZWxzZSB7XG5cdFx0XHRcdFx0XHRcdGF3YWl0IG9Db250cm9sLmFwcGx5U3RhdGUuYmluZChvQ29udHJvbCkoY29udHJvbFN0YXRlLCBvTmF2UGFyYW1ldGVycywgc2hvdWxkQXBwbHlEaWZmU3RhdGUsIHNraXBNZXJnZSk7XG5cdFx0XHRcdFx0XHR9XG5cdFx0XHRcdFx0fVxuXHRcdFx0XHR9KTtcblx0XHRcdH0gZWxzZSB7XG5cdFx0XHRcdGZvciAoY29uc3Qgc1R5cGUgaW4gX21Db250cm9sU3RhdGVIYW5kbGVyTWFwKSB7XG5cdFx0XHRcdFx0aWYgKG9Db250cm9sLmlzQShzVHlwZSkpIHtcblx0XHRcdFx0XHRcdC8vIGF2b2lkIGRpcmVjdCBtYW5pcHVsYXRpb24gb2YgaW50ZXJuYWwgX21Db250cm9sU3RhdGVIYW5kbGVyTWFwXG5cdFx0XHRcdFx0XHRhSW50ZXJuYWxDb250cm9sU3RhdGVIYW5kbGVyLnB1c2goXG5cdFx0XHRcdFx0XHRcdE9iamVjdC5hc3NpZ24oe30sIF9tQ29udHJvbFN0YXRlSGFuZGxlck1hcFtzVHlwZSBhcyBrZXlvZiBDb250cm9sU3RhdGVNYXBdKSBhcyBDb250cm9sU3RhdGVIYW5kbGVyPFxuXHRcdFx0XHRcdFx0XHRcdE1hbmFnZWRPYmplY3QsXG5cdFx0XHRcdFx0XHRcdFx0b2JqZWN0XG5cdFx0XHRcdFx0XHRcdD5cblx0XHRcdFx0XHRcdCk7XG5cdFx0XHRcdFx0XHRicmVhaztcblx0XHRcdFx0XHR9XG5cdFx0XHRcdH1cblx0XHRcdH1cblx0XHR9XG5cdFx0dGhpcy5iYXNlLnZpZXdTdGF0ZS5hZGFwdENvbnRyb2xTdGF0ZUhhbmRsZXIob0NvbnRyb2wsIGFDdXN0b21Db250cm9sU3RhdGVIYW5kbGVyKTtcblx0XHRyZXR1cm4gYUludGVybmFsQ29udHJvbFN0YXRlSGFuZGxlci5jb25jYXQoYUN1c3RvbUNvbnRyb2xTdGF0ZUhhbmRsZXIpO1xuXHR9XG5cblx0LyoqXG5cdCAqIFRoaXMgZnVuY3Rpb24gc2hvdWxkIGFkZCBhbGwgY29udHJvbHMgZm9yIGdpdmVuIHZpZXcgdGhhdCBzaG91bGQgYmUgY29uc2lkZXJlZCBmb3IgdGhlIHN0YXRlIGhhbmRsaW5nIHRvIHRoZSBwcm92aWRlZCBjb250cm9sIGFycmF5LlxuXHQgKlxuXHQgKiBUaGlzIGZ1bmN0aW9uIGlzIG1lYW50IHRvIGJlIGluZGl2aWR1YWxseSBvdmVycmlkZGVuIGJ5IGNvbnN1bWluZyBjb250cm9sbGVycywgYnV0IG5vdCB0byBiZSBjYWxsZWQgZGlyZWN0bHkuXG5cdCAqIFRoZSBvdmVycmlkZSBleGVjdXRpb24gaXM6IHtAbGluayBzYXAudWkuY29yZS5tdmMuT3ZlcnJpZGVFeGVjdXRpb24uQWZ0ZXJ9LlxuXHQgKiBAcGFyYW0gX2FDb2xsZWN0ZWRDb250cm9scyBUaGUgY29sbGVjdGVkIGNvbnRyb2xzXG5cdCAqIEBwcm90ZWN0ZWRcblx0ICovXG5cdEBwdWJsaWNFeHRlbnNpb24oKVxuXHRAZXh0ZW5zaWJsZShPdmVycmlkZUV4ZWN1dGlvbi5BZnRlcilcblx0YWRhcHRTdGF0ZUNvbnRyb2xzKF9hQ29sbGVjdGVkQ29udHJvbHM6IE1hbmFnZWRPYmplY3RbXSk6IHZvaWQge1xuXHRcdF9hQ29sbGVjdGVkQ29udHJvbHMucHVzaCguLi50aGlzLnN0YXRlQ29udHJpYnV0b3JzKTtcblx0fVxuXG5cdC8qKlxuXHQgKiBSZXR1cm5zIHRoZSBrZXkgdG8gYmUgdXNlZCBmb3IgZ2l2ZW4gY29udHJvbC5cblx0ICogQHBhcmFtIG9Db250cm9sIFRoZSBjb250cm9sIHRvIGdldCBzdGF0ZSBrZXkgZm9yXG5cdCAqIEByZXR1cm5zIFRoZSBrZXkgdG8gYmUgdXNlZCBmb3Igc3RvcmluZyB0aGUgY29udHJvbHMgc3RhdGVcblx0ICovXG5cdEBwdWJsaWNFeHRlbnNpb24oKVxuXHRAZmluYWxFeHRlbnNpb24oKVxuXHRnZXRTdGF0ZUtleShvQ29udHJvbDogTWFuYWdlZE9iamVjdCk6IHN0cmluZyB7XG5cdFx0cmV0dXJuIHRoaXMuZ2V0VmlldygpLmdldExvY2FsSWQob0NvbnRyb2wuZ2V0SWQoKSkgfHwgb0NvbnRyb2wuZ2V0SWQoKTtcblx0fVxuXG5cdC8qKlxuXHQgKiBSZXRyaWV2ZSB0aGUgdmlldyBzdGF0ZSBvZiB0aGlzIGV4dGVuc2lvbnMgdmlldy5cblx0ICogV2hlbiB0aGlzIGZ1bmN0aW9uIGlzIGNhbGxlZCBtb3JlIHRoYW4gb25jZSBiZWZvcmUgZmluaXNoaW5nLCBhbGwgYnV0IHRoZSBmaW5hbCByZXNwb25zZSB3aWxsIHJlc29sdmUgdG8gPGNvZGU+dW5kZWZpbmVkPC9jb2RlPi5cblx0ICogQHJldHVybnMgQSBwcm9taXNlIHJlc29sdmluZyB0aGUgdmlldyBzdGF0ZVxuXHQgKiBAcHVibGljXG5cdCAqL1xuXHRAcHVibGljRXh0ZW5zaW9uKClcblx0QGZpbmFsRXh0ZW5zaW9uKClcblx0YXN5bmMgcmV0cmlldmVWaWV3U3RhdGUoKTogUHJvbWlzZTxSZWNvcmQ8c3RyaW5nLCB1bmtub3duPiB8IHVuZGVmaW5lZD4ge1xuXHRcdCsrdGhpcy5faVJldHJpZXZpbmdTdGF0ZUNvdW50ZXI7XG5cdFx0bGV0IG9WaWV3U3RhdGU6IFJlY29yZDxzdHJpbmcsIHVua25vd24+O1xuXG5cdFx0dHJ5IHtcblx0XHRcdGF3YWl0IHRoaXMuX3BJbml0aWFsU3RhdGVBcHBsaWVkO1xuXHRcdFx0Y29uc3QgYUNvbnRyb2xzOiAoTWFuYWdlZE9iamVjdCB8IHVuZGVmaW5lZClbXSA9IGF3YWl0IHRoaXMuY29sbGVjdFJlc3VsdHModGhpcy5iYXNlLnZpZXdTdGF0ZS5hZGFwdFN0YXRlQ29udHJvbHMpO1xuXHRcdFx0Y29uc3QgYVJlc29sdmVkU3RhdGVzID0gYXdhaXQgUHJvbWlzZS5hbGwoXG5cdFx0XHRcdChcblx0XHRcdFx0XHRhQ29udHJvbHMuZmlsdGVyKGZ1bmN0aW9uIChvQ29udHJvbCkge1xuXHRcdFx0XHRcdFx0cmV0dXJuIG9Db250cm9sICYmIG9Db250cm9sLmlzQSAmJiBvQ29udHJvbC5pc0E8TWFuYWdlZE9iamVjdD4oXCJzYXAudWkuYmFzZS5NYW5hZ2VkT2JqZWN0XCIpO1xuXHRcdFx0XHRcdH0pIGFzIE1hbmFnZWRPYmplY3RbXVxuXHRcdFx0XHQpLm1hcChhc3luYyAob0NvbnRyb2wpID0+IHtcblx0XHRcdFx0XHRyZXR1cm4gdGhpcy5yZXRyaWV2ZUNvbnRyb2xTdGF0ZShvQ29udHJvbCkudGhlbigodlJlc3VsdDogdW5rbm93bikgPT4ge1xuXHRcdFx0XHRcdFx0cmV0dXJuIHtcblx0XHRcdFx0XHRcdFx0a2V5OiB0aGlzLmdldFN0YXRlS2V5KG9Db250cm9sKSxcblx0XHRcdFx0XHRcdFx0dmFsdWU6IHZSZXN1bHRcblx0XHRcdFx0XHRcdH07XG5cdFx0XHRcdFx0fSk7XG5cdFx0XHRcdH0pXG5cdFx0XHQpO1xuXHRcdFx0b1ZpZXdTdGF0ZSA9IGFSZXNvbHZlZFN0YXRlcy5yZWR1Y2UoZnVuY3Rpb24gKG9TdGF0ZXM6IFJlY29yZDxzdHJpbmcsIHVua25vd24+LCBtU3RhdGU6IHsga2V5OiBzdHJpbmc7IHZhbHVlOiB1bmtub3duIH0pIHtcblx0XHRcdFx0Y29uc3Qgb0N1cnJlbnRTdGF0ZTogUmVjb3JkPHN0cmluZywgdW5rbm93bj4gPSB7fTtcblx0XHRcdFx0b0N1cnJlbnRTdGF0ZVttU3RhdGUua2V5XSA9IG1TdGF0ZS52YWx1ZTtcblx0XHRcdFx0cmV0dXJuIG1lcmdlT2JqZWN0cyhvU3RhdGVzLCBvQ3VycmVudFN0YXRlKTtcblx0XHRcdH0sIHt9KTtcblx0XHRcdGNvbnN0IHByZXZTdGF0ZSA9IHRoaXMuX2N1cnJlbnRWaWV3U3RhdGU7XG5cdFx0XHRpZiAocHJldlN0YXRlICYmIE9iamVjdC5rZXlzKHByZXZTdGF0ZSkubGVuZ3RoID4gMCkge1xuXHRcdFx0XHR0aGlzLl9hZGRNaXNzaW5nU3RhdGUob1ZpZXdTdGF0ZSwgcHJldlN0YXRlKTtcblx0XHRcdH1cblx0XHRcdGNvbnN0IG1BZGRpdGlvbmFsU3RhdGVzID0gYXdhaXQgUHJvbWlzZS5yZXNvbHZlKHRoaXMuX3JldHJpZXZlQWRkaXRpb25hbFN0YXRlcygpKTtcblx0XHRcdGlmIChtQWRkaXRpb25hbFN0YXRlcyAmJiBPYmplY3Qua2V5cyhtQWRkaXRpb25hbFN0YXRlcykubGVuZ3RoKSB7XG5cdFx0XHRcdG9WaWV3U3RhdGVbQURESVRJT05BTF9TVEFURVNfS0VZXSA9IG1BZGRpdGlvbmFsU3RhdGVzO1xuXHRcdFx0fVxuXHRcdH0gZmluYWxseSB7XG5cdFx0XHQtLXRoaXMuX2lSZXRyaWV2aW5nU3RhdGVDb3VudGVyO1xuXHRcdH1cblx0XHR0aGlzLl9jdXJyZW50Vmlld1N0YXRlID0gb1ZpZXdTdGF0ZTtcblx0XHRyZXR1cm4gdGhpcy5faVJldHJpZXZpbmdTdGF0ZUNvdW50ZXIgPT09IDAgPyBvVmlld1N0YXRlIDogdW5kZWZpbmVkO1xuXHR9XG5cblx0Ly8gVG8gY2FycnkgZm9yd2FyZCB1bmFwcGxpZWQgc3RhdGUgbG9zdCBkdWUgdG8gbGF6eSBsb2FkaW5nIG9mIGNvbnRyb2xzLlxuXHQvL1xuXHQvLyBJZiB1c2VyIDEgY2hhbmdlcyBhIGNvbnRyb2wncyBzdGF0ZSBpbiBhIGxhenktbG9hZGVkIHNlY3Rpb24gYW5kIG5hdmlnYXRlcyBhd2F5LCB0aGVuIHNoYXJlcyB0aGUgVVJMIHdpdGggdXNlciAyLFxuXHQvLyB3aG8gZG9lc24ndCB2aXNpdCB0aGUgbGF6eS1sb2FkZWQgc2VjdGlvbiwgdGhlIGNvbnRyb2wncyBzdGF0ZSBpcyBtaXNzZWQgaW4gdGhlIG5ldyBhcHAgc3RhdGUuXG5cdC8vIFRoaXMgZW5zdXJlcyB0aGUgZnVsbCBzdGF0ZSBmcm9tIHVzZXIgMSBpcyBwcmVzZXJ2ZWQgYW5kIHRyYW5zZmVycmVkIHRvIHVzZXIgMyB3aGVuIHRoZSBVUkwgaXMgc2hhcmVkLlxuXHRfYWRkTWlzc2luZ1N0YXRlKG9WaWV3U3RhdGU6IFJlY29yZDxzdHJpbmcsIHVua25vd24+LCBwcmV2U3RhdGU6IFJlY29yZDxzdHJpbmcsIHVua25vd24+KTogdm9pZCB7XG5cdFx0Zm9yIChjb25zdCBrZXkgaW4gcHJldlN0YXRlKSB7XG5cdFx0XHRpZiAoIShrZXkgaW4gb1ZpZXdTdGF0ZSkpIHtcblx0XHRcdFx0b1ZpZXdTdGF0ZVtrZXldID0gcHJldlN0YXRlW2tleV07XG5cdFx0XHR9XG5cdFx0fVxuXHR9XG5cblx0LyoqXG5cdCAqIEV4dGVuZCB0aGUgbWFwIG9mIGFkZGl0aW9uYWwgc3RhdGVzIChub3QgY29udHJvbCBib3VuZCkgdG8gYmUgYWRkZWQgdG8gdGhlIGN1cnJlbnQgdmlldyBzdGF0ZSBvZiB0aGUgZ2l2ZW4gdmlldy5cblx0ICpcblx0ICogVGhpcyBmdW5jdGlvbiBpcyBtZWFudCB0byBiZSBpbmRpdmlkdWFsbHkgb3ZlcnJpZGRlbiBieSBjb25zdW1pbmcgY29udHJvbGxlcnMsIGJ1dCBub3QgdG8gYmUgY2FsbGVkIGRpcmVjdGx5LlxuXHQgKiBUaGUgb3ZlcnJpZGUgZXhlY3V0aW9uIGlzOiB7QGxpbmsgc2FwLnVpLmNvcmUubXZjLk92ZXJyaWRlRXhlY3V0aW9uLkFmdGVyfS5cblx0ICogQHBhcmFtIG1BZGRpdGlvbmFsU3RhdGVzIFRoZSBhZGRpdGlvbmFsIHN0YXRlXG5cdCAqIEBwcm90ZWN0ZWRcblx0ICovXG5cdEBwdWJsaWNFeHRlbnNpb24oKVxuXHRAZXh0ZW5zaWJsZShPdmVycmlkZUV4ZWN1dGlvbi5BZnRlcilcblx0Ly8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIEB0eXBlc2NyaXB0LWVzbGludC9uby11bnVzZWQtdmFyc1xuXHRyZXRyaWV2ZUFkZGl0aW9uYWxTdGF0ZXMobUFkZGl0aW9uYWxTdGF0ZXM6IG9iamVjdCk6IHZvaWQge1xuXHRcdC8vIHRvIGJlIG92ZXJyaWRkZW4gaWYgbmVlZGVkXG5cdH1cblxuXHQvKipcblx0ICogUmV0dXJucyBhIG1hcCBvZiBhZGRpdGlvbmFsIHN0YXRlcyAobm90IGNvbnRyb2wgYm91bmQpIHRvIGJlIGFkZGVkIHRvIHRoZSBjdXJyZW50IHZpZXcgc3RhdGUgb2YgdGhlIGdpdmVuIHZpZXcuXG5cdCAqIEByZXR1cm5zIEFkZGl0aW9uYWwgdmlldyBzdGF0ZXNcblx0ICovXG5cdF9yZXRyaWV2ZUFkZGl0aW9uYWxTdGF0ZXMoKTogdW5rbm93biB7XG5cdFx0Y29uc3QgbUFkZGl0aW9uYWxTdGF0ZXMgPSB7fTtcblx0XHR0aGlzLmJhc2Uudmlld1N0YXRlLnJldHJpZXZlQWRkaXRpb25hbFN0YXRlcyhtQWRkaXRpb25hbFN0YXRlcyk7XG5cdFx0cmV0dXJuIG1BZGRpdGlvbmFsU3RhdGVzO1xuXHR9XG5cblx0LyoqXG5cdCAqIFJldHVybnMgdGhlIGN1cnJlbnQgc3RhdGUgZm9yIHRoZSBnaXZlbiBjb250cm9sLlxuXHQgKiBAcGFyYW0gb0NvbnRyb2wgVGhlIG9iamVjdCB0byBnZXQgdGhlIHN0YXRlIGZvclxuXHQgKiBAcmV0dXJucyBUaGUgc3RhdGUgZm9yIHRoZSBnaXZlbiBjb250cm9sXG5cdCAqL1xuXHRAcHJpdmF0ZUV4dGVuc2lvbigpXG5cdEBmaW5hbEV4dGVuc2lvbigpXG5cdGFzeW5jIHJldHJpZXZlQ29udHJvbFN0YXRlKG9Db250cm9sOiBNYW5hZ2VkT2JqZWN0KTogUHJvbWlzZTxvYmplY3Q+IHtcblx0XHRjb25zdCBhQ29udHJvbFN0YXRlSGFuZGxlcnMgPSB0aGlzLmdldENvbnRyb2xTdGF0ZUhhbmRsZXIob0NvbnRyb2wpO1xuXHRcdHJldHVybiBQcm9taXNlLmFsbChcblx0XHRcdGFDb250cm9sU3RhdGVIYW5kbGVycy5tYXAoYXN5bmMgKG1Db250cm9sU3RhdGVIYW5kbGVyKSA9PiB7XG5cdFx0XHRcdGlmICh0eXBlb2YgbUNvbnRyb2xTdGF0ZUhhbmRsZXIucmV0cmlldmUgIT09IFwiZnVuY3Rpb25cIikge1xuXHRcdFx0XHRcdHRocm93IG5ldyBFcnJvcihgY29udHJvbFN0YXRlSGFuZGxlci5yZXRyaWV2ZSBpcyBub3QgYSBmdW5jdGlvbiBmb3IgY29udHJvbDogJHtvQ29udHJvbC5nZXRNZXRhZGF0YSgpLmdldE5hbWUoKX1gKTtcblx0XHRcdFx0fVxuXHRcdFx0XHRyZXR1cm4gbUNvbnRyb2xTdGF0ZUhhbmRsZXIucmV0cmlldmUuY2FsbCh0aGlzLCBvQ29udHJvbCk7XG5cdFx0XHR9KVxuXHRcdCkudGhlbigoYVN0YXRlczogb2JqZWN0W10pID0+IHtcblx0XHRcdHJldHVybiBhU3RhdGVzLnJlZHVjZShmdW5jdGlvbiAob0ZpbmFsU3RhdGU6IFJlY29yZDxzdHJpbmcsIHVua25vd24+LCBvQ3VycmVudFN0YXRlOiBvYmplY3QpIHtcblx0XHRcdFx0cmV0dXJuIG1lcmdlT2JqZWN0cyhvRmluYWxTdGF0ZSwgb0N1cnJlbnRTdGF0ZSk7XG5cdFx0XHR9LCB7fSk7XG5cdFx0fSk7XG5cdH1cblxuXHQvKipcblx0ICogRGVmaW5lcyB3aGV0aGVyIHRoZSB2aWV3IHN0YXRlIHNob3VsZCBvbmx5IGJlIGFwcGxpZWQgb25jZSBpbml0aWFsbHkuXG5cdCAqXG5cdCAqIFRoaXMgZnVuY3Rpb24gaXMgbWVhbnQgdG8gYmUgaW5kaXZpZHVhbGx5IG92ZXJyaWRkZW4gYnkgY29uc3VtaW5nIGNvbnRyb2xsZXJzLCBidXQgbm90IHRvIGJlIGNhbGxlZCBkaXJlY3RseS5cblx0ICogVGhlIG92ZXJyaWRlIGV4ZWN1dGlvbiBpczoge0BsaW5rIHNhcC51aS5jb3JlLm12Yy5PdmVycmlkZUV4ZWN1dGlvbi5JbnN0ZWFkfS5cblx0ICpcblx0ICogSW1wb3J0YW50OlxuXHQgKiBZb3Ugc2hvdWxkIG9ubHkgb3ZlcnJpZGUgdGhpcyBtZXRob2QgZm9yIGN1c3RvbSBwYWdlcyBhbmQgbm90IGZvciB0aGUgc3RhbmRhcmQgTGlzdFJlcG9ydFBhZ2UgYW5kIE9iamVjdFBhZ2UhXG5cdCAqIEByZXR1cm5zIElmIDxjb2RlPnRydWU8L2NvZGU+LCBvbmx5IHRoZSBpbml0aWFsIHZpZXcgc3RhdGUgaXMgYXBwbGllZCBvbmNlLFxuXHQgKiBlbHNlIGFueSBuZXcgdmlldyBzdGF0ZSBpcyBhbHNvIGFwcGxpZWQgb24gZm9sbG93LXVwIGNhbGxzIChkZWZhdWx0KVxuXHQgKiBAcHJvdGVjdGVkXG5cdCAqL1xuXHRAcHVibGljRXh0ZW5zaW9uKClcblx0QGV4dGVuc2libGUoT3ZlcnJpZGVFeGVjdXRpb24uSW5zdGVhZClcblx0YXBwbHlJbml0aWFsU3RhdGVPbmx5KCk6IGJvb2xlYW4ge1xuXHRcdHJldHVybiB0cnVlO1xuXHR9XG5cblx0LyoqXG5cdCAqIFJldHJpZXZlcyB0aGUgc3RhdGUgb2YgYSBzcGVjaWZpYyBjb250cm9sLlxuXHQgKiBAcGFyYW0gY29udHJvbCBUaGUgbWFuYWdlZCBjb250cm9sIG9iamVjdCB3aG9zZSBzdGF0ZSBpcyB0byBiZSByZXRyaWV2ZWQuXG5cdCAqIEByZXR1cm5zIC0gVGhlIHN0YXRlIG9mIHRoZSBzcGVjaWZpZWQgY29udHJvbC5cblx0ICovXG5cdGdldENvbnRyb2xTdGF0ZShjb250cm9sOiBNYW5hZ2VkT2JqZWN0KTogQ29udHJvbFN0YXRlIHtcblx0XHRjb25zdCBvVmlld1N0YXRlID0gdGhpcy5fY3VycmVudFZpZXdTdGF0ZTtcblx0XHRsZXQgY29udHJvbFN0YXRlOiBDb250cm9sU3RhdGUgPSB7fTtcblx0XHRpZiAob1ZpZXdTdGF0ZSkge1xuXHRcdFx0Y29uc3QgY29udHJvbEtleSA9IHRoaXMuZ2V0U3RhdGVLZXkoY29udHJvbCk7XG5cdFx0XHRjb250cm9sU3RhdGUgPSBvVmlld1N0YXRlW2NvbnRyb2xLZXldIGFzIFJlY29yZDxzdHJpbmcsIENvbnRyb2xTdGF0ZT47XG5cdFx0fVxuXHRcdHJldHVybiBjb250cm9sU3RhdGU7XG5cdH1cblxuXHQvKipcblx0ICogQXBwbGllcyB0aGUgZ2l2ZW4gdmlldyBzdGF0ZSB0byB0aGlzIGV4dGVuc2lvbnMgdmlldy5cblx0ICogQHBhcmFtIG9WaWV3U3RhdGUgVGhlIHZpZXcgc3RhdGUgdG8gYXBwbHkgKGNhbiBiZSB1bmRlZmluZWQpXG5cdCAqIEBwYXJhbSBvTmF2UGFyYW1ldGVyIFRoZSBjdXJyZW50IG5hdmlnYXRpb24gcGFyYW1ldGVyXG5cdCAqIEBwYXJhbSBvTmF2UGFyYW1ldGVyLm5hdmlnYXRpb25UeXBlIFRoZSBhY3R1YWwgbmF2aWdhdGlvbiB0eXBlXG5cdCAqIEBwYXJhbSBvTmF2UGFyYW1ldGVyLnNlbGVjdGlvblZhcmlhbnQgVGhlIHNlbGVjdGlvblZhcmlhbnQgZnJvbSB0aGUgbmF2aWdhdGlvblxuXHQgKiBAcGFyYW0gb05hdlBhcmFtZXRlci5zZWxlY3Rpb25WYXJpYW50RGVmYXVsdHMgVGhlIHNlbGVjdGlvblZhcmlhbnQgZGVmYXVsdHMgZnJvbSB0aGUgbmF2aWdhdGlvblxuXHQgKiBAcGFyYW0gb05hdlBhcmFtZXRlci5yZXF1aXJlc1N0YW5kYXJkVmFyaWFudCBEZWZpbmVzIHdoZXRoZXIgdGhlIHN0YW5kYXJkIHZhcmlhbnQgbXVzdCBiZSB1c2VkIGluIHZhcmlhbnQgbWFuYWdlbWVudFxuXHQgKiBAcGFyYW0gc2tpcE1lcmdlIEJvb2xlYW4gd2hpY2ggZGV0ZXJtaW5lcyB0byBza2lwIHRoZSBrZXkgdXNlciBzaGluZSB0aHJvdWdoXG5cdCAqIEByZXR1cm5zIFByb21pc2UgZm9yIGFzeW5jIHN0YXRlIGhhbmRsaW5nXG5cdCAqIEBwdWJsaWNcblx0ICovXG5cdEBwdWJsaWNFeHRlbnNpb24oKVxuXHRAZmluYWxFeHRlbnNpb24oKVxuXHRhc3luYyBhcHBseVZpZXdTdGF0ZShcblx0XHRvVmlld1N0YXRlOiBSZWNvcmQ8c3RyaW5nLCB1bmtub3duPiB8IHVuZGVmaW5lZCxcblx0XHRvTmF2UGFyYW1ldGVyOiBOYXZpZ2F0aW9uUGFyYW1ldGVyLFxuXHRcdHNraXBNZXJnZT86IGJvb2xlYW5cblx0KTogUHJvbWlzZTx2b2lkPiB7XG5cdFx0aWYgKHRoaXMuYmFzZS52aWV3U3RhdGUuYXBwbHlJbml0aWFsU3RhdGVPbmx5KCkgJiYgdGhpcy5fZ2V0SW5pdGlhbFN0YXRlQXBwbGllZCgpKSB7XG5cdFx0XHRyZXR1cm47XG5cdFx0fVxuXHRcdHRyeSB7XG5cdFx0XHQvL1NOT1c6IENTMjAyMzAwMDY3NjU4OTcgRm9yIHRyYW5zaWVudCBBcHBTdGF0ZSwgd2UgcmV0dXJuIHdpdGhvdXQgYXBwbHlpbmcgdGhlIHN0YXRlIHRvIGNvbnRyb2xzIGluIFJvb3RDb250YWluZXIncyBjaGlsZHJlbiB2aWV3cyBhcyB0aGVyZSBpcyBubyBzdGF0ZSB0byBhcHBseVxuXHRcdFx0Ly9Pbmx5IG5lZWQgaXMgdG8gcmVzb2x2ZSB0aGUgX3BJbml0aWFsU3RhdGVBcHBsaWVkIHNvIHRoYXQgdXBkYXRlIG9mIEFwcFN0YXRlIGNhbiBzdGlsbCBoYXBwZW5cblx0XHRcdGlmICh0aGlzLl9pc1N0YXRlRW1wdHlGb3JJQXBwU3RhdGVOYXZUeXBlKG9WaWV3U3RhdGUsIG9OYXZQYXJhbWV0ZXIubmF2aWdhdGlvblR5cGUpICYmICF0aGlzLl9faXNSb290Vmlld0NvbnRyb2xsZXIoKSkge1xuXHRcdFx0XHRyZXR1cm47XG5cdFx0XHR9XG5cdFx0XHRhd2FpdCB0aGlzLmNvbGxlY3RSZXN1bHRzKHRoaXMuYmFzZS52aWV3U3RhdGUub25CZWZvcmVTdGF0ZUFwcGxpZWQsIFtdLCBvTmF2UGFyYW1ldGVyLm5hdmlnYXRpb25UeXBlKTtcblx0XHRcdGNvbnN0IGFDb250cm9sczogTWFuYWdlZE9iamVjdFtdID0gYXdhaXQgdGhpcy5jb2xsZWN0UmVzdWx0cyh0aGlzLmJhc2Uudmlld1N0YXRlLmFkYXB0U3RhdGVDb250cm9scyk7XG5cdFx0XHR0aGlzLnZpZXdTdGF0ZUNvbnRyb2xzID0gYUNvbnRyb2xzO1xuXHRcdFx0bGV0IG9Qcm9taXNlQ2hhaW4gPSBQcm9taXNlLnJlc29sdmUoKTtcblx0XHRcdGxldCBoYXNWYXJpYW50TWFuYWdlbWVudCA9IGZhbHNlO1xuXHRcdFx0dGhpcy5fY3VycmVudFZpZXdTdGF0ZSA9IG9WaWV3U3RhdGU7XG5cblx0XHRcdHRoaXMuY29uZmlnT2ZTdGF0ZUFwcGx5ID0gdGhpcy5jb25maWdPZlN0YXRlQXBwbHkgPz8ge307XG5cdFx0XHR0aGlzLmNvbmZpZ09mU3RhdGVBcHBseS5za2lwTWVyZ2UgPSBza2lwTWVyZ2U7XG5cdFx0XHR0aGlzLmNvbmZpZ09mU3RhdGVBcHBseS5uYXZUeXBlUGFyYW1ldGVycyA9IG9OYXZQYXJhbWV0ZXI7XG5cdFx0XHR0aGlzLmNvbmZpZ09mU3RhdGVBcHBseS5zdGF0ZSA9IG9WaWV3U3RhdGU7XG5cblx0XHRcdC8qKlxuXHRcdFx0ICogVGhpcyBlbnN1cmVzIHRoYXQgdmFyaWFudE1hbmFnZW1lbnQgY29udHJvbCBpcyBhcHBsaWVkIGZpcnN0IHRvIGNhbGN1bGF0ZSB0aGUgaW5pdGlhbCBzdGF0ZSBmb3IgZGVsdGEgbG9naWNcblx0XHRcdCAqL1xuXHRcdFx0Y29uc3Qgc29ydGVkQWRhcHRTdGF0ZUNvbnRyb2xzID0gYUNvbnRyb2xzLnJlZHVjZSgobW9kaWZpZWRDb250cm9sczogTWFuYWdlZE9iamVjdFtdLCBjb250cm9sKSA9PiB7XG5cdFx0XHRcdGlmICghY29udHJvbCkge1xuXHRcdFx0XHRcdHJldHVybiBtb2RpZmllZENvbnRyb2xzO1xuXHRcdFx0XHR9XG5cdFx0XHRcdGNvbnN0IGlzVmFyaWFudE1hbmFnZW1lbnRDb250cm9sID0gY29udHJvbC5pc0EoXCJzYXAudWkuZmwudmFyaWFudHMuVmFyaWFudE1hbmFnZW1lbnRcIik7XG5cdFx0XHRcdGlmICghaGFzVmFyaWFudE1hbmFnZW1lbnQpIHtcblx0XHRcdFx0XHRoYXNWYXJpYW50TWFuYWdlbWVudCA9IGlzVmFyaWFudE1hbmFnZW1lbnRDb250cm9sO1xuXHRcdFx0XHR9XG5cdFx0XHRcdG1vZGlmaWVkQ29udHJvbHMgPSBpc1ZhcmlhbnRNYW5hZ2VtZW50Q29udHJvbCA/IFtjb250cm9sLCAuLi5tb2RpZmllZENvbnRyb2xzXSA6IFsuLi5tb2RpZmllZENvbnRyb2xzLCBjb250cm9sXTtcblx0XHRcdFx0cmV0dXJuIG1vZGlmaWVkQ29udHJvbHM7XG5cdFx0XHR9LCBbXSk7XG5cblx0XHRcdC8vIEluIGNhc2Ugb2Ygbm8gVmFyaWFudCBNYW5hZ2VtZW50LCB0aGlzIGVuc3VyZXMgdGhhdCBpbml0aWFsIHN0YXRlcyBpcyBzZXRcblx0XHRcdGlmICghaGFzVmFyaWFudE1hbmFnZW1lbnQpIHtcblx0XHRcdFx0dGhpcy5fc2V0SW5pdGlhbFN0YXRlc0ZvckRlbHRhQ29tcHV0ZSgpO1xuXHRcdFx0fVxuXHRcdFx0c29ydGVkQWRhcHRTdGF0ZUNvbnRyb2xzXG5cdFx0XHRcdC5maWx0ZXIoZnVuY3Rpb24gKG9Db250cm9sKSB7XG5cdFx0XHRcdFx0cmV0dXJuIG9Db250cm9sLmlzQShcInNhcC51aS5iYXNlLk1hbmFnZWRPYmplY3RcIik7XG5cdFx0XHRcdH0pXG5cdFx0XHRcdC5mb3JFYWNoKChvQ29udHJvbCkgPT4ge1xuXHRcdFx0XHRcdGNvbnN0IHNLZXkgPSB0aGlzLmdldFN0YXRlS2V5KG9Db250cm9sKTtcblx0XHRcdFx0XHRvUHJvbWlzZUNoYWluID0gb1Byb21pc2VDaGFpbi50aGVuKFxuXHRcdFx0XHRcdFx0dGhpcy5hcHBseUNvbnRyb2xTdGF0ZS5iaW5kKFxuXHRcdFx0XHRcdFx0XHR0aGlzLFxuXHRcdFx0XHRcdFx0XHRvQ29udHJvbCxcblx0XHRcdFx0XHRcdFx0KG9WaWV3U3RhdGUgPyBvVmlld1N0YXRlW3NLZXldIDogdW5kZWZpbmVkKSBhcyBSZWNvcmQ8c3RyaW5nLCB1bmtub3duPixcblx0XHRcdFx0XHRcdFx0b05hdlBhcmFtZXRlcixcblx0XHRcdFx0XHRcdFx0c2tpcE1lcmdlID8/IGZhbHNlXG5cdFx0XHRcdFx0XHQpXG5cdFx0XHRcdFx0KTtcblx0XHRcdFx0fSk7XG5cblx0XHRcdGF3YWl0IG9Qcm9taXNlQ2hhaW47XG5cdFx0XHRpZiAob05hdlBhcmFtZXRlci5uYXZpZ2F0aW9uVHlwZSA9PT0gTmF2VHlwZS5pQXBwU3RhdGUgfHwgb05hdlBhcmFtZXRlci5uYXZpZ2F0aW9uVHlwZSA9PT0gTmF2VHlwZS5oeWJyaWQpIHtcblx0XHRcdFx0YXdhaXQgdGhpcy5jb2xsZWN0UmVzdWx0cyhcblx0XHRcdFx0XHR0aGlzLmJhc2Uudmlld1N0YXRlLmFwcGx5QWRkaXRpb25hbFN0YXRlcyxcblx0XHRcdFx0XHRvVmlld1N0YXRlID8gb1ZpZXdTdGF0ZVtBRERJVElPTkFMX1NUQVRFU19LRVldIDogdW5kZWZpbmVkXG5cdFx0XHRcdCk7XG5cdFx0XHR9IGVsc2Uge1xuXHRcdFx0XHRhd2FpdCB0aGlzLmNvbGxlY3RSZXN1bHRzKHRoaXMuYmFzZS52aWV3U3RhdGUuYXBwbHlOYXZpZ2F0aW9uUGFyYW1ldGVycywgb05hdlBhcmFtZXRlcik7XG5cdFx0XHRcdGF3YWl0IHRoaXMuY29sbGVjdFJlc3VsdHModGhpcy5iYXNlLnZpZXdTdGF0ZS5fYXBwbHlOYXZpZ2F0aW9uUGFyYW1ldGVyc1RvRmlsdGVyYmFyLCBvTmF2UGFyYW1ldGVyKTtcblx0XHRcdH1cblx0XHR9IGZpbmFsbHkge1xuXHRcdFx0dHJ5IHtcblx0XHRcdFx0aWYgKCF0aGlzLl9pc1N0YXRlRW1wdHlGb3JJQXBwU3RhdGVOYXZUeXBlKG9WaWV3U3RhdGUsIG9OYXZQYXJhbWV0ZXIubmF2aWdhdGlvblR5cGUpKSB7XG5cdFx0XHRcdFx0YXdhaXQgdGhpcy5jb2xsZWN0UmVzdWx0cyh0aGlzLmJhc2Uudmlld1N0YXRlLm9uQWZ0ZXJTdGF0ZUFwcGxpZWQpO1xuXHRcdFx0XHR9XG5cdFx0XHRcdHRoaXMuX3NldEluaXRpYWxTdGF0ZUFwcGxpZWQoKTtcblx0XHRcdH0gY2F0Y2ggKGU6IHVua25vd24pIHtcblx0XHRcdFx0TG9nLmVycm9yKGUgYXMgc3RyaW5nKTtcblx0XHRcdH1cblx0XHR9XG5cdH1cblxuXHRAcHJpdmF0ZUV4dGVuc2lvbigpXG5cdF9jaGVja0lmVmFyaWFudElkSXNBdmFpbGFibGUob1ZNOiBWYXJpYW50TWFuYWdlbWVudCwgc1ZhcmlhbnRJZDogc3RyaW5nIHwgbnVsbCk6IGJvb2xlYW4ge1xuXHRcdGNvbnN0IGFWYXJpYW50cyA9IG9WTS5nZXRWYXJpYW50cygpO1xuXHRcdGxldCBiSXNDb250cm9sU3RhdGVWYXJpYW50QXZhaWxhYmxlID0gZmFsc2U7XG5cdFx0YVZhcmlhbnRzLmZvckVhY2goZnVuY3Rpb24gKG9WYXJpYW50KSB7XG5cdFx0XHRpZiAob1ZhcmlhbnQuZ2V0S2V5KCkgPT09IHNWYXJpYW50SWQpIHtcblx0XHRcdFx0YklzQ29udHJvbFN0YXRlVmFyaWFudEF2YWlsYWJsZSA9IHRydWU7XG5cdFx0XHR9XG5cdFx0fSk7XG5cdFx0cmV0dXJuIGJJc0NvbnRyb2xTdGF0ZVZhcmlhbnRBdmFpbGFibGU7XG5cdH1cblxuXHRfc2V0SW5pdGlhbFN0YXRlQXBwbGllZCgpOiB2b2lkIHtcblx0XHRpZiAodGhpcy5fcEluaXRpYWxTdGF0ZUFwcGxpZWRSZXNvbHZlKSB7XG5cdFx0XHRjb25zdCBwSW5pdGlhbFN0YXRlQXBwbGllZFJlc29sdmUgPSB0aGlzLl9wSW5pdGlhbFN0YXRlQXBwbGllZFJlc29sdmU7XG5cdFx0XHRkZWxldGUgdGhpcy5fcEluaXRpYWxTdGF0ZUFwcGxpZWRSZXNvbHZlO1xuXHRcdFx0cEluaXRpYWxTdGF0ZUFwcGxpZWRSZXNvbHZlKCk7XG5cdFx0fVxuXHR9XG5cblx0X2dldEluaXRpYWxTdGF0ZUFwcGxpZWQoKTogYm9vbGVhbiB7XG5cdFx0cmV0dXJuICF0aGlzLl9wSW5pdGlhbFN0YXRlQXBwbGllZFJlc29sdmU7XG5cdH1cblxuXHRfaXNTdGF0ZUVtcHR5Rm9ySUFwcFN0YXRlTmF2VHlwZSh2aWV3U3RhdGU6IFJlY29yZDxzdHJpbmcsIHVua25vd24+IHwgdW5kZWZpbmVkLCBuYXZUeXBlOiBzdHJpbmcpOiBib29sZWFuIHtcblx0XHRyZXR1cm4gKCF2aWV3U3RhdGUgfHwgT2JqZWN0LmtleXModmlld1N0YXRlKS5sZW5ndGggPT09IDApICYmIG5hdlR5cGUgPT0gTmF2VHlwZS5pQXBwU3RhdGU7XG5cdH1cblxuXHRfX2lzUm9vdFZpZXdDb250cm9sbGVyKCk6IGJvb2xlYW4ge1xuXHRcdGNvbnN0IHJvb3RWaWV3Q29udHJvbGxlciA9IHRoaXMuYmFzZS5nZXRWaWV3KCkuZ2V0Q29udHJvbGxlcigpO1xuXHRcdHJldHVybiAoXG5cdFx0XHRyb290Vmlld0NvbnRyb2xsZXIuaXNBPE5hdkNvbnRhaW5lckNvbnRyb2xsZXI+KFwic2FwLmZlLmNvcmUucm9vdFZpZXcuTmF2Q29udGFpbmVyXCIpIHx8XG5cdFx0XHRyb290Vmlld0NvbnRyb2xsZXIuaXNBPEZjbENvbnRyb2xsZXI+KFwic2FwLmZlLmNvcmUucm9vdFZpZXcuRmNsXCIpXG5cdFx0KTtcblx0fVxuXG5cdC8qKlxuXHQgKiBIb29rIHRvIHJlYWN0IGJlZm9yZSBhIHN0YXRlIGZvciBnaXZlbiB2aWV3IGlzIGFwcGxpZWQuXG5cdCAqXG5cdCAqIFRoaXMgZnVuY3Rpb24gaXMgbWVhbnQgdG8gYmUgaW5kaXZpZHVhbGx5IG92ZXJyaWRkZW4gYnkgY29uc3VtaW5nIGNvbnRyb2xsZXJzLCBidXQgbm90IHRvIGJlIGNhbGxlZCBkaXJlY3RseS5cblx0ICogVGhlIG92ZXJyaWRlIGV4ZWN1dGlvbiBpczoge0BsaW5rIHNhcC51aS5jb3JlLm12Yy5PdmVycmlkZUV4ZWN1dGlvbi5BZnRlcn0uXG5cdCAqIEBwYXJhbSBhUHJvbWlzZXMgRXh0ZW5zaWJsZSBhcnJheSBvZiBwcm9taXNlcyB0byBiZSByZXNvbHZlZCBiZWZvcmUgY29udGludWluZ1xuXHQgKiBAcGFyYW0gbmF2aWdhdGlvblR5cGUgTmF2aWdhdGlvbiB0eXBlIHJlc3BvbnNpYmxlIGZvciB0aGUgYXBwbHlpbmcgdGhlIHN0YXRlXG5cdCAqIEBwcm90ZWN0ZWRcblx0ICovXG5cdEBwdWJsaWNFeHRlbnNpb24oKVxuXHRAZXh0ZW5zaWJsZShPdmVycmlkZUV4ZWN1dGlvbi5BZnRlcilcblx0Ly8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIEB0eXBlc2NyaXB0LWVzbGludC9uby11bnVzZWQtdmFyc1xuXHRvbkJlZm9yZVN0YXRlQXBwbGllZChhUHJvbWlzZXM6IFByb21pc2U8dW5rbm93bj5bXSwgbmF2aWdhdGlvblR5cGU/OiBzdHJpbmcpOiB2b2lkIHtcblx0XHQvLyB0byBiZSBvdmVycmlkZW5cblx0fVxuXG5cdC8qKlxuXHQgKiBIb29rIHRvIHJlYWN0IHdoZW4gc3RhdGUgZm9yIGdpdmVuIHZpZXcgd2FzIGFwcGxpZWQuXG5cdCAqXG5cdCAqIFRoaXMgZnVuY3Rpb24gaXMgbWVhbnQgdG8gYmUgaW5kaXZpZHVhbGx5IG92ZXJyaWRkZW4gYnkgY29uc3VtaW5nIGNvbnRyb2xsZXJzLCBidXQgbm90IHRvIGJlIGNhbGxlZCBkaXJlY3RseS5cblx0ICogVGhlIG92ZXJyaWRlIGV4ZWN1dGlvbiBpczoge0BsaW5rIHNhcC51aS5jb3JlLm12Yy5PdmVycmlkZUV4ZWN1dGlvbi5BZnRlcn0uXG5cdCAqIEBwYXJhbSBhUHJvbWlzZXMgRXh0ZW5zaWJsZSBhcnJheSBvZiBwcm9taXNlcyB0byBiZSByZXNvbHZlZCBiZWZvcmUgY29udGludWluZ1xuXHQgKiBAcHJvdGVjdGVkXG5cdCAqL1xuXHRAcHVibGljRXh0ZW5zaW9uKClcblx0QGV4dGVuc2libGUoT3ZlcnJpZGVFeGVjdXRpb24uQWZ0ZXIpXG5cdC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBAdHlwZXNjcmlwdC1lc2xpbnQvbm8tdW51c2VkLXZhcnNcblx0b25BZnRlclN0YXRlQXBwbGllZChhUHJvbWlzZXM6IFByb21pc2U8dW5rbm93bj4pOiB2b2lkIHtcblx0XHQvLyB0byBiZSBvdmVycmlkZW5cblx0fVxuXG5cdC8qKlxuXHQgKiBBcHBseWluZyBhZGRpdGlvbmFsLCBub3QgY29udHJvbCByZWxhdGVkLCBzdGF0ZXMgLSBpcyBjYWxsZWQgb25seSBpZiBuYXZpZ2F0aW9uIHR5cGUgaXMgaUFwcFN0YXRlLlxuXHQgKlxuXHQgKiBUaGlzIGZ1bmN0aW9uIGlzIG1lYW50IHRvIGJlIGluZGl2aWR1YWxseSBvdmVycmlkZGVuIGJ5IGNvbnN1bWluZyBjb250cm9sbGVycywgYnV0IG5vdCB0byBiZSBjYWxsZWQgZGlyZWN0bHkuXG5cdCAqIFRoZSBvdmVycmlkZSBleGVjdXRpb24gaXM6IHtAbGluayBzYXAudWkuY29yZS5tdmMuT3ZlcnJpZGVFeGVjdXRpb24uQWZ0ZXJ9LlxuXHQgKiBAcGFyYW0gb1ZpZXdTdGF0ZSBUaGUgY3VycmVudCB2aWV3IHN0YXRlXG5cdCAqIEBwYXJhbSBhUHJvbWlzZXMgRXh0ZW5zaWJsZSBhcnJheSBvZiBwcm9taXNlcyB0byBiZSByZXNvbHZlZCBiZWZvcmUgY29udGludWluZ1xuXHQgKiBAcHJvdGVjdGVkXG5cdCAqL1xuXHRAcHVibGljRXh0ZW5zaW9uKClcblx0QGV4dGVuc2libGUoT3ZlcnJpZGVFeGVjdXRpb24uQWZ0ZXIpXG5cdC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBAdHlwZXNjcmlwdC1lc2xpbnQvbm8tdW51c2VkLXZhcnNcblx0YXBwbHlBZGRpdGlvbmFsU3RhdGVzKG9WaWV3U3RhdGU6IG9iamVjdCwgYVByb21pc2VzOiBQcm9taXNlPHVua25vd24+KTogdm9pZCB7XG5cdFx0Ly8gdG8gYmUgb3ZlcnJpZGRlbiBpZiBuZWVkZWRcblx0fVxuXG5cdEBwcml2YXRlRXh0ZW5zaW9uKClcblx0X2FwcGx5TmF2aWdhdGlvblBhcmFtZXRlcnNUb0ZpbHRlcmJhcihfb05hdlBhcmFtZXRlcjogTmF2aWdhdGlvblBhcmFtZXRlciwgX2FQcm9taXNlczogUHJvbWlzZTx1bmtub3duPik6IHZvaWQge1xuXHRcdC8vIHRvIGJlIG92ZXJyaWRkZW4gaWYgbmVlZGVkXG5cdH1cblxuXHQvKipcblx0ICogQXBwbHkgbmF2aWdhdGlvbiBwYXJhbWV0ZXJzIGlzIG5vdCBjYWxsZWQgaWYgdGhlIG5hdmlnYXRpb24gdHlwZSBpcyBpQXBwU3RhdGVcblx0ICpcblx0ICogVGhpcyBmdW5jdGlvbiBpcyBtZWFudCB0byBiZSBpbmRpdmlkdWFsbHkgb3ZlcnJpZGRlbiBieSBjb25zdW1pbmcgY29udHJvbGxlcnMsIGJ1dCBub3QgdG8gYmUgY2FsbGVkIGRpcmVjdGx5LlxuXHQgKiBUaGUgb3ZlcnJpZGUgZXhlY3V0aW9uIGlzOiB7QGxpbmsgc2FwLnVpLmNvcmUubXZjLk92ZXJyaWRlRXhlY3V0aW9uLkFmdGVyfS5cblx0ICogQHBhcmFtIG9OYXZQYXJhbWV0ZXIgVGhlIGN1cnJlbnQgbmF2aWdhdGlvbiBwYXJhbWV0ZXJcblx0ICogQHBhcmFtIGFQcm9taXNlcyBFeHRlbnNpYmxlIGFycmF5IG9mIHByb21pc2VzIHRvIGJlIHJlc29sdmVkIGJlZm9yZSBjb250aW51aW5nXG5cdCAqIEBwcm90ZWN0ZWRcblx0ICovXG5cdEBwdWJsaWNFeHRlbnNpb24oKVxuXHRAZXh0ZW5zaWJsZShPdmVycmlkZUV4ZWN1dGlvbi5BZnRlcilcblx0YXBwbHlOYXZpZ2F0aW9uUGFyYW1ldGVycyhcblx0XHQvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgQHR5cGVzY3JpcHQtZXNsaW50L25vLXVudXNlZC12YXJzXG5cdFx0b05hdlBhcmFtZXRlcjogTmF2aWdhdGlvblBhcmFtZXRlcixcblx0XHQvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgQHR5cGVzY3JpcHQtZXNsaW50L25vLXVudXNlZC12YXJzXG5cdFx0YVByb21pc2VzOiBQcm9taXNlPHVua25vd24+XG5cdCk6IHZvaWQge1xuXHRcdC8vIHRvIGJlIG92ZXJyaWRkZW4gaWYgbmVlZGVkXG5cdH1cblxuXHQvKipcblx0ICogQXBwbHlpbmcgdGhlIGdpdmVuIHN0YXRlIHRvIHRoZSBnaXZlbiBjb250cm9sLlxuXHQgKiBAcGFyYW0gb0NvbnRyb2wgVGhlIG9iamVjdCB0byBhcHBseSB0aGUgZ2l2ZW4gc3RhdGVcblx0ICogQHBhcmFtIG9Db250cm9sU3RhdGUgVGhlIHN0YXRlIGZvciB0aGUgZ2l2ZW4gY29udHJvbFxuXHQgKiBAcGFyYW0gW29OYXZQYXJhbWV0ZXJzXSBUaGUgY3VycmVudCBuYXZpZ2F0aW9uIHBhcmFtZXRlcnNcblx0ICogQHBhcmFtIFtza2lwTWVyZ2VdIFdoZXRoZXIgbWVyZ2Ugc2hvdWxkIGJlIHNraXBwZWQgb3Igbm90XG5cdCAqIEByZXR1cm5zIFJldHVybiBhIHByb21pc2UgZm9yIGFzeW5jIHN0YXRlIGhhbmRsaW5nXG5cdCAqL1xuXHRAcHJpdmF0ZUV4dGVuc2lvbigpXG5cdEBmaW5hbEV4dGVuc2lvbigpXG5cdGFzeW5jIGFwcGx5Q29udHJvbFN0YXRlKFxuXHRcdG9Db250cm9sOiBNYW5hZ2VkT2JqZWN0LFxuXHRcdG9Db250cm9sU3RhdGU6IG9iamVjdCxcblx0XHRvTmF2UGFyYW1ldGVycz86IE5hdmlnYXRpb25QYXJhbWV0ZXIsXG5cdFx0c2tpcE1lcmdlPzogYm9vbGVhblxuXHQpOiBQcm9taXNlPHZvaWQ+IHtcblx0XHRjb25zdCBhQ29udHJvbFN0YXRlSGFuZGxlcnMgPSB0aGlzLmdldENvbnRyb2xTdGF0ZUhhbmRsZXIob0NvbnRyb2wpO1xuXHRcdGxldCBvUHJvbWlzZUNoYWluID0gUHJvbWlzZS5yZXNvbHZlKCk7XG5cdFx0YUNvbnRyb2xTdGF0ZUhhbmRsZXJzLmZvckVhY2goKG1Db250cm9sU3RhdGVIYW5kbGVyKSA9PiB7XG5cdFx0XHRpZiAodHlwZW9mIG1Db250cm9sU3RhdGVIYW5kbGVyLmFwcGx5ICE9PSBcImZ1bmN0aW9uXCIpIHtcblx0XHRcdFx0dGhyb3cgbmV3IEVycm9yKGBjb250cm9sU3RhdGVIYW5kbGVyLmFwcGx5IGlzIG5vdCBhIGZ1bmN0aW9uIGZvciBjb250cm9sOiAke29Db250cm9sLmdldE1ldGFkYXRhKCkuZ2V0TmFtZSgpfWApO1xuXHRcdFx0fVxuXHRcdFx0b1Byb21pc2VDaGFpbiA9IG9Qcm9taXNlQ2hhaW4udGhlbihtQ29udHJvbFN0YXRlSGFuZGxlci5hcHBseS5iaW5kKHRoaXMsIG9Db250cm9sLCBvQ29udHJvbFN0YXRlLCBvTmF2UGFyYW1ldGVycywgc2tpcE1lcmdlKSk7XG5cdFx0fSk7XG5cdFx0cmV0dXJuIG9Qcm9taXNlQ2hhaW47XG5cdH1cblxuXHRAcHVibGljRXh0ZW5zaW9uKClcblx0cHVibGljIHVwZGF0ZUFwcFN0YXRlRGVib3VuY2VkKCk6IHZvaWQge1xuXHRcdGlmICh0aGlzLnVwZGF0ZUFwcFN0YXRlVGltZXIpIHtcblx0XHRcdGNsZWFyVGltZW91dCh0aGlzLnVwZGF0ZUFwcFN0YXRlVGltZXIpO1xuXHRcdH1cblx0XHR0aGlzLnVwZGF0ZUFwcFN0YXRlVGltZXIgPSBzZXRUaW1lb3V0KCgpID0+IHtcblx0XHRcdHRoaXMuYmFzZS5nZXRFeHRlbnNpb25BUEkoKS51cGRhdGVBcHBTdGF0ZSgpO1xuXHRcdH0sIDIwMCkgYXMgdW5rbm93biBhcyBudW1iZXI7XG5cdH1cblxuXHQvKipcblx0ICogUmVnaXN0ZXIgYSBkZWRpY2F0ZWQgSVZpZXdTdGF0ZUNvbnRyaWJ1dG9yIGludG8gdGhlIHdob2xlIHZpZXcgc3RhdGUgaGFuZGxpbmcuXG5cdCAqIEBwYXJhbSBzdGF0ZUNvbnRyaWJ1dG9yIFRoZSBWaWV3U3RhdGVDb250cmlidXRvciB0byByZWdpc3RlclxuXHQgKi9cblx0cmVnaXN0ZXJTdGF0ZUNvbnRyaWJ1dG9yKHN0YXRlQ29udHJpYnV0b3I6IE1hbmFnZWRPYmplY3QgJiBJVmlld1N0YXRlQ29udHJpYnV0b3I8dW5rbm93bj4pOiB2b2lkIHtcblx0XHRpZiAodGhpcy5zdGF0ZUNvbnRyaWJ1dG9ycy5pbmNsdWRlcyhzdGF0ZUNvbnRyaWJ1dG9yKSkge1xuXHRcdFx0Ly8gbm8gbmVlZCB0byByZWdpc3RlciB0aGUgc2FtZSBjb250cm9sIGFnYWluXG5cdFx0XHRyZXR1cm47XG5cdFx0fVxuXHRcdHRoaXMuc3RhdGVDb250cmlidXRvcnMucHVzaChzdGF0ZUNvbnRyaWJ1dG9yKTtcblx0XHRpZiAodGhpcy5fY3VycmVudFZpZXdTdGF0ZSkge1xuXHRcdFx0Y29uc3QgY29udHJvbEtleSA9IHRoaXMuZ2V0U3RhdGVLZXkoc3RhdGVDb250cmlidXRvcik7XG5cdFx0XHRjb25zdCBjb250cm9sU3RhdGUgPSB0aGlzLl9jdXJyZW50Vmlld1N0YXRlW2NvbnRyb2xLZXldO1xuXHRcdFx0Y29uc3QgbmF2aWdhdGlvblR5cGUgPSB0aGlzLmNvbmZpZ09mU3RhdGVBcHBseT8ubmF2VHlwZVBhcmFtZXRlcnM/Lm5hdmlnYXRpb25UeXBlO1xuXHRcdFx0Y29uc3Qgc2tpcE1lcmdlID0gdGhpcy5jb25maWdPZlN0YXRlQXBwbHk/LnNraXBNZXJnZTtcblx0XHRcdGlmIChjb250cm9sU3RhdGUgJiYgY29udHJvbFN0YXRlID09PSB0aGlzLmNvbmZpZ09mU3RhdGVBcHBseT8uc3RhdGU/Lltjb250cm9sS2V5XSkge1xuXHRcdFx0XHQvLyBUbyBjaGVjayB3aGV0aGVyIGRpZmZzdGF0ZSBzaHVvbGQgYmUgY2FsbGVkIG9yIG5vdCB0byBhcHBseUV4dGVybmFsU3RhdGVcblx0XHRcdFx0Y29uc3Qgc2hvdWxkQXBwbHlEaWZmU3RhdGUgPVxuXHRcdFx0XHRcdCF0aGlzLmludmFsaWRhdGVJbml0aWFsU3RhdGVGb3JBcHBseS5pbmNsdWRlcyhzdGF0ZUNvbnRyaWJ1dG9yLmdldElkKCkpICYmXG5cdFx0XHRcdFx0IXRoaXMuY29udHJvbHNWYXJpYW50SWRVbmF2YWlsYWJsZS5pbmNsdWRlcyhzdGF0ZUNvbnRyaWJ1dG9yLmdldElkKCkpICYmXG5cdFx0XHRcdFx0bmF2aWdhdGlvblR5cGUgIT09IE5hdlR5cGUuaHlicmlkICYmXG5cdFx0XHRcdFx0c2tpcE1lcmdlICE9PSB0cnVlO1xuXG5cdFx0XHRcdHN0YXRlQ29udHJpYnV0b3IuYXBwbHlTdGF0ZShjb250cm9sU3RhdGUsIHVuZGVmaW5lZCwgc2hvdWxkQXBwbHlEaWZmU3RhdGUpO1xuXHRcdFx0fSBlbHNlIHtcblx0XHRcdFx0dGhpcy51cGRhdGVBcHBTdGF0ZURlYm91bmNlZCgpO1xuXHRcdFx0fVxuXHRcdH1cblx0fVxuXG5cdC8qKlxuXHQgKiBEZXJlZ2lzdGVyIGEgZGVkaWNhdGVkIElWaWV3U3RhdGVDb250cmlidXRvciBmcm9tIHRoZSB3aG9sZSB2aWV3IHN0YXRlIGhhbmRsaW5nLlxuXHQgKiBAcGFyYW0gc3RhdGVDb250cmlidXRvciBUaGUgVmlld1N0YXRlQ29udHJpYnV0b3IgdG8gZGVyZWdpc3RlclxuXHQgKi9cblx0ZGVyZWdpc3RlclN0YXRlQ29udHJpYnV0b3Ioc3RhdGVDb250cmlidXRvcjogTWFuYWdlZE9iamVjdCAmIElWaWV3U3RhdGVDb250cmlidXRvcjx1bmtub3duPik6IHZvaWQge1xuXHRcdGNvbnN0IHRhcmdldEluZGV4ID0gdGhpcy5zdGF0ZUNvbnRyaWJ1dG9ycy5maW5kSW5kZXgoKGNvbnRyaWJ1dG9yKSA9PiBjb250cmlidXRvciA9PSBzdGF0ZUNvbnRyaWJ1dG9yKTtcblx0XHRpZiAodGFyZ2V0SW5kZXggIT09IC0xKSB7XG5cdFx0XHR0aGlzLnN0YXRlQ29udHJpYnV0b3JzLnNwbGljZSh0YXJnZXRJbmRleCwgMSk7XG5cdFx0fVxuXHR9XG5cblx0Z2V0SW50ZXJmYWNlKCk6IHRoaXMge1xuXHRcdHJldHVybiB0aGlzO1xuXHR9XG5cblx0Ly8gbWV0aG9kIHRvIGdldCB0aGUgY29udHJvbCBzdGF0ZSBmb3IgbWRjIGNvbnRyb2xzIGFwcGx5aW5nIHRoZSBkZWx0YSBsb2dpY1xuXHRfZ2V0Q29udHJvbFN0YXRlKGNvbnRyb2xTdGF0ZUtleTogc3RyaW5nLCBjb250cm9sU3RhdGU6IENvbnRyb2xTdGF0ZSk6IENvbnRyb2xTdGF0ZSB7XG5cdFx0Y29uc3QgaW5pdGlhbENvbnRyb2xTdGF0ZXNNYXBwZXIgPSB0aGlzLmluaXRpYWxDb250cm9sU3RhdGVzTWFwcGVyO1xuXHRcdGlmIChPYmplY3Qua2V5cyhpbml0aWFsQ29udHJvbFN0YXRlc01hcHBlcikubGVuZ3RoID4gMCAmJiBpbml0aWFsQ29udHJvbFN0YXRlc01hcHBlcltjb250cm9sU3RhdGVLZXldKSB7XG5cdFx0XHRpZiAoT2JqZWN0LmtleXMoaW5pdGlhbENvbnRyb2xTdGF0ZXNNYXBwZXJbY29udHJvbFN0YXRlS2V5XSBhcyBvYmplY3QpLmxlbmd0aCA9PT0gMCkge1xuXHRcdFx0XHRpbml0aWFsQ29udHJvbFN0YXRlc01hcHBlcltjb250cm9sU3RhdGVLZXldID0geyAuLi5jb250cm9sU3RhdGUgfTtcblx0XHRcdH1cblx0XHRcdHJldHVybiB7IGZ1bGxTdGF0ZTogY29udHJvbFN0YXRlIGFzIG9iamVjdCwgaW5pdGlhbFN0YXRlOiBpbml0aWFsQ29udHJvbFN0YXRlc01hcHBlcltjb250cm9sU3RhdGVLZXldIGFzIG9iamVjdCB9O1xuXHRcdH1cblx0XHRyZXR1cm4gY29udHJvbFN0YXRlO1xuXHR9XG5cblx0Ly9tZXRob2QgdG8gc3RvcmUgdGhlIGluaXRpYWwgc3RhdGVzIGZvciBkZWx0YSBjb21wdXRhdGlvbiBvZiBtZGMgY29udHJvbHNcblx0X3NldEluaXRpYWxTdGF0ZXNGb3JEZWx0YUNvbXB1dGUgPSBhc3luYyAodmFyaWFudE1hbmFnZW1lbnQ/OiBWYXJpYW50TWFuYWdlbWVudCk6IFByb21pc2U8dm9pZD4gPT4ge1xuXHRcdHRyeSB7XG5cdFx0XHRjb25zdCBhZGFwdENvbnRyb2xzID0gdGhpcy52aWV3U3RhdGVDb250cm9scztcblxuXHRcdFx0Y29uc3QgZXh0ZXJuYWxTdGF0ZVByb21pc2VzOiBQcm9taXNlPG9iamVjdD5bXSA9IFtdO1xuXHRcdFx0Y29uc3QgY29udHJvbFN0YXRlS2V5OiBzdHJpbmdbXSA9IFtdO1xuXHRcdFx0bGV0IGluaXRpYWxDb250cm9sU3RhdGVzOiBvYmplY3RbXSA9IFtdO1xuXHRcdFx0Y29uc3QgdmFyaWFudENvbnRyb2xzOiBzdHJpbmdbXSA9IHZhcmlhbnRNYW5hZ2VtZW50Py5nZXRGb3IoKSA/PyBbXTtcblxuXHRcdFx0dGhpcy51cGRhdGVJbml0aWFsU3RhdGUodmFyaWFudENvbnRyb2xzKTtcblxuXHRcdFx0YXdhaXQgUHJvbWlzZS5hbGwoXG5cdFx0XHRcdGFkYXB0Q29udHJvbHNcblx0XHRcdFx0XHQuZmlsdGVyKGZ1bmN0aW9uIChjb250cm9sKSB7XG5cdFx0XHRcdFx0XHRyZXR1cm4gKFxuXHRcdFx0XHRcdFx0XHRjb250cm9sICYmXG5cdFx0XHRcdFx0XHRcdCghdmFyaWFudE1hbmFnZW1lbnQgfHwgdmFyaWFudENvbnRyb2xzLmluY2x1ZGVzKChjb250cm9sIGFzIENvbnRyb2wpLmdldElkKCkpKSAmJlxuXHRcdFx0XHRcdFx0XHQoKGNvbnRyb2wgYXMgQmFzZU9iamVjdCkuaXNBKFwic2FwLnVpLm1kYy5UYWJsZVwiKSB8fFxuXHRcdFx0XHRcdFx0XHRcdChjb250cm9sIGFzIEJhc2VPYmplY3QpLmlzQShcInNhcC51aS5tZGMuRmlsdGVyQmFyXCIpIHx8XG5cdFx0XHRcdFx0XHRcdFx0KGNvbnRyb2wgYXMgQmFzZU9iamVjdCkuaXNBKFwic2FwLnVpLm1kYy5DaGFydFwiKSlcblx0XHRcdFx0XHRcdCk7XG5cdFx0XHRcdFx0fSlcblx0XHRcdFx0XHQubWFwKGFzeW5jIChjb250cm9sKSA9PiB7XG5cdFx0XHRcdFx0XHRpZiAodmFyaWFudE1hbmFnZW1lbnQpIHtcblx0XHRcdFx0XHRcdFx0dGhpcy5fYWRkRXZlbnRMaXN0ZW5lcnNUb1ZhcmlhbnRNYW5hZ2VtZW50KHZhcmlhbnRNYW5hZ2VtZW50LCB2YXJpYW50Q29udHJvbHMpO1xuXHRcdFx0XHRcdFx0fVxuXG5cdFx0XHRcdFx0XHRjb25zdCBleHRlcm5hbFN0YXRlUHJvbWlzZSA9IChhd2FpdCBnZXRTdGF0ZVV0aWwoKSkucmV0cmlldmVFeHRlcm5hbFN0YXRlKGNvbnRyb2wgYXMgTURDQ29udHJvbCk7XG5cdFx0XHRcdFx0XHRleHRlcm5hbFN0YXRlUHJvbWlzZXMucHVzaChleHRlcm5hbFN0YXRlUHJvbWlzZSk7XG5cdFx0XHRcdFx0XHRjb250cm9sU3RhdGVLZXkucHVzaCh0aGlzLmdldFN0YXRlS2V5KGNvbnRyb2wpKTtcblx0XHRcdFx0XHR9KVxuXHRcdFx0KTtcblxuXHRcdFx0aW5pdGlhbENvbnRyb2xTdGF0ZXMgPSBhd2FpdCBQcm9taXNlLmFsbChleHRlcm5hbFN0YXRlUHJvbWlzZXMpO1xuXHRcdFx0aW5pdGlhbENvbnRyb2xTdGF0ZXMuZm9yRWFjaCgoaW5pdGlhbENvbnRyb2xTdGF0ZTogb2JqZWN0LCBpOiBudW1iZXIpID0+IHtcblx0XHRcdFx0dGhpcy5pbml0aWFsQ29udHJvbFN0YXRlc01hcHBlcltjb250cm9sU3RhdGVLZXlbaV1dID0gaW5pdGlhbENvbnRyb2xTdGF0ZTtcblx0XHRcdH0pO1xuXHRcdH0gY2F0Y2ggKGU6IHVua25vd24pIHtcblx0XHRcdExvZy5lcnJvcihlIGFzIHN0cmluZyk7XG5cdFx0fVxuXHR9O1xuXG5cdC8vIEF0dGFjaCBldmVudCB0byBzYXZlIGFuZCBzZWxlY3Qgb2YgVmFyaWFudCBNYW5hZ2VtZW50IHRvIHVwZGF0ZSB0aGUgaW5pdGlhbCBDb250cm9sIFN0YXRlcyBvbiB2YXJpYW50IGNoYW5nZVxuXHRfYWRkRXZlbnRMaXN0ZW5lcnNUb1ZhcmlhbnRNYW5hZ2VtZW50KHZhcmlhbnRNYW5hZ2VtZW50OiBWYXJpYW50TWFuYWdlbWVudCwgdmFyaWFudENvbnRyb2xzOiBzdHJpbmdbXSk6IHZvaWQge1xuXHRcdGNvbnN0IG9QYXlsb2FkID0geyB2YXJpYW50TWFuYWdlZENvbnRyb2xzOiB2YXJpYW50Q29udHJvbHMgfTtcblx0XHRjb25zdCBmbkV2ZW50ID0gKCk6IHZvaWQgPT4ge1xuXHRcdFx0dGhpcy5fdXBkYXRlSW5pdGlhbFN0YXRlc09uVmFyaWFudENoYW5nZSh2YXJpYW50Q29udHJvbHMpO1xuXHRcdH07XG5cdFx0dmFyaWFudE1hbmFnZW1lbnQuYXR0YWNoU2F2ZShvUGF5bG9hZCwgZm5FdmVudCwge30pO1xuXHRcdHZhcmlhbnRNYW5hZ2VtZW50LmF0dGFjaFNlbGVjdChvUGF5bG9hZCwgZm5FdmVudCwge30pO1xuXHR9XG5cblx0X3VwZGF0ZUluaXRpYWxTdGF0ZXNPblZhcmlhbnRDaGFuZ2Uodm1Bc3NvY2lhdGVkQ29udHJvbHNUb1Jlc2V0OiBzdHJpbmdbXSk6IHZvaWQge1xuXHRcdGNvbnN0IGluaXRpYWxDb250cm9sU3RhdGVzTWFwcGVyID0gdGhpcy5pbml0aWFsQ29udHJvbFN0YXRlc01hcHBlcjtcblx0XHRPYmplY3Qua2V5cyhpbml0aWFsQ29udHJvbFN0YXRlc01hcHBlcikuZm9yRWFjaCgoY29udHJvbEtleSkgPT4ge1xuXHRcdFx0Zm9yIChjb25zdCB2bUFzc29jaWF0ZWRjb250cm9sS2V5IG9mIHZtQXNzb2NpYXRlZENvbnRyb2xzVG9SZXNldCkge1xuXHRcdFx0XHRpZiAodm1Bc3NvY2lhdGVkY29udHJvbEtleS5pbmNsdWRlcyhjb250cm9sS2V5KSkge1xuXHRcdFx0XHRcdGluaXRpYWxDb250cm9sU3RhdGVzTWFwcGVyW2NvbnRyb2xLZXldID0ge307XG5cdFx0XHRcdH1cblx0XHRcdH1cblx0XHR9KTtcblx0XHR0aGlzLnVwZGF0ZUluaXRpYWxTdGF0ZSh2bUFzc29jaWF0ZWRDb250cm9sc1RvUmVzZXQpO1xuXHR9XG5cblx0LyoqXG5cdCAqIFVwZGF0ZXMgdGhlIGluaXRpYWwgc3RhdGUgb2YgdGhlIHNwZWNpZmllZCB2YXJpYW50IGNvbnRyb2xzLlxuXHQgKiBAcGFyYW0gdmFyaWFudENvbnRyb2xzIEFuIGFycmF5IG9mIGNvbnRyb2wgSURzIGZvciB3aGljaCB0aGUgaW5pdGlhbCBzdGF0ZSBuZWVkcyB0byBiZSB1cGRhdGVkLlxuXHQgKiBAcmV0dXJucyBBIHByb21pc2UgdGhhdCByZXNvbHZlcyB3aGVuIHRoZSBpbml0aWFsIHN0YXRlIHVwZGF0ZSBpcyBjb21wbGV0ZS5cblx0ICovXG5cdGFzeW5jIHVwZGF0ZUluaXRpYWxTdGF0ZSh2YXJpYW50Q29udHJvbHM6IHN0cmluZ1tdKTogUHJvbWlzZTx2b2lkPiB7XG5cdFx0Y29uc3Qgdmlld0NvbnRyb2xzOiAoTWFuYWdlZE9iamVjdCB8IHVuZGVmaW5lZClbXSA9IHRoaXMuc3RhdGVDb250cmlidXRvcnM7XG5cdFx0YXdhaXQgUHJvbWlzZS5hbGwoXG5cdFx0XHR2aWV3Q29udHJvbHMubWFwKGFzeW5jIChjb250cm9sKSA9PiB7XG5cdFx0XHRcdGNvbnN0IGNvbnRyb2xJZDogc3RyaW5nID0gY29udHJvbD8uZ2V0SWQoKSBhcyBzdHJpbmc7XG5cdFx0XHRcdGlmIChcblx0XHRcdFx0XHR2YXJpYW50Q29udHJvbHMuaW5jbHVkZXMoY29udHJvbElkKSAmJlxuXHRcdFx0XHRcdGNvbnRyb2w/LmlzQTxJVmlld1N0YXRlQ29udHJpYnV0b3I8b2JqZWN0Pj4oXCJzYXAuZmUuY29yZS5jb250cm9sbGVyZXh0ZW5zaW9ucy52aWV3U3RhdGUuSVZpZXdTdGF0ZUNvbnRyaWJ1dG9yXCIpICYmXG5cdFx0XHRcdFx0Y29udHJvbC5zZXRJbml0aWFsU3RhdGVcblx0XHRcdFx0KSB7XG5cdFx0XHRcdFx0YXdhaXQgY29udHJvbC5zZXRJbml0aWFsU3RhdGUoKTtcblx0XHRcdFx0fVxuXHRcdFx0fSlcblx0XHQpO1xuXHR9XG5cblx0X2lzSW5pdGlhbFN0YXRlc0FwcGxpY2FibGUoXG5cdFx0aW5pdGlhbFN0YXRlOiBvYmplY3QgfCB1bmRlZmluZWQsXG5cdFx0Y29udHJvbDogRmlsdGVyQmFyIHwgTURDVGFibGUsXG5cdFx0c2tpcE1lcmdlOiBib29sZWFuIHwgdW5kZWZpbmVkLFxuXHRcdGlzTmF2SHlicmlkPzogYm9vbGVhblxuXHQpOiBib29sZWFuIHtcblx0XHRyZXR1cm4gKFxuXHRcdFx0ISFpbml0aWFsU3RhdGUgJiZcblx0XHRcdCF0aGlzLmludmFsaWRhdGVJbml0aWFsU3RhdGVGb3JBcHBseS5pbmNsdWRlcyhjb250cm9sLmdldElkKCkpICYmXG5cdFx0XHQhdGhpcy5jb250cm9sc1ZhcmlhbnRJZFVuYXZhaWxhYmxlLmluY2x1ZGVzKGNvbnRyb2wuZ2V0SWQoKSkgJiZcblx0XHRcdChpc05hdkh5YnJpZCA/PyB0cnVlKSAmJlxuXHRcdFx0c2tpcE1lcmdlICE9PSB0cnVlXG5cdFx0KTtcblx0fVxufVxuXG5leHBvcnQgZGVmYXVsdCBWaWV3U3RhdGU7XG4iXSwibWFwcGluZ3MiOiI7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7OztFQTRCQTtFQUNBO0VBQ0E7RUFDQSxNQUFNQSxPQUFPLEdBQUdDLFVBQVUsQ0FBQ0QsT0FBTzs7RUFFbEM7QUFDQTtBQUNBO0FBQ0E7O0VBd0JB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U0FBQSxxQkFBQWxDLE9BQUEsQ0FBQWtDLFNBQUEsR0FBQTZJLHlCQUFBLENBQUEvSyxPQUFBLENBQUFrQyxTQUFBLG1DQUFBaEQsTUFBQSxHQUFBNEYsTUFBQSxDQUFBa0csd0JBQUEsQ0FBQWhMLE9BQUEsQ0FBQWtDLFNBQUEsbUNBQUFsQyxPQUFBLENBQUFrQyxTQUFBLEdBQUE2SSx5QkFBQSxDQUFBL0ssT0FBQSxDQUFBa0MsU0FBQSwyQkFBQS9DLE1BQUEsRUFBQUMsTUFBQSxHQUFBMEYsTUFBQSxDQUFBa0csd0JBQUEsQ0FBQWhMLE9BQUEsQ0FBQWtDLFNBQUEsMkJBQUFsQyxPQUFBLENBQUFrQyxTQUFBLEdBQUE2SSx5QkFBQSxDQUFBL0ssT0FBQSxDQUFBa0MsU0FBQSwwQkFBQTdDLE1BQUEsRUFBQUMsTUFBQSxHQUFBd0YsTUFBQSxDQUFBa0csd0JBQUEsQ0FBQWhMLE9BQUEsQ0FBQWtDLFNBQUEsMEJBQUFsQyxPQUFBLENBQUFrQyxTQUFBLEdBQUE2SSx5QkFBQSxDQUFBL0ssT0FBQSxDQUFBa0MsU0FBQSw0QkFBQTNDLE1BQUEsRUFBQUMsTUFBQSxHQUFBc0YsTUFBQSxDQUFBa0csd0JBQUEsQ0FBQWhMLE9BQUEsQ0FBQWtDLFNBQUEsNEJBQUFsQyxPQUFBLENBQUFrQyxTQUFBLEdBQUE2SSx5QkFBQSxDQUFBL0ssT0FBQSxDQUFBa0MsU0FBQSw0Q0FBQXpDLE1BQUEsR0FBQXFGLE1BQUEsQ0FBQWtHLHdCQUFBLENBQUFoTCxPQUFBLENBQUFrQyxTQUFBLDRDQUFBbEMsT0FBQSxDQUFBa0MsU0FBQSxHQUFBNkkseUJBQUEsQ0FBQS9LLE9BQUEsQ0FBQWtDLFNBQUEsZ0NBQUF4QyxNQUFBLEVBQUFDLE1BQUEsR0FBQW1GLE1BQUEsQ0FBQWtHLHdCQUFBLENBQUFoTCxPQUFBLENBQUFrQyxTQUFBLGdDQUFBbEMsT0FBQSxDQUFBa0MsU0FBQSxHQUFBNkkseUJBQUEsQ0FBQS9LLE9BQUEsQ0FBQWtDLFNBQUEsd0JBQUF0QyxNQUFBLEVBQUFDLE1BQUEsR0FBQWlGLE1BQUEsQ0FBQWtHLHdCQUFBLENBQUFoTCxPQUFBLENBQUFrQyxTQUFBLHdCQUFBbEMsT0FBQSxDQUFBa0MsU0FBQSxHQUFBNkkseUJBQUEsQ0FBQS9LLE9BQUEsQ0FBQWtDLFNBQUEsOEJBQUFwQyxNQUFBLEdBQUFnRixNQUFBLENBQUFrRyx3QkFBQSxDQUFBaEwsT0FBQSxDQUFBa0MsU0FBQSw4QkFBQWxDLE9BQUEsQ0FBQWtDLFNBQUEsSUFBQWxDLE9BQUEsTUFBQUQsTUFBQTtFQUFBLE9BOHpCNUJ6RCxTQUFTO0FBQUEiLCJpZ25vcmVMaXN0IjpbXX0=
880
+ //# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJuYW1lcyI6WyJOYXZUeXBlIiwiTmF2TGlicmFyeSIsIkFERElUSU9OQUxfU1RBVEVTX0tFWSIsImdldFN0YXRlVXRpbCIsIl9fdWk1X3JlcXVpcmVfYXN5bmMiLCJkZWZhdWx0IiwiX21Db250cm9sU3RhdGVIYW5kbGVyTWFwIiwicmV0cmlldmUiLCJvVk0iLCJ2YXJpYW50SWQiLCJnZXRDdXJyZW50VmFyaWFudEtleSIsImFwcGx5IiwiY29udHJvbFN0YXRlIiwidW5kZWZpbmVkIiwiaXNWYXJpYW50SWRBdmFpbGFibGUiLCJfY2hlY2tJZlZhcmlhbnRJZElzQXZhaWxhYmxlIiwic1ZhcmlhbnRSZWZlcmVuY2UiLCJnZXRTdGFuZGFyZFZhcmlhbnRLZXkiLCJjb250cm9sc1ZhcmlhbnRJZFVuYXZhaWxhYmxlIiwicHVzaCIsImdldEZvciIsIkNvbnRyb2xWYXJpYW50QXBwbHlBUEkiLCJhY3RpdmF0ZVZhcmlhbnQiLCJlbGVtZW50IiwidmFyaWFudFJlZmVyZW5jZSIsIl9zZXRJbml0aWFsU3RhdGVzRm9yRGVsdGFDb21wdXRlIiwiZXJyb3IiLCJMb2ciLCJpbnZhbGlkYXRlSW5pdGlhbFN0YXRlRm9yQXBwbHkiLCJtdWx0aXBsZU1vZGVDb250cm9sIiwic2VsZWN0ZWRLZXkiLCJjb250ZW50IiwiZ2V0U2VsZWN0ZWRLZXkiLCJ0YWJCYXIiLCJzZWxlY3RlZEl0ZW0iLCJnZXRJdGVtcyIsImZpbmQiLCJpdGVtIiwiZ2V0S2V5Iiwic2V0U2VsZWN0ZWRLZXkiLCJnZXRNb2RlbCIsImdldFByb3BlcnR5IiwicmVmcmVzaFNlbGVjdGVkSW5uZXJDb250cm9sQ29udGVudCIsInJlZnJlc2hCaW5kaW5nIiwib1RhYmxlIiwib1RhYmxlQmluZGluZyIsImdldFJvd0JpbmRpbmciLCJvUm9vdEJpbmRpbmciLCJnZXRSb290QmluZGluZyIsImFnZ3JlZ2F0aW9uIiwiZ2V0QWdncmVnYXRpb24iLCJoaWVyYXJjaHlRdWFsaWZpZXIiLCJyZWZyZXNoIiwib0hlYWRlckNvbnRleHQiLCJnZXRIZWFkZXJDb250ZXh0Iiwic0dyb3VwSWQiLCJnZXRHcm91cElkIiwicmVxdWVzdFNpZGVFZmZlY3RzIiwiJE5hdmlnYXRpb25Qcm9wZXJ0eVBhdGgiLCJpbmZvIiwiZ2V0SWQiLCJvU2VnbWVudGVkQnV0dG9uIiwib0NvbnRyb2xTdGF0ZSIsImdldFBhcmVudCIsImlzQSIsImZpcmVFdmVudCIsIm9TZWxlY3QiLCJvRHluYW1pY1BhZ2UiLCJoZWFkZXJFeHBhbmRlZCIsImdldEhlYWRlckV4cGFuZGVkIiwic2V0SGVhZGVyRXhwYW5kZWQiLCJvVmlldyIsIm9Db250cm9sbGVyIiwiZ2V0Q29udHJvbGxlciIsInZpZXdTdGF0ZSIsInJldHJpZXZlVmlld1N0YXRlIiwib05hdlBhcmFtZXRlcnMiLCJza2lwTWVyZ2UiLCJhcHBseVZpZXdTdGF0ZSIsInJlZnJlc2hWaWV3QmluZGluZ3MiLCJvQ29tcG9uZW50Q29udGFpbmVyIiwib0NvbXBvbmVudCIsImdldENvbXBvbmVudEluc3RhbmNlIiwicmV0cmlldmVDb250cm9sU3RhdGUiLCJnZXRSb290Q29udHJvbCIsImFwcGx5Q29udHJvbFN0YXRlIiwiVmlld1N0YXRlIiwiX2RlYyIsImRlZmluZVVJNUNsYXNzIiwiX2RlYzIiLCJwdWJsaWNFeHRlbnNpb24iLCJfZGVjMyIsImZpbmFsRXh0ZW5zaW9uIiwiX2RlYzQiLCJfZGVjNSIsImV4dGVuc2libGUiLCJPdmVycmlkZUV4ZWN1dGlvbiIsIkFmdGVyIiwiX2RlYzYiLCJwcml2YXRlRXh0ZW5zaW9uIiwiX2RlYzciLCJfZGVjOCIsIl9kZWM5IiwiX2RlYzEwIiwiX2RlYzExIiwiX2RlYzEyIiwiX2RlYzEzIiwiX2RlYzE0IiwiX2RlYzE1IiwiX2RlYzE2IiwiX2RlYzE3IiwiX2RlYzE4IiwiX2RlYzE5IiwiX2RlYzIwIiwiX2RlYzIxIiwiX2RlYzIyIiwiX2RlYzIzIiwiX2RlYzI0IiwiX2RlYzI1IiwiX2RlYzI2IiwiX2RlYzI3IiwiX2RlYzI4IiwiX2RlYzI5IiwiX2RlYzMwIiwiX2RlYzMxIiwiX2RlYzMyIiwiX2RlYzMzIiwiSW5zdGVhZCIsIl9kZWMzNCIsIl9kZWMzNSIsIl9kZWMzNiIsIl9kZWMzNyIsIl9kZWMzOCIsIl9kZWMzOSIsIl9kZWM0MCIsIl9kZWM0MSIsIl9kZWM0MiIsIl9kZWM0MyIsIl9kZWM0NCIsIl9kZWM0NSIsIl9kZWM0NiIsIl9kZWM0NyIsIl9kZWM0OCIsIl9jbGFzcyIsIl9jbGFzczIiLCJfQ29udHJvbGxlckV4dGVuc2lvbiIsIl90aGlzIiwiY2FsbCIsImluaXRpYWxDb250cm9sU3RhdGVzTWFwcGVyIiwidmlld1N0YXRlQ29udHJvbHMiLCJzdGF0ZUNvbnRyaWJ1dG9ycyIsInZhcmlhbnRNYW5hZ2VtZW50IiwiYWRhcHRDb250cm9scyIsImV4dGVybmFsU3RhdGVQcm9taXNlcyIsImNvbnRyb2xTdGF0ZUtleSIsImluaXRpYWxDb250cm9sU3RhdGVzIiwidmFyaWFudENvbnRyb2xzIiwidXBkYXRlSW5pdGlhbFN0YXRlIiwiUHJvbWlzZSIsImFsbCIsImZpbHRlciIsImNvbnRyb2wiLCJpbmNsdWRlcyIsIm1hcCIsIl9hZGRFdmVudExpc3RlbmVyc1RvVmFyaWFudE1hbmFnZW1lbnQiLCJleHRlcm5hbFN0YXRlUHJvbWlzZSIsInJldHJpZXZlRXh0ZXJuYWxTdGF0ZSIsImdldFN0YXRlS2V5IiwiZm9yRWFjaCIsImluaXRpYWxDb250cm9sU3RhdGUiLCJpIiwiZSIsIl9pUmV0cmlldmluZ1N0YXRlQ291bnRlciIsIl9wSW5pdGlhbFN0YXRlQXBwbGllZCIsInJlc29sdmUiLCJfcEluaXRpYWxTdGF0ZUFwcGxpZWRSZXNvbHZlIiwiX2luaGVyaXRzTG9vc2UiLCJfcHJvdG8iLCJwcm90b3R5cGUiLCJhQ29udHJvbHMiLCJjb2xsZWN0UmVzdWx0cyIsImJhc2UiLCJhZGFwdEJpbmRpbmdSZWZyZXNoQ29udHJvbHMiLCJvUHJvbWlzZUNoYWluIiwib0NvbnRyb2wiLCJ0aGVuIiwicmVmcmVzaENvbnRyb2xCaW5kaW5nIiwiYmluZCIsImFDb2xsZWN0ZWRDb250cm9scyIsIm9Db250cm9sUmVmcmVzaEJpbmRpbmdIYW5kbGVyIiwiZ2V0Q29udHJvbFJlZnJlc2hCaW5kaW5nSGFuZGxlciIsImdldE1ldGFkYXRhIiwiZ2V0TmFtZSIsIm9SZWZyZXNoQmluZGluZ0hhbmRsZXIiLCJzVHlwZSIsImFkYXB0QmluZGluZ1JlZnJlc2hIYW5kbGVyIiwiX29Db250cm9sIiwiX29Db250cm9sSGFuZGxlciIsIm9uU3VzcGVuZCIsIm9uUmVzdG9yZSIsImRlc3Ryb3kiLCJmbkNhbGwiLCJhUmVzdWx0cyIsIl9sZW4iLCJhcmd1bWVudHMiLCJsZW5ndGgiLCJhcmdzIiwiQXJyYXkiLCJfa2V5IiwiYWRhcHRDb250cm9sU3RhdGVIYW5kbGVyIiwiYUNvbnRyb2xIYW5kbGVyIiwiZ2V0Q29udHJvbFN0YXRlSGFuZGxlciIsImFJbnRlcm5hbENvbnRyb2xTdGF0ZUhhbmRsZXIiLCJhQ3VzdG9tQ29udHJvbFN0YXRlSGFuZGxlciIsInJldHJpZXZlU3RhdGUiLCJhcHBseVN0YXRlIiwiX2NvbnRyb2wiLCJzaG91bGRBcHBseURpZmZTdGF0ZSIsIm5hdmlnYXRpb25UeXBlIiwiaHlicmlkIiwiYXBwbHlMZWdhY3lTdGF0ZSIsImdldENvbnRyb2xTdGF0ZSIsIk9iamVjdCIsImFzc2lnbiIsImNvbmNhdCIsImFkYXB0U3RhdGVDb250cm9scyIsIl9hQ29sbGVjdGVkQ29udHJvbHMiLCJnZXRWaWV3IiwiZ2V0TG9jYWxJZCIsIm9WaWV3U3RhdGUiLCJhUmVzb2x2ZWRTdGF0ZXMiLCJ2UmVzdWx0Iiwia2V5IiwidmFsdWUiLCJyZWR1Y2UiLCJvU3RhdGVzIiwibVN0YXRlIiwib0N1cnJlbnRTdGF0ZSIsIm1lcmdlT2JqZWN0cyIsInByZXZTdGF0ZSIsIl9jdXJyZW50Vmlld1N0YXRlIiwia2V5cyIsIl9hZGRNaXNzaW5nU3RhdGUiLCJtQWRkaXRpb25hbFN0YXRlcyIsIl9yZXRyaWV2ZUFkZGl0aW9uYWxTdGF0ZXMiLCJyZXRyaWV2ZUFkZGl0aW9uYWxTdGF0ZXMiLCJhQ29udHJvbFN0YXRlSGFuZGxlcnMiLCJtQ29udHJvbFN0YXRlSGFuZGxlciIsIkVycm9yIiwiYVN0YXRlcyIsIm9GaW5hbFN0YXRlIiwiYXBwbHlJbml0aWFsU3RhdGVPbmx5IiwiY29udHJvbEtleSIsIm9OYXZQYXJhbWV0ZXIiLCJfZ2V0SW5pdGlhbFN0YXRlQXBwbGllZCIsIl9pc1N0YXRlRW1wdHlGb3JJQXBwU3RhdGVOYXZUeXBlIiwiX19pc1Jvb3RWaWV3Q29udHJvbGxlciIsIm9uQmVmb3JlU3RhdGVBcHBsaWVkIiwiaGFzVmFyaWFudE1hbmFnZW1lbnQiLCJjb25maWdPZlN0YXRlQXBwbHkiLCJuYXZUeXBlUGFyYW1ldGVycyIsInN0YXRlIiwic29ydGVkQWRhcHRTdGF0ZUNvbnRyb2xzIiwibW9kaWZpZWRDb250cm9scyIsImlzVmFyaWFudE1hbmFnZW1lbnRDb250cm9sIiwic0tleSIsImlBcHBTdGF0ZSIsImFwcGx5QWRkaXRpb25hbFN0YXRlcyIsImFwcGx5TmF2aWdhdGlvblBhcmFtZXRlcnMiLCJfYXBwbHlOYXZpZ2F0aW9uUGFyYW1ldGVyc1RvRmlsdGVyYmFyIiwib25BZnRlclN0YXRlQXBwbGllZCIsIl9zZXRJbml0aWFsU3RhdGVBcHBsaWVkIiwic1ZhcmlhbnRJZCIsImFWYXJpYW50cyIsImdldFZhcmlhbnRzIiwiYklzQ29udHJvbFN0YXRlVmFyaWFudEF2YWlsYWJsZSIsIm9WYXJpYW50IiwicEluaXRpYWxTdGF0ZUFwcGxpZWRSZXNvbHZlIiwibmF2VHlwZSIsInJvb3RWaWV3Q29udHJvbGxlciIsImFQcm9taXNlcyIsIl9vTmF2UGFyYW1ldGVyIiwiX2FQcm9taXNlcyIsInVwZGF0ZUFwcFN0YXRlRGVib3VuY2VkIiwidXBkYXRlQXBwU3RhdGVUaW1lciIsImNsZWFyVGltZW91dCIsInNldFRpbWVvdXQiLCJnZXRFeHRlbnNpb25BUEkiLCJ1cGRhdGVBcHBTdGF0ZSIsInJlZ2lzdGVyU3RhdGVDb250cmlidXRvciIsInN0YXRlQ29udHJpYnV0b3IiLCJkZXJlZ2lzdGVyU3RhdGVDb250cmlidXRvciIsInRhcmdldEluZGV4IiwiZmluZEluZGV4IiwiY29udHJpYnV0b3IiLCJzcGxpY2UiLCJnZXRJbnRlcmZhY2UiLCJfZ2V0Q29udHJvbFN0YXRlIiwiZnVsbFN0YXRlIiwiaW5pdGlhbFN0YXRlIiwib1BheWxvYWQiLCJ2YXJpYW50TWFuYWdlZENvbnRyb2xzIiwiZm5FdmVudCIsIl91cGRhdGVJbml0aWFsU3RhdGVzT25WYXJpYW50Q2hhbmdlIiwiYXR0YWNoU2F2ZSIsImF0dGFjaFNlbGVjdCIsInZtQXNzb2NpYXRlZENvbnRyb2xzVG9SZXNldCIsInZtQXNzb2NpYXRlZGNvbnRyb2xLZXkiLCJ2aWV3Q29udHJvbHMiLCJjb250cm9sSWQiLCJzZXRJbml0aWFsU3RhdGUiLCJfaXNJbml0aWFsU3RhdGVzQXBwbGljYWJsZSIsImlzTmF2SHlicmlkIiwiQ29udHJvbGxlckV4dGVuc2lvbiIsIl9hcHBseURlY29yYXRlZERlc2NyaXB0b3IiLCJnZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3IiXSwic291cmNlUm9vdCI6Ii4iLCJzb3VyY2VzIjpbIlZpZXdTdGF0ZS50cyJdLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgTG9nIGZyb20gXCJzYXAvYmFzZS9Mb2dcIjtcbmltcG9ydCBtZXJnZU9iamVjdHMgZnJvbSBcInNhcC9iYXNlL3V0aWwvbWVyZ2VcIjtcbmltcG9ydCB0eXBlIER5bmFtaWNQYWdlIGZyb20gXCJzYXAvZi9EeW5hbWljUGFnZVwiO1xuaW1wb3J0IHsgZGVmaW5lVUk1Q2xhc3MsIGV4dGVuc2libGUsIGZpbmFsRXh0ZW5zaW9uLCBwcml2YXRlRXh0ZW5zaW9uLCBwdWJsaWNFeHRlbnNpb24gfSBmcm9tIFwic2FwL2ZlL2Jhc2UvQ2xhc3NTdXBwb3J0XCI7XG5pbXBvcnQgdHlwZSB7IEZFVmlldyB9IGZyb20gXCJzYXAvZmUvY29yZS9CYXNlQ29udHJvbGxlclwiO1xuaW1wb3J0IHR5cGUgUGFnZUNvbnRyb2xsZXIgZnJvbSBcInNhcC9mZS9jb3JlL1BhZ2VDb250cm9sbGVyXCI7XG5pbXBvcnQgdHlwZSBJVmlld1N0YXRlQ29udHJpYnV0b3IgZnJvbSBcInNhcC9mZS9jb3JlL2NvbnRyb2xsZXJleHRlbnNpb25zL3ZpZXdTdGF0ZS9JVmlld1N0YXRlQ29udHJpYnV0b3JcIjtcbmltcG9ydCB0eXBlIFNlbGVjdGlvblZhcmlhbnQgZnJvbSBcInNhcC9mZS9uYXZpZ2F0aW9uL1NlbGVjdGlvblZhcmlhbnRcIjtcbmltcG9ydCBOYXZMaWJyYXJ5IGZyb20gXCJzYXAvZmUvbmF2aWdhdGlvbi9saWJyYXJ5XCI7XG5pbXBvcnQgdHlwZSBNdWx0aXBsZU1vZGVDb250cm9sIGZyb20gXCJzYXAvZmUvdGVtcGxhdGVzL0xpc3RSZXBvcnQvY29udHJvbHMvTXVsdGlwbGVNb2RlQ29udHJvbFwiO1xuaW1wb3J0IHR5cGUgSWNvblRhYkZpbHRlciBmcm9tIFwic2FwL20vSWNvblRhYkZpbHRlclwiO1xuaW1wb3J0IHR5cGUgU2VnbWVudGVkQnV0dG9uIGZyb20gXCJzYXAvbS9TZWdtZW50ZWRCdXR0b25cIjtcbmltcG9ydCB0eXBlIFNlbGVjdCBmcm9tIFwic2FwL20vU2VsZWN0XCI7XG5pbXBvcnQgdHlwZSBNYW5hZ2VkT2JqZWN0IGZyb20gXCJzYXAvdWkvYmFzZS9NYW5hZ2VkT2JqZWN0XCI7XG5pbXBvcnQgdHlwZSBCYXNlT2JqZWN0IGZyb20gXCJzYXAvdWkvYmFzZS9PYmplY3RcIjtcbmltcG9ydCB0eXBlIENvbXBvbmVudENvbnRhaW5lciBmcm9tIFwic2FwL3VpL2NvcmUvQ29tcG9uZW50Q29udGFpbmVyXCI7XG5pbXBvcnQgdHlwZSBDb250cm9sIGZyb20gXCJzYXAvdWkvY29yZS9Db250cm9sXCI7XG5pbXBvcnQgQ29udHJvbGxlckV4dGVuc2lvbiBmcm9tIFwic2FwL3VpL2NvcmUvbXZjL0NvbnRyb2xsZXJFeHRlbnNpb25cIjtcbmltcG9ydCBPdmVycmlkZUV4ZWN1dGlvbiBmcm9tIFwic2FwL3VpL2NvcmUvbXZjL092ZXJyaWRlRXhlY3V0aW9uXCI7XG5pbXBvcnQgdHlwZSBWYXJpYW50TWFuYWdlbWVudCBmcm9tIFwic2FwL3VpL2ZsL3ZhcmlhbnRzL1ZhcmlhbnRNYW5hZ2VtZW50XCI7XG5pbXBvcnQgdHlwZSBNRENDb250cm9sIGZyb20gXCJzYXAvdWkvbWRjL0NvbnRyb2xcIjtcbmltcG9ydCB0eXBlIEZpbHRlckJhciBmcm9tIFwic2FwL3VpL21kYy9GaWx0ZXJCYXJcIjtcbmltcG9ydCB0eXBlIE1EQ1RhYmxlIGZyb20gXCJzYXAvdWkvbWRjL1RhYmxlXCI7XG5cbmltcG9ydCB0eXBlIFN0YXRlVXRpbCBmcm9tIFwic2FwL3VpL21kYy9wMTNuL1N0YXRlVXRpbFwiO1xuaW1wb3J0IHR5cGUgRmNsQ29udHJvbGxlciBmcm9tIFwiLi4vcm9vdFZpZXcvRmNsLmNvbnRyb2xsZXJcIjtcbmltcG9ydCB0eXBlIE5hdkNvbnRhaW5lckNvbnRyb2xsZXIgZnJvbSBcIi4uL3Jvb3RWaWV3L05hdkNvbnRhaW5lci5jb250cm9sbGVyXCI7XG5cbi8vIGFkZGl0aW9uYWxTdGF0ZXMgYXJlIHN0b3JlZCBuZXh0IHRvIGNvbnRyb2wgSURzLCBzbyBuYW1lIGNsYXNoIGF2b2lkYW5jZSBuZWVkZWQuIEZvcnR1bmF0ZWx5IElEcyBoYXZlIHJlc3RyaWN0aW9uczpcbi8vIFwiQWxsb3dlZCBpcyBhIHNlcXVlbmNlIG9mIGNoYXJhY3RlcnMgKGNhcGl0YWwvbG93ZXJjYXNlKSwgZGlnaXRzLCB1bmRlcnNjb3JlcywgZGFzaGVzLCBwb2ludHMgYW5kL29yIGNvbG9ucy5cIlxuLy8gVGhlcmVmb3JlIGFkZGluZyBhIHN5bWJvbCBsaWtlICMgb3IgQFxuY29uc3QgTmF2VHlwZSA9IE5hdkxpYnJhcnkuTmF2VHlwZTtcblxuLyoqXG4gKiBEZWZpbml0aW9uIG9mIGEgbmF2aWdhdGlvbiBwYXJhbWV0ZXJcbiAqIEBwdWJsaWNcbiAqL1xuZXhwb3J0IHR5cGUgTmF2aWdhdGlvblBhcmFtZXRlciA9IHtcblx0LyoqXG5cdCAqICBUaGUgYWN0dWFsIG5hdmlnYXRpb24gdHlwZS5cblx0ICogIEBwdWJsaWNcblx0ICovXG5cdG5hdmlnYXRpb25UeXBlOiBzdHJpbmc7XG5cdC8qKlxuXHQgKiBUaGUgc2VsZWN0aW9uVmFyaWFudCBmcm9tIHRoZSBuYXZpZ2F0aW9uLlxuXHQgKiBAcHVibGljXG5cdCAqL1xuXHRzZWxlY3Rpb25WYXJpYW50PzogU2VsZWN0aW9uVmFyaWFudDtcblx0LyoqXG5cdCAqIFRoZSBzZWxlY3Rpb25WYXJpYW50IGRlZmF1bHRzIGZyb20gdGhlIG5hdmlnYXRpb25cblx0ICogIEBwdWJsaWNcblx0ICovXG5cdHNlbGVjdGlvblZhcmlhbnREZWZhdWx0cz86IFNlbGVjdGlvblZhcmlhbnQ7XG5cdC8qKlxuXHQgKiBEZWZpbmVzIHdoZXRoZXIgdGhlIHN0YW5kYXJkIHZhcmlhbnQgbXVzdCBiZSB1c2VkIGluIHZhcmlhbnQgbWFuYWdlbWVudFxuXHQgKiAgQHB1YmxpY1xuXHQgKi9cblx0cmVxdWlyZXNTdGFuZGFyZFZhcmlhbnQ/OiBib29sZWFuO1xufTtcblxuY29uc3QgQURESVRJT05BTF9TVEFURVNfS0VZID0gXCIjYWRkaXRpb25hbFN0YXRlc1wiO1xuXG5leHBvcnQgdHlwZSBDb250cm9sU3RhdGUgPVxuXHR8ICh7XG5cdFx0XHRpbml0aWFsU3RhdGU/OiB7XG5cdFx0XHRcdHN1cHBsZW1lbnRhcnlDb25maWc/OiBvYmplY3Q7XG5cdFx0XHR9O1xuXHRcdFx0ZnVsbFN0YXRlPzoge1xuXHRcdFx0XHRmaWx0ZXI/OiBvYmplY3Q7XG5cdFx0XHR9O1xuXHQgIH0gJiBSZWNvcmQ8c3RyaW5nLCB1bmtub3duPilcblx0fCB1bmRlZmluZWQ7XG5cbmV4cG9ydCB0eXBlIE5hdlBhcmFtZXRlcnMgPSB7XG5cdG5hdmlnYXRpb25UeXBlPzogc3RyaW5nO1xufTtcbmV4cG9ydCB0eXBlIExlZ2FjeUZpbHRlckJhclN0YXRlID0ge1xuXHRmaWx0ZXI/OiBSZWNvcmQ8c3RyaW5nLCBBcnJheTxvYmplY3Q+Pjtcbn0gJiBSZWNvcmQ8c3RyaW5nLCB1bmtub3duPjtcblxuLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vL1xuLy8gbWV0aG9kcyB0byByZXRyaWV2ZSAmIGFwcGx5IHN0YXRlcyBmb3IgdGhlIGRpZmZlcmVudCBjb250cm9scyAvL1xuLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vL1xuZXhwb3J0IHR5cGUgQ29udHJvbFN0YXRlSGFuZGxlcjxUIGV4dGVuZHMgTWFuYWdlZE9iamVjdCwgSyBleHRlbmRzIHVua25vd24gfCB1bmRlZmluZWQ+ID0ge1xuXHRyZXRyaWV2ZT86IChvQ29udHJvbDogVCkgPT4gSyB8IFByb21pc2U8Sz47XG5cdGFwcGx5PzogKG9Db250cm9sOiBULCBjb250cm9sU3RhdGU6IEssIG5hdlBhcmFtZXRlcnM/OiBOYXZpZ2F0aW9uUGFyYW1ldGVyLCBza2lwTWVyZ2U/OiBib29sZWFuKSA9PiBQcm9taXNlPHZvaWQ+IHwgdm9pZDtcblx0cmVmcmVzaEJpbmRpbmc/OiAob0NvbnRyb2w6IFQpID0+IHZvaWQ7XG59O1xudHlwZSBDb250cm9sU3RhdGVNYXAgPSB7XG5cdFwic2FwLnVpLmZsLnZhcmlhbnRzLlZhcmlhbnRNYW5hZ2VtZW50XCI6IENvbnRyb2xTdGF0ZUhhbmRsZXI8VmFyaWFudE1hbmFnZW1lbnQsIHsgdmFyaWFudElkOiBzdHJpbmcgfCBudWxsIH0+O1xuXHRcInNhcC5mZS50ZW1wbGF0ZXMuTGlzdFJlcG9ydC5jb250cm9scy5NdWx0aXBsZU1vZGVDb250cm9sXCI6IENvbnRyb2xTdGF0ZUhhbmRsZXI8TXVsdGlwbGVNb2RlQ29udHJvbCwgeyBzZWxlY3RlZEtleTogc3RyaW5nIH0+O1xuXHRcInNhcC51aS5tZGMuVGFibGVcIjogQ29udHJvbFN0YXRlSGFuZGxlcjxNRENUYWJsZSwgQ29udHJvbFN0YXRlPjtcblx0XCJzYXAubS5TZWdtZW50ZWRCdXR0b25cIjogQ29udHJvbFN0YXRlSGFuZGxlcjxTZWdtZW50ZWRCdXR0b24sIHsgc2VsZWN0ZWRLZXk6IHN0cmluZyB9Pjtcblx0XCJzYXAubS5TZWxlY3RcIjogQ29udHJvbFN0YXRlSGFuZGxlcjxTZWxlY3QsIHsgc2VsZWN0ZWRLZXk6IHN0cmluZyB9Pjtcblx0XCJzYXAuZi5EeW5hbWljUGFnZVwiOiBDb250cm9sU3RhdGVIYW5kbGVyPER5bmFtaWNQYWdlLCB7IGhlYWRlckV4cGFuZGVkOiBib29sZWFuIH0+O1xuXHRcInNhcC51aS5jb3JlLkNvbXBvbmVudENvbnRhaW5lclwiOiBDb250cm9sU3RhdGVIYW5kbGVyPENvbXBvbmVudENvbnRhaW5lciwgb2JqZWN0Pjtcblx0XCJzYXAudWkuY29yZS5tdmMuVmlld1wiOiBDb250cm9sU3RhdGVIYW5kbGVyPEZFVmlldywgQ29udHJvbFN0YXRlPjtcbn07XG5jb25zdCBnZXRTdGF0ZVV0aWwgPSBhc3luYyBmdW5jdGlvbiAoKTogUHJvbWlzZTx0eXBlb2YgU3RhdGVVdGlsPiB7XG5cdHJldHVybiAoYXdhaXQgaW1wb3J0KFwic2FwL3VpL21kYy9wMTNuL1N0YXRlVXRpbFwiKSkuZGVmYXVsdDtcbn07XG5jb25zdCBfbUNvbnRyb2xTdGF0ZUhhbmRsZXJNYXA6IENvbnRyb2xTdGF0ZU1hcCA9IHtcblx0XCJzYXAudWkuZmwudmFyaWFudHMuVmFyaWFudE1hbmFnZW1lbnRcIjoge1xuXHRcdHJldHJpZXZlOiBmdW5jdGlvbiAob1ZNOiBWYXJpYW50TWFuYWdlbWVudCk6IHsgdmFyaWFudElkOiBzdHJpbmcgfCBudWxsIH0ge1xuXHRcdFx0cmV0dXJuIHtcblx0XHRcdFx0dmFyaWFudElkOiBvVk0uZ2V0Q3VycmVudFZhcmlhbnRLZXkoKVxuXHRcdFx0fTtcblx0XHR9LFxuXHRcdGFwcGx5OiBhc3luYyBmdW5jdGlvbiAodGhpczogVmlld1N0YXRlLCBvVk06IFZhcmlhbnRNYW5hZ2VtZW50LCBjb250cm9sU3RhdGU/OiB7IHZhcmlhbnRJZD86IHN0cmluZyB8IG51bGwgfSk6IFByb21pc2U8dm9pZD4ge1xuXHRcdFx0dHJ5IHtcblx0XHRcdFx0aWYgKGNvbnRyb2xTdGF0ZSAmJiBjb250cm9sU3RhdGUudmFyaWFudElkICE9PSB1bmRlZmluZWQgJiYgY29udHJvbFN0YXRlLnZhcmlhbnRJZCAhPT0gb1ZNLmdldEN1cnJlbnRWYXJpYW50S2V5KCkpIHtcblx0XHRcdFx0XHRjb25zdCBpc1ZhcmlhbnRJZEF2YWlsYWJsZSA9IHRoaXMuX2NoZWNrSWZWYXJpYW50SWRJc0F2YWlsYWJsZShvVk0sIGNvbnRyb2xTdGF0ZS52YXJpYW50SWQpO1xuXHRcdFx0XHRcdGxldCBzVmFyaWFudFJlZmVyZW5jZTtcblx0XHRcdFx0XHRpZiAoaXNWYXJpYW50SWRBdmFpbGFibGUpIHtcblx0XHRcdFx0XHRcdHNWYXJpYW50UmVmZXJlbmNlID0gY29udHJvbFN0YXRlLnZhcmlhbnRJZDtcblx0XHRcdFx0XHR9IGVsc2Uge1xuXHRcdFx0XHRcdFx0c1ZhcmlhbnRSZWZlcmVuY2UgPSBvVk0uZ2V0U3RhbmRhcmRWYXJpYW50S2V5KCk7XG5cdFx0XHRcdFx0XHR0aGlzLmNvbnRyb2xzVmFyaWFudElkVW5hdmFpbGFibGUucHVzaCguLi5vVk0uZ2V0Rm9yKCkpO1xuXHRcdFx0XHRcdH1cblx0XHRcdFx0XHR0cnkge1xuXHRcdFx0XHRcdFx0Y29uc3QgQ29udHJvbFZhcmlhbnRBcHBseUFQSSA9IChhd2FpdCBpbXBvcnQoXCJzYXAvdWkvZmwvYXBwbHkvYXBpL0NvbnRyb2xWYXJpYW50QXBwbHlBUElcIikpLmRlZmF1bHQ7XG5cdFx0XHRcdFx0XHRhd2FpdCBDb250cm9sVmFyaWFudEFwcGx5QVBJLmFjdGl2YXRlVmFyaWFudCh7XG5cdFx0XHRcdFx0XHRcdGVsZW1lbnQ6IG9WTSxcblx0XHRcdFx0XHRcdFx0dmFyaWFudFJlZmVyZW5jZTogc1ZhcmlhbnRSZWZlcmVuY2UgYXMgc3RyaW5nXG5cdFx0XHRcdFx0XHR9KTtcblx0XHRcdFx0XHRcdGF3YWl0IHRoaXMuX3NldEluaXRpYWxTdGF0ZXNGb3JEZWx0YUNvbXB1dGUob1ZNKTtcblx0XHRcdFx0XHR9IGNhdGNoIChlcnJvcjogdW5rbm93bikge1xuXHRcdFx0XHRcdFx0TG9nLmVycm9yKGVycm9yIGFzIHN0cmluZyk7XG5cdFx0XHRcdFx0XHR0aGlzLmludmFsaWRhdGVJbml0aWFsU3RhdGVGb3JBcHBseS5wdXNoKC4uLm9WTS5nZXRGb3IoKSk7XG5cdFx0XHRcdFx0XHRhd2FpdCB0aGlzLl9zZXRJbml0aWFsU3RhdGVzRm9yRGVsdGFDb21wdXRlKG9WTSk7XG5cdFx0XHRcdFx0fVxuXHRcdFx0XHR9IGVsc2Uge1xuXHRcdFx0XHRcdHRoaXMuX3NldEluaXRpYWxTdGF0ZXNGb3JEZWx0YUNvbXB1dGUob1ZNKTtcblx0XHRcdFx0fVxuXHRcdFx0fSBjYXRjaCAoZXJyb3I6IHVua25vd24pIHtcblx0XHRcdFx0TG9nLmVycm9yKGVycm9yIGFzIHN0cmluZyk7XG5cdFx0XHR9XG5cdFx0fVxuXHR9LFxuXHRcInNhcC5mZS50ZW1wbGF0ZXMuTGlzdFJlcG9ydC5jb250cm9scy5NdWx0aXBsZU1vZGVDb250cm9sXCI6IHtcblx0XHRyZXRyaWV2ZTogZnVuY3Rpb24gKG11bHRpcGxlTW9kZUNvbnRyb2w6IE11bHRpcGxlTW9kZUNvbnRyb2wpOiB7IHNlbGVjdGVkS2V5OiBzdHJpbmcgfSB7XG5cdFx0XHRyZXR1cm4ge1xuXHRcdFx0XHRzZWxlY3RlZEtleTogbXVsdGlwbGVNb2RlQ29udHJvbC5jb250ZW50LmdldFNlbGVjdGVkS2V5KClcblx0XHRcdH07XG5cdFx0fSxcblx0XHRhcHBseTogZnVuY3Rpb24gKG11bHRpcGxlTW9kZUNvbnRyb2w6IE11bHRpcGxlTW9kZUNvbnRyb2wsIGNvbnRyb2xTdGF0ZT86IHsgc2VsZWN0ZWRLZXk6IHN0cmluZyB9KSB7XG5cdFx0XHRpZiAoY29udHJvbFN0YXRlPy5zZWxlY3RlZEtleSkge1xuXHRcdFx0XHRjb25zdCB0YWJCYXIgPSBtdWx0aXBsZU1vZGVDb250cm9sLmNvbnRlbnQ7XG5cdFx0XHRcdGNvbnN0IHNlbGVjdGVkSXRlbSA9IHRhYkJhci5nZXRJdGVtcygpLmZpbmQoKGl0ZW0pID0+IChpdGVtIGFzIEljb25UYWJGaWx0ZXIpLmdldEtleSgpID09PSBjb250cm9sU3RhdGUuc2VsZWN0ZWRLZXkpO1xuXG5cdFx0XHRcdGlmIChzZWxlY3RlZEl0ZW0pIHtcblx0XHRcdFx0XHR0YWJCYXIuc2V0U2VsZWN0ZWRLZXkoY29udHJvbFN0YXRlLnNlbGVjdGVkS2V5KTtcblx0XHRcdFx0XHRpZiAobXVsdGlwbGVNb2RlQ29udHJvbC5nZXRNb2RlbChcIl9wYWdlTW9kZWxcIik/LmdldFByb3BlcnR5KFwiL2hpZGVGaWx0ZXJCYXJcIikgPT09IHRydWUpIHtcblx0XHRcdFx0XHRcdG11bHRpcGxlTW9kZUNvbnRyb2wucmVmcmVzaFNlbGVjdGVkSW5uZXJDb250cm9sQ29udGVudCgpO1xuXHRcdFx0XHRcdH1cblx0XHRcdFx0fVxuXHRcdFx0fVxuXHRcdH1cblx0fSxcblx0XCJzYXAudWkubWRjLlRhYmxlXCI6IHtcblx0XHRyZWZyZXNoQmluZGluZzogZnVuY3Rpb24gKG9UYWJsZTogTURDVGFibGUpIHtcblx0XHRcdGNvbnN0IG9UYWJsZUJpbmRpbmcgPSBvVGFibGUuZ2V0Um93QmluZGluZygpO1xuXHRcdFx0aWYgKG9UYWJsZUJpbmRpbmcpIHtcblx0XHRcdFx0Y29uc3Qgb1Jvb3RCaW5kaW5nID0gb1RhYmxlQmluZGluZy5nZXRSb290QmluZGluZygpO1xuXHRcdFx0XHRjb25zdCBhZ2dyZWdhdGlvbiA9IG9UYWJsZUJpbmRpbmcuZ2V0QWdncmVnYXRpb24oKSBhcyB7IGhpZXJhcmNoeVF1YWxpZmllcj86IHN0cmluZyB9IHwgdW5kZWZpbmVkO1xuXHRcdFx0XHRpZiAob1Jvb3RCaW5kaW5nID09PSBvVGFibGVCaW5kaW5nICYmIGFnZ3JlZ2F0aW9uPy5oaWVyYXJjaHlRdWFsaWZpZXIgPT09IHVuZGVmaW5lZCkge1xuXHRcdFx0XHRcdC8vIGFic29sdXRlIGJpbmRpbmcgKGV4Y2VwdCBUcmVlVGFibGUsIHdoZXJlIHdlIHdhbnQgdG8ga2VlcCBleHBhbnNpb24gc3RhdGVzKVxuXHRcdFx0XHRcdG9UYWJsZUJpbmRpbmcucmVmcmVzaCgpO1xuXHRcdFx0XHR9IGVsc2Uge1xuXHRcdFx0XHRcdC8vIHJlbGF0aXZlIGJpbmRpbmcgb3IgVHJlZVRhYmxlXG5cdFx0XHRcdFx0Y29uc3Qgb0hlYWRlckNvbnRleHQgPSBvVGFibGVCaW5kaW5nLmdldEhlYWRlckNvbnRleHQoKTtcblx0XHRcdFx0XHRjb25zdCBzR3JvdXBJZCA9IG9UYWJsZUJpbmRpbmcuZ2V0R3JvdXBJZCgpO1xuXG5cdFx0XHRcdFx0aWYgKG9IZWFkZXJDb250ZXh0KSB7XG5cdFx0XHRcdFx0XHRvSGVhZGVyQ29udGV4dC5yZXF1ZXN0U2lkZUVmZmVjdHMoW3sgJE5hdmlnYXRpb25Qcm9wZXJ0eVBhdGg6IFwiXCIgfV0sIHNHcm91cElkKTtcblx0XHRcdFx0XHR9XG5cdFx0XHRcdH1cblx0XHRcdH0gZWxzZSB7XG5cdFx0XHRcdExvZy5pbmZvKGBUYWJsZTogJHtvVGFibGUuZ2V0SWQoKX0gd2FzIG5vdCByZWZyZXNoZWQuIE5vIGJpbmRpbmcgZm91bmQhYCk7XG5cdFx0XHR9XG5cdFx0fVxuXHR9LFxuXHRcInNhcC5tLlNlZ21lbnRlZEJ1dHRvblwiOiB7XG5cdFx0cmV0cmlldmU6IGZ1bmN0aW9uIChvU2VnbWVudGVkQnV0dG9uOiBTZWdtZW50ZWRCdXR0b24pOiB7IHNlbGVjdGVkS2V5OiBzdHJpbmcgfSB7XG5cdFx0XHRyZXR1cm4ge1xuXHRcdFx0XHRzZWxlY3RlZEtleTogb1NlZ21lbnRlZEJ1dHRvbi5nZXRTZWxlY3RlZEtleSgpXG5cdFx0XHR9O1xuXHRcdH0sXG5cdFx0YXBwbHk6IGZ1bmN0aW9uICh0aGlzOiBWaWV3U3RhdGUsIG9TZWdtZW50ZWRCdXR0b246IFNlZ21lbnRlZEJ1dHRvbiwgb0NvbnRyb2xTdGF0ZT86IHsgc2VsZWN0ZWRLZXk6IHN0cmluZyB9KTogdm9pZCB7XG5cdFx0XHRpZiAob0NvbnRyb2xTdGF0ZT8uc2VsZWN0ZWRLZXkgJiYgb0NvbnRyb2xTdGF0ZS5zZWxlY3RlZEtleSAhPT0gb1NlZ21lbnRlZEJ1dHRvbi5nZXRTZWxlY3RlZEtleSgpKSB7XG5cdFx0XHRcdG9TZWdtZW50ZWRCdXR0b24uc2V0U2VsZWN0ZWRLZXkob0NvbnRyb2xTdGF0ZS5zZWxlY3RlZEtleSk7XG5cdFx0XHRcdGlmIChvU2VnbWVudGVkQnV0dG9uLmdldFBhcmVudCgpPy5pc0EoXCJzYXAudWkubWRjLkFjdGlvblRvb2xiYXJcIikpIHtcblx0XHRcdFx0XHRvU2VnbWVudGVkQnV0dG9uLmZpcmVFdmVudChcInNlbGVjdGlvbkNoYW5nZVwiKTtcblx0XHRcdFx0fVxuXHRcdFx0fVxuXHRcdH1cblx0fSxcblx0XCJzYXAubS5TZWxlY3RcIjoge1xuXHRcdHJldHJpZXZlOiBmdW5jdGlvbiAob1NlbGVjdDogU2VsZWN0KTogeyBzZWxlY3RlZEtleTogc3RyaW5nIH0ge1xuXHRcdFx0cmV0dXJuIHtcblx0XHRcdFx0c2VsZWN0ZWRLZXk6IG9TZWxlY3QuZ2V0U2VsZWN0ZWRLZXkoKVxuXHRcdFx0fTtcblx0XHR9LFxuXHRcdGFwcGx5OiBmdW5jdGlvbiAodGhpczogVmlld1N0YXRlLCBvU2VsZWN0OiBTZWxlY3QsIG9Db250cm9sU3RhdGU/OiB7IHNlbGVjdGVkS2V5OiBzdHJpbmcgfSk6IHZvaWQge1xuXHRcdFx0aWYgKG9Db250cm9sU3RhdGU/LnNlbGVjdGVkS2V5ICYmIG9Db250cm9sU3RhdGUuc2VsZWN0ZWRLZXkgIT09IG9TZWxlY3QuZ2V0U2VsZWN0ZWRLZXkoKSkge1xuXHRcdFx0XHRvU2VsZWN0LnNldFNlbGVjdGVkS2V5KG9Db250cm9sU3RhdGUuc2VsZWN0ZWRLZXkpO1xuXHRcdFx0XHRpZiAob1NlbGVjdC5nZXRQYXJlbnQoKT8uaXNBKFwic2FwLnVpLm1kYy5BY3Rpb25Ub29sYmFyXCIpKSB7XG5cdFx0XHRcdFx0b1NlbGVjdC5maXJlRXZlbnQoXCJjaGFuZ2VcIik7XG5cdFx0XHRcdH1cblx0XHRcdH1cblx0XHR9XG5cdH0sXG5cdFwic2FwLmYuRHluYW1pY1BhZ2VcIjoge1xuXHRcdHJldHJpZXZlOiBmdW5jdGlvbiAob0R5bmFtaWNQYWdlOiBEeW5hbWljUGFnZSk6IHsgaGVhZGVyRXhwYW5kZWQ6IGJvb2xlYW4gfSB7XG5cdFx0XHRyZXR1cm4ge1xuXHRcdFx0XHRoZWFkZXJFeHBhbmRlZDogb0R5bmFtaWNQYWdlLmdldEhlYWRlckV4cGFuZGVkKClcblx0XHRcdH07XG5cdFx0fSxcblx0XHRhcHBseTogZnVuY3Rpb24gKG9EeW5hbWljUGFnZTogRHluYW1pY1BhZ2UsIG9Db250cm9sU3RhdGU/OiB7IGhlYWRlckV4cGFuZGVkOiBib29sZWFuIH0pOiB2b2lkIHtcblx0XHRcdGlmIChvQ29udHJvbFN0YXRlKSB7XG5cdFx0XHRcdG9EeW5hbWljUGFnZS5zZXRIZWFkZXJFeHBhbmRlZChvQ29udHJvbFN0YXRlLmhlYWRlckV4cGFuZGVkKTtcblx0XHRcdH1cblx0XHR9XG5cdH0sXG5cdFwic2FwLnVpLmNvcmUubXZjLlZpZXdcIjoge1xuXHRcdHJldHJpZXZlOiBmdW5jdGlvbiAob1ZpZXc6IEZFVmlldykge1xuXHRcdFx0Y29uc3Qgb0NvbnRyb2xsZXIgPSBvVmlldy5nZXRDb250cm9sbGVyKCk7XG5cdFx0XHRpZiAob0NvbnRyb2xsZXIgJiYgb0NvbnRyb2xsZXIudmlld1N0YXRlKSB7XG5cdFx0XHRcdHJldHVybiBvQ29udHJvbGxlci52aWV3U3RhdGUucmV0cmlldmVWaWV3U3RhdGUoKTtcblx0XHRcdH1cblx0XHRcdHJldHVybiB7fTtcblx0XHR9LFxuXHRcdGFwcGx5OiBhc3luYyBmdW5jdGlvbiAob1ZpZXc6IEZFVmlldywgb0NvbnRyb2xTdGF0ZTogQ29udHJvbFN0YXRlLCBvTmF2UGFyYW1ldGVycz86IE5hdmlnYXRpb25QYXJhbWV0ZXIsIHNraXBNZXJnZT86IGJvb2xlYW4pIHtcblx0XHRcdGNvbnN0IG9Db250cm9sbGVyID0gb1ZpZXcuZ2V0Q29udHJvbGxlcigpO1xuXHRcdFx0aWYgKG9Db250cm9sbGVyICYmIG9Db250cm9sbGVyLnZpZXdTdGF0ZSAmJiBvTmF2UGFyYW1ldGVycykge1xuXHRcdFx0XHRyZXR1cm4gb0NvbnRyb2xsZXIudmlld1N0YXRlLmFwcGx5Vmlld1N0YXRlKG9Db250cm9sU3RhdGUsIG9OYXZQYXJhbWV0ZXJzLCBza2lwTWVyZ2UpO1xuXHRcdFx0fVxuXHRcdH0sXG5cdFx0cmVmcmVzaEJpbmRpbmc6IGFzeW5jIGZ1bmN0aW9uIChvVmlldzogRkVWaWV3KSB7XG5cdFx0XHRjb25zdCBvQ29udHJvbGxlciA9IG9WaWV3LmdldENvbnRyb2xsZXIoKTtcblx0XHRcdGlmIChvQ29udHJvbGxlciAmJiBvQ29udHJvbGxlci52aWV3U3RhdGUpIHtcblx0XHRcdFx0cmV0dXJuIG9Db250cm9sbGVyLnZpZXdTdGF0ZS5yZWZyZXNoVmlld0JpbmRpbmdzKCk7XG5cdFx0XHR9XG5cdFx0fVxuXHR9LFxuXHRcInNhcC51aS5jb3JlLkNvbXBvbmVudENvbnRhaW5lclwiOiB7XG5cdFx0cmV0cmlldmU6IGFzeW5jIGZ1bmN0aW9uICh0aGlzOiBWaWV3U3RhdGUsIG9Db21wb25lbnRDb250YWluZXI6IENvbXBvbmVudENvbnRhaW5lcik6IFByb21pc2U8b2JqZWN0PiB7XG5cdFx0XHRjb25zdCBvQ29tcG9uZW50ID0gb0NvbXBvbmVudENvbnRhaW5lci5nZXRDb21wb25lbnRJbnN0YW5jZSgpO1xuXHRcdFx0aWYgKG9Db21wb25lbnQpIHtcblx0XHRcdFx0cmV0dXJuIHRoaXMucmV0cmlldmVDb250cm9sU3RhdGUob0NvbXBvbmVudC5nZXRSb290Q29udHJvbCgpKTtcblx0XHRcdH1cblx0XHRcdHJldHVybiB7fSBhcyBvYmplY3Q7XG5cdFx0fSxcblx0XHRhcHBseTogYXN5bmMgZnVuY3Rpb24gKFxuXHRcdFx0dGhpczogVmlld1N0YXRlLFxuXHRcdFx0b0NvbXBvbmVudENvbnRhaW5lcjogQ29tcG9uZW50Q29udGFpbmVyLFxuXHRcdFx0b0NvbnRyb2xTdGF0ZTogb2JqZWN0LFxuXHRcdFx0b05hdlBhcmFtZXRlcnM/OiBOYXZpZ2F0aW9uUGFyYW1ldGVyXG5cdFx0KTogUHJvbWlzZTx2b2lkPiB7XG5cdFx0XHRjb25zdCBvQ29tcG9uZW50ID0gb0NvbXBvbmVudENvbnRhaW5lci5nZXRDb21wb25lbnRJbnN0YW5jZSgpO1xuXHRcdFx0aWYgKG9Db21wb25lbnQpIHtcblx0XHRcdFx0cmV0dXJuIHRoaXMuYXBwbHlDb250cm9sU3RhdGUob0NvbXBvbmVudC5nZXRSb290Q29udHJvbCgpLCBvQ29udHJvbFN0YXRlLCBvTmF2UGFyYW1ldGVycyk7XG5cdFx0XHR9XG5cdFx0fVxuXHR9XG59O1xuLyoqXG4gKiBBIGNvbnRyb2xsZXIgZXh0ZW5zaW9uIG9mZmVyaW5nIGhvb2tzIGZvciBzdGF0ZSBoYW5kbGluZ1xuICpcbiAqIElmIHlvdSBuZWVkIHRvIG1haW50YWluIGEgc3BlY2lmaWMgc3RhdGUgZm9yIHlvdXIgYXBwbGljYXRpb24sIHlvdSBjYW4gdXNlIHRoZSBjb250cm9sbGVyIGV4dGVuc2lvbi5cbiAqIEBoaWRlY29uc3RydWN0b3JcbiAqIEBwdWJsaWNcbiAqIEBzaW5jZSAxLjg1LjBcbiAqL1xuQGRlZmluZVVJNUNsYXNzKFwic2FwLmZlLmNvcmUuY29udHJvbGxlcmV4dGVuc2lvbnMuVmlld1N0YXRlXCIpXG5jbGFzcyBWaWV3U3RhdGUgZXh0ZW5kcyBDb250cm9sbGVyRXh0ZW5zaW9uIHtcblx0cHJpdmF0ZSBfaVJldHJpZXZpbmdTdGF0ZUNvdW50ZXI6IG51bWJlcjtcblxuXHRwcml2YXRlIF9wSW5pdGlhbFN0YXRlQXBwbGllZDogUHJvbWlzZTx1bmtub3duPjtcblxuXHRwcml2YXRlIF9wSW5pdGlhbFN0YXRlQXBwbGllZFJlc29sdmU/OiBGdW5jdGlvbjtcblxuXHRwdWJsaWMgYmFzZSE6IFBhZ2VDb250cm9sbGVyO1xuXG5cdGluaXRpYWxDb250cm9sU3RhdGVzTWFwcGVyOiBSZWNvcmQ8c3RyaW5nLCB1bmtub3duPiA9IHt9O1xuXG5cdGNvbnRyb2xzVmFyaWFudElkVW5hdmFpbGFibGU6IHN0cmluZ1tdID0gW107XG5cblx0aW52YWxpZGF0ZUluaXRpYWxTdGF0ZUZvckFwcGx5OiBzdHJpbmdbXSA9IFtdO1xuXG5cdHZpZXdTdGF0ZUNvbnRyb2xzOiBNYW5hZ2VkT2JqZWN0W10gPSBbXTtcblxuXHRzdGF0ZUNvbnRyaWJ1dG9yczogKE1hbmFnZWRPYmplY3QgJiBJVmlld1N0YXRlQ29udHJpYnV0b3I8dW5rbm93bj4pW10gPSBbXTtcblxuXHRfY3VycmVudFZpZXdTdGF0ZT86IFJlY29yZDxzdHJpbmcsIHVua25vd24+O1xuXG5cdGNvbmZpZ09mU3RhdGVBcHBseT86IHtcblx0XHRza2lwTWVyZ2U/OiBib29sZWFuIHwgdW5kZWZpbmVkO1xuXHRcdG5hdlR5cGVQYXJhbWV0ZXJzPzogTmF2UGFyYW1ldGVycztcblx0XHRzdGF0ZT86IFJlY29yZDxzdHJpbmcsIHVua25vd24+O1xuXHR9O1xuXG5cdHByaXZhdGUgdXBkYXRlQXBwU3RhdGVUaW1lcjogbnVtYmVyIHwgdW5kZWZpbmVkO1xuXG5cdC8qKlxuXHQgKiBDb25zdHJ1Y3Rvci5cblx0ICovXG5cdGNvbnN0cnVjdG9yKCkge1xuXHRcdHN1cGVyKCk7XG5cdFx0dGhpcy5faVJldHJpZXZpbmdTdGF0ZUNvdW50ZXIgPSAwO1xuXHRcdHRoaXMuX3BJbml0aWFsU3RhdGVBcHBsaWVkID0gbmV3IFByb21pc2UoKHJlc29sdmUpID0+IHtcblx0XHRcdHRoaXMuX3BJbml0aWFsU3RhdGVBcHBsaWVkUmVzb2x2ZSA9IHJlc29sdmU7XG5cdFx0fSk7XG5cdH1cblxuXHRAcHVibGljRXh0ZW5zaW9uKClcblx0QGZpbmFsRXh0ZW5zaW9uKClcblx0YXN5bmMgcmVmcmVzaFZpZXdCaW5kaW5ncygpOiBQcm9taXNlPHZvaWQ+IHtcblx0XHRjb25zdCBhQ29udHJvbHMgPSBhd2FpdCB0aGlzLmNvbGxlY3RSZXN1bHRzKHRoaXMuYmFzZS52aWV3U3RhdGUuYWRhcHRCaW5kaW5nUmVmcmVzaENvbnRyb2xzKTtcblx0XHRsZXQgb1Byb21pc2VDaGFpbiA9IFByb21pc2UucmVzb2x2ZSgpO1xuXHRcdGFDb250cm9sc1xuXHRcdFx0LmZpbHRlcigob0NvbnRyb2wpID0+IHtcblx0XHRcdFx0cmV0dXJuIG9Db250cm9sICYmIG9Db250cm9sLmlzQSAmJiBvQ29udHJvbC5pc0E8TWFuYWdlZE9iamVjdD4oXCJzYXAudWkuYmFzZS5NYW5hZ2VkT2JqZWN0XCIpO1xuXHRcdFx0fSlcblx0XHRcdC5mb3JFYWNoKChvQ29udHJvbDogTWFuYWdlZE9iamVjdCkgPT4ge1xuXHRcdFx0XHRvUHJvbWlzZUNoYWluID0gb1Byb21pc2VDaGFpbi50aGVuKHRoaXMucmVmcmVzaENvbnRyb2xCaW5kaW5nLmJpbmQodGhpcywgb0NvbnRyb2wpKTtcblx0XHRcdH0pO1xuXHRcdHJldHVybiBvUHJvbWlzZUNoYWluO1xuXHR9XG5cblx0LyoqXG5cdCAqIFRoaXMgZnVuY3Rpb24gc2hvdWxkIGFkZCBhbGwgY29udHJvbHMgcmVsZXZhbnQgZm9yIHJlZnJlc2hpbmcgdG8gdGhlIHByb3ZpZGVkIGNvbnRyb2wgYXJyYXkuXG5cdCAqXG5cdCAqIFRoaXMgZnVuY3Rpb24gaXMgbWVhbnQgdG8gYmUgaW5kaXZpZHVhbGx5IG92ZXJyaWRkZW4gYnkgY29uc3VtaW5nIGNvbnRyb2xsZXJzLCBidXQgbm90IHRvIGJlIGNhbGxlZCBkaXJlY3RseS5cblx0ICogVGhlIG92ZXJyaWRlIGV4ZWN1dGlvbiBpczoge0BsaW5rIHNhcC51aS5jb3JlLm12Yy5PdmVycmlkZUV4ZWN1dGlvbi5BZnRlcn0uXG5cdCAqIEBwYXJhbSBhQ29sbGVjdGVkQ29udHJvbHMgVGhlIGNvbGxlY3RlZCBjb250cm9sc1xuXHQgKiBAcHJvdGVjdGVkXG5cdCAqL1xuXHRAcHVibGljRXh0ZW5zaW9uKClcblx0QGV4dGVuc2libGUoT3ZlcnJpZGVFeGVjdXRpb24uQWZ0ZXIpXG5cdC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBAdHlwZXNjcmlwdC1lc2xpbnQvbm8tdW51c2VkLXZhcnNcblx0YWRhcHRCaW5kaW5nUmVmcmVzaENvbnRyb2xzKGFDb2xsZWN0ZWRDb250cm9sczogTWFuYWdlZE9iamVjdFtdKTogdm9pZCB7XG5cdFx0Ly8gdG8gYmUgb3ZlcnJpZGVuXG5cdH1cblxuXHRAcHJpdmF0ZUV4dGVuc2lvbigpXG5cdEBmaW5hbEV4dGVuc2lvbigpXG5cdGFzeW5jIHJlZnJlc2hDb250cm9sQmluZGluZyhvQ29udHJvbDogTWFuYWdlZE9iamVjdCk6IFByb21pc2U8dm9pZD4ge1xuXHRcdGNvbnN0IG9Db250cm9sUmVmcmVzaEJpbmRpbmdIYW5kbGVyID0gdGhpcy5nZXRDb250cm9sUmVmcmVzaEJpbmRpbmdIYW5kbGVyKG9Db250cm9sKTtcblx0XHRsZXQgb1Byb21pc2VDaGFpbiA9IFByb21pc2UucmVzb2x2ZSgpO1xuXHRcdGlmICh0eXBlb2Ygb0NvbnRyb2xSZWZyZXNoQmluZGluZ0hhbmRsZXIucmVmcmVzaEJpbmRpbmcgIT09IFwiZnVuY3Rpb25cIikge1xuXHRcdFx0TG9nLmluZm8oYHJlZnJlc2hCaW5kaW5nIGhhbmRsZXIgZm9yIGNvbnRyb2w6ICR7b0NvbnRyb2wuZ2V0TWV0YWRhdGEoKS5nZXROYW1lKCl9IGlzIG5vdCBwcm92aWRlZGApO1xuXHRcdH0gZWxzZSB7XG5cdFx0XHRvUHJvbWlzZUNoYWluID0gb1Byb21pc2VDaGFpbi50aGVuKG9Db250cm9sUmVmcmVzaEJpbmRpbmdIYW5kbGVyLnJlZnJlc2hCaW5kaW5nLmJpbmQodGhpcywgb0NvbnRyb2wpKTtcblx0XHR9XG5cdFx0cmV0dXJuIG9Qcm9taXNlQ2hhaW47XG5cdH1cblxuXHQvKipcblx0ICogUmV0dXJucyBhIG1hcCBvZiA8Y29kZT5yZWZyZXNoQmluZGluZzwvY29kZT4gZnVuY3Rpb24gZm9yIGEgY2VydGFpbiBjb250cm9sLlxuXHQgKiBAcGFyYW0gb0NvbnRyb2wgVGhlIGNvbnRyb2wgdG8gZ2V0IHN0YXRlIGhhbmRsZXIgZm9yXG5cdCAqIEByZXR1cm5zIEEgcGxhaW4gb2JqZWN0IHdpdGggb25lIGZ1bmN0aW9uOiA8Y29kZT5yZWZyZXNoQmluZGluZzwvY29kZT5cblx0ICovXG5cblx0QHByaXZhdGVFeHRlbnNpb24oKVxuXHRAZmluYWxFeHRlbnNpb24oKVxuXHRnZXRDb250cm9sUmVmcmVzaEJpbmRpbmdIYW5kbGVyKG9Db250cm9sOiBNYW5hZ2VkT2JqZWN0KToge1xuXHRcdHJlZnJlc2hCaW5kaW5nPzogKG9Db250cm9sOiBNYW5hZ2VkT2JqZWN0KSA9PiB2b2lkO1xuXHR9IHtcblx0XHRjb25zdCBvUmVmcmVzaEJpbmRpbmdIYW5kbGVyOiB7XG5cdFx0XHRyZWZyZXNoQmluZGluZz86IChvQ29udHJvbDogTWFuYWdlZE9iamVjdCkgPT4gdm9pZDtcblx0XHR9ID0ge307XG5cdFx0aWYgKG9Db250cm9sKSB7XG5cdFx0XHRmb3IgKGNvbnN0IHNUeXBlIGluIF9tQ29udHJvbFN0YXRlSGFuZGxlck1hcCkge1xuXHRcdFx0XHRpZiAob0NvbnRyb2wuaXNBKHNUeXBlKSkge1xuXHRcdFx0XHRcdC8vIHBhc3Mgb25seSB0aGUgcmVmcmVzaEJpbmRpbmcgaGFuZGxlciBpbiBhbiBvYmplY3Qgc28gdGhhdCA6XG5cdFx0XHRcdFx0Ly8gMS4gQXBwbGljYXRpb24gaGFzIGFjY2VzcyBvbmx5IHRvIHJlZnJlc2hCaW5kaW5nIGFuZCBub3QgYXBwbHkgYW5kIHJldGVyaXZlIGF0IHRoaXMgc3RhZ2Vcblx0XHRcdFx0XHQvLyAyLiBBcHBsaWNhdGlvbiBtb2RpZmljYXRpb25zIHRvIHRoZSBvYmplY3Qgd2lsbCBiZSByZWZsZWN0ZWQgaGVyZSAoYXMgd2UgcGFzcyBieSByZWZlcmVuY2UpXG5cdFx0XHRcdFx0b1JlZnJlc2hCaW5kaW5nSGFuZGxlcltcInJlZnJlc2hCaW5kaW5nXCJdID1cblx0XHRcdFx0XHRcdChfbUNvbnRyb2xTdGF0ZUhhbmRsZXJNYXBbc1R5cGUgYXMga2V5b2YgQ29udHJvbFN0YXRlTWFwXS5yZWZyZXNoQmluZGluZyBhcyAob0NvbnRyb2w6IE1hbmFnZWRPYmplY3QpID0+IHZvaWQpIHx8XG5cdFx0XHRcdFx0XHR7fTtcblx0XHRcdFx0XHRicmVhaztcblx0XHRcdFx0fVxuXHRcdFx0fVxuXHRcdH1cblx0XHR0aGlzLmJhc2Uudmlld1N0YXRlLmFkYXB0QmluZGluZ1JlZnJlc2hIYW5kbGVyKG9Db250cm9sLCBvUmVmcmVzaEJpbmRpbmdIYW5kbGVyKTtcblx0XHRyZXR1cm4gb1JlZnJlc2hCaW5kaW5nSGFuZGxlcjtcblx0fVxuXG5cdC8qKlxuXHQgKiBDdXN0b21pemUgdGhlIDxjb2RlPnJlZnJlc2hCaW5kaW5nPC9jb2RlPiBmdW5jdGlvbiBmb3IgYSBjZXJ0YWluIGNvbnRyb2wuXG5cdCAqXG5cdCAqIFRoaXMgZnVuY3Rpb24gaXMgbWVhbnQgdG8gYmUgaW5kaXZpZHVhbGx5IG92ZXJyaWRkZW4gYnkgY29uc3VtaW5nIGNvbnRyb2xsZXJzLCBidXQgbm90IHRvIGJlIGNhbGxlZCBkaXJlY3RseS5cblx0ICogVGhlIG92ZXJyaWRlIGV4ZWN1dGlvbiBpczoge0BsaW5rIHNhcC51aS5jb3JlLm12Yy5PdmVycmlkZUV4ZWN1dGlvbi5BZnRlcn0uXG5cdCAqIEBwYXJhbSBfb0NvbnRyb2wgVGhlIGNvbnRyb2wgZm9yIHdoaWNoIHRoZSByZWZyZXNoIGhhbmRsZXIgaXMgYWRhcHRlZC5cblx0ICogQHBhcmFtIF9vQ29udHJvbEhhbmRsZXIgQSBwbGFpbiBvYmplY3Qgd2hpY2ggY2FuIGhhdmUgb25lIGZ1bmN0aW9uOiA8Y29kZT5yZWZyZXNoQmluZGluZzwvY29kZT5cblx0ICogQHBhcmFtIF9vQ29udHJvbEhhbmRsZXIucmVmcmVzaEJpbmRpbmdcblx0ICogQHByb3RlY3RlZFxuXHQgKi9cblx0QHB1YmxpY0V4dGVuc2lvbigpXG5cdEBleHRlbnNpYmxlKE92ZXJyaWRlRXhlY3V0aW9uLkFmdGVyKVxuXHRhZGFwdEJpbmRpbmdSZWZyZXNoSGFuZGxlcihcblx0XHRfb0NvbnRyb2w6IE1hbmFnZWRPYmplY3QsXG5cdFx0X29Db250cm9sSGFuZGxlcjoge1xuXHRcdFx0cmVmcmVzaEJpbmRpbmc/OiAob0NvbnRyb2w6IE1hbmFnZWRPYmplY3QpID0+IHZvaWQ7XG5cdFx0fVxuXHQpOiB2b2lkIHtcblx0XHQvLyB0byBiZSBvdmVycmlkZW5cblx0fVxuXG5cdC8qKlxuXHQgKiBDYWxsZWQgd2hlbiB0aGUgYXBwbGljYXRpb24gaXMgc3VzcGVuZGVkIGR1ZSB0byBrZWVwLWFsaXZlIG1vZGUuXG5cdCAqIEBwdWJsaWNcblx0ICovXG5cdEBwdWJsaWNFeHRlbnNpb24oKVxuXHRAZXh0ZW5zaWJsZShPdmVycmlkZUV4ZWN1dGlvbi5BZnRlcilcblx0b25TdXNwZW5kKCk6IHZvaWQge1xuXHRcdC8vIHRvIGJlIG92ZXJyaWRlblxuXHR9XG5cblx0LyoqXG5cdCAqIENhbGxlZCB3aGVuIHRoZSBhcHBsaWNhdGlvbiBpcyByZXN0b3JlZCBkdWUgdG8ga2VlcC1hbGl2ZSBtb2RlLlxuXHQgKiBAcHVibGljXG5cdCAqL1xuXHRAcHVibGljRXh0ZW5zaW9uKClcblx0QGV4dGVuc2libGUoT3ZlcnJpZGVFeGVjdXRpb24uQWZ0ZXIpXG5cdG9uUmVzdG9yZSgpOiB2b2lkIHtcblx0XHQvLyB0byBiZSBvdmVycmlkZW5cblx0fVxuXG5cdC8qKlxuXHQgKiBEZXN0cnVjdG9yIG1ldGhvZCBmb3Igb2JqZWN0cy5cblx0ICovXG5cdGRlc3Ryb3koKTogdm9pZCB7XG5cdFx0ZGVsZXRlIHRoaXMuX3BJbml0aWFsU3RhdGVBcHBsaWVkUmVzb2x2ZTtcblx0XHRzdXBlci5kZXN0cm95KCk7XG5cdH1cblxuXHQvKipcblx0ICogSGVscGVyIGZ1bmN0aW9uIHRvIGVuYWJsZSBtdWx0aSBvdmVycmlkZS4gSXQgaXMgYWRkaW5nIGFuIGFkZGl0aW9uYWwgcGFyYW1ldGVyIChhcnJheSkgdG8gdGhlIHByb3ZpZGVkXG5cdCAqIGZ1bmN0aW9uIChhbmQgaXRzIHBhcmFtZXRlcnMpLCB0aGF0IHdpbGwgYmUgZXZhbHVhdGVkIHZpYSA8Y29kZT5Qcm9taXNlLmFsbDwvY29kZT4uXG5cdCAqIEBwYXJhbSBmbkNhbGwgVGhlIGZ1bmN0aW9uIHRvIGJlIGNhbGxlZFxuXHQgKiBAcGFyYW0gYXJnc1xuXHQgKiBAcmV0dXJucyBBIHByb21pc2UgdG8gYmUgcmVzb2x2ZWQgd2l0aCB0aGUgcmVzdWx0IG9mIGFsbCBvdmVycmlkZXNcblx0ICovXG5cdEBwcml2YXRlRXh0ZW5zaW9uKClcblx0QGZpbmFsRXh0ZW5zaW9uKClcblx0YXN5bmMgY29sbGVjdFJlc3VsdHMoZm5DYWxsOiBGdW5jdGlvbiwgLi4uYXJnczogdW5rbm93bltdKTogUHJvbWlzZTxDb250cm9sW10+IHtcblx0XHRjb25zdCBhUmVzdWx0czogQ29udHJvbFtdID0gW107XG5cdFx0YXJncy5wdXNoKGFSZXN1bHRzKTtcblx0XHRmbkNhbGwuYXBwbHkodGhpcywgYXJncyk7XG5cdFx0cmV0dXJuIFByb21pc2UuYWxsKGFSZXN1bHRzKTtcblx0fVxuXG5cdC8qKlxuXHQgKiBDdXN0b21pemUgdGhlIDxjb2RlPnJldHJpZXZlPC9jb2RlPiBhbmQgPGNvZGU+YXBwbHk8L2NvZGU+IGZ1bmN0aW9ucyBmb3IgYSBjZXJ0YWluIGNvbnRyb2wuXG5cdCAqXG5cdCAqIFRoaXMgZnVuY3Rpb24gaXMgbWVhbnQgdG8gYmUgaW5kaXZpZHVhbGx5IG92ZXJyaWRkZW4gYnkgY29uc3VtaW5nIGNvbnRyb2xsZXJzLCBidXQgbm90IHRvIGJlIGNhbGxlZCBkaXJlY3RseS5cblx0ICogVGhlIG92ZXJyaWRlIGV4ZWN1dGlvbiBpczoge0BsaW5rIHNhcC51aS5jb3JlLm12Yy5PdmVycmlkZUV4ZWN1dGlvbi5BZnRlcn0uXG5cdCAqIEBwYXJhbSBvQ29udHJvbCBUaGUgY29udHJvbCB0byBnZXQgc3RhdGUgaGFuZGxlciBmb3Jcblx0ICogQHBhcmFtIGFDb250cm9sSGFuZGxlciBBIGxpc3Qgb2YgcGxhaW4gb2JqZWN0cyB3aXRoIHR3byBmdW5jdGlvbnM6IDxjb2RlPnJldHJpZXZlPC9jb2RlPiBhbmQgPGNvZGU+YXBwbHk8L2NvZGU+XG5cdCAqIEBwcm90ZWN0ZWRcblx0ICovXG5cdEBwdWJsaWNFeHRlbnNpb24oKVxuXHRAZXh0ZW5zaWJsZShPdmVycmlkZUV4ZWN1dGlvbi5BZnRlcilcblx0Ly8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIEB0eXBlc2NyaXB0LWVzbGludC9uby11bnVzZWQtdmFyc1xuXHRhZGFwdENvbnRyb2xTdGF0ZUhhbmRsZXIob0NvbnRyb2w6IE1hbmFnZWRPYmplY3QsIGFDb250cm9sSGFuZGxlcjogb2JqZWN0W10pOiB2b2lkIHtcblx0XHQvLyB0byBiZSBvdmVycmlkZGVuIGlmIG5lZWRlZFxuXHR9XG5cblx0LyoqXG5cdCAqIFJldHVybnMgYSBtYXAgb2YgPGNvZGU+cmV0cmlldmU8L2NvZGU+IGFuZCA8Y29kZT5hcHBseTwvY29kZT4gZnVuY3Rpb25zIGZvciBhIGNlcnRhaW4gY29udHJvbC5cblx0ICogQHBhcmFtIG9Db250cm9sIFRoZSBjb250cm9sIHRvIGdldCBzdGF0ZSBoYW5kbGVyIGZvclxuXHQgKiBAcmV0dXJucyBBIHBsYWluIG9iamVjdCB3aXRoIHR3byBmdW5jdGlvbnM6IDxjb2RlPnJldHJpZXZlPC9jb2RlPiBhbmQgPGNvZGU+YXBwbHk8L2NvZGU+XG5cdCAqL1xuXHRAcHJpdmF0ZUV4dGVuc2lvbigpXG5cdEBmaW5hbEV4dGVuc2lvbigpXG5cdGdldENvbnRyb2xTdGF0ZUhhbmRsZXIob0NvbnRyb2w6IE1hbmFnZWRPYmplY3QpOiBDb250cm9sU3RhdGVIYW5kbGVyPE1hbmFnZWRPYmplY3QsIG9iamVjdD5bXSB7XG5cdFx0Y29uc3QgYUludGVybmFsQ29udHJvbFN0YXRlSGFuZGxlcjogQ29udHJvbFN0YXRlSGFuZGxlcjxNYW5hZ2VkT2JqZWN0LCBvYmplY3Q+W10gPSBbXSxcblx0XHRcdGFDdXN0b21Db250cm9sU3RhdGVIYW5kbGVyOiBDb250cm9sU3RhdGVIYW5kbGVyPE1hbmFnZWRPYmplY3QsIG9iamVjdD5bXSA9IFtdO1xuXHRcdGlmIChvQ29udHJvbCkge1xuXHRcdFx0aWYgKFxuXHRcdFx0XHRvQ29udHJvbC5pc0E8SVZpZXdTdGF0ZUNvbnRyaWJ1dG9yPG9iamVjdD4+KFwic2FwLmZlLmNvcmUuY29udHJvbGxlcmV4dGVuc2lvbnMudmlld1N0YXRlLklWaWV3U3RhdGVDb250cmlidXRvclwiKSAmJlxuXHRcdFx0XHRvQ29udHJvbC5yZXRyaWV2ZVN0YXRlICYmXG5cdFx0XHRcdG9Db250cm9sLmFwcGx5U3RhdGVcblx0XHRcdCkge1xuXHRcdFx0XHRhSW50ZXJuYWxDb250cm9sU3RhdGVIYW5kbGVyLnB1c2goe1xuXHRcdFx0XHRcdC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBAdHlwZXNjcmlwdC1lc2xpbnQvcmVxdWlyZS1hd2FpdFxuXHRcdFx0XHRcdHJldHJpZXZlOiBhc3luYyAoX2NvbnRyb2wpID0+IG9Db250cm9sLnJldHJpZXZlU3RhdGUuYmluZChvQ29udHJvbCkoKSxcblxuXHRcdFx0XHRcdGFwcGx5OiBhc3luYyAoXG5cdFx0XHRcdFx0XHRfY29udHJvbDogTWFuYWdlZE9iamVjdCxcblx0XHRcdFx0XHRcdGNvbnRyb2xTdGF0ZT86IG9iamVjdCxcblx0XHRcdFx0XHRcdG9OYXZQYXJhbWV0ZXJzPzogTmF2aWdhdGlvblBhcmFtZXRlcixcblx0XHRcdFx0XHRcdHNraXBNZXJnZT86IGJvb2xlYW5cblx0XHRcdFx0XHRcdC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBAdHlwZXNjcmlwdC1lc2xpbnQvcmVxdWlyZS1hd2FpdFxuXHRcdFx0XHRcdCkgPT4ge1xuXHRcdFx0XHRcdFx0Y29uc3Qgc2hvdWxkQXBwbHlEaWZmU3RhdGUgPVxuXHRcdFx0XHRcdFx0XHQhdGhpcy5pbnZhbGlkYXRlSW5pdGlhbFN0YXRlRm9yQXBwbHkuaW5jbHVkZXMob0NvbnRyb2wuZ2V0SWQoKSkgJiZcblx0XHRcdFx0XHRcdFx0IXRoaXMuY29udHJvbHNWYXJpYW50SWRVbmF2YWlsYWJsZS5pbmNsdWRlcyhvQ29udHJvbC5nZXRJZCgpKSAmJlxuXHRcdFx0XHRcdFx0XHRvTmF2UGFyYW1ldGVycz8ubmF2aWdhdGlvblR5cGUgIT09IE5hdlR5cGUuaHlicmlkICYmXG5cdFx0XHRcdFx0XHRcdHNraXBNZXJnZSAhPT0gdHJ1ZTtcblx0XHRcdFx0XHRcdGlmICghY29udHJvbFN0YXRlKSB7XG5cdFx0XHRcdFx0XHRcdGlmIChvQ29udHJvbC5hcHBseUxlZ2FjeVN0YXRlKSB7XG5cdFx0XHRcdFx0XHRcdFx0YXdhaXQgb0NvbnRyb2wuYXBwbHlMZWdhY3lTdGF0ZS5iaW5kKG9Db250cm9sKShcblx0XHRcdFx0XHRcdFx0XHRcdHRoaXMuZ2V0Q29udHJvbFN0YXRlLmJpbmQodGhpcyksXG5cdFx0XHRcdFx0XHRcdFx0XHRvTmF2UGFyYW1ldGVycyxcblx0XHRcdFx0XHRcdFx0XHRcdHNob3VsZEFwcGx5RGlmZlN0YXRlLFxuXHRcdFx0XHRcdFx0XHRcdFx0c2tpcE1lcmdlXG5cdFx0XHRcdFx0XHRcdFx0KTtcblx0XHRcdFx0XHRcdFx0fVxuXHRcdFx0XHRcdFx0fSBlbHNlIHtcblx0XHRcdFx0XHRcdFx0YXdhaXQgb0NvbnRyb2wuYXBwbHlTdGF0ZS5iaW5kKG9Db250cm9sKShjb250cm9sU3RhdGUsIG9OYXZQYXJhbWV0ZXJzLCBzaG91bGRBcHBseURpZmZTdGF0ZSwgc2tpcE1lcmdlKTtcblx0XHRcdFx0XHRcdH1cblx0XHRcdFx0XHR9XG5cdFx0XHRcdH0pO1xuXHRcdFx0fSBlbHNlIHtcblx0XHRcdFx0Zm9yIChjb25zdCBzVHlwZSBpbiBfbUNvbnRyb2xTdGF0ZUhhbmRsZXJNYXApIHtcblx0XHRcdFx0XHRpZiAob0NvbnRyb2wuaXNBKHNUeXBlKSkge1xuXHRcdFx0XHRcdFx0Ly8gYXZvaWQgZGlyZWN0IG1hbmlwdWxhdGlvbiBvZiBpbnRlcm5hbCBfbUNvbnRyb2xTdGF0ZUhhbmRsZXJNYXBcblx0XHRcdFx0XHRcdGFJbnRlcm5hbENvbnRyb2xTdGF0ZUhhbmRsZXIucHVzaChcblx0XHRcdFx0XHRcdFx0T2JqZWN0LmFzc2lnbih7fSwgX21Db250cm9sU3RhdGVIYW5kbGVyTWFwW3NUeXBlIGFzIGtleW9mIENvbnRyb2xTdGF0ZU1hcF0pIGFzIENvbnRyb2xTdGF0ZUhhbmRsZXI8XG5cdFx0XHRcdFx0XHRcdFx0TWFuYWdlZE9iamVjdCxcblx0XHRcdFx0XHRcdFx0XHRvYmplY3Rcblx0XHRcdFx0XHRcdFx0PlxuXHRcdFx0XHRcdFx0KTtcblx0XHRcdFx0XHRcdGJyZWFrO1xuXHRcdFx0XHRcdH1cblx0XHRcdFx0fVxuXHRcdFx0fVxuXHRcdH1cblx0XHR0aGlzLmJhc2Uudmlld1N0YXRlLmFkYXB0Q29udHJvbFN0YXRlSGFuZGxlcihvQ29udHJvbCwgYUN1c3RvbUNvbnRyb2xTdGF0ZUhhbmRsZXIpO1xuXHRcdHJldHVybiBhSW50ZXJuYWxDb250cm9sU3RhdGVIYW5kbGVyLmNvbmNhdChhQ3VzdG9tQ29udHJvbFN0YXRlSGFuZGxlcik7XG5cdH1cblxuXHQvKipcblx0ICogVGhpcyBmdW5jdGlvbiBzaG91bGQgYWRkIGFsbCBjb250cm9scyBmb3IgZ2l2ZW4gdmlldyB0aGF0IHNob3VsZCBiZSBjb25zaWRlcmVkIGZvciB0aGUgc3RhdGUgaGFuZGxpbmcgdG8gdGhlIHByb3ZpZGVkIGNvbnRyb2wgYXJyYXkuXG5cdCAqXG5cdCAqIFRoaXMgZnVuY3Rpb24gaXMgbWVhbnQgdG8gYmUgaW5kaXZpZHVhbGx5IG92ZXJyaWRkZW4gYnkgY29uc3VtaW5nIGNvbnRyb2xsZXJzLCBidXQgbm90IHRvIGJlIGNhbGxlZCBkaXJlY3RseS5cblx0ICogVGhlIG92ZXJyaWRlIGV4ZWN1dGlvbiBpczoge0BsaW5rIHNhcC51aS5jb3JlLm12Yy5PdmVycmlkZUV4ZWN1dGlvbi5BZnRlcn0uXG5cdCAqIEBwYXJhbSBfYUNvbGxlY3RlZENvbnRyb2xzIFRoZSBjb2xsZWN0ZWQgY29udHJvbHNcblx0ICogQHByb3RlY3RlZFxuXHQgKi9cblx0QHB1YmxpY0V4dGVuc2lvbigpXG5cdEBleHRlbnNpYmxlKE92ZXJyaWRlRXhlY3V0aW9uLkFmdGVyKVxuXHRhZGFwdFN0YXRlQ29udHJvbHMoX2FDb2xsZWN0ZWRDb250cm9sczogTWFuYWdlZE9iamVjdFtdKTogdm9pZCB7XG5cdFx0X2FDb2xsZWN0ZWRDb250cm9scy5wdXNoKC4uLnRoaXMuc3RhdGVDb250cmlidXRvcnMpO1xuXHR9XG5cblx0LyoqXG5cdCAqIFJldHVybnMgdGhlIGtleSB0byBiZSB1c2VkIGZvciBnaXZlbiBjb250cm9sLlxuXHQgKiBAcGFyYW0gb0NvbnRyb2wgVGhlIGNvbnRyb2wgdG8gZ2V0IHN0YXRlIGtleSBmb3Jcblx0ICogQHJldHVybnMgVGhlIGtleSB0byBiZSB1c2VkIGZvciBzdG9yaW5nIHRoZSBjb250cm9scyBzdGF0ZVxuXHQgKi9cblx0QHB1YmxpY0V4dGVuc2lvbigpXG5cdEBmaW5hbEV4dGVuc2lvbigpXG5cdGdldFN0YXRlS2V5KG9Db250cm9sOiBNYW5hZ2VkT2JqZWN0KTogc3RyaW5nIHtcblx0XHRyZXR1cm4gdGhpcy5nZXRWaWV3KCkuZ2V0TG9jYWxJZChvQ29udHJvbC5nZXRJZCgpKSB8fCBvQ29udHJvbC5nZXRJZCgpO1xuXHR9XG5cblx0LyoqXG5cdCAqIFJldHJpZXZlIHRoZSB2aWV3IHN0YXRlIG9mIHRoaXMgZXh0ZW5zaW9ucyB2aWV3LlxuXHQgKiBXaGVuIHRoaXMgZnVuY3Rpb24gaXMgY2FsbGVkIG1vcmUgdGhhbiBvbmNlIGJlZm9yZSBmaW5pc2hpbmcsIGFsbCBidXQgdGhlIGZpbmFsIHJlc3BvbnNlIHdpbGwgcmVzb2x2ZSB0byA8Y29kZT51bmRlZmluZWQ8L2NvZGU+LlxuXHQgKiBAcmV0dXJucyBBIHByb21pc2UgcmVzb2x2aW5nIHRoZSB2aWV3IHN0YXRlXG5cdCAqIEBwdWJsaWNcblx0ICovXG5cdEBwdWJsaWNFeHRlbnNpb24oKVxuXHRAZmluYWxFeHRlbnNpb24oKVxuXHRhc3luYyByZXRyaWV2ZVZpZXdTdGF0ZSgpOiBQcm9taXNlPFJlY29yZDxzdHJpbmcsIHVua25vd24+IHwgdW5kZWZpbmVkPiB7XG5cdFx0Kyt0aGlzLl9pUmV0cmlldmluZ1N0YXRlQ291bnRlcjtcblx0XHRsZXQgb1ZpZXdTdGF0ZTogUmVjb3JkPHN0cmluZywgdW5rbm93bj47XG5cblx0XHR0cnkge1xuXHRcdFx0YXdhaXQgdGhpcy5fcEluaXRpYWxTdGF0ZUFwcGxpZWQ7XG5cdFx0XHRjb25zdCBhQ29udHJvbHM6IChNYW5hZ2VkT2JqZWN0IHwgdW5kZWZpbmVkKVtdID0gYXdhaXQgdGhpcy5jb2xsZWN0UmVzdWx0cyh0aGlzLmJhc2Uudmlld1N0YXRlLmFkYXB0U3RhdGVDb250cm9scyk7XG5cdFx0XHRjb25zdCBhUmVzb2x2ZWRTdGF0ZXMgPSBhd2FpdCBQcm9taXNlLmFsbChcblx0XHRcdFx0KFxuXHRcdFx0XHRcdGFDb250cm9scy5maWx0ZXIoZnVuY3Rpb24gKG9Db250cm9sKSB7XG5cdFx0XHRcdFx0XHRyZXR1cm4gb0NvbnRyb2wgJiYgb0NvbnRyb2wuaXNBICYmIG9Db250cm9sLmlzQTxNYW5hZ2VkT2JqZWN0PihcInNhcC51aS5iYXNlLk1hbmFnZWRPYmplY3RcIik7XG5cdFx0XHRcdFx0fSkgYXMgTWFuYWdlZE9iamVjdFtdXG5cdFx0XHRcdCkubWFwKGFzeW5jIChvQ29udHJvbCkgPT4ge1xuXHRcdFx0XHRcdHJldHVybiB0aGlzLnJldHJpZXZlQ29udHJvbFN0YXRlKG9Db250cm9sKS50aGVuKCh2UmVzdWx0OiB1bmtub3duKSA9PiB7XG5cdFx0XHRcdFx0XHRyZXR1cm4ge1xuXHRcdFx0XHRcdFx0XHRrZXk6IHRoaXMuZ2V0U3RhdGVLZXkob0NvbnRyb2wpLFxuXHRcdFx0XHRcdFx0XHR2YWx1ZTogdlJlc3VsdFxuXHRcdFx0XHRcdFx0fTtcblx0XHRcdFx0XHR9KTtcblx0XHRcdFx0fSlcblx0XHRcdCk7XG5cdFx0XHRvVmlld1N0YXRlID0gYVJlc29sdmVkU3RhdGVzLnJlZHVjZShmdW5jdGlvbiAob1N0YXRlczogUmVjb3JkPHN0cmluZywgdW5rbm93bj4sIG1TdGF0ZTogeyBrZXk6IHN0cmluZzsgdmFsdWU6IHVua25vd24gfSkge1xuXHRcdFx0XHRjb25zdCBvQ3VycmVudFN0YXRlOiBSZWNvcmQ8c3RyaW5nLCB1bmtub3duPiA9IHt9O1xuXHRcdFx0XHRvQ3VycmVudFN0YXRlW21TdGF0ZS5rZXldID0gbVN0YXRlLnZhbHVlO1xuXHRcdFx0XHRyZXR1cm4gbWVyZ2VPYmplY3RzKG9TdGF0ZXMsIG9DdXJyZW50U3RhdGUpO1xuXHRcdFx0fSwge30pO1xuXHRcdFx0Y29uc3QgcHJldlN0YXRlID0gdGhpcy5fY3VycmVudFZpZXdTdGF0ZTtcblx0XHRcdGlmIChwcmV2U3RhdGUgJiYgT2JqZWN0LmtleXMocHJldlN0YXRlKS5sZW5ndGggPiAwKSB7XG5cdFx0XHRcdHRoaXMuX2FkZE1pc3NpbmdTdGF0ZShvVmlld1N0YXRlLCBwcmV2U3RhdGUpO1xuXHRcdFx0fVxuXHRcdFx0Y29uc3QgbUFkZGl0aW9uYWxTdGF0ZXMgPSBhd2FpdCBQcm9taXNlLnJlc29sdmUodGhpcy5fcmV0cmlldmVBZGRpdGlvbmFsU3RhdGVzKCkpO1xuXHRcdFx0aWYgKG1BZGRpdGlvbmFsU3RhdGVzICYmIE9iamVjdC5rZXlzKG1BZGRpdGlvbmFsU3RhdGVzKS5sZW5ndGgpIHtcblx0XHRcdFx0b1ZpZXdTdGF0ZVtBRERJVElPTkFMX1NUQVRFU19LRVldID0gbUFkZGl0aW9uYWxTdGF0ZXM7XG5cdFx0XHR9XG5cdFx0fSBmaW5hbGx5IHtcblx0XHRcdC0tdGhpcy5faVJldHJpZXZpbmdTdGF0ZUNvdW50ZXI7XG5cdFx0fVxuXHRcdHRoaXMuX2N1cnJlbnRWaWV3U3RhdGUgPSBvVmlld1N0YXRlO1xuXHRcdHJldHVybiB0aGlzLl9pUmV0cmlldmluZ1N0YXRlQ291bnRlciA9PT0gMCA/IG9WaWV3U3RhdGUgOiB1bmRlZmluZWQ7XG5cdH1cblxuXHQvLyBUbyBjYXJyeSBmb3J3YXJkIHVuYXBwbGllZCBzdGF0ZSBsb3N0IGR1ZSB0byBsYXp5IGxvYWRpbmcgb2YgY29udHJvbHMuXG5cdC8vXG5cdC8vIElmIHVzZXIgMSBjaGFuZ2VzIGEgY29udHJvbCdzIHN0YXRlIGluIGEgbGF6eS1sb2FkZWQgc2VjdGlvbiBhbmQgbmF2aWdhdGVzIGF3YXksIHRoZW4gc2hhcmVzIHRoZSBVUkwgd2l0aCB1c2VyIDIsXG5cdC8vIHdobyBkb2Vzbid0IHZpc2l0IHRoZSBsYXp5LWxvYWRlZCBzZWN0aW9uLCB0aGUgY29udHJvbCdzIHN0YXRlIGlzIG1pc3NlZCBpbiB0aGUgbmV3IGFwcCBzdGF0ZS5cblx0Ly8gVGhpcyBlbnN1cmVzIHRoZSBmdWxsIHN0YXRlIGZyb20gdXNlciAxIGlzIHByZXNlcnZlZCBhbmQgdHJhbnNmZXJyZWQgdG8gdXNlciAzIHdoZW4gdGhlIFVSTCBpcyBzaGFyZWQuXG5cdF9hZGRNaXNzaW5nU3RhdGUob1ZpZXdTdGF0ZTogUmVjb3JkPHN0cmluZywgdW5rbm93bj4sIHByZXZTdGF0ZTogUmVjb3JkPHN0cmluZywgdW5rbm93bj4pOiB2b2lkIHtcblx0XHRmb3IgKGNvbnN0IGtleSBpbiBwcmV2U3RhdGUpIHtcblx0XHRcdGlmICghKGtleSBpbiBvVmlld1N0YXRlKSkge1xuXHRcdFx0XHRvVmlld1N0YXRlW2tleV0gPSBwcmV2U3RhdGVba2V5XTtcblx0XHRcdH1cblx0XHR9XG5cdH1cblxuXHQvKipcblx0ICogRXh0ZW5kIHRoZSBtYXAgb2YgYWRkaXRpb25hbCBzdGF0ZXMgKG5vdCBjb250cm9sIGJvdW5kKSB0byBiZSBhZGRlZCB0byB0aGUgY3VycmVudCB2aWV3IHN0YXRlIG9mIHRoZSBnaXZlbiB2aWV3LlxuXHQgKlxuXHQgKiBUaGlzIGZ1bmN0aW9uIGlzIG1lYW50IHRvIGJlIGluZGl2aWR1YWxseSBvdmVycmlkZGVuIGJ5IGNvbnN1bWluZyBjb250cm9sbGVycywgYnV0IG5vdCB0byBiZSBjYWxsZWQgZGlyZWN0bHkuXG5cdCAqIFRoZSBvdmVycmlkZSBleGVjdXRpb24gaXM6IHtAbGluayBzYXAudWkuY29yZS5tdmMuT3ZlcnJpZGVFeGVjdXRpb24uQWZ0ZXJ9LlxuXHQgKiBAcGFyYW0gbUFkZGl0aW9uYWxTdGF0ZXMgVGhlIGFkZGl0aW9uYWwgc3RhdGVcblx0ICogQHByb3RlY3RlZFxuXHQgKi9cblx0QHB1YmxpY0V4dGVuc2lvbigpXG5cdEBleHRlbnNpYmxlKE92ZXJyaWRlRXhlY3V0aW9uLkFmdGVyKVxuXHQvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgQHR5cGVzY3JpcHQtZXNsaW50L25vLXVudXNlZC12YXJzXG5cdHJldHJpZXZlQWRkaXRpb25hbFN0YXRlcyhtQWRkaXRpb25hbFN0YXRlczogb2JqZWN0KTogdm9pZCB7XG5cdFx0Ly8gdG8gYmUgb3ZlcnJpZGRlbiBpZiBuZWVkZWRcblx0fVxuXG5cdC8qKlxuXHQgKiBSZXR1cm5zIGEgbWFwIG9mIGFkZGl0aW9uYWwgc3RhdGVzIChub3QgY29udHJvbCBib3VuZCkgdG8gYmUgYWRkZWQgdG8gdGhlIGN1cnJlbnQgdmlldyBzdGF0ZSBvZiB0aGUgZ2l2ZW4gdmlldy5cblx0ICogQHJldHVybnMgQWRkaXRpb25hbCB2aWV3IHN0YXRlc1xuXHQgKi9cblx0X3JldHJpZXZlQWRkaXRpb25hbFN0YXRlcygpOiB1bmtub3duIHtcblx0XHRjb25zdCBtQWRkaXRpb25hbFN0YXRlcyA9IHt9O1xuXHRcdHRoaXMuYmFzZS52aWV3U3RhdGUucmV0cmlldmVBZGRpdGlvbmFsU3RhdGVzKG1BZGRpdGlvbmFsU3RhdGVzKTtcblx0XHRyZXR1cm4gbUFkZGl0aW9uYWxTdGF0ZXM7XG5cdH1cblxuXHQvKipcblx0ICogUmV0dXJucyB0aGUgY3VycmVudCBzdGF0ZSBmb3IgdGhlIGdpdmVuIGNvbnRyb2wuXG5cdCAqIEBwYXJhbSBvQ29udHJvbCBUaGUgb2JqZWN0IHRvIGdldCB0aGUgc3RhdGUgZm9yXG5cdCAqIEByZXR1cm5zIFRoZSBzdGF0ZSBmb3IgdGhlIGdpdmVuIGNvbnRyb2xcblx0ICovXG5cdEBwcml2YXRlRXh0ZW5zaW9uKClcblx0QGZpbmFsRXh0ZW5zaW9uKClcblx0YXN5bmMgcmV0cmlldmVDb250cm9sU3RhdGUob0NvbnRyb2w6IE1hbmFnZWRPYmplY3QpOiBQcm9taXNlPG9iamVjdD4ge1xuXHRcdGNvbnN0IGFDb250cm9sU3RhdGVIYW5kbGVycyA9IHRoaXMuZ2V0Q29udHJvbFN0YXRlSGFuZGxlcihvQ29udHJvbCk7XG5cdFx0cmV0dXJuIFByb21pc2UuYWxsKFxuXHRcdFx0YUNvbnRyb2xTdGF0ZUhhbmRsZXJzLm1hcChhc3luYyAobUNvbnRyb2xTdGF0ZUhhbmRsZXIpID0+IHtcblx0XHRcdFx0aWYgKHR5cGVvZiBtQ29udHJvbFN0YXRlSGFuZGxlci5yZXRyaWV2ZSAhPT0gXCJmdW5jdGlvblwiKSB7XG5cdFx0XHRcdFx0dGhyb3cgbmV3IEVycm9yKGBjb250cm9sU3RhdGVIYW5kbGVyLnJldHJpZXZlIGlzIG5vdCBhIGZ1bmN0aW9uIGZvciBjb250cm9sOiAke29Db250cm9sLmdldE1ldGFkYXRhKCkuZ2V0TmFtZSgpfWApO1xuXHRcdFx0XHR9XG5cdFx0XHRcdHJldHVybiBtQ29udHJvbFN0YXRlSGFuZGxlci5yZXRyaWV2ZS5jYWxsKHRoaXMsIG9Db250cm9sKTtcblx0XHRcdH0pXG5cdFx0KS50aGVuKChhU3RhdGVzOiBvYmplY3RbXSkgPT4ge1xuXHRcdFx0cmV0dXJuIGFTdGF0ZXMucmVkdWNlKGZ1bmN0aW9uIChvRmluYWxTdGF0ZTogUmVjb3JkPHN0cmluZywgdW5rbm93bj4sIG9DdXJyZW50U3RhdGU6IG9iamVjdCkge1xuXHRcdFx0XHRyZXR1cm4gbWVyZ2VPYmplY3RzKG9GaW5hbFN0YXRlLCBvQ3VycmVudFN0YXRlKTtcblx0XHRcdH0sIHt9KTtcblx0XHR9KTtcblx0fVxuXG5cdC8qKlxuXHQgKiBEZWZpbmVzIHdoZXRoZXIgdGhlIHZpZXcgc3RhdGUgc2hvdWxkIG9ubHkgYmUgYXBwbGllZCBvbmNlIGluaXRpYWxseS5cblx0ICpcblx0ICogVGhpcyBmdW5jdGlvbiBpcyBtZWFudCB0byBiZSBpbmRpdmlkdWFsbHkgb3ZlcnJpZGRlbiBieSBjb25zdW1pbmcgY29udHJvbGxlcnMsIGJ1dCBub3QgdG8gYmUgY2FsbGVkIGRpcmVjdGx5LlxuXHQgKiBUaGUgb3ZlcnJpZGUgZXhlY3V0aW9uIGlzOiB7QGxpbmsgc2FwLnVpLmNvcmUubXZjLk92ZXJyaWRlRXhlY3V0aW9uLkluc3RlYWR9LlxuXHQgKlxuXHQgKiBJbXBvcnRhbnQ6XG5cdCAqIFlvdSBzaG91bGQgb25seSBvdmVycmlkZSB0aGlzIG1ldGhvZCBmb3IgY3VzdG9tIHBhZ2VzIGFuZCBub3QgZm9yIHRoZSBzdGFuZGFyZCBMaXN0UmVwb3J0UGFnZSBhbmQgT2JqZWN0UGFnZSFcblx0ICogQHJldHVybnMgSWYgPGNvZGU+dHJ1ZTwvY29kZT4sIG9ubHkgdGhlIGluaXRpYWwgdmlldyBzdGF0ZSBpcyBhcHBsaWVkIG9uY2UsXG5cdCAqIGVsc2UgYW55IG5ldyB2aWV3IHN0YXRlIGlzIGFsc28gYXBwbGllZCBvbiBmb2xsb3ctdXAgY2FsbHMgKGRlZmF1bHQpXG5cdCAqIEBwcm90ZWN0ZWRcblx0ICovXG5cdEBwdWJsaWNFeHRlbnNpb24oKVxuXHRAZXh0ZW5zaWJsZShPdmVycmlkZUV4ZWN1dGlvbi5JbnN0ZWFkKVxuXHRhcHBseUluaXRpYWxTdGF0ZU9ubHkoKTogYm9vbGVhbiB7XG5cdFx0cmV0dXJuIHRydWU7XG5cdH1cblxuXHQvKipcblx0ICogUmV0cmlldmVzIHRoZSBzdGF0ZSBvZiBhIHNwZWNpZmljIGNvbnRyb2wuXG5cdCAqIEBwYXJhbSBjb250cm9sIFRoZSBtYW5hZ2VkIGNvbnRyb2wgb2JqZWN0IHdob3NlIHN0YXRlIGlzIHRvIGJlIHJldHJpZXZlZC5cblx0ICogQHJldHVybnMgLSBUaGUgc3RhdGUgb2YgdGhlIHNwZWNpZmllZCBjb250cm9sLlxuXHQgKi9cblx0Z2V0Q29udHJvbFN0YXRlKGNvbnRyb2w6IE1hbmFnZWRPYmplY3QpOiBDb250cm9sU3RhdGUge1xuXHRcdGNvbnN0IG9WaWV3U3RhdGUgPSB0aGlzLl9jdXJyZW50Vmlld1N0YXRlO1xuXHRcdGxldCBjb250cm9sU3RhdGU6IENvbnRyb2xTdGF0ZSA9IHt9O1xuXHRcdGlmIChvVmlld1N0YXRlKSB7XG5cdFx0XHRjb25zdCBjb250cm9sS2V5ID0gdGhpcy5nZXRTdGF0ZUtleShjb250cm9sKTtcblx0XHRcdGNvbnRyb2xTdGF0ZSA9IG9WaWV3U3RhdGVbY29udHJvbEtleV0gYXMgUmVjb3JkPHN0cmluZywgQ29udHJvbFN0YXRlPjtcblx0XHR9XG5cdFx0cmV0dXJuIGNvbnRyb2xTdGF0ZTtcblx0fVxuXG5cdC8qKlxuXHQgKiBBcHBsaWVzIHRoZSBnaXZlbiB2aWV3IHN0YXRlIHRvIHRoaXMgZXh0ZW5zaW9ucyB2aWV3LlxuXHQgKiBAcGFyYW0gb1ZpZXdTdGF0ZSBUaGUgdmlldyBzdGF0ZSB0byBhcHBseSAoY2FuIGJlIHVuZGVmaW5lZClcblx0ICogQHBhcmFtIG9OYXZQYXJhbWV0ZXIgVGhlIGN1cnJlbnQgbmF2aWdhdGlvbiBwYXJhbWV0ZXJcblx0ICogQHBhcmFtIG9OYXZQYXJhbWV0ZXIubmF2aWdhdGlvblR5cGUgVGhlIGFjdHVhbCBuYXZpZ2F0aW9uIHR5cGVcblx0ICogQHBhcmFtIG9OYXZQYXJhbWV0ZXIuc2VsZWN0aW9uVmFyaWFudCBUaGUgc2VsZWN0aW9uVmFyaWFudCBmcm9tIHRoZSBuYXZpZ2F0aW9uXG5cdCAqIEBwYXJhbSBvTmF2UGFyYW1ldGVyLnNlbGVjdGlvblZhcmlhbnREZWZhdWx0cyBUaGUgc2VsZWN0aW9uVmFyaWFudCBkZWZhdWx0cyBmcm9tIHRoZSBuYXZpZ2F0aW9uXG5cdCAqIEBwYXJhbSBvTmF2UGFyYW1ldGVyLnJlcXVpcmVzU3RhbmRhcmRWYXJpYW50IERlZmluZXMgd2hldGhlciB0aGUgc3RhbmRhcmQgdmFyaWFudCBtdXN0IGJlIHVzZWQgaW4gdmFyaWFudCBtYW5hZ2VtZW50XG5cdCAqIEBwYXJhbSBza2lwTWVyZ2UgQm9vbGVhbiB3aGljaCBkZXRlcm1pbmVzIHRvIHNraXAgdGhlIGtleSB1c2VyIHNoaW5lIHRocm91Z2hcblx0ICogQHJldHVybnMgUHJvbWlzZSBmb3IgYXN5bmMgc3RhdGUgaGFuZGxpbmdcblx0ICogQHB1YmxpY1xuXHQgKi9cblx0QHB1YmxpY0V4dGVuc2lvbigpXG5cdEBmaW5hbEV4dGVuc2lvbigpXG5cdGFzeW5jIGFwcGx5Vmlld1N0YXRlKFxuXHRcdG9WaWV3U3RhdGU6IFJlY29yZDxzdHJpbmcsIHVua25vd24+IHwgdW5kZWZpbmVkLFxuXHRcdG9OYXZQYXJhbWV0ZXI6IE5hdmlnYXRpb25QYXJhbWV0ZXIsXG5cdFx0c2tpcE1lcmdlPzogYm9vbGVhblxuXHQpOiBQcm9taXNlPHZvaWQ+IHtcblx0XHRpZiAodGhpcy5iYXNlLnZpZXdTdGF0ZS5hcHBseUluaXRpYWxTdGF0ZU9ubHkoKSAmJiB0aGlzLl9nZXRJbml0aWFsU3RhdGVBcHBsaWVkKCkpIHtcblx0XHRcdHJldHVybjtcblx0XHR9XG5cdFx0dHJ5IHtcblx0XHRcdC8vU05PVzogQ1MyMDIzMDAwNjc2NTg5NyBGb3IgdHJhbnNpZW50IEFwcFN0YXRlLCB3ZSByZXR1cm4gd2l0aG91dCBhcHBseWluZyB0aGUgc3RhdGUgdG8gY29udHJvbHMgaW4gUm9vdENvbnRhaW5lcidzIGNoaWxkcmVuIHZpZXdzIGFzIHRoZXJlIGlzIG5vIHN0YXRlIHRvIGFwcGx5XG5cdFx0XHQvL09ubHkgbmVlZCBpcyB0byByZXNvbHZlIHRoZSBfcEluaXRpYWxTdGF0ZUFwcGxpZWQgc28gdGhhdCB1cGRhdGUgb2YgQXBwU3RhdGUgY2FuIHN0aWxsIGhhcHBlblxuXHRcdFx0aWYgKHRoaXMuX2lzU3RhdGVFbXB0eUZvcklBcHBTdGF0ZU5hdlR5cGUob1ZpZXdTdGF0ZSwgb05hdlBhcmFtZXRlci5uYXZpZ2F0aW9uVHlwZSkgJiYgIXRoaXMuX19pc1Jvb3RWaWV3Q29udHJvbGxlcigpKSB7XG5cdFx0XHRcdHJldHVybjtcblx0XHRcdH1cblx0XHRcdGF3YWl0IHRoaXMuY29sbGVjdFJlc3VsdHModGhpcy5iYXNlLnZpZXdTdGF0ZS5vbkJlZm9yZVN0YXRlQXBwbGllZCwgW10sIG9OYXZQYXJhbWV0ZXIubmF2aWdhdGlvblR5cGUpO1xuXHRcdFx0Y29uc3QgYUNvbnRyb2xzOiBNYW5hZ2VkT2JqZWN0W10gPSBhd2FpdCB0aGlzLmNvbGxlY3RSZXN1bHRzKHRoaXMuYmFzZS52aWV3U3RhdGUuYWRhcHRTdGF0ZUNvbnRyb2xzKTtcblx0XHRcdHRoaXMudmlld1N0YXRlQ29udHJvbHMgPSBhQ29udHJvbHM7XG5cdFx0XHRsZXQgb1Byb21pc2VDaGFpbiA9IFByb21pc2UucmVzb2x2ZSgpO1xuXHRcdFx0bGV0IGhhc1ZhcmlhbnRNYW5hZ2VtZW50ID0gZmFsc2U7XG5cdFx0XHR0aGlzLl9jdXJyZW50Vmlld1N0YXRlID0gb1ZpZXdTdGF0ZTtcblxuXHRcdFx0dGhpcy5jb25maWdPZlN0YXRlQXBwbHkgPSB0aGlzLmNvbmZpZ09mU3RhdGVBcHBseSA/PyB7fTtcblx0XHRcdHRoaXMuY29uZmlnT2ZTdGF0ZUFwcGx5LnNraXBNZXJnZSA9IHNraXBNZXJnZTtcblx0XHRcdHRoaXMuY29uZmlnT2ZTdGF0ZUFwcGx5Lm5hdlR5cGVQYXJhbWV0ZXJzID0gb05hdlBhcmFtZXRlcjtcblx0XHRcdHRoaXMuY29uZmlnT2ZTdGF0ZUFwcGx5LnN0YXRlID0gb1ZpZXdTdGF0ZTtcblxuXHRcdFx0LyoqXG5cdFx0XHQgKiBUaGlzIGVuc3VyZXMgdGhhdCB2YXJpYW50TWFuYWdlbWVudCBjb250cm9sIGlzIGFwcGxpZWQgZmlyc3QgdG8gY2FsY3VsYXRlIHRoZSBpbml0aWFsIHN0YXRlIGZvciBkZWx0YSBsb2dpY1xuXHRcdFx0ICovXG5cdFx0XHRjb25zdCBzb3J0ZWRBZGFwdFN0YXRlQ29udHJvbHMgPSBhQ29udHJvbHMucmVkdWNlKChtb2RpZmllZENvbnRyb2xzOiBNYW5hZ2VkT2JqZWN0W10sIGNvbnRyb2wpID0+IHtcblx0XHRcdFx0aWYgKCFjb250cm9sKSB7XG5cdFx0XHRcdFx0cmV0dXJuIG1vZGlmaWVkQ29udHJvbHM7XG5cdFx0XHRcdH1cblx0XHRcdFx0Y29uc3QgaXNWYXJpYW50TWFuYWdlbWVudENvbnRyb2wgPSBjb250cm9sLmlzQShcInNhcC51aS5mbC52YXJpYW50cy5WYXJpYW50TWFuYWdlbWVudFwiKTtcblx0XHRcdFx0aWYgKCFoYXNWYXJpYW50TWFuYWdlbWVudCkge1xuXHRcdFx0XHRcdGhhc1ZhcmlhbnRNYW5hZ2VtZW50ID0gaXNWYXJpYW50TWFuYWdlbWVudENvbnRyb2w7XG5cdFx0XHRcdH1cblx0XHRcdFx0bW9kaWZpZWRDb250cm9scyA9IGlzVmFyaWFudE1hbmFnZW1lbnRDb250cm9sID8gW2NvbnRyb2wsIC4uLm1vZGlmaWVkQ29udHJvbHNdIDogWy4uLm1vZGlmaWVkQ29udHJvbHMsIGNvbnRyb2xdO1xuXHRcdFx0XHRyZXR1cm4gbW9kaWZpZWRDb250cm9scztcblx0XHRcdH0sIFtdKTtcblxuXHRcdFx0Ly8gSW4gY2FzZSBvZiBubyBWYXJpYW50IE1hbmFnZW1lbnQsIHRoaXMgZW5zdXJlcyB0aGF0IGluaXRpYWwgc3RhdGVzIGlzIHNldFxuXHRcdFx0aWYgKCFoYXNWYXJpYW50TWFuYWdlbWVudCkge1xuXHRcdFx0XHR0aGlzLl9zZXRJbml0aWFsU3RhdGVzRm9yRGVsdGFDb21wdXRlKCk7XG5cdFx0XHR9XG5cdFx0XHRzb3J0ZWRBZGFwdFN0YXRlQ29udHJvbHNcblx0XHRcdFx0LmZpbHRlcihmdW5jdGlvbiAob0NvbnRyb2wpIHtcblx0XHRcdFx0XHRyZXR1cm4gb0NvbnRyb2wuaXNBKFwic2FwLnVpLmJhc2UuTWFuYWdlZE9iamVjdFwiKTtcblx0XHRcdFx0fSlcblx0XHRcdFx0LmZvckVhY2goKG9Db250cm9sKSA9PiB7XG5cdFx0XHRcdFx0Y29uc3Qgc0tleSA9IHRoaXMuZ2V0U3RhdGVLZXkob0NvbnRyb2wpO1xuXHRcdFx0XHRcdG9Qcm9taXNlQ2hhaW4gPSBvUHJvbWlzZUNoYWluLnRoZW4oXG5cdFx0XHRcdFx0XHR0aGlzLmFwcGx5Q29udHJvbFN0YXRlLmJpbmQoXG5cdFx0XHRcdFx0XHRcdHRoaXMsXG5cdFx0XHRcdFx0XHRcdG9Db250cm9sLFxuXHRcdFx0XHRcdFx0XHQob1ZpZXdTdGF0ZSA/IG9WaWV3U3RhdGVbc0tleV0gOiB1bmRlZmluZWQpIGFzIFJlY29yZDxzdHJpbmcsIHVua25vd24+LFxuXHRcdFx0XHRcdFx0XHRvTmF2UGFyYW1ldGVyLFxuXHRcdFx0XHRcdFx0XHRza2lwTWVyZ2UgPz8gZmFsc2Vcblx0XHRcdFx0XHRcdClcblx0XHRcdFx0XHQpO1xuXHRcdFx0XHR9KTtcblxuXHRcdFx0YXdhaXQgb1Byb21pc2VDaGFpbjtcblx0XHRcdGlmIChvTmF2UGFyYW1ldGVyLm5hdmlnYXRpb25UeXBlID09PSBOYXZUeXBlLmlBcHBTdGF0ZSB8fCBvTmF2UGFyYW1ldGVyLm5hdmlnYXRpb25UeXBlID09PSBOYXZUeXBlLmh5YnJpZCkge1xuXHRcdFx0XHRhd2FpdCB0aGlzLmNvbGxlY3RSZXN1bHRzKFxuXHRcdFx0XHRcdHRoaXMuYmFzZS52aWV3U3RhdGUuYXBwbHlBZGRpdGlvbmFsU3RhdGVzLFxuXHRcdFx0XHRcdG9WaWV3U3RhdGUgPyBvVmlld1N0YXRlW0FERElUSU9OQUxfU1RBVEVTX0tFWV0gOiB1bmRlZmluZWRcblx0XHRcdFx0KTtcblx0XHRcdH0gZWxzZSB7XG5cdFx0XHRcdGF3YWl0IHRoaXMuY29sbGVjdFJlc3VsdHModGhpcy5iYXNlLnZpZXdTdGF0ZS5hcHBseU5hdmlnYXRpb25QYXJhbWV0ZXJzLCBvTmF2UGFyYW1ldGVyKTtcblx0XHRcdFx0YXdhaXQgdGhpcy5jb2xsZWN0UmVzdWx0cyh0aGlzLmJhc2Uudmlld1N0YXRlLl9hcHBseU5hdmlnYXRpb25QYXJhbWV0ZXJzVG9GaWx0ZXJiYXIsIG9OYXZQYXJhbWV0ZXIpO1xuXHRcdFx0fVxuXHRcdH0gZmluYWxseSB7XG5cdFx0XHR0cnkge1xuXHRcdFx0XHRpZiAoIXRoaXMuX2lzU3RhdGVFbXB0eUZvcklBcHBTdGF0ZU5hdlR5cGUob1ZpZXdTdGF0ZSwgb05hdlBhcmFtZXRlci5uYXZpZ2F0aW9uVHlwZSkpIHtcblx0XHRcdFx0XHRhd2FpdCB0aGlzLmNvbGxlY3RSZXN1bHRzKHRoaXMuYmFzZS52aWV3U3RhdGUub25BZnRlclN0YXRlQXBwbGllZCk7XG5cdFx0XHRcdH1cblx0XHRcdFx0dGhpcy5fc2V0SW5pdGlhbFN0YXRlQXBwbGllZCgpO1xuXHRcdFx0fSBjYXRjaCAoZTogdW5rbm93bikge1xuXHRcdFx0XHRMb2cuZXJyb3IoZSBhcyBzdHJpbmcpO1xuXHRcdFx0fVxuXHRcdH1cblx0fVxuXG5cdEBwcml2YXRlRXh0ZW5zaW9uKClcblx0X2NoZWNrSWZWYXJpYW50SWRJc0F2YWlsYWJsZShvVk06IFZhcmlhbnRNYW5hZ2VtZW50LCBzVmFyaWFudElkOiBzdHJpbmcgfCBudWxsKTogYm9vbGVhbiB7XG5cdFx0Y29uc3QgYVZhcmlhbnRzID0gb1ZNLmdldFZhcmlhbnRzKCk7XG5cdFx0bGV0IGJJc0NvbnRyb2xTdGF0ZVZhcmlhbnRBdmFpbGFibGUgPSBmYWxzZTtcblx0XHRhVmFyaWFudHMuZm9yRWFjaChmdW5jdGlvbiAob1ZhcmlhbnQpIHtcblx0XHRcdGlmIChvVmFyaWFudC5nZXRLZXkoKSA9PT0gc1ZhcmlhbnRJZCkge1xuXHRcdFx0XHRiSXNDb250cm9sU3RhdGVWYXJpYW50QXZhaWxhYmxlID0gdHJ1ZTtcblx0XHRcdH1cblx0XHR9KTtcblx0XHRyZXR1cm4gYklzQ29udHJvbFN0YXRlVmFyaWFudEF2YWlsYWJsZTtcblx0fVxuXG5cdF9zZXRJbml0aWFsU3RhdGVBcHBsaWVkKCk6IHZvaWQge1xuXHRcdGlmICh0aGlzLl9wSW5pdGlhbFN0YXRlQXBwbGllZFJlc29sdmUpIHtcblx0XHRcdGNvbnN0IHBJbml0aWFsU3RhdGVBcHBsaWVkUmVzb2x2ZSA9IHRoaXMuX3BJbml0aWFsU3RhdGVBcHBsaWVkUmVzb2x2ZTtcblx0XHRcdGRlbGV0ZSB0aGlzLl9wSW5pdGlhbFN0YXRlQXBwbGllZFJlc29sdmU7XG5cdFx0XHRwSW5pdGlhbFN0YXRlQXBwbGllZFJlc29sdmUoKTtcblx0XHR9XG5cdH1cblxuXHRfZ2V0SW5pdGlhbFN0YXRlQXBwbGllZCgpOiBib29sZWFuIHtcblx0XHRyZXR1cm4gIXRoaXMuX3BJbml0aWFsU3RhdGVBcHBsaWVkUmVzb2x2ZTtcblx0fVxuXG5cdF9pc1N0YXRlRW1wdHlGb3JJQXBwU3RhdGVOYXZUeXBlKHZpZXdTdGF0ZTogUmVjb3JkPHN0cmluZywgdW5rbm93bj4gfCB1bmRlZmluZWQsIG5hdlR5cGU6IHN0cmluZyk6IGJvb2xlYW4ge1xuXHRcdHJldHVybiAoIXZpZXdTdGF0ZSB8fCBPYmplY3Qua2V5cyh2aWV3U3RhdGUpLmxlbmd0aCA9PT0gMCkgJiYgbmF2VHlwZSA9PSBOYXZUeXBlLmlBcHBTdGF0ZTtcblx0fVxuXG5cdF9faXNSb290Vmlld0NvbnRyb2xsZXIoKTogYm9vbGVhbiB7XG5cdFx0Y29uc3Qgcm9vdFZpZXdDb250cm9sbGVyID0gdGhpcy5iYXNlLmdldFZpZXcoKS5nZXRDb250cm9sbGVyKCk7XG5cdFx0cmV0dXJuIChcblx0XHRcdHJvb3RWaWV3Q29udHJvbGxlci5pc0E8TmF2Q29udGFpbmVyQ29udHJvbGxlcj4oXCJzYXAuZmUuY29yZS5yb290Vmlldy5OYXZDb250YWluZXJcIikgfHxcblx0XHRcdHJvb3RWaWV3Q29udHJvbGxlci5pc0E8RmNsQ29udHJvbGxlcj4oXCJzYXAuZmUuY29yZS5yb290Vmlldy5GY2xcIilcblx0XHQpO1xuXHR9XG5cblx0LyoqXG5cdCAqIEhvb2sgdG8gcmVhY3QgYmVmb3JlIGEgc3RhdGUgZm9yIGdpdmVuIHZpZXcgaXMgYXBwbGllZC5cblx0ICpcblx0ICogVGhpcyBmdW5jdGlvbiBpcyBtZWFudCB0byBiZSBpbmRpdmlkdWFsbHkgb3ZlcnJpZGRlbiBieSBjb25zdW1pbmcgY29udHJvbGxlcnMsIGJ1dCBub3QgdG8gYmUgY2FsbGVkIGRpcmVjdGx5LlxuXHQgKiBUaGUgb3ZlcnJpZGUgZXhlY3V0aW9uIGlzOiB7QGxpbmsgc2FwLnVpLmNvcmUubXZjLk92ZXJyaWRlRXhlY3V0aW9uLkFmdGVyfS5cblx0ICogQHBhcmFtIGFQcm9taXNlcyBFeHRlbnNpYmxlIGFycmF5IG9mIHByb21pc2VzIHRvIGJlIHJlc29sdmVkIGJlZm9yZSBjb250aW51aW5nXG5cdCAqIEBwYXJhbSBuYXZpZ2F0aW9uVHlwZSBOYXZpZ2F0aW9uIHR5cGUgcmVzcG9uc2libGUgZm9yIHRoZSBhcHBseWluZyB0aGUgc3RhdGVcblx0ICogQHByb3RlY3RlZFxuXHQgKi9cblx0QHB1YmxpY0V4dGVuc2lvbigpXG5cdEBleHRlbnNpYmxlKE92ZXJyaWRlRXhlY3V0aW9uLkFmdGVyKVxuXHQvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgQHR5cGVzY3JpcHQtZXNsaW50L25vLXVudXNlZC12YXJzXG5cdG9uQmVmb3JlU3RhdGVBcHBsaWVkKGFQcm9taXNlczogUHJvbWlzZTx1bmtub3duPltdLCBuYXZpZ2F0aW9uVHlwZT86IHN0cmluZyk6IHZvaWQge1xuXHRcdC8vIHRvIGJlIG92ZXJyaWRlblxuXHR9XG5cblx0LyoqXG5cdCAqIEhvb2sgdG8gcmVhY3Qgd2hlbiBzdGF0ZSBmb3IgZ2l2ZW4gdmlldyB3YXMgYXBwbGllZC5cblx0ICpcblx0ICogVGhpcyBmdW5jdGlvbiBpcyBtZWFudCB0byBiZSBpbmRpdmlkdWFsbHkgb3ZlcnJpZGRlbiBieSBjb25zdW1pbmcgY29udHJvbGxlcnMsIGJ1dCBub3QgdG8gYmUgY2FsbGVkIGRpcmVjdGx5LlxuXHQgKiBUaGUgb3ZlcnJpZGUgZXhlY3V0aW9uIGlzOiB7QGxpbmsgc2FwLnVpLmNvcmUubXZjLk92ZXJyaWRlRXhlY3V0aW9uLkFmdGVyfS5cblx0ICogQHBhcmFtIGFQcm9taXNlcyBFeHRlbnNpYmxlIGFycmF5IG9mIHByb21pc2VzIHRvIGJlIHJlc29sdmVkIGJlZm9yZSBjb250aW51aW5nXG5cdCAqIEBwcm90ZWN0ZWRcblx0ICovXG5cdEBwdWJsaWNFeHRlbnNpb24oKVxuXHRAZXh0ZW5zaWJsZShPdmVycmlkZUV4ZWN1dGlvbi5BZnRlcilcblx0Ly8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIEB0eXBlc2NyaXB0LWVzbGludC9uby11bnVzZWQtdmFyc1xuXHRvbkFmdGVyU3RhdGVBcHBsaWVkKGFQcm9taXNlczogUHJvbWlzZTx1bmtub3duPik6IHZvaWQge1xuXHRcdC8vIHRvIGJlIG92ZXJyaWRlblxuXHR9XG5cblx0LyoqXG5cdCAqIEFwcGx5aW5nIGFkZGl0aW9uYWwsIG5vdCBjb250cm9sIHJlbGF0ZWQsIHN0YXRlcyAtIGlzIGNhbGxlZCBvbmx5IGlmIG5hdmlnYXRpb24gdHlwZSBpcyBpQXBwU3RhdGUuXG5cdCAqXG5cdCAqIFRoaXMgZnVuY3Rpb24gaXMgbWVhbnQgdG8gYmUgaW5kaXZpZHVhbGx5IG92ZXJyaWRkZW4gYnkgY29uc3VtaW5nIGNvbnRyb2xsZXJzLCBidXQgbm90IHRvIGJlIGNhbGxlZCBkaXJlY3RseS5cblx0ICogVGhlIG92ZXJyaWRlIGV4ZWN1dGlvbiBpczoge0BsaW5rIHNhcC51aS5jb3JlLm12Yy5PdmVycmlkZUV4ZWN1dGlvbi5BZnRlcn0uXG5cdCAqIEBwYXJhbSBvVmlld1N0YXRlIFRoZSBjdXJyZW50IHZpZXcgc3RhdGVcblx0ICogQHBhcmFtIGFQcm9taXNlcyBFeHRlbnNpYmxlIGFycmF5IG9mIHByb21pc2VzIHRvIGJlIHJlc29sdmVkIGJlZm9yZSBjb250aW51aW5nXG5cdCAqIEBwcm90ZWN0ZWRcblx0ICovXG5cdEBwdWJsaWNFeHRlbnNpb24oKVxuXHRAZXh0ZW5zaWJsZShPdmVycmlkZUV4ZWN1dGlvbi5BZnRlcilcblx0Ly8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIEB0eXBlc2NyaXB0LWVzbGludC9uby11bnVzZWQtdmFyc1xuXHRhcHBseUFkZGl0aW9uYWxTdGF0ZXMob1ZpZXdTdGF0ZTogb2JqZWN0LCBhUHJvbWlzZXM6IFByb21pc2U8dW5rbm93bj4pOiB2b2lkIHtcblx0XHQvLyB0byBiZSBvdmVycmlkZGVuIGlmIG5lZWRlZFxuXHR9XG5cblx0QHByaXZhdGVFeHRlbnNpb24oKVxuXHRfYXBwbHlOYXZpZ2F0aW9uUGFyYW1ldGVyc1RvRmlsdGVyYmFyKF9vTmF2UGFyYW1ldGVyOiBOYXZpZ2F0aW9uUGFyYW1ldGVyLCBfYVByb21pc2VzOiBQcm9taXNlPHVua25vd24+KTogdm9pZCB7XG5cdFx0Ly8gdG8gYmUgb3ZlcnJpZGRlbiBpZiBuZWVkZWRcblx0fVxuXG5cdC8qKlxuXHQgKiBBcHBseSBuYXZpZ2F0aW9uIHBhcmFtZXRlcnMgaXMgbm90IGNhbGxlZCBpZiB0aGUgbmF2aWdhdGlvbiB0eXBlIGlzIGlBcHBTdGF0ZVxuXHQgKlxuXHQgKiBUaGlzIGZ1bmN0aW9uIGlzIG1lYW50IHRvIGJlIGluZGl2aWR1YWxseSBvdmVycmlkZGVuIGJ5IGNvbnN1bWluZyBjb250cm9sbGVycywgYnV0IG5vdCB0byBiZSBjYWxsZWQgZGlyZWN0bHkuXG5cdCAqIFRoZSBvdmVycmlkZSBleGVjdXRpb24gaXM6IHtAbGluayBzYXAudWkuY29yZS5tdmMuT3ZlcnJpZGVFeGVjdXRpb24uQWZ0ZXJ9LlxuXHQgKiBAcGFyYW0gb05hdlBhcmFtZXRlciBUaGUgY3VycmVudCBuYXZpZ2F0aW9uIHBhcmFtZXRlclxuXHQgKiBAcGFyYW0gYVByb21pc2VzIEV4dGVuc2libGUgYXJyYXkgb2YgcHJvbWlzZXMgdG8gYmUgcmVzb2x2ZWQgYmVmb3JlIGNvbnRpbnVpbmdcblx0ICogQHByb3RlY3RlZFxuXHQgKi9cblx0QHB1YmxpY0V4dGVuc2lvbigpXG5cdEBleHRlbnNpYmxlKE92ZXJyaWRlRXhlY3V0aW9uLkFmdGVyKVxuXHRhcHBseU5hdmlnYXRpb25QYXJhbWV0ZXJzKFxuXHRcdC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBAdHlwZXNjcmlwdC1lc2xpbnQvbm8tdW51c2VkLXZhcnNcblx0XHRvTmF2UGFyYW1ldGVyOiBOYXZpZ2F0aW9uUGFyYW1ldGVyLFxuXHRcdC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBAdHlwZXNjcmlwdC1lc2xpbnQvbm8tdW51c2VkLXZhcnNcblx0XHRhUHJvbWlzZXM6IFByb21pc2U8dW5rbm93bj5cblx0KTogdm9pZCB7XG5cdFx0Ly8gdG8gYmUgb3ZlcnJpZGRlbiBpZiBuZWVkZWRcblx0fVxuXG5cdC8qKlxuXHQgKiBBcHBseWluZyB0aGUgZ2l2ZW4gc3RhdGUgdG8gdGhlIGdpdmVuIGNvbnRyb2wuXG5cdCAqIEBwYXJhbSBvQ29udHJvbCBUaGUgb2JqZWN0IHRvIGFwcGx5IHRoZSBnaXZlbiBzdGF0ZVxuXHQgKiBAcGFyYW0gb0NvbnRyb2xTdGF0ZSBUaGUgc3RhdGUgZm9yIHRoZSBnaXZlbiBjb250cm9sXG5cdCAqIEBwYXJhbSBbb05hdlBhcmFtZXRlcnNdIFRoZSBjdXJyZW50IG5hdmlnYXRpb24gcGFyYW1ldGVyc1xuXHQgKiBAcGFyYW0gW3NraXBNZXJnZV0gV2hldGhlciBtZXJnZSBzaG91bGQgYmUgc2tpcHBlZCBvciBub3Rcblx0ICogQHJldHVybnMgUmV0dXJuIGEgcHJvbWlzZSBmb3IgYXN5bmMgc3RhdGUgaGFuZGxpbmdcblx0ICovXG5cdEBwcml2YXRlRXh0ZW5zaW9uKClcblx0QGZpbmFsRXh0ZW5zaW9uKClcblx0YXN5bmMgYXBwbHlDb250cm9sU3RhdGUoXG5cdFx0b0NvbnRyb2w6IE1hbmFnZWRPYmplY3QsXG5cdFx0b0NvbnRyb2xTdGF0ZTogb2JqZWN0LFxuXHRcdG9OYXZQYXJhbWV0ZXJzPzogTmF2aWdhdGlvblBhcmFtZXRlcixcblx0XHRza2lwTWVyZ2U/OiBib29sZWFuXG5cdCk6IFByb21pc2U8dm9pZD4ge1xuXHRcdGNvbnN0IGFDb250cm9sU3RhdGVIYW5kbGVycyA9IHRoaXMuZ2V0Q29udHJvbFN0YXRlSGFuZGxlcihvQ29udHJvbCk7XG5cdFx0bGV0IG9Qcm9taXNlQ2hhaW4gPSBQcm9taXNlLnJlc29sdmUoKTtcblx0XHRhQ29udHJvbFN0YXRlSGFuZGxlcnMuZm9yRWFjaCgobUNvbnRyb2xTdGF0ZUhhbmRsZXIpID0+IHtcblx0XHRcdGlmICh0eXBlb2YgbUNvbnRyb2xTdGF0ZUhhbmRsZXIuYXBwbHkgIT09IFwiZnVuY3Rpb25cIikge1xuXHRcdFx0XHR0aHJvdyBuZXcgRXJyb3IoYGNvbnRyb2xTdGF0ZUhhbmRsZXIuYXBwbHkgaXMgbm90IGEgZnVuY3Rpb24gZm9yIGNvbnRyb2w6ICR7b0NvbnRyb2wuZ2V0TWV0YWRhdGEoKS5nZXROYW1lKCl9YCk7XG5cdFx0XHR9XG5cdFx0XHRvUHJvbWlzZUNoYWluID0gb1Byb21pc2VDaGFpbi50aGVuKG1Db250cm9sU3RhdGVIYW5kbGVyLmFwcGx5LmJpbmQodGhpcywgb0NvbnRyb2wsIG9Db250cm9sU3RhdGUsIG9OYXZQYXJhbWV0ZXJzLCBza2lwTWVyZ2UpKTtcblx0XHR9KTtcblx0XHRyZXR1cm4gb1Byb21pc2VDaGFpbjtcblx0fVxuXG5cdEBwdWJsaWNFeHRlbnNpb24oKVxuXHRwdWJsaWMgdXBkYXRlQXBwU3RhdGVEZWJvdW5jZWQoKTogdm9pZCB7XG5cdFx0aWYgKHRoaXMudXBkYXRlQXBwU3RhdGVUaW1lcikge1xuXHRcdFx0Y2xlYXJUaW1lb3V0KHRoaXMudXBkYXRlQXBwU3RhdGVUaW1lcik7XG5cdFx0fVxuXHRcdHRoaXMudXBkYXRlQXBwU3RhdGVUaW1lciA9IHNldFRpbWVvdXQoKCkgPT4ge1xuXHRcdFx0dGhpcy5iYXNlLmdldEV4dGVuc2lvbkFQSSgpLnVwZGF0ZUFwcFN0YXRlKCk7XG5cdFx0fSwgMjAwKSBhcyB1bmtub3duIGFzIG51bWJlcjtcblx0fVxuXG5cdC8qKlxuXHQgKiBSZWdpc3RlciBhIGRlZGljYXRlZCBJVmlld1N0YXRlQ29udHJpYnV0b3IgaW50byB0aGUgd2hvbGUgdmlldyBzdGF0ZSBoYW5kbGluZy5cblx0ICogQHBhcmFtIHN0YXRlQ29udHJpYnV0b3IgVGhlIFZpZXdTdGF0ZUNvbnRyaWJ1dG9yIHRvIHJlZ2lzdGVyXG5cdCAqL1xuXHRyZWdpc3RlclN0YXRlQ29udHJpYnV0b3Ioc3RhdGVDb250cmlidXRvcjogTWFuYWdlZE9iamVjdCAmIElWaWV3U3RhdGVDb250cmlidXRvcjx1bmtub3duPik6IHZvaWQge1xuXHRcdGlmICh0aGlzLnN0YXRlQ29udHJpYnV0b3JzLmluY2x1ZGVzKHN0YXRlQ29udHJpYnV0b3IpKSB7XG5cdFx0XHQvLyBubyBuZWVkIHRvIHJlZ2lzdGVyIHRoZSBzYW1lIGNvbnRyb2wgYWdhaW5cblx0XHRcdHJldHVybjtcblx0XHR9XG5cdFx0dGhpcy5zdGF0ZUNvbnRyaWJ1dG9ycy5wdXNoKHN0YXRlQ29udHJpYnV0b3IpO1xuXHRcdGlmICh0aGlzLl9jdXJyZW50Vmlld1N0YXRlKSB7XG5cdFx0XHRjb25zdCBjb250cm9sS2V5ID0gdGhpcy5nZXRTdGF0ZUtleShzdGF0ZUNvbnRyaWJ1dG9yKTtcblx0XHRcdGNvbnN0IGNvbnRyb2xTdGF0ZSA9IHRoaXMuX2N1cnJlbnRWaWV3U3RhdGVbY29udHJvbEtleV07XG5cdFx0XHRjb25zdCBuYXZpZ2F0aW9uVHlwZSA9IHRoaXMuY29uZmlnT2ZTdGF0ZUFwcGx5Py5uYXZUeXBlUGFyYW1ldGVycz8ubmF2aWdhdGlvblR5cGU7XG5cdFx0XHRjb25zdCBza2lwTWVyZ2UgPSB0aGlzLmNvbmZpZ09mU3RhdGVBcHBseT8uc2tpcE1lcmdlO1xuXHRcdFx0aWYgKGNvbnRyb2xTdGF0ZSAmJiBjb250cm9sU3RhdGUgPT09IHRoaXMuY29uZmlnT2ZTdGF0ZUFwcGx5Py5zdGF0ZT8uW2NvbnRyb2xLZXldKSB7XG5cdFx0XHRcdC8vIFRvIGNoZWNrIHdoZXRoZXIgZGlmZnN0YXRlIHNodW9sZCBiZSBjYWxsZWQgb3Igbm90IHRvIGFwcGx5RXh0ZXJuYWxTdGF0ZVxuXHRcdFx0XHRjb25zdCBzaG91bGRBcHBseURpZmZTdGF0ZSA9XG5cdFx0XHRcdFx0IXRoaXMuaW52YWxpZGF0ZUluaXRpYWxTdGF0ZUZvckFwcGx5LmluY2x1ZGVzKHN0YXRlQ29udHJpYnV0b3IuZ2V0SWQoKSkgJiZcblx0XHRcdFx0XHQhdGhpcy5jb250cm9sc1ZhcmlhbnRJZFVuYXZhaWxhYmxlLmluY2x1ZGVzKHN0YXRlQ29udHJpYnV0b3IuZ2V0SWQoKSkgJiZcblx0XHRcdFx0XHRuYXZpZ2F0aW9uVHlwZSAhPT0gTmF2VHlwZS5oeWJyaWQgJiZcblx0XHRcdFx0XHRza2lwTWVyZ2UgIT09IHRydWU7XG5cblx0XHRcdFx0c3RhdGVDb250cmlidXRvci5hcHBseVN0YXRlKGNvbnRyb2xTdGF0ZSwgdW5kZWZpbmVkLCBzaG91bGRBcHBseURpZmZTdGF0ZSk7XG5cdFx0XHR9IGVsc2Uge1xuXHRcdFx0XHR0aGlzLnVwZGF0ZUFwcFN0YXRlRGVib3VuY2VkKCk7XG5cdFx0XHR9XG5cdFx0fVxuXHR9XG5cblx0LyoqXG5cdCAqIERlcmVnaXN0ZXIgYSBkZWRpY2F0ZWQgSVZpZXdTdGF0ZUNvbnRyaWJ1dG9yIGZyb20gdGhlIHdob2xlIHZpZXcgc3RhdGUgaGFuZGxpbmcuXG5cdCAqIEBwYXJhbSBzdGF0ZUNvbnRyaWJ1dG9yIFRoZSBWaWV3U3RhdGVDb250cmlidXRvciB0byBkZXJlZ2lzdGVyXG5cdCAqL1xuXHRkZXJlZ2lzdGVyU3RhdGVDb250cmlidXRvcihzdGF0ZUNvbnRyaWJ1dG9yOiBNYW5hZ2VkT2JqZWN0ICYgSVZpZXdTdGF0ZUNvbnRyaWJ1dG9yPHVua25vd24+KTogdm9pZCB7XG5cdFx0Y29uc3QgdGFyZ2V0SW5kZXggPSB0aGlzLnN0YXRlQ29udHJpYnV0b3JzLmZpbmRJbmRleCgoY29udHJpYnV0b3IpID0+IGNvbnRyaWJ1dG9yID09IHN0YXRlQ29udHJpYnV0b3IpO1xuXHRcdGlmICh0YXJnZXRJbmRleCAhPT0gLTEpIHtcblx0XHRcdHRoaXMuc3RhdGVDb250cmlidXRvcnMuc3BsaWNlKHRhcmdldEluZGV4LCAxKTtcblx0XHR9XG5cdH1cblxuXHRnZXRJbnRlcmZhY2UoKTogdGhpcyB7XG5cdFx0cmV0dXJuIHRoaXM7XG5cdH1cblxuXHQvLyBtZXRob2QgdG8gZ2V0IHRoZSBjb250cm9sIHN0YXRlIGZvciBtZGMgY29udHJvbHMgYXBwbHlpbmcgdGhlIGRlbHRhIGxvZ2ljXG5cdF9nZXRDb250cm9sU3RhdGUoY29udHJvbFN0YXRlS2V5OiBzdHJpbmcsIGNvbnRyb2xTdGF0ZTogQ29udHJvbFN0YXRlKTogQ29udHJvbFN0YXRlIHtcblx0XHRjb25zdCBpbml0aWFsQ29udHJvbFN0YXRlc01hcHBlciA9IHRoaXMuaW5pdGlhbENvbnRyb2xTdGF0ZXNNYXBwZXI7XG5cdFx0aWYgKE9iamVjdC5rZXlzKGluaXRpYWxDb250cm9sU3RhdGVzTWFwcGVyKS5sZW5ndGggPiAwICYmIGluaXRpYWxDb250cm9sU3RhdGVzTWFwcGVyW2NvbnRyb2xTdGF0ZUtleV0pIHtcblx0XHRcdGlmIChPYmplY3Qua2V5cyhpbml0aWFsQ29udHJvbFN0YXRlc01hcHBlcltjb250cm9sU3RhdGVLZXldIGFzIG9iamVjdCkubGVuZ3RoID09PSAwKSB7XG5cdFx0XHRcdGluaXRpYWxDb250cm9sU3RhdGVzTWFwcGVyW2NvbnRyb2xTdGF0ZUtleV0gPSB7IC4uLmNvbnRyb2xTdGF0ZSB9O1xuXHRcdFx0fVxuXHRcdFx0cmV0dXJuIHsgZnVsbFN0YXRlOiBjb250cm9sU3RhdGUgYXMgb2JqZWN0LCBpbml0aWFsU3RhdGU6IGluaXRpYWxDb250cm9sU3RhdGVzTWFwcGVyW2NvbnRyb2xTdGF0ZUtleV0gYXMgb2JqZWN0IH07XG5cdFx0fVxuXHRcdHJldHVybiBjb250cm9sU3RhdGU7XG5cdH1cblxuXHQvL21ldGhvZCB0byBzdG9yZSB0aGUgaW5pdGlhbCBzdGF0ZXMgZm9yIGRlbHRhIGNvbXB1dGF0aW9uIG9mIG1kYyBjb250cm9sc1xuXHRfc2V0SW5pdGlhbFN0YXRlc0ZvckRlbHRhQ29tcHV0ZSA9IGFzeW5jICh2YXJpYW50TWFuYWdlbWVudD86IFZhcmlhbnRNYW5hZ2VtZW50KTogUHJvbWlzZTx2b2lkPiA9PiB7XG5cdFx0dHJ5IHtcblx0XHRcdGNvbnN0IGFkYXB0Q29udHJvbHMgPSB0aGlzLnZpZXdTdGF0ZUNvbnRyb2xzO1xuXG5cdFx0XHRjb25zdCBleHRlcm5hbFN0YXRlUHJvbWlzZXM6IFByb21pc2U8b2JqZWN0PltdID0gW107XG5cdFx0XHRjb25zdCBjb250cm9sU3RhdGVLZXk6IHN0cmluZ1tdID0gW107XG5cdFx0XHRsZXQgaW5pdGlhbENvbnRyb2xTdGF0ZXM6IG9iamVjdFtdID0gW107XG5cdFx0XHRjb25zdCB2YXJpYW50Q29udHJvbHM6IHN0cmluZ1tdID0gdmFyaWFudE1hbmFnZW1lbnQ/LmdldEZvcigpID8/IFtdO1xuXG5cdFx0XHR0aGlzLnVwZGF0ZUluaXRpYWxTdGF0ZSh2YXJpYW50Q29udHJvbHMpO1xuXG5cdFx0XHRhd2FpdCBQcm9taXNlLmFsbChcblx0XHRcdFx0YWRhcHRDb250cm9sc1xuXHRcdFx0XHRcdC5maWx0ZXIoZnVuY3Rpb24gKGNvbnRyb2wpIHtcblx0XHRcdFx0XHRcdHJldHVybiAoXG5cdFx0XHRcdFx0XHRcdGNvbnRyb2wgJiZcblx0XHRcdFx0XHRcdFx0KCF2YXJpYW50TWFuYWdlbWVudCB8fCB2YXJpYW50Q29udHJvbHMuaW5jbHVkZXMoKGNvbnRyb2wgYXMgQ29udHJvbCkuZ2V0SWQoKSkpICYmXG5cdFx0XHRcdFx0XHRcdCgoY29udHJvbCBhcyBCYXNlT2JqZWN0KS5pc0EoXCJzYXAudWkubWRjLlRhYmxlXCIpIHx8XG5cdFx0XHRcdFx0XHRcdFx0KGNvbnRyb2wgYXMgQmFzZU9iamVjdCkuaXNBKFwic2FwLnVpLm1kYy5GaWx0ZXJCYXJcIikgfHxcblx0XHRcdFx0XHRcdFx0XHQoY29udHJvbCBhcyBCYXNlT2JqZWN0KS5pc0EoXCJzYXAudWkubWRjLkNoYXJ0XCIpKVxuXHRcdFx0XHRcdFx0KTtcblx0XHRcdFx0XHR9KVxuXHRcdFx0XHRcdC5tYXAoYXN5bmMgKGNvbnRyb2wpID0+IHtcblx0XHRcdFx0XHRcdGlmICh2YXJpYW50TWFuYWdlbWVudCkge1xuXHRcdFx0XHRcdFx0XHR0aGlzLl9hZGRFdmVudExpc3RlbmVyc1RvVmFyaWFudE1hbmFnZW1lbnQodmFyaWFudE1hbmFnZW1lbnQsIHZhcmlhbnRDb250cm9scyk7XG5cdFx0XHRcdFx0XHR9XG5cblx0XHRcdFx0XHRcdGNvbnN0IGV4dGVybmFsU3RhdGVQcm9taXNlID0gKGF3YWl0IGdldFN0YXRlVXRpbCgpKS5yZXRyaWV2ZUV4dGVybmFsU3RhdGUoY29udHJvbCBhcyBNRENDb250cm9sKTtcblx0XHRcdFx0XHRcdGV4dGVybmFsU3RhdGVQcm9taXNlcy5wdXNoKGV4dGVybmFsU3RhdGVQcm9taXNlKTtcblx0XHRcdFx0XHRcdGNvbnRyb2xTdGF0ZUtleS5wdXNoKHRoaXMuZ2V0U3RhdGVLZXkoY29udHJvbCkpO1xuXHRcdFx0XHRcdH0pXG5cdFx0XHQpO1xuXG5cdFx0XHRpbml0aWFsQ29udHJvbFN0YXRlcyA9IGF3YWl0IFByb21pc2UuYWxsKGV4dGVybmFsU3RhdGVQcm9taXNlcyk7XG5cdFx0XHRpbml0aWFsQ29udHJvbFN0YXRlcy5mb3JFYWNoKChpbml0aWFsQ29udHJvbFN0YXRlOiBvYmplY3QsIGk6IG51bWJlcikgPT4ge1xuXHRcdFx0XHR0aGlzLmluaXRpYWxDb250cm9sU3RhdGVzTWFwcGVyW2NvbnRyb2xTdGF0ZUtleVtpXV0gPSBpbml0aWFsQ29udHJvbFN0YXRlO1xuXHRcdFx0fSk7XG5cdFx0fSBjYXRjaCAoZTogdW5rbm93bikge1xuXHRcdFx0TG9nLmVycm9yKGUgYXMgc3RyaW5nKTtcblx0XHR9XG5cdH07XG5cblx0Ly8gQXR0YWNoIGV2ZW50IHRvIHNhdmUgYW5kIHNlbGVjdCBvZiBWYXJpYW50IE1hbmFnZW1lbnQgdG8gdXBkYXRlIHRoZSBpbml0aWFsIENvbnRyb2wgU3RhdGVzIG9uIHZhcmlhbnQgY2hhbmdlXG5cdF9hZGRFdmVudExpc3RlbmVyc1RvVmFyaWFudE1hbmFnZW1lbnQodmFyaWFudE1hbmFnZW1lbnQ6IFZhcmlhbnRNYW5hZ2VtZW50LCB2YXJpYW50Q29udHJvbHM6IHN0cmluZ1tdKTogdm9pZCB7XG5cdFx0Y29uc3Qgb1BheWxvYWQgPSB7IHZhcmlhbnRNYW5hZ2VkQ29udHJvbHM6IHZhcmlhbnRDb250cm9scyB9O1xuXHRcdGNvbnN0IGZuRXZlbnQgPSAoKTogdm9pZCA9PiB7XG5cdFx0XHR0aGlzLl91cGRhdGVJbml0aWFsU3RhdGVzT25WYXJpYW50Q2hhbmdlKHZhcmlhbnRDb250cm9scyk7XG5cdFx0fTtcblx0XHR2YXJpYW50TWFuYWdlbWVudC5hdHRhY2hTYXZlKG9QYXlsb2FkLCBmbkV2ZW50LCB7fSk7XG5cdFx0dmFyaWFudE1hbmFnZW1lbnQuYXR0YWNoU2VsZWN0KG9QYXlsb2FkLCBmbkV2ZW50LCB7fSk7XG5cdH1cblxuXHRfdXBkYXRlSW5pdGlhbFN0YXRlc09uVmFyaWFudENoYW5nZSh2bUFzc29jaWF0ZWRDb250cm9sc1RvUmVzZXQ6IHN0cmluZ1tdKTogdm9pZCB7XG5cdFx0Y29uc3QgaW5pdGlhbENvbnRyb2xTdGF0ZXNNYXBwZXIgPSB0aGlzLmluaXRpYWxDb250cm9sU3RhdGVzTWFwcGVyO1xuXHRcdE9iamVjdC5rZXlzKGluaXRpYWxDb250cm9sU3RhdGVzTWFwcGVyKS5mb3JFYWNoKChjb250cm9sS2V5KSA9PiB7XG5cdFx0XHRmb3IgKGNvbnN0IHZtQXNzb2NpYXRlZGNvbnRyb2xLZXkgb2Ygdm1Bc3NvY2lhdGVkQ29udHJvbHNUb1Jlc2V0KSB7XG5cdFx0XHRcdGlmICh2bUFzc29jaWF0ZWRjb250cm9sS2V5LmluY2x1ZGVzKGNvbnRyb2xLZXkpKSB7XG5cdFx0XHRcdFx0aW5pdGlhbENvbnRyb2xTdGF0ZXNNYXBwZXJbY29udHJvbEtleV0gPSB7fTtcblx0XHRcdFx0fVxuXHRcdFx0fVxuXHRcdH0pO1xuXHRcdHRoaXMudXBkYXRlSW5pdGlhbFN0YXRlKHZtQXNzb2NpYXRlZENvbnRyb2xzVG9SZXNldCk7XG5cdH1cblxuXHQvKipcblx0ICogVXBkYXRlcyB0aGUgaW5pdGlhbCBzdGF0ZSBvZiB0aGUgc3BlY2lmaWVkIHZhcmlhbnQgY29udHJvbHMuXG5cdCAqIEBwYXJhbSB2YXJpYW50Q29udHJvbHMgQW4gYXJyYXkgb2YgY29udHJvbCBJRHMgZm9yIHdoaWNoIHRoZSBpbml0aWFsIHN0YXRlIG5lZWRzIHRvIGJlIHVwZGF0ZWQuXG5cdCAqIEByZXR1cm5zIEEgcHJvbWlzZSB0aGF0IHJlc29sdmVzIHdoZW4gdGhlIGluaXRpYWwgc3RhdGUgdXBkYXRlIGlzIGNvbXBsZXRlLlxuXHQgKi9cblx0YXN5bmMgdXBkYXRlSW5pdGlhbFN0YXRlKHZhcmlhbnRDb250cm9sczogc3RyaW5nW10pOiBQcm9taXNlPHZvaWQ+IHtcblx0XHRjb25zdCB2aWV3Q29udHJvbHM6IChNYW5hZ2VkT2JqZWN0IHwgdW5kZWZpbmVkKVtdID0gdGhpcy5zdGF0ZUNvbnRyaWJ1dG9ycztcblx0XHRhd2FpdCBQcm9taXNlLmFsbChcblx0XHRcdHZpZXdDb250cm9scy5tYXAoYXN5bmMgKGNvbnRyb2wpID0+IHtcblx0XHRcdFx0Y29uc3QgY29udHJvbElkOiBzdHJpbmcgPSBjb250cm9sPy5nZXRJZCgpIGFzIHN0cmluZztcblx0XHRcdFx0aWYgKFxuXHRcdFx0XHRcdHZhcmlhbnRDb250cm9scy5pbmNsdWRlcyhjb250cm9sSWQpICYmXG5cdFx0XHRcdFx0Y29udHJvbD8uaXNBPElWaWV3U3RhdGVDb250cmlidXRvcjxvYmplY3Q+PihcInNhcC5mZS5jb3JlLmNvbnRyb2xsZXJleHRlbnNpb25zLnZpZXdTdGF0ZS5JVmlld1N0YXRlQ29udHJpYnV0b3JcIikgJiZcblx0XHRcdFx0XHRjb250cm9sLnNldEluaXRpYWxTdGF0ZVxuXHRcdFx0XHQpIHtcblx0XHRcdFx0XHRhd2FpdCBjb250cm9sLnNldEluaXRpYWxTdGF0ZSgpO1xuXHRcdFx0XHR9XG5cdFx0XHR9KVxuXHRcdCk7XG5cdH1cblxuXHRfaXNJbml0aWFsU3RhdGVzQXBwbGljYWJsZShcblx0XHRpbml0aWFsU3RhdGU6IG9iamVjdCB8IHVuZGVmaW5lZCxcblx0XHRjb250cm9sOiBGaWx0ZXJCYXIgfCBNRENUYWJsZSxcblx0XHRza2lwTWVyZ2U6IGJvb2xlYW4gfCB1bmRlZmluZWQsXG5cdFx0aXNOYXZIeWJyaWQ/OiBib29sZWFuXG5cdCk6IGJvb2xlYW4ge1xuXHRcdHJldHVybiAoXG5cdFx0XHQhIWluaXRpYWxTdGF0ZSAmJlxuXHRcdFx0IXRoaXMuaW52YWxpZGF0ZUluaXRpYWxTdGF0ZUZvckFwcGx5LmluY2x1ZGVzKGNvbnRyb2wuZ2V0SWQoKSkgJiZcblx0XHRcdCF0aGlzLmNvbnRyb2xzVmFyaWFudElkVW5hdmFpbGFibGUuaW5jbHVkZXMoY29udHJvbC5nZXRJZCgpKSAmJlxuXHRcdFx0KGlzTmF2SHlicmlkID8/IHRydWUpICYmXG5cdFx0XHRza2lwTWVyZ2UgIT09IHRydWVcblx0XHQpO1xuXHR9XG59XG5cbmV4cG9ydCBkZWZhdWx0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RUFBQUMsTUFBQSxHQUFBMEcsTUFBQSxDQUFBNkYsd0JBQUEsQ0FBQTNLLE9BQUEsQ0FBQWtDLFNBQUEseUJBQUFsQyxPQUFBLENBQUFrQyxTQUFBLEdBQUF3SSx5QkFBQSxDQUFBMUssT0FBQSxDQUFBa0MsU0FBQSxrQkFBQTdELE1BQUEsRUFBQUMsTUFBQSxHQUFBd0csTUFBQSxDQUFBNkYsd0JBQUEsQ0FBQTNLLE9BQUEsQ0FBQWtDLFNBQUEsa0JBQUFsQyxPQUFBLENBQUFrQyxTQUFBLEdBQUF3SSx5QkFBQSxDQUFBMUssT0FBQSxDQUFBa0MsU0FBQSx3QkFBQTNELE1BQUEsRUFBQUMsTUFBQSxHQUFBc0csTUFBQSxDQUFBNkYsd0JBQUEsQ0FBQTNLLE9BQUEsQ0FBQWtDLFNBQUEsd0JBQUFsQyxPQUFBLENBQUFrQyxTQUFBLEdBQUF3SSx5QkFBQSxDQUFBMUssT0FBQSxDQUFBa0MsU0FBQSwrQkFBQXpELE1BQUEsRUFBQUMsTUFBQSxHQUFBb0csTUFBQSxDQUFBNkYsd0JBQUEsQ0FBQTNLLE9BQUEsQ0FBQWtDLFNBQUEsK0JBQUFsQyxPQUFBLENBQUFrQyxTQUFBLEdBQUF3SSx5QkFBQSxDQUFBMUssT0FBQSxDQUFBa0MsU0FBQSwyQkFBQXZELE1BQUEsRUFBQUMsTUFBQSxHQUFBa0csTUFBQSxDQUFBNkYsd0JBQUEsQ0FBQTNLLE9BQUEsQ0FBQWtDLFNBQUEsMkJBQUFsQyxPQUFBLENBQUFrQyxTQUFBLEdBQUF3SSx5QkFBQSxDQUFBMUssT0FBQSxDQUFBa0MsU0FBQSw0QkFBQXJELE1BQUEsRUFBQUMsTUFBQSxHQUFBZ0csTUFBQSxDQUFBNkYsd0JBQUEsQ0FBQTNLLE9BQUEsQ0FBQWtDLFNBQUEsNEJBQUFsQyxPQUFBLENBQUFrQyxTQUFBLEdBQUF3SSx5QkFBQSxDQUFBMUssT0FBQSxDQUFBa0MsU0FBQSxxQkFBQWxELE1BQUEsRUFBQUMsTUFBQSxHQUFBNkYsTUFBQSxDQUFBNkYsd0JBQUEsQ0FBQTNLLE9BQUEsQ0FBQWtDLFNBQUEscUJBQUFsQyxPQUFBLENBQUFrQyxTQUFBLEdBQUF3SSx5QkFBQSxDQUFBMUssT0FBQSxDQUFBa0MsU0FBQSxtQ0FBQWhELE1BQUEsR0FBQTRGLE1BQUEsQ0FBQTZGLHdCQUFBLENBQUEzSyxPQUFBLENBQUFrQyxTQUFBLG1DQUFBbEMsT0FBQSxDQUFBa0MsU0FBQSxHQUFBd0kseUJBQUEsQ0FBQTFLLE9BQUEsQ0FBQWtDLFNBQUEsMkJBQUEvQyxNQUFBLEVBQUFDLE1BQUEsR0FBQTBGLE1BQUEsQ0FBQTZGLHdCQUFBLENBQUEzSyxPQUFBLENBQUFrQyxTQUFBLDJCQUFBbEMsT0FBQSxDQUFBa0MsU0FBQSxHQUFBd0kseUJBQUEsQ0FBQTFLLE9BQUEsQ0FBQWtDLFNBQUEsMEJBQUE3QyxNQUFBLEVBQUFDLE1BQUEsR0FBQXdGLE1BQUEsQ0FBQTZGLHdCQUFBLENBQUEzSyxPQUFBLENBQUFrQyxTQUFBLDBCQUFBbEMsT0FBQSxDQUFBa0MsU0FBQSxHQUFBd0kseUJBQUEsQ0FBQTFLLE9BQUEsQ0FBQWtDLFNBQUEsNEJBQUEzQyxNQUFBLEVBQUFDLE1BQUEsR0FBQXNGLE1BQUEsQ0FBQTZGLHdCQUFBLENBQUEzSyxPQUFBLENBQUFrQyxTQUFBLDRCQUFBbEMsT0FBQSxDQUFBa0MsU0FBQSxHQUFBd0kseUJBQUEsQ0FBQTFLLE9BQUEsQ0FBQWtDLFNBQUEsNENBQUF6QyxNQUFBLEdBQUFxRixNQUFBLENBQUE2Rix3QkFBQSxDQUFBM0ssT0FBQSxDQUFBa0MsU0FBQSw0Q0FBQWxDLE9BQUEsQ0FBQWtDLFNBQUEsR0FBQXdJLHlCQUFBLENBQUExSyxPQUFBLENBQUFrQyxTQUFBLGdDQUFBeEMsTUFBQSxFQUFBQyxNQUFBLEdBQUFtRixNQUFBLENBQUE2Rix3QkFBQSxDQUFBM0ssT0FBQSxDQUFBa0MsU0FBQSxnQ0FBQWxDLE9BQUEsQ0FBQWtDLFNBQUEsR0FBQXdJLHlCQUFBLENBQUExSyxPQUFBLENBQUFrQyxTQUFBLHdCQUFBdEMsTUFBQSxFQUFBQyxNQUFBLEdBQUFpRixNQUFBLENBQUE2Rix3QkFBQSxDQUFBM0ssT0FBQSxDQUFBa0MsU0FBQSx3QkFBQWxDLE9BQUEsQ0FBQWtDLFNBQUEsR0FBQXdJLHlCQUFBLENBQUExSyxPQUFBLENBQUFrQyxTQUFBLDhCQUFBcEMsTUFBQSxHQUFBZ0YsTUFBQSxDQUFBNkYsd0JBQUEsQ0FBQTNLLE9BQUEsQ0FBQWtDLFNBQUEsOEJBQUFsQyxPQUFBLENBQUFrQyxTQUFBLEdBQUFsQyxPQUFBLE1BQUFELE1BQUE7RUFBQSxPQTh6QjVCekQsU0FBUztBQUFBIiwiaWdub3JlTGlzdCI6W119