@sapui5/sap.fe.core 1.111.1 → 1.112.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 (524) 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 -4
  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 +11 -11
  7. package/src/sap/fe/core/AppComponent-dbg.js +27 -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 +58 -3
  11. package/src/sap/fe/core/AppStateHandler-dbg.js +5 -2
  12. package/src/sap/fe/core/AppStateHandler.js +1 -1
  13. package/src/sap/fe/core/AppStateHandler.js.map +1 -1
  14. package/src/sap/fe/core/AppStateHandler.ts +10 -1
  15. package/src/sap/fe/core/BaseController-dbg.js +1 -1
  16. package/src/sap/fe/core/BaseController.ts +2 -1
  17. package/src/sap/fe/core/CommonUtils-dbg.js +152 -365
  18. package/src/sap/fe/core/CommonUtils.js +1 -1
  19. package/src/sap/fe/core/CommonUtils.js.map +1 -1
  20. package/src/sap/fe/core/CommonUtils.ts +201 -478
  21. package/src/sap/fe/core/ExtensionAPI-dbg.js +2 -1
  22. package/src/sap/fe/core/ExtensionAPI.js +1 -1
  23. package/src/sap/fe/core/ExtensionAPI.js.map +1 -1
  24. package/src/sap/fe/core/ExtensionAPI.ts +9 -1
  25. package/src/sap/fe/core/PageController-dbg.js +26 -31
  26. package/src/sap/fe/core/PageController.js +1 -1
  27. package/src/sap/fe/core/PageController.js.map +1 -1
  28. package/src/sap/fe/core/PageController.ts +17 -3
  29. package/src/sap/fe/core/ResourceModel-dbg.js +71 -0
  30. package/src/sap/fe/core/ResourceModel.js +6 -0
  31. package/src/sap/fe/core/ResourceModel.js.map +1 -0
  32. package/src/sap/fe/core/ResourceModel.ts +67 -0
  33. package/src/sap/fe/core/TemplateComponent-dbg.js +1 -1
  34. package/src/sap/fe/core/TemplateComponent.ts +1 -0
  35. package/src/sap/fe/core/TemplateModel-dbg.js +1 -1
  36. package/src/sap/fe/core/TemplateModel.ts +6 -1
  37. package/src/sap/fe/core/buildingBlocks/AttributeModel-dbg.js +5 -7
  38. package/src/sap/fe/core/buildingBlocks/AttributeModel.js +1 -1
  39. package/src/sap/fe/core/buildingBlocks/AttributeModel.js.map +1 -1
  40. package/src/sap/fe/core/buildingBlocks/AttributeModel.ts +6 -5
  41. package/src/sap/fe/core/buildingBlocks/BuildingBlockBase-dbg.js +163 -0
  42. package/src/sap/fe/core/buildingBlocks/BuildingBlockBase.js +6 -0
  43. package/src/sap/fe/core/buildingBlocks/BuildingBlockBase.js.map +1 -0
  44. package/src/sap/fe/core/buildingBlocks/BuildingBlockBase.ts +169 -0
  45. package/src/sap/fe/core/buildingBlocks/BuildingBlockSupport-dbg.js +88 -0
  46. package/src/sap/fe/core/buildingBlocks/BuildingBlockSupport.js +6 -0
  47. package/src/sap/fe/core/buildingBlocks/BuildingBlockSupport.js.map +1 -0
  48. package/src/sap/fe/core/buildingBlocks/BuildingBlockSupport.ts +147 -0
  49. package/src/sap/fe/core/buildingBlocks/BuildingBlockTemplateProcessor-dbg.js +905 -0
  50. package/src/sap/fe/core/buildingBlocks/BuildingBlockTemplateProcessor.js +21 -0
  51. package/src/sap/fe/core/buildingBlocks/BuildingBlockTemplateProcessor.js.map +1 -0
  52. package/src/sap/fe/core/buildingBlocks/{BuildingBlockRuntime.ts → BuildingBlockTemplateProcessor.ts} +290 -362
  53. package/src/sap/fe/core/buildingBlocks/RuntimeBuildingBlock-dbg.js +79 -0
  54. package/src/sap/fe/core/buildingBlocks/RuntimeBuildingBlock.js +15 -0
  55. package/src/sap/fe/core/buildingBlocks/RuntimeBuildingBlock.js.map +1 -0
  56. package/src/sap/fe/core/buildingBlocks/RuntimeBuildingBlock.ts +68 -0
  57. package/src/sap/fe/core/buildingBlocks/RuntimeBuildingBlockFragment-dbg.js +162 -0
  58. package/src/sap/fe/core/buildingBlocks/RuntimeBuildingBlockFragment.js +6 -0
  59. package/src/sap/fe/core/buildingBlocks/RuntimeBuildingBlockFragment.js.map +1 -0
  60. package/src/sap/fe/core/buildingBlocks/RuntimeBuildingBlockFragment.ts +181 -0
  61. package/src/sap/fe/core/buildingBlocks/TraceInfo-dbg.js +4 -2
  62. package/src/sap/fe/core/buildingBlocks/TraceInfo.js +1 -1
  63. package/src/sap/fe/core/buildingBlocks/TraceInfo.js.map +1 -1
  64. package/src/sap/fe/core/buildingBlocks/TraceInfo.ts +5 -3
  65. package/src/sap/fe/core/controllerextensions/EditFlow-dbg.js +890 -220
  66. package/src/sap/fe/core/controllerextensions/EditFlow.js +1 -1
  67. package/src/sap/fe/core/controllerextensions/EditFlow.js.map +1 -1
  68. package/src/sap/fe/core/controllerextensions/EditFlow.ts +974 -239
  69. package/src/sap/fe/core/controllerextensions/InternalIntentBasedNavigation-dbg.js +24 -34
  70. package/src/sap/fe/core/controllerextensions/InternalIntentBasedNavigation.js +1 -1
  71. package/src/sap/fe/core/controllerextensions/InternalIntentBasedNavigation.js.map +1 -1
  72. package/src/sap/fe/core/controllerextensions/InternalIntentBasedNavigation.ts +71 -61
  73. package/src/sap/fe/core/controllerextensions/InternalRouting-dbg.js +14 -17
  74. package/src/sap/fe/core/controllerextensions/InternalRouting.js +1 -1
  75. package/src/sap/fe/core/controllerextensions/InternalRouting.js.map +1 -1
  76. package/src/sap/fe/core/controllerextensions/InternalRouting.ts +23 -17
  77. package/src/sap/fe/core/controllerextensions/KPIManagement-dbg.js +1 -1
  78. package/src/sap/fe/core/controllerextensions/KPIManagement.ts +2 -0
  79. package/src/sap/fe/core/controllerextensions/MassEdit-dbg.js +3 -3
  80. package/src/sap/fe/core/controllerextensions/MassEdit.js +1 -1
  81. package/src/sap/fe/core/controllerextensions/MassEdit.js.map +1 -1
  82. package/src/sap/fe/core/controllerextensions/MassEdit.ts +2 -2
  83. package/src/sap/fe/core/controllerextensions/MessageHandler-dbg.js +2 -1
  84. package/src/sap/fe/core/controllerextensions/MessageHandler.js.map +1 -1
  85. package/src/sap/fe/core/controllerextensions/MessageHandler.ts +2 -0
  86. package/src/sap/fe/core/controllerextensions/PageReady-dbg.js +1 -1
  87. package/src/sap/fe/core/controllerextensions/PageReady.ts +24 -0
  88. package/src/sap/fe/core/controllerextensions/Paginator-dbg.js +2 -1
  89. package/src/sap/fe/core/controllerextensions/Paginator.js.map +1 -1
  90. package/src/sap/fe/core/controllerextensions/Paginator.ts +7 -0
  91. package/src/sap/fe/core/controllerextensions/Placeholder-dbg.js +1 -1
  92. package/src/sap/fe/core/controllerextensions/Placeholder.ts +8 -0
  93. package/src/sap/fe/core/controllerextensions/Share-dbg.js +8 -1
  94. package/src/sap/fe/core/controllerextensions/Share.js.map +1 -1
  95. package/src/sap/fe/core/controllerextensions/Share.ts +11 -0
  96. package/src/sap/fe/core/controllerextensions/SideEffects-dbg.js +14 -13
  97. package/src/sap/fe/core/controllerextensions/SideEffects.js +1 -1
  98. package/src/sap/fe/core/controllerextensions/SideEffects.js.map +1 -1
  99. package/src/sap/fe/core/controllerextensions/SideEffects.ts +27 -27
  100. package/src/sap/fe/core/controllerextensions/ViewState-dbg.js +17 -8
  101. package/src/sap/fe/core/controllerextensions/ViewState.js +1 -1
  102. package/src/sap/fe/core/controllerextensions/ViewState.js.map +1 -1
  103. package/src/sap/fe/core/controllerextensions/ViewState.ts +35 -14
  104. package/src/sap/fe/core/controllerextensions/collaboration/ActivityBase-dbg.js +6 -5
  105. package/src/sap/fe/core/controllerextensions/collaboration/ActivityBase.js +1 -1
  106. package/src/sap/fe/core/controllerextensions/collaboration/ActivityBase.js.map +1 -1
  107. package/src/sap/fe/core/controllerextensions/collaboration/ActivityBase.ts +7 -4
  108. package/src/sap/fe/core/controllerextensions/collaboration/ActivitySync-dbg.js +285 -82
  109. package/src/sap/fe/core/controllerextensions/collaboration/ActivitySync.js +1 -1
  110. package/src/sap/fe/core/controllerextensions/collaboration/ActivitySync.js.map +1 -1
  111. package/src/sap/fe/core/controllerextensions/collaboration/ActivitySync.ts +326 -89
  112. package/src/sap/fe/core/controllerextensions/collaboration/CollaborationCommon-dbg.js +23 -2
  113. package/src/sap/fe/core/controllerextensions/collaboration/CollaborationCommon.js +1 -1
  114. package/src/sap/fe/core/controllerextensions/collaboration/CollaborationCommon.js.map +1 -1
  115. package/src/sap/fe/core/controllerextensions/collaboration/CollaborationCommon.ts +32 -3
  116. package/src/sap/fe/core/controllerextensions/collaboration/Manage-dbg.js +1 -1
  117. package/src/sap/fe/core/controllerextensions/collaboration/Manage.js.map +1 -1
  118. package/src/sap/fe/core/controllerextensions/collaboration/Manage.ts +2 -3
  119. package/src/sap/fe/core/controllerextensions/collaboration/ManageDialog.fragment.xml +17 -3
  120. package/src/sap/fe/core/controllerextensions/dialog/OperationsDialog.block-dbg.js +65 -34
  121. package/src/sap/fe/core/controllerextensions/dialog/OperationsDialog.block.js +1 -1
  122. package/src/sap/fe/core/controllerextensions/dialog/OperationsDialog.block.js.map +1 -1
  123. package/src/sap/fe/core/controllerextensions/dialog/OperationsDialog.block.tsx +33 -18
  124. package/src/sap/fe/core/controllerextensions/editFlow/TransactionHelper-dbg.js +45 -31
  125. package/src/sap/fe/core/controllerextensions/editFlow/TransactionHelper.js +1 -1
  126. package/src/sap/fe/core/controllerextensions/editFlow/TransactionHelper.js.map +1 -1
  127. package/src/sap/fe/core/controllerextensions/editFlow/TransactionHelper.ts +52 -42
  128. package/src/sap/fe/core/controllerextensions/editFlow/draft-dbg.js +44 -49
  129. package/src/sap/fe/core/controllerextensions/editFlow/draft.js +1 -1
  130. package/src/sap/fe/core/controllerextensions/editFlow/draft.js.map +1 -1
  131. package/src/sap/fe/core/controllerextensions/editFlow/draft.ts +43 -63
  132. package/src/sap/fe/core/controllerextensions/editFlow/draftDataLossPopup.js.map +1 -1
  133. package/src/sap/fe/core/controllerextensions/editFlow/operations/_internal-dbg.js +77 -0
  134. package/src/sap/fe/core/controllerextensions/editFlow/operations/_internal.js +6 -0
  135. package/src/sap/fe/core/controllerextensions/editFlow/operations/_internal.js.map +1 -0
  136. package/src/sap/fe/core/controllerextensions/editFlow/operations/_internal.ts +114 -0
  137. package/src/sap/fe/core/controllerextensions/editFlow/operations/facade-dbg.js +1505 -0
  138. package/src/sap/fe/core/controllerextensions/editFlow/operations/facade.js +6 -0
  139. package/src/sap/fe/core/controllerextensions/editFlow/operations/facade.js.map +1 -0
  140. package/src/sap/fe/core/controllerextensions/editFlow/operations/facade.ts +1985 -0
  141. package/src/sap/fe/core/controllerextensions/editFlow/operations-dbg.js +3 -1415
  142. package/src/sap/fe/core/controllerextensions/editFlow/operations.js +1 -1
  143. package/src/sap/fe/core/controllerextensions/editFlow/operations.js.map +1 -1
  144. package/src/sap/fe/core/controllerextensions/editFlow/operations.ts +2 -1921
  145. package/src/sap/fe/core/controllerextensions/editFlow/sticky-dbg.js +10 -11
  146. package/src/sap/fe/core/controllerextensions/editFlow/sticky.js +1 -1
  147. package/src/sap/fe/core/controllerextensions/editFlow/sticky.js.map +1 -1
  148. package/src/sap/fe/core/controllerextensions/editFlow/sticky.ts +9 -13
  149. package/src/sap/fe/core/controllerextensions/messageHandler/messageHandling-dbg.js +43 -41
  150. package/src/sap/fe/core/controllerextensions/messageHandler/messageHandling.js +1 -1
  151. package/src/sap/fe/core/controllerextensions/messageHandler/messageHandling.js.map +1 -1
  152. package/src/sap/fe/core/controllerextensions/messageHandler/messageHandling.ts +44 -47
  153. package/src/sap/fe/core/controllerextensions/pageReady/DataQueryWatcher-dbg.js +12 -1
  154. package/src/sap/fe/core/controllerextensions/pageReady/DataQueryWatcher.js.map +1 -1
  155. package/src/sap/fe/core/controllerextensions/pageReady/DataQueryWatcher.ts +19 -0
  156. package/src/sap/fe/core/controllerextensions/routing/RouterProxy-dbg.js +12 -13
  157. package/src/sap/fe/core/controllerextensions/routing/RouterProxy.js +1 -1
  158. package/src/sap/fe/core/controllerextensions/routing/RouterProxy.js.map +1 -1
  159. package/src/sap/fe/core/controllerextensions/routing/RouterProxy.ts +32 -13
  160. package/src/sap/fe/core/controls/ActionParameterDialog.fragment.xml +4 -1
  161. package/src/sap/fe/core/controls/CommandExecution-dbg.js +16 -5
  162. package/src/sap/fe/core/controls/CommandExecution.js +1 -1
  163. package/src/sap/fe/core/controls/CommandExecution.js.map +1 -1
  164. package/src/sap/fe/core/controls/CommandExecution.ts +15 -3
  165. package/src/sap/fe/core/controls/DataLossOrDraftDiscard/DataLossOrDraftDiscardHandler-dbg.js +3 -2
  166. package/src/sap/fe/core/controls/DataLossOrDraftDiscard/DataLossOrDraftDiscardHandler.js +1 -1
  167. package/src/sap/fe/core/controls/DataLossOrDraftDiscard/DataLossOrDraftDiscardHandler.js.map +1 -1
  168. package/src/sap/fe/core/controls/DataLossOrDraftDiscard/DataLossOrDraftDiscardHandler.ts +4 -1
  169. package/src/sap/fe/core/controls/FilterBar-dbg.js +1 -1
  170. package/src/sap/fe/core/controls/FilterBar.ts +5 -0
  171. package/src/sap/fe/core/controls/FormElementWrapper-dbg.js +1 -1
  172. package/src/sap/fe/core/controls/FormElementWrapper.ts +3 -0
  173. package/src/sap/fe/core/controls/filterbar/FilterContainer-dbg.js +1 -1
  174. package/src/sap/fe/core/controls/filterbar/FilterContainer.ts +7 -0
  175. package/src/sap/fe/core/controls/filterbar/VisualFilter-dbg.js +1 -1
  176. package/src/sap/fe/core/controls/filterbar/VisualFilter.ts +4 -0
  177. package/src/sap/fe/core/controls/filterbar/VisualFilterContainer-dbg.js +1 -1
  178. package/src/sap/fe/core/controls/filterbar/VisualFilterContainer.ts +10 -0
  179. package/src/sap/fe/core/controls/filterbar/utils/VisualFilterUtils-dbg.js +4 -3
  180. package/src/sap/fe/core/controls/filterbar/utils/VisualFilterUtils.js +1 -1
  181. package/src/sap/fe/core/controls/filterbar/utils/VisualFilterUtils.js.map +1 -1
  182. package/src/sap/fe/core/controls/filterbar/utils/VisualFilterUtils.ts +3 -2
  183. package/src/sap/fe/core/controls/massEdit/MassEditDialog.fragment.xml +0 -1
  184. package/src/sap/fe/core/controls/massEdit/MassEditField.fragment.xml +2 -0
  185. package/src/sap/fe/core/controls/massEdit/MassEditHandlers-dbg.js +6 -1
  186. package/src/sap/fe/core/controls/massEdit/MassEditHandlers.js +1 -1
  187. package/src/sap/fe/core/controls/massEdit/MassEditHandlers.js.map +1 -1
  188. package/src/sap/fe/core/controls/massEdit/MassEditHandlers.ts +5 -0
  189. package/src/sap/fe/core/converters/ConverterContext-dbg.js +1 -1
  190. package/src/sap/fe/core/converters/ConverterContext.ts +2 -1
  191. package/src/sap/fe/core/converters/ManifestSettings-dbg.js +1 -8
  192. package/src/sap/fe/core/converters/ManifestSettings.js +1 -1
  193. package/src/sap/fe/core/converters/ManifestSettings.js.map +1 -1
  194. package/src/sap/fe/core/converters/ManifestSettings.ts +15 -6
  195. package/src/sap/fe/core/converters/ManifestWrapper-dbg.js +17 -1
  196. package/src/sap/fe/core/converters/ManifestWrapper.js +1 -1
  197. package/src/sap/fe/core/converters/ManifestWrapper.js.map +1 -1
  198. package/src/sap/fe/core/converters/ManifestWrapper.ts +16 -0
  199. package/src/sap/fe/core/converters/MetaModelConverter-dbg.js +61 -49
  200. package/src/sap/fe/core/converters/MetaModelConverter.js +1 -1
  201. package/src/sap/fe/core/converters/MetaModelConverter.js.map +1 -1
  202. package/src/sap/fe/core/converters/MetaModelConverter.ts +65 -51
  203. package/src/sap/fe/core/converters/TemplateConverter-dbg.js +2 -1
  204. package/src/sap/fe/core/converters/TemplateConverter.js.map +1 -1
  205. package/src/sap/fe/core/converters/TemplateConverter.ts +2 -1
  206. package/src/sap/fe/core/converters/annotations/DataField-dbg.js +65 -16
  207. package/src/sap/fe/core/converters/annotations/DataField.js +1 -1
  208. package/src/sap/fe/core/converters/annotations/DataField.js.map +1 -1
  209. package/src/sap/fe/core/converters/annotations/DataField.ts +62 -18
  210. package/src/sap/fe/core/converters/common/AnnotationConverter-dbg.js +1010 -957
  211. package/src/sap/fe/core/converters/common/AnnotationConverter.js +1 -1
  212. package/src/sap/fe/core/converters/common/AnnotationConverter.js.map +1 -1
  213. package/src/sap/fe/core/converters/controls/Common/Action-dbg.js +8 -8
  214. package/src/sap/fe/core/converters/controls/Common/Action.js +1 -1
  215. package/src/sap/fe/core/converters/controls/Common/Action.js.map +1 -1
  216. package/src/sap/fe/core/converters/controls/Common/Action.ts +28 -26
  217. package/src/sap/fe/core/converters/controls/Common/Chart-dbg.js +95 -33
  218. package/src/sap/fe/core/converters/controls/Common/Chart.js +1 -1
  219. package/src/sap/fe/core/converters/controls/Common/Chart.js.map +1 -1
  220. package/src/sap/fe/core/converters/controls/Common/Chart.ts +133 -49
  221. package/src/sap/fe/core/converters/controls/Common/DataVisualization-dbg.js +99 -62
  222. package/src/sap/fe/core/converters/controls/Common/DataVisualization.js +1 -1
  223. package/src/sap/fe/core/converters/controls/Common/DataVisualization.js.map +1 -1
  224. package/src/sap/fe/core/converters/controls/Common/DataVisualization.ts +140 -75
  225. package/src/sap/fe/core/converters/controls/Common/Form-dbg.js +1 -1
  226. package/src/sap/fe/core/converters/controls/Common/Form.ts +3 -3
  227. package/src/sap/fe/core/converters/controls/Common/KPI-dbg.js +6 -6
  228. package/src/sap/fe/core/converters/controls/Common/KPI.js +1 -1
  229. package/src/sap/fe/core/converters/controls/Common/KPI.js.map +1 -1
  230. package/src/sap/fe/core/converters/controls/Common/KPI.ts +15 -15
  231. package/src/sap/fe/core/converters/controls/Common/Table-dbg.js +97 -69
  232. package/src/sap/fe/core/converters/controls/Common/Table.js +1 -1
  233. package/src/sap/fe/core/converters/controls/Common/Table.js.map +1 -1
  234. package/src/sap/fe/core/converters/controls/Common/Table.ts +161 -137
  235. package/src/sap/fe/core/converters/controls/Common/table/StandardActions-dbg.js +3 -3
  236. package/src/sap/fe/core/converters/controls/Common/table/StandardActions.js +1 -1
  237. package/src/sap/fe/core/converters/controls/Common/table/StandardActions.js.map +1 -1
  238. package/src/sap/fe/core/converters/controls/Common/table/StandardActions.ts +10 -9
  239. package/src/sap/fe/core/converters/controls/ListReport/FilterBar-dbg.js +48 -44
  240. package/src/sap/fe/core/converters/controls/ListReport/FilterBar.js +1 -1
  241. package/src/sap/fe/core/converters/controls/ListReport/FilterBar.js.map +1 -1
  242. package/src/sap/fe/core/converters/controls/ListReport/FilterBar.ts +130 -86
  243. package/src/sap/fe/core/converters/controls/ListReport/VisualFilters-dbg.js +34 -26
  244. package/src/sap/fe/core/converters/controls/ListReport/VisualFilters.js +1 -1
  245. package/src/sap/fe/core/converters/controls/ListReport/VisualFilters.js.map +1 -1
  246. package/src/sap/fe/core/converters/controls/ListReport/VisualFilters.ts +62 -45
  247. package/src/sap/fe/core/converters/controls/ObjectPage/Avatar-dbg.js +1 -1
  248. package/src/sap/fe/core/converters/controls/ObjectPage/Avatar.ts +1 -1
  249. package/src/sap/fe/core/converters/controls/ObjectPage/HeaderFacet-dbg.js +6 -6
  250. package/src/sap/fe/core/converters/controls/ObjectPage/HeaderFacet.js +1 -1
  251. package/src/sap/fe/core/converters/controls/ObjectPage/HeaderFacet.js.map +1 -1
  252. package/src/sap/fe/core/converters/controls/ObjectPage/HeaderFacet.ts +5 -8
  253. package/src/sap/fe/core/converters/controls/ObjectPage/SubSection-dbg.js +34 -13
  254. package/src/sap/fe/core/converters/controls/ObjectPage/SubSection.js +1 -1
  255. package/src/sap/fe/core/converters/controls/ObjectPage/SubSection.js.map +1 -1
  256. package/src/sap/fe/core/converters/controls/ObjectPage/SubSection.ts +54 -20
  257. package/src/sap/fe/core/converters/helpers/Aggregation-dbg.js +3 -1
  258. package/src/sap/fe/core/converters/helpers/Aggregation.js.map +1 -1
  259. package/src/sap/fe/core/converters/helpers/Aggregation.ts +8 -0
  260. package/src/sap/fe/core/converters/helpers/ConfigurableObject-dbg.js +7 -6
  261. package/src/sap/fe/core/converters/helpers/ConfigurableObject.js +1 -1
  262. package/src/sap/fe/core/converters/helpers/ConfigurableObject.js.map +1 -1
  263. package/src/sap/fe/core/converters/helpers/ConfigurableObject.ts +19 -10
  264. package/src/sap/fe/core/converters/helpers/DataFieldHelper-dbg.js +1 -1
  265. package/src/sap/fe/core/converters/helpers/DataFieldHelper.ts +7 -2
  266. package/src/sap/fe/core/converters/helpers/ID-dbg.js +1 -1
  267. package/src/sap/fe/core/converters/helpers/ID.ts +2 -1
  268. package/src/sap/fe/core/converters/helpers/IssueManager-dbg.js +9 -8
  269. package/src/sap/fe/core/converters/helpers/IssueManager.js +1 -1
  270. package/src/sap/fe/core/converters/helpers/IssueManager.js.map +1 -1
  271. package/src/sap/fe/core/converters/helpers/IssueManager.ts +8 -7
  272. package/src/sap/fe/core/converters/objectPage/HeaderAndFooterAction-dbg.js +8 -7
  273. package/src/sap/fe/core/converters/objectPage/HeaderAndFooterAction.js +1 -1
  274. package/src/sap/fe/core/converters/objectPage/HeaderAndFooterAction.js.map +1 -1
  275. package/src/sap/fe/core/converters/objectPage/HeaderAndFooterAction.ts +9 -6
  276. package/src/sap/fe/core/converters/templates/ListReportConverter-dbg.js +25 -33
  277. package/src/sap/fe/core/converters/templates/ListReportConverter.js +1 -1
  278. package/src/sap/fe/core/converters/templates/ListReportConverter.js.map +1 -1
  279. package/src/sap/fe/core/converters/templates/ListReportConverter.ts +35 -35
  280. package/src/sap/fe/core/converters/templates/ObjectPageConverter-dbg.js +11 -4
  281. package/src/sap/fe/core/converters/templates/ObjectPageConverter.js +1 -1
  282. package/src/sap/fe/core/converters/templates/ObjectPageConverter.js.map +1 -1
  283. package/src/sap/fe/core/converters/templates/ObjectPageConverter.ts +7 -1
  284. package/src/sap/fe/core/formatters/FPMFormatter-dbg.js +1 -1
  285. package/src/sap/fe/core/formatters/FPMFormatter.ts +1 -1
  286. package/src/sap/fe/core/formatters/FiscalFormat-dbg.js +2 -2
  287. package/src/sap/fe/core/formatters/FiscalFormat.ts +6 -1
  288. package/src/sap/fe/core/formatters/TableFormatter-dbg.js +2 -2
  289. package/src/sap/fe/core/formatters/TableFormatter.js +1 -1
  290. package/src/sap/fe/core/formatters/TableFormatter.js.map +1 -1
  291. package/src/sap/fe/core/formatters/TableFormatter.ts +1 -1
  292. package/src/sap/fe/core/formatters/ValueFormatter-dbg.js +5 -5
  293. package/src/sap/fe/core/formatters/ValueFormatter.js +1 -1
  294. package/src/sap/fe/core/formatters/ValueFormatter.js.map +1 -1
  295. package/src/sap/fe/core/formatters/ValueFormatter.ts +6 -4
  296. package/src/sap/fe/core/fpm/Component-dbg.js +1 -1
  297. package/src/sap/fe/core/fpm/Component.ts +1 -0
  298. package/src/sap/fe/core/fpm/manifest.json +1 -1
  299. package/src/sap/fe/core/helpers/AppStartupHelper-dbg.js +2 -2
  300. package/src/sap/fe/core/helpers/AppStartupHelper.js +1 -1
  301. package/src/sap/fe/core/helpers/AppStartupHelper.js.map +1 -1
  302. package/src/sap/fe/core/helpers/AppStartupHelper.ts +1 -1
  303. package/src/sap/fe/core/helpers/BindingToolkit-dbg.js +6 -6
  304. package/src/sap/fe/core/helpers/BindingToolkit.js.map +1 -1
  305. package/src/sap/fe/core/helpers/BindingToolkit.ts +8 -8
  306. package/src/sap/fe/core/helpers/ClassSupport-dbg.js +1 -1
  307. package/src/sap/fe/core/helpers/ClassSupport.js.map +1 -1
  308. package/src/sap/fe/core/helpers/ClassSupport.ts +1 -0
  309. package/src/sap/fe/core/helpers/DeleteHelper-dbg.js +93 -62
  310. package/src/sap/fe/core/helpers/DeleteHelper.js +1 -1
  311. package/src/sap/fe/core/helpers/DeleteHelper.js.map +1 -1
  312. package/src/sap/fe/core/helpers/DeleteHelper.ts +140 -185
  313. package/src/sap/fe/core/helpers/MassEditHelper-dbg.js +20 -18
  314. package/src/sap/fe/core/helpers/MassEditHelper.js +1 -1
  315. package/src/sap/fe/core/helpers/MassEditHelper.js.map +1 -1
  316. package/src/sap/fe/core/helpers/MassEditHelper.ts +22 -23
  317. package/src/sap/fe/core/helpers/MessageStrip-dbg.js +4 -5
  318. package/src/sap/fe/core/helpers/MessageStrip.js +1 -1
  319. package/src/sap/fe/core/helpers/MessageStrip.js.map +1 -1
  320. package/src/sap/fe/core/helpers/MessageStrip.ts +4 -4
  321. package/src/sap/fe/core/helpers/MetaModelFunction-dbg.js +354 -0
  322. package/src/sap/fe/core/helpers/MetaModelFunction.js +6 -0
  323. package/src/sap/fe/core/helpers/MetaModelFunction.js.map +1 -0
  324. package/src/sap/fe/core/helpers/MetaModelFunction.ts +408 -0
  325. package/src/sap/fe/core/helpers/ModelHelper-dbg.js +13 -13
  326. package/src/sap/fe/core/helpers/ModelHelper.js.map +1 -1
  327. package/src/sap/fe/core/helpers/ModelHelper.ts +13 -13
  328. package/src/sap/fe/core/helpers/PasteHelper-dbg.js +5 -5
  329. package/src/sap/fe/core/helpers/PasteHelper.js +1 -1
  330. package/src/sap/fe/core/helpers/PasteHelper.js.map +1 -1
  331. package/src/sap/fe/core/helpers/PasteHelper.ts +6 -10
  332. package/src/sap/fe/core/helpers/ResourceModelHelper-dbg.js +26 -0
  333. package/src/sap/fe/core/helpers/ResourceModelHelper.js +6 -0
  334. package/src/sap/fe/core/helpers/ResourceModelHelper.js.map +1 -0
  335. package/src/sap/fe/core/helpers/ResourceModelHelper.ts +19 -0
  336. package/src/sap/fe/core/helpers/SemanticDateOperators-dbg.js +93 -18
  337. package/src/sap/fe/core/helpers/SemanticDateOperators.js +1 -1
  338. package/src/sap/fe/core/helpers/SemanticDateOperators.js.map +1 -1
  339. package/src/sap/fe/core/helpers/SemanticDateOperators.ts +70 -17
  340. package/src/sap/fe/core/helpers/SemanticKeyHelper-dbg.js +2 -2
  341. package/src/sap/fe/core/helpers/SemanticKeyHelper.js +1 -1
  342. package/src/sap/fe/core/helpers/SemanticKeyHelper.js.map +1 -1
  343. package/src/sap/fe/core/helpers/SemanticKeyHelper.ts +1 -1
  344. package/src/sap/fe/core/helpers/Synchronization-dbg.js +1 -1
  345. package/src/sap/fe/core/helpers/Synchronization.ts +2 -0
  346. package/src/sap/fe/core/helpers/TypeGuards-dbg.js +5 -1
  347. package/src/sap/fe/core/helpers/TypeGuards.js +1 -1
  348. package/src/sap/fe/core/helpers/TypeGuards.js.map +1 -1
  349. package/src/sap/fe/core/helpers/TypeGuards.ts +12 -1
  350. package/src/sap/fe/core/jsx-runtime/ViewLoader-dbg.js +2 -1
  351. package/src/sap/fe/core/jsx-runtime/ViewLoader.js.map +1 -1
  352. package/src/sap/fe/core/jsx-runtime/ViewLoader.tsx +6 -2
  353. package/src/sap/fe/core/jsx-runtime/jsx-control-dbg.js +1 -1
  354. package/src/sap/fe/core/jsx-runtime/jsx-control.ts +3 -1
  355. package/src/sap/fe/core/jsx-runtime/useMDXComponents-dbg.js +3 -3
  356. package/src/sap/fe/core/jsx-runtime/useMDXComponents.js +1 -1
  357. package/src/sap/fe/core/jsx-runtime/useMDXComponents.js.map +1 -1
  358. package/src/sap/fe/core/jsx-runtime/useMDXComponents.tsx +1 -1
  359. package/src/sap/fe/core/library-dbg.js +2 -2
  360. package/src/sap/fe/core/library-preload.js +127 -125
  361. package/src/sap/fe/core/library-preload.js.map +1 -1
  362. package/src/sap/fe/core/library.js +1 -1
  363. package/src/sap/fe/core/library.ts +7 -0
  364. package/src/sap/fe/core/manifest.json +1 -1
  365. package/src/sap/fe/core/messagebundle.properties +33 -0
  366. package/src/sap/fe/core/messagebundle_ar.properties +12 -10
  367. package/src/sap/fe/core/messagebundle_bg.properties +11 -9
  368. package/src/sap/fe/core/messagebundle_ca.properties +11 -9
  369. package/src/sap/fe/core/messagebundle_cs.properties +11 -9
  370. package/src/sap/fe/core/messagebundle_cy.properties +11 -9
  371. package/src/sap/fe/core/messagebundle_da.properties +11 -9
  372. package/src/sap/fe/core/messagebundle_de.properties +3 -1
  373. package/src/sap/fe/core/messagebundle_el.properties +11 -9
  374. package/src/sap/fe/core/messagebundle_en.properties +3 -1
  375. package/src/sap/fe/core/messagebundle_en_GB.properties +2 -0
  376. package/src/sap/fe/core/messagebundle_en_US_sappsd.properties +2 -0
  377. package/src/sap/fe/core/messagebundle_en_US_saprigi.properties +20 -0
  378. package/src/sap/fe/core/messagebundle_en_US_saptrc.properties +21 -3
  379. package/src/sap/fe/core/messagebundle_es.properties +11 -9
  380. package/src/sap/fe/core/messagebundle_es_MX.properties +11 -9
  381. package/src/sap/fe/core/messagebundle_et.properties +11 -9
  382. package/src/sap/fe/core/messagebundle_fi.properties +11 -9
  383. package/src/sap/fe/core/messagebundle_fr.properties +11 -9
  384. package/src/sap/fe/core/messagebundle_fr_CA.properties +3 -1
  385. package/src/sap/fe/core/messagebundle_hi.properties +2 -0
  386. package/src/sap/fe/core/messagebundle_hr.properties +11 -9
  387. package/src/sap/fe/core/messagebundle_hu.properties +11 -9
  388. package/src/sap/fe/core/messagebundle_id.properties +3 -1
  389. package/src/sap/fe/core/messagebundle_it.properties +11 -9
  390. package/src/sap/fe/core/messagebundle_iw.properties +11 -9
  391. package/src/sap/fe/core/messagebundle_ja.properties +11 -9
  392. package/src/sap/fe/core/messagebundle_kk.properties +11 -9
  393. package/src/sap/fe/core/messagebundle_ko.properties +2 -0
  394. package/src/sap/fe/core/messagebundle_lt.properties +11 -9
  395. package/src/sap/fe/core/messagebundle_lv.properties +2 -0
  396. package/src/sap/fe/core/messagebundle_ms.properties +12 -10
  397. package/src/sap/fe/core/messagebundle_nl.properties +12 -10
  398. package/src/sap/fe/core/messagebundle_no.properties +11 -9
  399. package/src/sap/fe/core/messagebundle_pl.properties +2 -0
  400. package/src/sap/fe/core/messagebundle_pt.properties +11 -9
  401. package/src/sap/fe/core/messagebundle_pt_PT.properties +11 -9
  402. package/src/sap/fe/core/messagebundle_ro.properties +3 -1
  403. package/src/sap/fe/core/messagebundle_ru.properties +3 -1
  404. package/src/sap/fe/core/messagebundle_sh.properties +11 -9
  405. package/src/sap/fe/core/messagebundle_sk.properties +11 -9
  406. package/src/sap/fe/core/messagebundle_sl.properties +11 -9
  407. package/src/sap/fe/core/messagebundle_sv.properties +2 -0
  408. package/src/sap/fe/core/messagebundle_th.properties +11 -9
  409. package/src/sap/fe/core/messagebundle_tr.properties +11 -9
  410. package/src/sap/fe/core/messagebundle_uk.properties +11 -9
  411. package/src/sap/fe/core/messagebundle_vi.properties +12 -10
  412. package/src/sap/fe/core/messagebundle_zh_CN.properties +2 -0
  413. package/src/sap/fe/core/messagebundle_zh_TW.properties +2 -0
  414. package/src/sap/fe/core/operationsHelper-dbg.js +70 -44
  415. package/src/sap/fe/core/operationsHelper.js +1 -1
  416. package/src/sap/fe/core/operationsHelper.js.map +1 -1
  417. package/src/sap/fe/core/operationsHelper.ts +88 -63
  418. package/src/sap/fe/core/rootView/Fcl-dbg.controller.js +1 -1
  419. package/src/sap/fe/core/rootView/Fcl.controller.ts +10 -0
  420. package/src/sap/fe/core/rootView/NavContainer-dbg.controller.js +2 -2
  421. package/src/sap/fe/core/rootView/NavContainer.controller.js +1 -1
  422. package/src/sap/fe/core/rootView/NavContainer.controller.js.map +1 -1
  423. package/src/sap/fe/core/rootView/NavContainer.controller.ts +5 -3
  424. package/src/sap/fe/core/rootView/RootViewBaseController-dbg.js +4 -3
  425. package/src/sap/fe/core/rootView/RootViewBaseController.js +1 -1
  426. package/src/sap/fe/core/rootView/RootViewBaseController.js.map +1 -1
  427. package/src/sap/fe/core/rootView/RootViewBaseController.ts +15 -5
  428. package/src/sap/fe/core/services/AsyncComponentServiceFactory-dbg.js +1 -1
  429. package/src/sap/fe/core/services/AsyncComponentServiceFactory.ts +3 -1
  430. package/src/sap/fe/core/services/CacheHandlerServiceFactory-dbg.js +1 -1
  431. package/src/sap/fe/core/services/CacheHandlerServiceFactory.js.map +1 -1
  432. package/src/sap/fe/core/services/CacheHandlerServiceFactory.ts +15 -1
  433. package/src/sap/fe/core/services/EnvironmentServiceFactory-dbg.js +1 -1
  434. package/src/sap/fe/core/services/EnvironmentServiceFactory.js.map +1 -1
  435. package/src/sap/fe/core/services/EnvironmentServiceFactory.ts +4 -1
  436. package/src/sap/fe/core/services/NavigationServiceFactory-dbg.js +9 -1
  437. package/src/sap/fe/core/services/NavigationServiceFactory.js.map +1 -1
  438. package/src/sap/fe/core/services/NavigationServiceFactory.ts +19 -1
  439. package/src/sap/fe/core/services/ResourceModelServiceFactory-dbg.js +2 -2
  440. package/src/sap/fe/core/services/ResourceModelServiceFactory.js +1 -1
  441. package/src/sap/fe/core/services/ResourceModelServiceFactory.js.map +1 -1
  442. package/src/sap/fe/core/services/ResourceModelServiceFactory.ts +10 -3
  443. package/src/sap/fe/core/services/RoutingServiceFactory-dbg.js +3 -3
  444. package/src/sap/fe/core/services/RoutingServiceFactory.js +1 -1
  445. package/src/sap/fe/core/services/RoutingServiceFactory.js.map +1 -1
  446. package/src/sap/fe/core/services/RoutingServiceFactory.ts +29 -3
  447. package/src/sap/fe/core/services/ShellServicesFactory-dbg.js +1 -1
  448. package/src/sap/fe/core/services/ShellServicesFactory.ts +14 -2
  449. package/src/sap/fe/core/services/SideEffectsServiceFactory-dbg.js +448 -279
  450. package/src/sap/fe/core/services/SideEffectsServiceFactory.js +1 -1
  451. package/src/sap/fe/core/services/SideEffectsServiceFactory.js.map +1 -1
  452. package/src/sap/fe/core/services/SideEffectsServiceFactory.ts +502 -333
  453. package/src/sap/fe/core/services/TemplatedViewServiceFactory-dbg.js +18 -5
  454. package/src/sap/fe/core/services/TemplatedViewServiceFactory.js +1 -1
  455. package/src/sap/fe/core/services/TemplatedViewServiceFactory.js.map +1 -1
  456. package/src/sap/fe/core/services/TemplatedViewServiceFactory.ts +41 -12
  457. package/src/sap/fe/core/support/Diagnostics-dbg.js +1 -1
  458. package/src/sap/fe/core/support/Diagnostics.ts +5 -0
  459. package/src/sap/fe/core/templating/DataModelPathHelper-dbg.js +185 -86
  460. package/src/sap/fe/core/templating/DataModelPathHelper.js +1 -1
  461. package/src/sap/fe/core/templating/DataModelPathHelper.js.map +1 -1
  462. package/src/sap/fe/core/templating/DataModelPathHelper.ts +190 -82
  463. package/src/sap/fe/core/templating/DisplayModeFormatter-dbg.js +1 -1
  464. package/src/sap/fe/core/templating/DisplayModeFormatter.ts +1 -1
  465. package/src/sap/fe/core/templating/EntitySetHelper-dbg.js +2 -3
  466. package/src/sap/fe/core/templating/EntitySetHelper.js +1 -1
  467. package/src/sap/fe/core/templating/EntitySetHelper.js.map +1 -1
  468. package/src/sap/fe/core/templating/EntitySetHelper.ts +1 -3
  469. package/src/sap/fe/core/templating/FilterHelper-dbg.js +3 -3
  470. package/src/sap/fe/core/templating/FilterHelper.js +1 -1
  471. package/src/sap/fe/core/templating/FilterHelper.js.map +1 -1
  472. package/src/sap/fe/core/templating/FilterHelper.ts +5 -3
  473. package/src/sap/fe/core/templating/PropertyHelper-dbg.js +1 -1
  474. package/src/sap/fe/core/templating/PropertyHelper.ts +2 -2
  475. package/src/sap/fe/core/templating/UIFormatters-dbg.js +1 -1
  476. package/src/sap/fe/core/templating/UIFormatters.ts +4 -0
  477. package/src/sap/fe/core/type/DateTimeWithTimezone-dbg.js +1 -1
  478. package/src/sap/fe/core/type/DateTimeWithTimezone.ts +2 -0
  479. package/src/sap/fe/core/type/FiscalDate-dbg.js +2 -2
  480. package/src/sap/fe/core/type/FiscalDate.js.map +1 -1
  481. package/src/sap/fe/core/type/FiscalDate.ts +2 -1
  482. package/src/sap/fe/core/type/TypeUtil-dbg.js +5 -10
  483. package/src/sap/fe/core/type/TypeUtil.js +1 -1
  484. package/src/sap/fe/core/type/TypeUtil.js.map +1 -1
  485. package/src/sap/fe/core/type/TypeUtil.ts +3 -6
  486. package/src/sap/fe/core/buildingBlocks/BuildingBlock-dbg.js +0 -410
  487. package/src/sap/fe/core/buildingBlocks/BuildingBlock.js +0 -15
  488. package/src/sap/fe/core/buildingBlocks/BuildingBlock.js.map +0 -1
  489. package/src/sap/fe/core/buildingBlocks/BuildingBlock.ts +0 -536
  490. package/src/sap/fe/core/buildingBlocks/BuildingBlockFragment-dbg.js +0 -44
  491. package/src/sap/fe/core/buildingBlocks/BuildingBlockFragment.js +0 -6
  492. package/src/sap/fe/core/buildingBlocks/BuildingBlockFragment.js.map +0 -1
  493. package/src/sap/fe/core/buildingBlocks/BuildingBlockFragment.ts +0 -14
  494. package/src/sap/fe/core/buildingBlocks/BuildingBlockRuntime-dbg.js +0 -948
  495. package/src/sap/fe/core/buildingBlocks/BuildingBlockRuntime.js +0 -19
  496. package/src/sap/fe/core/buildingBlocks/BuildingBlockRuntime.js.map +0 -1
  497. package/src/sap/fe/core/controllerextensions/InternalEditFlow-dbg.js +0 -711
  498. package/src/sap/fe/core/controllerextensions/InternalEditFlow.js +0 -6
  499. package/src/sap/fe/core/controllerextensions/InternalEditFlow.js.map +0 -1
  500. package/src/sap/fe/core/controllerextensions/InternalEditFlow.ts +0 -863
  501. package/src/sap/fe/core/controls/ConditionalWrapper-dbg.js +0 -151
  502. package/src/sap/fe/core/controls/ConditionalWrapper.js +0 -6
  503. package/src/sap/fe/core/controls/ConditionalWrapper.js.map +0 -1
  504. package/src/sap/fe/core/controls/ConditionalWrapper.ts +0 -88
  505. package/src/sap/fe/core/controls/CustomFilterFieldContentWrapper-dbg.js +0 -330
  506. package/src/sap/fe/core/controls/CustomFilterFieldContentWrapper.js +0 -6
  507. package/src/sap/fe/core/controls/CustomFilterFieldContentWrapper.js.map +0 -1
  508. package/src/sap/fe/core/controls/CustomFilterFieldContentWrapper.ts +0 -292
  509. package/src/sap/fe/core/controls/CustomQuickViewPage-dbg.js +0 -126
  510. package/src/sap/fe/core/controls/CustomQuickViewPage.js +0 -6
  511. package/src/sap/fe/core/controls/CustomQuickViewPage.js.map +0 -1
  512. package/src/sap/fe/core/controls/CustomQuickViewPage.ts +0 -105
  513. package/src/sap/fe/core/controls/FieldWrapper-dbg.js +0 -194
  514. package/src/sap/fe/core/controls/FieldWrapper.js +0 -6
  515. package/src/sap/fe/core/controls/FieldWrapper.js.map +0 -1
  516. package/src/sap/fe/core/controls/FieldWrapper.ts +0 -121
  517. package/src/sap/fe/core/controls/FileWrapper-dbg.js +0 -280
  518. package/src/sap/fe/core/controls/FileWrapper.js +0 -6
  519. package/src/sap/fe/core/controls/FileWrapper.js.map +0 -1
  520. package/src/sap/fe/core/controls/FileWrapper.ts +0 -202
  521. package/src/sap/fe/core/helpers/SideEffectsHelper-dbg.js +0 -141
  522. package/src/sap/fe/core/helpers/SideEffectsHelper.js +0 -6
  523. package/src/sap/fe/core/helpers/SideEffectsHelper.js.map +0 -1
  524. package/src/sap/fe/core/helpers/SideEffectsHelper.ts +0 -129
@@ -473,7 +473,7 @@ sap.ui.define(["sap/fe/core/converters/common/AnnotationConverter", "../helpers/
473
473
  const qualifier = annotationQualifierSplit[1];
474
474
  annotationKey = annotationQualifierSplit[0];
475
475
  const parsedAnnotationObject = {
476
- term: `${annotationKey}`,
476
+ term: annotationKey,
477
477
  qualifier: qualifier
478
478
  };
479
479
  let currentAnnotationTarget = `${annotationTarget}@${parsedAnnotationObject.term}`;
@@ -832,8 +832,8 @@ sap.ui.define(["sap/fe/core/converters/common/AnnotationConverter", "../helpers/
832
832
  })
833
833
  };
834
834
  }
835
- function parseEntityContainer(namespacePrefix, entityContainerName, entityContainerMetadata, result) {
836
- result.schema.entityContainer = {
835
+ function parseEntityContainer(namespacePrefix, entityContainerName, entityContainerMetadata, schema) {
836
+ schema.entityContainer = {
837
837
  _type: "EntityContainer",
838
838
  name: entityContainerName.substring(namespacePrefix.length),
839
839
  fullyQualifiedName: entityContainerName
@@ -842,23 +842,23 @@ sap.ui.define(["sap/fe/core/converters/common/AnnotationConverter", "../helpers/
842
842
  const elementValue = entityContainerMetadata[elementName];
843
843
  switch (elementValue.$kind) {
844
844
  case "EntitySet":
845
- result.schema.entitySets.push(prepareEntitySet(elementValue, elementName, entityContainerName));
845
+ schema.entitySets.push(prepareEntitySet(elementValue, elementName, entityContainerName));
846
846
  break;
847
847
  case "Singleton":
848
- result.schema.singletons.push(prepareSingleton(elementValue, elementName, entityContainerName));
848
+ schema.singletons.push(prepareSingleton(elementValue, elementName, entityContainerName));
849
849
  break;
850
850
  case "ActionImport":
851
- result.schema.actionImports.push(prepareActionImport(elementValue, elementName, entityContainerName));
851
+ schema.actionImports.push(prepareActionImport(elementValue, elementName, entityContainerName));
852
852
  break;
853
853
  }
854
854
  }
855
855
 
856
856
  // link the navigation property bindings ($NavigationPropertyBinding)
857
- for (const entitySet of result.schema.entitySets) {
857
+ for (const entitySet of schema.entitySets) {
858
858
  const navPropertyBindings = entityContainerMetadata[entitySet.name].$NavigationPropertyBinding;
859
859
  if (navPropertyBindings) {
860
860
  for (const navPropName of Object.keys(navPropertyBindings)) {
861
- const targetEntitySet = result.schema.entitySets.find(entitySetName => entitySetName.name === navPropertyBindings[navPropName]);
861
+ const targetEntitySet = schema.entitySets.find(entitySetName => entitySetName.name === navPropertyBindings[navPropName]);
862
862
  if (targetEntitySet) {
863
863
  entitySet.navigationPropertyBinding[navPropName] = targetEntitySet;
864
864
  }
@@ -871,62 +871,46 @@ sap.ui.define(["sap/fe/core/converters/common/AnnotationConverter", "../helpers/
871
871
  for (const target in annotations) {
872
872
  createAnnotationLists(annotations[target], target, annotationLists, capabilities);
873
873
  }
874
-
875
- // Sort by target length
876
- return Object.keys(annotationLists).sort((a, b) => a.length - b.length).map(annotationName => annotationLists[annotationName]);
874
+ return Object.values(annotationLists);
877
875
  }
878
- function parseMetaModel(metaModel) {
879
- let capabilities = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : DefaultEnvironmentCapabilities;
880
- const metaModelData = metaModel.getObject("/$");
881
-
876
+ function parseSchema(metaModelData) {
882
877
  // assuming there is only one schema/namespace
883
878
  const namespacePrefix = Object.keys(metaModelData).find(key => metaModelData[key].$kind === "Schema") ?? "";
884
- const result = {
885
- identification: "metamodelResult",
886
- version: "4.0",
887
- schema: {
888
- namespace: namespacePrefix.slice(0, -1),
889
- entityContainer: {
890
- _type: "EntityContainer",
891
- name: "",
892
- fullyQualifiedName: ""
893
- },
894
- entitySets: [],
895
- entityTypes: [],
896
- complexTypes: [],
897
- typeDefinitions: [],
898
- singletons: [],
899
- associations: [],
900
- associationSets: [],
901
- actions: [],
902
- actionImports: [],
903
- annotations: {
904
- metamodelResult: []
905
- }
879
+ const schema = {
880
+ namespace: namespacePrefix.slice(0, -1),
881
+ entityContainer: {
882
+ _type: "EntityContainer",
883
+ name: "",
884
+ fullyQualifiedName: ""
906
885
  },
907
- references: []
886
+ entitySets: [],
887
+ entityTypes: [],
888
+ complexTypes: [],
889
+ typeDefinitions: [],
890
+ singletons: [],
891
+ associations: [],
892
+ associationSets: [],
893
+ actions: [],
894
+ actionImports: [],
895
+ annotations: {}
908
896
  };
909
897
  const parseMetaModelElement = (name, value) => {
910
898
  switch (value.$kind) {
911
899
  case "EntityContainer":
912
- parseEntityContainer(namespacePrefix, name, value, result);
900
+ parseEntityContainer(namespacePrefix, name, value, schema);
913
901
  break;
914
902
  case "Action":
915
903
  case "Function":
916
- const action = prepareAction(name, value, namespacePrefix);
917
- result.schema.actions.push(action);
904
+ schema.actions.push(prepareAction(name, value, namespacePrefix));
918
905
  break;
919
906
  case "EntityType":
920
- const entityType = prepareEntityType(value, name, namespacePrefix, metaModelData);
921
- result.schema.entityTypes.push(entityType);
907
+ schema.entityTypes.push(prepareEntityType(value, name, namespacePrefix, metaModelData));
922
908
  break;
923
909
  case "ComplexType":
924
- const complexType = prepareComplexType(value, name, namespacePrefix);
925
- result.schema.complexTypes.push(complexType);
910
+ schema.complexTypes.push(prepareComplexType(value, name, namespacePrefix));
926
911
  break;
927
912
  case "TypeDefinition":
928
- const typeDefinition = prepareTypeDefinition(value, name, namespacePrefix);
929
- result.schema.typeDefinitions.push(typeDefinition);
913
+ schema.typeDefinitions.push(prepareTypeDefinition(value, name, namespacePrefix));
930
914
  break;
931
915
  }
932
916
  };
@@ -941,11 +925,38 @@ sap.ui.define(["sap/fe/core/converters/common/AnnotationConverter", "../helpers/
941
925
  parseMetaModelElement(elementName, elementValue);
942
926
  }
943
927
  }
944
- result.schema.annotations.metamodelResult = parseAnnotations(metaModelData.$Annotations, capabilities);
928
+ return schema;
929
+ }
930
+ function parseMetaModel(metaModel) {
931
+ let capabilities = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : DefaultEnvironmentCapabilities;
932
+ const result = {
933
+ identification: "metamodelResult",
934
+ version: "4.0",
935
+ references: []
936
+ };
937
+
938
+ // parse the schema when it is accessed for the first time
939
+ AnnotationConverter.lazy(result, "schema", () => {
940
+ const metaModelData = metaModel.getObject("/$");
941
+ const schema = parseSchema(metaModelData);
942
+ AnnotationConverter.lazy(schema.annotations, "metamodelResult", () => parseAnnotations(metaModelData.$Annotations, capabilities));
943
+ return schema;
944
+ });
945
945
  return result;
946
946
  }
947
947
  _exports.parseMetaModel = parseMetaModel;
948
948
  const mMetaModelMap = {};
949
+ function isComplexType(complexType) {
950
+ return (complexType === null || complexType === void 0 ? void 0 : complexType._type) === "ComplexType";
951
+ }
952
+ _exports.isComplexType = isComplexType;
953
+ function isEntityType(entityType) {
954
+ return (entityType === null || entityType === void 0 ? void 0 : entityType._type) === "EntityType";
955
+ }
956
+ _exports.isEntityType = isEntityType;
957
+ function isEntitySet(entitySet) {
958
+ return (entitySet === null || entitySet === void 0 ? void 0 : entitySet._type) === "EntitySet";
959
+ }
949
960
 
950
961
  /**
951
962
  * Convert the ODataMetaModel into another format that allow for easy manipulation of the annotations.
@@ -954,6 +965,7 @@ sap.ui.define(["sap/fe/core/converters/common/AnnotationConverter", "../helpers/
954
965
  * @param oCapabilities The current capabilities
955
966
  * @returns An object containing object-like annotations
956
967
  */
968
+ _exports.isEntitySet = isEntitySet;
957
969
  function convertTypes(oMetaModel, oCapabilities) {
958
970
  const sMetaModelId = oMetaModel.id;
959
971
  if (!mMetaModelMap.hasOwnProperty(sMetaModelId)) {
@@ -1158,4 +1170,4 @@ sap.ui.define(["sap/fe/core/converters/common/AnnotationConverter", "../helpers/
1158
1170
  _exports.getInvolvedDataModelObjectFromPath = getInvolvedDataModelObjectFromPath;
1159
1171
  return _exports;
1160
1172
  }, false);
1161
- //# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJuYW1lcyI6WyJWT0NBQlVMQVJZX0FMSUFTIiwiRGVmYXVsdEVudmlyb25tZW50Q2FwYWJpbGl0aWVzIiwiQ2hhcnQiLCJNaWNyb0NoYXJ0IiwiVVNoZWxsIiwiSW50ZW50QmFzZWROYXZpZ2F0aW9uIiwiQXBwU3RhdGUiLCJwYXJzZVByb3BlcnR5VmFsdWUiLCJhbm5vdGF0aW9uT2JqZWN0IiwicHJvcGVydHlLZXkiLCJjdXJyZW50VGFyZ2V0IiwiYW5ub3RhdGlvbnNMaXN0cyIsIm9DYXBhYmlsaXRpZXMiLCJ2YWx1ZSIsImN1cnJlbnRQcm9wZXJ0eVRhcmdldCIsInR5cGVPZkFubm90YXRpb24iLCJ0eXBlIiwiTnVsbCIsIlN0cmluZyIsIkJvb2wiLCJJbnQiLCJBcnJheSIsImlzQXJyYXkiLCJDb2xsZWN0aW9uIiwibWFwIiwic3ViQW5ub3RhdGlvbk9iamVjdCIsInN1YkFubm90YXRpb25PYmplY3RJbmRleCIsInBhcnNlQW5ub3RhdGlvbk9iamVjdCIsImxlbmd0aCIsImhhc093blByb3BlcnR5IiwiJFBhdGgiLCJ1bmRlZmluZWQiLCJQYXRoIiwiJERlY2ltYWwiLCJEZWNpbWFsIiwicGFyc2VGbG9hdCIsIiRQcm9wZXJ0eVBhdGgiLCJQcm9wZXJ0eVBhdGgiLCIkTmF2aWdhdGlvblByb3BlcnR5UGF0aCIsIk5hdmlnYXRpb25Qcm9wZXJ0eVBhdGgiLCIkSWYiLCJJZiIsIiRBbmQiLCJBbmQiLCIkT3IiLCJPciIsIiROb3QiLCJOb3QiLCIkRXEiLCJFcSIsIiROZSIsIk5lIiwiJEd0IiwiR3QiLCIkR2UiLCJHZSIsIiRMdCIsIkx0IiwiJExlIiwiTGUiLCIkQXBwbHkiLCJBcHBseSIsIkZ1bmN0aW9uIiwiJEZ1bmN0aW9uIiwiJEFubm90YXRpb25QYXRoIiwiQW5ub3RhdGlvblBhdGgiLCIkRW51bU1lbWJlciIsIkVudW1NZW1iZXIiLCJtYXBOYW1lVG9BbGlhcyIsInNwbGl0IiwiUmVjb3JkIiwibmFtZSIsImFubm90YXRpb25OYW1lIiwicGF0aFBhcnQiLCJhbm5vUGFydCIsImxhc3REb3QiLCJsYXN0SW5kZXhPZiIsInN1YnN0ciIsImN1cnJlbnRPYmplY3RUYXJnZXQiLCJwYXJzZWRBbm5vdGF0aW9uT2JqZWN0IiwidHlwZU9mT2JqZWN0IiwicGFyc2VkQW5ub3RhdGlvbkNvbGxlY3Rpb24iLCJjb2xsZWN0aW9uIiwic3ViQW5ub3RhdGlvbkluZGV4IiwiJFR5cGUiLCJ0eXBlVmFsdWUiLCJwcm9wZXJ0eVZhbHVlcyIsIk9iamVjdCIsImtleXMiLCJmb3JFYWNoIiwic3RhcnRzV2l0aCIsInB1c2giLCJjcmVhdGVBbm5vdGF0aW9uTGlzdHMiLCJnZXRPckNyZWF0ZUFubm90YXRpb25MaXN0IiwidGFyZ2V0IiwiYW5ub3RhdGlvbnMiLCJjcmVhdGVSZWZlcmVuY2VGYWNldElkIiwicmVmZXJlbmNlRmFjZXQiLCJpZCIsIklEIiwiVGFyZ2V0IiwicHJlcGFyZUlkIiwicmVtb3ZlQ2hhcnRBbm5vdGF0aW9ucyIsImZpbHRlciIsIm9SZWNvcmQiLCJpbmRleE9mIiwicmVtb3ZlSUJOQW5ub3RhdGlvbnMiLCJoYW5kbGVQcmVzZW50YXRpb25WYXJpYW50IiwiYW5ub3RhdGlvbk9iamVjdHMiLCJhbm5vdGF0aW9uVGFyZ2V0IiwiYW5ub3RhdGlvbkxpc3RzIiwib3V0QW5ub3RhdGlvbk9iamVjdCIsImFubm90YXRpb25LZXkiLCJEYXRhIiwiVmlzdWFsaXphdGlvbnMiLCJjdXJyZW50T3V0QW5ub3RhdGlvbk9iamVjdCIsImFubm90YXRpb25PZkFubm90YXRpb25TcGxpdCIsImFubm90YXRpb25RdWFsaWZpZXJTcGxpdCIsInF1YWxpZmllciIsInRlcm0iLCJjdXJyZW50QW5ub3RhdGlvblRhcmdldCIsImlzQ29sbGVjdGlvbiIsInR5cGVvZkFubm90YXRpb24iLCJyZWNvcmQiLCJwcmVwYXJlUHJvcGVydHkiLCJwcm9wZXJ0eURlZmluaXRpb24iLCJlbnRpdHlUeXBlT2JqZWN0IiwicHJvcGVydHlOYW1lIiwiX3R5cGUiLCJmdWxseVF1YWxpZmllZE5hbWUiLCJtYXhMZW5ndGgiLCIkTWF4TGVuZ3RoIiwicHJlY2lzaW9uIiwiJFByZWNpc2lvbiIsInNjYWxlIiwiJFNjYWxlIiwibnVsbGFibGUiLCIkTnVsbGFibGUiLCJwcmVwYXJlTmF2aWdhdGlvblByb3BlcnR5IiwibmF2UHJvcGVydHlEZWZpbml0aW9uIiwibmF2UHJvcGVydHlOYW1lIiwicmVmZXJlbnRpYWxDb25zdHJhaW50IiwiJFJlZmVyZW50aWFsQ29uc3RyYWludCIsInNvdXJjZVByb3BlcnR5TmFtZSIsInNvdXJjZVR5cGVOYW1lIiwic291cmNlUHJvcGVydHkiLCJ0YXJnZXRUeXBlTmFtZSIsInRhcmdldFByb3BlcnR5IiwibmF2aWdhdGlvblByb3BlcnR5IiwicGFydG5lciIsIiRQYXJ0bmVyIiwiJGlzQ29sbGVjdGlvbiIsImNvbnRhaW5zVGFyZ2V0IiwiJENvbnRhaW5zVGFyZ2V0IiwicHJlcGFyZUVudGl0eVNldCIsImVudGl0eVNldERlZmluaXRpb24iLCJlbnRpdHlTZXROYW1lIiwiZW50aXR5Q29udGFpbmVyTmFtZSIsImVudGl0eVNldE9iamVjdCIsIm5hdmlnYXRpb25Qcm9wZXJ0eUJpbmRpbmciLCJlbnRpdHlUeXBlTmFtZSIsInByZXBhcmVTaW5nbGV0b24iLCJzaW5nbGV0b25EZWZpbml0aW9uIiwic2luZ2xldG9uTmFtZSIsInByZXBhcmVBY3Rpb25JbXBvcnQiLCJhY3Rpb25JbXBvcnQiLCJhY3Rpb25JbXBvcnROYW1lIiwiYWN0aW9uTmFtZSIsIiRBY3Rpb24iLCJwcmVwYXJlVHlwZURlZmluaXRpb24iLCJ0eXBlRGVmaW5pdGlvbiIsInR5cGVOYW1lIiwibmFtZXNwYWNlUHJlZml4IiwidHlwZU9iamVjdCIsInN1YnN0cmluZyIsInVuZGVybHlpbmdUeXBlIiwiJFVuZGVybHlpbmdUeXBlIiwicHJlcGFyZUNvbXBsZXhUeXBlIiwiY29tcGxleFR5cGVEZWZpbml0aW9uIiwiY29tcGxleFR5cGVOYW1lIiwiY29tcGxleFR5cGVPYmplY3QiLCJwcm9wZXJ0aWVzIiwibmF2aWdhdGlvblByb3BlcnRpZXMiLCJjb21wbGV4VHlwZVByb3BlcnRpZXMiLCJwcm9wZXJ0eU5hbWVPck5vdCIsIiRraW5kIiwic29ydCIsImEiLCJiIiwiY29tcGxleFR5cGVOYXZpZ2F0aW9uUHJvcGVydGllcyIsInByZXBhcmVFbnRpdHlLZXlzIiwiZW50aXR5VHlwZURlZmluaXRpb24iLCJvTWV0YU1vZGVsRGF0YSIsIiRLZXkiLCIkQmFzZVR5cGUiLCJwcmVwYXJlRW50aXR5VHlwZSIsIm1ldGFNb2RlbERhdGEiLCJlbnRpdHlUeXBlIiwiZW50aXR5UHJvcGVydGllcyIsImFjdGlvbnMiLCJrZXkiLCJwcm9wZXJ0eSIsImVudGl0eUtleSIsImZpbmQiLCIkQW5ub3RhdGlvbnMiLCJmaWx0ZXJGYWNldEFubm90YXRpb24iLCJlbnRpdHlQcm9wZXJ0eSIsIlZhbHVlIiwicHJlcGFyZUFjdGlvbiIsImFjdGlvblJhd0RhdGEiLCJhY3Rpb25FbnRpdHlUeXBlIiwiYWN0aW9uRlFOIiwiJElzQm91bmQiLCJiaW5kaW5nUGFyYW1ldGVyIiwiJFBhcmFtZXRlciIsInBhcmFtZXRlcnMiLCJpc0JvdW5kIiwiaXNGdW5jdGlvbiIsInNvdXJjZVR5cGUiLCJyZXR1cm5UeXBlIiwiJFJldHVyblR5cGUiLCJwYXJhbSIsIiROYW1lIiwicGFyc2VFbnRpdHlDb250YWluZXIiLCJlbnRpdHlDb250YWluZXJNZXRhZGF0YSIsInJlc3VsdCIsInNjaGVtYSIsImVudGl0eUNvbnRhaW5lciIsImVsZW1lbnROYW1lIiwiZWxlbWVudFZhbHVlIiwiZW50aXR5U2V0cyIsInNpbmdsZXRvbnMiLCJhY3Rpb25JbXBvcnRzIiwiZW50aXR5U2V0IiwibmF2UHJvcGVydHlCaW5kaW5ncyIsIiROYXZpZ2F0aW9uUHJvcGVydHlCaW5kaW5nIiwibmF2UHJvcE5hbWUiLCJ0YXJnZXRFbnRpdHlTZXQiLCJwYXJzZUFubm90YXRpb25zIiwiY2FwYWJpbGl0aWVzIiwicGFyc2VNZXRhTW9kZWwiLCJtZXRhTW9kZWwiLCJnZXRPYmplY3QiLCJpZGVudGlmaWNhdGlvbiIsInZlcnNpb24iLCJuYW1lc3BhY2UiLCJzbGljZSIsImVudGl0eVR5cGVzIiwiY29tcGxleFR5cGVzIiwidHlwZURlZmluaXRpb25zIiwiYXNzb2NpYXRpb25zIiwiYXNzb2NpYXRpb25TZXRzIiwibWV0YW1vZGVsUmVzdWx0IiwicmVmZXJlbmNlcyIsInBhcnNlTWV0YU1vZGVsRWxlbWVudCIsImFjdGlvbiIsImNvbXBsZXhUeXBlIiwic3ViRWxlbWVudFZhbHVlIiwibU1ldGFNb2RlbE1hcCIsImNvbnZlcnRUeXBlcyIsIm9NZXRhTW9kZWwiLCJzTWV0YU1vZGVsSWQiLCJwYXJzZWRPdXRwdXQiLCJBbm5vdGF0aW9uQ29udmVydGVyIiwiY29udmVydCIsIm9FcnJvciIsIkVycm9yIiwiZ2V0Q29udmVydGVkVHlwZXMiLCJvQ29udGV4dCIsImdldE1vZGVsIiwiaXNBIiwiZGVsZXRlTW9kZWxDYWNoZURhdGEiLCJjb252ZXJ0TWV0YU1vZGVsQ29udGV4dCIsIm9NZXRhTW9kZWxDb250ZXh0IiwiYkluY2x1ZGVWaXNpdGVkT2JqZWN0cyIsIm9Db252ZXJ0ZWRNZXRhZGF0YSIsInNQYXRoIiwiZ2V0UGF0aCIsImFQYXRoU3BsaXQiLCJmaXJzdFBhcnQiLCJiZWdpbkluZGV4Iiwic2luZ2xldG9uIiwicmVsYXRpdmVQYXRoIiwiam9pbiIsImxvY2FsT2JqZWN0cyIsInJlbGF0aXZlU3BsaXQiLCJpZHgiLCJjdXJyZW50RW50aXR5U2V0Iiwic05hdlByb3BUb0NoZWNrIiwicmVwbGFjZSIsImFOYXZQcm9wcyIsInRhcmdldEVudGl0eVR5cGUiLCJzTmF2UHJvcCIsInRhcmdldE5hdlByb3AiLCJuYXZQcm9wIiwidGFyZ2V0VHlwZSIsInNoaWZ0Iiwib1RhcmdldCIsInJlc29sdmVQYXRoIiwidmlzaXRlZE9iamVjdHMiLCJjb25jYXQiLCJwYXJhbWV0ZXJOYW1lIiwicGFyYW1ldGVyIiwiZW5kc1dpdGgiLCJnZXRJbnZvbHZlZERhdGFNb2RlbE9iamVjdHMiLCJvRW50aXR5U2V0TWV0YU1vZGVsQ29udGV4dCIsIm1ldGFNb2RlbENvbnRleHQiLCJ0YXJnZXRFbnRpdHlTZXRMb2NhdGlvbiIsImdldEludm9sdmVkRGF0YU1vZGVsT2JqZWN0RnJvbVBhdGgiLCJjb252ZXJ0ZWRUeXBlcyIsIm9ubHlTZXJ2aWNlT2JqZWN0cyIsImRhdGFNb2RlbE9iamVjdHMiLCJ2aXNpdGVkT2JqZWN0Iiwicm9vdEVudGl0eVNldCIsImN1cnJlbnRFbnRpdHlUeXBlIiwiY3VycmVudE9iamVjdCIsIm5hdmlnYXRlZFBhdGgiLCJpIiwiYm91bmRFbnRpdHlTZXQiLCJzdGFydGluZ0VudGl0eVNldCIsInN0YXJ0aW5nSW5kZXgiLCJyZXF1aXJlZERhdGFNb2RlbE9iamVjdHMiLCJvYmplY3QiLCJvdXREYXRhTW9kZWxQYXRoIiwidGFyZ2V0T2JqZWN0IiwiY29udGV4dExvY2F0aW9uIl0sInNvdXJjZVJvb3QiOiIuIiwic291cmNlcyI6WyJNZXRhTW9kZWxDb252ZXJ0ZXIudHMiXSwic291cmNlc0NvbnRlbnQiOlsiLy8gVGhpcyBmaWxlIGlzIHJldHJpZXZlZCBmcm9tIEBzYXAtdXgvYW5ub3RhdGlvbi1jb252ZXJ0ZXIsIHNoYXJlZCBjb2RlIHdpdGggdG9vbCBzdWl0ZVxuXG5pbXBvcnQgdHlwZSB7XG5cdEFubm90YXRpb24sXG5cdEFubm90YXRpb25MaXN0LFxuXHRBbm5vdGF0aW9uUmVjb3JkLFxuXHRDb252ZXJ0ZWRNZXRhZGF0YSxcblx0RW50aXR5U2V0LFxuXHRFbnRpdHlUeXBlLFxuXHRFeHByZXNzaW9uLFxuXHROYXZpZ2F0aW9uUHJvcGVydHksXG5cdFJhd0FjdGlvbixcblx0UmF3QWN0aW9uSW1wb3J0LFxuXHRSYXdDb21wbGV4VHlwZSxcblx0UmF3RW50aXR5U2V0LFxuXHRSYXdFbnRpdHlUeXBlLFxuXHRSYXdNZXRhZGF0YSxcblx0UmF3UHJvcGVydHksXG5cdFJhd1NpbmdsZXRvbixcblx0UmF3VHlwZURlZmluaXRpb24sXG5cdFJhd1Y0TmF2aWdhdGlvblByb3BlcnR5LFxuXHRSZWZlcmVudGlhbENvbnN0cmFpbnQsXG5cdFNlcnZpY2VPYmplY3QsXG5cdFNpbmdsZXRvblxufSBmcm9tIFwiQHNhcC11eC92b2NhYnVsYXJpZXMtdHlwZXNcIjtcbmltcG9ydCB7IFVJQW5ub3RhdGlvblRlcm1zLCBVSUFubm90YXRpb25UeXBlcyB9IGZyb20gXCJAc2FwLXV4L3ZvY2FidWxhcmllcy10eXBlcy92b2NhYnVsYXJpZXMvVUlcIjtcbmltcG9ydCB7IEFubm90YXRpb25Db252ZXJ0ZXIgfSBmcm9tIFwic2FwL2ZlL2NvcmUvY29udmVydGVycy9jb21tb25cIjtcbmltcG9ydCB0eXBlIHsgRGF0YU1vZGVsT2JqZWN0UGF0aCB9IGZyb20gXCJzYXAvZmUvY29yZS90ZW1wbGF0aW5nL0RhdGFNb2RlbFBhdGhIZWxwZXJcIjtcbmltcG9ydCB0eXBlIENvbnRleHQgZnJvbSBcInNhcC91aS9tb2RlbC9Db250ZXh0XCI7XG5pbXBvcnQgdHlwZSBPRGF0YU1ldGFNb2RlbCBmcm9tIFwic2FwL3VpL21vZGVsL29kYXRhL3Y0L09EYXRhTWV0YU1vZGVsXCI7XG5pbXBvcnQgeyBwcmVwYXJlSWQgfSBmcm9tIFwiLi4vaGVscGVycy9TdGFibGVJZEhlbHBlclwiO1xuXG5jb25zdCBWT0NBQlVMQVJZX0FMSUFTOiBhbnkgPSB7XG5cdFwiT3JnLk9EYXRhLkNhcGFiaWxpdGllcy5WMVwiOiBcIkNhcGFiaWxpdGllc1wiLFxuXHRcIk9yZy5PRGF0YS5Db3JlLlYxXCI6IFwiQ29yZVwiLFxuXHRcIk9yZy5PRGF0YS5NZWFzdXJlcy5WMVwiOiBcIk1lYXN1cmVzXCIsXG5cdFwiY29tLnNhcC52b2NhYnVsYXJpZXMuQ29tbW9uLnYxXCI6IFwiQ29tbW9uXCIsXG5cdFwiY29tLnNhcC52b2NhYnVsYXJpZXMuVUkudjFcIjogXCJVSVwiLFxuXHRcImNvbS5zYXAudm9jYWJ1bGFyaWVzLlNlc3Npb24udjFcIjogXCJTZXNzaW9uXCIsXG5cdFwiY29tLnNhcC52b2NhYnVsYXJpZXMuQW5hbHl0aWNzLnYxXCI6IFwiQW5hbHl0aWNzXCIsXG5cdFwiY29tLnNhcC52b2NhYnVsYXJpZXMuUGVyc29uYWxEYXRhLnYxXCI6IFwiUGVyc29uYWxEYXRhXCIsXG5cdFwiY29tLnNhcC52b2NhYnVsYXJpZXMuQ29tbXVuaWNhdGlvbi52MVwiOiBcIkNvbW11bmljYXRpb25cIlxufTtcblxuZXhwb3J0IHR5cGUgRW52aXJvbm1lbnRDYXBhYmlsaXRpZXMgPSB7XG5cdENoYXJ0OiBib29sZWFuO1xuXHRNaWNyb0NoYXJ0OiBib29sZWFuO1xuXHRVU2hlbGw6IGJvb2xlYW47XG5cdEludGVudEJhc2VkTmF2aWdhdGlvbjogYm9vbGVhbjtcblx0QXBwU3RhdGU6IGJvb2xlYW47XG59O1xuXG5leHBvcnQgY29uc3QgRGVmYXVsdEVudmlyb25tZW50Q2FwYWJpbGl0aWVzID0ge1xuXHRDaGFydDogdHJ1ZSxcblx0TWljcm9DaGFydDogdHJ1ZSxcblx0VVNoZWxsOiB0cnVlLFxuXHRJbnRlbnRCYXNlZE5hdmlnYXRpb246IHRydWUsXG5cdEFwcFN0YXRlOiB0cnVlXG59O1xuXG50eXBlIE1ldGFNb2RlbEFjdGlvbiA9IHtcblx0JGtpbmQ6IFwiQWN0aW9uXCIgfCBcIkZ1bmN0aW9uXCI7XG5cdCRJc0JvdW5kOiBib29sZWFuO1xuXHQkRW50aXR5U2V0UGF0aDogc3RyaW5nO1xuXHQkUGFyYW1ldGVyOiB7XG5cdFx0JFR5cGU6IHN0cmluZztcblx0XHQkTmFtZTogc3RyaW5nO1xuXHRcdCROdWxsYWJsZT86IGJvb2xlYW47XG5cdFx0JE1heExlbmd0aD86IG51bWJlcjtcblx0XHQkUHJlY2lzaW9uPzogbnVtYmVyO1xuXHRcdCRTY2FsZT86IG51bWJlcjtcblx0XHQkaXNDb2xsZWN0aW9uPzogYm9vbGVhbjtcblx0fVtdO1xuXHQkUmV0dXJuVHlwZToge1xuXHRcdCRUeXBlOiBzdHJpbmc7XG5cdH07XG59O1xuXG5mdW5jdGlvbiBwYXJzZVByb3BlcnR5VmFsdWUoXG5cdGFubm90YXRpb25PYmplY3Q6IGFueSxcblx0cHJvcGVydHlLZXk6IHN0cmluZyxcblx0Y3VycmVudFRhcmdldDogc3RyaW5nLFxuXHRhbm5vdGF0aW9uc0xpc3RzOiBSZWNvcmQ8c3RyaW5nLCBBbm5vdGF0aW9uTGlzdD4sXG5cdG9DYXBhYmlsaXRpZXM6IEVudmlyb25tZW50Q2FwYWJpbGl0aWVzXG4pOiBhbnkge1xuXHRsZXQgdmFsdWU7XG5cdGNvbnN0IGN1cnJlbnRQcm9wZXJ0eVRhcmdldDogc3RyaW5nID0gYCR7Y3VycmVudFRhcmdldH0vJHtwcm9wZXJ0eUtleX1gO1xuXHRjb25zdCB0eXBlT2ZBbm5vdGF0aW9uID0gdHlwZW9mIGFubm90YXRpb25PYmplY3Q7XG5cdGlmIChhbm5vdGF0aW9uT2JqZWN0ID09PSBudWxsKSB7XG5cdFx0dmFsdWUgPSB7IHR5cGU6IFwiTnVsbFwiLCBOdWxsOiBudWxsIH07XG5cdH0gZWxzZSBpZiAodHlwZU9mQW5ub3RhdGlvbiA9PT0gXCJzdHJpbmdcIikge1xuXHRcdHZhbHVlID0geyB0eXBlOiBcIlN0cmluZ1wiLCBTdHJpbmc6IGFubm90YXRpb25PYmplY3QgfTtcblx0fSBlbHNlIGlmICh0eXBlT2ZBbm5vdGF0aW9uID09PSBcImJvb2xlYW5cIikge1xuXHRcdHZhbHVlID0geyB0eXBlOiBcIkJvb2xcIiwgQm9vbDogYW5ub3RhdGlvbk9iamVjdCB9O1xuXHR9IGVsc2UgaWYgKHR5cGVPZkFubm90YXRpb24gPT09IFwibnVtYmVyXCIpIHtcblx0XHR2YWx1ZSA9IHsgdHlwZTogXCJJbnRcIiwgSW50OiBhbm5vdGF0aW9uT2JqZWN0IH07XG5cdH0gZWxzZSBpZiAoQXJyYXkuaXNBcnJheShhbm5vdGF0aW9uT2JqZWN0KSkge1xuXHRcdHZhbHVlID0ge1xuXHRcdFx0dHlwZTogXCJDb2xsZWN0aW9uXCIsXG5cdFx0XHRDb2xsZWN0aW9uOiBhbm5vdGF0aW9uT2JqZWN0Lm1hcCgoc3ViQW5ub3RhdGlvbk9iamVjdCwgc3ViQW5ub3RhdGlvbk9iamVjdEluZGV4KSA9PlxuXHRcdFx0XHRwYXJzZUFubm90YXRpb25PYmplY3QoXG5cdFx0XHRcdFx0c3ViQW5ub3RhdGlvbk9iamVjdCxcblx0XHRcdFx0XHRgJHtjdXJyZW50UHJvcGVydHlUYXJnZXR9LyR7c3ViQW5ub3RhdGlvbk9iamVjdEluZGV4fWAsXG5cdFx0XHRcdFx0YW5ub3RhdGlvbnNMaXN0cyxcblx0XHRcdFx0XHRvQ2FwYWJpbGl0aWVzXG5cdFx0XHRcdClcblx0XHRcdClcblx0XHR9O1xuXHRcdGlmIChhbm5vdGF0aW9uT2JqZWN0Lmxlbmd0aCA+IDApIHtcblx0XHRcdGlmIChhbm5vdGF0aW9uT2JqZWN0WzBdLmhhc093blByb3BlcnR5KFwiJFByb3BlcnR5UGF0aFwiKSkge1xuXHRcdFx0XHQodmFsdWUuQ29sbGVjdGlvbiBhcyBhbnkpLnR5cGUgPSBcIlByb3BlcnR5UGF0aFwiO1xuXHRcdFx0fSBlbHNlIGlmIChhbm5vdGF0aW9uT2JqZWN0WzBdLmhhc093blByb3BlcnR5KFwiJFBhdGhcIikpIHtcblx0XHRcdFx0KHZhbHVlLkNvbGxlY3Rpb24gYXMgYW55KS50eXBlID0gXCJQYXRoXCI7XG5cdFx0XHR9IGVsc2UgaWYgKGFubm90YXRpb25PYmplY3RbMF0uaGFzT3duUHJvcGVydHkoXCIkTmF2aWdhdGlvblByb3BlcnR5UGF0aFwiKSkge1xuXHRcdFx0XHQodmFsdWUuQ29sbGVjdGlvbiBhcyBhbnkpLnR5cGUgPSBcIk5hdmlnYXRpb25Qcm9wZXJ0eVBhdGhcIjtcblx0XHRcdH0gZWxzZSBpZiAoYW5ub3RhdGlvbk9iamVjdFswXS5oYXNPd25Qcm9wZXJ0eShcIiRBbm5vdGF0aW9uUGF0aFwiKSkge1xuXHRcdFx0XHQodmFsdWUuQ29sbGVjdGlvbiBhcyBhbnkpLnR5cGUgPSBcIkFubm90YXRpb25QYXRoXCI7XG5cdFx0XHR9IGVsc2UgaWYgKGFubm90YXRpb25PYmplY3RbMF0uaGFzT3duUHJvcGVydHkoXCIkVHlwZVwiKSkge1xuXHRcdFx0XHQodmFsdWUuQ29sbGVjdGlvbiBhcyBhbnkpLnR5cGUgPSBcIlJlY29yZFwiO1xuXHRcdFx0fSBlbHNlIGlmIChhbm5vdGF0aW9uT2JqZWN0WzBdLmhhc093blByb3BlcnR5KFwiJElmXCIpKSB7XG5cdFx0XHRcdCh2YWx1ZS5Db2xsZWN0aW9uIGFzIGFueSkudHlwZSA9IFwiSWZcIjtcblx0XHRcdH0gZWxzZSBpZiAoYW5ub3RhdGlvbk9iamVjdFswXS5oYXNPd25Qcm9wZXJ0eShcIiRPclwiKSkge1xuXHRcdFx0XHQodmFsdWUuQ29sbGVjdGlvbiBhcyBhbnkpLnR5cGUgPSBcIk9yXCI7XG5cdFx0XHR9IGVsc2UgaWYgKGFubm90YXRpb25PYmplY3RbMF0uaGFzT3duUHJvcGVydHkoXCIkQW5kXCIpKSB7XG5cdFx0XHRcdCh2YWx1ZS5Db2xsZWN0aW9uIGFzIGFueSkudHlwZSA9IFwiQW5kXCI7XG5cdFx0XHR9IGVsc2UgaWYgKGFubm90YXRpb25PYmplY3RbMF0uaGFzT3duUHJvcGVydHkoXCIkRXFcIikpIHtcblx0XHRcdFx0KHZhbHVlLkNvbGxlY3Rpb24gYXMgYW55KS50eXBlID0gXCJFcVwiO1xuXHRcdFx0fSBlbHNlIGlmIChhbm5vdGF0aW9uT2JqZWN0WzBdLmhhc093blByb3BlcnR5KFwiJE5lXCIpKSB7XG5cdFx0XHRcdCh2YWx1ZS5Db2xsZWN0aW9uIGFzIGFueSkudHlwZSA9IFwiTmVcIjtcblx0XHRcdH0gZWxzZSBpZiAoYW5ub3RhdGlvbk9iamVjdFswXS5oYXNPd25Qcm9wZXJ0eShcIiROb3RcIikpIHtcblx0XHRcdFx0KHZhbHVlLkNvbGxlY3Rpb24gYXMgYW55KS50eXBlID0gXCJOb3RcIjtcblx0XHRcdH0gZWxzZSBpZiAoYW5ub3RhdGlvbk9iamVjdFswXS5oYXNPd25Qcm9wZXJ0eShcIiRHdFwiKSkge1xuXHRcdFx0XHQodmFsdWUuQ29sbGVjdGlvbiBhcyBhbnkpLnR5cGUgPSBcIkd0XCI7XG5cdFx0XHR9IGVsc2UgaWYgKGFubm90YXRpb25PYmplY3RbMF0uaGFzT3duUHJvcGVydHkoXCIkR2VcIikpIHtcblx0XHRcdFx0KHZhbHVlLkNvbGxlY3Rpb24gYXMgYW55KS50eXBlID0gXCJHZVwiO1xuXHRcdFx0fSBlbHNlIGlmIChhbm5vdGF0aW9uT2JqZWN0WzBdLmhhc093blByb3BlcnR5KFwiJEx0XCIpKSB7XG5cdFx0XHRcdCh2YWx1ZS5Db2xsZWN0aW9uIGFzIGFueSkudHlwZSA9IFwiTHRcIjtcblx0XHRcdH0gZWxzZSBpZiAoYW5ub3RhdGlvbk9iamVjdFswXS5oYXNPd25Qcm9wZXJ0eShcIiRMZVwiKSkge1xuXHRcdFx0XHQodmFsdWUuQ29sbGVjdGlvbiBhcyBhbnkpLnR5cGUgPSBcIkxlXCI7XG5cdFx0XHR9IGVsc2UgaWYgKGFubm90YXRpb25PYmplY3RbMF0uaGFzT3duUHJvcGVydHkoXCIkQXBwbHlcIikpIHtcblx0XHRcdFx0KHZhbHVlLkNvbGxlY3Rpb24gYXMgYW55KS50eXBlID0gXCJBcHBseVwiO1xuXHRcdFx0fSBlbHNlIGlmICh0eXBlb2YgYW5ub3RhdGlvbk9iamVjdFswXSA9PT0gXCJvYmplY3RcIikge1xuXHRcdFx0XHQvLyAkVHlwZSBpcyBvcHRpb25hbC4uLlxuXHRcdFx0XHQodmFsdWUuQ29sbGVjdGlvbiBhcyBhbnkpLnR5cGUgPSBcIlJlY29yZFwiO1xuXHRcdFx0fSBlbHNlIHtcblx0XHRcdFx0KHZhbHVlLkNvbGxlY3Rpb24gYXMgYW55KS50eXBlID0gXCJTdHJpbmdcIjtcblx0XHRcdH1cblx0XHR9XG5cdH0gZWxzZSBpZiAoYW5ub3RhdGlvbk9iamVjdC4kUGF0aCAhPT0gdW5kZWZpbmVkKSB7XG5cdFx0dmFsdWUgPSB7IHR5cGU6IFwiUGF0aFwiLCBQYXRoOiBhbm5vdGF0aW9uT2JqZWN0LiRQYXRoIH07XG5cdH0gZWxzZSBpZiAoYW5ub3RhdGlvbk9iamVjdC4kRGVjaW1hbCAhPT0gdW5kZWZpbmVkKSB7XG5cdFx0dmFsdWUgPSB7IHR5cGU6IFwiRGVjaW1hbFwiLCBEZWNpbWFsOiBwYXJzZUZsb2F0KGFubm90YXRpb25PYmplY3QuJERlY2ltYWwpIH07XG5cdH0gZWxzZSBpZiAoYW5ub3RhdGlvbk9iamVjdC4kUHJvcGVydHlQYXRoICE9PSB1bmRlZmluZWQpIHtcblx0XHR2YWx1ZSA9IHsgdHlwZTogXCJQcm9wZXJ0eVBhdGhcIiwgUHJvcGVydHlQYXRoOiBhbm5vdGF0aW9uT2JqZWN0LiRQcm9wZXJ0eVBhdGggfTtcblx0fSBlbHNlIGlmIChhbm5vdGF0aW9uT2JqZWN0LiROYXZpZ2F0aW9uUHJvcGVydHlQYXRoICE9PSB1bmRlZmluZWQpIHtcblx0XHR2YWx1ZSA9IHtcblx0XHRcdHR5cGU6IFwiTmF2aWdhdGlvblByb3BlcnR5UGF0aFwiLFxuXHRcdFx0TmF2aWdhdGlvblByb3BlcnR5UGF0aDogYW5ub3RhdGlvbk9iamVjdC4kTmF2aWdhdGlvblByb3BlcnR5UGF0aFxuXHRcdH07XG5cdH0gZWxzZSBpZiAoYW5ub3RhdGlvbk9iamVjdC4kSWYgIT09IHVuZGVmaW5lZCkge1xuXHRcdHZhbHVlID0geyB0eXBlOiBcIklmXCIsIElmOiBhbm5vdGF0aW9uT2JqZWN0LiRJZiB9O1xuXHR9IGVsc2UgaWYgKGFubm90YXRpb25PYmplY3QuJEFuZCAhPT0gdW5kZWZpbmVkKSB7XG5cdFx0dmFsdWUgPSB7IHR5cGU6IFwiQW5kXCIsIEFuZDogYW5ub3RhdGlvbk9iamVjdC4kQW5kIH07XG5cdH0gZWxzZSBpZiAoYW5ub3RhdGlvbk9iamVjdC4kT3IgIT09IHVuZGVmaW5lZCkge1xuXHRcdHZhbHVlID0geyB0eXBlOiBcIk9yXCIsIE9yOiBhbm5vdGF0aW9uT2JqZWN0LiRPciB9O1xuXHR9IGVsc2UgaWYgKGFubm90YXRpb25PYmplY3QuJE5vdCAhPT0gdW5kZWZpbmVkKSB7XG5cdFx0dmFsdWUgPSB7IHR5cGU6IFwiTm90XCIsIE5vdDogYW5ub3RhdGlvbk9iamVjdC4kTm90IH07XG5cdH0gZWxzZSBpZiAoYW5ub3RhdGlvbk9iamVjdC4kRXEgIT09IHVuZGVmaW5lZCkge1xuXHRcdHZhbHVlID0geyB0eXBlOiBcIkVxXCIsIEVxOiBhbm5vdGF0aW9uT2JqZWN0LiRFcSB9O1xuXHR9IGVsc2UgaWYgKGFubm90YXRpb25PYmplY3QuJE5lICE9PSB1bmRlZmluZWQpIHtcblx0XHR2YWx1ZSA9IHsgdHlwZTogXCJOZVwiLCBOZTogYW5ub3RhdGlvbk9iamVjdC4kTmUgfTtcblx0fSBlbHNlIGlmIChhbm5vdGF0aW9uT2JqZWN0LiRHdCAhPT0gdW5kZWZpbmVkKSB7XG5cdFx0dmFsdWUgPSB7IHR5cGU6IFwiR3RcIiwgR3Q6IGFubm90YXRpb25PYmplY3QuJEd0IH07XG5cdH0gZWxzZSBpZiAoYW5ub3RhdGlvbk9iamVjdC4kR2UgIT09IHVuZGVmaW5lZCkge1xuXHRcdHZhbHVlID0geyB0eXBlOiBcIkdlXCIsIEdlOiBhbm5vdGF0aW9uT2JqZWN0LiRHZSB9O1xuXHR9IGVsc2UgaWYgKGFubm90YXRpb25PYmplY3QuJEx0ICE9PSB1bmRlZmluZWQpIHtcblx0XHR2YWx1ZSA9IHsgdHlwZTogXCJMdFwiLCBMdDogYW5ub3RhdGlvbk9iamVjdC4kTHQgfTtcblx0fSBlbHNlIGlmIChhbm5vdGF0aW9uT2JqZWN0LiRMZSAhPT0gdW5kZWZpbmVkKSB7XG5cdFx0dmFsdWUgPSB7IHR5cGU6IFwiTGVcIiwgTGU6IGFubm90YXRpb25PYmplY3QuJExlIH07XG5cdH0gZWxzZSBpZiAoYW5ub3RhdGlvbk9iamVjdC4kQXBwbHkgIT09IHVuZGVmaW5lZCkge1xuXHRcdHZhbHVlID0geyB0eXBlOiBcIkFwcGx5XCIsIEFwcGx5OiBhbm5vdGF0aW9uT2JqZWN0LiRBcHBseSwgRnVuY3Rpb246IGFubm90YXRpb25PYmplY3QuJEZ1bmN0aW9uIH07XG5cdH0gZWxzZSBpZiAoYW5ub3RhdGlvbk9iamVjdC4kQW5ub3RhdGlvblBhdGggIT09IHVuZGVmaW5lZCkge1xuXHRcdHZhbHVlID0geyB0eXBlOiBcIkFubm90YXRpb25QYXRoXCIsIEFubm90YXRpb25QYXRoOiBhbm5vdGF0aW9uT2JqZWN0LiRBbm5vdGF0aW9uUGF0aCB9O1xuXHR9IGVsc2UgaWYgKGFubm90YXRpb25PYmplY3QuJEVudW1NZW1iZXIgIT09IHVuZGVmaW5lZCkge1xuXHRcdHZhbHVlID0ge1xuXHRcdFx0dHlwZTogXCJFbnVtTWVtYmVyXCIsXG5cdFx0XHRFbnVtTWVtYmVyOiBgJHttYXBOYW1lVG9BbGlhcyhhbm5vdGF0aW9uT2JqZWN0LiRFbnVtTWVtYmVyLnNwbGl0KFwiL1wiKVswXSl9LyR7YW5ub3RhdGlvbk9iamVjdC4kRW51bU1lbWJlci5zcGxpdChcIi9cIilbMV19YFxuXHRcdH07XG5cdH0gZWxzZSB7XG5cdFx0dmFsdWUgPSB7XG5cdFx0XHR0eXBlOiBcIlJlY29yZFwiLFxuXHRcdFx0UmVjb3JkOiBwYXJzZUFubm90YXRpb25PYmplY3QoYW5ub3RhdGlvbk9iamVjdCwgY3VycmVudFRhcmdldCwgYW5ub3RhdGlvbnNMaXN0cywgb0NhcGFiaWxpdGllcylcblx0XHR9O1xuXHR9XG5cblx0cmV0dXJuIHtcblx0XHRuYW1lOiBwcm9wZXJ0eUtleSxcblx0XHR2YWx1ZVxuXHR9O1xufVxuZnVuY3Rpb24gbWFwTmFtZVRvQWxpYXMoYW5ub3RhdGlvbk5hbWU6IHN0cmluZyk6IHN0cmluZyB7XG5cdGxldCBbcGF0aFBhcnQsIGFubm9QYXJ0XSA9IGFubm90YXRpb25OYW1lLnNwbGl0KFwiQFwiKTtcblx0aWYgKCFhbm5vUGFydCkge1xuXHRcdGFubm9QYXJ0ID0gcGF0aFBhcnQ7XG5cdFx0cGF0aFBhcnQgPSBcIlwiO1xuXHR9IGVsc2Uge1xuXHRcdHBhdGhQYXJ0ICs9IFwiQFwiO1xuXHR9XG5cdGNvbnN0IGxhc3REb3QgPSBhbm5vUGFydC5sYXN0SW5kZXhPZihcIi5cIik7XG5cdHJldHVybiBgJHtwYXRoUGFydCArIFZPQ0FCVUxBUllfQUxJQVNbYW5ub1BhcnQuc3Vic3RyKDAsIGxhc3REb3QpXX0uJHthbm5vUGFydC5zdWJzdHIobGFzdERvdCArIDEpfWA7XG59XG5mdW5jdGlvbiBwYXJzZUFubm90YXRpb25PYmplY3QoXG5cdGFubm90YXRpb25PYmplY3Q6IGFueSxcblx0Y3VycmVudE9iamVjdFRhcmdldDogc3RyaW5nLFxuXHRhbm5vdGF0aW9uc0xpc3RzOiBSZWNvcmQ8c3RyaW5nLCBBbm5vdGF0aW9uTGlzdD4sXG5cdG9DYXBhYmlsaXRpZXM6IEVudmlyb25tZW50Q2FwYWJpbGl0aWVzXG4pOiBFeHByZXNzaW9uIHwgQW5ub3RhdGlvblJlY29yZCB8IEFubm90YXRpb24ge1xuXHRsZXQgcGFyc2VkQW5ub3RhdGlvbk9iamVjdDogYW55ID0ge307XG5cdGNvbnN0IHR5cGVPZk9iamVjdCA9IHR5cGVvZiBhbm5vdGF0aW9uT2JqZWN0O1xuXHRpZiAoYW5ub3RhdGlvbk9iamVjdCA9PT0gbnVsbCkge1xuXHRcdHBhcnNlZEFubm90YXRpb25PYmplY3QgPSB7IHR5cGU6IFwiTnVsbFwiLCBOdWxsOiBudWxsIH07XG5cdH0gZWxzZSBpZiAodHlwZU9mT2JqZWN0ID09PSBcInN0cmluZ1wiKSB7XG5cdFx0cGFyc2VkQW5ub3RhdGlvbk9iamVjdCA9IHsgdHlwZTogXCJTdHJpbmdcIiwgU3RyaW5nOiBhbm5vdGF0aW9uT2JqZWN0IH07XG5cdH0gZWxzZSBpZiAodHlwZU9mT2JqZWN0ID09PSBcImJvb2xlYW5cIikge1xuXHRcdHBhcnNlZEFubm90YXRpb25PYmplY3QgPSB7IHR5cGU6IFwiQm9vbFwiLCBCb29sOiBhbm5vdGF0aW9uT2JqZWN0IH07XG5cdH0gZWxzZSBpZiAodHlwZU9mT2JqZWN0ID09PSBcIm51bWJlclwiKSB7XG5cdFx0cGFyc2VkQW5ub3RhdGlvbk9iamVjdCA9IHsgdHlwZTogXCJJbnRcIiwgSW50OiBhbm5vdGF0aW9uT2JqZWN0IH07XG5cdH0gZWxzZSBpZiAoYW5ub3RhdGlvbk9iamVjdC4kQW5ub3RhdGlvblBhdGggIT09IHVuZGVmaW5lZCkge1xuXHRcdHBhcnNlZEFubm90YXRpb25PYmplY3QgPSB7IHR5cGU6IFwiQW5ub3RhdGlvblBhdGhcIiwgQW5ub3RhdGlvblBhdGg6IGFubm90YXRpb25PYmplY3QuJEFubm90YXRpb25QYXRoIH07XG5cdH0gZWxzZSBpZiAoYW5ub3RhdGlvbk9iamVjdC4kUGF0aCAhPT0gdW5kZWZpbmVkKSB7XG5cdFx0cGFyc2VkQW5ub3RhdGlvbk9iamVjdCA9IHsgdHlwZTogXCJQYXRoXCIsIFBhdGg6IGFubm90YXRpb25PYmplY3QuJFBhdGggfTtcblx0fSBlbHNlIGlmIChhbm5vdGF0aW9uT2JqZWN0LiREZWNpbWFsICE9PSB1bmRlZmluZWQpIHtcblx0XHRwYXJzZWRBbm5vdGF0aW9uT2JqZWN0ID0geyB0eXBlOiBcIkRlY2ltYWxcIiwgRGVjaW1hbDogcGFyc2VGbG9hdChhbm5vdGF0aW9uT2JqZWN0LiREZWNpbWFsKSB9O1xuXHR9IGVsc2UgaWYgKGFubm90YXRpb25PYmplY3QuJFByb3BlcnR5UGF0aCAhPT0gdW5kZWZpbmVkKSB7XG5cdFx0cGFyc2VkQW5ub3RhdGlvbk9iamVjdCA9IHsgdHlwZTogXCJQcm9wZXJ0eVBhdGhcIiwgUHJvcGVydHlQYXRoOiBhbm5vdGF0aW9uT2JqZWN0LiRQcm9wZXJ0eVBhdGggfTtcblx0fSBlbHNlIGlmIChhbm5vdGF0aW9uT2JqZWN0LiRJZiAhPT0gdW5kZWZpbmVkKSB7XG5cdFx0cGFyc2VkQW5ub3RhdGlvbk9iamVjdCA9IHsgdHlwZTogXCJJZlwiLCBJZjogYW5ub3RhdGlvbk9iamVjdC4kSWYgfTtcblx0fSBlbHNlIGlmIChhbm5vdGF0aW9uT2JqZWN0LiRBbmQgIT09IHVuZGVmaW5lZCkge1xuXHRcdHBhcnNlZEFubm90YXRpb25PYmplY3QgPSB7IHR5cGU6IFwiQW5kXCIsIEFuZDogYW5ub3RhdGlvbk9iamVjdC4kQW5kIH07XG5cdH0gZWxzZSBpZiAoYW5ub3RhdGlvbk9iamVjdC4kT3IgIT09IHVuZGVmaW5lZCkge1xuXHRcdHBhcnNlZEFubm90YXRpb25PYmplY3QgPSB7IHR5cGU6IFwiT3JcIiwgT3I6IGFubm90YXRpb25PYmplY3QuJE9yIH07XG5cdH0gZWxzZSBpZiAoYW5ub3RhdGlvbk9iamVjdC4kTm90ICE9PSB1bmRlZmluZWQpIHtcblx0XHRwYXJzZWRBbm5vdGF0aW9uT2JqZWN0ID0geyB0eXBlOiBcIk5vdFwiLCBOb3Q6IGFubm90YXRpb25PYmplY3QuJE5vdCB9O1xuXHR9IGVsc2UgaWYgKGFubm90YXRpb25PYmplY3QuJEVxICE9PSB1bmRlZmluZWQpIHtcblx0XHRwYXJzZWRBbm5vdGF0aW9uT2JqZWN0ID0geyB0eXBlOiBcIkVxXCIsIEVxOiBhbm5vdGF0aW9uT2JqZWN0LiRFcSB9O1xuXHR9IGVsc2UgaWYgKGFubm90YXRpb25PYmplY3QuJE5lICE9PSB1bmRlZmluZWQpIHtcblx0XHRwYXJzZWRBbm5vdGF0aW9uT2JqZWN0ID0geyB0eXBlOiBcIk5lXCIsIE5lOiBhbm5vdGF0aW9uT2JqZWN0LiROZSB9O1xuXHR9IGVsc2UgaWYgKGFubm90YXRpb25PYmplY3QuJEd0ICE9PSB1bmRlZmluZWQpIHtcblx0XHRwYXJzZWRBbm5vdGF0aW9uT2JqZWN0ID0geyB0eXBlOiBcIkd0XCIsIEd0OiBhbm5vdGF0aW9uT2JqZWN0LiRHdCB9O1xuXHR9IGVsc2UgaWYgKGFubm90YXRpb25PYmplY3QuJEdlICE9PSB1bmRlZmluZWQpIHtcblx0XHRwYXJzZWRBbm5vdGF0aW9uT2JqZWN0ID0geyB0eXBlOiBcIkdlXCIsIEdlOiBhbm5vdGF0aW9uT2JqZWN0LiRHZSB9O1xuXHR9IGVsc2UgaWYgKGFubm90YXRpb25PYmplY3QuJEx0ICE9PSB1bmRlZmluZWQpIHtcblx0XHRwYXJzZWRBbm5vdGF0aW9uT2JqZWN0ID0geyB0eXBlOiBcIkx0XCIsIEx0OiBhbm5vdGF0aW9uT2JqZWN0LiRMdCB9O1xuXHR9IGVsc2UgaWYgKGFubm90YXRpb25PYmplY3QuJExlICE9PSB1bmRlZmluZWQpIHtcblx0XHRwYXJzZWRBbm5vdGF0aW9uT2JqZWN0ID0geyB0eXBlOiBcIkxlXCIsIExlOiBhbm5vdGF0aW9uT2JqZWN0LiRMZSB9O1xuXHR9IGVsc2UgaWYgKGFubm90YXRpb25PYmplY3QuJEFwcGx5ICE9PSB1bmRlZmluZWQpIHtcblx0XHRwYXJzZWRBbm5vdGF0aW9uT2JqZWN0ID0geyB0eXBlOiBcIkFwcGx5XCIsIEFwcGx5OiBhbm5vdGF0aW9uT2JqZWN0LiRBcHBseSwgRnVuY3Rpb246IGFubm90YXRpb25PYmplY3QuJEZ1bmN0aW9uIH07XG5cdH0gZWxzZSBpZiAoYW5ub3RhdGlvbk9iamVjdC4kTmF2aWdhdGlvblByb3BlcnR5UGF0aCAhPT0gdW5kZWZpbmVkKSB7XG5cdFx0cGFyc2VkQW5ub3RhdGlvbk9iamVjdCA9IHtcblx0XHRcdHR5cGU6IFwiTmF2aWdhdGlvblByb3BlcnR5UGF0aFwiLFxuXHRcdFx0TmF2aWdhdGlvblByb3BlcnR5UGF0aDogYW5ub3RhdGlvbk9iamVjdC4kTmF2aWdhdGlvblByb3BlcnR5UGF0aFxuXHRcdH07XG5cdH0gZWxzZSBpZiAoYW5ub3RhdGlvbk9iamVjdC4kRW51bU1lbWJlciAhPT0gdW5kZWZpbmVkKSB7XG5cdFx0cGFyc2VkQW5ub3RhdGlvbk9iamVjdCA9IHtcblx0XHRcdHR5cGU6IFwiRW51bU1lbWJlclwiLFxuXHRcdFx0RW51bU1lbWJlcjogYCR7bWFwTmFtZVRvQWxpYXMoYW5ub3RhdGlvbk9iamVjdC4kRW51bU1lbWJlci5zcGxpdChcIi9cIilbMF0pfS8ke2Fubm90YXRpb25PYmplY3QuJEVudW1NZW1iZXIuc3BsaXQoXCIvXCIpWzFdfWBcblx0XHR9O1xuXHR9IGVsc2UgaWYgKEFycmF5LmlzQXJyYXkoYW5ub3RhdGlvbk9iamVjdCkpIHtcblx0XHRjb25zdCBwYXJzZWRBbm5vdGF0aW9uQ29sbGVjdGlvbiA9IHBhcnNlZEFubm90YXRpb25PYmplY3Q7XG5cdFx0cGFyc2VkQW5ub3RhdGlvbkNvbGxlY3Rpb24uY29sbGVjdGlvbiA9IGFubm90YXRpb25PYmplY3QubWFwKChzdWJBbm5vdGF0aW9uT2JqZWN0LCBzdWJBbm5vdGF0aW9uSW5kZXgpID0+XG5cdFx0XHRwYXJzZUFubm90YXRpb25PYmplY3Qoc3ViQW5ub3RhdGlvbk9iamVjdCwgYCR7Y3VycmVudE9iamVjdFRhcmdldH0vJHtzdWJBbm5vdGF0aW9uSW5kZXh9YCwgYW5ub3RhdGlvbnNMaXN0cywgb0NhcGFiaWxpdGllcylcblx0XHQpO1xuXHRcdGlmIChhbm5vdGF0aW9uT2JqZWN0Lmxlbmd0aCA+IDApIHtcblx0XHRcdGlmIChhbm5vdGF0aW9uT2JqZWN0WzBdLmhhc093blByb3BlcnR5KFwiJFByb3BlcnR5UGF0aFwiKSkge1xuXHRcdFx0XHRwYXJzZWRBbm5vdGF0aW9uQ29sbGVjdGlvbi5jb2xsZWN0aW9uLnR5cGUgPSBcIlByb3BlcnR5UGF0aFwiO1xuXHRcdFx0fSBlbHNlIGlmIChhbm5vdGF0aW9uT2JqZWN0WzBdLmhhc093blByb3BlcnR5KFwiJFBhdGhcIikpIHtcblx0XHRcdFx0cGFyc2VkQW5ub3RhdGlvbkNvbGxlY3Rpb24uY29sbGVjdGlvbi50eXBlID0gXCJQYXRoXCI7XG5cdFx0XHR9IGVsc2UgaWYgKGFubm90YXRpb25PYmplY3RbMF0uaGFzT3duUHJvcGVydHkoXCIkTmF2aWdhdGlvblByb3BlcnR5UGF0aFwiKSkge1xuXHRcdFx0XHRwYXJzZWRBbm5vdGF0aW9uQ29sbGVjdGlvbi5jb2xsZWN0aW9uLnR5cGUgPSBcIk5hdmlnYXRpb25Qcm9wZXJ0eVBhdGhcIjtcblx0XHRcdH0gZWxzZSBpZiAoYW5ub3RhdGlvbk9iamVjdFswXS5oYXNPd25Qcm9wZXJ0eShcIiRBbm5vdGF0aW9uUGF0aFwiKSkge1xuXHRcdFx0XHRwYXJzZWRBbm5vdGF0aW9uQ29sbGVjdGlvbi5jb2xsZWN0aW9uLnR5cGUgPSBcIkFubm90YXRpb25QYXRoXCI7XG5cdFx0XHR9IGVsc2UgaWYgKGFubm90YXRpb25PYmplY3RbMF0uaGFzT3duUHJvcGVydHkoXCIkVHlwZVwiKSkge1xuXHRcdFx0XHRwYXJzZWRBbm5vdGF0aW9uQ29sbGVjdGlvbi5jb2xsZWN0aW9uLnR5cGUgPSBcIlJlY29yZFwiO1xuXHRcdFx0fSBlbHNlIGlmIChhbm5vdGF0aW9uT2JqZWN0WzBdLmhhc093blByb3BlcnR5KFwiJElmXCIpKSB7XG5cdFx0XHRcdHBhcnNlZEFubm90YXRpb25Db2xsZWN0aW9uLmNvbGxlY3Rpb24udHlwZSA9IFwiSWZcIjtcblx0XHRcdH0gZWxzZSBpZiAoYW5ub3RhdGlvbk9iamVjdFswXS5oYXNPd25Qcm9wZXJ0eShcIiRBbmRcIikpIHtcblx0XHRcdFx0cGFyc2VkQW5ub3RhdGlvbkNvbGxlY3Rpb24uY29sbGVjdGlvbi50eXBlID0gXCJBbmRcIjtcblx0XHRcdH0gZWxzZSBpZiAoYW5ub3RhdGlvbk9iamVjdFswXS5oYXNPd25Qcm9wZXJ0eShcIiRPclwiKSkge1xuXHRcdFx0XHRwYXJzZWRBbm5vdGF0aW9uQ29sbGVjdGlvbi5jb2xsZWN0aW9uLnR5cGUgPSBcIk9yXCI7XG5cdFx0XHR9IGVsc2UgaWYgKGFubm90YXRpb25PYmplY3RbMF0uaGFzT3duUHJvcGVydHkoXCIkRXFcIikpIHtcblx0XHRcdFx0cGFyc2VkQW5ub3RhdGlvbkNvbGxlY3Rpb24uY29sbGVjdGlvbi50eXBlID0gXCJFcVwiO1xuXHRcdFx0fSBlbHNlIGlmIChhbm5vdGF0aW9uT2JqZWN0WzBdLmhhc093blByb3BlcnR5KFwiJE5lXCIpKSB7XG5cdFx0XHRcdHBhcnNlZEFubm90YXRpb25Db2xsZWN0aW9uLmNvbGxlY3Rpb24udHlwZSA9IFwiTmVcIjtcblx0XHRcdH0gZWxzZSBpZiAoYW5ub3RhdGlvbk9iamVjdFswXS5oYXNPd25Qcm9wZXJ0eShcIiROb3RcIikpIHtcblx0XHRcdFx0cGFyc2VkQW5ub3RhdGlvbkNvbGxlY3Rpb24uY29sbGVjdGlvbi50eXBlID0gXCJOb3RcIjtcblx0XHRcdH0gZWxzZSBpZiAoYW5ub3RhdGlvbk9iamVjdFswXS5oYXNPd25Qcm9wZXJ0eShcIiRHdFwiKSkge1xuXHRcdFx0XHRwYXJzZWRBbm5vdGF0aW9uQ29sbGVjdGlvbi5jb2xsZWN0aW9uLnR5cGUgPSBcIkd0XCI7XG5cdFx0XHR9IGVsc2UgaWYgKGFubm90YXRpb25PYmplY3RbMF0uaGFzT3duUHJvcGVydHkoXCIkR2VcIikpIHtcblx0XHRcdFx0cGFyc2VkQW5ub3RhdGlvbkNvbGxlY3Rpb24uY29sbGVjdGlvbi50eXBlID0gXCJHZVwiO1xuXHRcdFx0fSBlbHNlIGlmIChhbm5vdGF0aW9uT2JqZWN0WzBdLmhhc093blByb3BlcnR5KFwiJEx0XCIpKSB7XG5cdFx0XHRcdHBhcnNlZEFubm90YXRpb25Db2xsZWN0aW9uLmNvbGxlY3Rpb24udHlwZSA9IFwiTHRcIjtcblx0XHRcdH0gZWxzZSBpZiAoYW5ub3RhdGlvbk9iamVjdFswXS5oYXNPd25Qcm9wZXJ0eShcIiRMZVwiKSkge1xuXHRcdFx0XHRwYXJzZWRBbm5vdGF0aW9uQ29sbGVjdGlvbi5jb2xsZWN0aW9uLnR5cGUgPSBcIkxlXCI7XG5cdFx0XHR9IGVsc2UgaWYgKGFubm90YXRpb25PYmplY3RbMF0uaGFzT3duUHJvcGVydHkoXCIkQXBwbHlcIikpIHtcblx0XHRcdFx0cGFyc2VkQW5ub3RhdGlvbkNvbGxlY3Rpb24uY29sbGVjdGlvbi50eXBlID0gXCJBcHBseVwiO1xuXHRcdFx0fSBlbHNlIGlmICh0eXBlb2YgYW5ub3RhdGlvbk9iamVjdFswXSA9PT0gXCJvYmplY3RcIikge1xuXHRcdFx0XHRwYXJzZWRBbm5vdGF0aW9uQ29sbGVjdGlvbi5jb2xsZWN0aW9uLnR5cGUgPSBcIlJlY29yZFwiO1xuXHRcdFx0fSBlbHNlIHtcblx0XHRcdFx0cGFyc2VkQW5ub3RhdGlvbkNvbGxlY3Rpb24uY29sbGVjdGlvbi50eXBlID0gXCJTdHJpbmdcIjtcblx0XHRcdH1cblx0XHR9XG5cdH0gZWxzZSB7XG5cdFx0aWYgKGFubm90YXRpb25PYmplY3QuJFR5cGUpIHtcblx0XHRcdGNvbnN0IHR5cGVWYWx1ZSA9IGFubm90YXRpb25PYmplY3QuJFR5cGU7XG5cdFx0XHRwYXJzZWRBbm5vdGF0aW9uT2JqZWN0LnR5cGUgPSB0eXBlVmFsdWU7IC8vYCR7dHlwZUFsaWFzfS4ke3R5cGVUZXJtfWA7XG5cdFx0fVxuXHRcdGNvbnN0IHByb3BlcnR5VmFsdWVzOiBhbnkgPSBbXTtcblx0XHRPYmplY3Qua2V5cyhhbm5vdGF0aW9uT2JqZWN0KS5mb3JFYWNoKChwcm9wZXJ0eUtleSkgPT4ge1xuXHRcdFx0aWYgKFxuXHRcdFx0XHRwcm9wZXJ0eUtleSAhPT0gXCIkVHlwZVwiICYmXG5cdFx0XHRcdHByb3BlcnR5S2V5ICE9PSBcIiRJZlwiICYmXG5cdFx0XHRcdHByb3BlcnR5S2V5ICE9PSBcIiRBcHBseVwiICYmXG5cdFx0XHRcdHByb3BlcnR5S2V5ICE9PSBcIiRBbmRcIiAmJlxuXHRcdFx0XHRwcm9wZXJ0eUtleSAhPT0gXCIkT3JcIiAmJlxuXHRcdFx0XHRwcm9wZXJ0eUtleSAhPT0gXCIkTmVcIiAmJlxuXHRcdFx0XHRwcm9wZXJ0eUtleSAhPT0gXCIkR3RcIiAmJlxuXHRcdFx0XHRwcm9wZXJ0eUtleSAhPT0gXCIkR2VcIiAmJlxuXHRcdFx0XHRwcm9wZXJ0eUtleSAhPT0gXCIkTHRcIiAmJlxuXHRcdFx0XHRwcm9wZXJ0eUtleSAhPT0gXCIkTGVcIiAmJlxuXHRcdFx0XHRwcm9wZXJ0eUtleSAhPT0gXCIkTm90XCIgJiZcblx0XHRcdFx0cHJvcGVydHlLZXkgIT09IFwiJEVxXCIgJiZcblx0XHRcdFx0IXByb3BlcnR5S2V5LnN0YXJ0c1dpdGgoXCJAXCIpXG5cdFx0XHQpIHtcblx0XHRcdFx0cHJvcGVydHlWYWx1ZXMucHVzaChcblx0XHRcdFx0XHRwYXJzZVByb3BlcnR5VmFsdWUoYW5ub3RhdGlvbk9iamVjdFtwcm9wZXJ0eUtleV0sIHByb3BlcnR5S2V5LCBjdXJyZW50T2JqZWN0VGFyZ2V0LCBhbm5vdGF0aW9uc0xpc3RzLCBvQ2FwYWJpbGl0aWVzKVxuXHRcdFx0XHQpO1xuXHRcdFx0fSBlbHNlIGlmIChwcm9wZXJ0eUtleS5zdGFydHNXaXRoKFwiQFwiKSkge1xuXHRcdFx0XHQvLyBBbm5vdGF0aW9uIG9mIGFubm90YXRpb25cblx0XHRcdFx0Y3JlYXRlQW5ub3RhdGlvbkxpc3RzKFxuXHRcdFx0XHRcdHsgW3Byb3BlcnR5S2V5XTogYW5ub3RhdGlvbk9iamVjdFtwcm9wZXJ0eUtleV0gfSxcblx0XHRcdFx0XHRjdXJyZW50T2JqZWN0VGFyZ2V0LFxuXHRcdFx0XHRcdGFubm90YXRpb25zTGlzdHMsXG5cdFx0XHRcdFx0b0NhcGFiaWxpdGllc1xuXHRcdFx0XHQpO1xuXHRcdFx0fVxuXHRcdH0pO1xuXHRcdHBhcnNlZEFubm90YXRpb25PYmplY3QucHJvcGVydHlWYWx1ZXMgPSBwcm9wZXJ0eVZhbHVlcztcblx0fVxuXHRyZXR1cm4gcGFyc2VkQW5ub3RhdGlvbk9iamVjdDtcbn1cbmZ1bmN0aW9uIGdldE9yQ3JlYXRlQW5ub3RhdGlvbkxpc3QodGFyZ2V0OiBzdHJpbmcsIGFubm90YXRpb25zTGlzdHM6IFJlY29yZDxzdHJpbmcsIEFubm90YXRpb25MaXN0Pik6IEFubm90YXRpb25MaXN0IHtcblx0aWYgKCFhbm5vdGF0aW9uc0xpc3RzLmhhc093blByb3BlcnR5KHRhcmdldCkpIHtcblx0XHRhbm5vdGF0aW9uc0xpc3RzW3RhcmdldF0gPSB7XG5cdFx0XHR0YXJnZXQ6IHRhcmdldCxcblx0XHRcdGFubm90YXRpb25zOiBbXVxuXHRcdH07XG5cdH1cblx0cmV0dXJuIGFubm90YXRpb25zTGlzdHNbdGFyZ2V0XTtcbn1cblxuZnVuY3Rpb24gY3JlYXRlUmVmZXJlbmNlRmFjZXRJZChyZWZlcmVuY2VGYWNldDogYW55KSB7XG5cdGNvbnN0IGlkID0gcmVmZXJlbmNlRmFjZXQuSUQgPz8gcmVmZXJlbmNlRmFjZXQuVGFyZ2V0LiRBbm5vdGF0aW9uUGF0aDtcblx0cmV0dXJuIGlkID8gcHJlcGFyZUlkKGlkKSA6IGlkO1xufVxuXG5mdW5jdGlvbiByZW1vdmVDaGFydEFubm90YXRpb25zKGFubm90YXRpb25PYmplY3Q6IGFueSkge1xuXHRyZXR1cm4gYW5ub3RhdGlvbk9iamVjdC5maWx0ZXIoKG9SZWNvcmQ6IGFueSkgPT4ge1xuXHRcdGlmIChvUmVjb3JkLlRhcmdldCAmJiBvUmVjb3JkLlRhcmdldC4kQW5ub3RhdGlvblBhdGgpIHtcblx0XHRcdHJldHVybiBvUmVjb3JkLlRhcmdldC4kQW5ub3RhdGlvblBhdGguaW5kZXhPZihgQCR7VUlBbm5vdGF0aW9uVGVybXMuQ2hhcnR9YCkgPT09IC0xO1xuXHRcdH0gZWxzZSB7XG5cdFx0XHRyZXR1cm4gdHJ1ZTtcblx0XHR9XG5cdH0pO1xufVxuXG5mdW5jdGlvbiByZW1vdmVJQk5Bbm5vdGF0aW9ucyhhbm5vdGF0aW9uT2JqZWN0OiBhbnkpIHtcblx0cmV0dXJuIGFubm90YXRpb25PYmplY3QuZmlsdGVyKChvUmVjb3JkOiBhbnkpID0+IHtcblx0XHRyZXR1cm4gb1JlY29yZC4kVHlwZSAhPT0gVUlBbm5vdGF0aW9uVHlwZXMuRGF0YUZpZWxkRm9ySW50ZW50QmFzZWROYXZpZ2F0aW9uO1xuXHR9KTtcbn1cblxuZnVuY3Rpb24gaGFuZGxlUHJlc2VudGF0aW9uVmFyaWFudChhbm5vdGF0aW9uT2JqZWN0OiBhbnkpIHtcblx0cmV0dXJuIGFubm90YXRpb25PYmplY3QuZmlsdGVyKChvUmVjb3JkOiBhbnkpID0+IHtcblx0XHRyZXR1cm4gb1JlY29yZC4kQW5ub3RhdGlvblBhdGggIT09IGBAJHtVSUFubm90YXRpb25UZXJtcy5DaGFydH1gO1xuXHR9KTtcbn1cblxuZnVuY3Rpb24gY3JlYXRlQW5ub3RhdGlvbkxpc3RzKFxuXHRhbm5vdGF0aW9uT2JqZWN0czogYW55LFxuXHRhbm5vdGF0aW9uVGFyZ2V0OiBzdHJpbmcsXG5cdGFubm90YXRpb25MaXN0czogUmVjb3JkPHN0cmluZywgQW5ub3RhdGlvbkxpc3Q+LFxuXHRvQ2FwYWJpbGl0aWVzOiBFbnZpcm9ubWVudENhcGFiaWxpdGllc1xuKSB7XG5cdGlmIChPYmplY3Qua2V5cyhhbm5vdGF0aW9uT2JqZWN0cykubGVuZ3RoID09PSAwKSB7XG5cdFx0cmV0dXJuO1xuXHR9XG5cdGNvbnN0IG91dEFubm90YXRpb25PYmplY3QgPSBnZXRPckNyZWF0ZUFubm90YXRpb25MaXN0KGFubm90YXRpb25UYXJnZXQsIGFubm90YXRpb25MaXN0cyk7XG5cdGlmICghb0NhcGFiaWxpdGllcy5NaWNyb0NoYXJ0KSB7XG5cdFx0ZGVsZXRlIGFubm90YXRpb25PYmplY3RzW2BAJHtVSUFubm90YXRpb25UZXJtcy5DaGFydH1gXTtcblx0fVxuXG5cdGZvciAobGV0IGFubm90YXRpb25LZXkgaW4gYW5ub3RhdGlvbk9iamVjdHMpIHtcblx0XHRsZXQgYW5ub3RhdGlvbk9iamVjdCA9IGFubm90YXRpb25PYmplY3RzW2Fubm90YXRpb25LZXldO1xuXHRcdHN3aXRjaCAoYW5ub3RhdGlvbktleSkge1xuXHRcdFx0Y2FzZSBgQCR7VUlBbm5vdGF0aW9uVGVybXMuSGVhZGVyRmFjZXRzfWA6XG5cdFx0XHRcdGlmICghb0NhcGFiaWxpdGllcy5NaWNyb0NoYXJ0KSB7XG5cdFx0XHRcdFx0YW5ub3RhdGlvbk9iamVjdCA9IHJlbW92ZUNoYXJ0QW5ub3RhdGlvbnMoYW5ub3RhdGlvbk9iamVjdCk7XG5cdFx0XHRcdFx0YW5ub3RhdGlvbk9iamVjdHNbYW5ub3RhdGlvbktleV0gPSBhbm5vdGF0aW9uT2JqZWN0O1xuXHRcdFx0XHR9XG5cdFx0XHRcdGJyZWFrO1xuXHRcdFx0Y2FzZSBgQCR7VUlBbm5vdGF0aW9uVGVybXMuSWRlbnRpZmljYXRpb259YDpcblx0XHRcdFx0aWYgKCFvQ2FwYWJpbGl0aWVzLkludGVudEJhc2VkTmF2aWdhdGlvbikge1xuXHRcdFx0XHRcdGFubm90YXRpb25PYmplY3QgPSByZW1vdmVJQk5Bbm5vdGF0aW9ucyhhbm5vdGF0aW9uT2JqZWN0KTtcblx0XHRcdFx0XHRhbm5vdGF0aW9uT2JqZWN0c1thbm5vdGF0aW9uS2V5XSA9IGFubm90YXRpb25PYmplY3Q7XG5cdFx0XHRcdH1cblx0XHRcdFx0YnJlYWs7XG5cdFx0XHRjYXNlIGBAJHtVSUFubm90YXRpb25UZXJtcy5MaW5lSXRlbX1gOlxuXHRcdFx0XHRpZiAoIW9DYXBhYmlsaXRpZXMuSW50ZW50QmFzZWROYXZpZ2F0aW9uKSB7XG5cdFx0XHRcdFx0YW5ub3RhdGlvbk9iamVjdCA9IHJlbW92ZUlCTkFubm90YXRpb25zKGFubm90YXRpb25PYmplY3QpO1xuXHRcdFx0XHRcdGFubm90YXRpb25PYmplY3RzW2Fubm90YXRpb25LZXldID0gYW5ub3RhdGlvbk9iamVjdDtcblx0XHRcdFx0fVxuXHRcdFx0XHRpZiAoIW9DYXBhYmlsaXRpZXMuTWljcm9DaGFydCkge1xuXHRcdFx0XHRcdGFubm90YXRpb25PYmplY3QgPSByZW1vdmVDaGFydEFubm90YXRpb25zKGFubm90YXRpb25PYmplY3QpO1xuXHRcdFx0XHRcdGFubm90YXRpb25PYmplY3RzW2Fubm90YXRpb25LZXldID0gYW5ub3RhdGlvbk9iamVjdDtcblx0XHRcdFx0fVxuXHRcdFx0XHRicmVhaztcblx0XHRcdGNhc2UgYEAke1VJQW5ub3RhdGlvblRlcm1zLkZpZWxkR3JvdXB9YDpcblx0XHRcdFx0aWYgKCFvQ2FwYWJpbGl0aWVzLkludGVudEJhc2VkTmF2aWdhdGlvbikge1xuXHRcdFx0XHRcdGFubm90YXRpb25PYmplY3QuRGF0YSA9IHJlbW92ZUlCTkFubm90YXRpb25zKGFubm90YXRpb25PYmplY3QuRGF0YSk7XG5cdFx0XHRcdFx0YW5ub3RhdGlvbk9iamVjdHNbYW5ub3RhdGlvbktleV0gPSBhbm5vdGF0aW9uT2JqZWN0O1xuXHRcdFx0XHR9XG5cdFx0XHRcdGlmICghb0NhcGFiaWxpdGllcy5NaWNyb0NoYXJ0KSB7XG5cdFx0XHRcdFx0YW5ub3RhdGlvbk9iamVjdC5EYXRhID0gcmVtb3ZlQ2hhcnRBbm5vdGF0aW9ucyhhbm5vdGF0aW9uT2JqZWN0LkRhdGEpO1xuXHRcdFx0XHRcdGFubm90YXRpb25PYmplY3RzW2Fubm90YXRpb25LZXldID0gYW5ub3RhdGlvbk9iamVjdDtcblx0XHRcdFx0fVxuXHRcdFx0XHRicmVhaztcblx0XHRcdGNhc2UgYEAke1VJQW5ub3RhdGlvblRlcm1zLlByZXNlbnRhdGlvblZhcmlhbnR9YDpcblx0XHRcdFx0aWYgKCFvQ2FwYWJpbGl0aWVzLkNoYXJ0ICYmIGFubm90YXRpb25PYmplY3QuVmlzdWFsaXphdGlvbnMpIHtcblx0XHRcdFx0XHRhbm5vdGF0aW9uT2JqZWN0LlZpc3VhbGl6YXRpb25zID0gaGFuZGxlUHJlc2VudGF0aW9uVmFyaWFudChhbm5vdGF0aW9uT2JqZWN0LlZpc3VhbGl6YXRpb25zKTtcblx0XHRcdFx0XHRhbm5vdGF0aW9uT2JqZWN0c1thbm5vdGF0aW9uS2V5XSA9IGFubm90YXRpb25PYmplY3Q7XG5cdFx0XHRcdH1cblx0XHRcdFx0YnJlYWs7XG5cdFx0XHRkZWZhdWx0OlxuXHRcdFx0XHRicmVhaztcblx0XHR9XG5cblx0XHRsZXQgY3VycmVudE91dEFubm90YXRpb25PYmplY3QgPSBvdXRBbm5vdGF0aW9uT2JqZWN0O1xuXG5cdFx0Ly8gQ2hlY2sgZm9yIGFubm90YXRpb24gb2YgYW5ub3RhdGlvblxuXHRcdGNvbnN0IGFubm90YXRpb25PZkFubm90YXRpb25TcGxpdCA9IGFubm90YXRpb25LZXkuc3BsaXQoXCJAXCIpO1xuXHRcdGlmIChhbm5vdGF0aW9uT2ZBbm5vdGF0aW9uU3BsaXQubGVuZ3RoID4gMikge1xuXHRcdFx0Y3VycmVudE91dEFubm90YXRpb25PYmplY3QgPSBnZXRPckNyZWF0ZUFubm90YXRpb25MaXN0KFxuXHRcdFx0XHRgJHthbm5vdGF0aW9uVGFyZ2V0fUAke2Fubm90YXRpb25PZkFubm90YXRpb25TcGxpdFsxXX1gLFxuXHRcdFx0XHRhbm5vdGF0aW9uTGlzdHNcblx0XHRcdCk7XG5cdFx0XHRhbm5vdGF0aW9uS2V5ID0gYW5ub3RhdGlvbk9mQW5ub3RhdGlvblNwbGl0WzJdO1xuXHRcdH0gZWxzZSB7XG5cdFx0XHRhbm5vdGF0aW9uS2V5ID0gYW5ub3RhdGlvbk9mQW5ub3RhdGlvblNwbGl0WzFdO1xuXHRcdH1cblxuXHRcdGNvbnN0IGFubm90YXRpb25RdWFsaWZpZXJTcGxpdCA9IGFubm90YXRpb25LZXkuc3BsaXQoXCIjXCIpO1xuXHRcdGNvbnN0IHF1YWxpZmllciA9IGFubm90YXRpb25RdWFsaWZpZXJTcGxpdFsxXTtcblx0XHRhbm5vdGF0aW9uS2V5ID0gYW5ub3RhdGlvblF1YWxpZmllclNwbGl0WzBdO1xuXG5cdFx0Y29uc3QgcGFyc2VkQW5ub3RhdGlvbk9iamVjdDogYW55ID0ge1xuXHRcdFx0dGVybTogYCR7YW5ub3RhdGlvbktleX1gLFxuXHRcdFx0cXVhbGlmaWVyOiBxdWFsaWZpZXJcblx0XHR9O1xuXHRcdGxldCBjdXJyZW50QW5ub3RhdGlvblRhcmdldCA9IGAke2Fubm90YXRpb25UYXJnZXR9QCR7cGFyc2VkQW5ub3RhdGlvbk9iamVjdC50ZXJtfWA7XG5cdFx0aWYgKHF1YWxpZmllcikge1xuXHRcdFx0Y3VycmVudEFubm90YXRpb25UYXJnZXQgKz0gYCMke3F1YWxpZmllcn1gO1xuXHRcdH1cblx0XHRsZXQgaXNDb2xsZWN0aW9uID0gZmFsc2U7XG5cdFx0Y29uc3QgdHlwZW9mQW5ub3RhdGlvbiA9IHR5cGVvZiBhbm5vdGF0aW9uT2JqZWN0O1xuXHRcdGlmIChhbm5vdGF0aW9uT2JqZWN0ID09PSBudWxsKSB7XG5cdFx0XHRwYXJzZWRBbm5vdGF0aW9uT2JqZWN0LnZhbHVlID0geyB0eXBlOiBcIkJvb2xcIiwgQm9vbDogYW5ub3RhdGlvbk9iamVjdCB9O1xuXHRcdH0gZWxzZSBpZiAodHlwZW9mQW5ub3RhdGlvbiA9PT0gXCJzdHJpbmdcIikge1xuXHRcdFx0cGFyc2VkQW5ub3RhdGlvbk9iamVjdC52YWx1ZSA9IHsgdHlwZTogXCJTdHJpbmdcIiwgU3RyaW5nOiBhbm5vdGF0aW9uT2JqZWN0IH07XG5cdFx0fSBlbHNlIGlmICh0eXBlb2ZBbm5vdGF0aW9uID09PSBcImJvb2xlYW5cIikge1xuXHRcdFx0cGFyc2VkQW5ub3RhdGlvbk9iamVjdC52YWx1ZSA9IHsgdHlwZTogXCJCb29sXCIsIEJvb2w6IGFubm90YXRpb25PYmplY3QgfTtcblx0XHR9IGVsc2UgaWYgKHR5cGVvZkFubm90YXRpb24gPT09IFwibnVtYmVyXCIpIHtcblx0XHRcdHBhcnNlZEFubm90YXRpb25PYmplY3QudmFsdWUgPSB7IHR5cGU6IFwiSW50XCIsIEludDogYW5ub3RhdGlvbk9iamVjdCB9O1xuXHRcdH0gZWxzZSBpZiAoYW5ub3RhdGlvbk9iamVjdC4kSWYgIT09IHVuZGVmaW5lZCkge1xuXHRcdFx0cGFyc2VkQW5ub3RhdGlvbk9iamVjdC52YWx1ZSA9IHsgdHlwZTogXCJJZlwiLCBJZjogYW5ub3RhdGlvbk9iamVjdC4kSWYgfTtcblx0XHR9IGVsc2UgaWYgKGFubm90YXRpb25PYmplY3QuJEFuZCAhPT0gdW5kZWZpbmVkKSB7XG5cdFx0XHRwYXJzZWRBbm5vdGF0aW9uT2JqZWN0LnZhbHVlID0geyB0eXBlOiBcIkFuZFwiLCBBbmQ6IGFubm90YXRpb25PYmplY3QuJEFuZCB9O1xuXHRcdH0gZWxzZSBpZiAoYW5ub3RhdGlvbk9iamVjdC4kT3IgIT09IHVuZGVmaW5lZCkge1xuXHRcdFx0cGFyc2VkQW5ub3RhdGlvbk9iamVjdC52YWx1ZSA9IHsgdHlwZTogXCJPclwiLCBPcjogYW5ub3RhdGlvbk9iamVjdC4kT3IgfTtcblx0XHR9IGVsc2UgaWYgKGFubm90YXRpb25PYmplY3QuJE5vdCAhPT0gdW5kZWZpbmVkKSB7XG5cdFx0XHRwYXJzZWRBbm5vdGF0aW9uT2JqZWN0LnZhbHVlID0geyB0eXBlOiBcIk5vdFwiLCBOb3Q6IGFubm90YXRpb25PYmplY3QuJE5vdCB9O1xuXHRcdH0gZWxzZSBpZiAoYW5ub3RhdGlvbk9iamVjdC4kRXEgIT09IHVuZGVmaW5lZCkge1xuXHRcdFx0cGFyc2VkQW5ub3RhdGlvbk9iamVjdC52YWx1ZSA9IHsgdHlwZTogXCJFcVwiLCBFcTogYW5ub3RhdGlvbk9iamVjdC4kRXEgfTtcblx0XHR9IGVsc2UgaWYgKGFubm90YXRpb25PYmplY3QuJE5lICE9PSB1bmRlZmluZWQpIHtcblx0XHRcdHBhcnNlZEFubm90YXRpb25PYmplY3QudmFsdWUgPSB7IHR5cGU6IFwiTmVcIiwgTmU6IGFubm90YXRpb25PYmplY3QuJE5lIH07XG5cdFx0fSBlbHNlIGlmIChhbm5vdGF0aW9uT2JqZWN0LiRHdCAhPT0gdW5kZWZpbmVkKSB7XG5cdFx0XHRwYXJzZWRBbm5vdGF0aW9uT2JqZWN0LnZhbHVlID0geyB0eXBlOiBcIkd0XCIsIEd0OiBhbm5vdGF0aW9uT2JqZWN0LiRHdCB9O1xuXHRcdH0gZWxzZSBpZiAoYW5ub3RhdGlvbk9iamVjdC4kR2UgIT09IHVuZGVmaW5lZCkge1xuXHRcdFx0cGFyc2VkQW5ub3RhdGlvbk9iamVjdC52YWx1ZSA9IHsgdHlwZTogXCJHZVwiLCBHZTogYW5ub3RhdGlvbk9iamVjdC4kR2UgfTtcblx0XHR9IGVsc2UgaWYgKGFubm90YXRpb25PYmplY3QuJEx0ICE9PSB1bmRlZmluZWQpIHtcblx0XHRcdHBhcnNlZEFubm90YXRpb25PYmplY3QudmFsdWUgPSB7IHR5cGU6IFwiTHRcIiwgTHQ6IGFubm90YXRpb25PYmplY3QuJEx0IH07XG5cdFx0fSBlbHNlIGlmIChhbm5vdGF0aW9uT2JqZWN0LiRMZSAhPT0gdW5kZWZpbmVkKSB7XG5cdFx0XHRwYXJzZWRBbm5vdGF0aW9uT2JqZWN0LnZhbHVlID0geyB0eXBlOiBcIkxlXCIsIExlOiBhbm5vdGF0aW9uT2JqZWN0LiRMZSB9O1xuXHRcdH0gZWxzZSBpZiAoYW5ub3RhdGlvbk9iamVjdC4kQXBwbHkgIT09IHVuZGVmaW5lZCkge1xuXHRcdFx0cGFyc2VkQW5ub3RhdGlvbk9iamVjdC52YWx1ZSA9IHsgdHlwZTogXCJBcHBseVwiLCBBcHBseTogYW5ub3RhdGlvbk9iamVjdC4kQXBwbHksIEZ1bmN0aW9uOiBhbm5vdGF0aW9uT2JqZWN0LiRGdW5jdGlvbiB9O1xuXHRcdH0gZWxzZSBpZiAoYW5ub3RhdGlvbk9iamVjdC4kUGF0aCAhPT0gdW5kZWZpbmVkKSB7XG5cdFx0XHRwYXJzZWRBbm5vdGF0aW9uT2JqZWN0LnZhbHVlID0geyB0eXBlOiBcIlBhdGhcIiwgUGF0aDogYW5ub3RhdGlvbk9iamVjdC4kUGF0aCB9O1xuXHRcdH0gZWxzZSBpZiAoYW5ub3RhdGlvbk9iamVjdC4kQW5ub3RhdGlvblBhdGggIT09IHVuZGVmaW5lZCkge1xuXHRcdFx0cGFyc2VkQW5ub3RhdGlvbk9iamVjdC52YWx1ZSA9IHtcblx0XHRcdFx0dHlwZTogXCJBbm5vdGF0aW9uUGF0aFwiLFxuXHRcdFx0XHRBbm5vdGF0aW9uUGF0aDogYW5ub3RhdGlvbk9iamVjdC4kQW5ub3RhdGlvblBhdGhcblx0XHRcdH07XG5cdFx0fSBlbHNlIGlmIChhbm5vdGF0aW9uT2JqZWN0LiREZWNpbWFsICE9PSB1bmRlZmluZWQpIHtcblx0XHRcdHBhcnNlZEFubm90YXRpb25PYmplY3QudmFsdWUgPSB7IHR5cGU6IFwiRGVjaW1hbFwiLCBEZWNpbWFsOiBwYXJzZUZsb2F0KGFubm90YXRpb25PYmplY3QuJERlY2ltYWwpIH07XG5cdFx0fSBlbHNlIGlmIChhbm5vdGF0aW9uT2JqZWN0LiRFbnVtTWVtYmVyICE9PSB1bmRlZmluZWQpIHtcblx0XHRcdHBhcnNlZEFubm90YXRpb25PYmplY3QudmFsdWUgPSB7XG5cdFx0XHRcdHR5cGU6IFwiRW51bU1lbWJlclwiLFxuXHRcdFx0XHRFbnVtTWVtYmVyOiBgJHttYXBOYW1lVG9BbGlhcyhhbm5vdGF0aW9uT2JqZWN0LiRFbnVtTWVtYmVyLnNwbGl0KFwiL1wiKVswXSl9LyR7YW5ub3RhdGlvbk9iamVjdC4kRW51bU1lbWJlci5zcGxpdChcIi9cIilbMV19YFxuXHRcdFx0fTtcblx0XHR9IGVsc2UgaWYgKEFycmF5LmlzQXJyYXkoYW5ub3RhdGlvbk9iamVjdCkpIHtcblx0XHRcdGlzQ29sbGVjdGlvbiA9IHRydWU7XG5cdFx0XHRwYXJzZWRBbm5vdGF0aW9uT2JqZWN0LmNvbGxlY3Rpb24gPSBhbm5vdGF0aW9uT2JqZWN0Lm1hcCgoc3ViQW5ub3RhdGlvbk9iamVjdCwgc3ViQW5ub3RhdGlvbkluZGV4KSA9PlxuXHRcdFx0XHRwYXJzZUFubm90YXRpb25PYmplY3QoXG5cdFx0XHRcdFx0c3ViQW5ub3RhdGlvbk9iamVjdCxcblx0XHRcdFx0XHRgJHtjdXJyZW50QW5ub3RhdGlvblRhcmdldH0vJHtzdWJBbm5vdGF0aW9uSW5kZXh9YCxcblx0XHRcdFx0XHRhbm5vdGF0aW9uTGlzdHMsXG5cdFx0XHRcdFx0b0NhcGFiaWxpdGllc1xuXHRcdFx0XHQpXG5cdFx0XHQpO1xuXHRcdFx0aWYgKGFubm90YXRpb25PYmplY3QubGVuZ3RoID4gMCkge1xuXHRcdFx0XHRpZiAoYW5ub3RhdGlvbk9iamVjdFswXS5oYXNPd25Qcm9wZXJ0eShcIiRQcm9wZXJ0eVBhdGhcIikpIHtcblx0XHRcdFx0XHRwYXJzZWRBbm5vdGF0aW9uT2JqZWN0LmNvbGxlY3Rpb24udHlwZSA9IFwiUHJvcGVydHlQYXRoXCI7XG5cdFx0XHRcdH0gZWxzZSBpZiAoYW5ub3RhdGlvbk9iamVjdFswXS5oYXNPd25Qcm9wZXJ0eShcIiRQYXRoXCIpKSB7XG5cdFx0XHRcdFx0cGFyc2VkQW5ub3RhdGlvbk9iamVjdC5jb2xsZWN0aW9uLnR5cGUgPSBcIlBhdGhcIjtcblx0XHRcdFx0fSBlbHNlIGlmIChhbm5vdGF0aW9uT2JqZWN0WzBdLmhhc093blByb3BlcnR5KFwiJE5hdmlnYXRpb25Qcm9wZXJ0eVBhdGhcIikpIHtcblx0XHRcdFx0XHRwYXJzZWRBbm5vdGF0aW9uT2JqZWN0LmNvbGxlY3Rpb24udHlwZSA9IFwiTmF2aWdhdGlvblByb3BlcnR5UGF0aFwiO1xuXHRcdFx0XHR9IGVsc2UgaWYgKGFubm90YXRpb25PYmplY3RbMF0uaGFzT3duUHJvcGVydHkoXCIkQW5ub3RhdGlvblBhdGhcIikpIHtcblx0XHRcdFx0XHRwYXJzZWRBbm5vdGF0aW9uT2JqZWN0LmNvbGxlY3Rpb24udHlwZSA9IFwiQW5ub3RhdGlvblBhdGhcIjtcblx0XHRcdFx0fSBlbHNlIGlmIChhbm5vdGF0aW9uT2JqZWN0WzBdLmhhc093blByb3BlcnR5KFwiJFR5cGVcIikpIHtcblx0XHRcdFx0XHRwYXJzZWRBbm5vdGF0aW9uT2JqZWN0LmNvbGxlY3Rpb24udHlwZSA9IFwiUmVjb3JkXCI7XG5cdFx0XHRcdH0gZWxzZSBpZiAoYW5ub3RhdGlvbk9iamVjdFswXS5oYXNPd25Qcm9wZXJ0eShcIiRJZlwiKSkge1xuXHRcdFx0XHRcdHBhcnNlZEFubm90YXRpb25PYmplY3QuY29sbGVjdGlvbi50eXBlID0gXCJJZlwiO1xuXHRcdFx0XHR9IGVsc2UgaWYgKGFubm90YXRpb25PYmplY3RbMF0uaGFzT3duUHJvcGVydHkoXCIkT3JcIikpIHtcblx0XHRcdFx0XHRwYXJzZWRBbm5vdGF0aW9uT2JqZWN0LmNvbGxlY3Rpb24udHlwZSA9IFwiT3JcIjtcblx0XHRcdFx0fSBlbHNlIGlmIChhbm5vdGF0aW9uT2JqZWN0WzBdLmhhc093blByb3BlcnR5KFwiJEVxXCIpKSB7XG5cdFx0XHRcdFx0cGFyc2VkQW5ub3RhdGlvbk9iamVjdC5jb2xsZWN0aW9uLnR5cGUgPSBcIkVxXCI7XG5cdFx0XHRcdH0gZWxzZSBpZiAoYW5ub3RhdGlvbk9iamVjdFswXS5oYXNPd25Qcm9wZXJ0eShcIiROZVwiKSkge1xuXHRcdFx0XHRcdHBhcnNlZEFubm90YXRpb25PYmplY3QuY29sbGVjdGlvbi50eXBlID0gXCJOZVwiO1xuXHRcdFx0XHR9IGVsc2UgaWYgKGFubm90YXRpb25PYmplY3RbMF0uaGFzT3duUHJvcGVydHkoXCIkTm90XCIpKSB7XG5cdFx0XHRcdFx0cGFyc2VkQW5ub3RhdGlvbk9iamVjdC5jb2xsZWN0aW9uLnR5cGUgPSBcIk5vdFwiO1xuXHRcdFx0XHR9IGVsc2UgaWYgKGFubm90YXRpb25PYmplY3RbMF0uaGFzT3duUHJvcGVydHkoXCIkR3RcIikpIHtcblx0XHRcdFx0XHRwYXJzZWRBbm5vdGF0aW9uT2JqZWN0LmNvbGxlY3Rpb24udHlwZSA9IFwiR3RcIjtcblx0XHRcdFx0fSBlbHNlIGlmIChhbm5vdGF0aW9uT2JqZWN0WzBdLmhhc093blByb3BlcnR5KFwiJEdlXCIpKSB7XG5cdFx0XHRcdFx0cGFyc2VkQW5ub3RhdGlvbk9iamVjdC5jb2xsZWN0aW9uLnR5cGUgPSBcIkdlXCI7XG5cdFx0XHRcdH0gZWxzZSBpZiAoYW5ub3RhdGlvbk9iamVjdFswXS5oYXNPd25Qcm9wZXJ0eShcIiRMdFwiKSkge1xuXHRcdFx0XHRcdHBhcnNlZEFubm90YXRpb25PYmplY3QuY29sbGVjdGlvbi50eXBlID0gXCJMdFwiO1xuXHRcdFx0XHR9IGVsc2UgaWYgKGFubm90YXRpb25PYmplY3RbMF0uaGFzT3duUHJvcGVydHkoXCIkTGVcIikpIHtcblx0XHRcdFx0XHRwYXJzZWRBbm5vdGF0aW9uT2JqZWN0LmNvbGxlY3Rpb24udHlwZSA9IFwiTGVcIjtcblx0XHRcdFx0fSBlbHNlIGlmIChhbm5vdGF0aW9uT2JqZWN0WzBdLmhhc093blByb3BlcnR5KFwiJEFuZFwiKSkge1xuXHRcdFx0XHRcdHBhcnNlZEFubm90YXRpb25PYmplY3QuY29sbGVjdGlvbi50eXBlID0gXCJBbmRcIjtcblx0XHRcdFx0fSBlbHNlIGlmIChhbm5vdGF0aW9uT2JqZWN0WzBdLmhhc093blByb3BlcnR5KFwiJEFwcGx5XCIpKSB7XG5cdFx0XHRcdFx0cGFyc2VkQW5ub3RhdGlvbk9iamVjdC5jb2xsZWN0aW9uLnR5cGUgPSBcIkFwcGx5XCI7XG5cdFx0XHRcdH0gZWxzZSBpZiAodHlwZW9mIGFubm90YXRpb25PYmplY3RbMF0gPT09IFwib2JqZWN0XCIpIHtcblx0XHRcdFx0XHRwYXJzZWRBbm5vdGF0aW9uT2JqZWN0LmNvbGxlY3Rpb24udHlwZSA9IFwiUmVjb3JkXCI7XG5cdFx0XHRcdH0gZWxzZSB7XG5cdFx0XHRcdFx0cGFyc2VkQW5ub3RhdGlvbk9iamVjdC5jb2xsZWN0aW9uLnR5cGUgPSBcIlN0cmluZ1wiO1xuXHRcdFx0XHR9XG5cdFx0XHR9XG5cdFx0fSBlbHNlIHtcblx0XHRcdGNvbnN0IHJlY29yZDogQW5ub3RhdGlvblJlY29yZCA9IHtcblx0XHRcdFx0cHJvcGVydHlWYWx1ZXM6IFtdXG5cdFx0XHR9O1xuXHRcdFx0aWYgKGFubm90YXRpb25PYmplY3QuJFR5cGUpIHtcblx0XHRcdFx0Y29uc3QgdHlwZVZhbHVlID0gYW5ub3RhdGlvbk9iamVjdC4kVHlwZTtcblx0XHRcdFx0cmVjb3JkLnR5cGUgPSBgJHt0eXBlVmFsdWV9YDtcblx0XHRcdH1cblx0XHRcdGNvbnN0IHByb3BlcnR5VmFsdWVzOiBhbnlbXSA9IFtdO1xuXHRcdFx0Zm9yIChjb25zdCBwcm9wZXJ0eUtleSBpbiBhbm5vdGF0aW9uT2JqZWN0KSB7XG5cdFx0XHRcdGlmIChwcm9wZXJ0eUtleSAhPT0gXCIkVHlwZVwiICYmICFwcm9wZXJ0eUtleS5zdGFydHNXaXRoKFwiQFwiKSkge1xuXHRcdFx0XHRcdHByb3BlcnR5VmFsdWVzLnB1c2goXG5cdFx0XHRcdFx0XHRwYXJzZVByb3BlcnR5VmFsdWUoXG5cdFx0XHRcdFx0XHRcdGFubm90YXRpb25PYmplY3RbcHJvcGVydHlLZXldLFxuXHRcdFx0XHRcdFx0XHRwcm9wZXJ0eUtleSxcblx0XHRcdFx0XHRcdFx0Y3VycmVudEFubm90YXRpb25UYXJnZXQsXG5cdFx0XHRcdFx0XHRcdGFubm90YXRpb25MaXN0cyxcblx0XHRcdFx0XHRcdFx0b0NhcGFiaWxpdGllc1xuXHRcdFx0XHRcdFx0KVxuXHRcdFx0XHRcdCk7XG5cdFx0XHRcdH0gZWxzZSBpZiAocHJvcGVydHlLZXkuc3RhcnRzV2l0aChcIkBcIikpIHtcblx0XHRcdFx0XHQvLyBBbm5vdGF0aW9uIG9mIHJlY29yZFxuXHRcdFx0XHRcdGNyZWF0ZUFubm90YXRpb25MaXN0cyhcblx0XHRcdFx0XHRcdHsgW3Byb3BlcnR5S2V5XTogYW5ub3RhdGlvbk9iamVjdFtwcm9wZXJ0eUtleV0gfSxcblx0XHRcdFx0XHRcdGN1cnJlbnRBbm5vdGF0aW9uVGFyZ2V0LFxuXHRcdFx0XHRcdFx0YW5ub3RhdGlvbkxpc3RzLFxuXHRcdFx0XHRcdFx0b0NhcGFiaWxpdGllc1xuXHRcdFx0XHRcdCk7XG5cdFx0XHRcdH1cblx0XHRcdH1cblx0XHRcdHJlY29yZC5wcm9wZXJ0eVZhbHVlcyA9IHByb3BlcnR5VmFsdWVzO1xuXHRcdFx0cGFyc2VkQW5ub3RhdGlvbk9iamVjdC5yZWNvcmQgPSByZWNvcmQ7XG5cdFx0fVxuXHRcdHBhcnNlZEFubm90YXRpb25PYmplY3QuaXNDb2xsZWN0aW9uID0gaXNDb2xsZWN0aW9uO1xuXHRcdGN1cnJlbnRPdXRBbm5vdGF0aW9uT2JqZWN0LmFubm90YXRpb25zLnB1c2gocGFyc2VkQW5ub3RhdGlvbk9iamVjdCk7XG5cdH1cbn1cblxuZnVuY3Rpb24gcHJlcGFyZVByb3BlcnR5KHByb3BlcnR5RGVmaW5pdGlvbjogYW55LCBlbnRpdHlUeXBlT2JqZWN0OiBSYXdFbnRpdHlUeXBlIHwgUmF3Q29tcGxleFR5cGUsIHByb3BlcnR5TmFtZTogc3RyaW5nKTogUmF3UHJvcGVydHkge1xuXHRyZXR1cm4ge1xuXHRcdF90eXBlOiBcIlByb3BlcnR5XCIsXG5cdFx0bmFtZTogcHJvcGVydHlOYW1lLFxuXHRcdGZ1bGx5UXVhbGlmaWVkTmFtZTogYCR7ZW50aXR5VHlwZU9iamVjdC5mdWxseVF1YWxpZmllZE5hbWV9LyR7cHJvcGVydHlOYW1lfWAsXG5cdFx0dHlwZTogcHJvcGVydHlEZWZpbml0aW9uLiRUeXBlLFxuXHRcdG1heExlbmd0aDogcHJvcGVydHlEZWZpbml0aW9uLiRNYXhMZW5ndGgsXG5cdFx0cHJlY2lzaW9uOiBwcm9wZXJ0eURlZmluaXRpb24uJFByZWNpc2lvbixcblx0XHRzY2FsZTogcHJvcGVydHlEZWZpbml0aW9uLiRTY2FsZSxcblx0XHRudWxsYWJsZTogcHJvcGVydHlEZWZpbml0aW9uLiROdWxsYWJsZVxuXHR9O1xufVxuXG5mdW5jdGlvbiBwcmVwYXJlTmF2aWdhdGlvblByb3BlcnR5KFxuXHRuYXZQcm9wZXJ0eURlZmluaXRpb246IGFueSxcblx0ZW50aXR5VHlwZU9iamVjdDogUmF3RW50aXR5VHlwZSB8IFJhd0NvbXBsZXhUeXBlLFxuXHRuYXZQcm9wZXJ0eU5hbWU6IHN0cmluZ1xuKTogUmF3VjROYXZpZ2F0aW9uUHJvcGVydHkge1xuXHRsZXQgcmVmZXJlbnRpYWxDb25zdHJhaW50OiBSZWZlcmVudGlhbENvbnN0cmFpbnRbXSA9IFtdO1xuXHRpZiAobmF2UHJvcGVydHlEZWZpbml0aW9uLiRSZWZlcmVudGlhbENvbnN0cmFpbnQpIHtcblx0XHRyZWZlcmVudGlhbENvbnN0cmFpbnQgPSBPYmplY3Qua2V5cyhuYXZQcm9wZXJ0eURlZmluaXRpb24uJFJlZmVyZW50aWFsQ29uc3RyYWludCkubWFwKChzb3VyY2VQcm9wZXJ0eU5hbWUpID0+IHtcblx0XHRcdHJldHVybiB7XG5cdFx0XHRcdHNvdXJjZVR5cGVOYW1lOiBlbnRpdHlUeXBlT2JqZWN0Lm5hbWUsXG5cdFx0XHRcdHNvdXJjZVByb3BlcnR5OiBzb3VyY2VQcm9wZXJ0eU5hbWUsXG5cdFx0XHRcdHRhcmdldFR5cGVOYW1lOiBuYXZQcm9wZXJ0eURlZmluaXRpb24uJFR5cGUsXG5cdFx0XHRcdHRhcmdldFByb3BlcnR5OiBuYXZQcm9wZXJ0eURlZmluaXRpb24uJFJlZmVyZW50aWFsQ29uc3RyYWludFtzb3VyY2VQcm9wZXJ0eU5hbWVdXG5cdFx0XHR9O1xuXHRcdH0pO1xuXHR9XG5cdGNvbnN0IG5hdmlnYXRpb25Qcm9wZXJ0eTogUmF3VjROYXZpZ2F0aW9uUHJvcGVydHkgPSB7XG5cdFx0X3R5cGU6IFwiTmF2aWdhdGlvblByb3BlcnR5XCIsXG5cdFx0bmFtZTogbmF2UHJvcGVydHlOYW1lLFxuXHRcdGZ1bGx5UXVhbGlmaWVkTmFtZTogYCR7ZW50aXR5VHlwZU9iamVjdC5mdWxseVF1YWxpZmllZE5hbWV9LyR7bmF2UHJvcGVydHlOYW1lfWAsXG5cdFx0cGFydG5lcjogbmF2UHJvcGVydHlEZWZpbml0aW9uLiRQYXJ0bmVyLFxuXHRcdGlzQ29sbGVjdGlvbjogbmF2UHJvcGVydHlEZWZpbml0aW9uLiRpc0NvbGxlY3Rpb24gPyBuYXZQcm9wZXJ0eURlZmluaXRpb24uJGlzQ29sbGVjdGlvbiA6IGZhbHNlLFxuXHRcdGNvbnRhaW5zVGFyZ2V0OiBuYXZQcm9wZXJ0eURlZmluaXRpb24uJENvbnRhaW5zVGFyZ2V0LFxuXHRcdHRhcmdldFR5cGVOYW1lOiBuYXZQcm9wZXJ0eURlZmluaXRpb24uJFR5cGUsXG5cdFx0cmVmZXJlbnRpYWxDb25zdHJhaW50XG5cdH07XG5cblx0cmV0dXJuIG5hdmlnYXRpb25Qcm9wZXJ0eTtcbn1cblxuZnVuY3Rpb24gcHJlcGFyZUVudGl0eVNldChlbnRpdHlTZXREZWZpbml0aW9uOiBhbnksIGVudGl0eVNldE5hbWU6IHN0cmluZywgZW50aXR5Q29udGFpbmVyTmFtZTogc3RyaW5nKTogUmF3RW50aXR5U2V0IHtcblx0Y29uc3QgZW50aXR5U2V0T2JqZWN0OiBSYXdFbnRpdHlTZXQgPSB7XG5cdFx0X3R5cGU6IFwiRW50aXR5U2V0XCIsXG5cdFx0bmFtZTogZW50aXR5U2V0TmFtZSxcblx0XHRuYXZpZ2F0aW9uUHJvcGVydHlCaW5kaW5nOiB7fSxcblx0XHRlbnRpdHlUeXBlTmFtZTogZW50aXR5U2V0RGVmaW5pdGlvbi4kVHlwZSxcblx0XHRmdWxseVF1YWxpZmllZE5hbWU6IGAke2VudGl0eUNvbnRhaW5lck5hbWV9LyR7ZW50aXR5U2V0TmFtZX1gXG5cdH07XG5cdHJldHVybiBlbnRpdHlTZXRPYmplY3Q7XG59XG5cbmZ1bmN0aW9uIHByZXBhcmVTaW5nbGV0b24oc2luZ2xldG9uRGVmaW5pdGlvbjogYW55LCBzaW5nbGV0b25OYW1lOiBzdHJpbmcsIGVudGl0eUNvbnRhaW5lck5hbWU6IHN0cmluZyk6IFJhd1NpbmdsZXRvbiB7XG5cdHJldHVybiB7XG5cdFx0X3R5cGU6IFwiU2luZ2xldG9uXCIsXG5cdFx0bmFtZTogc2luZ2xldG9uTmFtZSxcblx0XHRuYXZpZ2F0aW9uUHJvcGVydHlCaW5kaW5nOiB7fSxcblx0XHRlbnRpdHlUeXBlTmFtZTogc2luZ2xldG9uRGVmaW5pdGlvbi4kVHlwZSxcblx0XHRmdWxseVF1YWxpZmllZE5hbWU6IGAke2VudGl0eUNvbnRhaW5lck5hbWV9LyR7c2luZ2xldG9uTmFtZX1gLFxuXHRcdG51bGxhYmxlOiB0cnVlXG5cdH07XG59XG5cbmZ1bmN0aW9uIHByZXBhcmVBY3Rpb25JbXBvcnQoYWN0aW9uSW1wb3J0OiBhbnksIGFjdGlvbkltcG9ydE5hbWU6IHN0cmluZywgZW50aXR5Q29udGFpbmVyTmFtZTogc3RyaW5nKTogUmF3QWN0aW9uSW1wb3J0IHtcblx0cmV0dXJuIHtcblx0XHRfdHlwZTogXCJBY3Rpb25JbXBvcnRcIixcblx0XHRuYW1lOiBhY3Rpb25JbXBvcnROYW1lLFxuXHRcdGZ1bGx5UXVhbGlmaWVkTmFtZTogYCR7ZW50aXR5Q29udGFpbmVyTmFtZX0vJHthY3Rpb25JbXBvcnROYW1lfWAsXG5cdFx0YWN0aW9uTmFtZTogYWN0aW9uSW1wb3J0LiRBY3Rpb25cblx0fTtcbn1cblxuZnVuY3Rpb24gcHJlcGFyZVR5cGVEZWZpbml0aW9uKHR5cGVEZWZpbml0aW9uOiBhbnksIHR5cGVOYW1lOiBzdHJpbmcsIG5hbWVzcGFjZVByZWZpeDogc3RyaW5nKTogUmF3VHlwZURlZmluaXRpb24ge1xuXHRjb25zdCB0eXBlT2JqZWN0OiBSYXdUeXBlRGVmaW5pdGlvbiA9IHtcblx0XHRfdHlwZTogXCJUeXBlRGVmaW5pdGlvblwiLFxuXHRcdG5hbWU6IHR5cGVOYW1lLnN1YnN0cmluZyhuYW1lc3BhY2VQcmVmaXgubGVuZ3RoKSxcblx0XHRmdWxseVF1YWxpZmllZE5hbWU6IHR5cGVOYW1lLFxuXHRcdHVuZGVybHlpbmdUeXBlOiB0eXBlRGVmaW5pdGlvbi4kVW5kZXJseWluZ1R5cGVcblx0fTtcblx0cmV0dXJuIHR5cGVPYmplY3Q7XG59XG5cbmZ1bmN0aW9uIHByZXBhcmVDb21wbGV4VHlwZShjb21wbGV4VHlwZURlZmluaXRpb246IGFueSwgY29tcGxleFR5cGVOYW1lOiBzdHJpbmcsIG5hbWVzcGFjZVByZWZpeDogc3RyaW5nKTogUmF3Q29tcGxleFR5cGUge1xuXHRjb25zdCBjb21wbGV4VHlwZU9iamVjdDogUmF3Q29tcGxleFR5cGUgPSB7XG5cdFx0X3R5cGU6IFwiQ29tcGxleFR5cGVcIixcblx0XHRuYW1lOiBjb21wbGV4VHlwZU5hbWUuc3Vic3RyaW5nKG5hbWVzcGFjZVByZWZpeC5sZW5ndGgpLFxuXHRcdGZ1bGx5UXVhbGlmaWVkTmFtZTogY29tcGxleFR5cGVOYW1lLFxuXHRcdHByb3BlcnRpZXM6IFtdLFxuXHRcdG5hdmlnYXRpb25Qcm9wZXJ0aWVzOiBbXVxuXHR9O1xuXG5cdGNvbnN0IGNvbXBsZXhUeXBlUHJvcGVydGllcyA9IE9iamVjdC5rZXlzKGNvbXBsZXhUeXBlRGVmaW5pdGlvbilcblx0XHQuZmlsdGVyKChwcm9wZXJ0eU5hbWVPck5vdCkgPT4ge1xuXHRcdFx0aWYgKHByb3BlcnR5TmFtZU9yTm90ICE9IFwiJEtleVwiICYmIHByb3BlcnR5TmFtZU9yTm90ICE9IFwiJGtpbmRcIikge1xuXHRcdFx0XHRyZXR1cm4gY29tcGxleFR5cGVEZWZpbml0aW9uW3Byb3BlcnR5TmFtZU9yTm90XS4ka2luZCA9PT0gXCJQcm9wZXJ0eVwiO1xuXHRcdFx0fVxuXHRcdH0pXG5cdFx0LnNvcnQoKGEsIGIpID0+IChhID4gYiA/IDEgOiAtMSkpXG5cdFx0Lm1hcCgocHJvcGVydHlOYW1lKSA9PiB7XG5cdFx0XHRyZXR1cm4gcHJlcGFyZVByb3BlcnR5KGNvbXBsZXhUeXBlRGVmaW5pdGlvbltwcm9wZXJ0eU5hbWVdLCBjb21wbGV4VHlwZU9iamVjdCwgcHJvcGVydHlOYW1lKTtcblx0XHR9KTtcblxuXHRjb21wbGV4VHlwZU9iamVjdC5wcm9wZXJ0aWVzID0gY29tcGxleFR5cGVQcm9wZXJ0aWVzO1xuXHRjb25zdCBjb21wbGV4VHlwZU5hdmlnYXRpb25Qcm9wZXJ0aWVzID0gT2JqZWN0LmtleXMoY29tcGxleFR5cGVEZWZpbml0aW9uKVxuXHRcdC5maWx0ZXIoKHByb3BlcnR5TmFtZU9yTm90KSA9PiB7XG5cdFx0XHRpZiAocHJvcGVydHlOYW1lT3JOb3QgIT0gXCIkS2V5XCIgJiYgcHJvcGVydHlOYW1lT3JOb3QgIT0gXCIka2luZFwiKSB7XG5cdFx0XHRcdHJldHVybiBjb21wbGV4VHlwZURlZmluaXRpb25bcHJvcGVydHlOYW1lT3JOb3RdLiRraW5kID09PSBcIk5hdmlnYXRpb25Qcm9wZXJ0eVwiO1xuXHRcdFx0fVxuXHRcdH0pXG5cdFx0LnNvcnQoKGEsIGIpID0+IChhID4gYiA/IDEgOiAtMSkpXG5cdFx0Lm1hcCgobmF2UHJvcGVydHlOYW1lKSA9PiB7XG5cdFx0XHRyZXR1cm4gcHJlcGFyZU5hdmlnYXRpb25Qcm9wZXJ0eShjb21wbGV4VHlwZURlZmluaXRpb25bbmF2UHJvcGVydHlOYW1lXSwgY29tcGxleFR5cGVPYmplY3QsIG5hdlByb3BlcnR5TmFtZSk7XG5cdFx0fSk7XG5cdGNvbXBsZXhUeXBlT2JqZWN0Lm5hdmlnYXRpb25Qcm9wZXJ0aWVzID0gY29tcGxleFR5cGVOYXZpZ2F0aW9uUHJvcGVydGllcztcblx0cmV0dXJuIGNvbXBsZXhUeXBlT2JqZWN0O1xufVxuXG5mdW5jdGlvbiBwcmVwYXJlRW50aXR5S2V5cyhlbnRpdHlUeXBlRGVmaW5pdGlvbjogYW55LCBvTWV0YU1vZGVsRGF0YTogYW55KTogc3RyaW5nW10ge1xuXHRpZiAoIWVudGl0eVR5cGVEZWZpbml0aW9uLiRLZXkgJiYgZW50aXR5VHlwZURlZmluaXRpb24uJEJhc2VUeXBlKSB7XG5cdFx0cmV0dXJuIHByZXBhcmVFbnRpdHlLZXlzKG9NZXRhTW9kZWxEYXRhW2VudGl0eVR5cGVEZWZpbml0aW9uLiRCYXNlVHlwZV0sIG9NZXRhTW9kZWxEYXRhKTtcblx0fVxuXHRyZXR1cm4gZW50aXR5VHlwZURlZmluaXRpb24uJEtleSA/PyBbXTsgLy9oYW5kbGluZyBvZiBlbnRpdHkgdHlwZXMgd2l0aG91dCBrZXkgYXMgd2VsbCBhcyBiYXNldHlwZVxufVxuXG5mdW5jdGlvbiBwcmVwYXJlRW50aXR5VHlwZShlbnRpdHlUeXBlRGVmaW5pdGlvbjogYW55LCBlbnRpdHlUeXBlTmFtZTogc3RyaW5nLCBuYW1lc3BhY2VQcmVmaXg6IHN0cmluZywgbWV0YU1vZGVsRGF0YTogYW55KTogUmF3RW50aXR5VHlwZSB7XG5cdGNvbnN0IGVudGl0eVR5cGU6IFJhd0VudGl0eVR5cGUgPSB7XG5cdFx0X3R5cGU6IFwiRW50aXR5VHlwZVwiLFxuXHRcdG5hbWU6IGVudGl0eVR5cGVOYW1lLnN1YnN0cmluZyhuYW1lc3BhY2VQcmVmaXgubGVuZ3RoKSxcblx0XHRmdWxseVF1YWxpZmllZE5hbWU6IGVudGl0eVR5cGVOYW1lLFxuXHRcdGtleXM6IFtdLFxuXHRcdGVudGl0eVByb3BlcnRpZXM6IFtdLFxuXHRcdG5hdmlnYXRpb25Qcm9wZXJ0aWVzOiBbXSxcblx0XHRhY3Rpb25zOiB7fVxuXHR9O1xuXG5cdGZvciAoY29uc3Qga2V5IGluIGVudGl0eVR5cGVEZWZpbml0aW9uKSB7XG5cdFx0Y29uc3QgdmFsdWUgPSBlbnRpdHlUeXBlRGVmaW5pdGlvbltrZXldO1xuXG5cdFx0c3dpdGNoICh2YWx1ZS4ka2luZCkge1xuXHRcdFx0Y2FzZSBcIlByb3BlcnR5XCI6XG5cdFx0XHRcdGNvbnN0IHByb3BlcnR5ID0gcHJlcGFyZVByb3BlcnR5KHZhbHVlLCBlbnRpdHlUeXBlLCBrZXkpO1xuXHRcdFx0XHRlbnRpdHlUeXBlLmVudGl0eVByb3BlcnRpZXMucHVzaChwcm9wZXJ0eSk7XG5cdFx0XHRcdGJyZWFrO1xuXHRcdFx0Y2FzZSBcIk5hdmlnYXRpb25Qcm9wZXJ0eVwiOlxuXHRcdFx0XHRjb25zdCBuYXZpZ2F0aW9uUHJvcGVydHkgPSBwcmVwYXJlTmF2aWdhdGlvblByb3BlcnR5KHZhbHVlLCBlbnRpdHlUeXBlLCBrZXkpO1xuXHRcdFx0XHRlbnRpdHlUeXBlLm5hdmlnYXRpb25Qcm9wZXJ0aWVzLnB1c2gobmF2aWdhdGlvblByb3BlcnR5KTtcblx0XHRcdFx0YnJlYWs7XG5cdFx0fVxuXHR9XG5cblx0ZW50aXR5VHlwZS5rZXlzID0gcHJlcGFyZUVudGl0eUtleXMoZW50aXR5VHlwZURlZmluaXRpb24sIG1ldGFNb2RlbERhdGEpXG5cdFx0Lm1hcCgoZW50aXR5S2V5KSA9PiBlbnRpdHlUeXBlLmVudGl0eVByb3BlcnRpZXMuZmluZCgocHJvcGVydHkpID0+IHByb3BlcnR5Lm5hbWUgPT09IGVudGl0eUtleSkpXG5cdFx0LmZpbHRlcigocHJvcGVydHkpID0+IHByb3BlcnR5ICE9PSB1bmRlZmluZWQpIGFzIFJhd0VudGl0eVR5cGVbXCJrZXlzXCJdO1xuXG5cdC8vIENoZWNrIGlmIHRoZXJlIGFyZSBmaWx0ZXIgZmFjZXRzIGRlZmluZWQgZm9yIHRoZSBlbnRpdHlUeXBlIGFuZCBpZiB5ZXMsIGNoZWNrIGlmIGFsbCBvZiB0aGVtIGhhdmUgYW4gSURcblx0Ly8gVGhlIElEIGlzIG9wdGlvbmFsLCBidXQgaXQgaXMgaW50ZXJuYWxseSB0YWtlbiBmb3IgZ3JvdXBpbmcgZmlsdGVyIGZpZWxkcyBhbmQgaWYgaXQncyBub3QgcHJlc2VudFxuXHQvLyBhIGZhbGxiYWNrIElEIG5lZWRzIHRvIGJlIGdlbmVyYXRlZCBoZXJlLlxuXHRtZXRhTW9kZWxEYXRhLiRBbm5vdGF0aW9uc1tlbnRpdHlUeXBlLmZ1bGx5UXVhbGlmaWVkTmFtZV0/LltgQCR7VUlBbm5vdGF0aW9uVGVybXMuRmlsdGVyRmFjZXRzfWBdPy5mb3JFYWNoKFxuXHRcdChmaWx0ZXJGYWNldEFubm90YXRpb246IGFueSkgPT4ge1xuXHRcdFx0ZmlsdGVyRmFjZXRBbm5vdGF0aW9uLklEID0gY3JlYXRlUmVmZXJlbmNlRmFjZXRJZChmaWx0ZXJGYWNldEFubm90YXRpb24pO1xuXHRcdH1cblx0KTtcblxuXHRmb3IgKGNvbnN0IGVudGl0eVByb3BlcnR5IG9mIGVudGl0eVR5cGUuZW50aXR5UHJvcGVydGllcykge1xuXHRcdGlmICghbWV0YU1vZGVsRGF0YS4kQW5ub3RhdGlvbnNbZW50aXR5UHJvcGVydHkuZnVsbHlRdWFsaWZpZWROYW1lXSkge1xuXHRcdFx0bWV0YU1vZGVsRGF0YS4kQW5ub3RhdGlvbnNbZW50aXR5UHJvcGVydHkuZnVsbHlRdWFsaWZpZWROYW1lXSA9IHt9O1xuXHRcdH1cblx0XHRpZiAoIW1ldGFNb2RlbERhdGEuJEFubm90YXRpb25zW2VudGl0eVByb3BlcnR5LmZ1bGx5UXVhbGlmaWVkTmFtZV1bYEAke1VJQW5ub3RhdGlvblRlcm1zLkRhdGFGaWVsZERlZmF1bHR9YF0pIHtcblx0XHRcdG1ldGFNb2RlbERhdGEuJEFubm90YXRpb25zW2VudGl0eVByb3BlcnR5LmZ1bGx5UXVhbGlmaWVkTmFtZV1bYEAke1VJQW5ub3RhdGlvblRlcm1zLkRhdGFGaWVsZERlZmF1bHR9YF0gPSB7XG5cdFx0XHRcdCRUeXBlOiBVSUFubm90YXRpb25UeXBlcy5EYXRhRmllbGQsXG5cdFx0XHRcdFZhbHVlOiB7ICRQYXRoOiBlbnRpdHlQcm9wZXJ0eS5uYW1lIH1cblx0XHRcdH07XG5cdFx0fVxuXHR9XG5cblx0cmV0dXJuIGVudGl0eVR5cGU7XG59XG5mdW5jdGlvbiBwcmVwYXJlQWN0aW9uKGFjdGlvbk5hbWU6IHN0cmluZywgYWN0aW9uUmF3RGF0YTogTWV0YU1vZGVsQWN0aW9uLCBuYW1lc3BhY2VQcmVmaXg6IHN0cmluZyk6IFJhd0FjdGlvbiB7XG5cdGxldCBhY3Rpb25FbnRpdHlUeXBlID0gXCJcIjtcblx0bGV0IGFjdGlvbkZRTiA9IGFjdGlvbk5hbWU7XG5cblx0aWYgKGFjdGlvblJhd0RhdGEuJElzQm91bmQpIHtcblx0XHRjb25zdCBiaW5kaW5nUGFyYW1ldGVyID0gYWN0aW9uUmF3RGF0YS4kUGFyYW1ldGVyWzBdO1xuXHRcdGFjdGlvbkVudGl0eVR5cGUgPSBiaW5kaW5nUGFyYW1ldGVyLiRUeXBlO1xuXHRcdGlmIChiaW5kaW5nUGFyYW1ldGVyLiRpc0NvbGxlY3Rpb24gPT09IHRydWUpIHtcblx0XHRcdGFjdGlvbkZRTiA9IGAke2FjdGlvbk5hbWV9KENvbGxlY3Rpb24oJHthY3Rpb25FbnRpdHlUeXBlfSkpYDtcblx0XHR9IGVsc2Uge1xuXHRcdFx0YWN0aW9uRlFOID0gYCR7YWN0aW9uTmFtZX0oJHthY3Rpb25FbnRpdHlUeXBlfSlgO1xuXHRcdH1cblx0fVxuXG5cdGNvbnN0IHBhcmFtZXRlcnMgPSBhY3Rpb25SYXdEYXRhLiRQYXJhbWV0ZXIgPz8gW107XG5cdHJldHVybiB7XG5cdFx0X3R5cGU6IFwiQWN0aW9uXCIsXG5cdFx0bmFtZTogYWN0aW9uTmFtZS5zdWJzdHJpbmcobmFtZXNwYWNlUHJlZml4Lmxlbmd0aCksXG5cdFx0ZnVsbHlRdWFsaWZpZWROYW1lOiBhY3Rpb25GUU4sXG5cdFx0aXNCb3VuZDogYWN0aW9uUmF3RGF0YS4kSXNCb3VuZCA/PyBmYWxzZSxcblx0XHRpc0Z1bmN0aW9uOiBhY3Rpb25SYXdEYXRhLiRraW5kID09PSBcIkZ1bmN0aW9uXCIsXG5cdFx0c291cmNlVHlwZTogYWN0aW9uRW50aXR5VHlwZSxcblx0XHRyZXR1cm5UeXBlOiBhY3Rpb25SYXdEYXRhLiRSZXR1cm5UeXBlPy4kVHlwZSA/PyBcIlwiLFxuXHRcdHBhcmFtZXRlcnM6IHBhcmFtZXRlcnMubWFwKChwYXJhbSkgPT4ge1xuXHRcdFx0cmV0dXJuIHtcblx0XHRcdFx0X3R5cGU6IFwiQWN0aW9uUGFyYW1ldGVyXCIsXG5cdFx0XHRcdGZ1bGx5UXVhbGlmaWVkTmFtZTogYCR7YWN0aW9uRlFOfS8ke3BhcmFtLiROYW1lfWAsXG5cdFx0XHRcdGlzQ29sbGVjdGlvbjogcGFyYW0uJGlzQ29sbGVjdGlvbiA/PyBmYWxzZSxcblx0XHRcdFx0bmFtZTogcGFyYW0uJE5hbWUsXG5cdFx0XHRcdHR5cGU6IHBhcmFtLiRUeXBlXG5cdFx0XHR9O1xuXHRcdH0pXG5cdH07XG59XG5cbmZ1bmN0aW9uIHBhcnNlRW50aXR5Q29udGFpbmVyKFxuXHRuYW1lc3BhY2VQcmVmaXg6IHN0cmluZyxcblx0ZW50aXR5Q29udGFpbmVyTmFtZTogc3RyaW5nLFxuXHRlbnRpdHlDb250YWluZXJNZXRhZGF0YTogUmVjb3JkPHN0cmluZywgYW55Pixcblx0cmVzdWx0OiBSYXdNZXRhZGF0YVxuKSB7XG5cdHJlc3VsdC5zY2hlbWEuZW50aXR5Q29udGFpbmVyID0ge1xuXHRcdF90eXBlOiBcIkVudGl0eUNvbnRhaW5lclwiLFxuXHRcdG5hbWU6IGVudGl0eUNvbnRhaW5lck5hbWUuc3Vic3RyaW5nKG5hbWVzcGFjZVByZWZpeC5sZW5ndGgpLFxuXHRcdGZ1bGx5UXVhbGlmaWVkTmFtZTogZW50aXR5Q29udGFpbmVyTmFtZVxuXHR9O1xuXG5cdGZvciAoY29uc3QgZWxlbWVudE5hbWUgaW4gZW50aXR5Q29udGFpbmVyTWV0YWRhdGEpIHtcblx0XHRjb25zdCBlbGVtZW50VmFsdWUgPSBlbnRpdHlDb250YWluZXJNZXRhZGF0YVtlbGVtZW50TmFtZV07XG5cdFx0c3dpdGNoIChlbGVtZW50VmFsdWUuJGtpbmQpIHtcblx0XHRcdGNhc2UgXCJFbnRpdHlTZXRcIjpcblx0XHRcdFx0cmVzdWx0LnNjaGVtYS5lbnRpdHlTZXRzLnB1c2gocHJlcGFyZUVudGl0eVNldChlbGVtZW50VmFsdWUsIGVsZW1lbnROYW1lLCBlbnRpdHlDb250YWluZXJOYW1lKSk7XG5cdFx0XHRcdGJyZWFrO1xuXG5cdFx0XHRjYXNlIFwiU2luZ2xldG9uXCI6XG5cdFx0XHRcdHJlc3VsdC5zY2hlbWEuc2luZ2xldG9ucy5wdXNoKHByZXBhcmVTaW5nbGV0b24oZWxlbWVudFZhbHVlLCBlbGVtZW50TmFtZSwgZW50aXR5Q29udGFpbmVyTmFtZSkpO1xuXHRcdFx0XHRicmVhaztcblxuXHRcdFx0Y2FzZSBcIkFjdGlvbkltcG9ydFwiOlxuXHRcdFx0XHRyZXN1bHQuc2NoZW1hLmFjdGlvbkltcG9ydHMucHVzaChwcmVwYXJlQWN0aW9uSW1wb3J0KGVsZW1lbnRWYWx1ZSwgZWxlbWVudE5hbWUsIGVudGl0eUNvbnRhaW5lck5hbWUpKTtcblx0XHRcdFx0YnJlYWs7XG5cdFx0fVxuXHR9XG5cblx0Ly8gbGluayB0aGUgbmF2aWdhdGlvbiBwcm9wZXJ0eSBiaW5kaW5ncyAoJE5hdmlnYXRpb25Qcm9wZXJ0eUJpbmRpbmcpXG5cdGZvciAoY29uc3QgZW50aXR5U2V0IG9mIHJlc3VsdC5zY2hlbWEuZW50aXR5U2V0cykge1xuXHRcdGNvbnN0IG5hdlByb3BlcnR5QmluZGluZ3MgPSBlbnRpdHlDb250YWluZXJNZXRhZGF0YVtlbnRpdHlTZXQubmFtZV0uJE5hdmlnYXRpb25Qcm9wZXJ0eUJpbmRpbmc7XG5cdFx0aWYgKG5hdlByb3BlcnR5QmluZGluZ3MpIHtcblx0XHRcdGZvciAoY29uc3QgbmF2UHJvcE5hbWUgb2YgT2JqZWN0LmtleXMobmF2UHJvcGVydHlCaW5kaW5ncykpIHtcblx0XHRcdFx0Y29uc3QgdGFyZ2V0RW50aXR5U2V0ID0gcmVzdWx0LnNjaGVtYS5lbnRpdHlTZXRzLmZpbmQoXG5cdFx0XHRcdFx0KGVudGl0eVNldE5hbWUpID0+IGVudGl0eVNldE5hbWUubmFtZSA9PT0gbmF2UHJvcGVydHlCaW5kaW5nc1tuYXZQcm9wTmFtZV1cblx0XHRcdFx0KTtcblx0XHRcdFx0aWYgKHRhcmdldEVudGl0eVNldCkge1xuXHRcdFx0XHRcdGVudGl0eVNldC5uYXZpZ2F0aW9uUHJvcGVydHlCaW5kaW5nW25hdlByb3BOYW1lXSA9IHRhcmdldEVudGl0eVNldDtcblx0XHRcdFx0fVxuXHRcdFx0fVxuXHRcdH1cblx0fVxufVxuXG5mdW5jdGlvbiBwYXJzZUFubm90YXRpb25zKGFubm90YXRpb25zOiBSZWNvcmQ8c3RyaW5nLCBhbnk+LCBjYXBhYmlsaXRpZXM6IEVudmlyb25tZW50Q2FwYWJpbGl0aWVzKSB7XG5cdGNvbnN0IGFubm90YXRpb25MaXN0czogUmVjb3JkPHN0cmluZywgQW5ub3RhdGlvbkxpc3Q+ID0ge307XG5cdGZvciAoY29uc3QgdGFyZ2V0IGluIGFubm90YXRpb25zKSB7XG5cdFx0Y3JlYXRlQW5ub3RhdGlvbkxpc3RzKGFubm90YXRpb25zW3RhcmdldF0sIHRhcmdldCwgYW5ub3RhdGlvbkxpc3RzLCBjYXBhYmlsaXRpZXMpO1xuXHR9XG5cblx0Ly8gU29ydCBieSB0YXJnZXQgbGVuZ3RoXG5cdHJldHVybiBPYmplY3Qua2V5cyhhbm5vdGF0aW9uTGlzdHMpXG5cdFx0LnNvcnQoKGEsIGIpID0+IGEubGVuZ3RoIC0gYi5sZW5ndGgpXG5cdFx0Lm1hcCgoYW5ub3RhdGlvbk5hbWUpID0+IGFubm90YXRpb25MaXN0c1thbm5vdGF0aW9uTmFtZV0pO1xufVxuZXhwb3J0IGZ1bmN0aW9uIHBhcnNlTWV0YU1vZGVsKFxuXHRtZXRhTW9kZWw6IE9EYXRhTWV0YU1vZGVsLFxuXHRjYXBhYmlsaXRpZXM6IEVudmlyb25tZW50Q2FwYWJpbGl0aWVzID0gRGVmYXVsdEVudmlyb25tZW50Q2FwYWJpbGl0aWVzXG4pOiBSYXdNZXRhZGF0YSB7XG5cdGNvbnN0IG1ldGFNb2RlbERhdGEgPSBtZXRhTW9kZWwuZ2V0T2JqZWN0KFwiLyRcIik7XG5cblx0Ly8gYXNzdW1pbmcgdGhlcmUgaXMgb25seSBvbmUgc2NoZW1hL25hbWVzcGFjZVxuXHRjb25zdCBuYW1lc3BhY2VQcmVmaXggPSBPYmplY3Qua2V5cyhtZXRhTW9kZWxEYXRhKS5maW5kKChrZXkpID0+IG1ldGFNb2RlbERhdGFba2V5XS4ka2luZCA9PT0gXCJTY2hlbWFcIikgPz8gXCJcIjtcblxuXHRjb25zdCByZXN1bHQ6IFJhd01ldGFkYXRhID0ge1xuXHRcdGlkZW50aWZpY2F0aW9uOiBcIm1ldGFtb2RlbFJlc3VsdFwiLFxuXHRcdHZlcnNpb246IFwiNC4wXCIsXG5cdFx0c2NoZW1hOiB7XG5cdFx0XHRuYW1lc3BhY2U6IG5hbWVzcGFjZVByZWZpeC5zbGljZSgwLCAtMSksXG5cdFx0XHRlbnRpdHlDb250YWluZXI6IHsgX3R5cGU6IFwiRW50aXR5Q29udGFpbmVyXCIsIG5hbWU6IFwiXCIsIGZ1bGx5UXVhbGlmaWVkTmFtZTogXCJcIiB9LFxuXHRcdFx0ZW50aXR5U2V0czogW10sXG5cdFx0XHRlbnRpdHlUeXBlczogW10sXG5cdFx0XHRjb21wbGV4VHlwZXM6IFtdLFxuXHRcdFx0dHlwZURlZmluaXRpb25zOiBbXSxcblx0XHRcdHNpbmdsZXRvbnM6IFtdLFxuXHRcdFx0YXNzb2NpYXRpb25zOiBbXSxcblx0XHRcdGFzc29jaWF0aW9uU2V0czogW10sXG5cdFx0XHRhY3Rpb25zOiBbXSxcblx0XHRcdGFjdGlvbkltcG9ydHM6IFtdLFxuXHRcdFx0YW5ub3RhdGlvbnM6IHtcblx0XHRcdFx0bWV0YW1vZGVsUmVzdWx0OiBbXVxuXHRcdFx0fVxuXHRcdH0sXG5cdFx0cmVmZXJlbmNlczogW11cblx0fTtcblxuXHRjb25zdCBwYXJzZU1ldGFNb2RlbEVsZW1lbnQgPSAobmFtZTogc3RyaW5nLCB2YWx1ZTogYW55KSA9PiB7XG5cdFx0c3dpdGNoICh2YWx1ZS4ka2luZCkge1xuXHRcdFx0Y2FzZSBcIkVudGl0eUNvbnRhaW5lclwiOlxuXHRcdFx0XHRwYXJzZUVudGl0eUNvbnRhaW5lcihuYW1lc3BhY2VQcmVmaXgsIG5hbWUsIHZhbHVlLCByZXN1bHQpO1xuXHRcdFx0XHRicmVhaztcblxuXHRcdFx0Y2FzZSBcIkFjdGlvblwiOlxuXHRcdFx0Y2FzZSBcIkZ1bmN0aW9uXCI6XG5cdFx0XHRcdGNvbnN0IGFjdGlvbiA9IHByZXBhcmVBY3Rpb24obmFtZSwgdmFsdWUsIG5hbWVzcGFjZVByZWZpeCk7XG5cdFx0XHRcdHJlc3VsdC5zY2hlbWEuYWN0aW9ucy5wdXNoKGFjdGlvbik7XG5cdFx0XHRcdGJyZWFrO1xuXG5cdFx0XHRjYXNlIFwiRW50aXR5VHlwZVwiOlxuXHRcdFx0XHRjb25zdCBlbnRpdHlUeXBlID0gcHJlcGFyZUVudGl0eVR5cGUodmFsdWUsIG5hbWUsIG5hbWVzcGFjZVByZWZpeCwgbWV0YU1vZGVsRGF0YSk7XG5cdFx0XHRcdHJlc3VsdC5zY2hlbWEuZW50aXR5VHlwZXMucHVzaChlbnRpdHlUeXBlKTtcblx0XHRcdFx0YnJlYWs7XG5cblx0XHRcdGNhc2UgXCJDb21wbGV4VHlwZVwiOlxuXHRcdFx0XHRjb25zdCBjb21wbGV4VHlwZSA9IHByZXBhcmVDb21wbGV4VHlwZSh2YWx1ZSwgbmFtZSwgbmFtZXNwYWNlUHJlZml4KTtcblx0XHRcdFx0cmVzdWx0LnNjaGVtYS5jb21wbGV4VHlwZXMucHVzaChjb21wbGV4VHlwZSk7XG5cdFx0XHRcdGJyZWFrO1xuXG5cdFx0XHRjYXNlIFwiVHlwZURlZmluaXRpb25cIjpcblx0XHRcdFx0Y29uc3QgdHlwZURlZmluaXRpb24gPSBwcmVwYXJlVHlwZURlZmluaXRpb24odmFsdWUsIG5hbWUsIG5hbWVzcGFjZVByZWZpeCk7XG5cdFx0XHRcdHJlc3VsdC5zY2hlbWEudHlwZURlZmluaXRpb25zLnB1c2godHlwZURlZmluaXRpb24pO1xuXHRcdFx0XHRicmVhaztcblx0XHR9XG5cdH07XG5cblx0Zm9yIChjb25zdCBlbGVtZW50TmFtZSBpbiBtZXRhTW9kZWxEYXRhKSB7XG5cdFx0Y29uc3QgZWxlbWVudFZhbHVlID0gbWV0YU1vZGVsRGF0YVtlbGVtZW50TmFtZV07XG5cblx0XHRpZiAoQXJyYXkuaXNBcnJheShlbGVtZW50VmFsdWUpKSB7XG5cdFx0XHQvLyB2YWx1ZSBjYW4gYmUgYW4gYXJyYXkgaW4gY2FzZSBvZiBhY3Rpb25zIG9yIGZ1bmN0aW9uc1xuXHRcdFx0Zm9yIChjb25zdCBzdWJFbGVtZW50VmFsdWUgb2YgZWxlbWVudFZhbHVlKSB7XG5cdFx0XHRcdHBhcnNlTWV0YU1vZGVsRWxlbWVudChlbGVtZW50TmFtZSwgc3ViRWxlbWVudFZhbHVlKTtcblx0XHRcdH1cblx0XHR9IGVsc2Uge1xuXHRcdFx0cGFyc2VNZXRhTW9kZWxFbGVtZW50KGVsZW1lbnROYW1lLCBlbGVtZW50VmFsdWUpO1xuXHRcdH1cblx0fVxuXG5cdHJlc3VsdC5zY2hlbWEuYW5ub3RhdGlvbnMubWV0YW1vZGVsUmVzdWx0ID0gcGFyc2VBbm5vdGF0aW9ucyhtZXRhTW9kZWxEYXRhLiRBbm5vdGF0aW9ucywgY2FwYWJpbGl0aWVzKTtcblxuXHRyZXR1cm4gcmVzdWx0O1xufVxuXG5jb25zdCBtTWV0YU1vZGVsTWFwOiBSZWNvcmQ8c3RyaW5nLCBDb252ZXJ0ZWRNZXRhZGF0YT4gPSB7fTtcblxuLyoqXG4gKiBDb252ZXJ0IHRoZSBPRGF0YU1ldGFNb2RlbCBpbnRvIGFub3RoZXIgZm9ybWF0IHRoYXQgYWxsb3cgZm9yIGVhc3kgbWFuaXB1bGF0aW9uIG9mIHRoZSBhbm5vdGF0aW9ucy5cbiAqXG4gKiBAcGFyYW0gb01ldGFNb2RlbCBUaGUgT0RhdGFNZXRhTW9kZWxcbiAqIEBwYXJhbSBvQ2FwYWJpbGl0aWVzIFRoZSBjdXJyZW50IGNhcGFiaWxpdGllc1xuICogQHJldHVybnMgQW4gb2JqZWN0IGNvbnRhaW5pbmcgb2JqZWN0LWxpa2UgYW5ub3RhdGlvbnNcbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGNvbnZlcnRUeXBlcyhvTWV0YU1vZGVsOiBPRGF0YU1ldGFNb2RlbCwgb0NhcGFiaWxpdGllcz86IEVudmlyb25tZW50Q2FwYWJpbGl0aWVzKTogQ29udmVydGVkTWV0YWRhdGEge1xuXHRjb25zdCBzTWV0YU1vZGVsSWQgPSAob01ldGFNb2RlbCBhcyBhbnkpLmlkO1xuXHRpZiAoIW1NZXRhTW9kZWxNYXAuaGFzT3duUHJvcGVydHkoc01ldGFNb2RlbElkKSkge1xuXHRcdGNvbnN0IHBhcnNlZE91dHB1dCA9IHBhcnNlTWV0YU1vZGVsKG9NZXRhTW9kZWwsIG9DYXBhYmlsaXRpZXMpO1xuXHRcdHRyeSB7XG5cdFx0XHRtTWV0YU1vZGVsTWFwW3NNZXRhTW9kZWxJZF0gPSBBbm5vdGF0aW9uQ29udmVydGVyLmNvbnZlcnQocGFyc2VkT3V0cHV0KTtcblx0XHR9IGNhdGNoIChvRXJyb3IpIHtcblx0XHRcdHRocm93IG5ldyBFcnJvcihvRXJyb3IgYXMgYW55KTtcblx0XHR9XG5cdH1cblx0cmV0dXJuIG1NZXRhTW9kZWxNYXBbc01ldGFNb2RlbElkXSBhcyBhbnkgYXMgQ29udmVydGVkTWV0YWRhdGE7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBnZXRDb252ZXJ0ZWRUeXBlcyhvQ29udGV4dDogQ29udGV4dCkge1xuXHRjb25zdCBvTWV0YU1vZGVsID0gb0NvbnRleHQuZ2V0TW9kZWwoKSBhcyB1bmtub3duIGFzIE9EYXRhTWV0YU1vZGVsO1xuXHRpZiAoIW9NZXRhTW9kZWwuaXNBKFwic2FwLnVpLm1vZGVsLm9kYXRhLnY0Lk9EYXRhTWV0YU1vZGVsXCIpKSB7XG5cdFx0dGhyb3cgbmV3IEVycm9yKFwiVGhpcyBzaG91bGQgb25seSBiZSBjYWxsZWQgb24gYSBPRGF0YU1ldGFNb2RlbFwiKTtcblx0fVxuXHRyZXR1cm4gY29udmVydFR5cGVzKG9NZXRhTW9kZWwpO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gZGVsZXRlTW9kZWxDYWNoZURhdGEob01ldGFNb2RlbDogT0RhdGFNZXRhTW9kZWwpIHtcblx0ZGVsZXRlIG1NZXRhTW9kZWxNYXBbKG9NZXRhTW9kZWwgYXMgYW55KS5pZF07XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBjb252ZXJ0TWV0YU1vZGVsQ29udGV4dChvTWV0YU1vZGVsQ29udGV4dDogQ29udGV4dCwgYkluY2x1ZGVWaXNpdGVkT2JqZWN0czogYm9vbGVhbiA9IGZhbHNlKTogYW55IHtcblx0Y29uc3Qgb0NvbnZlcnRlZE1ldGFkYXRhID0gY29udmVydFR5cGVzKG9NZXRhTW9kZWxDb250ZXh0LmdldE1vZGVsKCkgYXMgT0RhdGFNZXRhTW9kZWwpO1xuXHRjb25zdCBzUGF0aCA9IG9NZXRhTW9kZWxDb250ZXh0LmdldFBhdGgoKTtcblxuXHRjb25zdCBhUGF0aFNwbGl0ID0gc1BhdGguc3BsaXQoXCIvXCIpO1xuXHRsZXQgZmlyc3RQYXJ0ID0gYVBhdGhTcGxpdFsxXTtcblx0bGV0IGJlZ2luSW5kZXggPSAyO1xuXHRpZiAob0NvbnZlcnRlZE1ldGFkYXRhLmVudGl0eUNvbnRhaW5lci5mdWxseVF1YWxpZmllZE5hbWUgPT09IGZpcnN0UGFydCkge1xuXHRcdGZpcnN0UGFydCA9IGFQYXRoU3BsaXRbMl07XG5cdFx0YmVnaW5JbmRleCsrO1xuXHR9XG5cdGxldCB0YXJnZXRFbnRpdHlTZXQ6IEVudGl0eVNldCB8IFNpbmdsZXRvbiA9IG9Db252ZXJ0ZWRNZXRhZGF0YS5lbnRpdHlTZXRzLmZpbmQoXG5cdFx0KGVudGl0eVNldCkgPT4gZW50aXR5U2V0Lm5hbWUgPT09IGZpcnN0UGFydFxuXHQpIGFzIEVudGl0eVNldDtcblx0aWYgKCF0YXJnZXRFbnRpdHlTZXQpIHtcblx0XHR0YXJnZXRFbnRpdHlTZXQgPSBvQ29udmVydGVkTWV0YWRhdGEuc2luZ2xldG9ucy5maW5kKChzaW5nbGV0b24pID0+IHNpbmdsZXRvbi5uYW1lID09PSBmaXJzdFBhcnQpIGFzIFNpbmdsZXRvbjtcblx0fVxuXHRsZXQgcmVsYXRpdmVQYXRoID0gYVBhdGhTcGxpdC5zbGljZShiZWdpbkluZGV4KS5qb2luKFwiL1wiKTtcblxuXHRjb25zdCBsb2NhbE9iamVjdHM6IGFueVtdID0gW3RhcmdldEVudGl0eVNldF07XG5cdHdoaWxlIChyZWxhdGl2ZVBhdGggJiYgcmVsYXRpdmVQYXRoLmxlbmd0aCA+IDAgJiYgcmVsYXRpdmVQYXRoLnN0YXJ0c1dpdGgoXCIkTmF2aWdhdGlvblByb3BlcnR5QmluZGluZ1wiKSkge1xuXHRcdGxldCByZWxhdGl2ZVNwbGl0ID0gcmVsYXRpdmVQYXRoLnNwbGl0KFwiL1wiKTtcblx0XHRsZXQgaWR4ID0gMDtcblx0XHRsZXQgY3VycmVudEVudGl0eVNldCwgc05hdlByb3BUb0NoZWNrO1xuXG5cdFx0cmVsYXRpdmVTcGxpdCA9IHJlbGF0aXZlU3BsaXQuc2xpY2UoMSk7IC8vIFJlbW92aW5nIFwiJE5hdmlnYXRpb25Qcm9wZXJ0eUJpbmRpbmdcIlxuXHRcdHdoaWxlICghY3VycmVudEVudGl0eVNldCAmJiByZWxhdGl2ZVNwbGl0Lmxlbmd0aCA+IGlkeCkge1xuXHRcdFx0aWYgKHJlbGF0aXZlU3BsaXRbaWR4XSAhPT0gXCIkTmF2aWdhdGlvblByb3BlcnR5QmluZGluZ1wiKSB7XG5cdFx0XHRcdC8vIEZpbmRpbmcgdGhlIGNvcnJlY3QgZW50aXR5U2V0IGZvciB0aGUgbmF2aWdhaXRvbiBwcm9wZXJ0eSBiaW5kaW5nIGV4YW1wbGU6IFwiU2V0L19TYWxlc09yZGVyXCJcblx0XHRcdFx0c05hdlByb3BUb0NoZWNrID0gcmVsYXRpdmVTcGxpdFxuXHRcdFx0XHRcdC5zbGljZSgwLCBpZHggKyAxKVxuXHRcdFx0XHRcdC5qb2luKFwiL1wiKVxuXHRcdFx0XHRcdC5yZXBsYWNlKFwiLyROYXZpZ2F0aW9uUHJvcGVydHlCaW5kaW5nXCIsIFwiXCIpO1xuXHRcdFx0XHRjdXJyZW50RW50aXR5U2V0ID0gdGFyZ2V0RW50aXR5U2V0ICYmIHRhcmdldEVudGl0eVNldC5uYXZpZ2F0aW9uUHJvcGVydHlCaW5kaW5nW3NOYXZQcm9wVG9DaGVja107XG5cdFx0XHR9XG5cdFx0XHRpZHgrKztcblx0XHR9XG5cdFx0aWYgKCFjdXJyZW50RW50aXR5U2V0KSB7XG5cdFx0XHQvLyBGYWxsIGJhY2sgdG8gU2luZ2xlIG5hdiBwcm9wIGlmIGVudGl0eVNldCBpcyBub3QgZm91bmQuXG5cdFx0XHRzTmF2UHJvcFRvQ2hlY2sgPSByZWxhdGl2ZVNwbGl0WzBdO1xuXHRcdH1cblx0XHRjb25zdCBhTmF2UHJvcHMgPSBzTmF2UHJvcFRvQ2hlY2s/LnNwbGl0KFwiL1wiKSB8fCBbXTtcblx0XHRsZXQgdGFyZ2V0RW50aXR5VHlwZSA9IHRhcmdldEVudGl0eVNldCAmJiB0YXJnZXRFbnRpdHlTZXQuZW50aXR5VHlwZTtcblx0XHRmb3IgKGNvbnN0IHNOYXZQcm9wIG9mIGFOYXZQcm9wcykge1xuXHRcdFx0Ly8gUHVzaGluZyBhbGwgbmF2IHByb3BzIHRvIHRoZSB2aXNpdGVkIG9iamVjdHMuIGV4YW1wbGU6IFwiU2V0XCIsIFwiX1NhbGVzT3JkZXJcIiBmb3IgXCJTZXQvX1NhbGVzT3JkZXJcIihpbiBOYXZpZ2F0aW9uUHJvcGVydHlCaW5kaW5nKVxuXHRcdFx0Y29uc3QgdGFyZ2V0TmF2UHJvcCA9IHRhcmdldEVudGl0eVR5cGUgJiYgdGFyZ2V0RW50aXR5VHlwZS5uYXZpZ2F0aW9uUHJvcGVydGllcy5maW5kKChuYXZQcm9wKSA9PiBuYXZQcm9wLm5hbWUgPT09IHNOYXZQcm9wKTtcblx0XHRcdGlmICh0YXJnZXROYXZQcm9wKSB7XG5cdFx0XHRcdGxvY2FsT2JqZWN0cy5wdXNoKHRhcmdldE5hdlByb3ApO1xuXHRcdFx0XHR0YXJnZXRFbnRpdHlUeXBlID0gdGFyZ2V0TmF2UHJvcC50YXJnZXRUeXBlO1xuXHRcdFx0fSBlbHNlIHtcblx0XHRcdFx0YnJlYWs7XG5cdFx0XHR9XG5cdFx0fVxuXHRcdHRhcmdldEVudGl0eVNldCA9XG5cdFx0XHQodGFyZ2V0RW50aXR5U2V0ICYmIGN1cnJlbnRFbnRpdHlTZXQpIHx8ICh0YXJnZXRFbnRpdHlTZXQgJiYgdGFyZ2V0RW50aXR5U2V0Lm5hdmlnYXRpb25Qcm9wZXJ0eUJpbmRpbmdbcmVsYXRpdmVTcGxpdFswXV0pO1xuXHRcdGlmICh0YXJnZXRFbnRpdHlTZXQpIHtcblx0XHRcdC8vIFB1c2hpbmcgdGhlIHRhcmdldCBlbnRpdHlTZXQgdG8gdmlzaXRlZCBvYmplY3RzXG5cdFx0XHRsb2NhbE9iamVjdHMucHVzaCh0YXJnZXRFbnRpdHlTZXQpO1xuXHRcdH1cblx0XHQvLyBSZS1jYWxjdWxhdGluZyB0aGUgcmVsYXRpdmUgcGF0aFxuXHRcdC8vIEFzIGVhY2ggbmF2aWdhdGlvbiBuYW1lIGlzIGVuY2xvc2VkIGJldHdlZW4gJyROYXZpZ2F0aW9uUHJvcGVydHlCaW5kaW5nJyBhbmQgJyQnICh0byBiZSBhYmxlIHRvIGFjY2VzcyB0aGUgZW50aXR5c2V0IGVhc2lseSBpbiB0aGUgbWV0YW1vZGVsKVxuXHRcdC8vIHdlIG5lZWQgdG8gcmVtb3ZlIHRoZSBjbG9zaW5nICckJyB0byBiZSBhYmxlIHRvIHN3aXRjaCB0byB0aGUgbmV4dCBuYXZpZ2F0aW9uXG5cdFx0cmVsYXRpdmVTcGxpdCA9IHJlbGF0aXZlU3BsaXQuc2xpY2UoYU5hdlByb3BzLmxlbmd0aCB8fCAxKTtcblx0XHRpZiAocmVsYXRpdmVTcGxpdC5sZW5ndGggJiYgcmVsYXRpdmVTcGxpdFswXSA9PT0gXCIkXCIpIHtcblx0XHRcdHJlbGF0aXZlU3BsaXQuc2hpZnQoKTtcblx0XHR9XG5cdFx0cmVsYXRpdmVQYXRoID0gcmVsYXRpdmVTcGxpdC5qb2luKFwiL1wiKTtcblx0fVxuXHRpZiAocmVsYXRpdmVQYXRoLnN0YXJ0c1dpdGgoXCIkVHlwZVwiKSkge1xuXHRcdC8vIEFzICRUeXBlQCBpcyBhbGxvd2VkIGFzIHdlbGxcblx0XHRpZiAocmVsYXRpdmVQYXRoLnN0YXJ0c1dpdGgoXCIkVHlwZUBcIikpIHtcblx0XHRcdHJlbGF0aXZlUGF0aCA9IHJlbGF0aXZlUGF0aC5yZXBsYWNlKFwiJFR5cGVcIiwgXCJcIik7XG5cdFx0fSBlbHNlIHtcblx0XHRcdC8vIFdlJ3JlIGFueXdheSBnb2luZyB0byBsb29rIG9uIHRoZSBlbnRpdHlUeXBlLi4uXG5cdFx0XHRyZWxhdGl2ZVBhdGggPSBhUGF0aFNwbGl0LnNsaWNlKDMpLmpvaW4oXCIvXCIpO1xuXHRcdH1cblx0fVxuXHRpZiAodGFyZ2V0RW50aXR5U2V0ICYmIHJlbGF0aXZlUGF0aC5sZW5ndGgpIHtcblx0XHRjb25zdCBvVGFyZ2V0ID0gdGFyZ2V0RW50aXR5U2V0LmVudGl0eVR5cGUucmVzb2x2ZVBhdGgocmVsYXRpdmVQYXRoLCBiSW5jbHVkZVZpc2l0ZWRPYmplY3RzKTtcblx0XHRpZiAob1RhcmdldCkge1xuXHRcdFx0aWYgKGJJbmNsdWRlVmlzaXRlZE9iamVjdHMpIHtcblx0XHRcdFx0b1RhcmdldC52aXNpdGVkT2JqZWN0cyA9IGxvY2FsT2JqZWN0cy5jb25jYXQob1RhcmdldC52aXNpdGVkT2JqZWN0cyk7XG5cdFx0XHR9XG5cdFx0fSBlbHNlIGlmICh0YXJnZXRFbnRpdHlTZXQuZW50aXR5VHlwZSAmJiB0YXJnZXRFbnRpdHlTZXQuZW50aXR5VHlwZS5hY3Rpb25zKSB7XG5cdFx0XHQvLyBpZiB0YXJnZXQgaXMgYW4gYWN0aW9uIG9yIGFuIGFjdGlvbiBwYXJhbWV0ZXJcblx0XHRcdGNvbnN0IGFjdGlvbnMgPSB0YXJnZXRFbnRpdHlTZXQuZW50aXR5VHlwZSAmJiB0YXJnZXRFbnRpdHlTZXQuZW50aXR5VHlwZS5hY3Rpb25zO1xuXHRcdFx0Y29uc3QgcmVsYXRpdmVTcGxpdCA9IHJlbGF0aXZlUGF0aC5zcGxpdChcIi9cIik7XG5cdFx0XHRpZiAoYWN0aW9uc1tyZWxhdGl2ZVNwbGl0WzBdXSkge1xuXHRcdFx0XHRjb25zdCBhY3Rpb24gPSBhY3Rpb25zW3JlbGF0aXZlU3BsaXRbMF1dO1xuXHRcdFx0XHRpZiAocmVsYXRpdmVTcGxpdFsxXSAmJiBhY3Rpb24ucGFyYW1ldGVycykge1xuXHRcdFx0XHRcdGNvbnN0IHBhcmFtZXRlck5hbWUgPSByZWxhdGl2ZVNwbGl0WzFdO1xuXHRcdFx0XHRcdHJldHVybiBhY3Rpb24ucGFyYW1ldGVycy5maW5kKChwYXJhbWV0ZXIpID0+IHtcblx0XHRcdFx0XHRcdHJldHVybiBwYXJhbWV0ZXIuZnVsbHlRdWFsaWZpZWROYW1lLmVuZHNXaXRoKGAvJHtwYXJhbWV0ZXJOYW1lfWApO1xuXHRcdFx0XHRcdH0pO1xuXHRcdFx0XHR9IGVsc2UgaWYgKHJlbGF0aXZlUGF0aC5sZW5ndGggPT09IDEpIHtcblx0XHRcdFx0XHRyZXR1cm4gYWN0aW9uO1xuXHRcdFx0XHR9XG5cdFx0XHR9XG5cdFx0fVxuXHRcdHJldHVybiBvVGFyZ2V0O1xuXHR9IGVsc2Uge1xuXHRcdGlmIChiSW5jbHVkZVZpc2l0ZWRPYmplY3RzKSB7XG5cdFx0XHRyZXR1cm4ge1xuXHRcdFx0XHR0YXJnZXQ6IHRhcmdldEVudGl0eVNldCxcblx0XHRcdFx0dmlzaXRlZE9iamVjdHM6IGxvY2FsT2JqZWN0c1xuXHRcdFx0fTtcblx0XHR9XG5cdFx0cmV0dXJuIHRhcmdldEVudGl0eVNldDtcblx0fVxufVxuXG5leHBvcnQgdHlwZSBSZXNvbHZlZFRhcmdldCA9IHtcblx0dGFyZ2V0PzogU2VydmljZU9iamVjdDtcblx0dmlzaXRlZE9iamVjdHM6IChTZXJ2aWNlT2JqZWN0IHwgU2luZ2xldG9uKVtdO1xufTtcblxuZXhwb3J0IGZ1bmN0aW9uIGdldEludm9sdmVkRGF0YU1vZGVsT2JqZWN0cyhvTWV0YU1vZGVsQ29udGV4dDogQ29udGV4dCwgb0VudGl0eVNldE1ldGFNb2RlbENvbnRleHQ/OiBDb250ZXh0KTogRGF0YU1vZGVsT2JqZWN0UGF0aCB7XG5cdGNvbnN0IG9Db252ZXJ0ZWRNZXRhZGF0YSA9IGNvbnZlcnRUeXBlcyhvTWV0YU1vZGVsQ29udGV4dC5nZXRNb2RlbCgpIGFzIE9EYXRhTWV0YU1vZGVsKTtcblx0Y29uc3QgbWV0YU1vZGVsQ29udGV4dCA9IGNvbnZlcnRNZXRhTW9kZWxDb250ZXh0KG9NZXRhTW9kZWxDb250ZXh0LCB0cnVlKTtcblx0bGV0IHRhcmdldEVudGl0eVNldExvY2F0aW9uO1xuXHRpZiAob0VudGl0eVNldE1ldGFNb2RlbENvbnRleHQgJiYgb0VudGl0eVNldE1ldGFNb2RlbENvbnRleHQuZ2V0UGF0aCgpICE9PSBcIi9cIikge1xuXHRcdHRhcmdldEVudGl0eVNldExvY2F0aW9uID0gZ2V0SW52b2x2ZWREYXRhTW9kZWxPYmplY3RzKG9FbnRpdHlTZXRNZXRhTW9kZWxDb250ZXh0KTtcblx0fVxuXHRyZXR1cm4gZ2V0SW52b2x2ZWREYXRhTW9kZWxPYmplY3RGcm9tUGF0aChtZXRhTW9kZWxDb250ZXh0LCBvQ29udmVydGVkTWV0YWRhdGEsIHRhcmdldEVudGl0eVNldExvY2F0aW9uKTtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGdldEludm9sdmVkRGF0YU1vZGVsT2JqZWN0RnJvbVBhdGgoXG5cdG1ldGFNb2RlbENvbnRleHQ6IFJlc29sdmVkVGFyZ2V0LFxuXHRjb252ZXJ0ZWRUeXBlczogQ29udmVydGVkTWV0YWRhdGEsXG5cdHRhcmdldEVudGl0eVNldExvY2F0aW9uPzogRGF0YU1vZGVsT2JqZWN0UGF0aCxcblx0b25seVNlcnZpY2VPYmplY3RzPzogYm9vbGVhblxuKTogRGF0YU1vZGVsT2JqZWN0UGF0aCB7XG5cdGNvbnN0IGRhdGFNb2RlbE9iamVjdHMgPSBtZXRhTW9kZWxDb250ZXh0LnZpc2l0ZWRPYmplY3RzLmZpbHRlcihcblx0XHQodmlzaXRlZE9iamVjdDogYW55KSA9PlxuXHRcdFx0dmlzaXRlZE9iamVjdD8uaGFzT3duUHJvcGVydHkoXCJfdHlwZVwiKSAmJiB2aXNpdGVkT2JqZWN0Ll90eXBlICE9PSBcIkVudGl0eVR5cGVcIiAmJiB2aXNpdGVkT2JqZWN0Ll90eXBlICE9PSBcIkVudGl0eUNvbnRhaW5lclwiXG5cdCk7XG5cdGlmIChcblx0XHRtZXRhTW9kZWxDb250ZXh0LnRhcmdldD8uaGFzT3duUHJvcGVydHkoXCJfdHlwZVwiKSAmJlxuXHRcdG1ldGFNb2RlbENvbnRleHQudGFyZ2V0Ll90eXBlICE9PSBcIkVudGl0eVR5cGVcIiAmJlxuXHRcdGRhdGFNb2RlbE9iamVjdHNbZGF0YU1vZGVsT2JqZWN0cy5sZW5ndGggLSAxXSAhPT0gbWV0YU1vZGVsQ29udGV4dC50YXJnZXQgJiZcblx0XHQhb25seVNlcnZpY2VPYmplY3RzXG5cdCkge1xuXHRcdGRhdGFNb2RlbE9iamVjdHMucHVzaChtZXRhTW9kZWxDb250ZXh0LnRhcmdldCk7XG5cdH1cblxuXHRjb25zdCBuYXZpZ2F0aW9uUHJvcGVydGllczogTmF2aWdhdGlvblByb3BlcnR5W10gPSBbXTtcblx0Y29uc3Qgcm9vdEVudGl0eVNldDogRW50aXR5U2V0ID0gZGF0YU1vZGVsT2JqZWN0c1swXSBhcyBFbnRpdHlTZXQ7XG5cblx0bGV0IGN1cnJlbnRFbnRpdHlTZXQ6IEVudGl0eVNldCB8IFNpbmdsZXRvbiB8IHVuZGVmaW5lZCA9IHJvb3RFbnRpdHlTZXQ7XG5cdGxldCBjdXJyZW50RW50aXR5VHlwZTogRW50aXR5VHlwZSA9IHJvb3RFbnRpdHlTZXQuZW50aXR5VHlwZTtcblx0bGV0IGN1cnJlbnRPYmplY3Q6IFNlcnZpY2VPYmplY3QgfCB1bmRlZmluZWQ7XG5cdGxldCBuYXZpZ2F0ZWRQYXRoID0gW107XG5cblx0Zm9yIChsZXQgaSA9IDE7IGkgPCBkYXRhTW9kZWxPYmplY3RzLmxlbmd0aDsgaSsrKSB7XG5cdFx0Y3VycmVudE9iamVjdCA9IGRhdGFNb2RlbE9iamVjdHNbaV07XG5cblx0XHRpZiAoY3VycmVudE9iamVjdC5fdHlwZSA9PT0gXCJOYXZpZ2F0aW9uUHJvcGVydHlcIikge1xuXHRcdFx0bmF2aWdhdGVkUGF0aC5wdXNoKGN1cnJlbnRPYmplY3QubmFtZSk7XG5cdFx0XHRuYXZpZ2F0aW9uUHJvcGVydGllcy5wdXNoKGN1cnJlbnRPYmplY3QpO1xuXHRcdFx0Y3VycmVudEVudGl0eVR5cGUgPSBjdXJyZW50T2JqZWN0LnRhcmdldFR5cGU7XG5cdFx0XHRjb25zdCBib3VuZEVudGl0eVNldDogRW50aXR5U2V0IHwgU2luZ2xldG9uIHwgdW5kZWZpbmVkID0gY3VycmVudEVudGl0eVNldD8ubmF2aWdhdGlvblByb3BlcnR5QmluZGluZ1tuYXZpZ2F0ZWRQYXRoLmpvaW4oXCIvXCIpXTtcblx0XHRcdGlmIChib3VuZEVudGl0eVNldCkge1xuXHRcdFx0XHRjdXJyZW50RW50aXR5U2V0ID0gYm91bmRFbnRpdHlTZXQ7XG5cdFx0XHRcdG5hdmlnYXRlZFBhdGggPSBbXTtcblx0XHRcdH1cblx0XHR9XG5cdFx0aWYgKGN1cnJlbnRPYmplY3QuX3R5cGUgPT09IFwiRW50aXR5U2V0XCIgfHwgY3VycmVudE9iamVjdC5fdHlwZSA9PT0gXCJTaW5nbGV0b25cIikge1xuXHRcdFx0Y3VycmVudEVudGl0eVNldCA9IGN1cnJlbnRPYmplY3Q7XG5cdFx0XHRjdXJyZW50RW50aXR5VHlwZSA9IGN1cnJlbnRFbnRpdHlTZXQuZW50aXR5VHlwZTtcblx0XHR9XG5cdH1cblxuXHRpZiAobmF2aWdhdGVkUGF0aC5sZW5ndGggPiAwKSB7XG5cdFx0Ly8gUGF0aCB3aXRob3V0IE5hdmlnYXRpb25Qcm9wZXJ0eUJpbmRpbmcgLS0+IG5vIHRhcmdldCBlbnRpdHkgc2V0XG5cdFx0Y3VycmVudEVudGl0eVNldCA9IHVuZGVmaW5lZDtcblx0fVxuXG5cdGlmICh0YXJnZXRFbnRpdHlTZXRMb2NhdGlvbiAmJiB0YXJnZXRFbnRpdHlTZXRMb2NhdGlvbi5zdGFydGluZ0VudGl0eVNldCAhPT0gcm9vdEVudGl0eVNldCkge1xuXHRcdC8vIEluIGNhc2UgdGhlIGVudGl0eXNldCBpcyBub3Qgc3RhcnRpbmcgZnJvbSB0aGUgc2FtZSBsb2NhdGlvbiBpdCBtYXkgbWVhbiB0aGF0IHdlIGFyZSBkb2luZyB0b28gbXVjaCB3b3JrIGVhcmxpZXIgZm9yIHNvbWUgcmVhc29uXG5cdFx0Ly8gQXMgc3VjaCB3ZSBuZWVkIHRvIHJlZGVmaW5lIHRoZSBjb250ZXh0IHNvdXJjZSBmb3IgdGhlIHRhcmdldEVudGl0eVNldExvY2F0aW9uXG5cdFx0Y29uc3Qgc3RhcnRpbmdJbmRleCA9IGRhdGFNb2RlbE9iamVjdHMuaW5kZXhPZih0YXJnZXRFbnRpdHlTZXRMb2NhdGlvbi5zdGFydGluZ0VudGl0eVNldCk7XG5cdFx0aWYgKHN0YXJ0aW5nSW5kZXggIT09IC0xKSB7XG5cdFx0XHQvLyBJZiBpdCdzIG5vdCBmb3VuZCBJIGRvbid0IGtub3cgd2hhdCB3ZSBjYW4gZG8gKHByb2JhYmx5IG5vdGhpbmcpXG5cdFx0XHRjb25zdCByZXF1aXJlZERhdGFNb2RlbE9iamVjdHMgPSBkYXRhTW9kZWxPYmplY3RzLnNsaWNlKDAsIHN0YXJ0aW5nSW5kZXgpO1xuXHRcdFx0dGFyZ2V0RW50aXR5U2V0TG9jYXRpb24uc3RhcnRpbmdFbnRpdHlTZXQgPSByb290RW50aXR5U2V0O1xuXHRcdFx0dGFyZ2V0RW50aXR5U2V0TG9jYXRpb24ubmF2aWdhdGlvblByb3BlcnRpZXMgPSByZXF1aXJlZERhdGFNb2RlbE9iamVjdHNcblx0XHRcdFx0LmZpbHRlcigob2JqZWN0OiBhbnkpID0+IG9iamVjdC5fdHlwZSA9PT0gXCJOYXZpZ2F0aW9uUHJvcGVydHlcIilcblx0XHRcdFx0LmNvbmNhdCh0YXJnZXRFbnRpdHlTZXRMb2NhdGlvbi5uYXZpZ2F0aW9uUHJvcGVydGllcykgYXMgTmF2aWdhdGlvblByb3BlcnR5W107XG5cdFx0fVxuXHR9XG5cdGNvbnN0IG91dERhdGFNb2RlbFBhdGggPSB7XG5cdFx0c3RhcnRpbmdFbnRpdHlTZXQ6IHJvb3RFbnRpdHlTZXQsXG5cdFx0dGFyZ2V0RW50aXR5U2V0OiBjdXJyZW50RW50aXR5U2V0LFxuXHRcdHRhcmdldEVudGl0eVR5cGU6IGN1cnJlbnRFbnRpdHlUeXBlLFxuXHRcdHRhcmdldE9iamVjdDogbWV0YU1vZGVsQ29udGV4dC50YXJnZXQsXG5cdFx0bmF2aWdhdGlvblByb3BlcnRpZXMsXG5cdFx0Y29udGV4dExvY2F0aW9uOiB0YXJnZXRFbnRpdHlTZXRMb2NhdGlvbixcblx0XHRjb252ZXJ0ZWRUeXBlczogY29udmVydGVkVHlwZXNcblx0fTtcblx0aWYgKCFvdXREYXRhTW9kZWxQYXRoLnRhcmdldE9iamVjdD8uaGFzT3duUHJvcGVydHkoXCJfdHlwZVwiKSAmJiBvbmx5U2VydmljZU9iamVjdHMpIHtcblx0XHRvdXREYXRhTW9kZWxQYXRoLnRhcmdldE9iamVjdCA9IGN1cnJlbnRPYmplY3Q7XG5cdH1cblx0aWYgKCFvdXREYXRhTW9kZWxQYXRoLmNvbnRleHRMb2NhdGlvbikge1xuXHRcdG91dERhdGFNb2RlbFBhdGguY29udGV4dExvY2F0aW9uID0gb3V0RGF0YU1vZGVsUGF0aDtcblx0fVxuXHRyZXR1cm4gb3V0RGF0YU1vZGVsUGF0aDtcbn1cbiJdLCJtYXBwaW5ncyI6IjtBQUFBO0FBQUE7QUFBQTs7Ozs7O0VBZ0NBLE1BQU1BLGdCQUFxQixHQUFHO0lBQzdCLDJCQUEyQixFQUFFLGNBQWM7SUFDM0MsbUJBQW1CLEVBQUUsTUFBTTtJQUMzQix1QkFBdUIsRUFBRSxVQUFVO0lBQ25DLGdDQUFnQyxFQUFFLFFBQVE7SUFDMUMsNEJBQTRCLEVBQUUsSUFBSTtJQUNsQyxpQ0FBaUMsRUFBRSxTQUFTO0lBQzVDLG1DQUFtQyxFQUFFLFdBQVc7SUFDaEQsc0NBQXNDLEVBQUUsY0FBYztJQUN0RCx1Q0FBdUMsRUFBRTtFQUMxQyxDQUFDO0VBVU0sTUFBTUMsOEJBQThCLEdBQUc7SUFDN0NDLEtBQUssRUFBRSxJQUFJO0lBQ1hDLFVBQVUsRUFBRSxJQUFJO0lBQ2hCQyxNQUFNLEVBQUUsSUFBSTtJQUNaQyxxQkFBcUIsRUFBRSxJQUFJO0lBQzNCQyxRQUFRLEVBQUU7RUFDWCxDQUFDO0VBQUM7RUFvQkYsU0FBU0Msa0JBQWtCLENBQzFCQyxnQkFBcUIsRUFDckJDLFdBQW1CLEVBQ25CQyxhQUFxQixFQUNyQkMsZ0JBQWdELEVBQ2hEQyxhQUFzQyxFQUNoQztJQUNOLElBQUlDLEtBQUs7SUFDVCxNQUFNQyxxQkFBNkIsR0FBSSxHQUFFSixhQUFjLElBQUdELFdBQVksRUFBQztJQUN2RSxNQUFNTSxnQkFBZ0IsR0FBRyxPQUFPUCxnQkFBZ0I7SUFDaEQsSUFBSUEsZ0JBQWdCLEtBQUssSUFBSSxFQUFFO01BQzlCSyxLQUFLLEdBQUc7UUFBRUcsSUFBSSxFQUFFLE1BQU07UUFBRUMsSUFBSSxFQUFFO01BQUssQ0FBQztJQUNyQyxDQUFDLE1BQU0sSUFBSUYsZ0JBQWdC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
1173
+ //# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJuYW1lcyI6WyJWT0NBQlVMQVJZX0FMSUFTIiwiRGVmYXVsdEVudmlyb25tZW50Q2FwYWJpbGl0aWVzIiwiQ2hhcnQiLCJNaWNyb0NoYXJ0IiwiVVNoZWxsIiwiSW50ZW50QmFzZWROYXZpZ2F0aW9uIiwiQXBwU3RhdGUiLCJwYXJzZVByb3BlcnR5VmFsdWUiLCJhbm5vdGF0aW9uT2JqZWN0IiwicHJvcGVydHlLZXkiLCJjdXJyZW50VGFyZ2V0IiwiYW5ub3RhdGlvbnNMaXN0cyIsIm9DYXBhYmlsaXRpZXMiLCJ2YWx1ZSIsImN1cnJlbnRQcm9wZXJ0eVRhcmdldCIsInR5cGVPZkFubm90YXRpb24iLCJ0eXBlIiwiTnVsbCIsIlN0cmluZyIsIkJvb2wiLCJJbnQiLCJBcnJheSIsImlzQXJyYXkiLCJDb2xsZWN0aW9uIiwibWFwIiwic3ViQW5ub3RhdGlvbk9iamVjdCIsInN1YkFubm90YXRpb25PYmplY3RJbmRleCIsInBhcnNlQW5ub3RhdGlvbk9iamVjdCIsImxlbmd0aCIsImhhc093blByb3BlcnR5IiwiJFBhdGgiLCJ1bmRlZmluZWQiLCJQYXRoIiwiJERlY2ltYWwiLCJEZWNpbWFsIiwicGFyc2VGbG9hdCIsIiRQcm9wZXJ0eVBhdGgiLCJQcm9wZXJ0eVBhdGgiLCIkTmF2aWdhdGlvblByb3BlcnR5UGF0aCIsIk5hdmlnYXRpb25Qcm9wZXJ0eVBhdGgiLCIkSWYiLCJJZiIsIiRBbmQiLCJBbmQiLCIkT3IiLCJPciIsIiROb3QiLCJOb3QiLCIkRXEiLCJFcSIsIiROZSIsIk5lIiwiJEd0IiwiR3QiLCIkR2UiLCJHZSIsIiRMdCIsIkx0IiwiJExlIiwiTGUiLCIkQXBwbHkiLCJBcHBseSIsIkZ1bmN0aW9uIiwiJEZ1bmN0aW9uIiwiJEFubm90YXRpb25QYXRoIiwiQW5ub3RhdGlvblBhdGgiLCIkRW51bU1lbWJlciIsIkVudW1NZW1iZXIiLCJtYXBOYW1lVG9BbGlhcyIsInNwbGl0IiwiUmVjb3JkIiwibmFtZSIsImFubm90YXRpb25OYW1lIiwicGF0aFBhcnQiLCJhbm5vUGFydCIsImxhc3REb3QiLCJsYXN0SW5kZXhPZiIsInN1YnN0ciIsImN1cnJlbnRPYmplY3RUYXJnZXQiLCJwYXJzZWRBbm5vdGF0aW9uT2JqZWN0IiwidHlwZU9mT2JqZWN0IiwicGFyc2VkQW5ub3RhdGlvbkNvbGxlY3Rpb24iLCJjb2xsZWN0aW9uIiwic3ViQW5ub3RhdGlvbkluZGV4IiwiJFR5cGUiLCJ0eXBlVmFsdWUiLCJwcm9wZXJ0eVZhbHVlcyIsIk9iamVjdCIsImtleXMiLCJmb3JFYWNoIiwic3RhcnRzV2l0aCIsInB1c2giLCJjcmVhdGVBbm5vdGF0aW9uTGlzdHMiLCJnZXRPckNyZWF0ZUFubm90YXRpb25MaXN0IiwidGFyZ2V0IiwiYW5ub3RhdGlvbnMiLCJjcmVhdGVSZWZlcmVuY2VGYWNldElkIiwicmVmZXJlbmNlRmFjZXQiLCJpZCIsIklEIiwiVGFyZ2V0IiwicHJlcGFyZUlkIiwicmVtb3ZlQ2hhcnRBbm5vdGF0aW9ucyIsImZpbHRlciIsIm9SZWNvcmQiLCJpbmRleE9mIiwicmVtb3ZlSUJOQW5ub3RhdGlvbnMiLCJoYW5kbGVQcmVzZW50YXRpb25WYXJpYW50IiwiYW5ub3RhdGlvbk9iamVjdHMiLCJhbm5vdGF0aW9uVGFyZ2V0IiwiYW5ub3RhdGlvbkxpc3RzIiwib3V0QW5ub3RhdGlvbk9iamVjdCIsImFubm90YXRpb25LZXkiLCJEYXRhIiwiVmlzdWFsaXphdGlvbnMiLCJjdXJyZW50T3V0QW5ub3RhdGlvbk9iamVjdCIsImFubm90YXRpb25PZkFubm90YXRpb25TcGxpdCIsImFubm90YXRpb25RdWFsaWZpZXJTcGxpdCIsInF1YWxpZmllciIsInRlcm0iLCJjdXJyZW50QW5ub3RhdGlvblRhcmdldCIsImlzQ29sbGVjdGlvbiIsInR5cGVvZkFubm90YXRpb24iLCJyZWNvcmQiLCJwcmVwYXJlUHJvcGVydHkiLCJwcm9wZXJ0eURlZmluaXRpb24iLCJlbnRpdHlUeXBlT2JqZWN0IiwicHJvcGVydHlOYW1lIiwiX3R5cGUiLCJmdWxseVF1YWxpZmllZE5hbWUiLCJtYXhMZW5ndGgiLCIkTWF4TGVuZ3RoIiwicHJlY2lzaW9uIiwiJFByZWNpc2lvbiIsInNjYWxlIiwiJFNjYWxlIiwibnVsbGFibGUiLCIkTnVsbGFibGUiLCJwcmVwYXJlTmF2aWdhdGlvblByb3BlcnR5IiwibmF2UHJvcGVydHlEZWZpbml0aW9uIiwibmF2UHJvcGVydHlOYW1lIiwicmVmZXJlbnRpYWxDb25zdHJhaW50IiwiJFJlZmVyZW50aWFsQ29uc3RyYWludCIsInNvdXJjZVByb3BlcnR5TmFtZSIsInNvdXJjZVR5cGVOYW1lIiwic291cmNlUHJvcGVydHkiLCJ0YXJnZXRUeXBlTmFtZSIsInRhcmdldFByb3BlcnR5IiwibmF2aWdhdGlvblByb3BlcnR5IiwicGFydG5lciIsIiRQYXJ0bmVyIiwiJGlzQ29sbGVjdGlvbiIsImNvbnRhaW5zVGFyZ2V0IiwiJENvbnRhaW5zVGFyZ2V0IiwicHJlcGFyZUVudGl0eVNldCIsImVudGl0eVNldERlZmluaXRpb24iLCJlbnRpdHlTZXROYW1lIiwiZW50aXR5Q29udGFpbmVyTmFtZSIsImVudGl0eVNldE9iamVjdCIsIm5hdmlnYXRpb25Qcm9wZXJ0eUJpbmRpbmciLCJlbnRpdHlUeXBlTmFtZSIsInByZXBhcmVTaW5nbGV0b24iLCJzaW5nbGV0b25EZWZpbml0aW9uIiwic2luZ2xldG9uTmFtZSIsInByZXBhcmVBY3Rpb25JbXBvcnQiLCJhY3Rpb25JbXBvcnQiLCJhY3Rpb25JbXBvcnROYW1lIiwiYWN0aW9uTmFtZSIsIiRBY3Rpb24iLCJwcmVwYXJlVHlwZURlZmluaXRpb24iLCJ0eXBlRGVmaW5pdGlvbiIsInR5cGVOYW1lIiwibmFtZXNwYWNlUHJlZml4IiwidHlwZU9iamVjdCIsInN1YnN0cmluZyIsInVuZGVybHlpbmdUeXBlIiwiJFVuZGVybHlpbmdUeXBlIiwicHJlcGFyZUNvbXBsZXhUeXBlIiwiY29tcGxleFR5cGVEZWZpbml0aW9uIiwiY29tcGxleFR5cGVOYW1lIiwiY29tcGxleFR5cGVPYmplY3QiLCJwcm9wZXJ0aWVzIiwibmF2aWdhdGlvblByb3BlcnRpZXMiLCJjb21wbGV4VHlwZVByb3BlcnRpZXMiLCJwcm9wZXJ0eU5hbWVPck5vdCIsIiRraW5kIiwic29ydCIsImEiLCJiIiwiY29tcGxleFR5cGVOYXZpZ2F0aW9uUHJvcGVydGllcyIsInByZXBhcmVFbnRpdHlLZXlzIiwiZW50aXR5VHlwZURlZmluaXRpb24iLCJvTWV0YU1vZGVsRGF0YSIsIiRLZXkiLCIkQmFzZVR5cGUiLCJwcmVwYXJlRW50aXR5VHlwZSIsIm1ldGFNb2RlbERhdGEiLCJlbnRpdHlUeXBlIiwiZW50aXR5UHJvcGVydGllcyIsImFjdGlvbnMiLCJrZXkiLCJwcm9wZXJ0eSIsImVudGl0eUtleSIsImZpbmQiLCIkQW5ub3RhdGlvbnMiLCJmaWx0ZXJGYWNldEFubm90YXRpb24iLCJlbnRpdHlQcm9wZXJ0eSIsIlZhbHVlIiwicHJlcGFyZUFjdGlvbiIsImFjdGlvblJhd0RhdGEiLCJhY3Rpb25FbnRpdHlUeXBlIiwiYWN0aW9uRlFOIiwiJElzQm91bmQiLCJiaW5kaW5nUGFyYW1ldGVyIiwiJFBhcmFtZXRlciIsInBhcmFtZXRlcnMiLCJpc0JvdW5kIiwiaXNGdW5jdGlvbiIsInNvdXJjZVR5cGUiLCJyZXR1cm5UeXBlIiwiJFJldHVyblR5cGUiLCJwYXJhbSIsIiROYW1lIiwicGFyc2VFbnRpdHlDb250YWluZXIiLCJlbnRpdHlDb250YWluZXJNZXRhZGF0YSIsInNjaGVtYSIsImVudGl0eUNvbnRhaW5lciIsImVsZW1lbnROYW1lIiwiZWxlbWVudFZhbHVlIiwiZW50aXR5U2V0cyIsInNpbmdsZXRvbnMiLCJhY3Rpb25JbXBvcnRzIiwiZW50aXR5U2V0IiwibmF2UHJvcGVydHlCaW5kaW5ncyIsIiROYXZpZ2F0aW9uUHJvcGVydHlCaW5kaW5nIiwibmF2UHJvcE5hbWUiLCJ0YXJnZXRFbnRpdHlTZXQiLCJwYXJzZUFubm90YXRpb25zIiwiY2FwYWJpbGl0aWVzIiwidmFsdWVzIiwicGFyc2VTY2hlbWEiLCJuYW1lc3BhY2UiLCJzbGljZSIsImVudGl0eVR5cGVzIiwiY29tcGxleFR5cGVzIiwidHlwZURlZmluaXRpb25zIiwiYXNzb2NpYXRpb25zIiwiYXNzb2NpYXRpb25TZXRzIiwicGFyc2VNZXRhTW9kZWxFbGVtZW50Iiwic3ViRWxlbWVudFZhbHVlIiwicGFyc2VNZXRhTW9kZWwiLCJtZXRhTW9kZWwiLCJyZXN1bHQiLCJpZGVudGlmaWNhdGlvbiIsInZlcnNpb24iLCJyZWZlcmVuY2VzIiwiQW5ub3RhdGlvbkNvbnZlcnRlciIsImxhenkiLCJnZXRPYmplY3QiLCJtTWV0YU1vZGVsTWFwIiwiaXNDb21wbGV4VHlwZSIsImNvbXBsZXhUeXBlIiwiaXNFbnRpdHlUeXBlIiwiaXNFbnRpdHlTZXQiLCJjb252ZXJ0VHlwZXMiLCJvTWV0YU1vZGVsIiwic01ldGFNb2RlbElkIiwicGFyc2VkT3V0cHV0IiwiY29udmVydCIsIm9FcnJvciIsIkVycm9yIiwiZ2V0Q29udmVydGVkVHlwZXMiLCJvQ29udGV4dCIsImdldE1vZGVsIiwiaXNBIiwiZGVsZXRlTW9kZWxDYWNoZURhdGEiLCJjb252ZXJ0TWV0YU1vZGVsQ29udGV4dCIsIm9NZXRhTW9kZWxDb250ZXh0IiwiYkluY2x1ZGVWaXNpdGVkT2JqZWN0cyIsIm9Db252ZXJ0ZWRNZXRhZGF0YSIsInNQYXRoIiwiZ2V0UGF0aCIsImFQYXRoU3BsaXQiLCJmaXJzdFBhcnQiLCJiZWdpbkluZGV4Iiwic2luZ2xldG9uIiwicmVsYXRpdmVQYXRoIiwiam9pbiIsImxvY2FsT2JqZWN0cyIsInJlbGF0aXZlU3BsaXQiLCJpZHgiLCJjdXJyZW50RW50aXR5U2V0Iiwic05hdlByb3BUb0NoZWNrIiwicmVwbGFjZSIsImFOYXZQcm9wcyIsInRhcmdldEVudGl0eVR5cGUiLCJzTmF2UHJvcCIsInRhcmdldE5hdlByb3AiLCJuYXZQcm9wIiwidGFyZ2V0VHlwZSIsInNoaWZ0Iiwib1RhcmdldCIsInJlc29sdmVQYXRoIiwidmlzaXRlZE9iamVjdHMiLCJjb25jYXQiLCJhY3Rpb24iLCJwYXJhbWV0ZXJOYW1lIiwicGFyYW1ldGVyIiwiZW5kc1dpdGgiLCJnZXRJbnZvbHZlZERhdGFNb2RlbE9iamVjdHMiLCJvRW50aXR5U2V0TWV0YU1vZGVsQ29udGV4dCIsIm1ldGFNb2RlbENvbnRleHQiLCJ0YXJnZXRFbnRpdHlTZXRMb2NhdGlvbiIsImdldEludm9sdmVkRGF0YU1vZGVsT2JqZWN0RnJvbVBhdGgiLCJjb252ZXJ0ZWRUeXBlcyIsIm9ubHlTZXJ2aWNlT2JqZWN0cyIsImRhdGFNb2RlbE9iamVjdHMiLCJ2aXNpdGVkT2JqZWN0Iiwicm9vdEVudGl0eVNldCIsImN1cnJlbnRFbnRpdHlUeXBlIiwiY3VycmVudE9iamVjdCIsIm5hdmlnYXRlZFBhdGgiLCJpIiwiYm91bmRFbnRpdHlTZXQiLCJzdGFydGluZ0VudGl0eVNldCIsInN0YXJ0aW5nSW5kZXgiLCJyZXF1aXJlZERhdGFNb2RlbE9iamVjdHMiLCJvYmplY3QiLCJvdXREYXRhTW9kZWxQYXRoIiwidGFyZ2V0T2JqZWN0IiwiY29udGV4dExvY2F0aW9uIl0sInNvdXJjZVJvb3QiOiIuIiwic291cmNlcyI6WyJNZXRhTW9kZWxDb252ZXJ0ZXIudHMiXSwic291cmNlc0NvbnRlbnQiOlsiLy8gVGhpcyBmaWxlIGlzIHJldHJpZXZlZCBmcm9tIEBzYXAtdXgvYW5ub3RhdGlvbi1jb252ZXJ0ZXIsIHNoYXJlZCBjb2RlIHdpdGggdG9vbCBzdWl0ZVxuXG5pbXBvcnQgdHlwZSB7XG5cdEFubm90YXRpb24sXG5cdEFubm90YXRpb25MaXN0LFxuXHRBbm5vdGF0aW9uUmVjb3JkLFxuXHRDb21wbGV4VHlwZSxcblx0Q29udmVydGVkTWV0YWRhdGEsXG5cdEVudGl0eVNldCxcblx0RW50aXR5VHlwZSxcblx0RXhwcmVzc2lvbixcblx0TmF2aWdhdGlvblByb3BlcnR5LFxuXHRSYXdBY3Rpb24sXG5cdFJhd0FjdGlvbkltcG9ydCxcblx0UmF3Q29tcGxleFR5cGUsXG5cdFJhd0VudGl0eVNldCxcblx0UmF3RW50aXR5VHlwZSxcblx0UmF3TWV0YWRhdGEsXG5cdFJhd1Byb3BlcnR5LFxuXHRSYXdTY2hlbWEsXG5cdFJhd1NpbmdsZXRvbixcblx0UmF3VHlwZURlZmluaXRpb24sXG5cdFJhd1Y0TmF2aWdhdGlvblByb3BlcnR5LFxuXHRSZWZlcmVudGlhbENvbnN0cmFpbnQsXG5cdFNlcnZpY2VPYmplY3QsXG5cdFNpbmdsZXRvblxufSBmcm9tIFwiQHNhcC11eC92b2NhYnVsYXJpZXMtdHlwZXNcIjtcbmltcG9ydCB7IFVJQW5ub3RhdGlvblRlcm1zLCBVSUFubm90YXRpb25UeXBlcyB9IGZyb20gXCJAc2FwLXV4L3ZvY2FidWxhcmllcy10eXBlcy92b2NhYnVsYXJpZXMvVUlcIjtcbmltcG9ydCB7IEFubm90YXRpb25Db252ZXJ0ZXIgfSBmcm9tIFwic2FwL2ZlL2NvcmUvY29udmVydGVycy9jb21tb25cIjtcbmltcG9ydCB0eXBlIHsgRGF0YU1vZGVsT2JqZWN0UGF0aCB9IGZyb20gXCJzYXAvZmUvY29yZS90ZW1wbGF0aW5nL0RhdGFNb2RlbFBhdGhIZWxwZXJcIjtcbmltcG9ydCB0eXBlIENvbnRleHQgZnJvbSBcInNhcC91aS9tb2RlbC9Db250ZXh0XCI7XG5pbXBvcnQgdHlwZSBPRGF0YU1ldGFNb2RlbCBmcm9tIFwic2FwL3VpL21vZGVsL29kYXRhL3Y0L09EYXRhTWV0YU1vZGVsXCI7XG5pbXBvcnQgeyBwcmVwYXJlSWQgfSBmcm9tIFwiLi4vaGVscGVycy9TdGFibGVJZEhlbHBlclwiO1xuXG5jb25zdCBWT0NBQlVMQVJZX0FMSUFTOiBhbnkgPSB7XG5cdFwiT3JnLk9EYXRhLkNhcGFiaWxpdGllcy5WMVwiOiBcIkNhcGFiaWxpdGllc1wiLFxuXHRcIk9yZy5PRGF0YS5Db3JlLlYxXCI6IFwiQ29yZVwiLFxuXHRcIk9yZy5PRGF0YS5NZWFzdXJlcy5WMVwiOiBcIk1lYXN1cmVzXCIsXG5cdFwiY29tLnNhcC52b2NhYnVsYXJpZXMuQ29tbW9uLnYxXCI6IFwiQ29tbW9uXCIsXG5cdFwiY29tLnNhcC52b2NhYnVsYXJpZXMuVUkudjFcIjogXCJVSVwiLFxuXHRcImNvbS5zYXAudm9jYWJ1bGFyaWVzLlNlc3Npb24udjFcIjogXCJTZXNzaW9uXCIsXG5cdFwiY29tLnNhcC52b2NhYnVsYXJpZXMuQW5hbHl0aWNzLnYxXCI6IFwiQW5hbHl0aWNzXCIsXG5cdFwiY29tLnNhcC52b2NhYnVsYXJpZXMuUGVyc29uYWxEYXRhLnYxXCI6IFwiUGVyc29uYWxEYXRhXCIsXG5cdFwiY29tLnNhcC52b2NhYnVsYXJpZXMuQ29tbXVuaWNhdGlvbi52MVwiOiBcIkNvbW11bmljYXRpb25cIlxufTtcblxuZXhwb3J0IHR5cGUgRW52aXJvbm1lbnRDYXBhYmlsaXRpZXMgPSB7XG5cdENoYXJ0OiBib29sZWFuO1xuXHRNaWNyb0NoYXJ0OiBib29sZWFuO1xuXHRVU2hlbGw6IGJvb2xlYW47XG5cdEludGVudEJhc2VkTmF2aWdhdGlvbjogYm9vbGVhbjtcblx0QXBwU3RhdGU6IGJvb2xlYW47XG59O1xuXG5leHBvcnQgY29uc3QgRGVmYXVsdEVudmlyb25tZW50Q2FwYWJpbGl0aWVzID0ge1xuXHRDaGFydDogdHJ1ZSxcblx0TWljcm9DaGFydDogdHJ1ZSxcblx0VVNoZWxsOiB0cnVlLFxuXHRJbnRlbnRCYXNlZE5hdmlnYXRpb246IHRydWUsXG5cdEFwcFN0YXRlOiB0cnVlXG59O1xuXG50eXBlIE1ldGFNb2RlbEFjdGlvbiA9IHtcblx0JGtpbmQ6IFwiQWN0aW9uXCIgfCBcIkZ1bmN0aW9uXCI7XG5cdCRJc0JvdW5kOiBib29sZWFuO1xuXHQkRW50aXR5U2V0UGF0aDogc3RyaW5nO1xuXHQkUGFyYW1ldGVyOiB7XG5cdFx0JFR5cGU6IHN0cmluZztcblx0XHQkTmFtZTogc3RyaW5nO1xuXHRcdCROdWxsYWJsZT86IGJvb2xlYW47XG5cdFx0JE1heExlbmd0aD86IG51bWJlcjtcblx0XHQkUHJlY2lzaW9uPzogbnVtYmVyO1xuXHRcdCRTY2FsZT86IG51bWJlcjtcblx0XHQkaXNDb2xsZWN0aW9uPzogYm9vbGVhbjtcblx0fVtdO1xuXHQkUmV0dXJuVHlwZToge1xuXHRcdCRUeXBlOiBzdHJpbmc7XG5cdH07XG59O1xuXG5mdW5jdGlvbiBwYXJzZVByb3BlcnR5VmFsdWUoXG5cdGFubm90YXRpb25PYmplY3Q6IGFueSxcblx0cHJvcGVydHlLZXk6IHN0cmluZyxcblx0Y3VycmVudFRhcmdldDogc3RyaW5nLFxuXHRhbm5vdGF0aW9uc0xpc3RzOiBSZWNvcmQ8c3RyaW5nLCBBbm5vdGF0aW9uTGlzdD4sXG5cdG9DYXBhYmlsaXRpZXM6IEVudmlyb25tZW50Q2FwYWJpbGl0aWVzXG4pOiBhbnkge1xuXHRsZXQgdmFsdWU7XG5cdGNvbnN0IGN1cnJlbnRQcm9wZXJ0eVRhcmdldDogc3RyaW5nID0gYCR7Y3VycmVudFRhcmdldH0vJHtwcm9wZXJ0eUtleX1gO1xuXHRjb25zdCB0eXBlT2ZBbm5vdGF0aW9uID0gdHlwZW9mIGFubm90YXRpb25PYmplY3Q7XG5cdGlmIChhbm5vdGF0aW9uT2JqZWN0ID09PSBudWxsKSB7XG5cdFx0dmFsdWUgPSB7IHR5cGU6IFwiTnVsbFwiLCBOdWxsOiBudWxsIH07XG5cdH0gZWxzZSBpZiAodHlwZU9mQW5ub3RhdGlvbiA9PT0gXCJzdHJpbmdcIikge1xuXHRcdHZhbHVlID0geyB0eXBlOiBcIlN0cmluZ1wiLCBTdHJpbmc6IGFubm90YXRpb25PYmplY3QgfTtcblx0fSBlbHNlIGlmICh0eXBlT2ZBbm5vdGF0aW9uID09PSBcImJvb2xlYW5cIikge1xuXHRcdHZhbHVlID0geyB0eXBlOiBcIkJvb2xcIiwgQm9vbDogYW5ub3RhdGlvbk9iamVjdCB9O1xuXHR9IGVsc2UgaWYgKHR5cGVPZkFubm90YXRpb24gPT09IFwibnVtYmVyXCIpIHtcblx0XHR2YWx1ZSA9IHsgdHlwZTogXCJJbnRcIiwgSW50OiBhbm5vdGF0aW9uT2JqZWN0IH07XG5cdH0gZWxzZSBpZiAoQXJyYXkuaXNBcnJheShhbm5vdGF0aW9uT2JqZWN0KSkge1xuXHRcdHZhbHVlID0ge1xuXHRcdFx0dHlwZTogXCJDb2xsZWN0aW9uXCIsXG5cdFx0XHRDb2xsZWN0aW9uOiBhbm5vdGF0aW9uT2JqZWN0Lm1hcCgoc3ViQW5ub3RhdGlvbk9iamVjdCwgc3ViQW5ub3RhdGlvbk9iamVjdEluZGV4KSA9PlxuXHRcdFx0XHRwYXJzZUFubm90YXRpb25PYmplY3QoXG5cdFx0XHRcdFx0c3ViQW5ub3RhdGlvbk9iamVjdCxcblx0XHRcdFx0XHRgJHtjdXJyZW50UHJvcGVydHlUYXJnZXR9LyR7c3ViQW5ub3RhdGlvbk9iamVjdEluZGV4fWAsXG5cdFx0XHRcdFx0YW5ub3RhdGlvbnNMaXN0cyxcblx0XHRcdFx0XHRvQ2FwYWJpbGl0aWVzXG5cdFx0XHRcdClcblx0XHRcdClcblx0XHR9O1xuXHRcdGlmIChhbm5vdGF0aW9uT2JqZWN0Lmxlbmd0aCA+IDApIHtcblx0XHRcdGlmIChhbm5vdGF0aW9uT2JqZWN0WzBdLmhhc093blByb3BlcnR5KFwiJFByb3BlcnR5UGF0aFwiKSkge1xuXHRcdFx0XHQodmFsdWUuQ29sbGVjdGlvbiBhcyBhbnkpLnR5cGUgPSBcIlByb3BlcnR5UGF0aFwiO1xuXHRcdFx0fSBlbHNlIGlmIChhbm5vdGF0aW9uT2JqZWN0WzBdLmhhc093blByb3BlcnR5KFwiJFBhdGhcIikpIHtcblx0XHRcdFx0KHZhbHVlLkNvbGxlY3Rpb24gYXMgYW55KS50eXBlID0gXCJQYXRoXCI7XG5cdFx0XHR9IGVsc2UgaWYgKGFubm90YXRpb25PYmplY3RbMF0uaGFzT3duUHJvcGVydHkoXCIkTmF2aWdhdGlvblByb3BlcnR5UGF0aFwiKSkge1xuXHRcdFx0XHQodmFsdWUuQ29sbGVjdGlvbiBhcyBhbnkpLnR5cGUgPSBcIk5hdmlnYXRpb25Qcm9wZXJ0eVBhdGhcIjtcblx0XHRcdH0gZWxzZSBpZiAoYW5ub3RhdGlvbk9iamVjdFswXS5oYXNPd25Qcm9wZXJ0eShcIiRBbm5vdGF0aW9uUGF0aFwiKSkge1xuXHRcdFx0XHQodmFsdWUuQ29sbGVjdGlvbiBhcyBhbnkpLnR5cGUgPSBcIkFubm90YXRpb25QYXRoXCI7XG5cdFx0XHR9IGVsc2UgaWYgKGFubm90YXRpb25PYmplY3RbMF0uaGFzT3duUHJvcGVydHkoXCIkVHlwZVwiKSkge1xuXHRcdFx0XHQodmFsdWUuQ29sbGVjdGlvbiBhcyBhbnkpLnR5cGUgPSBcIlJlY29yZFwiO1xuXHRcdFx0fSBlbHNlIGlmIChhbm5vdGF0aW9uT2JqZWN0WzBdLmhhc093blByb3BlcnR5KFwiJElmXCIpKSB7XG5cdFx0XHRcdCh2YWx1ZS5Db2xsZWN0aW9uIGFzIGFueSkudHlwZSA9IFwiSWZcIjtcblx0XHRcdH0gZWxzZSBpZiAoYW5ub3RhdGlvbk9iamVjdFswXS5oYXNPd25Qcm9wZXJ0eShcIiRPclwiKSkge1xuXHRcdFx0XHQodmFsdWUuQ29sbGVjdGlvbiBhcyBhbnkpLnR5cGUgPSBcIk9yXCI7XG5cdFx0XHR9IGVsc2UgaWYgKGFubm90YXRpb25PYmplY3RbMF0uaGFzT3duUHJvcGVydHkoXCIkQW5kXCIpKSB7XG5cdFx0XHRcdCh2YWx1ZS5Db2xsZWN0aW9uIGFzIGFueSkudHlwZSA9IFwiQW5kXCI7XG5cdFx0XHR9IGVsc2UgaWYgKGFubm90YXRpb25PYmplY3RbMF0uaGFzT3duUHJvcGVydHkoXCIkRXFcIikpIHtcblx0XHRcdFx0KHZhbHVlLkNvbGxlY3Rpb24gYXMgYW55KS50eXBlID0gXCJFcVwiO1xuXHRcdFx0fSBlbHNlIGlmIChhbm5vdGF0aW9uT2JqZWN0WzBdLmhhc093blByb3BlcnR5KFwiJE5lXCIpKSB7XG5cdFx0XHRcdCh2YWx1ZS5Db2xsZWN0aW9uIGFzIGFueSkudHlwZSA9IFwiTmVcIjtcblx0XHRcdH0gZWxzZSBpZiAoYW5ub3RhdGlvbk9iamVjdFswXS5oYXNPd25Qcm9wZXJ0eShcIiROb3RcIikpIHtcblx0XHRcdFx0KHZhbHVlLkNvbGxlY3Rpb24gYXMgYW55KS50eXBlID0gXCJOb3RcIjtcblx0XHRcdH0gZWxzZSBpZiAoYW5ub3RhdGlvbk9iamVjdFswXS5oYXNPd25Qcm9wZXJ0eShcIiRHdFwiKSkge1xuXHRcdFx0XHQodmFsdWUuQ29sbGVjdGlvbiBhcyBhbnkpLnR5cGUgPSBcIkd0XCI7XG5cdFx0XHR9IGVsc2UgaWYgKGFubm90YXRpb25PYmplY3RbMF0uaGFzT3duUHJvcGVydHkoXCIkR2VcIikpIHtcblx0XHRcdFx0KHZhbHVlLkNvbGxlY3Rpb24gYXMgYW55KS50eXBlID0gXCJHZVwiO1xuXHRcdFx0fSBlbHNlIGlmIChhbm5vdGF0aW9uT2JqZWN0WzBdLmhhc093blByb3BlcnR5KFwiJEx0XCIpKSB7XG5cdFx0XHRcdCh2YWx1ZS5Db2xsZWN0aW9uIGFzIGFueSkudHlwZSA9IFwiTHRcIjtcblx0XHRcdH0gZWxzZSBpZiAoYW5ub3RhdGlvbk9iamVjdFswXS5oYXNPd25Qcm9wZXJ0eShcIiRMZVwiKSkge1xuXHRcdFx0XHQodmFsdWUuQ29sbGVjdGlvbiBhcyBhbnkpLnR5cGUgPSBcIkxlXCI7XG5cdFx0XHR9IGVsc2UgaWYgKGFubm90YXRpb25PYmplY3RbMF0uaGFzT3duUHJvcGVydHkoXCIkQXBwbHlcIikpIHtcblx0XHRcdFx0KHZhbHVlLkNvbGxlY3Rpb24gYXMgYW55KS50eXBlID0gXCJBcHBseVwiO1xuXHRcdFx0fSBlbHNlIGlmICh0eXBlb2YgYW5ub3RhdGlvbk9iamVjdFswXSA9PT0gXCJvYmplY3RcIikge1xuXHRcdFx0XHQvLyAkVHlwZSBpcyBvcHRpb25hbC4uLlxuXHRcdFx0XHQodmFsdWUuQ29sbGVjdGlvbiBhcyBhbnkpLnR5cGUgPSBcIlJlY29yZFwiO1xuXHRcdFx0fSBlbHNlIHtcblx0XHRcdFx0KHZhbHVlLkNvbGxlY3Rpb24gYXMgYW55KS50eXBlID0gXCJTdHJpbmdcIjtcblx0XHRcdH1cblx0XHR9XG5cdH0gZWxzZSBpZiAoYW5ub3RhdGlvbk9iamVjdC4kUGF0aCAhPT0gdW5kZWZpbmVkKSB7XG5cdFx0dmFsdWUgPSB7IHR5cGU6IFwiUGF0aFwiLCBQYXRoOiBhbm5vdGF0aW9uT2JqZWN0LiRQYXRoIH07XG5cdH0gZWxzZSBpZiAoYW5ub3RhdGlvbk9iamVjdC4kRGVjaW1hbCAhPT0gdW5kZWZpbmVkKSB7XG5cdFx0dmFsdWUgPSB7IHR5cGU6IFwiRGVjaW1hbFwiLCBEZWNpbWFsOiBwYXJzZUZsb2F0KGFubm90YXRpb25PYmplY3QuJERlY2ltYWwpIH07XG5cdH0gZWxzZSBpZiAoYW5ub3RhdGlvbk9iamVjdC4kUHJvcGVydHlQYXRoICE9PSB1bmRlZmluZWQpIHtcblx0XHR2YWx1ZSA9IHsgdHlwZTogXCJQcm9wZXJ0eVBhdGhcIiwgUHJvcGVydHlQYXRoOiBhbm5vdGF0aW9uT2JqZWN0LiRQcm9wZXJ0eVBhdGggfTtcblx0fSBlbHNlIGlmIChhbm5vdGF0aW9uT2JqZWN0LiROYXZpZ2F0aW9uUHJvcGVydHlQYXRoICE9PSB1bmRlZmluZWQpIHtcblx0XHR2YWx1ZSA9IHtcblx0XHRcdHR5cGU6IFwiTmF2aWdhdGlvblByb3BlcnR5UGF0aFwiLFxuXHRcdFx0TmF2aWdhdGlvblByb3BlcnR5UGF0aDogYW5ub3RhdGlvbk9iamVjdC4kTmF2aWdhdGlvblByb3BlcnR5UGF0aFxuXHRcdH07XG5cdH0gZWxzZSBpZiAoYW5ub3RhdGlvbk9iamVjdC4kSWYgIT09IHVuZGVmaW5lZCkge1xuXHRcdHZhbHVlID0geyB0eXBlOiBcIklmXCIsIElmOiBhbm5vdGF0aW9uT2JqZWN0LiRJZiB9O1xuXHR9IGVsc2UgaWYgKGFubm90YXRpb25PYmplY3QuJEFuZCAhPT0gdW5kZWZpbmVkKSB7XG5cdFx0dmFsdWUgPSB7IHR5cGU6IFwiQW5kXCIsIEFuZDogYW5ub3RhdGlvbk9iamVjdC4kQW5kIH07XG5cdH0gZWxzZSBpZiAoYW5ub3RhdGlvbk9iamVjdC4kT3IgIT09IHVuZGVmaW5lZCkge1xuXHRcdHZhbHVlID0geyB0eXBlOiBcIk9yXCIsIE9yOiBhbm5vdGF0aW9uT2JqZWN0LiRPciB9O1xuXHR9IGVsc2UgaWYgKGFubm90YXRpb25PYmplY3QuJE5vdCAhPT0gdW5kZWZpbmVkKSB7XG5cdFx0dmFsdWUgPSB7IHR5cGU6IFwiTm90XCIsIE5vdDogYW5ub3RhdGlvbk9iamVjdC4kTm90IH07XG5cdH0gZWxzZSBpZiAoYW5ub3RhdGlvbk9iamVjdC4kRXEgIT09IHVuZGVmaW5lZCkge1xuXHRcdHZhbHVlID0geyB0eXBlOiBcIkVxXCIsIEVxOiBhbm5vdGF0aW9uT2JqZWN0LiRFcSB9O1xuXHR9IGVsc2UgaWYgKGFubm90YXRpb25PYmplY3QuJE5lICE9PSB1bmRlZmluZWQpIHtcblx0XHR2YWx1ZSA9IHsgdHlwZTogXCJOZVwiLCBOZTogYW5ub3RhdGlvbk9iamVjdC4kTmUgfTtcblx0fSBlbHNlIGlmIChhbm5vdGF0aW9uT2JqZWN0LiRHdCAhPT0gdW5kZWZpbmVkKSB7XG5cdFx0dmFsdWUgPSB7IHR5cGU6IFwiR3RcIiwgR3Q6IGFubm90YXRpb25PYmplY3QuJEd0IH07XG5cdH0gZWxzZSBpZiAoYW5ub3RhdGlvbk9iamVjdC4kR2UgIT09IHVuZGVmaW5lZCkge1xuXHRcdHZhbHVlID0geyB0eXBlOiBcIkdlXCIsIEdlOiBhbm5vdGF0aW9uT2JqZWN0LiRHZSB9O1xuXHR9IGVsc2UgaWYgKGFubm90YXRpb25PYmplY3QuJEx0ICE9PSB1bmRlZmluZWQpIHtcblx0XHR2YWx1ZSA9IHsgdHlwZTogXCJMdFwiLCBMdDogYW5ub3RhdGlvbk9iamVjdC4kTHQgfTtcblx0fSBlbHNlIGlmIChhbm5vdGF0aW9uT2JqZWN0LiRMZSAhPT0gdW5kZWZpbmVkKSB7XG5cdFx0dmFsdWUgPSB7IHR5cGU6IFwiTGVcIiwgTGU6IGFubm90YXRpb25PYmplY3QuJExlIH07XG5cdH0gZWxzZSBpZiAoYW5ub3RhdGlvbk9iamVjdC4kQXBwbHkgIT09IHVuZGVmaW5lZCkge1xuXHRcdHZhbHVlID0geyB0eXBlOiBcIkFwcGx5XCIsIEFwcGx5OiBhbm5vdGF0aW9uT2JqZWN0LiRBcHBseSwgRnVuY3Rpb246IGFubm90YXRpb25PYmplY3QuJEZ1bmN0aW9uIH07XG5cdH0gZWxzZSBpZiAoYW5ub3RhdGlvbk9iamVjdC4kQW5ub3RhdGlvblBhdGggIT09IHVuZGVmaW5lZCkge1xuXHRcdHZhbHVlID0geyB0eXBlOiBcIkFubm90YXRpb25QYXRoXCIsIEFubm90YXRpb25QYXRoOiBhbm5vdGF0aW9uT2JqZWN0LiRBbm5vdGF0aW9uUGF0aCB9O1xuXHR9IGVsc2UgaWYgKGFubm90YXRpb25PYmplY3QuJEVudW1NZW1iZXIgIT09IHVuZGVmaW5lZCkge1xuXHRcdHZhbHVlID0ge1xuXHRcdFx0dHlwZTogXCJFbnVtTWVtYmVyXCIsXG5cdFx0XHRFbnVtTWVtYmVyOiBgJHttYXBOYW1lVG9BbGlhcyhhbm5vdGF0aW9uT2JqZWN0LiRFbnVtTWVtYmVyLnNwbGl0KFwiL1wiKVswXSl9LyR7YW5ub3RhdGlvbk9iamVjdC4kRW51bU1lbWJlci5zcGxpdChcIi9cIilbMV19YFxuXHRcdH07XG5cdH0gZWxzZSB7XG5cdFx0dmFsdWUgPSB7XG5cdFx0XHR0eXBlOiBcIlJlY29yZFwiLFxuXHRcdFx0UmVjb3JkOiBwYXJzZUFubm90YXRpb25PYmplY3QoYW5ub3RhdGlvbk9iamVjdCwgY3VycmVudFRhcmdldCwgYW5ub3RhdGlvbnNMaXN0cywgb0NhcGFiaWxpdGllcylcblx0XHR9O1xuXHR9XG5cblx0cmV0dXJuIHtcblx0XHRuYW1lOiBwcm9wZXJ0eUtleSxcblx0XHR2YWx1ZVxuXHR9O1xufVxuZnVuY3Rpb24gbWFwTmFtZVRvQWxpYXMoYW5ub3RhdGlvbk5hbWU6IHN0cmluZyk6IHN0cmluZyB7XG5cdGxldCBbcGF0aFBhcnQsIGFubm9QYXJ0XSA9IGFubm90YXRpb25OYW1lLnNwbGl0KFwiQFwiKTtcblx0aWYgKCFhbm5vUGFydCkge1xuXHRcdGFubm9QYXJ0ID0gcGF0aFBhcnQ7XG5cdFx0cGF0aFBhcnQgPSBcIlwiO1xuXHR9IGVsc2Uge1xuXHRcdHBhdGhQYXJ0ICs9IFwiQFwiO1xuXHR9XG5cdGNvbnN0IGxhc3REb3QgPSBhbm5vUGFydC5sYXN0SW5kZXhPZihcIi5cIik7XG5cdHJldHVybiBgJHtwYXRoUGFydCArIFZPQ0FCVUxBUllfQUxJQVNbYW5ub1BhcnQuc3Vic3RyKDAsIGxhc3REb3QpXX0uJHthbm5vUGFydC5zdWJzdHIobGFzdERvdCArIDEpfWA7XG59XG5mdW5jdGlvbiBwYXJzZUFubm90YXRpb25PYmplY3QoXG5cdGFubm90YXRpb25PYmplY3Q6IGFueSxcblx0Y3VycmVudE9iamVjdFRhcmdldDogc3RyaW5nLFxuXHRhbm5vdGF0aW9uc0xpc3RzOiBSZWNvcmQ8c3RyaW5nLCBBbm5vdGF0aW9uTGlzdD4sXG5cdG9DYXBhYmlsaXRpZXM6IEVudmlyb25tZW50Q2FwYWJpbGl0aWVzXG4pOiBFeHByZXNzaW9uIHwgQW5ub3RhdGlvblJlY29yZCB8IEFubm90YXRpb24ge1xuXHRsZXQgcGFyc2VkQW5ub3RhdGlvbk9iamVjdDogYW55ID0ge307XG5cdGNvbnN0IHR5cGVPZk9iamVjdCA9IHR5cGVvZiBhbm5vdGF0aW9uT2JqZWN0O1xuXHRpZiAoYW5ub3RhdGlvbk9iamVjdCA9PT0gbnVsbCkge1xuXHRcdHBhcnNlZEFubm90YXRpb25PYmplY3QgPSB7IHR5cGU6IFwiTnVsbFwiLCBOdWxsOiBudWxsIH07XG5cdH0gZWxzZSBpZiAodHlwZU9mT2JqZWN0ID09PSBcInN0cmluZ1wiKSB7XG5cdFx0cGFyc2VkQW5ub3RhdGlvbk9iamVjdCA9IHsgdHlwZTogXCJTdHJpbmdcIiwgU3RyaW5nOiBhbm5vdGF0aW9uT2JqZWN0IH07XG5cdH0gZWxzZSBpZiAodHlwZU9mT2JqZWN0ID09PSBcImJvb2xlYW5cIikge1xuXHRcdHBhcnNlZEFubm90YXRpb25PYmplY3QgPSB7IHR5cGU6IFwiQm9vbFwiLCBCb29sOiBhbm5vdGF0aW9uT2JqZWN0IH07XG5cdH0gZWxzZSBpZiAodHlwZU9mT2JqZWN0ID09PSBcIm51bWJlclwiKSB7XG5cdFx0cGFyc2VkQW5ub3RhdGlvbk9iamVjdCA9IHsgdHlwZTogXCJJbnRcIiwgSW50OiBhbm5vdGF0aW9uT2JqZWN0IH07XG5cdH0gZWxzZSBpZiAoYW5ub3RhdGlvbk9iamVjdC4kQW5ub3RhdGlvblBhdGggIT09IHVuZGVmaW5lZCkge1xuXHRcdHBhcnNlZEFubm90YXRpb25PYmplY3QgPSB7IHR5cGU6IFwiQW5ub3RhdGlvblBhdGhcIiwgQW5ub3RhdGlvblBhdGg6IGFubm90YXRpb25PYmplY3QuJEFubm90YXRpb25QYXRoIH07XG5cdH0gZWxzZSBpZiAoYW5ub3RhdGlvbk9iamVjdC4kUGF0aCAhPT0gdW5kZWZpbmVkKSB7XG5cdFx0cGFyc2VkQW5ub3RhdGlvbk9iamVjdCA9IHsgdHlwZTogXCJQYXRoXCIsIFBhdGg6IGFubm90YXRpb25PYmplY3QuJFBhdGggfTtcblx0fSBlbHNlIGlmIChhbm5vdGF0aW9uT2JqZWN0LiREZWNpbWFsICE9PSB1bmRlZmluZWQpIHtcblx0XHRwYXJzZWRBbm5vdGF0aW9uT2JqZWN0ID0geyB0eXBlOiBcIkRlY2ltYWxcIiwgRGVjaW1hbDogcGFyc2VGbG9hdChhbm5vdGF0aW9uT2JqZWN0LiREZWNpbWFsKSB9O1xuXHR9IGVsc2UgaWYgKGFubm90YXRpb25PYmplY3QuJFByb3BlcnR5UGF0aCAhPT0gdW5kZWZpbmVkKSB7XG5cdFx0cGFyc2VkQW5ub3RhdGlvbk9iamVjdCA9IHsgdHlwZTogXCJQcm9wZXJ0eVBhdGhcIiwgUHJvcGVydHlQYXRoOiBhbm5vdGF0aW9uT2JqZWN0LiRQcm9wZXJ0eVBhdGggfTtcblx0fSBlbHNlIGlmIChhbm5vdGF0aW9uT2JqZWN0LiRJZiAhPT0gdW5kZWZpbmVkKSB7XG5cdFx0cGFyc2VkQW5ub3RhdGlvbk9iamVjdCA9IHsgdHlwZTogXCJJZlwiLCBJZjogYW5ub3RhdGlvbk9iamVjdC4kSWYgfTtcblx0fSBlbHNlIGlmIChhbm5vdGF0aW9uT2JqZWN0LiRBbmQgIT09IHVuZGVmaW5lZCkge1xuXHRcdHBhcnNlZEFubm90YXRpb25PYmplY3QgPSB7IHR5cGU6IFwiQW5kXCIsIEFuZDogYW5ub3RhdGlvbk9iamVjdC4kQW5kIH07XG5cdH0gZWxzZSBpZiAoYW5ub3RhdGlvbk9iamVjdC4kT3IgIT09IHVuZGVmaW5lZCkge1xuXHRcdHBhcnNlZEFubm90YXRpb25PYmplY3QgPSB7IHR5cGU6IFwiT3JcIiwgT3I6IGFubm90YXRpb25PYmplY3QuJE9yIH07XG5cdH0gZWxzZSBpZiAoYW5ub3RhdGlvbk9iamVjdC4kTm90ICE9PSB1bmRlZmluZWQpIHtcblx0XHRwYXJzZWRBbm5vdGF0aW9uT2JqZWN0ID0geyB0eXBlOiBcIk5vdFwiLCBOb3Q6IGFubm90YXRpb25PYmplY3QuJE5vdCB9O1xuXHR9IGVsc2UgaWYgKGFubm90YXRpb25PYmplY3QuJEVxICE9PSB1bmRlZmluZWQpIHtcblx0XHRwYXJzZWRBbm5vdGF0aW9uT2JqZWN0ID0geyB0eXBlOiBcIkVxXCIsIEVxOiBhbm5vdGF0aW9uT2JqZWN0LiRFcSB9O1xuXHR9IGVsc2UgaWYgKGFubm90YXRpb25PYmplY3QuJE5lICE9PSB1bmRlZmluZWQpIHtcblx0XHRwYXJzZWRBbm5vdGF0aW9uT2JqZWN0ID0geyB0eXBlOiBcIk5lXCIsIE5lOiBhbm5vdGF0aW9uT2JqZWN0LiROZSB9O1xuXHR9IGVsc2UgaWYgKGFubm90YXRpb25PYmplY3QuJEd0ICE9PSB1bmRlZmluZWQpIHtcblx0XHRwYXJzZWRBbm5vdGF0aW9uT2JqZWN0ID0geyB0eXBlOiBcIkd0XCIsIEd0OiBhbm5vdGF0aW9uT2JqZWN0LiRHdCB9O1xuXHR9IGVsc2UgaWYgKGFubm90YXRpb25PYmplY3QuJEdlICE9PSB1bmRlZmluZWQpIHtcblx0XHRwYXJzZWRBbm5vdGF0aW9uT2JqZWN0ID0geyB0eXBlOiBcIkdlXCIsIEdlOiBhbm5vdGF0aW9uT2JqZWN0LiRHZSB9O1xuXHR9IGVsc2UgaWYgKGFubm90YXRpb25PYmplY3QuJEx0ICE9PSB1bmRlZmluZWQpIHtcblx0XHRwYXJzZWRBbm5vdGF0aW9uT2JqZWN0ID0geyB0eXBlOiBcIkx0XCIsIEx0OiBhbm5vdGF0aW9uT2JqZWN0LiRMdCB9O1xuXHR9IGVsc2UgaWYgKGFubm90YXRpb25PYmplY3QuJExlICE9PSB1bmRlZmluZWQpIHtcblx0XHRwYXJzZWRBbm5vdGF0aW9uT2JqZWN0ID0geyB0eXBlOiBcIkxlXCIsIExlOiBhbm5vdGF0aW9uT2JqZWN0LiRMZSB9O1xuXHR9IGVsc2UgaWYgKGFubm90YXRpb25PYmplY3QuJEFwcGx5ICE9PSB1bmRlZmluZWQpIHtcblx0XHRwYXJzZWRBbm5vdGF0aW9uT2JqZWN0ID0geyB0eXBlOiBcIkFwcGx5XCIsIEFwcGx5OiBhbm5vdGF0aW9uT2JqZWN0LiRBcHBseSwgRnVuY3Rpb246IGFubm90YXRpb25PYmplY3QuJEZ1bmN0aW9uIH07XG5cdH0gZWxzZSBpZiAoYW5ub3RhdGlvbk9iamVjdC4kTmF2aWdhdGlvblByb3BlcnR5UGF0aCAhPT0gdW5kZWZpbmVkKSB7XG5cdFx0cGFyc2VkQW5ub3RhdGlvbk9iamVjdCA9IHtcblx0XHRcdHR5cGU6IFwiTmF2aWdhdGlvblByb3BlcnR5UGF0aFwiLFxuXHRcdFx0TmF2aWdhdGlvblByb3BlcnR5UGF0aDogYW5ub3RhdGlvbk9iamVjdC4kTmF2aWdhdGlvblByb3BlcnR5UGF0aFxuXHRcdH07XG5cdH0gZWxzZSBpZiAoYW5ub3RhdGlvbk9iamVjdC4kRW51bU1lbWJlciAhPT0gdW5kZWZpbmVkKSB7XG5cdFx0cGFyc2VkQW5ub3RhdGlvbk9iamVjdCA9IHtcblx0XHRcdHR5cGU6IFwiRW51bU1lbWJlclwiLFxuXHRcdFx0RW51bU1lbWJlcjogYCR7bWFwTmFtZVRvQWxpYXMoYW5ub3RhdGlvbk9iamVjdC4kRW51bU1lbWJlci5zcGxpdChcIi9cIilbMF0pfS8ke2Fubm90YXRpb25PYmplY3QuJEVudW1NZW1iZXIuc3BsaXQoXCIvXCIpWzFdfWBcblx0XHR9O1xuXHR9IGVsc2UgaWYgKEFycmF5LmlzQXJyYXkoYW5ub3RhdGlvbk9iamVjdCkpIHtcblx0XHRjb25zdCBwYXJzZWRBbm5vdGF0aW9uQ29sbGVjdGlvbiA9IHBhcnNlZEFubm90YXRpb25PYmplY3Q7XG5cdFx0cGFyc2VkQW5ub3RhdGlvbkNvbGxlY3Rpb24uY29sbGVjdGlvbiA9IGFubm90YXRpb25PYmplY3QubWFwKChzdWJBbm5vdGF0aW9uT2JqZWN0LCBzdWJBbm5vdGF0aW9uSW5kZXgpID0+XG5cdFx0XHRwYXJzZUFubm90YXRpb25PYmplY3Qoc3ViQW5ub3RhdGlvbk9iamVjdCwgYCR7Y3VycmVudE9iamVjdFRhcmdldH0vJHtzdWJBbm5vdGF0aW9uSW5kZXh9YCwgYW5ub3RhdGlvbnNMaXN0cywgb0NhcGFiaWxpdGllcylcblx0XHQpO1xuXHRcdGlmIChhbm5vdGF0aW9uT2JqZWN0Lmxlbmd0aCA+IDApIHtcblx0XHRcdGlmIChhbm5vdGF0aW9uT2JqZWN0WzBdLmhhc093blByb3BlcnR5KFwiJFByb3BlcnR5UGF0aFwiKSkge1xuXHRcdFx0XHRwYXJzZWRBbm5vdGF0aW9uQ29sbGVjdGlvbi5jb2xsZWN0aW9uLnR5cGUgPSBcIlByb3BlcnR5UGF0aFwiO1xuXHRcdFx0fSBlbHNlIGlmIChhbm5vdGF0aW9uT2JqZWN0WzBdLmhhc093blByb3BlcnR5KFwiJFBhdGhcIikpIHtcblx0XHRcdFx0cGFyc2VkQW5ub3RhdGlvbkNvbGxlY3Rpb24uY29sbGVjdGlvbi50eXBlID0gXCJQYXRoXCI7XG5cdFx0XHR9IGVsc2UgaWYgKGFubm90YXRpb25PYmplY3RbMF0uaGFzT3duUHJvcGVydHkoXCIkTmF2aWdhdGlvblByb3BlcnR5UGF0aFwiKSkge1xuXHRcdFx0XHRwYXJzZWRBbm5vdGF0aW9uQ29sbGVjdGlvbi5jb2xsZWN0aW9uLnR5cGUgPSBcIk5hdmlnYXRpb25Qcm9wZXJ0eVBhdGhcIjtcblx0XHRcdH0gZWxzZSBpZiAoYW5ub3RhdGlvbk9iamVjdFswXS5oYXNPd25Qcm9wZXJ0eShcIiRBbm5vdGF0aW9uUGF0aFwiKSkge1xuXHRcdFx0XHRwYXJzZWRBbm5vdGF0aW9uQ29sbGVjdGlvbi5jb2xsZWN0aW9uLnR5cGUgPSBcIkFubm90YXRpb25QYXRoXCI7XG5cdFx0XHR9IGVsc2UgaWYgKGFubm90YXRpb25PYmplY3RbMF0uaGFzT3duUHJvcGVydHkoXCIkVHlwZVwiKSkge1xuXHRcdFx0XHRwYXJzZWRBbm5vdGF0aW9uQ29sbGVjdGlvbi5jb2xsZWN0aW9uLnR5cGUgPSBcIlJlY29yZFwiO1xuXHRcdFx0fSBlbHNlIGlmIChhbm5vdGF0aW9uT2JqZWN0WzBdLmhhc093blByb3BlcnR5KFwiJElmXCIpKSB7XG5cdFx0XHRcdHBhcnNlZEFubm90YXRpb25Db2xsZWN0aW9uLmNvbGxlY3Rpb24udHlwZSA9IFwiSWZcIjtcblx0XHRcdH0gZWxzZSBpZiAoYW5ub3RhdGlvbk9iamVjdFswXS5oYXNPd25Qcm9wZXJ0eShcIiRBbmRcIikpIHtcblx0XHRcdFx0cGFyc2VkQW5ub3RhdGlvbkNvbGxlY3Rpb24uY29sbGVjdGlvbi50eXBlID0gXCJBbmRcIjtcblx0XHRcdH0gZWxzZSBpZiAoYW5ub3RhdGlvbk9iamVjdFswXS5oYXNPd25Qcm9wZXJ0eShcIiRPclwiKSkge1xuXHRcdFx0XHRwYXJzZWRBbm5vdGF0aW9uQ29sbGVjdGlvbi5jb2xsZWN0aW9uLnR5cGUgPSBcIk9yXCI7XG5cdFx0XHR9IGVsc2UgaWYgKGFubm90YXRpb25PYmplY3RbMF0uaGFzT3duUHJvcGVydHkoXCIkRXFcIikpIHtcblx0XHRcdFx0cGFyc2VkQW5ub3RhdGlvbkNvbGxlY3Rpb24uY29sbGVjdGlvbi50eXBlID0gXCJFcVwiO1xuXHRcdFx0fSBlbHNlIGlmIChhbm5vdGF0aW9uT2JqZWN0WzBdLmhhc093blByb3BlcnR5KFwiJE5lXCIpKSB7XG5cdFx0XHRcdHBhcnNlZEFubm90YXRpb25Db2xsZWN0aW9uLmNvbGxlY3Rpb24udHlwZSA9IFwiTmVcIjtcblx0XHRcdH0gZWxzZSBpZiAoYW5ub3RhdGlvbk9iamVjdFswXS5oYXNPd25Qcm9wZXJ0eShcIiROb3RcIikpIHtcblx0XHRcdFx0cGFyc2VkQW5ub3RhdGlvbkNvbGxlY3Rpb24uY29sbGVjdGlvbi50eXBlID0gXCJOb3RcIjtcblx0XHRcdH0gZWxzZSBpZiAoYW5ub3RhdGlvbk9iamVjdFswXS5oYXNPd25Qcm9wZXJ0eShcIiRHdFwiKSkge1xuXHRcdFx0XHRwYXJzZWRBbm5vdGF0aW9uQ29sbGVjdGlvbi5jb2xsZWN0aW9uLnR5cGUgPSBcIkd0XCI7XG5cdFx0XHR9IGVsc2UgaWYgKGFubm90YXRpb25PYmplY3RbMF0uaGFzT3duUHJvcGVydHkoXCIkR2VcIikpIHtcblx0XHRcdFx0cGFyc2VkQW5ub3RhdGlvbkNvbGxlY3Rpb24uY29sbGVjdGlvbi50eXBlID0gXCJHZVwiO1xuXHRcdFx0fSBlbHNlIGlmIChhbm5vdGF0aW9uT2JqZWN0WzBdLmhhc093blByb3BlcnR5KFwiJEx0XCIpKSB7XG5cdFx0XHRcdHBhcnNlZEFubm90YXRpb25Db2xsZWN0aW9uLmNvbGxlY3Rpb24udHlwZSA9IFwiTHRcIjtcblx0XHRcdH0gZWxzZSBpZiAoYW5ub3RhdGlvbk9iamVjdFswXS5oYXNPd25Qcm9wZXJ0eShcIiRMZVwiKSkge1xuXHRcdFx0XHRwYXJzZWRBbm5vdGF0aW9uQ29sbGVjdGlvbi5jb2xsZWN0aW9uLnR5cGUgPSBcIkxlXCI7XG5cdFx0XHR9IGVsc2UgaWYgKGFubm90YXRpb25PYmplY3RbMF0uaGFzT3duUHJvcGVydHkoXCIkQXBwbHlcIikpIHtcblx0XHRcdFx0cGFyc2VkQW5ub3RhdGlvbkNvbGxlY3Rpb24uY29sbGVjdGlvbi50eXBlID0gXCJBcHBseVwiO1xuXHRcdFx0fSBlbHNlIGlmICh0eXBlb2YgYW5ub3RhdGlvbk9iamVjdFswXSA9PT0gXCJvYmplY3RcIikge1xuXHRcdFx0XHRwYXJzZWRBbm5vdGF0aW9uQ29sbGVjdGlvbi5jb2xsZWN0aW9uLnR5cGUgPSBcIlJlY29yZFwiO1xuXHRcdFx0fSBlbHNlIHtcblx0XHRcdFx0cGFyc2VkQW5ub3RhdGlvbkNvbGxlY3Rpb24uY29sbGVjdGlvbi50eXBlID0gXCJTdHJpbmdcIjtcblx0XHRcdH1cblx0XHR9XG5cdH0gZWxzZSB7XG5cdFx0aWYgKGFubm90YXRpb25PYmplY3QuJFR5cGUpIHtcblx0XHRcdGNvbnN0IHR5cGVWYWx1ZSA9IGFubm90YXRpb25PYmplY3QuJFR5cGU7XG5cdFx0XHRwYXJzZWRBbm5vdGF0aW9uT2JqZWN0LnR5cGUgPSB0eXBlVmFsdWU7IC8vYCR7dHlwZUFsaWFzfS4ke3R5cGVUZXJtfWA7XG5cdFx0fVxuXHRcdGNvbnN0IHByb3BlcnR5VmFsdWVzOiBhbnkgPSBbXTtcblx0XHRPYmplY3Qua2V5cyhhbm5vdGF0aW9uT2JqZWN0KS5mb3JFYWNoKChwcm9wZXJ0eUtleSkgPT4ge1xuXHRcdFx0aWYgKFxuXHRcdFx0XHRwcm9wZXJ0eUtleSAhPT0gXCIkVHlwZVwiICYmXG5cdFx0XHRcdHByb3BlcnR5S2V5ICE9PSBcIiRJZlwiICYmXG5cdFx0XHRcdHByb3BlcnR5S2V5ICE9PSBcIiRBcHBseVwiICYmXG5cdFx0XHRcdHByb3BlcnR5S2V5ICE9PSBcIiRBbmRcIiAmJlxuXHRcdFx0XHRwcm9wZXJ0eUtleSAhPT0gXCIkT3JcIiAmJlxuXHRcdFx0XHRwcm9wZXJ0eUtleSAhPT0gXCIkTmVcIiAmJlxuXHRcdFx0XHRwcm9wZXJ0eUtleSAhPT0gXCIkR3RcIiAmJlxuXHRcdFx0XHRwcm9wZXJ0eUtleSAhPT0gXCIkR2VcIiAmJlxuXHRcdFx0XHRwcm9wZXJ0eUtleSAhPT0gXCIkTHRcIiAmJlxuXHRcdFx0XHRwcm9wZXJ0eUtleSAhPT0gXCIkTGVcIiAmJlxuXHRcdFx0XHRwcm9wZXJ0eUtleSAhPT0gXCIkTm90XCIgJiZcblx0XHRcdFx0cHJvcGVydHlLZXkgIT09IFwiJEVxXCIgJiZcblx0XHRcdFx0IXByb3BlcnR5S2V5LnN0YXJ0c1dpdGgoXCJAXCIpXG5cdFx0XHQpIHtcblx0XHRcdFx0cHJvcGVydHlWYWx1ZXMucHVzaChcblx0XHRcdFx0XHRwYXJzZVByb3BlcnR5VmFsdWUoYW5ub3RhdGlvbk9iamVjdFtwcm9wZXJ0eUtleV0sIHByb3BlcnR5S2V5LCBjdXJyZW50T2JqZWN0VGFyZ2V0LCBhbm5vdGF0aW9uc0xpc3RzLCBvQ2FwYWJpbGl0aWVzKVxuXHRcdFx0XHQpO1xuXHRcdFx0fSBlbHNlIGlmIChwcm9wZXJ0eUtleS5zdGFydHNXaXRoKFwiQFwiKSkge1xuXHRcdFx0XHQvLyBBbm5vdGF0aW9uIG9mIGFubm90YXRpb25cblx0XHRcdFx0Y3JlYXRlQW5ub3RhdGlvbkxpc3RzKFxuXHRcdFx0XHRcdHsgW3Byb3BlcnR5S2V5XTogYW5ub3RhdGlvbk9iamVjdFtwcm9wZXJ0eUtleV0gfSxcblx0XHRcdFx0XHRjdXJyZW50T2JqZWN0VGFyZ2V0LFxuXHRcdFx0XHRcdGFubm90YXRpb25zTGlzdHMsXG5cdFx0XHRcdFx0b0NhcGFiaWxpdGllc1xuXHRcdFx0XHQpO1xuXHRcdFx0fVxuXHRcdH0pO1xuXHRcdHBhcnNlZEFubm90YXRpb25PYmplY3QucHJvcGVydHlWYWx1ZXMgPSBwcm9wZXJ0eVZhbHVlcztcblx0fVxuXHRyZXR1cm4gcGFyc2VkQW5ub3RhdGlvbk9iamVjdDtcbn1cbmZ1bmN0aW9uIGdldE9yQ3JlYXRlQW5ub3RhdGlvbkxpc3QodGFyZ2V0OiBzdHJpbmcsIGFubm90YXRpb25zTGlzdHM6IFJlY29yZDxzdHJpbmcsIEFubm90YXRpb25MaXN0Pik6IEFubm90YXRpb25MaXN0IHtcblx0aWYgKCFhbm5vdGF0aW9uc0xpc3RzLmhhc093blByb3BlcnR5KHRhcmdldCkpIHtcblx0XHRhbm5vdGF0aW9uc0xpc3RzW3RhcmdldF0gPSB7XG5cdFx0XHR0YXJnZXQ6IHRhcmdldCxcblx0XHRcdGFubm90YXRpb25zOiBbXVxuXHRcdH07XG5cdH1cblx0cmV0dXJuIGFubm90YXRpb25zTGlzdHNbdGFyZ2V0XTtcbn1cblxuZnVuY3Rpb24gY3JlYXRlUmVmZXJlbmNlRmFjZXRJZChyZWZlcmVuY2VGYWNldDogYW55KSB7XG5cdGNvbnN0IGlkID0gcmVmZXJlbmNlRmFjZXQuSUQgPz8gcmVmZXJlbmNlRmFjZXQuVGFyZ2V0LiRBbm5vdGF0aW9uUGF0aDtcblx0cmV0dXJuIGlkID8gcHJlcGFyZUlkKGlkKSA6IGlkO1xufVxuXG5mdW5jdGlvbiByZW1vdmVDaGFydEFubm90YXRpb25zKGFubm90YXRpb25PYmplY3Q6IGFueSkge1xuXHRyZXR1cm4gYW5ub3RhdGlvbk9iamVjdC5maWx0ZXIoKG9SZWNvcmQ6IGFueSkgPT4ge1xuXHRcdGlmIChvUmVjb3JkLlRhcmdldCAmJiBvUmVjb3JkLlRhcmdldC4kQW5ub3RhdGlvblBhdGgpIHtcblx0XHRcdHJldHVybiBvUmVjb3JkLlRhcmdldC4kQW5ub3RhdGlvblBhdGguaW5kZXhPZihgQCR7VUlBbm5vdGF0aW9uVGVybXMuQ2hhcnR9YCkgPT09IC0xO1xuXHRcdH0gZWxzZSB7XG5cdFx0XHRyZXR1cm4gdHJ1ZTtcblx0XHR9XG5cdH0pO1xufVxuXG5mdW5jdGlvbiByZW1vdmVJQk5Bbm5vdGF0aW9ucyhhbm5vdGF0aW9uT2JqZWN0OiBhbnkpIHtcblx0cmV0dXJuIGFubm90YXRpb25PYmplY3QuZmlsdGVyKChvUmVjb3JkOiBhbnkpID0+IHtcblx0XHRyZXR1cm4gb1JlY29yZC4kVHlwZSAhPT0gVUlBbm5vdGF0aW9uVHlwZXMuRGF0YUZpZWxkRm9ySW50ZW50QmFzZWROYXZpZ2F0aW9uO1xuXHR9KTtcbn1cblxuZnVuY3Rpb24gaGFuZGxlUHJlc2VudGF0aW9uVmFyaWFudChhbm5vdGF0aW9uT2JqZWN0OiBhbnkpIHtcblx0cmV0dXJuIGFubm90YXRpb25PYmplY3QuZmlsdGVyKChvUmVjb3JkOiBhbnkpID0+IHtcblx0XHRyZXR1cm4gb1JlY29yZC4kQW5ub3RhdGlvblBhdGggIT09IGBAJHtVSUFubm90YXRpb25UZXJtcy5DaGFydH1gO1xuXHR9KTtcbn1cblxuZnVuY3Rpb24gY3JlYXRlQW5ub3RhdGlvbkxpc3RzKFxuXHRhbm5vdGF0aW9uT2JqZWN0czogYW55LFxuXHRhbm5vdGF0aW9uVGFyZ2V0OiBzdHJpbmcsXG5cdGFubm90YXRpb25MaXN0czogUmVjb3JkPHN0cmluZywgQW5ub3RhdGlvbkxpc3Q+LFxuXHRvQ2FwYWJpbGl0aWVzOiBFbnZpcm9ubWVudENhcGFiaWxpdGllc1xuKSB7XG5cdGlmIChPYmplY3Qua2V5cyhhbm5vdGF0aW9uT2JqZWN0cykubGVuZ3RoID09PSAwKSB7XG5cdFx0cmV0dXJuO1xuXHR9XG5cdGNvbnN0IG91dEFubm90YXRpb25PYmplY3QgPSBnZXRPckNyZWF0ZUFubm90YXRpb25MaXN0KGFubm90YXRpb25UYXJnZXQsIGFubm90YXRpb25MaXN0cyk7XG5cdGlmICghb0NhcGFiaWxpdGllcy5NaWNyb0NoYXJ0KSB7XG5cdFx0ZGVsZXRlIGFubm90YXRpb25PYmplY3RzW2BAJHtVSUFubm90YXRpb25UZXJtcy5DaGFydH1gXTtcblx0fVxuXG5cdGZvciAobGV0IGFubm90YXRpb25LZXkgaW4gYW5ub3RhdGlvbk9iamVjdHMpIHtcblx0XHRsZXQgYW5ub3RhdGlvbk9iamVjdCA9IGFubm90YXRpb25PYmplY3RzW2Fubm90YXRpb25LZXldO1xuXHRcdHN3aXRjaCAoYW5ub3RhdGlvbktleSkge1xuXHRcdFx0Y2FzZSBgQCR7VUlBbm5vdGF0aW9uVGVybXMuSGVhZGVyRmFjZXRzfWA6XG5cdFx0XHRcdGlmICghb0NhcGFiaWxpdGllcy5NaWNyb0NoYXJ0KSB7XG5cdFx0XHRcdFx0YW5ub3RhdGlvbk9iamVjdCA9IHJlbW92ZUNoYXJ0QW5ub3RhdGlvbnMoYW5ub3RhdGlvbk9iamVjdCk7XG5cdFx0XHRcdFx0YW5ub3RhdGlvbk9iamVjdHNbYW5ub3RhdGlvbktleV0gPSBhbm5vdGF0aW9uT2JqZWN0O1xuXHRcdFx0XHR9XG5cdFx0XHRcdGJyZWFrO1xuXHRcdFx0Y2FzZSBgQCR7VUlBbm5vdGF0aW9uVGVybXMuSWRlbnRpZmljYXRpb259YDpcblx0XHRcdFx0aWYgKCFvQ2FwYWJpbGl0aWVzLkludGVudEJhc2VkTmF2aWdhdGlvbikge1xuXHRcdFx0XHRcdGFubm90YXRpb25PYmplY3QgPSByZW1vdmVJQk5Bbm5vdGF0aW9ucyhhbm5vdGF0aW9uT2JqZWN0KTtcblx0XHRcdFx0XHRhbm5vdGF0aW9uT2JqZWN0c1thbm5vdGF0aW9uS2V5XSA9IGFubm90YXRpb25PYmplY3Q7XG5cdFx0XHRcdH1cblx0XHRcdFx0YnJlYWs7XG5cdFx0XHRjYXNlIGBAJHtVSUFubm90YXRpb25UZXJtcy5MaW5lSXRlbX1gOlxuXHRcdFx0XHRpZiAoIW9DYXBhYmlsaXRpZXMuSW50ZW50QmFzZWROYXZpZ2F0aW9uKSB7XG5cdFx0XHRcdFx0YW5ub3RhdGlvbk9iamVjdCA9IHJlbW92ZUlCTkFubm90YXRpb25zKGFubm90YXRpb25PYmplY3QpO1xuXHRcdFx0XHRcdGFubm90YXRpb25PYmplY3RzW2Fubm90YXRpb25LZXldID0gYW5ub3RhdGlvbk9iamVjdDtcblx0XHRcdFx0fVxuXHRcdFx0XHRpZiAoIW9DYXBhYmlsaXRpZXMuTWljcm9DaGFydCkge1xuXHRcdFx0XHRcdGFubm90YXRpb25PYmplY3QgPSByZW1vdmVDaGFydEFubm90YXRpb25zKGFubm90YXRpb25PYmplY3QpO1xuXHRcdFx0XHRcdGFubm90YXRpb25PYmplY3RzW2Fubm90YXRpb25LZXldID0gYW5ub3RhdGlvbk9iamVjdDtcblx0XHRcdFx0fVxuXHRcdFx0XHRicmVhaztcblx0XHRcdGNhc2UgYEAke1VJQW5ub3RhdGlvblRlcm1zLkZpZWxkR3JvdXB9YDpcblx0XHRcdFx0aWYgKCFvQ2FwYWJpbGl0aWVzLkludGVudEJhc2VkTmF2aWdhdGlvbikge1xuXHRcdFx0XHRcdGFubm90YXRpb25PYmplY3QuRGF0YSA9IHJlbW92ZUlCTkFubm90YXRpb25zKGFubm90YXRpb25PYmplY3QuRGF0YSk7XG5cdFx0XHRcdFx0YW5ub3RhdGlvbk9iamVjdHNbYW5ub3RhdGlvbktleV0gPSBhbm5vdGF0aW9uT2JqZWN0O1xuXHRcdFx0XHR9XG5cdFx0XHRcdGlmICghb0NhcGFiaWxpdGllcy5NaWNyb0NoYXJ0KSB7XG5cdFx0XHRcdFx0YW5ub3RhdGlvbk9iamVjdC5EYXRhID0gcmVtb3ZlQ2hhcnRBbm5vdGF0aW9ucyhhbm5vdGF0aW9uT2JqZWN0LkRhdGEpO1xuXHRcdFx0XHRcdGFubm90YXRpb25PYmplY3RzW2Fubm90YXRpb25LZXldID0gYW5ub3RhdGlvbk9iamVjdDtcblx0XHRcdFx0fVxuXHRcdFx0XHRicmVhaztcblx0XHRcdGNhc2UgYEAke1VJQW5ub3RhdGlvblRlcm1zLlByZXNlbnRhdGlvblZhcmlhbnR9YDpcblx0XHRcdFx0aWYgKCFvQ2FwYWJpbGl0aWVzLkNoYXJ0ICYmIGFubm90YXRpb25PYmplY3QuVmlzdWFsaXphdGlvbnMpIHtcblx0XHRcdFx0XHRhbm5vdGF0aW9uT2JqZWN0LlZpc3VhbGl6YXRpb25zID0gaGFuZGxlUHJlc2VudGF0aW9uVmFyaWFudChhbm5vdGF0aW9uT2JqZWN0LlZpc3VhbGl6YXRpb25zKTtcblx0XHRcdFx0XHRhbm5vdGF0aW9uT2JqZWN0c1thbm5vdGF0aW9uS2V5XSA9IGFubm90YXRpb25PYmplY3Q7XG5cdFx0XHRcdH1cblx0XHRcdFx0YnJlYWs7XG5cdFx0XHRkZWZhdWx0OlxuXHRcdFx0XHRicmVhaztcblx0XHR9XG5cblx0XHRsZXQgY3VycmVudE91dEFubm90YXRpb25PYmplY3QgPSBvdXRBbm5vdGF0aW9uT2JqZWN0O1xuXG5cdFx0Ly8gQ2hlY2sgZm9yIGFubm90YXRpb24gb2YgYW5ub3RhdGlvblxuXHRcdGNvbnN0IGFubm90YXRpb25PZkFubm90YXRpb25TcGxpdCA9IGFubm90YXRpb25LZXkuc3BsaXQoXCJAXCIpO1xuXHRcdGlmIChhbm5vdGF0aW9uT2ZBbm5vdGF0aW9uU3BsaXQubGVuZ3RoID4gMikge1xuXHRcdFx0Y3VycmVudE91dEFubm90YXRpb25PYmplY3QgPSBnZXRPckNyZWF0ZUFubm90YXRpb25MaXN0KFxuXHRcdFx0XHRgJHthbm5vdGF0aW9uVGFyZ2V0fUAke2Fubm90YXRpb25PZkFubm90YXRpb25TcGxpdFsxXX1gLFxuXHRcdFx0XHRhbm5vdGF0aW9uTGlzdHNcblx0XHRcdCk7XG5cdFx0XHRhbm5vdGF0aW9uS2V5ID0gYW5ub3RhdGlvbk9mQW5ub3RhdGlvblNwbGl0WzJdO1xuXHRcdH0gZWxzZSB7XG5cdFx0XHRhbm5vdGF0aW9uS2V5ID0gYW5ub3RhdGlvbk9mQW5ub3RhdGlvblNwbGl0WzFdO1xuXHRcdH1cblxuXHRcdGNvbnN0IGFubm90YXRpb25RdWFsaWZpZXJTcGxpdCA9IGFubm90YXRpb25LZXkuc3BsaXQoXCIjXCIpO1xuXHRcdGNvbnN0IHF1YWxpZmllciA9IGFubm90YXRpb25RdWFsaWZpZXJTcGxpdFsxXTtcblx0XHRhbm5vdGF0aW9uS2V5ID0gYW5ub3RhdGlvblF1YWxpZmllclNwbGl0WzBdO1xuXG5cdFx0Y29uc3QgcGFyc2VkQW5ub3RhdGlvbk9iamVjdDogYW55ID0ge1xuXHRcdFx0dGVybTogYW5ub3RhdGlvbktleSxcblx0XHRcdHF1YWxpZmllcjogcXVhbGlmaWVyXG5cdFx0fTtcblx0XHRsZXQgY3VycmVudEFubm90YXRpb25UYXJnZXQgPSBgJHthbm5vdGF0aW9uVGFyZ2V0fUAke3BhcnNlZEFubm90YXRpb25PYmplY3QudGVybX1gO1xuXHRcdGlmIChxdWFsaWZpZXIpIHtcblx0XHRcdGN1cnJlbnRBbm5vdGF0aW9uVGFyZ2V0ICs9IGAjJHtxdWFsaWZpZXJ9YDtcblx0XHR9XG5cdFx0bGV0IGlzQ29sbGVjdGlvbiA9IGZhbHNlO1xuXHRcdGNvbnN0IHR5cGVvZkFubm90YXRpb24gPSB0eXBlb2YgYW5ub3RhdGlvbk9iamVjdDtcblx0XHRpZiAoYW5ub3RhdGlvbk9iamVjdCA9PT0gbnVsbCkge1xuXHRcdFx0cGFyc2VkQW5ub3RhdGlvbk9iamVjdC52YWx1ZSA9IHsgdHlwZTogXCJCb29sXCIsIEJvb2w6IGFubm90YXRpb25PYmplY3QgfTtcblx0XHR9IGVsc2UgaWYgKHR5cGVvZkFubm90YXRpb24gPT09IFwic3RyaW5nXCIpIHtcblx0XHRcdHBhcnNlZEFubm90YXRpb25PYmplY3QudmFsdWUgPSB7IHR5cGU6IFwiU3RyaW5nXCIsIFN0cmluZzogYW5ub3RhdGlvbk9iamVjdCB9O1xuXHRcdH0gZWxzZSBpZiAodHlwZW9mQW5ub3RhdGlvbiA9PT0gXCJib29sZWFuXCIpIHtcblx0XHRcdHBhcnNlZEFubm90YXRpb25PYmplY3QudmFsdWUgPSB7IHR5cGU6IFwiQm9vbFwiLCBCb29sOiBhbm5vdGF0aW9uT2JqZWN0IH07XG5cdFx0fSBlbHNlIGlmICh0eXBlb2ZBbm5vdGF0aW9uID09PSBcIm51bWJlclwiKSB7XG5cdFx0XHRwYXJzZWRBbm5vdGF0aW9uT2JqZWN0LnZhbHVlID0geyB0eXBlOiBcIkludFwiLCBJbnQ6IGFubm90YXRpb25PYmplY3QgfTtcblx0XHR9IGVsc2UgaWYgKGFubm90YXRpb25PYmplY3QuJElmICE9PSB1bmRlZmluZWQpIHtcblx0XHRcdHBhcnNlZEFubm90YXRpb25PYmplY3QudmFsdWUgPSB7IHR5cGU6IFwiSWZcIiwgSWY6IGFubm90YXRpb25PYmplY3QuJElmIH07XG5cdFx0fSBlbHNlIGlmIChhbm5vdGF0aW9uT2JqZWN0LiRBbmQgIT09IHVuZGVmaW5lZCkge1xuXHRcdFx0cGFyc2VkQW5ub3RhdGlvbk9iamVjdC52YWx1ZSA9IHsgdHlwZTogXCJBbmRcIiwgQW5kOiBhbm5vdGF0aW9uT2JqZWN0LiRBbmQgfTtcblx0XHR9IGVsc2UgaWYgKGFubm90YXRpb25PYmplY3QuJE9yICE9PSB1bmRlZmluZWQpIHtcblx0XHRcdHBhcnNlZEFubm90YXRpb25PYmplY3QudmFsdWUgPSB7IHR5cGU6IFwiT3JcIiwgT3I6IGFubm90YXRpb25PYmplY3QuJE9yIH07XG5cdFx0fSBlbHNlIGlmIChhbm5vdGF0aW9uT2JqZWN0LiROb3QgIT09IHVuZGVmaW5lZCkge1xuXHRcdFx0cGFyc2VkQW5ub3RhdGlvbk9iamVjdC52YWx1ZSA9IHsgdHlwZTogXCJOb3RcIiwgTm90OiBhbm5vdGF0aW9uT2JqZWN0LiROb3QgfTtcblx0XHR9IGVsc2UgaWYgKGFubm90YXRpb25PYmplY3QuJEVxICE9PSB1bmRlZmluZWQpIHtcblx0XHRcdHBhcnNlZEFubm90YXRpb25PYmplY3QudmFsdWUgPSB7IHR5cGU6IFwiRXFcIiwgRXE6IGFubm90YXRpb25PYmplY3QuJEVxIH07XG5cdFx0fSBlbHNlIGlmIChhbm5vdGF0aW9uT2JqZWN0LiROZSAhPT0gdW5kZWZpbmVkKSB7XG5cdFx0XHRwYXJzZWRBbm5vdGF0aW9uT2JqZWN0LnZhbHVlID0geyB0eXBlOiBcIk5lXCIsIE5lOiBhbm5vdGF0aW9uT2JqZWN0LiROZSB9O1xuXHRcdH0gZWxzZSBpZiAoYW5ub3RhdGlvbk9iamVjdC4kR3QgIT09IHVuZGVmaW5lZCkge1xuXHRcdFx0cGFyc2VkQW5ub3RhdGlvbk9iamVjdC52YWx1ZSA9IHsgdHlwZTogXCJHdFwiLCBHdDogYW5ub3RhdGlvbk9iamVjdC4kR3QgfTtcblx0XHR9IGVsc2UgaWYgKGFubm90YXRpb25PYmplY3QuJEdlICE9PSB1bmRlZmluZWQpIHtcblx0XHRcdHBhcnNlZEFubm90YXRpb25PYmplY3QudmFsdWUgPSB7IHR5cGU6IFwiR2VcIiwgR2U6IGFubm90YXRpb25PYmplY3QuJEdlIH07XG5cdFx0fSBlbHNlIGlmIChhbm5vdGF0aW9uT2JqZWN0LiRMdCAhPT0gdW5kZWZpbmVkKSB7XG5cdFx0XHRwYXJzZWRBbm5vdGF0aW9uT2JqZWN0LnZhbHVlID0geyB0eXBlOiBcIkx0XCIsIEx0OiBhbm5vdGF0aW9uT2JqZWN0LiRMdCB9O1xuXHRcdH0gZWxzZSBpZiAoYW5ub3RhdGlvbk9iamVjdC4kTGUgIT09IHVuZGVmaW5lZCkge1xuXHRcdFx0cGFyc2VkQW5ub3RhdGlvbk9iamVjdC52YWx1ZSA9IHsgdHlwZTogXCJMZVwiLCBMZTogYW5ub3RhdGlvbk9iamVjdC4kTGUgfTtcblx0XHR9IGVsc2UgaWYgKGFubm90YXRpb25PYmplY3QuJEFwcGx5ICE9PSB1bmRlZmluZWQpIHtcblx0XHRcdHBhcnNlZEFubm90YXRpb25PYmplY3QudmFsdWUgPSB7IHR5cGU6IFwiQXBwbHlcIiwgQXBwbHk6IGFubm90YXRpb25PYmplY3QuJEFwcGx5LCBGdW5jdGlvbjogYW5ub3RhdGlvbk9iamVjdC4kRnVuY3Rpb24gfTtcblx0XHR9IGVsc2UgaWYgKGFubm90YXRpb25PYmplY3QuJFBhdGggIT09IHVuZGVmaW5lZCkge1xuXHRcdFx0cGFyc2VkQW5ub3RhdGlvbk9iamVjdC52YWx1ZSA9IHsgdHlwZTogXCJQYXRoXCIsIFBhdGg6IGFubm90YXRpb25PYmplY3QuJFBhdGggfTtcblx0XHR9IGVsc2UgaWYgKGFubm90YXRpb25PYmplY3QuJEFubm90YXRpb25QYXRoICE9PSB1bmRlZmluZWQpIHtcblx0XHRcdHBhcnNlZEFubm90YXRpb25PYmplY3QudmFsdWUgPSB7XG5cdFx0XHRcdHR5cGU6IFwiQW5ub3RhdGlvblBhdGhcIixcblx0XHRcdFx0QW5ub3RhdGlvblBhdGg6IGFubm90YXRpb25PYmplY3QuJEFubm90YXRpb25QYXRoXG5cdFx0XHR9O1xuXHRcdH0gZWxzZSBpZiAoYW5ub3RhdGlvbk9iamVjdC4kRGVjaW1hbCAhPT0gdW5kZWZpbmVkKSB7XG5cdFx0XHRwYXJzZWRBbm5vdGF0aW9uT2JqZWN0LnZhbHVlID0geyB0eXBlOiBcIkRlY2ltYWxcIiwgRGVjaW1hbDogcGFyc2VGbG9hdChhbm5vdGF0aW9uT2JqZWN0LiREZWNpbWFsKSB9O1xuXHRcdH0gZWxzZSBpZiAoYW5ub3RhdGlvbk9iamVjdC4kRW51bU1lbWJlciAhPT0gdW5kZWZpbmVkKSB7XG5cdFx0XHRwYXJzZWRBbm5vdGF0aW9uT2JqZWN0LnZhbHVlID0ge1xuXHRcdFx0XHR0eXBlOiBcIkVudW1NZW1iZXJcIixcblx0XHRcdFx0RW51bU1lbWJlcjogYCR7bWFwTmFtZVRvQWxpYXMoYW5ub3RhdGlvbk9iamVjdC4kRW51bU1lbWJlci5zcGxpdChcIi9cIilbMF0pfS8ke2Fubm90YXRpb25PYmplY3QuJEVudW1NZW1iZXIuc3BsaXQoXCIvXCIpWzFdfWBcblx0XHRcdH07XG5cdFx0fSBlbHNlIGlmIChBcnJheS5pc0FycmF5KGFubm90YXRpb25PYmplY3QpKSB7XG5cdFx0XHRpc0NvbGxlY3Rpb24gPSB0cnVlO1xuXHRcdFx0cGFyc2VkQW5ub3RhdGlvbk9iamVjdC5jb2xsZWN0aW9uID0gYW5ub3RhdGlvbk9iamVjdC5tYXAoKHN1YkFubm90YXRpb25PYmplY3QsIHN1YkFubm90YXRpb25JbmRleCkgPT5cblx0XHRcdFx0cGFyc2VBbm5vdGF0aW9uT2JqZWN0KFxuXHRcdFx0XHRcdHN1YkFubm90YXRpb25PYmplY3QsXG5cdFx0XHRcdFx0YCR7Y3VycmVudEFubm90YXRpb25UYXJnZXR9LyR7c3ViQW5ub3RhdGlvbkluZGV4fWAsXG5cdFx0XHRcdFx0YW5ub3RhdGlvbkxpc3RzLFxuXHRcdFx0XHRcdG9DYXBhYmlsaXRpZXNcblx0XHRcdFx0KVxuXHRcdFx0KTtcblx0XHRcdGlmIChhbm5vdGF0aW9uT2JqZWN0Lmxlbmd0aCA+IDApIHtcblx0XHRcdFx0aWYgKGFubm90YXRpb25PYmplY3RbMF0uaGFzT3duUHJvcGVydHkoXCIkUHJvcGVydHlQYXRoXCIpKSB7XG5cdFx0XHRcdFx0cGFyc2VkQW5ub3RhdGlvbk9iamVjdC5jb2xsZWN0aW9uLnR5cGUgPSBcIlByb3BlcnR5UGF0aFwiO1xuXHRcdFx0XHR9IGVsc2UgaWYgKGFubm90YXRpb25PYmplY3RbMF0uaGFzT3duUHJvcGVydHkoXCIkUGF0aFwiKSkge1xuXHRcdFx0XHRcdHBhcnNlZEFubm90YXRpb25PYmplY3QuY29sbGVjdGlvbi50eXBlID0gXCJQYXRoXCI7XG5cdFx0XHRcdH0gZWxzZSBpZiAoYW5ub3RhdGlvbk9iamVjdFswXS5oYXNPd25Qcm9wZXJ0eShcIiROYXZpZ2F0aW9uUHJvcGVydHlQYXRoXCIpKSB7XG5cdFx0XHRcdFx0cGFyc2VkQW5ub3RhdGlvbk9iamVjdC5jb2xsZWN0aW9uLnR5cGUgPSBcIk5hdmlnYXRpb25Qcm9wZXJ0eVBhdGhcIjtcblx0XHRcdFx0fSBlbHNlIGlmIChhbm5vdGF0aW9uT2JqZWN0WzBdLmhhc093blByb3BlcnR5KFwiJEFubm90YXRpb25QYXRoXCIpKSB7XG5cdFx0XHRcdFx0cGFyc2VkQW5ub3RhdGlvbk9iamVjdC5jb2xsZWN0aW9uLnR5cGUgPSBcIkFubm90YXRpb25QYXRoXCI7XG5cdFx0XHRcdH0gZWxzZSBpZiAoYW5ub3RhdGlvbk9iamVjdFswXS5oYXNPd25Qcm9wZXJ0eShcIiRUeXBlXCIpKSB7XG5cdFx0XHRcdFx0cGFyc2VkQW5ub3RhdGlvbk9iamVjdC5jb2xsZWN0aW9uLnR5cGUgPSBcIlJlY29yZFwiO1xuXHRcdFx0XHR9IGVsc2UgaWYgKGFubm90YXRpb25PYmplY3RbMF0uaGFzT3duUHJvcGVydHkoXCIkSWZcIikpIHtcblx0XHRcdFx0XHRwYXJzZWRBbm5vdGF0aW9uT2JqZWN0LmNvbGxlY3Rpb24udHlwZSA9IFwiSWZcIjtcblx0XHRcdFx0fSBlbHNlIGlmIChhbm5vdGF0aW9uT2JqZWN0WzBdLmhhc093blByb3BlcnR5KFwiJE9yXCIpKSB7XG5cdFx0XHRcdFx0cGFyc2VkQW5ub3RhdGlvbk9iamVjdC5jb2xsZWN0aW9uLnR5cGUgPSBcIk9yXCI7XG5cdFx0XHRcdH0gZWxzZSBpZiAoYW5ub3RhdGlvbk9iamVjdFswXS5oYXNPd25Qcm9wZXJ0eShcIiRFcVwiKSkge1xuXHRcdFx0XHRcdHBhcnNlZEFubm90YXRpb25PYmplY3QuY29sbGVjdGlvbi50eXBlID0gXCJFcVwiO1xuXHRcdFx0XHR9IGVsc2UgaWYgKGFubm90YXRpb25PYmplY3RbMF0uaGFzT3duUHJvcGVydHkoXCIkTmVcIikpIHtcblx0XHRcdFx0XHRwYXJzZWRBbm5vdGF0aW9uT2JqZWN0LmNvbGxlY3Rpb24udHlwZSA9IFwiTmVcIjtcblx0XHRcdFx0fSBlbHNlIGlmIChhbm5vdGF0aW9uT2JqZWN0WzBdLmhhc093blByb3BlcnR5KFwiJE5vdFwiKSkge1xuXHRcdFx0XHRcdHBhcnNlZEFubm90YXRpb25PYmplY3QuY29sbGVjdGlvbi50eXBlID0gXCJOb3RcIjtcblx0XHRcdFx0fSBlbHNlIGlmIChhbm5vdGF0aW9uT2JqZWN0WzBdLmhhc093blByb3BlcnR5KFwiJEd0XCIpKSB7XG5cdFx0XHRcdFx0cGFyc2VkQW5ub3RhdGlvbk9iamVjdC5jb2xsZWN0aW9uLnR5cGUgPSBcIkd0XCI7XG5cdFx0XHRcdH0gZWxzZSBpZiAoYW5ub3RhdGlvbk9iamVjdFswXS5oYXNPd25Qcm9wZXJ0eShcIiRHZVwiKSkge1xuXHRcdFx0XHRcdHBhcnNlZEFubm90YXRpb25PYmplY3QuY29sbGVjdGlvbi50eXBlID0gXCJHZVwiO1xuXHRcdFx0XHR9IGVsc2UgaWYgKGFubm90YXRpb25PYmplY3RbMF0uaGFzT3duUHJvcGVydHkoXCIkTHRcIikpIHtcblx0XHRcdFx0XHRwYXJzZWRBbm5vdGF0aW9uT2JqZWN0LmNvbGxlY3Rpb24udHlwZSA9IFwiTHRcIjtcblx0XHRcdFx0fSBlbHNlIGlmIChhbm5vdGF0aW9uT2JqZWN0WzBdLmhhc093blByb3BlcnR5KFwiJExlXCIpKSB7XG5cdFx0XHRcdFx0cGFyc2VkQW5ub3RhdGlvbk9iamVjdC5jb2xsZWN0aW9uLnR5cGUgPSBcIkxlXCI7XG5cdFx0XHRcdH0gZWxzZSBpZiAoYW5ub3RhdGlvbk9iamVjdFswXS5oYXNPd25Qcm9wZXJ0eShcIiRBbmRcIikpIHtcblx0XHRcdFx0XHRwYXJzZWRBbm5vdGF0aW9uT2JqZWN0LmNvbGxlY3Rpb24udHlwZSA9IFwiQW5kXCI7XG5cdFx0XHRcdH0gZWxzZSBpZiAoYW5ub3RhdGlvbk9iamVjdFswXS5oYXNPd25Qcm9wZXJ0eShcIiRBcHBseVwiKSkge1xuXHRcdFx0XHRcdHBhcnNlZEFubm90YXRpb25PYmplY3QuY29sbGVjdGlvbi50eXBlID0gXCJBcHBseVwiO1xuXHRcdFx0XHR9IGVsc2UgaWYgKHR5cGVvZiBhbm5vdGF0aW9uT2JqZWN0WzBdID09PSBcIm9iamVjdFwiKSB7XG5cdFx0XHRcdFx0cGFyc2VkQW5ub3RhdGlvbk9iamVjdC5jb2xsZWN0aW9uLnR5cGUgPSBcIlJlY29yZFwiO1xuXHRcdFx0XHR9IGVsc2Uge1xuXHRcdFx0XHRcdHBhcnNlZEFubm90YXRpb25PYmplY3QuY29sbGVjdGlvbi50eXBlID0gXCJTdHJpbmdcIjtcblx0XHRcdFx0fVxuXHRcdFx0fVxuXHRcdH0gZWxzZSB7XG5cdFx0XHRjb25zdCByZWNvcmQ6IEFubm90YXRpb25SZWNvcmQgPSB7XG5cdFx0XHRcdHByb3BlcnR5VmFsdWVzOiBbXVxuXHRcdFx0fTtcblx0XHRcdGlmIChhbm5vdGF0aW9uT2JqZWN0LiRUeXBlKSB7XG5cdFx0XHRcdGNvbnN0IHR5cGVWYWx1ZSA9IGFubm90YXRpb25PYmplY3QuJFR5cGU7XG5cdFx0XHRcdHJlY29yZC50eXBlID0gYCR7dHlwZVZhbHVlfWA7XG5cdFx0XHR9XG5cdFx0XHRjb25zdCBwcm9wZXJ0eVZhbHVlczogYW55W10gPSBbXTtcblx0XHRcdGZvciAoY29uc3QgcHJvcGVydHlLZXkgaW4gYW5ub3RhdGlvbk9iamVjdCkge1xuXHRcdFx0XHRpZiAocHJvcGVydHlLZXkgIT09IFwiJFR5cGVcIiAmJiAhcHJvcGVydHlLZXkuc3RhcnRzV2l0aChcIkBcIikpIHtcblx0XHRcdFx0XHRwcm9wZXJ0eVZhbHVlcy5wdXNoKFxuXHRcdFx0XHRcdFx0cGFyc2VQcm9wZXJ0eVZhbHVlKFxuXHRcdFx0XHRcdFx0XHRhbm5vdGF0aW9uT2JqZWN0W3Byb3BlcnR5S2V5XSxcblx0XHRcdFx0XHRcdFx0cHJvcGVydHlLZXksXG5cdFx0XHRcdFx0XHRcdGN1cnJlbnRBbm5vdGF0aW9uVGFyZ2V0LFxuXHRcdFx0XHRcdFx0XHRhbm5vdGF0aW9uTGlzdHMsXG5cdFx0XHRcdFx0XHRcdG9DYXBhYmlsaXRpZXNcblx0XHRcdFx0XHRcdClcblx0XHRcdFx0XHQpO1xuXHRcdFx0XHR9IGVsc2UgaWYgKHByb3BlcnR5S2V5LnN0YXJ0c1dpdGgoXCJAXCIpKSB7XG5cdFx0XHRcdFx0Ly8gQW5ub3RhdGlvbiBvZiByZWNvcmRcblx0XHRcdFx0XHRjcmVhdGVBbm5vdGF0aW9uTGlzdHMoXG5cdFx0XHRcdFx0XHR7IFtwcm9wZXJ0eUtleV06IGFubm90YXRpb25PYmplY3RbcHJvcGVydHlLZXldIH0sXG5cdFx0XHRcdFx0XHRjdXJyZW50QW5ub3RhdGlvblRhcmdldCxcblx0XHRcdFx0XHRcdGFubm90YXRpb25MaXN0cyxcblx0XHRcdFx0XHRcdG9DYXBhYmlsaXRpZXNcblx0XHRcdFx0XHQpO1xuXHRcdFx0XHR9XG5cdFx0XHR9XG5cdFx0XHRyZWNvcmQucHJvcGVydHlWYWx1ZXMgPSBwcm9wZXJ0eVZhbHVlcztcblx0XHRcdHBhcnNlZEFubm90YXRpb25PYmplY3QucmVjb3JkID0gcmVjb3JkO1xuXHRcdH1cblx0XHRwYXJzZWRBbm5vdGF0aW9uT2JqZWN0LmlzQ29sbGVjdGlvbiA9IGlzQ29sbGVjdGlvbjtcblx0XHRjdXJyZW50T3V0QW5ub3RhdGlvbk9iamVjdC5hbm5vdGF0aW9ucy5wdXNoKHBhcnNlZEFubm90YXRpb25PYmplY3QpO1xuXHR9XG59XG5cbmZ1bmN0aW9uIHByZXBhcmVQcm9wZXJ0eShwcm9wZXJ0eURlZmluaXRpb246IGFueSwgZW50aXR5VHlwZU9iamVjdDogUmF3RW50aXR5VHlwZSB8IFJhd0NvbXBsZXhUeXBlLCBwcm9wZXJ0eU5hbWU6IHN0cmluZyk6IFJhd1Byb3BlcnR5IHtcblx0cmV0dXJuIHtcblx0XHRfdHlwZTogXCJQcm9wZXJ0eVwiLFxuXHRcdG5hbWU6IHByb3BlcnR5TmFtZSxcblx0XHRmdWxseVF1YWxpZmllZE5hbWU6IGAke2VudGl0eVR5cGVPYmplY3QuZnVsbHlRdWFsaWZpZWROYW1lfS8ke3Byb3BlcnR5TmFtZX1gLFxuXHRcdHR5cGU6IHByb3BlcnR5RGVmaW5pdGlvbi4kVHlwZSxcblx0XHRtYXhMZW5ndGg6IHByb3BlcnR5RGVmaW5pdGlvbi4kTWF4TGVuZ3RoLFxuXHRcdHByZWNpc2lvbjogcHJvcGVydHlEZWZpbml0aW9uLiRQcmVjaXNpb24sXG5cdFx0c2NhbGU6IHByb3BlcnR5RGVmaW5pdGlvbi4kU2NhbGUsXG5cdFx0bnVsbGFibGU6IHByb3BlcnR5RGVmaW5pdGlvbi4kTnVsbGFibGVcblx0fTtcbn1cblxuZnVuY3Rpb24gcHJlcGFyZU5hdmlnYXRpb25Qcm9wZXJ0eShcblx0bmF2UHJvcGVydHlEZWZpbml0aW9uOiBhbnksXG5cdGVudGl0eVR5cGVPYmplY3Q6IFJhd0VudGl0eVR5cGUgfCBSYXdDb21wbGV4VHlwZSxcblx0bmF2UHJvcGVydHlOYW1lOiBzdHJpbmdcbik6IFJhd1Y0TmF2aWdhdGlvblByb3BlcnR5IHtcblx0bGV0IHJlZmVyZW50aWFsQ29uc3RyYWludDogUmVmZXJlbnRpYWxDb25zdHJhaW50W10gPSBbXTtcblx0aWYgKG5hdlByb3BlcnR5RGVmaW5pdGlvbi4kUmVmZXJlbnRpYWxDb25zdHJhaW50KSB7XG5cdFx0cmVmZXJlbnRpYWxDb25zdHJhaW50ID0gT2JqZWN0LmtleXMobmF2UHJvcGVydHlEZWZpbml0aW9uLiRSZWZlcmVudGlhbENvbnN0cmFpbnQpLm1hcCgoc291cmNlUHJvcGVydHlOYW1lKSA9PiB7XG5cdFx0XHRyZXR1cm4ge1xuXHRcdFx0XHRzb3VyY2VUeXBlTmFtZTogZW50aXR5VHlwZU9iamVjdC5uYW1lLFxuXHRcdFx0XHRzb3VyY2VQcm9wZXJ0eTogc291cmNlUHJvcGVydHlOYW1lLFxuXHRcdFx0XHR0YXJnZXRUeXBlTmFtZTogbmF2UHJvcGVydHlEZWZpbml0aW9uLiRUeXBlLFxuXHRcdFx0XHR0YXJnZXRQcm9wZXJ0eTogbmF2UHJvcGVydHlEZWZpbml0aW9uLiRSZWZlcmVudGlhbENvbnN0cmFpbnRbc291cmNlUHJvcGVydHlOYW1lXVxuXHRcdFx0fTtcblx0XHR9KTtcblx0fVxuXHRjb25zdCBuYXZpZ2F0aW9uUHJvcGVydHk6IFJhd1Y0TmF2aWdhdGlvblByb3BlcnR5ID0ge1xuXHRcdF90eXBlOiBcIk5hdmlnYXRpb25Qcm9wZXJ0eVwiLFxuXHRcdG5hbWU6IG5hdlByb3BlcnR5TmFtZSxcblx0XHRmdWxseVF1YWxpZmllZE5hbWU6IGAke2VudGl0eVR5cGVPYmplY3QuZnVsbHlRdWFsaWZpZWROYW1lfS8ke25hdlByb3BlcnR5TmFtZX1gLFxuXHRcdHBhcnRuZXI6IG5hdlByb3BlcnR5RGVmaW5pdGlvbi4kUGFydG5lcixcblx0XHRpc0NvbGxlY3Rpb246IG5hdlByb3BlcnR5RGVmaW5pdGlvbi4kaXNDb2xsZWN0aW9uID8gbmF2UHJvcGVydHlEZWZpbml0aW9uLiRpc0NvbGxlY3Rpb24gOiBmYWxzZSxcblx0XHRjb250YWluc1RhcmdldDogbmF2UHJvcGVydHlEZWZpbml0aW9uLiRDb250YWluc1RhcmdldCxcblx0XHR0YXJnZXRUeXBlTmFtZTogbmF2UHJvcGVydHlEZWZpbml0aW9uLiRUeXBlLFxuXHRcdHJlZmVyZW50aWFsQ29uc3RyYWludFxuXHR9O1xuXG5cdHJldHVybiBuYXZpZ2F0aW9uUHJvcGVydHk7XG59XG5cbmZ1bmN0aW9uIHByZXBhcmVFbnRpdHlTZXQoZW50aXR5U2V0RGVmaW5pdGlvbjogYW55LCBlbnRpdHlTZXROYW1lOiBzdHJpbmcsIGVudGl0eUNvbnRhaW5lck5hbWU6IHN0cmluZyk6IFJhd0VudGl0eVNldCB7XG5cdGNvbnN0IGVudGl0eVNldE9iamVjdDogUmF3RW50aXR5U2V0ID0ge1xuXHRcdF90eXBlOiBcIkVudGl0eVNldFwiLFxuXHRcdG5hbWU6IGVudGl0eVNldE5hbWUsXG5cdFx0bmF2aWdhdGlvblByb3BlcnR5QmluZGluZzoge30sXG5cdFx0ZW50aXR5VHlwZU5hbWU6IGVudGl0eVNldERlZmluaXRpb24uJFR5cGUsXG5cdFx0ZnVsbHlRdWFsaWZpZWROYW1lOiBgJHtlbnRpdHlDb250YWluZXJOYW1lfS8ke2VudGl0eVNldE5hbWV9YFxuXHR9O1xuXHRyZXR1cm4gZW50aXR5U2V0T2JqZWN0O1xufVxuXG5mdW5jdGlvbiBwcmVwYXJlU2luZ2xldG9uKHNpbmdsZXRvbkRlZmluaXRpb246IGFueSwgc2luZ2xldG9uTmFtZTogc3RyaW5nLCBlbnRpdHlDb250YWluZXJOYW1lOiBzdHJpbmcpOiBSYXdTaW5nbGV0b24ge1xuXHRyZXR1cm4ge1xuXHRcdF90eXBlOiBcIlNpbmdsZXRvblwiLFxuXHRcdG5hbWU6IHNpbmdsZXRvbk5hbWUsXG5cdFx0bmF2aWdhdGlvblByb3BlcnR5QmluZGluZzoge30sXG5cdFx0ZW50aXR5VHlwZU5hbWU6IHNpbmdsZXRvbkRlZmluaXRpb24uJFR5cGUsXG5cdFx0ZnVsbHlRdWFsaWZpZWROYW1lOiBgJHtlbnRpdHlDb250YWluZXJOYW1lfS8ke3NpbmdsZXRvbk5hbWV9YCxcblx0XHRudWxsYWJsZTogdHJ1ZVxuXHR9O1xufVxuXG5mdW5jdGlvbiBwcmVwYXJlQWN0aW9uSW1wb3J0KGFjdGlvbkltcG9ydDogYW55LCBhY3Rpb25JbXBvcnROYW1lOiBzdHJpbmcsIGVudGl0eUNvbnRhaW5lck5hbWU6IHN0cmluZyk6IFJhd0FjdGlvbkltcG9ydCB7XG5cdHJldHVybiB7XG5cdFx0X3R5cGU6IFwiQWN0aW9uSW1wb3J0XCIsXG5cdFx0bmFtZTogYWN0aW9uSW1wb3J0TmFtZSxcblx0XHRmdWxseVF1YWxpZmllZE5hbWU6IGAke2VudGl0eUNvbnRhaW5lck5hbWV9LyR7YWN0aW9uSW1wb3J0TmFtZX1gLFxuXHRcdGFjdGlvbk5hbWU6IGFjdGlvbkltcG9ydC4kQWN0aW9uXG5cdH07XG59XG5cbmZ1bmN0aW9uIHByZXBhcmVUeXBlRGVmaW5pdGlvbih0eXBlRGVmaW5pdGlvbjogYW55LCB0eXBlTmFtZTogc3RyaW5nLCBuYW1lc3BhY2VQcmVmaXg6IHN0cmluZyk6IFJhd1R5cGVEZWZpbml0aW9uIHtcblx0Y29uc3QgdHlwZU9iamVjdDogUmF3VHlwZURlZmluaXRpb24gPSB7XG5cdFx0X3R5cGU6IFwiVHlwZURlZmluaXRpb25cIixcblx0XHRuYW1lOiB0eXBlTmFtZS5zdWJzdHJpbmcobmFtZXNwYWNlUHJlZml4Lmxlbmd0aCksXG5cdFx0ZnVsbHlRdWFsaWZpZWROYW1lOiB0eXBlTmFtZSxcblx0XHR1bmRlcmx5aW5nVHlwZTogdHlwZURlZmluaXRpb24uJFVuZGVybHlpbmdUeXBlXG5cdH07XG5cdHJldHVybiB0eXBlT2JqZWN0O1xufVxuXG5mdW5jdGlvbiBwcmVwYXJlQ29tcGxleFR5cGUoY29tcGxleFR5cGVEZWZpbml0aW9uOiBhbnksIGNvbXBsZXhUeXBlTmFtZTogc3RyaW5nLCBuYW1lc3BhY2VQcmVmaXg6IHN0cmluZyk6IFJhd0NvbXBsZXhUeXBlIHtcblx0Y29uc3QgY29tcGxleFR5cGVPYmplY3Q6IFJhd0NvbXBsZXhUeXBlID0ge1xuXHRcdF90eXBlOiBcIkNvbXBsZXhUeXBlXCIsXG5cdFx0bmFtZTogY29tcGxleFR5cGVOYW1lLnN1YnN0cmluZyhuYW1lc3BhY2VQcmVmaXgubGVuZ3RoKSxcblx0XHRmdWxseVF1YWxpZmllZE5hbWU6IGNvbXBsZXhUeXBlTmFtZSxcblx0XHRwcm9wZXJ0aWVzOiBbXSxcblx0XHRuYXZpZ2F0aW9uUHJvcGVydGllczogW11cblx0fTtcblxuXHRjb25zdCBjb21wbGV4VHlwZVByb3BlcnRpZXMgPSBPYmplY3Qua2V5cyhjb21wbGV4VHlwZURlZmluaXRpb24pXG5cdFx0LmZpbHRlcigocHJvcGVydHlOYW1lT3JOb3QpID0+IHtcblx0XHRcdGlmIChwcm9wZXJ0eU5hbWVPck5vdCAhPSBcIiRLZXlcIiAmJiBwcm9wZXJ0eU5hbWVPck5vdCAhPSBcIiRraW5kXCIpIHtcblx0XHRcdFx0cmV0dXJuIGNvbXBsZXhUeXBlRGVmaW5pdGlvbltwcm9wZXJ0eU5hbWVPck5vdF0uJGtpbmQgPT09IFwiUHJvcGVydHlcIjtcblx0XHRcdH1cblx0XHR9KVxuXHRcdC5zb3J0KChhLCBiKSA9PiAoYSA+IGIgPyAxIDogLTEpKVxuXHRcdC5tYXAoKHByb3BlcnR5TmFtZSkgPT4ge1xuXHRcdFx0cmV0dXJuIHByZXBhcmVQcm9wZXJ0eShjb21wbGV4VHlwZURlZmluaXRpb25bcHJvcGVydHlOYW1lXSwgY29tcGxleFR5cGVPYmplY3QsIHByb3BlcnR5TmFtZSk7XG5cdFx0fSk7XG5cblx0Y29tcGxleFR5cGVPYmplY3QucHJvcGVydGllcyA9IGNvbXBsZXhUeXBlUHJvcGVydGllcztcblx0Y29uc3QgY29tcGxleFR5cGVOYXZpZ2F0aW9uUHJvcGVydGllcyA9IE9iamVjdC5rZXlzKGNvbXBsZXhUeXBlRGVmaW5pdGlvbilcblx0XHQuZmlsdGVyKChwcm9wZXJ0eU5hbWVPck5vdCkgPT4ge1xuXHRcdFx0aWYgKHByb3BlcnR5TmFtZU9yTm90ICE9IFwiJEtleVwiICYmIHByb3BlcnR5TmFtZU9yTm90ICE9IFwiJGtpbmRcIikge1xuXHRcdFx0XHRyZXR1cm4gY29tcGxleFR5cGVEZWZpbml0aW9uW3Byb3BlcnR5TmFtZU9yTm90XS4ka2luZCA9PT0gXCJOYXZpZ2F0aW9uUHJvcGVydHlcIjtcblx0XHRcdH1cblx0XHR9KVxuXHRcdC5zb3J0KChhLCBiKSA9PiAoYSA+IGIgPyAxIDogLTEpKVxuXHRcdC5tYXAoKG5hdlByb3BlcnR5TmFtZSkgPT4ge1xuXHRcdFx0cmV0dXJuIHByZXBhcmVOYXZpZ2F0aW9uUHJvcGVydHkoY29tcGxleFR5cGVEZWZpbml0aW9uW25hdlByb3BlcnR5TmFtZV0sIGNvbXBsZXhUeXBlT2JqZWN0LCBuYXZQcm9wZXJ0eU5hbWUpO1xuXHRcdH0pO1xuXHRjb21wbGV4VHlwZU9iamVjdC5uYXZpZ2F0aW9uUHJvcGVydGllcyA9IGNvbXBsZXhUeXBlTmF2aWdhdGlvblByb3BlcnRpZXM7XG5cdHJldHVybiBjb21wbGV4VHlwZU9iamVjdDtcbn1cblxuZnVuY3Rpb24gcHJlcGFyZUVudGl0eUtleXMoZW50aXR5VHlwZURlZmluaXRpb246IGFueSwgb01ldGFNb2RlbERhdGE6IGFueSk6IHN0cmluZ1tdIHtcblx0aWYgKCFlbnRpdHlUeXBlRGVmaW5pdGlvbi4kS2V5ICYmIGVudGl0eVR5cGVEZWZpbml0aW9uLiRCYXNlVHlwZSkge1xuXHRcdHJldHVybiBwcmVwYXJlRW50aXR5S2V5cyhvTWV0YU1vZGVsRGF0YVtlbnRpdHlUeXBlRGVmaW5pdGlvbi4kQmFzZVR5cGVdLCBvTWV0YU1vZGVsRGF0YSk7XG5cdH1cblx0cmV0dXJuIGVudGl0eVR5cGVEZWZpbml0aW9uLiRLZXkgPz8gW107IC8vaGFuZGxpbmcgb2YgZW50aXR5IHR5cGVzIHdpdGhvdXQga2V5IGFzIHdlbGwgYXMgYmFzZXR5cGVcbn1cblxuZnVuY3Rpb24gcHJlcGFyZUVudGl0eVR5cGUoZW50aXR5VHlwZURlZmluaXRpb246IGFueSwgZW50aXR5VHlwZU5hbWU6IHN0cmluZywgbmFtZXNwYWNlUHJlZml4OiBzdHJpbmcsIG1ldGFNb2RlbERhdGE6IGFueSk6IFJhd0VudGl0eVR5cGUge1xuXHRjb25zdCBlbnRpdHlUeXBlOiBSYXdFbnRpdHlUeXBlID0ge1xuXHRcdF90eXBlOiBcIkVudGl0eVR5cGVcIixcblx0XHRuYW1lOiBlbnRpdHlUeXBlTmFtZS5zdWJzdHJpbmcobmFtZXNwYWNlUHJlZml4Lmxlbmd0aCksXG5cdFx0ZnVsbHlRdWFsaWZpZWROYW1lOiBlbnRpdHlUeXBlTmFtZSxcblx0XHRrZXlzOiBbXSxcblx0XHRlbnRpdHlQcm9wZXJ0aWVzOiBbXSxcblx0XHRuYXZpZ2F0aW9uUHJvcGVydGllczogW10sXG5cdFx0YWN0aW9uczoge31cblx0fTtcblxuXHRmb3IgKGNvbnN0IGtleSBpbiBlbnRpdHlUeXBlRGVmaW5pdGlvbikge1xuXHRcdGNvbnN0IHZhbHVlID0gZW50aXR5VHlwZURlZmluaXRpb25ba2V5XTtcblxuXHRcdHN3aXRjaCAodmFsdWUuJGtpbmQpIHtcblx0XHRcdGNhc2UgXCJQcm9wZXJ0eVwiOlxuXHRcdFx0XHRjb25zdCBwcm9wZXJ0eSA9IHByZXBhcmVQcm9wZXJ0eSh2YWx1ZSwgZW50aXR5VHlwZSwga2V5KTtcblx0XHRcdFx0ZW50aXR5VHlwZS5lbnRpdHlQcm9wZXJ0aWVzLnB1c2gocHJvcGVydHkpO1xuXHRcdFx0XHRicmVhaztcblx0XHRcdGNhc2UgXCJOYXZpZ2F0aW9uUHJvcGVydHlcIjpcblx0XHRcdFx0Y29uc3QgbmF2aWdhdGlvblByb3BlcnR5ID0gcHJlcGFyZU5hdmlnYXRpb25Qcm9wZXJ0eSh2YWx1ZSwgZW50aXR5VHlwZSwga2V5KTtcblx0XHRcdFx0ZW50aXR5VHlwZS5uYXZpZ2F0aW9uUHJvcGVydGllcy5wdXNoKG5hdmlnYXRpb25Qcm9wZXJ0eSk7XG5cdFx0XHRcdGJyZWFrO1xuXHRcdH1cblx0fVxuXG5cdGVudGl0eVR5cGUua2V5cyA9IHByZXBhcmVFbnRpdHlLZXlzKGVudGl0eVR5cGVEZWZpbml0aW9uLCBtZXRhTW9kZWxEYXRhKVxuXHRcdC5tYXAoKGVudGl0eUtleSkgPT4gZW50aXR5VHlwZS5lbnRpdHlQcm9wZXJ0aWVzLmZpbmQoKHByb3BlcnR5KSA9PiBwcm9wZXJ0eS5uYW1lID09PSBlbnRpdHlLZXkpKVxuXHRcdC5maWx0ZXIoKHByb3BlcnR5KSA9PiBwcm9wZXJ0eSAhPT0gdW5kZWZpbmVkKSBhcyBSYXdFbnRpdHlUeXBlW1wia2V5c1wiXTtcblxuXHQvLyBDaGVjayBpZiB0aGVyZSBhcmUgZmlsdGVyIGZhY2V0cyBkZWZpbmVkIGZvciB0aGUgZW50aXR5VHlwZSBhbmQgaWYgeWVzLCBjaGVjayBpZiBhbGwgb2YgdGhlbSBoYXZlIGFuIElEXG5cdC8vIFRoZSBJRCBpcyBvcHRpb25hbCwgYnV0IGl0IGlzIGludGVybmFsbHkgdGFrZW4gZm9yIGdyb3VwaW5nIGZpbHRlciBmaWVsZHMgYW5kIGlmIGl0J3Mgbm90IHByZXNlbnRcblx0Ly8gYSBmYWxsYmFjayBJRCBuZWVkcyB0byBiZSBnZW5lcmF0ZWQgaGVyZS5cblx0bWV0YU1vZGVsRGF0YS4kQW5ub3RhdGlvbnNbZW50aXR5VHlwZS5mdWxseVF1YWxpZmllZE5hbWVdPy5bYEAke1VJQW5ub3RhdGlvblRlcm1zLkZpbHRlckZhY2V0c31gXT8uZm9yRWFjaChcblx0XHQoZmlsdGVyRmFjZXRBbm5vdGF0aW9uOiBhbnkpID0+IHtcblx0XHRcdGZpbHRlckZhY2V0QW5ub3RhdGlvbi5JRCA9IGNyZWF0ZVJlZmVyZW5jZUZhY2V0SWQoZmlsdGVyRmFjZXRBbm5vdGF0aW9uKTtcblx0XHR9XG5cdCk7XG5cblx0Zm9yIChjb25zdCBlbnRpdHlQcm9wZXJ0eSBvZiBlbnRpdHlUeXBlLmVudGl0eVByb3BlcnRpZXMpIHtcblx0XHRpZiAoIW1ldGFNb2RlbERhdGEuJEFubm90YXRpb25zW2VudGl0eVByb3BlcnR5LmZ1bGx5UXVhbGlmaWVkTmFtZV0pIHtcblx0XHRcdG1ldGFNb2RlbERhdGEuJEFubm90YXRpb25zW2VudGl0eVByb3BlcnR5LmZ1bGx5UXVhbGlmaWVkTmFtZV0gPSB7fTtcblx0XHR9XG5cdFx0aWYgKCFtZXRhTW9kZWxEYXRhLiRBbm5vdGF0aW9uc1tlbnRpdHlQcm9wZXJ0eS5mdWxseVF1YWxpZmllZE5hbWVdW2BAJHtVSUFubm90YXRpb25UZXJtcy5EYXRhRmllbGREZWZhdWx0fWBdKSB7XG5cdFx0XHRtZXRhTW9kZWxEYXRhLiRBbm5vdGF0aW9uc1tlbnRpdHlQcm9wZXJ0eS5mdWxseVF1YWxpZmllZE5hbWVdW2BAJHtVSUFubm90YXRpb25UZXJtcy5EYXRhRmllbGREZWZhdWx0fWBdID0ge1xuXHRcdFx0XHQkVHlwZTogVUlBbm5vdGF0aW9uVHlwZXMuRGF0YUZpZWxkLFxuXHRcdFx0XHRWYWx1ZTogeyAkUGF0aDogZW50aXR5UHJvcGVydHkubmFtZSB9XG5cdFx0XHR9O1xuXHRcdH1cblx0fVxuXG5cdHJldHVybiBlbnRpdHlUeXBlO1xufVxuZnVuY3Rpb24gcHJlcGFyZUFjdGlvbihhY3Rpb25OYW1lOiBzdHJpbmcsIGFjdGlvblJhd0RhdGE6IE1ldGFNb2RlbEFjdGlvbiwgbmFtZXNwYWNlUHJlZml4OiBzdHJpbmcpOiBSYXdBY3Rpb24ge1xuXHRsZXQgYWN0aW9uRW50aXR5VHlwZSA9IFwiXCI7XG5cdGxldCBhY3Rpb25GUU4gPSBhY3Rpb25OYW1lO1xuXG5cdGlmIChhY3Rpb25SYXdEYXRhLiRJc0JvdW5kKSB7XG5cdFx0Y29uc3QgYmluZGluZ1BhcmFtZXRlciA9IGFjdGlvblJhd0RhdGEuJFBhcmFtZXRlclswXTtcblx0XHRhY3Rpb25FbnRpdHlUeXBlID0gYmluZGluZ1BhcmFtZXRlci4kVHlwZTtcblx0XHRpZiAoYmluZGluZ1BhcmFtZXRlci4kaXNDb2xsZWN0aW9uID09PSB0cnVlKSB7XG5cdFx0XHRhY3Rpb25GUU4gPSBgJHthY3Rpb25OYW1lfShDb2xsZWN0aW9uKCR7YWN0aW9uRW50aXR5VHlwZX0pKWA7XG5cdFx0fSBlbHNlIHtcblx0XHRcdGFjdGlvbkZRTiA9IGAke2FjdGlvbk5hbWV9KCR7YWN0aW9uRW50aXR5VHlwZX0pYDtcblx0XHR9XG5cdH1cblxuXHRjb25zdCBwYXJhbWV0ZXJzID0gYWN0aW9uUmF3RGF0YS4kUGFyYW1ldGVyID8/IFtdO1xuXHRyZXR1cm4ge1xuXHRcdF90eXBlOiBcIkFjdGlvblwiLFxuXHRcdG5hbWU6IGFjdGlvbk5hbWUuc3Vic3RyaW5nKG5hbWVzcGFjZVByZWZpeC5sZW5ndGgpLFxuXHRcdGZ1bGx5UXVhbGlmaWVkTmFtZTogYWN0aW9uRlFOLFxuXHRcdGlzQm91bmQ6IGFjdGlvblJhd0RhdGEuJElzQm91bmQgPz8gZmFsc2UsXG5cdFx0aXNGdW5jdGlvbjogYWN0aW9uUmF3RGF0YS4ka2luZCA9PT0gXCJGdW5jdGlvblwiLFxuXHRcdHNvdXJjZVR5cGU6IGFjdGlvbkVudGl0eVR5cGUsXG5cdFx0cmV0dXJuVHlwZTogYWN0aW9uUmF3RGF0YS4kUmV0dXJuVHlwZT8uJFR5cGUgPz8gXCJcIixcblx0XHRwYXJhbWV0ZXJzOiBwYXJhbWV0ZXJzLm1hcCgocGFyYW0pID0+IHtcblx0XHRcdHJldHVybiB7XG5cdFx0XHRcdF90eXBlOiBcIkFjdGlvblBhcmFtZXRlclwiLFxuXHRcdFx0XHRmdWxseVF1YWxpZmllZE5hbWU6IGAke2FjdGlvbkZRTn0vJHtwYXJhbS4kTmFtZX1gLFxuXHRcdFx0XHRpc0NvbGxlY3Rpb246IHBhcmFtLiRpc0NvbGxlY3Rpb24gPz8gZmFsc2UsXG5cdFx0XHRcdG5hbWU6IHBhcmFtLiROYW1lLFxuXHRcdFx0XHR0eXBlOiBwYXJhbS4kVHlwZVxuXHRcdFx0fTtcblx0XHR9KVxuXHR9O1xufVxuXG5mdW5jdGlvbiBwYXJzZUVudGl0eUNvbnRhaW5lcihcblx0bmFtZXNwYWNlUHJlZml4OiBzdHJpbmcsXG5cdGVudGl0eUNvbnRhaW5lck5hbWU6IHN0cmluZyxcblx0ZW50aXR5Q29udGFpbmVyTWV0YWRhdGE6IFJlY29yZDxzdHJpbmcsIGFueT4sXG5cdHNjaGVtYTogUmF3U2NoZW1hXG4pIHtcblx0c2NoZW1hLmVudGl0eUNvbnRhaW5lciA9IHtcblx0XHRfdHlwZTogXCJFbnRpdHlDb250YWluZXJcIixcblx0XHRuYW1lOiBlbnRpdHlDb250YWluZXJOYW1lLnN1YnN0cmluZyhuYW1lc3BhY2VQcmVmaXgubGVuZ3RoKSxcblx0XHRmdWxseVF1YWxpZmllZE5hbWU6IGVudGl0eUNvbnRhaW5lck5hbWVcblx0fTtcblxuXHRmb3IgKGNvbnN0IGVsZW1lbnROYW1lIGluIGVudGl0eUNvbnRhaW5lck1ldGFkYXRhKSB7XG5cdFx0Y29uc3QgZWxlbWVudFZhbHVlID0gZW50aXR5Q29udGFpbmVyTWV0YWRhdGFbZWxlbWVudE5hbWVdO1xuXHRcdHN3aXRjaCAoZWxlbWVudFZhbHVlLiRraW5kKSB7XG5cdFx0XHRjYXNlIFwiRW50aXR5U2V0XCI6XG5cdFx0XHRcdHNjaGVtYS5lbnRpdHlTZXRzLnB1c2gocHJlcGFyZUVudGl0eVNldChlbGVtZW50VmFsdWUsIGVsZW1lbnROYW1lLCBlbnRpdHlDb250YWluZXJOYW1lKSk7XG5cdFx0XHRcdGJyZWFrO1xuXG5cdFx0XHRjYXNlIFwiU2luZ2xldG9uXCI6XG5cdFx0XHRcdHNjaGVtYS5zaW5nbGV0b25zLnB1c2gocHJlcGFyZVNpbmdsZXRvbihlbGVtZW50VmFsdWUsIGVsZW1lbnROYW1lLCBlbnRpdHlDb250YWluZXJOYW1lKSk7XG5cdFx0XHRcdGJyZWFrO1xuXG5cdFx0XHRjYXNlIFwiQWN0aW9uSW1wb3J0XCI6XG5cdFx0XHRcdHNjaGVtYS5hY3Rpb25JbXBvcnRzLnB1c2gocHJlcGFyZUFjdGlvbkltcG9ydChlbGVtZW50VmFsdWUsIGVsZW1lbnROYW1lLCBlbnRpdHlDb250YWluZXJOYW1lKSk7XG5cdFx0XHRcdGJyZWFrO1xuXHRcdH1cblx0fVxuXG5cdC8vIGxpbmsgdGhlIG5hdmlnYXRpb24gcHJvcGVydHkgYmluZGluZ3MgKCROYXZpZ2F0aW9uUHJvcGVydHlCaW5kaW5nKVxuXHRmb3IgKGNvbnN0IGVudGl0eVNldCBvZiBzY2hlbWEuZW50aXR5U2V0cykge1xuXHRcdGNvbnN0IG5hdlByb3BlcnR5QmluZGluZ3MgPSBlbnRpdHlDb250YWluZXJNZXRhZGF0YVtlbnRpdHlTZXQubmFtZV0uJE5hdmlnYXRpb25Qcm9wZXJ0eUJpbmRpbmc7XG5cdFx0aWYgKG5hdlByb3BlcnR5QmluZGluZ3MpIHtcblx0XHRcdGZvciAoY29uc3QgbmF2UHJvcE5hbWUgb2YgT2JqZWN0LmtleXMobmF2UHJvcGVydHlCaW5kaW5ncykpIHtcblx0XHRcdFx0Y29uc3QgdGFyZ2V0RW50aXR5U2V0ID0gc2NoZW1hLmVudGl0eVNldHMuZmluZCgoZW50aXR5U2V0TmFtZSkgPT4gZW50aXR5U2V0TmFtZS5uYW1lID09PSBuYXZQcm9wZXJ0eUJpbmRpbmdzW25hdlByb3BOYW1lXSk7XG5cdFx0XHRcdGlmICh0YXJnZXRFbnRpdHlTZXQpIHtcblx0XHRcdFx0XHRlbnRpdHlTZXQubmF2aWdhdGlvblByb3BlcnR5QmluZGluZ1tuYXZQcm9wTmFtZV0gPSB0YXJnZXRFbnRpdHlTZXQ7XG5cdFx0XHRcdH1cblx0XHRcdH1cblx0XHR9XG5cdH1cbn1cblxuZnVuY3Rpb24gcGFyc2VBbm5vdGF0aW9ucyhhbm5vdGF0aW9uczogUmVjb3JkPHN0cmluZywgYW55PiwgY2FwYWJpbGl0aWVzOiBFbnZpcm9ubWVudENhcGFiaWxpdGllcykge1xuXHRjb25zdCBhbm5vdGF0aW9uTGlzdHM6IFJlY29yZDxzdHJpbmcsIEFubm90YXRpb25MaXN0PiA9IHt9O1xuXHRmb3IgKGNvbnN0IHRhcmdldCBpbiBhbm5vdGF0aW9ucykge1xuXHRcdGNyZWF0ZUFubm90YXRpb25MaXN0cyhhbm5vdGF0aW9uc1t0YXJnZXRdLCB0YXJnZXQsIGFubm90YXRpb25MaXN0cywgY2FwYWJpbGl0aWVzKTtcblx0fVxuXHRyZXR1cm4gT2JqZWN0LnZhbHVlcyhhbm5vdGF0aW9uTGlzdHMpO1xufVxuXG5mdW5jdGlvbiBwYXJzZVNjaGVtYShtZXRhTW9kZWxEYXRhOiBhbnkpIHtcblx0Ly8gYXNzdW1pbmcgdGhlcmUgaXMgb25seSBvbmUgc2NoZW1hL25hbWVzcGFjZVxuXHRjb25zdCBuYW1lc3BhY2VQcmVmaXggPSBPYmplY3Qua2V5cyhtZXRhTW9kZWxEYXRhKS5maW5kKChrZXkpID0+IG1ldGFNb2RlbERhdGFba2V5XS4ka2luZCA9PT0gXCJTY2hlbWFcIikgPz8gXCJcIjtcblxuXHRjb25zdCBzY2hlbWE6IFJhd1NjaGVtYSA9IHtcblx0XHRuYW1lc3BhY2U6IG5hbWVzcGFjZVByZWZpeC5zbGljZSgwLCAtMSksXG5cdFx0ZW50aXR5Q29udGFpbmVyOiB7IF90eXBlOiBcIkVudGl0eUNvbnRhaW5lclwiLCBuYW1lOiBcIlwiLCBmdWxseVF1YWxpZmllZE5hbWU6IFwiXCIgfSxcblx0XHRlbnRpdHlTZXRzOiBbXSxcblx0XHRlbnRpdHlUeXBlczogW10sXG5cdFx0Y29tcGxleFR5cGVzOiBbXSxcblx0XHR0eXBlRGVmaW5pdGlvbnM6IFtdLFxuXHRcdHNpbmdsZXRvbnM6IFtdLFxuXHRcdGFzc29jaWF0aW9uczogW10sXG5cdFx0YXNzb2NpYXRpb25TZXRzOiBbXSxcblx0XHRhY3Rpb25zOiBbXSxcblx0XHRhY3Rpb25JbXBvcnRzOiBbXSxcblx0XHRhbm5vdGF0aW9uczoge31cblx0fTtcblxuXHRjb25zdCBwYXJzZU1ldGFNb2RlbEVsZW1lbnQgPSAobmFtZTogc3RyaW5nLCB2YWx1ZTogYW55KSA9PiB7XG5cdFx0c3dpdGNoICh2YWx1ZS4ka2luZCkge1xuXHRcdFx0Y2FzZSBcIkVudGl0eUNvbnRhaW5lclwiOlxuXHRcdFx0XHRwYXJzZUVudGl0eUNvbnRhaW5lcihuYW1lc3BhY2VQcmVmaXgsIG5hbWUsIHZhbHVlLCBzY2hlbWEpO1xuXHRcdFx0XHRicmVhaztcblxuXHRcdFx0Y2FzZSBcIkFjdGlvblwiOlxuXHRcdFx0Y2FzZSBcIkZ1bmN0aW9uXCI6XG5cdFx0XHRcdHNjaGVtYS5hY3Rpb25zLnB1c2gocHJlcGFyZUFjdGlvbihuYW1lLCB2YWx1ZSwgbmFtZXNwYWNlUHJlZml4KSk7XG5cdFx0XHRcdGJyZWFrO1xuXG5cdFx0XHRjYXNlIFwiRW50aXR5VHlwZVwiOlxuXHRcdFx0XHRzY2hlbWEuZW50aXR5VHlwZXMucHVzaChwcmVwYXJlRW50aXR5VHlwZSh2YWx1ZSwgbmFtZSwgbmFtZXNwYWNlUHJlZml4LCBtZXRhTW9kZWxEYXRhKSk7XG5cdFx0XHRcdGJyZWFrO1xuXG5cdFx0XHRjYXNlIFwiQ29tcGxleFR5cGVcIjpcblx0XHRcdFx0c2NoZW1hLmNvbXBsZXhUeXBlcy5wdXNoKHByZXBhcmVDb21wbGV4VHlwZSh2YWx1ZSwgbmFtZSwgbmFtZXNwYWNlUHJlZml4KSk7XG5cdFx0XHRcdGJyZWFrO1xuXG5cdFx0XHRjYXNlIFwiVHlwZURlZmluaXRpb25cIjpcblx0XHRcdFx0c2NoZW1hLnR5cGVEZWZpbml0aW9ucy5wdXNoKHByZXBhcmVUeXBlRGVmaW5pdGlvbih2YWx1ZSwgbmFtZSwgbmFtZXNwYWNlUHJlZml4KSk7XG5cdFx0XHRcdGJyZWFrO1xuXHRcdH1cblx0fTtcblxuXHRmb3IgKGNvbnN0IGVsZW1lbnROYW1lIGluIG1ldGFNb2RlbERhdGEpIHtcblx0XHRjb25zdCBlbGVtZW50VmFsdWUgPSBtZXRhTW9kZWxEYXRhW2VsZW1lbnROYW1lXTtcblxuXHRcdGlmIChBcnJheS5pc0FycmF5KGVsZW1lbnRWYWx1ZSkpIHtcblx0XHRcdC8vIHZhbHVlIGNhbiBiZSBhbiBhcnJheSBpbiBjYXNlIG9mIGFjdGlvbnMgb3IgZnVuY3Rpb25zXG5cdFx0XHRmb3IgKGNvbnN0IHN1YkVsZW1lbnRWYWx1ZSBvZiBlbGVtZW50VmFsdWUpIHtcblx0XHRcdFx0cGFyc2VNZXRhTW9kZWxFbGVtZW50KGVsZW1lbnROYW1lLCBzdWJFbGVtZW50VmFsdWUpO1xuXHRcdFx0fVxuXHRcdH0gZWxzZSB7XG5cdFx0XHRwYXJzZU1ldGFNb2RlbEVsZW1lbnQoZWxlbWVudE5hbWUsIGVsZW1lbnRWYWx1ZSk7XG5cdFx0fVxuXHR9XG5cblx0cmV0dXJuIHNjaGVtYTtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIHBhcnNlTWV0YU1vZGVsKFxuXHRtZXRhTW9kZWw6IE9EYXRhTWV0YU1vZGVsLFxuXHRjYXBhYmlsaXRpZXM6IEVudmlyb25tZW50Q2FwYWJpbGl0aWVzID0gRGVmYXVsdEVudmlyb25tZW50Q2FwYWJpbGl0aWVzXG4pOiBSYXdNZXRhZGF0YSB7XG5cdGNvbnN0IHJlc3VsdDogT21pdDxSYXdNZXRhZGF0YSwgXCJzY2hlbWFcIj4gPSB7XG5cdFx0aWRlbnRpZmljYXRpb246IFwibWV0YW1vZGVsUmVzdWx0XCIsXG5cdFx0dmVyc2lvbjogXCI0LjBcIixcblx0XHRyZWZlcmVuY2VzOiBbXVxuXHR9O1xuXG5cdC8vIHBhcnNlIHRoZSBzY2hlbWEgd2hlbiBpdCBpcyBhY2Nlc3NlZCBmb3IgdGhlIGZpcnN0IHRpbWVcblx0QW5ub3RhdGlvbkNvbnZlcnRlci5sYXp5KHJlc3VsdCBhcyBSYXdNZXRhZGF0YSwgXCJzY2hlbWFcIiwgKCkgPT4ge1xuXHRcdGNvbnN0IG1ldGFNb2RlbERhdGEgPSBtZXRhTW9kZWwuZ2V0T2JqZWN0KFwiLyRcIik7XG5cdFx0Y29uc3Qgc2NoZW1hID0gcGFyc2VTY2hlbWEobWV0YU1vZGVsRGF0YSk7XG5cblx0XHRBbm5vdGF0aW9uQ29udmVydGVyLmxhenkoc2NoZW1hLmFubm90YXRpb25zLCBcIm1ldGFtb2RlbFJlc3VsdFwiLCAoKSA9PiBwYXJzZUFubm90YXRpb25zKG1ldGFNb2RlbERhdGEuJEFubm90YXRpb25zLCBjYXBhYmlsaXRpZXMpKTtcblxuXHRcdHJldHVybiBzY2hlbWE7XG5cdH0pO1xuXG5cdHJldHVybiByZXN1bHQgYXMgUmF3TWV0YWRhdGE7XG59XG5cbmNvbnN0IG1NZXRhTW9kZWxNYXA6IFJlY29yZDxzdHJpbmcsIENvbnZlcnRlZE1ldGFkYXRhPiA9IHt9O1xuXG5leHBvcnQgZnVuY3Rpb24gaXNDb21wbGV4VHlwZShjb21wbGV4VHlwZTogdW5rbm93bik6IGNvbXBsZXhUeXBlIGlzIENvbXBsZXhUeXBlIHtcblx0cmV0dXJuIChjb21wbGV4VHlwZSBhcyBDb21wbGV4VHlwZSk/Ll90eXBlID09PSBcIkNvbXBsZXhUeXBlXCI7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBpc0VudGl0eVR5cGUoZW50aXR5VHlwZTogdW5rbm93bik6IGVudGl0eVR5cGUgaXMgRW50aXR5VHlwZSB7XG5cdHJldHVybiAoZW50aXR5VHlwZSBhcyBFbnRpdHlUeXBlKT8uX3R5cGUgPT09IFwiRW50aXR5VHlwZVwiO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gaXNFbnRpdHlTZXQoZW50aXR5U2V0OiB1bmtub3duKTogZW50aXR5U2V0IGlzIEVudGl0eVNldCB7XG5cdHJldHVybiAoZW50aXR5U2V0IGFzIEVudGl0eVNldCk/Ll90eXBlID09PSBcIkVudGl0eVNldFwiO1xufVxuXG4vKipcbiAqIENvbnZlcnQgdGhlIE9EYXRhTWV0YU1vZGVsIGludG8gYW5vdGhlciBmb3JtYXQgdGhhdCBhbGxvdyBmb3IgZWFzeSBtYW5pcHVsYXRpb24gb2YgdGhlIGFubm90YXRpb25zLlxuICpcbiAqIEBwYXJhbSBvTWV0YU1vZGVsIFRoZSBPRGF0YU1ldGFNb2RlbFxuICogQHBhcmFtIG9DYXBhYmlsaXRpZXMgVGhlIGN1cnJlbnQgY2FwYWJpbGl0aWVzXG4gKiBAcmV0dXJucyBBbiBvYmplY3QgY29udGFpbmluZyBvYmplY3QtbGlrZSBhbm5vdGF0aW9uc1xuICovXG5leHBvcnQgZnVuY3Rpb24gY29udmVydFR5cGVzKG9NZXRhTW9kZWw6IE9EYXRhTWV0YU1vZGVsLCBvQ2FwYWJpbGl0aWVzPzogRW52aXJvbm1lbnRDYXBhYmlsaXRpZXMpOiBDb252ZXJ0ZWRNZXRhZGF0YSB7XG5cdGNvbnN0IHNNZXRhTW9kZWxJZCA9IChvTWV0YU1vZGVsIGFzIGFueSkuaWQ7XG5cdGlmICghbU1ldGFNb2RlbE1hcC5oYXNPd25Qcm9wZXJ0eShzTWV0YU1vZGVsSWQpKSB7XG5cdFx0Y29uc3QgcGFyc2VkT3V0cHV0ID0gcGFyc2VNZXRhTW9kZWwob01ldGFNb2RlbCwgb0NhcGFiaWxpdGllcyk7XG5cdFx0dHJ5IHtcblx0XHRcdG1NZXRhTW9kZWxNYXBbc01ldGFNb2RlbElkXSA9IEFubm90YXRpb25Db252ZXJ0ZXIuY29udmVydChwYXJzZWRPdXRwdXQpO1xuXHRcdH0gY2F0Y2ggKG9FcnJvcikge1xuXHRcdFx0dGhyb3cgbmV3IEVycm9yKG9FcnJvciBhcyBhbnkpO1xuXHRcdH1cblx0fVxuXHRyZXR1cm4gbU1ldGFNb2RlbE1hcFtzTWV0YU1vZGVsSWRdIGFzIGFueSBhcyBDb252ZXJ0ZWRNZXRhZGF0YTtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGdldENvbnZlcnRlZFR5cGVzKG9Db250ZXh0OiBDb250ZXh0KSB7XG5cdGNvbnN0IG9NZXRhTW9kZWwgPSBvQ29udGV4dC5nZXRNb2RlbCgpIGFzIHVua25vd24gYXMgT0RhdGFNZXRhTW9kZWw7XG5cdGlmICghb01ldGFNb2RlbC5pc0EoXCJzYXAudWkubW9kZWwub2RhdGEudjQuT0RhdGFNZXRhTW9kZWxcIikpIHtcblx0XHR0aHJvdyBuZXcgRXJyb3IoXCJUaGlzIHNob3VsZCBvbmx5IGJlIGNhbGxlZCBvbiBhIE9EYXRhTWV0YU1vZGVsXCIpO1xuXHR9XG5cdHJldHVybiBjb252ZXJ0VHlwZXMob01ldGFNb2RlbCk7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBkZWxldGVNb2RlbENhY2hlRGF0YShvTWV0YU1vZGVsOiBPRGF0YU1ldGFNb2RlbCkge1xuXHRkZWxldGUgbU1ldGFNb2RlbE1hcFsob01ldGFNb2RlbCBhcyBhbnkpLmlkXTtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGNvbnZlcnRNZXRhTW9kZWxDb250ZXh0KG9NZXRhTW9kZWxDb250ZXh0OiBDb250ZXh0LCBiSW5jbHVkZVZpc2l0ZWRPYmplY3RzOiBib29sZWFuID0gZmFsc2UpOiBhbnkge1xuXHRjb25zdCBvQ29udmVydGVkTWV0YWRhdGEgPSBjb252ZXJ0VHlwZXMob01ldGFNb2RlbENvbnRleHQuZ2V0TW9kZWwoKSBhcyBPRGF0YU1ldGFNb2RlbCk7XG5cdGNvbnN0IHNQYXRoID0gb01ldGFNb2RlbENvbnRleHQuZ2V0UGF0aCgpO1xuXG5cdGNvbnN0IGFQYXRoU3BsaXQgPSBzUGF0aC5zcGxpdChcIi9cIik7XG5cdGxldCBmaXJzdFBhcnQgPSBhUGF0aFNwbGl0WzFdO1xuXHRsZXQgYmVnaW5JbmRleCA9IDI7XG5cdGlmIChvQ29udmVydGVkTWV0YWRhdGEuZW50aXR5Q29udGFpbmVyLmZ1bGx5UXVhbGlmaWVkTmFtZSA9PT0gZmlyc3RQYXJ0KSB7XG5cdFx0Zmlyc3RQYXJ0ID0gYVBhdGhTcGxpdFsyXTtcblx0XHRiZWdpbkluZGV4Kys7XG5cdH1cblx0bGV0IHRhcmdldEVudGl0eVNldDogRW50aXR5U2V0IHwgU2luZ2xldG9uID0gb0NvbnZlcnRlZE1ldGFkYXRhLmVudGl0eVNldHMuZmluZChcblx0XHQoZW50aXR5U2V0KSA9PiBlbnRpdHlTZXQubmFtZSA9PT0gZmlyc3RQYXJ0XG5cdCkgYXMgRW50aXR5U2V0O1xuXHRpZiAoIXRhcmdldEVudGl0eVNldCkge1xuXHRcdHRhcmdldEVudGl0eVNldCA9IG9Db252ZXJ0ZWRNZXRhZGF0YS5zaW5nbGV0b25zLmZpbmQoKHNpbmdsZXRvbikgPT4gc2luZ2xldG9uLm5hbWUgPT09IGZpcnN0UGFydCkgYXMgU2luZ2xldG9uO1xuXHR9XG5cdGxldCByZWxhdGl2ZVBhdGggPSBhUGF0aFNwbGl0LnNsaWNlKGJlZ2luSW5kZXgpLmpvaW4oXCIvXCIpO1xuXG5cdGNvbnN0IGxvY2FsT2JqZWN0czogYW55W10gPSBbdGFyZ2V0RW50aXR5U2V0XTtcblx0d2hpbGUgKHJlbGF0aXZlUGF0aCAmJiByZWxhdGl2ZVBhdGgubGVuZ3RoID4gMCAmJiByZWxhdGl2ZVBhdGguc3RhcnRzV2l0aChcIiROYXZpZ2F0aW9uUHJvcGVydHlCaW5kaW5nXCIpKSB7XG5cdFx0bGV0IHJlbGF0aXZlU3BsaXQgPSByZWxhdGl2ZVBhdGguc3BsaXQoXCIvXCIpO1xuXHRcdGxldCBpZHggPSAwO1xuXHRcdGxldCBjdXJyZW50RW50aXR5U2V0LCBzTmF2UHJvcFRvQ2hlY2s7XG5cblx0XHRyZWxhdGl2ZVNwbGl0ID0gcmVsYXRpdmVTcGxpdC5zbGljZSgxKTsgLy8gUmVtb3ZpbmcgXCIkTmF2aWdhdGlvblByb3BlcnR5QmluZGluZ1wiXG5cdFx0d2hpbGUgKCFjdXJyZW50RW50aXR5U2V0ICYmIHJlbGF0aXZlU3BsaXQubGVuZ3RoID4gaWR4KSB7XG5cdFx0XHRpZiAocmVsYXRpdmVTcGxpdFtpZHhdICE9PSBcIiROYXZpZ2F0aW9uUHJvcGVydHlCaW5kaW5nXCIpIHtcblx0XHRcdFx0Ly8gRmluZGluZyB0aGUgY29ycmVjdCBlbnRpdHlTZXQgZm9yIHRoZSBuYXZpZ2FpdG9uIHByb3BlcnR5IGJpbmRpbmcgZXhhbXBsZTogXCJTZXQvX1NhbGVzT3JkZXJcIlxuXHRcdFx0XHRzTmF2UHJvcFRvQ2hlY2sgPSByZWxhdGl2ZVNwbGl0XG5cdFx0XHRcdFx0LnNsaWNlKDAsIGlkeCArIDEpXG5cdFx0XHRcdFx0LmpvaW4oXCIvXCIpXG5cdFx0XHRcdFx0LnJlcGxhY2UoXCIvJE5hdmlnYXRpb25Qcm9wZXJ0eUJpbmRpbmdcIiwgXCJcIik7XG5cdFx0XHRcdGN1cnJlbnRFbnRpdHlTZXQgPSB0YXJnZXRFbnRpdHlTZXQgJiYgdGFyZ2V0RW50aXR5U2V0Lm5hdmlnYXRpb25Qcm9wZXJ0eUJpbmRpbmdbc05hdlByb3BUb0NoZWNrXTtcblx0XHRcdH1cblx0XHRcdGlkeCsrO1xuXHRcdH1cblx0XHRpZiAoIWN1cnJlbnRFbnRpdHlTZXQpIHtcblx0XHRcdC8vIEZhbGwgYmFjayB0byBTaW5nbGUgbmF2IHByb3AgaWYgZW50aXR5U2V0IGlzIG5vdCBmb3VuZC5cblx0XHRcdHNOYXZQcm9wVG9DaGVjayA9IHJlbGF0aXZlU3BsaXRbMF07XG5cdFx0fVxuXHRcdGNvbnN0IGFOYXZQcm9wcyA9IHNOYXZQcm9wVG9DaGVjaz8uc3BsaXQoXCIvXCIpIHx8IFtdO1xuXHRcdGxldCB0YXJnZXRFbnRpdHlUeXBlID0gdGFyZ2V0RW50aXR5U2V0ICYmIHRhcmdldEVudGl0eVNldC5lbnRpdHlUeXBlO1xuXHRcdGZvciAoY29uc3Qgc05hdlByb3Agb2YgYU5hdlByb3BzKSB7XG5cdFx0XHQvLyBQdXNoaW5nIGFsbCBuYXYgcHJvcHMgdG8gdGhlIHZpc2l0ZWQgb2JqZWN0cy4gZXhhbXBsZTogXCJTZXRcIiwgXCJfU2FsZXNPcmRlclwiIGZvciBcIlNldC9fU2FsZXNPcmRlclwiKGluIE5hdmlnYXRpb25Qcm9wZXJ0eUJpbmRpbmcpXG5cdFx0XHRjb25zdCB0YXJnZXROYXZQcm9wID0gdGFyZ2V0RW50aXR5VHlwZSAmJiB0YXJnZXRFbnRpdHlUeXBlLm5hdmlnYXRpb25Qcm9wZXJ0aWVzLmZpbmQoKG5hdlByb3ApID0+IG5hdlByb3AubmFtZSA9PT0gc05hdlByb3ApO1xuXHRcdFx0aWYgKHRhcmdldE5hdlByb3ApIHtcblx0XHRcdFx0bG9jYWxPYmplY3RzLnB1c2godGFyZ2V0TmF2UHJvcCk7XG5cdFx0XHRcdHRhcmdldEVudGl0eVR5cGUgPSB0YXJnZXROYXZQcm9wLnRhcmdldFR5cGU7XG5cdFx0XHR9IGVsc2Uge1xuXHRcdFx0XHRicmVhaztcblx0XHRcdH1cblx0XHR9XG5cdFx0dGFyZ2V0RW50aXR5U2V0ID1cblx0XHRcdCh0YXJnZXRFbnRpdHlTZXQgJiYgY3VycmVudEVudGl0eVNldCkgfHwgKHRhcmdldEVudGl0eVNldCAmJiB0YXJnZXRFbnRpdHlTZXQubmF2aWdhdGlvblByb3BlcnR5QmluZGluZ1tyZWxhdGl2ZVNwbGl0WzBdXSk7XG5cdFx0aWYgKHRhcmdldEVudGl0eVNldCkge1xuXHRcdFx0Ly8gUHVzaGluZyB0aGUgdGFyZ2V0IGVudGl0eVNldCB0byB2aXNpdGVkIG9iamVjdHNcblx0XHRcdGxvY2FsT2JqZWN0cy5wdXNoKHRhcmdldEVudGl0eVNldCk7XG5cdFx0fVxuXHRcdC8vIFJlLWNhbGN1bGF0aW5nIHRoZSByZWxhdGl2ZSBwYXRoXG5cdFx0Ly8gQXMgZWFjaCBuYXZpZ2F0aW9uIG5hbWUgaXMgZW5jbG9zZWQgYmV0d2VlbiAnJE5hdmlnYXRpb25Qcm9wZXJ0eUJpbmRpbmcnIGFuZCAnJCcgKHRvIGJlIGFibGUgdG8gYWNjZXNzIHRoZSBlbnRpdHlzZXQgZWFzaWx5IGluIHRoZSBtZXRhbW9kZWwpXG5cdFx0Ly8gd2UgbmVlZCB0byByZW1vdmUgdGhlIGNsb3NpbmcgJyQnIHRvIGJlIGFibGUgdG8gc3dpdGNoIHRvIHRoZSBuZXh0IG5hdmlnYXRpb25cblx0XHRyZWxhdGl2ZVNwbGl0ID0gcmVsYXRpdmVTcGxpdC5zbGljZShhTmF2UHJvcHMubGVuZ3RoIHx8IDEpO1xuXHRcdGlmIChyZWxhdGl2ZVNwbGl0Lmxlbmd0aCAmJiByZWxhdGl2ZVNwbGl0WzBdID09PSBcIiRcIikge1xuXHRcdFx0cmVsYXRpdmVTcGxpdC5zaGlmdCgpO1xuXHRcdH1cblx0XHRyZWxhdGl2ZVBhdGggPSByZWxhdGl2ZVNwbGl0LmpvaW4oXCIvXCIpO1xuXHR9XG5cdGlmIChyZWxhdGl2ZVBhdGguc3RhcnRzV2l0aChcIiRUeXBlXCIpKSB7XG5cdFx0Ly8gQXMgJFR5cGVAIGlzIGFsbG93ZWQgYXMgd2VsbFxuXHRcdGlmIChyZWxhdGl2ZVBhdGguc3RhcnRzV2l0aChcIiRUeXBlQFwiKSkge1xuXHRcdFx0cmVsYXRpdmVQYXRoID0gcmVsYXRpdmVQYXRoLnJlcGxhY2UoXCIkVHlwZVwiLCBcIlwiKTtcblx0XHR9IGVsc2Uge1xuXHRcdFx0Ly8gV2UncmUgYW55d2F5IGdvaW5nIHRvIGxvb2sgb24gdGhlIGVudGl0eVR5cGUuLi5cblx0XHRcdHJlbGF0aXZlUGF0aCA9IGFQYXRoU3BsaXQuc2xpY2UoMykuam9pbihcIi9cIik7XG5cdFx0fVxuXHR9XG5cdGlmICh0YXJnZXRFbnRpdHlTZXQgJiYgcmVsYXRpdmVQYXRoLmxlbmd0aCkge1xuXHRcdGNvbnN0IG9UYXJnZXQgPSB0YXJnZXRFbnRpdHlTZXQuZW50aXR5VHlwZS5yZXNvbHZlUGF0aChyZWxhdGl2ZVBhdGgsIGJJbmNsdWRlVmlzaXRlZE9iamVjdHMpO1xuXHRcdGlmIChvVGFyZ2V0KSB7XG5cdFx0XHRpZiAoYkluY2x1ZGVWaXNpdGVkT2JqZWN0cykge1xuXHRcdFx0XHRvVGFyZ2V0LnZpc2l0ZWRPYmplY3RzID0gbG9jYWxPYmplY3RzLmNvbmNhdChvVGFyZ2V0LnZpc2l0ZWRPYmplY3RzKTtcblx0XHRcdH1cblx0XHR9IGVsc2UgaWYgKHRhcmdldEVudGl0eVNldC5lbnRpdHlUeXBlICYmIHRhcmdldEVudGl0eVNldC5lbnRpdHlUeXBlLmFjdGlvbnMpIHtcblx0XHRcdC8vIGlmIHRhcmdldCBpcyBhbiBhY3Rpb24gb3IgYW4gYWN0aW9uIHBhcmFtZXRlclxuXHRcdFx0Y29uc3QgYWN0aW9ucyA9IHRhcmdldEVudGl0eVNldC5lbnRpdHlUeXBlICYmIHRhcmdldEVudGl0eVNldC5lbnRpdHlUeXBlLmFjdGlvbnM7XG5cdFx0XHRjb25zdCByZWxhdGl2ZVNwbGl0ID0gcmVsYXRpdmVQYXRoLnNwbGl0KFwiL1wiKTtcblx0XHRcdGlmIChhY3Rpb25zW3JlbGF0aXZlU3BsaXRbMF1dKSB7XG5cdFx0XHRcdGNvbnN0IGFjdGlvbiA9IGFjdGlvbnNbcmVsYXRpdmVTcGxpdFswXV07XG5cdFx0XHRcdGlmIChyZWxhdGl2ZVNwbGl0WzFdICYmIGFjdGlvbi5wYXJhbWV0ZXJzKSB7XG5cdFx0XHRcdFx0Y29uc3QgcGFyYW1ldGVyTmFtZSA9IHJlbGF0aXZlU3BsaXRbMV07XG5cdFx0XHRcdFx0cmV0dXJuIGFjdGlvbi5wYXJhbWV0ZXJzLmZpbmQoKHBhcmFtZXRlcikgPT4ge1xuXHRcdFx0XHRcdFx0cmV0dXJuIHBhcmFtZXRlci5mdWxseVF1YWxpZmllZE5hbWUuZW5kc1dpdGgoYC8ke3BhcmFtZXRlck5hbWV9YCk7XG5cdFx0XHRcdFx0fSk7XG5cdFx0XHRcdH0gZWxzZSBpZiAocmVsYXRpdmVQYXRoLmxlbmd0aCA9PT0gMSkge1xuXHRcdFx0XHRcdHJldHVybiBhY3Rpb247XG5cdFx0XHRcdH1cblx0XHRcdH1cblx0XHR9XG5cdFx0cmV0dXJuIG9UYXJnZXQ7XG5cdH0gZWxzZSB7XG5cdFx0aWYgKGJJbmNsdWRlVmlzaXRlZE9iamVjdHMpIHtcblx0XHRcdHJldHVybiB7XG5cdFx0XHRcdHRhcmdldDogdGFyZ2V0RW50aXR5U2V0LFxuXHRcdFx0XHR2aXNpdGVkT2JqZWN0czogbG9jYWxPYmplY3RzXG5cdFx0XHR9O1xuXHRcdH1cblx0XHRyZXR1cm4gdGFyZ2V0RW50aXR5U2V0O1xuXHR9XG59XG5cbmV4cG9ydCB0eXBlIFJlc29sdmVkVGFyZ2V0ID0ge1xuXHR0YXJnZXQ/OiBTZXJ2aWNlT2JqZWN0O1xuXHR2aXNpdGVkT2JqZWN0czogKFNlcnZpY2VPYmplY3QgfCBTaW5nbGV0b24pW107XG59O1xuXG5leHBvcnQgZnVuY3Rpb24gZ2V0SW52b2x2ZWREYXRhTW9kZWxPYmplY3RzKG9NZXRhTW9kZWxDb250ZXh0OiBDb250ZXh0LCBvRW50aXR5U2V0TWV0YU1vZGVsQ29udGV4dD86IENvbnRleHQpOiBEYXRhTW9kZWxPYmplY3RQYXRoIHtcblx0Y29uc3Qgb0NvbnZlcnRlZE1ldGFkYXRhID0gY29udmVydFR5cGVzKG9NZXRhTW9kZWxDb250ZXh0LmdldE1vZGVsKCkgYXMgT0RhdGFNZXRhTW9kZWwpO1xuXHRjb25zdCBtZXRhTW9kZWxDb250ZXh0ID0gY29udmVydE1ldGFNb2RlbENvbnRleHQob01ldGFNb2RlbENvbnRleHQsIHRydWUpO1xuXHRsZXQgdGFyZ2V0RW50aXR5U2V0TG9jYXRpb247XG5cdGlmIChvRW50aXR5U2V0TWV0YU1vZGVsQ29udGV4dCAmJiBvRW50aXR5U2V0TWV0YU1vZGVsQ29udGV4dC5nZXRQYXRoKCkgIT09IFwiL1wiKSB7XG5cdFx0dGFyZ2V0RW50aXR5U2V0TG9jYXRpb24gPSBnZXRJbnZvbHZlZERhdGFNb2RlbE9iamVjdHMob0VudGl0eVNldE1ldGFNb2RlbENvbnRleHQpO1xuXHR9XG5cdHJldHVybiBnZXRJbnZvbHZlZERhdGFNb2RlbE9iamVjdEZyb21QYXRoKG1ldGFNb2RlbENvbnRleHQsIG9Db252ZXJ0ZWRNZXRhZGF0YSwgdGFyZ2V0RW50aXR5U2V0TG9jYXRpb24pO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gZ2V0SW52b2x2ZWREYXRhTW9kZWxPYmplY3RGcm9tUGF0aChcblx0bWV0YU1vZGVsQ29udGV4dDogUmVzb2x2ZWRUYXJnZXQsXG5cdGNvbnZlcnRlZFR5cGVzOiBDb252ZXJ0ZWRNZXRhZGF0YSxcblx0dGFyZ2V0RW50aXR5U2V0TG9jYXRpb24/OiBEYXRhTW9kZWxPYmplY3RQYXRoLFxuXHRvbmx5U2VydmljZU9iamVjdHM/OiBib29sZWFuXG4pOiBEYXRhTW9kZWxPYmplY3RQYXRoIHtcblx0Y29uc3QgZGF0YU1vZGVsT2JqZWN0cyA9IG1ldGFNb2RlbENvbnRleHQudmlzaXRlZE9iamVjdHMuZmlsdGVyKFxuXHRcdCh2aXNpdGVkT2JqZWN0OiBhbnkpID0+XG5cdFx0XHR2aXNpdGVkT2JqZWN0Py5oYXNPd25Qcm9wZXJ0eShcIl90eXBlXCIpICYmIHZpc2l0ZWRPYmplY3QuX3R5cGUgIT09IFwiRW50aXR5VHlwZVwiICYmIHZpc2l0ZWRPYmplY3QuX3R5cGUgIT09IFwiRW50aXR5Q29udGFpbmVyXCJcblx0KTtcblx0aWYgKFxuXHRcdG1ldGFNb2RlbENvbnRleHQudGFyZ2V0Py5oYXNPd25Qcm9wZXJ0eShcIl90eXBlXCIpICYmXG5cdFx0bWV0YU1vZGVsQ29udGV4dC50YXJnZXQuX3R5cGUgIT09IFwiRW50aXR5VHlwZVwiICYmXG5cdFx0ZGF0YU1vZGVsT2JqZWN0c1tkYXRhTW9kZWxPYmplY3RzLmxlbmd0aCAtIDFdICE9PSBtZXRhTW9kZWxDb250ZXh0LnRhcmdldCAmJlxuXHRcdCFvbmx5U2VydmljZU9iamVjdHNcblx0KSB7XG5cdFx0ZGF0YU1vZGVsT2JqZWN0cy5wdXNoKG1ldGFNb2RlbENvbnRleHQudGFyZ2V0KTtcblx0fVxuXG5cdGNvbnN0IG5hdmlnYXRpb25Qcm9wZXJ0aWVzOiBOYXZpZ2F0aW9uUHJvcGVydHlbXSA9IFtdO1xuXHRjb25zdCByb290RW50aXR5U2V0OiBFbnRpdHlTZXQgPSBkYXRhTW9kZWxPYmplY3RzWzBdIGFzIEVudGl0eVNldDtcblxuXHRsZXQgY3VycmVudEVudGl0eVNldDogRW50aXR5U2V0IHwgU2luZ2xldG9uIHwgdW5kZWZpbmVkID0gcm9vdEVudGl0eVNldDtcblx0bGV0IGN1cnJlbnRFbnRpdHlUeXBlOiBFbnRpdHlUeXBlID0gcm9vdEVudGl0eVNldC5lbnRpdHlUeXBlO1xuXHRsZXQgY3VycmVudE9iamVjdDogU2VydmljZU9iamVjdCB8IHVuZGVmaW5lZDtcblx0bGV0IG5hdmlnYXRlZFBhdGggPSBbXTtcblxuXHRmb3IgKGxldCBpID0gMTsgaSA8IGRhdGFNb2RlbE9iamVjdHMubGVuZ3RoOyBpKyspIHtcblx0XHRjdXJyZW50T2JqZWN0ID0gZGF0YU1vZGVsT2JqZWN0c1tpXTtcblxuXHRcdGlmIChjdXJyZW50T2JqZWN0Ll90eXBlID09PSBcIk5hdmlnYXRpb25Qcm9wZXJ0eVwiKSB7XG5cdFx0XHRuYXZpZ2F0ZWRQYXRoLnB1c2goY3VycmVudE9iamVjdC5uYW1lKTtcblx0XHRcdG5hdmlnYXRpb25Qcm9wZXJ0aWVzLnB1c2goY3VycmVudE9iamVjdCk7XG5cdFx0XHRjdXJyZW50RW50aXR5VHlwZSA9IGN1cnJlbnRPYmplY3QudGFyZ2V0VHlwZTtcblx0XHRcdGNvbnN0IGJvdW5kRW50aXR5U2V0OiBFbnRpdHlTZXQgfCBTaW5nbGV0b24gfCB1bmRlZmluZWQgPSBjdXJyZW50RW50aXR5U2V0Py5uYXZpZ2F0aW9uUHJvcGVydHlCaW5kaW5nW25hdmlnYXRlZFBhdGguam9pbihcIi9cIildO1xuXHRcdFx0aWYgKGJvdW5kRW50aXR5U2V0KSB7XG5cdFx0XHRcdGN1cnJlbnRFbnRpdHlTZXQgPSBib3VuZEVudGl0eVNldDtcblx0XHRcdFx0bmF2aWdhdGVkUGF0aCA9IFtdO1xuXHRcdFx0fVxuXHRcdH1cblx0XHRpZiAoY3VycmVudE9iamVjdC5fdHlwZSA9PT0gXCJFbnRpdHlTZXRcIiB8fCBjdXJyZW50T2JqZWN0Ll90eXBlID09PSBcIlNpbmdsZXRvblwiKSB7XG5cdFx0XHRjdXJyZW50RW50aXR5U2V0ID0gY3VycmVudE9iamVjdDtcblx0XHRcdGN1cnJlbnRFbnRpdHlUeXBlID0gY3VycmVudEVudGl0eVNldC5lbnRpdHlUeXBlO1xuXHRcdH1cblx0fVxuXG5cdGlmIChuYXZpZ2F0ZWRQYXRoLmxlbmd0aCA+IDApIHtcblx0XHQvLyBQYXRoIHdpdGhvdXQgTmF2aWdhdGlvblByb3BlcnR5QmluZGluZyAtLT4gbm8gdGFyZ2V0IGVudGl0eSBzZXRcblx0XHRjdXJyZW50RW50aXR5U2V0ID0gdW5kZWZpbmVkO1xuXHR9XG5cblx0aWYgKHRhcmdldEVudGl0eVNldExvY2F0aW9uICYmIHRhcmdldEVudGl0eVNldExvY2F0aW9uLnN0YXJ0aW5nRW50aXR5U2V0ICE9PSByb290RW50aXR5U2V0KSB7XG5cdFx0Ly8gSW4gY2FzZSB0aGUgZW50aXR5c2V0IGlzIG5vdCBzdGFydGluZyBmcm9tIHRoZSBzYW1lIGxvY2F0aW9uIGl0IG1heSBtZWFuIHRoYXQgd2UgYXJlIGRvaW5nIHRvbyBtdWNoIHdvcmsgZWFybGllciBmb3Igc29tZSByZWFzb25cblx0XHQvLyBBcyBzdWNoIHdlIG5lZWQgdG8gcmVkZWZpbmUgdGhlIGNvbnRleHQgc291cmNlIGZvciB0aGUgdGFyZ2V0RW50aXR5U2V0TG9jYXRpb25cblx0XHRjb25zdCBzdGFydGluZ0luZGV4ID0gZGF0YU1vZGVsT2JqZWN0cy5pbmRleE9mKHRhcmdldEVudGl0eVNldExvY2F0aW9uLnN0YXJ0aW5nRW50aXR5U2V0KTtcblx0XHRpZiAoc3RhcnRpbmdJbmRleCAhPT0gLTEpIHtcblx0XHRcdC8vIElmIGl0J3Mgbm90IGZvdW5kIEkgZG9uJ3Qga25vdyB3aGF0IHdlIGNhbiBkbyAocHJvYmFibHkgbm90aGluZylcblx0XHRcdGNvbnN0IHJlcXVpcmVkRGF0YU1vZGVsT2JqZWN0cyA9IGRhdGFNb2RlbE9iamVjdHMuc2xpY2UoMCwgc3RhcnRpbmdJbmRleCk7XG5cdFx0XHR0YXJnZXRFbnRpdHlTZXRMb2NhdGlvbi5zdGFydGluZ0VudGl0eVNldCA9IHJvb3RFbnRpdHlTZXQ7XG5cdFx0XHR0YXJnZXRFbnRpdHlTZXRMb2NhdGlvbi5uYXZpZ2F0aW9uUHJvcGVydGllcyA9IHJlcXVpcmVkRGF0YU1vZGVsT2JqZWN0c1xuXHRcdFx0XHQuZmlsdGVyKChvYmplY3Q6IGFueSkgPT4gb2JqZWN0Ll90eXBlID09PSBcIk5hdmlnYXRpb25Qcm9wZXJ0eVwiKVxuXHRcdFx0XHQuY29uY2F0KHRhcmdldEVudGl0eVNldExvY2F0aW9uLm5hdmlnYXRpb25Qcm9wZXJ0aWVzKSBhcyBOYXZpZ2F0aW9uUHJvcGVydHlbXTtcblx0XHR9XG5cdH1cblx0Y29uc3Qgb3V0RGF0YU1vZGVsUGF0aCA9IHtcblx0XHRzdGFydGluZ0VudGl0eVNldDogcm9vdEVudGl0eVNldCxcblx0XHR0YXJnZXRFbnRpdHlTZXQ6IGN1cnJlbnRFbnRpdHlTZXQsXG5cdFx0dGFyZ2V0RW50aXR5VHlwZTogY3VycmVudEVudGl0eVR5cGUsXG5cdFx0dGFyZ2V0T2JqZWN0OiBtZXRhTW9kZWxDb250ZXh0LnRhcmdldCxcblx0XHRuYXZpZ2F0aW9uUHJvcGVydGllcyxcblx0XHRjb250ZXh0TG9jYXRpb246IHRhcmdldEVudGl0eVNldExvY2F0aW9uLFxuXHRcdGNvbnZlcnRlZFR5cGVzOiBjb252ZXJ0ZWRUeXBlc1xuXHR9O1xuXHRpZiAoIW91dERhdGFNb2RlbFBhdGgudGFyZ2V0T2JqZWN0Py5oYXNPd25Qcm9wZXJ0eShcIl90eXBlXCIpICYmIG9ubHlTZXJ2aWNlT2JqZWN0cykge1xuXHRcdG91dERhdGFNb2RlbFBhdGgudGFyZ2V0T2JqZWN0ID0gY3VycmVudE9iamVjdDtcblx0fVxuXHRpZiAoIW91dERhdGFNb2RlbFBhdGguY29udGV4dExvY2F0aW9uKSB7XG5cdFx0b3V0RGF0YU1vZGVsUGF0aC5jb250ZXh0TG9jYXRpb24gPSBvdXREYXRhTW9kZWxQYXRoO1xuXHR9XG5cdHJldHVybiBvdXREYXRhTW9kZWxQYXRoO1xufVxuIl0sIm1hcHBpbmdzIjoiO0FBQUE7QUFBQTtBQUFBOzs7Ozs7RUFrQ0EsTUFBTUEsZ0JBQXFCLEdBQUc7SUFDN0IsMkJBQTJCLEVBQUUsY0FBYztJQUMzQyxtQkFBbUIsRUFBRSxNQUFNO0lBQzNCLHVCQUF1QixFQUFFLFVBQVU7SUFDbkMsZ0NBQWdDLEVBQUUsUUFBUTtJQUMxQyw0QkFBNEIsRUFBRSxJQUFJO0lBQ2xDLGlDQUFpQyxFQUFFLFNBQVM7SUFDNUMsbUNBQW1DLEVBQUUsV0FBVztJQUNoRCxzQ0FBc0MsRUFBRSxjQUFjO0lBQ3RELHVDQUF1QyxFQUFFO0VBQzFDLENBQUM7RUFVTSxNQUFNQyw4QkFBOEIsR0FBRztJQUM3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