@sapui5/sap.fe.core 1.101.0 → 1.103.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 (339) hide show
  1. package/package.json +5 -5
  2. package/src/sap/fe/core/.library +1 -1
  3. package/src/sap/fe/core/AppComponent.js +66 -30
  4. package/src/sap/fe/core/AppComponent.ts +68 -51
  5. package/src/sap/fe/core/AppStateHandler.js +13 -13
  6. package/src/sap/fe/core/AppStateHandler.ts +18 -18
  7. package/src/sap/fe/core/BaseController.js +11 -9
  8. package/src/sap/fe/core/BaseController.ts +15 -13
  9. package/src/sap/fe/core/CommonUtils.js +279 -188
  10. package/src/sap/fe/core/CommonUtils.ts +306 -215
  11. package/src/sap/fe/core/ExtensionAPI.js +25 -30
  12. package/src/sap/fe/core/ExtensionAPI.ts +37 -41
  13. package/src/sap/fe/core/PageController.js +12 -7
  14. package/src/sap/fe/core/PageController.ts +10 -5
  15. package/src/sap/fe/core/TemplateComponent.js +6 -6
  16. package/src/sap/fe/core/TemplateComponent.ts +11 -11
  17. package/src/sap/fe/core/TemplateModel.js +2 -2
  18. package/src/sap/fe/core/TemplateModel.ts +3 -3
  19. package/src/sap/fe/core/buildingBlocks/AttributeModel.js +1 -1
  20. package/src/sap/fe/core/buildingBlocks/AttributeModel.ts +1 -1
  21. package/src/sap/fe/core/buildingBlocks/BuildingBlockRuntime.js +306 -78
  22. package/src/sap/fe/core/buildingBlocks/BuildingBlockRuntime.ts +280 -70
  23. package/src/sap/fe/core/buildingBlocks/TraceInfo.js +27 -27
  24. package/src/sap/fe/core/buildingBlocks/TraceInfo.ts +28 -26
  25. package/src/sap/fe/core/{BusyLocker.js → controllerextensions/BusyLocker.js} +1 -1
  26. package/src/sap/fe/core/{BusyLocker.ts → controllerextensions/BusyLocker.ts} +7 -7
  27. package/src/sap/fe/core/controllerextensions/EditFlow.js +351 -229
  28. package/src/sap/fe/core/controllerextensions/EditFlow.ts +321 -246
  29. package/src/sap/fe/core/controllerextensions/IntentBasedNavigation.js +9 -9
  30. package/src/sap/fe/core/controllerextensions/IntentBasedNavigation.ts +10 -10
  31. package/src/sap/fe/core/controllerextensions/InternalEditFlow.js +59 -34
  32. package/src/sap/fe/core/controllerextensions/InternalEditFlow.ts +71 -45
  33. package/src/sap/fe/core/controllerextensions/InternalIntentBasedNavigation.js +72 -72
  34. package/src/sap/fe/core/controllerextensions/InternalIntentBasedNavigation.ts +82 -80
  35. package/src/sap/fe/core/controllerextensions/InternalRouting.js +152 -131
  36. package/src/sap/fe/core/controllerextensions/InternalRouting.ts +171 -152
  37. package/src/sap/fe/core/controllerextensions/KPIManagement.js +66 -68
  38. package/src/sap/fe/core/controllerextensions/KPIManagement.ts +106 -123
  39. package/src/sap/fe/core/controllerextensions/MassEdit.js +11 -10
  40. package/src/sap/fe/core/controllerextensions/MassEdit.ts +31 -37
  41. package/src/sap/fe/core/controllerextensions/MessageHandler.js +21 -13
  42. package/src/sap/fe/core/controllerextensions/MessageHandler.ts +30 -15
  43. package/src/sap/fe/core/controllerextensions/PageReady.js +97 -25
  44. package/src/sap/fe/core/controllerextensions/PageReady.ts +94 -34
  45. package/src/sap/fe/core/controllerextensions/Paginator.js +19 -11
  46. package/src/sap/fe/core/controllerextensions/Paginator.ts +22 -14
  47. package/src/sap/fe/core/controllerextensions/Placeholder.js +4 -6
  48. package/src/sap/fe/core/controllerextensions/Placeholder.ts +12 -14
  49. package/src/sap/fe/core/controllerextensions/Routing.js +10 -11
  50. package/src/sap/fe/core/controllerextensions/Routing.ts +12 -13
  51. package/src/sap/fe/core/controllerextensions/Share.js +39 -21
  52. package/src/sap/fe/core/controllerextensions/Share.ts +45 -26
  53. package/src/sap/fe/core/controllerextensions/SideEffects.js +47 -51
  54. package/src/sap/fe/core/controllerextensions/SideEffects.ts +58 -62
  55. package/src/sap/fe/core/controllerextensions/ViewState.js +75 -62
  56. package/src/sap/fe/core/controllerextensions/ViewState.ts +78 -63
  57. package/src/sap/fe/core/controllerextensions/collaboration/ActivityBase.js +105 -0
  58. package/src/sap/fe/core/controllerextensions/collaboration/ActivityBase.ts +99 -0
  59. package/src/sap/fe/core/controllerextensions/collaboration/ActivitySync.js +360 -0
  60. package/src/sap/fe/core/{actions → controllerextensions}/collaboration/ActivitySync.ts +58 -112
  61. package/src/sap/fe/core/{actions → controllerextensions}/collaboration/CollaborationCommon.js +2 -2
  62. package/src/sap/fe/core/{actions → controllerextensions}/collaboration/CollaborationCommon.ts +7 -7
  63. package/src/sap/fe/core/controllerextensions/collaboration/Manage.js +262 -0
  64. package/src/sap/fe/core/{actions → controllerextensions}/collaboration/Manage.ts +20 -21
  65. package/src/sap/fe/core/{actions → controllerextensions}/collaboration/ManageDialog.fragment.xml +0 -0
  66. package/src/sap/fe/core/{actions → controllerextensions}/collaboration/UserDetails.fragment.xml +5 -7
  67. package/src/sap/fe/core/controllerextensions/editFlow/TransactionHelper.js +1631 -0
  68. package/src/sap/fe/core/{TransactionHelper.ts → controllerextensions/editFlow/TransactionHelper.ts} +270 -211
  69. package/src/sap/fe/core/controllerextensions/editFlow/draft.js +772 -0
  70. package/src/sap/fe/core/{actions → controllerextensions/editFlow}/draft.ts +240 -100
  71. package/src/sap/fe/core/controllerextensions/editFlow/operations.js +1199 -0
  72. package/src/sap/fe/core/{actions → controllerextensions/editFlow}/operations.ts +364 -229
  73. package/src/sap/fe/core/controllerextensions/editFlow/sticky.js +188 -0
  74. package/src/sap/fe/core/controllerextensions/editFlow/sticky.ts +185 -0
  75. package/src/sap/fe/core/controllerextensions/messageHandler/messageHandling.js +626 -0
  76. package/src/sap/fe/core/{actions → controllerextensions/messageHandler}/messageHandling.ts +112 -69
  77. package/src/sap/fe/core/controllerextensions/routing/RouterProxy.js +937 -0
  78. package/src/sap/fe/core/{RouterProxy.ts → controllerextensions/routing/RouterProxy.ts} +72 -73
  79. package/src/sap/fe/core/controls/ActionParameterDialog.fragment.xml +21 -18
  80. package/src/sap/fe/core/controls/Any.js +9 -5
  81. package/src/sap/fe/core/controls/Any.ts +10 -4
  82. package/src/sap/fe/core/controls/CommandExecution.js +21 -24
  83. package/src/sap/fe/core/controls/CommandExecution.ts +19 -24
  84. package/src/sap/fe/core/controls/ConditionalWrapper.js +2 -2
  85. package/src/sap/fe/core/controls/ConditionalWrapper.ts +3 -3
  86. package/src/sap/fe/core/controls/CustomFilterFieldContentWrapper.js +48 -43
  87. package/src/sap/fe/core/controls/CustomFilterFieldContentWrapper.ts +51 -46
  88. package/src/sap/fe/core/controls/CustomQuickViewPage.js +3 -2
  89. package/src/sap/fe/core/controls/CustomQuickViewPage.ts +3 -2
  90. package/src/sap/fe/core/controls/DataLossOrDraftDiscard/DataLossDraft.fragment.xml +11 -3
  91. package/src/sap/fe/core/controls/DataLossOrDraftDiscard/DataLossOrDraftDiscardHandler.js +19 -9
  92. package/src/sap/fe/core/controls/DataLossOrDraftDiscard/DataLossOrDraftDiscardHandler.ts +14 -8
  93. package/src/sap/fe/core/controls/FieldWrapper.js +2 -2
  94. package/src/sap/fe/core/controls/FieldWrapper.ts +3 -3
  95. package/src/sap/fe/core/controls/FileWrapper.js +50 -3
  96. package/src/sap/fe/core/controls/FileWrapper.ts +45 -12
  97. package/src/sap/fe/core/controls/FilterBar.js +6 -2
  98. package/src/sap/fe/core/controls/FilterBar.ts +13 -9
  99. package/src/sap/fe/core/controls/FormElementWrapper.js +12 -2
  100. package/src/sap/fe/core/controls/FormElementWrapper.ts +14 -3
  101. package/src/sap/fe/core/controls/MassEditSelect.js +33 -0
  102. package/src/sap/fe/core/controls/MassEditSelect.ts +41 -0
  103. package/src/sap/fe/core/controls/NonComputedVisibleKeyFieldsDialog.fragment.xml +3 -3
  104. package/src/sap/fe/core/controls/filterbar/VisualFilter.js +16 -12
  105. package/src/sap/fe/core/controls/filterbar/VisualFilter.ts +20 -22
  106. package/src/sap/fe/core/controls/filterbar/VisualFilterContainer.js +3 -3
  107. package/src/sap/fe/core/controls/filterbar/VisualFilterContainer.ts +8 -8
  108. package/src/sap/fe/core/controls/filterbar/utils/VisualFilterUtils.js +48 -48
  109. package/src/sap/fe/core/controls/filterbar/utils/VisualFilterUtils.ts +71 -76
  110. package/src/sap/fe/core/controls/massEdit/MassEditDialog.fragment.xml +36 -65
  111. package/src/sap/fe/core/controls/massEdit/MassEditField.fragment.xml +107 -0
  112. package/src/sap/fe/core/controls/massEdit/MassEditHandlers.js +551 -36
  113. package/src/sap/fe/core/controls/massEdit/MassEditHandlers.ts +605 -36
  114. package/src/sap/fe/core/converters/ConverterContext.js +26 -33
  115. package/src/sap/fe/core/converters/ConverterContext.ts +51 -60
  116. package/src/sap/fe/core/converters/ManifestSettings.js +2 -1
  117. package/src/sap/fe/core/converters/ManifestSettings.ts +17 -14
  118. package/src/sap/fe/core/converters/ManifestWrapper.js +59 -45
  119. package/src/sap/fe/core/converters/ManifestWrapper.ts +55 -45
  120. package/src/sap/fe/core/converters/MetaModelConverter.js +56 -67
  121. package/src/sap/fe/core/converters/MetaModelConverter.ts +183 -193
  122. package/src/sap/fe/core/converters/TemplateConverter.js +21 -20
  123. package/src/sap/fe/core/converters/TemplateConverter.ts +27 -24
  124. package/src/sap/fe/core/converters/annotations/DataField.js +73 -37
  125. package/src/sap/fe/core/converters/annotations/DataField.ts +121 -77
  126. package/src/sap/fe/core/converters/common/AnnotationConverter.js +1911 -1495
  127. package/src/sap/fe/core/converters/controls/Common/Action.js +51 -49
  128. package/src/sap/fe/core/converters/controls/Common/Action.ts +58 -54
  129. package/src/sap/fe/core/converters/controls/Common/Chart.js +22 -15
  130. package/src/sap/fe/core/converters/controls/Common/Chart.ts +29 -27
  131. package/src/sap/fe/core/converters/controls/Common/Criticality.js +3 -3
  132. package/src/sap/fe/core/converters/controls/Common/Criticality.ts +4 -4
  133. package/src/sap/fe/core/converters/controls/Common/DataVisualization.js +28 -28
  134. package/src/sap/fe/core/converters/controls/Common/DataVisualization.ts +40 -36
  135. package/src/sap/fe/core/converters/controls/Common/Form.js +30 -34
  136. package/src/sap/fe/core/converters/controls/Common/Form.ts +48 -58
  137. package/src/sap/fe/core/converters/controls/Common/KPI.js +11 -11
  138. package/src/sap/fe/core/converters/controls/Common/KPI.ts +35 -39
  139. package/src/sap/fe/core/converters/controls/Common/Table.js +318 -244
  140. package/src/sap/fe/core/converters/controls/Common/Table.ts +368 -297
  141. package/src/sap/fe/core/converters/controls/Common/table/StandardActions.js +135 -125
  142. package/src/sap/fe/core/converters/controls/Common/table/StandardActions.ts +162 -148
  143. package/src/sap/fe/core/converters/controls/ListReport/FilterBar.js +51 -45
  144. package/src/sap/fe/core/converters/controls/ListReport/FilterBar.ts +79 -67
  145. package/src/sap/fe/core/converters/controls/ListReport/VisualFilters.js +28 -26
  146. package/src/sap/fe/core/converters/controls/ListReport/VisualFilters.ts +46 -43
  147. package/src/sap/fe/core/converters/controls/ObjectPage/Avatar.js +9 -9
  148. package/src/sap/fe/core/converters/controls/ObjectPage/Avatar.ts +14 -13
  149. package/src/sap/fe/core/converters/controls/ObjectPage/HeaderFacet.js +67 -64
  150. package/src/sap/fe/core/converters/controls/ObjectPage/HeaderFacet.ts +69 -66
  151. package/src/sap/fe/core/converters/controls/ObjectPage/SubSection.js +92 -89
  152. package/src/sap/fe/core/converters/controls/ObjectPage/SubSection.ts +124 -120
  153. package/src/sap/fe/core/converters/helpers/Aggregation.js +11 -5
  154. package/src/sap/fe/core/converters/helpers/Aggregation.ts +25 -23
  155. package/src/sap/fe/core/converters/helpers/BindingHelper.js +31 -30
  156. package/src/sap/fe/core/converters/helpers/BindingHelper.ts +31 -29
  157. package/src/sap/fe/core/converters/helpers/ConfigurableObject.js +4 -4
  158. package/src/sap/fe/core/converters/helpers/ConfigurableObject.ts +9 -9
  159. package/src/sap/fe/core/converters/helpers/ID.js +46 -46
  160. package/src/sap/fe/core/converters/helpers/ID.ts +25 -25
  161. package/src/sap/fe/core/converters/helpers/Key.js +7 -7
  162. package/src/sap/fe/core/converters/helpers/Key.ts +7 -7
  163. package/src/sap/fe/core/converters/helpers/SelectionVariantHelper.js +1 -1
  164. package/src/sap/fe/core/converters/helpers/SelectionVariantHelper.ts +4 -4
  165. package/src/sap/fe/core/converters/objectPage/FormMenuActions.js +6 -6
  166. package/src/sap/fe/core/converters/objectPage/FormMenuActions.ts +10 -10
  167. package/src/sap/fe/core/converters/objectPage/HeaderAndFooterAction.js +46 -62
  168. package/src/sap/fe/core/converters/objectPage/HeaderAndFooterAction.ts +54 -82
  169. package/src/sap/fe/core/converters/templates/ListReportConverter.js +30 -29
  170. package/src/sap/fe/core/converters/templates/ListReportConverter.ts +40 -40
  171. package/src/sap/fe/core/converters/templates/ObjectPageConverter.js +56 -55
  172. package/src/sap/fe/core/converters/templates/ObjectPageConverter.ts +65 -77
  173. package/src/sap/fe/core/designtime/AppComponent.designtime.js +6 -6
  174. package/src/sap/fe/core/designtime/AppComponent.designtime.ts +10 -8
  175. package/src/sap/fe/core/formatters/CollaborationFormatter.js +2 -2
  176. package/src/sap/fe/core/formatters/CollaborationFormatter.ts +3 -3
  177. package/src/sap/fe/core/formatters/FPMFormatter.js +5 -5
  178. package/src/sap/fe/core/formatters/FPMFormatter.ts +10 -10
  179. package/src/sap/fe/core/formatters/KPIFormatter.js +7 -7
  180. package/src/sap/fe/core/formatters/KPIFormatter.ts +10 -10
  181. package/src/sap/fe/core/formatters/StandardFormatter.js +89 -0
  182. package/src/sap/fe/core/formatters/StandardFormatter.ts +64 -0
  183. package/src/sap/fe/core/formatters/TableFormatter.js +83 -22
  184. package/src/sap/fe/core/formatters/TableFormatter.ts +80 -25
  185. package/src/sap/fe/core/formatters/ValueFormatter.js +8 -8
  186. package/src/sap/fe/core/formatters/ValueFormatter.ts +9 -9
  187. package/src/sap/fe/core/fpm/Component.js +2 -2
  188. package/src/sap/fe/core/fpm/Component.ts +1 -1
  189. package/src/sap/fe/core/helpers/AppStartupHelper.js +15 -15
  190. package/src/sap/fe/core/helpers/AppStartupHelper.ts +37 -40
  191. package/src/sap/fe/core/helpers/BindingToolkit.js +1809 -0
  192. package/src/sap/fe/core/helpers/{BindingExpression.ts → BindingToolkit.ts} +388 -285
  193. package/src/sap/fe/core/helpers/ClassSupport.js +20 -11
  194. package/src/sap/fe/core/helpers/ClassSupport.ts +15 -10
  195. package/src/sap/fe/core/helpers/DynamicAnnotationPathHelper.js +2 -2
  196. package/src/sap/fe/core/helpers/DynamicAnnotationPathHelper.ts +1 -1
  197. package/src/sap/fe/core/helpers/EditState.js +1 -6
  198. package/src/sap/fe/core/helpers/EditState.ts +5 -10
  199. package/src/sap/fe/core/helpers/ExcelFormatHelper.js +2 -2
  200. package/src/sap/fe/core/helpers/ExcelFormatHelper.ts +4 -4
  201. package/src/sap/fe/core/helpers/FPMHelper.js +3 -2
  202. package/src/sap/fe/core/helpers/FPMHelper.ts +10 -9
  203. package/src/sap/fe/core/helpers/KeepAliveHelper.js +31 -31
  204. package/src/sap/fe/core/helpers/KeepAliveHelper.ts +52 -56
  205. package/src/sap/fe/core/helpers/MassEditHelper.js +532 -264
  206. package/src/sap/fe/core/helpers/MassEditHelper.ts +560 -289
  207. package/src/sap/fe/core/helpers/ModelHelper.js +25 -25
  208. package/src/sap/fe/core/helpers/ModelHelper.ts +50 -58
  209. package/src/sap/fe/core/helpers/PasteHelper.js +3 -10
  210. package/src/sap/fe/core/helpers/PasteHelper.ts +20 -25
  211. package/src/sap/fe/core/helpers/SemanticDateOperators.js +1 -1
  212. package/src/sap/fe/core/helpers/SemanticDateOperators.ts +11 -11
  213. package/src/sap/fe/core/helpers/SemanticKeyHelper.js +3 -3
  214. package/src/sap/fe/core/helpers/SemanticKeyHelper.ts +8 -8
  215. package/src/sap/fe/core/helpers/StableIdHelper.js +16 -12
  216. package/src/sap/fe/core/helpers/StableIdHelper.ts +20 -16
  217. package/src/sap/fe/core/{Synchronization.js → helpers/Synchronization.js} +1 -1
  218. package/src/sap/fe/core/{Synchronization.ts → helpers/Synchronization.ts} +1 -1
  219. package/src/sap/fe/core/jsx-runtime/jsx.js +1 -1
  220. package/src/sap/fe/core/jsx-runtime/jsx.ts +8 -8
  221. package/src/sap/fe/core/library.js +51 -3
  222. package/src/sap/fe/core/library.ts +47 -0
  223. package/src/sap/fe/core/manifestMerger/ChangePageConfiguration.js +3 -3
  224. package/src/sap/fe/core/manifestMerger/ChangePageConfiguration.ts +2 -2
  225. package/src/sap/fe/core/messagebundle.properties +151 -197
  226. package/src/sap/fe/core/messagebundle_ar.properties +36 -63
  227. package/src/sap/fe/core/messagebundle_bg.properties +36 -63
  228. package/src/sap/fe/core/messagebundle_ca.properties +36 -63
  229. package/src/sap/fe/core/messagebundle_cs.properties +36 -63
  230. package/src/sap/fe/core/messagebundle_cy.properties +36 -63
  231. package/src/sap/fe/core/messagebundle_da.properties +37 -64
  232. package/src/sap/fe/core/messagebundle_de.properties +36 -63
  233. package/src/sap/fe/core/messagebundle_el.properties +38 -65
  234. package/src/sap/fe/core/messagebundle_en.properties +37 -64
  235. package/src/sap/fe/core/messagebundle_en_GB.properties +37 -64
  236. package/src/sap/fe/core/messagebundle_en_US_sappsd.properties +44 -73
  237. package/src/sap/fe/core/messagebundle_en_US_saprigi.properties +37 -64
  238. package/src/sap/fe/core/messagebundle_en_US_saptrc.properties +52 -81
  239. package/src/sap/fe/core/messagebundle_es.properties +36 -63
  240. package/src/sap/fe/core/messagebundle_es_MX.properties +36 -63
  241. package/src/sap/fe/core/messagebundle_et.properties +36 -63
  242. package/src/sap/fe/core/messagebundle_fi.properties +36 -63
  243. package/src/sap/fe/core/messagebundle_fr.properties +39 -66
  244. package/src/sap/fe/core/messagebundle_fr_CA.properties +36 -63
  245. package/src/sap/fe/core/messagebundle_hi.properties +36 -63
  246. package/src/sap/fe/core/messagebundle_hr.properties +36 -63
  247. package/src/sap/fe/core/messagebundle_hu.properties +35 -62
  248. package/src/sap/fe/core/messagebundle_id.properties +37 -64
  249. package/src/sap/fe/core/messagebundle_it.properties +54 -81
  250. package/src/sap/fe/core/messagebundle_iw.properties +36 -63
  251. package/src/sap/fe/core/messagebundle_ja.properties +36 -63
  252. package/src/sap/fe/core/messagebundle_kk.properties +36 -63
  253. package/src/sap/fe/core/messagebundle_ko.properties +36 -63
  254. package/src/sap/fe/core/messagebundle_lt.properties +36 -63
  255. package/src/sap/fe/core/messagebundle_lv.properties +36 -63
  256. package/src/sap/fe/core/messagebundle_ms.properties +37 -64
  257. package/src/sap/fe/core/messagebundle_nl.properties +37 -64
  258. package/src/sap/fe/core/messagebundle_no.properties +36 -63
  259. package/src/sap/fe/core/messagebundle_pl.properties +37 -64
  260. package/src/sap/fe/core/messagebundle_pt.properties +37 -64
  261. package/src/sap/fe/core/messagebundle_pt_PT.properties +36 -63
  262. package/src/sap/fe/core/messagebundle_ro.properties +36 -63
  263. package/src/sap/fe/core/messagebundle_ru.properties +36 -63
  264. package/src/sap/fe/core/messagebundle_sh.properties +36 -63
  265. package/src/sap/fe/core/messagebundle_sk.properties +36 -63
  266. package/src/sap/fe/core/messagebundle_sl.properties +38 -65
  267. package/src/sap/fe/core/messagebundle_sv.properties +36 -63
  268. package/src/sap/fe/core/messagebundle_th.properties +36 -63
  269. package/src/sap/fe/core/messagebundle_tr.properties +36 -63
  270. package/src/sap/fe/core/messagebundle_uk.properties +37 -64
  271. package/src/sap/fe/core/messagebundle_vi.properties +37 -64
  272. package/src/sap/fe/core/messagebundle_zh_CN.properties +36 -63
  273. package/src/sap/fe/core/messagebundle_zh_TW.properties +37 -64
  274. package/src/sap/fe/core/services/AsyncComponentServiceFactory.js +2 -2
  275. package/src/sap/fe/core/services/AsyncComponentServiceFactory.ts +5 -5
  276. package/src/sap/fe/core/services/CacheHandlerServiceFactory.js +2 -2
  277. package/src/sap/fe/core/services/CacheHandlerServiceFactory.ts +14 -14
  278. package/src/sap/fe/core/services/EnvironmentServiceFactory.js +6 -3
  279. package/src/sap/fe/core/services/EnvironmentServiceFactory.ts +12 -10
  280. package/src/sap/fe/core/services/NavigationServiceFactory.js +54 -45
  281. package/src/sap/fe/core/services/NavigationServiceFactory.ts +61 -49
  282. package/src/sap/fe/core/services/ResourceModelServiceFactory.js +2 -2
  283. package/src/sap/fe/core/services/ResourceModelServiceFactory.ts +4 -4
  284. package/src/sap/fe/core/services/RoutingServiceFactory.js +63 -60
  285. package/src/sap/fe/core/services/RoutingServiceFactory.ts +76 -73
  286. package/src/sap/fe/core/services/ShellServicesFactory.js +102 -71
  287. package/src/sap/fe/core/services/ShellServicesFactory.ts +109 -78
  288. package/src/sap/fe/core/services/SideEffectsServiceFactory.js +61 -61
  289. package/src/sap/fe/core/services/SideEffectsServiceFactory.ts +102 -92
  290. package/src/sap/fe/core/services/TemplatedViewServiceFactory.js +24 -18
  291. package/src/sap/fe/core/services/TemplatedViewServiceFactory.ts +53 -50
  292. package/src/sap/fe/core/support/CommonHelper.js +3 -2
  293. package/src/sap/fe/core/support/CommonHelper.ts +9 -13
  294. package/src/sap/fe/core/support/Diagnostics.js +1 -1
  295. package/src/sap/fe/core/support/Diagnostics.ts +5 -5
  296. package/src/sap/fe/core/templating/CommonFormatters.js +84 -0
  297. package/src/sap/fe/core/templating/CommonFormatters.ts +86 -0
  298. package/src/sap/fe/core/templating/CriticalityFormatters.js +31 -31
  299. package/src/sap/fe/core/templating/CriticalityFormatters.ts +42 -40
  300. package/src/sap/fe/core/templating/DataFieldFormatters.js +8 -8
  301. package/src/sap/fe/core/templating/DataFieldFormatters.ts +13 -10
  302. package/src/sap/fe/core/templating/DataModelPathHelper.js +16 -15
  303. package/src/sap/fe/core/templating/DataModelPathHelper.ts +42 -32
  304. package/src/sap/fe/core/templating/DisplayModeFormatter.js +1 -1
  305. package/src/sap/fe/core/templating/DisplayModeFormatter.ts +3 -4
  306. package/src/sap/fe/core/templating/EntitySetHelper.js +7 -15
  307. package/src/sap/fe/core/templating/EntitySetHelper.ts +14 -18
  308. package/src/sap/fe/core/templating/FieldControlHelper.js +35 -34
  309. package/src/sap/fe/core/templating/FieldControlHelper.ts +29 -46
  310. package/src/sap/fe/core/templating/FilterHelper.js +12 -11
  311. package/src/sap/fe/core/templating/FilterHelper.ts +17 -16
  312. package/src/sap/fe/core/templating/FilterTemplating.js +1 -1
  313. package/src/sap/fe/core/templating/FilterTemplating.ts +3 -3
  314. package/src/sap/fe/core/templating/PropertyFormatters.js +7 -7
  315. package/src/sap/fe/core/templating/PropertyFormatters.ts +21 -19
  316. package/src/sap/fe/core/templating/PropertyHelper.js +79 -56
  317. package/src/sap/fe/core/templating/PropertyHelper.ts +41 -27
  318. package/src/sap/fe/core/templating/UIFormatters.js +163 -97
  319. package/src/sap/fe/core/templating/UIFormatters.ts +210 -129
  320. package/src/sap/fe/core/type/DateTimeWithTimezone.js +47 -0
  321. package/src/sap/fe/core/type/DateTimeWithTimezone.ts +23 -0
  322. package/src/sap/fe/core/type/Email.js +2 -2
  323. package/src/sap/fe/core/type/Email.ts +2 -2
  324. package/src/sap/fe/core/AnnotationHelper.js +0 -331
  325. package/src/sap/fe/core/AnnotationHelper.ts +0 -321
  326. package/src/sap/fe/core/RouterProxy.js +0 -938
  327. package/src/sap/fe/core/TransactionHelper.js +0 -1577
  328. package/src/sap/fe/core/actions/collaboration/ActivitySync.js +0 -406
  329. package/src/sap/fe/core/actions/collaboration/Manage.js +0 -264
  330. package/src/sap/fe/core/actions/draft.js +0 -665
  331. package/src/sap/fe/core/actions/messageHandling.js +0 -579
  332. package/src/sap/fe/core/actions/nonDraft.js +0 -20
  333. package/src/sap/fe/core/actions/nonDraft.ts +0 -12
  334. package/src/sap/fe/core/actions/operations.js +0 -1096
  335. package/src/sap/fe/core/actions/sticky.js +0 -130
  336. package/src/sap/fe/core/actions/sticky.ts +0 -119
  337. package/src/sap/fe/core/formatters/CriticalityFormatter.js +0 -77
  338. package/src/sap/fe/core/formatters/CriticalityFormatter.ts +0 -58
  339. package/src/sap/fe/core/helpers/BindingExpression.js +0 -1729
