@sapui5/sap.fe.core 1.112.0 → 1.113.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (325) hide show
  1. package/package.json +1 -1
  2. package/src/sap/fe/core/.library +1 -1
  3. package/src/sap/fe/core/ActionRuntime-dbg.js +4 -3
  4. package/src/sap/fe/core/ActionRuntime.js +1 -1
  5. package/src/sap/fe/core/ActionRuntime.js.map +1 -1
  6. package/src/sap/fe/core/ActionRuntime.ts +2 -1
  7. package/src/sap/fe/core/AppComponent-dbg.js +9 -5
  8. package/src/sap/fe/core/AppComponent.js +1 -1
  9. package/src/sap/fe/core/AppComponent.js.map +1 -1
  10. package/src/sap/fe/core/AppComponent.ts +8 -6
  11. package/src/sap/fe/core/CommonUtils-dbg.js +55 -173
  12. package/src/sap/fe/core/CommonUtils.js +1 -1
  13. package/src/sap/fe/core/CommonUtils.js.map +1 -1
  14. package/src/sap/fe/core/CommonUtils.ts +64 -208
  15. package/src/sap/fe/core/ExtensionAPI-dbg.js +3 -1
  16. package/src/sap/fe/core/ExtensionAPI.js.map +1 -1
  17. package/src/sap/fe/core/ExtensionAPI.ts +2 -0
  18. package/src/sap/fe/core/buildingBlocks/BuildingBlockBase-dbg.js +2 -1
  19. package/src/sap/fe/core/buildingBlocks/BuildingBlockBase.js +1 -1
  20. package/src/sap/fe/core/buildingBlocks/BuildingBlockBase.js.map +1 -1
  21. package/src/sap/fe/core/buildingBlocks/BuildingBlockBase.ts +1 -0
  22. package/src/sap/fe/core/buildingBlocks/BuildingBlockSupport-dbg.js +2 -2
  23. package/src/sap/fe/core/buildingBlocks/BuildingBlockSupport.js +1 -1
  24. package/src/sap/fe/core/buildingBlocks/BuildingBlockSupport.js.map +1 -1
  25. package/src/sap/fe/core/buildingBlocks/BuildingBlockSupport.ts +13 -18
  26. package/src/sap/fe/core/buildingBlocks/BuildingBlockTemplateProcessor-dbg.js +25 -17
  27. package/src/sap/fe/core/buildingBlocks/BuildingBlockTemplateProcessor.js +4 -4
  28. package/src/sap/fe/core/buildingBlocks/BuildingBlockTemplateProcessor.js.map +1 -1
  29. package/src/sap/fe/core/buildingBlocks/BuildingBlockTemplateProcessor.ts +34 -22
  30. package/src/sap/fe/core/buildingBlocks/RuntimeBuildingBlock-dbg.js +2 -2
  31. package/src/sap/fe/core/buildingBlocks/RuntimeBuildingBlock.js +1 -1
  32. package/src/sap/fe/core/buildingBlocks/RuntimeBuildingBlock.js.map +1 -1
  33. package/src/sap/fe/core/buildingBlocks/RuntimeBuildingBlock.ts +1 -1
  34. package/src/sap/fe/core/buildingBlocks/RuntimeBuildingBlockFragment-dbg.js +2 -2
  35. package/src/sap/fe/core/buildingBlocks/RuntimeBuildingBlockFragment.js +1 -1
  36. package/src/sap/fe/core/buildingBlocks/RuntimeBuildingBlockFragment.js.map +1 -1
  37. package/src/sap/fe/core/buildingBlocks/RuntimeBuildingBlockFragment.ts +3 -1
  38. package/src/sap/fe/core/controllerextensions/EditFlow-dbg.js +69 -34
  39. package/src/sap/fe/core/controllerextensions/EditFlow.js +1 -1
  40. package/src/sap/fe/core/controllerextensions/EditFlow.js.map +1 -1
  41. package/src/sap/fe/core/controllerextensions/EditFlow.ts +75 -42
  42. package/src/sap/fe/core/controllerextensions/InternalIntentBasedNavigation-dbg.js +25 -65
  43. package/src/sap/fe/core/controllerextensions/InternalIntentBasedNavigation.js +1 -1
  44. package/src/sap/fe/core/controllerextensions/InternalIntentBasedNavigation.js.map +1 -1
  45. package/src/sap/fe/core/controllerextensions/InternalIntentBasedNavigation.ts +25 -69
  46. package/src/sap/fe/core/controllerextensions/PageReady-dbg.js +3 -5
  47. package/src/sap/fe/core/controllerextensions/PageReady.js +1 -1
  48. package/src/sap/fe/core/controllerextensions/PageReady.js.map +1 -1
  49. package/src/sap/fe/core/controllerextensions/PageReady.ts +2 -4
  50. package/src/sap/fe/core/controllerextensions/collaboration/Manage-dbg.js +4 -4
  51. package/src/sap/fe/core/controllerextensions/collaboration/Manage.js +1 -1
  52. package/src/sap/fe/core/controllerextensions/collaboration/Manage.js.map +1 -1
  53. package/src/sap/fe/core/controllerextensions/collaboration/Manage.ts +2 -2
  54. package/src/sap/fe/core/controllerextensions/editFlow/NotApplicableContextDialog-dbg.js +103 -0
  55. package/src/sap/fe/core/controllerextensions/editFlow/NotApplicableContextDialog.js +6 -0
  56. package/src/sap/fe/core/controllerextensions/editFlow/NotApplicableContextDialog.js.map +1 -0
  57. package/src/sap/fe/core/controllerextensions/editFlow/NotApplicableContextDialog.tsx +124 -0
  58. package/src/sap/fe/core/controllerextensions/editFlow/TransactionHelper-dbg.js +34 -119
  59. package/src/sap/fe/core/controllerextensions/editFlow/TransactionHelper.js +1 -1
  60. package/src/sap/fe/core/controllerextensions/editFlow/TransactionHelper.js.map +1 -1
  61. package/src/sap/fe/core/controllerextensions/editFlow/TransactionHelper.ts +33 -118
  62. package/src/sap/fe/core/controllerextensions/editFlow/draft-dbg.js +6 -1
  63. package/src/sap/fe/core/controllerextensions/editFlow/draft.js +1 -1
  64. package/src/sap/fe/core/controllerextensions/editFlow/draft.js.map +1 -1
  65. package/src/sap/fe/core/controllerextensions/editFlow/draft.ts +9 -0
  66. package/src/sap/fe/core/controllerextensions/editFlow/operations/_internal-dbg.js +9 -4
  67. package/src/sap/fe/core/controllerextensions/editFlow/operations/_internal.js +1 -1
  68. package/src/sap/fe/core/controllerextensions/editFlow/operations/_internal.js.map +1 -1
  69. package/src/sap/fe/core/controllerextensions/editFlow/operations/_internal.ts +12 -3
  70. package/src/sap/fe/core/controllerextensions/editFlow/operations/facade-dbg.js +6 -3
  71. package/src/sap/fe/core/controllerextensions/editFlow/operations/facade.js +1 -1
  72. package/src/sap/fe/core/controllerextensions/editFlow/operations/facade.js.map +1 -1
  73. package/src/sap/fe/core/controllerextensions/editFlow/operations/facade.ts +16 -8
  74. package/src/sap/fe/core/controllerextensions/editFlow/sticky-dbg.js +1 -8
  75. package/src/sap/fe/core/controllerextensions/editFlow/sticky.js +1 -1
  76. package/src/sap/fe/core/controllerextensions/editFlow/sticky.js.map +1 -1
  77. package/src/sap/fe/core/controllerextensions/editFlow/sticky.ts +0 -9
  78. package/src/sap/fe/core/controllerextensions/messageHandler/messageHandling-dbg.js +11 -7
  79. package/src/sap/fe/core/controllerextensions/messageHandler/messageHandling.js +1 -1
  80. package/src/sap/fe/core/controllerextensions/messageHandler/messageHandling.js.map +1 -1
  81. package/src/sap/fe/core/controllerextensions/messageHandler/messageHandling.ts +11 -14
  82. package/src/sap/fe/core/controllerextensions/routing/RouterProxy-dbg.js +67 -1
  83. package/src/sap/fe/core/controllerextensions/routing/RouterProxy.js +1 -1
  84. package/src/sap/fe/core/controllerextensions/routing/RouterProxy.js.map +1 -1
  85. package/src/sap/fe/core/controllerextensions/routing/RouterProxy.ts +68 -0
  86. package/src/sap/fe/core/converters/ConverterContext-dbg.js +3 -5
  87. package/src/sap/fe/core/converters/ConverterContext.js +1 -1
  88. package/src/sap/fe/core/converters/ConverterContext.js.map +1 -1
  89. package/src/sap/fe/core/converters/ConverterContext.ts +2 -5
  90. package/src/sap/fe/core/converters/ManifestSettings-dbg.js +1 -1
  91. package/src/sap/fe/core/converters/ManifestSettings.ts +1 -1
  92. package/src/sap/fe/core/converters/ManifestWrapper-dbg.js +5 -3
  93. package/src/sap/fe/core/converters/ManifestWrapper.js +1 -1
  94. package/src/sap/fe/core/converters/ManifestWrapper.js.map +1 -1
  95. package/src/sap/fe/core/converters/ManifestWrapper.ts +7 -1
  96. package/src/sap/fe/core/converters/MetaModelConverter-dbg.js +19 -26
  97. package/src/sap/fe/core/converters/MetaModelConverter.js +1 -1
  98. package/src/sap/fe/core/converters/MetaModelConverter.js.map +1 -1
  99. package/src/sap/fe/core/converters/MetaModelConverter.ts +23 -28
  100. package/src/sap/fe/core/converters/annotations/DataField-dbg.js +18 -6
  101. package/src/sap/fe/core/converters/annotations/DataField.js +1 -1
  102. package/src/sap/fe/core/converters/annotations/DataField.js.map +1 -1
  103. package/src/sap/fe/core/converters/annotations/DataField.ts +15 -5
  104. package/src/sap/fe/core/converters/common/AnnotationConverter-dbg.js +35 -17
  105. package/src/sap/fe/core/converters/common/AnnotationConverter.js +1 -1
  106. package/src/sap/fe/core/converters/common/AnnotationConverter.js.map +1 -1
  107. package/src/sap/fe/core/converters/controls/Common/Action-dbg.js +6 -12
  108. package/src/sap/fe/core/converters/controls/Common/Action.js +1 -1
  109. package/src/sap/fe/core/converters/controls/Common/Action.js.map +1 -1
  110. package/src/sap/fe/core/converters/controls/Common/Action.ts +9 -14
  111. package/src/sap/fe/core/converters/controls/Common/Form-dbg.js +7 -6
  112. package/src/sap/fe/core/converters/controls/Common/Form.js +1 -1
  113. package/src/sap/fe/core/converters/controls/Common/Form.js.map +1 -1
  114. package/src/sap/fe/core/converters/controls/Common/Form.ts +5 -11
  115. package/src/sap/fe/core/converters/controls/Common/KPI-dbg.js +5 -5
  116. package/src/sap/fe/core/converters/controls/Common/KPI.js +1 -1
  117. package/src/sap/fe/core/converters/controls/Common/KPI.js.map +1 -1
  118. package/src/sap/fe/core/converters/controls/Common/KPI.ts +3 -4
  119. package/src/sap/fe/core/converters/controls/Common/Table-dbg.js +54 -32
  120. package/src/sap/fe/core/converters/controls/Common/Table.js +1 -1
  121. package/src/sap/fe/core/converters/controls/Common/Table.js.map +1 -1
  122. package/src/sap/fe/core/converters/controls/Common/Table.ts +69 -49
  123. package/src/sap/fe/core/converters/controls/Common/table/StandardActions-dbg.js +21 -14
  124. package/src/sap/fe/core/converters/controls/Common/table/StandardActions.js +1 -1
  125. package/src/sap/fe/core/converters/controls/Common/table/StandardActions.js.map +1 -1
  126. package/src/sap/fe/core/converters/controls/Common/table/StandardActions.ts +18 -15
  127. package/src/sap/fe/core/converters/controls/ListReport/FilterBar-dbg.js +92 -33
  128. package/src/sap/fe/core/converters/controls/ListReport/FilterBar.js +1 -1
  129. package/src/sap/fe/core/converters/controls/ListReport/FilterBar.js.map +1 -1
  130. package/src/sap/fe/core/converters/controls/ListReport/FilterBar.ts +93 -24
  131. package/src/sap/fe/core/converters/controls/ListReport/VisualFilters-dbg.js +8 -6
  132. package/src/sap/fe/core/converters/controls/ListReport/VisualFilters.js +1 -1
  133. package/src/sap/fe/core/converters/controls/ListReport/VisualFilters.js.map +1 -1
  134. package/src/sap/fe/core/converters/controls/ListReport/VisualFilters.ts +7 -4
  135. package/src/sap/fe/core/converters/controls/ObjectPage/SubSection-dbg.js +27 -18
  136. package/src/sap/fe/core/converters/controls/ObjectPage/SubSection.js +1 -1
  137. package/src/sap/fe/core/converters/controls/ObjectPage/SubSection.js.map +1 -1
  138. package/src/sap/fe/core/converters/controls/ObjectPage/SubSection.ts +36 -23
  139. package/src/sap/fe/core/converters/helpers/Aggregation-dbg.js +10 -14
  140. package/src/sap/fe/core/converters/helpers/Aggregation.js +1 -1
  141. package/src/sap/fe/core/converters/helpers/Aggregation.js.map +1 -1
  142. package/src/sap/fe/core/converters/helpers/Aggregation.ts +8 -11
  143. package/src/sap/fe/core/converters/helpers/BindingHelper-dbg.js +8 -6
  144. package/src/sap/fe/core/converters/helpers/BindingHelper.js +1 -1
  145. package/src/sap/fe/core/converters/helpers/BindingHelper.js.map +1 -1
  146. package/src/sap/fe/core/converters/helpers/BindingHelper.ts +8 -6
  147. package/src/sap/fe/core/converters/helpers/IssueManager-dbg.js +3 -2
  148. package/src/sap/fe/core/converters/helpers/IssueManager.js +1 -1
  149. package/src/sap/fe/core/converters/helpers/IssueManager.js.map +1 -1
  150. package/src/sap/fe/core/converters/helpers/IssueManager.ts +2 -1
  151. package/src/sap/fe/core/converters/objectPage/HeaderAndFooterAction-dbg.js +17 -16
  152. package/src/sap/fe/core/converters/objectPage/HeaderAndFooterAction.js +1 -1
  153. package/src/sap/fe/core/converters/objectPage/HeaderAndFooterAction.js.map +1 -1
  154. package/src/sap/fe/core/converters/objectPage/HeaderAndFooterAction.ts +11 -11
  155. package/src/sap/fe/core/converters/templates/ListReportConverter-dbg.js +8 -3
  156. package/src/sap/fe/core/converters/templates/ListReportConverter.js +1 -1
  157. package/src/sap/fe/core/converters/templates/ListReportConverter.js.map +1 -1
  158. package/src/sap/fe/core/converters/templates/ListReportConverter.ts +7 -2
  159. package/src/sap/fe/core/converters/templates/ObjectPageConverter-dbg.js +2 -2
  160. package/src/sap/fe/core/converters/templates/ObjectPageConverter.js +1 -1
  161. package/src/sap/fe/core/converters/templates/ObjectPageConverter.js.map +1 -1
  162. package/src/sap/fe/core/converters/templates/ObjectPageConverter.ts +2 -2
  163. package/src/sap/fe/core/formatters/TableFormatter-dbg.js +2 -6
  164. package/src/sap/fe/core/formatters/TableFormatter.js +1 -1
  165. package/src/sap/fe/core/formatters/TableFormatter.js.map +1 -1
  166. package/src/sap/fe/core/formatters/TableFormatter.ts +1 -5
  167. package/src/sap/fe/core/formatters/ValueFormatter-dbg.js +5 -1
  168. package/src/sap/fe/core/formatters/ValueFormatter.js +1 -1
  169. package/src/sap/fe/core/formatters/ValueFormatter.js.map +1 -1
  170. package/src/sap/fe/core/formatters/ValueFormatter.ts +5 -0
  171. package/src/sap/fe/core/fpm/manifest.json +1 -1
  172. package/src/sap/fe/core/helpers/BindingToolkit-dbg.js +2 -1
  173. package/src/sap/fe/core/helpers/BindingToolkit.js +1 -1
  174. package/src/sap/fe/core/helpers/BindingToolkit.js.map +1 -1
  175. package/src/sap/fe/core/helpers/BindingToolkit.ts +1 -1
  176. package/src/sap/fe/core/helpers/MassEditHelper-dbg.js +5 -4
  177. package/src/sap/fe/core/helpers/MassEditHelper.js +1 -1
  178. package/src/sap/fe/core/helpers/MassEditHelper.js.map +1 -1
  179. package/src/sap/fe/core/helpers/MassEditHelper.ts +4 -5
  180. package/src/sap/fe/core/helpers/MessageStrip-dbg.js +6 -5
  181. package/src/sap/fe/core/helpers/MessageStrip.js +1 -1
  182. package/src/sap/fe/core/helpers/MessageStrip.js.map +1 -1
  183. package/src/sap/fe/core/helpers/MessageStrip.ts +4 -4
  184. package/src/sap/fe/core/helpers/MetaModelFunction-dbg.js +167 -4
  185. package/src/sap/fe/core/helpers/MetaModelFunction.js +1 -1
  186. package/src/sap/fe/core/helpers/MetaModelFunction.js.map +1 -1
  187. package/src/sap/fe/core/helpers/MetaModelFunction.ts +205 -3
  188. package/src/sap/fe/core/helpers/ModelHelper-dbg.js +37 -73
  189. package/src/sap/fe/core/helpers/ModelHelper.js +1 -1
  190. package/src/sap/fe/core/helpers/ModelHelper.js.map +1 -1
  191. package/src/sap/fe/core/helpers/ModelHelper.ts +41 -68
  192. package/src/sap/fe/core/helpers/ResourceModelHelper-dbg.js +15 -2
  193. package/src/sap/fe/core/helpers/ResourceModelHelper.js +1 -1
  194. package/src/sap/fe/core/helpers/ResourceModelHelper.js.map +1 -1
  195. package/src/sap/fe/core/helpers/ResourceModelHelper.ts +16 -0
  196. package/src/sap/fe/core/helpers/SemanticDateOperators-dbg.js +40 -6
  197. package/src/sap/fe/core/helpers/SemanticDateOperators.js +1 -1
  198. package/src/sap/fe/core/helpers/SemanticDateOperators.js.map +1 -1
  199. package/src/sap/fe/core/helpers/SemanticDateOperators.ts +39 -5
  200. package/src/sap/fe/core/helpers/SizeHelper-dbg.js +53 -0
  201. package/src/sap/fe/core/helpers/SizeHelper.js +6 -0
  202. package/src/sap/fe/core/helpers/SizeHelper.js.map +1 -0
  203. package/src/sap/fe/core/helpers/SizeHelper.ts +51 -0
  204. package/src/sap/fe/core/helpers/StableIdHelper-dbg.js +29 -25
  205. package/src/sap/fe/core/helpers/StableIdHelper.js +1 -1
  206. package/src/sap/fe/core/helpers/StableIdHelper.js.map +1 -1
  207. package/src/sap/fe/core/helpers/StableIdHelper.ts +26 -24
  208. package/src/sap/fe/core/helpers/TypeGuards-dbg.js +147 -1
  209. package/src/sap/fe/core/helpers/TypeGuards.js +1 -1
  210. package/src/sap/fe/core/helpers/TypeGuards.js.map +1 -1
  211. package/src/sap/fe/core/helpers/TypeGuards.ts +151 -1
  212. package/src/sap/fe/core/library-dbg.js +1 -1
  213. package/src/sap/fe/core/library-preload.js +84 -70
  214. package/src/sap/fe/core/library-preload.js.map +1 -1
  215. package/src/sap/fe/core/library.js +1 -1
  216. package/src/sap/fe/core/manifest.json +1 -1
  217. package/src/sap/fe/core/manifestMerger/ChangePageConfiguration-dbg.js +67 -15
  218. package/src/sap/fe/core/manifestMerger/ChangePageConfiguration.js +1 -1
  219. package/src/sap/fe/core/manifestMerger/ChangePageConfiguration.js.map +1 -1
  220. package/src/sap/fe/core/manifestMerger/ChangePageConfiguration.ts +66 -14
  221. package/src/sap/fe/core/messagebundle.properties +2 -0
  222. package/src/sap/fe/core/messagebundle_ar.properties +4 -3
  223. package/src/sap/fe/core/messagebundle_bg.properties +10 -9
  224. package/src/sap/fe/core/messagebundle_ca.properties +1 -0
  225. package/src/sap/fe/core/messagebundle_cs.properties +2 -1
  226. package/src/sap/fe/core/messagebundle_cy.properties +2 -1
  227. package/src/sap/fe/core/messagebundle_da.properties +2 -1
  228. package/src/sap/fe/core/messagebundle_de.properties +11 -10
  229. package/src/sap/fe/core/messagebundle_el.properties +4 -3
  230. package/src/sap/fe/core/messagebundle_en.properties +1 -0
  231. package/src/sap/fe/core/messagebundle_en_GB.properties +2 -1
  232. package/src/sap/fe/core/messagebundle_en_US_saprigi.properties +1 -0
  233. package/src/sap/fe/core/messagebundle_en_US_saptrc.properties +2 -0
  234. package/src/sap/fe/core/messagebundle_es.properties +2 -1
  235. package/src/sap/fe/core/messagebundle_es_MX.properties +2 -1
  236. package/src/sap/fe/core/messagebundle_et.properties +2 -1
  237. package/src/sap/fe/core/messagebundle_fi.properties +2 -1
  238. package/src/sap/fe/core/messagebundle_fr.properties +2 -1
  239. package/src/sap/fe/core/messagebundle_fr_CA.properties +11 -10
  240. package/src/sap/fe/core/messagebundle_hi.properties +11 -10
  241. package/src/sap/fe/core/messagebundle_hr.properties +2 -1
  242. package/src/sap/fe/core/messagebundle_hu.properties +2 -1
  243. package/src/sap/fe/core/messagebundle_id.properties +11 -10
  244. package/src/sap/fe/core/messagebundle_it.properties +2 -1
  245. package/src/sap/fe/core/messagebundle_iw.properties +2 -1
  246. package/src/sap/fe/core/messagebundle_ja.properties +3 -2
  247. package/src/sap/fe/core/messagebundle_kk.properties +2 -1
  248. package/src/sap/fe/core/messagebundle_ko.properties +11 -10
  249. package/src/sap/fe/core/messagebundle_lt.properties +2 -1
  250. package/src/sap/fe/core/messagebundle_lv.properties +11 -10
  251. package/src/sap/fe/core/messagebundle_ms.properties +2 -1
  252. package/src/sap/fe/core/messagebundle_nl.properties +2 -1
  253. package/src/sap/fe/core/messagebundle_no.properties +2 -1
  254. package/src/sap/fe/core/messagebundle_pl.properties +11 -10
  255. package/src/sap/fe/core/messagebundle_pt.properties +2 -1
  256. package/src/sap/fe/core/messagebundle_pt_PT.properties +2 -1
  257. package/src/sap/fe/core/messagebundle_ro.properties +14 -13
  258. package/src/sap/fe/core/messagebundle_ru.properties +11 -10
  259. package/src/sap/fe/core/messagebundle_sh.properties +2 -1
  260. package/src/sap/fe/core/messagebundle_sk.properties +2 -1
  261. package/src/sap/fe/core/messagebundle_sl.properties +2 -1
  262. package/src/sap/fe/core/messagebundle_sv.properties +11 -10
  263. package/src/sap/fe/core/messagebundle_th.properties +2 -1
  264. package/src/sap/fe/core/messagebundle_tr.properties +2 -1
  265. package/src/sap/fe/core/messagebundle_uk.properties +2 -1
  266. package/src/sap/fe/core/messagebundle_vi.properties +2 -1
  267. package/src/sap/fe/core/messagebundle_zh_CN.properties +11 -10
  268. package/src/sap/fe/core/messagebundle_zh_TW.properties +11 -10
  269. package/src/sap/fe/core/rootView/RootViewBaseController-dbg.js +8 -4
  270. package/src/sap/fe/core/rootView/RootViewBaseController.js +1 -1
  271. package/src/sap/fe/core/rootView/RootViewBaseController.js.map +1 -1
  272. package/src/sap/fe/core/rootView/RootViewBaseController.ts +7 -3
  273. package/src/sap/fe/core/services/RoutingServiceFactory-dbg.js +7 -1
  274. package/src/sap/fe/core/services/RoutingServiceFactory.js +1 -1
  275. package/src/sap/fe/core/services/RoutingServiceFactory.js.map +1 -1
  276. package/src/sap/fe/core/services/RoutingServiceFactory.ts +6 -0
  277. package/src/sap/fe/core/services/ShellServicesFactory-dbg.js +7 -1
  278. package/src/sap/fe/core/services/ShellServicesFactory.js +1 -1
  279. package/src/sap/fe/core/services/ShellServicesFactory.js.map +1 -1
  280. package/src/sap/fe/core/services/ShellServicesFactory.ts +10 -0
  281. package/src/sap/fe/core/services/SideEffectsServiceFactory-dbg.js +6 -6
  282. package/src/sap/fe/core/services/SideEffectsServiceFactory.js +1 -1
  283. package/src/sap/fe/core/services/SideEffectsServiceFactory.js.map +1 -1
  284. package/src/sap/fe/core/services/SideEffectsServiceFactory.ts +3 -8
  285. package/src/sap/fe/core/services/TemplatedViewServiceFactory-dbg.js +10 -3
  286. package/src/sap/fe/core/services/TemplatedViewServiceFactory.js +1 -1
  287. package/src/sap/fe/core/services/TemplatedViewServiceFactory.js.map +1 -1
  288. package/src/sap/fe/core/services/TemplatedViewServiceFactory.ts +13 -1
  289. package/src/sap/fe/core/templating/CommonFormatters-dbg.js +4 -3
  290. package/src/sap/fe/core/templating/CommonFormatters.js +1 -1
  291. package/src/sap/fe/core/templating/CommonFormatters.js.map +1 -1
  292. package/src/sap/fe/core/templating/CommonFormatters.ts +2 -2
  293. package/src/sap/fe/core/templating/DataModelPathHelper-dbg.js +19 -18
  294. package/src/sap/fe/core/templating/DataModelPathHelper.js +1 -1
  295. package/src/sap/fe/core/templating/DataModelPathHelper.js.map +1 -1
  296. package/src/sap/fe/core/templating/DataModelPathHelper.ts +24 -18
  297. package/src/sap/fe/core/templating/DisplayModeFormatter-dbg.js +5 -5
  298. package/src/sap/fe/core/templating/DisplayModeFormatter.js +1 -1
  299. package/src/sap/fe/core/templating/DisplayModeFormatter.js.map +1 -1
  300. package/src/sap/fe/core/templating/DisplayModeFormatter.ts +2 -2
  301. package/src/sap/fe/core/templating/EntitySetHelper-dbg.js +19 -28
  302. package/src/sap/fe/core/templating/EntitySetHelper.js +1 -1
  303. package/src/sap/fe/core/templating/EntitySetHelper.js.map +1 -1
  304. package/src/sap/fe/core/templating/EntitySetHelper.ts +14 -24
  305. package/src/sap/fe/core/templating/EntityTypeHelper-dbg.js +48 -0
  306. package/src/sap/fe/core/templating/EntityTypeHelper.js +6 -0
  307. package/src/sap/fe/core/templating/EntityTypeHelper.js.map +1 -0
  308. package/src/sap/fe/core/templating/EntityTypeHelper.ts +37 -0
  309. package/src/sap/fe/core/templating/FilterTemplating-dbg.js +7 -8
  310. package/src/sap/fe/core/templating/FilterTemplating.js +1 -1
  311. package/src/sap/fe/core/templating/FilterTemplating.js.map +1 -1
  312. package/src/sap/fe/core/templating/FilterTemplating.ts +5 -8
  313. package/src/sap/fe/core/templating/PropertyFormatters-dbg.js +1 -6
  314. package/src/sap/fe/core/templating/PropertyFormatters.js +1 -1
  315. package/src/sap/fe/core/templating/PropertyFormatters.js.map +1 -1
  316. package/src/sap/fe/core/templating/PropertyFormatters.ts +0 -5
  317. package/src/sap/fe/core/templating/PropertyHelper-dbg.js +13 -46
  318. package/src/sap/fe/core/templating/PropertyHelper.js +1 -1
  319. package/src/sap/fe/core/templating/PropertyHelper.js.map +1 -1
  320. package/src/sap/fe/core/templating/PropertyHelper.ts +14 -43
  321. package/src/sap/fe/core/templating/UIFormatters-dbg.js +32 -26
  322. package/src/sap/fe/core/templating/UIFormatters.js +1 -1
  323. package/src/sap/fe/core/templating/UIFormatters.js.map +1 -1
  324. package/src/sap/fe/core/templating/UIFormatters.ts +43 -32
  325. package/src/sap/fe/core/controls/ActionPartial.fragment.xml +0 -91
@@ -2,7 +2,7 @@
2
2
  * SAP UI development toolkit for HTML5 (SAPUI5)
3
3
  * (c) Copyright 2009-2023 SAP SE. All rights reserved
4
4
  */
