@sapui5/sap.fe.core 1.112.0 → 1.113.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 (325) hide show
  1. package/package.json +1 -1
  2. package/src/sap/fe/core/.library +1 -1
  3. package/src/sap/fe/core/ActionRuntime-dbg.js +4 -3
  4. package/src/sap/fe/core/ActionRuntime.js +1 -1
  5. package/src/sap/fe/core/ActionRuntime.js.map +1 -1
  6. package/src/sap/fe/core/ActionRuntime.ts +2 -1
  7. package/src/sap/fe/core/AppComponent-dbg.js +9 -5
  8. package/src/sap/fe/core/AppComponent.js +1 -1
  9. package/src/sap/fe/core/AppComponent.js.map +1 -1
  10. package/src/sap/fe/core/AppComponent.ts +8 -6
  11. package/src/sap/fe/core/CommonUtils-dbg.js +55 -173
  12. package/src/sap/fe/core/CommonUtils.js +1 -1
  13. package/src/sap/fe/core/CommonUtils.js.map +1 -1
  14. package/src/sap/fe/core/CommonUtils.ts +64 -208
  15. package/src/sap/fe/core/ExtensionAPI-dbg.js +3 -1
  16. package/src/sap/fe/core/ExtensionAPI.js.map +1 -1
  17. package/src/sap/fe/core/ExtensionAPI.ts +2 -0
  18. package/src/sap/fe/core/buildingBlocks/BuildingBlockBase-dbg.js +2 -1
  19. package/src/sap/fe/core/buildingBlocks/BuildingBlockBase.js +1 -1
  20. package/src/sap/fe/core/buildingBlocks/BuildingBlockBase.js.map +1 -1
  21. package/src/sap/fe/core/buildingBlocks/BuildingBlockBase.ts +1 -0
  22. package/src/sap/fe/core/buildingBlocks/BuildingBlockSupport-dbg.js +2 -2
  23. package/src/sap/fe/core/buildingBlocks/BuildingBlockSupport.js +1 -1
  24. package/src/sap/fe/core/buildingBlocks/BuildingBlockSupport.js.map +1 -1
  25. package/src/sap/fe/core/buildingBlocks/BuildingBlockSupport.ts +13 -18
  26. package/src/sap/fe/core/buildingBlocks/BuildingBlockTemplateProcessor-dbg.js +25 -17
  27. package/src/sap/fe/core/buildingBlocks/BuildingBlockTemplateProcessor.js +4 -4
  28. package/src/sap/fe/core/buildingBlocks/BuildingBlockTemplateProcessor.js.map +1 -1
  29. package/src/sap/fe/core/buildingBlocks/BuildingBlockTemplateProcessor.ts +34 -22
  30. package/src/sap/fe/core/buildingBlocks/RuntimeBuildingBlock-dbg.js +2 -2
  31. package/src/sap/fe/core/buildingBlocks/RuntimeBuildingBlock.js +1 -1
  32. package/src/sap/fe/core/buildingBlocks/RuntimeBuildingBlock.js.map +1 -1
  33. package/src/sap/fe/core/buildingBlocks/RuntimeBuildingBlock.ts +1 -1
  34. package/src/sap/fe/core/buildingBlocks/RuntimeBuildingBlockFragment-dbg.js +2 -2
  35. package/src/sap/fe/core/buildingBlocks/RuntimeBuildingBlockFragment.js +1 -1
  36. package/src/sap/fe/core/buildingBlocks/RuntimeBuildingBlockFragment.js.map +1 -1
  37. package/src/sap/fe/core/buildingBlocks/RuntimeBuildingBlockFragment.ts +3 -1
  38. package/src/sap/fe/core/controllerextensions/EditFlow-dbg.js +69 -34
  39. package/src/sap/fe/core/controllerextensions/EditFlow.js +1 -1
  40. package/src/sap/fe/core/controllerextensions/EditFlow.js.map +1 -1
  41. package/src/sap/fe/core/controllerextensions/EditFlow.ts +75 -42
  42. package/src/sap/fe/core/controllerextensions/InternalIntentBasedNavigation-dbg.js +25 -65
  43. package/src/sap/fe/core/controllerextensions/InternalIntentBasedNavigation.js +1 -1
  44. package/src/sap/fe/core/controllerextensions/InternalIntentBasedNavigation.js.map +1 -1
  45. package/src/sap/fe/core/controllerextensions/InternalIntentBasedNavigation.ts +25 -69
  46. package/src/sap/fe/core/controllerextensions/PageReady-dbg.js +3 -5
  47. package/src/sap/fe/core/controllerextensions/PageReady.js +1 -1
  48. package/src/sap/fe/core/controllerextensions/PageReady.js.map +1 -1
  49. package/src/sap/fe/core/controllerextensions/PageReady.ts +2 -4
  50. package/src/sap/fe/core/controllerextensions/collaboration/Manage-dbg.js +4 -4
  51. package/src/sap/fe/core/controllerextensions/collaboration/Manage.js +1 -1
  52. package/src/sap/fe/core/controllerextensions/collaboration/Manage.js.map +1 -1
  53. package/src/sap/fe/core/controllerextensions/collaboration/Manage.ts +2 -2
  54. package/src/sap/fe/core/controllerextensions/editFlow/NotApplicableContextDialog-dbg.js +103 -0
  55. package/src/sap/fe/core/controllerextensions/editFlow/NotApplicableContextDialog.js +6 -0
  56. package/src/sap/fe/core/controllerextensions/editFlow/NotApplicableContextDialog.js.map +1 -0
  57. package/src/sap/fe/core/controllerextensions/editFlow/NotApplicableContextDialog.tsx +124 -0
  58. package/src/sap/fe/core/controllerextensions/editFlow/TransactionHelper-dbg.js +34 -119
  59. package/src/sap/fe/core/controllerextensions/editFlow/TransactionHelper.js +1 -1
  60. package/src/sap/fe/core/controllerextensions/editFlow/TransactionHelper.js.map +1 -1
  61. package/src/sap/fe/core/controllerextensions/editFlow/TransactionHelper.ts +33 -118
  62. package/src/sap/fe/core/controllerextensions/editFlow/draft-dbg.js +6 -1
  63. package/src/sap/fe/core/controllerextensions/editFlow/draft.js +1 -1
  64. package/src/sap/fe/core/controllerextensions/editFlow/draft.js.map +1 -1
  65. package/src/sap/fe/core/controllerextensions/editFlow/draft.ts +9 -0
  66. package/src/sap/fe/core/controllerextensions/editFlow/operations/_internal-dbg.js +9 -4
  67. package/src/sap/fe/core/controllerextensions/editFlow/operations/_internal.js +1 -1
  68. package/src/sap/fe/core/controllerextensions/editFlow/operations/_internal.js.map +1 -1
  69. package/src/sap/fe/core/controllerextensions/editFlow/operations/_internal.ts +12 -3
  70. package/src/sap/fe/core/controllerextensions/editFlow/operations/facade-dbg.js +6 -3
  71. package/src/sap/fe/core/controllerextensions/editFlow/operations/facade.js +1 -1
  72. package/src/sap/fe/core/controllerextensions/editFlow/operations/facade.js.map +1 -1
  73. package/src/sap/fe/core/controllerextensions/editFlow/operations/facade.ts +16 -8
  74. package/src/sap/fe/core/controllerextensions/editFlow/sticky-dbg.js +1 -8
  75. package/src/sap/fe/core/controllerextensions/editFlow/sticky.js +1 -1
  76. package/src/sap/fe/core/controllerextensions/editFlow/sticky.js.map +1 -1
  77. package/src/sap/fe/core/controllerextensions/editFlow/sticky.ts +0 -9
  78. package/src/sap/fe/core/controllerextensions/messageHandler/messageHandling-dbg.js +11 -7
  79. package/src/sap/fe/core/controllerextensions/messageHandler/messageHandling.js +1 -1
  80. package/src/sap/fe/core/controllerextensions/messageHandler/messageHandling.js.map +1 -1
  81. package/src/sap/fe/core/controllerextensions/messageHandler/messageHandling.ts +11 -14
  82. package/src/sap/fe/core/controllerextensions/routing/RouterProxy-dbg.js +67 -1
  83. package/src/sap/fe/core/controllerextensions/routing/RouterProxy.js +1 -1
  84. package/src/sap/fe/core/controllerextensions/routing/RouterProxy.js.map +1 -1
  85. package/src/sap/fe/core/controllerextensions/routing/RouterProxy.ts +68 -0
  86. package/src/sap/fe/core/converters/ConverterContext-dbg.js +3 -5
  87. package/src/sap/fe/core/converters/ConverterContext.js +1 -1
  88. package/src/sap/fe/core/converters/ConverterContext.js.map +1 -1
  89. package/src/sap/fe/core/converters/ConverterContext.ts +2 -5
  90. package/src/sap/fe/core/converters/ManifestSettings-dbg.js +1 -1
  91. package/src/sap/fe/core/converters/ManifestSettings.ts +1 -1
  92. package/src/sap/fe/core/converters/ManifestWrapper-dbg.js +5 -3
  93. package/src/sap/fe/core/converters/ManifestWrapper.js +1 -1
  94. package/src/sap/fe/core/converters/ManifestWrapper.js.map +1 -1
  95. package/src/sap/fe/core/converters/ManifestWrapper.ts +7 -1
  96. package/src/sap/fe/core/converters/MetaModelConverter-dbg.js +19 -26
  97. package/src/sap/fe/core/converters/MetaModelConverter.js +1 -1
  98. package/src/sap/fe/core/converters/MetaModelConverter.js.map +1 -1
  99. package/src/sap/fe/core/converters/MetaModelConverter.ts +23 -28
  100. package/src/sap/fe/core/converters/annotations/DataField-dbg.js +18 -6
  101. package/src/sap/fe/core/converters/annotations/DataField.js +1 -1
  102. package/src/sap/fe/core/converters/annotations/DataField.js.map +1 -1
  103. package/src/sap/fe/core/converters/annotations/DataField.ts +15 -5
  104. package/src/sap/fe/core/converters/common/AnnotationConverter-dbg.js +35 -17
  105. package/src/sap/fe/core/converters/common/AnnotationConverter.js +1 -1
  106. package/src/sap/fe/core/converters/common/AnnotationConverter.js.map +1 -1
  107. package/src/sap/fe/core/converters/controls/Common/Action-dbg.js +6 -12
  108. package/src/sap/fe/core/converters/controls/Common/Action.js +1 -1
  109. package/src/sap/fe/core/converters/controls/Common/Action.js.map +1 -1
  110. package/src/sap/fe/core/converters/controls/Common/Action.ts +9 -14
  111. package/src/sap/fe/core/converters/controls/Common/Form-dbg.js +7 -6
  112. package/src/sap/fe/core/converters/controls/Common/Form.js +1 -1
  113. package/src/sap/fe/core/converters/controls/Common/Form.js.map +1 -1
  114. package/src/sap/fe/core/converters/controls/Common/Form.ts +5 -11
  115. package/src/sap/fe/core/converters/controls/Common/KPI-dbg.js +5 -5
  116. package/src/sap/fe/core/converters/controls/Common/KPI.js +1 -1
  117. package/src/sap/fe/core/converters/controls/Common/KPI.js.map +1 -1
  118. package/src/sap/fe/core/converters/controls/Common/KPI.ts +3 -4
  119. package/src/sap/fe/core/converters/controls/Common/Table-dbg.js +54 -32
  120. package/src/sap/fe/core/converters/controls/Common/Table.js +1 -1
  121. package/src/sap/fe/core/converters/controls/Common/Table.js.map +1 -1
  122. package/src/sap/fe/core/converters/controls/Common/Table.ts +69 -49
  123. package/src/sap/fe/core/converters/controls/Common/table/StandardActions-dbg.js +21 -14
  124. package/src/sap/fe/core/converters/controls/Common/table/StandardActions.js +1 -1
  125. package/src/sap/fe/core/converters/controls/Common/table/StandardActions.js.map +1 -1
  126. package/src/sap/fe/core/converters/controls/Common/table/StandardActions.ts +18 -15
  127. package/src/sap/fe/core/converters/controls/ListReport/FilterBar-dbg.js +92 -33
  128. package/src/sap/fe/core/converters/controls/ListReport/FilterBar.js +1 -1
  129. package/src/sap/fe/core/converters/controls/ListReport/FilterBar.js.map +1 -1
  130. package/src/sap/fe/core/converters/controls/ListReport/FilterBar.ts +93 -24
  131. package/src/sap/fe/core/converters/controls/ListReport/VisualFilters-dbg.js +8 -6
  132. package/src/sap/fe/core/converters/controls/ListReport/VisualFilters.js +1 -1
  133. package/src/sap/fe/core/converters/controls/ListReport/VisualFilters.js.map +1 -1
  134. package/src/sap/fe/core/converters/controls/ListReport/VisualFilters.ts +7 -4
  135. package/src/sap/fe/core/converters/controls/ObjectPage/SubSection-dbg.js +27 -18
  136. package/src/sap/fe/core/converters/controls/ObjectPage/SubSection.js +1 -1
  137. package/src/sap/fe/core/converters/controls/ObjectPage/SubSection.js.map +1 -1
  138. package/src/sap/fe/core/converters/controls/ObjectPage/SubSection.ts +36 -23
  139. package/src/sap/fe/core/converters/helpers/Aggregation-dbg.js +10 -14
  140. package/src/sap/fe/core/converters/helpers/Aggregation.js +1 -1
  141. package/src/sap/fe/core/converters/helpers/Aggregation.js.map +1 -1
  142. package/src/sap/fe/core/converters/helpers/Aggregation.ts +8 -11
  143. package/src/sap/fe/core/converters/helpers/BindingHelper-dbg.js +8 -6
  144. package/src/sap/fe/core/converters/helpers/BindingHelper.js +1 -1
  145. package/src/sap/fe/core/converters/helpers/BindingHelper.js.map +1 -1
  146. package/src/sap/fe/core/converters/helpers/BindingHelper.ts +8 -6
  147. package/src/sap/fe/core/converters/helpers/IssueManager-dbg.js +3 -2
  148. package/src/sap/fe/core/converters/helpers/IssueManager.js +1 -1
  149. package/src/sap/fe/core/converters/helpers/IssueManager.js.map +1 -1
  150. package/src/sap/fe/core/converters/helpers/IssueManager.ts +2 -1
  151. package/src/sap/fe/core/converters/objectPage/HeaderAndFooterAction-dbg.js +17 -16
  152. package/src/sap/fe/core/converters/objectPage/HeaderAndFooterAction.js +1 -1
  153. package/src/sap/fe/core/converters/objectPage/HeaderAndFooterAction.js.map +1 -1
  154. package/src/sap/fe/core/converters/objectPage/HeaderAndFooterAction.ts +11 -11
  155. package/src/sap/fe/core/converters/templates/ListReportConverter-dbg.js +8 -3
  156. package/src/sap/fe/core/converters/templates/ListReportConverter.js +1 -1
  157. package/src/sap/fe/core/converters/templates/ListReportConverter.js.map +1 -1
  158. package/src/sap/fe/core/converters/templates/ListReportConverter.ts +7 -2
  159. package/src/sap/fe/core/converters/templates/ObjectPageConverter-dbg.js +2 -2
  160. package/src/sap/fe/core/converters/templates/ObjectPageConverter.js +1 -1
  161. package/src/sap/fe/core/converters/templates/ObjectPageConverter.js.map +1 -1
  162. package/src/sap/fe/core/converters/templates/ObjectPageConverter.ts +2 -2
  163. package/src/sap/fe/core/formatters/TableFormatter-dbg.js +2 -6
  164. package/src/sap/fe/core/formatters/TableFormatter.js +1 -1
  165. package/src/sap/fe/core/formatters/TableFormatter.js.map +1 -1
  166. package/src/sap/fe/core/formatters/TableFormatter.ts +1 -5
  167. package/src/sap/fe/core/formatters/ValueFormatter-dbg.js +5 -1
  168. package/src/sap/fe/core/formatters/ValueFormatter.js +1 -1
  169. package/src/sap/fe/core/formatters/ValueFormatter.js.map +1 -1
  170. package/src/sap/fe/core/formatters/ValueFormatter.ts +5 -0
  171. package/src/sap/fe/core/fpm/manifest.json +1 -1
  172. package/src/sap/fe/core/helpers/BindingToolkit-dbg.js +2 -1
  173. package/src/sap/fe/core/helpers/BindingToolkit.js +1 -1
  174. package/src/sap/fe/core/helpers/BindingToolkit.js.map +1 -1
  175. package/src/sap/fe/core/helpers/BindingToolkit.ts +1 -1
  176. package/src/sap/fe/core/helpers/MassEditHelper-dbg.js +5 -4
  177. package/src/sap/fe/core/helpers/MassEditHelper.js +1 -1
  178. package/src/sap/fe/core/helpers/MassEditHelper.js.map +1 -1
  179. package/src/sap/fe/core/helpers/MassEditHelper.ts +4 -5
  180. package/src/sap/fe/core/helpers/MessageStrip-dbg.js +6 -5
  181. package/src/sap/fe/core/helpers/MessageStrip.js +1 -1
  182. package/src/sap/fe/core/helpers/MessageStrip.js.map +1 -1
  183. package/src/sap/fe/core/helpers/MessageStrip.ts +4 -4
  184. package/src/sap/fe/core/helpers/MetaModelFunction-dbg.js +167 -4
  185. package/src/sap/fe/core/helpers/MetaModelFunction.js +1 -1
  186. package/src/sap/fe/core/helpers/MetaModelFunction.js.map +1 -1
  187. package/src/sap/fe/core/helpers/MetaModelFunction.ts +205 -3
  188. package/src/sap/fe/core/helpers/ModelHelper-dbg.js +37 -73
  189. package/src/sap/fe/core/helpers/ModelHelper.js +1 -1
  190. package/src/sap/fe/core/helpers/ModelHelper.js.map +1 -1
  191. package/src/sap/fe/core/helpers/ModelHelper.ts +41 -68
  192. package/src/sap/fe/core/helpers/ResourceModelHelper-dbg.js +15 -2
  193. package/src/sap/fe/core/helpers/ResourceModelHelper.js +1 -1
  194. package/src/sap/fe/core/helpers/ResourceModelHelper.js.map +1 -1
  195. package/src/sap/fe/core/helpers/ResourceModelHelper.ts +16 -0
  196. package/src/sap/fe/core/helpers/SemanticDateOperators-dbg.js +40 -6
  197. package/src/sap/fe/core/helpers/SemanticDateOperators.js +1 -1
  198. package/src/sap/fe/core/helpers/SemanticDateOperators.js.map +1 -1
  199. package/src/sap/fe/core/helpers/SemanticDateOperators.ts +39 -5
  200. package/src/sap/fe/core/helpers/SizeHelper-dbg.js +53 -0
  201. package/src/sap/fe/core/helpers/SizeHelper.js +6 -0
  202. package/src/sap/fe/core/helpers/SizeHelper.js.map +1 -0
  203. package/src/sap/fe/core/helpers/SizeHelper.ts +51 -0
  204. package/src/sap/fe/core/helpers/StableIdHelper-dbg.js +29 -25
  205. package/src/sap/fe/core/helpers/StableIdHelper.js +1 -1
  206. package/src/sap/fe/core/helpers/StableIdHelper.js.map +1 -1
  207. package/src/sap/fe/core/helpers/StableIdHelper.ts +26 -24
  208. package/src/sap/fe/core/helpers/TypeGuards-dbg.js +147 -1
  209. package/src/sap/fe/core/helpers/TypeGuards.js +1 -1
  210. package/src/sap/fe/core/helpers/TypeGuards.js.map +1 -1
  211. package/src/sap/fe/core/helpers/TypeGuards.ts +151 -1
  212. package/src/sap/fe/core/library-dbg.js +1 -1
  213. package/src/sap/fe/core/library-preload.js +84 -70
  214. package/src/sap/fe/core/library-preload.js.map +1 -1
  215. package/src/sap/fe/core/library.js +1 -1
  216. package/src/sap/fe/core/manifest.json +1 -1
  217. package/src/sap/fe/core/manifestMerger/ChangePageConfiguration-dbg.js +67 -15
  218. package/src/sap/fe/core/manifestMerger/ChangePageConfiguration.js +1 -1
  219. package/src/sap/fe/core/manifestMerger/ChangePageConfiguration.js.map +1 -1
  220. package/src/sap/fe/core/manifestMerger/ChangePageConfiguration.ts +66 -14
  221. package/src/sap/fe/core/messagebundle.properties +2 -0
  222. package/src/sap/fe/core/messagebundle_ar.properties +4 -3
  223. package/src/sap/fe/core/messagebundle_bg.properties +10 -9
  224. package/src/sap/fe/core/messagebundle_ca.properties +1 -0
  225. package/src/sap/fe/core/messagebundle_cs.properties +2 -1
  226. package/src/sap/fe/core/messagebundle_cy.properties +2 -1
  227. package/src/sap/fe/core/messagebundle_da.properties +2 -1
  228. package/src/sap/fe/core/messagebundle_de.properties +11 -10
  229. package/src/sap/fe/core/messagebundle_el.properties +4 -3
  230. package/src/sap/fe/core/messagebundle_en.properties +1 -0
  231. package/src/sap/fe/core/messagebundle_en_GB.properties +2 -1
  232. package/src/sap/fe/core/messagebundle_en_US_saprigi.properties +1 -0
  233. package/src/sap/fe/core/messagebundle_en_US_saptrc.properties +2 -0
  234. package/src/sap/fe/core/messagebundle_es.properties +2 -1
  235. package/src/sap/fe/core/messagebundle_es_MX.properties +2 -1
  236. package/src/sap/fe/core/messagebundle_et.properties +2 -1
  237. package/src/sap/fe/core/messagebundle_fi.properties +2 -1
  238. package/src/sap/fe/core/messagebundle_fr.properties +2 -1
  239. package/src/sap/fe/core/messagebundle_fr_CA.properties +11 -10
  240. package/src/sap/fe/core/messagebundle_hi.properties +11 -10
  241. package/src/sap/fe/core/messagebundle_hr.properties +2 -1
  242. package/src/sap/fe/core/messagebundle_hu.properties +2 -1
  243. package/src/sap/fe/core/messagebundle_id.properties +11 -10
  244. package/src/sap/fe/core/messagebundle_it.properties +2 -1
  245. package/src/sap/fe/core/messagebundle_iw.properties +2 -1
  246. package/src/sap/fe/core/messagebundle_ja.properties +3 -2
  247. package/src/sap/fe/core/messagebundle_kk.properties +2 -1
  248. package/src/sap/fe/core/messagebundle_ko.properties +11 -10
  249. package/src/sap/fe/core/messagebundle_lt.properties +2 -1
  250. package/src/sap/fe/core/messagebundle_lv.properties +11 -10
  251. package/src/sap/fe/core/messagebundle_ms.properties +2 -1
  252. package/src/sap/fe/core/messagebundle_nl.properties +2 -1
  253. package/src/sap/fe/core/messagebundle_no.properties +2 -1
  254. package/src/sap/fe/core/messagebundle_pl.properties +11 -10
  255. package/src/sap/fe/core/messagebundle_pt.properties +2 -1
  256. package/src/sap/fe/core/messagebundle_pt_PT.properties +2 -1
  257. package/src/sap/fe/core/messagebundle_ro.properties +14 -13
  258. package/src/sap/fe/core/messagebundle_ru.properties +11 -10
  259. package/src/sap/fe/core/messagebundle_sh.properties +2 -1
  260. package/src/sap/fe/core/messagebundle_sk.properties +2 -1
  261. package/src/sap/fe/core/messagebundle_sl.properties +2 -1
  262. package/src/sap/fe/core/messagebundle_sv.properties +11 -10
  263. package/src/sap/fe/core/messagebundle_th.properties +2 -1
  264. package/src/sap/fe/core/messagebundle_tr.properties +2 -1
  265. package/src/sap/fe/core/messagebundle_uk.properties +2 -1
  266. package/src/sap/fe/core/messagebundle_vi.properties +2 -1
  267. package/src/sap/fe/core/messagebundle_zh_CN.properties +11 -10
  268. package/src/sap/fe/core/messagebundle_zh_TW.properties +11 -10
  269. package/src/sap/fe/core/rootView/RootViewBaseController-dbg.js +8 -4
  270. package/src/sap/fe/core/rootView/RootViewBaseController.js +1 -1
  271. package/src/sap/fe/core/rootView/RootViewBaseController.js.map +1 -1
  272. package/src/sap/fe/core/rootView/RootViewBaseController.ts +7 -3
  273. package/src/sap/fe/core/services/RoutingServiceFactory-dbg.js +7 -1
  274. package/src/sap/fe/core/services/RoutingServiceFactory.js +1 -1
  275. package/src/sap/fe/core/services/RoutingServiceFactory.js.map +1 -1
  276. package/src/sap/fe/core/services/RoutingServiceFactory.ts +6 -0
  277. package/src/sap/fe/core/services/ShellServicesFactory-dbg.js +7 -1
  278. package/src/sap/fe/core/services/ShellServicesFactory.js +1 -1
  279. package/src/sap/fe/core/services/ShellServicesFactory.js.map +1 -1
  280. package/src/sap/fe/core/services/ShellServicesFactory.ts +10 -0
  281. package/src/sap/fe/core/services/SideEffectsServiceFactory-dbg.js +6 -6
  282. package/src/sap/fe/core/services/SideEffectsServiceFactory.js +1 -1
  283. package/src/sap/fe/core/services/SideEffectsServiceFactory.js.map +1 -1
  284. package/src/sap/fe/core/services/SideEffectsServiceFactory.ts +3 -8
  285. package/src/sap/fe/core/services/TemplatedViewServiceFactory-dbg.js +10 -3
  286. package/src/sap/fe/core/services/TemplatedViewServiceFactory.js +1 -1
  287. package/src/sap/fe/core/services/TemplatedViewServiceFactory.js.map +1 -1
  288. package/src/sap/fe/core/services/TemplatedViewServiceFactory.ts +13 -1
  289. package/src/sap/fe/core/templating/CommonFormatters-dbg.js +4 -3
  290. package/src/sap/fe/core/templating/CommonFormatters.js +1 -1
  291. package/src/sap/fe/core/templating/CommonFormatters.js.map +1 -1
  292. package/src/sap/fe/core/templating/CommonFormatters.ts +2 -2
  293. package/src/sap/fe/core/templating/DataModelPathHelper-dbg.js +19 -18
  294. package/src/sap/fe/core/templating/DataModelPathHelper.js +1 -1
  295. package/src/sap/fe/core/templating/DataModelPathHelper.js.map +1 -1
  296. package/src/sap/fe/core/templating/DataModelPathHelper.ts +24 -18
  297. package/src/sap/fe/core/templating/DisplayModeFormatter-dbg.js +5 -5
  298. package/src/sap/fe/core/templating/DisplayModeFormatter.js +1 -1
  299. package/src/sap/fe/core/templating/DisplayModeFormatter.js.map +1 -1
  300. package/src/sap/fe/core/templating/DisplayModeFormatter.ts +2 -2
  301. package/src/sap/fe/core/templating/EntitySetHelper-dbg.js +19 -28
  302. package/src/sap/fe/core/templating/EntitySetHelper.js +1 -1
  303. package/src/sap/fe/core/templating/EntitySetHelper.js.map +1 -1
  304. package/src/sap/fe/core/templating/EntitySetHelper.ts +14 -24
  305. package/src/sap/fe/core/templating/EntityTypeHelper-dbg.js +48 -0
  306. package/src/sap/fe/core/templating/EntityTypeHelper.js +6 -0
  307. package/src/sap/fe/core/templating/EntityTypeHelper.js.map +1 -0
  308. package/src/sap/fe/core/templating/EntityTypeHelper.ts +37 -0
  309. package/src/sap/fe/core/templating/FilterTemplating-dbg.js +7 -8
  310. package/src/sap/fe/core/templating/FilterTemplating.js +1 -1
  311. package/src/sap/fe/core/templating/FilterTemplating.js.map +1 -1
  312. package/src/sap/fe/core/templating/FilterTemplating.ts +5 -8
  313. package/src/sap/fe/core/templating/PropertyFormatters-dbg.js +1 -6
  314. package/src/sap/fe/core/templating/PropertyFormatters.js +1 -1
  315. package/src/sap/fe/core/templating/PropertyFormatters.js.map +1 -1
  316. package/src/sap/fe/core/templating/PropertyFormatters.ts +0 -5
  317. package/src/sap/fe/core/templating/PropertyHelper-dbg.js +13 -46
  318. package/src/sap/fe/core/templating/PropertyHelper.js +1 -1
  319. package/src/sap/fe/core/templating/PropertyHelper.js.map +1 -1
  320. package/src/sap/fe/core/templating/PropertyHelper.ts +14 -43
  321. package/src/sap/fe/core/templating/UIFormatters-dbg.js +32 -26
  322. package/src/sap/fe/core/templating/UIFormatters.js +1 -1
  323. package/src/sap/fe/core/templating/UIFormatters.js.map +1 -1
  324. package/src/sap/fe/core/templating/UIFormatters.ts +43 -32
  325. package/src/sap/fe/core/controls/ActionPartial.fragment.xml +0 -91
@@ -45,13 +45,6 @@ sap.ui.define(["sap/base/Log", "sap/base/util/array/uniqueSort", "sap/base/util/
45
45
 
46
46
  // there is no navigation in entitySet path and property path
47
47
 
48
- function getShellServices(oControl) {
49
- return getAppComponent(oControl).getShellServices();
50
- }
51
- function getHash() {
52
- const sHash = window.location.hash;
53
- return sHash.split("&")[0];
54
- }
55
48
  async function _getSOIntents(oShellServiceHelper, oObjectPageLayout, oSemanticObject, oParam) {
56
49
  return oShellServiceHelper.getLinks({
57
50
  semanticObject: oSemanticObject,
@@ -138,7 +131,7 @@ sap.ui.define(["sap/base/Log", "sap/base/util/array/uniqueSort", "sap/base/util/
138
131
  }
139
132
  }
140
133
  async function updateRelateAppsModel(oBindingContext, oEntry, oObjectPageLayout, aSemKeys, oMetaModel, oMetaPath, appComponent) {
141
- const oShellServiceHelper = getShellServices(oObjectPageLayout);
134
+ const oShellServiceHelper = appComponent.getShellServices();
142
135
  const oParam = {};
143
136
  let sCurrentSemObj = "",
144
137
  sCurrentAction = "";
@@ -204,7 +197,6 @@ sap.ui.define(["sap/base/Log", "sap/base/util/array/uniqueSort", "sap/base/util/
204
197
  const aLinks = await fnGetParseShellHashAndGetLinks();
205
198
  if (aLinks) {
206
199
  if (aLinks.length > 0) {
207
- var _oManifestData$additi;
208
200
  let isSemanticObjectHasSameTargetInManifest = false;
209
201
  const oTargetParams = {};
210
202
  const aAnnotationsSOItems = [];
@@ -233,7 +225,7 @@ sap.ui.define(["sap/base/Log", "sap/base/util/array/uniqueSort", "sap/base/util/
233
225
  });
234
226
 
235
227
  // remove all actions from current hash application if manifest contains empty allowedActions
236
- if (oManifestData.additionalSemanticObjects && aAnnotationsSOItems[0] && oManifestData.additionalSemanticObjects[aAnnotationsSOItems[0].targetSemObject] && ((_oManifestData$additi = oManifestData.additionalSemanticObjects[aAnnotationsSOItems[0].targetSemObject].allowedActions) === null || _oManifestData$additi === void 0 ? void 0 : _oManifestData$additi.length) === 0) {
228
+ if (oManifestData.additionalSemanticObjects && aAnnotationsSOItems[0] && oManifestData.additionalSemanticObjects[aAnnotationsSOItems[0].targetSemObject] && !!oManifestData.additionalSemanticObjects[aAnnotationsSOItems[0].targetSemObject].allowedActions) {
237
229
  isSemanticObjectHasSameTargetInManifest = true;
238
230
  }
239
231
  const soItems = aManifestSOItems.concat(appComponentSOItems);
@@ -312,13 +304,6 @@ sap.ui.define(["sap/base/Log", "sap/base/util/array/uniqueSort", "sap/base/util/
312
304
  oButton.firePress();
313
305
  }
314
306
  }
315
- function fnResolveStringtoBoolean(sValue) {
316
- if (sValue === "true" || sValue === true) {
317
- return true;
318
- } else {
319
- return false;
320
- }
321
- }
322
307
  function getAppComponent(oControl) {
323
308
  if (oControl.isA("sap.fe.core.AppComponent")) {
324
309
  return oControl;
@@ -344,48 +329,6 @@ sap.ui.define(["sap/base/Log", "sap/base/util/array/uniqueSort", "sap/base/util/
344
329
  }
345
330
  return oControl;
346
331
  }
347
- function isFieldControlPathInapplicable(sFieldControlPath, oAttribute) {
348
- let bInapplicable = false;
349
- const aParts = sFieldControlPath.split("/");
350
- // sensitive data is removed only if the path has already been resolved.
351
- if (aParts.length > 1) {
352
- bInapplicable = oAttribute[aParts[0]] !== undefined && oAttribute[aParts[0]].hasOwnProperty(aParts[1]) && oAttribute[aParts[0]][aParts[1]] === 0;
353
- } else {
354
- bInapplicable = oAttribute[sFieldControlPath] === 0;
355
- }
356
- return bInapplicable;
357
- }
358
- function removeSensitiveData(aAttributes, oMetaModel) {
359
- const aOutAttributes = [];
360
- for (let i = 0; i < aAttributes.length; i++) {
361
- const sEntitySet = aAttributes[i].entitySet,
362
- oAttribute = aAttributes[i].contextData;
363
- delete oAttribute["@odata.context"];
364
- delete oAttribute["%40odata.context"];
365
- delete oAttribute["@odata.metadataEtag"];
366
- delete oAttribute["%40odata.metadataEtag"];
367
- delete oAttribute["SAP__Messages"];
368
- const aProperties = Object.keys(oAttribute);
369
- for (let j = 0; j < aProperties.length; j++) {
370
- const sProp = aProperties[j],
371
- aPropertyAnnotations = oMetaModel.getObject(`/${sEntitySet}/${sProp}@`);
372
- if (aPropertyAnnotations) {
373
- if (aPropertyAnnotations["@com.sap.vocabularies.PersonalData.v1.IsPotentiallySensitive"] || aPropertyAnnotations["@com.sap.vocabularies.UI.v1.ExcludeFromNavigationContext"] || aPropertyAnnotations["@com.sap.vocabularies.Analytics.v1.Measure"]) {
374
- delete oAttribute[sProp];
375
- } else if (aPropertyAnnotations["@com.sap.vocabularies.Common.v1.FieldControl"]) {
376
- const oFieldControl = aPropertyAnnotations["@com.sap.vocabularies.Common.v1.FieldControl"];
377
- if (oFieldControl["$EnumMember"] && oFieldControl["$EnumMember"].split("/")[1] === "Inapplicable") {
378
- delete oAttribute[sProp];
379
- } else if (oFieldControl["$Path"] && CommonUtils.isFieldControlPathInapplicable(oFieldControl["$Path"], oAttribute)) {
380
- delete oAttribute[sProp];
381
- }
382
- }
383
- }
384
- }
385
- aOutAttributes.push(oAttribute);
386
- }
387
- return aOutAttributes;
388
- }
389
332
  function _fnCheckIsMatch(oObject, oKeysToCheck) {
390
333
  for (const sKey in oKeysToCheck) {
391
334
  if (oKeysToCheck[sKey] !== oObject[sKey]) {
@@ -442,6 +385,7 @@ sap.ui.define(["sap/base/Log", "sap/base/util/array/uniqueSort", "sap/base/util/
442
385
  */
443
386
  function fnUpdateDataFieldForIBNButtonsVisibility(aIBNActions, oView) {
444
387
  const oParams = {};
388
+ const oAppComponent = CommonUtils.getAppComponent(oView);
445
389
  const isSticky = ModelHelper.isStickySessionSupported(oView.getModel().getMetaModel());
446
390
  const fnGetLinks = function (oData) {
447
391
  if (oData) {
@@ -458,7 +402,7 @@ sap.ui.define(["sap/base/Log", "sap/base/util/array/uniqueSort", "sap/base/util/
458
402
  aIBNActions.forEach(function (oIBNAction) {
459
403
  const sSemanticObject = oIBNAction.data("IBNData").semanticObject;
460
404
  const sAction = oIBNAction.data("IBNData").action;
461
- CommonUtils.getShellServices(oView).getLinks({
405
+ oAppComponent.getShellServices().getLinks({
462
406
  semanticObject: sSemanticObject,
463
407
  action: sAction,
464
408
  params: oParams
@@ -642,7 +586,6 @@ sap.ui.define(["sap/base/Log", "sap/base/util/array/uniqueSort", "sap/base/util/
642
586
  const aSingleRangeOps = ["EQ", "GE", "LE", "LT", "GT", "BT", "NOTLE", "NOTLT", "NOTGE", "NOTGT"];
643
587
  const aSingleRangeDTBasicOps = ["EQ", "BT"];
644
588
  const aSingleValueDateOps = ["TODAY", "TOMORROW", "YESTERDAY", "DATE", "FIRSTDAYWEEK", "LASTDAYWEEK", "FIRSTDAYMONTH", "LASTDAYMONTH", "FIRSTDAYQUARTER", "LASTDAYQUARTER", "FIRSTDAYYEAR", "LASTDAYYEAR"];
645
- const aBasicDateTimeOps = ["EQ", "BT"];
646
589
  const aMultiRangeOps = ["EQ", "GE", "LE", "LT", "GT", "BT", "NE", "NOTBT", "NOTLE", "NOTLT", "NOTGE", "NOTGT"];
647
590
  const aSearchExpressionOps = ["Contains", "NotContains", "StartsWith", "NotStartsWith", "EndsWith", "NotEndsWith"];
648
591
  const aSemanticDateOpsExt = SemanticDateOperators.getSupportedOperations();
@@ -653,9 +596,9 @@ sap.ui.define(["sap/base/Log", "sap/base/util/array/uniqueSort", "sap/base/util/
653
596
  return aEqualsOps;
654
597
  }
655
598
  if (oSettings && oSettings.operatorConfiguration && oSettings.operatorConfiguration.length > 0) {
656
- aSemanticDateOps = SemanticDateOperators.getFilterOperations(oSettings.operatorConfiguration);
599
+ aSemanticDateOps = SemanticDateOperators.getFilterOperations(oSettings.operatorConfiguration, sType);
657
600
  } else {
658
- aSemanticDateOps = SemanticDateOperators.getSemanticDateOperations();
601
+ aSemanticDateOps = SemanticDateOperators.getSemanticDateOperations(sType);
659
602
  }
660
603
  // Get the default Operators for this Property Type
661
604
  let aDefaultOperators = _getDefaultOperators(sType);
@@ -686,7 +629,7 @@ sap.ui.define(["sap/base/Log", "sap/base/util/array/uniqueSort", "sap/base/util/
686
629
  if (sType === "Edm.Date") {
687
630
  aExpressionOps = aSemanticDateOps;
688
631
  } else if (sType === "Edm.DateTimeOffset") {
689
- aExpressionOps = aSemanticDateOps.concat(aBasicDateTimeOps);
632
+ aExpressionOps = aSemanticDateOps;
690
633
  } else {
691
634
  aExpressionOps = aSingleRangeOps;
692
635
  }
@@ -1155,55 +1098,46 @@ sap.ui.define(["sap/base/Log", "sap/base/util/array/uniqueSort", "sap/base/util/
1155
1098
  }
1156
1099
  }
1157
1100
  }
1101
+ /**
1102
+ * Retrieves the user defaults from the startup app state (if available) or the startup parameter and sets them to a model.
1103
+ *
1104
+ * @param oAppComponent
1105
+ * @param aParameters
1106
+ * @param oModel
1107
+ * @param bIsAction
1108
+ * @param bIsCreate
1109
+ * @param oActionDefaultValues
1110
+ */
1158
1111
  async function setUserDefaults(oAppComponent, aParameters, oModel, bIsAction, bIsCreate, oActionDefaultValues) {
1159
- return new Promise(function (resolve) {
1160
- const oComponentData = oAppComponent.getComponentData(),
1161
- oStartupParameters = oComponentData && oComponentData.startupParameters || {},
1162
- oShellServices = oAppComponent.getShellServices();
1163
- if (!oShellServices.hasUShell()) {
1164
- aParameters.forEach(function (oParameter) {
1165
- var _oParameter$getPath;
1166
- const sPropertyName = bIsAction ? `/${oParameter.$Name}` : (_oParameter$getPath = oParameter.getPath) === null || _oParameter$getPath === void 0 ? void 0 : _oParameter$getPath.call(oParameter).slice(oParameter.getPath().lastIndexOf("/") + 1);
1167
- const sParameterName = bIsAction ? sPropertyName.slice(1) : sPropertyName;
1168
- if (oActionDefaultValues && bIsCreate) {
1169
- if (oActionDefaultValues[sParameterName]) {
1170
- oModel.setProperty(sPropertyName, oActionDefaultValues[sParameterName]);
1112
+ const oComponentData = oAppComponent.getComponentData(),
1113
+ oStartupParameters = oComponentData && oComponentData.startupParameters || {},
1114
+ oShellServices = oAppComponent.getShellServices();
1115
+ const oStartupAppState = await oShellServices.getStartupAppState(oAppComponent);
1116
+ const oData = (oStartupAppState === null || oStartupAppState === void 0 ? void 0 : oStartupAppState.getData()) || {},
1117
+ aExtendedParameters = oData.selectionVariant && oData.selectionVariant.SelectOptions || [];
1118
+ aParameters.forEach(function (oParameter) {
1119
+ var _oParameter$getPath;
1120
+ const sPropertyName = bIsAction ? `/${oParameter.$Name}` : (_oParameter$getPath = oParameter.getPath) === null || _oParameter$getPath === void 0 ? void 0 : _oParameter$getPath.call(oParameter).slice(oParameter.getPath().lastIndexOf("/") + 1);
1121
+ const sParameterName = bIsAction ? sPropertyName.slice(1) : sPropertyName;
1122
+ if (oActionDefaultValues && bIsCreate) {
1123
+ if (oActionDefaultValues[sParameterName]) {
1124
+ oModel.setProperty(sPropertyName, oActionDefaultValues[sParameterName]);
1125
+ }
1126
+ } else if (oStartupParameters[sParameterName]) {
1127
+ oModel.setProperty(sPropertyName, oStartupParameters[sParameterName][0]);
1128
+ } else if (aExtendedParameters.length > 0) {
1129
+ for (const oExtendedParameter of aExtendedParameters) {
1130
+ if (oExtendedParameter.PropertyName === sParameterName) {
1131
+ const oRange = oExtendedParameter.Ranges.length ? oExtendedParameter.Ranges[oExtendedParameter.Ranges.length - 1] : undefined;
1132
+ if (oRange && oRange.Sign === "I" && oRange.Option === "EQ") {
1133
+ oModel.setProperty(sPropertyName, oRange.Low); // high is ignored when Option=EQ
1171
1134
  }
1172
- } else if (oStartupParameters[sParameterName]) {
1173
- oModel.setProperty(sPropertyName, oStartupParameters[sParameterName][0]);
1174
1135
  }
1175
- });
1176
- return resolve(true);
1136
+ }
1177
1137
  }
1178
- return oShellServices.getStartupAppState(oAppComponent).then(function (oStartupAppState) {
1179
- const oData = (oStartupAppState === null || oStartupAppState === void 0 ? void 0 : oStartupAppState.getData()) || {},
1180
- aExtendedParameters = oData.selectionVariant && oData.selectionVariant.SelectOptions || [];
1181
- aParameters.forEach(function (oParameter) {
1182
- var _oParameter$getPath2;
1183
- const sPropertyName = bIsAction ? `/${oParameter.$Name}` : (_oParameter$getPath2 = oParameter.getPath) === null || _oParameter$getPath2 === void 0 ? void 0 : _oParameter$getPath2.call(oParameter).slice(oParameter.getPath().lastIndexOf("/") + 1);
1184
- const sParameterName = bIsAction ? sPropertyName.slice(1) : sPropertyName;
1185
- if (oActionDefaultValues && bIsCreate) {
1186
- if (oActionDefaultValues[sParameterName]) {
1187
- oModel.setProperty(sPropertyName, oActionDefaultValues[sParameterName]);
1188
- }
1189
- } else if (oStartupParameters[sParameterName]) {
1190
- oModel.setProperty(sPropertyName, oStartupParameters[sParameterName][0]);
1191
- } else if (aExtendedParameters.length > 0) {
1192
- for (const oExtendedParameter of aExtendedParameters) {
1193
- if (oExtendedParameter.PropertyName === sParameterName) {
1194
- const oRange = oExtendedParameter.Ranges.length ? oExtendedParameter.Ranges[oExtendedParameter.Ranges.length - 1] : undefined;
1195
- if (oRange && oRange.Sign === "I" && oRange.Option === "EQ") {
1196
- oModel.setProperty(sPropertyName, oRange.Low); // high is ignored when Option=EQ
1197
- }
1198
- }
1199
- }
1200
- }
1201
- });
1202
-
1203
- return resolve(true);
1204
- });
1205
1138
  });
1206
1139
  }
1140
+
1207
1141
  function getAdditionalParamsForCreate(oStartupParameters, oInboundParameters) {
1208
1142
  const oInbounds = oInboundParameters,
1209
1143
  aCreateParameters = oInbounds !== undefined ? Object.keys(oInbounds).filter(function (sParameter) {
@@ -1453,8 +1387,8 @@ sap.ui.define(["sap/base/Log", "sap/base/util/array/uniqueSort", "sap/base/util/
1453
1387
  }
1454
1388
  let aSemanticObjectsFound = _fnfindValues(oPageModel, "semanticObjectPath");
1455
1389
  aSemanticObjectsFound = _fnDeleteDuplicateSemanticObjects(aSemanticObjectsFound);
1456
- const oShellServiceHelper = CommonUtils.getShellServices(oAppComponent);
1457
- let sCurrentHash = CommonUtils.getHash();
1390
+ const oShellServiceHelper = oAppComponent.getShellServices();
1391
+ let sCurrentHash = oShellServiceHelper.getHash();
1458
1392
  const aSemanticObjectsForGetLinks = [];
1459
1393
  const aSemanticObjects = [];
1460
1394
  let _oSemanticObject;
@@ -1627,20 +1561,17 @@ sap.ui.define(["sap/base/Log", "sap/base/util/array/uniqueSort", "sap/base/util/
1627
1561
  return oModifier.targets === "xmlTree" && oFragment.length > 0 ? oFragment[0] : oFragment;
1628
1562
  });
1629
1563
  } else {
1630
- return loadMacroLibrary().then(async function () {
1631
- return XMLPreprocessor.process(XMLTemplateProcessor.loadTemplate(sFragmentName, "fragment"), {
1632
- name: sFragmentName
1633
- }, oPreprocessorSettings);
1634
- }).then(async function (oFragment) {
1635
- const oControl = oFragment.firstElementChild;
1636
- if (!!oOptions.isXML && oControl) {
1637
- return oControl;
1638
- }
1639
- return Fragment.load({
1640
- id: oOptions.id,
1641
- definition: oFragment,
1642
- controller: oOptions.controller
1643
- });
1564
+ const oFragment = await XMLPreprocessor.process(XMLTemplateProcessor.loadTemplate(sFragmentName, "fragment"), {
1565
+ name: sFragmentName
1566
+ }, oPreprocessorSettings);
1567
+ const oControl = oFragment.firstElementChild;
1568
+ if (!!oOptions.isXML && oControl) {
1569
+ return oControl;
1570
+ }
1571
+ return Fragment.load({
1572
+ id: oOptions.id,
1573
+ definition: oFragment,
1574
+ controller: oOptions.controller
1644
1575
  });
1645
1576
  }
1646
1577
  }
@@ -1668,48 +1599,6 @@ sap.ui.define(["sap/base/Log", "sap/base/util/array/uniqueSort", "sap/base/util/
1668
1599
  }
1669
1600
  return Promise.resolve(null);
1670
1601
  }
1671
- function addEventToBindingInfo(oControl, sEventName, fHandler) {
1672
- let oBindingInfo;
1673
- const setBindingInfo = function () {
1674
- if (oBindingInfo) {
1675
- if (!oBindingInfo.events) {
1676
- oBindingInfo.events = {};
1677
- }
1678
- if (!oBindingInfo.events[sEventName]) {
1679
- oBindingInfo.events[sEventName] = fHandler;
1680
- } else {
1681
- const fOriginalHandler = oBindingInfo.events[sEventName];
1682
- oBindingInfo.events[sEventName] = function () {
1683
- for (var _len = arguments.length, args = new Array(_len), _key = 0; _key < _len; _key++) {
1684
- args[_key] = arguments[_key];
1685
- }
1686
- fHandler.apply(this, ...args);
1687
- fOriginalHandler.apply(this, ...args);
1688
- };
1689
- }
1690
- }
1691
- };
1692
- if (oControl.isA("sap.ui.mdc.Chart")) {
1693
- oControl.innerChartBound().then(function () {
1694
- oBindingInfo = oControl.getControlDelegate()._getChart(oControl).getBindingInfo("data");
1695
- setBindingInfo();
1696
- return;
1697
- }).catch(function (sError) {
1698
- Log.error(sError);
1699
- });
1700
- } else {
1701
- oBindingInfo = oControl.data("rowsBindingInfo");
1702
- setBindingInfo();
1703
- }
1704
- }
1705
- async function loadMacroLibrary() {
1706
- return new Promise(function (resolve) {
1707
- sap.ui.require(["sap/fe/macros/macroLibrary"], function /*macroLibrary*/
1708
- () {
1709
- resolve();
1710
- });
1711
- });
1712
- }
1713
1602
 
1714
1603
  // Get the path for action parameters that is needed to read the annotations
1715
1604
  function getParameterPath(sPath, sParameter) {
@@ -1850,14 +1739,11 @@ sap.ui.define(["sap/base/Log", "sap/base/util/array/uniqueSort", "sap/base/util/
1850
1739
  return aFilters;
1851
1740
  }
1852
1741
  const CommonUtils = {
1853
- isFieldControlPathInapplicable: isFieldControlPathInapplicable,
1854
- removeSensitiveData: removeSensitiveData,
1855
1742
  fireButtonPress: fnFireButtonPress,
1856
1743
  getTargetView: getTargetView,
1857
1744
  getCurrentPageView: getCurrentPageView,
1858
1745
  hasTransientContext: fnHasTransientContexts,
1859
1746
  updateRelatedAppsDetails: fnUpdateRelatedAppsDetails,
1860
- resolveStringtoBoolean: fnResolveStringtoBoolean,
1861
1747
  getAppComponent: getAppComponent,
1862
1748
  getMandatoryFilterFields: fnGetMandatoryFilterFields,
1863
1749
  getContextPathProperties: fnGetContextPathProperties,
@@ -1875,8 +1761,6 @@ sap.ui.define(["sap/base/Log", "sap/base/util/array/uniqueSort", "sap/base/util/
1875
1761
  addPageContextToSelectionVariant: addPageContextToSelectionVariant,
1876
1762
  addDefaultDisplayCurrency: addDefaultDisplayCurrency,
1877
1763
  setUserDefaults: setUserDefaults,
1878
- getShellServices: getShellServices,
1879
- getHash: getHash,
1880
1764
  getIBNActions: fnGetIBNActions,
1881
1765
  getHeaderFacetItemConfigForExternalNavigation: getHeaderFacetItemConfigForExternalNavigation,
1882
1766
  getSemanticObjectMapping: getSemanticObjectMapping,
@@ -1891,7 +1775,6 @@ sap.ui.define(["sap/base/Log", "sap/base/util/array/uniqueSort", "sap/base/util/
1891
1775
  getAdditionalParamsForCreate: getAdditionalParamsForCreate,
1892
1776
  requestSingletonProperty: requestSingletonProperty,
1893
1777
  templateControlFragment: templateControlFragment,
1894
- addEventToBindingInfo: addEventToBindingInfo,
1895
1778
  FilterRestrictions: {
1896
1779
  REQUIRED_PROPERTIES: "RequiredProperties",
1897
1780
  NON_FILTERABLE_PROPERTIES: "NonFilterableProperties",
@@ -1899,7 +1782,6 @@ sap.ui.define(["sap/base/Log", "sap/base/util/array/uniqueSort", "sap/base/util/
1899
1782
  },
1900
1783
  AllowedExpressionsPrio: ["SingleValue", "MultiValue", "SingleRange", "MultiRange", "SearchExpression", "MultiRangeOrSearchExpression"],
1901
1784
  normalizeSearchTerm: normalizeSearchTerm,
1902
- getSingletonPath: getSingletonPath,
1903
1785
  setContextsBasedOnOperationAvailable: setContextsBasedOnOperationAvailable,
1904
1786
  setDynamicActionContexts: setDynamicActionContexts,
1905
1787
  requestProperty: requestProperty,
@@ -1919,4 +1801,4 @@ sap.ui.define(["sap/base/Log", "sap/base/util/array/uniqueSort", "sap/base/util/
1919
1801
  };
1920
1802
  return CommonUtils;
1921
1803
  }, false);
1922
- //# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJuYW1lcyI6WyJub3JtYWxpemVTZWFyY2hUZXJtIiwic1NlYXJjaFRlcm0iLCJ1bmRlZmluZWQiLCJyZXBsYWNlIiwic3BsaXQiLCJyZWR1Y2UiLCJzTm9ybWFsaXplZCIsInNDdXJyZW50V29yZCIsIndhaXRGb3JDb250ZXh0UmVxdWVzdGVkIiwiYmluZGluZ0NvbnRleHQiLCJtb2RlbCIsImdldE1vZGVsIiwibWV0YU1vZGVsIiwiZ2V0TWV0YU1vZGVsIiwiZW50aXR5UGF0aCIsImdldE1ldGFQYXRoIiwiZ2V0UGF0aCIsImRhdGFNb2RlbCIsIk1ldGFNb2RlbENvbnZlcnRlciIsImdldEludm9sdmVkRGF0YU1vZGVsT2JqZWN0cyIsImdldENvbnRleHQiLCJyZXF1ZXN0UHJvcGVydHkiLCJ0YXJnZXRFbnRpdHlUeXBlIiwia2V5cyIsIm5hbWUiLCJmbkhhc1RyYW5zaWVudENvbnRleHRzIiwib0xpc3RCaW5kaW5nIiwiYkhhc1RyYW5zaWVudENvbnRleHRzIiwiZ2V0Q3VycmVudENvbnRleHRzIiwiZm9yRWFjaCIsIm9Db250ZXh0IiwiaXNUcmFuc2llbnQiLCJnZXRTaGVsbFNlcnZpY2VzIiwib0NvbnRyb2wiLCJnZXRBcHBDb21wb25lbnQiLCJnZXRIYXNoIiwic0hhc2giLCJ3aW5kb3ciLCJsb2NhdGlvbiIsImhhc2giLCJfZ2V0U09JbnRlbnRzIiwib1NoZWxsU2VydmljZUhlbHBlciIsIm9PYmplY3RQYWdlTGF5b3V0Iiwib1NlbWFudGljT2JqZWN0Iiwib1BhcmFtIiwiZ2V0TGlua3MiLCJzZW1hbnRpY09iamVjdCIsInBhcmFtcyIsIl9jcmVhdGVNYXBwaW5ncyIsIm9NYXBwaW5nIiwiYVNPTWFwcGluZ3MiLCJhTWFwcGluZ0tleXMiLCJPYmplY3QiLCJvU2VtYW50aWNNYXBwaW5nIiwiaSIsImxlbmd0aCIsIkxvY2FsUHJvcGVydHkiLCIkUHJvcGVydHlQYXRoIiwiU2VtYW50aWNPYmplY3RQcm9wZXJ0eSIsInB1c2giLCJfZ2V0UmVsYXRlZEFwcHNNZW51SXRlbXMiLCJhTGlua3MiLCJhRXhjbHVkZWRBY3Rpb25zIiwib1RhcmdldFBhcmFtcyIsImFJdGVtcyIsImFBbGxvd2VkQWN0aW9ucyIsIm9MaW5rIiwic0ludGVudCIsImludGVudCIsInNBY3Rpb24iLCJpbmNsdWRlcyIsInRleHQiLCJ0YXJnZXRTZW1PYmplY3QiLCJ0YXJnZXRBY3Rpb24iLCJ0YXJnZXRQYXJhbXMiLCJpbmRleE9mIiwiX2dldFJlbGF0ZWRJbnRlbnRzIiwib0FkZGl0aW9uYWxTZW1hbnRpY09iamVjdHMiLCJvQmluZGluZ0NvbnRleHQiLCJhTWFuaWZlc3RTT0l0ZW1zIiwiYWxsb3dlZEFjdGlvbnMiLCJ1bmF2YWlsYWJsZUFjdGlvbnMiLCJtYXBwaW5nIiwibmF2aWdhdGlvbkNvbnRleHRzIiwic2VtYW50aWNPYmplY3RNYXBwaW5nIiwiX2dldFJlbGF0ZWRJbnRlbnRzV2l0aFNlbWFudGljT2JqZWN0c0FuZEFjdGlvbiIsInNlbWFudGljT2JqZWN0QW5kQWN0aW9uIiwiYXBwQ29tcG9uZW50U09JdGVtcyIsImFjdGlvbnMiLCJhY3Rpb24iLCJleGNsdWRlZEFjdGlvbnMiLCJzb01hcHBpbmdzIiwidXBkYXRlUmVsYXRlQXBwc01vZGVsIiwib0VudHJ5IiwiYVNlbUtleXMiLCJvTWV0YU1vZGVsIiwib01ldGFQYXRoIiwiYXBwQ29tcG9uZW50Iiwic0N1cnJlbnRTZW1PYmoiLCJzQ3VycmVudEFjdGlvbiIsIm9TZW1hbnRpY09iamVjdEFubm90YXRpb25zIiwiYVJlbGF0ZWRBcHBzTWVudUl0ZW1zIiwiYU1hbmlmZXN0U09LZXlzIiwiZm5HZXRQYXJzZVNoZWxsSGFzaEFuZEdldExpbmtzIiwib1BhcnNlZFVybCIsInBhcnNlU2hlbGxIYXNoIiwiZG9jdW1lbnQiLCJqIiwic1NlbUtleSIsInZhbHVlIiwiYVRlY2huaWNhbEtleXMiLCJnZXRPYmplY3QiLCJrZXkiLCJzT2JqS2V5Iiwib01hbmlmZXN0RGF0YSIsImdldFRhcmdldFZpZXciLCJnZXRWaWV3RGF0YSIsInNlbWFudGljT2JqZWN0SW50ZW50cyIsImFkZGl0aW9uYWxTZW1hbnRpY09iamVjdHMiLCJQcm9taXNlIiwicmVzb2x2ZSIsImNvbXBvbmVudERhdGEiLCJnZXRDb21wb25lbnREYXRhIiwiZmVFbnZpcm9ubWVudCIsImdldEludGVudCIsImludGVybmFsTW9kZWxDb250ZXh0IiwiZ2V0QmluZGluZ0NvbnRleHQiLCJpc1NlbWFudGljT2JqZWN0SGFzU2FtZVRhcmdldEluTWFuaWZlc3QiLCJhQW5ub3RhdGlvbnNTT0l0ZW1zIiwic0VudGl0eVNldFBhdGgiLCJzRW50aXR5VHlwZVBhdGgiLCJvRW50aXR5U2V0QW5ub3RhdGlvbnMiLCJDb21tb25VdGlscyIsImdldFNlbWFudGljT2JqZWN0QW5ub3RhdGlvbnMiLCJiSGFzRW50aXR5U2V0U08iLCJvRW50aXR5VHlwZUFubm90YXRpb25zIiwiYVVuYXZhaWxhYmxlQWN0aW9ucyIsImFNYXBwaW5ncyIsInNvSXRlbXMiLCJjb25jYXQiLCJzZXRQcm9wZXJ0eSIsImVycm9yIiwiTG9nIiwiX2dldFNlbWFudGljT2JqZWN0QW5ub3RhdGlvbnMiLCJvRW50aXR5QW5ub3RhdGlvbnMiLCJzQW5ub3RhdGlvbk1hcHBpbmdUZXJtIiwic0Fubm90YXRpb25BY3Rpb25UZXJtIiwic1F1YWxpZmllciIsImZuVXBkYXRlUmVsYXRlZEFwcHNEZXRhaWxzIiwicGF0aCIsInNTZW1hbnRpY0tleVZvY2FidWxhcnkiLCJyZXF1ZXN0T2JqZWN0IiwidGhlbiIsInJlcXVlc3RlZE9iamVjdCIsImNhdGNoIiwib0Vycm9yIiwiZm5GaXJlQnV0dG9uUHJlc3MiLCJvQnV0dG9uIiwiaXNBIiwiZ2V0VmlzaWJsZSIsImdldEVuYWJsZWQiLCJmaXJlUHJlc3MiLCJmblJlc29sdmVTdHJpbmd0b0Jvb2xlYW4iLCJzVmFsdWUiLCJvT3duZXIiLCJDb21wb25lbnQiLCJnZXRPd25lckNvbXBvbmVudEZvciIsIkVycm9yIiwiZ2V0Q3VycmVudFBhZ2VWaWV3Iiwib0FwcENvbXBvbmVudCIsInJvb3RWaWV3Q29udHJvbGxlciIsImdldFJvb3RWaWV3Q29udHJvbGxlciIsImlzRmNsRW5hYmxlZCIsImdldFJpZ2h0bW9zdFZpZXciLCJnZXRSb290Q29udGFpbmVyIiwiZ2V0Q3VycmVudFBhZ2UiLCJvQ29tcG9uZW50IiwiZ2V0Q29tcG9uZW50SW5zdGFuY2UiLCJnZXRSb290Q29udHJvbCIsImdldFBhcmVudCIsImlzRmllbGRDb250cm9sUGF0aEluYXBwbGljYWJsZSIsInNGaWVsZENvbnRyb2xQYXRoIiwib0F0dHJpYnV0ZSIsImJJbmFwcGxpY2FibGUiLCJhUGFydHMiLCJoYXNPd25Qcm9wZXJ0eSIsInJlbW92ZVNlbnNpdGl2ZURhdGEiLCJhQXR0cmlidXRlcyIsImFPdXRBdHRyaWJ1dGVzIiwic0VudGl0eVNldCIsImVudGl0eVNldCIsImNvbnRleHREYXRhIiwiYVByb3BlcnRpZXMiLCJzUHJvcCIsImFQcm9wZXJ0eUFubm90YXRpb25zIiwib0ZpZWxkQ29udHJvbCIsIl9mbkNoZWNrSXNNYXRjaCIsIm9PYmplY3QiLCJvS2V5c1RvQ2hlY2siLCJzS2V5IiwiZm5HZXRDb250ZXh0UGF0aFByb3BlcnRpZXMiLCJtZXRhTW9kZWxDb250ZXh0Iiwic0NvbnRleHRQYXRoIiwib0ZpbHRlciIsIm9FbnRpdHlUeXBlIiwib1Byb3BlcnRpZXMiLCJ0ZXN0IiwiJGtpbmQiLCJmbkdldE1hbmRhdG9yeUZpbHRlckZpZWxkcyIsImFNYW5kYXRvcnlGaWx0ZXJGaWVsZHMiLCJmbkdldElCTkFjdGlvbnMiLCJhSUJOQWN0aW9ucyIsImFBY3Rpb25zIiwiZ2V0QWN0aW9ucyIsIm9BY3Rpb24iLCJnZXRBY3Rpb24iLCJvTWVudSIsImdldE1lbnUiLCJnZXRJdGVtcyIsIm9JdGVtIiwiZGF0YSIsImZuVXBkYXRlRGF0YUZpZWxkRm9ySUJOQnV0dG9uc1Zpc2liaWxpdHkiLCJvVmlldyIsIm9QYXJhbXMiLCJpc1N0aWNreSIsIk1vZGVsSGVscGVyIiwiaXNTdGlja3lTZXNzaW9uU3VwcG9ydGVkIiwiZm5HZXRMaW5rcyIsIm9EYXRhIiwiYUtleXMiLCJvSUJOQWN0aW9uIiwic1NlbWFudGljT2JqZWN0IiwiYUxpbmsiLCJzZXRWaXNpYmxlIiwiZ2V0SWQiLCJzaGVsbE5hdmlnYXRpb25Ob3RBdmFpbGFibGUiLCJnZXRBY3Rpb25QYXRoIiwiYWN0aW9uQ29udGV4dCIsImJSZXR1cm5Pbmx5UGF0aCIsImluQWN0aW9uTmFtZSIsImJDaGVja1N0YXRpY1ZhbHVlIiwic0FjdGlvbk5hbWUiLCJ0b1N0cmluZyIsInNFbnRpdHlUeXBlTmFtZSIsIiRUeXBlIiwic0VudGl0eU5hbWUiLCJnZXRFbnRpdHlTZXROYW1lIiwic1Byb3BlcnR5Iiwic0JpbmRpbmdQYXJhbWV0ZXIiLCJzRW50aXR5VHlwZSIsIm9FbnRpdHlDb250YWluZXIiLCJjb21wdXRlRGlzcGxheU1vZGUiLCJvUHJvcGVydHlBbm5vdGF0aW9ucyIsIm9Db2xsZWN0aW9uQW5ub3RhdGlvbnMiLCJvVGV4dEFubm90YXRpb24iLCJvVGV4dEFycmFuZ2VtZW50QW5ub3RhdGlvbiIsIiRFbnVtTWVtYmVyIiwiX2dldEVudGl0eVR5cGUiLCJfcmVxdWVzdE9iamVjdCIsIm9TZWxlY3RlZENvbnRleHQiLCJuQnJhY2tldEluZGV4Iiwic1RhcmdldFR5cGUiLCJzbGljZSIsInNDdXJyZW50VHlwZSIsImdldEJpbmRpbmciLCJ3YXJuaW5nIiwic0R5bmFtaWNBY3Rpb25FbmFibGVkUGF0aCIsIm9Qcm9taXNlIiwicmVxdWVzdFNpbmdsZXRvblByb3BlcnR5IiwidlByb3BlcnR5VmFsdWUiLCJzZXRDb250ZXh0c0Jhc2VkT25PcGVyYXRpb25BdmFpbGFibGUiLCJvSW50ZXJuYWxNb2RlbENvbnRleHQiLCJhUmVxdWVzdFByb21pc2VzIiwiYWxsIiwiYVJlc3VsdHMiLCJhQXBwbGljYWJsZUNvbnRleHRzIiwiYU5vdEFwcGxpY2FibGVDb250ZXh0cyIsImFSZXN1bHQiLCJzZXREeW5hbWljQWN0aW9uQ29udGV4dHMiLCJ0cmFjZSIsImFBcHBsaWNhYmxlIiwiYU5vdEFwcGxpY2FibGUiLCJzRHluYW1pY0FjdGlvblBhdGhQcmVmaXgiLCJvSW50ZXJuYWxNb2RlbCIsIl9nZXREZWZhdWx0T3BlcmF0b3JzIiwic1Byb3BlcnR5VHlwZSIsIm9EYXRhQ2xhc3MiLCJUeXBlVXRpbCIsImdldERhdGFUeXBlQ2xhc3NOYW1lIiwib0Jhc2VUeXBlIiwiZ2V0QmFzZVR5cGUiLCJGaWx0ZXJPcGVyYXRvclV0aWwiLCJnZXRPcGVyYXRvcnNGb3JUeXBlIiwiX2dldFJlc3RyaWN0aW9ucyIsImFEZWZhdWx0T3BzIiwiYUV4cHJlc3Npb25PcHMiLCJmaWx0ZXIiLCJzRWxlbWVudCIsImdldFNwZWNpZmljQWxsb3dlZEV4cHJlc3Npb24iLCJhRXhwcmVzc2lvbnMiLCJhQWxsb3dlZEV4cHJlc3Npb25zUHJpb3JpdHkiLCJBbGxvd2VkRXhwcmVzc2lvbnNQcmlvIiwic29ydCIsImEiLCJiIiwiZ2V0T3BlcmF0b3JzRm9yUHJvcGVydHkiLCJzVHlwZSIsImJVc2VTZW1hbnRpY0RhdGVSYW5nZSIsInNTZXR0aW5ncyIsIm9GaWx0ZXJSZXN0cmljdGlvbnMiLCJnZXRGaWx0ZXJSZXN0cmljdGlvbnNCeVBhdGgiLCJhRXF1YWxzT3BzIiwiYVNpbmdsZVJhbmdlT3BzIiwiYVNpbmdsZVJhbmdlRFRCYXNpY09wcyIsImFTaW5nbGVWYWx1ZURhdGVPcHMiLCJhQmFzaWNEYXRlVGltZU9wcyIsImFNdWx0aVJhbmdlT3BzIiwiYVNlYXJjaEV4cHJlc3Npb25PcHMiLCJhU2VtYW50aWNEYXRlT3BzRXh0IiwiU2VtYW50aWNEYXRlT3BlcmF0b3JzIiwiZ2V0U3VwcG9ydGVkT3BlcmF0aW9ucyIsImJTZW1hbnRpY0RhdGVSYW5nZSIsImFTZW1hbnRpY0RhdGVPcHMiLCJvU2V0dGluZ3MiLCJKU09OIiwicGFyc2UiLCJjdXN0b21EYXRhIiwib3BlcmF0b3JDb25maWd1cmF0aW9uIiwiZ2V0RmlsdGVyT3BlcmF0aW9ucyIsImdldFNlbWFudGljRGF0ZU9wZXJhdGlvbnMiLCJhRGVmYXVsdE9wZXJhdG9ycyIsInJlc3RyaWN0aW9ucyIsIkZpbHRlckFsbG93ZWRFeHByZXNzaW9ucyIsInNBbGxvd2VkRXhwcmVzc2lvbiIsImFTaW5nbGVWYWx1ZU9wcyIsInNPcGVyYXRvcnMiLCJnZXRPcGVyYXRvcnNGb3JHdWlkUHJvcGVydHkiLCJhbGxvd2VkT3BlcmF0b3JzRm9yR3VpZCIsImdldE9wZXJhdG9yc0ZvckRhdGVQcm9wZXJ0eSIsInByb3BlcnR5VHlwZSIsImdldFBhcmFtZXRlckluZm8iLCJzUGFyYW1ldGVyQ29udGV4dFBhdGgiLCJzdWJzdHJpbmciLCJsYXN0SW5kZXhPZiIsImJSZXN1bHRDb250ZXh0Iiwib1BhcmFtZXRlckluZm8iLCJjb250ZXh0UGF0aCIsInBhcmFtZXRlclByb3BlcnRpZXMiLCJnZXRDb250ZXh0UGF0aFByb3BlcnRpZXMiLCJhZGRTZWxlY3RPcHRpb25Ub0NvbmRpdGlvbnMiLCJvUHJvcGVydHlNZXRhZGF0YSIsImFWYWxpZE9wZXJhdG9ycyIsImFTZW1hbnRpY0RhdGVPcGVyYXRvcnMiLCJhQ3VtdWxhdGl2ZUNvbmRpdGlvbnMiLCJvU2VsZWN0T3B0aW9uIiwib0NvbmRpdGlvbiIsImdldENvbmRpdGlvbnMiLCJTZW1hbnRpY0RhdGVzIiwib3BlcmF0b3IiLCJzZW1hbnRpY0RhdGVzIiwiYWRkU2VtYW50aWNEYXRlc1RvQ29uZGl0aW9ucyIsIm9TZW1hbnRpY0RhdGVzIiwidmFsdWVzIiwiaGlnaCIsImxvdyIsImlzRW1wdHkiLCJhZGRTZWxlY3RPcHRpb25zVG9Db25kaXRpb25zIiwib1NlbGVjdGlvblZhcmlhbnQiLCJzU2VsZWN0T3B0aW9uUHJvcCIsIm9Db25kaXRpb25zIiwic0NvbmRpdGlvblBhdGgiLCJzQ29uZGl0aW9uUHJvcCIsIm9WYWxpZFByb3BlcnRpZXMiLCJpc1BhcmFtZXRlciIsImJJc0ZMUFZhbHVlUHJlc2VudCIsIm9WaWV3RGF0YSIsImFDb25kaXRpb25zIiwiYVNlbGVjdE9wdGlvbnMiLCJNZXRhTW9kZWxGdW5jdGlvbiIsImlzUHJvcGVydHlGaWx0ZXJhYmxlIiwiZ2V0U2VsZWN0T3B0aW9uIiwic2V0dGluZ3MiLCJnZXRGaWx0ZXJDb25maWd1cmF0aW9uU2V0dGluZyIsImJpbmQiLCJlbGVtZW50IiwiY3JlYXRlU2VtYW50aWNEYXRlc0Zyb21Db25kaXRpb25zIiwib0NvbmZpZyIsImNvbnRyb2xDb25maWd1cmF0aW9uIiwiZmlsdGVyQ29uZmlnIiwiZmlsdGVyRmllbGRzIiwiYWRkU2VsZWN0aW9uVmFyaWFudFRvQ29uZGl0aW9ucyIsIm9NZXRhTW9kZWxDb250ZXh0IiwiYklzRkxQVmFsdWVzIiwiYVNlbGVjdE9wdGlvbnNQcm9wZXJ0eU5hbWVzIiwiZ2V0U2VsZWN0T3B0aW9uc1Byb3BlcnR5TmFtZXMiLCJhTWV0YWRhdFByb3BlcnRpZXMiLCJvVmFsaWRQYXJhbWV0ZXJQcm9wZXJ0aWVzIiwiYU1ldGFkYXRhUGFyYW1ldGVycyIsInNNZXRhZGF0YVBhcmFtZXRlciIsInNTZWxlY3RPcHRpb25OYW1lIiwic3RhcnRzV2l0aCIsInNNZXRhZGF0YVByb3BlcnR5Iiwic1NlbGVjdE9wdGlvbiIsInNSZXBsYWNlZE9wdGlvbiIsInJlcGxhY2VBbGwiLCJzRnVsbENvbnRleHRQYXRoIiwiX2NyZWF0ZUNvbmRpdGlvbnNGb3JOYXZQcm9wZXJ0aWVzIiwic01haW5FbnRpdHlTZXRQYXRoIiwiYU5hdk9iamVjdE5hbWVzIiwic0Z1bGxQYXRoIiwic05hdlBhdGgiLCJzUHJvcGVydHlOYW1lIiwiJGlzQ29sbGVjdGlvbiIsInNOYXZQcm9wZXJ0eVBhdGgiLCJhZGRQYWdlQ29udGV4dFRvU2VsZWN0aW9uVmFyaWFudCIsIm1QYWdlQ29udGV4dCIsIm9OYXZpZ2F0aW9uU2VydmljZSIsImdldE5hdmlnYXRpb25TZXJ2aWNlIiwibWl4QXR0cmlidXRlc0FuZFNlbGVjdGlvblZhcmlhbnQiLCJ0b0pTT05TdHJpbmciLCJhZGRFeHRlcm5hbFN0YXRlRmlsdGVyc1RvU2VsZWN0aW9uVmFyaWFudCIsIm1GaWx0ZXJzIiwib1RhcmdldEluZm8iLCJvRmlsdGVyQmFyIiwic0ZpbHRlciIsImZuR2V0U2lnbkFuZE9wdGlvbiIsInNPcGVyYXRvciIsInNMb3dWYWx1ZSIsInNIaWdoVmFsdWUiLCJvU2VsZWN0T3B0aW9uU3RhdGUiLCJvcHRpb24iLCJzaWduIiwib0ZpbHRlckNvbmRpdGlvbnMiLCJmaWx0ZXJDb25kaXRpb25zIiwib0ZpbHRlcnNXaXRob3V0Q29uZmxpY3QiLCJmaWx0ZXJDb25kaXRpb25zV2l0aG91dENvbmZsaWN0Iiwib1RhYmxlUHJvcGVydGllc1dpdGhvdXRDb25mbGljdCIsInByb3BlcnRpZXNXaXRob3V0Q29uZmxpY3QiLCJhZGRGaWx0ZXJzVG9TZWxlY3Rpb25WYXJpYW50Iiwic2VsZWN0aW9uVmFyaWFudCIsInNGaWx0ZXJOYW1lIiwic1BhdGgiLCJvUHJvcGVydHlJbmZvIiwiZ2V0UHJvcGVydHlIZWxwZXIiLCJnZXRQcm9wZXJ0eSIsIm9UeXBlQ29uZmlnIiwidHlwZUNvbmZpZyIsIm9UeXBlVXRpbCIsImdldENvbnRyb2xEZWxlZ2F0ZSIsImdldFR5cGVVdGlsIiwiaXRlbSIsIm9PcGVyYXRvciIsImdldE9wZXJhdG9yIiwiUmFuZ2VPcGVyYXRvciIsIm9Nb2RlbEZpbHRlciIsImdldE1vZGVsRmlsdGVyIiwidHlwZUluc3RhbmNlIiwiYmFzZVR5cGUiLCJnZXRGaWx0ZXJzIiwiZXhjbHVkZSIsImV4dGVybmFsaXplVmFsdWUiLCJnZXRWYWx1ZTEiLCJnZXRWYWx1ZTIiLCJ2YWx1ZTEiLCJ2YWx1ZTIiLCJhZGRTZWxlY3RPcHRpb24iLCJpc1N0aWNreUVkaXRNb2RlIiwiYklzU3RpY2t5TW9kZSIsImJVSUVkaXRhYmxlIiwiYWRkRGVmYXVsdERpc3BsYXlDdXJyZW5jeSIsIm9TZWxlY3Rpb25WYXJpYW50RGVmYXVsdHMiLCJhU1ZPcHRpb24iLCJhRGVmYXVsdFNWT3B0aW9uIiwiZGlzcGxheUN1cnJlbmN5U2VsZWN0T3B0aW9uIiwic1NpZ24iLCJzT3B0aW9uIiwic0xvdyIsInNIaWdoIiwic2V0VXNlckRlZmF1bHRzIiwiYVBhcmFtZXRlcnMiLCJvTW9kZWwiLCJiSXNBY3Rpb24iLCJiSXNDcmVhdGUiLCJvQWN0aW9uRGVmYXVsdFZhbHVlcyIsIm9Db21wb25lbnREYXRhIiwib1N0YXJ0dXBQYXJhbWV0ZXJzIiwic3RhcnR1cFBhcmFtZXRlcnMiLCJvU2hlbGxTZXJ2aWNlcyIsImhhc1VTaGVsbCIsIm9QYXJhbWV0ZXIiLCIkTmFtZSIsInNQYXJhbWV0ZXJOYW1lIiwiZ2V0U3RhcnR1cEFwcFN0YXRlIiwib1N0YXJ0dXBBcHBTdGF0ZSIsImdldERhdGEiLCJhRXh0ZW5kZWRQYXJhbWV0ZXJzIiwiU2VsZWN0T3B0aW9ucyIsIm9FeHRlbmRlZFBhcmFtZXRlciIsIlByb3BlcnR5TmFtZSIsIm9SYW5nZSIsIlJhbmdlcyIsIlNpZ24iLCJPcHRpb24iLCJMb3ciLCJnZXRBZGRpdGlvbmFsUGFyYW1zRm9yQ3JlYXRlIiwib0luYm91bmRQYXJhbWV0ZXJzIiwib0luYm91bmRzIiwiYUNyZWF0ZVBhcmFtZXRlcnMiLCJzUGFyYW1ldGVyIiwidXNlRm9yQ3JlYXRlIiwib1JldCIsInNDcmVhdGVQYXJhbWV0ZXIiLCJhVmFsdWVzIiwiY3JlYXRlIiwiZ2V0U2VtYW50aWNPYmplY3RNYXBwaW5nIiwib091dGJvdW5kIiwiYVNlbWFudGljT2JqZWN0TWFwcGluZyIsInBhcmFtZXRlcnMiLCJzUGFyYW0iLCJmb3JtYXQiLCJnZXRIZWFkZXJGYWNldEl0ZW1Db25maWdGb3JFeHRlcm5hbE5hdmlnYXRpb24iLCJvQ3Jvc3NOYXYiLCJvSGVhZGVyRmFjZXRJdGVtcyIsInNJZCIsIm9Db250cm9sQ29uZmlnIiwiY29uZmlnIiwic091dGJvdW5kIiwibmF2aWdhdGlvbiIsInRhcmdldE91dGJvdW5kIiwib3V0Ym91bmQiLCJnZW5lcmF0ZSIsInNldFNlbWFudGljT2JqZWN0TWFwcGluZ3MiLCJ2TWFwcGluZ3MiLCJvTWFwcGluZ3MiLCJzTG9jYWxQcm9wZXJ0eSIsInNTZW1hbnRpY09iamVjdFByb3BlcnR5IiwicmVtb3ZlU2VsZWN0T3B0aW9uIiwibWFzc0FkZFNlbGVjdE9wdGlvbiIsImZuR2V0U2VtYW50aWNPYmplY3RzRnJvbVBhdGgiLCJhU2VtYW50aWNPYmplY3RVbmF2YWlsYWJsZUFjdGlvbnMiLCJhU2VtYW50aWNPYmplY3RGb3JHZXRMaW5rcyIsInNlbWFudGljT2JqZWN0UGF0aCIsInNlbWFudGljT2JqZWN0Rm9yR2V0TGlua3MiLCJmblVwZGF0ZVNlbWFudGljVGFyZ2V0c01vZGVsIiwiYUdldExpbmtzUHJvbWlzZXMiLCJhU2VtYW50aWNPYmplY3RzIiwic0N1cnJlbnRIYXNoIiwiX29MaW5rIiwiX3NMaW5rSW50ZW50QWN0aW9uIiwiYUZpbmFsTGlua3MiLCJvRmluYWxTZW1hbnRpY09iamVjdHMiLCJiSW50ZW50SGFzQWN0aW9ucyIsImsiLCJvVG1wIiwic0FsdGVybmF0ZVBhdGgiLCJoYXNUYXJnZXRzTm90RmlsdGVyZWQiLCJoYXNUYXJnZXRzIiwiaUxpbmtDb3VudCIsIkhhc1RhcmdldHMiLCJIYXNUYXJnZXRzTm90RmlsdGVyZWQiLCJhc3NpZ24iLCJzU2VtYW50aWNPYmplY3ROYW1lIiwibWVyZ2VPYmplY3RzIiwiZm5HZXRTZW1hbnRpY09iamVjdFByb21pc2UiLCJnZXRTZW1hbnRpY09iamVjdHNGcm9tUGF0aCIsImZuUHJlcGFyZVNlbWFudGljT2JqZWN0c1Byb21pc2VzIiwiX29BcHBDb21wb25lbnQiLCJfb1ZpZXciLCJfb01ldGFNb2RlbCIsIl9hU2VtYW50aWNPYmplY3RzRm91bmQiLCJfYVNlbWFudGljT2JqZWN0c1Byb21pc2VzIiwiX0tleXMiLCJyZWdleFJlc3VsdCIsImluZGV4IiwiZXhlYyIsImdldFNlbWFudGljT2JqZWN0UHJvbWlzZSIsImZuR2V0U2VtYW50aWNUYXJnZXRzRnJvbVBhZ2VNb2RlbCIsIm9Db250cm9sbGVyIiwic1BhZ2VNb2RlbCIsIl9mbmZpbmRWYWx1ZXNIZWxwZXIiLCJvYmoiLCJsaXN0IiwiQXJyYXkiLCJjaGlsZHJlbiIsIl9mbmZpbmRWYWx1ZXMiLCJfZm5EZWxldGVEdXBsaWNhdGVTZW1hbnRpY09iamVjdHMiLCJhU2VtYW50aWNPYmplY3RQYXRoIiwiZ2V0VmlldyIsImFTZW1hbnRpY09iamVjdHNQcm9taXNlcyIsImdldE93bmVyQ29tcG9uZW50Iiwib1BhZ2VNb2RlbCIsInN0cmluZ2lmeSIsIl9nZXRPYmplY3QiLCJhU2VtYW50aWNPYmplY3RzRm91bmQiLCJhU2VtYW50aWNPYmplY3RzRm9yR2V0TGlua3MiLCJfb1NlbWFudGljT2JqZWN0Iiwic1NlbU9iakV4cHJlc3Npb24iLCJhU2VtYW50aWNPYmplY3RzUmVzb2x2ZWQiLCJjb21waWxlRXhwcmVzc2lvbiIsInBhdGhJbk1vZGVsIiwiJFBhdGgiLCJnZXRMaW5rc1dpdGhDYWNoZSIsInVwZGF0ZVNlbWFudGljVGFyZ2V0cyIsImdldEZpbHRlckFsbG93ZWRFeHByZXNzaW9uIiwib0ZpbHRlclJlc3RyaWN0aW9uc0Fubm90YXRpb24iLCJtQWxsb3dlZEV4cHJlc3Npb25zIiwiRmlsdGVyRXhwcmVzc2lvblJlc3RyaWN0aW9ucyIsIm9Qcm9wZXJ0eSIsIlByb3BlcnR5IiwiQWxsb3dlZEV4cHJlc3Npb25zIiwiZ2V0RmlsdGVyUmVzdHJpY3Rpb25zIiwic1Jlc3RyaWN0aW9uIiwiYVByb3BzIiwibWFwIiwiX2ZldGNoUHJvcGVydGllc0Zvck5hdlBhdGgiLCJwYXRocyIsIm5hdlBhdGgiLCJwcm9wcyIsIm5hdlBhdGhQcmVmaXgiLCJvdXRQYXRocyIsInBhdGhUb0NoZWNrIiwib3V0UGF0aCIsIlJlcXVpcmVkUHJvcGVydGllcyIsIk5vbkZpbHRlcmFibGVQcm9wZXJ0aWVzIiwibmF2aWdhdGlvblRleHQiLCJmclRlcm0iLCJlbnRpdHlUeXBlUGF0aFBhcnRzIiwiZmlsdGVyT3V0TmF2UHJvcEJpbmRpbmciLCJlbnRpdHlUeXBlUGF0aCIsImpvaW4iLCJlbnRpdHlTZXRQYXRoIiwiZ2V0RW50aXR5U2V0UGF0aCIsImVudGl0eVNldFBhdGhQYXJ0cyIsImlzQ29udGFpbm1lbnQiLCJjb250YWlubWVudE5hdlBhdGgiLCJyZXN1bHRDb250ZXh0Q2hlY2siLCJwYXJlbnRFbnRpdHlTZXRQYXRoIiwib1BhcmVudFJldCIsIm9QYXJlbnRGUiIsImNvbXBsZXRlQWxsb3dlZEV4cHMiLCJvdXRQcm9wIiwicHJvcFBhdGgiLCJvdXRQcm9wUGF0aCIsIm9OYXZSZXN0cmljdGlvbnMiLCJnZXROYXZpZ2F0aW9uUmVzdHJpY3Rpb25zIiwib05hdkZpbHRlclJlc3QiLCJuYXZSZXNSZXFQcm9wcyIsInVuaXF1ZVNvcnQiLCJuYXZOb25GaWx0ZXJQcm9wcyIsIm5hdkFzc29jaWF0aW9uRW50aXR5UmVzdCIsIm5hdkFzc29jUmVxUHJvcHMiLCJuYXZBc3NvY05vbkZpbHRlclByb3BzIiwidGVtcGxhdGVDb250cm9sRnJhZ21lbnQiLCJzRnJhZ21lbnROYW1lIiwib1ByZXByb2Nlc3NvclNldHRpbmdzIiwib09wdGlvbnMiLCJvTW9kaWZpZXIiLCJ2aWV3Iiwib0ZyYWdtZW50IiwidGFyZ2V0cyIsImxvYWRNYWNyb0xpYnJhcnkiLCJYTUxQcmVwcm9jZXNzb3IiLCJwcm9jZXNzIiwiWE1MVGVtcGxhdGVQcm9jZXNzb3IiLCJsb2FkVGVtcGxhdGUiLCJmaXJzdEVsZW1lbnRDaGlsZCIsImlzWE1MIiwiRnJhZ21lbnQiLCJsb2FkIiwiaWQiLCJkZWZpbml0aW9uIiwiY29udHJvbGxlciIsImdldFNpbmdsZXRvblBhdGgiLCJwYXJ0cyIsIkJvb2xlYW4iLCJwcm9wZXJ0eU5hbWUiLCJwb3AiLCJuYXZpZ2F0aW9uUGF0aCIsInNpbmdsZXRvbk5hbWUiLCJyZXNvbHZlZFBhdGgiLCJwcm9wZXJ0eUJpbmRpbmciLCJiaW5kUHJvcGVydHkiLCJyZXF1ZXN0VmFsdWUiLCJhZGRFdmVudFRvQmluZGluZ0luZm8iLCJzRXZlbnROYW1lIiwiZkhhbmRsZXIiLCJvQmluZGluZ0luZm8iLCJzZXRCaW5kaW5nSW5mbyIsImV2ZW50cyIsImZPcmlnaW5hbEhhbmRsZXIiLCJhcmdzIiwiYXBwbHkiLCJpbm5lckNoYXJ0Qm91bmQiLCJfZ2V0Q2hhcnQiLCJnZXRCaW5kaW5nSW5mbyIsInNFcnJvciIsInNhcCIsInVpIiwicmVxdWlyZSIsImdldFBhcmFtZXRlclBhdGgiLCJzQ29udGV4dCIsImFBY3Rpb24iLCJfZm50cmFuc2xhdGVkVGV4dEZyb21FeHBCaW5kaW5nU3RyaW5nIiwiZXhwQmluZGluZyIsImNvbnRyb2wiLCJhbnlSZXNvdXJjZVRleHQiLCJBbnlFbGVtZW50IiwiYW55VGV4dCIsImFkZERlcGVuZGVudCIsInJlc3VsdFRleHQiLCJnZXRBbnlUZXh0IiwicmVtb3ZlRGVwZW5kZW50IiwiZGVzdHJveSIsImlzU21hbGxEZXZpY2UiLCJzeXN0ZW0iLCJkZXNrdG9wIiwiRGV2aWNlIiwicmVzaXplIiwid2lkdGgiLCJnZXRGaWx0ZXJzSW5mb0ZvclNWIiwic2VsZWN0aW9uVmFyaWFudFBhdGgiLCJpc0NoYXJ0IiwibVByb3BlcnR5RmlsdGVycyIsImFGaWx0ZXJzIiwiYVBhdGhzIiwic1RleHQiLCJTZWxlY3Rpb25WYXJpYW50IiwiVGV4dCIsIkZpbHRlciIsIkhpZ2giLCJzUHJvcGVydHlQYXRoIiwiZmlsdGVycyIsImFuZCIsInByb3BlcnRpZXMiLCJnZXRDb252ZXJ0ZXJDb250ZXh0Rm9yUGF0aCIsInNNZXRhUGF0aCIsIm9EaWFnbm9zdGljcyIsImNyZWF0ZUJpbmRpbmdDb250ZXh0IiwiQ29udmVydGVyQ29udGV4dCIsImNyZWF0ZUNvbnZlcnRlckNvbnRleHRGb3JNYWNybyIsImdldEludGVybmFsQ2hhcnROYW1lRnJvbVByb3BlcnR5TmFtZUFuZEtpbmQiLCJraW5kIiwiZ2V0Q2hhcnRQcm9wZXJ0aWVzV2l0aG91dFByZWZpeGVzIiwiZmlyZUJ1dHRvblByZXNzIiwiaGFzVHJhbnNpZW50Q29udGV4dCIsInVwZGF0ZVJlbGF0ZWRBcHBzRGV0YWlscyIsInJlc29sdmVTdHJpbmd0b0Jvb2xlYW4iLCJnZXRNYW5kYXRvcnlGaWx0ZXJGaWVsZHMiLCJ1cGRhdGVEYXRhRmllbGRGb3JJQk5CdXR0b25zVmlzaWJpbGl0eSIsImdldElCTkFjdGlvbnMiLCJnZXRTZW1hbnRpY1RhcmdldHNGcm9tUGFnZU1vZGVsIiwiRmlsdGVyUmVzdHJpY3Rpb25zIiwiUkVRVUlSRURfUFJPUEVSVElFUyIsIk5PTl9GSUxURVJBQkxFX1BST1BFUlRJRVMiLCJBTExPV0VEX0VYUFJFU1NJT05TIiwiZ2V0UmVsYXRlZEFwcHNNZW51SXRlbXMiLCJnZXRUcmFuc2xhdGVkVGV4dEZyb21FeHBCaW5kaW5nU3RyaW5nIl0sInNvdXJjZVJvb3QiOiIuIiwic291cmNlcyI6WyJDb21tb25VdGlscy50cyJdLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgdHlwZSAqIGFzIEVkbSBmcm9tIFwiQHNhcC11eC92b2NhYnVsYXJpZXMtdHlwZXMvRWRtXCI7XG5pbXBvcnQgdHlwZSB7IEZpbHRlclJlc3RyaWN0aW9uc1R5cGUgfSBmcm9tIFwiQHNhcC11eC92b2NhYnVsYXJpZXMtdHlwZXMvdm9jYWJ1bGFyaWVzL0NhcGFiaWxpdGllc1wiO1xuaW1wb3J0IHR5cGUgeyBTZW1hbnRpY09iamVjdE1hcHBpbmdUeXBlLCBTZW1hbnRpY09iamVjdFVuYXZhaWxhYmxlQWN0aW9ucyB9IGZyb20gXCJAc2FwLXV4L3ZvY2FidWxhcmllcy10eXBlcy92b2NhYnVsYXJpZXMvQ29tbW9uXCI7XG5pbXBvcnQgeyBDb21tb25Bbm5vdGF0aW9uVGVybXMgfSBmcm9tIFwiQHNhcC11eC92b2NhYnVsYXJpZXMtdHlwZXMvdm9jYWJ1bGFyaWVzL0NvbW1vblwiO1xuaW1wb3J0IHR5cGUgeyBUZXh0QXJyYW5nZW1lbnQgfSBmcm9tIFwiQHNhcC11eC92b2NhYnVsYXJpZXMtdHlwZXMvdm9jYWJ1bGFyaWVzL1VJXCI7XG5pbXBvcnQgTG9nIGZyb20gXCJzYXAvYmFzZS9Mb2dcIjtcbmltcG9ydCB1bmlxdWVTb3J0IGZyb20gXCJzYXAvYmFzZS91dGlsL2FycmF5L3VuaXF1ZVNvcnRcIjtcbmltcG9ydCBtZXJnZU9iamVjdHMgZnJvbSBcInNhcC9iYXNlL3V0aWwvbWVyZ2VcIjtcbmltcG9ydCB0eXBlIEFwcENvbXBvbmVudCBmcm9tIFwic2FwL2ZlL2NvcmUvQXBwQ29tcG9uZW50XCI7XG5pbXBvcnQgdHlwZSB7IENvbXBvbmVudERhdGEgfSBmcm9tIFwic2FwL2ZlL2NvcmUvQXBwQ29tcG9uZW50XCI7XG5pbXBvcnQgQ29udmVydGVyQ29udGV4dCBmcm9tIFwic2FwL2ZlL2NvcmUvY29udmVydGVycy9Db252ZXJ0ZXJDb250ZXh0XCI7XG5pbXBvcnQgKiBhcyBNZXRhTW9kZWxDb252ZXJ0ZXIgZnJvbSBcInNhcC9mZS9jb3JlL2NvbnZlcnRlcnMvTWV0YU1vZGVsQ29udmVydGVyXCI7XG5pbXBvcnQgeyBjb21waWxlRXhwcmVzc2lvbiwgcGF0aEluTW9kZWwgfSBmcm9tIFwic2FwL2ZlL2NvcmUvaGVscGVycy9CaW5kaW5nVG9vbGtpdFwiO1xuaW1wb3J0IHR5cGUgeyBJbnRlcm5hbE1vZGVsQ29udGV4dCB9IGZyb20gXCJzYXAvZmUvY29yZS9oZWxwZXJzL01vZGVsSGVscGVyXCI7XG5pbXBvcnQgTW9kZWxIZWxwZXIgZnJvbSBcInNhcC9mZS9jb3JlL2hlbHBlcnMvTW9kZWxIZWxwZXJcIjtcbmltcG9ydCBTZW1hbnRpY0RhdGVPcGVyYXRvcnMgZnJvbSBcInNhcC9mZS9jb3JlL2hlbHBlcnMvU2VtYW50aWNEYXRlT3BlcmF0b3JzXCI7XG5pbXBvcnQgeyBnZW5lcmF0ZSB9IGZyb20gXCJzYXAvZmUvY29yZS9oZWxwZXJzL1N0YWJsZUlkSGVscGVyXCI7XG5pbXBvcnQgdHlwZSBQYWdlQ29udHJvbGxlciBmcm9tIFwic2FwL2ZlL2NvcmUvUGFnZUNvbnRyb2xsZXJcIjtcbmltcG9ydCB0eXBlIHsgSVNoZWxsU2VydmljZXMgfSBmcm9tIFwic2FwL2ZlL2NvcmUvc2VydmljZXMvU2hlbGxTZXJ2aWNlc0ZhY3RvcnlcIjtcbmltcG9ydCB0eXBlIERpYWdub3N0aWNzIGZyb20gXCJzYXAvZmUvY29yZS9zdXBwb3J0L0RpYWdub3N0aWNzXCI7XG5pbXBvcnQgVHlwZVV0aWwgZnJvbSBcInNhcC9mZS9jb3JlL3R5cGUvVHlwZVV0aWxcIjtcbmltcG9ydCB0eXBlIFNlbGVjdGlvblZhcmlhbnQgZnJvbSBcInNhcC9mZS9uYXZpZ2F0aW9uL1NlbGVjdGlvblZhcmlhbnRcIjtcbmltcG9ydCB0eXBlIHsgU2VsZWN0T3B0aW9uLCBTZW1hbnRpY0RhdGVDb25maWd1cmF0aW9uIH0gZnJvbSBcInNhcC9mZS9uYXZpZ2F0aW9uL1NlbGVjdGlvblZhcmlhbnRcIjtcbmltcG9ydCB0eXBlIEJ1dHRvbiBmcm9tIFwic2FwL20vQnV0dG9uXCI7XG5pbXBvcnQgdHlwZSBNZW51QnV0dG9uIGZyb20gXCJzYXAvbS9NZW51QnV0dG9uXCI7XG5pbXBvcnQgdHlwZSBOYXZDb250YWluZXIgZnJvbSBcInNhcC9tL05hdkNvbnRhaW5lclwiO1xuaW1wb3J0IHR5cGUgT3ZlcmZsb3dUb29sYmFyQnV0dG9uIGZyb20gXCJzYXAvbS9PdmVyZmxvd1Rvb2xiYXJCdXR0b25cIjtcbmltcG9ydCB0eXBlIE1hbmFnZWRPYmplY3QgZnJvbSBcInNhcC91aS9iYXNlL01hbmFnZWRPYmplY3RcIjtcbmltcG9ydCB0eXBlIHsgQWdncmVnYXRpb25CaW5kaW5nSW5mbyB9IGZyb20gXCJzYXAvdWkvYmFzZS9NYW5hZ2VkT2JqZWN0XCI7XG5pbXBvcnQgQ29tcG9uZW50IGZyb20gXCJzYXAvdWkvY29yZS9Db21wb25lbnRcIjtcbmltcG9ydCB0eXBlIENvbXBvbmVudENvbnRhaW5lciBmcm9tIFwic2FwL3VpL2NvcmUvQ29tcG9uZW50Q29udGFpbmVyXCI7XG5pbXBvcnQgdHlwZSBDb250cm9sIGZyb20gXCJzYXAvdWkvY29yZS9Db250cm9sXCI7XG5pbXBvcnQgdHlwZSBVSTVFbGVtZW50IGZyb20gXCJzYXAvdWkvY29yZS9FbGVtZW50XCI7XG5pbXBvcnQgRnJhZ21lbnQgZnJvbSBcInNhcC91aS9jb3JlL0ZyYWdtZW50XCI7XG5pbXBvcnQgdHlwZSBDb250cm9sbGVyIGZyb20gXCJzYXAvdWkvY29yZS9tdmMvQ29udHJvbGxlclwiO1xuaW1wb3J0IHR5cGUgVmlldyBmcm9tIFwic2FwL3VpL2NvcmUvbXZjL1ZpZXdcIjtcbmltcG9ydCBYTUxQcmVwcm9jZXNzb3IgZnJvbSBcInNhcC91aS9jb3JlL3V0aWwvWE1MUHJlcHJvY2Vzc29yXCI7XG5pbXBvcnQgWE1MVGVtcGxhdGVQcm9jZXNzb3IgZnJvbSBcInNhcC91aS9jb3JlL1hNTFRlbXBsYXRlUHJvY2Vzc29yXCI7XG5pbXBvcnQgRGV2aWNlLCB7IHN5c3RlbSB9IGZyb20gXCJzYXAvdWkvRGV2aWNlXCI7XG5pbXBvcnQgdHlwZSBBY3Rpb25Ub29sYmFyQWN0aW9uIGZyb20gXCJzYXAvdWkvbWRjL2FjdGlvbnRvb2xiYXIvQWN0aW9uVG9vbGJhckFjdGlvblwiO1xuaW1wb3J0IHR5cGUgeyBkZWZhdWx0IGFzIENoYXJ0LCBkZWZhdWx0IGFzIE1EQ0NoYXJ0IH0gZnJvbSBcInNhcC91aS9tZGMvQ2hhcnRcIjtcbmltcG9ydCB0eXBlIHsgQ29uZGl0aW9uT2JqZWN0IH0gZnJvbSBcInNhcC91aS9tZGMvY29uZGl0aW9uL0NvbmRpdGlvblwiO1xuaW1wb3J0IEZpbHRlck9wZXJhdG9yVXRpbCBmcm9tIFwic2FwL3VpL21kYy9jb25kaXRpb24vRmlsdGVyT3BlcmF0b3JVdGlsXCI7XG5pbXBvcnQgUmFuZ2VPcGVyYXRvciBmcm9tIFwic2FwL3VpL21kYy9jb25kaXRpb24vUmFuZ2VPcGVyYXRvclwiO1xuaW1wb3J0IHR5cGUgRmlsdGVyQmFyIGZyb20gXCJzYXAvdWkvbWRjL0ZpbHRlckJhclwiO1xuaW1wb3J0IHR5cGUgRGVsZWdhdGVNaXhpbiBmcm9tIFwic2FwL3VpL21kYy9taXhpbi9EZWxlZ2F0ZU1peGluXCI7XG5pbXBvcnQgdHlwZSBUYWJsZSBmcm9tIFwic2FwL3VpL21kYy9UYWJsZVwiO1xuaW1wb3J0IHR5cGUgTURDVGFibGUgZnJvbSBcInNhcC91aS9tZGMvdmFsdWVoZWxwL2NvbnRlbnQvTURDVGFibGVcIjtcbmltcG9ydCB0eXBlIENvbnRleHQgZnJvbSBcInNhcC91aS9tb2RlbC9Db250ZXh0XCI7XG5pbXBvcnQgRmlsdGVyIGZyb20gXCJzYXAvdWkvbW9kZWwvRmlsdGVyXCI7XG5pbXBvcnQgdHlwZSBKU09OTW9kZWwgZnJvbSBcInNhcC91aS9tb2RlbC9qc29uL0pTT05Nb2RlbFwiO1xuaW1wb3J0IHR5cGUgT0RhdGFWNENvbnRleHQgZnJvbSBcInNhcC91aS9tb2RlbC9vZGF0YS92NC9Db250ZXh0XCI7XG5pbXBvcnQgdHlwZSBPRGF0YUxpc3RCaW5kaW5nIGZyb20gXCJzYXAvdWkvbW9kZWwvb2RhdGEvdjQvT0RhdGFMaXN0QmluZGluZ1wiO1xuaW1wb3J0IHR5cGUgT0RhdGFNZXRhTW9kZWwgZnJvbSBcInNhcC91aS9tb2RlbC9vZGF0YS92NC9PRGF0YU1ldGFNb2RlbFwiO1xuaW1wb3J0IHR5cGUgT0RhdGFNb2RlbCBmcm9tIFwic2FwL3VpL21vZGVsL29kYXRhL3Y0L09EYXRhTW9kZWxcIjtcbmltcG9ydCB0eXBlIE9iamVjdFBhZ2VEeW5hbWljSGVhZGVyVGl0bGUgZnJvbSBcInNhcC91eGFwL09iamVjdFBhZ2VEeW5hbWljSGVhZGVyVGl0bGVcIjtcbmltcG9ydCB0eXBlIE9iamVjdFBhZ2VMYXlvdXQgZnJvbSBcInNhcC91eGFwL09iamVjdFBhZ2VMYXlvdXRcIjtcbmltcG9ydCB0eXBlIHtcblx0RXhwYW5kUGF0aFR5cGUsXG5cdE1ldGFNb2RlbEVudGl0eVR5cGUsXG5cdE1ldGFNb2RlbEVudW0sXG5cdE1ldGFNb2RlbE5hdlByb3BlcnR5LFxuXHRNZXRhTW9kZWxQcm9wZXJ0eSxcblx0TWV0YU1vZGVsVHlwZVxufSBmcm9tIFwidHlwZXMvbWV0YW1vZGVsX3R5cGVzXCI7XG5pbXBvcnQgQW55RWxlbWVudCBmcm9tIFwiLi9jb250cm9scy9BbnlFbGVtZW50XCI7XG5pbXBvcnQgKiBhcyBNZXRhTW9kZWxGdW5jdGlvbiBmcm9tIFwiLi9oZWxwZXJzL01ldGFNb2RlbEZ1bmN0aW9uXCI7XG5pbXBvcnQgeyBnZXRDb25kaXRpb25zIH0gZnJvbSBcIi4vdGVtcGxhdGluZy9GaWx0ZXJIZWxwZXJcIjtcblxudHlwZSBDb25kaXRpb25UeXBlID0ge1xuXHRvcGVyYXRvcjogc3RyaW5nO1xuXHR2YWx1ZXM6IEFycmF5PHVua25vd24+IHwgdW5kZWZpbmVkO1xuXHR2YWxpZGF0ZWQ/OiBzdHJpbmc7XG59O1xuXG50eXBlIE15SW5ib3hJbnRlbnQgPSB7XG5cdHNlbWFudGljT2JqZWN0OiBzdHJpbmc7XG5cdGFjdGlvbjogc3RyaW5nO1xufTtcblxuZnVuY3Rpb24gbm9ybWFsaXplU2VhcmNoVGVybShzU2VhcmNoVGVybTogc3RyaW5nKSB7XG5cdGlmICghc1NlYXJjaFRlcm0pIHtcblx0XHRyZXR1cm4gdW5kZWZpbmVkO1xuXHR9XG5cblx0cmV0dXJuIHNTZWFyY2hUZXJtXG5cdFx0LnJlcGxhY2UoL1wiL2csIFwiIFwiKVxuXHRcdC5yZXBsYWNlKC9cXFxcL2csIFwiXFxcXFxcXFxcIikgLy9lc2NhcGUgYmFja3NsYXNoIGNoYXJhY3RlcnMuIENhbiBiZSByZW1vdmVkIGlmIG9kYXRhL2JpbmRpbmcgaGFuZGxlcyBiYWNrZW5kIGVycm9ycyByZXNwb25kcy5cblx0XHQuc3BsaXQoL1xccysvKVxuXHRcdC5yZWR1Y2UoZnVuY3Rpb24gKHNOb3JtYWxpemVkOiBzdHJpbmcgfCB1bmRlZmluZWQsIHNDdXJyZW50V29yZDogc3RyaW5nKSB7XG5cdFx0XHRpZiAoc0N1cnJlbnRXb3JkICE9PSBcIlwiKSB7XG5cdFx0XHRcdHNOb3JtYWxpemVkID0gYCR7c05vcm1hbGl6ZWQgPyBgJHtzTm9ybWFsaXplZH0gYCA6IFwiXCJ9XCIke3NDdXJyZW50V29yZH1cImA7XG5cdFx0XHR9XG5cdFx0XHRyZXR1cm4gc05vcm1hbGl6ZWQ7XG5cdFx0fSwgdW5kZWZpbmVkKTtcbn1cblxuYXN5bmMgZnVuY3Rpb24gd2FpdEZvckNvbnRleHRSZXF1ZXN0ZWQoYmluZGluZ0NvbnRleHQ6IE9EYXRhVjRDb250ZXh0KSB7XG5cdGNvbnN0IG1vZGVsID0gYmluZGluZ0NvbnRleHQuZ2V0TW9kZWwoKTtcblx0Y29uc3QgbWV0YU1vZGVsID0gbW9kZWwuZ2V0TWV0YU1vZGVsKCk7XG5cdGNvbnN0IGVudGl0eVBhdGggPSBtZXRhTW9kZWwuZ2V0TWV0YVBhdGgoYmluZGluZ0NvbnRleHQuZ2V0UGF0aCgpKTtcblx0Y29uc3QgZGF0YU1vZGVsID0gTWV0YU1vZGVsQ29udmVydGVyLmdldEludm9sdmVkRGF0YU1vZGVsT2JqZWN0cyhtZXRhTW9kZWwuZ2V0Q29udGV4dChlbnRpdHlQYXRoKSk7XG5cdGF3YWl0IGJpbmRpbmdDb250ZXh0LnJlcXVlc3RQcm9wZXJ0eShkYXRhTW9kZWwudGFyZ2V0RW50aXR5VHlwZS5rZXlzWzBdPy5uYW1lKTtcbn1cblxuZnVuY3Rpb24gZm5IYXNUcmFuc2llbnRDb250ZXh0cyhvTGlzdEJpbmRpbmc6IE9EYXRhTGlzdEJpbmRpbmcpIHtcblx0bGV0IGJIYXNUcmFuc2llbnRDb250ZXh0cyA9IGZhbHNlO1xuXHRpZiAob0xpc3RCaW5kaW5nKSB7XG5cdFx0b0xpc3RCaW5kaW5nLmdldEN1cnJlbnRDb250ZXh0cygpLmZvckVhY2goZnVuY3Rpb24gKG9Db250ZXh0OiBPRGF0YVY0Q29udGV4dCkge1xuXHRcdFx0aWYgKG9Db250ZXh0ICYmIG9Db250ZXh0LmlzVHJhbnNpZW50KCkpIHtcblx0XHRcdFx0Ykhhc1RyYW5zaWVudENvbnRleHRzID0gdHJ1ZTtcblx0XHRcdH1cblx0XHR9KTtcblx0fVxuXHRyZXR1cm4gYkhhc1RyYW5zaWVudENvbnRleHRzO1xufVxuXG4vLyB0aGVyZSBpcyBubyBuYXZpZ2F0aW9uIGluIGVudGl0eVNldCBwYXRoIGFuZCBwcm9wZXJ0eSBwYXRoXG5cbmZ1bmN0aW9uIGdldFNoZWxsU2VydmljZXMob0NvbnRyb2w6IENvbnRyb2wgfCBDb21wb25lbnQpOiBJU2hlbGxTZXJ2aWNlcyB7XG5cdHJldHVybiBnZXRBcHBDb21wb25lbnQob0NvbnRyb2wpLmdldFNoZWxsU2VydmljZXMoKTtcbn1cblxuZnVuY3Rpb24gZ2V0SGFzaCgpOiBzdHJpbmcge1xuXHRjb25zdCBzSGFzaCA9IHdpbmRvdy5sb2NhdGlvbi5oYXNoO1xuXHRyZXR1cm4gc0hhc2guc3BsaXQoXCImXCIpWzBdO1xufVxuXG5hc3luYyBmdW5jdGlvbiBfZ2V0U09JbnRlbnRzKFxuXHRvU2hlbGxTZXJ2aWNlSGVscGVyOiBJU2hlbGxTZXJ2aWNlcyxcblx0b09iamVjdFBhZ2VMYXlvdXQ6IE9iamVjdFBhZ2VMYXlvdXQsXG5cdG9TZW1hbnRpY09iamVjdDogdW5rbm93bixcblx0b1BhcmFtOiB1bmtub3duXG4pOiBQcm9taXNlPExpbmtEZWZpbml0aW9uW10+IHtcblx0cmV0dXJuIG9TaGVsbFNlcnZpY2VIZWxwZXIuZ2V0TGlua3Moe1xuXHRcdHNlbWFudGljT2JqZWN0OiBvU2VtYW50aWNPYmplY3QsXG5cdFx0cGFyYW1zOiBvUGFyYW1cblx0fSkgYXMgUHJvbWlzZTxMaW5rRGVmaW5pdGlvbltdPjtcbn1cblxuLy8gVE8tRE8gYWRkIHRoaXMgYXMgcGFydCBvZiBhcHBseVNlbWFudGljT2JqZWN0bWFwcGluZ3MgbG9naWMgaW4gSW50ZW50QmFzZWRuYXZpZ2F0aW9uIGNvbnRyb2xsZXIgZXh0ZW5zaW9uXG5mdW5jdGlvbiBfY3JlYXRlTWFwcGluZ3Mob01hcHBpbmc6IFJlY29yZDxzdHJpbmcsIHVua25vd24+KSB7XG5cdGNvbnN0IGFTT01hcHBpbmdzID0gW107XG5cdGNvbnN0IGFNYXBwaW5nS2V5cyA9IE9iamVjdC5rZXlzKG9NYXBwaW5nKTtcblx0bGV0IG9TZW1hbnRpY01hcHBpbmc7XG5cdGZvciAobGV0IGkgPSAwOyBpIDwgYU1hcHBpbmdLZXlzLmxlbmd0aDsgaSsrKSB7XG5cdFx0b1NlbWFudGljTWFwcGluZyA9IHtcblx0XHRcdExvY2FsUHJvcGVydHk6IHtcblx0XHRcdFx0JFByb3BlcnR5UGF0aDogYU1hcHBpbmdLZXlzW2ldXG5cdFx0XHR9LFxuXHRcdFx0U2VtYW50aWNPYmplY3RQcm9wZXJ0eTogb01hcHBpbmdbYU1hcHBpbmdLZXlzW2ldXVxuXHRcdH07XG5cdFx0YVNPTWFwcGluZ3MucHVzaChvU2VtYW50aWNNYXBwaW5nKTtcblx0fVxuXG5cdHJldHVybiBhU09NYXBwaW5ncztcbn1cbnR5cGUgTGlua0RlZmluaXRpb24gPSB7XG5cdGludGVudDogc3RyaW5nO1xuXHR0ZXh0OiBzdHJpbmc7XG59O1xudHlwZSBTZW1hbnRpY0l0ZW0gPSB7XG5cdHRleHQ6IHN0cmluZztcblx0dGFyZ2V0U2VtT2JqZWN0OiBzdHJpbmc7XG5cdHRhcmdldEFjdGlvbjogc3RyaW5nO1xuXHR0YXJnZXRQYXJhbXM6IHVua25vd247XG59O1xuLyoqXG4gKiBAcGFyYW0gYUxpbmtzXG4gKiBAcGFyYW0gYUV4Y2x1ZGVkQWN0aW9uc1xuICogQHBhcmFtIG9UYXJnZXRQYXJhbXNcbiAqIEBwYXJhbSBhSXRlbXNcbiAqIEBwYXJhbSBhQWxsb3dlZEFjdGlvbnNcbiAqL1xuZnVuY3Rpb24gX2dldFJlbGF0ZWRBcHBzTWVudUl0ZW1zKFxuXHRhTGlua3M6IExpbmtEZWZpbml0aW9uW10sXG5cdGFFeGNsdWRlZEFjdGlvbnM6IHVua25vd25bXSxcblx0b1RhcmdldFBhcmFtczogdW5rbm93bixcblx0YUl0ZW1zOiBTZW1hbnRpY0l0ZW1bXSxcblx0YUFsbG93ZWRBY3Rpb25zPzogdW5rbm93bltdXG4pIHtcblx0Zm9yIChsZXQgaSA9IDA7IGkgPCBhTGlua3MubGVuZ3RoOyBpKyspIHtcblx0XHRjb25zdCBvTGluayA9IGFMaW5rc1tpXTtcblx0XHRjb25zdCBzSW50ZW50ID0gb0xpbmsuaW50ZW50O1xuXHRcdGNvbnN0IHNBY3Rpb24gPSBzSW50ZW50LnNwbGl0KFwiLVwiKVsxXS5zcGxpdChcIj9cIilbMF07XG5cdFx0aWYgKGFBbGxvd2VkQWN0aW9ucyAmJiBhQWxsb3dlZEFjdGlvbnMuaW5jbHVkZXMoc0FjdGlvbikpIHtcblx0XHRcdGFJdGVtcy5wdXNoKHtcblx0XHRcdFx0dGV4dDogb0xpbmsudGV4dCxcblx0XHRcdFx0dGFyZ2V0U2VtT2JqZWN0OiBzSW50ZW50LnNwbGl0KFwiI1wiKVsxXS5zcGxpdChcIi1cIilbMF0sXG5cdFx0XHRcdHRhcmdldEFjdGlvbjogc0FjdGlvbi5zcGxpdChcIn5cIilbMF0sXG5cdFx0XHRcdHRhcmdldFBhcmFtczogb1RhcmdldFBhcmFtc1xuXHRcdFx0fSk7XG5cdFx0fSBlbHNlIGlmICghYUFsbG93ZWRBY3Rpb25zICYmIGFFeGNsdWRlZEFjdGlvbnMgJiYgYUV4Y2x1ZGVkQWN0aW9ucy5pbmRleE9mKHNBY3Rpb24pID09PSAtMSkge1xuXHRcdFx0YUl0ZW1zLnB1c2goe1xuXHRcdFx0XHR0ZXh0OiBvTGluay50ZXh0LFxuXHRcdFx0XHR0YXJnZXRTZW1PYmplY3Q6IHNJbnRlbnQuc3BsaXQoXCIjXCIpWzFdLnNwbGl0KFwiLVwiKVswXSxcblx0XHRcdFx0dGFyZ2V0QWN0aW9uOiBzQWN0aW9uLnNwbGl0KFwiflwiKVswXSxcblx0XHRcdFx0dGFyZ2V0UGFyYW1zOiBvVGFyZ2V0UGFyYW1zXG5cdFx0XHR9KTtcblx0XHR9XG5cdH1cbn1cblxudHlwZSBTZW1hbnRpY09iamVjdCA9IHtcblx0YWxsb3dlZEFjdGlvbnM/OiB1bmtub3duW107XG5cdHVuYXZhaWxhYmxlQWN0aW9ucz86IHVua25vd25bXTtcblx0c2VtYW50aWNPYmplY3Q6IHN0cmluZztcblx0cGF0aDogc3RyaW5nO1xuXHRtYXBwaW5nPzogUmVjb3JkPHN0cmluZywgc3RyaW5nPjtcbn07XG5cbmZ1bmN0aW9uIF9nZXRSZWxhdGVkSW50ZW50cyhcblx0b0FkZGl0aW9uYWxTZW1hbnRpY09iamVjdHM6IFNlbWFudGljT2JqZWN0LFxuXHRvQmluZGluZ0NvbnRleHQ6IENvbnRleHQsXG5cdGFNYW5pZmVzdFNPSXRlbXM6IFNlbWFudGljSXRlbVtdLFxuXHRhTGlua3M6IExpbmtEZWZpbml0aW9uW11cbikge1xuXHRpZiAoYUxpbmtzICYmIGFMaW5rcy5sZW5ndGggPiAwKSB7XG5cdFx0Y29uc3QgYUFsbG93ZWRBY3Rpb25zID0gb0FkZGl0aW9uYWxTZW1hbnRpY09iamVjdHMuYWxsb3dlZEFjdGlvbnMgfHwgdW5kZWZpbmVkO1xuXHRcdGNvbnN0IGFFeGNsdWRlZEFjdGlvbnMgPSBvQWRkaXRpb25hbFNlbWFudGljT2JqZWN0cy51bmF2YWlsYWJsZUFjdGlvbnMgPyBvQWRkaXRpb25hbFNlbWFudGljT2JqZWN0cy51bmF2YWlsYWJsZUFjdGlvbnMgOiBbXTtcblx0XHRjb25zdCBhU09NYXBwaW5ncyA9IG9BZGRpdGlvbmFsU2VtYW50aWNPYmplY3RzLm1hcHBpbmcgPyBfY3JlYXRlTWFwcGluZ3Mob0FkZGl0aW9uYWxTZW1hbnRpY09iamVjdHMubWFwcGluZykgOiBbXTtcblx0XHRjb25zdCBvVGFyZ2V0UGFyYW1zID0geyBuYXZpZ2F0aW9uQ29udGV4dHM6IG9CaW5kaW5nQ29udGV4dCwgc2VtYW50aWNPYmplY3RNYXBwaW5nOiBhU09NYXBwaW5ncyB9O1xuXHRcdF9nZXRSZWxhdGVkQXBwc01lbnVJdGVtcyhhTGlua3MsIGFFeGNsdWRlZEFjdGlvbnMsIG9UYXJnZXRQYXJhbXMsIGFNYW5pZmVzdFNPSXRlbXMsIGFBbGxvd2VkQWN0aW9ucyk7XG5cdH1cbn1cblxuLyoqXG4gKiBAZGVzY3JpcHRpb24gVGhpcyBmdW5jdGlvbiBmZXRjaGVzIHRoZSByZWxhdGVkIGludGVudHMgd2hlbiBzZW1hbnRpYyBvYmplY3QgYW5kIGFjdGlvbiBhcmUgcGFzc2VkIGZyb20gZmVFbnZpcm9ubWVudC5nZXRJbnRlbnQoKSBvbmx5IGluIGNhc2Ugb2YgTXkgSW5ib3ggaW50ZWdyYXRpb25cbiAqIEBwYXJhbSBzZW1hbnRpY09iamVjdEFuZEFjdGlvbiBUaGlzIHNwZWNpZmllcyB0aGUgc2VtYW50aWMgb2JqZWN0IGFuZCBhY3Rpb24gZm9yIGZldGNoaW5nIHRoZSBpbnRlbnRzXG4gKiBAcGFyYW0gb0JpbmRpbmdDb250ZXh0IFRoaXMgc2VwY2lmaWVzIHRoZSBiaW5kaW5nIGNvbnRleHQgZm9yIHVwZGF0aW5nIHJlbGF0ZWQgYXBwc1xuICogQHBhcmFtIGFwcENvbXBvbmVudFNPSXRlbXMgVGhpcyBpcyBhIGxpc3Qgb2Ygc2VtYW50aWMgaXRlbXMgdXNlZCBmb3IgdXBkYXRpbmcgdGhlIHJlbGF0ZWQgYXBwcyBidXR0b25cbiAqIEBwYXJhbSBhTGlua3MgVGhpcyBpcyBhbiBhcnJheSBjb21wcmlzaW5nIG9mIHJlbGF0ZWQgaW50ZW50c1xuICovXG5cbmZ1bmN0aW9uIF9nZXRSZWxhdGVkSW50ZW50c1dpdGhTZW1hbnRpY09iamVjdHNBbmRBY3Rpb24oXG5cdHNlbWFudGljT2JqZWN0QW5kQWN0aW9uOiBNeUluYm94SW50ZW50LFxuXHRvQmluZGluZ0NvbnRleHQ6IENvbnRleHQsXG5cdGFwcENvbXBvbmVudFNPSXRlbXM6IFNlbWFudGljSXRlbVtdLFxuXHRhTGlua3M6IExpbmtEZWZpbml0aW9uW11cbikge1xuXHRpZiAoYUxpbmtzLmxlbmd0aCA+IDApIHtcblx0XHRjb25zdCBhY3Rpb25zID0gW3NlbWFudGljT2JqZWN0QW5kQWN0aW9uLmFjdGlvbl07XG5cdFx0Y29uc3QgZXhjbHVkZWRBY3Rpb25zOiBbXSA9IFtdO1xuXHRcdGNvbnN0IHNvTWFwcGluZ3M6IFtdID0gW107XG5cdFx0Y29uc3QgdGFyZ2V0UGFyYW1zID0geyBuYXZpZ2F0aW9uQ29udGV4dHM6IG9CaW5kaW5nQ29udGV4dCwgc2VtYW50aWNPYmplY3RNYXBwaW5nOiBzb01hcHBpbmdzIH07XG5cdFx0X2dldFJlbGF0ZWRBcHBzTWVudUl0ZW1zKGFMaW5rcywgZXhjbHVkZWRBY3Rpb25zLCB0YXJnZXRQYXJhbXMsIGFwcENvbXBvbmVudFNPSXRlbXMsIGFjdGlvbnMpO1xuXHR9XG59XG5cbnR5cGUgU2VtYW50aWNPYmplY3RDb25maWcgPSB7XG5cdGFkZGl0aW9uYWxTZW1hbnRpY09iamVjdHM6IFJlY29yZDxzdHJpbmcsIFNlbWFudGljT2JqZWN0Pjtcbn07XG50eXBlIFJlbGF0ZWRBcHBzQ29uZmlnID0ge1xuXHR0ZXh0OiBzdHJpbmc7XG5cdHRhcmdldFNlbU9iamVjdDogc3RyaW5nO1xuXHR0YXJnZXRBY3Rpb246IHN0cmluZztcbn07XG5hc3luYyBmdW5jdGlvbiB1cGRhdGVSZWxhdGVBcHBzTW9kZWwoXG5cdG9CaW5kaW5nQ29udGV4dDogQ29udGV4dCxcblx0b0VudHJ5OiBSZWNvcmQ8c3RyaW5nLCB1bmtub3duPiB8IHVuZGVmaW5lZCxcblx0b09iamVjdFBhZ2VMYXlvdXQ6IE9iamVjdFBhZ2VMYXlvdXQsXG5cdGFTZW1LZXlzOiB7ICRQcm9wZXJ0eVBhdGg6IHN0cmluZyB9W10sXG5cdG9NZXRhTW9kZWw6IE9EYXRhTWV0YU1vZGVsLFxuXHRvTWV0YVBhdGg6IHN0cmluZyxcblx0YXBwQ29tcG9uZW50OiBBcHBDb21wb25lbnRcbik6IFByb21pc2U8UmVsYXRlZEFwcHNDb25maWdbXT4ge1xuXHRjb25zdCBvU2hlbGxTZXJ2aWNlSGVscGVyOiBJU2hlbGxTZXJ2aWNlcyA9IGdldFNoZWxsU2VydmljZXMob09iamVjdFBhZ2VMYXlvdXQpO1xuXHRjb25zdCBvUGFyYW06IFJlY29yZDxzdHJpbmcsIHVua25vd24+ID0ge307XG5cdGxldCBzQ3VycmVudFNlbU9iaiA9IFwiXCIsXG5cdFx0c0N1cnJlbnRBY3Rpb24gPSBcIlwiO1xuXHRsZXQgb1NlbWFudGljT2JqZWN0QW5ub3RhdGlvbnM7XG5cdGxldCBhUmVsYXRlZEFwcHNNZW51SXRlbXM6IFJlbGF0ZWRBcHBzQ29uZmlnW10gPSBbXTtcblx0bGV0IGFFeGNsdWRlZEFjdGlvbnM6IHVua25vd25bXSA9IFtdO1xuXHRsZXQgYU1hbmlmZXN0U09LZXlzOiBzdHJpbmdbXTtcblxuXHRhc3luYyBmdW5jdGlvbiBmbkdldFBhcnNlU2hlbGxIYXNoQW5kR2V0TGlua3MoKSB7XG5cdFx0Y29uc3Qgb1BhcnNlZFVybCA9IG9TaGVsbFNlcnZpY2VIZWxwZXIucGFyc2VTaGVsbEhhc2goZG9jdW1lbnQubG9jYXRpb24uaGFzaCk7XG5cdFx0c0N1cnJlbnRTZW1PYmogPSBvUGFyc2VkVXJsLnNlbWFudGljT2JqZWN0OyAvLyBDdXJyZW50IFNlbWFudGljIE9iamVjdFxuXHRcdHNDdXJyZW50QWN0aW9uID0gb1BhcnNlZFVybC5hY3Rpb247XG5cdFx0cmV0dXJuIF9nZXRTT0ludGVudHMob1NoZWxsU2VydmljZUhlbHBlciwgb09iamVjdFBhZ2VMYXlvdXQsIHNDdXJyZW50U2VtT2JqLCBvUGFyYW0pO1xuXHR9XG5cblx0dHJ5IHtcblx0XHRpZiAob0VudHJ5KSB7XG5cdFx0XHRpZiAoYVNlbUtleXMgJiYgYVNlbUtleXMubGVuZ3RoID4gMCkge1xuXHRcdFx0XHRmb3IgKGxldCBqID0gMDsgaiA8IGFTZW1LZXlzLmxlbmd0aDsgaisrKSB7XG5cdFx0XHRcdFx0Y29uc3Qgc1NlbUtleSA9IGFTZW1LZXlzW2pdLiRQcm9wZXJ0eVBhdGg7XG5cdFx0XHRcdFx0aWYgKCFvUGFyYW1bc1NlbUtleV0pIHtcblx0XHRcdFx0XHRcdG9QYXJhbVtzU2VtS2V5XSA9IHsgdmFsdWU6IG9FbnRyeVtzU2VtS2V5XSB9O1xuXHRcdFx0XHRcdH1cblx0XHRcdFx0fVxuXHRcdFx0fSBlbHNlIHtcblx0XHRcdFx0Ly8gZmFsbGJhY2sgdG8gVGVjaG5pY2FsIEtleXMgaWYgbm8gU2VtYW50aWMgS2V5IGlzIHByZXNlbnRcblx0XHRcdFx0Y29uc3QgYVRlY2huaWNhbEtleXMgPSBvTWV0YU1vZGVsLmdldE9iamVjdChgJHtvTWV0YVBhdGh9LyRUeXBlLyRLZXlgKTtcblx0XHRcdFx0Zm9yIChjb25zdCBrZXkgaW4gYVRlY2huaWNhbEtleXMpIHtcblx0XHRcdFx0XHRjb25zdCBzT2JqS2V5ID0gYVRlY2huaWNhbEtleXNba2V5XTtcblx0XHRcdFx0XHRpZiAoIW9QYXJhbVtzT2JqS2V5XSkge1xuXHRcdFx0XHRcdFx0b1BhcmFtW3NPYmpLZXldID0geyB2YWx1ZTogb0VudHJ5W3NPYmpLZXldIH07XG5cdFx0XHRcdFx0fVxuXHRcdFx0XHR9XG5cdFx0XHR9XG5cdFx0fVxuXHRcdC8vIExvZ2ljIHRvIHJlYWQgYWRkaXRpb25hbCBTTyBmcm9tIG1hbmlmZXN0IGFuZCB1cGRhdGVkIHJlbGF0ZWRhcHBzIG1vZGVsXG5cblx0XHRjb25zdCBvTWFuaWZlc3REYXRhID0gZ2V0VGFyZ2V0VmlldyhvT2JqZWN0UGFnZUxheW91dCkuZ2V0Vmlld0RhdGEoKSBhcyBTZW1hbnRpY09iamVjdENvbmZpZztcblx0XHRjb25zdCBhTWFuaWZlc3RTT0l0ZW1zOiBTZW1hbnRpY0l0ZW1bXSA9IFtdO1xuXHRcdGxldCBzZW1hbnRpY09iamVjdEludGVudHM7XG5cdFx0aWYgKG9NYW5pZmVzdERhdGEuYWRkaXRpb25hbFNlbWFudGljT2JqZWN0cykge1xuXHRcdFx0YU1hbmlmZXN0U09LZXlzID0gT2JqZWN0LmtleXMob01hbmlmZXN0RGF0YS5hZGRpdGlvbmFsU2VtYW50aWNPYmplY3RzKTtcblx0XHRcdGZvciAobGV0IGtleSA9IDA7IGtleSA8IGFNYW5pZmVzdFNPS2V5cy5sZW5ndGg7IGtleSsrKSB7XG5cdFx0XHRcdHNlbWFudGljT2JqZWN0SW50ZW50cyA9IGF3YWl0IFByb21pc2UucmVzb2x2ZShcblx0XHRcdFx0XHRfZ2V0U09JbnRlbnRzKG9TaGVsbFNlcnZpY2VIZWxwZXIsIG9PYmplY3RQYWdlTGF5b3V0LCBhTWFuaWZlc3RTT0tleXNba2V5XSwgb1BhcmFtKVxuXHRcdFx0XHQpO1xuXHRcdFx0XHRfZ2V0UmVsYXRlZEludGVudHMoXG5cdFx0XHRcdFx0b01hbmlmZXN0RGF0YS5hZGRpdGlvbmFsU2VtYW50aWNPYmplY3RzW2FNYW5pZmVzdFNPS2V5c1trZXldXSxcblx0XHRcdFx0XHRvQmluZGluZ0NvbnRleHQsXG5cdFx0XHRcdFx0YU1hbmlmZXN0U09JdGVtcyxcblx0XHRcdFx0XHRzZW1hbnRpY09iamVjdEludGVudHNcblx0XHRcdFx0KTtcblx0XHRcdH1cblx0XHR9XG5cblx0XHQvLyBhcHBDb21wb25lbnRTT0l0ZW1zIGlzIHVwZGF0ZWQgaW4gY2FzZSBvZiBNeSBJbmJveCBpbnRlZ3JhdGlvbiB3aGVuIHNlbWFudGljIG9iamVjdCBhbmQgYWN0aW9uIGFyZSBwYXNzZWQgZnJvbSBmZUVudmlyb25tZW50LmdldEludGVudCgpIG1ldGhvZFxuXHRcdC8vIEluIG90aGVyIGNhc2VzIGl0IHJlbWFpbnMgYXMgYW4gZW1wdHkgbGlzdFxuXHRcdC8vIFdlIGNvbmNhdCB0aGlzIGxpc3QgdG93YXJkcyB0aGUgZW5kIHdpdGggYU1hbmlmZXN0U09JdGVtc1xuXG5cdFx0Y29uc3QgYXBwQ29tcG9uZW50U09JdGVtczogU2VtYW50aWNJdGVtW10gPSBbXTtcblx0XHRjb25zdCBjb21wb25lbnREYXRhOiBDb21wb25lbnREYXRhID0gYXBwQ29tcG9uZW50LmdldENvbXBvbmVudERhdGEoKTtcblx0XHRpZiAoY29tcG9uZW50RGF0YS5mZUVudmlyb25tZW50ICYmIGNvbXBvbmVudERhdGEuZmVFbnZpcm9ubWVudC5nZXRJbnRlbnQoKSkge1xuXHRcdFx0Y29uc3QgaW50ZW50OiBNeUluYm94SW50ZW50ID0gY29tcG9uZW50RGF0YS5mZUVudmlyb25tZW50LmdldEludGVudCgpO1xuXHRcdFx0c2VtYW50aWNPYmplY3RJbnRlbnRzID0gYXdhaXQgUHJvbWlzZS5yZXNvbHZlKFxuXHRcdFx0XHRfZ2V0U09JbnRlbnRzKG9TaGVsbFNlcnZpY2VIZWxwZXIsIG9PYmplY3RQYWdlTGF5b3V0LCBpbnRlbnQuc2VtYW50aWNPYmplY3QsIG9QYXJhbSlcblx0XHRcdCk7XG5cdFx0XHRfZ2V0UmVsYXRlZEludGVudHNXaXRoU2VtYW50aWNPYmplY3RzQW5kQWN0aW9uKGludGVudCwgb0JpbmRpbmdDb250ZXh0LCBhcHBDb21wb25lbnRTT0l0ZW1zLCBzZW1hbnRpY09iamVjdEludGVudHMpO1xuXHRcdH1cblxuXHRcdGNvbnN0IGludGVybmFsTW9kZWxDb250ZXh0ID0gb09iamVjdFBhZ2VMYXlvdXQuZ2V0QmluZGluZ0NvbnRleHQoXCJpbnRlcm5hbFwiKSBhcyBJbnRlcm5hbE1vZGVsQ29udGV4dDtcblx0XHRjb25zdCBhTGlua3MgPSBhd2FpdCBmbkdldFBhcnNlU2hlbGxIYXNoQW5kR2V0TGlua3MoKTtcblx0XHRpZiAoYUxpbmtzKSB7XG5cdFx0XHRpZiAoYUxpbmtzLmxlbmd0aCA+IDApIHtcblx0XHRcdFx0bGV0IGlzU2VtYW50aWNPYmplY3RIYXNTYW1lVGFyZ2V0SW5NYW5pZmVzdCA9IGZhbHNlO1xuXHRcdFx0XHRjb25zdCBvVGFyZ2V0UGFyYW1zOiB7XG5cdFx0XHRcdFx0bmF2aWdhdGlvbkNvbnRleHRzPzogQ29udGV4dDtcblx0XHRcdFx0XHRzZW1hbnRpY09iamVjdE1hcHBpbmc/OiBNZXRhTW9kZWxUeXBlPFNlbWFudGljT2JqZWN0TWFwcGluZ1R5cGU+W107XG5cdFx0XHRcdH0gPSB7fTtcblx0XHRcdFx0Y29uc3QgYUFubm90YXRpb25zU09JdGVtczogU2VtYW50aWNJdGVtW10gPSBbXTtcblx0XHRcdFx0Y29uc3Qgc0VudGl0eVNldFBhdGggPSBgJHtvTWV0YVBhdGh9QGA7XG5cdFx0XHRcdGNvbnN0IHNFbnRpdHlUeXBlUGF0aCA9IGAke29NZXRhUGF0aH0vQGA7XG5cdFx0XHRcdGNvbnN0IG9FbnRpdHlTZXRBbm5vdGF0aW9ucyA9IG9NZXRhTW9kZWwuZ2V0T2JqZWN0KHNFbnRpdHlTZXRQYXRoKTtcblx0XHRcdFx0b1NlbWFudGljT2JqZWN0QW5ub3RhdGlvbnMgPSBDb21tb25VdGlscy5nZXRTZW1hbnRpY09iamVjdEFubm90YXRpb25zKG9FbnRpdHlTZXRBbm5vdGF0aW9ucywgc0N1cnJlbnRTZW1PYmopO1xuXHRcdFx0XHRpZiAoIW9TZW1hbnRpY09iamVjdEFubm90YXRpb25zLmJIYXNFbnRpdHlTZXRTTykge1xuXHRcdFx0XHRcdGNvbnN0IG9FbnRpdHlUeXBlQW5ub3RhdGlvbnMgPSBvTWV0YU1vZGVsLmdldE9iamVjdChzRW50aXR5VHlwZVBhdGgpO1xuXHRcdFx0XHRcdG9TZW1hbnRpY09iamVjdEFubm90YXRpb25zID0gQ29tbW9uVXRpbHMuZ2V0U2VtYW50aWNPYmplY3RBbm5vdGF0aW9ucyhvRW50aXR5VHlwZUFubm90YXRpb25zLCBzQ3VycmVudFNlbU9iaik7XG5cdFx0XHRcdH1cblx0XHRcdFx0YUV4Y2x1ZGVkQWN0aW9ucyA9IG9TZW1hbnRpY09iamVjdEFubm90YXRpb25zLmFVbmF2YWlsYWJsZUFjdGlvbnM7XG5cdFx0XHRcdC8vU2tpcCBzYW1lIGFwcGxpY2F0aW9uIGZyb20gUmVsYXRlZCBBcHBzXG5cdFx0XHRcdGFFeGNsdWRlZEFjdGlvbnMucHVzaChzQ3VycmVudEFjdGlvbik7XG5cdFx0XHRcdG9UYXJnZXRQYXJhbXMubmF2aWdhdGlvbkNvbnRleHRzID0gb0JpbmRpbmdDb250ZXh0O1xuXHRcdFx0XHRvVGFyZ2V0UGFyYW1zLnNlbWFudGljT2JqZWN0TWFwcGluZyA9IG9TZW1hbnRpY09iamVjdEFubm90YXRpb25zLmFNYXBwaW5ncztcblx0XHRcdFx0X2dldFJlbGF0ZWRBcHBzTWVudUl0ZW1zKGFMaW5rcywgYUV4Y2x1ZGVkQWN0aW9ucywgb1RhcmdldFBhcmFtcywgYUFubm90YXRpb25zU09JdGVtcyk7XG5cblx0XHRcdFx0YU1hbmlmZXN0U09JdGVtcy5mb3JFYWNoKGZ1bmN0aW9uICh7IHRhcmdldFNlbU9iamVjdCB9KSB7XG5cdFx0XHRcdFx0aWYgKGFBbm5vdGF0aW9uc1NPSXRlbXNbMF0/LnRhcmdldFNlbU9iamVjdCA9PT0gdGFyZ2V0U2VtT2JqZWN0KSB7XG5cdFx0XHRcdFx0XHRpc1NlbWFudGljT2JqZWN0SGFzU2FtZVRhcmdldEluTWFuaWZlc3QgPSB0cnVlO1xuXHRcdFx0XHRcdH1cblx0XHRcdFx0fSk7XG5cblx0XHRcdFx0Ly8gcmVtb3ZlIGFsbCBhY3Rpb25zIGZyb20gY3VycmVudCBoYXNoIGFwcGxpY2F0aW9uIGlmIG1hbmlmZXN0IGNvbnRhaW5zIGVtcHR5IGFsbG93ZWRBY3Rpb25zXG5cdFx0XHRcdGlmIChcblx0XHRcdFx0XHRvTWFuaWZlc3REYXRhLmFkZGl0aW9uYWxTZW1hbnRpY09iamVjdHMgJiZcblx0XHRcdFx0XHRhQW5ub3RhdGlvbnNTT0l0ZW1zWzBdICYmXG5cdFx0XHRcdFx0b01hbmlmZXN0RGF0YS5hZGRpdGlvbmFsU2VtYW50aWNPYmplY3RzW2FBbm5vdGF0aW9uc1NPSXRlbXNbMF0udGFyZ2V0U2VtT2JqZWN0XSAmJlxuXHRcdFx0XHRcdG9NYW5pZmVzdERhdGEuYWRkaXRpb25hbFNlbWFudGljT2JqZWN0c1thQW5ub3RhdGlvbnNTT0l0ZW1zWzBdLnRhcmdldFNlbU9iamVjdF0uYWxsb3dlZEFjdGlvbnM/Lmxlbmd0aCA9PT0gMFxuXHRcdFx0XHQpIHtcblx0XHRcdFx0XHRpc1NlbWFudGljT2JqZWN0SGFzU2FtZVRhcmdldEluTWFuaWZlc3QgPSB0cnVlO1xuXHRcdFx0XHR9XG5cdFx0XHRcdGNvbnN0IHNvSXRlbXMgPSBhTWFuaWZlc3RTT0l0ZW1zLmNvbmNhdChhcHBDb21wb25lbnRTT0l0ZW1zKTtcblx0XHRcdFx0YVJlbGF0ZWRBcHBzTWVudUl0ZW1zID0gaXNTZW1hbnRpY09iamVjdEhhc1NhbWVUYXJnZXRJbk1hbmlmZXN0ID8gc29JdGVtcyA6IHNvSXRlbXMuY29uY2F0KGFBbm5vdGF0aW9uc1NPSXRlbXMpO1xuXHRcdFx0XHQvLyBJZiBubyBhcHAgaW4gbGlzdCwgcmVsYXRlZCBhcHBzIGJ1dHRvbiB3aWxsIGJlIGhpZGRlblxuXHRcdFx0XHRpbnRlcm5hbE1vZGVsQ29udGV4dC5zZXRQcm9wZXJ0eShcInJlbGF0ZWRBcHBzL3Zpc2liaWxpdHlcIiwgYVJlbGF0ZWRBcHBzTWVudUl0ZW1zLmxlbmd0aCA+IDApO1xuXHRcdFx0XHRpbnRlcm5hbE1vZGVsQ29udGV4dC5zZXRQcm9wZXJ0eShcInJlbGF0ZWRBcHBzL2l0ZW1zXCIsIGFSZWxhdGVkQXBwc01lbnVJdGVtcyk7XG5cdFx0XHR9IGVsc2Uge1xuXHRcdFx0XHRpbnRlcm5hbE1vZGVsQ29udGV4dC5zZXRQcm9wZXJ0eShcInJlbGF0ZWRBcHBzL3Zpc2liaWxpdHlcIiwgZmFsc2UpO1xuXHRcdFx0fVxuXHRcdH0gZWxzZSB7XG5cdFx0XHRpbnRlcm5hbE1vZGVsQ29udGV4dC5zZXRQcm9wZXJ0eShcInJlbGF0ZWRBcHBzL3Zpc2liaWxpdHlcIiwgZmFsc2UpO1xuXHRcdH1cblx0fSBjYXRjaCAoZXJyb3I6IHVua25vd24pIHtcblx0XHRMb2cuZXJyb3IoXCJDYW5ub3QgcmVhZCBsaW5rc1wiLCBlcnJvciBhcyBzdHJpbmcpO1xuXHR9XG5cdHJldHVybiBhUmVsYXRlZEFwcHNNZW51SXRlbXM7XG59XG5cbmZ1bmN0aW9uIF9nZXRTZW1hbnRpY09iamVjdEFubm90YXRpb25zKG9FbnRpdHlBbm5vdGF0aW9uczogUmVjb3JkPHN0cmluZywgdW5rbm93bj4sIHNDdXJyZW50U2VtT2JqOiBzdHJpbmcpIHtcblx0Y29uc3Qgb1NlbWFudGljT2JqZWN0QW5ub3RhdGlvbnMgPSB7XG5cdFx0Ykhhc0VudGl0eVNldFNPOiBmYWxzZSxcblx0XHRhQWxsb3dlZEFjdGlvbnM6IFtdLFxuXHRcdGFVbmF2YWlsYWJsZUFjdGlvbnM6IFtdIGFzIE1ldGFNb2RlbFR5cGU8U2VtYW50aWNPYmplY3RVbmF2YWlsYWJsZUFjdGlvbnM+W10sXG5cdFx0YU1hcHBpbmdzOiBbXSBhcyBNZXRhTW9kZWxUeXBlPFNlbWFudGljT2JqZWN0TWFwcGluZ1R5cGU+W11cblx0fTtcblx0bGV0IHNBbm5vdGF0aW9uTWFwcGluZ1Rlcm0sIHNBbm5vdGF0aW9uQWN0aW9uVGVybTtcblx0bGV0IHNRdWFsaWZpZXI7XG5cdGZvciAoY29uc3Qga2V5IGluIG9FbnRpdHlBbm5vdGF0aW9ucykge1xuXHRcdGlmIChrZXkuaW5kZXhPZihDb21tb25Bbm5vdGF0aW9uVGVybXMuU2VtYW50aWNPYmplY3QpID4gLTEgJiYgb0VudGl0eUFubm90YXRpb25zW2tleV0gPT09IHNDdXJyZW50U2VtT2JqKSB7XG5cdFx0XHRvU2VtYW50aWNPYmplY3RBbm5vdGF0aW9ucy5iSGFzRW50aXR5U2V0U08gPSB0cnVlO1xuXHRcdFx0c0Fubm90YXRpb25NYXBwaW5nVGVybSA9IGBAJHtDb21tb25Bbm5vdGF0aW9uVGVybXMuU2VtYW50aWNPYmplY3RNYXBwaW5nfWA7XG5cdFx0XHRzQW5ub3RhdGlvbkFjdGlvblRlcm0gPSBgQCR7Q29tbW9uQW5ub3RhdGlvblRlcm1zLlNlbWFudGljT2JqZWN0VW5hdmFpbGFibGVBY3Rpb25zfWA7XG5cblx0XHRcdGlmIChrZXkuaW5kZXhPZihcIiNcIikgPiAtMSkge1xuXHRcdFx0XHRzUXVhbGlmaWVyID0ga2V5LnNwbGl0KFwiI1wiKVsxXTtcblx0XHRcdFx0c0Fubm90YXRpb25NYXBwaW5nVGVybSA9IGAke3NBbm5vdGF0aW9uTWFwcGluZ1Rlcm19IyR7c1F1YWxpZmllcn1gO1xuXHRcdFx0XHRzQW5ub3RhdGlvbkFjdGlvblRlcm0gPSBgJHtzQW5ub3RhdGlvbkFjdGlvblRlcm19IyR7c1F1YWxpZmllcn1gO1xuXHRcdFx0fVxuXHRcdFx0aWYgKG9FbnRpdHlBbm5vdGF0aW9uc1tzQW5ub3RhdGlvbk1hcHBpbmdUZXJtXSkge1xuXHRcdFx0XHRvU2VtYW50aWNPYmplY3RBbm5vdGF0aW9ucy5hTWFwcGluZ3MgPSBvU2VtYW50aWNPYmplY3RBbm5vdGF0aW9ucy5hTWFwcGluZ3MuY29uY2F0KFxuXHRcdFx0XHRcdG9FbnRpdHlBbm5vdGF0aW9uc1tzQW5ub3RhdGlvbk1hcHBpbmdUZXJtXSBhcyBNZXRhTW9kZWxUeXBlPFNlbWFudGljT2JqZWN0TWFwcGluZ1R5cGU+XG5cdFx0XHRcdCk7XG5cdFx0XHR9XG5cblx0XHRcdGlmIChvRW50aXR5QW5ub3RhdGlvbnNbc0Fubm90YXRpb25BY3Rpb25UZXJtXSkge1xuXHRcdFx0XHRvU2VtYW50aWNPYmplY3RBbm5vdGF0aW9ucy5hVW5hdmFpbGFibGVBY3Rpb25zID0gb1NlbWFudGljT2JqZWN0QW5ub3RhdGlvbnMuYVVuYXZhaWxhYmxlQWN0aW9ucy5jb25jYXQoXG5cdFx0XHRcdFx0b0VudGl0eUFubm90YXRpb25zW3NBbm5vdGF0aW9uQWN0aW9uVGVybV0gYXMgTWV0YU1vZGVsVHlwZTxTZW1hbnRpY09iamVjdFVuYXZhaWxhYmxlQWN0aW9ucz5cblx0XHRcdFx0KTtcblx0XHRcdH1cblxuXHRcdFx0YnJlYWs7XG5cdFx0fVxuXHR9XG5cdHJldHVybiBvU2VtYW50aWNPYmplY3RBbm5vdGF0aW9ucztcbn1cblxuZnVuY3Rpb24gZm5VcGRhdGVSZWxhdGVkQXBwc0RldGFpbHMob09iamVjdFBhZ2VMYXlvdXQ6IE9iamVjdFBhZ2VMYXlvdXQsIGFwcENvbXBvbmVudDogQXBwQ29tcG9uZW50KSB7XG5cdGNvbnN0IG9NZXRhTW9kZWwgPSBvT2JqZWN0UGFnZUxheW91dC5nZXRNb2RlbCgpLmdldE1ldGFNb2RlbCgpIGFzIE9EYXRhTWV0YU1vZGVsO1xuXHRjb25zdCBvQmluZGluZ0NvbnRleHQgPSBvT2JqZWN0UGFnZUxheW91dC5nZXRCaW5kaW5nQ29udGV4dCgpIGFzIE9EYXRhVjRDb250ZXh0O1xuXHRjb25zdCBwYXRoID0gKG9CaW5kaW5nQ29udGV4dCAmJiBvQmluZGluZ0NvbnRleHQuZ2V0UGF0aCgpKSB8fCBcIlwiO1xuXHRjb25zdCBvTWV0YVBhdGggPSBvTWV0YU1vZGVsLmdldE1ldGFQYXRoKHBhdGgpO1xuXHQvLyBTZW1hbnRpYyBLZXkgVm9jYWJ1bGFyeVxuXHRjb25zdCBzU2VtYW50aWNLZXlWb2NhYnVsYXJ5ID0gYCR7b01ldGFQYXRofS9gICsgYEBjb20uc2FwLnZvY2FidWxhcmllcy5Db21tb24udjEuU2VtYW50aWNLZXlgO1xuXHQvL1NlbWFudGljIEtleXNcblx0Y29uc3QgYVNlbUtleXMgPSBvTWV0YU1vZGVsLmdldE9iamVjdChzU2VtYW50aWNLZXlWb2NhYnVsYXJ5KTtcblx0Ly8gVW5hdmFpbGFibGUgQWN0aW9uc1xuXHRjb25zdCBvRW50cnkgPSBvQmluZGluZ0NvbnRleHQ/LmdldE9iamVjdCgpO1xuXHRpZiAoIW9FbnRyeSAmJiBvQmluZGluZ0NvbnRleHQpIHtcblx0XHRvQmluZGluZ0NvbnRleHRcblx0XHRcdC5yZXF1ZXN0T2JqZWN0KClcblx0XHRcdC50aGVuKGFzeW5jIGZ1bmN0aW9uIChyZXF1ZXN0ZWRPYmplY3Q6IFJlY29yZDxzdHJpbmcsIHVua25vd24+IHwgdW5kZWZpbmVkKSB7XG5cdFx0XHRcdHJldHVybiBDb21tb25VdGlscy51cGRhdGVSZWxhdGVBcHBzTW9kZWwoXG5cdFx0XHRcdFx0b0JpbmRpbmdDb250ZXh0LFxuXHRcdFx0XHRcdHJlcXVlc3RlZE9iamVjdCxcblx0XHRcdFx0XHRvT2JqZWN0UGFnZUxheW91dCxcblx0XHRcdFx0XHRhU2VtS2V5cyxcblx0XHRcdFx0XHRvTWV0YU1vZGVsLFxuXHRcdFx0XHRcdG9NZXRhUGF0aCxcblx0XHRcdFx0XHRhcHBDb21wb25lbnRcblx0XHRcdFx0KTtcblx0XHRcdH0pXG5cdFx0XHQuY2F0Y2goZnVuY3Rpb24gKG9FcnJvcjogdW5rbm93bikge1xuXHRcdFx0XHRMb2cuZXJyb3IoXCJDYW5ub3QgdXBkYXRlIHRoZSByZWxhdGVkIGFwcCBkZXRhaWxzXCIsIG9FcnJvciBhcyBzdHJpbmcpO1xuXHRcdFx0fSk7XG5cdH0gZWxzZSB7XG5cdFx0cmV0dXJuIENvbW1vblV0aWxzLnVwZGF0ZVJlbGF0ZUFwcHNNb2RlbChvQmluZGluZ0NvbnRleHQsIG9FbnRyeSwgb09iamVjdFBhZ2VMYXlvdXQsIGFTZW1LZXlzLCBvTWV0YU1vZGVsLCBvTWV0YVBhdGgsIGFwcENvbXBvbmVudCk7XG5cdH1cbn1cblxuLyoqXG4gKiBAcGFyYW0gb0J1dHRvblxuICovXG5mdW5jdGlvbiBmbkZpcmVCdXR0b25QcmVzcyhvQnV0dG9uOiBDb250cm9sKSB7XG5cdGlmIChcblx0XHRvQnV0dG9uICYmXG5cdFx0b0J1dHRvbi5pc0E8QnV0dG9uIHwgT3ZlcmZsb3dUb29sYmFyQnV0dG9uPihbXCJzYXAubS5CdXR0b25cIiwgXCJzYXAubS5PdmVyZmxvd1Rvb2xiYXJCdXR0b25cIl0pICYmXG5cdFx0b0J1dHRvbi5nZXRWaXNpYmxlKCkgJiZcblx0XHRvQnV0dG9uLmdldEVuYWJsZWQoKVxuXHQpIHtcblx0XHRvQnV0dG9uLmZpcmVQcmVzcygpO1xuXHR9XG59XG5cbmZ1bmN0aW9uIGZuUmVzb2x2ZVN0cmluZ3RvQm9vbGVhbihzVmFsdWU6IHN0cmluZyB8IGJvb2xlYW4pIHtcblx0aWYgKHNWYWx1ZSA9PT0gXCJ0cnVlXCIgfHwgc1ZhbHVlID09PSB0cnVlKSB7XG5cdFx0cmV0dXJuIHRydWU7XG5cdH0gZWxzZSB7XG5cdFx0cmV0dXJuIGZhbHNlO1xuXHR9XG59XG5cbmZ1bmN0aW9uIGdldEFwcENvbXBvbmVudChvQ29udHJvbDogQ29udHJvbCB8IENvbXBvbmVudCk6IEFwcENvbXBvbmVudCB7XG5cdGlmIChvQ29udHJvbC5pc0E8QXBwQ29tcG9uZW50PihcInNhcC5mZS5jb3JlLkFwcENvbXBvbmVudFwiKSkge1xuXHRcdHJldHVybiBvQ29udHJvbDtcblx0fVxuXHRjb25zdCBvT3duZXIgPSBDb21wb25lbnQuZ2V0T3duZXJDb21wb25lbnRGb3Iob0NvbnRyb2wpO1xuXHRpZiAoIW9Pd25lcikge1xuXHRcdHRocm93IG5ldyBFcnJvcihcIlRoZXJlIHNob3VsZCBiZSBhIHNhcC5mZS5jb3JlLkFwcENvbXBvbmVudCBhcyBvd25lciBvZiB0aGUgY29udHJvbFwiKTtcblx0fSBlbHNlIHtcblx0XHRyZXR1cm4gZ2V0QXBwQ29tcG9uZW50KG9Pd25lcik7XG5cdH1cbn1cblxuZnVuY3Rpb24gZ2V0Q3VycmVudFBhZ2VWaWV3KG9BcHBDb21wb25lbnQ6IEFwcENvbXBvbmVudCkge1xuXHRjb25zdCByb290Vmlld0NvbnRyb2xsZXIgPSBvQXBwQ29tcG9uZW50LmdldFJvb3RWaWV3Q29udHJvbGxlcigpO1xuXHRyZXR1cm4gcm9vdFZpZXdDb250cm9sbGVyLmlzRmNsRW5hYmxlZCgpXG5cdFx0PyByb290Vmlld0NvbnRyb2xsZXIuZ2V0UmlnaHRtb3N0VmlldygpXG5cdFx0OiBDb21tb25VdGlscy5nZXRUYXJnZXRWaWV3KChvQXBwQ29tcG9uZW50LmdldFJvb3RDb250YWluZXIoKSBhcyBOYXZDb250YWluZXIpLmdldEN1cnJlbnRQYWdlKCkpO1xufVxuXG5mdW5jdGlvbiBnZXRUYXJnZXRWaWV3KG9Db250cm9sOiBNYW5hZ2VkT2JqZWN0IHwgbnVsbCk6IFZpZXcge1xuXHRpZiAob0NvbnRyb2wgJiYgb0NvbnRyb2wuaXNBPENvbXBvbmVudENvbnRhaW5lcj4oXCJzYXAudWkuY29yZS5Db21wb25lbnRDb250YWluZXJcIikpIHtcblx0XHRjb25zdCBvQ29tcG9uZW50ID0gb0NvbnRyb2wuZ2V0Q29tcG9uZW50SW5zdGFuY2UoKTtcblx0XHRvQ29udHJvbCA9IG9Db21wb25lbnQgJiYgb0NvbXBvbmVudC5nZXRSb290Q29udHJvbCgpO1xuXHR9XG5cdHdoaWxlIChvQ29udHJvbCAmJiAhb0NvbnRyb2wuaXNBPFZpZXc+KFwic2FwLnVpLmNvcmUubXZjLlZpZXdcIikpIHtcblx0XHRvQ29udHJvbCA9IG9Db250cm9sLmdldFBhcmVudCgpO1xuXHR9XG5cdHJldHVybiBvQ29udHJvbCE7XG59XG5cbmZ1bmN0aW9uIGlzRmllbGRDb250cm9sUGF0aEluYXBwbGljYWJsZShzRmllbGRDb250cm9sUGF0aDogc3RyaW5nLCBvQXR0cmlidXRlOiBSZWNvcmQ8c3RyaW5nLCB1bmtub3duPikge1xuXHRsZXQgYkluYXBwbGljYWJsZSA9IGZhbHNlO1xuXHRjb25zdCBhUGFydHMgPSBzRmllbGRDb250cm9sUGF0aC5zcGxpdChcIi9cIik7XG5cdC8vIHNlbnNpdGl2ZSBkYXRhIGlzIHJlbW92ZWQgb25seSBpZiB0aGUgcGF0aCBoYXMgYWxyZWFkeSBiZWVuIHJlc29sdmVkLlxuXHRpZiAoYVBhcnRzLmxlbmd0aCA+IDEpIHtcblx0XHRiSW5hcHBsaWNhYmxlID1cblx0XHRcdG9BdHRyaWJ1dGVbYVBhcnRzWzBdXSAhPT0gdW5kZWZpbmVkICYmXG5cdFx0XHQob0F0dHJpYnV0ZVthUGFydHNbMF1dIGFzIFJlY29yZDxzdHJpbmcsIHVua25vd24+KS5oYXNPd25Qcm9wZXJ0eShhUGFydHNbMV0pICYmXG5cdFx0XHQob0F0dHJpYnV0ZVthUGFydHNbMF1dIGFzIFJlY29yZDxzdHJpbmcsIHVua25vd24+KVthUGFydHNbMV1dID09PSAwO1xuXHR9IGVsc2Uge1xuXHRcdGJJbmFwcGxpY2FibGUgPSBvQXR0cmlidXRlW3NGaWVsZENvbnRyb2xQYXRoXSA9PT0gMDtcblx0fVxuXHRyZXR1cm4gYkluYXBwbGljYWJsZTtcbn1cbnR5cGUgVW5rbm93bk9EYXRhT2JqZWN0ID0ge1xuXHRlbnRpdHlTZXQ/OiBzdHJpbmc7XG5cdGNvbnRleHREYXRhOiB7XG5cdFx0XCJAb2RhdGEuY29udGV4dFwiPzogc3RyaW5nO1xuXHRcdFwiJTQwb2RhdGEuY29udGV4dFwiPzogc3RyaW5nO1xuXHRcdFwiQG9kYXRhLm1ldGFkYXRhRXRhZ1wiPzogc3RyaW5nO1xuXHRcdFwiJTQwb2RhdGEubWV0YWRhdGFFdGFnXCI/OiBzdHJpbmc7XG5cdFx0U0FQX19NZXNzYWdlcz86IHN0cmluZztcblx0XHRbUzogc3RyaW5nXTogc3RyaW5nIHwgdW5kZWZpbmVkO1xuXHR9O1xufTtcbmZ1bmN0aW9uIHJlbW92ZVNlbnNpdGl2ZURhdGEoYUF0dHJpYnV0ZXM6IFVua25vd25PRGF0YU9iamVjdFtdLCBvTWV0YU1vZGVsOiBPRGF0YU1ldGFNb2RlbCkge1xuXHRjb25zdCBhT3V0QXR0cmlidXRlcyA9IFtdO1xuXHRmb3IgKGxldCBpID0gMDsgaSA8IGFBdHRyaWJ1dGVzLmxlbmd0aDsgaSsrKSB7XG5cdFx0Y29uc3Qgc0VudGl0eVNldCA9IGFBdHRyaWJ1dGVzW2ldLmVudGl0eVNldCEsXG5cdFx0XHRvQXR0cmlidXRlID0gYUF0dHJpYnV0ZXNbaV0uY29udGV4dERhdGE7XG5cblx0XHRkZWxldGUgb0F0dHJpYnV0ZVtcIkBvZGF0YS5jb250ZXh0XCJdO1xuXHRcdGRlbGV0ZSBvQXR0cmlidXRlW1wiJTQwb2RhdGEuY29udGV4dFwiXTtcblx0XHRkZWxldGUgb0F0dHJpYnV0ZVtcIkBvZGF0YS5tZXRhZGF0YUV0YWdcIl07XG5cdFx0ZGVsZXRlIG9BdHRyaWJ1dGVbXCIlNDBvZGF0YS5tZXRhZGF0YUV0YWdcIl07XG5cdFx0ZGVsZXRlIG9BdHRyaWJ1dGVbXCJTQVBfX01lc3NhZ2VzXCJdO1xuXHRcdGNvbnN0IGFQcm9wZXJ0aWVzID0gT2JqZWN0LmtleXMob0F0dHJpYnV0ZSk7XG5cdFx0Zm9yIChsZXQgaiA9IDA7IGogPCBhUHJvcGVydGllcy5sZW5ndGg7IGorKykge1xuXHRcdFx0Y29uc3Qgc1Byb3AgPSBhUHJvcGVydGllc1tqXSxcblx0XHRcdFx0YVByb3BlcnR5QW5ub3RhdGlvbnMgPSBvTWV0YU1vZGVsLmdldE9iamVjdChgLyR7c0VudGl0eVNldH0vJHtzUHJvcH1AYCk7XG5cdFx0XHRpZiAoYVByb3BlcnR5QW5ub3RhdGlvbnMpIHtcblx0XHRcdFx0aWYgKFxuXHRcdFx0XHRcdGFQcm9wZXJ0eUFubm90YXRpb25zW1wiQGNvbS5zYXAudm9jYWJ1bGFyaWVzLlBlcnNvbmFsRGF0YS52MS5Jc1BvdGVudGlhbGx5U2Vuc2l0aXZlXCJdIHx8XG5cdFx0XHRcdFx0YVByb3BlcnR5QW5ub3RhdGlvbnNbXCJAY29tLnNhcC52b2NhYnVsYXJpZXMuVUkudjEuRXhjbHVkZUZyb21OYXZpZ2F0aW9uQ29udGV4dFwiXSB8fFxuXHRcdFx0XHRcdGFQcm9wZXJ0eUFubm90YXRpb25zW1wiQGNvbS5zYXAudm9jYWJ1bGFyaWVzLkFuYWx5dGljcy52MS5NZWFzdXJlXCJdXG5cdFx0XHRcdCkge1xuXHRcdFx0XHRcdGRlbGV0ZSBvQXR0cmlidXRlW3NQcm9wXTtcblx0XHRcdFx0fSBlbHNlIGlmIChhUHJvcGVydHlBbm5vdGF0aW9uc1tcIkBjb20uc2FwLnZvY2FidWxhcmllcy5Db21tb24udjEuRmllbGRDb250cm9sXCJdKSB7XG5cdFx0XHRcdFx0Y29uc3Qgb0ZpZWxkQ29udHJvbCA9IGFQcm9wZXJ0eUFubm90YXRpb25zW1wiQGNvbS5zYXAudm9jYWJ1bGFyaWVzLkNvbW1vbi52MS5GaWVsZENvbnRyb2xcIl07XG5cdFx0XHRcdFx0aWYgKG9GaWVsZENvbnRyb2xbXCIkRW51bU1lbWJlclwiXSAmJiBvRmllbGRDb250cm9sW1wiJEVudW1NZW1iZXJcIl0uc3BsaXQoXCIvXCIpWzFdID09PSBcIkluYXBwbGljYWJsZVwiKSB7XG5cdFx0XHRcdFx0XHRkZWxldGUgb0F0dHJpYnV0ZVtzUHJvcF07XG5cdFx0XHRcdFx0fSBlbHNlIGlmIChvRmllbGRDb250cm9sW1wiJFBhdGhcIl0gJiYgQ29tbW9uVXRpbHMuaXNGaWVsZENvbnRyb2xQYXRoSW5hcHBsaWNhYmxlKG9GaWVsZENvbnRyb2xbXCIkUGF0aFwiXSwgb0F0dHJpYnV0ZSkpIHtcblx0XHRcdFx0XHRcdGRlbGV0ZSBvQXR0cmlidXRlW3NQcm9wXTtcblx0XHRcdFx0XHR9XG5cdFx0XHRcdH1cblx0XHRcdH1cblx0XHR9XG5cdFx0YU91dEF0dHJpYnV0ZXMucHVzaChvQXR0cmlidXRlKTtcblx0fVxuXG5cdHJldHVybiBhT3V0QXR0cmlidXRlcztcbn1cblxuZnVuY3Rpb24gX2ZuQ2hlY2tJc01hdGNoKG9PYmplY3Q6IG9iamVjdCwgb0tleXNUb0NoZWNrOiBSZWNvcmQ8c3RyaW5nLCB1bmtub3duPikge1xuXHRmb3IgKGNvbnN0IHNLZXkgaW4gb0tleXNUb0NoZWNrKSB7XG5cdFx0aWYgKG9LZXlzVG9DaGVja1tzS2V5XSAhPT0gb09iamVjdFtzS2V5IGFzIGtleW9mIHR5cGVvZiBvT2JqZWN0XSkge1xuXHRcdFx0cmV0dXJuIGZhbHNlO1xuXHRcdH1cblx0fVxuXHRyZXR1cm4gdHJ1ZTtcbn1cblxuZnVuY3Rpb24gZm5HZXRDb250ZXh0UGF0aFByb3BlcnRpZXMoXG5cdG1ldGFNb2RlbENvbnRleHQ6IE9EYXRhTWV0YU1vZGVsLFxuXHRzQ29udGV4dFBhdGg6IHN0cmluZyxcblx0b0ZpbHRlcj86IFJlY29yZDxzdHJpbmcsIHVua25vd24+XG4pOiBSZWNvcmQ8c3RyaW5nLCBNZXRhTW9kZWxQcm9wZXJ0eT4gfCBSZWNvcmQ8c3RyaW5nLCBNZXRhTW9kZWxOYXZQcm9wZXJ0eT4ge1xuXHRjb25zdCBvRW50aXR5VHlwZTogTWV0YU1vZGVsRW50aXR5VHlwZSA9IChtZXRhTW9kZWxDb250ZXh0LmdldE9iamVjdChgJHtzQ29udGV4dFBhdGh9L2ApIHx8IHt9KSBhcyBNZXRhTW9kZWxFbnRpdHlUeXBlLFxuXHRcdG9Qcm9wZXJ0aWVzOiBSZWNvcmQ8c3RyaW5nLCBNZXRhTW9kZWxQcm9wZXJ0eT4gfCBSZWNvcmQ8c3RyaW5nLCBNZXRhTW9kZWxOYXZQcm9wZXJ0eT4gPSB7fTtcblxuXHRmb3IgKGNvbnN0IHNLZXkgaW4gb0VudGl0eVR5cGUpIHtcblx0XHRpZiAoXG5cdFx0XHRvRW50aXR5VHlwZS5oYXNPd25Qcm9wZXJ0eShzS2V5KSAmJlxuXHRcdFx0IS9eXFwkL2kudGVzdChzS2V5KSAmJlxuXHRcdFx0b0VudGl0eVR5cGVbc0tleV0uJGtpbmQgJiZcblx0XHRcdF9mbkNoZWNrSXNNYXRjaChvRW50aXR5VHlwZVtzS2V5XSwgb0ZpbHRlciB8fCB7ICRraW5kOiBcIlByb3BlcnR5XCIgfSlcblx0XHQpIHtcblx0XHRcdG9Qcm9wZXJ0aWVzW3NLZXldID0gb0VudGl0eVR5cGVbc0tleV07XG5cdFx0fVxuXHR9XG5cdHJldHVybiBvUHJvcGVydGllcztcbn1cblxuZnVuY3Rpb24gZm5HZXRNYW5kYXRvcnlGaWx0ZXJGaWVsZHMob01ldGFNb2RlbDogT0RhdGFNZXRhTW9kZWwsIHNDb250ZXh0UGF0aDogc3RyaW5nKSB7XG5cdGxldCBhTWFuZGF0b3J5RmlsdGVyRmllbGRzOiBFeHBhbmRQYXRoVHlwZTxFZG0uUHJvcGVydHlQYXRoPltdID0gW107XG5cdGlmIChvTWV0YU1vZGVsICYmIHNDb250ZXh0UGF0aCkge1xuXHRcdGFNYW5kYXRvcnlGaWx0ZXJGaWVsZHMgPSBvTWV0YU1vZGVsLmdldE9iamVjdChcblx0XHRcdGAke3NDb250ZXh0UGF0aH1AT3JnLk9EYXRhLkNhcGFiaWxpdGllcy5WMS5GaWx0ZXJSZXN0cmljdGlvbnMvUmVxdWlyZWRQcm9wZXJ0aWVzYFxuXHRcdCkgYXMgRXhwYW5kUGF0aFR5cGU8RWRtLlByb3BlcnR5UGF0aD5bXTtcblx0fVxuXHRyZXR1cm4gYU1hbmRhdG9yeUZpbHRlckZpZWxkcztcbn1cblxuZnVuY3Rpb24gZm5HZXRJQk5BY3Rpb25zKG9Db250cm9sOiBUYWJsZSB8IE9iamVjdFBhZ2VEeW5hbWljSGVhZGVyVGl0bGUsIGFJQk5BY3Rpb25zOiB1bmtub3duW10pIHtcblx0Y29uc3QgYUFjdGlvbnMgPSBvQ29udHJvbCAmJiBvQ29udHJvbC5nZXRBY3Rpb25zKCk7XG5cdGlmIChhQWN0aW9ucykge1xuXHRcdGFBY3Rpb25zLmZvckVhY2goZnVuY3Rpb24gKG9BY3Rpb24pIHtcblx0XHRcdGlmIChvQWN0aW9uLmlzQTxBY3Rpb25Ub29sYmFyQWN0aW9uPihcInNhcC51aS5tZGMuYWN0aW9udG9vbGJhci5BY3Rpb25Ub29sYmFyQWN0aW9uXCIpKSB7XG5cdFx0XHRcdG9BY3Rpb24gPSBvQWN0aW9uLmdldEFjdGlvbigpO1xuXHRcdFx0fVxuXHRcdFx0aWYgKG9BY3Rpb24uaXNBPE1lbnVCdXR0b24+KFwic2FwLm0uTWVudUJ1dHRvblwiKSkge1xuXHRcdFx0XHRjb25zdCBvTWVudSA9IG9BY3Rpb24uZ2V0TWVudSgpO1xuXHRcdFx0XHRjb25zdCBhSXRlbXMgPSBvTWVudS5nZXRJdGVtcygpO1xuXHRcdFx0XHRhSXRlbXMuZm9yRWFjaCgob0l0ZW0pID0+IHtcblx0XHRcdFx0XHRpZiAob0l0ZW0uZGF0YShcIklCTkRhdGFcIikpIHtcblx0XHRcdFx0XHRcdGFJQk5BY3Rpb25zLnB1c2gob0l0ZW0pO1xuXHRcdFx0XHRcdH1cblx0XHRcdFx0fSk7XG5cdFx0XHR9IGVsc2UgaWYgKG9BY3Rpb24uZGF0YShcIklCTkRhdGFcIikpIHtcblx0XHRcdFx0YUlCTkFjdGlvbnMucHVzaChvQWN0aW9uKTtcblx0XHRcdH1cblx0XHR9KTtcblx0fVxuXHRyZXR1cm4gYUlCTkFjdGlvbnM7XG59XG5cbi8qKlxuICogQHBhcmFtIGFJQk5BY3Rpb25zXG4gKiBAcGFyYW0gb1ZpZXdcbiAqL1xuZnVuY3Rpb24gZm5VcGRhdGVEYXRhRmllbGRGb3JJQk5CdXR0b25zVmlzaWJpbGl0eShhSUJOQWN0aW9uczogQ29udHJvbFtdLCBvVmlldzogVmlldykge1xuXHRjb25zdCBvUGFyYW1zOiBSZWNvcmQ8c3RyaW5nLCB7IHZhbHVlOiB1bmtub3duIH0+ID0ge307XG5cdGNvbnN0IGlzU3RpY2t5ID0gTW9kZWxIZWxwZXIuaXNTdGlja3lTZXNzaW9uU3VwcG9ydGVkKChvVmlldy5nZXRNb2RlbCgpIGFzIE9EYXRhTW9kZWwpLmdldE1ldGFNb2RlbCgpKTtcblx0Y29uc3QgZm5HZXRMaW5rcyA9IGZ1bmN0aW9uIChvRGF0YT86IFJlY29yZDxzdHJpbmcsIHVua25vd24+IHwgdW5kZWZpbmVkKSB7XG5cdFx0aWYgKG9EYXRhKSB7XG5cdFx0XHRjb25zdCBhS2V5cyA9IE9iamVjdC5rZXlzKG9EYXRhKTtcblx0XHRcdGFLZXlzLmZvckVhY2goZnVuY3Rpb24gKHNLZXk6IHN0cmluZykge1xuXHRcdFx0XHRpZiAoc0tleS5pbmRleE9mKFwiX1wiKSAhPT0gMCAmJiBzS2V5LmluZGV4T2YoXCJvZGF0YS5jb250ZXh0XCIpID09PSAtMSkge1xuXHRcdFx0XHRcdG9QYXJhbXNbc0tleV0gPSB7IHZhbHVlOiBvRGF0YVtzS2V5XSB9O1xuXHRcdFx0XHR9XG5cdFx0XHR9KTtcblx0XHR9XG5cdFx0aWYgKGFJQk5BY3Rpb25zLmxlbmd0aCkge1xuXHRcdFx0YUlCTkFjdGlvbnMuZm9yRWFjaChmdW5jdGlvbiAob0lCTkFjdGlvbikge1xuXHRcdFx0XHRjb25zdCBzU2VtYW50aWNPYmplY3QgPSBvSUJOQWN0aW9uLmRhdGEoXCJJQk5EYXRhXCIpLnNlbWFudGljT2JqZWN0O1xuXHRcdFx0XHRjb25zdCBzQWN0aW9uID0gb0lCTkFjdGlvbi5kYXRhKFwiSUJORGF0YVwiKS5hY3Rpb247XG5cdFx0XHRcdENvbW1vblV0aWxzLmdldFNoZWxsU2VydmljZXMob1ZpZXcpXG5cdFx0XHRcdFx0LmdldExpbmtzKHtcblx0XHRcdFx0XHRcdHNlbWFudGljT2JqZWN0OiBzU2VtYW50aWNPYmplY3QsXG5cdFx0XHRcdFx0XHRhY3Rpb246IHNBY3Rpb24sXG5cdFx0XHRcdFx0XHRwYXJhbXM6IG9QYXJhbXNcblx0XHRcdFx0XHR9KVxuXHRcdFx0XHRcdC50aGVuKGZ1bmN0aW9uIChhTGluaykge1xuXHRcdFx0XHRcdFx0b0lCTkFjdGlvbi5zZXRWaXNpYmxlKG9JQk5BY3Rpb24uZ2V0VmlzaWJsZSgpICYmIGFMaW5rICYmIGFMaW5rLmxlbmd0aCA9PT0gMSk7XG5cdFx0XHRcdFx0XHRpZiAoaXNTdGlja3kpIHtcblx0XHRcdFx0XHRcdFx0KG9JQk5BY3Rpb24uZ2V0QmluZGluZ0NvbnRleHQoXCJpbnRlcm5hbFwiKSBhcyBJbnRlcm5hbE1vZGVsQ29udGV4dCkuc2V0UHJvcGVydHkoXG5cdFx0XHRcdFx0XHRcdFx0b0lCTkFjdGlvbi5nZXRJZCgpLnNwbGl0KFwiLS1cIilbMV0sXG5cdFx0XHRcdFx0XHRcdFx0e1xuXHRcdFx0XHRcdFx0XHRcdFx0c2hlbGxOYXZpZ2F0aW9uTm90QXZhaWxhYmxlOiAhKGFMaW5rICYmIGFMaW5rLmxlbmd0aCA9PT0gMSlcblx0XHRcdFx0XHRcdFx0XHR9XG5cdFx0XHRcdFx0XHRcdCk7XG5cdFx0XHRcdFx0XHR9XG5cdFx0XHRcdFx0XHRyZXR1cm47XG5cdFx0XHRcdFx0fSlcblx0XHRcdFx0XHQuY2F0Y2goZnVuY3Rpb24gKG9FcnJvcjogdW5rbm93bikge1xuXHRcdFx0XHRcdFx0TG9nLmVycm9yKFwiQ2Fubm90IHJldHJpZXZlIHRoZSBsaW5rcyBmcm9tIHRoZSBzaGVsbCBzZXJ2aWNlXCIsIG9FcnJvciBhcyBzdHJpbmcpO1xuXHRcdFx0XHRcdH0pO1xuXHRcdFx0fSk7XG5cdFx0fVxuXHR9O1xuXHRpZiAob1ZpZXcgJiYgb1ZpZXcuZ2V0QmluZGluZ0NvbnRleHQoKSkge1xuXHRcdChvVmlldy5nZXRCaW5kaW5nQ29udGV4dCgpIGFzIE9EYXRhVjRDb250ZXh0KVxuXHRcdFx0Py5yZXF1ZXN0T2JqZWN0KClcblx0XHRcdC50aGVuKGZ1bmN0aW9uIChvRGF0YTogUmVjb3JkPHN0cmluZywgdW5rbm93bj4gfCB1bmRlZmluZWQpIHtcblx0XHRcdFx0cmV0dXJuIGZuR2V0TGlua3Mob0RhdGEpO1xuXHRcdFx0fSlcblx0XHRcdC5jYXRjaChmdW5jdGlvbiAob0Vycm9yOiB1bmtub3duKSB7XG5cdFx0XHRcdExvZy5lcnJvcihcIkNhbm5vdCByZXRyaWV2ZSB0aGUgbGlua3MgZnJvbSB0aGUgc2hlbGwgc2VydmljZVwiLCBvRXJyb3IgYXMgc3RyaW5nKTtcblx0XHRcdH0pO1xuXHR9IGVsc2Uge1xuXHRcdGZuR2V0TGlua3MoKTtcblx0fVxufVxuXG5mdW5jdGlvbiBnZXRBY3Rpb25QYXRoKGFjdGlvbkNvbnRleHQ6IENvbnRleHQsIGJSZXR1cm5Pbmx5UGF0aDogYm9vbGVhbiwgaW5BY3Rpb25OYW1lPzogc3RyaW5nLCBiQ2hlY2tTdGF0aWNWYWx1ZT86IGJvb2xlYW4pIHtcblx0Y29uc3Qgc0FjdGlvbk5hbWU6IHN0cmluZyA9ICFpbkFjdGlvbk5hbWUgPyBhY3Rpb25Db250ZXh0LmdldE9iamVjdChhY3Rpb25Db250ZXh0LmdldFBhdGgoKSkudG9TdHJpbmcoKSA6IGluQWN0aW9uTmFtZTtcblx0bGV0IHNDb250ZXh0UGF0aCA9IGFjdGlvbkNvbnRleHQuZ2V0UGF0aCgpLnNwbGl0KFwiL0BcIilbMF07XG5cdGNvbnN0IHNFbnRpdHlUeXBlTmFtZSA9IChhY3Rpb25Db250ZXh0LmdldE9iamVjdChzQ29udGV4dFBhdGgpIGFzIE1ldGFNb2RlbEVudGl0eVR5cGUpLiRUeXBlO1xuXHRjb25zdCBzRW50aXR5TmFtZSA9IGdldEVudGl0eVNldE5hbWUoYWN0aW9uQ29udGV4dC5nZXRNb2RlbCgpIGFzIE9EYXRhTWV0YU1vZGVsLCBzRW50aXR5VHlwZU5hbWUpO1xuXHRpZiAoc0VudGl0eU5hbWUpIHtcblx0XHRzQ29udGV4dFBhdGggPSBgLyR7c0VudGl0eU5hbWV9YDtcblx0fVxuXHRpZiAoYkNoZWNrU3RhdGljVmFsdWUpIHtcblx0XHRyZXR1cm4gYWN0aW9uQ29udGV4dC5nZXRPYmplY3QoYCR7c0NvbnRleHRQYXRofS8ke3NBY3Rpb25OYW1lfUBPcmcuT0RhdGEuQ29yZS5WMS5PcGVyYXRpb25BdmFpbGFibGVgKTtcblx0fVxuXHRpZiAoYlJldHVybk9ubHlQYXRoKSB7XG5cdFx0cmV0dXJuIGAke3NDb250ZXh0UGF0aH0vJHtzQWN0aW9uTmFtZX1gO1xuXHR9IGVsc2Uge1xuXHRcdHJldHVybiB7XG5cdFx0XHRzQ29udGV4dFBhdGg6IHNDb250ZXh0UGF0aCxcblx0XHRcdHNQcm9wZXJ0eTogYWN0aW9uQ29udGV4dC5nZXRPYmplY3QoYCR7c0NvbnRleHRQYXRofS8ke3NBY3Rpb25OYW1lfUBPcmcuT0RhdGEuQ29yZS5WMS5PcGVyYXRpb25BdmFpbGFibGUvJFBhdGhgKSxcblx0XHRcdHNCaW5kaW5nUGFyYW1ldGVyOiBhY3Rpb25Db250ZXh0LmdldE9iamVjdChgJHtzQ29udGV4dFBhdGh9LyR7c0FjdGlvbk5hbWV9L0AkdWk1Lm92ZXJsb2FkLzAvJFBhcmFtZXRlci8wLyROYW1lYClcblx0XHR9O1xuXHR9XG59XG5cbmZ1bmN0aW9uIGdldEVudGl0eVNldE5hbWUob01ldGFNb2RlbDogT0RhdGFNZXRhTW9kZWwsIHNFbnRpdHlUeXBlOiBzdHJpbmcpIHtcblx0Y29uc3Qgb0VudGl0eUNvbnRhaW5lciA9IG9NZXRhTW9kZWwuZ2V0T2JqZWN0KFwiL1wiKTtcblx0Zm9yIChjb25zdCBrZXkgaW4gb0VudGl0eUNvbnRhaW5lcikge1xuXHRcdGlmICh0eXBlb2Ygb0VudGl0eUNvbnRhaW5lcltrZXldID09PSBcIm9iamVjdFwiICYmIG9FbnRpdHlDb250YWluZXJba2V5XS4kVHlwZSA9PT0gc0VudGl0eVR5cGUpIHtcblx0XHRcdHJldHVybiBrZXk7XG5cdFx0fVxuXHR9XG59XG5cbmZ1bmN0aW9uIGNvbXB1dGVEaXNwbGF5TW9kZShvUHJvcGVydHlBbm5vdGF0aW9uczogUmVjb3JkPHN0cmluZywgdW5rbm93bj4sIG9Db2xsZWN0aW9uQW5ub3RhdGlvbnM/OiBSZWNvcmQ8c3RyaW5nLCB1bmtub3duPikge1xuXHRjb25zdCBvVGV4dEFubm90YXRpb24gPSBvUHJvcGVydHlBbm5vdGF0aW9uc1tcIkBjb20uc2FwLnZvY2FidWxhcmllcy5Db21tb24udjEuVGV4dFwiXSxcblx0XHRvVGV4dEFycmFuZ2VtZW50QW5ub3RhdGlvbiA9IChvVGV4dEFubm90YXRpb24gJiZcblx0XHRcdCgob1Byb3BlcnR5QW5ub3RhdGlvbnMgJiZcblx0XHRcdFx0b1Byb3BlcnR5QW5ub3RhdGlvbnNbXCJAY29tLnNhcC52b2NhYnVsYXJpZXMuQ29tbW9uLnYxLlRleHRAY29tLnNhcC52b2NhYnVsYXJpZXMuVUkudjEuVGV4dEFycmFuZ2VtZW50XCJdKSB8fFxuXHRcdFx0XHQob0NvbGxlY3Rpb25Bbm5vdGF0aW9ucyAmJlxuXHRcdFx0XHRcdG9Db2xsZWN0aW9uQW5ub3RhdGlvbnNbXCJAY29tLnNhcC52b2NhYnVsYXJpZXMuVUkudjEuVGV4dEFycmFuZ2VtZW50XCJdKSkpIGFzIE1ldGFNb2RlbEVudW08VGV4dEFycmFuZ2VtZW50PjtcblxuXHRpZiAob1RleHRBcnJhbmdlbWVudEFubm90YXRpb24pIHtcblx0XHRpZiAob1RleHRBcnJhbmdlbWVudEFubm90YXRpb24uJEVudW1NZW1iZXIgPT09IFwiY29tLnNhcC52b2NhYnVsYXJpZXMuVUkudjEuVGV4dEFycmFuZ2VtZW50VHlwZS9UZXh0T25seVwiKSB7XG5cdFx0XHRyZXR1cm4gXCJEZXNjcmlwdGlvblwiO1xuXHRcdH0gZWxzZSBpZiAob1RleHRBcnJhbmdlbWVudEFubm90YXRpb24uJEVudW1NZW1iZXIgPT09IFwiY29tLnNhcC52b2NhYnVsYXJpZXMuVUkudjEuVGV4dEFycmFuZ2VtZW50VHlwZS9UZXh0TGFzdFwiKSB7XG5cdFx0XHRyZXR1cm4gXCJWYWx1ZURlc2NyaXB0aW9uXCI7XG5cdFx0fSBlbHNlIGlmIChvVGV4dEFycmFuZ2VtZW50QW5ub3RhdGlvbi4kRW51bU1lbWJlciA9PT0gXCJjb20uc2FwLnZvY2FidWxhcmllcy5VSS52MS5UZXh0QXJyYW5nZW1lbnRUeXBlL1RleHRTZXBhcmF0ZVwiKSB7XG5cdFx0XHRyZXR1cm4gXCJWYWx1ZVwiO1xuXHRcdH1cblx0XHQvL0RlZmF1bHQgc2hvdWxkIGJlIFRleHRGaXJzdCBpZiB0aGVyZSBpcyBhIFRleHQgYW5ub3RhdGlvbiBhbmQgbmVpdGhlciBUZXh0T25seSBub3IgVGV4dExhc3QgYXJlIHNldFxuXHRcdHJldHVybiBcIkRlc2NyaXB0aW9uVmFsdWVcIjtcblx0fVxuXHRyZXR1cm4gb1RleHRBbm5vdGF0aW9uID8gXCJEZXNjcmlwdGlvblZhbHVlXCIgOiBcIlZhbHVlXCI7XG59XG5cbmZ1bmN0aW9uIF9nZXRFbnRpdHlUeXBlKG9Db250ZXh0OiBPRGF0YVY0Q29udGV4dCkge1xuXHRjb25zdCBvTWV0YU1vZGVsID0gb0NvbnRleHQuZ2V0TW9kZWwoKS5nZXRNZXRhTW9kZWwoKTtcblx0cmV0dXJuIG9NZXRhTW9kZWwuZ2V0T2JqZWN0KGAke29NZXRhTW9kZWwuZ2V0TWV0YVBhdGgob0NvbnRleHQuZ2V0UGF0aCgpKX0vJFR5cGVgKTtcbn1cblxuYXN5bmMgZnVuY3Rpb24gX3JlcXVlc3RPYmplY3Qoc0FjdGlvbjogc3RyaW5nLCBvU2VsZWN0ZWRDb250ZXh0OiBPRGF0YVY0Q29udGV4dCwgc1Byb3BlcnR5OiBzdHJpbmcpIHtcblx0bGV0IG9Db250ZXh0ID0gb1NlbGVjdGVkQ29udGV4dDtcblx0Y29uc3QgbkJyYWNrZXRJbmRleCA9IHNBY3Rpb24uaW5kZXhPZihcIihcIik7XG5cblx0aWYgKG5CcmFja2V0SW5kZXggPiAtMSkge1xuXHRcdGNvbnN0IHNUYXJnZXRUeXBlID0gc0FjdGlvbi5zbGljZShuQnJhY2tldEluZGV4ICsgMSwgLTEpO1xuXHRcdGxldCBzQ3VycmVudFR5cGUgPSBfZ2V0RW50aXR5VHlwZShvQ29udGV4dCk7XG5cblx0XHR3aGlsZSAoc0N1cnJlbnRUeXBlICE9PSBzVGFyZ2V0VHlwZSkge1xuXHRcdFx0Ly8gRmluZCBwYXJlbnQgYmluZGluZyBjb250ZXh0IGFuZCByZXRyaWV2ZSBlbnRpdHkgdHlwZVxuXHRcdFx0b0NvbnRleHQgPSBvQ29udGV4dC5nZXRCaW5kaW5nKCkuZ2V0Q29udGV4dCgpIGFzIE9EYXRhVjRDb250ZXh0O1xuXHRcdFx0aWYgKG9Db250ZXh0KSB7XG5cdFx0XHRcdHNDdXJyZW50VHlwZSA9IF9nZXRFbnRpdHlUeXBlKG9Db250ZXh0KTtcblx0XHRcdH0gZWxzZSB7XG5cdFx0XHRcdExvZy53YXJuaW5nKFwiQ2Fubm90IGRldGVybWluZSB0YXJnZXQgdHlwZSB0byByZXF1ZXN0IHByb3BlcnR5IHZhbHVlIGZvciBib3VuZCBhY3Rpb24gaW52b2NhdGlvblwiKTtcblx0XHRcdFx0cmV0dXJuIFByb21pc2UucmVzb2x2ZSh1bmRlZmluZWQpO1xuXHRcdFx0fVxuXHRcdH1cblx0fVxuXG5cdHJldHVybiBvQ29udGV4dC5yZXF1ZXN0T2JqZWN0KHNQcm9wZXJ0eSk7XG59XG5cbmV4cG9ydCB0eXBlIF9SZXF1ZXN0ZWRQcm9wZXJ0eSA9IHtcblx0dlByb3BlcnR5VmFsdWU6IHVua25vd247XG5cdG9TZWxlY3RlZENvbnRleHQ6IENvbnRleHQ7XG5cdHNBY3Rpb246IHN0cmluZztcblx0c0R5bmFtaWNBY3Rpb25FbmFibGVkUGF0aDogc3RyaW5nO1xufTtcbmFzeW5jIGZ1bmN0aW9uIHJlcXVlc3RQcm9wZXJ0eShcblx0b1NlbGVjdGVkQ29udGV4dDogT0RhdGFWNENvbnRleHQsXG5cdHNBY3Rpb246IHN0cmluZyxcblx0c1Byb3BlcnR5OiBzdHJpbmcsXG5cdHNEeW5hbWljQWN0aW9uRW5hYmxlZFBhdGg6IHN0cmluZ1xuKTogUHJvbWlzZTxfUmVxdWVzdGVkUHJvcGVydHk+IHtcblx0Y29uc3Qgb1Byb21pc2UgPVxuXHRcdHNQcm9wZXJ0eSAmJiBzUHJvcGVydHkuaW5kZXhPZihcIi9cIikgPT09IDBcblx0XHRcdD8gcmVxdWVzdFNpbmdsZXRvblByb3BlcnR5KHNQcm9wZXJ0eSwgb1NlbGVjdGVkQ29udGV4dC5nZXRNb2RlbCgpKVxuXHRcdFx0OiBfcmVxdWVzdE9iamVjdChzQWN0aW9uLCBvU2VsZWN0ZWRDb250ZXh0LCBzUHJvcGVydHkpO1xuXG5cdHJldHVybiBvUHJvbWlzZS50aGVuKGZ1bmN0aW9uICh2UHJvcGVydHlWYWx1ZTogdW5rbm93bikge1xuXHRcdHJldHVybiB7XG5cdFx0XHR2UHJvcGVydHlWYWx1ZTogdlByb3BlcnR5VmFsdWUsXG5cdFx0XHRvU2VsZWN0ZWRDb250ZXh0OiBvU2VsZWN0ZWRDb250ZXh0LFxuXHRcdFx0c0FjdGlvbjogc0FjdGlvbixcblx0XHRcdHNEeW5hbWljQWN0aW9uRW5hYmxlZFBhdGg6IHNEeW5hbWljQWN0aW9uRW5hYmxlZFBhdGhcblx0XHR9O1xuXHR9KTtcbn1cblxuYXN5bmMgZnVuY3Rpb24gc2V0Q29udGV4dHNCYXNlZE9uT3BlcmF0aW9uQXZhaWxhYmxlKFxuXHRvSW50ZXJuYWxNb2RlbENvbnRleHQ6IEludGVybmFsTW9kZWxDb250ZXh0LFxuXHRhUmVxdWVzdFByb21pc2VzOiBQcm9taXNlPF9SZXF1ZXN0ZWRQcm9wZXJ0eT5bXVxuKSB7XG5cdHJldHVybiBQcm9taXNlLmFsbChhUmVxdWVzdFByb21pc2VzKVxuXHRcdC50aGVuKGZ1bmN0aW9uIChhUmVzdWx0cykge1xuXHRcdFx0aWYgKGFSZXN1bHRzLmxlbmd0aCkge1xuXHRcdFx0XHRjb25zdCBhQXBwbGljYWJsZUNvbnRleHRzOiB1bmtub3duW10gPSBbXSxcblx0XHRcdFx0XHRhTm90QXBwbGljYWJsZUNvbnRleHRzOiB1bmtub3duW10gPSBbXTtcblx0XHRcdFx0YVJlc3VsdHMuZm9yRWFjaChmdW5jdGlvbiAoYVJlc3VsdCkge1xuXHRcdFx0XHRcdGlmIChhUmVzdWx0KSB7XG5cdFx0XHRcdFx0XHRpZiAoYVJlc3VsdC52UHJvcGVydHlWYWx1ZSkge1xuXHRcdFx0XHRcdFx0XHRvSW50ZXJuYWxNb2RlbENvbnRleHQuZ2V0TW9kZWwoKS5zZXRQcm9wZXJ0eShhUmVzdWx0LnNEeW5hbWljQWN0aW9uRW5hYmxlZFBhdGgsIHRydWUpO1xuXHRcdFx0XHRcdFx0XHRhQXBwbGljYWJsZUNvbnRleHRzLnB1c2goYVJlc3VsdC5vU2VsZWN0ZWRDb250ZXh0KTtcblx0XHRcdFx0XHRcdH0gZWxzZSB7XG5cdFx0XHRcdFx0XHRcdGFOb3RBcHBsaWNhYmxlQ29udGV4dHMucHVzaChhUmVzdWx0Lm9TZWxlY3RlZENvbnRleHQpO1xuXHRcdFx0XHRcdFx0fVxuXHRcdFx0XHRcdH1cblx0XHRcdFx0fSk7XG5cdFx0XHRcdHNldER5bmFtaWNBY3Rpb25Db250ZXh0cyhvSW50ZXJuYWxNb2RlbENvbnRleHQsIGFSZXN1bHRzWzBdLnNBY3Rpb24sIGFBcHBsaWNhYmxlQ29udGV4dHMsIGFOb3RBcHBsaWNhYmxlQ29udGV4dHMpO1xuXHRcdFx0fVxuXHRcdFx0cmV0dXJuO1xuXHRcdH0pXG5cdFx0LmNhdGNoKGZ1bmN0aW9uIChvRXJyb3I6IHVua25vd24pIHtcblx0XHRcdExvZy50cmFjZShcIkNhbm5vdCByZXRyaWV2ZSBwcm9wZXJ0eSB2YWx1ZSBmcm9tIHBhdGhcIiwgb0Vycm9yIGFzIHN0cmluZyk7XG5cdFx0fSk7XG59XG5cbi8qKlxuICogQHBhcmFtIG9JbnRlcm5hbE1vZGVsQ29udGV4dFxuICogQHBhcmFtIHNBY3Rpb25cbiAqIEBwYXJhbSBhQXBwbGljYWJsZVxuICogQHBhcmFtIGFOb3RBcHBsaWNhYmxlXG4gKi9cbmZ1bmN0aW9uIHNldER5bmFtaWNBY3Rpb25Db250ZXh0cyhcblx0b0ludGVybmFsTW9kZWxDb250ZXh0OiBJbnRlcm5hbE1vZGVsQ29udGV4dCxcblx0c0FjdGlvbjogc3RyaW5nLFxuXHRhQXBwbGljYWJsZTogdW5rbm93bltdLFxuXHRhTm90QXBwbGljYWJsZTogdW5rbm93bltdXG4pIHtcblx0Y29uc3Qgc0R5bmFtaWNBY3Rpb25QYXRoUHJlZml4ID0gYCR7b0ludGVybmFsTW9kZWxDb250ZXh0LmdldFBhdGgoKX0vZHluYW1pY0FjdGlvbnMvJHtzQWN0aW9ufWAsXG5cdFx0b0ludGVybmFsTW9kZWwgPSBvSW50ZXJuYWxNb2RlbENvbnRleHQuZ2V0TW9kZWwoKTtcblx0b0ludGVybmFsTW9kZWwuc2V0UHJvcGVydHkoYCR7c0R5bmFtaWNBY3Rpb25QYXRoUHJlZml4fS9hQXBwbGljYWJsZWAsIGFBcHBsaWNhYmxlKTtcblx0b0ludGVybmFsTW9kZWwuc2V0UHJvcGVydHkoYCR7c0R5bmFtaWNBY3Rpb25QYXRoUHJlZml4fS9hTm90QXBwbGljYWJsZWAsIGFOb3RBcHBsaWNhYmxlKTtcbn1cblxuZnVuY3Rpb24gX2dldERlZmF1bHRPcGVyYXRvcnMoc1Byb3BlcnR5VHlwZT86IHN0cmluZykge1xuXHQvLyBtZGMgZGVmaW5lcyB0aGUgZnVsbCBzZXQgb2Ygb3BlcmF0aW9ucyB0aGF0IGFyZSBtZWFuaW5nZnVsIGZvciBlYWNoIEVkbSBUeXBlXG5cdC8vIFRPRE8gUmVwbGFjZSB3aXRoIG1vZGVsIC8gaW50ZXJuYWwgd2F5IG9mIHJldHJpZXZpbmcgdGhlIGFjdHVhbCBtb2RlbCB0eXBlIHVzZWQgZm9yIHRoZSBwcm9wZXJ0eVxuXHRjb25zdCBvRGF0YUNsYXNzID0gVHlwZVV0aWwuZ2V0RGF0YVR5cGVDbGFzc05hbWUoc1Byb3BlcnR5VHlwZSk7XG5cdC8vIFRPRE8gbmVlZCB0byBwYXNzIHByb3BlciBmb3JtYXRPcHRpb25zLCBjb25zdHJhaW50cyBoZXJlXG5cdGNvbnN0IG9CYXNlVHlwZSA9IFR5cGVVdGlsLmdldEJhc2VUeXBlKG9EYXRhQ2xhc3MsIHt9LCB7fSk7XG5cdHJldHVybiBGaWx0ZXJPcGVyYXRvclV0aWwuZ2V0T3BlcmF0b3JzRm9yVHlwZShvQmFzZVR5cGUpO1xufVxuXG5mdW5jdGlvbiBfZ2V0UmVzdHJpY3Rpb25zKGFEZWZhdWx0T3BzOiBzdHJpbmdbXSwgYUV4cHJlc3Npb25PcHM6IHN0cmluZ1tdKTogc3RyaW5nW10ge1xuXHQvLyBGcm9tIHRoZSBkZWZhdWx0IHNldCBvZiBPcGVyYXRvcnMgZm9yIHRoZSBCYXNlIFR5cGUsIHNlbGVjdCB0aG9zZSB0aGF0IGFyZSBkZWZpbmVkIGluIHRoZSBBbGxvd2VkIFZhbHVlLlxuXHQvLyBJbiBjYXNlIHRoYXQgbm8gb3BlcmF0b3JzIGFyZSBmb3VuZCwgcmV0dXJuIHVuZGVmaW5lZCBzbyB0aGF0IHRoZSBkZWZhdWx0IHNldCBpcyB1c2VkLlxuXHRyZXR1cm4gYURlZmF1bHRPcHMuZmlsdGVyKGZ1bmN0aW9uIChzRWxlbWVudCkge1xuXHRcdHJldHVybiBhRXhwcmVzc2lvbk9wcy5pbmRleE9mKHNFbGVtZW50KSA+IC0xO1xuXHR9KTtcbn1cblxuZnVuY3Rpb24gZ2V0U3BlY2lmaWNBbGxvd2VkRXhwcmVzc2lvbihhRXhwcmVzc2lvbnM6IHN0cmluZ1tdKSB7XG5cdGNvbnN0IGFBbGxvd2VkRXhwcmVzc2lvbnNQcmlvcml0eSA9IENvbW1vblV0aWxzLkFsbG93ZWRFeHByZXNzaW9uc1ByaW87XG5cblx0YUV4cHJlc3Npb25zLnNvcnQoZnVuY3Rpb24gKGE6IHN0cmluZywgYjogc3RyaW5nKSB7XG5cdFx0cmV0dXJuIGFBbGxvd2VkRXhwcmVzc2lvbnNQcmlvcml0eS5pbmRleE9mKGEpIC0gYUFsbG93ZWRFeHByZXNzaW9uc1ByaW9yaXR5LmluZGV4T2YoYik7XG5cdH0pO1xuXG5cdHJldHVybiBhRXhwcmVzc2lvbnNbMF07XG59XG5cbi8qKlxuICogTWV0aG9kIHRvIGZldGNoIHRoZSBjb3JyZWN0IG9wZXJhdG9ycyBiYXNlZCBvbiB0aGUgZmlsdGVyIHJlc3RyaWN0aW9ucyB0aGF0IGNhbiBiZSBhbm5vdGF0ZWQgb24gYW4gZW50aXR5IHNldCBvciBhIG5hdmlnYXRpb24gcHJvcGVydHkuXG4gKiBXZSByZXR1cm4gdGhlIGNvcnJlY3Qgb3BlcmF0b3JzIGJhc2VkIG9uIHRoZSBzcGVjaWZpZWQgcmVzdHJpY3Rpb24gYW5kIGFsc28gY2hlY2sgZm9yIHRoZSBvcGVyYXRvcnMgZGVmaW5lZCBpbiB0aGUgbWFuaWZlc3QgdG8gaW5jbHVkZSBvciBleGNsdWRlIHRoZW0uXG4gKlxuICogQHBhcmFtIHNQcm9wZXJ0eSBTdHJpbmcgbmFtZSBvZiB0aGUgcHJvcGVydHlcbiAqIEBwYXJhbSBzRW50aXR5U2V0UGF0aCBTdHJpbmcgcGF0aCB0byB0aGUgZW50aXR5IHNldFxuICogQHBhcmFtIG9Db250ZXh0IENvbnRleHQgdXNlZCBkdXJpbmcgdGVtcGxhdGluZ1xuICogQHBhcmFtIHNUeXBlIFN0cmluZyBkYXRhIHR5cGUgb2QgdGhlIHByb3BlcnR5LCBmb3IgZXhhbXBsZSBlZG0uRGF0ZVxuICogQHBhcmFtIGJVc2VTZW1hbnRpY0RhdGVSYW5nZSBCb29sZWFuIHBhc3NlZCBmcm9tIHRoZSBtYW5pZmVzdCBmb3Igc2VtYW50aWMgZGF0ZSByYW5nZVxuICogQHBhcmFtIHNTZXR0aW5ncyBTdHJpbmdpZmllZCBvYmplY3Qgb2YgdGhlIHByb3BlcnR5IHNldHRpbmdzXG4gKiBAcmV0dXJucyBBbiBhcnJheSBvZiBzdHJpbmdzIHJlcHJlc2VudGluZyBvcGVyYXRvcnMgZm9yIGZpbHRlcmluZ1xuICovXG5leHBvcnQgZnVuY3Rpb24gZ2V0T3BlcmF0b3JzRm9yUHJvcGVydHkoXG5cdHNQcm9wZXJ0eTogc3RyaW5nLFxuXHRzRW50aXR5U2V0UGF0aDogc3RyaW5nLFxuXHRvQ29udGV4dDogT0RhdGFNZXRhTW9kZWwsXG5cdHNUeXBlPzogc3RyaW5nLFxuXHRiVXNlU2VtYW50aWNEYXRlUmFuZ2U/OiBib29sZWFuIHwgc3RyaW5nLFxuXHRzU2V0dGluZ3M/OiBzdHJpbmdcbik6IHN0cmluZ1tdIHtcblx0Y29uc3Qgb0ZpbHRlclJlc3RyaWN0aW9ucyA9IENvbW1vblV0aWxzLmdldEZpbHRlclJlc3RyaWN0aW9uc0J5UGF0aChzRW50aXR5U2V0UGF0aCwgb0NvbnRleHQpO1xuXHRjb25zdCBhRXF1YWxzT3BzID0gW1wiRVFcIl07XG5cdGNvbnN0IGFTaW5nbGVSYW5nZU9wcyA9IFtcIkVRXCIsIFwiR0VcIiwgXCJMRVwiLCBcIkxUXCIsIFwiR1RcIiwgXCJCVFwiLCBcIk5PVExFXCIsIFwiTk9UTFRcIiwgXCJOT1RHRVwiLCBcIk5PVEdUXCJdO1xuXHRjb25zdCBhU2luZ2xlUmFuZ2VEVEJhc2ljT3BzID0gW1wiRVFcIiwgXCJCVFwiXTtcblx0Y29uc3QgYVNpbmdsZVZhbHVlRGF0ZU9wcyA9IFtcblx0XHRcIlRPREFZXCIsXG5cdFx0XCJUT01PUlJPV1wiLFxuXHRcdFwiWUVTVEVSREFZXCIsXG5cdFx0XCJEQVRFXCIsXG5cdFx0XCJGSVJTVERBWVdFRUtcIixcblx0XHRcIkxBU1REQVlXRUVLXCIsXG5cdFx0XCJGSVJTVERBWU1PTlRIXCIsXG5cdFx0XCJMQVNUREFZTU9OVEhcIixcblx0XHRcIkZJUlNUREFZUVVBUlRFUlwiLFxuXHRcdFwiTEFTVERBWVFVQVJURVJcIixcblx0XHRcIkZJUlNUREFZWUVBUlwiLFxuXHRcdFwiTEFTVERBWVlFQVJcIlxuXHRdO1xuXHRjb25zdCBhQmFzaWNEYXRlVGltZU9wcyA9IFtcIkVRXCIsIFwiQlRcIl07XG5cdGNvbnN0IGFNdWx0aVJhbmdlT3BzID0gW1wiRVFcIiwgXCJHRVwiLCBcIkxFXCIsIFwiTFRcIiwgXCJHVFwiLCBcIkJUXCIsIFwiTkVcIiwgXCJOT1RCVFwiLCBcIk5PVExFXCIsIFwiTk9UTFRcIiwgXCJOT1RHRVwiLCBcIk5PVEdUXCJdO1xuXHRjb25zdCBhU2VhcmNoRXhwcmVzc2lvbk9wcyA9IFtcIkNvbnRhaW5zXCIsIFwiTm90Q29udGFpbnNcIiwgXCJTdGFydHNXaXRoXCIsIFwiTm90U3RhcnRzV2l0aFwiLCBcIkVuZHNXaXRoXCIsIFwiTm90RW5kc1dpdGhcIl07XG5cdGNvbnN0IGFTZW1hbnRpY0RhdGVPcHNFeHQgPSBTZW1hbnRpY0RhdGVPcGVyYXRvcnMuZ2V0U3VwcG9ydGVkT3BlcmF0aW9ucygpO1xuXHRjb25zdCBiU2VtYW50aWNEYXRlUmFuZ2UgPSBiVXNlU2VtYW50aWNEYXRlUmFuZ2UgPT09IFwidHJ1ZVwiIHx8IGJVc2VTZW1hbnRpY0RhdGVSYW5nZSA9PT0gdHJ1ZTtcblx0bGV0IGFTZW1hbnRpY0RhdGVPcHM6IHN0cmluZ1tdID0gW107XG5cdGNvbnN0IG9TZXR0aW5ncyA9IHNTZXR0aW5ncyAmJiB0eXBlb2Ygc1NldHRpbmdzID09PSBcInN0cmluZ1wiID8gSlNPTi5wYXJzZShzU2V0dGluZ3MpLmN1c3RvbURhdGEgOiBzU2V0dGluZ3M7XG5cblx0aWYgKChvQ29udGV4dC5nZXRPYmplY3QoYCR7c0VudGl0eVNldFBhdGh9L0Bjb20uc2FwLnZvY2FidWxhcmllcy5Db21tb24udjEuUmVzdWx0Q29udGV4dGApIGFzIHVua25vd24pID09PSB0cnVlKSB7XG5cdFx0cmV0dXJuIGFFcXVhbHNPcHM7XG5cdH1cblxuXHRpZiAob1NldHRpbmdzICYmIG9TZXR0aW5ncy5vcGVyYXRvckNvbmZpZ3VyYXRpb24gJiYgb1NldHRpbmdzLm9wZXJhdG9yQ29uZmlndXJhdGlvbi5sZW5ndGggPiAwKSB7XG5cdFx0YVNlbWFudGljRGF0ZU9wcyA9IFNlbWFudGljRGF0ZU9wZXJhdG9ycy5nZXRGaWx0ZXJPcGVyYXRpb25zKG9TZXR0aW5ncy5vcGVyYXRvckNvbmZpZ3VyYXRpb24pO1xuXHR9IGVsc2Uge1xuXHRcdGFTZW1hbnRpY0RhdGVPcHMgPSBTZW1hbnRpY0RhdGVPcGVyYXRvcnMuZ2V0U2VtYW50aWNEYXRlT3BlcmF0aW9ucygpO1xuXHR9XG5cdC8vIEdldCB0aGUgZGVmYXVsdCBPcGVyYXRvcnMgZm9yIHRoaXMgUHJvcGVydHkgVHlwZVxuXHRsZXQgYURlZmF1bHRPcGVyYXRvcnMgPSBfZ2V0RGVmYXVsdE9wZXJhdG9ycyhzVHlwZSk7XG5cdGlmIChiU2VtYW50aWNEYXRlUmFuZ2UpIHtcblx0XHRhRGVmYXVsdE9wZXJhdG9ycyA9IGFTZW1hbnRpY0RhdGVPcHNFeHQuY29uY2F0KGFEZWZhdWx0T3BlcmF0b3JzKTtcblx0fVxuXHRsZXQgcmVzdHJpY3Rpb25zOiBzdHJpbmdbXSA9IFtdO1xuXG5cdC8vIElzIHRoZXJlIGEgRmlsdGVyIFJlc3RyaWN0aW9uIGRlZmluZWQgZm9yIHRoaXMgcHJvcGVydHk/XG5cdGlmIChvRmlsdGVyUmVzdHJpY3Rpb25zICYmIG9GaWx0ZXJSZXN0cmljdGlvbnMuRmlsdGVyQWxsb3dlZEV4cHJlc3Npb25zICYmIG9GaWx0ZXJSZXN0cmljdGlvbnMuRmlsdGVyQWxsb3dlZEV4cHJlc3Npb25zW3NQcm9wZXJ0eV0pIHtcblx0XHQvLyBFeHRlbmRpbmcgdGhlIGRlZmF1bHQgb3BlcmF0b3JzIGxpc3Qgd2l0aCBTZW1hbnRpYyBEYXRlIG9wdGlvbnMgREFURVJBTkdFLCBEQVRFLCBGUk9NIGFuZCBUT1xuXHRcdGNvbnN0IHNBbGxvd2VkRXhwcmVzc2lvbiA9IENvbW1vblV0aWxzLmdldFNwZWNpZmljQWxsb3dlZEV4cHJlc3Npb24ob0ZpbHRlclJlc3RyaWN0aW9ucy5GaWx0ZXJBbGxvd2VkRXhwcmVzc2lvbnNbc1Byb3BlcnR5XSk7XG5cdFx0Ly8gSW4gY2FzZSBtb3JlIHRoYW4gb25lIEFsbG93ZWQgRXhwcmVzc2lvbnMgaGFzIGJlZW4gZGVmaW5lZCBmb3IgYSBwcm9wZXJ0eVxuXHRcdC8vIGNob29zZSB0aGUgbW9zdCByZXN0cmljdGl2ZSBBbGxvd2VkIEV4cHJlc3Npb25cblxuXHRcdC8vIE11bHRpVmFsdWUgaGFzIHNhbWUgT3BlcmF0b3IgYXMgU2luZ2xlVmFsdWUsIGJ1dCB0aGVyZSBjYW4gYmUgbW9yZSB0aGFuIG9uZSAobWF4Q29uZGl0aW9ucylcblx0XHRzd2l0Y2ggKHNBbGxvd2VkRXhwcmVzc2lvbikge1xuXHRcdFx0Y2FzZSBcIlNpbmdsZVZhbHVlXCI6XG5cdFx0XHRcdGNvbnN0IGFTaW5nbGVWYWx1ZU9wcyA9IHNUeXBlID09PSBcIkVkbS5EYXRlXCIgJiYgYlNlbWFudGljRGF0ZVJhbmdlID8gYVNpbmdsZVZhbHVlRGF0ZU9wcyA6IGFFcXVhbHNPcHM7XG5cdFx0XHRcdHJlc3RyaWN0aW9ucyA9IF9nZXRSZXN0cmljdGlvbnMoYURlZmF1bHRPcGVyYXRvcnMsIGFTaW5nbGVWYWx1ZU9wcyk7XG5cdFx0XHRcdGJyZWFrO1xuXHRcdFx0Y2FzZSBcIk11bHRpVmFsdWVcIjpcblx0XHRcdFx0cmVzdHJpY3Rpb25zID0gX2dldFJlc3RyaWN0aW9ucyhhRGVmYXVsdE9wZXJhdG9ycywgYUVxdWFsc09wcyk7XG5cdFx0XHRcdGJyZWFrO1xuXHRcdFx0Y2FzZSBcIlNpbmdsZVJhbmdlXCI6XG5cdFx0XHRcdGxldCBhRXhwcmVzc2lvbk9wczogc3RyaW5nW107XG5cdFx0XHRcdGlmIChiU2VtYW50aWNEYXRlUmFuZ2UpIHtcblx0XHRcdFx0XHRpZiAoc1R5cGUgPT09IFwiRWRtLkRhdGVcIikge1xuXHRcdFx0XHRcdFx0YUV4cHJlc3Npb25PcHMgPSBhU2VtYW50aWNEYXRlT3BzO1xuXHRcdFx0XHRcdH0gZWxzZSBpZiAoc1R5cGUgPT09IFwiRWRtLkRhdGVUaW1lT2Zmc2V0XCIpIHtcblx0XHRcdFx0XHRcdGFFeHByZXNzaW9uT3BzID0gYVNlbWFudGljRGF0ZU9wcy5jb25jYXQoYUJhc2ljRGF0ZVRpbWVPcHMpO1xuXHRcdFx0XHRcdH0gZWxzZSB7XG5cdFx0XHRcdFx0XHRhRXhwcmVzc2lvbk9wcyA9IGFTaW5nbGVSYW5nZU9wcztcblx0XHRcdFx0XHR9XG5cdFx0XHRcdH0gZWxzZSBpZiAoc1R5cGUgPT09IFwiRWRtLkRhdGVUaW1lT2Zmc2V0XCIpIHtcblx0XHRcdFx0XHRhRXhwcmVzc2lvbk9wcyA9IGFTaW5nbGVSYW5nZURUQmFzaWNPcHM7XG5cdFx0XHRcdH0gZWxzZSB7XG5cdFx0XHRcdFx0YUV4cHJlc3Npb25PcHMgPSBhU2luZ2xlUmFuZ2VPcHM7XG5cdFx0XHRcdH1cblx0XHRcdFx0Y29uc3Qgc09wZXJhdG9ycyA9IF9nZXRSZXN0cmljdGlvbnMoYURlZmF1bHRPcGVyYXRvcnMsIGFFeHByZXNzaW9uT3BzKTtcblx0XHRcdFx0cmVzdHJpY3Rpb25zID0gc09wZXJhdG9ycztcblx0XHRcdFx0YnJlYWs7XG5cdFx0XHRjYXNlIFwiTXVsdGlSYW5nZVwiOlxuXHRcdFx0XHRyZXN0cmljdGlvbnMgPSBfZ2V0UmVzdHJpY3Rpb25zKGFEZWZhdWx0T3BlcmF0b3JzLCBhTXVsdGlSYW5nZU9wcyk7XG5cdFx0XHRcdGJyZWFrO1xuXHRcdFx0Y2FzZSBcIlNlYXJjaEV4cHJlc3Npb25cIjpcblx0XHRcdFx0cmVzdHJpY3Rpb25zID0gX2dldFJlc3RyaWN0aW9ucyhhRGVmYXVsdE9wZXJhdG9ycywgYVNlYXJjaEV4cHJlc3Npb25PcHMpO1xuXHRcdFx0XHRicmVhaztcblx0XHRcdGNhc2UgXCJNdWx0aVJhbmdlT3JTZWFyY2hFeHByZXNzaW9uXCI6XG5cdFx0XHRcdHJlc3RyaWN0aW9ucyA9IF9nZXRSZXN0cmljdGlvbnMoYURlZmF1bHRPcGVyYXRvcnMsIGFTZWFyY2hFeHByZXNzaW9uT3BzLmNvbmNhdChhTXVsdGlSYW5nZU9wcykpO1xuXHRcdFx0XHRicmVhaztcblx0XHRcdGRlZmF1bHQ6XG5cdFx0XHRcdGJyZWFrO1xuXHRcdH1cblx0XHQvLyBJbiBjYXNlIEFsbG93ZWRFeHByZXNzaW9ucyBpcyBub3QgcmVjb2duaXNlZCwgdW5kZWZpbmVkIGluIHJldHVybiByZXN1bHRzIGluIHRoZSBkZWZhdWx0IHNldCBvZlxuXHRcdC8vIG9wZXJhdG9ycyBmb3IgdGhlIHR5cGUuXG5cdH1cblx0cmV0dXJuIHJlc3RyaWN0aW9ucztcbn1cblxuLyoqXG4gKiBNZXRob2QgdG8gcmV0dXJuIGFsbG93ZWQgb3BlcmF0b3JzIGZvciB0eXBlIEd1aWQuXG4gKlxuICogQGZ1bmN0aW9uXG4gKiBAbmFtZSBnZXRPcGVyYXRvcnNGb3JHdWlkUHJvcGVydHlcbiAqIEByZXR1cm5zIEFsbG93ZWQgb3BlcmF0b3JzIGZvciB0eXBlIEd1aWRcbiAqL1xuZnVuY3Rpb24gZ2V0T3BlcmF0b3JzRm9yR3VpZFByb3BlcnR5KCk6IHN0cmluZyB7XG5cdGNvbnN0IGFsbG93ZWRPcGVyYXRvcnNGb3JHdWlkID0gW1wiRVFcIiwgXCJORVwiXTtcblx0cmV0dXJuIGFsbG93ZWRPcGVyYXRvcnNGb3JHdWlkLnRvU3RyaW5nKCk7XG59XG5cbmZ1bmN0aW9uIGdldE9wZXJhdG9yc0ZvckRhdGVQcm9wZXJ0eShwcm9wZXJ0eVR5cGU6IHN0cmluZyk6IHN0cmluZ1tdIHtcblx0Ly8gSW4gY2FzZSBBbGxvd2VkRXhwcmVzc2lvbnMgaXMgbm90IHByb3ZpZGVkIGZvciB0eXBlIEVkbS5EYXRlIHRoZW4gYWxsIHRoZSBkZWZhdWx0XG5cdC8vIG9wZXJhdG9ycyBmb3IgdGhlIHR5cGUgc2hvdWxkIGJlIHJldHVybmVkIGV4Y2x1ZGluZyBzZW1hbnRpYyBvcGVyYXRvcnMgZnJvbSB0aGUgbGlzdC5cblx0Y29uc3QgYURlZmF1bHRPcGVyYXRvcnMgPSBfZ2V0RGVmYXVsdE9wZXJhdG9ycyhwcm9wZXJ0eVR5cGUpO1xuXHRjb25zdCBhTXVsdGlSYW5nZU9wcyA9IFtcIkVRXCIsIFwiR0VcIiwgXCJMRVwiLCBcIkxUXCIsIFwiR1RcIiwgXCJCVFwiLCBcIk5FXCIsIFwiTk9UQlRcIiwgXCJOT1RMRVwiLCBcIk5PVExUXCIsIFwiTk9UR0VcIiwgXCJOT1RHVFwiXTtcblx0cmV0dXJuIF9nZXRSZXN0cmljdGlvbnMoYURlZmF1bHRPcGVyYXRvcnMsIGFNdWx0aVJhbmdlT3BzKTtcbn1cblxudHlwZSBQYXJhbWV0ZXJJbmZvID0ge1xuXHRjb250ZXh0UGF0aD86IHN0cmluZztcblx0cGFyYW1ldGVyUHJvcGVydGllcz86IFJlY29yZDxzdHJpbmcsIE1ldGFNb2RlbFByb3BlcnR5Pjtcbn07XG5mdW5jdGlvbiBnZXRQYXJhbWV0ZXJJbmZvKG1ldGFNb2RlbENvbnRleHQ6IE9EYXRhTWV0YU1vZGVsLCBzQ29udGV4dFBhdGg6IHN0cmluZykge1xuXHRjb25zdCBzUGFyYW1ldGVyQ29udGV4dFBhdGggPSBzQ29udGV4dFBhdGguc3Vic3RyaW5nKDAsIHNDb250ZXh0UGF0aC5sYXN0SW5kZXhPZihcIi9cIikpO1xuXHRjb25zdCBiUmVzdWx0Q29udGV4dCA9IG1ldGFNb2RlbENvbnRleHQuZ2V0T2JqZWN0KGAke3NQYXJhbWV0ZXJDb250ZXh0UGF0aH0vQGNvbS5zYXAudm9jYWJ1bGFyaWVzLkNvbW1vbi52MS5SZXN1bHRDb250ZXh0YCk7XG5cdGNvbnN0IG9QYXJhbWV0ZXJJbmZvOiBQYXJhbWV0ZXJJbmZvID0ge307XG5cdGlmIChiUmVzdWx0Q29udGV4dCAmJiBzUGFyYW1ldGVyQ29udGV4dFBhdGggIT09IHNDb250ZXh0UGF0aCkge1xuXHRcdG9QYXJhbWV0ZXJJbmZvLmNvbnRleHRQYXRoID0gc1BhcmFtZXRlckNvbnRleHRQYXRoO1xuXHRcdG9QYXJhbWV0ZXJJbmZvLnBhcmFtZXRlclByb3BlcnRpZXMgPSBDb21tb25VdGlscy5nZXRDb250ZXh0UGF0aFByb3BlcnRpZXMobWV0YU1vZGVsQ29udGV4dCwgc1BhcmFtZXRlckNvbnRleHRQYXRoKTtcblx0fVxuXHRyZXR1cm4gb1BhcmFtZXRlckluZm87XG59XG5cbi8qKlxuICogTWV0aG9kIHRvIGFkZCB0aGUgc2VsZWN0IE9wdGlvbnMgdG8gZmlsdGVyIGNvbmRpdGlvbnMuXG4gKlxuICogQGZ1bmN0aW9uXG4gKiBAbmFtZSBhZGRTZWxlY3RPcHRpb25Ub0NvbmRpdGlvbnNcbiAqIEBwYXJhbSBvUHJvcGVydHlNZXRhZGF0YSBQcm9wZXJ0eSBtZXRhZGF0YSBpbmZvcm1hdGlvblxuICogQHBhcmFtIGFWYWxpZE9wZXJhdG9ycyBPcGVyYXRvcnMgZm9yIGFsbCB0aGUgZGF0YSB0eXBlc1xuICogQHBhcmFtIGFTZW1hbnRpY0RhdGVPcGVyYXRvcnMgT3BlcmF0b3JzIGZvciB0aGUgRGF0ZSB0eXBlXG4gKiBAcGFyYW0gYUN1bXVsYXRpdmVDb25kaXRpb25zIEZpbHRlciBjb25kaXRpb25zXG4gKiBAcGFyYW0gb1NlbGVjdE9wdGlvbiBTZWxlY3RvcHRpb24gb2Ygc2VsZWN0aW9uIHZhcmlhbnRcbiAqIEByZXR1cm5zIFRoZSBmaWx0ZXIgY29uZGl0aW9uc1xuICovXG5mdW5jdGlvbiBhZGRTZWxlY3RPcHRpb25Ub0NvbmRpdGlvbnMoXG5cdG9Qcm9wZXJ0eU1ldGFkYXRhOiB1bmtub3duLFxuXHRhVmFsaWRPcGVyYXRvcnM6IHN0cmluZ1tdLFxuXHRhU2VtYW50aWNEYXRlT3BlcmF0b3JzOiBzdHJpbmdbXSxcblx0YUN1bXVsYXRpdmVDb25kaXRpb25zOiBDb25kaXRpb25PYmplY3RbXSxcblx0b1NlbGVjdE9wdGlvbjogU2VsZWN0T3B0aW9uXG4pIHtcblx0Y29uc3Qgb0NvbmRpdGlvbiA9IGdldENvbmRpdGlvbnMob1NlbGVjdE9wdGlvbiwgb1Byb3BlcnR5TWV0YWRhdGEpO1xuXHRpZiAoXG5cdFx0b1NlbGVjdE9wdGlvbj8uU2VtYW50aWNEYXRlcyAmJlxuXHRcdGFTZW1hbnRpY0RhdGVPcGVyYXRvcnMgJiZcblx0XHRhU2VtYW50aWNEYXRlT3BlcmF0b3JzLmluZGV4T2Yob1NlbGVjdE9wdGlvbj8uU2VtYW50aWNEYXRlcz8ub3BlcmF0b3IpID4gLTFcblx0KSB7XG5cdFx0Y29uc3Qgc2VtYW50aWNEYXRlcyA9IENvbW1vblV0aWxzLmFkZFNlbWFudGljRGF0ZXNUb0NvbmRpdGlvbnMob1NlbGVjdE9wdGlvbj8uU2VtYW50aWNEYXRlcyk7XG5cdFx0aWYgKHNlbWFudGljRGF0ZXMgJiYgT2JqZWN0LmtleXMoc2VtYW50aWNEYXRlcykubGVuZ3RoID4gMCkge1xuXHRcdFx0YUN1bXVsYXRpdmVDb25kaXRpb25zLnB1c2goc2VtYW50aWNEYXRlcyk7XG5cdFx0fVxuXHR9IGVsc2UgaWYgKG9Db25kaXRpb24pIHtcblx0XHRpZiAoYVZhbGlkT3BlcmF0b3JzLmxlbmd0aCA9PT0gMCB8fCBhVmFsaWRPcGVyYXRvcnMuaW5kZXhPZihvQ29uZGl0aW9uLm9wZXJhdG9yKSA+IC0xKSB7XG5cdFx0XHRhQ3VtdWxhdGl2ZUNvbmRpdGlvbnMucHVzaChvQ29uZGl0aW9uKTtcblx0XHR9XG5cdH1cblx0cmV0dXJuIGFDdW11bGF0aXZlQ29uZGl0aW9ucztcbn1cblxuLyoqXG4gKiBNZXRob2QgdG8gYWRkIHRoZSBzZW1hbnRpYyBkYXRlcyB0byBmaWx0ZXIgY29uZGl0aW9uc1xuICpcbiAqIEBmdW5jdGlvblxuICogQG5hbWUgYWRkU2VtYW50aWNEYXRlc1RvQ29uZGl0aW9uc1xuICogQHBhcmFtIG9TZW1hbnRpY0RhdGVzIFNlbWFudGljIGRhdGUgaW5mb21hdGlvblxuICogQHJldHVybnMgVGhlIGZpbHRlciBjb25kaXRpb25zIGNvbnRhaW5pbmcgc2VtYW50aWMgZGF0ZXNcbiAqL1xuXG5mdW5jdGlvbiBhZGRTZW1hbnRpY0RhdGVzVG9Db25kaXRpb25zKG9TZW1hbnRpY0RhdGVzOiBTZW1hbnRpY0RhdGVDb25maWd1cmF0aW9uKTogQ29uZGl0aW9uT2JqZWN0IHtcblx0Y29uc3QgdmFsdWVzOiB1bmtub3duW10gPSBbXTtcblx0aWYgKG9TZW1hbnRpY0RhdGVzPy5oaWdoKSB7XG5cdFx0dmFsdWVzLnB1c2gob1NlbWFudGljRGF0ZXM/LmhpZ2gpO1xuXHR9XG5cdGlmIChvU2VtYW50aWNEYXRlcz8ubG93KSB7XG5cdFx0dmFsdWVzLnB1c2gob1NlbWFudGljRGF0ZXM/Lmxvdyk7XG5cdH1cblx0cmV0dXJuIHtcblx0XHR2YWx1ZXM6IHZhbHVlcyxcblx0XHRvcGVyYXRvcjogb1NlbWFudGljRGF0ZXM/Lm9wZXJhdG9yLFxuXHRcdGlzRW1wdHk6IHVuZGVmaW5lZFxuXHR9O1xufVxuXG5mdW5jdGlvbiBhZGRTZWxlY3RPcHRpb25zVG9Db25kaXRpb25zKFxuXHRzQ29udGV4dFBhdGg6IHN0cmluZyxcblx0b1NlbGVjdGlvblZhcmlhbnQ6IFNlbGVjdGlvblZhcmlhbnQsXG5cdHNTZWxlY3RPcHRpb25Qcm9wOiBzdHJpbmcsXG5cdG9Db25kaXRpb25zOiBSZWNvcmQ8c3RyaW5nLCBDb25kaXRpb25PYmplY3RbXT4sXG5cdHNDb25kaXRpb25QYXRoOiBzdHJpbmcgfCB1bmRlZmluZWQsXG5cdHNDb25kaXRpb25Qcm9wOiBzdHJpbmcsXG5cdG9WYWxpZFByb3BlcnRpZXM6IFJlY29yZDxzdHJpbmcsIE1ldGFNb2RlbFByb3BlcnR5Pixcblx0bWV0YU1vZGVsQ29udGV4dDogT0RhdGFNZXRhTW9kZWwsXG5cdGlzUGFyYW1ldGVyOiBib29sZWFuLFxuXHRiSXNGTFBWYWx1ZVByZXNlbnQ/OiBib29sZWFuLFxuXHRiVXNlU2VtYW50aWNEYXRlUmFuZ2U/OiBib29sZWFuIHwgc3RyaW5nLFxuXHRvVmlld0RhdGE/OiBvYmplY3Rcbikge1xuXHRsZXQgYUNvbmRpdGlvbnM6IENvbmRpdGlvbk9iamVjdFtdID0gW10sXG5cdFx0YVNlbGVjdE9wdGlvbnM6IFNlbGVjdE9wdGlvbltdLFxuXHRcdGFWYWxpZE9wZXJhdG9yczogc3RyaW5nW10sXG5cdFx0YVNlbWFudGljRGF0ZU9wZXJhdG9yczogc3RyaW5nW10gPSBbXTtcblxuXHRpZiAoaXNQYXJhbWV0ZXIgfHwgTWV0YU1vZGVsRnVuY3Rpb24uaXNQcm9wZXJ0eUZpbHRlcmFibGUobWV0YU1vZGVsQ29udGV4dCwgc0NvbnRleHRQYXRoLCBzQ29uZGl0aW9uUHJvcCwgdHJ1ZSkpIHtcblx0XHRjb25zdCBvUHJvcGVydHlNZXRhZGF0YSA9IG9WYWxpZFByb3BlcnRpZXNbc0NvbmRpdGlvblByb3BdO1xuXHRcdGFTZWxlY3RPcHRpb25zID0gb1NlbGVjdGlvblZhcmlhbnQuZ2V0U2VsZWN0T3B0aW9uKHNTZWxlY3RPcHRpb25Qcm9wKSBhcyBTZWxlY3RPcHRpb25bXTtcblx0XHRjb25zdCBzZXR0aW5ncyA9IGdldEZpbHRlckNvbmZpZ3VyYXRpb25TZXR0aW5nKG9WaWV3RGF0YSwgc0NvbmRpdGlvblByb3ApO1xuXHRcdGFWYWxpZE9wZXJhdG9ycyA9IGlzUGFyYW1ldGVyID8gW1wiRVFcIl0gOiBDb21tb25VdGlscy5nZXRPcGVyYXRvcnNGb3JQcm9wZXJ0eShzQ29uZGl0aW9uUHJvcCwgc0NvbnRleHRQYXRoLCBtZXRhTW9kZWxDb250ZXh0KTtcblx0XHRpZiAoYlVzZVNlbWFudGljRGF0ZVJhbmdlKSB7XG5cdFx0XHRhU2VtYW50aWNEYXRlT3BlcmF0b3JzID0gaXNQYXJhbWV0ZXJcblx0XHRcdFx0PyBbXCJFUVwiXVxuXHRcdFx0XHQ6IENvbW1vblV0aWxzLmdldE9wZXJhdG9yc0ZvclByb3BlcnR5KFxuXHRcdFx0XHRcdFx0c0NvbmRpdGlvblByb3AsXG5cdFx0XHRcdFx0XHRzQ29udGV4dFBhdGgsXG5cdFx0XHRcdFx0XHRtZXRhTW9kZWxDb250ZXh0LFxuXHRcdFx0XHRcdFx0b1Byb3BlcnR5TWV0YWRhdGE/LiRUeXBlLFxuXHRcdFx0XHRcdFx0YlVzZVNlbWFudGljRGF0ZVJhbmdlLFxuXHRcdFx0XHRcdFx0c2V0dGluZ3Ncblx0XHRcdFx0ICApO1xuXHRcdH1cblx0XHQvLyBDcmVhdGUgY29uZGl0aW9ucyBmb3IgYWxsIHRoZSBzZWxlY3RPcHRpb25zIG9mIHRoZSBwcm9wZXJ0eVxuXHRcdGFDb25kaXRpb25zID0gaXNQYXJhbWV0ZXJcblx0XHRcdD8gQ29tbW9uVXRpbHMuYWRkU2VsZWN0T3B0aW9uVG9Db25kaXRpb25zKFxuXHRcdFx0XHRcdG9Qcm9wZXJ0eU1ldGFkYXRhLFxuXHRcdFx0XHRcdGFWYWxpZE9wZXJhdG9ycyxcblx0XHRcdFx0XHRhU2VtYW50aWNEYXRlT3BlcmF0b3JzLFxuXHRcdFx0XHRcdGFDb25kaXRpb25zLFxuXHRcdFx0XHRcdGFTZWxlY3RPcHRpb25zWzBdXG5cdFx0XHQgIClcblx0XHRcdDogYVNlbGVjdE9wdGlvbnMucmVkdWNlKFxuXHRcdFx0XHRcdENvbW1vblV0aWxzLmFkZFNlbGVjdE9wdGlvblRvQ29uZGl0aW9ucy5iaW5kKG51bGwsIG9Qcm9wZXJ0eU1ldGFkYXRhLCBhVmFsaWRPcGVyYXRvcnMsIGFTZW1hbnRpY0RhdGVPcGVyYXRvcnMpLFxuXHRcdFx0XHRcdGFDb25kaXRpb25zXG5cdFx0XHQgICk7XG5cdFx0aWYgKGFDb25kaXRpb25zLmxlbmd0aCkge1xuXHRcdFx0aWYgKHNDb25kaXRpb25QYXRoKSB7XG5cdFx0XHRcdG9Db25kaXRpb25zW3NDb25kaXRpb25QYXRoICsgc0NvbmRpdGlvblByb3BdID0gb0NvbmRpdGlvbnMuaGFzT3duUHJvcGVydHkoc0NvbmRpdGlvblBhdGggKyBzQ29uZGl0aW9uUHJvcClcblx0XHRcdFx0XHQ/IG9Db25kaXRpb25zW3NDb25kaXRpb25QYXRoICsgc0NvbmRpdGlvblByb3BdLmNvbmNhdChhQ29uZGl0aW9ucylcblx0XHRcdFx0XHQ6IGFDb25kaXRpb25zO1xuXHRcdFx0fSBlbHNlIGlmIChiSXNGTFBWYWx1ZVByZXNlbnQpIHtcblx0XHRcdFx0Ly8gSWYgRkxQIHZhbHVlcyBhcmUgcHJlc2VudCByZXBsYWNlIGl0IHdpdGggRkxQIHZhbHVlc1xuXHRcdFx0XHRhQ29uZGl0aW9ucy5mb3JFYWNoKChlbGVtZW50KSA9PiB7XG5cdFx0XHRcdFx0ZWxlbWVudFtcImZpbHRlcmVkXCJdID0gdHJ1ZTtcblx0XHRcdFx0fSk7XG5cdFx0XHRcdGlmIChvQ29uZGl0aW9ucy5oYXNPd25Qcm9wZXJ0eShzQ29uZGl0aW9uUHJvcCkpIHtcblx0XHRcdFx0XHRvQ29uZGl0aW9uc1tzQ29uZGl0aW9uUHJvcF0uZm9yRWFjaCgoZWxlbWVudCkgPT4ge1xuXHRcdFx0XHRcdFx0ZWxlbWVudFtcImZpbHRlcmVkXCJdID0gZmFsc2U7XG5cdFx0XHRcdFx0fSk7XG5cdFx0XHRcdFx0b0NvbmRpdGlvbnNbc0NvbmRpdGlvblByb3BdID0gb0NvbmRpdGlvbnNbc0NvbmRpdGlvblByb3BdLmNvbmNhdChhQ29uZGl0aW9ucyk7XG5cdFx0XHRcdH0gZWxzZSB7XG5cdFx0XHRcdFx0b0NvbmRpdGlvbnNbc0NvbmRpdGlvblByb3BdID0gYUNvbmRpdGlvbnM7XG5cdFx0XHRcdH1cblx0XHRcdH0gZWxzZSB7XG5cdFx0XHRcdG9Db25kaXRpb25zW3NDb25kaXRpb25Qcm9wXSA9IG9Db25kaXRpb25zLmhhc093blByb3BlcnR5KHNDb25kaXRpb25Qcm9wKVxuXHRcdFx0XHRcdD8gb0NvbmRpdGlvbnNbc0NvbmRpdGlvblByb3BdLmNvbmNhdChhQ29uZGl0aW9ucylcblx0XHRcdFx0XHQ6IGFDb25kaXRpb25zO1xuXHRcdFx0fVxuXHRcdH1cblx0fVxufVxuXG4vKipcbiAqIE1ldGhvZCB0byBjcmVhdGUgdGhlIHNlbWFudGljIGRhdGVzIGZyb20gZmlsdGVyIGNvbmRpdGlvbnNcbiAqXG4gKiBAZnVuY3Rpb25cbiAqIEBuYW1lIGNyZWF0ZVNlbWFudGljRGF0ZXNGcm9tQ29uZGl0aW9uc1xuICogQHBhcmFtIG9Db25kaXRpb24gRmlsdGVyIGZpZWxkIGNvbmRpdGlvblxuICogQHBhcmFtIHNGaWx0ZXJOYW1lIEZpbHRlciBGaWVsZCBQYXRoXG4gKiBAcmV0dXJucyBUaGUgU2VtYW50aWMgZGF0ZSBjb25kaXRpb25zXG4gKi9cblxuZnVuY3Rpb24gY3JlYXRlU2VtYW50aWNEYXRlc0Zyb21Db25kaXRpb25zKG9Db25kaXRpb246IENvbmRpdGlvblR5cGUpOiBTZW1hbnRpY0RhdGVDb25maWd1cmF0aW9uIHtcblx0cmV0dXJuIHtcblx0XHRoaWdoOiAob0NvbmRpdGlvbj8udmFsdWVzPy5bMF0gYXMgc3RyaW5nKSB8fCBudWxsLFxuXHRcdGxvdzogKG9Db25kaXRpb24/LnZhbHVlcz8uWzFdIGFzIHN0cmluZykgfHwgbnVsbCxcblx0XHRvcGVyYXRvcjogb0NvbmRpdGlvbj8ub3BlcmF0b3Jcblx0fTtcbn1cblxuLyoqXG4gKiBNZXRob2QgdG8gUmV0dXJuIHRoZSBmaWx0ZXIgY29uZmlndXJhdGlvblxuICpcbiAqIEBmdW5jdGlvblxuICogQG5hbWUgZ2V0RmlsdGVyQ29uZmlndXJhdGlvblNldHRpbmdcbiAqIEBwYXJhbSBvVmlld0RhdGEgbWFuaWZlc3QgQ29uZmlndXJhdGlvblxuICogQHBhcmFtIHNQcm9wZXJ0eSBGaWx0ZXIgRmllbGQgUGF0aFxuICogQHJldHVybnMgVGhlIEZpbHRlciBGaWVsZCBDb25maWd1cmF0aW9uXG4gKi9cbnR5cGUgVmlld0RhdGEgPSB7XG5cdGNvbnRyb2xDb25maWd1cmF0aW9uPzogUmVjb3JkPHN0cmluZywgUmVjb3JkPHN0cmluZywgdW5rbm93bj4+O1xufTtcbmZ1bmN0aW9uIGdldEZpbHRlckNvbmZpZ3VyYXRpb25TZXR0aW5nKG9WaWV3RGF0YTogVmlld0RhdGEgPSB7fSwgc1Byb3BlcnR5OiBzdHJpbmcpIHtcblx0Y29uc3Qgb0NvbmZpZyA9IG9WaWV3RGF0YT8uY29udHJvbENvbmZpZ3VyYXRpb247XG5cdGNvbnN0IGZpbHRlckNvbmZpZyA9XG5cdFx0b0NvbmZpZyAmJiAob0NvbmZpZ1tcIkBjb20uc2FwLnZvY2FidWxhcmllcy5VSS52MS5TZWxlY3Rpb25GaWVsZHNcIl0/LmZpbHRlckZpZWxkcyBhcyBSZWNvcmQ8c3RyaW5nLCB7IHNldHRpbmdzOiBzdHJpbmcgfT4pO1xuXHRyZXR1cm4gZmlsdGVyQ29uZmlnPy5bc1Byb3BlcnR5XSA/IGZpbHRlckNvbmZpZ1tzUHJvcGVydHldPy5zZXR0aW5ncyA6IHVuZGVmaW5lZDtcbn1cbmZ1bmN0aW9uIGFkZFNlbGVjdGlvblZhcmlhbnRUb0NvbmRpdGlvbnMoXG5cdG9TZWxlY3Rpb25WYXJpYW50OiBTZWxlY3Rpb25WYXJpYW50LFxuXHRvQ29uZGl0aW9uczogUmVjb3JkPHN0cmluZywgQ29uZGl0aW9uT2JqZWN0W10+LFxuXHRvTWV0YU1vZGVsQ29udGV4dDogT0RhdGFNZXRhTW9kZWwsXG5cdHNDb250ZXh0UGF0aDogc3RyaW5nLFxuXHRiSXNGTFBWYWx1ZXM/OiBib29sZWFuLFxuXHRiVXNlU2VtYW50aWNEYXRlUmFuZ2U/OiBib29sZWFuLFxuXHRvVmlld0RhdGE/OiBvYmplY3Rcbikge1xuXHRjb25zdCBhU2VsZWN0T3B0aW9uc1Byb3BlcnR5TmFtZXMgPSBvU2VsZWN0aW9uVmFyaWFudC5nZXRTZWxlY3RPcHRpb25zUHJvcGVydHlOYW1lcygpLFxuXHRcdG9WYWxpZFByb3BlcnRpZXMgPSBDb21tb25VdGlscy5nZXRDb250ZXh0UGF0aFByb3BlcnRpZXMob01ldGFNb2RlbENvbnRleHQsIHNDb250ZXh0UGF0aCksXG5cdFx0YU1ldGFkYXRQcm9wZXJ0aWVzID0gT2JqZWN0LmtleXMob1ZhbGlkUHJvcGVydGllcyksXG5cdFx0b1BhcmFtZXRlckluZm8gPSBDb21tb25VdGlscy5nZXRQYXJhbWV0ZXJJbmZvKG9NZXRhTW9kZWxDb250ZXh0LCBzQ29udGV4dFBhdGgpLFxuXHRcdHNQYXJhbWV0ZXJDb250ZXh0UGF0aCA9IG9QYXJhbWV0ZXJJbmZvLmNvbnRleHRQYXRoLFxuXHRcdG9WYWxpZFBhcmFtZXRlclByb3BlcnRpZXMgPSBvUGFyYW1ldGVySW5mby5wYXJhbWV0ZXJQcm9wZXJ0aWVzO1xuXG5cdGlmIChzUGFyYW1ldGVyQ29udGV4dFBhdGggIT09IHVuZGVmaW5lZCAmJiBvVmFsaWRQYXJhbWV0ZXJQcm9wZXJ0aWVzICYmIE9iamVjdC5rZXlzKG9WYWxpZFBhcmFtZXRlclByb3BlcnRpZXMpLmxlbmd0aCA+IDApIHtcblx0XHRjb25zdCBhTWV0YWRhdGFQYXJhbWV0ZXJzID0gT2JqZWN0LmtleXMob1ZhbGlkUGFyYW1ldGVyUHJvcGVydGllcyk7XG5cdFx0YU1ldGFkYXRhUGFyYW1ldGVycy5mb3JFYWNoKGZ1bmN0aW9uIChzTWV0YWRhdGFQYXJhbWV0ZXI6IHN0cmluZykge1xuXHRcdFx0bGV0IHNTZWxlY3RPcHRpb25OYW1lO1xuXHRcdFx0aWYgKGFTZWxlY3RPcHRpb25zUHJvcGVydHlOYW1lcy5pbmNsdWRlcyhgJFBhcmFtZXRlci4ke3NNZXRhZGF0YVBhcmFtZXRlcn1gKSkge1xuXHRcdFx0XHRzU2VsZWN0T3B0aW9uTmFtZSA9IGAkUGFyYW1ldGVyLiR7c01ldGFkYXRhUGFyYW1ldGVyfWA7XG5cdFx0XHR9IGVsc2UgaWYgKGFTZWxlY3RPcHRpb25zUHJvcGVydHlOYW1lcy5pbmNsdWRlcyhzTWV0YWRhdGFQYXJhbWV0ZXIpKSB7XG5cdFx0XHRcdHNTZWxlY3RPcHRpb25OYW1lID0gc01ldGFkYXRhUGFyYW1ldGVyO1xuXHRcdFx0fSBlbHNlIGlmIChcblx0XHRcdFx0c01ldGFkYXRhUGFyYW1ldGVyLnN0YXJ0c1dpdGgoXCJQX1wiKSAmJlxuXHRcdFx0XHRhU2VsZWN0T3B0aW9uc1Byb3BlcnR5TmFtZXMuaW5jbHVkZXMoYCRQYXJhbWV0ZXIuJHtzTWV0YWRhdGFQYXJhbWV0ZXIuc2xpY2UoMiwgc01ldGFkYXRhUGFyYW1ldGVyLmxlbmd0aCl9YClcblx0XHRcdCkge1xuXHRcdFx0XHRzU2VsZWN0T3B0aW9uTmFtZSA9IGAkUGFyYW1ldGVyLiR7c01ldGFkYXRhUGFyYW1ldGVyLnNsaWNlKDIsIHNNZXRhZGF0YVBhcmFtZXRlci5sZW5ndGgpfWA7XG5cdFx0XHR9IGVsc2UgaWYgKFxuXHRcdFx0XHRzTWV0YWRhdGFQYXJhbWV0ZXIuc3RhcnRzV2l0aChcIlBfXCIpICYmXG5cdFx0XHRcdGFTZWxlY3RPcHRpb25zUHJvcGVydHlOYW1lcy5pbmNsdWRlcyhzTWV0YWRhdGFQYXJhbWV0ZXIuc2xpY2UoMiwgc01ldGFkYXRhUGFyYW1ldGVyLmxlbmd0aCkpXG5cdFx0XHQpIHtcblx0XHRcdFx0c1NlbGVjdE9wdGlvbk5hbWUgPSBzTWV0YWRhdGFQYXJhbWV0ZXIuc2xpY2UoMiwgc01ldGFkYXRhUGFyYW1ldGVyLmxlbmd0aCk7XG5cdFx0XHR9IGVsc2UgaWYgKGFTZWxlY3RPcHRpb25zUHJvcGVydHlOYW1lcy5pbmNsdWRlcyhgJFBhcmFtZXRlci5QXyR7c01ldGFkYXRhUGFyYW1ldGVyfWApKSB7XG5cdFx0XHRcdHNTZWxlY3RPcHRpb25OYW1lID0gYCRQYXJhbWV0ZXIuUF8ke3NNZXRhZGF0YVBhcmFtZXRlcn1gO1xuXHRcdFx0fSBlbHNlIGlmIChhU2VsZWN0T3B0aW9uc1Byb3BlcnR5TmFtZXMuaW5jbHVkZXMoYFBfJHtzTWV0YWRhdGFQYXJhbWV0ZXJ9YCkpIHtcblx0XHRcdFx0c1NlbGVjdE9wdGlvbk5hbWUgPSBgUF8ke3NNZXRhZGF0YVBhcmFtZXRlcn1gO1xuXHRcdFx0fVxuXG5cdFx0XHRpZiAoc1NlbGVjdE9wdGlvbk5hbWUpIHtcblx0XHRcdFx0YWRkU2VsZWN0T3B0aW9uc1RvQ29uZGl0aW9ucyhcblx0XHRcdFx0XHRzUGFyYW1ldGVyQ29udGV4dFBhdGgsXG5cdFx0XHRcdFx0b1NlbGVjdGlvblZhcmlhbnQsXG5cdFx0XHRcdFx0c1NlbGVjdE9wdGlvbk5hbWUsXG5cdFx0XHRcdFx0b0NvbmRpdGlvbnMsXG5cdFx0XHRcdFx0dW5kZWZpbmVkLFxuXHRcdFx0XHRcdHNNZXRhZGF0YVBhcmFtZXRlcixcblx0XHRcdFx0XHRvVmFsaWRQYXJhbWV0ZXJQcm9wZXJ0aWVzLFxuXHRcdFx0XHRcdG9NZXRhTW9kZWxDb250ZXh0LFxuXHRcdFx0XHRcdHRydWUsXG5cdFx0XHRcdFx0YklzRkxQVmFsdWVzLFxuXHRcdFx0XHRcdGJVc2VTZW1hbnRpY0RhdGVSYW5nZSxcblx0XHRcdFx0XHRvVmlld0RhdGFcblx0XHRcdFx0KTtcblx0XHRcdH1cblx0XHR9KTtcblx0fVxuXHRhTWV0YWRhdFByb3BlcnRpZXMuZm9yRWFjaChmdW5jdGlvbiAoc01ldGFkYXRhUHJvcGVydHk6IHN0cmluZykge1xuXHRcdGxldCBzU2VsZWN0T3B0aW9uTmFtZTtcblx0XHRpZiAoYVNlbGVjdE9wdGlvbnNQcm9wZXJ0eU5hbWVzLmluY2x1ZGVzKHNNZXRhZGF0YVByb3BlcnR5KSkge1xuXHRcdFx0c1NlbGVjdE9wdGlvbk5hbWUgPSBzTWV0YWRhdGFQcm9wZXJ0eTtcblx0XHR9IGVsc2UgaWYgKFxuXHRcdFx0c01ldGFkYXRhUHJvcGVydHkuc3RhcnRzV2l0aChcIlBfXCIpICYmXG5cdFx0XHRhU2VsZWN0T3B0aW9uc1Byb3BlcnR5TmFtZXMuaW5jbHVkZXMoc01ldGFkYXRhUHJvcGVydHkuc2xpY2UoMiwgc01ldGFkYXRhUHJvcGVydHkubGVuZ3RoKSlcblx0XHQpIHtcblx0XHRcdHNTZWxlY3RPcHRpb25OYW1lID0gc01ldGFkYXRhUHJvcGVydHkuc2xpY2UoMiwgc01ldGFkYXRhUHJvcGVydHkubGVuZ3RoKTtcblx0XHR9IGVsc2UgaWYgKGFTZWxlY3RPcHRpb25zUHJvcGVydHlOYW1lcy5pbmNsdWRlcyhgUF8ke3NNZXRhZGF0YVByb3BlcnR5fWApKSB7XG5cdFx0XHRzU2VsZWN0T3B0aW9uTmFtZSA9IGBQXyR7c01ldGFkYXRhUHJvcGVydHl9YDtcblx0XHR9XG5cdFx0aWYgKHNTZWxlY3RPcHRpb25OYW1lKSB7XG5cdFx0XHRhZGRTZWxlY3RPcHRpb25zVG9Db25kaXRpb25zKFxuXHRcdFx0XHRzQ29udGV4dFBhdGgsXG5cdFx0XHRcdG9TZWxlY3Rpb25WYXJpYW50LFxuXHRcdFx0XHRzU2VsZWN0T3B0aW9uTmFtZSxcblx0XHRcdFx0b0NvbmRpdGlvbnMsXG5cdFx0XHRcdHVuZGVmaW5lZCxcblx0XHRcdFx0c01ldGFkYXRhUHJvcGVydHksXG5cdFx0XHRcdG9WYWxpZFByb3BlcnRpZXMsXG5cdFx0XHRcdG9NZXRhTW9kZWxDb250ZXh0LFxuXHRcdFx0XHRmYWxzZSxcblx0XHRcdFx0YklzRkxQVmFsdWVzLFxuXHRcdFx0XHRiVXNlU2VtYW50aWNEYXRlUmFuZ2UsXG5cdFx0XHRcdG9WaWV3RGF0YVxuXHRcdFx0KTtcblx0XHR9XG5cdH0pO1xuXG5cdGFTZWxlY3RPcHRpb25zUHJvcGVydHlOYW1lcy5mb3JFYWNoKGZ1bmN0aW9uIChzU2VsZWN0T3B0aW9uOiBzdHJpbmcpIHtcblx0XHRpZiAoc1NlbGVjdE9wdGlvbi5pbmRleE9mKFwiLlwiKSA+IDAgJiYgIXNTZWxlY3RPcHRpb24uaW5jbHVkZXMoXCIkUGFyYW1ldGVyXCIpKSB7XG5cdFx0XHRjb25zdCBzUmVwbGFjZWRPcHRpb24gPSBzU2VsZWN0T3B0aW9uLnJlcGxhY2VBbGwoXCIuXCIsIFwiL1wiKTtcblx0XHRcdGNvbnN0IHNGdWxsQ29udGV4dFBhdGggPSBgLyR7c1JlcGxhY2VkT3B0aW9ufWAuc3RhcnRzV2l0aChzQ29udGV4dFBhdGgpXG5cdFx0XHRcdD8gYC8ke3NSZXBsYWNlZE9wdGlvbn1gXG5cdFx0XHRcdDogYCR7c0NvbnRleHRQYXRofS8ke3NSZXBsYWNlZE9wdGlvbn1gOyAvLyBjaGVjayBpZiB0aGUgZnVsbCBwYXRoLCBlZyBTYWxlc09yZGVyTWFuYWdlLl9JdGVtLk1hdGVyaWFsIGV4aXN0cyBpbiB0aGUgbWV0YW1vZGVsXG5cdFx0XHRpZiAob01ldGFNb2RlbENvbnRleHQuZ2V0T2JqZWN0KHNGdWxsQ29udGV4dFBhdGgucmVwbGFjZShcIlBfXCIsIFwiXCIpKSkge1xuXHRcdFx0XHRfY3JlYXRlQ29uZGl0aW9uc0Zvck5hdlByb3BlcnRpZXMoXG5cdFx0XHRcdFx0c0Z1bGxDb250ZXh0UGF0aCxcblx0XHRcdFx0XHRzQ29udGV4dFBhdGgsXG5cdFx0XHRcdFx0b1NlbGVjdGlvblZhcmlhbnQsXG5cdFx0XHRcdFx0c1NlbGVjdE9wdGlvbixcblx0XHRcdFx0XHRvTWV0YU1vZGVsQ29udGV4dCxcblx0XHRcdFx0XHRvQ29uZGl0aW9ucyxcblx0XHRcdFx0XHRiSXNGTFBWYWx1ZXMsXG5cdFx0XHRcdFx0YlVzZVNlbWFudGljRGF0ZVJhbmdlLFxuXHRcdFx0XHRcdG9WaWV3RGF0YVxuXHRcdFx0XHQpO1xuXHRcdFx0fVxuXHRcdH1cblx0fSk7XG5cdHJldHVybiBvQ29uZGl0aW9ucztcbn1cblxuZnVuY3Rpb24gX2NyZWF0ZUNvbmRpdGlvbnNGb3JOYXZQcm9wZXJ0aWVzKFxuXHRzRnVsbENvbnRleHRQYXRoOiBzdHJpbmcsXG5cdHNNYWluRW50aXR5U2V0UGF0aDogc3RyaW5nLFxuXHRvU2VsZWN0aW9uVmFyaWFudDogU2VsZWN0aW9uVmFyaWFudCxcblx0c1NlbGVjdE9wdGlvbjogc3RyaW5nLFxuXHRvTWV0YU1vZGVsQ29udGV4dDogT0RhdGFNZXRhTW9kZWwsXG5cdG9Db25kaXRpb25zOiBSZWNvcmQ8c3RyaW5nLCBDb25kaXRpb25PYmplY3RbXT4sXG5cdGJJc0ZMUFZhbHVlUHJlc2VudD86IGJvb2xlYW4sXG5cdGJTZW1hbnRpY0RhdGVSYW5nZT86IGJvb2xlYW4sXG5cdG9WaWV3RGF0YT86IG9iamVjdFxuKSB7XG5cdGxldCBhTmF2T2JqZWN0TmFtZXMgPSBzU2VsZWN0T3B0aW9uLnNwbGl0KFwiLlwiKTtcblx0Ly8gRWc6IFwiU2FsZXNPcmRlck1hbmFnZS5fSXRlbS5fTWF0ZXJpYWwuTWF0ZXJpYWxcIiBvciBcIl9JdGVtLk1hdGVyaWFsXCJcblx0aWYgKGAvJHtzU2VsZWN0T3B0aW9uLnJlcGxhY2VBbGwoXCIuXCIsIFwiL1wiKX1gLnN0YXJ0c1dpdGgoc01haW5FbnRpdHlTZXRQYXRoKSkge1xuXHRcdGNvbnN0IHNGdWxsUGF0aCA9IGAvJHtzU2VsZWN0T3B0aW9ufWAucmVwbGFjZUFsbChcIi5cIiwgXCIvXCIpLFxuXHRcdFx0c05hdlBhdGggPSBzRnVsbFBhdGgucmVwbGFjZShgJHtzTWFpbkVudGl0eVNldFBhdGh9L2AsIFwiXCIpO1xuXHRcdGFOYXZPYmplY3ROYW1lcyA9IHNOYXZQYXRoLnNwbGl0KFwiL1wiKTtcblx0fVxuXHRsZXQgc0NvbmRpdGlvblBhdGggPSBcIlwiO1xuXHRjb25zdCBzUHJvcGVydHlOYW1lID0gYU5hdk9iamVjdE5hbWVzW2FOYXZPYmplY3ROYW1lcy5sZW5ndGggLSAxXTsgLy8gTWF0ZXJpYWwgZnJvbSBTYWxlc09yZGVyTWFuYWdlLl9JdGVtLk1hdGVyaWFsXG5cdGZvciAobGV0IGkgPSAwOyBpIDwgYU5hdk9iamVjdE5hbWVzLmxlbmd0aCAtIDE7IGkrKykge1xuXHRcdGlmIChvTWV0YU1vZGVsQ29udGV4dC5nZXRPYmplY3QoYCR7c01haW5FbnRpdHlTZXRQYXRofS8ke2FOYXZPYmplY3ROYW1lc1tpXS5yZXBsYWNlKFwiUF9cIiwgXCJcIil9YCkuJGlzQ29sbGVjdGlvbikge1xuXHRcdFx0c0NvbmRpdGlvblBhdGggPSBgJHtzQ29uZGl0aW9uUGF0aCArIGFOYXZPYmplY3ROYW1lc1tpXX0qL2A7IC8vIF9JdGVtKi8gaW4gY2FzZSBvZiAxOm4gY2FyZGluYWxpdHlcblx0XHR9IGVsc2Uge1xuXHRcdFx0c0NvbmRpdGlvblBhdGggPSBgJHtzQ29uZGl0aW9uUGF0aCArIGFOYXZPYmplY3ROYW1lc1tpXX0vYDsgLy8gX0l0ZW0vIGluIGNhc2Ugb2YgMToxIGNhcmRpbmFsaXR5XG5cdFx0fVxuXHRcdHNNYWluRW50aXR5U2V0UGF0aCA9IGAke3NNYWluRW50aXR5U2V0UGF0aH0vJHthTmF2T2JqZWN0TmFtZXNbaV19YDtcblx0fVxuXHRjb25zdCBzTmF2UHJvcGVydHlQYXRoID0gc0Z1bGxDb250ZXh0UGF0aC5zbGljZSgwLCBzRnVsbENvbnRleHRQYXRoLmxhc3RJbmRleE9mKFwiL1wiKSksXG5cdFx0b1ZhbGlkUHJvcGVydGllcyA9IENvbW1vblV0aWxzLmdldENvbnRleHRQYXRoUHJvcGVydGllcyhvTWV0YU1vZGVsQ29udGV4dCwgc05hdlByb3BlcnR5UGF0aCksXG5cdFx0YVNlbGVjdE9wdGlvbnNQcm9wZXJ0eU5hbWVzID0gb1NlbGVjdGlvblZhcmlhbnQuZ2V0U2VsZWN0T3B0aW9uc1Byb3BlcnR5TmFtZXMoKTtcblx0bGV0IHNTZWxlY3RPcHRpb25OYW1lID0gc1Byb3BlcnR5TmFtZTtcblx0aWYgKG9WYWxpZFByb3BlcnRpZXNbc1Byb3BlcnR5TmFtZV0pIHtcblx0XHRzU2VsZWN0T3B0aW9uTmFtZSA9IHNQcm9wZXJ0eU5hbWU7XG5cdH0gZWxzZSBpZiAoc1Byb3BlcnR5TmFtZS5zdGFydHNXaXRoKFwiUF9cIikgJiYgb1ZhbGlkUHJvcGVydGllc1tzUHJvcGVydHlOYW1lLnJlcGxhY2UoXCJQX1wiLCBcIlwiKV0pIHtcblx0XHRzU2VsZWN0T3B0aW9uTmFtZSA9IHNQcm9wZXJ0eU5hbWUucmVwbGFjZShcIlBfXCIsIFwiXCIpO1xuXHR9IGVsc2UgaWYgKG9WYWxpZFByb3BlcnRpZXNbYFBfJHtzUHJvcGVydHlOYW1lfWBdICYmIGFTZWxlY3RPcHRpb25zUHJvcGVydHlOYW1lcy5pbmNsdWRlcyhgUF8ke3NQcm9wZXJ0eU5hbWV9YCkpIHtcblx0XHRzU2VsZWN0T3B0aW9uTmFtZSA9IGBQXyR7c1Byb3BlcnR5TmFtZX1gO1xuXHR9XG5cdGlmIChzUHJvcGVydHlOYW1lLnN0YXJ0c1dpdGgoXCJQX1wiKSAmJiBvQ29uZGl0aW9uc1tzQ29uZGl0aW9uUGF0aCArIHNTZWxlY3RPcHRpb25OYW1lXSkge1xuXHRcdC8vIGlmIHRoZXJlIGlzIG5vIFNhbGVzT3JkZXJNYW5hZ2UuX0l0ZW0uTWF0ZXJpYWwgeWV0IGluIHRoZSBvQ29uZGl0aW9uc1xuXHR9IGVsc2UgaWYgKCFzUHJvcGVydHlOYW1lLnN0YXJ0c1dpdGgoXCJQX1wiKSAmJiBvQ29uZGl0aW9uc1tzQ29uZGl0aW9uUGF0aCArIHNTZWxlY3RPcHRpb25OYW1lXSkge1xuXHRcdGRlbGV0ZSBvQ29uZGl0aW9uc1tzQ29uZGl0aW9uUGF0aCArIHNTZWxlY3RPcHRpb25OYW1lXTtcblx0XHRhZGRTZWxlY3RPcHRpb25zVG9Db25kaXRpb25zKFxuXHRcdFx0c05hdlByb3BlcnR5UGF0aCxcblx0XHRcdG9TZWxlY3Rpb25WYXJpYW50LFxuXHRcdFx0c1NlbGVjdE9wdGlvbixcblx0XHRcdG9Db25kaXRpb25zLFxuXHRcdFx0c0NvbmRpdGlvblBhdGgsXG5cdFx0XHRzU2VsZWN0T3B0aW9uTmFtZSxcblx0XHRcdG9WYWxpZFByb3BlcnRpZXMsXG5cdFx0XHRvTWV0YU1vZGVsQ29udGV4dCxcblx0XHRcdGZhbHNlLFxuXHRcdFx0YklzRkxQVmFsdWVQcmVzZW50LFxuXHRcdFx0YlNlbWFudGljRGF0ZVJhbmdlLFxuXHRcdFx0b1ZpZXdEYXRhXG5cdFx0KTtcblx0fSBlbHNlIHtcblx0XHRhZGRTZWxlY3RPcHRpb25zVG9Db25kaXRpb25zKFxuXHRcdFx0c05hdlByb3BlcnR5UGF0aCxcblx0XHRcdG9TZWxlY3Rpb25WYXJpYW50LFxuXHRcdFx0c1NlbGVjdE9wdGlvbixcblx0XHRcdG9Db25kaXRpb25zLFxuXHRcdFx0c0NvbmRpdGlvblBhdGgsXG5cdFx0XHRzU2VsZWN0T3B0aW9uTmFtZSxcblx0XHRcdG9WYWxpZFByb3BlcnRpZXMsXG5cdFx0XHRvTWV0YU1vZGVsQ29udGV4dCxcblx0XHRcdGZhbHNlLFxuXHRcdFx0YklzRkxQVmFsdWVQcmVzZW50LFxuXHRcdFx0YlNlbWFudGljRGF0ZVJhbmdlLFxuXHRcdFx0b1ZpZXdEYXRhXG5cdFx0KTtcblx0fVxufVxuXG5mdW5jdGlvbiBhZGRQYWdlQ29udGV4dFRvU2VsZWN0aW9uVmFyaWFudChvU2VsZWN0aW9uVmFyaWFudDogU2VsZWN0aW9uVmFyaWFudCwgbVBhZ2VDb250ZXh0OiB1bmtub3duW10sIG9WaWV3OiBWaWV3KSB7XG5cdGNvbnN0IG9BcHBDb21wb25lbnQgPSBDb21tb25VdGlscy5nZXRBcHBDb21wb25lbnQob1ZpZXcpO1xuXHRjb25zdCBvTmF2aWdhdGlvblNlcnZpY2UgPSBvQXBwQ29tcG9uZW50LmdldE5hdmlnYXRpb25TZXJ2aWNlKCk7XG5cdHJldHVybiBvTmF2aWdhdGlvblNlcnZpY2UubWl4QXR0cmlidXRlc0FuZFNlbGVjdGlvblZhcmlhbnQobVBhZ2VDb250ZXh0LCBvU2VsZWN0aW9uVmFyaWFudC50b0pTT05TdHJpbmcoKSk7XG59XG5cbmZ1bmN0aW9uIGFkZEV4dGVybmFsU3RhdGVGaWx0ZXJzVG9TZWxlY3Rpb25WYXJpYW50KFxuXHRvU2VsZWN0aW9uVmFyaWFudDogU2VsZWN0aW9uVmFyaWFudCxcblx0bUZpbHRlcnM6IHtcblx0XHRmaWx0ZXJDb25kaXRpb25zOiBSZWNvcmQ8c3RyaW5nLCBSZWNvcmQ8c3RyaW5nLCBDb25kaXRpb25PYmplY3Q+Pjtcblx0XHRmaWx0ZXJDb25kaXRpb25zV2l0aG91dENvbmZsaWN0OiBSZWNvcmQ8c3RyaW5nLCBzdHJpbmc+O1xuXHR9LFxuXHRvVGFyZ2V0SW5mbzoge1xuXHRcdHByb3BlcnRpZXNXaXRob3V0Q29uZmxpY3Q/OiBSZWNvcmQ8c3RyaW5nLCBzdHJpbmc+O1xuXHR9LFxuXHRvRmlsdGVyQmFyPzogRmlsdGVyQmFyXG4pIHtcblx0bGV0IHNGaWx0ZXI6IHN0cmluZztcblx0Y29uc3QgZm5HZXRTaWduQW5kT3B0aW9uID0gZnVuY3Rpb24gKHNPcGVyYXRvcjogc3RyaW5nLCBzTG93VmFsdWU6IHN0cmluZywgc0hpZ2hWYWx1ZTogc3RyaW5nKSB7XG5cdFx0Y29uc3Qgb1NlbGVjdE9wdGlvblN0YXRlID0ge1xuXHRcdFx0b3B0aW9uOiBcIlwiLFxuXHRcdFx0c2lnbjogXCJJXCIsXG5cdFx0XHRsb3c6IHNMb3dWYWx1ZSxcblx0XHRcdGhpZ2g6IHNIaWdoVmFsdWVcblx0XHR9O1xuXHRcdHN3aXRjaCAoc09wZXJhdG9yKSB7XG5cdFx0XHRjYXNlIFwiQ29udGFpbnNcIjpcblx0XHRcdFx0b1NlbGVjdE9wdGlvblN0YXRlLm9wdGlvbiA9IFwiQ1BcIjtcblx0XHRcdFx0YnJlYWs7XG5cdFx0XHRjYXNlIFwiU3RhcnRzV2l0aFwiOlxuXHRcdFx0XHRvU2VsZWN0T3B0aW9uU3RhdGUub3B0aW9uID0gXCJDUFwiO1xuXHRcdFx0XHRvU2VsZWN0T3B0aW9uU3RhdGUubG93ICs9IFwiKlwiO1xuXHRcdFx0XHRicmVhaztcblx0XHRcdGNhc2UgXCJFbmRzV2l0aFwiOlxuXHRcdFx0XHRvU2VsZWN0T3B0aW9uU3RhdGUub3B0aW9uID0gXCJDUFwiO1xuXHRcdFx0XHRvU2VsZWN0T3B0aW9uU3RhdGUubG93ID0gYCoke29TZWxlY3RPcHRpb25TdGF0ZS5sb3d9YDtcblx0XHRcdFx0YnJlYWs7XG5cdFx0XHRjYXNlIFwiQlRcIjpcblx0XHRcdGNhc2UgXCJMRVwiOlxuXHRcdFx0Y2FzZSBcIkxUXCI6XG5cdFx0XHRjYXNlIFwiR1RcIjpcblx0XHRcdGNhc2UgXCJORVwiOlxuXHRcdFx0Y2FzZSBcIkVRXCI6XG5cdFx0XHRcdG9TZWxlY3RPcHRpb25TdGF0ZS5vcHRpb24gPSBzT3BlcmF0b3I7XG5cdFx0XHRcdGJyZWFrO1xuXHRcdFx0Y2FzZSBcIkRBVEVcIjpcblx0XHRcdFx0b1NlbGVjdE9wdGlvblN0YXRlLm9wdGlvbiA9IFwiRVFcIjtcblx0XHRcdFx0YnJlYWs7XG5cdFx0XHRjYXNlIFwiREFURVJBTkdFXCI6XG5cdFx0XHRcdG9TZWxlY3RPcHRpb25TdGF0ZS5vcHRpb24gPSBcIkJUXCI7XG5cdFx0XHRcdGJyZWFrO1xuXHRcdFx0Y2FzZSBcIkZST01cIjpcblx0XHRcdFx0b1NlbGVjdE9wdGlvblN0YXRlLm9wdGlvbiA9IFwiR0VcIjtcblx0XHRcdFx0YnJlYWs7XG5cdFx0XHRjYXNlIFwiVE9cIjpcblx0XHRcdFx0b1NlbGVjdE9wdGlvblN0YXRlLm9wdGlvbiA9IFwiTEVcIjtcblx0XHRcdFx0YnJlYWs7XG5cdFx0XHRjYXNlIFwiRUVRXCI6XG5cdFx0XHRcdG9TZWxlY3RPcHRpb25TdGF0ZS5vcHRpb24gPSBcIkVRXCI7XG5cdFx0XHRcdGJyZWFrO1xuXHRcdFx0Y2FzZSBcIkVtcHR5XCI6XG5cdFx0XHRcdG9TZWxlY3RPcHRpb25TdGF0ZS5vcHRpb24gPSBcIkVRXCI7XG5cdFx0XHRcdG9TZWxlY3RPcHRpb25TdGF0ZS5sb3cgPSBcIlwiO1xuXHRcdFx0XHRicmVhaztcblx0XHRcdGNhc2UgXCJOb3RDb250YWluc1wiOlxuXHRcdFx0XHRvU2VsZWN0T3B0aW9uU3RhdGUub3B0aW9uID0gXCJDUFwiO1xuXHRcdFx0XHRvU2VsZWN0T3B0aW9uU3RhdGUuc2lnbiA9IFwiRVwiO1xuXHRcdFx0XHRicmVhaztcblx0XHRcdGNhc2UgXCJOT1RCVFwiOlxuXHRcdFx0XHRvU2VsZWN0T3B0aW9uU3RhdGUub3B0aW9uID0gXCJCVFwiO1xuXHRcdFx0XHRvU2VsZWN0T3B0aW9uU3RhdGUuc2lnbiA9IFwiRVwiO1xuXHRcdFx0XHRicmVhaztcblx0XHRcdGNhc2UgXCJOb3RTdGFydHNXaXRoXCI6XG5cdFx0XHRcdG9TZWxlY3RPcHRpb25TdGF0ZS5vcHRpb24gPSBcIkNQXCI7XG5cdFx0XHRcdG9TZWxlY3RPcHRpb25TdGF0ZS5sb3cgKz0gXCIqXCI7XG5cdFx0XHRcdG9TZWxlY3RPcHRpb25TdGF0ZS5zaWduID0gXCJFXCI7XG5cdFx0XHRcdGJyZWFrO1xuXHRcdFx0Y2FzZSBcIk5vdEVuZHNXaXRoXCI6XG5cdFx0XHRcdG9TZWxlY3RPcHRpb25TdGF0ZS5vcHRpb24gPSBcIkNQXCI7XG5cdFx0XHRcdG9TZWxlY3RPcHRpb25TdGF0ZS5sb3cgPSBgKiR7b1NlbGVjdE9wdGlvblN0YXRlLmxvd31gO1xuXHRcdFx0XHRvU2VsZWN0T3B0aW9uU3RhdGUuc2lnbiA9IFwiRVwiO1xuXHRcdFx0XHRicmVhaztcblx0XHRcdGNhc2UgXCJOb3RFbXB0eVwiOlxuXHRcdFx0XHRvU2VsZWN0T3B0aW9uU3RhdGUub3B0aW9uID0gXCJORVwiO1xuXHRcdFx0XHRvU2VsZWN0T3B0aW9uU3RhdGUubG93ID0gXCJcIjtcblx0XHRcdFx0YnJlYWs7XG5cdFx0XHRjYXNlIFwiTk9UTEVcIjpcblx0XHRcdFx0b1NlbGVjdE9wdGlvblN0YXRlLm9wdGlvbiA9IFwiTEVcIjtcblx0XHRcdFx0b1NlbGVjdE9wdGlvblN0YXRlLnNpZ24gPSBcIkVcIjtcblx0XHRcdFx0YnJlYWs7XG5cdFx0XHRjYXNlIFwiTk9UR0VcIjpcblx0XHRcdFx0b1NlbGVjdE9wdGlvblN0YXRlLm9wdGlvbiA9IFwiR0VcIjtcblx0XHRcdFx0b1NlbGVjdE9wdGlvblN0YXRlLnNpZ24gPSBcIkVcIjtcblx0XHRcdFx0YnJlYWs7XG5cdFx0XHRjYXNlIFwiTk9UTFRcIjpcblx0XHRcdFx0b1NlbGVjdE9wdGlvblN0YXRlLm9wdGlvbiA9IFwiTFRcIjtcblx0XHRcdFx0b1NlbGVjdE9wdGlvblN0YXRlLnNpZ24gPSBcIkVcIjtcblx0XHRcdFx0YnJlYWs7XG5cdFx0XHRjYXNlIFwiTk9UR1RcIjpcblx0XHRcdFx0b1NlbGVjdE9wdGlvblN0YXRlLm9wdGlvbiA9IFwiR1RcIjtcblx0XHRcdFx0b1NlbGVjdE9wdGlvblN0YXRlLnNpZ24gPSBcIkVcIjtcblx0XHRcdFx0YnJlYWs7XG5cdFx0XHRkZWZhdWx0OlxuXHRcdFx0XHRMb2cud2FybmluZyhgJHtzT3BlcmF0b3J9IGlzIG5vdCBzdXBwb3J0ZWQuICR7c0ZpbHRlcn0gY291bGQgbm90IGJlIGFkZGVkIHRvIHRoZSBuYXZpZ2F0aW9uIGNvbnRleHRgKTtcblx0XHR9XG5cdFx0cmV0dXJuIG9TZWxlY3RPcHRpb25TdGF0ZTtcblx0fTtcblx0Y29uc3Qgb0ZpbHRlckNvbmRpdGlvbnMgPSBtRmlsdGVycy5maWx0ZXJDb25kaXRpb25zO1xuXHRjb25zdCBvRmlsdGVyc1dpdGhvdXRDb25mbGljdCA9IG1GaWx0ZXJzLmZpbHRlckNvbmRpdGlvbnNXaXRob3V0Q29uZmxpY3QgPyBtRmlsdGVycy5maWx0ZXJDb25kaXRpb25zV2l0aG91dENvbmZsaWN0IDoge307XG5cdGNvbnN0IG9UYWJsZVByb3BlcnRpZXNXaXRob3V0Q29uZmxpY3QgPSBvVGFyZ2V0SW5mby5wcm9wZXJ0aWVzV2l0aG91dENvbmZsaWN0ID8gb1RhcmdldEluZm8ucHJvcGVydGllc1dpdGhvdXRDb25mbGljdCA6IHt9O1xuXHRjb25zdCBhZGRGaWx0ZXJzVG9TZWxlY3Rpb25WYXJpYW50ID0gZnVuY3Rpb24gKHNlbGVjdGlvblZhcmlhbnQ6IFNlbGVjdGlvblZhcmlhbnQsIHNGaWx0ZXJOYW1lOiBzdHJpbmcsIHNQYXRoPzogc3RyaW5nKSB7XG5cdFx0Y29uc3QgYUNvbmRpdGlvbnMgPSBvRmlsdGVyQ29uZGl0aW9uc1tzRmlsdGVyTmFtZV07XG5cdFx0Y29uc3Qgb1Byb3BlcnR5SW5mbyA9IG9GaWx0ZXJCYXIgJiYgb0ZpbHRlckJhci5nZXRQcm9wZXJ0eUhlbHBlcigpLmdldFByb3BlcnR5KHNGaWx0ZXJOYW1lKTtcblx0XHRjb25zdCBvVHlwZUNvbmZpZyA9IG9Qcm9wZXJ0eUluZm8/LnR5cGVDb25maWc7XG5cdFx0Y29uc3Qgb1R5cGVVdGlsID0gb0ZpbHRlckJhciAmJiBvRmlsdGVyQmFyLmdldENvbnRyb2xEZWxlZ2F0ZSgpLmdldFR5cGVVdGlsKCk7XG5cblx0XHRmb3IgKGNvbnN0IGl0ZW0gaW4gYUNvbmRpdGlvbnMpIHtcblx0XHRcdGNvbnN0IG9Db25kaXRpb24gPSBhQ29uZGl0aW9uc1tpdGVtXTtcblxuXHRcdFx0bGV0IG9wdGlvbjogc3RyaW5nIHwgdW5kZWZpbmVkID0gXCJcIixcblx0XHRcdFx0c2lnbiA9IFwiSVwiLFxuXHRcdFx0XHRsb3cgPSBcIlwiLFxuXHRcdFx0XHRoaWdoID0gbnVsbCxcblx0XHRcdFx0c2VtYW50aWNEYXRlcztcblxuXHRcdFx0Y29uc3Qgb09wZXJhdG9yID0gRmlsdGVyT3BlcmF0b3JVdGlsLmdldE9wZXJhdG9yKG9Db25kaXRpb24ub3BlcmF0b3IpO1xuXHRcdFx0aWYgKG9PcGVyYXRvciBpbnN0YW5jZW9mIFJhbmdlT3BlcmF0b3IpIHtcblx0XHRcdFx0c2VtYW50aWNEYXRlcyA9IENvbW1vblV0aWxzLmNyZWF0ZVNlbWFudGljRGF0ZXNGcm9tQ29uZGl0aW9ucyhvQ29uZGl0aW9uKTtcblx0XHRcdFx0Ly8gaGFuZGxpbmcgb2YgRGF0ZSBSYW5nZU9wZXJhdG9yc1xuXHRcdFx0XHRjb25zdCBvTW9kZWxGaWx0ZXIgPSBvT3BlcmF0b3IuZ2V0TW9kZWxGaWx0ZXIoXG5cdFx0XHRcdFx0b0NvbmRpdGlvbixcblx0XHRcdFx0XHRzRmlsdGVyTmFtZSxcblx0XHRcdFx0XHRvVHlwZUNvbmZpZz8udHlwZUluc3RhbmNlLFxuXHRcdFx0XHRcdGZhbHNlLFxuXHRcdFx0XHRcdG9UeXBlQ29uZmlnPy5iYXNlVHlwZVxuXHRcdFx0XHQpO1xuXHRcdFx0XHRpZiAoIW9Nb2RlbEZpbHRlcj8uZ2V0RmlsdGVycygpICYmICFvTW9kZWxGaWx0ZXI/LmdldEZpbHRlcnMoKT8ubGVuZ3RoKSB7XG5cdFx0XHRcdFx0c2lnbiA9IG9PcGVyYXRvci5leGNsdWRlID8gXCJFXCIgOiBcIklcIjtcblx0XHRcdFx0XHRsb3cgPSBvVHlwZVV0aWwuZXh0ZXJuYWxpemVWYWx1ZShvTW9kZWxGaWx0ZXIuZ2V0VmFsdWUxKCksIG9UeXBlQ29uZmlnLnR5cGVJbnN0YW5jZSk7XG5cdFx0XHRcdFx0aGlnaCA9IG9UeXBlVXRpbC5leHRlcm5hbGl6ZVZhbHVlKG9Nb2RlbEZpbHRlci5nZXRWYWx1ZTIoKSwgb1R5cGVDb25maWcudHlwZUluc3RhbmNlKTtcblx0XHRcdFx0XHRvcHRpb24gPSBvTW9kZWxGaWx0ZXIuZ2V0T3BlcmF0b3IoKTtcblx0XHRcdFx0fVxuXHRcdFx0fSBlbHNlIHtcblx0XHRcdFx0Y29uc3QgYVNlbWFudGljRGF0ZU9wc0V4dCA9IFNlbWFudGljRGF0ZU9wZXJhdG9ycy5nZXRTdXBwb3J0ZWRPcGVyYXRpb25zKCk7XG5cdFx0XHRcdGlmIChhU2VtYW50aWNEYXRlT3BzRXh0LmluY2x1ZGVzKG9Db25kaXRpb24/Lm9wZXJhdG9yKSkge1xuXHRcdFx0XHRcdHNlbWFudGljRGF0ZXMgPSBDb21tb25VdGlscy5jcmVhdGVTZW1hbnRpY0RhdGVzRnJvbUNvbmRpdGlvbnMob0NvbmRpdGlvbik7XG5cdFx0XHRcdH1cblx0XHRcdFx0Y29uc3QgdmFsdWUxID0gKG9Db25kaXRpb24udmFsdWVzWzBdICYmIG9Db25kaXRpb24udmFsdWVzWzBdLnRvU3RyaW5nKCkpIHx8IFwiXCI7XG5cdFx0XHRcdGNvbnN0IHZhbHVlMiA9IChvQ29uZGl0aW9uLnZhbHVlc1sxXSAmJiBvQ29uZGl0aW9uLnZhbHVlc1sxXS50b1N0cmluZygpKSB8fCBudWxsO1xuXHRcdFx0XHRjb25zdCBvU2VsZWN0T3B0aW9uID0gZm5HZXRTaWduQW5kT3B0aW9uKG9Db25kaXRpb24ub3BlcmF0b3IsIHZhbHVlMSwgdmFsdWUyKTtcblx0XHRcdFx0c2lnbiA9IG9PcGVyYXRvcj8uZXhjbHVkZSA/IFwiRVwiIDogXCJJXCI7XG5cdFx0XHRcdGxvdyA9IG9TZWxlY3RPcHRpb24/Lmxvdztcblx0XHRcdFx0aGlnaCA9IG9TZWxlY3RPcHRpb24/LmhpZ2g7XG5cdFx0XHRcdG9wdGlvbiA9IG9TZWxlY3RPcHRpb24/Lm9wdGlvbjtcblx0XHRcdH1cblxuXHRcdFx0aWYgKG9wdGlvbiAmJiBzZW1hbnRpY0RhdGVzKSB7XG5cdFx0XHRcdHNlbGVjdGlvblZhcmlhbnQuYWRkU2VsZWN0T3B0aW9uKHNQYXRoID8gc1BhdGggOiBzRmlsdGVyTmFtZSwgc2lnbiwgb3B0aW9uLCBsb3csIGhpZ2gsIHVuZGVmaW5lZCwgc2VtYW50aWNEYXRlcyk7XG5cdFx0XHR9IGVsc2UgaWYgKG9wdGlvbikge1xuXHRcdFx0XHRzZWxlY3Rpb25WYXJpYW50LmFkZFNlbGVjdE9wdGlvbihzUGF0aCA/IHNQYXRoIDogc0ZpbHRlck5hbWUsIHNpZ24sIG9wdGlvbiwgbG93LCBoaWdoKTtcblx0XHRcdH1cblx0XHR9XG5cdH07XG5cblx0Zm9yIChzRmlsdGVyIGluIG9GaWx0ZXJDb25kaXRpb25zKSB7XG5cdFx0Ly8gb25seSBhZGQgdGhlIGZpbHRlciB2YWx1ZXMgaWYgaXQgaXMgbm90IGFscmVhZHkgcHJlc2VudCBpbiB0aGUgU1YgYWxyZWFkeVxuXHRcdGlmICghb1NlbGVjdGlvblZhcmlhbnQuZ2V0U2VsZWN0T3B0aW9uKHNGaWx0ZXIpKSB7XG5cdFx0XHQvLyBUT0RPIDogY3VzdG9tIGZpbHRlcnMgc2hvdWxkIGJlIGlnbm9yZWQgbW9yZSBnZW5lcmljYWxseVxuXHRcdFx0aWYgKHNGaWx0ZXIgPT09IFwiJGVkaXRTdGF0ZVwiKSB7XG5cdFx0XHRcdGNvbnRpbnVlO1xuXHRcdFx0fVxuXHRcdFx0YWRkRmlsdGVyc1RvU2VsZWN0aW9uVmFyaWFudChvU2VsZWN0aW9uVmFyaWFudCwgc0ZpbHRlcik7XG5cdFx0fSBlbHNlIHtcblx0XHRcdGlmIChvVGFibGVQcm9wZXJ0aWVzV2l0aG91dENvbmZsaWN0ICYmIHNGaWx0ZXIgaW4gb1RhYmxlUHJvcGVydGllc1dpdGhvdXRDb25mbGljdCkge1xuXHRcdFx0XHRhZGRGaWx0ZXJzVG9TZWxlY3Rpb25WYXJpYW50KG9TZWxlY3Rpb25WYXJpYW50LCBzRmlsdGVyLCBvVGFibGVQcm9wZXJ0aWVzV2l0aG91dENvbmZsaWN0W3NGaWx0ZXJdKTtcblx0XHRcdH1cblx0XHRcdC8vIGlmIHByb3BlcnR5IHdhcyB3aXRob3V0IGNvbmZsaWN0IGluIHBhZ2UgY29udGV4dCB0aGVuIGFkZCBwYXRoIGZyb20gcGFnZSBjb250ZXh0IHRvIFNWXG5cdFx0XHRpZiAoc0ZpbHRlciBpbiBvRmlsdGVyc1dpdGhvdXRDb25mbGljdCkge1xuXHRcdFx0XHRhZGRGaWx0ZXJzVG9TZWxlY3Rpb25WYXJpYW50KG9TZWxlY3Rpb25WYXJpYW50LCBzRmlsdGVyLCBvRmlsdGVyc1dpdGhvdXRDb25mbGljdFtzRmlsdGVyXSk7XG5cdFx0XHR9XG5cdFx0fVxuXHR9XG5cdHJldHVybiBvU2VsZWN0aW9uVmFyaWFudDtcbn1cblxuZnVuY3Rpb24gaXNTdGlja3lFZGl0TW9kZShvQ29udHJvbDogQ29udHJvbCkge1xuXHRjb25zdCBiSXNTdGlja3lNb2RlID0gTW9kZWxIZWxwZXIuaXNTdGlja3lTZXNzaW9uU3VwcG9ydGVkKChvQ29udHJvbC5nZXRNb2RlbCgpIGFzIE9EYXRhTW9kZWwpLmdldE1ldGFNb2RlbCgpKTtcblx0Y29uc3QgYlVJRWRpdGFibGUgPSBvQ29udHJvbC5nZXRNb2RlbChcInVpXCIpLmdldFByb3BlcnR5KFwiL2lzRWRpdGFibGVcIik7XG5cdHJldHVybiBiSXNTdGlja3lNb2RlICYmIGJVSUVkaXRhYmxlO1xufVxuXG4vKipcbiAqIEBwYXJhbSBhTWFuZGF0b3J5RmlsdGVyRmllbGRzXG4gKiBAcGFyYW0gb1NlbGVjdGlvblZhcmlhbnRcbiAqIEBwYXJhbSBvU2VsZWN0aW9uVmFyaWFudERlZmF1bHRzXG4gKi9cbmZ1bmN0aW9uIGFkZERlZmF1bHREaXNwbGF5Q3VycmVuY3koXG5cdGFNYW5kYXRvcnlGaWx0ZXJGaWVsZHM6IEV4cGFuZFBhdGhUeXBlPEVkbS5Qcm9wZXJ0eVBhdGg+W10sXG5cdG9TZWxlY3Rpb25WYXJpYW50OiBTZWxlY3Rpb25WYXJpYW50LFxuXHRvU2VsZWN0aW9uVmFyaWFudERlZmF1bHRzOiBTZWxlY3Rpb25WYXJpYW50XG4pIHtcblx0aWYgKG9TZWxlY3Rpb25WYXJpYW50ICYmIGFNYW5kYXRvcnlGaWx0ZXJGaWVsZHMgJiYgYU1hbmRhdG9yeUZpbHRlckZpZWxkcy5sZW5ndGgpIHtcblx0XHRmb3IgKGxldCBpID0gMDsgaSA8IGFNYW5kYXRvcnlGaWx0ZXJGaWVsZHMubGVuZ3RoOyBpKyspIHtcblx0XHRcdGNvbnN0IGFTVk9wdGlvbiA9IG9TZWxlY3Rpb25WYXJpYW50LmdldFNlbGVjdE9wdGlvbihcIkRpc3BsYXlDdXJyZW5jeVwiKSxcblx0XHRcdFx0YURlZmF1bHRTVk9wdGlvbiA9IG9TZWxlY3Rpb25WYXJpYW50RGVmYXVsdHMgJiYgb1NlbGVjdGlvblZhcmlhbnREZWZhdWx0cy5nZXRTZWxlY3RPcHRpb24oXCJEaXNwbGF5Q3VycmVuY3lcIik7XG5cdFx0XHRpZiAoXG5cdFx0XHRcdGFNYW5kYXRvcnlGaWx0ZXJGaWVsZHNbaV0uJFByb3BlcnR5UGF0aCA9PT0gXCJEaXNwbGF5Q3VycmVuY3lcIiAmJlxuXHRcdFx0XHQoIWFTVk9wdGlvbiB8fCAhYVNWT3B0aW9uLmxlbmd0aCkgJiZcblx0XHRcdFx0YURlZmF1bHRTVk9wdGlvbiAmJlxuXHRcdFx0XHRhRGVmYXVsdFNWT3B0aW9uLmxlbmd0aFxuXHRcdFx0KSB7XG5cdFx0XHRcdGNvbnN0IGRpc3BsYXlDdXJyZW5jeVNlbGVjdE9wdGlvbiA9IGFEZWZhdWx0U1ZPcHRpb25bMF07XG5cdFx0XHRcdGNvbnN0IHNTaWduID0gZGlzcGxheUN1cnJlbmN5U2VsZWN0T3B0aW9uW1wiU2lnblwiXTtcblx0XHRcdFx0Y29uc3Qgc09wdGlvbiA9IGRpc3BsYXlDdXJyZW5jeVNlbGVjdE9wdGlvbltcIk9wdGlvblwiXTtcblx0XHRcdFx0Y29uc3Qgc0xvdyA9IGRpc3BsYXlDdXJyZW5jeVNlbGVjdE9wdGlvbltcIkxvd1wiXTtcblx0XHRcdFx0Y29uc3Qgc0hpZ2ggPSBkaXNwbGF5Q3VycmVuY3lTZWxlY3RPcHRpb25bXCJIaWdoXCJdO1xuXHRcdFx0XHRvU2VsZWN0aW9uVmFyaWFudC5hZGRTZWxlY3RPcHRpb24oXCJEaXNwbGF5Q3VycmVuY3lcIiwgc1NpZ24sIHNPcHRpb24sIHNMb3csIHNIaWdoKTtcblx0XHRcdH1cblx0XHR9XG5cdH1cbn1cblxudHlwZSBVc2VyRGVmYXVsdFBhcmFtZXRlciA9IHtcblx0JE5hbWU6IHN0cmluZztcblx0Z2V0UGF0aD8oKTogc3RyaW5nO1xufTtcbmFzeW5jIGZ1bmN0aW9uIHNldFVzZXJEZWZhdWx0cyhcblx0b0FwcENvbXBvbmVudDogQXBwQ29tcG9uZW50LFxuXHRhUGFyYW1ldGVyczogVXNlckRlZmF1bHRQYXJhbWV0ZXJbXSxcblx0b01vZGVsOiBKU09OTW9kZWwgfCBPRGF0YVY0Q29udGV4dCxcblx0YklzQWN0aW9uOiBib29sZWFuLFxuXHRiSXNDcmVhdGU/OiBib29sZWFuLFxuXHRvQWN0aW9uRGVmYXVsdFZhbHVlcz86IFJlY29yZDxzdHJpbmcsIHN0cmluZz5cbikge1xuXHRyZXR1cm4gbmV3IFByb21pc2UoZnVuY3Rpb24gKHJlc29sdmU6IEZ1bmN0aW9uKSB7XG5cdFx0Y29uc3Qgb0NvbXBvbmVudERhdGEgPSBvQXBwQ29tcG9uZW50LmdldENvbXBvbmVudERhdGEoKSxcblx0XHRcdG9TdGFydHVwUGFyYW1ldGVycyA9IChvQ29tcG9uZW50RGF0YSAmJiBvQ29tcG9uZW50RGF0YS5zdGFydHVwUGFyYW1ldGVycykgfHwge30sXG5cdFx0XHRvU2hlbGxTZXJ2aWNlcyA9IG9BcHBDb21wb25lbnQuZ2V0U2hlbGxTZXJ2aWNlcygpO1xuXHRcdGlmICghb1NoZWxsU2VydmljZXMuaGFzVVNoZWxsKCkpIHtcblx0XHRcdGFQYXJhbWV0ZXJzLmZvckVhY2goZnVuY3Rpb24gKG9QYXJhbWV0ZXIpIHtcblx0XHRcdFx0Y29uc3Qgc1Byb3BlcnR5TmFtZSA9IGJJc0FjdGlvblxuXHRcdFx0XHRcdD8gYC8ke29QYXJhbWV0ZXIuJE5hbWV9YFxuXHRcdFx0XHRcdDogKG9QYXJhbWV0ZXIuZ2V0UGF0aD8uKCkuc2xpY2Uob1BhcmFtZXRlci5nZXRQYXRoKCkubGFzdEluZGV4T2YoXCIvXCIpICsgMSkgYXMgc3RyaW5nKTtcblx0XHRcdFx0Y29uc3Qgc1BhcmFtZXRlck5hbWUgPSBiSXNBY3Rpb24gPyBzUHJvcGVydHlOYW1lLnNsaWNlKDEpIDogc1Byb3BlcnR5TmFtZTtcblx0XHRcdFx0aWYgKG9BY3Rpb25EZWZhdWx0VmFsdWVzICYmIGJJc0NyZWF0ZSkge1xuXHRcdFx0XHRcdGlmIChvQWN0aW9uRGVmYXVsdFZhbHVlc1tzUGFyYW1ldGVyTmFtZV0pIHtcblx0XHRcdFx0XHRcdG9Nb2RlbC5zZXRQcm9wZXJ0eShzUHJvcGVydHlOYW1lLCBvQWN0aW9uRGVmYXVsdFZhbHVlc1tzUGFyYW1ldGVyTmFtZV0pO1xuXHRcdFx0XHRcdH1cblx0XHRcdFx0fSBlbHNlIGlmIChvU3RhcnR1cFBhcmFtZXRlcnNbc1BhcmFtZXRlck5hbWVdKSB7XG5cdFx0XHRcdFx0b01vZGVsLnNldFByb3BlcnR5KHNQcm9wZXJ0eU5hbWUsIG9TdGFydHVwUGFyYW1ldGVyc1tzUGFyYW1ldGVyTmFtZV1bMF0pO1xuXHRcdFx0XHR9XG5cdFx0XHR9KTtcblx0XHRcdHJldHVybiByZXNvbHZlKHRydWUpO1xuXHRcdH1cblx0XHRyZXR1cm4gb1NoZWxsU2VydmljZXMuZ2V0U3RhcnR1cEFwcFN0YXRlKG9BcHBDb21wb25lbnQpLnRoZW4oZnVuY3Rpb24gKG9TdGFydHVwQXBwU3RhdGUpIHtcblx0XHRcdGNvbnN0IG9EYXRhID0gb1N0YXJ0dXBBcHBTdGF0ZT8uZ2V0RGF0YSgpIHx8IHt9LFxuXHRcdFx0XHRhRXh0ZW5kZWRQYXJhbWV0ZXJzID0gKG9EYXRhLnNlbGVjdGlvblZhcmlhbnQgJiYgb0RhdGEuc2VsZWN0aW9uVmFyaWFudC5TZWxlY3RPcHRpb25zKSB8fCBbXTtcblx0XHRcdGFQYXJhbWV0ZXJzLmZvckVhY2goZnVuY3Rpb24gKG9QYXJhbWV0ZXIpIHtcblx0XHRcdFx0Y29uc3Qgc1Byb3BlcnR5TmFtZSA9IGJJc0FjdGlvblxuXHRcdFx0XHRcdD8gYC8ke29QYXJhbWV0ZXIuJE5hbWV9YFxuXHRcdFx0XHRcdDogKG9QYXJhbWV0ZXIuZ2V0UGF0aD8uKCkuc2xpY2Uob1BhcmFtZXRlci5nZXRQYXRoKCkubGFzdEluZGV4T2YoXCIvXCIpICsgMSkgYXMgc3RyaW5nKTtcblx0XHRcdFx0Y29uc3Qgc1BhcmFtZXRlck5hbWUgPSBiSXNBY3Rpb24gPyBzUHJvcGVydHlOYW1lLnNsaWNlKDEpIDogc1Byb3BlcnR5TmFtZTtcblx0XHRcdFx0aWYgKG9BY3Rpb25EZWZhdWx0VmFsdWVzICYmIGJJc0NyZWF0ZSkge1xuXHRcdFx0XHRcdGlmIChvQWN0aW9uRGVmYXVsdFZhbHVlc1tzUGFyYW1ldGVyTmFtZV0pIHtcblx0XHRcdFx0XHRcdG9Nb2RlbC5zZXRQcm9wZXJ0eShzUHJvcGVydHlOYW1lLCBvQWN0aW9uRGVmYXVsdFZhbHVlc1tzUGFyYW1ldGVyTmFtZV0pO1xuXHRcdFx0XHRcdH1cblx0XHRcdFx0fSBlbHNlIGlmIChvU3RhcnR1cFBhcmFtZXRlcnNbc1BhcmFtZXRlck5hbWVdKSB7XG5cdFx0XHRcdFx0b01vZGVsLnNldFByb3BlcnR5KHNQcm9wZXJ0eU5hbWUsIG9TdGFydHVwUGFyYW1ldGVyc1tzUGFyYW1ldGVyTmFtZV1bMF0pO1xuXHRcdFx0XHR9IGVsc2UgaWYgKGFFeHRlbmRlZFBhcmFtZXRlcnMubGVuZ3RoID4gMCkge1xuXHRcdFx0XHRcdGZvciAoY29uc3Qgb0V4dGVuZGVkUGFyYW1ldGVyIG9mIGFFeHRlbmRlZFBhcmFtZXRlcnMpIHtcblx0XHRcdFx0XHRcdGlmIChvRXh0ZW5kZWRQYXJhbWV0ZXIuUHJvcGVydHlOYW1lID09PSBzUGFyYW1ldGVyTmFtZSkge1xuXHRcdFx0XHRcdFx0XHRjb25zdCBvUmFuZ2UgPSBvRXh0ZW5kZWRQYXJhbWV0ZXIuUmFuZ2VzLmxlbmd0aFxuXHRcdFx0XHRcdFx0XHRcdD8gb0V4dGVuZGVkUGFyYW1ldGVyLlJhbmdlc1tvRXh0ZW5kZWRQYXJhbWV0ZXIuUmFuZ2VzLmxlbmd0aCAtIDFdXG5cdFx0XHRcdFx0XHRcdFx0OiB1bmRlZmluZWQ7XG5cdFx0XHRcdFx0XHRcdGlmIChvUmFuZ2UgJiYgb1JhbmdlLlNpZ24gPT09IFwiSVwiICYmIG9SYW5nZS5PcHRpb24gPT09IFwiRVFcIikge1xuXHRcdFx0XHRcdFx0XHRcdG9Nb2RlbC5zZXRQcm9wZXJ0eShzUHJvcGVydHlOYW1lLCBvUmFuZ2UuTG93KTsgLy8gaGlnaCBpcyBpZ25vcmVkIHdoZW4gT3B0aW9uPUVRXG5cdFx0XHRcdFx0XHRcdH1cblx0XHRcdFx0XHRcdH1cblx0XHRcdFx0XHR9XG5cdFx0XHRcdH1cblx0XHRcdH0pO1xuXHRcdFx0cmV0dXJuIHJlc29sdmUodHJ1ZSk7XG5cdFx0fSk7XG5cdH0pO1xufVxuZXhwb3J0IHR5cGUgSW5ib3VuZFBhcmFtZXRlciA9IHtcblx0dXNlRm9yQ3JlYXRlOiBib29sZWFuO1xufTtcbmZ1bmN0aW9uIGdldEFkZGl0aW9uYWxQYXJhbXNGb3JDcmVhdGUoXG5cdG9TdGFydHVwUGFyYW1ldGVyczogUmVjb3JkPHN0cmluZywgdW5rbm93bltdPixcblx0b0luYm91bmRQYXJhbWV0ZXJzPzogUmVjb3JkPHN0cmluZywgSW5ib3VuZFBhcmFtZXRlcj5cbikge1xuXHRjb25zdCBvSW5ib3VuZHMgPSBvSW5ib3VuZFBhcmFtZXRlcnMsXG5cdFx0YUNyZWF0ZVBhcmFtZXRlcnMgPVxuXHRcdFx0b0luYm91bmRzICE9PSB1bmRlZmluZWRcblx0XHRcdFx0PyBPYmplY3Qua2V5cyhvSW5ib3VuZHMpLmZpbHRlcihmdW5jdGlvbiAoc1BhcmFtZXRlcjogc3RyaW5nKSB7XG5cdFx0XHRcdFx0XHRyZXR1cm4gb0luYm91bmRzW3NQYXJhbWV0ZXJdLnVzZUZvckNyZWF0ZTtcblx0XHRcdFx0ICB9KVxuXHRcdFx0XHQ6IFtdO1xuXHRsZXQgb1JldDtcblx0Zm9yIChsZXQgaSA9IDA7IGkgPCBhQ3JlYXRlUGFyYW1ldGVycy5sZW5ndGg7IGkrKykge1xuXHRcdGNvbnN0IHNDcmVhdGVQYXJhbWV0ZXIgPSBhQ3JlYXRlUGFyYW1ldGVyc1tpXTtcblx0XHRjb25zdCBhVmFsdWVzID0gb1N0YXJ0dXBQYXJhbWV0ZXJzICYmIG9TdGFydHVwUGFyYW1ldGVyc1tzQ3JlYXRlUGFyYW1ldGVyXTtcblx0XHRpZiAoYVZhbHVlcyAmJiBhVmFsdWVzLmxlbmd0aCA9PT0gMSkge1xuXHRcdFx0b1JldCA9IG9SZXQgfHwgT2JqZWN0LmNyZWF0ZShudWxsKTtcblx0XHRcdG9SZXRbc0NyZWF0ZVBhcmFtZXRlcl0gPSBhVmFsdWVzWzBdO1xuXHRcdH1cblx0fVxuXHRyZXR1cm4gb1JldDtcbn1cbnR5cGUgT3V0Ym91bmRQYXJhbWV0ZXIgPSB7XG5cdHBhcmFtZXRlcnM6IFJlY29yZDxzdHJpbmcsIE91dGJvdW5kUGFyYW1ldGVyVmFsdWU+O1xuXHRzZW1hbnRpY09iamVjdD86IHN0cmluZztcblx0YWN0aW9uPzogc3RyaW5nO1xufTtcbnR5cGUgT3V0Ym91bmRQYXJhbWV0ZXJWYWx1ZSA9IHtcblx0dmFsdWU/OiB7XG5cdFx0dmFsdWU/OiBzdHJpbmc7XG5cdFx0Zm9ybWF0Pzogc3RyaW5nO1xuXHR9O1xufTtcbmZ1bmN0aW9uIGdldFNlbWFudGljT2JqZWN0TWFwcGluZyhvT3V0Ym91bmQ6IE91dGJvdW5kUGFyYW1ldGVyKSB7XG5cdGNvbnN0IGFTZW1hbnRpY09iamVjdE1hcHBpbmc6IE1ldGFNb2RlbFR5cGU8U2VtYW50aWNPYmplY3RNYXBwaW5nVHlwZT5bXSA9IFtdO1xuXHRpZiAob091dGJvdW5kLnBhcmFtZXRlcnMpIHtcblx0XHRjb25zdCBhUGFyYW1ldGVycyA9IE9iamVjdC5rZXlzKG9PdXRib3VuZC5wYXJhbWV0ZXJzKSB8fCBbXTtcblx0XHRpZiAoYVBhcmFtZXRlcnMubGVuZ3RoID4gMCkge1xuXHRcdFx0YVBhcmFtZXRlcnMuZm9yRWFjaChmdW5jdGlvbiAoc1BhcmFtOiBzdHJpbmcpIHtcblx0XHRcdFx0Y29uc3Qgb01hcHBpbmcgPSBvT3V0Ym91bmQucGFyYW1ldGVyc1tzUGFyYW1dO1xuXHRcdFx0XHRpZiAob01hcHBpbmcudmFsdWUgJiYgb01hcHBpbmcudmFsdWUudmFsdWUgJiYgb01hcHBpbmcudmFsdWUuZm9ybWF0ID09PSBcImJpbmRpbmdcIikge1xuXHRcdFx0XHRcdC8vIHVzaW5nIHRoZSBmb3JtYXQgb2YgVUkuTWFwcGluZ1xuXHRcdFx0XHRcdGNvbnN0IG9TZW1hbnRpY01hcHBpbmcgPSB7XG5cdFx0XHRcdFx0XHRMb2NhbFByb3BlcnR5OiB7XG5cdFx0XHRcdFx0XHRcdCRQcm9wZXJ0eVBhdGg6IG9NYXBwaW5nLnZhbHVlLnZhbHVlXG5cdFx0XHRcdFx0XHR9LFxuXHRcdFx0XHRcdFx0U2VtYW50aWNPYmplY3RQcm9wZXJ0eTogc1BhcmFtXG5cdFx0XHRcdFx0fTtcblxuXHRcdFx0XHRcdGlmIChhU2VtYW50aWNPYmplY3RNYXBwaW5nLmxlbmd0aCA+IDApIHtcblx0XHRcdFx0XHRcdC8vIFRvIGNoZWNrIGlmIHRoZSBzZW1hbnRpY09iamVjdCBNYXBwaW5nIGlzIGRvbmUgZm9yIHRoZSBzYW1lIGxvY2FsIHByb3BlcnR5IG1vcmUgdGhhdCBvbmNlIHRoZW4gZmlyc3Qgb25lIHdpbGwgYmUgY29uc2lkZXJlZFxuXHRcdFx0XHRcdFx0Zm9yIChsZXQgaSA9IDA7IGkgPCBhU2VtYW50aWNPYmplY3RNYXBwaW5nLmxlbmd0aDsgaSsrKSB7XG5cdFx0XHRcdFx0XHRcdGlmIChhU2VtYW50aWNPYmplY3RNYXBwaW5nW2ldLkxvY2FsUHJvcGVydHk/LiRQcm9wZXJ0eVBhdGggIT09IG9TZW1hbnRpY01hcHBpbmcuTG9jYWxQcm9wZXJ0eS4kUHJvcGVydHlQYXRoKSB7XG5cdFx0XHRcdFx0XHRcdFx0YVNlbWFudGljT2JqZWN0TWFwcGluZy5wdXNoKG9TZW1hbnRpY01hcHBpbmcpO1xuXHRcdFx0XHRcdFx0XHR9XG5cdFx0XHRcdFx0XHR9XG5cdFx0XHRcdFx0fSBlbHNlIHtcblx0XHRcdFx0XHRcdGFTZW1hbnRpY09iamVjdE1hcHBpbmcucHVzaChvU2VtYW50aWNNYXBwaW5nKTtcblx0XHRcdFx0XHR9XG5cdFx0XHRcdH1cblx0XHRcdH0pO1xuXHRcdH1cblx0fVxuXHRyZXR1cm4gYVNlbWFudGljT2JqZWN0TWFwcGluZztcbn1cblxuZnVuY3Rpb24gZ2V0SGVhZGVyRmFjZXRJdGVtQ29uZmlnRm9yRXh0ZXJuYWxOYXZpZ2F0aW9uKG9WaWV3RGF0YTogVmlld0RhdGEsIG9Dcm9zc05hdjogUmVjb3JkPHN0cmluZywgT3V0Ym91bmRQYXJhbWV0ZXI+KSB7XG5cdGNvbnN0IG9IZWFkZXJGYWNldEl0ZW1zOiBSZWNvcmQ8XG5cdFx0c3RyaW5nLFxuXHRcdHtcblx0XHRcdHNlbWFudGljT2JqZWN0OiBzdHJpbmc7XG5cdFx0XHRhY3Rpb246IHN0cmluZztcblx0XHRcdHNlbWFudGljT2JqZWN0TWFwcGluZzogTWV0YU1vZGVsVHlwZTxTZW1hbnRpY09iamVjdE1hcHBpbmdUeXBlPltdO1xuXHRcdH1cblx0PiA9IHt9O1xuXHRsZXQgc0lkO1xuXHRjb25zdCBvQ29udHJvbENvbmZpZyA9IG9WaWV3RGF0YS5jb250cm9sQ29uZmlndXJhdGlvbiBhcyBSZWNvcmQ8XG5cdFx0c3RyaW5nLFxuXHRcdHtcblx0XHRcdG5hdmlnYXRpb24/OiB7XG5cdFx0XHRcdHRhcmdldE91dGJvdW5kPzoge1xuXHRcdFx0XHRcdG91dGJvdW5kOiBzdHJpbmc7XG5cdFx0XHRcdH07XG5cdFx0XHR9O1xuXHRcdH1cblx0Pjtcblx0Zm9yIChjb25zdCBjb25maWcgaW4gb0NvbnRyb2xDb25maWcpIHtcblx0XHRpZiAoY29uZmlnLmluZGV4T2YoXCJAY29tLnNhcC52b2NhYnVsYXJpZXMuVUkudjEuRGF0YVBvaW50XCIpID4gLTEgfHwgY29uZmlnLmluZGV4T2YoXCJAY29tLnNhcC52b2NhYnVsYXJpZXMuVUkudjEuQ2hhcnRcIikgPiAtMSkge1xuXHRcdFx0Y29uc3Qgc091dGJvdW5kID0gb0NvbnRyb2xDb25maWdbY29uZmlnXS5uYXZpZ2F0aW9uPy50YXJnZXRPdXRib3VuZD8ub3V0Ym91bmQ7XG5cdFx0XHRpZiAoc091dGJvdW5kICE9PSB1bmRlZmluZWQpIHtcblx0XHRcdFx0Y29uc3Qgb091dGJvdW5kID0gb0Nyb3NzTmF2W3NPdXRib3VuZF07XG5cdFx0XHRcdGlmIChvT3V0Ym91bmQuc2VtYW50aWNPYmplY3QgJiYgb091dGJvdW5kLmFjdGlvbikge1xuXHRcdFx0XHRcdGlmIChjb25maWcuaW5kZXhPZihcIkNoYXJ0XCIpID4gLTEpIHtcblx0XHRcdFx0XHRcdHNJZCA9IGdlbmVyYXRlKFtcImZlXCIsIFwiTWljcm9DaGFydExpbmtcIiwgY29uZmlnXSk7XG5cdFx0XHRcdFx0fSBlbHNlIHtcblx0XHRcdFx0XHRcdHNJZCA9IGdlbmVyYXRlKFtcImZlXCIsIFwiSGVhZGVyRFBMaW5rXCIsIGNvbmZpZ10pO1xuXHRcdFx0XHRcdH1cblx0XHRcdFx0XHRjb25zdCBhU2VtYW50aWNPYmplY3RNYXBwaW5nID0gQ29tbW9uVXRpbHMuZ2V0U2VtYW50aWNPYmplY3RNYXBwaW5nKG9PdXRib3VuZCk7XG5cdFx0XHRcdFx0b0hlYWRlckZhY2V0SXRlbXNbc0lkXSA9IHtcblx0XHRcdFx0XHRcdHNlbWFudGljT2JqZWN0OiBvT3V0Ym91bmQuc2VtYW50aWNPYmplY3QsXG5cdFx0XHRcdFx0XHRhY3Rpb246IG9PdXRib3VuZC5hY3Rpb24sXG5cdFx0XHRcdFx0XHRzZW1hbnRpY09iamVjdE1hcHBpbmc6IGFTZW1hbnRpY09iamVjdE1hcHBpbmdcblx0XHRcdFx0XHR9O1xuXHRcdFx0XHR9IGVsc2Uge1xuXHRcdFx0XHRcdExvZy5lcnJvcihgQ3Jvc3MgbmF2aWdhdGlvbiBvdXRib3VuZCBpcyBjb25maWd1cmVkIHdpdGhvdXQgc2VtYW50aWMgb2JqZWN0IGFuZCBhY3Rpb24gZm9yICR7c091dGJvdW5kfWApO1xuXHRcdFx0XHR9XG5cdFx0XHR9XG5cdFx0fVxuXHR9XG5cdHJldHVybiBvSGVhZGVyRmFjZXRJdGVtcztcbn1cblxuZnVuY3Rpb24gc2V0U2VtYW50aWNPYmplY3RNYXBwaW5ncyhvU2VsZWN0aW9uVmFyaWFudDogU2VsZWN0aW9uVmFyaWFudCwgdk1hcHBpbmdzOiB1bmtub3duKSB7XG5cdGNvbnN0IG9NYXBwaW5ncyA9IHR5cGVvZiB2TWFwcGluZ3MgPT09IFwic3RyaW5nXCIgPyBKU09OLnBhcnNlKHZNYXBwaW5ncykgOiB2TWFwcGluZ3M7XG5cdGZvciAobGV0IGkgPSAwOyBpIDwgb01hcHBpbmdzLmxlbmd0aDsgaSsrKSB7XG5cdFx0Y29uc3Qgc0xvY2FsUHJvcGVydHkgPVxuXHRcdFx0KG9NYXBwaW5nc1tpXVtcIkxvY2FsUHJvcGVydHlcIl0gJiYgb01hcHBpbmdzW2ldW1wiTG9jYWxQcm9wZXJ0eVwiXVtcIiRQcm9wZXJ0eVBhdGhcIl0pIHx8XG5cdFx0XHQob01hcHBpbmdzW2ldW1wiQGNvbS5zYXAudm9jYWJ1bGFyaWVzLkNvbW1vbi52MS5Mb2NhbFByb3BlcnR5XCJdICYmXG5cdFx0XHRcdG9NYXBwaW5nc1tpXVtcIkBjb20uc2FwLnZvY2FidWxhcmllcy5Db21tb24udjEuTG9jYWxQcm9wZXJ0eVwiXVtcIiRQYXRoXCJdKTtcblx0XHRjb25zdCBzU2VtYW50aWNPYmplY3RQcm9wZXJ0eSA9XG5cdFx0XHRvTWFwcGluZ3NbaV1bXCJTZW1hbnRpY09iamVjdFByb3BlcnR5XCJdIHx8IG9NYXBwaW5nc1tpXVtcIkBjb20uc2FwLnZvY2FidWxhcmllcy5Db21tb24udjEuU2VtYW50aWNPYmplY3RQcm9wZXJ0eVwiXTtcblx0XHRjb25zdCBvU2VsZWN0T3B0aW9uID0gb1NlbGVjdGlvblZhcmlhbnQuZ2V0U2VsZWN0T3B0aW9uKHNMb2NhbFByb3BlcnR5KTtcblx0XHRpZiAob1NlbGVjdE9wdGlvbikge1xuXHRcdFx0Ly9DcmVhdGUgYSBuZXcgU2VsZWN0T3B0aW9uIHdpdGggc1NlbWFudGljT2JqZWN0UHJvcGVydHkgYXMgdGhlIHByb3BlcnR5IE5hbWUgYW5kIHJlbW92ZSB0aGUgb2xkZXIgb25lXG5cdFx0XHRvU2VsZWN0aW9uVmFyaWFudC5yZW1vdmVTZWxlY3RPcHRpb24oc0xvY2FsUHJvcGVydHkpO1xuXHRcdFx0b1NlbGVjdGlvblZhcmlhbnQubWFzc0FkZFNlbGVjdE9wdGlvbihzU2VtYW50aWNPYmplY3RQcm9wZXJ0eSwgb1NlbGVjdE9wdGlvbik7XG5cdFx0fVxuXHR9XG5cdHJldHVybiBvU2VsZWN0aW9uVmFyaWFudDtcbn1cblxudHlwZSBTZW1hbnRpY09iamVjdEZyb21QYXRoID0ge1xuXHRzZW1hbnRpY09iamVjdFBhdGg6IHN0cmluZztcblx0c2VtYW50aWNPYmplY3RGb3JHZXRMaW5rczogeyBzZW1hbnRpY09iamVjdDogc3RyaW5nIH1bXTtcblx0c2VtYW50aWNPYmplY3Q6IHtcblx0XHRzZW1hbnRpY09iamVjdDogeyAkUGF0aDogc3RyaW5nIH07XG5cdH07XG5cdHVuYXZhaWxhYmxlQWN0aW9uczogc3RyaW5nW107XG59O1xuYXN5bmMgZnVuY3Rpb24gZm5HZXRTZW1hbnRpY09iamVjdHNGcm9tUGF0aChvTWV0YU1vZGVsOiBPRGF0YU1ldGFNb2RlbCwgc1BhdGg6IHN0cmluZywgc1F1YWxpZmllcjogc3RyaW5nKSB7XG5cdHJldHVybiBuZXcgUHJvbWlzZTxTZW1hbnRpY09iamVjdEZyb21QYXRoPihmdW5jdGlvbiAocmVzb2x2ZSkge1xuXHRcdGxldCBzU2VtYW50aWNPYmplY3QsIGFTZW1hbnRpY09iamVjdFVuYXZhaWxhYmxlQWN0aW9ucztcblx0XHRpZiAoc1F1YWxpZmllciA9PT0gXCJcIikge1xuXHRcdFx0c1NlbWFudGljT2JqZWN0ID0gb01ldGFNb2RlbC5nZXRPYmplY3QoYCR7c1BhdGh9QCR7Q29tbW9uQW5ub3RhdGlvblRlcm1zLlNlbWFudGljT2JqZWN0fWApO1xuXHRcdFx0YVNlbWFudGljT2JqZWN0VW5hdmFpbGFibGVBY3Rpb25zID0gb01ldGFNb2RlbC5nZXRPYmplY3QoYCR7c1BhdGh9QCR7Q29tbW9uQW5ub3RhdGlvblRlcm1zLlNlbWFudGljT2JqZWN0VW5hdmFpbGFibGVBY3Rpb25zfWApO1xuXHRcdH0gZWxzZSB7XG5cdFx0XHRzU2VtYW50aWNPYmplY3QgPSBvTWV0YU1vZGVsLmdldE9iamVjdChgJHtzUGF0aH1AJHtDb21tb25Bbm5vdGF0aW9uVGVybXMuU2VtYW50aWNPYmplY3R9IyR7c1F1YWxpZmllcn1gKTtcblx0XHRcdGFTZW1hbnRpY09iamVjdFVuYXZhaWxhYmxlQWN0aW9ucyA9IG9NZXRhTW9kZWwuZ2V0T2JqZWN0KFxuXHRcdFx0XHRgJHtzUGF0aH1AJHtDb21tb25Bbm5vdGF0aW9uVGVybXMuU2VtYW50aWNPYmplY3RVbmF2YWlsYWJsZUFjdGlvbnN9IyR7c1F1YWxpZmllcn1gXG5cdFx0XHQpO1xuXHRcdH1cblxuXHRcdGNvbnN0IGFTZW1hbnRpY09iamVjdEZvckdldExpbmtzID0gW3sgc2VtYW50aWNPYmplY3Q6IHNTZW1hbnRpY09iamVjdCB9XTtcblx0XHRjb25zdCBvU2VtYW50aWNPYmplY3QgPSB7XG5cdFx0XHRzZW1hbnRpY09iamVjdDogc1NlbWFudGljT2JqZWN0XG5cdFx0fTtcblx0XHRyZXNvbHZlKHtcblx0XHRcdHNlbWFudGljT2JqZWN0UGF0aDogc1BhdGgsXG5cdFx0XHRzZW1hbnRpY09iamVjdEZvckdldExpbmtzOiBhU2VtYW50aWNPYmplY3RGb3JHZXRMaW5rcyxcblx0XHRcdHNlbWFudGljT2JqZWN0OiBvU2VtYW50aWNPYmplY3QsXG5cdFx0XHR1bmF2YWlsYWJsZUFjdGlvbnM6IGFTZW1hbnRpY09iamVjdFVuYXZhaWxhYmxlQWN0aW9uc1xuXHRcdH0pO1xuXHR9KTtcbn1cblxuYXN5bmMgZnVuY3Rpb24gZm5VcGRhdGVTZW1hbnRpY1RhcmdldHNNb2RlbChcblx0YUdldExpbmtzUHJvbWlzZXM6IFByb21pc2U8TGlua0RlZmluaXRpb25bXVtdW10+W10sXG5cdGFTZW1hbnRpY09iamVjdHM6IFNlbWFudGljT2JqZWN0W10sXG5cdG9JbnRlcm5hbE1vZGVsQ29udGV4dDogSW50ZXJuYWxNb2RlbENvbnRleHQsXG5cdHNDdXJyZW50SGFzaDogc3RyaW5nXG4pIHtcblx0dHlwZSBTZW1hbnRpY09iamVjdEluZm8gPSB7IHNlbWFudGljT2JqZWN0OiBzdHJpbmc7IHBhdGg6IHN0cmluZzsgSGFzVGFyZ2V0czogYm9vbGVhbjsgSGFzVGFyZ2V0c05vdEZpbHRlcmVkOiBib29sZWFuIH07XG5cdHJldHVybiBQcm9taXNlLmFsbChhR2V0TGlua3NQcm9taXNlcylcblx0XHQudGhlbihmdW5jdGlvbiAoYVZhbHVlcykge1xuXHRcdFx0bGV0IGFMaW5rczogTGlua0RlZmluaXRpb25bXVtdW10sXG5cdFx0XHRcdF9vTGluayxcblx0XHRcdFx0X3NMaW5rSW50ZW50QWN0aW9uLFxuXHRcdFx0XHRhRmluYWxMaW5rczogTGlua0RlZmluaXRpb25bXVtdID0gW107XG5cdFx0XHRsZXQgb0ZpbmFsU2VtYW50aWNPYmplY3RzOiBSZWNvcmQ8c3RyaW5nLCBTZW1hbnRpY09iamVjdEluZm8+ID0ge307XG5cdFx0XHRjb25zdCBiSW50ZW50SGFzQWN0aW9ucyA9IGZ1bmN0aW9uIChzSW50ZW50OiBzdHJpbmcsIGFBY3Rpb25zPzogdW5rbm93bltdKSB7XG5cdFx0XHRcdGZvciAoY29uc3QgaW50ZW50IGluIGFBY3Rpb25zKSB7XG5cdFx0XHRcdFx0aWYgKGludGVudCA9PT0gc0ludGVudCkge1xuXHRcdFx0XHRcdFx0cmV0dXJuIHRydWU7XG5cdFx0XHRcdFx0fSBlbHNlIHtcblx0XHRcdFx0XHRcdHJldHVybiBmYWxzZTtcblx0XHRcdFx0XHR9XG5cdFx0XHRcdH1cblx0XHRcdH07XG5cblx0XHRcdGZvciAobGV0IGsgPSAwOyBrIDwgYVZhbHVlcy5sZW5ndGg7IGsrKykge1xuXHRcdFx0XHRhTGlua3MgPSBhVmFsdWVzW2tdO1xuXHRcdFx0XHRpZiAoYUxpbmtzICYmIGFMaW5rcy5sZW5ndGggPiAwICYmIGFMaW5rc1swXSAhPT0gdW5kZWZpbmVkKSB7XG5cdFx0XHRcdFx0Y29uc3Qgb1NlbWFudGljT2JqZWN0OiBSZWNvcmQ8c3RyaW5nLCBSZWNvcmQ8c3RyaW5nLCBTZW1hbnRpY09iamVjdEluZm8+PiA9IHt9O1xuXHRcdFx0XHRcdGxldCBvVG1wOiBTZW1hbnRpY09iamVjdEluZm87XG5cdFx0XHRcdFx0bGV0IHNBbHRlcm5hdGVQYXRoO1xuXHRcdFx0XHRcdGZvciAobGV0IGkgPSAwOyBpIDwgYUxpbmtzLmxlbmd0aDsgaSsrKSB7XG5cdFx0XHRcdFx0XHRhRmluYWxMaW5rcy5wdXNoKFtdKTtcblx0XHRcdFx0XHRcdGxldCBoYXNUYXJnZXRzTm90RmlsdGVyZWQgPSBmYWxzZTtcblx0XHRcdFx0XHRcdGxldCBoYXNUYXJnZXRzID0gZmFsc2U7XG5cdFx0XHRcdFx0XHRmb3IgKGxldCBpTGlua0NvdW50ID0gMDsgaUxpbmtDb3VudCA8IGFMaW5rc1tpXVswXS5sZW5ndGg7IGlMaW5rQ291bnQrKykge1xuXHRcdFx0XHRcdFx0XHRfb0xpbmsgPSBhTGlua3NbaV1bMF1baUxpbmtDb3VudF07XG5cdFx0XHRcdFx0XHRcdF9zTGlua0ludGVudEFjdGlvbiA9IF9vTGluayAmJiBfb0xpbmsuaW50ZW50LnNwbGl0KFwiP1wiKVswXS5zcGxpdChcIi1cIilbMV07XG5cblx0XHRcdFx0XHRcdFx0aWYgKCEoX29MaW5rICYmIF9vTGluay5pbnRlbnQgJiYgX29MaW5rLmludGVudC5pbmRleE9mKHNDdXJyZW50SGFzaCkgPT09IDApKSB7XG5cdFx0XHRcdFx0XHRcdFx0aGFzVGFyZ2V0c05vdEZpbHRlcmVkID0gdHJ1ZTtcblx0XHRcdFx0XHRcdFx0XHRpZiAoIWJJbnRlbnRIYXNBY3Rpb25zKF9zTGlua0ludGVudEFjdGlvbiwgYVNlbWFudGljT2JqZWN0c1trXS51bmF2YWlsYWJsZUFjdGlvbnMpKSB7XG5cdFx0XHRcdFx0XHRcdFx0XHRhRmluYWxMaW5rc1tpXS5wdXNoKF9vTGluayk7XG5cdFx0XHRcdFx0XHRcdFx0XHRoYXNUYXJnZXRzID0gdHJ1ZTtcblx0XHRcdFx0XHRcdFx0XHR9XG5cdFx0XHRcdFx0XHRcdH1cblx0XHRcdFx0XHRcdH1cblx0XHRcdFx0XHRcdG9UbXAgPSB7XG5cdFx0XHRcdFx0XHRcdHNlbWFudGljT2JqZWN0OiBhU2VtYW50aWNPYmplY3RzW2tdLnNlbWFudGljT2JqZWN0LFxuXHRcdFx0XHRcdFx0XHRwYXRoOiBhU2VtYW50aWNPYmplY3RzW2tdLnBhdGgsXG5cdFx0XHRcdFx0XHRcdEhhc1RhcmdldHM6IGhhc1RhcmdldHMsXG5cdFx0XHRcdFx0XHRcdEhhc1RhcmdldHNOb3RGaWx0ZXJlZDogaGFzVGFyZ2V0c05vdEZpbHRlcmVkXG5cdFx0XHRcdFx0XHR9O1xuXHRcdFx0XHRcdFx0aWYgKG9TZW1hbnRpY09iamVjdFthU2VtYW50aWNPYmplY3RzW2tdLnNlbWFudGljT2JqZWN0XSA9PT0gdW5kZWZpbmVkKSB7XG5cdFx0XHRcdFx0XHRcdG9TZW1hbnRpY09iamVjdFthU2VtYW50aWNPYmplY3RzW2tdLnNlbWFudGljT2JqZWN0XSA9IHt9O1xuXHRcdFx0XHRcdFx0fVxuXHRcdFx0XHRcdFx0c0FsdGVybmF0ZVBhdGggPSBhU2VtYW50aWNPYmplY3RzW2tdLnBhdGgucmVwbGFjZSgvXFwvL2csIFwiX1wiKTtcblx0XHRcdFx0XHRcdGlmIChvU2VtYW50aWNPYmplY3RbYVNlbWFudGljT2JqZWN0c1trXS5zZW1hbnRpY09iamVjdF1bc0FsdGVybmF0ZVBhdGhdID09PSB1bmRlZmluZWQpIHtcblx0XHRcdFx0XHRcdFx0b1NlbWFudGljT2JqZWN0W2FTZW1hbnRpY09iamVjdHNba10uc2VtYW50aWNPYmplY3RdW3NBbHRlcm5hdGVQYXRoXSA9IHt9IGFzIFNlbWFudGljT2JqZWN0SW5mbztcblx0XHRcdFx0XHRcdH1cblx0XHRcdFx0XHRcdG9TZW1hbnRpY09iamVjdFthU2VtYW50aWNPYmplY3RzW2tdLnNlbWFudGljT2JqZWN0XVtzQWx0ZXJuYXRlUGF0aF0gPSBPYmplY3QuYXNzaWduKFxuXHRcdFx0XHRcdFx0XHRvU2VtYW50aWNPYmplY3RbYVNlbWFudGljT2JqZWN0c1trXS5zZW1hbnRpY09iamVjdF1bc0FsdGVybmF0ZVBhdGhdLFxuXHRcdFx0XHRcdFx0XHRvVG1wXG5cdFx0XHRcdFx0XHQpO1xuXHRcdFx0XHRcdH1cblx0XHRcdFx0XHRjb25zdCBzU2VtYW50aWNPYmplY3ROYW1lID0gT2JqZWN0LmtleXMob1NlbWFudGljT2JqZWN0KVswXTtcblx0XHRcdFx0XHRpZiAoT2JqZWN0LmtleXMob0ZpbmFsU2VtYW50aWNPYmplY3RzKS5pbmNsdWRlcyhzU2VtYW50aWNPYmplY3ROYW1lKSkge1xuXHRcdFx0XHRcdFx0b0ZpbmFsU2VtYW50aWNPYmplY3RzW3NTZW1hbnRpY09iamVjdE5hbWVdID0gT2JqZWN0LmFzc2lnbihcblx0XHRcdFx0XHRcdFx0b0ZpbmFsU2VtYW50aWNPYmplY3RzW3NTZW1hbnRpY09iamVjdE5hbWVdLFxuXHRcdFx0XHRcdFx0XHRvU2VtYW50aWNPYmplY3Rbc1NlbWFudGljT2JqZWN0TmFtZV1cblx0XHRcdFx0XHRcdCk7XG5cdFx0XHRcdFx0fSBlbHNlIHtcblx0XHRcdFx0XHRcdG9GaW5hbFNlbWFudGljT2JqZWN0cyA9IE9iamVjdC5hc3NpZ24ob0ZpbmFsU2VtYW50aWNPYmplY3RzLCBvU2VtYW50aWNPYmplY3QpO1xuXHRcdFx0XHRcdH1cblx0XHRcdFx0XHRhRmluYWxMaW5rcyA9IFtdO1xuXHRcdFx0XHR9XG5cdFx0XHR9XG5cdFx0XHRpZiAoT2JqZWN0LmtleXMob0ZpbmFsU2VtYW50aWNPYmplY3RzKS5sZW5ndGggPiAwKSB7XG5cdFx0XHRcdG9JbnRlcm5hbE1vZGVsQ29udGV4dC5zZXRQcm9wZXJ0eShcblx0XHRcdFx0XHRcInNlbWFudGljc1RhcmdldHNcIixcblx0XHRcdFx0XHRtZXJnZU9iamVjdHMob0ZpbmFsU2VtYW50aWNPYmplY3RzLCBvSW50ZXJuYWxNb2RlbENvbnRleHQuZ2V0UHJvcGVydHkoXCJzZW1hbnRpY3NUYXJnZXRzXCIpKVxuXHRcdFx0XHQpO1xuXHRcdFx0XHRyZXR1cm4gb0ZpbmFsU2VtYW50aWNPYmplY3RzO1xuXHRcdFx0fVxuXHRcdFx0cmV0dXJuO1xuXHRcdH0pXG5cdFx0LmNhdGNoKGZ1bmN0aW9uIChvRXJyb3I6IHVua25vd24pIHtcblx0XHRcdExvZy5lcnJvcihcImZuVXBkYXRlU2VtYW50aWNUYXJnZXRzTW9kZWw6IENhbm5vdCByZWFkIGxpbmtzXCIsIG9FcnJvciBhcyBzdHJpbmcpO1xuXHRcdH0pO1xufVxuXG5hc3luYyBmdW5jdGlvbiBmbkdldFNlbWFudGljT2JqZWN0UHJvbWlzZShcblx0b0FwcENvbXBvbmVudDogQXBwQ29tcG9uZW50LFxuXHRvVmlldzogVmlldyxcblx0b01ldGFNb2RlbDogT0RhdGFNZXRhTW9kZWwsXG5cdHNQYXRoOiBzdHJpbmcsXG5cdHNRdWFsaWZpZXI6IHN0cmluZ1xuKSB7XG5cdHJldHVybiBDb21tb25VdGlscy5nZXRTZW1hbnRpY09iamVjdHNGcm9tUGF0aChvTWV0YU1vZGVsLCBzUGF0aCwgc1F1YWxpZmllcik7XG59XG5cbmZ1bmN0aW9uIGZuUHJlcGFyZVNlbWFudGljT2JqZWN0c1Byb21pc2VzKFxuXHRfb0FwcENvbXBvbmVudDogQXBwQ29tcG9uZW50LFxuXHRfb1ZpZXc6IFZpZXcsXG5cdF9vTWV0YU1vZGVsOiBPRGF0YU1ldGFNb2RlbCxcblx0X2FTZW1hbnRpY09iamVjdHNGb3VuZDogc3RyaW5nW10sXG5cdF9hU2VtYW50aWNPYmplY3RzUHJvbWlzZXM6IFByb21pc2U8U2VtYW50aWNPYmplY3RGcm9tUGF0aD5bXVxuKSB7XG5cdGxldCBfS2V5czogc3RyaW5nW10sIHNQYXRoO1xuXHRsZXQgc1F1YWxpZmllcjogc3RyaW5nLCByZWdleFJlc3VsdDtcblx0Zm9yIChsZXQgaSA9IDA7IGkgPCBfYVNlbWFudGljT2JqZWN0c0ZvdW5kLmxlbmd0aDsgaSsrKSB7XG5cdFx0c1BhdGggPSBfYVNlbWFudGljT2JqZWN0c0ZvdW5kW2ldO1xuXHRcdF9LZXlzID0gT2JqZWN0LmtleXMoX29NZXRhTW9kZWwuZ2V0T2JqZWN0KHNQYXRoICsgXCJAXCIpKTtcblx0XHRmb3IgKGxldCBpbmRleCA9IDA7IGluZGV4IDwgX0tleXMubGVuZ3RoOyBpbmRleCsrKSB7XG5cdFx0XHRpZiAoXG5cdFx0XHRcdF9LZXlzW2luZGV4XS5pbmRleE9mKGBAJHtDb21tb25Bbm5vdGF0aW9uVGVybXMuU2VtYW50aWNPYmplY3R9YCkgPT09IDAgJiZcblx0XHRcdFx0X0tleXNbaW5kZXhdLmluZGV4T2YoYEAke0NvbW1vbkFubm90YXRpb25UZXJtcy5TZW1hbnRpY09iamVjdE1hcHBpbmd9YCkgPT09IC0xICYmXG5cdFx0XHRcdF9LZXlzW2luZGV4XS5pbmRleE9mKGBAJHtDb21tb25Bbm5vdGF0aW9uVGVybXMuU2VtYW50aWNPYmplY3RVbmF2YWlsYWJsZUFjdGlvbnN9YCkgPT09IC0xXG5cdFx0XHQpIHtcblx0XHRcdFx0cmVnZXhSZXN1bHQgPSAvIyguKikvLmV4ZWMoX0tleXNbaW5kZXhdKTtcblx0XHRcdFx0c1F1YWxpZmllciA9IHJlZ2V4UmVzdWx0ID8gcmVnZXhSZXN1bHRbMV0gOiBcIlwiO1xuXHRcdFx0XHRfYVNlbWFudGljT2JqZWN0c1Byb21pc2VzLnB1c2goXG5cdFx0XHRcdFx0Q29tbW9uVXRpbHMuZ2V0U2VtYW50aWNPYmplY3RQcm9taXNlKF9vQXBwQ29tcG9uZW50LCBfb1ZpZXcsIF9vTWV0YU1vZGVsLCBzUGF0aCwgc1F1YWxpZmllcilcblx0XHRcdFx0KTtcblx0XHRcdH1cblx0XHR9XG5cdH1cbn1cblxudHlwZSBJbnRlcm5hbEpTT05Nb2RlbCA9IHtcblx0X2dldE9iamVjdCh2YWw6IHN0cmluZywgY29udGV4dD86IENvbnRleHQpOiBvYmplY3Q7XG59O1xuZnVuY3Rpb24gZm5HZXRTZW1hbnRpY1RhcmdldHNGcm9tUGFnZU1vZGVsKG9Db250cm9sbGVyOiBQYWdlQ29udHJvbGxlciwgc1BhZ2VNb2RlbDogc3RyaW5nKSB7XG5cdGNvbnN0IF9mbmZpbmRWYWx1ZXNIZWxwZXIgPSBmdW5jdGlvbiAoXG5cdFx0b2JqOiB1bmRlZmluZWQgfCBudWxsIHwgUmVjb3JkPHN0cmluZywgc3RyaW5nPltdIHwgUmVjb3JkPHN0cmluZywgdW5rbm93bj4sXG5cdFx0a2V5OiBzdHJpbmcsXG5cdFx0bGlzdDogc3RyaW5nW11cblx0KSB7XG5cdFx0aWYgKCFvYmopIHtcblx0XHRcdHJldHVybiBsaXN0O1xuXHRcdH1cblx0XHRpZiAob2JqIGluc3RhbmNlb2YgQXJyYXkpIHtcblx0XHRcdG9iai5mb3JFYWNoKChpdGVtKSA9PiB7XG5cdFx0XHRcdGxpc3QgPSBsaXN0LmNvbmNhdChfZm5maW5kVmFsdWVzSGVscGVyKGl0ZW0sIGtleSwgW10pKTtcblx0XHRcdH0pO1xuXHRcdFx0cmV0dXJuIGxpc3Q7XG5cdFx0fVxuXHRcdGlmIChvYmpba2V5XSkge1xuXHRcdFx0bGlzdC5wdXNoKG9ialtrZXldIGFzIHN0cmluZyk7XG5cdFx0fVxuXG5cdFx0aWYgKHR5cGVvZiBvYmogPT0gXCJvYmplY3RcIiAmJiBvYmogIT09IG51bGwpIHtcblx0XHRcdGNvbnN0IGNoaWxkcmVuID0gT2JqZWN0LmtleXMob2JqKTtcblx0XHRcdGlmIChjaGlsZHJlbi5sZW5ndGggPiAwKSB7XG5cdFx0XHRcdGZvciAobGV0IGkgPSAwOyBpIDwgY2hpbGRyZW4ubGVuZ3RoOyBpKyspIHtcblx0XHRcdFx0XHRsaXN0ID0gbGlzdC5jb25jYXQoX2ZuZmluZFZhbHVlc0hlbHBlcihvYmpbY2hpbGRyZW5baV1dIGFzIFJlY29yZDxzdHJpbmcsIHVua25vd24+LCBrZXksIFtdKSk7XG5cdFx0XHRcdH1cblx0XHRcdH1cblx0XHR9XG5cdFx0cmV0dXJuIGxpc3Q7XG5cdH07XG5cdGNvbnN0IF9mbmZpbmRWYWx1ZXMgPSBmdW5jdGlvbiAob2JqOiB1bmRlZmluZWQgfCBudWxsIHwgUmVjb3JkPHN0cmluZywgc3RyaW5nPltdIHwgUmVjb3JkPHN0cmluZywgdW5rbm93bj4sIGtleTogc3RyaW5nKSB7XG5cdFx0cmV0dXJuIF9mbmZpbmRWYWx1ZXNIZWxwZXIob2JqLCBrZXksIFtdKTtcblx0fTtcblx0Y29uc3QgX2ZuRGVsZXRlRHVwbGljYXRlU2VtYW50aWNPYmplY3RzID0gZnVuY3Rpb24gKGFTZW1hbnRpY09iamVjdFBhdGg6IHN0cmluZ1tdKSB7XG5cdFx0cmV0dXJuIGFTZW1hbnRpY09iamVjdFBhdGguZmlsdGVyKGZ1bmN0aW9uICh2YWx1ZTogc3RyaW5nLCBpbmRleDogbnVtYmVyKSB7XG5cdFx0XHRyZXR1cm4gYVNlbWFudGljT2JqZWN0UGF0aC5pbmRleE9mKHZhbHVlKSA9PT0gaW5kZXg7XG5cdFx0fSk7XG5cdH07XG5cdGNvbnN0IG9WaWV3ID0gb0NvbnRyb2xsZXIuZ2V0VmlldygpO1xuXHRjb25zdCBvSW50ZXJuYWxNb2RlbENvbnRleHQgPSBvVmlldy5nZXRCaW5kaW5nQ29udGV4dChcImludGVybmFsXCIpIGFzIEludGVybmFsTW9kZWxDb250ZXh0O1xuXG5cdGlmIChvSW50ZXJuYWxNb2RlbENvbnRleHQpIHtcblx0XHRjb25zdCBhU2VtYW50aWNPYmplY3RzUHJvbWlzZXM6IFByb21pc2U8U2VtYW50aWNPYmplY3RGcm9tUGF0aD5bXSA9IFtdO1xuXHRcdGNvbnN0IG9Db21wb25lbnQgPSBvQ29udHJvbGxlci5nZXRPd25lckNvbXBvbmVudCgpO1xuXHRcdGNvbnN0IG9BcHBDb21wb25lbnQgPSBDb21wb25lbnQuZ2V0T3duZXJDb21wb25lbnRGb3Iob0NvbXBvbmVudCkgYXMgQXBwQ29tcG9uZW50O1xuXHRcdGNvbnN0IG9NZXRhTW9kZWwgPSBvQXBwQ29tcG9uZW50LmdldE1ldGFNb2RlbCgpO1xuXHRcdGxldCBvUGFnZU1vZGVsID0gKG9Db21wb25lbnQuZ2V0TW9kZWwoc1BhZ2VNb2RlbCkgYXMgSlNPTk1vZGVsKS5nZXREYXRhKCk7XG5cdFx0aWYgKEpTT04uc3RyaW5naWZ5KG9QYWdlTW9kZWwpID09PSBcInt9XCIpIHtcblx0XHRcdG9QYWdlTW9kZWwgPSAob0NvbXBvbmVudC5nZXRNb2RlbChzUGFnZU1vZGVsKSBhcyB1bmtub3duIGFzIEludGVybmFsSlNPTk1vZGVsKS5fZ2V0T2JqZWN0KFwiL1wiLCB1bmRlZmluZWQpO1xuXHRcdH1cblx0XHRsZXQgYVNlbWFudGljT2JqZWN0c0ZvdW5kID0gX2ZuZmluZFZhbHVlcyhvUGFnZU1vZGVsLCBcInNlbWFudGljT2JqZWN0UGF0aFwiKTtcblx0XHRhU2VtYW50aWNPYmplY3RzRm91bmQgPSBfZm5EZWxldGVEdXBsaWNhdGVTZW1hbnRpY09iamVjdHMoYVNlbWFudGljT2JqZWN0c0ZvdW5kKTtcblx0XHRjb25zdCBvU2hlbGxTZXJ2aWNlSGVscGVyID0gQ29tbW9uVXRpbHMuZ2V0U2hlbGxTZXJ2aWNlcyhvQXBwQ29tcG9uZW50KTtcblx0XHRsZXQgc0N1cnJlbnRIYXNoID0gQ29tbW9uVXRpbHMuZ2V0SGFzaCgpO1xuXHRcdGNvbnN0IGFTZW1hbnRpY09iamVjdHNGb3JHZXRMaW5rcyA9IFtdO1xuXHRcdGNvbnN0IGFTZW1hbnRpY09iamVjdHM6IFNlbWFudGljT2JqZWN0W10gPSBbXTtcblx0XHRsZXQgX29TZW1hbnRpY09iamVjdDtcblxuXHRcdGlmIChzQ3VycmVudEhhc2ggJiYgc0N1cnJlbnRIYXNoLmluZGV4T2YoXCI/XCIpICE9PSAtMSkge1xuXHRcdFx0Ly8gc0N1cnJlbnRIYXNoIGNhbiBjb250YWluIHF1ZXJ5IHN0cmluZywgY3V0IGl0IG9mZiFcblx0XHRcdHNDdXJyZW50SGFzaCA9IHNDdXJyZW50SGFzaC5zcGxpdChcIj9cIilbMF07XG5cdFx0fVxuXG5cdFx0Zm5QcmVwYXJlU2VtYW50aWNPYmplY3RzUHJvbWlzZXMob0FwcENvbXBvbmVudCwgb1ZpZXcsIG9NZXRhTW9kZWwsIGFTZW1hbnRpY09iamVjdHNGb3VuZCwgYVNlbWFudGljT2JqZWN0c1Byb21pc2VzKTtcblxuXHRcdGlmIChhU2VtYW50aWNPYmplY3RzUHJvbWlzZXMubGVuZ3RoID09PSAwKSB7XG5cdFx0XHRyZXR1cm4gUHJvbWlzZS5yZXNvbHZlKCk7XG5cdFx0fSBlbHNlIHtcblx0XHRcdFByb21pc2UuYWxsKGFTZW1hbnRpY09iamVjdHNQcm9taXNlcylcblx0XHRcdFx0LnRoZW4oYXN5bmMgZnVuY3Rpb24gKGFWYWx1ZXMpIHtcblx0XHRcdFx0XHRjb25zdCBhR2V0TGlua3NQcm9taXNlcyA9IFtdO1xuXHRcdFx0XHRcdGxldCBzU2VtT2JqRXhwcmVzc2lvbjtcblx0XHRcdFx0XHR0eXBlIFNlbWFudGljT2JqZWN0UmVzb2x2ZWQgPSB7XG5cdFx0XHRcdFx0XHRzZW1hbnRpY09iamVjdFBhdGg6IHN0cmluZztcblx0XHRcdFx0XHRcdHNlbWFudGljT2JqZWN0Rm9yR2V0TGlua3M6IHsgc2VtYW50aWNPYmplY3Q6IHN0cmluZyB9W107XG5cdFx0XHRcdFx0XHRzZW1hbnRpY09iamVjdDoge1xuXHRcdFx0XHRcdFx0XHRzZW1hbnRpY09iamVjdDogc3RyaW5nO1xuXHRcdFx0XHRcdFx0fTtcblx0XHRcdFx0XHRcdHVuYXZhaWxhYmxlQWN0aW9uczogc3RyaW5nW107XG5cdFx0XHRcdFx0fTtcblx0XHRcdFx0XHRjb25zdCBhU2VtYW50aWNPYmplY3RzUmVzb2x2ZWQ6IFNlbWFudGljT2JqZWN0UmVzb2x2ZWRbXSA9IGFWYWx1ZXMuZmlsdGVyKGZ1bmN0aW9uIChlbGVtZW50KSB7XG5cdFx0XHRcdFx0XHRpZiAoXG5cdFx0XHRcdFx0XHRcdGVsZW1lbnQuc2VtYW50aWNPYmplY3QgIT09IHVuZGVmaW5lZCAmJlxuXHRcdFx0XHRcdFx0XHRlbGVtZW50LnNlbWFudGljT2JqZWN0LnNlbWFudGljT2JqZWN0ICYmXG5cdFx0XHRcdFx0XHRcdHR5cGVvZiBlbGVtZW50LnNlbWFudGljT2JqZWN0LnNlbWFudGljT2JqZWN0ID09PSBcIm9iamVjdFwiXG5cdFx0XHRcdFx0XHQpIHtcblx0XHRcdFx0XHRcdFx0c1NlbU9iakV4cHJlc3Npb24gPSBjb21waWxlRXhwcmVzc2lvbihwYXRoSW5Nb2RlbChlbGVtZW50LnNlbWFudGljT2JqZWN0LnNlbWFudGljT2JqZWN0LiRQYXRoKSkhO1xuXHRcdFx0XHRcdFx0XHQoZWxlbWVudCBhcyB1bmtub3duIGFzIFNlbWFudGljT2JqZWN0UmVzb2x2ZWQpLnNlbWFudGljT2JqZWN0LnNlbWFudGljT2JqZWN0ID0gc1NlbU9iakV4cHJlc3Npb247XG5cdFx0XHRcdFx0XHRcdGVsZW1lbnQuc2VtYW50aWNPYmplY3RGb3JHZXRMaW5rc1swXS5zZW1hbnRpY09iamVjdCA9IHNTZW1PYmpFeHByZXNzaW9uO1xuXHRcdFx0XHRcdFx0XHRyZXR1cm4gdHJ1ZTtcblx0XHRcdFx0XHRcdH0gZWxzZSBpZiAoZWxlbWVudCkge1xuXHRcdFx0XHRcdFx0XHRyZXR1cm4gZWxlbWVudC5zZW1hbnRpY09iamVjdCAhPT0gdW5kZWZpbmVkO1xuXHRcdFx0XHRcdFx0fSBlbHNlIHtcblx0XHRcdFx0XHRcdFx0cmV0dXJuIGZhbHNlO1xuXHRcdFx0XHRcdFx0fVxuXHRcdFx0XHRcdH0pIGFzIHVua25vd24gYXMgU2VtYW50aWNPYmplY3RSZXNvbHZlZFtdO1xuXHRcdFx0XHRcdGZvciAobGV0IGogPSAwOyBqIDwgYVNlbWFudGljT2JqZWN0c1Jlc29sdmVkLmxlbmd0aDsgaisrKSB7XG5cdFx0XHRcdFx0XHRfb1NlbWFudGljT2JqZWN0ID0gYVNlbWFudGljT2JqZWN0c1Jlc29sdmVkW2pdO1xuXHRcdFx0XHRcdFx0aWYgKFxuXHRcdFx0XHRcdFx0XHRfb1NlbWFudGljT2JqZWN0ICYmXG5cdFx0XHRcdFx0XHRcdF9vU2VtYW50aWNPYmplY3Quc2VtYW50aWNPYmplY3QgJiZcblx0XHRcdFx0XHRcdFx0IShfb1NlbWFudGljT2JqZWN0LnNlbWFudGljT2JqZWN0LnNlbWFudGljT2JqZWN0LmluZGV4T2YoXCJ7XCIpID09PSAwKVxuXHRcdFx0XHRcdFx0KSB7XG5cdFx0XHRcdFx0XHRcdGFTZW1hbnRpY09iamVjdHNGb3JHZXRMaW5rcy5wdXNoKF9vU2VtYW50aWNPYmplY3Quc2VtYW50aWNPYmplY3RGb3JHZXRMaW5rcyk7XG5cdFx0XHRcdFx0XHRcdGFTZW1hbnRpY09iamVjdHMucHVzaCh7XG5cdFx0XHRcdFx0XHRcdFx0c2VtYW50aWNPYmplY3Q6IF9vU2VtYW50aWNPYmplY3Quc2VtYW50aWNPYmplY3Quc2VtYW50aWNPYmplY3QsXG5cdFx0XHRcdFx0XHRcdFx0dW5hdmFpbGFibGVBY3Rpb25zOiBfb1NlbWFudGljT2JqZWN0LnVuYXZhaWxhYmxlQWN0aW9ucyxcblx0XHRcdFx0XHRcdFx0XHRwYXRoOiBhU2VtYW50aWNPYmplY3RzUmVzb2x2ZWRbal0uc2VtYW50aWNPYmplY3RQYXRoXG5cdFx0XHRcdFx0XHRcdH0pO1xuXHRcdFx0XHRcdFx0XHRhR2V0TGlua3NQcm9taXNlcy5wdXNoKG9TaGVsbFNlcnZpY2VIZWxwZXIuZ2V0TGlua3NXaXRoQ2FjaGUoW19vU2VtYW50aWNPYmplY3Quc2VtYW50aWNPYmplY3RGb3JHZXRMaW5rc10pKTtcblx0XHRcdFx0XHRcdH1cblx0XHRcdFx0XHR9XG5cdFx0XHRcdFx0cmV0dXJuIENvbW1vblV0aWxzLnVwZGF0ZVNlbWFudGljVGFyZ2V0cyhhR2V0TGlua3NQcm9taXNlcywgYVNlbWFudGljT2JqZWN0cywgb0ludGVybmFsTW9kZWxDb250ZXh0LCBzQ3VycmVudEhhc2gpO1xuXHRcdFx0XHR9KVxuXHRcdFx0XHQuY2F0Y2goZnVuY3Rpb24gKG9FcnJvcjogdW5rbm93bikge1xuXHRcdFx0XHRcdExvZy5lcnJvcihcImZuR2V0U2VtYW50aWNUYXJnZXRzRnJvbVRhYmxlOiBDYW5ub3QgZ2V0IFNlbWFudGljIE9iamVjdHNcIiwgb0Vycm9yIGFzIHN0cmluZyk7XG5cdFx0XHRcdH0pO1xuXHRcdH1cblx0fSBlbHNlIHtcblx0XHRyZXR1cm4gUHJvbWlzZS5yZXNvbHZlKCk7XG5cdH1cbn1cblxuZnVuY3Rpb24gZ2V0RmlsdGVyQWxsb3dlZEV4cHJlc3Npb24ob0ZpbHRlclJlc3RyaWN0aW9uc0Fubm90YXRpb24/OiBNZXRhTW9kZWxUeXBlPEZpbHRlclJlc3RyaWN0aW9uc1R5cGU+KSB7XG5cdGNvbnN0IG1BbGxvd2VkRXhwcmVzc2lvbnM6IF9GaWx0ZXJBbGxvd2VkRXhwcmVzc2lvbnMgPSB7fTtcblx0aWYgKG9GaWx0ZXJSZXN0cmljdGlvbnNBbm5vdGF0aW9uICYmIG9GaWx0ZXJSZXN0cmljdGlvbnNBbm5vdGF0aW9uLkZpbHRlckV4cHJlc3Npb25SZXN0cmljdGlvbnMgIT09IHVuZGVmaW5lZCkge1xuXHRcdG9GaWx0ZXJSZXN0cmljdGlvbnNBbm5vdGF0aW9uLkZpbHRlckV4cHJlc3Npb25SZXN0cmljdGlvbnMuZm9yRWFjaChmdW5jdGlvbiAob1Byb3BlcnR5KSB7XG5cdFx0XHRpZiAob1Byb3BlcnR5LlByb3BlcnR5ICYmIG9Qcm9wZXJ0eS5BbGxvd2VkRXhwcmVzc2lvbnMgIT09IHVuZGVmaW5lZCkge1xuXHRcdFx0XHQvL1NpbmdsZVZhbHVlIHwgTXVsdGlWYWx1ZSB8IFNpbmdsZVJhbmdlIHwgTXVsdGlSYW5nZSB8IFNlYXJjaEV4cHJlc3Npb24gfCBNdWx0aVJhbmdlT3JTZWFyY2hFeHByZXNzaW9uXG5cdFx0XHRcdGlmIChtQWxsb3dlZEV4cHJlc3Npb25zW29Qcm9wZXJ0eS5Qcm9wZXJ0eS4kUHJvcGVydHlQYXRoXSAhPT0gdW5kZWZpbmVkKSB7XG5cdFx0XHRcdFx0bUFsbG93ZWRFeHByZXNzaW9uc1tvUHJvcGVydHkuUHJvcGVydHkuJFByb3BlcnR5UGF0aF0ucHVzaChvUHJvcGVydHkuQWxsb3dlZEV4cHJlc3Npb25zIGFzIHN0cmluZyk7XG5cdFx0XHRcdH0gZWxzZSB7XG5cdFx0XHRcdFx0bUFsbG93ZWRFeHByZXNzaW9uc1tvUHJvcGVydHkuUHJvcGVydHkuJFByb3BlcnR5UGF0aF0gPSBbb1Byb3BlcnR5LkFsbG93ZWRFeHByZXNzaW9ucyBhcyBzdHJpbmddO1xuXHRcdFx0XHR9XG5cdFx0XHR9XG5cdFx0fSk7XG5cdH1cblx0cmV0dXJuIG1BbGxvd2VkRXhwcmVzc2lvbnM7XG59XG5mdW5jdGlvbiBnZXRGaWx0ZXJSZXN0cmljdGlvbnMoXG5cdG9GaWx0ZXJSZXN0cmljdGlvbnNBbm5vdGF0aW9uPzogTWV0YU1vZGVsVHlwZTxGaWx0ZXJSZXN0cmljdGlvbnNUeXBlPixcblx0c1Jlc3RyaWN0aW9uPzogXCJSZXF1aXJlZFByb3BlcnRpZXNcIiB8IFwiTm9uRmlsdGVyYWJsZVByb3BlcnRpZXNcIlxuKSB7XG5cdGxldCBhUHJvcHM6IHN0cmluZ1tdID0gW107XG5cdGlmIChvRmlsdGVyUmVzdHJpY3Rpb25zQW5ub3RhdGlvbiAmJiBvRmlsdGVyUmVzdHJpY3Rpb25zQW5ub3RhdGlvbltzUmVzdHJpY3Rpb24gYXMga2V5b2YgTWV0YU1vZGVsVHlwZTxGaWx0ZXJSZXN0cmljdGlvbnNUeXBlPl0pIHtcblx0XHRhUHJvcHMgPSAoXG5cdFx0XHRvRmlsdGVyUmVzdHJpY3Rpb25zQW5ub3RhdGlvbltzUmVzdHJpY3Rpb24gYXMga2V5b2YgTWV0YU1vZGVsVHlwZTxGaWx0ZXJSZXN0cmljdGlvbnNUeXBlPl0gYXMgRXhwYW5kUGF0aFR5cGU8RWRtLlByb3BlcnR5UGF0aD5bXVxuXHRcdCkubWFwKGZ1bmN0aW9uIChvUHJvcGVydHk6IEV4cGFuZFBhdGhUeXBlPEVkbS5Qcm9wZXJ0eVBhdGg+KSB7XG5cdFx0XHRyZXR1cm4gb1Byb3BlcnR5LiRQcm9wZXJ0eVBhdGg7XG5cdFx0fSk7XG5cdH1cblx0cmV0dXJuIGFQcm9wcztcbn1cblxuZnVuY3Rpb24gX2ZldGNoUHJvcGVydGllc0Zvck5hdlBhdGgocGF0aHM6IHN0cmluZ1tdLCBuYXZQYXRoOiBzdHJpbmcsIHByb3BzOiBzdHJpbmdbXSkge1xuXHRjb25zdCBuYXZQYXRoUHJlZml4ID0gbmF2UGF0aCArIFwiL1wiO1xuXHRyZXR1cm4gcGF0aHMucmVkdWNlKChvdXRQYXRoczogc3RyaW5nW10sIHBhdGhUb0NoZWNrOiBzdHJpbmcpID0+IHtcblx0XHRpZiAocGF0aFRvQ2hlY2suc3RhcnRzV2l0aChuYXZQYXRoUHJlZml4KSkge1xuXHRcdFx0Y29uc3Qgb3V0UGF0aCA9IHBhdGhUb0NoZWNrLnJlcGxhY2UobmF2UGF0aFByZWZpeCwgXCJcIik7XG5cdFx0XHRpZiAob3V0UGF0aHMuaW5kZXhPZihvdXRQYXRoKSA9PT0gLTEpIHtcblx0XHRcdFx0b3V0UGF0aHMucHVzaChvdXRQYXRoKTtcblx0XHRcdH1cblx0XHR9XG5cdFx0cmV0dXJuIG91dFBhdGhzO1xuXHR9LCBwcm9wcyk7XG59XG50eXBlIF9GaWx0ZXJBbGxvd2VkRXhwcmVzc2lvbnMgPSBSZWNvcmQ8c3RyaW5nLCBzdHJpbmdbXT47XG50eXBlIF9GaWx0ZXJSZXN0cmljdGlvbnMgPSB7XG5cdFJlcXVpcmVkUHJvcGVydGllczogc3RyaW5nW107XG5cdE5vbkZpbHRlcmFibGVQcm9wZXJ0aWVzOiBzdHJpbmdbXTtcblx0RmlsdGVyQWxsb3dlZEV4cHJlc3Npb25zOiBfRmlsdGVyQWxsb3dlZEV4cHJlc3Npb25zO1xufTtcbmZ1bmN0aW9uIGdldEZpbHRlclJlc3RyaWN0aW9uc0J5UGF0aChlbnRpdHlQYXRoOiBzdHJpbmcsIG9Db250ZXh0OiBPRGF0YU1ldGFNb2RlbCkge1xuXHRjb25zdCBvUmV0OiBfRmlsdGVyUmVzdHJpY3Rpb25zID0ge1xuXHRcdFJlcXVpcmVkUHJvcGVydGllczogW10sXG5cdFx0Tm9uRmlsdGVyYWJsZVByb3BlcnRpZXM6IFtdLFxuXHRcdEZpbHRlckFsbG93ZWRFeHByZXNzaW9uczoge31cblx0fTtcblx0bGV0IG9GaWx0ZXJSZXN0cmljdGlvbnM7XG5cdGNvbnN0IG5hdmlnYXRpb25UZXh0ID0gXCIkTmF2aWdhdGlvblByb3BlcnR5QmluZGluZ1wiO1xuXHRjb25zdCBmclRlcm0gPSBcIkBPcmcuT0RhdGEuQ2FwYWJpbGl0aWVzLlYxLkZpbHRlclJlc3RyaWN0aW9uc1wiO1xuXHRjb25zdCBlbnRpdHlUeXBlUGF0aFBhcnRzID0gZW50aXR5UGF0aC5yZXBsYWNlQWxsKFwiJTJGXCIsIFwiL1wiKS5zcGxpdChcIi9cIikuZmlsdGVyKE1vZGVsSGVscGVyLmZpbHRlck91dE5hdlByb3BCaW5kaW5nKTtcblx0Y29uc3QgZW50aXR5VHlwZVBhdGggPSBgLyR7ZW50aXR5VHlwZVBhdGhQYXJ0cy5qb2luKFwiL1wiKX0vYDtcblx0Y29uc3QgZW50aXR5U2V0UGF0aCA9IE1vZGVsSGVscGVyLmdldEVudGl0eVNldFBhdGgoZW50aXR5UGF0aCwgb0NvbnRleHQpO1xuXHRjb25zdCBlbnRpdHlTZXRQYXRoUGFydHMgPSBlbnRpdHlTZXRQYXRoLnNwbGl0KFwiL1wiKS5maWx0ZXIoTW9kZWxIZWxwZXIuZmlsdGVyT3V0TmF2UHJvcEJpbmRpbmcpO1xuXHRjb25zdCBpc0NvbnRhaW5tZW50ID0gb0NvbnRleHQuZ2V0T2JqZWN0KGAke2VudGl0eVR5cGVQYXRofSRDb250YWluc1RhcmdldGApO1xuXHRjb25zdCBjb250YWlubWVudE5hdlBhdGggPSAhIWlzQ29udGFpbm1lbnQgJiYgZW50aXR5VHlwZVBhdGhQYXJ0c1tlbnRpdHlUeXBlUGF0aFBhcnRzLmxlbmd0aCAtIDFdO1xuXG5cdC8vTEVBU1QgUFJJT1JJVFkgLSBGaWx0ZXIgcmVzdHJpY3Rpb25zIGRpcmVjdGx5IGF0IEVudGl0eSBTZXRcblx0Ly9lLmcuIEZSIGluIFwiTlMuRW50aXR5Q29udGFpbmVyL1NhbGVzT3JkZXJNYW5hZ2VcIiBDb250ZXh0UGF0aDogL1NhbGVzT3JkZXJNYW5hZ2Vcblx0aWYgKCFpc0NvbnRhaW5tZW50KSB7XG5cdFx0b0ZpbHRlclJlc3RyaWN0aW9ucyA9IG9Db250ZXh0LmdldE9iamVjdChgJHtlbnRpdHlTZXRQYXRofSR7ZnJUZXJtfWApIGFzIE1ldGFNb2RlbFR5cGU8RmlsdGVyUmVzdHJpY3Rpb25zVHlwZT4gfCB1bmRlZmluZWQ7XG5cdFx0b1JldC5SZXF1aXJlZFByb3BlcnRpZXMgPSBnZXRGaWx0ZXJSZXN0cmljdGlvbnMob0ZpbHRlclJlc3RyaWN0aW9ucywgXCJSZXF1aXJlZFByb3BlcnRpZXNcIikgfHwgW107XG5cdFx0Y29uc3QgcmVzdWx0Q29udGV4dENoZWNrID0gb0NvbnRleHQuZ2V0T2JqZWN0KGAke2VudGl0eVR5cGVQYXRofUBjb20uc2FwLnZvY2FidWxhcmllcy5Db21tb24udjEuUmVzdWx0Q29udGV4dGApO1xuXHRcdGlmICghcmVzdWx0Q29udGV4dENoZWNrKSB7XG5cdFx0XHRvUmV0Lk5vbkZpbHRlcmFibGVQcm9wZXJ0aWVzID0gZ2V0RmlsdGVyUmVzdHJpY3Rpb25zKG9GaWx0ZXJSZXN0cmljdGlvbnMsIFwiTm9uRmlsdGVyYWJsZVByb3BlcnRpZXNcIikgfHwgW107XG5cdFx0fVxuXHRcdC8vU2luZ2xlVmFsdWUgfCBNdWx0aVZhbHVlIHwgU2luZ2xlUmFuZ2UgfCBNdWx0aVJhbmdlIHwgU2VhcmNoRXhwcmVzc2lvbiB8IE11bHRpUmFuZ2VPclNlYXJjaEV4cHJlc3Npb25cblx0XHRvUmV0LkZpbHRlckFsbG93ZWRFeHByZXNzaW9ucyA9IGdldEZpbHRlckFsbG93ZWRFeHByZXNzaW9uKG9GaWx0ZXJSZXN0cmljdGlvbnMpIHx8IHt9O1xuXHR9XG5cblx0aWYgKGVudGl0eVR5cGVQYXRoUGFydHMubGVuZ3RoID4gMSkge1xuXHRcdGNvbnN0IG5hdlBhdGggPSBpc0NvbnRhaW5tZW50ID8gKGNvbnRhaW5tZW50TmF2UGF0aCBhcyBzdHJpbmcpIDogZW50aXR5U2V0UGF0aFBhcnRzW2VudGl0eVNldFBhdGhQYXJ0cy5sZW5ndGggLSAxXTtcblx0XHQvLyBJbiBjYXNlIG9mIGNvbnRhaW5tZW50IHdlIHRha2UgZW50aXR5U2V0IHByb3ZpZGVkIGFzIHBhcmVudC4gQW5kIGluIGNhc2Ugb2Ygbm9ybWFsIHdlIHdvdWxkIHJlbW92ZSB0aGUgbGFzdCBuYXZpZ2F0aW9uIGZyb20gZW50aXR5U2V0UGF0aC5cblx0XHRjb25zdCBwYXJlbnRFbnRpdHlTZXRQYXRoID0gaXNDb250YWlubWVudCA/IGVudGl0eVNldFBhdGggOiBgLyR7ZW50aXR5U2V0UGF0aFBhcnRzLnNsaWNlKDAsIC0xKS5qb2luKGAvJHtuYXZpZ2F0aW9uVGV4dH0vYCl9YDtcblx0XHQvL1RISVJEIEhJR0hFU1QgUFJJT1JJVFkgLSBSZWFkaW5nIHByb3BlcnR5IHBhdGggcmVzdHJpY3Rpb25zIC0gQW5ub3RhdGlvbiBhdCBtYWluIGVudGl0eSBidXQgZGlyZWN0bHkgb24gbmF2aWdhdGlvbiBwcm9wZXJ0eSBwYXRoXG5cdFx0Ly9lLmcuIFBhcmVudCBDdXN0b21lciB3aXRoIFByb3BlcnR5UGF0aD1cIlNldC9DaXR5TmFtZVwiIENvbnRleHRQYXRoOiBDdXN0b21lci9TZXRcblx0XHRjb25zdCBvUGFyZW50UmV0OiBfRmlsdGVyUmVzdHJpY3Rpb25zID0ge1xuXHRcdFx0UmVxdWlyZWRQcm9wZXJ0aWVzOiBbXSxcblx0XHRcdE5vbkZpbHRlcmFibGVQcm9wZXJ0aWVzOiBbXSxcblx0XHRcdEZpbHRlckFsbG93ZWRFeHByZXNzaW9uczoge31cblx0XHR9O1xuXHRcdGlmICghbmF2UGF0aC5pbmNsdWRlcyhcIiUyRlwiKSkge1xuXHRcdFx0Y29uc3Qgb1BhcmVudEZSID0gb0NvbnRleHQuZ2V0T2JqZWN0KGAke3BhcmVudEVudGl0eVNldFBhdGh9JHtmclRlcm19YCkgYXMgTWV0YU1vZGVsVHlwZTxGaWx0ZXJSZXN0cmljdGlvbnNUeXBlPiB8IHVuZGVmaW5lZDtcblx0XHRcdG9SZXQuUmVxdWlyZWRQcm9wZXJ0aWVzID0gX2ZldGNoUHJvcGVydGllc0Zvck5hdlBhdGgoXG5cdFx0XHRcdGdldEZpbHRlclJlc3RyaWN0aW9ucyhvUGFyZW50RlIsIFwiUmVxdWlyZWRQcm9wZXJ0aWVzXCIpIHx8IFtdLFxuXHRcdFx0XHRuYXZQYXRoLFxuXHRcdFx0XHRvUmV0LlJlcXVpcmVkUHJvcGVydGllcyB8fCBbXVxuXHRcdFx0KTtcblx0XHRcdG9SZXQuTm9uRmlsdGVyYWJsZVByb3BlcnRpZXMgPSBfZmV0Y2hQcm9wZXJ0aWVzRm9yTmF2UGF0aChcblx0XHRcdFx0Z2V0RmlsdGVyUmVzdHJpY3Rpb25zKG9QYXJlbnRGUiwgXCJOb25GaWx0ZXJhYmxlUHJvcGVydGllc1wiKSB8fCBbXSxcblx0XHRcdFx0bmF2UGF0aCxcblx0XHRcdFx0b1JldC5Ob25GaWx0ZXJhYmxlUHJvcGVydGllcyB8fCBbXVxuXHRcdFx0KTtcblx0XHRcdC8vU2luZ2xlVmFsdWUgfCBNdWx0aVZhbHVlIHwgU2luZ2xlUmFuZ2UgfCBNdWx0aVJhbmdlIHwgU2VhcmNoRXhwcmVzc2lvbiB8IE11bHRpUmFuZ2VPclNlYXJjaEV4cHJlc3Npb25cblx0XHRcdGNvbnN0IGNvbXBsZXRlQWxsb3dlZEV4cHMgPSBnZXRGaWx0ZXJBbGxvd2VkRXhwcmVzc2lvbihvUGFyZW50RlIpIHx8IHt9O1xuXHRcdFx0b1BhcmVudFJldC5GaWx0ZXJBbGxvd2VkRXhwcmVzc2lvbnMgPSBPYmplY3Qua2V5cyhjb21wbGV0ZUFsbG93ZWRFeHBzKS5yZWR1Y2UoXG5cdFx0XHRcdChvdXRQcm9wOiBSZWNvcmQ8c3RyaW5nLCBzdHJpbmdbXT4sIHByb3BQYXRoOiBzdHJpbmcpID0+IHtcblx0XHRcdFx0XHRpZiAocHJvcFBhdGguc3RhcnRzV2l0aChuYXZQYXRoICsgXCIvXCIpKSB7XG5cdFx0XHRcdFx0XHRjb25zdCBvdXRQcm9wUGF0aCA9IHByb3BQYXRoLnJlcGxhY2UobmF2UGF0aCArIFwiL1wiLCBcIlwiKTtcblx0XHRcdFx0XHRcdG91dFByb3Bbb3V0UHJvcFBhdGhdID0gY29tcGxldGVBbGxvd2VkRXhwc1twcm9wUGF0aF07XG5cdFx0XHRcdFx0fVxuXHRcdFx0XHRcdHJldHVybiBvdXRQcm9wO1xuXHRcdFx0XHR9LFxuXHRcdFx0XHR7fSBhcyBSZWNvcmQ8c3RyaW5nLCBzdHJpbmdbXT5cblx0XHRcdCk7XG5cdFx0fVxuXG5cdFx0Ly9TaW5nbGVWYWx1ZSB8IE11bHRpVmFsdWUgfCBTaW5nbGVSYW5nZSB8IE11bHRpUmFuZ2UgfCBTZWFyY2hFeHByZXNzaW9uIHwgTXVsdGlSYW5nZU9yU2VhcmNoRXhwcmVzc2lvblxuXHRcdG9SZXQuRmlsdGVyQWxsb3dlZEV4cHJlc3Npb25zID0gbWVyZ2VPYmplY3RzKFxuXHRcdFx0e30sXG5cdFx0XHRvUmV0LkZpbHRlckFsbG93ZWRFeHByZXNzaW9ucyB8fCB7fSxcblx0XHRcdG9QYXJlbnRSZXQuRmlsdGVyQWxsb3dlZEV4cHJlc3Npb25zIHx8IHt9XG5cdFx0KSBhcyBSZWNvcmQ8c3RyaW5nLCBzdHJpbmdbXT47XG5cblx0XHQvL1NFQ09ORCBISUdIRVNUIHByaW9yaXR5IC0gTmF2aWdhdGlvbiByZXN0cmljdGlvbnNcblx0XHQvL2UuZy4gUGFyZW50IFwiL0N1c3RvbWVyXCIgd2l0aCBOYXZpZ2F0aW9uUHJvcGVydHlQYXRoPVwiU2V0XCIgQ29udGV4dFBhdGg6IEN1c3RvbWVyL1NldFxuXHRcdGNvbnN0IG9OYXZSZXN0cmljdGlvbnMgPSBNZXRhTW9kZWxGdW5jdGlvbi5nZXROYXZpZ2F0aW9uUmVzdHJpY3Rpb25zKG9Db250ZXh0LCBwYXJlbnRFbnRpdHlTZXRQYXRoLCBuYXZQYXRoLnJlcGxhY2VBbGwoXCIlMkZcIiwgXCIvXCIpKTtcblx0XHRjb25zdCBvTmF2RmlsdGVyUmVzdCA9IG9OYXZSZXN0cmljdGlvbnMgJiYgKG9OYXZSZXN0cmljdGlvbnNbXCJGaWx0ZXJSZXN0cmljdGlvbnNcIl0gYXMgTWV0YU1vZGVsVHlwZTxGaWx0ZXJSZXN0cmljdGlvbnNUeXBlPik7XG5cdFx0Y29uc3QgbmF2UmVzUmVxUHJvcHMgPSBnZXRGaWx0ZXJSZXN0cmljdGlvbnMob05hdkZpbHRlclJlc3QsIFwiUmVxdWlyZWRQcm9wZXJ0aWVzXCIpIHx8IFtdO1xuXHRcdG9SZXQuUmVxdWlyZWRQcm9wZXJ0aWVzID0gdW5pcXVlU29ydChvUmV0LlJlcXVpcmVkUHJvcGVydGllcy5jb25jYXQobmF2UmVzUmVxUHJvcHMpKTtcblx0XHRjb25zdCBuYXZOb25GaWx0ZXJQcm9wcyA9IGdldEZpbHRlclJlc3RyaWN0aW9ucyhvTmF2RmlsdGVyUmVzdCwgXCJOb25GaWx0ZXJhYmxlUHJvcGVydGllc1wiKSB8fCBbXTtcblx0XHRvUmV0Lk5vbkZpbHRlcmFibGVQcm9wZXJ0aWVzID0gdW5pcXVlU29ydChvUmV0Lk5vbkZpbHRlcmFibGVQcm9wZXJ0aWVzLmNvbmNhdChuYXZOb25GaWx0ZXJQcm9wcykpO1xuXHRcdC8vU2luZ2xlVmFsdWUgfCBNdWx0aVZhbHVlIHwgU2luZ2xlUmFuZ2UgfCBNdWx0aVJhbmdlIHwgU2VhcmNoRXhwcmVzc2lvbiB8IE11bHRpUmFuZ2VPclNlYXJjaEV4cHJlc3Npb25cblx0XHRvUmV0LkZpbHRlckFsbG93ZWRFeHByZXNzaW9ucyA9IG1lcmdlT2JqZWN0cyhcblx0XHRcdHt9LFxuXHRcdFx0b1JldC5GaWx0ZXJBbGxvd2VkRXhwcmVzc2lvbnMgfHwge30sXG5cdFx0XHRnZXRGaWx0ZXJBbGxvd2VkRXhwcmVzc2lvbihvTmF2RmlsdGVyUmVzdCkgfHwge31cblx0XHQpIGFzIFJlY29yZDxzdHJpbmcsIHN0cmluZ1tdPjtcblxuXHRcdC8vSElHSEVTVCBwcmlvcml0eSAtIFJlc3RyaWN0aW9ucyBoYXZpbmcgdGFyZ2V0IHdpdGggbmF2aWdhdGlvbiBhc3NvY2lhdGlvbiBlbnRpdHlcblx0XHQvLyBlLmcuIEZSIGluIFwiQ3VzdG9tZXJQYXJhbWV0ZXJzL1NldFwiIENvbnRleHRQYXRoOiBcIkN1c3RvbWVyL1NldFwiXG5cdFx0Y29uc3QgbmF2QXNzb2NpYXRpb25FbnRpdHlSZXN0ID0gb0NvbnRleHQuZ2V0T2JqZWN0KFxuXHRcdFx0YC8ke2VudGl0eVR5cGVQYXRoUGFydHMuam9pbihcIi9cIil9JHtmclRlcm19YFxuXHRcdCkgYXMgTWV0YU1vZGVsVHlwZTxGaWx0ZXJSZXN0cmljdGlvbnNUeXBlPjtcblx0XHRjb25zdCBuYXZBc3NvY1JlcVByb3BzID0gZ2V0RmlsdGVyUmVzdHJpY3Rpb25zKG5hdkFzc29jaWF0aW9uRW50aXR5UmVzdCwgXCJSZXF1aXJlZFByb3BlcnRpZXNcIikgfHwgW107XG5cdFx0b1JldC5SZXF1aXJlZFByb3BlcnRpZXMgPSB1bmlxdWVTb3J0KG9SZXQuUmVxdWlyZWRQcm9wZXJ0aWVzLmNvbmNhdChuYXZBc3NvY1JlcVByb3BzKSk7XG5cdFx0Y29uc3QgbmF2QXNzb2NOb25GaWx0ZXJQcm9wcyA9IGdldEZpbHRlclJlc3RyaWN0aW9ucyhuYXZBc3NvY2lhdGlvbkVudGl0eVJlc3QsIFwiTm9uRmlsdGVyYWJsZVByb3BlcnRpZXNcIikgfHwgW107XG5cdFx0b1JldC5Ob25GaWx0ZXJhYmxlUHJvcGVydGllcyA9IHVuaXF1ZVNvcnQob1JldC5Ob25GaWx0ZXJhYmxlUHJvcGVydGllcy5jb25jYXQobmF2QXNzb2NOb25GaWx0ZXJQcm9wcykpO1xuXHRcdC8vU2luZ2xlVmFsdWUgfCBNdWx0aVZhbHVlIHwgU2luZ2xlUmFuZ2UgfCBNdWx0aVJhbmdlIHwgU2VhcmNoRXhwcmVzc2lvbiB8IE11bHRpUmFuZ2VPclNlYXJjaEV4cHJlc3Npb25cblx0XHRvUmV0LkZpbHRlckFsbG93ZWRFeHByZXNzaW9ucyA9IG1lcmdlT2JqZWN0cyhcblx0XHRcdHt9LFxuXHRcdFx0b1JldC5GaWx0ZXJBbGxvd2VkRXhwcmVzc2lvbnMsXG5cdFx0XHRnZXRGaWx0ZXJBbGxvd2VkRXhwcmVzc2lvbihuYXZBc3NvY2lhdGlvbkVudGl0eVJlc3QpIHx8IHt9XG5cdFx0KSBhcyBfRmlsdGVyQWxsb3dlZEV4cHJlc3Npb25zO1xuXHR9XG5cdHJldHVybiBvUmV0O1xufVxuXG50eXBlIFByZXByb2Nlc3NvclNldHRpbmdzID0ge1xuXHRiaW5kaW5nQ29udGV4dHM6IG9iamVjdDtcblx0bW9kZWxzOiBvYmplY3Q7XG59O1xudHlwZSBCYXNlVHJlZU1vZGlmaWVyID0ge1xuXHR0ZW1wbGF0ZUNvbnRyb2xGcmFnbWVudChcblx0XHRzRnJhZ21lbnROYW1lOiBzdHJpbmcsXG5cdFx0bVByZXByb2Nlc3NvclNldHRpbmdzOiBQcmVwcm9jZXNzb3JTZXR0aW5ncyxcblx0XHRvVmlldz86IFZpZXdcblx0KTogUHJvbWlzZTxVSTVFbGVtZW50W10gfCBFbGVtZW50W10+O1xuXHR0YXJnZXRzOiBzdHJpbmc7XG59O1xuXG5hc3luYyBmdW5jdGlvbiB0ZW1wbGF0ZUNvbnRyb2xGcmFnbWVudChcblx0c0ZyYWdtZW50TmFtZTogc3RyaW5nLFxuXHRvUHJlcHJvY2Vzc29yU2V0dGluZ3M6IFByZXByb2Nlc3NvclNldHRpbmdzLFxuXHRvT3B0aW9uczogeyB2aWV3PzogVmlldzsgaXNYTUw/OiBib29sZWFuOyBpZDogc3RyaW5nOyBjb250cm9sbGVyOiBDb250cm9sbGVyIH0sXG5cdG9Nb2RpZmllcj86IEJhc2VUcmVlTW9kaWZpZXJcbik6IFByb21pc2U8RWxlbWVudCB8IFVJNUVsZW1lbnQgfCBFbGVtZW50W10gfCBVSTVFbGVtZW50W10+IHtcblx0b09wdGlvbnMgPSBvT3B0aW9ucyB8fCB7fTtcblx0aWYgKG9Nb2RpZmllcikge1xuXHRcdHJldHVybiBvTW9kaWZpZXIudGVtcGxhdGVDb250cm9sRnJhZ21lbnQoc0ZyYWdtZW50TmFtZSwgb1ByZXByb2Nlc3NvclNldHRpbmdzLCBvT3B0aW9ucy52aWV3KS50aGVuKGZ1bmN0aW9uIChvRnJhZ21lbnQpIHtcblx0XHRcdC8vIFRoaXMgaXMgcmVxdWlyZWQgYXMgRmxleCByZXR1cm5zIGFuIEhUTUxDb2xsZWN0aW9uIGFzIHRlbXBsYXRpbmcgcmVzdWx0IGluIFhNTCB0aW1lLlxuXHRcdFx0cmV0dXJuIG9Nb2RpZmllci50YXJnZXRzID09PSBcInhtbFRyZWVcIiAmJiBvRnJhZ21lbnQubGVuZ3RoID4gMCA/IG9GcmFnbWVudFswXSA6IG9GcmFnbWVudDtcblx0XHR9KTtcblx0fSBlbHNlIHtcblx0XHRyZXR1cm4gbG9hZE1hY3JvTGlicmFyeSgpXG5cdFx0XHQudGhlbihhc3luYyBmdW5jdGlvbiAoKSB7XG5cdFx0XHRcdHJldHVybiBYTUxQcmVwcm9jZXNzb3IucHJvY2Vzcyhcblx0XHRcdFx0XHRYTUxUZW1wbGF0ZVByb2Nlc3Nvci5sb2FkVGVtcGxhdGUoc0ZyYWdtZW50TmFtZSwgXCJmcmFnbWVudFwiKSxcblx0XHRcdFx0XHR7IG5hbWU6IHNGcmFnbWVudE5hbWUgfSxcblx0XHRcdFx0XHRvUHJlcHJvY2Vzc29yU2V0dGluZ3Ncblx0XHRcdFx0KTtcblx0XHRcdH0pXG5cdFx0XHQudGhlbihhc3luYyBmdW5jdGlvbiAob0ZyYWdtZW50OiBFbGVtZW50KTogUHJvbWlzZTxFbGVtZW50IHwgQ29udHJvbCB8IENvbnRyb2xbXT4ge1xuXHRcdFx0XHRjb25zdCBvQ29udHJvbCA9IG9GcmFnbWVudC5maXJzdEVsZW1lbnRDaGlsZDtcblx0XHRcdFx0aWYgKCEhb09wdGlvbnMuaXNYTUwgJiYgb0NvbnRyb2wpIHtcblx0XHRcdFx0XHRyZXR1cm4gb0NvbnRyb2w7XG5cdFx0XHRcdH1cblx0XHRcdFx0cmV0dXJuIEZyYWdtZW50LmxvYWQoe1xuXHRcdFx0XHRcdGlkOiBvT3B0aW9ucy5pZCxcblx0XHRcdFx0XHRkZWZpbml0aW9uOiBvRnJhZ21lbnQgYXMgdW5rbm93biBhcyBzdHJpbmcsXG5cdFx0XHRcdFx0Y29udHJvbGxlcjogb09wdGlvbnMuY29udHJvbGxlclxuXHRcdFx0XHR9KTtcblx0XHRcdH0pO1xuXHR9XG59XG5cbmZ1bmN0aW9uIGdldFNpbmdsZXRvblBhdGgocGF0aDogc3RyaW5nLCBtZXRhTW9kZWw6IE9EYXRhTWV0YU1vZGVsKTogc3RyaW5nIHwgdW5kZWZpbmVkIHtcblx0Y29uc3QgcGFydHMgPSBwYXRoLnNwbGl0KFwiL1wiKS5maWx0ZXIoQm9vbGVhbiksXG5cdFx0cHJvcGVydHlOYW1lID0gcGFydHMucG9wKCkhLFxuXHRcdG5hdmlnYXRpb25QYXRoID0gcGFydHMuam9pbihcIi9cIiksXG5cdFx0ZW50aXR5U2V0ID0gbmF2aWdhdGlvblBhdGggJiYgbWV0YU1vZGVsLmdldE9iamVjdChgLyR7bmF2aWdhdGlvblBhdGh9YCk7XG5cdGlmIChlbnRpdHlTZXQ/LiRraW5kID09PSBcIlNpbmdsZXRvblwiKSB7XG5cdFx0Y29uc3Qgc2luZ2xldG9uTmFtZSA9IHBhcnRzW3BhcnRzLmxlbmd0aCAtIDFdO1xuXHRcdHJldHVybiBgLyR7c2luZ2xldG9uTmFtZX0vJHtwcm9wZXJ0eU5hbWV9YDtcblx0fVxuXHRyZXR1cm4gdW5kZWZpbmVkO1xufVxuXG5hc3luYyBmdW5jdGlvbiByZXF1ZXN0U2luZ2xldG9uUHJvcGVydHkocGF0aDogc3RyaW5nLCBtb2RlbDogT0RhdGFNb2RlbCkge1xuXHRpZiAoIXBhdGggfHwgIW1vZGVsKSB7XG5cdFx0cmV0dXJuIFByb21pc2UucmVzb2x2ZShudWxsKTtcblx0fVxuXHRjb25zdCBtZXRhTW9kZWwgPSBtb2RlbC5nZXRNZXRhTW9kZWwoKTtcblx0Ly8gRmluZCB0aGUgdW5kZXJseWluZyBlbnRpdHkgc2V0IGZyb20gdGhlIHByb3BlcnR5IHBhdGggYW5kIGNoZWNrIHdoZXRoZXIgaXQgaXMgYSBzaW5nbGV0b24uXG5cdGNvbnN0IHJlc29sdmVkUGF0aCA9IGdldFNpbmdsZXRvblBhdGgocGF0aCwgbWV0YU1vZGVsKTtcblx0aWYgKHJlc29sdmVkUGF0aCkge1xuXHRcdGNvbnN0IHByb3BlcnR5QmluZGluZyA9IG1vZGVsLmJpbmRQcm9wZXJ0eShyZXNvbHZlZFBhdGgpO1xuXHRcdHJldHVybiBwcm9wZXJ0eUJpbmRpbmcucmVxdWVzdFZhbHVlKCk7XG5cdH1cblxuXHRyZXR1cm4gUHJvbWlzZS5yZXNvbHZlKG51bGwpO1xufVxuXG5mdW5jdGlvbiBhZGRFdmVudFRvQmluZGluZ0luZm8ob0NvbnRyb2w6IENvbnRyb2wsIHNFdmVudE5hbWU6IHN0cmluZywgZkhhbmRsZXI6IEZ1bmN0aW9uKSB7XG5cdGxldCBvQmluZGluZ0luZm86IEFnZ3JlZ2F0aW9uQmluZGluZ0luZm87XG5cdGNvbnN0IHNldEJpbmRpbmdJbmZvID0gZnVuY3Rpb24gKCkge1xuXHRcdGlmIChvQmluZGluZ0luZm8pIHtcblx0XHRcdGlmICghb0JpbmRpbmdJbmZvLmV2ZW50cykge1xuXHRcdFx0XHRvQmluZGluZ0luZm8uZXZlbnRzID0ge307XG5cdFx0XHR9XG5cdFx0XHRpZiAoIW9CaW5kaW5nSW5mby5ldmVudHNbc0V2ZW50TmFtZV0pIHtcblx0XHRcdFx0b0JpbmRpbmdJbmZvLmV2ZW50c1tzRXZlbnROYW1lXSA9IGZIYW5kbGVyO1xuXHRcdFx0fSBlbHNlIHtcblx0XHRcdFx0Y29uc3QgZk9yaWdpbmFsSGFuZGxlciA9IG9CaW5kaW5nSW5mby5ldmVudHNbc0V2ZW50TmFtZV07XG5cdFx0XHRcdG9CaW5kaW5nSW5mby5ldmVudHNbc0V2ZW50TmFtZV0gPSBmdW5jdGlvbiAoLi4uYXJnczogdW5rbm93bltdKSB7XG5cdFx0XHRcdFx0ZkhhbmRsZXIuYXBwbHkodGhpcywgLi4uYXJncyk7XG5cdFx0XHRcdFx0Zk9yaWdpbmFsSGFuZGxlci5hcHBseSh0aGlzLCAuLi5hcmdzKTtcblx0XHRcdFx0fTtcblx0XHRcdH1cblx0XHR9XG5cdH07XG5cdGlmIChvQ29udHJvbC5pc0E8Q2hhcnQgJiBEZWxlZ2F0ZU1peGluPihcInNhcC51aS5tZGMuQ2hhcnRcIikpIHtcblx0XHRvQ29udHJvbFxuXHRcdFx0LmlubmVyQ2hhcnRCb3VuZCgpXG5cdFx0XHQudGhlbihmdW5jdGlvbiAoKSB7XG5cdFx0XHRcdG9CaW5kaW5nSW5mbyA9IG9Db250cm9sLmdldENvbnRyb2xEZWxlZ2F0ZSgpLl9nZXRDaGFydChvQ29udHJvbCkuZ2V0QmluZGluZ0luZm8oXCJkYXRhXCIpO1xuXHRcdFx0XHRzZXRCaW5kaW5nSW5mbygpO1xuXHRcdFx0XHRyZXR1cm47XG5cdFx0XHR9KVxuXHRcdFx0LmNhdGNoKGZ1bmN0aW9uIChzRXJyb3I6IHVua25vd24pIHtcblx0XHRcdFx0TG9nLmVycm9yKHNFcnJvciBhcyBzdHJpbmcpO1xuXHRcdFx0fSk7XG5cdH0gZWxzZSB7XG5cdFx0b0JpbmRpbmdJbmZvID0gb0NvbnRyb2wuZGF0YShcInJvd3NCaW5kaW5nSW5mb1wiKTtcblx0XHRzZXRCaW5kaW5nSW5mbygpO1xuXHR9XG59XG5cbmFzeW5jIGZ1bmN0aW9uIGxvYWRNYWNyb0xpYnJhcnkoKSB7XG5cdHJldHVybiBuZXcgUHJvbWlzZTx2b2lkPihmdW5jdGlvbiAocmVzb2x2ZSkge1xuXHRcdHNhcC51aS5yZXF1aXJlKFtcInNhcC9mZS9tYWNyb3MvbWFjcm9MaWJyYXJ5XCJdLCBmdW5jdGlvbiAoLyptYWNyb0xpYnJhcnkqLykge1xuXHRcdFx0cmVzb2x2ZSgpO1xuXHRcdH0pO1xuXHR9KTtcbn1cblxuLy8gR2V0IHRoZSBwYXRoIGZvciBhY3Rpb24gcGFyYW1ldGVycyB0aGF0IGlzIG5lZWRlZCB0byByZWFkIHRoZSBhbm5vdGF0aW9uc1xuZnVuY3Rpb24gZ2V0UGFyYW1ldGVyUGF0aChzUGF0aDogc3RyaW5nLCBzUGFyYW1ldGVyOiBzdHJpbmcpIHtcblx0bGV0IHNDb250ZXh0O1xuXHRpZiAoc1BhdGguaW5kZXhPZihcIkAkdWk1Lm92ZXJsb2FkXCIpID4gLTEpIHtcblx0XHRzQ29udGV4dCA9IHNQYXRoLnNwbGl0KFwiQCR1aTUub3ZlcmxvYWRcIilbMF07XG5cdH0gZWxzZSB7XG5cdFx0Ly8gRm9yIFVuYm91bmQgQWN0aW9ucyBpbiBBY3Rpb24gUGFyYW1ldGVyIERpYWxvZ3Ncblx0XHRjb25zdCBhQWN0aW9uID0gc1BhdGguc3BsaXQoXCIvMFwiKVswXS5zcGxpdChcIi5cIik7XG5cdFx0c0NvbnRleHQgPSBgLyR7YUFjdGlvblthQWN0aW9uLmxlbmd0aCAtIDFdfS9gO1xuXHR9XG5cdHJldHVybiBzQ29udGV4dCArIHNQYXJhbWV0ZXI7XG59XG5cbi8qKlxuICogR2V0IHJlc29sdmVkIGV4cHJlc3Npb24gYmluZGluZyB1c2VkIGZvciB0ZXh0cyBhdCBydW50aW1lLlxuICpcbiAqIEBwYXJhbSBleHBCaW5kaW5nXG4gKiBAcGFyYW0gY29udHJvbFxuICogQGZ1bmN0aW9uXG4gKiBAc3RhdGljXG4gKiBAbWVtYmVyb2Ygc2FwLmZlLmNvcmUuQ29tbW9uVXRpbHNcbiAqIEByZXR1cm5zIEEgc3RyaW5nIGFmdGVyIHJlc29sdXRpb24uXG4gKiBAdWk1LXJlc3RyaWN0ZWRcbiAqL1xuZnVuY3Rpb24gX2ZudHJhbnNsYXRlZFRleHRGcm9tRXhwQmluZGluZ1N0cmluZyhleHBCaW5kaW5nOiBzdHJpbmcsIGNvbnRyb2w6IENvbnRyb2wpIHtcblx0Ly8gVGhlIGlkZWEgaGVyZSBpcyB0byBjcmVhdGUgZHVtbXkgZWxlbWVudCB3aXRoIHRoZSBleHByZXNpb24gYmluZGluZy5cblx0Ly8gQWRkaW5nIGl0IGFzIGRlcGVuZGVudCB0byB0aGUgdmlldy9jb250cm9sIHdvdWxkIHByb3BhZ2F0ZSBhbGwgdGhlIG1vZGVscyB0byB0aGUgZHVtbXkgZWxlbWVudCBhbmQgcmVzb2x2ZSB0aGUgYmluZGluZy5cblx0Ly8gV2UgcmVtb3ZlIHRoZSBkdW1teSBlbGVtZW50IGFmdGVyIHRoYXQgYW5kIGRlc3Ryb3kgaXQuXG5cblx0Y29uc3QgYW55UmVzb3VyY2VUZXh0ID0gbmV3IEFueUVsZW1lbnQoeyBhbnlUZXh0OiBleHBCaW5kaW5nIH0pO1xuXHRjb250cm9sLmFkZERlcGVuZGVudChhbnlSZXNvdXJjZVRleHQpO1xuXHRjb25zdCByZXN1bHRUZXh0ID0gYW55UmVzb3VyY2VUZXh0LmdldEFueVRleHQoKTtcblx0Y29udHJvbC5yZW1vdmVEZXBlbmRlbnQoYW55UmVzb3VyY2VUZXh0KTtcblx0YW55UmVzb3VyY2VUZXh0LmRlc3Ryb3koKTtcblxuXHRyZXR1cm4gcmVzdWx0VGV4dDtcbn1cbi8qKlxuICogQ2hlY2sgaWYgdGhlIGN1cnJlbnQgZGV2aWNlIGhhcyBhIHNtYWxsIHNjcmVlbi5cbiAqXG4gKiBAcmV0dXJucyBBIEJvb2xlYW4uXG4gKiBAcHJpdmF0ZVxuICovXG5mdW5jdGlvbiBpc1NtYWxsRGV2aWNlKCkge1xuXHRyZXR1cm4gIXN5c3RlbS5kZXNrdG9wIHx8IERldmljZS5yZXNpemUud2lkdGggPD0gMzIwO1xufVxuLyoqXG4gKiBHZXQgZmlsdGVyIGluZm9ybWF0aW9uIGZvciBhIFNlbGVjdGlvblZhcmlhbnQgYW5ub3RhdGlvbi5cbiAqXG4gKiBAcGFyYW0gb0NvbnRyb2wgVGhlIHRhYmxlL2NoYXJ0IGluc3RhbmNlXG4gKiBAcGFyYW0gc2VsZWN0aW9uVmFyaWFudFBhdGggUmVsYXRpdmUgU2VsZWN0aW9uVmFyaWFudCBhbm5vdGF0aW9uIHBhdGhcbiAqIEBwYXJhbSBpc0NoYXJ0XG4gKiBAcmV0dXJucyBJbmZvcm1hdGlvbiBvbiBmaWx0ZXJzXG4gKiAgZmlsdGVyczogYXJyYXkgb2Ygc2FwLnVpLm1vZGVsLmZpbHRlcnNcbiAqIHRleHQ6IFRleHQgcHJvcGVydHkgb2YgdGhlIFNlbGVjdGlvblZhcmlhbnRcbiAqIEBwcml2YXRlXG4gKiBAdWk1LXJlc3RyaWN0ZWRcbiAqL1xuaW50ZXJmYWNlIElTZWxlY3Rpb25PcHRpb24ge1xuXHRQcm9wZXJ0eU5hbWU6IHsgJFByb3BlcnR5UGF0aDogc3RyaW5nIH07XG5cdFJhbmdlczoge1xuXHRcdFtrZXk6IHN0cmluZ106IHtcblx0XHRcdE9wdGlvbjogeyAkRW51bU1lbWJlcjogU3RyaW5nIH07XG5cdFx0XHRMb3c6IHVua25vd247XG5cdFx0XHRIaWdoOiB1bmtub3duO1xuXHRcdH07XG5cdH07XG59XG5mdW5jdGlvbiBnZXRGaWx0ZXJzSW5mb0ZvclNWKG9Db250cm9sOiBDb250cm9sIHwgTURDQ2hhcnQgfCBNRENUYWJsZSwgc2VsZWN0aW9uVmFyaWFudFBhdGg6IHN0cmluZywgaXNDaGFydD86IGJvb2xlYW4pIHtcblx0Y29uc3Qgc0VudGl0eVR5cGVQYXRoID0gb0NvbnRyb2wuZGF0YShcImVudGl0eVR5cGVcIiksXG5cdFx0b01ldGFNb2RlbCA9IENvbW1vblV0aWxzLmdldEFwcENvbXBvbmVudChvQ29udHJvbCBhcyBDb250cm9sKS5nZXRNZXRhTW9kZWwoKSxcblx0XHRtUHJvcGVydHlGaWx0ZXJzOiBSZWNvcmQ8c3RyaW5nLCBGaWx0ZXJbXT4gPSB7fSxcblx0XHRhRmlsdGVycyA9IFtdLFxuXHRcdGFQYXRoczogc3RyaW5nW10gPSBbXTtcblx0bGV0IHNUZXh0ID0gXCJcIjtcblx0bGV0IG9TZWxlY3Rpb25WYXJpYW50ID0gb01ldGFNb2RlbC5nZXRPYmplY3QoYCR7c0VudGl0eVR5cGVQYXRofSR7c2VsZWN0aW9uVmFyaWFudFBhdGh9YCk7XG5cdC8vIGZvciBjaGFydCB0aGUgc3RydWN0dXJlIHZhcmllcyBoZW5jZSByZWFkIGl0IGZyb20gbWFpbiBvYmplY3Rcblx0aWYgKGlzQ2hhcnQpIHtcblx0XHRvU2VsZWN0aW9uVmFyaWFudCA9IG9TZWxlY3Rpb25WYXJpYW50LlNlbGVjdGlvblZhcmlhbnQ7XG5cdH1cblx0aWYgKG9TZWxlY3Rpb25WYXJpYW50KSB7XG5cdFx0c1RleHQgPSBvU2VsZWN0aW9uVmFyaWFudC5UZXh0O1xuXHRcdChvU2VsZWN0aW9uVmFyaWFudC5TZWxlY3RPcHRpb25zIHx8IFtdKVxuXHRcdFx0LmZpbHRlcihmdW5jdGlvbiAob1NlbGVjdE9wdGlvbjogSVNlbGVjdGlvbk9wdGlvbikge1xuXHRcdFx0XHRyZXR1cm4gb1NlbGVjdE9wdGlvbiAmJiBvU2VsZWN0T3B0aW9uLlByb3BlcnR5TmFtZSAmJiBvU2VsZWN0T3B0aW9uLlByb3BlcnR5TmFtZS4kUHJvcGVydHlQYXRoO1xuXHRcdFx0fSlcblx0XHRcdC5mb3JFYWNoKGZ1bmN0aW9uIChvU2VsZWN0T3B0aW9uOiBJU2VsZWN0aW9uT3B0aW9uKSB7XG5cdFx0XHRcdGNvbnN0IHNQYXRoID0gb1NlbGVjdE9wdGlvbi5Qcm9wZXJ0eU5hbWUuJFByb3BlcnR5UGF0aDtcblx0XHRcdFx0aWYgKCFhUGF0aHMuaW5jbHVkZXMoc1BhdGgpKSB7XG5cdFx0XHRcdFx0YVBhdGhzLnB1c2goc1BhdGgpO1xuXHRcdFx0XHR9XG5cdFx0XHRcdGZvciAoY29uc3QgaiBpbiBvU2VsZWN0T3B0aW9uLlJhbmdlcykge1xuXHRcdFx0XHRcdGNvbnN0IG9SYW5nZSA9IG9TZWxlY3RPcHRpb24uUmFuZ2VzW2pdO1xuXHRcdFx0XHRcdG1Qcm9wZXJ0eUZpbHRlcnNbc1BhdGhdID0gKG1Qcm9wZXJ0eUZpbHRlcnNbc1BhdGhdIHx8IFtdKS5jb25jYXQoXG5cdFx0XHRcdFx0XHRuZXcgRmlsdGVyKHNQYXRoLCBvUmFuZ2UuT3B0aW9uPy4kRW51bU1lbWJlcj8uc3BsaXQoXCIvXCIpLnBvcCgpIGFzIHVuZGVmaW5lZCwgb1JhbmdlLkxvdywgb1JhbmdlLkhpZ2gpXG5cdFx0XHRcdFx0KTtcblx0XHRcdFx0fVxuXHRcdFx0fSk7XG5cblx0XHRmb3IgKGNvbnN0IHNQcm9wZXJ0eVBhdGggaW4gbVByb3BlcnR5RmlsdGVycykge1xuXHRcdFx0YUZpbHRlcnMucHVzaChcblx0XHRcdFx0bmV3IEZpbHRlcih7XG5cdFx0XHRcdFx0ZmlsdGVyczogbVByb3BlcnR5RmlsdGVyc1tzUHJvcGVydHlQYXRoXSxcblx0XHRcdFx0XHRhbmQ6IGZhbHNlXG5cdFx0XHRcdH0pXG5cdFx0XHQpO1xuXHRcdH1cblx0fVxuXG5cdHJldHVybiB7XG5cdFx0cHJvcGVydGllczogYVBhdGhzLFxuXHRcdGZpbHRlcnM6IGFGaWx0ZXJzLFxuXHRcdHRleHQ6IHNUZXh0XG5cdH07XG59XG5cbmZ1bmN0aW9uIGdldENvbnZlcnRlckNvbnRleHRGb3JQYXRoKHNNZXRhUGF0aDogc3RyaW5nLCBvTWV0YU1vZGVsOiBPRGF0YU1ldGFNb2RlbCwgc0VudGl0eVNldDogc3RyaW5nLCBvRGlhZ25vc3RpY3M6IERpYWdub3N0aWNzKSB7XG5cdGNvbnN0IG9Db250ZXh0ID0gb01ldGFNb2RlbC5jcmVhdGVCaW5kaW5nQ29udGV4dChzTWV0YVBhdGgpIGFzIE9EYXRhVjRDb250ZXh0O1xuXHRyZXR1cm4gQ29udmVydGVyQ29udGV4dD8uY3JlYXRlQ29udmVydGVyQ29udGV4dEZvck1hY3JvKHNFbnRpdHlTZXQsIG9Db250ZXh0IHx8IG9NZXRhTW9kZWwsIG9EaWFnbm9zdGljcywgbWVyZ2VPYmplY3RzLCB1bmRlZmluZWQpO1xufVxuXG4vKipcbiAqIFRoaXMgZnVuY3Rpb24gcmV0dXJucyBhbiBJRCB3aGljaCBzaG91bGQgYmUgdXNlZCBpbiB0aGUgaW50ZXJuYWwgY2hhcnQgZm9yIHRoZSBtZWFzdXJlIG9yIGRpbWVuc2lvbi5cbiAqIEZvciBzdGFuZGFyZCBjYXNlcywgdGhpcyBpcyBqdXN0IHRoZSBJRCBvZiB0aGUgcHJvcGVydHkuXG4gKiBJZiBpdCBpcyBuZWNlc3NhcnkgdG8gdXNlIGFub3RoZXIgSUQgaW50ZXJuYWxseSBpbnNpZGUgdGhlIGNoYXJ0IChlLmcuIG9uIGR1cGxpY2F0ZSBwcm9wZXJ0eSBJRHMpIHRoaXMgbWV0aG9kIGNhbiBiZSBvdmVyd3JpdHRlbi5cbiAqIEluIHRoaXMgY2FzZSwgPGNvZGU+Z2V0UHJvcGVydHlGcm9tTmFtZUFuZEtpbmQ8L2NvZGU+IG5lZWRzIHRvIGJlIG92ZXJ3cml0dGVuIGFzIHdlbGwuXG4gKlxuICogQHBhcmFtIG5hbWUgSUQgb2YgdGhlIHByb3BlcnR5XG4gKiBAcGFyYW0ga2luZCBUeXBlIG9mIHRoZSBwcm9wZXJ0eSAobWVhc3VyZSBvciBkaW1lbnNpb24pXG4gKiBAcmV0dXJucyBJbnRlcm5hbCBJRCBmb3IgdGhlIHNhcC5jaGFydC5DaGFydFxuICogQHByaXZhdGVcbiAqIEB1aTUtcmVzdHJpY3RlZFxuICovXG5mdW5jdGlvbiBnZXRJbnRlcm5hbENoYXJ0TmFtZUZyb21Qcm9wZXJ0eU5hbWVBbmRLaW5kKG5hbWU6IHN0cmluZywga2luZDogc3RyaW5nKSB7XG5cdHJldHVybiBuYW1lLnJlcGxhY2UoXCJfZmVfXCIgKyBraW5kICsgXCJfXCIsIFwiXCIpO1xufVxuXG4vKipcbiAqIFRoaXMgZnVuY3Rpb24gcmV0dXJucyBhbiBhcnJheSBvZiBjaGFydCBwcm9wZXJ0aWVzIGJ5IHJlbXZvaW5nIF9mZV9ncm91cGFibGUgcHJlZml4LlxuICpcbiAqIEBwYXJhbSB7QXJyYXl9IGFGaWx0ZXJzIENoYXJ0IGZpbHRlciBwcm9wZXJ0aWVzXG4gKiBAcmV0dXJucyBDaGFydCBwcm9wZXJ0aWVzIHdpdGhvdXQgcHJlZml4ZXNcbiAqIEBwcml2YXRlXG4gKiBAdWk1LXJlc3RyaWN0ZWRcbiAqL1xuaW50ZXJmYWNlIElGaWx0ZXJQcm9wIHtcblx0c1BhdGg6IHN0cmluZztcbn1cbmZ1bmN0aW9uIGdldENoYXJ0UHJvcGVydGllc1dpdGhvdXRQcmVmaXhlcyhhRmlsdGVyczogSUZpbHRlclByb3BbXSkge1xuXHRhRmlsdGVycy5mb3JFYWNoKChlbGVtZW50OiBJRmlsdGVyUHJvcCkgPT4ge1xuXHRcdGlmIChlbGVtZW50LnNQYXRoICYmIGVsZW1lbnQuc1BhdGguaW5jbHVkZXMoXCJmZV9ncm91cGFibGVcIikpIHtcblx0XHRcdGVsZW1lbnQuc1BhdGggPSBDb21tb25VdGlscy5nZXRJbnRlcm5hbENoYXJ0TmFtZUZyb21Qcm9wZXJ0eU5hbWVBbmRLaW5kKGVsZW1lbnQuc1BhdGgsIFwiZ3JvdXBhYmxlXCIpO1xuXHRcdH1cblx0fSk7XG5cdHJldHVybiBhRmlsdGVycztcbn1cblxuY29uc3QgQ29tbW9uVXRpbHMgPSB7XG5cdGlzRmllbGRDb250cm9sUGF0aEluYXBwbGljYWJsZTogaXNGaWVsZENvbnRyb2xQYXRoSW5hcHBsaWNhYmxlLFxuXHRyZW1vdmVTZW5zaXRpdmVEYXRhOiByZW1vdmVTZW5zaXRpdmVEYXRhLFxuXHRmaXJlQnV0dG9uUHJlc3M6IGZuRmlyZUJ1dHRvblByZXNzLFxuXHRnZXRUYXJnZXRWaWV3OiBnZXRUYXJnZXRWaWV3LFxuXHRnZXRDdXJyZW50UGFnZVZpZXc6IGdldEN1cnJlbnRQYWdlVmlldyxcblx0aGFzVHJhbnNpZW50Q29udGV4dDogZm5IYXNUcmFuc2llbnRDb250ZXh0cyxcblx0dXBkYXRlUmVsYXRlZEFwcHNEZXRhaWxzOiBmblVwZGF0ZVJlbGF0ZWRBcHBzRGV0YWlscyxcblx0cmVzb2x2ZVN0cmluZ3RvQm9vbGVhbjogZm5SZXNvbHZlU3RyaW5ndG9Cb29sZWFuLFxuXHRnZXRBcHBDb21wb25lbnQ6IGdldEFwcENvbXBvbmVudCxcblx0Z2V0TWFuZGF0b3J5RmlsdGVyRmllbGRzOiBmbkdldE1hbmRhdG9yeUZpbHRlckZpZWxkcyxcblx0Z2V0Q29udGV4dFBhdGhQcm9wZXJ0aWVzOiBmbkdldENvbnRleHRQYXRoUHJvcGVydGllcyxcblx0Z2V0UGFyYW1ldGVySW5mbzogZ2V0UGFyYW1ldGVySW5mbyxcblx0dXBkYXRlRGF0YUZpZWxkRm9ySUJOQnV0dG9uc1Zpc2liaWxpdHk6IGZuVXBkYXRlRGF0YUZpZWxkRm9ySUJOQnV0dG9uc1Zpc2liaWxpdHksXG5cdGdldEVudGl0eVNldE5hbWU6IGdldEVudGl0eVNldE5hbWUsXG5cdGdldEFjdGlvblBhdGg6IGdldEFjdGlvblBhdGgsXG5cdGNvbXB1dGVEaXNwbGF5TW9kZTogY29tcHV0ZURpc3BsYXlNb2RlLFxuXHRpc1N0aWNreUVkaXRNb2RlOiBpc1N0aWNreUVkaXRNb2RlLFxuXHRnZXRPcGVyYXRvcnNGb3JQcm9wZXJ0eTogZ2V0T3BlcmF0b3JzRm9yUHJvcGVydHksXG5cdGdldE9wZXJhdG9yc0ZvckRhdGVQcm9wZXJ0eTogZ2V0T3BlcmF0b3JzRm9yRGF0ZVByb3BlcnR5LFxuXHRnZXRPcGVyYXRvcnNGb3JHdWlkUHJvcGVydHk6IGdldE9wZXJhdG9yc0Zvckd1aWRQcm9wZXJ0eSxcblx0YWRkU2VsZWN0aW9uVmFyaWFudFRvQ29uZGl0aW9uczogYWRkU2VsZWN0aW9uVmFyaWFudFRvQ29uZGl0aW9ucyxcblx0YWRkRXh0ZXJuYWxTdGF0ZUZpbHRlcnNUb1NlbGVjdGlvblZhcmlhbnQ6IGFkZEV4dGVybmFsU3RhdGVGaWx0ZXJzVG9TZWxlY3Rpb25WYXJpYW50LFxuXHRhZGRQYWdlQ29udGV4dFRvU2VsZWN0aW9uVmFyaWFudDogYWRkUGFnZUNvbnRleHRUb1NlbGVjdGlvblZhcmlhbnQsXG5cdGFkZERlZmF1bHREaXNwbGF5Q3VycmVuY3k6IGFkZERlZmF1bHREaXNwbGF5Q3VycmVuY3ksXG5cdHNldFVzZXJEZWZhdWx0czogc2V0VXNlckRlZmF1bHRzLFxuXHRnZXRTaGVsbFNlcnZpY2VzOiBnZXRTaGVsbFNlcnZpY2VzLFxuXHRnZXRIYXNoOiBnZXRIYXNoLFxuXHRnZXRJQk5BY3Rpb25zOiBmbkdldElCTkFjdGlvbnMsXG5cdGdldEhlYWRlckZhY2V0SXRlbUNvbmZpZ0ZvckV4dGVybmFsTmF2aWdhdGlvbjogZ2V0SGVhZGVyRmFjZXRJdGVtQ29uZmlnRm9yRXh0ZXJuYWxOYXZpZ2F0aW9uLFxuXHRnZXRTZW1hbnRpY09iamVjdE1hcHBpbmc6IGdldFNlbWFudGljT2JqZWN0TWFwcGluZyxcblx0c2V0U2VtYW50aWNPYmplY3RNYXBwaW5nczogc2V0U2VtYW50aWNPYmplY3RNYXBwaW5ncyxcblx0Z2V0U2VtYW50aWNPYmplY3RQcm9taXNlOiBmbkdldFNlbWFudGljT2JqZWN0UHJvbWlzZSxcblx0Z2V0U2VtYW50aWNUYXJnZXRzRnJvbVBhZ2VNb2RlbDogZm5HZXRTZW1hbnRpY1RhcmdldHNGcm9tUGFnZU1vZGVsLFxuXHRnZXRTZW1hbnRpY09iamVjdHNGcm9tUGF0aDogZm5HZXRTZW1hbnRpY09iamVjdHNGcm9tUGF0aCxcblx0dXBkYXRlU2VtYW50aWNUYXJnZXRzOiBmblVwZGF0ZVNlbWFudGljVGFyZ2V0c01vZGVsLFxuXHR3YWl0Rm9yQ29udGV4dFJlcXVlc3RlZDogd2FpdEZvckNvbnRleHRSZXF1ZXN0ZWQsXG5cdGdldEZpbHRlclJlc3RyaWN0aW9uc0J5UGF0aDogZ2V0RmlsdGVyUmVzdHJpY3Rpb25zQnlQYXRoLFxuXHRnZXRTcGVjaWZpY0FsbG93ZWRFeHByZXNzaW9uOiBnZXRTcGVjaWZpY0FsbG93ZWRFeHByZXNzaW9uLFxuXHRnZXRBZGRpdGlvbmFsUGFyYW1zRm9yQ3JlYXRlOiBnZXRBZGRpdGlvbmFsUGFyYW1zRm9yQ3JlYXRlLFxuXHRyZXF1ZXN0U2luZ2xldG9uUHJvcGVydHk6IHJlcXVlc3RTaW5nbGV0b25Qcm9wZXJ0eSxcblx0dGVtcGxhdGVDb250cm9sRnJhZ21lbnQ6IHRlbXBsYXRlQ29udHJvbEZyYWdtZW50LFxuXHRhZGRFdmVudFRvQmluZGluZ0luZm86IGFkZEV2ZW50VG9CaW5kaW5nSW5mbyxcblx0RmlsdGVyUmVzdHJpY3Rpb25zOiB7XG5cdFx0UkVRVUlSRURfUFJPUEVSVElFUzogXCJSZXF1aXJlZFByb3BlcnRpZXNcIixcblx0XHROT05fRklMVEVSQUJMRV9QUk9QRVJUSUVTOiBcIk5vbkZpbHRlcmFibGVQcm9wZXJ0aWVzXCIsXG5cdFx0QUxMT1dFRF9FWFBSRVNTSU9OUzogXCJGaWx0ZXJBbGxvd2VkRXhwcmVzc2lvbnNcIlxuXHR9LFxuXHRBbGxvd2VkRXhwcmVzc2lvbnNQcmlvOiBbXCJTaW5nbGVWYWx1ZVwiLCBcIk11bHRpVmFsdWVcIiwgXCJTaW5nbGVSYW5nZVwiLCBcIk11bHRpUmFuZ2VcIiwgXCJTZWFyY2hFeHByZXNzaW9uXCIsIFwiTXVsdGlSYW5nZU9yU2VhcmNoRXhwcmVzc2lvblwiXSxcblx0bm9ybWFsaXplU2VhcmNoVGVybTogbm9ybWFsaXplU2VhcmNoVGVybSxcblx0Z2V0U2luZ2xldG9uUGF0aDogZ2V0U2luZ2xldG9uUGF0aCxcblx0c2V0Q29udGV4dHNCYXNlZE9uT3BlcmF0aW9uQXZhaWxhYmxlOiBzZXRDb250ZXh0c0Jhc2VkT25PcGVyYXRpb25BdmFpbGFibGUsXG5cdHNldER5bmFtaWNBY3Rpb25Db250ZXh0czogc2V0RHluYW1pY0FjdGlvbkNvbnRleHRzLFxuXHRyZXF1ZXN0UHJvcGVydHk6IHJlcXVlc3RQcm9wZXJ0eSxcblx0Z2V0UGFyYW1ldGVyUGF0aDogZ2V0UGFyYW1ldGVyUGF0aCxcblx0Z2V0UmVsYXRlZEFwcHNNZW51SXRlbXM6IF9nZXRSZWxhdGVkQXBwc01lbnVJdGVtcyxcblx0Z2V0VHJhbnNsYXRlZFRleHRGcm9tRXhwQmluZGluZ1N0cmluZzogX2ZudHJhbnNsYXRlZFRleHRGcm9tRXhwQmluZGluZ1N0cmluZyxcblx0YWRkU2VtYW50aWNEYXRlc1RvQ29uZGl0aW9uczogYWRkU2VtYW50aWNEYXRlc1RvQ29uZGl0aW9ucyxcblx0YWRkU2VsZWN0T3B0aW9uVG9Db25kaXRpb25zOiBhZGRTZWxlY3RPcHRpb25Ub0NvbmRpdGlvbnMsXG5cdGNyZWF0ZVNlbWFudGljRGF0ZXNGcm9tQ29uZGl0aW9uczogY3JlYXRlU2VtYW50aWNEYXRlc0Zyb21Db25kaXRpb25zLFxuXHR1cGRhdGVSZWxhdGVBcHBzTW9kZWw6IHVwZGF0ZVJlbGF0ZUFwcHNNb2RlbCxcblx0Z2V0U2VtYW50aWNPYmplY3RBbm5vdGF0aW9uczogX2dldFNlbWFudGljT2JqZWN0QW5ub3RhdGlvbnMsXG5cdGdldEZpbHRlcnNJbmZvRm9yU1Y6IGdldEZpbHRlcnNJbmZvRm9yU1YsXG5cdGdldEludGVybmFsQ2hhcnROYW1lRnJvbVByb3BlcnR5TmFtZUFuZEtpbmQ6IGdldEludGVybmFsQ2hhcnROYW1lRnJvbVByb3BlcnR5TmFtZUFuZEtpbmQsXG5cdGdldENoYXJ0UHJvcGVydGllc1dpdGhvdXRQcmVmaXhlczogZ2V0Q2hhcnRQcm9wZXJ0aWVzV2l0aG91dFByZWZpeGVzLFxuXHRpc1NtYWxsRGV2aWNlLFxuXHRnZXRDb252ZXJ0ZXJDb250ZXh0Rm9yUGF0aFxufTtcblxuZXhwb3J0IGRlZmF1bHQgQ29tbW9uVXRpbHM7XG4iXSwibWFwcGluZ3MiOiI7QUFBQTtBQUFBO0FBQUE7Ozs7Ozs7Ozs7RUFnRkEsU0FBU0EsbUJBQW1CLENBQUNDLFdBQW1CLEVBQUU7SUFDakQsSUFBSSxDQUFDQSxXQUFXLEVBQUU7TUFDakIsT0FBT0MsU0FBUztJQUNqQjtJQUVBLE9BQU9ELFdBQVcsQ0FDaEJFLE9BQU8sQ0FBQyxJQUFJLEVBQUUsR0FBRyxDQUFDLENBQ2xCQSxPQUFPLENBQUMsS0FBSyxFQUFFLE1BQU0sQ0FBQyxDQUFDO0lBQUEsQ0FDdkJDLEtBQUssQ0FBQyxLQUFLLENBQUMsQ0FDWkMsTUFBTSxDQUFDLFVBQVVDLFdBQStCLEVBQUVDLFlBQW9CLEVBQUU7TUFDeEUsSUFBSUEsWUFBWSxLQUFLLEVBQUUsRUFBRTtRQUN4QkQsV0FBVyxHQUFJLEdBQUVBLFdBQVcsR0FBSSxHQUFFQSxXQUFZLEdBQUUsR0FB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
1804
+ //# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJuYW1lcyI6WyJub3JtYWxpemVTZWFyY2hUZXJtIiwic1NlYXJjaFRlcm0iLCJ1bmRlZmluZWQiLCJyZXBsYWNlIiwic3BsaXQiLCJyZWR1Y2UiLCJzTm9ybWFsaXplZCIsInNDdXJyZW50V29yZCIsIndhaXRGb3JDb250ZXh0UmVxdWVzdGVkIiwiYmluZGluZ0NvbnRleHQiLCJtb2RlbCIsImdldE1vZGVsIiwibWV0YU1vZGVsIiwiZ2V0TWV0YU1vZGVsIiwiZW50aXR5UGF0aCIsImdldE1ldGFQYXRoIiwiZ2V0UGF0aCIsImRhdGFNb2RlbCIsIk1ldGFNb2RlbENvbnZlcnRlciIsImdldEludm9sdmVkRGF0YU1vZGVsT2JqZWN0cyIsImdldENvbnRleHQiLCJyZXF1ZXN0UHJvcGVydHkiLCJ0YXJnZXRFbnRpdHlUeXBlIiwia2V5cyIsIm5hbWUiLCJmbkhhc1RyYW5zaWVudENvbnRleHRzIiwib0xpc3RCaW5kaW5nIiwiYkhhc1RyYW5zaWVudENvbnRleHRzIiwiZ2V0Q3VycmVudENvbnRleHRzIiwiZm9yRWFjaCIsIm9Db250ZXh0IiwiaXNUcmFuc2llbnQiLCJfZ2V0U09JbnRlbnRzIiwib1NoZWxsU2VydmljZUhlbHBlciIsIm9PYmplY3RQYWdlTGF5b3V0Iiwib1NlbWFudGljT2JqZWN0Iiwib1BhcmFtIiwiZ2V0TGlua3MiLCJzZW1hbnRpY09iamVjdCIsInBhcmFtcyIsIl9jcmVhdGVNYXBwaW5ncyIsIm9NYXBwaW5nIiwiYVNPTWFwcGluZ3MiLCJhTWFwcGluZ0tleXMiLCJPYmplY3QiLCJvU2VtYW50aWNNYXBwaW5nIiwiaSIsImxlbmd0aCIsIkxvY2FsUHJvcGVydHkiLCIkUHJvcGVydHlQYXRoIiwiU2VtYW50aWNPYmplY3RQcm9wZXJ0eSIsInB1c2giLCJfZ2V0UmVsYXRlZEFwcHNNZW51SXRlbXMiLCJhTGlua3MiLCJhRXhjbHVkZWRBY3Rpb25zIiwib1RhcmdldFBhcmFtcyIsImFJdGVtcyIsImFBbGxvd2VkQWN0aW9ucyIsIm9MaW5rIiwic0ludGVudCIsImludGVudCIsInNBY3Rpb24iLCJpbmNsdWRlcyIsInRleHQiLCJ0YXJnZXRTZW1PYmplY3QiLCJ0YXJnZXRBY3Rpb24iLCJ0YXJnZXRQYXJhbXMiLCJpbmRleE9mIiwiX2dldFJlbGF0ZWRJbnRlbnRzIiwib0FkZGl0aW9uYWxTZW1hbnRpY09iamVjdHMiLCJvQmluZGluZ0NvbnRleHQiLCJhTWFuaWZlc3RTT0l0ZW1zIiwiYWxsb3dlZEFjdGlvbnMiLCJ1bmF2YWlsYWJsZUFjdGlvbnMiLCJtYXBwaW5nIiwibmF2aWdhdGlvbkNvbnRleHRzIiwic2VtYW50aWNPYmplY3RNYXBwaW5nIiwiX2dldFJlbGF0ZWRJbnRlbnRzV2l0aFNlbWFudGljT2JqZWN0c0FuZEFjdGlvbiIsInNlbWFudGljT2JqZWN0QW5kQWN0aW9uIiwiYXBwQ29tcG9uZW50U09JdGVtcyIsImFjdGlvbnMiLCJhY3Rpb24iLCJleGNsdWRlZEFjdGlvbnMiLCJzb01hcHBpbmdzIiwidXBkYXRlUmVsYXRlQXBwc01vZGVsIiwib0VudHJ5IiwiYVNlbUtleXMiLCJvTWV0YU1vZGVsIiwib01ldGFQYXRoIiwiYXBwQ29tcG9uZW50IiwiZ2V0U2hlbGxTZXJ2aWNlcyIsInNDdXJyZW50U2VtT2JqIiwic0N1cnJlbnRBY3Rpb24iLCJvU2VtYW50aWNPYmplY3RBbm5vdGF0aW9ucyIsImFSZWxhdGVkQXBwc01lbnVJdGVtcyIsImFNYW5pZmVzdFNPS2V5cyIsImZuR2V0UGFyc2VTaGVsbEhhc2hBbmRHZXRMaW5rcyIsIm9QYXJzZWRVcmwiLCJwYXJzZVNoZWxsSGFzaCIsImRvY3VtZW50IiwibG9jYXRpb24iLCJoYXNoIiwiaiIsInNTZW1LZXkiLCJ2YWx1ZSIsImFUZWNobmljYWxLZXlzIiwiZ2V0T2JqZWN0Iiwia2V5Iiwic09iaktleSIsIm9NYW5pZmVzdERhdGEiLCJnZXRUYXJnZXRWaWV3IiwiZ2V0Vmlld0RhdGEiLCJzZW1hbnRpY09iamVjdEludGVudHMiLCJhZGRpdGlvbmFsU2VtYW50aWNPYmplY3RzIiwiUHJvbWlzZSIsInJlc29sdmUiLCJjb21wb25lbnREYXRhIiwiZ2V0Q29tcG9uZW50RGF0YSIsImZlRW52aXJvbm1lbnQiLCJnZXRJbnRlbnQiLCJpbnRlcm5hbE1vZGVsQ29udGV4dCIsImdldEJpbmRpbmdDb250ZXh0IiwiaXNTZW1hbnRpY09iamVjdEhhc1NhbWVUYXJnZXRJbk1hbmlmZXN0IiwiYUFubm90YXRpb25zU09JdGVtcyIsInNFbnRpdHlTZXRQYXRoIiwic0VudGl0eVR5cGVQYXRoIiwib0VudGl0eVNldEFubm90YXRpb25zIiwiQ29tbW9uVXRpbHMiLCJnZXRTZW1hbnRpY09iamVjdEFubm90YXRpb25zIiwiYkhhc0VudGl0eVNldFNPIiwib0VudGl0eVR5cGVBbm5vdGF0aW9ucyIsImFVbmF2YWlsYWJsZUFjdGlvbnMiLCJhTWFwcGluZ3MiLCJzb0l0ZW1zIiwiY29uY2F0Iiwic2V0UHJvcGVydHkiLCJlcnJvciIsIkxvZyIsIl9nZXRTZW1hbnRpY09iamVjdEFubm90YXRpb25zIiwib0VudGl0eUFubm90YXRpb25zIiwic0Fubm90YXRpb25NYXBwaW5nVGVybSIsInNBbm5vdGF0aW9uQWN0aW9uVGVybSIsInNRdWFsaWZpZXIiLCJmblVwZGF0ZVJlbGF0ZWRBcHBzRGV0YWlscyIsInBhdGgiLCJzU2VtYW50aWNLZXlWb2NhYnVsYXJ5IiwicmVxdWVzdE9iamVjdCIsInRoZW4iLCJyZXF1ZXN0ZWRPYmplY3QiLCJjYXRjaCIsIm9FcnJvciIsImZuRmlyZUJ1dHRvblByZXNzIiwib0J1dHRvbiIsImlzQSIsImdldFZpc2libGUiLCJnZXRFbmFibGVkIiwiZmlyZVByZXNzIiwiZ2V0QXBwQ29tcG9uZW50Iiwib0NvbnRyb2wiLCJvT3duZXIiLCJDb21wb25lbnQiLCJnZXRPd25lckNvbXBvbmVudEZvciIsIkVycm9yIiwiZ2V0Q3VycmVudFBhZ2VWaWV3Iiwib0FwcENvbXBvbmVudCIsInJvb3RWaWV3Q29udHJvbGxlciIsImdldFJvb3RWaWV3Q29udHJvbGxlciIsImlzRmNsRW5hYmxlZCIsImdldFJpZ2h0bW9zdFZpZXciLCJnZXRSb290Q29udGFpbmVyIiwiZ2V0Q3VycmVudFBhZ2UiLCJvQ29tcG9uZW50IiwiZ2V0Q29tcG9uZW50SW5zdGFuY2UiLCJnZXRSb290Q29udHJvbCIsImdldFBhcmVudCIsIl9mbkNoZWNrSXNNYXRjaCIsIm9PYmplY3QiLCJvS2V5c1RvQ2hlY2siLCJzS2V5IiwiZm5HZXRDb250ZXh0UGF0aFByb3BlcnRpZXMiLCJtZXRhTW9kZWxDb250ZXh0Iiwic0NvbnRleHRQYXRoIiwib0ZpbHRlciIsIm9FbnRpdHlUeXBlIiwib1Byb3BlcnRpZXMiLCJoYXNPd25Qcm9wZXJ0eSIsInRlc3QiLCIka2luZCIsImZuR2V0TWFuZGF0b3J5RmlsdGVyRmllbGRzIiwiYU1hbmRhdG9yeUZpbHRlckZpZWxkcyIsImZuR2V0SUJOQWN0aW9ucyIsImFJQk5BY3Rpb25zIiwiYUFjdGlvbnMiLCJnZXRBY3Rpb25zIiwib0FjdGlvbiIsImdldEFjdGlvbiIsIm9NZW51IiwiZ2V0TWVudSIsImdldEl0ZW1zIiwib0l0ZW0iLCJkYXRhIiwiZm5VcGRhdGVEYXRhRmllbGRGb3JJQk5CdXR0b25zVmlzaWJpbGl0eSIsIm9WaWV3Iiwib1BhcmFtcyIsImlzU3RpY2t5IiwiTW9kZWxIZWxwZXIiLCJpc1N0aWNreVNlc3Npb25TdXBwb3J0ZWQiLCJmbkdldExpbmtzIiwib0RhdGEiLCJhS2V5cyIsIm9JQk5BY3Rpb24iLCJzU2VtYW50aWNPYmplY3QiLCJhTGluayIsInNldFZpc2libGUiLCJnZXRJZCIsInNoZWxsTmF2aWdhdGlvbk5vdEF2YWlsYWJsZSIsImdldEFjdGlvblBhdGgiLCJhY3Rpb25Db250ZXh0IiwiYlJldHVybk9ubHlQYXRoIiwiaW5BY3Rpb25OYW1lIiwiYkNoZWNrU3RhdGljVmFsdWUiLCJzQWN0aW9uTmFtZSIsInRvU3RyaW5nIiwic0VudGl0eVR5cGVOYW1lIiwiJFR5cGUiLCJzRW50aXR5TmFtZSIsImdldEVudGl0eVNldE5hbWUiLCJzUHJvcGVydHkiLCJzQmluZGluZ1BhcmFtZXRlciIsInNFbnRpdHlUeXBlIiwib0VudGl0eUNvbnRhaW5lciIsImNvbXB1dGVEaXNwbGF5TW9kZSIsIm9Qcm9wZXJ0eUFubm90YXRpb25zIiwib0NvbGxlY3Rpb25Bbm5vdGF0aW9ucyIsIm9UZXh0QW5ub3RhdGlvbiIsIm9UZXh0QXJyYW5nZW1lbnRBbm5vdGF0aW9uIiwiJEVudW1NZW1iZXIiLCJfZ2V0RW50aXR5VHlwZSIsIl9yZXF1ZXN0T2JqZWN0Iiwib1NlbGVjdGVkQ29udGV4dCIsIm5CcmFja2V0SW5kZXgiLCJzVGFyZ2V0VHlwZSIsInNsaWNlIiwic0N1cnJlbnRUeXBlIiwiZ2V0QmluZGluZyIsIndhcm5pbmciLCJzRHluYW1pY0FjdGlvbkVuYWJsZWRQYXRoIiwib1Byb21pc2UiLCJyZXF1ZXN0U2luZ2xldG9uUHJvcGVydHkiLCJ2UHJvcGVydHlWYWx1ZSIsInNldENvbnRleHRzQmFzZWRPbk9wZXJhdGlvbkF2YWlsYWJsZSIsIm9JbnRlcm5hbE1vZGVsQ29udGV4dCIsImFSZXF1ZXN0UHJvbWlzZXMiLCJhbGwiLCJhUmVzdWx0cyIsImFBcHBsaWNhYmxlQ29udGV4dHMiLCJhTm90QXBwbGljYWJsZUNvbnRleHRzIiwiYVJlc3VsdCIsInNldER5bmFtaWNBY3Rpb25Db250ZXh0cyIsInRyYWNlIiwiYUFwcGxpY2FibGUiLCJhTm90QXBwbGljYWJsZSIsInNEeW5hbWljQWN0aW9uUGF0aFByZWZpeCIsIm9JbnRlcm5hbE1vZGVsIiwiX2dldERlZmF1bHRPcGVyYXRvcnMiLCJzUHJvcGVydHlUeXBlIiwib0RhdGFDbGFzcyIsIlR5cGVVdGlsIiwiZ2V0RGF0YVR5cGVDbGFzc05hbWUiLCJvQmFzZVR5cGUiLCJnZXRCYXNlVHlwZSIsIkZpbHRlck9wZXJhdG9yVXRpbCIsImdldE9wZXJhdG9yc0ZvclR5cGUiLCJfZ2V0UmVzdHJpY3Rpb25zIiwiYURlZmF1bHRPcHMiLCJhRXhwcmVzc2lvbk9wcyIsImZpbHRlciIsInNFbGVtZW50IiwiZ2V0U3BlY2lmaWNBbGxvd2VkRXhwcmVzc2lvbiIsImFFeHByZXNzaW9ucyIsImFBbGxvd2VkRXhwcmVzc2lvbnNQcmlvcml0eSIsIkFsbG93ZWRFeHByZXNzaW9uc1ByaW8iLCJzb3J0IiwiYSIsImIiLCJnZXRPcGVyYXRvcnNGb3JQcm9wZXJ0eSIsInNUeXBlIiwiYlVzZVNlbWFudGljRGF0ZVJhbmdlIiwic1NldHRpbmdzIiwib0ZpbHRlclJlc3RyaWN0aW9ucyIsImdldEZpbHRlclJlc3RyaWN0aW9uc0J5UGF0aCIsImFFcXVhbHNPcHMiLCJhU2luZ2xlUmFuZ2VPcHMiLCJhU2luZ2xlUmFuZ2VEVEJhc2ljT3BzIiwiYVNpbmdsZVZhbHVlRGF0ZU9wcyIsImFNdWx0aVJhbmdlT3BzIiwiYVNlYXJjaEV4cHJlc3Npb25PcHMiLCJhU2VtYW50aWNEYXRlT3BzRXh0IiwiU2VtYW50aWNEYXRlT3BlcmF0b3JzIiwiZ2V0U3VwcG9ydGVkT3BlcmF0aW9ucyIsImJTZW1hbnRpY0RhdGVSYW5nZSIsImFTZW1hbnRpY0RhdGVPcHMiLCJvU2V0dGluZ3MiLCJKU09OIiwicGFyc2UiLCJjdXN0b21EYXRhIiwib3BlcmF0b3JDb25maWd1cmF0aW9uIiwiZ2V0RmlsdGVyT3BlcmF0aW9ucyIsImdldFNlbWFudGljRGF0ZU9wZXJhdGlvbnMiLCJhRGVmYXVsdE9wZXJhdG9ycyIsInJlc3RyaWN0aW9ucyIsIkZpbHRlckFsbG93ZWRFeHByZXNzaW9ucyIsInNBbGxvd2VkRXhwcmVzc2lvbiIsImFTaW5nbGVWYWx1ZU9wcyIsInNPcGVyYXRvcnMiLCJnZXRPcGVyYXRvcnNGb3JHdWlkUHJvcGVydHkiLCJhbGxvd2VkT3BlcmF0b3JzRm9yR3VpZCIsImdldE9wZXJhdG9yc0ZvckRhdGVQcm9wZXJ0eSIsInByb3BlcnR5VHlwZSIsImdldFBhcmFtZXRlckluZm8iLCJzUGFyYW1ldGVyQ29udGV4dFBhdGgiLCJzdWJzdHJpbmciLCJsYXN0SW5kZXhPZiIsImJSZXN1bHRDb250ZXh0Iiwib1BhcmFtZXRlckluZm8iLCJjb250ZXh0UGF0aCIsInBhcmFtZXRlclByb3BlcnRpZXMiLCJnZXRDb250ZXh0UGF0aFByb3BlcnRpZXMiLCJhZGRTZWxlY3RPcHRpb25Ub0NvbmRpdGlvbnMiLCJvUHJvcGVydHlNZXRhZGF0YSIsImFWYWxpZE9wZXJhdG9ycyIsImFTZW1hbnRpY0RhdGVPcGVyYXRvcnMiLCJhQ3VtdWxhdGl2ZUNvbmRpdGlvbnMiLCJvU2VsZWN0T3B0aW9uIiwib0NvbmRpdGlvbiIsImdldENvbmRpdGlvbnMiLCJTZW1hbnRpY0RhdGVzIiwib3BlcmF0b3IiLCJzZW1hbnRpY0RhdGVzIiwiYWRkU2VtYW50aWNEYXRlc1RvQ29uZGl0aW9ucyIsIm9TZW1hbnRpY0RhdGVzIiwidmFsdWVzIiwiaGlnaCIsImxvdyIsImlzRW1wdHkiLCJhZGRTZWxlY3RPcHRpb25zVG9Db25kaXRpb25zIiwib1NlbGVjdGlvblZhcmlhbnQiLCJzU2VsZWN0T3B0aW9uUHJvcCIsIm9Db25kaXRpb25zIiwic0NvbmRpdGlvblBhdGgiLCJzQ29uZGl0aW9uUHJvcCIsIm9WYWxpZFByb3BlcnRpZXMiLCJpc1BhcmFtZXRlciIsImJJc0ZMUFZhbHVlUHJlc2VudCIsIm9WaWV3RGF0YSIsImFDb25kaXRpb25zIiwiYVNlbGVjdE9wdGlvbnMiLCJNZXRhTW9kZWxGdW5jdGlvbiIsImlzUHJvcGVydHlGaWx0ZXJhYmxlIiwiZ2V0U2VsZWN0T3B0aW9uIiwic2V0dGluZ3MiLCJnZXRGaWx0ZXJDb25maWd1cmF0aW9uU2V0dGluZyIsImJpbmQiLCJlbGVtZW50IiwiY3JlYXRlU2VtYW50aWNEYXRlc0Zyb21Db25kaXRpb25zIiwib0NvbmZpZyIsImNvbnRyb2xDb25maWd1cmF0aW9uIiwiZmlsdGVyQ29uZmlnIiwiZmlsdGVyRmllbGRzIiwiYWRkU2VsZWN0aW9uVmFyaWFudFRvQ29uZGl0aW9ucyIsIm9NZXRhTW9kZWxDb250ZXh0IiwiYklzRkxQVmFsdWVzIiwiYVNlbGVjdE9wdGlvbnNQcm9wZXJ0eU5hbWVzIiwiZ2V0U2VsZWN0T3B0aW9uc1Byb3BlcnR5TmFtZXMiLCJhTWV0YWRhdFByb3BlcnRpZXMiLCJvVmFsaWRQYXJhbWV0ZXJQcm9wZXJ0aWVzIiwiYU1ldGFkYXRhUGFyYW1ldGVycyIsInNNZXRhZGF0YVBhcmFtZXRlciIsInNTZWxlY3RPcHRpb25OYW1lIiwic3RhcnRzV2l0aCIsInNNZXRhZGF0YVByb3BlcnR5Iiwic1NlbGVjdE9wdGlvbiIsInNSZXBsYWNlZE9wdGlvbiIsInJlcGxhY2VBbGwiLCJzRnVsbENvbnRleHRQYXRoIiwiX2NyZWF0ZUNvbmRpdGlvbnNGb3JOYXZQcm9wZXJ0aWVzIiwic01haW5FbnRpdHlTZXRQYXRoIiwiYU5hdk9iamVjdE5hbWVzIiwic0Z1bGxQYXRoIiwic05hdlBhdGgiLCJzUHJvcGVydHlOYW1lIiwiJGlzQ29sbGVjdGlvbiIsInNOYXZQcm9wZXJ0eVBhdGgiLCJhZGRQYWdlQ29udGV4dFRvU2VsZWN0aW9uVmFyaWFudCIsIm1QYWdlQ29udGV4dCIsIm9OYXZpZ2F0aW9uU2VydmljZSIsImdldE5hdmlnYXRpb25TZXJ2aWNlIiwibWl4QXR0cmlidXRlc0FuZFNlbGVjdGlvblZhcmlhbnQiLCJ0b0pTT05TdHJpbmciLCJhZGRFeHRlcm5hbFN0YXRlRmlsdGVyc1RvU2VsZWN0aW9uVmFyaWFudCIsIm1GaWx0ZXJzIiwib1RhcmdldEluZm8iLCJvRmlsdGVyQmFyIiwic0ZpbHRlciIsImZuR2V0U2lnbkFuZE9wdGlvbiIsInNPcGVyYXRvciIsInNMb3dWYWx1ZSIsInNIaWdoVmFsdWUiLCJvU2VsZWN0T3B0aW9uU3RhdGUiLCJvcHRpb24iLCJzaWduIiwib0ZpbHRlckNvbmRpdGlvbnMiLCJmaWx0ZXJDb25kaXRpb25zIiwib0ZpbHRlcnNXaXRob3V0Q29uZmxpY3QiLCJmaWx0ZXJDb25kaXRpb25zV2l0aG91dENvbmZsaWN0Iiwib1RhYmxlUHJvcGVydGllc1dpdGhvdXRDb25mbGljdCIsInByb3BlcnRpZXNXaXRob3V0Q29uZmxpY3QiLCJhZGRGaWx0ZXJzVG9TZWxlY3Rpb25WYXJpYW50Iiwic2VsZWN0aW9uVmFyaWFudCIsInNGaWx0ZXJOYW1lIiwic1BhdGgiLCJvUHJvcGVydHlJbmZvIiwiZ2V0UHJvcGVydHlIZWxwZXIiLCJnZXRQcm9wZXJ0eSIsIm9UeXBlQ29uZmlnIiwidHlwZUNvbmZpZyIsIm9UeXBlVXRpbCIsImdldENvbnRyb2xEZWxlZ2F0ZSIsImdldFR5cGVVdGlsIiwiaXRlbSIsIm9PcGVyYXRvciIsImdldE9wZXJhdG9yIiwiUmFuZ2VPcGVyYXRvciIsIm9Nb2RlbEZpbHRlciIsImdldE1vZGVsRmlsdGVyIiwidHlwZUluc3RhbmNlIiwiYmFzZVR5cGUiLCJnZXRGaWx0ZXJzIiwiZXhjbHVkZSIsImV4dGVybmFsaXplVmFsdWUiLCJnZXRWYWx1ZTEiLCJnZXRWYWx1ZTIiLCJ2YWx1ZTEiLCJ2YWx1ZTIiLCJhZGRTZWxlY3RPcHRpb24iLCJpc1N0aWNreUVkaXRNb2RlIiwiYklzU3RpY2t5TW9kZSIsImJVSUVkaXRhYmxlIiwiYWRkRGVmYXVsdERpc3BsYXlDdXJyZW5jeSIsIm9TZWxlY3Rpb25WYXJpYW50RGVmYXVsdHMiLCJhU1ZPcHRpb24iLCJhRGVmYXVsdFNWT3B0aW9uIiwiZGlzcGxheUN1cnJlbmN5U2VsZWN0T3B0aW9uIiwic1NpZ24iLCJzT3B0aW9uIiwic0xvdyIsInNIaWdoIiwic2V0VXNlckRlZmF1bHRzIiwiYVBhcmFtZXRlcnMiLCJvTW9kZWwiLCJiSXNBY3Rpb24iLCJiSXNDcmVhdGUiLCJvQWN0aW9uRGVmYXVsdFZhbHVlcyIsIm9Db21wb25lbnREYXRhIiwib1N0YXJ0dXBQYXJhbWV0ZXJzIiwic3RhcnR1cFBhcmFtZXRlcnMiLCJvU2hlbGxTZXJ2aWNlcyIsIm9TdGFydHVwQXBwU3RhdGUiLCJnZXRTdGFydHVwQXBwU3RhdGUiLCJnZXREYXRhIiwiYUV4dGVuZGVkUGFyYW1ldGVycyIsIlNlbGVjdE9wdGlvbnMiLCJvUGFyYW1ldGVyIiwiJE5hbWUiLCJzUGFyYW1ldGVyTmFtZSIsIm9FeHRlbmRlZFBhcmFtZXRlciIsIlByb3BlcnR5TmFtZSIsIm9SYW5nZSIsIlJhbmdlcyIsIlNpZ24iLCJPcHRpb24iLCJMb3ciLCJnZXRBZGRpdGlvbmFsUGFyYW1zRm9yQ3JlYXRlIiwib0luYm91bmRQYXJhbWV0ZXJzIiwib0luYm91bmRzIiwiYUNyZWF0ZVBhcmFtZXRlcnMiLCJzUGFyYW1ldGVyIiwidXNlRm9yQ3JlYXRlIiwib1JldCIsInNDcmVhdGVQYXJhbWV0ZXIiLCJhVmFsdWVzIiwiY3JlYXRlIiwiZ2V0U2VtYW50aWNPYmplY3RNYXBwaW5nIiwib091dGJvdW5kIiwiYVNlbWFudGljT2JqZWN0TWFwcGluZyIsInBhcmFtZXRlcnMiLCJzUGFyYW0iLCJmb3JtYXQiLCJnZXRIZWFkZXJGYWNldEl0ZW1Db25maWdGb3JFeHRlcm5hbE5hdmlnYXRpb24iLCJvQ3Jvc3NOYXYiLCJvSGVhZGVyRmFjZXRJdGVtcyIsInNJZCIsIm9Db250cm9sQ29uZmlnIiwiY29uZmlnIiwic091dGJvdW5kIiwibmF2aWdhdGlvbiIsInRhcmdldE91dGJvdW5kIiwib3V0Ym91bmQiLCJnZW5lcmF0ZSIsInNldFNlbWFudGljT2JqZWN0TWFwcGluZ3MiLCJ2TWFwcGluZ3MiLCJvTWFwcGluZ3MiLCJzTG9jYWxQcm9wZXJ0eSIsInNTZW1hbnRpY09iamVjdFByb3BlcnR5IiwicmVtb3ZlU2VsZWN0T3B0aW9uIiwibWFzc0FkZFNlbGVjdE9wdGlvbiIsImZuR2V0U2VtYW50aWNPYmplY3RzRnJvbVBhdGgiLCJhU2VtYW50aWNPYmplY3RVbmF2YWlsYWJsZUFjdGlvbnMiLCJhU2VtYW50aWNPYmplY3RGb3JHZXRMaW5rcyIsInNlbWFudGljT2JqZWN0UGF0aCIsInNlbWFudGljT2JqZWN0Rm9yR2V0TGlua3MiLCJmblVwZGF0ZVNlbWFudGljVGFyZ2V0c01vZGVsIiwiYUdldExpbmtzUHJvbWlzZXMiLCJhU2VtYW50aWNPYmplY3RzIiwic0N1cnJlbnRIYXNoIiwiX29MaW5rIiwiX3NMaW5rSW50ZW50QWN0aW9uIiwiYUZpbmFsTGlua3MiLCJvRmluYWxTZW1hbnRpY09iamVjdHMiLCJiSW50ZW50SGFzQWN0aW9ucyIsImsiLCJvVG1wIiwic0FsdGVybmF0ZVBhdGgiLCJoYXNUYXJnZXRzTm90RmlsdGVyZWQiLCJoYXNUYXJnZXRzIiwiaUxpbmtDb3VudCIsIkhhc1RhcmdldHMiLCJIYXNUYXJnZXRzTm90RmlsdGVyZWQiLCJhc3NpZ24iLCJzU2VtYW50aWNPYmplY3ROYW1lIiwibWVyZ2VPYmplY3RzIiwiZm5HZXRTZW1hbnRpY09iamVjdFByb21pc2UiLCJnZXRTZW1hbnRpY09iamVjdHNGcm9tUGF0aCIsImZuUHJlcGFyZVNlbWFudGljT2JqZWN0c1Byb21pc2VzIiwiX29BcHBDb21wb25lbnQiLCJfb1ZpZXciLCJfb01ldGFNb2RlbCIsIl9hU2VtYW50aWNPYmplY3RzRm91bmQiLCJfYVNlbWFudGljT2JqZWN0c1Byb21pc2VzIiwiX0tleXMiLCJyZWdleFJlc3VsdCIsImluZGV4IiwiZXhlYyIsImdldFNlbWFudGljT2JqZWN0UHJvbWlzZSIsImZuR2V0U2VtYW50aWNUYXJnZXRzRnJvbVBhZ2VNb2RlbCIsIm9Db250cm9sbGVyIiwic1BhZ2VNb2RlbCIsIl9mbmZpbmRWYWx1ZXNIZWxwZXIiLCJvYmoiLCJsaXN0IiwiQXJyYXkiLCJjaGlsZHJlbiIsIl9mbmZpbmRWYWx1ZXMiLCJfZm5EZWxldGVEdXBsaWNhdGVTZW1hbnRpY09iamVjdHMiLCJhU2VtYW50aWNPYmplY3RQYXRoIiwiZ2V0VmlldyIsImFTZW1hbnRpY09iamVjdHNQcm9taXNlcyIsImdldE93bmVyQ29tcG9uZW50Iiwib1BhZ2VNb2RlbCIsInN0cmluZ2lmeSIsIl9nZXRPYmplY3QiLCJhU2VtYW50aWNPYmplY3RzRm91bmQiLCJnZXRIYXNoIiwiYVNlbWFudGljT2JqZWN0c0ZvckdldExpbmtzIiwiX29TZW1hbnRpY09iamVjdCIsInNTZW1PYmpFeHByZXNzaW9uIiwiYVNlbWFudGljT2JqZWN0c1Jlc29sdmVkIiwiY29tcGlsZUV4cHJlc3Npb24iLCJwYXRoSW5Nb2RlbCIsIiRQYXRoIiwiZ2V0TGlua3NXaXRoQ2FjaGUiLCJ1cGRhdGVTZW1hbnRpY1RhcmdldHMiLCJnZXRGaWx0ZXJBbGxvd2VkRXhwcmVzc2lvbiIsIm9GaWx0ZXJSZXN0cmljdGlvbnNBbm5vdGF0aW9uIiwibUFsbG93ZWRFeHByZXNzaW9ucyIsIkZpbHRlckV4cHJlc3Npb25SZXN0cmljdGlvbnMiLCJvUHJvcGVydHkiLCJQcm9wZXJ0eSIsIkFsbG93ZWRFeHByZXNzaW9ucyIsImdldEZpbHRlclJlc3RyaWN0aW9ucyIsInNSZXN0cmljdGlvbiIsImFQcm9wcyIsIm1hcCIsIl9mZXRjaFByb3BlcnRpZXNGb3JOYXZQYXRoIiwicGF0aHMiLCJuYXZQYXRoIiwicHJvcHMiLCJuYXZQYXRoUHJlZml4Iiwib3V0UGF0aHMiLCJwYXRoVG9DaGVjayIsIm91dFBhdGgiLCJSZXF1aXJlZFByb3BlcnRpZXMiLCJOb25GaWx0ZXJhYmxlUHJvcGVydGllcyIsIm5hdmlnYXRpb25UZXh0IiwiZnJUZXJtIiwiZW50aXR5VHlwZVBhdGhQYXJ0cyIsImZpbHRlck91dE5hdlByb3BCaW5kaW5nIiwiZW50aXR5VHlwZVBhdGgiLCJqb2luIiwiZW50aXR5U2V0UGF0aCIsImdldEVudGl0eVNldFBhdGgiLCJlbnRpdHlTZXRQYXRoUGFydHMiLCJpc0NvbnRhaW5tZW50IiwiY29udGFpbm1lbnROYXZQYXRoIiwicmVzdWx0Q29udGV4dENoZWNrIiwicGFyZW50RW50aXR5U2V0UGF0aCIsIm9QYXJlbnRSZXQiLCJvUGFyZW50RlIiLCJjb21wbGV0ZUFsbG93ZWRFeHBzIiwib3V0UHJvcCIsInByb3BQYXRoIiwib3V0UHJvcFBhdGgiLCJvTmF2UmVzdHJpY3Rpb25zIiwiZ2V0TmF2aWdhdGlvblJlc3RyaWN0aW9ucyIsIm9OYXZGaWx0ZXJSZXN0IiwibmF2UmVzUmVxUHJvcHMiLCJ1bmlxdWVTb3J0IiwibmF2Tm9uRmlsdGVyUHJvcHMiLCJuYXZBc3NvY2lhdGlvbkVudGl0eVJlc3QiLCJuYXZBc3NvY1JlcVByb3BzIiwibmF2QXNzb2NOb25GaWx0ZXJQcm9wcyIsInRlbXBsYXRlQ29udHJvbEZyYWdtZW50Iiwic0ZyYWdtZW50TmFtZSIsIm9QcmVwcm9jZXNzb3JTZXR0aW5ncyIsIm9PcHRpb25zIiwib01vZGlmaWVyIiwidmlldyIsIm9GcmFnbWVudCIsInRhcmdldHMiLCJYTUxQcmVwcm9jZXNzb3IiLCJwcm9jZXNzIiwiWE1MVGVtcGxhdGVQcm9jZXNzb3IiLCJsb2FkVGVtcGxhdGUiLCJmaXJzdEVsZW1lbnRDaGlsZCIsImlzWE1MIiwiRnJhZ21lbnQiLCJsb2FkIiwiaWQiLCJkZWZpbml0aW9uIiwiY29udHJvbGxlciIsImdldFNpbmdsZXRvblBhdGgiLCJwYXJ0cyIsIkJvb2xlYW4iLCJwcm9wZXJ0eU5hbWUiLCJwb3AiLCJuYXZpZ2F0aW9uUGF0aCIsImVudGl0eVNldCIsInNpbmdsZXRvbk5hbWUiLCJyZXNvbHZlZFBhdGgiLCJwcm9wZXJ0eUJpbmRpbmciLCJiaW5kUHJvcGVydHkiLCJyZXF1ZXN0VmFsdWUiLCJnZXRQYXJhbWV0ZXJQYXRoIiwic0NvbnRleHQiLCJhQWN0aW9uIiwiX2ZudHJhbnNsYXRlZFRleHRGcm9tRXhwQmluZGluZ1N0cmluZyIsImV4cEJpbmRpbmciLCJjb250cm9sIiwiYW55UmVzb3VyY2VUZXh0IiwiQW55RWxlbWVudCIsImFueVRleHQiLCJhZGREZXBlbmRlbnQiLCJyZXN1bHRUZXh0IiwiZ2V0QW55VGV4dCIsInJlbW92ZURlcGVuZGVudCIsImRlc3Ryb3kiLCJpc1NtYWxsRGV2aWNlIiwic3lzdGVtIiwiZGVza3RvcCIsIkRldmljZSIsInJlc2l6ZSIsIndpZHRoIiwiZ2V0RmlsdGVyc0luZm9Gb3JTViIsInNlbGVjdGlvblZhcmlhbnRQYXRoIiwiaXNDaGFydCIsIm1Qcm9wZXJ0eUZpbHRlcnMiLCJhRmlsdGVycyIsImFQYXRocyIsInNUZXh0IiwiU2VsZWN0aW9uVmFyaWFudCIsIlRleHQiLCJGaWx0ZXIiLCJIaWdoIiwic1Byb3BlcnR5UGF0aCIsImZpbHRlcnMiLCJhbmQiLCJwcm9wZXJ0aWVzIiwiZ2V0Q29udmVydGVyQ29udGV4dEZvclBhdGgiLCJzTWV0YVBhdGgiLCJzRW50aXR5U2V0Iiwib0RpYWdub3N0aWNzIiwiY3JlYXRlQmluZGluZ0NvbnRleHQiLCJDb252ZXJ0ZXJDb250ZXh0IiwiY3JlYXRlQ29udmVydGVyQ29udGV4dEZvck1hY3JvIiwiZ2V0SW50ZXJuYWxDaGFydE5hbWVGcm9tUHJvcGVydHlOYW1lQW5kS2luZCIsImtpbmQiLCJnZXRDaGFydFByb3BlcnRpZXNXaXRob3V0UHJlZml4ZXMiLCJmaXJlQnV0dG9uUHJlc3MiLCJoYXNUcmFuc2llbnRDb250ZXh0IiwidXBkYXRlUmVsYXRlZEFwcHNEZXRhaWxzIiwiZ2V0TWFuZGF0b3J5RmlsdGVyRmllbGRzIiwidXBkYXRlRGF0YUZpZWxkRm9ySUJOQnV0dG9uc1Zpc2liaWxpdHkiLCJnZXRJQk5BY3Rpb25zIiwiZ2V0U2VtYW50aWNUYXJnZXRzRnJvbVBhZ2VNb2RlbCIsIkZpbHRlclJlc3RyaWN0aW9ucyIsIlJFUVVJUkVEX1BST1BFUlRJRVMiLCJOT05fRklMVEVSQUJMRV9QUk9QRVJUSUVTIiwiQUxMT1dFRF9FWFBSRVNTSU9OUyIsImdldFJlbGF0ZWRBcHBzTWVudUl0ZW1zIiwiZ2V0VHJhbnNsYXRlZFRleHRGcm9tRXhwQmluZGluZ1N0cmluZyJdLCJzb3VyY2VSb290IjoiLiIsInNvdXJjZXMiOlsiQ29tbW9uVXRpbHMudHMiXSwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHR5cGUgKiBhcyBFZG0gZnJvbSBcIkBzYXAtdXgvdm9jYWJ1bGFyaWVzLXR5cGVzL0VkbVwiO1xuaW1wb3J0IHR5cGUgeyBGaWx0ZXJSZXN0cmljdGlvbnNUeXBlIH0gZnJvbSBcIkBzYXAtdXgvdm9jYWJ1bGFyaWVzLXR5cGVzL3ZvY2FidWxhcmllcy9DYXBhYmlsaXRpZXNcIjtcbmltcG9ydCB0eXBlIHsgU2VtYW50aWNPYmplY3RNYXBwaW5nVHlwZSwgU2VtYW50aWNPYmplY3RVbmF2YWlsYWJsZUFjdGlvbnMgfSBmcm9tIFwiQHNhcC11eC92b2NhYnVsYXJpZXMtdHlwZXMvdm9jYWJ1bGFyaWVzL0NvbW1vblwiO1xuaW1wb3J0IHsgQ29tbW9uQW5ub3RhdGlvblRlcm1zIH0gZnJvbSBcIkBzYXAtdXgvdm9jYWJ1bGFyaWVzLXR5cGVzL3ZvY2FidWxhcmllcy9Db21tb25cIjtcbmltcG9ydCB0eXBlIHsgVGV4dEFycmFuZ2VtZW50IH0gZnJvbSBcIkBzYXAtdXgvdm9jYWJ1bGFyaWVzLXR5cGVzL3ZvY2FidWxhcmllcy9VSVwiO1xuaW1wb3J0IExvZyBmcm9tIFwic2FwL2Jhc2UvTG9nXCI7XG5pbXBvcnQgdW5pcXVlU29ydCBmcm9tIFwic2FwL2Jhc2UvdXRpbC9hcnJheS91bmlxdWVTb3J0XCI7XG5pbXBvcnQgbWVyZ2VPYmplY3RzIGZyb20gXCJzYXAvYmFzZS91dGlsL21lcmdlXCI7XG5pbXBvcnQgdHlwZSBBcHBDb21wb25lbnQgZnJvbSBcInNhcC9mZS9jb3JlL0FwcENvbXBvbmVudFwiO1xuaW1wb3J0IHR5cGUgeyBDb21wb25lbnREYXRhIH0gZnJvbSBcInNhcC9mZS9jb3JlL0FwcENvbXBvbmVudFwiO1xuaW1wb3J0IENvbnZlcnRlckNvbnRleHQgZnJvbSBcInNhcC9mZS9jb3JlL2NvbnZlcnRlcnMvQ29udmVydGVyQ29udGV4dFwiO1xuaW1wb3J0ICogYXMgTWV0YU1vZGVsQ29udmVydGVyIGZyb20gXCJzYXAvZmUvY29yZS9jb252ZXJ0ZXJzL01ldGFNb2RlbENvbnZlcnRlclwiO1xuaW1wb3J0IHsgY29tcGlsZUV4cHJlc3Npb24sIHBhdGhJbk1vZGVsIH0gZnJvbSBcInNhcC9mZS9jb3JlL2hlbHBlcnMvQmluZGluZ1Rvb2xraXRcIjtcbmltcG9ydCB0eXBlIHsgSW50ZXJuYWxNb2RlbENvbnRleHQgfSBmcm9tIFwic2FwL2ZlL2NvcmUvaGVscGVycy9Nb2RlbEhlbHBlclwiO1xuaW1wb3J0IE1vZGVsSGVscGVyIGZyb20gXCJzYXAvZmUvY29yZS9oZWxwZXJzL01vZGVsSGVscGVyXCI7XG5pbXBvcnQgU2VtYW50aWNEYXRlT3BlcmF0b3JzIGZyb20gXCJzYXAvZmUvY29yZS9oZWxwZXJzL1NlbWFudGljRGF0ZU9wZXJhdG9yc1wiO1xuaW1wb3J0IHsgZ2VuZXJhdGUgfSBmcm9tIFwic2FwL2ZlL2NvcmUvaGVscGVycy9TdGFibGVJZEhlbHBlclwiO1xuaW1wb3J0IHR5cGUgUGFnZUNvbnRyb2xsZXIgZnJvbSBcInNhcC9mZS9jb3JlL1BhZ2VDb250cm9sbGVyXCI7XG5pbXBvcnQgdHlwZSB7IElTaGVsbFNlcnZpY2VzIH0gZnJvbSBcInNhcC9mZS9jb3JlL3NlcnZpY2VzL1NoZWxsU2VydmljZXNGYWN0b3J5XCI7XG5pbXBvcnQgdHlwZSBEaWFnbm9zdGljcyBmcm9tIFwic2FwL2ZlL2NvcmUvc3VwcG9ydC9EaWFnbm9zdGljc1wiO1xuaW1wb3J0IFR5cGVVdGlsIGZyb20gXCJzYXAvZmUvY29yZS90eXBlL1R5cGVVdGlsXCI7XG5pbXBvcnQgdHlwZSBTZWxlY3Rpb25WYXJpYW50IGZyb20gXCJzYXAvZmUvbmF2aWdhdGlvbi9TZWxlY3Rpb25WYXJpYW50XCI7XG5pbXBvcnQgdHlwZSB7IFNlbGVjdE9wdGlvbiwgU2VtYW50aWNEYXRlQ29uZmlndXJhdGlvbiB9IGZyb20gXCJzYXAvZmUvbmF2aWdhdGlvbi9TZWxlY3Rpb25WYXJpYW50XCI7XG5pbXBvcnQgdHlwZSBCdXR0b24gZnJvbSBcInNhcC9tL0J1dHRvblwiO1xuaW1wb3J0IHR5cGUgTWVudUJ1dHRvbiBmcm9tIFwic2FwL20vTWVudUJ1dHRvblwiO1xuaW1wb3J0IHR5cGUgTmF2Q29udGFpbmVyIGZyb20gXCJzYXAvbS9OYXZDb250YWluZXJcIjtcbmltcG9ydCB0eXBlIE92ZXJmbG93VG9vbGJhckJ1dHRvbiBmcm9tIFwic2FwL20vT3ZlcmZsb3dUb29sYmFyQnV0dG9uXCI7XG5pbXBvcnQgdHlwZSBNYW5hZ2VkT2JqZWN0IGZyb20gXCJzYXAvdWkvYmFzZS9NYW5hZ2VkT2JqZWN0XCI7XG5pbXBvcnQgQ29tcG9uZW50IGZyb20gXCJzYXAvdWkvY29yZS9Db21wb25lbnRcIjtcbmltcG9ydCB0eXBlIENvbXBvbmVudENvbnRhaW5lciBmcm9tIFwic2FwL3VpL2NvcmUvQ29tcG9uZW50Q29udGFpbmVyXCI7XG5pbXBvcnQgdHlwZSBDb250cm9sIGZyb20gXCJzYXAvdWkvY29yZS9Db250cm9sXCI7XG5pbXBvcnQgdHlwZSBVSTVFbGVtZW50IGZyb20gXCJzYXAvdWkvY29yZS9FbGVtZW50XCI7XG5pbXBvcnQgRnJhZ21lbnQgZnJvbSBcInNhcC91aS9jb3JlL0ZyYWdtZW50XCI7XG5pbXBvcnQgdHlwZSBDb250cm9sbGVyIGZyb20gXCJzYXAvdWkvY29yZS9tdmMvQ29udHJvbGxlclwiO1xuaW1wb3J0IHR5cGUgVmlldyBmcm9tIFwic2FwL3VpL2NvcmUvbXZjL1ZpZXdcIjtcbmltcG9ydCBYTUxQcmVwcm9jZXNzb3IgZnJvbSBcInNhcC91aS9jb3JlL3V0aWwvWE1MUHJlcHJvY2Vzc29yXCI7XG5pbXBvcnQgWE1MVGVtcGxhdGVQcm9jZXNzb3IgZnJvbSBcInNhcC91aS9jb3JlL1hNTFRlbXBsYXRlUHJvY2Vzc29yXCI7XG5pbXBvcnQgRGV2aWNlLCB7IHN5c3RlbSB9IGZyb20gXCJzYXAvdWkvRGV2aWNlXCI7XG5pbXBvcnQgdHlwZSBBY3Rpb25Ub29sYmFyQWN0aW9uIGZyb20gXCJzYXAvdWkvbWRjL2FjdGlvbnRvb2xiYXIvQWN0aW9uVG9vbGJhckFjdGlvblwiO1xuaW1wb3J0IHR5cGUgeyBkZWZhdWx0IGFzIE1EQ0NoYXJ0IH0gZnJvbSBcInNhcC91aS9tZGMvQ2hhcnRcIjtcbmltcG9ydCB0eXBlIHsgQ29uZGl0aW9uT2JqZWN0IH0gZnJvbSBcInNhcC91aS9tZGMvY29uZGl0aW9uL0NvbmRpdGlvblwiO1xuaW1wb3J0IEZpbHRlck9wZXJhdG9yVXRpbCBmcm9tIFwic2FwL3VpL21kYy9jb25kaXRpb24vRmlsdGVyT3BlcmF0b3JVdGlsXCI7XG5pbXBvcnQgUmFuZ2VPcGVyYXRvciBmcm9tIFwic2FwL3VpL21kYy9jb25kaXRpb24vUmFuZ2VPcGVyYXRvclwiO1xuaW1wb3J0IHR5cGUgRmlsdGVyQmFyIGZyb20gXCJzYXAvdWkvbWRjL0ZpbHRlckJhclwiO1xuaW1wb3J0IHR5cGUgVGFibGUgZnJvbSBcInNhcC91aS9tZGMvVGFibGVcIjtcbmltcG9ydCB0eXBlIE1EQ1RhYmxlIGZyb20gXCJzYXAvdWkvbWRjL3ZhbHVlaGVscC9jb250ZW50L01EQ1RhYmxlXCI7XG5pbXBvcnQgdHlwZSBDb250ZXh0IGZyb20gXCJzYXAvdWkvbW9kZWwvQ29udGV4dFwiO1xuaW1wb3J0IEZpbHRlciBmcm9tIFwic2FwL3VpL21vZGVsL0ZpbHRlclwiO1xuaW1wb3J0IHR5cGUgSlNPTk1vZGVsIGZyb20gXCJzYXAvdWkvbW9kZWwvanNvbi9KU09OTW9kZWxcIjtcbmltcG9ydCB0eXBlIE9EYXRhVjRDb250ZXh0IGZyb20gXCJzYXAvdWkvbW9kZWwvb2RhdGEvdjQvQ29udGV4dFwiO1xuaW1wb3J0IHR5cGUgT0RhdGFMaXN0QmluZGluZyBmcm9tIFwic2FwL3VpL21vZGVsL29kYXRhL3Y0L09EYXRhTGlzdEJpbmRpbmdcIjtcbmltcG9ydCB0eXBlIE9EYXRhTWV0YU1vZGVsIGZyb20gXCJzYXAvdWkvbW9kZWwvb2RhdGEvdjQvT0RhdGFNZXRhTW9kZWxcIjtcbmltcG9ydCB0eXBlIE9EYXRhTW9kZWwgZnJvbSBcInNhcC91aS9tb2RlbC9vZGF0YS92NC9PRGF0YU1vZGVsXCI7XG5pbXBvcnQgdHlwZSBPYmplY3RQYWdlRHluYW1pY0hlYWRlclRpdGxlIGZyb20gXCJzYXAvdXhhcC9PYmplY3RQYWdlRHluYW1pY0hlYWRlclRpdGxlXCI7XG5pbXBvcnQgdHlwZSBPYmplY3RQYWdlTGF5b3V0IGZyb20gXCJzYXAvdXhhcC9PYmplY3RQYWdlTGF5b3V0XCI7XG5pbXBvcnQgdHlwZSB7XG5cdEV4cGFuZFBhdGhUeXBlLFxuXHRNZXRhTW9kZWxFbnRpdHlUeXBlLFxuXHRNZXRhTW9kZWxFbnVtLFxuXHRNZXRhTW9kZWxOYXZQcm9wZXJ0eSxcblx0TWV0YU1vZGVsUHJvcGVydHksXG5cdE1ldGFNb2RlbFR5cGVcbn0gZnJvbSBcInR5cGVzL21ldGFtb2RlbF90eXBlc1wiO1xuaW1wb3J0IEFueUVsZW1lbnQgZnJvbSBcIi4vY29udHJvbHMvQW55RWxlbWVudFwiO1xuaW1wb3J0ICogYXMgTWV0YU1vZGVsRnVuY3Rpb24gZnJvbSBcIi4vaGVscGVycy9NZXRhTW9kZWxGdW5jdGlvblwiO1xuaW1wb3J0IHsgZ2V0Q29uZGl0aW9ucyB9IGZyb20gXCIuL3RlbXBsYXRpbmcvRmlsdGVySGVscGVyXCI7XG5cbnR5cGUgQ29uZGl0aW9uVHlwZSA9IHtcblx0b3BlcmF0b3I6IHN0cmluZztcblx0dmFsdWVzOiBBcnJheTx1bmtub3duPiB8IHVuZGVmaW5lZDtcblx0dmFsaWRhdGVkPzogc3RyaW5nO1xufTtcblxudHlwZSBNeUluYm94SW50ZW50ID0ge1xuXHRzZW1hbnRpY09iamVjdDogc3RyaW5nO1xuXHRhY3Rpb246IHN0cmluZztcbn07XG5cbmZ1bmN0aW9uIG5vcm1hbGl6ZVNlYXJjaFRlcm0oc1NlYXJjaFRlcm06IHN0cmluZykge1xuXHRpZiAoIXNTZWFyY2hUZXJtKSB7XG5cdFx0cmV0dXJuIHVuZGVmaW5lZDtcblx0fVxuXG5cdHJldHVybiBzU2VhcmNoVGVybVxuXHRcdC5yZXBsYWNlKC9cIi9nLCBcIiBcIilcblx0XHQucmVwbGFjZSgvXFxcXC9nLCBcIlxcXFxcXFxcXCIpIC8vZXNjYXBlIGJhY2tzbGFzaCBjaGFyYWN0ZXJzLiBDYW4gYmUgcmVtb3ZlZCBpZiBvZGF0YS9iaW5kaW5nIGhhbmRsZXMgYmFja2VuZCBlcnJvcnMgcmVzcG9uZHMuXG5cdFx0LnNwbGl0KC9cXHMrLylcblx0XHQucmVkdWNlKGZ1bmN0aW9uIChzTm9ybWFsaXplZDogc3RyaW5nIHwgdW5kZWZpbmVkLCBzQ3VycmVudFdvcmQ6IHN0cmluZykge1xuXHRcdFx0aWYgKHNDdXJyZW50V29yZCAhPT0gXCJcIikge1xuXHRcdFx0XHRzTm9ybWFsaXplZCA9IGAke3NOb3JtYWxpemVkID8gYCR7c05vcm1hbGl6ZWR9IGAgOiBcIlwifVwiJHtzQ3VycmVudFdvcmR9XCJgO1xuXHRcdFx0fVxuXHRcdFx0cmV0dXJuIHNOb3JtYWxpemVkO1xuXHRcdH0sIHVuZGVmaW5lZCk7XG59XG5cbmFzeW5jIGZ1bmN0aW9uIHdhaXRGb3JDb250ZXh0UmVxdWVzdGVkKGJpbmRpbmdDb250ZXh0OiBPRGF0YVY0Q29udGV4dCkge1xuXHRjb25zdCBtb2RlbCA9IGJpbmRpbmdDb250ZXh0LmdldE1vZGVsKCk7XG5cdGNvbnN0IG1ldGFNb2RlbCA9IG1vZGVsLmdldE1ldGFNb2RlbCgpO1xuXHRjb25zdCBlbnRpdHlQYXRoID0gbWV0YU1vZGVsLmdldE1ldGFQYXRoKGJpbmRpbmdDb250ZXh0LmdldFBhdGgoKSk7XG5cdGNvbnN0IGRhdGFNb2RlbCA9IE1ldGFNb2RlbENvbnZlcnRlci5nZXRJbnZvbHZlZERhdGFNb2RlbE9iamVjdHMobWV0YU1vZGVsLmdldENvbnRleHQoZW50aXR5UGF0aCkpO1xuXHRhd2FpdCBiaW5kaW5nQ29udGV4dC5yZXF1ZXN0UHJvcGVydHkoZGF0YU1vZGVsLnRhcmdldEVudGl0eVR5cGUua2V5c1swXT8ubmFtZSk7XG59XG5cbmZ1bmN0aW9uIGZuSGFzVHJhbnNpZW50Q29udGV4dHMob0xpc3RCaW5kaW5nOiBPRGF0YUxpc3RCaW5kaW5nKSB7XG5cdGxldCBiSGFzVHJhbnNpZW50Q29udGV4dHMgPSBmYWxzZTtcblx0aWYgKG9MaXN0QmluZGluZykge1xuXHRcdG9MaXN0QmluZGluZy5nZXRDdXJyZW50Q29udGV4dHMoKS5mb3JFYWNoKGZ1bmN0aW9uIChvQ29udGV4dDogT0RhdGFWNENvbnRleHQpIHtcblx0XHRcdGlmIChvQ29udGV4dCAmJiBvQ29udGV4dC5pc1RyYW5zaWVudCgpKSB7XG5cdFx0XHRcdGJIYXNUcmFuc2llbnRDb250ZXh0cyA9IHRydWU7XG5cdFx0XHR9XG5cdFx0fSk7XG5cdH1cblx0cmV0dXJuIGJIYXNUcmFuc2llbnRDb250ZXh0cztcbn1cblxuLy8gdGhlcmUgaXMgbm8gbmF2aWdhdGlvbiBpbiBlbnRpdHlTZXQgcGF0aCBhbmQgcHJvcGVydHkgcGF0aFxuXG5hc3luYyBmdW5jdGlvbiBfZ2V0U09JbnRlbnRzKFxuXHRvU2hlbGxTZXJ2aWNlSGVscGVyOiBJU2hlbGxTZXJ2aWNlcyxcblx0b09iamVjdFBhZ2VMYXlvdXQ6IE9iamVjdFBhZ2VMYXlvdXQsXG5cdG9TZW1hbnRpY09iamVjdDogdW5rbm93bixcblx0b1BhcmFtOiB1bmtub3duXG4pOiBQcm9taXNlPExpbmtEZWZpbml0aW9uW10+IHtcblx0cmV0dXJuIG9TaGVsbFNlcnZpY2VIZWxwZXIuZ2V0TGlua3Moe1xuXHRcdHNlbWFudGljT2JqZWN0OiBvU2VtYW50aWNPYmplY3QsXG5cdFx0cGFyYW1zOiBvUGFyYW1cblx0fSkgYXMgUHJvbWlzZTxMaW5rRGVmaW5pdGlvbltdPjtcbn1cblxuLy8gVE8tRE8gYWRkIHRoaXMgYXMgcGFydCBvZiBhcHBseVNlbWFudGljT2JqZWN0bWFwcGluZ3MgbG9naWMgaW4gSW50ZW50QmFzZWRuYXZpZ2F0aW9uIGNvbnRyb2xsZXIgZXh0ZW5zaW9uXG5mdW5jdGlvbiBfY3JlYXRlTWFwcGluZ3Mob01hcHBpbmc6IFJlY29yZDxzdHJpbmcsIHVua25vd24+KSB7XG5cdGNvbnN0IGFTT01hcHBpbmdzID0gW107XG5cdGNvbnN0IGFNYXBwaW5nS2V5cyA9IE9iamVjdC5rZXlzKG9NYXBwaW5nKTtcblx0bGV0IG9TZW1hbnRpY01hcHBpbmc7XG5cdGZvciAobGV0IGkgPSAwOyBpIDwgYU1hcHBpbmdLZXlzLmxlbmd0aDsgaSsrKSB7XG5cdFx0b1NlbWFudGljTWFwcGluZyA9IHtcblx0XHRcdExvY2FsUHJvcGVydHk6IHtcblx0XHRcdFx0JFByb3BlcnR5UGF0aDogYU1hcHBpbmdLZXlzW2ldXG5cdFx0XHR9LFxuXHRcdFx0U2VtYW50aWNPYmplY3RQcm9wZXJ0eTogb01hcHBpbmdbYU1hcHBpbmdLZXlzW2ldXVxuXHRcdH07XG5cdFx0YVNPTWFwcGluZ3MucHVzaChvU2VtYW50aWNNYXBwaW5nKTtcblx0fVxuXG5cdHJldHVybiBhU09NYXBwaW5ncztcbn1cbnR5cGUgTGlua0RlZmluaXRpb24gPSB7XG5cdGludGVudDogc3RyaW5nO1xuXHR0ZXh0OiBzdHJpbmc7XG59O1xudHlwZSBTZW1hbnRpY0l0ZW0gPSB7XG5cdHRleHQ6IHN0cmluZztcblx0dGFyZ2V0U2VtT2JqZWN0OiBzdHJpbmc7XG5cdHRhcmdldEFjdGlvbjogc3RyaW5nO1xuXHR0YXJnZXRQYXJhbXM6IHVua25vd247XG59O1xuLyoqXG4gKiBAcGFyYW0gYUxpbmtzXG4gKiBAcGFyYW0gYUV4Y2x1ZGVkQWN0aW9uc1xuICogQHBhcmFtIG9UYXJnZXRQYXJhbXNcbiAqIEBwYXJhbSBhSXRlbXNcbiAqIEBwYXJhbSBhQWxsb3dlZEFjdGlvbnNcbiAqL1xuZnVuY3Rpb24gX2dldFJlbGF0ZWRBcHBzTWVudUl0ZW1zKFxuXHRhTGlua3M6IExpbmtEZWZpbml0aW9uW10sXG5cdGFFeGNsdWRlZEFjdGlvbnM6IHVua25vd25bXSxcblx0b1RhcmdldFBhcmFtczogdW5rbm93bixcblx0YUl0ZW1zOiBTZW1hbnRpY0l0ZW1bXSxcblx0YUFsbG93ZWRBY3Rpb25zPzogdW5rbm93bltdXG4pIHtcblx0Zm9yIChsZXQgaSA9IDA7IGkgPCBhTGlua3MubGVuZ3RoOyBpKyspIHtcblx0XHRjb25zdCBvTGluayA9IGFMaW5rc1tpXTtcblx0XHRjb25zdCBzSW50ZW50ID0gb0xpbmsuaW50ZW50O1xuXHRcdGNvbnN0IHNBY3Rpb24gPSBzSW50ZW50LnNwbGl0KFwiLVwiKVsxXS5zcGxpdChcIj9cIilbMF07XG5cdFx0aWYgKGFBbGxvd2VkQWN0aW9ucyAmJiBhQWxsb3dlZEFjdGlvbnMuaW5jbHVkZXMoc0FjdGlvbikpIHtcblx0XHRcdGFJdGVtcy5wdXNoKHtcblx0XHRcdFx0dGV4dDogb0xpbmsudGV4dCxcblx0XHRcdFx0dGFyZ2V0U2VtT2JqZWN0OiBzSW50ZW50LnNwbGl0KFwiI1wiKVsxXS5zcGxpdChcIi1cIilbMF0sXG5cdFx0XHRcdHRhcmdldEFjdGlvbjogc0FjdGlvbi5zcGxpdChcIn5cIilbMF0sXG5cdFx0XHRcdHRhcmdldFBhcmFtczogb1RhcmdldFBhcmFtc1xuXHRcdFx0fSk7XG5cdFx0fSBlbHNlIGlmICghYUFsbG93ZWRBY3Rpb25zICYmIGFFeGNsdWRlZEFjdGlvbnMgJiYgYUV4Y2x1ZGVkQWN0aW9ucy5pbmRleE9mKHNBY3Rpb24pID09PSAtMSkge1xuXHRcdFx0YUl0ZW1zLnB1c2goe1xuXHRcdFx0XHR0ZXh0OiBvTGluay50ZXh0LFxuXHRcdFx0XHR0YXJnZXRTZW1PYmplY3Q6IHNJbnRlbnQuc3BsaXQoXCIjXCIpWzFdLnNwbGl0KFwiLVwiKVswXSxcblx0XHRcdFx0dGFyZ2V0QWN0aW9uOiBzQWN0aW9uLnNwbGl0KFwiflwiKVswXSxcblx0XHRcdFx0dGFyZ2V0UGFyYW1zOiBvVGFyZ2V0UGFyYW1zXG5cdFx0XHR9KTtcblx0XHR9XG5cdH1cbn1cblxudHlwZSBTZW1hbnRpY09iamVjdCA9IHtcblx0YWxsb3dlZEFjdGlvbnM/OiB1bmtub3duW107XG5cdHVuYXZhaWxhYmxlQWN0aW9ucz86IHVua25vd25bXTtcblx0c2VtYW50aWNPYmplY3Q6IHN0cmluZztcblx0cGF0aDogc3RyaW5nO1xuXHRtYXBwaW5nPzogUmVjb3JkPHN0cmluZywgc3RyaW5nPjtcbn07XG5cbmZ1bmN0aW9uIF9nZXRSZWxhdGVkSW50ZW50cyhcblx0b0FkZGl0aW9uYWxTZW1hbnRpY09iamVjdHM6IFNlbWFudGljT2JqZWN0LFxuXHRvQmluZGluZ0NvbnRleHQ6IENvbnRleHQsXG5cdGFNYW5pZmVzdFNPSXRlbXM6IFNlbWFudGljSXRlbVtdLFxuXHRhTGlua3M6IExpbmtEZWZpbml0aW9uW11cbikge1xuXHRpZiAoYUxpbmtzICYmIGFMaW5rcy5sZW5ndGggPiAwKSB7XG5cdFx0Y29uc3QgYUFsbG93ZWRBY3Rpb25zID0gb0FkZGl0aW9uYWxTZW1hbnRpY09iamVjdHMuYWxsb3dlZEFjdGlvbnMgfHwgdW5kZWZpbmVkO1xuXHRcdGNvbnN0IGFFeGNsdWRlZEFjdGlvbnMgPSBvQWRkaXRpb25hbFNlbWFudGljT2JqZWN0cy51bmF2YWlsYWJsZUFjdGlvbnMgPyBvQWRkaXRpb25hbFNlbWFudGljT2JqZWN0cy51bmF2YWlsYWJsZUFjdGlvbnMgOiBbXTtcblx0XHRjb25zdCBhU09NYXBwaW5ncyA9IG9BZGRpdGlvbmFsU2VtYW50aWNPYmplY3RzLm1hcHBpbmcgPyBfY3JlYXRlTWFwcGluZ3Mob0FkZGl0aW9uYWxTZW1hbnRpY09iamVjdHMubWFwcGluZykgOiBbXTtcblx0XHRjb25zdCBvVGFyZ2V0UGFyYW1zID0geyBuYXZpZ2F0aW9uQ29udGV4dHM6IG9CaW5kaW5nQ29udGV4dCwgc2VtYW50aWNPYmplY3RNYXBwaW5nOiBhU09NYXBwaW5ncyB9O1xuXHRcdF9nZXRSZWxhdGVkQXBwc01lbnVJdGVtcyhhTGlua3MsIGFFeGNsdWRlZEFjdGlvbnMsIG9UYXJnZXRQYXJhbXMsIGFNYW5pZmVzdFNPSXRlbXMsIGFBbGxvd2VkQWN0aW9ucyk7XG5cdH1cbn1cblxuLyoqXG4gKiBAZGVzY3JpcHRpb24gVGhpcyBmdW5jdGlvbiBmZXRjaGVzIHRoZSByZWxhdGVkIGludGVudHMgd2hlbiBzZW1hbnRpYyBvYmplY3QgYW5kIGFjdGlvbiBhcmUgcGFzc2VkIGZyb20gZmVFbnZpcm9ubWVudC5nZXRJbnRlbnQoKSBvbmx5IGluIGNhc2Ugb2YgTXkgSW5ib3ggaW50ZWdyYXRpb25cbiAqIEBwYXJhbSBzZW1hbnRpY09iamVjdEFuZEFjdGlvbiBUaGlzIHNwZWNpZmllcyB0aGUgc2VtYW50aWMgb2JqZWN0IGFuZCBhY3Rpb24gZm9yIGZldGNoaW5nIHRoZSBpbnRlbnRzXG4gKiBAcGFyYW0gb0JpbmRpbmdDb250ZXh0IFRoaXMgc2VwY2lmaWVzIHRoZSBiaW5kaW5nIGNvbnRleHQgZm9yIHVwZGF0aW5nIHJlbGF0ZWQgYXBwc1xuICogQHBhcmFtIGFwcENvbXBvbmVudFNPSXRlbXMgVGhpcyBpcyBhIGxpc3Qgb2Ygc2VtYW50aWMgaXRlbXMgdXNlZCBmb3IgdXBkYXRpbmcgdGhlIHJlbGF0ZWQgYXBwcyBidXR0b25cbiAqIEBwYXJhbSBhTGlua3MgVGhpcyBpcyBhbiBhcnJheSBjb21wcmlzaW5nIG9mIHJlbGF0ZWQgaW50ZW50c1xuICovXG5cbmZ1bmN0aW9uIF9nZXRSZWxhdGVkSW50ZW50c1dpdGhTZW1hbnRpY09iamVjdHNBbmRBY3Rpb24oXG5cdHNlbWFudGljT2JqZWN0QW5kQWN0aW9uOiBNeUluYm94SW50ZW50LFxuXHRvQmluZGluZ0NvbnRleHQ6IENvbnRleHQsXG5cdGFwcENvbXBvbmVudFNPSXRlbXM6IFNlbWFudGljSXRlbVtdLFxuXHRhTGlua3M6IExpbmtEZWZpbml0aW9uW11cbikge1xuXHRpZiAoYUxpbmtzLmxlbmd0aCA+IDApIHtcblx0XHRjb25zdCBhY3Rpb25zID0gW3NlbWFudGljT2JqZWN0QW5kQWN0aW9uLmFjdGlvbl07XG5cdFx0Y29uc3QgZXhjbHVkZWRBY3Rpb25zOiBbXSA9IFtdO1xuXHRcdGNvbnN0IHNvTWFwcGluZ3M6IFtdID0gW107XG5cdFx0Y29uc3QgdGFyZ2V0UGFyYW1zID0geyBuYXZpZ2F0aW9uQ29udGV4dHM6IG9CaW5kaW5nQ29udGV4dCwgc2VtYW50aWNPYmplY3RNYXBwaW5nOiBzb01hcHBpbmdzIH07XG5cdFx0X2dldFJlbGF0ZWRBcHBzTWVudUl0ZW1zKGFMaW5rcywgZXhjbHVkZWRBY3Rpb25zLCB0YXJnZXRQYXJhbXMsIGFwcENvbXBvbmVudFNPSXRlbXMsIGFjdGlvbnMpO1xuXHR9XG59XG5cbnR5cGUgU2VtYW50aWNPYmplY3RDb25maWcgPSB7XG5cdGFkZGl0aW9uYWxTZW1hbnRpY09iamVjdHM6IFJlY29yZDxzdHJpbmcsIFNlbWFudGljT2JqZWN0Pjtcbn07XG50eXBlIFJlbGF0ZWRBcHBzQ29uZmlnID0ge1xuXHR0ZXh0OiBzdHJpbmc7XG5cdHRhcmdldFNlbU9iamVjdDogc3RyaW5nO1xuXHR0YXJnZXRBY3Rpb246IHN0cmluZztcbn07XG5hc3luYyBmdW5jdGlvbiB1cGRhdGVSZWxhdGVBcHBzTW9kZWwoXG5cdG9CaW5kaW5nQ29udGV4dDogQ29udGV4dCxcblx0b0VudHJ5OiBSZWNvcmQ8c3RyaW5nLCB1bmtub3duPiB8IHVuZGVmaW5lZCxcblx0b09iamVjdFBhZ2VMYXlvdXQ6IE9iamVjdFBhZ2VMYXlvdXQsXG5cdGFTZW1LZXlzOiB7ICRQcm9wZXJ0eVBhdGg6IHN0cmluZyB9W10sXG5cdG9NZXRhTW9kZWw6IE9EYXRhTWV0YU1vZGVsLFxuXHRvTWV0YVBhdGg6IHN0cmluZyxcblx0YXBwQ29tcG9uZW50OiBBcHBDb21wb25lbnRcbik6IFByb21pc2U8UmVsYXRlZEFwcHNDb25maWdbXT4ge1xuXHRjb25zdCBvU2hlbGxTZXJ2aWNlSGVscGVyOiBJU2hlbGxTZXJ2aWNlcyA9IGFwcENvbXBvbmVudC5nZXRTaGVsbFNlcnZpY2VzKCk7XG5cdGNvbnN0IG9QYXJhbTogUmVjb3JkPHN0cmluZywgdW5rbm93bj4gPSB7fTtcblx0bGV0IHNDdXJyZW50U2VtT2JqID0gXCJcIixcblx0XHRzQ3VycmVudEFjdGlvbiA9IFwiXCI7XG5cdGxldCBvU2VtYW50aWNPYmplY3RBbm5vdGF0aW9ucztcblx0bGV0IGFSZWxhdGVkQXBwc01lbnVJdGVtczogUmVsYXRlZEFwcHNDb25maWdbXSA9IFtdO1xuXHRsZXQgYUV4Y2x1ZGVkQWN0aW9uczogdW5rbm93bltdID0gW107XG5cdGxldCBhTWFuaWZlc3RTT0tleXM6IHN0cmluZ1tdO1xuXG5cdGFzeW5jIGZ1bmN0aW9uIGZuR2V0UGFyc2VTaGVsbEhhc2hBbmRHZXRMaW5rcygpIHtcblx0XHRjb25zdCBvUGFyc2VkVXJsID0gb1NoZWxsU2VydmljZUhlbHBlci5wYXJzZVNoZWxsSGFzaChkb2N1bWVudC5sb2NhdGlvbi5oYXNoKTtcblx0XHRzQ3VycmVudFNlbU9iaiA9IG9QYXJzZWRVcmwuc2VtYW50aWNPYmplY3Q7IC8vIEN1cnJlbnQgU2VtYW50aWMgT2JqZWN0XG5cdFx0c0N1cnJlbnRBY3Rpb24gPSBvUGFyc2VkVXJsLmFjdGlvbjtcblx0XHRyZXR1cm4gX2dldFNPSW50ZW50cyhvU2hlbGxTZXJ2aWNlSGVscGVyLCBvT2JqZWN0UGFnZUxheW91dCwgc0N1cnJlbnRTZW1PYmosIG9QYXJhbSk7XG5cdH1cblxuXHR0cnkge1xuXHRcdGlmIChvRW50cnkpIHtcblx0XHRcdGlmIChhU2VtS2V5cyAmJiBhU2VtS2V5cy5sZW5ndGggPiAwKSB7XG5cdFx0XHRcdGZvciAobGV0IGogPSAwOyBqIDwgYVNlbUtleXMubGVuZ3RoOyBqKyspIHtcblx0XHRcdFx0XHRjb25zdCBzU2VtS2V5ID0gYVNlbUtleXNbal0uJFByb3BlcnR5UGF0aDtcblx0XHRcdFx0XHRpZiAoIW9QYXJhbVtzU2VtS2V5XSkge1xuXHRcdFx0XHRcdFx0b1BhcmFtW3NTZW1LZXldID0geyB2YWx1ZTogb0VudHJ5W3NTZW1LZXldIH07XG5cdFx0XHRcdFx0fVxuXHRcdFx0XHR9XG5cdFx0XHR9IGVsc2Uge1xuXHRcdFx0XHQvLyBmYWxsYmFjayB0byBUZWNobmljYWwgS2V5cyBpZiBubyBTZW1hbnRpYyBLZXkgaXMgcHJlc2VudFxuXHRcdFx0XHRjb25zdCBhVGVjaG5pY2FsS2V5cyA9IG9NZXRhTW9kZWwuZ2V0T2JqZWN0KGAke29NZXRhUGF0aH0vJFR5cGUvJEtleWApO1xuXHRcdFx0XHRmb3IgKGNvbnN0IGtleSBpbiBhVGVjaG5pY2FsS2V5cykge1xuXHRcdFx0XHRcdGNvbnN0IHNPYmpLZXkgPSBhVGVjaG5pY2FsS2V5c1trZXldO1xuXHRcdFx0XHRcdGlmICghb1BhcmFtW3NPYmpLZXldKSB7XG5cdFx0XHRcdFx0XHRvUGFyYW1bc09iaktleV0gPSB7IHZhbHVlOiBvRW50cnlbc09iaktleV0gfTtcblx0XHRcdFx0XHR9XG5cdFx0XHRcdH1cblx0XHRcdH1cblx0XHR9XG5cdFx0Ly8gTG9naWMgdG8gcmVhZCBhZGRpdGlvbmFsIFNPIGZyb20gbWFuaWZlc3QgYW5kIHVwZGF0ZWQgcmVsYXRlZGFwcHMgbW9kZWxcblxuXHRcdGNvbnN0IG9NYW5pZmVzdERhdGEgPSBnZXRUYXJnZXRWaWV3KG9PYmplY3RQYWdlTGF5b3V0KS5nZXRWaWV3RGF0YSgpIGFzIFNlbWFudGljT2JqZWN0Q29uZmlnO1xuXHRcdGNvbnN0IGFNYW5pZmVzdFNPSXRlbXM6IFNlbWFudGljSXRlbVtdID0gW107XG5cdFx0bGV0IHNlbWFudGljT2JqZWN0SW50ZW50cztcblx0XHRpZiAob01hbmlmZXN0RGF0YS5hZGRpdGlvbmFsU2VtYW50aWNPYmplY3RzKSB7XG5cdFx0XHRhTWFuaWZlc3RTT0tleXMgPSBPYmplY3Qua2V5cyhvTWFuaWZlc3REYXRhLmFkZGl0aW9uYWxTZW1hbnRpY09iamVjdHMpO1xuXHRcdFx0Zm9yIChsZXQga2V5ID0gMDsga2V5IDwgYU1hbmlmZXN0U09LZXlzLmxlbmd0aDsga2V5KyspIHtcblx0XHRcdFx0c2VtYW50aWNPYmplY3RJbnRlbnRzID0gYXdhaXQgUHJvbWlzZS5yZXNvbHZlKFxuXHRcdFx0XHRcdF9nZXRTT0ludGVudHMob1NoZWxsU2VydmljZUhlbHBlciwgb09iamVjdFBhZ2VMYXlvdXQsIGFNYW5pZmVzdFNPS2V5c1trZXldLCBvUGFyYW0pXG5cdFx0XHRcdCk7XG5cdFx0XHRcdF9nZXRSZWxhdGVkSW50ZW50cyhcblx0XHRcdFx0XHRvTWFuaWZlc3REYXRhLmFkZGl0aW9uYWxTZW1hbnRpY09iamVjdHNbYU1hbmlmZXN0U09LZXlzW2tleV1dLFxuXHRcdFx0XHRcdG9CaW5kaW5nQ29udGV4dCxcblx0XHRcdFx0XHRhTWFuaWZlc3RTT0l0ZW1zLFxuXHRcdFx0XHRcdHNlbWFudGljT2JqZWN0SW50ZW50c1xuXHRcdFx0XHQpO1xuXHRcdFx0fVxuXHRcdH1cblxuXHRcdC8vIGFwcENvbXBvbmVudFNPSXRlbXMgaXMgdXBkYXRlZCBpbiBjYXNlIG9mIE15IEluYm94IGludGVncmF0aW9uIHdoZW4gc2VtYW50aWMgb2JqZWN0IGFuZCBhY3Rpb24gYXJlIHBhc3NlZCBmcm9tIGZlRW52aXJvbm1lbnQuZ2V0SW50ZW50KCkgbWV0aG9kXG5cdFx0Ly8gSW4gb3RoZXIgY2FzZXMgaXQgcmVtYWlucyBhcyBhbiBlbXB0eSBsaXN0XG5cdFx0Ly8gV2UgY29uY2F0IHRoaXMgbGlzdCB0b3dhcmRzIHRoZSBlbmQgd2l0aCBhTWFuaWZlc3RTT0l0ZW1zXG5cblx0XHRjb25zdCBhcHBDb21wb25lbnRTT0l0ZW1zOiBTZW1hbnRpY0l0ZW1bXSA9IFtdO1xuXHRcdGNvbnN0IGNvbXBvbmVudERhdGE6IENvbXBvbmVudERhdGEgPSBhcHBDb21wb25lbnQuZ2V0Q29tcG9uZW50RGF0YSgpO1xuXHRcdGlmIChjb21wb25lbnREYXRhLmZlRW52aXJvbm1lbnQgJiYgY29tcG9uZW50RGF0YS5mZUVudmlyb25tZW50LmdldEludGVudCgpKSB7XG5cdFx0XHRjb25zdCBpbnRlbnQ6IE15SW5ib3hJbnRlbnQgPSBjb21wb25lbnREYXRhLmZlRW52aXJvbm1lbnQuZ2V0SW50ZW50KCk7XG5cdFx0XHRzZW1hbnRpY09iamVjdEludGVudHMgPSBhd2FpdCBQcm9taXNlLnJlc29sdmUoXG5cdFx0XHRcdF9nZXRTT0ludGVudHMob1NoZWxsU2VydmljZUhlbHBlciwgb09iamVjdFBhZ2VMYXlvdXQsIGludGVudC5zZW1hbnRpY09iamVjdCwgb1BhcmFtKVxuXHRcdFx0KTtcblx0XHRcdF9nZXRSZWxhdGVkSW50ZW50c1dpdGhTZW1hbnRpY09iamVjdHNBbmRBY3Rpb24oaW50ZW50LCBvQmluZGluZ0NvbnRleHQsIGFwcENvbXBvbmVudFNPSXRlbXMsIHNlbWFudGljT2JqZWN0SW50ZW50cyk7XG5cdFx0fVxuXG5cdFx0Y29uc3QgaW50ZXJuYWxNb2RlbENvbnRleHQgPSBvT2JqZWN0UGFnZUxheW91dC5nZXRCaW5kaW5nQ29udGV4dChcImludGVybmFsXCIpIGFzIEludGVybmFsTW9kZWxDb250ZXh0O1xuXHRcdGNvbnN0IGFMaW5rcyA9IGF3YWl0IGZuR2V0UGFyc2VTaGVsbEhhc2hBbmRHZXRMaW5rcygpO1xuXHRcdGlmIChhTGlua3MpIHtcblx0XHRcdGlmIChhTGlua3MubGVuZ3RoID4gMCkge1xuXHRcdFx0XHRsZXQgaXNTZW1hbnRpY09iamVjdEhhc1NhbWVUYXJnZXRJbk1hbmlmZXN0ID0gZmFsc2U7XG5cdFx0XHRcdGNvbnN0IG9UYXJnZXRQYXJhbXM6IHtcblx0XHRcdFx0XHRuYXZpZ2F0aW9uQ29udGV4dHM/OiBDb250ZXh0O1xuXHRcdFx0XHRcdHNlbWFudGljT2JqZWN0TWFwcGluZz86IE1ldGFNb2RlbFR5cGU8U2VtYW50aWNPYmplY3RNYXBwaW5nVHlwZT5bXTtcblx0XHRcdFx0fSA9IHt9O1xuXHRcdFx0XHRjb25zdCBhQW5ub3RhdGlvbnNTT0l0ZW1zOiBTZW1hbnRpY0l0ZW1bXSA9IFtdO1xuXHRcdFx0XHRjb25zdCBzRW50aXR5U2V0UGF0aCA9IGAke29NZXRhUGF0aH1AYDtcblx0XHRcdFx0Y29uc3Qgc0VudGl0eVR5cGVQYXRoID0gYCR7b01ldGFQYXRofS9AYDtcblx0XHRcdFx0Y29uc3Qgb0VudGl0eVNldEFubm90YXRpb25zID0gb01ldGFNb2RlbC5nZXRPYmplY3Qoc0VudGl0eVNldFBhdGgpO1xuXHRcdFx0XHRvU2VtYW50aWNPYmplY3RBbm5vdGF0aW9ucyA9IENvbW1vblV0aWxzLmdldFNlbWFudGljT2JqZWN0QW5ub3RhdGlvbnMob0VudGl0eVNldEFubm90YXRpb25zLCBzQ3VycmVudFNlbU9iaik7XG5cdFx0XHRcdGlmICghb1NlbWFudGljT2JqZWN0QW5ub3RhdGlvbnMuYkhhc0VudGl0eVNldFNPKSB7XG5cdFx0XHRcdFx0Y29uc3Qgb0VudGl0eVR5cGVBbm5vdGF0aW9ucyA9IG9NZXRhTW9kZWwuZ2V0T2JqZWN0KHNFbnRpdHlUeXBlUGF0aCk7XG5cdFx0XHRcdFx0b1NlbWFudGljT2JqZWN0QW5ub3RhdGlvbnMgPSBDb21tb25VdGlscy5nZXRTZW1hbnRpY09iamVjdEFubm90YXRpb25zKG9FbnRpdHlUeXBlQW5ub3RhdGlvbnMsIHNDdXJyZW50U2VtT2JqKTtcblx0XHRcdFx0fVxuXHRcdFx0XHRhRXhjbHVkZWRBY3Rpb25zID0gb1NlbWFudGljT2JqZWN0QW5ub3RhdGlvbnMuYVVuYXZhaWxhYmxlQWN0aW9ucztcblx0XHRcdFx0Ly9Ta2lwIHNhbWUgYXBwbGljYXRpb24gZnJvbSBSZWxhdGVkIEFwcHNcblx0XHRcdFx0YUV4Y2x1ZGVkQWN0aW9ucy5wdXNoKHNDdXJyZW50QWN0aW9uKTtcblx0XHRcdFx0b1RhcmdldFBhcmFtcy5uYXZpZ2F0aW9uQ29udGV4dHMgPSBvQmluZGluZ0NvbnRleHQ7XG5cdFx0XHRcdG9UYXJnZXRQYXJhbXMuc2VtYW50aWNPYmplY3RNYXBwaW5nID0gb1NlbWFudGljT2JqZWN0QW5ub3RhdGlvbnMuYU1hcHBpbmdzO1xuXHRcdFx0XHRfZ2V0UmVsYXRlZEFwcHNNZW51SXRlbXMoYUxpbmtzLCBhRXhjbHVkZWRBY3Rpb25zLCBvVGFyZ2V0UGFyYW1zLCBhQW5ub3RhdGlvbnNTT0l0ZW1zKTtcblxuXHRcdFx0XHRhTWFuaWZlc3RTT0l0ZW1zLmZvckVhY2goZnVuY3Rpb24gKHsgdGFyZ2V0U2VtT2JqZWN0IH0pIHtcblx0XHRcdFx0XHRpZiAoYUFubm90YXRpb25zU09JdGVtc1swXT8udGFyZ2V0U2VtT2JqZWN0ID09PSB0YXJnZXRTZW1PYmplY3QpIHtcblx0XHRcdFx0XHRcdGlzU2VtYW50aWNPYmplY3RIYXNTYW1lVGFyZ2V0SW5NYW5pZmVzdCA9IHRydWU7XG5cdFx0XHRcdFx0fVxuXHRcdFx0XHR9KTtcblxuXHRcdFx0XHQvLyByZW1vdmUgYWxsIGFjdGlvbnMgZnJvbSBjdXJyZW50IGhhc2ggYXBwbGljYXRpb24gaWYgbWFuaWZlc3QgY29udGFpbnMgZW1wdHkgYWxsb3dlZEFjdGlvbnNcblx0XHRcdFx0aWYgKFxuXHRcdFx0XHRcdG9NYW5pZmVzdERhdGEuYWRkaXRpb25hbFNlbWFudGljT2JqZWN0cyAmJlxuXHRcdFx0XHRcdGFBbm5vdGF0aW9uc1NPSXRlbXNbMF0gJiZcblx0XHRcdFx0XHRvTWFuaWZlc3REYXRhLmFkZGl0aW9uYWxTZW1hbnRpY09iamVjdHNbYUFubm90YXRpb25zU09JdGVtc1swXS50YXJnZXRTZW1PYmplY3RdICYmXG5cdFx0XHRcdFx0ISFvTWFuaWZlc3REYXRhLmFkZGl0aW9uYWxTZW1hbnRpY09iamVjdHNbYUFubm90YXRpb25zU09JdGVtc1swXS50YXJnZXRTZW1PYmplY3RdLmFsbG93ZWRBY3Rpb25zXG5cdFx0XHRcdCkge1xuXHRcdFx0XHRcdGlzU2VtYW50aWNPYmplY3RIYXNTYW1lVGFyZ2V0SW5NYW5pZmVzdCA9IHRydWU7XG5cdFx0XHRcdH1cblx0XHRcdFx0Y29uc3Qgc29JdGVtcyA9IGFNYW5pZmVzdFNPSXRlbXMuY29uY2F0KGFwcENvbXBvbmVudFNPSXRlbXMpO1xuXHRcdFx0XHRhUmVsYXRlZEFwcHNNZW51SXRlbXMgPSBpc1NlbWFudGljT2JqZWN0SGFzU2FtZVRhcmdldEluTWFuaWZlc3QgPyBzb0l0ZW1zIDogc29JdGVtcy5jb25jYXQoYUFubm90YXRpb25zU09JdGVtcyk7XG5cdFx0XHRcdC8vIElmIG5vIGFwcCBpbiBsaXN0LCByZWxhdGVkIGFwcHMgYnV0dG9uIHdpbGwgYmUgaGlkZGVuXG5cdFx0XHRcdGludGVybmFsTW9kZWxDb250ZXh0LnNldFByb3BlcnR5KFwicmVsYXRlZEFwcHMvdmlzaWJpbGl0eVwiLCBhUmVsYXRlZEFwcHNNZW51SXRlbXMubGVuZ3RoID4gMCk7XG5cdFx0XHRcdGludGVybmFsTW9kZWxDb250ZXh0LnNldFByb3BlcnR5KFwicmVsYXRlZEFwcHMvaXRlbXNcIiwgYVJlbGF0ZWRBcHBzTWVudUl0ZW1zKTtcblx0XHRcdH0gZWxzZSB7XG5cdFx0XHRcdGludGVybmFsTW9kZWxDb250ZXh0LnNldFByb3BlcnR5KFwicmVsYXRlZEFwcHMvdmlzaWJpbGl0eVwiLCBmYWxzZSk7XG5cdFx0XHR9XG5cdFx0fSBlbHNlIHtcblx0XHRcdGludGVybmFsTW9kZWxDb250ZXh0LnNldFByb3BlcnR5KFwicmVsYXRlZEFwcHMvdmlzaWJpbGl0eVwiLCBmYWxzZSk7XG5cdFx0fVxuXHR9IGNhdGNoIChlcnJvcjogdW5rbm93bikge1xuXHRcdExvZy5lcnJvcihcIkNhbm5vdCByZWFkIGxpbmtzXCIsIGVycm9yIGFzIHN0cmluZyk7XG5cdH1cblx0cmV0dXJuIGFSZWxhdGVkQXBwc01lbnVJdGVtcztcbn1cblxuZnVuY3Rpb24gX2dldFNlbWFudGljT2JqZWN0QW5ub3RhdGlvbnMob0VudGl0eUFubm90YXRpb25zOiBSZWNvcmQ8c3RyaW5nLCB1bmtub3duPiwgc0N1cnJlbnRTZW1PYmo6IHN0cmluZykge1xuXHRjb25zdCBvU2VtYW50aWNPYmplY3RBbm5vdGF0aW9ucyA9IHtcblx0XHRiSGFzRW50aXR5U2V0U086IGZhbHNlLFxuXHRcdGFBbGxvd2VkQWN0aW9uczogW10sXG5cdFx0YVVuYXZhaWxhYmxlQWN0aW9uczogW10gYXMgTWV0YU1vZGVsVHlwZTxTZW1hbnRpY09iamVjdFVuYXZhaWxhYmxlQWN0aW9ucz5bXSxcblx0XHRhTWFwcGluZ3M6IFtdIGFzIE1ldGFNb2RlbFR5cGU8U2VtYW50aWNPYmplY3RNYXBwaW5nVHlwZT5bXVxuXHR9O1xuXHRsZXQgc0Fubm90YXRpb25NYXBwaW5nVGVybSwgc0Fubm90YXRpb25BY3Rpb25UZXJtO1xuXHRsZXQgc1F1YWxpZmllcjtcblx0Zm9yIChjb25zdCBrZXkgaW4gb0VudGl0eUFubm90YXRpb25zKSB7XG5cdFx0aWYgKGtleS5pbmRleE9mKENvbW1vbkFubm90YXRpb25UZXJtcy5TZW1hbnRpY09iamVjdCkgPiAtMSAmJiBvRW50aXR5QW5ub3RhdGlvbnNba2V5XSA9PT0gc0N1cnJlbnRTZW1PYmopIHtcblx0XHRcdG9TZW1hbnRpY09iamVjdEFubm90YXRpb25zLmJIYXNFbnRpdHlTZXRTTyA9IHRydWU7XG5cdFx0XHRzQW5ub3RhdGlvbk1hcHBpbmdUZXJtID0gYEAke0NvbW1vbkFubm90YXRpb25UZXJtcy5TZW1hbnRpY09iamVjdE1hcHBpbmd9YDtcblx0XHRcdHNBbm5vdGF0aW9uQWN0aW9uVGVybSA9IGBAJHtDb21tb25Bbm5vdGF0aW9uVGVybXMuU2VtYW50aWNPYmplY3RVbmF2YWlsYWJsZUFjdGlvbnN9YDtcblxuXHRcdFx0aWYgKGtleS5pbmRleE9mKFwiI1wiKSA+IC0xKSB7XG5cdFx0XHRcdHNRdWFsaWZpZXIgPSBrZXkuc3BsaXQoXCIjXCIpWzFdO1xuXHRcdFx0XHRzQW5ub3RhdGlvbk1hcHBpbmdUZXJtID0gYCR7c0Fubm90YXRpb25NYXBwaW5nVGVybX0jJHtzUXVhbGlmaWVyfWA7XG5cdFx0XHRcdHNBbm5vdGF0aW9uQWN0aW9uVGVybSA9IGAke3NBbm5vdGF0aW9uQWN0aW9uVGVybX0jJHtzUXVhbGlmaWVyfWA7XG5cdFx0XHR9XG5cdFx0XHRpZiAob0VudGl0eUFubm90YXRpb25zW3NBbm5vdGF0aW9uTWFwcGluZ1Rlcm1dKSB7XG5cdFx0XHRcdG9TZW1hbnRpY09iamVjdEFubm90YXRpb25zLmFNYXBwaW5ncyA9IG9TZW1hbnRpY09iamVjdEFubm90YXRpb25zLmFNYXBwaW5ncy5jb25jYXQoXG5cdFx0XHRcdFx0b0VudGl0eUFubm90YXRpb25zW3NBbm5vdGF0aW9uTWFwcGluZ1Rlcm1dIGFzIE1ldGFNb2RlbFR5cGU8U2VtYW50aWNPYmplY3RNYXBwaW5nVHlwZT5cblx0XHRcdFx0KTtcblx0XHRcdH1cblxuXHRcdFx0aWYgKG9FbnRpdHlBbm5vdGF0aW9uc1tzQW5ub3RhdGlvbkFjdGlvblRlcm1dKSB7XG5cdFx0XHRcdG9TZW1hbnRpY09iamVjdEFubm90YXRpb25zLmFVbmF2YWlsYWJsZUFjdGlvbnMgPSBvU2VtYW50aWNPYmplY3RBbm5vdGF0aW9ucy5hVW5hdmFpbGFibGVBY3Rpb25zLmNvbmNhdChcblx0XHRcdFx0XHRvRW50aXR5QW5ub3RhdGlvbnNbc0Fubm90YXRpb25BY3Rpb25UZXJtXSBhcyBNZXRhTW9kZWxUeXBlPFNlbWFudGljT2JqZWN0VW5hdmFpbGFibGVBY3Rpb25zPlxuXHRcdFx0XHQpO1xuXHRcdFx0fVxuXG5cdFx0XHRicmVhaztcblx0XHR9XG5cdH1cblx0cmV0dXJuIG9TZW1hbnRpY09iamVjdEFubm90YXRpb25zO1xufVxuXG5mdW5jdGlvbiBmblVwZGF0ZVJlbGF0ZWRBcHBzRGV0YWlscyhvT2JqZWN0UGFnZUxheW91dDogT2JqZWN0UGFnZUxheW91dCwgYXBwQ29tcG9uZW50OiBBcHBDb21wb25lbnQpIHtcblx0Y29uc3Qgb01ldGFNb2RlbCA9IG9PYmplY3RQYWdlTGF5b3V0LmdldE1vZGVsKCkuZ2V0TWV0YU1vZGVsKCkgYXMgT0RhdGFNZXRhTW9kZWw7XG5cdGNvbnN0IG9CaW5kaW5nQ29udGV4dCA9IG9PYmplY3RQYWdlTGF5b3V0LmdldEJpbmRpbmdDb250ZXh0KCkgYXMgT0RhdGFWNENvbnRleHQ7XG5cdGNvbnN0IHBhdGggPSAob0JpbmRpbmdDb250ZXh0ICYmIG9CaW5kaW5nQ29udGV4dC5nZXRQYXRoKCkpIHx8IFwiXCI7XG5cdGNvbnN0IG9NZXRhUGF0aCA9IG9NZXRhTW9kZWwuZ2V0TWV0YVBhdGgocGF0aCk7XG5cdC8vIFNlbWFudGljIEtleSBWb2NhYnVsYXJ5XG5cdGNvbnN0IHNTZW1hbnRpY0tleVZvY2FidWxhcnkgPSBgJHtvTWV0YVBhdGh9L2AgKyBgQGNvbS5zYXAudm9jYWJ1bGFyaWVzLkNvbW1vbi52MS5TZW1hbnRpY0tleWA7XG5cdC8vU2VtYW50aWMgS2V5c1xuXHRjb25zdCBhU2VtS2V5cyA9IG9NZXRhTW9kZWwuZ2V0T2JqZWN0KHNTZW1hbnRpY0tleVZvY2FidWxhcnkpO1xuXHQvLyBVbmF2YWlsYWJsZSBBY3Rpb25zXG5cdGNvbnN0IG9FbnRyeSA9IG9CaW5kaW5nQ29udGV4dD8uZ2V0T2JqZWN0KCk7XG5cdGlmICghb0VudHJ5ICYmIG9CaW5kaW5nQ29udGV4dCkge1xuXHRcdG9CaW5kaW5nQ29udGV4dFxuXHRcdFx0LnJlcXVlc3RPYmplY3QoKVxuXHRcdFx0LnRoZW4oYXN5bmMgZnVuY3Rpb24gKHJlcXVlc3RlZE9iamVjdDogUmVjb3JkPHN0cmluZywgdW5rbm93bj4gfCB1bmRlZmluZWQpIHtcblx0XHRcdFx0cmV0dXJuIENvbW1vblV0aWxzLnVwZGF0ZVJlbGF0ZUFwcHNNb2RlbChcblx0XHRcdFx0XHRvQmluZGluZ0NvbnRleHQsXG5cdFx0XHRcdFx0cmVxdWVzdGVkT2JqZWN0LFxuXHRcdFx0XHRcdG9PYmplY3RQYWdlTGF5b3V0LFxuXHRcdFx0XHRcdGFTZW1LZXlzLFxuXHRcdFx0XHRcdG9NZXRhTW9kZWwsXG5cdFx0XHRcdFx0b01ldGFQYXRoLFxuXHRcdFx0XHRcdGFwcENvbXBvbmVudFxuXHRcdFx0XHQpO1xuXHRcdFx0fSlcblx0XHRcdC5jYXRjaChmdW5jdGlvbiAob0Vycm9yOiB1bmtub3duKSB7XG5cdFx0XHRcdExvZy5lcnJvcihcIkNhbm5vdCB1cGRhdGUgdGhlIHJlbGF0ZWQgYXBwIGRldGFpbHNcIiwgb0Vycm9yIGFzIHN0cmluZyk7XG5cdFx0XHR9KTtcblx0fSBlbHNlIHtcblx0XHRyZXR1cm4gQ29tbW9uVXRpbHMudXBkYXRlUmVsYXRlQXBwc01vZGVsKG9CaW5kaW5nQ29udGV4dCwgb0VudHJ5LCBvT2JqZWN0UGFnZUxheW91dCwgYVNlbUtleXMsIG9NZXRhTW9kZWwsIG9NZXRhUGF0aCwgYXBwQ29tcG9uZW50KTtcblx0fVxufVxuXG4vKipcbiAqIEBwYXJhbSBvQnV0dG9uXG4gKi9cbmZ1bmN0aW9uIGZuRmlyZUJ1dHRvblByZXNzKG9CdXR0b246IENvbnRyb2wpIHtcblx0aWYgKFxuXHRcdG9CdXR0b24gJiZcblx0XHRvQnV0dG9uLmlzQTxCdXR0b24gfCBPdmVyZmxvd1Rvb2xiYXJCdXR0b24+KFtcInNhcC5tLkJ1dHRvblwiLCBcInNhcC5tLk92ZXJmbG93VG9vbGJhckJ1dHRvblwiXSkgJiZcblx0XHRvQnV0dG9uLmdldFZpc2libGUoKSAmJlxuXHRcdG9CdXR0b24uZ2V0RW5hYmxlZCgpXG5cdCkge1xuXHRcdG9CdXR0b24uZmlyZVByZXNzKCk7XG5cdH1cbn1cblxuZnVuY3Rpb24gZ2V0QXBwQ29tcG9uZW50KG9Db250cm9sOiBDb250cm9sIHwgQ29tcG9uZW50KTogQXBwQ29tcG9uZW50IHtcblx0aWYgKG9Db250cm9sLmlzQTxBcHBDb21wb25lbnQ+KFwic2FwLmZlLmNvcmUuQXBwQ29tcG9uZW50XCIpKSB7XG5cdFx0cmV0dXJuIG9Db250cm9sO1xuXHR9XG5cdGNvbnN0IG9Pd25lciA9IENvbXBvbmVudC5nZXRPd25lckNvbXBvbmVudEZvcihvQ29udHJvbCk7XG5cdGlmICghb093bmVyKSB7XG5cdFx0dGhyb3cgbmV3IEVycm9yKFwiVGhlcmUgc2hvdWxkIGJlIGEgc2FwLmZlLmNvcmUuQXBwQ29tcG9uZW50IGFzIG93bmVyIG9mIHRoZSBjb250cm9sXCIpO1xuXHR9IGVsc2Uge1xuXHRcdHJldHVybiBnZXRBcHBDb21wb25lbnQob093bmVyKTtcblx0fVxufVxuXG5mdW5jdGlvbiBnZXRDdXJyZW50UGFnZVZpZXcob0FwcENvbXBvbmVudDogQXBwQ29tcG9uZW50KSB7XG5cdGNvbnN0IHJvb3RWaWV3Q29udHJvbGxlciA9IG9BcHBDb21wb25lbnQuZ2V0Um9vdFZpZXdDb250cm9sbGVyKCk7XG5cdHJldHVybiByb290Vmlld0NvbnRyb2xsZXIuaXNGY2xFbmFibGVkKClcblx0XHQ/IHJvb3RWaWV3Q29udHJvbGxlci5nZXRSaWdodG1vc3RWaWV3KClcblx0XHQ6IENvbW1vblV0aWxzLmdldFRhcmdldFZpZXcoKG9BcHBDb21wb25lbnQuZ2V0Um9vdENvbnRhaW5lcigpIGFzIE5hdkNvbnRhaW5lcikuZ2V0Q3VycmVudFBhZ2UoKSk7XG59XG5cbmZ1bmN0aW9uIGdldFRhcmdldFZpZXcob0NvbnRyb2w6IE1hbmFnZWRPYmplY3QgfCBudWxsKTogVmlldyB7XG5cdGlmIChvQ29udHJvbCAmJiBvQ29udHJvbC5pc0E8Q29tcG9uZW50Q29udGFpbmVyPihcInNhcC51aS5jb3JlLkNvbXBvbmVudENvbnRhaW5lclwiKSkge1xuXHRcdGNvbnN0IG9Db21wb25lbnQgPSBvQ29udHJvbC5nZXRDb21wb25lbnRJbnN0YW5jZSgpO1xuXHRcdG9Db250cm9sID0gb0NvbXBvbmVudCAmJiBvQ29tcG9uZW50LmdldFJvb3RDb250cm9sKCk7XG5cdH1cblx0d2hpbGUgKG9Db250cm9sICYmICFvQ29udHJvbC5pc0E8Vmlldz4oXCJzYXAudWkuY29yZS5tdmMuVmlld1wiKSkge1xuXHRcdG9Db250cm9sID0gb0NvbnRyb2wuZ2V0UGFyZW50KCk7XG5cdH1cblx0cmV0dXJuIG9Db250cm9sITtcbn1cblxuZnVuY3Rpb24gX2ZuQ2hlY2tJc01hdGNoKG9PYmplY3Q6IG9iamVjdCwgb0tleXNUb0NoZWNrOiBSZWNvcmQ8c3RyaW5nLCB1bmtub3duPikge1xuXHRmb3IgKGNvbnN0IHNLZXkgaW4gb0tleXNUb0NoZWNrKSB7XG5cdFx0aWYgKG9LZXlzVG9DaGVja1tzS2V5XSAhPT0gb09iamVjdFtzS2V5IGFzIGtleW9mIHR5cGVvZiBvT2JqZWN0XSkge1xuXHRcdFx0cmV0dXJuIGZhbHNlO1xuXHRcdH1cblx0fVxuXHRyZXR1cm4gdHJ1ZTtcbn1cblxuZnVuY3Rpb24gZm5HZXRDb250ZXh0UGF0aFByb3BlcnRpZXMoXG5cdG1ldGFNb2RlbENvbnRleHQ6IE9EYXRhTWV0YU1vZGVsLFxuXHRzQ29udGV4dFBhdGg6IHN0cmluZyxcblx0b0ZpbHRlcj86IFJlY29yZDxzdHJpbmcsIHVua25vd24+XG4pOiBSZWNvcmQ8c3RyaW5nLCBNZXRhTW9kZWxQcm9wZXJ0eT4gfCBSZWNvcmQ8c3RyaW5nLCBNZXRhTW9kZWxOYXZQcm9wZXJ0eT4ge1xuXHRjb25zdCBvRW50aXR5VHlwZTogTWV0YU1vZGVsRW50aXR5VHlwZSA9IChtZXRhTW9kZWxDb250ZXh0LmdldE9iamVjdChgJHtzQ29udGV4dFBhdGh9L2ApIHx8IHt9KSBhcyBNZXRhTW9kZWxFbnRpdHlUeXBlLFxuXHRcdG9Qcm9wZXJ0aWVzOiBSZWNvcmQ8c3RyaW5nLCBNZXRhTW9kZWxQcm9wZXJ0eT4gfCBSZWNvcmQ8c3RyaW5nLCBNZXRhTW9kZWxOYXZQcm9wZXJ0eT4gPSB7fTtcblxuXHRmb3IgKGNvbnN0IHNLZXkgaW4gb0VudGl0eVR5cGUpIHtcblx0XHRpZiAoXG5cdFx0XHRvRW50aXR5VHlwZS5oYXNPd25Qcm9wZXJ0eShzS2V5KSAmJlxuXHRcdFx0IS9eXFwkL2kudGVzdChzS2V5KSAmJlxuXHRcdFx0b0VudGl0eVR5cGVbc0tleV0uJGtpbmQgJiZcblx0XHRcdF9mbkNoZWNrSXNNYXRjaChvRW50aXR5VHlwZVtzS2V5XSwgb0ZpbHRlciB8fCB7ICRraW5kOiBcIlByb3BlcnR5XCIgfSlcblx0XHQpIHtcblx0XHRcdG9Qcm9wZXJ0aWVzW3NLZXldID0gb0VudGl0eVR5cGVbc0tleV07XG5cdFx0fVxuXHR9XG5cdHJldHVybiBvUHJvcGVydGllcztcbn1cblxuZnVuY3Rpb24gZm5HZXRNYW5kYXRvcnlGaWx0ZXJGaWVsZHMob01ldGFNb2RlbDogT0RhdGFNZXRhTW9kZWwsIHNDb250ZXh0UGF0aDogc3RyaW5nKSB7XG5cdGxldCBhTWFuZGF0b3J5RmlsdGVyRmllbGRzOiBFeHBhbmRQYXRoVHlwZTxFZG0uUHJvcGVydHlQYXRoPltdID0gW107XG5cdGlmIChvTWV0YU1vZGVsICYmIHNDb250ZXh0UGF0aCkge1xuXHRcdGFNYW5kYXRvcnlGaWx0ZXJGaWVsZHMgPSBvTWV0YU1vZGVsLmdldE9iamVjdChcblx0XHRcdGAke3NDb250ZXh0UGF0aH1AT3JnLk9EYXRhLkNhcGFiaWxpdGllcy5WMS5GaWx0ZXJSZXN0cmljdGlvbnMvUmVxdWlyZWRQcm9wZXJ0aWVzYFxuXHRcdCkgYXMgRXhwYW5kUGF0aFR5cGU8RWRtLlByb3BlcnR5UGF0aD5bXTtcblx0fVxuXHRyZXR1cm4gYU1hbmRhdG9yeUZpbHRlckZpZWxkcztcbn1cblxuZnVuY3Rpb24gZm5HZXRJQk5BY3Rpb25zKG9Db250cm9sOiBUYWJsZSB8IE9iamVjdFBhZ2VEeW5hbWljSGVhZGVyVGl0bGUsIGFJQk5BY3Rpb25zOiB1bmtub3duW10pIHtcblx0Y29uc3QgYUFjdGlvbnMgPSBvQ29udHJvbCAmJiBvQ29udHJvbC5nZXRBY3Rpb25zKCk7XG5cdGlmIChhQWN0aW9ucykge1xuXHRcdGFBY3Rpb25zLmZvckVhY2goZnVuY3Rpb24gKG9BY3Rpb24pIHtcblx0XHRcdGlmIChvQWN0aW9uLmlzQTxBY3Rpb25Ub29sYmFyQWN0aW9uPihcInNhcC51aS5tZGMuYWN0aW9udG9vbGJhci5BY3Rpb25Ub29sYmFyQWN0aW9uXCIpKSB7XG5cdFx0XHRcdG9BY3Rpb24gPSBvQWN0aW9uLmdldEFjdGlvbigpO1xuXHRcdFx0fVxuXHRcdFx0aWYgKG9BY3Rpb24uaXNBPE1lbnVCdXR0b24+KFwic2FwLm0uTWVudUJ1dHRvblwiKSkge1xuXHRcdFx0XHRjb25zdCBvTWVudSA9IG9BY3Rpb24uZ2V0TWVudSgpO1xuXHRcdFx0XHRjb25zdCBhSXRlbXMgPSBvTWVudS5nZXRJdGVtcygpO1xuXHRcdFx0XHRhSXRlbXMuZm9yRWFjaCgob0l0ZW0pID0+IHtcblx0XHRcdFx0XHRpZiAob0l0ZW0uZGF0YShcIklCTkRhdGFcIikpIHtcblx0XHRcdFx0XHRcdGFJQk5BY3Rpb25zLnB1c2gob0l0ZW0pO1xuXHRcdFx0XHRcdH1cblx0XHRcdFx0fSk7XG5cdFx0XHR9IGVsc2UgaWYgKG9BY3Rpb24uZGF0YShcIklCTkRhdGFcIikpIHtcblx0XHRcdFx0YUlCTkFjdGlvbnMucHVzaChvQWN0aW9uKTtcblx0XHRcdH1cblx0XHR9KTtcblx0fVxuXHRyZXR1cm4gYUlCTkFjdGlvbnM7XG59XG5cbi8qKlxuICogQHBhcmFtIGFJQk5BY3Rpb25zXG4gKiBAcGFyYW0gb1ZpZXdcbiAqL1xuZnVuY3Rpb24gZm5VcGRhdGVEYXRhRmllbGRGb3JJQk5CdXR0b25zVmlzaWJpbGl0eShhSUJOQWN0aW9uczogQ29udHJvbFtdLCBvVmlldzogVmlldykge1xuXHRjb25zdCBvUGFyYW1zOiBSZWNvcmQ8c3RyaW5nLCB7IHZhbHVlOiB1bmtub3duIH0+ID0ge307XG5cdGNvbnN0IG9BcHBDb21wb25lbnQgPSBDb21tb25VdGlscy5nZXRBcHBDb21wb25lbnQob1ZpZXcpO1xuXHRjb25zdCBpc1N0aWNreSA9IE1vZGVsSGVscGVyLmlzU3RpY2t5U2Vzc2lvblN1cHBvcnRlZCgob1ZpZXcuZ2V0TW9kZWwoKSBhcyBPRGF0YU1vZGVsKS5nZXRNZXRhTW9kZWwoKSk7XG5cdGNvbnN0IGZuR2V0TGlua3MgPSBmdW5jdGlvbiAob0RhdGE/OiBSZWNvcmQ8c3RyaW5nLCB1bmtub3duPiB8IHVuZGVmaW5lZCkge1xuXHRcdGlmIChvRGF0YSkge1xuXHRcdFx0Y29uc3QgYUtleXMgPSBPYmplY3Qua2V5cyhvRGF0YSk7XG5cdFx0XHRhS2V5cy5mb3JFYWNoKGZ1bmN0aW9uIChzS2V5OiBzdHJpbmcpIHtcblx0XHRcdFx0aWYgKHNLZXkuaW5kZXhPZihcIl9cIikgIT09IDAgJiYgc0tleS5pbmRleE9mKFwib2RhdGEuY29udGV4dFwiKSA9PT0gLTEpIHtcblx0XHRcdFx0XHRvUGFyYW1zW3NLZXldID0geyB2YWx1ZTogb0RhdGFbc0tleV0gfTtcblx0XHRcdFx0fVxuXHRcdFx0fSk7XG5cdFx0fVxuXHRcdGlmIChhSUJOQWN0aW9ucy5sZW5ndGgpIHtcblx0XHRcdGFJQk5BY3Rpb25zLmZvckVhY2goZnVuY3Rpb24gKG9JQk5BY3Rpb24pIHtcblx0XHRcdFx0Y29uc3Qgc1NlbWFudGljT2JqZWN0ID0gb0lCTkFjdGlvbi5kYXRhKFwiSUJORGF0YVwiKS5zZW1hbnRpY09iamVjdDtcblx0XHRcdFx0Y29uc3Qgc0FjdGlvbiA9IG9JQk5BY3Rpb24uZGF0YShcIklCTkRhdGFcIikuYWN0aW9uO1xuXHRcdFx0XHRvQXBwQ29tcG9uZW50XG5cdFx0XHRcdFx0LmdldFNoZWxsU2VydmljZXMoKVxuXHRcdFx0XHRcdC5nZXRMaW5rcyh7XG5cdFx0XHRcdFx0XHRzZW1hbnRpY09iamVjdDogc1NlbWFudGljT2JqZWN0LFxuXHRcdFx0XHRcdFx0YWN0aW9uOiBzQWN0aW9uLFxuXHRcdFx0XHRcdFx0cGFyYW1zOiBvUGFyYW1zXG5cdFx0XHRcdFx0fSlcblx0XHRcdFx0XHQudGhlbihmdW5jdGlvbiAoYUxpbmspIHtcblx0XHRcdFx0XHRcdG9JQk5BY3Rpb24uc2V0VmlzaWJsZShvSUJOQWN0aW9uLmdldFZpc2libGUoKSAmJiBhTGluayAmJiBhTGluay5sZW5ndGggPT09IDEpO1xuXHRcdFx0XHRcdFx0aWYgKGlzU3RpY2t5KSB7XG5cdFx0XHRcdFx0XHRcdChvSUJOQWN0aW9uLmdldEJpbmRpbmdDb250ZXh0KFwiaW50ZXJuYWxcIikgYXMgSW50ZXJuYWxNb2RlbENvbnRleHQpLnNldFByb3BlcnR5KFxuXHRcdFx0XHRcdFx0XHRcdG9JQk5BY3Rpb24uZ2V0SWQoKS5zcGxpdChcIi0tXCIpWzFdLFxuXHRcdFx0XHRcdFx0XHRcdHtcblx0XHRcdFx0XHRcdFx0XHRcdHNoZWxsTmF2aWdhdGlvbk5vdEF2YWlsYWJsZTogIShhTGluayAmJiBhTGluay5sZW5ndGggPT09IDEpXG5cdFx0XHRcdFx0XHRcdFx0fVxuXHRcdFx0XHRcdFx0XHQpO1xuXHRcdFx0XHRcdFx0fVxuXHRcdFx0XHRcdFx0cmV0dXJuO1xuXHRcdFx0XHRcdH0pXG5cdFx0XHRcdFx0LmNhdGNoKGZ1bmN0aW9uIChvRXJyb3I6IHVua25vd24pIHtcblx0XHRcdFx0XHRcdExvZy5lcnJvcihcIkNhbm5vdCByZXRyaWV2ZSB0aGUgbGlua3MgZnJvbSB0aGUgc2hlbGwgc2VydmljZVwiLCBvRXJyb3IgYXMgc3RyaW5nKTtcblx0XHRcdFx0XHR9KTtcblx0XHRcdH0pO1xuXHRcdH1cblx0fTtcblx0aWYgKG9WaWV3ICYmIG9WaWV3LmdldEJpbmRpbmdDb250ZXh0KCkpIHtcblx0XHQob1ZpZXcuZ2V0QmluZGluZ0NvbnRleHQoKSBhcyBPRGF0YVY0Q29udGV4dClcblx0XHRcdD8ucmVxdWVzdE9iamVjdCgpXG5cdFx0XHQudGhlbihmdW5jdGlvbiAob0RhdGE6IFJlY29yZDxzdHJpbmcsIHVua25vd24+IHwgdW5kZWZpbmVkKSB7XG5cdFx0XHRcdHJldHVybiBmbkdldExpbmtzKG9EYXRhKTtcblx0XHRcdH0pXG5cdFx0XHQuY2F0Y2goZnVuY3Rpb24gKG9FcnJvcjogdW5rbm93bikge1xuXHRcdFx0XHRMb2cuZXJyb3IoXCJDYW5ub3QgcmV0cmlldmUgdGhlIGxpbmtzIGZyb20gdGhlIHNoZWxsIHNlcnZpY2VcIiwgb0Vycm9yIGFzIHN0cmluZyk7XG5cdFx0XHR9KTtcblx0fSBlbHNlIHtcblx0XHRmbkdldExpbmtzKCk7XG5cdH1cbn1cblxuZnVuY3Rpb24gZ2V0QWN0aW9uUGF0aChhY3Rpb25Db250ZXh0OiBDb250ZXh0LCBiUmV0dXJuT25seVBhdGg6IGJvb2xlYW4sIGluQWN0aW9uTmFtZT86IHN0cmluZywgYkNoZWNrU3RhdGljVmFsdWU/OiBib29sZWFuKSB7XG5cdGNvbnN0IHNBY3Rpb25OYW1lOiBzdHJpbmcgPSAhaW5BY3Rpb25OYW1lID8gYWN0aW9uQ29udGV4dC5nZXRPYmplY3QoYWN0aW9uQ29udGV4dC5nZXRQYXRoKCkpLnRvU3RyaW5nKCkgOiBpbkFjdGlvbk5hbWU7XG5cdGxldCBzQ29udGV4dFBhdGggPSBhY3Rpb25Db250ZXh0LmdldFBhdGgoKS5zcGxpdChcIi9AXCIpWzBdO1xuXHRjb25zdCBzRW50aXR5VHlwZU5hbWUgPSAoYWN0aW9uQ29udGV4dC5nZXRPYmplY3Qoc0NvbnRleHRQYXRoKSBhcyBNZXRhTW9kZWxFbnRpdHlUeXBlKS4kVHlwZTtcblx0Y29uc3Qgc0VudGl0eU5hbWUgPSBnZXRFbnRpdHlTZXROYW1lKGFjdGlvbkNvbnRleHQuZ2V0TW9kZWwoKSBhcyBPRGF0YU1ldGFNb2RlbCwgc0VudGl0eVR5cGVOYW1lKTtcblx0aWYgKHNFbnRpdHlOYW1lKSB7XG5cdFx0c0NvbnRleHRQYXRoID0gYC8ke3NFbnRpdHlOYW1lfWA7XG5cdH1cblx0aWYgKGJDaGVja1N0YXRpY1ZhbHVlKSB7XG5cdFx0cmV0dXJuIGFjdGlvbkNvbnRleHQuZ2V0T2JqZWN0KGAke3NDb250ZXh0UGF0aH0vJHtzQWN0aW9uTmFtZX1AT3JnLk9EYXRhLkNvcmUuVjEuT3BlcmF0aW9uQXZhaWxhYmxlYCk7XG5cdH1cblx0aWYgKGJSZXR1cm5Pbmx5UGF0aCkge1xuXHRcdHJldHVybiBgJHtzQ29udGV4dFBhdGh9LyR7c0FjdGlvbk5hbWV9YDtcblx0fSBlbHNlIHtcblx0XHRyZXR1cm4ge1xuXHRcdFx0c0NvbnRleHRQYXRoOiBzQ29udGV4dFBhdGgsXG5cdFx0XHRzUHJvcGVydHk6IGFjdGlvbkNvbnRleHQuZ2V0T2JqZWN0KGAke3NDb250ZXh0UGF0aH0vJHtzQWN0aW9uTmFtZX1AT3JnLk9EYXRhLkNvcmUuVjEuT3BlcmF0aW9uQXZhaWxhYmxlLyRQYXRoYCksXG5cdFx0XHRzQmluZGluZ1BhcmFtZXRlcjogYWN0aW9uQ29udGV4dC5nZXRPYmplY3QoYCR7c0NvbnRleHRQYXRofS8ke3NBY3Rpb25OYW1lfS9AJHVpNS5vdmVybG9hZC8wLyRQYXJhbWV0ZXIvMC8kTmFtZWApXG5cdFx0fTtcblx0fVxufVxuXG5mdW5jdGlvbiBnZXRFbnRpdHlTZXROYW1lKG9NZXRhTW9kZWw6IE9EYXRhTWV0YU1vZGVsLCBzRW50aXR5VHlwZTogc3RyaW5nKSB7XG5cdGNvbnN0IG9FbnRpdHlDb250YWluZXIgPSBvTWV0YU1vZGVsLmdldE9iamVjdChcIi9cIik7XG5cdGZvciAoY29uc3Qga2V5IGluIG9FbnRpdHlDb250YWluZXIpIHtcblx0XHRpZiAodHlwZW9mIG9FbnRpdHlDb250YWluZXJba2V5XSA9PT0gXCJvYmplY3RcIiAmJiBvRW50aXR5Q29udGFpbmVyW2tleV0uJFR5cGUgPT09IHNFbnRpdHlUeXBlKSB7XG5cdFx0XHRyZXR1cm4ga2V5O1xuXHRcdH1cblx0fVxufVxuXG5mdW5jdGlvbiBjb21wdXRlRGlzcGxheU1vZGUob1Byb3BlcnR5QW5ub3RhdGlvbnM6IFJlY29yZDxzdHJpbmcsIHVua25vd24+LCBvQ29sbGVjdGlvbkFubm90YXRpb25zPzogUmVjb3JkPHN0cmluZywgdW5rbm93bj4pIHtcblx0Y29uc3Qgb1RleHRBbm5vdGF0aW9uID0gb1Byb3BlcnR5QW5ub3RhdGlvbnNbXCJAY29tLnNhcC52b2NhYnVsYXJpZXMuQ29tbW9uLnYxLlRleHRcIl0sXG5cdFx0b1RleHRBcnJhbmdlbWVudEFubm90YXRpb24gPSAob1RleHRBbm5vdGF0aW9uICYmXG5cdFx0XHQoKG9Qcm9wZXJ0eUFubm90YXRpb25zICYmXG5cdFx0XHRcdG9Qcm9wZXJ0eUFubm90YXRpb25zW1wiQGNvbS5zYXAudm9jYWJ1bGFyaWVzLkNvbW1vbi52MS5UZXh0QGNvbS5zYXAudm9jYWJ1bGFyaWVzLlVJLnYxLlRleHRBcnJhbmdlbWVudFwiXSkgfHxcblx0XHRcdFx0KG9Db2xsZWN0aW9uQW5ub3RhdGlvbnMgJiZcblx0XHRcdFx0XHRvQ29sbGVjdGlvbkFubm90YXRpb25zW1wiQGNvbS5zYXAudm9jYWJ1bGFyaWVzLlVJLnYxLlRleHRBcnJhbmdlbWVudFwiXSkpKSBhcyBNZXRhTW9kZWxFbnVtPFRleHRBcnJhbmdlbWVudD47XG5cblx0aWYgKG9UZXh0QXJyYW5nZW1lbnRBbm5vdGF0aW9uKSB7XG5cdFx0aWYgKG9UZXh0QXJyYW5nZW1lbnRBbm5vdGF0aW9uLiRFbnVtTWVtYmVyID09PSBcImNvbS5zYXAudm9jYWJ1bGFyaWVzLlVJLnYxLlRleHRBcnJhbmdlbWVudFR5cGUvVGV4dE9ubHlcIikge1xuXHRcdFx0cmV0dXJuIFwiRGVzY3JpcHRpb25cIjtcblx0XHR9IGVsc2UgaWYgKG9UZXh0QXJyYW5nZW1lbnRBbm5vdGF0aW9uLiRFbnVtTWVtYmVyID09PSBcImNvbS5zYXAudm9jYWJ1bGFyaWVzLlVJLnYxLlRleHRBcnJhbmdlbWVudFR5cGUvVGV4dExhc3RcIikge1xuXHRcdFx0cmV0dXJuIFwiVmFsdWVEZXNjcmlwdGlvblwiO1xuXHRcdH0gZWxzZSBpZiAob1RleHRBcnJhbmdlbWVudEFubm90YXRpb24uJEVudW1NZW1iZXIgPT09IFwiY29tLnNhcC52b2NhYnVsYXJpZXMuVUkudjEuVGV4dEFycmFuZ2VtZW50VHlwZS9UZXh0U2VwYXJhdGVcIikge1xuXHRcdFx0cmV0dXJuIFwiVmFsdWVcIjtcblx0XHR9XG5cdFx0Ly9EZWZhdWx0IHNob3VsZCBiZSBUZXh0Rmlyc3QgaWYgdGhlcmUgaXMgYSBUZXh0IGFubm90YXRpb24gYW5kIG5laXRoZXIgVGV4dE9ubHkgbm9yIFRleHRMYXN0IGFyZSBzZXRcblx0XHRyZXR1cm4gXCJEZXNjcmlwdGlvblZhbHVlXCI7XG5cdH1cblx0cmV0dXJuIG9UZXh0QW5ub3RhdGlvbiA/IFwiRGVzY3JpcHRpb25WYWx1ZVwiIDogXCJWYWx1ZVwiO1xufVxuXG5mdW5jdGlvbiBfZ2V0RW50aXR5VHlwZShvQ29udGV4dDogT0RhdGFWNENvbnRleHQpIHtcblx0Y29uc3Qgb01ldGFNb2RlbCA9IG9Db250ZXh0LmdldE1vZGVsKCkuZ2V0TWV0YU1vZGVsKCk7XG5cdHJldHVybiBvTWV0YU1vZGVsLmdldE9iamVjdChgJHtvTWV0YU1vZGVsLmdldE1ldGFQYXRoKG9Db250ZXh0LmdldFBhdGgoKSl9LyRUeXBlYCk7XG59XG5cbmFzeW5jIGZ1bmN0aW9uIF9yZXF1ZXN0T2JqZWN0KHNBY3Rpb246IHN0cmluZywgb1NlbGVjdGVkQ29udGV4dDogT0RhdGFWNENvbnRleHQsIHNQcm9wZXJ0eTogc3RyaW5nKSB7XG5cdGxldCBvQ29udGV4dCA9IG9TZWxlY3RlZENvbnRleHQ7XG5cdGNvbnN0IG5CcmFja2V0SW5kZXggPSBzQWN0aW9uLmluZGV4T2YoXCIoXCIpO1xuXG5cdGlmIChuQnJhY2tldEluZGV4ID4gLTEpIHtcblx0XHRjb25zdCBzVGFyZ2V0VHlwZSA9IHNBY3Rpb24uc2xpY2UobkJyYWNrZXRJbmRleCArIDEsIC0xKTtcblx0XHRsZXQgc0N1cnJlbnRUeXBlID0gX2dldEVudGl0eVR5cGUob0NvbnRleHQpO1xuXG5cdFx0d2hpbGUgKHNDdXJyZW50VHlwZSAhPT0gc1RhcmdldFR5cGUpIHtcblx0XHRcdC8vIEZpbmQgcGFyZW50IGJpbmRpbmcgY29udGV4dCBhbmQgcmV0cmlldmUgZW50aXR5IHR5cGVcblx0XHRcdG9Db250ZXh0ID0gb0NvbnRleHQuZ2V0QmluZGluZygpLmdldENvbnRleHQoKSBhcyBPRGF0YVY0Q29udGV4dDtcblx0XHRcdGlmIChvQ29udGV4dCkge1xuXHRcdFx0XHRzQ3VycmVudFR5cGUgPSBfZ2V0RW50aXR5VHlwZShvQ29udGV4dCk7XG5cdFx0XHR9IGVsc2Uge1xuXHRcdFx0XHRMb2cud2FybmluZyhcIkNhbm5vdCBkZXRlcm1pbmUgdGFyZ2V0IHR5cGUgdG8gcmVxdWVzdCBwcm9wZXJ0eSB2YWx1ZSBmb3IgYm91bmQgYWN0aW9uIGludm9jYXRpb25cIik7XG5cdFx0XHRcdHJldHVybiBQcm9taXNlLnJlc29sdmUodW5kZWZpbmVkKTtcblx0XHRcdH1cblx0XHR9XG5cdH1cblxuXHRyZXR1cm4gb0NvbnRleHQucmVxdWVzdE9iamVjdChzUHJvcGVydHkpO1xufVxuXG5leHBvcnQgdHlwZSBfUmVxdWVzdGVkUHJvcGVydHkgPSB7XG5cdHZQcm9wZXJ0eVZhbHVlOiB1bmtub3duO1xuXHRvU2VsZWN0ZWRDb250ZXh0OiBDb250ZXh0O1xuXHRzQWN0aW9uOiBzdHJpbmc7XG5cdHNEeW5hbWljQWN0aW9uRW5hYmxlZFBhdGg6IHN0cmluZztcbn07XG5hc3luYyBmdW5jdGlvbiByZXF1ZXN0UHJvcGVydHkoXG5cdG9TZWxlY3RlZENvbnRleHQ6IE9EYXRhVjRDb250ZXh0LFxuXHRzQWN0aW9uOiBzdHJpbmcsXG5cdHNQcm9wZXJ0eTogc3RyaW5nLFxuXHRzRHluYW1pY0FjdGlvbkVuYWJsZWRQYXRoOiBzdHJpbmdcbik6IFByb21pc2U8X1JlcXVlc3RlZFByb3BlcnR5PiB7XG5cdGNvbnN0IG9Qcm9taXNlID1cblx0XHRzUHJvcGVydHkgJiYgc1Byb3BlcnR5LmluZGV4T2YoXCIvXCIpID09PSAwXG5cdFx0XHQ/IHJlcXVlc3RTaW5nbGV0b25Qcm9wZXJ0eShzUHJvcGVydHksIG9TZWxlY3RlZENvbnRleHQuZ2V0TW9kZWwoKSlcblx0XHRcdDogX3JlcXVlc3RPYmplY3Qoc0FjdGlvbiwgb1NlbGVjdGVkQ29udGV4dCwgc1Byb3BlcnR5KTtcblxuXHRyZXR1cm4gb1Byb21pc2UudGhlbihmdW5jdGlvbiAodlByb3BlcnR5VmFsdWU6IHVua25vd24pIHtcblx0XHRyZXR1cm4ge1xuXHRcdFx0dlByb3BlcnR5VmFsdWU6IHZQcm9wZXJ0eVZhbHVlLFxuXHRcdFx0b1NlbGVjdGVkQ29udGV4dDogb1NlbGVjdGVkQ29udGV4dCxcblx0XHRcdHNBY3Rpb246IHNBY3Rpb24sXG5cdFx0XHRzRHluYW1pY0FjdGlvbkVuYWJsZWRQYXRoOiBzRHluYW1pY0FjdGlvbkVuYWJsZWRQYXRoXG5cdFx0fTtcblx0fSk7XG59XG5cbmFzeW5jIGZ1bmN0aW9uIHNldENvbnRleHRzQmFzZWRPbk9wZXJhdGlvbkF2YWlsYWJsZShcblx0b0ludGVybmFsTW9kZWxDb250ZXh0OiBJbnRlcm5hbE1vZGVsQ29udGV4dCxcblx0YVJlcXVlc3RQcm9taXNlczogUHJvbWlzZTxfUmVxdWVzdGVkUHJvcGVydHk+W11cbikge1xuXHRyZXR1cm4gUHJvbWlzZS5hbGwoYVJlcXVlc3RQcm9taXNlcylcblx0XHQudGhlbihmdW5jdGlvbiAoYVJlc3VsdHMpIHtcblx0XHRcdGlmIChhUmVzdWx0cy5sZW5ndGgpIHtcblx0XHRcdFx0Y29uc3QgYUFwcGxpY2FibGVDb250ZXh0czogdW5rbm93bltdID0gW10sXG5cdFx0XHRcdFx0YU5vdEFwcGxpY2FibGVDb250ZXh0czogdW5rbm93bltdID0gW107XG5cdFx0XHRcdGFSZXN1bHRzLmZvckVhY2goZnVuY3Rpb24gKGFSZXN1bHQpIHtcblx0XHRcdFx0XHRpZiAoYVJlc3VsdCkge1xuXHRcdFx0XHRcdFx0aWYgKGFSZXN1bHQudlByb3BlcnR5VmFsdWUpIHtcblx0XHRcdFx0XHRcdFx0b0ludGVybmFsTW9kZWxDb250ZXh0LmdldE1vZGVsKCkuc2V0UHJvcGVydHkoYVJlc3VsdC5zRHluYW1pY0FjdGlvbkVuYWJsZWRQYXRoLCB0cnVlKTtcblx0XHRcdFx0XHRcdFx0YUFwcGxpY2FibGVDb250ZXh0cy5wdXNoKGFSZXN1bHQub1NlbGVjdGVkQ29udGV4dCk7XG5cdFx0XHRcdFx0XHR9IGVsc2Uge1xuXHRcdFx0XHRcdFx0XHRhTm90QXBwbGljYWJsZUNvbnRleHRzLnB1c2goYVJlc3VsdC5vU2VsZWN0ZWRDb250ZXh0KTtcblx0XHRcdFx0XHRcdH1cblx0XHRcdFx0XHR9XG5cdFx0XHRcdH0pO1xuXHRcdFx0XHRzZXREeW5hbWljQWN0aW9uQ29udGV4dHMob0ludGVybmFsTW9kZWxDb250ZXh0LCBhUmVzdWx0c1swXS5zQWN0aW9uLCBhQXBwbGljYWJsZUNvbnRleHRzLCBhTm90QXBwbGljYWJsZUNvbnRleHRzKTtcblx0XHRcdH1cblx0XHRcdHJldHVybjtcblx0XHR9KVxuXHRcdC5jYXRjaChmdW5jdGlvbiAob0Vycm9yOiB1bmtub3duKSB7XG5cdFx0XHRMb2cudHJhY2UoXCJDYW5ub3QgcmV0cmlldmUgcHJvcGVydHkgdmFsdWUgZnJvbSBwYXRoXCIsIG9FcnJvciBhcyBzdHJpbmcpO1xuXHRcdH0pO1xufVxuXG4vKipcbiAqIEBwYXJhbSBvSW50ZXJuYWxNb2RlbENvbnRleHRcbiAqIEBwYXJhbSBzQWN0aW9uXG4gKiBAcGFyYW0gYUFwcGxpY2FibGVcbiAqIEBwYXJhbSBhTm90QXBwbGljYWJsZVxuICovXG5mdW5jdGlvbiBzZXREeW5hbWljQWN0aW9uQ29udGV4dHMoXG5cdG9JbnRlcm5hbE1vZGVsQ29udGV4dDogSW50ZXJuYWxNb2RlbENvbnRleHQsXG5cdHNBY3Rpb246IHN0cmluZyxcblx0YUFwcGxpY2FibGU6IHVua25vd25bXSxcblx0YU5vdEFwcGxpY2FibGU6IHVua25vd25bXVxuKSB7XG5cdGNvbnN0IHNEeW5hbWljQWN0aW9uUGF0aFByZWZpeCA9IGAke29JbnRlcm5hbE1vZGVsQ29udGV4dC5nZXRQYXRoKCl9L2R5bmFtaWNBY3Rpb25zLyR7c0FjdGlvbn1gLFxuXHRcdG9JbnRlcm5hbE1vZGVsID0gb0ludGVybmFsTW9kZWxDb250ZXh0LmdldE1vZGVsKCk7XG5cdG9JbnRlcm5hbE1vZGVsLnNldFByb3BlcnR5KGAke3NEeW5hbWljQWN0aW9uUGF0aFByZWZpeH0vYUFwcGxpY2FibGVgLCBhQXBwbGljYWJsZSk7XG5cdG9JbnRlcm5hbE1vZGVsLnNldFByb3BlcnR5KGAke3NEeW5hbWljQWN0aW9uUGF0aFByZWZpeH0vYU5vdEFwcGxpY2FibGVgLCBhTm90QXBwbGljYWJsZSk7XG59XG5cbmZ1bmN0aW9uIF9nZXREZWZhdWx0T3BlcmF0b3JzKHNQcm9wZXJ0eVR5cGU/OiBzdHJpbmcpIHtcblx0Ly8gbWRjIGRlZmluZXMgdGhlIGZ1bGwgc2V0IG9mIG9wZXJhdGlvbnMgdGhhdCBhcmUgbWVhbmluZ2Z1bCBmb3IgZWFjaCBFZG0gVHlwZVxuXHQvLyBUT0RPIFJlcGxhY2Ugd2l0aCBtb2RlbCAvIGludGVybmFsIHdheSBvZiByZXRyaWV2aW5nIHRoZSBhY3R1YWwgbW9kZWwgdHlwZSB1c2VkIGZvciB0aGUgcHJvcGVydHlcblx0Y29uc3Qgb0RhdGFDbGFzcyA9IFR5cGVVdGlsLmdldERhdGFUeXBlQ2xhc3NOYW1lKHNQcm9wZXJ0eVR5cGUpO1xuXHQvLyBUT0RPIG5lZWQgdG8gcGFzcyBwcm9wZXIgZm9ybWF0T3B0aW9ucywgY29uc3RyYWludHMgaGVyZVxuXHRjb25zdCBvQmFzZVR5cGUgPSBUeXBlVXRpbC5nZXRCYXNlVHlwZShvRGF0YUNsYXNzLCB7fSwge30pO1xuXHRyZXR1cm4gRmlsdGVyT3BlcmF0b3JVdGlsLmdldE9wZXJhdG9yc0ZvclR5cGUob0Jhc2VUeXBlKTtcbn1cblxuZnVuY3Rpb24gX2dldFJlc3RyaWN0aW9ucyhhRGVmYXVsdE9wczogc3RyaW5nW10sIGFFeHByZXNzaW9uT3BzOiBzdHJpbmdbXSk6IHN0cmluZ1tdIHtcblx0Ly8gRnJvbSB0aGUgZGVmYXVsdCBzZXQgb2YgT3BlcmF0b3JzIGZvciB0aGUgQmFzZSBUeXBlLCBzZWxlY3QgdGhvc2UgdGhhdCBhcmUgZGVmaW5lZCBpbiB0aGUgQWxsb3dlZCBWYWx1ZS5cblx0Ly8gSW4gY2FzZSB0aGF0IG5vIG9wZXJhdG9ycyBhcmUgZm91bmQsIHJldHVybiB1bmRlZmluZWQgc28gdGhhdCB0aGUgZGVmYXVsdCBzZXQgaXMgdXNlZC5cblx0cmV0dXJuIGFEZWZhdWx0T3BzLmZpbHRlcihmdW5jdGlvbiAoc0VsZW1lbnQpIHtcblx0XHRyZXR1cm4gYUV4cHJlc3Npb25PcHMuaW5kZXhPZihzRWxlbWVudCkgPiAtMTtcblx0fSk7XG59XG5cbmZ1bmN0aW9uIGdldFNwZWNpZmljQWxsb3dlZEV4cHJlc3Npb24oYUV4cHJlc3Npb25zOiBzdHJpbmdbXSkge1xuXHRjb25zdCBhQWxsb3dlZEV4cHJlc3Npb25zUHJpb3JpdHkgPSBDb21tb25VdGlscy5BbGxvd2VkRXhwcmVzc2lvbnNQcmlvO1xuXG5cdGFFeHByZXNzaW9ucy5zb3J0KGZ1bmN0aW9uIChhOiBzdHJpbmcsIGI6IHN0cmluZykge1xuXHRcdHJldHVybiBhQWxsb3dlZEV4cHJlc3Npb25zUHJpb3JpdHkuaW5kZXhPZihhKSAtIGFBbGxvd2VkRXhwcmVzc2lvbnNQcmlvcml0eS5pbmRleE9mKGIpO1xuXHR9KTtcblxuXHRyZXR1cm4gYUV4cHJlc3Npb25zWzBdO1xufVxuXG4vKipcbiAqIE1ldGhvZCB0byBmZXRjaCB0aGUgY29ycmVjdCBvcGVyYXRvcnMgYmFzZWQgb24gdGhlIGZpbHRlciByZXN0cmljdGlvbnMgdGhhdCBjYW4gYmUgYW5ub3RhdGVkIG9uIGFuIGVudGl0eSBzZXQgb3IgYSBuYXZpZ2F0aW9uIHByb3BlcnR5LlxuICogV2UgcmV0dXJuIHRoZSBjb3JyZWN0IG9wZXJhdG9ycyBiYXNlZCBvbiB0aGUgc3BlY2lmaWVkIHJlc3RyaWN0aW9uIGFuZCBhbHNvIGNoZWNrIGZvciB0aGUgb3BlcmF0b3JzIGRlZmluZWQgaW4gdGhlIG1hbmlmZXN0IHRvIGluY2x1ZGUgb3IgZXhjbHVkZSB0aGVtLlxuICpcbiAqIEBwYXJhbSBzUHJvcGVydHkgU3RyaW5nIG5hbWUgb2YgdGhlIHByb3BlcnR5XG4gKiBAcGFyYW0gc0VudGl0eVNldFBhdGggU3RyaW5nIHBhdGggdG8gdGhlIGVudGl0eSBzZXRcbiAqIEBwYXJhbSBvQ29udGV4dCBDb250ZXh0IHVzZWQgZHVyaW5nIHRlbXBsYXRpbmdcbiAqIEBwYXJhbSBzVHlwZSBTdHJpbmcgZGF0YSB0eXBlIG9kIHRoZSBwcm9wZXJ0eSwgZm9yIGV4YW1wbGUgZWRtLkRhdGVcbiAqIEBwYXJhbSBiVXNlU2VtYW50aWNEYXRlUmFuZ2UgQm9vbGVhbiBwYXNzZWQgZnJvbSB0aGUgbWFuaWZlc3QgZm9yIHNlbWFudGljIGRhdGUgcmFuZ2VcbiAqIEBwYXJhbSBzU2V0dGluZ3MgU3RyaW5naWZpZWQgb2JqZWN0IG9mIHRoZSBwcm9wZXJ0eSBzZXR0aW5nc1xuICogQHJldHVybnMgQW4gYXJyYXkgb2Ygc3RyaW5ncyByZXByZXNlbnRpbmcgb3BlcmF0b3JzIGZvciBmaWx0ZXJpbmdcbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGdldE9wZXJhdG9yc0ZvclByb3BlcnR5KFxuXHRzUHJvcGVydHk6IHN0cmluZyxcblx0c0VudGl0eVNldFBhdGg6IHN0cmluZyxcblx0b0NvbnRleHQ6IE9EYXRhTWV0YU1vZGVsLFxuXHRzVHlwZT86IHN0cmluZyxcblx0YlVzZVNlbWFudGljRGF0ZVJhbmdlPzogYm9vbGVhbiB8IHN0cmluZyxcblx0c1NldHRpbmdzPzogc3RyaW5nXG4pOiBzdHJpbmdbXSB7XG5cdGNvbnN0IG9GaWx0ZXJSZXN0cmljdGlvbnMgPSBDb21tb25VdGlscy5nZXRGaWx0ZXJSZXN0cmljdGlvbnNCeVBhdGgoc0VudGl0eVNldFBhdGgsIG9Db250ZXh0KTtcblx0Y29uc3QgYUVxdWFsc09wcyA9IFtcIkVRXCJdO1xuXHRjb25zdCBhU2luZ2xlUmFuZ2VPcHMgPSBbXCJFUVwiLCBcIkdFXCIsIFwiTEVcIiwgXCJMVFwiLCBcIkdUXCIsIFwiQlRcIiwgXCJOT1RMRVwiLCBcIk5PVExUXCIsIFwiTk9UR0VcIiwgXCJOT1RHVFwiXTtcblx0Y29uc3QgYVNpbmdsZVJhbmdlRFRCYXNpY09wcyA9IFtcIkVRXCIsIFwiQlRcIl07XG5cdGNvbnN0IGFTaW5nbGVWYWx1ZURhdGVPcHMgPSBbXG5cdFx0XCJUT0RBWVwiLFxuXHRcdFwiVE9NT1JST1dcIixcblx0XHRcIllFU1RFUkRBWVwiLFxuXHRcdFwiREFURVwiLFxuXHRcdFwiRklSU1REQVlXRUVLXCIsXG5cdFx0XCJMQVNUREFZV0VFS1wiLFxuXHRcdFwiRklSU1REQVlNT05USFwiLFxuXHRcdFwiTEFTVERBWU1PTlRIXCIsXG5cdFx0XCJGSVJTVERBWVFVQVJURVJcIixcblx0XHRcIkxBU1REQVlRVUFSVEVSXCIsXG5cdFx0XCJGSVJTVERBWVlFQVJcIixcblx0XHRcIkxBU1REQVlZRUFSXCJcblx0XTtcblx0Y29uc3QgYU11bHRpUmFuZ2VPcHMgPSBbXCJFUVwiLCBcIkdFXCIsIFwiTEVcIiwgXCJMVFwiLCBcIkdUXCIsIFwiQlRcIiwgXCJORVwiLCBcIk5PVEJUXCIsIFwiTk9UTEVcIiwgXCJOT1RMVFwiLCBcIk5PVEdFXCIsIFwiTk9UR1RcIl07XG5cdGNvbnN0IGFTZWFyY2hFeHByZXNzaW9uT3BzID0gW1wiQ29udGFpbnNcIiwgXCJOb3RDb250YWluc1wiLCBcIlN0YXJ0c1dpdGhcIiwgXCJOb3RTdGFydHNXaXRoXCIsIFwiRW5kc1dpdGhcIiwgXCJOb3RFbmRzV2l0aFwiXTtcblx0Y29uc3QgYVNlbWFudGljRGF0ZU9wc0V4dCA9IFNlbWFudGljRGF0ZU9wZXJhdG9ycy5nZXRTdXBwb3J0ZWRPcGVyYXRpb25zKCk7XG5cdGNvbnN0IGJTZW1hbnRpY0RhdGVSYW5nZSA9IGJVc2VTZW1hbnRpY0RhdGVSYW5nZSA9PT0gXCJ0cnVlXCIgfHwgYlVzZVNlbWFudGljRGF0ZVJhbmdlID09PSB0cnVlO1xuXHRsZXQgYVNlbWFudGljRGF0ZU9wczogc3RyaW5nW10gPSBbXTtcblx0Y29uc3Qgb1NldHRpbmdzID0gc1NldHRpbmdzICYmIHR5cGVvZiBzU2V0dGluZ3MgPT09IFwic3RyaW5nXCIgPyBKU09OLnBhcnNlKHNTZXR0aW5ncykuY3VzdG9tRGF0YSA6IHNTZXR0aW5ncztcblxuXHRpZiAoKG9Db250ZXh0LmdldE9iamVjdChgJHtzRW50aXR5U2V0UGF0aH0vQGNvbS5zYXAudm9jYWJ1bGFyaWVzLkNvbW1vbi52MS5SZXN1bHRDb250ZXh0YCkgYXMgdW5rbm93bikgPT09IHRydWUpIHtcblx0XHRyZXR1cm4gYUVxdWFsc09wcztcblx0fVxuXG5cdGlmIChvU2V0dGluZ3MgJiYgb1NldHRpbmdzLm9wZXJhdG9yQ29uZmlndXJhdGlvbiAmJiBvU2V0dGluZ3Mub3BlcmF0b3JDb25maWd1cmF0aW9uLmxlbmd0aCA+IDApIHtcblx0XHRhU2VtYW50aWNEYXRlT3BzID0gU2VtYW50aWNEYXRlT3BlcmF0b3JzLmdldEZpbHRlck9wZXJhdGlvbnMob1NldHRpbmdzLm9wZXJhdG9yQ29uZmlndXJhdGlvbiwgc1R5cGUpO1xuXHR9IGVsc2Uge1xuXHRcdGFTZW1hbnRpY0RhdGVPcHMgPSBTZW1hbnRpY0RhdGVPcGVyYXRvcnMuZ2V0U2VtYW50aWNEYXRlT3BlcmF0aW9ucyhzVHlwZSk7XG5cdH1cblx0Ly8gR2V0IHRoZSBkZWZhdWx0IE9wZXJhdG9ycyBmb3IgdGhpcyBQcm9wZXJ0eSBUeXBlXG5cdGxldCBhRGVmYXVsdE9wZXJhdG9ycyA9IF9nZXREZWZhdWx0T3BlcmF0b3JzKHNUeXBlKTtcblx0aWYgKGJTZW1hbnRpY0RhdGVSYW5nZSkge1xuXHRcdGFEZWZhdWx0T3BlcmF0b3JzID0gYVNlbWFudGljRGF0ZU9wc0V4dC5jb25jYXQoYURlZmF1bHRPcGVyYXRvcnMpO1xuXHR9XG5cdGxldCByZXN0cmljdGlvbnM6IHN0cmluZ1tdID0gW107XG5cblx0Ly8gSXMgdGhlcmUgYSBGaWx0ZXIgUmVzdHJpY3Rpb24gZGVmaW5lZCBmb3IgdGhpcyBwcm9wZXJ0eT9cblx0aWYgKG9GaWx0ZXJSZXN0cmljdGlvbnMgJiYgb0ZpbHRlclJlc3RyaWN0aW9ucy5GaWx0ZXJBbGxvd2VkRXhwcmVzc2lvbnMgJiYgb0ZpbHRlclJlc3RyaWN0aW9ucy5GaWx0ZXJBbGxvd2VkRXhwcmVzc2lvbnNbc1Byb3BlcnR5XSkge1xuXHRcdC8vIEV4dGVuZGluZyB0aGUgZGVmYXVsdCBvcGVyYXRvcnMgbGlzdCB3aXRoIFNlbWFudGljIERhdGUgb3B0aW9ucyBEQVRFUkFOR0UsIERBVEUsIEZST00gYW5kIFRPXG5cdFx0Y29uc3Qgc0FsbG93ZWRFeHByZXNzaW9uID0gQ29tbW9uVXRpbHMuZ2V0U3BlY2lmaWNBbGxvd2VkRXhwcmVzc2lvbihvRmlsdGVyUmVzdHJpY3Rpb25zLkZpbHRlckFsbG93ZWRFeHByZXNzaW9uc1tzUHJvcGVydHldKTtcblx0XHQvLyBJbiBjYXNlIG1vcmUgdGhhbiBvbmUgQWxsb3dlZCBFeHByZXNzaW9ucyBoYXMgYmVlbiBkZWZpbmVkIGZvciBhIHByb3BlcnR5XG5cdFx0Ly8gY2hvb3NlIHRoZSBtb3N0IHJlc3RyaWN0aXZlIEFsbG93ZWQgRXhwcmVzc2lvblxuXG5cdFx0Ly8gTXVsdGlWYWx1ZSBoYXMgc2FtZSBPcGVyYXRvciBhcyBTaW5nbGVWYWx1ZSwgYnV0IHRoZXJlIGNhbiBiZSBtb3JlIHRoYW4gb25lIChtYXhDb25kaXRpb25zKVxuXHRcdHN3aXRjaCAoc0FsbG93ZWRFeHByZXNzaW9uKSB7XG5cdFx0XHRjYXNlIFwiU2luZ2xlVmFsdWVcIjpcblx0XHRcdFx0Y29uc3QgYVNpbmdsZVZhbHVlT3BzID0gc1R5cGUgPT09IFwiRWRtLkRhdGVcIiAmJiBiU2VtYW50aWNEYXRlUmFuZ2UgPyBhU2luZ2xlVmFsdWVEYXRlT3BzIDogYUVxdWFsc09wcztcblx0XHRcdFx0cmVzdHJpY3Rpb25zID0gX2dldFJlc3RyaWN0aW9ucyhhRGVmYXVsdE9wZXJhdG9ycywgYVNpbmdsZVZhbHVlT3BzKTtcblx0XHRcdFx0YnJlYWs7XG5cdFx0XHRjYXNlIFwiTXVsdGlWYWx1ZVwiOlxuXHRcdFx0XHRyZXN0cmljdGlvbnMgPSBfZ2V0UmVzdHJpY3Rpb25zKGFEZWZhdWx0T3BlcmF0b3JzLCBhRXF1YWxzT3BzKTtcblx0XHRcdFx0YnJlYWs7XG5cdFx0XHRjYXNlIFwiU2luZ2xlUmFuZ2VcIjpcblx0XHRcdFx0bGV0IGFFeHByZXNzaW9uT3BzOiBzdHJpbmdbXTtcblx0XHRcdFx0aWYgKGJTZW1hbnRpY0RhdGVSYW5nZSkge1xuXHRcdFx0XHRcdGlmIChzVHlwZSA9PT0gXCJFZG0uRGF0ZVwiKSB7XG5cdFx0XHRcdFx0XHRhRXhwcmVzc2lvbk9wcyA9IGFTZW1hbnRpY0RhdGVPcHM7XG5cdFx0XHRcdFx0fSBlbHNlIGlmIChzVHlwZSA9PT0gXCJFZG0uRGF0ZVRpbWVPZmZzZXRcIikge1xuXHRcdFx0XHRcdFx0YUV4cHJlc3Npb25PcHMgPSBhU2VtYW50aWNEYXRlT3BzO1xuXHRcdFx0XHRcdH0gZWxzZSB7XG5cdFx0XHRcdFx0XHRhRXhwcmVzc2lvbk9wcyA9IGFTaW5nbGVSYW5nZU9wcztcblx0XHRcdFx0XHR9XG5cdFx0XHRcdH0gZWxzZSBpZiAoc1R5cGUgPT09IFwiRWRtLkRhdGVUaW1lT2Zmc2V0XCIpIHtcblx0XHRcdFx0XHRhRXhwcmVzc2lvbk9wcyA9IGFTaW5nbGVSYW5nZURUQmFzaWNPcHM7XG5cdFx0XHRcdH0gZWxzZSB7XG5cdFx0XHRcdFx0YUV4cHJlc3Npb25PcHMgPSBhU2luZ2xlUmFuZ2VPcHM7XG5cdFx0XHRcdH1cblx0XHRcdFx0Y29uc3Qgc09wZXJhdG9ycyA9IF9nZXRSZXN0cmljdGlvbnMoYURlZmF1bHRPcGVyYXRvcnMsIGFFeHByZXNzaW9uT3BzKTtcblx0XHRcdFx0cmVzdHJpY3Rpb25zID0gc09wZXJhdG9ycztcblx0XHRcdFx0YnJlYWs7XG5cdFx0XHRjYXNlIFwiTXVsdGlSYW5nZVwiOlxuXHRcdFx0XHRyZXN0cmljdGlvbnMgPSBfZ2V0UmVzdHJpY3Rpb25zKGFEZWZhdWx0T3BlcmF0b3JzLCBhTXVsdGlSYW5nZU9wcyk7XG5cdFx0XHRcdGJyZWFrO1xuXHRcdFx0Y2FzZSBcIlNlYXJjaEV4cHJlc3Npb25cIjpcblx0XHRcdFx0cmVzdHJpY3Rpb25zID0gX2dldFJlc3RyaWN0aW9ucyhhRGVmYXVsdE9wZXJhdG9ycywgYVNlYXJjaEV4cHJlc3Npb25PcHMpO1xuXHRcdFx0XHRicmVhaztcblx0XHRcdGNhc2UgXCJNdWx0aVJhbmdlT3JTZWFyY2hFeHByZXNzaW9uXCI6XG5cdFx0XHRcdHJlc3RyaWN0aW9ucyA9IF9nZXRSZXN0cmljdGlvbnMoYURlZmF1bHRPcGVyYXRvcnMsIGFTZWFyY2hFeHByZXNzaW9uT3BzLmNvbmNhdChhTXVsdGlSYW5nZU9wcykpO1xuXHRcdFx0XHRicmVhaztcblx0XHRcdGRlZmF1bHQ6XG5cdFx0XHRcdGJyZWFrO1xuXHRcdH1cblx0XHQvLyBJbiBjYXNlIEFsbG93ZWRFeHByZXNzaW9ucyBpcyBub3QgcmVjb2duaXNlZCwgdW5kZWZpbmVkIGluIHJldHVybiByZXN1bHRzIGluIHRoZSBkZWZhdWx0IHNldCBvZlxuXHRcdC8vIG9wZXJhdG9ycyBmb3IgdGhlIHR5cGUuXG5cdH1cblx0cmV0dXJuIHJlc3RyaWN0aW9ucztcbn1cblxuLyoqXG4gKiBNZXRob2QgdG8gcmV0dXJuIGFsbG93ZWQgb3BlcmF0b3JzIGZvciB0eXBlIEd1aWQuXG4gKlxuICogQGZ1bmN0aW9uXG4gKiBAbmFtZSBnZXRPcGVyYXRvcnNGb3JHdWlkUHJvcGVydHlcbiAqIEByZXR1cm5zIEFsbG93ZWQgb3BlcmF0b3JzIGZvciB0eXBlIEd1aWRcbiAqL1xuZnVuY3Rpb24gZ2V0T3BlcmF0b3JzRm9yR3VpZFByb3BlcnR5KCk6IHN0cmluZyB7XG5cdGNvbnN0IGFsbG93ZWRPcGVyYXRvcnNGb3JHdWlkID0gW1wiRVFcIiwgXCJORVwiXTtcblx0cmV0dXJuIGFsbG93ZWRPcGVyYXRvcnNGb3JHdWlkLnRvU3RyaW5nKCk7XG59XG5cbmZ1bmN0aW9uIGdldE9wZXJhdG9yc0ZvckRhdGVQcm9wZXJ0eShwcm9wZXJ0eVR5cGU6IHN0cmluZyk6IHN0cmluZ1tdIHtcblx0Ly8gSW4gY2FzZSBBbGxvd2VkRXhwcmVzc2lvbnMgaXMgbm90IHByb3ZpZGVkIGZvciB0eXBlIEVkbS5EYXRlIHRoZW4gYWxsIHRoZSBkZWZhdWx0XG5cdC8vIG9wZXJhdG9ycyBmb3IgdGhlIHR5cGUgc2hvdWxkIGJlIHJldHVybmVkIGV4Y2x1ZGluZyBzZW1hbnRpYyBvcGVyYXRvcnMgZnJvbSB0aGUgbGlzdC5cblx0Y29uc3QgYURlZmF1bHRPcGVyYXRvcnMgPSBfZ2V0RGVmYXVsdE9wZXJhdG9ycyhwcm9wZXJ0eVR5cGUpO1xuXHRjb25zdCBhTXVsdGlSYW5nZU9wcyA9IFtcIkVRXCIsIFwiR0VcIiwgXCJMRVwiLCBcIkxUXCIsIFwiR1RcIiwgXCJCVFwiLCBcIk5FXCIsIFwiTk9UQlRcIiwgXCJOT1RMRVwiLCBcIk5PVExUXCIsIFwiTk9UR0VcIiwgXCJOT1RHVFwiXTtcblx0cmV0dXJuIF9nZXRSZXN0cmljdGlvbnMoYURlZmF1bHRPcGVyYXRvcnMsIGFNdWx0aVJhbmdlT3BzKTtcbn1cblxudHlwZSBQYXJhbWV0ZXJJbmZvID0ge1xuXHRjb250ZXh0UGF0aD86IHN0cmluZztcblx0cGFyYW1ldGVyUHJvcGVydGllcz86IFJlY29yZDxzdHJpbmcsIE1ldGFNb2RlbFByb3BlcnR5Pjtcbn07XG5mdW5jdGlvbiBnZXRQYXJhbWV0ZXJJbmZvKG1ldGFNb2RlbENvbnRleHQ6IE9EYXRhTWV0YU1vZGVsLCBzQ29udGV4dFBhdGg6IHN0cmluZykge1xuXHRjb25zdCBzUGFyYW1ldGVyQ29udGV4dFBhdGggPSBzQ29udGV4dFBhdGguc3Vic3RyaW5nKDAsIHNDb250ZXh0UGF0aC5sYXN0SW5kZXhPZihcIi9cIikpO1xuXHRjb25zdCBiUmVzdWx0Q29udGV4dCA9IG1ldGFNb2RlbENvbnRleHQuZ2V0T2JqZWN0KGAke3NQYXJhbWV0ZXJDb250ZXh0UGF0aH0vQGNvbS5zYXAudm9jYWJ1bGFyaWVzLkNvbW1vbi52MS5SZXN1bHRDb250ZXh0YCk7XG5cdGNvbnN0IG9QYXJhbWV0ZXJJbmZvOiBQYXJhbWV0ZXJJbmZvID0ge307XG5cdGlmIChiUmVzdWx0Q29udGV4dCAmJiBzUGFyYW1ldGVyQ29udGV4dFBhdGggIT09IHNDb250ZXh0UGF0aCkge1xuXHRcdG9QYXJhbWV0ZXJJbmZvLmNvbnRleHRQYXRoID0gc1BhcmFtZXRlckNvbnRleHRQYXRoO1xuXHRcdG9QYXJhbWV0ZXJJbmZvLnBhcmFtZXRlclByb3BlcnRpZXMgPSBDb21tb25VdGlscy5nZXRDb250ZXh0UGF0aFByb3BlcnRpZXMobWV0YU1vZGVsQ29udGV4dCwgc1BhcmFtZXRlckNvbnRleHRQYXRoKTtcblx0fVxuXHRyZXR1cm4gb1BhcmFtZXRlckluZm87XG59XG5cbi8qKlxuICogTWV0aG9kIHRvIGFkZCB0aGUgc2VsZWN0IE9wdGlvbnMgdG8gZmlsdGVyIGNvbmRpdGlvbnMuXG4gKlxuICogQGZ1bmN0aW9uXG4gKiBAbmFtZSBhZGRTZWxlY3RPcHRpb25Ub0NvbmRpdGlvbnNcbiAqIEBwYXJhbSBvUHJvcGVydHlNZXRhZGF0YSBQcm9wZXJ0eSBtZXRhZGF0YSBpbmZvcm1hdGlvblxuICogQHBhcmFtIGFWYWxpZE9wZXJhdG9ycyBPcGVyYXRvcnMgZm9yIGFsbCB0aGUgZGF0YSB0eXBlc1xuICogQHBhcmFtIGFTZW1hbnRpY0RhdGVPcGVyYXRvcnMgT3BlcmF0b3JzIGZvciB0aGUgRGF0ZSB0eXBlXG4gKiBAcGFyYW0gYUN1bXVsYXRpdmVDb25kaXRpb25zIEZpbHRlciBjb25kaXRpb25zXG4gKiBAcGFyYW0gb1NlbGVjdE9wdGlvbiBTZWxlY3RvcHRpb24gb2Ygc2VsZWN0aW9uIHZhcmlhbnRcbiAqIEByZXR1cm5zIFRoZSBmaWx0ZXIgY29uZGl0aW9uc1xuICovXG5mdW5jdGlvbiBhZGRTZWxlY3RPcHRpb25Ub0NvbmRpdGlvbnMoXG5cdG9Qcm9wZXJ0eU1ldGFkYXRhOiB1bmtub3duLFxuXHRhVmFsaWRPcGVyYXRvcnM6IHN0cmluZ1tdLFxuXHRhU2VtYW50aWNEYXRlT3BlcmF0b3JzOiBzdHJpbmdbXSxcblx0YUN1bXVsYXRpdmVDb25kaXRpb25zOiBDb25kaXRpb25PYmplY3RbXSxcblx0b1NlbGVjdE9wdGlvbjogU2VsZWN0T3B0aW9uXG4pIHtcblx0Y29uc3Qgb0NvbmRpdGlvbiA9IGdldENvbmRpdGlvbnMob1NlbGVjdE9wdGlvbiwgb1Byb3BlcnR5TWV0YWRhdGEpO1xuXHRpZiAoXG5cdFx0b1NlbGVjdE9wdGlvbj8uU2VtYW50aWNEYXRlcyAmJlxuXHRcdGFTZW1hbnRpY0RhdGVPcGVyYXRvcnMgJiZcblx0XHRhU2VtYW50aWNEYXRlT3BlcmF0b3JzLmluZGV4T2Yob1NlbGVjdE9wdGlvbj8uU2VtYW50aWNEYXRlcz8ub3BlcmF0b3IpID4gLTFcblx0KSB7XG5cdFx0Y29uc3Qgc2VtYW50aWNEYXRlcyA9IENvbW1vblV0aWxzLmFkZFNlbWFudGljRGF0ZXNUb0NvbmRpdGlvbnMob1NlbGVjdE9wdGlvbj8uU2VtYW50aWNEYXRlcyk7XG5cdFx0aWYgKHNlbWFudGljRGF0ZXMgJiYgT2JqZWN0LmtleXMoc2VtYW50aWNEYXRlcykubGVuZ3RoID4gMCkge1xuXHRcdFx0YUN1bXVsYXRpdmVDb25kaXRpb25zLnB1c2goc2VtYW50aWNEYXRlcyk7XG5cdFx0fVxuXHR9IGVsc2UgaWYgKG9Db25kaXRpb24pIHtcblx0XHRpZiAoYVZhbGlkT3BlcmF0b3JzLmxlbmd0aCA9PT0gMCB8fCBhVmFsaWRPcGVyYXRvcnMuaW5kZXhPZihvQ29uZGl0aW9uLm9wZXJhdG9yKSA+IC0xKSB7XG5cdFx0XHRhQ3VtdWxhdGl2ZUNvbmRpdGlvbnMucHVzaChvQ29uZGl0aW9uKTtcblx0XHR9XG5cdH1cblx0cmV0dXJuIGFDdW11bGF0aXZlQ29uZGl0aW9ucztcbn1cblxuLyoqXG4gKiBNZXRob2QgdG8gYWRkIHRoZSBzZW1hbnRpYyBkYXRlcyB0byBmaWx0ZXIgY29uZGl0aW9uc1xuICpcbiAqIEBmdW5jdGlvblxuICogQG5hbWUgYWRkU2VtYW50aWNEYXRlc1RvQ29uZGl0aW9uc1xuICogQHBhcmFtIG9TZW1hbnRpY0RhdGVzIFNlbWFudGljIGRhdGUgaW5mb21hdGlvblxuICogQHJldHVybnMgVGhlIGZpbHRlciBjb25kaXRpb25zIGNvbnRhaW5pbmcgc2VtYW50aWMgZGF0ZXNcbiAqL1xuXG5mdW5jdGlvbiBhZGRTZW1hbnRpY0RhdGVzVG9Db25kaXRpb25zKG9TZW1hbnRpY0RhdGVzOiBTZW1hbnRpY0RhdGVDb25maWd1cmF0aW9uKTogQ29uZGl0aW9uT2JqZWN0IHtcblx0Y29uc3QgdmFsdWVzOiB1bmtub3duW10gPSBbXTtcblx0aWYgKG9TZW1hbnRpY0RhdGVzPy5oaWdoKSB7XG5cdFx0dmFsdWVzLnB1c2gob1NlbWFudGljRGF0ZXM/LmhpZ2gpO1xuXHR9XG5cdGlmIChvU2VtYW50aWNEYXRlcz8ubG93KSB7XG5cdFx0dmFsdWVzLnB1c2gob1NlbWFudGljRGF0ZXM/Lmxvdyk7XG5cdH1cblx0cmV0dXJuIHtcblx0XHR2YWx1ZXM6IHZhbHVlcyxcblx0XHRvcGVyYXRvcjogb1NlbWFudGljRGF0ZXM/Lm9wZXJhdG9yLFxuXHRcdGlzRW1wdHk6IHVuZGVmaW5lZFxuXHR9O1xufVxuXG5mdW5jdGlvbiBhZGRTZWxlY3RPcHRpb25zVG9Db25kaXRpb25zKFxuXHRzQ29udGV4dFBhdGg6IHN0cmluZyxcblx0b1NlbGVjdGlvblZhcmlhbnQ6IFNlbGVjdGlvblZhcmlhbnQsXG5cdHNTZWxlY3RPcHRpb25Qcm9wOiBzdHJpbmcsXG5cdG9Db25kaXRpb25zOiBSZWNvcmQ8c3RyaW5nLCBDb25kaXRpb25PYmplY3RbXT4sXG5cdHNDb25kaXRpb25QYXRoOiBzdHJpbmcgfCB1bmRlZmluZWQsXG5cdHNDb25kaXRpb25Qcm9wOiBzdHJpbmcsXG5cdG9WYWxpZFByb3BlcnRpZXM6IFJlY29yZDxzdHJpbmcsIE1ldGFNb2RlbFByb3BlcnR5Pixcblx0bWV0YU1vZGVsQ29udGV4dDogT0RhdGFNZXRhTW9kZWwsXG5cdGlzUGFyYW1ldGVyOiBib29sZWFuLFxuXHRiSXNGTFBWYWx1ZVByZXNlbnQ/OiBib29sZWFuLFxuXHRiVXNlU2VtYW50aWNEYXRlUmFuZ2U/OiBib29sZWFuIHwgc3RyaW5nLFxuXHRvVmlld0RhdGE/OiBvYmplY3Rcbikge1xuXHRsZXQgYUNvbmRpdGlvbnM6IENvbmRpdGlvbk9iamVjdFtdID0gW10sXG5cdFx0YVNlbGVjdE9wdGlvbnM6IFNlbGVjdE9wdGlvbltdLFxuXHRcdGFWYWxpZE9wZXJhdG9yczogc3RyaW5nW10sXG5cdFx0YVNlbWFudGljRGF0ZU9wZXJhdG9yczogc3RyaW5nW10gPSBbXTtcblxuXHRpZiAoaXNQYXJhbWV0ZXIgfHwgTWV0YU1vZGVsRnVuY3Rpb24uaXNQcm9wZXJ0eUZpbHRlcmFibGUobWV0YU1vZGVsQ29udGV4dCwgc0NvbnRleHRQYXRoLCBzQ29uZGl0aW9uUHJvcCwgdHJ1ZSkpIHtcblx0XHRjb25zdCBvUHJvcGVydHlNZXRhZGF0YSA9IG9WYWxpZFByb3BlcnRpZXNbc0NvbmRpdGlvblByb3BdO1xuXHRcdGFTZWxlY3RPcHRpb25zID0gb1NlbGVjdGlvblZhcmlhbnQuZ2V0U2VsZWN0T3B0aW9uKHNTZWxlY3RPcHRpb25Qcm9wKSBhcyBTZWxlY3RPcHRpb25bXTtcblx0XHRjb25zdCBzZXR0aW5ncyA9IGdldEZpbHRlckNvbmZpZ3VyYXRpb25TZXR0aW5nKG9WaWV3RGF0YSwgc0NvbmRpdGlvblByb3ApO1xuXHRcdGFWYWxpZE9wZXJhdG9ycyA9IGlzUGFyYW1ldGVyID8gW1wiRVFcIl0gOiBDb21tb25VdGlscy5nZXRPcGVyYXRvcnNGb3JQcm9wZXJ0eShzQ29uZGl0aW9uUHJvcCwgc0NvbnRleHRQYXRoLCBtZXRhTW9kZWxDb250ZXh0KTtcblx0XHRpZiAoYlVzZVNlbWFudGljRGF0ZVJhbmdlKSB7XG5cdFx0XHRhU2VtYW50aWNEYXRlT3BlcmF0b3JzID0gaXNQYXJhbWV0ZXJcblx0XHRcdFx0PyBbXCJFUVwiXVxuXHRcdFx0XHQ6IENvbW1vblV0aWxzLmdldE9wZXJhdG9yc0ZvclByb3BlcnR5KFxuXHRcdFx0XHRcdFx0c0NvbmRpdGlvblByb3AsXG5cdFx0XHRcdFx0XHRzQ29udGV4dFBhdGgsXG5cdFx0XHRcdFx0XHRtZXRhTW9kZWxDb250ZXh0LFxuXHRcdFx0XHRcdFx0b1Byb3BlcnR5TWV0YWRhdGE/LiRUeXBlLFxuXHRcdFx0XHRcdFx0YlVzZVNlbWFudGljRGF0ZVJhbmdlLFxuXHRcdFx0XHRcdFx0c2V0dGluZ3Ncblx0XHRcdFx0ICApO1xuXHRcdH1cblx0XHQvLyBDcmVhdGUgY29uZGl0aW9ucyBmb3IgYWxsIHRoZSBzZWxlY3RPcHRpb25zIG9mIHRoZSBwcm9wZXJ0eVxuXHRcdGFDb25kaXRpb25zID0gaXNQYXJhbWV0ZXJcblx0XHRcdD8gQ29tbW9uVXRpbHMuYWRkU2VsZWN0T3B0aW9uVG9Db25kaXRpb25zKFxuXHRcdFx0XHRcdG9Qcm9wZXJ0eU1ldGFkYXRhLFxuXHRcdFx0XHRcdGFWYWxpZE9wZXJhdG9ycyxcblx0XHRcdFx0XHRhU2VtYW50aWNEYXRlT3BlcmF0b3JzLFxuXHRcdFx0XHRcdGFDb25kaXRpb25zLFxuXHRcdFx0XHRcdGFTZWxlY3RPcHRpb25zWzBdXG5cdFx0XHQgIClcblx0XHRcdDogYVNlbGVjdE9wdGlvbnMucmVkdWNlKFxuXHRcdFx0XHRcdENvbW1vblV0aWxzLmFkZFNlbGVjdE9wdGlvblRvQ29uZGl0aW9ucy5iaW5kKG51bGwsIG9Qcm9wZXJ0eU1ldGFkYXRhLCBhVmFsaWRPcGVyYXRvcnMsIGFTZW1hbnRpY0RhdGVPcGVyYXRvcnMpLFxuXHRcdFx0XHRcdGFDb25kaXRpb25zXG5cdFx0XHQgICk7XG5cdFx0aWYgKGFDb25kaXRpb25zLmxlbmd0aCkge1xuXHRcdFx0aWYgKHNDb25kaXRpb25QYXRoKSB7XG5cdFx0XHRcdG9Db25kaXRpb25zW3NDb25kaXRpb25QYXRoICsgc0NvbmRpdGlvblByb3BdID0gb0NvbmRpdGlvbnMuaGFzT3duUHJvcGVydHkoc0NvbmRpdGlvblBhdGggKyBzQ29uZGl0aW9uUHJvcClcblx0XHRcdFx0XHQ/IG9Db25kaXRpb25zW3NDb25kaXRpb25QYXRoICsgc0NvbmRpdGlvblByb3BdLmNvbmNhdChhQ29uZGl0aW9ucylcblx0XHRcdFx0XHQ6IGFDb25kaXRpb25zO1xuXHRcdFx0fSBlbHNlIGlmIChiSXNGTFBWYWx1ZVByZXNlbnQpIHtcblx0XHRcdFx0Ly8gSWYgRkxQIHZhbHVlcyBhcmUgcHJlc2VudCByZXBsYWNlIGl0IHdpdGggRkxQIHZhbHVlc1xuXHRcdFx0XHRhQ29uZGl0aW9ucy5mb3JFYWNoKChlbGVtZW50KSA9PiB7XG5cdFx0XHRcdFx0ZWxlbWVudFtcImZpbHRlcmVkXCJdID0gdHJ1ZTtcblx0XHRcdFx0fSk7XG5cdFx0XHRcdGlmIChvQ29uZGl0aW9ucy5oYXNPd25Qcm9wZXJ0eShzQ29uZGl0aW9uUHJvcCkpIHtcblx0XHRcdFx0XHRvQ29uZGl0aW9uc1tzQ29uZGl0aW9uUHJvcF0uZm9yRWFjaCgoZWxlbWVudCkgPT4ge1xuXHRcdFx0XHRcdFx0ZWxlbWVudFtcImZpbHRlcmVkXCJdID0gZmFsc2U7XG5cdFx0XHRcdFx0fSk7XG5cdFx0XHRcdFx0b0NvbmRpdGlvbnNbc0NvbmRpdGlvblByb3BdID0gb0NvbmRpdGlvbnNbc0NvbmRpdGlvblByb3BdLmNvbmNhdChhQ29uZGl0aW9ucyk7XG5cdFx0XHRcdH0gZWxzZSB7XG5cdFx0XHRcdFx0b0NvbmRpdGlvbnNbc0NvbmRpdGlvblByb3BdID0gYUNvbmRpdGlvbnM7XG5cdFx0XHRcdH1cblx0XHRcdH0gZWxzZSB7XG5cdFx0XHRcdG9Db25kaXRpb25zW3NDb25kaXRpb25Qcm9wXSA9IG9Db25kaXRpb25zLmhhc093blByb3BlcnR5KHNDb25kaXRpb25Qcm9wKVxuXHRcdFx0XHRcdD8gb0NvbmRpdGlvbnNbc0NvbmRpdGlvblByb3BdLmNvbmNhdChhQ29uZGl0aW9ucylcblx0XHRcdFx0XHQ6IGFDb25kaXRpb25zO1xuXHRcdFx0fVxuXHRcdH1cblx0fVxufVxuXG4vKipcbiAqIE1ldGhvZCB0byBjcmVhdGUgdGhlIHNlbWFudGljIGRhdGVzIGZyb20gZmlsdGVyIGNvbmRpdGlvbnNcbiAqXG4gKiBAZnVuY3Rpb25cbiAqIEBuYW1lIGNyZWF0ZVNlbWFudGljRGF0ZXNGcm9tQ29uZGl0aW9uc1xuICogQHBhcmFtIG9Db25kaXRpb24gRmlsdGVyIGZpZWxkIGNvbmRpdGlvblxuICogQHBhcmFtIHNGaWx0ZXJOYW1lIEZpbHRlciBGaWVsZCBQYXRoXG4gKiBAcmV0dXJucyBUaGUgU2VtYW50aWMgZGF0ZSBjb25kaXRpb25zXG4gKi9cblxuZnVuY3Rpb24gY3JlYXRlU2VtYW50aWNEYXRlc0Zyb21Db25kaXRpb25zKG9Db25kaXRpb246IENvbmRpdGlvblR5cGUpOiBTZW1hbnRpY0RhdGVDb25maWd1cmF0aW9uIHtcblx0cmV0dXJuIHtcblx0XHRoaWdoOiAob0NvbmRpdGlvbj8udmFsdWVzPy5bMF0gYXMgc3RyaW5nKSB8fCBudWxsLFxuXHRcdGxvdzogKG9Db25kaXRpb24/LnZhbHVlcz8uWzFdIGFzIHN0cmluZykgfHwgbnVsbCxcblx0XHRvcGVyYXRvcjogb0NvbmRpdGlvbj8ub3BlcmF0b3Jcblx0fTtcbn1cblxuLyoqXG4gKiBNZXRob2QgdG8gUmV0dXJuIHRoZSBmaWx0ZXIgY29uZmlndXJhdGlvblxuICpcbiAqIEBmdW5jdGlvblxuICogQG5hbWUgZ2V0RmlsdGVyQ29uZmlndXJhdGlvblNldHRpbmdcbiAqIEBwYXJhbSBvVmlld0RhdGEgbWFuaWZlc3QgQ29uZmlndXJhdGlvblxuICogQHBhcmFtIHNQcm9wZXJ0eSBGaWx0ZXIgRmllbGQgUGF0aFxuICogQHJldHVybnMgVGhlIEZpbHRlciBGaWVsZCBDb25maWd1cmF0aW9uXG4gKi9cbnR5cGUgVmlld0RhdGEgPSB7XG5cdGNvbnRyb2xDb25maWd1cmF0aW9uPzogUmVjb3JkPHN0cmluZywgUmVjb3JkPHN0cmluZywgdW5rbm93bj4+O1xufTtcbmZ1bmN0aW9uIGdldEZpbHRlckNvbmZpZ3VyYXRpb25TZXR0aW5nKG9WaWV3RGF0YTogVmlld0RhdGEgPSB7fSwgc1Byb3BlcnR5OiBzdHJpbmcpIHtcblx0Y29uc3Qgb0NvbmZpZyA9IG9WaWV3RGF0YT8uY29udHJvbENvbmZpZ3VyYXRpb247XG5cdGNvbnN0IGZpbHRlckNvbmZpZyA9XG5cdFx0b0NvbmZpZyAmJiAob0NvbmZpZ1tcIkBjb20uc2FwLnZvY2FidWxhcmllcy5VSS52MS5TZWxlY3Rpb25GaWVsZHNcIl0/LmZpbHRlckZpZWxkcyBhcyBSZWNvcmQ8c3RyaW5nLCB7IHNldHRpbmdzOiBzdHJpbmcgfT4pO1xuXHRyZXR1cm4gZmlsdGVyQ29uZmlnPy5bc1Byb3BlcnR5XSA/IGZpbHRlckNvbmZpZ1tzUHJvcGVydHldPy5zZXR0aW5ncyA6IHVuZGVmaW5lZDtcbn1cbmZ1bmN0aW9uIGFkZFNlbGVjdGlvblZhcmlhbnRUb0NvbmRpdGlvbnMoXG5cdG9TZWxlY3Rpb25WYXJpYW50OiBTZWxlY3Rpb25WYXJpYW50LFxuXHRvQ29uZGl0aW9uczogUmVjb3JkPHN0cmluZywgQ29uZGl0aW9uT2JqZWN0W10+LFxuXHRvTWV0YU1vZGVsQ29udGV4dDogT0RhdGFNZXRhTW9kZWwsXG5cdHNDb250ZXh0UGF0aDogc3RyaW5nLFxuXHRiSXNGTFBWYWx1ZXM/OiBib29sZWFuLFxuXHRiVXNlU2VtYW50aWNEYXRlUmFuZ2U/OiBib29sZWFuLFxuXHRvVmlld0RhdGE/OiBvYmplY3Rcbikge1xuXHRjb25zdCBhU2VsZWN0T3B0aW9uc1Byb3BlcnR5TmFtZXMgPSBvU2VsZWN0aW9uVmFyaWFudC5nZXRTZWxlY3RPcHRpb25zUHJvcGVydHlOYW1lcygpLFxuXHRcdG9WYWxpZFByb3BlcnRpZXMgPSBDb21tb25VdGlscy5nZXRDb250ZXh0UGF0aFByb3BlcnRpZXMob01ldGFNb2RlbENvbnRleHQsIHNDb250ZXh0UGF0aCksXG5cdFx0YU1ldGFkYXRQcm9wZXJ0aWVzID0gT2JqZWN0LmtleXMob1ZhbGlkUHJvcGVydGllcyksXG5cdFx0b1BhcmFtZXRlckluZm8gPSBDb21tb25VdGlscy5nZXRQYXJhbWV0ZXJJbmZvKG9NZXRhTW9kZWxDb250ZXh0LCBzQ29udGV4dFBhdGgpLFxuXHRcdHNQYXJhbWV0ZXJDb250ZXh0UGF0aCA9IG9QYXJhbWV0ZXJJbmZvLmNvbnRleHRQYXRoLFxuXHRcdG9WYWxpZFBhcmFtZXRlclByb3BlcnRpZXMgPSBvUGFyYW1ldGVySW5mby5wYXJhbWV0ZXJQcm9wZXJ0aWVzO1xuXG5cdGlmIChzUGFyYW1ldGVyQ29udGV4dFBhdGggIT09IHVuZGVmaW5lZCAmJiBvVmFsaWRQYXJhbWV0ZXJQcm9wZXJ0aWVzICYmIE9iamVjdC5rZXlzKG9WYWxpZFBhcmFtZXRlclByb3BlcnRpZXMpLmxlbmd0aCA+IDApIHtcblx0XHRjb25zdCBhTWV0YWRhdGFQYXJhbWV0ZXJzID0gT2JqZWN0LmtleXMob1ZhbGlkUGFyYW1ldGVyUHJvcGVydGllcyk7XG5cdFx0YU1ldGFkYXRhUGFyYW1ldGVycy5mb3JFYWNoKGZ1bmN0aW9uIChzTWV0YWRhdGFQYXJhbWV0ZXI6IHN0cmluZykge1xuXHRcdFx0bGV0IHNTZWxlY3RPcHRpb25OYW1lO1xuXHRcdFx0aWYgKGFTZWxlY3RPcHRpb25zUHJvcGVydHlOYW1lcy5pbmNsdWRlcyhgJFBhcmFtZXRlci4ke3NNZXRhZGF0YVBhcmFtZXRlcn1gKSkge1xuXHRcdFx0XHRzU2VsZWN0T3B0aW9uTmFtZSA9IGAkUGFyYW1ldGVyLiR7c01ldGFkYXRhUGFyYW1ldGVyfWA7XG5cdFx0XHR9IGVsc2UgaWYgKGFTZWxlY3RPcHRpb25zUHJvcGVydHlOYW1lcy5pbmNsdWRlcyhzTWV0YWRhdGFQYXJhbWV0ZXIpKSB7XG5cdFx0XHRcdHNTZWxlY3RPcHRpb25OYW1lID0gc01ldGFkYXRhUGFyYW1ldGVyO1xuXHRcdFx0fSBlbHNlIGlmIChcblx0XHRcdFx0c01ldGFkYXRhUGFyYW1ldGVyLnN0YXJ0c1dpdGgoXCJQX1wiKSAmJlxuXHRcdFx0XHRhU2VsZWN0T3B0aW9uc1Byb3BlcnR5TmFtZXMuaW5jbHVkZXMoYCRQYXJhbWV0ZXIuJHtzTWV0YWRhdGFQYXJhbWV0ZXIuc2xpY2UoMiwgc01ldGFkYXRhUGFyYW1ldGVyLmxlbmd0aCl9YClcblx0XHRcdCkge1xuXHRcdFx0XHRzU2VsZWN0T3B0aW9uTmFtZSA9IGAkUGFyYW1ldGVyLiR7c01ldGFkYXRhUGFyYW1ldGVyLnNsaWNlKDIsIHNNZXRhZGF0YVBhcmFtZXRlci5sZW5ndGgpfWA7XG5cdFx0XHR9IGVsc2UgaWYgKFxuXHRcdFx0XHRzTWV0YWRhdGFQYXJhbWV0ZXIuc3RhcnRzV2l0aChcIlBfXCIpICYmXG5cdFx0XHRcdGFTZWxlY3RPcHRpb25zUHJvcGVydHlOYW1lcy5pbmNsdWRlcyhzTWV0YWRhdGFQYXJhbWV0ZXIuc2xpY2UoMiwgc01ldGFkYXRhUGFyYW1ldGVyLmxlbmd0aCkpXG5cdFx0XHQpIHtcblx0XHRcdFx0c1NlbGVjdE9wdGlvbk5hbWUgPSBzTWV0YWRhdGFQYXJhbWV0ZXIuc2xpY2UoMiwgc01ldGFkYXRhUGFyYW1ldGVyLmxlbmd0aCk7XG5cdFx0XHR9IGVsc2UgaWYgKGFTZWxlY3RPcHRpb25zUHJvcGVydHlOYW1lcy5pbmNsdWRlcyhgJFBhcmFtZXRlci5QXyR7c01ldGFkYXRhUGFyYW1ldGVyfWApKSB7XG5cdFx0XHRcdHNTZWxlY3RPcHRpb25OYW1lID0gYCRQYXJhbWV0ZXIuUF8ke3NNZXRhZGF0YVBhcmFtZXRlcn1gO1xuXHRcdFx0fSBlbHNlIGlmIChhU2VsZWN0T3B0aW9uc1Byb3BlcnR5TmFtZXMuaW5jbHVkZXMoYFBfJHtzTWV0YWRhdGFQYXJhbWV0ZXJ9YCkpIHtcblx0XHRcdFx0c1NlbGVjdE9wdGlvbk5hbWUgPSBgUF8ke3NNZXRhZGF0YVBhcmFtZXRlcn1gO1xuXHRcdFx0fVxuXG5cdFx0XHRpZiAoc1NlbGVjdE9wdGlvbk5hbWUpIHtcblx0XHRcdFx0YWRkU2VsZWN0T3B0aW9uc1RvQ29uZGl0aW9ucyhcblx0XHRcdFx0XHRzUGFyYW1ldGVyQ29udGV4dFBhdGgsXG5cdFx0XHRcdFx0b1NlbGVjdGlvblZhcmlhbnQsXG5cdFx0XHRcdFx0c1NlbGVjdE9wdGlvbk5hbWUsXG5cdFx0XHRcdFx0b0NvbmRpdGlvbnMsXG5cdFx0XHRcdFx0dW5kZWZpbmVkLFxuXHRcdFx0XHRcdHNNZXRhZGF0YVBhcmFtZXRlcixcblx0XHRcdFx0XHRvVmFsaWRQYXJhbWV0ZXJQcm9wZXJ0aWVzLFxuXHRcdFx0XHRcdG9NZXRhTW9kZWxDb250ZXh0LFxuXHRcdFx0XHRcdHRydWUsXG5cdFx0XHRcdFx0YklzRkxQVmFsdWVzLFxuXHRcdFx0XHRcdGJVc2VTZW1hbnRpY0RhdGVSYW5nZSxcblx0XHRcdFx0XHRvVmlld0RhdGFcblx0XHRcdFx0KTtcblx0XHRcdH1cblx0XHR9KTtcblx0fVxuXHRhTWV0YWRhdFByb3BlcnRpZXMuZm9yRWFjaChmdW5jdGlvbiAoc01ldGFkYXRhUHJvcGVydHk6IHN0cmluZykge1xuXHRcdGxldCBzU2VsZWN0T3B0aW9uTmFtZTtcblx0XHRpZiAoYVNlbGVjdE9wdGlvbnNQcm9wZXJ0eU5hbWVzLmluY2x1ZGVzKHNNZXRhZGF0YVByb3BlcnR5KSkge1xuXHRcdFx0c1NlbGVjdE9wdGlvbk5hbWUgPSBzTWV0YWRhdGFQcm9wZXJ0eTtcblx0XHR9IGVsc2UgaWYgKFxuXHRcdFx0c01ldGFkYXRhUHJvcGVydHkuc3RhcnRzV2l0aChcIlBfXCIpICYmXG5cdFx0XHRhU2VsZWN0T3B0aW9uc1Byb3BlcnR5TmFtZXMuaW5jbHVkZXMoc01ldGFkYXRhUHJvcGVydHkuc2xpY2UoMiwgc01ldGFkYXRhUHJvcGVydHkubGVuZ3RoKSlcblx0XHQpIHtcblx0XHRcdHNTZWxlY3RPcHRpb25OYW1lID0gc01ldGFkYXRhUHJvcGVydHkuc2xpY2UoMiwgc01ldGFkYXRhUHJvcGVydHkubGVuZ3RoKTtcblx0XHR9IGVsc2UgaWYgKGFTZWxlY3RPcHRpb25zUHJvcGVydHlOYW1lcy5pbmNsdWRlcyhgUF8ke3NNZXRhZGF0YVByb3BlcnR5fWApKSB7XG5cdFx0XHRzU2VsZWN0T3B0aW9uTmFtZSA9IGBQXyR7c01ldGFkYXRhUHJvcGVydHl9YDtcblx0XHR9XG5cdFx0aWYgKHNTZWxlY3RPcHRpb25OYW1lKSB7XG5cdFx0XHRhZGRTZWxlY3RPcHRpb25zVG9Db25kaXRpb25zKFxuXHRcdFx0XHRzQ29udGV4dFBhdGgsXG5cdFx0XHRcdG9TZWxlY3Rpb25WYXJpYW50LFxuXHRcdFx0XHRzU2VsZWN0T3B0aW9uTmFtZSxcblx0XHRcdFx0b0NvbmRpdGlvbnMsXG5cdFx0XHRcdHVuZGVmaW5lZCxcblx0XHRcdFx0c01ldGFkYXRhUHJvcGVydHksXG5cdFx0XHRcdG9WYWxpZFByb3BlcnRpZXMsXG5cdFx0XHRcdG9NZXRhTW9kZWxDb250ZXh0LFxuXHRcdFx0XHRmYWxzZSxcblx0XHRcdFx0YklzRkxQVmFsdWVzLFxuXHRcdFx0XHRiVXNlU2VtYW50aWNEYXRlUmFuZ2UsXG5cdFx0XHRcdG9WaWV3RGF0YVxuXHRcdFx0KTtcblx0XHR9XG5cdH0pO1xuXG5cdGFTZWxlY3RPcHRpb25zUHJvcGVydHlOYW1lcy5mb3JFYWNoKGZ1bmN0aW9uIChzU2VsZWN0T3B0aW9uOiBzdHJpbmcpIHtcblx0XHRpZiAoc1NlbGVjdE9wdGlvbi5pbmRleE9mKFwiLlwiKSA+IDAgJiYgIXNTZWxlY3RPcHRpb24uaW5jbHVkZXMoXCIkUGFyYW1ldGVyXCIpKSB7XG5cdFx0XHRjb25zdCBzUmVwbGFjZWRPcHRpb24gPSBzU2VsZWN0T3B0aW9uLnJlcGxhY2VBbGwoXCIuXCIsIFwiL1wiKTtcblx0XHRcdGNvbnN0IHNGdWxsQ29udGV4dFBhdGggPSBgLyR7c1JlcGxhY2VkT3B0aW9ufWAuc3RhcnRzV2l0aChzQ29udGV4dFBhdGgpXG5cdFx0XHRcdD8gYC8ke3NSZXBsYWNlZE9wdGlvbn1gXG5cdFx0XHRcdDogYCR7c0NvbnRleHRQYXRofS8ke3NSZXBsYWNlZE9wdGlvbn1gOyAvLyBjaGVjayBpZiB0aGUgZnVsbCBwYXRoLCBlZyBTYWxlc09yZGVyTWFuYWdlLl9JdGVtLk1hdGVyaWFsIGV4aXN0cyBpbiB0aGUgbWV0YW1vZGVsXG5cdFx0XHRpZiAob01ldGFNb2RlbENvbnRleHQuZ2V0T2JqZWN0KHNGdWxsQ29udGV4dFBhdGgucmVwbGFjZShcIlBfXCIsIFwiXCIpKSkge1xuXHRcdFx0XHRfY3JlYXRlQ29uZGl0aW9uc0Zvck5hdlByb3BlcnRpZXMoXG5cdFx0XHRcdFx0c0Z1bGxDb250ZXh0UGF0aCxcblx0XHRcdFx0XHRzQ29udGV4dFBhdGgsXG5cdFx0XHRcdFx0b1NlbGVjdGlvblZhcmlhbnQsXG5cdFx0XHRcdFx0c1NlbGVjdE9wdGlvbixcblx0XHRcdFx0XHRvTWV0YU1vZGVsQ29udGV4dCxcblx0XHRcdFx0XHRvQ29uZGl0aW9ucyxcblx0XHRcdFx0XHRiSXNGTFBWYWx1ZXMsXG5cdFx0XHRcdFx0YlVzZVNlbWFudGljRGF0ZVJhbmdlLFxuXHRcdFx0XHRcdG9WaWV3RGF0YVxuXHRcdFx0XHQpO1xuXHRcdFx0fVxuXHRcdH1cblx0fSk7XG5cdHJldHVybiBvQ29uZGl0aW9ucztcbn1cblxuZnVuY3Rpb24gX2NyZWF0ZUNvbmRpdGlvbnNGb3JOYXZQcm9wZXJ0aWVzKFxuXHRzRnVsbENvbnRleHRQYXRoOiBzdHJpbmcsXG5cdHNNYWluRW50aXR5U2V0UGF0aDogc3RyaW5nLFxuXHRvU2VsZWN0aW9uVmFyaWFudDogU2VsZWN0aW9uVmFyaWFudCxcblx0c1NlbGVjdE9wdGlvbjogc3RyaW5nLFxuXHRvTWV0YU1vZGVsQ29udGV4dDogT0RhdGFNZXRhTW9kZWwsXG5cdG9Db25kaXRpb25zOiBSZWNvcmQ8c3RyaW5nLCBDb25kaXRpb25PYmplY3RbXT4sXG5cdGJJc0ZMUFZhbHVlUHJlc2VudD86IGJvb2xlYW4sXG5cdGJTZW1hbnRpY0RhdGVSYW5nZT86IGJvb2xlYW4sXG5cdG9WaWV3RGF0YT86IG9iamVjdFxuKSB7XG5cdGxldCBhTmF2T2JqZWN0TmFtZXMgPSBzU2VsZWN0T3B0aW9uLnNwbGl0KFwiLlwiKTtcblx0Ly8gRWc6IFwiU2FsZXNPcmRlck1hbmFnZS5fSXRlbS5fTWF0ZXJpYWwuTWF0ZXJpYWxcIiBvciBcIl9JdGVtLk1hdGVyaWFsXCJcblx0aWYgKGAvJHtzU2VsZWN0T3B0aW9uLnJlcGxhY2VBbGwoXCIuXCIsIFwiL1wiKX1gLnN0YXJ0c1dpdGgoc01haW5FbnRpdHlTZXRQYXRoKSkge1xuXHRcdGNvbnN0IHNGdWxsUGF0aCA9IGAvJHtzU2VsZWN0T3B0aW9ufWAucmVwbGFjZUFsbChcIi5cIiwgXCIvXCIpLFxuXHRcdFx0c05hdlBhdGggPSBzRnVsbFBhdGgucmVwbGFjZShgJHtzTWFpbkVudGl0eVNldFBhdGh9L2AsIFwiXCIpO1xuXHRcdGFOYXZPYmplY3ROYW1lcyA9IHNOYXZQYXRoLnNwbGl0KFwiL1wiKTtcblx0fVxuXHRsZXQgc0NvbmRpdGlvblBhdGggPSBcIlwiO1xuXHRjb25zdCBzUHJvcGVydHlOYW1lID0gYU5hdk9iamVjdE5hbWVzW2FOYXZPYmplY3ROYW1lcy5sZW5ndGggLSAxXTsgLy8gTWF0ZXJpYWwgZnJvbSBTYWxlc09yZGVyTWFuYWdlLl9JdGVtLk1hdGVyaWFsXG5cdGZvciAobGV0IGkgPSAwOyBpIDwgYU5hdk9iamVjdE5hbWVzLmxlbmd0aCAtIDE7IGkrKykge1xuXHRcdGlmIChvTWV0YU1vZGVsQ29udGV4dC5nZXRPYmplY3QoYCR7c01haW5FbnRpdHlTZXRQYXRofS8ke2FOYXZPYmplY3ROYW1lc1tpXS5yZXBsYWNlKFwiUF9cIiwgXCJcIil9YCkuJGlzQ29sbGVjdGlvbikge1xuXHRcdFx0c0NvbmRpdGlvblBhdGggPSBgJHtzQ29uZGl0aW9uUGF0aCArIGFOYXZPYmplY3ROYW1lc1tpXX0qL2A7IC8vIF9JdGVtKi8gaW4gY2FzZSBvZiAxOm4gY2FyZGluYWxpdHlcblx0XHR9IGVsc2Uge1xuXHRcdFx0c0NvbmRpdGlvblBhdGggPSBgJHtzQ29uZGl0aW9uUGF0aCArIGFOYXZPYmplY3ROYW1lc1tpXX0vYDsgLy8gX0l0ZW0vIGluIGNhc2Ugb2YgMToxIGNhcmRpbmFsaXR5XG5cdFx0fVxuXHRcdHNNYWluRW50aXR5U2V0UGF0aCA9IGAke3NNYWluRW50aXR5U2V0UGF0aH0vJHthTmF2T2JqZWN0TmFtZXNbaV19YDtcblx0fVxuXHRjb25zdCBzTmF2UHJvcGVydHlQYXRoID0gc0Z1bGxDb250ZXh0UGF0aC5zbGljZSgwLCBzRnVsbENvbnRleHRQYXRoLmxhc3RJbmRleE9mKFwiL1wiKSksXG5cdFx0b1ZhbGlkUHJvcGVydGllcyA9IENvbW1vblV0aWxzLmdldENvbnRleHRQYXRoUHJvcGVydGllcyhvTWV0YU1vZGVsQ29udGV4dCwgc05hdlByb3BlcnR5UGF0aCksXG5cdFx0YVNlbGVjdE9wdGlvbnNQcm9wZXJ0eU5hbWVzID0gb1NlbGVjdGlvblZhcmlhbnQuZ2V0U2VsZWN0T3B0aW9uc1Byb3BlcnR5TmFtZXMoKTtcblx0bGV0IHNTZWxlY3RPcHRpb25OYW1lID0gc1Byb3BlcnR5TmFtZTtcblx0aWYgKG9WYWxpZFByb3BlcnRpZXNbc1Byb3BlcnR5TmFtZV0pIHtcblx0XHRzU2VsZWN0T3B0aW9uTmFtZSA9IHNQcm9wZXJ0eU5hbWU7XG5cdH0gZWxzZSBpZiAoc1Byb3BlcnR5TmFtZS5zdGFydHNXaXRoKFwiUF9cIikgJiYgb1ZhbGlkUHJvcGVydGllc1tzUHJvcGVydHlOYW1lLnJlcGxhY2UoXCJQX1wiLCBcIlwiKV0pIHtcblx0XHRzU2VsZWN0T3B0aW9uTmFtZSA9IHNQcm9wZXJ0eU5hbWUucmVwbGFjZShcIlBfXCIsIFwiXCIpO1xuXHR9IGVsc2UgaWYgKG9WYWxpZFByb3BlcnRpZXNbYFBfJHtzUHJvcGVydHlOYW1lfWBdICYmIGFTZWxlY3RPcHRpb25zUHJvcGVydHlOYW1lcy5pbmNsdWRlcyhgUF8ke3NQcm9wZXJ0eU5hbWV9YCkpIHtcblx0XHRzU2VsZWN0T3B0aW9uTmFtZSA9IGBQXyR7c1Byb3BlcnR5TmFtZX1gO1xuXHR9XG5cdGlmIChzUHJvcGVydHlOYW1lLnN0YXJ0c1dpdGgoXCJQX1wiKSAmJiBvQ29uZGl0aW9uc1tzQ29uZGl0aW9uUGF0aCArIHNTZWxlY3RPcHRpb25OYW1lXSkge1xuXHRcdC8vIGlmIHRoZXJlIGlzIG5vIFNhbGVzT3JkZXJNYW5hZ2UuX0l0ZW0uTWF0ZXJpYWwgeWV0IGluIHRoZSBvQ29uZGl0aW9uc1xuXHR9IGVsc2UgaWYgKCFzUHJvcGVydHlOYW1lLnN0YXJ0c1dpdGgoXCJQX1wiKSAmJiBvQ29uZGl0aW9uc1tzQ29uZGl0aW9uUGF0aCArIHNTZWxlY3RPcHRpb25OYW1lXSkge1xuXHRcdGRlbGV0ZSBvQ29uZGl0aW9uc1tzQ29uZGl0aW9uUGF0aCArIHNTZWxlY3RPcHRpb25OYW1lXTtcblx0XHRhZGRTZWxlY3RPcHRpb25zVG9Db25kaXRpb25zKFxuXHRcdFx0c05hdlByb3BlcnR5UGF0aCxcblx0XHRcdG9TZWxlY3Rpb25WYXJpYW50LFxuXHRcdFx0c1NlbGVjdE9wdGlvbixcblx0XHRcdG9Db25kaXRpb25zLFxuXHRcdFx0c0NvbmRpdGlvblBhdGgsXG5cdFx0XHRzU2VsZWN0T3B0aW9uTmFtZSxcblx0XHRcdG9WYWxpZFByb3BlcnRpZXMsXG5cdFx0XHRvTWV0YU1vZGVsQ29udGV4dCxcblx0XHRcdGZhbHNlLFxuXHRcdFx0YklzRkxQVmFsdWVQcmVzZW50LFxuXHRcdFx0YlNlbWFudGljRGF0ZVJhbmdlLFxuXHRcdFx0b1ZpZXdEYXRhXG5cdFx0KTtcblx0fSBlbHNlIHtcblx0XHRhZGRTZWxlY3RPcHRpb25zVG9Db25kaXRpb25zKFxuXHRcdFx0c05hdlByb3BlcnR5UGF0aCxcblx0XHRcdG9TZWxlY3Rpb25WYXJpYW50LFxuXHRcdFx0c1NlbGVjdE9wdGlvbixcblx0XHRcdG9Db25kaXRpb25zLFxuXHRcdFx0c0NvbmRpdGlvblBhdGgsXG5cdFx0XHRzU2VsZWN0T3B0aW9uTmFtZSxcblx0XHRcdG9WYWxpZFByb3BlcnRpZXMsXG5cdFx0XHRvTWV0YU1vZGVsQ29udGV4dCxcblx0XHRcdGZhbHNlLFxuXHRcdFx0YklzRkxQVmFsdWVQcmVzZW50LFxuXHRcdFx0YlNlbWFudGljRGF0ZVJhbmdlLFxuXHRcdFx0b1ZpZXdEYXRhXG5cdFx0KTtcblx0fVxufVxuXG5mdW5jdGlvbiBhZGRQYWdlQ29udGV4dFRvU2VsZWN0aW9uVmFyaWFudChvU2VsZWN0aW9uVmFyaWFudDogU2VsZWN0aW9uVmFyaWFudCwgbVBhZ2VDb250ZXh0OiB1bmtub3duW10sIG9WaWV3OiBWaWV3KSB7XG5cdGNvbnN0IG9BcHBDb21wb25lbnQgPSBDb21tb25VdGlscy5nZXRBcHBDb21wb25lbnQob1ZpZXcpO1xuXHRjb25zdCBvTmF2aWdhdGlvblNlcnZpY2UgPSBvQXBwQ29tcG9uZW50LmdldE5hdmlnYXRpb25TZXJ2aWNlKCk7XG5cdHJldHVybiBvTmF2aWdhdGlvblNlcnZpY2UubWl4QXR0cmlidXRlc0FuZFNlbGVjdGlvblZhcmlhbnQobVBhZ2VDb250ZXh0LCBvU2VsZWN0aW9uVmFyaWFudC50b0pTT05TdHJpbmcoKSk7XG59XG5cbmZ1bmN0aW9uIGFkZEV4dGVybmFsU3RhdGVGaWx0ZXJzVG9TZWxlY3Rpb25WYXJpYW50KFxuXHRvU2VsZWN0aW9uVmFyaWFudDogU2VsZWN0aW9uVmFyaWFudCxcblx0bUZpbHRlcnM6IHtcblx0XHRmaWx0ZXJDb25kaXRpb25zOiBSZWNvcmQ8c3RyaW5nLCBSZWNvcmQ8c3RyaW5nLCBDb25kaXRpb25PYmplY3Q+Pjtcblx0XHRmaWx0ZXJDb25kaXRpb25zV2l0aG91dENvbmZsaWN0OiBSZWNvcmQ8c3RyaW5nLCBzdHJpbmc+O1xuXHR9LFxuXHRvVGFyZ2V0SW5mbzoge1xuXHRcdHByb3BlcnRpZXNXaXRob3V0Q29uZmxpY3Q/OiBSZWNvcmQ8c3RyaW5nLCBzdHJpbmc+O1xuXHR9LFxuXHRvRmlsdGVyQmFyPzogRmlsdGVyQmFyXG4pIHtcblx0bGV0IHNGaWx0ZXI6IHN0cmluZztcblx0Y29uc3QgZm5HZXRTaWduQW5kT3B0aW9uID0gZnVuY3Rpb24gKHNPcGVyYXRvcjogc3RyaW5nLCBzTG93VmFsdWU6IHN0cmluZywgc0hpZ2hWYWx1ZTogc3RyaW5nKSB7XG5cdFx0Y29uc3Qgb1NlbGVjdE9wdGlvblN0YXRlID0ge1xuXHRcdFx0b3B0aW9uOiBcIlwiLFxuXHRcdFx0c2lnbjogXCJJXCIsXG5cdFx0XHRsb3c6IHNMb3dWYWx1ZSxcblx0XHRcdGhpZ2g6IHNIaWdoVmFsdWVcblx0XHR9O1xuXHRcdHN3aXRjaCAoc09wZXJhdG9yKSB7XG5cdFx0XHRjYXNlIFwiQ29udGFpbnNcIjpcblx0XHRcdFx0b1NlbGVjdE9wdGlvblN0YXRlLm9wdGlvbiA9IFwiQ1BcIjtcblx0XHRcdFx0YnJlYWs7XG5cdFx0XHRjYXNlIFwiU3RhcnRzV2l0aFwiOlxuXHRcdFx0XHRvU2VsZWN0T3B0aW9uU3RhdGUub3B0aW9uID0gXCJDUFwiO1xuXHRcdFx0XHRvU2VsZWN0T3B0aW9uU3RhdGUubG93ICs9IFwiKlwiO1xuXHRcdFx0XHRicmVhaztcblx0XHRcdGNhc2UgXCJFbmRzV2l0aFwiOlxuXHRcdFx0XHRvU2VsZWN0T3B0aW9uU3RhdGUub3B0aW9uID0gXCJDUFwiO1xuXHRcdFx0XHRvU2VsZWN0T3B0aW9uU3RhdGUubG93ID0gYCoke29TZWxlY3RPcHRpb25TdGF0ZS5sb3d9YDtcblx0XHRcdFx0YnJlYWs7XG5cdFx0XHRjYXNlIFwiQlRcIjpcblx0XHRcdGNhc2UgXCJMRVwiOlxuXHRcdFx0Y2FzZSBcIkxUXCI6XG5cdFx0XHRjYXNlIFwiR1RcIjpcblx0XHRcdGNhc2UgXCJORVwiOlxuXHRcdFx0Y2FzZSBcIkVRXCI6XG5cdFx0XHRcdG9TZWxlY3RPcHRpb25TdGF0ZS5vcHRpb24gPSBzT3BlcmF0b3I7XG5cdFx0XHRcdGJyZWFrO1xuXHRcdFx0Y2FzZSBcIkRBVEVcIjpcblx0XHRcdFx0b1NlbGVjdE9wdGlvblN0YXRlLm9wdGlvbiA9IFwiRVFcIjtcblx0XHRcdFx0YnJlYWs7XG5cdFx0XHRjYXNlIFwiREFURVJBTkdFXCI6XG5cdFx0XHRcdG9TZWxlY3RPcHRpb25TdGF0ZS5vcHRpb24gPSBcIkJUXCI7XG5cdFx0XHRcdGJyZWFrO1xuXHRcdFx0Y2FzZSBcIkZST01cIjpcblx0XHRcdFx0b1NlbGVjdE9wdGlvblN0YXRlLm9wdGlvbiA9IFwiR0VcIjtcblx0XHRcdFx0YnJlYWs7XG5cdFx0XHRjYXNlIFwiVE9cIjpcblx0XHRcdFx0b1NlbGVjdE9wdGlvblN0YXRlLm9wdGlvbiA9IFwiTEVcIjtcblx0XHRcdFx0YnJlYWs7XG5cdFx0XHRjYXNlIFwiRUVRXCI6XG5cdFx0XHRcdG9TZWxlY3RPcHRpb25TdGF0ZS5vcHRpb24gPSBcIkVRXCI7XG5cdFx0XHRcdGJyZWFrO1xuXHRcdFx0Y2FzZSBcIkVtcHR5XCI6XG5cdFx0XHRcdG9TZWxlY3RPcHRpb25TdGF0ZS5vcHRpb24gPSBcIkVRXCI7XG5cdFx0XHRcdG9TZWxlY3RPcHRpb25TdGF0ZS5sb3cgPSBcIlwiO1xuXHRcdFx0XHRicmVhaztcblx0XHRcdGNhc2UgXCJOb3RDb250YWluc1wiOlxuXHRcdFx0XHRvU2VsZWN0T3B0aW9uU3RhdGUub3B0aW9uID0gXCJDUFwiO1xuXHRcdFx0XHRvU2VsZWN0T3B0aW9uU3RhdGUuc2lnbiA9IFwiRVwiO1xuXHRcdFx0XHRicmVhaztcblx0XHRcdGNhc2UgXCJOT1RCVFwiOlxuXHRcdFx0XHRvU2VsZWN0T3B0aW9uU3RhdGUub3B0aW9uID0gXCJCVFwiO1xuXHRcdFx0XHRvU2VsZWN0T3B0aW9uU3RhdGUuc2lnbiA9IFwiRVwiO1xuXHRcdFx0XHRicmVhaztcblx0XHRcdGNhc2UgXCJOb3RTdGFydHNXaXRoXCI6XG5cdFx0XHRcdG9TZWxlY3RPcHRpb25TdGF0ZS5vcHRpb24gPSBcIkNQXCI7XG5cdFx0XHRcdG9TZWxlY3RPcHRpb25TdGF0ZS5sb3cgKz0gXCIqXCI7XG5cdFx0XHRcdG9TZWxlY3RPcHRpb25TdGF0ZS5zaWduID0gXCJFXCI7XG5cdFx0XHRcdGJyZWFrO1xuXHRcdFx0Y2FzZSBcIk5vdEVuZHNXaXRoXCI6XG5cdFx0XHRcdG9TZWxlY3RPcHRpb25TdGF0ZS5vcHRpb24gPSBcIkNQXCI7XG5cdFx0XHRcdG9TZWxlY3RPcHRpb25TdGF0ZS5sb3cgPSBgKiR7b1NlbGVjdE9wdGlvblN0YXRlLmxvd31gO1xuXHRcdFx0XHRvU2VsZWN0T3B0aW9uU3RhdGUuc2lnbiA9IFwiRVwiO1xuXHRcdFx0XHRicmVhaztcblx0XHRcdGNhc2UgXCJOb3RFbXB0eVwiOlxuXHRcdFx0XHRvU2VsZWN0T3B0aW9uU3RhdGUub3B0aW9uID0gXCJORVwiO1xuXHRcdFx0XHRvU2VsZWN0T3B0aW9uU3RhdGUubG93ID0gXCJcIjtcblx0XHRcdFx0YnJlYWs7XG5cdFx0XHRjYXNlIFwiTk9UTEVcIjpcblx0XHRcdFx0b1NlbGVjdE9wdGlvblN0YXRlLm9wdGlvbiA9IFwiTEVcIjtcblx0XHRcdFx0b1NlbGVjdE9wdGlvblN0YXRlLnNpZ24gPSBcIkVcIjtcblx0XHRcdFx0YnJlYWs7XG5cdFx0XHRjYXNlIFwiTk9UR0VcIjpcblx0XHRcdFx0b1NlbGVjdE9wdGlvblN0YXRlLm9wdGlvbiA9IFwiR0VcIjtcblx0XHRcdFx0b1NlbGVjdE9wdGlvblN0YXRlLnNpZ24gPSBcIkVcIjtcblx0XHRcdFx0YnJlYWs7XG5cdFx0XHRjYXNlIFwiTk9UTFRcIjpcblx0XHRcdFx0b1NlbGVjdE9wdGlvblN0YXRlLm9wdGlvbiA9IFwiTFRcIjtcblx0XHRcdFx0b1NlbGVjdE9wdGlvblN0YXRlLnNpZ24gPSBcIkVcIjtcblx0XHRcdFx0YnJlYWs7XG5cdFx0XHRjYXNlIFwiTk9UR1RcIjpcblx0XHRcdFx0b1NlbGVjdE9wdGlvblN0YXRlLm9wdGlvbiA9IFwiR1RcIjtcblx0XHRcdFx0b1NlbGVjdE9wdGlvblN0YXRlLnNpZ24gPSBcIkVcIjtcblx0XHRcdFx0YnJlYWs7XG5cdFx0XHRkZWZhdWx0OlxuXHRcdFx0XHRMb2cud2FybmluZyhgJHtzT3BlcmF0b3J9IGlzIG5vdCBzdXBwb3J0ZWQuICR7c0ZpbHRlcn0gY291bGQgbm90IGJlIGFkZGVkIHRvIHRoZSBuYXZpZ2F0aW9uIGNvbnRleHRgKTtcblx0XHR9XG5cdFx0cmV0dXJuIG9TZWxlY3RPcHRpb25TdGF0ZTtcblx0fTtcblx0Y29uc3Qgb0ZpbHRlckNvbmRpdGlvbnMgPSBtRmlsdGVycy5maWx0ZXJDb25kaXRpb25zO1xuXHRjb25zdCBvRmlsdGVyc1dpdGhvdXRDb25mbGljdCA9IG1GaWx0ZXJzLmZpbHRlckNvbmRpdGlvbnNXaXRob3V0Q29uZmxpY3QgPyBtRmlsdGVycy5maWx0ZXJDb25kaXRpb25zV2l0aG91dENvbmZsaWN0IDoge307XG5cdGNvbnN0IG9UYWJsZVByb3BlcnRpZXNXaXRob3V0Q29uZmxpY3QgPSBvVGFyZ2V0SW5mby5wcm9wZXJ0aWVzV2l0aG91dENvbmZsaWN0ID8gb1RhcmdldEluZm8ucHJvcGVydGllc1dpdGhvdXRDb25mbGljdCA6IHt9O1xuXHRjb25zdCBhZGRGaWx0ZXJzVG9TZWxlY3Rpb25WYXJpYW50ID0gZnVuY3Rpb24gKHNlbGVjdGlvblZhcmlhbnQ6IFNlbGVjdGlvblZhcmlhbnQsIHNGaWx0ZXJOYW1lOiBzdHJpbmcsIHNQYXRoPzogc3RyaW5nKSB7XG5cdFx0Y29uc3QgYUNvbmRpdGlvbnMgPSBvRmlsdGVyQ29uZGl0aW9uc1tzRmlsdGVyTmFtZV07XG5cdFx0Y29uc3Qgb1Byb3BlcnR5SW5mbyA9IG9GaWx0ZXJCYXIgJiYgb0ZpbHRlckJhci5nZXRQcm9wZXJ0eUhlbHBlcigpLmdldFByb3BlcnR5KHNGaWx0ZXJOYW1lKTtcblx0XHRjb25zdCBvVHlwZUNvbmZpZyA9IG9Qcm9wZXJ0eUluZm8/LnR5cGVDb25maWc7XG5cdFx0Y29uc3Qgb1R5cGVVdGlsID0gb0ZpbHRlckJhciAmJiBvRmlsdGVyQmFyLmdldENvbnRyb2xEZWxlZ2F0ZSgpLmdldFR5cGVVdGlsKCk7XG5cblx0XHRmb3IgKGNvbnN0IGl0ZW0gaW4gYUNvbmRpdGlvbnMpIHtcblx0XHRcdGNvbnN0IG9Db25kaXRpb24gPSBhQ29uZGl0aW9uc1tpdGVtXTtcblxuXHRcdFx0bGV0IG9wdGlvbjogc3RyaW5nIHwgdW5kZWZpbmVkID0gXCJcIixcblx0XHRcdFx0c2lnbiA9IFwiSVwiLFxuXHRcdFx0XHRsb3cgPSBcIlwiLFxuXHRcdFx0XHRoaWdoID0gbnVsbCxcblx0XHRcdFx0c2VtYW50aWNEYXRlcztcblxuXHRcdFx0Y29uc3Qgb09wZXJhdG9yID0gRmlsdGVyT3BlcmF0b3JVdGlsLmdldE9wZXJhdG9yKG9Db25kaXRpb24ub3BlcmF0b3IpO1xuXHRcdFx0aWYgKG9PcGVyYXRvciBpbnN0YW5jZW9mIFJhbmdlT3BlcmF0b3IpIHtcblx0XHRcdFx0c2VtYW50aWNEYXRlcyA9IENvbW1vblV0aWxzLmNyZWF0ZVNlbWFudGljRGF0ZXNGcm9tQ29uZGl0aW9ucyhvQ29uZGl0aW9uKTtcblx0XHRcdFx0Ly8gaGFuZGxpbmcgb2YgRGF0ZSBSYW5nZU9wZXJhdG9yc1xuXHRcdFx0XHRjb25zdCBvTW9kZWxGaWx0ZXIgPSBvT3BlcmF0b3IuZ2V0TW9kZWxGaWx0ZXIoXG5cdFx0XHRcdFx0b0NvbmRpdGlvbixcblx0XHRcdFx0XHRzRmlsdGVyTmFtZSxcblx0XHRcdFx0XHRvVHlwZUNvbmZpZz8udHlwZUluc3RhbmNlLFxuXHRcdFx0XHRcdGZhbHNlLFxuXHRcdFx0XHRcdG9UeXBlQ29uZmlnPy5iYXNlVHlwZVxuXHRcdFx0XHQpO1xuXHRcdFx0XHRpZiAoIW9Nb2RlbEZpbHRlcj8uZ2V0RmlsdGVycygpICYmICFvTW9kZWxGaWx0ZXI/LmdldEZpbHRlcnMoKT8ubGVuZ3RoKSB7XG5cdFx0XHRcdFx0c2lnbiA9IG9PcGVyYXRvci5leGNsdWRlID8gXCJFXCIgOiBcIklcIjtcblx0XHRcdFx0XHRsb3cgPSBvVHlwZVV0aWwuZXh0ZXJuYWxpemVWYWx1ZShvTW9kZWxGaWx0ZXIuZ2V0VmFsdWUxKCksIG9UeXBlQ29uZmlnLnR5cGVJbnN0YW5jZSk7XG5cdFx0XHRcdFx0aGlnaCA9IG9UeXBlVXRpbC5leHRlcm5hbGl6ZVZhbHVlKG9Nb2RlbEZpbHRlci5nZXRWYWx1ZTIoKSwgb1R5cGVDb25maWcudHlwZUluc3RhbmNlKTtcblx0XHRcdFx0XHRvcHRpb24gPSBvTW9kZWxGaWx0ZXIuZ2V0T3BlcmF0b3IoKTtcblx0XHRcdFx0fVxuXHRcdFx0fSBlbHNlIHtcblx0XHRcdFx0Y29uc3QgYVNlbWFudGljRGF0ZU9wc0V4dCA9IFNlbWFudGljRGF0ZU9wZXJhdG9ycy5nZXRTdXBwb3J0ZWRPcGVyYXRpb25zKCk7XG5cdFx0XHRcdGlmIChhU2VtYW50aWNEYXRlT3BzRXh0LmluY2x1ZGVzKG9Db25kaXRpb24/Lm9wZXJhdG9yKSkge1xuXHRcdFx0XHRcdHNlbWFudGljRGF0ZXMgPSBDb21tb25VdGlscy5jcmVhdGVTZW1hbnRpY0RhdGVzRnJvbUNvbmRpdGlvbnMob0NvbmRpdGlvbik7XG5cdFx0XHRcdH1cblx0XHRcdFx0Y29uc3QgdmFsdWUxID0gKG9Db25kaXRpb24udmFsdWVzWzBdICYmIG9Db25kaXRpb24udmFsdWVzWzBdLnRvU3RyaW5nKCkpIHx8IFwiXCI7XG5cdFx0XHRcdGNvbnN0IHZhbHVlMiA9IChvQ29uZGl0aW9uLnZhbHVlc1sxXSAmJiBvQ29uZGl0aW9uLnZhbHVlc1sxXS50b1N0cmluZygpKSB8fCBudWxsO1xuXHRcdFx0XHRjb25zdCBvU2VsZWN0T3B0aW9uID0gZm5HZXRTaWduQW5kT3B0aW9uKG9Db25kaXRpb24ub3BlcmF0b3IsIHZhbHVlMSwgdmFsdWUyKTtcblx0XHRcdFx0c2lnbiA9IG9PcGVyYXRvcj8uZXhjbHVkZSA/IFwiRVwiIDogXCJJXCI7XG5cdFx0XHRcdGxvdyA9IG9TZWxlY3RPcHRpb24/Lmxvdztcblx0XHRcdFx0aGlnaCA9IG9TZWxlY3RPcHRpb24/LmhpZ2g7XG5cdFx0XHRcdG9wdGlvbiA9IG9TZWxlY3RPcHRpb24/Lm9wdGlvbjtcblx0XHRcdH1cblxuXHRcdFx0aWYgKG9wdGlvbiAmJiBzZW1hbnRpY0RhdGVzKSB7XG5cdFx0XHRcdHNlbGVjdGlvblZhcmlhbnQuYWRkU2VsZWN0T3B0aW9uKHNQYXRoID8gc1BhdGggOiBzRmlsdGVyTmFtZSwgc2lnbiwgb3B0aW9uLCBsb3csIGhpZ2gsIHVuZGVmaW5lZCwgc2VtYW50aWNEYXRlcyk7XG5cdFx0XHR9IGVsc2UgaWYgKG9wdGlvbikge1xuXHRcdFx0XHRzZWxlY3Rpb25WYXJpYW50LmFkZFNlbGVjdE9wdGlvbihzUGF0aCA/IHNQYXRoIDogc0ZpbHRlck5hbWUsIHNpZ24sIG9wdGlvbiwgbG93LCBoaWdoKTtcblx0XHRcdH1cblx0XHR9XG5cdH07XG5cblx0Zm9yIChzRmlsdGVyIGluIG9GaWx0ZXJDb25kaXRpb25zKSB7XG5cdFx0Ly8gb25seSBhZGQgdGhlIGZpbHRlciB2YWx1ZXMgaWYgaXQgaXMgbm90IGFscmVhZHkgcHJlc2VudCBpbiB0aGUgU1YgYWxyZWFkeVxuXHRcdGlmICghb1NlbGVjdGlvblZhcmlhbnQuZ2V0U2VsZWN0T3B0aW9uKHNGaWx0ZXIpKSB7XG5cdFx0XHQvLyBUT0RPIDogY3VzdG9tIGZpbHRlcnMgc2hvdWxkIGJlIGlnbm9yZWQgbW9yZSBnZW5lcmljYWxseVxuXHRcdFx0aWYgKHNGaWx0ZXIgPT09IFwiJGVkaXRTdGF0ZVwiKSB7XG5cdFx0XHRcdGNvbnRpbnVlO1xuXHRcdFx0fVxuXHRcdFx0YWRkRmlsdGVyc1RvU2VsZWN0aW9uVmFyaWFudChvU2VsZWN0aW9uVmFyaWFudCwgc0ZpbHRlcik7XG5cdFx0fSBlbHNlIHtcblx0XHRcdGlmIChvVGFibGVQcm9wZXJ0aWVzV2l0aG91dENvbmZsaWN0ICYmIHNGaWx0ZXIgaW4gb1RhYmxlUHJvcGVydGllc1dpdGhvdXRDb25mbGljdCkge1xuXHRcdFx0XHRhZGRGaWx0ZXJzVG9TZWxlY3Rpb25WYXJpYW50KG9TZWxlY3Rpb25WYXJpYW50LCBzRmlsdGVyLCBvVGFibGVQcm9wZXJ0aWVzV2l0aG91dENvbmZsaWN0W3NGaWx0ZXJdKTtcblx0XHRcdH1cblx0XHRcdC8vIGlmIHByb3BlcnR5IHdhcyB3aXRob3V0IGNvbmZsaWN0IGluIHBhZ2UgY29udGV4dCB0aGVuIGFkZCBwYXRoIGZyb20gcGFnZSBjb250ZXh0IHRvIFNWXG5cdFx0XHRpZiAoc0ZpbHRlciBpbiBvRmlsdGVyc1dpdGhvdXRDb25mbGljdCkge1xuXHRcdFx0XHRhZGRGaWx0ZXJzVG9TZWxlY3Rpb25WYXJpYW50KG9TZWxlY3Rpb25WYXJpYW50LCBzRmlsdGVyLCBvRmlsdGVyc1dpdGhvdXRDb25mbGljdFtzRmlsdGVyXSk7XG5cdFx0XHR9XG5cdFx0fVxuXHR9XG5cdHJldHVybiBvU2VsZWN0aW9uVmFyaWFudDtcbn1cblxuZnVuY3Rpb24gaXNTdGlja3lFZGl0TW9kZShvQ29udHJvbDogQ29udHJvbCkge1xuXHRjb25zdCBiSXNTdGlja3lNb2RlID0gTW9kZWxIZWxwZXIuaXNTdGlja3lTZXNzaW9uU3VwcG9ydGVkKChvQ29udHJvbC5nZXRNb2RlbCgpIGFzIE9EYXRhTW9kZWwpLmdldE1ldGFNb2RlbCgpKTtcblx0Y29uc3QgYlVJRWRpdGFibGUgPSBvQ29udHJvbC5nZXRNb2RlbChcInVpXCIpLmdldFByb3BlcnR5KFwiL2lzRWRpdGFibGVcIik7XG5cdHJldHVybiBiSXNTdGlja3lNb2RlICYmIGJVSUVkaXRhYmxlO1xufVxuXG4vKipcbiAqIEBwYXJhbSBhTWFuZGF0b3J5RmlsdGVyRmllbGRzXG4gKiBAcGFyYW0gb1NlbGVjdGlvblZhcmlhbnRcbiAqIEBwYXJhbSBvU2VsZWN0aW9uVmFyaWFudERlZmF1bHRzXG4gKi9cbmZ1bmN0aW9uIGFkZERlZmF1bHREaXNwbGF5Q3VycmVuY3koXG5cdGFNYW5kYXRvcnlGaWx0ZXJGaWVsZHM6IEV4cGFuZFBhdGhUeXBlPEVkbS5Qcm9wZXJ0eVBhdGg+W10sXG5cdG9TZWxlY3Rpb25WYXJpYW50OiBTZWxlY3Rpb25WYXJpYW50LFxuXHRvU2VsZWN0aW9uVmFyaWFudERlZmF1bHRzOiBTZWxlY3Rpb25WYXJpYW50XG4pIHtcblx0aWYgKG9TZWxlY3Rpb25WYXJpYW50ICYmIGFNYW5kYXRvcnlGaWx0ZXJGaWVsZHMgJiYgYU1hbmRhdG9yeUZpbHRlckZpZWxkcy5sZW5ndGgpIHtcblx0XHRmb3IgKGxldCBpID0gMDsgaSA8IGFNYW5kYXRvcnlGaWx0ZXJGaWVsZHMubGVuZ3RoOyBpKyspIHtcblx0XHRcdGNvbnN0IGFTVk9wdGlvbiA9IG9TZWxlY3Rpb25WYXJpYW50LmdldFNlbGVjdE9wdGlvbihcIkRpc3BsYXlDdXJyZW5jeVwiKSxcblx0XHRcdFx0YURlZmF1bHRTVk9wdGlvbiA9IG9TZWxlY3Rpb25WYXJpYW50RGVmYXVsdHMgJiYgb1NlbGVjdGlvblZhcmlhbnREZWZhdWx0cy5nZXRTZWxlY3RPcHRpb24oXCJEaXNwbGF5Q3VycmVuY3lcIik7XG5cdFx0XHRpZiAoXG5cdFx0XHRcdGFNYW5kYXRvcnlGaWx0ZXJGaWVsZHNbaV0uJFByb3BlcnR5UGF0aCA9PT0gXCJEaXNwbGF5Q3VycmVuY3lcIiAmJlxuXHRcdFx0XHQoIWFTVk9wdGlvbiB8fCAhYVNWT3B0aW9uLmxlbmd0aCkgJiZcblx0XHRcdFx0YURlZmF1bHRTVk9wdGlvbiAmJlxuXHRcdFx0XHRhRGVmYXVsdFNWT3B0aW9uLmxlbmd0aFxuXHRcdFx0KSB7XG5cdFx0XHRcdGNvbnN0IGRpc3BsYXlDdXJyZW5jeVNlbGVjdE9wdGlvbiA9IGFEZWZhdWx0U1ZPcHRpb25bMF07XG5cdFx0XHRcdGNvbnN0IHNTaWduID0gZGlzcGxheUN1cnJlbmN5U2VsZWN0T3B0aW9uW1wiU2lnblwiXTtcblx0XHRcdFx0Y29uc3Qgc09wdGlvbiA9IGRpc3BsYXlDdXJyZW5jeVNlbGVjdE9wdGlvbltcIk9wdGlvblwiXTtcblx0XHRcdFx0Y29uc3Qgc0xvdyA9IGRpc3BsYXlDdXJyZW5jeVNlbGVjdE9wdGlvbltcIkxvd1wiXTtcblx0XHRcdFx0Y29uc3Qgc0hpZ2ggPSBkaXNwbGF5Q3VycmVuY3lTZWxlY3RPcHRpb25bXCJIaWdoXCJdO1xuXHRcdFx0XHRvU2VsZWN0aW9uVmFyaWFudC5hZGRTZWxlY3RPcHRpb24oXCJEaXNwbGF5Q3VycmVuY3lcIiwgc1NpZ24sIHNPcHRpb24sIHNMb3csIHNIaWdoKTtcblx0XHRcdH1cblx0XHR9XG5cdH1cbn1cblxudHlwZSBVc2VyRGVmYXVsdFBhcmFtZXRlciA9IHtcblx0JE5hbWU6IHN0cmluZztcblx0Z2V0UGF0aD8oKTogc3RyaW5nO1xufTtcblxuLyoqXG4gKiBSZXRyaWV2ZXMgdGhlIHVzZXIgZGVmYXVsdHMgZnJvbSB0aGUgc3RhcnR1cCBhcHAgc3RhdGUgKGlmIGF2YWlsYWJsZSkgb3IgdGhlIHN0YXJ0dXAgcGFyYW1ldGVyIGFuZCBzZXRzIHRoZW0gdG8gYSBtb2RlbC5cbiAqXG4gKiBAcGFyYW0gb0FwcENvbXBvbmVudFxuICogQHBhcmFtIGFQYXJhbWV0ZXJzXG4gKiBAcGFyYW0gb01vZGVsXG4gKiBAcGFyYW0gYklzQWN0aW9uXG4gKiBAcGFyYW0gYklzQ3JlYXRlXG4gKiBAcGFyYW0gb0FjdGlvbkRlZmF1bHRWYWx1ZXNcbiAqL1xuYXN5bmMgZnVuY3Rpb24gc2V0VXNlckRlZmF1bHRzKFxuXHRvQXBwQ29tcG9uZW50OiBBcHBDb21wb25lbnQsXG5cdGFQYXJhbWV0ZXJzOiBVc2VyRGVmYXVsdFBhcmFtZXRlcltdLFxuXHRvTW9kZWw6IEpTT05Nb2RlbCB8IE9EYXRhVjRDb250ZXh0LFxuXHRiSXNBY3Rpb246IGJvb2xlYW4sXG5cdGJJc0NyZWF0ZT86IGJvb2xlYW4sXG5cdG9BY3Rpb25EZWZhdWx0VmFsdWVzPzogUmVjb3JkPHN0cmluZywgc3RyaW5nPlxuKTogUHJvbWlzZTx2b2lkPiB7XG5cdGNvbnN0IG9Db21wb25lbnREYXRhID0gb0FwcENvbXBvbmVudC5nZXRDb21wb25lbnREYXRhKCksXG5cdFx0b1N0YXJ0dXBQYXJhbWV0ZXJzID0gKG9Db21wb25lbnREYXRhICYmIG9Db21wb25lbnREYXRhLnN0YXJ0dXBQYXJhbWV0ZXJzKSB8fCB7fSxcblx0XHRvU2hlbGxTZXJ2aWNlcyA9IG9BcHBDb21wb25lbnQuZ2V0U2hlbGxTZXJ2aWNlcygpO1xuXHRjb25zdCBvU3RhcnR1cEFwcFN0YXRlID0gYXdhaXQgb1NoZWxsU2VydmljZXMuZ2V0U3RhcnR1cEFwcFN0YXRlKG9BcHBDb21wb25lbnQpO1xuXHRjb25zdCBvRGF0YSA9IG9TdGFydHVwQXBwU3RhdGU/LmdldERhdGEoKSB8fCB7fSxcblx0XHRhRXh0ZW5kZWRQYXJhbWV0ZXJzID0gKG9EYXRhLnNlbGVjdGlvblZhcmlhbnQgJiYgb0RhdGEuc2VsZWN0aW9uVmFyaWFudC5TZWxlY3RPcHRpb25zKSB8fCBbXTtcblx0YVBhcmFtZXRlcnMuZm9yRWFjaChmdW5jdGlvbiAob1BhcmFtZXRlcikge1xuXHRcdGNvbnN0IHNQcm9wZXJ0eU5hbWUgPSBiSXNBY3Rpb25cblx0XHRcdD8gYC8ke29QYXJhbWV0ZXIuJE5hbWV9YFxuXHRcdFx0OiAob1BhcmFtZXRlci5nZXRQYXRoPy4oKS5zbGljZShvUGFyYW1ldGVyLmdldFBhdGgoKS5sYXN0SW5kZXhPZihcIi9cIikgKyAxKSBhcyBzdHJpbmcpO1xuXHRcdGNvbnN0IHNQYXJhbWV0ZXJOYW1lID0gYklzQWN0aW9uID8gc1Byb3BlcnR5TmFtZS5zbGljZSgxKSA6IHNQcm9wZXJ0eU5hbWU7XG5cdFx0aWYgKG9BY3Rpb25EZWZhdWx0VmFsdWVzICYmIGJJc0NyZWF0ZSkge1xuXHRcdFx0aWYgKG9BY3Rpb25EZWZhdWx0VmFsdWVzW3NQYXJhbWV0ZXJOYW1lXSkge1xuXHRcdFx0XHRvTW9kZWwuc2V0UHJvcGVydHkoc1Byb3BlcnR5TmFtZSwgb0FjdGlvbkRlZmF1bHRWYWx1ZXNbc1BhcmFtZXRlck5hbWVdKTtcblx0XHRcdH1cblx0XHR9IGVsc2UgaWYgKG9TdGFydHVwUGFyYW1ldGVyc1tzUGFyYW1ldGVyTmFtZV0pIHtcblx0XHRcdG9Nb2RlbC5zZXRQcm9wZXJ0eShzUHJvcGVydHlOYW1lLCBvU3RhcnR1cFBhcmFtZXRlcnNbc1BhcmFtZXRlck5hbWVdWzBdKTtcblx0XHR9IGVsc2UgaWYgKGFFeHRlbmRlZFBhcmFtZXRlcnMubGVuZ3RoID4gMCkge1xuXHRcdFx0Zm9yIChjb25zdCBvRXh0ZW5kZWRQYXJhbWV0ZXIgb2YgYUV4dGVuZGVkUGFyYW1ldGVycykge1xuXHRcdFx0XHRpZiAob0V4dGVuZGVkUGFyYW1ldGVyLlByb3BlcnR5TmFtZSA9PT0gc1BhcmFtZXRlck5hbWUpIHtcblx0XHRcdFx0XHRjb25zdCBvUmFuZ2UgPSBvRXh0ZW5kZWRQYXJhbWV0ZXIuUmFuZ2VzLmxlbmd0aFxuXHRcdFx0XHRcdFx0PyBvRXh0ZW5kZWRQYXJhbWV0ZXIuUmFuZ2VzW29FeHRlbmRlZFBhcmFtZXRlci5SYW5nZXMubGVuZ3RoIC0gMV1cblx0XHRcdFx0XHRcdDogdW5kZWZpbmVkO1xuXHRcdFx0XHRcdGlmIChvUmFuZ2UgJiYgb1JhbmdlLlNpZ24gPT09IFwiSVwiICYmIG9SYW5nZS5PcHRpb24gPT09IFwiRVFcIikge1xuXHRcdFx0XHRcdFx0b01vZGVsLnNldFByb3BlcnR5KHNQcm9wZXJ0eU5hbWUsIG9SYW5nZS5Mb3cpOyAvLyBoaWdoIGlzIGlnbm9yZWQgd2hlbiBPcHRpb249RVFcblx0XHRcdFx0XHR9XG5cdFx0XHRcdH1cblx0XHRcdH1cblx0XHR9XG5cdH0pO1xufVxuXG5leHBvcnQgdHlwZSBJbmJvdW5kUGFyYW1ldGVyID0ge1xuXHR1c2VGb3JDcmVhdGU6IGJvb2xlYW47XG59O1xuZnVuY3Rpb24gZ2V0QWRkaXRpb25hbFBhcmFtc0ZvckNyZWF0ZShcblx0b1N0YXJ0dXBQYXJhbWV0ZXJzOiBSZWNvcmQ8c3RyaW5nLCB1bmtub3duW10+LFxuXHRvSW5ib3VuZFBhcmFtZXRlcnM/OiBSZWNvcmQ8c3RyaW5nLCBJbmJvdW5kUGFyYW1ldGVyPlxuKSB7XG5cdGNvbnN0IG9JbmJvdW5kcyA9IG9JbmJvdW5kUGFyYW1ldGVycyxcblx0XHRhQ3JlYXRlUGFyYW1ldGVycyA9XG5cdFx0XHRvSW5ib3VuZHMgIT09IHVuZGVmaW5lZFxuXHRcdFx0XHQ/IE9iamVjdC5rZXlzKG9JbmJvdW5kcykuZmlsdGVyKGZ1bmN0aW9uIChzUGFyYW1ldGVyOiBzdHJpbmcpIHtcblx0XHRcdFx0XHRcdHJldHVybiBvSW5ib3VuZHNbc1BhcmFtZXRlcl0udXNlRm9yQ3JlYXRlO1xuXHRcdFx0XHQgIH0pXG5cdFx0XHRcdDogW107XG5cdGxldCBvUmV0O1xuXHRmb3IgKGxldCBpID0gMDsgaSA8IGFDcmVhdGVQYXJhbWV0ZXJzLmxlbmd0aDsgaSsrKSB7XG5cdFx0Y29uc3Qgc0NyZWF0ZVBhcmFtZXRlciA9IGFDcmVhdGVQYXJhbWV0ZXJzW2ldO1xuXHRcdGNvbnN0IGFWYWx1ZXMgPSBvU3RhcnR1cFBhcmFtZXRlcnMgJiYgb1N0YXJ0dXBQYXJhbWV0ZXJzW3NDcmVhdGVQYXJhbWV0ZXJdO1xuXHRcdGlmIChhVmFsdWVzICYmIGFWYWx1ZXMubGVuZ3RoID09PSAxKSB7XG5cdFx0XHRvUmV0ID0gb1JldCB8fCBPYmplY3QuY3JlYXRlKG51bGwpO1xuXHRcdFx0b1JldFtzQ3JlYXRlUGFyYW1ldGVyXSA9IGFWYWx1ZXNbMF07XG5cdFx0fVxuXHR9XG5cdHJldHVybiBvUmV0O1xufVxudHlwZSBPdXRib3VuZFBhcmFtZXRlciA9IHtcblx0cGFyYW1ldGVyczogUmVjb3JkPHN0cmluZywgT3V0Ym91bmRQYXJhbWV0ZXJWYWx1ZT47XG5cdHNlbWFudGljT2JqZWN0Pzogc3RyaW5nO1xuXHRhY3Rpb24/OiBzdHJpbmc7XG59O1xudHlwZSBPdXRib3VuZFBhcmFtZXRlclZhbHVlID0ge1xuXHR2YWx1ZT86IHtcblx0XHR2YWx1ZT86IHN0cmluZztcblx0XHRmb3JtYXQ/OiBzdHJpbmc7XG5cdH07XG59O1xuZnVuY3Rpb24gZ2V0U2VtYW50aWNPYmplY3RNYXBwaW5nKG9PdXRib3VuZDogT3V0Ym91bmRQYXJhbWV0ZXIpIHtcblx0Y29uc3QgYVNlbWFudGljT2JqZWN0TWFwcGluZzogTWV0YU1vZGVsVHlwZTxTZW1hbnRpY09iamVjdE1hcHBpbmdUeXBlPltdID0gW107XG5cdGlmIChvT3V0Ym91bmQucGFyYW1ldGVycykge1xuXHRcdGNvbnN0IGFQYXJhbWV0ZXJzID0gT2JqZWN0LmtleXMob091dGJvdW5kLnBhcmFtZXRlcnMpIHx8IFtdO1xuXHRcdGlmIChhUGFyYW1ldGVycy5sZW5ndGggPiAwKSB7XG5cdFx0XHRhUGFyYW1ldGVycy5mb3JFYWNoKGZ1bmN0aW9uIChzUGFyYW06IHN0cmluZykge1xuXHRcdFx0XHRjb25zdCBvTWFwcGluZyA9IG9PdXRib3VuZC5wYXJhbWV0ZXJzW3NQYXJhbV07XG5cdFx0XHRcdGlmIChvTWFwcGluZy52YWx1ZSAmJiBvTWFwcGluZy52YWx1ZS52YWx1ZSAmJiBvTWFwcGluZy52YWx1ZS5mb3JtYXQgPT09IFwiYmluZGluZ1wiKSB7XG5cdFx0XHRcdFx0Ly8gdXNpbmcgdGhlIGZvcm1hdCBvZiBVSS5NYXBwaW5nXG5cdFx0XHRcdFx0Y29uc3Qgb1NlbWFudGljTWFwcGluZyA9IHtcblx0XHRcdFx0XHRcdExvY2FsUHJvcGVydHk6IHtcblx0XHRcdFx0XHRcdFx0JFByb3BlcnR5UGF0aDogb01hcHBpbmcudmFsdWUudmFsdWVcblx0XHRcdFx0XHRcdH0sXG5cdFx0XHRcdFx0XHRTZW1hbnRpY09iamVjdFByb3BlcnR5OiBzUGFyYW1cblx0XHRcdFx0XHR9O1xuXG5cdFx0XHRcdFx0aWYgKGFTZW1hbnRpY09iamVjdE1hcHBpbmcubGVuZ3RoID4gMCkge1xuXHRcdFx0XHRcdFx0Ly8gVG8gY2hlY2sgaWYgdGhlIHNlbWFudGljT2JqZWN0IE1hcHBpbmcgaXMgZG9uZSBmb3IgdGhlIHNhbWUgbG9jYWwgcHJvcGVydHkgbW9yZSB0aGF0IG9uY2UgdGhlbiBmaXJzdCBvbmUgd2lsbCBiZSBjb25zaWRlcmVkXG5cdFx0XHRcdFx0XHRmb3IgKGxldCBpID0gMDsgaSA8IGFTZW1hbnRpY09iamVjdE1hcHBpbmcubGVuZ3RoOyBpKyspIHtcblx0XHRcdFx0XHRcdFx0aWYgKGFTZW1hbnRpY09iamVjdE1hcHBpbmdbaV0uTG9jYWxQcm9wZXJ0eT8uJFByb3BlcnR5UGF0aCAhPT0gb1NlbWFudGljTWFwcGluZy5Mb2NhbFByb3BlcnR5LiRQcm9wZXJ0eVBhdGgpIHtcblx0XHRcdFx0XHRcdFx0XHRhU2VtYW50aWNPYmplY3RNYXBwaW5nLnB1c2gob1NlbWFudGljTWFwcGluZyk7XG5cdFx0XHRcdFx0XHRcdH1cblx0XHRcdFx0XHRcdH1cblx0XHRcdFx0XHR9IGVsc2Uge1xuXHRcdFx0XHRcdFx0YVNlbWFudGljT2JqZWN0TWFwcGluZy5wdXNoKG9TZW1hbnRpY01hcHBpbmcpO1xuXHRcdFx0XHRcdH1cblx0XHRcdFx0fVxuXHRcdFx0fSk7XG5cdFx0fVxuXHR9XG5cdHJldHVybiBhU2VtYW50aWNPYmplY3RNYXBwaW5nO1xufVxuXG5mdW5jdGlvbiBnZXRIZWFkZXJGYWNldEl0ZW1Db25maWdGb3JFeHRlcm5hbE5hdmlnYXRpb24ob1ZpZXdEYXRhOiBWaWV3RGF0YSwgb0Nyb3NzTmF2OiBSZWNvcmQ8c3RyaW5nLCBPdXRib3VuZFBhcmFtZXRlcj4pIHtcblx0Y29uc3Qgb0hlYWRlckZhY2V0SXRlbXM6IFJlY29yZDxcblx0XHRzdHJpbmcsXG5cdFx0e1xuXHRcdFx0c2VtYW50aWNPYmplY3Q6IHN0cmluZztcblx0XHRcdGFjdGlvbjogc3RyaW5nO1xuXHRcdFx0c2VtYW50aWNPYmplY3RNYXBwaW5nOiBNZXRhTW9kZWxUeXBlPFNlbWFudGljT2JqZWN0TWFwcGluZ1R5cGU+W107XG5cdFx0fVxuXHQ+ID0ge307XG5cdGxldCBzSWQ7XG5cdGNvbnN0IG9Db250cm9sQ29uZmlnID0gb1ZpZXdEYXRhLmNvbnRyb2xDb25maWd1cmF0aW9uIGFzIFJlY29yZDxcblx0XHRzdHJpbmcsXG5cdFx0e1xuXHRcdFx0bmF2aWdhdGlvbj86IHtcblx0XHRcdFx0dGFyZ2V0T3V0Ym91bmQ/OiB7XG5cdFx0XHRcdFx0b3V0Ym91bmQ6IHN0cmluZztcblx0XHRcdFx0fTtcblx0XHRcdH07XG5cdFx0fVxuXHQ+O1xuXHRmb3IgKGNvbnN0IGNvbmZpZyBpbiBvQ29udHJvbENvbmZpZykge1xuXHRcdGlmIChjb25maWcuaW5kZXhPZihcIkBjb20uc2FwLnZvY2FidWxhcmllcy5VSS52MS5EYXRhUG9pbnRcIikgPiAtMSB8fCBjb25maWcuaW5kZXhPZihcIkBjb20uc2FwLnZvY2FidWxhcmllcy5VSS52MS5DaGFydFwiKSA+IC0xKSB7XG5cdFx0XHRjb25zdCBzT3V0Ym91bmQgPSBvQ29udHJvbENvbmZpZ1tjb25maWddLm5hdmlnYXRpb24/LnRhcmdldE91dGJvdW5kPy5vdXRib3VuZDtcblx0XHRcdGlmIChzT3V0Ym91bmQgIT09IHVuZGVmaW5lZCkge1xuXHRcdFx0XHRjb25zdCBvT3V0Ym91bmQgPSBvQ3Jvc3NOYXZbc091dGJvdW5kXTtcblx0XHRcdFx0aWYgKG9PdXRib3VuZC5zZW1hbnRpY09iamVjdCAmJiBvT3V0Ym91bmQuYWN0aW9uKSB7XG5cdFx0XHRcdFx0aWYgKGNvbmZpZy5pbmRleE9mKFwiQ2hhcnRcIikgPiAtMSkge1xuXHRcdFx0XHRcdFx0c0lkID0gZ2VuZXJhdGUoW1wiZmVcIiwgXCJNaWNyb0NoYXJ0TGlua1wiLCBjb25maWddKTtcblx0XHRcdFx0XHR9IGVsc2Uge1xuXHRcdFx0XHRcdFx0c0lkID0gZ2VuZXJhdGUoW1wiZmVcIiwgXCJIZWFkZXJEUExpbmtcIiwgY29uZmlnXSk7XG5cdFx0XHRcdFx0fVxuXHRcdFx0XHRcdGNvbnN0IGFTZW1hbnRpY09iamVjdE1hcHBpbmcgPSBDb21tb25VdGlscy5nZXRTZW1hbnRpY09iamVjdE1hcHBpbmcob091dGJvdW5kKTtcblx0XHRcdFx0XHRvSGVhZGVyRmFjZXRJdGVtc1tzSWRdID0ge1xuXHRcdFx0XHRcdFx0c2VtYW50aWNPYmplY3Q6IG9PdXRib3VuZC5zZW1hbnRpY09iamVjdCxcblx0XHRcdFx0XHRcdGFjdGlvbjogb091dGJvdW5kLmFjdGlvbixcblx0XHRcdFx0XHRcdHNlbWFudGljT2JqZWN0TWFwcGluZzogYVNlbWFudGljT2JqZWN0TWFwcGluZ1xuXHRcdFx0XHRcdH07XG5cdFx0XHRcdH0gZWxzZSB7XG5cdFx0XHRcdFx0TG9nLmVycm9yKGBDcm9zcyBuYXZpZ2F0aW9uIG91dGJvdW5kIGlzIGNvbmZpZ3VyZWQgd2l0aG91dCBzZW1hbnRpYyBvYmplY3QgYW5kIGFjdGlvbiBmb3IgJHtzT3V0Ym91bmR9YCk7XG5cdFx0XHRcdH1cblx0XHRcdH1cblx0XHR9XG5cdH1cblx0cmV0dXJuIG9IZWFkZXJGYWNldEl0ZW1zO1xufVxuXG5mdW5jdGlvbiBzZXRTZW1hbnRpY09iamVjdE1hcHBpbmdzKG9TZWxlY3Rpb25WYXJpYW50OiBTZWxlY3Rpb25WYXJpYW50LCB2TWFwcGluZ3M6IHVua25vd24pIHtcblx0Y29uc3Qgb01hcHBpbmdzID0gdHlwZW9mIHZNYXBwaW5ncyA9PT0gXCJzdHJpbmdcIiA/IEpTT04ucGFyc2Uodk1hcHBpbmdzKSA6IHZNYXBwaW5ncztcblx0Zm9yIChsZXQgaSA9IDA7IGkgPCBvTWFwcGluZ3MubGVuZ3RoOyBpKyspIHtcblx0XHRjb25zdCBzTG9jYWxQcm9wZXJ0eSA9XG5cdFx0XHQob01hcHBpbmdzW2ldW1wiTG9jYWxQcm9wZXJ0eVwiXSAmJiBvTWFwcGluZ3NbaV1bXCJMb2NhbFByb3BlcnR5XCJdW1wiJFByb3BlcnR5UGF0aFwiXSkgfHxcblx0XHRcdChvTWFwcGluZ3NbaV1bXCJAY29tLnNhcC52b2NhYnVsYXJpZXMuQ29tbW9uLnYxLkxvY2FsUHJvcGVydHlcIl0gJiZcblx0XHRcdFx0b01hcHBpbmdzW2ldW1wiQGNvbS5zYXAudm9jYWJ1bGFyaWVzLkNvbW1vbi52MS5Mb2NhbFByb3BlcnR5XCJdW1wiJFBhdGhcIl0pO1xuXHRcdGNvbnN0IHNTZW1hbnRpY09iamVjdFByb3BlcnR5ID1cblx0XHRcdG9NYXBwaW5nc1tpXVtcIlNlbWFudGljT2JqZWN0UHJvcGVydHlcIl0gfHwgb01hcHBpbmdzW2ldW1wiQGNvbS5zYXAudm9jYWJ1bGFyaWVzLkNvbW1vbi52MS5TZW1hbnRpY09iamVjdFByb3BlcnR5XCJdO1xuXHRcdGNvbnN0IG9TZWxlY3RPcHRpb24gPSBvU2VsZWN0aW9uVmFyaWFudC5nZXRTZWxlY3RPcHRpb24oc0xvY2FsUHJvcGVydHkpO1xuXHRcdGlmIChvU2VsZWN0T3B0aW9uKSB7XG5cdFx0XHQvL0NyZWF0ZSBhIG5ldyBTZWxlY3RPcHRpb24gd2l0aCBzU2VtYW50aWNPYmplY3RQcm9wZXJ0eSBhcyB0aGUgcHJvcGVydHkgTmFtZSBhbmQgcmVtb3ZlIHRoZSBvbGRlciBvbmVcblx0XHRcdG9TZWxlY3Rpb25WYXJpYW50LnJlbW92ZVNlbGVjdE9wdGlvbihzTG9jYWxQcm9wZXJ0eSk7XG5cdFx0XHRvU2VsZWN0aW9uVmFyaWFudC5tYXNzQWRkU2VsZWN0T3B0aW9uKHNTZW1hbnRpY09iamVjdFByb3BlcnR5LCBvU2VsZWN0T3B0aW9uKTtcblx0XHR9XG5cdH1cblx0cmV0dXJuIG9TZWxlY3Rpb25WYXJpYW50O1xufVxuXG50eXBlIFNlbWFudGljT2JqZWN0RnJvbVBhdGggPSB7XG5cdHNlbWFudGljT2JqZWN0UGF0aDogc3RyaW5nO1xuXHRzZW1hbnRpY09iamVjdEZvckdldExpbmtzOiB7IHNlbWFudGljT2JqZWN0OiBzdHJpbmcgfVtdO1xuXHRzZW1hbnRpY09iamVjdDoge1xuXHRcdHNlbWFudGljT2JqZWN0OiB7ICRQYXRoOiBzdHJpbmcgfTtcblx0fTtcblx0dW5hdmFpbGFibGVBY3Rpb25zOiBzdHJpbmdbXTtcbn07XG5hc3luYyBmdW5jdGlvbiBmbkdldFNlbWFudGljT2JqZWN0c0Zyb21QYXRoKG9NZXRhTW9kZWw6IE9EYXRhTWV0YU1vZGVsLCBzUGF0aDogc3RyaW5nLCBzUXVhbGlmaWVyOiBzdHJpbmcpIHtcblx0cmV0dXJuIG5ldyBQcm9taXNlPFNlbWFudGljT2JqZWN0RnJvbVBhdGg+KGZ1bmN0aW9uIChyZXNvbHZlKSB7XG5cdFx0bGV0IHNTZW1hbnRpY09iamVjdCwgYVNlbWFudGljT2JqZWN0VW5hdmFpbGFibGVBY3Rpb25zO1xuXHRcdGlmIChzUXVhbGlmaWVyID09PSBcIlwiKSB7XG5cdFx0XHRzU2VtYW50aWNPYmplY3QgPSBvTWV0YU1vZGVsLmdldE9iamVjdChgJHtzUGF0aH1AJHtDb21tb25Bbm5vdGF0aW9uVGVybXMuU2VtYW50aWNPYmplY3R9YCk7XG5cdFx0XHRhU2VtYW50aWNPYmplY3RVbmF2YWlsYWJsZUFjdGlvbnMgPSBvTWV0YU1vZGVsLmdldE9iamVjdChgJHtzUGF0aH1AJHtDb21tb25Bbm5vdGF0aW9uVGVybXMuU2VtYW50aWNPYmplY3RVbmF2YWlsYWJsZUFjdGlvbnN9YCk7XG5cdFx0fSBlbHNlIHtcblx0XHRcdHNTZW1hbnRpY09iamVjdCA9IG9NZXRhTW9kZWwuZ2V0T2JqZWN0KGAke3NQYXRofUAke0NvbW1vbkFubm90YXRpb25UZXJtcy5TZW1hbnRpY09iamVjdH0jJHtzUXVhbGlmaWVyfWApO1xuXHRcdFx0YVNlbWFudGljT2JqZWN0VW5hdmFpbGFibGVBY3Rpb25zID0gb01ldGFNb2RlbC5nZXRPYmplY3QoXG5cdFx0XHRcdGAke3NQYXRofUAke0NvbW1vbkFubm90YXRpb25UZXJtcy5TZW1hbnRpY09iamVjdFVuYXZhaWxhYmxlQWN0aW9uc30jJHtzUXVhbGlmaWVyfWBcblx0XHRcdCk7XG5cdFx0fVxuXG5cdFx0Y29uc3QgYVNlbWFudGljT2JqZWN0Rm9yR2V0TGlua3MgPSBbeyBzZW1hbnRpY09iamVjdDogc1NlbWFudGljT2JqZWN0IH1dO1xuXHRcdGNvbnN0IG9TZW1hbnRpY09iamVjdCA9IHtcblx0XHRcdHNlbWFudGljT2JqZWN0OiBzU2VtYW50aWNPYmplY3Rcblx0XHR9O1xuXHRcdHJlc29sdmUoe1xuXHRcdFx0c2VtYW50aWNPYmplY3RQYXRoOiBzUGF0aCxcblx0XHRcdHNlbWFudGljT2JqZWN0Rm9yR2V0TGlua3M6IGFTZW1hbnRpY09iamVjdEZvckdldExpbmtzLFxuXHRcdFx0c2VtYW50aWNPYmplY3Q6IG9TZW1hbnRpY09iamVjdCxcblx0XHRcdHVuYXZhaWxhYmxlQWN0aW9uczogYVNlbWFudGljT2JqZWN0VW5hdmFpbGFibGVBY3Rpb25zXG5cdFx0fSk7XG5cdH0pO1xufVxuXG5hc3luYyBmdW5jdGlvbiBmblVwZGF0ZVNlbWFudGljVGFyZ2V0c01vZGVsKFxuXHRhR2V0TGlua3NQcm9taXNlczogUHJvbWlzZTxMaW5rRGVmaW5pdGlvbltdW11bXT5bXSxcblx0YVNlbWFudGljT2JqZWN0czogU2VtYW50aWNPYmplY3RbXSxcblx0b0ludGVybmFsTW9kZWxDb250ZXh0OiBJbnRlcm5hbE1vZGVsQ29udGV4dCxcblx0c0N1cnJlbnRIYXNoOiBzdHJpbmdcbikge1xuXHR0eXBlIFNlbWFudGljT2JqZWN0SW5mbyA9IHsgc2VtYW50aWNPYmplY3Q6IHN0cmluZzsgcGF0aDogc3RyaW5nOyBIYXNUYXJnZXRzOiBib29sZWFuOyBIYXNUYXJnZXRzTm90RmlsdGVyZWQ6IGJvb2xlYW4gfTtcblx0cmV0dXJuIFByb21pc2UuYWxsKGFHZXRMaW5rc1Byb21pc2VzKVxuXHRcdC50aGVuKGZ1bmN0aW9uIChhVmFsdWVzKSB7XG5cdFx0XHRsZXQgYUxpbmtzOiBMaW5rRGVmaW5pdGlvbltdW11bXSxcblx0XHRcdFx0X29MaW5rLFxuXHRcdFx0XHRfc0xpbmtJbnRlbnRBY3Rpb24sXG5cdFx0XHRcdGFGaW5hbExpbmtzOiBMaW5rRGVmaW5pdGlvbltdW10gPSBbXTtcblx0XHRcdGxldCBvRmluYWxTZW1hbnRpY09iamVjdHM6IFJlY29yZDxzdHJpbmcsIFNlbWFudGljT2JqZWN0SW5mbz4gPSB7fTtcblx0XHRcdGNvbnN0IGJJbnRlbnRIYXNBY3Rpb25zID0gZnVuY3Rpb24gKHNJbnRlbnQ6IHN0cmluZywgYUFjdGlvbnM/OiB1bmtub3duW10pIHtcblx0XHRcdFx0Zm9yIChjb25zdCBpbnRlbnQgaW4gYUFjdGlvbnMpIHtcblx0XHRcdFx0XHRpZiAoaW50ZW50ID09PSBzSW50ZW50KSB7XG5cdFx0XHRcdFx0XHRyZXR1cm4gdHJ1ZTtcblx0XHRcdFx0XHR9IGVsc2Uge1xuXHRcdFx0XHRcdFx0cmV0dXJuIGZhbHNlO1xuXHRcdFx0XHRcdH1cblx0XHRcdFx0fVxuXHRcdFx0fTtcblxuXHRcdFx0Zm9yIChsZXQgayA9IDA7IGsgPCBhVmFsdWVzLmxlbmd0aDsgaysrKSB7XG5cdFx0XHRcdGFMaW5rcyA9IGFWYWx1ZXNba107XG5cdFx0XHRcdGlmIChhTGlua3MgJiYgYUxpbmtzLmxlbmd0aCA+IDAgJiYgYUxpbmtzWzBdICE9PSB1bmRlZmluZWQpIHtcblx0XHRcdFx0XHRjb25zdCBvU2VtYW50aWNPYmplY3Q6IFJlY29yZDxzdHJpbmcsIFJlY29yZDxzdHJpbmcsIFNlbWFudGljT2JqZWN0SW5mbz4+ID0ge307XG5cdFx0XHRcdFx0bGV0IG9UbXA6IFNlbWFudGljT2JqZWN0SW5mbztcblx0XHRcdFx0XHRsZXQgc0FsdGVybmF0ZVBhdGg7XG5cdFx0XHRcdFx0Zm9yIChsZXQgaSA9IDA7IGkgPCBhTGlua3MubGVuZ3RoOyBpKyspIHtcblx0XHRcdFx0XHRcdGFGaW5hbExpbmtzLnB1c2goW10pO1xuXHRcdFx0XHRcdFx0bGV0IGhhc1RhcmdldHNOb3RGaWx0ZXJlZCA9IGZhbHNlO1xuXHRcdFx0XHRcdFx0bGV0IGhhc1RhcmdldHMgPSBmYWxzZTtcblx0XHRcdFx0XHRcdGZvciAobGV0IGlMaW5rQ291bnQgPSAwOyBpTGlua0NvdW50IDwgYUxpbmtzW2ldWzBdLmxlbmd0aDsgaUxpbmtDb3VudCsrKSB7XG5cdFx0XHRcdFx0XHRcdF9vTGluayA9IGFMaW5rc1tpXVswXVtpTGlua0NvdW50XTtcblx0XHRcdFx0XHRcdFx0X3NMaW5rSW50ZW50QWN0aW9uID0gX29MaW5rICYmIF9vTGluay5pbnRlbnQuc3BsaXQoXCI/XCIpWzBdLnNwbGl0KFwiLVwiKVsxXTtcblxuXHRcdFx0XHRcdFx0XHRpZiAoIShfb0xpbmsgJiYgX29MaW5rLmludGVudCAmJiBfb0xpbmsuaW50ZW50LmluZGV4T2Yoc0N1cnJlbnRIYXNoKSA9PT0gMCkpIHtcblx0XHRcdFx0XHRcdFx0XHRoYXNUYXJnZXRzTm90RmlsdGVyZWQgPSB0cnVlO1xuXHRcdFx0XHRcdFx0XHRcdGlmICghYkludGVudEhhc0FjdGlvbnMoX3NMaW5rSW50ZW50QWN0aW9uLCBhU2VtYW50aWNPYmplY3RzW2tdLnVuYXZhaWxhYmxlQWN0aW9ucykpIHtcblx0XHRcdFx0XHRcdFx0XHRcdGFGaW5hbExpbmtzW2ldLnB1c2goX29MaW5rKTtcblx0XHRcdFx0XHRcdFx0XHRcdGhhc1RhcmdldHMgPSB0cnVlO1xuXHRcdFx0XHRcdFx0XHRcdH1cblx0XHRcdFx0XHRcdFx0fVxuXHRcdFx0XHRcdFx0fVxuXHRcdFx0XHRcdFx0b1RtcCA9IHtcblx0XHRcdFx0XHRcdFx0c2VtYW50aWNPYmplY3Q6IGFTZW1hbnRpY09iamVjdHNba10uc2VtYW50aWNPYmplY3QsXG5cdFx0XHRcdFx0XHRcdHBhdGg6IGFTZW1hbnRpY09iamVjdHNba10ucGF0aCxcblx0XHRcdFx0XHRcdFx0SGFzVGFyZ2V0czogaGFzVGFyZ2V0cyxcblx0XHRcdFx0XHRcdFx0SGFzVGFyZ2V0c05vdEZpbHRlcmVkOiBoYXNUYXJnZXRzTm90RmlsdGVyZWRcblx0XHRcdFx0XHRcdH07XG5cdFx0XHRcdFx0XHRpZiAob1NlbWFudGljT2JqZWN0W2FTZW1hbnRpY09iamVjdHNba10uc2VtYW50aWNPYmplY3RdID09PSB1bmRlZmluZWQpIHtcblx0XHRcdFx0XHRcdFx0b1NlbWFudGljT2JqZWN0W2FTZW1hbnRpY09iamVjdHNba10uc2VtYW50aWNPYmplY3RdID0ge307XG5cdFx0XHRcdFx0XHR9XG5cdFx0XHRcdFx0XHRzQWx0ZXJuYXRlUGF0aCA9IGFTZW1hbnRpY09iamVjdHNba10ucGF0aC5yZXBsYWNlKC9cXC8vZywgXCJfXCIpO1xuXHRcdFx0XHRcdFx0aWYgKG9TZW1hbnRpY09iamVjdFthU2VtYW50aWNPYmplY3RzW2tdLnNlbWFudGljT2JqZWN0XVtzQWx0ZXJuYXRlUGF0aF0gPT09IHVuZGVmaW5lZCkge1xuXHRcdFx0XHRcdFx0XHRvU2VtYW50aWNPYmplY3RbYVNlbWFudGljT2JqZWN0c1trXS5zZW1hbnRpY09iamVjdF1bc0FsdGVybmF0ZVBhdGhdID0ge30gYXMgU2VtYW50aWNPYmplY3RJbmZvO1xuXHRcdFx0XHRcdFx0fVxuXHRcdFx0XHRcdFx0b1NlbWFudGljT2JqZWN0W2FTZW1hbnRpY09iamVjdHNba10uc2VtYW50aWNPYmplY3RdW3NBbHRlcm5hdGVQYXRoXSA9IE9iamVjdC5hc3NpZ24oXG5cdFx0XHRcdFx0XHRcdG9TZW1hbnRpY09iamVjdFthU2VtYW50aWNPYmplY3RzW2tdLnNlbWFudGljT2JqZWN0XVtzQWx0ZXJuYXRlUGF0aF0sXG5cdFx0XHRcdFx0XHRcdG9UbXBcblx0XHRcdFx0XHRcdCk7XG5cdFx0XHRcdFx0fVxuXHRcdFx0XHRcdGNvbnN0IHNTZW1hbnRpY09iamVjdE5hbWUgPSBPYmplY3Qua2V5cyhvU2VtYW50aWNPYmplY3QpWzBdO1xuXHRcdFx0XHRcdGlmIChPYmplY3Qua2V5cyhvRmluYWxTZW1hbnRpY09iamVjdHMpLmluY2x1ZGVzKHNTZW1hbnRpY09iamVjdE5hbWUpKSB7XG5cdFx0XHRcdFx0XHRvRmluYWxTZW1hbnRpY09iamVjdHNbc1NlbWFudGljT2JqZWN0TmFtZV0gPSBPYmplY3QuYXNzaWduKFxuXHRcdFx0XHRcdFx0XHRvRmluYWxTZW1hbnRpY09iamVjdHNbc1NlbWFudGljT2JqZWN0TmFtZV0sXG5cdFx0XHRcdFx0XHRcdG9TZW1hbnRpY09iamVjdFtzU2VtYW50aWNPYmplY3ROYW1lXVxuXHRcdFx0XHRcdFx0KTtcblx0XHRcdFx0XHR9IGVsc2Uge1xuXHRcdFx0XHRcdFx0b0ZpbmFsU2VtYW50aWNPYmplY3RzID0gT2JqZWN0LmFzc2lnbihvRmluYWxTZW1hbnRpY09iamVjdHMsIG9TZW1hbnRpY09iamVjdCk7XG5cdFx0XHRcdFx0fVxuXHRcdFx0XHRcdGFGaW5hbExpbmtzID0gW107XG5cdFx0XHRcdH1cblx0XHRcdH1cblx0XHRcdGlmIChPYmplY3Qua2V5cyhvRmluYWxTZW1hbnRpY09iamVjdHMpLmxlbmd0aCA+IDApIHtcblx0XHRcdFx0b0ludGVybmFsTW9kZWxDb250ZXh0LnNldFByb3BlcnR5KFxuXHRcdFx0XHRcdFwic2VtYW50aWNzVGFyZ2V0c1wiLFxuXHRcdFx0XHRcdG1lcmdlT2JqZWN0cyhvRmluYWxTZW1hbnRpY09iamVjdHMsIG9JbnRlcm5hbE1vZGVsQ29udGV4dC5nZXRQcm9wZXJ0eShcInNlbWFudGljc1RhcmdldHNcIikpXG5cdFx0XHRcdCk7XG5cdFx0XHRcdHJldHVybiBvRmluYWxTZW1hbnRpY09iamVjdHM7XG5cdFx0XHR9XG5cdFx0XHRyZXR1cm47XG5cdFx0fSlcblx0XHQuY2F0Y2goZnVuY3Rpb24gKG9FcnJvcjogdW5rbm93bikge1xuXHRcdFx0TG9nLmVycm9yKFwiZm5VcGRhdGVTZW1hbnRpY1RhcmdldHNNb2RlbDogQ2Fubm90IHJlYWQgbGlua3NcIiwgb0Vycm9yIGFzIHN0cmluZyk7XG5cdFx0fSk7XG59XG5cbmFzeW5jIGZ1bmN0aW9uIGZuR2V0U2VtYW50aWNPYmplY3RQcm9taXNlKFxuXHRvQXBwQ29tcG9uZW50OiBBcHBDb21wb25lbnQsXG5cdG9WaWV3OiBWaWV3LFxuXHRvTWV0YU1vZGVsOiBPRGF0YU1ldGFNb2RlbCxcblx0c1BhdGg6IHN0cmluZyxcblx0c1F1YWxpZmllcjogc3RyaW5nXG4pIHtcblx0cmV0dXJuIENvbW1vblV0aWxzLmdldFNlbWFudGljT2JqZWN0c0Zyb21QYXRoKG9NZXRhTW9kZWwsIHNQYXRoLCBzUXVhbGlmaWVyKTtcbn1cblxuZnVuY3Rpb24gZm5QcmVwYXJlU2VtYW50aWNPYmplY3RzUHJvbWlzZXMoXG5cdF9vQXBwQ29tcG9uZW50OiBBcHBDb21wb25lbnQsXG5cdF9vVmlldzogVmlldyxcblx0X29NZXRhTW9kZWw6IE9EYXRhTWV0YU1vZGVsLFxuXHRfYVNlbWFudGljT2JqZWN0c0ZvdW5kOiBzdHJpbmdbXSxcblx0X2FTZW1hbnRpY09iamVjdHNQcm9taXNlczogUHJvbWlzZTxTZW1hbnRpY09iamVjdEZyb21QYXRoPltdXG4pIHtcblx0bGV0IF9LZXlzOiBzdHJpbmdbXSwgc1BhdGg7XG5cdGxldCBzUXVhbGlmaWVyOiBzdHJpbmcsIHJlZ2V4UmVzdWx0O1xuXHRmb3IgKGxldCBpID0gMDsgaSA8IF9hU2VtYW50aWNPYmplY3RzRm91bmQubGVuZ3RoOyBpKyspIHtcblx0XHRzUGF0aCA9IF9hU2VtYW50aWNPYmplY3RzRm91bmRbaV07XG5cdFx0X0tleXMgPSBPYmplY3Qua2V5cyhfb01ldGFNb2RlbC5nZXRPYmplY3Qoc1BhdGggKyBcIkBcIikpO1xuXHRcdGZvciAobGV0IGluZGV4ID0gMDsgaW5kZXggPCBfS2V5cy5sZW5ndGg7IGluZGV4KyspIHtcblx0XHRcdGlmIChcblx0XHRcdFx0X0tleXNbaW5kZXhdLmluZGV4T2YoYEAke0NvbW1vbkFubm90YXRpb25UZXJtcy5TZW1hbnRpY09iamVjdH1gKSA9PT0gMCAmJlxuXHRcdFx0XHRfS2V5c1tpbmRleF0uaW5kZXhPZihgQCR7Q29tbW9uQW5ub3RhdGlvblRlcm1zLlNlbWFudGljT2JqZWN0TWFwcGluZ31gKSA9PT0gLTEgJiZcblx0XHRcdFx0X0tleXNbaW5kZXhdLmluZGV4T2YoYEAke0NvbW1vbkFubm90YXRpb25UZXJtcy5TZW1hbnRpY09iamVjdFVuYXZhaWxhYmxlQWN0aW9uc31gKSA9PT0gLTFcblx0XHRcdCkge1xuXHRcdFx0XHRyZWdleFJlc3VsdCA9IC8jKC4qKS8uZXhlYyhfS2V5c1tpbmRleF0pO1xuXHRcdFx0XHRzUXVhbGlmaWVyID0gcmVnZXhSZXN1bHQgPyByZWdleFJlc3VsdFsxXSA6IFwiXCI7XG5cdFx0XHRcdF9hU2VtYW50aWNPYmplY3RzUHJvbWlzZXMucHVzaChcblx0XHRcdFx0XHRDb21tb25VdGlscy5nZXRTZW1hbnRpY09iamVjdFByb21pc2UoX29BcHBDb21wb25lbnQsIF9vVmlldywgX29NZXRhTW9kZWwsIHNQYXRoLCBzUXVhbGlmaWVyKVxuXHRcdFx0XHQpO1xuXHRcdFx0fVxuXHRcdH1cblx0fVxufVxuXG50eXBlIEludGVybmFsSlNPTk1vZGVsID0ge1xuXHRfZ2V0T2JqZWN0KHZhbDogc3RyaW5nLCBjb250ZXh0PzogQ29udGV4dCk6IG9iamVjdDtcbn07XG5mdW5jdGlvbiBmbkdldFNlbWFudGljVGFyZ2V0c0Zyb21QYWdlTW9kZWwob0NvbnRyb2xsZXI6IFBhZ2VDb250cm9sbGVyLCBzUGFnZU1vZGVsOiBzdHJpbmcpIHtcblx0Y29uc3QgX2ZuZmluZFZhbHVlc0hlbHBlciA9IGZ1bmN0aW9uIChcblx0XHRvYmo6IHVuZGVmaW5lZCB8IG51bGwgfCBSZWNvcmQ8c3RyaW5nLCBzdHJpbmc+W10gfCBSZWNvcmQ8c3RyaW5nLCB1bmtub3duPixcblx0XHRrZXk6IHN0cmluZyxcblx0XHRsaXN0OiBzdHJpbmdbXVxuXHQpIHtcblx0XHRpZiAoIW9iaikge1xuXHRcdFx0cmV0dXJuIGxpc3Q7XG5cdFx0fVxuXHRcdGlmIChvYmogaW5zdGFuY2VvZiBBcnJheSkge1xuXHRcdFx0b2JqLmZvckVhY2goKGl0ZW0pID0+IHtcblx0XHRcdFx0bGlzdCA9IGxpc3QuY29uY2F0KF9mbmZpbmRWYWx1ZXNIZWxwZXIoaXRlbSwga2V5LCBbXSkpO1xuXHRcdFx0fSk7XG5cdFx0XHRyZXR1cm4gbGlzdDtcblx0XHR9XG5cdFx0aWYgKG9ialtrZXldKSB7XG5cdFx0XHRsaXN0LnB1c2gob2JqW2tleV0gYXMgc3RyaW5nKTtcblx0XHR9XG5cblx0XHRpZiAodHlwZW9mIG9iaiA9PSBcIm9iamVjdFwiICYmIG9iaiAhPT0gbnVsbCkge1xuXHRcdFx0Y29uc3QgY2hpbGRyZW4gPSBPYmplY3Qua2V5cyhvYmopO1xuXHRcdFx0aWYgKGNoaWxkcmVuLmxlbmd0aCA+IDApIHtcblx0XHRcdFx0Zm9yIChsZXQgaSA9IDA7IGkgPCBjaGlsZHJlbi5sZW5ndGg7IGkrKykge1xuXHRcdFx0XHRcdGxpc3QgPSBsaXN0LmNvbmNhdChfZm5maW5kVmFsdWVzSGVscGVyKG9ialtjaGlsZHJlbltpXV0gYXMgUmVjb3JkPHN0cmluZywgdW5rbm93bj4sIGtleSwgW10pKTtcblx0XHRcdFx0fVxuXHRcdFx0fVxuXHRcdH1cblx0XHRyZXR1cm4gbGlzdDtcblx0fTtcblx0Y29uc3QgX2ZuZmluZFZhbHVlcyA9IGZ1bmN0aW9uIChvYmo6IHVuZGVmaW5lZCB8IG51bGwgfCBSZWNvcmQ8c3RyaW5nLCBzdHJpbmc+W10gfCBSZWNvcmQ8c3RyaW5nLCB1bmtub3duPiwga2V5OiBzdHJpbmcpIHtcblx0XHRyZXR1cm4gX2ZuZmluZFZhbHVlc0hlbHBlcihvYmosIGtleSwgW10pO1xuXHR9O1xuXHRjb25zdCBfZm5EZWxldGVEdXBsaWNhdGVTZW1hbnRpY09iamVjdHMgPSBmdW5jdGlvbiAoYVNlbWFudGljT2JqZWN0UGF0aDogc3RyaW5nW10pIHtcblx0XHRyZXR1cm4gYVNlbWFudGljT2JqZWN0UGF0aC5maWx0ZXIoZnVuY3Rpb24gKHZhbHVlOiBzdHJpbmcsIGluZGV4OiBudW1iZXIpIHtcblx0XHRcdHJldHVybiBhU2VtYW50aWNPYmplY3RQYXRoLmluZGV4T2YodmFsdWUpID09PSBpbmRleDtcblx0XHR9KTtcblx0fTtcblx0Y29uc3Qgb1ZpZXcgPSBvQ29udHJvbGxlci5nZXRWaWV3KCk7XG5cdGNvbnN0IG9JbnRlcm5hbE1vZGVsQ29udGV4dCA9IG9WaWV3LmdldEJpbmRpbmdDb250ZXh0KFwiaW50ZXJuYWxcIikgYXMgSW50ZXJuYWxNb2RlbENvbnRleHQ7XG5cblx0aWYgKG9JbnRlcm5hbE1vZGVsQ29udGV4dCkge1xuXHRcdGNvbnN0IGFTZW1hbnRpY09iamVjdHNQcm9taXNlczogUHJvbWlzZTxTZW1hbnRpY09iamVjdEZyb21QYXRoPltdID0gW107XG5cdFx0Y29uc3Qgb0NvbXBvbmVudCA9IG9Db250cm9sbGVyLmdldE93bmVyQ29tcG9uZW50KCk7XG5cdFx0Y29uc3Qgb0FwcENvbXBvbmVudCA9IENvbXBvbmVudC5nZXRPd25lckNvbXBvbmVudEZvcihvQ29tcG9uZW50KSBhcyBBcHBDb21wb25lbnQ7XG5cdFx0Y29uc3Qgb01ldGFNb2RlbCA9IG9BcHBDb21wb25lbnQuZ2V0TWV0YU1vZGVsKCk7XG5cdFx0bGV0IG9QYWdlTW9kZWwgPSAob0NvbXBvbmVudC5nZXRNb2RlbChzUGFnZU1vZGVsKSBhcyBKU09OTW9kZWwpLmdldERhdGEoKTtcblx0XHRpZiAoSlNPTi5zdHJpbmdpZnkob1BhZ2VNb2RlbCkgPT09IFwie31cIikge1xuXHRcdFx0b1BhZ2VNb2RlbCA9IChvQ29tcG9uZW50LmdldE1vZGVsKHNQYWdlTW9kZWwpIGFzIHVua25vd24gYXMgSW50ZXJuYWxKU09OTW9kZWwpLl9nZXRPYmplY3QoXCIvXCIsIHVuZGVmaW5lZCk7XG5cdFx0fVxuXHRcdGxldCBhU2VtYW50aWNPYmplY3RzRm91bmQgPSBfZm5maW5kVmFsdWVzKG9QYWdlTW9kZWwsIFwic2VtYW50aWNPYmplY3RQYXRoXCIpO1xuXHRcdGFTZW1hbnRpY09iamVjdHNGb3VuZCA9IF9mbkRlbGV0ZUR1cGxpY2F0ZVNlbWFudGljT2JqZWN0cyhhU2VtYW50aWNPYmplY3RzRm91bmQpO1xuXHRcdGNvbnN0IG9TaGVsbFNlcnZpY2VIZWxwZXIgPSBvQXBwQ29tcG9uZW50LmdldFNoZWxsU2VydmljZXMoKTtcblx0XHRsZXQgc0N1cnJlbnRIYXNoID0gb1NoZWxsU2VydmljZUhlbHBlci5nZXRIYXNoKCk7XG5cdFx0Y29uc3QgYVNlbWFudGljT2JqZWN0c0ZvckdldExpbmtzID0gW107XG5cdFx0Y29uc3QgYVNlbWFudGljT2JqZWN0czogU2VtYW50aWNPYmplY3RbXSA9IFtdO1xuXHRcdGxldCBfb1NlbWFudGljT2JqZWN0O1xuXG5cdFx0aWYgKHNDdXJyZW50SGFzaCAmJiBzQ3VycmVudEhhc2guaW5kZXhPZihcIj9cIikgIT09IC0xKSB7XG5cdFx0XHQvLyBzQ3VycmVudEhhc2ggY2FuIGNvbnRhaW4gcXVlcnkgc3RyaW5nLCBjdXQgaXQgb2ZmIVxuXHRcdFx0c0N1cnJlbnRIYXNoID0gc0N1cnJlbnRIYXNoLnNwbGl0KFwiP1wiKVswXTtcblx0XHR9XG5cblx0XHRmblByZXBhcmVTZW1hbnRpY09iamVjdHNQcm9taXNlcyhvQXBwQ29tcG9uZW50LCBvVmlldywgb01ldGFNb2RlbCwgYVNlbWFudGljT2JqZWN0c0ZvdW5kLCBhU2VtYW50aWNPYmplY3RzUHJvbWlzZXMpO1xuXG5cdFx0aWYgKGFTZW1hbnRpY09iamVjdHNQcm9taXNlcy5sZW5ndGggPT09IDApIHtcblx0XHRcdHJldHVybiBQcm9taXNlLnJlc29sdmUoKTtcblx0XHR9IGVsc2Uge1xuXHRcdFx0UHJvbWlzZS5hbGwoYVNlbWFudGljT2JqZWN0c1Byb21pc2VzKVxuXHRcdFx0XHQudGhlbihhc3luYyBmdW5jdGlvbiAoYVZhbHVlcykge1xuXHRcdFx0XHRcdGNvbnN0IGFHZXRMaW5rc1Byb21pc2VzID0gW107XG5cdFx0XHRcdFx0bGV0IHNTZW1PYmpFeHByZXNzaW9uO1xuXHRcdFx0XHRcdHR5cGUgU2VtYW50aWNPYmplY3RSZXNvbHZlZCA9IHtcblx0XHRcdFx0XHRcdHNlbWFudGljT2JqZWN0UGF0aDogc3RyaW5nO1xuXHRcdFx0XHRcdFx0c2VtYW50aWNPYmplY3RGb3JHZXRMaW5rczogeyBzZW1hbnRpY09iamVjdDogc3RyaW5nIH1bXTtcblx0XHRcdFx0XHRcdHNlbWFudGljT2JqZWN0OiB7XG5cdFx0XHRcdFx0XHRcdHNlbWFudGljT2JqZWN0OiBzdHJpbmc7XG5cdFx0XHRcdFx0XHR9O1xuXHRcdFx0XHRcdFx0dW5hdmFpbGFibGVBY3Rpb25zOiBzdHJpbmdbXTtcblx0XHRcdFx0XHR9O1xuXHRcdFx0XHRcdGNvbnN0IGFTZW1hbnRpY09iamVjdHNSZXNvbHZlZDogU2VtYW50aWNPYmplY3RSZXNvbHZlZFtdID0gYVZhbHVlcy5maWx0ZXIoZnVuY3Rpb24gKGVsZW1lbnQpIHtcblx0XHRcdFx0XHRcdGlmIChcblx0XHRcdFx0XHRcdFx0ZWxlbWVudC5zZW1hbnRpY09iamVjdCAhPT0gdW5kZWZpbmVkICYmXG5cdFx0XHRcdFx0XHRcdGVsZW1lbnQuc2VtYW50aWNPYmplY3Quc2VtYW50aWNPYmplY3QgJiZcblx0XHRcdFx0XHRcdFx0dHlwZW9mIGVsZW1lbnQuc2VtYW50aWNPYmplY3Quc2VtYW50aWNPYmplY3QgPT09IFwib2JqZWN0XCJcblx0XHRcdFx0XHRcdCkge1xuXHRcdFx0XHRcdFx0XHRzU2VtT2JqRXhwcmVzc2lvbiA9IGNvbXBpbGVFeHByZXNzaW9uKHBhdGhJbk1vZGVsKGVsZW1lbnQuc2VtYW50aWNPYmplY3Quc2VtYW50aWNPYmplY3QuJFBhdGgpKSE7XG5cdFx0XHRcdFx0XHRcdChlbGVtZW50IGFzIHVua25vd24gYXMgU2VtYW50aWNPYmplY3RSZXNvbHZlZCkuc2VtYW50aWNPYmplY3Quc2VtYW50aWNPYmplY3QgPSBzU2VtT2JqRXhwcmVzc2lvbjtcblx0XHRcdFx0XHRcdFx0ZWxlbWVudC5zZW1hbnRpY09iamVjdEZvckdldExpbmtzWzBdLnNlbWFudGljT2JqZWN0ID0gc1NlbU9iakV4cHJlc3Npb247XG5cdFx0XHRcdFx0XHRcdHJldHVybiB0cnVlO1xuXHRcdFx0XHRcdFx0fSBlbHNlIGlmIChlbGVtZW50KSB7XG5cdFx0XHRcdFx0XHRcdHJldHVybiBlbGVtZW50LnNlbWFudGljT2JqZWN0ICE9PSB1bmRlZmluZWQ7XG5cdFx0XHRcdFx0XHR9IGVsc2Uge1xuXHRcdFx0XHRcdFx0XHRyZXR1cm4gZmFsc2U7XG5cdFx0XHRcdFx0XHR9XG5cdFx0XHRcdFx0fSkgYXMgdW5rbm93biBhcyBTZW1hbnRpY09iamVjdFJlc29sdmVkW107XG5cdFx0XHRcdFx0Zm9yIChsZXQgaiA9IDA7IGogPCBhU2VtYW50aWNPYmplY3RzUmVzb2x2ZWQubGVuZ3RoOyBqKyspIHtcblx0XHRcdFx0XHRcdF9vU2VtYW50aWNPYmplY3QgPSBhU2VtYW50aWNPYmplY3RzUmVzb2x2ZWRbal07XG5cdFx0XHRcdFx0XHRpZiAoXG5cdFx0XHRcdFx0XHRcdF9vU2VtYW50aWNPYmplY3QgJiZcblx0XHRcdFx0XHRcdFx0X29TZW1hbnRpY09iamVjdC5zZW1hbnRpY09iamVjdCAmJlxuXHRcdFx0XHRcdFx0XHQhKF9vU2VtYW50aWNPYmplY3Quc2VtYW50aWNPYmplY3Quc2VtYW50aWNPYmplY3QuaW5kZXhPZihcIntcIikgPT09IDApXG5cdFx0XHRcdFx0XHQpIHtcblx0XHRcdFx0XHRcdFx0YVNlbWFudGljT2JqZWN0c0ZvckdldExpbmtzLnB1c2goX29TZW1hbnRpY09iamVjdC5zZW1hbnRpY09iamVjdEZvckdldExpbmtzKTtcblx0XHRcdFx0XHRcdFx0YVNlbWFudGljT2JqZWN0cy5wdXNoKHtcblx0XHRcdFx0XHRcdFx0XHRzZW1hbnRpY09iamVjdDogX29TZW1hbnRpY09iamVjdC5zZW1hbnRpY09iamVjdC5zZW1hbnRpY09iamVjdCxcblx0XHRcdFx0XHRcdFx0XHR1bmF2YWlsYWJsZUFjdGlvbnM6IF9vU2VtYW50aWNPYmplY3QudW5hdmFpbGFibGVBY3Rpb25zLFxuXHRcdFx0XHRcdFx0XHRcdHBhdGg6IGFTZW1hbnRpY09iamVjdHNSZXNvbHZlZFtqXS5zZW1hbnRpY09iamVjdFBhdGhcblx0XHRcdFx0XHRcdFx0fSk7XG5cdFx0XHRcdFx0XHRcdGFHZXRMaW5rc1Byb21pc2VzLnB1c2gob1NoZWxsU2VydmljZUhlbHBlci5nZXRMaW5rc1dpdGhDYWNoZShbX29TZW1hbnRpY09iamVjdC5zZW1hbnRpY09iamVjdEZvckdldExpbmtzXSkpO1xuXHRcdFx0XHRcdFx0fVxuXHRcdFx0XHRcdH1cblx0XHRcdFx0XHRyZXR1cm4gQ29tbW9uVXRpbHMudXBkYXRlU2VtYW50aWNUYXJnZXRzKGFHZXRMaW5rc1Byb21pc2VzLCBhU2VtYW50aWNPYmplY3RzLCBvSW50ZXJuYWxNb2RlbENvbnRleHQsIHNDdXJyZW50SGFzaCk7XG5cdFx0XHRcdH0pXG5cdFx0XHRcdC5jYXRjaChmdW5jdGlvbiAob0Vycm9yOiB1bmtub3duKSB7XG5cdFx0XHRcdFx0TG9nLmVycm9yKFwiZm5HZXRTZW1hbnRpY1RhcmdldHNGcm9tVGFibGU6IENhbm5vdCBnZXQgU2VtYW50aWMgT2JqZWN0c1wiLCBvRXJyb3IgYXMgc3RyaW5nKTtcblx0XHRcdFx0fSk7XG5cdFx0fVxuXHR9IGVsc2Uge1xuXHRcdHJldHVybiBQcm9taXNlLnJlc29sdmUoKTtcblx0fVxufVxuXG5mdW5jdGlvbiBnZXRGaWx0ZXJBbGxvd2VkRXhwcmVzc2lvbihvRmlsdGVyUmVzdHJpY3Rpb25zQW5ub3RhdGlvbj86IE1ldGFNb2RlbFR5cGU8RmlsdGVyUmVzdHJpY3Rpb25zVHlwZT4pIHtcblx0Y29uc3QgbUFsbG93ZWRFeHByZXNzaW9uczogX0ZpbHRlckFsbG93ZWRFeHByZXNzaW9ucyA9IHt9O1xuXHRpZiAob0ZpbHRlclJlc3RyaWN0aW9uc0Fubm90YXRpb24gJiYgb0ZpbHRlclJlc3RyaWN0aW9uc0Fubm90YXRpb24uRmlsdGVyRXhwcmVzc2lvblJlc3RyaWN0aW9ucyAhPT0gdW5kZWZpbmVkKSB7XG5cdFx0b0ZpbHRlclJlc3RyaWN0aW9uc0Fubm90YXRpb24uRmlsdGVyRXhwcmVzc2lvblJlc3RyaWN0aW9ucy5mb3JFYWNoKGZ1bmN0aW9uIChvUHJvcGVydHkpIHtcblx0XHRcdGlmIChvUHJvcGVydHkuUHJvcGVydHkgJiYgb1Byb3BlcnR5LkFsbG93ZWRFeHByZXNzaW9ucyAhPT0gdW5kZWZpbmVkKSB7XG5cdFx0XHRcdC8vU2luZ2xlVmFsdWUgfCBNdWx0aVZhbHVlIHwgU2luZ2xlUmFuZ2UgfCBNdWx0aVJhbmdlIHwgU2VhcmNoRXhwcmVzc2lvbiB8IE11bHRpUmFuZ2VPclNlYXJjaEV4cHJlc3Npb25cblx0XHRcdFx0aWYgKG1BbGxvd2VkRXhwcmVzc2lvbnNbb1Byb3BlcnR5LlByb3BlcnR5LiRQcm9wZXJ0eVBhdGhdICE9PSB1bmRlZmluZWQpIHtcblx0XHRcdFx0XHRtQWxsb3dlZEV4cHJlc3Npb25zW29Qcm9wZXJ0eS5Qcm9wZXJ0eS4kUHJvcGVydHlQYXRoXS5wdXNoKG9Qcm9wZXJ0eS5BbGxvd2VkRXhwcmVzc2lvbnMgYXMgc3RyaW5nKTtcblx0XHRcdFx0fSBlbHNlIHtcblx0XHRcdFx0XHRtQWxsb3dlZEV4cHJlc3Npb25zW29Qcm9wZXJ0eS5Qcm9wZXJ0eS4kUHJvcGVydHlQYXRoXSA9IFtvUHJvcGVydHkuQWxsb3dlZEV4cHJlc3Npb25zIGFzIHN0cmluZ107XG5cdFx0XHRcdH1cblx0XHRcdH1cblx0XHR9KTtcblx0fVxuXHRyZXR1cm4gbUFsbG93ZWRFeHByZXNzaW9ucztcbn1cbmZ1bmN0aW9uIGdldEZpbHRlclJlc3RyaWN0aW9ucyhcblx0b0ZpbHRlclJlc3RyaWN0aW9uc0Fubm90YXRpb24/OiBNZXRhTW9kZWxUeXBlPEZpbHRlclJlc3RyaWN0aW9uc1R5cGU+LFxuXHRzUmVzdHJpY3Rpb24/OiBcIlJlcXVpcmVkUHJvcGVydGllc1wiIHwgXCJOb25GaWx0ZXJhYmxlUHJvcGVydGllc1wiXG4pIHtcblx0bGV0IGFQcm9wczogc3RyaW5nW10gPSBbXTtcblx0aWYgKG9GaWx0ZXJSZXN0cmljdGlvbnNBbm5vdGF0aW9uICYmIG9GaWx0ZXJSZXN0cmljdGlvbnNBbm5vdGF0aW9uW3NSZXN0cmljdGlvbiBhcyBrZXlvZiBNZXRhTW9kZWxUeXBlPEZpbHRlclJlc3RyaWN0aW9uc1R5cGU+XSkge1xuXHRcdGFQcm9wcyA9IChcblx0XHRcdG9GaWx0ZXJSZXN0cmljdGlvbnNBbm5vdGF0aW9uW3NSZXN0cmljdGlvbiBhcyBrZXlvZiBNZXRhTW9kZWxUeXBlPEZpbHRlclJlc3RyaWN0aW9uc1R5cGU+XSBhcyBFeHBhbmRQYXRoVHlwZTxFZG0uUHJvcGVydHlQYXRoPltdXG5cdFx0KS5tYXAoZnVuY3Rpb24gKG9Qcm9wZXJ0eTogRXhwYW5kUGF0aFR5cGU8RWRtLlByb3BlcnR5UGF0aD4pIHtcblx0XHRcdHJldHVybiBvUHJvcGVydHkuJFByb3BlcnR5UGF0aDtcblx0XHR9KTtcblx0fVxuXHRyZXR1cm4gYVByb3BzO1xufVxuXG5mdW5jdGlvbiBfZmV0Y2hQcm9wZXJ0aWVzRm9yTmF2UGF0aChwYXRoczogc3RyaW5nW10sIG5hdlBhdGg6IHN0cmluZywgcHJvcHM6IHN0cmluZ1tdKSB7XG5cdGNvbnN0IG5hdlBhdGhQcmVmaXggPSBuYXZQYXRoICsgXCIvXCI7XG5cdHJldHVybiBwYXRocy5yZWR1Y2UoKG91dFBhdGhzOiBzdHJpbmdbXSwgcGF0aFRvQ2hlY2s6IHN0cmluZykgPT4ge1xuXHRcdGlmIChwYXRoVG9DaGVjay5zdGFydHNXaXRoKG5hdlBhdGhQcmVmaXgpKSB7XG5cdFx0XHRjb25zdCBvdXRQYXRoID0gcGF0aFRvQ2hlY2sucmVwbGFjZShuYXZQYXRoUHJlZml4LCBcIlwiKTtcblx0XHRcdGlmIChvdXRQYXRocy5pbmRleE9mKG91dFBhdGgpID09PSAtMSkge1xuXHRcdFx0XHRvdXRQYXRocy5wdXNoKG91dFBhdGgpO1xuXHRcdFx0fVxuXHRcdH1cblx0XHRyZXR1cm4gb3V0UGF0aHM7XG5cdH0sIHByb3BzKTtcbn1cbnR5cGUgX0ZpbHRlckFsbG93ZWRFeHByZXNzaW9ucyA9IFJlY29yZDxzdHJpbmcsIHN0cmluZ1tdPjtcbnR5cGUgX0ZpbHRlclJlc3RyaWN0aW9ucyA9IHtcblx0UmVxdWlyZWRQcm9wZXJ0aWVzOiBzdHJpbmdbXTtcblx0Tm9uRmlsdGVyYWJsZVByb3BlcnRpZXM6IHN0cmluZ1tdO1xuXHRGaWx0ZXJBbGxvd2VkRXhwcmVzc2lvbnM6IF9GaWx0ZXJBbGxvd2VkRXhwcmVzc2lvbnM7XG59O1xuZnVuY3Rpb24gZ2V0RmlsdGVyUmVzdHJpY3Rpb25zQnlQYXRoKGVudGl0eVBhdGg6IHN0cmluZywgb0NvbnRleHQ6IE9EYXRhTWV0YU1vZGVsKSB7XG5cdGNvbnN0IG9SZXQ6IF9GaWx0ZXJSZXN0cmljdGlvbnMgPSB7XG5cdFx0UmVxdWlyZWRQcm9wZXJ0aWVzOiBbXSxcblx0XHROb25GaWx0ZXJhYmxlUHJvcGVydGllczogW10sXG5cdFx0RmlsdGVyQWxsb3dlZEV4cHJlc3Npb25zOiB7fVxuXHR9O1xuXHRsZXQgb0ZpbHRlclJlc3RyaWN0aW9ucztcblx0Y29uc3QgbmF2aWdhdGlvblRleHQgPSBcIiROYXZpZ2F0aW9uUHJvcGVydHlCaW5kaW5nXCI7XG5cdGNvbnN0IGZyVGVybSA9IFwiQE9yZy5PRGF0YS5DYXBhYmlsaXRpZXMuVjEuRmlsdGVyUmVzdHJpY3Rpb25zXCI7XG5cdGNvbnN0IGVudGl0eVR5cGVQYXRoUGFydHMgPSBlbnRpdHlQYXRoLnJlcGxhY2VBbGwoXCIlMkZcIiwgXCIvXCIpLnNwbGl0KFwiL1wiKS5maWx0ZXIoTW9kZWxIZWxwZXIuZmlsdGVyT3V0TmF2UHJvcEJpbmRpbmcpO1xuXHRjb25zdCBlbnRpdHlUeXBlUGF0aCA9IGAvJHtlbnRpdHlUeXBlUGF0aFBhcnRzLmpvaW4oXCIvXCIpfS9gO1xuXHRjb25zdCBlbnRpdHlTZXRQYXRoID0gTW9kZWxIZWxwZXIuZ2V0RW50aXR5U2V0UGF0aChlbnRpdHlQYXRoLCBvQ29udGV4dCk7XG5cdGNvbnN0IGVudGl0eVNldFBhdGhQYXJ0cyA9IGVudGl0eVNldFBhdGguc3BsaXQoXCIvXCIpLmZpbHRlcihNb2RlbEhlbHBlci5maWx0ZXJPdXROYXZQcm9wQmluZGluZyk7XG5cdGNvbnN0IGlzQ29udGFpbm1lbnQgPSBvQ29udGV4dC5nZXRPYmplY3QoYCR7ZW50aXR5VHlwZVBhdGh9JENvbnRhaW5zVGFyZ2V0YCk7XG5cdGNvbnN0IGNvbnRhaW5tZW50TmF2UGF0aCA9ICEhaXNDb250YWlubWVudCAmJiBlbnRpdHlUeXBlUGF0aFBhcnRzW2VudGl0eVR5cGVQYXRoUGFydHMubGVuZ3RoIC0gMV07XG5cblx0Ly9MRUFTVCBQUklPUklUWSAtIEZpbHRlciByZXN0cmljdGlvbnMgZGlyZWN0bHkgYXQgRW50aXR5IFNldFxuXHQvL2UuZy4gRlIgaW4gXCJOUy5FbnRpdHlDb250YWluZXIvU2FsZXNPcmRlck1hbmFnZVwiIENvbnRleHRQYXRoOiAvU2FsZXNPcmRlck1hbmFnZVxuXHRpZiAoIWlzQ29udGFpbm1lbnQpIHtcblx0XHRvRmlsdGVyUmVzdHJpY3Rpb25zID0gb0NvbnRleHQuZ2V0T2JqZWN0KGAke2VudGl0eVNldFBhdGh9JHtmclRlcm19YCkgYXMgTWV0YU1vZGVsVHlwZTxGaWx0ZXJSZXN0cmljdGlvbnNUeXBlPiB8IHVuZGVmaW5lZDtcblx0XHRvUmV0LlJlcXVpcmVkUHJvcGVydGllcyA9IGdldEZpbHRlclJlc3RyaWN0aW9ucyhvRmlsdGVyUmVzdHJpY3Rpb25zLCBcIlJlcXVpcmVkUHJvcGVydGllc1wiKSB8fCBbXTtcblx0XHRjb25zdCByZXN1bHRDb250ZXh0Q2hlY2sgPSBvQ29udGV4dC5nZXRPYmplY3QoYCR7ZW50aXR5VHlwZVBhdGh9QGNvbS5zYXAudm9jYWJ1bGFyaWVzLkNvbW1vbi52MS5SZXN1bHRDb250ZXh0YCk7XG5cdFx0aWYgKCFyZXN1bHRDb250ZXh0Q2hlY2spIHtcblx0XHRcdG9SZXQuTm9uRmlsdGVyYWJsZVByb3BlcnRpZXMgPSBnZXRGaWx0ZXJSZXN0cmljdGlvbnMob0ZpbHRlclJlc3RyaWN0aW9ucywgXCJOb25GaWx0ZXJhYmxlUHJvcGVydGllc1wiKSB8fCBbXTtcblx0XHR9XG5cdFx0Ly9TaW5nbGVWYWx1ZSB8IE11bHRpVmFsdWUgfCBTaW5nbGVSYW5nZSB8IE11bHRpUmFuZ2UgfCBTZWFyY2hFeHByZXNzaW9uIHwgTXVsdGlSYW5nZU9yU2VhcmNoRXhwcmVzc2lvblxuXHRcdG9SZXQuRmlsdGVyQWxsb3dlZEV4cHJlc3Npb25zID0gZ2V0RmlsdGVyQWxsb3dlZEV4cHJlc3Npb24ob0ZpbHRlclJlc3RyaWN0aW9ucykgfHwge307XG5cdH1cblxuXHRpZiAoZW50aXR5VHlwZVBhdGhQYXJ0cy5sZW5ndGggPiAxKSB7XG5cdFx0Y29uc3QgbmF2UGF0aCA9IGlzQ29udGFpbm1lbnQgPyAoY29udGFpbm1lbnROYXZQYXRoIGFzIHN0cmluZykgOiBlbnRpdHlTZXRQYXRoUGFydHNbZW50aXR5U2V0UGF0aFBhcnRzLmxlbmd0aCAtIDFdO1xuXHRcdC8vIEluIGNhc2Ugb2YgY29udGFpbm1lbnQgd2UgdGFrZSBlbnRpdHlTZXQgcHJvdmlkZWQgYXMgcGFyZW50LiBBbmQgaW4gY2FzZSBvZiBub3JtYWwgd2Ugd291bGQgcmVtb3ZlIHRoZSBsYXN0IG5hdmlnYXRpb24gZnJvbSBlbnRpdHlTZXRQYXRoLlxuXHRcdGNvbnN0IHBhcmVudEVudGl0eVNldFBhdGggPSBpc0NvbnRhaW5tZW50ID8gZW50aXR5U2V0UGF0aCA6IGAvJHtlbnRpdHlTZXRQYXRoUGFydHMuc2xpY2UoMCwgLTEpLmpvaW4oYC8ke25hdmlnYXRpb25UZXh0fS9gKX1gO1xuXHRcdC8vVEhJUkQgSElHSEVTVCBQUklPUklUWSAtIFJlYWRpbmcgcHJvcGVydHkgcGF0aCByZXN0cmljdGlvbnMgLSBBbm5vdGF0aW9uIGF0IG1haW4gZW50aXR5IGJ1dCBkaXJlY3RseSBvbiBuYXZpZ2F0aW9uIHByb3BlcnR5IHBhdGhcblx0XHQvL2UuZy4gUGFyZW50IEN1c3RvbWVyIHdpdGggUHJvcGVydHlQYXRoPVwiU2V0L0NpdHlOYW1lXCIgQ29udGV4dFBhdGg6IEN1c3RvbWVyL1NldFxuXHRcdGNvbnN0IG9QYXJlbnRSZXQ6IF9GaWx0ZXJSZXN0cmljdGlvbnMgPSB7XG5cdFx0XHRSZXF1aXJlZFByb3BlcnRpZXM6IFtdLFxuXHRcdFx0Tm9uRmlsdGVyYWJsZVByb3BlcnRpZXM6IFtdLFxuXHRcdFx0RmlsdGVyQWxsb3dlZEV4cHJlc3Npb25zOiB7fVxuXHRcdH07XG5cdFx0aWYgKCFuYXZQYXRoLmluY2x1ZGVzKFwiJTJGXCIpKSB7XG5cdFx0XHRjb25zdCBvUGFyZW50RlIgPSBvQ29udGV4dC5nZXRPYmplY3QoYCR7cGFyZW50RW50aXR5U2V0UGF0aH0ke2ZyVGVybX1gKSBhcyBNZXRhTW9kZWxUeXBlPEZpbHRlclJlc3RyaWN0aW9uc1R5cGU+IHwgdW5kZWZpbmVkO1xuXHRcdFx0b1JldC5SZXF1aXJlZFByb3BlcnRpZXMgPSBfZmV0Y2hQcm9wZXJ0aWVzRm9yTmF2UGF0aChcblx0XHRcdFx0Z2V0RmlsdGVyUmVzdHJpY3Rpb25zKG9QYXJlbnRGUiwgXCJSZXF1aXJlZFByb3BlcnRpZXNcIikgfHwgW10sXG5cdFx0XHRcdG5hdlBhdGgsXG5cdFx0XHRcdG9SZXQuUmVxdWlyZWRQcm9wZXJ0aWVzIHx8IFtdXG5cdFx0XHQpO1xuXHRcdFx0b1JldC5Ob25GaWx0ZXJhYmxlUHJvcGVydGllcyA9IF9mZXRjaFByb3BlcnRpZXNGb3JOYXZQYXRoKFxuXHRcdFx0XHRnZXRGaWx0ZXJSZXN0cmljdGlvbnMob1BhcmVudEZSLCBcIk5vbkZpbHRlcmFibGVQcm9wZXJ0aWVzXCIpIHx8IFtdLFxuXHRcdFx0XHRuYXZQYXRoLFxuXHRcdFx0XHRvUmV0Lk5vbkZpbHRlcmFibGVQcm9wZXJ0aWVzIHx8IFtdXG5cdFx0XHQpO1xuXHRcdFx0Ly9TaW5nbGVWYWx1ZSB8IE11bHRpVmFsdWUgfCBTaW5nbGVSYW5nZSB8IE11bHRpUmFuZ2UgfCBTZWFyY2hFeHByZXNzaW9uIHwgTXVsdGlSYW5nZU9yU2VhcmNoRXhwcmVzc2lvblxuXHRcdFx0Y29uc3QgY29tcGxldGVBbGxvd2VkRXhwcyA9IGdldEZpbHRlckFsbG93ZWRFeHByZXNzaW9uKG9QYXJlbnRGUikgfHwge307XG5cdFx0XHRvUGFyZW50UmV0LkZpbHRlckFsbG93ZWRFeHByZXNzaW9ucyA9IE9iamVjdC5rZXlzKGNvbXBsZXRlQWxsb3dlZEV4cHMpLnJlZHVjZShcblx0XHRcdFx0KG91dFByb3A6IFJlY29yZDxzdHJpbmcsIHN0cmluZ1tdPiwgcHJvcFBhdGg6IHN0cmluZykgPT4ge1xuXHRcdFx0XHRcdGlmIChwcm9wUGF0aC5zdGFydHNXaXRoKG5hdlBhdGggKyBcIi9cIikpIHtcblx0XHRcdFx0XHRcdGNvbnN0IG91dFByb3BQYXRoID0gcHJvcFBhdGgucmVwbGFjZShuYXZQYXRoICsgXCIvXCIsIFwiXCIpO1xuXHRcdFx0XHRcdFx0b3V0UHJvcFtvdXRQcm9wUGF0aF0gPSBjb21wbGV0ZUFsbG93ZWRFeHBzW3Byb3BQYXRoXTtcblx0XHRcdFx0XHR9XG5cdFx0XHRcdFx0cmV0dXJuIG91dFByb3A7XG5cdFx0XHRcdH0sXG5cdFx0XHRcdHt9IGFzIFJlY29yZDxzdHJpbmcsIHN0cmluZ1tdPlxuXHRcdFx0KTtcblx0XHR9XG5cblx0XHQvL1NpbmdsZVZhbHVlIHwgTXVsdGlWYWx1ZSB8IFNpbmdsZVJhbmdlIHwgTXVsdGlSYW5nZSB8IFNlYXJjaEV4cHJlc3Npb24gfCBNdWx0aVJhbmdlT3JTZWFyY2hFeHByZXNzaW9uXG5cdFx0b1JldC5GaWx0ZXJBbGxvd2VkRXhwcmVzc2lvbnMgPSBtZXJnZU9iamVjdHMoXG5cdFx0XHR7fSxcblx0XHRcdG9SZXQuRmlsdGVyQWxsb3dlZEV4cHJlc3Npb25zIHx8IHt9LFxuXHRcdFx0b1BhcmVudFJldC5GaWx0ZXJBbGxvd2VkRXhwcmVzc2lvbnMgfHwge31cblx0XHQpIGFzIFJlY29yZDxzdHJpbmcsIHN0cmluZ1tdPjtcblxuXHRcdC8vU0VDT05EIEhJR0hFU1QgcHJpb3JpdHkgLSBOYXZpZ2F0aW9uIHJlc3RyaWN0aW9uc1xuXHRcdC8vZS5nLiBQYXJlbnQgXCIvQ3VzdG9tZXJcIiB3aXRoIE5hdmlnYXRpb25Qcm9wZXJ0eVBhdGg9XCJTZXRcIiBDb250ZXh0UGF0aDogQ3VzdG9tZXIvU2V0XG5cdFx0Y29uc3Qgb05hdlJlc3RyaWN0aW9ucyA9IE1ldGFNb2RlbEZ1bmN0aW9uLmdldE5hdmlnYXRpb25SZXN0cmljdGlvbnMob0NvbnRleHQsIHBhcmVudEVudGl0eVNldFBhdGgsIG5hdlBhdGgucmVwbGFjZUFsbChcIiUyRlwiLCBcIi9cIikpO1xuXHRcdGNvbnN0IG9OYXZGaWx0ZXJSZXN0ID0gb05hdlJlc3RyaWN0aW9ucyAmJiAob05hdlJlc3RyaWN0aW9uc1tcIkZpbHRlclJlc3RyaWN0aW9uc1wiXSBhcyBNZXRhTW9kZWxUeXBlPEZpbHRlclJlc3RyaWN0aW9uc1R5cGU+KTtcblx0XHRjb25zdCBuYXZSZXNSZXFQcm9wcyA9IGdldEZpbHRlclJlc3RyaWN0aW9ucyhvTmF2RmlsdGVyUmVzdCwgXCJSZXF1aXJlZFByb3BlcnRpZXNcIikgfHwgW107XG5cdFx0b1JldC5SZXF1aXJlZFByb3BlcnRpZXMgPSB1bmlxdWVTb3J0KG9SZXQuUmVxdWlyZWRQcm9wZXJ0aWVzLmNvbmNhdChuYXZSZXNSZXFQcm9wcykpO1xuXHRcdGNvbnN0IG5hdk5vbkZpbHRlclByb3BzID0gZ2V0RmlsdGVyUmVzdHJpY3Rpb25zKG9OYXZGaWx0ZXJSZXN0LCBcIk5vbkZpbHRlcmFibGVQcm9wZXJ0aWVzXCIpIHx8IFtdO1xuXHRcdG9SZXQuTm9uRmlsdGVyYWJsZVByb3BlcnRpZXMgPSB1bmlxdWVTb3J0KG9SZXQuTm9uRmlsdGVyYWJsZVByb3BlcnRpZXMuY29uY2F0KG5hdk5vbkZpbHRlclByb3BzKSk7XG5cdFx0Ly9TaW5nbGVWYWx1ZSB8IE11bHRpVmFsdWUgfCBTaW5nbGVSYW5nZSB8IE11bHRpUmFuZ2UgfCBTZWFyY2hFeHByZXNzaW9uIHwgTXVsdGlSYW5nZU9yU2VhcmNoRXhwcmVzc2lvblxuXHRcdG9SZXQuRmlsdGVyQWxsb3dlZEV4cHJlc3Npb25zID0gbWVyZ2VPYmplY3RzKFxuXHRcdFx0e30sXG5cdFx0XHRvUmV0LkZpbHRlckFsbG93ZWRFeHByZXNzaW9ucyB8fCB7fSxcblx0XHRcdGdldEZpbHRlckFsbG93ZWRFeHByZXNzaW9uKG9OYXZGaWx0ZXJSZXN0KSB8fCB7fVxuXHRcdCkgYXMgUmVjb3JkPHN0cmluZywgc3RyaW5nW10+O1xuXG5cdFx0Ly9ISUdIRVNUIHByaW9yaXR5IC0gUmVzdHJpY3Rpb25zIGhhdmluZyB0YXJnZXQgd2l0aCBuYXZpZ2F0aW9uIGFzc29jaWF0aW9uIGVudGl0eVxuXHRcdC8vIGUuZy4gRlIgaW4gXCJDdXN0b21lclBhcmFtZXRlcnMvU2V0XCIgQ29udGV4dFBhdGg6IFwiQ3VzdG9tZXIvU2V0XCJcblx0XHRjb25zdCBuYXZBc3NvY2lhdGlvbkVudGl0eVJlc3QgPSBvQ29udGV4dC5nZXRPYmplY3QoXG5cdFx0XHRgLyR7ZW50aXR5VHlwZVBhdGhQYXJ0cy5qb2luKFwiL1wiKX0ke2ZyVGVybX1gXG5cdFx0KSBhcyBNZXRhTW9kZWxUeXBlPEZpbHRlclJlc3RyaWN0aW9uc1R5cGU+O1xuXHRcdGNvbnN0IG5hdkFzc29jUmVxUHJvcHMgPSBnZXRGaWx0ZXJSZXN0cmljdGlvbnMobmF2QXNzb2NpYXRpb25FbnRpdHlSZXN0LCBcIlJlcXVpcmVkUHJvcGVydGllc1wiKSB8fCBbXTtcblx0XHRvUmV0LlJlcXVpcmVkUHJvcGVydGllcyA9IHVuaXF1ZVNvcnQob1JldC5SZXF1aXJlZFByb3BlcnRpZXMuY29uY2F0KG5hdkFzc29jUmVxUHJvcHMpKTtcblx0XHRjb25zdCBuYXZBc3NvY05vbkZpbHRlclByb3BzID0gZ2V0RmlsdGVyUmVzdHJpY3Rpb25zKG5hdkFzc29jaWF0aW9uRW50aXR5UmVzdCwgXCJOb25GaWx0ZXJhYmxlUHJvcGVydGllc1wiKSB8fCBbXTtcblx0XHRvUmV0Lk5vbkZpbHRlcmFibGVQcm9wZXJ0aWVzID0gdW5pcXVlU29ydChvUmV0Lk5vbkZpbHRlcmFibGVQcm9wZXJ0aWVzLmNvbmNhdChuYXZBc3NvY05vbkZpbHRlclByb3BzKSk7XG5cdFx0Ly9TaW5nbGVWYWx1ZSB8IE11bHRpVmFsdWUgfCBTaW5nbGVSYW5nZSB8IE11bHRpUmFuZ2UgfCBTZWFyY2hFeHByZXNzaW9uIHwgTXVsdGlSYW5nZU9yU2VhcmNoRXhwcmVzc2lvblxuXHRcdG9SZXQuRmlsdGVyQWxsb3dlZEV4cHJlc3Npb25zID0gbWVyZ2VPYmplY3RzKFxuXHRcdFx0e30sXG5cdFx0XHRvUmV0LkZpbHRlckFsbG93ZWRFeHByZXNzaW9ucyxcblx0XHRcdGdldEZpbHRlckFsbG93ZWRFeHByZXNzaW9uKG5hdkFzc29jaWF0aW9uRW50aXR5UmVzdCkgfHwge31cblx0XHQpIGFzIF9GaWx0ZXJBbGxvd2VkRXhwcmVzc2lvbnM7XG5cdH1cblx0cmV0dXJuIG9SZXQ7XG59XG5cbnR5cGUgUHJlcHJvY2Vzc29yU2V0dGluZ3MgPSB7XG5cdGJpbmRpbmdDb250ZXh0czogb2JqZWN0O1xuXHRtb2RlbHM6IG9iamVjdDtcbn07XG50eXBlIEJhc2VUcmVlTW9kaWZpZXIgPSB7XG5cdHRlbXBsYXRlQ29udHJvbEZyYWdtZW50KFxuXHRcdHNGcmFnbWVudE5hbWU6IHN0cmluZyxcblx0XHRtUHJlcHJvY2Vzc29yU2V0dGluZ3M6IFByZXByb2Nlc3NvclNldHRpbmdzLFxuXHRcdG9WaWV3PzogVmlld1xuXHQpOiBQcm9taXNlPFVJNUVsZW1lbnRbXSB8IEVsZW1lbnRbXT47XG5cdHRhcmdldHM6IHN0cmluZztcbn07XG5cbmFzeW5jIGZ1bmN0aW9uIHRlbXBsYXRlQ29udHJvbEZyYWdtZW50KFxuXHRzRnJhZ21lbnROYW1lOiBzdHJpbmcsXG5cdG9QcmVwcm9jZXNzb3JTZXR0aW5nczogUHJlcHJvY2Vzc29yU2V0dGluZ3MsXG5cdG9PcHRpb25zOiB7IHZpZXc/OiBWaWV3OyBpc1hNTD86IGJvb2xlYW47IGlkOiBzdHJpbmc7IGNvbnRyb2xsZXI6IENvbnRyb2xsZXIgfSxcblx0b01vZGlmaWVyPzogQmFzZVRyZWVNb2RpZmllclxuKTogUHJvbWlzZTxFbGVtZW50IHwgVUk1RWxlbWVudCB8IEVsZW1lbnRbXSB8IFVJNUVsZW1lbnRbXT4ge1xuXHRvT3B0aW9ucyA9IG9PcHRpb25zIHx8IHt9O1xuXHRpZiAob01vZGlmaWVyKSB7XG5cdFx0cmV0dXJuIG9Nb2RpZmllci50ZW1wbGF0ZUNvbnRyb2xGcmFnbWVudChzRnJhZ21lbnROYW1lLCBvUHJlcHJvY2Vzc29yU2V0dGluZ3MsIG9PcHRpb25zLnZpZXcpLnRoZW4oZnVuY3Rpb24gKG9GcmFnbWVudCkge1xuXHRcdFx0Ly8gVGhpcyBpcyByZXF1aXJlZCBhcyBGbGV4IHJldHVybnMgYW4gSFRNTENvbGxlY3Rpb24gYXMgdGVtcGxhdGluZyByZXN1bHQgaW4gWE1MIHRpbWUuXG5cdFx0XHRyZXR1cm4gb01vZGlmaWVyLnRhcmdldHMgPT09IFwieG1sVHJlZVwiICYmIG9GcmFnbWVudC5sZW5ndGggPiAwID8gb0ZyYWdtZW50WzBdIDogb0ZyYWdtZW50O1xuXHRcdH0pO1xuXHR9IGVsc2Uge1xuXHRcdGNvbnN0IG9GcmFnbWVudCA9IGF3YWl0IFhNTFByZXByb2Nlc3Nvci5wcm9jZXNzKFxuXHRcdFx0WE1MVGVtcGxhdGVQcm9jZXNzb3IubG9hZFRlbXBsYXRlKHNGcmFnbWVudE5hbWUsIFwiZnJhZ21lbnRcIiksXG5cdFx0XHR7IG5hbWU6IHNGcmFnbWVudE5hbWUgfSxcblx0XHRcdG9QcmVwcm9jZXNzb3JTZXR0aW5nc1xuXHRcdCk7XG5cdFx0Y29uc3Qgb0NvbnRyb2wgPSBvRnJhZ21lbnQuZmlyc3RFbGVtZW50Q2hpbGQ7XG5cdFx0aWYgKCEhb09wdGlvbnMuaXNYTUwgJiYgb0NvbnRyb2wpIHtcblx0XHRcdHJldHVybiBvQ29udHJvbDtcblx0XHR9XG5cdFx0cmV0dXJuIEZyYWdtZW50LmxvYWQoe1xuXHRcdFx0aWQ6IG9PcHRpb25zLmlkLFxuXHRcdFx0ZGVmaW5pdGlvbjogb0ZyYWdtZW50IGFzIHVua25vd24gYXMgc3RyaW5nLFxuXHRcdFx0Y29udHJvbGxlcjogb09wdGlvbnMuY29udHJvbGxlclxuXHRcdH0pO1xuXHR9XG59XG5cbmZ1bmN0aW9uIGdldFNpbmdsZXRvblBhdGgocGF0aDogc3RyaW5nLCBtZXRhTW9kZWw6IE9EYXRhTWV0YU1vZGVsKTogc3RyaW5nIHwgdW5kZWZpbmVkIHtcblx0Y29uc3QgcGFydHMgPSBwYXRoLnNwbGl0KFwiL1wiKS5maWx0ZXIoQm9vbGVhbiksXG5cdFx0cHJvcGVydHlOYW1lID0gcGFydHMucG9wKCkhLFxuXHRcdG5hdmlnYXRpb25QYXRoID0gcGFydHMuam9pbihcIi9cIiksXG5cdFx0ZW50aXR5U2V0ID0gbmF2aWdhdGlvblBhdGggJiYgbWV0YU1vZGVsLmdldE9iamVjdChgLyR7bmF2aWdhdGlvblBhdGh9YCk7XG5cdGlmIChlbnRpdHlTZXQ/LiRraW5kID09PSBcIlNpbmdsZXRvblwiKSB7XG5cdFx0Y29uc3Qgc2luZ2xldG9uTmFtZSA9IHBhcnRzW3BhcnRzLmxlbmd0aCAtIDFdO1xuXHRcdHJldHVybiBgLyR7c2luZ2xldG9uTmFtZX0vJHtwcm9wZXJ0eU5hbWV9YDtcblx0fVxuXHRyZXR1cm4gdW5kZWZpbmVkO1xufVxuXG5hc3luYyBmdW5jdGlvbiByZXF1ZXN0U2luZ2xldG9uUHJvcGVydHkocGF0aDogc3RyaW5nLCBtb2RlbDogT0RhdGFNb2RlbCkge1xuXHRpZiAoIXBhdGggfHwgIW1vZGVsKSB7XG5cdFx0cmV0dXJuIFByb21pc2UucmVzb2x2ZShudWxsKTtcblx0fVxuXHRjb25zdCBtZXRhTW9kZWwgPSBtb2RlbC5nZXRNZXRhTW9kZWwoKTtcblx0Ly8gRmluZCB0aGUgdW5kZXJseWluZyBlbnRpdHkgc2V0IGZyb20gdGhlIHByb3BlcnR5IHBhdGggYW5kIGNoZWNrIHdoZXRoZXIgaXQgaXMgYSBzaW5nbGV0b24uXG5cdGNvbnN0IHJlc29sdmVkUGF0aCA9IGdldFNpbmdsZXRvblBhdGgocGF0aCwgbWV0YU1vZGVsKTtcblx0aWYgKHJlc29sdmVkUGF0aCkge1xuXHRcdGNvbnN0IHByb3BlcnR5QmluZGluZyA9IG1vZGVsLmJpbmRQcm9wZXJ0eShyZXNvbHZlZFBhdGgpO1xuXHRcdHJldHVybiBwcm9wZXJ0eUJpbmRpbmcucmVxdWVzdFZhbHVlKCk7XG5cdH1cblxuXHRyZXR1cm4gUHJvbWlzZS5yZXNvbHZlKG51bGwpO1xufVxuXG4vLyBHZXQgdGhlIHBhdGggZm9yIGFjdGlvbiBwYXJhbWV0ZXJzIHRoYXQgaXMgbmVlZGVkIHRvIHJlYWQgdGhlIGFubm90YXRpb25zXG5mdW5jdGlvbiBnZXRQYXJhbWV0ZXJQYXRoKHNQYXRoOiBzdHJpbmcsIHNQYXJhbWV0ZXI6IHN0cmluZykge1xuXHRsZXQgc0NvbnRleHQ7XG5cdGlmIChzUGF0aC5pbmRleE9mKFwiQCR1aTUub3ZlcmxvYWRcIikgPiAtMSkge1xuXHRcdHNDb250ZXh0ID0gc1BhdGguc3BsaXQoXCJAJHVpNS5vdmVybG9hZFwiKVswXTtcblx0fSBlbHNlIHtcblx0XHQvLyBGb3IgVW5ib3VuZCBBY3Rpb25zIGluIEFjdGlvbiBQYXJhbWV0ZXIgRGlhbG9nc1xuXHRcdGNvbnN0IGFBY3Rpb24gPSBzUGF0aC5zcGxpdChcIi8wXCIpWzBdLnNwbGl0KFwiLlwiKTtcblx0XHRzQ29udGV4dCA9IGAvJHthQWN0aW9uW2FBY3Rpb24ubGVuZ3RoIC0gMV19L2A7XG5cdH1cblx0cmV0dXJuIHNDb250ZXh0ICsgc1BhcmFtZXRlcjtcbn1cblxuLyoqXG4gKiBHZXQgcmVzb2x2ZWQgZXhwcmVzc2lvbiBiaW5kaW5nIHVzZWQgZm9yIHRleHRzIGF0IHJ1bnRpbWUuXG4gKlxuICogQHBhcmFtIGV4cEJpbmRpbmdcbiAqIEBwYXJhbSBjb250cm9sXG4gKiBAZnVuY3Rpb25cbiAqIEBzdGF0aWNcbiAqIEBtZW1iZXJvZiBzYXAuZmUuY29yZS5Db21tb25VdGlsc1xuICogQHJldHVybnMgQSBzdHJpbmcgYWZ0ZXIgcmVzb2x1dGlvbi5cbiAqIEB1aTUtcmVzdHJpY3RlZFxuICovXG5mdW5jdGlvbiBfZm50cmFuc2xhdGVkVGV4dEZyb21FeHBCaW5kaW5nU3RyaW5nKGV4cEJpbmRpbmc6IHN0cmluZywgY29udHJvbDogQ29udHJvbCkge1xuXHQvLyBUaGUgaWRlYSBoZXJlIGlzIHRvIGNyZWF0ZSBkdW1teSBlbGVtZW50IHdpdGggdGhlIGV4cHJlc2lvbiBiaW5kaW5nLlxuXHQvLyBBZGRpbmcgaXQgYXMgZGVwZW5kZW50IHRvIHRoZSB2aWV3L2NvbnRyb2wgd291bGQgcHJvcGFnYXRlIGFsbCB0aGUgbW9kZWxzIHRvIHRoZSBkdW1teSBlbGVtZW50IGFuZCByZXNvbHZlIHRoZSBiaW5kaW5nLlxuXHQvLyBXZSByZW1vdmUgdGhlIGR1bW15IGVsZW1lbnQgYWZ0ZXIgdGhhdCBhbmQgZGVzdHJveSBpdC5cblxuXHRjb25zdCBhbnlSZXNvdXJjZVRleHQgPSBuZXcgQW55RWxlbWVudCh7IGFueVRleHQ6IGV4cEJpbmRpbmcgfSk7XG5cdGNvbnRyb2wuYWRkRGVwZW5kZW50KGFueVJlc291cmNlVGV4dCk7XG5cdGNvbnN0IHJlc3VsdFRleHQgPSBhbnlSZXNvdXJjZVRleHQuZ2V0QW55VGV4dCgpO1xuXHRjb250cm9sLnJlbW92ZURlcGVuZGVudChhbnlSZXNvdXJjZVRleHQpO1xuXHRhbnlSZXNvdXJjZVRleHQuZGVzdHJveSgpO1xuXG5cdHJldHVybiByZXN1bHRUZXh0O1xufVxuLyoqXG4gKiBDaGVjayBpZiB0aGUgY3VycmVudCBkZXZpY2UgaGFzIGEgc21hbGwgc2NyZWVuLlxuICpcbiAqIEByZXR1cm5zIEEgQm9vbGVhbi5cbiAqIEBwcml2YXRlXG4gKi9cbmZ1bmN0aW9uIGlzU21hbGxEZXZpY2UoKSB7XG5cdHJldHVybiAhc3lzdGVtLmRlc2t0b3AgfHwgRGV2aWNlLnJlc2l6ZS53aWR0aCA8PSAzMjA7XG59XG4vKipcbiAqIEdldCBmaWx0ZXIgaW5mb3JtYXRpb24gZm9yIGEgU2VsZWN0aW9uVmFyaWFudCBhbm5vdGF0aW9uLlxuICpcbiAqIEBwYXJhbSBvQ29udHJvbCBUaGUgdGFibGUvY2hhcnQgaW5zdGFuY2VcbiAqIEBwYXJhbSBzZWxlY3Rpb25WYXJpYW50UGF0aCBSZWxhdGl2ZSBTZWxlY3Rpb25WYXJpYW50IGFubm90YXRpb24gcGF0aFxuICogQHBhcmFtIGlzQ2hhcnRcbiAqIEByZXR1cm5zIEluZm9ybWF0aW9uIG9uIGZpbHRlcnNcbiAqICBmaWx0ZXJzOiBhcnJheSBvZiBzYXAudWkubW9kZWwuZmlsdGVyc1xuICogdGV4dDogVGV4dCBwcm9wZXJ0eSBvZiB0aGUgU2VsZWN0aW9uVmFyaWFudFxuICogQHByaXZhdGVcbiAqIEB1aTUtcmVzdHJpY3RlZFxuICovXG5pbnRlcmZhY2UgSVNlbGVjdGlvbk9wdGlvbiB7XG5cdFByb3BlcnR5TmFtZTogeyAkUHJvcGVydHlQYXRoOiBzdHJpbmcgfTtcblx0UmFuZ2VzOiB7XG5cdFx0W2tleTogc3RyaW5nXToge1xuXHRcdFx0T3B0aW9uOiB7ICRFbnVtTWVtYmVyOiBTdHJpbmcgfTtcblx0XHRcdExvdzogdW5rbm93bjtcblx0XHRcdEhpZ2g6IHVua25vd247XG5cdFx0fTtcblx0fTtcbn1cbmZ1bmN0aW9uIGdldEZpbHRlcnNJbmZvRm9yU1Yob0NvbnRyb2w6IENvbnRyb2wgfCBNRENDaGFydCB8IE1EQ1RhYmxlLCBzZWxlY3Rpb25WYXJpYW50UGF0aDogc3RyaW5nLCBpc0NoYXJ0PzogYm9vbGVhbikge1xuXHRjb25zdCBzRW50aXR5VHlwZVBhdGggPSBvQ29udHJvbC5kYXRhKFwiZW50aXR5VHlwZVwiKSxcblx0XHRvTWV0YU1vZGVsID0gQ29tbW9uVXRpbHMuZ2V0QXBwQ29tcG9uZW50KG9Db250cm9sIGFzIENvbnRyb2wpLmdldE1ldGFNb2RlbCgpLFxuXHRcdG1Qcm9wZXJ0eUZpbHRlcnM6IFJlY29yZDxzdHJpbmcsIEZpbHRlcltdPiA9IHt9LFxuXHRcdGFGaWx0ZXJzID0gW10sXG5cdFx0YVBhdGhzOiBzdHJpbmdbXSA9IFtdO1xuXHRsZXQgc1RleHQgPSBcIlwiO1xuXHRsZXQgb1NlbGVjdGlvblZhcmlhbnQgPSBvTWV0YU1vZGVsLmdldE9iamVjdChgJHtzRW50aXR5VHlwZVBhdGh9JHtzZWxlY3Rpb25WYXJpYW50UGF0aH1gKTtcblx0Ly8gZm9yIGNoYXJ0IHRoZSBzdHJ1Y3R1cmUgdmFyaWVzIGhlbmNlIHJlYWQgaXQgZnJvbSBtYWluIG9iamVjdFxuXHRpZiAoaXNDaGFydCkge1xuXHRcdG9TZWxlY3Rpb25WYXJpYW50ID0gb1NlbGVjdGlvblZhcmlhbnQuU2VsZWN0aW9uVmFyaWFudDtcblx0fVxuXHRpZiAob1NlbGVjdGlvblZhcmlhbnQpIHtcblx0XHRzVGV4dCA9IG9TZWxlY3Rpb25WYXJpYW50LlRleHQ7XG5cdFx0KG9TZWxlY3Rpb25WYXJpYW50LlNlbGVjdE9wdGlvbnMgfHwgW10pXG5cdFx0XHQuZmlsdGVyKGZ1bmN0aW9uIChvU2VsZWN0T3B0aW9uOiBJU2VsZWN0aW9uT3B0aW9uKSB7XG5cdFx0XHRcdHJldHVybiBvU2VsZWN0T3B0aW9uICYmIG9TZWxlY3RPcHRpb24uUHJvcGVydHlOYW1lICYmIG9TZWxlY3RPcHRpb24uUHJvcGVydHlOYW1lLiRQcm9wZXJ0eVBhdGg7XG5cdFx0XHR9KVxuXHRcdFx0LmZvckVhY2goZnVuY3Rpb24gKG9TZWxlY3RPcHRpb246IElTZWxlY3Rpb25PcHRpb24pIHtcblx0XHRcdFx0Y29uc3Qgc1BhdGggPSBvU2VsZWN0T3B0aW9uLlByb3BlcnR5TmFtZS4kUHJvcGVydHlQYXRoO1xuXHRcdFx0XHRpZiAoIWFQYXRocy5pbmNsdWRlcyhzUGF0aCkpIHtcblx0XHRcdFx0XHRhUGF0aHMucHVzaChzUGF0aCk7XG5cdFx0XHRcdH1cblx0XHRcdFx0Zm9yIChjb25zdCBqIGluIG9TZWxlY3RPcHRpb24uUmFuZ2VzKSB7XG5cdFx0XHRcdFx0Y29uc3Qgb1JhbmdlID0gb1NlbGVjdE9wdGlvbi5SYW5nZXNbal07XG5cdFx0XHRcdFx0bVByb3BlcnR5RmlsdGVyc1tzUGF0aF0gPSAobVByb3BlcnR5RmlsdGVyc1tzUGF0aF0gfHwgW10pLmNvbmNhdChcblx0XHRcdFx0XHRcdG5ldyBGaWx0ZXIoc1BhdGgsIG9SYW5nZS5PcHRpb24/LiRFbnVtTWVtYmVyPy5zcGxpdChcIi9cIikucG9wKCkgYXMgdW5kZWZpbmVkLCBvUmFuZ2UuTG93LCBvUmFuZ2UuSGlnaClcblx0XHRcdFx0XHQpO1xuXHRcdFx0XHR9XG5cdFx0XHR9KTtcblxuXHRcdGZvciAoY29uc3Qgc1Byb3BlcnR5UGF0aCBpbiBtUHJvcGVydHlGaWx0ZXJzKSB7XG5cdFx0XHRhRmlsdGVycy5wdXNoKFxuXHRcdFx0XHRuZXcgRmlsdGVyKHtcblx0XHRcdFx0XHRmaWx0ZXJzOiBtUHJvcGVydHlGaWx0ZXJzW3NQcm9wZXJ0eVBhdGhdLFxuXHRcdFx0XHRcdGFuZDogZmFsc2Vcblx0XHRcdFx0fSlcblx0XHRcdCk7XG5cdFx0fVxuXHR9XG5cblx0cmV0dXJuIHtcblx0XHRwcm9wZXJ0aWVzOiBhUGF0aHMsXG5cdFx0ZmlsdGVyczogYUZpbHRlcnMsXG5cdFx0dGV4dDogc1RleHRcblx0fTtcbn1cblxuZnVuY3Rpb24gZ2V0Q29udmVydGVyQ29udGV4dEZvclBhdGgoc01ldGFQYXRoOiBzdHJpbmcsIG9NZXRhTW9kZWw6IE9EYXRhTWV0YU1vZGVsLCBzRW50aXR5U2V0OiBzdHJpbmcsIG9EaWFnbm9zdGljczogRGlhZ25vc3RpY3MpIHtcblx0Y29uc3Qgb0NvbnRleHQgPSBvTWV0YU1vZGVsLmNyZWF0ZUJpbmRpbmdDb250ZXh0KHNNZXRhUGF0aCkgYXMgT0RhdGFWNENvbnRleHQ7XG5cdHJldHVybiBDb252ZXJ0ZXJDb250ZXh0Py5jcmVhdGVDb252ZXJ0ZXJDb250ZXh0Rm9yTWFjcm8oc0VudGl0eVNldCwgb0NvbnRleHQgfHwgb01ldGFNb2RlbCwgb0RpYWdub3N0aWNzLCBtZXJnZU9iamVjdHMsIHVuZGVmaW5lZCk7XG59XG5cbi8qKlxuICogVGhpcyBmdW5jdGlvbiByZXR1cm5zIGFuIElEIHdoaWNoIHNob3VsZCBiZSB1c2VkIGluIHRoZSBpbnRlcm5hbCBjaGFydCBmb3IgdGhlIG1lYXN1cmUgb3IgZGltZW5zaW9uLlxuICogRm9yIHN0YW5kYXJkIGNhc2VzLCB0aGlzIGlzIGp1c3QgdGhlIElEIG9mIHRoZSBwcm9wZXJ0eS5cbiAqIElmIGl0IGlzIG5lY2Vzc2FyeSB0byB1c2UgYW5vdGhlciBJRCBpbnRlcm5hbGx5IGluc2lkZSB0aGUgY2hhcnQgKGUuZy4gb24gZHVwbGljYXRlIHByb3BlcnR5IElEcykgdGhpcyBtZXRob2QgY2FuIGJlIG92ZXJ3cml0dGVuLlxuICogSW4gdGhpcyBjYXNlLCA8Y29kZT5nZXRQcm9wZXJ0eUZyb21OYW1lQW5kS2luZDwvY29kZT4gbmVlZHMgdG8gYmUgb3ZlcndyaXR0ZW4gYXMgd2VsbC5cbiAqXG4gKiBAcGFyYW0gbmFtZSBJRCBvZiB0aGUgcHJvcGVydHlcbiAqIEBwYXJhbSBraW5kIFR5cGUgb2YgdGhlIHByb3BlcnR5IChtZWFzdXJlIG9yIGRpbWVuc2lvbilcbiAqIEByZXR1cm5zIEludGVybmFsIElEIGZvciB0aGUgc2FwLmNoYXJ0LkNoYXJ0XG4gKiBAcHJpdmF0ZVxuICogQHVpNS1yZXN0cmljdGVkXG4gKi9cbmZ1bmN0aW9uIGdldEludGVybmFsQ2hhcnROYW1lRnJvbVByb3BlcnR5TmFtZUFuZEtpbmQobmFtZTogc3RyaW5nLCBraW5kOiBzdHJpbmcpIHtcblx0cmV0dXJuIG5hbWUucmVwbGFjZShcIl9mZV9cIiArIGtpbmQgKyBcIl9cIiwgXCJcIik7XG59XG5cbi8qKlxuICogVGhpcyBmdW5jdGlvbiByZXR1cm5zIGFuIGFycmF5IG9mIGNoYXJ0IHByb3BlcnRpZXMgYnkgcmVtdm9pbmcgX2ZlX2dyb3VwYWJsZSBwcmVmaXguXG4gKlxuICogQHBhcmFtIHtBcnJheX0gYUZpbHRlcnMgQ2hhcnQgZmlsdGVyIHByb3BlcnRpZXNcbiAqIEByZXR1cm5zIENoYXJ0IHByb3BlcnRpZXMgd2l0aG91dCBwcmVmaXhlc1xuICogQHByaXZhdGVcbiAqIEB1aTUtcmVzdHJpY3RlZFxuICovXG5pbnRlcmZhY2UgSUZpbHRlclByb3Age1xuXHRzUGF0aDogc3RyaW5nO1xufVxuZnVuY3Rpb24gZ2V0Q2hhcnRQcm9wZXJ0aWVzV2l0aG91dFByZWZpeGVzKGFGaWx0ZXJzOiBJRmlsdGVyUHJvcFtdKSB7XG5cdGFGaWx0ZXJzLmZvckVhY2goKGVsZW1lbnQ6IElGaWx0ZXJQcm9wKSA9PiB7XG5cdFx0aWYgKGVsZW1lbnQuc1BhdGggJiYgZWxlbWVudC5zUGF0aC5pbmNsdWRlcyhcImZlX2dyb3VwYWJsZVwiKSkge1xuXHRcdFx0ZWxlbWVudC5zUGF0aCA9IENvbW1vblV0aWxzLmdldEludGVybmFsQ2hhcnROYW1lRnJvbVByb3BlcnR5TmFtZUFuZEtpbmQoZWxlbWVudC5zUGF0aCwgXCJncm91cGFibGVcIik7XG5cdFx0fVxuXHR9KTtcblx0cmV0dXJuIGFGaWx0ZXJzO1xufVxuXG5jb25zdCBDb21tb25VdGlscyA9IHtcblx0ZmlyZUJ1dHRvblByZXNzOiBmbkZpcmVCdXR0b25QcmVzcyxcblx0Z2V0VGFyZ2V0VmlldzogZ2V0VGFyZ2V0Vmlldyxcblx0Z2V0Q3VycmVudFBhZ2VWaWV3OiBnZXRDdXJyZW50UGFnZVZpZXcsXG5cdGhhc1RyYW5zaWVudENvbnRleHQ6IGZuSGFzVHJhbnNpZW50Q29udGV4dHMsXG5cdHVwZGF0ZVJlbGF0ZWRBcHBzRGV0YWlsczogZm5VcGRhdGVSZWxhdGVkQXBwc0RldGFpbHMsXG5cdGdldEFwcENvbXBvbmVudDogZ2V0QXBwQ29tcG9uZW50LFxuXHRnZXRNYW5kYXRvcnlGaWx0ZXJGaWVsZHM6IGZuR2V0TWFuZGF0b3J5RmlsdGVyRmllbGRzLFxuXHRnZXRDb250ZXh0UGF0aFByb3BlcnRpZXM6IGZuR2V0Q29udGV4dFBhdGhQcm9wZXJ0aWVzLFxuXHRnZXRQYXJhbWV0ZXJJbmZvOiBnZXRQYXJhbWV0ZXJJbmZvLFxuXHR1cGRhdGVEYXRhRmllbGRGb3JJQk5CdXR0b25zVmlzaWJpbGl0eTogZm5VcGRhdGVEYXRhRmllbGRGb3JJQk5CdXR0b25zVmlzaWJpbGl0eSxcblx0Z2V0RW50aXR5U2V0TmFtZTogZ2V0RW50aXR5U2V0TmFtZSxcblx0Z2V0QWN0aW9uUGF0aDogZ2V0QWN0aW9uUGF0aCxcblx0Y29tcHV0ZURpc3BsYXlNb2RlOiBjb21wdXRlRGlzcGxheU1vZGUsXG5cdGlzU3RpY2t5RWRpdE1vZGU6IGlzU3RpY2t5RWRpdE1vZGUsXG5cdGdldE9wZXJhdG9yc0ZvclByb3BlcnR5OiBnZXRPcGVyYXRvcnNGb3JQcm9wZXJ0eSxcblx0Z2V0T3BlcmF0b3JzRm9yRGF0ZVByb3BlcnR5OiBnZXRPcGVyYXRvcnNGb3JEYXRlUHJvcGVydHksXG5cdGdldE9wZXJhdG9yc0Zvckd1aWRQcm9wZXJ0eTogZ2V0T3BlcmF0b3JzRm9yR3VpZFByb3BlcnR5LFxuXHRhZGRTZWxlY3Rpb25WYXJpYW50VG9Db25kaXRpb25zOiBhZGRTZWxlY3Rpb25WYXJpYW50VG9Db25kaXRpb25zLFxuXHRhZGRFeHRlcm5hbFN0YXRlRmlsdGVyc1RvU2VsZWN0aW9uVmFyaWFudDogYWRkRXh0ZXJuYWxTdGF0ZUZpbHRlcnNUb1NlbGVjdGlvblZhcmlhbnQsXG5cdGFkZFBhZ2VDb250ZXh0VG9TZWxlY3Rpb25WYXJpYW50OiBhZGRQYWdlQ29udGV4dFRvU2VsZWN0aW9uVmFyaWFudCxcblx0YWRkRGVmYXVsdERpc3BsYXlDdXJyZW5jeTogYWRkRGVmYXVsdERpc3BsYXlDdXJyZW5jeSxcblx0c2V0VXNlckRlZmF1bHRzOiBzZXRVc2VyRGVmYXVsdHMsXG5cdGdldElCTkFjdGlvbnM6IGZuR2V0SUJOQWN0aW9ucyxcblx0Z2V0SGVhZGVyRmFjZXRJdGVtQ29uZmlnRm9yRXh0ZXJuYWxOYXZpZ2F0aW9uOiBnZXRIZWFkZXJGYWNldEl0ZW1Db25maWdGb3JFeHRlcm5hbE5hdmlnYXRpb24sXG5cdGdldFNlbWFudGljT2JqZWN0TWFwcGluZzogZ2V0U2VtYW50aWNPYmplY3RNYXBwaW5nLFxuXHRzZXRTZW1hbnRpY09iamVjdE1hcHBpbmdzOiBzZXRTZW1hbnRpY09iamVjdE1hcHBpbmdzLFxuXHRnZXRTZW1hbnRpY09iamVjdFByb21pc2U6IGZuR2V0U2VtYW50aWNPYmplY3RQcm9taXNlLFxuXHRnZXRTZW1hbnRpY1RhcmdldHNGcm9tUGFnZU1vZGVsOiBmbkdldFNlbWFudGljVGFyZ2V0c0Zyb21QYWdlTW9kZWwsXG5cdGdldFNlbWFudGljT2JqZWN0c0Zyb21QYXRoOiBmbkdldFNlbWFudGljT2JqZWN0c0Zyb21QYXRoLFxuXHR1cGRhdGVTZW1hbnRpY1RhcmdldHM6IGZuVXBkYXRlU2VtYW50aWNUYXJnZXRzTW9kZWwsXG5cdHdhaXRGb3JDb250ZXh0UmVxdWVzdGVkOiB3YWl0Rm9yQ29udGV4dFJlcXVlc3RlZCxcblx0Z2V0RmlsdGVyUmVzdHJpY3Rpb25zQnlQYXRoOiBnZXRGaWx0ZXJSZXN0cmljdGlvbnNCeVBhdGgsXG5cdGdldFNwZWNpZmljQWxsb3dlZEV4cHJlc3Npb246IGdldFNwZWNpZmljQWxsb3dlZEV4cHJlc3Npb24sXG5cdGdldEFkZGl0aW9uYWxQYXJhbXNGb3JDcmVhdGU6IGdldEFkZGl0aW9uYWxQYXJhbXNGb3JDcmVhdGUsXG5cdHJlcXVlc3RTaW5nbGV0b25Qcm9wZXJ0eTogcmVxdWVzdFNpbmdsZXRvblByb3BlcnR5LFxuXHR0ZW1wbGF0ZUNvbnRyb2xGcmFnbWVudDogdGVtcGxhdGVDb250cm9sRnJhZ21lbnQsXG5cdEZpbHRlclJlc3RyaWN0aW9uczoge1xuXHRcdFJFUVVJUkVEX1BST1BFUlRJRVM6IFwiUmVxdWlyZWRQcm9wZXJ0aWVzXCIsXG5cdFx0Tk9OX0ZJTFRFUkFCTEVfUFJPUEVSVElFUzogXCJOb25GaWx0ZXJhYmxlUHJvcGVydGllc1wiLFxuXHRcdEFMTE9XRURfRVhQUkVTU0lPTlM6IFwiRmlsdGVyQWxsb3dlZEV4cHJlc3Npb25zXCJcblx0fSxcblx0QWxsb3dlZEV4cHJlc3Npb25zUHJpbzogW1wiU2luZ2xlVmFsdWVcIiwgXCJNdWx0aVZhbHVlXCIsIFwiU2luZ2xlUmFuZ2VcIiwgXCJNdWx0aVJhbmdlXCIsIFwiU2VhcmNoRXhwcmVzc2lvblwiLCBcIk11bHRpUmFuZ2VPclNlYXJjaEV4cHJlc3Npb25cIl0sXG5cdG5vcm1hbGl6ZVNlYXJjaFRlcm06IG5vcm1hbGl6ZVNlYXJjaFRlcm0sXG5cdHNldENvbnRleHRzQmFzZWRPbk9wZXJhdGlvbkF2YWlsYWJsZTogc2V0Q29udGV4dHNCYXNlZE9uT3BlcmF0aW9uQXZhaWxhYmxlLFxuXHRzZXREeW5hbWljQWN0aW9uQ29udGV4dHM6IHNldER5bmFtaWNBY3Rpb25Db250ZXh0cyxcblx0cmVxdWVzdFByb3BlcnR5OiByZXF1ZXN0UHJvcGVydHksXG5cdGdldFBhcmFtZXRlclBhdGg6IGdldFBhcmFtZXRlclBhdGgsXG5cdGdldFJlbGF0ZWRBcHBzTWVudUl0ZW1zOiBfZ2V0UmVsYXRlZEFwcHNNZW51SXRlbXMsXG5cdGdldFRyYW5zbGF0ZWRUZXh0RnJvbUV4cEJpbmRpbmdTdHJpbmc6IF9mbnRyYW5zbGF0ZWRUZXh0RnJvbUV4cEJpbmRpbmdTdHJpbmcsXG5cdGFkZFNlbWFudGljRGF0ZXNUb0NvbmRpdGlvbnM6IGFkZFNlbWFudGljRGF0ZXNUb0NvbmRpdGlvbnMsXG5cdGFkZFNlbGVjdE9wdGlvblRvQ29uZGl0aW9uczogYWRkU2VsZWN0T3B0aW9uVG9Db25kaXRpb25zLFxuXHRjcmVhdGVTZW1hbnRpY0RhdGVzRnJvbUNvbmRpdGlvbnM6IGNyZWF0ZVNlbWFudGljRGF0ZXNGcm9tQ29uZGl0aW9ucyxcblx0dXBkYXRlUmVsYXRlQXBwc01vZGVsOiB1cGRhdGVSZWxhdGVBcHBzTW9kZWwsXG5cdGdldFNlbWFudGljT2JqZWN0QW5ub3RhdGlvbnM6IF9nZXRTZW1hbnRpY09iamVjdEFubm90YXRpb25zLFxuXHRnZXRGaWx0ZXJzSW5mb0ZvclNWOiBnZXRGaWx0ZXJzSW5mb0ZvclNWLFxuXHRnZXRJbnRlcm5hbENoYXJ0TmFtZUZyb21Qcm9wZXJ0eU5hbWVBbmRLaW5kOiBnZXRJbnRlcm5hbENoYXJ0TmFtZUZyb21Qcm9wZXJ0eU5hbWVBbmRLaW5kLFxuXHRnZXRDaGFydFByb3BlcnRpZXNXaXRob3V0UHJlZml4ZXM6IGdldENoYXJ0UHJvcGVydGllc1dpdGhvdXRQcmVmaXhlcyxcblx0aXNTbWFsbERldmljZSxcblx0Z2V0Q29udmVydGVyQ29udGV4dEZvclBhdGhcbn07XG5cbmV4cG9ydCBkZWZhdWx0IENvbW1vblV0aWxzO1xuIl0sIm1hcHBpbmdzIjoiO0FBQUE7QUFBQTtBQUFBOzs7Ozs7Ozs7O0VBOEVBLFNBQVNBLG1CQUFtQixDQUFDQyxXQUFtQixFQUFFO0lBQ2pELElBQUksQ0FBQ0EsV0FBVyxFQUFFO01BQ2pCLE9BQU9DLFNBQVM7SUFDakI7SUFFQSxPQUFPRCxXQUFXLENBQ2hCRSxPQUFPLENBQUMsSUFBSSxFQUFFLEdBQUcsQ0FBQyxDQUNsQkEsT0FBTyxDQUFDLEtBQUssRUFBRSxNQUFNLENBQUMsQ0FBQztJQUFBLENBQ3ZCQyxLQUFLLENBQUMsS0FBSyxDQUFDLENBQ1pDLE1BQU0sQ0FBQyxVQUFVQyxXQUErQixFQUFFQyxZQUFvQixFQUFFO01BQ3hFLElBQUlBLFlBQVksS0FBSyxFQUFFLEVBQUU7UUFDeEJELFdBQVcsR0FBSSxHQUFFQSxXQUFXLEdBQUksR0FBRUEsV0FBWSxHQUFFLEdBQUcsRUFBRyxJQUFHQyxZQUFhLEdBQUU7TUFDekU7TUFDQSxPQUFPRCxXQUFXO0lBQ25CLENBQUMsRUFBRUosU0FBUyxDQUFDO0VB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