@@ -2,34 +2,34 @@
2
2
  * SAP UI development toolkit for HTML5 (SAPUI5)
3
3
  * (c) Copyright 2009-2021 SAP SE. All rights reserved
4
4
  */
5
- sap.ui.define(["../ManifestSettings", "../controls/ObjectPage/SubSection", "../controls/ObjectPage/HeaderFacet", "../helpers/ID", "../helpers/ConfigurableObject", "sap/fe/core/converters/controls/Common/Action", "sap/fe/core/converters/objectPage/HeaderAndFooterAction", "../controls/ObjectPage/Avatar", "sap/fe/core/helpers/BindingExpression", "../helpers/BindingHelper"], function (ManifestSettings, SubSection, HeaderFacet, ID, ConfigurableObject, Action, HeaderAndFooterAction, Avatar, BindingExpression, BindingHelper) {
5
+ sap.ui.define(["sap/fe/core/converters/controls/Common/Action", "sap/fe/core/converters/objectPage/HeaderAndFooterAction", "sap/fe/core/helpers/BindingToolkit", "../controls/ObjectPage/Avatar", "../controls/ObjectPage/HeaderFacet", "../controls/ObjectPage/SubSection", "../helpers/BindingHelper", "../helpers/ConfigurableObject", "../helpers/ID", "../ManifestSettings"], function (Action, HeaderAndFooterAction, BindingToolkit, Avatar, HeaderFacet, SubSection, BindingHelper, ConfigurableObject, ID, ManifestSettings) {
6
6
  "use strict";
7
7
 
8
8
  var _exports = {};
9
+ var TemplateType = ManifestSettings.TemplateType;
10
+ var getSectionID = ID.getSectionID;
11
+ var getEditableHeaderSectionID = ID.getEditableHeaderSectionID;
12
+ var getCustomSectionID = ID.getCustomSectionID;
13
+ var Placement = ConfigurableObject.Placement;
14
+ var insertCustomElements = ConfigurableObject.insertCustomElements;
9
15
  var UI = BindingHelper.UI;
10
- var constant = BindingExpression.constant;
11
- var ifElse = BindingExpression.ifElse;
12
- var not = BindingExpression.not;
13
- var equal = BindingExpression.equal;
14
- var compileBinding = BindingExpression.compileBinding;
15
- var annotationExpression = BindingExpression.annotationExpression;
16
+ var createSubSections = SubSection.createSubSections;
17
+ var createCustomSubSections = SubSection.createCustomSubSections;
18
+ var createCustomHeaderFacetSubSections = SubSection.createCustomHeaderFacetSubSections;
19
+ var getHeaderFacetsFromManifest = HeaderFacet.getHeaderFacetsFromManifest;
20
+ var getHeaderFacetsFromAnnotations = HeaderFacet.getHeaderFacetsFromAnnotations;
16
21
  var getAvatar = Avatar.getAvatar;
22
+ var not = BindingToolkit.not;
23
+ var ifElse = BindingToolkit.ifElse;
24
+ var getExpressionFromAnnotation = BindingToolkit.getExpressionFromAnnotation;
25
+ var equal = BindingToolkit.equal;
26
+ var constant = BindingToolkit.constant;
27
+ var compileExpression = BindingToolkit.compileExpression;
17
28
  var getHiddenHeaderActions = HeaderAndFooterAction.getHiddenHeaderActions;
18
- var getFooterDefaultActions = HeaderAndFooterAction.getFooterDefaultActions;
19
29
  var getHeaderDefaultActions = HeaderAndFooterAction.getHeaderDefaultActions;
30
+ var getFooterDefaultActions = HeaderAndFooterAction.getFooterDefaultActions;
20
31
  var removeDuplicateActions = Action.removeDuplicateActions;
21
32
  var getActionsFromManifest = Action.getActionsFromManifest;
22
- var Placement = ConfigurableObject.Placement;
23
- var insertCustomElements = ConfigurableObject.insertCustomElements;
24
- var SectionID = ID.SectionID;
25
- var EditableHeaderSectionID = ID.EditableHeaderSectionID;
26
- var CustomSectionID = ID.CustomSectionID;
27
- var getHeaderFacetsFromManifest = HeaderFacet.getHeaderFacetsFromManifest;
28
- var getHeaderFacetsFromAnnotations = HeaderFacet.getHeaderFacetsFromAnnotations;
29
- var createCustomHeaderFacetSubSections = SubSection.createCustomHeaderFacetSubSections;
30
- var createSubSections = SubSection.createSubSections;
31
- var createCustomSubSections = SubSection.createCustomSubSections;
32
- var TemplateType = ManifestSettings.TemplateType;
33
33
 
34
34
  function ownKeys(object, enumerableOnly) { var keys = Object.keys(object); if (Object.getOwnPropertySymbols) { var symbols = Object.getOwnPropertySymbols(object); if (enumerableOnly) { symbols = symbols.filter(function (sym) { return Object.getOwnPropertyDescriptor(object, sym).enumerable; }); } keys.push.apply(keys, symbols); } return keys; }
35
35
 
@@ -47,14 +47,14 @@ sap.ui.define(["../ManifestSettings", "../controls/ObjectPage/SubSection", "../c
47
47
  *
48
48
  * @param converterContext The converter context
49
49
  * @param allHeaderFacets The converter context
50
- * @returns {ObjectPageSection} The section representing the editable header parts
50
+ * @returns The section representing the editable header parts
51
51
  */
52
52
 
53
53
 
54
54
  function createEditableHeaderSection(converterContext, allHeaderFacets) {
55
55
  var _converterContext$get, _converterContext$get2;
56
56
 
57
- var editableHeaderSectionID = EditableHeaderSectionID();
57
+ var editableHeaderSectionID = getEditableHeaderSectionID();
58
58
  var headerFacets = (_converterContext$get = converterContext.getEntityType().annotations) === null || _converterContext$get === void 0 ? void 0 : (_converterContext$get2 = _converterContext$get.UI) === null || _converterContext$get2 === void 0 ? void 0 : _converterContext$get2.HeaderFacets;
59
59
  var headerfacetSubSections = headerFacets ? createSubSections(headerFacets, converterContext, true) : [];
60
60
  var customHeaderFacetSubSections = createCustomHeaderFacetSubSections(converterContext);
@@ -90,7 +90,7 @@ sap.ui.define(["../ManifestSettings", "../controls/ObjectPage/SubSection", "../c
90
90
  id: editableHeaderSectionID,
91
91
  key: "EditableHeaderContent",
92
92
  title: "{sap.fe.i18n>T_COMMON_OBJECT_PAGE_HEADER_SECTION}",
93
- visible: compileBinding(UI.IsEditable),
93
+ visible: compileExpression(UI.IsEditable),
94
94
  subSections: allHeaderFacetsSubSections
95
95
  };
96
96
  return headerSection;
@@ -99,7 +99,7 @@ sap.ui.define(["../ManifestSettings", "../controls/ObjectPage/SubSection", "../c
99
99
  * Creates a definition for a section based on the Facet annotation.
100
100
  *
101
101
  * @param converterContext The converter context
102
- * @returns {ObjectPageSection[]} All sections
102
+ * @returns All sections
103
103
  */
104
104
 
105
105
 
@@ -119,31 +119,32 @@ sap.ui.define(["../ManifestSettings", "../controls/ObjectPage/SubSection", "../c
119
119
  *
120
120
  * @param facet
121
121
  * @param converterContext
122
- * @returns {ObjectPageSection} The current section
122
+ * @returns The current section
123
123
  */
124
124
 
125
125
 
126
126
  function getSectionFromAnnotation(facet, converterContext) {
127
127
  var _facet$annotations, _facet$annotations$UI, _facet$annotations$UI2;
128
128
 
129
- var sectionID = SectionID({
129
+ var sectionID = getSectionID({
130
130
  Facet: facet
131
131
  });
132
132
  var section = {
133
133
  id: sectionID,
134
134
  key: getSectionKey(facet, sectionID),
135
- title: compileBinding(annotationExpression(facet.Label)),
135
+ title: compileExpression(getExpressionFromAnnotation(facet.Label)),
136
136
  showTitle: !!facet.Label,
137
- visible: compileBinding(not(equal(annotationExpression((_facet$annotations = facet.annotations) === null || _facet$annotations === void 0 ? void 0 : (_facet$annotations$UI = _facet$annotations.UI) === null || _facet$annotations$UI === void 0 ? void 0 : (_facet$annotations$UI2 = _facet$annotations$UI.Hidden) === null || _facet$annotations$UI2 === void 0 ? void 0 : _facet$annotations$UI2.valueOf()), true))),
137
+ visible: compileExpression(not(equal(getExpressionFromAnnotation((_facet$annotations = facet.annotations) === null || _facet$annotations === void 0 ? void 0 : (_facet$annotations$UI = _facet$annotations.UI) === null || _facet$annotations$UI === void 0 ? void 0 : (_facet$annotations$UI2 = _facet$annotations$UI.Hidden) === null || _facet$annotations$UI2 === void 0 ? void 0 : _facet$annotations$UI2.valueOf()), true))),
138
138
  subSections: createSubSections([facet], converterContext)
139
139
  };
140
140
  return section;
141
141
  }
142
142
  /**
143
- * Creates section definition based on manifest definition.
144
- * @param manifestSections The manifest defined sections
143
+ * Creates section definitions based on the manifest definitions.
144
+ *
145
+ * @param manifestSections The sections defined in the manifest
145
146
  * @param converterContext
146
- * @returns {Record<string, CustomObjectPageSection>} The manifest defined sections
147
+ * @returns The sections defined in the manifest
147
148
  */
148
149
 
149
150
 
@@ -155,16 +156,17 @@ sap.ui.define(["../ManifestSettings", "../controls/ObjectPage/SubSection", "../c
155
156
  return sections;
156
157
  }
157
158
  /**
158
- * Create a manifest based custom section.
159
+ * Create a manifest-based custom section.
160
+ *
159
161
  * @param customSectionDefinition
160
162
  * @param sectionKey
161
163
  * @param converterContext
162
- * @returns {CustomObjectPageSection} The current custom section
164
+ * @returns The current custom section
163
165
  */
164
166
 
165
167
 
166
168
  function getSectionFromManifest(customSectionDefinition, sectionKey, converterContext) {
167
- var customSectionID = customSectionDefinition.id || CustomSectionID(sectionKey);
169
+ var customSectionID = customSectionDefinition.id || getCustomSectionID(sectionKey);
168
170
  var position = customSectionDefinition.position;
169
171
 
170
172
  if (!position) {
@@ -180,7 +182,7 @@ sap.ui.define(["../ManifestSettings", "../controls/ObjectPage/SubSection", "../c
180
182
  // and make sure to set the visibility to 'true', as the actual visibility is handled by the section itself
181
183
  manifestSubSections = _defineProperty({}, sectionKey, _objectSpread(_objectSpread({}, customSectionDefinition), {}, {
182
184
  position: undefined,
183
- visible: true
185
+ visible: "true"
184
186
  }));
185
187
  } else {
186
188
  manifestSubSections = customSectionDefinition.subSections;
@@ -192,7 +194,7 @@ sap.ui.define(["../ManifestSettings", "../controls/ObjectPage/SubSection", "../c
192
194
  key: sectionKey,
193
195
  title: customSectionDefinition.title,
194
196
  showTitle: !!customSectionDefinition.title,
195
- visible: customSectionDefinition.visible !== undefined ? customSectionDefinition.visible : true,
197
+ visible: customSectionDefinition.visible !== undefined ? customSectionDefinition.visible : "true",
196
198
  position: position,
197
199
  subSections: subSections
198
200
  };
@@ -201,7 +203,7 @@ sap.ui.define(["../ManifestSettings", "../controls/ObjectPage/SubSection", "../c
201
203
  /**
202
204
  * Retrieves the ObjectPage header actions (both the default ones and the custom ones defined in the manifest).
203
205
  *
204
- * @param {ConverterContext} converterContext The converter context
206
+ * @param converterContext The converter context
205
207
  * @returns An array containing all the actions for this ObjectPage header
206
208
  */
207
209
 
@@ -212,14 +214,15 @@ sap.ui.define(["../ManifestSettings", "../controls/ObjectPage/SubSection", "../c
212
214
  var headerActions = insertCustomElements(aAnnotationHeaderActions, getActionsFromManifest(manifestWrapper.getHeaderActions(), converterContext, aAnnotationHeaderActions, undefined, undefined, getHiddenHeaderActions(converterContext)), {
213
215
  isNavigable: "overwrite",
214
216
  enabled: "overwrite",
215
- defaultValuesExtensionFunction: "overwrite"
217
+ defaultValuesExtensionFunction: "overwrite",
218
+ command: "overwrite"
216
219
  });
217
220
  return removeDuplicateActions(headerActions);
218
221
  };
219
222
  /**
220
223
  * Retrieves the ObjectPage footer actions (both the default ones and the custom ones defined in the manifest).
221
224
  *
222
- * @param {ConverterContext} converterContext The converter context
225
+ * @param converterContext The converter context
223
226
  * @returns An array containing all the actions for this ObjectPage footer
224
227
  */
225
228
 
@@ -229,17 +232,17 @@ sap.ui.define(["../ManifestSettings", "../controls/ObjectPage/SubSection", "../c
229
232
  var getFooterActions = function (converterContext) {
230
233
  var manifestWrapper = converterContext.getManifestWrapper();
231
234
  var aAnnotationFooterActions = getFooterDefaultActions(manifestWrapper.getViewLevel(), converterContext);
232
- var footerActions = insertCustomElements(aAnnotationFooterActions, getActionsFromManifest(manifestWrapper.getFooterActions(), converterContext, aAnnotationFooterActions), {
235
+ return insertCustomElements(aAnnotationFooterActions, getActionsFromManifest(manifestWrapper.getFooterActions(), converterContext, aAnnotationFooterActions), {
233
236
  isNavigable: "overwrite",
234
237
  enabled: "overwrite",
235
- defaultValuesExtensionFunction: "overwrite"
238
+ defaultValuesExtensionFunction: "overwrite",
239
+ command: "overwrite"
236
240
  });
237
- return footerActions;
238
241
  };
239
242
  /**
240
243
  * Retrieves and merges the ObjectPage sections defined in the annotation and in the manifest.
241
244
  *
242
- * @param {ConverterContext} converterContext The converter context
245
+ * @param converterContext The converter context
243
246
  * @returns An array of sections.
244
247
  */
245
248
 
@@ -290,7 +293,7 @@ sap.ui.define(["../ManifestSettings", "../controls/ObjectPage/SubSection", "../c
290
293
  * Determines if the ObjectPage has header content.
291
294
  *
292
295
  * @param converterContext The instance of the converter context
293
- * @returns {boolean} `true` if there is at least on header facet
296
+ * @returns `true` if there is at least on header facet
294
297
  */
295
298
 
296
299
 
@@ -306,7 +309,7 @@ sap.ui.define(["../ManifestSettings", "../controls/ObjectPage/SubSection", "../c
306
309
  * Gets the expression to evaluate the visibility of the header content.
307
310
  *
308
311
  * @param converterContext The instance of the converter context
309
- * @returns {BindingExpression<boolean>} The binding expression for the Delete button
312
+ * @returns The binding expression for the Delete button
310
313
  */
311
314
 
312
315
 
@@ -318,36 +321,35 @@ sap.ui.define(["../ManifestSettings", "../controls/ObjectPage/SubSection", "../c
318
321
  * Gets the binding expression to evaluate the visibility of the header content.
319
322
  *
320
323
  * @param converterContext The instance of the converter context
321
- * @returns {BindingExpression<boolean>} The binding expression for the Delete button
324
+ * @returns The binding expression for the Delete button
322
325
  */
323
326
 
324
327
 
325
328
  var getShowHeaderContent = function (converterContext) {
326
- return compileBinding(getShowHeaderContentExpression(converterContext));
329
+ return compileExpression(getShowHeaderContentExpression(converterContext));
327
330
  };
328
331
  /**
329
332
  * Gets the binding expression to evaluate the visibility of the avatar when the header is in expanded state.
330
333
  *
331
334
  * @param converterContext The instance of the converter context
332
- * @returns {BindingExpression<string>} The binding expression for the Delete button
335
+ * @returns The binding expression for the Delete button
333
336
  */
334
337
 
335
338
 
336
339
  _exports.getShowHeaderContent = getShowHeaderContent;
337
340
 
338
341
  var getExpandedImageVisible = function (converterContext) {
339
- return compileBinding(not(getShowHeaderContentExpression(converterContext)));
342
+ return compileExpression(not(getShowHeaderContentExpression(converterContext)));
340
343
  };
341
344
 
342
345
  _exports.getExpandedImageVisible = getExpandedImageVisible;
343
346
 
344
347
  var convertPage = function (converterContext) {
345
- var _entityType$annotatio4, _entityType$annotatio5, _entityType$annotatio6, _entityType$annotatio7;
348
+ var _entityType$annotatio4, _entityType$annotatio5;
346
349
 
347
350
  var manifestWrapper = converterContext.getManifestWrapper();
348
351
  var headerSection;
349
- var entityType = converterContext.getEntityType();
350
- var situationAnnotations = (_entityType$annotatio4 = entityType.annotations) === null || _entityType$annotatio4 === void 0 ? void 0 : (_entityType$annotatio5 = _entityType$annotatio4.FE) === null || _entityType$annotatio5 === void 0 ? void 0 : _entityType$annotatio5.Situations; // Retrieve all header facets (from annotations & custom)
352
+ var entityType = converterContext.getEntityType(); // Retrieve all header facets (from annotations & custom)
351
353
 
352
354
  var headerFacets = insertCustomElements(getHeaderFacetsFromAnnotations(converterContext), getHeaderFacetsFromManifest(manifestWrapper.getHeaderFacets())); // Retrieve the page header actions
353
355
 
@@ -355,7 +357,7 @@ sap.ui.define(["../ManifestSettings", "../controls/ObjectPage/SubSection", "../c
355
357
 
356
358
  var footerActions = getFooterActions(converterContext);
357
359
 
358
- if (manifestWrapper.isHeaderEditable() && ((_entityType$annotatio6 = entityType.annotations.UI) !== null && _entityType$annotatio6 !== void 0 && _entityType$annotatio6.HeaderFacets || (_entityType$annotatio7 = entityType.annotations.UI) !== null && _entityType$annotatio7 !== void 0 && _entityType$annotatio7.HeaderInfo)) {
360
+ if (manifestWrapper.isHeaderEditable() && ((_entityType$annotatio4 = entityType.annotations.UI) !== null && _entityType$annotatio4 !== void 0 && _entityType$annotatio4.HeaderFacets || (_entityType$annotatio5 = entityType.annotations.UI) !== null && _entityType$annotatio5 !== void 0 && _entityType$annotatio5.HeaderInfo)) {
359
361
  headerSection = createEditableHeaderSection(converterContext, headerFacets);
360
362
  }
361
363
 
@@ -372,8 +374,7 @@ sap.ui.define(["../ManifestSettings", "../controls/ObjectPage/SubSection", "../c
372
374
  avatar: getAvatar(converterContext),
373
375
  title: {
374
376
  expandedImageVisible: getExpandedImageVisible(converterContext)
375
- },
376
- situations: situationAnnotations
377
+ }
377
378
  },
378
379
  sections: sections,
379
380
  footerActions: footerActions,
@@ -385,4 +386,4 @@ sap.ui.define(["../ManifestSettings", "../controls/ObjectPage/SubSection", "../c
385
386
  _exports.convertPage = convertPage;
386
387
  return _exports;
387
388
  }, false);
388
- //# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIk9iamVjdFBhZ2VDb252ZXJ0ZXIudHMiXSwibmFtZXMiOlsiZ2V0U2VjdGlvbktleSIsImZhY2V0RGVmaW5pdGlvbiIsImZhbGxiYWNrIiwiSUQiLCJ0b1N0cmluZyIsIkxhYmVsIiwiY3JlYXRlRWRpdGFibGVIZWFkZXJTZWN0aW9uIiwiY29udmVydGVyQ29udGV4dCIsImFsbEhlYWRlckZhY2V0cyIsImVkaXRhYmxlSGVhZGVyU2VjdGlvbklEIiwiRWRpdGFibGVIZWFkZXJTZWN0aW9uSUQiLCJoZWFkZXJGYWNldHMiLCJnZXRFbnRpdHlUeXBlIiwiYW5ub3RhdGlvbnMiLCJVSSIsIkhlYWRlckZhY2V0cyIsImhlYWRlcmZhY2V0U3ViU2VjdGlvbnMiLCJjcmVhdGVTdWJTZWN0aW9ucyIsImN1c3RvbUhlYWRlckZhY2V0U3ViU2VjdGlvbnMiLCJjcmVhdGVDdXN0b21IZWFkZXJGYWNldFN1YlNlY3Rpb25zIiwiYWxsSGVhZGVyRmFjZXRzU3ViU2VjdGlvbnMiLCJsZW5ndGgiLCJpIiwiZm9yRWFjaCIsIml0ZW0iLCJ2aXNpYmxlIiwicHVzaCIsImtleSIsInNsaWNlIiwibGFzdEluZGV4T2YiLCJjdXN0b21JdGVtIiwiaGVhZGVyU2VjdGlvbiIsImlkIiwidGl0bGUiLCJjb21waWxlQmluZGluZyIsIklzRWRpdGFibGUiLCJzdWJTZWN0aW9ucyIsImdldFNlY3Rpb25zRnJvbUFubm90YXRpb24iLCJlbnRpdHlUeXBlIiwib2JqZWN0UGFnZVNlY3Rpb25zIiwiRmFjZXRzIiwibWFwIiwiZ2V0U2VjdGlvbkZyb21Bbm5vdGF0aW9uIiwiZmFjZXQiLCJzZWN0aW9uSUQiLCJTZWN0aW9uSUQiLCJGYWNldCIsInNlY3Rpb24iLCJhbm5vdGF0aW9uRXhwcmVzc2lvbiIsInNob3dUaXRsZSIsIm5vdCIsImVxdWFsIiwiSGlkZGVuIiwidmFsdWVPZiIsImdldFNlY3Rpb25zRnJvbU1hbmlmZXN0IiwibWFuaWZlc3RTZWN0aW9ucyIsInNlY3Rpb25zIiwiT2JqZWN0Iiwia2V5cyIsIm1hbmlmZXN0U2VjdGlvbktleSIsImdldFNlY3Rpb25Gcm9tTWFuaWZlc3QiLCJjdXN0b21TZWN0aW9uRGVmaW5pdGlvbiIsInNlY3Rpb25LZXkiLCJjdXN0b21TZWN0aW9uSUQiLCJDdXN0b21TZWN0aW9uSUQiLCJwb3NpdGlvbiIsInBsYWNlbWVudCIsIlBsYWNlbWVudCIsIkFmdGVyIiwibWFuaWZlc3RTdWJTZWN0aW9ucyIsInVuZGVmaW5lZCIsImNyZWF0ZUN1c3RvbVN1YlNlY3Rpb25zIiwiY3VzdG9tU2VjdGlvbiIsImdldEhlYWRlckFjdGlvbnMiLCJhQW5ub3RhdGlvbkhlYWRlckFjdGlvbnMiLCJnZXRIZWFkZXJEZWZhdWx0QWN0aW9ucyIsIm1hbmlmZXN0V3JhcHBlciIsImdldE1hbmlmZXN0V3JhcHBlciIsImhlYWRlckFjdGlvbnMiLCJpbnNlcnRDdXN0b21FbGVtZW50cyIsImdldEFjdGlvbnNGcm9tTWFuaWZlc3QiLCJnZXRIaWRkZW5IZWFkZXJBY3Rpb25zIiwiaXNOYXZpZ2FibGUiLCJlbmFibGVkIiwiZGVmYXVsdFZhbHVlc0V4dGVuc2lvbkZ1bmN0aW9uIiwicmVtb3ZlRHVwbGljYXRlQWN0aW9ucyIsImdldEZvb3RlckFjdGlvbnMiLCJhQW5ub3RhdGlvbkZvb3RlckFjdGlvbnMiLCJnZXRGb290ZXJEZWZhdWx0QWN0aW9ucyIsImdldFZpZXdMZXZlbCIsImZvb3RlckFjdGlvbnMiLCJnZXRTZWN0aW9ucyIsInN1YlNlY3Rpb24iLCJ0eXBlIiwic2lkZUNvbnRlbnQiLCJjb250ZW50IiwiYWN0aW9ucyIsImhhc0hlYWRlckNvbnRlbnQiLCJnZXRIZWFkZXJGYWNldHMiLCJnZXRTaG93SGVhZGVyQ29udGVudEV4cHJlc3Npb24iLCJpZkVsc2UiLCJjb25zdGFudCIsImlzSGVhZGVyRWRpdGFibGUiLCJnZXRTaG93SGVhZGVyQ29udGVudCIsImdldEV4cGFuZGVkSW1hZ2VWaXNpYmxlIiwiY29udmVydFBhZ2UiLCJzaXR1YXRpb25Bbm5vdGF0aW9ucyIsIkZFIiwiU2l0dWF0aW9ucyIsImdldEhlYWRlckZhY2V0c0Zyb21Bbm5vdGF0aW9ucyIsImdldEhlYWRlckZhY2V0c0Zyb21NYW5pZmVzdCIsIkhlYWRlckluZm8iLCJ0ZW1wbGF0ZSIsIlRlbXBsYXRlVHlwZSIsIk9iamVjdFBhZ2UiLCJoZWFkZXIiLCJnZXRTaG93T2JqZWN0UGFnZUhlYWRlciIsImZhY2V0cyIsInNob3dDb250ZW50IiwiaGFzQ29udGVudCIsImF2YXRhciIsImdldEF2YXRhciIsImV4cGFuZGVkSW1hZ2VWaXNpYmxlIiwic2l0dWF0aW9ucyIsInNob3dBbmNob3JCYXIiLCJnZXRTaG93QW5jaG9yQmFyIiwidXNlSWNvblRhYkJhciJdLCJtYXBwaW5ncyI6IjtBQUFBO0FBQ0E7QUFDQTs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7O0FBc0RBLE1BQU1BLGFBQWEsR0FBRyxVQUFDQyxlQUFELEVBQThCQyxRQUE5QixFQUEyRDtBQUFBOztBQUNoRixXQUFPLHdCQUFBRCxlQUFlLENBQUNFLEVBQWhCLDRFQUFvQkMsUUFBcEIsaUNBQWtDSCxlQUFlLENBQUNJLEtBQWxELDBEQUFrQyxzQkFBdUJELFFBQXZCLEVBQWxDLEtBQXVFRixRQUE5RTtBQUNBLEdBRkQ7QUFJQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7O0FBQ08sV0FBU0ksMkJBQVQsQ0FDTkMsZ0JBRE0sRUFFTkMsZUFGTSxFQUdjO0FBQUE7O0FBQ3BCLFFBQU1DLHVCQUF1QixHQUFHQyx1QkFBdUIsRUFBdkQ7QUFDQSxRQUFNQyxZQUFZLDRCQUFHSixnQkFBZ0IsQ0FBQ0ssYUFBakIsR0FBaUNDLFdBQXBDLG9GQUFHLHNCQUE4Q0MsRUFBakQsMkRBQUcsdUJBQWtEQyxZQUF2RTtBQUNBLFFBQU1DLHNCQUFzQixHQUFHTCxZQUFZLEdBQUdNLGlCQUFpQixDQUFDTixZQUFELEVBQWVKLGdCQUFmLEVBQWlDLElBQWpDLENBQXBCLEdBQTZELEVBQXhHO0FBQ0EsUUFBTVcsNEJBQTRCLEdBQUdDLGtDQUFr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TUFBQUEsYUFBYSxFQUFFaEQsZUFBZSxDQUFDaUQsZ0JBQWhCLEVBakJUO0FBa0JOQyxNQUFBQSxhQUFhLEVBQUVsRCxlQUFlLENBQUNrRCxhQUFoQjtBQWxCVCxLQUFQO0FBb0JBLEdBNUNNIiwic291cmNlUm9vdCI6Ii4iLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBGYWNldFR5cGVzIH0gZnJvbSBcIkBzYXAtdXgvdm9jYWJ1bGFyaWVzLXR5cGVzXCI7XG5pbXBvcnQgeyBNYW5pZmVzdFNlY3Rpb24sIE1hbmlmZXN0U3ViU2VjdGlvbiwgVGVtcGxhdGVUeXBlIH0gZnJvbSBcIi4uL01hbmlmZXN0U2V0dGluZ3NcIjtcbmltcG9ydCB7IFBhZ2VEZWZpbml0aW9uIH0gZnJvbSBcIi4uL1RlbXBsYXRlQ29udmVydGVyXCI7XG5pbXBvcnQgeyBFbnRpdHlUeXBlIH0gZnJvbSBcIkBzYXAtdXgvYW5ub3RhdGlvbi1jb252ZXJ0ZXJcIjtcbmltcG9ydCB7XG5cdGNyZWF0ZUN1c3RvbVN1YlNlY3Rpb25zLFxuXHRjcmVhdGVTdWJTZWN0aW9ucyxcblx0Y3JlYXRlQ3VzdG9tSGVhZGVyRmFjZXRTdWJTZWN0aW9ucyxcblx0Q3VzdG9tT2JqZWN0UGFnZVNlY3Rpb24sXG5cdE9iamVjdFBhZ2VTZWN0aW9uLFxuXHRPYmplY3RQYWdlU3ViU2VjdGlvbixcblx0Rm9ybVN1YlNlY3Rpb25cbn0gZnJvbSBcIi4uL2NvbnRyb2xzL09iamVjdFBhZ2UvU3ViU2VjdGlvblwiO1xuaW1wb3J0IHsgZ2V0SGVhZGVyRmFjZXRzRnJvbUFubm90YXRpb25zLCBnZXRIZWFkZXJGYWNldHNGcm9tTWFuaWZlc3QsIE9iamVjdFBhZ2VIZWFkZXJGYWNldCB9IGZyb20gXCIuLi9jb250cm9scy9PYmplY3RQYWdlL0hlYWRlckZhY2V0XCI7XG5pbXBvcnQgeyBDdXN0b21TZWN0aW9uSUQsIEVkaXRhYmxlSGVhZGVyU2VjdGlvbklELCBTZWN0aW9uSUQgfSBmcm9tIFwiLi4vaGVscGVycy9JRFwiO1xuaW1wb3J0IHsgQ29uZmlndXJhYmxlUmVjb3JkLCBpbnNlcnRDdXN0b21FbGVtZW50cywgUGxhY2VtZW50LCBQb3NpdGlvbiB9IGZyb20gXCIuLi9oZWxwZXJzL0NvbmZpZ3VyYWJsZU9iamVjdFwiO1xuaW1wb3J0IHsgQmFzZUFjdGlvbiwgZ2V0QWN0aW9uc0Zyb21NYW5pZmVzdCwgcmVtb3ZlRHVwbGljYXRlQWN0aW9ucyB9IGZyb20gXCJzYXAvZmUvY29yZS9jb252ZXJ0ZXJzL2NvbnRyb2xzL0NvbW1vbi9BY3Rpb25cIjtcbmltcG9ydCB7XG5cdGdldEhlYWRlckRlZmF1bHRBY3Rpb25zLFxuXHRnZXRGb290ZXJEZWZhdWx0QWN0aW9ucyxcblx0Z2V0SGlkZGVuSGVhZGVyQWN0aW9uc1xufSBmcm9tIFwic2FwL2ZlL2NvcmUvY29udmVydGVycy9vYmplY3RQYWdlL0hlYWRlckFuZEZvb3RlckFjdGlvblwiO1xuaW1wb3J0IHsgQXZhdGFyLCBnZXRBdmF0YXIgfSBmcm9tIFwiLi4vY29udHJvbHMvT2JqZWN0UGFnZS9BdmF0YXJcIjtcbmltcG9ydCB7XG5cdGFubm90YXRpb25FeHByZXNzaW9uLFxuXHRjb21waWxlQmluZGluZyxcblx0ZXF1YWwsXG5cdG5vdCxcblx0aWZFbHNlLFxuXHRjb25zdGFudCxcblx0QmluZGluZ0V4cHJlc3Npb24sXG5cdEV4cHJlc3Npb25cbn0gZnJvbSBcInNhcC9mZS9jb3JlL2hlbHBlcnMvQmluZGluZ0V4cHJlc3Npb25cIjtcbmltcG9ydCBDb252ZXJ0ZXJDb250ZXh0IGZyb20gXCIuLi9Db252ZXJ0ZXJDb250ZXh0XCI7XG5pbXBvcnQgeyBVSSB9IGZyb20gXCIuLi9oZWxwZXJzL0JpbmRpbmdIZWxwZXJcIjtcblxuZXhwb3J0IHR5cGUgT2JqZWN0UGFnZURlZmluaXRpb24gPSBQYWdlRGVmaW5pdGlvbiAmIHtcblx0aGVhZGVyOiB7XG5cdFx0dmlzaWJsZTogYm9vbGVhbjtcblx0XHRzZWN0aW9uPzogT2JqZWN0UGFnZVNlY3Rpb247XG5cdFx0ZmFjZXRzOiBPYmplY3RQYWdlSGVhZGVyRmFjZXRbXTtcblx0XHRhY3Rpb25zOiBCYXNlQWN0aW9uW107XG5cdFx0c2hvd0NvbnRlbnQ6IEJpbmRpbmdFeHByZXNzaW9uPGJvb2xlYW4+O1xuXHRcdGhhc0NvbnRlbnQ6IGJvb2xlYW47XG5cdFx0YXZhdGFyPzogQXZhdGFyO1xuXHRcdHRpdGxlOiB7XG5cdFx0XHRleHBhbmRlZEltYWdlVmlzaWJsZTogQmluZGluZ0V4cHJlc3Npb248c3RyaW5nPjtcblx0XHR9O1xuXHRcdHNpdHVhdGlvbnM6IGJvb2xlYW47XG5cdH07XG5cdHNlY3Rpb25zOiBPYmplY3RQYWdlU2VjdGlvbltdO1xuXHRmb290ZXJBY3Rpb25zOiBCYXNlQWN0aW9uW107XG5cdHNob3dBbmNob3JCYXI6IGJvb2xlYW47XG5cdHVzZUljb25UYWJCYXI6IGJvb2xlYW47XG59O1xuXG5jb25zdCBnZXRTZWN0aW9uS2V5ID0gKGZhY2V0RGVmaW5pdGlvbjogRmFjZXRUeXBlcywgZmFsbGJhY2s6IHN0cmluZyk6IHN0cmluZyA9PiB7XG5cdHJldHVybiBmYWNldERlZmluaXRpb24uSUQ/LnRvU3RyaW5nKCkgfHwgZmFjZXREZWZpbml0aW9uLkxhYmVsPy50b1N0cmluZygpIHx8IGZhbGxiYWNrO1xufTtcblxuLyoqXG4gKiBDcmVhdGVzIGEgc2VjdGlvbiB0aGF0IHJlcHJlc2VudHMgdGhlIGVkaXRhYmxlIGhlYWRlciBwYXJ0OyBpdCBpcyBvbmx5IHZpc2libGUgaW4gZWRpdCBtb2RlLlxuICpcbiAqIEBwYXJhbSBjb252ZXJ0ZXJDb250ZXh0IFRoZSBjb252ZXJ0ZXIgY29udGV4dFxuICogQHBhcmFtIGFsbEhlYWRlckZhY2V0cyBUaGUgY29udmVydGVyIGNvbnRleHRcbiAqIEByZXR1cm5zIHtPYmplY3RQYWdlU2VjdGlvbn0gVGhlIHNlY3Rpb24gcmVwcmVzZW50aW5nIHRoZSBlZGl0YWJsZSBoZWFkZXIgcGFydHNcbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGNyZWF0ZUVkaXRhYmxlSGVhZGVyU2VjdGlvbihcblx0Y29udmVydGVyQ29udGV4dDogQ29udmVydGVyQ29udGV4dCxcblx0YWxsSGVhZGVyRmFjZXRzOiBPYmplY3RQYWdlSGVhZGVyRmFjZXRbXVxuKTogT2JqZWN0UGFnZVNlY3Rpb24ge1xuXHRjb25zdCBlZGl0YWJsZUhlYWRlclNlY3Rpb25JRCA9IEVkaXRhYmxlSGVhZGVyU2VjdGlvbklEKCk7XG5cdGNvbnN0IGhlYWRlckZhY2V0cyA9IGNvbnZlcnRlckNvbnRleHQuZ2V0RW50aXR5VHlwZSgpLmFubm90YXRpb25zPy5VST8uSGVhZGVyRmFjZXRzO1xuXHRjb25zdCBoZWFkZXJmYWNldFN1YlNlY3Rpb25zID0gaGVhZGVyRmFjZXRzID8gY3JlYXRlU3ViU2VjdGlvbnMoaGVhZGVyRmFjZXRzLCBjb252ZXJ0ZXJDb250ZXh0LCB0cnVlKSA6IFtdO1xuXHRjb25zdCBjdXN0b21IZWFkZXJGYWNldFN1YlNlY3Rpb25zID0gY3JlYXRlQ3VzdG9tSGVhZGVyRmFjZXRTdWJTZWN0aW9ucyhjb252ZXJ0ZXJDb250ZXh0KTtcblx0bGV0IGFsbEhlYWRlckZhY2V0c1N1YlNlY3Rpb25zOiBPYmplY3RQYWdlU3ViU2VjdGlvbltdID0gW107XG5cdGlmIChjdXN0b21IZWFkZXJGYWNldFN1YlNlY3Rpb25zLmxlbmd0aCA+IDApIHtcblx0XHQvLyBtZXJnZSBhbm5vdGF0aW9uIGJhc2VkIGhlYWRlciBmYWNldHMgYW5kIGN1c3RvbSBoZWFkZXIgZmFjZXRzIGluIHRoZSByaWdodCBvcmRlclxuXHRcdGxldCBpID0gMDtcblx0XHRhbGxIZWFkZXJGYWNldHMuZm9yRWFjaChmdW5jdGlvbihpdGVtKSB7XG5cdFx0XHQvLyBoaWRkZW4gaGVhZGVyIGZhY2V0cyBhcmUgbm90IGluY2x1ZGVkIGluIGFsbEhlYWRlckZhY2V0cyBhcnJheSA9PiBhZGQgdGhlbSBhbnl3YXlcblx0XHRcdHdoaWxlIChoZWFkZXJmYWNldFN1YlNlY3Rpb25zLmxlbmd0aCA+IGkgJiYgaGVhZGVyZmFjZXRTdWJTZWN0aW9uc1tpXS52aXNpYmxlID09PSBcImZhbHNlXCIpIHtcblx0XHRcdFx0YWxsSGVhZGVyRmFjZXRzU3ViU2VjdGlvbnMucHVzaChoZWFkZXJmYWNldFN1YlNlY3Rpb25zW2ldKTtcblx0XHRcdFx0aSsrO1xuXHRcdFx0fVxuXHRcdFx0aWYgKFxuXHRcdFx0XHRoZWFkZXJmYWNldFN1YlNlY3Rpb25zLmxlbmd0aCA+IGkgJiZcblx0XHRcdFx0KGl0ZW0ua2V5ID09PSBoZWFkZXJmYWNldFN1YlNlY3Rpb25zW2ldLmtleSB8fFxuXHRcdFx0XHRcdC8vIGZvciBoZWFkZXIgZmFjZXRzIHdpdGggbm8gaWQgdGhlIGtleXMgb2YgaGVhZGVyIGZhY2V0IGFuZCBzdWJzZWN0aW9uIGFyZSBkaWZmZXJlbnQgPT4gY2hlY2sgb25seSB0aGUgbGFzdCBwYXJ0XG5cdFx0XHRcdFx0aXRlbS5rZXkuc2xpY2UoaXRlbS5rZXkubGFzdEluZGV4T2YoXCI6OlwiKSArIDIpID09PVxuXHRcdFx0XHRcdFx0aGVhZGVyZmFjZXRTdWJTZWN0aW9uc1tpXS5rZXkuc2xpY2UoaGVhZGVyZmFjZXRTdWJTZWN0aW9uc1tpXS5rZXkubGFzdEluZGV4T2YoXCI6OlwiKSArIDIpKVxuXHRcdFx0KSB7XG5cdFx0XHRcdGFsbEhlYWRlckZhY2V0c1N1YlNlY3Rpb25zLnB1c2goaGVhZGVyZmFjZXRTdWJTZWN0aW9uc1tpXSk7XG5cdFx0XHRcdGkrKztcblx0XHRcdH0gZWxzZSB7XG5cdFx0XHRcdGN1c3RvbUhlYWRlckZhY2V0U3ViU2VjdGlvbnMuZm9yRWFjaChmdW5jdGlvbihjdXN0b21JdGVtKSB7XG5cdFx0XHRcdFx0aWYgKGl0ZW0ua2V5ID09PSBjdXN0b21JdGVtLmtleSkge1xuXHRcdFx0XHRcdFx0YWxsSGVhZGVyRmFjZXRzU3ViU2VjdGlvbnMucHVzaChjdXN0b21JdGVtKTtcblx0XHRcdFx0XHR9XG5cdFx0XHRcdH0pO1xuXHRcdFx0fVxuXHRcdH0pO1xuXHR9IGVsc2Uge1xuXHRcdGFsbEhlYWRlckZhY2V0c1N1YlNlY3Rpb25zID0gaGVhZGVyZmFjZXRTdWJTZWN0aW9ucztcblx0fVxuXHRjb25zdCBoZWFkZXJTZWN0aW9uOiBPYmplY3RQYWdlU2VjdGlvbiA9IHtcblx0XHRpZDogZWRpdGFibGVIZWFkZXJTZWN0aW9uSUQsXG5cdFx0a2V5OiBcIkVkaXRhYmxlSGVhZGVyQ29udGVudFwiLFxuXHRcdHRpdGxlOiBcIntzYXAuZmUuaTE4bj5UX0NPTU1PTl9PQkpFQ1RfUEFHRV9IRUFERVJfU0VDVElPTn1cIixcblx0XHR2aXNpYmxlOiBjb21waWxlQmluZGluZyhVSS5Jc0VkaXRhYmxlKSxcblx0XHRzdWJTZWN0aW9uczogYWxsSGVhZGVyRmFjZXRzU3ViU2VjdGlvbnNcblx0fTtcblx0cmV0dXJuIGhlYWRlclNlY3Rpb247XG59XG5cbi8qKlxuICogQ3JlYXRlcyBhIGRlZmluaXRpb24gZm9yIGEgc2VjdGlvbiBiYXNlZCBvbiB0aGUgRmFjZXQgYW5ub3RhdGlvbi5cbiAqXG4gKiBAcGFyYW0gY29udmVydGVyQ29udGV4dCBUaGUgY29udmVydGVyIGNvbnRleHRcbiAqIEByZXR1cm5zIHtPYmplY3RQYWdlU2VjdGlvbltdfSBBbGwgc2VjdGlvbnNcbiAqL1xuZnVuY3Rpb24gZ2V0U2VjdGlvbnNGcm9tQW5ub3RhdGlvbihjb252ZXJ0ZXJDb250ZXh0OiBDb252ZXJ0ZXJDb250ZXh0KTogT2JqZWN0UGFnZVNlY3Rpb25bXSB7XG5cdGNvbnN0IGVudGl0eVR5cGUgPSBjb252ZXJ0ZXJDb250ZXh0LmdldEVudGl0eVR5cGUoKTtcblx0Y29uc3Qgb2JqZWN0UGFnZVNlY3Rpb25zOiBPYmplY3RQYWdlU2VjdGlvbltdID1cblx0XHRlbnRpdHlUeXBlLmFubm90YXRpb25zPy5VST8uRmFjZXRzPy5tYXAoKGZhY2V0RGVmaW5pdGlvbjogRmFjZXRUeXBlcykgPT5cblx0XHRcdGdldFNlY3Rpb25Gcm9tQW5ub3RhdGlvbihmYWNldERlZmluaXRpb24sIGNvbnZlcnRlckNvbnRleHQpXG5cdFx0KSB8fCBbXTtcblx0cmV0dXJuIG9iamVjdFBhZ2VTZWN0aW9ucztcbn1cblxuLyoqXG4gKiBDcmVhdGUgYW4gYW5ub3RhdGlvbiBiYXNlZCBzZWN0aW9uLlxuICpcbiAqIEBwYXJhbSBmYWNldFxuICogQHBhcmFtIGNvbnZlcnRlckNvbnRleHRcbiAqIEByZXR1cm5zIHtPYmplY3RQYWdlU2VjdGlvbn0gVGhlIGN1cnJlbnQgc2VjdGlvblxuICovXG5mdW5jdGlvbiBnZXRTZWN0aW9uRnJvbUFubm90YXRpb24oZmFjZXQ6IEZhY2V0VHlwZXMsIGNvbnZlcnRlckNvbnRleHQ6IENvbnZlcnRlckNvbnRleHQpOiBPYmplY3RQYWdlU2VjdGlvbiB7XG5cdGNvbnN0IHNlY3Rpb25JRCA9IFNlY3Rpb25JRCh7IEZhY2V0OiBmYWNldCB9KTtcblx0Y29uc3Qgc2VjdGlvbjogT2JqZWN0UGFnZVNlY3Rpb24gPSB7XG5cdFx0aWQ6IHNlY3Rpb25JRCxcblx0XHRrZXk6IGdldFNlY3Rpb25LZXkoZmFjZXQsIHNlY3Rpb25JRCksXG5cdFx0dGl0bGU6IGNvbXBpbGVCaW5kaW5nKGFubm90YXRpb25FeHByZXNzaW9uKGZhY2V0LkxhYmVsKSksXG5cdFx0c2hvd1RpdGxlOiAhIWZhY2V0LkxhYmVsLFxuXHRcdHZpc2libGU6IGNvbXBpbGVCaW5kaW5nKG5vdChlcXVhbChhbm5vdGF0aW9uRXhwcmVzc2lvbihmYWNldC5hbm5vdGF0aW9ucz8uVUk/LkhpZGRlbj8udmFsdWVPZigpKSwgdHJ1ZSkpKSxcblx0XHRzdWJTZWN0aW9uczogY3JlYXRlU3ViU2VjdGlvbnMoW2ZhY2V0XSwgY29udmVydGVyQ29udGV4dClcblx0fTtcblx0cmV0dXJuIHNlY3Rpb247XG59XG5cbi8qKlxuICogQ3JlYXRlcyBzZWN0aW9uIGRlZmluaXRpb24gYmFzZWQgb24gbWFuaWZlc3QgZGVmaW5pdGlvbi5cbiAqIEBwYXJhbSBtYW5pZmVzdFNlY3Rpb25zIFRoZSBtYW5pZmVzdCBkZWZpbmVkIHNlY3Rpb25zXG4gKiBAcGFyYW0gY29udmVydGVyQ29udGV4dFxuICogQHJldHVybnMge1JlY29yZDxzdHJpbmcsIEN1c3RvbU9iamVjdFBhZ2VTZWN0aW9uPn0gVGhlIG1hbmlmZXN0IGRlZmluZWQgc2VjdGlvbnNcbiAqL1xuZnVuY3Rpb24gZ2V0U2VjdGlvbnNGcm9tTWFuaWZlc3QoXG5cdG1hbmlmZXN0U2VjdGlvbnM6IENvbmZpZ3VyYWJsZVJlY29yZDxNYW5pZmVzdFNlY3Rpb24+LFxuXHRjb252ZXJ0ZXJDb250ZXh0OiBDb252ZXJ0ZXJDb250ZXh0XG4pOiBSZWNvcmQ8c3RyaW5nLCBDdXN0b21PYmplY3RQYWdlU2VjdGlvbj4ge1xuXHRjb25zdCBzZWN0aW9uczogUmVjb3JkPHN0cmluZywgQ3VzdG9tT2JqZWN0UGFnZVNlY3Rpb24+ID0ge307XG5cdE9iamVjdC5rZXlzKG1hbmlmZXN0U2VjdGlvbnMpLmZvckVhY2gobWFuaWZlc3RTZWN0aW9uS2V5ID0+IHtcblx0XHRzZWN0aW9uc1ttYW5pZmVzdFNlY3Rpb25LZXldID0gZ2V0U2VjdGlvbkZyb21NYW5pZmVzdChtYW5pZmVzdFNlY3Rpb25zW21hbmlmZXN0U2VjdGlvbktleV0sIG1hbmlmZXN0U2VjdGlvbktleSwgY29udmVydGVyQ29udGV4dCk7XG5cdH0pO1xuXHRyZXR1cm4gc2VjdGlvbnM7XG59XG5cbi8qKlxuICogQ3JlYXRlIGEgbWFuaWZlc3QgYmFzZWQgY3VzdG9tIHNlY3Rpb24uXG4gKiBAcGFyYW0gY3VzdG9tU2VjdGlvbkRlZmluaXRpb25cbiAqIEBwYXJhbSBzZWN0aW9uS2V5XG4gKiBAcGFyYW0gY29udmVydGVyQ29udGV4dFxuICogQHJldHVybnMge0N1c3RvbU9iamVjdFBhZ2VTZWN0aW9ufSBUaGUgY3VycmVudCBjdXN0b20gc2VjdGlvblxuICovXG5mdW5jdGlvbiBnZXRTZWN0aW9uRnJvbU1hbmlmZXN0KFxuXHRjdXN0b21TZWN0aW9uRGVmaW5pdGlvbjogTWFuaWZlc3RTZWN0aW9uLFxuXHRzZWN0aW9uS2V5OiBzdHJpbmcsXG5cdGNvbnZlcnRlckNvbnRleHQ6IENvbnZlcnRlckNvbnRleHRcbik6IEN1c3RvbU9iamVjdFBhZ2VTZWN0aW9uIHtcblx0Y29uc3QgY3VzdG9tU2VjdGlvbklEID0gY3VzdG9tU2VjdGlvbkRlZmluaXRpb24uaWQgfHwgQ3VzdG9tU2VjdGlvbklEKHNlY3Rpb25LZXkpO1xuXHRsZXQgcG9zaXRpb246IFBvc2l0aW9uIHwgdW5kZWZpbmVkID0gY3VzdG9tU2VjdGlvbkRlZmluaXRpb24ucG9zaXRpb247XG5cdGlmICghcG9zaXRpb24pIHtcblx0XHRwb3NpdGlvbiA9IHtcblx0XHRcdHBsYWNlbWVudDogUGxhY2VtZW50LkFmdGVyXG5cdFx0fTtcblx0fVxuXHRsZXQgbWFuaWZlc3RTdWJTZWN0aW9uczogUmVjb3JkPHN0cmluZywgTWFuaWZlc3RTdWJTZWN0aW9uPjtcblx0aWYgKCFjdXN0b21TZWN0aW9uRGVmaW5pdGlvbi5zdWJTZWN0aW9ucykge1xuXHRcdC8vIElmIHRoZXJlIGlzIG5vIHN1YlNlY3Rpb24gZGVmaW5lZCwgd2UgYWRkIHRoZSBjb250ZW50IG9mIHRoZSBjdXN0b20gc2VjdGlvbiBhcyBzdWJzZWN0aW9uc1xuXHRcdC8vIGFuZCBtYWtlIHN1cmUgdG8gc2V0IHRoZSB2aXNpYmlsaXR5IHRvICd0cnVlJywgYXMgdGhlIGFjdHVhbCB2aXNpYmlsaXR5IGlzIGhhbmRsZWQgYnkgdGhlIHNlY3Rpb24gaXRzZWxmXG5cdFx0bWFuaWZlc3RTdWJTZWN0aW9ucyA9IHtcblx0XHRcdFtzZWN0aW9uS2V5XToge1xuXHRcdFx0XHQuLi5jdXN0b21TZWN0aW9uRGVmaW5pdGlvbixcblx0XHRcdFx0cG9zaXRpb246IHVuZGVmaW5lZCxcblx0XHRcdFx0dmlzaWJsZTogdHJ1ZVxuXHRcdFx0fVxuXHRcdH07XG5cdH0gZWxzZSB7XG5cdFx0bWFuaWZlc3RTdWJTZWN0aW9ucyA9IGN1c3RvbVNlY3Rpb25EZWZpbml0aW9uLnN1YlNlY3Rpb25zO1xuXHR9XG5cdGNvbnN0IHN1YlNlY3Rpb25zID0gY3JlYXRlQ3VzdG9tU3ViU2VjdGlvbnMobWFuaWZlc3RTdWJTZWN0aW9ucywgY29udmVydGVyQ29udGV4dCk7XG5cblx0Y29uc3QgY3VzdG9tU2VjdGlvbjogQ3VzdG9tT2JqZWN0UGFnZVNlY3Rpb24gPSB7XG5cdFx0aWQ6IGN1c3RvbVNlY3Rpb25JRCxcblx0XHRrZXk6IHNlY3Rpb25LZXksXG5cdFx0dGl0bGU6IGN1c3RvbVNlY3Rpb25EZWZpbml0aW9uLnRpdGxlLFxuXHRcdHNob3dUaXRsZTogISFjdXN0b21TZWN0aW9uRGVmaW5pdGlvbi50aXRsZSxcblx0XHR2aXNpYmxlOiBjdXN0b21TZWN0aW9uRGVmaW5pdGlvbi52aXNpYmxlICE9PSB1bmRlZmluZWQgPyBjdXN0b21TZWN0aW9uRGVmaW5pdGlvbi52aXNpYmxlIDogdHJ1ZSxcblx0XHRwb3NpdGlvbjogcG9zaXRpb24sXG5cdFx0c3ViU2VjdGlvbnM6IHN1YlNlY3Rpb25zIGFzIGFueVxuXHR9O1xuXHRyZXR1cm4gY3VzdG9tU2VjdGlvbjtcbn1cblxuLyoqXG4gKiBSZXRyaWV2ZXMgdGhlIE9iamVjdFBhZ2UgaGVhZGVyIGFjdGlvbnMgKGJvdGggdGhlIGRlZmF1bHQgb25lcyBhbmQgdGhlIGN1c3RvbSBvbmVzIGRlZmluZWQgaW4gdGhlIG1hbmlmZXN0KS5cbiAqXG4gKiBAcGFyYW0ge0NvbnZlcnRlckNvbnRleHR9IGNvbnZlcnRlckNvbnRleHQgVGhlIGNvbnZlcnRlciBjb250ZXh0XG4gKiBAcmV0dXJucyBBbiBhcnJheSBjb250YWluaW5nIGFsbCB0aGUgYWN0aW9ucyBmb3IgdGhpcyBPYmplY3RQYWdlIGhlYWRlclxuICovXG5leHBvcnQgY29uc3QgZ2V0SGVhZGVyQWN0aW9ucyA9IGZ1bmN0aW9uKGNvbnZlcnRlckNvbnRleHQ6IENvbnZlcnRlckNvbnRleHQpOiBCYXNlQWN0aW9uW10ge1xuXHRjb25zdCBhQW5ub3RhdGlvbkhlYWRlckFjdGlvbnM6IEJhc2VBY3Rpb25bXSA9IGdldEhlYWRlckRlZmF1bHRBY3Rpb25zKGNvbnZlcnRlckNvbnRleHQpO1xuXHRjb25zdCBtYW5pZmVzdFdyYXBwZXIgPSBjb252ZXJ0ZXJDb250ZXh0LmdldE1hbmlmZXN0V3JhcHBlcigpO1xuXHRjb25zdCBoZWFkZXJBY3Rpb25zID0gaW5zZXJ0Q3VzdG9tRWxlbWVudHMoXG5cdFx0YUFubm90YXRpb25IZWFkZXJBY3Rpb25zLFxuXHRcdGdldEFjdGlvbnNGcm9tTWFuaWZlc3QoXG5cdFx0XHRtYW5pZmVzdFdyYXBwZXIuZ2V0SGVhZGVyQWN0aW9ucygpLFxuXHRcdFx0Y29udmVydGVyQ29udGV4dCxcblx0XHRcdGFBbm5vdGF0aW9uSGVhZGVyQWN0aW9ucyxcblx0XHRcdHVuZGVmaW5lZCxcblx0XHRcdHVuZGVmaW5lZCxcblx0XHRcdGdldEhpZGRlbkhlYWRlckFjdGlvbnMoY29udmVydGVyQ29udGV4dClcblx0XHQpLFxuXHRcdHsgaXNOYXZpZ2FibGU6IFwib3ZlcndyaXRlXCIsIGVuYWJsZWQ6IFwib3ZlcndyaXRlXCIsIGRlZmF1bHRWYWx1ZXNFeHRlbnNpb25GdW5jdGlvbjogXCJvdmVyd3JpdGVcIiB9XG5cdCk7XG5cdHJldHVybiByZW1vdmVEdXBsaWNhdGVBY3Rpb25zKGhlYWRlckFjdGlvbnMpO1xufTtcblxuLyoqXG4gKiBSZXRyaWV2ZXMgdGhlIE9iamVjdFBhZ2UgZm9vdGVyIGFjdGlvbnMgKGJvdGggdGhlIGRlZmF1bHQgb25lcyBhbmQgdGhlIGN1c3RvbSBvbmVzIGRlZmluZWQgaW4gdGhlIG1hbmlmZXN0KS5cbiAqXG4gKiBAcGFyYW0ge0NvbnZlcnRlckNvbnRleHR9IGNvbnZlcnRlckNvbnRleHQgVGhlIGNvbnZlcnRlciBjb250ZXh0XG4gKiBAcmV0dXJucyBBbiBhcnJheSBjb250YWluaW5nIGFsbCB0aGUgYWN0aW9ucyBmb3IgdGhpcyBPYmplY3RQYWdlIGZvb3RlclxuICovXG5leHBvcnQgY29uc3QgZ2V0Rm9vdGVyQWN0aW9ucyA9IGZ1bmN0aW9uKGNvbnZlcnRlckNvbnRleHQ6IENvbnZlcnRlckNvbnRleHQpOiBCYXNlQWN0aW9uW10ge1xuXHRjb25zdCBtYW5pZmVzdFdyYXBwZXIgPSBjb252ZXJ0ZXJDb250ZXh0LmdldE1hbmlmZXN0V3JhcHBlcigpO1xuXHRjb25zdCBhQW5ub3RhdGlvbkZvb3RlckFjdGlvbnM6IEJhc2VBY3Rpb25bXSA9IGdldEZvb3RlckRlZmF1bHRBY3Rpb25zKG1hbmlmZXN0V3JhcHBlci5nZXRWaWV3TGV2ZWwoKSwgY29udmVydGVyQ29udGV4dCk7XG5cdGNvbnN0IGZvb3RlckFjdGlvbnMgPSBpbnNlcnRDdXN0b21FbGVtZW50cyhcblx0XHRhQW5ub3RhdGlvbkZvb3RlckFjdGlvbnMsXG5cdFx0Z2V0QWN0aW9uc0Zyb21NYW5pZmVzdChtYW5pZmVzdFdyYXBwZXIuZ2V0Rm9vdGVyQWN0aW9ucygpLCBjb252ZXJ0ZXJDb250ZXh0LCBhQW5ub3RhdGlvbkZvb3RlckFjdGlvbnMpLFxuXHRcdHsgaXNOYXZpZ2FibGU6IFwib3ZlcndyaXRlXCIsIGVuYWJsZWQ6IFwib3ZlcndyaXRlXCIsIGRlZmF1bHRWYWx1ZXNFeHRlbnNpb25GdW5jdGlvbjogXCJvdmVyd3JpdGVcIiB9XG5cdCk7XG5cdHJldHVybiBmb290ZXJBY3Rpb25zO1xufTtcblxuLyoqXG4gKiBSZXRyaWV2ZXMgYW5kIG1lcmdlcyB0aGUgT2JqZWN0UGFnZSBzZWN0aW9ucyBkZWZpbmVkIGluIHRoZSBhbm5vdGF0aW9uIGFuZCBpbiB0aGUgbWFuaWZlc3QuXG4gKlxuICogQHBhcmFtIHtDb252ZXJ0ZXJDb250ZXh0fSBjb252ZXJ0ZXJDb250ZXh0IFRoZSBjb252ZXJ0ZXIgY29udGV4dFxuICogQHJldHVybnMgQW4gYXJyYXkgb2Ygc2VjdGlvbnMuXG4gKi9cbmV4cG9ydCBjb25zdCBnZXRTZWN0aW9ucyA9IGZ1bmN0aW9uKGNvbnZlcnRlckNvbnRleHQ6IENvbnZlcnRlckNvbnRleHQpOiBPYmplY3RQYWdlU2VjdGlvbltdIHtcblx0Y29uc3QgbWFuaWZlc3RXcmFwcGVyID0gY29udmVydGVyQ29udGV4dC5nZXRNYW5pZmVzdFdyYXBwZXIoKTtcblx0Y29uc3Qgc2VjdGlvbnMgPSBpbnNlcnRDdXN0b21FbGVtZW50cyhcblx0XHRnZXRTZWN0aW9uc0Zyb21Bbm5vdGF0aW9uKGNvbnZlcnRlckNvbnRleHQpLFxuXHRcdGdldFNlY3Rpb25zRnJvbU1hbmlmZXN0KG1hbmlmZXN0V3JhcHBlci5nZXRTZWN0aW9ucygpLCBjb252ZXJ0ZXJDb250ZXh0KSxcblx0XHR7XG5cdFx0XHRcInRpdGxlXCI6IFwib3ZlcndyaXRlXCIsXG5cdFx0XHRcInZpc2libGVcIjogXCJvdmVyd3JpdGVcIixcblx0XHRcdFwic3ViU2VjdGlvbnNcIjoge1xuXHRcdFx0XHRcImFjdGlvbnNcIjogXCJtZXJnZVwiLFxuXHRcdFx0XHRcInRpdGxlXCI6IFwib3ZlcndyaXRlXCIsXG5cdFx0XHRcdFwic2lkZUNvbnRlbnRcIjogXCJvdmVyd3JpdGVcIlxuXHRcdFx0fVxuXHRcdH1cblx0KTtcblx0Ly8gTGV2ZWwgQWRqdXN0bWVudCBmb3IgXCJNaXhlZFwiIENvbGxlY3Rpb24gRmFjZXRzOlxuXHQvLyA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XG5cdC8vIFRoZSBtYW5pZmVzdCBkZWZpbml0aW9uIG9mIGN1c3RvbSBzaWRlIGNvbnRlbnRzIGFuZCBhY3Rpb25zIHN0aWxsIG5lZWRzIHRvIGJlIGFsaWduZWQgZm9yIFwiTWl4ZWRcIiBjb2xsZWN0aW9uIGZhY2V0czpcblx0Ly8gQ29sbGVjdGlvbiBmYWNldHMgY29udGFpbmluZyB0YWJsZXMgZ2FpbiBhbiBleHRyYSByZWZlcmVuY2UgZmFjZXQgYXMgYSB0YWJsZSB3cmFwcGVyIHRvIGVuc3VyZSwgdGhhdCB0aGUgdGFibGUgaXMgYWx3YXlzXG5cdC8vIHBsYWNlZCBpbiBhbiBvd24gaW5kaXZpZHVhbCBPYmplY3QgUGFnZSBCbG9jazsgdGhpcyBhZGRpdGlvbmFsIGhpZXJhcmNoeSBsZXZlbCBpcyB1bmtub3duIHRvIGFwcCBkZXZlbG9wZXJzLCB3aGljaCBhcmVcblx0Ly8gZGVmaW5pbmcgdGhlIHNpZGUgY29udGVudCBhbmQgYWN0aW9ucyBpbiB0aGUgbWFuaWZlc3QgYXQgY29sbGVjdGlvbiBmYWNldCBsZXZlbDsgbm93LCBzaW5jZSB0aGUgc2lkZUNvbnRlbnQgYWx3YXlzIG5lZWRzXG5cdC8vIHRvIGJlIGFzc2lnbmVkIHRvIGEgYmxvY2ssIHdlIG5lZWQgdG8gbW92ZSB0aGUgc2lkZUNvbnRlbnQgb2YgZnJvbSBhIG1peGVkIGNvbGxlY3Rpb24gZmFjZXQgdG8gaXRzIGZpcnN0IGNoaWxkIHJlZmVyZW5jZSBmYWNldC5cblx0Ly8gPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxuXHRzZWN0aW9ucy5mb3JFYWNoKGZ1bmN0aW9uKHNlY3Rpb24pIHtcblx0XHRzZWN0aW9uLnN1YlNlY3Rpb25zPy5mb3JFYWNoKGZ1bmN0aW9uKHN1YlNlY3Rpb24pIHtcblx0XHRcdGlmIChzdWJTZWN0aW9uLnR5cGUgPT09IFwiTWl4ZWRcIiAmJiBzdWJTZWN0aW9uLnNpZGVDb250ZW50ICE9IHVuZGVmaW5lZCAmJiBzdWJTZWN0aW9uLmNvbnRlbnQgJiYgc3ViU2VjdGlvbi5jb250ZW50Lmxlbmd0aCA+IDApIHtcblx0XHRcdFx0Ly8gMS4gQ29weSBzaWRlQ29udGVudCAvIGFjdGlvbnMgdG8gdGhlIFN1YlNlY3Rpb24ncyBjb250ZW50XG5cdFx0XHRcdC8vIDIuIERlbGV0ZSBzaWRlQ29udGVudCAvIGFjdGlvbnMgYXQgdGhlIChpbnZhbGlkKSBtYW5pZmVzdCBsZXZlbFxuXHRcdFx0XHRpZiAoKHN1YlNlY3Rpb24gYXMgRm9ybVN1YlNlY3Rpb24pLnNpZGVDb250ZW50KSB7XG5cdFx0XHRcdFx0c3ViU2VjdGlvbi5jb250ZW50WzBdLnNpZGVDb250ZW50ID0gc3ViU2VjdGlvbi5zaWRlQ29udGVudDtcblx0XHRcdFx0XHRzdWJTZWN0aW9uLnNpZGVDb250ZW50ID0gdW5kZWZpbmVkO1xuXHRcdFx0XHR9XG5cdFx0XHRcdGlmICgoc3ViU2VjdGlvbiBhcyBGb3JtU3ViU2VjdGlvbikuYWN0aW9ucy5sZW5ndGggPiAwKSB7XG5cdFx0XHRcdFx0KHN1YlNlY3Rpb24uY29udGVudFswXSBhcyBGb3JtU3ViU2VjdGlvbikuYWN0aW9ucyA9IChzdWJTZWN0aW9uIGFzIEZvcm1TdWJTZWN0aW9uKS5hY3Rpb25zO1xuXHRcdFx0XHRcdChzdWJTZWN0aW9uIGFzIEZvcm1TdWJTZWN0aW9uKS5hY3Rpb25zID0gW107XG5cdFx0XHRcdH1cblx0XHRcdH1cblx0XHR9KTtcblx0fSk7XG5cdHJldHVybiBzZWN0aW9ucztcbn07XG5cbi8qKlxuICogRGV0ZXJtaW5lcyBpZiB0aGUgT2JqZWN0UGFnZSBoYXMgaGVhZGVyIGNvbnRlbnQuXG4gKlxuICogQHBhcmFtIGNvbnZlcnRlckNvbnRleHQgVGhlIGluc3RhbmNlIG9mIHRoZSBjb252ZXJ0ZXIgY29udGV4dFxuICogQHJldHVybnMge2Jvb2xlYW59IGB0cnVlYCBpZiB0aGVyZSBpcyBhdCBsZWFzdCBvbiBoZWFkZXIgZmFjZXRcbiAqL1xuZnVuY3Rpb24gaGFzSGVhZGVyQ29udGVudChjb252ZXJ0ZXJDb250ZXh0OiBDb252ZXJ0ZXJDb250ZXh0KTogYm9vbGVhbiB7XG5cdGNvbnN0IG1hbmlmZXN0V3JhcHBlciA9IGNvbnZlcnRlckNvbnRleHQuZ2V0TWFuaWZlc3RXcmFwcGVyKCk7XG5cdHJldHVybiAoXG5cdFx0KGNvbnZlcnRlckNvbnRleHQuZ2V0RW50aXR5VHlwZSgpLmFubm90YXRpb25zPy5VST8uSGVhZGVyRmFjZXRzIHx8IFtdKS5sZW5ndGggPiAwIHx8XG5cdFx0T2JqZWN0LmtleXMobWFuaWZlc3RXcmFwcGVyLmdldEhlYWRlckZhY2V0cygpKS5sZW5ndGggPiAwXG5cdCk7XG59XG5cbi8qKlxuICogR2V0cyB0aGUgZXhwcmVzc2lvbiB0byBldmFsdWF0ZSB0aGUgdmlzaWJpbGl0eSBvZiB0aGUgaGVhZGVyIGNvbnRlbnQuXG4gKlxuICogQHBhcmFtIGNvbnZlcnRlckNvbnRleHQgVGhlIGluc3RhbmNlIG9mIHRoZSBjb252ZXJ0ZXIgY29udGV4dFxuICogQHJldHVybnMge0JpbmRpbmdFeHByZXNzaW9uPGJvb2xlYW4+fSBUaGUgYmluZGluZyBleHByZXNzaW9uIGZvciB0aGUgRGVsZXRlIGJ1dHRvblxuICovXG5mdW5jdGlvbiBnZXRTaG93SGVhZGVyQ29udGVudEV4cHJlc3Npb24oY29udmVydGVyQ29udGV4dDogQ29udmVydGVyQ29udGV4dCk6IEV4cHJlc3Npb248YW55PiB7XG5cdGNvbnN0IG1hbmlmZXN0V3JhcHBlciA9IGNvbnZlcnRlckNvbnRleHQuZ2V0TWFuaWZlc3RXcmFwcGVyKCk7XG5cdHJldHVybiBpZkVsc2UoXG5cdFx0IWhhc0hlYWRlckNvbnRlbnQoY29udmVydGVyQ29udGV4dCksXG5cdFx0Y29uc3RhbnQoZmFsc2UpLFxuXHRcdGlmRWxzZShlcXVhbChtYW5pZmVzdFdyYXBwZXIuaXNIZWFkZXJFZGl0YWJsZSgpLCBmYWxzZSksIGNvbnN0YW50KHRydWUpLCBub3QoVUkuSXNFZGl0YWJsZSkpXG5cdCk7XG59XG5cbi8qKlxuICogR2V0cyB0aGUgYmluZGluZyBleHByZXNzaW9uIHRvIGV2YWx1YXRlIHRoZSB2aXNpYmlsaXR5IG9mIHRoZSBoZWFkZXIgY29udGVudC5cbiAqXG4gKiBAcGFyYW0gY29udmVydGVyQ29udGV4dCBUaGUgaW5zdGFuY2Ugb2YgdGhlIGNvbnZlcnRlciBjb250ZXh0XG4gKiBAcmV0dXJucyB7QmluZGluZ0V4cHJlc3Npb248Ym9vbGVhbj59IFRoZSBiaW5kaW5nIGV4cHJlc3Npb24gZm9yIHRoZSBEZWxldGUgYnV0dG9uXG4gKi9cbmV4cG9ydCBjb25zdCBnZXRTaG93SGVhZGVyQ29udGVudCA9IGZ1bmN0aW9uKGNvbnZlcnRlckNvbnRleHQ6IENvbnZlcnRlckNvbnRleHQpOiBCaW5kaW5nRXhwcmVzc2lvbjxib29sZWFuPiB7XG5cdHJldHVybiBjb21waWxlQmluZGluZyhnZXRTaG93SGVhZGVyQ29udGVudEV4cHJlc3Npb24oY29udmVydGVyQ29udGV4dCkpO1xufTtcblxuLyoqXG4gKiBHZXRzIHRoZSBiaW5kaW5nIGV4cHJlc3Npb24gdG8gZXZhbHVhdGUgdGhlIHZpc2liaWxpdHkgb2YgdGhlIGF2YXRhciB3aGVuIHRoZSBoZWFkZXIgaXMgaW4gZXhwYW5kZWQgc3RhdGUuXG4gKlxuICogQHBhcmFtIGNvbnZlcnRlckNvbnRleHQgVGhlIGluc3RhbmNlIG9mIHRoZSBjb252ZXJ0ZXIgY29udGV4dFxuICogQHJldHVybnMge0JpbmRpbmdFeHByZXNzaW9uPHN0cmluZz59IFRoZSBiaW5kaW5nIGV4cHJlc3Npb24gZm9yIHRoZSBEZWxldGUgYnV0dG9uXG4gKi9cbmV4cG9ydCBjb25zdCBnZXRFeHBhbmRlZEltYWdlVmlzaWJsZSA9IGZ1bmN0aW9uKGNvbnZlcnRlckNvbnRleHQ6IENvbnZlcnRlckNvbnRleHQpOiBCaW5kaW5nRXhwcmVzc2lvbjxzdHJpbmc+IHtcblx0cmV0dXJuIGNvbXBpbGVCaW5kaW5nKG5vdChnZXRTaG93SGVhZGVyQ29udGVudEV4cHJlc3Npb24oY29udmVydGVyQ29udGV4dCkpKTtcbn07XG5cbmV4cG9ydCBjb25zdCBjb252ZXJ0UGFnZSA9IGZ1bmN0aW9uKGNvbnZlcnRlckNvbnRleHQ6IENvbnZlcnRlckNvbnRleHQpOiBPYmplY3RQYWdlRGVmaW5pdGlvbiB7XG5cdGNvbnN0IG1hbmlmZXN0V3JhcHBlciA9IGNvbnZlcnRlckNvbnRleHQuZ2V0TWFuaWZlc3RXcmFwcGVyKCk7XG5cdGxldCBoZWFkZXJTZWN0aW9uOiBPYmplY3RQYWdlU2VjdGlvbiB8IHVuZGVmaW5lZDtcblx0Y29uc3QgZW50aXR5VHlwZTogRW50aXR5VHlwZSA9IGNvbnZlcnRlckNvbnRleHQuZ2V0RW50aXR5VHlwZSgpO1xuXG5cdGNvbnN0IHNpdHVhdGlvbkFubm90YXRpb25zID0gKGVudGl0eVR5cGUuYW5ub3RhdGlvbnMgYXMgYW55KT8uRkU/LlNpdHVhdGlvbnM7XG5cdC8vIFJldHJpZXZlIGFsbCBoZWFkZXIgZmFjZXRzIChmcm9tIGFubm90YXRpb25zICYgY3VzdG9tKVxuXHRjb25zdCBoZWFkZXJGYWNldHMgPSBpbnNlcnRDdXN0b21FbGVtZW50cyhcblx0XHRnZXRIZWFkZXJGYWNldHNGcm9tQW5ub3RhdGlvbnMoY29udmVydGVyQ29udGV4dCksXG5cdFx0Z2V0SGVhZGVyRmFjZXRzRnJvbU1hbmlmZXN0KG1hbmlmZXN0V3JhcHBlci5nZXRIZWFkZXJGYWNldHMoKSlcblx0KTtcblxuXHQvLyBSZXRyaWV2ZSB0aGUgcGFnZSBoZWFkZXIgYWN0aW9uc1xuXHRjb25zdCBoZWFkZXJBY3Rpb25zID0gZ2V0SGVhZGVyQWN0aW9ucyhjb252ZXJ0ZXJDb250ZXh0KTtcblxuXHQvLyBSZXRyaWV2ZSB0aGUgcGFnZSBmb290ZXIgYWN0aW9uc1xuXHRjb25zdCBmb290ZXJBY3Rpb25zID0gZ2V0Rm9vdGVyQWN0aW9ucyhjb252ZXJ0ZXJDb250ZXh0KTtcblxuXHRpZiAobWFuaWZlc3RXcmFwcGVyLmlzSGVhZGVyRWRpdGFibGUoKSAmJiAoZW50aXR5VHlwZS5hbm5vdGF0aW9ucy5VST8uSGVhZGVyRmFjZXRzIHx8IGVudGl0eVR5cGUuYW5ub3RhdGlvbnMuVUk/LkhlYWRlckluZm8pKSB7XG5cdFx0aGVhZGVyU2VjdGlvbiA9IGNyZWF0ZUVkaXRhYmxlSGVhZGVyU2VjdGlvbihjb252ZXJ0ZXJDb250ZXh0LCBoZWFkZXJGYWNldHMpO1xuXHR9XG5cblx0Y29uc3Qgc2VjdGlvbnMgPSBnZXRTZWN0aW9ucyhjb252ZXJ0ZXJDb250ZXh0KTtcblxuXHRyZXR1cm4ge1xuXHRcdHRlbXBsYXRlOiBUZW1wbGF0ZVR5cGUuT2JqZWN0UGFnZSxcblx0XHRoZWFkZXI6IHtcblx0XHRcdHZpc2libGU6IG1hbmlmZXN0V3JhcHBlci5nZXRTaG93T2JqZWN0UGFnZUhlYWRlcigpLFxuXHRcdFx0c2VjdGlvbjogaGVhZGVyU2VjdGlvbixcblx0XHRcdGZhY2V0czogaGVhZGVyRmFjZXRzLFxuXHRcdFx0YWN0aW9uczogaGVhZGVyQWN0aW9ucyxcblx0XHRcdHNob3dDb250ZW50OiBnZXRTaG93SGVhZGVyQ29udGVudChjb252ZXJ0ZXJDb250ZXh0KSxcblx0XHRcdGhhc0NvbnRlbnQ6IGhhc0hlYWRlckNvbnRlbnQoY29udmVydGVyQ29udGV4dCksXG5cdFx0XHRhdmF0YXI6IGdldEF2YXRhcihjb252ZXJ0ZXJDb250ZXh0KSxcblx0XHRcdHRpdGxlOiB7XG5cdFx0XHRcdGV4cGFuZGVkSW1hZ2VWaXNpYmxlOiBnZXRFeHBhbmRlZEltYWdlVmlzaWJsZShjb252ZXJ0ZXJDb250ZXh0KVxuXHRcdFx0fSxcblx0XHRcdHNpdHVhdGlvbnM6IHNpdHVhdGlvbkFubm90YXRpb25zXG5cdFx0fSxcblx0XHRzZWN0aW9uczogc2VjdGlvbnMsXG5cdFx0Zm9vdGVyQWN0aW9uczogZm9vdGVyQWN0aW9ucyxcblx0XHRzaG93QW5jaG9yQmFyOiBtYW5pZmVzdFdyYXBwZXIuZ2V0U2hvd0FuY2hvckJhcigpLFxuXHRcdHVzZUljb25UYWJCYXI6IG1hbmlmZXN0V3JhcHBlci51c2VJY29uVGFiQmFyKClcblx0fTtcbn07XG4iXX0=
389
+ //# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIk9iamVjdFBhZ2VDb252ZXJ0ZXIudHMiXSwibmFtZXMiOlsiZ2V0U2VjdGlvbktleSIsImZhY2V0RGVmaW5pdGlvbiIsImZhbGxiYWNrIiwiSUQiLCJ0b1N0cmluZyIsIkxhYmVsIiwiY3JlYXRlRWRpdGFibGVIZWFkZXJTZWN0aW9uIiwiY29udmVydGVyQ29udGV4dCIsImFsbEhlYWRlckZhY2V0cyIsImVkaXRhYmxlSGVhZGVyU2VjdGlvbklEIiwiZ2V0RWRpdGFibGVIZWFkZXJTZWN0aW9uSUQiLCJoZWFkZXJGYWNldHMiLCJnZXRFbnRpdHlUeXBlIiwiYW5ub3RhdGlvbnMiLCJVSSIsIkhlYWRlckZhY2V0cyIsImhlYWRlcmZhY2V0U3ViU2VjdGlvbnMiLCJjcmVhdGVTdWJTZWN0aW9ucyIsImN1c3RvbUhlYWRlckZhY2V0U3ViU2VjdGlvbnMiLCJjcmVhdGVDdXN0b21IZWFkZXJGYWNldFN1YlNlY3Rpb25zIiwiYWxsSGVhZGVyRmFjZXRzU3ViU2VjdGlvbnMiLCJsZW5ndGgiLCJpIiwiZm9yRWFjaCIsIml0ZW0iLCJ2aXNpYmxlIiwicHVzaCIsImtleSIsInNsaWNlIiwibGFzdEluZGV4T2YiLCJjdXN0b21JdGVtIiwiaGVhZGVyU2VjdGlvbiIsImlkIiwidGl0bGUiLCJjb21waWxlRXhwcmVzc2lvbiIsIklzRWRpdGFibGUiLCJzdWJTZWN0aW9ucyIsImdldFNlY3Rpb25zRnJvbUFubm90YXRpb24iLCJlbnRpdHlUeXBlIiwib2JqZWN0UGFnZVNlY3Rpb25zIiwiRmFjZXRzIiwibWFwIiwiZ2V0U2VjdGlvbkZyb21Bbm5vdGF0aW9uIiwiZmFjZXQiLCJzZWN0aW9uSUQiLCJnZXRTZWN0aW9uSUQiLCJGYWNldCIsInNlY3Rpb24iLCJnZXRFeHByZXNzaW9uRnJvbUFubm90YXRpb24iLCJzaG93VGl0bGUiLCJub3QiLCJlcXVhbCIsIkhpZGRlbiIsInZhbHVlT2YiLCJnZXRTZWN0aW9uc0Zyb21NYW5pZmVzdCIsIm1hbmlmZXN0U2VjdGlvbnMiLCJzZWN0aW9ucyIsIk9iamVjdCIsImtleXMiLCJtYW5pZmVzdFNlY3Rpb25LZXkiLCJnZXRTZWN0aW9uRnJvbU1hbmlmZXN0IiwiY3VzdG9tU2VjdGlvbkRlZmluaXRpb24iLCJzZWN0aW9uS2V5IiwiY3VzdG9tU2VjdGlvbklEIiwiZ2V0Q3VzdG9tU2VjdGlvbklEIiwicG9zaXRpb24iLCJwbGFjZW1lbnQiLCJQbGFjZW1lbnQiLCJBZnRlciIsIm1hbmlmZXN0U3ViU2VjdGlvbnMiLCJ1bmRlZmluZWQiLCJjcmVhdGVDdXN0b21TdWJTZWN0aW9ucyIsImN1c3RvbVNlY3Rpb24iLCJnZXRIZWFkZXJBY3Rpb25zIiwiYUFubm90YXRpb25IZWFkZXJBY3Rpb25zIiwiZ2V0SGVhZGVyRGVmYXVsdEFjdGlvbnMiLCJtYW5pZmVzdFdyYXBwZXIiLCJnZXRNYW5pZmVzdFdyYXBwZXIiLCJoZWFkZXJBY3Rpb25zIiwiaW5zZXJ0Q3VzdG9tRWxlbWVudHMiLCJnZXRBY3Rpb25zRnJvbU1hbmlmZXN0IiwiZ2V0SGlkZGVuSGVhZGVyQWN0aW9ucyIsImlzTmF2aWdhYmxlIiwiZW5hYmxlZCIsImRlZmF1bHRWYWx1ZXNFeHRlbnNpb25GdW5jdGlvbiIsImNvbW1hbmQiLCJyZW1vdmVEdXBsaWNhdGVBY3Rpb25zIiwiZ2V0Rm9vdGVyQWN0aW9ucyIsImFBbm5vdGF0aW9uRm9vdGVyQWN0aW9ucyIsImdldEZvb3RlckRlZmF1bHRBY3Rpb25zIiwiZ2V0Vmlld0xldmVsIiwiZ2V0U2VjdGlvbnMiLCJzdWJTZWN0aW9uIiwidHlwZSIsInNpZGVDb250ZW50IiwiY29udGVudCIsImFjdGlvbnMiLCJoYXNIZWFkZXJDb250ZW50IiwiZ2V0SGVhZGVyRmFjZXRzIiwiZ2V0U2hvd0hlYWRlckNvbnRlbnRFeHByZXNzaW9uIiwiaWZFbHNlIiwiY29uc3RhbnQiLCJpc0hlYWRlckVkaXRhYmxlIiwiZ2V0U2hvd0hlYWRlckNvbnRlbnQiLCJnZXRFeHBhbmRlZEltYWdlVmlzaWJsZSIsImNvbnZlcnRQYWdlIiwiZ2V0SGVhZGVyRmFjZXRzRnJvbUFubm90YXRpb25zIiwiZ2V0SGVhZGVyRmFjZXRzRnJvbU1hbmlmZXN0IiwiZm9vdGVyQWN0aW9ucyIsIkhlYWRlckluZm8iLCJ0ZW1wbGF0ZSIsIlRlbXBsYXRlVHlwZSIsIk9iamVjdFBhZ2UiLCJoZWFkZXIiLCJnZXRTaG93T2JqZWN0UGFnZUhlYWRlciIsImZhY2V0cyIsInNob3dDb250ZW50IiwiaGFzQ29udGVudCIsImF2YXRhciIsImdldEF2YXRhciIsImV4cGFuZGVkSW1hZ2VWaXNpYmxlIiwic2hvd0FuY2hvckJhciIsImdldFNob3dBbmNob3JCYXIiLCJ1c2VJY29uVGFiQmFyIl0sIm1hcHBpbmdzIjoiO0FBQUE7QUFDQTtBQUNBOzs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7QUEyQ0EsTUFBTUEsYUFBYSxHQUFHLFVBQUNDLGVBQUQsRUFBOEJDLFFBQTlCLEVBQTJEO0FBQUE7O0FBQ2hGLFdBQU8sd0JBQUFELGVBQWUsQ0FBQ0UsRUFBaEIsNEVBQW9CQyxRQUFwQixpQ0FBa0NILGVBQWUsQ0FBQ0ksS0FBbEQsMERBQWtDLHNCQUF1QkQsUUFBdkIsRUFBbEMsS0FBdUVGLFFBQTlFO0FBQ0EsR0FGRDtBQUlBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOzs7QUFDTyxXQUFTSSwyQkFBVCxDQUNOQyxnQkFETSxFQUVOQyxlQUZNLEVBR2M7QUFBQTs7QUFDcEIsUUFBTUMsdUJBQXVCLEdBQUdDLDBCQUEwQixFQUExRDtBQUNBLFFBQU1DLFlBQVksNEJBQUdKLGdCQUFnQixDQUFDSyxhQUFqQixHQUFpQ0MsV0FBcEMsb0ZBQUcsc0JBQThDQyxFQUFqRCwyREFBRyx1QkFBa0RDLFlBQXZFO0FBQ0EsUUFBTUMsc0JBQXNCLEdBQUdMLFlBQVksR0FBR00saUJBQWlCLENBQUNOLFlBQUQsRUFBZUosZ0JBQWYsRUFBaUMsSUFBakMsQ0FBcEIsR0FBNkQsRUFBeEc7QUFDQSxRQUFNVyw0QkFBNEIsR0FBR0Msa0NBQWtDLENBQUNaLGdCQUFELENBQXZFO0FBQ0Es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LEtBQVA7QUFtQkEsR0ExQ00iLCJzb3VyY2VSb290IjoiLiIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB0eXBlIHsgRW50aXR5VHlwZSB9IGZyb20gXCJAc2FwLXV4L3ZvY2FidWxhcmllcy10eXBlc1wiO1xuaW1wb3J0IHR5cGUgeyBGYWNldFR5cGVzIH0gZnJvbSBcIkBzYXAtdXgvdm9jYWJ1bGFyaWVzLXR5cGVzL3ZvY2FidWxhcmllcy9VSVwiO1xuaW1wb3J0IHR5cGUgeyBCYXNlQWN0aW9uIH0gZnJvbSBcInNhcC9mZS9jb3JlL2NvbnZlcnRlcnMvY29udHJvbHMvQ29tbW9uL0FjdGlvblwiO1xuaW1wb3J0IHsgZ2V0QWN0aW9uc0Zyb21NYW5pZmVzdCwgcmVtb3ZlRHVwbGljYXRlQWN0aW9ucyB9IGZyb20gXCJzYXAvZmUvY29yZS9jb252ZXJ0ZXJzL2NvbnRyb2xzL0NvbW1vbi9BY3Rpb25cIjtcbmltcG9ydCB7XG5cdGdldEZvb3RlckRlZmF1bHRBY3Rpb25zLFxuXHRnZXRIZWFkZXJEZWZhdWx0QWN0aW9ucyxcblx0Z2V0SGlkZGVuSGVhZGVyQWN0aW9uc1xufSBmcm9tIFwic2FwL2ZlL2NvcmUvY29udmVydGVycy9vYmplY3RQYWdlL0hlYWRlckFuZEZvb3RlckFjdGlvblwiO1xuaW1wb3J0IHR5cGUgeyBCaW5kaW5nVG9vbGtpdEV4cHJlc3Npb24sIENvbXBpbGVkQmluZGluZ1Rvb2xraXRFeHByZXNzaW9uIH0gZnJvbSBcInNhcC9mZS9jb3JlL2hlbHBlcnMvQmluZGluZ1Rvb2xraXRcIjtcbmltcG9ydCB7IGNvbXBpbGVFeHByZXNzaW9uLCBjb25zdGFudCwgZXF1YWwsIGdldEV4cHJlc3Npb25Gcm9tQW5ub3RhdGlvbiwgaWZFbHNlLCBub3QgfSBmcm9tIFwic2FwL2ZlL2NvcmUvaGVscGVycy9CaW5kaW5nVG9vbGtpdFwiO1xuaW1wb3J0IHR5cGUgeyBBdmF0YXIgfSBmcm9tIFwiLi4vY29udHJvbHMvT2JqZWN0UGFnZS9BdmF0YXJcIjtcbmltcG9ydCB7IGdldEF2YXRhciB9IGZyb20gXCIuLi9jb250cm9scy9PYmplY3RQYWdlL0F2YXRhclwiO1xuaW1wb3J0IHR5cGUgeyBPYmplY3RQYWdlSGVhZGVyRmFjZXQgfSBmcm9tIFwiLi4vY29udHJvbHMvT2JqZWN0UGFnZS9IZWFkZXJGYWNldFwiO1xuaW1wb3J0IHsgZ2V0SGVhZGVyRmFjZXRzRnJvbUFubm90YXRpb25zLCBnZXRIZWFkZXJGYWNldHNGcm9tTWFuaWZlc3QgfSBmcm9tIFwiLi4vY29udHJvbHMvT2JqZWN0UGFnZS9IZWFkZXJGYWNldFwiO1xuaW1wb3J0IHR5cGUgeyBDdXN0b21PYmplY3RQYWdlU2VjdGlvbiwgRm9ybVN1YlNlY3Rpb24sIE9iamVjdFBhZ2VTZWN0aW9uLCBPYmplY3RQYWdlU3ViU2VjdGlvbiB9IGZyb20gXCIuLi9jb250cm9scy9PYmplY3RQYWdlL1N1YlNlY3Rpb25cIjtcbmltcG9ydCB7IGNyZWF0ZUN1c3RvbUhlYWRlckZhY2V0U3ViU2VjdGlvbnMsIGNyZWF0ZUN1c3RvbVN1YlNlY3Rpb25zLCBjcmVhdGVTdWJTZWN0aW9ucyB9IGZyb20gXCIuLi9jb250cm9scy9PYmplY3RQYWdlL1N1YlNlY3Rpb25cIjtcbmltcG9ydCB0eXBlIENvbnZlcnRlckNvbnRleHQgZnJvbSBcIi4uL0NvbnZlcnRlckNvbnRleHRcIjtcbmltcG9ydCB7IFVJIH0gZnJvbSBcIi4uL2hlbHBlcnMvQmluZGluZ0hlbHBlclwiO1xuaW1wb3J0IHR5cGUgeyBDb25maWd1cmFibGVSZWNvcmQsIFBvc2l0aW9uIH0gZnJvbSBcIi4uL2hlbHBlcnMvQ29uZmlndXJhYmxlT2JqZWN0XCI7XG5pbXBvcnQgeyBpbnNlcnRDdXN0b21FbGVtZW50cywgUGxhY2VtZW50IH0gZnJvbSBcIi4uL2hlbHBlcnMvQ29uZmlndXJhYmxlT2JqZWN0XCI7XG5pbXBvcnQgeyBnZXRDdXN0b21TZWN0aW9uSUQsIGdldEVkaXRhYmxlSGVhZGVyU2VjdGlvbklELCBnZXRTZWN0aW9uSUQgfSBmcm9tIFwiLi4vaGVscGVycy9JRFwiO1xuaW1wb3J0IHR5cGUgeyBNYW5pZmVzdFNlY3Rpb24sIE1hbmlmZXN0U3ViU2VjdGlvbiB9IGZyb20gXCIuLi9NYW5pZmVzdFNldHRpbmdzXCI7XG5pbXBvcnQgeyBUZW1wbGF0ZVR5cGUgfSBmcm9tIFwiLi4vTWFuaWZlc3RTZXR0aW5nc1wiO1xuaW1wb3J0IHR5cGUgeyBQYWdlRGVmaW5pdGlvbiB9IGZyb20gXCIuLi9UZW1wbGF0ZUNvbnZlcnRlclwiO1xuXG5leHBvcnQgdHlwZSBPYmplY3RQYWdlRGVmaW5pdGlvbiA9IFBhZ2VEZWZpbml0aW9uICYge1xuXHRoZWFkZXI6IHtcblx0XHR2aXNpYmxlOiBib29sZWFuO1xuXHRcdHNlY3Rpb24/OiBPYmplY3RQYWdlU2VjdGlvbjtcblx0XHRmYWNldHM6IE9iamVjdFBhZ2VIZWFkZXJGYWNldFtdO1xuXHRcdGFjdGlvbnM6IEJhc2VBY3Rpb25bXTtcblx0XHRzaG93Q29udGVudDogQ29tcGlsZWRCaW5kaW5nVG9vbGtpdEV4cHJlc3Npb247XG5cdFx0aGFzQ29udGVudDogYm9vbGVhbjtcblx0XHRhdmF0YXI/OiBBdmF0YXI7XG5cdFx0dGl0bGU6IHtcblx0XHRcdGV4cGFuZGVkSW1hZ2VWaXNpYmxlOiBDb21waWxlZEJpbmRpbmdUb29sa2l0RXhwcmVzc2lvbjtcblx0XHR9O1xuXHR9O1xuXHRzZWN0aW9uczogT2JqZWN0UGFnZVNlY3Rpb25bXTtcblx0Zm9vdGVyQWN0aW9uczogQmFzZUFjdGlvbltdO1xuXHRzaG93QW5jaG9yQmFyOiBib29sZWFuO1xuXHR1c2VJY29uVGFiQmFyOiBib29sZWFuO1xufTtcblxuY29uc3QgZ2V0U2VjdGlvbktleSA9IChmYWNldERlZmluaXRpb246IEZhY2V0VHlwZXMsIGZhbGxiYWNrOiBzdHJpbmcpOiBzdHJpbmcgPT4ge1xuXHRyZXR1cm4gZmFjZXREZWZpbml0aW9uLklEPy50b1N0cmluZygpIHx8IGZhY2V0RGVmaW5pdGlvbi5MYWJlbD8udG9TdHJpbmcoKSB8fCBmYWxsYmFjaztcbn07XG5cbi8qKlxuICogQ3JlYXRlcyBhIHNlY3Rpb24gdGhhdCByZXByZXNlbnRzIHRoZSBlZGl0YWJsZSBoZWFkZXIgcGFydDsgaXQgaXMgb25seSB2aXNpYmxlIGluIGVkaXQgbW9kZS5cbiAqXG4gKiBAcGFyYW0gY29udmVydGVyQ29udGV4dCBUaGUgY29udmVydGVyIGNvbnRleHRcbiAqIEBwYXJhbSBhbGxIZWFkZXJGYWNldHMgVGhlIGNvbnZlcnRlciBjb250ZXh0XG4gKiBAcmV0dXJucyBUaGUgc2VjdGlvbiByZXByZXNlbnRpbmcgdGhlIGVkaXRhYmxlIGhlYWRlciBwYXJ0c1xuICovXG5leHBvcnQgZnVuY3Rpb24gY3JlYXRlRWRpdGFibGVIZWFkZXJTZWN0aW9uKFxuXHRjb252ZXJ0ZXJDb250ZXh0OiBDb252ZXJ0ZXJDb250ZXh0LFxuXHRhbGxIZWFkZXJGYWNldHM6IE9iamVjdFBhZ2VIZWFkZXJGYWNldFtdXG4pOiBPYmplY3RQYWdlU2VjdGlvbiB7XG5cdGNvbnN0IGVkaXRhYmxlSGVhZGVyU2VjdGlvbklEID0gZ2V0RWRpdGFibGVIZWFkZXJTZWN0aW9uSUQoKTtcblx0Y29uc3QgaGVhZGVyRmFjZXRzID0gY29udmVydGVyQ29udGV4dC5nZXRFbnRpdHlUeXBlKCkuYW5ub3RhdGlvbnM/LlVJPy5IZWFkZXJGYWNldHM7XG5cdGNvbnN0IGhlYWRlcmZhY2V0U3ViU2VjdGlvbnMgPSBoZWFkZXJGYWNldHMgPyBjcmVhdGVTdWJTZWN0aW9ucyhoZWFkZXJGYWNldHMsIGNvbnZlcnRlckNvbnRleHQsIHRydWUpIDogW107XG5cdGNvbnN0IGN1c3RvbUhlYWRlckZhY2V0U3ViU2VjdGlvbnMgPSBjcmVhdGVDdXN0b21IZWFkZXJGYWNldFN1YlNlY3Rpb25zKGNvbnZlcnRlckNvbnRleHQpO1xuXHRsZXQgYWxsSGVhZGVyRmFjZXRzU3ViU2VjdGlvbnM6IE9iamVjdFBhZ2VTdWJTZWN0aW9uW10gPSBbXTtcblx0aWYgKGN1c3RvbUhlYWRlckZhY2V0U3ViU2VjdGlvbnMubGVuZ3RoID4gMCkge1xuXHRcdC8vIG1lcmdlIGFubm90YXRpb24gYmFzZWQgaGVhZGVyIGZhY2V0cyBhbmQgY3VzdG9tIGhlYWRlciBmYWNldHMgaW4gdGhlIHJpZ2h0IG9yZGVyXG5cdFx0bGV0IGkgPSAwO1xuXHRcdGFsbEhlYWRlckZhY2V0cy5mb3JFYWNoKGZ1bmN0aW9uIChpdGVtKSB7XG5cdFx0XHQvLyBoaWRkZW4gaGVhZGVyIGZhY2V0cyBhcmUgbm90IGluY2x1ZGVkIGluIGFsbEhlYWRlckZhY2V0cyBhcnJheSA9PiBhZGQgdGhlbSBhbnl3YXlcblx0XHRcdHdoaWxlIChoZWFkZXJmYWNldFN1YlNlY3Rpb25zLmxlbmd0aCA+IGkgJiYgaGVhZGVyZmFjZXRTdWJTZWN0aW9uc1tpXS52aXNpYmxlID09PSBcImZhbHNlXCIpIHtcblx0XHRcdFx0YWxsSGVhZGVyRmFjZXRzU3ViU2VjdGlvbnMucHVzaChoZWFkZXJmYWNldFN1YlNlY3Rpb25zW2ldKTtcblx0XHRcdFx0aSsrO1xuXHRcdFx0fVxuXHRcdFx0aWYgKFxuXHRcdFx0XHRoZWFkZXJmYWNldFN1YlNlY3Rpb25zLmxlbmd0aCA+IGkgJiZcblx0XHRcdFx0KGl0ZW0ua2V5ID09PSBoZWFkZXJmYWNldFN1YlNlY3Rpb25zW2ldLmtleSB8fFxuXHRcdFx0XHRcdC8vIGZvciBoZWFkZXIgZmFjZXRzIHdpdGggbm8gaWQgdGhlIGtleXMgb2YgaGVhZGVyIGZhY2V0IGFuZCBzdWJzZWN0aW9uIGFyZSBkaWZmZXJlbnQgPT4gY2hlY2sgb25seSB0aGUgbGFzdCBwYXJ0XG5cdFx0XHRcdFx0aXRlbS5rZXkuc2xpY2UoaXRlbS5rZXkubGFzdEluZGV4T2YoXCI6OlwiKSArIDIpID09PVxuXHRcdFx0XHRcdFx0aGVhZGVyZmFjZXRTdWJTZWN0aW9uc1tpXS5rZXkuc2xpY2UoaGVhZGVyZmFjZXRTdWJTZWN0aW9uc1tpXS5rZXkubGFzdEluZGV4T2YoXCI6OlwiKSArIDIpKVxuXHRcdFx0KSB7XG5cdFx0XHRcdGFsbEhlYWRlckZhY2V0c1N1YlNlY3Rpb25zLnB1c2goaGVhZGVyZmFjZXRTdWJTZWN0aW9uc1tpXSk7XG5cdFx0XHRcdGkrKztcblx0XHRcdH0gZWxzZSB7XG5cdFx0XHRcdGN1c3RvbUhlYWRlckZhY2V0U3ViU2VjdGlvbnMuZm9yRWFjaChmdW5jdGlvbiAoY3VzdG9tSXRlbSkge1xuXHRcdFx0XHRcdGlmIChpdGVtLmtleSA9PT0gY3VzdG9tSXRlbS5rZXkpIHtcblx0XHRcdFx0XHRcdGFsbEhlYWRlckZhY2V0c1N1YlNlY3Rpb25zLnB1c2goY3VzdG9tSXRlbSk7XG5cdFx0XHRcdFx0fVxuXHRcdFx0XHR9KTtcblx0XHRcdH1cblx0XHR9KTtcblx0fSBlbHNlIHtcblx0XHRhbGxIZWFkZXJGYWNldHNTdWJTZWN0aW9ucyA9IGhlYWRlcmZhY2V0U3ViU2VjdGlvbnM7XG5cdH1cblx0Y29uc3QgaGVhZGVyU2VjdGlvbjogT2JqZWN0UGFnZVNlY3Rpb24gPSB7XG5cdFx0aWQ6IGVkaXRhYmxlSGVhZGVyU2VjdGlvbklELFxuXHRcdGtleTogXCJFZGl0YWJsZUhlYWRlckNvbnRlbnRcIixcblx0XHR0aXRsZTogXCJ7c2FwLmZlLmkxOG4+VF9DT01NT05fT0JKRUNUX1BBR0VfSEVBREVSX1NFQ1RJT059XCIsXG5cdFx0dmlzaWJsZTogY29tcGlsZUV4cHJlc3Npb24oVUkuSXNFZGl0YWJsZSksXG5cdFx0c3ViU2VjdGlvbnM6IGFsbEhlYWRlckZhY2V0c1N1YlNlY3Rpb25zXG5cdH07XG5cdHJldHVybiBoZWFkZXJTZWN0aW9uO1xufVxuXG4vKipcbiAqIENyZWF0ZXMgYSBkZWZpbml0aW9uIGZvciBhIHNlY3Rpb24gYmFzZWQgb24gdGhlIEZhY2V0IGFubm90YXRpb24uXG4gKlxuICogQHBhcmFtIGNvbnZlcnRlckNvbnRleHQgVGhlIGNvbnZlcnRlciBjb250ZXh0XG4gKiBAcmV0dXJucyBBbGwgc2VjdGlvbnNcbiAqL1xuZnVuY3Rpb24gZ2V0U2VjdGlvbnNGcm9tQW5ub3RhdGlvbihjb252ZXJ0ZXJDb250ZXh0OiBDb252ZXJ0ZXJDb250ZXh0KTogT2JqZWN0UGFnZVNlY3Rpb25bXSB7XG5cdGNvbnN0IGVudGl0eVR5cGUgPSBjb252ZXJ0ZXJDb250ZXh0LmdldEVudGl0eVR5cGUoKTtcblx0Y29uc3Qgb2JqZWN0UGFnZVNlY3Rpb25zOiBPYmplY3RQYWdlU2VjdGlvbltdID1cblx0XHRlbnRpdHlUeXBlLmFubm90YXRpb25zPy5VST8uRmFjZXRzPy5tYXAoKGZhY2V0RGVmaW5pdGlvbjogRmFjZXRUeXBlcykgPT5cblx0XHRcdGdldFNlY3Rpb25Gcm9tQW5ub3RhdGlvbihmYWNldERlZmluaXRpb24sIGNvbnZlcnRlckNvbnRleHQpXG5cdFx0KSB8fCBbXTtcblx0cmV0dXJuIG9iamVjdFBhZ2VTZWN0aW9ucztcbn1cblxuLyoqXG4gKiBDcmVhdGUgYW4gYW5ub3RhdGlvbiBiYXNlZCBzZWN0aW9uLlxuICpcbiAqIEBwYXJhbSBmYWNldFxuICogQHBhcmFtIGNvbnZlcnRlckNvbnRleHRcbiAqIEByZXR1cm5zIFRoZSBjdXJyZW50IHNlY3Rpb25cbiAqL1xuZnVuY3Rpb24gZ2V0U2VjdGlvbkZyb21Bbm5vdGF0aW9uKGZhY2V0OiBGYWNldFR5cGVzLCBjb252ZXJ0ZXJDb250ZXh0OiBDb252ZXJ0ZXJDb250ZXh0KTogT2JqZWN0UGFnZVNlY3Rpb24ge1xuXHRjb25zdCBzZWN0aW9uSUQgPSBnZXRTZWN0aW9uSUQoeyBGYWNldDogZmFjZXQgfSk7XG5cdGNvbnN0IHNlY3Rpb246IE9iamVjdFBhZ2VTZWN0aW9uID0ge1xuXHRcdGlkOiBzZWN0aW9uSUQsXG5cdFx0a2V5OiBnZXRTZWN0aW9uS2V5KGZhY2V0LCBzZWN0aW9uSUQpLFxuXHRcdHRpdGxlOiBjb21waWxlRXhwcmVzc2lvbihnZXRFeHByZXNzaW9uRnJvbUFubm90YXRpb24oZmFjZXQuTGFiZWwpKSxcblx0XHRzaG93VGl0bGU6ICEhZmFjZXQuTGFiZWwsXG5cdFx0dmlzaWJsZTogY29tcGlsZUV4cHJlc3Npb24obm90KGVxdWFsKGdldEV4cHJlc3Npb25Gcm9tQW5ub3RhdGlvbihmYWNldC5hbm5vdGF0aW9ucz8uVUk/LkhpZGRlbj8udmFsdWVPZigpKSwgdHJ1ZSkpKSxcblx0XHRzdWJTZWN0aW9uczogY3JlYXRlU3ViU2VjdGlvbnMoW2ZhY2V0XSwgY29udmVydGVyQ29udGV4dClcblx0fTtcblx0cmV0dXJuIHNlY3Rpb247XG59XG5cbi8qKlxuICogQ3JlYXRlcyBzZWN0aW9uIGRlZmluaXRpb25zIGJhc2VkIG9uIHRoZSBtYW5pZmVzdCBkZWZpbml0aW9ucy5cbiAqXG4gKiBAcGFyYW0gbWFuaWZlc3RTZWN0aW9ucyBUaGUgc2VjdGlvbnMgZGVmaW5lZCBpbiB0aGUgbWFuaWZlc3RcbiAqIEBwYXJhbSBjb252ZXJ0ZXJDb250ZXh0XG4gKiBAcmV0dXJucyBUaGUgc2VjdGlvbnMgZGVmaW5lZCBpbiB0aGUgbWFuaWZlc3RcbiAqL1xuZnVuY3Rpb24gZ2V0U2VjdGlvbnNGcm9tTWFuaWZlc3QoXG5cdG1hbmlmZXN0U2VjdGlvbnM6IENvbmZpZ3VyYWJsZVJlY29yZDxNYW5pZmVzdFNlY3Rpb24+LFxuXHRjb252ZXJ0ZXJDb250ZXh0OiBDb252ZXJ0ZXJDb250ZXh0XG4pOiBSZWNvcmQ8c3RyaW5nLCBDdXN0b21PYmplY3RQYWdlU2VjdGlvbj4ge1xuXHRjb25zdCBzZWN0aW9uczogUmVjb3JkPHN0cmluZywgQ3VzdG9tT2JqZWN0UGFnZVNlY3Rpb24+ID0ge307XG5cdE9iamVjdC5rZXlzKG1hbmlmZXN0U2VjdGlvbnMpLmZvckVhY2goKG1hbmlmZXN0U2VjdGlvbktleSkgPT4ge1xuXHRcdHNlY3Rpb25zW21hbmlmZXN0U2VjdGlvbktleV0gPSBnZXRTZWN0aW9uRnJvbU1hbmlmZXN0KG1hbmlmZXN0U2VjdGlvbnNbbWFuaWZlc3RTZWN0aW9uS2V5XSwgbWFuaWZlc3RTZWN0aW9uS2V5LCBjb252ZXJ0ZXJDb250ZXh0KTtcblx0fSk7XG5cdHJldHVybiBzZWN0aW9ucztcbn1cblxuLyoqXG4gKiBDcmVhdGUgYSBtYW5pZmVzdC1iYXNlZCBjdXN0b20gc2VjdGlvbi5cbiAqXG4gKiBAcGFyYW0gY3VzdG9tU2VjdGlvbkRlZmluaXRpb25cbiAqIEBwYXJhbSBzZWN0aW9uS2V5XG4gKiBAcGFyYW0gY29udmVydGVyQ29udGV4dFxuICogQHJldHVybnMgVGhlIGN1cnJlbnQgY3VzdG9tIHNlY3Rpb25cbiAqL1xuZnVuY3Rpb24gZ2V0U2VjdGlvbkZyb21NYW5pZmVzdChcblx0Y3VzdG9tU2VjdGlvbkRlZmluaXRpb246IE1hbmlmZXN0U2VjdGlvbixcblx0c2VjdGlvbktleTogc3RyaW5nLFxuXHRjb252ZXJ0ZXJDb250ZXh0OiBDb252ZXJ0ZXJDb250ZXh0XG4pOiBDdXN0b21PYmplY3RQYWdlU2VjdGlvbiB7XG5cdGNvbnN0IGN1c3RvbVNlY3Rpb25JRCA9IGN1c3RvbVNlY3Rpb25EZWZpbml0aW9uLmlkIHx8IGdldEN1c3RvbVNlY3Rpb25JRChzZWN0aW9uS2V5KTtcblx0bGV0IHBvc2l0aW9uOiBQb3NpdGlvbiB8IHVuZGVmaW5lZCA9IGN1c3RvbVNlY3Rpb25EZWZpbml0aW9uLnBvc2l0aW9uO1xuXHRpZiAoIXBvc2l0aW9uKSB7XG5cdFx0cG9zaXRpb24gPSB7XG5cdFx0XHRwbGFjZW1lbnQ6IFBsYWNlbWVudC5BZnRlclxuXHRcdH07XG5cdH1cblx0bGV0IG1hbmlmZXN0U3ViU2VjdGlvbnM6IFJlY29yZDxzdHJpbmcsIE1hbmlmZXN0U3ViU2VjdGlvbj47XG5cdGlmICghY3VzdG9tU2VjdGlvbkRlZmluaXRpb24uc3ViU2VjdGlvbnMpIHtcblx0XHQvLyBJZiB0aGVyZSBpcyBubyBzdWJTZWN0aW9uIGRlZmluZWQsIHdlIGFkZCB0aGUgY29udGVudCBvZiB0aGUgY3VzdG9tIHNlY3Rpb24gYXMgc3Vic2VjdGlvbnNcblx0XHQvLyBhbmQgbWFrZSBzdXJlIHRvIHNldCB0aGUgdmlzaWJpbGl0eSB0byAndHJ1ZScsIGFzIHRoZSBhY3R1YWwgdmlzaWJpbGl0eSBpcyBoYW5kbGVkIGJ5IHRoZSBzZWN0aW9uIGl0c2VsZlxuXHRcdG1hbmlmZXN0U3ViU2VjdGlvbnMgPSB7XG5cdFx0XHRbc2VjdGlvbktleV06IHtcblx0XHRcdFx0Li4uY3VzdG9tU2VjdGlvbkRlZmluaXRpb24sXG5cdFx0XHRcdHBvc2l0aW9uOiB1bmRlZmluZWQsXG5cdFx0XHRcdHZpc2libGU6IFwidHJ1ZVwiXG5cdFx0XHR9XG5cdFx0fTtcblx0fSBlbHNlIHtcblx0XHRtYW5pZmVzdFN1YlNlY3Rpb25zID0gY3VzdG9tU2VjdGlvbkRlZmluaXRpb24uc3ViU2VjdGlvbnM7XG5cdH1cblx0Y29uc3Qgc3ViU2VjdGlvbnMgPSBjcmVhdGVDdXN0b21TdWJTZWN0aW9ucyhtYW5pZmVzdFN1YlNlY3Rpb25zLCBjb252ZXJ0ZXJDb250ZXh0KTtcblxuXHRjb25zdCBjdXN0b21TZWN0aW9uOiBDdXN0b21PYmplY3RQYWdlU2VjdGlvbiA9IHtcblx0XHRpZDogY3VzdG9tU2VjdGlvbklELFxuXHRcdGtleTogc2VjdGlvbktleSxcblx0XHR0aXRsZTogY3VzdG9tU2VjdGlvbkRlZmluaXRpb24udGl0bGUsXG5cdFx0c2hvd1RpdGxlOiAhIWN1c3RvbVNlY3Rpb25EZWZpbml0aW9uLnRpdGxlLFxuXHRcdHZpc2libGU6IGN1c3RvbVNlY3Rpb25EZWZpbml0aW9uLnZpc2libGUgIT09IHVuZGVmaW5lZCA/IGN1c3RvbVNlY3Rpb25EZWZpbml0aW9uLnZpc2libGUgOiBcInRydWVcIixcblx0XHRwb3NpdGlvbjogcG9zaXRpb24sXG5cdFx0c3ViU2VjdGlvbnM6IHN1YlNlY3Rpb25zIGFzIGFueVxuXHR9O1xuXHRyZXR1cm4gY3VzdG9tU2VjdGlvbjtcbn1cblxuLyoqXG4gKiBSZXRyaWV2ZXMgdGhlIE9iamVjdFBhZ2UgaGVhZGVyIGFjdGlvbnMgKGJvdGggdGhlIGRlZmF1bHQgb25lcyBhbmQgdGhlIGN1c3RvbSBvbmVzIGRlZmluZWQgaW4gdGhlIG1hbmlmZXN0KS5cbiAqXG4gKiBAcGFyYW0gY29udmVydGVyQ29udGV4dCBUaGUgY29udmVydGVyIGNvbnRleHRcbiAqIEByZXR1cm5zIEFuIGFycmF5IGNvbnRhaW5pbmcgYWxsIHRoZSBhY3Rpb25zIGZvciB0aGlzIE9iamVjdFBhZ2UgaGVhZGVyXG4gKi9cbmV4cG9ydCBjb25zdCBnZXRIZWFkZXJBY3Rpb25zID0gZnVuY3Rpb24gKGNvbnZlcnRlckNvbnRleHQ6IENvbnZlcnRlckNvbnRleHQpOiBCYXNlQWN0aW9uW10ge1xuXHRjb25zdCBhQW5ub3RhdGlvbkhlYWRlckFjdGlvbnM6IEJhc2VBY3Rpb25bXSA9IGdldEhlYWRlckRlZmF1bHRBY3Rpb25zKGNvbnZlcnRlckNvbnRleHQpO1xuXHRjb25zdCBtYW5pZmVzdFdyYXBwZXIgPSBjb252ZXJ0ZXJDb250ZXh0LmdldE1hbmlmZXN0V3JhcHBlcigpO1xuXHRjb25zdCBoZWFkZXJBY3Rpb25zID0gaW5zZXJ0Q3VzdG9tRWxlbWVudHMoXG5cdFx0YUFubm90YXRpb25IZWFkZXJBY3Rpb25zLFxuXHRcdGdldEFjdGlvbnNGcm9tTWFuaWZlc3QoXG5cdFx0XHRtYW5pZmVzdFdyYXBwZXIuZ2V0SGVhZGVyQWN0aW9ucygpLFxuXHRcdFx0Y29udmVydGVyQ29udGV4dCxcblx0XHRcdGFBbm5vdGF0aW9uSGVhZGVyQWN0aW9ucyxcblx0XHRcdHVuZGVmaW5lZCxcblx0XHRcdHVuZGVmaW5lZCxcblx0XHRcdGdldEhpZGRlbkhlYWRlckFjdGlvbnMoY29udmVydGVyQ29udGV4dClcblx0XHQpLFxuXHRcdHsgaXNOYXZpZ2FibGU6IFwib3ZlcndyaXRlXCIsIGVuYWJsZWQ6IFwib3ZlcndyaXRlXCIsIGRlZmF1bHRWYWx1ZXNFeHRlbnNpb25GdW5jdGlvbjogXCJvdmVyd3JpdGVcIiwgY29tbWFuZDogXCJvdmVyd3JpdGVcIiB9XG5cdCk7XG5cdHJldHVybiByZW1vdmVEdXBsaWNhdGVBY3Rpb25zKGhlYWRlckFjdGlvbnMpO1xufTtcblxuLyoqXG4gKiBSZXRyaWV2ZXMgdGhlIE9iamVjdFBhZ2UgZm9vdGVyIGFjdGlvbnMgKGJvdGggdGhlIGRlZmF1bHQgb25lcyBhbmQgdGhlIGN1c3RvbSBvbmVzIGRlZmluZWQgaW4gdGhlIG1hbmlmZXN0KS5cbiAqXG4gKiBAcGFyYW0gY29udmVydGVyQ29udGV4dCBUaGUgY29udmVydGVyIGNvbnRleHRcbiAqIEByZXR1cm5zIEFuIGFycmF5IGNvbnRhaW5pbmcgYWxsIHRoZSBhY3Rpb25zIGZvciB0aGlzIE9iamVjdFBhZ2UgZm9vdGVyXG4gKi9cbmV4cG9ydCBjb25zdCBnZXRGb290ZXJBY3Rpb25zID0gZnVuY3Rpb24gKGNvbnZlcnRlckNvbnRleHQ6IENvbnZlcnRlckNvbnRleHQpOiBCYXNlQWN0aW9uW10ge1xuXHRjb25zdCBtYW5pZmVzdFdyYXBwZXIgPSBjb252ZXJ0ZXJDb250ZXh0LmdldE1hbmlmZXN0V3JhcHBlcigpO1xuXHRjb25zdCBhQW5ub3RhdGlvbkZvb3RlckFjdGlvbnM6IEJhc2VBY3Rpb25bXSA9IGdldEZvb3RlckRlZmF1bHRBY3Rpb25zKG1hbmlmZXN0V3JhcHBlci5nZXRWaWV3TGV2ZWwoKSwgY29udmVydGVyQ29udGV4dCk7XG5cdHJldHVybiBpbnNlcnRDdXN0b21FbGVtZW50cyhcblx0XHRhQW5ub3RhdGlvbkZvb3RlckFjdGlvbnMsXG5cdFx0Z2V0QWN0aW9uc0Zyb21NYW5pZmVzdChtYW5pZmVzdFdyYXBwZXIuZ2V0Rm9vdGVyQWN0aW9ucygpLCBjb252ZXJ0ZXJDb250ZXh0LCBhQW5ub3RhdGlvbkZvb3RlckFjdGlvbnMpLFxuXHRcdHsgaXNOYXZpZ2FibGU6IFwib3ZlcndyaXRlXCIsIGVuYWJsZWQ6IFwib3ZlcndyaXRlXCIsIGRlZmF1bHRWYWx1ZXNFeHRlbnNpb25GdW5jdGlvbjogXCJvdmVyd3JpdGVcIiwgY29tbWFuZDogXCJvdmVyd3JpdGVcIiB9XG5cdCk7XG59O1xuXG4vKipcbiAqIFJldHJpZXZlcyBhbmQgbWVyZ2VzIHRoZSBPYmplY3RQYWdlIHNlY3Rpb25zIGRlZmluZWQgaW4gdGhlIGFubm90YXRpb24gYW5kIGluIHRoZSBtYW5pZmVzdC5cbiAqXG4gKiBAcGFyYW0gY29udmVydGVyQ29udGV4dCBUaGUgY29udmVydGVyIGNvbnRleHRcbiAqIEByZXR1cm5zIEFuIGFycmF5IG9mIHNlY3Rpb25zLlxuICovXG5leHBvcnQgY29uc3QgZ2V0U2VjdGlvbnMgPSBmdW5jdGlvbiAoY29udmVydGVyQ29udGV4dDogQ29udmVydGVyQ29udGV4dCk6IE9iamVjdFBhZ2VTZWN0aW9uW10ge1xuXHRjb25zdCBtYW5pZmVzdFdyYXBwZXIgPSBjb252ZXJ0ZXJDb250ZXh0LmdldE1hbmlmZXN0V3JhcHBlcigpO1xuXHRjb25zdCBzZWN0aW9ucyA9IGluc2VydEN1c3RvbUVsZW1lbnRzKFxuXHRcdGdldFNlY3Rpb25zRnJvbUFubm90YXRpb24oY29udmVydGVyQ29udGV4dCksXG5cdFx0Z2V0U2VjdGlvbnNGcm9tTWFuaWZlc3QobWFuaWZlc3RXcmFwcGVyLmdldFNlY3Rpb25zKCksIGNvbnZlcnRlckNvbnRleHQpLFxuXHRcdHtcblx0XHRcdFwidGl0bGVcIjogXCJvdmVyd3JpdGVcIixcblx0XHRcdFwidmlzaWJsZVwiOiBcIm92ZXJ3cml0ZVwiLFxuXHRcdFx0XCJzdWJTZWN0aW9uc1wiOiB7XG5cdFx0XHRcdFwiYWN0aW9uc1wiOiBcIm1lcmdlXCIsXG5cdFx0XHRcdFwidGl0bGVcIjogXCJvdmVyd3JpdGVcIixcblx0XHRcdFx0XCJzaWRlQ29udGVudFwiOiBcIm92ZXJ3cml0ZVwiXG5cdFx0XHR9XG5cdFx0fVxuXHQpO1xuXHQvLyBMZXZlbCBBZGp1c3RtZW50IGZvciBcIk1peGVkXCIgQ29sbGVjdGlvbiBGYWNldHM6XG5cdC8vID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT1cblx0Ly8gVGhlIG1hbmlmZXN0IGRlZmluaXRpb24gb2YgY3VzdG9tIHNpZGUgY29udGVudHMgYW5kIGFjdGlvbnMgc3RpbGwgbmVlZHMgdG8gYmUgYWxpZ25lZCBmb3IgXCJNaXhlZFwiIGNvbGxlY3Rpb24gZmFjZXRzOlxuXHQvLyBDb2xsZWN0aW9uIGZhY2V0cyBjb250YWluaW5nIHRhYmxlcyBnYWluIGFuIGV4dHJhIHJlZmVyZW5jZSBmYWNldCBhcyBhIHRhYmxlIHdyYXBwZXIgdG8gZW5zdXJlLCB0aGF0IHRoZSB0YWJsZSBpcyBhbHdheXNcblx0Ly8gcGxhY2VkIGluIGFuIG93biBpbmRpdmlkdWFsIE9iamVjdCBQYWdlIEJsb2NrOyB0aGlzIGFkZGl0aW9uYWwgaGllcmFyY2h5IGxldmVsIGlzIHVua25vd24gdG8gYXBwIGRldmVsb3BlcnMsIHdoaWNoIGFyZVxuXHQvLyBkZWZpbmluZyB0aGUgc2lkZSBjb250ZW50IGFuZCBhY3Rpb25zIGluIHRoZSBtYW5pZmVzdCBhdCBjb2xsZWN0aW9uIGZhY2V0IGxldmVsOyBub3csIHNpbmNlIHRoZSBzaWRlQ29udGVudCBhbHdheXMgbmVlZHNcblx0Ly8gdG8gYmUgYXNzaWduZWQgdG8gYSBibG9jaywgd2UgbmVlZCB0byBtb3ZlIHRoZSBzaWRlQ29udGVudCBvZiBmcm9tIGEgbWl4ZWQgY29sbGVjdGlvbiBmYWNldCB0byBpdHMgZmlyc3QgY2hpbGQgcmVmZXJlbmNlIGZhY2V0LlxuXHQvLyA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XG5cdHNlY3Rpb25zLmZvckVhY2goZnVuY3Rpb24gKHNlY3Rpb24pIHtcblx0XHRzZWN0aW9uLnN1YlNlY3Rpb25zPy5mb3JFYWNoKGZ1bmN0aW9uIChzdWJTZWN0aW9uKSB7XG5cdFx0XHRpZiAoc3ViU2VjdGlvbi50eXBlID09PSBcIk1peGVkXCIgJiYgc3ViU2VjdGlvbi5zaWRlQ29udGVudCAhPSB1bmRlZmluZWQgJiYgc3ViU2VjdGlvbi5jb250ZW50ICYmIHN1YlNlY3Rpb24uY29udGVudC5sZW5ndGggPiAwKSB7XG5cdFx0XHRcdC8vIDEuIENvcHkgc2lkZUNvbnRlbnQgLyBhY3Rpb25zIHRvIHRoZSBTdWJTZWN0aW9uJ3MgY29udGVudFxuXHRcdFx0XHQvLyAyLiBEZWxldGUgc2lkZUNvbnRlbnQgLyBhY3Rpb25zIGF0IHRoZSAoaW52YWxpZCkgbWFuaWZlc3QgbGV2ZWxcblx0XHRcdFx0aWYgKChzdWJTZWN0aW9uIGFzIEZvcm1TdWJTZWN0aW9uKS5zaWRlQ29udGVudCkge1xuXHRcdFx0XHRcdHN1YlNlY3Rpb24uY29udGVudFswXS5zaWRlQ29udGVudCA9IHN1YlNlY3Rpb24uc2lkZUNvbnRlbnQ7XG5cdFx0XHRcdFx0c3ViU2VjdGlvbi5zaWRlQ29udGVudCA9IHVuZGVmaW5lZDtcblx0XHRcdFx0fVxuXHRcdFx0XHRpZiAoKHN1YlNlY3Rpb24gYXMgRm9ybVN1YlNlY3Rpb24pLmFjdGlvbnMubGVuZ3RoID4gMCkge1xuXHRcdFx0XHRcdChzdWJTZWN0aW9uLmNvbnRlbnRbMF0gYXMgRm9ybVN1YlNlY3Rpb24pLmFjdGlvbnMgPSAoc3ViU2VjdGlvbiBhcyBGb3JtU3ViU2VjdGlvbikuYWN0aW9ucztcblx0XHRcdFx0XHQoc3ViU2VjdGlvbiBhcyBGb3JtU3ViU2VjdGlvbikuYWN0aW9ucyA9IFtdO1xuXHRcdFx0XHR9XG5cdFx0XHR9XG5cdFx0fSk7XG5cdH0pO1xuXHRyZXR1cm4gc2VjdGlvbnM7XG59O1xuXG4vKipcbiAqIERldGVybWluZXMgaWYgdGhlIE9iamVjdFBhZ2UgaGFzIGhlYWRlciBjb250ZW50LlxuICpcbiAqIEBwYXJhbSBjb252ZXJ0ZXJDb250ZXh0IFRoZSBpbnN0YW5jZSBvZiB0aGUgY29udmVydGVyIGNvbnRleHRcbiAqIEByZXR1cm5zIGB0cnVlYCBpZiB0aGVyZSBpcyBhdCBsZWFzdCBvbiBoZWFkZXIgZmFjZXRcbiAqL1xuZnVuY3Rpb24gaGFzSGVhZGVyQ29udGVudChjb252ZXJ0ZXJDb250ZXh0OiBDb252ZXJ0ZXJDb250ZXh0KTogYm9vbGVhbiB7XG5cdGNvbnN0IG1hbmlmZXN0V3JhcHBlciA9IGNvbnZlcnRlckNvbnRleHQuZ2V0TWFuaWZlc3RXcmFwcGVyKCk7XG5cdHJldHVybiAoXG5cdFx0KGNvbnZlcnRlckNvbnRleHQuZ2V0RW50aXR5VHlwZSgpLmFubm90YXRpb25zPy5VST8uSGVhZGVyRmFjZXRzIHx8IFtdKS5sZW5ndGggPiAwIHx8XG5cdFx0T2JqZWN0LmtleXMobWFuaWZlc3RXcmFwcGVyLmdldEhlYWRlckZhY2V0cygpKS5sZW5ndGggPiAwXG5cdCk7XG59XG5cbi8qKlxuICogR2V0cyB0aGUgZXhwcmVzc2lvbiB0byBldmFsdWF0ZSB0aGUgdmlzaWJpbGl0eSBvZiB0aGUgaGVhZGVyIGNvbnRlbnQuXG4gKlxuICogQHBhcmFtIGNvbnZlcnRlckNvbnRleHQgVGhlIGluc3RhbmNlIG9mIHRoZSBjb252ZXJ0ZXIgY29udGV4dFxuICogQHJldHVybnMgVGhlIGJpbmRpbmcgZXhwcmVzc2lvbiBmb3IgdGhlIERlbGV0ZSBidXR0b25cbiAqL1xuZnVuY3Rpb24gZ2V0U2hvd0hlYWRlckNvbnRlbnRFeHByZXNzaW9uKGNvbnZlcnRlckNvbnRleHQ6IENvbnZlcnRlckNvbnRleHQpOiBCaW5kaW5nVG9vbGtpdEV4cHJlc3Npb248YW55PiB7XG5cdGNvbnN0IG1hbmlmZXN0V3JhcHBlciA9IGNvbnZlcnRlckNvbnRleHQuZ2V0TWFuaWZlc3RXcmFwcGVyKCk7XG5cdHJldHVybiBpZkVsc2UoXG5cdFx0IWhhc0hlYWRlckNvbnRlbnQoY29udmVydGVyQ29udGV4dCksXG5cdFx0Y29uc3RhbnQoZmFsc2UpLFxuXHRcdGlmRWxzZShlcXVhbChtYW5pZmVzdFdyYXBwZXIuaXNIZWFkZXJFZGl0YWJsZSgpLCBmYWxzZSksIGNvbnN0YW50KHRydWUpLCBub3QoVUkuSXNFZGl0YWJsZSkpXG5cdCk7XG59XG5cbi8qKlxuICogR2V0cyB0aGUgYmluZGluZyBleHByZXNzaW9uIHRvIGV2YWx1YXRlIHRoZSB2aXNpYmlsaXR5IG9mIHRoZSBoZWFkZXIgY29udGVudC5cbiAqXG4gKiBAcGFyYW0gY29udmVydGVyQ29udGV4dCBUaGUgaW5zdGFuY2Ugb2YgdGhlIGNvbnZlcnRlciBjb250ZXh0XG4gKiBAcmV0dXJucyBUaGUgYmluZGluZyBleHByZXNzaW9uIGZvciB0aGUgRGVsZXRlIGJ1dHRvblxuICovXG5leHBvcnQgY29uc3QgZ2V0U2hvd0hlYWRlckNvbnRlbnQgPSBmdW5jdGlvbiAoY29udmVydGVyQ29udGV4dDogQ29udmVydGVyQ29udGV4dCk6IENvbXBpbGVkQmluZGluZ1Rvb2xraXRFeHByZXNzaW9uIHtcblx0cmV0dXJuIGNvbXBpbGVFeHByZXNzaW9uKGdldFNob3dIZWFkZXJDb250ZW50RXhwcmVzc2lvbihjb252ZXJ0ZXJDb250ZXh0KSk7XG59O1xuXG4vKipcbiAqIEdldHMgdGhlIGJpbmRpbmcgZXhwcmVzc2lvbiB0byBldmFsdWF0ZSB0aGUgdmlzaWJpbGl0eSBvZiB0aGUgYXZhdGFyIHdoZW4gdGhlIGhlYWRlciBpcyBpbiBleHBhbmRlZCBzdGF0ZS5cbiAqXG4gKiBAcGFyYW0gY29udmVydGVyQ29udGV4dCBUaGUgaW5zdGFuY2Ugb2YgdGhlIGNvbnZlcnRlciBjb250ZXh0XG4gKiBAcmV0dXJucyBUaGUgYmluZGluZyBleHByZXNzaW9uIGZvciB0aGUgRGVsZXRlIGJ1dHRvblxuICovXG5leHBvcnQgY29uc3QgZ2V0RXhwYW5kZWRJbWFnZVZpc2libGUgPSBmdW5jdGlvbiAoY29udmVydGVyQ29udGV4dDogQ29udmVydGVyQ29udGV4dCk6IENvbXBpbGVkQmluZGluZ1Rvb2xraXRFeHByZXNzaW9uIHtcblx0cmV0dXJuIGNvbXBpbGVFeHByZXNzaW9uKG5vdChnZXRTaG93SGVhZGVyQ29udGVudEV4cHJlc3Npb24oY29udmVydGVyQ29udGV4dCkpKTtcbn07XG5cbmV4cG9ydCBjb25zdCBjb252ZXJ0UGFnZSA9IGZ1bmN0aW9uIChjb252ZXJ0ZXJDb250ZXh0OiBDb252ZXJ0ZXJDb250ZXh0KTogT2JqZWN0UGFnZURlZmluaXRpb24ge1xuXHRjb25zdCBtYW5pZmVzdFdyYXBwZXIgPSBjb252ZXJ0ZXJDb250ZXh0LmdldE1hbmlmZXN0V3JhcHBlcigpO1xuXHRsZXQgaGVhZGVyU2VjdGlvbjogT2JqZWN0UGFnZVNlY3Rpb24gfCB1bmRlZmluZWQ7XG5cdGNvbnN0IGVudGl0eVR5cGU6IEVudGl0eVR5cGUgPSBjb252ZXJ0ZXJDb250ZXh0LmdldEVudGl0eVR5cGUoKTtcblxuXHQvLyBSZXRyaWV2ZSBhbGwgaGVhZGVyIGZhY2V0cyAoZnJvbSBhbm5vdGF0aW9ucyAmIGN1c3RvbSlcblx0Y29uc3QgaGVhZGVyRmFjZXRzID0gaW5zZXJ0Q3VzdG9tRWxlbWVudHMoXG5cdFx0Z2V0SGVhZGVyRmFjZXRzRnJvbUFubm90YXRpb25zKGNvbnZlcnRlckNvbnRleHQpLFxuXHRcdGdldEhlYWRlckZhY2V0c0Zyb21NYW5pZmVzdChtYW5pZmVzdFdyYXBwZXIuZ2V0SGVhZGVyRmFjZXRzKCkpXG5cdCk7XG5cblx0Ly8gUmV0cmlldmUgdGhlIHBhZ2UgaGVhZGVyIGFjdGlvbnNcblx0Y29uc3QgaGVhZGVyQWN0aW9ucyA9IGdldEhlYWRlckFjdGlvbnMoY29udmVydGVyQ29udGV4dCk7XG5cblx0Ly8gUmV0cmlldmUgdGhlIHBhZ2UgZm9vdGVyIGFjdGlvbnNcblx0Y29uc3QgZm9vdGVyQWN0aW9ucyA9IGdldEZvb3RlckFjdGlvbnMoY29udmVydGVyQ29udGV4dCk7XG5cblx0aWYgKG1hbmlmZXN0V3JhcHBlci5pc0hlYWRlckVkaXRhYmxlKCkgJiYgKGVudGl0eVR5cGUuYW5ub3RhdGlvbnMuVUk/LkhlYWRlckZhY2V0cyB8fCBlbnRpdHlUeXBlLmFubm90YXRpb25zLlVJPy5IZWFkZXJJbmZvKSkge1xuXHRcdGhlYWRlclNlY3Rpb24gPSBjcmVhdGVFZGl0YWJsZUhlYWRlclNlY3Rpb24oY29udmVydGVyQ29udGV4dCwgaGVhZGVyRmFjZXRzKTtcblx0fVxuXG5cdGNvbnN0IHNlY3Rpb25zID0gZ2V0U2VjdGlvbnMoY29udmVydGVyQ29udGV4dCk7XG5cblx0cmV0dXJuIHtcblx0XHR0ZW1wbGF0ZTogVGVtcGxhdGVUeXBlLk9iamVjdFBhZ2UsXG5cdFx0aGVhZGVyOiB7XG5cdFx0XHR2aXNpYmxlOiBtYW5pZmVzdFdyYXBwZXIuZ2V0U2hvd09iamVjdFBhZ2VIZWFkZXIoKSxcblx0XHRcdHNlY3Rpb246IGhlYWRlclNlY3Rpb24sXG5cdFx0XHRmYWNldHM6IGhlYWRlckZhY2V0cyxcblx0XHRcdGFjdGlvbnM6IGhlYWRlckFjdGlvbnMsXG5cdFx0XHRzaG93Q29udGVudDogZ2V0U2hvd0hlYWRlckNvbnRlbnQoY29udmVydGVyQ29udGV4dCksXG5cdFx0XHRoYXNDb250ZW50OiBoYXNIZWFkZXJDb250ZW50KGNvbnZlcnRlckNvbnRleHQpLFxuXHRcdFx0YXZhdGFyOiBnZXRBdmF0YXIoY29udmVydGVyQ29udGV4dCksXG5cdFx0XHR0aXRsZToge1xuXHRcdFx0XHRleHBhbmRlZEltYWdlVmlzaWJsZTogZ2V0RXhwYW5kZWRJbWFnZVZpc2libGUoY29udmVydGVyQ29udGV4dClcblx0XHRcdH1cblx0XHR9LFxuXHRcdHNlY3Rpb25zOiBzZWN0aW9ucyxcblx0XHRmb290ZXJBY3Rpb25zOiBmb290ZXJBY3Rpb25zLFxuXHRcdHNob3dBbmNob3JCYXI6IG1hbmlmZXN0V3JhcHBlci5nZXRTaG93QW5jaG9yQmFyKCksXG5cdFx0dXNlSWNvblRhYkJhcjogbWFuaWZlc3RXcmFwcGVyLnVzZUljb25UYWJCYXIoKVxuXHR9O1xufTtcbiJdfQ==