5
- sap.ui.define(["sap/base/Log", "sap/fe/core/converters/controls/Common/Action", "sap/fe/core/converters/controls/ObjectPage/HeaderFacet", "sap/fe/core/converters/helpers/IssueManager", "sap/fe/core/converters/helpers/Key", "sap/fe/core/helpers/BindingToolkit", "sap/fe/core/templating/PropertyHelper", "../../annotations/DataField", "../../helpers/ConfigurableObject", "../../helpers/ID", "../../ManifestSettings", "../../objectPage/FormMenuActions", "../Common/DataVisualization", "../Common/Form"], function (Log, Action, HeaderFacet, IssueManager, Key, BindingToolkit, PropertyHelper, DataField, ConfigurableObject, ID, ManifestSettings, FormMenuActions, DataVisualization, Form) {
5
+ sap.ui.define(["sap/base/Log", "sap/fe/core/converters/controls/Common/Action", "sap/fe/core/converters/controls/ObjectPage/HeaderFacet", "sap/fe/core/converters/helpers/IssueManager", "sap/fe/core/converters/helpers/Key", "sap/fe/core/helpers/BindingToolkit", "sap/fe/core/helpers/TypeGuards", "../../annotations/DataField", "../../helpers/ConfigurableObject", "../../helpers/ID", "../../ManifestSettings", "../../objectPage/FormMenuActions", "../Common/DataVisualization", "../Common/Form"], function (Log, Action, HeaderFacet, IssueManager, Key, BindingToolkit, TypeGuards, DataField, ConfigurableObject, ID, ManifestSettings, FormMenuActions, DataVisualization, Form) {
6
6
  "use strict";
7
7
 
8
8
  var _exports = {};
@@ -21,7 +21,7 @@ sap.ui.define(["sap/base/Log", "sap/fe/core/converters/controls/Common/Action",
21
21
  var OverrideType = ConfigurableObject.OverrideType;
22
22
  var insertCustomElements = ConfigurableObject.insertCustomElements;
23
23
  var isActionWithDialog = DataField.isActionWithDialog;
24
- var isPathExpression = PropertyHelper.isPathExpression;
24
+ var isPathAnnotationExpression = TypeGuards.isPathAnnotationExpression;
25
25
  var resolveBindingString = BindingToolkit.resolveBindingString;
26
26
  var ref = BindingToolkit.ref;
27
27
  var pathInModel = BindingToolkit.pathInModel;
@@ -33,6 +33,7 @@ sap.ui.define(["sap/base/Log", "sap/fe/core/converters/controls/Common/Action",
33
33
  var fn = BindingToolkit.fn;
34
34
  var equal = BindingToolkit.equal;
35
35
  var compileExpression = BindingToolkit.compileExpression;
36
+ var and = BindingToolkit.and;
36
37
  var KeyHelper = Key.KeyHelper;
37
38
  var IssueType = IssueManager.IssueType;
38
39
  var IssueSeverity = IssueManager.IssueSeverity;
@@ -222,12 +223,13 @@ sap.ui.define(["sap/base/Log", "sap/fe/core/converters/controls/Common/Action",
222
223
  * @returns A subsection definition
223
224
  */
224
225
  function createSubSection(facetDefinition, facetsToCreate, converterContext, level, hasSingleContent, isHeaderSection) {
225
- var _facetDefinition$anno, _facetDefinition$anno2, _presentation$visuali, _presentation$visuali2, _presentation$visuali3;
226
+ var _facetDefinition$anno, _facetDefinition$anno2, _presentation$visuali, _presentation$visuali2, _presentation$visuali3, _facetDefinition$anno3, _facetDefinition$anno4, _facetDefinition$anno5;
226
227
  const subSectionID = getSubSectionID(facetDefinition);
227
228
  const oHiddenAnnotation = (_facetDefinition$anno = facetDefinition.annotations) === null || _facetDefinition$anno === void 0 ? void 0 : (_facetDefinition$anno2 = _facetDefinition$anno.UI) === null || _facetDefinition$anno2 === void 0 ? void 0 : _facetDefinition$anno2.Hidden;
228
- const isVisible = compileExpression(not(equal(true, getExpressionFromAnnotation(oHiddenAnnotation))));
229
- const isDynamicExpression = isVisible && typeof isVisible === "string" && isVisible.indexOf("{=") === 0 && !isPathExpression(oHiddenAnnotation);
230
- const isVisibleDynamicExpression = isVisible && isDynamicExpression ? isVisible.substring(isVisible.indexOf("{=") + 2, isVisible.lastIndexOf("}")) : false;
229
+ const isVisibleExpression = not(equal(true, getExpressionFromAnnotation(oHiddenAnnotation)));
230
+ const isVisible = compileExpression(isVisibleExpression);
231
+ const isDynamicExpression = isVisible !== undefined && typeof isVisible === "string" && isVisible.indexOf("{=") === 0 && !isPathAnnotationExpression(oHiddenAnnotation);
232
+ const isVisibleDynamicExpression = isVisible && isDynamicExpression ? isVisible.substring(isVisible.indexOf("{=") + 2, isVisible.lastIndexOf("}")) !== undefined : false;
231
233
  const title = compileExpression(getExpressionFromAnnotation(facetDefinition.Label));
232
234
  const subSection = {
233
235
  id: subSectionID,
@@ -278,7 +280,7 @@ sap.ui.define(["sap/base/Log", "sap/fe/core/converters/controls/Common/Action",
278
280
  for (const {
279
281
  facet
280
282
  } of visualizationFacets) {
281
- visualizationContent.push(createSubSection(facet, [], converterContext, level, facets.length === 1, isHeaderSection));
283
+ visualizationContent.push(createSubSection(facet, [], converterContext, level, true, isHeaderSection));
282
284
  }
283
285
  if (nonVisualizationFacets.length > 0) {
284
286
  // This subsection includes visualizations and other content, so it is a "Mixed" subsection
@@ -335,22 +337,28 @@ sap.ui.define(["sap/base/Log", "sap/fe/core/converters/controls/Common/Action",
335
337
  case "com.sap.vocabularies.UI.v1.Chart":
336
338
  case "com.sap.vocabularies.UI.v1.PresentationVariant":
337
339
  case "com.sap.vocabularies.UI.v1.SelectionPresentationVariant":
338
- if (isHeaderSection == null || !isHeaderSection) {
339
- subSection.class = "sapUxAPObjectPageSubSectionFitContainer";
340
- }
341
340
  const presentation = getDataVisualizationConfiguration(facetDefinition.Target.value, getCondensedTableLayoutCompliance(facetDefinition, facetsToCreate, converterContext), converterContext, undefined, isHeaderSection);
342
341
  const subSectionTitle = subSection.title ? subSection.title : "";
343
342
  const controlTitle = ((_presentation$visuali = presentation.visualizations[0]) === null || _presentation$visuali === void 0 ? void 0 : (_presentation$visuali2 = _presentation$visuali.annotation) === null || _presentation$visuali2 === void 0 ? void 0 : _presentation$visuali2.title) || ((_presentation$visuali3 = presentation.visualizations[0]) === null || _presentation$visuali3 === void 0 ? void 0 : _presentation$visuali3.title);
343
+ const isPartOfPreview = ((_facetDefinition$anno3 = facetDefinition.annotations) === null || _facetDefinition$anno3 === void 0 ? void 0 : (_facetDefinition$anno4 = _facetDefinition$anno3.UI) === null || _facetDefinition$anno4 === void 0 ? void 0 : (_facetDefinition$anno5 = _facetDefinition$anno4.PartOfPreview) === null || _facetDefinition$anno5 === void 0 ? void 0 : _facetDefinition$anno5.valueOf()) !== false;
344
344
  const showTitle = getTitleVisibility(controlTitle ?? "", subSectionTitle, hasSingleContent);
345
- const titleVisibleExpression = isVisible && title !== "undefined" && (title ? isVisible : false);
345
+
346
+ // Either calculate the title visibility statically or dynamically
347
+ // Additionally to checking whether a title exists,
348
+ // we also need to check that the facet title is not the same as the control (i.e. visualization) title;
349
+ // this is done by including "showTitle" in the and expression
350
+ const titleVisible = ifElse(isDynamicExpression, and(isVisibleDynamicExpression, not(equal(title, "undefined")), showTitle), and(isVisible !== undefined, title !== "undefined", title !== undefined, isVisibleExpression, showTitle));
346
351
  const dataVisualizationSubSection = {
347
352
  ...subSection,
348
353
  type: SubSectionType.DataVisualization,
349
354
  level: level,
350
355
  presentation: presentation,
351
- showTitle: showTitle,
352
- titleVisible: isDynamicExpression ? `{= (${isVisibleDynamicExpression}) && ('${title}' !=='undefined') && (${showTitle} ? true : false) }` : titleVisibleExpression
356
+ showTitle: compileExpression(showTitle),
357
+ // This is used on the ObjectPageSubSection
358
+ isPartOfPreview,
359
+ titleVisible: compileExpression(titleVisible) // This is used to hide the actual Title control
353
360
  };
361
+
354
362
  return dataVisualizationSubSection;
355
363
  case "com.sap.vocabularies.UI.v1.FieldGroup":
356
364
  case "com.sap.vocabularies.UI.v1.Identification":
@@ -387,18 +395,19 @@ sap.ui.define(["sap/base/Log", "sap/fe/core/converters/controls/Common/Action",
387
395
  };
388
396
  return unsupportedSubSection;
389
397
  }
398
+
390
399
  /**
391
- * Checks whether to hide or show subsection title
400
+ * Checks whether to hide or show subsection title.
392
401
  *
393
402
  * @param controlTitle
394
- * @param sectionTitle
403
+ * @param subSectionTitle
395
404
  * @param hasSingleContent
396
- * @returns Boolean value or expression for showTitle
405
+ * @returns Boolean value or expression for showTitle
397
406
  */
398
407
  _exports.createSubSection = createSubSection;
399
408
  function getTitleVisibility(controlTitle, subSectionTitle, hasSingleContent) {
400
409
  // visible shall be true if there are multiple content or if the control and subsection title are different
401
- return compileExpression(or(not(hasSingleContent), notEqual(resolveBindingString(controlTitle), resolveBindingString(subSectionTitle))));
410
+ return or(not(hasSingleContent), notEqual(resolveBindingString(controlTitle), resolveBindingString(subSectionTitle)));
402
411
  }
403
412
  _exports.getTitleVisibility = getTitleVisibility;
404
413
  function createFormActionReducer(actions, facetDefinition, converterContext) {
@@ -615,4 +624,4 @@ sap.ui.define(["sap/base/Log", "sap/fe/core/converters/controls/Common/Action",
615
624
  }
616
625
  return _exports;
617
626
  }, false);
618
- //# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJuYW1lcyI6WyJTdWJTZWN0aW9uVHlwZSIsInZpc3VhbGl6YXRpb25UZXJtcyIsImNyZWF0ZVN1YlNlY3Rpb25zIiwiZmFjZXRDb2xsZWN0aW9uIiwiY29udmVydGVyQ29udGV4dCIsImlzSGVhZGVyU2VjdGlvbiIsImZhY2V0c1RvQ3JlYXRlIiwicmVkdWNlIiwiZmFjZXREZWZpbml0aW9uIiwiJFR5cGUiLCJwdXNoIiwiRmFjZXRzIiwiZmluZCIsImZhY2V0VHlwZSIsInNwbGljZSIsImxlbmd0aCIsIm1hcCIsImZhY2V0IiwiY3JlYXRlU3ViU2VjdGlvbiIsImNyZWF0ZUN1c3RvbUhlYWRlckZhY2V0U3ViU2VjdGlvbnMiLCJjdXN0b21IZWFkZXJGYWNldHMiLCJnZXRIZWFkZXJGYWNldHNGcm9tTWFuaWZlc3QiLCJnZXRNYW5pZmVzdFdyYXBwZXIiLCJnZXRIZWFkZXJGYWNldHMiLCJhQ3VzdG9tSGVhZGVyRmFjZXRzIiwiT2JqZWN0Iiwia2V5cyIsImZvckVhY2giLCJrZXkiLCJjdXN0b21IZWFkZXJGYWNldCIsInRlbXBsYXRlRWRpdCIsImNyZWF0ZUN1c3RvbUhlYWRlckZhY2V0U3ViU2VjdGlvbiIsInN1YlNlY3Rpb25JRCIsImdldEN1c3RvbVN1YlNlY3Rpb25JRCIsInN1YlNlY3Rpb24iLCJpZCIsInRpdGxlIiwidHlwZSIsIlhNTEZyYWdtZW50IiwidGVtcGxhdGUiLCJ2aXNpYmxlIiwibGV2ZWwiLCJzaWRlQ29udGVudCIsInVuZGVmaW5lZCIsInN0YXNoZWQiLCJmbGV4U2V0dGluZ3MiLCJhY3Rpb25zIiwib2JqZWN0UGFnZUxhenlMb2FkZXJFbmFibGVkIiwiZ2V0U3ViU2VjdGlvbktleSIsImZhbGxiYWNrIiwiSUQiLCJ0b1N0cmluZyIsIkxhYmVsIiwiYWRkRm9ybU1lbnVBY3Rpb25zIiwiaGlkZGVuQWN0aW9ucyIsImdldEZvcm1IaWRkZW5BY3Rpb25zIiwiZm9ybUFjdGlvbnMiLCJnZXRGb3JtQWN0aW9ucyIsIm1hbmlmZXN0QWN0aW9ucyIsImdldEFjdGlvbnNGcm9tTWFuaWZlc3QiLCJhY3Rpb25PdmVyd3JpdGVDb25maWciLCJlbmFibGVkIiwiT3ZlcnJpZGVUeXBlIiwib3ZlcndyaXRlIiwiY29tbWFuZCIsImZvcm1BbGxBY3Rpb25zIiwiaW5zZXJ0Q3VzdG9tRWxlbWVudHMiLCJnZXRWaXNpYmlsaXR5RW5hYmxlbWVudEZvcm1NZW51QWN0aW9ucyIsInJlbW92ZUR1cGxpY2F0ZUFjdGlvbnMiLCJjb21tYW5kQWN0aW9ucyIsImdldEZhY2V0QWN0aW9ucyIsImZpbHRlciIsInN1YkZhY2V0RGVmaW5pdGlvbiIsImlzUmVmZXJlbmNlRmFjZXQiLCJhY3Rpb25SZWR1Y2VyIiwicmVmZXJlbmNlRmFjZXQiLCJjcmVhdGVGb3JtQWN0aW9uUmVkdWNlciIsImdldEJ1dHRvblR5cGUiLCJlbXBoYXNpemVkIiwiYnV0dG9uVHlwZUNvbmRpdGlvbiIsImVxdWFsIiwiZ2V0RXhwcmVzc2lvbkZyb21Bbm5vdGF0aW9uIiwiY29tcGlsZUV4cHJlc3Npb24iLCJpZkVsc2UiLCJCdXR0b25UeXBlIiwiR2hvc3QiLCJUcmFuc3BhcmVudCIsImhhc1NpbmdsZUNvbnRlbnQiLCJnZXRTdWJTZWN0aW9uSUQiLCJvSGlkZGVuQW5ub3RhdGlvbiIsImFubm90YXRpb25zIiwiVUkiLCJIaWRkZW4iLCJpc1Zpc2libGUiLCJub3QiLCJpc0R5bmFtaWNFeHByZXNzaW9uIiwiaW5kZXhPZiIsImlzUGF0aEV4cHJlc3Npb24iLCJpc1Zpc2libGVEeW5hbWljRXhwcmVzc2lvbiIsInN1YnN0cmluZyIsImxhc3RJbmRleE9mIiwiVW5rbm93biIsImFubm90YXRpb25QYXRoIiwiZ2V0RW50aXR5U2V0QmFzZWRBbm5vdGF0aW9uUGF0aCIsImZ1bGx5UXVhbGlmaWVkTmFtZSIsImlzVmlzaWJpbGl0eUR5bmFtaWMiLCJnZXRFbmFibGVMYXp5TG9hZGluZyIsImdldFN0YXNoZWRTZXR0aW5nc0ZvckhlYWRlckZhY2V0IiwiZGVzaWdudGltZSIsImdldERlc2lnblRpbWVNZXRhZGF0YVNldHRpbmdzRm9ySGVhZGVyRmFjZXQiLCJ1bnN1cHBvcnRlZFRleHQiLCJmYWNldHMiLCJ2aXN1YWxpemF0aW9uRmFjZXRzIiwiaW5kZXgiLCJpbmNsdWRlcyIsIlRhcmdldCIsIiR0YXJnZXQiLCJ0ZXJtIiwibm9uVmlzdWFsaXphdGlvbkZhY2V0cyIsInZpc3VhbGl6YXRpb24iLCJ2aXN1YWxpemF0aW9uQ29udGVudCIsImZvcm1Db250ZW50IiwibWl4ZWRDb250ZW50IiwiTG9nIiwid2FybmluZyIsImZha2VGb3JtRmFjZXQiLCJtaXhlZFN1YlNlY3Rpb24iLCJNaXhlZCIsImNvbnRlbnQiLCJmYWNldEFjdGlvbnMiLCJmb3JtQ29sbGVjdGlvblN1YlNlY3Rpb24iLCJGb3JtIiwiZm9ybURlZmluaXRpb24iLCJjcmVhdGVGb3JtRGVmaW5pdGlvbiIsImFjdGlvbiIsImZhY2V0TmFtZSIsInZhbHVlIiwiY2xhc3MiLCJwcmVzZW50YXRpb24iLCJnZXREYXRhVmlzdWFsaXphdGlvbkNvbmZpZ3VyYXRpb24iLCJnZXRDb25kZW5zZWRUYWJsZUxheW91dENvbXBsaWFuY2UiLCJzdWJTZWN0aW9uVGl0bGUiLCJjb250cm9sVGl0bGUiLCJ2aXN1YWxpemF0aW9ucyIsImFubm90YXRpb24iLCJzaG93VGl0bGUiLCJnZXRUaXRsZVZpc2liaWxpdHkiLCJ0aXRsZVZpc2libGVFeHByZXNzaW9uIiwiZGF0YVZpc3VhbGl6YXRpb25TdWJTZWN0aW9uIiwiRGF0YVZpc3VhbGl6YXRpb24iLCJ0aXRsZVZpc2libGUiLCJmb3JtRWxlbWVudFN1YlNlY3Rpb24iLCJ1bnN1cHBvcnRlZFN1YlNlY3Rpb24iLCJ0ZXh0Iiwib3IiLCJub3RFcXVhbCIsInJlc29sdmVCaW5kaW5nU3RyaW5nIiwicmVmZXJlbmNlVGFyZ2V0IiwidGFyZ2V0VmFsdWUiLCJkYXRhRmllbGRDb2xsZWN0aW9uIiwibmF2aWdhdGlvblByb3BlcnR5UGF0aCIsInNwbGl0Iiwic3Vic3RyIiwiRGF0YSIsImdldE1hbmlmZXN0Q29udHJvbENvbmZpZ3VyYXRpb24iLCJxdWFsaWZpZXIiLCJkYXRhRmllbGQiLCJSZXF1aXJlc0NvbnRleHQiLCJ2YWx1ZU9mIiwiZ2V0RGlhZ25vc3RpY3MiLCJhZGRJc3N1ZSIsIklzc3VlQ2F0ZWdvcnkiLCJBbm5vdGF0aW9uIiwiSXNzdWVTZXZlcml0eSIsIkxvdyIsIklzc3VlVHlwZSIsIk1BTEZPUk1FRF9EQVRBRklFTERfRk9SX0lCTiIsIlJFUVVJUkVTQ09OVEVYVCIsIklubGluZSIsIklOTElORSIsIkRldGVybWluaW5nIiwiREVURVJNSU5JTkciLCJtTmF2aWdhdGlvblBhcmFtZXRlcnMiLCJNYXBwaW5nIiwic2VtYW50aWNPYmplY3RNYXBwaW5nIiwiZ2V0U2VtYW50aWNPYmplY3RNYXBwaW5nIiwiQWN0aW9uVHlwZSIsIkRhdGFGaWVsZEZvckludGVudEJhc2VkTmF2aWdhdGlvbiIsImdldEZvcm1JRCIsIktleUhlbHBlciIsImdlbmVyYXRlS2V5RnJvbURhdGFGaWVsZCIsIk5hdmlnYXRpb25BdmFpbGFibGUiLCJidXR0b25UeXBlIiwiRW1waGFzaXplZCIsInByZXNzIiwiZm4iLCJTZW1hbnRpY09iamVjdCIsIkFjdGlvbiIsImN1c3RvbURhdGEiLCJzZW1hbnRpY09iamVjdCIsImZvcm1NYW5pZmVzdEFjdGlvbnNDb25maWd1cmF0aW9uIiwiRGF0YUZpZWxkRm9yQWN0aW9uIiwiZ2V0RW5hYmxlZEZvckFubm90YXRpb25BY3Rpb24iLCJBY3Rpb25UYXJnZXQiLCJiaW5kaW5nIiwicmVxdWlyZXNEaWFsb2ciLCJpc0FjdGlvbldpdGhEaWFsb2ciLCJjb250ZXh0cyIsInBhdGhJbk1vZGVsIiwiaW52b2NhdGlvbkdyb3VwaW5nIiwiSW52b2NhdGlvbkdyb3VwaW5nIiwibGFiZWwiLCJtb2RlbCIsImlzTmF2aWdhYmxlIiwiaXNBY3Rpb25OYXZpZ2FibGUiLCJyZWYiLCJpc0RpYWxvZyIsImFjdGlvbkRlZmluaXRpb24iLCJiQ3JpdGljYWwiLCJDb21tb24iLCJJc0FjdGlvbkNyaXRpY2FsIiwicGFyYW1ldGVycyIsImNyZWF0ZUN1c3RvbVN1YlNlY3Rpb25zIiwibWFuaWZlc3RTdWJTZWN0aW9ucyIsInN1YlNlY3Rpb25zIiwic3ViU2VjdGlvbktleSIsImNyZWF0ZUN1c3RvbVN1YlNlY3Rpb24iLCJtYW5pZmVzdFN1YlNlY3Rpb24iLCJnZXRTaWRlQ29udGVudElEIiwiZXF1YWxTcGxpdCIsInBvc2l0aW9uIiwicGxhY2VtZW50IiwiUGxhY2VtZW50IiwiQWZ0ZXIiLCJzdWJTZWN0aW9uRGVmaW5pdGlvbiIsImVuYWJsZUxhenlMb2FkaW5nIiwiY29tcG9uZW50TmFtZSIsInNldHRpbmdzIiwibmFtZSIsImVtYmVkZGVkQ29tcG9uZW50IiwiRW1iZWRkZWRDb21wb25lbnQiLCJKU09OIiwic3RyaW5naWZ5IiwiUGxhY2Vob2xkZXIiLCJjdXJyZW50RmFjZXQiLCJmYWNldHNUb0NyZWF0ZUluU2VjdGlvbiIsIm1hbmlmZXN0V3JhcHBlciIsInVzZUljb25UYWJCYXIiLCJoYXNOb090aGVyVmlzaWJsZVRhYmxlSW5UYXJnZXRzIiwiZW50aXR5VHlwZSIsImdldEVudGl0eVR5cGUiLCJldmVyeSIsInN1YkZhY2V0IiwicmVmRmFjZXQiLCJzdWJDb2xsZWN0aW9uRmFjZXQiLCJzdWJSZWZGYWNldCJdLCJzb3VyY2VSb290IjoiLiIsInNvdXJjZXMiOlsiU3ViU2VjdGlvbi50cyJdLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgdHlwZSB7IEFjdGlvbiB9IGZyb20gXCJAc2FwLXV4L3ZvY2FidWxhcmllcy10eXBlcy9FZG1cIjtcbmltcG9ydCB7IENvbW11bmljYXRpb25Bbm5vdGF0aW9uVGVybXMgfSBmcm9tIFwiQHNhcC11eC92b2NhYnVsYXJpZXMtdHlwZXMvdm9jYWJ1bGFyaWVzL0NvbW11bmljYXRpb25cIjtcbmltcG9ydCB0eXBlIHtcblx0Q29sbGVjdGlvbkZhY2V0LFxuXHRDb2xsZWN0aW9uRmFjZXRUeXBlcyxcblx0RGF0YUZpZWxkQWJzdHJhY3RUeXBlcyxcblx0RW1waGFzaXplZCxcblx0RmFjZXRUeXBlcyxcblx0RmllbGRHcm91cCxcblx0T3BlcmF0aW9uR3JvdXBpbmdUeXBlLFxuXHRSZWZlcmVuY2VGYWNldCxcblx0UmVmZXJlbmNlRmFjZXRUeXBlc1xufSBmcm9tIFwiQHNhcC11eC92b2NhYnVsYXJpZXMtdHlwZXMvdm9jYWJ1bGFyaWVzL1VJXCI7XG5pbXBvcnQgeyBVSUFubm90YXRpb25UZXJtcywgVUlBbm5vdGF0aW9uVHlwZXMgfSBmcm9tIFwiQHNhcC11eC92b2NhYnVsYXJpZXMtdHlwZXMvdm9jYWJ1bGFyaWVzL1VJXCI7XG5pbXBvcnQgTG9nIGZyb20gXCJzYXAvYmFzZS9Mb2dcIjtcbmltcG9ydCB0eXBlIHsgTmF2aWdhdGlvblBhcmFtZXRlcnMgfSBmcm9tIFwic2FwL2ZlL2NvcmUvY29udHJvbGxlcmV4dGVuc2lvbnMvSW50ZXJuYWxJbnRlbnRCYXNlZE5hdmlnYXRpb25cIjtcbmltcG9ydCB0eXBlIHtcblx0QmFzZUFjdGlvbixcblx0Q29tYmluZWRBY3Rpb24sXG5cdENvbnZlcnRlckFjdGlvbixcblx0Q3VzdG9tQWN0aW9uLFxuXHRPdmVycmlkZVR5cGVBY3Rpb25cbn0gZnJvbSBcInNhcC9mZS9jb3JlL2NvbnZlcnRlcnMvY29udHJvbHMvQ29tbW9uL0FjdGlvblwiO1xuaW1wb3J0IHtcblx0QnV0dG9uVHlwZSxcblx0Z2V0QWN0aW9uc0Zyb21NYW5pZmVzdCxcblx0Z2V0RW5hYmxlZEZvckFubm90YXRpb25BY3Rpb24sXG5cdGdldFNlbWFudGljT2JqZWN0TWFwcGluZyxcblx0aXNBY3Rpb25OYXZpZ2FibGUsXG5cdHJlbW92ZUR1cGxpY2F0ZUFjdGlvbnNcbn0gZnJvbSBcInNhcC9mZS9jb3JlL2NvbnZlcnRlcnMvY29udHJvbHMvQ29tbW9uL0FjdGlvblwiO1xuaW1wb3J0IHR5cGUgeyBDaGFydFZpc3VhbGl6YXRpb24gfSBmcm9tIFwic2FwL2ZlL2NvcmUvY29udmVydGVycy9jb250cm9scy9Db21tb24vQ2hhcnRcIjtcbmltcG9ydCB0eXBlIHsgVGFibGVWaXN1YWxpemF0aW9uIH0gZnJvbSBcInNhcC9mZS9jb3JlL2NvbnZlcnRlcnMvY29udHJvbHMvQ29tbW9uL1RhYmxlXCI7XG5pbXBvcnQgdHlwZSB7IEN1c3RvbU9iamVjdFBhZ2VIZWFkZXJGYWNldCwgRmxleFNldHRpbmdzIH0gZnJvbSBcInNhcC9mZS9jb3JlL2NvbnZlcnRlcnMvY29udHJvbHMvT2JqZWN0UGFnZS9IZWFkZXJGYWNldFwiO1xuaW1wb3J0IHtcblx0Z2V0RGVzaWduVGltZU1ldGFkYXRhU2V0dGluZ3NGb3JIZWFkZXJGYWNldCxcblx0Z2V0SGVhZGVyRmFjZXRzRnJvbU1hbmlmZXN0LFxuXHRnZXRTdGFzaGVkU2V0dGluZ3NGb3JIZWFkZXJGYWNldFxufSBmcm9tIFwic2FwL2ZlL2NvcmUvY29udmVydGVycy9jb250cm9scy9PYmplY3RQYWdlL0hlYWRlckZhY2V0XCI7XG5pbXBvcnQgeyBJc3N1ZUNhdGVnb3J5LCBJc3N1ZVNldmVyaXR5LCBJc3N1ZVR5cGUgfSBmcm9tIFwic2FwL2ZlL2NvcmUvY29udmVydGVycy9oZWxwZXJzL0lzc3VlTWFuYWdlclwiO1xuaW1wb3J0IHsgS2V5SGVscGVyIH0gZnJvbSBcInNhcC9mZS9jb3JlL2NvbnZlcnRlcnMvaGVscGVycy9LZXlcIjtcbmltcG9ydCB0eXBlIHsgQ29tcGlsZWRCaW5kaW5nVG9vbGtpdEV4cHJlc3Npb24gfSBmcm9tIFwic2FwL2ZlL2NvcmUvaGVscGVycy9CaW5kaW5nVG9vbGtpdFwiO1xuaW1wb3J0IHtcblx0Y29tcGlsZUV4cHJlc3Npb24sXG5cdGVxdWFsLFxuXHRmbixcblx0Z2V0RXhwcmVzc2lvbkZyb21Bbm5vdGF0aW9uLFxuXHRpZkVsc2UsXG5cdG5vdCxcblx0bm90RXF1YWwsXG5cdG9yLFxuXHRwYXRoSW5Nb2RlbCxcblx0cmVmLFxuXHRyZXNvbHZlQmluZGluZ1N0cmluZ1xufSBmcm9tIFwic2FwL2ZlL2NvcmUvaGVscGVycy9CaW5kaW5nVG9vbGtpdFwiO1xuaW1wb3J0IHsgaXNQYXRoRXhwcmVzc2lvbiB9IGZyb20gXCJzYXAvZmUvY29yZS90ZW1wbGF0aW5nL1Byb3BlcnR5SGVscGVyXCI7XG5pbXBvcnQgeyBpc0FjdGlvbldpdGhEaWFsb2cgfSBmcm9tIFwiLi4vLi4vYW5ub3RhdGlvbnMvRGF0YUZpZWxkXCI7XG5pbXBvcnQgdHlwZSBDb252ZXJ0ZXJDb250ZXh0IGZyb20gXCIuLi8uLi9Db252ZXJ0ZXJDb250ZXh0XCI7XG5pbXBvcnQgdHlwZSB7IENvbmZpZ3VyYWJsZU9iamVjdCwgQ29uZmlndXJhYmxlUmVjb3JkLCBDdXN0b21FbGVtZW50IH0gZnJvbSBcIi4uLy4uL2hlbHBlcnMvQ29uZmlndXJhYmxlT2JqZWN0XCI7XG5pbXBvcnQgeyBpbnNlcnRDdXN0b21FbGVtZW50cywgT3ZlcnJpZGVUeXBlLCBQbGFjZW1lbnQgfSBmcm9tIFwiLi4vLi4vaGVscGVycy9Db25maWd1cmFibGVPYmplY3RcIjtcbmltcG9ydCB7IGdldEN1c3RvbVN1YlNlY3Rpb25JRCwgZ2V0Rm9ybUlELCBnZXRTaWRlQ29udGVudElELCBnZXRTdWJTZWN0aW9uSUQgfSBmcm9tIFwiLi4vLi4vaGVscGVycy9JRFwiO1xuaW1wb3J0IHR5cGUgeyBNYW5pZmVzdEFjdGlvbiwgTWFuaWZlc3RTdWJTZWN0aW9uIH0gZnJvbSBcIi4uLy4uL01hbmlmZXN0U2V0dGluZ3NcIjtcbmltcG9ydCB7IEFjdGlvblR5cGUgfSBmcm9tIFwiLi4vLi4vTWFuaWZlc3RTZXR0aW5nc1wiO1xuaW1wb3J0IHsgZ2V0Rm9ybUFjdGlvbnMsIGdldEZvcm1IaWRkZW5BY3Rpb25zLCBnZXRWaXNpYmlsaXR5RW5hYmxlbWVudEZvcm1NZW51QWN0aW9ucyB9IGZyb20gXCIuLi8uLi9vYmplY3RQYWdlL0Zvcm1NZW51QWN0aW9uc1wiO1xuaW1wb3J0IHR5cGUgeyBEYXRhVmlzdWFsaXphdGlvbkRlZmluaXRpb24gfSBmcm9tIFwiLi4vQ29tbW9uL0RhdGFWaXN1YWxpemF0aW9uXCI7XG5pbXBvcnQgeyBnZXREYXRhVmlzdWFsaXphdGlvbkNvbmZpZ3VyYXRpb24gfSBmcm9tIFwiLi4vQ29tbW9uL0RhdGFWaXN1YWxpemF0aW9uXCI7XG5pbXBvcnQgdHlwZSB7IEZvcm1EZWZpbml0aW9uIH0gZnJvbSBcIi4uL0NvbW1vbi9Gb3JtXCI7XG5pbXBvcnQgeyBjcmVhdGVGb3JtRGVmaW5pdGlvbiwgaXNSZWZlcmVuY2VGYWNldCB9IGZyb20gXCIuLi9Db21tb24vRm9ybVwiO1xuXG5leHBvcnQgZW51bSBTdWJTZWN0aW9uVHlwZSB7XG5cdFVua25vd24gPSBcIlVua25vd25cIiwgLy8gRGVmYXVsdCBUeXBlXG5cdEZvcm0gPSBcIkZvcm1cIixcblx0RGF0YVZpc3VhbGl6YXRpb24gPSBcIkRhdGFWaXN1YWxpemF0aW9uXCIsXG5cdFhNTEZyYWdtZW50ID0gXCJYTUxGcmFnbWVudFwiLFxuXHRQbGFjZWhvbGRlciA9IFwiUGxhY2Vob2xkZXJcIixcblx0TWl4ZWQgPSBcIk1peGVkXCIsXG5cdEVtYmVkZGVkQ29tcG9uZW50ID0gXCJFbWJlZGRlZENvbXBvbmVudFwiXG59XG5cbmV4cG9ydCB0eXBlIE9iamVjdFBhZ2VTdWJTZWN0aW9uID1cblx0fCBVbnN1cHBvcnRlZFN1YlNlY3Rpb25cblx0fCBGb3JtU3ViU2VjdGlvblxuXHR8IERhdGFWaXN1YWxpemF0aW9uU3ViU2VjdGlvblxuXHR8IENvbnRhY3RTdWJTZWN0aW9uXG5cdHwgWE1MRnJhZ21lbnRTdWJTZWN0aW9uXG5cdHwgUGxhY2Vob2xkZXJGcmFnbWVudFN1YlNlY3Rpb25cblx0fCBNaXhlZFN1YlNlY3Rpb25cblx0fCBSZXVzZUNvbXBvbmVudFN1YlNlY3Rpb247XG5cbnR5cGUgQmFzZVN1YlNlY3Rpb24gPSB7XG5cdGlkOiBzdHJpbmc7XG5cdGtleTogc3RyaW5nO1xuXHR0aXRsZTogQ29tcGlsZWRCaW5kaW5nVG9vbGtpdEV4cHJlc3Npb247XG5cdGFubm90YXRpb25QYXRoOiBzdHJpbmc7XG5cdHR5cGU6IFN1YlNlY3Rpb25UeXBlO1xuXHR2aXNpYmxlOiBDb21waWxlZEJpbmRpbmdUb29sa2l0RXhwcmVzc2lvbjtcblx0aXNWaXNpYmlsaXR5RHluYW1pYz86IGJvb2xlYW4gfCBcIlwiO1xuXHRmbGV4U2V0dGluZ3M/OiBGbGV4U2V0dGluZ3M7XG5cdHN0YXNoZWQ/OiBib29sZWFuO1xuXHRsZXZlbDogbnVtYmVyO1xuXHRjb250ZW50PzogQXJyYXk8T2JqZWN0UGFnZVN1YlNlY3Rpb24+O1xuXHRzaWRlQ29udGVudD86IFNpZGVDb250ZW50RGVmO1xuXHRvYmplY3RQYWdlTGF6eUxvYWRlckVuYWJsZWQ6IGJvb2xlYW47XG5cdGNsYXNzPzogc3RyaW5nO1xufTtcblxudHlwZSBVbnN1cHBvcnRlZFN1YlNlY3Rpb24gPSBCYXNlU3ViU2VjdGlvbiAmIHtcblx0dGV4dDogc3RyaW5nO1xufTtcblxuZXhwb3J0IHR5cGUgRGF0YVZpc3VhbGl6YXRpb25TdWJTZWN0aW9uID0gQmFzZVN1YlNlY3Rpb24gJiB7XG5cdHR5cGU6IFN1YlNlY3Rpb25UeXBlLkRhdGFWaXN1YWxpemF0aW9uO1xuXHRwcmVzZW50YXRpb246IERhdGFWaXN1YWxpemF0aW9uRGVmaW5pdGlvbjtcblx0c2hvd1RpdGxlOiBib29sZWFuIHwgQ29tcGlsZWRCaW5kaW5nVG9vbGtpdEV4cHJlc3Npb247XG5cdHRpdGxlVmlzaWJsZT86IHN0cmluZyB8IGJvb2xlYW47XG59O1xuXG50eXBlIENvbnRhY3RTdWJTZWN0aW9uID0gVW5zdXBwb3J0ZWRTdWJTZWN0aW9uO1xuXG50eXBlIFhNTEZyYWdtZW50U3ViU2VjdGlvbiA9IE9taXQ8QmFzZVN1YlNlY3Rpb24sIFwiYW5ub3RhdGlvblBhdGhcIj4gJiB7XG5cdHR5cGU6IFN1YlNlY3Rpb25UeXBlLlhNTEZyYWdtZW50O1xuXHR0ZW1wbGF0ZTogc3RyaW5nO1xuXHRhY3Rpb25zOiBSZWNvcmQ8c3RyaW5nLCBDdXN0b21BY3Rpb24+O1xufTtcblxudHlwZSBSZXVzZUNvbXBvbmVudFN1YlNlY3Rpb24gPSBCYXNlU3ViU2VjdGlvbiAmIHtcblx0dHlwZTogU3ViU2VjdGlvblR5cGUuRW1iZWRkZWRDb21wb25lbnQ7XG5cdGNvbXBvbmVudE5hbWU6IHN0cmluZztcblx0c2V0dGluZ3M6IHN0cmluZztcbn07XG5cbnR5cGUgUGxhY2Vob2xkZXJGcmFnbWVudFN1YlNlY3Rpb24gPSBPbWl0PEJhc2VTdWJTZWN0aW9uLCBcImFubm90YXRpb25QYXRoXCI+ICYge1xuXHR0eXBlOiBTdWJTZWN0aW9uVHlwZS5QbGFjZWhvbGRlcjtcblx0YWN0aW9uczogUmVjb3JkPHN0cmluZywgQ3VzdG9tQWN0aW9uPjtcbn07XG5cbnR5cGUgTWl4ZWRTdWJTZWN0aW9uID0gQmFzZVN1YlNlY3Rpb24gJiB7XG5cdGNvbnRlbnQ6IEFycmF5PE9iamVjdFBhZ2VTdWJTZWN0aW9uPjtcbn07XG5cbmV4cG9ydCB0eXBlIEZvcm1TdWJTZWN0aW9uID0gQmFzZVN1YlNlY3Rpb24gJiB7XG5cdHR5cGU6IFN1YlNlY3Rpb25UeXBlLkZvcm07XG5cdGZvcm1EZWZpbml0aW9uOiBGb3JtRGVmaW5pdGlvbjtcblx0YWN0aW9uczogQ29udmVydGVyQWN0aW9uW10gfCBCYXNlQWN0aW9uW107XG5cdGNvbW1hbmRBY3Rpb25zOiBSZWNvcmQ8c3RyaW5nLCBDdXN0b21BY3Rpb24+O1xufTtcblxuZXhwb3J0IHR5cGUgT2JqZWN0UGFnZVNlY3Rpb24gPSBDb25maWd1cmFibGVPYmplY3QgJiB7XG5cdGlkOiBzdHJpbmc7XG5cdHRpdGxlOiBDb21waWxlZEJpbmRpbmdUb29sa2l0RXhwcmVzc2lvbjtcblx0c2hvd1RpdGxlPzogYm9vbGVhbjtcblx0dmlzaWJsZTogQ29tcGlsZWRCaW5kaW5nVG9vbGtpdEV4cHJlc3Npb247XG5cdHN1YlNlY3Rpb25zOiBPYmplY3RQYWdlU3ViU2VjdGlvbltdO1xufTtcblxudHlwZSBTaWRlQ29udGVudERlZiA9IHtcblx0dGVtcGxhdGU/OiBzdHJpbmc7XG5cdGlkPzogc3RyaW5nO1xuXHRzaWRlQ29udGVudEZhbGxEb3duPzogc3RyaW5nO1xuXHRjb250YWluZXJRdWVyeT86IHN0cmluZztcblx0dmlzaWJsZT86IGJvb2xlYW47XG5cdGVxdWFsU3BsaXQ/OiBib29sZWFuO1xufTtcblxuZXhwb3J0IHR5cGUgQ3VzdG9tT2JqZWN0UGFnZVNlY3Rpb24gPSBDdXN0b21FbGVtZW50PE9iamVjdFBhZ2VTZWN0aW9uPjtcblxuZXhwb3J0IHR5cGUgQ3VzdG9tT2JqZWN0UGFnZVN1YlNlY3Rpb24gPSBDdXN0b21FbGVtZW50PE9iamVjdFBhZ2VTdWJTZWN0aW9uPjtcblxuY29uc3QgdmlzdWFsaXphdGlvblRlcm1zOiBzdHJpbmdbXSA9IFtcblx0VUlBbm5vdGF0aW9uVGVybXMuTGluZUl0ZW0sXG5cdFVJQW5ub3RhdGlvblRlcm1zLkNoYXJ0LFxuXHRVSUFubm90YXRpb25UZXJtcy5QcmVzZW50YXRpb25WYXJpYW50LFxuXHRVSUFubm90YXRpb25UZXJtcy5TZWxlY3Rpb25QcmVzZW50YXRpb25WYXJpYW50XG5dO1xuXG4vKipcbiAqIENyZWF0ZSBzdWJzZWN0aW9ucyBiYXNlZCBvbiBmYWNldCBkZWZpbml0aW9uLlxuICpcbiAqIEBwYXJhbSBmYWNldENvbGxlY3Rpb24gQ29sbGVjdGlvbiBvZiBmYWNldHNcbiAqIEBwYXJhbSBjb252ZXJ0ZXJDb250ZXh0IFRoZSBjb252ZXJ0ZXIgY29udGV4dFxuICogQHBhcmFtIGlzSGVhZGVyU2VjdGlvbiBUcnVlIGlmIGhlYWRlciBzZWN0aW9uIGlzIGdlbmVyYXRlZCBpbiB0aGlzIGl0ZXJhdGlvblxuICogQHJldHVybnMgVGhlIGN1cnJlbnQgc3Vic2VjdGlvbnNcbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGNyZWF0ZVN1YlNlY3Rpb25zKFxuXHRmYWNldENvbGxlY3Rpb246IEZhY2V0VHlwZXNbXSxcblx0Y29udmVydGVyQ29udGV4dDogQ29udmVydGVyQ29udGV4dCxcblx0aXNIZWFkZXJTZWN0aW9uPzogYm9vbGVhblxuKTogT2JqZWN0UGFnZVN1YlNlY3Rpb25bXSB7XG5cdC8vIEZpcnN0IHdlIGRldGVybWluZSB3aGljaCBzdWIgc2VjdGlvbiB3ZSBuZWVkIHRvIGNyZWF0ZVxuXHRjb25zdCBmYWNldHNUb0NyZWF0ZSA9IGZhY2V0Q29sbGVjdGlvbi5yZWR1Y2UoKGZhY2V0c1RvQ3JlYXRlOiBGYWNldFR5cGVzW10sIGZhY2V0RGVmaW5pdGlvbikgPT4ge1xuXHRcdHN3aXRjaCAoZmFjZXREZWZpbml0aW9uLiRUeXBlKSB7XG5cdFx0XHRjYXNlIFVJQW5ub3RhdGlvblR5cGVzLlJlZmVyZW5jZUZhY2V0OlxuXHRcdFx0XHRmYWNldHNUb0NyZWF0ZS5wdXNoKGZhY2V0RGVmaW5pdGlvbik7XG5cdFx0XHRcdGJyZWFrO1xuXHRcdFx0Y2FzZSBVSUFubm90YXRpb25UeXBlcy5Db2xsZWN0aW9uRmFjZXQ6XG5cdFx0XHRcdC8vIFRPRE8gSWYgdGhlIENvbGxlY3Rpb24gRmFjZXQgaGFzIGEgY2hpbGQgb2YgdHlwZSBDb2xsZWN0aW9uIEZhY2V0IHdlIGJyaW5nIHRoZW0gdXAgb25lIGxldmVsIChGb3JtICsgVGFibGUgdXNlIGNhc2UpID9cblx0XHRcdFx0Ly8gZmlyc3QgY2FzZSBmYWNldCBDb2xsZWN0aW9uIGlzIGNvbWJpbmF0aW9uIG9mIGNvbGxlY3Rpb24gYW5kIHJlZmVyZW5jZSBmYWNldCBvciBub3QgYWxsIGZhY2V0cyBhcmUgcmVmZXJlbmNlIGZhY2V0cy5cblx0XHRcdFx0aWYgKGZhY2V0RGVmaW5pdGlvbi5GYWNldHMuZmluZCgoZmFjZXRUeXBlKSA9PiBmYWNldFR5cGUuJFR5cGUgPT09IFVJQW5ub3RhdGlvblR5cGVzLkNvbGxlY3Rpb25GYWNldCkpIHtcblx0XHRcdFx0XHRmYWNldHNUb0NyZWF0ZS5zcGxpY2UoZmFjZXRzVG9DcmVhdGUubGVuZ3RoLCAwLCAuLi5mYWNldERlZmluaXRpb24uRmFjZXRzKTtcblx0XHRcdFx0fSBlbHNlIHtcblx0XHRcdFx0XHRmYWNldHNUb0NyZWF0ZS5wdXNoKGZhY2V0RGVmaW5pdGlvbik7XG5cdFx0XHRcdH1cblx0XHRcdFx0YnJlYWs7XG5cdFx0XHRjYXNlIFVJQW5ub3RhdGlvblR5cGVzLlJlZmVyZW5jZVVSTEZhY2V0OlxuXHRcdFx0XHQvLyBOb3Qgc3VwcG9ydGVkXG5cdFx0XHRcdGJyZWFrO1xuXHRcdH1cblx0XHRyZXR1cm4gZmFjZXRzVG9DcmVhdGU7XG5cdH0sIFtdKTtcblxuXHQvLyBUaGVuIHdlIGNyZWF0ZSB0aGUgYWN0dWFsIHN1YnNlY3Rpb25zXG5cdHJldHVybiBmYWNldHNUb0NyZWF0ZS5tYXAoKGZhY2V0KSA9PlxuXHRcdGNyZWF0ZVN1YlNlY3Rpb24oZmFjZXQsIGZhY2V0c1RvQ3JlYXRlLCBjb252ZXJ0ZXJDb250ZXh0LCAwLCAhKGZhY2V0IGFzIENvbGxlY3Rpb25GYWNldCk/LkZhY2V0cz8ubGVuZ3RoLCBpc0hlYWRlclNlY3Rpb24pXG5cdCk7XG59XG5cbi8qKlxuICogQ3JlYXRlcyBzdWJzZWN0aW9ucyBiYXNlZCBvbiB0aGUgZGVmaW5pdGlvbiBvZiB0aGUgY3VzdG9tIGhlYWRlciBmYWNldC5cbiAqXG4gKiBAcGFyYW0gY29udmVydGVyQ29udGV4dCBUaGUgY29udmVydGVyIGNvbnRleHRcbiAqIEByZXR1cm5zIFRoZSBjdXJyZW50IHN1YnNlY3Rpb25zXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBjcmVhdGVDdXN0b21IZWFkZXJGYWNldFN1YlNlY3Rpb25zKGNvbnZlcnRlckNvbnRleHQ6IENvbnZlcnRlckNvbnRleHQpOiBPYmplY3RQYWdlU3ViU2VjdGlvbltdIHtcblx0Y29uc3QgY3VzdG9tSGVhZGVyRmFjZXRzOiBSZWNvcmQ8c3RyaW5nLCBDdXN0b21PYmplY3RQYWdlSGVhZGVyRmFjZXQ+ID0gZ2V0SGVhZGVyRmFjZXRzRnJvbU1hbmlmZXN0KFxuXHRcdGNvbnZlcnRlckNvbnRleHQuZ2V0TWFuaWZlc3RXcmFwcGVyKCkuZ2V0SGVhZGVyRmFjZXRzKClcblx0KTtcblx0Y29uc3QgYUN1c3RvbUhlYWRlckZhY2V0czogQ3VzdG9tT2JqZWN0UGFnZUhlYWRlckZhY2V0W10gPSBbXTtcblx0T2JqZWN0LmtleXMoY3VzdG9tSGVhZGVyRmFjZXRzKS5mb3JFYWNoKGZ1bmN0aW9uIChrZXkpIHtcblx0XHRhQ3VzdG9tSGVhZGVyRmFjZXRzLnB1c2goY3VzdG9tSGVhZGVyRmFjZXRzW2tleV0pO1xuXHRcdHJldHVybiBhQ3VzdG9tSGVhZGVyRmFjZXRzO1xuXHR9KTtcblx0Y29uc3QgZmFjZXRzVG9DcmVhdGUgPSBhQ3VzdG9tSGVhZGVyRmFjZXRzLnJlZHVjZSgoZmFjZXRzVG9DcmVhdGU6IEN1c3RvbU9iamVjdFBhZ2VIZWFkZXJGYWNldFtdLCBjdXN0b21IZWFkZXJGYWNldCkgPT4ge1xuXHRcdGlmIChjdXN0b21IZWFkZXJGYWNldC50ZW1wbGF0ZUVkaXQpIHtcblx0XHRcdGZhY2V0c1RvQ3JlYXRlLnB1c2goY3VzdG9tSGVhZGVyRmFjZXQpO1xuXHRcdH1cblx0XHRyZXR1cm4gZmFjZXRzVG9DcmVhdGU7XG5cdH0sIFtdKTtcblxuXHRyZXR1cm4gZmFjZXRzVG9DcmVhdGUubWFwKChjdXN0b21IZWFkZXJGYWNldCkgPT4gY3JlYXRlQ3VzdG9tSGVhZGVyRmFjZXRTdWJTZWN0aW9uKGN1c3RvbUhlYWRlckZhY2V0KSk7XG59XG5cbi8qKlxuICogQ3JlYXRlcyBhIHN1YnNlY3Rpb24gYmFzZWQgb24gYSBjdXN0b20gaGVhZGVyIGZhY2V0LlxuICpcbiAqIEBwYXJhbSBjdXN0b21IZWFkZXJGYWNldCBBIGN1c3RvbSBoZWFkZXIgZmFjZXRcbiAqIEByZXR1cm5zIEEgZGVmaW5pdGlvbiBmb3IgYSBzdWJzZWN0aW9uXG4gKi9cbmZ1bmN0aW9uIGNyZWF0ZUN1c3RvbUhlYWRlckZhY2V0U3ViU2VjdGlvbihjdXN0b21IZWFkZXJGYWNldDogQ3VzdG9tT2JqZWN0UGFnZUhlYWRlckZhY2V0KTogT2JqZWN0UGFnZVN1YlNlY3Rpb24ge1xuXHRjb25zdCBzdWJTZWN0aW9uSUQgPSBnZXRDdXN0b21TdWJTZWN0aW9uSUQoY3VzdG9tSGVhZGVyRmFjZXQua2V5KTtcblx0Y29uc3Qgc3ViU2VjdGlvbjogWE1MRnJhZ21lbnRTdWJTZWN0aW9uID0ge1xuXHRcdGlkOiBzdWJTZWN0aW9uSUQsXG5cdFx0a2V5OiBjdXN0b21IZWFkZXJGYWNldC5rZXksXG5cdFx0dGl0bGU6IGN1c3RvbUhlYWRlckZhY2V0LnRpdGxlLFxuXHRcdHR5cGU6IFN1YlNlY3Rpb25UeXBlLlhNTEZyYWdtZW50LFxuXHRcdHRlbXBsYXRlOiBjdXN0b21IZWFkZXJGYWNldC50ZW1wbGF0ZUVkaXQgfHwgXCJcIixcblx0XHR2aXNpYmxlOiBjdXN0b21IZWFkZXJGYWNldC52aXNpYmxlLFxuXHRcdGxldmVsOiAxLFxuXHRcdHNpZGVDb250ZW50OiB1bmRlZmluZWQsXG5cdFx0c3Rhc2hlZDogY3VzdG9tSGVhZGVyRmFjZXQuc3Rhc2hlZCxcblx0XHRmbGV4U2V0dGluZ3M6IGN1c3RvbUhlYWRlckZhY2V0LmZsZXhTZXR0aW5ncyxcblx0XHRhY3Rpb25zOiB7fSxcblx0XHRvYmplY3RQYWdlTGF6eUxvYWRlckVuYWJsZWQ6IGZhbHNlXG5cdH07XG5cdHJldHVybiBzdWJTZWN0aW9uO1xufVxuXG4vLyBmdW5jdGlvbiBpc1RhcmdldEZvckNvbXBsaWFudChhbm5vdGF0aW9uUGF0aDogQW5ub3RhdGlvblBhdGgpIHtcbi8vIFx0cmV0dXJuIC8uKmNvbVxcLnNhcFxcLnZvY2FidWxhcmllc1xcLlVJXFwudjFcXC4oRmllbGRHcm91cHxJZGVudGlmaWNhdGlvbnxEYXRhUG9pbnR8U3RhdHVzSW5mbykuKi8udGVzdChhbm5vdGF0aW9uUGF0aC52YWx1ZSk7XG4vLyB9XG5jb25zdCBnZXRTdWJTZWN0aW9uS2V5ID0gKGZhY2V0RGVmaW5pdGlvbjogRmFjZXRUeXBlcywgZmFsbGJhY2s6IHN0cmluZyk6IHN0cmluZyA9PiB7XG5cdHJldHVybiBmYWNldERlZmluaXRpb24uSUQ/LnRvU3RyaW5nKCkgfHwgZmFjZXREZWZpbml0aW9uLkxhYmVsPy50b1N0cmluZygpIHx8IGZhbGxiYWNrO1xufTtcbi8qKlxuICogQWRkcyBGb3JtIG1lbnUgYWN0aW9uIHRvIGFsbCBmb3JtIGFjdGlvbnMsIHJlbW92ZXMgZHVwbGljYXRlIGFjdGlvbnMgYW5kIGhpZGRlbiBhY3Rpb25zLlxuICpcbiAqIEBwYXJhbSBhY3Rpb25zIFRoZSBhY3Rpb25zIGludm9sdmVkXG4gKiBAcGFyYW0gZmFjZXREZWZpbml0aW9uIFRoZSBkZWZpbml0aW9uIGZvciB0aGUgZmFjZXRcbiAqIEBwYXJhbSBjb252ZXJ0ZXJDb250ZXh0IFRoZSBjb252ZXJ0ZXIgY29udGV4dFxuICogQHJldHVybnMgVGhlIGZvcm0gbWVudSBhY3Rpb25zXG4gKi9cbmZ1bmN0aW9uIGFkZEZvcm1NZW51QWN0aW9ucyhhY3Rpb25zOiBDb252ZXJ0ZXJBY3Rpb25bXSwgZmFjZXREZWZpbml0aW9uOiBGYWNldFR5cGVzLCBjb252ZXJ0ZXJDb250ZXh0OiBDb252ZXJ0ZXJDb250ZXh0KTogQ29tYmluZWRBY3Rpb24ge1xuXHRjb25zdCBoaWRkZW5BY3Rpb25zOiBCYXNlQWN0aW9uW10gPSBnZXRGb3JtSGlkZGVuQWN0aW9ucyhmYWNldERlZmluaXRpb24sIGNvbnZlcnRlckNvbnRleHQpIHx8IFtdLFxuXHRcdGZvcm1BY3Rpb25zOiBDb25maWd1cmFibGVSZWNvcmQ8TWFuaWZlc3RBY3Rpb24+ID0gZ2V0Rm9ybUFjdGlvbnMoZmFjZXREZWZpbml0aW9uLCBjb252ZXJ0ZXJDb250ZXh0KSxcblx0XHRtYW5pZmVzdEFjdGlvbnMgPSBnZXRBY3Rpb25zRnJvbU1hbmlmZXN0KGZvcm1BY3Rpb25zLCBjb252ZXJ0ZXJDb250ZXh0LCBhY3Rpb25zLCB1bmRlZmluZWQsIHVuZGVmaW5lZCwgaGlkZGVuQWN0aW9ucyksXG5cdFx0YWN0aW9uT3ZlcndyaXRlQ29uZmlnOiBPdmVycmlkZVR5cGVBY3Rpb24gPSB7XG5cdFx0XHRlbmFibGVkOiBPdmVycmlkZVR5cGUub3ZlcndyaXRlLFxuXHRcdFx0dmlzaWJsZTogT3ZlcnJpZGVUeXBlLm92ZXJ3cml0ZSxcblx0XHRcdGNvbW1hbmQ6IE92ZXJyaWRlVHlwZS5vdmVyd3JpdGVcblx0XHR9LFxuXHRcdGZvcm1BbGxBY3Rpb25zID0gaW5zZXJ0Q3VzdG9tRWxlbWVudHMoYWN0aW9ucywgbWFuaWZlc3RBY3Rpb25zLmFjdGlvbnMsIGFjdGlvbk92ZXJ3cml0ZUNvbmZpZyk7XG5cdHJldHVybiB7XG5cdFx0YWN0aW9uczogZm9ybUFsbEFjdGlvbnMgPyBnZXRWaXNpYmlsaXR5RW5hYmxlbWVudEZvcm1NZW51QWN0aW9ucyhyZW1vdmVEdXBsaWNhdGVBY3Rpb25zKGZvcm1BbGxBY3Rpb25zKSkgOiBhY3Rpb25zLFxuXHRcdGNvbW1hbmRBY3Rpb25zOiBtYW5pZmVzdEFjdGlvbnMuY29tbWFuZEFjdGlvbnNcblx0fTtcbn1cblxuLyoqXG4gKiBSZXRyaWV2ZXMgdGhlIGFjdGlvbiBmb3JtIGEgZmFjZXQuXG4gKlxuICogQHBhcmFtIGZhY2V0RGVmaW5pdGlvblxuICogQHBhcmFtIGNvbnZlcnRlckNvbnRleHRcbiAqIEByZXR1cm5zIFRoZSBjdXJyZW50IGZhY2V0IGFjdGlvbnNcbiAqL1xuZnVuY3Rpb24gZ2V0RmFjZXRBY3Rpb25zKGZhY2V0RGVmaW5pdGlvbjogRmFjZXRUeXBlcywgY29udmVydGVyQ29udGV4dDogQ29udmVydGVyQ29udGV4dCk6IENvbWJpbmVkQWN0aW9uIHtcblx0bGV0IGFjdGlvbnM6IENvbnZlcnRlckFjdGlvbltdID0gW107XG5cdHN3aXRjaCAoZmFjZXREZWZpbml0aW9uLiRUeXBlKSB7XG5cdFx0Y2FzZSBVSUFubm90YXRpb25UeXBlcy5Db2xsZWN0aW9uRmFjZXQ6XG5cdFx0XHRhY3Rpb25zID0gKFxuXHRcdFx0XHRmYWNldERlZmluaXRpb24uRmFjZXRzLmZpbHRlcigoc3ViRmFjZXREZWZpbml0aW9uKSA9PiBpc1JlZmVyZW5jZUZhY2V0KHN1YkZhY2V0RGVmaW5pdGlvbikpIGFzIFJlZmVyZW5jZUZhY2V0VHlwZXNbXVxuXHRcdFx0KS5yZWR1Y2UoXG5cdFx0XHRcdChhY3Rpb25SZWR1Y2VyOiBDb252ZXJ0ZXJBY3Rpb25bXSwgcmVmZXJlbmNlRmFjZXQpID0+XG5cdFx0XHRcdFx0Y3JlYXRlRm9ybUFjdGlvblJlZHVjZXIoYWN0aW9uUmVkdWNlciwgcmVmZXJlbmNlRmFjZXQsIGNvbnZlcnRlckNvbnRleHQpLFxuXHRcdFx0XHRbXVxuXHRcdFx0KTtcblx0XHRcdGJyZWFrO1xuXHRcdGNhc2UgVUlBbm5vdGF0aW9uVHlwZXMuUmVmZXJlbmNlRmFjZXQ6XG5cdFx0XHRhY3Rpb25zID0gY3JlYXRlRm9ybUFjdGlvblJlZHVjZXIoW10sIGZhY2V0RGVmaW5pdGlvbiwgY29udmVydGVyQ29udGV4dCk7XG5cdFx0XHRicmVhaztcblx0XHRkZWZhdWx0OlxuXHRcdFx0YnJlYWs7XG5cdH1cblx0cmV0dXJuIGFkZEZvcm1NZW51QWN0aW9ucyhhY3Rpb25zLCBmYWNldERlZmluaXRpb24sIGNvbnZlcnRlckNvbnRleHQpO1xufVxuLyoqXG4gKiBSZXR1cm5zIHRoZSBidXR0b24gdHlwZSBiYXNlZCBvbiBAVUkuRW1waGFzaXplZCBhbm5vdGF0aW9uLlxuICpcbiAqIEBwYXJhbSBlbXBoYXNpemVkIEVtcGhhc2l6ZWQgYW5ub3RhdGlvbiB2YWx1ZS5cbiAqIEByZXR1cm5zIFRoZSBidXR0b24gdHlwZSBvciBwYXRoIGJhc2VkIGV4cHJlc3Npb24uXG4gKi9cbmZ1bmN0aW9uIGdldEJ1dHRvblR5cGUoZW1waGFzaXplZDogRW1waGFzaXplZCB8IHVuZGVmaW5lZCk6IEJ1dHRvblR5cGUge1xuXHQvLyBFbXBoYXNpemVkIGlzIGEgYm9vbGVhbiBzbyBpZiBpdCdzIGVxdWFsIHRvIHRydWUgd2Ugc2hvdyB0aGUgYnV0dG9uIGFzIEdob3N0LCBvdGhlcndpc2UgYXMgVHJhbnNwYXJlbnRcblx0Y29uc3QgYnV0dG9uVHlwZUNvbmRpdGlvbiA9IGVxdWFsKGdldEV4cHJlc3Npb25Gcm9tQW5ub3RhdGlvbihlbXBoYXNpemVkKSwgdHJ1ZSk7XG5cdHJldHVybiBjb21waWxlRXhwcmVzc2lvbihpZkVsc2UoYnV0dG9uVHlwZUNvbmRpdGlvbiwgQnV0dG9uVHlwZS5HaG9zdCwgQnV0dG9uVHlwZS5UcmFuc3BhcmVudCkpIGFzIEJ1dHRvblR5cGU7XG59XG5cbi8qKlxuICogQ3JlYXRlIGEgc3Vic2VjdGlvbiBiYXNlZCBvbiBGYWNldFR5cGVzLlxuICpcbiAqIEBwYXJhbSBmYWNldERlZmluaXRpb25cbiAqIEBwYXJhbSBmYWNldHNUb0NyZWF0ZVxuICogQHBhcmFtIGNvbnZlcnRlckNvbnRleHRcbiAqIEBwYXJhbSBsZXZlbFxuICogQHBhcmFtIGhhc1NpbmdsZUNvbnRlbnRcbiAqIEBwYXJhbSBpc0hlYWRlclNlY3Rpb25cbiAqIEByZXR1cm5zIEEgc3Vic2VjdGlvbiBkZWZpbml0aW9uXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBjcmVhdGVTdWJTZWN0aW9uKFxuXHRmYWNldERlZmluaXRpb246IEZhY2V0VHlwZXMsXG5cdGZhY2V0c1RvQ3JlYXRlOiBGYWNldFR5cGVzW10sXG5cdGNvbnZlcnRlckNvbnRleHQ6IENvbnZlcnRlckNvbnRleHQsXG5cdGxldmVsOiBudW1iZXIsXG5cdGhhc1NpbmdsZUNvbnRlbnQ6IGJvb2xlYW4sXG5cdGlzSGVhZGVyU2VjdGlvbj86IGJvb2xlYW5cbik6IE9iamVjdFBhZ2VTdWJTZWN0aW9uIHtcblx0Y29uc3Qgc3ViU2VjdGlvbklEID0gZ2V0U3ViU2VjdGlvbklEKGZhY2V0RGVmaW5pdGlvbik7XG5cdGNvbnN0IG9IaWRkZW5Bbm5vdGF0aW9uID0gZmFjZXREZWZpbml0aW9uLmFubm90YXRpb25zPy5VST8uSGlkZGVuO1xuXHRjb25zdCBpc1Zpc2libGUgPSBjb21waWxlRXhwcmVzc2lvbihub3QoZXF1YWwodHJ1ZSwgZ2V0RXhwcmVzc2lvbkZyb21Bbm5vdGF0aW9uKG9IaWRkZW5Bbm5vdGF0aW9uKSkpKTtcblx0Y29uc3QgaXNEeW5hbWljRXhwcmVzc2lvbiA9XG5cdFx0aXNWaXNpYmxlICYmIHR5cGVvZiBpc1Zpc2libGUgPT09IFwic3RyaW5nXCIgJiYgaXNWaXNpYmxlLmluZGV4T2YoXCJ7PVwiKSA9PT0gMCAmJiAhaXNQYXRoRXhwcmVzc2lvbihvSGlkZGVuQW5ub3RhdGlvbik7XG5cdGNvbnN0IGlzVmlzaWJsZUR5bmFtaWNFeHByZXNzaW9uID1cblx0XHRpc1Zpc2libGUgJiYgaXNEeW5hbWljRXhwcmVzc2lvbiA/IGlzVmlzaWJsZS5zdWJzdHJpbmcoaXNWaXNpYmxlLmluZGV4T2YoXCJ7PVwiKSArIDIsIGlzVmlzaWJsZS5sYXN0SW5kZXhPZihcIn1cIikpIDogZmFsc2U7XG5cdGNvbnN0IHRpdGxlID0gY29tcGlsZUV4cHJlc3Npb24oZ2V0RXhwcmVzc2lvbkZyb21Bbm5vdGF0aW9uKGZhY2V0RGVmaW5pdGlvbi5MYWJlbCkpO1xuXHRjb25zdCBzdWJTZWN0aW9uOiBCYXNlU3ViU2VjdGlvbiA9IHtcblx0XHRpZDogc3ViU2VjdGlvbklELFxuXHRcdGtleTogZ2V0U3ViU2VjdGlvbktleShmYWNldERlZmluaXRpb24sIHN1YlNlY3Rpb25JRCksXG5cdFx0dGl0bGU6IHRpdGxlLFxuXHRcdHR5cGU6IFN1YlNlY3Rpb25UeXBlLlVua25vd24sXG5cdFx0YW5ub3RhdGlvblBhdGg6IGNvbnZlcnRlckNvbnRleHQuZ2V0RW50aXR5U2V0QmFzZWRBbm5vdGF0aW9uUGF0aChmYWNldERlZmluaXRpb24uZnVsbHlRdWFsaWZpZWROYW1lKSxcblx0XHR2aXNpYmxlOiBpc1Zpc2libGUsXG5cdFx0aXNWaXNpYmlsaXR5RHluYW1pYzogaXNEeW5hbWljRXhwcmVzc2lvbixcblx0XHRsZXZlbDogbGV2ZWwsXG5cdFx0c2lkZUNvbnRlbnQ6IHVuZGVmaW5lZCxcblx0XHRvYmplY3RQYWdlTGF6eUxvYWRlckVuYWJsZWQ6IGNvbnZlcnRlckNvbnRleHQuZ2V0TWFuaWZlc3RXcmFwcGVyKCkuZ2V0RW5hYmxlTGF6eUxvYWRpbmcoKVxuXHR9O1xuXHRpZiAoaXNIZWFkZXJTZWN0aW9uKSB7XG5cdFx0c3ViU2VjdGlvbi5zdGFzaGVkID0gZ2V0U3Rhc2hlZFNldHRpbmdzRm9ySGVhZGVyRmFjZXQoZmFjZXREZWZpbml0aW9uLCBmYWNldERlZmluaXRpb24sIGNvbnZlcnRlckNvbnRleHQpO1xuXHRcdHN1YlNlY3Rpb24uZmxleFNldHRpbmdzID0ge1xuXHRcdFx0ZGVzaWdudGltZTogZ2V0RGVzaWduVGltZU1ldGFkYXRhU2V0dGluZ3NGb3JIZWFkZXJGYWNldChmYWNldERlZmluaXRpb24sIGZhY2V0RGVmaW5pdGlvbiwgY29udmVydGVyQ29udGV4dClcblx0XHR9O1xuXHR9XG5cdGxldCB1bnN1cHBvcnRlZFRleHQgPSBcIlwiO1xuXHRsZXZlbCsrO1xuXHRzd2l0Y2ggKGZhY2V0RGVmaW5pdGlvbi4kVHlwZSkge1xuXHRcdGNhc2UgVUlBbm5vdGF0aW9uVHlwZXMuQ29sbGVjdGlvbkZhY2V0OlxuXHRcdFx0Y29uc3QgZmFjZXRzID0gZmFjZXREZWZpbml0aW9uLkZhY2V0cztcblxuXHRcdFx0Ly8gRmlsdGVyIGZvciBhbGwgZmFjZXRzIG9mIHRoaXMgc3Vic2VjdGlvbiB0aGF0IGFyZSByZWZlcnJpbmcgdG8gYW4gYW5ub3RhdGlvbiBkZXNjcmliaW5nIGEgdmlzdWFsaXphdGlvbiAoZS5nLiB0YWJsZSBvciBjaGFydClcblx0XHRcdGNvbnN0IHZpc3VhbGl6YXRpb25GYWNldHMgPSBmYWNldHNcblx0XHRcdFx0Lm1hcCgoZmFjZXQsIGluZGV4KSA9PiAoeyBpbmRleCwgZmFjZXQgfSkpIC8vIFJlbWVtYmVyIHRoZSBpbmRleCBhc3NpZ25lZCB0byBlYWNoIGZhY2V0XG5cdFx0XHRcdC5maWx0ZXIoKHsgZmFjZXQgfSkgPT4ge1xuXHRcdFx0XHRcdHJldHVybiB2aXN1YWxpemF0aW9uVGVybXMuaW5jbHVkZXMoKGZhY2V0IGFzIFJlZmVyZW5jZUZhY2V0KS5UYXJnZXQ/LiR0YXJnZXQ/LnRlcm0pO1xuXHRcdFx0XHR9KTtcblxuXHRcdFx0Ly8gRmlsdGVyIG91dCBhbGwgdmlzdWFsaXphdGlvbiBmYWNldHM7IFwidmlzdWFsaXphdGlvbkZhY2V0c1wiIGFuZCBcIm5vblZpc3VhbGl6YXRpb25GYWNldHNcIiBhcmUgZGlzam9pbnRcblx0XHRcdGNvbnN0IG5vblZpc3VhbGl6YXRpb25GYWNldHMgPSBmYWNldHMuZmlsdGVyKFxuXHRcdFx0XHQoZmFjZXQpID0+ICF2aXN1YWxpemF0aW9uRmFjZXRzLmZpbmQoKHZpc3VhbGl6YXRpb24pID0+IHZpc3VhbGl6YXRpb24uZmFjZXQgPT09IGZhY2V0KVxuXHRcdFx0KTtcblxuXHRcdFx0aWYgKHZpc3VhbGl6YXRpb25GYWNldHMubGVuZ3RoID4gMCkge1xuXHRcdFx0XHQvLyBDb2xsZWN0aW9uRmFjZXRzIHdpdGggdmlzdWFsaXphdGlvbnMgbXVzdCBiZSBoYW5kbGVkIHNlcGFyYXRlbHkgYXMgdGhleSBjYW5ub3QgYmUgaW5jbHVkZWQgaW4gZm9ybXNcblx0XHRcdFx0Y29uc3QgdmlzdWFsaXphdGlvbkNvbnRlbnQ6IE9iamVjdFBhZ2VTdWJTZWN0aW9uW10gPSBbXTtcblx0XHRcdFx0Y29uc3QgZm9ybUNvbnRlbnQ6IE9iamVjdFBhZ2VTdWJTZWN0aW9uW10gPSBbXTtcblx0XHRcdFx0Y29uc3QgbWl4ZWRDb250ZW50OiBPYmplY3RQYWdlU3ViU2VjdGlvbltdID0gW107XG5cblx0XHRcdFx0Ly8gQ3JlYXRlIGVhY2ggdmlzdWFsaXphdGlvbiBmYWNldCBhcyBpZiBpdCB3YXMgaXRzIG93biBzdWJzZWN0aW9uICh2aWEgcmVjdXJzaW9uKSwgYW5kIGtlZXAgdGhlaXIgcmVsYXRpdmUgb3JkZXJpbmdcblx0XHRcdFx0Zm9yIChjb25zdCB7IGZhY2V0IH0gb2YgdmlzdWFsaXphdGlvbkZhY2V0cykge1xuXHRcdFx0XHRcdHZpc3VhbGl6YXRpb25Db250ZW50LnB1c2goY3JlYXRlU3ViU2VjdGlvbihmYWNldCwgW10sIGNvbnZlcnRlckNvbnRleHQsIGxldmVsLCBmYWNldHMubGVuZ3RoID09PSAxLCBpc0hlYWRlclNlY3Rpb24pKTtcblx0XHRcdFx0fVxuXG5cdFx0XHRcdGlmIChub25WaXN1YWxpemF0aW9uRmFjZXRzLmxlbmd0aCA+IDApIHtcblx0XHRcdFx0XHQvLyBUaGlzIHN1YnNlY3Rpb24gaW5jbHVkZXMgdmlzdWFsaXphdGlvbnMgYW5kIG90aGVyIGNvbnRlbnQsIHNvIGl0IGlzIGEgXCJNaXhlZFwiIHN1YnNlY3Rpb25cblx0XHRcdFx0XHRMb2cud2FybmluZyhcblx0XHRcdFx0XHRcdGBXYXJuaW5nOiBDb2xsZWN0aW9uRmFjZXQgJyR7ZmFjZXREZWZpbml0aW9uLklEfScgaW5jbHVkZXMgYSBjb21iaW5hdGlvbiBvZiBlaXRoZXIgYSBjaGFydCBvciBhIHRhYmxlIGFuZCBvdGhlciBjb250ZW50LiBUaGlzIGNhbiBsZWFkIHRvIHJlbmRlcmluZyBpc3N1ZXMuIENvbnNpZGVyIG1vdmluZyB0aGUgY2hhcnQgb3IgdGFibGUgaW50byBhIHNlcGFyYXRlIENvbGxlY3Rpb25GYWNldC5gXG5cdFx0XHRcdFx0KTtcblxuXHRcdFx0XHRcdGNvbnN0IGZha2VGb3JtRmFjZXQgPSB7IC4uLmZhY2V0RGVmaW5pdGlvbiB9O1xuXHRcdFx0XHRcdGZha2VGb3JtRmFjZXQuRmFjZXRzID0gbm9uVmlzdWFsaXphdGlvbkZhY2V0cztcblx0XHRcdFx0XHQvLyBDcmVhdGUgYSBqb2luZWQgZm9ybSBvZiBhbGwgZmFjZXRzIHRoYXQgYXJlIG5vdCByZWZlcnJpbmcgdG8gdmlzdWFsaXphdGlvbnNcblx0XHRcdFx0XHRmb3JtQ29udGVudC5wdXNoKGNyZWF0ZVN1YlNlY3Rpb24oZmFrZUZvcm1GYWNldCwgW10sIGNvbnZlcnRlckNvbnRleHQsIGxldmVsLCBoYXNTaW5nbGVDb250ZW50LCBpc0hlYWRlclNlY3Rpb24pKTtcblx0XHRcdFx0fVxuXG5cdFx0XHRcdC8vIE1lcmdlIHRoZSB2aXN1YWxpemF0aW9uIGNvbnRlbnQgd2l0aCB0aGUgZm9ybSBjb250ZW50XG5cdFx0XHRcdGlmICh2aXN1YWxpemF0aW9uRmFjZXRzLmZpbmQoKHsgaW5kZXggfSkgPT4gaW5kZXggPT09IDApKSB7XG5cdFx0XHRcdFx0Ly8gSWYgdGhlIGZpcnN0IGZhY2V0IGlzIGEgdmlzdWFsaXphdGlvbiwgZGlzcGxheSB0aGUgdmlzdWFsaXphdGlvbnMgZmlyc3Rcblx0XHRcdFx0XHRtaXhlZENvbnRlbnQucHVzaCguLi52aXN1YWxpemF0aW9uQ29udGVudCk7XG5cdFx0XHRcdFx0bWl4ZWRDb250ZW50LnB1c2goLi4uZm9ybUNvbnRlbnQpO1xuXHRcdFx0XHR9IGVsc2Uge1xuXHRcdFx0XHRcdC8vIE90aGVyd2lzZSwgZGlzcGxheSB0aGUgZm9ybSBmaXJzdFxuXHRcdFx0XHRcdG1peGVkQ29udGVudC5wdXNoKC4uLmZvcm1Db250ZW50KTtcblx0XHRcdFx0XHRtaXhlZENvbnRlbnQucHVzaCguLi52aXN1YWxpemF0aW9uQ29udGVudCk7XG5cdFx0XHRcdH1cblxuXHRcdFx0XHRjb25zdCBtaXhlZFN1YlNlY3Rpb246IE1peGVkU3ViU2VjdGlvbiA9IHtcblx0XHRcdFx0XHQuLi5zdWJTZWN0aW9uLFxuXHRcdFx0XHRcdHR5cGU6IFN1YlNlY3Rpb25UeXBlLk1peGVkLFxuXHRcdFx0XHRcdGxldmVsOiBsZXZlbCxcblx0XHRcdFx0XHRjb250ZW50OiBtaXhlZENvbnRlbnRcblx0XHRcdFx0fTtcblx0XHRcdFx0cmV0dXJuIG1peGVkU3ViU2VjdGlvbjtcblx0XHRcdH0gZWxzZSB7XG5cdFx0XHRcdC8vIFRoaXMgQ29sbGVjdGlvbkZhY2V0IG9ubHkgaW5jbHVkZXMgY29udGVudCB0aGF0IGNhbiBiZSByZW5kZXJlZCBpbiBhIG1lcmdlZCBmb3JtXG5cdFx0XHRcdGNvbnN0IGZhY2V0QWN0aW9ucyA9IGdldEZhY2V0QWN0aW9ucyhmYWNldERlZmluaXRpb24sIGNvbnZlcnRlckNvbnRleHQpLFxuXHRcdFx0XHRcdGZvcm1Db2xsZWN0aW9uU3ViU2VjdGlvbjogRm9ybVN1YlNlY3Rpb24gPSB7XG5cdFx0XHRcdFx0XHQuLi5zdWJTZWN0aW9uLFxuXHRcdFx0XHRcdFx0dHlwZTogU3ViU2VjdGlvblR5cGUuRm9ybSxcblx0XHRcdFx0XHRcdGZvcm1EZWZpbml0aW9uOiBjcmVhdGVGb3JtRGVmaW5pdGlvbihmYWNldERlZmluaXRpb24sIGlzVmlzaWJsZSwgY29udmVydGVyQ29udGV4dCwgZmFjZXRBY3Rpb25zLmFjdGlvbnMpLFxuXHRcdFx0XHRcdFx0bGV2ZWw6IGxldmVsLFxuXHRcdFx0XHRcdFx0YWN0aW9uczogZmFjZXRBY3Rpb25zLmFjdGlvbnMuZmlsdGVyKChhY3Rpb24pID0+IGFjdGlvbi5mYWNldE5hbWUgPT09IHVuZGVmaW5lZCksXG5cdFx0XHRcdFx0XHRjb21tYW5kQWN0aW9uczogZmFjZXRBY3Rpb25zLmNvbW1hbmRBY3Rpb25zXG5cdFx0XHRcdFx0fTtcblx0XHRcdFx0cmV0dXJuIGZvcm1Db2xsZWN0aW9uU3ViU2VjdGlvbjtcblx0XHRcdH1cblx0XHRjYXNlIFVJQW5ub3RhdGlvblR5cGVzLlJlZmVyZW5jZUZhY2V0OlxuXHRcdFx0aWYgKCFmYWNldERlZmluaXRpb24uVGFyZ2V0LiR0YXJnZXQpIHtcblx0XHRcdFx0dW5zdXBwb3J0ZWRUZXh0ID0gYFVuYWJsZSB0byBmaW5kIGFubm90YXRpb25QYXRoICR7ZmFjZXREZWZpbml0aW9uLlRhcmdldC52YWx1ZX1gO1xuXHRcdFx0fSBlbHNlIHtcblx0XHRcdFx0c3dpdGNoIChmYWNldERlZmluaXRpb24uVGFyZ2V0LiR0YXJnZXQudGVybSkge1xuXHRcdFx0XHRcdGNhc2UgVUlBbm5vdGF0aW9uVGVybXMuTGluZUl0ZW06XG5cdFx0XHRcdFx0Y2FzZSBVSUFubm90YXRpb25UZXJtcy5DaGFydDpcblx0XHRcdFx0XHRjYXNlIFVJQW5ub3RhdGlvblRlcm1zLlByZXNlbnRhdGlvblZhcmlhbnQ6XG5cdFx0XHRcdFx0Y2FzZSBVSUFubm90YXRpb25UZXJtcy5TZWxlY3Rpb25QcmVzZW50YXRpb25WYXJpYW50OlxuXHRcdFx0XHRcdFx0aWYgKGlzSGVhZGVyU2VjdGlvbiA9PSBudWxsIHx8ICFpc0hlYWRlclNlY3Rpb24pIHtcblx0XHRcdFx0XHRcdFx0c3ViU2VjdGlvbi5jbGFzcyA9IFwic2FwVXhBUE9iamVjdFBhZ2VTdWJTZWN0aW9uRml0Q29udGFpbmVyXCI7XG5cdFx0XHRcdFx0XHR9XG5cdFx0XHRcdFx0XHRjb25zdCBwcmVzZW50YXRpb24gPSBnZXREYXRhVmlzdWFsaXphdGlvbkNvbmZpZ3VyYXRpb24oXG5cdFx0XHRcdFx0XHRcdGZhY2V0RGVmaW5pdGlvbi5UYXJnZXQudmFsdWUsXG5cdFx0XHRcdFx0XHRcdGdldENvbmRlbnNlZFRhYmxlTGF5b3V0Q29tcGxpYW5jZShmYWNldERlZmluaXRpb24sIGZhY2V0c1RvQ3JlYXRlLCBjb252ZXJ0ZXJDb250ZXh0KSxcblx0XHRcdFx0XHRcdFx0Y29udmVydGVyQ29udGV4dCxcblx0XHRcdFx0XHRcdFx0dW5kZWZpbmVkLFxuXHRcdFx0XHRcdFx0XHRpc0hlYWRlclNlY3Rpb25cblx0XHRcdFx0XHRcdCk7XG5cdFx0XHRcdFx0XHRjb25zdCBzdWJTZWN0aW9uVGl0bGU6IHN0cmluZyA9IHN1YlNlY3Rpb24udGl0bGUgPyBzdWJTZWN0aW9uLnRpdGxlIDogXCJcIjtcblx0XHRcdFx0XHRcdGNvbnN0IGNvbnRyb2xUaXRsZSA9XG5cdFx0XHRcdFx0XHRcdChwcmVzZW50YXRpb24udmlzdWFsaXphdGlvbnNbMF0gYXMgVGFibGVWaXN1YWxpemF0aW9uKT8uYW5ub3RhdGlvbj8udGl0bGUgfHxcblx0XHRcdFx0XHRcdFx0KHByZXNlbnRhdGlvbi52aXN1YWxpemF0aW9uc1swXSBhcyBDaGFydFZpc3VhbGl6YXRpb24pPy50aXRsZTtcblx0XHRcdFx0XHRcdGNvbnN0IHNob3dUaXRsZSA9IGdldFRpdGxlVmlzaWJpbGl0eShjb250cm9sVGl0bGUgPz8gXCJcIiwgc3ViU2VjdGlvblRpdGxlLCBoYXNTaW5nbGVDb250ZW50KTtcblx0XHRcdFx0XHRcdGNvbnN0IHRpdGxlVmlzaWJsZUV4cHJlc3Npb24gPSBpc1Zpc2libGUgJiYgdGl0bGUgIT09IFwidW5kZWZpbmVkXCIgJiYgKHRpdGxlID8gaXNWaXNpYmxlIDogZmFsc2UpO1xuXHRcdFx0XHRcdFx0Y29uc3QgZGF0YVZpc3VhbGl6YXRpb25TdWJTZWN0aW9uOiBEYXRhVmlzdWFsaXphdGlvblN1YlNlY3Rpb24gPSB7XG5cdFx0XHRcdFx0XHRcdC4uLnN1YlNlY3Rpb24sXG5cdFx0XHRcdFx0XHRcdHR5cGU6IFN1YlNlY3Rpb25UeXBlLkRhdGFWaXN1YWxpemF0aW9uLFxuXHRcdFx0XHRcdFx0XHRsZXZlbDogbGV2ZWwsXG5cdFx0XHRcdFx0XHRcdHByZXNlbnRhdGlvbjogcHJlc2VudGF0aW9uLFxuXHRcdFx0XHRcdFx0XHRzaG93VGl0bGU6IHNob3dUaXRsZSxcblx0XHRcdFx0XHRcdFx0dGl0bGVWaXNpYmxlOiBpc0R5bmFtaWNFeHByZXNzaW9uXG5cdFx0XHRcdFx0XHRcdFx0PyBgez0gKCR7aXNWaXNpYmxlRHluYW1pY0V4cHJlc3Npb259KSAmJiAoJyR7dGl0bGV9JyAhPT0ndW5kZWZpbmVkJykgJiYgKCR7c2hvd1RpdGxlfSA/IHRydWUgOiBmYWxzZSkgfWBcblx0XHRcdFx0XHRcdFx0XHQ6IHRpdGxlVmlzaWJsZUV4cHJlc3Npb25cblx0XHRcdFx0XHRcdH07XG5cdFx0XHRcdFx0XHRyZXR1cm4gZGF0YVZpc3VhbGl6YXRpb25TdWJTZWN0aW9uO1xuXG5cdFx0XHRcdFx0Y2FzZSBVSUFubm90YXRpb25UZXJtcy5GaWVsZEdyb3VwOlxuXHRcdFx0XHRcdGNhc2UgVUlBbm5vdGF0aW9uVGVybXMuSWRlbnRpZmljYXRpb246XG5cdFx0XHRcdFx0Y2FzZSBVSUFubm90YXRpb25UZXJtcy5EYXRhUG9pbnQ6XG5cdFx0XHRcdFx0Y2FzZSBVSUFubm90YXRpb25UZXJtcy5TdGF0dXNJbmZvOlxuXHRcdFx0XHRcdGNhc2UgQ29tbXVuaWNhdGlvbkFubm90YXRpb25UZXJtcy5Db250YWN0OlxuXHRcdFx0XHRcdFx0Ly8gQWxsIHRob3NlIGVsZW1lbnQgYmVsb25nIHRvIGEgZnJvbSBmYWNldFxuXHRcdFx0XHRcdFx0Y29uc3QgZmFjZXRBY3Rpb25zID0gZ2V0RmFjZXRBY3Rpb25zKGZhY2V0RGVmaW5pdGlvbiwgY29udmVydGVyQ29udGV4dCksXG5cdFx0XHRcdFx0XHRcdGZvcm1FbGVtZW50U3ViU2VjdGlvbjogRm9ybVN1YlNlY3Rpb24gPSB7XG5cdFx0XHRcdFx0XHRcdFx0Li4uc3ViU2VjdGlvbixcblx0XHRcdFx0XHRcdFx0XHR0eXBlOiBTdWJTZWN0aW9uVHlwZS5Gb3JtLFxuXHRcdFx0XHRcdFx0XHRcdGxldmVsOiBsZXZlbCxcblx0XHRcdFx0XHRcdFx0XHRmb3JtRGVmaW5pdGlvbjogY3JlYXRlRm9ybURlZmluaXRpb24oZmFjZXREZWZpbml0aW9uLCBpc1Zpc2libGUsIGNvbnZlcnRlckNvbnRleHQsIGZhY2V0QWN0aW9ucy5hY3Rpb25zKSxcblx0XHRcdFx0XHRcdFx0XHRhY3Rpb25zOiBmYWNldEFjdGlvbnMuYWN0aW9ucy5maWx0ZXIoKGFjdGlvbikgPT4gYWN0aW9uLmZhY2V0TmFtZSA9PT0gdW5kZWZpbmVkKSxcblx0XHRcdFx0XHRcdFx0XHRjb21tYW5kQWN0aW9uczogZmFjZXRBY3Rpb25zLmNvbW1hbmRBY3Rpb25zXG5cdFx0XHRcdFx0XHRcdH07XG5cdFx0XHRcdFx0XHRyZXR1cm4gZm9ybUVsZW1lbnRTdWJTZWN0aW9uO1xuXG5cdFx0XHRcdFx0ZGVmYXVsdDpcblx0XHRcdFx0XHRcdHVuc3VwcG9ydGVkVGV4dCA9IGBGb3IgJHtmYWNldERlZmluaXRpb24uVGFyZ2V0LiR0YXJnZXQudGVybX0gRnJhZ21lbnRgO1xuXHRcdFx0XHRcdFx0YnJlYWs7XG5cdFx0XHRcdH1cblx0XHRcdH1cblx0XHRcdGJyZWFrO1xuXHRcdGNhc2UgVUlBbm5vdGF0aW9uVHlwZXMuUmVmZXJlbmNlVVJMRmFjZXQ6XG5cdFx0XHR1bnN1cHBvcnRlZFRleHQgPSBcIkZvciBSZWZlcmVuY2UgVVJMIEZhY2V0XCI7XG5cdFx0XHRicmVhaztcblx0XHRkZWZhdWx0OlxuXHRcdFx0YnJlYWs7XG5cdH1cblx0Ly8gSWYgd2UgcmVhY2ggaGVyZSB3ZSBlbmRlZCB1cCB3aXRoIGFuIHVuc3VwcG9ydGVkIFN1YlNlY3Rpb24gdHlwZVxuXHRjb25zdCB1bnN1cHBvcnRlZFN1YlNlY3Rpb246IFVuc3VwcG9ydGVkU3ViU2VjdGlvbiA9IHtcblx0XHQuLi5zdWJTZWN0aW9uLFxuXHRcdHRleHQ6IHVuc3VwcG9ydGVkVGV4dFxuXHR9O1xuXHRyZXR1cm4gdW5zdXBwb3J0ZWRTdWJTZWN0aW9uO1xufVxuLyoqXG4gKiBDaGVja3Mgd2hldGhlciB0byBoaWRlIG9yIHNob3cgc3Vic2VjdGlvbiB0aXRsZVxuICpcbiAqIEBwYXJhbSBjb250cm9sVGl0bGVcbiAqIEBwYXJhbSBzZWN0aW9uVGl0bGVcbiAqIEBwYXJhbSBoYXNTaW5nbGVDb250ZW50XG4gKiBAcmV0dXJucyBCb29sZWFuIHZhbHVlICBvciBleHByZXNzaW9uIGZvciBzaG93VGl0bGVcbiAqL1xuXG5leHBvcnQgZnVuY3Rpb24gZ2V0VGl0bGVWaXNpYmlsaXR5KFxuXHRjb250cm9sVGl0bGU6IHN0cmluZyxcblx0c3ViU2VjdGlvblRpdGxlOiBzdHJpbmcsXG5cdGhhc1NpbmdsZUNvbnRlbnQ6IGJvb2xlYW5cbik6IENvbXBpbGVkQmluZGluZ1Rvb2xraXRFeHByZXNzaW9uIHtcblx0Ly8gdmlzaWJsZSBzaGFsbCBiZSB0cnVlIGlmIHRoZXJlIGFyZSBtdWx0aXBsZSBjb250ZW50IG9yIGlmIHRoZSBjb250cm9sIGFuZCBzdWJzZWN0aW9uIHRpdGxlIGFyZSBkaWZmZXJlbnRcblx0cmV0dXJuIGNvbXBpbGVFeHByZXNzaW9uKFxuXHRcdG9yKG5vdChoYXNTaW5nbGVDb250ZW50KSwgbm90RXF1YWwocmVzb2x2ZUJpbmRpbmdTdHJpbmcoY29udHJvbFRpdGxlKSwgcmVzb2x2ZUJpbmRpbmdTdHJpbmcoc3ViU2VjdGlvblRpdGxlKSkpXG5cdCk7XG59XG5cbmZ1bmN0aW9uIGNyZWF0ZUZvcm1BY3Rpb25SZWR1Y2VyKFxuXHRhY3Rpb25zOiBDb252ZXJ0ZXJBY3Rpb25bXSxcblx0ZmFjZXREZWZpbml0aW9uOiBSZWZlcmVuY2VGYWNldFR5cGVzLFxuXHRjb252ZXJ0ZXJDb250ZXh0OiBDb252ZXJ0ZXJDb250ZXh0XG4pOiBDb252ZXJ0ZXJBY3Rpb25bXSB7XG5cdGNvbnN0IHJlZmVyZW5jZVRhcmdldCA9IGZhY2V0RGVmaW5pdGlvbi5UYXJnZXQuJHRhcmdldDtcblx0Y29uc3QgdGFyZ2V0VmFsdWUgPSBmYWNldERlZmluaXRpb24uVGFyZ2V0LnZhbHVlO1xuXHRsZXQgbWFuaWZlc3RBY3Rpb25zOiBSZWNvcmQ8c3RyaW5nLCBDdXN0b21BY3Rpb24+ID0ge307XG5cdGxldCBkYXRhRmllbGRDb2xsZWN0aW9uOiBEYXRhRmllbGRBYnN0cmFjdFR5cGVzW10gPSBbXTtcblx0bGV0IG5hdmlnYXRpb25Qcm9wZXJ0eVBhdGg6IHN0cmluZyB8IHVuZGVmaW5lZDtcblx0W25hdmlnYXRpb25Qcm9wZXJ0eVBhdGhdID0gdGFyZ2V0VmFsdWUuc3BsaXQoXCJAXCIpO1xuXHRpZiAobmF2aWdhdGlvblByb3BlcnR5UGF0aC5sZW5ndGggPiAwKSB7XG5cdFx0aWYgKG5hdmlnYXRpb25Qcm9wZXJ0eVBhdGgubGFzdEluZGV4T2YoXCIvXCIpID09PSBuYXZpZ2F0aW9uUHJvcGVydHlQYXRoLmxlbmd0aCAtIDEpIHtcblx0XHRcdG5hdmlnYXRpb25Qcm9wZXJ0eVBhdGggPSBuYXZpZ2F0aW9uUHJvcGVydHlQYXRoLnN1YnN0cigwLCBuYXZpZ2F0aW9uUHJvcGVydHlQYXRoLmxlbmd0aCAtIDEpO1xuXHRcdH1cblx0fSBlbHNlIHtcblx0XHRuYXZpZ2F0aW9uUHJvcGVydHlQYXRoID0gdW5kZWZpbmVkO1xuXHR9XG5cblx0aWYgKHJlZmVyZW5jZVRhcmdldCkge1xuXHRcdHN3aXRjaCAocmVmZXJlbmNlVGFyZ2V0LnRlcm0pIHtcblx0XHRcdGNhc2UgVUlBbm5vdGF0aW9uVGVybXMuRmllbGRHcm91cDpcblx0XHRcdFx0ZGF0YUZpZWxkQ29sbGVjdGlvbiA9IChyZWZlcmVuY2VUYXJnZXQgYXMgRmllbGRHcm91cCkuRGF0YTtcblx0XHRcdFx0bWFuaWZlc3RBY3Rpb25zID0gZ2V0QWN0aW9uc0Zyb21NYW5pZmVzdChcblx0XHRcdFx0XHRjb252ZXJ0ZXJDb250ZXh0LmdldE1hbmlmZXN0Q29udHJvbENvbmZpZ3VyYXRpb24ocmVmZXJlbmNlVGFyZ2V0KS5hY3Rpb25zLFxuXHRcdFx0XHRcdGNvbnZlcnRlckNvbnRleHQsXG5cdFx0XHRcdFx0dW5kZWZpbmVkLFxuXHRcdFx0XHRcdHVuZGVmaW5lZCxcblx0XHRcdFx0XHR1bmRlZmluZWQsXG5cdFx0XHRcdFx0dW5kZWZpbmVkLFxuXHRcdFx0XHRcdGZhY2V0RGVmaW5pdGlvbi5mdWxseVF1YWxpZmllZE5hbWVcblx0XHRcdFx0KS5hY3Rpb25zO1xuXHRcdFx0XHRicmVhaztcblx0XHRcdGNhc2UgVUlBbm5vdGF0aW9uVGVybXMuSWRlbnRpZmljYXRpb246XG5cdFx0XHRjYXNlIFVJQW5ub3RhdGlvblRlcm1zLlN0YXR1c0luZm86XG5cdFx0XHRcdGlmIChyZWZlcmVuY2VUYXJnZXQucXVhbGlmaWVyKSB7XG5cdFx0XHRcdFx0ZGF0YUZpZWxkQ29sbGVjdGlvbiA9IHJlZmVyZW5jZVRhcmdldDtcblx0XHRcdFx0fVxuXHRcdFx0XHRicmVhaztcblx0XHRcdGRlZmF1bHQ6XG5cdFx0XHRcdGJyZWFrO1xuXHRcdH1cblx0fVxuXG5cdGFjdGlvbnMgPSBkYXRhRmllbGRDb2xsZWN0aW9uLnJlZHVjZSgoYWN0aW9uUmVkdWNlciwgZGF0YUZpZWxkOiBEYXRhRmllbGRBYnN0cmFjdFR5cGVzKSA9PiB7XG5cdFx0c3dpdGNoIChkYXRhRmllbGQuJFR5cGUpIHtcblx0XHRcdGNhc2UgVUlBbm5vdGF0aW9uVHlwZXMuRGF0YUZpZWxkRm9ySW50ZW50QmFzZWROYXZpZ2F0aW9uOlxuXHRcdFx0XHRpZiAoZGF0YUZpZWxkLlJlcXVpcmVzQ29udGV4dD8udmFsdWVPZigpID09PSB0cnVlKSB7XG5cdFx0XHRcdFx0Y29udmVydGVyQ29udGV4dFxuXHRcdFx0XHRcdFx0LmdldERpYWdub3N0aWNzKClcblx0XHRcdFx0XHRcdC5hZGRJc3N1ZShJc3N1ZUNhdGVnb3J5LkFubm90YXRpb24sIElzc3VlU2V2ZXJpdHkuTG93LCBJc3N1ZVR5cGUuTUFMRk9STUVEX0RBVEFGSUVMRF9GT1JfSUJOLlJFUVVJUkVTQ09OVEVYVCk7XG5cdFx0XHRcdH1cblx0XHRcdFx0aWYgKGRhdGFGaWVsZC5JbmxpbmU/LnZhbHVlT2YoKSA9PT0gdHJ1ZSkge1xuXHRcdFx0XHRcdGNvbnZlcnRlckNvbnRleHRcblx0XHRcdFx0XHRcdC5nZXREaWFnbm9zdGljcygpXG5cdFx0XHRcdFx0XHQuYWRkSXNzdWUoSXNzdWVDYXRlZ29yeS5Bbm5vdGF0aW9uLCBJc3N1ZVNldmVyaXR5LkxvdywgSXNzdWVUeXBlLk1BTEZPUk1FRF9EQVRBRklFTERfRk9SX0lCTi5JTkxJTkUpO1xuXHRcdFx0XHR9XG5cdFx0XHRcdGlmIChkYXRhRmllbGQuRGV0ZXJtaW5pbmc/LnZhbHVlT2YoKSA9PT0gdHJ1ZSkge1xuXHRcdFx0XHRcdGNvbnZlcnRlckNvbnRleHRcblx0XHRcdFx0XHRcdC5nZXREaWFnbm9zdGljcygpXG5cdFx0XHRcdFx0XHQuYWRkSXNzdWUoSXNzdWVDYXRlZ29yeS5Bbm5vdGF0aW9uLCBJc3N1ZVNldmVyaXR5LkxvdywgSXNzdWVUeXBlLk1BTEZPUk1FRF9EQVRBRklFTERfRk9SX0lCTi5ERVRFUk1JTklORyk7XG5cdFx0XHRcdH1cblx0XHRcdFx0Y29uc3QgbU5hdmlnYXRpb25QYXJhbWV0ZXJzOiBOYXZpZ2F0aW9uUGFyYW1ldGVycyA9IHt9O1xuXHRcdFx0XHRpZiAoZGF0YUZpZWxkLk1hcHBpbmcpIHtcblx0XHRcdFx0XHRtTmF2aWdhdGlvblBhcmFtZXRlcnMuc2VtYW50aWNPYmplY3RNYXBwaW5nID0gZ2V0U2VtYW50aWNPYmplY3RNYXBwaW5nKGRhdGFGaWVsZC5NYXBwaW5nKTtcblx0XHRcdFx0fVxuXHRcdFx0XHRhY3Rpb25SZWR1Y2VyLnB1c2goe1xuXHRcdFx0XHRcdHR5cGU6IEFjdGlvblR5cGUuRGF0YUZpZWxkRm9ySW50ZW50QmFzZWROYXZpZ2F0aW9uLFxuXHRcdFx0XHRcdGlkOiBnZXRGb3JtSUQoZmFjZXREZWZpbml0aW9uLCBkYXRhRmllbGQpLFxuXHRcdFx0XHRcdGtleTogS2V5SGVscGVyLmdlbmVyYXRlS2V5RnJvbURhdGFGaWVsZChkYXRhRmllbGQpLFxuXHRcdFx0XHRcdHRleHQ6IGRhdGFGaWVsZC5MYWJlbD8udG9TdHJpbmcoKSxcblx0XHRcdFx0XHRhbm5vdGF0aW9uUGF0aDogXCJcIixcblx0XHRcdFx0XHRlbmFibGVkOlxuXHRcdFx0XHRcdFx0ZGF0YUZpZWxkLk5hdmlnYXRpb25BdmFpbGFibGUgIT09IHVuZGVmaW5lZFxuXHRcdFx0XHRcdFx0XHQ/IGNvbXBpbGVFeHByZXNzaW9uKGVxdWFsKGdldEV4cHJlc3Npb25Gcm9tQW5ub3RhdGlvbihkYXRhRmllbGQuTmF2aWdhdGlvbkF2YWlsYWJsZT8udmFsdWVPZigpKSwgdHJ1ZSkpXG5cdFx0XHRcdFx0XHRcdDogXCJ0cnVlXCIsXG5cdFx0XHRcdFx0dmlzaWJsZTogY29tcGlsZUV4cHJlc3Npb24obm90KGVxdWFsKGdldEV4cHJlc3Npb25Gcm9tQW5ub3RhdGlvbihkYXRhRmllbGQuYW5ub3RhdGlvbnM/LlVJPy5IaWRkZW4/LnZhbHVlT2YoKSksIHRydWUpKSksXG5cdFx0XHRcdFx0YnV0dG9uVHlwZTogZ2V0QnV0dG9uVHlwZShkYXRhRmllbGQuYW5ub3RhdGlvbnM/LlVJPy5FbXBoYXNpemVkKSxcblx0XHRcdFx0XHRwcmVzczogY29tcGlsZUV4cHJlc3Npb24oXG5cdFx0XHRcdFx0XHRmbihcIi5faW50ZW50QmFzZWROYXZpZ2F0aW9uLm5hdmlnYXRlXCIsIFtcblx0XHRcdFx0XHRcdFx0Z2V0RXhwcmVzc2lvbkZyb21Bbm5vdGF0aW9uKGRhdGFGaWVsZC5TZW1hbnRpY09iamVjdCksXG5cdFx0XHRcdFx0XHRcdGdldEV4cHJlc3Npb25Gcm9tQW5ub3RhdGlvbihkYXRhRmllbGQuQWN0aW9uKSxcblx0XHRcdFx0XHRcdFx0bU5hdmlnYXRpb25QYXJhbWV0ZXJzXG5cdFx0XHRcdFx0XHRdKVxuXHRcdFx0XHRcdCksXG5cdFx0XHRcdFx0Y3VzdG9tRGF0YTogY29tcGlsZUV4cHJlc3Npb24oe1xuXHRcdFx0XHRcdFx0c2VtYW50aWNPYmplY3Q6IGdldEV4cHJlc3Npb25Gcm9tQW5ub3RhdGlvbihkYXRhRmllbGQuU2VtYW50aWNPYmplY3QpLFxuXHRcdFx0XHRcdFx0YWN0aW9uOiBnZXRFeHByZXNzaW9uRnJvbUFubm90YXRpb24oZGF0YUZpZWxkLkFjdGlvbilcblx0XHRcdFx0XHR9KVxuXHRcdFx0XHR9KTtcblx0XHRcdFx0YnJlYWs7XG5cdFx0XHRjYXNlIFVJQW5ub3RhdGlvblR5cGVzLkRhdGFGaWVsZEZvckFjdGlvbjpcblx0XHRcdFx0Y29uc3QgZm9ybU1hbmlmZXN0QWN0aW9uc0NvbmZpZ3VyYXRpb24gPSBjb252ZXJ0ZXJDb250ZXh0LmdldE1hbmlmZXN0Q29udHJvbENvbmZpZ3VyYXRpb24ocmVmZXJlbmNlVGFyZ2V0KS5hY3Rpb25zO1xuXHRcdFx0XHRjb25zdCBrZXk6IHN0cmluZyA9IEtleUhlbHBlci5nZW5lcmF0ZUtleUZyb21EYXRhRmllbGQoZGF0YUZpZWxkKTtcblx0XHRcdFx0YWN0aW9uUmVkdWNlci5wdXNoKHtcblx0XHRcdFx0XHR0eXBlOiBBY3Rpb25UeXBlLkRhdGFGaWVsZEZvckFjdGlvbixcblx0XHRcdFx0XHRpZDogZ2V0Rm9ybUlEKGZhY2V0RGVmaW5pdGlvbiwgZGF0YUZpZWxkKSxcblx0XHRcdFx0XHRrZXk6IGtleSxcblx0XHRcdFx0XHR0ZXh0OiBkYXRhRmllbGQuTGFiZWw/LnRvU3RyaW5nKCksXG5cdFx0XHRcdFx0YW5ub3RhdGlvblBhdGg6IFwiXCIsXG5cdFx0XHRcdFx0ZW5hYmxlZDogZ2V0RW5hYmxlZEZvckFubm90YXRpb25BY3Rpb24oY29udmVydGVyQ29udGV4dCwgZGF0YUZpZWxkLkFjdGlvblRhcmdldCksXG5cdFx0XHRcdFx0YmluZGluZzogbmF2aWdhdGlvblByb3BlcnR5UGF0aCA/IGB7ICdwYXRoJyA6ICcke25hdmlnYXRpb25Qcm9wZXJ0eVBhdGh9J31gIDogdW5kZWZpbmVkLFxuXHRcdFx0XHRcdHZpc2libGU6IGNvbXBpbGVFeHByZXNzaW9uKG5vdChlcXVhbChnZXRFeHByZXNzaW9uRnJvbUFubm90YXRpb24oZGF0YUZpZWxkLmFubm90YXRpb25zPy5VST8uSGlkZGVuPy52YWx1ZU9mKCkpLCB0cnVlKSkpLFxuXHRcdFx0XHRcdHJlcXVpcmVzRGlhbG9nOiBpc0FjdGlvbldpdGhEaWFsb2coZGF0YUZpZWxkKSxcblx0XHRcdFx0XHRidXR0b25UeXBlOiBnZXRCdXR0b25UeXBlKGRhdGFGaWVsZC5hbm5vdGF0aW9ucz8uVUk/LkVtcGhhc2l6ZWQpLFxuXHRcdFx0XHRcdHByZXNzOiBjb21waWxlRXhwcmVzc2lvbihcblx0XHRcdFx0XHRcdGZuKFxuXHRcdFx0XHRcdFx0XHRcImludm9rZUFjdGlvblwiLFxuXHRcdFx0XHRcdFx0XHRbXG5cdFx0XHRcdFx0XHRcdFx0ZGF0YUZpZWxkLkFjdGlvbixcblx0XHRcdFx0XHRcdFx0XHR7XG5cdFx0XHRcdFx0XHRcdFx0XHRjb250ZXh0czogZm4oXCJnZXRCaW5kaW5nQ29udGV4dFwiLCBbXSwgcGF0aEluTW9kZWwoXCJcIiwgXCIkc291cmNlXCIpKSxcblx0XHRcdFx0XHRcdFx0XHRcdGludm9jYXRpb25Hcm91cGluZzogKGRhdGFGaWVsZC5JbnZvY2F0aW9uR3JvdXBpbmcgPT09IFwiVUkuT3BlcmF0aW9uR3JvdXBpbmdUeXBlL0NoYW5nZVNldFwiXG5cdFx0XHRcdFx0XHRcdFx0XHRcdD8gXCJDaGFuZ2VTZXRcIlxuXHRcdFx0XHRcdFx0XHRcdFx0XHQ6IFwiSXNvbGF0ZWRcIikgYXMgT3BlcmF0aW9uR3JvdXBpbmdUeXBlLFxuXHRcdFx0XHRcdFx0XHRcdFx0bGFiZWw6IGdldEV4cHJlc3Npb25Gcm9tQW5ub3RhdGlvbihkYXRhRmllbGQuTGFiZWwpLFxuXHRcdFx0XHRcdFx0XHRcdFx0bW9kZWw6IGZuKFwiZ2V0TW9kZWxcIiwgW10sIHBhdGhJbk1vZGVsKFwiL1wiLCBcIiRzb3VyY2VcIikpLFxuXHRcdFx0XHRcdFx0XHRcdFx0aXNOYXZpZ2FibGU6IGlzQWN0aW9uTmF2aWdhYmxlKFxuXHRcdFx0XHRcdFx0XHRcdFx0XHRmb3JtTWFuaWZlc3RBY3Rpb25zQ29uZmlndXJhdGlvbiAmJiBmb3JtTWFuaWZlc3RBY3Rpb25zQ29uZmlndXJhdGlvbltrZXldXG5cdFx0XHRcdFx0XHRcdFx0XHQpXG5cdFx0XHRcdFx0XHRcdFx0fVxuXHRcdFx0XHRcdFx0XHRdLFxuXHRcdFx0XHRcdFx0XHRyZWYoXCIuZWRpdEZsb3dcIilcblx0XHRcdFx0XHRcdClcblx0XHRcdFx0XHQpLFxuXHRcdFx0XHRcdGZhY2V0TmFtZTogZGF0YUZpZWxkLklubGluZSA/IGZhY2V0RGVmaW5pdGlvbi5mdWxseVF1YWxpZmllZE5hbWUgOiB1bmRlZmluZWRcblx0XHRcdFx0fSk7XG5cdFx0XHRcdGJyZWFrO1xuXHRcdFx0ZGVmYXVsdDpcblx0XHRcdFx0YnJlYWs7XG5cdFx0fVxuXHRcdHJldHVybiBhY3Rpb25SZWR1Y2VyO1xuXHR9LCBhY3Rpb25zKTtcblx0Ly8gT3ZlcndyaXRpbmcgb2YgYWN0aW9ucyBoYXBwZW5zIGluIGFkZEZvcm1NZW51QWN0aW9uc1xuXHRyZXR1cm4gaW5zZXJ0Q3VzdG9tRWxlbWVudHMoYWN0aW9ucywgbWFuaWZlc3RBY3Rpb25zKTtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGlzRGlhbG9nKGFjdGlvbkRlZmluaXRpb246IEFjdGlvbiB8IHVuZGVmaW5lZCk6IHN0cmluZyB7XG5cdGlmIChhY3Rpb25EZWZpbml0aW9uKSB7XG5cdFx0Y29uc3QgYkNyaXRpY2FsID0gYWN0aW9uRGVmaW5pdGlvbi5hbm5vdGF0aW9ucz8uQ29tbW9uPy5Jc0FjdGlvbkNyaXRpY2FsO1xuXHRcdGlmIChhY3Rpb25EZWZpbml0aW9uLnBhcmFtZXRlcnMubGVuZ3RoID4gMSB8fCBiQ3JpdGljYWwpIHtcblx0XHRcdHJldHVybiBcIkRpYWxvZ1wiO1xuXHRcdH0gZWxzZSB7XG5cdFx0XHRyZXR1cm4gXCJOb25lXCI7XG5cdFx0fVxuXHR9IGVsc2Uge1xuXHRcdHJldHVybiBcIk5vbmVcIjtcblx0fVxufVxuXG5leHBvcnQgZnVuY3Rpb24gY3JlYXRlQ3VzdG9tU3ViU2VjdGlvbnMoXG5cdG1hbmlmZXN0U3ViU2VjdGlvbnM6IFJlY29yZDxzdHJpbmcsIE1hbmlmZXN0U3ViU2VjdGlvbj4sXG5cdGNvbnZlcnRlckNvbnRleHQ6IENvbnZlcnRlckNvbnRleHRcbik6IFJlY29yZDxzdHJpbmcsIEN1c3RvbU9iamVjdFBhZ2VTdWJTZWN0aW9uPiB7XG5cdGNvbnN0IHN1YlNlY3Rpb25zOiBSZWNvcmQ8c3RyaW5nLCBDdXN0b21PYmplY3RQYWdlU3ViU2VjdGlvbj4gPSB7fTtcblx0T2JqZWN0LmtleXMobWFuaWZlc3RTdWJTZWN0aW9ucykuZm9yRWFjaChcblx0XHQoc3ViU2VjdGlvbktleSkgPT5cblx0XHRcdChzdWJTZWN0aW9uc1tzdWJTZWN0aW9uS2V5XSA9IGNyZWF0ZUN1c3RvbVN1YlNlY3Rpb24obWFuaWZlc3RTdWJTZWN0aW9uc1tzdWJTZWN0aW9uS2V5XSwgc3ViU2VjdGlvbktleSwgY29udmVydGVyQ29udGV4dCkpXG5cdCk7XG5cdHJldHVybiBzdWJTZWN0aW9ucztcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGNyZWF0ZUN1c3RvbVN1YlNlY3Rpb24oXG5cdG1hbmlmZXN0U3ViU2VjdGlvbjogTWFuaWZlc3RTdWJTZWN0aW9uLFxuXHRzdWJTZWN0aW9uS2V5OiBzdHJpbmcsXG5cdGNvbnZlcnRlckNvbnRleHQ6IENvbnZlcnRlckNvbnRleHRcbik6IEN1c3RvbU9iamVjdFBhZ2VTdWJTZWN0aW9uIHtcblx0Y29uc3Qgc2lkZUNvbnRlbnQ6IFNpZGVDb250ZW50RGVmIHwgdW5kZWZpbmVkID0gbWFuaWZlc3RTdWJTZWN0aW9uLnNpZGVDb250ZW50XG5cdFx0PyB7XG5cdFx0XHRcdHRlbXBsYXRlOiBtYW5pZmVzdFN1YlNlY3Rpb24uc2lkZUNvbnRlbnQudGVtcGxhdGUsXG5cdFx0XHRcdGlkOiBnZXRTaWRlQ29udGVudElEKHN1YlNlY3Rpb25LZXkpLFxuXHRcdFx0XHR2aXNpYmxlOiBmYWxzZSxcblx0XHRcdFx0ZXF1YWxTcGxpdDogbWFuaWZlc3RTdWJTZWN0aW9uLnNpZGVDb250ZW50LmVxdWFsU3BsaXRcblx0XHQgIH1cblx0XHQ6IHVuZGVmaW5lZDtcblx0bGV0IHBvc2l0aW9uID0gbWFuaWZlc3RTdWJTZWN0aW9uLnBvc2l0aW9uO1xuXHRpZiAoIXBvc2l0aW9uKSB7XG5cdFx0cG9zaXRpb24gPSB7XG5cdFx0XHRwbGFjZW1lbnQ6IFBsYWNlbWVudC5BZnRlclxuXHRcdH07XG5cdH1cblx0Y29uc3QgaXNWaXNpYmxlID0gbWFuaWZlc3RTdWJTZWN0aW9uLnZpc2libGUgIT09IHVuZGVmaW5lZCA/IG1hbmlmZXN0U3ViU2VjdGlvbi52aXNpYmxlIDogdHJ1ZTtcblx0Y29uc3QgaXNEeW5hbWljRXhwcmVzc2lvbiA9IGlzVmlzaWJsZSAmJiB0eXBlb2YgaXNWaXNpYmxlID09PSBcInN0cmluZ1wiICYmIGlzVmlzaWJsZS5pbmRleE9mKFwiez1cIikgPT09IDA7XG5cdGNvbnN0IG1hbmlmZXN0QWN0aW9ucyA9IGdldEFjdGlvbnNGcm9tTWFuaWZlc3QobWFuaWZlc3RTdWJTZWN0aW9uLmFjdGlvbnMsIGNvbnZlcnRlckNvbnRleHQpO1xuXHRjb25zdCBzdWJTZWN0aW9uRGVmaW5pdGlvbiA9IHtcblx0XHR0eXBlOiBTdWJTZWN0aW9uVHlwZS5Vbmtub3duLFxuXHRcdGlkOiBtYW5pZmVzdFN1YlNlY3Rpb24uaWQgfHwgZ2V0Q3VzdG9tU3ViU2VjdGlvbklEKHN1YlNlY3Rpb25LZXkpLFxuXHRcdGFjdGlvbnM6IG1hbmlmZXN0QWN0aW9ucy5hY3Rpb25zLFxuXHRcdGtleTogc3ViU2VjdGlvbktleSxcblx0XHR0aXRsZTogbWFuaWZlc3RTdWJTZWN0aW9uLnRpdGxlLFxuXHRcdGxldmVsOiAxLFxuXHRcdHBvc2l0aW9uOiBwb3NpdGlvbixcblx0XHR2aXNpYmxlOiBtYW5pZmVzdFN1YlNlY3Rpb24udmlzaWJsZSAhPT0gdW5kZWZpbmVkID8gbWFuaWZlc3RTdWJTZWN0aW9uLnZpc2libGUgOiBcInRydWVcIixcblx0XHRzaWRlQ29udGVudDogc2lkZUNvbnRlbnQsXG5cdFx0aXNWaXNpYmlsaXR5RHluYW1pYzogaXNEeW5hbWljRXhwcmVzc2lvbixcblx0XHRvYmplY3RQYWdlTGF6eUxvYWRlckVuYWJsZWQ6IG1hbmlmZXN0U3ViU2VjdGlvbi5lbmFibGVMYXp5TG9hZGluZyA/PyBmYWxzZSxcblx0XHRjb21wb25lbnROYW1lOiBcIlwiLFxuXHRcdHNldHRpbmdzOiBcIlwiXG5cdH07XG5cdGlmIChtYW5pZmVzdFN1YlNlY3Rpb24udGVtcGxhdGUgfHwgbWFuaWZlc3RTdWJTZWN0aW9uLm5hbWUpIHtcblx0XHRzdWJTZWN0aW9uRGVmaW5pdGlvbi50eXBlID0gU3ViU2VjdGlvblR5cGUuWE1MRnJhZ21lbnQ7XG5cdFx0KHN1YlNlY3Rpb25EZWZpbml0aW9uIGFzIHVua25vd24gYXMgWE1MRnJhZ21lbnRTdWJTZWN0aW9uKS50ZW1wbGF0ZSA9IG1hbmlmZXN0U3ViU2VjdGlvbi50ZW1wbGF0ZSB8fCBtYW5pZmVzdFN1YlNlY3Rpb24ubmFtZSB8fCBcIlwiO1xuXHR9IGVsc2UgaWYgKG1hbmlmZXN0U3ViU2VjdGlvbi5lbWJlZGRlZENvbXBvbmVudCAhPT0gdW5kZWZpbmVkKSB7XG5cdFx0c3ViU2VjdGlvbkRlZmluaXRpb24udHlwZSA9IFN1YlNlY3Rpb25UeXBlLkVtYmVkZGVkQ29tcG9uZW50O1xuXHRcdHN1YlNlY3Rpb25EZWZpbml0aW9uLmNvbXBvbmVudE5hbWUgPSBtYW5pZmVzdFN1YlNlY3Rpb24uZW1iZWRkZWRDb21wb25lbnQubmFtZTtcblx0XHRpZiAobWFuaWZlc3RTdWJTZWN0aW9uLmVtYmVkZGVkQ29tcG9uZW50LnNldHRpbmdzICE9PSB1bmRlZmluZWQpIHtcblx0XHRcdHN1YlNlY3Rpb25EZWZpbml0aW9uLnNldHRpbmdzID0gSlNPTi5zdHJpbmdpZnkobWFuaWZlc3RTdWJTZWN0aW9uLmVtYmVkZGVkQ29tcG9uZW50LnNldHRpbmdzKTtcblx0XHR9XG5cdH0gZWxzZSB7XG5cdFx0c3ViU2VjdGlvbkRlZmluaXRpb24udHlwZSA9IFN1YlNlY3Rpb25UeXBlLlBsYWNlaG9sZGVyO1xuXHR9XG5cdHJldHVybiBzdWJTZWN0aW9uRGVmaW5pdGlvbiBhcyBDdXN0b21PYmplY3RQYWdlU3ViU2VjdGlvbjtcbn1cblxuLyoqXG4gKiBFdmFsdWF0ZSBpZiB0aGUgY29uZGVuc2VkIG1vZGUgY2FuIGJlIGFwcGxpZWQgb24gdGhlIHRhYmxlLlxuICpcbiAqIEBwYXJhbSBjdXJyZW50RmFjZXRcbiAqIEBwYXJhbSBmYWNldHNUb0NyZWF0ZUluU2VjdGlvblxuICogQHBhcmFtIGNvbnZlcnRlckNvbnRleHRcbiAqIEByZXR1cm5zIGB0cnVlYCBmb3IgY29tcGxpYW50LCBmYWxzZSBvdGhlcndpc2VcbiAqL1xuZnVuY3Rpb24gZ2V0Q29uZGVuc2VkVGFibGVMYXlvdXRDb21wbGlhbmNlKFxuXHRjdXJyZW50RmFjZXQ6IEZhY2V0VHlwZXMsXG5cdGZhY2V0c1RvQ3JlYXRlSW5TZWN0aW9uOiBGYWNldFR5cGVzW10sXG5cdGNvbnZlcnRlckNvbnRleHQ6IENvbnZlcnRlckNvbnRleHRcbik6IGJvb2xlYW4ge1xuXHRjb25zdCBtYW5pZmVzdFdyYXBwZXIgPSBjb252ZXJ0ZXJDb250ZXh0LmdldE1hbmlmZXN0V3JhcHBlcigpO1xuXHRpZiAobWFuaWZlc3RXcmFwcGVyLnVzZUljb25UYWJCYXIoKSkge1xuXHRcdC8vIElmIHRoZSBPUCB1c2UgdGhlIHRhYiBiYXNlZCB3ZSBjaGVjayBpZiB0aGUgZmFjZXRzIHRoYXQgd2lsbCBiZSBjcmVhdGVkIGZvciB0aGlzIHNlY3Rpb24gYXJlIGFsbCBub24gdmlzaWJsZVxuXHRcdHJldHVybiBoYXNOb090aGVyVmlzaWJsZVRhYmxlSW5UYXJnZXRzKGN1cnJlbnRGYWNldCwgZmFjZXRzVG9DcmVhdGVJblNlY3Rpb24pO1xuXHR9IGVsc2Uge1xuXHRcdGNvbnN0IGVudGl0eVR5cGUgPSBjb252ZXJ0ZXJDb250ZXh0LmdldEVudGl0eVR5cGUoKTtcblx0XHRpZiAoZW50aXR5VHlwZS5hbm5vdGF0aW9ucz8uVUk/LkZhY2V0cz8ubGVuZ3RoICYmIGVudGl0eVR5cGUuYW5ub3RhdGlvbnM/LlVJPy5GYWNldHM/Lmxlbmd0aCA+IDEpIHtcblx0XHRcdHJldHVybiBoYXNOb090aGVyVmlzaWJsZVRhYmxlSW5UYXJnZXRzKGN1cnJlbnRGYWNldCwgZmFjZXRzVG9DcmVhdGVJblNlY3Rpb24pO1xuXHRcdH0gZWxzZSB7XG5cdFx0XHRyZXR1cm4gdHJ1ZTtcblx0XHR9XG5cdH1cbn1cblxuZnVuY3Rpb24gaGFzTm9PdGhlclZpc2libGVUYWJsZUluVGFyZ2V0cyhjdXJyZW50RmFjZXQ6IEZhY2V0VHlwZXMsIGZhY2V0c1RvQ3JlYXRlSW5TZWN0aW9uOiBGYWNldFR5cGVzW10pOiBib29sZWFuIHtcblx0cmV0dXJuIGZhY2V0c1RvQ3JlYXRlSW5TZWN0aW9uLmV2ZXJ5KGZ1bmN0aW9uIChzdWJGYWNldCkge1xuXHRcdGlmIChzdWJGYWNldCAhPT0gY3VycmVudEZhY2V0KSB7XG5cdFx0XHRpZiAoc3ViRmFjZXQuJFR5cGUgPT09IFVJQW5ub3RhdGlvblR5cGVzLlJlZmVyZW5jZUZhY2V0KSB7XG5cdFx0XHRcdGNvbnN0IHJlZkZhY2V0ID0gc3ViRmFjZXQ7XG5cdFx0XHRcdGlmIChcblx0XHRcdFx0XHRyZWZGYWNldC5UYXJnZXQ/LiR0YXJnZXQ/LnRlcm0gPT09IFVJQW5ub3RhdGlvblRlcm1zLkxpbmVJdGVtIHx8XG5cdFx0XHRcdFx0cmVmRmFjZXQuVGFyZ2V0Py4kdGFyZ2V0Py50ZXJtID09PSBVSUFubm90YXRpb25UZXJtcy5QcmVzZW50YXRpb25WYXJpYW50IHx8XG5cdFx0XHRcdFx0cmVmRmFjZXQuVGFyZ2V0LiR0YXJnZXQ/LnRlcm0gPT09IFVJQW5ub3RhdGlvblRlcm1zLlNlbGVjdGlvblByZXNlbnRhdGlvblZhcmlhbnRcblx0XHRcdFx0KSB7XG5cdFx0XHRcdFx0cmV0dXJuIHJlZkZhY2V0LmFubm90YXRpb25zPy5VST8uSGlkZGVuICE9PSB1bmRlZmluZWQgPyByZWZGYWNldC5hbm5vdGF0aW9ucz8uVUk/LkhpZGRlbiA6IGZhbHNlO1xuXHRcdFx0XHR9XG5cdFx0XHRcdHJldHVybiB0cnVlO1xuXHRcdFx0fSBlbHNlIHtcblx0XHRcdFx0Y29uc3Qgc3ViQ29sbGVjdGlvbkZhY2V0ID0gc3ViRmFjZXQgYXMgQ29sbGVjdGlvbkZhY2V0VHlwZXM7XG5cdFx0XHRcdHJldHVybiBzdWJDb2xsZWN0aW9uRmFjZXQuRmFjZXRzLmV2ZXJ5KGZ1bmN0aW9uIChmYWNldCkge1xuXHRcdFx0XHRcdGNvbnN0IHN1YlJlZkZhY2V0ID0gZmFjZXQgYXMgUmVmZXJlbmNlRmFjZXRUeXBlcztcblx0XHRcdFx0XHRpZiAoXG5cdFx0XHRcdFx0XHRzdWJSZWZGYWNldC5UYXJnZXQ/LiR0YXJnZXQ/LnRlcm0gPT09IFVJQW5ub3RhdGlvblRlcm1zLkxpbmVJdGVtIHx8XG5cdFx0XHRcdFx0XHRzdWJSZWZGYWNldC5UYXJnZXQ/LiR0YXJnZXQ/LnRlcm0gPT09IFVJQW5ub3RhdGlvblRlcm1zLlByZXNlbnRhdGlvblZhcmlhbnQgfHxcblx0XHRcdFx0XHRcdHN1YlJlZkZhY2V0LlRhcmdldD8uJHRhcmdldD8udGVybSA9PT0gVUlBbm5vdGF0aW9uVGVybXMuU2VsZWN0aW9uUHJlc2VudGF0aW9uVmFyaWFudFxuXHRcdFx0XHRcdCkge1xuXHRcdFx0XHRcdFx0cmV0dXJuIHN1YlJlZkZhY2V0LmFubm90YXRpb25zPy5VST8uSGlkZGVuICE9PSB1bmRlZmluZWQgPyBzdWJSZWZGYWNldC5hbm5vdGF0aW9ucz8uVUk/LkhpZGRlbiA6IGZhbHNlO1xuXHRcdFx0XHRcdH1cblx0XHRcdFx0XHRyZXR1cm4gdHJ1ZTtcblx0XHRcdFx0fSk7XG5cdFx0XHR9XG5cdFx0fVxuXHRcdHJldHVybiB0cnVlO1xuXHR9KTtcbn1cbiJdLCJtYXBwaW5ncyI6IjtBQUFBO0FBQUE7QUFBQTs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7O01BcUVZQSxjQUFjO0VBQUEsV0FBZEEsY0FBYztJQUFkQSxjQUFjO0lBQWRBLGNBQWM7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
627
+ //# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJuYW1lcyI6WyJTdWJTZWN0aW9uVHlwZSIsInZpc3VhbGl6YXRpb25UZXJtcyIsImNyZWF0ZVN1YlNlY3Rpb25zIiwiZmFjZXRDb2xsZWN0aW9uIiwiY29udmVydGVyQ29udGV4dCIsImlzSGVhZGVyU2VjdGlvbiIsImZhY2V0c1RvQ3JlYXRlIiwicmVkdWNlIiwiZmFjZXREZWZpbml0aW9uIiwiJFR5cGUiLCJwdXNoIiwiRmFjZXRzIiwiZmluZCIsImZhY2V0VHlwZSIsInNwbGljZSIsImxlbmd0aCIsIm1hcCIsImZhY2V0IiwiY3JlYXRlU3ViU2VjdGlvbiIsImNyZWF0ZUN1c3RvbUhlYWRlckZhY2V0U3ViU2VjdGlvbnMiLCJjdXN0b21IZWFkZXJGYWNldHMiLCJnZXRIZWFkZXJGYWNldHNGcm9tTWFuaWZlc3QiLCJnZXRNYW5pZmVzdFdyYXBwZXIiLCJnZXRIZWFkZXJGYWNldHMiLCJhQ3VzdG9tSGVhZGVyRmFjZXRzIiwiT2JqZWN0Iiwia2V5cyIsImZvckVhY2giLCJrZXkiLCJjdXN0b21IZWFkZXJGYWNldCIsInRlbXBsYXRlRWRpdCIsImNyZWF0ZUN1c3RvbUhlYWRlckZhY2V0U3ViU2VjdGlvbiIsInN1YlNlY3Rpb25JRCIsImdldEN1c3RvbVN1YlNlY3Rpb25JRCIsInN1YlNlY3Rpb24iLCJpZCIsInRpdGxlIiwidHlwZSIsIlhNTEZyYWdtZW50IiwidGVtcGxhdGUiLCJ2aXNpYmxlIiwibGV2ZWwiLCJzaWRlQ29udGVudCIsInVuZGVmaW5lZCIsInN0YXNoZWQiLCJmbGV4U2V0dGluZ3MiLCJhY3Rpb25zIiwib2JqZWN0UGFnZUxhenlMb2FkZXJFbmFibGVkIiwiZ2V0U3ViU2VjdGlvbktleSIsImZhbGxiYWNrIiwiSUQiLCJ0b1N0cmluZyIsIkxhYmVsIiwiYWRkRm9ybU1lbnVBY3Rpb25zIiwiaGlkZGVuQWN0aW9ucyIsImdldEZvcm1IaWRkZW5BY3Rpb25zIiwiZm9ybUFjdGlvbnMiLCJnZXRGb3JtQWN0aW9ucyIsIm1hbmlmZXN0QWN0aW9ucyIsImdldEFjdGlvbnNGcm9tTWFuaWZlc3QiLCJhY3Rpb25PdmVyd3JpdGVDb25maWciLCJlbmFibGVkIiwiT3ZlcnJpZGVUeXBlIiwib3ZlcndyaXRlIiwiY29tbWFuZCIsImZvcm1BbGxBY3Rpb25zIiwiaW5zZXJ0Q3VzdG9tRWxlbWVudHMiLCJnZXRWaXNpYmlsaXR5RW5hYmxlbWVudEZvcm1NZW51QWN0aW9ucyIsInJlbW92ZUR1cGxpY2F0ZUFjdGlvbnMiLCJjb21tYW5kQWN0aW9ucyIsImdldEZhY2V0QWN0aW9ucyIsImZpbHRlciIsInN1YkZhY2V0RGVmaW5pdGlvbiIsImlzUmVmZXJlbmNlRmFjZXQiLCJhY3Rpb25SZWR1Y2VyIiwicmVmZXJlbmNlRmFjZXQiLCJjcmVhdGVGb3JtQWN0aW9uUmVkdWNlciIsImdldEJ1dHRvblR5cGUiLCJlbXBoYXNpemVkIiwiYnV0dG9uVHlwZUNvbmRpdGlvbiIsImVxdWFsIiwiZ2V0RXhwcmVzc2lvbkZyb21Bbm5vdGF0aW9uIiwiY29tcGlsZUV4cHJlc3Npb24iLCJpZkVsc2UiLCJCdXR0b25UeXBlIiwiR2hvc3QiLCJUcmFuc3BhcmVudCIsImhhc1NpbmdsZUNvbnRlbnQiLCJnZXRTdWJTZWN0aW9uSUQiLCJvSGlkZGVuQW5ub3RhdGlvbiIsImFubm90YXRpb25zIiwiVUkiLCJIaWRkZW4iLCJpc1Zpc2libGVFeHByZXNzaW9uIiwibm90IiwiaXNWaXNpYmxlIiwiaXNEeW5hbWljRXhwcmVzc2lvbiIsImluZGV4T2YiLCJpc1BhdGhBbm5vdGF0aW9uRXhwcmVzc2lvbiIsImlzVmlzaWJsZUR5bmFtaWNFeHByZXNzaW9uIiwic3Vic3RyaW5nIiwibGFzdEluZGV4T2YiLCJVbmtub3duIiwiYW5ub3RhdGlvblBhdGgiLCJnZXRFbnRpdHlTZXRCYXNlZEFubm90YXRpb25QYXRoIiwiZnVsbHlRdWFsaWZpZWROYW1lIiwiaXNWaXNpYmlsaXR5RHluYW1pYyIsImdldEVuYWJsZUxhenlMb2FkaW5nIiwiZ2V0U3Rhc2hlZFNldHRpbmdzRm9ySGVhZGVyRmFjZXQiLCJkZXNpZ250aW1lIiwiZ2V0RGVzaWduVGltZU1ldGFkYXRhU2V0dGluZ3NGb3JIZWFkZXJGYWNldCIsInVuc3VwcG9ydGVkVGV4dCIsImZhY2V0cyIsInZpc3VhbGl6YXRpb25GYWNldHMiLCJpbmRleCIsImluY2x1ZGVzIiwiVGFyZ2V0IiwiJHRhcmdldCIsInRlcm0iLCJub25WaXN1YWxpemF0aW9uRmFjZXRzIiwidmlzdWFsaXphdGlvbiIsInZpc3VhbGl6YXRpb25Db250ZW50IiwiZm9ybUNvbnRlbnQiLCJtaXhlZENvbnRlbnQiLCJMb2ciLCJ3YXJuaW5nIiwiZmFrZUZvcm1GYWNldCIsIm1peGVkU3ViU2VjdGlvbiIsIk1peGVkIiwiY29udGVudCIsImZhY2V0QWN0aW9ucyIsImZvcm1Db2xsZWN0aW9uU3ViU2VjdGlvbiIsIkZvcm0iLCJmb3JtRGVmaW5pdGlvbiIsImNyZWF0ZUZvcm1EZWZpbml0aW9uIiwiYWN0aW9uIiwiZmFjZXROYW1lIiwidmFsdWUiLCJwcmVzZW50YXRpb24iLCJnZXREYXRhVmlzdWFsaXphdGlvbkNvbmZpZ3VyYXRpb24iLCJnZXRDb25kZW5zZWRUYWJsZUxheW91dENvbXBsaWFuY2UiLCJzdWJTZWN0aW9uVGl0bGUiLCJjb250cm9sVGl0bGUiLCJ2aXN1YWxpemF0aW9ucyIsImFubm90YXRpb24iLCJpc1BhcnRPZlByZXZpZXciLCJQYXJ0T2ZQcmV2aWV3IiwidmFsdWVPZiIsInNob3dUaXRsZSIsImdldFRpdGxlVmlzaWJpbGl0eSIsInRpdGxlVmlzaWJsZSIsImFuZCIsImRhdGFWaXN1YWxpemF0aW9uU3ViU2VjdGlvbiIsIkRhdGFWaXN1YWxpemF0aW9uIiwiZm9ybUVsZW1lbnRTdWJTZWN0aW9uIiwidW5zdXBwb3J0ZWRTdWJTZWN0aW9uIiwidGV4dCIsIm9yIiwibm90RXF1YWwiLCJyZXNvbHZlQmluZGluZ1N0cmluZyIsInJlZmVyZW5jZVRhcmdldCIsInRhcmdldFZhbHVlIiwiZGF0YUZpZWxkQ29sbGVjdGlvbiIsIm5hdmlnYXRpb25Qcm9wZXJ0eVBhdGgiLCJzcGxpdCIsInN1YnN0ciIsIkRhdGEiLCJnZXRNYW5pZmVzdENvbnRyb2xDb25maWd1cmF0aW9uIiwicXVhbGlmaWVyIiwiZGF0YUZpZWxkIiwiUmVxdWlyZXNDb250ZXh0IiwiZ2V0RGlhZ25vc3RpY3MiLCJhZGRJc3N1ZSIsIklzc3VlQ2F0ZWdvcnkiLCJBbm5vdGF0aW9uIiwiSXNzdWVTZXZlcml0eSIsIkxvdyIsIklzc3VlVHlwZSIsIk1BTEZPUk1FRF9EQVRBRklFTERfRk9SX0lCTiIsIlJFUVVJUkVTQ09OVEVYVCIsIklubGluZSIsIklOTElORSIsIkRldGVybWluaW5nIiwiREVURVJNSU5JTkciLCJtTmF2aWdhdGlvblBhcmFtZXRlcnMiLCJNYXBwaW5nIiwic2VtYW50aWNPYmplY3RNYXBwaW5nIiwiZ2V0U2VtYW50aWNPYmplY3RNYXBwaW5nIiwiQWN0aW9uVHlwZSIsIkRhdGFGaWVsZEZvckludGVudEJhc2VkTmF2aWdhdGlvbiIsImdldEZvcm1JRCIsIktleUhlbHBlciIsImdlbmVyYXRlS2V5RnJvbURhdGFGaWVsZCIsIk5hdmlnYXRpb25BdmFpbGFibGUiLCJidXR0b25UeXBlIiwiRW1waGFzaXplZCIsInByZXNzIiwiZm4iLCJTZW1hbnRpY09iamVjdCIsIkFjdGlvbiIsImN1c3RvbURhdGEiLCJzZW1hbnRpY09iamVjdCIsImZvcm1NYW5pZmVzdEFjdGlvbnNDb25maWd1cmF0aW9uIiwiRGF0YUZpZWxkRm9yQWN0aW9uIiwiZ2V0RW5hYmxlZEZvckFubm90YXRpb25BY3Rpb24iLCJBY3Rpb25UYXJnZXQiLCJiaW5kaW5nIiwicmVxdWlyZXNEaWFsb2ciLCJpc0FjdGlvbldpdGhEaWFsb2ciLCJjb250ZXh0cyIsInBhdGhJbk1vZGVsIiwiaW52b2NhdGlvbkdyb3VwaW5nIiwiSW52b2NhdGlvbkdyb3VwaW5nIiwibGFiZWwiLCJtb2RlbCIsImlzTmF2aWdhYmxlIiwiaXNBY3Rpb25OYXZpZ2FibGUiLCJyZWYiLCJpc0RpYWxvZyIsImFjdGlvbkRlZmluaXRpb24iLCJiQ3JpdGljYWwiLCJDb21tb24iLCJJc0FjdGlvbkNyaXRpY2FsIiwicGFyYW1ldGVycyIsImNyZWF0ZUN1c3RvbVN1YlNlY3Rpb25zIiwibWFuaWZlc3RTdWJTZWN0aW9ucyIsInN1YlNlY3Rpb25zIiwic3ViU2VjdGlvbktleSIsImNyZWF0ZUN1c3RvbVN1YlNlY3Rpb24iLCJtYW5pZmVzdFN1YlNlY3Rpb24iLCJnZXRTaWRlQ29udGVudElEIiwiZXF1YWxTcGxpdCIsInBvc2l0aW9uIiwicGxhY2VtZW50IiwiUGxhY2VtZW50IiwiQWZ0ZXIiLCJzdWJTZWN0aW9uRGVmaW5pdGlvbiIsImVuYWJsZUxhenlMb2FkaW5nIiwiY29tcG9uZW50TmFtZSIsInNldHRpbmdzIiwibmFtZSIsImVtYmVkZGVkQ29tcG9uZW50IiwiRW1iZWRkZWRDb21wb25lbnQiLCJKU09OIiwic3RyaW5naWZ5IiwiUGxhY2Vob2xkZXIiLCJjdXJyZW50RmFjZXQiLCJmYWNldHNUb0NyZWF0ZUluU2VjdGlvbiIsIm1hbmlmZXN0V3JhcHBlciIsInVzZUljb25UYWJCYXIiLCJoYXNOb090aGVyVmlzaWJsZVRhYmxlSW5UYXJnZXRzIiwiZW50aXR5VHlwZSIsImdldEVudGl0eVR5cGUiLCJldmVyeSIsInN1YkZhY2V0IiwicmVmRmFjZXQiLCJzdWJDb2xsZWN0aW9uRmFjZXQiLCJzdWJSZWZGYWNldCJdLCJzb3VyY2VSb290IjoiLiIsInNvdXJjZXMiOlsiU3ViU2VjdGlvbi50cyJdLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgdHlwZSB7IEFjdGlvbiB9IGZyb20gXCJAc2FwLXV4L3ZvY2FidWxhcmllcy10eXBlcy9FZG1cIjtcbmltcG9ydCB7IENvbW11bmljYXRpb25Bbm5vdGF0aW9uVGVybXMgfSBmcm9tIFwiQHNhcC11eC92b2NhYnVsYXJpZXMtdHlwZXMvdm9jYWJ1bGFyaWVzL0NvbW11bmljYXRpb25cIjtcbmltcG9ydCB0eXBlIHtcblx0Q29sbGVjdGlvbkZhY2V0LFxuXHRDb2xsZWN0aW9uRmFjZXRUeXBlcyxcblx0RGF0YUZpZWxkQWJzdHJhY3RUeXBlcyxcblx0RW1waGFzaXplZCxcblx0RmFjZXRUeXBlcyxcblx0RmllbGRHcm91cCxcblx0T3BlcmF0aW9uR3JvdXBpbmdUeXBlLFxuXHRSZWZlcmVuY2VGYWNldCxcblx0UmVmZXJlbmNlRmFjZXRUeXBlc1xufSBmcm9tIFwiQHNhcC11eC92b2NhYnVsYXJpZXMtdHlwZXMvdm9jYWJ1bGFyaWVzL1VJXCI7XG5pbXBvcnQgeyBVSUFubm90YXRpb25UZXJtcywgVUlBbm5vdGF0aW9uVHlwZXMgfSBmcm9tIFwiQHNhcC11eC92b2NhYnVsYXJpZXMtdHlwZXMvdm9jYWJ1bGFyaWVzL1VJXCI7XG5pbXBvcnQgTG9nIGZyb20gXCJzYXAvYmFzZS9Mb2dcIjtcbmltcG9ydCB0eXBlIHsgTmF2aWdhdGlvblBhcmFtZXRlcnMgfSBmcm9tIFwic2FwL2ZlL2NvcmUvY29udHJvbGxlcmV4dGVuc2lvbnMvSW50ZXJuYWxJbnRlbnRCYXNlZE5hdmlnYXRpb25cIjtcbmltcG9ydCB0eXBlIHtcblx0QmFzZUFjdGlvbixcblx0Q29tYmluZWRBY3Rpb24sXG5cdENvbnZlcnRlckFjdGlvbixcblx0Q3VzdG9tQWN0aW9uLFxuXHRPdmVycmlkZVR5cGVBY3Rpb25cbn0gZnJvbSBcInNhcC9mZS9jb3JlL2NvbnZlcnRlcnMvY29udHJvbHMvQ29tbW9uL0FjdGlvblwiO1xuaW1wb3J0IHtcblx0QnV0dG9uVHlwZSxcblx0Z2V0QWN0aW9uc0Zyb21NYW5pZmVzdCxcblx0Z2V0RW5hYmxlZEZvckFubm90YXRpb25BY3Rpb24sXG5cdGdldFNlbWFudGljT2JqZWN0TWFwcGluZyxcblx0aXNBY3Rpb25OYXZpZ2FibGUsXG5cdHJlbW92ZUR1cGxpY2F0ZUFjdGlvbnNcbn0gZnJvbSBcInNhcC9mZS9jb3JlL2NvbnZlcnRlcnMvY29udHJvbHMvQ29tbW9uL0FjdGlvblwiO1xuaW1wb3J0IHR5cGUgeyBDaGFydFZpc3VhbGl6YXRpb24gfSBmcm9tIFwic2FwL2ZlL2NvcmUvY29udmVydGVycy9jb250cm9scy9Db21tb24vQ2hhcnRcIjtcbmltcG9ydCB0eXBlIHsgVGFibGVWaXN1YWxpemF0aW9uIH0gZnJvbSBcInNhcC9mZS9jb3JlL2NvbnZlcnRlcnMvY29udHJvbHMvQ29tbW9uL1RhYmxlXCI7XG5pbXBvcnQgdHlwZSB7IEN1c3RvbU9iamVjdFBhZ2VIZWFkZXJGYWNldCwgRmxleFNldHRpbmdzIH0gZnJvbSBcInNhcC9mZS9jb3JlL2NvbnZlcnRlcnMvY29udHJvbHMvT2JqZWN0UGFnZS9IZWFkZXJGYWNldFwiO1xuaW1wb3J0IHtcblx0Z2V0RGVzaWduVGltZU1ldGFkYXRhU2V0dGluZ3NGb3JIZWFkZXJGYWNldCxcblx0Z2V0SGVhZGVyRmFjZXRzRnJvbU1hbmlmZXN0LFxuXHRnZXRTdGFzaGVkU2V0dGluZ3NGb3JIZWFkZXJGYWNldFxufSBmcm9tIFwic2FwL2ZlL2NvcmUvY29udmVydGVycy9jb250cm9scy9PYmplY3RQYWdlL0hlYWRlckZhY2V0XCI7XG5pbXBvcnQgeyBJc3N1ZUNhdGVnb3J5LCBJc3N1ZVNldmVyaXR5LCBJc3N1ZVR5cGUgfSBmcm9tIFwic2FwL2ZlL2NvcmUvY29udmVydGVycy9oZWxwZXJzL0lzc3VlTWFuYWdlclwiO1xuaW1wb3J0IHsgS2V5SGVscGVyIH0gZnJvbSBcInNhcC9mZS9jb3JlL2NvbnZlcnRlcnMvaGVscGVycy9LZXlcIjtcbmltcG9ydCB0eXBlIHsgQmluZGluZ1Rvb2xraXRFeHByZXNzaW9uLCBDb21waWxlZEJpbmRpbmdUb29sa2l0RXhwcmVzc2lvbiB9IGZyb20gXCJzYXAvZmUvY29yZS9oZWxwZXJzL0JpbmRpbmdUb29sa2l0XCI7XG5pbXBvcnQge1xuXHRhbmQsXG5cdGNvbXBpbGVFeHByZXNzaW9uLFxuXHRlcXVhbCxcblx0Zm4sXG5cdGdldEV4cHJlc3Npb25Gcm9tQW5ub3RhdGlvbixcblx0aWZFbHNlLFxuXHRub3QsXG5cdG5vdEVxdWFsLFxuXHRvcixcblx0cGF0aEluTW9kZWwsXG5cdHJlZixcblx0cmVzb2x2ZUJpbmRpbmdTdHJpbmdcbn0gZnJvbSBcInNhcC9mZS9jb3JlL2hlbHBlcnMvQmluZGluZ1Rvb2xraXRcIjtcbmltcG9ydCB7IGlzUGF0aEFubm90YXRpb25FeHByZXNzaW9uIH0gZnJvbSBcInNhcC9mZS9jb3JlL2hlbHBlcnMvVHlwZUd1YXJkc1wiO1xuaW1wb3J0IHsgaXNBY3Rpb25XaXRoRGlhbG9nIH0gZnJvbSBcIi4uLy4uL2Fubm90YXRpb25zL0RhdGFGaWVsZFwiO1xuaW1wb3J0IHR5cGUgQ29udmVydGVyQ29udGV4dCBmcm9tIFwiLi4vLi4vQ29udmVydGVyQ29udGV4dFwiO1xuaW1wb3J0IHR5cGUgeyBDb25maWd1cmFibGVPYmplY3QsIENvbmZpZ3VyYWJsZVJlY29yZCwgQ3VzdG9tRWxlbWVudCB9IGZyb20gXCIuLi8uLi9oZWxwZXJzL0NvbmZpZ3VyYWJsZU9iamVjdFwiO1xuaW1wb3J0IHsgaW5zZXJ0Q3VzdG9tRWxlbWVudHMsIE92ZXJyaWRlVHlwZSwgUGxhY2VtZW50IH0gZnJvbSBcIi4uLy4uL2hlbHBlcnMvQ29uZmlndXJhYmxlT2JqZWN0XCI7XG5pbXBvcnQgeyBnZXRDdXN0b21TdWJTZWN0aW9uSUQsIGdldEZvcm1JRCwgZ2V0U2lkZUNvbnRlbnRJRCwgZ2V0U3ViU2VjdGlvbklEIH0gZnJvbSBcIi4uLy4uL2hlbHBlcnMvSURcIjtcbmltcG9ydCB0eXBlIHsgTWFuaWZlc3RBY3Rpb24sIE1hbmlmZXN0U3ViU2VjdGlvbiB9IGZyb20gXCIuLi8uLi9NYW5pZmVzdFNldHRpbmdzXCI7XG5pbXBvcnQgeyBBY3Rpb25UeXBlIH0gZnJvbSBcIi4uLy4uL01hbmlmZXN0U2V0dGluZ3NcIjtcbmltcG9ydCB7IGdldEZvcm1BY3Rpb25zLCBnZXRGb3JtSGlkZGVuQWN0aW9ucywgZ2V0VmlzaWJpbGl0eUVuYWJsZW1lbnRGb3JtTWVudUFjdGlvbnMgfSBmcm9tIFwiLi4vLi4vb2JqZWN0UGFnZS9Gb3JtTWVudUFjdGlvbnNcIjtcbmltcG9ydCB0eXBlIHsgRGF0YVZpc3VhbGl6YXRpb25EZWZpbml0aW9uIH0gZnJvbSBcIi4uL0NvbW1vbi9EYXRhVmlzdWFsaXphdGlvblwiO1xuaW1wb3J0IHsgZ2V0RGF0YVZpc3VhbGl6YXRpb25Db25maWd1cmF0aW9uIH0gZnJvbSBcIi4uL0NvbW1vbi9EYXRhVmlzdWFsaXphdGlvblwiO1xuaW1wb3J0IHR5cGUgeyBGb3JtRGVmaW5pdGlvbiB9IGZyb20gXCIuLi9Db21tb24vRm9ybVwiO1xuaW1wb3J0IHsgY3JlYXRlRm9ybURlZmluaXRpb24sIGlzUmVmZXJlbmNlRmFjZXQgfSBmcm9tIFwiLi4vQ29tbW9uL0Zvcm1cIjtcblxuZXhwb3J0IGVudW0gU3ViU2VjdGlvblR5cGUge1xuXHRVbmtub3duID0gXCJVbmtub3duXCIsIC8vIERlZmF1bHQgVHlwZVxuXHRGb3JtID0gXCJGb3JtXCIsXG5cdERhdGFWaXN1YWxpemF0aW9uID0gXCJEYXRhVmlzdWFsaXphdGlvblwiLFxuXHRYTUxGcmFnbWVudCA9IFwiWE1MRnJhZ21lbnRcIixcblx0UGxhY2Vob2xkZXIgPSBcIlBsYWNlaG9sZGVyXCIsXG5cdE1peGVkID0gXCJNaXhlZFwiLFxuXHRFbWJlZGRlZENvbXBvbmVudCA9IFwiRW1iZWRkZWRDb21wb25lbnRcIlxufVxuXG5leHBvcnQgdHlwZSBPYmplY3RQYWdlU3ViU2VjdGlvbiA9XG5cdHwgVW5zdXBwb3J0ZWRTdWJTZWN0aW9uXG5cdHwgRm9ybVN1YlNlY3Rpb25cblx0fCBEYXRhVmlzdWFsaXphdGlvblN1YlNlY3Rpb25cblx0fCBDb250YWN0U3ViU2VjdGlvblxuXHR8IFhNTEZyYWdtZW50U3ViU2VjdGlvblxuXHR8IFBsYWNlaG9sZGVyRnJhZ21lbnRTdWJTZWN0aW9uXG5cdHwgTWl4ZWRTdWJTZWN0aW9uXG5cdHwgUmV1c2VDb21wb25lbnRTdWJTZWN0aW9uO1xuXG50eXBlIEJhc2VTdWJTZWN0aW9uID0ge1xuXHRpZDogc3RyaW5nO1xuXHRrZXk6IHN0cmluZztcblx0dGl0bGU6IENvbXBpbGVkQmluZGluZ1Rvb2xraXRFeHByZXNzaW9uO1xuXHRhbm5vdGF0aW9uUGF0aDogc3RyaW5nO1xuXHR0eXBlOiBTdWJTZWN0aW9uVHlwZTtcblx0dmlzaWJsZTogQ29tcGlsZWRCaW5kaW5nVG9vbGtpdEV4cHJlc3Npb247XG5cdGlzVmlzaWJpbGl0eUR5bmFtaWM/OiBib29sZWFuIHwgXCJcIjtcblx0ZmxleFNldHRpbmdzPzogRmxleFNldHRpbmdzO1xuXHRzdGFzaGVkPzogYm9vbGVhbjtcblx0bGV2ZWw6IG51bWJlcjtcblx0Y29udGVudD86IEFycmF5PE9iamVjdFBhZ2VTdWJTZWN0aW9uPjtcblx0c2lkZUNvbnRlbnQ/OiBTaWRlQ29udGVudERlZjtcblx0b2JqZWN0UGFnZUxhenlMb2FkZXJFbmFibGVkOiBib29sZWFuO1xuXHRjbGFzcz86IHN0cmluZztcbn07XG5cbnR5cGUgVW5zdXBwb3J0ZWRTdWJTZWN0aW9uID0gQmFzZVN1YlNlY3Rpb24gJiB7XG5cdHRleHQ6IHN0cmluZztcbn07XG5cbmV4cG9ydCB0eXBlIERhdGFWaXN1YWxpemF0aW9uU3ViU2VjdGlvbiA9IEJhc2VTdWJTZWN0aW9uICYge1xuXHR0eXBlOiBTdWJTZWN0aW9uVHlwZS5EYXRhVmlzdWFsaXphdGlvbjtcblx0cHJlc2VudGF0aW9uOiBEYXRhVmlzdWFsaXphdGlvbkRlZmluaXRpb247XG5cdHNob3dUaXRsZTogYm9vbGVhbiB8IENvbXBpbGVkQmluZGluZ1Rvb2xraXRFeHByZXNzaW9uO1xuXHR0aXRsZVZpc2libGU/OiBzdHJpbmcgfCBib29sZWFuO1xuXHRpc1BhcnRPZlByZXZpZXc/OiBib29sZWFuO1xufTtcblxudHlwZSBDb250YWN0U3ViU2VjdGlvbiA9IFVuc3VwcG9ydGVkU3ViU2VjdGlvbjtcblxudHlwZSBYTUxGcmFnbWVudFN1YlNlY3Rpb24gPSBPbWl0PEJhc2VTdWJTZWN0aW9uLCBcImFubm90YXRpb25QYXRoXCI+ICYge1xuXHR0eXBlOiBTdWJTZWN0aW9uVHlwZS5YTUxGcmFnbWVudDtcblx0dGVtcGxhdGU6IHN0cmluZztcblx0YWN0aW9uczogUmVjb3JkPHN0cmluZywgQ3VzdG9tQWN0aW9uPjtcbn07XG5cbnR5cGUgUmV1c2VDb21wb25lbnRTdWJTZWN0aW9uID0gQmFzZVN1YlNlY3Rpb24gJiB7XG5cdHR5cGU6IFN1YlNlY3Rpb25UeXBlLkVtYmVkZGVkQ29tcG9uZW50O1xuXHRjb21wb25lbnROYW1lOiBzdHJpbmc7XG5cdHNldHRpbmdzOiBzdHJpbmc7XG59O1xuXG50eXBlIFBsYWNlaG9sZGVyRnJhZ21lbnRTdWJTZWN0aW9uID0gT21pdDxCYXNlU3ViU2VjdGlvbiwgXCJhbm5vdGF0aW9uUGF0aFwiPiAmIHtcblx0dHlwZTogU3ViU2VjdGlvblR5cGUuUGxhY2Vob2xkZXI7XG5cdGFjdGlvbnM6IFJlY29yZDxzdHJpbmcsIEN1c3RvbUFjdGlvbj47XG59O1xuXG5leHBvcnQgdHlwZSBNaXhlZFN1YlNlY3Rpb24gPSBCYXNlU3ViU2VjdGlvbiAmIHtcblx0Y29udGVudDogQXJyYXk8T2JqZWN0UGFnZVN1YlNlY3Rpb24+O1xufTtcblxuZXhwb3J0IHR5cGUgRm9ybVN1YlNlY3Rpb24gPSBCYXNlU3ViU2VjdGlvbiAmIHtcblx0dHlwZTogU3ViU2VjdGlvblR5cGUuRm9ybTtcblx0Zm9ybURlZmluaXRpb246IEZvcm1EZWZpbml0aW9uO1xuXHRhY3Rpb25zOiBDb252ZXJ0ZXJBY3Rpb25bXSB8IEJhc2VBY3Rpb25bXTtcblx0Y29tbWFuZEFjdGlvbnM6IFJlY29yZDxzdHJpbmcsIEN1c3RvbUFjdGlvbj47XG59O1xuXG5leHBvcnQgdHlwZSBPYmplY3RQYWdlU2VjdGlvbiA9IENvbmZpZ3VyYWJsZU9iamVjdCAmIHtcblx0aWQ6IHN0cmluZztcblx0dGl0bGU6IENvbXBpbGVkQmluZGluZ1Rvb2xraXRFeHByZXNzaW9uO1xuXHRzaG93VGl0bGU/OiBib29sZWFuO1xuXHR2aXNpYmxlOiBDb21waWxlZEJpbmRpbmdUb29sa2l0RXhwcmVzc2lvbjtcblx0c3ViU2VjdGlvbnM6IE9iamVjdFBhZ2VTdWJTZWN0aW9uW107XG59O1xuXG50eXBlIFNpZGVDb250ZW50RGVmID0ge1xuXHR0ZW1wbGF0ZT86IHN0cmluZztcblx0aWQ/OiBzdHJpbmc7XG5cdHNpZGVDb250ZW50RmFsbERvd24/OiBzdHJpbmc7XG5cdGNvbnRhaW5lclF1ZXJ5Pzogc3RyaW5nO1xuXHR2aXNpYmxlPzogYm9vbGVhbjtcblx0ZXF1YWxTcGxpdD86IGJvb2xlYW47XG59O1xuXG5leHBvcnQgdHlwZSBDdXN0b21PYmplY3RQYWdlU2VjdGlvbiA9IEN1c3RvbUVsZW1lbnQ8T2JqZWN0UGFnZVNlY3Rpb24+O1xuXG5leHBvcnQgdHlwZSBDdXN0b21PYmplY3RQYWdlU3ViU2VjdGlvbiA9IEN1c3RvbUVsZW1lbnQ8T2JqZWN0UGFnZVN1YlNlY3Rpb24+O1xuXG5jb25zdCB2aXN1YWxpemF0aW9uVGVybXM6IHN0cmluZ1tdID0gW1xuXHRVSUFubm90YXRpb25UZXJtcy5MaW5lSXRlbSxcblx0VUlBbm5vdGF0aW9uVGVybXMuQ2hhcnQsXG5cdFVJQW5ub3RhdGlvblRlcm1zLlByZXNlbnRhdGlvblZhcmlhbnQsXG5cdFVJQW5ub3RhdGlvblRlcm1zLlNlbGVjdGlvblByZXNlbnRhdGlvblZhcmlhbnRcbl07XG5cbi8qKlxuICogQ3JlYXRlIHN1YnNlY3Rpb25zIGJhc2VkIG9uIGZhY2V0IGRlZmluaXRpb24uXG4gKlxuICogQHBhcmFtIGZhY2V0Q29sbGVjdGlvbiBDb2xsZWN0aW9uIG9mIGZhY2V0c1xuICogQHBhcmFtIGNvbnZlcnRlckNvbnRleHQgVGhlIGNvbnZlcnRlciBjb250ZXh0XG4gKiBAcGFyYW0gaXNIZWFkZXJTZWN0aW9uIFRydWUgaWYgaGVhZGVyIHNlY3Rpb24gaXMgZ2VuZXJhdGVkIGluIHRoaXMgaXRlcmF0aW9uXG4gKiBAcmV0dXJucyBUaGUgY3VycmVudCBzdWJzZWN0aW9uc1xuICovXG5leHBvcnQgZnVuY3Rpb24gY3JlYXRlU3ViU2VjdGlvbnMoXG5cdGZhY2V0Q29sbGVjdGlvbjogRmFjZXRUeXBlc1tdLFxuXHRjb252ZXJ0ZXJDb250ZXh0OiBDb252ZXJ0ZXJDb250ZXh0LFxuXHRpc0hlYWRlclNlY3Rpb24/OiBib29sZWFuXG4pOiBPYmplY3RQYWdlU3ViU2VjdGlvbltdIHtcblx0Ly8gRmlyc3Qgd2UgZGV0ZXJtaW5lIHdoaWNoIHN1YiBzZWN0aW9uIHdlIG5lZWQgdG8gY3JlYXRlXG5cdGNvbnN0IGZhY2V0c1RvQ3JlYXRlID0gZmFjZXRDb2xsZWN0aW9uLnJlZHVjZSgoZmFjZXRzVG9DcmVhdGU6IEZhY2V0VHlwZXNbXSwgZmFjZXREZWZpbml0aW9uKSA9PiB7XG5cdFx0c3dpdGNoIChmYWNldERlZmluaXRpb24uJFR5cGUpIHtcblx0XHRcdGNhc2UgVUlBbm5vdGF0aW9uVHlwZXMuUmVmZXJlbmNlRmFjZXQ6XG5cdFx0XHRcdGZhY2V0c1RvQ3JlYXRlLnB1c2goZmFjZXREZWZpbml0aW9uKTtcblx0XHRcdFx0YnJlYWs7XG5cdFx0XHRjYXNlIFVJQW5ub3RhdGlvblR5cGVzLkNvbGxlY3Rpb25GYWNldDpcblx0XHRcdFx0Ly8gVE9ETyBJZiB0aGUgQ29sbGVjdGlvbiBGYWNldCBoYXMgYSBjaGlsZCBvZiB0eXBlIENvbGxlY3Rpb24gRmFjZXQgd2UgYnJpbmcgdGhlbSB1cCBvbmUgbGV2ZWwgKEZvcm0gKyBUYWJsZSB1c2UgY2FzZSkgP1xuXHRcdFx0XHQvLyBmaXJzdCBjYXNlIGZhY2V0IENvbGxlY3Rpb24gaXMgY29tYmluYXRpb24gb2YgY29sbGVjdGlvbiBhbmQgcmVmZXJlbmNlIGZhY2V0IG9yIG5vdCBhbGwgZmFjZXRzIGFyZSByZWZlcmVuY2UgZmFjZXRzLlxuXHRcdFx0XHRpZiAoZmFjZXREZWZpbml0aW9uLkZhY2V0cy5maW5kKChmYWNldFR5cGUpID0+IGZhY2V0VHlwZS4kVHlwZSA9PT0gVUlBbm5vdGF0aW9uVHlwZXMuQ29sbGVjdGlvbkZhY2V0KSkge1xuXHRcdFx0XHRcdGZhY2V0c1RvQ3JlYXRlLnNwbGljZShmYWNldHNUb0NyZWF0ZS5sZW5ndGgsIDAsIC4uLmZhY2V0RGVmaW5pdGlvbi5GYWNldHMpO1xuXHRcdFx0XHR9IGVsc2Uge1xuXHRcdFx0XHRcdGZhY2V0c1RvQ3JlYXRlLnB1c2goZmFjZXREZWZpbml0aW9uKTtcblx0XHRcdFx0fVxuXHRcdFx0XHRicmVhaztcblx0XHRcdGNhc2UgVUlBbm5vdGF0aW9uVHlwZXMuUmVmZXJlbmNlVVJMRmFjZXQ6XG5cdFx0XHRcdC8vIE5vdCBzdXBwb3J0ZWRcblx0XHRcdFx0YnJlYWs7XG5cdFx0fVxuXHRcdHJldHVybiBmYWNldHNUb0NyZWF0ZTtcblx0fSwgW10pO1xuXG5cdC8vIFRoZW4gd2UgY3JlYXRlIHRoZSBhY3R1YWwgc3Vic2VjdGlvbnNcblx0cmV0dXJuIGZhY2V0c1RvQ3JlYXRlLm1hcCgoZmFjZXQpID0+XG5cdFx0Y3JlYXRlU3ViU2VjdGlvbihmYWNldCwgZmFjZXRzVG9DcmVhdGUsIGNvbnZlcnRlckNvbnRleHQsIDAsICEoZmFjZXQgYXMgQ29sbGVjdGlvbkZhY2V0KT8uRmFjZXRzPy5sZW5ndGgsIGlzSGVhZGVyU2VjdGlvbilcblx0KTtcbn1cblxuLyoqXG4gKiBDcmVhdGVzIHN1YnNlY3Rpb25zIGJhc2VkIG9uIHRoZSBkZWZpbml0aW9uIG9mIHRoZSBjdXN0b20gaGVhZGVyIGZhY2V0LlxuICpcbiAqIEBwYXJhbSBjb252ZXJ0ZXJDb250ZXh0IFRoZSBjb252ZXJ0ZXIgY29udGV4dFxuICogQHJldHVybnMgVGhlIGN1cnJlbnQgc3Vic2VjdGlvbnNcbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGNyZWF0ZUN1c3RvbUhlYWRlckZhY2V0U3ViU2VjdGlvbnMoY29udmVydGVyQ29udGV4dDogQ29udmVydGVyQ29udGV4dCk6IE9iamVjdFBhZ2VTdWJTZWN0aW9uW10ge1xuXHRjb25zdCBjdXN0b21IZWFkZXJGYWNldHM6IFJlY29yZDxzdHJpbmcsIEN1c3RvbU9iamVjdFBhZ2VIZWFkZXJGYWNldD4gPSBnZXRIZWFkZXJGYWNldHNGcm9tTWFuaWZlc3QoXG5cdFx0Y29udmVydGVyQ29udGV4dC5nZXRNYW5pZmVzdFdyYXBwZXIoKS5nZXRIZWFkZXJGYWNldHMoKVxuXHQpO1xuXHRjb25zdCBhQ3VzdG9tSGVhZGVyRmFjZXRzOiBDdXN0b21PYmplY3RQYWdlSGVhZGVyRmFjZXRbXSA9IFtdO1xuXHRPYmplY3Qua2V5cyhjdXN0b21IZWFkZXJGYWNldHMpLmZvckVhY2goZnVuY3Rpb24gKGtleSkge1xuXHRcdGFDdXN0b21IZWFkZXJGYWNldHMucHVzaChjdXN0b21IZWFkZXJGYWNldHNba2V5XSk7XG5cdFx0cmV0dXJuIGFDdXN0b21IZWFkZXJGYWNldHM7XG5cdH0pO1xuXHRjb25zdCBmYWNldHNUb0NyZWF0ZSA9IGFDdXN0b21IZWFkZXJGYWNldHMucmVkdWNlKChmYWNldHNUb0NyZWF0ZTogQ3VzdG9tT2JqZWN0UGFnZUhlYWRlckZhY2V0W10sIGN1c3RvbUhlYWRlckZhY2V0KSA9PiB7XG5cdFx0aWYgKGN1c3RvbUhlYWRlckZhY2V0LnRlbXBsYXRlRWRpdCkge1xuXHRcdFx0ZmFjZXRzVG9DcmVhdGUucHVzaChjdXN0b21IZWFkZXJGYWNldCk7XG5cdFx0fVxuXHRcdHJldHVybiBmYWNldHNUb0NyZWF0ZTtcblx0fSwgW10pO1xuXG5cdHJldHVybiBmYWNldHNUb0NyZWF0ZS5tYXAoKGN1c3RvbUhlYWRlckZhY2V0KSA9PiBjcmVhdGVDdXN0b21IZWFkZXJGYWNldFN1YlNlY3Rpb24oY3VzdG9tSGVhZGVyRmFjZXQpKTtcbn1cblxuLyoqXG4gKiBDcmVhdGVzIGEgc3Vic2VjdGlvbiBiYXNlZCBvbiBhIGN1c3RvbSBoZWFkZXIgZmFjZXQuXG4gKlxuICogQHBhcmFtIGN1c3RvbUhlYWRlckZhY2V0IEEgY3VzdG9tIGhlYWRlciBmYWNldFxuICogQHJldHVybnMgQSBkZWZpbml0aW9uIGZvciBhIHN1YnNlY3Rpb25cbiAqL1xuZnVuY3Rpb24gY3JlYXRlQ3VzdG9tSGVhZGVyRmFjZXRTdWJTZWN0aW9uKGN1c3RvbUhlYWRlckZhY2V0OiBDdXN0b21PYmplY3RQYWdlSGVhZGVyRmFjZXQpOiBPYmplY3RQYWdlU3ViU2VjdGlvbiB7XG5cdGNvbnN0IHN1YlNlY3Rpb25JRCA9IGdldEN1c3RvbVN1YlNlY3Rpb25JRChjdXN0b21IZWFkZXJGYWNldC5rZXkpO1xuXHRjb25zdCBzdWJTZWN0aW9uOiBYTUxGcmFnbWVudFN1YlNlY3Rpb24gPSB7XG5cdFx0aWQ6IHN1YlNlY3Rpb25JRCxcblx0XHRrZXk6IGN1c3RvbUhlYWRlckZhY2V0LmtleSxcblx0XHR0aXRsZTogY3VzdG9tSGVhZGVyRmFjZXQudGl0bGUsXG5cdFx0dHlwZTogU3ViU2VjdGlvblR5cGUuWE1MRnJhZ21lbnQsXG5cdFx0dGVtcGxhdGU6IGN1c3RvbUhlYWRlckZhY2V0LnRlbXBsYXRlRWRpdCB8fCBcIlwiLFxuXHRcdHZpc2libGU6IGN1c3RvbUhlYWRlckZhY2V0LnZpc2libGUsXG5cdFx0bGV2ZWw6IDEsXG5cdFx0c2lkZUNvbnRlbnQ6IHVuZGVmaW5lZCxcblx0XHRzdGFzaGVkOiBjdXN0b21IZWFkZXJGYWNldC5zdGFzaGVkLFxuXHRcdGZsZXhTZXR0aW5nczogY3VzdG9tSGVhZGVyRmFjZXQuZmxleFNldHRpbmdzLFxuXHRcdGFjdGlvbnM6IHt9LFxuXHRcdG9iamVjdFBhZ2VMYXp5TG9hZGVyRW5hYmxlZDogZmFsc2Vcblx0fTtcblx0cmV0dXJuIHN1YlNlY3Rpb247XG59XG5cbi8vIGZ1bmN0aW9uIGlzVGFyZ2V0Rm9yQ29tcGxpYW50KGFubm90YXRpb25QYXRoOiBBbm5vdGF0aW9uUGF0aCkge1xuLy8gXHRyZXR1cm4gLy4qY29tXFwuc2FwXFwudm9jYWJ1bGFyaWVzXFwuVUlcXC52MVxcLihGaWVsZEdyb3VwfElkZW50aWZpY2F0aW9ufERhdGFQb2ludHxTdGF0dXNJbmZvKS4qLy50ZXN0KGFubm90YXRpb25QYXRoLnZhbHVlKTtcbi8vIH1cbmNvbnN0IGdldFN1YlNlY3Rpb25LZXkgPSAoZmFjZXREZWZpbml0aW9uOiBGYWNldFR5cGVzLCBmYWxsYmFjazogc3RyaW5nKTogc3RyaW5nID0+IHtcblx0cmV0dXJuIGZhY2V0RGVmaW5pdGlvbi5JRD8udG9TdHJpbmcoKSB8fCBmYWNldERlZmluaXRpb24uTGFiZWw/LnRvU3RyaW5nKCkgfHwgZmFsbGJhY2s7XG59O1xuLyoqXG4gKiBBZGRzIEZvcm0gbWVudSBhY3Rpb24gdG8gYWxsIGZvcm0gYWN0aW9ucywgcmVtb3ZlcyBkdXBsaWNhdGUgYWN0aW9ucyBhbmQgaGlkZGVuIGFjdGlvbnMuXG4gKlxuICogQHBhcmFtIGFjdGlvbnMgVGhlIGFjdGlvbnMgaW52b2x2ZWRcbiAqIEBwYXJhbSBmYWNldERlZmluaXRpb24gVGhlIGRlZmluaXRpb24gZm9yIHRoZSBmYWNldFxuICogQHBhcmFtIGNvbnZlcnRlckNvbnRleHQgVGhlIGNvbnZlcnRlciBjb250ZXh0XG4gKiBAcmV0dXJucyBUaGUgZm9ybSBtZW51IGFjdGlvbnNcbiAqL1xuZnVuY3Rpb24gYWRkRm9ybU1lbnVBY3Rpb25zKGFjdGlvbnM6IENvbnZlcnRlckFjdGlvbltdLCBmYWNldERlZmluaXRpb246IEZhY2V0VHlwZXMsIGNvbnZlcnRlckNvbnRleHQ6IENvbnZlcnRlckNvbnRleHQpOiBDb21iaW5lZEFjdGlvbiB7XG5cdGNvbnN0IGhpZGRlbkFjdGlvbnM6IEJhc2VBY3Rpb25bXSA9IGdldEZvcm1IaWRkZW5BY3Rpb25zKGZhY2V0RGVmaW5pdGlvbiwgY29udmVydGVyQ29udGV4dCkgfHwgW10sXG5cdFx0Zm9ybUFjdGlvbnM6IENvbmZpZ3VyYWJsZVJlY29yZDxNYW5pZmVzdEFjdGlvbj4gPSBnZXRGb3JtQWN0aW9ucyhmYWNldERlZmluaXRpb24sIGNvbnZlcnRlckNvbnRleHQpLFxuXHRcdG1hbmlmZXN0QWN0aW9ucyA9IGdldEFjdGlvbnNGcm9tTWFuaWZlc3QoZm9ybUFjdGlvbnMsIGNvbnZlcnRlckNvbnRleHQsIGFjdGlvbnMsIHVuZGVmaW5lZCwgdW5kZWZpbmVkLCBoaWRkZW5BY3Rpb25zKSxcblx0XHRhY3Rpb25PdmVyd3JpdGVDb25maWc6IE92ZXJyaWRlVHlwZUFjdGlvbiA9IHtcblx0XHRcdGVuYWJsZWQ6IE92ZXJyaWRlVHlwZS5vdmVyd3JpdGUsXG5cdFx0XHR2aXNpYmxlOiBPdmVycmlkZVR5cGUub3ZlcndyaXRlLFxuXHRcdFx0Y29tbWFuZDogT3ZlcnJpZGVUeXBlLm92ZXJ3cml0ZVxuXHRcdH0sXG5cdFx0Zm9ybUFsbEFjdGlvbnMgPSBpbnNlcnRDdXN0b21FbGVtZW50cyhhY3Rpb25zLCBtYW5pZmVzdEFjdGlvbnMuYWN0aW9ucywgYWN0aW9uT3ZlcndyaXRlQ29uZmlnKTtcblx0cmV0dXJuIHtcblx0XHRhY3Rpb25zOiBmb3JtQWxsQWN0aW9ucyA/IGdldFZpc2liaWxpdHlFbmFibGVtZW50Rm9ybU1lbnVBY3Rpb25zKHJlbW92ZUR1cGxpY2F0ZUFjdGlvbnMoZm9ybUFsbEFjdGlvbnMpKSA6IGFjdGlvbnMsXG5cdFx0Y29tbWFuZEFjdGlvbnM6IG1hbmlmZXN0QWN0aW9ucy5jb21tYW5kQWN0aW9uc1xuXHR9O1xufVxuXG4vKipcbiAqIFJldHJpZXZlcyB0aGUgYWN0aW9uIGZvcm0gYSBmYWNldC5cbiAqXG4gKiBAcGFyYW0gZmFjZXREZWZpbml0aW9uXG4gKiBAcGFyYW0gY29udmVydGVyQ29udGV4dFxuICogQHJldHVybnMgVGhlIGN1cnJlbnQgZmFjZXQgYWN0aW9uc1xuICovXG5mdW5jdGlvbiBnZXRGYWNldEFjdGlvbnMoZmFjZXREZWZpbml0aW9uOiBGYWNldFR5cGVzLCBjb252ZXJ0ZXJDb250ZXh0OiBDb252ZXJ0ZXJDb250ZXh0KTogQ29tYmluZWRBY3Rpb24ge1xuXHRsZXQgYWN0aW9uczogQ29udmVydGVyQWN0aW9uW10gPSBbXTtcblx0c3dpdGNoIChmYWNldERlZmluaXRpb24uJFR5cGUpIHtcblx0XHRjYXNlIFVJQW5ub3RhdGlvblR5cGVzLkNvbGxlY3Rpb25GYWNldDpcblx0XHRcdGFjdGlvbnMgPSAoXG5cdFx0XHRcdGZhY2V0RGVmaW5pdGlvbi5GYWNldHMuZmlsdGVyKChzdWJGYWNldERlZmluaXRpb24pID0+IGlzUmVmZXJlbmNlRmFjZXQoc3ViRmFjZXREZWZpbml0aW9uKSkgYXMgUmVmZXJlbmNlRmFjZXRUeXBlc1tdXG5cdFx0XHQpLnJlZHVjZShcblx0XHRcdFx0KGFjdGlvblJlZHVjZXI6IENvbnZlcnRlckFjdGlvbltdLCByZWZlcmVuY2VGYWNldCkgPT5cblx0XHRcdFx0XHRjcmVhdGVGb3JtQWN0aW9uUmVkdWNlcihhY3Rpb25SZWR1Y2VyLCByZWZlcmVuY2VGYWNldCwgY29udmVydGVyQ29udGV4dCksXG5cdFx0XHRcdFtdXG5cdFx0XHQpO1xuXHRcdFx0YnJlYWs7XG5cdFx0Y2FzZSBVSUFubm90YXRpb25UeXBlcy5SZWZlcmVuY2VGYWNldDpcblx0XHRcdGFjdGlvbnMgPSBjcmVhdGVGb3JtQWN0aW9uUmVkdWNlcihbXSwgZmFjZXREZWZpbml0aW9uLCBjb252ZXJ0ZXJDb250ZXh0KTtcblx0XHRcdGJyZWFrO1xuXHRcdGRlZmF1bHQ6XG5cdFx0XHRicmVhaztcblx0fVxuXHRyZXR1cm4gYWRkRm9ybU1lbnVBY3Rpb25zKGFjdGlvbnMsIGZhY2V0RGVmaW5pdGlvbiwgY29udmVydGVyQ29udGV4dCk7XG59XG4vKipcbiAqIFJldHVybnMgdGhlIGJ1dHRvbiB0eXBlIGJhc2VkIG9uIEBVSS5FbXBoYXNpemVkIGFubm90YXRpb24uXG4gKlxuICogQHBhcmFtIGVtcGhhc2l6ZWQgRW1waGFzaXplZCBhbm5vdGF0aW9uIHZhbHVlLlxuICogQHJldHVybnMgVGhlIGJ1dHRvbiB0eXBlIG9yIHBhdGggYmFzZWQgZXhwcmVzc2lvbi5cbiAqL1xuZnVuY3Rpb24gZ2V0QnV0dG9uVHlwZShlbXBoYXNpemVkOiBFbXBoYXNpemVkIHwgdW5kZWZpbmVkKTogQnV0dG9uVHlwZSB7XG5cdC8vIEVtcGhhc2l6ZWQgaXMgYSBib29sZWFuIHNvIGlmIGl0J3MgZXF1YWwgdG8gdHJ1ZSB3ZSBzaG93IHRoZSBidXR0b24gYXMgR2hvc3QsIG90aGVyd2lzZSBhcyBUcmFuc3BhcmVudFxuXHRjb25zdCBidXR0b25UeXBlQ29uZGl0aW9uID0gZXF1YWwoZ2V0RXhwcmVzc2lvbkZyb21Bbm5vdGF0aW9uKGVtcGhhc2l6ZWQpLCB0cnVlKTtcblx0cmV0dXJuIGNvbXBpbGVFeHByZXNzaW9uKGlmRWxzZShidXR0b25UeXBlQ29uZGl0aW9uLCBCdXR0b25UeXBlLkdob3N0LCBCdXR0b25UeXBlLlRyYW5zcGFyZW50KSkgYXMgQnV0dG9uVHlwZTtcbn1cblxuLyoqXG4gKiBDcmVhdGUgYSBzdWJzZWN0aW9uIGJhc2VkIG9uIEZhY2V0VHlwZXMuXG4gKlxuICogQHBhcmFtIGZhY2V0RGVmaW5pdGlvblxuICogQHBhcmFtIGZhY2V0c1RvQ3JlYXRlXG4gKiBAcGFyYW0gY29udmVydGVyQ29udGV4dFxuICogQHBhcmFtIGxldmVsXG4gKiBAcGFyYW0gaGFzU2luZ2xlQ29udGVudFxuICogQHBhcmFtIGlzSGVhZGVyU2VjdGlvblxuICogQHJldHVybnMgQSBzdWJzZWN0aW9uIGRlZmluaXRpb25cbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGNyZWF0ZVN1YlNlY3Rpb24oXG5cdGZhY2V0RGVmaW5pdGlvbjogRmFjZXRUeXBlcyxcblx0ZmFjZXRzVG9DcmVhdGU6IEZhY2V0VHlwZXNbXSxcblx0Y29udmVydGVyQ29udGV4dDogQ29udmVydGVyQ29udGV4dCxcblx0bGV2ZWw6IG51bWJlcixcblx0aGFzU2luZ2xlQ29udGVudDogYm9vbGVhbixcblx0aXNIZWFkZXJTZWN0aW9uPzogYm9vbGVhblxuKTogT2JqZWN0UGFnZVN1YlNlY3Rpb24ge1xuXHRjb25zdCBzdWJTZWN0aW9uSUQgPSBnZXRTdWJTZWN0aW9uSUQoZmFjZXREZWZpbml0aW9uKTtcblx0Y29uc3Qgb0hpZGRlbkFubm90YXRpb24gPSBmYWNldERlZmluaXRpb24uYW5ub3RhdGlvbnM/LlVJPy5IaWRkZW47XG5cdGNvbnN0IGlzVmlzaWJsZUV4cHJlc3Npb24gPSBub3QoZXF1YWwodHJ1ZSwgZ2V0RXhwcmVzc2lvbkZyb21Bbm5vdGF0aW9uKG9IaWRkZW5Bbm5vdGF0aW9uKSkpO1xuXHRjb25zdCBpc1Zpc2libGUgPSBjb21waWxlRXhwcmVzc2lvbihpc1Zpc2libGVFeHByZXNzaW9uKTtcblx0Y29uc3QgaXNEeW5hbWljRXhwcmVzc2lvbiA9XG5cdFx0aXNWaXNpYmxlICE9PSB1bmRlZmluZWQgJiZcblx0XHR0eXBlb2YgaXNWaXNpYmxlID09PSBcInN0cmluZ1wiICYmXG5cdFx0aXNWaXNpYmxlLmluZGV4T2YoXCJ7PVwiKSA9PT0gMCAmJlxuXHRcdCFpc1BhdGhBbm5vdGF0aW9uRXhwcmVzc2lvbihvSGlkZGVuQW5ub3RhdGlvbik7XG5cdGNvbnN0IGlzVmlzaWJsZUR5bmFtaWNFeHByZXNzaW9uID1cblx0XHRpc1Zpc2libGUgJiYgaXNEeW5hbWljRXhwcmVzc2lvblxuXHRcdFx0PyBpc1Zpc2libGUuc3Vic3RyaW5nKGlzVmlzaWJsZS5pbmRleE9mKFwiez1cIikgKyAyLCBpc1Zpc2libGUubGFzdEluZGV4T2YoXCJ9XCIpKSAhPT0gdW5kZWZpbmVkXG5cdFx0XHQ6IGZhbHNlO1xuXHRjb25zdCB0aXRsZSA9IGNvbXBpbGVFeHByZXNzaW9uKGdldEV4cHJlc3Npb25Gcm9tQW5ub3RhdGlvbihmYWNldERlZmluaXRpb24uTGFiZWwpKTtcblx0Y29uc3Qgc3ViU2VjdGlvbjogQmFzZVN1YlNlY3Rpb24gPSB7XG5cdFx0aWQ6IHN1YlNlY3Rpb25JRCxcblx0XHRrZXk6IGdldFN1YlNlY3Rpb25LZXkoZmFjZXREZWZpbml0aW9uLCBzdWJTZWN0aW9uSUQpLFxuXHRcdHRpdGxlOiB0aXRsZSxcblx0XHR0eXBlOiBTdWJTZWN0aW9uVHlwZS5Vbmtub3duLFxuXHRcdGFubm90YXRpb25QYXRoOiBjb252ZXJ0ZXJDb250ZXh0LmdldEVudGl0eVNldEJhc2VkQW5ub3RhdGlvblBhdGgoZmFjZXREZWZpbml0aW9uLmZ1bGx5UXVhbGlmaWVkTmFtZSksXG5cdFx0dmlzaWJsZTogaXNWaXNpYmxlLFxuXHRcdGlzVmlzaWJpbGl0eUR5bmFtaWM6IGlzRHluYW1pY0V4cHJlc3Npb24sXG5cdFx0bGV2ZWw6IGxldmVsLFxuXHRcdHNpZGVDb250ZW50OiB1bmRlZmluZWQsXG5cdFx0b2JqZWN0UGFnZUxhenlMb2FkZXJFbmFibGVkOiBjb252ZXJ0ZXJDb250ZXh0LmdldE1hbmlmZXN0V3JhcHBlcigpLmdldEVuYWJsZUxhenlMb2FkaW5nKClcblx0fTtcblx0aWYgKGlzSGVhZGVyU2VjdGlvbikge1xuXHRcdHN1YlNlY3Rpb24uc3Rhc2hlZCA9IGdldFN0YXNoZWRTZXR0aW5nc0ZvckhlYWRlckZhY2V0KGZhY2V0RGVmaW5pdGlvbiwgZmFjZXREZWZpbml0aW9uLCBjb252ZXJ0ZXJDb250ZXh0KTtcblx0XHRzdWJTZWN0aW9uLmZsZXhTZXR0aW5ncyA9IHtcblx0XHRcdGRlc2lnbnRpbWU6IGdldERlc2lnblRpbWVNZXRhZGF0YVNldHRpbmdzRm9ySGVhZGVyRmFjZXQoZmFjZXREZWZpbml0aW9uLCBmYWNldERlZmluaXRpb24sIGNvbnZlcnRlckNvbnRleHQpXG5cdFx0fTtcblx0fVxuXHRsZXQgdW5zdXBwb3J0ZWRUZXh0ID0gXCJcIjtcblx0bGV2ZWwrKztcblx0c3dpdGNoIChmYWNldERlZmluaXRpb24uJFR5cGUpIHtcblx0XHRjYXNlIFVJQW5ub3RhdGlvblR5cGVzLkNvbGxlY3Rpb25GYWNldDpcblx0XHRcdGNvbnN0IGZhY2V0cyA9IGZhY2V0RGVmaW5pdGlvbi5GYWNldHM7XG5cblx0XHRcdC8vIEZpbHRlciBmb3IgYWxsIGZhY2V0cyBvZiB0aGlzIHN1YnNlY3Rpb24gdGhhdCBhcmUgcmVmZXJyaW5nIHRvIGFuIGFubm90YXRpb24gZGVzY3JpYmluZyBhIHZpc3VhbGl6YXRpb24gKGUuZy4gdGFibGUgb3IgY2hhcnQpXG5cdFx0XHRjb25zdCB2aXN1YWxpemF0aW9uRmFjZXRzID0gZmFjZXRzXG5cdFx0XHRcdC5tYXAoKGZhY2V0LCBpbmRleCkgPT4gKHsgaW5kZXgsIGZhY2V0IH0pKSAvLyBSZW1lbWJlciB0aGUgaW5kZXggYXNzaWduZWQgdG8gZWFjaCBmYWNldFxuXHRcdFx0XHQuZmlsdGVyKCh7IGZhY2V0IH0pID0+IHtcblx0XHRcdFx0XHRyZXR1cm4gdmlzdWFsaXphdGlvblRlcm1zLmluY2x1ZGVzKChmYWNldCBhcyBSZWZlcmVuY2VGYWNldCkuVGFyZ2V0Py4kdGFyZ2V0Py50ZXJtKTtcblx0XHRcdFx0fSk7XG5cblx0XHRcdC8vIEZpbHRlciBvdXQgYWxsIHZpc3VhbGl6YXRpb24gZmFjZXRzOyBcInZpc3VhbGl6YXRpb25GYWNldHNcIiBhbmQgXCJub25WaXN1YWxpemF0aW9uRmFjZXRzXCIgYXJlIGRpc2pvaW50XG5cdFx0XHRjb25zdCBub25WaXN1YWxpemF0aW9uRmFjZXRzID0gZmFjZXRzLmZpbHRlcihcblx0XHRcdFx0KGZhY2V0KSA9PiAhdmlzdWFsaXphdGlvbkZhY2V0cy5maW5kKCh2aXN1YWxpemF0aW9uKSA9PiB2aXN1YWxpemF0aW9uLmZhY2V0ID09PSBmYWNldClcblx0XHRcdCk7XG5cblx0XHRcdGlmICh2aXN1YWxpemF0aW9uRmFjZXRzLmxlbmd0aCA+IDApIHtcblx0XHRcdFx0Ly8gQ29sbGVjdGlvbkZhY2V0cyB3aXRoIHZpc3VhbGl6YXRpb25zIG11c3QgYmUgaGFuZGxlZCBzZXBhcmF0ZWx5IGFzIHRoZXkgY2Fubm90IGJlIGluY2x1ZGVkIGluIGZvcm1zXG5cdFx0XHRcdGNvbnN0IHZpc3VhbGl6YXRpb25Db250ZW50OiBPYmplY3RQYWdlU3ViU2VjdGlvbltdID0gW107XG5cdFx0XHRcdGNvbnN0IGZvcm1Db250ZW50OiBPYmplY3RQYWdlU3ViU2VjdGlvbltdID0gW107XG5cdFx0XHRcdGNvbnN0IG1peGVkQ29udGVudDogT2JqZWN0UGFnZVN1YlNlY3Rpb25bXSA9IFtdO1xuXG5cdFx0XHRcdC8vIENyZWF0ZSBlYWNoIHZpc3VhbGl6YXRpb24gZmFjZXQgYXMgaWYgaXQgd2FzIGl0cyBvd24gc3Vic2VjdGlvbiAodmlhIHJlY3Vyc2lvbiksIGFuZCBrZWVwIHRoZWlyIHJlbGF0aXZlIG9yZGVyaW5nXG5cdFx0XHRcdGZvciAoY29uc3QgeyBmYWNldCB9IG9mIHZpc3VhbGl6YXRpb25GYWNldHMpIHtcblx0XHRcdFx0XHR2aXN1YWxpemF0aW9uQ29udGVudC5wdXNoKGNyZWF0ZVN1YlNlY3Rpb24oZmFjZXQsIFtdLCBjb252ZXJ0ZXJDb250ZXh0LCBsZXZlbCwgdHJ1ZSwgaXNIZWFkZXJTZWN0aW9uKSk7XG5cdFx0XHRcdH1cblxuXHRcdFx0XHRpZiAobm9uVmlzdWFsaXphdGlvbkZhY2V0cy5sZW5ndGggPiAwKSB7XG5cdFx0XHRcdFx0Ly8gVGhpcyBzdWJzZWN0aW9uIGluY2x1ZGVzIHZpc3VhbGl6YXRpb25zIGFuZCBvdGhlciBjb250ZW50LCBzbyBpdCBpcyBhIFwiTWl4ZWRcIiBzdWJzZWN0aW9uXG5cdFx0XHRcdFx0TG9nLndhcm5pbmcoXG5cdFx0XHRcdFx0XHRgV2FybmluZzogQ29sbGVjdGlvbkZhY2V0ICcke2ZhY2V0RGVmaW5pdGlvbi5JRH0nIGluY2x1ZGVzIGEgY29tYmluYXRpb24gb2YgZWl0aGVyIGEgY2hhcnQgb3IgYSB0YWJsZSBhbmQgb3RoZXIgY29udGVudC4gVGhpcyBjYW4gbGVhZCB0byByZW5kZXJpbmcgaXNzdWVzLiBDb25zaWRlciBtb3ZpbmcgdGhlIGNoYXJ0IG9yIHRhYmxlIGludG8gYSBzZXBhcmF0ZSBDb2xsZWN0aW9uRmFjZXQuYFxuXHRcdFx0XHRcdCk7XG5cblx0XHRcdFx0XHRjb25zdCBmYWtlRm9ybUZhY2V0ID0geyAuLi5mYWNldERlZmluaXRpb24gfTtcblx0XHRcdFx0XHRmYWtlRm9ybUZhY2V0LkZhY2V0cyA9IG5vblZpc3VhbGl6YXRpb25GYWNldHM7XG5cdFx0XHRcdFx0Ly8gQ3JlYXRlIGEgam9pbmVkIGZvcm0gb2YgYWxsIGZhY2V0cyB0aGF0IGFyZSBub3QgcmVmZXJyaW5nIHRvIHZpc3VhbGl6YXRpb25zXG5cdFx0XHRcdFx0Zm9ybUNvbnRlbnQucHVzaChjcmVhdGVTdWJTZWN0aW9uKGZha2VGb3JtRmFjZXQsIFtdLCBjb252ZXJ0ZXJDb250ZXh0LCBsZXZlbCwgaGFzU2luZ2xlQ29udGVudCwgaXNIZWFkZXJTZWN0aW9uKSk7XG5cdFx0XHRcdH1cblxuXHRcdFx0XHQvLyBNZXJnZSB0aGUgdmlzdWFsaXphdGlvbiBjb250ZW50IHdpdGggdGhlIGZvcm0gY29udGVudFxuXHRcdFx0XHRpZiAodmlzdWFsaXphdGlvbkZhY2V0cy5maW5kKCh7IGluZGV4IH0pID0+IGluZGV4ID09PSAwKSkge1xuXHRcdFx0XHRcdC8vIElmIHRoZSBmaXJzdCBmYWNldCBpcyBhIHZpc3VhbGl6YXRpb24sIGRpc3BsYXkgdGhlIHZpc3VhbGl6YXRpb25zIGZpcnN0XG5cdFx0XHRcdFx0bWl4ZWRDb250ZW50LnB1c2goLi4udmlzdWFsaXphdGlvbkNvbnRlbnQpO1xuXHRcdFx0XHRcdG1peGVkQ29udGVudC5wdXNoKC4uLmZvcm1Db250ZW50KTtcblx0XHRcdFx0fSBlbHNlIHtcblx0XHRcdFx0XHQvLyBPdGhlcndpc2UsIGRpc3BsYXkgdGhlIGZvcm0gZmlyc3Rcblx0XHRcdFx0XHRtaXhlZENvbnRlbnQucHVzaCguLi5mb3JtQ29udGVudCk7XG5cdFx0XHRcdFx0bWl4ZWRDb250ZW50LnB1c2goLi4udmlzdWFsaXphdGlvbkNvbnRlbnQpO1xuXHRcdFx0XHR9XG5cblx0XHRcdFx0Y29uc3QgbWl4ZWRTdWJTZWN0aW9uOiBNaXhlZFN1YlNlY3Rpb24gPSB7XG5cdFx0XHRcdFx0Li4uc3ViU2VjdGlvbixcblx0XHRcdFx0XHR0eXBlOiBTdWJTZWN0aW9uVHlwZS5NaXhlZCxcblx0XHRcdFx0XHRsZXZlbDogbGV2ZWwsXG5cdFx0XHRcdFx0Y29udGVudDogbWl4ZWRDb250ZW50XG5cdFx0XHRcdH07XG5cdFx0XHRcdHJldHVybiBtaXhlZFN1YlNlY3Rpb247XG5cdFx0XHR9IGVsc2Uge1xuXHRcdFx0XHQvLyBUaGlzIENvbGxlY3Rpb25GYWNldCBvbmx5IGluY2x1ZGVzIGNvbnRlbnQgdGhhdCBjYW4gYmUgcmVuZGVyZWQgaW4gYSBtZXJnZWQgZm9ybVxuXHRcdFx0XHRjb25zdCBmYWNldEFjdGlvbnMgPSBnZXRGYWNldEFjdGlvbnMoZmFjZXREZWZpbml0aW9uLCBjb252ZXJ0ZXJDb250ZXh0KSxcblx0XHRcdFx0XHRmb3JtQ29sbGVjdGlvblN1YlNlY3Rpb246IEZvcm1TdWJTZWN0aW9uID0ge1xuXHRcdFx0XHRcdFx0Li4uc3ViU2VjdGlvbixcblx0XHRcdFx0XHRcdHR5cGU6IFN1YlNlY3Rpb25UeXBlLkZvcm0sXG5cdFx0XHRcdFx0XHRmb3JtRGVmaW5pdGlvbjogY3JlYXRlRm9ybURlZmluaXRpb24oZmFjZXREZWZpbml0aW9uLCBpc1Zpc2libGUsIGNvbnZlcnRlckNvbnRleHQsIGZhY2V0QWN0aW9ucy5hY3Rpb25zKSxcblx0XHRcdFx0XHRcdGxldmVsOiBsZXZlbCxcblx0XHRcdFx0XHRcdGFjdGlvbnM6IGZhY2V0QWN0aW9ucy5hY3Rpb25zLmZpbHRlcigoYWN0aW9uKSA9PiBhY3Rpb24uZmFjZXROYW1lID09PSB1bmRlZmluZWQpLFxuXHRcdFx0XHRcdFx0Y29tbWFuZEFjdGlvbnM6IGZhY2V0QWN0aW9ucy5jb21tYW5kQWN0aW9uc1xuXHRcdFx0XHRcdH07XG5cdFx0XHRcdHJldHVybiBmb3JtQ29sbGVjdGlvblN1YlNlY3Rpb247XG5cdFx0XHR9XG5cdFx0Y2FzZSBVSUFubm90YXRpb25UeXBlcy5SZWZlcmVuY2VGYWNldDpcblx0XHRcdGlmICghZmFjZXREZWZpbml0aW9uLlRhcmdldC4kdGFyZ2V0KSB7XG5cdFx0XHRcdHVuc3VwcG9ydGVkVGV4dCA9IGBVbmFibGUgdG8gZmluZCBhbm5vdGF0aW9uUGF0aCAke2ZhY2V0RGVmaW5pdGlvbi5UYXJnZXQudmFsdWV9YDtcblx0XHRcdH0gZWxzZSB7XG5cdFx0XHRcdHN3aXRjaCAoZmFjZXREZWZpbml0aW9uLlRhcmdldC4kdGFyZ2V0LnRlcm0pIHtcblx0XHRcdFx0XHRjYXNlIFVJQW5ub3RhdGlvblRlcm1zLkxpbmVJdGVtOlxuXHRcdFx0XHRcdGNhc2UgVUlBbm5vdGF0aW9uVGVybXMuQ2hhcnQ6XG5cdFx0XHRcdFx0Y2FzZSBVSUFubm90YXRpb25UZXJtcy5QcmVzZW50YXRpb25WYXJpYW50OlxuXHRcdFx0XHRcdGNhc2UgVUlBbm5vdGF0aW9uVGVybXMuU2VsZWN0aW9uUHJlc2VudGF0aW9uVmFyaWFudDpcblx0XHRcdFx0XHRcdGNvbnN0IHByZXNlbnRhdGlvbiA9IGdldERhdGFWaXN1YWxpemF0aW9uQ29uZmlndXJhdGlvbihcblx0XHRcdFx0XHRcdFx0ZmFjZXREZWZpbml0aW9uLlRhcmdldC52YWx1ZSxcblx0XHRcdFx0XHRcdFx0Z2V0Q29uZGVuc2VkVGFibGVMYXlvdXRDb21wbGlhbmNlKGZhY2V0RGVmaW5pdGlvbiwgZmFjZXRzVG9DcmVhdGUsIGNvbnZlcnRlckNvbnRleHQpLFxuXHRcdFx0XHRcdFx0XHRjb252ZXJ0ZXJDb250ZXh0LFxuXHRcdFx0XHRcdFx0XHR1bmRlZmluZWQsXG5cdFx0XHRcdFx0XHRcdGlzSGVhZGVyU2VjdGlvblxuXHRcdFx0XHRcdFx0KTtcblx0XHRcdFx0XHRcdGNvbnN0IHN1YlNlY3Rpb25UaXRsZTogc3RyaW5nID0gc3ViU2VjdGlvbi50aXRsZSA/IHN1YlNlY3Rpb24udGl0bGUgOiBcIlwiO1xuXHRcdFx0XHRcdFx0Y29uc3QgY29udHJvbFRpdGxlID1cblx0XHRcdFx0XHRcdFx0KHByZXNlbnRhdGlvbi52aXN1YWxpemF0aW9uc1swXSBhcyBUYWJsZVZpc3VhbGl6YXRpb24pPy5hbm5vdGF0aW9uPy50aXRsZSB8fFxuXHRcdFx0XHRcdFx0XHQocHJlc2VudGF0aW9uLnZpc3VhbGl6YXRpb25zWzBdIGFzIENoYXJ0VmlzdWFsaXphdGlvbik/LnRpdGxlO1xuXHRcdFx0XHRcdFx0Y29uc3QgaXNQYXJ0T2ZQcmV2aWV3ID0gZmFjZXREZWZpbml0aW9uLmFubm90YXRpb25zPy5VST8uUGFydE9mUHJldmlldz8udmFsdWVPZigpICE9PSBmYWxzZTtcblx0XHRcdFx0XHRcdGNvbnN0IHNob3dUaXRsZSA9IGdldFRpdGxlVmlzaWJpbGl0eShjb250cm9sVGl0bGUgPz8gXCJcIiwgc3ViU2VjdGlvblRpdGxlLCBoYXNTaW5nbGVDb250ZW50KTtcblxuXHRcdFx0XHRcdFx0Ly8gRWl0aGVyIGNhbGN1bGF0ZSB0aGUgdGl0bGUgdmlzaWJpbGl0eSBzdGF0aWNhbGx5IG9yIGR5bmFtaWNhbGx5XG5cdFx0XHRcdFx0XHQvLyBBZGRpdGlvbmFsbHkgdG8gY2hlY2tpbmcgd2hldGhlciBhIHRpdGxlIGV4aXN0cyxcblx0XHRcdFx0XHRcdC8vIHdlIGFsc28gbmVlZCB0byBjaGVjayB0aGF0IHRoZSBmYWNldCB0aXRsZSBpcyBub3QgdGhlIHNhbWUgYXMgdGhlIGNvbnRyb2wgKGkuZS4gdmlzdWFsaXphdGlvbikgdGl0bGU7XG5cdFx0XHRcdFx0XHQvLyB0aGlzIGlzIGRvbmUgYnkgaW5jbHVkaW5nIFwic2hvd1RpdGxlXCIgaW4gdGhlIGFuZCBleHByZXNzaW9uXG5cdFx0XHRcdFx0XHRjb25zdCB0aXRsZVZpc2libGUgPSBpZkVsc2UoXG5cdFx0XHRcdFx0XHRcdGlzRHluYW1pY0V4cHJlc3Npb24sXG5cdFx0XHRcdFx0XHRcdGFuZChpc1Zpc2libGVEeW5hbWljRXhwcmVzc2lvbiwgbm90KGVxdWFsKHRpdGxlLCBcInVuZGVmaW5lZFwiKSksIHNob3dUaXRsZSksXG5cdFx0XHRcdFx0XHRcdGFuZChpc1Zpc2libGUgIT09IHVuZGVmaW5lZCwgdGl0bGUgIT09IFwidW5kZWZpbmVkXCIsIHRpdGxlICE9PSB1bmRlZmluZWQsIGlzVmlzaWJsZUV4cHJlc3Npb24sIHNob3dUaXRsZSlcblx0XHRcdFx0XHRcdCk7XG5cblx0XHRcdFx0XHRcdGNvbnN0IGRhdGFWaXN1YWxpemF0aW9uU3ViU2VjdGlvbjogRGF0YVZpc3VhbGl6YXRpb25TdWJTZWN0aW9uID0ge1xuXHRcdFx0XHRcdFx0XHQuLi5zdWJTZWN0aW9uLFxuXHRcdFx0XHRcdFx0XHR0eXBlOiBTdWJTZWN0aW9uVHlwZS5EYXRhVmlzdWFsaXphdGlvbixcblx0XHRcdFx0XHRcdFx0bGV2ZWw6IGxldmVsLFxuXHRcdFx0XHRcdFx0XHRwcmVzZW50YXRpb246IHByZXNlbnRhdGlvbixcblx0XHRcdFx0XHRcdFx0c2hvd1RpdGxlOiBjb21waWxlRXhwcmVzc2lvbihzaG93VGl0bGUpLCAvLyBUaGlzIGlzIHVzZWQgb24gdGhlIE9iamVjdFBhZ2VTdWJTZWN0aW9uXG5cdFx0XHRcdFx0XHRcdGlzUGFydE9mUHJldmlldyxcblx0XHRcdFx0XHRcdFx0dGl0bGVWaXNpYmxlOiBjb21waWxlRXhwcmVzc2lvbih0aXRsZVZpc2libGUpIC8vIFRoaXMgaXMgdXNlZCB0byBoaWRlIHRoZSBhY3R1YWwgVGl0bGUgY29udHJvbFxuXHRcdFx0XHRcdFx0fTtcblx0XHRcdFx0XHRcdHJldHVybiBkYXRhVmlzdWFsaXphdGlvblN1YlNlY3Rpb247XG5cblx0XHRcdFx0XHRjYXNlIFVJQW5ub3RhdGlvblRlcm1zLkZpZWxkR3JvdXA6XG5cdFx0XHRcdFx0Y2FzZSBVSUFubm90YXRpb25UZXJtcy5JZGVudGlmaWNhdGlvbjpcblx0XHRcdFx0XHRjYXNlIFVJQW5ub3RhdGlvblRlcm1zLkRhdGFQb2ludDpcblx0XHRcdFx0XHRjYXNlIFVJQW5ub3RhdGlvblRlcm1zLlN0YXR1c0luZm86XG5cdFx0XHRcdFx0Y2FzZSBDb21tdW5pY2F0aW9uQW5ub3RhdGlvblRlcm1zLkNvbnRhY3Q6XG5cdFx0XHRcdFx0XHQvLyBBbGwgdGhvc2UgZWxlbWVudCBiZWxvbmcgdG8gYSBmcm9tIGZhY2V0XG5cdFx0XHRcdFx0XHRjb25zdCBmYWNldEFjdGlvbnMgPSBnZXRGYWNldEFjdGlvbnMoZmFjZXREZWZpbml0aW9uLCBjb252ZXJ0ZXJDb250ZXh0KSxcblx0XHRcdFx0XHRcdFx0Zm9ybUVsZW1lbnRTdWJTZWN0aW9uOiBGb3JtU3ViU2VjdGlvbiA9IHtcblx0XHRcdFx0XHRcdFx0XHQuLi5zdWJTZWN0aW9uLFxuXHRcdFx0XHRcdFx0XHRcdHR5cGU6IFN1YlNlY3Rpb25UeXBlLkZvcm0sXG5cdFx0XHRcdFx0XHRcdFx0bGV2ZWw6IGxldmVsLFxuXHRcdFx0XHRcdFx0XHRcdGZvcm1EZWZpbml0aW9uOiBjcmVhdGVGb3JtRGVmaW5pdGlvbihmYWNldERlZmluaXRpb24sIGlzVmlzaWJsZSwgY29udmVydGVyQ29udGV4dCwgZmFjZXRBY3Rpb25zLmFjdGlvbnMpLFxuXHRcdFx0XHRcdFx0XHRcdGFjdGlvbnM6IGZhY2V0QWN0aW9ucy5hY3Rpb25zLmZpbHRlcigoYWN0aW9uKSA9PiBhY3Rpb24uZmFjZXROYW1lID09PSB1bmRlZmluZWQpLFxuXHRcdFx0XHRcdFx0XHRcdGNvbW1hbmRBY3Rpb25zOiBmYWNldEFjdGlvbnMuY29tbWFuZEFjdGlvbnNcblx0XHRcdFx0XHRcdFx0fTtcblx0XHRcdFx0XHRcdHJldHVybiBmb3JtRWxlbWVudFN1YlNlY3Rpb247XG5cblx0XHRcdFx0XHRkZWZhdWx0OlxuXHRcdFx0XHRcdFx0dW5zdXBwb3J0ZWRUZXh0ID0gYEZvciAke2ZhY2V0RGVmaW5pdGlvbi5UYXJnZXQuJHRhcmdldC50ZXJtfSBGcmFnbWVudGA7XG5cdFx0XHRcdFx0XHRicmVhaztcblx0XHRcdFx0fVxuXHRcdFx0fVxuXHRcdFx0YnJlYWs7XG5cdFx0Y2FzZSBVSUFubm90YXRpb25UeXBlcy5SZWZlcmVuY2VVUkxGYWNldDpcblx0XHRcdHVuc3VwcG9ydGVkVGV4dCA9IFwiRm9yIFJlZmVyZW5jZSBVUkwgRmFjZXRcIjtcblx0XHRcdGJyZWFrO1xuXHRcdGRlZmF1bHQ6XG5cdFx0XHRicmVhaztcblx0fVxuXHQvLyBJZiB3ZSByZWFjaCBoZXJlIHdlIGVuZGVkIHVwIHdpdGggYW4gdW5zdXBwb3J0ZWQgU3ViU2VjdGlvbiB0eXBlXG5cdGNvbnN0IHVuc3VwcG9ydGVkU3ViU2VjdGlvbjogVW5zdXBwb3J0ZWRTdWJTZWN0aW9uID0ge1xuXHRcdC4uLnN1YlNlY3Rpb24sXG5cdFx0dGV4dDogdW5zdXBwb3J0ZWRUZXh0XG5cdH07XG5cdHJldHVybiB1bnN1cHBvcnRlZFN1YlNlY3Rpb247XG59XG5cbi8qKlxuICogQ2hlY2tzIHdoZXRoZXIgdG8gaGlkZSBvciBzaG93IHN1YnNlY3Rpb24gdGl0bGUuXG4gKlxuICogQHBhcmFtIGNvbnRyb2xUaXRsZVxuICogQHBhcmFtIHN1YlNlY3Rpb25UaXRsZVxuICogQHBhcmFtIGhhc1NpbmdsZUNvbnRlbnRcbiAqIEByZXR1cm5zIEJvb2xlYW4gdmFsdWUgb3IgZXhwcmVzc2lvbiBmb3Igc2hvd1RpdGxlXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBnZXRUaXRsZVZpc2liaWxpdHkoXG5cdGNvbnRyb2xUaXRsZTogc3RyaW5nLFxuXHRzdWJTZWN0aW9uVGl0bGU6IHN0cmluZyxcblx0aGFzU2luZ2xlQ29udGVudDogYm9vbGVhblxuKTogQmluZGluZ1Rvb2xraXRFeHByZXNzaW9uPGJvb2xlYW4+IHtcblx0Ly8gdmlzaWJsZSBzaGFsbCBiZSB0cnVlIGlmIHRoZXJlIGFyZSBtdWx0aXBsZSBjb250ZW50IG9yIGlmIHRoZSBjb250cm9sIGFuZCBzdWJzZWN0aW9uIHRpdGxlIGFyZSBkaWZmZXJlbnRcblx0cmV0dXJuIG9yKG5vdChoYXNTaW5nbGVDb250ZW50KSwgbm90RXF1YWwocmVzb2x2ZUJpbmRpbmdTdHJpbmcoY29udHJvbFRpdGxlKSwgcmVzb2x2ZUJpbmRpbmdTdHJpbmcoc3ViU2VjdGlvblRpdGxlKSkpO1xufVxuXG5mdW5jdGlvbiBjcmVhdGVGb3JtQWN0aW9uUmVkdWNlcihcblx0YWN0aW9uczogQ29udmVydGVyQWN0aW9uW10sXG5cdGZhY2V0RGVmaW5pdGlvbjogUmVmZXJlbmNlRmFjZXRUeXBlcyxcblx0Y29udmVydGVyQ29udGV4dDogQ29udmVydGVyQ29udGV4dFxuKTogQ29udmVydGVyQWN0aW9uW10ge1xuXHRjb25zdCByZWZlcmVuY2VUYXJnZXQgPSBmYWNldERlZmluaXRpb24uVGFyZ2V0LiR0YXJnZXQ7XG5cdGNvbnN0IHRhcmdldFZhbHVlID0gZmFjZXREZWZpbml0aW9uLlRhcmdldC52YWx1ZTtcblx0bGV0IG1hbmlmZXN0QWN0aW9uczogUmVjb3JkPHN0cmluZywgQ3VzdG9tQWN0aW9uPiA9IHt9O1xuXHRsZXQgZGF0YUZpZWxkQ29sbGVjdGlvbjogRGF0YUZpZWxkQWJzdHJhY3RUeXBlc1tdID0gW107XG5cdGxldCBuYXZpZ2F0aW9uUHJvcGVydHlQYXRoOiBzdHJpbmcgfCB1bmRlZmluZWQ7XG5cdFtuYXZpZ2F0aW9uUHJvcGVydHlQYXRoXSA9IHRhcmdldFZhbHVlLnNwbGl0KFwiQFwiKTtcblx0aWYgKG5hdmlnYXRpb25Qcm9wZXJ0eVBhdGgubGVuZ3RoID4gMCkge1xuXHRcdGlmIChuYXZpZ2F0aW9uUHJvcGVydHlQYXRoLmxhc3RJbmRleE9mKFwiL1wiKSA9PT0gbmF2aWdhdGlvblByb3BlcnR5UGF0aC5sZW5ndGggLSAxKSB7XG5cdFx0XHRuYXZpZ2F0aW9uUHJvcGVydHlQYXRoID0gbmF2aWdhdGlvblByb3BlcnR5UGF0aC5zdWJzdHIoMCwgbmF2aWdhdGlvblByb3BlcnR5UGF0aC5sZW5ndGggLSAxKTtcblx0XHR9XG5cdH0gZWxzZSB7XG5cdFx0bmF2aWdhdGlvblByb3BlcnR5UGF0aCA9IHVuZGVmaW5lZDtcblx0fVxuXG5cdGlmIChyZWZlcmVuY2VUYXJnZXQpIHtcblx0XHRzd2l0Y2ggKHJlZmVyZW5jZVRhcmdldC50ZXJtKSB7XG5cdFx0XHRjYXNlIFVJQW5ub3RhdGlvblRlcm1zLkZpZWxkR3JvdXA6XG5cdFx0XHRcdGRhdGFGaWVsZENvbGxlY3Rpb24gPSAocmVmZXJlbmNlVGFyZ2V0IGFzIEZpZWxkR3JvdXApLkRhdGE7XG5cdFx0XHRcdG1hbmlmZXN0QWN0aW9ucyA9IGdldEFjdGlvbnNGcm9tTWFuaWZlc3QoXG5cdFx0XHRcdFx0Y29udmVydGVyQ29udGV4dC5nZXRNYW5pZmVzdENvbnRyb2xDb25maWd1cmF0aW9uKHJlZmVyZW5jZVRhcmdldCkuYWN0aW9ucyxcblx0XHRcdFx0XHRjb252ZXJ0ZXJDb250ZXh0LFxuXHRcdFx0XHRcdHVuZGVmaW5lZCxcblx0XHRcdFx0XHR1bmRlZmluZWQsXG5cdFx0XHRcdFx0dW5kZWZpbmVkLFxuXHRcdFx0XHRcdHVuZGVmaW5lZCxcblx0XHRcdFx0XHRmYWNldERlZmluaXRpb24uZnVsbHlRdWFsaWZpZWROYW1lXG5cdFx0XHRcdCkuYWN0aW9ucztcblx0XHRcdFx0YnJlYWs7XG5cdFx0XHRjYXNlIFVJQW5ub3RhdGlvblRlcm1zLklkZW50aWZpY2F0aW9uOlxuXHRcdFx0Y2FzZSBVSUFubm90YXRpb25UZXJtcy5TdGF0dXNJbmZvOlxuXHRcdFx0XHRpZiAocmVmZXJlbmNlVGFyZ2V0LnF1YWxpZmllcikge1xuXHRcdFx0XHRcdGRhdGFGaWVsZENvbGxlY3Rpb24gPSByZWZlcmVuY2VUYXJnZXQ7XG5cdFx0XHRcdH1cblx0XHRcdFx0YnJlYWs7XG5cdFx0XHRkZWZhdWx0OlxuXHRcdFx0XHRicmVhaztcblx0XHR9XG5cdH1cblxuXHRhY3Rpb25zID0gZGF0YUZpZWxkQ29sbGVjdGlvbi5yZWR1Y2UoKGFjdGlvblJlZHVjZXIsIGRhdGFGaWVsZDogRGF0YUZpZWxkQWJzdHJhY3RUeXBlcykgPT4ge1xuXHRcdHN3aXRjaCAoZGF0YUZpZWxkLiRUeXBlKSB7XG5cdFx0XHRjYXNlIFVJQW5ub3RhdGlvblR5cGVzLkRhdGFGaWVsZEZvckludGVudEJhc2VkTmF2aWdhdGlvbjpcblx0XHRcdFx0aWYgKGRhdGFGaWVsZC5SZXF1aXJlc0NvbnRleHQ/LnZhbHVlT2YoKSA9PT0gdHJ1ZSkge1xuXHRcdFx0XHRcdGNvbnZlcnRlckNvbnRleHRcblx0XHRcdFx0XHRcdC5nZXREaWFnbm9zdGljcygpXG5cdFx0XHRcdFx0XHQuYWRkSXNzdWUoSXNzdWVDYXRlZ29yeS5Bbm5vdGF0aW9uLCBJc3N1ZVNldmVyaXR5LkxvdywgSXNzdWVUeXBlLk1BTEZPUk1FRF9EQVRBRklFTERfRk9SX0lCTi5SRVFVSVJFU0NPTlRFWFQpO1xuXHRcdFx0XHR9XG5cdFx0XHRcdGlmIChkYXRhRmllbGQuSW5saW5lPy52YWx1ZU9mKCkgPT09IHRydWUpIHtcblx0XHRcdFx0XHRjb252ZXJ0ZXJDb250ZXh0XG5cdFx0XHRcdFx0XHQuZ2V0RGlhZ25vc3RpY3MoKVxuXHRcdFx0XHRcdFx0LmFkZElzc3VlKElzc3VlQ2F0ZWdvcnkuQW5ub3RhdGlvbiwgSXNzdWVTZXZlcml0eS5Mb3csIElzc3VlVHlwZS5NQUxGT1JNRURfREFUQUZJRUxEX0ZPUl9JQk4uSU5MSU5FKTtcblx0XHRcdFx0fVxuXHRcdFx0XHRpZiAoZGF0YUZpZWxkLkRldGVybWluaW5nPy52YWx1ZU9mKCkgPT09IHRydWUpIHtcblx0XHRcdFx0XHRjb252ZXJ0ZXJDb250ZXh0XG5cdFx0XHRcdFx0XHQuZ2V0RGlhZ25vc3RpY3MoKVxuXHRcdFx0XHRcdFx0LmFkZElzc3VlKElzc3VlQ2F0ZWdvcnkuQW5ub3RhdGlvbiwgSXNzdWVTZXZlcml0eS5Mb3csIElzc3VlVHlwZS5NQUxGT1JNRURfREFUQUZJRUxEX0ZPUl9JQk4uREVURVJNSU5JTkcpO1xuXHRcdFx0XHR9XG5cdFx0XHRcdGNvbnN0IG1OYXZpZ2F0aW9uUGFyYW1ldGVyczogTmF2aWdhdGlvblBhcmFtZXRlcnMgPSB7fTtcblx0XHRcdFx0aWYgKGRhdGFGaWVsZC5NYXBwaW5nKSB7XG5cdFx0XHRcdFx0bU5hdmlnYXRpb25QYXJhbWV0ZXJzLnNlbWFudGljT2JqZWN0TWFwcGluZyA9IGdldFNlbWFudGljT2JqZWN0TWFwcGluZyhkYXRhRmllbGQuTWFwcGluZyk7XG5cdFx0XHRcdH1cblx0XHRcdFx0YWN0aW9uUmVkdWNlci5wdXNoKHtcblx0XHRcdFx0XHR0eXBlOiBBY3Rpb25UeXBlLkRhdGFGaWVsZEZvckludGVudEJhc2VkTmF2aWdhdGlvbixcblx0XHRcdFx0XHRpZDogZ2V0Rm9ybUlEKGZhY2V0RGVmaW5pdGlvbiwgZGF0YUZpZWxkKSxcblx0XHRcdFx0XHRrZXk6IEtleUhlbHBlci5nZW5lcmF0ZUtleUZyb21EYXRhRmllbGQoZGF0YUZpZWxkKSxcblx0XHRcdFx0XHR0ZXh0OiBkYXRhRmllbGQuTGFiZWw/LnRvU3RyaW5nKCksXG5cdFx0XHRcdFx0YW5ub3RhdGlvblBhdGg6IFwiXCIsXG5cdFx0XHRcdFx0ZW5hYmxlZDpcblx0XHRcdFx0XHRcdGRhdGFGaWVsZC5OYXZpZ2F0aW9uQXZhaWxhYmxlICE9PSB1bmRlZmluZWRcblx0XHRcdFx0XHRcdFx0PyBjb21waWxlRXhwcmVzc2lvbihlcXVhbChnZXRFeHByZXNzaW9uRnJvbUFubm90YXRpb24oZGF0YUZpZWxkLk5hdmlnYXRpb25BdmFpbGFibGU/LnZhbHVlT2YoKSksIHRydWUpKVxuXHRcdFx0XHRcdFx0XHQ6IFwidHJ1ZVwiLFxuXHRcdFx0XHRcdHZpc2libGU6IGNvbXBpbGVFeHByZXNzaW9uKG5vdChlcXVhbChnZXRFeHByZXNzaW9uRnJvbUFubm90YXRpb24oZGF0YUZpZWxkLmFubm90YXRpb25zPy5VST8uSGlkZGVuPy52YWx1ZU9mKCkpLCB0cnVlKSkpLFxuXHRcdFx0XHRcdGJ1dHRvblR5cGU6IGdldEJ1dHRvblR5cGUoZGF0YUZpZWxkLmFubm90YXRpb25zPy5VST8uRW1waGFzaXplZCksXG5cdFx0XHRcdFx0cHJlc3M6IGNvbXBpbGVFeHByZXNzaW9uKFxuXHRcdFx0XHRcdFx0Zm4oXCIuX2ludGVudEJhc2VkTmF2aWdhdGlvbi5uYXZpZ2F0ZVwiLCBbXG5cdFx0XHRcdFx0XHRcdGdldEV4cHJlc3Npb25Gcm9tQW5ub3RhdGlvbihkYXRhRmllbGQuU2VtYW50aWNPYmplY3QpLFxuXHRcdFx0XHRcdFx0XHRnZXRFeHByZXNzaW9uRnJvbUFubm90YXRpb24oZGF0YUZpZWxkLkFjdGlvbiksXG5cdFx0XHRcdFx0XHRcdG1OYXZpZ2F0aW9uUGFyYW1ldGVyc1xuXHRcdFx0XHRcdFx0XSlcblx0XHRcdFx0XHQpLFxuXHRcdFx0XHRcdGN1c3RvbURhdGE6IGNvbXBpbGVFeHByZXNzaW9uKHtcblx0XHRcdFx0XHRcdHNlbWFudGljT2JqZWN0OiBnZXRFeHByZXNzaW9uRnJvbUFubm90YXRpb24oZGF0YUZpZWxkLlNlbWFudGljT2JqZWN0KSxcblx0XHRcdFx0XHRcdGFjdGlvbjogZ2V0RXhwcmVzc2lvbkZyb21Bbm5vdGF0aW9uKGRhdGFGaWVsZC5BY3Rpb24pXG5cdFx0XHRcdFx0fSlcblx0XHRcdFx0fSk7XG5cdFx0XHRcdGJyZWFrO1xuXHRcdFx0Y2FzZSBVSUFubm90YXRpb25UeXBlcy5EYXRhRmllbGRGb3JBY3Rpb246XG5cdFx0XHRcdGNvbnN0IGZvcm1NYW5pZmVzdEFjdGlvbnNDb25maWd1cmF0aW9uID0gY29udmVydGVyQ29udGV4dC5nZXRNYW5pZmVzdENvbnRyb2xDb25maWd1cmF0aW9uKHJlZmVyZW5jZVRhcmdldCkuYWN0aW9ucztcblx0XHRcdFx0Y29uc3Qga2V5OiBzdHJpbmcgPSBLZXlIZWxwZXIuZ2VuZXJhdGVLZXlGcm9tRGF0YUZpZWxkKGRhdGFGaWVsZCk7XG5cdFx0XHRcdGFjdGlvblJlZHVjZXIucHVzaCh7XG5cdFx0XHRcdFx0dHlwZTogQWN0aW9uVHlwZS5EYXRhRmllbGRGb3JBY3Rpb24sXG5cdFx0XHRcdFx0aWQ6IGdldEZvcm1JRChmYWNldERlZmluaXRpb24sIGRhdGFGaWVsZCksXG5cdFx0XHRcdFx0a2V5OiBrZXksXG5cdFx0XHRcdFx0dGV4dDogZGF0YUZpZWxkLkxhYmVsPy50b1N0cmluZygpLFxuXHRcdFx0XHRcdGFubm90YXRpb25QYXRoOiBcIlwiLFxuXHRcdFx0XHRcdGVuYWJsZWQ6IGdldEVuYWJsZWRGb3JBbm5vdGF0aW9uQWN0aW9uKGNvbnZlcnRlckNvbnRleHQsIGRhdGFGaWVsZC5BY3Rpb25UYXJnZXQpLFxuXHRcdFx0XHRcdGJpbmRpbmc6IG5hdmlnYXRpb25Qcm9wZXJ0eVBhdGggPyBgeyAncGF0aCcgOiAnJHtuYXZpZ2F0aW9uUHJvcGVydHlQYXRofSd9YCA6IHVuZGVmaW5lZCxcblx0XHRcdFx0XHR2aXNpYmxlOiBjb21waWxlRXhwcmVzc2lvbihub3QoZXF1YWwoZ2V0RXhwcmVzc2lvbkZyb21Bbm5vdGF0aW9uKGRhdGFGaWVsZC5hbm5vdGF0aW9ucz8uVUk/LkhpZGRlbj8udmFsdWVPZigpKSwgdHJ1ZSkpKSxcblx0XHRcdFx0XHRyZXF1aXJlc0RpYWxvZzogaXNBY3Rpb25XaXRoRGlhbG9nKGRhdGFGaWVsZCksXG5cdFx0XHRcdFx0YnV0dG9uVHlwZTogZ2V0QnV0dG9uVHlwZShkYXRhRmllbGQuYW5ub3RhdGlvbnM/LlVJPy5FbXBoYXNpemVkKSxcblx0XHRcdFx0XHRwcmVzczogY29tcGlsZUV4cHJlc3Npb24oXG5cdFx0XHRcdFx0XHRmbihcblx0XHRcdFx0XHRcdFx0XCJpbnZva2VBY3Rpb25cIixcblx0XHRcdFx0XHRcdFx0W1xuXHRcdFx0XHRcdFx0XHRcdGRhdGFGaWVsZC5BY3Rpb24sXG5cdFx0XHRcdFx0XHRcdFx0e1xuXHRcdFx0XHRcdFx0XHRcdFx0Y29udGV4dHM6IGZuKFwiZ2V0QmluZGluZ0NvbnRleHRcIiwgW10sIHBhdGhJbk1vZGVsKFwiXCIsIFwiJHNvdXJjZVwiKSksXG5cdFx0XHRcdFx0XHRcdFx0XHRpbnZvY2F0aW9uR3JvdXBpbmc6IChkYXRhRmllbGQuSW52b2NhdGlvbkdyb3VwaW5nID09PSBcIlVJLk9wZXJhdGlvbkdyb3VwaW5nVHlwZS9DaGFuZ2VTZXRcIlxuXHRcdFx0XHRcdFx0XHRcdFx0XHQ/IFwiQ2hhbmdlU2V0XCJcblx0XHRcdFx0XHRcdFx0XHRcdFx0OiBcIklzb2xhdGVkXCIpIGFzIE9wZXJhdGlvbkdyb3VwaW5nVHlwZSxcblx0XHRcdFx0XHRcdFx0XHRcdGxhYmVsOiBnZXRFeHByZXNzaW9uRnJvbUFubm90YXRpb24oZGF0YUZpZWxkLkxhYmVsKSxcblx0XHRcdFx0XHRcdFx0XHRcdG1vZGVsOiBmbihcImdldE1vZGVsXCIsIFtdLCBwYXRoSW5Nb2RlbChcIi9cIiwgXCIkc291cmNlXCIpKSxcblx0XHRcdFx0XHRcdFx0XHRcdGlzTmF2aWdhYmxlOiBpc0FjdGlvbk5hdmlnYWJsZShcblx0XHRcdFx0XHRcdFx0XHRcdFx0Zm9ybU1hbmlmZXN0QWN0aW9uc0NvbmZpZ3VyYXRpb24gJiYgZm9ybU1hbmlmZXN0QWN0aW9uc0NvbmZpZ3VyYXRpb25ba2V5XVxuXHRcdFx0XHRcdFx0XHRcdFx0KVxuXHRcdFx0XHRcdFx0XHRcdH1cblx0XHRcdFx0XHRcdFx0XSxcblx0XHRcdFx0XHRcdFx0cmVmKFwiLmVkaXRGbG93XCIpXG5cdFx0XHRcdFx0XHQpXG5cdFx0XHRcdFx0KSxcblx0XHRcdFx0XHRmYWNldE5hbWU6IGRhdGFGaWVsZC5JbmxpbmUgPyBmYWNldERlZmluaXRpb24uZnVsbHlRdWFsaWZpZWROYW1lIDogdW5kZWZpbmVkXG5cdFx0XHRcdH0pO1xuXHRcdFx0XHRicmVhaztcblx0XHRcdGRlZmF1bHQ6XG5cdFx0XHRcdGJyZWFrO1xuXHRcdH1cblx0XHRyZXR1cm4gYWN0aW9uUmVkdWNlcjtcblx0fSwgYWN0aW9ucyk7XG5cdC8vIE92ZXJ3cml0aW5nIG9mIGFjdGlvbnMgaGFwcGVucyBpbiBhZGRGb3JtTWVudUFjdGlvbnNcblx0cmV0dXJuIGluc2VydEN1c3RvbUVsZW1lbnRzKGFjdGlvbnMsIG1hbmlmZXN0QWN0aW9ucyk7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBpc0RpYWxvZyhhY3Rpb25EZWZpbml0aW9uOiBBY3Rpb24gfCB1bmRlZmluZWQpOiBzdHJpbmcge1xuXHRpZiAoYWN0aW9uRGVmaW5pdGlvbikge1xuXHRcdGNvbnN0IGJDcml0aWNhbCA9IGFjdGlvbkRlZmluaXRpb24uYW5ub3RhdGlvbnM/LkNvbW1vbj8uSXNBY3Rpb25Dcml0aWNhbDtcblx0XHRpZiAoYWN0aW9uRGVmaW5pdGlvbi5wYXJhbWV0ZXJzLmxlbmd0aCA+IDEgfHwgYkNyaXRpY2FsKSB7XG5cdFx0XHRyZXR1cm4gXCJEaWFsb2dcIjtcblx0XHR9IGVsc2Uge1xuXHRcdFx0cmV0dXJuIFwiTm9uZVwiO1xuXHRcdH1cblx0fSBlbHNlIHtcblx0XHRyZXR1cm4gXCJOb25lXCI7XG5cdH1cbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGNyZWF0ZUN1c3RvbVN1YlNlY3Rpb25zKFxuXHRtYW5pZmVzdFN1YlNlY3Rpb25zOiBSZWNvcmQ8c3RyaW5nLCBNYW5pZmVzdFN1YlNlY3Rpb24+LFxuXHRjb252ZXJ0ZXJDb250ZXh0OiBDb252ZXJ0ZXJDb250ZXh0XG4pOiBSZWNvcmQ8c3RyaW5nLCBDdXN0b21PYmplY3RQYWdlU3ViU2VjdGlvbj4ge1xuXHRjb25zdCBzdWJTZWN0aW9uczogUmVjb3JkPHN0cmluZywgQ3VzdG9tT2JqZWN0UGFnZVN1YlNlY3Rpb24+ID0ge307XG5cdE9iamVjdC5rZXlzKG1hbmlmZXN0U3ViU2VjdGlvbnMpLmZvckVhY2goXG5cdFx0KHN1YlNlY3Rpb25LZXkpID0+XG5cdFx0XHQoc3ViU2VjdGlvbnNbc3ViU2VjdGlvbktleV0gPSBjcmVhdGVDdXN0b21TdWJTZWN0aW9uKG1hbmlmZXN0U3ViU2VjdGlvbnNbc3ViU2VjdGlvbktleV0sIHN1YlNlY3Rpb25LZXksIGNvbnZlcnRlckNvbnRleHQpKVxuXHQpO1xuXHRyZXR1cm4gc3ViU2VjdGlvbnM7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBjcmVhdGVDdXN0b21TdWJTZWN0aW9uKFxuXHRtYW5pZmVzdFN1YlNlY3Rpb246IE1hbmlmZXN0U3ViU2VjdGlvbixcblx0c3ViU2VjdGlvbktleTogc3RyaW5nLFxuXHRjb252ZXJ0ZXJDb250ZXh0OiBDb252ZXJ0ZXJDb250ZXh0XG4pOiBDdXN0b21PYmplY3RQYWdlU3ViU2VjdGlvbiB7XG5cdGNvbnN0IHNpZGVDb250ZW50OiBTaWRlQ29udGVudERlZiB8IHVuZGVmaW5lZCA9IG1hbmlmZXN0U3ViU2VjdGlvbi5zaWRlQ29udGVudFxuXHRcdD8ge1xuXHRcdFx0XHR0ZW1wbGF0ZTogbWFuaWZlc3RTdWJTZWN0aW9uLnNpZGVDb250ZW50LnRlbXBsYXRlLFxuXHRcdFx0XHRpZDogZ2V0U2lkZUNvbnRlbnRJRChzdWJTZWN0aW9uS2V5KSxcblx0XHRcdFx0dmlzaWJsZTogZmFsc2UsXG5cdFx0XHRcdGVxdWFsU3BsaXQ6IG1hbmlmZXN0U3ViU2VjdGlvbi5zaWRlQ29udGVudC5lcXVhbFNwbGl0XG5cdFx0ICB9XG5cdFx0OiB1bmRlZmluZWQ7XG5cdGxldCBwb3NpdGlvbiA9IG1hbmlmZXN0U3ViU2VjdGlvbi5wb3NpdGlvbjtcblx0aWYgKCFwb3NpdGlvbikge1xuXHRcdHBvc2l0aW9uID0ge1xuXHRcdFx0cGxhY2VtZW50OiBQbGFjZW1lbnQuQWZ0ZXJcblx0XHR9O1xuXHR9XG5cdGNvbnN0IGlzVmlzaWJsZSA9IG1hbmlmZXN0U3ViU2VjdGlvbi52aXNpYmxlICE9PSB1bmRlZmluZWQgPyBtYW5pZmVzdFN1YlNlY3Rpb24udmlzaWJsZSA6IHRydWU7XG5cdGNvbnN0IGlzRHluYW1pY0V4cHJlc3Npb24gPSBpc1Zpc2libGUgJiYgdHlwZW9mIGlzVmlzaWJsZSA9PT0gXCJzdHJpbmdcIiAmJiBpc1Zpc2libGUuaW5kZXhPZihcIns9XCIpID09PSAwO1xuXHRjb25zdCBtYW5pZmVzdEFjdGlvbnMgPSBnZXRBY3Rpb25zRnJvbU1hbmlmZXN0KG1hbmlmZXN0U3ViU2VjdGlvbi5hY3Rpb25zLCBjb252ZXJ0ZXJDb250ZXh0KTtcblx0Y29uc3Qgc3ViU2VjdGlvbkRlZmluaXRpb24gPSB7XG5cdFx0dHlwZTogU3ViU2VjdGlvblR5cGUuVW5rbm93bixcblx0XHRpZDogbWFuaWZlc3RTdWJTZWN0aW9uLmlkIHx8IGdldEN1c3RvbVN1YlNlY3Rpb25JRChzdWJTZWN0aW9uS2V5KSxcblx0XHRhY3Rpb25zOiBtYW5pZmVzdEFjdGlvbnMuYWN0aW9ucyxcblx0XHRrZXk6IHN1YlNlY3Rpb25LZXksXG5cdFx0dGl0bGU6IG1hbmlmZXN0U3ViU2VjdGlvbi50aXRsZSxcblx0XHRsZXZlbDogMSxcblx0XHRwb3NpdGlvbjogcG9zaXRpb24sXG5cdFx0dmlzaWJsZTogbWFuaWZlc3RTdWJTZWN0aW9uLnZpc2libGUgIT09IHVuZGVmaW5lZCA/IG1hbmlmZXN0U3ViU2VjdGlvbi52aXNpYmxlIDogXCJ0cnVlXCIsXG5cdFx0c2lkZUNvbnRlbnQ6IHNpZGVDb250ZW50LFxuXHRcdGlzVmlzaWJpbGl0eUR5bmFtaWM6IGlzRHluYW1pY0V4cHJlc3Npb24sXG5cdFx0b2JqZWN0UGFnZUxhenlMb2FkZXJFbmFibGVkOiBtYW5pZmVzdFN1YlNlY3Rpb24uZW5hYmxlTGF6eUxvYWRpbmcgPz8gZmFsc2UsXG5cdFx0Y29tcG9uZW50TmFtZTogXCJcIixcblx0XHRzZXR0aW5nczogXCJcIlxuXHR9O1xuXHRpZiAobWFuaWZlc3RTdWJTZWN0aW9uLnRlbXBsYXRlIHx8IG1hbmlmZXN0U3ViU2VjdGlvbi5uYW1lKSB7XG5cdFx0c3ViU2VjdGlvbkRlZmluaXRpb24udHlwZSA9IFN1YlNlY3Rpb25UeXBlLlhNTEZyYWdtZW50O1xuXHRcdChzdWJTZWN0aW9uRGVmaW5pdGlvbiBhcyB1bmtub3duIGFzIFhNTEZyYWdtZW50U3ViU2VjdGlvbikudGVtcGxhdGUgPSBtYW5pZmVzdFN1YlNlY3Rpb24udGVtcGxhdGUgfHwgbWFuaWZlc3RTdWJTZWN0aW9uLm5hbWUgfHwgXCJcIjtcblx0fSBlbHNlIGlmIChtYW5pZmVzdFN1YlNlY3Rpb24uZW1iZWRkZWRDb21wb25lbnQgIT09IHVuZGVmaW5lZCkge1xuXHRcdHN1YlNlY3Rpb25EZWZpbml0aW9uLnR5cGUgPSBTdWJTZWN0aW9uVHlwZS5FbWJlZGRlZENvbXBvbmVudDtcblx0XHRzdWJTZWN0aW9uRGVmaW5pdGlvbi5jb21wb25lbnROYW1lID0gbWFuaWZlc3RTdWJTZWN0aW9uLmVtYmVkZGVkQ29tcG9uZW50Lm5hbWU7XG5cdFx0aWYgKG1hbmlmZXN0U3ViU2VjdGlvbi5lbWJlZGRlZENvbXBvbmVudC5zZXR0aW5ncyAhPT0gdW5kZWZpbmVkKSB7XG5cdFx0XHRzdWJTZWN0aW9uRGVmaW5pdGlvbi5zZXR0aW5ncyA9IEpTT04uc3RyaW5naWZ5KG1hbmlmZXN0U3ViU2VjdGlvbi5lbWJlZGRlZENvbXBvbmVudC5zZXR0aW5ncyk7XG5cdFx0fVxuXHR9IGVsc2Uge1xuXHRcdHN1YlNlY3Rpb25EZWZpbml0aW9uLnR5cGUgPSBTdWJTZWN0aW9uVHlwZS5QbGFjZWhvbGRlcjtcblx0fVxuXHRyZXR1cm4gc3ViU2VjdGlvbkRlZmluaXRpb24gYXMgQ3VzdG9tT2JqZWN0UGFnZVN1YlNlY3Rpb247XG59XG5cbi8qKlxuICogRXZhbHVhdGUgaWYgdGhlIGNvbmRlbnNlZCBtb2RlIGNhbiBiZSBhcHBsaWVkIG9uIHRoZSB0YWJsZS5cbiAqXG4gKiBAcGFyYW0gY3VycmVudEZhY2V0XG4gKiBAcGFyYW0gZmFjZXRzVG9DcmVhdGVJblNlY3Rpb25cbiAqIEBwYXJhbSBjb252ZXJ0ZXJDb250ZXh0XG4gKiBAcmV0dXJucyBgdHJ1ZWAgZm9yIGNvbXBsaWFudCwgZmFsc2Ugb3RoZXJ3aXNlXG4gKi9cbmZ1bmN0aW9uIGdldENvbmRlbnNlZFRhYmxlTGF5b3V0Q29tcGxpYW5jZShcblx0Y3VycmVudEZhY2V0OiBGYWNldFR5cGVzLFxuXHRmYWNldHNUb0NyZWF0ZUluU2VjdGlvbjogRmFjZXRUeXBlc1tdLFxuXHRjb252ZXJ0ZXJDb250ZXh0OiBDb252ZXJ0ZXJDb250ZXh0XG4pOiBib29sZWFuIHtcblx0Y29uc3QgbWFuaWZlc3RXcmFwcGVyID0gY29udmVydGVyQ29udGV4dC5nZXRNYW5pZmVzdFdyYXBwZXIoKTtcblx0aWYgKG1hbmlmZXN0V3JhcHBlci51c2VJY29uVGFiQmFyKCkpIHtcblx0XHQvLyBJZiB0aGUgT1AgdXNlIHRoZSB0YWIgYmFzZWQgd2UgY2hlY2sgaWYgdGhlIGZhY2V0cyB0aGF0IHdpbGwgYmUgY3JlYXRlZCBmb3IgdGhpcyBzZWN0aW9uIGFyZSBhbGwgbm9uIHZpc2libGVcblx0XHRyZXR1cm4gaGFzTm9PdGhlclZpc2libGVUYWJsZUluVGFyZ2V0cyhjdXJyZW50RmFjZXQsIGZhY2V0c1RvQ3JlYXRlSW5TZWN0aW9uKTtcblx0fSBlbHNlIHtcblx0XHRjb25zdCBlbnRpdHlUeXBlID0gY29udmVydGVyQ29udGV4dC5nZXRFbnRpdHlUeXBlKCk7XG5cdFx0aWYgKGVudGl0eVR5cGUuYW5ub3RhdGlvbnM/LlVJPy5GYWNldHM/Lmxlbmd0aCAmJiBlbnRpdHlUeXBlLmFubm90YXRpb25zPy5VST8uRmFjZXRzPy5sZW5ndGggPiAxKSB7XG5cdFx0XHRyZXR1cm4gaGFzTm9PdGhlclZpc2libGVUYWJsZUluVGFyZ2V0cyhjdXJyZW50RmFjZXQsIGZhY2V0c1RvQ3JlYXRlSW5TZWN0aW9uKTtcblx0XHR9IGVsc2Uge1xuXHRcdFx0cmV0dXJuIHRydWU7XG5cdFx0fVxuXHR9XG59XG5cbmZ1bmN0aW9uIGhhc05vT3RoZXJWaXNpYmxlVGFibGVJblRhcmdldHMoY3VycmVudEZhY2V0OiBGYWNldFR5cGVzLCBmYWNldHNUb0NyZWF0ZUluU2VjdGlvbjogRmFjZXRUeXBlc1tdKTogYm9vbGVhbiB7XG5cdHJldHVybiBmYWNldHNUb0NyZWF0ZUluU2VjdGlvbi5ldmVyeShmdW5jdGlvbiAoc3ViRmFjZXQpIHtcblx0XHRpZiAoc3ViRmFjZXQgIT09IGN1cnJlbnRGYWNldCkge1xuXHRcdFx0aWYgKHN1YkZhY2V0LiRUeXBlID09PSBVSUFubm90YXRpb25UeXBlcy5SZWZlcmVuY2VGYWNldCkge1xuXHRcdFx0XHRjb25zdCByZWZGYWNldCA9IHN1YkZhY2V0O1xuXHRcdFx0XHRpZiAoXG5cdFx0XHRcdFx0cmVmRmFjZXQuVGFyZ2V0Py4kdGFyZ2V0Py50ZXJtID09PSBVSUFubm90YXRpb25UZXJtcy5MaW5lSXRlbSB8fFxuXHRcdFx0XHRcdHJlZkZhY2V0LlRhcmdldD8uJHRhcmdldD8udGVybSA9PT0gVUlBbm5vdGF0aW9uVGVybXMuUHJlc2VudGF0aW9uVmFyaWFudCB8fFxuXHRcdFx0XHRcdHJlZkZhY2V0LlRhcmdldC4kdGFyZ2V0Py50ZXJtID09PSBVSUFubm90YXRpb25UZXJtcy5TZWxlY3Rpb25QcmVzZW50YXRpb25WYXJpYW50XG5cdFx0XHRcdCkge1xuXHRcdFx0XHRcdHJldHVybiByZWZGYWNldC5hbm5vdGF0aW9ucz8uVUk/LkhpZGRlbiAhPT0gdW5kZWZpbmVkID8gcmVmRmFjZXQuYW5ub3RhdGlvbnM/LlVJPy5IaWRkZW4gOiBmYWxzZTtcblx0XHRcdFx0fVxuXHRcdFx0XHRyZXR1cm4gdHJ1ZTtcblx0XHRcdH0gZWxzZSB7XG5cdFx0XHRcdGNvbnN0IHN1YkNvbGxlY3Rpb25GYWNldCA9IHN1YkZhY2V0IGFzIENvbGxlY3Rpb25GYWNldFR5cGVzO1xuXHRcdFx0XHRyZXR1cm4gc3ViQ29sbGVjdGlvbkZhY2V0LkZhY2V0cy5ldmVyeShmdW5jdGlvbiAoZmFjZXQpIHtcblx0XHRcdFx0XHRjb25zdCBzdWJSZWZGYWNldCA9IGZhY2V0IGFzIFJlZmVyZW5jZUZhY2V0VHlwZXM7XG5cdFx0XHRcdFx0aWYgKFxuXHRcdFx0XHRcdFx0c3ViUmVmRmFjZXQuVGFyZ2V0Py4kdGFyZ2V0Py50ZXJtID09PSBVSUFubm90YXRpb25UZXJtcy5MaW5lSXRlbSB8fFxuXHRcdFx0XHRcdFx0c3ViUmVmRmFjZXQuVGFyZ2V0Py4kdGFyZ2V0Py50ZXJtID09PSBVSUFubm90YXRpb25UZXJtcy5QcmVzZW50YXRpb25WYXJpYW50IHx8XG5cdFx0XHRcdFx0XHRzdWJSZWZGYWNldC5UYXJnZXQ/LiR0YXJnZXQ/LnRlcm0gPT09IFVJQW5ub3RhdGlvblRlcm1zLlNlbGVjdGlvblByZXNlbnRhdGlvblZhcmlhbnRcblx0XHRcdFx0XHQpIHtcblx0XHRcdFx0XHRcdHJldHVybiBzdWJSZWZGYWNldC5hbm5vdGF0aW9ucz8uVUk/LkhpZGRlbiAhPT0gdW5kZWZpbmVkID8gc3ViUmVmRmFjZXQuYW5ub3RhdGlvbnM/LlVJPy5IaWRkZW4gOiBmYWxzZTtcblx0XHRcdFx0XHR9XG5cdFx0XHRcdFx0cmV0dXJuIHRydWU7XG5cdFx0XHRcdH0pO1xuXHRcdFx0fVxuXHRcdH1cblx0XHRyZXR1cm4gdHJ1ZTtcblx0fSk7XG59XG4iXSwibWFwcGluZ3MiOiI7QUFBQTtBQUFBO0FBQUE7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7TUFzRVlBLGNBQWM7RUFBQSxXQUFkQSxjQUFjO0lBQWRBLGNBQWM7SUFBZEEsY0FBYztJQUFkQSxjQUFjO0lBQWRBLGNBQWM7SUFBZEEsY0FBYztJQUFkQSxjQUFjO0lBQWRBLGNBQWM7RUFBQSxHQUFkQSxjQUFjLEtBQWRBLGNBQWM7RUFBQTtFQW9HMUIsTUFBTUMsa0JBQTRCLEdBQUcsd0xBS3BDOztFQUVEO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7RUFDTyxTQUFTQyxpQkFBaUIsQ0FDaENDLGVBQTZCLEVBQzdCQyxnQkFBa0MsRUFDbENDLGVBQXlCLEVBQ0E7SUFD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
@@ -2,5 +2,5 @@
2
2
  * SAP UI development toolkit for HTML5 (SAPUI5)
3
3
  * (c) Copyright 2009-2023 SAP SE. All rights reserved
4
4
  */
5
- sap.ui.define(["sap/base/Log","sap/fe/core/converters/controls/Common/Action","sap/fe/core/converters/controls/ObjectPage/HeaderFacet","sap/fe/core/converters/helpers/IssueManager","sap/fe/core/converters/helpers/Key","sap/fe/core/helpers/BindingToolkit","sap/fe/core/templating/PropertyHelper","../../annotations/DataField","../../helpers/ConfigurableObject","../../helpers/ID","../../ManifestSettings","../../objectPage/FormMenuActions","../Common/DataVisualization","../Common/Form"],function(e,t,n,a,i,o,s,r,l,c,d,u,v,f){"use strict";var m={};var p=f.isReferenceFacet;var g=f.createFormDefinition;var b=v.getDataVisualizationConfiguration;var I=u.getVisibilityEnablementFormMenuActions;var F=u.getFormHiddenActions;var h=u.getFormActions;var y=d.ActionType;var U=c.getSubSectionID;var C=c.getSideContentID;var S=c.getFormID;var D=c.getCustomSubSectionID;var A=l.Placement;var T=l.OverrideType;var L=l.insertCustomElements;var E=r.isActionWithDialog;var M=s.isPathExpression;var k=o.resolveBindingString;var O=o.ref;var P=o.pathInModel;var N=o.or;var $=o.notEqual;var x=o.not;var R=o.ifElse;var w=o.getExpressionFromAnnotation;var V=o.fn;var H=o.equal;var j=o.compileExpression;var z=i.KeyHelper;var B=a.IssueType;var _=a.IssueSeverity;var q=a.IssueCategory;var G=n.getStashedSettingsForHeaderFacet;var W=n.getHeaderFacetsFromManifest;var X=n.getDesignTimeMetadataSettingsForHeaderFacet;var K=t.removeDuplicateActions;var Q=t.isActionNavigable;var J=t.getSemanticObjectMapping;var Y=t.getEnabledForAnnotationAction;var Z=t.getActionsFromManifest;var ee=t.ButtonType;let te;(function(e){e["Unknown"]="Unknown";e["Form"]="Form";e["DataVisualization"]="DataVisualization";e["XMLFragment"]="XMLFragment";e["Placeholder"]="Placeholder";e["Mixed"]="Mixed";e["EmbeddedComponent"]="EmbeddedComponent"})(te||(te={}));m.SubSectionType=te;const ne=["com.sap.vocabularies.UI.v1.LineItem","com.sap.vocabularies.UI.v1.Chart","com.sap.vocabularies.UI.v1.PresentationVariant","com.sap.vocabularies.UI.v1.SelectionPresentationVariant"];function ae(e,t,n){const a=e.reduce((e,t)=>{switch(t.$Type){case"com.sap.vocabularies.UI.v1.ReferenceFacet":e.push(t);break;case"com.sap.vocabularies.UI.v1.CollectionFacet":if(t.Facets.find(e=>e.$Type==="com.sap.vocabularies.UI.v1.CollectionFacet")){e.splice(e.length,0,...t.Facets)}else{e.push(t)}break;case"com.sap.vocabularies.UI.v1.ReferenceURLFacet":break}return e},[]);return a.map(e=>{var i;return de(e,a,t,0,!(e!==null&&e!==void 0&&(i=e.Facets)!==null&&i!==void 0&&i.length),n)})}m.createSubSections=ae;function ie(e){const t=W(e.getManifestWrapper().getHeaderFacets());const n=[];Object.keys(t).forEach(function(e){n.push(t[e]);return n});const a=n.reduce((e,t)=>{if(t.templateEdit){e.push(t)}return e},[]);return a.map(e=>oe(e))}m.createCustomHeaderFacetSubSections=ie;function oe(e){const t=D(e.key);const n={id:t,key:e.key,title:e.title,type:te.XMLFragment,template:e.templateEdit||"",visible:e.visible,level:1,sideContent:undefined,stashed:e.stashed,flexSettings:e.flexSettings,actions:{},objectPageLazyLoaderEnabled:false};return n}const se=(e,t)=>{var n,a;return((n=e.ID)===null||n===void 0?void 0:n.toString())||((a=e.Label)===null||a===void 0?void 0:a.toString())||t};function re(e,t,n){const a=F(t,n)||[],i=h(t,n),o=Z(i,n,e,undefined,undefined,a),s={enabled:T.overwrite,visible:T.overwrite,command:T.overwrite},r=L(e,o.actions,s);return{actions:r?I(K(r)):e,commandActions:o.commandActions}}function le(e,t){let n=[];switch(e.$Type){case"com.sap.vocabularies.UI.v1.CollectionFacet":n=e.Facets.filter(e=>p(e)).reduce((e,n)=>ve(e,n,t),[]);break;case"com.sap.vocabularies.UI.v1.ReferenceFacet":n=ve([],e,t);break;default:break}return re(n,e,t)}function ce(e){const t=H(w(e),true);return j(R(t,ee.Ghost,ee.Transparent))}function de(t,n,a,i,o,s){var r,l,c,d,u;const v=U(t);const f=(r=t.annotations)===null||r===void 0?void 0:(l=r.UI)===null||l===void 0?void 0:l.Hidden;const m=j(x(H(true,w(f))));const p=m&&typeof m==="string"&&m.indexOf("{=")===0&&!M(f);const I=m&&p?m.substring(m.indexOf("{=")+2,m.lastIndexOf("}")):false;const F=j(w(t.Label));const h={id:v,key:se(t,v),title:F,type:te.Unknown,annotationPath:a.getEntitySetBasedAnnotationPath(t.fullyQualifiedName),visible:m,isVisibilityDynamic:p,level:i,sideContent:undefined,objectPageLazyLoaderEnabled:a.getManifestWrapper().getEnableLazyLoading()};if(s){h.stashed=G(t,t,a);h.flexSettings={designtime:X(t,t,a)}}let y="";i++;switch(t.$Type){case"com.sap.vocabularies.UI.v1.CollectionFacet":const r=t.Facets;const l=r.map((e,t)=>({index:t,facet:e})).filter(e=>{var t,n;let{facet:a}=e;return ne.includes((t=a.Target)===null||t===void 0?void 0:(n=t.$target)===null||n===void 0?void 0:n.term)});const v=r.filter(e=>!l.find(t=>t.facet===e));if(l.length>0){const n=[];const c=[];const d=[];for(const{facet:e}of l){n.push(de(e,[],a,i,r.length===1,s))}if(v.length>0){e.warning(`Warning: CollectionFacet '${t.ID}' includes a combination of either a chart or a table and other content. This can lead to rendering issues. Consider moving the chart or table into a separate CollectionFacet.`);const n={...t};n.Facets=v;c.push(de(n,[],a,i,o,s))}if(l.find(e=>{let{index:t}=e;return t===0})){d.push(...n);d.push(...c)}else{d.push(...c);d.push(...n)}const u={...h,type:te.Mixed,level:i,content:d};return u}else{const e=le(t,a),n={...h,type:te.Form,formDefinition:g(t,m,a,e.actions),level:i,actions:e.actions.filter(e=>e.facetName===undefined),commandActions:e.commandActions};return n}case"com.sap.vocabularies.UI.v1.ReferenceFacet":if(!t.Target.$target){y=`Unable to find annotationPath ${t.Target.value}`}else{switch(t.Target.$target.term){case"com.sap.vocabularies.UI.v1.LineItem":case"com.sap.vocabularies.UI.v1.Chart":case"com.sap.vocabularies.UI.v1.PresentationVariant":case"com.sap.vocabularies.UI.v1.SelectionPresentationVariant":if(s==null||!s){h.class="sapUxAPObjectPageSubSectionFitContainer"}const e=b(t.Target.value,ge(t,n,a),a,undefined,s);const r=h.title?h.title:"";const l=((c=e.visualizations[0])===null||c===void 0?void 0:(d=c.annotation)===null||d===void 0?void 0:d.title)||((u=e.visualizations[0])===null||u===void 0?void 0:u.title);const v=ue(l??"",r,o);const f=m&&F!=="undefined"&&(F?m:false);const U={...h,type:te.DataVisualization,level:i,presentation:e,showTitle:v,titleVisible:p?`{= (${I}) && ('${F}' !=='undefined') && (${v} ? true : false) }`:f};return U;case"com.sap.vocabularies.UI.v1.FieldGroup":case"com.sap.vocabularies.UI.v1.Identification":case"com.sap.vocabularies.UI.v1.DataPoint":case"com.sap.vocabularies.UI.v1.StatusInfo":case"com.sap.vocabularies.Communication.v1.Contact":const C=le(t,a),S={...h,type:te.Form,level:i,formDefinition:g(t,m,a,C.actions),actions:C.actions.filter(e=>e.facetName===undefined),commandActions:C.commandActions};return S;default:y=`For ${t.Target.$target.term} Fragment`;break}}break;case"com.sap.vocabularies.UI.v1.ReferenceURLFacet":y="For Reference URL Facet";break;default:break}const C={...h,text:y};return C}m.createSubSection=de;function ue(e,t,n){return j(N(x(n),$(k(e),k(t))))}m.getTitleVisibility=ue;function ve(e,t,n){const a=t.Target.$target;const i=t.Target.value;let o={};let s=[];let r;[r]=i.split("@");if(r.length>0){if(r.lastIndexOf("/")===r.length-1){r=r.substr(0,r.length-1)}}else{r=undefined}if(a){switch(a.term){case"com.sap.vocabularies.UI.v1.FieldGroup":s=a.Data;o=Z(n.getManifestControlConfiguration(a).actions,n,undefined,undefined,undefined,undefined,t.fullyQualifiedName).actions;break;case"com.sap.vocabularies.UI.v1.Identification":case"com.sap.vocabularies.UI.v1.StatusInfo":if(a.qualifier){s=a}break;default:break}}e=s.reduce((e,i)=>{var o,s,l,c,d,u,v,f,m,p,g,b,I,F,h,U;switch(i.$Type){case"com.sap.vocabularies.UI.v1.DataFieldForIntentBasedNavigation":if(((o=i.RequiresContext)===null||o===void 0?void 0:o.valueOf())===true){n.getDiagnostics().addIssue(q.Annotation,_.Low,B.MALFORMED_DATAFIELD_FOR_IBN.REQUIRESCONTEXT)}if(((s=i.Inline)===null||s===void 0?void 0:s.valueOf())===true){n.getDiagnostics().addIssue(q.Annotation,_.Low,B.MALFORMED_DATAFIELD_FOR_IBN.INLINE)}if(((l=i.Determining)===null||l===void 0?void 0:l.valueOf())===true){n.getDiagnostics().addIssue(q.Annotation,_.Low,B.MALFORMED_DATAFIELD_FOR_IBN.DETERMINING)}const C={};if(i.Mapping){C.semanticObjectMapping=J(i.Mapping)}e.push({type:y.DataFieldForIntentBasedNavigation,id:S(t,i),key:z.generateKeyFromDataField(i),text:(c=i.Label)===null||c===void 0?void 0:c.toString(),annotationPath:"",enabled:i.NavigationAvailable!==undefined?j(H(w((d=i.NavigationAvailable)===null||d===void 0?void 0:d.valueOf()),true)):"true",visible:j(x(H(w((u=i.annotations)===null||u===void 0?void 0:(v=u.UI)===null||v===void 0?void 0:(f=v.Hidden)===null||f===void 0?void 0:f.valueOf()),true))),buttonType:ce((m=i.annotations)===null||m===void 0?void 0:(p=m.UI)===null||p===void 0?void 0:p.Emphasized),press:j(V("._intentBasedNavigation.navigate",[w(i.SemanticObject),w(i.Action),C])),customData:j({semanticObject:w(i.SemanticObject),action:w(i.Action)})});break;case"com.sap.vocabularies.UI.v1.DataFieldForAction":const D=n.getManifestControlConfiguration(a).actions;const A=z.generateKeyFromDataField(i);e.push({type:y.DataFieldForAction,id:S(t,i),key:A,text:(g=i.Label)===null||g===void 0?void 0:g.toString(),annotationPath:"",enabled:Y(n,i.ActionTarget),binding:r?`{ 'path' : '${r}'}`:undefined,visible:j(x(H(w((b=i.annotations)===null||b===void 0?void 0:(I=b.UI)===null||I===void 0?void 0:(F=I.Hidden)===null||F===void 0?void 0:F.valueOf()),true))),requiresDialog:E(i),buttonType:ce((h=i.annotations)===null||h===void 0?void 0:(U=h.UI)===null||U===void 0?void 0:U.Emphasized),press:j(V("invokeAction",[i.Action,{contexts:V("getBindingContext",[],P("","$source")),invocationGrouping:i.InvocationGrouping==="UI.OperationGroupingType/ChangeSet"?"ChangeSet":"Isolated",label:w(i.Label),model:V("getModel",[],P("/","$source")),isNavigable:Q(D&&D[A])}],O(".editFlow"))),facetName:i.Inline?t.fullyQualifiedName:undefined});break;default:break}return e},e);return L(e,o)}function fe(e){if(e){var t,n;const a=(t=e.annotations)===null||t===void 0?void 0:(n=t.Common)===null||n===void 0?void 0:n.IsActionCritical;if(e.parameters.length>1||a){return"Dialog"}else{return"None"}}else{return"None"}}m.isDialog=fe;function me(e,t){const n={};Object.keys(e).forEach(a=>n[a]=pe(e[a],a,t));return n}m.createCustomSubSections=me;function pe(e,t,n){const a=e.sideContent?{template:e.sideContent.template,id:C(t),visible:false,equalSplit:e.sideContent.equalSplit}:undefined;let i=e.position;if(!i){i={placement:A.After}}const o=e.visible!==undefined?e.visible:true;const s=o&&typeof o==="string"&&o.indexOf("{=")===0;const r=Z(e.actions,n);const l={type:te.Unknown,id:e.id||D(t),actions:r.actions,key:t,title:e.title,level:1,position:i,visible:e.visible!==undefined?e.visible:"true",sideContent:a,isVisibilityDynamic:s,objectPageLazyLoaderEnabled:e.enableLazyLoading??false,componentName:"",settings:""};if(e.template||e.name){l.type=te.XMLFragment;l.template=e.template||e.name||""}else if(e.embeddedComponent!==undefined){l.type=te.EmbeddedComponent;l.componentName=e.embeddedComponent.name;if(e.embeddedComponent.settings!==undefined){l.settings=JSON.stringify(e.embeddedComponent.settings)}}else{l.type=te.Placeholder}return l}m.createCustomSubSection=pe;function ge(e,t,n){const a=n.getManifestWrapper();if(a.useIconTabBar()){return be(e,t)}else{var i,o,s,r,l,c;const a=n.getEntityType();if((i=a.annotations)!==null&&i!==void 0&&(o=i.UI)!==null&&o!==void 0&&(s=o.Facets)!==null&&s!==void 0&&s.length&&((r=a.annotations)===null||r===void 0?void 0:(l=r.UI)===null||l===void 0?void 0:(c=l.Facets)===null||c===void 0?void 0:c.length)>1){return be(e,t)}else{return true}}}function be(e,t){return t.every(function(t){if(t!==e){if(t.$Type==="com.sap.vocabularies.UI.v1.ReferenceFacet"){var n,a,i,o,s;const e=t;if(((n=e.Target)===null||n===void 0?void 0:(a=n.$target)===null||a===void 0?void 0:a.term)==="com.sap.vocabularies.UI.v1.LineItem"||((i=e.Target)===null||i===void 0?void 0:(o=i.$target)===null||o===void 0?void 0:o.term)==="com.sap.vocabularies.UI.v1.PresentationVariant"||((s=e.Target.$target)===null||s===void 0?void 0:s.term)==="com.sap.vocabularies.UI.v1.SelectionPresentationVariant"){var r,l,c,d;return((r=e.annotations)===null||r===void 0?void 0:(l=r.UI)===null||l===void 0?void 0:l.Hidden)!==undefined?(c=e.annotations)===null||c===void 0?void 0:(d=c.UI)===null||d===void 0?void 0:d.Hidden:false}return true}else{const e=t;return e.Facets.every(function(e){var t,n,a,i,o,s;const r=e;if(((t=r.Target)===null||t===void 0?void 0:(n=t.$target)===null||n===void 0?void 0:n.term)==="com.sap.vocabularies.UI.v1.LineItem"||((a=r.Target)===null||a===void 0?void 0:(i=a.$target)===null||i===void 0?void 0:i.term)==="com.sap.vocabularies.UI.v1.PresentationVariant"||((o=r.Target)===null||o===void 0?void 0:(s=o.$target)===null||s===void 0?void 0:s.term)==="com.sap.vocabularies.UI.v1.SelectionPresentationVariant"){var l,c,d,u;return((l=r.annotations)===null||l===void 0?void 0:(c=l.UI)===null||c===void 0?void 0:c.Hidden)!==undefined?(d=r.annotations)===null||d===void 0?void 0:(u=d.UI)===null||u===void 0?void 0:u.Hidden:false}return true})}}return true})}return m},false);
5
+ sap.ui.define(["sap/base/Log","sap/fe/core/converters/controls/Common/Action","sap/fe/core/converters/controls/ObjectPage/HeaderFacet","sap/fe/core/converters/helpers/IssueManager","sap/fe/core/converters/helpers/Key","sap/fe/core/helpers/BindingToolkit","sap/fe/core/helpers/TypeGuards","../../annotations/DataField","../../helpers/ConfigurableObject","../../helpers/ID","../../ManifestSettings","../../objectPage/FormMenuActions","../Common/DataVisualization","../Common/Form"],function(e,t,n,a,i,o,s,r,l,c,d,u,v,f){"use strict";var m={};var p=f.isReferenceFacet;var g=f.createFormDefinition;var b=v.getDataVisualizationConfiguration;var I=u.getVisibilityEnablementFormMenuActions;var F=u.getFormHiddenActions;var h=u.getFormActions;var y=d.ActionType;var U=c.getSubSectionID;var C=c.getSideContentID;var D=c.getFormID;var S=c.getCustomSubSectionID;var A=l.Placement;var T=l.OverrideType;var L=l.insertCustomElements;var E=r.isActionWithDialog;var O=s.isPathAnnotationExpression;var M=o.resolveBindingString;var k=o.ref;var P=o.pathInModel;var N=o.or;var $=o.notEqual;var x=o.not;var w=o.ifElse;var R=o.getExpressionFromAnnotation;var V=o.fn;var H=o.equal;var z=o.compileExpression;var j=o.and;var B=i.KeyHelper;var _=a.IssueType;var G=a.IssueSeverity;var q=a.IssueCategory;var W=n.getStashedSettingsForHeaderFacet;var X=n.getHeaderFacetsFromManifest;var K=n.getDesignTimeMetadataSettingsForHeaderFacet;var Q=t.removeDuplicateActions;var J=t.isActionNavigable;var Y=t.getSemanticObjectMapping;var Z=t.getEnabledForAnnotationAction;var ee=t.getActionsFromManifest;var te=t.ButtonType;let ne;(function(e){e["Unknown"]="Unknown";e["Form"]="Form";e["DataVisualization"]="DataVisualization";e["XMLFragment"]="XMLFragment";e["Placeholder"]="Placeholder";e["Mixed"]="Mixed";e["EmbeddedComponent"]="EmbeddedComponent"})(ne||(ne={}));m.SubSectionType=ne;const ae=["com.sap.vocabularies.UI.v1.LineItem","com.sap.vocabularies.UI.v1.Chart","com.sap.vocabularies.UI.v1.PresentationVariant","com.sap.vocabularies.UI.v1.SelectionPresentationVariant"];function ie(e,t,n){const a=e.reduce((e,t)=>{switch(t.$Type){case"com.sap.vocabularies.UI.v1.ReferenceFacet":e.push(t);break;case"com.sap.vocabularies.UI.v1.CollectionFacet":if(t.Facets.find(e=>e.$Type==="com.sap.vocabularies.UI.v1.CollectionFacet")){e.splice(e.length,0,...t.Facets)}else{e.push(t)}break;case"com.sap.vocabularies.UI.v1.ReferenceURLFacet":break}return e},[]);return a.map(e=>{var i;return ue(e,a,t,0,!(e!==null&&e!==void 0&&(i=e.Facets)!==null&&i!==void 0&&i.length),n)})}m.createSubSections=ie;function oe(e){const t=X(e.getManifestWrapper().getHeaderFacets());const n=[];Object.keys(t).forEach(function(e){n.push(t[e]);return n});const a=n.reduce((e,t)=>{if(t.templateEdit){e.push(t)}return e},[]);return a.map(e=>se(e))}m.createCustomHeaderFacetSubSections=oe;function se(e){const t=S(e.key);const n={id:t,key:e.key,title:e.title,type:ne.XMLFragment,template:e.templateEdit||"",visible:e.visible,level:1,sideContent:undefined,stashed:e.stashed,flexSettings:e.flexSettings,actions:{},objectPageLazyLoaderEnabled:false};return n}const re=(e,t)=>{var n,a;return((n=e.ID)===null||n===void 0?void 0:n.toString())||((a=e.Label)===null||a===void 0?void 0:a.toString())||t};function le(e,t,n){const a=F(t,n)||[],i=h(t,n),o=ee(i,n,e,undefined,undefined,a),s={enabled:T.overwrite,visible:T.overwrite,command:T.overwrite},r=L(e,o.actions,s);return{actions:r?I(Q(r)):e,commandActions:o.commandActions}}function ce(e,t){let n=[];switch(e.$Type){case"com.sap.vocabularies.UI.v1.CollectionFacet":n=e.Facets.filter(e=>p(e)).reduce((e,n)=>fe(e,n,t),[]);break;case"com.sap.vocabularies.UI.v1.ReferenceFacet":n=fe([],e,t);break;default:break}return le(n,e,t)}function de(e){const t=H(R(e),true);return z(w(t,te.Ghost,te.Transparent))}function ue(t,n,a,i,o,s){var r,l,c,d,u,v,f,m;const p=U(t);const I=(r=t.annotations)===null||r===void 0?void 0:(l=r.UI)===null||l===void 0?void 0:l.Hidden;const F=x(H(true,R(I)));const h=z(F);const y=h!==undefined&&typeof h==="string"&&h.indexOf("{=")===0&&!O(I);const C=h&&y?h.substring(h.indexOf("{=")+2,h.lastIndexOf("}"))!==undefined:false;const D=z(R(t.Label));const S={id:p,key:re(t,p),title:D,type:ne.Unknown,annotationPath:a.getEntitySetBasedAnnotationPath(t.fullyQualifiedName),visible:h,isVisibilityDynamic:y,level:i,sideContent:undefined,objectPageLazyLoaderEnabled:a.getManifestWrapper().getEnableLazyLoading()};if(s){S.stashed=W(t,t,a);S.flexSettings={designtime:K(t,t,a)}}let A="";i++;switch(t.$Type){case"com.sap.vocabularies.UI.v1.CollectionFacet":const r=t.Facets;const l=r.map((e,t)=>({index:t,facet:e})).filter(e=>{var t,n;let{facet:a}=e;return ae.includes((t=a.Target)===null||t===void 0?void 0:(n=t.$target)===null||n===void 0?void 0:n.term)});const p=r.filter(e=>!l.find(t=>t.facet===e));if(l.length>0){const n=[];const r=[];const c=[];for(const{facet:e}of l){n.push(ue(e,[],a,i,true,s))}if(p.length>0){e.warning(`Warning: CollectionFacet '${t.ID}' includes a combination of either a chart or a table and other content. This can lead to rendering issues. Consider moving the chart or table into a separate CollectionFacet.`);const n={...t};n.Facets=p;r.push(ue(n,[],a,i,o,s))}if(l.find(e=>{let{index:t}=e;return t===0})){c.push(...n);c.push(...r)}else{c.push(...r);c.push(...n)}const d={...S,type:ne.Mixed,level:i,content:c};return d}else{const e=ce(t,a),n={...S,type:ne.Form,formDefinition:g(t,h,a,e.actions),level:i,actions:e.actions.filter(e=>e.facetName===undefined),commandActions:e.commandActions};return n}case"com.sap.vocabularies.UI.v1.ReferenceFacet":if(!t.Target.$target){A=`Unable to find annotationPath ${t.Target.value}`}else{switch(t.Target.$target.term){case"com.sap.vocabularies.UI.v1.LineItem":case"com.sap.vocabularies.UI.v1.Chart":case"com.sap.vocabularies.UI.v1.PresentationVariant":case"com.sap.vocabularies.UI.v1.SelectionPresentationVariant":const e=b(t.Target.value,be(t,n,a),a,undefined,s);const r=S.title?S.title:"";const l=((c=e.visualizations[0])===null||c===void 0?void 0:(d=c.annotation)===null||d===void 0?void 0:d.title)||((u=e.visualizations[0])===null||u===void 0?void 0:u.title);const p=((v=t.annotations)===null||v===void 0?void 0:(f=v.UI)===null||f===void 0?void 0:(m=f.PartOfPreview)===null||m===void 0?void 0:m.valueOf())!==false;const I=ve(l??"",r,o);const U=w(y,j(C,x(H(D,"undefined")),I),j(h!==undefined,D!=="undefined",D!==undefined,F,I));const T={...S,type:ne.DataVisualization,level:i,presentation:e,showTitle:z(I),isPartOfPreview:p,titleVisible:z(U)};return T;case"com.sap.vocabularies.UI.v1.FieldGroup":case"com.sap.vocabularies.UI.v1.Identification":case"com.sap.vocabularies.UI.v1.DataPoint":case"com.sap.vocabularies.UI.v1.StatusInfo":case"com.sap.vocabularies.Communication.v1.Contact":const L=ce(t,a),E={...S,type:ne.Form,level:i,formDefinition:g(t,h,a,L.actions),actions:L.actions.filter(e=>e.facetName===undefined),commandActions:L.commandActions};return E;default:A=`For ${t.Target.$target.term} Fragment`;break}}break;case"com.sap.vocabularies.UI.v1.ReferenceURLFacet":A="For Reference URL Facet";break;default:break}const T={...S,text:A};return T}m.createSubSection=ue;function ve(e,t,n){return N(x(n),$(M(e),M(t)))}m.getTitleVisibility=ve;function fe(e,t,n){const a=t.Target.$target;const i=t.Target.value;let o={};let s=[];let r;[r]=i.split("@");if(r.length>0){if(r.lastIndexOf("/")===r.length-1){r=r.substr(0,r.length-1)}}else{r=undefined}if(a){switch(a.term){case"com.sap.vocabularies.UI.v1.FieldGroup":s=a.Data;o=ee(n.getManifestControlConfiguration(a).actions,n,undefined,undefined,undefined,undefined,t.fullyQualifiedName).actions;break;case"com.sap.vocabularies.UI.v1.Identification":case"com.sap.vocabularies.UI.v1.StatusInfo":if(a.qualifier){s=a}break;default:break}}e=s.reduce((e,i)=>{var o,s,l,c,d,u,v,f,m,p,g,b,I,F,h,U;switch(i.$Type){case"com.sap.vocabularies.UI.v1.DataFieldForIntentBasedNavigation":if(((o=i.RequiresContext)===null||o===void 0?void 0:o.valueOf())===true){n.getDiagnostics().addIssue(q.Annotation,G.Low,_.MALFORMED_DATAFIELD_FOR_IBN.REQUIRESCONTEXT)}if(((s=i.Inline)===null||s===void 0?void 0:s.valueOf())===true){n.getDiagnostics().addIssue(q.Annotation,G.Low,_.MALFORMED_DATAFIELD_FOR_IBN.INLINE)}if(((l=i.Determining)===null||l===void 0?void 0:l.valueOf())===true){n.getDiagnostics().addIssue(q.Annotation,G.Low,_.MALFORMED_DATAFIELD_FOR_IBN.DETERMINING)}const C={};if(i.Mapping){C.semanticObjectMapping=Y(i.Mapping)}e.push({type:y.DataFieldForIntentBasedNavigation,id:D(t,i),key:B.generateKeyFromDataField(i),text:(c=i.Label)===null||c===void 0?void 0:c.toString(),annotationPath:"",enabled:i.NavigationAvailable!==undefined?z(H(R((d=i.NavigationAvailable)===null||d===void 0?void 0:d.valueOf()),true)):"true",visible:z(x(H(R((u=i.annotations)===null||u===void 0?void 0:(v=u.UI)===null||v===void 0?void 0:(f=v.Hidden)===null||f===void 0?void 0:f.valueOf()),true))),buttonType:de((m=i.annotations)===null||m===void 0?void 0:(p=m.UI)===null||p===void 0?void 0:p.Emphasized),press:z(V("._intentBasedNavigation.navigate",[R(i.SemanticObject),R(i.Action),C])),customData:z({semanticObject:R(i.SemanticObject),action:R(i.Action)})});break;case"com.sap.vocabularies.UI.v1.DataFieldForAction":const S=n.getManifestControlConfiguration(a).actions;const A=B.generateKeyFromDataField(i);e.push({type:y.DataFieldForAction,id:D(t,i),key:A,text:(g=i.Label)===null||g===void 0?void 0:g.toString(),annotationPath:"",enabled:Z(n,i.ActionTarget),binding:r?`{ 'path' : '${r}'}`:undefined,visible:z(x(H(R((b=i.annotations)===null||b===void 0?void 0:(I=b.UI)===null||I===void 0?void 0:(F=I.Hidden)===null||F===void 0?void 0:F.valueOf()),true))),requiresDialog:E(i),buttonType:de((h=i.annotations)===null||h===void 0?void 0:(U=h.UI)===null||U===void 0?void 0:U.Emphasized),press:z(V("invokeAction",[i.Action,{contexts:V("getBindingContext",[],P("","$source")),invocationGrouping:i.InvocationGrouping==="UI.OperationGroupingType/ChangeSet"?"ChangeSet":"Isolated",label:R(i.Label),model:V("getModel",[],P("/","$source")),isNavigable:J(S&&S[A])}],k(".editFlow"))),facetName:i.Inline?t.fullyQualifiedName:undefined});break;default:break}return e},e);return L(e,o)}function me(e){if(e){var t,n;const a=(t=e.annotations)===null||t===void 0?void 0:(n=t.Common)===null||n===void 0?void 0:n.IsActionCritical;if(e.parameters.length>1||a){return"Dialog"}else{return"None"}}else{return"None"}}m.isDialog=me;function pe(e,t){const n={};Object.keys(e).forEach(a=>n[a]=ge(e[a],a,t));return n}m.createCustomSubSections=pe;function ge(e,t,n){const a=e.sideContent?{template:e.sideContent.template,id:C(t),visible:false,equalSplit:e.sideContent.equalSplit}:undefined;let i=e.position;if(!i){i={placement:A.After}}const o=e.visible!==undefined?e.visible:true;const s=o&&typeof o==="string"&&o.indexOf("{=")===0;const r=ee(e.actions,n);const l={type:ne.Unknown,id:e.id||S(t),actions:r.actions,key:t,title:e.title,level:1,position:i,visible:e.visible!==undefined?e.visible:"true",sideContent:a,isVisibilityDynamic:s,objectPageLazyLoaderEnabled:e.enableLazyLoading??false,componentName:"",settings:""};if(e.template||e.name){l.type=ne.XMLFragment;l.template=e.template||e.name||""}else if(e.embeddedComponent!==undefined){l.type=ne.EmbeddedComponent;l.componentName=e.embeddedComponent.name;if(e.embeddedComponent.settings!==undefined){l.settings=JSON.stringify(e.embeddedComponent.settings)}}else{l.type=ne.Placeholder}return l}m.createCustomSubSection=ge;function be(e,t,n){const a=n.getManifestWrapper();if(a.useIconTabBar()){return Ie(e,t)}else{var i,o,s,r,l,c;const a=n.getEntityType();if((i=a.annotations)!==null&&i!==void 0&&(o=i.UI)!==null&&o!==void 0&&(s=o.Facets)!==null&&s!==void 0&&s.length&&((r=a.annotations)===null||r===void 0?void 0:(l=r.UI)===null||l===void 0?void 0:(c=l.Facets)===null||c===void 0?void 0:c.length)>1){return Ie(e,t)}else{return true}}}function Ie(e,t){return t.every(function(t){if(t!==e){if(t.$Type==="com.sap.vocabularies.UI.v1.ReferenceFacet"){var n,a,i,o,s;const e=t;if(((n=e.Target)===null||n===void 0?void 0:(a=n.$target)===null||a===void 0?void 0:a.term)==="com.sap.vocabularies.UI.v1.LineItem"||((i=e.Target)===null||i===void 0?void 0:(o=i.$target)===null||o===void 0?void 0:o.term)==="com.sap.vocabularies.UI.v1.PresentationVariant"||((s=e.Target.$target)===null||s===void 0?void 0:s.term)==="com.sap.vocabularies.UI.v1.SelectionPresentationVariant"){var r,l,c,d;return((r=e.annotations)===null||r===void 0?void 0:(l=r.UI)===null||l===void 0?void 0:l.Hidden)!==undefined?(c=e.annotations)===null||c===void 0?void 0:(d=c.UI)===null||d===void 0?void 0:d.Hidden:false}return true}else{const e=t;return e.Facets.every(function(e){var t,n,a,i,o,s;const r=e;if(((t=r.Target)===null||t===void 0?void 0:(n=t.$target)===null||n===void 0?void 0:n.term)==="com.sap.vocabularies.UI.v1.LineItem"||((a=r.Target)===null||a===void 0?void 0:(i=a.$target)===null||i===void 0?void 0:i.term)==="com.sap.vocabularies.UI.v1.PresentationVariant"||((o=r.Target)===null||o===void 0?void 0:(s=o.$target)===null||s===void 0?void 0:s.term)==="com.sap.vocabularies.UI.v1.SelectionPresentationVariant"){var l,c,d,u;return((l=r.annotations)===null||l===void 0?void 0:(c=l.UI)===null||c===void 0?void 0:c.Hidden)!==undefined?(d=r.annotations)===null||d===void 0?void 0:(u=d.UI)===null||u===void 0?void 0:u.Hidden:false}return true})}}return true})}return m},false);
6
6
  //# sourceMappingURL=SubSection.js.map