@sapui5/sap.fe.core 1.100.0 → 1.101.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 (250) hide show
  1. package/package.json +4 -4
  2. package/src/sap/fe/core/.library +2 -3
  3. package/src/sap/fe/core/AnnotationHelper.js +43 -24
  4. package/src/sap/fe/core/AnnotationHelper.ts +43 -37
  5. package/src/sap/fe/core/AppComponent.js +20 -27
  6. package/src/sap/fe/core/AppComponent.ts +19 -25
  7. package/src/sap/fe/core/AppStateHandler.js +5 -5
  8. package/src/sap/fe/core/AppStateHandler.ts +2 -2
  9. package/src/sap/fe/core/BaseController.js +9 -9
  10. package/src/sap/fe/core/BaseController.ts +3 -4
  11. package/src/sap/fe/core/CommonUtils.js +74 -17
  12. package/src/sap/fe/core/CommonUtils.ts +181 -110
  13. package/src/sap/fe/core/ExtensionAPI.js +11 -10
  14. package/src/sap/fe/core/ExtensionAPI.ts +22 -30
  15. package/src/sap/fe/core/PageController.js +12 -11
  16. package/src/sap/fe/core/PageController.ts +34 -34
  17. package/src/sap/fe/core/RouterProxy.js +36 -24
  18. package/src/sap/fe/core/RouterProxy.ts +36 -22
  19. package/src/sap/fe/core/TemplateComponent.js +193 -118
  20. package/src/sap/fe/core/TemplateComponent.ts +105 -117
  21. package/src/sap/fe/core/TemplateModel.js +6 -8
  22. package/src/sap/fe/core/TemplateModel.ts +2 -2
  23. package/src/sap/fe/core/TransactionHelper.js +33 -18
  24. package/src/sap/fe/core/TransactionHelper.ts +172 -153
  25. package/src/sap/fe/core/actions/collaboration/ActivitySync.js +31 -17
  26. package/src/sap/fe/core/actions/collaboration/ActivitySync.ts +52 -45
  27. package/src/sap/fe/core/actions/collaboration/CollaborationCommon.js +16 -6
  28. package/src/sap/fe/core/actions/collaboration/CollaborationCommon.ts +13 -3
  29. package/src/sap/fe/core/actions/collaboration/Manage.js +9 -7
  30. package/src/sap/fe/core/actions/collaboration/Manage.ts +33 -31
  31. package/src/sap/fe/core/actions/collaboration/ManageDialog.fragment.xml +53 -56
  32. package/src/sap/fe/core/actions/draft.js +308 -166
  33. package/src/sap/fe/core/actions/draft.ts +177 -74
  34. package/src/sap/fe/core/actions/messageHandling.js +25 -13
  35. package/src/sap/fe/core/actions/messageHandling.ts +49 -39
  36. package/src/sap/fe/core/actions/operations.js +4 -4
  37. package/src/sap/fe/core/actions/operations.ts +3 -2
  38. package/src/sap/fe/core/buildingBlocks/AttributeModel.js +60 -0
  39. package/src/sap/fe/core/buildingBlocks/AttributeModel.ts +37 -0
  40. package/src/sap/fe/core/buildingBlocks/BuildingBlock.js +165 -0
  41. package/src/sap/fe/core/buildingBlocks/BuildingBlock.ts +178 -0
  42. package/src/sap/fe/core/buildingBlocks/BuildingBlockRuntime.js +707 -0
  43. package/src/sap/fe/core/buildingBlocks/BuildingBlockRuntime.ts +628 -0
  44. package/src/sap/fe/core/buildingBlocks/TraceInfo.js +436 -0
  45. package/src/sap/fe/core/buildingBlocks/TraceInfo.ts +431 -0
  46. package/src/sap/fe/core/controllerextensions/EditFlow.js +506 -245
  47. package/src/sap/fe/core/controllerextensions/EditFlow.ts +395 -275
  48. package/src/sap/fe/core/controllerextensions/IntentBasedNavigation.js +11 -11
  49. package/src/sap/fe/core/controllerextensions/IntentBasedNavigation.ts +6 -7
  50. package/src/sap/fe/core/controllerextensions/InternalEditFlow.js +15 -17
  51. package/src/sap/fe/core/controllerextensions/InternalEditFlow.ts +98 -96
  52. package/src/sap/fe/core/controllerextensions/InternalIntentBasedNavigation.js +15 -15
  53. package/src/sap/fe/core/controllerextensions/InternalIntentBasedNavigation.ts +60 -53
  54. package/src/sap/fe/core/controllerextensions/InternalRouting.js +94 -42
  55. package/src/sap/fe/core/controllerextensions/InternalRouting.ts +114 -91
  56. package/src/sap/fe/core/controllerextensions/KPIManagement.js +14 -14
  57. package/src/sap/fe/core/controllerextensions/KPIManagement.ts +12 -11
  58. package/src/sap/fe/core/controllerextensions/MassEdit.js +12 -12
  59. package/src/sap/fe/core/controllerextensions/MassEdit.ts +8 -9
  60. package/src/sap/fe/core/controllerextensions/MessageHandler.js +13 -25
  61. package/src/sap/fe/core/controllerextensions/MessageHandler.ts +18 -28
  62. package/src/sap/fe/core/controllerextensions/PageReady.js +25 -23
  63. package/src/sap/fe/core/controllerextensions/PageReady.ts +49 -47
  64. package/src/sap/fe/core/controllerextensions/Paginator.js +13 -13
  65. package/src/sap/fe/core/controllerextensions/Paginator.ts +24 -18
  66. package/src/sap/fe/core/controllerextensions/Placeholder.js +10 -10
  67. package/src/sap/fe/core/controllerextensions/Placeholder.ts +12 -14
  68. package/src/sap/fe/core/controllerextensions/Routing.js +11 -11
  69. package/src/sap/fe/core/controllerextensions/Routing.ts +12 -13
  70. package/src/sap/fe/core/controllerextensions/Share.js +16 -16
  71. package/src/sap/fe/core/controllerextensions/Share.ts +32 -32
  72. package/src/sap/fe/core/controllerextensions/SideEffects.js +14 -14
  73. package/src/sap/fe/core/controllerextensions/SideEffects.ts +62 -63
  74. package/src/sap/fe/core/controllerextensions/ViewState.js +17 -31
  75. package/src/sap/fe/core/controllerextensions/ViewState.ts +93 -102
  76. package/src/sap/fe/core/controls/Any.js +28 -0
  77. package/src/sap/fe/core/controls/Any.ts +30 -0
  78. package/src/sap/fe/core/controls/CommandExecution.js +38 -15
  79. package/src/sap/fe/core/controls/CommandExecution.ts +20 -20
  80. package/src/sap/fe/core/controls/ConditionalWrapper.js +136 -65
  81. package/src/sap/fe/core/controls/ConditionalWrapper.ts +49 -58
  82. package/src/sap/fe/core/controls/CustomFilterFieldContentWrapper.js +366 -0
  83. package/src/sap/fe/core/controls/CustomFilterFieldContentWrapper.ts +278 -0
  84. package/src/sap/fe/core/controls/CustomQuickViewPage.js +73 -36
  85. package/src/sap/fe/core/controls/CustomQuickViewPage.ts +22 -32
  86. package/src/sap/fe/core/controls/DataLossOrDraftDiscard/DataLossDraft.fragment.xml +44 -5
  87. package/src/sap/fe/core/controls/DataLossOrDraftDiscard/DataLossOrDraftDiscardHandler.js +116 -66
  88. package/src/sap/fe/core/controls/DataLossOrDraftDiscard/DataLossOrDraftDiscardHandler.ts +121 -67
  89. package/src/sap/fe/core/controls/FieldWrapper.js +171 -87
  90. package/src/sap/fe/core/controls/FieldWrapper.ts +69 -80
  91. package/src/sap/fe/core/controls/FileWrapper.js +313 -0
  92. package/src/sap/fe/core/controls/FileWrapper.ts +169 -0
  93. package/src/sap/fe/core/controls/FilterBar.js +154 -119
  94. package/src/sap/fe/core/controls/FilterBar.ts +128 -123
  95. package/src/sap/fe/core/controls/FormElementWrapper.js +92 -37
  96. package/src/sap/fe/core/controls/FormElementWrapper.ts +32 -35
  97. package/src/sap/fe/core/controls/filterbar/FilterContainer.js +111 -89
  98. package/src/sap/fe/core/controls/filterbar/FilterContainer.ts +86 -82
  99. package/src/sap/fe/core/controls/filterbar/VisualFilter.js +242 -193
  100. package/src/sap/fe/core/controls/filterbar/VisualFilter.ts +211 -204
  101. package/src/sap/fe/core/controls/filterbar/VisualFilterContainer.js +152 -116
  102. package/src/sap/fe/core/controls/filterbar/VisualFilterContainer.ts +105 -105
  103. package/src/sap/fe/core/controls/filterbar/utils/VisualFilterUtils.js +1 -1
  104. package/src/sap/fe/core/controls/filterbar/utils/VisualFilterUtils.ts +2 -2
  105. package/src/sap/fe/core/controls/massEdit/MassEditDialog.fragment.xml +37 -42
  106. package/src/sap/fe/core/controls/massEdit/MassEditHandlers.js +7 -6
  107. package/src/sap/fe/core/controls/massEdit/MassEditHandlers.ts +15 -14
  108. package/src/sap/fe/core/converters/ManifestSettings.js +2 -1
  109. package/src/sap/fe/core/converters/ManifestSettings.ts +5 -1
  110. package/src/sap/fe/core/converters/annotations/DataField.js +1 -2
  111. package/src/sap/fe/core/converters/annotations/DataField.ts +3 -4
  112. package/src/sap/fe/core/converters/controls/Common/Action.js +10 -10
  113. package/src/sap/fe/core/converters/controls/Common/Action.ts +20 -19
  114. package/src/sap/fe/core/converters/controls/Common/Chart.js +8 -8
  115. package/src/sap/fe/core/converters/controls/Common/Chart.ts +12 -11
  116. package/src/sap/fe/core/converters/controls/Common/Form.js +5 -5
  117. package/src/sap/fe/core/converters/controls/Common/Form.ts +3 -1
  118. package/src/sap/fe/core/converters/controls/Common/KPI.js +1 -1
  119. package/src/sap/fe/core/converters/controls/Common/KPI.ts +2 -3
  120. package/src/sap/fe/core/converters/controls/Common/Table.js +245 -112
  121. package/src/sap/fe/core/converters/controls/Common/Table.ts +305 -193
  122. package/src/sap/fe/core/converters/controls/Common/table/StandardActions.js +5 -5
  123. package/src/sap/fe/core/converters/controls/Common/table/StandardActions.ts +4 -7
  124. package/src/sap/fe/core/converters/controls/ListReport/FilterBar.js +72 -43
  125. package/src/sap/fe/core/converters/controls/ListReport/FilterBar.ts +134 -100
  126. package/src/sap/fe/core/converters/controls/ObjectPage/HeaderFacet.js +6 -6
  127. package/src/sap/fe/core/converters/controls/ObjectPage/HeaderFacet.ts +20 -18
  128. package/src/sap/fe/core/converters/controls/ObjectPage/SubSection.js +5 -2
  129. package/src/sap/fe/core/converters/controls/ObjectPage/SubSection.ts +4 -1
  130. package/src/sap/fe/core/converters/objectPage/FormMenuActions.js +1 -1
  131. package/src/sap/fe/core/converters/objectPage/FormMenuActions.ts +0 -4
  132. package/src/sap/fe/core/converters/objectPage/HeaderAndFooterAction.js +27 -24
  133. package/src/sap/fe/core/converters/objectPage/HeaderAndFooterAction.ts +49 -40
  134. package/src/sap/fe/core/converters/templates/ListReportConverter.js +33 -22
  135. package/src/sap/fe/core/converters/templates/ListReportConverter.ts +77 -62
  136. package/src/sap/fe/core/converters/templates/ObjectPageConverter.js +5 -5
  137. package/src/sap/fe/core/converters/templates/ObjectPageConverter.ts +3 -7
  138. package/src/sap/fe/core/formatters/KPIFormatter.js +3 -12
  139. package/src/sap/fe/core/formatters/KPIFormatter.ts +3 -2
  140. package/src/sap/fe/core/formatters/TableFormatter.js +2 -2
  141. package/src/sap/fe/core/formatters/TableFormatter.ts +1 -1
  142. package/src/sap/fe/core/formatters/ValueFormatter.js +4 -4
  143. package/src/sap/fe/core/formatters/ValueFormatter.ts +4 -7
  144. package/src/sap/fe/core/fpm/Component.js +46 -17
  145. package/src/sap/fe/core/fpm/Component.ts +11 -16
  146. package/src/sap/fe/core/helpers/AppStartupHelper.js +4 -4
  147. package/src/sap/fe/core/helpers/AppStartupHelper.ts +3 -3
  148. package/src/sap/fe/core/helpers/ClassSupport.js +273 -256
  149. package/src/sap/fe/core/helpers/ClassSupport.ts +314 -237
  150. package/src/sap/fe/core/helpers/MassEditHelper.js +173 -39
  151. package/src/sap/fe/core/helpers/MassEditHelper.ts +236 -132
  152. package/src/sap/fe/core/helpers/ModelHelper.js +29 -1
  153. package/src/sap/fe/core/helpers/ModelHelper.ts +23 -0
  154. package/src/sap/fe/core/helpers/PasteHelper.js +4 -4
  155. package/src/sap/fe/core/helpers/PasteHelper.ts +4 -3
  156. package/src/sap/fe/core/helpers/SemanticDateOperators.js +3 -3
  157. package/src/sap/fe/core/helpers/SemanticDateOperators.ts +3 -1
  158. package/src/sap/fe/core/helpers/SemanticKeyHelper.js +1 -1
  159. package/src/sap/fe/core/helpers/SemanticKeyHelper.ts +1 -1
  160. package/src/sap/fe/core/helpers/StableIdHelper.js +1 -7
  161. package/src/sap/fe/core/helpers/StableIdHelper.ts +0 -4
  162. package/src/sap/fe/core/jsx-runtime/jsx.js +35 -5
  163. package/src/sap/fe/core/jsx-runtime/jsx.ts +22 -8
  164. package/src/sap/fe/core/library.js +4 -5
  165. package/src/sap/fe/core/library.ts +17 -17
  166. package/src/sap/fe/core/manifestMerger/ChangePageConfiguration.js +1 -1
  167. package/src/sap/fe/core/manifestMerger/ChangePageConfiguration.ts +0 -3
  168. package/src/sap/fe/core/messagebundle.properties +23 -8
  169. package/src/sap/fe/core/messagebundle_ar.properties +2 -0
  170. package/src/sap/fe/core/messagebundle_bg.properties +2 -0
  171. package/src/sap/fe/core/messagebundle_ca.properties +2 -0
  172. package/src/sap/fe/core/messagebundle_cs.properties +2 -0
  173. package/src/sap/fe/core/messagebundle_cy.properties +5 -3
  174. package/src/sap/fe/core/messagebundle_da.properties +2 -0
  175. package/src/sap/fe/core/messagebundle_de.properties +2 -0
  176. package/src/sap/fe/core/messagebundle_el.properties +2 -0
  177. package/src/sap/fe/core/messagebundle_en.properties +2 -0
  178. package/src/sap/fe/core/messagebundle_en_GB.properties +2 -0
  179. package/src/sap/fe/core/messagebundle_en_US_sappsd.properties +2 -0
  180. package/src/sap/fe/core/messagebundle_en_US_saprigi.properties +2 -0
  181. package/src/sap/fe/core/messagebundle_en_US_saptrc.properties +2 -0
  182. package/src/sap/fe/core/messagebundle_es.properties +2 -0
  183. package/src/sap/fe/core/messagebundle_es_MX.properties +2 -0
  184. package/src/sap/fe/core/messagebundle_et.properties +2 -0
  185. package/src/sap/fe/core/messagebundle_fi.properties +2 -0
  186. package/src/sap/fe/core/messagebundle_fr.properties +4 -2
  187. package/src/sap/fe/core/messagebundle_fr_CA.properties +5 -3
  188. package/src/sap/fe/core/messagebundle_hi.properties +2 -0
  189. package/src/sap/fe/core/messagebundle_hr.properties +5 -3
  190. package/src/sap/fe/core/messagebundle_hu.properties +2 -0
  191. package/src/sap/fe/core/messagebundle_id.properties +2 -0
  192. package/src/sap/fe/core/messagebundle_it.properties +2 -0
  193. package/src/sap/fe/core/messagebundle_iw.properties +2 -0
  194. package/src/sap/fe/core/messagebundle_ja.properties +2 -0
  195. package/src/sap/fe/core/messagebundle_kk.properties +2 -0
  196. package/src/sap/fe/core/messagebundle_ko.properties +2 -0
  197. package/src/sap/fe/core/messagebundle_lt.properties +2 -0
  198. package/src/sap/fe/core/messagebundle_lv.properties +5 -3
  199. package/src/sap/fe/core/messagebundle_ms.properties +2 -0
  200. package/src/sap/fe/core/messagebundle_nl.properties +2 -0
  201. package/src/sap/fe/core/messagebundle_no.properties +2 -0
  202. package/src/sap/fe/core/messagebundle_pl.properties +5 -3
  203. package/src/sap/fe/core/messagebundle_pt.properties +2 -0
  204. package/src/sap/fe/core/messagebundle_pt_PT.properties +2 -0
  205. package/src/sap/fe/core/messagebundle_ro.properties +5 -3
  206. package/src/sap/fe/core/messagebundle_ru.properties +5 -3
  207. package/src/sap/fe/core/messagebundle_sh.properties +2 -0
  208. package/src/sap/fe/core/messagebundle_sk.properties +2 -0
  209. package/src/sap/fe/core/messagebundle_sl.properties +2 -0
  210. package/src/sap/fe/core/messagebundle_sv.properties +3 -1
  211. package/src/sap/fe/core/messagebundle_th.properties +2 -0
  212. package/src/sap/fe/core/messagebundle_tr.properties +2 -0
  213. package/src/sap/fe/core/messagebundle_uk.properties +2 -0
  214. package/src/sap/fe/core/messagebundle_vi.properties +2 -0
  215. package/src/sap/fe/core/messagebundle_zh_CN.properties +5 -3
  216. package/src/sap/fe/core/messagebundle_zh_TW.properties +5 -3
  217. package/src/sap/fe/core/services/AsyncComponentServiceFactory.js +4 -4
  218. package/src/sap/fe/core/services/AsyncComponentServiceFactory.ts +1 -1
  219. package/src/sap/fe/core/services/CacheHandlerServiceFactory.js +5 -5
  220. package/src/sap/fe/core/services/CacheHandlerServiceFactory.ts +1 -2
  221. package/src/sap/fe/core/services/EnvironmentServiceFactory.js +7 -7
  222. package/src/sap/fe/core/services/EnvironmentServiceFactory.ts +6 -5
  223. package/src/sap/fe/core/services/NavigationServiceFactory.js +4 -4
  224. package/src/sap/fe/core/services/NavigationServiceFactory.ts +1 -1
  225. package/src/sap/fe/core/services/ResourceModelServiceFactory.js +4 -4
  226. package/src/sap/fe/core/services/ResourceModelServiceFactory.ts +1 -1
  227. package/src/sap/fe/core/services/RoutingServiceFactory.js +98 -62
  228. package/src/sap/fe/core/services/RoutingServiceFactory.ts +51 -42
  229. package/src/sap/fe/core/services/ShellServicesFactory.js +69 -29
  230. package/src/sap/fe/core/services/ShellServicesFactory.ts +26 -29
  231. package/src/sap/fe/core/services/SideEffectsServiceFactory.js +4 -4
  232. package/src/sap/fe/core/services/SideEffectsServiceFactory.ts +1 -1
  233. package/src/sap/fe/core/services/TemplatedViewServiceFactory.js +8 -8
  234. package/src/sap/fe/core/services/TemplatedViewServiceFactory.ts +6 -17
  235. package/src/sap/fe/core/services/view/TemplatingErrorPage.controller.js +43 -5
  236. package/src/sap/fe/core/services/view/TemplatingErrorPage.controller.ts +6 -3
  237. package/src/sap/fe/core/support/CommonHelper.js +1 -1
  238. package/src/sap/fe/core/support/CommonHelper.ts +0 -3
  239. package/src/sap/fe/core/templating/DataModelPathHelper.js +2 -9
  240. package/src/sap/fe/core/templating/DataModelPathHelper.ts +32 -38
  241. package/src/sap/fe/core/templating/DisplayModeFormatter.js +23 -3
  242. package/src/sap/fe/core/templating/DisplayModeFormatter.ts +26 -5
  243. package/src/sap/fe/core/templating/PropertyHelper.js +15 -1
  244. package/src/sap/fe/core/templating/PropertyHelper.ts +30 -23
  245. package/src/sap/fe/core/templating/UIFormatters.js +121 -21
  246. package/src/sap/fe/core/templating/UIFormatters.ts +134 -49
  247. package/src/sap/fe/core/type/Email.js +26 -8
  248. package/src/sap/fe/core/type/Email.ts +8 -7
  249. package/src/sap/fe/core/controllerextensions/ControllerExtensionMetadata.js +0 -78
  250. package/src/sap/fe/core/controllerextensions/ControllerExtensionMetadata.ts +0 -65
@@ -2,21 +2,22 @@
2
2
  * SAP UI development toolkit for HTML5 (SAPUI5)
3
3
  * (c) Copyright 2009-2021 SAP SE. All rights reserved
4
4
  */
5
- sap.ui.define(["sap/ui/core/mvc/View", "sap/ui/core/Component", "sap/m/MessageBox", "sap/base/Log", "sap/fe/core/library", "sap/fe/core/helpers/ModelHelper", "sap/fe/core/helpers/SemanticDateOperators", "sap/base/util/merge", "sap/ui/core/XMLTemplateProcessor", "sap/ui/core/util/XMLPreprocessor", "sap/ui/core/Fragment", "sap/fe/core/helpers/BindingExpression", "./templating/FilterHelper", "sap/ui/model/json/JSONModel", "sap/fe/core/helpers/StableIdHelper", "sap/ui/mdc/condition/FilterOperatorUtil", "sap/ui/mdc/odata/v4/TypeUtil", "sap/fe/core/converters/helpers/IssueManager", "sap/fe/core/actions/collaboration/ActivitySync", "./controls/DataLossOrDraftDiscard/DataLossOrDraftDiscardHandler", "sap/m/Button", "sap/m/Dialog", "sap/m/Bar", "sap/m/Title", "./actions/messageHandling"], function (View, Component, MessageBox, Log, library, ModelHelper, SemanticDateOperators, mergeObjects, XMLTemplateProcessor, XMLPreprocessor, Fragment, BindingExpression, FilterHelper, JSONModel, StableIdHelper, FilterOperatorUtil, TypeUtil, IssueManager, ActivitySync, DataLossOrDraftDiscardHandler, Button, Dialog, Bar, Title, messageHandling) {
5
+ sap.ui.define(["sap/base/Log", "sap/base/util/merge", "sap/fe/core/actions/collaboration/ActivitySync", "sap/fe/core/converters/helpers/IssueManager", "sap/fe/core/helpers/BindingExpression", "sap/fe/core/helpers/ModelHelper", "sap/fe/core/helpers/SemanticDateOperators", "sap/fe/core/helpers/StableIdHelper", "sap/fe/core/library", "sap/m/Bar", "sap/m/Button", "sap/m/Dialog", "sap/m/MessageBox", "sap/m/Title", "sap/ui/core/Component", "sap/ui/core/Core", "sap/ui/core/Fragment", "sap/ui/core/mvc/View", "sap/ui/core/util/XMLPreprocessor", "sap/ui/core/XMLTemplateProcessor", "sap/ui/Device", "sap/ui/mdc/condition/FilterOperatorUtil", "sap/ui/mdc/odata/v4/TypeUtil", "sap/ui/model/json/JSONModel", "./actions/messageHandling", "./controls/DataLossOrDraftDiscard/DataLossOrDraftDiscardHandler", "./templating/FilterHelper"], function (Log, mergeObjects, ActivitySync, IssueManager, BindingExpression, ModelHelper, SemanticDateOperators, StableIdHelper, library, Bar, Button, Dialog, MessageBox, Title, Component, Core, Fragment, View, XMLPreprocessor, XMLTemplateProcessor, Device, FilterOperatorUtil, TypeUtil, JSONModel, messageHandling, DataLossOrDraftDiscardHandler, FilterHelper) {
6
6
  "use strict";
7
7
 
8
+ var getConditions = FilterHelper.getConditions;
8
9
  var performAfterDiscardorKeepDraft = DataLossOrDraftDiscardHandler.performAfterDiscardorKeepDraft;
9
- var disconnect = ActivitySync.disconnect;
10
- var isConnected = ActivitySync.isConnected;
11
- var IssueCategoryType = IssueManager.IssueCategoryType;
12
- var IssueSeverity = IssueManager.IssueSeverity;
13
- var IssueCategory = IssueManager.IssueCategory;
10
+ var system = Device.system;
14
11
  var generate = StableIdHelper.generate;
15
- var getConditions = FilterHelper.getConditions;
16
12
  var transformRecursively = BindingExpression.transformRecursively;
17
13
  var constant = BindingExpression.constant;
18
14
  var compileBinding = BindingExpression.compileBinding;
19
15
  var bindingExpression = BindingExpression.bindingExpression;
16
+ var IssueSeverity = IssueManager.IssueSeverity;
17
+ var IssueCategoryType = IssueManager.IssueCategoryType;
18
+ var IssueCategory = IssueManager.IssueCategory;
19
+ var isConnected = ActivitySync.isConnected;
20
+ var disconnect = ActivitySync.disconnect;
20
21
 
21
22
  var ProgrammingModel = library.ProgrammingModel;
22
23
  var aValidTypes = ["Edm.Boolean", "Edm.Byte", "Edm.Date", "Edm.DateTime", "Edm.DateTimeOffset", "Edm.Decimal", "Edm.Double", "Edm.Float", "Edm.Guid", "Edm.Int16", "Edm.Int32", "Edm.Int64", "Edm.SByte", "Edm.Single", "Edm.String", "Edm.Time", "Edm.TimeOfDay"];
@@ -536,7 +537,7 @@ sap.ui.define(["sap/ui/core/mvc/View", "sap/ui/core/Component", "sap/m/MessageBo
536
537
 
537
538
  function fnProcessDataLossConfirmation(fnProcess, oControl, programmingModel) {
538
539
  var bUIEditable = oControl.getModel("ui").getProperty("/isEditable"),
539
- oResourceBundle = sap.ui.getCore().getLibraryResourceBundle("sap.fe.templates"),
540
+ oResourceBundle = Core.getLibraryResourceBundle("sap.fe.templates"),
540
541
  sWarningMsg = oResourceBundle && oResourceBundle.getText("T_COMMON_UTILS_NAVIGATION_AWAY_MSG"),
541
542
  sConfirmButtonTxt = oResourceBundle && oResourceBundle.getText("T_COMMON_UTILS_NAVIGATION_AWAY_CONFIRM_BUTTON"),
542
543
  sCancelButtonTxt = oResourceBundle && oResourceBundle.getText("T_COMMON_UTILS_NAVIGATION_AWAY_CANCEL_BUTTON");
@@ -741,7 +742,7 @@ sap.ui.define(["sap/ui/core/mvc/View", "sap/ui/core/Component", "sap/m/MessageBo
741
742
  } // do not allow override so get text from the internal bundle directly
742
743
 
743
744
 
744
- oResourceBundle = sap.ui.getCore().getLibraryResourceBundle("sap.fe.core");
745
+ oResourceBundle = Core.getLibraryResourceBundle("sap.fe.core");
745
746
  return oResourceBundle.getText(sResourceKey, oParams);
746
747
  }
747
748
 
@@ -967,10 +968,30 @@ sap.ui.define(["sap/ui/core/mvc/View", "sap/ui/core/Component", "sap/m/MessageBo
967
968
  return Promise.all(aPromises);
968
969
  }
969
970
 
970
- function _getDefaultOperators(oRealProperty) {
971
+ function setObjectMappings(sSemanticObject, oParams, aSemanticObjectMappings) {
972
+ aSemanticObjectMappings.forEach(function (oItem) {
973
+ if (sSemanticObject === oItem.semanticObject) {
974
+ var oMappings = oItem.items;
975
+
976
+ for (var i = 0; i < oMappings.length; i++) {
977
+ var sLocalProperty = oMappings[i].key;
978
+ var sSemanticObjectProperty = oMappings[i].value;
979
+
980
+ if (oParams[sLocalProperty]) {
981
+ oParams[sSemanticObjectProperty] = oParams[sLocalProperty];
982
+ }
983
+ }
984
+ }
985
+ });
986
+ return oParams;
987
+ }
988
+
989
+ function _getDefaultOperators(sPropertyType) {
971
990
  // mdc defines the full set of operations that are meaningful for each Edm Type
972
- var oDataClass = TypeUtil.getDataTypeClassName(oRealProperty);
973
- var oBaseType = TypeUtil.getBaseType(oDataClass);
991
+ // TODO Replace with model / internal way of retrieving the actual model type used for the property
992
+ var oDataClass = TypeUtil.getDataTypeClassName(sPropertyType); // TODO need to pass proper formatOptions, constraints here
993
+
994
+ var oBaseType = TypeUtil.getBaseType(oDataClass, {}, {});
974
995
  return FilterOperatorUtil.getOperatorsForType(oBaseType);
975
996
  }
976
997
 
@@ -995,7 +1016,9 @@ sap.ui.define(["sap/ui/core/mvc/View", "sap/ui/core/Component", "sap/m/MessageBo
995
1016
  var oFilterRestrictions = CommonUtils.getFilterRestrictionsByPath(sEntitySetPath, oContext);
996
1017
  var aEqualsOps = ["EQ"];
997
1018
  var aSingleRangeOps = ["EQ", "GE", "LE", "LT", "GT", "BT", "NOTLE", "NOTLT", "NOTGE", "NOTGT"];
1019
+ var aSingleRangeDTBasicOps = ["EQ", "BT"];
998
1020
  var aSingleValueDateOps = ["TODAY", "TOMORROW", "YESTERDAY", "DATE", "FIRSTDAYWEEK", "LASTDAYWEEK", "FIRSTDAYMONTH", "LASTDAYMONTH", "FIRSTDAYQUARTER", "LASTDAYQUARTER", "FIRSTDAYYEAR", "LASTDAYYEAR"];
1021
+ var aBasicDateTimeOps = ["EQ", "LE", "GE", "BT"];
999
1022
  var aMultiRangeOps = ["EQ", "GE", "LE", "LT", "GT", "BT", "NE", "NOTBT", "NOTLE", "NOTLT", "NOTGE", "NOTGT"];
1000
1023
  var aSearchExpressionOps = ["Contains", "NotContains", "StartsWith", "NotStartsWith", "EndsWith", "NotEndsWith"];
1001
1024
  var aSemanticDateOpsExt = SemanticDateOperators.getSupportedOperations();
@@ -1011,8 +1034,11 @@ sap.ui.define(["sap/ui/core/mvc/View", "sap/ui/core/Component", "sap/m/MessageBo
1011
1034
  aSemanticDateOps = SemanticDateOperators.getFilterOperations(oSettings.operatorConfiguration);
1012
1035
  } else {
1013
1036
  aSemanticDateOps = SemanticDateOperators.getSemanticDateOperations();
1014
- } // Get the default Operators for this Property Type
1037
+ }
1015
1038
 
1039
+ var aSingleRangeDateTimeOps = aSemanticDateOps.filter(function (sOperator) {
1040
+ return sOperator !== "DATE" && sOperator !== "DATERANGE" && sOperator !== "FROM" && sOperator !== "TO";
1041
+ }); // Get the default Operators for this Property Type
1016
1042
 
1017
1043
  var aDefaultOperators = _getDefaultOperators(sType); // Is there a Filter Restriction defined for this property?
1018
1044
 
@@ -1039,7 +1065,9 @@ sap.ui.define(["sap/ui/core/mvc/View", "sap/ui/core/Component", "sap/m/MessageBo
1039
1065
  break;
1040
1066
 
1041
1067
  case "SingleRange":
1042
- var sOperators = _getRestrictions(aDefaultOperators, sType === "Edm.Date" && bSemanticDateRange ? aSemanticDateOps : aSingleRangeOps);
1068
+ var aExpressionOps = bSemanticDateRange ? sType === "Edm.Date" ? aSemanticDateOps : sType === "Edm.DateTimeOffset" ? aSingleRangeDateTimeOps.concat(aBasicDateTimeOps) : aSingleRangeOps : sType === "Edm.DateTimeOffset" ? aSingleRangeDTBasicOps : aSingleRangeOps;
1069
+
1070
+ var sOperators = _getRestrictions(aDefaultOperators, aExpressionOps);
1043
1071
 
1044
1072
  sRestrictions = sOperators ? sOperators : "";
1045
1073
  break;
@@ -2040,7 +2068,7 @@ sap.ui.define(["sap/ui/core/mvc/View", "sap/ui/core/Component", "sap/m/MessageBo
2040
2068
  }
2041
2069
 
2042
2070
  function fnOnStrictHandlingFailed(sGroupId, actionName, oModel, aMessages) {
2043
- var localI18nRef = sap.ui.getCore().getLibraryResourceBundle("sap.fe.core"),
2071
+ var localI18nRef = Core.getLibraryResourceBundle("sap.fe.core"),
2044
2072
  sActionName = actionName,
2045
2073
  sCancelButtonTxt = localI18nRef.getText("CANCEL");
2046
2074
 
@@ -2103,6 +2131,33 @@ sap.ui.define(["sap/ui/core/mvc/View", "sap/ui/core/Component", "sap/m/MessageBo
2103
2131
  });
2104
2132
  }
2105
2133
 
2134
+ function getMessageStripText(view, aIgnoredLabels, oFilterBar, bIsChart, bIsSearchIgnored, sTabTitle, oResourceBundle, fnGetLocalizedText) {
2135
+ var sText = "";
2136
+
2137
+ if (bIsChart) {
2138
+ var oChart = view.getController().getChartControl();
2139
+ var bIsDraftSupported = oChart.data("draftSupported") === "true";
2140
+ var oMacroResourceBundle = Core.getLibraryResourceBundle("sap.fe.macros");
2141
+ bIsSearchIgnored = bIsSearchIgnored && aIgnoredLabels.includes(oMacroResourceBundle.getText("M_FILTERBAR_SEARCH"));
2142
+
2143
+ if (aIgnoredLabels.length === 2 && bIsSearchIgnored && bIsDraftSupported) {
2144
+ sText = oResourceBundle.getText("C_LR_MULTIVIZ_CHART_IGNORED_FILTER_DRAFT_DATA_AND_SEARCH");
2145
+ } else if (aIgnoredLabels.length === 1 && bIsDraftSupported) {
2146
+ sText = oResourceBundle.getText("C_MULTIVIZ_CHART_IGNORED_FILTER_DRAFT_DATA");
2147
+ } else {
2148
+ var sResource = "C_LR_MULTIVIZ_CHART_" + (aIgnoredLabels.length === 1 ? "SINGLE" : "MULTI") + "_IGNORED_FILTER_" + (system.desktop ? "LARGE" : "SMALL");
2149
+ sText = oResourceBundle.getText(sResource, [aIgnoredLabels.join(", ")]);
2150
+ }
2151
+ } else {
2152
+ var _sResource = "C_LR_MULTITABLES_" + (aIgnoredLabels.length === 1 ? "SINGLE" : "MULTI") + "_IGNORED_FILTER_" + (system.desktop ? "LARGE" : "SMALL"),
2153
+ sLocalizedTableTitle = fnGetLocalizedText(sTabTitle, oFilterBar);
2154
+
2155
+ sText = oResourceBundle.getText(_sResource, [aIgnoredLabels.join(", "), sLocalizedTableTitle]);
2156
+ }
2157
+
2158
+ return sText;
2159
+ }
2160
+
2106
2161
  var CommonUtils = {
2107
2162
  isPropertyFilterable: isPropertyFilterable,
2108
2163
  isFieldControlPathInapplicable: isFieldControlPathInapplicable,
@@ -2150,6 +2205,7 @@ sap.ui.define(["sap/ui/core/mvc/View", "sap/ui/core/Component", "sap/m/MessageBo
2150
2205
  requestSingletonProperty: requestSingletonProperty,
2151
2206
  templateControlFragment: templateControlFragment,
2152
2207
  addEventToBindingInfo: addEventToBindingInfo,
2208
+ setObjectMappings: setObjectMappings,
2153
2209
  FilterRestrictions: {
2154
2210
  REQUIRED_PROPERTIES: "RequiredProperties",
2155
2211
  NON_FILTERABLE_PROPERTIES: "NonFilterableProperties",
@@ -2159,8 +2215,9 @@ sap.ui.define(["sap/ui/core/mvc/View", "sap/ui/core/Component", "sap/m/MessageBo
2159
2215
  fnProcessDataLossOrDraftDiscardConfirmation: fnProcessDataLossOrDraftDiscardConfirmation,
2160
2216
  normalizeSearchTerm: normalizeSearchTerm,
2161
2217
  fnOnStrictHandlingFailed: fnOnStrictHandlingFailed,
2162
- getSingletonPath: getSingletonPath
2218
+ getSingletonPath: getSingletonPath,
2219
+ getMessageStripText: getMessageStripText
2163
2220
  };
2164
2221
  return CommonUtils;
2165
2222
  }, false);
2166
- //# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIkNvbW1vblV0aWxzLnRzIl0sIm5hbWVzIjpbIlByb2dyYW1taW5nTW9kZWwiLCJsaWJyYXJ5IiwiYVZhbGlkVHlwZXMiLCJub3JtYWxpemVTZWFyY2hUZXJtIiwic1NlYXJjaFRlcm0iLCJ1bmRlZmluZWQiLCJyZXBsYWNlIiwic3BsaXQiLCJyZWR1Y2UiLCJzTm9ybWFsaXplZCIsInNDdXJyZW50V29yZCIsImdldFByb3BlcnR5RGF0YVR5cGUiLCJvTmF2aWdhdGlvbkNvbnRleHQiLCJzRGF0YVR5cGUiLCJnZXRQcm9wZXJ0eSIsInNBbm5vdGF0aW9uUGF0aCIsImluZGV4T2YiLCJmbkhhc1RyYW5zaWVudENvbnRleHRzIiwib0xpc3RCaW5kaW5nIiwiYkhhc1RyYW5zaWVudENvbnRleHRzIiwiZ2V0Q3VycmVudENvbnRleHRzIiwiZm9yRWFjaCIsIm9Db250ZXh0IiwiaXNUcmFuc2llbnQiLCJnZXRTZWFyY2hSZXN0cmljdGlvbnMiLCJzRnVsbFBhdGgiLCJvTWV0YU1vZGVsIiwiaSIsImFOYXZpZ2F0aW9uUGFydHMiLCJzUGF0aCIsImxlbmd0aCIsIm9OYXZpZ2F0aW9uUmVzdHJpY3Rpb25zIiwiZ2V0TmF2aWdhdGlvblJlc3RyaWN0aW9ucyIsImdldE9iamVjdCIsIm9Nb2RlbCIsInNFbnRpdHlTZXRQYXRoIiwic05hdmlnYXRpb25QYXRoIiwiYVJlc3RyaWN0ZWRQcm9wZXJ0aWVzIiwiUmVzdHJpY3RlZFByb3BlcnRpZXMiLCJmaW5kIiwib1Jlc3RyaWN0ZWRQcm9wZXJ0eSIsIk5hdmlnYXRpb25Qcm9wZXJ0eSIsIiROYXZpZ2F0aW9uUHJvcGVydHlQYXRoIiwiX2lzSW5Ob25GaWx0ZXJhYmxlUHJvcGVydGllcyIsInNDb250ZXh0UGF0aCIsImJJc05vdEZpbHRlcmFibGUiLCJvQW5ub3RhdGlvbiIsIk5vbkZpbHRlcmFibGVQcm9wZXJ0aWVzIiwic29tZSIsInByb3BlcnR5IiwiJFByb3BlcnR5UGF0aCIsIl9pc0NvbnRleHRQYXRoRmlsdGVyYWJsZSIsInNDb250ZXhQYXRoIiwiYUVTUGFydHMiLCJzcGxpY2UiLCJhQ29udGV4dCIsInNDb250ZXh0Iiwiam9pbiIsIml0ZW0iLCJpbmRleCIsImFycmF5Iiwib0ZpbHRlclJlc3RyaWN0aW9ucyIsIkZpbHRlclJlc3RyaWN0aW9ucyIsImFOb25GaWx0ZXJhYmxlUHJvcGVydGllcyIsInNUYXJnZXRQcm9wZXJ0eVBhdGgiLCJvUHJvcGVydHlQYXRoIiwiaXNQcm9wZXJ0eUZpbHRlcmFibGUiLCJzUHJvcGVydHkiLCJiU2tpcEhpZGRlbkZpbHRlciIsIkVycm9yIiwiYklzRmlsdGVyYWJsZSIsImNyZWF0ZUJpbmRpbmdDb250ZXh0Iiwic1Byb3BlcnR5RGF0YVR5cGUiLCJnZXRTaGVsbFNlcnZpY2VzIiwib0NvbnRyb2wiLCJnZXRBcHBDb21wb25lbnQiLCJnZXRIYXNoIiwic0hhc2giLCJ3aW5kb3ciLCJsb2NhdGlvbiIsImhhc2giLCJfZ2V0U09JbnRlbnRzIiwib09iamVjdFBhZ2VMYXlvdXQiLCJvU2VtYW50aWNPYmplY3QiLCJvUGFyYW0iLCJvU2hlbGxTZXJ2aWNlSGVscGVyIiwiQ29tbW9uVXRpbHMiLCJnZXRMaW5rcyIsInNlbWFudGljT2JqZWN0IiwicGFyYW1zIiwiX2NyZWF0ZU1hcHBpbmdzIiwib01hcHBpbmciLCJhU09NYXBwaW5ncyIsImFNYXBwaW5nS2V5cyIsIk9iamVjdCIsImtleXMiLCJvU2VtYW50aWNNYXBwaW5nIiwicHVzaCIsIl9nZXRSZWxhdGVkQXBwc01lbnVJdGVtcyIsImFMaW5rcyIsImFFeGNsdWRlZEFjdGlvbnMiLCJvVGFyZ2V0UGFyYW1zIiwiYUl0ZW1zIiwib0xpbmsiLCJzSW50ZW50IiwiaW50ZW50Iiwic0FjdGlvbiIsInRleHQiLCJ0YXJnZXRTZW1PYmplY3QiLCJ0YXJnZXRBY3Rpb24iLCJ0YXJnZXRQYXJhbXMiLCJfZ2V0UmVsYXRlZEludGVudHMiLCJvQWRkaXRpb25hbFNlbWFudGljT2JqZWN0cyIsIm9CaW5kaW5nQ29udGV4dCIsImFNYW5pZmVzdFNPSXRlbXMiLCJ1bmF2YWlsYWJsZUFjdGlvbnMiLCJtYXBwaW5nIiwibmF2aWdhdGlvbkNvbnRleHRzIiwic2VtYW50aWNPYmplY3RNYXBwaW5nIiwidXBkYXRlUmVsYXRlQXBwc01vZGVsIiwib0VudHJ5IiwiYVNlbUtleXMiLCJvTWV0YVBhdGgiLCJzQ3VycmVudFNlbU9iaiIsInNDdXJyZW50QWN0aW9uIiwib1NlbWFudGljT2JqZWN0QW5ub3RhdGlvbnMiLCJhUmVsYXRlZEFwcHNNZW51SXRlbXMiLCJqIiwic1NlbUtleSIsInZhbHVlIiwiYVRlY2huaWNhbEtleXMiLCJrZXkiLCJzT2JqS2V5Iiwib01hbmlmZXN0RGF0YSIsImdldFRhcmdldFZpZXciLCJnZXRWaWV3RGF0YSIsImFkZGl0aW9uYWxTZW1hbnRpY09iamVjdHMiLCJhTWFuaWZlc3RTT0tleXMiLCJ0aGVuIiwiYmluZCIsImNhdGNoIiwib0Vycm9yIiwiTG9nIiwiZXJyb3IiLCJmbkdldFBhcnNlU2hlbGxIYXNoQW5kR2V0TGlua3MiLCJvUGFyc2VkVXJsIiwicGFyc2VTaGVsbEhhc2giLCJkb2N1bWVudCIsImFjdGlvbiIsImFBbm5vdGF0aW9uc1NPSXRlbXMiLCJzRW50aXR5VHlwZVBhdGgiLCJvRW50aXR5U2V0QW5ub3RhdGlvbnMiLCJfZ2V0U2VtYW50aWNPYmplY3RBbm5vdGF0aW9ucyIsImJIYXNFbnRpdHlTZXRTTyIsIm9FbnRpdHlUeXBlQW5ub3RhdGlvbnMiLCJhVW5hdmFpbGFibGVBY3Rpb25zIiwiYU1hcHBpbmdzIiwiY29uY2F0IiwiZ2V0QmluZGluZ0NvbnRleHQiLCJzZXRQcm9wZXJ0eSIsIm9FbnRpdHlBbm5vdGF0aW9ucyIsInNBbm5vdGF0aW9uTWFwcGluZ1Rlcm0iLCJzQW5ub3RhdGlvbkFjdGlvblRlcm0iLCJzUXVhbGlmaWVyIiwiZm5VcGRhdGVSZWxhdGVkQXBwc0RldGFpbHMiLCJnZXRNb2RlbCIsImdldE1ldGFNb2RlbCIsIm9QYXRoIiwiZ2V0UGF0aCIsImdldE1ldGFQYXRoIiwic1NlbWFudGljS2V5Vm9jYWJ1bGFyeSIsInJlcXVlc3RPYmplY3QiLCJmbkZpcmVCdXR0b25QcmVzcyIsIm9CdXR0b24iLCJhQXV0aG9yaXplZFR5cGVzIiwiZ2V0TWV0YWRhdGEiLCJnZXROYW1lIiwiZ2V0VmlzaWJsZSIsImdldEVuYWJsZWQiLCJmaXJlUHJlc3MiLCJmblJlc29sdmVTdHJpbmd0b0Jvb2xlYW4iLCJzVmFsdWUiLCJpc0EiLCJvT3duZXIiLCJDb21wb25lbnQiLCJnZXRPd25lckNvbXBvbmVudEZvciIsImdldENvbXBvbmVudEluc3RhbmNlIiwiZ2V0Um9vdENvbnRyb2wiLCJWaWV3IiwiZ2V0UGFyZW50IiwiZm5Qcm9jZXNzRGF0YUxvc3NPckRyYWZ0RGlzY2FyZENvbmZpcm1hdGlvbiIsImZuUHJvY2Vzc0Z1bmN0aW9uIiwiZm5DYW5jZWxGdW5jdGlvbiIsIm9Db250cm9sbGVyIiwiYlNraXBCaW5kaW5nVG9WaWV3IiwiX2JJc01vZGlmaWVkIiwiZHJhZnREYXRhQ29udGV4dCIsImJpbmRDb250ZXh0IiwiZ2V0Qm91bmRDb250ZXh0IiwiY29sbGFib3JhdGlvbkNvbm5lY3RlZCIsImlzQ29ubmVjdGVkIiwiZ2V0VmlldyIsInByb2Nlc3NGdW5jdGlvbkZvckRyYWZ0cyIsImRpc2Nvbm5lY3QiLCJhcmdzIiwiYXBwbHkiLCJEcmFmdEFkbWluaXN0cmF0aXZlRGF0YSIsIklzQWN0aXZlRW50aXR5IiwiZHJhZnRBZG1pbkRhdGEiLCJDcmVhdGlvbkRhdGVUaW1lIiwiTGFzdENoYW5nZURhdGVUaW1lIiwicGVyZm9ybUFmdGVyRGlzY2FyZG9yS2VlcERyYWZ0IiwiZm5Qcm9jZXNzRGF0YUxvc3NDb25maXJtYXRpb24iLCJmblByb2Nlc3MiLCJwcm9ncmFtbWluZ01vZGVsIiwiYlVJRWRpdGFibGUiLCJvUmVzb3VyY2VCdW5kbGUiLCJzYXAiLCJ1aSIsImdldENvcmUiLCJnZXRMaWJyYXJ5UmVzb3VyY2VCdW5kbGUiLCJzV2FybmluZ01zZyIsImdldFRleHQiLCJzQ29uZmlybUJ1dHRvblR4dCIsInNDYW5jZWxCdXR0b25UeHQiLCJTdGlja3kiLCJNZXNzYWdlQm94Iiwid2FybmluZyIsImFjdGlvbnMiLCJvbkNsb3NlIiwib0ludGVybmFsTW9kZWwiLCJpbmZvIiwiaXNGaWVsZENvbnRyb2xQYXRoSW5hcHBsaWNhYmxlIiwic0ZpZWxkQ29udHJvbFBhdGgiLCJvQXR0cmlidXRlIiwiYkluYXBwbGljYWJsZSIsImFQYXJ0cyIsImhhc093blByb3BlcnR5IiwicmVtb3ZlU2Vuc2l0aXZlRGF0YSIsImFBdHRyaWJ1dGVzIiwiYU91dEF0dHJpYnV0ZXMiLCJzRW50aXR5U2V0IiwiZW50aXR5U2V0IiwiY29udGV4dERhdGEiLCJhUHJvcGVydGllcyIsInNQcm9wIiwiYVByb3BlcnR5QW5ub3RhdGlvbnMiLCJvRmllbGRDb250cm9sIiwiX2ZuQ2hlY2tJc01hdGNoIiwib09iamVjdCIsIm9LZXlzVG9DaGVjayIsInNLZXkiLCJmbkdldENvbnRleHRQYXRoUHJvcGVydGllcyIsIm9GaWx0ZXIiLCJvRW50aXR5VHlwZSIsIm9Qcm9wZXJ0aWVzIiwidGVzdCIsIiRraW5kIiwiZm5HZXRNYW5kYXRvcnlGaWx0ZXJGaWVsZHMiLCJhTWFuZGF0b3J5RmlsdGVyRmllbGRzIiwiZm5HZXRJQk5BY3Rpb25zIiwiYUlCTkFjdGlvbnMiLCJhQWN0aW9ucyIsImdldEFjdGlvbnMiLCJvQWN0aW9uIiwiZ2V0QWN0aW9uIiwiZGF0YSIsImZuVXBkYXRlRGF0YUZpZWxkRm9ySUJOQnV0dG9uc1Zpc2liaWxpdHkiLCJvVmlldyIsIm9QYXJhbXMiLCJmbkdldExpbmtzIiwib0RhdGEiLCJhS2V5cyIsIm9JQk5BY3Rpb24iLCJzU2VtYW50aWNPYmplY3QiLCJhTGluayIsInNldFZpc2libGUiLCJnZXRUcmFuc2xhdGVkVGV4dCIsInNGcmFtZXdvcmtLZXkiLCJzRW50aXR5U2V0TmFtZSIsInNSZXNvdXJjZUtleSIsImJSZXNvdXJjZUtleUV4aXN0cyIsIl9jaGVja0lmUmVzb3VyY2VLZXlFeGlzdHMiLCJhQ3VzdG9tQnVuZGxlcyIsImhhc1RleHQiLCJnZXRBY3Rpb25QYXRoIiwiYlJldHVybk9ubHlQYXRoIiwic0FjdGlvbk5hbWUiLCJiQ2hlY2tTdGF0aWNWYWx1ZSIsInNFbnRpdHlUeXBlTmFtZSIsIiRUeXBlIiwic0VudGl0eU5hbWUiLCJnZXRFbnRpdHlTZXROYW1lIiwic0JpbmRpbmdQYXJhbWV0ZXIiLCJzRW50aXR5VHlwZSIsIm9FbnRpdHlDb250YWluZXIiLCJjb21wdXRlRGlzcGxheU1vZGUiLCJvUHJvcGVydHlBbm5vdGF0aW9ucyIsIm9Db2xsZWN0aW9uQW5ub3RhdGlvbnMiLCJvVGV4dEFubm90YXRpb24iLCJvVGV4dEFycmFuZ2VtZW50QW5ub3RhdGlvbiIsIiRFbnVtTWVtYmVyIiwiX2dldEVudGl0eVR5cGUiLCJfcmVxdWVzdE9iamVjdCIsIm9TZWxlY3RlZENvbnRleHQiLCJuQnJhY2tldEluZGV4Iiwic1RhcmdldFR5cGUiLCJzbGljZSIsInNDdXJyZW50VHlwZSIsImdldEJpbmRpbmciLCJnZXRDb250ZXh0IiwiUHJvbWlzZSIsInJlc29sdmUiLCJfcmVxdWVzdFByb3BlcnR5Iiwic0R5bmFtaWNBY3Rpb25FbmFibGVkUGF0aCIsIm9Qcm9taXNlIiwicmVxdWVzdFNpbmdsZXRvblByb3BlcnR5IiwidlByb3BlcnR5VmFsdWUiLCJfc2V0Q29udGV4dHNCYXNlZE9uT3BlcmF0aW9uQXZhaWxhYmxlIiwib0ludGVybmFsTW9kZWxDb250ZXh0IiwiYVJlcXVlc3RQcm9taXNlcyIsImFsbCIsImFSZXN1bHRzIiwiYUFwcGxpY2FibGVDb250ZXh0cyIsImFOb3RBcHBsaWNhYmxlQ29udGV4dHMiLCJhUmVzdWx0IiwiX3NldER5bmFtaWNBY3Rpb25Db250ZXh0cyIsInRyYWNlIiwiYUFwcGxpY2FibGUiLCJhTm90QXBwbGljYWJsZSIsInNEeW5hbWljQWN0aW9uUGF0aFByZWZpeCIsInNldEFjdGlvbkVuYWJsZW1lbnQiLCJvQWN0aW9uT3BlcmF0aW9uQXZhaWxhYmxlTWFwIiwiYVNlbGVjdGVkQ29udGV4dHMiLCJhUHJvbWlzZXMiLCJiRW5hYmxlZCIsIm9Db250ZXh0RGF0YSIsIm9UcmFuc2Zvcm1lZEJpbmRpbmciLCJ0cmFuc2Zvcm1SZWN1cnNpdmVseSIsIm9CaW5kaW5nRXhwcmVzc2lvbiIsImNvbnN0YW50IiwicGF0aCIsInNSZXN1bHQiLCJjb21waWxlQmluZGluZyIsIl9nZXREZWZhdWx0T3BlcmF0b3JzIiwib1JlYWxQcm9wZXJ0eSIsIm9EYXRhQ2xhc3MiLCJUeXBlVXRpbCIsImdldERhdGFUeXBlQ2xhc3NOYW1lIiwib0Jhc2VUeXBlIiwiZ2V0QmFzZVR5cGUiLCJGaWx0ZXJPcGVyYXRvclV0aWwiLCJnZXRPcGVyYXRvcnNGb3JUeXBlIiwiX2dldFJlc3RyaWN0aW9ucyIsImFEZWZhdWx0T3BzIiwiYUV4cHJlc3Npb25PcHMiLCJhT3BlcmF0b3JzIiwiZmlsdGVyIiwic0VsZW1lbnQiLCJ0b1N0cmluZyIsImdldFNwZWNpZmljQWxsb3dlZEV4cHJlc3Npb24iLCJhRXhwcmVzc2lvbnMiLCJhQWxsb3dlZEV4cHJlc3Npb25zUHJpb3JpdHkiLCJBbGxvd2VkRXhwcmVzc2lvbnNQcmlvIiwic29ydCIsImEiLCJiIiwiZ2V0T3BlcmF0b3JzRm9yUHJvcGVydHkiLCJzVHlwZSIsImJVc2VTZW1hbnRpY0RhdGVSYW5nZSIsInNTZXR0aW5ncyIsImdldEZpbHRlclJlc3RyaWN0aW9uc0J5UGF0aCIsImFFcXVhbHNPcHMiLCJhU2luZ2xlUmFuZ2VPcHMiLCJhU2luZ2xlVmFsdWVEYXRlT3BzIiwiYU11bHRpUmFuZ2VPcHMiLCJhU2VhcmNoRXhwcmVzc2lvbk9wcyIsImFTZW1hbnRpY0RhdGVPcHNFeHQiLCJTZW1hbnRpY0RhdGVPcGVyYXRvcnMiLCJnZXRTdXBwb3J0ZWRPcGVyYXRpb25zIiwiYlNlbWFudGljRGF0ZVJhbmdlIiwiYVNlbWFudGljRGF0ZU9wcyIsIm9TZXR0aW5ncyIsIkpTT04iLCJwYXJzZSIsImN1c3RvbURhdGEiLCJvcGVyYXRvckNvbmZpZ3VyYXRpb24iLCJnZXRGaWx0ZXJPcGVyYXRpb25zIiwiZ2V0U2VtYW50aWNEYXRlT3BlcmF0aW9ucyIsImFEZWZhdWx0T3BlcmF0b3JzIiwiRmlsdGVyQWxsb3dlZEV4cHJlc3Npb25zIiwic0FsbG93ZWRFeHByZXNzaW9uIiwic1Jlc3RyaWN0aW9ucyIsImFTaW5nbGVWYWx1ZU9wcyIsInNPcGVyYXRvcnMiLCJnZXRQYXJhbWV0ZXJJbmZvIiwic1BhcmFtZXRlckNvbnRleHRQYXRoIiwic3Vic3RyaW5nIiwibGFzdEluZGV4T2YiLCJiUmVzdWx0Q29udGV4dCIsIm9QYXJhbWV0ZXJJbmZvIiwiY29udGV4dFBhdGgiLCJwYXJhbWV0ZXJQcm9wZXJ0aWVzIiwiZ2V0Q29udGV4dFBhdGhQcm9wZXJ0aWVzIiwiYWRkU2VsZWN0T3B0aW9uVG9Db25kaXRpb25zIiwib1Byb3BlcnR5TWV0YWRhdGEiLCJhVmFsaWRPcGVyYXRvcnMiLCJhQ3VtdWxhdGl2ZUNvbmRpdGlvbnMiLCJvU2VsZWN0T3B0aW9uIiwib0NvbmRpdGlvbiIsImdldENvbmRpdGlvbnMiLCJvcGVyYXRvciIsImFkZFNlbGVjdE9wdGlvbnNUb0NvbmRpdGlvbnMiLCJvU2VsZWN0aW9uVmFyaWFudCIsInNTZWxlY3RPcHRpb25Qcm9wIiwib0NvbmRpdGlvbnMiLCJzQ29uZGl0aW9uUGF0aCIsInNDb25kaXRpb25Qcm9wIiwib1ZhbGlkUHJvcGVydGllcyIsImlzUGFyYW1ldGVyIiwiYUNvbmRpdGlvbnMiLCJhU2VsZWN0T3B0aW9ucyIsImdldFNlbGVjdE9wdGlvbiIsImFkZFNlbGVjdGlvblZhcmlhbnRUb0NvbmRpdGlvbnMiLCJhU2VsZWN0T3B0aW9uc1Byb3BlcnR5TmFtZXMiLCJnZXRTZWxlY3RPcHRpb25zUHJvcGVydHlOYW1lcyIsImFNZXRhZGF0UHJvcGVydGllcyIsIm9WYWxpZFBhcmFtZXRlclByb3BlcnRpZXMiLCJiSGFzUGFyYW1ldGVycyIsImFNZXRhZGF0YVBhcmFtZXRlcnMiLCJzTWV0YWRhdGFQYXJhbWV0ZXIiLCJzU2VsZWN0T3B0aW9uTmFtZSIsImluY2x1ZGVzIiwic3RhcnRzV2l0aCIsInNNZXRhZGF0YVByb3BlcnR5Iiwic1NlbGVjdE9wdGlvbiIsInNGdWxsQ29udGV4dFBhdGgiLCJyZXBsYWNlQWxsIiwiX2NyZWF0ZUNvbmRpdGlvbnNGb3JOYXZQcm9wZXJ0aWVzIiwic01haW5FbnRpdHlTZXRQYXRoIiwiYU5hdk9iamVjdE5hbWVzIiwic05hdlBhdGgiLCJzUHJvcGVydHlOYW1lIiwiJGlzQ29sbGVjdGlvbiIsInNOYXZQcm9wZXJ0eVBhdGgiLCJhZGRQYWdlQ29udGV4dFRvU2VsZWN0aW9uVmFyaWFudCIsIm1QYWdlQ29udGV4dCIsIm9BcHBDb21wb25lbnQiLCJvTmF2aWdhdGlvblNlcnZpY2UiLCJnZXROYXZpZ2F0aW9uU2VydmljZSIsIm1peEF0dHJpYnV0ZXNBbmRTZWxlY3Rpb25WYXJpYW50IiwidG9KU09OU3RyaW5nIiwiYWRkRXh0ZXJuYWxTdGF0ZUZpbHRlcnNUb1NlbGVjdGlvblZhcmlhbnQiLCJtRmlsdGVycyIsIm9UYXJnZXRJbmZvIiwib0ZpbHRlckluZm8iLCJzRmlsdGVyIiwic0xvdyIsInNIaWdoIiwiZm5HZXRTaWduQW5kT3B0aW9uIiwic09wZXJhdG9yIiwic0xvd1ZhbHVlIiwic0hpZ2hWYWx1ZSIsIm9TZWxlY3RPcHRpb25TdGF0ZSIsIm9wdGlvbiIsInNpZ24iLCJsb3ciLCJoaWdoIiwib0ZpbHRlckNvbmRpdGlvbnMiLCJmaWx0ZXJDb25kaXRpb25zIiwib0ZpbHRlcnNXaXRob3V0Q29uZmxpY3QiLCJmaWx0ZXJDb25kaXRpb25zV2l0aG91dENvbmZsaWN0Iiwib1RhYmxlUHJvcGVydGllc1dpdGhvdXRDb25mbGljdCIsInByb3BlcnRpZXNXaXRob3V0Q29uZmxpY3QiLCJhZGRGaWx0ZXJzVG9TZWxlY3Rpb25WYXJpYW50Iiwic0ZpbHRlck5hbWUiLCJhRmlsdGVycyIsInZhbHVlcyIsImFGaWx0ZXIiLCJvVmFsdWUxIiwib1NlbGVjdE9wdGlvblZhbHVlcyIsImFkZFNlbGVjdE9wdGlvbiIsImlzU3RpY2t5RWRpdE1vZGUiLCJiSXNTdGlja3lNb2RlIiwiTW9kZWxIZWxwZXIiLCJpc1N0aWNreVNlc3Npb25TdXBwb3J0ZWQiLCJhZGREZWZhdWx0RGlzcGxheUN1cnJlbmN5Iiwib1NlbGVjdGlvblZhcmlhbnREZWZhdWx0cyIsImFTVk9wdGlvbiIsImFEZWZhdWx0U1ZPcHRpb24iLCJkaXNwbGF5Q3VycmVuY3lTZWxlY3RPcHRpb24iLCJzU2lnbiIsInNPcHRpb24iLCJnZXROb25Db21wdXRlZFZpc2libGVGaWVsZHMiLCIkS2V5IiwiYU5vbkNvbXB1dGVkVmlzaWJsZUZpZWxkcyIsIm9Bbm5vdGF0aW9ucyIsImJJc0tleSIsImJJc0ltbXV0YWJsZSIsImJJc05vbkNvbXB1dGVkIiwiYklzVmlzaWJsZSIsImJJc0NvbXB1dGVkRGVmYXVsdFZhbHVlIiwiYklzS2V5Q29tcHV0ZWREZWZhdWx0VmFsdWVXaXRoVGV4dCIsIm9EaWFnbm9zdGljcyIsImdldERpYWdub3N0aWNzIiwic01lc3NhZ2UiLCJhZGRJc3N1ZSIsIklzc3VlQ2F0ZWdvcnkiLCJBbm5vdGF0aW9uIiwiSXNzdWVTZXZlcml0eSIsIk1lZGl1bSIsIklzc3VlQ2F0ZWdvcnlUeXBlIiwiQW5ub3RhdGlvbnMiLCJJZ25vcmVkQW5ub3RhdGlvbiIsInNldFVzZXJEZWZhdWx0cyIsImFQYXJhbWV0ZXJzIiwiYklzQWN0aW9uIiwiYklzQ3JlYXRlIiwib0FjdGlvbkRlZmF1bHRWYWx1ZXMiLCJvQ29tcG9uZW50RGF0YSIsImdldENvbXBvbmVudERhdGEiLCJvU3RhcnR1cFBhcmFtZXRlcnMiLCJzdGFydHVwUGFyYW1ldGVycyIsIm9TaGVsbFNlcnZpY2VzIiwiaGFzVVNoZWxsIiwib1BhcmFtZXRlciIsIiROYW1lIiwic1BhcmFtZXRlck5hbWUiLCJnZXRTdGFydHVwQXBwU3RhdGUiLCJvU3RhcnR1cEFwcFN0YXRlIiwiZ2V0RGF0YSIsImFFeHRlbmRlZFBhcmFtZXRlcnMiLCJzZWxlY3Rpb25WYXJpYW50IiwiU2VsZWN0T3B0aW9ucyIsIm9FeHRlbmRlZFBhcmFtZXRlciIsIlByb3BlcnR5TmFtZSIsIm9SYW5nZSIsIlJhbmdlcyIsIlNpZ24iLCJPcHRpb24iLCJMb3ciLCJnZXRBZGRpdGlvbmFsUGFyYW1zRm9yQ3JlYXRlIiwib0luYm91bmRQYXJhbWV0ZXJzIiwib0luYm91bmRzIiwiYUNyZWF0ZVBhcmFtZXRlcnMiLCJzUGFyYW1ldGVyIiwidXNlRm9yQ3JlYXRlIiwib1JldCIsInNDcmVhdGVQYXJhbWV0ZXIiLCJhVmFsdWVzIiwiY3JlYXRlIiwiZ2V0U2VtYW50aWNPYmplY3RNYXBwaW5nIiwib091dGJvdW5kIiwiYVNlbWFudGljT2JqZWN0TWFwcGluZyIsInBhcmFtZXRlcnMiLCJzUGFyYW0iLCJmb3JtYXQiLCJnZXRIZWFkZXJGYWNldEl0ZW1Db25maWdGb3JFeHRlcm5hbE5hdmlnYXRpb24iLCJvVmlld0RhdGEiLCJvQ3Jvc3NOYXYiLCJvSGVhZGVyRmFjZXRJdGVtcyIsInNJZCIsIm9Db250cm9sQ29uZmlnIiwiY29udHJvbENvbmZpZ3VyYXRpb24iLCJjb25maWciLCJuYXZpZ2F0aW9uIiwidGFyZ2V0T3V0Ym91bmQiLCJvdXRib3VuZCIsInNPdXRib3VuZCIsImdlbmVyYXRlIiwic2V0U2VtYW50aWNPYmplY3RNYXBwaW5ncyIsInZNYXBwaW5ncyIsIm9NYXBwaW5ncyIsInNMb2NhbFByb3BlcnR5Iiwic1NlbWFudGljT2JqZWN0UHJvcGVydHkiLCJyZW1vdmVTZWxlY3RPcHRpb24iLCJtYXNzQWRkU2VsZWN0T3B0aW9uIiwiZm5HZXRTZW1hbnRpY09iamVjdHNGcm9tUGF0aCIsImFTZW1hbnRpY09iamVjdFVuYXZhaWxhYmxlQWN0aW9ucyIsImFTZW1hbnRpY09iamVjdEZvckdldExpbmtzIiwic2VtYW50aWNPYmplY3RQYXRoIiwic2VtYW50aWNPYmplY3RGb3JHZXRMaW5rcyIsImZuVXBkYXRlU2VtYW50aWNUYXJnZXRzTW9kZWwiLCJhR2V0TGlua3NQcm9taXNlcyIsImFTZW1hbnRpY09iamVjdHMiLCJzQ3VycmVudEhhc2giLCJfb0xpbmsiLCJfc0xpbmtJbnRlbnRBY3Rpb24iLCJhRmluYWxMaW5rcyIsIm9GaW5hbFNlbWFudGljT2JqZWN0cyIsImJJbnRlbnRIYXNBY3Rpb25zIiwiayIsIm9UbXAiLCJzQWx0ZXJuYXRlUGF0aCIsImhhc1RhcmdldHNOb3RGaWx0ZXJlZCIsImhhc1RhcmdldHMiLCJpTGlua0NvdW50IiwiSGFzVGFyZ2V0cyIsIkhhc1RhcmdldHNOb3RGaWx0ZXJlZCIsImFzc2lnbiIsInNTZW1hbnRpY09iamVjdE5hbWUiLCJtZXJnZU9iamVjdHMiLCJmbkdldFNlbWFudGljT2JqZWN0UHJvbWlzZSIsImdldFNlbWFudGljT2JqZWN0c0Zyb21QYXRoIiwiZm5HZXRTZW1hbnRpY1RhcmdldHNGcm9tUGFnZU1vZGVsIiwic1BhZ2VNb2RlbCIsIl9mbmZpbmRWYWx1ZXNIZWxwZXIiLCJvYmoiLCJsaXN0IiwiQXJyYXkiLCJjaGlsZHJlbiIsIl9mbmZpbmRWYWx1ZXMiLCJfZm5EZWxldGVEdXBsaWNhdGVTZW1hbnRpY09iamVjdHMiLCJhU2VtYW50aWNPYmplY3RQYXRoIiwiYVNlbWFudGljT2JqZWN0c1Byb21pc2VzIiwib0NvbXBvbmVudCIsImdldE93bmVyQ29tcG9uZW50Iiwib1BhZ2VNb2RlbCIsInN0cmluZ2lmeSIsIl9nZXRPYmplY3QiLCJhU2VtYW50aWNPYmplY3RzRm91bmQiLCJhU2VtYW50aWNPYmplY3RzRm9yR2V0TGlua3MiLCJfb1NlbWFudGljT2JqZWN0IiwiZ2V0U2VtYW50aWNPYmplY3RQcm9taXNlIiwic1NlbU9iakV4cHJlc3Npb24iLCJhU2VtYW50aWNPYmplY3RzUmVzb2x2ZWQiLCJlbGVtZW50IiwiYmluZGluZ0V4cHJlc3Npb24iLCIkUGF0aCIsImdldExpbmtzV2l0aENhY2hlIiwidXBkYXRlU2VtYW50aWNUYXJnZXRzIiwiZ2V0RmlsdGVyUmVzdHJpY3Rpb25zIiwib0ZpbHRlclJlc3RyaWN0aW9uc0Fubm90YXRpb24iLCJzUmVzdHJpY3Rpb24iLCJSRVFVSVJFRF9QUk9QRVJUSUVTIiwiTk9OX0ZJTFRFUkFCTEVfUFJPUEVSVElFUyIsImFQcm9wcyIsIm1hcCIsIm9Qcm9wZXJ0eSIsIkFMTE9XRURfRVhQUkVTU0lPTlMiLCJtQWxsb3dlZEV4cHJlc3Npb25zIiwiRmlsdGVyRXhwcmVzc2lvblJlc3RyaWN0aW9ucyIsIlByb3BlcnR5IiwiQWxsb3dlZEV4cHJlc3Npb25zIiwiYVBhdGhQYXJ0cyIsInNQYXJlbnRFbnRpdHlTZXRQYXRoIiwib05hdmlnYXRpb25GaWx0ZXJSZXN0cmljdGlvbnMiLCJ0ZW1wbGF0ZUNvbnRyb2xGcmFnbWVudCIsInNGcmFnbWVudE5hbWUiLCJvUHJlcHJvY2Vzc29yU2V0dGluZ3MiLCJvT3B0aW9ucyIsIm9Nb2RpZmllciIsInZpZXciLCJvRnJhZ21lbnQiLCJ0YXJnZXRzIiwibG9hZE1hY3JvTGlicmFyeSIsIlhNTFByZXByb2Nlc3NvciIsInByb2Nlc3MiLCJYTUxUZW1wbGF0ZVByb2Nlc3NvciIsImxvYWRUZW1wbGF0ZSIsIm5hbWUiLCJmaXJzdEVsZW1lbnRDaGlsZCIsImlzWE1MIiwiRnJhZ21lbnQiLCJsb2FkIiwiaWQiLCJkZWZpbml0aW9uIiwiY29udHJvbGxlciIsImdldFNpbmdsZXRvblBhdGgiLCJtZXRhTW9kZWwiLCJwYXJ0cyIsIkJvb2xlYW4iLCJwcm9wZXJ0eU5hbWUiLCJwb3AiLCJuYXZpZ2F0aW9uUGF0aCIsInNpbmdsZXRvbk5hbWUiLCJtb2RlbCIsInJlc29sdmVkUGF0aCIsInByb3BlcnR5QmluZGluZyIsImJpbmRQcm9wZXJ0eSIsInJlcXVlc3RWYWx1ZSIsImFkZEV2ZW50VG9CaW5kaW5nSW5mbyIsInNFdmVudE5hbWUiLCJmSGFuZGxlciIsIm9CaW5kaW5nSW5mbyIsInNldEJpbmRpbmdJbmZvIiwiZXZlbnRzIiwiZk9yaWdpbmFsSGFuZGxlciIsImlubmVyQ2hhcnRCb3VuZCIsImdldENvbnRyb2xEZWxlZ2F0ZSIsIl9nZXRDaGFydCIsImdldEJpbmRpbmdJbmZvIiwic0Vycm9yIiwicmVxdWlyZSIsImZuT25TdHJpY3RIYW5kbGluZ0ZhaWxlZCIsInNHcm91cElkIiwiYWN0aW9uTmFtZSIsImFNZXNzYWdlcyIsImxvY2FsSTE4blJlZiIsIm1lc3NhZ2UiLCJkaWFsb2dQcm9taXNlIiwidGl0bGUiLCJlbXBoYXNpemVkQWN0aW9uIiwic3VibWl0QmF0Y2giLCJvTWVzc2FnZURpYWxvZ01vZGVsIiwiSlNPTk1vZGVsIiwic2V0RGF0YSIsImJTdHJpY3RIYW5kbGluZ0Zsb3ciLCJvTWVzc2FnZU9iamVjdCIsIm1lc3NhZ2VIYW5kbGluZyIsInByZXBhcmVNZXNzYWdlVmlld0ZvckRpYWxvZyIsIm9EaWFsb2ciLCJEaWFsb2ciLCJyZXNpemFibGUiLCJjb250ZW50Iiwib01lc3NhZ2VWaWV3Iiwic3RhdGUiLCJjdXN0b21IZWFkZXIiLCJCYXIiLCJjb250ZW50TGVmdCIsIm9CYWNrQnV0dG9uIiwiY29udGVudE1pZGRsZSIsIlRpdGxlIiwiY29udGVudEhlaWdodCIsImNvbnRlbnRXaWR0aCIsInZlcnRpY2FsU2Nyb2xsaW5nIiwic2V0QmVnaW5CdXR0b24iLCJCdXR0b24iLCJwcmVzcyIsImNsb3NlIiwidHlwZSIsInNldEVuZEJ1dHRvbiIsIm9wZW4iLCJmaXJlQnV0dG9uUHJlc3MiLCJoYXNUcmFuc2llbnRDb250ZXh0IiwidXBkYXRlUmVsYXRlZEFwcHNEZXRhaWxzIiwicmVzb2x2ZVN0cmluZ3RvQm9vbGVhbiIsInByb2Nlc3NEYXRhTG9zc0NvbmZpcm1hdGlvbiIsImdldE1hbmRhdG9yeUZpbHRlckZpZWxkcyIsInVwZGF0ZURhdGFGaWVsZEZvcklCTkJ1dHRvbnNWaXNpYmlsaXR5IiwiZ2V0SUJOQWN0aW9ucyIsImdldFNlbWFudGljVGFyZ2V0c0Zyb21QYWdlTW9kZWwiXSwibWFwcGluZ3MiOiI7QUFBQTtBQUNBO0FBQ0E7Ozs7Ozs7Ozs7Ozs7Ozs7O0FBOEJBLE1BQU1BLGdCQUFnQixHQUFHQyxPQUFPLENBQUNELGdCQUFqQztBQUNBLE1BQU1FLFdBQVcsR0FBRyxDQUNuQixhQURtQixFQUVuQixVQUZtQixFQUduQixVQUhtQixFQUluQixjQUptQixFQUtuQixvQkFMbUIsRUFNbkIsYUFObUIsRUFPbkIsWUFQbUIsRUFRbkIsV0FSbUIsRUFTbkIsVUFUbUIsRUFVbkIsV0FWbUIsRUFXbkIsV0FYbUIsRUFZbkIsV0FabUIsRUFhbkIsV0FibUIsRUFjbkIsWUFkbUIsRUFlbkIsWUFmbUIsRUFnQm5CLFVBaEJtQixFQWlCbkIsZUFqQm1CLENBQXBCOztBQW9CQSxXQUFTQyxtQkFBVCxDQUE2QkMsV0FBN0IsRUFBa0Q7QUFDakQsUUFBSSxDQUFDQSxXQUFMLEVBQWtCO0FBQ2pCLGFBQU9DLFNBQVA7QUFDQTs7QUFFRCxXQUFPRCxXQUFXLENBQ2hCRSxPQURLLENBQ0csSUFESCxFQUNTLEdBRFQsRUFFTEMsS0FGSyxDQUVDLEtBRkQsRUFHTEMsTUFISyxDQUdFLFVBQVNDLFdBQVQsRUFBMENDLFlBQTFDLEVBQWdFO0FBQ3ZFLFVBQUlBLFlBQVksS0FBSyxFQUFyQixFQUF5QjtBQUN4QkQsUUFBQUEsV0FBVyxHQUFHLENBQUNBLFdBQVcsR0FBR0EsV0FBVyxHQUFHLEdBQWpCLEdBQXVCLEVBQW5DLElBQXlDLEdBQXpDLEdBQStDQyxZQUEvQyxHQUE4RCxHQUE1RTtBQUNBOztBQUNELGFBQU9ELFdBQVA7QUFDQSxLQVJLLEVBUUhKLFNBUkcsQ0FBUDtBQVNBOztBQUVELFdBQVNNLG1CQUFULENBQTZCQyxrQkFBN0IsRUFBc0Q7QUFDckQsUUFBSUMsU0FBUyxHQUFHRCxrQkFBa0IsQ0FBQ0UsV0FBbkIsQ0FBK0IsT0FBL0IsQ0FBaEIsQ0FEcUQsQ0FFckQ7O0FBQ0EsUUFBSSxDQUFDRixrQkFBa0IsQ0FBQ0UsV0FBbkIsQ0FBK0IsT0FBL0IsQ0FBTCxFQUE4QztBQUM3QyxjQUFRRCxTQUFSO0FBQ0MsYUFBSywrQ0FBTDtBQUNBLGFBQUssOERBQUw7QUFDQ0EsVUFBQUEsU0FBUyxHQUFHUixTQUFaO0FBQ0E7O0FBRUQsYUFBSyxzQ0FBTDtBQUNBLGFBQUssd0RBQUw7QUFDQSxhQUFLLDZDQUFMO0FBQ0EsYUFBSywrREFBTDtBQUNBLGFBQUssZ0RBQUw7QUFDQ1EsVUFBQUEsU0FBUyxHQUFHRCxrQkFBa0IsQ0FBQ0UsV0FBbkIsQ0FBK0IsbUJBQS9CLENBQVo7QUFDQTs7QUFFRCxhQUFLLG1EQUFMO0FBQ0E7QUFDQyxjQUFNQyxlQUFlLEdBQUdILGtCQUFrQixDQUFDRSxXQUFuQixDQUErQix3QkFBL0IsQ0FBeEI7O0FBQ0EsY0FBSUMsZUFBSixFQUFxQjtBQUNwQixnQkFBSUEsZUFBZSxDQUFDQyxPQUFoQixDQUF3QiwrQ0FBeEIsSUFBMkUsQ0FBQyxDQUFoRixFQUFtRjtBQUNsRkgsY0FBQUEsU0FBUyxHQUFHRCxrQkFBa0IsQ0FBQ0UsV0FBbkIsQ0FBK0IsdUNBQS9CLENBQVo7QUFDQSxhQUZELE1BRU8sSUFBSUMsZUFBZSxDQUFDQyxPQUFoQixDQUF3QixzQ0FBeEIsSUFBa0UsQ0FBQyxDQUF2RSxFQUEwRTtBQUNoRkgsY0FBQUEsU0FBUyxHQUFHRCxrQkFBa0IsQ0FBQ0UsV0FBbkIsQ0FBK0IsbUJBQS9CLENBQVo7QUFDQSxhQUZNLE1BRUE7QUFDTjtBQUNBRCxjQUFBQSxTQUFTLEdBQUdSLFNBQVo7QUFDQTtBQUNELFdBVEQsTUFTTztBQUNOUSxZQUFBQSxTQUFTLEdBQUdSLFNBQVo7QUFDQTs7QUFDRDtBQTdCRjtBQStCQTs7QUFFRCxXQUFPUSxTQUFQO0FBQ0E7O0FBQ0QsV0FBU0ksc0JBQVQsQ0FBZ0NDLFlBQWhDLEVBQW1EO0FBQ2xELFFBQUlDLHFCQUFxQixHQUFHLEtBQTVCOztBQUNBLFFBQUlELFlBQUosRUFBa0I7QUFDakJBLE1BQUFBLFlBQVksQ0FBQ0Usa0JBQWIsR0FBa0NDLE9BQWxDLENBQTBDLFVBQVNDLFFBQVQsRUFBd0I7QUFDakUsWUFBSUEsUUFBUSxJQUFJQSxRQUFRLENBQUNDLFdBQVQsRUFBaEIsRUFBd0M7QUFDdkNKLFVBQUFBLHFCQUFxQixHQUFHLElBQXhCO0FBQ0E7QUFDRCxPQUpEO0FBS0E7O0FBQ0QsV0FBT0EscUJBQVA7QUFDQTs7QUFDRCxXQUFTSyxxQkFBVCxDQUErQkMsU0FBL0IsRUFBK0NDLFVBQS9DLEVBQWdFO0FBQy9ELFFBQUlDLENBQUMsR0FBRyxDQUFSO0FBQ0EsUUFBTUMsZ0JBQWdCLEdBQUdILFNBQVMsQ0FBQ2xCLEtBQVYsQ0FBZ0IsOEJBQWhCLENBQXpCOztBQUNBLFNBQUssSUFBSXNCLEtBQUssR0FBR0QsZ0JBQWdCLENBQUMsQ0FBRCxDQUFqQyxFQUFzQ0QsQ0FBQyxHQUFHQyxnQkFBZ0IsQ0FBQ0UsTUFBakIsR0FBMEIsQ0FBcEUsRUFBdUVILENBQUMsRUFBeEUsRUFBNEU7QUFDM0UsVUFBTUksdUJBQXVCLEdBQUdDLHlCQUF5QixDQUFDTixVQUFELEVBQWFHLEtBQWIsRUFBb0JELGdCQUFnQixDQUFDRCxDQUFDLEdBQUcsQ0FBTCxDQUFwQyxDQUF6RDs7QUFDQSxVQUFJSSx1QkFBdUIsSUFBSUEsdUJBQXVCLENBQUMsb0JBQUQsQ0FBdEQsRUFBOEU7QUFDN0UsZUFBT0EsdUJBQXVCLENBQUMsb0JBQUQsQ0FBOUI7QUFDQTs7QUFDREYsTUFBQUEsS0FBSyxHQUFHQSxLQUFLLEdBQUcsOEJBQVIsR0FBeUNELGdCQUFnQixDQUFDRCxDQUFELENBQWpFO0FBQ0E7O0FBQ0QsV0FBT0QsVUFBVSxDQUFDTyxTQUFYLENBQXFCUixTQUFTLEdBQUcsK0NBQWpDLENBQVA7QUFDQTs7QUFDRCxXQUFTTyx5QkFBVCxDQUFtQ0UsTUFBbkMsRUFBZ0RDLGNBQWhELEVBQXFFQyxlQUFyRSxFQUEyRjtBQUMxRixRQUFNTCx1QkFBdUIsR0FBR0csTUFBTSxDQUFDRCxTQUFQLENBQWlCRSxjQUFjLEdBQUcsbURBQWxDLENBQWhDO0FBQ0EsUUFBTUUscUJBQXFCLEdBQUdOLHVCQUF1QixJQUFJQSx1QkFBdUIsQ0FBQ08sb0JBQWpGO0FBQ0EsV0FDQ0QscUJBQXFCLElBQ3JCQSxxQkFBcUIsQ0FBQ0UsSUFBdEIsQ0FBMkIsVUFBU0MsbUJBQVQsRUFBbUM7QUFDN0QsYUFDQ0EsbUJBQW1CLElBQ25CQSxtQkFBbUIsQ0FBQ0Msa0JBRHBCLElBRUFELG1CQUFtQixDQUFDQyxrQkFBcEIsQ0FBdUNDLHVCQUF2QyxLQUFtRU4sZUFIcEU7QUFLQSxLQU5ELENBRkQ7QUFVQTs7QUFDRCxXQUFTTyw0QkFBVCxDQUFzQ1QsTUFBdEMsRUFBbURDLGNBQW5ELEVBQXdFUyxZQUF4RSxFQUEyRjtBQUMxRixRQUFJQyxnQkFBZ0IsR0FBRyxLQUF2QjtBQUNBLFFBQU1DLFdBQVcsR0FBR1osTUFBTSxDQUFDRCxTQUFQLENBQWlCRSxjQUFjLEdBQUcsK0NBQWxDLENBQXBCOztBQUNBLFFBQUlXLFdBQVcsSUFBSUEsV0FBVyxDQUFDQyx1QkFBL0IsRUFBd0Q7QUFDdkRGLE1BQUFBLGdCQUFnQixHQUFHQyxXQUFXLENBQUNDLHVCQUFaLENBQW9DQyxJQUFwQyxDQUF5QyxVQUFTQyxRQUFULEVBQXdCO0FBQ25GLGVBQU9BLFFBQVEsQ0FBQ1AsdUJBQVQsS0FBcUNFLFlBQXJDLElBQXFESyxRQUFRLENBQUNDLGFBQVQsS0FBMkJOLFlBQXZGO0FBQ0EsT0FGa0IsQ0FBbkI7QUFHQTs7QUFDRCxXQUFPQyxnQkFBUDtBQUNBLEcsQ0FDRDs7O0FBQ0EsV0FBU00sd0JBQVQsQ0FBa0NqQixNQUFsQyxFQUErQ0MsY0FBL0MsRUFBb0VpQixXQUFwRSxFQUFzRjtBQUNyRixRQUFNM0IsU0FBUyxHQUFHVSxjQUFjLEdBQUcsR0FBakIsR0FBdUJpQixXQUF6QztBQUFBLFFBQ0NDLFFBQVEsR0FBRzVCLFNBQVMsQ0FBQ2xCLEtBQVYsQ0FBZ0IsR0FBaEIsRUFBcUIrQyxNQUFyQixDQUE0QixDQUE1QixFQUErQixDQUEvQixDQURaO0FBQUEsUUFFQ0MsUUFBUSxHQUFHOUIsU0FBUyxDQUFDbEIsS0FBVixDQUFnQixHQUFoQixFQUFxQitDLE1BQXJCLENBQTRCLENBQTVCLENBRlo7QUFHQSxRQUFJVCxnQkFBZ0IsR0FBRyxLQUF2QjtBQUFBLFFBQ0NXLFFBQVEsR0FBRyxFQURaO0FBR0FyQixJQUFBQSxjQUFjLEdBQUdrQixRQUFRLENBQUNJLElBQVQsQ0FBYyxHQUFkLENBQWpCO0FBRUFaLElBQUFBLGdCQUFnQixHQUFHVSxRQUFRLENBQUNQLElBQVQsQ0FBYyxVQUFTVSxJQUFULEVBQXVCQyxLQUF2QixFQUFzQ0MsS0FBdEMsRUFBdUQ7QUFDdkYsVUFBSUosUUFBUSxDQUFDMUIsTUFBVCxHQUFrQixDQUF0QixFQUF5QjtBQUN4QjBCLFFBQUFBLFFBQVEsSUFBSSxNQUFNRSxJQUFsQjtBQUNBLE9BRkQsTUFFTztBQUNORixRQUFBQSxRQUFRLEdBQUdFLElBQVg7QUFDQTs7QUFDRCxVQUFJQyxLQUFLLEtBQUtDLEtBQUssQ0FBQzlCLE1BQU4sR0FBZSxDQUE3QixFQUFnQztBQUMvQjtBQUNBLFlBQU1DLHVCQUF1QixHQUFHQyx5QkFBeUIsQ0FBQ0UsTUFBRCxFQUFTQyxjQUFULEVBQXlCdUIsSUFBekIsQ0FBekQ7QUFDQSxZQUFNRyxtQkFBbUIsR0FBRzlCLHVCQUF1QixJQUFJQSx1QkFBdUIsQ0FBQytCLGtCQUEvRTtBQUNBLFlBQU1DLHdCQUF3QixHQUFHRixtQkFBbUIsSUFBSUEsbUJBQW1CLENBQUNkLHVCQUE1RTtBQUNBLFlBQU1pQixtQkFBbUIsR0FBR0osS0FBSyxDQUFDQSxLQUFLLENBQUM5QixNQUFOLEdBQWUsQ0FBaEIsQ0FBakM7O0FBQ0EsWUFDQ2lDLHdCQUF3QixJQUN4QkEsd0JBQXdCLENBQUN4QixJQUF6QixDQUE4QixVQUFTMEIsYUFBVCxFQUE2QjtBQUMxRCxpQkFBT0EsYUFBYSxDQUFDZixhQUFkLEtBQWdDYyxtQkFBdkM7QUFDQSxTQUZELENBRkQsRUFLRTtBQUNELGlCQUFPLElBQVA7QUFDQTtBQUNEOztBQUNELFVBQUlMLEtBQUssS0FBS0MsS0FBSyxDQUFDOUIsTUFBTixHQUFlLENBQTdCLEVBQWdDO0FBQy9CO0FBQ0FlLFFBQUFBLGdCQUFnQixHQUFHRiw0QkFBNEIsQ0FBQ1QsTUFBRCxFQUFTQyxjQUFULEVBQXlCcUIsUUFBekIsQ0FBL0M7QUFDQSxPQUhELE1BR08sSUFBSXRCLE1BQU0sQ0FBQ0QsU0FBUCxDQUFpQkUsY0FBYyxHQUFHLDhCQUFqQixHQUFrRHVCLElBQW5FLENBQUosRUFBOEU7QUFDcEY7QUFDQWIsUUFBQUEsZ0JBQWdCLEdBQUdGLDRCQUE0QixDQUFDVCxNQUFELEVBQVNDLGNBQVQsRUFBeUJxQixRQUF6QixDQUEvQztBQUNBQSxRQUFBQSxRQUFRLEdBQUcsRUFBWCxDQUhvRixDQUlwRjs7QUFDQXJCLFFBQUFBLGNBQWMsR0FBRyxNQUFNRCxNQUFNLENBQUNELFNBQVAsQ0FBaUJFLGNBQWMsR0FBRyw4QkFBakIsR0FBa0R1QixJQUFuRSxDQUF2QjtBQUNBOztBQUNELGFBQU9iLGdCQUFnQixLQUFLLElBQTVCO0FBQ0EsS0FoQ2tCLENBQW5CO0FBaUNBLFdBQU9BLGdCQUFQO0FBQ0EsRyxDQUNEOzs7QUFDQSxXQUFTcUIsb0JBQVQsQ0FBOEJoQyxNQUE5QixFQUFzREMsY0FBdEQsRUFBOEVnQyxTQUE5RSxFQUFpR0MsaUJBQWpHLEVBQTZIO0FBQzVILFFBQUksT0FBT0QsU0FBUCxLQUFxQixRQUF6QixFQUFtQztBQUNsQyxZQUFNLElBQUlFLEtBQUosQ0FBVSxzQ0FBVixDQUFOO0FBQ0E7O0FBQ0QsUUFBSUMsYUFBSixDQUo0SCxDQU01SDs7QUFDQSxRQUFJcEMsTUFBTSxDQUFDRCxTQUFQLENBQWlCRSxjQUFjLEdBQUcsZ0RBQWxDLE1BQXdGLElBQTVGLEVBQWtHO0FBQ2pHLGFBQU8sSUFBUDtBQUNBOztBQUVELFFBQU12QixrQkFBa0IsR0FBR3NCLE1BQU0sQ0FBQ3FDLG9CQUFQLENBQTRCcEMsY0FBYyxHQUFHLEdBQWpCLEdBQXVCZ0MsU0FBbkQsQ0FBM0I7O0FBRUEsUUFBSXZELGtCQUFrQixDQUFDRSxXQUFuQixDQUErQixvQ0FBL0IsTUFBeUUsSUFBN0UsRUFBbUY7QUFDbEYsYUFBTyxLQUFQO0FBQ0E7O0FBRUQsUUFBSSxDQUFDc0QsaUJBQUQsSUFBc0J4RCxrQkFBa0IsQ0FBQ0UsV0FBbkIsQ0FBK0IsMENBQS9CLENBQTFCLEVBQXNHO0FBQ3JHLGFBQU8sS0FBUDtBQUNBOztBQUVELFFBQUlxQixjQUFjLENBQUM1QixLQUFmLENBQXFCLEdBQXJCLEVBQTBCdUIsTUFBMUIsS0FBcUMsQ0FBckMsSUFBMENxQyxTQUFTLENBQUNuRCxPQUFWLENBQWtCLEdBQWxCLElBQXlCLENBQXZFLEVBQTBFO0FBQ3pFO0FBQ0FzRCxNQUFBQSxhQUFhLEdBQUcsQ0FBQzNCLDRCQUE0QixDQUFDVCxNQUFELEVBQVNDLGNBQVQsRUFBeUJnQyxTQUF6QixDQUE3QztBQUNBLEtBSEQsTUFHTztBQUNORyxNQUFBQSxhQUFhLEdBQUcsQ0FBQ25CLHdCQUF3QixDQUFDakIsTUFBRCxFQUFTQyxjQUFULEVBQXlCZ0MsU0FBekIsQ0FBekM7QUFDQSxLQTFCMkgsQ0EyQjVIOzs7QUFDQSxRQUFJRyxhQUFhLElBQUkxRCxrQkFBckIsRUFBeUM7QUFDeEMsVUFBTTRELGlCQUFpQixHQUFHN0QsbUJBQW1CLENBQUNDLGtCQUFELENBQTdDOztBQUNBLFVBQUk0RCxpQkFBSixFQUF1QjtBQUN0QkYsUUFBQUEsYUFBYSxHQUFHcEUsV0FBVyxDQUFDYyxPQUFaLENBQW9Cd0QsaUJBQXBCLE1BQTJDLENBQUMsQ0FBNUQ7QUFDQSxPQUZELE1BRU87QUFDTkYsUUFBQUEsYUFBYSxHQUFHLEtBQWhCO0FBQ0E7QUFDRDs7QUFFRCxXQUFPQSxhQUFQO0FBQ0E7O0FBQ0QsV0FBU0csZ0JBQVQsQ0FBMEJDLFFBQTFCLEVBQXlDO0FBQ3hDLFdBQU9DLGVBQWUsQ0FBQ0QsUUFBRCxDQUFmLENBQTBCRCxnQkFBMUIsRUFBUDtBQUNBOztBQUNELFdBQVNHLE9BQVQsR0FBbUI7QUFDbEIsUUFBTUMsS0FBSyxHQUFHQyxNQUFNLENBQUNDLFFBQVAsQ0FBZ0JDLElBQTlCO0FBQ0EsV0FBT0gsS0FBSyxDQUFDdEUsS0FBTixDQUFZLEdBQVosRUFBaUIsQ0FBakIsQ0FBUDtBQUNBOztBQUNELFdBQVMwRSxhQUFULENBQXVCQyxpQkFBdkIsRUFBK0NDLGVBQS9DLEVBQXFFQyxNQUFyRSxFQUFrRjtBQUNqRixRQUFNQyxtQkFBbUIsR0FBR0MsV0FBVyxDQUFDYixnQkFBWixDQUE2QlMsaUJBQTdCLENBQTVCO0FBQ0EsV0FBT0csbUJBQW1CLENBQUNFLFFBQXBCLENBQTZCO0FBQ25DQyxNQUFBQSxjQUFjLEVBQUVMLGVBRG1CO0FBRW5DTSxNQUFBQSxNQUFNLEVBQUVMO0FBRjJCLEtBQTdCLENBQVA7QUFJQSxHLENBQ0Q7OztBQUNBLFdBQVNNLGVBQVQsQ0FBeUJDLFFBQXpCLEVBQXdDO0FBQ3ZDLFFBQU1DLFdBQVcsR0FBRyxFQUFwQjtBQUNBLFFBQU1DLFlBQVksR0FBR0MsTUFBTSxDQUFDQyxJQUFQLENBQVlKLFFBQVosQ0FBckI7QUFDQSxRQUFJSyxnQkFBSjs7QUFDQSxTQUFLLElBQUlyRSxDQUFDLEdBQUcsQ0FBYixFQUFnQkEsQ0FBQyxHQUFHa0UsWUFBWSxDQUFDL0QsTUFBakMsRUFBeUNILENBQUMsRUFBMUMsRUFBOEM7QUFDN0NxRSxNQUFBQSxnQkFBZ0IsR0FBRztBQUNsQix5QkFBaUI7QUFDaEIsMkJBQWlCSCxZQUFZLENBQUNsRSxDQUFEO0FBRGIsU0FEQztBQUlsQixrQ0FBMEJnRSxRQUFRLENBQUNFLFlBQVksQ0FBQ2xFLENBQUQsQ0FBYjtBQUpoQixPQUFuQjtBQU1BaUUsTUFBQUEsV0FBVyxDQUFDSyxJQUFaLENBQWlCRCxnQkFBakI7QUFDQTs7QUFFRCxXQUFPSixXQUFQO0FBQ0E7QUFDRDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7OztBQUNBLFdBQVNNLHdCQUFULENBQWtDQyxNQUFsQyxFQUErQ0MsZ0JBQS9DLEVBQXNFQyxhQUF0RSxFQUEwRkMsTUFBMUYsRUFBdUc7QUFDdEcsU0FBSyxJQUFJM0UsQ0FBQyxHQUFHLENBQWIsRUFBZ0JBLENBQUMsR0FBR3dFLE1BQU0sQ0FBQ3JFLE1BQTNCLEVBQW1DSCxDQUFDLEVBQXBDLEVBQXdDO0FBQ3ZDLFVBQU00RSxLQUFLLEdBQUdKLE1BQU0sQ0FBQ3hFLENBQUQsQ0FBcEI7QUFDQSxVQUFNNkUsT0FBTyxHQUFHRCxLQUFLLENBQUNFLE1BQXRCO0FBQ0EsVUFBTUMsT0FBTyxHQUFHRixPQUFPLENBQUNqRyxLQUFSLENBQWMsR0FBZCxFQUFtQixDQUFuQixFQUFzQkEsS0FBdEIsQ0FBNEIsR0FBNUIsRUFBaUMsQ0FBakMsQ0FBaEI7O0FBQ0EsVUFBSTZGLGdCQUFnQixJQUFJQSxnQkFBZ0IsQ0FBQ3BGLE9BQWpCLENBQXlCMEYsT0FBekIsTUFBc0MsQ0FBQyxDQUEvRCxFQUFrRTtBQUNqRUosUUFBQUEsTUFBTSxDQUFDTCxJQUFQLENBQVk7QUFDWFUsVUFBQUEsSUFBSSxFQUFFSixLQUFLLENBQUNJLElBREQ7QUFFWEMsVUFBQUEsZUFBZSxFQUFFSixPQUFPLENBQUNqRyxLQUFSLENBQWMsR0FBZCxFQUFtQixDQUFuQixFQUFzQkEsS0FBdEIsQ0FBNEIsR0FBNUIsRUFBaUMsQ0FBakMsQ0FGTjtBQUdYc0csVUFBQUEsWUFBWSxFQUFFSCxPQUFPLENBQUNuRyxLQUFSLENBQWMsR0FBZCxFQUFtQixDQUFuQixDQUhIO0FBSVh1RyxVQUFBQSxZQUFZLEVBQUVUO0FBSkgsU0FBWjtBQU1BO0FBQ0Q7QUFDRDtBQUNEO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7O0FBQ0EsV0FBU1Usa0JBQVQsQ0FBNEJDLDBCQUE1QixFQUE2REMsZUFBN0QsRUFBbUZDLGdCQUFuRixFQUEwR2YsTUFBMUcsRUFBdUg7QUFDdEgsUUFBSUEsTUFBTSxJQUFJQSxNQUFNLENBQUNyRSxNQUFQLEdBQWdCLENBQTlCLEVBQWlDO0FBQ2hDLFVBQU1zRSxnQkFBZ0IsR0FBR1ksMEJBQTBCLENBQUNHLGtCQUEzQixHQUFnREgsMEJBQTBCLENBQUNHLGtCQUEzRSxHQUFnRyxFQUF6SDtBQUNBLFVBQU12QixXQUFXLEdBQUdvQiwwQkFBMEIsQ0FBQ0ksT0FBM0IsR0FBcUMxQixlQUFlLENBQUNzQiwwQkFBMEIsQ0FBQ0ksT0FBNUIsQ0FBcEQsR0FBMkYsRUFBL0c7QUFDQSxVQUFNZixhQUFhLEdBQUc7QUFBRWdCLFFBQUFBLGtCQUFrQixFQUFFSixlQUF0QjtBQUF1Q0ssUUFBQUEscUJBQXFCLEVBQUUxQjtBQUE5RCxPQUF0Qjs7QUFDQU0sTUFBQUEsd0JBQXdCLENBQUNDLE1BQUQsRUFBU0MsZ0JBQVQsRUFBMkJDLGFBQTNCLEVBQTBDYSxnQkFBMUMsQ0FBeEI7QUFDQTtBQUNEOztBQUNELFdBQVNLLHFCQUFULENBRUNOLGVBRkQsRUFHQ08sTUFIRCxFQUlDdEMsaUJBSkQsRUFLQ3VDLFFBTEQsRUFNQy9GLFVBTkQsRUFPQ2dHLFNBUEQsRUFRRTtBQUNELFFBQU1yQyxtQkFBbUIsR0FBR1osZ0JBQWdCLENBQUNTLGlCQUFELENBQTVDO0FBQ0EsUUFBTUUsTUFBVyxHQUFHLEVBQXBCO0FBQ0EsUUFBSXVDLGNBQWMsR0FBRyxFQUFyQjtBQUFBLFFBQ0NDLGNBQWMsR0FBRyxFQURsQjtBQUVBLFFBQUlDLDBCQUFKO0FBQ0EsUUFBSUMscUJBQTRCLEdBQUcsRUFBbkM7QUFDQSxRQUFJMUIsZ0JBQXVCLEdBQUcsRUFBOUI7O0FBRUEsUUFBSW9CLE1BQUosRUFBWTtBQUNYLFVBQUlDLFFBQVEsSUFBSUEsUUFBUSxDQUFDM0YsTUFBVCxHQUFrQixDQUFsQyxFQUFxQztBQUNwQyxhQUFLLElBQUlpRyxDQUFDLEdBQUcsQ0FBYixFQUFnQkEsQ0FBQyxHQUFHTixRQUFRLENBQUMzRixNQUE3QixFQUFxQ2lHLENBQUMsRUFBdEMsRUFBMEM7QUFDekMsY0FBTUMsT0FBTyxHQUFHUCxRQUFRLENBQUNNLENBQUQsQ0FBUixDQUFZN0UsYUFBNUI7O0FBQ0EsY0FBSSxDQUFDa0MsTUFBTSxDQUFDNEMsT0FBRCxDQUFYLEVBQXNCO0FBQ3JCNUMsWUFBQUEsTUFBTSxDQUFDNEMsT0FBRCxDQUFOLEdBQWtCO0FBQUVDLGNBQUFBLEtBQUssRUFBRVQsTUFBTSxDQUFDUSxPQUFEO0FBQWYsYUFBbEI7QUFDQTtBQUNEO0FBQ0QsT0FQRCxNQU9PO0FBQ047QUFDQSxZQUFNRSxjQUFjLEdBQUd4RyxVQUFVLENBQUNPLFNBQVgsQ0FBcUJ5RixTQUFTLEdBQUcsYUFBakMsQ0FBdkI7O0FBQ0EsYUFBSyxJQUFNUyxHQUFYLElBQWtCRCxjQUFsQixFQUFrQztBQUNqQyxjQUFNRSxPQUFPLEdBQUdGLGNBQWMsQ0FBQ0MsR0FBRCxDQUE5Qjs7QUFDQSxjQUFJLENBQUMvQyxNQUFNLENBQUNnRCxPQUFELENBQVgsRUFBc0I7QUFDckJoRCxZQUFBQSxNQUFNLENBQUNnRCxPQUFELENBQU4sR0FBa0I7QUFBRUgsY0FBQUEsS0FBSyxFQUFFVCxNQUFNLENBQUNZLE9BQUQ7QUFBZixhQUFsQjtBQUNBO0FBQ0Q7QUFDRDtBQUNELEtBM0JBLENBNEJEOzs7QUFFQSxRQUFNQyxhQUFhLEdBQUdDLGFBQWEsQ0FBQ3BELGlCQUFELENBQWIsQ0FBaUNxRCxXQUFqQyxFQUF0QjtBQUNBLFFBQU1yQixnQkFBdUIsR0FBRyxFQUFoQzs7QUFDQSxRQUFJbUIsYUFBYSxDQUFDRyx5QkFBbEIsRUFBNkM7QUFDNUMsVUFBTUMsZUFBZSxHQUFHM0MsTUFBTSxDQUFDQyxJQUFQLENBQVlzQyxhQUFhLENBQUNHLHlCQUExQixDQUF4Qjs7QUFDQSxXQUFLLElBQUlMLElBQUcsR0FBRyxDQUFmLEVBQWtCQSxJQUFHLEdBQUdNLGVBQWUsQ0FBQzNHLE1BQXhDLEVBQWdEcUcsSUFBRyxFQUFuRCxFQUF1RDtBQUN0RGxELFFBQUFBLGFBQWEsQ0FBQ0MsaUJBQUQsRUFBb0J1RCxlQUFlLENBQUNOLElBQUQsQ0FBbkMsRUFBMEMvQyxNQUExQyxDQUFiLENBQ0VzRCxJQURGLENBRUUzQixrQkFBa0IsQ0FBQzRCLElBQW5CLENBQ0MsSUFERCxFQUVDTixhQUFhLENBQUNHLHlCQUFkLENBQXdDQyxlQUFlLENBQUNOLElBQUQsQ0FBdkQsQ0FGRCxFQUdDbEIsZUFIRCxFQUlDQyxnQkFKRCxDQUZGLEVBU0UwQixLQVRGLENBU1EsVUFBU0MsTUFBVCxFQUFzQjtBQUM1QkMsVUFBQUEsR0FBRyxDQUFDQyxLQUFKLENBQVUsbUNBQVYsRUFBK0NGLE1BQS9DO0FBQ0EsU0FYRjtBQVlBO0FBQ0Q7O0FBRUQsYUFBU0csOEJBQVQsR0FBMEM7QUFDekMsVUFBTUMsVUFBVSxHQUFHNUQsbUJBQW1CLENBQUM2RCxjQUFwQixDQUFtQ0MsUUFBUSxDQUFDcEUsUUFBVCxDQUFrQkMsSUFBckQsQ0FBbkI7QUFDQTJDLE1BQUFBLGNBQWMsR0FBR3NCLFVBQVUsQ0FBQ3pELGNBQTVCLENBRnlDLENBRUc7O0FBQzVDb0MsTUFBQUEsY0FBYyxHQUFHcUIsVUFBVSxDQUFDRyxNQUE1QjtBQUNBLGFBQU9uRSxhQUFhLENBQUNDLGlCQUFELEVBQW9CeUMsY0FBcEIsRUFBb0N2QyxNQUFwQyxDQUFwQjtBQUNBOztBQUVENEQsSUFBQUEsOEJBQThCLEdBQzVCTixJQURGLENBQ08sVUFBU3ZDLE1BQVQsRUFBc0I7QUFDM0IsVUFBSUEsTUFBTSxJQUFJQSxNQUFNLENBQUNyRSxNQUFQLEdBQWdCLENBQTlCLEVBQWlDO0FBQ2hDLFlBQU11RSxhQUFrQixHQUFHLEVBQTNCO0FBQ0EsWUFBTWdELG1CQUEwQixHQUFHLEVBQW5DO0FBQ0EsWUFBTWxILGNBQWMsR0FBR3VGLFNBQVMsR0FBRyxHQUFuQztBQUNBLFlBQU00QixlQUFlLEdBQUc1QixTQUFTLEdBQUcsSUFBcEM7QUFDQSxZQUFNNkIscUJBQXFCLEdBQUc3SCxVQUFVLENBQUNPLFNBQVgsQ0FBcUJFLGNBQXJCLENBQTlCO0FBQ0EwRixRQUFBQSwwQkFBMEIsR0FBRzJCLDZCQUE2QixDQUFDRCxxQkFBRCxFQUF3QjVCLGNBQXhCLENBQTFEOztBQUNBLFlBQUksQ0FBQ0UsMEJBQTBCLENBQUM0QixlQUFoQyxFQUFpRDtBQUNoRCxjQUFNQyxzQkFBc0IsR0FBR2hJLFVBQVUsQ0FBQ08sU0FBWCxDQUFxQnFILGVBQXJCLENBQS9CO0FBQ0F6QixVQUFBQSwwQkFBMEIsR0FBRzJCLDZCQUE2QixDQUFDRSxzQkFBRCxFQUF5Qi9CLGNBQXpCLENBQTFEO0FBQ0E7O0FBQ0R2QixRQUFBQSxnQkFBZ0IsR0FBR3lCLDBCQUEwQixDQUFDOEIsbUJBQTlDLENBWGdDLENBWWhDOztBQUNBdkQsUUFBQUEsZ0JBQWdCLENBQUNILElBQWpCLENBQXNCMkIsY0FBdEI7QUFDQXZCLFFBQUFBLGFBQWEsQ0FBQ2dCLGtCQUFkLEdBQW1DSixlQUFuQztBQUNBWixRQUFBQSxhQUFhLENBQUNpQixxQkFBZCxHQUFzQ08sMEJBQTBCLENBQUMrQixTQUFqRTs7QUFDQTFELFFBQUFBLHdCQUF3QixDQUFDQyxNQUFELEVBQVNDLGdCQUFULEVBQTJCQyxhQUEzQixFQUEwQ2dELG1CQUExQyxDQUF4Qjs7QUFDQXZCLFFBQUFBLHFCQUFxQixHQUFHdUIsbUJBQW1CLENBQUNRLE1BQXBCLENBQTJCM0MsZ0JBQTNCLENBQXhCLENBakJnQyxDQWtCaEM7O0FBQ0FoQyxRQUFBQSxpQkFBaUIsQ0FBQzRFLGlCQUFsQixDQUFvQyxVQUFwQyxFQUFnREMsV0FBaEQsQ0FBNEQsd0JBQTVELEVBQXNGakMscUJBQXFCLENBQUNoRyxNQUF0QixHQUErQixDQUFySDtBQUNBb0QsUUFBQUEsaUJBQWlCLENBQUM0RSxpQkFBbEIsQ0FBb0MsVUFBcEMsRUFBZ0RDLFdBQWhELENBQTRELG1CQUE1RCxFQUFpRmpDLHFCQUFqRjtBQUNBLE9BckJELE1BcUJPO0FBQ041QyxRQUFBQSxpQkFBaUIsQ0FBQzRFLGlCQUFsQixDQUFvQyxVQUFwQyxFQUFnREMsV0FBaEQsQ0FBNEQsd0JBQTVELEVBQXNGLEtBQXRGO0FBQ0E7QUFDRCxLQTFCRixFQTJCRW5CLEtBM0JGLENBMkJRLFVBQVNDLE1BQVQsRUFBc0I7QUFDNUJDLE1BQUFBLEdBQUcsQ0FBQ0MsS0FBSixDQUFVLG1CQUFWLEVBQStCRixNQUEvQjtBQUNBLEtBN0JGO0FBOEJBLFdBQU9mLHFCQUFQO0FBQ0E7O0FBQ0QsV0FBUzBCLDZCQUFULENBQXVDUSxrQkFBdkMsRUFBZ0VyQyxjQUFoRSxFQUFxRjtBQUNwRixRQUFNRSwwQkFBMEIsR0FBRztBQUNsQzRCLE1BQUFBLGVBQWUsRUFBRSxLQURpQjtBQUVsQ0UsTUFBQUEsbUJBQW1CLEVBQUUsRUFGYTtBQUdsQ0MsTUFBQUEsU0FBUyxFQUFFO0FBSHVCLEtBQW5DO0FBS0EsUUFBSUssc0JBQUosRUFBNEJDLHFCQUE1QjtBQUNBLFFBQUlDLFVBQUo7O0FBQ0EsU0FBSyxJQUFNaEMsR0FBWCxJQUFrQjZCLGtCQUFsQixFQUFzQztBQUNyQyxVQUFJN0IsR0FBRyxDQUFDbkgsT0FBSixDQUFZLCtDQUFaLElBQStELENBQUMsQ0FBaEUsSUFBcUVnSixrQkFBa0IsQ0FBQzdCLEdBQUQsQ0FBbEIsS0FBNEJSLGNBQXJHLEVBQXFIO0FBQ3BIRSxRQUFBQSwwQkFBMEIsQ0FBQzRCLGVBQTNCLEdBQTZDLElBQTdDO0FBQ0FRLFFBQUFBLHNCQUFzQixHQUFHLHVEQUF6QjtBQUNBQyxRQUFBQSxxQkFBcUIsR0FBRyxrRUFBeEI7O0FBRUEsWUFBSS9CLEdBQUcsQ0FBQ25ILE9BQUosQ0FBWSxHQUFaLElBQW1CLENBQUMsQ0FBeEIsRUFBMkI7QUFDMUJtSixVQUFBQSxVQUFVLEdBQUdoQyxHQUFHLENBQUM1SCxLQUFKLENBQVUsR0FBVixFQUFlLENBQWYsQ0FBYjtBQUNBMEosVUFBQUEsc0JBQXNCLEdBQUdBLHNCQUFzQixHQUFHLEdBQXpCLEdBQStCRSxVQUF4RDtBQUNBRCxVQUFBQSxxQkFBcUIsR0FBR0EscUJBQXFCLEdBQUcsR0FBeEIsR0FBOEJDLFVBQXREO0FBQ0E7O0FBRUR0QyxRQUFBQSwwQkFBMEIsQ0FBQytCLFNBQTNCLEdBQXVDL0IsMEJBQTBCLENBQUMrQixTQUEzQixDQUFxQ0MsTUFBckMsQ0FBNENHLGtCQUFrQixDQUFDQyxzQkFBRCxDQUE5RCxDQUF2QztBQUNBcEMsUUFBQUEsMEJBQTBCLENBQUM4QixtQkFBM0IsR0FBaUQ5QiwwQkFBMEIsQ0FBQzhCLG1CQUEzQixDQUErQ0UsTUFBL0MsQ0FDaERHLGtCQUFrQixDQUFDRSxxQkFBRCxDQUQ4QixDQUFqRDtBQUlBO0FBQ0E7QUFDRDs7QUFDRCxXQUFPckMsMEJBQVA7QUFDQTs7QUFDRCxXQUFTdUMsMEJBQVQsQ0FBb0NsRixpQkFBcEMsRUFBNEQ7QUFDM0QsUUFBTXhELFVBQVUsR0FBR3dELGlCQUFpQixDQUFDbUYsUUFBbEIsR0FBNkJDLFlBQTdCLEVBQW5CO0FBQ0EsUUFBTXJELGVBQWUsR0FBRy9CLGlCQUFpQixDQUFDNEUsaUJBQWxCLEVBQXhCO0FBQ0EsUUFBTVMsS0FBSyxHQUFHdEQsZUFBZSxJQUFJQSxlQUFlLENBQUN1RCxPQUFoQixFQUFqQztBQUNBLFFBQU05QyxTQUFTLEdBQUdoRyxVQUFVLENBQUMrSSxXQUFYLENBQXVCRixLQUF2QixDQUFsQixDQUoyRCxDQUszRDs7QUFDQSxRQUFNRyxzQkFBc0IsR0FBR2hELFNBQVMsR0FBRyxHQUFaLEdBQWtCLDZDQUFqRCxDQU4yRCxDQU8zRDs7QUFDQSxRQUFNRCxRQUFRLEdBQUcvRixVQUFVLENBQUNPLFNBQVgsQ0FBcUJ5SSxzQkFBckIsQ0FBakIsQ0FSMkQsQ0FTM0Q7O0FBQ0EsUUFBTWxELE1BQU0sR0FBR1AsZUFBZSxDQUFDaEYsU0FBaEIsRUFBZjs7QUFDQSxRQUFJLENBQUN1RixNQUFMLEVBQWE7QUFDWlAsTUFBQUEsZUFBZSxDQUNiMEQsYUFERixHQUVFakMsSUFGRixDQUVPLFVBQVNsQixNQUFULEVBQXNCO0FBQzNCLGVBQU9ELHFCQUFxQixDQUFDTixlQUFELEVBQWtCTyxNQUFsQixFQUEwQnRDLGlCQUExQixFQUE2Q3VDLFFBQTdDLEVBQXVEL0YsVUFBdkQsRUFBbUVnRyxTQUFuRSxDQUE1QjtBQUNBLE9BSkYsRUFLRWtCLEtBTEYsQ0FLUSxVQUFTQyxNQUFULEVBQXNCO0FBQzVCQyxRQUFBQSxHQUFHLENBQUNDLEtBQUosQ0FBVSx1Q0FBVixFQUFtREYsTUFBbkQ7QUFDQSxPQVBGO0FBUUEsS0FURCxNQVNPO0FBQ04sYUFBT3RCLHFCQUFxQixDQUFDTixlQUFELEVBQWtCTyxNQUFsQixFQUEwQnRDLGlCQUExQixFQUE2Q3VDLFFBQTdDLEVBQXVEL0YsVUFBdkQsRUFBbUVnRyxTQUFuRSxDQUE1QjtBQUNBO0FBQ0Q7QUFDRDtBQUNBO0FBQ0E7OztBQUNBLFdBQVNrRCxpQkFBVCxDQUEyQkMsT0FBM0IsRUFBeUM7QUFDeEMsUUFBTUMsZ0JBQWdCLEdBQUcsQ0FBQyxjQUFELEVBQWlCLDZCQUFqQixDQUF6Qjs7QUFDQSxRQUFJRCxPQUFPLElBQUlDLGdCQUFnQixDQUFDOUosT0FBakIsQ0FBeUI2SixPQUFPLENBQUNFLFdBQVIsR0FBc0JDLE9BQXRCLEVBQXpCLE1BQThELENBQUMsQ0FBMUUsSUFBK0VILE9BQU8sQ0FBQ0ksVUFBUixFQUEvRSxJQUF1R0osT0FBTyxDQUFDSyxVQUFSLEVBQTNHLEVBQWlJO0FBQ2hJTCxNQUFBQSxPQUFPLENBQUNNLFNBQVI7QUFDQTtBQUNEOztBQUNELFdBQVNDLHdCQUFULENBQWtDQyxNQUFsQyxFQUErQztBQUM5QyxRQUFJQSxNQUFNLEtBQUssTUFBWCxJQUFxQkEsTUFBTSxLQUFLLElBQXBDLEVBQTBDO0FBQ3pDLGFBQU8sSUFBUDtBQUNBLEtBRkQsTUFFTztBQUNOLGFBQU8sS0FBUDtBQUNBO0FBQ0Q7O0FBQ0QsV0FBUzFHLGVBQVQsQ0FBeUJELFFBQXpCLEVBQXNEO0FBQ3JELFFBQUlBLFFBQVEsQ0FBQzRHLEdBQVQsQ0FBYSwwQkFBYixDQUFKLEVBQThDO0FBQzdDLGFBQU81RyxRQUFQO0FBQ0E7O0FBQ0QsUUFBTTZHLE1BQU0sR0FBR0MsU0FBUyxDQUFDQyxvQkFBVixDQUErQi9HLFFBQS9CLENBQWY7O0FBQ0EsUUFBSSxDQUFDNkcsTUFBTCxFQUFhO0FBQ1osYUFBTzdHLFFBQVA7QUFDQSxLQUZELE1BRU87QUFDTixhQUFPQyxlQUFlLENBQUM0RyxNQUFELENBQXRCO0FBQ0E7QUFDRDs7QUFDRCxXQUFTakQsYUFBVCxDQUF1QjVELFFBQXZCLEVBQXNDO0FBQ3JDLFFBQUlBLFFBQVEsSUFBSUEsUUFBUSxDQUFDNEcsR0FBVCxDQUFhLGdDQUFiLENBQWhCLEVBQWdFO0FBQy9ENUcsTUFBQUEsUUFBUSxHQUFHQSxRQUFRLENBQUNnSCxvQkFBVCxFQUFYO0FBQ0FoSCxNQUFBQSxRQUFRLEdBQUdBLFFBQVEsSUFBSUEsUUFBUSxDQUFDaUgsY0FBVCxFQUF2QjtBQUNBOztBQUNELFdBQU9qSCxRQUFRLElBQUksRUFBRUEsUUFBUSxZQUFZa0gsSUFBdEIsQ0FBbkIsRUFBZ0Q7QUFDL0NsSCxNQUFBQSxRQUFRLEdBQUdBLFFBQVEsQ0FBQ21ILFNBQVQsRUFBWDtBQUNBOztBQUNELFdBQU9uSCxRQUFQO0FBQ0E7QUFDRDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7O0FBQ0EsV0FBU29ILDJDQUFULENBQ0NDLGlCQURELEVBRUNDLGdCQUZELEVBR0MxSyxRQUhELEVBSUMySyxXQUpELEVBS0NDLGtCQUxELEVBTUU7QUFDRCxRQUFNaEssTUFBTSxHQUFHWixRQUFRLENBQUMrSSxRQUFULEVBQWY7QUFDQSxRQUFJOEIsWUFBWSxHQUFHLEtBQW5CO0FBQ0EsUUFBTUMsZ0JBQWdCLEdBQUdsSyxNQUFNLENBQUNtSyxXQUFQLENBQW1CL0ssUUFBUSxDQUFDa0osT0FBVCxLQUFxQiwwQkFBeEMsRUFBb0U4QixlQUFwRSxFQUF6QjtBQUVBLFFBQU1DLHNCQUFzQixHQUFHQyxXQUFXLENBQUNQLFdBQVcsQ0FBQ1EsT0FBWixFQUFELENBQTFDO0FBQ0EsUUFBTUMsd0JBQXdCLEdBQUcsQ0FBQ0gsc0JBQUQsR0FDOUJSLGlCQUQ4QixHQUU5QixZQUF5QjtBQUN6QlksTUFBQUEsVUFBVSxDQUFDVixXQUFXLENBQUNRLE9BQVosRUFBRCxDQUFWOztBQUR5Qix3Q0FBYkcsSUFBYTtBQUFiQSxRQUFBQSxJQUFhO0FBQUE7O0FBRXpCYixNQUFBQSxpQkFBaUIsQ0FBQ2MsS0FBbEIsT0FBQWQsaUJBQWlCLEdBQU8sSUFBUCxTQUFnQmEsSUFBaEIsRUFBakI7QUFDQyxLQUxKOztBQU9BLFFBQ0N0TCxRQUFRLElBQ1JBLFFBQVEsQ0FBQ1csU0FBVCxFQURBLEtBRUMsQ0FBQ1gsUUFBUSxDQUFDVyxTQUFULEdBQXFCNkssdUJBQXRCLElBQWlEeEwsUUFBUSxDQUFDVyxTQUFULEdBQXFCOEssY0FBckIsS0FBd0MsSUFGMUYsQ0FERCxFQUlFO0FBQ0RoQixNQUFBQSxpQkFBaUI7QUFDakIsS0FORCxNQU1PO0FBQ05LLE1BQUFBLGdCQUFnQixDQUNkekIsYUFERixHQUVFakMsSUFGRixDQUVPLFVBQVNzRSxjQUFULEVBQThCO0FBQ25DLFlBQUlBLGNBQUosRUFBb0I7QUFDbkJiLFVBQUFBLFlBQVksR0FBRyxFQUFFYSxjQUFjLENBQUNDLGdCQUFmLEtBQW9DRCxjQUFjLENBQUNFLGtCQUFyRCxDQUFmOztBQUNBLGNBQUlmLFlBQUosRUFBa0I7QUFDakJnQixZQUFBQSw4QkFBOEIsQ0FBQ1Qsd0JBQUQsRUFBMkJWLGdCQUEzQixFQUE2Q0MsV0FBN0MsRUFBMERDLGtCQUExRCxDQUE5QjtBQUNBLFdBRkQsTUFFTztBQUNOUSxZQUFBQSx3QkFBd0I7QUFDeEI7QUFDRCxTQVBELE1BT087QUFDTlgsVUFBQUEsaUJBQWlCO0FBQ2pCO0FBQ0QsT0FiRixFQWNFbkQsS0FkRixDQWNRLFVBQVNDLE1BQVQsRUFBc0I7QUFDNUJDLFFBQUFBLEdBQUcsQ0FBQ0MsS0FBSixDQUFVLDhDQUFWLEVBQTBERixNQUExRDtBQUNBLE9BaEJGO0FBaUJBO0FBQ0Q7O0FBQ0QsV0FBU3VFLDZCQUFULENBQXVDQyxTQUF2QyxFQUE0RDNJLFFBQTVELEVBQTJFNEksZ0JBQTNFLEVBQXFHO0FBQ3BHLFFBQU1DLFdBQVcsR0FBRzdJLFFBQVEsQ0FBQzJGLFFBQVQsQ0FBa0IsSUFBbEIsRUFBd0J2SixXQUF4QixDQUFvQyxhQUFwQyxDQUFwQjtBQUFBLFFBQ0MwTSxlQUFlLEdBQUdDLEdBQUcsQ0FBQ0MsRUFBSixDQUFPQyxPQUFQLEdBQWlCQyx3QkFBakIsQ0FBMEMsa0JBQTFDLENBRG5CO0FBQUEsUUFFQ0MsV0FBVyxHQUFHTCxlQUFlLElBQUlBLGVBQWUsQ0FBQ00sT0FBaEIsQ0FBd0Isb0NBQXhCLENBRmxDO0FBQUEsUUFHQ0MsaUJBQWlCLEdBQUdQLGVBQWUsSUFBSUEsZUFBZSxDQUFDTSxPQUFoQixDQUF3QiwrQ0FBeEIsQ0FIeEM7QUFBQSxRQUlDRSxnQkFBZ0IsR0FBR1IsZUFBZSxJQUFJQSxlQUFlLENBQUNNLE9BQWhCLENBQXdCLDhDQUF4QixDQUp2Qzs7QUFNQSxRQUFJUixnQkFBZ0IsS0FBS3ROLGdCQUFnQixDQUFDaU8sTUFBdEMsSUFBZ0RWLFdBQXBELEVBQWlFO0FBQ2hFLGFBQU9XLFVBQVUsQ0FBQ0MsT0FBWCxDQUFtQk4sV0FBbkIsRUFBZ0M7QUFDdENPLFFBQUFBLE9BQU8sRUFBRSxDQUFDTCxpQkFBRCxFQUFvQkMsZ0JBQXBCLENBRDZCO0FBRXRDSyxRQUFBQSxPQUFPLEVBQUUsVUFBUzNILE9BQVQsRUFBdUI7QUFDL0IsY0FBSUEsT0FBTyxLQUFLcUgsaUJBQWhCLEVBQW1DO0FBQ2xDLGdCQUFNTyxjQUFjLEdBQUc1SixRQUFRLElBQUlBLFFBQVEsQ0FBQzJGLFFBQVQsQ0FBa0IsVUFBbEIsQ0FBbkM7QUFFQXZCLFlBQUFBLEdBQUcsQ0FBQ3lGLElBQUosQ0FBUyx1QkFBVDs7QUFDQSxnQkFBSUQsY0FBSixFQUFvQjtBQUNuQkEsY0FBQUEsY0FBYyxDQUFDdkUsV0FBZixDQUEyQixZQUEzQixFQUF5QyxLQUF6QztBQUNBLGFBRkQsTUFFTztBQUNOakIsY0FBQUEsR0FBRyxDQUFDcUYsT0FBSixDQUFZLGtDQUFaO0FBQ0E7O0FBQ0RkLFlBQUFBLFNBQVM7QUFDVCxXQVZELE1BVU87QUFDTnZFLFlBQUFBLEdBQUcsQ0FBQ3lGLElBQUosQ0FBUyxzQkFBVDtBQUNBO0FBQ0Q7QUFoQnFDLE9BQWhDLENBQVA7QUFrQkE7O0FBQ0QsV0FBT2xCLFNBQVMsRUFBaEI7QUFDQTs7QUFDRCxXQUFTbUIsOEJBQVQsQ0FBd0NDLGlCQUF4QyxFQUFtRUMsVUFBbkUsRUFBb0Y7QUFDbkYsUUFBSUMsYUFBYSxHQUFHLEtBQXBCO0FBQ0EsUUFBTUMsTUFBTSxHQUFHSCxpQkFBaUIsQ0FBQ2xPLEtBQWxCLENBQXdCLEdBQXhCLENBQWYsQ0FGbUYsQ0FHbkY7O0FBQ0EsUUFBSXFPLE1BQU0sQ0FBQzlNLE1BQVAsR0FBZ0IsQ0FBcEIsRUFBdUI7QUFDdEI2TSxNQUFBQSxhQUFhLEdBQUdELFVBQVUsQ0FBQ0UsTUFBTSxDQUFDLENBQUQsQ0FBUCxDQUFWLElBQXlCRixVQUFVLENBQUNFLE1BQU0sQ0FBQyxDQUFELENBQVAsQ0FBVixDQUFzQkMsY0FBdEIsQ0FBcUNELE1BQU0sQ0FBQyxDQUFELENBQTNDLENBQXpCLElBQTRFRixVQUFVLENBQUNFLE1BQU0sQ0FBQyxDQUFELENBQVAsQ0FBVixDQUFzQkEsTUFBTSxDQUFDLENBQUQsQ0FBNUIsTUFBcUMsQ0FBakk7QUFDQSxLQUZELE1BRU87QUFDTkQsTUFBQUEsYUFBYSxHQUFHRCxVQUFVLENBQUNELGlCQUFELENBQVYsS0FBa0MsQ0FBbEQ7QUFDQTs7QUFDRCxXQUFPRSxhQUFQO0FBQ0E7O0FBQ0QsV0FBU0csbUJBQVQsQ0FBNkJDLFdBQTdCLEVBQWlEck4sVUFBakQsRUFBNkU7QUFDNUUsUUFBTXNOLGNBQWMsR0FBRyxFQUF2Qjs7QUFDQSxTQUFLLElBQUlyTixDQUFDLEdBQUcsQ0FBYixFQUFnQkEsQ0FBQyxHQUFHb04sV0FBVyxDQUFDak4sTUFBaEMsRUFBd0NILENBQUMsRUFBekMsRUFBNkM7QUFDNUMsVUFBTXNOLFVBQVUsR0FBR0YsV0FBVyxDQUFDcE4sQ0FBRCxDQUFYLENBQWV1TixTQUFsQztBQUFBLFVBQ0NSLFVBQVUsR0FBR0ssV0FBVyxDQUFDcE4sQ0FBRCxDQUFYLENBQWV3TixXQUQ3QjtBQUdBLGFBQU9ULFVBQVUsQ0FBQyxnQkFBRCxDQUFqQjtBQUNBLGFBQU9BLFVBQVUsQ0FBQyxrQkFBRCxDQUFqQjtBQUNBLGFBQU9BLFVBQVUsQ0FBQyxxQkFBRCxDQUFqQjtBQUNBLGFBQU9BLFVBQVUsQ0FBQyx1QkFBRCxDQUFqQjtBQUNBLGFBQU9BLFVBQVUsQ0FBQyxlQUFELENBQWpCO0FBQ0EsVUFBTVUsV0FBVyxHQUFHdEosTUFBTSxDQUFDQyxJQUFQLENBQVkySSxVQUFaLENBQXBCOztBQUNBLFdBQUssSUFBSTNHLENBQUMsR0FBRyxDQUFiLEVBQWdCQSxDQUFDLEdBQUdxSCxXQUFXLENBQUN0TixNQUFoQyxFQUF3Q2lHLENBQUMsRUFBekMsRUFBNkM7QUFDNUMsWUFBTXNILEtBQUssR0FBR0QsV0FBVyxDQUFDckgsQ0FBRCxDQUF6QjtBQUFBLFlBQ0N1SCxvQkFBb0IsR0FBRzVOLFVBQVUsQ0FBQ08sU0FBWCxDQUFxQixNQUFNZ04sVUFBTixHQUFtQixHQUFuQixHQUF5QkksS0FBekIsR0FBaUMsR0FBdEQsQ0FEeEI7O0FBRUEsWUFBSUMsb0JBQUosRUFBMEI7QUFDekIsY0FDQ0Esb0JBQW9CLENBQUMsOERBQUQsQ0FBcEIsSUFDQUEsb0JBQW9CLENBQUMsMERBQUQsQ0FEcEIsSUFFQUEsb0JBQW9CLENBQUMsNENBQUQsQ0FIckIsRUFJRTtBQUNELG1CQUFPWixVQUFVLENBQUNXLEtBQUQsQ0FBakI7QUFDQSxXQU5ELE1BTU8sSUFBSUMsb0JBQW9CLENBQUMsOENBQUQsQ0FBeEIsRUFBMEU7QUFDaEYsZ0JBQU1DLGFBQWEsR0FBR0Qsb0JBQW9CLENBQUMsOENBQUQsQ0FBMUM7O0FBQ0EsZ0JBQUlDLGFBQWEsQ0FBQyxhQUFELENBQWIsSUFBZ0NBLGFBQWEsQ0FBQyxhQUFELENBQWIsQ0FBNkJoUCxLQUE3QixDQUFtQyxHQUFuQyxFQUF3QyxDQUF4QyxNQUErQyxjQUFuRixFQUFtRztBQUNsRyxxQkFBT21PLFVBQVUsQ0FBQ1csS0FBRCxDQUFqQjtBQUNBLGFBRkQsTUFFTyxJQUFJRSxhQUFhLENBQUMsT0FBRCxDQUFiLElBQTBCakssV0FBVyxDQUFDa0osOEJBQVosQ0FBMkNlLGFBQWEsQ0FBQyxPQUFELENBQXhELEVBQW1FYixVQUFuRSxDQUE5QixFQUE4RztBQUNwSCxxQkFBT0EsVUFBVSxDQUFDVyxLQUFELENBQWpCO0FBQ0E7QUFDRDtBQUNEO0FBQ0Q7O0FBQ0RMLE1BQUFBLGNBQWMsQ0FBQy9JLElBQWYsQ0FBb0J5SSxVQUFwQjtBQUNBOztBQUVELFdBQU9NLGNBQVA7QUFDQTs7QUFDRCxXQUFTUSxlQUFULENBQXlCQyxPQUF6QixFQUF1Q0MsWUFBdkMsRUFBMEQ7QUFDekQsU0FBSyxJQUFNQyxJQUFYLElBQW1CRCxZQUFuQixFQUFpQztBQUNoQyxVQUFJQSxZQUFZLENBQUNDLElBQUQsQ0FBWixLQUF1QkYsT0FBTyxDQUFDRSxJQUFELENBQWxDLEVBQTBDO0FBQ3pDLGVBQU8sS0FBUDtBQUNBO0FBQ0Q7O0FBQ0QsV0FBTyxJQUFQO0FBQ0E7O0FBQ0QsV0FBU0MsMEJBQVQsQ0FBb0NsTyxVQUFwQyxFQUFnRWtCLFlBQWhFLEVBQXNGaU4sT0FBdEYsRUFBd0c7QUFDdkcsUUFBTUMsV0FBVyxHQUFHcE8sVUFBVSxDQUFDTyxTQUFYLENBQXFCVyxZQUFZLEdBQUcsR0FBcEMsS0FBNEMsRUFBaEU7QUFBQSxRQUNDbU4sV0FBZ0IsR0FBRyxFQURwQjs7QUFHQSxTQUFLLElBQU1KLElBQVgsSUFBbUJHLFdBQW5CLEVBQWdDO0FBQy9CLFVBQ0NBLFdBQVcsQ0FBQ2pCLGNBQVosQ0FBMkJjLElBQTNCLEtBQ0EsQ0FBQyxPQUFPSyxJQUFQLENBQVlMLElBQVosQ0FERCxJQUVBRyxXQUFXLENBQUNILElBQUQsQ0FBWCxDQUFrQk0sS0FGbEIsSUFHQVQsZUFBZSxDQUFDTSxXQUFXLENBQUNILElBQUQsQ0FBWixFQUFvQkUsT0FBTyxJQUFJO0FBQUVJLFFBQUFBLEtBQUssRUFBRTtBQUFULE9BQS9CLENBSmhCLEVBS0U7QUFDREYsUUFBQUEsV0FBVyxDQUFDSixJQUFELENBQVgsR0FBb0JHLFdBQVcsQ0FBQ0gsSUFBRCxDQUEvQjtBQUNBO0FBQ0Q7O0FBQ0QsV0FBT0ksV0FBUDtBQUNBOztBQUNELFdBQVNHLDBCQUFULENBQW9DeE8sVUFBcEMsRUFBZ0VrQixZQUFoRSxFQUFzRjtBQUNyRixRQUFJdU4sc0JBQUo7O0FBQ0EsUUFBSXpPLFVBQVUsSUFBSWtCLFlBQWxCLEVBQWdDO0FBQy9CdU4sTUFBQUEsc0JBQXNCLEdBQUd6TyxVQUFVLENBQUNPLFNBQVgsQ0FBcUJXLFlBQVksR0FBRyxrRUFBcEMsQ0FBekI7QUFDQTs7QUFDRCxXQUFPdU4sc0JBQVA7QUFDQTs7QUFDRCxXQUFTQyxlQUFULENBQXlCMUwsUUFBekIsRUFBd0MyTCxXQUF4QyxFQUE0RDtBQUMzRCxRQUFNQyxRQUFRLEdBQUc1TCxRQUFRLElBQUlBLFFBQVEsQ0FBQzZMLFVBQVQsRUFBN0I7O0FBQ0EsUUFBSUQsUUFBSixFQUFjO0FBQ2JBLE1BQUFBLFFBQVEsQ0FBQ2pQLE9BQVQsQ0FBaUIsVUFBU21QLE9BQVQsRUFBdUI7QUFDdkMsWUFBSUEsT0FBTyxDQUFDbEYsR0FBUixDQUFZLDhDQUFaLENBQUosRUFBaUU7QUFDaEVrRixVQUFBQSxPQUFPLEdBQUdBLE9BQU8sQ0FBQ0MsU0FBUixFQUFWO0FBQ0E7O0FBQ0QsWUFBSUQsT0FBTyxDQUFDRSxJQUFSLENBQWEsU0FBYixDQUFKLEVBQTZCO0FBQzVCTCxVQUFBQSxXQUFXLENBQUNwSyxJQUFaLENBQWlCdUssT0FBakI7QUFDQTtBQUNELE9BUEQ7QUFRQTs7QUFDRCxXQUFPSCxXQUFQO0FBQ0E7QUFDRDtBQUNBO0FBQ0E7QUFDQTs7O0FBQ0EsV0FBU00sd0NBQVQsQ0FBa0ROLFdBQWxELEVBQXNFTyxLQUF0RSxFQUFtRjtBQUNsRixRQUFNQyxPQUFZLEdBQUcsRUFBckI7O0FBQ0EsUUFBTUMsVUFBVSxHQUFHLFVBQVNDLEtBQVQsRUFBc0I7QUFDeEMsVUFBSUEsS0FBSixFQUFXO0FBQ1YsWUFBTUMsS0FBSyxHQUFHbEwsTUFBTSxDQUFDQyxJQUFQLENBQVlnTCxLQUFaLENBQWQ7QUFDQUMsUUFBQUEsS0FBSyxDQUFDM1AsT0FBTixDQUFjLFVBQVNzTyxJQUFULEVBQXVCO0FBQ3BDLGNBQUlBLElBQUksQ0FBQzNPLE9BQUwsQ0FBYSxHQUFiLE1BQXNCLENBQXRCLElBQTJCMk8sSUFBSSxDQUFDM08sT0FBTCxDQUFhLGVBQWIsTUFBa0MsQ0FBQyxDQUFsRSxFQUFxRTtBQUNwRTZQLFlBQUFBLE9BQU8sQ0FBQ2xCLElBQUQsQ0FBUCxHQUFnQjtBQUFFMUgsY0FBQUEsS0FBSyxFQUFFOEksS0FBSyxDQUFDcEIsSUFBRDtBQUFkLGFBQWhCO0FBQ0E7QUFDRCxTQUpEO0FBS0E7O0FBQ0QsVUFBSVUsV0FBVyxDQUFDdk8sTUFBaEIsRUFBd0I7QUFDdkJ1TyxRQUFBQSxXQUFXLENBQUNoUCxPQUFaLENBQW9CLFVBQVM0UCxVQUFULEVBQTBCO0FBQzdDLGNBQU1DLGVBQWUsR0FBR0QsVUFBVSxDQUFDUCxJQUFYLENBQWdCLFNBQWhCLEVBQTJCbEwsY0FBbkQ7QUFDQSxjQUFNa0IsT0FBTyxHQUFHdUssVUFBVSxDQUFDUCxJQUFYLENBQWdCLFNBQWhCLEVBQTJCdEgsTUFBM0M7QUFDQTlELFVBQUFBLFdBQVcsQ0FBQ2IsZ0JBQVosQ0FBNkJtTSxLQUE3QixFQUNFckwsUUFERixDQUNXO0FBQ1RDLFlBQUFBLGNBQWMsRUFBRTBMLGVBRFA7QUFFVDlILFlBQUFBLE1BQU0sRUFBRTFDLE9BRkM7QUFHVGpCLFlBQUFBLE1BQU0sRUFBRW9MO0FBSEMsV0FEWCxFQU1FbkksSUFORixDQU1PLFVBQVN5SSxLQUFULEVBQXFCO0FBQzFCRixZQUFBQSxVQUFVLENBQUNHLFVBQVgsQ0FBc0JILFVBQVUsQ0FBQ2hHLFVBQVgsTUFBMkJrRyxLQUEzQixJQUFvQ0EsS0FBSyxDQUFDclAsTUFBTixLQUFpQixDQUEzRTtBQUNBLFdBUkYsRUFTRThHLEtBVEYsQ0FTUSxVQUFTQyxNQUFULEVBQXNCO0FBQzVCQyxZQUFBQSxHQUFHLENBQUNDLEtBQUosQ0FBVSxrREFBVixFQUE4REYsTUFBOUQ7QUFDQSxXQVhGO0FBWUEsU0FmRDtBQWdCQTtBQUNELEtBM0JEOztBQTRCQSxRQUFJK0gsS0FBSyxJQUFJQSxLQUFLLENBQUM5RyxpQkFBTixFQUFiLEVBQXdDO0FBQUE7O0FBQ3ZDLCtCQUFDOEcsS0FBSyxDQUFDOUcsaUJBQU4sRUFBRCxnRkFDR2EsYUFESCxHQUVFakMsSUFGRixDQUVPLFVBQVNxSSxLQUFULEVBQXFCO0FBQzFCLGVBQU9ELFVBQVUsQ0FBQ0MsS0FBRCxDQUFqQjtBQUNBLE9BSkYsRUFLRW5JLEtBTEYsQ0FLUSxVQUFTQyxNQUFULEVBQXNCO0FBQzVCQyxRQUFBQSxHQUFHLENBQUNDLEtBQUosQ0FBVSxrREFBVixFQUE4REYsTUFBOUQ7QUFDQSxPQVBGO0FBUUEsS0FURCxNQVNPO0FBQ05pSSxNQUFBQSxVQUFVO0FBQ1Y7QUFDRDs7QUFDRCxXQUFTTyxpQkFBVCxDQUEyQkMsYUFBM0IsRUFBa0Q5RCxlQUFsRCxFQUFtRnFELE9BQW5GLEVBQWtHVSxjQUFsRyxFQUEySDtBQUMxSCxRQUFJQyxZQUFZLEdBQUdGLGFBQW5COztBQUNBLFFBQUk5RCxlQUFKLEVBQXFCO0FBQ3BCLFVBQUkrRCxjQUFKLEVBQW9CO0FBQ25CO0FBQ0E7QUFDQTtBQUVBO0FBQ0E7QUFDQSxZQUFNRSxrQkFBa0IsR0FBR0MseUJBQXlCLENBQ2xEbEUsZUFBRCxDQUF5Qm1FLGNBRDBCLEVBRW5ETCxhQUFhLEdBQUcsR0FBaEIsR0FBc0JDLGNBRjZCLENBQXBELENBUG1CLENBWW5CO0FBQ0E7OztBQUNBQyxRQUFBQSxZQUFZLEdBQUdDLGtCQUFrQixHQUFHSCxhQUFhLEdBQUcsR0FBaEIsR0FBc0JDLGNBQXpCLEdBQTBDRCxhQUEzRTtBQUNBOztBQUNELGFBQU85RCxlQUFlLENBQUNNLE9BQWhCLENBQXdCMEQsWUFBeEIsRUFBc0NYLE9BQXRDLENBQVA7QUFDQSxLQXBCeUgsQ0FzQjFIOzs7QUFDQXJELElBQUFBLGVBQWUsR0FBR0MsR0FBRyxDQUFDQyxFQUFKLENBQU9DLE9BQVAsR0FBaUJDLHdCQUFqQixDQUEwQyxhQUExQyxDQUFsQjtBQUNBLFdBQU9KLGVBQWUsQ0FBQ00sT0FBaEIsQ0FBd0IwRCxZQUF4QixFQUFzQ1gsT0FBdEMsQ0FBUDtBQUNBOztBQUNELFdBQVNhLHlCQUFULENBQW1DQyxjQUFuQyxFQUF3RGhDLElBQXhELEVBQW1FO0FBQ2xFLFFBQUlnQyxjQUFjLENBQUM3UCxNQUFuQixFQUEyQjtBQUMxQixXQUFLLElBQUlILENBQUMsR0FBR2dRLGNBQWMsQ0FBQzdQLE1BQWYsR0FBd0IsQ0FBckMsRUFBd0NILENBQUMsSUFBSSxDQUE3QyxFQUFnREEsQ0FBQyxFQUFqRCxFQUFxRDtBQUNwRCxZQUFNMEosTUFBTSxHQUFHc0csY0FBYyxDQUFDaFEsQ0FBRCxDQUFkLENBQWtCaVEsT0FBbEIsQ0FBMEJqQyxJQUExQixDQUFmLENBRG9ELENBRXBEOztBQUNBLFlBQUl0RSxNQUFKLEVBQVk7QUFDWCxpQkFBTyxJQUFQO0FBQ0E7O0FBQ0RxRyxRQUFBQSx5QkFBeUIsQ0FBQ0MsY0FBYyxDQUFDaFEsQ0FBRCxDQUFkLENBQWtCZ1EsY0FBbkIsRUFBbUNoQyxJQUFuQyxDQUF6QjtBQUNBO0FBQ0Q7O0FBQ0QsV0FBTyxLQUFQO0FBQ0E7O0FBQ0QsV0FBU2tDLGFBQVQsQ0FBdUJyQixPQUF2QixFQUFxQ3NCLGVBQXJDLEVBQStEQyxXQUEvRCxFQUFxRkMsaUJBQXJGLEVBQWtIO0FBQ2pIRCxJQUFBQSxXQUFXLEdBQUcsQ0FBQ0EsV0FBRCxHQUFldkIsT0FBTyxDQUFDdk8sU0FBUixDQUFrQnVPLE9BQU8sQ0FBQ2hHLE9BQVIsRUFBbEIsQ0FBZixHQUFzRHVILFdBQXBFO0FBQ0EsUUFBSW5QLFlBQVksR0FBRzROLE9BQU8sQ0FBQ2hHLE9BQVIsR0FBa0JqSyxLQUFsQixDQUF3QixJQUF4QixFQUE4QixDQUE5QixDQUFuQjtBQUNBLFFBQU0wUixlQUFlLEdBQUd6QixPQUFPLENBQUN2TyxTQUFSLENBQWtCVyxZQUFsQixFQUFnQ3NQLEtBQXhEO0FBQ0EsUUFBTUMsV0FBVyxHQUFHQyxnQkFBZ0IsQ0FBQzVCLE9BQU8sQ0FBQ25HLFFBQVIsRUFBRCxFQUFxQjRILGVBQXJCLENBQXBDOztBQUNBLFFBQUlFLFdBQUosRUFBaUI7QUFDaEJ2UCxNQUFBQSxZQUFZLEdBQUcsTUFBTXVQLFdBQXJCO0FBQ0E7O0FBQ0QsUUFBSUgsaUJBQUosRUFBdUI7QUFDdEIsYUFBT3hCLE9BQU8sQ0FBQ3ZPLFNBQVIsQ0FBa0JXLFlBQVksR0FBRyxHQUFmLEdBQXFCbVAsV0FBckIsR0FBbUMsdUNBQXJELENBQVA7QUFDQTs7QUFDRCxRQUFJRCxlQUFKLEVBQXFCO0FBQ3BCLGFBQU9sUCxZQUFZLEdBQUcsR0FBZixHQUFxQm1QLFdBQTVCO0FBQ0EsS0FGRCxNQUVPO0FBQ04sYUFBTztBQUNOblAsUUFBQUEsWUFBWSxFQUFFQSxZQURSO0FBRU51QixRQUFBQSxTQUFTLEVBQUVxTSxPQUFPLENBQUN2TyxTQUFSLENBQWtCVyxZQUFZLEdBQUcsR0FBZixHQUFxQm1QLFdBQXJCLEdBQW1DLDZDQUFyRCxDQUZMO0FBR05NLFFBQUFBLGlCQUFpQixFQUFFN0IsT0FBTyxDQUFDdk8sU0FBUixDQUFrQlcsWUFBWSxHQUFHLEdBQWYsR0FBcUJtUCxXQUFyQixHQUFtQyxzQ0FBckQ7QUFIYixPQUFQO0FBS0E7QUFDRDs7QUFDRCxXQUFTSyxnQkFBVCxDQUEwQjFRLFVBQTFCLEVBQTJDNFEsV0FBM0MsRUFBNkQ7QUFDNUQsUUFBTUMsZ0JBQWdCLEdBQUc3USxVQUFVLENBQUNPLFNBQVgsQ0FBcUIsR0FBckIsQ0FBekI7O0FBQ0EsU0FBSyxJQUFNa0csR0FBWCxJQUFrQm9LLGdCQUFsQixFQUFvQztBQUNuQyxVQUFJLE9BQU9BLGdCQUFnQixDQUFDcEssR0FBRCxDQUF2QixLQUFpQyxRQUFqQyxJQUE2Q29LLGdCQUFnQixDQUFDcEssR0FBRCxDQUFoQixDQUFzQitKLEtBQXRCLEtBQWdDSSxXQUFqRixFQUE4RjtBQUM3RixlQUFPbkssR0FBUDtBQUNBO0FBQ0Q7QUFDRDs7QUFDRCxXQUFTcUssa0JBQVQsQ0FBNEJDLG9CQUE1QixFQUF1REMsc0JBQXZELEVBQXFGO0FBQ3BGLFFBQU1DLGVBQWUsR0FBR0Ysb0JBQW9CLENBQUMsc0NBQUQsQ0FBNUM7QUFBQSxRQUNDRywwQkFBMEIsR0FDekJELGVBQWUsS0FDYkYsb0JBQW9CLElBQ3JCQSxvQkFBb0IsQ0FBQyxpRkFBRCxDQURwQixJQUVDQyxzQkFBc0IsSUFBSUEsc0JBQXNCLENBQUMsNkNBQUQsQ0FIbkMsQ0FGakI7O0FBT0EsUUFBSUUsMEJBQUosRUFBZ0M7QUFDL0IsVUFBSUEsMEJBQTBCLENBQUNDLFdBQTNCLEtBQTJDLHlEQUEvQyxFQUEwRztBQUN6RyxlQUFPLGFBQVA7QUFDQSxPQUZELE1BRU8sSUFBSUQsMEJBQTBCLENBQUNDLFdBQTNCLEtBQTJDLHlEQUEvQyxFQUEwRztBQUNoSCxlQUFPLGtCQUFQO0FBQ0EsT0FGTSxNQUVBLElBQUlELDBCQUEwQixDQUFDQyxXQUEzQixLQUEyQyw2REFBL0MsRUFBOEc7QUFDcEgsZUFBTyxPQUFQO0FBQ0EsT0FQOEIsQ0FRL0I7OztBQUNBLGFBQU8sa0JBQVA7QUFDQTs7QUFDRCxXQUFPRixlQUFlLEdBQUcsa0JBQUgsR0FBd0IsT0FBOUM7QUFDQTs7QUFDRCxXQUFTRyxjQUFULENBQXdCeFIsUUFBeEIsRUFBdUM7QUFDdEMsUUFBTUksVUFBVSxHQUFHSixRQUFRLENBQUMrSSxRQUFULEdBQW9CQyxZQUFwQixFQUFuQjtBQUNBLFdBQU81SSxVQUFVLENBQUNPLFNBQVgsQ0FBcUJQLFVBQVUsQ0FBQytJLFdBQVgsQ0FBdUJuSixRQUFRLENBQUNrSixPQUFULEVBQXZCLElBQTZDLFFBQWxFLENBQVA7QUFDQTs7QUFDRCxXQUFTdUksY0FBVCxDQUF3QnJNLE9BQXhCLEVBQXNDc00sZ0JBQXRDLEVBQTZEN08sU0FBN0QsRUFBNkU7QUFDNUUsUUFBSTdDLFFBQVEsR0FBRzBSLGdCQUFmO0FBQ0EsUUFBTUMsYUFBYSxHQUFHdk0sT0FBTyxDQUFDMUYsT0FBUixDQUFnQixHQUFoQixDQUF0Qjs7QUFFQSxRQUFJaVMsYUFBYSxHQUFHLENBQUMsQ0FBckIsRUFBd0I7QUFDdkIsVUFBTUMsV0FBVyxHQUFHeE0sT0FBTyxDQUFDeU0sS0FBUixDQUFjRixhQUFhLEdBQUcsQ0FBOUIsRUFBaUMsQ0FBQyxDQUFsQyxDQUFwQjs7QUFDQSxVQUFJRyxZQUFZLEdBQUdOLGNBQWMsQ0FBQ3hSLFFBQUQsQ0FBakM7O0FBRUEsYUFBTzhSLFlBQVksS0FBS0YsV0FBeEIsRUFBcUM7QUFDcEM7QUFDQTVSLFFBQUFBLFFBQVEsR0FBR0EsUUFBUSxDQUFDK1IsVUFBVCxHQUFzQkMsVUFBdEIsRUFBWDs7QUFDQSxZQUFJaFMsUUFBSixFQUFjO0FBQ2I4UixVQUFBQSxZQUFZLEdBQUdOLGNBQWMsQ0FBQ3hSLFFBQUQsQ0FBN0I7QUFDQSxTQUZELE1BRU87QUFDTndILFVBQUFBLEdBQUcsQ0FBQ3FGLE9BQUosQ0FBWSxvRkFBWjtBQUNBLGlCQUFPb0YsT0FBTyxDQUFDQyxPQUFSLENBQWdCblQsU0FBaEIsQ0FBUDtBQUNBO0FBQ0Q7QUFDRDs7QUFFRCxXQUFPaUIsUUFBUSxDQUFDcUosYUFBVCxDQUF1QnhHLFNBQXZCLENBQVA7QUFDQTs7QUFDRCxXQUFTc1AsZ0JBQVQsQ0FBMEJULGdCQUExQixFQUFpRHRNLE9BQWpELEVBQStEdkMsU0FBL0QsRUFBK0V1UCx5QkFBL0UsRUFBK0c7QUFDOUcsUUFBTUMsUUFBUSxHQUNieFAsU0FBUyxJQUFJQSxTQUFTLENBQUNuRCxPQUFWLENBQWtCLEdBQWxCLE1BQTJCLENBQXhDLEdBQ0c0Uyx3QkFBd0IsQ0FBQ3pQLFNBQUQsRUFBWTZPLGdCQUFnQixDQUFDM0ksUUFBakIsRUFBWixDQUQzQixHQUVHMEksY0FBYyxDQUFDck0sT0FBRCxFQUFVc00sZ0JBQVYsRUFBNEI3TyxTQUE1QixDQUhsQjtBQUtBLFdBQU93UCxRQUFRLENBQUNqTCxJQUFULENBQWMsVUFBU21MLGNBQVQsRUFBOEI7QUFDbEQsYUFBT04sT0FBTyxDQUFDQyxPQUFSLENBQWdCO0FBQ3RCSyxRQUFBQSxjQUFjLEVBQUVBLGNBRE07QUFFdEJiLFFBQUFBLGdCQUFnQixFQUFFQSxnQkFGSTtBQUd0QnRNLFFBQUFBLE9BQU8sRUFBRUEsT0FIYTtBQUl0QmdOLFFBQUFBLHlCQUF5QixFQUFFQTtBQUpMLE9BQWhCLENBQVA7QUFNQSxLQVBNLENBQVA7QUFRQTs7QUFDRCxXQUFTSSxxQ0FBVCxDQUErQ0MscUJBQS9DLEVBQTJFQyxnQkFBM0UsRUFBa0c7QUFDakcsV0FBT1QsT0FBTyxDQUFDVSxHQUFSLENBQVlELGdCQUFaLEVBQ0x0TCxJQURLLENBQ0EsVUFBU3dMLFFBQVQsRUFBMEI7QUFDL0IsVUFBSUEsUUFBUSxDQUFDcFMsTUFBYixFQUFxQjtBQUNwQixZQUFNcVMsbUJBQTBCLEdBQUcsRUFBbkM7QUFBQSxZQUNDQyxzQkFBNkIsR0FBRyxFQURqQztBQUVBRixRQUFBQSxRQUFRLENBQUM3UyxPQUFULENBQWlCLFVBQVNnVCxPQUFULEVBQXVCO0FBQ3ZDLGNBQUlBLE9BQUosRUFBYTtBQUNaLGdCQUFJQSxPQUFPLENBQUNSLGNBQVosRUFBNEI7QUFDM0JFLGNBQUFBLHFCQUFxQixDQUFDMUosUUFBdEIsR0FBaUNOLFdBQWpDLENBQTZDc0ssT0FBTyxDQUFDWCx5QkFBckQsRUFBZ0YsSUFBaEY7QUFDQVMsY0FBQUEsbUJBQW1CLENBQUNsTyxJQUFwQixDQUF5Qm9PLE9BQU8sQ0FBQ3JCLGdCQUFqQztBQUNBLGFBSEQsTUFHTztBQUNOb0IsY0FBQUEsc0JBQXNCLENBQUNuTyxJQUF2QixDQUE0Qm9PLE9BQU8sQ0FBQ3JCLGdCQUFwQztBQUNBO0FBQ0Q7QUFDRCxTQVREOztBQVVBc0IsUUFBQUEseUJBQXlCLENBQUNQLHFCQUFELEVBQXdCRyxRQUFRLENBQUMsQ0FBRCxDQUFSLENBQVl4TixPQUFwQyxFQUE2Q3lOLG1CQUE3QyxFQUFrRUMsc0JBQWxFLENBQXpCO0FBQ0E7QUFDRCxLQWpCSyxFQWtCTHhMLEtBbEJLLENBa0JDLFVBQVNDLE1BQVQsRUFBc0I7QUFDNUJDLE1BQUFBLEdBQUcsQ0FBQ3lMLEtBQUosQ0FBVSwwQ0FBVixFQUFzRDFMLE1BQXREO0FBQ0EsS0FwQkssQ0FBUDtBQXFCQTtBQUNEO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7O0FBQ0EsV0FBU3lMLHlCQUFULENBQW1DUCxxQkFBbkMsRUFBK0RyTixPQUEvRCxFQUE2RThOLFdBQTdFLEVBQStGQyxjQUEvRixFQUFvSDtBQUNuSCxRQUFNQyx3QkFBd0IsR0FBR1gscUJBQXFCLENBQUN2SixPQUF0QixLQUFrQyxrQkFBbEMsR0FBdUQ5RCxPQUF4RjtBQUFBLFFBQ0M0SCxjQUFjLEdBQUd5RixxQkFBcUIsQ0FBQzFKLFFBQXRCLEVBRGxCO0FBRUFpRSxJQUFBQSxjQUFjLENBQUN2RSxXQUFmLENBQTJCMkssd0JBQXdCLEdBQUcsY0FBdEQsRUFBc0VGLFdBQXRFO0FBQ0FsRyxJQUFBQSxjQUFjLENBQUN2RSxXQUFmLENBQTJCMkssd0JBQXdCLEdBQUcsaUJBQXRELEVBQXlFRCxjQUF6RTtBQUNBOztBQUNELFdBQVNFLG1CQUFULENBQTZCWixxQkFBN0IsRUFBeURhLDRCQUF6RCxFQUE0RkMsaUJBQTVGLEVBQW9IO0FBQ25ILFFBQU1DLFNBQVMsR0FBRyxFQUFsQjs7QUFDQSxTQUFLLElBQU1wTyxPQUFYLElBQXNCa08sNEJBQXRCLEVBQW9EO0FBQ25EO0FBQ0FiLE1BQUFBLHFCQUFxQixDQUFDaEssV0FBdEIsQ0FBa0Msb0JBQW9CckQsT0FBdEQsRUFBK0Q7QUFDOURxTyxRQUFBQSxRQUFRLEVBQUUsS0FEb0Q7QUFFOURQLFFBQUFBLFdBQVcsRUFBRSxFQUZpRDtBQUc5REMsUUFBQUEsY0FBYyxFQUFFO0FBSDhDLE9BQS9ELEVBRm1ELENBT25EO0FBQ0E7QUFDQTs7QUFDQSxVQUFNRCxXQUFXLEdBQUcsRUFBcEI7QUFBQSxVQUNDQyxjQUFjLEdBQUcsRUFEbEI7QUFBQSxVQUVDdFEsU0FBUyxHQUFHeVEsNEJBQTRCLENBQUNsTyxPQUFELENBRnpDO0FBQUEsVUFHQ2dOLHlCQUF5QixHQUFHSyxxQkFBcUIsQ0FBQ3ZKLE9BQXRCLEtBQWtDLGtCQUFsQyxHQUF1RDlELE9BQXZELEdBQWlFLFdBSDlGOztBQUtBLFVBQUksT0FBT3ZDLFNBQVAsS0FBcUIsUUFBckIsSUFBaUNBLFNBQVMsS0FBSyxJQUEvQyxJQUF1REEsU0FBUyxLQUFLOUQsU0FBekUsRUFBb0Y7QUFDbkYsYUFBSyxJQUFJc0IsQ0FBQyxHQUFHLENBQWIsRUFBZ0JBLENBQUMsR0FBR2tULGlCQUFpQixDQUFDL1MsTUFBdEMsRUFBOENILENBQUMsRUFBL0MsRUFBbUQ7QUFDbEQsY0FBTXFSLGdCQUFnQixHQUFHNkIsaUJBQWlCLENBQUNsVCxDQUFELENBQTFDOztBQUNBLGNBQUlxUixnQkFBSixFQUFzQjtBQUFBO0FBQ3JCLGtCQUFNZ0MsWUFBWSxHQUFHaEMsZ0JBQWdCLENBQUMvUSxTQUFqQixFQUFyQjtBQUNBLGtCQUFNZ1QsbUJBQW1CLEdBQUdDLG9CQUFvQixDQUMvQy9RLFNBRCtDLEVBRS9DLFNBRitDLEVBRy9DO0FBQ0Esd0JBQVNnUixrQkFBVCxFQUFrQztBQUNqQyx1QkFBT0MsUUFBUSxDQUFDSixZQUFZLENBQUNHLGtCQUFrQixDQUFDRSxJQUFwQixDQUFiLENBQWY7QUFDQSxlQU44QyxFQU8vQyxJQVArQyxDQUFoRDtBQVNBLGtCQUFNQyxPQUFPLEdBQUdDLGNBQWMsQ0FBQ04sbUJBQUQsQ0FBOUI7O0FBQ0Esa0JBQUlLLE9BQU8sS0FBSyxNQUFoQixFQUF3QjtBQUN2QnZCLGdCQUFBQSxxQkFBcUIsQ0FBQzFKLFFBQXRCLEdBQWlDTixXQUFqQyxDQUE2QzJKLHlCQUE3QyxFQUF3RSxJQUF4RTtBQUNBYyxnQkFBQUEsV0FBVyxDQUFDdk8sSUFBWixDQUFpQitNLGdCQUFqQjtBQUNBLGVBSEQsTUFHTztBQUNOeUIsZ0JBQUFBLGNBQWMsQ0FBQ3hPLElBQWYsQ0FBb0IrTSxnQkFBcEI7QUFDQTtBQWpCb0I7QUFrQnJCO0FBQ0Q7O0FBQ0RzQixRQUFBQSx5QkFBeUIsQ0FBQ1AscUJBQUQsRUFBd0JyTixPQUF4QixFQUFpQzhOLFdBQWpDLEVBQThDQyxjQUE5QyxDQUF6QjtBQUNBLE9BeEJELE1Bd0JPO0FBQ04sWUFBTVQsZ0JBQWdCLEdBQUcsRUFBekI7O0FBQ0EsYUFBSyxJQUFJclMsRUFBQyxHQUFHLENBQWIsRUFBZ0JBLEVBQUMsR0FBR2tULGlCQUFpQixDQUFDL1MsTUFBdEMsRUFBOENILEVBQUMsRUFBL0MsRUFBbUQ7QUFDbEQsY0FBTXFSLGlCQUFnQixHQUFHNkIsaUJBQWlCLENBQUNsVCxFQUFELENBQTFDOztBQUNBLGNBQUlxUixpQkFBSixFQUFzQjtBQUNyQixnQkFBTWdDLFlBQVksR0FBR2hDLGlCQUFnQixDQUFDL1EsU0FBakIsRUFBckI7O0FBQ0EsZ0JBQUlrQyxTQUFTLEtBQUssSUFBZCxJQUFzQixDQUFDLENBQUM2USxZQUFZLENBQUMsTUFBTXRPLE9BQVAsQ0FBeEMsRUFBeUQ7QUFDeEQ7QUFDQXFOLGNBQUFBLHFCQUFxQixDQUFDMUosUUFBdEIsR0FBaUNOLFdBQWpDLENBQTZDMkoseUJBQTdDLEVBQXdFLElBQXhFO0FBQ0E7QUFDQSxhQUpELE1BSU87QUFDTjtBQUNBTSxjQUFBQSxnQkFBZ0IsQ0FBQy9OLElBQWpCLENBQXNCd04sZ0JBQWdCLENBQUNULGlCQUFELEVBQW1CdE0sT0FBbkIsRUFBNEJ2QyxTQUE1QixFQUF1Q3VQLHlCQUF2QyxDQUF0QztBQUNBO0FBQ0Q7QUFDRCxTQWZLLENBaUJOO0FBQ0E7QUFDQTs7O0FBQ0FvQixRQUFBQSxTQUFTLENBQUM3TyxJQUFWLENBQWU2TixxQ0FBcUMsQ0FBQ0MscUJBQUQsRUFBd0JDLGdCQUF4QixDQUFwRDtBQUNBO0FBQ0Q7O0FBQ0QsV0FBT1QsT0FBTyxDQUFDVSxHQUFSLENBQVlhLFNBQVosQ0FBUDtBQUNBOztBQUNELFdBQVNVLG9CQUFULENBQThCQyxhQUE5QixFQUFrRDtBQUNqRDtBQUNBLFFBQU1DLFVBQVUsR0FBR0MsUUFBUSxDQUFDQyxvQkFBVCxDQUE4QkgsYUFBOUIsQ0FBbkI7QUFDQSxRQUFNSSxTQUFTLEdBQUdGLFFBQVEsQ0FBQ0csV0FBVCxDQUFxQkosVUFBckIsQ0FBbEI7QUFDQSxXQUFPSyxrQkFBa0IsQ0FBQ0MsbUJBQW5CLENBQXVDSCxTQUF2QyxDQUFQO0FBQ0E7O0FBQ0QsV0FBU0ksZ0JBQVQsQ0FBMEJDLFdBQTFCLEVBQTRDQyxjQUE1QyxFQUFpRTtBQUNoRTtBQUNBO0FBQ0EsUUFBTUMsVUFBVSxHQUFHRixXQUFXLENBQUNHLE1BQVosQ0FBbUIsVUFBU0MsUUFBVCxFQUF3QjtBQUM3RCxhQUFPSCxjQUFjLENBQUNuVixPQUFmLENBQXVCc1YsUUFBdkIsSUFBbUMsQ0FBQyxDQUEzQztBQUNBLEtBRmtCLENBQW5CO0FBR0EsV0FBT0YsVUFBVSxDQUFDRyxRQUFYLE1BQXlCbFcsU0FBaEM7QUFDQTs7QUFDRCxXQUFTbVcsNEJBQVQsQ0FBc0NDLFlBQXRDLEVBQXlEO0FBQ3hELFFBQU1DLDJCQUEyQixHQUFHcFIsV0FBVyxDQUFDcVIsc0JBQWhEO0FBRUFGLElBQUFBLFlBQVksQ0FBQ0csSUFBYixDQUFrQixVQUFTQyxDQUFULEVBQWlCQyxDQUFqQixFQUF5QjtBQUMxQyxhQUFPSiwyQkFBMkIsQ0FBQzFWLE9BQTVCLENBQW9DNlYsQ0FBcEMsSUFBeUNILDJCQUEyQixDQUFDMVYsT0FBNUIsQ0FBb0M4VixDQUFwQyxDQUFoRDtBQUNBLEtBRkQ7QUFJQSxXQUFPTCxZQUFZLENBQUMsQ0FBRCxDQUFuQjtBQUNBOztBQUNELFdBQVNNLHVCQUFULENBQ0M1UyxTQURELEVBRUNoQyxjQUZELEVBR0NiLFFBSEQsRUFJQzBWLEtBSkQsRUFLQ0MscUJBTEQsRUFNQ0MsU0FORCxFQU9FO0FBQ0QsUUFBTXJULG1CQUFtQixHQUFHeUIsV0FBVyxDQUFDNlIsMkJBQVosQ0FBd0NoVixjQUF4QyxFQUF3RGIsUUFBeEQsQ0FBNUI7QUFDQSxRQUFNOFYsVUFBVSxHQUFHLENBQUMsSUFBRCxDQUFuQjtBQUNBLFFBQU1DLGVBQWUsR0FBRyxDQUFDLElBQUQsRUFBTyxJQUFQLEVBQWEsSUFBYixFQUFtQixJQUFuQixFQUF5QixJQUF6QixFQUErQixJQUEvQixFQUFxQyxPQUFyQyxFQUE4QyxPQUE5QyxFQUF1RCxPQUF2RCxFQUFnRSxPQUFoRSxDQUF4QjtBQUNBLFFBQU1DLG1CQUFtQixHQUFHLENBQzNCLE9BRDJCLEVBRTNCLFVBRjJCLEVBRzNCLFdBSDJCLEVBSTNCLE1BSjJCLEVBSzNCLGNBTDJCLEVBTTNCLGFBTjJCLEVBTzNCLGVBUDJCLEVBUTNCLGNBUjJCLEVBUzNCLGlCQVQyQixFQVUzQixnQkFWMkIsRUFXM0IsY0FYMkIsRUFZM0IsYUFaMkIsQ0FBNUI7QUFjQSxRQUFNQyxjQUFjLEdBQUcsQ0FBQyxJQUFELEVBQU8sSUFBUCxFQUFhLElBQWIsRUFBbUIsSUFBbkIsRUFBeUIsSUFBekIsRUFBK0IsSUFBL0IsRUFBcUMsSUFBckMsRUFBMkMsT0FBM0MsRUFBb0QsT0FBcEQsRUFBNkQsT0FBN0QsRUFBc0UsT0FBdEUsRUFBK0UsT0FBL0UsQ0FBdkI7QUFDQSxRQUFNQyxvQkFBb0IsR0FBRyxDQUFDLFVBQUQsRUFBYSxhQUFiLEVBQTRCLFlBQTVCLEVBQTBDLGVBQTFDLEVBQTJELFVBQTNELEVBQXVFLGFBQXZFLENBQTdCO0FBQ0EsUUFBTUMsbUJBQW1CLEdBQUdDLHFCQUFxQixDQUFDQyxzQkFBdEIsRUFBNUI7QUFDQSxRQUFNQyxrQkFBa0IsR0FBR1gscUJBQXFCLEtBQUssTUFBMUIsSUFBb0NBLHFCQUFxQixLQUFLLElBQXpGO0FBQ0EsUUFBSVksZ0JBQXVCLEdBQUcsRUFBOUI7QUFDQSxRQUFNQyxTQUFTLEdBQUcsT0FBT1osU0FBUCxLQUFxQixRQUFyQixHQUFnQ2EsSUFBSSxDQUFDQyxLQUFMLENBQVdkLFNBQVgsRUFBc0JlLFVBQXRELEdBQW1FZixTQUFyRjs7QUFFQSxRQUFJNVYsUUFBUSxDQUFDVyxTQUFULENBQW1CRSxjQUFjLEdBQUcsZ0RBQXBDLE1BQTBGLElBQTlGLEVBQW9HO0FBQ25HLGFBQU9pVixVQUFVLENBQUNiLFFBQVgsRUFBUDtBQUNBOztBQUVELFFBQUl1QixTQUFTLElBQUlBLFNBQVMsQ0FBQ0kscUJBQXZCLElBQWdESixTQUFTLENBQUNJLHFCQUFWLENBQWdDcFcsTUFBaEMsR0FBeUMsQ0FBN0YsRUFBZ0c7QUFDL0YrVixNQUFBQSxnQkFBZ0IsR0FBR0gscUJBQXFCLENBQUNTLG1CQUF0QixDQUEwQ0wsU0FBUyxDQUFDSSxxQkFBcEQsQ0FBbkI7QUFDQSxLQUZELE1BRU87QUFDTkwsTUFBQUEsZ0JBQWdCLEdBQUdILHFCQUFxQixDQUFDVSx5QkFBdEIsRUFBbkI7QUFDQSxLQWpDQSxDQW1DRDs7O0FBQ0EsUUFBSUMsaUJBQWlCLEdBQUc3QyxvQkFBb0IsQ0FBQ3dCLEtBQUQsQ0FBNUMsQ0FwQ0MsQ0FzQ0Q7OztBQUNBLFFBQUluVCxtQkFBbUIsSUFBSUEsbUJBQW1CLENBQUN5VSx3QkFBM0MsSUFBdUV6VSxtQkFBbUIsQ0FBQ3lVLHdCQUFwQixDQUE2Q25VLFNBQTdDLENBQTNFLEVBQW9JO0FBQ25JO0FBQ0EsVUFBSXlULGtCQUFKLEVBQXdCO0FBQ3ZCUyxRQUFBQSxpQkFBaUIsR0FBR1osbUJBQW1CLENBQUM1TixNQUFwQixDQUEyQndPLGlCQUEzQixDQUFwQjtBQUNBOztBQUVELFVBQU1FLGtCQUFrQixHQUFHalQsV0FBVyxDQUFDa1IsNEJBQVosQ0FBeUMzUyxtQkFBbUIsQ0FBQ3lVLHdCQUFwQixDQUE2Q25VLFNBQTdDLENBQXpDLENBQTNCO0FBQ0EsVUFBSXFVLGFBQUosQ0FQbUksQ0FRbkk7QUFDQTtBQUVBOztBQUNBLGNBQVFELGtCQUFSO0FBQ0MsYUFBSyxhQUFMO0FBQ0MsY0FBTUUsZUFBZSxHQUFHekIsS0FBSyxLQUFLLFVBQVYsSUFBd0JZLGtCQUF4QixHQUE2Q04sbUJBQTdDLEdBQW1FRixVQUEzRjtBQUNBb0IsVUFBQUEsYUFBYSxHQUFHdkMsZ0JBQWdCLENBQUNvQyxpQkFBRCxFQUFvQkksZUFBcEIsQ0FBaEM7QUFDQTs7QUFDRCxhQUFLLFlBQUw7QUFDQ0QsVUFBQUEsYUFBYSxHQUFHdkMsZ0JBQWdCLENBQUNvQyxpQkFBRCxFQUFvQmpCLFVBQXBCLENBQWhDO0FBQ0E7O0FBQ0QsYUFBSyxhQUFMO0FBQ0MsY0FBTXNCLFVBQVUsR0FBR3pDLGdCQUFnQixDQUNsQ29DLGlCQURrQyxFQUVsQ3JCLEtBQUssS0FBSyxVQUFWLElBQXdCWSxrQkFBeEIsR0FBNkNDLGdCQUE3QyxHQUFnRVIsZUFGOUIsQ0FBbkM7O0FBSUFtQixVQUFBQSxhQUFhLEdBQUdFLFVBQVUsR0FBR0EsVUFBSCxHQUFnQixFQUExQztBQUNBOztBQUNELGFBQUssWUFBTDtBQUNDRixVQUFBQSxhQUFhLEdBQUd2QyxnQkFBZ0IsQ0FBQ29DLGlCQUFELEVBQW9CZCxjQUFwQixDQUFoQztBQUNBOztBQUNELGFBQUssa0JBQUw7QUFDQ2lCLFVBQUFBLGFBQWEsR0FBR3ZDLGdCQUFnQixDQUFDb0MsaUJBQUQsRUFBb0JiLG9CQUFwQixDQUFoQztBQUNBOztBQUNELGFBQUssOEJBQUw7QUFDQ2dCLFVBQUFBLGFBQWEsR0FBR3ZDLGdCQUFnQixDQUFDb0MsaUJBQUQsRUFBb0JiLG9CQUFvQixDQUFDM04sTUFBckIsQ0FBNEIwTixjQUE1QixDQUFwQixDQUFoQztBQUNBOztBQUVEO0FBQ0M7QUExQkYsT0FabUksQ0F3Q25JO0FBQ0E7OztBQUNBLGFBQU9pQixhQUFQO0FBQ0EsS0EzQ0QsTUEyQ08sSUFBSXhCLEtBQUssS0FBSyxVQUFkLEVBQTBCO0FBQ2hDO0FBQ0E7QUFDQWEsTUFBQUEsZ0JBQWdCLEdBQUdILHFCQUFxQixDQUFDVSx5QkFBdEIsRUFBbkI7QUFDQSxVQUFNaEMsVUFBVSxHQUFHaUMsaUJBQWlCLENBQUNoQyxNQUFsQixDQUF5QixVQUFTQyxRQUFULEVBQXdCO0FBQ25FLGVBQU91QixnQkFBZ0IsQ0FBQzdXLE9BQWpCLENBQXlCc1YsUUFBekIsSUFBcUMsQ0FBNUM7QUFDQSxPQUZrQixDQUFuQjtBQUdBLGFBQU9GLFVBQVUsQ0FBQ0csUUFBWCxFQUFQO0FBQ0E7QUFDRDs7QUFDRCxXQUFTb0MsZ0JBQVQsQ0FBMEJqWCxVQUExQixFQUEyQ2tCLFlBQTNDLEVBQThEO0FBQzdELFFBQU1nVyxxQkFBcUIsR0FBR2hXLFlBQVksQ0FBQ2lXLFNBQWIsQ0FBdUIsQ0FBdkIsRUFBMEJqVyxZQUFZLENBQUNrVyxXQUFiLENBQXlCLEdBQXpCLENBQTFCLENBQTlCO0FBQ0EsUUFBTUMsY0FBYyxHQUFHclgsVUFBVSxDQUFDTyxTQUFYLENBQXFCMlcscUJBQXFCLEdBQUcsZ0RBQTdDLENBQXZCO0FBQ0EsUUFBTUksY0FBbUIsR0FBRyxFQUE1Qjs7QUFDQSxRQUFJRCxjQUFjLElBQUlILHFCQUFxQixLQUFLaFcsWUFBaEQsRUFBOEQ7QUFDN0RvVyxNQUFBQSxjQUFjLENBQUNDLFdBQWYsR0FBNkJMLHFCQUE3QjtBQUNBSSxNQUFBQSxjQUFjLENBQUNFLG1CQUFmLEdBQXFDNVQsV0FBVyxDQUFDNlQsd0JBQVosQ0FBcUN6WCxVQUFyQyxFQUFpRGtYLHFCQUFqRCxDQUFyQztBQUNBOztBQUNELFdBQU9JLGNBQVA7QUFDQTs7QUFDRCxXQUFTSSwyQkFBVCxDQUFxQ0MsaUJBQXJDLEVBQTZEQyxlQUE3RCxFQUFtRkMscUJBQW5GLEVBQStHQyxhQUEvRyxFQUFtSTtBQUNsSSxRQUFNQyxVQUFVLEdBQUdDLGFBQWEsQ0FBQ0YsYUFBRCxFQUFnQkgsaUJBQWhCLENBQWhDOztBQUNBLFFBQUlJLFVBQUosRUFBZ0I7QUFDZixVQUFJLENBQUNILGVBQUQsSUFBb0JBLGVBQWUsQ0FBQ3RZLE9BQWhCLENBQXdCeVksVUFBVSxDQUFDRSxRQUFuQyxJQUErQyxDQUFDLENBQXhFLEVBQTJFO0FBQzFFSixRQUFBQSxxQkFBcUIsQ0FBQ3RULElBQXRCLENBQTJCd1QsVUFBM0I7QUFDQTtBQUNEOztBQUNELFdBQU9GLHFCQUFQO0FBQ0E7QUFDRDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOzs7QUFDQSxXQUFTSyw0QkFBVCxDQUNDaFgsWUFERCxFQUVDaVgsaUJBRkQsRUFHQ0MsaUJBSEQsRUFJQ0MsV0FKRCxFQUtDQyxjQUxELEVBTUNDLGNBTkQsRUFPQ0MsZ0JBUEQsRUFRQ3hZLFVBUkQsRUFTQ3lZLFdBVEQsRUFVRTtBQUNELFFBQUlDLFdBQWtCLEdBQUcsRUFBekI7QUFBQSxRQUNDQyxjQUREO0FBQUEsUUFFQ2YsZUFGRDs7QUFJQSxRQUFJYSxXQUFXLElBQUk3VSxXQUFXLENBQUNwQixvQkFBWixDQUFpQ3hDLFVBQWpDLEVBQTZDa0IsWUFBN0MsRUFBMkRxWCxjQUEzRCxFQUEyRSxJQUEzRSxDQUFuQixFQUFxRztBQUNwR0ksTUFBQUEsY0FBYyxHQUFHUixpQkFBaUIsQ0FBQ1MsZUFBbEIsQ0FBa0NSLGlCQUFsQyxDQUFqQjtBQUNBUixNQUFBQSxlQUFlLEdBQUdhLFdBQVcsR0FBRyxDQUFDLElBQUQsQ0FBSCxHQUFZN1UsV0FBVyxDQUFDeVIsdUJBQVosQ0FBb0NrRCxjQUFwQyxFQUFvRHJYLFlBQXBELEVBQWtFbEIsVUFBbEUsQ0FBekM7QUFDQSxVQUFNMlgsaUJBQWlCLEdBQUdhLGdCQUFnQixDQUFDRCxjQUFELENBQTFDLENBSG9HLENBSXBHOztBQUNBRyxNQUFBQSxXQUFXLEdBQUdELFdBQVcsR0FDdEJmLDJCQUEyQixDQUFDQyxpQkFBRCxFQUFvQkMsZUFBcEIsRUFBcUNjLFdBQXJDLEVBQWtEQyxjQUFjLENBQUMsQ0FBRCxDQUFoRSxDQURMLEdBRXRCQSxjQUFjLENBQUM3WixNQUFmLENBQXNCNFksMkJBQTJCLENBQUN6USxJQUE1QixDQUFpQyxJQUFqQyxFQUF1QzBRLGlCQUF2QyxFQUEwREMsZUFBMUQsQ0FBdEIsRUFBa0djLFdBQWxHLENBRkg7O0FBR0EsVUFBSUEsV0FBVyxDQUFDdFksTUFBaEIsRUFBd0I7QUFDdkIsWUFBSWtZLGNBQUosRUFBb0I7QUFDbkJELFVBQUFBLFdBQVcsQ0FBQ0MsY0FBYyxHQUFHQyxjQUFsQixDQUFYLEdBQStDRixXQUFXLENBQUNsTCxjQUFaLENBQTJCbUwsY0FBYyxHQUFHQyxjQUE1QyxJQUM1Q0YsV0FBVyxDQUFDQyxjQUFjLEdBQUdDLGNBQWxCLENBQVgsQ0FBNkNwUSxNQUE3QyxDQUFvRHVRLFdBQXBELENBRDRDLEdBRTVDQSxXQUZIO0FBR0EsU0FKRCxNQUlPO0FBQ05MLFVBQUFBLFdBQVcsQ0FBQ0UsY0FBRCxDQUFYLEdBQThCRixXQUFXLENBQUNsTCxjQUFaLENBQTJCb0wsY0FBM0IsSUFDM0JGLFdBQVcsQ0FBQ0UsY0FBRCxDQUFYLENBQTRCcFEsTUFBNUIsQ0FBbUN1USxXQUFuQyxDQUQyQixHQUUzQkEsV0FGSDtBQUdBO0FBQ0Q7QUFDRDtBQUNEOztBQUVELFdBQVNHLCtCQUFULENBQXlDVixpQkFBekMsRUFBaUVFLFdBQWpFLEVBQXNGclksVUFBdEYsRUFBa0hrQixZQUFsSCxFQUF3STtBQUN2SSxRQUFNNFgsMkJBQTJCLEdBQUdYLGlCQUFpQixDQUFDWSw2QkFBbEIsRUFBcEM7QUFBQSxRQUNDUCxnQkFBZ0IsR0FBRzVVLFdBQVcsQ0FBQzZULHdCQUFaLENBQXFDelgsVUFBckMsRUFBaURrQixZQUFqRCxDQURwQjtBQUFBLFFBRUM4WCxrQkFBa0IsR0FBRzVVLE1BQU0sQ0FBQ0MsSUFBUCxDQUFZbVUsZ0JBQVosQ0FGdEI7QUFBQSxRQUdDbEIsY0FBYyxHQUFHMVQsV0FBVyxDQUFDcVQsZ0JBQVosQ0FBNkJqWCxVQUE3QixFQUF5Q2tCLFlBQXpDLENBSGxCO0FBQUEsUUFJQ2dXLHFCQUFxQixHQUFHSSxjQUFjLENBQUNDLFdBSnhDO0FBQUEsUUFLQzBCLHlCQUF5QixHQUFHM0IsY0FBYyxDQUFDRSxtQkFMNUM7QUFBQSxRQU1DMEIsY0FBYyxHQUFHLENBQUMsQ0FBQzVCLGNBQWMsQ0FBQ0MsV0FBakIsSUFBZ0MwQix5QkFBaEMsSUFBNkQ3VSxNQUFNLENBQUNDLElBQVAsQ0FBWTRVLHlCQUFaLEVBQXVDN1ksTUFBdkMsR0FBZ0QsQ0FOL0g7O0FBUUEsUUFBSThZLGNBQUosRUFBb0I7QUFDbkIsVUFBTUMsbUJBQW1CLEdBQUcvVSxNQUFNLENBQUNDLElBQVAsQ0FBWTRVLHlCQUFaLENBQTVCO0FBQ0FFLE1BQUFBLG1CQUFtQixDQUFDeFosT0FBcEIsQ0FBNEIsVUFBU3laLGtCQUFULEVBQXFDO0FBQ2hFLFlBQUlDLGlCQUFKOztBQUNBLFlBQUlQLDJCQUEyQixDQUFDUSxRQUE1QixDQUFxQyxnQkFBZ0JGLGtCQUFyRCxDQUFKLEVBQThFO0FBQzdFQyxVQUFBQSxpQkFBaUIsR0FBRyxnQkFBZ0JELGtCQUFwQztBQUNBLFNBRkQsTUFFTyxJQUFJTiwyQkFBMkIsQ0FBQ1EsUUFBNUIsQ0FBcUNGLGtCQUFyQyxDQUFKLEVBQThEO0FBQ3BFQyxVQUFBQSxpQkFBaUIsR0FBR0Qsa0JBQXBCO0FBQ0EsU0FGTSxNQUVBLElBQ05BLGtCQUFrQixDQUFDRyxVQUFuQixDQUE4QixJQUE5QixLQUNBVCwyQkFBMkIsQ0FBQ1EsUUFBNUIsQ0FBcUMsZ0JBQWdCRixrQkFBa0IsQ0FBQzNILEtBQW5CLENBQXlCLENBQXpCLEVBQTRCMkgsa0JBQWtCLENBQUNoWixNQUEvQyxDQUFyRCxDQUZNLEVBR0w7QUFDRGlaLFVBQUFBLGlCQUFpQixHQUFHLGdCQUFnQkQsa0JBQWtCLENBQUMzSCxLQUFuQixDQUF5QixDQUF6QixFQUE0QjJILGtCQUFrQixDQUFDaFosTUFBL0MsQ0FBcEM7QUFDQSxTQUxNLE1BS0EsSUFDTmdaLGtCQUFrQixDQUFDRyxVQUFuQixDQUE4QixJQUE5QixLQUNBVCwyQkFBMkIsQ0FBQ1EsUUFBNUIsQ0FBcUNGLGtCQUFrQixDQUFDM0gsS0FBbkIsQ0FBeUIsQ0FBekIsRUFBNEIySCxrQkFBa0IsQ0FBQ2haLE1BQS9DLENBQXJDLENBRk0sRUFHTDtBQUNEaVosVUFBQUEsaUJBQWlCLEdBQUdELGtCQUFrQixDQUFDM0gsS0FBbkIsQ0FBeUIsQ0FBekIsRUFBNEIySCxrQkFBa0IsQ0FBQ2haLE1BQS9DLENBQXBCO0FBQ0EsU0FMTSxNQUtBLElBQUkwWSwyQkFBMkIsQ0FBQ1EsUUFBNUIsQ0FBcUMsa0JBQWtCRixrQkFBdkQsQ0FBSixFQUFnRjtBQUN0RkMsVUFBQUEsaUJBQWlCLEdBQUcsa0JBQWtCRCxrQkFBdEM7QUFDQSxTQUZNLE1BRUEsSUFBSU4sMkJBQTJCLENBQUNRLFFBQTVCLENBQXFDLE9BQU9GLGtCQUE1QyxDQUFKLEVBQXFFO0FBQzNFQyxVQUFBQSxpQkFBaUIsR0FBRyxPQUFPRCxrQkFBM0I7QUFDQTs7QUFFRCxZQUFJQyxpQkFBSixFQUF1QjtBQUN0Qm5CLFVBQUFBLDRCQUE0QixDQUMzQmhCLHFCQUQyQixFQUUzQmlCLGlCQUYyQixFQUczQmtCLGlCQUgyQixFQUkzQmhCLFdBSjJCLEVBSzNCMVosU0FMMkIsRUFNM0J5YSxrQkFOMkIsRUFPM0JILHlCQVAyQixFQVEzQmpaLFVBUjJCLEVBUzNCLElBVDJCLENBQTVCO0FBV0E7QUFDRCxPQW5DRDtBQW9DQTs7QUFDRGdaLElBQUFBLGtCQUFrQixDQUFDclosT0FBbkIsQ0FBMkIsVUFBUzZaLGlCQUFULEVBQW9DO0FBQzlELFVBQUlILGlCQUFKOztBQUNBLFVBQUlQLDJCQUEyQixDQUFDUSxRQUE1QixDQUFxQ0UsaUJBQXJDLENBQUosRUFBNkQ7QUFDNURILFFBQUFBLGlCQUFpQixHQUFHRyxpQkFBcEI7QUFDQSxPQUZELE1BRU8sSUFDTkEsaUJBQWlCLENBQUNELFVBQWxCLENBQTZCLElBQTdCLEtBQ0FULDJCQUEyQixDQUFDUSxRQUE1QixDQUFxQ0UsaUJBQWlCLENBQUMvSCxLQUFsQixDQUF3QixDQUF4QixFQUEyQitILGlCQUFpQixDQUFDcFosTUFBN0MsQ0FBckMsQ0FGTSxFQUdMO0FBQ0RpWixRQUFBQSxpQkFBaUIsR0FBR0csaUJBQWlCLENBQUMvSCxLQUFsQixDQUF3QixDQUF4QixFQUEyQitILGlCQUFpQixDQUFDcFosTUFBN0MsQ0FBcEI7QUFDQSxPQUxNLE1BS0EsSUFBSTBZLDJCQUEyQixDQUFDUSxRQUE1QixDQUFxQyxPQUFPRSxpQkFBNUMsQ0FBSixFQUFvRTtBQUMxRUgsUUFBQUEsaUJBQWlCLEdBQUcsT0FBT0csaUJBQTNCO0FBQ0E7O0FBQ0QsVUFBSUgsaUJBQUosRUFBdUI7QUFDdEJuQixRQUFBQSw0QkFBNEIsQ0FDM0JoWCxZQUQyQixFQUUzQmlYLGlCQUYyQixFQUczQmtCLGlCQUgyQixFQUkzQmhCLFdBSjJCLEVBSzNCMVosU0FMMkIsRUFNM0I2YSxpQkFOMkIsRUFPM0JoQixnQkFQMkIsRUFRM0J4WSxVQVIyQixFQVMzQixLQVQyQixDQUE1QjtBQVdBO0FBQ0QsS0F6QkQ7QUEyQkE4WSxJQUFBQSwyQkFBMkIsQ0FBQ25aLE9BQTVCLENBQW9DLFVBQVM4WixhQUFULEVBQTZCO0FBQ2hFLFVBQUlBLGFBQWEsQ0FBQ25hLE9BQWQsQ0FBc0IsR0FBdEIsSUFBNkIsQ0FBN0IsSUFBa0MsQ0FBQ21hLGFBQWEsQ0FBQ0gsUUFBZCxDQUF1QixZQUF2QixDQUF2QyxFQUE2RTtBQUM1RSxZQUFNSSxnQkFBZ0IsR0FBRyxDQUFDLE1BQU1ELGFBQWEsQ0FBQ0UsVUFBZCxDQUF5QixHQUF6QixFQUE4QixHQUE5QixDQUFQLEVBQTJDSixVQUEzQyxDQUFzRHJZLFlBQXRELElBQ3RCLE1BQU11WSxhQUFhLENBQUNFLFVBQWQsQ0FBeUIsR0FBekIsRUFBOEIsR0FBOUIsQ0FEZ0IsR0FFdEJ6WSxZQUFZLEdBQUcsR0FBZixHQUFxQnVZLGFBQWEsQ0FBQ0UsVUFBZCxDQUF5QixHQUF6QixFQUE4QixHQUE5QixDQUZ4QixDQUQ0RSxDQUdoQjs7QUFDNUQsWUFBSTNaLFVBQVUsQ0FBQ08sU0FBWCxDQUFxQm1aLGdCQUFnQixDQUFDOWEsT0FBakIsQ0FBeUIsSUFBekIsRUFBK0IsRUFBL0IsQ0FBckIsQ0FBSixFQUE4RDtBQUM3RGdiLFVBQUFBLGlDQUFpQyxDQUNoQ0YsZ0JBRGdDLEVBRWhDeFksWUFGZ0MsRUFHaENpWCxpQkFIZ0MsRUFJaENzQixhQUpnQyxFQUtoQ3paLFVBTGdDLEVBTWhDcVksV0FOZ0MsQ0FBakM7QUFRQTtBQUNEO0FBQ0QsS0FoQkQ7QUFpQkEsV0FBT0EsV0FBUDtBQUNBO0FBQ0Q7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7O0FBQ0EsV0FBU3VCLGlDQUFULENBQ0NGLGdCQURELEVBRUNHLGtCQUZELEVBR0MxQixpQkFIRCxFQUlDc0IsYUFKRCxFQUtDelosVUFMRCxFQU1DcVksV0FORCxFQU9FO0FBQ0QsUUFBSXlCLGVBQWUsR0FBR0wsYUFBYSxDQUFDNWEsS0FBZCxDQUFvQixHQUFwQixDQUF0QixDQURDLENBRUQ7O0FBQ0EsUUFBSSxDQUFDLE1BQU00YSxhQUFhLENBQUNFLFVBQWQsQ0FBeUIsR0FBekIsRUFBOEIsR0FBOUIsQ0FBUCxFQUEyQ0osVUFBM0MsQ0FBc0RNLGtCQUF0RCxDQUFKLEVBQStFO0FBQzlFLFVBQU05WixTQUFTLEdBQUcsQ0FBRSxNQUFNMFosYUFBUixFQUErQkUsVUFBL0IsQ0FBMEMsR0FBMUMsRUFBK0MsR0FBL0MsQ0FBbEI7QUFBQSxVQUNDSSxRQUFRLEdBQUdoYSxTQUFTLENBQUNuQixPQUFWLENBQWtCaWIsa0JBQWtCLEdBQUcsR0FBdkMsRUFBNEMsRUFBNUMsQ0FEWjtBQUVBQyxNQUFBQSxlQUFlLEdBQUdDLFFBQVEsQ0FBQ2xiLEtBQVQsQ0FBZSxHQUFmLENBQWxCO0FBQ0E7O0FBQ0QsUUFBSXlaLGNBQWMsR0FBRyxFQUFyQjtBQUNBLFFBQU0wQixhQUFhLEdBQUdGLGVBQWUsQ0FBQ0EsZUFBZSxDQUFDMVosTUFBaEIsR0FBeUIsQ0FBMUIsQ0FBckMsQ0FUQyxDQVNrRTs7QUFDbkUsU0FBSyxJQUFJSCxDQUFDLEdBQUcsQ0FBYixFQUFnQkEsQ0FBQyxHQUFHNlosZUFBZSxDQUFDMVosTUFBaEIsR0FBeUIsQ0FBN0MsRUFBZ0RILENBQUMsRUFBakQsRUFBcUQ7QUFDcEQsVUFBSUQsVUFBVSxDQUFDTyxTQUFYLENBQXFCc1osa0JBQWtCLEdBQUcsR0FBckIsR0FBMkJDLGVBQWUsQ0FBQzdaLENBQUQsQ0FBZixDQUFtQnJCLE9BQW5CLENBQTJCLElBQTNCLEVBQWlDLEVBQWpDLENBQWhELEVBQXNGcWIsYUFBMUYsRUFBeUc7QUFDeEczQixRQUFBQSxjQUFjLEdBQUdBLGNBQWMsR0FBR3dCLGVBQWUsQ0FBQzdaLENBQUQsQ0FBaEMsR0FBc0MsSUFBdkQsQ0FEd0csQ0FDM0M7QUFDN0QsT0FGRCxNQUVPO0FBQ05xWSxRQUFBQSxjQUFjLEdBQUdBLGNBQWMsR0FBR3dCLGVBQWUsQ0FBQzdaLENBQUQsQ0FBaEMsR0FBc0MsR0FBdkQsQ0FETSxDQUNzRDtBQUM1RDs7QUFDRDRaLE1BQUFBLGtCQUFrQixHQUFHQSxrQkFBa0IsR0FBRyxHQUFyQixHQUEyQkMsZUFBZSxDQUFDN1osQ0FBRCxDQUEvRDtBQUNBOztBQUNELFFBQU1pYSxnQkFBZ0IsR0FBR1IsZ0JBQWdCLENBQUNqSSxLQUFqQixDQUF1QixDQUF2QixFQUEwQmlJLGdCQUFnQixDQUFDdEMsV0FBakIsQ0FBNkIsR0FBN0IsQ0FBMUIsQ0FBekI7QUFBQSxRQUNDb0IsZ0JBQWdCLEdBQUc1VSxXQUFXLENBQUM2VCx3QkFBWixDQUFxQ3pYLFVBQXJDLEVBQWlEa2EsZ0JBQWpELENBRHBCO0FBQUEsUUFFQ3BCLDJCQUEyQixHQUFHWCxpQkFBaUIsQ0FBQ1ksNkJBQWxCLEVBRi9CO0FBR0EsUUFBSU0saUJBQWlCLEdBQUdXLGFBQXhCOztBQUNBLFFBQUl4QixnQkFBZ0IsQ0FBQ3dCLGFBQUQsQ0FBcEIsRUFBcUM7QUFDcENYLE1BQUFBLGlCQUFpQixHQUFHVyxhQUFwQjtBQUNBLEtBRkQsTUFFTyxJQUFJQSxhQUFhLENBQUNULFVBQWQsQ0FBeUIsSUFBekIsS0FBa0NmLGdCQUFnQixDQUFDd0IsYUFBYSxDQUFDcGIsT0FBZCxDQUFzQixJQUF0QixFQUE0QixFQUE1QixDQUFELENBQXRELEVBQXlGO0FBQy9GeWEsTUFBQUEsaUJBQWlCLEdBQUdXLGFBQWEsQ0FBQ3BiLE9BQWQsQ0FBc0IsSUFBdEIsRUFBNEIsRUFBNUIsQ0FBcEI7QUFDQSxLQUZNLE1BRUEsSUFBSTRaLGdCQUFnQixDQUFDLE9BQU93QixhQUFSLENBQWhCLElBQTBDbEIsMkJBQTJCLENBQUNRLFFBQTVCLENBQXFDLE9BQU9VLGFBQTVDLENBQTlDLEVBQTBHO0FBQ2hIWCxNQUFBQSxpQkFBaUIsR0FBRyxPQUFPVyxhQUEzQjtBQUNBOztBQUNELFFBQUlBLGFBQWEsQ0FBQ1QsVUFBZCxDQUF5QixJQUF6QixLQUFrQ2xCLFdBQVcsQ0FBQ0MsY0FBYyxHQUFHZSxpQkFBbEIsQ0FBakQsRUFBdUY7QUFDdEY7QUFDQTtBQUNBLEtBSEQsTUFHTyxJQUFJLENBQUNXLGFBQWEsQ0FBQ1QsVUFBZCxDQUF5QixJQUF6QixDQUFELElBQW1DbEIsV0FBVyxDQUFDQyxjQUFjLEdBQUdlLGlCQUFsQixDQUFsRCxFQUF3RjtBQUM5RixhQUFPaEIsV0FBVyxDQUFDQyxjQUFjLEdBQUdlLGlCQUFsQixDQUFsQjtBQUNBbkIsTUFBQUEsNEJBQTRCLENBQzNCZ0MsZ0JBRDJCLEVBRTNCL0IsaUJBRjJCLEVBRzNCc0IsYUFIMkIsRUFJM0JwQixXQUoyQixFQUszQkMsY0FMMkIsRUFNM0JlLGlCQU4yQixFQU8zQmIsZ0JBUDJCLEVBUTNCeFksVUFSMkIsRUFTM0IsS0FUMkIsQ0FBNUI7QUFXQSxLQWJNLE1BYUE7QUFDTmtZLE1BQUFBLDRCQUE0QixDQUMzQmdDLGdCQUQyQixFQUUzQi9CLGlCQUYyQixFQUczQnNCLGFBSDJCLEVBSTNCcEIsV0FKMkIsRUFLM0JDLGNBTDJCLEVBTTNCZSxpQkFOMkIsRUFPM0JiLGdCQVAyQixFQVEzQnhZLFVBUjJCLEVBUzNCLEtBVDJCLENBQTVCO0FBV0E7QUFDRDs7QUFDRCxXQUFTbWEsZ0NBQVQsQ0FBMENoQyxpQkFBMUMsRUFBa0VpQyxZQUFsRSxFQUF1RmxMLEtBQXZGLEVBQW1HO0FBQ2xHLFFBQU1tTCxhQUFhLEdBQUd6VyxXQUFXLENBQUNYLGVBQVosQ0FBNEJpTSxLQUE1QixDQUF0QjtBQUNBLFFBQU1vTCxrQkFBa0IsR0FBR0QsYUFBYSxDQUFDRSxvQkFBZCxFQUEzQjtBQUNBLFdBQU9ELGtCQUFrQixDQUFDRSxnQ0FBbkIsQ0FBb0RKLFlBQXBELEVBQWtFakMsaUJBQWlCLENBQUNzQyxZQUFsQixFQUFsRSxDQUFQO0FBQ0E7O0FBQ0QsV0FBU0MseUNBQVQsQ0FBbUR2QyxpQkFBbkQsRUFBMkV3QyxRQUEzRSxFQUEwRkMsV0FBMUYsRUFBNEdDLFdBQTVHLEVBQStIO0FBQzlILFFBQUlDLE9BQUo7QUFBQSxRQUNDQyxJQUFJLEdBQUcsRUFEUjtBQUFBLFFBRUNDLEtBQUssR0FBRyxJQUZUOztBQUdBLFFBQU1DLGtCQUFrQixHQUFHLFVBQVNDLFNBQVQsRUFBeUJDLFNBQXpCLEVBQXlDQyxVQUF6QyxFQUEwRDtBQUNwRixVQUFNQyxrQkFBa0IsR0FBRztBQUMxQkMsUUFBQUEsTUFBTSxFQUFFLEVBRGtCO0FBRTFCQyxRQUFBQSxJQUFJLEVBQUUsR0FGb0I7QUFHMUJDLFFBQUFBLEdBQUcsRUFBRUwsU0FIcUI7QUFJMUJNLFFBQUFBLElBQUksRUFBRUw7QUFKb0IsT0FBM0I7O0FBTUEsY0FBUUYsU0FBUjtBQUNDLGFBQUssVUFBTDtBQUNDRyxVQUFBQSxrQkFBa0IsQ0FBQ0MsTUFBbkIsR0FBNEIsSUFBNUI7QUFDQTs7QUFDRCxhQUFLLFlBQUw7QUFDQ0QsVUFBQUEsa0JBQWtCLENBQUNDLE1BQW5CLEdBQTRCLElBQTVCO0FBQ0FELFVBQUFBLGtCQUFrQixDQUFDRyxHQUFuQixJQUEwQixHQUExQjtBQUNBOztBQUNELGFBQUssVUFBTDtBQUNDSCxVQUFBQSxrQkFBa0IsQ0FBQ0MsTUFBbkIsR0FBNEIsSUFBNUI7QUFDQUQsVUFBQUEsa0JBQWtCLENBQUNHLEdBQW5CLEdBQXlCLE1BQU1ILGtCQUFrQixDQUFDRyxHQUFsRDtBQUNBOztBQUNELGFBQUssSUFBTDtBQUNBLGFBQUssSUFBTDtBQUNBLGFBQUssSUFBTDtBQUNBLGFBQUssSUFBTDtBQUNBLGFBQUssSUFBTDtBQUNBLGFBQUssSUFBTDtBQUNDSCxVQUFBQSxrQkFBa0IsQ0FBQ0MsTUFBbkIsR0FBNEJKLFNBQTVCO0FBQ0E7O0FBQ0QsYUFBSyxPQUFMO0FBQ0EsYUFBSyxNQUFMO0FBQ0NHLFVBQUFBLGtCQUFrQixDQUFDQyxNQUFuQixHQUE0QixJQUE1QjtBQUNBOztBQUNELGFBQUssS0FBTDtBQUNDRCxVQUFBQSxrQkFBa0IsQ0FBQ0MsTUFBbkIsR0FBNEIsSUFBNUI7QUFDQTs7QUFDRCxhQUFLLE9BQUw7QUFDQ0QsVUFBQUEsa0JBQWtCLENBQUNDLE1BQW5CLEdBQTRCLElBQTVCO0FBQ0FELFVBQUFBLGtCQUFrQixDQUFDRyxHQUFuQixHQUF5QixFQUF6QjtBQUNBOztBQUNELGFBQUssYUFBTDtBQUNDSCxVQUFBQSxrQkFBa0IsQ0FBQ0MsTUFBbkIsR0FBNEIsSUFBNUI7QUFDQUQsVUFBQUEsa0JBQWtCLENBQUNFLElBQW5CLEdBQTBCLEdBQTFCO0FBQ0E7O0FBQ0QsYUFBSyxPQUFMO0FBQ0NGLFVBQUFBLGtCQUFrQixDQUFDQyxNQUFuQixHQUE0QixJQUE1QjtBQUNBRCxVQUFBQSxrQkFBa0IsQ0FBQ0UsSUFBbkIsR0FBMEIsR0FBMUI7QUFDQTs7QUFDRCxhQUFLLGVBQUw7QUFDQ0YsVUFBQUEsa0JBQWtCLENBQUNDLE1BQW5CLEdBQTRCLElBQTVCO0FBQ0FELFVBQUFBLGtCQUFrQixDQUFDRyxHQUFuQixJQUEwQixHQUExQjtBQUNBSCxVQUFBQSxrQkFBa0IsQ0FBQ0UsSUFBbkIsR0FBMEIsR0FBMUI7QUFDQTs7QUFDRCxhQUFLLGFBQUw7QUFDQ0YsVUFBQUEsa0JBQWtCLENBQUNDLE1BQW5CLEdBQTRCLElBQTVCO0FBQ0FELFVBQUFBLGtCQUFrQixDQUFDRyxHQUFuQixHQUF5QixNQUFNSCxrQkFBa0IsQ0FBQ0csR0FBbEQ7QUFDQUgsVUFBQUEsa0JBQWtCLENBQUNFLElBQW5CLEdBQTBCLEdBQTFCO0FBQ0E7O0FBQ0QsYUFBSyxVQUFMO0FBQ0NGLFVBQUFBLGtCQUFrQixDQUFDQyxNQUFuQixHQUE0QixJQUE1QjtBQUNBRCxVQUFBQSxrQkFBa0IsQ0FBQ0csR0FBbkIsR0FBeUIsRUFBekI7QUFDQTs7QUFDRCxhQUFLLE9BQUw7QUFDQ0gsVUFBQUEsa0JBQWtCLENBQUNDLE1BQW5CLEdBQTRCLElBQTVCO0FBQ0FELFVBQUFBLGtCQUFrQixDQUFDRSxJQUFuQixHQUEwQixHQUExQjtBQUNBOztBQUNELGFBQUssT0FBTDtBQUNDRixVQUFBQSxrQkFBa0IsQ0FBQ0MsTUFBbkIsR0FBNEIsSUFBNUI7QUFDQUQsVUFBQUEsa0JBQWtCLENBQUNFLElBQW5CLEdBQTBCLEdBQTFCO0FBQ0E7O0FBQ0QsYUFBSyxPQUFMO0FBQ0NGLFVBQUFBLGtCQUFrQixDQUFDQyxNQUFuQixHQUE0QixJQUE1QjtBQUNBRCxVQUFBQSxrQkFBa0IsQ0FBQ0UsSUFBbkIsR0FBMEIsR0FBMUI7QUFDQTs7QUFDRCxhQUFLLE9BQUw7QUFDQ0YsVUFBQUEsa0JBQWtCLENBQUNDLE1BQW5CLEdBQTRCLElBQTVCO0FBQ0FELFVBQUFBLGtCQUFrQixDQUFDRSxJQUFuQixHQUEwQixHQUExQjtBQUNBOztBQUNEO0FBQ0NuVSxVQUFBQSxHQUFHLENBQUNxRixPQUFKLENBQVl5TyxTQUFTLEdBQUcscUJBQVosR0FBb0NKLE9BQXBDLEdBQThDLCtDQUExRDtBQXRFRjs7QUF3RUEsYUFBT08sa0JBQVA7QUFDQSxLQWhGRDs7QUFpRkEsUUFBTUssaUJBQWlCLEdBQUdmLFFBQVEsQ0FBQ2dCLGdCQUFuQztBQUNBLFFBQU1DLHVCQUF1QixHQUFHakIsUUFBUSxDQUFDa0IsK0JBQVQsR0FBMkNsQixRQUFRLENBQUNrQiwrQkFBcEQsR0FBc0YsRUFBdEg7QUFDQSxRQUFNQywrQkFBK0IsR0FBR2xCLFdBQVcsQ0FBQ21CLHlCQUFaLEdBQXdDbkIsV0FBVyxDQUFDbUIseUJBQXBELEdBQWdGLEVBQXhIOztBQUNBLFFBQU1DLDRCQUE0QixHQUFHLFVBQVM3RCxpQkFBVCxFQUFpQzhELFdBQWpDLEVBQW1EOWIsS0FBbkQsRUFBZ0U7QUFDcEcsVUFBTStiLFFBQVEsR0FBR1IsaUJBQWlCLENBQUNPLFdBQUQsQ0FBbEM7O0FBQ0EsV0FBSyxJQUFNamEsSUFBWCxJQUFtQmthLFFBQW5CLEVBQTZCO0FBQzVCLFlBQU0vTixPQUFPLEdBQUcrTixRQUFRLENBQUNsYSxJQUFELENBQXhCO0FBQ0ErWSxRQUFBQSxJQUFJLEdBQUk1TSxPQUFPLENBQUNnTyxNQUFSLENBQWUsQ0FBZixLQUFxQmhPLE9BQU8sQ0FBQ2dPLE1BQVIsQ0FBZSxDQUFmLEVBQWtCdEgsUUFBbEIsRUFBdEIsSUFBdUQsRUFBOUQ7QUFDQW1HLFFBQUFBLEtBQUssR0FBSTdNLE9BQU8sQ0FBQ2dPLE1BQVIsQ0FBZSxDQUFmLEtBQXFCaE8sT0FBTyxDQUFDZ08sTUFBUixDQUFlLENBQWYsRUFBa0J0SCxRQUFsQixFQUF0QixJQUF1RCxJQUEvRDs7QUFDQSxZQUFJMUcsT0FBTyxDQUFDOEosUUFBUixLQUFxQixPQUFyQixJQUFnQzlKLE9BQU8sQ0FBQzhKLFFBQVIsS0FBcUIsTUFBekQsRUFBaUU7QUFDaEUsY0FBTW1FLE9BQU8sR0FBR3ZCLFdBQVcsQ0FBQyxDQUFELENBQVgsQ0FBZXFCLFFBQWYsQ0FBd0J2SCxNQUF4QixDQUErQixVQUFTeEcsT0FBVCxFQUF1QjtBQUNyRSxtQkFBT0EsT0FBTyxDQUFDaE8sS0FBUixLQUFrQjhiLFdBQXpCO0FBQ0EsV0FGZSxDQUFoQjtBQUdBbEIsVUFBQUEsSUFBSSxHQUFHcUIsT0FBTyxDQUFDLENBQUQsQ0FBUCxDQUFXQyxPQUFYLElBQXNCLEVBQTdCO0FBQ0FyQixVQUFBQSxLQUFLLEdBQUcsSUFBUjtBQUNBOztBQUNELFlBQU1zQixtQkFBbUIsR0FBR3JCLGtCQUFrQixDQUFDOU0sT0FBTyxDQUFDOEosUUFBVCxFQUFtQjhDLElBQW5CLEVBQXlCQyxLQUF6QixDQUE5Qzs7QUFDQSxZQUFJc0IsbUJBQW1CLENBQUNoQixNQUF4QixFQUFnQztBQUMvQm5ELFVBQUFBLGlCQUFpQixDQUFDb0UsZUFBbEIsQ0FDQ3BjLEtBQUssR0FBR0EsS0FBSCxHQUFXOGIsV0FEakIsRUFFQ0ssbUJBQW1CLENBQUNmLElBRnJCLEVBR0NlLG1CQUFtQixDQUFDaEIsTUFIckIsRUFJQ2dCLG1CQUFtQixDQUFDZCxHQUpyQixFQUtDYyxtQkFBbUIsQ0FBQ2IsSUFMckI7QUFPQTtBQUNEO0FBQ0QsS0F4QkQ7O0FBMEJBLFNBQUtYLE9BQUwsSUFBZ0JZLGlCQUFoQixFQUFtQztBQUNsQztBQUNBLFVBQUksQ0FBQ3ZELGlCQUFpQixDQUFDUyxlQUFsQixDQUFrQ2tDLE9BQWxDLENBQUwsRUFBaUQ7QUFDaEQ7QUFDQSxZQUFJQSxPQUFPLEtBQUssWUFBaEIsRUFBOEI7QUFDN0I7QUFDQTs7QUFDRGtCLFFBQUFBLDRCQUE0QixDQUFDN0QsaUJBQUQsRUFBb0IyQyxPQUFwQixDQUE1QjtBQUNBLE9BTkQsTUFNTztBQUNOLFlBQUlnQiwrQkFBK0IsSUFBSWhCLE9BQU8sSUFBSWdCLCtCQUFsRCxFQUFtRjtBQUNsRkUsVUFBQUEsNEJBQTRCLENBQUM3RCxpQkFBRCxFQUFvQjJDLE9BQXBCLEVBQTZCZ0IsK0JBQStCLENBQUNoQixPQUFELENBQTVELENBQTVCO0FBQ0EsU0FISyxDQUlOOzs7QUFDQSxZQUFJQSxPQUFPLElBQUljLHVCQUFmLEVBQXdDO0FBQ3ZDSSxVQUFBQSw0QkFBNEIsQ0FBQzdELGlCQUFELEVBQW9CMkMsT0FBcEIsRUFBNkJjLHVCQUF1QixDQUFDZCxPQUFELENBQXBELENBQTVCO0FBQ0E7QUFDRDtBQUNEOztBQUNELFdBQU8zQyxpQkFBUDtBQUNBOztBQUNELFdBQVNxRSxnQkFBVCxDQUEwQnhaLFFBQTFCLEVBQTZDO0FBQzVDLFFBQU15WixhQUFhLEdBQUdDLFdBQVcsQ0FBQ0Msd0JBQVosQ0FBc0MzWixRQUFRLENBQUMyRixRQUFULEVBQUQsQ0FBb0NDLFlBQXBDLEVBQXJDLENBQXRCO0FBQ0EsUUFBTWlELFdBQVcsR0FBRzdJLFFBQVEsQ0FBQzJGLFFBQVQsQ0FBa0IsSUFBbEIsRUFBd0J2SixXQUF4QixDQUFvQyxhQUFwQyxDQUFwQjtBQUNBLFdBQU9xZCxhQUFhLElBQUk1USxXQUF4QjtBQUNBO0FBQ0Q7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7O0FBQ0EsV0FBUytRLHlCQUFULENBQW1Dbk8sc0JBQW5DLEVBQWtFMEosaUJBQWxFLEVBQTBGMEUseUJBQTFGLEVBQTBIO0FBQ3pILFFBQUkxRSxpQkFBaUIsSUFBSTFKLHNCQUFyQixJQUErQ0Esc0JBQXNCLENBQUNyTyxNQUExRSxFQUFrRjtBQUNqRixXQUFLLElBQUlILENBQUMsR0FBRyxDQUFiLEVBQWdCQSxDQUFDLEdBQUd3TyxzQkFBc0IsQ0FBQ3JPLE1BQTNDLEVBQW1ESCxDQUFDLEVBQXBELEVBQXdEO0FBQ3ZELFlBQU02YyxTQUFTLEdBQUczRSxpQkFBaUIsQ0FBQ1MsZUFBbEIsQ0FBa0MsaUJBQWxDLENBQWxCO0FBQUEsWUFDQ21FLGdCQUFnQixHQUFHRix5QkFBeUIsSUFBSUEseUJBQXlCLENBQUNqRSxlQUExQixDQUEwQyxpQkFBMUMsQ0FEakQ7O0FBRUEsWUFDQ25LLHNCQUFzQixDQUFDeE8sQ0FBRCxDQUF0QixDQUEwQnVCLGFBQTFCLEtBQTRDLGlCQUE1QyxLQUNDLENBQUNzYixTQUFELElBQWMsQ0FBQ0EsU0FBUyxDQUFDMWMsTUFEMUIsS0FFQTJjLGdCQUZBLElBR0FBLGdCQUFnQixDQUFDM2MsTUFKbEIsRUFLRTtBQUNELGNBQU00YywyQkFBMkIsR0FBR0QsZ0JBQWdCLENBQUMsQ0FBRCxDQUFwRDtBQUNBLGNBQU1FLEtBQUssR0FBR0QsMkJBQTJCLENBQUMsTUFBRCxDQUF6QztBQUNBLGNBQU1FLE9BQU8sR0FBR0YsMkJBQTJCLENBQUMsUUFBRCxDQUEzQztBQUNBLGNBQU1qQyxJQUFJLEdBQUdpQywyQkFBMkIsQ0FBQyxLQUFELENBQXhDO0FBQ0EsY0FBTWhDLEtBQUssR0FBR2dDLDJCQUEyQixDQUFDLE1BQUQsQ0FBekM7QUFDQTdFLFVBQUFBLGlCQUFpQixDQUFDb0UsZUFBbEIsQ0FBa0MsaUJBQWxDLEVBQXFEVSxLQUFyRCxFQUE0REMsT0FBNUQsRUFBcUVuQyxJQUFyRSxFQUEyRUMsS0FBM0U7QUFDQTtBQUNEO0FBQ0Q7QUFDRDs7QUFDRCxXQUFTbUMsMkJBQVQsQ0FBcUNuZCxVQUFyQyxFQUFpRUcsS0FBakUsRUFBNkUrTyxLQUE3RSxFQUEwRjtBQUN6RixRQUFNMUksY0FBYyxHQUFHeEcsVUFBVSxDQUFDTyxTQUFYLENBQXFCSixLQUFLLEdBQUcsR0FBN0IsRUFBa0NpZCxJQUF6RDtBQUNBLFFBQU1DLHlCQUF5QixHQUFHLEVBQWxDO0FBQ0EsUUFBTWpQLFdBQVcsR0FBR3BPLFVBQVUsQ0FBQ08sU0FBWCxDQUFxQkosS0FBSyxHQUFHLEdBQTdCLENBQXBCOztBQUNBLFNBQUssSUFBTTZCLElBQVgsSUFBbUJvTSxXQUFuQixFQUFnQztBQUMvQixVQUFJQSxXQUFXLENBQUNwTSxJQUFELENBQVgsQ0FBa0J1TSxLQUFsQixJQUEyQkgsV0FBVyxDQUFDcE0sSUFBRCxDQUFYLENBQWtCdU0sS0FBbEIsS0FBNEIsVUFBM0QsRUFBdUU7QUFDdEUsWUFBTStPLFlBQVksR0FBR3RkLFVBQVUsQ0FBQ08sU0FBWCxDQUFxQkosS0FBSyxHQUFHLEdBQVIsR0FBYzZCLElBQWQsR0FBcUIsR0FBMUMsS0FBa0QsRUFBdkU7QUFBQSxZQUNDdWIsTUFBTSxHQUFHL1csY0FBYyxDQUFDbEgsT0FBZixDQUF1QjBDLElBQXZCLElBQStCLENBQUMsQ0FEMUM7QUFBQSxZQUVDd2IsWUFBWSxHQUFHRixZQUFZLENBQUMsOEJBQUQsQ0FGNUI7QUFBQSxZQUdDRyxjQUFjLEdBQUcsQ0FBQ0gsWUFBWSxDQUFDLDZCQUFELENBSC9CO0FBQUEsWUFJQ0ksVUFBVSxHQUFHLENBQUNKLFlBQVksQ0FBQyxvQ0FBRCxDQUozQjtBQUFBLFlBS0NLLHVCQUF1QixHQUFHTCxZQUFZLENBQUMseUNBQUQsQ0FMdkM7QUFBQSxZQU1DTSxrQ0FBa0MsR0FDakNMLE1BQU0sSUFBSW5QLFdBQVcsQ0FBQ3BNLElBQUQsQ0FBWCxDQUFrQndPLEtBQWxCLEtBQTRCLFVBQXRDLEdBQ0dtTix1QkFBdUIsSUFBSUwsWUFBWSxDQUFDLHNDQUFELENBRDFDLEdBRUcsS0FUTDs7QUFVQSxZQUNDLENBQUNFLFlBQVksSUFBSUksa0NBQWhCLElBQXVETCxNQUFNLElBQUluUCxXQUFXLENBQUNwTSxJQUFELENBQVgsQ0FBa0J3TyxLQUFsQixLQUE0QixVQUE5RixLQUNBaU4sY0FEQSxJQUVBQyxVQUhELEVBSUU7QUFDREwsVUFBQUEseUJBQXlCLENBQUM5WSxJQUExQixDQUErQnZDLElBQS9CO0FBQ0E7O0FBRUQsWUFBSSxDQUFDeWIsY0FBRCxJQUFtQkUsdUJBQW5CLElBQThDek8sS0FBbEQsRUFBeUQ7QUFBQTs7QUFDeEQsY0FBTTJPLFlBQVksR0FBRzVhLGVBQWUsQ0FBQ2lNLEtBQUQsQ0FBZixDQUF1QjRPLGNBQXZCLEVBQXJCO0FBQ0EsY0FBTUMsUUFBUSxHQUFHLDhFQUFqQjtBQUNBRixVQUFBQSxZQUFZLENBQUNHLFFBQWIsQ0FDQ0MsYUFBYSxDQUFDQyxVQURmLEVBRUNDLGFBQWEsQ0FBQ0MsTUFGZixFQUdDTCxRQUhELEVBSUNNLGlCQUpELEVBS0NBLGlCQUxELGFBS0NBLGlCQUxELGdEQUtDQSxpQkFBaUIsQ0FBRUMsV0FMcEIsMERBS0Msc0JBQWdDQyxpQkFMakM7QUFPQTtBQUNEO0FBQ0Q7O0FBQ0QsV0FBT2xCLHlCQUFQO0FBQ0E7O0FBQ0QsV0FBU21CLGVBQVQsQ0FDQ25FLGFBREQsRUFFQ29FLFdBRkQsRUFHQ2plLE1BSEQsRUFJQ2tlLFNBSkQsRUFLQ0MsU0FMRCxFQU1DQyxvQkFORCxFQU9FO0FBQ0QsV0FBTyxJQUFJL00sT0FBSixDQUFZLFVBQVNDLE9BQVQsRUFBd0M7QUFDMUQsVUFBTStNLGNBQWMsR0FBR3hFLGFBQWEsQ0FBQ3lFLGdCQUFkLEVBQXZCO0FBQUEsVUFDQ0Msa0JBQWtCLEdBQUlGLGNBQWMsSUFBSUEsY0FBYyxDQUFDRyxpQkFBbEMsSUFBd0QsRUFEOUU7QUFBQSxVQUVDQyxjQUFjLEdBQUc1RSxhQUFhLENBQUN0WCxnQkFBZCxFQUZsQjs7QUFHQSxVQUFJLENBQUNrYyxjQUFjLENBQUNDLFNBQWYsRUFBTCxFQUFpQztBQUNoQ1QsUUFBQUEsV0FBVyxDQUFDOWUsT0FBWixDQUFvQixVQUFTd2YsVUFBVCxFQUEwQjtBQUM3QyxjQUFNbkYsYUFBYSxHQUFHMEUsU0FBUyxHQUM1QixNQUFNUyxVQUFVLENBQUNDLEtBRFcsR0FFNUJELFVBQVUsQ0FBQ3JXLE9BQVgsR0FBcUIySSxLQUFyQixDQUEyQjBOLFVBQVUsQ0FBQ3JXLE9BQVgsR0FBcUJzTyxXQUFyQixDQUFpQyxHQUFqQyxJQUF3QyxDQUFuRSxDQUZIO0FBR0EsY0FBTWlJLGNBQWMsR0FBR1gsU0FBUyxHQUFHMUUsYUFBYSxDQUFDdkksS0FBZCxDQUFvQixDQUFwQixDQUFILEdBQTRCdUksYUFBNUQ7O0FBQ0EsY0FBSTRFLG9CQUFvQixJQUFJRCxTQUE1QixFQUF1QztBQUN0QyxnQkFBSUMsb0JBQW9CLENBQUNTLGNBQUQsQ0FBeEIsRUFBMEM7QUFDekM3ZSxjQUFBQSxNQUFNLENBQUM2SCxXQUFQLENBQW1CMlIsYUFBbkIsRUFBa0M0RSxvQkFBb0IsQ0FBQ1MsY0FBRCxDQUF0RDtBQUNBO0FBQ0QsV0FKRCxNQUlPLElBQUlOLGtCQUFrQixDQUFDTSxjQUFELENBQXRCLEVBQXdDO0FBQzlDN2UsWUFBQUEsTUFBTSxDQUFDNkgsV0FBUCxDQUFtQjJSLGFBQW5CLEVBQWtDK0Usa0JBQWtCLENBQUNNLGNBQUQsQ0FBbEIsQ0FBbUMsQ0FBbkMsQ0FBbEM7QUFDQTtBQUNELFNBWkQ7QUFhQSxlQUFPdk4sT0FBTyxDQUFDLElBQUQsQ0FBZDtBQUNBOztBQUNELGFBQU9tTixjQUFjLENBQUNLLGtCQUFmLENBQWtDakYsYUFBbEMsRUFBaURyVCxJQUFqRCxDQUFzRCxVQUFTdVksZ0JBQVQsRUFBZ0M7QUFDNUYsWUFBTWxRLEtBQUssR0FBR2tRLGdCQUFnQixDQUFDQyxPQUFqQixNQUE4QixFQUE1QztBQUFBLFlBQ0NDLG1CQUFtQixHQUFJcFEsS0FBSyxDQUFDcVEsZ0JBQU4sSUFBMEJyUSxLQUFLLENBQUNxUSxnQkFBTixDQUF1QkMsYUFBbEQsSUFBb0UsRUFEM0Y7QUFFQWxCLFFBQUFBLFdBQVcsQ0FBQzllLE9BQVosQ0FBb0IsVUFBU3dmLFVBQVQsRUFBMEI7QUFDN0MsY0FBTW5GLGFBQWEsR0FBRzBFLFNBQVMsR0FDNUIsTUFBTVMsVUFBVSxDQUFDQyxLQURXLEdBRTVCRCxVQUFVLENBQUNyVyxPQUFYLEdBQXFCMkksS0FBckIsQ0FBMkIwTixVQUFVLENBQUNyVyxPQUFYLEdBQXFCc08sV0FBckIsQ0FBaUMsR0FBakMsSUFBd0MsQ0FBbkUsQ0FGSDtBQUdBLGNBQU1pSSxjQUFjLEdBQUdYLFNBQVMsR0FBRzFFLGFBQWEsQ0FBQ3ZJLEtBQWQsQ0FBb0IsQ0FBcEIsQ0FBSCxHQUE0QnVJLGFBQTVEOztBQUNBLGNBQUk0RSxvQkFBb0IsSUFBSUQsU0FBNUIsRUFBdUM7QUFDdEMsZ0JBQUlDLG9CQUFvQixDQUFDUyxjQUFELENBQXhCLEVBQTBDO0FBQ3pDN2UsY0FBQUEsTUFBTSxDQUFDNkgsV0FBUCxDQUFtQjJSLGFBQW5CLEVBQWtDNEUsb0JBQW9CLENBQUNTLGNBQUQsQ0FBdEQ7QUFDQTtBQUNELFdBSkQsTUFJTyxJQUFJTixrQkFBa0IsQ0FBQ00sY0FBRCxDQUF0QixFQUF3QztBQUM5QzdlLFlBQUFBLE1BQU0sQ0FBQzZILFdBQVAsQ0FBbUIyUixhQUFuQixFQUFrQytFLGtCQUFrQixDQUFDTSxjQUFELENBQWxCLENBQW1DLENBQW5DLENBQWxDO0FBQ0EsV0FGTSxNQUVBLElBQUlJLG1CQUFtQixDQUFDcmYsTUFBcEIsR0FBNkIsQ0FBakMsRUFBb0M7QUFDMUMsaUJBQUssSUFBTUgsQ0FBWCxJQUFnQndmLG1CQUFoQixFQUFxQztBQUNwQyxrQkFBTUcsa0JBQWtCLEdBQUdILG1CQUFtQixDQUFDeGYsQ0FBRCxDQUE5Qzs7QUFDQSxrQkFBSTJmLGtCQUFrQixDQUFDQyxZQUFuQixLQUFvQ1IsY0FBeEMsRUFBd0Q7QUFDdkQsb0JBQU1TLE1BQU0sR0FBR0Ysa0JBQWtCLENBQUNHLE1BQW5CLENBQTBCM2YsTUFBMUIsR0FBbUN3ZixrQkFBa0IsQ0FBQ0csTUFBbkIsQ0FBMEIsQ0FBMUIsQ0FBbkMsR0FBa0VwaEIsU0FBakY7O0FBQ0Esb0JBQUltaEIsTUFBTSxJQUFJQSxNQUFNLENBQUNFLElBQVAsS0FBZ0IsR0FBMUIsSUFBaUNGLE1BQU0sQ0FBQ0csTUFBUCxLQUFrQixJQUF2RCxFQUE2RDtBQUM1RHpmLGtCQUFBQSxNQUFNLENBQUM2SCxXQUFQLENBQW1CMlIsYUFBbkIsRUFBa0M4RixNQUFNLENBQUNJLEdBQXpDLEVBRDRELENBQ2I7QUFDL0M7QUFDRDtBQUNEO0FBQ0Q7QUFDRCxTQXRCRDtBQXVCQSxlQUFPcE8sT0FBTyxDQUFDLElBQUQsQ0FBZDtBQUNBLE9BM0JNLENBQVA7QUE0QkEsS0FoRE0sQ0FBUDtBQWlEQTs7QUFDRCxXQUFTcU8sNEJBQVQsQ0FBc0NwQixrQkFBdEMsRUFBK0RxQixrQkFBL0QsRUFBd0Y7QUFDdkYsUUFBTUMsU0FBUyxHQUFHRCxrQkFBbEI7QUFBQSxRQUNDRSxpQkFBaUIsR0FBR0QsU0FBUyxHQUMxQmpjLE1BQU0sQ0FBQ0MsSUFBUCxDQUFZZ2MsU0FBWixFQUF1QjFMLE1BQXZCLENBQThCLFVBQVM0TCxVQUFULEVBQTZCO0FBQzNELGFBQU9GLFNBQVMsQ0FBQ0UsVUFBRCxDQUFULENBQXNCQyxZQUE3QjtBQUNDLEtBRkQsQ0FEMEIsR0FJMUIsRUFMSjtBQU1BLFFBQUlDLElBQUo7O0FBQ0EsU0FBSyxJQUFJeGdCLENBQUMsR0FBRyxDQUFiLEVBQWdCQSxDQUFDLEdBQUdxZ0IsaUJBQWlCLENBQUNsZ0IsTUFBdEMsRUFBOENILENBQUMsRUFBL0MsRUFBbUQ7QUFDbEQsVUFBTXlnQixnQkFBZ0IsR0FBR0osaUJBQWlCLENBQUNyZ0IsQ0FBRCxDQUExQztBQUNBLFVBQU0wZ0IsT0FBTyxHQUFHNUIsa0JBQWtCLElBQUlBLGtCQUFrQixDQUFDMkIsZ0JBQUQsQ0FBeEQ7O0FBQ0EsVUFBSUMsT0FBTyxJQUFJQSxPQUFPLENBQUN2Z0IsTUFBUixLQUFtQixDQUFsQyxFQUFxQztBQUNwQ3FnQixRQUFBQSxJQUFJLEdBQUdBLElBQUksSUFBSXJjLE1BQU0sQ0FBQ3djLE1BQVAsQ0FBYyxJQUFkLENBQWY7QUFDQUgsUUFBQUEsSUFBSSxDQUFDQyxnQkFBRCxDQUFKLEdBQXlCQyxPQUFPLENBQUMsQ0FBRCxDQUFoQztBQUNBO0FBQ0Q7O0FBQ0QsV0FBT0YsSUFBUDtBQUNBOztBQUNELFdBQVNJLHdCQUFULENBQWtDQyxTQUFsQyxFQUFrRDtBQUNqRCxRQUFNQyxzQkFBNkIsR0FBRyxFQUF0Qzs7QUFDQSxRQUFJRCxTQUFTLENBQUNFLFVBQWQsRUFBMEI7QUFDekIsVUFBTXZDLFdBQVcsR0FBR3JhLE1BQU0sQ0FBQ0MsSUFBUCxDQUFZeWMsU0FBUyxDQUFDRSxVQUF0QixLQUFxQyxFQUF6RDs7QUFDQSxVQUFJdkMsV0FBVyxDQUFDcmUsTUFBWixHQUFxQixDQUF6QixFQUE0QjtBQUMzQnFlLFFBQUFBLFdBQVcsQ0FBQzllLE9BQVosQ0FBb0IsVUFBU3NoQixNQUFULEVBQXlCO0FBQzVDLGNBQU1oZCxRQUFRLEdBQUc2YyxTQUFTLENBQUNFLFVBQVYsQ0FBcUJDLE1BQXJCLENBQWpCOztBQUNBLGNBQUloZCxRQUFRLENBQUNzQyxLQUFULElBQWtCdEMsUUFBUSxDQUFDc0MsS0FBVCxDQUFlQSxLQUFqQyxJQUEwQ3RDLFFBQVEsQ0FBQ3NDLEtBQVQsQ0FBZTJhLE1BQWYsS0FBMEIsU0FBeEUsRUFBbUY7QUFDbEY7QUFDQSxnQkFBTTVjLGdCQUFnQixHQUFHO0FBQ3hCLCtCQUFpQjtBQUNoQixpQ0FBaUJMLFFBQVEsQ0FBQ3NDLEtBQVQsQ0FBZUE7QUFEaEIsZUFETztBQUl4Qix3Q0FBMEIwYTtBQUpGLGFBQXpCOztBQU9BLGdCQUFJRixzQkFBc0IsQ0FBQzNnQixNQUF2QixHQUFnQyxDQUFwQyxFQUF1QztBQUN0QztBQUNBLG1CQUFLLElBQUlILENBQUMsR0FBRyxDQUFiLEVBQWdCQSxDQUFDLEdBQUc4Z0Isc0JBQXNCLENBQUMzZ0IsTUFBM0MsRUFBbURILENBQUMsRUFBcEQsRUFBd0Q7QUFDdkQsb0JBQ0M4Z0Isc0JBQXNCLENBQUM5Z0IsQ0FBRCxDQUF0QixDQUEwQixlQUExQixFQUEyQyxlQUEzQyxNQUNBcUUsZ0JBQWdCLENBQUMsZUFBRCxDQUFoQixDQUFrQyxlQUFsQyxDQUZELEVBR0U7QUFDRHljLGtCQUFBQSxzQkFBc0IsQ0FBQ3hjLElBQXZCLENBQTRCRCxnQkFBNUI7QUFDQTtBQUNEO0FBQ0QsYUFWRCxNQVVPO0FBQ055YyxjQUFBQSxzQkFBc0IsQ0FBQ3hjLElBQXZCLENBQTRCRCxnQkFBNUI7QUFDQTtBQUNEO0FBQ0QsU0F6QkQ7QUEwQkE7QUFDRDs7QUFDRCxXQUFPeWMsc0JBQVA7QUFDQTs7QUFDRCxXQUFTSSw2Q0FBVCxDQUF1REMsU0FBdkQsRUFBdUVDLFNBQXZFLEVBQXVGO0FBQ3RGLFFBQU1DLGlCQUFzQixHQUFHLEVBQS9CO0FBQ0EsUUFBSUMsR0FBSjtBQUNBLFFBQU1DLGNBQWMsR0FBR0osU0FBUyxDQUFDSyxvQkFBakM7O0FBQ0EsU0FBSyxJQUFNQyxNQUFYLElBQXFCRixjQUFyQixFQUFxQztBQUNwQyxVQUFJRSxNQUFNLENBQUNwaUIsT0FBUCxDQUFlLHVDQUFmLElBQTBELENBQUMsQ0FBM0QsSUFBZ0VvaUIsTUFBTSxDQUFDcGlCLE9BQVAsQ0FBZSxtQ0FBZixJQUFzRCxDQUFDLENBQTNILEVBQThIO0FBQzdILFlBQ0NraUIsY0FBYyxDQUFDRSxNQUFELENBQWQsQ0FBdUJDLFVBQXZCLElBQ0FILGNBQWMsQ0FBQ0UsTUFBRCxDQUFkLENBQXVCQyxVQUF2QixDQUFrQ0MsY0FEbEMsSUFFQUosY0FBYyxDQUFDRSxNQUFELENBQWQsQ0FBdUJDLFVBQXZCLENBQWtDQyxjQUFsQyxDQUFpREMsUUFIbEQsRUFJRTtBQUNELGNBQU1DLFNBQVMsR0FBR04sY0FBYyxDQUFDRSxNQUFELENBQWQsQ0FBdUJDLFVBQXZCLENBQWtDQyxjQUFsQyxDQUFpREMsUUFBbkU7QUFDQSxjQUFNZixTQUFTLEdBQUdPLFNBQVMsQ0FBQ1MsU0FBRCxDQUEzQjs7QUFDQSxjQUFJaEIsU0FBUyxDQUFDaGQsY0FBVixJQUE0QmdkLFNBQVMsQ0FBQ3BaLE1BQTFDLEVBQWtEO0FBQ2pELGdCQUFJZ2EsTUFBTSxDQUFDcGlCLE9BQVAsQ0FBZSxPQUFmLElBQTBCLENBQUMsQ0FBL0IsRUFBa0M7QUFDakNpaUIsY0FBQUEsR0FBRyxHQUFHUSxRQUFRLENBQUMsQ0FBQyxJQUFELEVBQU8sZ0JBQVAsRUFBeUJMLE1BQXpCLENBQUQsQ0FBZDtBQUNBLGFBRkQsTUFFTztBQUNOSCxjQUFBQSxHQUFHLEdBQUdRLFFBQVEsQ0FBQyxDQUFDLElBQUQsRUFBTyxjQUFQLEVBQXVCTCxNQUF2QixDQUFELENBQWQ7QUFDQTs7QUFDRCxnQkFBTVgsc0JBQXNCLEdBQUduZCxXQUFXLENBQUNpZCx3QkFBWixDQUFxQ0MsU0FBckMsQ0FBL0I7QUFDQVEsWUFBQUEsaUJBQWlCLENBQUNDLEdBQUQsQ0FBakIsR0FBeUI7QUFDeEJ6ZCxjQUFBQSxjQUFjLEVBQUVnZCxTQUFTLENBQUNoZCxjQURGO0FBRXhCNEQsY0FBQUEsTUFBTSxFQUFFb1osU0FBUyxDQUFDcFosTUFGTTtBQUd4QjlCLGNBQUFBLHFCQUFxQixFQUFFbWI7QUFIQyxhQUF6QjtBQUtBLFdBWkQsTUFZTztBQUNOM1osWUFBQUEsR0FBRyxDQUFDQyxLQUFKLENBQVUsb0ZBQW9GeWEsU0FBOUY7QUFDQTtBQUNEO0FBQ0Q7QUFDRDs7QUFDRCxXQUFPUixpQkFBUDtBQUNBOztBQUNELFdBQVNVLHlCQUFULENBQW1DN0osaUJBQW5DLEVBQTJEOEosU0FBM0QsRUFBOEU7QUFDN0UsUUFBTUMsU0FBUyxHQUFHLE9BQU9ELFNBQVAsS0FBcUIsUUFBckIsR0FBZ0M1TCxJQUFJLENBQUNDLEtBQUwsQ0FBVzJMLFNBQVgsQ0FBaEMsR0FBd0RBLFNBQTFFOztBQUNBLFNBQUssSUFBSWhpQixDQUFDLEdBQUcsQ0FBYixFQUFnQkEsQ0FBQyxHQUFHaWlCLFNBQVMsQ0FBQzloQixNQUE5QixFQUFzQ0gsQ0FBQyxFQUF2QyxFQUEyQztBQUMxQyxVQUFNa2lCLGNBQWMsR0FDbEJELFNBQVMsQ0FBQ2ppQixDQUFELENBQVQsQ0FBYSxlQUFiLEtBQWlDaWlCLFNBQVMsQ0FBQ2ppQixDQUFELENBQVQsQ0FBYSxlQUFiLEVBQThCLGVBQTlCLENBQWxDLElBQ0NpaUIsU0FBUyxDQUFDamlCLENBQUQsQ0FBVCxDQUFhLCtDQUFiLEtBQ0FpaUIsU0FBUyxDQUFDamlCLENBQUQsQ0FBVCxDQUFhLCtDQUFiLEVBQThELE9BQTlELENBSEY7QUFJQSxVQUFNbWlCLHVCQUF1QixHQUM1QkYsU0FBUyxDQUFDamlCLENBQUQsQ0FBVCxDQUFhLHdCQUFiLEtBQTBDaWlCLFNBQVMsQ0FBQ2ppQixDQUFELENBQVQsQ0FBYSx3REFBYixDQUQzQzs7QUFFQSxVQUFJa1ksaUJBQWlCLENBQUNTLGVBQWxCLENBQWtDdUosY0FBbEMsQ0FBSixFQUF1RDtBQUN0RCxZQUFNckssYUFBYSxHQUFHSyxpQkFBaUIsQ0FBQ1MsZUFBbEIsQ0FBa0N1SixjQUFsQyxDQUF0QixDQURzRCxDQUd0RDs7QUFDQWhLLFFBQUFBLGlCQUFpQixDQUFDa0ssa0JBQWxCLENBQXFDRixjQUFyQztBQUNBaEssUUFBQUEsaUJBQWlCLENBQUNtSyxtQkFBbEIsQ0FBc0NGLHVCQUF0QyxFQUErRHRLLGFBQS9EO0FBQ0E7QUFDRDs7QUFDRCxXQUFPSyxpQkFBUDtBQUNBOztBQUNELFdBQVNvSyw0QkFBVCxDQUFzQ3ZpQixVQUF0QyxFQUF1REcsS0FBdkQsRUFBbUU7QUFDbEUsV0FBTyxJQUFJMFIsT0FBSixDQUFZLFVBQVNDLE9BQVQsRUFBd0M7QUFDMUQsVUFBTXRDLGVBQWUsR0FBR3hQLFVBQVUsQ0FBQ08sU0FBWCxDQUFxQkosS0FBSyxHQUFHLGdEQUE3QixDQUF4QjtBQUNBLFVBQU1xaUIsaUNBQWlDLEdBQUd4aUIsVUFBVSxDQUFDTyxTQUFYLENBQ3pDSixLQUFLLEdBQUcsa0VBRGlDLENBQTFDO0FBR0EsVUFBTXNpQiwwQkFBMEIsR0FBRyxDQUFDO0FBQUUzZSxRQUFBQSxjQUFjLEVBQUUwTDtBQUFsQixPQUFELENBQW5DO0FBQ0EsVUFBTS9MLGVBQWUsR0FBRztBQUN2QkssUUFBQUEsY0FBYyxFQUFFMEw7QUFETyxPQUF4QjtBQUdBc0MsTUFBQUEsT0FBTyxDQUFDO0FBQ1A0USxRQUFBQSxrQkFBa0IsRUFBRXZpQixLQURiO0FBRVB3aUIsUUFBQUEseUJBQXlCLEVBQUVGLDBCQUZwQjtBQUdQM2UsUUFBQUEsY0FBYyxFQUFFTCxlQUhUO0FBSVBnQyxRQUFBQSxrQkFBa0IsRUFBRStjO0FBSmIsT0FBRCxDQUFQO0FBTUEsS0FmTSxFQWVKdGIsS0FmSSxDQWVFLFVBQVNDLE1BQVQsRUFBc0I7QUFDOUJDLE1BQUFBLEdBQUcsQ0FBQ0MsS0FBSixDQUFVLHVDQUFWLEVBQW1ERixNQUFuRDtBQUNBLEtBakJNLENBQVA7QUFrQkE7O0FBQ0QsV0FBU3liLDRCQUFULENBQXNDQyxpQkFBdEMsRUFBOERDLGdCQUE5RCxFQUFxRnpRLHFCQUFyRixFQUFpSDBRLFlBQWpILEVBQW9JO0FBQ25JLFdBQU9sUixPQUFPLENBQUNVLEdBQVIsQ0FBWXNRLGlCQUFaLEVBQ0w3YixJQURLLENBQ0EsVUFBUzJaLE9BQVQsRUFBeUI7QUFDOUIsVUFBSWxjLE1BQUo7QUFBQSxVQUNDdWUsTUFERDtBQUFBLFVBRUNDLGtCQUZEO0FBQUEsVUFHQ0MsV0FBa0IsR0FBRyxFQUh0Qjs7QUFJQSxVQUFJQyxxQkFBMEIsR0FBRyxFQUFqQzs7QUFDQSxVQUFNQyxpQkFBaUIsR0FBRyxVQUFTdGUsT0FBVCxFQUF1QjhKLFFBQXZCLEVBQXNDO0FBQy9ELGFBQUssSUFBTTdKLE1BQVgsSUFBcUI2SixRQUFyQixFQUErQjtBQUM5QixjQUFJN0osTUFBTSxLQUFLRCxPQUFmLEVBQXdCO0FBQ3ZCLG1CQUFPLElBQVA7QUFDQSxXQUZELE1BRU87QUFDTixtQkFBTyxLQUFQO0FBQ0E7QUFDRDtBQUNELE9BUkQ7O0FBVUEsV0FBSyxJQUFJdWUsQ0FBQyxHQUFHLENBQWIsRUFBZ0JBLENBQUMsR0FBRzFDLE9BQU8sQ0FBQ3ZnQixNQUE1QixFQUFvQ2lqQixDQUFDLEVBQXJDLEVBQXlDO0FBQ3hDNWUsUUFBQUEsTUFBTSxHQUFHa2MsT0FBTyxDQUFDMEMsQ0FBRCxDQUFoQjs7QUFDQSxZQUFJNWUsTUFBTSxJQUFJQSxNQUFNLENBQUNyRSxNQUFQLEdBQWdCLENBQTFCLElBQStCcUUsTUFBTSxDQUFDLENBQUQsQ0FBTixLQUFjOUYsU0FBakQsRUFBNEQ7QUFDM0QsY0FBTThFLGVBQW9CLEdBQUcsRUFBN0I7QUFDQSxjQUFJNmYsSUFBSSxHQUFHLEVBQVg7QUFDQSxjQUFJQyxjQUFjLFNBQWxCOztBQUNBLGVBQUssSUFBSXRqQixDQUFDLEdBQUcsQ0FBYixFQUFnQkEsQ0FBQyxHQUFHd0UsTUFBTSxDQUFDckUsTUFBM0IsRUFBbUNILENBQUMsRUFBcEMsRUFBd0M7QUFDdkNpakIsWUFBQUEsV0FBVyxDQUFDM2UsSUFBWixDQUFpQixFQUFqQjtBQUNBLGdCQUFJaWYscUJBQXFCLEdBQUcsS0FBNUI7QUFDQSxnQkFBSUMsVUFBVSxHQUFHLEtBQWpCOztBQUNBLGlCQUFLLElBQUlDLFVBQVUsR0FBRyxDQUF0QixFQUF5QkEsVUFBVSxHQUFHamYsTUFBTSxDQUFDeEUsQ0FBRCxDQUFOLENBQVUsQ0FBVixFQUFhRyxNQUFuRCxFQUEyRHNqQixVQUFVLEVBQXJFLEVBQXlFO0FBQ3hFVixjQUFBQSxNQUFNLEdBQUd2ZSxNQUFNLENBQUN4RSxDQUFELENBQU4sQ0FBVSxDQUFWLEVBQWF5akIsVUFBYixDQUFUO0FBQ0FULGNBQUFBLGtCQUFrQixHQUFHRCxNQUFNLElBQUlBLE1BQU0sQ0FBQ2plLE1BQVAsQ0FBY2xHLEtBQWQsQ0FBb0IsR0FBcEIsRUFBeUIsQ0FBekIsRUFBNEJBLEtBQTVCLENBQWtDLEdBQWxDLEVBQXVDLENBQXZDLENBQS9COztBQUVBLGtCQUFJLEVBQUVta0IsTUFBTSxJQUFJQSxNQUFNLENBQUNqZSxNQUFqQixJQUEyQmllLE1BQU0sQ0FBQ2plLE1BQVAsQ0FBY3pGLE9BQWQsQ0FBc0J5akIsWUFBdEIsTUFBd0MsQ0FBckUsQ0FBSixFQUE2RTtBQUM1RVMsZ0JBQUFBLHFCQUFxQixHQUFHLElBQXhCOztBQUNBLG9CQUFJLENBQUNKLGlCQUFpQixDQUFDSCxrQkFBRCxFQUFxQkgsZ0JBQWdCLENBQUNPLENBQUQsQ0FBaEIsQ0FBb0I1ZCxrQkFBekMsQ0FBdEIsRUFBb0Y7QUFDbkZ5ZCxrQkFBQUEsV0FBVyxDQUFDampCLENBQUQsQ0FBWCxDQUFlc0UsSUFBZixDQUFvQnllLE1BQXBCO0FBQ0FTLGtCQUFBQSxVQUFVLEdBQUcsSUFBYjtBQUNBO0FBQ0Q7QUFDRDs7QUFDREgsWUFBQUEsSUFBSSxHQUFHO0FBQ054ZixjQUFBQSxjQUFjLEVBQUVnZixnQkFBZ0IsQ0FBQ08sQ0FBRCxDQUFoQixDQUFvQnZmLGNBRDlCO0FBRU42UCxjQUFBQSxJQUFJLEVBQUVtUCxnQkFBZ0IsQ0FBQ08sQ0FBRCxDQUFoQixDQUFvQjFQLElBRnBCO0FBR05nUSxjQUFBQSxVQUFVLEVBQUVGLFVBSE47QUFJTkcsY0FBQUEscUJBQXFCLEVBQUVKO0FBSmpCLGFBQVA7O0FBTUEsZ0JBQUkvZixlQUFlLENBQUNxZixnQkFBZ0IsQ0FBQ08sQ0FBRCxDQUFoQixDQUFvQnZmLGNBQXJCLENBQWYsS0FBd0RuRixTQUE1RCxFQUF1RTtBQUN0RThFLGNBQUFBLGVBQWUsQ0FBQ3FmLGdCQUFnQixDQUFDTyxDQUFELENBQWhCLENBQW9CdmYsY0FBckIsQ0FBZixHQUFzRCxFQUF0RDtBQUNBOztBQUNEeWYsWUFBQUEsY0FBYyxHQUFHVCxnQkFBZ0IsQ0FBQ08sQ0FBRCxDQUFoQixDQUFvQjFQLElBQXBCLENBQXlCL1UsT0FBekIsQ0FBaUMsS0FBakMsRUFBd0MsR0FBeEMsQ0FBakI7O0FBQ0EsZ0JBQUk2RSxlQUFlLENBQUNxZixnQkFBZ0IsQ0FBQ08sQ0FBRCxDQUFoQixDQUFvQnZmLGNBQXJCLENBQWYsQ0FBb0R5ZixjQUFwRCxNQUF3RTVrQixTQUE1RSxFQUF1RjtBQUN0RjhFLGNBQUFBLGVBQWUsQ0FBQ3FmLGdCQUFnQixDQUFDTyxDQUFELENBQWhCLENBQW9CdmYsY0FBckIsQ0FBZixDQUFvRHlmLGNBQXBELElBQXNFLEVBQXRFO0FBQ0E7O0FBQ0Q5ZixZQUFBQSxlQUFlLENBQUNxZixnQkFBZ0IsQ0FBQ08sQ0FBRCxDQUFoQixDQUFvQnZmLGNBQXJCLENBQWYsQ0FBb0R5ZixjQUFwRCxJQUFzRW5mLE1BQU0sQ0FBQ3lmLE1BQVAsQ0FDckVwZ0IsZUFBZSxDQUFDcWYsZ0JBQWdCLENBQUNPLENBQUQsQ0FBaEIsQ0FBb0J2ZixjQUFyQixDQUFmLENBQW9EeWYsY0FBcEQsQ0FEcUUsRUFFckVELElBRnFFLENBQXRFO0FBSUE7O0FBQ0QsY0FBTVEsbUJBQW1CLEdBQUcxZixNQUFNLENBQUNDLElBQVAsQ0FBWVosZUFBWixFQUE2QixDQUE3QixDQUE1Qjs7QUFDQSxjQUFJVyxNQUFNLENBQUNDLElBQVAsQ0FBWThlLHFCQUFaLEVBQW1DN0osUUFBbkMsQ0FBNEN3SyxtQkFBNUMsQ0FBSixFQUFzRTtBQUNyRVgsWUFBQUEscUJBQXFCLENBQUNXLG1CQUFELENBQXJCLEdBQTZDMWYsTUFBTSxDQUFDeWYsTUFBUCxDQUM1Q1YscUJBQXFCLENBQUNXLG1CQUFELENBRHVCLEVBRTVDcmdCLGVBQWUsQ0FBQ3FnQixtQkFBRCxDQUY2QixDQUE3QztBQUlBLFdBTEQsTUFLTztBQUNOWCxZQUFBQSxxQkFBcUIsR0FBRy9lLE1BQU0sQ0FBQ3lmLE1BQVAsQ0FBY1YscUJBQWQsRUFBcUMxZixlQUFyQyxDQUF4QjtBQUNBOztBQUNEeWYsVUFBQUEsV0FBVyxHQUFHLEVBQWQ7QUFDQTtBQUNEOztBQUNELFVBQUk5ZSxNQUFNLENBQUNDLElBQVAsQ0FBWThlLHFCQUFaLEVBQW1DL2lCLE1BQW5DLEdBQTRDLENBQWhELEVBQW1EO0FBQ2xEaVMsUUFBQUEscUJBQXFCLENBQUNoSyxXQUF0QixDQUNDLGtCQURELEVBRUMwYixZQUFZLENBQUNaLHFCQUFELEVBQXdCOVEscUJBQXFCLENBQUNqVCxXQUF0QixDQUFrQyxrQkFBbEMsQ0FBeEIsQ0FGYjtBQUlBLGVBQU8rakIscUJBQVA7QUFDQTtBQUNELEtBNUVLLEVBNkVMamMsS0E3RUssQ0E2RUMsVUFBU0MsTUFBVCxFQUFzQjtBQUM1QkMsTUFBQUEsR0FBRyxDQUFDQyxLQUFKLENBQVUsaURBQVYsRUFBNkRGLE1BQTdEO0FBQ0EsS0EvRUssQ0FBUDtBQWdGQTs7QUFDRCxXQUFTNmMsMEJBQVQsQ0FBb0MzSixhQUFwQyxFQUF3RG5MLEtBQXhELEVBQW9FbFAsVUFBcEUsRUFBcUZHLEtBQXJGLEVBQWlHO0FBQ2hHLFdBQU95RCxXQUFXLENBQUNxZ0IsMEJBQVosQ0FBdUNqa0IsVUFBdkMsRUFBbURHLEtBQW5ELENBQVA7QUFDQTs7QUFDRCxXQUFTK2pCLGlDQUFULENBQTJDM1osV0FBM0MsRUFBNkQ0WixVQUE3RCxFQUFpRjtBQUNoRixRQUFNQyxtQkFBbUIsR0FBRyxVQUFTQyxHQUFULEVBQW1CNWQsR0FBbkIsRUFBNkI2ZCxJQUE3QixFQUF3QztBQUNuRSxVQUFJLENBQUNELEdBQUwsRUFBVTtBQUNULGVBQU9DLElBQVA7QUFDQTs7QUFDRCxVQUFJRCxHQUFHLFlBQVlFLEtBQW5CLEVBQTBCO0FBQ3pCLGFBQUssSUFBTXRrQixDQUFYLElBQWdCb2tCLEdBQWhCLEVBQXFCO0FBQ3BCQyxVQUFBQSxJQUFJLEdBQUdBLElBQUksQ0FBQ25jLE1BQUwsQ0FBWWljLG1CQUFtQixDQUFDQyxHQUFHLENBQUNwa0IsQ0FBRCxDQUFKLEVBQVN3RyxHQUFULEVBQWMsRUFBZCxDQUEvQixDQUFQO0FBQ0E7O0FBQ0QsZUFBTzZkLElBQVA7QUFDQTs7QUFDRCxVQUFJRCxHQUFHLENBQUM1ZCxHQUFELENBQVAsRUFBYztBQUNiNmQsUUFBQUEsSUFBSSxDQUFDL2YsSUFBTCxDQUFVOGYsR0FBRyxDQUFDNWQsR0FBRCxDQUFiO0FBQ0E7O0FBRUQsVUFBSSxPQUFPNGQsR0FBUCxJQUFjLFFBQWQsSUFBMEJBLEdBQUcsS0FBSyxJQUF0QyxFQUE0QztBQUMzQyxZQUFNRyxRQUFRLEdBQUdwZ0IsTUFBTSxDQUFDQyxJQUFQLENBQVlnZ0IsR0FBWixDQUFqQjs7QUFDQSxZQUFJRyxRQUFRLENBQUNwa0IsTUFBVCxHQUFrQixDQUF0QixFQUF5QjtBQUN4QixlQUFLLElBQUlILEdBQUMsR0FBRyxDQUFiLEVBQWdCQSxHQUFDLEdBQUd1a0IsUUFBUSxDQUFDcGtCLE1BQTdCLEVBQXFDSCxHQUFDLEVBQXRDLEVBQTBDO0FBQ3pDcWtCLFlBQUFBLElBQUksR0FBR0EsSUFBSSxDQUFDbmMsTUFBTCxDQUFZaWMsbUJBQW1CLENBQUNDLEdBQUcsQ0FBQ0csUUFBUSxDQUFDdmtCLEdBQUQsQ0FBVCxDQUFKLEVBQW1Cd0csR0FBbkIsRUFBd0IsRUFBeEIsQ0FBL0IsQ0FBUDtBQUNBO0FBQ0Q7QUFDRDs7QUFDRCxhQUFPNmQsSUFBUDtBQUNBLEtBdkJEOztBQXdCQSxRQUFNRyxhQUFhLEdBQUcsVUFBU0osR0FBVCxFQUFtQjVkLEdBQW5CLEVBQTZCO0FBQ2xELGFBQU8yZCxtQkFBbUIsQ0FBQ0MsR0FBRCxFQUFNNWQsR0FBTixFQUFXLEVBQVgsQ0FBMUI7QUFDQSxLQUZEOztBQUdBLFFBQU1pZSxpQ0FBaUMsR0FBRyxVQUFTQyxtQkFBVCxFQUFtQztBQUM1RSxhQUFPQSxtQkFBbUIsQ0FBQ2hRLE1BQXBCLENBQTJCLFVBQVNwTyxLQUFULEVBQXFCdEUsS0FBckIsRUFBaUM7QUFDbEUsZUFBTzBpQixtQkFBbUIsQ0FBQ3JsQixPQUFwQixDQUE0QmlILEtBQTVCLE1BQXVDdEUsS0FBOUM7QUFDQSxPQUZNLENBQVA7QUFHQSxLQUpEOztBQUtBLFFBQU1pTixLQUFLLEdBQUczRSxXQUFXLENBQUNRLE9BQVosRUFBZDtBQUNBLFFBQU1zSCxxQkFBcUIsR0FBR25ELEtBQUssQ0FBQzlHLGlCQUFOLENBQXdCLFVBQXhCLENBQTlCOztBQUVBLFFBQUlpSyxxQkFBSixFQUEyQjtBQUMxQixVQUFNdVMsd0JBQXdCLEdBQUcsRUFBakM7QUFDQSxVQUFNQyxVQUFVLEdBQUd0YSxXQUFXLENBQUN1YSxpQkFBWixFQUFuQjtBQUNBLFVBQU16SyxhQUFhLEdBQUd2USxTQUFTLENBQUNDLG9CQUFWLENBQStCOGEsVUFBL0IsQ0FBdEI7QUFDQSxVQUFNN2tCLFVBQVUsR0FBR3FhLGFBQWEsQ0FBQ3pSLFlBQWQsRUFBbkI7QUFDQSxVQUFJbWMsVUFBVSxHQUFHRixVQUFVLENBQUNsYyxRQUFYLENBQW9Cd2IsVUFBcEIsRUFBZ0MzRSxPQUFoQyxFQUFqQjs7QUFDQSxVQUFJbkosSUFBSSxDQUFDMk8sU0FBTCxDQUFlRCxVQUFmLE1BQStCLElBQW5DLEVBQXlDO0FBQ3hDQSxRQUFBQSxVQUFVLEdBQUdGLFVBQVUsQ0FBQ2xjLFFBQVgsQ0FBb0J3YixVQUFwQixFQUFnQ2MsVUFBaEMsQ0FBMkMsR0FBM0MsRUFBZ0R0bUIsU0FBaEQsQ0FBYjtBQUNBOztBQUNELFVBQUl1bUIscUJBQXFCLEdBQUdULGFBQWEsQ0FBQ00sVUFBRCxFQUFhLG9CQUFiLENBQXpDOztBQUNBRyxNQUFBQSxxQkFBcUIsR0FBR1IsaUNBQWlDLENBQUNRLHFCQUFELENBQXpEO0FBQ0EsVUFBTXZoQixtQkFBbUIsR0FBR0MsV0FBVyxDQUFDYixnQkFBWixDQUE2QnNYLGFBQTdCLENBQTVCO0FBQ0EsVUFBSTBJLFlBQVksR0FBR25mLFdBQVcsQ0FBQ1YsT0FBWixFQUFuQjtBQUNBLFVBQU1paUIsMkJBQTJCLEdBQUcsRUFBcEM7QUFDQSxVQUFNckMsZ0JBQXVCLEdBQUcsRUFBaEM7QUFDQSxVQUFJM2lCLEtBQUo7O0FBQ0EsVUFBSWlsQixnQkFBSjs7QUFFQSxVQUFJckMsWUFBWSxJQUFJQSxZQUFZLENBQUN6akIsT0FBYixDQUFxQixHQUFyQixNQUE4QixDQUFDLENBQW5ELEVBQXNEO0FBQ3JEO0FBQ0F5akIsUUFBQUEsWUFBWSxHQUFHQSxZQUFZLENBQUNsa0IsS0FBYixDQUFtQixHQUFuQixFQUF3QixDQUF4QixDQUFmO0FBQ0E7O0FBRUQsV0FBSyxJQUFJb0IsQ0FBQyxHQUFHLENBQWIsRUFBZ0JBLENBQUMsR0FBR2lsQixxQkFBcUIsQ0FBQzlrQixNQUExQyxFQUFrREgsQ0FBQyxFQUFuRCxFQUF1RDtBQUN0REUsUUFBQUEsS0FBSyxHQUFHK2tCLHFCQUFxQixDQUFDamxCLENBQUQsQ0FBN0I7QUFDQTJrQixRQUFBQSx3QkFBd0IsQ0FBQ3JnQixJQUF6QixDQUE4QlgsV0FBVyxDQUFDeWhCLHdCQUFaLENBQXFDaEwsYUFBckMsRUFBb0RuTCxLQUFwRCxFQUEyRGxQLFVBQTNELEVBQXVFRyxLQUF2RSxDQUE5QjtBQUNBOztBQUVELFVBQUl5a0Isd0JBQXdCLENBQUN4a0IsTUFBekIsS0FBb0MsQ0FBeEMsRUFBMkM7QUFDMUMsZUFBT3lSLE9BQU8sQ0FBQ0MsT0FBUixFQUFQO0FBQ0EsT0FGRCxNQUVPO0FBQ05ELFFBQUFBLE9BQU8sQ0FBQ1UsR0FBUixDQUFZcVMsd0JBQVosRUFDRTVkLElBREYsQ0FDTyxVQUFTMlosT0FBVCxFQUF5QjtBQUM5QixjQUFNa0MsaUJBQWlCLEdBQUcsRUFBMUI7QUFDQSxjQUFJeUMsaUJBQUo7QUFDQSxjQUFNQyx3QkFBd0IsR0FBRzVFLE9BQU8sQ0FBQ2hNLE1BQVIsQ0FBZSxVQUFTNlEsT0FBVCxFQUF1QjtBQUN0RSxnQkFDQ0EsT0FBTyxDQUFDMWhCLGNBQVIsS0FBMkJuRixTQUEzQixJQUNBNm1CLE9BQU8sQ0FBQzFoQixjQUFSLENBQXVCQSxjQUR2QixJQUVBLE9BQU8waEIsT0FBTyxDQUFDMWhCLGNBQVIsQ0FBdUJBLGNBQTlCLEtBQWlELFFBSGxELEVBSUU7QUFDRHdoQixjQUFBQSxpQkFBaUIsR0FBR3pSLGNBQWMsQ0FBQzRSLGlCQUFpQixDQUFDRCxPQUFPLENBQUMxaEIsY0FBUixDQUF1QkEsY0FBdkIsQ0FBc0M0aEIsS0FBdkMsQ0FBbEIsQ0FBbEM7QUFDQUYsY0FBQUEsT0FBTyxDQUFDMWhCLGNBQVIsQ0FBdUJBLGNBQXZCLEdBQXdDd2hCLGlCQUF4QztBQUNBRSxjQUFBQSxPQUFPLENBQUM3Qyx5QkFBUixDQUFrQyxDQUFsQyxFQUFxQzdlLGNBQXJDLEdBQXNEd2hCLGlCQUF0RDtBQUNBLHFCQUFPLElBQVA7QUFDQSxhQVRELE1BU08sSUFBSUUsT0FBSixFQUFhO0FBQ25CLHFCQUFPQSxPQUFPLENBQUMxaEIsY0FBUixLQUEyQm5GLFNBQWxDO0FBQ0EsYUFGTSxNQUVBO0FBQ04scUJBQU8sS0FBUDtBQUNBO0FBQ0QsV0FmZ0MsQ0FBakM7O0FBZ0JBLGVBQUssSUFBSTBILENBQUMsR0FBRyxDQUFiLEVBQWdCQSxDQUFDLEdBQUdrZix3QkFBd0IsQ0FBQ25sQixNQUE3QyxFQUFxRGlHLENBQUMsRUFBdEQsRUFBMEQ7QUFDekQrZSxZQUFBQSxnQkFBZ0IsR0FBR0csd0JBQXdCLENBQUNsZixDQUFELENBQTNDOztBQUNBLGdCQUNDK2UsZ0JBQWdCLElBQ2hCQSxnQkFBZ0IsQ0FBQ3RoQixjQURqQixJQUVBLEVBQUVzaEIsZ0JBQWdCLENBQUN0aEIsY0FBakIsQ0FBZ0NBLGNBQWhDLENBQStDeEUsT0FBL0MsQ0FBdUQsR0FBdkQsTUFBZ0UsQ0FBbEUsQ0FIRCxFQUlFO0FBQ0Q2bEIsY0FBQUEsMkJBQTJCLENBQUM1Z0IsSUFBNUIsQ0FBaUM2Z0IsZ0JBQWdCLENBQUN6Qyx5QkFBbEQ7QUFDQUcsY0FBQUEsZ0JBQWdCLENBQUN2ZSxJQUFqQixDQUFzQjtBQUNyQlQsZ0JBQUFBLGNBQWMsRUFBRXNoQixnQkFBZ0IsQ0FBQ3RoQixjQUFqQixDQUFnQ0EsY0FEM0I7QUFFckIyQixnQkFBQUEsa0JBQWtCLEVBQUUyZixnQkFBZ0IsQ0FBQzNmLGtCQUZoQjtBQUdyQmtPLGdCQUFBQSxJQUFJLEVBQUU0Uix3QkFBd0IsQ0FBQ2xmLENBQUQsQ0FBeEIsQ0FBNEJxYztBQUhiLGVBQXRCO0FBS0FHLGNBQUFBLGlCQUFpQixDQUFDdGUsSUFBbEIsQ0FBdUJaLG1CQUFtQixDQUFDZ2lCLGlCQUFwQixDQUFzQyxDQUFDUCxnQkFBZ0IsQ0FBQ3pDLHlCQUFsQixDQUF0QyxDQUF2QjtBQUNBO0FBQ0Q7O0FBQ0QsaUJBQU8vZSxXQUFXLENBQUNnaUIscUJBQVosQ0FBa0MvQyxpQkFBbEMsRUFBcURDLGdCQUFyRCxFQUF1RXpRLHFCQUF2RSxFQUE4RjBRLFlBQTlGLENBQVA7QUFDQSxTQXJDRixFQXNDRTdiLEtBdENGLENBc0NRLFVBQVNDLE1BQVQsRUFBc0I7QUFDNUJDLFVBQUFBLEdBQUcsQ0FBQ0MsS0FBSixDQUFVLDREQUFWLEVBQXdFRixNQUF4RTtBQUNBLFNBeENGO0FBeUNBO0FBQ0QsS0F6RUQsTUF5RU87QUFDTixhQUFPMEssT0FBTyxDQUFDQyxPQUFSLEVBQVA7QUFDQTtBQUNEOztBQUNELFdBQVMrVCxxQkFBVCxDQUErQkMsNkJBQS9CLEVBQW1FQyxZQUFuRSxFQUFzRjtBQUNyRixRQUFNM2pCLGtCQUFrQixHQUFHd0IsV0FBVyxDQUFDeEIsa0JBQXZDOztBQUNBLFFBQUkyakIsWUFBWSxLQUFLM2pCLGtCQUFrQixDQUFDNGpCLG1CQUFwQyxJQUEyREQsWUFBWSxLQUFLM2pCLGtCQUFrQixDQUFDNmpCLHlCQUFuRyxFQUE4SDtBQUM3SCxVQUFJQyxNQUFNLEdBQUcsRUFBYjs7QUFDQSxVQUFJSiw2QkFBNkIsSUFBSUEsNkJBQTZCLENBQUNDLFlBQUQsQ0FBbEUsRUFBa0Y7QUFDakZHLFFBQUFBLE1BQU0sR0FBR0osNkJBQTZCLENBQUNDLFlBQUQsQ0FBN0IsQ0FBNENJLEdBQTVDLENBQWdELFVBQVNDLFNBQVQsRUFBeUI7QUFDakYsaUJBQU9BLFNBQVMsQ0FBQzVrQixhQUFqQjtBQUNBLFNBRlEsQ0FBVDtBQUdBOztBQUNELGFBQU8wa0IsTUFBUDtBQUNBLEtBUkQsTUFRTyxJQUFJSCxZQUFZLEtBQUszakIsa0JBQWtCLENBQUNpa0IsbUJBQXhDLEVBQTZEO0FBQ25FLFVBQU1DLG1CQUF3QixHQUFHLEVBQWpDOztBQUNBLFVBQUlSLDZCQUE2QixJQUFJQSw2QkFBNkIsQ0FBQ1MsNEJBQW5FLEVBQWlHO0FBQ2hHVCxRQUFBQSw2QkFBNkIsQ0FBQ1MsNEJBQTlCLENBQTJENW1CLE9BQTNELENBQW1FLFVBQVN5bUIsU0FBVCxFQUF5QjtBQUMzRjtBQUNBLGNBQUlFLG1CQUFtQixDQUFDRixTQUFTLENBQUNJLFFBQVYsQ0FBbUJobEIsYUFBcEIsQ0FBdkIsRUFBMkQ7QUFDMUQ4a0IsWUFBQUEsbUJBQW1CLENBQUNGLFNBQVMsQ0FBQ0ksUUFBVixDQUFtQmhsQixhQUFwQixDQUFuQixDQUFzRCtDLElBQXRELENBQTJENmhCLFNBQVMsQ0FBQ0ssa0JBQXJFO0FBQ0EsV0FGRCxNQUVPO0FBQ05ILFlBQUFBLG1CQUFtQixDQUFDRixTQUFTLENBQUNJLFFBQVYsQ0FBbUJobEIsYUFBcEIsQ0FBbkIsR0FBd0QsQ0FBQzRrQixTQUFTLENBQUNLLGtCQUFYLENBQXhEO0FBQ0E7QUFDRCxTQVBEO0FBUUE7O0FBQ0QsYUFBT0gsbUJBQVA7QUFDQSxLQXZCb0YsQ0F3QnJGOzs7QUFDQSxXQUFPUiw2QkFBUDtBQUNBOztBQUNELFdBQVNyUSwyQkFBVCxDQUFxQ2hWLGNBQXJDLEVBQTBEVCxVQUExRCxFQUEyRTtBQUMxRSxRQUFNeWdCLElBQVMsR0FBRyxFQUFsQjtBQUFBLFFBQ0NyZSxrQkFBa0IsR0FBR3dCLFdBQVcsQ0FBQ3hCLGtCQURsQztBQUFBLFFBRUNELG1CQUFtQixHQUFHMUIsY0FBYyxHQUFHVCxVQUFVLENBQUNPLFNBQVgsQ0FBcUJFLGNBQWMsR0FBRywrQ0FBdEMsQ0FBSCxHQUE0RixFQUZqSTtBQUdBZ2dCLElBQUFBLElBQUksQ0FBQ3JlLGtCQUFrQixDQUFDNGpCLG1CQUFwQixDQUFKLEdBQStDSCxxQkFBcUIsQ0FBQzFqQixtQkFBRCxFQUFzQkMsa0JBQWtCLENBQUM0akIsbUJBQXpDLENBQXJCLElBQXNGLEVBQXJJO0FBQ0F2RixJQUFBQSxJQUFJLENBQUNyZSxrQkFBa0IsQ0FBQzZqQix5QkFBcEIsQ0FBSixHQUNDSixxQkFBcUIsQ0FBQzFqQixtQkFBRCxFQUFzQkMsa0JBQWtCLENBQUM2akIseUJBQXpDLENBQXJCLElBQTRGLEVBRDdGLENBTDBFLENBTzFFOztBQUNBeEYsSUFBQUEsSUFBSSxDQUFDcmUsa0JBQWtCLENBQUNpa0IsbUJBQXBCLENBQUosR0FBK0NSLHFCQUFxQixDQUFDMWpCLG1CQUFELEVBQXNCQyxrQkFBa0IsQ0FBQ2lrQixtQkFBekMsQ0FBckIsSUFBc0YsRUFBckk7QUFFQSxRQUFNSyxVQUFVLEdBQUdqbUIsY0FBYyxDQUFDNUIsS0FBZixDQUFxQixHQUFyQixDQUFuQjs7QUFFQSxRQUFJNm5CLFVBQVUsQ0FBQ3RtQixNQUFYLEdBQW9CLENBQXhCLEVBQTJCO0FBQzFCO0FBQ0E7QUFDQSxVQUFNTSxlQUFlLEdBQUdnbUIsVUFBVSxDQUFDQSxVQUFVLENBQUN0bUIsTUFBWCxHQUFvQixDQUFyQixDQUFsQztBQUNBc21CLE1BQUFBLFVBQVUsQ0FBQzlrQixNQUFYLENBQWtCLENBQUMsQ0FBbkIsRUFBc0IsQ0FBdEIsRUFKMEIsQ0FJQTs7QUFDMUIsVUFBTStrQixvQkFBb0IsR0FBR0QsVUFBVSxDQUFDM2tCLElBQVgsQ0FBZ0IsR0FBaEIsQ0FBN0I7QUFDQSxVQUFNMUIsdUJBQXVCLEdBQUd1RCxXQUFXLENBQUN0RCx5QkFBWixDQUFzQ04sVUFBdEMsRUFBa0QybUIsb0JBQWxELEVBQXdFam1CLGVBQXhFLENBQWhDO0FBQ0EsVUFBTWttQiw2QkFBNkIsR0FBR3ZtQix1QkFBdUIsSUFBSUEsdUJBQXVCLENBQUMsb0JBQUQsQ0FBeEY7QUFDQW9nQixNQUFBQSxJQUFJLENBQUNyZSxrQkFBa0IsQ0FBQzRqQixtQkFBcEIsQ0FBSixDQUE2QzdkLE1BQTdDLENBQ0MwZCxxQkFBcUIsQ0FBQ2UsNkJBQUQsRUFBZ0N4a0Isa0JBQWtCLENBQUM0akIsbUJBQW5ELENBQXJCLElBQWdHLEVBRGpHO0FBR0F2RixNQUFBQSxJQUFJLENBQUNyZSxrQkFBa0IsQ0FBQzZqQix5QkFBcEIsQ0FBSixDQUFtRDlkLE1BQW5ELENBQ0MwZCxxQkFBcUIsQ0FBQ2UsNkJBQUQsRUFBZ0N4a0Isa0JBQWtCLENBQUM2akIseUJBQW5ELENBQXJCLElBQXNHLEVBRHZHLEVBWDBCLENBYzFCOztBQUNBeEYsTUFBQUEsSUFBSSxDQUFDcmUsa0JBQWtCLENBQUNpa0IsbUJBQXBCLENBQUosR0FBK0N0QyxZQUFZLENBQzFELEVBRDBELEVBRTFEOEIscUJBQXFCLENBQUNlLDZCQUFELEVBQWdDeGtCLGtCQUFrQixDQUFDaWtCLG1CQUFuRCxDQUFyQixJQUFnRyxFQUZ0QyxFQUcxRDVGLElBQUksQ0FBQ3JlLGtCQUFrQixDQUFDaWtCLG1CQUFwQixDQUhzRCxDQUEzRDtBQUtBOztBQUVELFdBQU81RixJQUFQO0FBQ0E7O0FBQ0QsV0FBU29HLHVCQUFULENBQWlDQyxhQUFqQyxFQUFxREMscUJBQXJELEVBQWlGQyxRQUFqRixFQUFnR0MsU0FBaEcsRUFBaUg7QUFDaEhELElBQUFBLFFBQVEsR0FBR0EsUUFBUSxJQUFJLEVBQXZCOztBQUNBLFFBQUlDLFNBQUosRUFBZTtBQUNkLGFBQU9BLFNBQVMsQ0FBQ0osdUJBQVYsQ0FBa0NDLGFBQWxDLEVBQWlEQyxxQkFBakQsRUFBd0VDLFFBQVEsQ0FBQ0UsSUFBakYsRUFBdUZsZ0IsSUFBdkYsQ0FBNEYsVUFBU21nQixTQUFULEVBQXlCO0FBQzNIO0FBQ0EsZUFBT0YsU0FBUyxDQUFDRyxPQUFWLEtBQXNCLFNBQXRCLElBQW1DRCxTQUFTLENBQUMvbUIsTUFBVixHQUFtQixDQUF0RCxHQUEwRCttQixTQUFTLENBQUMsQ0FBRCxDQUFuRSxHQUF5RUEsU0FBaEY7QUFDQSxPQUhNLENBQVA7QUFJQSxLQUxELE1BS087QUFDTixhQUFPRSxnQkFBZ0IsR0FDckJyZ0IsSUFESyxDQUNBLFlBQVc7QUFDaEIsZUFBT3NnQixlQUFlLENBQUNDLE9BQWhCLENBQ05DLG9CQUFvQixDQUFDQyxZQUFyQixDQUFrQ1gsYUFBbEMsRUFBaUQsVUFBakQsQ0FETSxFQUVOO0FBQUVZLFVBQUFBLElBQUksRUFBRVo7QUFBUixTQUZNLEVBR05DLHFCQUhNLENBQVA7QUFLQSxPQVBLLEVBUUwvZixJQVJLLENBUUEsVUFBU21nQixTQUFULEVBQXlCO0FBQzlCLFlBQU1ua0IsUUFBUSxHQUFHbWtCLFNBQVMsQ0FBQ1EsaUJBQTNCOztBQUNBLFlBQUksQ0FBQyxDQUFDWCxRQUFRLENBQUNZLEtBQVgsSUFBb0I1a0IsUUFBeEIsRUFBa0M7QUFDakMsaUJBQU9BLFFBQVA7QUFDQTs7QUFDRCxlQUFPNmtCLFFBQVEsQ0FBQ0MsSUFBVCxDQUFjO0FBQ3BCQyxVQUFBQSxFQUFFLEVBQUVmLFFBQVEsQ0FBQ2UsRUFETztBQUVwQkMsVUFBQUEsVUFBVSxFQUFFYixTQUZRO0FBR3BCYyxVQUFBQSxVQUFVLEVBQUVqQixRQUFRLENBQUNpQjtBQUhELFNBQWQsQ0FBUDtBQUtBLE9BbEJLLENBQVA7QUFtQkE7QUFDRDs7QUFDRCxXQUFTQyxnQkFBVCxDQUEwQnZVLElBQTFCLEVBQXdDd1UsU0FBeEMsRUFBdUY7QUFDdEYsUUFBTUMsS0FBSyxHQUFHelUsSUFBSSxDQUFDOVUsS0FBTCxDQUFXLEdBQVgsRUFBZ0I4VixNQUFoQixDQUF1QjBULE9BQXZCLENBQWQ7QUFBQSxRQUNDQyxZQUFZLEdBQUdGLEtBQUssQ0FBQ0csR0FBTixFQURoQjtBQUFBLFFBRUNDLGNBQWMsR0FBR0osS0FBSyxDQUFDcm1CLElBQU4sQ0FBVyxHQUFYLENBRmxCO0FBQUEsUUFHQ3lMLFNBQVMsR0FBR2diLGNBQWMsSUFBSUwsU0FBUyxDQUFDNW5CLFNBQVYsQ0FBb0IsTUFBTWlvQixjQUExQixDQUgvQjs7QUFJQSxRQUFJLENBQUFoYixTQUFTLFNBQVQsSUFBQUEsU0FBUyxXQUFULFlBQUFBLFNBQVMsQ0FBRWUsS0FBWCxNQUFxQixXQUF6QixFQUFzQztBQUNyQyxVQUFNa2EsYUFBYSxHQUFHTCxLQUFLLENBQUNBLEtBQUssQ0FBQ2hvQixNQUFOLEdBQWUsQ0FBaEIsQ0FBM0I7QUFDQSxhQUFPLE1BQU1xb0IsYUFBTixHQUFzQixHQUF0QixHQUE0QkgsWUFBbkM7QUFDQTs7QUFDRCxXQUFPM3BCLFNBQVA7QUFDQTs7QUFDRCxXQUFTdVQsd0JBQVQsQ0FBa0N5QixJQUFsQyxFQUFnRCtVLEtBQWhELEVBQW1FO0FBQ2xFLFFBQUksQ0FBQy9VLElBQUQsSUFBUyxDQUFDK1UsS0FBZCxFQUFxQjtBQUNwQixhQUFPN1csT0FBTyxDQUFDQyxPQUFSLENBQWdCLElBQWhCLENBQVA7QUFDQTs7QUFDRCxRQUFNcVcsU0FBUyxHQUFHTyxLQUFLLENBQUM5ZixZQUFOLEVBQWxCLENBSmtFLENBS2xFOztBQUNBLFFBQU0rZixZQUFZLEdBQUdULGdCQUFnQixDQUFDdlUsSUFBRCxFQUFPd1UsU0FBUCxDQUFyQzs7QUFDQSxRQUFJUSxZQUFKLEVBQWtCO0FBQ2pCLFVBQU1DLGVBQWUsR0FBR0YsS0FBSyxDQUFDRyxZQUFOLENBQW1CRixZQUFuQixDQUF4QjtBQUNBLGFBQU9DLGVBQWUsQ0FBQ0UsWUFBaEIsRUFBUDtBQUNBOztBQUVELFdBQU9qWCxPQUFPLENBQUNDLE9BQVIsQ0FBZ0IsSUFBaEIsQ0FBUDtBQUNBOztBQUNELFdBQVNpWCxxQkFBVCxDQUErQi9sQixRQUEvQixFQUFrRGdtQixVQUFsRCxFQUFzRUMsUUFBdEUsRUFBMEY7QUFDekYsUUFBSUMsWUFBSjs7QUFDQSxRQUFNQyxjQUFjLEdBQUcsWUFBVztBQUNqQyxVQUFJRCxZQUFKLEVBQWtCO0FBQ2pCLFlBQUksQ0FBQ0EsWUFBWSxDQUFDRSxNQUFsQixFQUEwQjtBQUN6QkYsVUFBQUEsWUFBWSxDQUFDRSxNQUFiLEdBQXNCLEVBQXRCO0FBQ0E7O0FBQ0QsWUFBSSxDQUFDRixZQUFZLENBQUNFLE1BQWIsQ0FBb0JKLFVBQXBCLENBQUwsRUFBc0M7QUFDckNFLFVBQUFBLFlBQVksQ0FBQ0UsTUFBYixDQUFvQkosVUFBcEIsSUFBa0NDLFFBQWxDO0FBQ0EsU0FGRCxNQUVPO0FBQ04sY0FBTUksZ0JBQWdCLEdBQUdILFlBQVksQ0FBQ0UsTUFBYixDQUFvQkosVUFBcEIsQ0FBekI7O0FBQ0FFLFVBQUFBLFlBQVksQ0FBQ0UsTUFBYixDQUFvQkosVUFBcEIsSUFBa0MsWUFBeUI7QUFBQSwrQ0FBYjlkLElBQWE7QUFBYkEsY0FBQUEsSUFBYTtBQUFBOztBQUMxRCtkLFlBQUFBLFFBQVEsQ0FBQzlkLEtBQVQsT0FBQThkLFFBQVEsR0FBTyxJQUFQLFNBQWdCL2QsSUFBaEIsRUFBUjtBQUNBbWUsWUFBQUEsZ0JBQWdCLENBQUNsZSxLQUFqQixPQUFBa2UsZ0JBQWdCLEdBQU8sSUFBUCxTQUFnQm5lLElBQWhCLEVBQWhCO0FBQ0EsV0FIRDtBQUlBO0FBQ0Q7QUFDRCxLQWZEOztBQWdCQSxRQUFJbEksUUFBUSxDQUFDNEcsR0FBVCxDQUFhLGtCQUFiLENBQUosRUFBc0M7QUFDcEM1RyxNQUFBQSxRQUFELENBQ0VzbUIsZUFERixHQUVFdGlCLElBRkYsQ0FFTyxZQUFXO0FBQ2hCa2lCLFFBQUFBLFlBQVksR0FBSWxtQixRQUFELENBQ2J1bUIsa0JBRGEsR0FFYkMsU0FGYSxDQUVIeG1CLFFBRkcsRUFHYnltQixjQUhhLENBR0UsTUFIRixDQUFmO0FBSUFOLFFBQUFBLGNBQWM7QUFDZCxPQVJGLEVBU0VqaUIsS0FURixDQVNRLFVBQVN3aUIsTUFBVCxFQUFzQjtBQUM1QnRpQixRQUFBQSxHQUFHLENBQUNDLEtBQUosQ0FBVXFpQixNQUFWO0FBQ0EsT0FYRjtBQVlBLEtBYkQsTUFhTztBQUNOUixNQUFBQSxZQUFZLEdBQUdsbUIsUUFBUSxDQUFDZ00sSUFBVCxDQUFjLGlCQUFkLENBQWY7QUFDQW1hLE1BQUFBLGNBQWM7QUFDZDtBQUNEOztBQUNELFdBQVM5QixnQkFBVCxHQUE0QjtBQUMzQixXQUFPLElBQUl4VixPQUFKLENBQWtCLFVBQVNDLE9BQVQsRUFBa0I7QUFDMUMvRixNQUFBQSxHQUFHLENBQUNDLEVBQUosQ0FBTzJkLE9BQVAsQ0FBZSxDQUFDLDRCQUFELENBQWYsRUFBK0M7QUFBUztBQUFULFNBQTJCO0FBQ3pFN1gsUUFBQUEsT0FBTztBQUNQLE9BRkQ7QUFHQSxLQUpNLENBQVA7QUFLQTs7QUFFRCxXQUFTOFgsd0JBQVQsQ0FBa0NDLFFBQWxDLEVBQW9EQyxVQUFwRCxFQUF3RXRwQixNQUF4RSxFQUE0RnVwQixTQUE1RixFQUE4RztBQUM3RyxRQUFNQyxZQUFZLEdBQUdqZSxHQUFHLENBQUNDLEVBQUosQ0FBT0MsT0FBUCxHQUFpQkMsd0JBQWpCLENBQTBDLGFBQTFDLENBQXJCO0FBQUEsUUFDQ21FLFdBQVcsR0FBR3laLFVBRGY7QUFBQSxRQUVDeGQsZ0JBQWdCLEdBQUcwZCxZQUFZLENBQUM1ZCxPQUFiLENBQXFCLFFBQXJCLENBRnBCOztBQUdBLFFBQUkyZCxTQUFTLENBQUMzcEIsTUFBVixLQUFxQixDQUF6QixFQUE0QjtBQUMzQixVQUFNMmQsUUFBUSxHQUFHZ00sU0FBUyxDQUFDLENBQUQsQ0FBVCxDQUFhRSxPQUFiLEdBQXVCLElBQXZCLEdBQThCRCxZQUFZLENBQUM1ZCxPQUFiLENBQXFCLFNBQXJCLENBQS9DO0FBQ0EsVUFBTThkLGFBQWEsR0FBRyxJQUFJclksT0FBSixDQUFZLFVBQVNDLE9BQVQsRUFBa0I7QUFDbkR0RixRQUFBQSxVQUFVLENBQUNDLE9BQVgsQ0FBbUJzUixRQUFuQixFQUE2QjtBQUM1Qm9NLFVBQUFBLEtBQUssRUFBRUgsWUFBWSxDQUFDNWQsT0FBYixDQUFxQixTQUFyQixDQURxQjtBQUU1Qk0sVUFBQUEsT0FBTyxFQUFFLENBQUMyRCxXQUFELEVBQWMvRCxnQkFBZCxDQUZtQjtBQUc1QjhkLFVBQUFBLGdCQUFnQixFQUFFL1osV0FIVTtBQUk1QjFELFVBQUFBLE9BQU8sRUFBRSxVQUFTM0gsT0FBVCxFQUEwQjtBQUNsQyxnQkFBSUEsT0FBTyxLQUFLcUwsV0FBaEIsRUFBNkI7QUFDNUJ5QixjQUFBQSxPQUFPLENBQUMsSUFBRCxDQUFQO0FBQ0F0UixjQUFBQSxNQUFNLENBQUM2cEIsV0FBUCxDQUFtQlIsUUFBbkI7QUFDQSxhQUhELE1BR087QUFDTi9YLGNBQUFBLE9BQU8sQ0FBQyxLQUFELENBQVA7QUFDQTtBQUNEO0FBWDJCLFNBQTdCO0FBYUEsT0FkcUIsQ0FBdEI7QUFlQSxhQUFPb1ksYUFBUDtBQUNBOztBQUNELFdBQU8sSUFBSXJZLE9BQUosQ0FBWSxVQUFTQyxPQUFULEVBQWtCO0FBQ3BDLFVBQU13WSxtQkFBbUIsR0FBRyxJQUFJQyxTQUFKLEVBQTVCO0FBQ0FELE1BQUFBLG1CQUFtQixDQUFDRSxPQUFwQixDQUE0QlQsU0FBNUI7QUFDQSxVQUFNVSxtQkFBbUIsR0FBRyxJQUE1QjtBQUNBLFVBQU1DLGNBQWMsR0FBR0MsZUFBZSxDQUFDQywyQkFBaEIsQ0FBNENOLG1CQUE1QyxFQUFpRUcsbUJBQWpFLENBQXZCO0FBQ0EsVUFBTUksT0FBTyxHQUFHLElBQUlDLE1BQUosQ0FBVztBQUMxQkMsUUFBQUEsU0FBUyxFQUFFLElBRGU7QUFFMUJDLFFBQUFBLE9BQU8sRUFBRU4sY0FBYyxDQUFDTyxZQUZFO0FBRzFCQyxRQUFBQSxLQUFLLEVBQUUsU0FIbUI7QUFJMUJDLFFBQUFBLFlBQVksRUFBRSxJQUFJQyxHQUFKLENBQVE7QUFDckJDLFVBQUFBLFdBQVcsRUFBRSxDQUFDWCxjQUFjLENBQUNZLFdBQWhCLENBRFE7QUFFckJDLFVBQUFBLGFBQWEsRUFBRSxDQUFDLElBQUlDLEtBQUosQ0FBVTtBQUFFdm1CLFlBQUFBLElBQUksRUFBRTtBQUFSLFdBQVYsQ0FBRDtBQUZNLFNBQVIsQ0FKWTtBQVExQndtQixRQUFBQSxhQUFhLEVBQUUsS0FSVztBQVMxQkMsUUFBQUEsWUFBWSxFQUFFLEtBVFk7QUFVMUJDLFFBQUFBLGlCQUFpQixFQUFFO0FBVk8sT0FBWCxDQUFoQjtBQVlBZCxNQUFBQSxPQUFPLENBQUNlLGNBQVIsQ0FDQyxJQUFJQyxNQUFKLENBQVc7QUFDVkMsUUFBQUEsS0FBSyxFQUFFLFlBQVc7QUFDakJoYSxVQUFBQSxPQUFPLENBQUMsSUFBRCxDQUFQO0FBQ0F0UixVQUFBQSxNQUFNLENBQUM2cEIsV0FBUCxDQUFtQlIsUUFBbkI7QUFDQWdCLFVBQUFBLE9BQU8sQ0FBQ2tCLEtBQVI7QUFDQSxTQUxTO0FBTVZDLFFBQUFBLElBQUksRUFBRSxZQU5JO0FBT1YvbUIsUUFBQUEsSUFBSSxFQUFFMEssaUJBQWlCLENBQUMsUUFBRCxFQUFXcWEsWUFBWCxFQUF5QjNaLFdBQXpCO0FBUGIsT0FBWCxDQUREO0FBV0F3YSxNQUFBQSxPQUFPLENBQUNvQixZQUFSLENBQ0MsSUFBSUosTUFBSixDQUFXO0FBQ1ZDLFFBQUFBLEtBQUssRUFBRSxZQUFXO0FBQ2pCaGEsVUFBQUEsT0FBTyxDQUFDLEtBQUQsQ0FBUDtBQUNBK1ksVUFBQUEsT0FBTyxDQUFDa0IsS0FBUjtBQUNBLFNBSlM7QUFLVjltQixRQUFBQSxJQUFJLEVBQUVxSDtBQUxJLE9BQVgsQ0FERDtBQVNBdWUsTUFBQUEsT0FBTyxDQUFDcUIsSUFBUjtBQUNBLEtBdENNLENBQVA7QUF1Q0E7O0FBQ0QsTUFBTXRvQixXQUFXLEdBQUc7QUFDbkJwQixJQUFBQSxvQkFBb0IsRUFBRUEsb0JBREg7QUFFbkJzSyxJQUFBQSw4QkFBOEIsRUFBRUEsOEJBRmI7QUFHbkJNLElBQUFBLG1CQUFtQixFQUFFQSxtQkFIRjtBQUluQitlLElBQUFBLGVBQWUsRUFBRWpqQixpQkFKRTtBQUtuQnRDLElBQUFBLGFBQWEsRUFBRUEsYUFMSTtBQU1uQndsQixJQUFBQSxtQkFBbUIsRUFBRTdzQixzQkFORjtBQU9uQjhzQixJQUFBQSx3QkFBd0IsRUFBRTNqQiwwQkFQUDtBQVFuQjRqQixJQUFBQSxzQkFBc0IsRUFBRTVpQix3QkFSTDtBQVNuQnpHLElBQUFBLGVBQWUsRUFBRUEsZUFURTtBQVVuQnNwQixJQUFBQSwyQkFBMkIsRUFBRTdnQiw2QkFWVjtBQVduQjhnQixJQUFBQSx3QkFBd0IsRUFBRWhlLDBCQVhQO0FBWW5CaUosSUFBQUEsd0JBQXdCLEVBQUV2SiwwQkFaUDtBQWFuQitJLElBQUFBLGdCQUFnQixFQUFFQSxnQkFiQztBQWNuQndWLElBQUFBLHNDQUFzQyxFQUFFeGQsd0NBZHJCO0FBZW5CVSxJQUFBQSxpQkFBaUIsRUFBRUEsaUJBZkE7QUFnQm5CZSxJQUFBQSxnQkFBZ0IsRUFBRUEsZ0JBaEJDO0FBaUJuQlAsSUFBQUEsYUFBYSxFQUFFQSxhQWpCSTtBQWtCbkJXLElBQUFBLGtCQUFrQixFQUFFQSxrQkFsQkQ7QUFtQm5CbUMsSUFBQUEsbUJBQW1CLEVBQUVBLG1CQW5CRjtBQW9CbkJ1SixJQUFBQSxnQkFBZ0IsRUFBRUEsZ0JBcEJDO0FBcUJuQm5ILElBQUFBLHVCQUF1QixFQUFFQSx1QkFyQk47QUFzQm5Cd0QsSUFBQUEsK0JBQStCLEVBQUVBLCtCQXRCZDtBQXVCbkI2QixJQUFBQSx5Q0FBeUMsRUFBRUEseUNBdkJ4QjtBQXdCbkJQLElBQUFBLGdDQUFnQyxFQUFFQSxnQ0F4QmY7QUF5Qm5CeUMsSUFBQUEseUJBQXlCLEVBQUVBLHlCQXpCUjtBQTBCbkJPLElBQUFBLDJCQUEyQixFQUFFQSwyQkExQlY7QUEyQm5CcUIsSUFBQUEsZUFBZSxFQUFFQSxlQTNCRTtBQTRCbkJ6YixJQUFBQSxnQkFBZ0IsRUFBRUEsZ0JBNUJDO0FBNkJuQkcsSUFBQUEsT0FBTyxFQUFFQSxPQTdCVTtBQThCbkJ3cEIsSUFBQUEsYUFBYSxFQUFFaGUsZUE5Qkk7QUErQm5CeVMsSUFBQUEsNkNBQTZDLEVBQUVBLDZDQS9CNUI7QUFnQ25CTixJQUFBQSx3QkFBd0IsRUFBRUEsd0JBaENQO0FBaUNuQm1CLElBQUFBLHlCQUF5QixFQUFFQSx5QkFqQ1I7QUFrQ25CcUQsSUFBQUEsd0JBQXdCLEVBQUVyQiwwQkFsQ1A7QUFtQ25CMkksSUFBQUEsK0JBQStCLEVBQUV6SSxpQ0FuQ2Q7QUFvQ25CRCxJQUFBQSwwQkFBMEIsRUFBRTFCLDRCQXBDVDtBQXFDbkJxRCxJQUFBQSxxQkFBcUIsRUFBRWhELDRCQXJDSjtBQXNDbkIzakIsSUFBQUEsbUJBQW1CLEVBQUVBLG1CQXRDRjtBQXVDbkJxQixJQUFBQSx5QkFBeUIsRUFBRUEseUJBdkNSO0FBd0NuQlIsSUFBQUEscUJBQXFCLEVBQUVBLHFCQXhDSjtBQXlDbkIyVixJQUFBQSwyQkFBMkIsRUFBRUEsMkJBekNWO0FBMENuQlgsSUFBQUEsNEJBQTRCLEVBQUVBLDRCQTFDWDtBQTJDbkJxTCxJQUFBQSw0QkFBNEIsRUFBRUEsNEJBM0NYO0FBNENuQmpPLElBQUFBLHdCQUF3QixFQUFFQSx3QkE1Q1A7QUE2Q25CMlUsSUFBQUEsdUJBQXVCLEVBQUVBLHVCQTdDTjtBQThDbkJrQyxJQUFBQSxxQkFBcUIsRUFBRUEscUJBOUNKO0FBK0NuQjNtQixJQUFBQSxrQkFBa0IsRUFBRTtBQUNuQjRqQixNQUFBQSxtQkFBbUIsRUFBRSxvQkFERjtBQUVuQkMsTUFBQUEseUJBQXlCLEVBQUUseUJBRlI7QUFHbkJJLE1BQUFBLG1CQUFtQixFQUFFO0FBSEYsS0EvQ0Q7QUFvRG5CcFIsSUFBQUEsc0JBQXNCLEVBQUUsQ0FBQyxhQUFELEVBQWdCLFlBQWhCLEVBQThCLGFBQTlCLEVBQTZDLFlBQTdDLEVBQTJELGtCQUEzRCxFQUErRSw4QkFBL0UsQ0FwREw7QUFxRG5CN0ssSUFBQUEsMkNBQTJDLEVBQUVBLDJDQXJEMUI7QUFzRG5CM0wsSUFBQUEsbUJBQW1CLEVBQUVBLG1CQXRERjtBQXVEbkJtckIsSUFBQUEsd0JBQXdCLEVBQUVBLHdCQXZEUDtBQXdEbkIxQixJQUFBQSxnQkFBZ0IsRUFBRUE7QUF4REMsR0FBcEI7U0EyRGV0a0IsVyIsInNvdXJjZVJvb3QiOiIuIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IFZpZXcgZnJvbSBcInNhcC91aS9jb3JlL212Yy9WaWV3XCI7XG5pbXBvcnQgQ29tcG9uZW50IGZyb20gXCJzYXAvdWkvY29yZS9Db21wb25lbnRcIjtcbmltcG9ydCBNZXNzYWdlQm94IGZyb20gXCJzYXAvbS9NZXNzYWdlQm94XCI7XG5pbXBvcnQgTG9nIGZyb20gXCJzYXAvYmFzZS9Mb2dcIjtcbmltcG9ydCBsaWJyYXJ5IGZyb20gXCJzYXAvZmUvY29yZS9saWJyYXJ5XCI7XG5pbXBvcnQgTW9kZWxIZWxwZXIgZnJvbSBcInNhcC9mZS9jb3JlL2hlbHBlcnMvTW9kZWxIZWxwZXJcIjtcbmltcG9ydCBTZW1hbnRpY0RhdGVPcGVyYXRvcnMgZnJvbSBcInNhcC9mZS9jb3JlL2hlbHBlcnMvU2VtYW50aWNEYXRlT3BlcmF0b3JzXCI7XG5pbXBvcnQgbWVyZ2VPYmplY3RzIGZyb20gXCJzYXAvYmFzZS91dGlsL21lcmdlXCI7XG5pbXBvcnQgWE1MVGVtcGxhdGVQcm9jZXNzb3IgZnJvbSBcInNhcC91aS9jb3JlL1hNTFRlbXBsYXRlUHJvY2Vzc29yXCI7XG5pbXBvcnQgWE1MUHJlcHJvY2Vzc29yIGZyb20gXCJzYXAvdWkvY29yZS91dGlsL1hNTFByZXByb2Nlc3NvclwiO1xuaW1wb3J0IEZyYWdtZW50IGZyb20gXCJzYXAvdWkvY29yZS9GcmFnbWVudFwiO1xuaW1wb3J0IE9EYXRhTWV0YU1vZGVsIGZyb20gXCJzYXAvdWkvbW9kZWwvb2RhdGEvdjQvT0RhdGFNZXRhTW9kZWxcIjtcbmltcG9ydCBSZXNvdXJjZUJ1bmRsZSBmcm9tIFwic2FwL2Jhc2UvaTE4bi9SZXNvdXJjZUJ1bmRsZVwiO1xuaW1wb3J0IHsgYmluZGluZ0V4cHJlc3Npb24sIGNvbXBpbGVCaW5kaW5nLCBjb25zdGFudCwgdHJhbnNmb3JtUmVjdXJzaXZlbHkgfSBmcm9tIFwic2FwL2ZlL2NvcmUvaGVscGVycy9CaW5kaW5nRXhwcmVzc2lvblwiO1xuaW1wb3J0IHsgZ2V0Q29uZGl0aW9ucyB9IGZyb20gXCIuL3RlbXBsYXRpbmcvRmlsdGVySGVscGVyXCI7XG5pbXBvcnQgQXBwQ29tcG9uZW50IGZyb20gXCJzYXAvZmUvY29yZS9BcHBDb21wb25lbnRcIjtcbmltcG9ydCBKU09OTW9kZWwgZnJvbSBcInNhcC91aS9tb2RlbC9qc29uL0pTT05Nb2RlbFwiO1xuaW1wb3J0IHsgZ2VuZXJhdGUgfSBmcm9tIFwic2FwL2ZlL2NvcmUvaGVscGVycy9TdGFibGVJZEhlbHBlclwiO1xuaW1wb3J0IE9EYXRhTW9kZWwgZnJvbSBcInNhcC91aS9tb2RlbC9vZGF0YS92NC9PRGF0YU1vZGVsXCI7XG5pbXBvcnQgQ29udHJvbCBmcm9tIFwic2FwL3VpL2NvcmUvQ29udHJvbFwiO1xuaW1wb3J0IEZpbHRlck9wZXJhdG9yVXRpbCBmcm9tIFwic2FwL3VpL21kYy9jb25kaXRpb24vRmlsdGVyT3BlcmF0b3JVdGlsXCI7XG5pbXBvcnQgVHlwZVV0aWwgZnJvbSBcInNhcC91aS9tZGMvb2RhdGEvdjQvVHlwZVV0aWxcIjtcbmltcG9ydCB7IElzc3VlQ2F0ZWdvcnksIElzc3VlU2V2ZXJpdHksIElzc3VlQ2F0ZWdvcnlUeXBlIH0gZnJvbSBcInNhcC9mZS9jb3JlL2NvbnZlcnRlcnMvaGVscGVycy9Jc3N1ZU1hbmFnZXJcIjtcbmltcG9ydCB7IGlzQ29ubmVjdGVkLCBkaXNjb25uZWN0IH0gZnJvbSBcInNhcC9mZS9jb3JlL2FjdGlvbnMvY29sbGFib3JhdGlvbi9BY3Rpdml0eVN5bmNcIjtcbmltcG9ydCBDb250ZXh0IGZyb20gXCJzYXAvdWkvbW9kZWwvQ29udGV4dFwiO1xuaW1wb3J0IHsgcGVyZm9ybUFmdGVyRGlzY2FyZG9yS2VlcERyYWZ0IH0gZnJvbSBcIi4vY29udHJvbHMvRGF0YUxvc3NPckRyYWZ0RGlzY2FyZC9EYXRhTG9zc09yRHJhZnREaXNjYXJkSGFuZGxlclwiO1xuaW1wb3J0IEJ1dHRvbiBmcm9tIFwic2FwL20vQnV0dG9uXCI7XG5pbXBvcnQgRGlhbG9nIGZyb20gXCJzYXAvbS9EaWFsb2dcIjtcbmltcG9ydCBCYXIgZnJvbSBcInNhcC9tL0JhclwiO1xuaW1wb3J0IFRpdGxlIGZyb20gXCJzYXAvbS9UaXRsZVwiO1xuaW1wb3J0IG1lc3NhZ2VIYW5kbGluZyBmcm9tIFwiLi9hY3Rpb25zL21lc3NhZ2VIYW5kbGluZ1wiO1xuXG5jb25zdCBQcm9ncmFtbWluZ01vZGVsID0gbGlicmFyeS5Qcm9ncmFtbWluZ01vZGVsO1xuY29uc3QgYVZhbGlkVHlwZXMgPSBbXG5cdFwiRWRtLkJvb2xlYW5cIixcblx0XCJFZG0uQnl0ZVwiLFxuXHRcIkVkbS5EYXRlXCIsXG5cdFwiRWRtLkRhdGVUaW1lXCIsXG5cdFwiRWRtLkRhdGVUaW1lT2Zmc2V0XCIsXG5cdFwiRWRtLkRlY2ltYWxcIixcblx0XCJFZG0uRG91YmxlXCIsXG5cdFwiRWRtLkZsb2F0XCIsXG5cdFwiRWRtLkd1aWRcIixcblx0XCJFZG0uSW50MTZcIixcblx0XCJFZG0uSW50MzJcIixcblx0XCJFZG0uSW50NjRcIixcblx0XCJFZG0uU0J5dGVcIixcblx0XCJFZG0uU2luZ2xlXCIsXG5cdFwiRWRtLlN0cmluZ1wiLFxuXHRcIkVkbS5UaW1lXCIsXG5cdFwiRWRtLlRpbWVPZkRheVwiXG5dO1xuXG5mdW5jdGlvbiBub3JtYWxpemVTZWFyY2hUZXJtKHNTZWFyY2hUZXJtOiBzdHJpbmcpIHtcblx0aWYgKCFzU2VhcmNoVGVybSkge1xuXHRcdHJldHVybiB1bmRlZmluZWQ7XG5cdH1cblxuXHRyZXR1cm4gc1NlYXJjaFRlcm1cblx0XHQucmVwbGFjZSgvXCIvZywgXCIgXCIpXG5cdFx0LnNwbGl0KC9cXHMrLylcblx0XHQucmVkdWNlKGZ1bmN0aW9uKHNOb3JtYWxpemVkOiBzdHJpbmcgfCB1bmRlZmluZWQsIHNDdXJyZW50V29yZDogc3RyaW5nKSB7XG5cdFx0XHRpZiAoc0N1cnJlbnRXb3JkICE9PSBcIlwiKSB7XG5cdFx0XHRcdHNOb3JtYWxpemVkID0gKHNOb3JtYWxpemVkID8gc05vcm1hbGl6ZWQgKyBcIiBcIiA6IFwiXCIpICsgJ1wiJyArIHNDdXJyZW50V29yZCArICdcIic7XG5cdFx0XHR9XG5cdFx0XHRyZXR1cm4gc05vcm1hbGl6ZWQ7XG5cdFx0fSwgdW5kZWZpbmVkKTtcbn1cblxuZnVuY3Rpb24gZ2V0UHJvcGVydHlEYXRhVHlwZShvTmF2aWdhdGlvbkNvbnRleHQ6IGFueSkge1xuXHRsZXQgc0RhdGFUeXBlID0gb05hdmlnYXRpb25Db250ZXh0LmdldFByb3BlcnR5KFwiJFR5cGVcIik7XG5cdC8vIGlmICRraW5kIGV4aXN0cywgaXQncyBub3QgYSBEYXRhRmllbGQgYW5kIHdlIGhhdmUgdGhlIGZpbmFsIHR5cGUgYWxyZWFkeVxuXHRpZiAoIW9OYXZpZ2F0aW9uQ29udGV4dC5nZXRQcm9wZXJ0eShcIiRraW5kXCIpKSB7XG5cdFx0c3dpdGNoIChzRGF0YVR5cGUpIHtcblx0XHRcdGNhc2UgXCJjb20uc2FwLnZvY2FidWxhcmllcy5VSS52MS5EYXRhRmllbGRGb3JBY3Rpb25cIjpcblx0XHRcdGNhc2UgXCJjb20uc2FwLnZvY2FidWxhcmllcy5VSS52MS5EYXRhRmllbGRGb3JJbnRlbnRCYXNlZE5hdmlnYXRpb25cIjpcblx0XHRcdFx0c0RhdGFUeXBlID0gdW5kZWZpbmVkO1xuXHRcdFx0XHRicmVhaztcblxuXHRcdFx0Y2FzZSBcImNvbS5zYXAudm9jYWJ1bGFyaWVzLlVJLnYxLkRhdGFGaWVsZFwiOlxuXHRcdFx0Y2FzZSBcImNvbS5zYXAudm9jYWJ1bGFyaWVzLlVJLnYxLkRhdGFGaWVsZFdpdGhOYXZpZ2F0aW9uUGF0aFwiOlxuXHRcdFx0Y2FzZSBcImNvbS5zYXAudm9jYWJ1bGFyaWVzLlVJLnYxLkRhdGFGaWVsZFdpdGhVcmxcIjpcblx0XHRcdGNhc2UgXCJjb20uc2FwLnZvY2FidWxhcmllcy5VSS52MS5EYXRhRmllbGRXaXRoSW50ZW50QmFzZWROYXZpZ2F0aW9uXCI6XG5cdFx0XHRjYXNlIFwiY29tLnNhcC52b2NhYnVsYXJpZXMuVUkudjEuRGF0YUZpZWxkV2l0aEFjdGlvblwiOlxuXHRcdFx0XHRzRGF0YVR5cGUgPSBvTmF2aWdhdGlvbkNvbnRleHQuZ2V0UHJvcGVydHkoXCJWYWx1ZS8kUGF0aC8kVHlwZVwiKTtcblx0XHRcdFx0YnJlYWs7XG5cblx0XHRcdGNhc2UgXCJjb20uc2FwLnZvY2FidWxhcmllcy5VSS52MS5EYXRhRmllbGRGb3JBbm5vdGF0aW9uXCI6XG5cdFx0XHRkZWZhdWx0OlxuXHRcdFx0XHRjb25zdCBzQW5ub3RhdGlvblBhdGggPSBvTmF2aWdhdGlvbkNvbnRleHQuZ2V0UHJvcGVydHkoXCJUYXJnZXQvJEFubm90YXRpb25QYXRoXCIpO1xuXHRcdFx0XHRpZiAoc0Fubm90YXRpb25QYXRoKSB7XG5cdFx0XHRcdFx0aWYgKHNBbm5vdGF0aW9uUGF0aC5pbmRleE9mKFwiY29tLnNhcC52b2NhYnVsYXJpZXMuQ29tbXVuaWNhdGlvbi52MS5Db250YWN0XCIpID4gLTEpIHtcblx0XHRcdFx0XHRcdHNEYXRhVHlwZSA9IG9OYXZpZ2F0aW9uQ29udGV4dC5nZXRQcm9wZXJ0eShcIlRhcmdldC8kQW5ub3RhdGlvblBhdGgvZm4vJFBhdGgvJFR5cGVcIik7XG5cdFx0XHRcdFx0fSBlbHNlIGlmIChzQW5ub3RhdGlvblBhdGguaW5kZXhPZihcImNvbS5zYXAudm9jYWJ1bGFyaWVzLlVJLnYxLkRhdGFQb2ludFwiKSA+IC0xKSB7XG5cdFx0XHRcdFx0XHRzRGF0YVR5cGUgPSBvTmF2aWdhdGlvbkNvbnRleHQuZ2V0UHJvcGVydHkoXCJWYWx1ZS8kUGF0aC8kVHlwZVwiKTtcblx0XHRcdFx0XHR9IGVsc2Uge1xuXHRcdFx0XHRcdFx0Ly8gZS5nLiBGaWVsZEdyb3VwIG9yIENoYXJ0XG5cdFx0XHRcdFx0XHRzRGF0YVR5cGUgPSB1bmRlZmluZWQ7XG5cdFx0XHRcdFx0fVxuXHRcdFx0XHR9IGVsc2Uge1xuXHRcdFx0XHRcdHNEYXRhVHlwZSA9IHVuZGVmaW5lZDtcblx0XHRcdFx0fVxuXHRcdFx0XHRicmVhaztcblx0XHR9XG5cdH1cblxuXHRyZXR1cm4gc0RhdGFUeXBlO1xufVxuZnVuY3Rpb24gZm5IYXNUcmFuc2llbnRDb250ZXh0cyhvTGlzdEJpbmRpbmc6IGFueSkge1xuXHRsZXQgYkhhc1RyYW5zaWVudENvbnRleHRzID0gZmFsc2U7XG5cdGlmIChvTGlzdEJpbmRpbmcpIHtcblx0XHRvTGlzdEJpbmRpbmcuZ2V0Q3VycmVudENvbnRleHRzKCkuZm9yRWFjaChmdW5jdGlvbihvQ29udGV4dDogYW55KSB7XG5cdFx0XHRpZiAob0NvbnRleHQgJiYgb0NvbnRleHQuaXNUcmFuc2llbnQoKSkge1xuXHRcdFx0XHRiSGFzVHJhbnNpZW50Q29udGV4dHMgPSB0cnVlO1xuXHRcdFx0fVxuXHRcdH0pO1xuXHR9XG5cdHJldHVybiBiSGFzVHJhbnNpZW50Q29udGV4dHM7XG59XG5mdW5jdGlvbiBnZXRTZWFyY2hSZXN0cmljdGlvbnMoc0Z1bGxQYXRoOiBhbnksIG9NZXRhTW9kZWw6IGFueSkge1xuXHRsZXQgaSA9IDA7XG5cdGNvbnN0IGFOYXZpZ2F0aW9uUGFydHMgPSBzRnVsbFBhdGguc3BsaXQoXCIvJE5hdmlnYXRpb25Qcm9wZXJ0eUJpbmRpbmcvXCIpO1xuXHRmb3IgKGxldCBzUGF0aCA9IGFOYXZpZ2F0aW9uUGFydHNbMF07IGkgPCBhTmF2aWdhdGlvblBhcnRzLmxlbmd0aCAtIDE7IGkrKykge1xuXHRcdGNvbnN0IG9OYXZpZ2F0aW9uUmVzdHJpY3Rpb25zID0gZ2V0TmF2aWdhdGlvblJlc3RyaWN0aW9ucyhvTWV0YU1vZGVsLCBzUGF0aCwgYU5hdmlnYXRpb25QYXJ0c1tpICsgMV0pO1xuXHRcdGlmIChvTmF2aWdhdGlvblJlc3RyaWN0aW9ucyAmJiBvTmF2aWdhdGlvblJlc3RyaWN0aW9uc1tcIlNlYXJjaFJlc3RyaWN0aW9uc1wiXSkge1xuXHRcdFx0cmV0dXJuIG9OYXZpZ2F0aW9uUmVzdHJpY3Rpb25zW1wiU2VhcmNoUmVzdHJpY3Rpb25zXCJdO1xuXHRcdH1cblx0XHRzUGF0aCA9IHNQYXRoICsgXCIvJE5hdmlnYXRpb25Qcm9wZXJ0eUJpbmRpbmcvXCIgKyBhTmF2aWdhdGlvblBhcnRzW2ldO1xuXHR9XG5cdHJldHVybiBvTWV0YU1vZGVsLmdldE9iamVjdChzRnVsbFBhdGggKyBcIkBPcmcuT0RhdGEuQ2FwYWJpbGl0aWVzLlYxLlNlYXJjaFJlc3RyaWN0aW9uc1wiKTtcbn1cbmZ1bmN0aW9uIGdldE5hdmlnYXRpb25SZXN0cmljdGlvbnMob01vZGVsOiBhbnksIHNFbnRpdHlTZXRQYXRoOiBhbnksIHNOYXZpZ2F0aW9uUGF0aDogYW55KSB7XG5cdGNvbnN0IG9OYXZpZ2F0aW9uUmVzdHJpY3Rpb25zID0gb01vZGVsLmdldE9iamVjdChzRW50aXR5U2V0UGF0aCArIFwiQE9yZy5PRGF0YS5DYXBhYmlsaXRpZXMuVjEuTmF2aWdhdGlvblJlc3RyaWN0aW9uc1wiKTtcblx0Y29uc3QgYVJlc3RyaWN0ZWRQcm9wZXJ0aWVzID0gb05hdmlnYXRpb25SZXN0cmljdGlvbnMgJiYgb05hdmlnYXRpb25SZXN0cmljdGlvbnMuUmVzdHJpY3RlZFByb3BlcnRpZXM7XG5cdHJldHVybiAoXG5cdFx0YVJlc3RyaWN0ZWRQcm9wZXJ0aWVzICYmXG5cdFx0YVJlc3RyaWN0ZWRQcm9wZXJ0aWVzLmZpbmQoZnVuY3Rpb24ob1Jlc3RyaWN0ZWRQcm9wZXJ0eTogYW55KSB7XG5cdFx0XHRyZXR1cm4gKFxuXHRcdFx0XHRvUmVzdHJpY3RlZFByb3BlcnR5ICYmXG5cdFx0XHRcdG9SZXN0cmljdGVkUHJvcGVydHkuTmF2aWdhdGlvblByb3BlcnR5ICYmXG5cdFx0XHRcdG9SZXN0cmljdGVkUHJvcGVydHkuTmF2aWdhdGlvblByb3BlcnR5LiROYXZpZ2F0aW9uUHJvcGVydHlQYXRoID09PSBzTmF2aWdhdGlvblBhdGhcblx0XHRcdCk7XG5cdFx0fSlcblx0KTtcbn1cbmZ1bmN0aW9uIF9pc0luTm9uRmlsdGVyYWJsZVByb3BlcnRpZXMob01vZGVsOiBhbnksIHNFbnRpdHlTZXRQYXRoOiBhbnksIHNDb250ZXh0UGF0aDogYW55KSB7XG5cdGxldCBiSXNOb3RGaWx0ZXJhYmxlID0gZmFsc2U7XG5cdGNvbnN0IG9Bbm5vdGF0aW9uID0gb01vZGVsLmdldE9iamVjdChzRW50aXR5U2V0UGF0aCArIFwiQE9yZy5PRGF0YS5DYXBhYmlsaXRpZXMuVjEuRmlsdGVyUmVzdHJpY3Rpb25zXCIpO1xuXHRpZiAob0Fubm90YXRpb24gJiYgb0Fubm90YXRpb24uTm9uRmlsdGVyYWJsZVByb3BlcnRpZXMpIHtcblx0XHRiSXNOb3RGaWx0ZXJhYmxlID0gb0Fubm90YXRpb24uTm9uRmlsdGVyYWJsZVByb3BlcnRpZXMuc29tZShmdW5jdGlvbihwcm9wZXJ0eTogYW55KSB7XG5cdFx0XHRyZXR1cm4gcHJvcGVydHkuJE5hdmlnYXRpb25Qcm9wZXJ0eVBhdGggPT09IHNDb250ZXh0UGF0aCB8fCBwcm9wZXJ0eS4kUHJvcGVydHlQYXRoID09PSBzQ29udGV4dFBhdGg7XG5cdFx0fSk7XG5cdH1cblx0cmV0dXJuIGJJc05vdEZpbHRlcmFibGU7XG59XG4vLyBUT0RPIHJld29yayB0aGlzIVxuZnVuY3Rpb24gX2lzQ29udGV4dFBhdGhGaWx0ZXJhYmxlKG9Nb2RlbDogYW55LCBzRW50aXR5U2V0UGF0aDogYW55LCBzQ29udGV4UGF0aDogYW55KSB7XG5cdGNvbnN0IHNGdWxsUGF0aCA9IHNFbnRpdHlTZXRQYXRoICsgXCIvXCIgKyBzQ29udGV4UGF0aCxcblx0XHRhRVNQYXJ0cyA9IHNGdWxsUGF0aC5zcGxpdChcIi9cIikuc3BsaWNlKDAsIDIpLFxuXHRcdGFDb250ZXh0ID0gc0Z1bGxQYXRoLnNwbGl0KFwiL1wiKS5zcGxpY2UoMik7XG5cdGxldCBiSXNOb3RGaWx0ZXJhYmxlID0gZmFsc2UsXG5cdFx0c0NvbnRleHQgPSBcIlwiO1xuXG5cdHNFbnRpdHlTZXRQYXRoID0gYUVTUGFydHMuam9pbihcIi9cIik7XG5cblx0YklzTm90RmlsdGVyYWJsZSA9IGFDb250ZXh0LnNvbWUoZnVuY3Rpb24oaXRlbTogc3RyaW5nLCBpbmRleDogbnVtYmVyLCBhcnJheTogc3RyaW5nW10pIHtcblx0XHRpZiAoc0NvbnRleHQubGVuZ3RoID4gMCkge1xuXHRcdFx0c0NvbnRleHQgKz0gXCIvXCIgKyBpdGVtO1xuXHRcdH0gZWxzZSB7XG5cdFx0XHRzQ29udGV4dCA9IGl0ZW07XG5cdFx0fVxuXHRcdGlmIChpbmRleCA9PT0gYXJyYXkubGVuZ3RoIC0gMikge1xuXHRcdFx0Ly8gSW4gY2FzZSBvZiBcIi9DdXN0b21lci9TZXQvUHJvcGVydHlcIiB0aGlzIGlzIHRvIGNoZWNrIG5hdmlnYXRpb24gcmVzdHJpY3Rpb25zIG9mIFwiQ3VzdG9tZXJcIiBmb3Igbm9uLWZpbHRlcmFibGUgcHJvcGVydGllcyBpbiBcIlNldFwiXG5cdFx0XHRjb25zdCBvTmF2aWdhdGlvblJlc3RyaWN0aW9ucyA9IGdldE5hdmlnYXRpb25SZXN0cmljdGlvbnMob01vZGVsLCBzRW50aXR5U2V0UGF0aCwgaXRlbSk7XG5cdFx0XHRjb25zdCBvRmlsdGVyUmVzdHJpY3Rpb25zID0gb05hdmlnYXRpb25SZXN0cmljdGlvbnMgJiYgb05hdmlnYXRpb25SZXN0cmljdGlvbnMuRmlsdGVyUmVzdHJpY3Rpb25zO1xuXHRcdFx0Y29uc3QgYU5vbkZpbHRlcmFibGVQcm9wZXJ0aWVzID0gb0ZpbHRlclJlc3RyaWN0aW9ucyAmJiBvRmlsdGVyUmVzdHJpY3Rpb25zLk5vbkZpbHRlcmFibGVQcm9wZXJ0aWVzO1xuXHRcdFx0Y29uc3Qgc1RhcmdldFByb3BlcnR5UGF0aCA9IGFycmF5W2FycmF5Lmxlbmd0aCAtIDFdO1xuXHRcdFx0aWYgKFxuXHRcdFx0XHRhTm9uRmlsdGVyYWJsZVByb3BlcnRpZXMgJiZcblx0XHRcdFx0YU5vbkZpbHRlcmFibGVQcm9wZXJ0aWVzLmZpbmQoZnVuY3Rpb24ob1Byb3BlcnR5UGF0aDogYW55KSB7XG5cdFx0XHRcdFx0cmV0dXJuIG9Qcm9wZXJ0eVBhdGguJFByb3BlcnR5UGF0aCA9PT0gc1RhcmdldFByb3BlcnR5UGF0aDtcblx0XHRcdFx0fSlcblx0XHRcdCkge1xuXHRcdFx0XHRyZXR1cm4gdHJ1ZTtcblx0XHRcdH1cblx0XHR9XG5cdFx0aWYgKGluZGV4ID09PSBhcnJheS5sZW5ndGggLSAxKSB7XG5cdFx0XHQvL2xhc3QgcGF0aCBzZWdtZW50XG5cdFx0XHRiSXNOb3RGaWx0ZXJhYmxlID0gX2lzSW5Ob25GaWx0ZXJhYmxlUHJvcGVydGllcyhvTW9kZWwsIHNFbnRpdHlTZXRQYXRoLCBzQ29udGV4dCk7XG5cdFx0fSBlbHNlIGlmIChvTW9kZWwuZ2V0T2JqZWN0KHNFbnRpdHlTZXRQYXRoICsgXCIvJE5hdmlnYXRpb25Qcm9wZXJ0eUJpbmRpbmcvXCIgKyBpdGVtKSkge1xuXHRcdFx0Ly9jaGVjayBleGlzdGluZyBjb250ZXh0IHBhdGggYW5kIGluaXRpYWxpemUgaXRcblx0XHRcdGJJc05vdEZpbHRlcmFibGUgPSBfaXNJbk5vbkZpbHRlcmFibGVQcm9wZXJ0aWVzKG9Nb2RlbCwgc0VudGl0eVNldFBhdGgsIHNDb250ZXh0KTtcblx0XHRcdHNDb250ZXh0ID0gXCJcIjtcblx0XHRcdC8vc2V0IHRoZSBuZXcgRW50aXR5U2V0XG5cdFx0XHRzRW50aXR5U2V0UGF0aCA9IFwiL1wiICsgb01vZGVsLmdldE9iamVjdChzRW50aXR5U2V0UGF0aCArIFwiLyROYXZpZ2F0aW9uUHJvcGVydHlCaW5kaW5nL1wiICsgaXRlbSk7XG5cdFx0fVxuXHRcdHJldHVybiBiSXNOb3RGaWx0ZXJhYmxlID09PSB0cnVlO1xuXHR9KTtcblx0cmV0dXJuIGJJc05vdEZpbHRlcmFibGU7XG59XG4vLyBUT0RPIGNoZWNrIHVzZWQgcGxhY2VzIGFuZCByZXdvcmsgdGhpc1xuZnVuY3Rpb24gaXNQcm9wZXJ0eUZpbHRlcmFibGUob01vZGVsOiBPRGF0YU1ldGFNb2RlbCwgc0VudGl0eVNldFBhdGg6IHN0cmluZywgc1Byb3BlcnR5OiBzdHJpbmcsIGJTa2lwSGlkZGVuRmlsdGVyOiBib29sZWFuKSB7XG5cdGlmICh0eXBlb2Ygc1Byb3BlcnR5ICE9PSBcInN0cmluZ1wiKSB7XG5cdFx0dGhyb3cgbmV3IEVycm9yKFwic1Byb3BlcnR5IHBhcmFtZXRlciBtdXN0IGJlIGEgc3RyaW5nXCIpO1xuXHR9XG5cdGxldCBiSXNGaWx0ZXJhYmxlO1xuXG5cdC8vIFBhcmFtZXRlcnMgc2hvdWxkIGJlIHJlbmRlcmVkIGFzIGZpbHRlcmZpZWxkc1xuXHRpZiAob01vZGVsLmdldE9iamVjdChzRW50aXR5U2V0UGF0aCArIFwiL0Bjb20uc2FwLnZvY2FidWxhcmllcy5Db21tb24udjEuUmVzdWx0Q29udGV4dFwiKSA9PT0gdHJ1ZSkge1xuXHRcdHJldHVybiB0cnVlO1xuXHR9XG5cblx0Y29uc3Qgb05hdmlnYXRpb25Db250ZXh0ID0gb01vZGVsLmNyZWF0ZUJpbmRpbmdDb250ZXh0KHNFbnRpdHlTZXRQYXRoICsgXCIvXCIgKyBzUHJvcGVydHkpIGFzIENvbnRleHQ7XG5cblx0aWYgKG9OYXZpZ2F0aW9uQ29udGV4dC5nZXRQcm9wZXJ0eShcIkBjb20uc2FwLnZvY2FidWxhcmllcy5VSS52MS5IaWRkZW5cIikgPT09IHRydWUpIHtcblx0XHRyZXR1cm4gZmFsc2U7XG5cdH1cblxuXHRpZiAoIWJTa2lwSGlkZGVuRmlsdGVyICYmIG9OYXZpZ2F0aW9uQ29udGV4dC5nZXRQcm9wZXJ0eShcIkBjb20uc2FwLnZvY2FidWxhcmllcy5VSS52MS5IaWRkZW5GaWx0ZXJcIikpIHtcblx0XHRyZXR1cm4gZmFsc2U7XG5cdH1cblxuXHRpZiAoc0VudGl0eVNldFBhdGguc3BsaXQoXCIvXCIpLmxlbmd0aCA9PT0gMiAmJiBzUHJvcGVydHkuaW5kZXhPZihcIi9cIikgPCAwKSB7XG5cdFx0Ly8gdGhlcmUgaXMgbm8gbmF2aWdhdGlvbiBpbiBlbnRpdHlTZXQgcGF0aCBhbmQgcHJvcGVydHkgcGF0aFxuXHRcdGJJc0ZpbHRlcmFibGUgPSAhX2lzSW5Ob25GaWx0ZXJhYmxlUHJvcGVydGllcyhvTW9kZWwsIHNFbnRpdHlTZXRQYXRoLCBzUHJvcGVydHkpO1xuXHR9IGVsc2Uge1xuXHRcdGJJc0ZpbHRlcmFibGUgPSAhX2lzQ29udGV4dFBhdGhGaWx0ZXJhYmxlKG9Nb2RlbCwgc0VudGl0eVNldFBhdGgsIHNQcm9wZXJ0eSk7XG5cdH1cblx0Ly8gY2hlY2sgaWYgdHlwZSBjYW4gYmUgdXNlZCBmb3IgZmlsdGVyaW5nXG5cdGlmIChiSXNGaWx0ZXJhYmxlICYmIG9OYXZpZ2F0aW9uQ29udGV4dCkge1xuXHRcdGNvbnN0IHNQcm9wZXJ0eURhdGFUeXBlID0gZ2V0UHJvcGVydHlEYXRhVHlwZShvTmF2aWdhdGlvbkNvbnRleHQpO1xuXHRcdGlmIChzUHJvcGVydHlEYXRhVHlwZSkge1xuXHRcdFx0YklzRmlsdGVyYWJsZSA9IGFWYWxpZFR5cGVzLmluZGV4T2Yoc1Byb3BlcnR5RGF0YVR5cGUpICE9PSAtMTtcblx0XHR9IGVsc2Uge1xuXHRcdFx0YklzRmlsdGVyYWJsZSA9IGZhbHNlO1xuXHRcdH1cblx0fVxuXG5cdHJldHVybiBiSXNGaWx0ZXJhYmxlO1xufVxuZnVuY3Rpb24gZ2V0U2hlbGxTZXJ2aWNlcyhvQ29udHJvbDogYW55KSB7XG5cdHJldHVybiBnZXRBcHBDb21wb25lbnQob0NvbnRyb2wpLmdldFNoZWxsU2VydmljZXMoKTtcbn1cbmZ1bmN0aW9uIGdldEhhc2goKSB7XG5cdGNvbnN0IHNIYXNoID0gd2luZG93LmxvY2F0aW9uLmhhc2g7XG5cdHJldHVybiBzSGFzaC5zcGxpdChcIiZcIilbMF07XG59XG5mdW5jdGlvbiBfZ2V0U09JbnRlbnRzKG9PYmplY3RQYWdlTGF5b3V0OiBhbnksIG9TZW1hbnRpY09iamVjdDogYW55LCBvUGFyYW06IGFueSkge1xuXHRjb25zdCBvU2hlbGxTZXJ2aWNlSGVscGVyID0gQ29tbW9uVXRpbHMuZ2V0U2hlbGxTZXJ2aWNlcyhvT2JqZWN0UGFnZUxheW91dCk7XG5cdHJldHVybiBvU2hlbGxTZXJ2aWNlSGVscGVyLmdldExpbmtzKHtcblx0XHRzZW1hbnRpY09iamVjdDogb1NlbWFudGljT2JqZWN0LFxuXHRcdHBhcmFtczogb1BhcmFtXG5cdH0pO1xufVxuLy8gVE8tRE8gYWRkIHRoaXMgYXMgcGFydCBvZiBhcHBseVNlbWFudGljT2JqZWN0bWFwcGluZ3MgbG9naWMgaW4gSW50ZW50QmFzZWRuYXZpZ2F0aW9uIGNvbnRyb2xsZXIgZXh0ZW5zaW9uXG5mdW5jdGlvbiBfY3JlYXRlTWFwcGluZ3Mob01hcHBpbmc6IGFueSkge1xuXHRjb25zdCBhU09NYXBwaW5ncyA9IFtdO1xuXHRjb25zdCBhTWFwcGluZ0tleXMgPSBPYmplY3Qua2V5cyhvTWFwcGluZyk7XG5cdGxldCBvU2VtYW50aWNNYXBwaW5nO1xuXHRmb3IgKGxldCBpID0gMDsgaSA8IGFNYXBwaW5nS2V5cy5sZW5ndGg7IGkrKykge1xuXHRcdG9TZW1hbnRpY01hcHBpbmcgPSB7XG5cdFx0XHRcIkxvY2FsUHJvcGVydHlcIjoge1xuXHRcdFx0XHRcIiRQcm9wZXJ0eVBhdGhcIjogYU1hcHBpbmdLZXlzW2ldXG5cdFx0XHR9LFxuXHRcdFx0XCJTZW1hbnRpY09iamVjdFByb3BlcnR5XCI6IG9NYXBwaW5nW2FNYXBwaW5nS2V5c1tpXV1cblx0XHR9O1xuXHRcdGFTT01hcHBpbmdzLnB1c2gob1NlbWFudGljTWFwcGluZyk7XG5cdH1cblxuXHRyZXR1cm4gYVNPTWFwcGluZ3M7XG59XG4vKipcbiAqIEBwYXJhbSBhTGlua3NcbiAqIEBwYXJhbSBhRXhjbHVkZWRBY3Rpb25zXG4gKiBAcGFyYW0gb1RhcmdldFBhcmFtc1xuICogQHBhcmFtIGFJdGVtc1xuICovXG5mdW5jdGlvbiBfZ2V0UmVsYXRlZEFwcHNNZW51SXRlbXMoYUxpbmtzOiBhbnksIGFFeGNsdWRlZEFjdGlvbnM6IGFueSwgb1RhcmdldFBhcmFtczogYW55LCBhSXRlbXM6IGFueSkge1xuXHRmb3IgKGxldCBpID0gMDsgaSA8IGFMaW5rcy5sZW5ndGg7IGkrKykge1xuXHRcdGNvbnN0IG9MaW5rID0gYUxpbmtzW2ldO1xuXHRcdGNvbnN0IHNJbnRlbnQgPSBvTGluay5pbnRlbnQ7XG5cdFx0Y29uc3Qgc0FjdGlvbiA9IHNJbnRlbnQuc3BsaXQoXCItXCIpWzFdLnNwbGl0KFwiP1wiKVswXTtcblx0XHRpZiAoYUV4Y2x1ZGVkQWN0aW9ucyAmJiBhRXhjbHVkZWRBY3Rpb25zLmluZGV4T2Yoc0FjdGlvbikgPT09IC0xKSB7XG5cdFx0XHRhSXRlbXMucHVzaCh7XG5cdFx0XHRcdHRleHQ6IG9MaW5rLnRleHQsXG5cdFx0XHRcdHRhcmdldFNlbU9iamVjdDogc0ludGVudC5zcGxpdChcIiNcIilbMV0uc3BsaXQoXCItXCIpWzBdLFxuXHRcdFx0XHR0YXJnZXRBY3Rpb246IHNBY3Rpb24uc3BsaXQoXCJ+XCIpWzBdLFxuXHRcdFx0XHR0YXJnZXRQYXJhbXM6IG9UYXJnZXRQYXJhbXNcblx0XHRcdH0pO1xuXHRcdH1cblx0fVxufVxuLyoqXG4gKiBAcGFyYW0gb0FkZGl0aW9uYWxTZW1hbnRpY09iamVjdHNcbiAqIEBwYXJhbSBvQmluZGluZ0NvbnRleHRcbiAqIEBwYXJhbSBhTWFuaWZlc3RTT0l0ZW1zXG4gKiBAcGFyYW0gYUxpbmtzXG4gKi9cbmZ1bmN0aW9uIF9nZXRSZWxhdGVkSW50ZW50cyhvQWRkaXRpb25hbFNlbWFudGljT2JqZWN0czogYW55LCBvQmluZGluZ0NvbnRleHQ6IGFueSwgYU1hbmlmZXN0U09JdGVtczogYW55LCBhTGlua3M6IGFueSkge1xuXHRpZiAoYUxpbmtzICYmIGFMaW5rcy5sZW5ndGggPiAwKSB7XG5cdFx0Y29uc3QgYUV4Y2x1ZGVkQWN0aW9ucyA9IG9BZGRpdGlvbmFsU2VtYW50aWNPYmplY3RzLnVuYXZhaWxhYmxlQWN0aW9ucyA/IG9BZGRpdGlvbmFsU2VtYW50aWNPYmplY3RzLnVuYXZhaWxhYmxlQWN0aW9ucyA6IFtdO1xuXHRcdGNvbnN0IGFTT01hcHBpbmdzID0gb0FkZGl0aW9uYWxTZW1hbnRpY09iamVjdHMubWFwcGluZyA/IF9jcmVhdGVNYXBwaW5ncyhvQWRkaXRpb25hbFNlbWFudGljT2JqZWN0cy5tYXBwaW5nKSA6IFtdO1xuXHRcdGNvbnN0IG9UYXJnZXRQYXJhbXMgPSB7IG5hdmlnYXRpb25Db250ZXh0czogb0JpbmRpbmdDb250ZXh0LCBzZW1hbnRpY09iamVjdE1hcHBpbmc6IGFTT01hcHBpbmdzIH07XG5cdFx0X2dldFJlbGF0ZWRBcHBzTWVudUl0ZW1zKGFMaW5rcywgYUV4Y2x1ZGVkQWN0aW9ucywgb1RhcmdldFBhcmFtcywgYU1hbmlmZXN0U09JdGVtcyk7XG5cdH1cbn1cbmZ1bmN0aW9uIHVwZGF0ZVJlbGF0ZUFwcHNNb2RlbChcblx0dGhpczogYW55LFxuXHRvQmluZGluZ0NvbnRleHQ6IGFueSxcblx0b0VudHJ5OiBhbnksXG5cdG9PYmplY3RQYWdlTGF5b3V0OiBhbnksXG5cdGFTZW1LZXlzOiBhbnksXG5cdG9NZXRhTW9kZWw6IGFueSxcblx0b01ldGFQYXRoOiBhbnlcbikge1xuXHRjb25zdCBvU2hlbGxTZXJ2aWNlSGVscGVyID0gZ2V0U2hlbGxTZXJ2aWNlcyhvT2JqZWN0UGFnZUxheW91dCk7XG5cdGNvbnN0IG9QYXJhbTogYW55ID0ge307XG5cdGxldCBzQ3VycmVudFNlbU9iaiA9IFwiXCIsXG5cdFx0c0N1cnJlbnRBY3Rpb24gPSBcIlwiO1xuXHRsZXQgb1NlbWFudGljT2JqZWN0QW5ub3RhdGlvbnM7XG5cdGxldCBhUmVsYXRlZEFwcHNNZW51SXRlbXM6IGFueVtdID0gW107XG5cdGxldCBhRXhjbHVkZWRBY3Rpb25zOiBhbnlbXSA9IFtdO1xuXG5cdGlmIChvRW50cnkpIHtcblx0XHRpZiAoYVNlbUtleXMgJiYgYVNlbUtleXMubGVuZ3RoID4gMCkge1xuXHRcdFx0Zm9yIChsZXQgaiA9IDA7IGogPCBhU2VtS2V5cy5sZW5ndGg7IGorKykge1xuXHRcdFx0XHRjb25zdCBzU2VtS2V5ID0gYVNlbUtleXNbal0uJFByb3BlcnR5UGF0aDtcblx0XHRcdFx0aWYgKCFvUGFyYW1bc1NlbUtleV0pIHtcblx0XHRcdFx0XHRvUGFyYW1bc1NlbUtleV0gPSB7IHZhbHVlOiBvRW50cnlbc1NlbUtleV0gfTtcblx0XHRcdFx0fVxuXHRcdFx0fVxuXHRcdH0gZWxzZSB7XG5cdFx0XHQvLyBmYWxsYmFjayB0byBUZWNobmljYWwgS2V5cyBpZiBubyBTZW1hbnRpYyBLZXkgaXMgcHJlc2VudFxuXHRcdFx0Y29uc3QgYVRlY2huaWNhbEtleXMgPSBvTWV0YU1vZGVsLmdldE9iamVjdChvTWV0YVBhdGggKyBcIi8kVHlwZS8kS2V5XCIpO1xuXHRcdFx0Zm9yIChjb25zdCBrZXkgaW4gYVRlY2huaWNhbEtleXMpIHtcblx0XHRcdFx0Y29uc3Qgc09iaktleSA9IGFUZWNobmljYWxLZXlzW2tleV07XG5cdFx0XHRcdGlmICghb1BhcmFtW3NPYmpLZXldKSB7XG5cdFx0XHRcdFx0b1BhcmFtW3NPYmpLZXldID0geyB2YWx1ZTogb0VudHJ5W3NPYmpLZXldIH07XG5cdFx0XHRcdH1cblx0XHRcdH1cblx0XHR9XG5cdH1cblx0Ly8gTG9naWMgdG8gcmVhZCBhZGRpdGlvbmFsIFNPIGZyb20gbWFuaWZlc3QgYW5kIHVwZGF0ZWQgcmVsYXRlZGFwcHMgbW9kZWxcblxuXHRjb25zdCBvTWFuaWZlc3REYXRhID0gZ2V0VGFyZ2V0VmlldyhvT2JqZWN0UGFnZUxheW91dCkuZ2V0Vmlld0RhdGEoKTtcblx0Y29uc3QgYU1hbmlmZXN0U09JdGVtczogYW55W10gPSBbXTtcblx0aWYgKG9NYW5pZmVzdERhdGEuYWRkaXRpb25hbFNlbWFudGljT2JqZWN0cykge1xuXHRcdGNvbnN0IGFNYW5pZmVzdFNPS2V5cyA9IE9iamVjdC5rZXlzKG9NYW5pZmVzdERhdGEuYWRkaXRpb25hbFNlbWFudGljT2JqZWN0cyk7XG5cdFx0Zm9yIChsZXQga2V5ID0gMDsga2V5IDwgYU1hbmlmZXN0U09LZXlzLmxlbmd0aDsga2V5KyspIHtcblx0XHRcdF9nZXRTT0ludGVudHMob09iamVjdFBhZ2VMYXlvdXQsIGFNYW5pZmVzdFNPS2V5c1trZXldLCBvUGFyYW0pXG5cdFx0XHRcdC50aGVuKFxuXHRcdFx0XHRcdF9nZXRSZWxhdGVkSW50ZW50cy5iaW5kKFxuXHRcdFx0XHRcdFx0dGhpcyBhcyBhbnksXG5cdFx0XHRcdFx0XHRvTWFuaWZlc3REYXRhLmFkZGl0aW9uYWxTZW1hbnRpY09iamVjdHNbYU1hbmlmZXN0U09LZXlzW2tleV1dLFxuXHRcdFx0XHRcdFx0b0JpbmRpbmdDb250ZXh0LFxuXHRcdFx0XHRcdFx0YU1hbmlmZXN0U09JdGVtc1xuXHRcdFx0XHRcdClcblx0XHRcdFx0KVxuXHRcdFx0XHQuY2F0Y2goZnVuY3Rpb24ob0Vycm9yOiBhbnkpIHtcblx0XHRcdFx0XHRMb2cuZXJyb3IoXCJFcnJvciB3aGlsZSByZXRyaWV2aW5nIFNPIEludGVudHNcIiwgb0Vycm9yKTtcblx0XHRcdFx0fSk7XG5cdFx0fVxuXHR9XG5cblx0ZnVuY3Rpb24gZm5HZXRQYXJzZVNoZWxsSGFzaEFuZEdldExpbmtzKCkge1xuXHRcdGNvbnN0IG9QYXJzZWRVcmwgPSBvU2hlbGxTZXJ2aWNlSGVscGVyLnBhcnNlU2hlbGxIYXNoKGRvY3VtZW50LmxvY2F0aW9uLmhhc2gpO1xuXHRcdHNDdXJyZW50U2VtT2JqID0gb1BhcnNlZFVybC5zZW1hbnRpY09iamVjdDsgLy8gQ3VycmVudCBTZW1hbnRpYyBPYmplY3Rcblx0XHRzQ3VycmVudEFjdGlvbiA9IG9QYXJzZWRVcmwuYWN0aW9uO1xuXHRcdHJldHVybiBfZ2V0U09JbnRlbnRzKG9PYmplY3RQYWdlTGF5b3V0LCBzQ3VycmVudFNlbU9iaiwgb1BhcmFtKTtcblx0fVxuXG5cdGZuR2V0UGFyc2VTaGVsbEhhc2hBbmRHZXRMaW5rcygpXG5cdFx0LnRoZW4oZnVuY3Rpb24oYUxpbmtzOiBhbnkpIHtcblx0XHRcdGlmIChhTGlua3MgJiYgYUxpbmtzLmxlbmd0aCA+IDApIHtcblx0XHRcdFx0Y29uc3Qgb1RhcmdldFBhcmFtczogYW55ID0ge307XG5cdFx0XHRcdGNvbnN0IGFBbm5vdGF0aW9uc1NPSXRlbXM6IGFueVtdID0gW107XG5cdFx0XHRcdGNvbnN0IHNFbnRpdHlTZXRQYXRoID0gb01ldGFQYXRoICsgXCJAXCI7XG5cdFx0XHRcdGNvbnN0IHNFbnRpdHlUeXBlUGF0aCA9IG9NZXRhUGF0aCArIFwiL0BcIjtcblx0XHRcdFx0Y29uc3Qgb0VudGl0eVNldEFubm90YXRpb25zID0gb01ldGFNb2RlbC5nZXRPYmplY3Qoc0VudGl0eVNldFBhdGgpO1xuXHRcdFx0XHRvU2VtYW50aWNPYmplY3RBbm5vdGF0aW9ucyA9IF9nZXRTZW1hbnRpY09iamVjdEFubm90YXRpb25zKG9FbnRpdHlTZXRBbm5vdGF0aW9ucywgc0N1cnJlbnRTZW1PYmopO1xuXHRcdFx0XHRpZiAoIW9TZW1hbnRpY09iamVjdEFubm90YXRpb25zLmJIYXNFbnRpdHlTZXRTTykge1xuXHRcdFx0XHRcdGNvbnN0IG9FbnRpdHlUeXBlQW5ub3RhdGlvbnMgPSBvTWV0YU1vZGVsLmdldE9iamVjdChzRW50aXR5VHlwZVBhdGgpO1xuXHRcdFx0XHRcdG9TZW1hbnRpY09iamVjdEFubm90YXRpb25zID0gX2dldFNlbWFudGljT2JqZWN0QW5ub3RhdGlvbnMob0VudGl0eVR5cGVBbm5vdGF0aW9ucywgc0N1cnJlbnRTZW1PYmopO1xuXHRcdFx0XHR9XG5cdFx0XHRcdGFFeGNsdWRlZEFjdGlvbnMgPSBvU2VtYW50aWNPYmplY3RBbm5vdGF0aW9ucy5hVW5hdmFpbGFibGVBY3Rpb25zO1xuXHRcdFx0XHQvL1NraXAgc2FtZSBhcHBsaWNhdGlvbiBmcm9tIFJlbGF0ZWQgQXBwc1xuXHRcdFx0XHRhRXhjbHVkZWRBY3Rpb25zLnB1c2goc0N1cnJlbnRBY3Rpb24pO1xuXHRcdFx0XHRvVGFyZ2V0UGFyYW1zLm5hdmlnYXRpb25Db250ZXh0cyA9IG9CaW5kaW5nQ29udGV4dDtcblx0XHRcdFx0b1RhcmdldFBhcmFtcy5zZW1hbnRpY09iamVjdE1hcHBpbmcgPSBvU2VtYW50aWNPYmplY3RBbm5vdGF0aW9ucy5hTWFwcGluZ3M7XG5cdFx0XHRcdF9nZXRSZWxhdGVkQXBwc01lbnVJdGVtcyhhTGlua3MsIGFFeGNsdWRlZEFjdGlvbnMsIG9UYXJnZXRQYXJhbXMsIGFBbm5vdGF0aW9uc1NPSXRlbXMpO1xuXHRcdFx0XHRhUmVsYXRlZEFwcHNNZW51SXRlbXMgPSBhQW5ub3RhdGlvbnNTT0l0ZW1zLmNvbmNhdChhTWFuaWZlc3RTT0l0ZW1zKTtcblx0XHRcdFx0Ly8gSWYgbm8gYXBwIGluIGxpc3QsIHJlbGF0ZWQgYXBwcyBidXR0b24gd2lsbCBiZSBoaWRkZW5cblx0XHRcdFx0b09iamVjdFBhZ2VMYXlvdXQuZ2V0QmluZGluZ0NvbnRleHQoXCJpbnRlcm5hbFwiKS5zZXRQcm9wZXJ0eShcInJlbGF0ZWRBcHBzL3Zpc2liaWxpdHlcIiwgYVJlbGF0ZWRBcHBzTWVudUl0ZW1zLmxlbmd0aCA+IDApO1xuXHRcdFx0XHRvT2JqZWN0UGFnZUxheW91dC5nZXRCaW5kaW5nQ29udGV4dChcImludGVybmFsXCIpLnNldFByb3BlcnR5KFwicmVsYXRlZEFwcHMvaXRlbXNcIiwgYVJlbGF0ZWRBcHBzTWVudUl0ZW1zKTtcblx0XHRcdH0gZWxzZSB7XG5cdFx0XHRcdG9PYmplY3RQYWdlTGF5b3V0LmdldEJpbmRpbmdDb250ZXh0KFwiaW50ZXJuYWxcIikuc2V0UHJvcGVydHkoXCJyZWxhdGVkQXBwcy92aXNpYmlsaXR5XCIsIGZhbHNlKTtcblx0XHRcdH1cblx0XHR9KVxuXHRcdC5jYXRjaChmdW5jdGlvbihvRXJyb3I6IGFueSkge1xuXHRcdFx0TG9nLmVycm9yKFwiQ2Fubm90IHJlYWQgbGlua3NcIiwgb0Vycm9yKTtcblx0XHR9KTtcblx0cmV0dXJuIGFSZWxhdGVkQXBwc01lbnVJdGVtcztcbn1cbmZ1bmN0aW9uIF9nZXRTZW1hbnRpY09iamVjdEFubm90YXRpb25zKG9FbnRpdHlBbm5vdGF0aW9uczogYW55LCBzQ3VycmVudFNlbU9iajogYW55KSB7XG5cdGNvbnN0IG9TZW1hbnRpY09iamVjdEFubm90YXRpb25zID0ge1xuXHRcdGJIYXNFbnRpdHlTZXRTTzogZmFsc2UsXG5cdFx0YVVuYXZhaWxhYmxlQWN0aW9uczogW10sXG5cdFx0YU1hcHBpbmdzOiBbXVxuXHR9O1xuXHRsZXQgc0Fubm90YXRpb25NYXBwaW5nVGVybSwgc0Fubm90YXRpb25BY3Rpb25UZXJtO1xuXHRsZXQgc1F1YWxpZmllcjtcblx0Zm9yIChjb25zdCBrZXkgaW4gb0VudGl0eUFubm90YXRpb25zKSB7XG5cdFx0aWYgKGtleS5pbmRleE9mKFwiY29tLnNhcC52b2NhYnVsYXJpZXMuQ29tbW9uLnYxLlNlbWFudGljT2JqZWN0XCIpID4gLTEgJiYgb0VudGl0eUFubm90YXRpb25zW2tleV0gPT09IHNDdXJyZW50U2VtT2JqKSB7XG5cdFx0XHRvU2VtYW50aWNPYmplY3RBbm5vdGF0aW9ucy5iSGFzRW50aXR5U2V0U08gPSB0cnVlO1xuXHRcdFx0c0Fubm90YXRpb25NYXBwaW5nVGVybSA9IFwiQGNvbS5zYXAudm9jYWJ1bGFyaWVzLkNvbW1vbi52MS5TZW1hbnRpY09iamVjdE1hcHBpbmdcIjtcblx0XHRcdHNBbm5vdGF0aW9uQWN0aW9uVGVybSA9IFwiQGNvbS5zYXAudm9jYWJ1bGFyaWVzLkNvbW1vbi52MS5TZW1hbnRpY09iamVjdFVuYXZhaWxhYmxlQWN0aW9uc1wiO1xuXG5cdFx0XHRpZiAoa2V5LmluZGV4T2YoXCIjXCIpID4gLTEpIHtcblx0XHRcdFx0c1F1YWxpZmllciA9IGtleS5zcGxpdChcIiNcIilbMV07XG5cdFx0XHRcdHNBbm5vdGF0aW9uTWFwcGluZ1Rlcm0gPSBzQW5ub3RhdGlvbk1hcHBpbmdUZXJtICsgXCIjXCIgKyBzUXVhbGlmaWVyO1xuXHRcdFx0XHRzQW5ub3RhdGlvbkFjdGlvblRlcm0gPSBzQW5ub3RhdGlvbkFjdGlvblRlcm0gKyBcIiNcIiArIHNRdWFsaWZpZXI7XG5cdFx0XHR9XG5cblx0XHRcdG9TZW1hbnRpY09iamVjdEFubm90YXRpb25zLmFNYXBwaW5ncyA9IG9TZW1hbnRpY09iamVjdEFubm90YXRpb25zLmFNYXBwaW5ncy5jb25jYXQob0VudGl0eUFubm90YXRpb25zW3NBbm5vdGF0aW9uTWFwcGluZ1Rlcm1dKTtcblx0XHRcdG9TZW1hbnRpY09iamVjdEFubm90YXRpb25zLmFVbmF2YWlsYWJsZUFjdGlvbnMgPSBvU2VtYW50aWNPYmplY3RBbm5vdGF0aW9ucy5hVW5hdmFpbGFibGVBY3Rpb25zLmNvbmNhdChcblx0XHRcdFx0b0VudGl0eUFubm90YXRpb25zW3NBbm5vdGF0aW9uQWN0aW9uVGVybV1cblx0XHRcdCk7XG5cblx0XHRcdGJyZWFrO1xuXHRcdH1cblx0fVxuXHRyZXR1cm4gb1NlbWFudGljT2JqZWN0QW5ub3RhdGlvbnM7XG59XG5mdW5jdGlvbiBmblVwZGF0ZVJlbGF0ZWRBcHBzRGV0YWlscyhvT2JqZWN0UGFnZUxheW91dDogYW55KSB7XG5cdGNvbnN0IG9NZXRhTW9kZWwgPSBvT2JqZWN0UGFnZUxheW91dC5nZXRNb2RlbCgpLmdldE1ldGFNb2RlbCgpO1xuXHRjb25zdCBvQmluZGluZ0NvbnRleHQgPSBvT2JqZWN0UGFnZUxheW91dC5nZXRCaW5kaW5nQ29udGV4dCgpO1xuXHRjb25zdCBvUGF0aCA9IG9CaW5kaW5nQ29udGV4dCAmJiBvQmluZGluZ0NvbnRleHQuZ2V0UGF0aCgpO1xuXHRjb25zdCBvTWV0YVBhdGggPSBvTWV0YU1vZGVsLmdldE1ldGFQYXRoKG9QYXRoKTtcblx0Ly8gU2VtYW50aWMgS2V5IFZvY2FidWxhcnlcblx0Y29uc3Qgc1NlbWFudGljS2V5Vm9jYWJ1bGFyeSA9IG9NZXRhUGF0aCArIFwiL1wiICsgXCJAY29tLnNhcC52b2NhYnVsYXJpZXMuQ29tbW9uLnYxLlNlbWFudGljS2V5XCI7XG5cdC8vU2VtYW50aWMgS2V5c1xuXHRjb25zdCBhU2VtS2V5cyA9IG9NZXRhTW9kZWwuZ2V0T2JqZWN0KHNTZW1hbnRpY0tleVZvY2FidWxhcnkpO1xuXHQvLyBVbmF2YWlsYWJsZSBBY3Rpb25zXG5cdGNvbnN0IG9FbnRyeSA9IG9CaW5kaW5nQ29udGV4dC5nZXRPYmplY3QoKTtcblx0aWYgKCFvRW50cnkpIHtcblx0XHRvQmluZGluZ0NvbnRleHRcblx0XHRcdC5yZXF1ZXN0T2JqZWN0KClcblx0XHRcdC50aGVuKGZ1bmN0aW9uKG9FbnRyeTogYW55KSB7XG5cdFx0XHRcdHJldHVybiB1cGRhdGVSZWxhdGVBcHBzTW9kZWwob0JpbmRpbmdDb250ZXh0LCBvRW50cnksIG9PYmplY3RQYWdlTGF5b3V0LCBhU2VtS2V5cywgb01ldGFNb2RlbCwgb01ldGFQYXRoKTtcblx0XHRcdH0pXG5cdFx0XHQuY2F0Y2goZnVuY3Rpb24ob0Vycm9yOiBhbnkpIHtcblx0XHRcdFx0TG9nLmVycm9yKFwiQ2Fubm90IHVwZGF0ZSB0aGUgcmVsYXRlZCBhcHAgZGV0YWlsc1wiLCBvRXJyb3IpO1xuXHRcdFx0fSk7XG5cdH0gZWxzZSB7XG5cdFx0cmV0dXJuIHVwZGF0ZVJlbGF0ZUFwcHNNb2RlbChvQmluZGluZ0NvbnRleHQsIG9FbnRyeSwgb09iamVjdFBhZ2VMYXlvdXQsIGFTZW1LZXlzLCBvTWV0YU1vZGVsLCBvTWV0YVBhdGgpO1xuXHR9XG59XG4vKipcbiAqIEBwYXJhbSBvQnV0dG9uXG4gKi9cbmZ1bmN0aW9uIGZuRmlyZUJ1dHRvblByZXNzKG9CdXR0b246IGFueSkge1xuXHRjb25zdCBhQXV0aG9yaXplZFR5cGVzID0gW1wic2FwLm0uQnV0dG9uXCIsIFwic2FwLm0uT3ZlcmZsb3dUb29sYmFyQnV0dG9uXCJdO1xuXHRpZiAob0J1dHRvbiAmJiBhQXV0aG9yaXplZFR5cGVzLmluZGV4T2Yob0J1dHRvbi5nZXRNZXRhZGF0YSgpLmdldE5hbWUoKSkgIT09IC0xICYmIG9CdXR0b24uZ2V0VmlzaWJsZSgpICYmIG9CdXR0b24uZ2V0RW5hYmxlZCgpKSB7XG5cdFx0b0J1dHRvbi5maXJlUHJlc3MoKTtcblx0fVxufVxuZnVuY3Rpb24gZm5SZXNvbHZlU3RyaW5ndG9Cb29sZWFuKHNWYWx1ZTogYW55KSB7XG5cdGlmIChzVmFsdWUgPT09IFwidHJ1ZVwiIHx8IHNWYWx1ZSA9PT0gdHJ1ZSkge1xuXHRcdHJldHVybiB0cnVlO1xuXHR9IGVsc2Uge1xuXHRcdHJldHVybiBmYWxzZTtcblx0fVxufVxuZnVuY3Rpb24gZ2V0QXBwQ29tcG9uZW50KG9Db250cm9sOiBhbnkpOiBBcHBDb21wb25lbnQge1xuXHRpZiAob0NvbnRyb2wuaXNBKFwic2FwLmZlLmNvcmUuQXBwQ29tcG9uZW50XCIpKSB7XG5cdFx0cmV0dXJuIG9Db250cm9sO1xuXHR9XG5cdGNvbnN0IG9Pd25lciA9IENvbXBvbmVudC5nZXRPd25lckNvbXBvbmVudEZvcihvQ29udHJvbCk7XG5cdGlmICghb093bmVyKSB7XG5cdFx0cmV0dXJuIG9Db250cm9sO1xuXHR9IGVsc2Uge1xuXHRcdHJldHVybiBnZXRBcHBDb21wb25lbnQob093bmVyKTtcblx0fVxufVxuZnVuY3Rpb24gZ2V0VGFyZ2V0VmlldyhvQ29udHJvbDogYW55KSB7XG5cdGlmIChvQ29udHJvbCAmJiBvQ29udHJvbC5pc0EoXCJzYXAudWkuY29yZS5Db21wb25lbnRDb250YWluZXJcIikpIHtcblx0XHRvQ29udHJvbCA9IG9Db250cm9sLmdldENvbXBvbmVudEluc3RhbmNlKCk7XG5cdFx0b0NvbnRyb2wgPSBvQ29udHJvbCAmJiBvQ29udHJvbC5nZXRSb290Q29udHJvbCgpO1xuXHR9XG5cdHdoaWxlIChvQ29udHJvbCAmJiAhKG9Db250cm9sIGluc3RhbmNlb2YgVmlldykpIHtcblx0XHRvQ29udHJvbCA9IG9Db250cm9sLmdldFBhcmVudCgpO1xuXHR9XG5cdHJldHVybiBvQ29udHJvbDtcbn1cbi8qKlxuICogQHBhcmFtIGZuUHJvY2Vzc0Z1bmN0aW9uXG4gKiBAcGFyYW0gZm5DYW5jZWxGdW5jdGlvblxuICogQHBhcmFtIG9Db250ZXh0XG4gKiBAcGFyYW0gb0NvbnRyb2xsZXJcbiAqIEBwYXJhbSBiU2tpcEJpbmRpbmdUb1ZpZXdcbiAqL1xuZnVuY3Rpb24gZm5Qcm9jZXNzRGF0YUxvc3NPckRyYWZ0RGlzY2FyZENvbmZpcm1hdGlvbihcblx0Zm5Qcm9jZXNzRnVuY3Rpb246IGFueSxcblx0Zm5DYW5jZWxGdW5jdGlvbjogYW55LFxuXHRvQ29udGV4dDogYW55LFxuXHRvQ29udHJvbGxlcjogYW55LFxuXHRiU2tpcEJpbmRpbmdUb1ZpZXc/OiBib29sZWFuXG4pIHtcblx0Y29uc3Qgb01vZGVsID0gb0NvbnRleHQuZ2V0TW9kZWwoKTtcblx0bGV0IF9iSXNNb2RpZmllZCA9IGZhbHNlO1xuXHRjb25zdCBkcmFmdERhdGFDb250ZXh0ID0gb01vZGVsLmJpbmRDb250ZXh0KG9Db250ZXh0LmdldFBhdGgoKSArIFwiL0RyYWZ0QWRtaW5pc3RyYXRpdmVEYXRhXCIpLmdldEJvdW5kQ29udGV4dCgpO1xuXG5cdGNvbnN0IGNvbGxhYm9yYXRpb25Db25uZWN0ZWQgPSBpc0Nvbm5lY3RlZChvQ29udHJvbGxlci5nZXRWaWV3KCkpO1xuXHRjb25zdCBwcm9jZXNzRnVuY3Rpb25Gb3JEcmFmdHMgPSAhY29sbGFib3JhdGlvbkNvbm5lY3RlZFxuXHRcdD8gZm5Qcm9jZXNzRnVuY3Rpb25cblx0XHQ6IGZ1bmN0aW9uKC4uLmFyZ3M6IGFueVtdKSB7XG5cdFx0XHRcdGRpc2Nvbm5lY3Qob0NvbnRyb2xsZXIuZ2V0VmlldygpKTtcblx0XHRcdFx0Zm5Qcm9jZXNzRnVuY3Rpb24uYXBwbHkobnVsbCwgLi4uYXJncyk7XG5cdFx0ICB9O1xuXG5cdGlmIChcblx0XHRvQ29udGV4dCAmJlxuXHRcdG9Db250ZXh0LmdldE9iamVjdCgpICYmXG5cdFx0KCFvQ29udGV4dC5nZXRPYmplY3QoKS5EcmFmdEFkbWluaXN0cmF0aXZlRGF0YSB8fCBvQ29udGV4dC5nZXRPYmplY3QoKS5Jc0FjdGl2ZUVudGl0eSA9PT0gdHJ1ZSlcblx0KSB7XG5cdFx0Zm5Qcm9jZXNzRnVuY3Rpb24oKTtcblx0fSBlbHNlIHtcblx0XHRkcmFmdERhdGFDb250ZXh0XG5cdFx0XHQucmVxdWVzdE9iamVjdCgpXG5cdFx0XHQudGhlbihmdW5jdGlvbihkcmFmdEFkbWluRGF0YTogYW55KSB7XG5cdFx0XHRcdGlmIChkcmFmdEFkbWluRGF0YSkge1xuXHRcdFx0XHRcdF9iSXNNb2RpZmllZCA9ICEoZHJhZnRBZG1pbkRhdGEuQ3JlYXRpb25EYXRlVGltZSA9PT0gZHJhZnRBZG1pbkRhdGEuTGFzdENoYW5nZURhdGVUaW1lKTtcblx0XHRcdFx0XHRpZiAoX2JJc01vZGlmaWVkKSB7XG5cdFx0XHRcdFx0XHRwZXJmb3JtQWZ0ZXJEaXNjYXJkb3JLZWVwRHJhZnQocHJvY2Vzc0Z1bmN0aW9uRm9yRHJhZnRzLCBmbkNhbmNlbEZ1bmN0aW9uLCBvQ29udHJvbGxlciwgYlNraXBCaW5kaW5nVG9WaWV3KTtcblx0XHRcdFx0XHR9IGVsc2Uge1xuXHRcdFx0XHRcdFx0cHJvY2Vzc0Z1bmN0aW9uRm9yRHJhZnRzKCk7XG5cdFx0XHRcdFx0fVxuXHRcdFx0XHR9IGVsc2Uge1xuXHRcdFx0XHRcdGZuUHJvY2Vzc0Z1bmN0aW9uKCk7XG5cdFx0XHRcdH1cblx0XHRcdH0pXG5cdFx0XHQuY2F0Y2goZnVuY3Rpb24ob0Vycm9yOiBhbnkpIHtcblx0XHRcdFx0TG9nLmVycm9yKFwiQ2Fubm90IHJldHJpZXZlIGRyYWZ0RGF0YUNvbnRleHQgaW5mb3JtYXRpb25cIiwgb0Vycm9yKTtcblx0XHRcdH0pO1xuXHR9XG59XG5mdW5jdGlvbiBmblByb2Nlc3NEYXRhTG9zc0NvbmZpcm1hdGlvbihmblByb2Nlc3M6IEZ1bmN0aW9uLCBvQ29udHJvbDogYW55LCBwcm9ncmFtbWluZ01vZGVsOiBzdHJpbmcpIHtcblx0Y29uc3QgYlVJRWRpdGFibGUgPSBvQ29udHJvbC5nZXRNb2RlbChcInVpXCIpLmdldFByb3BlcnR5KFwiL2lzRWRpdGFibGVcIiksXG5cdFx0b1Jlc291cmNlQnVuZGxlID0gc2FwLnVpLmdldENvcmUoKS5nZXRMaWJyYXJ5UmVzb3VyY2VCdW5kbGUoXCJzYXAuZmUudGVtcGxhdGVzXCIpIGFzIFJlc291cmNlQnVuZGxlLFxuXHRcdHNXYXJuaW5nTXNnID0gb1Jlc291cmNlQnVuZGxlICYmIG9SZXNvdXJjZUJ1bmRsZS5nZXRUZXh0KFwiVF9DT01NT05fVVRJTFNfTkFWSUdBVElPTl9BV0FZX01TR1wiKSxcblx0XHRzQ29uZmlybUJ1dHRvblR4dCA9IG9SZXNvdXJjZUJ1bmRsZSAmJiBvUmVzb3VyY2VCdW5kbGUuZ2V0VGV4dChcIlRfQ09NTU9OX1VUSUxTX05BVklHQVRJT05fQVdBWV9DT05GSVJNX0JVVFRPTlwiKSxcblx0XHRzQ2FuY2VsQnV0dG9uVHh0ID0gb1Jlc291cmNlQnVuZGxlICYmIG9SZXNvdXJjZUJ1bmRsZS5nZXRUZXh0KFwiVF9DT01NT05fVVRJTFNfTkFWSUdBVElPTl9BV0FZX0NBTkNFTF9CVVRUT05cIik7XG5cblx0aWYgKHByb2dyYW1taW5nTW9kZWwgPT09IFByb2dyYW1taW5nTW9kZWwuU3RpY2t5ICYmIGJVSUVkaXRhYmxlKSB7XG5cdFx0cmV0dXJuIE1lc3NhZ2VCb3gud2FybmluZyhzV2FybmluZ01zZywge1xuXHRcdFx0YWN0aW9uczogW3NDb25maXJtQnV0dG9uVHh0LCBzQ2FuY2VsQnV0dG9uVHh0XSxcblx0XHRcdG9uQ2xvc2U6IGZ1bmN0aW9uKHNBY3Rpb246IGFueSkge1xuXHRcdFx0XHRpZiAoc0FjdGlvbiA9PT0gc0NvbmZpcm1CdXR0b25UeHQpIHtcblx0XHRcdFx0XHRjb25zdCBvSW50ZXJuYWxNb2RlbCA9IG9Db250cm9sICYmIG9Db250cm9sLmdldE1vZGVsKFwiaW50ZXJuYWxcIik7XG5cblx0XHRcdFx0XHRMb2cuaW5mbyhcIk5hdmlnYXRpb24gY29uZmlybWVkLlwiKTtcblx0XHRcdFx0XHRpZiAob0ludGVybmFsTW9kZWwpIHtcblx0XHRcdFx0XHRcdG9JbnRlcm5hbE1vZGVsLnNldFByb3BlcnR5KFwiL3Nlc3Npb25PblwiLCBmYWxzZSk7XG5cdFx0XHRcdFx0fSBlbHNlIHtcblx0XHRcdFx0XHRcdExvZy53YXJuaW5nKFwiTG9jYWwgVUlNb2RlbCBjb3VsZG4ndCBiZSBmb3VuZC5cIik7XG5cdFx0XHRcdFx0fVxuXHRcdFx0XHRcdGZuUHJvY2VzcygpO1xuXHRcdFx0XHR9IGVsc2Uge1xuXHRcdFx0XHRcdExvZy5pbmZvKFwiTmF2aWdhdGlvbiByZWplY3RlZC5cIik7XG5cdFx0XHRcdH1cblx0XHRcdH1cblx0XHR9KTtcblx0fVxuXHRyZXR1cm4gZm5Qcm9jZXNzKCk7XG59XG5mdW5jdGlvbiBpc0ZpZWxkQ29udHJvbFBhdGhJbmFwcGxpY2FibGUoc0ZpZWxkQ29udHJvbFBhdGg6IHN0cmluZywgb0F0dHJpYnV0ZTogYW55KSB7XG5cdGxldCBiSW5hcHBsaWNhYmxlID0gZmFsc2U7XG5cdGNvbnN0IGFQYXJ0cyA9IHNGaWVsZENvbnRyb2xQYXRoLnNwbGl0KFwiL1wiKTtcblx0Ly8gc2Vuc2l0aXZlIGRhdGEgaXMgcmVtb3ZlZCBvbmx5IGlmIHRoZSBwYXRoIGhhcyBhbHJlYWR5IGJlZW4gcmVzb2x2ZWQuXG5cdGlmIChhUGFydHMubGVuZ3RoID4gMSkge1xuXHRcdGJJbmFwcGxpY2FibGUgPSBvQXR0cmlidXRlW2FQYXJ0c1swXV0gJiYgb0F0dHJpYnV0ZVthUGFydHNbMF1dLmhhc093blByb3BlcnR5KGFQYXJ0c1sxXSkgJiYgb0F0dHJpYnV0ZVthUGFydHNbMF1dW2FQYXJ0c1sxXV0gPT09IDA7XG5cdH0gZWxzZSB7XG5cdFx0YkluYXBwbGljYWJsZSA9IG9BdHRyaWJ1dGVbc0ZpZWxkQ29udHJvbFBhdGhdID09PSAwO1xuXHR9XG5cdHJldHVybiBiSW5hcHBsaWNhYmxlO1xufVxuZnVuY3Rpb24gcmVtb3ZlU2Vuc2l0aXZlRGF0YShhQXR0cmlidXRlczogYW55W10sIG9NZXRhTW9kZWw6IE9EYXRhTWV0YU1vZGVsKSB7XG5cdGNvbnN0IGFPdXRBdHRyaWJ1dGVzID0gW107XG5cdGZvciAobGV0IGkgPSAwOyBpIDwgYUF0dHJpYnV0ZXMubGVuZ3RoOyBpKyspIHtcblx0XHRjb25zdCBzRW50aXR5U2V0ID0gYUF0dHJpYnV0ZXNbaV0uZW50aXR5U2V0LFxuXHRcdFx0b0F0dHJpYnV0ZSA9IGFBdHRyaWJ1dGVzW2ldLmNvbnRleHREYXRhO1xuXG5cdFx0ZGVsZXRlIG9BdHRyaWJ1dGVbXCJAb2RhdGEuY29udGV4dFwiXTtcblx0XHRkZWxldGUgb0F0dHJpYnV0ZVtcIiU0MG9kYXRhLmNvbnRleHRcIl07XG5cdFx0ZGVsZXRlIG9BdHRyaWJ1dGVbXCJAb2RhdGEubWV0YWRhdGFFdGFnXCJdO1xuXHRcdGRlbGV0ZSBvQXR0cmlidXRlW1wiJTQwb2RhdGEubWV0YWRhdGFFdGFnXCJdO1xuXHRcdGRlbGV0ZSBvQXR0cmlidXRlW1wiU0FQX19NZXNzYWdlc1wiXTtcblx0XHRjb25zdCBhUHJvcGVydGllcyA9IE9iamVjdC5rZXlzKG9BdHRyaWJ1dGUpO1xuXHRcdGZvciAobGV0IGogPSAwOyBqIDwgYVByb3BlcnRpZXMubGVuZ3RoOyBqKyspIHtcblx0XHRcdGNvbnN0IHNQcm9wID0gYVByb3BlcnRpZXNbal0sXG5cdFx0XHRcdGFQcm9wZXJ0eUFubm90YXRpb25zID0gb01ldGFNb2RlbC5nZXRPYmplY3QoXCIvXCIgKyBzRW50aXR5U2V0ICsgXCIvXCIgKyBzUHJvcCArIFwiQFwiKTtcblx0XHRcdGlmIChhUHJvcGVydHlBbm5vdGF0aW9ucykge1xuXHRcdFx0XHRpZiAoXG5cdFx0XHRcdFx0YVByb3BlcnR5QW5ub3RhdGlvbnNbXCJAY29tLnNhcC52b2NhYnVsYXJpZXMuUGVyc29uYWxEYXRhLnYxLklzUG90ZW50aWFsbHlTZW5zaXRpdmVcIl0gfHxcblx0XHRcdFx0XHRhUHJvcGVydHlBbm5vdGF0aW9uc1tcIkBjb20uc2FwLnZvY2FidWxhcmllcy5VSS52MS5FeGNsdWRlRnJvbU5hdmlnYXRpb25Db250ZXh0XCJdIHx8XG5cdFx0XHRcdFx0YVByb3BlcnR5QW5ub3RhdGlvbnNbXCJAY29tLnNhcC52b2NhYnVsYXJpZXMuQW5hbHl0aWNzLnYxLk1lYXN1cmVcIl1cblx0XHRcdFx0KSB7XG5cdFx0XHRcdFx0ZGVsZXRlIG9BdHRyaWJ1dGVbc1Byb3BdO1xuXHRcdFx0XHR9IGVsc2UgaWYgKGFQcm9wZXJ0eUFubm90YXRpb25zW1wiQGNvbS5zYXAudm9jYWJ1bGFyaWVzLkNvbW1vbi52MS5GaWVsZENvbnRyb2xcIl0pIHtcblx0XHRcdFx0XHRjb25zdCBvRmllbGRDb250cm9sID0gYVByb3BlcnR5QW5ub3RhdGlvbnNbXCJAY29tLnNhcC52b2NhYnVsYXJpZXMuQ29tbW9uLnYxLkZpZWxkQ29udHJvbFwiXTtcblx0XHRcdFx0XHRpZiAob0ZpZWxkQ29udHJvbFtcIiRFbnVtTWVtYmVyXCJdICYmIG9GaWVsZENvbnRyb2xbXCIkRW51bU1lbWJlclwiXS5zcGxpdChcIi9cIilbMV0gPT09IFwiSW5hcHBsaWNhYmxlXCIpIHtcblx0XHRcdFx0XHRcdGRlbGV0ZSBvQXR0cmlidXRlW3NQcm9wXTtcblx0XHRcdFx0XHR9IGVsc2UgaWYgKG9GaWVsZENvbnRyb2xbXCIkUGF0aFwiXSAmJiBDb21tb25VdGlscy5pc0ZpZWxkQ29udHJvbFBhdGhJbmFwcGxpY2FibGUob0ZpZWxkQ29udHJvbFtcIiRQYXRoXCJdLCBvQXR0cmlidXRlKSkge1xuXHRcdFx0XHRcdFx0ZGVsZXRlIG9BdHRyaWJ1dGVbc1Byb3BdO1xuXHRcdFx0XHRcdH1cblx0XHRcdFx0fVxuXHRcdFx0fVxuXHRcdH1cblx0XHRhT3V0QXR0cmlidXRlcy5wdXNoKG9BdHRyaWJ1dGUpO1xuXHR9XG5cblx0cmV0dXJuIGFPdXRBdHRyaWJ1dGVzO1xufVxuZnVuY3Rpb24gX2ZuQ2hlY2tJc01hdGNoKG9PYmplY3Q6IGFueSwgb0tleXNUb0NoZWNrOiBhbnkpIHtcblx0Zm9yIChjb25zdCBzS2V5IGluIG9LZXlzVG9DaGVjaykge1xuXHRcdGlmIChvS2V5c1RvQ2hlY2tbc0tleV0gIT09IG9PYmplY3Rbc0tleV0pIHtcblx0XHRcdHJldHVybiBmYWxzZTtcblx0XHR9XG5cdH1cblx0cmV0dXJuIHRydWU7XG59XG5mdW5jdGlvbiBmbkdldENvbnRleHRQYXRoUHJvcGVydGllcyhvTWV0YU1vZGVsOiBPRGF0YU1ldGFNb2RlbCwgc0NvbnRleHRQYXRoOiBzdHJpbmcsIG9GaWx0ZXI/OiBvYmplY3QpIHtcblx0Y29uc3Qgb0VudGl0eVR5cGUgPSBvTWV0YU1vZGVsLmdldE9iamVjdChzQ29udGV4dFBhdGggKyBcIi9cIikgfHwge30sXG5cdFx0b1Byb3BlcnRpZXM6IGFueSA9IHt9O1xuXG5cdGZvciAoY29uc3Qgc0tleSBpbiBvRW50aXR5VHlwZSkge1xuXHRcdGlmIChcblx0XHRcdG9FbnRpdHlUeXBlLmhhc093blByb3BlcnR5KHNLZXkpICYmXG5cdFx0XHQhL15cXCQvaS50ZXN0KHNLZXkpICYmXG5cdFx0XHRvRW50aXR5VHlwZVtzS2V5XS4ka2luZCAmJlxuXHRcdFx0X2ZuQ2hlY2tJc01hdGNoKG9FbnRpdHlUeXBlW3NLZXldLCBvRmlsdGVyIHx8IHsgJGtpbmQ6IFwiUHJvcGVydHlcIiB9KVxuXHRcdCkge1xuXHRcdFx0b1Byb3BlcnRpZXNbc0tleV0gPSBvRW50aXR5VHlwZVtzS2V5XTtcblx0XHR9XG5cdH1cblx0cmV0dXJuIG9Qcm9wZXJ0aWVzO1xufVxuZnVuY3Rpb24gZm5HZXRNYW5kYXRvcnlGaWx0ZXJGaWVsZHMob01ldGFNb2RlbDogT0RhdGFNZXRhTW9kZWwsIHNDb250ZXh0UGF0aDogc3RyaW5nKSB7XG5cdGxldCBhTWFuZGF0b3J5RmlsdGVyRmllbGRzO1xuXHRpZiAob01ldGFNb2RlbCAmJiBzQ29udGV4dFBhdGgpIHtcblx0XHRhTWFuZGF0b3J5RmlsdGVyRmllbGRzID0gb01ldGFNb2RlbC5nZXRPYmplY3Qoc0NvbnRleHRQYXRoICsgXCJAT3JnLk9EYXRhLkNhcGFiaWxpdGllcy5WMS5GaWx0ZXJSZXN0cmljdGlvbnMvUmVxdWlyZWRQcm9wZXJ0aWVzXCIpO1xuXHR9XG5cdHJldHVybiBhTWFuZGF0b3J5RmlsdGVyRmllbGRzO1xufVxuZnVuY3Rpb24gZm5HZXRJQk5BY3Rpb25zKG9Db250cm9sOiBhbnksIGFJQk5BY3Rpb25zOiBhbnlbXSkge1xuXHRjb25zdCBhQWN0aW9ucyA9IG9Db250cm9sICYmIG9Db250cm9sLmdldEFjdGlvbnMoKTtcblx0aWYgKGFBY3Rpb25zKSB7XG5cdFx0YUFjdGlvbnMuZm9yRWFjaChmdW5jdGlvbihvQWN0aW9uOiBhbnkpIHtcblx0XHRcdGlmIChvQWN0aW9uLmlzQShcInNhcC51aS5tZGMuYWN0aW9udG9vbGJhci5BY3Rpb25Ub29sYmFyQWN0aW9uXCIpKSB7XG5cdFx0XHRcdG9BY3Rpb24gPSBvQWN0aW9uLmdldEFjdGlvbigpO1xuXHRcdFx0fVxuXHRcdFx0aWYgKG9BY3Rpb24uZGF0YShcIklCTkRhdGFcIikpIHtcblx0XHRcdFx0YUlCTkFjdGlvbnMucHVzaChvQWN0aW9uKTtcblx0XHRcdH1cblx0XHR9KTtcblx0fVxuXHRyZXR1cm4gYUlCTkFjdGlvbnM7XG59XG4vKipcbiAqIEBwYXJhbSBhSUJOQWN0aW9uc1xuICogQHBhcmFtIG9WaWV3XG4gKi9cbmZ1bmN0aW9uIGZuVXBkYXRlRGF0YUZpZWxkRm9ySUJOQnV0dG9uc1Zpc2liaWxpdHkoYUlCTkFjdGlvbnM6IGFueVtdLCBvVmlldzogVmlldykge1xuXHRjb25zdCBvUGFyYW1zOiBhbnkgPSB7fTtcblx0Y29uc3QgZm5HZXRMaW5rcyA9IGZ1bmN0aW9uKG9EYXRhPzogYW55KSB7XG5cdFx0aWYgKG9EYXRhKSB7XG5cdFx0XHRjb25zdCBhS2V5cyA9IE9iamVjdC5rZXlzKG9EYXRhKTtcblx0XHRcdGFLZXlzLmZvckVhY2goZnVuY3Rpb24oc0tleTogc3RyaW5nKSB7XG5cdFx0XHRcdGlmIChzS2V5LmluZGV4T2YoXCJfXCIpICE9PSAwICYmIHNLZXkuaW5kZXhPZihcIm9kYXRhLmNvbnRleHRcIikgPT09IC0xKSB7XG5cdFx0XHRcdFx0b1BhcmFtc1tzS2V5XSA9IHsgdmFsdWU6IG9EYXRhW3NLZXldIH07XG5cdFx0XHRcdH1cblx0XHRcdH0pO1xuXHRcdH1cblx0XHRpZiAoYUlCTkFjdGlvbnMubGVuZ3RoKSB7XG5cdFx0XHRhSUJOQWN0aW9ucy5mb3JFYWNoKGZ1bmN0aW9uKG9JQk5BY3Rpb246IGFueSkge1xuXHRcdFx0XHRjb25zdCBzU2VtYW50aWNPYmplY3QgPSBvSUJOQWN0aW9uLmRhdGEoXCJJQk5EYXRhXCIpLnNlbWFudGljT2JqZWN0O1xuXHRcdFx0XHRjb25zdCBzQWN0aW9uID0gb0lCTkFjdGlvbi5kYXRhKFwiSUJORGF0YVwiKS5hY3Rpb247XG5cdFx0XHRcdENvbW1vblV0aWxzLmdldFNoZWxsU2VydmljZXMob1ZpZXcpXG5cdFx0XHRcdFx0LmdldExpbmtzKHtcblx0XHRcdFx0XHRcdHNlbWFudGljT2JqZWN0OiBzU2VtYW50aWNPYmplY3QsXG5cdFx0XHRcdFx0XHRhY3Rpb246IHNBY3Rpb24sXG5cdFx0XHRcdFx0XHRwYXJhbXM6IG9QYXJhbXNcblx0XHRcdFx0XHR9KVxuXHRcdFx0XHRcdC50aGVuKGZ1bmN0aW9uKGFMaW5rOiBhbnkpIHtcblx0XHRcdFx0XHRcdG9JQk5BY3Rpb24uc2V0VmlzaWJsZShvSUJOQWN0aW9uLmdldFZpc2libGUoKSAmJiBhTGluayAmJiBhTGluay5sZW5ndGggPT09IDEpO1xuXHRcdFx0XHRcdH0pXG5cdFx0XHRcdFx0LmNhdGNoKGZ1bmN0aW9uKG9FcnJvcjogYW55KSB7XG5cdFx0XHRcdFx0XHRMb2cuZXJyb3IoXCJDYW5ub3QgcmV0cmlldmUgdGhlIGxpbmtzIGZyb20gdGhlIHNoZWxsIHNlcnZpY2VcIiwgb0Vycm9yKTtcblx0XHRcdFx0XHR9KTtcblx0XHRcdH0pO1xuXHRcdH1cblx0fTtcblx0aWYgKG9WaWV3ICYmIG9WaWV3LmdldEJpbmRpbmdDb250ZXh0KCkpIHtcblx0XHQob1ZpZXcuZ2V0QmluZGluZ0NvbnRleHQoKSBhcyBhbnkpXG5cdFx0XHQ/LnJlcXVlc3RPYmplY3QoKVxuXHRcdFx0LnRoZW4oZnVuY3Rpb24ob0RhdGE6IGFueSkge1xuXHRcdFx0XHRyZXR1cm4gZm5HZXRMaW5rcyhvRGF0YSk7XG5cdFx0XHR9KVxuXHRcdFx0LmNhdGNoKGZ1bmN0aW9uKG9FcnJvcjogYW55KSB7XG5cdFx0XHRcdExvZy5lcnJvcihcIkNhbm5vdCByZXRyaWV2ZSB0aGUgbGlua3MgZnJvbSB0aGUgc2hlbGwgc2VydmljZVwiLCBvRXJyb3IpO1xuXHRcdFx0fSk7XG5cdH0gZWxzZSB7XG5cdFx0Zm5HZXRMaW5rcygpO1xuXHR9XG59XG5mdW5jdGlvbiBnZXRUcmFuc2xhdGVkVGV4dChzRnJhbWV3b3JrS2V5OiBzdHJpbmcsIG9SZXNvdXJjZUJ1bmRsZTogUmVzb3VyY2VCdW5kbGUsIG9QYXJhbXM/OiBhbnksIHNFbnRpdHlTZXROYW1lPzogc3RyaW5nKSB7XG5cdGxldCBzUmVzb3VyY2VLZXkgPSBzRnJhbWV3b3JrS2V5O1xuXHRpZiAob1Jlc291cmNlQnVuZGxlKSB7XG5cdFx0aWYgKHNFbnRpdHlTZXROYW1lKSB7XG5cdFx0XHQvLyBUaGVyZSBhcmUgY29uc29sZSBlcnJvcnMgbG9nZ2VkIHdoZW4gbWFraW5nIGNhbGxzIHRvIGdldFRleHQgZm9yIGtleXMgdGhhdCBhcmUgbm90IGRlZmluZWQgaW4gdGhlIHJlc291cmNlIGJ1bmRsZVxuXHRcdFx0Ly8gZm9yIGluc3RhbmNlIGtleXMgd2hpY2ggYXJlIHN1cHBvc2VkIHRvIGJlIHByb3ZpZGVkIGJ5IHRoZSBhcHBsaWNhdGlvbiwgZS5nLCA8a2V5Pnw8ZW50aXR5U2V0PiB0byBvdmVycmlkZSBpbnN0YW5jZSBzcGVjaWZpYyB0ZXh0XG5cdFx0XHQvLyBoZW5jZSBjaGVjayBpZiB0ZXh0IGV4aXN0cyAodXNpbmcgXCJoYXNUZXh0XCIpIGluIHRoZSByZXNvdXJjZSBidW5kbGUgYmVmb3JlIGNhbGxpbmcgXCJnZXRUZXh0XCJcblxuXHRcdFx0Ly8gXCJoYXNUZXh0XCIgb25seSBjaGVja3MgZm9yIHRoZSBrZXkgaW4gdGhlIGltbWVkaWF0ZSByZXNvdXJjZSBidW5kbGUgYW5kIG5vdCBpdCdzIGN1c3RvbSBidW5kbGVzXG5cdFx0XHQvLyBoZW5jZSB3ZSBuZWVkIHRvIGRvIHRoaXMgcmVjdXJyc2l2ZWx5IHRvIGNoZWNrIGlmIHRoZSBrZXkgZXhpc3RzIGluIGFueSBvZiB0aGUgYnVuZGxlcyB0aGUgZm9ybXMgdGhlIEZFIHJlc291cmNlIGJ1bmRsZVxuXHRcdFx0Y29uc3QgYlJlc291cmNlS2V5RXhpc3RzID0gX2NoZWNrSWZSZXNvdXJjZUtleUV4aXN0cyhcblx0XHRcdFx0KG9SZXNvdXJjZUJ1bmRsZSBhcyBhbnkpLmFDdXN0b21CdW5kbGVzLFxuXHRcdFx0XHRzRnJhbWV3b3JrS2V5ICsgXCJ8XCIgKyBzRW50aXR5U2V0TmFtZVxuXHRcdFx0KTtcblxuXHRcdFx0Ly8gaWYgcmVzb3VyY2Uga2V5IHdpdGggZW50aXR5IHNldCBuYW1lIGZvciBpbnN0YW5jZSBzcGVjaWZpYyB0ZXh0IG92ZXJyaWRpbmcgaXMgcHJvdmlkZWQgYnkgdGhlIGFwcGxpY2F0aW9uXG5cdFx0XHQvLyB0aGVuIHVzZSB0aGUgc2FtZSBrZXkgb3RoZXJ3aXNlIHVzZSB0aGUgRnJhbWV3b3JrIGtleVxuXHRcdFx0c1Jlc291cmNlS2V5ID0gYlJlc291cmNlS2V5RXhpc3RzID8gc0ZyYW1ld29ya0tleSArIFwifFwiICsgc0VudGl0eVNldE5hbWUgOiBzRnJhbWV3b3JrS2V5O1xuXHRcdH1cblx0XHRyZXR1cm4gb1Jlc291cmNlQnVuZGxlLmdldFRleHQoc1Jlc291cmNlS2V5LCBvUGFyYW1zKTtcblx0fVxuXG5cdC8vIGRvIG5vdCBhbGxvdyBvdmVycmlkZSBzbyBnZXQgdGV4dCBmcm9tIHRoZSBpbnRlcm5hbCBidW5kbGUgZGlyZWN0bHlcblx0b1Jlc291cmNlQnVuZGxlID0gc2FwLnVpLmdldENvcmUoKS5nZXRMaWJyYXJ5UmVzb3VyY2VCdW5kbGUoXCJzYXAuZmUuY29yZVwiKSBhcyBSZXNvdXJjZUJ1bmRsZTtcblx0cmV0dXJuIG9SZXNvdXJjZUJ1bmRsZS5nZXRUZXh0KHNSZXNvdXJjZUtleSwgb1BhcmFtcyk7XG59XG5mdW5jdGlvbiBfY2hlY2tJZlJlc291cmNlS2V5RXhpc3RzKGFDdXN0b21CdW5kbGVzOiBhbnksIHNLZXk6IGFueSkge1xuXHRpZiAoYUN1c3RvbUJ1bmRsZXMubGVuZ3RoKSB7XG5cdFx0Zm9yIChsZXQgaSA9IGFDdXN0b21CdW5kbGVzLmxlbmd0aCAtIDE7IGkgPj0gMDsgaS0tKSB7XG5cdFx0XHRjb25zdCBzVmFsdWUgPSBhQ3VzdG9tQnVuZGxlc1tpXS5oYXNUZXh0KHNLZXkpO1xuXHRcdFx0Ly8gdGV4dCBmb3VuZCByZXR1cm4gdHJ1ZVxuXHRcdFx0aWYgKHNWYWx1ZSkge1xuXHRcdFx0XHRyZXR1cm4gdHJ1ZTtcblx0XHRcdH1cblx0XHRcdF9jaGVja0lmUmVzb3VyY2VLZXlFeGlzdHMoYUN1c3RvbUJ1bmRsZXNbaV0uYUN1c3RvbUJ1bmRsZXMsIHNLZXkpO1xuXHRcdH1cblx0fVxuXHRyZXR1cm4gZmFsc2U7XG59XG5mdW5jdGlvbiBnZXRBY3Rpb25QYXRoKG9BY3Rpb246IGFueSwgYlJldHVybk9ubHlQYXRoOiBib29sZWFuLCBzQWN0aW9uTmFtZT86IHN0cmluZywgYkNoZWNrU3RhdGljVmFsdWU/OiBib29sZWFuKSB7XG5cdHNBY3Rpb25OYW1lID0gIXNBY3Rpb25OYW1lID8gb0FjdGlvbi5nZXRPYmplY3Qob0FjdGlvbi5nZXRQYXRoKCkpIDogc0FjdGlvbk5hbWU7XG5cdGxldCBzQ29udGV4dFBhdGggPSBvQWN0aW9uLmdldFBhdGgoKS5zcGxpdChcIi9AXCIpWzBdO1xuXHRjb25zdCBzRW50aXR5VHlwZU5hbWUgPSBvQWN0aW9uLmdldE9iamVjdChzQ29udGV4dFBhdGgpLiRUeXBlO1xuXHRjb25zdCBzRW50aXR5TmFtZSA9IGdldEVudGl0eVNldE5hbWUob0FjdGlvbi5nZXRNb2RlbCgpLCBzRW50aXR5VHlwZU5hbWUpO1xuXHRpZiAoc0VudGl0eU5hbWUpIHtcblx0XHRzQ29udGV4dFBhdGggPSBcIi9cIiArIHNFbnRpdHlOYW1lO1xuXHR9XG5cdGlmIChiQ2hlY2tTdGF0aWNWYWx1ZSkge1xuXHRcdHJldHVybiBvQWN0aW9uLmdldE9iamVjdChzQ29udGV4dFBhdGggKyBcIi9cIiArIHNBY3Rpb25OYW1lICsgXCJAT3JnLk9EYXRhLkNvcmUuVjEuT3BlcmF0aW9uQXZhaWxhYmxlXCIpO1xuXHR9XG5cdGlmIChiUmV0dXJuT25seVBhdGgpIHtcblx0XHRyZXR1cm4gc0NvbnRleHRQYXRoICsgXCIvXCIgKyBzQWN0aW9uTmFtZTtcblx0fSBlbHNlIHtcblx0XHRyZXR1cm4ge1xuXHRcdFx0c0NvbnRleHRQYXRoOiBzQ29udGV4dFBhdGgsXG5cdFx0XHRzUHJvcGVydHk6IG9BY3Rpb24uZ2V0T2JqZWN0KHNDb250ZXh0UGF0aCArIFwiL1wiICsgc0FjdGlvbk5hbWUgKyBcIkBPcmcuT0RhdGEuQ29yZS5WMS5PcGVyYXRpb25BdmFpbGFibGUvJFBhdGhcIiksXG5cdFx0XHRzQmluZGluZ1BhcmFtZXRlcjogb0FjdGlvbi5nZXRPYmplY3Qoc0NvbnRleHRQYXRoICsgXCIvXCIgKyBzQWN0aW9uTmFtZSArIFwiL0AkdWk1Lm92ZXJsb2FkLzAvJFBhcmFtZXRlci8wLyROYW1lXCIpXG5cdFx0fTtcblx0fVxufVxuZnVuY3Rpb24gZ2V0RW50aXR5U2V0TmFtZShvTWV0YU1vZGVsOiBhbnksIHNFbnRpdHlUeXBlOiBhbnkpIHtcblx0Y29uc3Qgb0VudGl0eUNvbnRhaW5lciA9IG9NZXRhTW9kZWwuZ2V0T2JqZWN0KFwiL1wiKTtcblx0Zm9yIChjb25zdCBrZXkgaW4gb0VudGl0eUNvbnRhaW5lcikge1xuXHRcdGlmICh0eXBlb2Ygb0VudGl0eUNvbnRhaW5lcltrZXldID09PSBcIm9iamVjdFwiICYmIG9FbnRpdHlDb250YWluZXJba2V5XS4kVHlwZSA9PT0gc0VudGl0eVR5cGUpIHtcblx0XHRcdHJldHVybiBrZXk7XG5cdFx0fVxuXHR9XG59XG5mdW5jdGlvbiBjb21wdXRlRGlzcGxheU1vZGUob1Byb3BlcnR5QW5ub3RhdGlvbnM6IGFueSwgb0NvbGxlY3Rpb25Bbm5vdGF0aW9ucz86IGFueSkge1xuXHRjb25zdCBvVGV4dEFubm90YXRpb24gPSBvUHJvcGVydHlBbm5vdGF0aW9uc1tcIkBjb20uc2FwLnZvY2FidWxhcmllcy5Db21tb24udjEuVGV4dFwiXSxcblx0XHRvVGV4dEFycmFuZ2VtZW50QW5ub3RhdGlvbiA9XG5cdFx0XHRvVGV4dEFubm90YXRpb24gJiZcblx0XHRcdCgob1Byb3BlcnR5QW5ub3RhdGlvbnMgJiZcblx0XHRcdFx0b1Byb3BlcnR5QW5ub3RhdGlvbnNbXCJAY29tLnNhcC52b2NhYnVsYXJpZXMuQ29tbW9uLnYxLlRleHRAY29tLnNhcC52b2NhYnVsYXJpZXMuVUkudjEuVGV4dEFycmFuZ2VtZW50XCJdKSB8fFxuXHRcdFx0XHQob0NvbGxlY3Rpb25Bbm5vdGF0aW9ucyAmJiBvQ29sbGVjdGlvbkFubm90YXRpb25zW1wiQGNvbS5zYXAudm9jYWJ1bGFyaWVzLlVJLnYxLlRleHRBcnJhbmdlbWVudFwiXSkpO1xuXG5cdGlmIChvVGV4dEFycmFuZ2VtZW50QW5ub3RhdGlvbikge1xuXHRcdGlmIChvVGV4dEFycmFuZ2VtZW50QW5ub3RhdGlvbi4kRW51bU1lbWJlciA9PT0gXCJjb20uc2FwLnZvY2FidWxhcmllcy5VSS52MS5UZXh0QXJyYW5nZW1lbnRUeXBlL1RleHRPbmx5XCIpIHtcblx0XHRcdHJldHVybiBcIkRlc2NyaXB0aW9uXCI7XG5cdFx0fSBlbHNlIGlmIChvVGV4dEFycmFuZ2VtZW50QW5ub3RhdGlvbi4kRW51bU1lbWJlciA9PT0gXCJjb20uc2FwLnZvY2FidWxhcmllcy5VSS52MS5UZXh0QXJyYW5nZW1lbnRUeXBlL1RleHRMYXN0XCIpIHtcblx0XHRcdHJldHVybiBcIlZhbHVlRGVzY3JpcHRpb25cIjtcblx0XHR9IGVsc2UgaWYgKG9UZXh0QXJyYW5nZW1lbnRBbm5vdGF0aW9uLiRFbnVtTWVtYmVyID09PSBcImNvbS5zYXAudm9jYWJ1bGFyaWVzLlVJLnYxLlRleHRBcnJhbmdlbWVudFR5cGUvVGV4dFNlcGFyYXRlXCIpIHtcblx0XHRcdHJldHVybiBcIlZhbHVlXCI7XG5cdFx0fVxuXHRcdC8vRGVmYXVsdCBzaG91bGQgYmUgVGV4dEZpcnN0IGlmIHRoZXJlIGlzIGEgVGV4dCBhbm5vdGF0aW9uIGFuZCBuZWl0aGVyIFRleHRPbmx5IG5vciBUZXh0TGFzdCBhcmUgc2V0XG5cdFx0cmV0dXJuIFwiRGVzY3JpcHRpb25WYWx1ZVwiO1xuXHR9XG5cdHJldHVybiBvVGV4dEFubm90YXRpb24gPyBcIkRlc2NyaXB0aW9uVmFsdWVcIiA6IFwiVmFsdWVcIjtcbn1cbmZ1bmN0aW9uIF9nZXRFbnRpdHlUeXBlKG9Db250ZXh0OiBhbnkpIHtcblx0Y29uc3Qgb01ldGFNb2RlbCA9IG9Db250ZXh0LmdldE1vZGVsKCkuZ2V0TWV0YU1vZGVsKCk7XG5cdHJldHVybiBvTWV0YU1vZGVsLmdldE9iamVjdChvTWV0YU1vZGVsLmdldE1ldGFQYXRoKG9Db250ZXh0LmdldFBhdGgoKSkgKyBcIi8kVHlwZVwiKTtcbn1cbmZ1bmN0aW9uIF9yZXF1ZXN0T2JqZWN0KHNBY3Rpb246IGFueSwgb1NlbGVjdGVkQ29udGV4dDogYW55LCBzUHJvcGVydHk6IGFueSkge1xuXHRsZXQgb0NvbnRleHQgPSBvU2VsZWN0ZWRDb250ZXh0O1xuXHRjb25zdCBuQnJhY2tldEluZGV4ID0gc0FjdGlvbi5pbmRleE9mKFwiKFwiKTtcblxuXHRpZiAobkJyYWNrZXRJbmRleCA+IC0xKSB7XG5cdFx0Y29uc3Qgc1RhcmdldFR5cGUgPSBzQWN0aW9uLnNsaWNlKG5CcmFja2V0SW5kZXggKyAxLCAtMSk7XG5cdFx0bGV0IHNDdXJyZW50VHlwZSA9IF9nZXRFbnRpdHlUeXBlKG9Db250ZXh0KTtcblxuXHRcdHdoaWxlIChzQ3VycmVudFR5cGUgIT09IHNUYXJnZXRUeXBlKSB7XG5cdFx0XHQvLyBGaW5kIHBhcmVudCBiaW5kaW5nIGNvbnRleHQgYW5kIHJldHJpZXZlIGVudGl0eSB0eXBlXG5cdFx0XHRvQ29udGV4dCA9IG9Db250ZXh0LmdldEJpbmRpbmcoKS5nZXRDb250ZXh0KCk7XG5cdFx0XHRpZiAob0NvbnRleHQpIHtcblx0XHRcdFx0c0N1cnJlbnRUeXBlID0gX2dldEVudGl0eVR5cGUob0NvbnRleHQpO1xuXHRcdFx0fSBlbHNlIHtcblx0XHRcdFx0TG9nLndhcm5pbmcoXCJDYW5ub3QgZGV0ZXJtaW5lIHRhcmdldCB0eXBlIHRvIHJlcXVlc3QgcHJvcGVydHkgdmFsdWUgZm9yIGJvdW5kIGFjdGlvbiBpbnZvY2F0aW9uXCIpO1xuXHRcdFx0XHRyZXR1cm4gUHJvbWlzZS5yZXNvbHZlKHVuZGVmaW5lZCk7XG5cdFx0XHR9XG5cdFx0fVxuXHR9XG5cblx0cmV0dXJuIG9Db250ZXh0LnJlcXVlc3RPYmplY3Qoc1Byb3BlcnR5KTtcbn1cbmZ1bmN0aW9uIF9yZXF1ZXN0UHJvcGVydHkob1NlbGVjdGVkQ29udGV4dDogYW55LCBzQWN0aW9uOiBhbnksIHNQcm9wZXJ0eTogYW55LCBzRHluYW1pY0FjdGlvbkVuYWJsZWRQYXRoOiBhbnkpIHtcblx0Y29uc3Qgb1Byb21pc2UgPVxuXHRcdHNQcm9wZXJ0eSAmJiBzUHJvcGVydHkuaW5kZXhPZihcIi9cIikgPT09IDBcblx0XHRcdD8gcmVxdWVzdFNpbmdsZXRvblByb3BlcnR5KHNQcm9wZXJ0eSwgb1NlbGVjdGVkQ29udGV4dC5nZXRNb2RlbCgpKVxuXHRcdFx0OiBfcmVxdWVzdE9iamVjdChzQWN0aW9uLCBvU2VsZWN0ZWRDb250ZXh0LCBzUHJvcGVydHkpO1xuXG5cdHJldHVybiBvUHJvbWlzZS50aGVuKGZ1bmN0aW9uKHZQcm9wZXJ0eVZhbHVlOiBhbnkpIHtcblx0XHRyZXR1cm4gUHJvbWlzZS5yZXNvbHZlKHtcblx0XHRcdHZQcm9wZXJ0eVZhbHVlOiB2UHJvcGVydHlWYWx1ZSxcblx0XHRcdG9TZWxlY3RlZENvbnRleHQ6IG9TZWxlY3RlZENvbnRleHQsXG5cdFx0XHRzQWN0aW9uOiBzQWN0aW9uLFxuXHRcdFx0c0R5bmFtaWNBY3Rpb25FbmFibGVkUGF0aDogc0R5bmFtaWNBY3Rpb25FbmFibGVkUGF0aFxuXHRcdH0pO1xuXHR9KTtcbn1cbmZ1bmN0aW9uIF9zZXRDb250ZXh0c0Jhc2VkT25PcGVyYXRpb25BdmFpbGFibGUob0ludGVybmFsTW9kZWxDb250ZXh0OiBhbnksIGFSZXF1ZXN0UHJvbWlzZXM6IGFueSkge1xuXHRyZXR1cm4gUHJvbWlzZS5hbGwoYVJlcXVlc3RQcm9taXNlcylcblx0XHQudGhlbihmdW5jdGlvbihhUmVzdWx0czogYW55W10pIHtcblx0XHRcdGlmIChhUmVzdWx0cy5sZW5ndGgpIHtcblx0XHRcdFx0Y29uc3QgYUFwcGxpY2FibGVDb250ZXh0czogYW55W10gPSBbXSxcblx0XHRcdFx0XHRhTm90QXBwbGljYWJsZUNvbnRleHRzOiBhbnlbXSA9IFtdO1xuXHRcdFx0XHRhUmVzdWx0cy5mb3JFYWNoKGZ1bmN0aW9uKGFSZXN1bHQ6IGFueSkge1xuXHRcdFx0XHRcdGlmIChhUmVzdWx0KSB7XG5cdFx0XHRcdFx0XHRpZiAoYVJlc3VsdC52UHJvcGVydHlWYWx1ZSkge1xuXHRcdFx0XHRcdFx0XHRvSW50ZXJuYWxNb2RlbENvbnRleHQuZ2V0TW9kZWwoKS5zZXRQcm9wZXJ0eShhUmVzdWx0LnNEeW5hbWljQWN0aW9uRW5hYmxlZFBhdGgsIHRydWUpO1xuXHRcdFx0XHRcdFx0XHRhQXBwbGljYWJsZUNvbnRleHRzLnB1c2goYVJlc3VsdC5vU2VsZWN0ZWRDb250ZXh0KTtcblx0XHRcdFx0XHRcdH0gZWxzZSB7XG5cdFx0XHRcdFx0XHRcdGFOb3RBcHBsaWNhYmxlQ29udGV4dHMucHVzaChhUmVzdWx0Lm9TZWxlY3RlZENvbnRleHQpO1xuXHRcdFx0XHRcdFx0fVxuXHRcdFx0XHRcdH1cblx0XHRcdFx0fSk7XG5cdFx0XHRcdF9zZXREeW5hbWljQWN0aW9uQ29udGV4dHMob0ludGVybmFsTW9kZWxDb250ZXh0LCBhUmVzdWx0c1swXS5zQWN0aW9uLCBhQXBwbGljYWJsZUNvbnRleHRzLCBhTm90QXBwbGljYWJsZUNvbnRleHRzKTtcblx0XHRcdH1cblx0XHR9KVxuXHRcdC5jYXRjaChmdW5jdGlvbihvRXJyb3I6IGFueSkge1xuXHRcdFx0TG9nLnRyYWNlKFwiQ2Fubm90IHJldHJpZXZlIHByb3BlcnR5IHZhbHVlIGZyb20gcGF0aFwiLCBvRXJyb3IpO1xuXHRcdH0pO1xufVxuLyoqXG4gKiBAcGFyYW0gb0ludGVybmFsTW9kZWxDb250ZXh0XG4gKiBAcGFyYW0gc0FjdGlvblxuICogQHBhcmFtIGFBcHBsaWNhYmxlXG4gKiBAcGFyYW0gYU5vdEFwcGxpY2FibGVcbiAqL1xuZnVuY3Rpb24gX3NldER5bmFtaWNBY3Rpb25Db250ZXh0cyhvSW50ZXJuYWxNb2RlbENvbnRleHQ6IGFueSwgc0FjdGlvbjogYW55LCBhQXBwbGljYWJsZTogYW55LCBhTm90QXBwbGljYWJsZTogYW55KSB7XG5cdGNvbnN0IHNEeW5hbWljQWN0aW9uUGF0aFByZWZpeCA9IG9JbnRlcm5hbE1vZGVsQ29udGV4dC5nZXRQYXRoKCkgKyBcIi9keW5hbWljQWN0aW9ucy9cIiArIHNBY3Rpb24sXG5cdFx0b0ludGVybmFsTW9kZWwgPSBvSW50ZXJuYWxNb2RlbENvbnRleHQuZ2V0TW9kZWwoKTtcblx0b0ludGVybmFsTW9kZWwuc2V0UHJvcGVydHkoc0R5bmFtaWNBY3Rpb25QYXRoUHJlZml4ICsgXCIvYUFwcGxpY2FibGVcIiwgYUFwcGxpY2FibGUpO1xuXHRvSW50ZXJuYWxNb2RlbC5zZXRQcm9wZXJ0eShzRHluYW1pY0FjdGlvblBhdGhQcmVmaXggKyBcIi9hTm90QXBwbGljYWJsZVwiLCBhTm90QXBwbGljYWJsZSk7XG59XG5mdW5jdGlvbiBzZXRBY3Rpb25FbmFibGVtZW50KG9JbnRlcm5hbE1vZGVsQ29udGV4dDogYW55LCBvQWN0aW9uT3BlcmF0aW9uQXZhaWxhYmxlTWFwOiBhbnksIGFTZWxlY3RlZENvbnRleHRzOiBhbnkpIHtcblx0Y29uc3QgYVByb21pc2VzID0gW107XG5cdGZvciAoY29uc3Qgc0FjdGlvbiBpbiBvQWN0aW9uT3BlcmF0aW9uQXZhaWxhYmxlTWFwKSB7XG5cdFx0Ly8gUmVzZXQgYWxsIHByb3BlcnRpZXMgYmVmb3JlIGNvbXB1dGF0aW9uXG5cdFx0b0ludGVybmFsTW9kZWxDb250ZXh0LnNldFByb3BlcnR5KFwiZHluYW1pY0FjdGlvbnMvXCIgKyBzQWN0aW9uLCB7XG5cdFx0XHRiRW5hYmxlZDogZmFsc2UsXG5cdFx0XHRhQXBwbGljYWJsZTogW10sXG5cdFx0XHRhTm90QXBwbGljYWJsZTogW11cblx0XHR9KTtcblx0XHQvLyBOb3RlIHRoYXQgbm9uIGR5bmFtaWMgYWN0aW9ucyBhcmUgbm90IHByb2Nlc3NlZCBoZXJlLiBUaGV5IGFyZSBlbmFibGVkIGJlY2F1c2Vcblx0XHQvLyBvbmUgb3IgbW9yZSBhcmUgc2VsZWN0ZWQgYW5kIHRoZSBzZWNvbmQgcGFydCBvZiB0aGUgY29uZGl0aW9uIGluIHRoZSB0ZW1wbGF0aW5nXG5cdFx0Ly8gaXMgdGhlbiB1bmRlZmluZWQgYW5kIHRodXMgdGhlIGJ1dHRvbiB0YWtlcyB0aGUgZGVmYXVsdCBlbmFibGluZywgd2hpY2ggaXMgdHJ1ZSFcblx0XHRjb25zdCBhQXBwbGljYWJsZSA9IFtdLFxuXHRcdFx0YU5vdEFwcGxpY2FibGUgPSBbXSxcblx0XHRcdHNQcm9wZXJ0eSA9IG9BY3Rpb25PcGVyYXRpb25BdmFpbGFibGVNYXBbc0FjdGlvbl0sXG5cdFx0XHRzRHluYW1pY0FjdGlvbkVuYWJsZWRQYXRoID0gb0ludGVybmFsTW9kZWxDb250ZXh0LmdldFBhdGgoKSArIFwiL2R5bmFtaWNBY3Rpb25zL1wiICsgc0FjdGlvbiArIFwiL2JFbmFibGVkXCI7XG5cblx0XHRpZiAodHlwZW9mIHNQcm9wZXJ0eSA9PT0gXCJvYmplY3RcIiAmJiBzUHJvcGVydHkgIT09IG51bGwgJiYgc1Byb3BlcnR5ICE9PSB1bmRlZmluZWQpIHtcblx0XHRcdGZvciAobGV0IGkgPSAwOyBpIDwgYVNlbGVjdGVkQ29udGV4dHMubGVuZ3RoOyBpKyspIHtcblx0XHRcdFx0Y29uc3Qgb1NlbGVjdGVkQ29udGV4dCA9IGFTZWxlY3RlZENvbnRleHRzW2ldO1xuXHRcdFx0XHRpZiAob1NlbGVjdGVkQ29udGV4dCkge1xuXHRcdFx0XHRcdGNvbnN0IG9Db250ZXh0RGF0YSA9IG9TZWxlY3RlZENvbnRleHQuZ2V0T2JqZWN0KCk7XG5cdFx0XHRcdFx0Y29uc3Qgb1RyYW5zZm9ybWVkQmluZGluZyA9IHRyYW5zZm9ybVJlY3Vyc2l2ZWx5KFxuXHRcdFx0XHRcdFx0c1Byb3BlcnR5LFxuXHRcdFx0XHRcdFx0XCJCaW5kaW5nXCIsXG5cdFx0XHRcdFx0XHQvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgbm8tbG9vcC1mdW5jXG5cdFx0XHRcdFx0XHRmdW5jdGlvbihvQmluZGluZ0V4cHJlc3Npb246IGFueSkge1xuXHRcdFx0XHRcdFx0XHRyZXR1cm4gY29uc3RhbnQob0NvbnRleHREYXRhW29CaW5kaW5nRXhwcmVzc2lvbi5wYXRoXSk7XG5cdFx0XHRcdFx0XHR9LFxuXHRcdFx0XHRcdFx0dHJ1ZVxuXHRcdFx0XHRcdCk7XG5cdFx0XHRcdFx0Y29uc3Qgc1Jlc3VsdCA9IGNvbXBpbGVCaW5kaW5nKG9UcmFuc2Zvcm1lZEJpbmRpbmcpO1xuXHRcdFx0XHRcdGlmIChzUmVzdWx0ID09PSBcInRydWVcIikge1xuXHRcdFx0XHRcdFx0b0ludGVybmFsTW9kZWxDb250ZXh0LmdldE1vZGVsKCkuc2V0UHJvcGVydHkoc0R5bmFtaWNBY3Rpb25FbmFibGVkUGF0aCwgdHJ1ZSk7XG5cdFx0XHRcdFx0XHRhQXBwbGljYWJsZS5wdXNoKG9TZWxlY3RlZENvbnRleHQpO1xuXHRcdFx0XHRcdH0gZWxzZSB7XG5cdFx0XHRcdFx0XHRhTm90QXBwbGljYWJsZS5wdXNoKG9TZWxlY3RlZENvbnRleHQpO1xuXHRcdFx0XHRcdH1cblx0XHRcdFx0fVxuXHRcdFx0fVxuXHRcdFx0X3NldER5bmFtaWNBY3Rpb25Db250ZXh0cyhvSW50ZXJuYWxNb2RlbENvbnRleHQsIHNBY3Rpb24sIGFBcHBsaWNhYmxlLCBhTm90QXBwbGljYWJsZSk7XG5cdFx0fSBlbHNlIHtcblx0XHRcdGNvbnN0IGFSZXF1ZXN0UHJvbWlzZXMgPSBbXTtcblx0XHRcdGZvciAobGV0IGkgPSAwOyBpIDwgYVNlbGVjdGVkQ29udGV4dHMubGVuZ3RoOyBpKyspIHtcblx0XHRcdFx0Y29uc3Qgb1NlbGVjdGVkQ29udGV4dCA9IGFTZWxlY3RlZENvbnRleHRzW2ldO1xuXHRcdFx0XHRpZiAob1NlbGVjdGVkQ29udGV4dCkge1xuXHRcdFx0XHRcdGNvbnN0IG9Db250ZXh0RGF0YSA9IG9TZWxlY3RlZENvbnRleHQuZ2V0T2JqZWN0KCk7XG5cdFx0XHRcdFx0aWYgKHNQcm9wZXJ0eSA9PT0gbnVsbCAmJiAhIW9Db250ZXh0RGF0YVtcIiNcIiArIHNBY3Rpb25dKSB7XG5cdFx0XHRcdFx0XHQvL2xvb2sgZm9yIGFjdGlvbiBhZHZlcnRpc2VtZW50IGlmIHByZXNlbnQgYW5kIGl0cyB2YWx1ZSBpcyBub3QgbnVsbFxuXHRcdFx0XHRcdFx0b0ludGVybmFsTW9kZWxDb250ZXh0LmdldE1vZGVsKCkuc2V0UHJvcGVydHkoc0R5bmFtaWNBY3Rpb25FbmFibGVkUGF0aCwgdHJ1ZSk7XG5cdFx0XHRcdFx0XHRicmVhaztcblx0XHRcdFx0XHR9IGVsc2Uge1xuXHRcdFx0XHRcdFx0Ly8gQ29sbGVjdCBwcm9taXNlcyB0byByZXRyaWV2ZSBzaW5nbGV0b24gb3Igbm9ybWFsIHByb3BlcnR5IHZhbHVlIGFzeW5jaHJvbm91c2x5XG5cdFx0XHRcdFx0XHRhUmVxdWVzdFByb21pc2VzLnB1c2goX3JlcXVlc3RQcm9wZXJ0eShvU2VsZWN0ZWRDb250ZXh0LCBzQWN0aW9uLCBzUHJvcGVydHksIHNEeW5hbWljQWN0aW9uRW5hYmxlZFBhdGgpKTtcblx0XHRcdFx0XHR9XG5cdFx0XHRcdH1cblx0XHRcdH1cblxuXHRcdFx0Ly8gV2hlbiBhbGwgcHJvcGVydHkgdmFsdWVzIGhhdmUgYmVlbiByZXRyaWV2ZWQsIHNldFxuXHRcdFx0Ly8gVGhlIGFwcGxpY2FibGUgYW5kIG5vdC1hcHBsaWNhYmxlIHNlbGVjdGVkIGNvbnRleHRzIGZvciBlYWNoIGFjdGlvbiBhbmRcblx0XHRcdC8vIFRoZSBlbmFibGVkIHByb3BlcnR5IG9mIHRoZSBkeW5hbWljIGFjdGlvbiBpbiBpbnRlcm5hbCBtb2RlbCBjb250ZXh0LlxuXHRcdFx0YVByb21pc2VzLnB1c2goX3NldENvbnRleHRzQmFzZWRPbk9wZXJhdGlvbkF2YWlsYWJsZShvSW50ZXJuYWxNb2RlbENvbnRleHQsIGFSZXF1ZXN0UHJvbWlzZXMpKTtcblx0XHR9XG5cdH1cblx0cmV0dXJuIFByb21pc2UuYWxsKGFQcm9taXNlcyk7XG59XG5mdW5jdGlvbiBfZ2V0RGVmYXVsdE9wZXJhdG9ycyhvUmVhbFByb3BlcnR5OiBhbnkpIHtcblx0Ly8gbWRjIGRlZmluZXMgdGhlIGZ1bGwgc2V0IG9mIG9wZXJhdGlvbnMgdGhhdCBhcmUgbWVhbmluZ2Z1bCBmb3IgZWFjaCBFZG0gVHlwZVxuXHRjb25zdCBvRGF0YUNsYXNzID0gVHlwZVV0aWwuZ2V0RGF0YVR5cGVDbGFzc05hbWUob1JlYWxQcm9wZXJ0eSk7XG5cdGNvbnN0IG9CYXNlVHlwZSA9IFR5cGVVdGlsLmdldEJhc2VUeXBlKG9EYXRhQ2xhc3MpO1xuXHRyZXR1cm4gRmlsdGVyT3BlcmF0b3JVdGlsLmdldE9wZXJhdG9yc0ZvclR5cGUob0Jhc2VUeXBlKTtcbn1cbmZ1bmN0aW9uIF9nZXRSZXN0cmljdGlvbnMoYURlZmF1bHRPcHM6IGFueSwgYUV4cHJlc3Npb25PcHM6IGFueSkge1xuXHQvLyBGcm9tIHRoZSBkZWZhdWx0IHNldCBvZiBPcGVyYXRvcnMgZm9yIHRoZSBCYXNlIFR5cGUsIHNlbGVjdCB0aG9zZSB0aGF0IGFyZSBkZWZpbmVkIGluIHRoZSBBbGxvd2VkIFZhbHVlLlxuXHQvLyBJbiBjYXNlIHRoYXQgbm8gb3BlcmF0b3JzIGFyZSBmb3VuZCwgcmV0dXJuIHVuZGVmaW5lZCBzbyB0aGF0IHRoZSBkZWZhdWx0IHNldCBpcyB1c2VkLlxuXHRjb25zdCBhT3BlcmF0b3JzID0gYURlZmF1bHRPcHMuZmlsdGVyKGZ1bmN0aW9uKHNFbGVtZW50OiBhbnkpIHtcblx0XHRyZXR1cm4gYUV4cHJlc3Npb25PcHMuaW5kZXhPZihzRWxlbWVudCkgPiAtMTtcblx0fSk7XG5cdHJldHVybiBhT3BlcmF0b3JzLnRvU3RyaW5nKCkgfHwgdW5kZWZpbmVkO1xufVxuZnVuY3Rpb24gZ2V0U3BlY2lmaWNBbGxvd2VkRXhwcmVzc2lvbihhRXhwcmVzc2lvbnM6IGFueSkge1xuXHRjb25zdCBhQWxsb3dlZEV4cHJlc3Npb25zUHJpb3JpdHkgPSBDb21tb25VdGlscy5BbGxvd2VkRXhwcmVzc2lvbnNQcmlvO1xuXG5cdGFFeHByZXNzaW9ucy5zb3J0KGZ1bmN0aW9uKGE6IGFueSwgYjogYW55KSB7XG5cdFx0cmV0dXJuIGFBbGxvd2VkRXhwcmVzc2lvbnNQcmlvcml0eS5pbmRleE9mKGEpIC0gYUFsbG93ZWRFeHByZXNzaW9uc1ByaW9yaXR5LmluZGV4T2YoYik7XG5cdH0pO1xuXG5cdHJldHVybiBhRXhwcmVzc2lvbnNbMF07XG59XG5mdW5jdGlvbiBnZXRPcGVyYXRvcnNGb3JQcm9wZXJ0eShcblx0c1Byb3BlcnR5OiBhbnksXG5cdHNFbnRpdHlTZXRQYXRoOiBhbnksXG5cdG9Db250ZXh0OiBhbnksXG5cdHNUeXBlPzogYW55LFxuXHRiVXNlU2VtYW50aWNEYXRlUmFuZ2U/OiBhbnksXG5cdHNTZXR0aW5ncz86IGFueVxuKSB7XG5cdGNvbnN0IG9GaWx0ZXJSZXN0cmljdGlvbnMgPSBDb21tb25VdGlscy5nZXRGaWx0ZXJSZXN0cmljdGlvbnNCeVBhdGgoc0VudGl0eVNldFBhdGgsIG9Db250ZXh0KTtcblx0Y29uc3QgYUVxdWFsc09wcyA9IFtcIkVRXCJdO1xuXHRjb25zdCBhU2luZ2xlUmFuZ2VPcHMgPSBbXCJFUVwiLCBcIkdFXCIsIFwiTEVcIiwgXCJMVFwiLCBcIkdUXCIsIFwiQlRcIiwgXCJOT1RMRVwiLCBcIk5PVExUXCIsIFwiTk9UR0VcIiwgXCJOT1RHVFwiXTtcblx0Y29uc3QgYVNpbmdsZVZhbHVlRGF0ZU9wcyA9IFtcblx0XHRcIlRPREFZXCIsXG5cdFx0XCJUT01PUlJPV1wiLFxuXHRcdFwiWUVTVEVSREFZXCIsXG5cdFx0XCJEQVRFXCIsXG5cdFx0XCJGSVJTVERBWVdFRUtcIixcblx0XHRcIkxBU1REQVlXRUVLXCIsXG5cdFx0XCJGSVJTVERBWU1PTlRIXCIsXG5cdFx0XCJMQVNUREFZTU9OVEhcIixcblx0XHRcIkZJUlNUREFZUVVBUlRFUlwiLFxuXHRcdFwiTEFTVERBWVFVQVJURVJcIixcblx0XHRcIkZJUlNUREFZWUVBUlwiLFxuXHRcdFwiTEFTVERBWVlFQVJcIlxuXHRdO1xuXHRjb25zdCBhTXVsdGlSYW5nZU9wcyA9IFtcIkVRXCIsIFwiR0VcIiwgXCJMRVwiLCBcIkxUXCIsIFwiR1RcIiwgXCJCVFwiLCBcIk5FXCIsIFwiTk9UQlRcIiwgXCJOT1RMRVwiLCBcIk5PVExUXCIsIFwiTk9UR0VcIiwgXCJOT1RHVFwiXTtcblx0Y29uc3QgYVNlYXJjaEV4cHJlc3Npb25PcHMgPSBbXCJDb250YWluc1wiLCBcIk5vdENvbnRhaW5zXCIsIFwiU3RhcnRzV2l0aFwiLCBcIk5vdFN0YXJ0c1dpdGhcIiwgXCJFbmRzV2l0aFwiLCBcIk5vdEVuZHNXaXRoXCJdO1xuXHRjb25zdCBhU2VtYW50aWNEYXRlT3BzRXh0ID0gU2VtYW50aWNEYXRlT3BlcmF0b3JzLmdldFN1cHBvcnRlZE9wZXJhdGlvbnMoKTtcblx0Y29uc3QgYlNlbWFudGljRGF0ZVJhbmdlID0gYlVzZVNlbWFudGljRGF0ZVJhbmdlID09PSBcInRydWVcIiB8fCBiVXNlU2VtYW50aWNEYXRlUmFuZ2UgPT09IHRydWU7XG5cdGxldCBhU2VtYW50aWNEYXRlT3BzOiBhbnlbXSA9IFtdO1xuXHRjb25zdCBvU2V0dGluZ3MgPSB0eXBlb2Ygc1NldHRpbmdzID09PSBcInN0cmluZ1wiID8gSlNPTi5wYXJzZShzU2V0dGluZ3MpLmN1c3RvbURhdGEgOiBzU2V0dGluZ3M7XG5cblx0aWYgKG9Db250ZXh0LmdldE9iamVjdChzRW50aXR5U2V0UGF0aCArIFwiL0Bjb20uc2FwLnZvY2FidWxhcmllcy5Db21tb24udjEuUmVzdWx0Q29udGV4dFwiKSA9PT0gdHJ1ZSkge1xuXHRcdHJldHVybiBhRXF1YWxzT3BzLnRvU3RyaW5nKCk7XG5cdH1cblxuXHRpZiAob1NldHRpbmdzICYmIG9TZXR0aW5ncy5vcGVyYXRvckNvbmZpZ3VyYXRpb24gJiYgb1NldHRpbmdzLm9wZXJhdG9yQ29uZmlndXJhdGlvbi5sZW5ndGggPiAwKSB7XG5cdFx0YVNlbWFudGljRGF0ZU9wcyA9IFNlbWFudGljRGF0ZU9wZXJhdG9ycy5nZXRGaWx0ZXJPcGVyYXRpb25zKG9TZXR0aW5ncy5vcGVyYXRvckNvbmZpZ3VyYXRpb24pO1xuXHR9IGVsc2Uge1xuXHRcdGFTZW1hbnRpY0RhdGVPcHMgPSBTZW1hbnRpY0RhdGVPcGVyYXRvcnMuZ2V0U2VtYW50aWNEYXRlT3BlcmF0aW9ucygpO1xuXHR9XG5cblx0Ly8gR2V0IHRoZSBkZWZhdWx0IE9wZXJhdG9ycyBmb3IgdGhpcyBQcm9wZXJ0eSBUeXBlXG5cdGxldCBhRGVmYXVsdE9wZXJhdG9ycyA9IF9nZXREZWZhdWx0T3BlcmF0b3JzKHNUeXBlKTtcblxuXHQvLyBJcyB0aGVyZSBhIEZpbHRlciBSZXN0cmljdGlvbiBkZWZpbmVkIGZvciB0aGlzIHByb3BlcnR5P1xuXHRpZiAob0ZpbHRlclJlc3RyaWN0aW9ucyAmJiBvRmlsdGVyUmVzdHJpY3Rpb25zLkZpbHRlckFsbG93ZWRFeHByZXNzaW9ucyAmJiBvRmlsdGVyUmVzdHJpY3Rpb25zLkZpbHRlckFsbG93ZWRFeHByZXNzaW9uc1tzUHJvcGVydHldKSB7XG5cdFx0Ly8gRXh0ZW5kaW5nIHRoZSBkZWZhdWx0IG9wZXJhdG9ycyBsaXN0IHdpdGggU2VtYW50aWMgRGF0ZSBvcHRpb25zIERBVEVSQU5HRSwgREFURSwgRlJPTSBhbmQgVE9cblx0XHRpZiAoYlNlbWFudGljRGF0ZVJhbmdlKSB7XG5cdFx0XHRhRGVmYXVsdE9wZXJhdG9ycyA9IGFTZW1hbnRpY0RhdGVPcHNFeHQuY29uY2F0KGFEZWZhdWx0T3BlcmF0b3JzKTtcblx0XHR9XG5cblx0XHRjb25zdCBzQWxsb3dlZEV4cHJlc3Npb24gPSBDb21tb25VdGlscy5nZXRTcGVjaWZpY0FsbG93ZWRFeHByZXNzaW9uKG9GaWx0ZXJSZXN0cmljdGlvbnMuRmlsdGVyQWxsb3dlZEV4cHJlc3Npb25zW3NQcm9wZXJ0eV0pO1xuXHRcdGxldCBzUmVzdHJpY3Rpb25zO1xuXHRcdC8vIEluIGNhc2UgbW9yZSB0aGFuIG9uZSBBbGxvd2VkIEV4cHJlc3Npb25zIGhhcyBiZWVuIGRlZmluZWQgZm9yIGEgcHJvcGVydHlcblx0XHQvLyBjaG9vc2UgdGhlIG1vc3QgcmVzdHJpY3RpdmUgQWxsb3dlZCBFeHByZXNzaW9uXG5cblx0XHQvLyBNdWx0aVZhbHVlIGhhcyBzYW1lIE9wZXJhdG9yIGFzIFNpbmdsZVZhbHVlLCBidXQgdGhlcmUgY2FuIGJlIG1vcmUgdGhhbiBvbmUgKG1heENvbmRpdGlvbnMpXG5cdFx0c3dpdGNoIChzQWxsb3dlZEV4cHJlc3Npb24pIHtcblx0XHRcdGNhc2UgXCJTaW5nbGVWYWx1ZVwiOlxuXHRcdFx0XHRjb25zdCBhU2luZ2xlVmFsdWVPcHMgPSBzVHlwZSA9PT0gXCJFZG0uRGF0ZVwiICYmIGJTZW1hbnRpY0RhdGVSYW5nZSA/IGFTaW5nbGVWYWx1ZURhdGVPcHMgOiBhRXF1YWxzT3BzO1xuXHRcdFx0XHRzUmVzdHJpY3Rpb25zID0gX2dldFJlc3RyaWN0aW9ucyhhRGVmYXVsdE9wZXJhdG9ycywgYVNpbmdsZVZhbHVlT3BzKTtcblx0XHRcdFx0YnJlYWs7XG5cdFx0XHRjYXNlIFwiTXVsdGlWYWx1ZVwiOlxuXHRcdFx0XHRzUmVzdHJpY3Rpb25zID0gX2dldFJlc3RyaWN0aW9ucyhhRGVmYXVsdE9wZXJhdG9ycywgYUVxdWFsc09wcyk7XG5cdFx0XHRcdGJyZWFrO1xuXHRcdFx0Y2FzZSBcIlNpbmdsZVJhbmdlXCI6XG5cdFx0XHRcdGNvbnN0IHNPcGVyYXRvcnMgPSBfZ2V0UmVzdHJpY3Rpb25zKFxuXHRcdFx0XHRcdGFEZWZhdWx0T3BlcmF0b3JzLFxuXHRcdFx0XHRcdHNUeXBlID09PSBcIkVkbS5EYXRlXCIgJiYgYlNlbWFudGljRGF0ZVJhbmdlID8gYVNlbWFudGljRGF0ZU9wcyA6IGFTaW5nbGVSYW5nZU9wc1xuXHRcdFx0XHQpO1xuXHRcdFx0XHRzUmVzdHJpY3Rpb25zID0gc09wZXJhdG9ycyA/IHNPcGVyYXRvcnMgOiBcIlwiO1xuXHRcdFx0XHRicmVhaztcblx0XHRcdGNhc2UgXCJNdWx0aVJhbmdlXCI6XG5cdFx0XHRcdHNSZXN0cmljdGlvbnMgPSBfZ2V0UmVzdHJpY3Rpb25zKGFEZWZhdWx0T3BlcmF0b3JzLCBhTXVsdGlSYW5nZU9wcyk7XG5cdFx0XHRcdGJyZWFrO1xuXHRcdFx0Y2FzZSBcIlNlYXJjaEV4cHJlc3Npb25cIjpcblx0XHRcdFx0c1Jlc3RyaWN0aW9ucyA9IF9nZXRSZXN0cmljdGlvbnMoYURlZmF1bHRPcGVyYXRvcnMsIGFTZWFyY2hFeHByZXNzaW9uT3BzKTtcblx0XHRcdFx0YnJlYWs7XG5cdFx0XHRjYXNlIFwiTXVsdGlSYW5nZU9yU2VhcmNoRXhwcmVzc2lvblwiOlxuXHRcdFx0XHRzUmVzdHJpY3Rpb25zID0gX2dldFJlc3RyaWN0aW9ucyhhRGVmYXVsdE9wZXJhdG9ycywgYVNlYXJjaEV4cHJlc3Npb25PcHMuY29uY2F0KGFNdWx0aVJhbmdlT3BzKSk7XG5cdFx0XHRcdGJyZWFrO1xuXG5cdFx0XHRkZWZhdWx0OlxuXHRcdFx0XHRicmVhaztcblx0XHR9XG5cdFx0Ly8gSW4gY2FzZSBBbGxvd2VkRXhwcmVzc2lvbnMgaXMgbm90IHJlY29nbmlzZWQsIHVuZGVmaW5lZCBpbiByZXR1cm4gcmVzdWx0cyBpbiB0aGUgZGVmYXVsdCBzZXQgb2Zcblx0XHQvLyBvcGVyYXRvcnMgZm9yIHRoZSB0eXBlLlxuXHRcdHJldHVybiBzUmVzdHJpY3Rpb25zO1xuXHR9IGVsc2UgaWYgKHNUeXBlID09PSBcIkVkbS5EYXRlXCIpIHtcblx0XHQvLyBJbiBjYXNlIEFsbG93ZWRFeHByZXNzaW9ucyBpcyBub3QgcHJvdmlkZWQgZm9yIHR5cGUgRWRtLkRhdGUgdGhlbiBhbGwgdGhlIGRlZmF1bHRcblx0XHQvLyBvcGVyYXRvcnMgZm9yIHRoZSB0eXBlIHNob3VsZCBiZSByZXR1cm5lZCBleGNsdWRpbmcgc2VtYW50aWMgb3BlcmF0b3JzIGZyb20gdGhlIGxpc3QuXG5cdFx0YVNlbWFudGljRGF0ZU9wcyA9IFNlbWFudGljRGF0ZU9wZXJhdG9ycy5nZXRTZW1hbnRpY0RhdGVPcGVyYXRpb25zKCk7XG5cdFx0Y29uc3QgYU9wZXJhdG9ycyA9IGFEZWZhdWx0T3BlcmF0b3JzLmZpbHRlcihmdW5jdGlvbihzRWxlbWVudDogYW55KSB7XG5cdFx0XHRyZXR1cm4gYVNlbWFudGljRGF0ZU9wcy5pbmRleE9mKHNFbGVtZW50KSA8IDA7XG5cdFx0fSk7XG5cdFx0cmV0dXJuIGFPcGVyYXRvcnMudG9TdHJpbmcoKTtcblx0fVxufVxuZnVuY3Rpb24gZ2V0UGFyYW1ldGVySW5mbyhvTWV0YU1vZGVsOiBhbnksIHNDb250ZXh0UGF0aDogYW55KSB7XG5cdGNvbnN0IHNQYXJhbWV0ZXJDb250ZXh0UGF0aCA9IHNDb250ZXh0UGF0aC5zdWJzdHJpbmcoMCwgc0NvbnRleHRQYXRoLmxhc3RJbmRleE9mKFwiL1wiKSk7XG5cdGNvbnN0IGJSZXN1bHRDb250ZXh0ID0gb01ldGFNb2RlbC5nZXRPYmplY3Qoc1BhcmFtZXRlckNvbnRleHRQYXRoICsgXCIvQGNvbS5zYXAudm9jYWJ1bGFyaWVzLkNvbW1vbi52MS5SZXN1bHRDb250ZXh0XCIpO1xuXHRjb25zdCBvUGFyYW1ldGVySW5mbzogYW55ID0ge307XG5cdGlmIChiUmVzdWx0Q29udGV4dCAmJiBzUGFyYW1ldGVyQ29udGV4dFBhdGggIT09IHNDb250ZXh0UGF0aCkge1xuXHRcdG9QYXJhbWV0ZXJJbmZvLmNvbnRleHRQYXRoID0gc1BhcmFtZXRlckNvbnRleHRQYXRoO1xuXHRcdG9QYXJhbWV0ZXJJbmZvLnBhcmFtZXRlclByb3BlcnRpZXMgPSBDb21tb25VdGlscy5nZXRDb250ZXh0UGF0aFByb3BlcnRpZXMob01ldGFNb2RlbCwgc1BhcmFtZXRlckNvbnRleHRQYXRoKTtcblx0fVxuXHRyZXR1cm4gb1BhcmFtZXRlckluZm87XG59XG5mdW5jdGlvbiBhZGRTZWxlY3RPcHRpb25Ub0NvbmRpdGlvbnMob1Byb3BlcnR5TWV0YWRhdGE6IGFueSwgYVZhbGlkT3BlcmF0b3JzOiBhbnksIGFDdW11bGF0aXZlQ29uZGl0aW9uczogYW55LCBvU2VsZWN0T3B0aW9uOiBhbnkpIHtcblx0Y29uc3Qgb0NvbmRpdGlvbiA9IGdldENvbmRpdGlvbnMob1NlbGVjdE9wdGlvbiwgb1Byb3BlcnR5TWV0YWRhdGEpO1xuXHRpZiAob0NvbmRpdGlvbikge1xuXHRcdGlmICghYVZhbGlkT3BlcmF0b3JzIHx8IGFWYWxpZE9wZXJhdG9ycy5pbmRleE9mKG9Db25kaXRpb24ub3BlcmF0b3IpID4gLTEpIHtcblx0XHRcdGFDdW11bGF0aXZlQ29uZGl0aW9ucy5wdXNoKG9Db25kaXRpb24pO1xuXHRcdH1cblx0fVxuXHRyZXR1cm4gYUN1bXVsYXRpdmVDb25kaXRpb25zO1xufVxuLyoqXG4gKiBAcGFyYW0gc0NvbnRleHRQYXRoXG4gKiBAcGFyYW0gb1NlbGVjdGlvblZhcmlhbnRcbiAqIEBwYXJhbSBzU2VsZWN0T3B0aW9uUHJvcFxuICogQHBhcmFtIG9Db25kaXRpb25zXG4gKiBAcGFyYW0gc0NvbmRpdGlvblBhdGhcbiAqIEBwYXJhbSBzQ29uZGl0aW9uUHJvcFxuICogQHBhcmFtIG9WYWxpZFByb3BlcnRpZXNcbiAqIEBwYXJhbSBvTWV0YU1vZGVsXG4gKiBAcGFyYW0gaXNQYXJhbWV0ZXJcbiAqL1xuZnVuY3Rpb24gYWRkU2VsZWN0T3B0aW9uc1RvQ29uZGl0aW9ucyhcblx0c0NvbnRleHRQYXRoOiBhbnksXG5cdG9TZWxlY3Rpb25WYXJpYW50OiBhbnksXG5cdHNTZWxlY3RPcHRpb25Qcm9wOiBhbnksXG5cdG9Db25kaXRpb25zOiBhbnksXG5cdHNDb25kaXRpb25QYXRoOiBhbnksXG5cdHNDb25kaXRpb25Qcm9wOiBhbnksXG5cdG9WYWxpZFByb3BlcnRpZXM6IGFueSxcblx0b01ldGFNb2RlbDogYW55LFxuXHRpc1BhcmFtZXRlcjogYW55XG4pIHtcblx0bGV0IGFDb25kaXRpb25zOiBhbnlbXSA9IFtdLFxuXHRcdGFTZWxlY3RPcHRpb25zLFxuXHRcdGFWYWxpZE9wZXJhdG9ycztcblxuXHRpZiAoaXNQYXJhbWV0ZXIgfHwgQ29tbW9uVXRpbHMuaXNQcm9wZXJ0eUZpbHRlcmFibGUob01ldGFNb2RlbCwgc0NvbnRleHRQYXRoLCBzQ29uZGl0aW9uUHJvcCwgdHJ1ZSkpIHtcblx0XHRhU2VsZWN0T3B0aW9ucyA9IG9TZWxlY3Rpb25WYXJpYW50LmdldFNlbGVjdE9wdGlvbihzU2VsZWN0T3B0aW9uUHJvcCk7XG5cdFx0YVZhbGlkT3BlcmF0b3JzID0gaXNQYXJhbWV0ZXIgPyBbXCJFUVwiXSA6IENvbW1vblV0aWxzLmdldE9wZXJhdG9yc0ZvclByb3BlcnR5KHNDb25kaXRpb25Qcm9wLCBzQ29udGV4dFBhdGgsIG9NZXRhTW9kZWwpO1xuXHRcdGNvbnN0IG9Qcm9wZXJ0eU1ldGFkYXRhID0gb1ZhbGlkUHJvcGVydGllc1tzQ29uZGl0aW9uUHJvcF07XG5cdFx0Ly8gQ3JlYXRlIGNvbmRpdGlvbnMgZm9yIGFsbCB0aGUgc2VsZWN0T3B0aW9ucyBvZiB0aGUgcHJvcGVydHlcblx0XHRhQ29uZGl0aW9ucyA9IGlzUGFyYW1ldGVyXG5cdFx0XHQ/IGFkZFNlbGVjdE9wdGlvblRvQ29uZGl0aW9ucyhvUHJvcGVydHlNZXRhZGF0YSwgYVZhbGlkT3BlcmF0b3JzLCBhQ29uZGl0aW9ucywgYVNlbGVjdE9wdGlvbnNbMF0pXG5cdFx0XHQ6IGFTZWxlY3RPcHRpb25zLnJlZHVjZShhZGRTZWxlY3RPcHRpb25Ub0NvbmRpdGlvbnMuYmluZChudWxsLCBvUHJvcGVydHlNZXRhZGF0YSwgYVZhbGlkT3BlcmF0b3JzKSwgYUNvbmRpdGlvbnMpO1xuXHRcdGlmIChhQ29uZGl0aW9ucy5sZW5ndGgpIHtcblx0XHRcdGlmIChzQ29uZGl0aW9uUGF0aCkge1xuXHRcdFx0XHRvQ29uZGl0aW9uc1tzQ29uZGl0aW9uUGF0aCArIHNDb25kaXRpb25Qcm9wXSA9IG9Db25kaXRpb25zLmhhc093blByb3BlcnR5KHNDb25kaXRpb25QYXRoICsgc0NvbmRpdGlvblByb3ApXG5cdFx0XHRcdFx0PyBvQ29uZGl0aW9uc1tzQ29uZGl0aW9uUGF0aCArIHNDb25kaXRpb25Qcm9wXS5jb25jYXQoYUNvbmRpdGlvbnMpXG5cdFx0XHRcdFx0OiBhQ29uZGl0aW9ucztcblx0XHRcdH0gZWxzZSB7XG5cdFx0XHRcdG9Db25kaXRpb25zW3NDb25kaXRpb25Qcm9wXSA9IG9Db25kaXRpb25zLmhhc093blByb3BlcnR5KHNDb25kaXRpb25Qcm9wKVxuXHRcdFx0XHRcdD8gb0NvbmRpdGlvbnNbc0NvbmRpdGlvblByb3BdLmNvbmNhdChhQ29uZGl0aW9ucylcblx0XHRcdFx0XHQ6IGFDb25kaXRpb25zO1xuXHRcdFx0fVxuXHRcdH1cblx0fVxufVxuXG5mdW5jdGlvbiBhZGRTZWxlY3Rpb25WYXJpYW50VG9Db25kaXRpb25zKG9TZWxlY3Rpb25WYXJpYW50OiBhbnksIG9Db25kaXRpb25zOiBvYmplY3QsIG9NZXRhTW9kZWw6IE9EYXRhTWV0YU1vZGVsLCBzQ29udGV4dFBhdGg6IHN0cmluZykge1xuXHRjb25zdCBhU2VsZWN0T3B0aW9uc1Byb3BlcnR5TmFtZXMgPSBvU2VsZWN0aW9uVmFyaWFudC5nZXRTZWxlY3RPcHRpb25zUHJvcGVydHlOYW1lcygpLFxuXHRcdG9WYWxpZFByb3BlcnRpZXMgPSBDb21tb25VdGlscy5nZXRDb250ZXh0UGF0aFByb3BlcnRpZXMob01ldGFNb2RlbCwgc0NvbnRleHRQYXRoKSxcblx0XHRhTWV0YWRhdFByb3BlcnRpZXMgPSBPYmplY3Qua2V5cyhvVmFsaWRQcm9wZXJ0aWVzKSxcblx0XHRvUGFyYW1ldGVySW5mbyA9IENvbW1vblV0aWxzLmdldFBhcmFtZXRlckluZm8ob01ldGFNb2RlbCwgc0NvbnRleHRQYXRoKSxcblx0XHRzUGFyYW1ldGVyQ29udGV4dFBhdGggPSBvUGFyYW1ldGVySW5mby5jb250ZXh0UGF0aCxcblx0XHRvVmFsaWRQYXJhbWV0ZXJQcm9wZXJ0aWVzID0gb1BhcmFtZXRlckluZm8ucGFyYW1ldGVyUHJvcGVydGllcyxcblx0XHRiSGFzUGFyYW1ldGVycyA9ICEhb1BhcmFtZXRlckluZm8uY29udGV4dFBhdGggJiYgb1ZhbGlkUGFyYW1ldGVyUHJvcGVydGllcyAmJiBPYmplY3Qua2V5cyhvVmFsaWRQYXJhbWV0ZXJQcm9wZXJ0aWVzKS5sZW5ndGggPiAwO1xuXG5cdGlmIChiSGFzUGFyYW1ldGVycykge1xuXHRcdGNvbnN0IGFNZXRhZGF0YVBhcmFtZXRlcnMgPSBPYmplY3Qua2V5cyhvVmFsaWRQYXJhbWV0ZXJQcm9wZXJ0aWVzKTtcblx0XHRhTWV0YWRhdGFQYXJhbWV0ZXJzLmZvckVhY2goZnVuY3Rpb24oc01ldGFkYXRhUGFyYW1ldGVyOiBzdHJpbmcpIHtcblx0XHRcdGxldCBzU2VsZWN0T3B0aW9uTmFtZTtcblx0XHRcdGlmIChhU2VsZWN0T3B0aW9uc1Byb3BlcnR5TmFtZXMuaW5jbHVkZXMoXCIkUGFyYW1ldGVyLlwiICsgc01ldGFkYXRhUGFyYW1ldGVyKSkge1xuXHRcdFx0XHRzU2VsZWN0T3B0aW9uTmFtZSA9IFwiJFBhcmFtZXRlci5cIiArIHNNZXRhZGF0YVBhcmFtZXRlcjtcblx0XHRcdH0gZWxzZSBpZiAoYVNlbGVjdE9wdGlvbnNQcm9wZXJ0eU5hbWVzLmluY2x1ZGVzKHNNZXRhZGF0YVBhcmFtZXRlcikpIHtcblx0XHRcdFx0c1NlbGVjdE9wdGlvbk5hbWUgPSBzTWV0YWRhdGFQYXJhbWV0ZXI7XG5cdFx0XHR9IGVsc2UgaWYgKFxuXHRcdFx0XHRzTWV0YWRhdGFQYXJhbWV0ZXIuc3RhcnRzV2l0aChcIlBfXCIpICYmXG5cdFx0XHRcdGFTZWxlY3RPcHRpb25zUHJvcGVydHlOYW1lcy5pbmNsdWRlcyhcIiRQYXJhbWV0ZXIuXCIgKyBzTWV0YWRhdGFQYXJhbWV0ZXIuc2xpY2UoMiwgc01ldGFkYXRhUGFyYW1ldGVyLmxlbmd0aCkpXG5cdFx0XHQpIHtcblx0XHRcdFx0c1NlbGVjdE9wdGlvbk5hbWUgPSBcIiRQYXJhbWV0ZXIuXCIgKyBzTWV0YWRhdGFQYXJhbWV0ZXIuc2xpY2UoMiwgc01ldGFkYXRhUGFyYW1ldGVyLmxlbmd0aCk7XG5cdFx0XHR9IGVsc2UgaWYgKFxuXHRcdFx0XHRzTWV0YWRhdGFQYXJhbWV0ZXIuc3RhcnRzV2l0aChcIlBfXCIpICYmXG5cdFx0XHRcdGFTZWxlY3RPcHRpb25zUHJvcGVydHlOYW1lcy5pbmNsdWRlcyhzTWV0YWRhdGFQYXJhbWV0ZXIuc2xpY2UoMiwgc01ldGFkYXRhUGFyYW1ldGVyLmxlbmd0aCkpXG5cdFx0XHQpIHtcblx0XHRcdFx0c1NlbGVjdE9wdGlvbk5hbWUgPSBzTWV0YWRhdGFQYXJhbWV0ZXIuc2xpY2UoMiwgc01ldGFkYXRhUGFyYW1ldGVyLmxlbmd0aCk7XG5cdFx0XHR9IGVsc2UgaWYgKGFTZWxlY3RPcHRpb25zUHJvcGVydHlOYW1lcy5pbmNsdWRlcyhcIiRQYXJhbWV0ZXIuUF9cIiArIHNNZXRhZGF0YVBhcmFtZXRlcikpIHtcblx0XHRcdFx0c1NlbGVjdE9wdGlvbk5hbWUgPSBcIiRQYXJhbWV0ZXIuUF9cIiArIHNNZXRhZGF0YVBhcmFtZXRlcjtcblx0XHRcdH0gZWxzZSBpZiAoYVNlbGVjdE9wdGlvbnNQcm9wZXJ0eU5hbWVzLmluY2x1ZGVzKFwiUF9cIiArIHNNZXRhZGF0YVBhcmFtZXRlcikpIHtcblx0XHRcdFx0c1NlbGVjdE9wdGlvbk5hbWUgPSBcIlBfXCIgKyBzTWV0YWRhdGFQYXJhbWV0ZXI7XG5cdFx0XHR9XG5cblx0XHRcdGlmIChzU2VsZWN0T3B0aW9uTmFtZSkge1xuXHRcdFx0XHRhZGRTZWxlY3RPcHRpb25zVG9Db25kaXRpb25zKFxuXHRcdFx0XHRcdHNQYXJhbWV0ZXJDb250ZXh0UGF0aCxcblx0XHRcdFx0XHRvU2VsZWN0aW9uVmFyaWFudCxcblx0XHRcdFx0XHRzU2VsZWN0T3B0aW9uTmFtZSxcblx0XHRcdFx0XHRvQ29uZGl0aW9ucyxcblx0XHRcdFx0XHR1bmRlZmluZWQsXG5cdFx0XHRcdFx0c01ldGFkYXRhUGFyYW1ldGVyLFxuXHRcdFx0XHRcdG9WYWxpZFBhcmFtZXRlclByb3BlcnRpZXMsXG5cdFx0XHRcdFx0b01ldGFNb2RlbCxcblx0XHRcdFx0XHR0cnVlXG5cdFx0XHRcdCk7XG5cdFx0XHR9XG5cdFx0fSk7XG5cdH1cblx0YU1ldGFkYXRQcm9wZXJ0aWVzLmZvckVhY2goZnVuY3Rpb24oc01ldGFkYXRhUHJvcGVydHk6IHN0cmluZykge1xuXHRcdGxldCBzU2VsZWN0T3B0aW9uTmFtZTtcblx0XHRpZiAoYVNlbGVjdE9wdGlvbnNQcm9wZXJ0eU5hbWVzLmluY2x1ZGVzKHNNZXRhZGF0YVByb3BlcnR5KSkge1xuXHRcdFx0c1NlbGVjdE9wdGlvbk5hbWUgPSBzTWV0YWRhdGFQcm9wZXJ0eTtcblx0XHR9IGVsc2UgaWYgKFxuXHRcdFx0c01ldGFkYXRhUHJvcGVydHkuc3RhcnRzV2l0aChcIlBfXCIpICYmXG5cdFx0XHRhU2VsZWN0T3B0aW9uc1Byb3BlcnR5TmFtZXMuaW5jbHVkZXMoc01ldGFkYXRhUHJvcGVydHkuc2xpY2UoMiwgc01ldGFkYXRhUHJvcGVydHkubGVuZ3RoKSlcblx0XHQpIHtcblx0XHRcdHNTZWxlY3RPcHRpb25OYW1lID0gc01ldGFkYXRhUHJvcGVydHkuc2xpY2UoMiwgc01ldGFkYXRhUHJvcGVydHkubGVuZ3RoKTtcblx0XHR9IGVsc2UgaWYgKGFTZWxlY3RPcHRpb25zUHJvcGVydHlOYW1lcy5pbmNsdWRlcyhcIlBfXCIgKyBzTWV0YWRhdGFQcm9wZXJ0eSkpIHtcblx0XHRcdHNTZWxlY3RPcHRpb25OYW1lID0gXCJQX1wiICsgc01ldGFkYXRhUHJvcGVydHk7XG5cdFx0fVxuXHRcdGlmIChzU2VsZWN0T3B0aW9uTmFtZSkge1xuXHRcdFx0YWRkU2VsZWN0T3B0aW9uc1RvQ29uZGl0aW9ucyhcblx0XHRcdFx0c0NvbnRleHRQYXRoLFxuXHRcdFx0XHRvU2VsZWN0aW9uVmFyaWFudCxcblx0XHRcdFx0c1NlbGVjdE9wdGlvbk5hbWUsXG5cdFx0XHRcdG9Db25kaXRpb25zLFxuXHRcdFx0XHR1bmRlZmluZWQsXG5cdFx0XHRcdHNNZXRhZGF0YVByb3BlcnR5LFxuXHRcdFx0XHRvVmFsaWRQcm9wZXJ0aWVzLFxuXHRcdFx0XHRvTWV0YU1vZGVsLFxuXHRcdFx0XHRmYWxzZVxuXHRcdFx0KTtcblx0XHR9XG5cdH0pO1xuXG5cdGFTZWxlY3RPcHRpb25zUHJvcGVydHlOYW1lcy5mb3JFYWNoKGZ1bmN0aW9uKHNTZWxlY3RPcHRpb246IGFueSkge1xuXHRcdGlmIChzU2VsZWN0T3B0aW9uLmluZGV4T2YoXCIuXCIpID4gMCAmJiAhc1NlbGVjdE9wdGlvbi5pbmNsdWRlcyhcIiRQYXJhbWV0ZXJcIikpIHtcblx0XHRcdGNvbnN0IHNGdWxsQ29udGV4dFBhdGggPSAoXCIvXCIgKyBzU2VsZWN0T3B0aW9uLnJlcGxhY2VBbGwoXCIuXCIsIFwiL1wiKSkuc3RhcnRzV2l0aChzQ29udGV4dFBhdGgpXG5cdFx0XHRcdD8gXCIvXCIgKyBzU2VsZWN0T3B0aW9uLnJlcGxhY2VBbGwoXCIuXCIsIFwiL1wiKVxuXHRcdFx0XHQ6IHNDb250ZXh0UGF0aCArIFwiL1wiICsgc1NlbGVjdE9wdGlvbi5yZXBsYWNlQWxsKFwiLlwiLCBcIi9cIik7IC8vIGNoZWNrIGlmIHRoZSBmdWxsIHBhdGgsIGVnIFNhbGVzT3JkZXJNYW5hZ2UuX0l0ZW0uTWF0ZXJpYWwgZXhpc3RzIGluIHRoZSBtZXRhbW9kZWxcblx0XHRcdGlmIChvTWV0YU1vZGVsLmdldE9iamVjdChzRnVsbENvbnRleHRQYXRoLnJlcGxhY2UoXCJQX1wiLCBcIlwiKSkpIHtcblx0XHRcdFx0X2NyZWF0ZUNvbmRpdGlvbnNGb3JOYXZQcm9wZXJ0aWVzKFxuXHRcdFx0XHRcdHNGdWxsQ29udGV4dFBhdGgsXG5cdFx0XHRcdFx0c0NvbnRleHRQYXRoLFxuXHRcdFx0XHRcdG9TZWxlY3Rpb25WYXJpYW50LFxuXHRcdFx0XHRcdHNTZWxlY3RPcHRpb24sXG5cdFx0XHRcdFx0b01ldGFNb2RlbCxcblx0XHRcdFx0XHRvQ29uZGl0aW9uc1xuXHRcdFx0XHQpO1xuXHRcdFx0fVxuXHRcdH1cblx0fSk7XG5cdHJldHVybiBvQ29uZGl0aW9ucztcbn1cbi8qKlxuICogQHBhcmFtIHNGdWxsQ29udGV4dFBhdGhcbiAqIEBwYXJhbSBzTWFpbkVudGl0eVNldFBhdGhcbiAqIEBwYXJhbSBvU2VsZWN0aW9uVmFyaWFudFxuICogQHBhcmFtIHNTZWxlY3RPcHRpb25cbiAqIEBwYXJhbSBvTWV0YU1vZGVsXG4gKiBAcGFyYW0gb0NvbmRpdGlvbnNcbiAqL1xuZnVuY3Rpb24gX2NyZWF0ZUNvbmRpdGlvbnNGb3JOYXZQcm9wZXJ0aWVzKFxuXHRzRnVsbENvbnRleHRQYXRoOiBhbnksXG5cdHNNYWluRW50aXR5U2V0UGF0aDogYW55LFxuXHRvU2VsZWN0aW9uVmFyaWFudDogYW55LFxuXHRzU2VsZWN0T3B0aW9uOiBhbnksXG5cdG9NZXRhTW9kZWw6IGFueSxcblx0b0NvbmRpdGlvbnM6IGFueVxuKSB7XG5cdGxldCBhTmF2T2JqZWN0TmFtZXMgPSBzU2VsZWN0T3B0aW9uLnNwbGl0KFwiLlwiKTtcblx0Ly8gRWc6IFwiU2FsZXNPcmRlck1hbmFnZS5fSXRlbS5fTWF0ZXJpYWwuTWF0ZXJpYWxcIiBvciBcIl9JdGVtLk1hdGVyaWFsXCJcblx0aWYgKChcIi9cIiArIHNTZWxlY3RPcHRpb24ucmVwbGFjZUFsbChcIi5cIiwgXCIvXCIpKS5zdGFydHNXaXRoKHNNYWluRW50aXR5U2V0UGF0aCkpIHtcblx0XHRjb25zdCBzRnVsbFBhdGggPSAoKFwiL1wiICsgc1NlbGVjdE9wdGlvbikgYXMgYW55KS5yZXBsYWNlQWxsKFwiLlwiLCBcIi9cIiksXG5cdFx0XHRzTmF2UGF0aCA9IHNGdWxsUGF0aC5yZXBsYWNlKHNNYWluRW50aXR5U2V0UGF0aCArIFwiL1wiLCBcIlwiKTtcblx0XHRhTmF2T2JqZWN0TmFtZXMgPSBzTmF2UGF0aC5zcGxpdChcIi9cIik7XG5cdH1cblx0bGV0IHNDb25kaXRpb25QYXRoID0gXCJcIjtcblx0Y29uc3Qgc1Byb3BlcnR5TmFtZSA9IGFOYXZPYmplY3ROYW1lc1thTmF2T2JqZWN0TmFtZXMubGVuZ3RoIC0gMV07IC8vIE1hdGVyaWFsIGZyb20gU2FsZXNPcmRlck1hbmFnZS5fSXRlbS5NYXRlcmlhbFxuXHRmb3IgKGxldCBpID0gMDsgaSA8IGFOYXZPYmplY3ROYW1lcy5sZW5ndGggLSAxOyBpKyspIHtcblx0XHRpZiAob01ldGFNb2RlbC5nZXRPYmplY3Qoc01haW5FbnRpdHlTZXRQYXRoICsgXCIvXCIgKyBhTmF2T2JqZWN0TmFtZXNbaV0ucmVwbGFjZShcIlBfXCIsIFwiXCIpKS4kaXNDb2xsZWN0aW9uKSB7XG5cdFx0XHRzQ29uZGl0aW9uUGF0aCA9IHNDb25kaXRpb25QYXRoICsgYU5hdk9iamVjdE5hbWVzW2ldICsgXCIqL1wiOyAvLyBfSXRlbSovIGluIGNhc2Ugb2YgMTpuIGNhcmRpbmFsaXR5XG5cdFx0fSBlbHNlIHtcblx0XHRcdHNDb25kaXRpb25QYXRoID0gc0NvbmRpdGlvblBhdGggKyBhTmF2T2JqZWN0TmFtZXNbaV0gKyBcIi9cIjsgLy8gX0l0ZW0vIGluIGNhc2Ugb2YgMToxIGNhcmRpbmFsaXR5XG5cdFx0fVxuXHRcdHNNYWluRW50aXR5U2V0UGF0aCA9IHNNYWluRW50aXR5U2V0UGF0aCArIFwiL1wiICsgYU5hdk9iamVjdE5hbWVzW2ldO1xuXHR9XG5cdGNvbnN0IHNOYXZQcm9wZXJ0eVBhdGggPSBzRnVsbENvbnRleHRQYXRoLnNsaWNlKDAsIHNGdWxsQ29udGV4dFBhdGgubGFzdEluZGV4T2YoXCIvXCIpKSxcblx0XHRvVmFsaWRQcm9wZXJ0aWVzID0gQ29tbW9uVXRpbHMuZ2V0Q29udGV4dFBhdGhQcm9wZXJ0aWVzKG9NZXRhTW9kZWwsIHNOYXZQcm9wZXJ0eVBhdGgpLFxuXHRcdGFTZWxlY3RPcHRpb25zUHJvcGVydHlOYW1lcyA9IG9TZWxlY3Rpb25WYXJpYW50LmdldFNlbGVjdE9wdGlvbnNQcm9wZXJ0eU5hbWVzKCk7XG5cdGxldCBzU2VsZWN0T3B0aW9uTmFtZSA9IHNQcm9wZXJ0eU5hbWU7XG5cdGlmIChvVmFsaWRQcm9wZXJ0aWVzW3NQcm9wZXJ0eU5hbWVdKSB7XG5cdFx0c1NlbGVjdE9wdGlvbk5hbWUgPSBzUHJvcGVydHlOYW1lO1xuXHR9IGVsc2UgaWYgKHNQcm9wZXJ0eU5hbWUuc3RhcnRzV2l0aChcIlBfXCIpICYmIG9WYWxpZFByb3BlcnRpZXNbc1Byb3BlcnR5TmFtZS5yZXBsYWNlKFwiUF9cIiwgXCJcIildKSB7XG5cdFx0c1NlbGVjdE9wdGlvbk5hbWUgPSBzUHJvcGVydHlOYW1lLnJlcGxhY2UoXCJQX1wiLCBcIlwiKTtcblx0fSBlbHNlIGlmIChvVmFsaWRQcm9wZXJ0aWVzW1wiUF9cIiArIHNQcm9wZXJ0eU5hbWVdICYmIGFTZWxlY3RPcHRpb25zUHJvcGVydHlOYW1lcy5pbmNsdWRlcyhcIlBfXCIgKyBzUHJvcGVydHlOYW1lKSkge1xuXHRcdHNTZWxlY3RPcHRpb25OYW1lID0gXCJQX1wiICsgc1Byb3BlcnR5TmFtZTtcblx0fVxuXHRpZiAoc1Byb3BlcnR5TmFtZS5zdGFydHNXaXRoKFwiUF9cIikgJiYgb0NvbmRpdGlvbnNbc0NvbmRpdGlvblBhdGggKyBzU2VsZWN0T3B0aW9uTmFtZV0pIHtcblx0XHQvLyBpZiB0aGVyZSBpcyBubyBTYWxlc09yZGVyTWFuYWdlLl9JdGVtLk1hdGVyaWFsIHlldCBpbiB0aGUgb0NvbmRpdGlvbnNcblx0XHRyZXR1cm47XG5cdH0gZWxzZSBpZiAoIXNQcm9wZXJ0eU5hbWUuc3RhcnRzV2l0aChcIlBfXCIpICYmIG9Db25kaXRpb25zW3NDb25kaXRpb25QYXRoICsgc1NlbGVjdE9wdGlvbk5hbWVdKSB7XG5cdFx0ZGVsZXRlIG9Db25kaXRpb25zW3NDb25kaXRpb25QYXRoICsgc1NlbGVjdE9wdGlvbk5hbWVdO1xuXHRcdGFkZFNlbGVjdE9wdGlvbnNUb0NvbmRpdGlvbnMoXG5cdFx0XHRzTmF2UHJvcGVydHlQYXRoLFxuXHRcdFx0b1NlbGVjdGlvblZhcmlhbnQsXG5cdFx0XHRzU2VsZWN0T3B0aW9uLFxuXHRcdFx0b0NvbmRpdGlvbnMsXG5cdFx0XHRzQ29uZGl0aW9uUGF0aCxcblx0XHRcdHNTZWxlY3RPcHRpb25OYW1lLFxuXHRcdFx0b1ZhbGlkUHJvcGVydGllcyxcblx0XHRcdG9NZXRhTW9kZWwsXG5cdFx0XHRmYWxzZVxuXHRcdCk7XG5cdH0gZWxzZSB7XG5cdFx0YWRkU2VsZWN0T3B0aW9uc1RvQ29uZGl0aW9ucyhcblx0XHRcdHNOYXZQcm9wZXJ0eVBhdGgsXG5cdFx0XHRvU2VsZWN0aW9uVmFyaWFudCxcblx0XHRcdHNTZWxlY3RPcHRpb24sXG5cdFx0XHRvQ29uZGl0aW9ucyxcblx0XHRcdHNDb25kaXRpb25QYXRoLFxuXHRcdFx0c1NlbGVjdE9wdGlvbk5hbWUsXG5cdFx0XHRvVmFsaWRQcm9wZXJ0aWVzLFxuXHRcdFx0b01ldGFNb2RlbCxcblx0XHRcdGZhbHNlXG5cdFx0KTtcblx0fVxufVxuZnVuY3Rpb24gYWRkUGFnZUNvbnRleHRUb1NlbGVjdGlvblZhcmlhbnQob1NlbGVjdGlvblZhcmlhbnQ6IGFueSwgbVBhZ2VDb250ZXh0OiBhbnlbXSwgb1ZpZXc6IGFueSkge1xuXHRjb25zdCBvQXBwQ29tcG9uZW50ID0gQ29tbW9uVXRpbHMuZ2V0QXBwQ29tcG9uZW50KG9WaWV3KTtcblx0Y29uc3Qgb05hdmlnYXRpb25TZXJ2aWNlID0gb0FwcENvbXBvbmVudC5nZXROYXZpZ2F0aW9uU2VydmljZSgpO1xuXHRyZXR1cm4gb05hdmlnYXRpb25TZXJ2aWNlLm1peEF0dHJpYnV0ZXNBbmRTZWxlY3Rpb25WYXJpYW50KG1QYWdlQ29udGV4dCwgb1NlbGVjdGlvblZhcmlhbnQudG9KU09OU3RyaW5nKCkpO1xufVxuZnVuY3Rpb24gYWRkRXh0ZXJuYWxTdGF0ZUZpbHRlcnNUb1NlbGVjdGlvblZhcmlhbnQob1NlbGVjdGlvblZhcmlhbnQ6IGFueSwgbUZpbHRlcnM6IGFueSwgb1RhcmdldEluZm86IGFueSwgb0ZpbHRlckluZm8/OiBhbnkpIHtcblx0bGV0IHNGaWx0ZXI6IGFueSxcblx0XHRzTG93ID0gXCJcIixcblx0XHRzSGlnaCA9IG51bGw7XG5cdGNvbnN0IGZuR2V0U2lnbkFuZE9wdGlvbiA9IGZ1bmN0aW9uKHNPcGVyYXRvcjogYW55LCBzTG93VmFsdWU6IGFueSwgc0hpZ2hWYWx1ZTogYW55KSB7XG5cdFx0Y29uc3Qgb1NlbGVjdE9wdGlvblN0YXRlID0ge1xuXHRcdFx0b3B0aW9uOiBcIlwiLFxuXHRcdFx0c2lnbjogXCJJXCIsXG5cdFx0XHRsb3c6IHNMb3dWYWx1ZSxcblx0XHRcdGhpZ2g6IHNIaWdoVmFsdWVcblx0XHR9O1xuXHRcdHN3aXRjaCAoc09wZXJhdG9yKSB7XG5cdFx0XHRjYXNlIFwiQ29udGFpbnNcIjpcblx0XHRcdFx0b1NlbGVjdE9wdGlvblN0YXRlLm9wdGlvbiA9IFwiQ1BcIjtcblx0XHRcdFx0YnJlYWs7XG5cdFx0XHRjYXNlIFwiU3RhcnRzV2l0aFwiOlxuXHRcdFx0XHRvU2VsZWN0T3B0aW9uU3RhdGUub3B0aW9uID0gXCJDUFwiO1xuXHRcdFx0XHRvU2VsZWN0T3B0aW9uU3RhdGUubG93ICs9IFwiKlwiO1xuXHRcdFx0XHRicmVhaztcblx0XHRcdGNhc2UgXCJFbmRzV2l0aFwiOlxuXHRcdFx0XHRvU2VsZWN0T3B0aW9uU3RhdGUub3B0aW9uID0gXCJDUFwiO1xuXHRcdFx0XHRvU2VsZWN0T3B0aW9uU3RhdGUubG93ID0gXCIqXCIgKyBvU2VsZWN0T3B0aW9uU3RhdGUubG93O1xuXHRcdFx0XHRicmVhaztcblx0XHRcdGNhc2UgXCJCVFwiOlxuXHRcdFx0Y2FzZSBcIkxFXCI6XG5cdFx0XHRjYXNlIFwiTFRcIjpcblx0XHRcdGNhc2UgXCJHVFwiOlxuXHRcdFx0Y2FzZSBcIk5FXCI6XG5cdFx0XHRjYXNlIFwiRVFcIjpcblx0XHRcdFx0b1NlbGVjdE9wdGlvblN0YXRlLm9wdGlvbiA9IHNPcGVyYXRvcjtcblx0XHRcdFx0YnJlYWs7XG5cdFx0XHRjYXNlIFwiVE9EQVlcIjpcblx0XHRcdGNhc2UgXCJEQVRFXCI6XG5cdFx0XHRcdG9TZWxlY3RPcHRpb25TdGF0ZS5vcHRpb24gPSBcIkVRXCI7XG5cdFx0XHRcdGJyZWFrO1xuXHRcdFx0Y2FzZSBcIkVFUVwiOlxuXHRcdFx0XHRvU2VsZWN0T3B0aW9uU3RhdGUub3B0aW9uID0gXCJFUVwiO1xuXHRcdFx0XHRicmVhaztcblx0XHRcdGNhc2UgXCJFbXB0eVwiOlxuXHRcdFx0XHRvU2VsZWN0T3B0aW9uU3RhdGUub3B0aW9uID0gXCJFUVwiO1xuXHRcdFx0XHRvU2VsZWN0T3B0aW9uU3RhdGUubG93ID0gXCJcIjtcblx0XHRcdFx0YnJlYWs7XG5cdFx0XHRjYXNlIFwiTm90Q29udGFpbnNcIjpcblx0XHRcdFx0b1NlbGVjdE9wdGlvblN0YXRlLm9wdGlvbiA9IFwiQ1BcIjtcblx0XHRcdFx0b1NlbGVjdE9wdGlvblN0YXRlLnNpZ24gPSBcIkVcIjtcblx0XHRcdFx0YnJlYWs7XG5cdFx0XHRjYXNlIFwiTk9UQlRcIjpcblx0XHRcdFx0b1NlbGVjdE9wdGlvblN0YXRlLm9wdGlvbiA9IFwiQlRcIjtcblx0XHRcdFx0b1NlbGVjdE9wdGlvblN0YXRlLnNpZ24gPSBcIkVcIjtcblx0XHRcdFx0YnJlYWs7XG5cdFx0XHRjYXNlIFwiTm90U3RhcnRzV2l0aFwiOlxuXHRcdFx0XHRvU2VsZWN0T3B0aW9uU3RhdGUub3B0aW9uID0gXCJDUFwiO1xuXHRcdFx0XHRvU2VsZWN0T3B0aW9uU3RhdGUubG93ICs9IFwiKlwiO1xuXHRcdFx0XHRvU2VsZWN0T3B0aW9uU3RhdGUuc2lnbiA9IFwiRVwiO1xuXHRcdFx0XHRicmVhaztcblx0XHRcdGNhc2UgXCJOb3RFbmRzV2l0aFwiOlxuXHRcdFx0XHRvU2VsZWN0T3B0aW9uU3RhdGUub3B0aW9uID0gXCJDUFwiO1xuXHRcdFx0XHRvU2VsZWN0T3B0aW9uU3RhdGUubG93ID0gXCIqXCIgKyBvU2VsZWN0T3B0aW9uU3RhdGUubG93O1xuXHRcdFx0XHRvU2VsZWN0T3B0aW9uU3RhdGUuc2lnbiA9IFwiRVwiO1xuXHRcdFx0XHRicmVhaztcblx0XHRcdGNhc2UgXCJOb3RFbXB0eVwiOlxuXHRcdFx0XHRvU2VsZWN0T3B0aW9uU3RhdGUub3B0aW9uID0gXCJORVwiO1xuXHRcdFx0XHRvU2VsZWN0T3B0aW9uU3RhdGUubG93ID0gXCJcIjtcblx0XHRcdFx0YnJlYWs7XG5cdFx0XHRjYXNlIFwiTk9UTEVcIjpcblx0XHRcdFx0b1NlbGVjdE9wdGlvblN0YXRlLm9wdGlvbiA9IFwiTEVcIjtcblx0XHRcdFx0b1NlbGVjdE9wdGlvblN0YXRlLnNpZ24gPSBcIkVcIjtcblx0XHRcdFx0YnJlYWs7XG5cdFx0XHRjYXNlIFwiTk9UR0VcIjpcblx0XHRcdFx0b1NlbGVjdE9wdGlvblN0YXRlLm9wdGlvbiA9IFwiR0VcIjtcblx0XHRcdFx0b1NlbGVjdE9wdGlvblN0YXRlLnNpZ24gPSBcIkVcIjtcblx0XHRcdFx0YnJlYWs7XG5cdFx0XHRjYXNlIFwiTk9UTFRcIjpcblx0XHRcdFx0b1NlbGVjdE9wdGlvblN0YXRlLm9wdGlvbiA9IFwiTFRcIjtcblx0XHRcdFx0b1NlbGVjdE9wdGlvblN0YXRlLnNpZ24gPSBcIkVcIjtcblx0XHRcdFx0YnJlYWs7XG5cdFx0XHRjYXNlIFwiTk9UR1RcIjpcblx0XHRcdFx0b1NlbGVjdE9wdGlvblN0YXRlLm9wdGlvbiA9IFwiR1RcIjtcblx0XHRcdFx0b1NlbGVjdE9wdGlvblN0YXRlLnNpZ24gPSBcIkVcIjtcblx0XHRcdFx0YnJlYWs7XG5cdFx0XHRkZWZhdWx0OlxuXHRcdFx0XHRMb2cud2FybmluZyhzT3BlcmF0b3IgKyBcIiBpcyBub3Qgc3VwcG9ydGVkLiBcIiArIHNGaWx0ZXIgKyBcIiBjb3VsZCBub3QgYmUgYWRkZWQgdG8gdGhlIG5hdmlnYXRpb24gY29udGV4dFwiKTtcblx0XHR9XG5cdFx0cmV0dXJuIG9TZWxlY3RPcHRpb25TdGF0ZTtcblx0fTtcblx0Y29uc3Qgb0ZpbHRlckNvbmRpdGlvbnMgPSBtRmlsdGVycy5maWx0ZXJDb25kaXRpb25zO1xuXHRjb25zdCBvRmlsdGVyc1dpdGhvdXRDb25mbGljdCA9IG1GaWx0ZXJzLmZpbHRlckNvbmRpdGlvbnNXaXRob3V0Q29uZmxpY3QgPyBtRmlsdGVycy5maWx0ZXJDb25kaXRpb25zV2l0aG91dENvbmZsaWN0IDoge307XG5cdGNvbnN0IG9UYWJsZVByb3BlcnRpZXNXaXRob3V0Q29uZmxpY3QgPSBvVGFyZ2V0SW5mby5wcm9wZXJ0aWVzV2l0aG91dENvbmZsaWN0ID8gb1RhcmdldEluZm8ucHJvcGVydGllc1dpdGhvdXRDb25mbGljdCA6IHt9O1xuXHRjb25zdCBhZGRGaWx0ZXJzVG9TZWxlY3Rpb25WYXJpYW50ID0gZnVuY3Rpb24ob1NlbGVjdGlvblZhcmlhbnQ6IGFueSwgc0ZpbHRlck5hbWU6IGFueSwgc1BhdGg/OiBhbnkpIHtcblx0XHRjb25zdCBhRmlsdGVycyA9IG9GaWx0ZXJDb25kaXRpb25zW3NGaWx0ZXJOYW1lXTtcblx0XHRmb3IgKGNvbnN0IGl0ZW0gaW4gYUZpbHRlcnMpIHtcblx0XHRcdGNvbnN0IG9GaWx0ZXIgPSBhRmlsdGVyc1tpdGVtXTtcblx0XHRcdHNMb3cgPSAob0ZpbHRlci52YWx1ZXNbMF0gJiYgb0ZpbHRlci52YWx1ZXNbMF0udG9TdHJpbmcoKSkgfHwgXCJcIjtcblx0XHRcdHNIaWdoID0gKG9GaWx0ZXIudmFsdWVzWzFdICYmIG9GaWx0ZXIudmFsdWVzWzFdLnRvU3RyaW5nKCkpIHx8IG51bGw7XG5cdFx0XHRpZiAob0ZpbHRlci5vcGVyYXRvciA9PT0gXCJUT0RBWVwiIHx8IG9GaWx0ZXIub3BlcmF0b3IgPT09IFwiREFURVwiKSB7XG5cdFx0XHRcdGNvbnN0IGFGaWx0ZXIgPSBvRmlsdGVySW5mb1swXS5hRmlsdGVycy5maWx0ZXIoZnVuY3Rpb24ob0ZpbHRlcjogYW55KSB7XG5cdFx0XHRcdFx0cmV0dXJuIG9GaWx0ZXIuc1BhdGggPT09IHNGaWx0ZXJOYW1lO1xuXHRcdFx0XHR9KTtcblx0XHRcdFx0c0xvdyA9IGFGaWx0ZXJbMF0ub1ZhbHVlMSB8fCBcIlwiO1xuXHRcdFx0XHRzSGlnaCA9IG51bGw7XG5cdFx0XHR9XG5cdFx0XHRjb25zdCBvU2VsZWN0T3B0aW9uVmFsdWVzID0gZm5HZXRTaWduQW5kT3B0aW9uKG9GaWx0ZXIub3BlcmF0b3IsIHNMb3csIHNIaWdoKTtcblx0XHRcdGlmIChvU2VsZWN0T3B0aW9uVmFsdWVzLm9wdGlvbikge1xuXHRcdFx0XHRvU2VsZWN0aW9uVmFyaWFudC5hZGRTZWxlY3RPcHRpb24oXG5cdFx0XHRcdFx0c1BhdGggPyBzUGF0aCA6IHNGaWx0ZXJOYW1lLFxuXHRcdFx0XHRcdG9TZWxlY3RPcHRpb25WYWx1ZXMuc2lnbixcblx0XHRcdFx0XHRvU2VsZWN0T3B0aW9uVmFsdWVzLm9wdGlvbixcblx0XHRcdFx0XHRvU2VsZWN0T3B0aW9uVmFsdWVzLmxvdyxcblx0XHRcdFx0XHRvU2VsZWN0T3B0aW9uVmFsdWVzLmhpZ2hcblx0XHRcdFx0KTtcblx0XHRcdH1cblx0XHR9XG5cdH07XG5cblx0Zm9yIChzRmlsdGVyIGluIG9GaWx0ZXJDb25kaXRpb25zKSB7XG5cdFx0Ly8gb25seSBhZGQgdGhlIGZpbHRlciB2YWx1ZXMgaWYgaXQgaXMgbm90IGFscmVhZHkgcHJlc2VudCBpbiB0aGUgU1YgYWxyZWFkeVxuXHRcdGlmICghb1NlbGVjdGlvblZhcmlhbnQuZ2V0U2VsZWN0T3B0aW9uKHNGaWx0ZXIpKSB7XG5cdFx0XHQvLyBUT0RPIDogY3VzdG9tIGZpbHRlcnMgc2hvdWxkIGJlIGlnbm9yZWQgbW9yZSBnZW5lcmljYWxseVxuXHRcdFx0aWYgKHNGaWx0ZXIgPT09IFwiJGVkaXRTdGF0ZVwiKSB7XG5cdFx0XHRcdGNvbnRpbnVlO1xuXHRcdFx0fVxuXHRcdFx0YWRkRmlsdGVyc1RvU2VsZWN0aW9uVmFyaWFudChvU2VsZWN0aW9uVmFyaWFudCwgc0ZpbHRlcik7XG5cdFx0fSBlbHNlIHtcblx0XHRcdGlmIChvVGFibGVQcm9wZXJ0aWVzV2l0aG91dENvbmZsaWN0ICYmIHNGaWx0ZXIgaW4gb1RhYmxlUHJvcGVydGllc1dpdGhvdXRDb25mbGljdCkge1xuXHRcdFx0XHRhZGRGaWx0ZXJzVG9TZWxlY3Rpb25WYXJpYW50KG9TZWxlY3Rpb25WYXJpYW50LCBzRmlsdGVyLCBvVGFibGVQcm9wZXJ0aWVzV2l0aG91dENvbmZsaWN0W3NGaWx0ZXJdKTtcblx0XHRcdH1cblx0XHRcdC8vIGlmIHByb3BlcnR5IHdhcyB3aXRob3V0IGNvbmZsaWN0IGluIHBhZ2UgY29udGV4dCB0aGVuIGFkZCBwYXRoIGZyb20gcGFnZSBjb250ZXh0IHRvIFNWXG5cdFx0XHRpZiAoc0ZpbHRlciBpbiBvRmlsdGVyc1dpdGhvdXRDb25mbGljdCkge1xuXHRcdFx0XHRhZGRGaWx0ZXJzVG9TZWxlY3Rpb25WYXJpYW50KG9TZWxlY3Rpb25WYXJpYW50LCBzRmlsdGVyLCBvRmlsdGVyc1dpdGhvdXRDb25mbGljdFtzRmlsdGVyXSk7XG5cdFx0XHR9XG5cdFx0fVxuXHR9XG5cdHJldHVybiBvU2VsZWN0aW9uVmFyaWFudDtcbn1cbmZ1bmN0aW9uIGlzU3RpY2t5RWRpdE1vZGUob0NvbnRyb2w6IENvbnRyb2wpIHtcblx0Y29uc3QgYklzU3RpY2t5TW9kZSA9IE1vZGVsSGVscGVyLmlzU3RpY2t5U2Vzc2lvblN1cHBvcnRlZCgob0NvbnRyb2wuZ2V0TW9kZWwoKSBhcyBPRGF0YU1vZGVsKS5nZXRNZXRhTW9kZWwoKSk7XG5cdGNvbnN0IGJVSUVkaXRhYmxlID0gb0NvbnRyb2wuZ2V0TW9kZWwoXCJ1aVwiKS5nZXRQcm9wZXJ0eShcIi9pc0VkaXRhYmxlXCIpO1xuXHRyZXR1cm4gYklzU3RpY2t5TW9kZSAmJiBiVUlFZGl0YWJsZTtcbn1cbi8qKlxuICogQHBhcmFtIGFNYW5kYXRvcnlGaWx0ZXJGaWVsZHNcbiAqIEBwYXJhbSBvU2VsZWN0aW9uVmFyaWFudFxuICogQHBhcmFtIG9TZWxlY3Rpb25WYXJpYW50RGVmYXVsdHNcbiAqL1xuZnVuY3Rpb24gYWRkRGVmYXVsdERpc3BsYXlDdXJyZW5jeShhTWFuZGF0b3J5RmlsdGVyRmllbGRzOiBhbnlbXSwgb1NlbGVjdGlvblZhcmlhbnQ6IGFueSwgb1NlbGVjdGlvblZhcmlhbnREZWZhdWx0czogYW55KSB7XG5cdGlmIChvU2VsZWN0aW9uVmFyaWFudCAmJiBhTWFuZGF0b3J5RmlsdGVyRmllbGRzICYmIGFNYW5kYXRvcnlGaWx0ZXJGaWVsZHMubGVuZ3RoKSB7XG5cdFx0Zm9yIChsZXQgaSA9IDA7IGkgPCBhTWFuZGF0b3J5RmlsdGVyRmllbGRzLmxlbmd0aDsgaSsrKSB7XG5cdFx0XHRjb25zdCBhU1ZPcHRpb24gPSBvU2VsZWN0aW9uVmFyaWFudC5nZXRTZWxlY3RPcHRpb24oXCJEaXNwbGF5Q3VycmVuY3lcIiksXG5cdFx0XHRcdGFEZWZhdWx0U1ZPcHRpb24gPSBvU2VsZWN0aW9uVmFyaWFudERlZmF1bHRzICYmIG9TZWxlY3Rpb25WYXJpYW50RGVmYXVsdHMuZ2V0U2VsZWN0T3B0aW9uKFwiRGlzcGxheUN1cnJlbmN5XCIpO1xuXHRcdFx0aWYgKFxuXHRcdFx0XHRhTWFuZGF0b3J5RmlsdGVyRmllbGRzW2ldLiRQcm9wZXJ0eVBhdGggPT09IFwiRGlzcGxheUN1cnJlbmN5XCIgJiZcblx0XHRcdFx0KCFhU1ZPcHRpb24gfHwgIWFTVk9wdGlvbi5sZW5ndGgpICYmXG5cdFx0XHRcdGFEZWZhdWx0U1ZPcHRpb24gJiZcblx0XHRcdFx0YURlZmF1bHRTVk9wdGlvbi5sZW5ndGhcblx0XHRcdCkge1xuXHRcdFx0XHRjb25zdCBkaXNwbGF5Q3VycmVuY3lTZWxlY3RPcHRpb24gPSBhRGVmYXVsdFNWT3B0aW9uWzBdO1xuXHRcdFx0XHRjb25zdCBzU2lnbiA9IGRpc3BsYXlDdXJyZW5jeVNlbGVjdE9wdGlvbltcIlNpZ25cIl07XG5cdFx0XHRcdGNvbnN0IHNPcHRpb24gPSBkaXNwbGF5Q3VycmVuY3lTZWxlY3RPcHRpb25bXCJPcHRpb25cIl07XG5cdFx0XHRcdGNvbnN0IHNMb3cgPSBkaXNwbGF5Q3VycmVuY3lTZWxlY3RPcHRpb25bXCJMb3dcIl07XG5cdFx0XHRcdGNvbnN0IHNIaWdoID0gZGlzcGxheUN1cnJlbmN5U2VsZWN0T3B0aW9uW1wiSGlnaFwiXTtcblx0XHRcdFx0b1NlbGVjdGlvblZhcmlhbnQuYWRkU2VsZWN0T3B0aW9uKFwiRGlzcGxheUN1cnJlbmN5XCIsIHNTaWduLCBzT3B0aW9uLCBzTG93LCBzSGlnaCk7XG5cdFx0XHR9XG5cdFx0fVxuXHR9XG59XG5mdW5jdGlvbiBnZXROb25Db21wdXRlZFZpc2libGVGaWVsZHMob01ldGFNb2RlbDogT0RhdGFNZXRhTW9kZWwsIHNQYXRoOiBhbnksIG9WaWV3PzogYW55KSB7XG5cdGNvbnN0IGFUZWNobmljYWxLZXlzID0gb01ldGFNb2RlbC5nZXRPYmplY3Qoc1BhdGggKyBcIi9cIikuJEtleTtcblx0Y29uc3QgYU5vbkNvbXB1dGVkVmlzaWJsZUZpZWxkcyA9IFtdO1xuXHRjb25zdCBvRW50aXR5VHlwZSA9IG9NZXRhTW9kZWwuZ2V0T2JqZWN0KHNQYXRoICsgXCIvXCIpO1xuXHRmb3IgKGNvbnN0IGl0ZW0gaW4gb0VudGl0eVR5cGUpIHtcblx0XHRpZiAob0VudGl0eVR5cGVbaXRlbV0uJGtpbmQgJiYgb0VudGl0eVR5cGVbaXRlbV0uJGtpbmQgPT09IFwiUHJvcGVydHlcIikge1xuXHRcdFx0Y29uc3Qgb0Fubm90YXRpb25zID0gb01ldGFNb2RlbC5nZXRPYmplY3Qoc1BhdGggKyBcIi9cIiArIGl0ZW0gKyBcIkBcIikgfHwge30sXG5cdFx0XHRcdGJJc0tleSA9IGFUZWNobmljYWxLZXlzLmluZGV4T2YoaXRlbSkgPiAtMSxcblx0XHRcdFx0YklzSW1tdXRhYmxlID0gb0Fubm90YXRpb25zW1wiQE9yZy5PRGF0YS5Db3JlLlYxLkltbXV0YWJsZVwiXSxcblx0XHRcdFx0YklzTm9uQ29tcHV0ZWQgPSAhb0Fubm90YXRpb25zW1wiQE9yZy5PRGF0YS5Db3JlLlYxLkNvbXB1dGVkXCJdLFxuXHRcdFx0XHRiSXNWaXNpYmxlID0gIW9Bbm5vdGF0aW9uc1tcIkBjb20uc2FwLnZvY2FidWxhcmllcy5VSS52MS5IaWRkZW5cIl0sXG5cdFx0XHRcdGJJc0NvbXB1dGVkRGVmYXVsdFZhbHVlID0gb0Fubm90YXRpb25zW1wiQE9yZy5PRGF0YS5Db3JlLlYxLkNvbXB1dGVkRGVmYXVsdFZhbHVlXCJdLFxuXHRcdFx0XHRiSXNLZXlDb21wdXRlZERlZmF1bHRWYWx1ZVdpdGhUZXh0ID1cblx0XHRcdFx0XHRiSXNLZXkgJiYgb0VudGl0eVR5cGVbaXRlbV0uJFR5cGUgPT09IFwiRWRtLkd1aWRcIlxuXHRcdFx0XHRcdFx0PyBiSXNDb21wdXRlZERlZmF1bHRWYWx1ZSAmJiBvQW5ub3RhdGlvbnNbXCJAY29tLnNhcC52b2NhYnVsYXJpZXMuQ29tbW9uLnYxLlRleHRcIl1cblx0XHRcdFx0XHRcdDogZmFsc2U7XG5cdFx0XHRpZiAoXG5cdFx0XHRcdChiSXNJbW11dGFibGUgfHwgYklzS2V5Q29tcHV0ZWREZWZhdWx0VmFsdWVXaXRoVGV4dCB8fCAoYklzS2V5ICYmIG9FbnRpdHlUeXBlW2l0ZW1dLiRUeXBlICE9PSBcIkVkbS5HdWlkXCIpKSAmJlxuXHRcdFx0XHRiSXNOb25Db21wdXRlZCAmJlxuXHRcdFx0XHRiSXNWaXNpYmxlXG5cdFx0XHQpIHtcblx0XHRcdFx0YU5vbkNvbXB1dGVkVmlzaWJsZUZpZWxkcy5wdXNoKGl0ZW0pO1xuXHRcdFx0fVxuXG5cdFx0XHRpZiAoIWJJc05vbkNvbXB1dGVkICYmIGJJc0NvbXB1dGVkRGVmYXVsdFZhbHVlICYmIG9WaWV3KSB7XG5cdFx0XHRcdGNvbnN0IG9EaWFnbm9zdGljcyA9IGdldEFwcENvbXBvbmVudChvVmlldykuZ2V0RGlhZ25vc3RpY3MoKTtcblx0XHRcdFx0Y29uc3Qgc01lc3NhZ2UgPSBcIkNvcmUuQ29tcHV0ZWREZWZhdWx0VmFsdWUgaXMgaWdub3JlZCBhcyBDb3JlLkNvbXB1dGVkIGlzIGFscmVhZHkgc2V0IHRvIHRydWVcIjtcblx0XHRcdFx0b0RpYWdub3N0aWNzLmFkZElzc3VlKFxuXHRcdFx0XHRcdElzc3VlQ2F0ZWdvcnkuQW5ub3RhdGlvbixcblx0XHRcdFx0XHRJc3N1ZVNldmVyaXR5Lk1lZGl1bSxcblx0XHRcdFx0XHRzTWVzc2FnZSxcblx0XHRcdFx0XHRJc3N1ZUNhdGVnb3J5VHlwZSxcblx0XHRcdFx0XHRJc3N1ZUNhdGVnb3J5VHlwZT8uQW5ub3RhdGlvbnM/Lklnbm9yZWRBbm5vdGF0aW9uXG5cdFx0XHRcdCk7XG5cdFx0XHR9XG5cdFx0fVxuXHR9XG5cdHJldHVybiBhTm9uQ29tcHV0ZWRWaXNpYmxlRmllbGRzO1xufVxuZnVuY3Rpb24gc2V0VXNlckRlZmF1bHRzKFxuXHRvQXBwQ29tcG9uZW50OiBBcHBDb21wb25lbnQsXG5cdGFQYXJhbWV0ZXJzOiBhbnlbXSxcblx0b01vZGVsOiBKU09OTW9kZWwsXG5cdGJJc0FjdGlvbjogYm9vbGVhbixcblx0YklzQ3JlYXRlPzogYm9vbGVhbixcblx0b0FjdGlvbkRlZmF1bHRWYWx1ZXM/OiBhbnlcbikge1xuXHRyZXR1cm4gbmV3IFByb21pc2UoZnVuY3Rpb24ocmVzb2x2ZTogKHZhbHVlOiBhbnkpID0+IHZvaWQpIHtcblx0XHRjb25zdCBvQ29tcG9uZW50RGF0YSA9IG9BcHBDb21wb25lbnQuZ2V0Q29tcG9uZW50RGF0YSgpLFxuXHRcdFx0b1N0YXJ0dXBQYXJhbWV0ZXJzID0gKG9Db21wb25lbnREYXRhICYmIG9Db21wb25lbnREYXRhLnN0YXJ0dXBQYXJhbWV0ZXJzKSB8fCB7fSxcblx0XHRcdG9TaGVsbFNlcnZpY2VzID0gb0FwcENvbXBvbmVudC5nZXRTaGVsbFNlcnZpY2VzKCk7XG5cdFx0aWYgKCFvU2hlbGxTZXJ2aWNlcy5oYXNVU2hlbGwoKSkge1xuXHRcdFx0YVBhcmFtZXRlcnMuZm9yRWFjaChmdW5jdGlvbihvUGFyYW1ldGVyOiBhbnkpIHtcblx0XHRcdFx0Y29uc3Qgc1Byb3BlcnR5TmFtZSA9IGJJc0FjdGlvblxuXHRcdFx0XHRcdD8gXCIvXCIgKyBvUGFyYW1ldGVyLiROYW1lXG5cdFx0XHRcdFx0OiBvUGFyYW1ldGVyLmdldFBhdGgoKS5zbGljZShvUGFyYW1ldGVyLmdldFBhdGgoKS5sYXN0SW5kZXhPZihcIi9cIikgKyAxKTtcblx0XHRcdFx0Y29uc3Qgc1BhcmFtZXRlck5hbWUgPSBiSXNBY3Rpb24gPyBzUHJvcGVydHlOYW1lLnNsaWNlKDEpIDogc1Byb3BlcnR5TmFtZTtcblx0XHRcdFx0aWYgKG9BY3Rpb25EZWZhdWx0VmFsdWVzICYmIGJJc0NyZWF0ZSkge1xuXHRcdFx0XHRcdGlmIChvQWN0aW9uRGVmYXVsdFZhbHVlc1tzUGFyYW1ldGVyTmFtZV0pIHtcblx0XHRcdFx0XHRcdG9Nb2RlbC5zZXRQcm9wZXJ0eShzUHJvcGVydHlOYW1lLCBvQWN0aW9uRGVmYXVsdFZhbHVlc1tzUGFyYW1ldGVyTmFtZV0pO1xuXHRcdFx0XHRcdH1cblx0XHRcdFx0fSBlbHNlIGlmIChvU3RhcnR1cFBhcmFtZXRlcnNbc1BhcmFtZXRlck5hbWVdKSB7XG5cdFx0XHRcdFx0b01vZGVsLnNldFByb3BlcnR5KHNQcm9wZXJ0eU5hbWUsIG9TdGFydHVwUGFyYW1ldGVyc1tzUGFyYW1ldGVyTmFtZV1bMF0pO1xuXHRcdFx0XHR9XG5cdFx0XHR9KTtcblx0XHRcdHJldHVybiByZXNvbHZlKHRydWUpO1xuXHRcdH1cblx0XHRyZXR1cm4gb1NoZWxsU2VydmljZXMuZ2V0U3RhcnR1cEFwcFN0YXRlKG9BcHBDb21wb25lbnQpLnRoZW4oZnVuY3Rpb24ob1N0YXJ0dXBBcHBTdGF0ZTogYW55KSB7XG5cdFx0XHRjb25zdCBvRGF0YSA9IG9TdGFydHVwQXBwU3RhdGUuZ2V0RGF0YSgpIHx8IHt9LFxuXHRcdFx0XHRhRXh0ZW5kZWRQYXJhbWV0ZXJzID0gKG9EYXRhLnNlbGVjdGlvblZhcmlhbnQgJiYgb0RhdGEuc2VsZWN0aW9uVmFyaWFudC5TZWxlY3RPcHRpb25zKSB8fCBbXTtcblx0XHRcdGFQYXJhbWV0ZXJzLmZvckVhY2goZnVuY3Rpb24ob1BhcmFtZXRlcjogYW55KSB7XG5cdFx0XHRcdGNvbnN0IHNQcm9wZXJ0eU5hbWUgPSBiSXNBY3Rpb25cblx0XHRcdFx0XHQ/IFwiL1wiICsgb1BhcmFtZXRlci4kTmFtZVxuXHRcdFx0XHRcdDogb1BhcmFtZXRlci5nZXRQYXRoKCkuc2xpY2Uob1BhcmFtZXRlci5nZXRQYXRoKCkubGFzdEluZGV4T2YoXCIvXCIpICsgMSk7XG5cdFx0XHRcdGNvbnN0IHNQYXJhbWV0ZXJOYW1lID0gYklzQWN0aW9uID8gc1Byb3BlcnR5TmFtZS5zbGljZSgxKSA6IHNQcm9wZXJ0eU5hbWU7XG5cdFx0XHRcdGlmIChvQWN0aW9uRGVmYXVsdFZhbHVlcyAmJiBiSXNDcmVhdGUpIHtcblx0XHRcdFx0XHRpZiAob0FjdGlvbkRlZmF1bHRWYWx1ZXNbc1BhcmFtZXRlck5hbWVdKSB7XG5cdFx0XHRcdFx0XHRvTW9kZWwuc2V0UHJvcGVydHkoc1Byb3BlcnR5TmFtZSwgb0FjdGlvbkRlZmF1bHRWYWx1ZXNbc1BhcmFtZXRlck5hbWVdKTtcblx0XHRcdFx0XHR9XG5cdFx0XHRcdH0gZWxzZSBpZiAob1N0YXJ0dXBQYXJhbWV0ZXJzW3NQYXJhbWV0ZXJOYW1lXSkge1xuXHRcdFx0XHRcdG9Nb2RlbC5zZXRQcm9wZXJ0eShzUHJvcGVydHlOYW1lLCBvU3RhcnR1cFBhcmFtZXRlcnNbc1BhcmFtZXRlck5hbWVdWzBdKTtcblx0XHRcdFx0fSBlbHNlIGlmIChhRXh0ZW5kZWRQYXJhbWV0ZXJzLmxlbmd0aCA+IDApIHtcblx0XHRcdFx0XHRmb3IgKGNvbnN0IGkgaW4gYUV4dGVuZGVkUGFyYW1ldGVycykge1xuXHRcdFx0XHRcdFx0Y29uc3Qgb0V4dGVuZGVkUGFyYW1ldGVyID0gYUV4dGVuZGVkUGFyYW1ldGVyc1tpXTtcblx0XHRcdFx0XHRcdGlmIChvRXh0ZW5kZWRQYXJhbWV0ZXIuUHJvcGVydHlOYW1lID09PSBzUGFyYW1ldGVyTmFtZSkge1xuXHRcdFx0XHRcdFx0XHRjb25zdCBvUmFuZ2UgPSBvRXh0ZW5kZWRQYXJhbWV0ZXIuUmFuZ2VzLmxlbmd0aCA/IG9FeHRlbmRlZFBhcmFtZXRlci5SYW5nZXNbMF0gOiB1bmRlZmluZWQ7XG5cdFx0XHRcdFx0XHRcdGlmIChvUmFuZ2UgJiYgb1JhbmdlLlNpZ24gPT09IFwiSVwiICYmIG9SYW5nZS5PcHRpb24gPT09IFwiRVFcIikge1xuXHRcdFx0XHRcdFx0XHRcdG9Nb2RlbC5zZXRQcm9wZXJ0eShzUHJvcGVydHlOYW1lLCBvUmFuZ2UuTG93KTsgLy8gaGlnaCBpcyBpZ25vcmVkIHdoZW4gT3B0aW9uPUVRXG5cdFx0XHRcdFx0XHRcdH1cblx0XHRcdFx0XHRcdH1cblx0XHRcdFx0XHR9XG5cdFx0XHRcdH1cblx0XHRcdH0pO1xuXHRcdFx0cmV0dXJuIHJlc29sdmUodHJ1ZSk7XG5cdFx0fSk7XG5cdH0pO1xufVxuZnVuY3Rpb24gZ2V0QWRkaXRpb25hbFBhcmFtc0ZvckNyZWF0ZShvU3RhcnR1cFBhcmFtZXRlcnM6IGFueSwgb0luYm91bmRQYXJhbWV0ZXJzOiBhbnkpIHtcblx0Y29uc3Qgb0luYm91bmRzID0gb0luYm91bmRQYXJhbWV0ZXJzLFxuXHRcdGFDcmVhdGVQYXJhbWV0ZXJzID0gb0luYm91bmRzXG5cdFx0XHQ/IE9iamVjdC5rZXlzKG9JbmJvdW5kcykuZmlsdGVyKGZ1bmN0aW9uKHNQYXJhbWV0ZXI6IHN0cmluZykge1xuXHRcdFx0XHRcdHJldHVybiBvSW5ib3VuZHNbc1BhcmFtZXRlcl0udXNlRm9yQ3JlYXRlO1xuXHRcdFx0ICB9KVxuXHRcdFx0OiBbXTtcblx0bGV0IG9SZXQ7XG5cdGZvciAobGV0IGkgPSAwOyBpIDwgYUNyZWF0ZVBhcmFtZXRlcnMubGVuZ3RoOyBpKyspIHtcblx0XHRjb25zdCBzQ3JlYXRlUGFyYW1ldGVyID0gYUNyZWF0ZVBhcmFtZXRlcnNbaV07XG5cdFx0Y29uc3QgYVZhbHVlcyA9IG9TdGFydHVwUGFyYW1ldGVycyAmJiBvU3RhcnR1cFBhcmFtZXRlcnNbc0NyZWF0ZVBhcmFtZXRlcl07XG5cdFx0aWYgKGFWYWx1ZXMgJiYgYVZhbHVlcy5sZW5ndGggPT09IDEpIHtcblx0XHRcdG9SZXQgPSBvUmV0IHx8IE9iamVjdC5jcmVhdGUobnVsbCk7XG5cdFx0XHRvUmV0W3NDcmVhdGVQYXJhbWV0ZXJdID0gYVZhbHVlc1swXTtcblx0XHR9XG5cdH1cblx0cmV0dXJuIG9SZXQ7XG59XG5mdW5jdGlvbiBnZXRTZW1hbnRpY09iamVjdE1hcHBpbmcob091dGJvdW5kOiBhbnkpIHtcblx0Y29uc3QgYVNlbWFudGljT2JqZWN0TWFwcGluZzogYW55W10gPSBbXTtcblx0aWYgKG9PdXRib3VuZC5wYXJhbWV0ZXJzKSB7XG5cdFx0Y29uc3QgYVBhcmFtZXRlcnMgPSBPYmplY3Qua2V5cyhvT3V0Ym91bmQucGFyYW1ldGVycykgfHwgW107XG5cdFx0aWYgKGFQYXJhbWV0ZXJzLmxlbmd0aCA+IDApIHtcblx0XHRcdGFQYXJhbWV0ZXJzLmZvckVhY2goZnVuY3Rpb24oc1BhcmFtOiBzdHJpbmcpIHtcblx0XHRcdFx0Y29uc3Qgb01hcHBpbmcgPSBvT3V0Ym91bmQucGFyYW1ldGVyc1tzUGFyYW1dO1xuXHRcdFx0XHRpZiAob01hcHBpbmcudmFsdWUgJiYgb01hcHBpbmcudmFsdWUudmFsdWUgJiYgb01hcHBpbmcudmFsdWUuZm9ybWF0ID09PSBcImJpbmRpbmdcIikge1xuXHRcdFx0XHRcdC8vIHVzaW5nIHRoZSBmb3JtYXQgb2YgVUkuTWFwcGluZ1xuXHRcdFx0XHRcdGNvbnN0IG9TZW1hbnRpY01hcHBpbmcgPSB7XG5cdFx0XHRcdFx0XHRcIkxvY2FsUHJvcGVydHlcIjoge1xuXHRcdFx0XHRcdFx0XHRcIiRQcm9wZXJ0eVBhdGhcIjogb01hcHBpbmcudmFsdWUudmFsdWVcblx0XHRcdFx0XHRcdH0sXG5cdFx0XHRcdFx0XHRcIlNlbWFudGljT2JqZWN0UHJvcGVydHlcIjogc1BhcmFtXG5cdFx0XHRcdFx0fTtcblxuXHRcdFx0XHRcdGlmIChhU2VtYW50aWNPYmplY3RNYXBwaW5nLmxlbmd0aCA+IDApIHtcblx0XHRcdFx0XHRcdC8vIFRvIGNoZWNrIGlmIHRoZSBzZW1hbnRpY09iamVjdCBNYXBwaW5nIGlzIGRvbmUgZm9yIHRoZSBzYW1lIGxvY2FsIHByb3BlcnR5IG1vcmUgdGhhdCBvbmNlIHRoZW4gZmlyc3Qgb25lIHdpbGwgYmUgY29uc2lkZXJlZFxuXHRcdFx0XHRcdFx0Zm9yIChsZXQgaSA9IDA7IGkgPCBhU2VtYW50aWNPYmplY3RNYXBwaW5nLmxlbmd0aDsgaSsrKSB7XG5cdFx0XHRcdFx0XHRcdGlmIChcblx0XHRcdFx0XHRcdFx0XHRhU2VtYW50aWNPYmplY3RNYXBwaW5nW2ldW1wiTG9jYWxQcm9wZXJ0eVwiXVtcIiRQcm9wZXJ0eVBhdGhcIl0gIT09XG5cdFx0XHRcdFx0XHRcdFx0b1NlbWFudGljTWFwcGluZ1tcIkxvY2FsUHJvcGVydHlcIl1bXCIkUHJvcGVydHlQYXRoXCJdXG5cdFx0XHRcdFx0XHRcdCkge1xuXHRcdFx0XHRcdFx0XHRcdGFTZW1hbnRpY09iamVjdE1hcHBpbmcucHVzaChvU2VtYW50aWNNYXBwaW5nKTtcblx0XHRcdFx0XHRcdFx0fVxuXHRcdFx0XHRcdFx0fVxuXHRcdFx0XHRcdH0gZWxzZSB7XG5cdFx0XHRcdFx0XHRhU2VtYW50aWNPYmplY3RNYXBwaW5nLnB1c2gob1NlbWFudGljTWFwcGluZyk7XG5cdFx0XHRcdFx0fVxuXHRcdFx0XHR9XG5cdFx0XHR9KTtcblx0XHR9XG5cdH1cblx0cmV0dXJuIGFTZW1hbnRpY09iamVjdE1hcHBpbmc7XG59XG5mdW5jdGlvbiBnZXRIZWFkZXJGYWNldEl0ZW1Db25maWdGb3JFeHRlcm5hbE5hdmlnYXRpb24ob1ZpZXdEYXRhOiBhbnksIG9Dcm9zc05hdjogYW55KSB7XG5cdGNvbnN0IG9IZWFkZXJGYWNldEl0ZW1zOiBhbnkgPSB7fTtcblx0bGV0IHNJZDtcblx0Y29uc3Qgb0NvbnRyb2xDb25maWcgPSBvVmlld0RhdGEuY29udHJvbENvbmZpZ3VyYXRpb247XG5cdGZvciAoY29uc3QgY29uZmlnIGluIG9Db250cm9sQ29uZmlnKSB7XG5cdFx0aWYgKGNvbmZpZy5pbmRleE9mKFwiQGNvbS5zYXAudm9jYWJ1bGFyaWVzLlVJLnYxLkRhdGFQb2ludFwiKSA+IC0xIHx8IGNvbmZpZy5pbmRleE9mKFwiQGNvbS5zYXAudm9jYWJ1bGFyaWVzLlVJLnYxLkNoYXJ0XCIpID4gLTEpIHtcblx0XHRcdGlmIChcblx0XHRcdFx0b0NvbnRyb2xDb25maWdbY29uZmlnXS5uYXZpZ2F0aW9uICYmXG5cdFx0XHRcdG9Db250cm9sQ29uZmlnW2NvbmZpZ10ubmF2aWdhdGlvbi50YXJnZXRPdXRib3VuZCAmJlxuXHRcdFx0XHRvQ29udHJvbENvbmZpZ1tjb25maWddLm5hdmlnYXRpb24udGFyZ2V0T3V0Ym91bmQub3V0Ym91bmRcblx0XHRcdCkge1xuXHRcdFx0XHRjb25zdCBzT3V0Ym91bmQgPSBvQ29udHJvbENvbmZpZ1tjb25maWddLm5hdmlnYXRpb24udGFyZ2V0T3V0Ym91bmQub3V0Ym91bmQ7XG5cdFx0XHRcdGNvbnN0IG9PdXRib3VuZCA9IG9Dcm9zc05hdltzT3V0Ym91bmRdO1xuXHRcdFx0XHRpZiAob091dGJvdW5kLnNlbWFudGljT2JqZWN0ICYmIG9PdXRib3VuZC5hY3Rpb24pIHtcblx0XHRcdFx0XHRpZiAoY29uZmlnLmluZGV4T2YoXCJDaGFydFwiKSA+IC0xKSB7XG5cdFx0XHRcdFx0XHRzSWQgPSBnZW5lcmF0ZShbXCJmZVwiLCBcIk1pY3JvQ2hhcnRMaW5rXCIsIGNvbmZpZ10pO1xuXHRcdFx0XHRcdH0gZWxzZSB7XG5cdFx0XHRcdFx0XHRzSWQgPSBnZW5lcmF0ZShbXCJmZVwiLCBcIkhlYWRlckRQTGlua1wiLCBjb25maWddKTtcblx0XHRcdFx0XHR9XG5cdFx0XHRcdFx0Y29uc3QgYVNlbWFudGljT2JqZWN0TWFwcGluZyA9IENvbW1vblV0aWxzLmdldFNlbWFudGljT2JqZWN0TWFwcGluZyhvT3V0Ym91bmQpO1xuXHRcdFx0XHRcdG9IZWFkZXJGYWNldEl0ZW1zW3NJZF0gPSB7XG5cdFx0XHRcdFx0XHRzZW1hbnRpY09iamVjdDogb091dGJvdW5kLnNlbWFudGljT2JqZWN0LFxuXHRcdFx0XHRcdFx0YWN0aW9uOiBvT3V0Ym91bmQuYWN0aW9uLFxuXHRcdFx0XHRcdFx0c2VtYW50aWNPYmplY3RNYXBwaW5nOiBhU2VtYW50aWNPYmplY3RNYXBwaW5nXG5cdFx0XHRcdFx0fTtcblx0XHRcdFx0fSBlbHNlIHtcblx0XHRcdFx0XHRMb2cuZXJyb3IoXCJDcm9zcyBuYXZpZ2F0aW9uIG91dGJvdW5kIGlzIGNvbmZpZ3VyZWQgd2l0aG91dCBzZW1hbnRpYyBvYmplY3QgYW5kIGFjdGlvbiBmb3IgXCIgKyBzT3V0Ym91bmQpO1xuXHRcdFx0XHR9XG5cdFx0XHR9XG5cdFx0fVxuXHR9XG5cdHJldHVybiBvSGVhZGVyRmFjZXRJdGVtcztcbn1cbmZ1bmN0aW9uIHNldFNlbWFudGljT2JqZWN0TWFwcGluZ3Mob1NlbGVjdGlvblZhcmlhbnQ6IGFueSwgdk1hcHBpbmdzOiBvYmplY3QpIHtcblx0Y29uc3Qgb01hcHBpbmdzID0gdHlwZW9mIHZNYXBwaW5ncyA9PT0gXCJzdHJpbmdcIiA/IEpTT04ucGFyc2Uodk1hcHBpbmdzKSA6IHZNYXBwaW5ncztcblx0Zm9yIChsZXQgaSA9IDA7IGkgPCBvTWFwcGluZ3MubGVuZ3RoOyBpKyspIHtcblx0XHRjb25zdCBzTG9jYWxQcm9wZXJ0eSA9XG5cdFx0XHQob01hcHBpbmdzW2ldW1wiTG9jYWxQcm9wZXJ0eVwiXSAmJiBvTWFwcGluZ3NbaV1bXCJMb2NhbFByb3BlcnR5XCJdW1wiJFByb3BlcnR5UGF0aFwiXSkgfHxcblx0XHRcdChvTWFwcGluZ3NbaV1bXCJAY29tLnNhcC52b2NhYnVsYXJpZXMuQ29tbW9uLnYxLkxvY2FsUHJvcGVydHlcIl0gJiZcblx0XHRcdFx0b01hcHBpbmdzW2ldW1wiQGNvbS5zYXAudm9jYWJ1bGFyaWVzLkNvbW1vbi52MS5Mb2NhbFByb3BlcnR5XCJdW1wiJFBhdGhcIl0pO1xuXHRcdGNvbnN0IHNTZW1hbnRpY09iamVjdFByb3BlcnR5ID1cblx0XHRcdG9NYXBwaW5nc1tpXVtcIlNlbWFudGljT2JqZWN0UHJvcGVydHlcIl0gfHwgb01hcHBpbmdzW2ldW1wiQGNvbS5zYXAudm9jYWJ1bGFyaWVzLkNvbW1vbi52MS5TZW1hbnRpY09iamVjdFByb3BlcnR5XCJdO1xuXHRcdGlmIChvU2VsZWN0aW9uVmFyaWFudC5nZXRTZWxlY3RPcHRpb24oc0xvY2FsUHJvcGVydHkpKSB7XG5cdFx0XHRjb25zdCBvU2VsZWN0T3B0aW9uID0gb1NlbGVjdGlvblZhcmlhbnQuZ2V0U2VsZWN0T3B0aW9uKHNMb2NhbFByb3BlcnR5KTtcblxuXHRcdFx0Ly9DcmVhdGUgYSBuZXcgU2VsZWN0T3B0aW9uIHdpdGggc1NlbWFudGljT2JqZWN0UHJvcGVydHkgYXMgdGhlIHByb3BlcnR5IE5hbWUgYW5kIHJlbW92ZSB0aGUgb2xkZXIgb25lXG5cdFx0XHRvU2VsZWN0aW9uVmFyaWFudC5yZW1vdmVTZWxlY3RPcHRpb24oc0xvY2FsUHJvcGVydHkpO1xuXHRcdFx0b1NlbGVjdGlvblZhcmlhbnQubWFzc0FkZFNlbGVjdE9wdGlvbihzU2VtYW50aWNPYmplY3RQcm9wZXJ0eSwgb1NlbGVjdE9wdGlvbik7XG5cdFx0fVxuXHR9XG5cdHJldHVybiBvU2VsZWN0aW9uVmFyaWFudDtcbn1cbmZ1bmN0aW9uIGZuR2V0U2VtYW50aWNPYmplY3RzRnJvbVBhdGgob01ldGFNb2RlbDogYW55LCBzUGF0aDogYW55KSB7XG5cdHJldHVybiBuZXcgUHJvbWlzZShmdW5jdGlvbihyZXNvbHZlOiAodmFsdWU6IGFueSkgPT4gdm9pZCkge1xuXHRcdGNvbnN0IHNTZW1hbnRpY09iamVjdCA9IG9NZXRhTW9kZWwuZ2V0T2JqZWN0KHNQYXRoICsgXCJAY29tLnNhcC52b2NhYnVsYXJpZXMuQ29tbW9uLnYxLlNlbWFudGljT2JqZWN0XCIpO1xuXHRcdGNvbnN0IGFTZW1hbnRpY09iamVjdFVuYXZhaWxhYmxlQWN0aW9ucyA9IG9NZXRhTW9kZWwuZ2V0T2JqZWN0KFxuXHRcdFx0c1BhdGggKyBcIkBjb20uc2FwLnZvY2FidWxhcmllcy5Db21tb24udjEuU2VtYW50aWNPYmplY3RVbmF2YWlsYWJsZUFjdGlvbnNcIlxuXHRcdCk7XG5cdFx0Y29uc3QgYVNlbWFudGljT2JqZWN0Rm9yR2V0TGlua3MgPSBbeyBzZW1hbnRpY09iamVjdDogc1NlbWFudGljT2JqZWN0IH1dO1xuXHRcdGNvbnN0IG9TZW1hbnRpY09iamVjdCA9IHtcblx0XHRcdHNlbWFudGljT2JqZWN0OiBzU2VtYW50aWNPYmplY3Rcblx0XHR9O1xuXHRcdHJlc29sdmUoe1xuXHRcdFx0c2VtYW50aWNPYmplY3RQYXRoOiBzUGF0aCxcblx0XHRcdHNlbWFudGljT2JqZWN0Rm9yR2V0TGlua3M6IGFTZW1hbnRpY09iamVjdEZvckdldExpbmtzLFxuXHRcdFx0c2VtYW50aWNPYmplY3Q6IG9TZW1hbnRpY09iamVjdCxcblx0XHRcdHVuYXZhaWxhYmxlQWN0aW9uczogYVNlbWFudGljT2JqZWN0VW5hdmFpbGFibGVBY3Rpb25zXG5cdFx0fSk7XG5cdH0pLmNhdGNoKGZ1bmN0aW9uKG9FcnJvcjogYW55KSB7XG5cdFx0TG9nLmVycm9yKFwiRXJyb3IgaW4gZm5HZXRTZW1hbnRpY09iamVjdHNGcm9tUGF0aFwiLCBvRXJyb3IpO1xuXHR9KTtcbn1cbmZ1bmN0aW9uIGZuVXBkYXRlU2VtYW50aWNUYXJnZXRzTW9kZWwoYUdldExpbmtzUHJvbWlzZXM6IGFueSwgYVNlbWFudGljT2JqZWN0czogYW55LCBvSW50ZXJuYWxNb2RlbENvbnRleHQ6IGFueSwgc0N1cnJlbnRIYXNoOiBhbnkpIHtcblx0cmV0dXJuIFByb21pc2UuYWxsKGFHZXRMaW5rc1Byb21pc2VzKVxuXHRcdC50aGVuKGZ1bmN0aW9uKGFWYWx1ZXM6IGFueVtdKSB7XG5cdFx0XHRsZXQgYUxpbmtzLFxuXHRcdFx0XHRfb0xpbmssXG5cdFx0XHRcdF9zTGlua0ludGVudEFjdGlvbixcblx0XHRcdFx0YUZpbmFsTGlua3M6IGFueVtdID0gW107XG5cdFx0XHRsZXQgb0ZpbmFsU2VtYW50aWNPYmplY3RzOiBhbnkgPSB7fTtcblx0XHRcdGNvbnN0IGJJbnRlbnRIYXNBY3Rpb25zID0gZnVuY3Rpb24oc0ludGVudDogYW55LCBhQWN0aW9uczogYW55KSB7XG5cdFx0XHRcdGZvciAoY29uc3QgaW50ZW50IGluIGFBY3Rpb25zKSB7XG5cdFx0XHRcdFx0aWYgKGludGVudCA9PT0gc0ludGVudCkge1xuXHRcdFx0XHRcdFx0cmV0dXJuIHRydWU7XG5cdFx0XHRcdFx0fSBlbHNlIHtcblx0XHRcdFx0XHRcdHJldHVybiBmYWxzZTtcblx0XHRcdFx0XHR9XG5cdFx0XHRcdH1cblx0XHRcdH07XG5cblx0XHRcdGZvciAobGV0IGsgPSAwOyBrIDwgYVZhbHVlcy5sZW5ndGg7IGsrKykge1xuXHRcdFx0XHRhTGlua3MgPSBhVmFsdWVzW2tdO1xuXHRcdFx0XHRpZiAoYUxpbmtzICYmIGFMaW5rcy5sZW5ndGggPiAwICYmIGFMaW5rc1swXSAhPT0gdW5kZWZpbmVkKSB7XG5cdFx0XHRcdFx0Y29uc3Qgb1NlbWFudGljT2JqZWN0OiBhbnkgPSB7fTtcblx0XHRcdFx0XHRsZXQgb1RtcCA9IHt9O1xuXHRcdFx0XHRcdGxldCBzQWx0ZXJuYXRlUGF0aDtcblx0XHRcdFx0XHRmb3IgKGxldCBpID0gMDsgaSA8IGFMaW5rcy5sZW5ndGg7IGkrKykge1xuXHRcdFx0XHRcdFx0YUZpbmFsTGlua3MucHVzaChbXSk7XG5cdFx0XHRcdFx0XHRsZXQgaGFzVGFyZ2V0c05vdEZpbHRlcmVkID0gZmFsc2U7XG5cdFx0XHRcdFx0XHRsZXQgaGFzVGFyZ2V0cyA9IGZhbHNlO1xuXHRcdFx0XHRcdFx0Zm9yIChsZXQgaUxpbmtDb3VudCA9IDA7IGlMaW5rQ291bnQgPCBhTGlua3NbaV1bMF0ubGVuZ3RoOyBpTGlua0NvdW50KyspIHtcblx0XHRcdFx0XHRcdFx0X29MaW5rID0gYUxpbmtzW2ldWzBdW2lMaW5rQ291bnRdO1xuXHRcdFx0XHRcdFx0XHRfc0xpbmtJbnRlbnRBY3Rpb24gPSBfb0xpbmsgJiYgX29MaW5rLmludGVudC5zcGxpdChcIj9cIilbMF0uc3BsaXQoXCItXCIpWzFdO1xuXG5cdFx0XHRcdFx0XHRcdGlmICghKF9vTGluayAmJiBfb0xpbmsuaW50ZW50ICYmIF9vTGluay5pbnRlbnQuaW5kZXhPZihzQ3VycmVudEhhc2gpID09PSAwKSkge1xuXHRcdFx0XHRcdFx0XHRcdGhhc1RhcmdldHNOb3RGaWx0ZXJlZCA9IHRydWU7XG5cdFx0XHRcdFx0XHRcdFx0aWYgKCFiSW50ZW50SGFzQWN0aW9ucyhfc0xpbmtJbnRlbnRBY3Rpb24sIGFTZW1hbnRpY09iamVjdHNba10udW5hdmFpbGFibGVBY3Rpb25zKSkge1xuXHRcdFx0XHRcdFx0XHRcdFx0YUZpbmFsTGlua3NbaV0ucHVzaChfb0xpbmspO1xuXHRcdFx0XHRcdFx0XHRcdFx0aGFzVGFyZ2V0cyA9IHRydWU7XG5cdFx0XHRcdFx0XHRcdFx0fVxuXHRcdFx0XHRcdFx0XHR9XG5cdFx0XHRcdFx0XHR9XG5cdFx0XHRcdFx0XHRvVG1wID0ge1xuXHRcdFx0XHRcdFx0XHRzZW1hbnRpY09iamVjdDogYVNlbWFudGljT2JqZWN0c1trXS5zZW1hbnRpY09iamVjdCxcblx0XHRcdFx0XHRcdFx0cGF0aDogYVNlbWFudGljT2JqZWN0c1trXS5wYXRoLFxuXHRcdFx0XHRcdFx0XHRIYXNUYXJnZXRzOiBoYXNUYXJnZXRzLFxuXHRcdFx0XHRcdFx0XHRIYXNUYXJnZXRzTm90RmlsdGVyZWQ6IGhhc1RhcmdldHNOb3RGaWx0ZXJlZFxuXHRcdFx0XHRcdFx0fTtcblx0XHRcdFx0XHRcdGlmIChvU2VtYW50aWNPYmplY3RbYVNlbWFudGljT2JqZWN0c1trXS5zZW1hbnRpY09iamVjdF0gPT09IHVuZGVmaW5lZCkge1xuXHRcdFx0XHRcdFx0XHRvU2VtYW50aWNPYmplY3RbYVNlbWFudGljT2JqZWN0c1trXS5zZW1hbnRpY09iamVjdF0gPSB7fTtcblx0XHRcdFx0XHRcdH1cblx0XHRcdFx0XHRcdHNBbHRlcm5hdGVQYXRoID0gYVNlbWFudGljT2JqZWN0c1trXS5wYXRoLnJlcGxhY2UoL1xcLy9nLCBcIl9cIik7XG5cdFx0XHRcdFx0XHRpZiAob1NlbWFudGljT2JqZWN0W2FTZW1hbnRpY09iamVjdHNba10uc2VtYW50aWNPYmplY3RdW3NBbHRlcm5hdGVQYXRoXSA9PT0gdW5kZWZpbmVkKSB7XG5cdFx0XHRcdFx0XHRcdG9TZW1hbnRpY09iamVjdFthU2VtYW50aWNPYmplY3RzW2tdLnNlbWFudGljT2JqZWN0XVtzQWx0ZXJuYXRlUGF0aF0gPSB7fTtcblx0XHRcdFx0XHRcdH1cblx0XHRcdFx0XHRcdG9TZW1hbnRpY09iamVjdFthU2VtYW50aWNPYmplY3RzW2tdLnNlbWFudGljT2JqZWN0XVtzQWx0ZXJuYXRlUGF0aF0gPSBPYmplY3QuYXNzaWduKFxuXHRcdFx0XHRcdFx0XHRvU2VtYW50aWNPYmplY3RbYVNlbWFudGljT2JqZWN0c1trXS5zZW1hbnRpY09iamVjdF1bc0FsdGVybmF0ZVBhdGhdLFxuXHRcdFx0XHRcdFx0XHRvVG1wXG5cdFx0XHRcdFx0XHQpO1xuXHRcdFx0XHRcdH1cblx0XHRcdFx0XHRjb25zdCBzU2VtYW50aWNPYmplY3ROYW1lID0gT2JqZWN0LmtleXMob1NlbWFudGljT2JqZWN0KVswXTtcblx0XHRcdFx0XHRpZiAoT2JqZWN0LmtleXMob0ZpbmFsU2VtYW50aWNPYmplY3RzKS5pbmNsdWRlcyhzU2VtYW50aWNPYmplY3ROYW1lKSkge1xuXHRcdFx0XHRcdFx0b0ZpbmFsU2VtYW50aWNPYmplY3RzW3NTZW1hbnRpY09iamVjdE5hbWVdID0gT2JqZWN0LmFzc2lnbihcblx0XHRcdFx0XHRcdFx0b0ZpbmFsU2VtYW50aWNPYmplY3RzW3NTZW1hbnRpY09iamVjdE5hbWVdLFxuXHRcdFx0XHRcdFx0XHRvU2VtYW50aWNPYmplY3Rbc1NlbWFudGljT2JqZWN0TmFtZV1cblx0XHRcdFx0XHRcdCk7XG5cdFx0XHRcdFx0fSBlbHNlIHtcblx0XHRcdFx0XHRcdG9GaW5hbFNlbWFudGljT2JqZWN0cyA9IE9iamVjdC5hc3NpZ24ob0ZpbmFsU2VtYW50aWNPYmplY3RzLCBvU2VtYW50aWNPYmplY3QpO1xuXHRcdFx0XHRcdH1cblx0XHRcdFx0XHRhRmluYWxMaW5rcyA9IFtdO1xuXHRcdFx0XHR9XG5cdFx0XHR9XG5cdFx0XHRpZiAoT2JqZWN0LmtleXMob0ZpbmFsU2VtYW50aWNPYmplY3RzKS5sZW5ndGggPiAwKSB7XG5cdFx0XHRcdG9JbnRlcm5hbE1vZGVsQ29udGV4dC5zZXRQcm9wZXJ0eShcblx0XHRcdFx0XHRcInNlbWFudGljc1RhcmdldHNcIixcblx0XHRcdFx0XHRtZXJnZU9iamVjdHMob0ZpbmFsU2VtYW50aWNPYmplY3RzLCBvSW50ZXJuYWxNb2RlbENvbnRleHQuZ2V0UHJvcGVydHkoXCJzZW1hbnRpY3NUYXJnZXRzXCIpKVxuXHRcdFx0XHQpO1xuXHRcdFx0XHRyZXR1cm4gb0ZpbmFsU2VtYW50aWNPYmplY3RzO1xuXHRcdFx0fVxuXHRcdH0pXG5cdFx0LmNhdGNoKGZ1bmN0aW9uKG9FcnJvcjogYW55KSB7XG5cdFx0XHRMb2cuZXJyb3IoXCJmblVwZGF0ZVNlbWFudGljVGFyZ2V0c01vZGVsOiBDYW5ub3QgcmVhZCBsaW5rc1wiLCBvRXJyb3IpO1xuXHRcdH0pO1xufVxuZnVuY3Rpb24gZm5HZXRTZW1hbnRpY09iamVjdFByb21pc2Uob0FwcENvbXBvbmVudDogYW55LCBvVmlldzogYW55LCBvTWV0YU1vZGVsOiBhbnksIHNQYXRoOiBhbnkpIHtcblx0cmV0dXJuIENvbW1vblV0aWxzLmdldFNlbWFudGljT2JqZWN0c0Zyb21QYXRoKG9NZXRhTW9kZWwsIHNQYXRoKTtcbn1cbmZ1bmN0aW9uIGZuR2V0U2VtYW50aWNUYXJnZXRzRnJvbVBhZ2VNb2RlbChvQ29udHJvbGxlcjogYW55LCBzUGFnZU1vZGVsOiBzdHJpbmcpIHtcblx0Y29uc3QgX2ZuZmluZFZhbHVlc0hlbHBlciA9IGZ1bmN0aW9uKG9iajogYW55LCBrZXk6IGFueSwgbGlzdDogYW55KSB7XG5cdFx0aWYgKCFvYmopIHtcblx0XHRcdHJldHVybiBsaXN0O1xuXHRcdH1cblx0XHRpZiAob2JqIGluc3RhbmNlb2YgQXJyYXkpIHtcblx0XHRcdGZvciAoY29uc3QgaSBpbiBvYmopIHtcblx0XHRcdFx0bGlzdCA9IGxpc3QuY29uY2F0KF9mbmZpbmRWYWx1ZXNIZWxwZXIob2JqW2ldLCBrZXksIFtdKSk7XG5cdFx0XHR9XG5cdFx0XHRyZXR1cm4gbGlzdDtcblx0XHR9XG5cdFx0aWYgKG9ialtrZXldKSB7XG5cdFx0XHRsaXN0LnB1c2gob2JqW2tleV0pO1xuXHRcdH1cblxuXHRcdGlmICh0eXBlb2Ygb2JqID09IFwib2JqZWN0XCIgJiYgb2JqICE9PSBudWxsKSB7XG5cdFx0XHRjb25zdCBjaGlsZHJlbiA9IE9iamVjdC5rZXlzKG9iaik7XG5cdFx0XHRpZiAoY2hpbGRyZW4ubGVuZ3RoID4gMCkge1xuXHRcdFx0XHRmb3IgKGxldCBpID0gMDsgaSA8IGNoaWxkcmVuLmxlbmd0aDsgaSsrKSB7XG5cdFx0XHRcdFx0bGlzdCA9IGxpc3QuY29uY2F0KF9mbmZpbmRWYWx1ZXNIZWxwZXIob2JqW2NoaWxkcmVuW2ldXSwga2V5LCBbXSkpO1xuXHRcdFx0XHR9XG5cdFx0XHR9XG5cdFx0fVxuXHRcdHJldHVybiBsaXN0O1xuXHR9O1xuXHRjb25zdCBfZm5maW5kVmFsdWVzID0gZnVuY3Rpb24ob2JqOiBhbnksIGtleTogYW55KSB7XG5cdFx0cmV0dXJuIF9mbmZpbmRWYWx1ZXNIZWxwZXIob2JqLCBrZXksIFtdKTtcblx0fTtcblx0Y29uc3QgX2ZuRGVsZXRlRHVwbGljYXRlU2VtYW50aWNPYmplY3RzID0gZnVuY3Rpb24oYVNlbWFudGljT2JqZWN0UGF0aDogYW55KSB7XG5cdFx0cmV0dXJuIGFTZW1hbnRpY09iamVjdFBhdGguZmlsdGVyKGZ1bmN0aW9uKHZhbHVlOiBhbnksIGluZGV4OiBhbnkpIHtcblx0XHRcdHJldHVybiBhU2VtYW50aWNPYmplY3RQYXRoLmluZGV4T2YodmFsdWUpID09PSBpbmRleDtcblx0XHR9KTtcblx0fTtcblx0Y29uc3Qgb1ZpZXcgPSBvQ29udHJvbGxlci5nZXRWaWV3KCk7XG5cdGNvbnN0IG9JbnRlcm5hbE1vZGVsQ29udGV4dCA9IG9WaWV3LmdldEJpbmRpbmdDb250ZXh0KFwiaW50ZXJuYWxcIik7XG5cblx0aWYgKG9JbnRlcm5hbE1vZGVsQ29udGV4dCkge1xuXHRcdGNvbnN0IGFTZW1hbnRpY09iamVjdHNQcm9taXNlcyA9IFtdO1xuXHRcdGNvbnN0IG9Db21wb25lbnQgPSBvQ29udHJvbGxlci5nZXRPd25lckNvbXBvbmVudCgpO1xuXHRcdGNvbnN0IG9BcHBDb21wb25lbnQgPSBDb21wb25lbnQuZ2V0T3duZXJDb21wb25lbnRGb3Iob0NvbXBvbmVudCkgYXMgQXBwQ29tcG9uZW50O1xuXHRcdGNvbnN0IG9NZXRhTW9kZWwgPSBvQXBwQ29tcG9uZW50LmdldE1ldGFNb2RlbCgpO1xuXHRcdGxldCBvUGFnZU1vZGVsID0gb0NvbXBvbmVudC5nZXRNb2RlbChzUGFnZU1vZGVsKS5nZXREYXRhKCk7XG5cdFx0aWYgKEpTT04uc3RyaW5naWZ5KG9QYWdlTW9kZWwpID09PSBcInt9XCIpIHtcblx0XHRcdG9QYWdlTW9kZWwgPSBvQ29tcG9uZW50LmdldE1vZGVsKHNQYWdlTW9kZWwpLl9nZXRPYmplY3QoXCIvXCIsIHVuZGVmaW5lZCk7XG5cdFx0fVxuXHRcdGxldCBhU2VtYW50aWNPYmplY3RzRm91bmQgPSBfZm5maW5kVmFsdWVzKG9QYWdlTW9kZWwsIFwic2VtYW50aWNPYmplY3RQYXRoXCIpO1xuXHRcdGFTZW1hbnRpY09iamVjdHNGb3VuZCA9IF9mbkRlbGV0ZUR1cGxpY2F0ZVNlbWFudGljT2JqZWN0cyhhU2VtYW50aWNPYmplY3RzRm91bmQpO1xuXHRcdGNvbnN0IG9TaGVsbFNlcnZpY2VIZWxwZXIgPSBDb21tb25VdGlscy5nZXRTaGVsbFNlcnZpY2VzKG9BcHBDb21wb25lbnQpO1xuXHRcdGxldCBzQ3VycmVudEhhc2ggPSBDb21tb25VdGlscy5nZXRIYXNoKCk7XG5cdFx0Y29uc3QgYVNlbWFudGljT2JqZWN0c0ZvckdldExpbmtzID0gW107XG5cdFx0Y29uc3QgYVNlbWFudGljT2JqZWN0czogYW55W10gPSBbXTtcblx0XHRsZXQgc1BhdGg7XG5cdFx0bGV0IF9vU2VtYW50aWNPYmplY3Q7XG5cblx0XHRpZiAoc0N1cnJlbnRIYXNoICYmIHNDdXJyZW50SGFzaC5pbmRleE9mKFwiP1wiKSAhPT0gLTEpIHtcblx0XHRcdC8vIHNDdXJyZW50SGFzaCBjYW4gY29udGFpbiBxdWVyeSBzdHJpbmcsIGN1dCBpdCBvZmYhXG5cdFx0XHRzQ3VycmVudEhhc2ggPSBzQ3VycmVudEhhc2guc3BsaXQoXCI/XCIpWzBdO1xuXHRcdH1cblxuXHRcdGZvciAobGV0IGkgPSAwOyBpIDwgYVNlbWFudGljT2JqZWN0c0ZvdW5kLmxlbmd0aDsgaSsrKSB7XG5cdFx0XHRzUGF0aCA9IGFTZW1hbnRpY09iamVjdHNGb3VuZFtpXTtcblx0XHRcdGFTZW1hbnRpY09iamVjdHNQcm9taXNlcy5wdXNoKENvbW1vblV0aWxzLmdldFNlbWFudGljT2JqZWN0UHJvbWlzZShvQXBwQ29tcG9uZW50LCBvVmlldywgb01ldGFNb2RlbCwgc1BhdGgpKTtcblx0XHR9XG5cblx0XHRpZiAoYVNlbWFudGljT2JqZWN0c1Byb21pc2VzLmxlbmd0aCA9PT0gMCkge1xuXHRcdFx0cmV0dXJuIFByb21pc2UucmVzb2x2ZSgpO1xuXHRcdH0gZWxzZSB7XG5cdFx0XHRQcm9taXNlLmFsbChhU2VtYW50aWNPYmplY3RzUHJvbWlzZXMpXG5cdFx0XHRcdC50aGVuKGZ1bmN0aW9uKGFWYWx1ZXM6IGFueVtdKSB7XG5cdFx0XHRcdFx0Y29uc3QgYUdldExpbmtzUHJvbWlzZXMgPSBbXTtcblx0XHRcdFx0XHRsZXQgc1NlbU9iakV4cHJlc3Npb247XG5cdFx0XHRcdFx0Y29uc3QgYVNlbWFudGljT2JqZWN0c1Jlc29sdmVkID0gYVZhbHVlcy5maWx0ZXIoZnVuY3Rpb24oZWxlbWVudDogYW55KSB7XG5cdFx0XHRcdFx0XHRpZiAoXG5cdFx0XHRcdFx0XHRcdGVsZW1lbnQuc2VtYW50aWNPYmplY3QgIT09IHVuZGVmaW5lZCAmJlxuXHRcdFx0XHRcdFx0XHRlbGVtZW50LnNlbWFudGljT2JqZWN0LnNlbWFudGljT2JqZWN0ICYmXG5cdFx0XHRcdFx0XHRcdHR5cGVvZiBlbGVtZW50LnNlbWFudGljT2JqZWN0LnNlbWFudGljT2JqZWN0ID09PSBcIm9iamVjdFwiXG5cdFx0XHRcdFx0XHQpIHtcblx0XHRcdFx0XHRcdFx0c1NlbU9iakV4cHJlc3Npb24gPSBjb21waWxlQmluZGluZyhiaW5kaW5nRXhwcmVzc2lvbihlbGVtZW50LnNlbWFudGljT2JqZWN0LnNlbWFudGljT2JqZWN0LiRQYXRoKSk7XG5cdFx0XHRcdFx0XHRcdGVsZW1lbnQuc2VtYW50aWNPYmplY3Quc2VtYW50aWNPYmplY3QgPSBzU2VtT2JqRXhwcmVzc2lvbjtcblx0XHRcdFx0XHRcdFx0ZWxlbWVudC5zZW1hbnRpY09iamVjdEZvckdldExpbmtzWzBdLnNlbWFudGljT2JqZWN0ID0gc1NlbU9iakV4cHJlc3Npb247XG5cdFx0XHRcdFx0XHRcdHJldHVybiB0cnVlO1xuXHRcdFx0XHRcdFx0fSBlbHNlIGlmIChlbGVtZW50KSB7XG5cdFx0XHRcdFx0XHRcdHJldHVybiBlbGVtZW50LnNlbWFudGljT2JqZWN0ICE9PSB1bmRlZmluZWQ7XG5cdFx0XHRcdFx0XHR9IGVsc2Uge1xuXHRcdFx0XHRcdFx0XHRyZXR1cm4gZmFsc2U7XG5cdFx0XHRcdFx0XHR9XG5cdFx0XHRcdFx0fSk7XG5cdFx0XHRcdFx0Zm9yIChsZXQgaiA9IDA7IGogPCBhU2VtYW50aWNPYmplY3RzUmVzb2x2ZWQubGVuZ3RoOyBqKyspIHtcblx0XHRcdFx0XHRcdF9vU2VtYW50aWNPYmplY3QgPSBhU2VtYW50aWNPYmplY3RzUmVzb2x2ZWRbal07XG5cdFx0XHRcdFx0XHRpZiAoXG5cdFx0XHRcdFx0XHRcdF9vU2VtYW50aWNPYmplY3QgJiZcblx0XHRcdFx0XHRcdFx0X29TZW1hbnRpY09iamVjdC5zZW1hbnRpY09iamVjdCAmJlxuXHRcdFx0XHRcdFx0XHQhKF9vU2VtYW50aWNPYmplY3Quc2VtYW50aWNPYmplY3Quc2VtYW50aWNPYmplY3QuaW5kZXhPZihcIntcIikgPT09IDApXG5cdFx0XHRcdFx0XHQpIHtcblx0XHRcdFx0XHRcdFx0YVNlbWFudGljT2JqZWN0c0ZvckdldExpbmtzLnB1c2goX29TZW1hbnRpY09iamVjdC5zZW1hbnRpY09iamVjdEZvckdldExpbmtzKTtcblx0XHRcdFx0XHRcdFx0YVNlbWFudGljT2JqZWN0cy5wdXNoKHtcblx0XHRcdFx0XHRcdFx0XHRzZW1hbnRpY09iamVjdDogX29TZW1hbnRpY09iamVjdC5zZW1hbnRpY09iamVjdC5zZW1hbnRpY09iamVjdCxcblx0XHRcdFx0XHRcdFx0XHR1bmF2YWlsYWJsZUFjdGlvbnM6IF9vU2VtYW50aWNPYmplY3QudW5hdmFpbGFibGVBY3Rpb25zLFxuXHRcdFx0XHRcdFx0XHRcdHBhdGg6IGFTZW1hbnRpY09iamVjdHNSZXNvbHZlZFtqXS5zZW1hbnRpY09iamVjdFBhdGhcblx0XHRcdFx0XHRcdFx0fSk7XG5cdFx0XHRcdFx0XHRcdGFHZXRMaW5rc1Byb21pc2VzLnB1c2gob1NoZWxsU2VydmljZUhlbHBlci5nZXRMaW5rc1dpdGhDYWNoZShbX29TZW1hbnRpY09iamVjdC5zZW1hbnRpY09iamVjdEZvckdldExpbmtzXSkpO1xuXHRcdFx0XHRcdFx0fVxuXHRcdFx0XHRcdH1cblx0XHRcdFx0XHRyZXR1cm4gQ29tbW9uVXRpbHMudXBkYXRlU2VtYW50aWNUYXJnZXRzKGFHZXRMaW5rc1Byb21pc2VzLCBhU2VtYW50aWNPYmplY3RzLCBvSW50ZXJuYWxNb2RlbENvbnRleHQsIHNDdXJyZW50SGFzaCk7XG5cdFx0XHRcdH0pXG5cdFx0XHRcdC5jYXRjaChmdW5jdGlvbihvRXJyb3I6IGFueSkge1xuXHRcdFx0XHRcdExvZy5lcnJvcihcImZuR2V0U2VtYW50aWNUYXJnZXRzRnJvbVRhYmxlOiBDYW5ub3QgZ2V0IFNlbWFudGljIE9iamVjdHNcIiwgb0Vycm9yKTtcblx0XHRcdFx0fSk7XG5cdFx0fVxuXHR9IGVsc2Uge1xuXHRcdHJldHVybiBQcm9taXNlLnJlc29sdmUoKTtcblx0fVxufVxuZnVuY3Rpb24gZ2V0RmlsdGVyUmVzdHJpY3Rpb25zKG9GaWx0ZXJSZXN0cmljdGlvbnNBbm5vdGF0aW9uOiBhbnksIHNSZXN0cmljdGlvbjogYW55KSB7XG5cdGNvbnN0IEZpbHRlclJlc3RyaWN0aW9ucyA9IENvbW1vblV0aWxzLkZpbHRlclJlc3RyaWN0aW9ucztcblx0aWYgKHNSZXN0cmljdGlvbiA9PT0gRmlsdGVyUmVzdHJpY3Rpb25zLlJFUVVJUkVEX1BST1BFUlRJRVMgfHwgc1Jlc3RyaWN0aW9uID09PSBGaWx0ZXJSZXN0cmljdGlvbnMuTk9OX0ZJTFRFUkFCTEVfUFJPUEVSVElFUykge1xuXHRcdGxldCBhUHJvcHMgPSBbXTtcblx0XHRpZiAob0ZpbHRlclJlc3RyaWN0aW9uc0Fubm90YXRpb24gJiYgb0ZpbHRlclJlc3RyaWN0aW9uc0Fubm90YXRpb25bc1Jlc3RyaWN0aW9uXSkge1xuXHRcdFx0YVByb3BzID0gb0ZpbHRlclJlc3RyaWN0aW9uc0Fubm90YXRpb25bc1Jlc3RyaWN0aW9uXS5tYXAoZnVuY3Rpb24ob1Byb3BlcnR5OiBhbnkpIHtcblx0XHRcdFx0cmV0dXJuIG9Qcm9wZXJ0eS4kUHJvcGVydHlQYXRoO1xuXHRcdFx0fSk7XG5cdFx0fVxuXHRcdHJldHVybiBhUHJvcHM7XG5cdH0gZWxzZSBpZiAoc1Jlc3RyaWN0aW9uID09PSBGaWx0ZXJSZXN0cmljdGlvbnMuQUxMT1dFRF9FWFBSRVNTSU9OUykge1xuXHRcdGNvbnN0IG1BbGxvd2VkRXhwcmVzc2lvbnM6IGFueSA9IHt9O1xuXHRcdGlmIChvRmlsdGVyUmVzdHJpY3Rpb25zQW5ub3RhdGlvbiAmJiBvRmlsdGVyUmVzdHJpY3Rpb25zQW5ub3RhdGlvbi5GaWx0ZXJFeHByZXNzaW9uUmVzdHJpY3Rpb25zKSB7XG5cdFx0XHRvRmlsdGVyUmVzdHJpY3Rpb25zQW5ub3RhdGlvbi5GaWx0ZXJFeHByZXNzaW9uUmVzdHJpY3Rpb25zLmZvckVhY2goZnVuY3Rpb24ob1Byb3BlcnR5OiBhbnkpIHtcblx0XHRcdFx0Ly9TaW5nbGVWYWx1ZSB8IE11bHRpVmFsdWUgfCBTaW5nbGVSYW5nZSB8IE11bHRpUmFuZ2UgfCBTZWFyY2hFeHByZXNzaW9uIHwgTXVsdGlSYW5nZU9yU2VhcmNoRXhwcmVzc2lvblxuXHRcdFx0XHRpZiAobUFsbG93ZWRFeHByZXNzaW9uc1tvUHJvcGVydHkuUHJvcGVydHkuJFByb3BlcnR5UGF0aF0pIHtcblx0XHRcdFx0XHRtQWxsb3dlZEV4cHJlc3Npb25zW29Qcm9wZXJ0eS5Qcm9wZXJ0eS4kUHJvcGVydHlQYXRoXS5wdXNoKG9Qcm9wZXJ0eS5BbGxvd2VkRXhwcmVzc2lvbnMpO1xuXHRcdFx0XHR9IGVsc2Uge1xuXHRcdFx0XHRcdG1BbGxvd2VkRXhwcmVzc2lvbnNbb1Byb3BlcnR5LlByb3BlcnR5LiRQcm9wZXJ0eVBhdGhdID0gW29Qcm9wZXJ0eS5BbGxvd2VkRXhwcmVzc2lvbnNdO1xuXHRcdFx0XHR9XG5cdFx0XHR9KTtcblx0XHR9XG5cdFx0cmV0dXJuIG1BbGxvd2VkRXhwcmVzc2lvbnM7XG5cdH1cblx0Ly8gRGVmYXVsdCByZXR1cm4gdGhlIEZpbHRlclJlc3RyaWN0aW9ucyBBbm5vdGF0aW9uXG5cdHJldHVybiBvRmlsdGVyUmVzdHJpY3Rpb25zQW5ub3RhdGlvbjtcbn1cbmZ1bmN0aW9uIGdldEZpbHRlclJlc3RyaWN0aW9uc0J5UGF0aChzRW50aXR5U2V0UGF0aDogYW55LCBvTWV0YU1vZGVsOiBhbnkpIHtcblx0Y29uc3Qgb1JldDogYW55ID0ge30sXG5cdFx0RmlsdGVyUmVzdHJpY3Rpb25zID0gQ29tbW9uVXRpbHMuRmlsdGVyUmVzdHJpY3Rpb25zLFxuXHRcdG9GaWx0ZXJSZXN0cmljdGlvbnMgPSBzRW50aXR5U2V0UGF0aCA/IG9NZXRhTW9kZWwuZ2V0T2JqZWN0KHNFbnRpdHlTZXRQYXRoICsgXCJAT3JnLk9EYXRhLkNhcGFiaWxpdGllcy5WMS5GaWx0ZXJSZXN0cmljdGlvbnNcIikgOiB7fTtcblx0b1JldFtGaWx0ZXJSZXN0cmljdGlvbnMuUkVRVUlSRURfUFJPUEVSVElFU10gPSBnZXRGaWx0ZXJSZXN0cmljdGlvbnMob0ZpbHRlclJlc3RyaWN0aW9ucywgRmlsdGVyUmVzdHJpY3Rpb25zLlJFUVVJUkVEX1BST1BFUlRJRVMpIHx8IFtdO1xuXHRvUmV0W0ZpbHRlclJlc3RyaWN0aW9ucy5OT05fRklMVEVSQUJMRV9QUk9QRVJUSUVTXSA9XG5cdFx0Z2V0RmlsdGVyUmVzdHJpY3Rpb25zKG9GaWx0ZXJSZXN0cmljdGlvbnMsIEZpbHRlclJlc3RyaWN0aW9ucy5OT05fRklMVEVSQUJMRV9QUk9QRVJUSUVTKSB8fCBbXTtcblx0Ly9TaW5nbGVWYWx1ZSB8IE11bHRpVmFsdWUgfCBTaW5nbGVSYW5nZSB8IE11bHRpUmFuZ2UgfCBTZWFyY2hFeHByZXNzaW9uIHwgTXVsdGlSYW5nZU9yU2VhcmNoRXhwcmVzc2lvblxuXHRvUmV0W0ZpbHRlclJlc3RyaWN0aW9ucy5BTExPV0VEX0VYUFJFU1NJT05TXSA9IGdldEZpbHRlclJlc3RyaWN0aW9ucyhvRmlsdGVyUmVzdHJpY3Rpb25zLCBGaWx0ZXJSZXN0cmljdGlvbnMuQUxMT1dFRF9FWFBSRVNTSU9OUykgfHwge307XG5cblx0Y29uc3QgYVBhdGhQYXJ0cyA9IHNFbnRpdHlTZXRQYXRoLnNwbGl0KFwiL1wiKTtcblxuXHRpZiAoYVBhdGhQYXJ0cy5sZW5ndGggPiAyKSB7XG5cdFx0Ly8gSW4gbm9ybWFsIGZpbHRlcmJhciBzY2VuYXJpb3Mgc0VudGl0eVNldFBhdGggaXMgb2YgdGhlIGZvcm1hdCBcIi9DdXN0b21lclwiLlxuXHRcdC8vIEJ1dCwgSW4gY2FzZSBvZiBzRW50aXR5U2V0UGF0aCBvZiBmb3JtYXQgXCIvQ3VzdG9tZXIvU2V0XCIgdGhpcyBpcyB0byBjaGVjayBuYXZpZ2F0aW9uIHJlc3RyaWN0aW9ucyBvZiBcIkN1c3RvbWVyXCIgZm9yIG5vbi1maWx0ZXJhYmxlIHByb3BlcnRpZXMgaW4gXCJTZXRcIlxuXHRcdGNvbnN0IHNOYXZpZ2F0aW9uUGF0aCA9IGFQYXRoUGFydHNbYVBhdGhQYXJ0cy5sZW5ndGggLSAxXTtcblx0XHRhUGF0aFBhcnRzLnNwbGljZSgtMSwgMSk7IC8vIHJlbW92aW5nIE5hdmlnYXRpb25Qcm9wZXJ0eSBmcm9tIHRoZSBlbmQuXG5cdFx0Y29uc3Qgc1BhcmVudEVudGl0eVNldFBhdGggPSBhUGF0aFBhcnRzLmpvaW4oXCIvXCIpO1xuXHRcdGNvbnN0IG9OYXZpZ2F0aW9uUmVzdHJpY3Rpb25zID0gQ29tbW9uVXRpbHMuZ2V0TmF2aWdhdGlvblJlc3RyaWN0aW9ucyhvTWV0YU1vZGVsLCBzUGFyZW50RW50aXR5U2V0UGF0aCwgc05hdmlnYXRpb25QYXRoKTtcblx0XHRjb25zdCBvTmF2aWdhdGlvbkZpbHRlclJlc3RyaWN0aW9ucyA9IG9OYXZpZ2F0aW9uUmVzdHJpY3Rpb25zICYmIG9OYXZpZ2F0aW9uUmVzdHJpY3Rpb25zW1wiRmlsdGVyUmVzdHJpY3Rpb25zXCJdO1xuXHRcdG9SZXRbRmlsdGVyUmVzdHJpY3Rpb25zLlJFUVVJUkVEX1BST1BFUlRJRVNdLmNvbmNhdChcblx0XHRcdGdldEZpbHRlclJlc3RyaWN0aW9ucyhvTmF2aWdhdGlvbkZpbHRlclJlc3RyaWN0aW9ucywgRmlsdGVyUmVzdHJpY3Rpb25zLlJFUVVJUkVEX1BST1BFUlRJRVMpIHx8IFtdXG5cdFx0KTtcblx0XHRvUmV0W0ZpbHRlclJlc3RyaWN0aW9ucy5OT05fRklMVEVSQUJMRV9QUk9QRVJUSUVTXS5jb25jYXQoXG5cdFx0XHRnZXRGaWx0ZXJSZXN0cmljdGlvbnMob05hdmlnYXRpb25GaWx0ZXJSZXN0cmljdGlvbnMsIEZpbHRlclJlc3RyaWN0aW9ucy5OT05fRklMVEVSQUJMRV9QUk9QRVJUSUVTKSB8fCBbXVxuXHRcdCk7XG5cdFx0Ly9TaW5nbGVWYWx1ZSB8IE11bHRpVmFsdWUgfCBTaW5nbGVSYW5nZSB8IE11bHRpUmFuZ2UgfCBTZWFyY2hFeHByZXNzaW9uIHwgTXVsdGlSYW5nZU9yU2VhcmNoRXhwcmVzc2lvblxuXHRcdG9SZXRbRmlsdGVyUmVzdHJpY3Rpb25zLkFMTE9XRURfRVhQUkVTU0lPTlNdID0gbWVyZ2VPYmplY3RzKFxuXHRcdFx0e30sXG5cdFx0XHRnZXRGaWx0ZXJSZXN0cmljdGlvbnMob05hdmlnYXRpb25GaWx0ZXJSZXN0cmljdGlvbnMsIEZpbHRlclJlc3RyaWN0aW9ucy5BTExPV0VEX0VYUFJFU1NJT05TKSB8fCB7fSxcblx0XHRcdG9SZXRbRmlsdGVyUmVzdHJpY3Rpb25zLkFMTE9XRURfRVhQUkVTU0lPTlNdXG5cdFx0KTtcblx0fVxuXG5cdHJldHVybiBvUmV0O1xufVxuZnVuY3Rpb24gdGVtcGxhdGVDb250cm9sRnJhZ21lbnQoc0ZyYWdtZW50TmFtZTogYW55LCBvUHJlcHJvY2Vzc29yU2V0dGluZ3M6IGFueSwgb09wdGlvbnM6IGFueSwgb01vZGlmaWVyPzogYW55KSB7XG5cdG9PcHRpb25zID0gb09wdGlvbnMgfHwge307XG5cdGlmIChvTW9kaWZpZXIpIHtcblx0XHRyZXR1cm4gb01vZGlmaWVyLnRlbXBsYXRlQ29udHJvbEZyYWdtZW50KHNGcmFnbWVudE5hbWUsIG9QcmVwcm9jZXNzb3JTZXR0aW5ncywgb09wdGlvbnMudmlldykudGhlbihmdW5jdGlvbihvRnJhZ21lbnQ6IGFueSkge1xuXHRcdFx0Ly8gVGhpcyBpcyByZXF1aXJlZCBhcyBGbGV4IHJldHVybnMgYW4gSFRNTENvbGxlY3Rpb24gYXMgdGVtcGxhdGluZyByZXN1bHQgaW4gWE1MIHRpbWUuXG5cdFx0XHRyZXR1cm4gb01vZGlmaWVyLnRhcmdldHMgPT09IFwieG1sVHJlZVwiICYmIG9GcmFnbWVudC5sZW5ndGggPiAwID8gb0ZyYWdtZW50WzBdIDogb0ZyYWdtZW50O1xuXHRcdH0pO1xuXHR9IGVsc2Uge1xuXHRcdHJldHVybiBsb2FkTWFjcm9MaWJyYXJ5KClcblx0XHRcdC50aGVuKGZ1bmN0aW9uKCkge1xuXHRcdFx0XHRyZXR1cm4gWE1MUHJlcHJvY2Vzc29yLnByb2Nlc3MoXG5cdFx0XHRcdFx0WE1MVGVtcGxhdGVQcm9jZXNzb3IubG9hZFRlbXBsYXRlKHNGcmFnbWVudE5hbWUsIFwiZnJhZ21lbnRcIiksXG5cdFx0XHRcdFx0eyBuYW1lOiBzRnJhZ21lbnROYW1lIH0sXG5cdFx0XHRcdFx0b1ByZXByb2Nlc3NvclNldHRpbmdzXG5cdFx0XHRcdCk7XG5cdFx0XHR9KVxuXHRcdFx0LnRoZW4oZnVuY3Rpb24ob0ZyYWdtZW50OiBhbnkpIHtcblx0XHRcdFx0Y29uc3Qgb0NvbnRyb2wgPSBvRnJhZ21lbnQuZmlyc3RFbGVtZW50Q2hpbGQ7XG5cdFx0XHRcdGlmICghIW9PcHRpb25zLmlzWE1MICYmIG9Db250cm9sKSB7XG5cdFx0XHRcdFx0cmV0dXJuIG9Db250cm9sO1xuXHRcdFx0XHR9XG5cdFx0XHRcdHJldHVybiBGcmFnbWVudC5sb2FkKHtcblx0XHRcdFx0XHRpZDogb09wdGlvbnMuaWQsXG5cdFx0XHRcdFx0ZGVmaW5pdGlvbjogb0ZyYWdtZW50LFxuXHRcdFx0XHRcdGNvbnRyb2xsZXI6IG9PcHRpb25zLmNvbnRyb2xsZXJcblx0XHRcdFx0fSk7XG5cdFx0XHR9KTtcblx0fVxufVxuZnVuY3Rpb24gZ2V0U2luZ2xldG9uUGF0aChwYXRoOiBzdHJpbmcsIG1ldGFNb2RlbDogT0RhdGFNZXRhTW9kZWwpOiBzdHJpbmcgfCB1bmRlZmluZWQge1xuXHRjb25zdCBwYXJ0cyA9IHBhdGguc3BsaXQoXCIvXCIpLmZpbHRlcihCb29sZWFuKSxcblx0XHRwcm9wZXJ0eU5hbWUgPSBwYXJ0cy5wb3AoKSxcblx0XHRuYXZpZ2F0aW9uUGF0aCA9IHBhcnRzLmpvaW4oXCIvXCIpLFxuXHRcdGVudGl0eVNldCA9IG5hdmlnYXRpb25QYXRoICYmIG1ldGFNb2RlbC5nZXRPYmplY3QoXCIvXCIgKyBuYXZpZ2F0aW9uUGF0aCk7XG5cdGlmIChlbnRpdHlTZXQ/LiRraW5kID09PSBcIlNpbmdsZXRvblwiKSB7XG5cdFx0Y29uc3Qgc2luZ2xldG9uTmFtZSA9IHBhcnRzW3BhcnRzLmxlbmd0aCAtIDFdO1xuXHRcdHJldHVybiBcIi9cIiArIHNpbmdsZXRvbk5hbWUgKyBcIi9cIiArIHByb3BlcnR5TmFtZTtcblx0fVxuXHRyZXR1cm4gdW5kZWZpbmVkO1xufVxuZnVuY3Rpb24gcmVxdWVzdFNpbmdsZXRvblByb3BlcnR5KHBhdGg6IHN0cmluZywgbW9kZWw6IE9EYXRhTW9kZWwpIHtcblx0aWYgKCFwYXRoIHx8ICFtb2RlbCkge1xuXHRcdHJldHVybiBQcm9taXNlLnJlc29sdmUobnVsbCk7XG5cdH1cblx0Y29uc3QgbWV0YU1vZGVsID0gbW9kZWwuZ2V0TWV0YU1vZGVsKCk7XG5cdC8vIEZpbmQgdGhlIHVuZGVybHlpbmcgZW50aXR5IHNldCBmcm9tIHRoZSBwcm9wZXJ0eSBwYXRoIGFuZCBjaGVjayB3aGV0aGVyIGl0IGlzIGEgc2luZ2xldG9uLlxuXHRjb25zdCByZXNvbHZlZFBhdGggPSBnZXRTaW5nbGV0b25QYXRoKHBhdGgsIG1ldGFNb2RlbCk7XG5cdGlmIChyZXNvbHZlZFBhdGgpIHtcblx0XHRjb25zdCBwcm9wZXJ0eUJpbmRpbmcgPSBtb2RlbC5iaW5kUHJvcGVydHkocmVzb2x2ZWRQYXRoKTtcblx0XHRyZXR1cm4gcHJvcGVydHlCaW5kaW5nLnJlcXVlc3RWYWx1ZSgpO1xuXHR9XG5cblx0cmV0dXJuIFByb21pc2UucmVzb2x2ZShudWxsKTtcbn1cbmZ1bmN0aW9uIGFkZEV2ZW50VG9CaW5kaW5nSW5mbyhvQ29udHJvbDogQ29udHJvbCwgc0V2ZW50TmFtZTogc3RyaW5nLCBmSGFuZGxlcjogRnVuY3Rpb24pIHtcblx0bGV0IG9CaW5kaW5nSW5mbzogYW55O1xuXHRjb25zdCBzZXRCaW5kaW5nSW5mbyA9IGZ1bmN0aW9uKCkge1xuXHRcdGlmIChvQmluZGluZ0luZm8pIHtcblx0XHRcdGlmICghb0JpbmRpbmdJbmZvLmV2ZW50cykge1xuXHRcdFx0XHRvQmluZGluZ0luZm8uZXZlbnRzID0ge307XG5cdFx0XHR9XG5cdFx0XHRpZiAoIW9CaW5kaW5nSW5mby5ldmVudHNbc0V2ZW50TmFtZV0pIHtcblx0XHRcdFx0b0JpbmRpbmdJbmZvLmV2ZW50c1tzRXZlbnROYW1lXSA9IGZIYW5kbGVyO1xuXHRcdFx0fSBlbHNlIHtcblx0XHRcdFx0Y29uc3QgZk9yaWdpbmFsSGFuZGxlciA9IG9CaW5kaW5nSW5mby5ldmVudHNbc0V2ZW50TmFtZV07XG5cdFx0XHRcdG9CaW5kaW5nSW5mby5ldmVudHNbc0V2ZW50TmFtZV0gPSBmdW5jdGlvbiguLi5hcmdzOiBhbnlbXSkge1xuXHRcdFx0XHRcdGZIYW5kbGVyLmFwcGx5KHRoaXMsIC4uLmFyZ3MpO1xuXHRcdFx0XHRcdGZPcmlnaW5hbEhhbmRsZXIuYXBwbHkodGhpcywgLi4uYXJncyk7XG5cdFx0XHRcdH07XG5cdFx0XHR9XG5cdFx0fVxuXHR9O1xuXHRpZiAob0NvbnRyb2wuaXNBKFwic2FwLnVpLm1kYy5DaGFydFwiKSkge1xuXHRcdChvQ29udHJvbCBhcyBhbnkpXG5cdFx0XHQuaW5uZXJDaGFydEJvdW5kKClcblx0XHRcdC50aGVuKGZ1bmN0aW9uKCkge1xuXHRcdFx0XHRvQmluZGluZ0luZm8gPSAob0NvbnRyb2wgYXMgYW55KVxuXHRcdFx0XHRcdC5nZXRDb250cm9sRGVsZWdhdGUoKVxuXHRcdFx0XHRcdC5fZ2V0Q2hhcnQob0NvbnRyb2wpXG5cdFx0XHRcdFx0LmdldEJpbmRpbmdJbmZvKFwiZGF0YVwiKTtcblx0XHRcdFx0c2V0QmluZGluZ0luZm8oKTtcblx0XHRcdH0pXG5cdFx0XHQuY2F0Y2goZnVuY3Rpb24oc0Vycm9yOiBhbnkpIHtcblx0XHRcdFx0TG9nLmVycm9yKHNFcnJvcik7XG5cdFx0XHR9KTtcblx0fSBlbHNlIHtcblx0XHRvQmluZGluZ0luZm8gPSBvQ29udHJvbC5kYXRhKFwicm93c0JpbmRpbmdJbmZvXCIpO1xuXHRcdHNldEJpbmRpbmdJbmZvKCk7XG5cdH1cbn1cbmZ1bmN0aW9uIGxvYWRNYWNyb0xpYnJhcnkoKSB7XG5cdHJldHVybiBuZXcgUHJvbWlzZTx2b2lkPihmdW5jdGlvbihyZXNvbHZlKSB7XG5cdFx0c2FwLnVpLnJlcXVpcmUoW1wic2FwL2ZlL21hY3Jvcy9tYWNyb0xpYnJhcnlcIl0sIGZ1bmN0aW9uKC8qbWFjcm9MaWJyYXJ5Ki8pIHtcblx0XHRcdHJlc29sdmUoKTtcblx0XHR9KTtcblx0fSk7XG59XG5cbmZ1bmN0aW9uIGZuT25TdHJpY3RIYW5kbGluZ0ZhaWxlZChzR3JvdXBJZDogc3RyaW5nLCBhY3Rpb25OYW1lOiBzdHJpbmcsIG9Nb2RlbDogT0RhdGFNb2RlbCwgYU1lc3NhZ2VzOiBhbnlbXSkge1xuXHRjb25zdCBsb2NhbEkxOG5SZWYgPSBzYXAudWkuZ2V0Q29yZSgpLmdldExpYnJhcnlSZXNvdXJjZUJ1bmRsZShcInNhcC5mZS5jb3JlXCIpIGFzIFJlc291cmNlQnVuZGxlLFxuXHRcdHNBY3Rpb25OYW1lID0gYWN0aW9uTmFtZSxcblx0XHRzQ2FuY2VsQnV0dG9uVHh0ID0gbG9jYWxJMThuUmVmLmdldFRleHQoXCJDQU5DRUxcIik7XG5cdGlmIChhTWVzc2FnZXMubGVuZ3RoID09PSAxKSB7XG5cdFx0Y29uc3Qgc01lc3NhZ2UgPSBhTWVzc2FnZXNbMF0ubWVzc2FnZSArIFwiXFxuXCIgKyBsb2NhbEkxOG5SZWYuZ2V0VGV4dChcIlBST0NFRURcIik7XG5cdFx0Y29uc3QgZGlhbG9nUHJvbWlzZSA9IG5ldyBQcm9taXNlKGZ1bmN0aW9uKHJlc29sdmUpIHtcblx0XHRcdE1lc3NhZ2VCb3gud2FybmluZyhzTWVzc2FnZSwge1xuXHRcdFx0XHR0aXRsZTogbG9jYWxJMThuUmVmLmdldFRleHQoXCJXQVJOSU5HXCIpLFxuXHRcdFx0XHRhY3Rpb25zOiBbc0FjdGlvbk5hbWUsIHNDYW5jZWxCdXR0b25UeHRdLFxuXHRcdFx0XHRlbXBoYXNpemVkQWN0aW9uOiBzQWN0aW9uTmFtZSxcblx0XHRcdFx0b25DbG9zZTogZnVuY3Rpb24oc0FjdGlvbjogc3RyaW5nKSB7XG5cdFx0XHRcdFx0aWYgKHNBY3Rpb24gPT09IHNBY3Rpb25OYW1lKSB7XG5cdFx0XHRcdFx0XHRyZXNvbHZlKHRydWUpO1xuXHRcdFx0XHRcdFx0b01vZGVsLnN1Ym1pdEJhdGNoKHNHcm91cElkKTtcblx0XHRcdFx0XHR9IGVsc2Uge1xuXHRcdFx0XHRcdFx0cmVzb2x2ZShmYWxzZSk7XG5cdFx0XHRcdFx0fVxuXHRcdFx0XHR9XG5cdFx0XHR9KTtcblx0XHR9KTtcblx0XHRyZXR1cm4gZGlhbG9nUHJvbWlzZTtcblx0fVxuXHRyZXR1cm4gbmV3IFByb21pc2UoZnVuY3Rpb24ocmVzb2x2ZSkge1xuXHRcdGNvbnN0IG9NZXNzYWdlRGlhbG9nTW9kZWwgPSBuZXcgSlNPTk1vZGVsKCk7XG5cdFx0b01lc3NhZ2VEaWFsb2dNb2RlbC5zZXREYXRhKGFNZXNzYWdlcyk7XG5cdFx0Y29uc3QgYlN0cmljdEhhbmRsaW5nRmxvdyA9IHRydWU7XG5cdFx0Y29uc3Qgb01lc3NhZ2VPYmplY3QgPSBtZXNzYWdlSGFuZGxpbmcucHJlcGFyZU1lc3NhZ2VWaWV3Rm9yRGlhbG9nKG9NZXNzYWdlRGlhbG9nTW9kZWwsIGJTdHJpY3RIYW5kbGluZ0Zsb3cpO1xuXHRcdGNvbnN0IG9EaWFsb2cgPSBuZXcgRGlhbG9nKHtcblx0XHRcdHJlc2l6YWJsZTogdHJ1ZSxcblx0XHRcdGNvbnRlbnQ6IG9NZXNzYWdlT2JqZWN0Lm9NZXNzYWdlVmlldyxcblx0XHRcdHN0YXRlOiBcIldhcm5pbmdcIixcblx0XHRcdGN1c3RvbUhlYWRlcjogbmV3IEJhcih7XG5cdFx0XHRcdGNvbnRlbnRMZWZ0OiBbb01lc3NhZ2VPYmplY3Qub0JhY2tCdXR0b25dLFxuXHRcdFx0XHRjb250ZW50TWlkZGxlOiBbbmV3IFRpdGxlKHsgdGV4dDogXCJXYXJuaW5nXCIgfSldXG5cdFx0XHR9KSxcblx0XHRcdGNvbnRlbnRIZWlnaHQ6IFwiNTAlXCIsXG5cdFx0XHRjb250ZW50V2lkdGg6IFwiNTAlXCIsXG5cdFx0XHR2ZXJ0aWNhbFNjcm9sbGluZzogZmFsc2Vcblx0XHR9KTtcblx0XHRvRGlhbG9nLnNldEJlZ2luQnV0dG9uKFxuXHRcdFx0bmV3IEJ1dHRvbih7XG5cdFx0XHRcdHByZXNzOiBmdW5jdGlvbigpIHtcblx0XHRcdFx0XHRyZXNvbHZlKHRydWUpO1xuXHRcdFx0XHRcdG9Nb2RlbC5zdWJtaXRCYXRjaChzR3JvdXBJZCk7XG5cdFx0XHRcdFx0b0RpYWxvZy5jbG9zZSgpO1xuXHRcdFx0XHR9LFxuXHRcdFx0XHR0eXBlOiBcIkVtcGhhc2l6ZWRcIixcblx0XHRcdFx0dGV4dDogZ2V0VHJhbnNsYXRlZFRleHQoXCJJR05PUkVcIiwgbG9jYWxJMThuUmVmLCBzQWN0aW9uTmFtZSlcblx0XHRcdH0pXG5cdFx0KTtcblx0XHRvRGlhbG9nLnNldEVuZEJ1dHRvbihcblx0XHRcdG5ldyBCdXR0b24oe1xuXHRcdFx0XHRwcmVzczogZnVuY3Rpb24oKSB7XG5cdFx0XHRcdFx0cmVzb2x2ZShmYWxzZSk7XG5cdFx0XHRcdFx0b0RpYWxvZy5jbG9zZSgpO1xuXHRcdFx0XHR9LFxuXHRcdFx0XHR0ZXh0OiBzQ2FuY2VsQnV0dG9uVHh0XG5cdFx0XHR9KVxuXHRcdCk7XG5cdFx0b0RpYWxvZy5vcGVuKCk7XG5cdH0pO1xufVxuY29uc3QgQ29tbW9uVXRpbHMgPSB7XG5cdGlzUHJvcGVydHlGaWx0ZXJhYmxlOiBpc1Byb3BlcnR5RmlsdGVyYWJsZSxcblx0aXNGaWVsZENvbnRyb2xQYXRoSW5hcHBsaWNhYmxlOiBpc0ZpZWxkQ29udHJvbFBhdGhJbmFwcGxpY2FibGUsXG5cdHJlbW92ZVNlbnNpdGl2ZURhdGE6IHJlbW92ZVNlbnNpdGl2ZURhdGEsXG5cdGZpcmVCdXR0b25QcmVzczogZm5GaXJlQnV0dG9uUHJlc3MsXG5cdGdldFRhcmdldFZpZXc6IGdldFRhcmdldFZpZXcsXG5cdGhhc1RyYW5zaWVudENvbnRleHQ6IGZuSGFzVHJhbnNpZW50Q29udGV4dHMsXG5cdHVwZGF0ZVJlbGF0ZWRBcHBzRGV0YWlsczogZm5VcGRhdGVSZWxhdGVkQXBwc0RldGFpbHMsXG5cdHJlc29sdmVTdHJpbmd0b0Jvb2xlYW46IGZuUmVzb2x2ZVN0cmluZ3RvQm9vbGVhbixcblx0Z2V0QXBwQ29tcG9uZW50OiBnZXRBcHBDb21wb25lbnQsXG5cdHByb2Nlc3NEYXRhTG9zc0NvbmZpcm1hdGlvbjogZm5Qcm9jZXNzRGF0YUxvc3NDb25maXJtYXRpb24sXG5cdGdldE1hbmRhdG9yeUZpbHRlckZpZWxkczogZm5HZXRNYW5kYXRvcnlGaWx0ZXJGaWVsZHMsXG5cdGdldENvbnRleHRQYXRoUHJvcGVydGllczogZm5HZXRDb250ZXh0UGF0aFByb3BlcnRpZXMsXG5cdGdldFBhcmFtZXRlckluZm86IGdldFBhcmFtZXRlckluZm8sXG5cdHVwZGF0ZURhdGFGaWVsZEZvcklCTkJ1dHRvbnNWaXNpYmlsaXR5OiBmblVwZGF0ZURhdGFGaWVsZEZvcklCTkJ1dHRvbnNWaXNpYmlsaXR5LFxuXHRnZXRUcmFuc2xhdGVkVGV4dDogZ2V0VHJhbnNsYXRlZFRleHQsXG5cdGdldEVudGl0eVNldE5hbWU6IGdldEVudGl0eVNldE5hbWUsXG5cdGdldEFjdGlvblBhdGg6IGdldEFjdGlvblBhdGgsXG5cdGNvbXB1dGVEaXNwbGF5TW9kZTogY29tcHV0ZURpc3BsYXlNb2RlLFxuXHRzZXRBY3Rpb25FbmFibGVtZW50OiBzZXRBY3Rpb25FbmFibGVtZW50LFxuXHRpc1N0aWNreUVkaXRNb2RlOiBpc1N0aWNreUVkaXRNb2RlLFxuXHRnZXRPcGVyYXRvcnNGb3JQcm9wZXJ0eTogZ2V0T3BlcmF0b3JzRm9yUHJvcGVydHksXG5cdGFkZFNlbGVjdGlvblZhcmlhbnRUb0NvbmRpdGlvbnM6IGFkZFNlbGVjdGlvblZhcmlhbnRUb0NvbmRpdGlvbnMsXG5cdGFkZEV4dGVybmFsU3RhdGVGaWx0ZXJzVG9TZWxlY3Rpb25WYXJpYW50OiBhZGRFeHRlcm5hbFN0YXRlRmlsdGVyc1RvU2VsZWN0aW9uVmFyaWFudCxcblx0YWRkUGFnZUNvbnRleHRUb1NlbGVjdGlvblZhcmlhbnQ6IGFkZFBhZ2VDb250ZXh0VG9TZWxlY3Rpb25WYXJpYW50LFxuXHRhZGREZWZhdWx0RGlzcGxheUN1cnJlbmN5OiBhZGREZWZhdWx0RGlzcGxheUN1cnJlbmN5LFxuXHRnZXROb25Db21wdXRlZFZpc2libGVGaWVsZHM6IGdldE5vbkNvbXB1dGVkVmlzaWJsZUZpZWxkcyxcblx0c2V0VXNlckRlZmF1bHRzOiBzZXRVc2VyRGVmYXVsdHMsXG5cdGdldFNoZWxsU2VydmljZXM6IGdldFNoZWxsU2VydmljZXMsXG5cdGdldEhhc2g6IGdldEhhc2gsXG5cdGdldElCTkFjdGlvbnM6IGZuR2V0SUJOQWN0aW9ucyxcblx0Z2V0SGVhZGVyRmFjZXRJdGVtQ29uZmlnRm9yRXh0ZXJuYWxOYXZpZ2F0aW9uOiBnZXRIZWFkZXJGYWNldEl0ZW1Db25maWdGb3JFeHRlcm5hbE5hdmlnYXRpb24sXG5cdGdldFNlbWFudGljT2JqZWN0TWFwcGluZzogZ2V0U2VtYW50aWNPYmplY3RNYXBwaW5nLFxuXHRzZXRTZW1hbnRpY09iamVjdE1hcHBpbmdzOiBzZXRTZW1hbnRpY09iamVjdE1hcHBpbmdzLFxuXHRnZXRTZW1hbnRpY09iamVjdFByb21pc2U6IGZuR2V0U2VtYW50aWNPYmplY3RQcm9taXNlLFxuXHRnZXRTZW1hbnRpY1RhcmdldHNGcm9tUGFnZU1vZGVsOiBmbkdldFNlbWFudGljVGFyZ2V0c0Zyb21QYWdlTW9kZWwsXG5cdGdldFNlbWFudGljT2JqZWN0c0Zyb21QYXRoOiBmbkdldFNlbWFudGljT2JqZWN0c0Zyb21QYXRoLFxuXHR1cGRhdGVTZW1hbnRpY1RhcmdldHM6IGZuVXBkYXRlU2VtYW50aWNUYXJnZXRzTW9kZWwsXG5cdGdldFByb3BlcnR5RGF0YVR5cGU6IGdldFByb3BlcnR5RGF0YVR5cGUsXG5cdGdldE5hdmlnYXRpb25SZXN0cmljdGlvbnM6IGdldE5hdmlnYXRpb25SZXN0cmljdGlvbnMsXG5cdGdldFNlYXJjaFJlc3RyaWN0aW9uczogZ2V0U2VhcmNoUmVzdHJpY3Rpb25zLFxuXHRnZXRGaWx0ZXJSZXN0cmljdGlvbnNCeVBhdGg6IGdldEZpbHRlclJlc3RyaWN0aW9uc0J5UGF0aCxcblx0Z2V0U3BlY2lmaWNBbGxvd2VkRXhwcmVzc2lvbjogZ2V0U3BlY2lmaWNBbGxvd2VkRXhwcmVzc2lvbixcblx0Z2V0QWRkaXRpb25hbFBhcmFtc0ZvckNyZWF0ZTogZ2V0QWRkaXRpb25hbFBhcmFtc0ZvckNyZWF0ZSxcblx0cmVxdWVzdFNpbmdsZXRvblByb3BlcnR5OiByZXF1ZXN0U2luZ2xldG9uUHJvcGVydHksXG5cdHRlbXBsYXRlQ29udHJvbEZyYWdtZW50OiB0ZW1wbGF0ZUNvbnRyb2xGcmFnbWVudCxcblx0YWRkRXZlbnRUb0JpbmRpbmdJbmZvOiBhZGRFdmVudFRvQmluZGluZ0luZm8sXG5cdEZpbHRlclJlc3RyaWN0aW9uczoge1xuXHRcdFJFUVVJUkVEX1BST1BFUlRJRVM6IFwiUmVxdWlyZWRQcm9wZXJ0aWVzXCIsXG5cdFx0Tk9OX0ZJTFRFUkFCTEVfUFJPUEVSVElFUzogXCJOb25GaWx0ZXJhYmxlUHJvcGVydGllc1wiLFxuXHRcdEFMTE9XRURfRVhQUkVTU0lPTlM6IFwiRmlsdGVyQWxsb3dlZEV4cHJlc3Npb25zXCJcblx0fSxcblx0QWxsb3dlZEV4cHJlc3Npb25zUHJpbzogW1wiU2luZ2xlVmFsdWVcIiwgXCJNdWx0aVZhbHVlXCIsIFwiU2luZ2xlUmFuZ2VcIiwgXCJNdWx0aVJhbmdlXCIsIFwiU2VhcmNoRXhwcmVzc2lvblwiLCBcIk11bHRpUmFuZ2VPclNlYXJjaEV4cHJlc3Npb25cIl0sXG5cdGZuUHJvY2Vzc0RhdGFMb3NzT3JEcmFmdERpc2NhcmRDb25maXJtYXRpb246IGZuUHJvY2Vzc0RhdGFMb3NzT3JEcmFmdERpc2NhcmRDb25maXJtYXRpb24sXG5cdG5vcm1hbGl6ZVNlYXJjaFRlcm06IG5vcm1hbGl6ZVNlYXJjaFRlcm0sXG5cdGZuT25TdHJpY3RIYW5kbGluZ0ZhaWxlZDogZm5PblN0cmljdEhhbmRsaW5nRmFpbGVkLFxuXHRnZXRTaW5nbGV0b25QYXRoOiBnZXRTaW5nbGV0b25QYXRoXG59O1xuXG5leHBvcnQgZGVmYXVsdCBDb21tb25VdGlscztcbiJdfQ==
2223
+ //# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIkNvbW1vblV0aWxzLnRzIl0sIm5hbWVzIjpbIlByb2dyYW1taW5nTW9kZWwiLCJsaWJyYXJ5IiwiYVZhbGlkVHlwZXMiLCJub3JtYWxpemVTZWFyY2hUZXJtIiwic1NlYXJjaFRlcm0iLCJ1bmRlZmluZWQiLCJyZXBsYWNlIiwic3BsaXQiLCJyZWR1Y2UiLCJzTm9ybWFsaXplZCIsInNDdXJyZW50V29yZCIsImdldFByb3BlcnR5RGF0YVR5cGUiLCJvTmF2aWdhdGlvbkNvbnRleHQiLCJzRGF0YVR5cGUiLCJnZXRQcm9wZXJ0eSIsInNBbm5vdGF0aW9uUGF0aCIsImluZGV4T2YiLCJmbkhhc1RyYW5zaWVudENvbnRleHRzIiwib0xpc3RCaW5kaW5nIiwiYkhhc1RyYW5zaWVudENvbnRleHRzIiwiZ2V0Q3VycmVudENvbnRleHRzIiwiZm9yRWFjaCIsIm9Db250ZXh0IiwiaXNUcmFuc2llbnQiLCJnZXRTZWFyY2hSZXN0cmljdGlvbnMiLCJzRnVsbFBhdGgiLCJvTWV0YU1vZGVsIiwiaSIsImFOYXZpZ2F0aW9uUGFydHMiLCJzUGF0aCIsImxlbmd0aCIsIm9OYXZpZ2F0aW9uUmVzdHJpY3Rpb25zIiwiZ2V0TmF2aWdhdGlvblJlc3RyaWN0aW9ucyIsImdldE9iamVjdCIsIm9Nb2RlbCIsInNFbnRpdHlTZXRQYXRoIiwic05hdmlnYXRpb25QYXRoIiwiYVJlc3RyaWN0ZWRQcm9wZXJ0aWVzIiwiUmVzdHJpY3RlZFByb3BlcnRpZXMiLCJmaW5kIiwib1Jlc3RyaWN0ZWRQcm9wZXJ0eSIsIk5hdmlnYXRpb25Qcm9wZXJ0eSIsIiROYXZpZ2F0aW9uUHJvcGVydHlQYXRoIiwiX2lzSW5Ob25GaWx0ZXJhYmxlUHJvcGVydGllcyIsInNDb250ZXh0UGF0aCIsImJJc05vdEZpbHRlcmFibGUiLCJvQW5ub3RhdGlvbiIsIk5vbkZpbHRlcmFibGVQcm9wZXJ0aWVzIiwic29tZSIsInByb3BlcnR5IiwiJFByb3BlcnR5UGF0aCIsIl9pc0NvbnRleHRQYXRoRmlsdGVyYWJsZSIsInNDb250ZXhQYXRoIiwiYUVTUGFydHMiLCJzcGxpY2UiLCJhQ29udGV4dCIsInNDb250ZXh0Iiwiam9pbiIsIml0ZW0iLCJpbmRleCIsImFycmF5Iiwib0ZpbHRlclJlc3RyaWN0aW9ucyIsIkZpbHRlclJlc3RyaWN0aW9ucyIsImFOb25GaWx0ZXJhYmxlUHJvcGVydGllcyIsInNUYXJnZXRQcm9wZXJ0eVBhdGgiLCJvUHJvcGVydHlQYXRoIiwiaXNQcm9wZXJ0eUZpbHRlcmFibGUiLCJzUHJvcGVydHkiLCJiU2tpcEhpZGRlbkZpbHRlciIsIkVycm9yIiwiYklzRmlsdGVyYWJsZSIsImNyZWF0ZUJpbmRpbmdDb250ZXh0Iiwic1Byb3BlcnR5RGF0YVR5cGUiLCJnZXRTaGVsbFNlcnZpY2VzIiwib0NvbnRyb2wiLCJnZXRBcHBDb21wb25lbnQiLCJnZXRIYXNoIiwic0hhc2giLCJ3aW5kb3ciLCJsb2NhdGlvbiIsImhhc2giLCJfZ2V0U09JbnRlbnRzIiwib09iamVjdFBhZ2VMYXlvdXQiLCJvU2VtYW50aWNPYmplY3QiLCJvUGFyYW0iLCJvU2hlbGxTZXJ2aWNlSGVscGVyIiwiQ29tbW9uVXRpbHMiLCJnZXRMaW5rcyIsInNlbWFudGljT2JqZWN0IiwicGFyYW1zIiwiX2NyZWF0ZU1hcHBpbmdzIiwib01hcHBpbmciLCJhU09NYXBwaW5ncyIsImFNYXBwaW5nS2V5cyIsIk9iamVjdCIsImtleXMiLCJvU2VtYW50aWNNYXBwaW5nIiwicHVzaCIsIl9nZXRSZWxhdGVkQXBwc01lbnVJdGVtcyIsImFMaW5rcyIsImFFeGNsdWRlZEFjdGlvbnMiLCJvVGFyZ2V0UGFyYW1zIiwiYUl0ZW1zIiwib0xpbmsiLCJzSW50ZW50IiwiaW50ZW50Iiwic0FjdGlvbiIsInRleHQiLCJ0YXJnZXRTZW1PYmplY3QiLCJ0YXJnZXRBY3Rpb24iLCJ0YXJnZXRQYXJhbXMiLCJfZ2V0UmVsYXRlZEludGVudHMiLCJvQWRkaXRpb25hbFNlbWFudGljT2JqZWN0cyIsIm9CaW5kaW5nQ29udGV4dCIsImFNYW5pZmVzdFNPSXRlbXMiLCJ1bmF2YWlsYWJsZUFjdGlvbnMiLCJtYXBwaW5nIiwibmF2aWdhdGlvbkNvbnRleHRzIiwic2VtYW50aWNPYmplY3RNYXBwaW5nIiwidXBkYXRlUmVsYXRlQXBwc01vZGVsIiwib0VudHJ5IiwiYVNlbUtleXMiLCJvTWV0YVBhdGgiLCJzQ3VycmVudFNlbU9iaiIsInNDdXJyZW50QWN0aW9uIiwib1NlbWFudGljT2JqZWN0QW5ub3RhdGlvbnMiLCJhUmVsYXRlZEFwcHNNZW51SXRlbXMiLCJqIiwic1NlbUtleSIsInZhbHVlIiwiYVRlY2huaWNhbEtleXMiLCJrZXkiLCJzT2JqS2V5Iiwib01hbmlmZXN0RGF0YSIsImdldFRhcmdldFZpZXciLCJnZXRWaWV3RGF0YSIsImFkZGl0aW9uYWxTZW1hbnRpY09iamVjdHMiLCJhTWFuaWZlc3RTT0tleXMiLCJ0aGVuIiwiYmluZCIsImNhdGNoIiwib0Vycm9yIiwiTG9nIiwiZXJyb3IiLCJmbkdldFBhcnNlU2hlbGxIYXNoQW5kR2V0TGlua3MiLCJvUGFyc2VkVXJsIiwicGFyc2VTaGVsbEhhc2giLCJkb2N1bWVudCIsImFjdGlvbiIsImFBbm5vdGF0aW9uc1NPSXRlbXMiLCJzRW50aXR5VHlwZVBhdGgiLCJvRW50aXR5U2V0QW5ub3RhdGlvbnMiLCJfZ2V0U2VtYW50aWNPYmplY3RBbm5vdGF0aW9ucyIsImJIYXNFbnRpdHlTZXRTTyIsIm9FbnRpdHlUeXBlQW5ub3RhdGlvbnMiLCJhVW5hdmFpbGFibGVBY3Rpb25zIiwiYU1hcHBpbmdzIiwiY29uY2F0IiwiZ2V0QmluZGluZ0NvbnRleHQiLCJzZXRQcm9wZXJ0eSIsIm9FbnRpdHlBbm5vdGF0aW9ucyIsInNBbm5vdGF0aW9uTWFwcGluZ1Rlcm0iLCJzQW5ub3RhdGlvbkFjdGlvblRlcm0iLCJzUXVhbGlmaWVyIiwiZm5VcGRhdGVSZWxhdGVkQXBwc0RldGFpbHMiLCJnZXRNb2RlbCIsImdldE1ldGFNb2RlbCIsIm9QYXRoIiwiZ2V0UGF0aCIsImdldE1ldGFQYXRoIiwic1NlbWFudGljS2V5Vm9jYWJ1bGFyeSIsInJlcXVlc3RPYmplY3QiLCJmbkZpcmVCdXR0b25QcmVzcyIsIm9CdXR0b24iLCJhQXV0aG9yaXplZFR5cGVzIiwiZ2V0TWV0YWRhdGEiLCJnZXROYW1lIiwiZ2V0VmlzaWJsZSIsImdldEVuYWJsZWQiLCJmaXJlUHJlc3MiLCJmblJlc29sdmVTdHJpbmd0b0Jvb2xlYW4iLCJzVmFsdWUiLCJpc0EiLCJvT3duZXIiLCJDb21wb25lbnQiLCJnZXRPd25lckNvbXBvbmVudEZvciIsImdldENvbXBvbmVudEluc3RhbmNlIiwiZ2V0Um9vdENvbnRyb2wiLCJWaWV3IiwiZ2V0UGFyZW50IiwiZm5Qcm9jZXNzRGF0YUxvc3NPckRyYWZ0RGlzY2FyZENvbmZpcm1hdGlvbiIsImZuUHJvY2Vzc0Z1bmN0aW9uIiwiZm5DYW5jZWxGdW5jdGlvbiIsIm9Db250cm9sbGVyIiwiYlNraXBCaW5kaW5nVG9WaWV3IiwiX2JJc01vZGlmaWVkIiwiZHJhZnREYXRhQ29udGV4dCIsImJpbmRDb250ZXh0IiwiZ2V0Qm91bmRDb250ZXh0IiwiY29sbGFib3JhdGlvbkNvbm5lY3RlZCIsImlzQ29ubmVjdGVkIiwiZ2V0VmlldyIsInByb2Nlc3NGdW5jdGlvbkZvckRyYWZ0cyIsImRpc2Nvbm5lY3QiLCJhcmdzIiwiYXBwbHkiLCJEcmFmdEFkbWluaXN0cmF0aXZlRGF0YSIsIklzQWN0aXZlRW50aXR5IiwiZHJhZnRBZG1pbkRhdGEiLCJDcmVhdGlvbkRhdGVUaW1lIiwiTGFzdENoYW5nZURhdGVUaW1lIiwicGVyZm9ybUFmdGVyRGlzY2FyZG9yS2VlcERyYWZ0IiwiZm5Qcm9jZXNzRGF0YUxvc3NDb25maXJtYXRpb24iLCJmblByb2Nlc3MiLCJwcm9ncmFtbWluZ01vZGVsIiwiYlVJRWRpdGFibGUiLCJvUmVzb3VyY2VCdW5kbGUiLCJDb3JlIiwiZ2V0TGlicmFyeVJlc291cmNlQnVuZGxlIiwic1dhcm5pbmdNc2ciLCJnZXRUZXh0Iiwic0NvbmZpcm1CdXR0b25UeHQiLCJzQ2FuY2VsQnV0dG9uVHh0IiwiU3RpY2t5IiwiTWVzc2FnZUJveCIsIndhcm5pbmciLCJhY3Rpb25zIiwib25DbG9zZSIsIm9JbnRlcm5hbE1vZGVsIiwiaW5mbyIsImlzRmllbGRDb250cm9sUGF0aEluYXBwbGljYWJsZSIsInNGaWVsZENvbnRyb2xQYXRoIiwib0F0dHJpYnV0ZSIsImJJbmFwcGxpY2FibGUiLCJhUGFydHMiLCJoYXNPd25Qcm9wZXJ0eSIsInJlbW92ZVNlbnNpdGl2ZURhdGEiLCJhQXR0cmlidXRlcyIsImFPdXRBdHRyaWJ1dGVzIiwic0VudGl0eVNldCIsImVudGl0eVNldCIsImNvbnRleHREYXRhIiwiYVByb3BlcnRpZXMiLCJzUHJvcCIsImFQcm9wZXJ0eUFubm90YXRpb25zIiwib0ZpZWxkQ29udHJvbCIsIl9mbkNoZWNrSXNNYXRjaCIsIm9PYmplY3QiLCJvS2V5c1RvQ2hlY2siLCJzS2V5IiwiZm5HZXRDb250ZXh0UGF0aFByb3BlcnRpZXMiLCJvRmlsdGVyIiwib0VudGl0eVR5cGUiLCJvUHJvcGVydGllcyIsInRlc3QiLCIka2luZCIsImZuR2V0TWFuZGF0b3J5RmlsdGVyRmllbGRzIiwiYU1hbmRhdG9yeUZpbHRlckZpZWxkcyIsImZuR2V0SUJOQWN0aW9ucyIsImFJQk5BY3Rpb25zIiwiYUFjdGlvbnMiLCJnZXRBY3Rpb25zIiwib0FjdGlvbiIsImdldEFjdGlvbiIsImRhdGEiLCJmblVwZGF0ZURhdGFGaWVsZEZvcklCTkJ1dHRvbnNWaXNpYmlsaXR5Iiwib1ZpZXciLCJvUGFyYW1zIiwiZm5HZXRMaW5rcyIsIm9EYXRhIiwiYUtleXMiLCJvSUJOQWN0aW9uIiwic1NlbWFudGljT2JqZWN0IiwiYUxpbmsiLCJzZXRWaXNpYmxlIiwiZ2V0VHJhbnNsYXRlZFRleHQiLCJzRnJhbWV3b3JrS2V5Iiwic0VudGl0eVNldE5hbWUiLCJzUmVzb3VyY2VLZXkiLCJiUmVzb3VyY2VLZXlFeGlzdHMiLCJfY2hlY2tJZlJlc291cmNlS2V5RXhpc3RzIiwiYUN1c3RvbUJ1bmRsZXMiLCJoYXNUZXh0IiwiZ2V0QWN0aW9uUGF0aCIsImJSZXR1cm5Pbmx5UGF0aCIsInNBY3Rpb25OYW1lIiwiYkNoZWNrU3RhdGljVmFsdWUiLCJzRW50aXR5VHlwZU5hbWUiLCIkVHlwZSIsInNFbnRpdHlOYW1lIiwiZ2V0RW50aXR5U2V0TmFtZSIsInNCaW5kaW5nUGFyYW1ldGVyIiwic0VudGl0eVR5cGUiLCJvRW50aXR5Q29udGFpbmVyIiwiY29tcHV0ZURpc3BsYXlNb2RlIiwib1Byb3BlcnR5QW5ub3RhdGlvbnMiLCJvQ29sbGVjdGlvbkFubm90YXRpb25zIiwib1RleHRBbm5vdGF0aW9uIiwib1RleHRBcnJhbmdlbWVudEFubm90YXRpb24iLCIkRW51bU1lbWJlciIsIl9nZXRFbnRpdHlUeXBlIiwiX3JlcXVlc3RPYmplY3QiLCJvU2VsZWN0ZWRDb250ZXh0IiwibkJyYWNrZXRJbmRleCIsInNUYXJnZXRUeXBlIiwic2xpY2UiLCJzQ3VycmVudFR5cGUiLCJnZXRCaW5kaW5nIiwiZ2V0Q29udGV4dCIsIlByb21pc2UiLCJyZXNvbHZlIiwiX3JlcXVlc3RQcm9wZXJ0eSIsInNEeW5hbWljQWN0aW9uRW5hYmxlZFBhdGgiLCJvUHJvbWlzZSIsInJlcXVlc3RTaW5nbGV0b25Qcm9wZXJ0eSIsInZQcm9wZXJ0eVZhbHVlIiwiX3NldENvbnRleHRzQmFzZWRPbk9wZXJhdGlvbkF2YWlsYWJsZSIsIm9JbnRlcm5hbE1vZGVsQ29udGV4dCIsImFSZXF1ZXN0UHJvbWlzZXMiLCJhbGwiLCJhUmVzdWx0cyIsImFBcHBsaWNhYmxlQ29udGV4dHMiLCJhTm90QXBwbGljYWJsZUNvbnRleHRzIiwiYVJlc3VsdCIsIl9zZXREeW5hbWljQWN0aW9uQ29udGV4dHMiLCJ0cmFjZSIsImFBcHBsaWNhYmxlIiwiYU5vdEFwcGxpY2FibGUiLCJzRHluYW1pY0FjdGlvblBhdGhQcmVmaXgiLCJzZXRBY3Rpb25FbmFibGVtZW50Iiwib0FjdGlvbk9wZXJhdGlvbkF2YWlsYWJsZU1hcCIsImFTZWxlY3RlZENvbnRleHRzIiwiYVByb21pc2VzIiwiYkVuYWJsZWQiLCJvQ29udGV4dERhdGEiLCJvVHJhbnNmb3JtZWRCaW5kaW5nIiwidHJhbnNmb3JtUmVjdXJzaXZlbHkiLCJvQmluZGluZ0V4cHJlc3Npb24iLCJjb25zdGFudCIsInBhdGgiLCJzUmVzdWx0IiwiY29tcGlsZUJpbmRpbmciLCJzZXRPYmplY3RNYXBwaW5ncyIsImFTZW1hbnRpY09iamVjdE1hcHBpbmdzIiwib0l0ZW0iLCJvTWFwcGluZ3MiLCJpdGVtcyIsInNMb2NhbFByb3BlcnR5Iiwic1NlbWFudGljT2JqZWN0UHJvcGVydHkiLCJfZ2V0RGVmYXVsdE9wZXJhdG9ycyIsInNQcm9wZXJ0eVR5cGUiLCJvRGF0YUNsYXNzIiwiVHlwZVV0aWwiLCJnZXREYXRhVHlwZUNsYXNzTmFtZSIsIm9CYXNlVHlwZSIsImdldEJhc2VUeXBlIiwiRmlsdGVyT3BlcmF0b3JVdGlsIiwiZ2V0T3BlcmF0b3JzRm9yVHlwZSIsIl9nZXRSZXN0cmljdGlvbnMiLCJhRGVmYXVsdE9wcyIsImFFeHByZXNzaW9uT3BzIiwiYU9wZXJhdG9ycyIsImZpbHRlciIsInNFbGVtZW50IiwidG9TdHJpbmciLCJnZXRTcGVjaWZpY0FsbG93ZWRFeHByZXNzaW9uIiwiYUV4cHJlc3Npb25zIiwiYUFsbG93ZWRFeHByZXNzaW9uc1ByaW9yaXR5IiwiQWxsb3dlZEV4cHJlc3Npb25zUHJpbyIsInNvcnQiLCJhIiwiYiIsImdldE9wZXJhdG9yc0ZvclByb3BlcnR5Iiwic1R5cGUiLCJiVXNlU2VtYW50aWNEYXRlUmFuZ2UiLCJzU2V0dGluZ3MiLCJnZXRGaWx0ZXJSZXN0cmljdGlvbnNCeVBhdGgiLCJhRXF1YWxzT3BzIiwiYVNpbmdsZVJhbmdlT3BzIiwiYVNpbmdsZVJhbmdlRFRCYXNpY09wcyIsImFTaW5nbGVWYWx1ZURhdGVPcHMiLCJhQmFzaWNEYXRlVGltZU9wcyIsImFNdWx0aVJhbmdlT3BzIiwiYVNlYXJjaEV4cHJlc3Npb25PcHMiLCJhU2VtYW50aWNEYXRlT3BzRXh0IiwiU2VtYW50aWNEYXRlT3BlcmF0b3JzIiwiZ2V0U3VwcG9ydGVkT3BlcmF0aW9ucyIsImJTZW1hbnRpY0RhdGVSYW5nZSIsImFTZW1hbnRpY0RhdGVPcHMiLCJvU2V0dGluZ3MiLCJKU09OIiwicGFyc2UiLCJjdXN0b21EYXRhIiwib3BlcmF0b3JDb25maWd1cmF0aW9uIiwiZ2V0RmlsdGVyT3BlcmF0aW9ucyIsImdldFNlbWFudGljRGF0ZU9wZXJhdGlvbnMiLCJhU2luZ2xlUmFuZ2VEYXRlVGltZU9wcyIsInNPcGVyYXRvciIsImFEZWZhdWx0T3BlcmF0b3JzIiwiRmlsdGVyQWxsb3dlZEV4cHJlc3Npb25zIiwic0FsbG93ZWRFeHByZXNzaW9uIiwic1Jlc3RyaWN0aW9ucyIsImFTaW5nbGVWYWx1ZU9wcyIsInNPcGVyYXRvcnMiLCJnZXRQYXJhbWV0ZXJJbmZvIiwic1BhcmFtZXRlckNvbnRleHRQYXRoIiwic3Vic3RyaW5nIiwibGFzdEluZGV4T2YiLCJiUmVzdWx0Q29udGV4dCIsIm9QYXJhbWV0ZXJJbmZvIiwiY29udGV4dFBhdGgiLCJwYXJhbWV0ZXJQcm9wZXJ0aWVzIiwiZ2V0Q29udGV4dFBhdGhQcm9wZXJ0aWVzIiwiYWRkU2VsZWN0T3B0aW9uVG9Db25kaXRpb25zIiwib1Byb3BlcnR5TWV0YWRhdGEiLCJhVmFsaWRPcGVyYXRvcnMiLCJhQ3VtdWxhdGl2ZUNvbmRpdGlvbnMiLCJvU2VsZWN0T3B0aW9uIiwib0NvbmRpdGlvbiIsImdldENvbmRpdGlvbnMiLCJvcGVyYXRvciIsImFkZFNlbGVjdE9wdGlvbnNUb0NvbmRpdGlvbnMiLCJvU2VsZWN0aW9uVmFyaWFudCIsInNTZWxlY3RPcHRpb25Qcm9wIiwib0NvbmRpdGlvbnMiLCJzQ29uZGl0aW9uUGF0aCIsInNDb25kaXRpb25Qcm9wIiwib1ZhbGlkUHJvcGVydGllcyIsImlzUGFyYW1ldGVyIiwiYUNvbmRpdGlvbnMiLCJhU2VsZWN0T3B0aW9ucyIsImdldFNlbGVjdE9wdGlvbiIsImFkZFNlbGVjdGlvblZhcmlhbnRUb0NvbmRpdGlvbnMiLCJhU2VsZWN0T3B0aW9uc1Byb3BlcnR5TmFtZXMiLCJnZXRTZWxlY3RPcHRpb25zUHJvcGVydHlOYW1lcyIsImFNZXRhZGF0UHJvcGVydGllcyIsIm9WYWxpZFBhcmFtZXRlclByb3BlcnRpZXMiLCJiSGFzUGFyYW1ldGVycyIsImFNZXRhZGF0YVBhcmFtZXRlcnMiLCJzTWV0YWRhdGFQYXJhbWV0ZXIiLCJzU2VsZWN0T3B0aW9uTmFtZSIsImluY2x1ZGVzIiwic3RhcnRzV2l0aCIsInNNZXRhZGF0YVByb3BlcnR5Iiwic1NlbGVjdE9wdGlvbiIsInNGdWxsQ29udGV4dFBhdGgiLCJyZXBsYWNlQWxsIiwiX2NyZWF0ZUNvbmRpdGlvbnNGb3JOYXZQcm9wZXJ0aWVzIiwic01haW5FbnRpdHlTZXRQYXRoIiwiYU5hdk9iamVjdE5hbWVzIiwic05hdlBhdGgiLCJzUHJvcGVydHlOYW1lIiwiJGlzQ29sbGVjdGlvbiIsInNOYXZQcm9wZXJ0eVBhdGgiLCJhZGRQYWdlQ29udGV4dFRvU2VsZWN0aW9uVmFyaWFudCIsIm1QYWdlQ29udGV4dCIsIm9BcHBDb21wb25lbnQiLCJvTmF2aWdhdGlvblNlcnZpY2UiLCJnZXROYXZpZ2F0aW9uU2VydmljZSIsIm1peEF0dHJpYnV0ZXNBbmRTZWxlY3Rpb25WYXJpYW50IiwidG9KU09OU3RyaW5nIiwiYWRkRXh0ZXJuYWxTdGF0ZUZpbHRlcnNUb1NlbGVjdGlvblZhcmlhbnQiLCJtRmlsdGVycyIsIm9UYXJnZXRJbmZvIiwib0ZpbHRlckluZm8iLCJzRmlsdGVyIiwic0xvdyIsInNIaWdoIiwiZm5HZXRTaWduQW5kT3B0aW9uIiwic0xvd1ZhbHVlIiwic0hpZ2hWYWx1ZSIsIm9TZWxlY3RPcHRpb25TdGF0ZSIsIm9wdGlvbiIsInNpZ24iLCJsb3ciLCJoaWdoIiwib0ZpbHRlckNvbmRpdGlvbnMiLCJmaWx0ZXJDb25kaXRpb25zIiwib0ZpbHRlcnNXaXRob3V0Q29uZmxpY3QiLCJmaWx0ZXJDb25kaXRpb25zV2l0aG91dENvbmZsaWN0Iiwib1RhYmxlUHJvcGVydGllc1dpdGhvdXRDb25mbGljdCIsInByb3BlcnRpZXNXaXRob3V0Q29uZmxpY3QiLCJhZGRGaWx0ZXJzVG9TZWxlY3Rpb25WYXJpYW50Iiwic0ZpbHRlck5hbWUiLCJhRmlsdGVycyIsInZhbHVlcyIsImFGaWx0ZXIiLCJvVmFsdWUxIiwib1NlbGVjdE9wdGlvblZhbHVlcyIsImFkZFNlbGVjdE9wdGlvbiIsImlzU3RpY2t5RWRpdE1vZGUiLCJiSXNTdGlja3lNb2RlIiwiTW9kZWxIZWxwZXIiLCJpc1N0aWNreVNlc3Npb25TdXBwb3J0ZWQiLCJhZGREZWZhdWx0RGlzcGxheUN1cnJlbmN5Iiwib1NlbGVjdGlvblZhcmlhbnREZWZhdWx0cyIsImFTVk9wdGlvbiIsImFEZWZhdWx0U1ZPcHRpb24iLCJkaXNwbGF5Q3VycmVuY3lTZWxlY3RPcHRpb24iLCJzU2lnbiIsInNPcHRpb24iLCJnZXROb25Db21wdXRlZFZpc2libGVGaWVsZHMiLCIkS2V5IiwiYU5vbkNvbXB1dGVkVmlzaWJsZUZpZWxkcyIsIm9Bbm5vdGF0aW9ucyIsImJJc0tleSIsImJJc0ltbXV0YWJsZSIsImJJc05vbkNvbXB1dGVkIiwiYklzVmlzaWJsZSIsImJJc0NvbXB1dGVkRGVmYXVsdFZhbHVlIiwiYklzS2V5Q29tcHV0ZWREZWZhdWx0VmFsdWVXaXRoVGV4dCIsIm9EaWFnbm9zdGljcyIsImdldERpYWdub3N0aWNzIiwic01lc3NhZ2UiLCJhZGRJc3N1ZSIsIklzc3VlQ2F0ZWdvcnkiLCJBbm5vdGF0aW9uIiwiSXNzdWVTZXZlcml0eSIsIk1lZGl1bSIsIklzc3VlQ2F0ZWdvcnlUeXBlIiwiQW5ub3RhdGlvbnMiLCJJZ25vcmVkQW5ub3RhdGlvbiIsInNldFVzZXJEZWZhdWx0cyIsImFQYXJhbWV0ZXJzIiwiYklzQWN0aW9uIiwiYklzQ3JlYXRlIiwib0FjdGlvbkRlZmF1bHRWYWx1ZXMiLCJvQ29tcG9uZW50RGF0YSIsImdldENvbXBvbmVudERhdGEiLCJvU3RhcnR1cFBhcmFtZXRlcnMiLCJzdGFydHVwUGFyYW1ldGVycyIsIm9TaGVsbFNlcnZpY2VzIiwiaGFzVVNoZWxsIiwib1BhcmFtZXRlciIsIiROYW1lIiwic1BhcmFtZXRlck5hbWUiLCJnZXRTdGFydHVwQXBwU3RhdGUiLCJvU3RhcnR1cEFwcFN0YXRlIiwiZ2V0RGF0YSIsImFFeHRlbmRlZFBhcmFtZXRlcnMiLCJzZWxlY3Rpb25WYXJpYW50IiwiU2VsZWN0T3B0aW9ucyIsIm9FeHRlbmRlZFBhcmFtZXRlciIsIlByb3BlcnR5TmFtZSIsIm9SYW5nZSIsIlJhbmdlcyIsIlNpZ24iLCJPcHRpb24iLCJMb3ciLCJnZXRBZGRpdGlvbmFsUGFyYW1zRm9yQ3JlYXRlIiwib0luYm91bmRQYXJhbWV0ZXJzIiwib0luYm91bmRzIiwiYUNyZWF0ZVBhcmFtZXRlcnMiLCJzUGFyYW1ldGVyIiwidXNlRm9yQ3JlYXRlIiwib1JldCIsInNDcmVhdGVQYXJhbWV0ZXIiLCJhVmFsdWVzIiwiY3JlYXRlIiwiZ2V0U2VtYW50aWNPYmplY3RNYXBwaW5nIiwib091dGJvdW5kIiwiYVNlbWFudGljT2JqZWN0TWFwcGluZyIsInBhcmFtZXRlcnMiLCJzUGFyYW0iLCJmb3JtYXQiLCJnZXRIZWFkZXJGYWNldEl0ZW1Db25maWdGb3JFeHRlcm5hbE5hdmlnYXRpb24iLCJvVmlld0RhdGEiLCJvQ3Jvc3NOYXYiLCJvSGVhZGVyRmFjZXRJdGVtcyIsInNJZCIsIm9Db250cm9sQ29uZmlnIiwiY29udHJvbENvbmZpZ3VyYXRpb24iLCJjb25maWciLCJuYXZpZ2F0aW9uIiwidGFyZ2V0T3V0Ym91bmQiLCJvdXRib3VuZCIsInNPdXRib3VuZCIsImdlbmVyYXRlIiwic2V0U2VtYW50aWNPYmplY3RNYXBwaW5ncyIsInZNYXBwaW5ncyIsInJlbW92ZVNlbGVjdE9wdGlvbiIsIm1hc3NBZGRTZWxlY3RPcHRpb24iLCJmbkdldFNlbWFudGljT2JqZWN0c0Zyb21QYXRoIiwiYVNlbWFudGljT2JqZWN0VW5hdmFpbGFibGVBY3Rpb25zIiwiYVNlbWFudGljT2JqZWN0Rm9yR2V0TGlua3MiLCJzZW1hbnRpY09iamVjdFBhdGgiLCJzZW1hbnRpY09iamVjdEZvckdldExpbmtzIiwiZm5VcGRhdGVTZW1hbnRpY1RhcmdldHNNb2RlbCIsImFHZXRMaW5rc1Byb21pc2VzIiwiYVNlbWFudGljT2JqZWN0cyIsInNDdXJyZW50SGFzaCIsIl9vTGluayIsIl9zTGlua0ludGVudEFjdGlvbiIsImFGaW5hbExpbmtzIiwib0ZpbmFsU2VtYW50aWNPYmplY3RzIiwiYkludGVudEhhc0FjdGlvbnMiLCJrIiwib1RtcCIsInNBbHRlcm5hdGVQYXRoIiwiaGFzVGFyZ2V0c05vdEZpbHRlcmVkIiwiaGFzVGFyZ2V0cyIsImlMaW5rQ291bnQiLCJIYXNUYXJnZXRzIiwiSGFzVGFyZ2V0c05vdEZpbHRlcmVkIiwiYXNzaWduIiwic1NlbWFudGljT2JqZWN0TmFtZSIsIm1lcmdlT2JqZWN0cyIsImZuR2V0U2VtYW50aWNPYmplY3RQcm9taXNlIiwiZ2V0U2VtYW50aWNPYmplY3RzRnJvbVBhdGgiLCJmbkdldFNlbWFudGljVGFyZ2V0c0Zyb21QYWdlTW9kZWwiLCJzUGFnZU1vZGVsIiwiX2ZuZmluZFZhbHVlc0hlbHBlciIsIm9iaiIsImxpc3QiLCJBcnJheSIsImNoaWxkcmVuIiwiX2ZuZmluZFZhbHVlcyIsIl9mbkRlbGV0ZUR1cGxpY2F0ZVNlbWFudGljT2JqZWN0cyIsImFTZW1hbnRpY09iamVjdFBhdGgiLCJhU2VtYW50aWNPYmplY3RzUHJvbWlzZXMiLCJvQ29tcG9uZW50IiwiZ2V0T3duZXJDb21wb25lbnQiLCJvUGFnZU1vZGVsIiwic3RyaW5naWZ5IiwiX2dldE9iamVjdCIsImFTZW1hbnRpY09iamVjdHNGb3VuZCIsImFTZW1hbnRpY09iamVjdHNGb3JHZXRMaW5rcyIsIl9vU2VtYW50aWNPYmplY3QiLCJnZXRTZW1hbnRpY09iamVjdFByb21pc2UiLCJzU2VtT2JqRXhwcmVzc2lvbiIsImFTZW1hbnRpY09iamVjdHNSZXNvbHZlZCIsImVsZW1lbnQiLCJiaW5kaW5nRXhwcmVzc2lvbiIsIiRQYXRoIiwiZ2V0TGlua3NXaXRoQ2FjaGUiLCJ1cGRhdGVTZW1hbnRpY1RhcmdldHMiLCJnZXRGaWx0ZXJSZXN0cmljdGlvbnMiLCJvRmlsdGVyUmVzdHJpY3Rpb25zQW5ub3RhdGlvbiIsInNSZXN0cmljdGlvbiIsIlJFUVVJUkVEX1BST1BFUlRJRVMiLCJOT05fRklMVEVSQUJMRV9QUk9QRVJUSUVTIiwiYVByb3BzIiwibWFwIiwib1Byb3BlcnR5IiwiQUxMT1dFRF9FWFBSRVNTSU9OUyIsIm1BbGxvd2VkRXhwcmVzc2lvbnMiLCJGaWx0ZXJFeHByZXNzaW9uUmVzdHJpY3Rpb25zIiwiUHJvcGVydHkiLCJBbGxvd2VkRXhwcmVzc2lvbnMiLCJhUGF0aFBhcnRzIiwic1BhcmVudEVudGl0eVNldFBhdGgiLCJvTmF2aWdhdGlvbkZpbHRlclJlc3RyaWN0aW9ucyIsInRlbXBsYXRlQ29udHJvbEZyYWdtZW50Iiwic0ZyYWdtZW50TmFtZSIsIm9QcmVwcm9jZXNzb3JTZXR0aW5ncyIsIm9PcHRpb25zIiwib01vZGlmaWVyIiwidmlldyIsIm9GcmFnbWVudCIsInRhcmdldHMiLCJsb2FkTWFjcm9MaWJyYXJ5IiwiWE1MUHJlcHJvY2Vzc29yIiwicHJvY2VzcyIsIlhNTFRlbXBsYXRlUHJvY2Vzc29yIiwibG9hZFRlbXBsYXRlIiwibmFtZSIsImZpcnN0RWxlbWVudENoaWxkIiwiaXNYTUwiLCJGcmFnbWVudCIsImxvYWQiLCJpZCIsImRlZmluaXRpb24iLCJjb250cm9sbGVyIiwiZ2V0U2luZ2xldG9uUGF0aCIsIm1ldGFNb2RlbCIsInBhcnRzIiwiQm9vbGVhbiIsInByb3BlcnR5TmFtZSIsInBvcCIsIm5hdmlnYXRpb25QYXRoIiwic2luZ2xldG9uTmFtZSIsIm1vZGVsIiwicmVzb2x2ZWRQYXRoIiwicHJvcGVydHlCaW5kaW5nIiwiYmluZFByb3BlcnR5IiwicmVxdWVzdFZhbHVlIiwiYWRkRXZlbnRUb0JpbmRpbmdJbmZvIiwic0V2ZW50TmFtZSIsImZIYW5kbGVyIiwib0JpbmRpbmdJbmZvIiwic2V0QmluZGluZ0luZm8iLCJldmVudHMiLCJmT3JpZ2luYWxIYW5kbGVyIiwiaW5uZXJDaGFydEJvdW5kIiwiZ2V0Q29udHJvbERlbGVnYXRlIiwiX2dldENoYXJ0IiwiZ2V0QmluZGluZ0luZm8iLCJzRXJyb3IiLCJzYXAiLCJ1aSIsInJlcXVpcmUiLCJmbk9uU3RyaWN0SGFuZGxpbmdGYWlsZWQiLCJzR3JvdXBJZCIsImFjdGlvbk5hbWUiLCJhTWVzc2FnZXMiLCJsb2NhbEkxOG5SZWYiLCJtZXNzYWdlIiwiZGlhbG9nUHJvbWlzZSIsInRpdGxlIiwiZW1waGFzaXplZEFjdGlvbiIsInN1Ym1pdEJhdGNoIiwib01lc3NhZ2VEaWFsb2dNb2RlbCIsIkpTT05Nb2RlbCIsInNldERhdGEiLCJiU3RyaWN0SGFuZGxpbmdGbG93Iiwib01lc3NhZ2VPYmplY3QiLCJtZXNzYWdlSGFuZGxpbmciLCJwcmVwYXJlTWVzc2FnZVZpZXdGb3JEaWFsb2ciLCJvRGlhbG9nIiwiRGlhbG9nIiwicmVzaXphYmxlIiwiY29udGVudCIsIm9NZXNzYWdlVmlldyIsInN0YXRlIiwiY3VzdG9tSGVhZGVyIiwiQmFyIiwiY29udGVudExlZnQiLCJvQmFja0J1dHRvbiIsImNvbnRlbnRNaWRkbGUiLCJUaXRsZSIsImNvbnRlbnRIZWlnaHQiLCJjb250ZW50V2lkdGgiLCJ2ZXJ0aWNhbFNjcm9sbGluZyIsInNldEJlZ2luQnV0dG9uIiwiQnV0dG9uIiwicHJlc3MiLCJjbG9zZSIsInR5cGUiLCJzZXRFbmRCdXR0b24iLCJvcGVuIiwiZ2V0TWVzc2FnZVN0cmlwVGV4dCIsImFJZ25vcmVkTGFiZWxzIiwib0ZpbHRlckJhciIsImJJc0NoYXJ0IiwiYklzU2VhcmNoSWdub3JlZCIsInNUYWJUaXRsZSIsImZuR2V0TG9jYWxpemVkVGV4dCIsInNUZXh0Iiwib0NoYXJ0IiwiZ2V0Q29udHJvbGxlciIsImdldENoYXJ0Q29udHJvbCIsImJJc0RyYWZ0U3VwcG9ydGVkIiwib01hY3JvUmVzb3VyY2VCdW5kbGUiLCJzUmVzb3VyY2UiLCJzeXN0ZW0iLCJkZXNrdG9wIiwic0xvY2FsaXplZFRhYmxlVGl0bGUiLCJmaXJlQnV0dG9uUHJlc3MiLCJoYXNUcmFuc2llbnRDb250ZXh0IiwidXBkYXRlUmVsYXRlZEFwcHNEZXRhaWxzIiwicmVzb2x2ZVN0cmluZ3RvQm9vbGVhbiIsInByb2Nlc3NEYXRhTG9zc0NvbmZpcm1hdGlvbiIsImdldE1hbmRhdG9yeUZpbHRlckZpZWxkcyIsInVwZGF0ZURhdGFGaWVsZEZvcklCTkJ1dHRvbnNWaXNpYmlsaXR5IiwiZ2V0SUJOQWN0aW9ucyIsImdldFNlbWFudGljVGFyZ2V0c0Zyb21QYWdlTW9kZWwiXSwibWFwcGluZ3MiOiI7QUFBQTtBQUNBO0FBQ0E7Ozs7Ozs7Ozs7Ozs7Ozs7OztBQWlDQSxNQUFNQSxnQkFBZ0IsR0FBR0MsT0FBTyxDQUFDRCxnQkFBakM7QUFDQSxNQUFNRSxXQUFXLEdBQUcsQ0FDbkIsYUFEbUIsRUFFbkIsVUFGbUIsRUFHbkIsVUFIbUIsRUFJbkIsY0FKbUIsRUFLbkIsb0JBTG1CLEVBTW5CLGFBTm1CLEVBT25CLFlBUG1CLEVBUW5CLFdBUm1CLEVBU25CLFVBVG1CLEVBVW5CLFdBVm1CLEVBV25CLFdBWG1CLEVBWW5CLFdBWm1CLEVBYW5CLFdBYm1CLEVBY25CLFlBZG1CLEVBZW5CLFlBZm1CLEVBZ0JuQixVQWhCbUIsRUFpQm5CLGVBakJtQixDQUFwQjs7QUFvQkEsV0FBU0MsbUJBQVQsQ0FBNkJDLFdBQTdCLEVBQWtEO0FBQ2pELFFBQUksQ0FBQ0EsV0FBTCxFQUFrQjtBQUNqQixhQUFPQyxTQUFQO0FBQ0E7O0FBRUQsV0FBT0QsV0FBVyxDQUNoQkUsT0FESyxDQUNHLElBREgsRUFDUyxHQURULEVBRUxDLEtBRkssQ0FFQyxLQUZELEVBR0xDLE1BSEssQ0FHRSxVQUFVQyxXQUFWLEVBQTJDQyxZQUEzQyxFQUFpRTtBQUN4RSxVQUFJQSxZQUFZLEtBQUssRUFBckIsRUFBeUI7QUFDeEJELFFBQUFBLFdBQVcsR0FBRyxDQUFDQSxXQUFXLEdBQUdBLFdBQVcsR0FBRyxHQUFqQixHQUF1QixFQUFuQyxJQUF5QyxHQUF6QyxHQUErQ0MsWUFBL0MsR0FBOEQs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cUJBOUNKO0FBK0NuQnhWLElBQUFBLGlCQUFpQixFQUFFQSxpQkEvQ0E7QUFnRG5CeFIsSUFBQUEsa0JBQWtCLEVBQUU7QUFDbkJpa0IsTUFBQUEsbUJBQW1CLEVBQUUsb0JBREY7QUFFbkJDLE1BQUFBLHlCQUF5QixFQUFFLHlCQUZSO0FBR25CSSxNQUFBQSxtQkFBbUIsRUFBRTtBQUhGLEtBaEREO0FBcURuQnBSLElBQUFBLHNCQUFzQixFQUFFLENBQUMsYUFBRCxFQUFnQixZQUFoQixFQUE4QixhQUE5QixFQUE2QyxZQUE3QyxFQUEyRCxrQkFBM0QsRUFBK0UsOEJBQS9FLENBckRMO0FBc0RuQmxMLElBQUFBLDJDQUEyQyxFQUFFQSwyQ0F0RDFCO0FBdURuQjNMLElBQUFBLG1CQUFtQixFQUFFQSxtQkF2REY7QUF3RG5CMHJCLElBQUFBLHdCQUF3QixFQUFFQSx3QkF4RFA7QUF5RG5CNUIsSUFBQUEsZ0JBQWdCLEVBQUVBLGdCQXpEQztBQTBEbkJtRSxJQUFBQSxtQkFBbUIsRUFBRUE7QUExREYsR0FBcEI7U0E2RGU5b0IsVyIsInNvdXJjZVJvb3QiOiIuIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IFJlc291cmNlQnVuZGxlIGZyb20gXCJzYXAvYmFzZS9pMThuL1Jlc291cmNlQnVuZGxlXCI7XG5pbXBvcnQgTG9nIGZyb20gXCJzYXAvYmFzZS9Mb2dcIjtcbmltcG9ydCBtZXJnZU9iamVjdHMgZnJvbSBcInNhcC9iYXNlL3V0aWwvbWVyZ2VcIjtcbmltcG9ydCB7IGRpc2Nvbm5lY3QsIGlzQ29ubmVjdGVkIH0gZnJvbSBcInNhcC9mZS9jb3JlL2FjdGlvbnMvY29sbGFib3JhdGlvbi9BY3Rpdml0eVN5bmNcIjtcbmltcG9ydCBBcHBDb21wb25lbnQgZnJvbSBcInNhcC9mZS9jb3JlL0FwcENvbXBvbmVudFwiO1xuaW1wb3J0IHsgSXNzdWVDYXRlZ29yeSwgSXNzdWVDYXRlZ29yeVR5cGUsIElzc3VlU2V2ZXJpdHkgfSBmcm9tIFwic2FwL2ZlL2NvcmUvY29udmVydGVycy9oZWxwZXJzL0lzc3VlTWFuYWdlclwiO1xuaW1wb3J0IHsgYmluZGluZ0V4cHJlc3Npb24sIGNvbXBpbGVCaW5kaW5nLCBjb25zdGFudCwgdHJhbnNmb3JtUmVjdXJzaXZlbHkgfSBmcm9tIFwic2FwL2ZlL2NvcmUvaGVscGVycy9CaW5kaW5nRXhwcmVzc2lvblwiO1xuaW1wb3J0IE1vZGVsSGVscGVyIGZyb20gXCJzYXAvZmUvY29yZS9oZWxwZXJzL01vZGVsSGVscGVyXCI7XG5pbXBvcnQgU2VtYW50aWNEYXRlT3BlcmF0b3JzIGZyb20gXCJzYXAvZmUvY29yZS9oZWxwZXJzL1NlbWFudGljRGF0ZU9wZXJhdG9yc1wiO1xuaW1wb3J0IHsgZ2VuZXJhdGUgfSBmcm9tIFwic2FwL2ZlL2NvcmUvaGVscGVycy9TdGFibGVJZEhlbHBlclwiO1xuaW1wb3J0IGxpYnJhcnkgZnJvbSBcInNhcC9mZS9jb3JlL2xpYnJhcnlcIjtcbmltcG9ydCBCYXIgZnJvbSBcInNhcC9tL0JhclwiO1xuaW1wb3J0IEJ1dHRvbiBmcm9tIFwic2FwL20vQnV0dG9uXCI7XG5pbXBvcnQgRGlhbG9nIGZyb20gXCJzYXAvbS9EaWFsb2dcIjtcbmltcG9ydCBNZXNzYWdlQm94IGZyb20gXCJzYXAvbS9NZXNzYWdlQm94XCI7XG5pbXBvcnQgVGl0bGUgZnJvbSBcInNhcC9tL1RpdGxlXCI7XG5pbXBvcnQgQ29tcG9uZW50IGZyb20gXCJzYXAvdWkvY29yZS9Db21wb25lbnRcIjtcbmltcG9ydCBDb250cm9sIGZyb20gXCJzYXAvdWkvY29yZS9Db250cm9sXCI7XG5pbXBvcnQgQ29yZSBmcm9tIFwic2FwL3VpL2NvcmUvQ29yZVwiO1xuaW1wb3J0IEZyYWdtZW50IGZyb20gXCJzYXAvdWkvY29yZS9GcmFnbWVudFwiO1xuaW1wb3J0IFZpZXcgZnJvbSBcInNhcC91aS9jb3JlL212Yy9WaWV3XCI7XG5pbXBvcnQgWE1MUHJlcHJvY2Vzc29yIGZyb20gXCJzYXAvdWkvY29yZS91dGlsL1hNTFByZXByb2Nlc3NvclwiO1xuaW1wb3J0IFhNTFRlbXBsYXRlUHJvY2Vzc29yIGZyb20gXCJzYXAvdWkvY29yZS9YTUxUZW1wbGF0ZVByb2Nlc3NvclwiO1xuaW1wb3J0IHsgc3lzdGVtIH0gZnJvbSBcInNhcC91aS9EZXZpY2VcIjtcbmltcG9ydCBGaWx0ZXJPcGVyYXRvclV0aWwgZnJvbSBcInNhcC91aS9tZGMvY29uZGl0aW9uL0ZpbHRlck9wZXJhdG9yVXRpbFwiO1xuaW1wb3J0IFR5cGVVdGlsIGZyb20gXCJzYXAvdWkvbWRjL29kYXRhL3Y0L1R5cGVVdGlsXCI7XG5pbXBvcnQgQ29udGV4dCBmcm9tIFwic2FwL3VpL21vZGVsL0NvbnRleHRcIjtcbmltcG9ydCBKU09OTW9kZWwgZnJvbSBcInNhcC91aS9tb2RlbC9qc29uL0pTT05Nb2RlbFwiO1xuaW1wb3J0IE9EYXRhTWV0YU1vZGVsIGZyb20gXCJzYXAvdWkvbW9kZWwvb2RhdGEvdjQvT0RhdGFNZXRhTW9kZWxcIjtcbmltcG9ydCBPRGF0YU1vZGVsIGZyb20gXCJzYXAvdWkvbW9kZWwvb2RhdGEvdjQvT0RhdGFNb2RlbFwiO1xuaW1wb3J0IHsgQ29yZUV4IH0gZnJvbSBcInR5cGVzL2V4dGVuc2lvbl90eXBlc1wiO1xuaW1wb3J0IG1lc3NhZ2VIYW5kbGluZyBmcm9tIFwiLi9hY3Rpb25zL21lc3NhZ2VIYW5kbGluZ1wiO1xuaW1wb3J0IHsgcGVyZm9ybUFmdGVyRGlzY2FyZG9yS2VlcERyYWZ0IH0gZnJvbSBcIi4vY29udHJvbHMvRGF0YUxvc3NPckRyYWZ0RGlzY2FyZC9EYXRhTG9zc09yRHJhZnREaXNjYXJkSGFuZGxlclwiO1xuaW1wb3J0IHsgZ2V0Q29uZGl0aW9ucyB9IGZyb20gXCIuL3RlbXBsYXRpbmcvRmlsdGVySGVscGVyXCI7XG5cbmNvbnN0IFByb2dyYW1taW5nTW9kZWwgPSBsaWJyYXJ5LlByb2dyYW1taW5nTW9kZWw7XG5jb25zdCBhVmFsaWRUeXBlcyA9IFtcblx0XCJFZG0uQm9vbGVhblwiLFxuXHRcIkVkbS5CeXRlXCIsXG5cdFwiRWRtLkRhdGVcIixcblx0XCJFZG0uRGF0ZVRpbWVcIixcblx0XCJFZG0uRGF0ZVRpbWVPZmZzZXRcIixcblx0XCJFZG0uRGVjaW1hbFwiLFxuXHRcIkVkbS5Eb3VibGVcIixcblx0XCJFZG0uRmxvYXRcIixcblx0XCJFZG0uR3VpZFwiLFxuXHRcIkVkbS5JbnQxNlwiLFxuXHRcIkVkbS5JbnQzMlwiLFxuXHRcIkVkbS5JbnQ2NFwiLFxuXHRcIkVkbS5TQnl0ZVwiLFxuXHRcIkVkbS5TaW5nbGVcIixcblx0XCJFZG0uU3RyaW5nXCIsXG5cdFwiRWRtLlRpbWVcIixcblx0XCJFZG0uVGltZU9mRGF5XCJcbl07XG5cbmZ1bmN0aW9uIG5vcm1hbGl6ZVNlYXJjaFRlcm0oc1NlYXJjaFRlcm06IHN0cmluZykge1xuXHRpZiAoIXNTZWFyY2hUZXJtKSB7XG5cdFx0cmV0dXJuIHVuZGVmaW5lZDtcblx0fVxuXG5cdHJldHVybiBzU2VhcmNoVGVybVxuXHRcdC5yZXBsYWNlKC9cIi9nLCBcIiBcIilcblx0XHQuc3BsaXQoL1xccysvKVxuXHRcdC5yZWR1Y2UoZnVuY3Rpb24gKHNOb3JtYWxpemVkOiBzdHJpbmcgfCB1bmRlZmluZWQsIHNDdXJyZW50V29yZDogc3RyaW5nKSB7XG5cdFx0XHRpZiAoc0N1cnJlbnRXb3JkICE9PSBcIlwiKSB7XG5cdFx0XHRcdHNOb3JtYWxpemVkID0gKHNOb3JtYWxpemVkID8gc05vcm1hbGl6ZWQgKyBcIiBcIiA6IFwiXCIpICsgJ1wiJyArIHNDdXJyZW50V29yZCArICdcIic7XG5cdFx0XHR9XG5cdFx0XHRyZXR1cm4gc05vcm1hbGl6ZWQ7XG5cdFx0fSwgdW5kZWZpbmVkKTtcbn1cblxuZnVuY3Rpb24gZ2V0UHJvcGVydHlEYXRhVHlwZShvTmF2aWdhdGlvbkNvbnRleHQ6IGFueSkge1xuXHRsZXQgc0RhdGFUeXBlID0gb05hdmlnYXRpb25Db250ZXh0LmdldFByb3BlcnR5KFwiJFR5cGVcIik7XG5cdC8vIGlmICRraW5kIGV4aXN0cywgaXQncyBub3QgYSBEYXRhRmllbGQgYW5kIHdlIGhhdmUgdGhlIGZpbmFsIHR5cGUgYWxyZWFkeVxuXHRpZiAoIW9OYXZpZ2F0aW9uQ29udGV4dC5nZXRQcm9wZXJ0eShcIiRraW5kXCIpKSB7XG5cdFx0c3dpdGNoIChzRGF0YVR5cGUpIHtcblx0XHRcdGNhc2UgXCJjb20uc2FwLnZvY2FidWxhcmllcy5VSS52MS5EYXRhRmllbGRGb3JBY3Rpb25cIjpcblx0XHRcdGNhc2UgXCJjb20uc2FwLnZvY2FidWxhcmllcy5VSS52MS5EYXRhRmllbGRGb3JJbnRlbnRCYXNlZE5hdmlnYXRpb25cIjpcblx0XHRcdFx0c0RhdGFUeXBlID0gdW5kZWZpbmVkO1xuXHRcdFx0XHRicmVhaztcblxuXHRcdFx0Y2FzZSBcImNvbS5zYXAudm9jYWJ1bGFyaWVzLlVJLnYxLkRhdGFGaWVsZFwiOlxuXHRcdFx0Y2FzZSBcImNvbS5zYXAudm9jYWJ1bGFyaWVzLlVJLnYxLkRhdGFGaWVsZFdpdGhOYXZpZ2F0aW9uUGF0aFwiOlxuXHRcdFx0Y2FzZSBcImNvbS5zYXAudm9jYWJ1bGFyaWVzLlVJLnYxLkRhdGFGaWVsZFdpdGhVcmxcIjpcblx0XHRcdGNhc2UgXCJjb20uc2FwLnZvY2FidWxhcmllcy5VSS52MS5EYXRhRmllbGRXaXRoSW50ZW50QmFzZWROYXZpZ2F0aW9uXCI6XG5cdFx0XHRjYXNlIFwiY29tLnNhcC52b2NhYnVsYXJpZXMuVUkudjEuRGF0YUZpZWxkV2l0aEFjdGlvblwiOlxuXHRcdFx0XHRzRGF0YVR5cGUgPSBvTmF2aWdhdGlvbkNvbnRleHQuZ2V0UHJvcGVydHkoXCJWYWx1ZS8kUGF0aC8kVHlwZVwiKTtcblx0XHRcdFx0YnJlYWs7XG5cblx0XHRcdGNhc2UgXCJjb20uc2FwLnZvY2FidWxhcmllcy5VSS52MS5EYXRhRmllbGRGb3JBbm5vdGF0aW9uXCI6XG5cdFx0XHRkZWZhdWx0OlxuXHRcdFx0XHRjb25zdCBzQW5ub3RhdGlvblBhdGggPSBvTmF2aWdhdGlvbkNvbnRleHQuZ2V0UHJvcGVydHkoXCJUYXJnZXQvJEFubm90YXRpb25QYXRoXCIpO1xuXHRcdFx0XHRpZiAoc0Fubm90YXRpb25QYXRoKSB7XG5cdFx0XHRcdFx0aWYgKHNBbm5vdGF0aW9uUGF0aC5pbmRleE9mKFwiY29tLnNhcC52b2NhYnVsYXJpZXMuQ29tbXVuaWNhdGlvbi52MS5Db250YWN0XCIpID4gLTEpIHtcblx0XHRcdFx0XHRcdHNEYXRhVHlwZSA9IG9OYXZpZ2F0aW9uQ29udGV4dC5nZXRQcm9wZXJ0eShcIlRhcmdldC8kQW5ub3RhdGlvblBhdGgvZm4vJFBhdGgvJFR5cGVcIik7XG5cdFx0XHRcdFx0fSBlbHNlIGlmIChzQW5ub3RhdGlvblBhdGguaW5kZXhPZihcImNvbS5zYXAudm9jYWJ1bGFyaWVzLlVJLnYxLkRhdGFQb2ludFwiKSA+IC0xKSB7XG5cdFx0XHRcdFx0XHRzRGF0YVR5cGUgPSBvTmF2aWdhdGlvbkNvbnRleHQuZ2V0UHJvcGVydHkoXCJWYWx1ZS8kUGF0aC8kVHlwZVwiKTtcblx0XHRcdFx0XHR9IGVsc2Uge1xuXHRcdFx0XHRcdFx0Ly8gZS5nLiBGaWVsZEdyb3VwIG9yIENoYXJ0XG5cdFx0XHRcdFx0XHRzRGF0YVR5cGUgPSB1bmRlZmluZWQ7XG5cdFx0XHRcdFx0fVxuXHRcdFx0XHR9IGVsc2Uge1xuXHRcdFx0XHRcdHNEYXRhVHlwZSA9IHVuZGVmaW5lZDtcblx0XHRcdFx0fVxuXHRcdFx0XHRicmVhaztcblx0XHR9XG5cdH1cblxuXHRyZXR1cm4gc0RhdGFUeXBlO1xufVxuZnVuY3Rpb24gZm5IYXNUcmFuc2llbnRDb250ZXh0cyhvTGlzdEJpbmRpbmc6IGFueSkge1xuXHRsZXQgYkhhc1RyYW5zaWVudENvbnRleHRzID0gZmFsc2U7XG5cdGlmIChvTGlzdEJpbmRpbmcpIHtcblx0XHRvTGlzdEJpbmRpbmcuZ2V0Q3VycmVudENvbnRleHRzKCkuZm9yRWFjaChmdW5jdGlvbiAob0NvbnRleHQ6IGFueSkge1xuXHRcdFx0aWYgKG9Db250ZXh0ICYmIG9Db250ZXh0LmlzVHJhbnNpZW50KCkpIHtcblx0XHRcdFx0Ykhhc1RyYW5zaWVudENvbnRleHRzID0gdHJ1ZTtcblx0XHRcdH1cblx0XHR9KTtcblx0fVxuXHRyZXR1cm4gYkhhc1RyYW5zaWVudENvbnRleHRzO1xufVxuZnVuY3Rpb24gZ2V0U2VhcmNoUmVzdHJpY3Rpb25zKHNGdWxsUGF0aDogYW55LCBvTWV0YU1vZGVsOiBhbnkpIHtcblx0bGV0IGkgPSAwO1xuXHRjb25zdCBhTmF2aWdhdGlvblBhcnRzID0gc0Z1bGxQYXRoLnNwbGl0KFwiLyROYXZpZ2F0aW9uUHJvcGVydHlCaW5kaW5nL1wiKTtcblx0Zm9yIChsZXQgc1BhdGggPSBhTmF2aWdhdGlvblBhcnRzWzBdOyBpIDwgYU5hdmlnYXRpb25QYXJ0cy5sZW5ndGggLSAxOyBpKyspIHtcblx0XHRjb25zdCBvTmF2aWdhdGlvblJlc3RyaWN0aW9ucyA9IGdldE5hdmlnYXRpb25SZXN0cmljdGlvbnMob01ldGFNb2RlbCwgc1BhdGgsIGFOYXZpZ2F0aW9uUGFydHNbaSArIDFdKTtcblx0XHRpZiAob05hdmlnYXRpb25SZXN0cmljdGlvbnMgJiYgb05hdmlnYXRpb25SZXN0cmljdGlvbnNbXCJTZWFyY2hSZXN0cmljdGlvbnNcIl0pIHtcblx0XHRcdHJldHVybiBvTmF2aWdhdGlvblJlc3RyaWN0aW9uc1tcIlNlYXJjaFJlc3RyaWN0aW9uc1wiXTtcblx0XHR9XG5cdFx0c1BhdGggPSBzUGF0aCArIFwiLyROYXZpZ2F0aW9uUHJvcGVydHlCaW5kaW5nL1wiICsgYU5hdmlnYXRpb25QYXJ0c1tpXTtcblx0fVxuXHRyZXR1cm4gb01ldGFNb2RlbC5nZXRPYmplY3Qoc0Z1bGxQYXRoICsgXCJAT3JnLk9EYXRhLkNhcGFiaWxpdGllcy5WMS5TZWFyY2hSZXN0cmljdGlvbnNcIik7XG59XG5mdW5jdGlvbiBnZXROYXZpZ2F0aW9uUmVzdHJpY3Rpb25zKG9Nb2RlbDogYW55LCBzRW50aXR5U2V0UGF0aDogYW55LCBzTmF2aWdhdGlvblBhdGg6IGFueSkge1xuXHRjb25zdCBvTmF2aWdhdGlvblJlc3RyaWN0aW9ucyA9IG9Nb2RlbC5nZXRPYmplY3Qoc0VudGl0eVNldFBhdGggKyBcIkBPcmcuT0RhdGEuQ2FwYWJpbGl0aWVzLlYxLk5hdmlnYXRpb25SZXN0cmljdGlvbnNcIik7XG5cdGNvbnN0IGFSZXN0cmljdGVkUHJvcGVydGllcyA9IG9OYXZpZ2F0aW9uUmVzdHJpY3Rpb25zICYmIG9OYXZpZ2F0aW9uUmVzdHJpY3Rpb25zLlJlc3RyaWN0ZWRQcm9wZXJ0aWVzO1xuXHRyZXR1cm4gKFxuXHRcdGFSZXN0cmljdGVkUHJvcGVydGllcyAmJlxuXHRcdGFSZXN0cmljdGVkUHJvcGVydGllcy5maW5kKGZ1bmN0aW9uIChvUmVzdHJpY3RlZFByb3BlcnR5OiBhbnkpIHtcblx0XHRcdHJldHVybiAoXG5cdFx0XHRcdG9SZXN0cmljdGVkUHJvcGVydHkgJiZcblx0XHRcdFx0b1Jlc3RyaWN0ZWRQcm9wZXJ0eS5OYXZpZ2F0aW9uUHJvcGVydHkgJiZcblx0XHRcdFx0b1Jlc3RyaWN0ZWRQcm9wZXJ0eS5OYXZpZ2F0aW9uUHJvcGVydHkuJE5hdmlnYXRpb25Qcm9wZXJ0eVBhdGggPT09IHNOYXZpZ2F0aW9uUGF0aFxuXHRcdFx0KTtcblx0XHR9KVxuXHQpO1xufVxuZnVuY3Rpb24gX2lzSW5Ob25GaWx0ZXJhYmxlUHJvcGVydGllcyhvTW9kZWw6IGFueSwgc0VudGl0eVNldFBhdGg6IGFueSwgc0NvbnRleHRQYXRoOiBhbnkpIHtcblx0bGV0IGJJc05vdEZpbHRlcmFibGUgPSBmYWxzZTtcblx0Y29uc3Qgb0Fubm90YXRpb24gPSBvTW9kZWwuZ2V0T2JqZWN0KHNFbnRpdHlTZXRQYXRoICsgXCJAT3JnLk9EYXRhLkNhcGFiaWxpdGllcy5WMS5GaWx0ZXJSZXN0cmljdGlvbnNcIik7XG5cdGlmIChvQW5ub3RhdGlvbiAmJiBvQW5ub3RhdGlvbi5Ob25GaWx0ZXJhYmxlUHJvcGVydGllcykge1xuXHRcdGJJc05vdEZpbHRlcmFibGUgPSBvQW5ub3RhdGlvbi5Ob25GaWx0ZXJhYmxlUHJvcGVydGllcy5zb21lKGZ1bmN0aW9uIChwcm9wZXJ0eTogYW55KSB7XG5cdFx0XHRyZXR1cm4gcHJvcGVydHkuJE5hdmlnYXRpb25Qcm9wZXJ0eVBhdGggPT09IHNDb250ZXh0UGF0aCB8fCBwcm9wZXJ0eS4kUHJvcGVydHlQYXRoID09PSBzQ29udGV4dFBhdGg7XG5cdFx0fSk7XG5cdH1cblx0cmV0dXJuIGJJc05vdEZpbHRlcmFibGU7XG59XG4vLyBUT0RPIHJld29yayB0aGlzIVxuZnVuY3Rpb24gX2lzQ29udGV4dFBhdGhGaWx0ZXJhYmxlKG9Nb2RlbDogYW55LCBzRW50aXR5U2V0UGF0aDogYW55LCBzQ29udGV4UGF0aDogYW55KSB7XG5cdGNvbnN0IHNGdWxsUGF0aCA9IHNFbnRpdHlTZXRQYXRoICsgXCIvXCIgKyBzQ29udGV4UGF0aCxcblx0XHRhRVNQYXJ0cyA9IHNGdWxsUGF0aC5zcGxpdChcIi9cIikuc3BsaWNlKDAsIDIpLFxuXHRcdGFDb250ZXh0ID0gc0Z1bGxQYXRoLnNwbGl0KFwiL1wiKS5zcGxpY2UoMik7XG5cdGxldCBiSXNOb3RGaWx0ZXJhYmxlID0gZmFsc2UsXG5cdFx0c0NvbnRleHQgPSBcIlwiO1xuXG5cdHNFbnRpdHlTZXRQYXRoID0gYUVTUGFydHMuam9pbihcIi9cIik7XG5cblx0YklzTm90RmlsdGVyYWJsZSA9IGFDb250ZXh0LnNvbWUoZnVuY3Rpb24gKGl0ZW06IHN0cmluZywgaW5kZXg6IG51bWJlciwgYXJyYXk6IHN0cmluZ1tdKSB7XG5cdFx0aWYgKHNDb250ZXh0Lmxlbmd0aCA+IDApIHtcblx0XHRcdHNDb250ZXh0ICs9IFwiL1wiICsgaXRlbTtcblx0XHR9IGVsc2Uge1xuXHRcdFx0c0NvbnRleHQgPSBpdGVtO1xuXHRcdH1cblx0XHRpZiAoaW5kZXggPT09IGFycmF5Lmxlbmd0aCAtIDIpIHtcblx0XHRcdC8vIEluIGNhc2Ugb2YgXCIvQ3VzdG9tZXIvU2V0L1Byb3BlcnR5XCIgdGhpcyBpcyB0byBjaGVjayBuYXZpZ2F0aW9uIHJlc3RyaWN0aW9ucyBvZiBcIkN1c3RvbWVyXCIgZm9yIG5vbi1maWx0ZXJhYmxlIHByb3BlcnRpZXMgaW4gXCJTZXRcIlxuXHRcdFx0Y29uc3Qgb05hdmlnYXRpb25SZXN0cmljdGlvbnMgPSBnZXROYXZpZ2F0aW9uUmVzdHJpY3Rpb25zKG9Nb2RlbCwgc0VudGl0eVNldFBhdGgsIGl0ZW0pO1xuXHRcdFx0Y29uc3Qgb0ZpbHRlclJlc3RyaWN0aW9ucyA9IG9OYXZpZ2F0aW9uUmVzdHJpY3Rpb25zICYmIG9OYXZpZ2F0aW9uUmVzdHJpY3Rpb25zLkZpbHRlclJlc3RyaWN0aW9ucztcblx0XHRcdGNvbnN0IGFOb25GaWx0ZXJhYmxlUHJvcGVydGllcyA9IG9GaWx0ZXJSZXN0cmljdGlvbnMgJiYgb0ZpbHRlclJlc3RyaWN0aW9ucy5Ob25GaWx0ZXJhYmxlUHJvcGVydGllcztcblx0XHRcdGNvbnN0IHNUYXJnZXRQcm9wZXJ0eVBhdGggPSBhcnJheVthcnJheS5sZW5ndGggLSAxXTtcblx0XHRcdGlmIChcblx0XHRcdFx0YU5vbkZpbHRlcmFibGVQcm9wZXJ0aWVzICYmXG5cdFx0XHRcdGFOb25GaWx0ZXJhYmxlUHJvcGVydGllcy5maW5kKGZ1bmN0aW9uIChvUHJvcGVydHlQYXRoOiBhbnkpIHtcblx0XHRcdFx0XHRyZXR1cm4gb1Byb3BlcnR5UGF0aC4kUHJvcGVydHlQYXRoID09PSBzVGFyZ2V0UHJvcGVydHlQYXRoO1xuXHRcdFx0XHR9KVxuXHRcdFx0KSB7XG5cdFx0XHRcdHJldHVybiB0cnVlO1xuXHRcdFx0fVxuXHRcdH1cblx0XHRpZiAoaW5kZXggPT09IGFycmF5Lmxlbmd0aCAtIDEpIHtcblx0XHRcdC8vbGFzdCBwYXRoIHNlZ21lbnRcblx0XHRcdGJJc05vdEZpbHRlcmFibGUgPSBfaXNJbk5vbkZpbHRlcmFibGVQcm9wZXJ0aWVzKG9Nb2RlbCwgc0VudGl0eVNldFBhdGgsIHNDb250ZXh0KTtcblx0XHR9IGVsc2UgaWYgKG9Nb2RlbC5nZXRPYmplY3Qoc0VudGl0eVNldFBhdGggKyBcIi8kTmF2aWdhdGlvblByb3BlcnR5QmluZGluZy9cIiArIGl0ZW0pKSB7XG5cdFx0XHQvL2NoZWNrIGV4aXN0aW5nIGNvbnRleHQgcGF0aCBhbmQgaW5pdGlhbGl6ZSBpdFxuXHRcdFx0YklzTm90RmlsdGVyYWJsZSA9IF9pc0luTm9uRmlsdGVyYWJsZVByb3BlcnRpZXMob01vZGVsLCBzRW50aXR5U2V0UGF0aCwgc0NvbnRleHQpO1xuXHRcdFx0c0NvbnRleHQgPSBcIlwiO1xuXHRcdFx0Ly9zZXQgdGhlIG5ldyBFbnRpdHlTZXRcblx0XHRcdHNFbnRpdHlTZXRQYXRoID0gXCIvXCIgKyBvTW9kZWwuZ2V0T2JqZWN0KHNFbnRpdHlTZXRQYXRoICsgXCIvJE5hdmlnYXRpb25Qcm9wZXJ0eUJpbmRpbmcvXCIgKyBpdGVtKTtcblx0XHR9XG5cdFx0cmV0dXJuIGJJc05vdEZpbHRlcmFibGUgPT09IHRydWU7XG5cdH0pO1xuXHRyZXR1cm4gYklzTm90RmlsdGVyYWJsZTtcbn1cbi8vIFRPRE8gY2hlY2sgdXNlZCBwbGFjZXMgYW5kIHJld29yayB0aGlzXG5mdW5jdGlvbiBpc1Byb3BlcnR5RmlsdGVyYWJsZShvTW9kZWw6IE9EYXRhTWV0YU1vZGVsLCBzRW50aXR5U2V0UGF0aDogc3RyaW5nLCBzUHJvcGVydHk6IHN0cmluZywgYlNraXBIaWRkZW5GaWx0ZXI6IGJvb2xlYW4pIHtcblx0aWYgKHR5cGVvZiBzUHJvcGVydHkgIT09IFwic3RyaW5nXCIpIHtcblx0XHR0aHJvdyBuZXcgRXJyb3IoXCJzUHJvcGVydHkgcGFyYW1ldGVyIG11c3QgYmUgYSBzdHJpbmdcIik7XG5cdH1cblx0bGV0IGJJc0ZpbHRlcmFibGU7XG5cblx0Ly8gUGFyYW1ldGVycyBzaG91bGQgYmUgcmVuZGVyZWQgYXMgZmlsdGVyZmllbGRzXG5cdGlmIChvTW9kZWwuZ2V0T2JqZWN0KHNFbnRpdHlTZXRQYXRoICsgXCIvQGNvbS5zYXAudm9jYWJ1bGFyaWVzLkNvbW1vbi52MS5SZXN1bHRDb250ZXh0XCIpID09PSB0cnVlKSB7XG5cdFx0cmV0dXJuIHRydWU7XG5cdH1cblxuXHRjb25zdCBvTmF2aWdhdGlvbkNvbnRleHQgPSBvTW9kZWwuY3JlYXRlQmluZGluZ0NvbnRleHQoc0VudGl0eVNldFBhdGggKyBcIi9cIiArIHNQcm9wZXJ0eSkgYXMgQ29udGV4dDtcblxuXHRpZiAob05hdmlnYXRpb25Db250ZXh0LmdldFByb3BlcnR5KFwiQGNvbS5zYXAudm9jYWJ1bGFyaWVzLlVJLnYxLkhpZGRlblwiKSA9PT0gdHJ1ZSkge1xuXHRcdHJldHVybiBmYWxzZTtcblx0fVxuXG5cdGlmICghYlNraXBIaWRkZW5GaWx0ZXIgJiYgb05hdmlnYXRpb25Db250ZXh0LmdldFByb3BlcnR5KFwiQGNvbS5zYXAudm9jYWJ1bGFyaWVzLlVJLnYxLkhpZGRlbkZpbHRlclwiKSkge1xuXHRcdHJldHVybiBmYWxzZTtcblx0fVxuXG5cdGlmIChzRW50aXR5U2V0UGF0aC5zcGxpdChcIi9cIikubGVuZ3RoID09PSAyICYmIHNQcm9wZXJ0eS5pbmRleE9mKFwiL1wiKSA8IDApIHtcblx0XHQvLyB0aGVyZSBpcyBubyBuYXZpZ2F0aW9uIGluIGVudGl0eVNldCBwYXRoIGFuZCBwcm9wZXJ0eSBwYXRoXG5cdFx0YklzRmlsdGVyYWJsZSA9ICFfaXNJbk5vbkZpbHRlcmFibGVQcm9wZXJ0aWVzKG9Nb2RlbCwgc0VudGl0eVNldFBhdGgsIHNQcm9wZXJ0eSk7XG5cdH0gZWxzZSB7XG5cdFx0YklzRmlsdGVyYWJsZSA9ICFfaXNDb250ZXh0UGF0aEZpbHRlcmFibGUob01vZGVsLCBzRW50aXR5U2V0UGF0aCwgc1Byb3BlcnR5KTtcblx0fVxuXHQvLyBjaGVjayBpZiB0eXBlIGNhbiBiZSB1c2VkIGZvciBmaWx0ZXJpbmdcblx0aWYgKGJJc0ZpbHRlcmFibGUgJiYgb05hdmlnYXRpb25Db250ZXh0KSB7XG5cdFx0Y29uc3Qgc1Byb3BlcnR5RGF0YVR5cGUgPSBnZXRQcm9wZXJ0eURhdGFUeXBlKG9OYXZpZ2F0aW9uQ29udGV4dCk7XG5cdFx0aWYgKHNQcm9wZXJ0eURhdGFUeXBlKSB7XG5cdFx0XHRiSXNGaWx0ZXJhYmxlID0gYVZhbGlkVHlwZXMuaW5kZXhPZihzUHJvcGVydHlEYXRhVHlwZSkgIT09IC0xO1xuXHRcdH0gZWxzZSB7XG5cdFx0XHRiSXNGaWx0ZXJhYmxlID0gZmFsc2U7XG5cdFx0fVxuXHR9XG5cblx0cmV0dXJuIGJJc0ZpbHRlcmFibGU7XG59XG5mdW5jdGlvbiBnZXRTaGVsbFNlcnZpY2VzKG9Db250cm9sOiBhbnkpIHtcblx0cmV0dXJuIGdldEFwcENvbXBvbmVudChvQ29udHJvbCkuZ2V0U2hlbGxTZXJ2aWNlcygpO1xufVxuZnVuY3Rpb24gZ2V0SGFzaCgpIHtcblx0Y29uc3Qgc0hhc2ggPSB3aW5kb3cubG9jYXRpb24uaGFzaDtcblx0cmV0dXJuIHNIYXNoLnNwbGl0KFwiJlwiKVswXTtcbn1cbmZ1bmN0aW9uIF9nZXRTT0ludGVudHMob09iamVjdFBhZ2VMYXlvdXQ6IGFueSwgb1NlbWFudGljT2JqZWN0OiBhbnksIG9QYXJhbTogYW55KSB7XG5cdGNvbnN0IG9TaGVsbFNlcnZpY2VIZWxwZXIgPSBDb21tb25VdGlscy5nZXRTaGVsbFNlcnZpY2VzKG9PYmplY3RQYWdlTGF5b3V0KTtcblx0cmV0dXJuIG9TaGVsbFNlcnZpY2VIZWxwZXIuZ2V0TGlua3Moe1xuXHRcdHNlbWFudGljT2JqZWN0OiBvU2VtYW50aWNPYmplY3QsXG5cdFx0cGFyYW1zOiBvUGFyYW1cblx0fSk7XG59XG4vLyBUTy1ETyBhZGQgdGhpcyBhcyBwYXJ0IG9mIGFwcGx5U2VtYW50aWNPYmplY3RtYXBwaW5ncyBsb2dpYyBpbiBJbnRlbnRCYXNlZG5hdmlnYXRpb24gY29udHJvbGxlciBleHRlbnNpb25cbmZ1bmN0aW9uIF9jcmVhdGVNYXBwaW5ncyhvTWFwcGluZzogYW55KSB7XG5cdGNvbnN0IGFTT01hcHBpbmdzID0gW107XG5cdGNvbnN0IGFNYXBwaW5nS2V5cyA9IE9iamVjdC5rZXlzKG9NYXBwaW5nKTtcblx0bGV0IG9TZW1hbnRpY01hcHBpbmc7XG5cdGZvciAobGV0IGkgPSAwOyBpIDwgYU1hcHBpbmdLZXlzLmxlbmd0aDsgaSsrKSB7XG5cdFx0b1NlbWFudGljTWFwcGluZyA9IHtcblx0XHRcdFwiTG9jYWxQcm9wZXJ0eVwiOiB7XG5cdFx0XHRcdFwiJFByb3BlcnR5UGF0aFwiOiBhTWFwcGluZ0tleXNbaV1cblx0XHRcdH0sXG5cdFx0XHRcIlNlbWFudGljT2JqZWN0UHJvcGVydHlcIjogb01hcHBpbmdbYU1hcHBpbmdLZXlzW2ldXVxuXHRcdH07XG5cdFx0YVNPTWFwcGluZ3MucHVzaChvU2VtYW50aWNNYXBwaW5nKTtcblx0fVxuXG5cdHJldHVybiBhU09NYXBwaW5ncztcbn1cbi8qKlxuICogQHBhcmFtIGFMaW5rc1xuICogQHBhcmFtIGFFeGNsdWRlZEFjdGlvbnNcbiAqIEBwYXJhbSBvVGFyZ2V0UGFyYW1zXG4gKiBAcGFyYW0gYUl0ZW1zXG4gKi9cbmZ1bmN0aW9uIF9nZXRSZWxhdGVkQXBwc01lbnVJdGVtcyhhTGlua3M6IGFueSwgYUV4Y2x1ZGVkQWN0aW9uczogYW55LCBvVGFyZ2V0UGFyYW1zOiBhbnksIGFJdGVtczogYW55KSB7XG5cdGZvciAobGV0IGkgPSAwOyBpIDwgYUxpbmtzLmxlbmd0aDsgaSsrKSB7XG5cdFx0Y29uc3Qgb0xpbmsgPSBhTGlua3NbaV07XG5cdFx0Y29uc3Qgc0ludGVudCA9IG9MaW5rLmludGVudDtcblx0XHRjb25zdCBzQWN0aW9uID0gc0ludGVudC5zcGxpdChcIi1cIilbMV0uc3BsaXQoXCI/XCIpWzBdO1xuXHRcdGlmIChhRXhjbHVkZWRBY3Rpb25zICYmIGFFeGNsdWRlZEFjdGlvbnMuaW5kZXhPZihzQWN0aW9uKSA9PT0gLTEpIHtcblx0XHRcdGFJdGVtcy5wdXNoKHtcblx0XHRcdFx0dGV4dDogb0xpbmsudGV4dCxcblx0XHRcdFx0dGFyZ2V0U2VtT2JqZWN0OiBzSW50ZW50LnNwbGl0KFwiI1wiKVsxXS5zcGxpdChcIi1cIilbMF0sXG5cdFx0XHRcdHRhcmdldEFjdGlvbjogc0FjdGlvbi5zcGxpdChcIn5cIilbMF0sXG5cdFx0XHRcdHRhcmdldFBhcmFtczogb1RhcmdldFBhcmFtc1xuXHRcdFx0fSk7XG5cdFx0fVxuXHR9XG59XG4vKipcbiAqIEBwYXJhbSBvQWRkaXRpb25hbFNlbWFudGljT2JqZWN0c1xuICogQHBhcmFtIG9CaW5kaW5nQ29udGV4dFxuICogQHBhcmFtIGFNYW5pZmVzdFNPSXRlbXNcbiAqIEBwYXJhbSBhTGlua3NcbiAqL1xuZnVuY3Rpb24gX2dldFJlbGF0ZWRJbnRlbnRzKG9BZGRpdGlvbmFsU2VtYW50aWNPYmplY3RzOiBhbnksIG9CaW5kaW5nQ29udGV4dDogYW55LCBhTWFuaWZlc3RTT0l0ZW1zOiBhbnksIGFMaW5rczogYW55KSB7XG5cdGlmIChhTGlua3MgJiYgYUxpbmtzLmxlbmd0aCA+IDApIHtcblx0XHRjb25zdCBhRXhjbHVkZWRBY3Rpb25zID0gb0FkZGl0aW9uYWxTZW1hbnRpY09iamVjdHMudW5hdmFpbGFibGVBY3Rpb25zID8gb0FkZGl0aW9uYWxTZW1hbnRpY09iamVjdHMudW5hdmFpbGFibGVBY3Rpb25zIDogW107XG5cdFx0Y29uc3QgYVNPTWFwcGluZ3MgPSBvQWRkaXRpb25hbFNlbWFudGljT2JqZWN0cy5tYXBwaW5nID8gX2NyZWF0ZU1hcHBpbmdzKG9BZGRpdGlvbmFsU2VtYW50aWNPYmplY3RzLm1hcHBpbmcpIDogW107XG5cdFx0Y29uc3Qgb1RhcmdldFBhcmFtcyA9IHsgbmF2aWdhdGlvbkNvbnRleHRzOiBvQmluZGluZ0NvbnRleHQsIHNlbWFudGljT2JqZWN0TWFwcGluZzogYVNPTWFwcGluZ3MgfTtcblx0XHRfZ2V0UmVsYXRlZEFwcHNNZW51SXRlbXMoYUxpbmtzLCBhRXhjbHVkZWRBY3Rpb25zLCBvVGFyZ2V0UGFyYW1zLCBhTWFuaWZlc3RTT0l0ZW1zKTtcblx0fVxufVxuZnVuY3Rpb24gdXBkYXRlUmVsYXRlQXBwc01vZGVsKFxuXHR0aGlzOiBhbnksXG5cdG9CaW5kaW5nQ29udGV4dDogYW55LFxuXHRvRW50cnk6IGFueSxcblx0b09iamVjdFBhZ2VMYXlvdXQ6IGFueSxcblx0YVNlbUtleXM6IGFueSxcblx0b01ldGFNb2RlbDogYW55LFxuXHRvTWV0YVBhdGg6IGFueVxuKSB7XG5cdGNvbnN0IG9TaGVsbFNlcnZpY2VIZWxwZXIgPSBnZXRTaGVsbFNlcnZpY2VzKG9PYmplY3RQYWdlTGF5b3V0KTtcblx0Y29uc3Qgb1BhcmFtOiBhbnkgPSB7fTtcblx0bGV0IHNDdXJyZW50U2VtT2JqID0gXCJcIixcblx0XHRzQ3VycmVudEFjdGlvbiA9IFwiXCI7XG5cdGxldCBvU2VtYW50aWNPYmplY3RBbm5vdGF0aW9ucztcblx0bGV0IGFSZWxhdGVkQXBwc01lbnVJdGVtczogYW55W10gPSBbXTtcblx0bGV0IGFFeGNsdWRlZEFjdGlvbnM6IGFueVtdID0gW107XG5cblx0aWYgKG9FbnRyeSkge1xuXHRcdGlmIChhU2VtS2V5cyAmJiBhU2VtS2V5cy5sZW5ndGggPiAwKSB7XG5cdFx0XHRmb3IgKGxldCBqID0gMDsgaiA8IGFTZW1LZXlzLmxlbmd0aDsgaisrKSB7XG5cdFx0XHRcdGNvbnN0IHNTZW1LZXkgPSBhU2VtS2V5c1tqXS4kUHJvcGVydHlQYXRoO1xuXHRcdFx0XHRpZiAoIW9QYXJhbVtzU2VtS2V5XSkge1xuXHRcdFx0XHRcdG9QYXJhbVtzU2VtS2V5XSA9IHsgdmFsdWU6IG9FbnRyeVtzU2VtS2V5XSB9O1xuXHRcdFx0XHR9XG5cdFx0XHR9XG5cdFx0fSBlbHNlIHtcblx0XHRcdC8vIGZhbGxiYWNrIHRvIFRlY2huaWNhbCBLZXlzIGlmIG5vIFNlbWFudGljIEtleSBpcyBwcmVzZW50XG5cdFx0XHRjb25zdCBhVGVjaG5pY2FsS2V5cyA9IG9NZXRhTW9kZWwuZ2V0T2JqZWN0KG9NZXRhUGF0aCArIFwiLyRUeXBlLyRLZXlcIik7XG5cdFx0XHRmb3IgKGNvbnN0IGtleSBpbiBhVGVjaG5pY2FsS2V5cykge1xuXHRcdFx0XHRjb25zdCBzT2JqS2V5ID0gYVRlY2huaWNhbEtleXNba2V5XTtcblx0XHRcdFx0aWYgKCFvUGFyYW1bc09iaktleV0pIHtcblx0XHRcdFx0XHRvUGFyYW1bc09iaktleV0gPSB7IHZhbHVlOiBvRW50cnlbc09iaktleV0gfTtcblx0XHRcdFx0fVxuXHRcdFx0fVxuXHRcdH1cblx0fVxuXHQvLyBMb2dpYyB0byByZWFkIGFkZGl0aW9uYWwgU08gZnJvbSBtYW5pZmVzdCBhbmQgdXBkYXRlZCByZWxhdGVkYXBwcyBtb2RlbFxuXG5cdGNvbnN0IG9NYW5pZmVzdERhdGEgPSBnZXRUYXJnZXRWaWV3KG9PYmplY3RQYWdlTGF5b3V0KS5nZXRWaWV3RGF0YSgpO1xuXHRjb25zdCBhTWFuaWZlc3RTT0l0ZW1zOiBhbnlbXSA9IFtdO1xuXHRpZiAob01hbmlmZXN0RGF0YS5hZGRpdGlvbmFsU2VtYW50aWNPYmplY3RzKSB7XG5cdFx0Y29uc3QgYU1hbmlmZXN0U09LZXlzID0gT2JqZWN0LmtleXMob01hbmlmZXN0RGF0YS5hZGRpdGlvbmFsU2VtYW50aWNPYmplY3RzKTtcblx0XHRmb3IgKGxldCBrZXkgPSAwOyBrZXkgPCBhTWFuaWZlc3RTT0tleXMubGVuZ3RoOyBrZXkrKykge1xuXHRcdFx0X2dldFNPSW50ZW50cyhvT2JqZWN0UGFnZUxheW91dCwgYU1hbmlmZXN0U09LZXlzW2tleV0sIG9QYXJhbSlcblx0XHRcdFx0LnRoZW4oXG5cdFx0XHRcdFx0X2dldFJlbGF0ZWRJbnRlbnRzLmJpbmQoXG5cdFx0XHRcdFx0XHR0aGlzIGFzIGFueSxcblx0XHRcdFx0XHRcdG9NYW5pZmVzdERhdGEuYWRkaXRpb25hbFNlbWFudGljT2JqZWN0c1thTWFuaWZlc3RTT0tleXNba2V5XV0sXG5cdFx0XHRcdFx0XHRvQmluZGluZ0NvbnRleHQsXG5cdFx0XHRcdFx0XHRhTWFuaWZlc3RTT0l0ZW1zXG5cdFx0XHRcdFx0KVxuXHRcdFx0XHQpXG5cdFx0XHRcdC5jYXRjaChmdW5jdGlvbiAob0Vycm9yOiBhbnkpIHtcblx0XHRcdFx0XHRMb2cuZXJyb3IoXCJFcnJvciB3aGlsZSByZXRyaWV2aW5nIFNPIEludGVudHNcIiwgb0Vycm9yKTtcblx0XHRcdFx0fSk7XG5cdFx0fVxuXHR9XG5cblx0ZnVuY3Rpb24gZm5HZXRQYXJzZVNoZWxsSGFzaEFuZEdldExpbmtzKCkge1xuXHRcdGNvbnN0IG9QYXJzZWRVcmwgPSBvU2hlbGxTZXJ2aWNlSGVscGVyLnBhcnNlU2hlbGxIYXNoKGRvY3VtZW50LmxvY2F0aW9uLmhhc2gpO1xuXHRcdHNDdXJyZW50U2VtT2JqID0gb1BhcnNlZFVybC5zZW1hbnRpY09iamVjdDsgLy8gQ3VycmVudCBTZW1hbnRpYyBPYmplY3Rcblx0XHRzQ3VycmVudEFjdGlvbiA9IG9QYXJzZWRVcmwuYWN0aW9uO1xuXHRcdHJldHVybiBfZ2V0U09JbnRlbnRzKG9PYmplY3RQYWdlTGF5b3V0LCBzQ3VycmVudFNlbU9iaiwgb1BhcmFtKTtcblx0fVxuXG5cdGZuR2V0UGFyc2VTaGVsbEhhc2hBbmRHZXRMaW5rcygpXG5cdFx0LnRoZW4oZnVuY3Rpb24gKGFMaW5rczogYW55KSB7XG5cdFx0XHRpZiAoYUxpbmtzICYmIGFMaW5rcy5sZW5ndGggPiAwKSB7XG5cdFx0XHRcdGNvbnN0IG9UYXJnZXRQYXJhbXM6IGFueSA9IHt9O1xuXHRcdFx0XHRjb25zdCBhQW5ub3RhdGlvbnNTT0l0ZW1zOiBhbnlbXSA9IFtdO1xuXHRcdFx0XHRjb25zdCBzRW50aXR5U2V0UGF0aCA9IG9NZXRhUGF0aCArIFwiQFwiO1xuXHRcdFx0XHRjb25zdCBzRW50aXR5VHlwZVBhdGggPSBvTWV0YVBhdGggKyBcIi9AXCI7XG5cdFx0XHRcdGNvbnN0IG9FbnRpdHlTZXRBbm5vdGF0aW9ucyA9IG9NZXRhTW9kZWwuZ2V0T2JqZWN0KHNFbnRpdHlTZXRQYXRoKTtcblx0XHRcdFx0b1NlbWFudGljT2JqZWN0QW5ub3RhdGlvbnMgPSBfZ2V0U2VtYW50aWNPYmplY3RBbm5vdGF0aW9ucyhvRW50aXR5U2V0QW5ub3RhdGlvbnMsIHNDdXJyZW50U2VtT2JqKTtcblx0XHRcdFx0aWYgKCFvU2VtYW50aWNPYmplY3RBbm5vdGF0aW9ucy5iSGFzRW50aXR5U2V0U08pIHtcblx0XHRcdFx0XHRjb25zdCBvRW50aXR5VHlwZUFubm90YXRpb25zID0gb01ldGFNb2RlbC5nZXRPYmplY3Qoc0VudGl0eVR5cGVQYXRoKTtcblx0XHRcdFx0XHRvU2VtYW50aWNPYmplY3RBbm5vdGF0aW9ucyA9IF9nZXRTZW1hbnRpY09iamVjdEFubm90YXRpb25zKG9FbnRpdHlUeXBlQW5ub3RhdGlvbnMsIHNDdXJyZW50U2VtT2JqKTtcblx0XHRcdFx0fVxuXHRcdFx0XHRhRXhjbHVkZWRBY3Rpb25zID0gb1NlbWFudGljT2JqZWN0QW5ub3RhdGlvbnMuYVVuYXZhaWxhYmxlQWN0aW9ucztcblx0XHRcdFx0Ly9Ta2lwIHNhbWUgYXBwbGljYXRpb24gZnJvbSBSZWxhdGVkIEFwcHNcblx0XHRcdFx0YUV4Y2x1ZGVkQWN0aW9ucy5wdXNoKHNDdXJyZW50QWN0aW9uKTtcblx0XHRcdFx0b1RhcmdldFBhcmFtcy5uYXZpZ2F0aW9uQ29udGV4dHMgPSBvQmluZGluZ0NvbnRleHQ7XG5cdFx0XHRcdG9UYXJnZXRQYXJhbXMuc2VtYW50aWNPYmplY3RNYXBwaW5nID0gb1NlbWFudGljT2JqZWN0QW5ub3RhdGlvbnMuYU1hcHBpbmdzO1xuXHRcdFx0XHRfZ2V0UmVsYXRlZEFwcHNNZW51SXRlbXMoYUxpbmtzLCBhRXhjbHVkZWRBY3Rpb25zLCBvVGFyZ2V0UGFyYW1zLCBhQW5ub3RhdGlvbnNTT0l0ZW1zKTtcblx0XHRcdFx0YVJlbGF0ZWRBcHBzTWVudUl0ZW1zID0gYUFubm90YXRpb25zU09JdGVtcy5jb25jYXQoYU1hbmlmZXN0U09JdGVtcyk7XG5cdFx0XHRcdC8vIElmIG5vIGFwcCBpbiBsaXN0LCByZWxhdGVkIGFwcHMgYnV0dG9uIHdpbGwgYmUgaGlkZGVuXG5cdFx0XHRcdG9PYmplY3RQYWdlTGF5b3V0LmdldEJpbmRpbmdDb250ZXh0KFwiaW50ZXJuYWxcIikuc2V0UHJvcGVydHkoXCJyZWxhdGVkQXBwcy92aXNpYmlsaXR5XCIsIGFSZWxhdGVkQXBwc01lbnVJdGVtcy5sZW5ndGggPiAwKTtcblx0XHRcdFx0b09iamVjdFBhZ2VMYXlvdXQuZ2V0QmluZGluZ0NvbnRleHQoXCJpbnRlcm5hbFwiKS5zZXRQcm9wZXJ0eShcInJlbGF0ZWRBcHBzL2l0ZW1zXCIsIGFSZWxhdGVkQXBwc01lbnVJdGVtcyk7XG5cdFx0XHR9IGVsc2Uge1xuXHRcdFx0XHRvT2JqZWN0UGFnZUxheW91dC5nZXRCaW5kaW5nQ29udGV4dChcImludGVybmFsXCIpLnNldFByb3BlcnR5KFwicmVsYXRlZEFwcHMvdmlzaWJpbGl0eVwiLCBmYWxzZSk7XG5cdFx0XHR9XG5cdFx0fSlcblx0XHQuY2F0Y2goZnVuY3Rpb24gKG9FcnJvcjogYW55KSB7XG5cdFx0XHRMb2cuZXJyb3IoXCJDYW5ub3QgcmVhZCBsaW5rc1wiLCBvRXJyb3IpO1xuXHRcdH0pO1xuXHRyZXR1cm4gYVJlbGF0ZWRBcHBzTWVudUl0ZW1zO1xufVxuZnVuY3Rpb24gX2dldFNlbWFudGljT2JqZWN0QW5ub3RhdGlvbnMob0VudGl0eUFubm90YXRpb25zOiBhbnksIHNDdXJyZW50U2VtT2JqOiBhbnkpIHtcblx0Y29uc3Qgb1NlbWFudGljT2JqZWN0QW5ub3RhdGlvbnMgPSB7XG5cdFx0Ykhhc0VudGl0eVNldFNPOiBmYWxzZSxcblx0XHRhVW5hdmFpbGFibGVBY3Rpb25zOiBbXSxcblx0XHRhTWFwcGluZ3M6IFtdXG5cdH07XG5cdGxldCBzQW5ub3RhdGlvbk1hcHBpbmdUZXJtLCBzQW5ub3RhdGlvbkFjdGlvblRlcm07XG5cdGxldCBzUXVhbGlmaWVyO1xuXHRmb3IgKGNvbnN0IGtleSBpbiBvRW50aXR5QW5ub3RhdGlvbnMpIHtcblx0XHRpZiAoa2V5LmluZGV4T2YoXCJjb20uc2FwLnZvY2FidWxhcmllcy5Db21tb24udjEuU2VtYW50aWNPYmplY3RcIikgPiAtMSAmJiBvRW50aXR5QW5ub3RhdGlvbnNba2V5XSA9PT0gc0N1cnJlbnRTZW1PYmopIHtcblx0XHRcdG9TZW1hbnRpY09iamVjdEFubm90YXRpb25zLmJIYXNFbnRpdHlTZXRTTyA9IHRydWU7XG5cdFx0XHRzQW5ub3RhdGlvbk1hcHBpbmdUZXJtID0gXCJAY29tLnNhcC52b2NhYnVsYXJpZXMuQ29tbW9uLnYxLlNlbWFudGljT2JqZWN0TWFwcGluZ1wiO1xuXHRcdFx0c0Fubm90YXRpb25BY3Rpb25UZXJtID0gXCJAY29tLnNhcC52b2NhYnVsYXJpZXMuQ29tbW9uLnYxLlNlbWFudGljT2JqZWN0VW5hdmFpbGFibGVBY3Rpb25zXCI7XG5cblx0XHRcdGlmIChrZXkuaW5kZXhPZihcIiNcIikgPiAtMSkge1xuXHRcdFx0XHRzUXVhbGlmaWVyID0ga2V5LnNwbGl0KFwiI1wiKVsxXTtcblx0XHRcdFx0c0Fubm90YXRpb25NYXBwaW5nVGVybSA9IHNBbm5vdGF0aW9uTWFwcGluZ1Rlcm0gKyBcIiNcIiArIHNRdWFsaWZpZXI7XG5cdFx0XHRcdHNBbm5vdGF0aW9uQWN0aW9uVGVybSA9IHNBbm5vdGF0aW9uQWN0aW9uVGVybSArIFwiI1wiICsgc1F1YWxpZmllcjtcblx0XHRcdH1cblxuXHRcdFx0b1NlbWFudGljT2JqZWN0QW5ub3RhdGlvbnMuYU1hcHBpbmdzID0gb1NlbWFudGljT2JqZWN0QW5ub3RhdGlvbnMuYU1hcHBpbmdzLmNvbmNhdChvRW50aXR5QW5ub3RhdGlvbnNbc0Fubm90YXRpb25NYXBwaW5nVGVybV0pO1xuXHRcdFx0b1NlbWFudGljT2JqZWN0QW5ub3RhdGlvbnMuYVVuYXZhaWxhYmxlQWN0aW9ucyA9IG9TZW1hbnRpY09iamVjdEFubm90YXRpb25zLmFVbmF2YWlsYWJsZUFjdGlvbnMuY29uY2F0KFxuXHRcdFx0XHRvRW50aXR5QW5ub3RhdGlvbnNbc0Fubm90YXRpb25BY3Rpb25UZXJtXVxuXHRcdFx0KTtcblxuXHRcdFx0YnJlYWs7XG5cdFx0fVxuXHR9XG5cdHJldHVybiBvU2VtYW50aWNPYmplY3RBbm5vdGF0aW9ucztcbn1cbmZ1bmN0aW9uIGZuVXBkYXRlUmVsYXRlZEFwcHNEZXRhaWxzKG9PYmplY3RQYWdlTGF5b3V0OiBhbnkpIHtcblx0Y29uc3Qgb01ldGFNb2RlbCA9IG9PYmplY3RQYWdlTGF5b3V0LmdldE1vZGVsKCkuZ2V0TWV0YU1vZGVsKCk7XG5cdGNvbnN0IG9CaW5kaW5nQ29udGV4dCA9IG9PYmplY3RQYWdlTGF5b3V0LmdldEJpbmRpbmdDb250ZXh0KCk7XG5cdGNvbnN0IG9QYXRoID0gb0JpbmRpbmdDb250ZXh0ICYmIG9CaW5kaW5nQ29udGV4dC5nZXRQYXRoKCk7XG5cdGNvbnN0IG9NZXRhUGF0aCA9IG9NZXRhTW9kZWwuZ2V0TWV0YVBhdGgob1BhdGgpO1xuXHQvLyBTZW1hbnRpYyBLZXkgVm9jYWJ1bGFyeVxuXHRjb25zdCBzU2VtYW50aWNLZXlWb2NhYnVsYXJ5ID0gb01ldGFQYXRoICsgXCIvXCIgKyBcIkBjb20uc2FwLnZvY2FidWxhcmllcy5Db21tb24udjEuU2VtYW50aWNLZXlcIjtcblx0Ly9TZW1hbnRpYyBLZXlzXG5cdGNvbnN0IGFTZW1LZXlzID0gb01ldGFNb2RlbC5nZXRPYmplY3Qoc1NlbWFudGljS2V5Vm9jYWJ1bGFyeSk7XG5cdC8vIFVuYXZhaWxhYmxlIEFjdGlvbnNcblx0Y29uc3Qgb0VudHJ5ID0gb0JpbmRpbmdDb250ZXh0LmdldE9iamVjdCgpO1xuXHRpZiAoIW9FbnRyeSkge1xuXHRcdG9CaW5kaW5nQ29udGV4dFxuXHRcdFx0LnJlcXVlc3RPYmplY3QoKVxuXHRcdFx0LnRoZW4oZnVuY3Rpb24gKG9FbnRyeTogYW55KSB7XG5cdFx0XHRcdHJldHVybiB1cGRhdGVSZWxhdGVBcHBzTW9kZWwob0JpbmRpbmdDb250ZXh0LCBvRW50cnksIG9PYmplY3RQYWdlTGF5b3V0LCBhU2VtS2V5cywgb01ldGFNb2RlbCwgb01ldGFQYXRoKTtcblx0XHRcdH0pXG5cdFx0XHQuY2F0Y2goZnVuY3Rpb24gKG9FcnJvcjogYW55KSB7XG5cdFx0XHRcdExvZy5lcnJvcihcIkNhbm5vdCB1cGRhdGUgdGhlIHJlbGF0ZWQgYXBwIGRldGFpbHNcIiwgb0Vycm9yKTtcblx0XHRcdH0pO1xuXHR9IGVsc2Uge1xuXHRcdHJldHVybiB1cGRhdGVSZWxhdGVBcHBzTW9kZWwob0JpbmRpbmdDb250ZXh0LCBvRW50cnksIG9PYmplY3RQYWdlTGF5b3V0LCBhU2VtS2V5cywgb01ldGFNb2RlbCwgb01ldGFQYXRoKTtcblx0fVxufVxuLyoqXG4gKiBAcGFyYW0gb0J1dHRvblxuICovXG5mdW5jdGlvbiBmbkZpcmVCdXR0b25QcmVzcyhvQnV0dG9uOiBhbnkpIHtcblx0Y29uc3QgYUF1dGhvcml6ZWRUeXBlcyA9IFtcInNhcC5tLkJ1dHRvblwiLCBcInNhcC5tLk92ZXJmbG93VG9vbGJhckJ1dHRvblwiXTtcblx0aWYgKG9CdXR0b24gJiYgYUF1dGhvcml6ZWRUeXBlcy5pbmRleE9mKG9CdXR0b24uZ2V0TWV0YWRhdGEoKS5nZXROYW1lKCkpICE9PSAtMSAmJiBvQnV0dG9uLmdldFZpc2libGUoKSAmJiBvQnV0dG9uLmdldEVuYWJsZWQoKSkge1xuXHRcdG9CdXR0b24uZmlyZVByZXNzKCk7XG5cdH1cbn1cbmZ1bmN0aW9uIGZuUmVzb2x2ZVN0cmluZ3RvQm9vbGVhbihzVmFsdWU6IGFueSkge1xuXHRpZiAoc1ZhbHVlID09PSBcInRydWVcIiB8fCBzVmFsdWUgPT09IHRydWUpIHtcblx0XHRyZXR1cm4gdHJ1ZTtcblx0fSBlbHNlIHtcblx0XHRyZXR1cm4gZmFsc2U7XG5cdH1cbn1cbmZ1bmN0aW9uIGdldEFwcENvbXBvbmVudChvQ29udHJvbDogYW55KTogQXBwQ29tcG9uZW50IHtcblx0aWYgKG9Db250cm9sLmlzQShcInNhcC5mZS5jb3JlLkFwcENvbXBvbmVudFwiKSkge1xuXHRcdHJldHVybiBvQ29udHJvbDtcblx0fVxuXHRjb25zdCBvT3duZXIgPSBDb21wb25lbnQuZ2V0T3duZXJDb21wb25lbnRGb3Iob0NvbnRyb2wpO1xuXHRpZiAoIW9Pd25lcikge1xuXHRcdHJldHVybiBvQ29udHJvbDtcblx0fSBlbHNlIHtcblx0XHRyZXR1cm4gZ2V0QXBwQ29tcG9uZW50KG9Pd25lcik7XG5cdH1cbn1cbmZ1bmN0aW9uIGdldFRhcmdldFZpZXcob0NvbnRyb2w6IGFueSkge1xuXHRpZiAob0NvbnRyb2wgJiYgb0NvbnRyb2wuaXNBKFwic2FwLnVpLmNvcmUuQ29tcG9uZW50Q29udGFpbmVyXCIpKSB7XG5cdFx0b0NvbnRyb2wgPSBvQ29udHJvbC5nZXRDb21wb25lbnRJbnN0YW5jZSgpO1xuXHRcdG9Db250cm9sID0gb0NvbnRyb2wgJiYgb0NvbnRyb2wuZ2V0Um9vdENvbnRyb2woKTtcblx0fVxuXHR3aGlsZSAob0NvbnRyb2wgJiYgIShvQ29udHJvbCBpbnN0YW5jZW9mIFZpZXcpKSB7XG5cdFx0b0NvbnRyb2wgPSBvQ29udHJvbC5nZXRQYXJlbnQoKTtcblx0fVxuXHRyZXR1cm4gb0NvbnRyb2w7XG59XG4vKipcbiAqIEBwYXJhbSBmblByb2Nlc3NGdW5jdGlvblxuICogQHBhcmFtIGZuQ2FuY2VsRnVuY3Rpb25cbiAqIEBwYXJhbSBvQ29udGV4dFxuICogQHBhcmFtIG9Db250cm9sbGVyXG4gKiBAcGFyYW0gYlNraXBCaW5kaW5nVG9WaWV3XG4gKi9cbmZ1bmN0aW9uIGZuUHJvY2Vzc0RhdGFMb3NzT3JEcmFmdERpc2NhcmRDb25maXJtYXRpb24oXG5cdGZuUHJvY2Vzc0Z1bmN0aW9uOiBhbnksXG5cdGZuQ2FuY2VsRnVuY3Rpb246IGFueSxcblx0b0NvbnRleHQ6IGFueSxcblx0b0NvbnRyb2xsZXI6IGFueSxcblx0YlNraXBCaW5kaW5nVG9WaWV3PzogYm9vbGVhblxuKSB7XG5cdGNvbnN0IG9Nb2RlbCA9IG9Db250ZXh0LmdldE1vZGVsKCk7XG5cdGxldCBfYklzTW9kaWZpZWQgPSBmYWxzZTtcblx0Y29uc3QgZHJhZnREYXRhQ29udGV4dCA9IG9Nb2RlbC5iaW5kQ29udGV4dChvQ29udGV4dC5nZXRQYXRoKCkgKyBcIi9EcmFmdEFkbWluaXN0cmF0aXZlRGF0YVwiKS5nZXRCb3VuZENvbnRleHQoKTtcblxuXHRjb25zdCBjb2xsYWJvcmF0aW9uQ29ubmVjdGVkID0gaXNDb25uZWN0ZWQob0NvbnRyb2xsZXIuZ2V0VmlldygpKTtcblx0Y29uc3QgcHJvY2Vzc0Z1bmN0aW9uRm9yRHJhZnRzID0gIWNvbGxhYm9yYXRpb25Db25uZWN0ZWRcblx0XHQ/IGZuUHJvY2Vzc0Z1bmN0aW9uXG5cdFx0OiBmdW5jdGlvbiAoLi4uYXJnczogYW55W10pIHtcblx0XHRcdFx0ZGlzY29ubmVjdChvQ29udHJvbGxlci5nZXRWaWV3KCkpO1xuXHRcdFx0XHRmblByb2Nlc3NGdW5jdGlvbi5hcHBseShudWxsLCAuLi5hcmdzKTtcblx0XHQgIH07XG5cblx0aWYgKFxuXHRcdG9Db250ZXh0ICYmXG5cdFx0b0NvbnRleHQuZ2V0T2JqZWN0KCkgJiZcblx0XHQoIW9Db250ZXh0LmdldE9iamVjdCgpLkRyYWZ0QWRtaW5pc3RyYXRpdmVEYXRhIHx8IG9Db250ZXh0LmdldE9iamVjdCgpLklzQWN0aXZlRW50aXR5ID09PSB0cnVlKVxuXHQpIHtcblx0XHRmblByb2Nlc3NGdW5jdGlvbigpO1xuXHR9IGVsc2Uge1xuXHRcdGRyYWZ0RGF0YUNvbnRleHRcblx0XHRcdC5yZXF1ZXN0T2JqZWN0KClcblx0XHRcdC50aGVuKGZ1bmN0aW9uIChkcmFmdEFkbWluRGF0YTogYW55KSB7XG5cdFx0XHRcdGlmIChkcmFmdEFkbWluRGF0YSkge1xuXHRcdFx0XHRcdF9iSXNNb2RpZmllZCA9ICEoZHJhZnRBZG1pbkRhdGEuQ3JlYXRpb25EYXRlVGltZSA9PT0gZHJhZnRBZG1pbkRhdGEuTGFzdENoYW5nZURhdGVUaW1lKTtcblx0XHRcdFx0XHRpZiAoX2JJc01vZGlmaWVkKSB7XG5cdFx0XHRcdFx0XHRwZXJmb3JtQWZ0ZXJEaXNjYXJkb3JLZWVwRHJhZnQocHJvY2Vzc0Z1bmN0aW9uRm9yRHJhZnRzLCBmbkNhbmNlbEZ1bmN0aW9uLCBvQ29udHJvbGxlciwgYlNraXBCaW5kaW5nVG9WaWV3KTtcblx0XHRcdFx0XHR9IGVsc2Uge1xuXHRcdFx0XHRcdFx0cHJvY2Vzc0Z1bmN0aW9uRm9yRHJhZnRzKCk7XG5cdFx0XHRcdFx0fVxuXHRcdFx0XHR9IGVsc2Uge1xuXHRcdFx0XHRcdGZuUHJvY2Vzc0Z1bmN0aW9uKCk7XG5cdFx0XHRcdH1cblx0XHRcdH0pXG5cdFx0XHQuY2F0Y2goZnVuY3Rpb24gKG9FcnJvcjogYW55KSB7XG5cdFx0XHRcdExvZy5lcnJvcihcIkNhbm5vdCByZXRyaWV2ZSBkcmFmdERhdGFDb250ZXh0IGluZm9ybWF0aW9uXCIsIG9FcnJvcik7XG5cdFx0XHR9KTtcblx0fVxufVxuZnVuY3Rpb24gZm5Qcm9jZXNzRGF0YUxvc3NDb25maXJtYXRpb24oZm5Qcm9jZXNzOiBGdW5jdGlvbiwgb0NvbnRyb2w6IGFueSwgcHJvZ3JhbW1pbmdNb2RlbDogc3RyaW5nKSB7XG5cdGNvbnN0IGJVSUVkaXRhYmxlID0gb0NvbnRyb2wuZ2V0TW9kZWwoXCJ1aVwiKS5nZXRQcm9wZXJ0eShcIi9pc0VkaXRhYmxlXCIpLFxuXHRcdG9SZXNvdXJjZUJ1bmRsZSA9IChDb3JlIGFzIENvcmVFeCkuZ2V0TGlicmFyeVJlc291cmNlQnVuZGxlKFwic2FwLmZlLnRlbXBsYXRlc1wiKSxcblx0XHRzV2FybmluZ01zZyA9IG9SZXNvdXJjZUJ1bmRsZSAmJiBvUmVzb3VyY2VCdW5kbGUuZ2V0VGV4dChcIlRfQ09NTU9OX1VUSUxTX05BVklHQVRJT05fQVdBWV9NU0dcIiksXG5cdFx0c0NvbmZpcm1CdXR0b25UeHQgPSBvUmVzb3VyY2VCdW5kbGUgJiYgb1Jlc291cmNlQnVuZGxlLmdldFRleHQoXCJUX0NPTU1PTl9VVElMU19OQVZJR0FUSU9OX0FXQVlfQ09ORklSTV9CVVRUT05cIiksXG5cdFx0c0NhbmNlbEJ1dHRvblR4dCA9IG9SZXNvdXJjZUJ1bmRsZSAmJiBvUmVzb3VyY2VCdW5kbGUuZ2V0VGV4dChcIlRfQ09NTU9OX1VUSUxTX05BVklHQVRJT05fQVdBWV9DQU5DRUxfQlVUVE9OXCIpO1xuXG5cdGlmIChwcm9ncmFtbWluZ01vZGVsID09PSBQcm9ncmFtbWluZ01vZGVsLlN0aWNreSAmJiBiVUlFZGl0YWJsZSkge1xuXHRcdHJldHVybiBNZXNzYWdlQm94Lndhcm5pbmcoc1dhcm5pbmdNc2csIHtcblx0XHRcdGFjdGlvbnM6IFtzQ29uZmlybUJ1dHRvblR4dCwgc0NhbmNlbEJ1dHRvblR4dF0sXG5cdFx0XHRvbkNsb3NlOiBmdW5jdGlvbiAoc0FjdGlvbjogYW55KSB7XG5cdFx0XHRcdGlmIChzQWN0aW9uID09PSBzQ29uZmlybUJ1dHRvblR4dCkge1xuXHRcdFx0XHRcdGNvbnN0IG9JbnRlcm5hbE1vZGVsID0gb0NvbnRyb2wgJiYgb0NvbnRyb2wuZ2V0TW9kZWwoXCJpbnRlcm5hbFwiKTtcblxuXHRcdFx0XHRcdExvZy5pbmZvKFwiTmF2aWdhdGlvbiBjb25maXJtZWQuXCIpO1xuXHRcdFx0XHRcdGlmIChvSW50ZXJuYWxNb2RlbCkge1xuXHRcdFx0XHRcdFx0b0ludGVybmFsTW9kZWwuc2V0UHJvcGVydHkoXCIvc2Vzc2lvbk9uXCIsIGZhbHNlKTtcblx0XHRcdFx0XHR9IGVsc2Uge1xuXHRcdFx0XHRcdFx0TG9nLndhcm5pbmcoXCJMb2NhbCBVSU1vZGVsIGNvdWxkbid0IGJlIGZvdW5kLlwiKTtcblx0XHRcdFx0XHR9XG5cdFx0XHRcdFx0Zm5Qcm9jZXNzKCk7XG5cdFx0XHRcdH0gZWxzZSB7XG5cdFx0XHRcdFx0TG9nLmluZm8oXCJOYXZpZ2F0aW9uIHJlamVjdGVkLlwiKTtcblx0XHRcdFx0fVxuXHRcdFx0fVxuXHRcdH0pO1xuXHR9XG5cdHJldHVybiBmblByb2Nlc3MoKTtcbn1cbmZ1bmN0aW9uIGlzRmllbGRDb250cm9sUGF0aEluYXBwbGljYWJsZShzRmllbGRDb250cm9sUGF0aDogc3RyaW5nLCBvQXR0cmlidXRlOiBhbnkpIHtcblx0bGV0IGJJbmFwcGxpY2FibGUgPSBmYWxzZTtcblx0Y29uc3QgYVBhcnRzID0gc0ZpZWxkQ29udHJvbFBhdGguc3BsaXQoXCIvXCIpO1xuXHQvLyBzZW5zaXRpdmUgZGF0YSBpcyByZW1vdmVkIG9ubHkgaWYgdGhlIHBhdGggaGFzIGFscmVhZHkgYmVlbiByZXNvbHZlZC5cblx0aWYgKGFQYXJ0cy5sZW5ndGggPiAxKSB7XG5cdFx0YkluYXBwbGljYWJsZSA9IG9BdHRyaWJ1dGVbYVBhcnRzWzBdXSAmJiBvQXR0cmlidXRlW2FQYXJ0c1swXV0uaGFzT3duUHJvcGVydHkoYVBhcnRzWzFdKSAmJiBvQXR0cmlidXRlW2FQYXJ0c1swXV1bYVBhcnRzWzFdXSA9PT0gMDtcblx0fSBlbHNlIHtcblx0XHRiSW5hcHBsaWNhYmxlID0gb0F0dHJpYnV0ZVtzRmllbGRDb250cm9sUGF0aF0gPT09IDA7XG5cdH1cblx0cmV0dXJuIGJJbmFwcGxpY2FibGU7XG59XG5mdW5jdGlvbiByZW1vdmVTZW5zaXRpdmVEYXRhKGFBdHRyaWJ1dGVzOiBhbnlbXSwgb01ldGFNb2RlbDogT0RhdGFNZXRhTW9kZWwpIHtcblx0Y29uc3QgYU91dEF0dHJpYnV0ZXMgPSBbXTtcblx0Zm9yIChsZXQgaSA9IDA7IGkgPCBhQXR0cmlidXRlcy5sZW5ndGg7IGkrKykge1xuXHRcdGNvbnN0IHNFbnRpdHlTZXQgPSBhQXR0cmlidXRlc1tpXS5lbnRpdHlTZXQsXG5cdFx0XHRvQXR0cmlidXRlID0gYUF0dHJpYnV0ZXNbaV0uY29udGV4dERhdGE7XG5cblx0XHRkZWxldGUgb0F0dHJpYnV0ZVtcIkBvZGF0YS5jb250ZXh0XCJdO1xuXHRcdGRlbGV0ZSBvQXR0cmlidXRlW1wiJTQwb2RhdGEuY29udGV4dFwiXTtcblx0XHRkZWxldGUgb0F0dHJpYnV0ZVtcIkBvZGF0YS5tZXRhZGF0YUV0YWdcIl07XG5cdFx0ZGVsZXRlIG9BdHRyaWJ1dGVbXCIlNDBvZGF0YS5tZXRhZGF0YUV0YWdcIl07XG5cdFx0ZGVsZXRlIG9BdHRyaWJ1dGVbXCJTQVBfX01lc3NhZ2VzXCJdO1xuXHRcdGNvbnN0IGFQcm9wZXJ0aWVzID0gT2JqZWN0LmtleXMob0F0dHJpYnV0ZSk7XG5cdFx0Zm9yIChsZXQgaiA9IDA7IGogPCBhUHJvcGVydGllcy5sZW5ndGg7IGorKykge1xuXHRcdFx0Y29uc3Qgc1Byb3AgPSBhUHJvcGVydGllc1tqXSxcblx0XHRcdFx0YVByb3BlcnR5QW5ub3RhdGlvbnMgPSBvTWV0YU1vZGVsLmdldE9iamVjdChcIi9cIiArIHNFbnRpdHlTZXQgKyBcIi9cIiArIHNQcm9wICsgXCJAXCIpO1xuXHRcdFx0aWYgKGFQcm9wZXJ0eUFubm90YXRpb25zKSB7XG5cdFx0XHRcdGlmIChcblx0XHRcdFx0XHRhUHJvcGVydHlBbm5vdGF0aW9uc1tcIkBjb20uc2FwLnZvY2FidWxhcmllcy5QZXJzb25hbERhdGEudjEuSXNQb3RlbnRpYWxseVNlbnNpdGl2ZVwiXSB8fFxuXHRcdFx0XHRcdGFQcm9wZXJ0eUFubm90YXRpb25zW1wiQGNvbS5zYXAudm9jYWJ1bGFyaWVzLlVJLnYxLkV4Y2x1ZGVGcm9tTmF2aWdhdGlvbkNvbnRleHRcIl0gfHxcblx0XHRcdFx0XHRhUHJvcGVydHlBbm5vdGF0aW9uc1tcIkBjb20uc2FwLnZvY2FidWxhcmllcy5BbmFseXRpY3MudjEuTWVhc3VyZVwiXVxuXHRcdFx0XHQpIHtcblx0XHRcdFx0XHRkZWxldGUgb0F0dHJpYnV0ZVtzUHJvcF07XG5cdFx0XHRcdH0gZWxzZSBpZiAoYVByb3BlcnR5QW5ub3RhdGlvbnNbXCJAY29tLnNhcC52b2NhYnVsYXJpZXMuQ29tbW9uLnYxLkZpZWxkQ29udHJvbFwiXSkge1xuXHRcdFx0XHRcdGNvbnN0IG9GaWVsZENvbnRyb2wgPSBhUHJvcGVydHlBbm5vdGF0aW9uc1tcIkBjb20uc2FwLnZvY2FidWxhcmllcy5Db21tb24udjEuRmllbGRDb250cm9sXCJdO1xuXHRcdFx0XHRcdGlmIChvRmllbGRDb250cm9sW1wiJEVudW1NZW1iZXJcIl0gJiYgb0ZpZWxkQ29udHJvbFtcIiRFbnVtTWVtYmVyXCJdLnNwbGl0KFwiL1wiKVsxXSA9PT0gXCJJbmFwcGxpY2FibGVcIikge1xuXHRcdFx0XHRcdFx0ZGVsZXRlIG9BdHRyaWJ1dGVbc1Byb3BdO1xuXHRcdFx0XHRcdH0gZWxzZSBpZiAob0ZpZWxkQ29udHJvbFtcIiRQYXRoXCJdICYmIENvbW1vblV0aWxzLmlzRmllbGRDb250cm9sUGF0aEluYXBwbGljYWJsZShvRmllbGRDb250cm9sW1wiJFBhdGhcIl0sIG9BdHRyaWJ1dGUpKSB7XG5cdFx0XHRcdFx0XHRkZWxldGUgb0F0dHJpYnV0ZVtzUHJvcF07XG5cdFx0XHRcdFx0fVxuXHRcdFx0XHR9XG5cdFx0XHR9XG5cdFx0fVxuXHRcdGFPdXRBdHRyaWJ1dGVzLnB1c2gob0F0dHJpYnV0ZSk7XG5cdH1cblxuXHRyZXR1cm4gYU91dEF0dHJpYnV0ZXM7XG59XG5mdW5jdGlvbiBfZm5DaGVja0lzTWF0Y2gob09iamVjdDogYW55LCBvS2V5c1RvQ2hlY2s6IGFueSkge1xuXHRmb3IgKGNvbnN0IHNLZXkgaW4gb0tleXNUb0NoZWNrKSB7XG5cdFx0aWYgKG9LZXlzVG9DaGVja1tzS2V5XSAhPT0gb09iamVjdFtzS2V5XSkge1xuXHRcdFx0cmV0dXJuIGZhbHNlO1xuXHRcdH1cblx0fVxuXHRyZXR1cm4gdHJ1ZTtcbn1cbmZ1bmN0aW9uIGZuR2V0Q29udGV4dFBhdGhQcm9wZXJ0aWVzKG9NZXRhTW9kZWw6IE9EYXRhTWV0YU1vZGVsLCBzQ29udGV4dFBhdGg6IHN0cmluZywgb0ZpbHRlcj86IG9iamVjdCkge1xuXHRjb25zdCBvRW50aXR5VHlwZSA9IG9NZXRhTW9kZWwuZ2V0T2JqZWN0KHNDb250ZXh0UGF0aCArIFwiL1wiKSB8fCB7fSxcblx0XHRvUHJvcGVydGllczogYW55ID0ge307XG5cblx0Zm9yIChjb25zdCBzS2V5IGluIG9FbnRpdHlUeXBlKSB7XG5cdFx0aWYgKFxuXHRcdFx0b0VudGl0eVR5cGUuaGFzT3duUHJvcGVydHkoc0tleSkgJiZcblx0XHRcdCEvXlxcJC9pLnRlc3Qoc0tleSkgJiZcblx0XHRcdG9FbnRpdHlUeXBlW3NLZXldLiRraW5kICYmXG5cdFx0XHRfZm5DaGVja0lzTWF0Y2gob0VudGl0eVR5cGVbc0tleV0sIG9GaWx0ZXIgfHwgeyAka2luZDogXCJQcm9wZXJ0eVwiIH0pXG5cdFx0KSB7XG5cdFx0XHRvUHJvcGVydGllc1tzS2V5XSA9IG9FbnRpdHlUeXBlW3NLZXldO1xuXHRcdH1cblx0fVxuXHRyZXR1cm4gb1Byb3BlcnRpZXM7XG59XG5mdW5jdGlvbiBmbkdldE1hbmRhdG9yeUZpbHRlckZpZWxkcyhvTWV0YU1vZGVsOiBPRGF0YU1ldGFNb2RlbCwgc0NvbnRleHRQYXRoOiBzdHJpbmcpIHtcblx0bGV0IGFNYW5kYXRvcnlGaWx0ZXJGaWVsZHM7XG5cdGlmIChvTWV0YU1vZGVsICYmIHNDb250ZXh0UGF0aCkge1xuXHRcdGFNYW5kYXRvcnlGaWx0ZXJGaWVsZHMgPSBvTWV0YU1vZGVsLmdldE9iamVjdChzQ29udGV4dFBhdGggKyBcIkBPcmcuT0RhdGEuQ2FwYWJpbGl0aWVzLlYxLkZpbHRlclJlc3RyaWN0aW9ucy9SZXF1aXJlZFByb3BlcnRpZXNcIik7XG5cdH1cblx0cmV0dXJuIGFNYW5kYXRvcnlGaWx0ZXJGaWVsZHM7XG59XG5mdW5jdGlvbiBmbkdldElCTkFjdGlvbnMob0NvbnRyb2w6IGFueSwgYUlCTkFjdGlvbnM6IGFueVtdKSB7XG5cdGNvbnN0IGFBY3Rpb25zID0gb0NvbnRyb2wgJiYgb0NvbnRyb2wuZ2V0QWN0aW9ucygpO1xuXHRpZiAoYUFjdGlvbnMpIHtcblx0XHRhQWN0aW9ucy5mb3JFYWNoKGZ1bmN0aW9uIChvQWN0aW9uOiBhbnkpIHtcblx0XHRcdGlmIChvQWN0aW9uLmlzQShcInNhcC51aS5tZGMuYWN0aW9udG9vbGJhci5BY3Rpb25Ub29sYmFyQWN0aW9uXCIpKSB7XG5cdFx0XHRcdG9BY3Rpb24gPSBvQWN0aW9uLmdldEFjdGlvbigpO1xuXHRcdFx0fVxuXHRcdFx0aWYgKG9BY3Rpb24uZGF0YShcIklCTkRhdGFcIikpIHtcblx0XHRcdFx0YUlCTkFjdGlvbnMucHVzaChvQWN0aW9uKTtcblx0XHRcdH1cblx0XHR9KTtcblx0fVxuXHRyZXR1cm4gYUlCTkFjdGlvbnM7XG59XG4vKipcbiAqIEBwYXJhbSBhSUJOQWN0aW9uc1xuICogQHBhcmFtIG9WaWV3XG4gKi9cbmZ1bmN0aW9uIGZuVXBkYXRlRGF0YUZpZWxkRm9ySUJOQnV0dG9uc1Zpc2liaWxpdHkoYUlCTkFjdGlvbnM6IGFueVtdLCBvVmlldzogVmlldykge1xuXHRjb25zdCBvUGFyYW1zOiBhbnkgPSB7fTtcblx0Y29uc3QgZm5HZXRMaW5rcyA9IGZ1bmN0aW9uIChvRGF0YT86IGFueSkge1xuXHRcdGlmIChvRGF0YSkge1xuXHRcdFx0Y29uc3QgYUtleXMgPSBPYmplY3Qua2V5cyhvRGF0YSk7XG5cdFx0XHRhS2V5cy5mb3JFYWNoKGZ1bmN0aW9uIChzS2V5OiBzdHJpbmcpIHtcblx0XHRcdFx0aWYgKHNLZXkuaW5kZXhPZihcIl9cIikgIT09IDAgJiYgc0tleS5pbmRleE9mKFwib2RhdGEuY29udGV4dFwiKSA9PT0gLTEpIHtcblx0XHRcdFx0XHRvUGFyYW1zW3NLZXldID0geyB2YWx1ZTogb0RhdGFbc0tleV0gfTtcblx0XHRcdFx0fVxuXHRcdFx0fSk7XG5cdFx0fVxuXHRcdGlmIChhSUJOQWN0aW9ucy5sZW5ndGgpIHtcblx0XHRcdGFJQk5BY3Rpb25zLmZvckVhY2goZnVuY3Rpb24gKG9JQk5BY3Rpb246IGFueSkge1xuXHRcdFx0XHRjb25zdCBzU2VtYW50aWNPYmplY3QgPSBvSUJOQWN0aW9uLmRhdGEoXCJJQk5EYXRhXCIpLnNlbWFudGljT2JqZWN0O1xuXHRcdFx0XHRjb25zdCBzQWN0aW9uID0gb0lCTkFjdGlvbi5kYXRhKFwiSUJORGF0YVwiKS5hY3Rpb247XG5cdFx0XHRcdENvbW1vblV0aWxzLmdldFNoZWxsU2VydmljZXMob1ZpZXcpXG5cdFx0XHRcdFx0LmdldExpbmtzKHtcblx0XHRcdFx0XHRcdHNlbWFudGljT2JqZWN0OiBzU2VtYW50aWNPYmplY3QsXG5cdFx0XHRcdFx0XHRhY3Rpb246IHNBY3Rpb24sXG5cdFx0XHRcdFx0XHRwYXJhbXM6IG9QYXJhbXNcblx0XHRcdFx0XHR9KVxuXHRcdFx0XHRcdC50aGVuKGZ1bmN0aW9uIChhTGluazogYW55KSB7XG5cdFx0XHRcdFx0XHRvSUJOQWN0aW9uLnNldFZpc2libGUob0lCTkFjdGlvbi5nZXRWaXNpYmxlKCkgJiYgYUxpbmsgJiYgYUxpbmsubGVuZ3RoID09PSAxKTtcblx0XHRcdFx0XHR9KVxuXHRcdFx0XHRcdC5jYXRjaChmdW5jdGlvbiAob0Vycm9yOiBhbnkpIHtcblx0XHRcdFx0XHRcdExvZy5lcnJvcihcIkNhbm5vdCByZXRyaWV2ZSB0aGUgbGlua3MgZnJvbSB0aGUgc2hlbGwgc2VydmljZVwiLCBvRXJyb3IpO1xuXHRcdFx0XHRcdH0pO1xuXHRcdFx0fSk7XG5cdFx0fVxuXHR9O1xuXHRpZiAob1ZpZXcgJiYgb1ZpZXcuZ2V0QmluZGluZ0NvbnRleHQoKSkge1xuXHRcdChvVmlldy5nZXRCaW5kaW5nQ29udGV4dCgpIGFzIGFueSlcblx0XHRcdD8ucmVxdWVzdE9iamVjdCgpXG5cdFx0XHQudGhlbihmdW5jdGlvbiAob0RhdGE6IGFueSkge1xuXHRcdFx0XHRyZXR1cm4gZm5HZXRMaW5rcyhvRGF0YSk7XG5cdFx0XHR9KVxuXHRcdFx0LmNhdGNoKGZ1bmN0aW9uIChvRXJyb3I6IGFueSkge1xuXHRcdFx0XHRMb2cuZXJyb3IoXCJDYW5ub3QgcmV0cmlldmUgdGhlIGxpbmtzIGZyb20gdGhlIHNoZWxsIHNlcnZpY2VcIiwgb0Vycm9yKTtcblx0XHRcdH0pO1xuXHR9IGVsc2Uge1xuXHRcdGZuR2V0TGlua3MoKTtcblx0fVxufVxuZnVuY3Rpb24gZ2V0VHJhbnNsYXRlZFRleHQoc0ZyYW1ld29ya0tleTogc3RyaW5nLCBvUmVzb3VyY2VCdW5kbGU6IFJlc291cmNlQnVuZGxlLCBvUGFyYW1zPzogYW55LCBzRW50aXR5U2V0TmFtZT86IHN0cmluZykge1xuXHRsZXQgc1Jlc291cmNlS2V5ID0gc0ZyYW1ld29ya0tleTtcblx0aWYgKG9SZXNvdXJjZUJ1bmRsZSkge1xuXHRcdGlmIChzRW50aXR5U2V0TmFtZSkge1xuXHRcdFx0Ly8gVGhlcmUgYXJlIGNvbnNvbGUgZXJyb3JzIGxvZ2dlZCB3aGVuIG1ha2luZyBjYWxscyB0byBnZXRUZXh0IGZvciBrZXlzIHRoYXQgYXJlIG5vdCBkZWZpbmVkIGluIHRoZSByZXNvdXJjZSBidW5kbGVcblx0XHRcdC8vIGZvciBpbnN0YW5jZSBrZXlzIHdoaWNoIGFyZSBzdXBwb3NlZCB0byBiZSBwcm92aWRlZCBieSB0aGUgYXBwbGljYXRpb24sIGUuZywgPGtleT58PGVudGl0eVNldD4gdG8gb3ZlcnJpZGUgaW5zdGFuY2Ugc3BlY2lmaWMgdGV4dFxuXHRcdFx0Ly8gaGVuY2UgY2hlY2sgaWYgdGV4dCBleGlzdHMgKHVzaW5nIFwiaGFzVGV4dFwiKSBpbiB0aGUgcmVzb3VyY2UgYnVuZGxlIGJlZm9yZSBjYWxsaW5nIFwiZ2V0VGV4dFwiXG5cblx0XHRcdC8vIFwiaGFzVGV4dFwiIG9ubHkgY2hlY2tzIGZvciB0aGUga2V5IGluIHRoZSBpbW1lZGlhdGUgcmVzb3VyY2UgYnVuZGxlIGFuZCBub3QgaXQncyBjdXN0b20gYnVuZGxlc1xuXHRcdFx0Ly8gaGVuY2Ugd2UgbmVlZCB0byBkbyB0aGlzIHJlY3VycnNpdmVseSB0byBjaGVjayBpZiB0aGUga2V5IGV4aXN0cyBpbiBhbnkgb2YgdGhlIGJ1bmRsZXMgdGhlIGZvcm1zIHRoZSBGRSByZXNvdXJjZSBidW5kbGVcblx0XHRcdGNvbnN0IGJSZXNvdXJjZUtleUV4aXN0cyA9IF9jaGVja0lmUmVzb3VyY2VLZXlFeGlzdHMoXG5cdFx0XHRcdChvUmVzb3VyY2VCdW5kbGUgYXMgYW55KS5hQ3VzdG9tQnVuZGxlcyxcblx0XHRcdFx0c0ZyYW1ld29ya0tleSArIFwifFwiICsgc0VudGl0eVNldE5hbWVcblx0XHRcdCk7XG5cblx0XHRcdC8vIGlmIHJlc291cmNlIGtleSB3aXRoIGVudGl0eSBzZXQgbmFtZSBmb3IgaW5zdGFuY2Ugc3BlY2lmaWMgdGV4dCBvdmVycmlkaW5nIGlzIHByb3ZpZGVkIGJ5IHRoZSBhcHBsaWNhdGlvblxuXHRcdFx0Ly8gdGhlbiB1c2UgdGhlIHNhbWUga2V5IG90aGVyd2lzZSB1c2UgdGhlIEZyYW1ld29yayBrZXlcblx0XHRcdHNSZXNvdXJjZUtleSA9IGJSZXNvdXJjZUtleUV4aXN0cyA/IHNGcmFtZXdvcmtLZXkgKyBcInxcIiArIHNFbnRpdHlTZXROYW1lIDogc0ZyYW1ld29ya0tleTtcblx0XHR9XG5cdFx0cmV0dXJuIG9SZXNvdXJjZUJ1bmRsZS5nZXRUZXh0KHNSZXNvdXJjZUtleSwgb1BhcmFtcyk7XG5cdH1cblxuXHQvLyBkbyBub3QgYWxsb3cgb3ZlcnJpZGUgc28gZ2V0IHRleHQgZnJvbSB0aGUgaW50ZXJuYWwgYnVuZGxlIGRpcmVjdGx5XG5cdG9SZXNvdXJjZUJ1bmRsZSA9IChDb3JlIGFzIENvcmVFeCkuZ2V0TGlicmFyeVJlc291cmNlQnVuZGxlKFwic2FwLmZlLmNvcmVcIik7XG5cdHJldHVybiBvUmVzb3VyY2VCdW5kbGUuZ2V0VGV4dChzUmVzb3VyY2VLZXksIG9QYXJhbXMpO1xufVxuZnVuY3Rpb24gX2NoZWNrSWZSZXNvdXJjZUtleUV4aXN0cyhhQ3VzdG9tQnVuZGxlczogYW55LCBzS2V5OiBhbnkpIHtcblx0aWYgKGFDdXN0b21CdW5kbGVzLmxlbmd0aCkge1xuXHRcdGZvciAobGV0IGkgPSBhQ3VzdG9tQnVuZGxlcy5sZW5ndGggLSAxOyBpID49IDA7IGktLSkge1xuXHRcdFx0Y29uc3Qgc1ZhbHVlID0gYUN1c3RvbUJ1bmRsZXNbaV0uaGFzVGV4dChzS2V5KTtcblx0XHRcdC8vIHRleHQgZm91bmQgcmV0dXJuIHRydWVcblx0XHRcdGlmIChzVmFsdWUpIHtcblx0XHRcdFx0cmV0dXJuIHRydWU7XG5cdFx0XHR9XG5cdFx0XHRfY2hlY2tJZlJlc291cmNlS2V5RXhpc3RzKGFDdXN0b21CdW5kbGVzW2ldLmFDdXN0b21CdW5kbGVzLCBzS2V5KTtcblx0XHR9XG5cdH1cblx0cmV0dXJuIGZhbHNlO1xufVxuZnVuY3Rpb24gZ2V0QWN0aW9uUGF0aChvQWN0aW9uOiBhbnksIGJSZXR1cm5Pbmx5UGF0aDogYm9vbGVhbiwgc0FjdGlvbk5hbWU/OiBzdHJpbmcsIGJDaGVja1N0YXRpY1ZhbHVlPzogYm9vbGVhbikge1xuXHRzQWN0aW9uTmFtZSA9ICFzQWN0aW9uTmFtZSA/IG9BY3Rpb24uZ2V0T2JqZWN0KG9BY3Rpb24uZ2V0UGF0aCgpKSA6IHNBY3Rpb25OYW1lO1xuXHRsZXQgc0NvbnRleHRQYXRoID0gb0FjdGlvbi5nZXRQYXRoKCkuc3BsaXQoXCIvQFwiKVswXTtcblx0Y29uc3Qgc0VudGl0eVR5cGVOYW1lID0gb0FjdGlvbi5nZXRPYmplY3Qoc0NvbnRleHRQYXRoKS4kVHlwZTtcblx0Y29uc3Qgc0VudGl0eU5hbWUgPSBnZXRFbnRpdHlTZXROYW1lKG9BY3Rpb24uZ2V0TW9kZWwoKSwgc0VudGl0eVR5cGVOYW1lKTtcblx0aWYgKHNFbnRpdHlOYW1lKSB7XG5cdFx0c0NvbnRleHRQYXRoID0gXCIvXCIgKyBzRW50aXR5TmFtZTtcblx0fVxuXHRpZiAoYkNoZWNrU3RhdGljVmFsdWUpIHtcblx0XHRyZXR1cm4gb0FjdGlvbi5nZXRPYmplY3Qoc0NvbnRleHRQYXRoICsgXCIvXCIgKyBzQWN0aW9uTmFtZSArIFwiQE9yZy5PRGF0YS5Db3JlLlYxLk9wZXJhdGlvbkF2YWlsYWJsZVwiKTtcblx0fVxuXHRpZiAoYlJldHVybk9ubHlQYXRoKSB7XG5cdFx0cmV0dXJuIHNDb250ZXh0UGF0aCArIFwiL1wiICsgc0FjdGlvbk5hbWU7XG5cdH0gZWxzZSB7XG5cdFx0cmV0dXJuIHtcblx0XHRcdHNDb250ZXh0UGF0aDogc0NvbnRleHRQYXRoLFxuXHRcdFx0c1Byb3BlcnR5OiBvQWN0aW9uLmdldE9iamVjdChzQ29udGV4dFBhdGggKyBcIi9cIiArIHNBY3Rpb25OYW1lICsgXCJAT3JnLk9EYXRhLkNvcmUuVjEuT3BlcmF0aW9uQXZhaWxhYmxlLyRQYXRoXCIpLFxuXHRcdFx0c0JpbmRpbmdQYXJhbWV0ZXI6IG9BY3Rpb24uZ2V0T2JqZWN0KHNDb250ZXh0UGF0aCArIFwiL1wiICsgc0FjdGlvbk5hbWUgKyBcIi9AJHVpNS5vdmVybG9hZC8wLyRQYXJhbWV0ZXIvMC8kTmFtZVwiKVxuXHRcdH07XG5cdH1cbn1cbmZ1bmN0aW9uIGdldEVudGl0eVNldE5hbWUob01ldGFNb2RlbDogYW55LCBzRW50aXR5VHlwZTogYW55KSB7XG5cdGNvbnN0IG9FbnRpdHlDb250YWluZXIgPSBvTWV0YU1vZGVsLmdldE9iamVjdChcIi9cIik7XG5cdGZvciAoY29uc3Qga2V5IGluIG9FbnRpdHlDb250YWluZXIpIHtcblx0XHRpZiAodHlwZW9mIG9FbnRpdHlDb250YWluZXJba2V5XSA9PT0gXCJvYmplY3RcIiAmJiBvRW50aXR5Q29udGFpbmVyW2tleV0uJFR5cGUgPT09IHNFbnRpdHlUeXBlKSB7XG5cdFx0XHRyZXR1cm4ga2V5O1xuXHRcdH1cblx0fVxufVxuZnVuY3Rpb24gY29tcHV0ZURpc3BsYXlNb2RlKG9Qcm9wZXJ0eUFubm90YXRpb25zOiBhbnksIG9Db2xsZWN0aW9uQW5ub3RhdGlvbnM/OiBhbnkpIHtcblx0Y29uc3Qgb1RleHRBbm5vdGF0aW9uID0gb1Byb3BlcnR5QW5ub3RhdGlvbnNbXCJAY29tLnNhcC52b2NhYnVsYXJpZXMuQ29tbW9uLnYxLlRleHRcIl0sXG5cdFx0b1RleHRBcnJhbmdlbWVudEFubm90YXRpb24gPVxuXHRcdFx0b1RleHRBbm5vdGF0aW9uICYmXG5cdFx0XHQoKG9Qcm9wZXJ0eUFubm90YXRpb25zICYmXG5cdFx0XHRcdG9Qcm9wZXJ0eUFubm90YXRpb25zW1wiQGNvbS5zYXAudm9jYWJ1bGFyaWVzLkNvbW1vbi52MS5UZXh0QGNvbS5zYXAudm9jYWJ1bGFyaWVzLlVJLnYxLlRleHRBcnJhbmdlbWVudFwiXSkgfHxcblx0XHRcdFx0KG9Db2xsZWN0aW9uQW5ub3RhdGlvbnMgJiYgb0NvbGxlY3Rpb25Bbm5vdGF0aW9uc1tcIkBjb20uc2FwLnZvY2FidWxhcmllcy5VSS52MS5UZXh0QXJyYW5nZW1lbnRcIl0pKTtcblxuXHRpZiAob1RleHRBcnJhbmdlbWVudEFubm90YXRpb24pIHtcblx0XHRpZiAob1RleHRBcnJhbmdlbWVudEFubm90YXRpb24uJEVudW1NZW1iZXIgPT09IFwiY29tLnNhcC52b2NhYnVsYXJpZXMuVUkudjEuVGV4dEFycmFuZ2VtZW50VHlwZS9UZXh0T25seVwiKSB7XG5cdFx0XHRyZXR1cm4gXCJEZXNjcmlwdGlvblwiO1xuXHRcdH0gZWxzZSBpZiAob1RleHRBcnJhbmdlbWVudEFubm90YXRpb24uJEVudW1NZW1iZXIgPT09IFwiY29tLnNhcC52b2NhYnVsYXJpZXMuVUkudjEuVGV4dEFycmFuZ2VtZW50VHlwZS9UZXh0TGFzdFwiKSB7XG5cdFx0XHRyZXR1cm4gXCJWYWx1ZURlc2NyaXB0aW9uXCI7XG5cdFx0fSBlbHNlIGlmIChvVGV4dEFycmFuZ2VtZW50QW5ub3RhdGlvbi4kRW51bU1lbWJlciA9PT0gXCJjb20uc2FwLnZvY2FidWxhcmllcy5VSS52MS5UZXh0QXJyYW5nZW1lbnRUeXBlL1RleHRTZXBhcmF0ZVwiKSB7XG5cdFx0XHRyZXR1cm4gXCJWYWx1ZVwiO1xuXHRcdH1cblx0XHQvL0RlZmF1bHQgc2hvdWxkIGJlIFRleHRGaXJzdCBpZiB0aGVyZSBpcyBhIFRleHQgYW5ub3RhdGlvbiBhbmQgbmVpdGhlciBUZXh0T25seSBub3IgVGV4dExhc3QgYXJlIHNldFxuXHRcdHJldHVybiBcIkRlc2NyaXB0aW9uVmFsdWVcIjtcblx0fVxuXHRyZXR1cm4gb1RleHRBbm5vdGF0aW9uID8gXCJEZXNjcmlwdGlvblZhbHVlXCIgOiBcIlZhbHVlXCI7XG59XG5mdW5jdGlvbiBfZ2V0RW50aXR5VHlwZShvQ29udGV4dDogYW55KSB7XG5cdGNvbnN0IG9NZXRhTW9kZWwgPSBvQ29udGV4dC5nZXRNb2RlbCgpLmdldE1ldGFNb2RlbCgpO1xuXHRyZXR1cm4gb01ldGFNb2RlbC5nZXRPYmplY3Qob01ldGFNb2RlbC5nZXRNZXRhUGF0aChvQ29udGV4dC5nZXRQYXRoKCkpICsgXCIvJFR5cGVcIik7XG59XG5mdW5jdGlvbiBfcmVxdWVzdE9iamVjdChzQWN0aW9uOiBhbnksIG9TZWxlY3RlZENvbnRleHQ6IGFueSwgc1Byb3BlcnR5OiBhbnkpIHtcblx0bGV0IG9Db250ZXh0ID0gb1NlbGVjdGVkQ29udGV4dDtcblx0Y29uc3QgbkJyYWNrZXRJbmRleCA9IHNBY3Rpb24uaW5kZXhPZihcIihcIik7XG5cblx0aWYgKG5CcmFja2V0SW5kZXggPiAtMSkge1xuXHRcdGNvbnN0IHNUYXJnZXRUeXBlID0gc0FjdGlvbi5zbGljZShuQnJhY2tldEluZGV4ICsgMSwgLTEpO1xuXHRcdGxldCBzQ3VycmVudFR5cGUgPSBfZ2V0RW50aXR5VHlwZShvQ29udGV4dCk7XG5cblx0XHR3aGlsZSAoc0N1cnJlbnRUeXBlICE9PSBzVGFyZ2V0VHlwZSkge1xuXHRcdFx0Ly8gRmluZCBwYXJlbnQgYmluZGluZyBjb250ZXh0IGFuZCByZXRyaWV2ZSBlbnRpdHkgdHlwZVxuXHRcdFx0b0NvbnRleHQgPSBvQ29udGV4dC5nZXRCaW5kaW5nKCkuZ2V0Q29udGV4dCgpO1xuXHRcdFx0aWYgKG9Db250ZXh0KSB7XG5cdFx0XHRcdHNDdXJyZW50VHlwZSA9IF9nZXRFbnRpdHlUeXBlKG9Db250ZXh0KTtcblx0XHRcdH0gZWxzZSB7XG5cdFx0XHRcdExvZy53YXJuaW5nKFwiQ2Fubm90IGRldGVybWluZSB0YXJnZXQgdHlwZSB0byByZXF1ZXN0IHByb3BlcnR5IHZhbHVlIGZvciBib3VuZCBhY3Rpb24gaW52b2NhdGlvblwiKTtcblx0XHRcdFx0cmV0dXJuIFByb21pc2UucmVzb2x2ZSh1bmRlZmluZWQpO1xuXHRcdFx0fVxuXHRcdH1cblx0fVxuXG5cdHJldHVybiBvQ29udGV4dC5yZXF1ZXN0T2JqZWN0KHNQcm9wZXJ0eSk7XG59XG5mdW5jdGlvbiBfcmVxdWVzdFByb3BlcnR5KG9TZWxlY3RlZENvbnRleHQ6IGFueSwgc0FjdGlvbjogYW55LCBzUHJvcGVydHk6IGFueSwgc0R5bmFtaWNBY3Rpb25FbmFibGVkUGF0aDogYW55KSB7XG5cdGNvbnN0IG9Qcm9taXNlID1cblx0XHRzUHJvcGVydHkgJiYgc1Byb3BlcnR5LmluZGV4T2YoXCIvXCIpID09PSAwXG5cdFx0XHQ/IHJlcXVlc3RTaW5nbGV0b25Qcm9wZXJ0eShzUHJvcGVydHksIG9TZWxlY3RlZENvbnRleHQuZ2V0TW9kZWwoKSlcblx0XHRcdDogX3JlcXVlc3RPYmplY3Qoc0FjdGlvbiwgb1NlbGVjdGVkQ29udGV4dCwgc1Byb3BlcnR5KTtcblxuXHRyZXR1cm4gb1Byb21pc2UudGhlbihmdW5jdGlvbiAodlByb3BlcnR5VmFsdWU6IGFueSkge1xuXHRcdHJldHVybiBQcm9taXNlLnJlc29sdmUoe1xuXHRcdFx0dlByb3BlcnR5VmFsdWU6IHZQcm9wZXJ0eVZhbHVlLFxuXHRcdFx0b1NlbGVjdGVkQ29udGV4dDogb1NlbGVjdGVkQ29udGV4dCxcblx0XHRcdHNBY3Rpb246IHNBY3Rpb24sXG5cdFx0XHRzRHluYW1pY0FjdGlvbkVuYWJsZWRQYXRoOiBzRHluYW1pY0FjdGlvbkVuYWJsZWRQYXRoXG5cdFx0fSk7XG5cdH0pO1xufVxuZnVuY3Rpb24gX3NldENvbnRleHRzQmFzZWRPbk9wZXJhdGlvbkF2YWlsYWJsZShvSW50ZXJuYWxNb2RlbENvbnRleHQ6IGFueSwgYVJlcXVlc3RQcm9taXNlczogYW55KSB7XG5cdHJldHVybiBQcm9taXNlLmFsbChhUmVxdWVzdFByb21pc2VzKVxuXHRcdC50aGVuKGZ1bmN0aW9uIChhUmVzdWx0czogYW55W10pIHtcblx0XHRcdGlmIChhUmVzdWx0cy5sZW5ndGgpIHtcblx0XHRcdFx0Y29uc3QgYUFwcGxpY2FibGVDb250ZXh0czogYW55W10gPSBbXSxcblx0XHRcdFx0XHRhTm90QXBwbGljYWJsZUNvbnRleHRzOiBhbnlbXSA9IFtdO1xuXHRcdFx0XHRhUmVzdWx0cy5mb3JFYWNoKGZ1bmN0aW9uIChhUmVzdWx0OiBhbnkpIHtcblx0XHRcdFx0XHRpZiAoYVJlc3VsdCkge1xuXHRcdFx0XHRcdFx0aWYgKGFSZXN1bHQudlByb3BlcnR5VmFsdWUpIHtcblx0XHRcdFx0XHRcdFx0b0ludGVybmFsTW9kZWxDb250ZXh0LmdldE1vZGVsKCkuc2V0UHJvcGVydHkoYVJlc3VsdC5zRHluYW1pY0FjdGlvbkVuYWJsZWRQYXRoLCB0cnVlKTtcblx0XHRcdFx0XHRcdFx0YUFwcGxpY2FibGVDb250ZXh0cy5wdXNoKGFSZXN1bHQub1NlbGVjdGVkQ29udGV4dCk7XG5cdFx0XHRcdFx0XHR9IGVsc2Uge1xuXHRcdFx0XHRcdFx0XHRhTm90QXBwbGljYWJsZUNvbnRleHRzLnB1c2goYVJlc3VsdC5vU2VsZWN0ZWRDb250ZXh0KTtcblx0XHRcdFx0XHRcdH1cblx0XHRcdFx0XHR9XG5cdFx0XHRcdH0pO1xuXHRcdFx0XHRfc2V0RHluYW1pY0FjdGlvbkNvbnRleHRzKG9JbnRlcm5hbE1vZGVsQ29udGV4dCwgYVJlc3VsdHNbMF0uc0FjdGlvbiwgYUFwcGxpY2FibGVDb250ZXh0cywgYU5vdEFwcGxpY2FibGVDb250ZXh0cyk7XG5cdFx0XHR9XG5cdFx0fSlcblx0XHQuY2F0Y2goZnVuY3Rpb24gKG9FcnJvcjogYW55KSB7XG5cdFx0XHRMb2cudHJhY2UoXCJDYW5ub3QgcmV0cmlldmUgcHJvcGVydHkgdmFsdWUgZnJvbSBwYXRoXCIsIG9FcnJvcik7XG5cdFx0fSk7XG59XG4vKipcbiAqIEBwYXJhbSBvSW50ZXJuYWxNb2RlbENvbnRleHRcbiAqIEBwYXJhbSBzQWN0aW9uXG4gKiBAcGFyYW0gYUFwcGxpY2FibGVcbiAqIEBwYXJhbSBhTm90QXBwbGljYWJsZVxuICovXG5mdW5jdGlvbiBfc2V0RHluYW1pY0FjdGlvbkNvbnRleHRzKG9JbnRlcm5hbE1vZGVsQ29udGV4dDogYW55LCBzQWN0aW9uOiBhbnksIGFBcHBsaWNhYmxlOiBhbnksIGFOb3RBcHBsaWNhYmxlOiBhbnkpIHtcblx0Y29uc3Qgc0R5bmFtaWNBY3Rpb25QYXRoUHJlZml4ID0gb0ludGVybmFsTW9kZWxDb250ZXh0LmdldFBhdGgoKSArIFwiL2R5bmFtaWNBY3Rpb25zL1wiICsgc0FjdGlvbixcblx0XHRvSW50ZXJuYWxNb2RlbCA9IG9JbnRlcm5hbE1vZGVsQ29udGV4dC5nZXRNb2RlbCgpO1xuXHRvSW50ZXJuYWxNb2RlbC5zZXRQcm9wZXJ0eShzRHluYW1pY0FjdGlvblBhdGhQcmVmaXggKyBcIi9hQXBwbGljYWJsZVwiLCBhQXBwbGljYWJsZSk7XG5cdG9JbnRlcm5hbE1vZGVsLnNldFByb3BlcnR5KHNEeW5hbWljQWN0aW9uUGF0aFByZWZpeCArIFwiL2FOb3RBcHBsaWNhYmxlXCIsIGFOb3RBcHBsaWNhYmxlKTtcbn1cbmZ1bmN0aW9uIHNldEFjdGlvbkVuYWJsZW1lbnQob0ludGVybmFsTW9kZWxDb250ZXh0OiBhbnksIG9BY3Rpb25PcGVyYXRpb25BdmFpbGFibGVNYXA6IGFueSwgYVNlbGVjdGVkQ29udGV4dHM6IGFueSkge1xuXHRjb25zdCBhUHJvbWlzZXMgPSBbXTtcblx0Zm9yIChjb25zdCBzQWN0aW9uIGluIG9BY3Rpb25PcGVyYXRpb25BdmFpbGFibGVNYXApIHtcblx0XHQvLyBSZXNldCBhbGwgcHJvcGVydGllcyBiZWZvcmUgY29tcHV0YXRpb25cblx0XHRvSW50ZXJuYWxNb2RlbENvbnRleHQuc2V0UHJvcGVydHkoXCJkeW5hbWljQWN0aW9ucy9cIiArIHNBY3Rpb24sIHtcblx0XHRcdGJFbmFibGVkOiBmYWxzZSxcblx0XHRcdGFBcHBsaWNhYmxlOiBbXSxcblx0XHRcdGFOb3RBcHBsaWNhYmxlOiBbXVxuXHRcdH0pO1xuXHRcdC8vIE5vdGUgdGhhdCBub24gZHluYW1pYyBhY3Rpb25zIGFyZSBub3QgcHJvY2Vzc2VkIGhlcmUuIFRoZXkgYXJlIGVuYWJsZWQgYmVjYXVzZVxuXHRcdC8vIG9uZSBvciBtb3JlIGFyZSBzZWxlY3RlZCBhbmQgdGhlIHNlY29uZCBwYXJ0IG9mIHRoZSBjb25kaXRpb24gaW4gdGhlIHRlbXBsYXRpbmdcblx0XHQvLyBpcyB0aGVuIHVuZGVmaW5lZCBhbmQgdGh1cyB0aGUgYnV0dG9uIHRha2VzIHRoZSBkZWZhdWx0IGVuYWJsaW5nLCB3aGljaCBpcyB0cnVlIVxuXHRcdGNvbnN0IGFBcHBsaWNhYmxlID0gW10sXG5cdFx0XHRhTm90QXBwbGljYWJsZSA9IFtdLFxuXHRcdFx0c1Byb3BlcnR5ID0gb0FjdGlvbk9wZXJhdGlvbkF2YWlsYWJsZU1hcFtzQWN0aW9uXSxcblx0XHRcdHNEeW5hbWljQWN0aW9uRW5hYmxlZFBhdGggPSBvSW50ZXJuYWxNb2RlbENvbnRleHQuZ2V0UGF0aCgpICsgXCIvZHluYW1pY0FjdGlvbnMvXCIgKyBzQWN0aW9uICsgXCIvYkVuYWJsZWRcIjtcblxuXHRcdGlmICh0eXBlb2Ygc1Byb3BlcnR5ID09PSBcIm9iamVjdFwiICYmIHNQcm9wZXJ0eSAhPT0gbnVsbCAmJiBzUHJvcGVydHkgIT09IHVuZGVmaW5lZCkge1xuXHRcdFx0Zm9yIChsZXQgaSA9IDA7IGkgPCBhU2VsZWN0ZWRDb250ZXh0cy5sZW5ndGg7IGkrKykge1xuXHRcdFx0XHRjb25zdCBvU2VsZWN0ZWRDb250ZXh0ID0gYVNlbGVjdGVkQ29udGV4dHNbaV07XG5cdFx0XHRcdGlmIChvU2VsZWN0ZWRDb250ZXh0KSB7XG5cdFx0XHRcdFx0Y29uc3Qgb0NvbnRleHREYXRhID0gb1NlbGVjdGVkQ29udGV4dC5nZXRPYmplY3QoKTtcblx0XHRcdFx0XHRjb25zdCBvVHJhbnNmb3JtZWRCaW5kaW5nID0gdHJhbnNmb3JtUmVjdXJzaXZlbHkoXG5cdFx0XHRcdFx0XHRzUHJvcGVydHksXG5cdFx0XHRcdFx0XHRcIkJpbmRpbmdcIixcblx0XHRcdFx0XHRcdC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBuby1sb29wLWZ1bmNcblx0XHRcdFx0XHRcdGZ1bmN0aW9uIChvQmluZGluZ0V4cHJlc3Npb246IGFueSkge1xuXHRcdFx0XHRcdFx0XHRyZXR1cm4gY29uc3RhbnQob0NvbnRleHREYXRhW29CaW5kaW5nRXhwcmVzc2lvbi5wYXRoXSk7XG5cdFx0XHRcdFx0XHR9LFxuXHRcdFx0XHRcdFx0dHJ1ZVxuXHRcdFx0XHRcdCk7XG5cdFx0XHRcdFx0Y29uc3Qgc1Jlc3VsdCA9IGNvbXBpbGVCaW5kaW5nKG9UcmFuc2Zvcm1lZEJpbmRpbmcpO1xuXHRcdFx0XHRcdGlmIChzUmVzdWx0ID09PSBcInRydWVcIikge1xuXHRcdFx0XHRcdFx0b0ludGVybmFsTW9kZWxDb250ZXh0LmdldE1vZGVsKCkuc2V0UHJvcGVydHkoc0R5bmFtaWNBY3Rpb25FbmFibGVkUGF0aCwgdHJ1ZSk7XG5cdFx0XHRcdFx0XHRhQXBwbGljYWJsZS5wdXNoKG9TZWxlY3RlZENvbnRleHQpO1xuXHRcdFx0XHRcdH0gZWxzZSB7XG5cdFx0XHRcdFx0XHRhTm90QXBwbGljYWJsZS5wdXNoKG9TZWxlY3RlZENvbnRleHQpO1xuXHRcdFx0XHRcdH1cblx0XHRcdFx0fVxuXHRcdFx0fVxuXHRcdFx0X3NldER5bmFtaWNBY3Rpb25Db250ZXh0cyhvSW50ZXJuYWxNb2RlbENvbnRleHQsIHNBY3Rpb24sIGFBcHBsaWNhYmxlLCBhTm90QXBwbGljYWJsZSk7XG5cdFx0fSBlbHNlIHtcblx0XHRcdGNvbnN0IGFSZXF1ZXN0UHJvbWlzZXMgPSBbXTtcblx0XHRcdGZvciAobGV0IGkgPSAwOyBpIDwgYVNlbGVjdGVkQ29udGV4dHMubGVuZ3RoOyBpKyspIHtcblx0XHRcdFx0Y29uc3Qgb1NlbGVjdGVkQ29udGV4dCA9IGFTZWxlY3RlZENvbnRleHRzW2ldO1xuXHRcdFx0XHRpZiAob1NlbGVjdGVkQ29udGV4dCkge1xuXHRcdFx0XHRcdGNvbnN0IG9Db250ZXh0RGF0YSA9IG9TZWxlY3RlZENvbnRleHQuZ2V0T2JqZWN0KCk7XG5cdFx0XHRcdFx0aWYgKHNQcm9wZXJ0eSA9PT0gbnVsbCAmJiAhIW9Db250ZXh0RGF0YVtcIiNcIiArIHNBY3Rpb25dKSB7XG5cdFx0XHRcdFx0XHQvL2xvb2sgZm9yIGFjdGlvbiBhZHZlcnRpc2VtZW50IGlmIHByZXNlbnQgYW5kIGl0cyB2YWx1ZSBpcyBub3QgbnVsbFxuXHRcdFx0XHRcdFx0b0ludGVybmFsTW9kZWxDb250ZXh0LmdldE1vZGVsKCkuc2V0UHJvcGVydHkoc0R5bmFtaWNBY3Rpb25FbmFibGVkUGF0aCwgdHJ1ZSk7XG5cdFx0XHRcdFx0XHRicmVhaztcblx0XHRcdFx0XHR9IGVsc2Uge1xuXHRcdFx0XHRcdFx0Ly8gQ29sbGVjdCBwcm9taXNlcyB0byByZXRyaWV2ZSBzaW5nbGV0b24gb3Igbm9ybWFsIHByb3BlcnR5IHZhbHVlIGFzeW5jaHJvbm91c2x5XG5cdFx0XHRcdFx0XHRhUmVxdWVzdFByb21pc2VzLnB1c2goX3JlcXVlc3RQcm9wZXJ0eShvU2VsZWN0ZWRDb250ZXh0LCBzQWN0aW9uLCBzUHJvcGVydHksIHNEeW5hbWljQWN0aW9uRW5hYmxlZFBhdGgpKTtcblx0XHRcdFx0XHR9XG5cdFx0XHRcdH1cblx0XHRcdH1cblxuXHRcdFx0Ly8gV2hlbiBhbGwgcHJvcGVydHkgdmFsdWVzIGhhdmUgYmVlbiByZXRyaWV2ZWQsIHNldFxuXHRcdFx0Ly8gVGhlIGFwcGxpY2FibGUgYW5kIG5vdC1hcHBsaWNhYmxlIHNlbGVjdGVkIGNvbnRleHRzIGZvciBlYWNoIGFjdGlvbiBhbmRcblx0XHRcdC8vIFRoZSBlbmFibGVkIHByb3BlcnR5IG9mIHRoZSBkeW5hbWljIGFjdGlvbiBpbiBpbnRlcm5hbCBtb2RlbCBjb250ZXh0LlxuXHRcdFx0YVByb21pc2VzLnB1c2goX3NldENvbnRleHRzQmFzZWRPbk9wZXJhdGlvbkF2YWlsYWJsZShvSW50ZXJuYWxNb2RlbENvbnRleHQsIGFSZXF1ZXN0UHJvbWlzZXMpKTtcblx0XHR9XG5cdH1cblx0cmV0dXJuIFByb21pc2UuYWxsKGFQcm9taXNlcyk7XG59XG5cbmZ1bmN0aW9uIHNldE9iamVjdE1hcHBpbmdzKHNTZW1hbnRpY09iamVjdDogc3RyaW5nLCBvUGFyYW1zOiBhbnksIGFTZW1hbnRpY09iamVjdE1hcHBpbmdzOiBhbnkpIHtcblx0YVNlbWFudGljT2JqZWN0TWFwcGluZ3MuZm9yRWFjaChmdW5jdGlvbiAob0l0ZW06IGFueSkge1xuXHRcdGlmIChzU2VtYW50aWNPYmplY3QgPT09IG9JdGVtLnNlbWFudGljT2JqZWN0KSB7XG5cdFx0XHR2YXIgb01hcHBpbmdzID0gb0l0ZW0uaXRlbXM7XG5cdFx0XHRmb3IgKGxldCBpID0gMDsgaSA8IG9NYXBwaW5ncy5sZW5ndGg7IGkrKykge1xuXHRcdFx0XHRjb25zdCBzTG9jYWxQcm9wZXJ0eSA9IG9NYXBwaW5nc1tpXS5rZXk7XG5cdFx0XHRcdGNvbnN0IHNTZW1hbnRpY09iamVjdFByb3BlcnR5ID0gb01hcHBpbmdzW2ldLnZhbHVlO1xuXHRcdFx0XHRpZiAob1BhcmFtc1tzTG9jYWxQcm9wZXJ0eV0pIHtcblx0XHRcdFx0XHRvUGFyYW1zW3NTZW1hbnRpY09iamVjdFByb3BlcnR5XSA9IG9QYXJhbXNbc0xvY2FsUHJvcGVydHldO1xuXHRcdFx0XHR9XG5cdFx0XHR9XG5cdFx0fVxuXHR9KTtcblx0cmV0dXJuIG9QYXJhbXM7XG59XG5cbmZ1bmN0aW9uIF9nZXREZWZhdWx0T3BlcmF0b3JzKHNQcm9wZXJ0eVR5cGU6IHN0cmluZykge1xuXHQvLyBtZGMgZGVmaW5lcyB0aGUgZnVsbCBzZXQgb2Ygb3BlcmF0aW9ucyB0aGF0IGFyZSBtZWFuaW5nZnVsIGZvciBlYWNoIEVkbSBUeXBlXG5cdC8vIFRPRE8gUmVwbGFjZSB3aXRoIG1vZGVsIC8gaW50ZXJuYWwgd2F5IG9mIHJldHJpZXZpbmcgdGhlIGFjdHVhbCBtb2RlbCB0eXBlIHVzZWQgZm9yIHRoZSBwcm9wZXJ0eVxuXHRjb25zdCBvRGF0YUNsYXNzID0gVHlwZVV0aWwuZ2V0RGF0YVR5cGVDbGFzc05hbWUoc1Byb3BlcnR5VHlwZSk7XG5cdC8vIFRPRE8gbmVlZCB0byBwYXNzIHByb3BlciBmb3JtYXRPcHRpb25zLCBjb25zdHJhaW50cyBoZXJlXG5cdGNvbnN0IG9CYXNlVHlwZSA9IFR5cGVVdGlsLmdldEJhc2VUeXBlKG9EYXRhQ2xhc3MsIHt9LCB7fSk7XG5cdHJldHVybiBGaWx0ZXJPcGVyYXRvclV0aWwuZ2V0T3BlcmF0b3JzRm9yVHlwZShvQmFzZVR5cGUpO1xufVxuZnVuY3Rpb24gX2dldFJlc3RyaWN0aW9ucyhhRGVmYXVsdE9wczogYW55LCBhRXhwcmVzc2lvbk9wczogYW55KSB7XG5cdC8vIEZyb20gdGhlIGRlZmF1bHQgc2V0IG9mIE9wZXJhdG9ycyBmb3IgdGhlIEJhc2UgVHlwZSwgc2VsZWN0IHRob3NlIHRoYXQgYXJlIGRlZmluZWQgaW4gdGhlIEFsbG93ZWQgVmFsdWUuXG5cdC8vIEluIGNhc2UgdGhhdCBubyBvcGVyYXRvcnMgYXJlIGZvdW5kLCByZXR1cm4gdW5kZWZpbmVkIHNvIHRoYXQgdGhlIGRlZmF1bHQgc2V0IGlzIHVzZWQuXG5cdGNvbnN0IGFPcGVyYXRvcnMgPSBhRGVmYXVsdE9wcy5maWx0ZXIoZnVuY3Rpb24gKHNFbGVtZW50OiBhbnkpIHtcblx0XHRyZXR1cm4gYUV4cHJlc3Npb25PcHMuaW5kZXhPZihzRWxlbWVudCkgPiAtMTtcblx0fSk7XG5cdHJldHVybiBhT3BlcmF0b3JzLnRvU3RyaW5nKCkgfHwgdW5kZWZpbmVkO1xufVxuZnVuY3Rpb24gZ2V0U3BlY2lmaWNBbGxvd2VkRXhwcmVzc2lvbihhRXhwcmVzc2lvbnM6IGFueSkge1xuXHRjb25zdCBhQWxsb3dlZEV4cHJlc3Npb25zUHJpb3JpdHkgPSBDb21tb25VdGlscy5BbGxvd2VkRXhwcmVzc2lvbnNQcmlvO1xuXG5cdGFFeHByZXNzaW9ucy5zb3J0KGZ1bmN0aW9uIChhOiBhbnksIGI6IGFueSkge1xuXHRcdHJldHVybiBhQWxsb3dlZEV4cHJlc3Npb25zUHJpb3JpdHkuaW5kZXhPZihhKSAtIGFBbGxvd2VkRXhwcmVzc2lvbnNQcmlvcml0eS5pbmRleE9mKGIpO1xuXHR9KTtcblxuXHRyZXR1cm4gYUV4cHJlc3Npb25zWzBdO1xufVxuZnVuY3Rpb24gZ2V0T3BlcmF0b3JzRm9yUHJvcGVydHkoXG5cdHNQcm9wZXJ0eTogYW55LFxuXHRzRW50aXR5U2V0UGF0aDogYW55LFxuXHRvQ29udGV4dDogYW55LFxuXHRzVHlwZT86IGFueSxcblx0YlVzZVNlbWFudGljRGF0ZVJhbmdlPzogYW55LFxuXHRzU2V0dGluZ3M/OiBhbnlcbikge1xuXHRjb25zdCBvRmlsdGVyUmVzdHJpY3Rpb25zID0gQ29tbW9uVXRpbHMuZ2V0RmlsdGVyUmVzdHJpY3Rpb25zQnlQYXRoKHNFbnRpdHlTZXRQYXRoLCBvQ29udGV4dCk7XG5cdGNvbnN0IGFFcXVhbHNPcHMgPSBbXCJFUVwiXTtcblx0Y29uc3QgYVNpbmdsZVJhbmdlT3BzID0gW1wiRVFcIiwgXCJHRVwiLCBcIkxFXCIsIFwiTFRcIiwgXCJHVFwiLCBcIkJUXCIsIFwiTk9UTEVcIiwgXCJOT1RMVFwiLCBcIk5PVEdFXCIsIFwiTk9UR1RcIl07XG5cdGNvbnN0IGFTaW5nbGVSYW5nZURUQmFzaWNPcHMgPSBbXCJFUVwiLCBcIkJUXCJdO1xuXHRjb25zdCBhU2luZ2xlVmFsdWVEYXRlT3BzID0gW1xuXHRcdFwiVE9EQVlcIixcblx0XHRcIlRPTU9SUk9XXCIsXG5cdFx0XCJZRVNURVJEQVlcIixcblx0XHRcIkRBVEVcIixcblx0XHRcIkZJUlNUREFZV0VFS1wiLFxuXHRcdFwiTEFTVERBWVdFRUtcIixcblx0XHRcIkZJUlNUREFZTU9OVEhcIixcblx0XHRcIkxBU1REQVlNT05USFwiLFxuXHRcdFwiRklSU1REQVlRVUFSVEVSXCIsXG5cdFx0XCJMQVNUREFZUVVBUlRFUlwiLFxuXHRcdFwiRklSU1REQVlZRUFSXCIsXG5cdFx0XCJMQVNUREFZWUVBUlwiXG5cdF07XG5cdGNvbnN0IGFCYXNpY0RhdGVUaW1lT3BzID0gW1wiRVFcIiwgXCJMRVwiLCBcIkdFXCIsIFwiQlRcIl07XG5cdGNvbnN0IGFNdWx0aVJhbmdlT3BzID0gW1wiRVFcIiwgXCJHRVwiLCBcIkxFXCIsIFwiTFRcIiwgXCJHVFwiLCBcIkJUXCIsIFwiTkVcIiwgXCJOT1RCVFwiLCBcIk5PVExFXCIsIFwiTk9UTFRcIiwgXCJOT1RHRVwiLCBcIk5PVEdUXCJdO1xuXHRjb25zdCBhU2VhcmNoRXhwcmVzc2lvbk9wcyA9IFtcIkNvbnRhaW5zXCIsIFwiTm90Q29udGFpbnNcIiwgXCJTdGFydHNXaXRoXCIsIFwiTm90U3RhcnRzV2l0aFwiLCBcIkVuZHNXaXRoXCIsIFwiTm90RW5kc1dpdGhcIl07XG5cdGNvbnN0IGFTZW1hbnRpY0RhdGVPcHNFeHQgPSBTZW1hbnRpY0RhdGVPcGVyYXRvcnMuZ2V0U3VwcG9ydGVkT3BlcmF0aW9ucygpO1xuXHRjb25zdCBiU2VtYW50aWNEYXRlUmFuZ2UgPSBiVXNlU2VtYW50aWNEYXRlUmFuZ2UgPT09IFwidHJ1ZVwiIHx8IGJVc2VTZW1hbnRpY0RhdGVSYW5nZSA9PT0gdHJ1ZTtcblx0bGV0IGFTZW1hbnRpY0RhdGVPcHM6IGFueVtdID0gW107XG5cdGNvbnN0IG9TZXR0aW5ncyA9IHR5cGVvZiBzU2V0dGluZ3MgPT09IFwic3RyaW5nXCIgPyBKU09OLnBhcnNlKHNTZXR0aW5ncykuY3VzdG9tRGF0YSA6IHNTZXR0aW5ncztcblxuXHRpZiAob0NvbnRleHQuZ2V0T2JqZWN0KHNFbnRpdHlTZXRQYXRoICsgXCIvQGNvbS5zYXAudm9jYWJ1bGFyaWVzLkNvbW1vbi52MS5SZXN1bHRDb250ZXh0XCIpID09PSB0cnVlKSB7XG5cdFx0cmV0dXJuIGFFcXVhbHNPcHMudG9TdHJpbmcoKTtcblx0fVxuXG5cdGlmIChvU2V0dGluZ3MgJiYgb1NldHRpbmdzLm9wZXJhdG9yQ29uZmlndXJhdGlvbiAmJiBvU2V0dGluZ3Mub3BlcmF0b3JDb25maWd1cmF0aW9uLmxlbmd0aCA+IDApIHtcblx0XHRhU2VtYW50aWNEYXRlT3BzID0gU2VtYW50aWNEYXRlT3BlcmF0b3JzLmdldEZpbHRlck9wZXJhdGlvbnMob1NldHRpbmdzLm9wZXJhdG9yQ29uZmlndXJhdGlvbik7XG5cdH0gZWxzZSB7XG5cdFx0YVNlbWFudGljRGF0ZU9wcyA9IFNlbWFudGljRGF0ZU9wZXJhdG9ycy5nZXRTZW1hbnRpY0RhdGVPcGVyYXRpb25zKCk7XG5cdH1cblx0bGV0IGFTaW5nbGVSYW5nZURhdGVUaW1lT3BzID0gYVNlbWFudGljRGF0ZU9wcy5maWx0ZXIoZnVuY3Rpb24gKHNPcGVyYXRvcikge1xuXHRcdHJldHVybiBzT3BlcmF0b3IgIT09IFwiREFURVwiICYmIHNPcGVyYXRvciAhPT0gXCJEQVRFUkFOR0VcIiAmJiBzT3BlcmF0b3IgIT09IFwiRlJPTVwiICYmIHNPcGVyYXRvciAhPT0gXCJUT1wiO1xuXHR9KTtcblx0Ly8gR2V0IHRoZSBkZWZhdWx0IE9wZXJhdG9ycyBmb3IgdGhpcyBQcm9wZXJ0eSBUeXBlXG5cdGxldCBhRGVmYXVsdE9wZXJhdG9ycyA9IF9nZXREZWZhdWx0T3BlcmF0b3JzKHNUeXBlKTtcblxuXHQvLyBJcyB0aGVyZSBhIEZpbHRlciBSZXN0cmljdGlvbiBkZWZpbmVkIGZvciB0aGlzIHByb3BlcnR5P1xuXHRpZiAob0ZpbHRlclJlc3RyaWN0aW9ucyAmJiBvRmlsdGVyUmVzdHJpY3Rpb25zLkZpbHRlckFsbG93ZWRFeHByZXNzaW9ucyAmJiBvRmlsdGVyUmVzdHJpY3Rpb25zLkZpbHRlckFsbG93ZWRFeHByZXNzaW9uc1tzUHJvcGVydHldKSB7XG5cdFx0Ly8gRXh0ZW5kaW5nIHRoZSBkZWZhdWx0IG9wZXJhdG9ycyBsaXN0IHdpdGggU2VtYW50aWMgRGF0ZSBvcHRpb25zIERBVEVSQU5HRSwgREFURSwgRlJPTSBhbmQgVE9cblx0XHRpZiAoYlNlbWFudGljRGF0ZVJhbmdlKSB7XG5cdFx0XHRhRGVmYXVsdE9wZXJhdG9ycyA9IGFTZW1hbnRpY0RhdGVPcHNFeHQuY29uY2F0KGFEZWZhdWx0T3BlcmF0b3JzKTtcblx0XHR9XG5cdFx0Y29uc3Qgc0FsbG93ZWRFeHByZXNzaW9uID0gQ29tbW9uVXRpbHMuZ2V0U3BlY2lmaWNBbGxvd2VkRXhwcmVzc2lvbihvRmlsdGVyUmVzdHJpY3Rpb25zLkZpbHRlckFsbG93ZWRFeHByZXNzaW9uc1tzUHJvcGVydHldKTtcblx0XHRsZXQgc1Jlc3RyaWN0aW9ucztcblx0XHQvLyBJbiBjYXNlIG1vcmUgdGhhbiBvbmUgQWxsb3dlZCBFeHByZXNzaW9ucyBoYXMgYmVlbiBkZWZpbmVkIGZvciBhIHByb3BlcnR5XG5cdFx0Ly8gY2hvb3NlIHRoZSBtb3N0IHJlc3RyaWN0aXZlIEFsbG93ZWQgRXhwcmVzc2lvblxuXG5cdFx0Ly8gTXVsdGlWYWx1ZSBoYXMgc2FtZSBPcGVyYXRvciBhcyBTaW5nbGVWYWx1ZSwgYnV0IHRoZXJlIGNhbiBiZSBtb3JlIHRoYW4gb25lIChtYXhDb25kaXRpb25zKVxuXHRcdHN3aXRjaCAoc0FsbG93ZWRFeHByZXNzaW9uKSB7XG5cdFx0XHRjYXNlIFwiU2luZ2xlVmFsdWVcIjpcblx0XHRcdFx0Y29uc3QgYVNpbmdsZVZhbHVlT3BzID0gc1R5cGUgPT09IFwiRWRtLkRhdGVcIiAmJiBiU2VtYW50aWNEYXRlUmFuZ2UgPyBhU2luZ2xlVmFsdWVEYXRlT3BzIDogYUVxdWFsc09wcztcblx0XHRcdFx0c1Jlc3RyaWN0aW9ucyA9IF9nZXRSZXN0cmljdGlvbnMoYURlZmF1bHRPcGVyYXRvcnMsIGFTaW5nbGVWYWx1ZU9wcyk7XG5cdFx0XHRcdGJyZWFrO1xuXHRcdFx0Y2FzZSBcIk11bHRpVmFsdWVcIjpcblx0XHRcdFx0c1Jlc3RyaWN0aW9ucyA9IF9nZXRSZXN0cmljdGlvbnMoYURlZmF1bHRPcGVyYXRvcnMsIGFFcXVhbHNPcHMpO1xuXHRcdFx0XHRicmVhaztcblx0XHRcdGNhc2UgXCJTaW5nbGVSYW5nZVwiOlxuXHRcdFx0XHRjb25zdCBhRXhwcmVzc2lvbk9wcyA9IGJTZW1hbnRpY0RhdGVSYW5nZVxuXHRcdFx0XHRcdD8gc1R5cGUgPT09IFwiRWRtLkRhdGVcIlxuXHRcdFx0XHRcdFx0PyBhU2VtYW50aWNEYXRlT3BzXG5cdFx0XHRcdFx0XHQ6IHNUeXBlID09PSBcIkVkbS5EYXRlVGltZU9mZnNldFwiXG5cdFx0XHRcdFx0XHQ/IGFTaW5nbGVSYW5nZURhdGVUaW1lT3BzLmNvbmNhdChhQmFzaWNEYXRlVGltZU9wcylcblx0XHRcdFx0XHRcdDogYVNpbmdsZVJhbmdlT3BzXG5cdFx0XHRcdFx0OiBzVHlwZSA9PT0gXCJFZG0uRGF0ZVRpbWVPZmZzZXRcIlxuXHRcdFx0XHRcdD8gYVNpbmdsZVJhbmdlRFRCYXNpY09wc1xuXHRcdFx0XHRcdDogYVNpbmdsZVJhbmdlT3BzO1xuXHRcdFx0XHRjb25zdCBzT3BlcmF0b3JzID0gX2dldFJlc3RyaWN0aW9ucyhhRGVmYXVsdE9wZXJhdG9ycywgYUV4cHJlc3Npb25PcHMpO1xuXHRcdFx0XHRzUmVzdHJpY3Rpb25zID0gc09wZXJhdG9ycyA/IHNPcGVyYXRvcnMgOiBcIlwiO1xuXHRcdFx0XHRicmVhaztcblx0XHRcdGNhc2UgXCJNdWx0aVJhbmdlXCI6XG5cdFx0XHRcdHNSZXN0cmljdGlvbnMgPSBfZ2V0UmVzdHJpY3Rpb25zKGFEZWZhdWx0T3BlcmF0b3JzLCBhTXVsdGlSYW5nZU9wcyk7XG5cdFx0XHRcdGJyZWFrO1xuXHRcdFx0Y2FzZSBcIlNlYXJjaEV4cHJlc3Npb25cIjpcblx0XHRcdFx0c1Jlc3RyaWN0aW9ucyA9IF9nZXRSZXN0cmljdGlvbnMoYURlZmF1bHRPcGVyYXRvcnMsIGFTZWFyY2hFeHByZXNzaW9uT3BzKTtcblx0XHRcdFx0YnJlYWs7XG5cdFx0XHRjYXNlIFwiTXVsdGlSYW5nZU9yU2VhcmNoRXhwcmVzc2lvblwiOlxuXHRcdFx0XHRzUmVzdHJpY3Rpb25zID0gX2dldFJlc3RyaWN0aW9ucyhhRGVmYXVsdE9wZXJhdG9ycywgYVNlYXJjaEV4cHJlc3Npb25PcHMuY29uY2F0KGFNdWx0aVJhbmdlT3BzKSk7XG5cdFx0XHRcdGJyZWFrO1xuXG5cdFx0XHRkZWZhdWx0OlxuXHRcdFx0XHRicmVhaztcblx0XHR9XG5cdFx0Ly8gSW4gY2FzZSBBbGxvd2VkRXhwcmVzc2lvbnMgaXMgbm90IHJlY29nbmlzZWQsIHVuZGVmaW5lZCBpbiByZXR1cm4gcmVzdWx0cyBpbiB0aGUgZGVmYXVsdCBzZXQgb2Zcblx0XHQvLyBvcGVyYXRvcnMgZm9yIHRoZSB0eXBlLlxuXHRcdHJldHVybiBzUmVzdHJpY3Rpb25zO1xuXHR9IGVsc2UgaWYgKHNUeXBlID09PSBcIkVkbS5EYXRlXCIpIHtcblx0XHQvLyBJbiBjYXNlIEFsbG93ZWRFeHByZXNzaW9ucyBpcyBub3QgcHJvdmlkZWQgZm9yIHR5cGUgRWRtLkRhdGUgdGhlbiBhbGwgdGhlIGRlZmF1bHRcblx0XHQvLyBvcGVyYXRvcnMgZm9yIHRoZSB0eXBlIHNob3VsZCBiZSByZXR1cm5lZCBleGNsdWRpbmcgc2VtYW50aWMgb3BlcmF0b3JzIGZyb20gdGhlIGxpc3QuXG5cdFx0YVNlbWFudGljRGF0ZU9wcyA9IFNlbWFudGljRGF0ZU9wZXJhdG9ycy5nZXRTZW1hbnRpY0RhdGVPcGVyYXRpb25zKCk7XG5cdFx0Y29uc3QgYU9wZXJhdG9ycyA9IGFEZWZhdWx0T3BlcmF0b3JzLmZpbHRlcihmdW5jdGlvbiAoc0VsZW1lbnQ6IGFueSkge1xuXHRcdFx0cmV0dXJuIGFTZW1hbnRpY0RhdGVPcHMuaW5kZXhPZihzRWxlbWVudCkgPCAwO1xuXHRcdH0pO1xuXHRcdHJldHVybiBhT3BlcmF0b3JzLnRvU3RyaW5nKCk7XG5cdH1cbn1cbmZ1bmN0aW9uIGdldFBhcmFtZXRlckluZm8ob01ldGFNb2RlbDogYW55LCBzQ29udGV4dFBhdGg6IGFueSkge1xuXHRjb25zdCBzUGFyYW1ldGVyQ29udGV4dFBhdGggPSBzQ29udGV4dFBhdGguc3Vic3RyaW5nKDAsIHNDb250ZXh0UGF0aC5sYXN0SW5kZXhPZihcIi9cIikpO1xuXHRjb25zdCBiUmVzdWx0Q29udGV4dCA9IG9NZXRhTW9kZWwuZ2V0T2JqZWN0KHNQYXJhbWV0ZXJDb250ZXh0UGF0aCArIFwiL0Bjb20uc2FwLnZvY2FidWxhcmllcy5Db21tb24udjEuUmVzdWx0Q29udGV4dFwiKTtcblx0Y29uc3Qgb1BhcmFtZXRlckluZm86IGFueSA9IHt9O1xuXHRpZiAoYlJlc3VsdENvbnRleHQgJiYgc1BhcmFtZXRlckNvbnRleHRQYXRoICE9PSBzQ29udGV4dFBhdGgpIHtcblx0XHRvUGFyYW1ldGVySW5mby5jb250ZXh0UGF0aCA9IHNQYXJhbWV0ZXJDb250ZXh0UGF0aDtcblx0XHRvUGFyYW1ldGVySW5mby5wYXJhbWV0ZXJQcm9wZXJ0aWVzID0gQ29tbW9uVXRpbHMuZ2V0Q29udGV4dFBhdGhQcm9wZXJ0aWVzKG9NZXRhTW9kZWwsIHNQYXJhbWV0ZXJDb250ZXh0UGF0aCk7XG5cdH1cblx0cmV0dXJuIG9QYXJhbWV0ZXJJbmZvO1xufVxuZnVuY3Rpb24gYWRkU2VsZWN0T3B0aW9uVG9Db25kaXRpb25zKG9Qcm9wZXJ0eU1ldGFkYXRhOiBhbnksIGFWYWxpZE9wZXJhdG9yczogYW55LCBhQ3VtdWxhdGl2ZUNvbmRpdGlvbnM6IGFueSwgb1NlbGVjdE9wdGlvbjogYW55KSB7XG5cdGNvbnN0IG9Db25kaXRpb24gPSBnZXRDb25kaXRpb25zKG9TZWxlY3RPcHRpb24sIG9Qcm9wZXJ0eU1ldGFkYXRhKTtcblx0aWYgKG9Db25kaXRpb24pIHtcblx0XHRpZiAoIWFWYWxpZE9wZXJhdG9ycyB8fCBhVmFsaWRPcGVyYXRvcnMuaW5kZXhPZihvQ29uZGl0aW9uLm9wZXJhdG9yKSA+IC0xKSB7XG5cdFx0XHRhQ3VtdWxhdGl2ZUNvbmRpdGlvbnMucHVzaChvQ29uZGl0aW9uKTtcblx0XHR9XG5cdH1cblx0cmV0dXJuIGFDdW11bGF0aXZlQ29uZGl0aW9ucztcbn1cbi8qKlxuICogQHBhcmFtIHNDb250ZXh0UGF0aFxuICogQHBhcmFtIG9TZWxlY3Rpb25WYXJpYW50XG4gKiBAcGFyYW0gc1NlbGVjdE9wdGlvblByb3BcbiAqIEBwYXJhbSBvQ29uZGl0aW9uc1xuICogQHBhcmFtIHNDb25kaXRpb25QYXRoXG4gKiBAcGFyYW0gc0NvbmRpdGlvblByb3BcbiAqIEBwYXJhbSBvVmFsaWRQcm9wZXJ0aWVzXG4gKiBAcGFyYW0gb01ldGFNb2RlbFxuICogQHBhcmFtIGlzUGFyYW1ldGVyXG4gKi9cbmZ1bmN0aW9uIGFkZFNlbGVjdE9wdGlvbnNUb0NvbmRpdGlvbnMoXG5cdHNDb250ZXh0UGF0aDogYW55LFxuXHRvU2VsZWN0aW9uVmFyaWFudDogYW55LFxuXHRzU2VsZWN0T3B0aW9uUHJvcDogYW55LFxuXHRvQ29uZGl0aW9uczogYW55LFxuXHRzQ29uZGl0aW9uUGF0aDogYW55LFxuXHRzQ29uZGl0aW9uUHJvcDogYW55LFxuXHRvVmFsaWRQcm9wZXJ0aWVzOiBhbnksXG5cdG9NZXRhTW9kZWw6IGFueSxcblx0aXNQYXJhbWV0ZXI6IGFueVxuKSB7XG5cdGxldCBhQ29uZGl0aW9uczogYW55W10gPSBbXSxcblx0XHRhU2VsZWN0T3B0aW9ucyxcblx0XHRhVmFsaWRPcGVyYXRvcnM7XG5cblx0aWYgKGlzUGFyYW1ldGVyIHx8IENvbW1vblV0aWxzLmlzUHJvcGVydHlGaWx0ZXJhYmxlKG9NZXRhTW9kZWwsIHNDb250ZXh0UGF0aCwgc0NvbmRpdGlvblByb3AsIHRydWUpKSB7XG5cdFx0YVNlbGVjdE9wdGlvbnMgPSBvU2VsZWN0aW9uVmFyaWFudC5nZXRTZWxlY3RPcHRpb24oc1NlbGVjdE9wdGlvblByb3ApO1xuXHRcdGFWYWxpZE9wZXJhdG9ycyA9IGlzUGFyYW1ldGVyID8gW1wiRVFcIl0gOiBDb21tb25VdGlscy5nZXRPcGVyYXRvcnNGb3JQcm9wZXJ0eShzQ29uZGl0aW9uUHJvcCwgc0NvbnRleHRQYXRoLCBvTWV0YU1vZGVsKTtcblx0XHRjb25zdCBvUHJvcGVydHlNZXRhZGF0YSA9IG9WYWxpZFByb3BlcnRpZXNbc0NvbmRpdGlvblByb3BdO1xuXHRcdC8vIENyZWF0ZSBjb25kaXRpb25zIGZvciBhbGwgdGhlIHNlbGVjdE9wdGlvbnMgb2YgdGhlIHByb3BlcnR5XG5cdFx0YUNvbmRpdGlvbnMgPSBpc1BhcmFtZXRlclxuXHRcdFx0PyBhZGRTZWxlY3RPcHRpb25Ub0NvbmRpdGlvbnMob1Byb3BlcnR5TWV0YWRhdGEsIGFWYWxpZE9wZXJhdG9ycywgYUNvbmRpdGlvbnMsIGFTZWxlY3RPcHRpb25zWzBdKVxuXHRcdFx0OiBhU2VsZWN0T3B0aW9ucy5yZWR1Y2UoYWRkU2VsZWN0T3B0aW9uVG9Db25kaXRpb25zLmJpbmQobnVsbCwgb1Byb3BlcnR5TWV0YWRhdGEsIGFWYWxpZE9wZXJhdG9ycyksIGFDb25kaXRpb25zKTtcblx0XHRpZiAoYUNvbmRpdGlvbnMubGVuZ3RoKSB7XG5cdFx0XHRpZiAoc0NvbmRpdGlvblBhdGgpIHtcblx0XHRcdFx0b0NvbmRpdGlvbnNbc0NvbmRpdGlvblBhdGggKyBzQ29uZGl0aW9uUHJvcF0gPSBvQ29uZGl0aW9ucy5oYXNPd25Qcm9wZXJ0eShzQ29uZGl0aW9uUGF0aCArIHNDb25kaXRpb25Qcm9wKVxuXHRcdFx0XHRcdD8gb0NvbmRpdGlvbnNbc0NvbmRpdGlvblBhdGggKyBzQ29uZGl0aW9uUHJvcF0uY29uY2F0KGFDb25kaXRpb25zKVxuXHRcdFx0XHRcdDogYUNvbmRpdGlvbnM7XG5cdFx0XHR9IGVsc2Uge1xuXHRcdFx0XHRvQ29uZGl0aW9uc1tzQ29uZGl0aW9uUHJvcF0gPSBvQ29uZGl0aW9ucy5oYXNPd25Qcm9wZXJ0eShzQ29uZGl0aW9uUHJvcClcblx0XHRcdFx0XHQ/IG9Db25kaXRpb25zW3NDb25kaXRpb25Qcm9wXS5jb25jYXQoYUNvbmRpdGlvbnMpXG5cdFx0XHRcdFx0OiBhQ29uZGl0aW9ucztcblx0XHRcdH1cblx0XHR9XG5cdH1cbn1cblxuZnVuY3Rpb24gYWRkU2VsZWN0aW9uVmFyaWFudFRvQ29uZGl0aW9ucyhvU2VsZWN0aW9uVmFyaWFudDogYW55LCBvQ29uZGl0aW9uczogb2JqZWN0LCBvTWV0YU1vZGVsOiBPRGF0YU1ldGFNb2RlbCwgc0NvbnRleHRQYXRoOiBzdHJpbmcpIHtcblx0Y29uc3QgYVNlbGVjdE9wdGlvbnNQcm9wZXJ0eU5hbWVzID0gb1NlbGVjdGlvblZhcmlhbnQuZ2V0U2VsZWN0T3B0aW9uc1Byb3BlcnR5TmFtZXMoKSxcblx0XHRvVmFsaWRQcm9wZXJ0aWVzID0gQ29tbW9uVXRpbHMuZ2V0Q29udGV4dFBhdGhQcm9wZXJ0aWVzKG9NZXRhTW9kZWwsIHNDb250ZXh0UGF0aCksXG5cdFx0YU1ldGFkYXRQcm9wZXJ0aWVzID0gT2JqZWN0LmtleXMob1ZhbGlkUHJvcGVydGllcyksXG5cdFx0b1BhcmFtZXRlckluZm8gPSBDb21tb25VdGlscy5nZXRQYXJhbWV0ZXJJbmZvKG9NZXRhTW9kZWwsIHNDb250ZXh0UGF0aCksXG5cdFx0c1BhcmFtZXRlckNvbnRleHRQYXRoID0gb1BhcmFtZXRlckluZm8uY29udGV4dFBhdGgsXG5cdFx0b1ZhbGlkUGFyYW1ldGVyUHJvcGVydGllcyA9IG9QYXJhbWV0ZXJJbmZvLnBhcmFtZXRlclByb3BlcnRpZXMsXG5cdFx0Ykhhc1BhcmFtZXRlcnMgPSAhIW9QYXJhbWV0ZXJJbmZvLmNvbnRleHRQYXRoICYmIG9WYWxpZFBhcmFtZXRlclByb3BlcnRpZXMgJiYgT2JqZWN0LmtleXMob1ZhbGlkUGFyYW1ldGVyUHJvcGVydGllcykubGVuZ3RoID4gMDtcblxuXHRpZiAoYkhhc1BhcmFtZXRlcnMpIHtcblx0XHRjb25zdCBhTWV0YWRhdGFQYXJhbWV0ZXJzID0gT2JqZWN0LmtleXMob1ZhbGlkUGFyYW1ldGVyUHJvcGVydGllcyk7XG5cdFx0YU1ldGFkYXRhUGFyYW1ldGVycy5mb3JFYWNoKGZ1bmN0aW9uIChzTWV0YWRhdGFQYXJhbWV0ZXI6IHN0cmluZykge1xuXHRcdFx0bGV0IHNTZWxlY3RPcHRpb25OYW1lO1xuXHRcdFx0aWYgKGFTZWxlY3RPcHRpb25zUHJvcGVydHlOYW1lcy5pbmNsdWRlcyhcIiRQYXJhbWV0ZXIuXCIgKyBzTWV0YWRhdGFQYXJhbWV0ZXIpKSB7XG5cdFx0XHRcdHNTZWxlY3RPcHRpb25OYW1lID0gXCIkUGFyYW1ldGVyLlwiICsgc01ldGFkYXRhUGFyYW1ldGVyO1xuXHRcdFx0fSBlbHNlIGlmIChhU2VsZWN0T3B0aW9uc1Byb3BlcnR5TmFtZXMuaW5jbHVkZXMoc01ldGFkYXRhUGFyYW1ldGVyKSkge1xuXHRcdFx0XHRzU2VsZWN0T3B0aW9uTmFtZSA9IHNNZXRhZGF0YVBhcmFtZXRlcjtcblx0XHRcdH0gZWxzZSBpZiAoXG5cdFx0XHRcdHNNZXRhZGF0YVBhcmFtZXRlci5zdGFydHNXaXRoKFwiUF9cIikgJiZcblx0XHRcdFx0YVNlbGVjdE9wdGlvbnNQcm9wZXJ0eU5hbWVzLmluY2x1ZGVzKFwiJFBhcmFtZXRlci5cIiArIHNNZXRhZGF0YVBhcmFtZXRlci5zbGljZSgyLCBzTWV0YWRhdGFQYXJhbWV0ZXIubGVuZ3RoKSlcblx0XHRcdCkge1xuXHRcdFx0XHRzU2VsZWN0T3B0aW9uTmFtZSA9IFwiJFBhcmFtZXRlci5cIiArIHNNZXRhZGF0YVBhcmFtZXRlci5zbGljZSgyLCBzTWV0YWRhdGFQYXJhbWV0ZXIubGVuZ3RoKTtcblx0XHRcdH0gZWxzZSBpZiAoXG5cdFx0XHRcdHNNZXRhZGF0YVBhcmFtZXRlci5zdGFydHNXaXRoKFwiUF9cIikgJiZcblx0XHRcdFx0YVNlbGVjdE9wdGlvbnNQcm9wZXJ0eU5hbWVzLmluY2x1ZGVzKHNNZXRhZGF0YVBhcmFtZXRlci5zbGljZSgyLCBzTWV0YWRhdGFQYXJhbWV0ZXIubGVuZ3RoKSlcblx0XHRcdCkge1xuXHRcdFx0XHRzU2VsZWN0T3B0aW9uTmFtZSA9IHNNZXRhZGF0YVBhcmFtZXRlci5zbGljZSgyLCBzTWV0YWRhdGFQYXJhbWV0ZXIubGVuZ3RoKTtcblx0XHRcdH0gZWxzZSBpZiAoYVNlbGVjdE9wdGlvbnNQcm9wZXJ0eU5hbWVzLmluY2x1ZGVzKFwiJFBhcmFtZXRlci5QX1wiICsgc01ldGFkYXRhUGFyYW1ldGVyKSkge1xuXHRcdFx0XHRzU2VsZWN0T3B0aW9uTmFtZSA9IFwiJFBhcmFtZXRlci5QX1wiICsgc01ldGFkYXRhUGFyYW1ldGVyO1xuXHRcdFx0fSBlbHNlIGlmIChhU2VsZWN0T3B0aW9uc1Byb3BlcnR5TmFtZXMuaW5jbHVkZXMoXCJQX1wiICsgc01ldGFkYXRhUGFyYW1ldGVyKSkge1xuXHRcdFx0XHRzU2VsZWN0T3B0aW9uTmFtZSA9IFwiUF9cIiArIHNNZXRhZGF0YVBhcmFtZXRlcjtcblx0XHRcdH1cblxuXHRcdFx0aWYgKHNTZWxlY3RPcHRpb25OYW1lKSB7XG5cdFx0XHRcdGFkZFNlbGVjdE9wdGlvbnNUb0NvbmRpdGlvbnMoXG5cdFx0XHRcdFx0c1BhcmFtZXRlckNvbnRleHRQYXRoLFxuXHRcdFx0XHRcdG9TZWxlY3Rpb25WYXJpYW50LFxuXHRcdFx0XHRcdHNTZWxlY3RPcHRpb25OYW1lLFxuXHRcdFx0XHRcdG9Db25kaXRpb25zLFxuXHRcdFx0XHRcdHVuZGVmaW5lZCxcblx0XHRcdFx0XHRzTWV0YWRhdGFQYXJhbWV0ZXIsXG5cdFx0XHRcdFx0b1ZhbGlkUGFyYW1ldGVyUHJvcGVydGllcyxcblx0XHRcdFx0XHRvTWV0YU1vZGVsLFxuXHRcdFx0XHRcdHRydWVcblx0XHRcdFx0KTtcblx0XHRcdH1cblx0XHR9KTtcblx0fVxuXHRhTWV0YWRhdFByb3BlcnRpZXMuZm9yRWFjaChmdW5jdGlvbiAoc01ldGFkYXRhUHJvcGVydHk6IHN0cmluZykge1xuXHRcdGxldCBzU2VsZWN0T3B0aW9uTmFtZTtcblx0XHRpZiAoYVNlbGVjdE9wdGlvbnNQcm9wZXJ0eU5hbWVzLmluY2x1ZGVzKHNNZXRhZGF0YVByb3BlcnR5KSkge1xuXHRcdFx0c1NlbGVjdE9wdGlvbk5hbWUgPSBzTWV0YWRhdGFQcm9wZXJ0eTtcblx0XHR9IGVsc2UgaWYgKFxuXHRcdFx0c01ldGFkYXRhUHJvcGVydHkuc3RhcnRzV2l0aChcIlBfXCIpICYmXG5cdFx0XHRhU2VsZWN0T3B0aW9uc1Byb3BlcnR5TmFtZXMuaW5jbHVkZXMoc01ldGFkYXRhUHJvcGVydHkuc2xpY2UoMiwgc01ldGFkYXRhUHJvcGVydHkubGVuZ3RoKSlcblx0XHQpIHtcblx0XHRcdHNTZWxlY3RPcHRpb25OYW1lID0gc01ldGFkYXRhUHJvcGVydHkuc2xpY2UoMiwgc01ldGFkYXRhUHJvcGVydHkubGVuZ3RoKTtcblx0XHR9IGVsc2UgaWYgKGFTZWxlY3RPcHRpb25zUHJvcGVydHlOYW1lcy5pbmNsdWRlcyhcIlBfXCIgKyBzTWV0YWRhdGFQcm9wZXJ0eSkpIHtcblx0XHRcdHNTZWxlY3RPcHRpb25OYW1lID0gXCJQX1wiICsgc01ldGFkYXRhUHJvcGVydHk7XG5cdFx0fVxuXHRcdGlmIChzU2VsZWN0T3B0aW9uTmFtZSkge1xuXHRcdFx0YWRkU2VsZWN0T3B0aW9uc1RvQ29uZGl0aW9ucyhcblx0XHRcdFx0c0NvbnRleHRQYXRoLFxuXHRcdFx0XHRvU2VsZWN0aW9uVmFyaWFudCxcblx0XHRcdFx0c1NlbGVjdE9wdGlvbk5hbWUsXG5cdFx0XHRcdG9Db25kaXRpb25zLFxuXHRcdFx0XHR1bmRlZmluZWQsXG5cdFx0XHRcdHNNZXRhZGF0YVByb3BlcnR5LFxuXHRcdFx0XHRvVmFsaWRQcm9wZXJ0aWVzLFxuXHRcdFx0XHRvTWV0YU1vZGVsLFxuXHRcdFx0XHRmYWxzZVxuXHRcdFx0KTtcblx0XHR9XG5cdH0pO1xuXG5cdGFTZWxlY3RPcHRpb25zUHJvcGVydHlOYW1lcy5mb3JFYWNoKGZ1bmN0aW9uIChzU2VsZWN0T3B0aW9uOiBhbnkpIHtcblx0XHRpZiAoc1NlbGVjdE9wdGlvbi5pbmRleE9mKFwiLlwiKSA+IDAgJiYgIXNTZWxlY3RPcHRpb24uaW5jbHVkZXMoXCIkUGFyYW1ldGVyXCIpKSB7XG5cdFx0XHRjb25zdCBzRnVsbENvbnRleHRQYXRoID0gKFwiL1wiICsgc1NlbGVjdE9wdGlvbi5yZXBsYWNlQWxsKFwiLlwiLCBcIi9cIikpLnN0YXJ0c1dpdGgoc0NvbnRleHRQYXRoKVxuXHRcdFx0XHQ/IFwiL1wiICsgc1NlbGVjdE9wdGlvbi5yZXBsYWNlQWxsKFwiLlwiLCBcIi9cIilcblx0XHRcdFx0OiBzQ29udGV4dFBhdGggKyBcIi9cIiArIHNTZWxlY3RPcHRpb24ucmVwbGFjZUFsbChcIi5cIiwgXCIvXCIpOyAvLyBjaGVjayBpZiB0aGUgZnVsbCBwYXRoLCBlZyBTYWxlc09yZGVyTWFuYWdlLl9JdGVtLk1hdGVyaWFsIGV4aXN0cyBpbiB0aGUgbWV0YW1vZGVsXG5cdFx0XHRpZiAob01ldGFNb2RlbC5nZXRPYmplY3Qoc0Z1bGxDb250ZXh0UGF0aC5yZXBsYWNlKFwiUF9cIiwgXCJcIikpKSB7XG5cdFx0XHRcdF9jcmVhdGVDb25kaXRpb25zRm9yTmF2UHJvcGVydGllcyhcblx0XHRcdFx0XHRzRnVsbENvbnRleHRQYXRoLFxuXHRcdFx0XHRcdHNDb250ZXh0UGF0aCxcblx0XHRcdFx0XHRvU2VsZWN0aW9uVmFyaWFudCxcblx0XHRcdFx0XHRzU2VsZWN0T3B0aW9uLFxuXHRcdFx0XHRcdG9NZXRhTW9kZWwsXG5cdFx0XHRcdFx0b0NvbmRpdGlvbnNcblx0XHRcdFx0KTtcblx0XHRcdH1cblx0XHR9XG5cdH0pO1xuXHRyZXR1cm4gb0NvbmRpdGlvbnM7XG59XG4vKipcbiAqIEBwYXJhbSBzRnVsbENvbnRleHRQYXRoXG4gKiBAcGFyYW0gc01haW5FbnRpdHlTZXRQYXRoXG4gKiBAcGFyYW0gb1NlbGVjdGlvblZhcmlhbnRcbiAqIEBwYXJhbSBzU2VsZWN0T3B0aW9uXG4gKiBAcGFyYW0gb01ldGFNb2RlbFxuICogQHBhcmFtIG9Db25kaXRpb25zXG4gKi9cbmZ1bmN0aW9uIF9jcmVhdGVDb25kaXRpb25zRm9yTmF2UHJvcGVydGllcyhcblx0c0Z1bGxDb250ZXh0UGF0aDogYW55LFxuXHRzTWFpbkVudGl0eVNldFBhdGg6IGFueSxcblx0b1NlbGVjdGlvblZhcmlhbnQ6IGFueSxcblx0c1NlbGVjdE9wdGlvbjogYW55LFxuXHRvTWV0YU1vZGVsOiBhbnksXG5cdG9Db25kaXRpb25zOiBhbnlcbikge1xuXHRsZXQgYU5hdk9iamVjdE5hbWVzID0gc1NlbGVjdE9wdGlvbi5zcGxpdChcIi5cIik7XG5cdC8vIEVnOiBcIlNhbGVzT3JkZXJNYW5hZ2UuX0l0ZW0uX01hdGVyaWFsLk1hdGVyaWFsXCIgb3IgXCJfSXRlbS5NYXRlcmlhbFwiXG5cdGlmICgoXCIvXCIgKyBzU2VsZWN0T3B0aW9uLnJlcGxhY2VBbGwoXCIuXCIsIFwiL1wiKSkuc3RhcnRzV2l0aChzTWFpbkVudGl0eVNldFBhdGgpKSB7XG5cdFx0Y29uc3Qgc0Z1bGxQYXRoID0gKChcIi9cIiArIHNTZWxlY3RPcHRpb24pIGFzIGFueSkucmVwbGFjZUFsbChcIi5cIiwgXCIvXCIpLFxuXHRcdFx0c05hdlBhdGggPSBzRnVsbFBhdGgucmVwbGFjZShzTWFpbkVudGl0eVNldFBhdGggKyBcIi9cIiwgXCJcIik7XG5cdFx0YU5hdk9iamVjdE5hbWVzID0gc05hdlBhdGguc3BsaXQoXCIvXCIpO1xuXHR9XG5cdGxldCBzQ29uZGl0aW9uUGF0aCA9IFwiXCI7XG5cdGNvbnN0IHNQcm9wZXJ0eU5hbWUgPSBhTmF2T2JqZWN0TmFtZXNbYU5hdk9iamVjdE5hbWVzLmxlbmd0aCAtIDFdOyAvLyBNYXRlcmlhbCBmcm9tIFNhbGVzT3JkZXJNYW5hZ2UuX0l0ZW0uTWF0ZXJpYWxcblx0Zm9yIChsZXQgaSA9IDA7IGkgPCBhTmF2T2JqZWN0TmFtZXMubGVuZ3RoIC0gMTsgaSsrKSB7XG5cdFx0aWYgKG9NZXRhTW9kZWwuZ2V0T2JqZWN0KHNNYWluRW50aXR5U2V0UGF0aCArIFwiL1wiICsgYU5hdk9iamVjdE5hbWVzW2ldLnJlcGxhY2UoXCJQX1wiLCBcIlwiKSkuJGlzQ29sbGVjdGlvbikge1xuXHRcdFx0c0NvbmRpdGlvblBhdGggPSBzQ29uZGl0aW9uUGF0aCArIGFOYXZPYmplY3ROYW1lc1tpXSArIFwiKi9cIjsgLy8gX0l0ZW0qLyBpbiBjYXNlIG9mIDE6biBjYXJkaW5hbGl0eVxuXHRcdH0gZWxzZSB7XG5cdFx0XHRzQ29uZGl0aW9uUGF0aCA9IHNDb25kaXRpb25QYXRoICsgYU5hdk9iamVjdE5hbWVzW2ldICsgXCIvXCI7IC8vIF9JdGVtLyBpbiBjYXNlIG9mIDE6MSBjYXJkaW5hbGl0eVxuXHRcdH1cblx0XHRzTWFpbkVudGl0eVNldFBhdGggPSBzTWFpbkVudGl0eVNldFBhdGggKyBcIi9cIiArIGFOYXZPYmplY3ROYW1lc1tpXTtcblx0fVxuXHRjb25zdCBzTmF2UHJvcGVydHlQYXRoID0gc0Z1bGxDb250ZXh0UGF0aC5zbGljZSgwLCBzRnVsbENvbnRleHRQYXRoLmxhc3RJbmRleE9mKFwiL1wiKSksXG5cdFx0b1ZhbGlkUHJvcGVydGllcyA9IENvbW1vblV0aWxzLmdldENvbnRleHRQYXRoUHJvcGVydGllcyhvTWV0YU1vZGVsLCBzTmF2UHJvcGVydHlQYXRoKSxcblx0XHRhU2VsZWN0T3B0aW9uc1Byb3BlcnR5TmFtZXMgPSBvU2VsZWN0aW9uVmFyaWFudC5nZXRTZWxlY3RPcHRpb25zUHJvcGVydHlOYW1lcygpO1xuXHRsZXQgc1NlbGVjdE9wdGlvbk5hbWUgPSBzUHJvcGVydHlOYW1lO1xuXHRpZiAob1ZhbGlkUHJvcGVydGllc1tzUHJvcGVydHlOYW1lXSkge1xuXHRcdHNTZWxlY3RPcHRpb25OYW1lID0gc1Byb3BlcnR5TmFtZTtcblx0fSBlbHNlIGlmIChzUHJvcGVydHlOYW1lLnN0YXJ0c1dpdGgoXCJQX1wiKSAmJiBvVmFsaWRQcm9wZXJ0aWVzW3NQcm9wZXJ0eU5hbWUucmVwbGFjZShcIlBfXCIsIFwiXCIpXSkge1xuXHRcdHNTZWxlY3RPcHRpb25OYW1lID0gc1Byb3BlcnR5TmFtZS5yZXBsYWNlKFwiUF9cIiwgXCJcIik7XG5cdH0gZWxzZSBpZiAob1ZhbGlkUHJvcGVydGllc1tcIlBfXCIgKyBzUHJvcGVydHlOYW1lXSAmJiBhU2VsZWN0T3B0aW9uc1Byb3BlcnR5TmFtZXMuaW5jbHVkZXMoXCJQX1wiICsgc1Byb3BlcnR5TmFtZSkpIHtcblx0XHRzU2VsZWN0T3B0aW9uTmFtZSA9IFwiUF9cIiArIHNQcm9wZXJ0eU5hbWU7XG5cdH1cblx0aWYgKHNQcm9wZXJ0eU5hbWUuc3RhcnRzV2l0aChcIlBfXCIpICYmIG9Db25kaXRpb25zW3NDb25kaXRpb25QYXRoICsgc1NlbGVjdE9wdGlvbk5hbWVdKSB7XG5cdFx0Ly8gaWYgdGhlcmUgaXMgbm8gU2FsZXNPcmRlck1hbmFnZS5fSXRlbS5NYXRlcmlhbCB5ZXQgaW4gdGhlIG9Db25kaXRpb25zXG5cdFx0cmV0dXJuO1xuXHR9IGVsc2UgaWYgKCFzUHJvcGVydHlOYW1lLnN0YXJ0c1dpdGgoXCJQX1wiKSAmJiBvQ29uZGl0aW9uc1tzQ29uZGl0aW9uUGF0aCArIHNTZWxlY3RPcHRpb25OYW1lXSkge1xuXHRcdGRlbGV0ZSBvQ29uZGl0aW9uc1tzQ29uZGl0aW9uUGF0aCArIHNTZWxlY3RPcHRpb25OYW1lXTtcblx0XHRhZGRTZWxlY3RPcHRpb25zVG9Db25kaXRpb25zKFxuXHRcdFx0c05hdlByb3BlcnR5UGF0aCxcblx0XHRcdG9TZWxlY3Rpb25WYXJpYW50LFxuXHRcdFx0c1NlbGVjdE9wdGlvbixcblx0XHRcdG9Db25kaXRpb25zLFxuXHRcdFx0c0NvbmRpdGlvblBhdGgsXG5cdFx0XHRzU2VsZWN0T3B0aW9uTmFtZSxcblx0XHRcdG9WYWxpZFByb3BlcnRpZXMsXG5cdFx0XHRvTWV0YU1vZGVsLFxuXHRcdFx0ZmFsc2Vcblx0XHQpO1xuXHR9IGVsc2Uge1xuXHRcdGFkZFNlbGVjdE9wdGlvbnNUb0NvbmRpdGlvbnMoXG5cdFx0XHRzTmF2UHJvcGVydHlQYXRoLFxuXHRcdFx0b1NlbGVjdGlvblZhcmlhbnQsXG5cdFx0XHRzU2VsZWN0T3B0aW9uLFxuXHRcdFx0b0NvbmRpdGlvbnMsXG5cdFx0XHRzQ29uZGl0aW9uUGF0aCxcblx0XHRcdHNTZWxlY3RPcHRpb25OYW1lLFxuXHRcdFx0b1ZhbGlkUHJvcGVydGllcyxcblx0XHRcdG9NZXRhTW9kZWwsXG5cdFx0XHRmYWxzZVxuXHRcdCk7XG5cdH1cbn1cbmZ1bmN0aW9uIGFkZFBhZ2VDb250ZXh0VG9TZWxlY3Rpb25WYXJpYW50KG9TZWxlY3Rpb25WYXJpYW50OiBhbnksIG1QYWdlQ29udGV4dDogYW55W10sIG9WaWV3OiBhbnkpIHtcblx0Y29uc3Qgb0FwcENvbXBvbmVudCA9IENvbW1vblV0aWxzLmdldEFwcENvbXBvbmVudChvVmlldyk7XG5cdGNvbnN0IG9OYXZpZ2F0aW9uU2VydmljZSA9IG9BcHBDb21wb25lbnQuZ2V0TmF2aWdhdGlvblNlcnZpY2UoKTtcblx0cmV0dXJuIG9OYXZpZ2F0aW9uU2VydmljZS5taXhBdHRyaWJ1dGVzQW5kU2VsZWN0aW9uVmFyaWFudChtUGFnZUNvbnRleHQsIG9TZWxlY3Rpb25WYXJpYW50LnRvSlNPTlN0cmluZygpKTtcbn1cbmZ1bmN0aW9uIGFkZEV4dGVybmFsU3RhdGVGaWx0ZXJzVG9TZWxlY3Rpb25WYXJpYW50KG9TZWxlY3Rpb25WYXJpYW50OiBhbnksIG1GaWx0ZXJzOiBhbnksIG9UYXJnZXRJbmZvOiBhbnksIG9GaWx0ZXJJbmZvPzogYW55KSB7XG5cdGxldCBzRmlsdGVyOiBhbnksXG5cdFx0c0xvdyA9IFwiXCIsXG5cdFx0c0hpZ2ggPSBudWxsO1xuXHRjb25zdCBmbkdldFNpZ25BbmRPcHRpb24gPSBmdW5jdGlvbiAoc09wZXJhdG9yOiBhbnksIHNMb3dWYWx1ZTogYW55LCBzSGlnaFZhbHVlOiBhbnkpIHtcblx0XHRjb25zdCBvU2VsZWN0T3B0aW9uU3RhdGUgPSB7XG5cdFx0XHRvcHRpb246IFwiXCIsXG5cdFx0XHRzaWduOiBcIklcIixcblx0XHRcdGxvdzogc0xvd1ZhbHVlLFxuXHRcdFx0aGlnaDogc0hpZ2hWYWx1ZVxuXHRcdH07XG5cdFx0c3dpdGNoIChzT3BlcmF0b3IpIHtcblx0XHRcdGNhc2UgXCJDb250YWluc1wiOlxuXHRcdFx0XHRvU2VsZWN0T3B0aW9uU3RhdGUub3B0aW9uID0gXCJDUFwiO1xuXHRcdFx0XHRicmVhaztcblx0XHRcdGNhc2UgXCJTdGFydHNXaXRoXCI6XG5cdFx0XHRcdG9TZWxlY3RPcHRpb25TdGF0ZS5vcHRpb24gPSBcIkNQXCI7XG5cdFx0XHRcdG9TZWxlY3RPcHRpb25TdGF0ZS5sb3cgKz0gXCIqXCI7XG5cdFx0XHRcdGJyZWFrO1xuXHRcdFx0Y2FzZSBcIkVuZHNXaXRoXCI6XG5cdFx0XHRcdG9TZWxlY3RPcHRpb25TdGF0ZS5vcHRpb24gPSBcIkNQXCI7XG5cdFx0XHRcdG9TZWxlY3RPcHRpb25TdGF0ZS5sb3cgPSBcIipcIiArIG9TZWxlY3RPcHRpb25TdGF0ZS5sb3c7XG5cdFx0XHRcdGJyZWFrO1xuXHRcdFx0Y2FzZSBcIkJUXCI6XG5cdFx0XHRjYXNlIFwiTEVcIjpcblx0XHRcdGNhc2UgXCJMVFwiOlxuXHRcdFx0Y2FzZSBcIkdUXCI6XG5cdFx0XHRjYXNlIFwiTkVcIjpcblx0XHRcdGNhc2UgXCJFUVwiOlxuXHRcdFx0XHRvU2VsZWN0T3B0aW9uU3RhdGUub3B0aW9uID0gc09wZXJhdG9yO1xuXHRcdFx0XHRicmVhaztcblx0XHRcdGNhc2UgXCJUT0RBWVwiOlxuXHRcdFx0Y2FzZSBcIkRBVEVcIjpcblx0XHRcdFx0b1NlbGVjdE9wdGlvblN0YXRlLm9wdGlvbiA9IFwiRVFcIjtcblx0XHRcdFx0YnJlYWs7XG5cdFx0XHRjYXNlIFwiRUVRXCI6XG5cdFx0XHRcdG9TZWxlY3RPcHRpb25TdGF0ZS5vcHRpb24gPSBcIkVRXCI7XG5cdFx0XHRcdGJyZWFrO1xuXHRcdFx0Y2FzZSBcIkVtcHR5XCI6XG5cdFx0XHRcdG9TZWxlY3RPcHRpb25TdGF0ZS5vcHRpb24gPSBcIkVRXCI7XG5cdFx0XHRcdG9TZWxlY3RPcHRpb25TdGF0ZS5sb3cgPSBcIlwiO1xuXHRcdFx0XHRicmVhaztcblx0XHRcdGNhc2UgXCJOb3RDb250YWluc1wiOlxuXHRcdFx0XHRvU2VsZWN0T3B0aW9uU3RhdGUub3B0aW9uID0gXCJDUFwiO1xuXHRcdFx0XHRvU2VsZWN0T3B0aW9uU3RhdGUuc2lnbiA9IFwiRVwiO1xuXHRcdFx0XHRicmVhaztcblx0XHRcdGNhc2UgXCJOT1RCVFwiOlxuXHRcdFx0XHRvU2VsZWN0T3B0aW9uU3RhdGUub3B0aW9uID0gXCJCVFwiO1xuXHRcdFx0XHRvU2VsZWN0T3B0aW9uU3RhdGUuc2lnbiA9IFwiRVwiO1xuXHRcdFx0XHRicmVhaztcblx0XHRcdGNhc2UgXCJOb3RTdGFydHNXaXRoXCI6XG5cdFx0XHRcdG9TZWxlY3RPcHRpb25TdGF0ZS5vcHRpb24gPSBcIkNQXCI7XG5cdFx0XHRcdG9TZWxlY3RPcHRpb25TdGF0ZS5sb3cgKz0gXCIqXCI7XG5cdFx0XHRcdG9TZWxlY3RPcHRpb25TdGF0ZS5zaWduID0gXCJFXCI7XG5cdFx0XHRcdGJyZWFrO1xuXHRcdFx0Y2FzZSBcIk5vdEVuZHNXaXRoXCI6XG5cdFx0XHRcdG9TZWxlY3RPcHRpb25TdGF0ZS5vcHRpb24gPSBcIkNQXCI7XG5cdFx0XHRcdG9TZWxlY3RPcHRpb25TdGF0ZS5sb3cgPSBcIipcIiArIG9TZWxlY3RPcHRpb25TdGF0ZS5sb3c7XG5cdFx0XHRcdG9TZWxlY3RPcHRpb25TdGF0ZS5zaWduID0gXCJFXCI7XG5cdFx0XHRcdGJyZWFrO1xuXHRcdFx0Y2FzZSBcIk5vdEVtcHR5XCI6XG5cdFx0XHRcdG9TZWxlY3RPcHRpb25TdGF0ZS5vcHRpb24gPSBcIk5FXCI7XG5cdFx0XHRcdG9TZWxlY3RPcHRpb25TdGF0ZS5sb3cgPSBcIlwiO1xuXHRcdFx0XHRicmVhaztcblx0XHRcdGNhc2UgXCJOT1RMRVwiOlxuXHRcdFx0XHRvU2VsZWN0T3B0aW9uU3RhdGUub3B0aW9uID0gXCJMRVwiO1xuXHRcdFx0XHRvU2VsZWN0T3B0aW9uU3RhdGUuc2lnbiA9IFwiRVwiO1xuXHRcdFx0XHRicmVhaztcblx0XHRcdGNhc2UgXCJOT1RHRVwiOlxuXHRcdFx0XHRvU2VsZWN0T3B0aW9uU3RhdGUub3B0aW9uID0gXCJHRVwiO1xuXHRcdFx0XHRvU2VsZWN0T3B0aW9uU3RhdGUuc2lnbiA9IFwiRVwiO1xuXHRcdFx0XHRicmVhaztcblx0XHRcdGNhc2UgXCJOT1RMVFwiOlxuXHRcdFx0XHRvU2VsZWN0T3B0aW9uU3RhdGUub3B0aW9uID0gXCJMVFwiO1xuXHRcdFx0XHRvU2VsZWN0T3B0aW9uU3RhdGUuc2lnbiA9IFwiRVwiO1xuXHRcdFx0XHRicmVhaztcblx0XHRcdGNhc2UgXCJOT1RHVFwiOlxuXHRcdFx0XHRvU2VsZWN0T3B0aW9uU3RhdGUub3B0aW9uID0gXCJHVFwiO1xuXHRcdFx0XHRvU2VsZWN0T3B0aW9uU3RhdGUuc2lnbiA9IFwiRVwiO1xuXHRcdFx0XHRicmVhaztcblx0XHRcdGRlZmF1bHQ6XG5cdFx0XHRcdExvZy53YXJuaW5nKHNPcGVyYXRvciArIFwiIGlzIG5vdCBzdXBwb3J0ZWQuIFwiICsgc0ZpbHRlciArIFwiIGNvdWxkIG5vdCBiZSBhZGRlZCB0byB0aGUgbmF2aWdhdGlvbiBjb250ZXh0XCIpO1xuXHRcdH1cblx0XHRyZXR1cm4gb1NlbGVjdE9wdGlvblN0YXRlO1xuXHR9O1xuXHRjb25zdCBvRmlsdGVyQ29uZGl0aW9ucyA9IG1GaWx0ZXJzLmZpbHRlckNvbmRpdGlvbnM7XG5cdGNvbnN0IG9GaWx0ZXJzV2l0aG91dENvbmZsaWN0ID0gbUZpbHRlcnMuZmlsdGVyQ29uZGl0aW9uc1dpdGhvdXRDb25mbGljdCA/IG1GaWx0ZXJzLmZpbHRlckNvbmRpdGlvbnNXaXRob3V0Q29uZmxpY3QgOiB7fTtcblx0Y29uc3Qgb1RhYmxlUHJvcGVydGllc1dpdGhvdXRDb25mbGljdCA9IG9UYXJnZXRJbmZvLnByb3BlcnRpZXNXaXRob3V0Q29uZmxpY3QgPyBvVGFyZ2V0SW5mby5wcm9wZXJ0aWVzV2l0aG91dENvbmZsaWN0IDoge307XG5cdGNvbnN0IGFkZEZpbHRlcnNUb1NlbGVjdGlvblZhcmlhbnQgPSBmdW5jdGlvbiAob1NlbGVjdGlvblZhcmlhbnQ6IGFueSwgc0ZpbHRlck5hbWU6IGFueSwgc1BhdGg/OiBhbnkpIHtcblx0XHRjb25zdCBhRmlsdGVycyA9IG9GaWx0ZXJDb25kaXRpb25zW3NGaWx0ZXJOYW1lXTtcblx0XHRmb3IgKGNvbnN0IGl0ZW0gaW4gYUZpbHRlcnMpIHtcblx0XHRcdGNvbnN0IG9GaWx0ZXIgPSBhRmlsdGVyc1tpdGVtXTtcblx0XHRcdHNMb3cgPSAob0ZpbHRlci52YWx1ZXNbMF0gJiYgb0ZpbHRlci52YWx1ZXNbMF0udG9TdHJpbmcoKSkgfHwgXCJcIjtcblx0XHRcdHNIaWdoID0gKG9GaWx0ZXIudmFsdWVzWzFdICYmIG9GaWx0ZXIudmFsdWVzWzFdLnRvU3RyaW5nKCkpIHx8IG51bGw7XG5cdFx0XHRpZiAob0ZpbHRlci5vcGVyYXRvciA9PT0gXCJUT0RBWVwiIHx8IG9GaWx0ZXIub3BlcmF0b3IgPT09IFwiREFURVwiKSB7XG5cdFx0XHRcdGNvbnN0IGFGaWx0ZXIgPSBvRmlsdGVySW5mb1swXS5hRmlsdGVycy5maWx0ZXIoZnVuY3Rpb24gKG9GaWx0ZXI6IGFueSkge1xuXHRcdFx0XHRcdHJldHVybiBvRmlsdGVyLnNQYXRoID09PSBzRmlsdGVyTmFtZTtcblx0XHRcdFx0fSk7XG5cdFx0XHRcdHNMb3cgPSBhRmlsdGVyWzBdLm9WYWx1ZTEgfHwgXCJcIjtcblx0XHRcdFx0c0hpZ2ggPSBudWxsO1xuXHRcdFx0fVxuXHRcdFx0Y29uc3Qgb1NlbGVjdE9wdGlvblZhbHVlcyA9IGZuR2V0U2lnbkFuZE9wdGlvbihvRmlsdGVyLm9wZXJhdG9yLCBzTG93LCBzSGlnaCk7XG5cdFx0XHRpZiAob1NlbGVjdE9wdGlvblZhbHVlcy5vcHRpb24pIHtcblx0XHRcdFx0b1NlbGVjdGlvblZhcmlhbnQuYWRkU2VsZWN0T3B0aW9uKFxuXHRcdFx0XHRcdHNQYXRoID8gc1BhdGggOiBzRmlsdGVyTmFtZSxcblx0XHRcdFx0XHRvU2VsZWN0T3B0aW9uVmFsdWVzLnNpZ24sXG5cdFx0XHRcdFx0b1NlbGVjdE9wdGlvblZhbHVlcy5vcHRpb24sXG5cdFx0XHRcdFx0b1NlbGVjdE9wdGlvblZhbHVlcy5sb3csXG5cdFx0XHRcdFx0b1NlbGVjdE9wdGlvblZhbHVlcy5oaWdoXG5cdFx0XHRcdCk7XG5cdFx0XHR9XG5cdFx0fVxuXHR9O1xuXG5cdGZvciAoc0ZpbHRlciBpbiBvRmlsdGVyQ29uZGl0aW9ucykge1xuXHRcdC8vIG9ubHkgYWRkIHRoZSBmaWx0ZXIgdmFsdWVzIGlmIGl0IGlzIG5vdCBhbHJlYWR5IHByZXNlbnQgaW4gdGhlIFNWIGFscmVhZHlcblx0XHRpZiAoIW9TZWxlY3Rpb25WYXJpYW50LmdldFNlbGVjdE9wdGlvbihzRmlsdGVyKSkge1xuXHRcdFx0Ly8gVE9ETyA6IGN1c3RvbSBmaWx0ZXJzIHNob3VsZCBiZSBpZ25vcmVkIG1vcmUgZ2VuZXJpY2FsbHlcblx0XHRcdGlmIChzRmlsdGVyID09PSBcIiRlZGl0U3RhdGVcIikge1xuXHRcdFx0XHRjb250aW51ZTtcblx0XHRcdH1cblx0XHRcdGFkZEZpbHRlcnNUb1NlbGVjdGlvblZhcmlhbnQob1NlbGVjdGlvblZhcmlhbnQsIHNGaWx0ZXIpO1xuXHRcdH0gZWxzZSB7XG5cdFx0XHRpZiAob1RhYmxlUHJvcGVydGllc1dpdGhvdXRDb25mbGljdCAmJiBzRmlsdGVyIGluIG9UYWJsZVByb3BlcnRpZXNXaXRob3V0Q29uZmxpY3QpIHtcblx0XHRcdFx0YWRkRmlsdGVyc1RvU2VsZWN0aW9uVmFyaWFudChvU2VsZWN0aW9uVmFyaWFudCwgc0ZpbHRlciwgb1RhYmxlUHJvcGVydGllc1dpdGhvdXRDb25mbGljdFtzRmlsdGVyXSk7XG5cdFx0XHR9XG5cdFx0XHQvLyBpZiBwcm9wZXJ0eSB3YXMgd2l0aG91dCBjb25mbGljdCBpbiBwYWdlIGNvbnRleHQgdGhlbiBhZGQgcGF0aCBmcm9tIHBhZ2UgY29udGV4dCB0byBTVlxuXHRcdFx0aWYgKHNGaWx0ZXIgaW4gb0ZpbHRlcnNXaXRob3V0Q29uZmxpY3QpIHtcblx0XHRcdFx0YWRkRmlsdGVyc1RvU2VsZWN0aW9uVmFyaWFudChvU2VsZWN0aW9uVmFyaWFudCwgc0ZpbHRlciwgb0ZpbHRlcnNXaXRob3V0Q29uZmxpY3Rbc0ZpbHRlcl0pO1xuXHRcdFx0fVxuXHRcdH1cblx0fVxuXHRyZXR1cm4gb1NlbGVjdGlvblZhcmlhbnQ7XG59XG5mdW5jdGlvbiBpc1N0aWNreUVkaXRNb2RlKG9Db250cm9sOiBDb250cm9sKSB7XG5cdGNvbnN0IGJJc1N0aWNreU1vZGUgPSBNb2RlbEhlbHBlci5pc1N0aWNreVNlc3Npb25TdXBwb3J0ZWQoKG9Db250cm9sLmdldE1vZGVsKCkgYXMgT0RhdGFNb2RlbCkuZ2V0TWV0YU1vZGVsKCkpO1xuXHRjb25zdCBiVUlFZGl0YWJsZSA9IG9Db250cm9sLmdldE1vZGVsKFwidWlcIikuZ2V0UHJvcGVydHkoXCIvaXNFZGl0YWJsZVwiKTtcblx0cmV0dXJuIGJJc1N0aWNreU1vZGUgJiYgYlVJRWRpdGFibGU7XG59XG4vKipcbiAqIEBwYXJhbSBhTWFuZGF0b3J5RmlsdGVyRmllbGRzXG4gKiBAcGFyYW0gb1NlbGVjdGlvblZhcmlhbnRcbiAqIEBwYXJhbSBvU2VsZWN0aW9uVmFyaWFudERlZmF1bHRzXG4gKi9cbmZ1bmN0aW9uIGFkZERlZmF1bHREaXNwbGF5Q3VycmVuY3koYU1hbmRhdG9yeUZpbHRlckZpZWxkczogYW55W10sIG9TZWxlY3Rpb25WYXJpYW50OiBhbnksIG9TZWxlY3Rpb25WYXJpYW50RGVmYXVsdHM6IGFueSkge1xuXHRpZiAob1NlbGVjdGlvblZhcmlhbnQgJiYgYU1hbmRhdG9yeUZpbHRlckZpZWxkcyAmJiBhTWFuZGF0b3J5RmlsdGVyRmllbGRzLmxlbmd0aCkge1xuXHRcdGZvciAobGV0IGkgPSAwOyBpIDwgYU1hbmRhdG9yeUZpbHRlckZpZWxkcy5sZW5ndGg7IGkrKykge1xuXHRcdFx0Y29uc3QgYVNWT3B0aW9uID0gb1NlbGVjdGlvblZhcmlhbnQuZ2V0U2VsZWN0T3B0aW9uKFwiRGlzcGxheUN1cnJlbmN5XCIpLFxuXHRcdFx0XHRhRGVmYXVsdFNWT3B0aW9uID0gb1NlbGVjdGlvblZhcmlhbnREZWZhdWx0cyAmJiBvU2VsZWN0aW9uVmFyaWFudERlZmF1bHRzLmdldFNlbGVjdE9wdGlvbihcIkRpc3BsYXlDdXJyZW5jeVwiKTtcblx0XHRcdGlmIChcblx0XHRcdFx0YU1hbmRhdG9yeUZpbHRlckZpZWxkc1tpXS4kUHJvcGVydHlQYXRoID09PSBcIkRpc3BsYXlDdXJyZW5jeVwiICYmXG5cdFx0XHRcdCghYVNWT3B0aW9uIHx8ICFhU1ZPcHRpb24ubGVuZ3RoKSAmJlxuXHRcdFx0XHRhRGVmYXVsdFNWT3B0aW9uICYmXG5cdFx0XHRcdGFEZWZhdWx0U1ZPcHRpb24ubGVuZ3RoXG5cdFx0XHQpIHtcblx0XHRcdFx0Y29uc3QgZGlzcGxheUN1cnJlbmN5U2VsZWN0T3B0aW9uID0gYURlZmF1bHRTVk9wdGlvblswXTtcblx0XHRcdFx0Y29uc3Qgc1NpZ24gPSBkaXNwbGF5Q3VycmVuY3lTZWxlY3RPcHRpb25bXCJTaWduXCJdO1xuXHRcdFx0XHRjb25zdCBzT3B0aW9uID0gZGlzcGxheUN1cnJlbmN5U2VsZWN0T3B0aW9uW1wiT3B0aW9uXCJdO1xuXHRcdFx0XHRjb25zdCBzTG93ID0gZGlzcGxheUN1cnJlbmN5U2VsZWN0T3B0aW9uW1wiTG93XCJdO1xuXHRcdFx0XHRjb25zdCBzSGlnaCA9IGRpc3BsYXlDdXJyZW5jeVNlbGVjdE9wdGlvbltcIkhpZ2hcIl07XG5cdFx0XHRcdG9TZWxlY3Rpb25WYXJpYW50LmFkZFNlbGVjdE9wdGlvbihcIkRpc3BsYXlDdXJyZW5jeVwiLCBzU2lnbiwgc09wdGlvbiwgc0xvdywgc0hpZ2gpO1xuXHRcdFx0fVxuXHRcdH1cblx0fVxufVxuZnVuY3Rpb24gZ2V0Tm9uQ29tcHV0ZWRWaXNpYmxlRmllbGRzKG9NZXRhTW9kZWw6IE9EYXRhTWV0YU1vZGVsLCBzUGF0aDogYW55LCBvVmlldz86IGFueSkge1xuXHRjb25zdCBhVGVjaG5pY2FsS2V5cyA9IG9NZXRhTW9kZWwuZ2V0T2JqZWN0KHNQYXRoICsgXCIvXCIpLiRLZXk7XG5cdGNvbnN0IGFOb25Db21wdXRlZFZpc2libGVGaWVsZHMgPSBbXTtcblx0Y29uc3Qgb0VudGl0eVR5cGUgPSBvTWV0YU1vZGVsLmdldE9iamVjdChzUGF0aCArIFwiL1wiKTtcblx0Zm9yIChjb25zdCBpdGVtIGluIG9FbnRpdHlUeXBlKSB7XG5cdFx0aWYgKG9FbnRpdHlUeXBlW2l0ZW1dLiRraW5kICYmIG9FbnRpdHlUeXBlW2l0ZW1dLiRraW5kID09PSBcIlByb3BlcnR5XCIpIHtcblx0XHRcdGNvbnN0IG9Bbm5vdGF0aW9ucyA9IG9NZXRhTW9kZWwuZ2V0T2JqZWN0KHNQYXRoICsgXCIvXCIgKyBpdGVtICsgXCJAXCIpIHx8IHt9LFxuXHRcdFx0XHRiSXNLZXkgPSBhVGVjaG5pY2FsS2V5cy5pbmRleE9mKGl0ZW0pID4gLTEsXG5cdFx0XHRcdGJJc0ltbXV0YWJsZSA9IG9Bbm5vdGF0aW9uc1tcIkBPcmcuT0RhdGEuQ29yZS5WMS5JbW11dGFibGVcIl0sXG5cdFx0XHRcdGJJc05vbkNvbXB1dGVkID0gIW9Bbm5vdGF0aW9uc1tcIkBPcmcuT0RhdGEuQ29yZS5WMS5Db21wdXRlZFwiXSxcblx0XHRcdFx0YklzVmlzaWJsZSA9ICFvQW5ub3RhdGlvbnNbXCJAY29tLnNhcC52b2NhYnVsYXJpZXMuVUkudjEuSGlkZGVuXCJdLFxuXHRcdFx0XHRiSXNDb21wdXRlZERlZmF1bHRWYWx1ZSA9IG9Bbm5vdGF0aW9uc1tcIkBPcmcuT0RhdGEuQ29yZS5WMS5Db21wdXRlZERlZmF1bHRWYWx1ZVwiXSxcblx0XHRcdFx0YklzS2V5Q29tcHV0ZWREZWZhdWx0VmFsdWVXaXRoVGV4dCA9XG5cdFx0XHRcdFx0YklzS2V5ICYmIG9FbnRpdHlUeXBlW2l0ZW1dLiRUeXBlID09PSBcIkVkbS5HdWlkXCJcblx0XHRcdFx0XHRcdD8gYklzQ29tcHV0ZWREZWZhdWx0VmFsdWUgJiYgb0Fubm90YXRpb25zW1wiQGNvbS5zYXAudm9jYWJ1bGFyaWVzLkNvbW1vbi52MS5UZXh0XCJdXG5cdFx0XHRcdFx0XHQ6IGZhbHNlO1xuXHRcdFx0aWYgKFxuXHRcdFx0XHQoYklzSW1tdXRhYmxlIHx8IGJJc0tleUNvbXB1dGVkRGVmYXVsdFZhbHVlV2l0aFRleHQgfHwgKGJJc0tleSAmJiBvRW50aXR5VHlwZVtpdGVtXS4kVHlwZSAhPT0gXCJFZG0uR3VpZFwiKSkgJiZcblx0XHRcdFx0YklzTm9uQ29tcHV0ZWQgJiZcblx0XHRcdFx0YklzVmlzaWJsZVxuXHRcdFx0KSB7XG5cdFx0XHRcdGFOb25Db21wdXRlZFZpc2libGVGaWVsZHMucHVzaChpdGVtKTtcblx0XHRcdH1cblxuXHRcdFx0aWYgKCFiSXNOb25Db21wdXRlZCAmJiBiSXNDb21wdXRlZERlZmF1bHRWYWx1ZSAmJiBvVmlldykge1xuXHRcdFx0XHRjb25zdCBvRGlhZ25vc3RpY3MgPSBnZXRBcHBDb21wb25lbnQob1ZpZXcpLmdldERpYWdub3N0aWNzKCk7XG5cdFx0XHRcdGNvbnN0IHNNZXNzYWdlID0gXCJDb3JlLkNvbXB1dGVkRGVmYXVsdFZhbHVlIGlzIGlnbm9yZWQgYXMgQ29yZS5Db21wdXRlZCBpcyBhbHJlYWR5IHNldCB0byB0cnVlXCI7XG5cdFx0XHRcdG9EaWFnbm9zdGljcy5hZGRJc3N1ZShcblx0XHRcdFx0XHRJc3N1ZUNhdGVnb3J5LkFubm90YXRpb24sXG5cdFx0XHRcdFx0SXNzdWVTZXZlcml0eS5NZWRpdW0sXG5cdFx0XHRcdFx0c01lc3NhZ2UsXG5cdFx0XHRcdFx0SXNzdWVDYXRlZ29yeVR5cGUsXG5cdFx0XHRcdFx0SXNzdWVDYXRlZ29yeVR5cGU/LkFubm90YXRpb25zPy5JZ25vcmVkQW5ub3RhdGlvblxuXHRcdFx0XHQpO1xuXHRcdFx0fVxuXHRcdH1cblx0fVxuXHRyZXR1cm4gYU5vbkNvbXB1dGVkVmlzaWJsZUZpZWxkcztcbn1cbmZ1bmN0aW9uIHNldFVzZXJEZWZhdWx0cyhcblx0b0FwcENvbXBvbmVudDogQXBwQ29tcG9uZW50LFxuXHRhUGFyYW1ldGVyczogYW55W10sXG5cdG9Nb2RlbDogSlNPTk1vZGVsLFxuXHRiSXNBY3Rpb246IGJvb2xlYW4sXG5cdGJJc0NyZWF0ZT86IGJvb2xlYW4sXG5cdG9BY3Rpb25EZWZhdWx0VmFsdWVzPzogYW55XG4pIHtcblx0cmV0dXJuIG5ldyBQcm9taXNlKGZ1bmN0aW9uIChyZXNvbHZlOiAodmFsdWU6IGFueSkgPT4gdm9pZCkge1xuXHRcdGNvbnN0IG9Db21wb25lbnREYXRhID0gb0FwcENvbXBvbmVudC5nZXRDb21wb25lbnREYXRhKCksXG5cdFx0XHRvU3RhcnR1cFBhcmFtZXRlcnMgPSAob0NvbXBvbmVudERhdGEgJiYgb0NvbXBvbmVudERhdGEuc3RhcnR1cFBhcmFtZXRlcnMpIHx8IHt9LFxuXHRcdFx0b1NoZWxsU2VydmljZXMgPSBvQXBwQ29tcG9uZW50LmdldFNoZWxsU2VydmljZXMoKTtcblx0XHRpZiAoIW9TaGVsbFNlcnZpY2VzLmhhc1VTaGVsbCgpKSB7XG5cdFx0XHRhUGFyYW1ldGVycy5mb3JFYWNoKGZ1bmN0aW9uIChvUGFyYW1ldGVyOiBhbnkpIHtcblx0XHRcdFx0Y29uc3Qgc1Byb3BlcnR5TmFtZSA9IGJJc0FjdGlvblxuXHRcdFx0XHRcdD8gXCIvXCIgKyBvUGFyYW1ldGVyLiROYW1lXG5cdFx0XHRcdFx0OiBvUGFyYW1ldGVyLmdldFBhdGgoKS5zbGljZShvUGFyYW1ldGVyLmdldFBhdGgoKS5sYXN0SW5kZXhPZihcIi9cIikgKyAxKTtcblx0XHRcdFx0Y29uc3Qgc1BhcmFtZXRlck5hbWUgPSBiSXNBY3Rpb24gPyBzUHJvcGVydHlOYW1lLnNsaWNlKDEpIDogc1Byb3BlcnR5TmFtZTtcblx0XHRcdFx0aWYgKG9BY3Rpb25EZWZhdWx0VmFsdWVzICYmIGJJc0NyZWF0ZSkge1xuXHRcdFx0XHRcdGlmIChvQWN0aW9uRGVmYXVsdFZhbHVlc1tzUGFyYW1ldGVyTmFtZV0pIHtcblx0XHRcdFx0XHRcdG9Nb2RlbC5zZXRQcm9wZXJ0eShzUHJvcGVydHlOYW1lLCBvQWN0aW9uRGVmYXVsdFZhbHVlc1tzUGFyYW1ldGVyTmFtZV0pO1xuXHRcdFx0XHRcdH1cblx0XHRcdFx0fSBlbHNlIGlmIChvU3RhcnR1cFBhcmFtZXRlcnNbc1BhcmFtZXRlck5hbWVdKSB7XG5cdFx0XHRcdFx0b01vZGVsLnNldFByb3BlcnR5KHNQcm9wZXJ0eU5hbWUsIG9TdGFydHVwUGFyYW1ldGVyc1tzUGFyYW1ldGVyTmFtZV1bMF0pO1xuXHRcdFx0XHR9XG5cdFx0XHR9KTtcblx0XHRcdHJldHVybiByZXNvbHZlKHRydWUpO1xuXHRcdH1cblx0XHRyZXR1cm4gb1NoZWxsU2VydmljZXMuZ2V0U3RhcnR1cEFwcFN0YXRlKG9BcHBDb21wb25lbnQpLnRoZW4oZnVuY3Rpb24gKG9TdGFydHVwQXBwU3RhdGU6IGFueSkge1xuXHRcdFx0Y29uc3Qgb0RhdGEgPSBvU3RhcnR1cEFwcFN0YXRlLmdldERhdGEoKSB8fCB7fSxcblx0XHRcdFx0YUV4dGVuZGVkUGFyYW1ldGVycyA9IChvRGF0YS5zZWxlY3Rpb25WYXJpYW50ICYmIG9EYXRhLnNlbGVjdGlvblZhcmlhbnQuU2VsZWN0T3B0aW9ucykgfHwgW107XG5cdFx0XHRhUGFyYW1ldGVycy5mb3JFYWNoKGZ1bmN0aW9uIChvUGFyYW1ldGVyOiBhbnkpIHtcblx0XHRcdFx0Y29uc3Qgc1Byb3BlcnR5TmFtZSA9IGJJc0FjdGlvblxuXHRcdFx0XHRcdD8gXCIvXCIgKyBvUGFyYW1ldGVyLiROYW1lXG5cdFx0XHRcdFx0OiBvUGFyYW1ldGVyLmdldFBhdGgoKS5zbGljZShvUGFyYW1ldGVyLmdldFBhdGgoKS5sYXN0SW5kZXhPZihcIi9cIikgKyAxKTtcblx0XHRcdFx0Y29uc3Qgc1BhcmFtZXRlck5hbWUgPSBiSXNBY3Rpb24gPyBzUHJvcGVydHlOYW1lLnNsaWNlKDEpIDogc1Byb3BlcnR5TmFtZTtcblx0XHRcdFx0aWYgKG9BY3Rpb25EZWZhdWx0VmFsdWVzICYmIGJJc0NyZWF0ZSkge1xuXHRcdFx0XHRcdGlmIChvQWN0aW9uRGVmYXVsdFZhbHVlc1tzUGFyYW1ldGVyTmFtZV0pIHtcblx0XHRcdFx0XHRcdG9Nb2RlbC5zZXRQcm9wZXJ0eShzUHJvcGVydHlOYW1lLCBvQWN0aW9uRGVmYXVsdFZhbHVlc1tzUGFyYW1ldGVyTmFtZV0pO1xuXHRcdFx0XHRcdH1cblx0XHRcdFx0fSBlbHNlIGlmIChvU3RhcnR1cFBhcmFtZXRlcnNbc1BhcmFtZXRlck5hbWVdKSB7XG5cdFx0XHRcdFx0b01vZGVsLnNldFByb3BlcnR5KHNQcm9wZXJ0eU5hbWUsIG9TdGFydHVwUGFyYW1ldGVyc1tzUGFyYW1ldGVyTmFtZV1bMF0pO1xuXHRcdFx0XHR9IGVsc2UgaWYgKGFFeHRlbmRlZFBhcmFtZXRlcnMubGVuZ3RoID4gMCkge1xuXHRcdFx0XHRcdGZvciAoY29uc3QgaSBpbiBhRXh0ZW5kZWRQYXJhbWV0ZXJzKSB7XG5cdFx0XHRcdFx0XHRjb25zdCBvRXh0ZW5kZWRQYXJhbWV0ZXIgPSBhRXh0ZW5kZWRQYXJhbWV0ZXJzW2ldO1xuXHRcdFx0XHRcdFx0aWYgKG9FeHRlbmRlZFBhcmFtZXRlci5Qcm9wZXJ0eU5hbWUgPT09IHNQYXJhbWV0ZXJOYW1lKSB7XG5cdFx0XHRcdFx0XHRcdGNvbnN0IG9SYW5nZSA9IG9FeHRlbmRlZFBhcmFtZXRlci5SYW5nZXMubGVuZ3RoID8gb0V4dGVuZGVkUGFyYW1ldGVyLlJhbmdlc1swXSA6IHVuZGVmaW5lZDtcblx0XHRcdFx0XHRcdFx0aWYgKG9SYW5nZSAmJiBvUmFuZ2UuU2lnbiA9PT0gXCJJXCIgJiYgb1JhbmdlLk9wdGlvbiA9PT0gXCJFUVwiKSB7XG5cdFx0XHRcdFx0XHRcdFx0b01vZGVsLnNldFByb3BlcnR5KHNQcm9wZXJ0eU5hbWUsIG9SYW5nZS5Mb3cpOyAvLyBoaWdoIGlzIGlnbm9yZWQgd2hlbiBPcHRpb249RVFcblx0XHRcdFx0XHRcdFx0fVxuXHRcdFx0XHRcdFx0fVxuXHRcdFx0XHRcdH1cblx0XHRcdFx0fVxuXHRcdFx0fSk7XG5cdFx0XHRyZXR1cm4gcmVzb2x2ZSh0cnVlKTtcblx0XHR9KTtcblx0fSk7XG59XG5mdW5jdGlvbiBnZXRBZGRpdGlvbmFsUGFyYW1zRm9yQ3JlYXRlKG9TdGFydHVwUGFyYW1ldGVyczogYW55LCBvSW5ib3VuZFBhcmFtZXRlcnM6IGFueSkge1xuXHRjb25zdCBvSW5ib3VuZHMgPSBvSW5ib3VuZFBhcmFtZXRlcnMsXG5cdFx0YUNyZWF0ZVBhcmFtZXRlcnMgPSBvSW5ib3VuZHNcblx0XHRcdD8gT2JqZWN0LmtleXMob0luYm91bmRzKS5maWx0ZXIoZnVuY3Rpb24gKHNQYXJhbWV0ZXI6IHN0cmluZykge1xuXHRcdFx0XHRcdHJldHVybiBvSW5ib3VuZHNbc1BhcmFtZXRlcl0udXNlRm9yQ3JlYXRlO1xuXHRcdFx0ICB9KVxuXHRcdFx0OiBbXTtcblx0bGV0IG9SZXQ7XG5cdGZvciAobGV0IGkgPSAwOyBpIDwgYUNyZWF0ZVBhcmFtZXRlcnMubGVuZ3RoOyBpKyspIHtcblx0XHRjb25zdCBzQ3JlYXRlUGFyYW1ldGVyID0gYUNyZWF0ZVBhcmFtZXRlcnNbaV07XG5cdFx0Y29uc3QgYVZhbHVlcyA9IG9TdGFydHVwUGFyYW1ldGVycyAmJiBvU3RhcnR1cFBhcmFtZXRlcnNbc0NyZWF0ZVBhcmFtZXRlcl07XG5cdFx0aWYgKGFWYWx1ZXMgJiYgYVZhbHVlcy5sZW5ndGggPT09IDEpIHtcblx0XHRcdG9SZXQgPSBvUmV0IHx8IE9iamVjdC5jcmVhdGUobnVsbCk7XG5cdFx0XHRvUmV0W3NDcmVhdGVQYXJhbWV0ZXJdID0gYVZhbHVlc1swXTtcblx0XHR9XG5cdH1cblx0cmV0dXJuIG9SZXQ7XG59XG5mdW5jdGlvbiBnZXRTZW1hbnRpY09iamVjdE1hcHBpbmcob091dGJvdW5kOiBhbnkpIHtcblx0Y29uc3QgYVNlbWFudGljT2JqZWN0TWFwcGluZzogYW55W10gPSBbXTtcblx0aWYgKG9PdXRib3VuZC5wYXJhbWV0ZXJzKSB7XG5cdFx0Y29uc3QgYVBhcmFtZXRlcnMgPSBPYmplY3Qua2V5cyhvT3V0Ym91bmQucGFyYW1ldGVycykgfHwgW107XG5cdFx0aWYgKGFQYXJhbWV0ZXJzLmxlbmd0aCA+IDApIHtcblx0XHRcdGFQYXJhbWV0ZXJzLmZvckVhY2goZnVuY3Rpb24gKHNQYXJhbTogc3RyaW5nKSB7XG5cdFx0XHRcdGNvbnN0IG9NYXBwaW5nID0gb091dGJvdW5kLnBhcmFtZXRlcnNbc1BhcmFtXTtcblx0XHRcdFx0aWYgKG9NYXBwaW5nLnZhbHVlICYmIG9NYXBwaW5nLnZhbHVlLnZhbHVlICYmIG9NYXBwaW5nLnZhbHVlLmZvcm1hdCA9PT0gXCJiaW5kaW5nXCIpIHtcblx0XHRcdFx0XHQvLyB1c2luZyB0aGUgZm9ybWF0IG9mIFVJLk1hcHBpbmdcblx0XHRcdFx0XHRjb25zdCBvU2VtYW50aWNNYXBwaW5nID0ge1xuXHRcdFx0XHRcdFx0XCJMb2NhbFByb3BlcnR5XCI6IHtcblx0XHRcdFx0XHRcdFx0XCIkUHJvcGVydHlQYXRoXCI6IG9NYXBwaW5nLnZhbHVlLnZhbHVlXG5cdFx0XHRcdFx0XHR9LFxuXHRcdFx0XHRcdFx0XCJTZW1hbnRpY09iamVjdFByb3BlcnR5XCI6IHNQYXJhbVxuXHRcdFx0XHRcdH07XG5cblx0XHRcdFx0XHRpZiAoYVNlbWFudGljT2JqZWN0TWFwcGluZy5sZW5ndGggPiAwKSB7XG5cdFx0XHRcdFx0XHQvLyBUbyBjaGVjayBpZiB0aGUgc2VtYW50aWNPYmplY3QgTWFwcGluZyBpcyBkb25lIGZvciB0aGUgc2FtZSBsb2NhbCBwcm9wZXJ0eSBtb3JlIHRoYXQgb25jZSB0aGVuIGZpcnN0IG9uZSB3aWxsIGJlIGNvbnNpZGVyZWRcblx0XHRcdFx0XHRcdGZvciAobGV0IGkgPSAwOyBpIDwgYVNlbWFudGljT2JqZWN0TWFwcGluZy5sZW5ndGg7IGkrKykge1xuXHRcdFx0XHRcdFx0XHRpZiAoXG5cdFx0XHRcdFx0XHRcdFx0YVNlbWFudGljT2JqZWN0TWFwcGluZ1tpXVtcIkxvY2FsUHJvcGVydHlcIl1bXCIkUHJvcGVydHlQYXRoXCJdICE9PVxuXHRcdFx0XHRcdFx0XHRcdG9TZW1hbnRpY01hcHBpbmdbXCJMb2NhbFByb3BlcnR5XCJdW1wiJFByb3BlcnR5UGF0aFwiXVxuXHRcdFx0XHRcdFx0XHQpIHtcblx0XHRcdFx0XHRcdFx0XHRhU2VtYW50aWNPYmplY3RNYXBwaW5nLnB1c2gob1NlbWFudGljTWFwcGluZyk7XG5cdFx0XHRcdFx0XHRcdH1cblx0XHRcdFx0XHRcdH1cblx0XHRcdFx0XHR9IGVsc2Uge1xuXHRcdFx0XHRcdFx0YVNlbWFudGljT2JqZWN0TWFwcGluZy5wdXNoKG9TZW1hbnRpY01hcHBpbmcpO1xuXHRcdFx0XHRcdH1cblx0XHRcdFx0fVxuXHRcdFx0fSk7XG5cdFx0fVxuXHR9XG5cdHJldHVybiBhU2VtYW50aWNPYmplY3RNYXBwaW5nO1xufVxuZnVuY3Rpb24gZ2V0SGVhZGVyRmFjZXRJdGVtQ29uZmlnRm9yRXh0ZXJuYWxOYXZpZ2F0aW9uKG9WaWV3RGF0YTogYW55LCBvQ3Jvc3NOYXY6IGFueSkge1xuXHRjb25zdCBvSGVhZGVyRmFjZXRJdGVtczogYW55ID0ge307XG5cdGxldCBzSWQ7XG5cdGNvbnN0IG9Db250cm9sQ29uZmlnID0gb1ZpZXdEYXRhLmNvbnRyb2xDb25maWd1cmF0aW9uO1xuXHRmb3IgKGNvbnN0IGNvbmZpZyBpbiBvQ29udHJvbENvbmZpZykge1xuXHRcdGlmIChjb25maWcuaW5kZXhPZihcIkBjb20uc2FwLnZvY2FidWxhcmllcy5VSS52MS5EYXRhUG9pbnRcIikgPiAtMSB8fCBjb25maWcuaW5kZXhPZihcIkBjb20uc2FwLnZvY2FidWxhcmllcy5VSS52MS5DaGFydFwiKSA+IC0xKSB7XG5cdFx0XHRpZiAoXG5cdFx0XHRcdG9Db250cm9sQ29uZmlnW2NvbmZpZ10ubmF2aWdhdGlvbiAmJlxuXHRcdFx0XHRvQ29udHJvbENvbmZpZ1tjb25maWddLm5hdmlnYXRpb24udGFyZ2V0T3V0Ym91bmQgJiZcblx0XHRcdFx0b0NvbnRyb2xDb25maWdbY29uZmlnXS5uYXZpZ2F0aW9uLnRhcmdldE91dGJvdW5kLm91dGJvdW5kXG5cdFx0XHQpIHtcblx0XHRcdFx0Y29uc3Qgc091dGJvdW5kID0gb0NvbnRyb2xDb25maWdbY29uZmlnXS5uYXZpZ2F0aW9uLnRhcmdldE91dGJvdW5kLm91dGJvdW5kO1xuXHRcdFx0XHRjb25zdCBvT3V0Ym91bmQgPSBvQ3Jvc3NOYXZbc091dGJvdW5kXTtcblx0XHRcdFx0aWYgKG9PdXRib3VuZC5zZW1hbnRpY09iamVjdCAmJiBvT3V0Ym91bmQuYWN0aW9uKSB7XG5cdFx0XHRcdFx0aWYgKGNvbmZpZy5pbmRleE9mKFwiQ2hhcnRcIikgPiAtMSkge1xuXHRcdFx0XHRcdFx0c0lkID0gZ2VuZXJhdGUoW1wiZmVcIiwgXCJNaWNyb0NoYXJ0TGlua1wiLCBjb25maWddKTtcblx0XHRcdFx0XHR9IGVsc2Uge1xuXHRcdFx0XHRcdFx0c0lkID0gZ2VuZXJhdGUoW1wiZmVcIiwgXCJIZWFkZXJEUExpbmtcIiwgY29uZmlnXSk7XG5cdFx0XHRcdFx0fVxuXHRcdFx0XHRcdGNvbnN0IGFTZW1hbnRpY09iamVjdE1hcHBpbmcgPSBDb21tb25VdGlscy5nZXRTZW1hbnRpY09iamVjdE1hcHBpbmcob091dGJvdW5kKTtcblx0XHRcdFx0XHRvSGVhZGVyRmFjZXRJdGVtc1tzSWRdID0ge1xuXHRcdFx0XHRcdFx0c2VtYW50aWNPYmplY3Q6IG9PdXRib3VuZC5zZW1hbnRpY09iamVjdCxcblx0XHRcdFx0XHRcdGFjdGlvbjogb091dGJvdW5kLmFjdGlvbixcblx0XHRcdFx0XHRcdHNlbWFudGljT2JqZWN0TWFwcGluZzogYVNlbWFudGljT2JqZWN0TWFwcGluZ1xuXHRcdFx0XHRcdH07XG5cdFx0XHRcdH0gZWxzZSB7XG5cdFx0XHRcdFx0TG9nLmVycm9yKFwiQ3Jvc3MgbmF2aWdhdGlvbiBvdXRib3VuZCBpcyBjb25maWd1cmVkIHdpdGhvdXQgc2VtYW50aWMgb2JqZWN0IGFuZCBhY3Rpb24gZm9yIFwiICsgc091dGJvdW5kKTtcblx0XHRcdFx0fVxuXHRcdFx0fVxuXHRcdH1cblx0fVxuXHRyZXR1cm4gb0hlYWRlckZhY2V0SXRlbXM7XG59XG5mdW5jdGlvbiBzZXRTZW1hbnRpY09iamVjdE1hcHBpbmdzKG9TZWxlY3Rpb25WYXJpYW50OiBhbnksIHZNYXBwaW5nczogb2JqZWN0KSB7XG5cdGNvbnN0IG9NYXBwaW5ncyA9IHR5cGVvZiB2TWFwcGluZ3MgPT09IFwic3RyaW5nXCIgPyBKU09OLnBhcnNlKHZNYXBwaW5ncykgOiB2TWFwcGluZ3M7XG5cdGZvciAobGV0IGkgPSAwOyBpIDwgb01hcHBpbmdzLmxlbmd0aDsgaSsrKSB7XG5cdFx0Y29uc3Qgc0xvY2FsUHJvcGVydHkgPVxuXHRcdFx0KG9NYXBwaW5nc1tpXVtcIkxvY2FsUHJvcGVydHlcIl0gJiYgb01hcHBpbmdzW2ldW1wiTG9jYWxQcm9wZXJ0eVwiXVtcIiRQcm9wZXJ0eVBhdGhcIl0pIHx8XG5cdFx0XHQob01hcHBpbmdzW2ldW1wiQGNvbS5zYXAudm9jYWJ1bGFyaWVzLkNvbW1vbi52MS5Mb2NhbFByb3BlcnR5XCJdICYmXG5cdFx0XHRcdG9NYXBwaW5nc1tpXVtcIkBjb20uc2FwLnZvY2FidWxhcmllcy5Db21tb24udjEuTG9jYWxQcm9wZXJ0eVwiXVtcIiRQYXRoXCJdKTtcblx0XHRjb25zdCBzU2VtYW50aWNPYmplY3RQcm9wZXJ0eSA9XG5cdFx0XHRvTWFwcGluZ3NbaV1bXCJTZW1hbnRpY09iamVjdFByb3BlcnR5XCJdIHx8IG9NYXBwaW5nc1tpXVtcIkBjb20uc2FwLnZvY2FidWxhcmllcy5Db21tb24udjEuU2VtYW50aWNPYmplY3RQcm9wZXJ0eVwiXTtcblx0XHRpZiAob1NlbGVjdGlvblZhcmlhbnQuZ2V0U2VsZWN0T3B0aW9uKHNMb2NhbFByb3BlcnR5KSkge1xuXHRcdFx0Y29uc3Qgb1NlbGVjdE9wdGlvbiA9IG9TZWxlY3Rpb25WYXJpYW50LmdldFNlbGVjdE9wdGlvbihzTG9jYWxQcm9wZXJ0eSk7XG5cblx0XHRcdC8vQ3JlYXRlIGEgbmV3IFNlbGVjdE9wdGlvbiB3aXRoIHNTZW1hbnRpY09iamVjdFByb3BlcnR5IGFzIHRoZSBwcm9wZXJ0eSBOYW1lIGFuZCByZW1vdmUgdGhlIG9sZGVyIG9uZVxuXHRcdFx0b1NlbGVjdGlvblZhcmlhbnQucmVtb3ZlU2VsZWN0T3B0aW9uKHNMb2NhbFByb3BlcnR5KTtcblx0XHRcdG9TZWxlY3Rpb25WYXJpYW50Lm1hc3NBZGRTZWxlY3RPcHRpb24oc1NlbWFudGljT2JqZWN0UHJvcGVydHksIG9TZWxlY3RPcHRpb24pO1xuXHRcdH1cblx0fVxuXHRyZXR1cm4gb1NlbGVjdGlvblZhcmlhbnQ7XG59XG5mdW5jdGlvbiBmbkdldFNlbWFudGljT2JqZWN0c0Zyb21QYXRoKG9NZXRhTW9kZWw6IGFueSwgc1BhdGg6IGFueSkge1xuXHRyZXR1cm4gbmV3IFByb21pc2UoZnVuY3Rpb24gKHJlc29sdmU6ICh2YWx1ZTogYW55KSA9PiB2b2lkKSB7XG5cdFx0Y29uc3Qgc1NlbWFudGljT2JqZWN0ID0gb01ldGFNb2RlbC5nZXRPYmplY3Qoc1BhdGggKyBcIkBjb20uc2FwLnZvY2FidWxhcmllcy5Db21tb24udjEuU2VtYW50aWNPYmplY3RcIik7XG5cdFx0Y29uc3QgYVNlbWFudGljT2JqZWN0VW5hdmFpbGFibGVBY3Rpb25zID0gb01ldGFNb2RlbC5nZXRPYmplY3QoXG5cdFx0XHRzUGF0aCArIFwiQGNvbS5zYXAudm9jYWJ1bGFyaWVzLkNvbW1vbi52MS5TZW1hbnRpY09iamVjdFVuYXZhaWxhYmxlQWN0aW9uc1wiXG5cdFx0KTtcblx0XHRjb25zdCBhU2VtYW50aWNPYmplY3RGb3JHZXRMaW5rcyA9IFt7IHNlbWFudGljT2JqZWN0OiBzU2VtYW50aWNPYmplY3QgfV07XG5cdFx0Y29uc3Qgb1NlbWFudGljT2JqZWN0ID0ge1xuXHRcdFx0c2VtYW50aWNPYmplY3Q6IHNTZW1hbnRpY09iamVjdFxuXHRcdH07XG5cdFx0cmVzb2x2ZSh7XG5cdFx0XHRzZW1hbnRpY09iamVjdFBhdGg6IHNQYXRoLFxuXHRcdFx0c2VtYW50aWNPYmplY3RGb3JHZXRMaW5rczogYVNlbWFudGljT2JqZWN0Rm9yR2V0TGlua3MsXG5cdFx0XHRzZW1hbnRpY09iamVjdDogb1NlbWFudGljT2JqZWN0LFxuXHRcdFx0dW5hdmFpbGFibGVBY3Rpb25zOiBhU2VtYW50aWNPYmplY3RVbmF2YWlsYWJsZUFjdGlvbnNcblx0XHR9KTtcblx0fSkuY2F0Y2goZnVuY3Rpb24gKG9FcnJvcjogYW55KSB7XG5cdFx0TG9nLmVycm9yKFwiRXJyb3IgaW4gZm5HZXRTZW1hbnRpY09iamVjdHNGcm9tUGF0aFwiLCBvRXJyb3IpO1xuXHR9KTtcbn1cbmZ1bmN0aW9uIGZuVXBkYXRlU2VtYW50aWNUYXJnZXRzTW9kZWwoYUdldExpbmtzUHJvbWlzZXM6IGFueSwgYVNlbWFudGljT2JqZWN0czogYW55LCBvSW50ZXJuYWxNb2RlbENvbnRleHQ6IGFueSwgc0N1cnJlbnRIYXNoOiBhbnkpIHtcblx0cmV0dXJuIFByb21pc2UuYWxsKGFHZXRMaW5rc1Byb21pc2VzKVxuXHRcdC50aGVuKGZ1bmN0aW9uIChhVmFsdWVzOiBhbnlbXSkge1xuXHRcdFx0bGV0IGFMaW5rcyxcblx0XHRcdFx0X29MaW5rLFxuXHRcdFx0XHRfc0xpbmtJbnRlbnRBY3Rpb24sXG5cdFx0XHRcdGFGaW5hbExpbmtzOiBhbnlbXSA9IFtdO1xuXHRcdFx0bGV0IG9GaW5hbFNlbWFudGljT2JqZWN0czogYW55ID0ge307XG5cdFx0XHRjb25zdCBiSW50ZW50SGFzQWN0aW9ucyA9IGZ1bmN0aW9uIChzSW50ZW50OiBhbnksIGFBY3Rpb25zOiBhbnkpIHtcblx0XHRcdFx0Zm9yIChjb25zdCBpbnRlbnQgaW4gYUFjdGlvbnMpIHtcblx0XHRcdFx0XHRpZiAoaW50ZW50ID09PSBzSW50ZW50KSB7XG5cdFx0XHRcdFx0XHRyZXR1cm4gdHJ1ZTtcblx0XHRcdFx0XHR9IGVsc2Uge1xuXHRcdFx0XHRcdFx0cmV0dXJuIGZhbHNlO1xuXHRcdFx0XHRcdH1cblx0XHRcdFx0fVxuXHRcdFx0fTtcblxuXHRcdFx0Zm9yIChsZXQgayA9IDA7IGsgPCBhVmFsdWVzLmxlbmd0aDsgaysrKSB7XG5cdFx0XHRcdGFMaW5rcyA9IGFWYWx1ZXNba107XG5cdFx0XHRcdGlmIChhTGlua3MgJiYgYUxpbmtzLmxlbmd0aCA+IDAgJiYgYUxpbmtzWzBdICE9PSB1bmRlZmluZWQpIHtcblx0XHRcdFx0XHRjb25zdCBvU2VtYW50aWNPYmplY3Q6IGFueSA9IHt9O1xuXHRcdFx0XHRcdGxldCBvVG1wID0ge307XG5cdFx0XHRcdFx0bGV0IHNBbHRlcm5hdGVQYXRoO1xuXHRcdFx0XHRcdGZvciAobGV0IGkgPSAwOyBpIDwgYUxpbmtzLmxlbmd0aDsgaSsrKSB7XG5cdFx0XHRcdFx0XHRhRmluYWxMaW5rcy5wdXNoKFtdKTtcblx0XHRcdFx0XHRcdGxldCBoYXNUYXJnZXRzTm90RmlsdGVyZWQgPSBmYWxzZTtcblx0XHRcdFx0XHRcdGxldCBoYXNUYXJnZXRzID0gZmFsc2U7XG5cdFx0XHRcdFx0XHRmb3IgKGxldCBpTGlua0NvdW50ID0gMDsgaUxpbmtDb3VudCA8IGFMaW5rc1tpXVswXS5sZW5ndGg7IGlMaW5rQ291bnQrKykge1xuXHRcdFx0XHRcdFx0XHRfb0xpbmsgPSBhTGlua3NbaV1bMF1baUxpbmtDb3VudF07XG5cdFx0XHRcdFx0XHRcdF9zTGlua0ludGVudEFjdGlvbiA9IF9vTGluayAmJiBfb0xpbmsuaW50ZW50LnNwbGl0KFwiP1wiKVswXS5zcGxpdChcIi1cIilbMV07XG5cblx0XHRcdFx0XHRcdFx0aWYgKCEoX29MaW5rICYmIF9vTGluay5pbnRlbnQgJiYgX29MaW5rLmludGVudC5pbmRleE9mKHNDdXJyZW50SGFzaCkgPT09IDApKSB7XG5cdFx0XHRcdFx0XHRcdFx0aGFzVGFyZ2V0c05vdEZpbHRlcmVkID0gdHJ1ZTtcblx0XHRcdFx0XHRcdFx0XHRpZiAoIWJJbnRlbnRIYXNBY3Rpb25zKF9zTGlua0ludGVudEFjdGlvbiwgYVNlbWFudGljT2JqZWN0c1trXS51bmF2YWlsYWJsZUFjdGlvbnMpKSB7XG5cdFx0XHRcdFx0XHRcdFx0XHRhRmluYWxMaW5rc1tpXS5wdXNoKF9vTGluayk7XG5cdFx0XHRcdFx0XHRcdFx0XHRoYXNUYXJnZXRzID0gdHJ1ZTtcblx0XHRcdFx0XHRcdFx0XHR9XG5cdFx0XHRcdFx0XHRcdH1cblx0XHRcdFx0XHRcdH1cblx0XHRcdFx0XHRcdG9UbXAgPSB7XG5cdFx0XHRcdFx0XHRcdHNlbWFudGljT2JqZWN0OiBhU2VtYW50aWNPYmplY3RzW2tdLnNlbWFudGljT2JqZWN0LFxuXHRcdFx0XHRcdFx0XHRwYXRoOiBhU2VtYW50aWNPYmplY3RzW2tdLnBhdGgsXG5cdFx0XHRcdFx0XHRcdEhhc1RhcmdldHM6IGhhc1RhcmdldHMsXG5cdFx0XHRcdFx0XHRcdEhhc1RhcmdldHNOb3RGaWx0ZXJlZDogaGFzVGFyZ2V0c05vdEZpbHRlcmVkXG5cdFx0XHRcdFx0XHR9O1xuXHRcdFx0XHRcdFx0aWYgKG9TZW1hbnRpY09iamVjdFthU2VtYW50aWNPYmplY3RzW2tdLnNlbWFudGljT2JqZWN0XSA9PT0gdW5kZWZpbmVkKSB7XG5cdFx0XHRcdFx0XHRcdG9TZW1hbnRpY09iamVjdFthU2VtYW50aWNPYmplY3RzW2tdLnNlbWFudGljT2JqZWN0XSA9IHt9O1xuXHRcdFx0XHRcdFx0fVxuXHRcdFx0XHRcdFx0c0FsdGVybmF0ZVBhdGggPSBhU2VtYW50aWNPYmplY3RzW2tdLnBhdGgucmVwbGFjZSgvXFwvL2csIFwiX1wiKTtcblx0XHRcdFx0XHRcdGlmIChvU2VtYW50aWNPYmplY3RbYVNlbWFudGljT2JqZWN0c1trXS5zZW1hbnRpY09iamVjdF1bc0FsdGVybmF0ZVBhdGhdID09PSB1bmRlZmluZWQpIHtcblx0XHRcdFx0XHRcdFx0b1NlbWFudGljT2JqZWN0W2FTZW1hbnRpY09iamVjdHNba10uc2VtYW50aWNPYmplY3RdW3NBbHRlcm5hdGVQYXRoXSA9IHt9O1xuXHRcdFx0XHRcdFx0fVxuXHRcdFx0XHRcdFx0b1NlbWFudGljT2JqZWN0W2FTZW1hbnRpY09iamVjdHNba10uc2VtYW50aWNPYmplY3RdW3NBbHRlcm5hdGVQYXRoXSA9IE9iamVjdC5hc3NpZ24oXG5cdFx0XHRcdFx0XHRcdG9TZW1hbnRpY09iamVjdFthU2VtYW50aWNPYmplY3RzW2tdLnNlbWFudGljT2JqZWN0XVtzQWx0ZXJuYXRlUGF0aF0sXG5cdFx0XHRcdFx0XHRcdG9UbXBcblx0XHRcdFx0XHRcdCk7XG5cdFx0XHRcdFx0fVxuXHRcdFx0XHRcdGNvbnN0IHNTZW1hbnRpY09iamVjdE5hbWUgPSBPYmplY3Qua2V5cyhvU2VtYW50aWNPYmplY3QpWzBdO1xuXHRcdFx0XHRcdGlmIChPYmplY3Qua2V5cyhvRmluYWxTZW1hbnRpY09iamVjdHMpLmluY2x1ZGVzKHNTZW1hbnRpY09iamVjdE5hbWUpKSB7XG5cdFx0XHRcdFx0XHRvRmluYWxTZW1hbnRpY09iamVjdHNbc1NlbWFudGljT2JqZWN0TmFtZV0gPSBPYmplY3QuYXNzaWduKFxuXHRcdFx0XHRcdFx0XHRvRmluYWxTZW1hbnRpY09iamVjdHNbc1NlbWFudGljT2JqZWN0TmFtZV0sXG5cdFx0XHRcdFx0XHRcdG9TZW1hbnRpY09iamVjdFtzU2VtYW50aWNPYmplY3ROYW1lXVxuXHRcdFx0XHRcdFx0KTtcblx0XHRcdFx0XHR9IGVsc2Uge1xuXHRcdFx0XHRcdFx0b0ZpbmFsU2VtYW50aWNPYmplY3RzID0gT2JqZWN0LmFzc2lnbihvRmluYWxTZW1hbnRpY09iamVjdHMsIG9TZW1hbnRpY09iamVjdCk7XG5cdFx0XHRcdFx0fVxuXHRcdFx0XHRcdGFGaW5hbExpbmtzID0gW107XG5cdFx0XHRcdH1cblx0XHRcdH1cblx0XHRcdGlmIChPYmplY3Qua2V5cyhvRmluYWxTZW1hbnRpY09iamVjdHMpLmxlbmd0aCA+IDApIHtcblx0XHRcdFx0b0ludGVybmFsTW9kZWxDb250ZXh0LnNldFByb3BlcnR5KFxuXHRcdFx0XHRcdFwic2VtYW50aWNzVGFyZ2V0c1wiLFxuXHRcdFx0XHRcdG1lcmdlT2JqZWN0cyhvRmluYWxTZW1hbnRpY09iamVjdHMsIG9JbnRlcm5hbE1vZGVsQ29udGV4dC5nZXRQcm9wZXJ0eShcInNlbWFudGljc1RhcmdldHNcIikpXG5cdFx0XHRcdCk7XG5cdFx0XHRcdHJldHVybiBvRmluYWxTZW1hbnRpY09iamVjdHM7XG5cdFx0XHR9XG5cdFx0fSlcblx0XHQuY2F0Y2goZnVuY3Rpb24gKG9FcnJvcjogYW55KSB7XG5cdFx0XHRMb2cuZXJyb3IoXCJmblVwZGF0ZVNlbWFudGljVGFyZ2V0c01vZGVsOiBDYW5ub3QgcmVhZCBsaW5rc1wiLCBvRXJyb3IpO1xuXHRcdH0pO1xufVxuZnVuY3Rpb24gZm5HZXRTZW1hbnRpY09iamVjdFByb21pc2Uob0FwcENvbXBvbmVudDogYW55LCBvVmlldzogYW55LCBvTWV0YU1vZGVsOiBhbnksIHNQYXRoOiBhbnkpIHtcblx0cmV0dXJuIENvbW1vblV0aWxzLmdldFNlbWFudGljT2JqZWN0c0Zyb21QYXRoKG9NZXRhTW9kZWwsIHNQYXRoKTtcbn1cbmZ1bmN0aW9uIGZuR2V0U2VtYW50aWNUYXJnZXRzRnJvbVBhZ2VNb2RlbChvQ29udHJvbGxlcjogYW55LCBzUGFnZU1vZGVsOiBzdHJpbmcpIHtcblx0Y29uc3QgX2ZuZmluZFZhbHVlc0hlbHBlciA9IGZ1bmN0aW9uIChvYmo6IGFueSwga2V5OiBhbnksIGxpc3Q6IGFueSkge1xuXHRcdGlmICghb2JqKSB7XG5cdFx0XHRyZXR1cm4gbGlzdDtcblx0XHR9XG5cdFx0aWYgKG9iaiBpbnN0YW5jZW9mIEFycmF5KSB7XG5cdFx0XHRmb3IgKGNvbnN0IGkgaW4gb2JqKSB7XG5cdFx0XHRcdGxpc3QgPSBsaXN0LmNvbmNhdChfZm5maW5kVmFsdWVzSGVscGVyKG9ialtpXSwga2V5LCBbXSkpO1xuXHRcdFx0fVxuXHRcdFx0cmV0dXJuIGxpc3Q7XG5cdFx0fVxuXHRcdGlmIChvYmpba2V5XSkge1xuXHRcdFx0bGlzdC5wdXNoKG9ialtrZXldKTtcblx0XHR9XG5cblx0XHRpZiAodHlwZW9mIG9iaiA9PSBcIm9iamVjdFwiICYmIG9iaiAhPT0gbnVsbCkge1xuXHRcdFx0Y29uc3QgY2hpbGRyZW4gPSBPYmplY3Qua2V5cyhvYmopO1xuXHRcdFx0aWYgKGNoaWxkcmVuLmxlbmd0aCA+IDApIHtcblx0XHRcdFx0Zm9yIChsZXQgaSA9IDA7IGkgPCBjaGlsZHJlbi5sZW5ndGg7IGkrKykge1xuXHRcdFx0XHRcdGxpc3QgPSBsaXN0LmNvbmNhdChfZm5maW5kVmFsdWVzSGVscGVyKG9ialtjaGlsZHJlbltpXV0sIGtleSwgW10pKTtcblx0XHRcdFx0fVxuXHRcdFx0fVxuXHRcdH1cblx0XHRyZXR1cm4gbGlzdDtcblx0fTtcblx0Y29uc3QgX2ZuZmluZFZhbHVlcyA9IGZ1bmN0aW9uIChvYmo6IGFueSwga2V5OiBhbnkpIHtcblx0XHRyZXR1cm4gX2ZuZmluZFZhbHVlc0hlbHBlcihvYmosIGtleSwgW10pO1xuXHR9O1xuXHRjb25zdCBfZm5EZWxldGVEdXBsaWNhdGVTZW1hbnRpY09iamVjdHMgPSBmdW5jdGlvbiAoYVNlbWFudGljT2JqZWN0UGF0aDogYW55KSB7XG5cdFx0cmV0dXJuIGFTZW1hbnRpY09iamVjdFBhdGguZmlsdGVyKGZ1bmN0aW9uICh2YWx1ZTogYW55LCBpbmRleDogYW55KSB7XG5cdFx0XHRyZXR1cm4gYVNlbWFudGljT2JqZWN0UGF0aC5pbmRleE9mKHZhbHVlKSA9PT0gaW5kZXg7XG5cdFx0fSk7XG5cdH07XG5cdGNvbnN0IG9WaWV3ID0gb0NvbnRyb2xsZXIuZ2V0VmlldygpO1xuXHRjb25zdCBvSW50ZXJuYWxNb2RlbENvbnRleHQgPSBvVmlldy5nZXRCaW5kaW5nQ29udGV4dChcImludGVybmFsXCIpO1xuXG5cdGlmIChvSW50ZXJuYWxNb2RlbENvbnRleHQpIHtcblx0XHRjb25zdCBhU2VtYW50aWNPYmplY3RzUHJvbWlzZXMgPSBbXTtcblx0XHRjb25zdCBvQ29tcG9uZW50ID0gb0NvbnRyb2xsZXIuZ2V0T3duZXJDb21wb25lbnQoKTtcblx0XHRjb25zdCBvQXBwQ29tcG9uZW50ID0gQ29tcG9uZW50LmdldE93bmVyQ29tcG9uZW50Rm9yKG9Db21wb25lbnQpIGFzIEFwcENvbXBvbmVudDtcblx0XHRjb25zdCBvTWV0YU1vZGVsID0gb0FwcENvbXBvbmVudC5nZXRNZXRhTW9kZWwoKTtcblx0XHRsZXQgb1BhZ2VNb2RlbCA9IG9Db21wb25lbnQuZ2V0TW9kZWwoc1BhZ2VNb2RlbCkuZ2V0RGF0YSgpO1xuXHRcdGlmIChKU09OLnN0cmluZ2lmeShvUGFnZU1vZGVsKSA9PT0gXCJ7fVwiKSB7XG5cdFx0XHRvUGFnZU1vZGVsID0gb0NvbXBvbmVudC5nZXRNb2RlbChzUGFnZU1vZGVsKS5fZ2V0T2JqZWN0KFwiL1wiLCB1bmRlZmluZWQpO1xuXHRcdH1cblx0XHRsZXQgYVNlbWFudGljT2JqZWN0c0ZvdW5kID0gX2ZuZmluZFZhbHVlcyhvUGFnZU1vZGVsLCBcInNlbWFudGljT2JqZWN0UGF0aFwiKTtcblx0XHRhU2VtYW50aWNPYmplY3RzRm91bmQgPSBfZm5EZWxldGVEdXBsaWNhdGVTZW1hbnRpY09iamVjdHMoYVNlbWFudGljT2JqZWN0c0ZvdW5kKTtcblx0XHRjb25zdCBvU2hlbGxTZXJ2aWNlSGVscGVyID0gQ29tbW9uVXRpbHMuZ2V0U2hlbGxTZXJ2aWNlcyhvQXBwQ29tcG9uZW50KTtcblx0XHRsZXQgc0N1cnJlbnRIYXNoID0gQ29tbW9uVXRpbHMuZ2V0SGFzaCgpO1xuXHRcdGNvbnN0IGFTZW1hbnRpY09iamVjdHNGb3JHZXRMaW5rcyA9IFtdO1xuXHRcdGNvbnN0IGFTZW1hbnRpY09iamVjdHM6IGFueVtdID0gW107XG5cdFx0bGV0IHNQYXRoO1xuXHRcdGxldCBfb1NlbWFudGljT2JqZWN0O1xuXG5cdFx0aWYgKHNDdXJyZW50SGFzaCAmJiBzQ3VycmVudEhhc2guaW5kZXhPZihcIj9cIikgIT09IC0xKSB7XG5cdFx0XHQvLyBzQ3VycmVudEhhc2ggY2FuIGNvbnRhaW4gcXVlcnkgc3RyaW5nLCBjdXQgaXQgb2ZmIVxuXHRcdFx0c0N1cnJlbnRIYXNoID0gc0N1cnJlbnRIYXNoLnNwbGl0KFwiP1wiKVswXTtcblx0XHR9XG5cblx0XHRmb3IgKGxldCBpID0gMDsgaSA8IGFTZW1hbnRpY09iamVjdHNGb3VuZC5sZW5ndGg7IGkrKykge1xuXHRcdFx0c1BhdGggPSBhU2VtYW50aWNPYmplY3RzRm91bmRbaV07XG5cdFx0XHRhU2VtYW50aWNPYmplY3RzUHJvbWlzZXMucHVzaChDb21tb25VdGlscy5nZXRTZW1hbnRpY09iamVjdFByb21pc2Uob0FwcENvbXBvbmVudCwgb1ZpZXcsIG9NZXRhTW9kZWwsIHNQYXRoKSk7XG5cdFx0fVxuXG5cdFx0aWYgKGFTZW1hbnRpY09iamVjdHNQcm9taXNlcy5sZW5ndGggPT09IDApIHtcblx0XHRcdHJldHVybiBQcm9taXNlLnJlc29sdmUoKTtcblx0XHR9IGVsc2Uge1xuXHRcdFx0UHJvbWlzZS5hbGwoYVNlbWFudGljT2JqZWN0c1Byb21pc2VzKVxuXHRcdFx0XHQudGhlbihmdW5jdGlvbiAoYVZhbHVlczogYW55W10pIHtcblx0XHRcdFx0XHRjb25zdCBhR2V0TGlua3NQcm9taXNlcyA9IFtdO1xuXHRcdFx0XHRcdGxldCBzU2VtT2JqRXhwcmVzc2lvbjtcblx0XHRcdFx0XHRjb25zdCBhU2VtYW50aWNPYmplY3RzUmVzb2x2ZWQgPSBhVmFsdWVzLmZpbHRlcihmdW5jdGlvbiAoZWxlbWVudDogYW55KSB7XG5cdFx0XHRcdFx0XHRpZiAoXG5cdFx0XHRcdFx0XHRcdGVsZW1lbnQuc2VtYW50aWNPYmplY3QgIT09IHVuZGVmaW5lZCAmJlxuXHRcdFx0XHRcdFx0XHRlbGVtZW50LnNlbWFudGljT2JqZWN0LnNlbWFudGljT2JqZWN0ICYmXG5cdFx0XHRcdFx0XHRcdHR5cGVvZiBlbGVtZW50LnNlbWFudGljT2JqZWN0LnNlbWFudGljT2JqZWN0ID09PSBcIm9iamVjdFwiXG5cdFx0XHRcdFx0XHQpIHtcblx0XHRcdFx0XHRcdFx0c1NlbU9iakV4cHJlc3Npb24gPSBjb21waWxlQmluZGluZyhiaW5kaW5nRXhwcmVzc2lvbihlbGVtZW50LnNlbWFudGljT2JqZWN0LnNlbWFudGljT2JqZWN0LiRQYXRoKSk7XG5cdFx0XHRcdFx0XHRcdGVsZW1lbnQuc2VtYW50aWNPYmplY3Quc2VtYW50aWNPYmplY3QgPSBzU2VtT2JqRXhwcmVzc2lvbjtcblx0XHRcdFx0XHRcdFx0ZWxlbWVudC5zZW1hbnRpY09iamVjdEZvckdldExpbmtzWzBdLnNlbWFudGljT2JqZWN0ID0gc1NlbU9iakV4cHJlc3Npb247XG5cdFx0XHRcdFx0XHRcdHJldHVybiB0cnVlO1xuXHRcdFx0XHRcdFx0fSBlbHNlIGlmIChlbGVtZW50KSB7XG5cdFx0XHRcdFx0XHRcdHJldHVybiBlbGVtZW50LnNlbWFudGljT2JqZWN0ICE9PSB1bmRlZmluZWQ7XG5cdFx0XHRcdFx0XHR9IGVsc2Uge1xuXHRcdFx0XHRcdFx0XHRyZXR1cm4gZmFsc2U7XG5cdFx0XHRcdFx0XHR9XG5cdFx0XHRcdFx0fSk7XG5cdFx0XHRcdFx0Zm9yIChsZXQgaiA9IDA7IGogPCBhU2VtYW50aWNPYmplY3RzUmVzb2x2ZWQubGVuZ3RoOyBqKyspIHtcblx0XHRcdFx0XHRcdF9vU2VtYW50aWNPYmplY3QgPSBhU2VtYW50aWNPYmplY3RzUmVzb2x2ZWRbal07XG5cdFx0XHRcdFx0XHRpZiAoXG5cdFx0XHRcdFx0XHRcdF9vU2VtYW50aWNPYmplY3QgJiZcblx0XHRcdFx0XHRcdFx0X29TZW1hbnRpY09iamVjdC5zZW1hbnRpY09iamVjdCAmJlxuXHRcdFx0XHRcdFx0XHQhKF9vU2VtYW50aWNPYmplY3Quc2VtYW50aWNPYmplY3Quc2VtYW50aWNPYmplY3QuaW5kZXhPZihcIntcIikgPT09IDApXG5cdFx0XHRcdFx0XHQpIHtcblx0XHRcdFx0XHRcdFx0YVNlbWFudGljT2JqZWN0c0ZvckdldExpbmtzLnB1c2goX29TZW1hbnRpY09iamVjdC5zZW1hbnRpY09iamVjdEZvckdldExpbmtzKTtcblx0XHRcdFx0XHRcdFx0YVNlbWFudGljT2JqZWN0cy5wdXNoKHtcblx0XHRcdFx0XHRcdFx0XHRzZW1hbnRpY09iamVjdDogX29TZW1hbnRpY09iamVjdC5zZW1hbnRpY09iamVjdC5zZW1hbnRpY09iamVjdCxcblx0XHRcdFx0XHRcdFx0XHR1bmF2YWlsYWJsZUFjdGlvbnM6IF9vU2VtYW50aWNPYmplY3QudW5hdmFpbGFibGVBY3Rpb25zLFxuXHRcdFx0XHRcdFx0XHRcdHBhdGg6IGFTZW1hbnRpY09iamVjdHNSZXNvbHZlZFtqXS5zZW1hbnRpY09iamVjdFBhdGhcblx0XHRcdFx0XHRcdFx0fSk7XG5cdFx0XHRcdFx0XHRcdGFHZXRMaW5rc1Byb21pc2VzLnB1c2gob1NoZWxsU2VydmljZUhlbHBlci5nZXRMaW5rc1dpdGhDYWNoZShbX29TZW1hbnRpY09iamVjdC5zZW1hbnRpY09iamVjdEZvckdldExpbmtzXSkpO1xuXHRcdFx0XHRcdFx0fVxuXHRcdFx0XHRcdH1cblx0XHRcdFx0XHRyZXR1cm4gQ29tbW9uVXRpbHMudXBkYXRlU2VtYW50aWNUYXJnZXRzKGFHZXRMaW5rc1Byb21pc2VzLCBhU2VtYW50aWNPYmplY3RzLCBvSW50ZXJuYWxNb2RlbENvbnRleHQsIHNDdXJyZW50SGFzaCk7XG5cdFx0XHRcdH0pXG5cdFx0XHRcdC5jYXRjaChmdW5jdGlvbiAob0Vycm9yOiBhbnkpIHtcblx0XHRcdFx0XHRMb2cuZXJyb3IoXCJmbkdldFNlbWFudGljVGFyZ2V0c0Zyb21UYWJsZTogQ2Fubm90IGdldCBTZW1hbnRpYyBPYmplY3RzXCIsIG9FcnJvcik7XG5cdFx0XHRcdH0pO1xuXHRcdH1cblx0fSBlbHNlIHtcblx0XHRyZXR1cm4gUHJvbWlzZS5yZXNvbHZlKCk7XG5cdH1cbn1cbmZ1bmN0aW9uIGdldEZpbHRlclJlc3RyaWN0aW9ucyhvRmlsdGVyUmVzdHJpY3Rpb25zQW5ub3RhdGlvbjogYW55LCBzUmVzdHJpY3Rpb246IGFueSkge1xuXHRjb25zdCBGaWx0ZXJSZXN0cmljdGlvbnMgPSBDb21tb25VdGlscy5GaWx0ZXJSZXN0cmljdGlvbnM7XG5cdGlmIChzUmVzdHJpY3Rpb24gPT09IEZpbHRlclJlc3RyaWN0aW9ucy5SRVFVSVJFRF9QUk9QRVJUSUVTIHx8IHNSZXN0cmljdGlvbiA9PT0gRmlsdGVyUmVzdHJpY3Rpb25zLk5PTl9GSUxURVJBQkxFX1BST1BFUlRJRVMpIHtcblx0XHRsZXQgYVByb3BzID0gW107XG5cdFx0aWYgKG9GaWx0ZXJSZXN0cmljdGlvbnNBbm5vdGF0aW9uICYmIG9GaWx0ZXJSZXN0cmljdGlvbnNBbm5vdGF0aW9uW3NSZXN0cmljdGlvbl0pIHtcblx0XHRcdGFQcm9wcyA9IG9GaWx0ZXJSZXN0cmljdGlvbnNBbm5vdGF0aW9uW3NSZXN0cmljdGlvbl0ubWFwKGZ1bmN0aW9uIChvUHJvcGVydHk6IGFueSkge1xuXHRcdFx0XHRyZXR1cm4gb1Byb3BlcnR5LiRQcm9wZXJ0eVBhdGg7XG5cdFx0XHR9KTtcblx0XHR9XG5cdFx0cmV0dXJuIGFQcm9wcztcblx0fSBlbHNlIGlmIChzUmVzdHJpY3Rpb24gPT09IEZpbHRlclJlc3RyaWN0aW9ucy5BTExPV0VEX0VYUFJFU1NJT05TKSB7XG5cdFx0Y29uc3QgbUFsbG93ZWRFeHByZXNzaW9uczogYW55ID0ge307XG5cdFx0aWYgKG9GaWx0ZXJSZXN0cmljdGlvbnNBbm5vdGF0aW9uICYmIG9GaWx0ZXJSZXN0cmljdGlvbnNBbm5vdGF0aW9uLkZpbHRlckV4cHJlc3Npb25SZXN0cmljdGlvbnMpIHtcblx0XHRcdG9GaWx0ZXJSZXN0cmljdGlvbnNBbm5vdGF0aW9uLkZpbHRlckV4cHJlc3Npb25SZXN0cmljdGlvbnMuZm9yRWFjaChmdW5jdGlvbiAob1Byb3BlcnR5OiBhbnkpIHtcblx0XHRcdFx0Ly9TaW5nbGVWYWx1ZSB8IE11bHRpVmFsdWUgfCBTaW5nbGVSYW5nZSB8IE11bHRpUmFuZ2UgfCBTZWFyY2hFeHByZXNzaW9uIHwgTXVsdGlSYW5nZU9yU2VhcmNoRXhwcmVzc2lvblxuXHRcdFx0XHRpZiAobUFsbG93ZWRFeHByZXNzaW9uc1tvUHJvcGVydHkuUHJvcGVydHkuJFByb3BlcnR5UGF0aF0pIHtcblx0XHRcdFx0XHRtQWxsb3dlZEV4cHJlc3Npb25zW29Qcm9wZXJ0eS5Qcm9wZXJ0eS4kUHJvcGVydHlQYXRoXS5wdXNoKG9Qcm9wZXJ0eS5BbGxvd2VkRXhwcmVzc2lvbnMpO1xuXHRcdFx0XHR9IGVsc2Uge1xuXHRcdFx0XHRcdG1BbGxvd2VkRXhwcmVzc2lvbnNbb1Byb3BlcnR5LlByb3BlcnR5LiRQcm9wZXJ0eVBhdGhdID0gW29Qcm9wZXJ0eS5BbGxvd2VkRXhwcmVzc2lvbnNdO1xuXHRcdFx0XHR9XG5cdFx0XHR9KTtcblx0XHR9XG5cdFx0cmV0dXJuIG1BbGxvd2VkRXhwcmVzc2lvbnM7XG5cdH1cblx0Ly8gRGVmYXVsdCByZXR1cm4gdGhlIEZpbHRlclJlc3RyaWN0aW9ucyBBbm5vdGF0aW9uXG5cdHJldHVybiBvRmlsdGVyUmVzdHJpY3Rpb25zQW5ub3RhdGlvbjtcbn1cbmZ1bmN0aW9uIGdldEZpbHRlclJlc3RyaWN0aW9uc0J5UGF0aChzRW50aXR5U2V0UGF0aDogYW55LCBvTWV0YU1vZGVsOiBhbnkpIHtcblx0Y29uc3Qgb1JldDogYW55ID0ge30sXG5cdFx0RmlsdGVyUmVzdHJpY3Rpb25zID0gQ29tbW9uVXRpbHMuRmlsdGVyUmVzdHJpY3Rpb25zLFxuXHRcdG9GaWx0ZXJSZXN0cmljdGlvbnMgPSBzRW50aXR5U2V0UGF0aCA/IG9NZXRhTW9kZWwuZ2V0T2JqZWN0KHNFbnRpdHlTZXRQYXRoICsgXCJAT3JnLk9EYXRhLkNhcGFiaWxpdGllcy5WMS5GaWx0ZXJSZXN0cmljdGlvbnNcIikgOiB7fTtcblx0b1JldFtGaWx0ZXJSZXN0cmljdGlvbnMuUkVRVUlSRURfUFJPUEVSVElFU10gPSBnZXRGaWx0ZXJSZXN0cmljdGlvbnMob0ZpbHRlclJlc3RyaWN0aW9ucywgRmlsdGVyUmVzdHJpY3Rpb25zLlJFUVVJUkVEX1BST1BFUlRJRVMpIHx8IFtdO1xuXHRvUmV0W0ZpbHRlclJlc3RyaWN0aW9ucy5OT05fRklMVEVSQUJMRV9QUk9QRVJUSUVTXSA9XG5cdFx0Z2V0RmlsdGVyUmVzdHJpY3Rpb25zKG9GaWx0ZXJSZXN0cmljdGlvbnMsIEZpbHRlclJlc3RyaWN0aW9ucy5OT05fRklMVEVSQUJMRV9QUk9QRVJUSUVTKSB8fCBbXTtcblx0Ly9TaW5nbGVWYWx1ZSB8IE11bHRpVmFsdWUgfCBTaW5nbGVSYW5nZSB8IE11bHRpUmFuZ2UgfCBTZWFyY2hFeHByZXNzaW9uIHwgTXVsdGlSYW5nZU9yU2VhcmNoRXhwcmVzc2lvblxuXHRvUmV0W0ZpbHRlclJlc3RyaWN0aW9ucy5BTExPV0VEX0VYUFJFU1NJT05TXSA9IGdldEZpbHRlclJlc3RyaWN0aW9ucyhvRmlsdGVyUmVzdHJpY3Rpb25zLCBGaWx0ZXJSZXN0cmljdGlvbnMuQUxMT1dFRF9FWFBSRVNTSU9OUykgfHwge307XG5cblx0Y29uc3QgYVBhdGhQYXJ0cyA9IHNFbnRpdHlTZXRQYXRoLnNwbGl0KFwiL1wiKTtcblxuXHRpZiAoYVBhdGhQYXJ0cy5sZW5ndGggPiAyKSB7XG5cdFx0Ly8gSW4gbm9ybWFsIGZpbHRlcmJhciBzY2VuYXJpb3Mgc0VudGl0eVNldFBhdGggaXMgb2YgdGhlIGZvcm1hdCBcIi9DdXN0b21lclwiLlxuXHRcdC8vIEJ1dCwgSW4gY2FzZSBvZiBzRW50aXR5U2V0UGF0aCBvZiBmb3JtYXQgXCIvQ3VzdG9tZXIvU2V0XCIgdGhpcyBpcyB0byBjaGVjayBuYXZpZ2F0aW9uIHJlc3RyaWN0aW9ucyBvZiBcIkN1c3RvbWVyXCIgZm9yIG5vbi1maWx0ZXJhYmxlIHByb3BlcnRpZXMgaW4gXCJTZXRcIlxuXHRcdGNvbnN0IHNOYXZpZ2F0aW9uUGF0aCA9IGFQYXRoUGFydHNbYVBhdGhQYXJ0cy5sZW5ndGggLSAxXTtcblx0XHRhUGF0aFBhcnRzLnNwbGljZSgtMSwgMSk7IC8vIHJlbW92aW5nIE5hdmlnYXRpb25Qcm9wZXJ0eSBmcm9tIHRoZSBlbmQuXG5cdFx0Y29uc3Qgc1BhcmVudEVudGl0eVNldFBhdGggPSBhUGF0aFBhcnRzLmpvaW4oXCIvXCIpO1xuXHRcdGNvbnN0IG9OYXZpZ2F0aW9uUmVzdHJpY3Rpb25zID0gQ29tbW9uVXRpbHMuZ2V0TmF2aWdhdGlvblJlc3RyaWN0aW9ucyhvTWV0YU1vZGVsLCBzUGFyZW50RW50aXR5U2V0UGF0aCwgc05hdmlnYXRpb25QYXRoKTtcblx0XHRjb25zdCBvTmF2aWdhdGlvbkZpbHRlclJlc3RyaWN0aW9ucyA9IG9OYXZpZ2F0aW9uUmVzdHJpY3Rpb25zICYmIG9OYXZpZ2F0aW9uUmVzdHJpY3Rpb25zW1wiRmlsdGVyUmVzdHJpY3Rpb25zXCJdO1xuXHRcdG9SZXRbRmlsdGVyUmVzdHJpY3Rpb25zLlJFUVVJUkVEX1BST1BFUlRJRVNdLmNvbmNhdChcblx0XHRcdGdldEZpbHRlclJlc3RyaWN0aW9ucyhvTmF2aWdhdGlvbkZpbHRlclJlc3RyaWN0aW9ucywgRmlsdGVyUmVzdHJpY3Rpb25zLlJFUVVJUkVEX1BST1BFUlRJRVMpIHx8IFtdXG5cdFx0KTtcblx0XHRvUmV0W0ZpbHRlclJlc3RyaWN0aW9ucy5OT05fRklMVEVSQUJMRV9QUk9QRVJUSUVTXS5jb25jYXQoXG5cdFx0XHRnZXRGaWx0ZXJSZXN0cmljdGlvbnMob05hdmlnYXRpb25GaWx0ZXJSZXN0cmljdGlvbnMsIEZpbHRlclJlc3RyaWN0aW9ucy5OT05fRklMVEVSQUJMRV9QUk9QRVJUSUVTKSB8fCBbXVxuXHRcdCk7XG5cdFx0Ly9TaW5nbGVWYWx1ZSB8IE11bHRpVmFsdWUgfCBTaW5nbGVSYW5nZSB8IE11bHRpUmFuZ2UgfCBTZWFyY2hFeHByZXNzaW9uIHwgTXVsdGlSYW5nZU9yU2VhcmNoRXhwcmVzc2lvblxuXHRcdG9SZXRbRmlsdGVyUmVzdHJpY3Rpb25zLkFMTE9XRURfRVhQUkVTU0lPTlNdID0gbWVyZ2VPYmplY3RzKFxuXHRcdFx0e30sXG5cdFx0XHRnZXRGaWx0ZXJSZXN0cmljdGlvbnMob05hdmlnYXRpb25GaWx0ZXJSZXN0cmljdGlvbnMsIEZpbHRlclJlc3RyaWN0aW9ucy5BTExPV0VEX0VYUFJFU1NJT05TKSB8fCB7fSxcblx0XHRcdG9SZXRbRmlsdGVyUmVzdHJpY3Rpb25zLkFMTE9XRURfRVhQUkVTU0lPTlNdXG5cdFx0KTtcblx0fVxuXG5cdHJldHVybiBvUmV0O1xufVxuZnVuY3Rpb24gdGVtcGxhdGVDb250cm9sRnJhZ21lbnQoc0ZyYWdtZW50TmFtZTogYW55LCBvUHJlcHJvY2Vzc29yU2V0dGluZ3M6IGFueSwgb09wdGlvbnM6IGFueSwgb01vZGlmaWVyPzogYW55KSB7XG5cdG9PcHRpb25zID0gb09wdGlvbnMgfHwge307XG5cdGlmIChvTW9kaWZpZXIpIHtcblx0XHRyZXR1cm4gb01vZGlmaWVyLnRlbXBsYXRlQ29udHJvbEZyYWdtZW50KHNGcmFnbWVudE5hbWUsIG9QcmVwcm9jZXNzb3JTZXR0aW5ncywgb09wdGlvbnMudmlldykudGhlbihmdW5jdGlvbiAob0ZyYWdtZW50OiBhbnkpIHtcblx0XHRcdC8vIFRoaXMgaXMgcmVxdWlyZWQgYXMgRmxleCByZXR1cm5zIGFuIEhUTUxDb2xsZWN0aW9uIGFzIHRlbXBsYXRpbmcgcmVzdWx0IGluIFhNTCB0aW1lLlxuXHRcdFx0cmV0dXJuIG9Nb2RpZmllci50YXJnZXRzID09PSBcInhtbFRyZWVcIiAmJiBvRnJhZ21lbnQubGVuZ3RoID4gMCA/IG9GcmFnbWVudFswXSA6IG9GcmFnbWVudDtcblx0XHR9KTtcblx0fSBlbHNlIHtcblx0XHRyZXR1cm4gbG9hZE1hY3JvTGlicmFyeSgpXG5cdFx0XHQudGhlbihmdW5jdGlvbiAoKSB7XG5cdFx0XHRcdHJldHVybiBYTUxQcmVwcm9jZXNzb3IucHJvY2Vzcyhcblx0XHRcdFx0XHRYTUxUZW1wbGF0ZVByb2Nlc3Nvci5sb2FkVGVtcGxhdGUoc0ZyYWdtZW50TmFtZSwgXCJmcmFnbWVudFwiKSxcblx0XHRcdFx0XHR7IG5hbWU6IHNGcmFnbWVudE5hbWUgfSxcblx0XHRcdFx0XHRvUHJlcHJvY2Vzc29yU2V0dGluZ3Ncblx0XHRcdFx0KTtcblx0XHRcdH0pXG5cdFx0XHQudGhlbihmdW5jdGlvbiAob0ZyYWdtZW50OiBhbnkpIHtcblx0XHRcdFx0Y29uc3Qgb0NvbnRyb2wgPSBvRnJhZ21lbnQuZmlyc3RFbGVtZW50Q2hpbGQ7XG5cdFx0XHRcdGlmICghIW9PcHRpb25zLmlzWE1MICYmIG9Db250cm9sKSB7XG5cdFx0XHRcdFx0cmV0dXJuIG9Db250cm9sO1xuXHRcdFx0XHR9XG5cdFx0XHRcdHJldHVybiBGcmFnbWVudC5sb2FkKHtcblx0XHRcdFx0XHRpZDogb09wdGlvbnMuaWQsXG5cdFx0XHRcdFx0ZGVmaW5pdGlvbjogb0ZyYWdtZW50LFxuXHRcdFx0XHRcdGNvbnRyb2xsZXI6IG9PcHRpb25zLmNvbnRyb2xsZXJcblx0XHRcdFx0fSk7XG5cdFx0XHR9KTtcblx0fVxufVxuZnVuY3Rpb24gZ2V0U2luZ2xldG9uUGF0aChwYXRoOiBzdHJpbmcsIG1ldGFNb2RlbDogT0RhdGFNZXRhTW9kZWwpOiBzdHJpbmcgfCB1bmRlZmluZWQge1xuXHRjb25zdCBwYXJ0cyA9IHBhdGguc3BsaXQoXCIvXCIpLmZpbHRlcihCb29sZWFuKSxcblx0XHRwcm9wZXJ0eU5hbWUgPSBwYXJ0cy5wb3AoKSxcblx0XHRuYXZpZ2F0aW9uUGF0aCA9IHBhcnRzLmpvaW4oXCIvXCIpLFxuXHRcdGVudGl0eVNldCA9IG5hdmlnYXRpb25QYXRoICYmIG1ldGFNb2RlbC5nZXRPYmplY3QoXCIvXCIgKyBuYXZpZ2F0aW9uUGF0aCk7XG5cdGlmIChlbnRpdHlTZXQ/LiRraW5kID09PSBcIlNpbmdsZXRvblwiKSB7XG5cdFx0Y29uc3Qgc2luZ2xldG9uTmFtZSA9IHBhcnRzW3BhcnRzLmxlbmd0aCAtIDFdO1xuXHRcdHJldHVybiBcIi9cIiArIHNpbmdsZXRvbk5hbWUgKyBcIi9cIiArIHByb3BlcnR5TmFtZTtcblx0fVxuXHRyZXR1cm4gdW5kZWZpbmVkO1xufVxuZnVuY3Rpb24gcmVxdWVzdFNpbmdsZXRvblByb3BlcnR5KHBhdGg6IHN0cmluZywgbW9kZWw6IE9EYXRhTW9kZWwpIHtcblx0aWYgKCFwYXRoIHx8ICFtb2RlbCkge1xuXHRcdHJldHVybiBQcm9taXNlLnJlc29sdmUobnVsbCk7XG5cdH1cblx0Y29uc3QgbWV0YU1vZGVsID0gbW9kZWwuZ2V0TWV0YU1vZGVsKCk7XG5cdC8vIEZpbmQgdGhlIHVuZGVybHlpbmcgZW50aXR5IHNldCBmcm9tIHRoZSBwcm9wZXJ0eSBwYXRoIGFuZCBjaGVjayB3aGV0aGVyIGl0IGlzIGEgc2luZ2xldG9uLlxuXHRjb25zdCByZXNvbHZlZFBhdGggPSBnZXRTaW5nbGV0b25QYXRoKHBhdGgsIG1ldGFNb2RlbCk7XG5cdGlmIChyZXNvbHZlZFBhdGgpIHtcblx0XHRjb25zdCBwcm9wZXJ0eUJpbmRpbmcgPSBtb2RlbC5iaW5kUHJvcGVydHkocmVzb2x2ZWRQYXRoKTtcblx0XHRyZXR1cm4gcHJvcGVydHlCaW5kaW5nLnJlcXVlc3RWYWx1ZSgpO1xuXHR9XG5cblx0cmV0dXJuIFByb21pc2UucmVzb2x2ZShudWxsKTtcbn1cbmZ1bmN0aW9uIGFkZEV2ZW50VG9CaW5kaW5nSW5mbyhvQ29udHJvbDogQ29udHJvbCwgc0V2ZW50TmFtZTogc3RyaW5nLCBmSGFuZGxlcjogRnVuY3Rpb24pIHtcblx0bGV0IG9CaW5kaW5nSW5mbzogYW55O1xuXHRjb25zdCBzZXRCaW5kaW5nSW5mbyA9IGZ1bmN0aW9uICgpIHtcblx0XHRpZiAob0JpbmRpbmdJbmZvKSB7XG5cdFx0XHRpZiAoIW9CaW5kaW5nSW5mby5ldmVudHMpIHtcblx0XHRcdFx0b0JpbmRpbmdJbmZvLmV2ZW50cyA9IHt9O1xuXHRcdFx0fVxuXHRcdFx0aWYgKCFvQmluZGluZ0luZm8uZXZlbnRzW3NFdmVudE5hbWVdKSB7XG5cdFx0XHRcdG9CaW5kaW5nSW5mby5ldmVudHNbc0V2ZW50TmFtZV0gPSBmSGFuZGxlcjtcblx0XHRcdH0gZWxzZSB7XG5cdFx0XHRcdGNvbnN0IGZPcmlnaW5hbEhhbmRsZXIgPSBvQmluZGluZ0luZm8uZXZlbnRzW3NFdmVudE5hbWVdO1xuXHRcdFx0XHRvQmluZGluZ0luZm8uZXZlbnRzW3NFdmVudE5hbWVdID0gZnVuY3Rpb24gKC4uLmFyZ3M6IGFueVtdKSB7XG5cdFx0XHRcdFx0ZkhhbmRsZXIuYXBwbHkodGhpcywgLi4uYXJncyk7XG5cdFx0XHRcdFx0Zk9yaWdpbmFsSGFuZGxlci5hcHBseSh0aGlzLCAuLi5hcmdzKTtcblx0XHRcdFx0fTtcblx0XHRcdH1cblx0XHR9XG5cdH07XG5cdGlmIChvQ29udHJvbC5pc0EoXCJzYXAudWkubWRjLkNoYXJ0XCIpKSB7XG5cdFx0KG9Db250cm9sIGFzIGFueSlcblx0XHRcdC5pbm5lckNoYXJ0Qm91bmQoKVxuXHRcdFx0LnRoZW4oZnVuY3Rpb24gKCkge1xuXHRcdFx0XHRvQmluZGluZ0luZm8gPSAob0NvbnRyb2wgYXMgYW55KS5nZXRDb250cm9sRGVsZWdhdGUoKS5fZ2V0Q2hhcnQob0NvbnRyb2wpLmdldEJpbmRpbmdJbmZvKFwiZGF0YVwiKTtcblx0XHRcdFx0c2V0QmluZGluZ0luZm8oKTtcblx0XHRcdH0pXG5cdFx0XHQuY2F0Y2goZnVuY3Rpb24gKHNFcnJvcjogYW55KSB7XG5cdFx0XHRcdExvZy5lcnJvcihzRXJyb3IpO1xuXHRcdFx0fSk7XG5cdH0gZWxzZSB7XG5cdFx0b0JpbmRpbmdJbmZvID0gb0NvbnRyb2wuZGF0YShcInJvd3NCaW5kaW5nSW5mb1wiKTtcblx0XHRzZXRCaW5kaW5nSW5mbygpO1xuXHR9XG59XG5mdW5jdGlvbiBsb2FkTWFjcm9MaWJyYXJ5KCkge1xuXHRyZXR1cm4gbmV3IFByb21pc2U8dm9pZD4oZnVuY3Rpb24gKHJlc29sdmUpIHtcblx0XHRzYXAudWkucmVxdWlyZShbXCJzYXAvZmUvbWFjcm9zL21hY3JvTGlicmFyeVwiXSwgZnVuY3Rpb24gKC8qbWFjcm9MaWJyYXJ5Ki8pIHtcblx0XHRcdHJlc29sdmUoKTtcblx0XHR9KTtcblx0fSk7XG59XG5cbmZ1bmN0aW9uIGZuT25TdHJpY3RIYW5kbGluZ0ZhaWxlZChzR3JvdXBJZDogc3RyaW5nLCBhY3Rpb25OYW1lOiBzdHJpbmcsIG9Nb2RlbDogT0RhdGFNb2RlbCwgYU1lc3NhZ2VzOiBhbnlbXSkge1xuXHRjb25zdCBsb2NhbEkxOG5SZWYgPSAoQ29yZSBhcyBDb3JlRXgpLmdldExpYnJhcnlSZXNvdXJjZUJ1bmRsZShcInNhcC5mZS5jb3JlXCIpLFxuXHRcdHNBY3Rpb25OYW1lID0gYWN0aW9uTmFtZSxcblx0XHRzQ2FuY2VsQnV0dG9uVHh0ID0gbG9jYWxJMThuUmVmLmdldFRleHQoXCJDQU5DRUxcIik7XG5cdGlmIChhTWVzc2FnZXMubGVuZ3RoID09PSAxKSB7XG5cdFx0Y29uc3Qgc01lc3NhZ2UgPSBhTWVzc2FnZXNbMF0ubWVzc2FnZSArIFwiXFxuXCIgKyBsb2NhbEkxOG5SZWYuZ2V0VGV4dChcIlBST0NFRURcIik7XG5cdFx0Y29uc3QgZGlhbG9nUHJvbWlzZSA9IG5ldyBQcm9taXNlKGZ1bmN0aW9uIChyZXNvbHZlKSB7XG5cdFx0XHRNZXNzYWdlQm94Lndhcm5pbmcoc01lc3NhZ2UsIHtcblx0XHRcdFx0dGl0bGU6IGxvY2FsSTE4blJlZi5nZXRUZXh0KFwiV0FSTklOR1wiKSxcblx0XHRcdFx0YWN0aW9uczogW3NBY3Rpb25OYW1lLCBzQ2FuY2VsQnV0dG9uVHh0XSxcblx0XHRcdFx0ZW1waGFzaXplZEFjdGlvbjogc0FjdGlvbk5hbWUsXG5cdFx0XHRcdG9uQ2xvc2U6IGZ1bmN0aW9uIChzQWN0aW9uOiBzdHJpbmcpIHtcblx0XHRcdFx0XHRpZiAoc0FjdGlvbiA9PT0gc0FjdGlvbk5hbWUpIHtcblx0XHRcdFx0XHRcdHJlc29sdmUodHJ1ZSk7XG5cdFx0XHRcdFx0XHRvTW9kZWwuc3VibWl0QmF0Y2goc0dyb3VwSWQpO1xuXHRcdFx0XHRcdH0gZWxzZSB7XG5cdFx0XHRcdFx0XHRyZXNvbHZlKGZhbHNlKTtcblx0XHRcdFx0XHR9XG5cdFx0XHRcdH1cblx0XHRcdH0pO1xuXHRcdH0pO1xuXHRcdHJldHVybiBkaWFsb2dQcm9taXNlO1xuXHR9XG5cdHJldHVybiBuZXcgUHJvbWlzZShmdW5jdGlvbiAocmVzb2x2ZSkge1xuXHRcdGNvbnN0IG9NZXNzYWdlRGlhbG9nTW9kZWwgPSBuZXcgSlNPTk1vZGVsKCk7XG5cdFx0b01lc3NhZ2VEaWFsb2dNb2RlbC5zZXREYXRhKGFNZXNzYWdlcyk7XG5cdFx0Y29uc3QgYlN0cmljdEhhbmRsaW5nRmxvdyA9IHRydWU7XG5cdFx0Y29uc3Qgb01lc3NhZ2VPYmplY3QgPSBtZXNzYWdlSGFuZGxpbmcucHJlcGFyZU1lc3NhZ2VWaWV3Rm9yRGlhbG9nKG9NZXNzYWdlRGlhbG9nTW9kZWwsIGJTdHJpY3RIYW5kbGluZ0Zsb3cpO1xuXHRcdGNvbnN0IG9EaWFsb2cgPSBuZXcgRGlhbG9nKHtcblx0XHRcdHJlc2l6YWJsZTogdHJ1ZSxcblx0XHRcdGNvbnRlbnQ6IG9NZXNzYWdlT2JqZWN0Lm9NZXNzYWdlVmlldyxcblx0XHRcdHN0YXRlOiBcIldhcm5pbmdcIixcblx0XHRcdGN1c3RvbUhlYWRlcjogbmV3IEJhcih7XG5cdFx0XHRcdGNvbnRlbnRMZWZ0OiBbb01lc3NhZ2VPYmplY3Qub0JhY2tCdXR0b25dLFxuXHRcdFx0XHRjb250ZW50TWlkZGxlOiBbbmV3IFRpdGxlKHsgdGV4dDogXCJXYXJuaW5nXCIgfSldXG5cdFx0XHR9KSxcblx0XHRcdGNvbnRlbnRIZWlnaHQ6IFwiNTAlXCIsXG5cdFx0XHRjb250ZW50V2lkdGg6IFwiNTAlXCIsXG5cdFx0XHR2ZXJ0aWNhbFNjcm9sbGluZzogZmFsc2Vcblx0XHR9KTtcblx0XHRvRGlhbG9nLnNldEJlZ2luQnV0dG9uKFxuXHRcdFx0bmV3IEJ1dHRvbih7XG5cdFx0XHRcdHByZXNzOiBmdW5jdGlvbiAoKSB7XG5cdFx0XHRcdFx0cmVzb2x2ZSh0cnVlKTtcblx0XHRcdFx0XHRvTW9kZWwuc3VibWl0QmF0Y2goc0dyb3VwSWQpO1xuXHRcdFx0XHRcdG9EaWFsb2cuY2xvc2UoKTtcblx0XHRcdFx0fSxcblx0XHRcdFx0dHlwZTogXCJFbXBoYXNpemVkXCIsXG5cdFx0XHRcdHRleHQ6IGdldFRyYW5zbGF0ZWRUZXh0KFwiSUdOT1JFXCIsIGxvY2FsSTE4blJlZiwgc0FjdGlvbk5hbWUpXG5cdFx0XHR9KVxuXHRcdCk7XG5cdFx0b0RpYWxvZy5zZXRFbmRCdXR0b24oXG5cdFx0XHRuZXcgQnV0dG9uKHtcblx0XHRcdFx0cHJlc3M6IGZ1bmN0aW9uICgpIHtcblx0XHRcdFx0XHRyZXNvbHZlKGZhbHNlKTtcblx0XHRcdFx0XHRvRGlhbG9nLmNsb3NlKCk7XG5cdFx0XHRcdH0sXG5cdFx0XHRcdHRleHQ6IHNDYW5jZWxCdXR0b25UeHRcblx0XHRcdH0pXG5cdFx0KTtcblx0XHRvRGlhbG9nLm9wZW4oKTtcblx0fSk7XG59XG5cbmZ1bmN0aW9uIGdldE1lc3NhZ2VTdHJpcFRleHQoXG5cdHZpZXc6IGFueSxcblx0YUlnbm9yZWRMYWJlbHM6IGFueSxcblx0b0ZpbHRlckJhcjogYW55LFxuXHRiSXNDaGFydDogYW55LFxuXHRiSXNTZWFyY2hJZ25vcmVkOiBhbnksXG5cdHNUYWJUaXRsZTogYW55LFxuXHRvUmVzb3VyY2VCdW5kbGU6IGFueSxcblx0Zm5HZXRMb2NhbGl6ZWRUZXh0OiBhbnlcbik6IHN0cmluZyB7XG5cdGxldCBzVGV4dCA9IFwiXCI7XG5cdGlmIChiSXNDaGFydCkge1xuXHRcdGNvbnN0IG9DaGFydCA9IHZpZXcuZ2V0Q29udHJvbGxlcigpLmdldENoYXJ0Q29udHJvbCgpO1xuXHRcdGNvbnN0IGJJc0RyYWZ0U3VwcG9ydGVkID0gb0NoYXJ0LmRhdGEoXCJkcmFmdFN1cHBvcnRlZFwiKSA9PT0gXCJ0cnVlXCI7XG5cdFx0Y29uc3Qgb01hY3JvUmVzb3VyY2VCdW5kbGUgPSBDb3JlLmdldExpYnJhcnlSZXNvdXJjZUJ1bmRsZShcInNhcC5mZS5tYWNyb3NcIikgYXMgUmVzb3VyY2VCdW5kbGU7XG5cdFx0YklzU2VhcmNoSWdub3JlZCA9IGJJc1NlYXJjaElnbm9yZWQgJiYgYUlnbm9yZWRMYWJlbHMuaW5jbHVkZXMob01hY3JvUmVzb3VyY2VCdW5kbGUuZ2V0VGV4dChcIk1fRklMVEVSQkFSX1NFQVJDSFwiKSk7XG5cdFx0aWYgKGFJZ25vcmVkTGFiZWxzLmxlbmd0aCA9PT0gMiAmJiBiSXNTZWFyY2hJZ25vcmVkICYmIGJJc0RyYWZ0U3VwcG9ydGVkKSB7XG5cdFx0XHRzVGV4dCA9IG9SZXNvdXJjZUJ1bmRsZS5nZXRUZXh0KFwiQ19MUl9NVUxUSVZJWl9DSEFSVF9JR05PUkVEX0ZJTFRFUl9EUkFGVF9EQVRBX0FORF9TRUFSQ0hcIik7XG5cdFx0fSBlbHNlIGlmIChhSWdub3JlZExhYmVscy5sZW5ndGggPT09IDEgJiYgYklzRHJhZnRTdXBwb3J0ZWQpIHtcblx0XHRcdHNUZXh0ID0gb1Jlc291cmNlQnVuZGxlLmdldFRleHQoXCJDX01VTFRJVklaX0NIQVJUX0lHTk9SRURfRklMVEVSX0RSQUZUX0RBVEFcIik7XG5cdFx0fSBlbHNlIHtcblx0XHRcdGNvbnN0IHNSZXNvdXJjZSA9XG5cdFx0XHRcdFwiQ19MUl9NVUxUSVZJWl9DSEFSVF9cIiArXG5cdFx0XHRcdChhSWdub3JlZExhYmVscy5sZW5ndGggPT09IDEgPyBcIlNJTkdMRVwiIDogXCJNVUxUSVwiKSArXG5cdFx0XHRcdFwiX0lHTk9SRURfRklMVEVSX1wiICtcblx0XHRcdFx0KHN5c3RlbS5kZXNrdG9wID8gXCJMQVJHRVwiIDogXCJTTUFMTFwiKTtcblx0XHRcdHNUZXh0ID0gb1Jlc291cmNlQnVuZGxlLmdldFRleHQoc1Jlc291cmNlLCBbYUlnbm9yZWRMYWJlbHMuam9pbihcIiwgXCIpXSk7XG5cdFx0fVxuXHR9IGVsc2Uge1xuXHRcdGNvbnN0IHNSZXNvdXJjZSA9XG5cdFx0XHRcdFwiQ19MUl9NVUxUSVRBQkxFU19cIiArXG5cdFx0XHRcdChhSWdub3JlZExhYmVscy5sZW5ndGggPT09IDEgPyBcIlNJTkdMRVwiIDogXCJNVUxUSVwiKSArXG5cdFx0XHRcdFwiX0lHTk9SRURfRklMVEVSX1wiICtcblx0XHRcdFx0KHN5c3RlbS5kZXNrdG9wID8gXCJMQVJHRVwiIDogXCJTTUFMTFwiKSxcblx0XHRcdHNMb2NhbGl6ZWRUYWJsZVRpdGxlID0gZm5HZXRMb2NhbGl6ZWRUZXh0KHNUYWJUaXRsZSwgb0ZpbHRlckJhcik7XG5cdFx0c1RleHQgPSBvUmVzb3VyY2VCdW5kbGUuZ2V0VGV4dChzUmVzb3VyY2UsIFthSWdub3JlZExhYmVscy5qb2luKFwiLCBcIiksIHNMb2NhbGl6ZWRUYWJsZVRpdGxlXSk7XG5cdH1cblx0cmV0dXJuIHNUZXh0O1xufVxuXG5jb25zdCBDb21tb25VdGlscyA9IHtcblx0aXNQcm9wZXJ0eUZpbHRlcmFibGU6IGlzUHJvcGVydHlGaWx0ZXJhYmxlLFxuXHRpc0ZpZWxkQ29udHJvbFBhdGhJbmFwcGxpY2FibGU6IGlzRmllbGRDb250cm9sUGF0aEluYXBwbGljYWJsZSxcblx0cmVtb3ZlU2Vuc2l0aXZlRGF0YTogcmVtb3ZlU2Vuc2l0aXZlRGF0YSxcblx0ZmlyZUJ1dHRvblByZXNzOiBmbkZpcmVCdXR0b25QcmVzcyxcblx0Z2V0VGFyZ2V0VmlldzogZ2V0VGFyZ2V0Vmlldyxcblx0aGFzVHJhbnNpZW50Q29udGV4dDogZm5IYXNUcmFuc2llbnRDb250ZXh0cyxcblx0dXBkYXRlUmVsYXRlZEFwcHNEZXRhaWxzOiBmblVwZGF0ZVJlbGF0ZWRBcHBzRGV0YWlscyxcblx0cmVzb2x2ZVN0cmluZ3RvQm9vbGVhbjogZm5SZXNvbHZlU3RyaW5ndG9Cb29sZWFuLFxuXHRnZXRBcHBDb21wb25lbnQ6IGdldEFwcENvbXBvbmVudCxcblx0cHJvY2Vzc0RhdGFMb3NzQ29uZmlybWF0aW9uOiBmblByb2Nlc3NEYXRhTG9zc0NvbmZpcm1hdGlvbixcblx0Z2V0TWFuZGF0b3J5RmlsdGVyRmllbGRzOiBmbkdldE1hbmRhdG9yeUZpbHRlckZpZWxkcyxcblx0Z2V0Q29udGV4dFBhdGhQcm9wZXJ0aWVzOiBmbkdldENvbnRleHRQYXRoUHJvcGVydGllcyxcblx0Z2V0UGFyYW1ldGVySW5mbzogZ2V0UGFyYW1ldGVySW5mbyxcblx0dXBkYXRlRGF0YUZpZWxkRm9ySUJOQnV0dG9uc1Zpc2liaWxpdHk6IGZuVXBkYXRlRGF0YUZpZWxkRm9ySUJOQnV0dG9uc1Zpc2liaWxpdHksXG5cdGdldFRyYW5zbGF0ZWRUZXh0OiBnZXRUcmFuc2xhdGVkVGV4dCxcblx0Z2V0RW50aXR5U2V0TmFtZTogZ2V0RW50aXR5U2V0TmFtZSxcblx0Z2V0QWN0aW9uUGF0aDogZ2V0QWN0aW9uUGF0aCxcblx0Y29tcHV0ZURpc3BsYXlNb2RlOiBjb21wdXRlRGlzcGxheU1vZGUsXG5cdHNldEFjdGlvbkVuYWJsZW1lbnQ6IHNldEFjdGlvbkVuYWJsZW1lbnQsXG5cdGlzU3RpY2t5RWRpdE1vZGU6IGlzU3RpY2t5RWRpdE1vZGUsXG5cdGdldE9wZXJhdG9yc0ZvclByb3BlcnR5OiBnZXRPcGVyYXRvcnNGb3JQcm9wZXJ0eSxcblx0YWRkU2VsZWN0aW9uVmFyaWFudFRvQ29uZGl0aW9uczogYWRkU2VsZWN0aW9uVmFyaWFudFRvQ29uZGl0aW9ucyxcblx0YWRkRXh0ZXJuYWxTdGF0ZUZpbHRlcnNUb1NlbGVjdGlvblZhcmlhbnQ6IGFkZEV4dGVybmFsU3RhdGVGaWx0ZXJzVG9TZWxlY3Rpb25WYXJpYW50LFxuXHRhZGRQYWdlQ29udGV4dFRvU2VsZWN0aW9uVmFyaWFudDogYWRkUGFnZUNvbnRleHRUb1NlbGVjdGlvblZhcmlhbnQsXG5cdGFkZERlZmF1bHREaXNwbGF5Q3VycmVuY3k6IGFkZERlZmF1bHREaXNwbGF5Q3VycmVuY3ksXG5cdGdldE5vbkNvbXB1dGVkVmlzaWJsZUZpZWxkczogZ2V0Tm9uQ29tcHV0ZWRWaXNpYmxlRmllbGRzLFxuXHRzZXRVc2VyRGVmYXVsdHM6IHNldFVzZXJEZWZhdWx0cyxcblx0Z2V0U2hlbGxTZXJ2aWNlczogZ2V0U2hlbGxTZXJ2aWNlcyxcblx0Z2V0SGFzaDogZ2V0SGFzaCxcblx0Z2V0SUJOQWN0aW9uczogZm5HZXRJQk5BY3Rpb25zLFxuXHRnZXRIZWFkZXJGYWNldEl0ZW1Db25maWdGb3JFeHRlcm5hbE5hdmlnYXRpb246IGdldEhlYWRlckZhY2V0SXRlbUNvbmZpZ0ZvckV4dGVybmFsTmF2aWdhdGlvbixcblx0Z2V0U2VtYW50aWNPYmplY3RNYXBwaW5nOiBnZXRTZW1hbnRpY09iamVjdE1hcHBpbmcsXG5cdHNldFNlbWFudGljT2JqZWN0TWFwcGluZ3M6IHNldFNlbWFudGljT2JqZWN0TWFwcGluZ3MsXG5cdGdldFNlbWFudGljT2JqZWN0UHJvbWlzZTogZm5HZXRTZW1hbnRpY09iamVjdFByb21pc2UsXG5cdGdldFNlbWFudGljVGFyZ2V0c0Zyb21QYWdlTW9kZWw6IGZuR2V0U2VtYW50aWNUYXJnZXRzRnJvbVBhZ2VNb2RlbCxcblx0Z2V0U2VtYW50aWNPYmplY3RzRnJvbVBhdGg6IGZuR2V0U2VtYW50aWNPYmplY3RzRnJvbVBhdGgsXG5cdHVwZGF0ZVNlbWFudGljVGFyZ2V0czogZm5VcGRhdGVTZW1hbnRpY1RhcmdldHNNb2RlbCxcblx0Z2V0UHJvcGVydHlEYXRhVHlwZTogZ2V0UHJvcGVydHlEYXRhVHlwZSxcblx0Z2V0TmF2aWdhdGlvblJlc3RyaWN0aW9uczogZ2V0TmF2aWdhdGlvblJlc3RyaWN0aW9ucyxcblx0Z2V0U2VhcmNoUmVzdHJpY3Rpb25zOiBnZXRTZWFyY2hSZXN0cmljdGlvbnMsXG5cdGdldEZpbHRlclJlc3RyaWN0aW9uc0J5UGF0aDogZ2V0RmlsdGVyUmVzdHJpY3Rpb25zQnlQYXRoLFxuXHRnZXRTcGVjaWZpY0FsbG93ZWRFeHByZXNzaW9uOiBnZXRTcGVjaWZpY0FsbG93ZWRFeHByZXNzaW9uLFxuXHRnZXRBZGRpdGlvbmFsUGFyYW1zRm9yQ3JlYXRlOiBnZXRBZGRpdGlvbmFsUGFyYW1zRm9yQ3JlYXRlLFxuXHRyZXF1ZXN0U2luZ2xldG9uUHJvcGVydHk6IHJlcXVlc3RTaW5nbGV0b25Qcm9wZXJ0eSxcblx0dGVtcGxhdGVDb250cm9sRnJhZ21lbnQ6IHRlbXBsYXRlQ29udHJvbEZyYWdtZW50LFxuXHRhZGRFdmVudFRvQmluZGluZ0luZm86IGFkZEV2ZW50VG9CaW5kaW5nSW5mbyxcblx0c2V0T2JqZWN0TWFwcGluZ3M6IHNldE9iamVjdE1hcHBpbmdzLFxuXHRGaWx0ZXJSZXN0cmljdGlvbnM6IHtcblx0XHRSRVFVSVJFRF9QUk9QRVJUSUVTOiBcIlJlcXVpcmVkUHJvcGVydGllc1wiLFxuXHRcdE5PTl9GSUxURVJBQkxFX1BST1BFUlRJRVM6IFwiTm9uRmlsdGVyYWJsZVByb3BlcnRpZXNcIixcblx0XHRBTExPV0VEX0VYUFJFU1NJT05TOiBcIkZpbHRlckFsbG93ZWRFeHByZXNzaW9uc1wiXG5cdH0sXG5cdEFsbG93ZWRFeHByZXNzaW9uc1ByaW86IFtcIlNpbmdsZVZhbHVlXCIsIFwiTXVsdGlWYWx1ZVwiLCBcIlNpbmdsZVJhbmdlXCIsIFwiTXVsdGlSYW5nZVwiLCBcIlNlYXJjaEV4cHJlc3Npb25cIiwgXCJNdWx0aVJhbmdlT3JTZWFyY2hFeHByZXNzaW9uXCJdLFxuXHRmblByb2Nlc3NEYXRhTG9zc09yRHJhZnREaXNjYXJkQ29uZmlybWF0aW9uOiBmblByb2Nlc3NEYXRhTG9zc09yRHJhZnREaXNjYXJkQ29uZmlybWF0aW9uLFxuXHRub3JtYWxpemVTZWFyY2hUZXJtOiBub3JtYWxpemVTZWFyY2hUZXJtLFxuXHRmbk9uU3RyaWN0SGFuZGxpbmdGYWlsZWQ6IGZuT25TdHJpY3RIYW5kbGluZ0ZhaWxlZCxcblx0Z2V0U2luZ2xldG9uUGF0aDogZ2V0U2luZ2xldG9uUGF0aCxcblx0Z2V0TWVzc2FnZVN0cmlwVGV4dDogZ2V0TWVzc2FnZVN0cmlwVGV4dFxufTtcblxuZXhwb3J0IGRlZmF1bHQgQ29tbW9uVXRpbHM7XG4iXX0=