@sapui5/sap.fe.macros 1.112.0 → 1.113.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (268) hide show
  1. package/package.json +1 -1
  2. package/src/sap/fe/macros/.library +1 -1
  3. package/src/sap/fe/macros/CommonHelper-dbg.js +2 -1
  4. package/src/sap/fe/macros/CommonHelper.js +1 -1
  5. package/src/sap/fe/macros/CommonHelper.js.map +1 -1
  6. package/src/sap/fe/macros/CommonHelper.ts +1 -0
  7. package/src/sap/fe/macros/DelegateUtil-dbg.js +1 -21
  8. package/src/sap/fe/macros/DelegateUtil.js +1 -1
  9. package/src/sap/fe/macros/DelegateUtil.js.map +1 -1
  10. package/src/sap/fe/macros/DelegateUtil.ts +0 -25
  11. package/src/sap/fe/macros/chart/Chart.block-dbg.js +174 -46
  12. package/src/sap/fe/macros/chart/Chart.block.js +22 -22
  13. package/src/sap/fe/macros/chart/Chart.block.js.map +1 -1
  14. package/src/sap/fe/macros/chart/Chart.block.ts +185 -29
  15. package/src/sap/fe/macros/chart/ChartDelegate-dbg.js +10 -7
  16. package/src/sap/fe/macros/chart/ChartDelegate.js +1 -1
  17. package/src/sap/fe/macros/chart/ChartDelegate.js.map +1 -1
  18. package/src/sap/fe/macros/chart/ChartDelegate.ts +13 -6
  19. package/src/sap/fe/macros/chart/ChartHelper-dbg.js +41 -3
  20. package/src/sap/fe/macros/chart/ChartHelper.js +1 -1
  21. package/src/sap/fe/macros/chart/ChartHelper.js.map +1 -1
  22. package/src/sap/fe/macros/chart/ChartHelper.ts +47 -5
  23. package/src/sap/fe/macros/contact/Contact.block-dbg.js +4 -8
  24. package/src/sap/fe/macros/contact/Contact.block.js +2 -2
  25. package/src/sap/fe/macros/contact/Contact.block.js.map +1 -1
  26. package/src/sap/fe/macros/contact/Contact.block.ts +2 -5
  27. package/src/sap/fe/macros/draftIndicator/DraftIndicator.block-dbg.js +2 -2
  28. package/src/sap/fe/macros/draftIndicator/DraftIndicator.block.js +1 -1
  29. package/src/sap/fe/macros/draftIndicator/DraftIndicator.block.js.map +1 -1
  30. package/src/sap/fe/macros/draftIndicator/DraftIndicator.block.tsx +1 -1
  31. package/src/sap/fe/macros/field/FieldHelper-dbg.js +23 -98
  32. package/src/sap/fe/macros/field/FieldHelper.js +1 -1
  33. package/src/sap/fe/macros/field/FieldHelper.js.map +1 -1
  34. package/src/sap/fe/macros/field/FieldHelper.ts +34 -116
  35. package/src/sap/fe/macros/field/FieldRuntime-dbg.js +2 -8
  36. package/src/sap/fe/macros/field/FieldRuntime.js +1 -1
  37. package/src/sap/fe/macros/field/FieldRuntime.js.map +1 -1
  38. package/src/sap/fe/macros/field/FieldRuntime.ts +2 -7
  39. package/src/sap/fe/macros/field/FieldTemplating-dbg.js +38 -12
  40. package/src/sap/fe/macros/field/FieldTemplating.js +1 -1
  41. package/src/sap/fe/macros/field/FieldTemplating.js.map +1 -1
  42. package/src/sap/fe/macros/field/FieldTemplating.ts +38 -10
  43. package/src/sap/fe/macros/field/PublicField.block-dbg.js +8 -2
  44. package/src/sap/fe/macros/field/PublicField.block.js +1 -1
  45. package/src/sap/fe/macros/field/PublicField.block.js.map +1 -1
  46. package/src/sap/fe/macros/field/PublicField.block.ts +7 -2
  47. package/src/sap/fe/macros/filter/FilterUtils-dbg.js +4 -3
  48. package/src/sap/fe/macros/filter/FilterUtils.js +1 -1
  49. package/src/sap/fe/macros/filter/FilterUtils.js.map +1 -1
  50. package/src/sap/fe/macros/filter/FilterUtils.ts +2 -2
  51. package/src/sap/fe/macros/filterBar/FilterBar.block-dbg.js +1 -2
  52. package/src/sap/fe/macros/filterBar/FilterBar.block.js.map +1 -1
  53. package/src/sap/fe/macros/filterBar/FilterBar.block.ts +0 -1
  54. package/src/sap/fe/macros/filterBar/FilterBarDelegate-dbg.js +4 -3
  55. package/src/sap/fe/macros/filterBar/FilterBarDelegate.js +1 -1
  56. package/src/sap/fe/macros/filterBar/FilterBarDelegate.js.map +1 -1
  57. package/src/sap/fe/macros/filterBar/FilterBarDelegate.ts +3 -3
  58. package/src/sap/fe/macros/form/Form.block-dbg.js +30 -4
  59. package/src/sap/fe/macros/form/Form.block.js +2 -2
  60. package/src/sap/fe/macros/form/Form.block.js.map +1 -1
  61. package/src/sap/fe/macros/form/Form.block.ts +30 -3
  62. package/src/sap/fe/macros/form/FormAPI-dbg.js +1 -15
  63. package/src/sap/fe/macros/form/FormAPI.js.map +1 -1
  64. package/src/sap/fe/macros/form/FormAPI.ts +0 -14
  65. package/src/sap/fe/macros/form/FormContainer.block-dbg.js +2 -2
  66. package/src/sap/fe/macros/form/FormContainer.block.js +1 -1
  67. package/src/sap/fe/macros/form/FormContainer.block.js.map +1 -1
  68. package/src/sap/fe/macros/form/FormContainer.block.ts +1 -1
  69. package/src/sap/fe/macros/form/FormContainer.fragment.xml +2 -4
  70. package/src/sap/fe/macros/form/FormDelegate-dbg.js +3 -2
  71. package/src/sap/fe/macros/form/FormDelegate.js +1 -1
  72. package/src/sap/fe/macros/form/FormDelegate.js.map +1 -1
  73. package/src/sap/fe/macros/form/FormDelegate.ts +2 -1
  74. package/src/sap/fe/macros/form/FormElement.block-dbg.js +17 -7
  75. package/src/sap/fe/macros/form/FormElement.block.js +3 -3
  76. package/src/sap/fe/macros/form/FormElement.block.js.map +1 -1
  77. package/src/sap/fe/macros/form/FormElement.block.ts +23 -8
  78. package/src/sap/fe/macros/internal/DataPoint.block-dbg.js +15 -56
  79. package/src/sap/fe/macros/internal/DataPoint.block.js +36 -37
  80. package/src/sap/fe/macros/internal/DataPoint.block.js.map +1 -1
  81. package/src/sap/fe/macros/internal/DataPoint.block.ts +16 -68
  82. package/src/sap/fe/macros/internal/InternalField.block-dbg.js +222 -108
  83. package/src/sap/fe/macros/internal/InternalField.block.js +3 -3
  84. package/src/sap/fe/macros/internal/InternalField.block.js.map +1 -1
  85. package/src/sap/fe/macros/internal/InternalField.block.ts +280 -103
  86. package/src/sap/fe/macros/internal/field/ConnectedDataField.fragment.xml +4 -1
  87. package/src/sap/fe/macros/internal/field/DisplayStyle-dbg.js +208 -53
  88. package/src/sap/fe/macros/internal/field/DisplayStyle.js +122 -25
  89. package/src/sap/fe/macros/internal/field/DisplayStyle.js.map +1 -1
  90. package/src/sap/fe/macros/internal/field/DisplayStyle.ts +226 -55
  91. package/src/sap/fe/macros/internal/field/EditStyle-dbg.js +60 -0
  92. package/src/sap/fe/macros/internal/field/EditStyle.js +26 -0
  93. package/src/sap/fe/macros/internal/field/EditStyle.js.map +1 -0
  94. package/src/sap/fe/macros/internal/field/EditStyle.ts +57 -0
  95. package/src/sap/fe/macros/internal/field/FieldContent.fragment.xml +18 -57
  96. package/src/sap/fe/macros/internal/field/FieldStructure-dbg.js +102 -50
  97. package/src/sap/fe/macros/internal/field/FieldStructure.js +36 -26
  98. package/src/sap/fe/macros/internal/field/FieldStructure.js.map +1 -1
  99. package/src/sap/fe/macros/internal/field/FieldStructure.ts +107 -50
  100. package/src/sap/fe/macros/internal/field/displayStyle/AmountWithCurrency.fragment.xml +1 -8
  101. package/src/sap/fe/macros/internal/field/displayStyle/LabelSemanticKey.fragment.xml +11 -24
  102. package/src/sap/fe/macros/internal/field/displayStyle/Link.fragment.xml +12 -16
  103. package/src/sap/fe/macros/internal/field/displayStyle/LinkWithQuickView.fragment.xml +2 -12
  104. package/src/sap/fe/macros/internal/field/displayStyle/ObjectIdentifier.fragment.xml +1 -1
  105. package/src/sap/fe/macros/internal/field/displayStyle/ObjectStatus.fragment.xml +5 -12
  106. package/src/sap/fe/macros/internal/field/displayStyle/SemanticKeyWithDraftIndicator.fragment.xml +1 -1
  107. package/src/sap/fe/macros/internal/field/displayStyle/Text.fragment.xml +5 -27
  108. package/src/sap/fe/macros/internal/field/fragments/ObjectIdentifierContent.fragment.xml +15 -33
  109. package/src/sap/fe/macros/internal/filterField/FilterFieldTemplate.fragment.xml +0 -1
  110. package/src/sap/fe/macros/internal/helpers/ActionHelper-dbg.js +6 -6
  111. package/src/sap/fe/macros/internal/helpers/ActionHelper.js +1 -1
  112. package/src/sap/fe/macros/internal/helpers/ActionHelper.js.map +1 -1
  113. package/src/sap/fe/macros/internal/helpers/ActionHelper.ts +4 -4
  114. package/src/sap/fe/macros/internal/helpers/DataPointTemplating-dbg.js +3 -3
  115. package/src/sap/fe/macros/internal/helpers/DataPointTemplating.js +1 -1
  116. package/src/sap/fe/macros/internal/helpers/DataPointTemplating.js.map +1 -1
  117. package/src/sap/fe/macros/internal/helpers/DataPointTemplating.ts +2 -1
  118. package/src/sap/fe/macros/internal/valuehelp/TableDelegate-dbg.js +78 -53
  119. package/src/sap/fe/macros/internal/valuehelp/TableDelegate.js +1 -1
  120. package/src/sap/fe/macros/internal/valuehelp/TableDelegate.js.map +1 -1
  121. package/src/sap/fe/macros/internal/valuehelp/TableDelegate.ts +95 -63
  122. package/src/sap/fe/macros/internal/valuehelp/ValueHelpTemplating-dbg.js +12 -9
  123. package/src/sap/fe/macros/internal/valuehelp/ValueHelpTemplating.js +1 -1
  124. package/src/sap/fe/macros/internal/valuehelp/ValueHelpTemplating.js.map +1 -1
  125. package/src/sap/fe/macros/internal/valuehelp/ValueHelpTemplating.ts +11 -10
  126. package/src/sap/fe/macros/internal/valuehelp/ValueListDialogTable.fragment.xml +0 -1
  127. package/src/sap/fe/macros/internal/valuehelp/ValueListFilterBar.fragment.xml +0 -3
  128. package/src/sap/fe/macros/internal/valuehelp/ValueListHelper-dbg.js +43 -39
  129. package/src/sap/fe/macros/internal/valuehelp/ValueListHelper.js +1 -1
  130. package/src/sap/fe/macros/internal/valuehelp/ValueListHelper.js.map +1 -1
  131. package/src/sap/fe/macros/internal/valuehelp/ValueListHelper.ts +71 -53
  132. package/src/sap/fe/macros/internal/valuehelp/ValueListTable.fragment.xml +0 -1
  133. package/src/sap/fe/macros/library-dbg.js +1 -1
  134. package/src/sap/fe/macros/library-preload.js +368 -233
  135. package/src/sap/fe/macros/library-preload.js.map +1 -1
  136. package/src/sap/fe/macros/library.js +1 -1
  137. package/src/sap/fe/macros/manifest.json +1 -1
  138. package/src/sap/fe/macros/messagebundle_ar.properties +2 -2
  139. package/src/sap/fe/macros/messagebundle_bg.properties +2 -2
  140. package/src/sap/fe/macros/messagebundle_ca.properties +2 -2
  141. package/src/sap/fe/macros/messagebundle_cs.properties +2 -2
  142. package/src/sap/fe/macros/messagebundle_cy.properties +2 -2
  143. package/src/sap/fe/macros/messagebundle_da.properties +2 -2
  144. package/src/sap/fe/macros/messagebundle_de.properties +4 -4
  145. package/src/sap/fe/macros/messagebundle_el.properties +2 -2
  146. package/src/sap/fe/macros/messagebundle_en.properties +1 -1
  147. package/src/sap/fe/macros/messagebundle_en_GB.properties +2 -2
  148. package/src/sap/fe/macros/messagebundle_en_US_saptrc.properties +4 -0
  149. package/src/sap/fe/macros/messagebundle_es.properties +4 -4
  150. package/src/sap/fe/macros/messagebundle_es_MX.properties +2 -2
  151. package/src/sap/fe/macros/messagebundle_et.properties +2 -2
  152. package/src/sap/fe/macros/messagebundle_fi.properties +2 -2
  153. package/src/sap/fe/macros/messagebundle_fr.properties +2 -2
  154. package/src/sap/fe/macros/messagebundle_fr_CA.properties +4 -4
  155. package/src/sap/fe/macros/messagebundle_hi.properties +4 -4
  156. package/src/sap/fe/macros/messagebundle_hr.properties +2 -2
  157. package/src/sap/fe/macros/messagebundle_hu.properties +2 -2
  158. package/src/sap/fe/macros/messagebundle_id.properties +4 -4
  159. package/src/sap/fe/macros/messagebundle_it.properties +2 -2
  160. package/src/sap/fe/macros/messagebundle_iw.properties +2 -2
  161. package/src/sap/fe/macros/messagebundle_ja.properties +2 -2
  162. package/src/sap/fe/macros/messagebundle_kk.properties +2 -2
  163. package/src/sap/fe/macros/messagebundle_ko.properties +4 -4
  164. package/src/sap/fe/macros/messagebundle_lt.properties +2 -2
  165. package/src/sap/fe/macros/messagebundle_lv.properties +4 -4
  166. package/src/sap/fe/macros/messagebundle_ms.properties +2 -2
  167. package/src/sap/fe/macros/messagebundle_nl.properties +2 -2
  168. package/src/sap/fe/macros/messagebundle_no.properties +2 -2
  169. package/src/sap/fe/macros/messagebundle_pl.properties +4 -4
  170. package/src/sap/fe/macros/messagebundle_pt.properties +2 -2
  171. package/src/sap/fe/macros/messagebundle_pt_PT.properties +2 -2
  172. package/src/sap/fe/macros/messagebundle_ro.properties +4 -4
  173. package/src/sap/fe/macros/messagebundle_ru.properties +4 -4
  174. package/src/sap/fe/macros/messagebundle_sh.properties +2 -2
  175. package/src/sap/fe/macros/messagebundle_sk.properties +2 -2
  176. package/src/sap/fe/macros/messagebundle_sl.properties +3 -3
  177. package/src/sap/fe/macros/messagebundle_sv.properties +4 -4
  178. package/src/sap/fe/macros/messagebundle_th.properties +2 -2
  179. package/src/sap/fe/macros/messagebundle_tr.properties +2 -2
  180. package/src/sap/fe/macros/messagebundle_uk.properties +2 -2
  181. package/src/sap/fe/macros/messagebundle_vi.properties +2 -2
  182. package/src/sap/fe/macros/messagebundle_zh_CN.properties +4 -4
  183. package/src/sap/fe/macros/messagebundle_zh_TW.properties +4 -4
  184. package/src/sap/fe/macros/microchart/MicroChart.block-dbg.js +6 -18
  185. package/src/sap/fe/macros/microchart/MicroChart.block.js +2 -2
  186. package/src/sap/fe/macros/microchart/MicroChart.block.js.map +1 -1
  187. package/src/sap/fe/macros/microchart/MicroChart.block.ts +2 -8
  188. package/src/sap/fe/macros/microchart/fragments/AreaMicroChart.fragment.xml +5 -5
  189. package/src/sap/fe/macros/microchart/fragments/BulletMicroChart.fragment.xml +2 -2
  190. package/src/sap/fe/macros/microchart/fragments/ColumnMicroChart.fragment.xml +5 -5
  191. package/src/sap/fe/macros/microchart/fragments/ComparisonMicroChart.fragment.xml +6 -6
  192. package/src/sap/fe/macros/microchart/fragments/HarveyBallMicroChart.fragment.xml +2 -2
  193. package/src/sap/fe/macros/microchart/fragments/LineMicroChart.fragment.xml +6 -6
  194. package/src/sap/fe/macros/microchart/fragments/MicroChartTitle.fragment.xml +12 -12
  195. package/src/sap/fe/macros/microchart/fragments/RadialMicroChart.fragment.xml +2 -2
  196. package/src/sap/fe/macros/microchart/fragments/StackedBarMicroChart.fragment.xml +3 -3
  197. package/src/sap/fe/macros/multiValueField/MultiValueField.block-dbg.js +9 -8
  198. package/src/sap/fe/macros/multiValueField/MultiValueField.block.js +2 -2
  199. package/src/sap/fe/macros/multiValueField/MultiValueField.block.js.map +1 -1
  200. package/src/sap/fe/macros/multiValueField/MultiValueField.block.ts +5 -5
  201. package/src/sap/fe/macros/quickView/QuickView.block-dbg.js +8 -30
  202. package/src/sap/fe/macros/quickView/QuickView.block.js +2 -2
  203. package/src/sap/fe/macros/quickView/QuickView.block.js.map +1 -1
  204. package/src/sap/fe/macros/quickView/QuickView.block.ts +11 -35
  205. package/src/sap/fe/macros/quickView/QuickViewDelegate-dbg.js +5 -5
  206. package/src/sap/fe/macros/quickView/QuickViewDelegate.js +1 -1
  207. package/src/sap/fe/macros/quickView/QuickViewDelegate.js.map +1 -1
  208. package/src/sap/fe/macros/quickView/QuickViewDelegate.ts +4 -4
  209. package/src/sap/fe/macros/quickView/fragments/DataFieldQuickView.fragment.xml +3 -3
  210. package/src/sap/fe/macros/quickView/fragments/EntityQuickView.fragment.xml +1 -1
  211. package/src/sap/fe/macros/situations/SituationsPopover-dbg.js +3 -3
  212. package/src/sap/fe/macros/situations/SituationsPopover.js +1 -1
  213. package/src/sap/fe/macros/situations/SituationsPopover.js.map +1 -1
  214. package/src/sap/fe/macros/situations/SituationsPopover.ts +1 -2
  215. package/src/sap/fe/macros/table/Actions.fragment.xml +4 -4
  216. package/src/sap/fe/macros/table/Column.fragment.xml +1 -1
  217. package/src/sap/fe/macros/table/ColumnContent.fragment.xml +5 -5
  218. package/src/sap/fe/macros/table/Table.block-dbg.js +132 -39
  219. package/src/sap/fe/macros/table/Table.block.js +49 -33
  220. package/src/sap/fe/macros/table/Table.block.js.map +1 -1
  221. package/src/sap/fe/macros/table/Table.block.ts +156 -26
  222. package/src/sap/fe/macros/table/TableAPI-dbg.js +173 -88
  223. package/src/sap/fe/macros/table/TableAPI.js +1 -1
  224. package/src/sap/fe/macros/table/TableAPI.js.map +1 -1
  225. package/src/sap/fe/macros/table/TableAPI.ts +128 -28
  226. package/src/sap/fe/macros/table/TableHelper-dbg.js +68 -45
  227. package/src/sap/fe/macros/table/TableHelper.js +1 -1
  228. package/src/sap/fe/macros/table/TableHelper.js.map +1 -1
  229. package/src/sap/fe/macros/table/TableHelper.ts +85 -54
  230. package/src/sap/fe/macros/table/TableSizeHelper-dbg.js +4 -55
  231. package/src/sap/fe/macros/table/TableSizeHelper.js +1 -1
  232. package/src/sap/fe/macros/table/TableSizeHelper.js.map +1 -1
  233. package/src/sap/fe/macros/table/TableSizeHelper.ts +3 -60
  234. package/src/sap/fe/macros/table/Utils-dbg.js +3 -3
  235. package/src/sap/fe/macros/table/Utils.js +1 -1
  236. package/src/sap/fe/macros/table/Utils.js.map +1 -1
  237. package/src/sap/fe/macros/table/Utils.ts +2 -2
  238. package/src/sap/fe/macros/table/delegates/TableDelegate-dbg.js +13 -10
  239. package/src/sap/fe/macros/table/delegates/TableDelegate.js +1 -1
  240. package/src/sap/fe/macros/table/delegates/TableDelegate.js.map +1 -1
  241. package/src/sap/fe/macros/table/delegates/TableDelegate.ts +13 -13
  242. package/src/sap/fe/macros/table/delegates/TreeTableDelegate-dbg.js +9 -9
  243. package/src/sap/fe/macros/table/delegates/TreeTableDelegate.js +1 -1
  244. package/src/sap/fe/macros/table/delegates/TreeTableDelegate.js.map +1 -1
  245. package/src/sap/fe/macros/table/delegates/TreeTableDelegate.ts +3 -4
  246. package/src/sap/fe/macros/valuehelp/ValueHelp.block-dbg.js +4 -4
  247. package/src/sap/fe/macros/valuehelp/ValueHelp.block.js +1 -1
  248. package/src/sap/fe/macros/valuehelp/ValueHelp.block.js.map +1 -1
  249. package/src/sap/fe/macros/valuehelp/ValueHelp.block.ts +2 -2
  250. package/src/sap/fe/macros/visualfilters/InteractiveChartHelper-dbg.js +7 -5
  251. package/src/sap/fe/macros/visualfilters/InteractiveChartHelper.js +1 -1
  252. package/src/sap/fe/macros/visualfilters/InteractiveChartHelper.js.map +1 -1
  253. package/src/sap/fe/macros/visualfilters/InteractiveChartHelper.ts +5 -4
  254. package/src/sap/fe/macros/visualfilters/VisualFilter.block-dbg.js +2 -2
  255. package/src/sap/fe/macros/visualfilters/VisualFilter.block.js +2 -2
  256. package/src/sap/fe/macros/visualfilters/VisualFilter.block.js.map +1 -1
  257. package/src/sap/fe/macros/visualfilters/VisualFilter.block.ts +1 -1
  258. package/src/sap/fe/macros/ODataMetaModelUtil-dbg.js +0 -472
  259. package/src/sap/fe/macros/ODataMetaModelUtil.js +0 -6
  260. package/src/sap/fe/macros/ODataMetaModelUtil.js.map +0 -1
  261. package/src/sap/fe/macros/ODataMetaModelUtil.ts +0 -598
  262. package/src/sap/fe/macros/internal/field/displayStyle/Contact.fragment.xml +0 -22
  263. package/src/sap/fe/macros/internal/field/displayStyle/DataPoint.fragment.xml +0 -53
  264. package/src/sap/fe/macros/internal/field/displayStyle/File.fragment.xml +0 -103
  265. package/src/sap/fe/macros/internal/field/displayStyle/LinkWrapper.fragment.xml +0 -46
  266. package/src/sap/fe/macros/internal/field/editStyle/CheckBox.fragment.xml +0 -28
  267. package/src/sap/fe/macros/table/ActionCommands.fragment.xml +0 -30
  268. package/src/sap/fe/macros/table/CreationRow.fragment.xml +0 -25
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@sapui5/sap.fe.macros",
3
- "version": "1.112.0",
3
+ "version": "1.113.0",
4
4
  "description": "SAPUI5 Library sap.fe.macros",
5
5
  "keywords": [
6
6
  "sapui5",
@@ -6,7 +6,7 @@
6
6
  SAP UI development toolkit for HTML5 (SAPUI5)
7
7
  (c) Copyright 2009-2021 SAP SE. All rights reserved
8
8
  </copyright>
9
- <version>1.112.0</version>
9
+ <version>1.113.0</version>
10
10
 
11
11
  <documentation>UI5 library: sap.fe.macros</documentation>
12
12
 
@@ -458,6 +458,7 @@ sap.ui.define(["sap/base/Log", "sap/fe/core/CommonUtils", "sap/fe/core/helpers/B
458
458
  return oModel.createBindingContext(`${oPresentationContext.sPath}@sapui.name`);
459
459
  },
460
460
  getPressHandlerForDataFieldForIBN: function (oDataField, sContext, bNavigateWithConfirmationDialog) {
461
+ if (!oDataField) return undefined;
461
462
  const mNavigationParameters = {
462
463
  navigationContexts: sContext ? sContext : "${$source>/}.getBindingContext()"
463
464
  };
@@ -802,4 +803,4 @@ sap.ui.define(["sap/base/Log", "sap/fe/core/CommonUtils", "sap/fe/core/helpers/B
802
803
  CommonHelper.getSortConditions.requiresIContext = true;
803
804
  return CommonHelper;
804
805
  }, false);
805
- //# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJuYW1lcyI6WyJWYWx1ZUNvbG9yIiwibUxpYnJhcnkiLCJDb21tb25IZWxwZXIiLCJnZXRQYXRoVG9LZXkiLCJvQ3R4IiwiZ2V0T2JqZWN0IiwiaXNWaXNpYmxlIiwidGFyZ2V0Iiwib0ludGVyZmFjZSIsIm9Nb2RlbCIsImNvbnRleHQiLCJnZXRNb2RlbCIsInNQcm9wZXJ0eVBhdGgiLCJnZXRQYXRoIiwib0Fubm90YXRpb25zIiwiaGlkZGVuIiwiJFBhdGgiLCJnZXRQYXJhbWV0ZXJFZGl0TW9kZSIsImZpZWxkQ29udHJvbCIsImltbXV0YWJsZSIsImNvbXB1dGVkIiwic0VkaXRNb2RlIiwiRWRpdE1vZGUiLCJFZGl0YWJsZSIsIlJlYWRPbmx5IiwiJEVudW1NZW1iZXIiLCJEaXNhYmxlZCIsImdldE1ldGFQYXRoIiwidW5kZWZpbmVkIiwiaXNEZXNrdG9wIiwic3lzdGVtIiwiZGVza3RvcCIsImdldFRhcmdldENvbGxlY3Rpb25QYXRoIiwibmF2Q29sbGVjdGlvbiIsInNQYXRoIiwiZ2V0TWV0YWRhdGEiLCJnZXROYW1lIiwiZ2V0TWV0YU1vZGVsIiwiYVBhcnRzIiwic3BsaXQiLCJmaWx0ZXIiLCJzUGFydCIsImVudGl0eVNldCIsImxlbmd0aCIsIm5hdmlnYXRpb25Db2xsZWN0aW9uIiwic2xpY2UiLCJqb2luIiwiaXNQcm9wZXJ0eUZpbHRlcmFibGUiLCJvRGF0YUZpZWxkIiwic1Byb3BlcnR5TG9jYXRpb25QYXRoIiwiZ2V0TG9jYXRpb25Gb3JQcm9wZXJ0eVBhdGgiLCJzUHJvcGVydHkiLCJyZXBsYWNlIiwiJFR5cGUiLCJpTGVuZ3RoIiwic0NvbGxlY3Rpb25QYXRoIiwibGFzdEluZGV4T2YiLCJpbmRleE9mIiwiZ290b0FjdGlvblBhcmFtZXRlciIsIm9Db250ZXh0Iiwic1Byb3BlcnR5TmFtZSIsIkNvbW1vblV0aWxzIiwiZ2V0UGFyYW1ldGVyUGF0aCIsImdldEVudGl0eVNldE5hbWUiLCJvTWV0YU1vZGVsIiwic0VudGl0eVR5cGUiLCJvRW50aXR5Q29udGFpbmVyIiwia2V5IiwiZ2V0QWN0aW9uUGF0aCIsIm9BY3Rpb24iLCJiUmV0dXJuT25seVBhdGgiLCJzQWN0aW9uTmFtZSIsImJDaGVja1N0YXRpY1ZhbHVlIiwic0NvbnRleHRQYXRoIiwic0VudGl0eVR5cGVOYW1lIiwic0VudGl0eU5hbWUiLCJzQmluZGluZ1BhcmFtZXRlciIsImdldE5hdmlnYXRpb25Db250ZXh0IiwiT0RhdGFNb2RlbEFubm90YXRpb25IZWxwZXIiLCJnZXROYXZpZ2F0aW9uUGF0aCIsImJLZWVwUHJvcGVydHkiLCJiU3RhcnRzV2l0aEVudGl0eVR5cGUiLCJzdGFydHNXaXRoIiwicGFydCIsInNoaWZ0IiwicG9wIiwiZ2V0QWN0aW9uQ29udGV4dCIsImdldFBhdGhUb0JvdW5kQWN0aW9uT3ZlcmxvYWQiLCJhZGRTaW5nbGVRdW90ZXMiLCJzVmFsdWUiLCJiRXNjYXBlIiwiZXNjYXBlU2luZ2xlUXVvdGVzIiwiZ2VuZXJhdGVGdW5jdGlvbiIsInNGdW5jTmFtZSIsInNQYXJhbXMiLCJpIiwic0Z1bmN0aW9uIiwiZ2V0SGVhZGVyRGF0YVBvaW50TGlua1Zpc2liaWxpdHkiLCJiTGluayIsImJGaWVsZFZpc2liaWxpdHkiLCJzVmlzaWJpbGl0eUV4cCIsIm9iamVjdFRvU3RyaW5nIiwib1BhcmFtcyIsImlOdW1iZXJPZktleXMiLCJPYmplY3QiLCJrZXlzIiwic0tleSIsInJlbW92ZUVzY2FwZUNoYXJhY3RlcnMiLCJzRXhwcmVzc2lvbiIsInN0cmluZ2lmeU9iamVjdCIsInNTdHJpbmdpZmllZCIsIm9PYmplY3QiLCJKU09OIiwicGFyc2UiLCJBcnJheSIsImlzQXJyYXkiLCJvVUk1T2JqZWN0IiwidWk1b2JqZWN0IiwiYXNzaWduIiwic3RyaW5naWZ5Iiwic1R5cGUiLCJMb2ciLCJlcnJvciIsIkVycm9yIiwic3RyaW5naWZ5Q3VzdG9tRGF0YSIsInZEYXRhIiwiQ29udGV4dCIsInBhcnNlQ3VzdG9tRGF0YSIsImhhc093blByb3BlcnR5IiwiZ2V0Q29udGV4dFBhdGgiLCJvVmFsdWUiLCJnZXRTb3J0Q29uZGl0aW9ucyIsIm9QcmVzZW50YXRpb25WYXJpYW50Iiwic1ByZXNlbnRhdGlvblZhcmlhbnRQYXRoIiwiX2lzUHJlc2VudGF0aW9uVmFyaWFudEFubm90YXRpb24iLCJTb3J0T3JkZXIiLCJhU29ydENvbmRpdGlvbnMiLCJzb3J0ZXJzIiwic0VudGl0eVBhdGgiLCJmb3JFYWNoIiwib0NvbmRpdGlvbiIsIm9Tb3J0UHJvcGVydHkiLCJvU29ydGVyIiwiRHluYW1pY1Byb3BlcnR5IiwiJEFubm90YXRpb25QYXRoIiwiTmFtZSIsIlByb3BlcnR5IiwiJFByb3BlcnR5UGF0aCIsIm5hbWUiLCJkZXNjZW5kaW5nIiwiRGVzY2VuZGluZyIsInB1c2giLCJhbm5vdGF0aW9uUGF0aCIsImNyZWF0ZVByZXNlbnRhdGlvblBhdGhDb250ZXh0Iiwib1ByZXNlbnRhdGlvbkNvbnRleHQiLCJhUGF0aHMiLCJjcmVhdGVCaW5kaW5nQ29udGV4dCIsImdldFByZXNzSGFuZGxlckZvckRhdGFGaWVsZEZvcklCTiIsInNDb250ZXh0IiwiYk5hdmlnYXRlV2l0aENvbmZpcm1hdGlvbkRpYWxvZyIsIm1OYXZpZ2F0aW9uUGFyYW1ldGVycyIsIm5hdmlnYXRpb25Db250ZXh0cyIsIlJlcXVpcmVzQ29udGV4dCIsIklubGluZSIsImFwcGxpY2FibGVDb250ZXh0cyIsIlNlbWFudGljT2JqZWN0IiwiQWN0aW9uIiwibm90QXBwbGljYWJsZUNvbnRleHRzIiwibGFiZWwiLCJMYWJlbCIsIk1hcHBpbmciLCJzZW1hbnRpY09iamVjdE1hcHBpbmciLCJnZXRFbnRpdHlTZXQiLCJNb2RlbEhlbHBlciIsImdldEVudGl0eVNldFBhdGgiLCJoYW5kbGVWaXNpYmlsaXR5T2ZNZW51QWN0aW9ucyIsInNWaXNpYmxlVmFsdWUiLCJjb21iaW5lZENvbmRpdGlvbnMiLCJnZXRDcml0aWNhbGl0eUNhbGN1bGF0aW9uQmluZGluZyIsInNJbXByb3ZlbWVudERpcmVjdGlvbiIsInNEZXZpYXRpb25Mb3ciLCJzVG9sZXJhbmNlTG93Iiwic0FjY2VwdGFuY2VMb3ciLCJzQWNjZXB0YW5jZUhpZ2giLCJzVG9sZXJhbmNlSGlnaCIsInNEZXZpYXRpb25IaWdoIiwic0NyaXRpY2FsaXR5RXhwcmVzc2lvbiIsIk5ldXRyYWwiLCJJbmZpbml0eSIsIkdvb2QiLCJDcml0aWNhbCIsIndhcm5pbmciLCJnZXRNZWFzdXJlQXR0cmlidXRlSW5kZXgiLCJpTWVhc3VyZSIsIm9DaGFydEFubm90YXRpb25zIiwiYU1lYXN1cmVzIiwic01lYXN1cmVQcm9wZXJ0eVBhdGgiLCJNZWFzdXJlcyIsIkR5bmFtaWNNZWFzdXJlcyIsImJNZWFzdXJlQXR0cmlidXRlRXhpc3RzIiwiYU1lYXN1cmVBdHRyaWJ1dGVzIiwiTWVhc3VyZUF0dHJpYnV0ZXMiLCJpTWVhc3VyZUF0dHJpYnV0ZSIsImZuQ2hlY2tNZWFzdXJlIiwic01lYXN1cmVQYXRoIiwib01lYXN1cmVBdHRyaWJ1dGUiLCJpbmRleCIsIk1lYXN1cmUiLCJEeW5hbWljTWVhc3VyZSIsInNvbWUiLCJiaW5kIiwiZ2V0TWVhc3VyZUF0dHJpYnV0ZSIsInNDaGFydEFubm90YXRpb25QYXRoIiwicmVxdWVzdE9iamVjdCIsInRoZW4iLCJzTWVhc3VyZUF0dHJpYnV0ZVBhdGgiLCJEYXRhUG9pbnQiLCJnZXRNZWFzdXJlQXR0cmlidXRlRm9yTWVhc3VyZSIsInN1YnN0cmluZyIsImlzRHJhZnRQYXJlbnRFbnRpdHlGb3JDb250YWlubWVudCIsIm9UYXJnZXRDb2xsZWN0aW9uQ29udGFpbnNUYXJnZXQiLCJvVGFibGVNZXRhZGF0YSIsInBhcmVudEVudGl0eVNldCIsInNQYXJlbnRFbnRpdHlTZXRQYXRoIiwib0RyYWZ0Um9vdCIsIm9EcmFmdE5vZGUiLCJnZXREYXRhRnJvbVRlbXBsYXRlIiwiZGF0YUVsZW1lbnQiLCJzcGxpdFBhdGgiLCJkYXRhS2V5IiwiY29ubmVjdGVkRGF0YVBhdGgiLCJjb25uZWN0ZWRPYmplY3QiLCJ0ZW1wbGF0ZSIsIlRlbXBsYXRlIiwic3BsaXRUZW1wIiwidGVtcEFycmF5IiwidHJpbSIsIkRhdGEiLCJub3RMYXN0SW5kZXgiLCJlbGVtZW50IiwiaXNMYXN0SW5kZXgiLCJ0ZW1wbGF0ZUluZm8iLCJnZXREZWxpbWl0ZXIiLCJzZXRNZXRhTW9kZWwiLCJnZXRQYXJhbWV0ZXJzIiwib1BhcmFtZXRlckluZm8iLCJnZXRQYXJhbWV0ZXJJbmZvIiwicGFyYW1ldGVyUHJvcGVydGllcyIsImJ1aWxkQWN0aW9uV3JhcHBlciIsIm9UaGlzIiwiYVBhcmFtcyIsInJlZiIsImhhbmRsZXJNb2R1bGUiLCJoYW5kbGVyTWV0aG9kIiwiaWQiLCJvQWRkaXRpb25hbFBhcmFtcyIsImNvbnRleHRzIiwiY29tcGlsZUV4cHJlc3Npb24iLCJmbiIsImdldEhpZGRlblBhdGhFeHByZXNzaW9uIiwiZGF0YUZpZWxkQW5ub3RhdGlvbnMiLCJ2YWxpZGF0ZVByZXNlbnRhdGlvbk1ldGFQYXRoIiwibWV0YVBhdGgiLCJvYmplY3RUZXJtIiwiYWxsb3dlZFRlcm1zIiwidGVybSIsInNlYXJjaCIsIlJlZ0V4cCIsInJlcXVpcmVzSUNvbnRleHQiXSwic291cmNlUm9vdCI6Ii4iLCJzb3VyY2VzIjpbIkNvbW1vbkhlbHBlci50cyJdLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBVSUFubm90YXRpb25UZXJtcyB9IGZyb20gXCJAc2FwLXV4L3ZvY2FidWxhcmllcy10eXBlcy92b2NhYnVsYXJpZXMvVUlcIjtcbmltcG9ydCBMb2cgZnJvbSBcInNhcC9iYXNlL0xvZ1wiO1xuaW1wb3J0IENvbW1vblV0aWxzIGZyb20gXCJzYXAvZmUvY29yZS9Db21tb25VdGlsc1wiO1xuaW1wb3J0IHsgQ3VzdG9tQWN0aW9uIH0gZnJvbSBcInNhcC9mZS9jb3JlL2NvbnZlcnRlcnMvY29udHJvbHMvQ29tbW9uL0FjdGlvblwiO1xuaW1wb3J0IHsgY29tcGlsZUV4cHJlc3Npb24sIGZuLCByZWYgfSBmcm9tIFwic2FwL2ZlL2NvcmUvaGVscGVycy9CaW5kaW5nVG9vbGtpdFwiO1xuaW1wb3J0IHsgaXNQcm9wZXJ0eUZpbHRlcmFibGUgfSBmcm9tIFwic2FwL2ZlL2NvcmUvaGVscGVycy9NZXRhTW9kZWxGdW5jdGlvblwiO1xuaW1wb3J0IE1vZGVsSGVscGVyIGZyb20gXCJzYXAvZmUvY29yZS9oZWxwZXJzL01vZGVsSGVscGVyXCI7XG5pbXBvcnQgbUxpYnJhcnkgZnJvbSBcInNhcC9tL2xpYnJhcnlcIjtcbmltcG9ydCB7IHN5c3RlbSB9IGZyb20gXCJzYXAvdWkvRGV2aWNlXCI7XG5pbXBvcnQgRWRpdE1vZGUgZnJvbSBcInNhcC91aS9tZGMvZW51bS9FZGl0TW9kZVwiO1xuaW1wb3J0IENvbnRleHQgZnJvbSBcInNhcC91aS9tb2RlbC9Db250ZXh0XCI7XG5pbXBvcnQgT0RhdGFNb2RlbEFubm90YXRpb25IZWxwZXIgZnJvbSBcInNhcC91aS9tb2RlbC9vZGF0YS92NC9Bbm5vdGF0aW9uSGVscGVyXCI7XG5pbXBvcnQgdHlwZSBPRGF0YU1ldGFNb2RlbCBmcm9tIFwic2FwL3VpL21vZGVsL29kYXRhL3Y0L09EYXRhTWV0YU1vZGVsXCI7XG5cbmNvbnN0IFZhbHVlQ29sb3IgPSBtTGlicmFyeS5WYWx1ZUNvbG9yO1xuY29uc3QgQ29tbW9uSGVscGVyID0ge1xuXHRnZXRQYXRoVG9LZXk6IGZ1bmN0aW9uIChvQ3R4OiBhbnkpIHtcblx0XHRyZXR1cm4gb0N0eC5nZXRPYmplY3QoKTtcblx0fSxcblxuXHQvKipcblx0ICogRGV0ZXJtaW5lcyBpZiBhIGZpZWxkIGlzIHZpc2libGUuXG5cdCAqXG5cdCAqIEBwYXJhbSB0YXJnZXQgVGFyZ2V0IGluc3RhbmNlXG5cdCAqIEBwYXJhbSBvSW50ZXJmYWNlIEludGVyZmFjZSBpbnN0YW5jZVxuXHQgKiBAcmV0dXJucyBSZXR1cm5zIHRydWUsIGZhbHNlLCBvciBleHByZXNzaW9uIHdpdGggcGF0aFxuXHQgKi9cblx0aXNWaXNpYmxlOiBmdW5jdGlvbiAodGFyZ2V0OiBvYmplY3QsIG9JbnRlcmZhY2U6IGFueSkge1xuXHRcdGNvbnN0IG9Nb2RlbCA9IG9JbnRlcmZhY2UuY29udGV4dC5nZXRNb2RlbCgpLFxuXHRcdFx0c1Byb3BlcnR5UGF0aCA9IG9JbnRlcmZhY2UuY29udGV4dC5nZXRQYXRoKCksXG5cdFx0XHRvQW5ub3RhdGlvbnMgPSBvTW9kZWwuZ2V0T2JqZWN0KGAke3NQcm9wZXJ0eVBhdGh9QGApLFxuXHRcdFx0aGlkZGVuID0gb0Fubm90YXRpb25zW1wiQGNvbS5zYXAudm9jYWJ1bGFyaWVzLlVJLnYxLkhpZGRlblwiXTtcblxuXHRcdHJldHVybiB0eXBlb2YgaGlkZGVuID09PSBcIm9iamVjdFwiID8gXCJ7PSAhJHtcIiArIGhpZGRlbi4kUGF0aCArIFwifSB9XCIgOiAhaGlkZGVuO1xuXHR9LFxuXHQvKipcblx0ICogRGV0ZXJtaW5lIGlmIGZpZWxkIGlzIGVkaXRhYmxlLlxuXHQgKlxuXHQgKiBAcGFyYW0gdGFyZ2V0IFRhcmdldCBpbnN0YW5jZVxuXHQgKiBAcGFyYW0gb0ludGVyZmFjZSBJbnRlcmZhY2UgaW5zdGFuY2Vcblx0ICogQHJldHVybnMgQSBCaW5kaW5nIEV4cHJlc3Npb24gdG8gZGV0ZXJtaW5lIGlmIGEgZmllbGQgc2hvdWxkIGJlIGVkaXRhYmxlIG9yIG5vdC5cblx0ICovXG5cdGdldFBhcmFtZXRlckVkaXRNb2RlOiBmdW5jdGlvbiAodGFyZ2V0OiBvYmplY3QsIG9JbnRlcmZhY2U6IGFueSkge1xuXHRcdGNvbnN0IG9Nb2RlbCA9IG9JbnRlcmZhY2UuY29udGV4dC5nZXRNb2RlbCgpLFxuXHRcdFx0c1Byb3BlcnR5UGF0aCA9IG9JbnRlcmZhY2UuY29udGV4dC5nZXRQYXRoKCksXG5cdFx0XHRvQW5ub3RhdGlvbnMgPSBvTW9kZWwuZ2V0T2JqZWN0KGAke3NQcm9wZXJ0eVBhdGh9QGApLFxuXHRcdFx0ZmllbGRDb250cm9sID0gb0Fubm90YXRpb25zW1wiQGNvbS5zYXAudm9jYWJ1bGFyaWVzLkNvbW1vbi52MS5GaWVsZENvbnRyb2xcIl0sXG5cdFx0XHRpbW11dGFibGUgPSBvQW5ub3RhdGlvbnNbXCJAT3JnLk9EYXRhLkNvcmUuVjEuSW1tdXRhYmxlXCJdLFxuXHRcdFx0Y29tcHV0ZWQgPSBvQW5ub3RhdGlvbnNbXCJAT3JnLk9EYXRhLkNvcmUuVjEuQ29tcHV0ZWRcIl07XG5cblx0XHRsZXQgc0VkaXRNb2RlOiBFZGl0TW9kZSB8IHN0cmluZyA9IEVkaXRNb2RlLkVkaXRhYmxlO1xuXG5cdFx0aWYgKGltbXV0YWJsZSB8fCBjb21wdXRlZCkge1xuXHRcdFx0c0VkaXRNb2RlID0gRWRpdE1vZGUuUmVhZE9ubHk7XG5cdFx0fSBlbHNlIGlmIChmaWVsZENvbnRyb2wpIHtcblx0XHRcdGlmIChmaWVsZENvbnRyb2wuJEVudW1NZW1iZXIpIHtcblx0XHRcdFx0aWYgKGZpZWxkQ29udHJvbC4kRW51bU1lbWJlciA9PT0gXCJjb20uc2FwLnZvY2FidWxhcmllcy5Db21tb24udjEuRmllbGRDb250cm9sVHlwZS9SZWFkT25seVwiKSB7XG5cdFx0XHRcdFx0c0VkaXRNb2RlID0gRWRpdE1vZGUuUmVhZE9ubHk7XG5cdFx0XHRcdH1cblx0XHRcdFx0aWYgKFxuXHRcdFx0XHRcdGZpZWxkQ29udHJvbC4kRW51bU1lbWJlciA9PT0gXCJjb20uc2FwLnZvY2FidWxhcmllcy5Db21tb24udjEuRmllbGRDb250cm9sVHlwZS9JbmFwcGxpY2FibGVcIiB8fFxuXHRcdFx0XHRcdGZpZWxkQ29udHJvbC4kRW51bU1lbWJlciA9PT0gXCJjb20uc2FwLnZvY2FidWxhcmllcy5Db21tb24udjEuRmllbGRDb250cm9sVHlwZS9IaWRkZW5cIlxuXHRcdFx0XHQpIHtcblx0XHRcdFx0XHRzRWRpdE1vZGUgPSBFZGl0TW9kZS5EaXNhYmxlZDtcblx0XHRcdFx0fVxuXHRcdFx0fVxuXHRcdFx0aWYgKGZpZWxkQ29udHJvbC4kUGF0aCkge1xuXHRcdFx0XHRzRWRpdE1vZGUgPVxuXHRcdFx0XHRcdFwiez0gJXtcIiArXG5cdFx0XHRcdFx0ZmllbGRDb250cm9sLiRQYXRoICtcblx0XHRcdFx0XHRcIn0gPCAzID8gKCV7XCIgK1xuXHRcdFx0XHRcdGZpZWxkQ29udHJvbC4kUGF0aCArXG5cdFx0XHRcdFx0XCJ9ID09PSAwID8gJ1wiICtcblx0XHRcdFx0XHRFZGl0TW9kZS5EaXNhYmxlZCArXG5cdFx0XHRcdFx0XCInIDogJ1wiICtcblx0XHRcdFx0XHRFZGl0TW9kZS5SZWFkT25seSArXG5cdFx0XHRcdFx0XCInKSA6ICdcIiArXG5cdFx0XHRcdFx0RWRpdE1vZGUuRWRpdGFibGUgK1xuXHRcdFx0XHRcdFwiJ31cIjtcblx0XHRcdH1cblx0XHR9XG5cblx0XHRyZXR1cm4gc0VkaXRNb2RlO1xuXHR9LFxuXHQvKipcblx0ICogR2V0IHRoZSBjb21wbGV0ZSBtZXRhcGF0aCB0byB0aGUgdGFyZ2V0LlxuXHQgKlxuXHQgKiBAcGFyYW0gdGFyZ2V0XG5cdCAqIEBwYXJhbSBvSW50ZXJmYWNlXG5cdCAqIEByZXR1cm5zIFRoZSBtZXRhcGF0aFxuXHQgKi9cblx0Z2V0TWV0YVBhdGg6IGZ1bmN0aW9uICh0YXJnZXQ6IGFueSwgb0ludGVyZmFjZTogYW55KSB7XG5cdFx0cmV0dXJuIChvSW50ZXJmYWNlICYmIG9JbnRlcmZhY2UuY29udGV4dCAmJiBvSW50ZXJmYWNlLmNvbnRleHQuZ2V0UGF0aCgpKSB8fCB1bmRlZmluZWQ7XG5cdH0sXG5cdGlzRGVza3RvcDogZnVuY3Rpb24gKCkge1xuXHRcdHJldHVybiBzeXN0ZW0uZGVza3RvcCA9PT0gdHJ1ZTtcblx0fSxcblx0Z2V0VGFyZ2V0Q29sbGVjdGlvblBhdGg6IGZ1bmN0aW9uIChjb250ZXh0OiBDb250ZXh0LCBuYXZDb2xsZWN0aW9uPzogYW55KSB7XG5cdFx0bGV0IHNQYXRoID0gY29udGV4dC5nZXRQYXRoKCk7XG5cdFx0aWYgKFxuXHRcdFx0Y29udGV4dC5nZXRNZXRhZGF0YSgpLmdldE5hbWUoKSA9PT0gXCJzYXAudWkubW9kZWwuQ29udGV4dFwiICYmXG5cdFx0XHQoKGNvbnRleHQuZ2V0T2JqZWN0KFwiJGtpbmRcIikgYXMgdW5rbm93biBhcyBzdHJpbmcpID09PSBcIkVudGl0eVNldFwiIHx8XG5cdFx0XHRcdChjb250ZXh0LmdldE9iamVjdChcIiRDb250YWluc1RhcmdldFwiKSBhcyB1bmtub3duIGFzIGJvb2xlYW4pID09PSB0cnVlKVxuXHRcdCkge1xuXHRcdFx0cmV0dXJuIHNQYXRoO1xuXHRcdH1cblx0XHRpZiAoY29udGV4dC5nZXRNb2RlbCkge1xuXHRcdFx0c1BhdGggPVxuXHRcdFx0XHQoY29udGV4dC5nZXRNb2RlbCgpLmdldE1ldGFQYXRoICYmIGNvbnRleHQuZ2V0TW9kZWwoKS5nZXRNZXRhUGF0aChzUGF0aCkpIHx8XG5cdFx0XHRcdGNvbnRleHQuZ2V0TW9kZWwoKS5nZXRNZXRhTW9kZWwoKSEuZ2V0TWV0YVBhdGgoc1BhdGgpO1xuXHRcdH1cblx0XHQvL1N1cHBvcnRpbmcgc1BhdGggb2YgYW55IGZvcm1hdCwgZWl0aGVyICcvPGVudGl0eVNldD4vPG5hdmlnYXRpb25Db2xsZWN0aW9uPicgPE9SPiAnLzxlbnRpdHlTZXQ+LyRUeXBlLzxuYXZpZ2F0aW9uQ29sbGVjdGlvbj4nXG5cdFx0Y29uc3QgYVBhcnRzID0gc1BhdGguc3BsaXQoXCIvXCIpLmZpbHRlcihmdW5jdGlvbiAoc1BhcnQ6IGFueSkge1xuXHRcdFx0cmV0dXJuIHNQYXJ0ICYmIHNQYXJ0ICE9IFwiJFR5cGVcIjtcblx0XHR9KTsgLy9maWx0ZXIgb3V0IGVtcHR5IHN0cmluZ3MgYW5kIHBhcnRzIHJlZmVycmluZyB0byAnJFR5cGUnXG5cdFx0Y29uc3QgZW50aXR5U2V0ID0gYC8ke2FQYXJ0c1swXX1gO1xuXHRcdGlmIChhUGFydHMubGVuZ3RoID09PSAxKSB7XG5cdFx0XHRyZXR1cm4gZW50aXR5U2V0O1xuXHRcdH1cblx0XHRjb25zdCBuYXZpZ2F0aW9uQ29sbGVjdGlvbiA9IG5hdkNvbGxlY3Rpb24gPT09IHVuZGVmaW5lZCA/IGFQYXJ0cy5zbGljZSgxKS5qb2luKFwiLyROYXZpZ2F0aW9uUHJvcGVydHlCaW5kaW5nL1wiKSA6IG5hdkNvbGxlY3Rpb247XG5cdFx0cmV0dXJuIGAke2VudGl0eVNldH0vJE5hdmlnYXRpb25Qcm9wZXJ0eUJpbmRpbmcvJHtuYXZpZ2F0aW9uQ29sbGVjdGlvbn1gOyAvLyB1c2VkIGluIGdvdG9UYXJnZXRFbnRpdHlTZXQgbWV0aG9kIGluIHRoZSBzYW1lIGZpbGVcblx0fSxcblxuXHRpc1Byb3BlcnR5RmlsdGVyYWJsZTogZnVuY3Rpb24gKGNvbnRleHQ6IENvbnRleHQsIG9EYXRhRmllbGQ/OiBhbnkpIHtcblx0XHRjb25zdCBvTW9kZWwgPSBjb250ZXh0LmdldE1vZGVsKCkgYXMgT0RhdGFNZXRhTW9kZWwsXG5cdFx0XHRzUHJvcGVydHlQYXRoID0gY29udGV4dC5nZXRQYXRoKCksXG5cdFx0XHQvLyBMb2FjYXRpb25QYXRoIHdvdWxkIGJlIHRoZSBwcmVmaXggb2Ygc1Byb3BlcnR5UGF0aCwgZXhhbXBsZTogc1Byb3BlcnR5UGF0aCA9ICcvQ3VzdG9tZXIvU2V0L05hbWUnIC0+IHNQcm9wZXJ0eUxvY2F0aW9uUGF0aCA9ICcvQ3VzdG9tZXIvU2V0J1xuXHRcdFx0c1Byb3BlcnR5TG9jYXRpb25QYXRoID0gQ29tbW9uSGVscGVyLmdldExvY2F0aW9uRm9yUHJvcGVydHlQYXRoKG9Nb2RlbCwgc1Byb3BlcnR5UGF0aCksXG5cdFx0XHRzUHJvcGVydHkgPSBzUHJvcGVydHlQYXRoLnJlcGxhY2UoYCR7c1Byb3BlcnR5TG9jYXRpb25QYXRofS9gLCBcIlwiKTtcblxuXHRcdGlmIChcblx0XHRcdG9EYXRhRmllbGQgJiZcblx0XHRcdChvRGF0YUZpZWxkLiRUeXBlID09PSBcImNvbS5zYXAudm9jYWJ1bGFyaWVzLlVJLnYxLkRhdGFGaWVsZEZvckFjdGlvblwiIHx8XG5cdFx0XHRcdG9EYXRhRmllbGQuJFR5cGUgPT09IFwiY29tLnNhcC52b2NhYnVsYXJpZXMuVUkudjEuRGF0YUZpZWxkRm9ySW50ZW50QmFzZWROYXZpZ2F0aW9uXCIpXG5cdFx0KSB7XG5cdFx0XHRyZXR1cm4gZmFsc2U7XG5cdFx0fVxuXG5cdFx0cmV0dXJuIGlzUHJvcGVydHlGaWx0ZXJhYmxlKG9Nb2RlbCwgc1Byb3BlcnR5TG9jYXRpb25QYXRoLCBzUHJvcGVydHkpO1xuXHR9LFxuXG5cdGdldExvY2F0aW9uRm9yUHJvcGVydHlQYXRoOiBmdW5jdGlvbiAob01vZGVsOiBhbnksIHNQcm9wZXJ0eVBhdGg6IGFueSkge1xuXHRcdGxldCBpTGVuZ3RoO1xuXHRcdGxldCBzQ29sbGVjdGlvblBhdGggPSBzUHJvcGVydHlQYXRoLnNsaWNlKDAsIHNQcm9wZXJ0eVBhdGgubGFzdEluZGV4T2YoXCIvXCIpKTtcblx0XHRpZiAob01vZGVsLmdldE9iamVjdChgJHtzQ29sbGVjdGlvblBhdGh9LyRraW5kYCkgPT09IFwiRW50aXR5Q29udGFpbmVyXCIpIHtcblx0XHRcdGlMZW5ndGggPSBzQ29sbGVjdGlvblBhdGgubGVuZ3RoICsgMTtcblx0XHRcdHNDb2xsZWN0aW9uUGF0aCA9IHNQcm9wZXJ0eVBhdGguc2xpY2UoaUxlbmd0aCwgc1Byb3BlcnR5UGF0aC5pbmRleE9mKFwiL1wiLCBpTGVuZ3RoKSk7XG5cdFx0fVxuXHRcdHJldHVybiBzQ29sbGVjdGlvblBhdGg7XG5cdH0sXG5cdGdvdG9BY3Rpb25QYXJhbWV0ZXI6IGZ1bmN0aW9uIChvQ29udGV4dDogYW55KSB7XG5cdFx0Y29uc3Qgc1BhdGggPSBvQ29udGV4dC5nZXRQYXRoKCksXG5cdFx0XHRzUHJvcGVydHlOYW1lID0gb0NvbnRleHQuZ2V0T2JqZWN0KGAke3NQYXRofS8kTmFtZWApO1xuXG5cdFx0cmV0dXJuIENvbW1vblV0aWxzLmdldFBhcmFtZXRlclBhdGgoc1BhdGgsIHNQcm9wZXJ0eU5hbWUpO1xuXHR9LFxuXHQvKipcblx0ICogUmV0dXJucyB0aGUgZW50aXR5IHNldCBuYW1lIGZyb20gdGhlIGVudGl0eSB0eXBlIG5hbWUuXG5cdCAqXG5cdCAqIEBwYXJhbSBvTWV0YU1vZGVsIE9EYXRhIHY0IG1ldGFtb2RlbCBpbnN0YW5jZVxuXHQgKiBAcGFyYW0gc0VudGl0eVR5cGUgRW50aXR5VHlwZSBvZiB0aGUgYWN0aW9tXG5cdCAqIEByZXR1cm5zIFRoZSBFbnRpdHlTZXQgb2YgdGhlIGJvdW5kIGFjdGlvblxuXHQgKiBAcHJpdmF0ZVxuXHQgKiBAdWk1LXJlc3RyaWN0ZWRcblx0ICovXG5cdGdldEVudGl0eVNldE5hbWU6IGZ1bmN0aW9uIChvTWV0YU1vZGVsOiBPRGF0YU1ldGFNb2RlbCwgc0VudGl0eVR5cGU6IHN0cmluZykge1xuXHRcdGNvbnN0IG9FbnRpdHlDb250YWluZXIgPSBvTWV0YU1vZGVsLmdldE9iamVjdChcIi9cIik7XG5cdFx0Zm9yIChjb25zdCBrZXkgaW4gb0VudGl0eUNvbnRhaW5lcikge1xuXHRcdFx0aWYgKHR5cGVvZiBvRW50aXR5Q29udGFpbmVyW2tleV0gPT09IFwib2JqZWN0XCIgJiYgb0VudGl0eUNvbnRhaW5lcltrZXldLiRUeXBlID09PSBzRW50aXR5VHlwZSkge1xuXHRcdFx0XHRyZXR1cm4ga2V5O1xuXHRcdFx0fVxuXHRcdH1cblx0XHRyZXR1cm4gdW5kZWZpbmVkO1xuXHR9LFxuXHQvKipcblx0ICogUmV0dXJucyB0aGUgbWV0YW1vZGVsIHBhdGggY29ycmVjdGx5IGZvciBib3VuZCBhY3Rpb25zIGlmIHVzZWQgd2l0aCBiUmV0dXJuT25seVBhdGggYXMgdHJ1ZSxcblx0ICogZWxzZSByZXR1cm5zIGFuIG9iamVjdCB3aGljaCBoYXMgMyBwcm9wZXJ0aWVzIHJlbGF0ZWQgdG8gdGhlIGFjdGlvbi4gVGhleSBhcmUgdGhlIGVudGl0eSBzZXQgbmFtZSxcblx0ICogdGhlICRQYXRoIHZhbHVlIG9mIHRoZSBPcGVyYXRpb25BdmFpbGFibGUgYW5ub3RhdGlvbiBhbmQgdGhlIGJpbmRpbmcgcGFyYW1ldGVyIG5hbWUuIElmXG5cdCAqIGJDaGVja1N0YXRpY1ZhbHVlIGlzIHRydWUsIHJldHVybnMgdGhlIHN0YXRpYyB2YWx1ZSBvZiBPcGVyYXRpb25BdmFpbGFibGUgYW5ub3RhdGlvbiwgaWYgcHJlc2VudC5cblx0ICogZS5nLiBmb3IgYm91bmQgYWN0aW9uIHNvbWVOYW1lU3BhY2UuU29tZUJvdW5kQWN0aW9uXG5cdCAqIG9mIGVudGl0eSBzZXQgU29tZUVudGl0eVNldCwgdGhlIHN0cmluZyBcIi9Tb21lRW50aXR5U2V0L3NvbWVOYW1lU3BhY2UuU29tZUJvdW5kQWN0aW9uXCIgaXMgcmV0dXJuZWQuXG5cdCAqXG5cdCAqIEBwYXJhbSBvQWN0aW9uIFRoZSBjb250ZXh0IG9iamVjdCBvZiB0aGUgYWN0aW9uXG5cdCAqIEBwYXJhbSBiUmV0dXJuT25seVBhdGggSWYgZmFsc2UsIGFkZGl0aW9uYWwgaW5mbyBpcyByZXR1cm5lZCBhbG9uZyB3aXRoIG1ldGFtb2RlbCBwYXRoIHRvIHRoZSBib3VuZCBhY3Rpb25cblx0ICogQHBhcmFtIHNBY3Rpb25OYW1lIFRoZSBuYW1lIG9mIHRoZSBib3VuZCBhY3Rpb24gb2YgdGhlIGZvcm0gc29tZU5hbWVTcGFjZS5Tb21lQm91bmRBY3Rpb25cblx0ICogQHBhcmFtIGJDaGVja1N0YXRpY1ZhbHVlIElmIHRydWUsIHRoZSBzdGF0aWMgdmFsdWUgb2YgT3BlcmF0aW9uQXZhaWxhYmxlIGlzIHJldHVybmVkLCBpZiBwcmVzZW50XG5cdCAqIEByZXR1cm5zIFRoZSBzdHJpbmcgb3Igb2JqZWN0IGFzIHNwZWNpZmllZCBieSBiUmV0dXJuT25seVBhdGhcblx0ICogQHByaXZhdGVcblx0ICogQHVpNS1yZXN0cmljdGVkXG5cdCAqL1xuXHRnZXRBY3Rpb25QYXRoOiBmdW5jdGlvbiAob0FjdGlvbjogYW55LCBiUmV0dXJuT25seVBhdGg6IGJvb2xlYW4sIHNBY3Rpb25OYW1lPzogc3RyaW5nLCBiQ2hlY2tTdGF0aWNWYWx1ZT86IGJvb2xlYW4pIHtcblx0XHRsZXQgc0NvbnRleHRQYXRoID0gb0FjdGlvbi5nZXRQYXRoKCkuc3BsaXQoXCIvQFwiKVswXTtcblxuXHRcdHNBY3Rpb25OYW1lID0gIXNBY3Rpb25OYW1lID8gb0FjdGlvbi5nZXRPYmplY3Qob0FjdGlvbi5nZXRQYXRoKCkpIDogc0FjdGlvbk5hbWU7XG5cblx0XHRpZiAoc0FjdGlvbk5hbWUgJiYgc0FjdGlvbk5hbWUuaW5kZXhPZihcIihcIikgPiAtMSkge1xuXHRcdFx0Ly8gYWN0aW9uIGJvdW5kIHRvIGFub3RoZXIgZW50aXR5IHR5cGVcblx0XHRcdHNBY3Rpb25OYW1lID0gc0FjdGlvbk5hbWUuc3BsaXQoXCIoXCIpWzBdO1xuXHRcdH0gZWxzZSBpZiAob0FjdGlvbi5nZXRPYmplY3Qoc0NvbnRleHRQYXRoKSkge1xuXHRcdFx0Ly8gVE9ETzogdGhpcyBsb2dpYyBzb3VuZHMgd3JvbmcsIHRvIGJlIGNvcnJlY3RlZFxuXHRcdFx0Y29uc3Qgc0VudGl0eVR5cGVOYW1lID0gb0FjdGlvbi5nZXRPYmplY3Qoc0NvbnRleHRQYXRoKS4kVHlwZTtcblx0XHRcdGNvbnN0IHNFbnRpdHlOYW1lID0gdGhpcy5nZXRFbnRpdHlTZXROYW1lKG9BY3Rpb24uZ2V0TW9kZWwoKSwgc0VudGl0eVR5cGVOYW1lKTtcblx0XHRcdGlmIChzRW50aXR5TmFtZSkge1xuXHRcdFx0XHRzQ29udGV4dFBhdGggPSBgLyR7c0VudGl0eU5hbWV9YDtcblx0XHRcdH1cblx0XHR9IGVsc2Uge1xuXHRcdFx0cmV0dXJuIHNDb250ZXh0UGF0aDtcblx0XHR9XG5cblx0XHRpZiAoYkNoZWNrU3RhdGljVmFsdWUpIHtcblx0XHRcdHJldHVybiBvQWN0aW9uLmdldE9iamVjdChgJHtzQ29udGV4dFBhdGh9LyR7c0FjdGlvbk5hbWV9QE9yZy5PRGF0YS5Db3JlLlYxLk9wZXJhdGlvbkF2YWlsYWJsZWApO1xuXHRcdH1cblx0XHRpZiAoYlJldHVybk9ubHlQYXRoKSB7XG5cdFx0XHRyZXR1cm4gYCR7c0NvbnRleHRQYXRofS8ke3NBY3Rpb25OYW1lfWA7XG5cdFx0fSBlbHNlIHtcblx0XHRcdHJldHVybiB7XG5cdFx0XHRcdHNDb250ZXh0UGF0aDogc0NvbnRleHRQYXRoLFxuXHRcdFx0XHRzUHJvcGVydHk6IG9BY3Rpb24uZ2V0T2JqZWN0KGAke3NDb250ZXh0UGF0aH0vJHtzQWN0aW9uTmFtZX1AT3JnLk9EYXRhLkNvcmUuVjEuT3BlcmF0aW9uQXZhaWxhYmxlLyRQYXRoYCksXG5cdFx0XHRcdHNCaW5kaW5nUGFyYW1ldGVyOiBvQWN0aW9uLmdldE9iamVjdChgJHtzQ29udGV4dFBhdGh9LyR7c0FjdGlvbk5hbWV9L0AkdWk1Lm92ZXJsb2FkLzAvJFBhcmFtZXRlci8wLyROYW1lYClcblx0XHRcdH07XG5cdFx0fVxuXHR9LFxuXG5cdGdldE5hdmlnYXRpb25Db250ZXh0OiBmdW5jdGlvbiAob0NvbnRleHQ6IGFueSkge1xuXHRcdHJldHVybiBPRGF0YU1vZGVsQW5ub3RhdGlvbkhlbHBlci5nZXROYXZpZ2F0aW9uUGF0aChvQ29udGV4dC5nZXRQYXRoKCkpO1xuXHR9LFxuXG5cdC8qKlxuXHQgKiBSZXR1cm5zIHRoZSBwYXRoIHdpdGhvdXQgdGhlIGVudGl0eSB0eXBlIChwb3RlbnRpYWxseSBmaXJzdCkgYW5kIHByb3BlcnR5IChsYXN0KSBwYXJ0IChvcHRpb25hbCkuXG5cdCAqIFRoZSByZXN1bHQgY2FuIGJlIGFuIGVtcHR5IHN0cmluZyBpZiBpdCBpcyBhIHNpbXBsZSBkaXJlY3QgcHJvcGVydHkuXG5cdCAqXG5cdCAqIElmIGFuZCBvbmx5IGlmIHRoZSBnaXZlbiBwcm9wZXJ0eSBwYXRoIHN0YXJ0cyB3aXRoIGEgc2xhc2ggKC8pLCBpdCBpcyBjb25zaWRlcmVkIHRoYXQgdGhlIGVudGl0eSB0eXBlXG5cdCAqIGlzIHBhcnQgb2YgdGhlIHBhdGggYW5kIHdpbGwgYmUgc3RyaXBwZWQgYXdheS5cblx0ICpcblx0ICogQHBhcmFtIHNQcm9wZXJ0eVBhdGhcblx0ICogQHBhcmFtIGJLZWVwUHJvcGVydHlcblx0ICogQHJldHVybnMgVGhlIG5hdmlnYXRpb24gcGF0aFxuXHQgKi9cblx0Z2V0TmF2aWdhdGlvblBhdGg6IGZ1bmN0aW9uIChzUHJvcGVydHlQYXRoOiBhbnksIGJLZWVwUHJvcGVydHk/OiBib29sZWFuKSB7XG5cdFx0Y29uc3QgYlN0YXJ0c1dpdGhFbnRpdHlUeXBlID0gc1Byb3BlcnR5UGF0aC5zdGFydHNXaXRoKFwiL1wiKTtcblx0XHRjb25zdCBhUGFydHMgPSBzUHJvcGVydHlQYXRoLnNwbGl0KFwiL1wiKS5maWx0ZXIoZnVuY3Rpb24gKHBhcnQ6IGFueSkge1xuXHRcdFx0cmV0dXJuICEhcGFydDtcblx0XHR9KTtcblx0XHRpZiAoYlN0YXJ0c1dpdGhFbnRpdHlUeXBlKSB7XG5cdFx0XHRhUGFydHMuc2hpZnQoKTtcblx0XHR9XG5cdFx0aWYgKCFiS2VlcFByb3BlcnR5KSB7XG5cdFx0XHRhUGFydHMucG9wKCk7XG5cdFx0fVxuXHRcdHJldHVybiBhUGFydHMuam9pbihcIi9cIik7XG5cdH0sXG5cblx0LyoqXG5cdCAqIFJldHVybnMgdGhlIGNvcnJlY3QgbWV0YW1vZGVsIHBhdGggZm9yIGJvdW5kIGFjdGlvbnMuXG5cdCAqXG5cdCAqIFNpbmNlIHRoaXMgbWV0aG9kIGlzIGNhbGxlZCBpcnJlc3BlY3RpdmUgb2YgdGhlIGFjdGlvbiB0eXBlLCB0aGlzIHdpbGwgYmUgYXBwbGllZCB0byB1bmJvdW5kIGFjdGlvbnMuXG5cdCAqIEluIHN1Y2ggYSBjYXNlLCBpZiBhbiBpbmNvcnJlY3QgcGF0aCBpcyByZXR1cm5lZCwgaXQgaXMgaWdub3JlZCBkdXJpbmcgdGVtcGxhdGluZy5cblx0ICpcblx0ICogRXhhbXBsZTogZm9yIHRoZSBib3VuZCBhY3Rpb24gc29tZU5hbWVTcGFjZS5Tb21lQm91bmRBY3Rpb24gb2YgZW50aXR5IHNldCBTb21lRW50aXR5U2V0LFxuXHQgKiB0aGUgc3RyaW5nIFwiL1NvbWVFbnRpdHlTZXQvc29tZU5hbWVTcGFjZS5Tb21lQm91bmRBY3Rpb25cIiBpcyByZXR1cm5lZC5cblx0ICpcblx0ICogQGZ1bmN0aW9uXG5cdCAqIEBzdGF0aWNcblx0ICogQG5hbWUgc2FwLmZlLm1hY3Jvcy5Db21tb25IZWxwZXIuZ2V0QWN0aW9uQ29udGV4dFxuXHQgKiBAbWVtYmVyb2Ygc2FwLmZlLm1hY3Jvcy5Db21tb25IZWxwZXJcblx0ICogQHBhcmFtIG9BY3Rpb24gQ29udGV4dCBvYmplY3QgZm9yIHRoZSBhY3Rpb25cblx0ICogQHJldHVybnMgQ29ycmVjdCBtZXRhbW9kZWwgcGF0aCBmb3IgYm91bmQgYW5kIGluY29ycmVjdCBwYXRoIGZvciB1bmJvdW5kIGFjdGlvbnNcblx0ICogQHByaXZhdGVcblx0ICogQHVpNS1yZXN0cmljdGVkXG5cdCAqL1xuXHRnZXRBY3Rpb25Db250ZXh0OiBmdW5jdGlvbiAob0FjdGlvbjogb2JqZWN0KSB7XG5cdFx0cmV0dXJuIENvbW1vbkhlbHBlci5nZXRBY3Rpb25QYXRoKG9BY3Rpb24sIHRydWUpO1xuXHR9LFxuXHQvKipcblx0ICogUmV0dXJucyB0aGUgbWV0YW1vZGVsIHBhdGggY29ycmVjdGx5IGZvciBvdmVybG9hZGVkIGJvdW5kIGFjdGlvbnMuIEZvciB1bmJvdW5kIGFjdGlvbnMsXG5cdCAqIHRoZSBpbmNvcnJlY3QgcGF0aCBpcyByZXR1cm5lZCwgYnV0IGlnbm9yZWQgZHVyaW5nIHRlbXBsYXRpbmcuXG5cdCAqIGUuZy4gZm9yIGJvdW5kIGFjdGlvbiBzb21lTmFtZVNwYWNlLlNvbWVCb3VuZEFjdGlvbiBvZiBlbnRpdHkgc2V0IFNvbWVFbnRpdHlTZXQsXG5cdCAqIHRoZSBzdHJpbmcgXCIvU29tZUVudGl0eVNldC9zb21lTmFtZVNwYWNlLlNvbWVCb3VuZEFjdGlvbi9AJHVpNS5vdmVybG9hZC8wXCIgaXMgcmV0dXJuZWQuXG5cdCAqXG5cdCAqIEBmdW5jdGlvblxuXHQgKiBAc3RhdGljXG5cdCAqIEBuYW1lIHNhcC5mZS5tYWNyb3MuQ29tbW9uSGVscGVyLmdldFBhdGhUb0JvdW5kQWN0aW9uT3ZlcmxvYWRcblx0ICogQG1lbWJlcm9mIHNhcC5mZS5tYWNyb3MuQ29tbW9uSGVscGVyXG5cdCAqIEBwYXJhbSBvQWN0aW9uIFRoZSBjb250ZXh0IG9iamVjdCBmb3IgdGhlIGFjdGlvblxuXHQgKiBAcmV0dXJucyBUaGUgY29ycmVjdCBtZXRhbW9kZWwgcGF0aCBmb3IgYm91bmQgYWN0aW9uIG92ZXJsb2FkIGFuZCBpbmNvcnJlY3QgcGF0aCBmb3IgdW5ib3VuZCBhY3Rpb25zXG5cdCAqIEBwcml2YXRlXG5cdCAqIEB1aTUtcmVzdHJpY3RlZFxuXHQgKi9cblx0Z2V0UGF0aFRvQm91bmRBY3Rpb25PdmVybG9hZDogZnVuY3Rpb24gKG9BY3Rpb246IG9iamVjdCkge1xuXHRcdGNvbnN0IHNQYXRoID0gQ29tbW9uSGVscGVyLmdldEFjdGlvblBhdGgob0FjdGlvbiwgdHJ1ZSk7XG5cdFx0cmV0dXJuIGAke3NQYXRofS9AJHVpNS5vdmVybG9hZC8wYDtcblx0fSxcblxuXHQvKipcblx0ICogUmV0dXJucyB0aGUgc3RyaW5nIHdpdGggc2luZ2xlIHF1b3Rlcy5cblx0ICpcblx0ICogQGZ1bmN0aW9uXG5cdCAqIEBtZW1iZXJvZiBzYXAuZmUubWFjcm9zLkNvbW1vbkhlbHBlclxuXHQgKiBAcGFyYW0gc1ZhbHVlIFNvbWUgc3RyaW5nIHRoYXQgbmVlZHMgdG8gYmUgY29udmVydGVkIGludG8gc2luZ2xlIHF1b3Rlc1xuXHQgKiBAcGFyYW0gW2JFc2NhcGVdIFNob3VsZCB0aGUgc3RyaW5nIGJlIGVzY2FwZWQgYmVmb3JlaGFuZFxuXHQgKiBAcmV0dXJucyAtIFN0cmluZyB3aXRoIHNpbmdsZSBxdW90ZXNcblx0ICovXG5cdGFkZFNpbmdsZVF1b3RlczogZnVuY3Rpb24gKHNWYWx1ZTogc3RyaW5nLCBiRXNjYXBlPzogYm9vbGVhbikge1xuXHRcdGlmIChiRXNjYXBlICYmIHNWYWx1ZSkge1xuXHRcdFx0c1ZhbHVlID0gdGhpcy5lc2NhcGVTaW5nbGVRdW90ZXMoc1ZhbHVlKTtcblx0XHR9XG5cdFx0cmV0dXJuIGAnJHtzVmFsdWV9J2A7XG5cdH0sXG5cblx0LyoqXG5cdCAqIFJldHVybnMgdGhlIHN0cmluZyB3aXRoIGVzY2FwZWQgc2luZ2xlIHF1b3Rlcy5cblx0ICpcblx0ICogQGZ1bmN0aW9uXG5cdCAqIEBtZW1iZXJvZiBzYXAuZmUubWFjcm9zLkNvbW1vbkhlbHBlclxuXHQgKiBAcGFyYW0gc1ZhbHVlIFNvbWUgc3RyaW5nIHRoYXQgbmVlZHMgZXNjYXBpbmcgb2Ygc2luZ2xlIHF1b3Rlc1xuXHQgKiBAcmV0dXJucyAtIFN0cmluZyB3aXRoIGVzY2FwZWQgc2luZ2xlIHF1b3Rlc1xuXHQgKi9cblx0ZXNjYXBlU2luZ2xlUXVvdGVzOiBmdW5jdGlvbiAoc1ZhbHVlOiBzdHJpbmcpIHtcblx0XHRyZXR1cm4gc1ZhbHVlLnJlcGxhY2UoL1snXS9nLCBcIlxcXFwnXCIpO1xuXHR9LFxuXG5cdC8qKlxuXHQgKiBSZXR1cm5zIHRoZSBmdW5jdGlvbiBzdHJpbmdcblx0ICogVGhlIGZpcnN0IGFyZ3VtZW50IG9mIGdlbmVyYXRlRnVuY3Rpb24gaXMgbmFtZSBvZiB0aGUgZ2VuZXJhdGVkIGZ1bmN0aW9uIHN0cmluZy5cblx0ICogUmVtYWluaW5nIGFyZ3VtZW50cyBvZiBnZW5lcmF0ZUZ1bmN0aW9uIGFyZSBhcmd1bWVudHMgb2YgdGhlIG5ld2x5IGdlbmVyYXRlZCBmdW5jdGlvbiBzdHJpbmcuXG5cdCAqXG5cdCAqIEBmdW5jdGlvblxuXHQgKiBAbWVtYmVyb2Ygc2FwLmZlLm1hY3Jvcy5Db21tb25IZWxwZXJcblx0ICogQHBhcmFtIHNGdW5jTmFtZSBTb21lIHN0cmluZyBmb3IgdGhlIGZ1bmN0aW9uIG5hbWVcblx0ICogQHBhcmFtIGFyZ3MgVGhlIHJlbWFpbmluZyBhcmd1bWVudHNcblx0ICogQHJldHVybnMgLSBGdW5jdGlvbiBzdHJpbmcgZGVwZW5kcyBvbiBhcmd1bWVudHMgcGFzc2VkXG5cdCAqL1xuXHRnZW5lcmF0ZUZ1bmN0aW9uOiBmdW5jdGlvbiAoc0Z1bmNOYW1lOiBzdHJpbmcsIC4uLmFyZ3M6IHN0cmluZ1tdKSB7XG5cdFx0bGV0IHNQYXJhbXMgPSBcIlwiO1xuXHRcdGZvciAobGV0IGkgPSAwOyBpIDwgYXJncy5sZW5ndGg7IGkrKykge1xuXHRcdFx0c1BhcmFtcyArPSBhcmdzW2ldO1xuXHRcdFx0aWYgKGkgPCBhcmdzLmxlbmd0aCAtIDEpIHtcblx0XHRcdFx0c1BhcmFtcyArPSBcIiwgXCI7XG5cdFx0XHR9XG5cdFx0fVxuXG5cdFx0bGV0IHNGdW5jdGlvbiA9IGAke3NGdW5jTmFtZX0oKWA7XG5cdFx0aWYgKHNQYXJhbXMpIHtcblx0XHRcdHNGdW5jdGlvbiA9IGAke3NGdW5jTmFtZX0oJHtzUGFyYW1zfSlgO1xuXHRcdH1cblx0XHRyZXR1cm4gc0Z1bmN0aW9uO1xuXHR9LFxuXHQvKlxuXHQgKiBSZXR1cm5zIHRoZSB2aXNpYmlsaXR5IGV4cHJlc3Npb24gZm9yIGRhdGFwb2ludCB0aXRsZS9saW5rXG5cdCAqXG5cdCAqIEBmdW5jdGlvblxuXHQgKiBAcGFyYW0ge3N0cmluZ30gW3NQYXRoXSBhbm5vdGF0aW9uIHBhdGggb2YgZGF0YSBwb2ludCBvciBNaWNyb2NoYXJ0XG5cdCAqIEBwYXJhbSB7Ym9vbGVhbn0gW2JMaW5rXSB0cnVlIGlmIGxpbmsgdmlzaWJpbGl0eSBpcyBiZWluZyBkZXRlcm1pbmVkLCBmYWxzZSBpZiB0aXRsZSB2aXNpYmlsaXR5IGlzIGJlaW5nIGRldGVybWluZWRcblx0ICogQHBhcmFtIHtib29sZWFufSBbYkZpZWxkVmlzaWJpbGl0eV0gdHJ1ZSBpZiBmaWVsZCBpcyB2c2lpYmxlLCBmYWxzZSBvdGhlcndpc2Vcblx0ICogQHJldHVybnMgIHtzdHJpbmd9IHNWaXNpYmlsaXR5RXhwIFVzZWQgdG8gZ2V0IHRoZSAgdmlzaWJpbGl0eSBiaW5kaW5nIGZvciBEYXRhUG9pbnRzIHRpdGxlIGluIHRoZSBIZWFkZXIuXG5cdCAqXG5cdCAqL1xuXG5cdGdldEhlYWRlckRhdGFQb2ludExpbmtWaXNpYmlsaXR5OiBmdW5jdGlvbiAoc1BhdGg6IGFueSwgYkxpbms6IGFueSwgYkZpZWxkVmlzaWJpbGl0eTogYW55KSB7XG5cdFx0bGV0IHNWaXNpYmlsaXR5RXhwO1xuXHRcdGlmIChiRmllbGRWaXNpYmlsaXR5KSB7XG5cdFx0XHRzVmlzaWJpbGl0eUV4cCA9IGJMaW5rXG5cdFx0XHRcdD8gXCJ7PSAke2ludGVybmFsPmlzSGVhZGVyRFBMaW5rVmlzaWJsZS9cIiArIHNQYXRoICsgXCJ9ID09PSB0cnVlICYmIFwiICsgYkZpZWxkVmlzaWJpbGl0eSArIFwifVwiXG5cdFx0XHRcdDogXCJ7PSAke2ludGVybmFsPmlzSGVhZGVyRFBMaW5rVmlzaWJsZS9cIiArIHNQYXRoICsgXCJ9ICE9PSB0cnVlICYmIFwiICsgYkZpZWxkVmlzaWJpbGl0eSArIFwifVwiO1xuXHRcdH0gZWxzZSB7XG5cdFx0XHRzVmlzaWJpbGl0eUV4cCA9IGJMaW5rXG5cdFx0XHRcdD8gXCJ7PSAke2ludGVybmFsPmlzSGVhZGVyRFBMaW5rVmlzaWJsZS9cIiArIHNQYXRoICsgXCJ9ID09PSB0cnVlfVwiXG5cdFx0XHRcdDogXCJ7PSAke2ludGVybmFsPmlzSGVhZGVyRFBMaW5rVmlzaWJsZS9cIiArIHNQYXRoICsgXCJ9ICE9PSB0cnVlfVwiO1xuXHRcdH1cblx0XHRyZXR1cm4gc1Zpc2liaWxpdHlFeHA7XG5cdH0sXG5cblx0LyoqXG5cdCAqIENvbnZlcnRzIG9iamVjdCB0byBzdHJpbmcoZGlmZmVyZW50IGZyb20gSlNPTi5zdHJpbmdpZnkgb3IudG9TdHJpbmcpLlxuXHQgKlxuXHQgKiBAZnVuY3Rpb25cblx0ICogQG1lbWJlcm9mIHNhcC5mZS5tYWNyb3MuQ29tbW9uSGVscGVyXG5cdCAqIEBwYXJhbSBvUGFyYW1zIFNvbWUgb2JqZWN0XG5cdCAqIEByZXR1cm5zIC0gT2JqZWN0IHN0cmluZ1xuXHQgKi9cblx0b2JqZWN0VG9TdHJpbmc6IGZ1bmN0aW9uIChvUGFyYW1zOiBhbnkpIHtcblx0XHRsZXQgaU51bWJlck9mS2V5cyA9IE9iamVjdC5rZXlzKG9QYXJhbXMpLmxlbmd0aCxcblx0XHRcdHNQYXJhbXMgPSBcIlwiO1xuXG5cdFx0Zm9yIChjb25zdCBzS2V5IGluIG9QYXJhbXMpIHtcblx0XHRcdGxldCBzVmFsdWUgPSBvUGFyYW1zW3NLZXldO1xuXHRcdFx0aWYgKHNWYWx1ZSAmJiB0eXBlb2Ygc1ZhbHVlID09PSBcIm9iamVjdFwiKSB7XG5cdFx0XHRcdHNWYWx1ZSA9IHRoaXMub2JqZWN0VG9TdHJpbmcoc1ZhbHVlKTtcblx0XHRcdH1cblx0XHRcdHNQYXJhbXMgKz0gYCR7c0tleX06ICR7c1ZhbHVlfWA7XG5cdFx0XHRpZiAoaU51bWJlck9mS2V5cyA+IDEpIHtcblx0XHRcdFx0LS1pTnVtYmVyT2ZLZXlzO1xuXHRcdFx0XHRzUGFyYW1zICs9IFwiLCBcIjtcblx0XHRcdH1cblx0XHR9XG5cblx0XHRyZXR1cm4gYHsgJHtzUGFyYW1zfX1gO1xuXHR9LFxuXG5cdC8qKlxuXHQgKiBSZW1vdmVzIGVzY2FwZSBjaGFyYWN0ZXJzIChcXCkgZnJvbSBhbiBleHByZXNzaW9uLlxuXHQgKlxuXHQgKiBAZnVuY3Rpb25cblx0ICogQG1lbWJlcm9mIHNhcC5mZS5tYWNyb3MuQ29tbW9uSGVscGVyXG5cdCAqIEBwYXJhbSBzRXhwcmVzc2lvbiBBbiBleHByZXNzaW9uIHdpdGggZXNjYXBlIGNoYXJhY3RlcnNcblx0ICogQHJldHVybnMgRXhwcmVzc2lvbiBzdHJpbmcgd2l0aG91dCBlc2NhcGUgY2hhcmFjdGVycyBvciB1bmRlZmluZWRcblx0ICovXG5cdHJlbW92ZUVzY2FwZUNoYXJhY3RlcnM6IGZ1bmN0aW9uIChzRXhwcmVzc2lvbjogc3RyaW5nKSB7XG5cdFx0cmV0dXJuIHNFeHByZXNzaW9uID8gc0V4cHJlc3Npb24ucmVwbGFjZSgvXFxcXD9cXFxcKFt7fV0pL2csIFwiJDFcIikgOiB1bmRlZmluZWQ7XG5cdH0sXG5cblx0LyoqXG5cdCAqIE1ha2VzIHVwZGF0ZXMgdG8gYSBzdHJpbmdpZmllZCBvYmplY3Qgc28gdGhhdCBpdCB3b3JrcyBwcm9wZXJseSBpbiBhIHRlbXBsYXRlIGJ5IGFkZGluZyB1aTVPYmplY3Q6dHJ1ZS5cblx0ICpcblx0ICogQHBhcmFtIHNTdHJpbmdpZmllZFxuXHQgKiBAcmV0dXJucyBUaGUgdXBkYXRlZCBzdHJpbmcgcmVwcmVzZW50YXRpb24gb2YgdGhlIG9iamVjdFxuXHQgKi9cblx0c3RyaW5naWZ5T2JqZWN0OiBmdW5jdGlvbiAoc1N0cmluZ2lmaWVkOiBzdHJpbmcpIHtcblx0XHRpZiAoIXNTdHJpbmdpZmllZCB8fCBzU3RyaW5naWZpZWQgPT09IFwie31cIikge1xuXHRcdFx0cmV0dXJuIHVuZGVmaW5lZDtcblx0XHR9IGVsc2Uge1xuXHRcdFx0Y29uc3Qgb09iamVjdCA9IEpTT04ucGFyc2Uoc1N0cmluZ2lmaWVkKTtcblx0XHRcdGlmICh0eXBlb2Ygb09iamVjdCA9PT0gXCJvYmplY3RcIiAmJiAhQXJyYXkuaXNBcnJheShvT2JqZWN0KSkge1xuXHRcdFx0XHRjb25zdCBvVUk1T2JqZWN0ID0ge1xuXHRcdFx0XHRcdHVpNW9iamVjdDogdHJ1ZVxuXHRcdFx0XHR9O1xuXHRcdFx0XHRPYmplY3QuYXNzaWduKG9VSTVPYmplY3QsIG9PYmplY3QpO1xuXHRcdFx0XHRyZXR1cm4gSlNPTi5zdHJpbmdpZnkob1VJNU9iamVjdCk7XG5cdFx0XHR9IGVsc2Uge1xuXHRcdFx0XHRjb25zdCBzVHlwZSA9IEFycmF5LmlzQXJyYXkob09iamVjdCkgPyBcIkFycmF5XCIgOiB0eXBlb2Ygb09iamVjdDtcblx0XHRcdFx0TG9nLmVycm9yKGBVbmV4cGVjdGVkIG9iamVjdCB0eXBlIGluIHN0cmluZ2lmeU9iamVjdCAoJHtzVHlwZX0pIC0gb25seSB3b3JrcyB3aXRoIG9iamVjdGApO1xuXHRcdFx0XHR0aHJvdyBuZXcgRXJyb3IoXCJzdHJpbmdpZnlPYmplY3Qgb25seSB3b3JrcyB3aXRoIG9iamVjdHMhXCIpO1xuXHRcdFx0fVxuXHRcdH1cblx0fSxcblxuXHQvKipcblx0ICogQ3JlYXRlIGEgc3RyaW5nIHJlcHJlc2VudGF0aW9uIG9mIHRoZSBnaXZlbiBkYXRhLCB0YWtpbmcgY2FyZSB0aGF0IGl0IGlzIG5vdCB0cmVhdGVkIGFzIGEgYmluZGluZyBleHByZXNzaW9uLlxuXHQgKlxuXHQgKiBAcGFyYW0gdkRhdGEgVGhlIGRhdGEgdG8gc3RyaW5naWZ5XG5cdCAqIEByZXR1cm5zIFRoZSBzdHJpbmcgcmVwcmVzZW50YXRpb24gb2YgdGhlIGRhdGEuXG5cdCAqL1xuXHRzdHJpbmdpZnlDdXN0b21EYXRhOiBmdW5jdGlvbiAodkRhdGE6IG9iamVjdCB8IHN0cmluZyB8IHVuZGVmaW5lZCkge1xuXHRcdGNvbnN0IG9PYmplY3Q6IGFueSA9IHtcblx0XHRcdHVpNW9iamVjdDogdHJ1ZVxuXHRcdH07XG5cdFx0b09iamVjdFtcImN1c3RvbURhdGFcIl0gPSB2RGF0YSBpbnN0YW5jZW9mIENvbnRleHQgPyB2RGF0YS5nZXRPYmplY3QoKSA6IHZEYXRhO1xuXHRcdHJldHVybiBKU09OLnN0cmluZ2lmeShvT2JqZWN0KTtcblx0fSxcblxuXHQvKipcblx0ICogUGFyc2VzIHRoZSBnaXZlbiBkYXRhLCBwb3RlbnRpYWxseSB1bndyYXBzIHRoZSBkYXRhLlxuXHQgKlxuXHQgKiBAcGFyYW0gdkRhdGEgVGhlIGRhdGEgdG8gcGFyc2Vcblx0ICogQHJldHVybnMgVGhlIHJlc3VsdCBvZiB0aGUgZGF0YSBwYXJzaW5nXG5cdCAqL1xuXHRwYXJzZUN1c3RvbURhdGE6IGZ1bmN0aW9uICh2RGF0YTogYW55KSB7XG5cdFx0dkRhdGEgPSB0eXBlb2YgdkRhdGEgPT09IFwic3RyaW5nXCIgPyBKU09OLnBhcnNlKHZEYXRhKSA6IHZEYXRhO1xuXHRcdGlmICh2RGF0YSAmJiB2RGF0YS5oYXNPd25Qcm9wZXJ0eShcImN1c3RvbURhdGFcIikpIHtcblx0XHRcdHJldHVybiB2RGF0YVtcImN1c3RvbURhdGFcIl07XG5cdFx0fVxuXHRcdHJldHVybiB2RGF0YTtcblx0fSxcblx0Z2V0Q29udGV4dFBhdGg6IGZ1bmN0aW9uIChvVmFsdWU6IGFueSwgb0ludGVyZmFjZTogYW55KSB7XG5cdFx0Y29uc3Qgc1BhdGggPSBvSW50ZXJmYWNlICYmIG9JbnRlcmZhY2UuY29udGV4dCAmJiBvSW50ZXJmYWNlLmNvbnRleHQuZ2V0UGF0aCgpO1xuXHRcdHJldHVybiBzUGF0aFtzUGF0aC5sZW5ndGggLSAxXSA9PT0gXCIvXCIgPyBzUGF0aC5zbGljZSgwLCAtMSkgOiBzUGF0aDtcblx0fSxcblx0LyoqXG5cdCAqIFJldHVybnMgYSBzdHJpbmdpZmllZCBKU09OIG9iamVjdCBjb250YWluaW5nICBQcmVzZW50YXRpb24gVmFyaWFudCBzb3J0IGNvbmRpdGlvbnMuXG5cdCAqXG5cdCAqIEBwYXJhbSBvQ29udGV4dFxuXHQgKiBAcGFyYW0gb1ByZXNlbnRhdGlvblZhcmlhbnQgUHJlc2VudGF0aW9uIHZhcmlhbnQgQW5ub3RhdGlvblxuXHQgKiBAcGFyYW0gc1ByZXNlbnRhdGlvblZhcmlhbnRQYXRoXG5cdCAqIEByZXR1cm5zIFN0cmluZ2lmaWVkIEpTT04gb2JqZWN0XG5cdCAqL1xuXHRnZXRTb3J0Q29uZGl0aW9uczogZnVuY3Rpb24gKG9Db250ZXh0OiBhbnksIG9QcmVzZW50YXRpb25WYXJpYW50OiBhbnksIHNQcmVzZW50YXRpb25WYXJpYW50UGF0aDogc3RyaW5nKSB7XG5cdFx0aWYgKFxuXHRcdFx0b1ByZXNlbnRhdGlvblZhcmlhbnQgJiZcblx0XHRcdENvbW1vbkhlbHBlci5faXNQcmVzZW50YXRpb25WYXJpYW50QW5ub3RhdGlvbihzUHJlc2VudGF0aW9uVmFyaWFudFBhdGgpICYmXG5cdFx0XHRvUHJlc2VudGF0aW9uVmFyaWFudC5Tb3J0T3JkZXJcblx0XHQpIHtcblx0XHRcdGNvbnN0IGFTb3J0Q29uZGl0aW9uczogYW55ID0ge1xuXHRcdFx0XHRzb3J0ZXJzOiBbXVxuXHRcdFx0fTtcblxuXHRcdFx0Y29uc3Qgc0VudGl0eVBhdGggPSBvQ29udGV4dC5nZXRQYXRoKDApLnNwbGl0KFwiQFwiKVswXTtcblx0XHRcdG9QcmVzZW50YXRpb25WYXJpYW50LlNvcnRPcmRlci5mb3JFYWNoKGZ1bmN0aW9uIChvQ29uZGl0aW9uOiBhbnkgPSB7fSkge1xuXHRcdFx0XHRsZXQgb1NvcnRQcm9wZXJ0eTogYW55ID0ge307XG5cdFx0XHRcdGNvbnN0IG9Tb3J0ZXI6IGFueSA9IHt9O1xuXHRcdFx0XHRpZiAob0NvbmRpdGlvbi5EeW5hbWljUHJvcGVydHkpIHtcblx0XHRcdFx0XHRvU29ydFByb3BlcnR5ID0gb0NvbnRleHQuZ2V0TW9kZWwoMCkuZ2V0T2JqZWN0KHNFbnRpdHlQYXRoICsgb0NvbmRpdGlvbi5EeW5hbWljUHJvcGVydHkuJEFubm90YXRpb25QYXRoKT8uTmFtZTtcblx0XHRcdFx0fSBlbHNlIGlmIChvQ29uZGl0aW9uLlByb3BlcnR5KSB7XG5cdFx0XHRcdFx0b1NvcnRQcm9wZXJ0eSA9IG9Db25kaXRpb24uUHJvcGVydHkuJFByb3BlcnR5UGF0aDtcblx0XHRcdFx0fVxuXHRcdFx0XHRpZiAob1NvcnRQcm9wZXJ0eSkge1xuXHRcdFx0XHRcdG9Tb3J0ZXIubmFtZSA9IG9Tb3J0UHJvcGVydHk7XG5cdFx0XHRcdFx0b1NvcnRlci5kZXNjZW5kaW5nID0gISFvQ29uZGl0aW9uLkRlc2NlbmRpbmc7XG5cdFx0XHRcdFx0YVNvcnRDb25kaXRpb25zLnNvcnRlcnMucHVzaChvU29ydGVyKTtcblx0XHRcdFx0fSBlbHNlIHtcblx0XHRcdFx0XHR0aHJvdyBuZXcgRXJyb3IoXCJQbGVhc2UgZGVmaW5lIHRoZSByaWdodCBwYXRoIHRvIHRoZSBzb3J0IHByb3BlcnR5XCIpO1xuXHRcdFx0XHR9XG5cdFx0XHR9KTtcblx0XHRcdHJldHVybiBKU09OLnN0cmluZ2lmeShhU29ydENvbmRpdGlvbnMpO1xuXHRcdH1cblx0XHRyZXR1cm4gdW5kZWZpbmVkO1xuXHR9LFxuXHRfaXNQcmVzZW50YXRpb25WYXJpYW50QW5ub3RhdGlvbjogZnVuY3Rpb24gKGFubm90YXRpb25QYXRoOiBzdHJpbmcpIHtcblx0XHRyZXR1cm4gKFxuXHRcdFx0YW5ub3RhdGlvblBhdGguaW5kZXhPZihgQCR7VUlBbm5vdGF0aW9uVGVybXMuUHJlc2VudGF0aW9uVmFyaWFudH1gKSA+IC0xIHx8XG5cdFx0XHRhbm5vdGF0aW9uUGF0aC5pbmRleE9mKGBAJHtVSUFubm90YXRpb25UZXJtcy5TZWxlY3Rpb25QcmVzZW50YXRpb25WYXJpYW50fWApID4gLTFcblx0XHQpO1xuXHR9LFxuXHRjcmVhdGVQcmVzZW50YXRpb25QYXRoQ29udGV4dDogZnVuY3Rpb24gKG9QcmVzZW50YXRpb25Db250ZXh0OiBhbnkpIHtcblx0XHRjb25zdCBhUGF0aHMgPSBvUHJlc2VudGF0aW9uQ29udGV4dC5zUGF0aC5zcGxpdChcIkBcIikgfHwgW107XG5cdFx0Y29uc3Qgb01vZGVsID0gb1ByZXNlbnRhdGlvbkNvbnRleHQuZ2V0TW9kZWwoKTtcblx0XHRpZiAoYVBhdGhzLmxlbmd0aCAmJiBhUGF0aHNbYVBhdGhzLmxlbmd0aCAtIDFdLmluZGV4T2YoXCJjb20uc2FwLnZvY2FidWxhcmllcy5VSS52MS5TZWxlY3Rpb25QcmVzZW50YXRpb25WYXJpYW50XCIpID4gLTEpIHtcblx0XHRcdGNvbnN0IHNQYXRoID0gb1ByZXNlbnRhdGlvbkNvbnRleHQuc1BhdGguc3BsaXQoXCIvUHJlc2VudGF0aW9uVmFyaWFudFwiKVswXTtcblx0XHRcdHJldHVybiBvTW9kZWwuY3JlYXRlQmluZGluZ0NvbnRleHQoYCR7c1BhdGh9QHNhcHVpLm5hbWVgKTtcblx0XHR9XG5cdFx0cmV0dXJuIG9Nb2RlbC5jcmVhdGVCaW5kaW5nQ29udGV4dChgJHtvUHJlc2VudGF0aW9uQ29udGV4dC5zUGF0aH1Ac2FwdWkubmFtZWApO1xuXHR9LFxuXHRnZXRQcmVzc0hhbmRsZXJGb3JEYXRhRmllbGRGb3JJQk46IGZ1bmN0aW9uIChvRGF0YUZpZWxkOiBhbnksIHNDb250ZXh0Pzogc3RyaW5nLCBiTmF2aWdhdGVXaXRoQ29uZmlybWF0aW9uRGlhbG9nPzogYm9vbGVhbikge1xuXHRcdGNvbnN0IG1OYXZpZ2F0aW9uUGFyYW1ldGVyczogYW55ID0ge1xuXHRcdFx0bmF2aWdhdGlvbkNvbnRleHRzOiBzQ29udGV4dCA/IHNDb250ZXh0IDogXCIkeyRzb3VyY2U+L30uZ2V0QmluZGluZ0NvbnRleHQoKVwiXG5cdFx0fTtcblx0XHRpZiAob0RhdGFGaWVsZC5SZXF1aXJlc0NvbnRleHQgJiYgIW9EYXRhRmllbGQuSW5saW5lICYmIGJOYXZpZ2F0ZVdpdGhDb25maXJtYXRpb25EaWFsb2cpIHtcblx0XHRcdG1OYXZpZ2F0aW9uUGFyYW1ldGVycy5hcHBsaWNhYmxlQ29udGV4dHMgPVxuXHRcdFx0XHRcIiR7aW50ZXJuYWw+aWJuL1wiICsgb0RhdGFGaWVsZC5TZW1hbnRpY09iamVjdCArIFwiLVwiICsgb0RhdGFGaWVsZC5BY3Rpb24gKyBcIi9hQXBwbGljYWJsZS99XCI7XG5cdFx0XHRtTmF2aWdhdGlvblBhcmFtZXRlcnMubm90QXBwbGljYWJsZUNvbnRleHRzID1cblx0XHRcdFx0XCIke2ludGVybmFsPmlibi9cIiArIG9EYXRhRmllbGQuU2VtYW50aWNPYmplY3QgKyBcIi1cIiArIG9EYXRhRmllbGQuQWN0aW9uICsgXCIvYU5vdEFwcGxpY2FibGUvfVwiO1xuXHRcdFx0bU5hdmlnYXRpb25QYXJhbWV0ZXJzLmxhYmVsID0gdGhpcy5hZGRTaW5nbGVRdW90ZXMob0RhdGFGaWVsZC5MYWJlbCwgdHJ1ZSk7XG5cdFx0fVxuXHRcdGlmIChvRGF0YUZpZWxkLk1hcHBpbmcpIHtcblx0XHRcdG1OYXZpZ2F0aW9uUGFyYW1ldGVycy5zZW1hbnRpY09iamVjdE1hcHBpbmcgPSB0aGlzLmFkZFNpbmdsZVF1b3RlcyhKU09OLnN0cmluZ2lmeShvRGF0YUZpZWxkLk1hcHBpbmcpKTtcblx0XHR9XG5cdFx0cmV0dXJuIHRoaXMuZ2VuZXJhdGVGdW5jdGlvbihcblx0XHRcdGJOYXZpZ2F0ZVdpdGhDb25maXJtYXRpb25EaWFsb2cgPyBcIi5faW50ZW50QmFzZWROYXZpZ2F0aW9uLm5hdmlnYXRlV2l0aENvbmZpcm1hdGlvbkRpYWxvZ1wiIDogXCIuX2ludGVudEJhc2VkTmF2aWdhdGlvbi5uYXZpZ2F0ZVwiLFxuXHRcdFx0dGhpcy5hZGRTaW5nbGVRdW90ZXMob0RhdGFGaWVsZC5TZW1hbnRpY09iamVjdCksXG5cdFx0XHR0aGlzLmFkZFNpbmdsZVF1b3RlcyhvRGF0YUZpZWxkLkFjdGlvbiksXG5cdFx0XHR0aGlzLm9iamVjdFRvU3RyaW5nKG1OYXZpZ2F0aW9uUGFyYW1ldGVycylcblx0XHQpO1xuXHR9LFxuXHRnZXRFbnRpdHlTZXQ6IGZ1bmN0aW9uIChvQ29udGV4dDogYW55KSB7XG5cdFx0Y29uc3Qgc1BhdGggPSBvQ29udGV4dC5nZXRQYXRoKCk7XG5cdFx0cmV0dXJuIE1vZGVsSGVscGVyLmdldEVudGl0eVNldFBhdGgoc1BhdGgpO1xuXHR9LFxuXG5cdC8qKlxuXHQgKiBIYW5kbGVzIHRoZSB2aXNpYmlsaXR5IG9mIGZvcm0gbWVudSBhY3Rpb25zIGJvdGggaW4gcGF0aCBiYXNlZCBhbmQgc3RhdGljIHZhbHVlIHNjZW5hcmlvcy5cblx0ICpcblx0ICogQGZ1bmN0aW9uXG5cdCAqIEBtZW1iZXJvZiBzYXAuZmUubWFjcm9zLkNvbW1vbkhlbHBlclxuXHQgKiBAcGFyYW0gc1Zpc2libGVWYWx1ZSBFaXRoZXIgc3RhdGljIGJvb2xlYW4gdmFsdWVzIG9yIEFycmF5IG9mIHBhdGggZXhwcmVzc2lvbnMgZm9yIHZpc2liaWxpdHkgb2YgbWVudSBidXR0b24uXG5cdCAqIEByZXR1cm5zIFRoZSBiaW5kaW5nIGV4cHJlc3Npb24gZGV0ZXJtaW5pbmcgdGhlIHZpc2liaWxpdHkgb2YgbWVudSBhY3Rpb25zLlxuXHQgKi9cblx0aGFuZGxlVmlzaWJpbGl0eU9mTWVudUFjdGlvbnM6IGZ1bmN0aW9uIChzVmlzaWJsZVZhbHVlOiBhbnkpIHtcblx0XHRjb25zdCBjb21iaW5lZENvbmRpdGlvbnMgPSBbXTtcblx0XHRpZiAoQXJyYXkuaXNBcnJheShzVmlzaWJsZVZhbHVlKSkge1xuXHRcdFx0Zm9yIChsZXQgaSA9IDA7IGkgPCBzVmlzaWJsZVZhbHVlLmxlbmd0aDsgaSsrKSB7XG5cdFx0XHRcdGlmIChzVmlzaWJsZVZhbHVlW2ldLmluZGV4T2YoXCJ7XCIpID4gLTEgJiYgc1Zpc2libGVWYWx1ZVtpXS5pbmRleE9mKFwiez1cIikgPT09IC0xKSB7XG5cdFx0XHRcdFx0c1Zpc2libGVWYWx1ZVtpXSA9IFwiez1cIiArIHNWaXNpYmxlVmFsdWVbaV0gKyBcIn1cIjtcblx0XHRcdFx0fVxuXHRcdFx0XHRpZiAoc1Zpc2libGVWYWx1ZVtpXS5zcGxpdChcIns9XCIpLmxlbmd0aCA+IDApIHtcblx0XHRcdFx0XHRzVmlzaWJsZVZhbHVlW2ldID0gc1Zpc2libGVWYWx1ZVtpXS5zcGxpdChcIns9XCIpWzFdLnNsaWNlKDAsIC0xKTtcblx0XHRcdFx0fVxuXHRcdFx0XHRjb21iaW5lZENvbmRpdGlvbnMucHVzaChgKCR7c1Zpc2libGVWYWx1ZVtpXX0pYCk7XG5cdFx0XHR9XG5cdFx0fVxuXHRcdHJldHVybiBjb21iaW5lZENvbmRpdGlvbnMubGVuZ3RoID4gMCA/IGB7PSAke2NvbWJpbmVkQ29uZGl0aW9ucy5qb2luKFwiIHx8IFwiKX19YCA6IHNWaXNpYmxlVmFsdWU7XG5cdH0sXG5cdC8qKlxuXHQgKiBNZXRob2QgdG8gZG8gdGhlIGNhbGN1bGF0aW9uIG9mIGNyaXRpY2FsaXR5IGluIGNhc2UgQ3JpdGljYWxpdHlDYWxjdWxhdGlvbiBwcmVzZW50IGluIHRoZSBhbm5vdGF0aW9uXG5cdCAqXG5cdCAqIFRoZSBjYWxjdWxhdGlvbiBpcyBkb25lIGJ5IGNvbXBhcmluZyBhIHZhbHVlIHRvIHRoZSB0aHJlc2hvbGQgdmFsdWVzIHJlbGV2YW50IGZvciB0aGUgc3BlY2lmaWVkIGltcHJvdmVtZW50IGRpcmVjdGlvbi5cblx0ICogRm9yIGltcHJvdmVtZW50IGRpcmVjdGlvbiBUYXJnZXQsIHRoZSBjcml0aWNhbGl0eSBpcyBjYWxjdWxhdGVkIHVzaW5nIGJvdGggbG93IGFuZCBoaWdoIHRocmVzaG9sZCB2YWx1ZXMuIEl0IHdpbGwgYmVcblx0ICpcblx0ICogLSBQb3NpdGl2ZSBpZiB0aGUgdmFsdWUgaXMgZ3JlYXRlciB0aGFuIG9yIGVxdWFsIHRvIEFjY2VwdGFuY2VSYW5nZUxvd1ZhbHVlIGFuZCBsb3dlciB0aGFuIG9yIGVxdWFsIHRvIEFjY2VwdGFuY2VSYW5nZUhpZ2hWYWx1ZVxuXHQgKiAtIE5ldXRyYWwgaWYgdGhlIHZhbHVlIGlzIGdyZWF0ZXIgdGhhbiBvciBlcXVhbCB0byBUb2xlcmFuY2VSYW5nZUxvd1ZhbHVlIGFuZCBsb3dlciB0aGFuIEFjY2VwdGFuY2VSYW5nZUxvd1ZhbHVlIE9SIGdyZWF0ZXIgdGhhbiBBY2NlcHRhbmNlUmFuZ2VIaWdoVmFsdWUgYW5kIGxvd2VyIHRoYW4gb3IgZXF1YWwgdG8gVG9sZXJhbmNlUmFuZ2VIaWdoVmFsdWVcblx0ICogLSBDcml0aWNhbCBpZiB0aGUgdmFsdWUgaXMgZ3JlYXRlciB0aGFuIG9yIGVxdWFsIHRvIERldmlhdGlvblJhbmdlTG93VmFsdWUgYW5kIGxvd2VyIHRoYW4gVG9sZXJhbmNlUmFuZ2VMb3dWYWx1ZSBPUiBncmVhdGVyIHRoYW4gVG9sZXJhbmNlUmFuZ2VIaWdoVmFsdWUgYW5kIGxvd2VyIHRoYW4gb3IgZXF1YWwgdG8gRGV2aWF0aW9uUmFuZ2VIaWdoVmFsdWVcblx0ICogLSBOZWdhdGl2ZSBpZiB0aGUgdmFsdWUgaXMgbG93ZXIgdGhhbiBEZXZpYXRpb25SYW5nZUxvd1ZhbHVlIG9yIGdyZWF0ZXIgdGhhbiBEZXZpYXRpb25SYW5nZUhpZ2hWYWx1ZVxuXHQgKlxuXHQgKiBGb3IgaW1wcm92ZW1lbnQgZGlyZWN0aW9uIE1pbmltaXplLCB0aGUgY3JpdGljYWxpdHkgaXMgY2FsY3VsYXRlZCB1c2luZyB0aGUgaGlnaCB0aHJlc2hvbGQgdmFsdWVzLiBJdCBpc1xuXHQgKiAtIFBvc2l0aXZlIGlmIHRoZSB2YWx1ZSBpcyBsb3dlciB0aGFuIG9yIGVxdWFsIHRvIEFjY2VwdGFuY2VSYW5nZUhpZ2hWYWx1ZVxuXHQgKiAtIE5ldXRyYWwgaWYgdGhlIHZhbHVlIGlzIGdyZWF0ZXIgdGhhbiBBY2NlcHRhbmNlUmFuZ2VIaWdoVmFsdWUgYW5kIGxvd2VyIHRoYW4gb3IgZXF1YWwgdG8gVG9sZXJhbmNlUmFuZ2VIaWdoVmFsdWVcblx0ICogLSBDcml0aWNhbCBpZiB0aGUgdmFsdWUgaXMgZ3JlYXRlciB0aGFuIFRvbGVyYW5jZVJhbmdlSGlnaFZhbHVlIGFuZCBsb3dlciB0aGFuIG9yIGVxdWFsIHRvIERldmlhdGlvblJhbmdlSGlnaFZhbHVlXG5cdCAqIC0gTmVnYXRpdmUgaWYgdGhlIHZhbHVlIGlzIGdyZWF0ZXIgdGhhbiBEZXZpYXRpb25SYW5nZUhpZ2hWYWx1ZVxuXHQgKlxuXHQgKiBGb3IgaW1wcm92ZW1lbnQgZGlyZWN0aW9uIE1heGltaXplLCB0aGUgY3JpdGljYWxpdHkgaXMgY2FsY3VsYXRlZCB1c2luZyB0aGUgbG93IHRocmVzaG9sZCB2YWx1ZXMuIEl0IGlzXG5cdCAqXG5cdCAqIC0gUG9zaXRpdmUgaWYgdGhlIHZhbHVlIGlzIGdyZWF0ZXIgdGhhbiBvciBlcXVhbCB0byBBY2NlcHRhbmNlUmFuZ2VMb3dWYWx1ZVxuXHQgKiAtIE5ldXRyYWwgaWYgdGhlIHZhbHVlIGlzIGxlc3MgdGhhbiBBY2NlcHRhbmNlUmFuZ2VMb3dWYWx1ZSBhbmQgZ3JlYXRlciB0aGFuIG9yIGVxdWFsIHRvIFRvbGVyYW5jZVJhbmdlTG93VmFsdWVcblx0ICogLSBDcml0aWNhbCBpZiB0aGUgdmFsdWUgaXMgbG93ZXIgdGhhbiBUb2xlcmFuY2VSYW5nZUxvd1ZhbHVlIGFuZCBncmVhdGVyIHRoYW4gb3IgZXF1YWwgdG8gRGV2aWF0aW9uUmFuZ2VMb3dWYWx1ZVxuXHQgKiAtIE5lZ2F0aXZlIGlmIHRoZSB2YWx1ZSBpcyBsb3dlciB0aGFuIERldmlhdGlvblJhbmdlTG93VmFsdWVcblx0ICpcblx0ICogVGhyZXNob2xkcyBhcmUgb3B0aW9uYWwuIEZvciB1bmFzc2lnbmVkIHZhbHVlcywgZGVmYXVsdHMgYXJlIGRldGVybWluZWQgaW4gdGhpcyBvcmRlcjpcblx0ICpcblx0ICogLSBGb3IgRGV2aWF0aW9uUmFuZ2UsIGFuIG9taXR0ZWQgTG93VmFsdWUgdHJhbnNsYXRlcyBpbnRvIHRoZSBzbWFsbGVzdCBwb3NzaWJsZSBudW1iZXIgKC1JTkYpLCBhbiBvbWl0dGVkIEhpZ2hWYWx1ZSB0cmFuc2xhdGVzIGludG8gdGhlIGxhcmdlc3QgcG9zc2libGUgbnVtYmVyICgrSU5GKVxuXHQgKiAtIEZvciBUb2xlcmFuY2VSYW5nZSwgYW4gb21pdHRlZCBMb3dWYWx1ZSB3aWxsIGJlIGluaXRpYWxpemVkIHdpdGggRGV2aWF0aW9uUmFuZ2VMb3dWYWx1ZSwgYW4gb21pdHRlZCBIaWdoVmFsdWUgd2lsbCBiZSBpbml0aWFsaXplZCB3aXRoIERldmlhdGlvblJhbmdlSGlnaFZhbHVlXG5cdCAqIC0gRm9yIEFjY2VwdGFuY2VSYW5nZSwgYW4gb21pdHRlZCBMb3dWYWx1ZSB3aWxsIGJlIGluaXRpYWxpemVkIHdpdGggVG9sZXJhbmNlUmFuZ2VMb3dWYWx1ZSwgYW4gb21pdHRlZCBIaWdoVmFsdWUgd2lsbCBiZSBpbml0aWFsaXplZCB3aXRoIFRvbGVyYW5jZVJhbmdlSGlnaFZhbHVlLlxuXHQgKlxuXHQgKiBAcGFyYW0gc0ltcHJvdmVtZW50RGlyZWN0aW9uIEltcHJvdmVtZW50RGlyZWN0aW9uIHRvIGJlIHVzZWQgZm9yIGNyZWF0aW5nIHRoZSBjcml0aWNhbGl0eSBiaW5kaW5nXG5cdCAqIEBwYXJhbSBzVmFsdWUgVmFsdWUgZnJvbSBEYXRhcG9pbnQgdG8gYmUgbWVhc3VyZWRcblx0ICogQHBhcmFtIHNEZXZpYXRpb25Mb3cgRXhwcmVzc2lvbkJpbmRpbmcgZm9yIExvd2VyIERldmlhdGlvbiBsZXZlbFxuXHQgKiBAcGFyYW0gc1RvbGVyYW5jZUxvdyBFeHByZXNzaW9uQmluZGluZyBmb3IgTG93ZXIgVG9sZXJhbmNlIGxldmVsXG5cdCAqIEBwYXJhbSBzQWNjZXB0YW5jZUxvdyBFeHByZXNzaW9uQmluZGluZyBmb3IgTG93ZXIgQWNjZXB0YW5jZSBsZXZlbFxuXHQgKiBAcGFyYW0gc0FjY2VwdGFuY2VIaWdoIEV4cHJlc3Npb25CaW5kaW5nIGZvciBIaWdoZXIgQWNjZXB0YW5jZSBsZXZlbFxuXHQgKiBAcGFyYW0gc1RvbGVyYW5jZUhpZ2ggRXhwcmVzc2lvbkJpbmRpbmcgZm9yIEhpZ2hlciBUb2xlcmFuY2UgbGV2ZWxcblx0ICogQHBhcmFtIHNEZXZpYXRpb25IaWdoIEV4cHJlc3Npb25CaW5kaW5nIGZvciBIaWdoZXIgRGV2aWF0aW9uIGxldmVsXG5cdCAqIEByZXR1cm5zIFJldHVybnMgY3JpdGljYWxpdHkgY2FsY3VsYXRpb24gYXMgZXhwcmVzc2lvbiBiaW5kaW5nXG5cdCAqL1xuXHRnZXRDcml0aWNhbGl0eUNhbGN1bGF0aW9uQmluZGluZzogZnVuY3Rpb24gKFxuXHRcdHNJbXByb3ZlbWVudERpcmVjdGlvbjogc3RyaW5nLFxuXHRcdHNWYWx1ZTogc3RyaW5nLFxuXHRcdHNEZXZpYXRpb25Mb3c6IHN0cmluZyB8IG51bWJlcixcblx0XHRzVG9sZXJhbmNlTG93OiBzdHJpbmcgfCBudW1iZXIsXG5cdFx0c0FjY2VwdGFuY2VMb3c6IHN0cmluZyB8IG51bWJlcixcblx0XHRzQWNjZXB0YW5jZUhpZ2g6IHN0cmluZyB8IG51bWJlcixcblx0XHRzVG9sZXJhbmNlSGlnaDogc3RyaW5nIHwgbnVtYmVyLFxuXHRcdHNEZXZpYXRpb25IaWdoOiBzdHJpbmcgfCBudW1iZXJcblx0KSB7XG5cdFx0bGV0IHNDcml0aWNhbGl0eUV4cHJlc3Npb246IHR5cGVvZiBWYWx1ZUNvbG9yIHwgc3RyaW5nID0gVmFsdWVDb2xvci5OZXV0cmFsOyAvLyBEZWZhdWx0IENyaXRpY2FsaXR5IFN0YXRlXG5cblx0XHRzVmFsdWUgPSBgJSR7c1ZhbHVlfWA7XG5cblx0XHQvLyBTZXR0aW5nIFVuYXNzaWduZWQgVmFsdWVzXG5cdFx0c0RldmlhdGlvbkxvdyA9IHNEZXZpYXRpb25Mb3cgfHwgLUluZmluaXR5O1xuXHRcdHNUb2xlcmFuY2VMb3cgPSBzVG9sZXJhbmNlTG93IHx8IHNEZXZpYXRpb25Mb3c7XG5cdFx0c0FjY2VwdGFuY2VMb3cgPSBzQWNjZXB0YW5jZUxvdyB8fCBzVG9sZXJhbmNlTG93O1xuXHRcdHNEZXZpYXRpb25IaWdoID0gc0RldmlhdGlvbkhpZ2ggfHwgSW5maW5pdHk7XG5cdFx0c1RvbGVyYW5jZUhpZ2ggPSBzVG9sZXJhbmNlSGlnaCB8fCBzRGV2aWF0aW9uSGlnaDtcblx0XHRzQWNjZXB0YW5jZUhpZ2ggPSBzQWNjZXB0YW5jZUhpZ2ggfHwgc1RvbGVyYW5jZUhpZ2g7XG5cblx0XHQvLyBEZWFsaW5nIHdpdGggRGVjaW1hbCBhbmQgUGF0aCBiYXNlZCBiaW5nZGluZ3Ncblx0XHRzRGV2aWF0aW9uTG93ID0gc0RldmlhdGlvbkxvdyAmJiAoK3NEZXZpYXRpb25Mb3cgPyArc0RldmlhdGlvbkxvdyA6IGAlJHtzRGV2aWF0aW9uTG93fWApO1xuXHRcdHNUb2xlcmFuY2VMb3cgPSBzVG9sZXJhbmNlTG93ICYmICgrc1RvbGVyYW5jZUxvdyA/ICtzVG9sZXJhbmNlTG93IDogYCUke3NUb2xlcmFuY2VMb3d9YCk7XG5cdFx0c0FjY2VwdGFuY2VMb3cgPSBzQWNjZXB0YW5jZUxvdyAmJiAoK3NBY2NlcHRhbmNlTG93ID8gK3NBY2NlcHRhbmNlTG93IDogYCUke3NBY2NlcHRhbmNlTG93fWApO1xuXHRcdHNBY2NlcHRhbmNlSGlnaCA9IHNBY2NlcHRhbmNlSGlnaCAmJiAoK3NBY2NlcHRhbmNlSGlnaCA/ICtzQWNjZXB0YW5jZUhpZ2ggOiBgJSR7c0FjY2VwdGFuY2VIaWdofWApO1xuXHRcdHNUb2xlcmFuY2VIaWdoID0gc1RvbGVyYW5jZUhpZ2ggJiYgKCtzVG9sZXJhbmNlSGlnaCA/ICtzVG9sZXJhbmNlSGlnaCA6IGAlJHtzVG9sZXJhbmNlSGlnaH1gKTtcblx0XHRzRGV2aWF0aW9uSGlnaCA9IHNEZXZpYXRpb25IaWdoICYmICgrc0RldmlhdGlvbkhpZ2ggPyArc0RldmlhdGlvbkhpZ2ggOiBgJSR7c0RldmlhdGlvbkhpZ2h9YCk7XG5cblx0XHQvLyBDcmVhdGluZyBydW50aW1lIGV4cHJlc3Npb24gYmluZGluZyBmcm9tIGNyaXRpY2FsaXR5IGNhbGN1bGF0aW9uIGZvciBDcml0aWNhbGl0eSBTdGF0ZVxuXHRcdGlmIChzSW1wcm92ZW1lbnREaXJlY3Rpb24uaW5kZXhPZihcIk1pbmltaXplXCIpID4gLTEpIHtcblx0XHRcdHNDcml0aWNhbGl0eUV4cHJlc3Npb24gPVxuXHRcdFx0XHRcIns9IFwiICtcblx0XHRcdFx0c1ZhbHVlICtcblx0XHRcdFx0XCIgPD0gXCIgK1xuXHRcdFx0XHRzQWNjZXB0YW5jZUhpZ2ggK1xuXHRcdFx0XHRcIiA/ICdcIiArXG5cdFx0XHRcdFZhbHVlQ29sb3IuR29vZCArXG5cdFx0XHRcdFwiJyA6IFwiICtcblx0XHRcdFx0c1ZhbHVlICtcblx0XHRcdFx0XCIgPD0gXCIgK1xuXHRcdFx0XHRzVG9sZXJhbmNlSGlnaCArXG5cdFx0XHRcdFwiID8gJ1wiICtcblx0XHRcdFx0VmFsdWVDb2xvci5OZXV0cmFsICtcblx0XHRcdFx0XCInIDogXCIgK1xuXHRcdFx0XHRcIihcIiArXG5cdFx0XHRcdHNEZXZpYXRpb25IaWdoICtcblx0XHRcdFx0XCIgJiYgXCIgK1xuXHRcdFx0XHRzVmFsdWUgK1xuXHRcdFx0XHRcIiA8PSBcIiArXG5cdFx0XHRcdHNEZXZpYXRpb25IaWdoICtcblx0XHRcdFx0XCIpID8gJ1wiICtcblx0XHRcdFx0VmFsdWVDb2xvci5Dcml0aWNhbCArXG5cdFx0XHRcdFwiJyA6ICdcIiArXG5cdFx0XHRcdFZhbHVlQ29sb3IuRXJyb3IgK1xuXHRcdFx0XHRcIicgfVwiO1xuXHRcdH0gZWxzZSBpZiAoc0ltcHJvdmVtZW50RGlyZWN0aW9uLmluZGV4T2YoXCJNYXhpbWl6ZVwiKSA+IC0xKSB7XG5cdFx0XHRzQ3JpdGljYWxpdHlFeHByZXNzaW9uID1cblx0XHRcdFx0XCJ7PSBcIiArXG5cdFx0XHRcdHNWYWx1ZSArXG5cdFx0XHRcdFwiID49IFwiICtcblx0XHRcdFx0c0FjY2VwdGFuY2VMb3cgK1xuXHRcdFx0XHRcIiA/ICdcIiArXG5cdFx0XHRcdFZhbHVlQ29sb3IuR29vZCArXG5cdFx0XHRcdFwiJyA6IFwiICtcblx0XHRcdFx0c1ZhbHVlICtcblx0XHRcdFx0XCIgPj0gXCIgK1xuXHRcdFx0XHRzVG9sZXJhbmNlTG93ICtcblx0XHRcdFx0XCIgPyAnXCIgK1xuXHRcdFx0XHRWYWx1ZUNvbG9yLk5ldXRyYWwgK1xuXHRcdFx0XHRcIicgOiBcIiArXG5cdFx0XHRcdFwiKFwiICtcblx0XHRcdFx0c0RldmlhdGlvbkxvdyArXG5cdFx0XHRcdFwiICYmIFwiICtcblx0XHRcdFx0c1ZhbHVlICtcblx0XHRcdFx0XCIgPj0gXCIgK1xuXHRcdFx0XHRzRGV2aWF0aW9uTG93ICtcblx0XHRcdFx0XCIpID8gJ1wiICtcblx0XHRcdFx0VmFsdWVDb2xvci5Dcml0aWNhbCArXG5cdFx0XHRcdFwiJyA6ICdcIiArXG5cdFx0XHRcdFZhbHVlQ29sb3IuRXJyb3IgK1xuXHRcdFx0XHRcIicgfVwiO1xuXHRcdH0gZWxzZSBpZiAoc0ltcHJvdmVtZW50RGlyZWN0aW9uLmluZGV4T2YoXCJUYXJnZXRcIikgPiAtMSkge1xuXHRcdFx0c0NyaXRpY2FsaXR5RXhwcmVzc2lvbiA9XG5cdFx0XHRcdFwiez0gKFwiICtcblx0XHRcdFx0c1ZhbHVlICtcblx0XHRcdFx0XCIgPD0gXCIgK1xuXHRcdFx0XHRzQWNjZXB0YW5jZUhpZ2ggK1xuXHRcdFx0XHRcIiAmJiBcIiArXG5cdFx0XHRcdHNWYWx1ZSArXG5cdFx0XHRcdFwiID49IFwiICtcblx0XHRcdFx0c0FjY2VwdGFuY2VMb3cgK1xuXHRcdFx0XHRcIikgPyAnXCIgK1xuXHRcdFx0XHRWYWx1ZUNvbG9yLkdvb2QgK1xuXHRcdFx0XHRcIicgOiBcIiArXG5cdFx0XHRcdFwiKChcIiArXG5cdFx0XHRcdHNWYWx1ZSArXG5cdFx0XHRcdFwiID49IFwiICtcblx0XHRcdFx0c1RvbGVyYW5jZUxvdyArXG5cdFx0XHRcdFwiICYmIFwiICtcblx0XHRcdFx0c1ZhbHVlICtcblx0XHRcdFx0XCIgPCBcIiArXG5cdFx0XHRcdHNBY2NlcHRhbmNlTG93ICtcblx0XHRcdFx0XCIpIHx8IChcIiArXG5cdFx0XHRcdHNWYWx1ZSArXG5cdFx0XHRcdFwiID4gXCIgK1xuXHRcdFx0XHRzQWNjZXB0YW5jZUhpZ2ggK1xuXHRcdFx0XHRcIiAmJiBcIiArXG5cdFx0XHRcdHNWYWx1ZSArXG5cdFx0XHRcdFwiIDw9IFwiICtcblx0XHRcdFx0c1RvbGVyYW5jZUhpZ2ggK1xuXHRcdFx0XHRcIikpID8gJ1wiICtcblx0XHRcdFx0VmFsdWVDb2xvci5OZXV0cmFsICtcblx0XHRcdFx0XCInIDogXCIgK1xuXHRcdFx0XHRcIigoXCIgK1xuXHRcdFx0XHRzRGV2aWF0aW9uTG93ICtcblx0XHRcdFx0XCIgJiYgKFwiICtcblx0XHRcdFx0c1ZhbHVlICtcblx0XHRcdFx0XCIgPj0gXCIgK1xuXHRcdFx0XHRzRGV2aWF0aW9uTG93ICtcblx0XHRcdFx0XCIpICYmIChcIiArXG5cdFx0XHRcdHNWYWx1ZSArXG5cdFx0XHRcdFwiIDwgXCIgK1xuXHRcdFx0XHRzVG9sZXJhbmNlTG93ICtcblx0XHRcdFx0XCIpKSB8fCAoKFwiICtcblx0XHRcdFx0c1ZhbHVlICtcblx0XHRcdFx0XCIgPiBcIiArXG5cdFx0XHRcdHNUb2xlcmFuY2VIaWdoICtcblx0XHRcdFx0XCIpICYmIFwiICtcblx0XHRcdFx0c0RldmlhdGlvbkhpZ2ggK1xuXHRcdFx0XHRcIiAmJiAoXCIgK1xuXHRcdFx0XHRzVmFsdWUgK1xuXHRcdFx0XHRcIiA8PSBcIiArXG5cdFx0XHRcdHNEZXZpYXRpb25IaWdoICtcblx0XHRcdFx0XCIpKSkgPyAnXCIgK1xuXHRcdFx0XHRWYWx1ZUNvbG9yLkNyaXRpY2FsICtcblx0XHRcdFx0XCInIDogJ1wiICtcblx0XHRcdFx0VmFsdWVDb2xvci5FcnJvciArXG5cdFx0XHRcdFwiJyB9XCI7XG5cdFx0fSBlbHNlIHtcblx0XHRcdExvZy53YXJuaW5nKFwiQ2FzZSBub3Qgc3VwcG9ydGVkLCByZXR1cm5pbmcgdGhlIGRlZmF1bHQgVmFsdWUgTmV1dHJhbFwiKTtcblx0XHR9XG5cblx0XHRyZXR1cm4gc0NyaXRpY2FsaXR5RXhwcmVzc2lvbjtcblx0fSxcblx0LyoqXG5cdCAqIFRvIGZldGNoIG1lYXN1cmUgYXR0cmlidXRlIGluZGV4LlxuXHQgKlxuXHQgKiBAcGFyYW0gaU1lYXN1cmUgQ2hhcnQgQW5ub3RhdGlvbnNcblx0ICogQHBhcmFtIG9DaGFydEFubm90YXRpb25zIENoYXJ0IEFubm90YXRpb25zXG5cdCAqIEByZXR1cm5zIE1lYXN1cmVBdHRyaWJ1dGUgaW5kZXguXG5cdCAqIEBwcml2YXRlXG5cdCAqL1xuXHRnZXRNZWFzdXJlQXR0cmlidXRlSW5kZXg6IGZ1bmN0aW9uIChpTWVhc3VyZTogYW55LCBvQ2hhcnRBbm5vdGF0aW9uczogYW55KSB7XG5cdFx0bGV0IGFNZWFzdXJlcywgc01lYXN1cmVQcm9wZXJ0eVBhdGg7XG5cdFx0aWYgKG9DaGFydEFubm90YXRpb25zPy5NZWFzdXJlcz8ubGVuZ3RoID4gMCkge1xuXHRcdFx0YU1lYXN1cmVzID0gb0NoYXJ0QW5ub3RhdGlvbnMuTWVhc3VyZXM7XG5cdFx0XHRzTWVhc3VyZVByb3BlcnR5UGF0aCA9IGFNZWFzdXJlc1tpTWVhc3VyZV0uJFByb3BlcnR5UGF0aDtcblx0XHR9IGVsc2UgaWYgKG9DaGFydEFubm90YXRpb25zPy5EeW5hbWljTWVhc3VyZXM/Lmxlbmd0aCA+IDApIHtcblx0XHRcdGFNZWFzdXJlcyA9IG9DaGFydEFubm90YXRpb25zLkR5bmFtaWNNZWFzdXJlcztcblx0XHRcdHNNZWFzdXJlUHJvcGVydHlQYXRoID0gYU1lYXN1cmVzW2lNZWFzdXJlXS4kQW5ub3RhdGlvblBhdGg7XG5cdFx0fVxuXHRcdGxldCBiTWVhc3VyZUF0dHJpYnV0ZUV4aXN0cztcblx0XHRjb25zdCBhTWVhc3VyZUF0dHJpYnV0ZXMgPSBvQ2hhcnRBbm5vdGF0aW9ucy5NZWFzdXJlQXR0cmlidXRlcztcblx0XHRsZXQgaU1lYXN1cmVBdHRyaWJ1dGUgPSAtMTtcblx0XHRjb25zdCBmbkNoZWNrTWVhc3VyZSA9IGZ1bmN0aW9uIChzTWVhc3VyZVBhdGg6IGFueSwgb01lYXN1cmVBdHRyaWJ1dGU6IGFueSwgaW5kZXg6IGFueSkge1xuXHRcdFx0aWYgKG9NZWFzdXJlQXR0cmlidXRlKSB7XG5cdFx0XHRcdGlmIChvTWVhc3VyZUF0dHJpYnV0ZS5NZWFzdXJlICYmIG9NZWFzdXJlQXR0cmlidXRlLk1lYXN1cmUuJFByb3BlcnR5UGF0aCA9PT0gc01lYXN1cmVQYXRoKSB7XG5cdFx0XHRcdFx0aU1lYXN1cmVBdHRyaWJ1dGUgPSBpbmRleDtcblx0XHRcdFx0XHRyZXR1cm4gdHJ1ZTtcblx0XHRcdFx0fSBlbHNlIGlmIChvTWVhc3VyZUF0dHJpYnV0ZS5EeW5hbWljTWVhc3VyZSAmJiBvTWVhc3VyZUF0dHJpYnV0ZS5EeW5hbWljTWVhc3VyZS4kQW5ub3RhdGlvblBhdGggPT09IHNNZWFzdXJlUGF0aCkge1xuXHRcdFx0XHRcdGlNZWFzdXJlQXR0cmlidXRlID0gaW5kZXg7XG5cdFx0XHRcdFx0cmV0dXJuIHRydWU7XG5cdFx0XHRcdH1cblx0XHRcdH1cblx0XHR9O1xuXHRcdGlmIChhTWVhc3VyZUF0dHJpYnV0ZXMpIHtcblx0XHRcdGJNZWFzdXJlQXR0cmlidXRlRXhpc3RzID0gYU1lYXN1cmVBdHRyaWJ1dGVzLnNvbWUoZm5DaGVja01lYXN1cmUuYmluZChudWxsLCBzTWVhc3VyZVByb3BlcnR5UGF0aCkpO1xuXHRcdH1cblx0XHRyZXR1cm4gYk1lYXN1cmVBdHRyaWJ1dGVFeGlzdHMgJiYgaU1lYXN1cmVBdHRyaWJ1dGUgPiAtMSAmJiBpTWVhc3VyZUF0dHJpYnV0ZTtcblx0fSxcblxuXHRnZXRNZWFzdXJlQXR0cmlidXRlOiBmdW5jdGlvbiAob0NvbnRleHQ6IENvbnRleHQpIHtcblx0XHRjb25zdCBvTWV0YU1vZGVsID0gb0NvbnRleHQuZ2V0TW9kZWwoKSBhcyBPRGF0YU1ldGFNb2RlbCxcblx0XHRcdHNDaGFydEFubm90YXRpb25QYXRoID0gb0NvbnRleHQuZ2V0UGF0aCgpO1xuXHRcdHJldHVybiBvTWV0YU1vZGVsLnJlcXVlc3RPYmplY3Qoc0NoYXJ0QW5ub3RhdGlvblBhdGgpLnRoZW4oZnVuY3Rpb24gKG9DaGFydEFubm90YXRpb25zOiBhbnkpIHtcblx0XHRcdGNvbnN0IGFNZWFzdXJlQXR0cmlidXRlcyA9IG9DaGFydEFubm90YXRpb25zLk1lYXN1cmVBdHRyaWJ1dGVzLFxuXHRcdFx0XHRpTWVhc3VyZUF0dHJpYnV0ZSA9IENvbW1vbkhlbHBlci5nZXRNZWFzdXJlQXR0cmlidXRlSW5kZXgoMCwgb0NoYXJ0QW5ub3RhdGlvbnMpO1xuXHRcdFx0Y29uc3Qgc01lYXN1cmVBdHRyaWJ1dGVQYXRoID1cblx0XHRcdFx0aU1lYXN1cmVBdHRyaWJ1dGUgPiAtMSAmJiBhTWVhc3VyZUF0dHJpYnV0ZXNbaU1lYXN1cmVBdHRyaWJ1dGVdICYmIGFNZWFzdXJlQXR0cmlidXRlc1tpTWVhc3VyZUF0dHJpYnV0ZV0uRGF0YVBvaW50XG5cdFx0XHRcdFx0PyBgJHtzQ2hhcnRBbm5vdGF0aW9uUGF0aH0vTWVhc3VyZUF0dHJpYnV0ZXMvJHtpTWVhc3VyZUF0dHJpYnV0ZX0vYFxuXHRcdFx0XHRcdDogdW5kZWZpbmVkO1xuXHRcdFx0aWYgKHNNZWFzdXJlQXR0cmlidXRlUGF0aCA9PT0gdW5kZWZpbmVkKSB7XG5cdFx0XHRcdExvZy53YXJuaW5nKFwiRGF0YVBvaW50IG1pc3NpbmcgZm9yIHRoZSBtZWFzdXJlXCIpO1xuXHRcdFx0fVxuXHRcdFx0cmV0dXJuIHNNZWFzdXJlQXR0cmlidXRlUGF0aCA/IGAke3NNZWFzdXJlQXR0cmlidXRlUGF0aH1EYXRhUG9pbnQvJEFubm90YXRpb25QYXRoL2AgOiBzTWVhc3VyZUF0dHJpYnV0ZVBhdGg7XG5cdFx0fSk7XG5cdH0sXG5cdC8qKlxuXHQgKiBUaGlzIGZ1bmN0aW9uIHJldHVybnMgdGhlIG1lYXN1cmVBdHRyaWJ1dGUgZm9yIHRoZSBtZWFzdXJlLlxuXHQgKlxuXHQgKiBAcGFyYW0gb0NvbnRleHQgQ29udGV4dCB0byB0aGUgbWVhc3VyZSBhbm5vdGF0aW9uXG5cdCAqIEByZXR1cm5zIFBhdGggdG8gdGhlIG1lYXN1cmVBdHRyaWJ1dGUgb2YgdGhlIG1lYXN1cmVcblx0ICovXG5cdGdldE1lYXN1cmVBdHRyaWJ1dGVGb3JNZWFzdXJlOiBmdW5jdGlvbiAob0NvbnRleHQ6IENvbnRleHQpIHtcblx0XHRjb25zdCBvTWV0YU1vZGVsID0gb0NvbnRleHQuZ2V0TW9kZWwoKSBhcyBPRGF0YU1ldGFNb2RlbCxcblx0XHRcdHNNZWFzdXJlUGF0aCA9IG9Db250ZXh0LmdldFBhdGgoKSxcblx0XHRcdHNDaGFydEFubm90YXRpb25QYXRoID0gc01lYXN1cmVQYXRoLnN1YnN0cmluZygwLCBzTWVhc3VyZVBhdGgubGFzdEluZGV4T2YoXCJNZWFzdXJlXCIpKSxcblx0XHRcdGlNZWFzdXJlID0gc01lYXN1cmVQYXRoLnJlcGxhY2UoLy4qXFwvLywgXCJcIik7XG5cblx0XHRjb25zdCBvQ2hhcnRBbm5vdGF0aW9ucyA9IG9NZXRhTW9kZWwuZ2V0T2JqZWN0KHNDaGFydEFubm90YXRpb25QYXRoKTtcblx0XHRjb25zdCBhTWVhc3VyZUF0dHJpYnV0ZXMgPSBvQ2hhcnRBbm5vdGF0aW9ucy5NZWFzdXJlQXR0cmlidXRlcyxcblx0XHRcdGlNZWFzdXJlQXR0cmlidXRlID0gQ29tbW9uSGVscGVyLmdldE1lYXN1cmVBdHRyaWJ1dGVJbmRleChpTWVhc3VyZSwgb0NoYXJ0QW5ub3RhdGlvbnMpO1xuXHRcdGNvbnN0IHNNZWFzdXJlQXR0cmlidXRlUGF0aCA9XG5cdFx0XHRpTWVhc3VyZUF0dHJpYnV0ZSA+IC0xICYmIGFNZWFzdXJlQXR0cmlidXRlc1tpTWVhc3VyZUF0dHJpYnV0ZV0gJiYgYU1lYXN1cmVBdHRyaWJ1dGVzW2lNZWFzdXJlQXR0cmlidXRlXS5EYXRhUG9pbnRcblx0XHRcdFx0PyBgJHtzQ2hhcnRBbm5vdGF0aW9uUGF0aH1NZWFzdXJlQXR0cmlidXRlcy8ke2lNZWFzdXJlQXR0cmlidXRlfS9gXG5cdFx0XHRcdDogdW5kZWZpbmVkO1xuXHRcdGlmIChzTWVhc3VyZUF0dHJpYnV0ZVBhdGggPT09IHVuZGVmaW5lZCkge1xuXHRcdFx0TG9nLndhcm5pbmcoXCJEYXRhUG9pbnQgbWlzc2luZyBmb3IgdGhlIG1lYXN1cmVcIik7XG5cdFx0fVxuXHRcdHJldHVybiBzTWVhc3VyZUF0dHJpYnV0ZVBhdGggPyBgJHtzTWVhc3VyZUF0dHJpYnV0ZVBhdGh9RGF0YVBvaW50LyRBbm5vdGF0aW9uUGF0aC9gIDogc01lYXN1cmVBdHRyaWJ1dGVQYXRoO1xuXHR9LFxuXHQvKipcblx0ICogTWV0aG9kIHRvIGRldGVybWluZSBpZiB0aGUgY29udGFpbmVkIG5hdmlnYXRpb24gcHJvcGVydHkgaGFzIGEgZHJhZnQgcm9vdC9ub2RlIHBhcmVudCBlbnRpdHlTZXQuXG5cdCAqXG5cdCAqIEBmdW5jdGlvblxuXHQgKiBAbmFtZSBpc0RyYWZ0UGFyZW50RW50aXR5Rm9yQ29udGFpbm1lbnRcblx0ICogQHBhcmFtIG9UYXJnZXRDb2xsZWN0aW9uQ29udGFpbnNUYXJnZXQgVGFyZ2V0IGNvbGxlY3Rpb24gaGFzIENvbnRhaW5zVGFyZ2V0IHByb3BlcnR5XG5cdCAqIEBwYXJhbSBvVGFibGVNZXRhZGF0YSBUYWJsZSBtZXRhZGF0YSBmb3Igd2hpY2ggZHJhZnQgc3VwcG9ydCBzaGFsbCBiZSBjaGVja2VkXG5cdCAqIEByZXR1cm5zIFJldHVybnMgdHJ1ZSBpZiBkcmFmdFxuXHQgKi9cblx0aXNEcmFmdFBhcmVudEVudGl0eUZvckNvbnRhaW5tZW50OiBmdW5jdGlvbiAob1RhcmdldENvbGxlY3Rpb25Db250YWluc1RhcmdldDogb2JqZWN0LCBvVGFibGVNZXRhZGF0YTogYW55KSB7XG5cdFx0aWYgKG9UYXJnZXRDb2xsZWN0aW9uQ29udGFpbnNUYXJnZXQpIHtcblx0XHRcdGlmIChvVGFibGVNZXRhZGF0YSAmJiBvVGFibGVNZXRhZGF0YS5wYXJlbnRFbnRpdHlTZXQgJiYgb1RhYmxlTWV0YWRhdGEucGFyZW50RW50aXR5U2V0LnNQYXRoKSB7XG5cdFx0XHRcdGNvbnN0IHNQYXJlbnRFbnRpdHlTZXRQYXRoID0gb1RhYmxlTWV0YWRhdGEucGFyZW50RW50aXR5U2V0LnNQYXRoO1xuXHRcdFx0XHRjb25zdCBvRHJhZnRSb290ID0gb1RhYmxlTWV0YWRhdGEucGFyZW50RW50aXR5U2V0Lm9Nb2RlbC5nZXRPYmplY3QoXG5cdFx0XHRcdFx0YCR7c1BhcmVudEVudGl0eVNldFBhdGh9QGNvbS5zYXAudm9jYWJ1bGFyaWVzLkNvbW1vbi52MS5EcmFmdFJvb3RgXG5cdFx0XHRcdCk7XG5cdFx0XHRcdGNvbnN0IG9EcmFmdE5vZGUgPSBvVGFibGVNZXRhZGF0YS5wYXJlbnRFbnRpdHlTZXQub01vZGVsLmdldE9iamVjdChcblx0XHRcdFx0XHRgJHtzUGFyZW50RW50aXR5U2V0UGF0aH1AY29tLnNhcC52b2NhYnVsYXJpZXMuQ29tbW9uLnYxLkRyYWZ0Tm9kZWBcblx0XHRcdFx0KTtcblx0XHRcdFx0aWYgKG9EcmFmdFJvb3QgfHwgb0RyYWZ0Tm9kZSkge1xuXHRcdFx0XHRcdHJldHVybiB0cnVlO1xuXHRcdFx0XHR9IGVsc2Uge1xuXHRcdFx0XHRcdHJldHVybiBmYWxzZTtcblx0XHRcdFx0fVxuXHRcdFx0fVxuXHRcdH1cblx0XHRyZXR1cm4gZmFsc2U7XG5cdH0sXG5cblx0LyoqXG5cdCAqIEVuc3VyZXMgdGhlIGRhdGEgaXMgcHJvY2Vzc2VkIGFzIGRlZmluZWQgaW4gdGhlIHRlbXBsYXRlLlxuXHQgKiBTaW5jZSB0aGUgcHJvcGVydHkgRGF0YSBpcyBvZiB0aGUgdHlwZSAnb2JqZWN0JywgaXQgbWF5IG5vdCBiZSBpbiB0aGUgc2FtZSBvcmRlciBhcyByZXF1aXJlZCBieSB0aGUgdGVtcGxhdGUuXG5cdCAqXG5cdCAqIEBmdW5jdGlvblxuXHQgKiBAbWVtYmVyb2Ygc2FwLmZlLm1hY3Jvcy5Db21tb25IZWxwZXJcblx0ICogQHBhcmFtIGRhdGFFbGVtZW50IFRoZSBkYXRhIHRoYXQgaXMgY3VycmVudGx5IGJlaW5nIHByb2Nlc3NlZC5cblx0ICogQHJldHVybnMgVGhlIGNvcnJlY3QgcGF0aCBhY2NvcmRpbmcgdG8gdGhlIHRlbXBsYXRlLlxuXHQgKi9cblx0Z2V0RGF0YUZyb21UZW1wbGF0ZTogZnVuY3Rpb24gKGRhdGFFbGVtZW50OiBDb250ZXh0KSB7XG5cdFx0Y29uc3Qgc3BsaXRQYXRoID0gZGF0YUVsZW1lbnQuZ2V0UGF0aCgpLnNwbGl0KFwiL1wiKTtcblx0XHRjb25zdCBkYXRhS2V5ID0gc3BsaXRQYXRoW3NwbGl0UGF0aC5sZW5ndGggLSAxXTtcblx0XHRjb25zdCBjb25uZWN0ZWREYXRhUGF0aCA9IGAvJHtzcGxpdFBhdGguc2xpY2UoMSwgLTIpLmpvaW4oXCIvXCIpfS9AYDtcblx0XHRjb25zdCBjb25uZWN0ZWRPYmplY3QgPSBkYXRhRWxlbWVudC5nZXRPYmplY3QoY29ubmVjdGVkRGF0YVBhdGgpO1xuXHRcdGNvbnN0IHRlbXBsYXRlID0gY29ubmVjdGVkT2JqZWN0LlRlbXBsYXRlO1xuXHRcdGNvbnN0IHNwbGl0VGVtcCA9IHRlbXBsYXRlLnNwbGl0KFwifVwiKTtcblx0XHRjb25zdCB0ZW1wQXJyYXkgPSBbXTtcblx0XHRmb3IgKGxldCBpID0gMDsgaSA8IHNwbGl0VGVtcC5sZW5ndGggLSAxOyBpKyspIHtcblx0XHRcdGNvbnN0IGtleSA9IHNwbGl0VGVtcFtpXS5zcGxpdChcIntcIilbMV0udHJpbSgpO1xuXHRcdFx0dGVtcEFycmF5LnB1c2goa2V5KTtcblx0XHR9XG5cdFx0T2JqZWN0LmtleXMoY29ubmVjdGVkT2JqZWN0LkRhdGEpLmZvckVhY2goZnVuY3Rpb24gKHNLZXk6IHN0cmluZykge1xuXHRcdFx0aWYgKHNLZXkuc3RhcnRzV2l0aChcIiRcIikpIHtcblx0XHRcdFx0ZGVsZXRlIGNvbm5lY3RlZE9iamVjdC5EYXRhW3NLZXldO1xuXHRcdFx0fVxuXHRcdH0pO1xuXHRcdGNvbnN0IGluZGV4ID0gT2JqZWN0LmtleXMoY29ubmVjdGVkT2JqZWN0LkRhdGEpLmluZGV4T2YoZGF0YUtleSk7XG5cdFx0cmV0dXJuIGAvJHtzcGxpdFBhdGguc2xpY2UoMSwgLTIpLmpvaW4oXCIvXCIpfS9EYXRhLyR7dGVtcEFycmF5W2luZGV4XX1gO1xuXHR9LFxuXG5cdC8qKlxuXHQgKiBDaGVja3MgaWYgdGhlIGVuZCBvZiB0aGUgdGVtcGxhdGUgaGFzIGJlZW4gcmVhY2hlZC5cblx0ICpcblx0ICogQGZ1bmN0aW9uXG5cdCAqIEBtZW1iZXJvZiBzYXAuZmUubWFjcm9zLkNvbW1vbkhlbHBlclxuXHQgKiBAcGFyYW0gdGFyZ2V0IFRoZSB0YXJnZXQgb2YgdGhlIGNvbm5lY3RlZCBmaWVsZHMuXG5cdCAqIEBwYXJhbSBlbGVtZW50IFRoZSBlbGVtZW50IHRoYXQgaXMgY3VycmVudGx5IGJlaW5nIHByb2Nlc3NlZC5cblx0ICogQHJldHVybnMgVHJ1ZSBvciBGYWxzZSAoZGVwZW5kaW5nIG9uIHRoZSB0ZW1wbGF0ZSBpbmRleCkuXG5cdCAqL1xuXHRub3RMYXN0SW5kZXg6IGZ1bmN0aW9uICh0YXJnZXQ6IGFueSwgZWxlbWVudDogb2JqZWN0KSB7XG5cdFx0Y29uc3QgdGVtcGxhdGUgPSB0YXJnZXQuVGVtcGxhdGU7XG5cdFx0Y29uc3Qgc3BsaXRUZW1wID0gdGVtcGxhdGUuc3BsaXQoXCJ9XCIpO1xuXHRcdGNvbnN0IHRlbXBBcnJheTogYW55W10gPSBbXTtcblx0XHRsZXQgaXNMYXN0SW5kZXggPSBmYWxzZTtcblx0XHRmb3IgKGxldCBpID0gMDsgaSA8IHNwbGl0VGVtcC5sZW5ndGggLSAxOyBpKyspIHtcblx0XHRcdGNvbnN0IGRhdGFLZXkgPSBzcGxpdFRlbXBbaV0uc3BsaXQoXCJ7XCIpWzFdLnRyaW0oKTtcblx0XHRcdHRlbXBBcnJheS5wdXNoKGRhdGFLZXkpO1xuXHRcdH1cblxuXHRcdHRlbXBBcnJheS5mb3JFYWNoKGZ1bmN0aW9uICh0ZW1wbGF0ZUluZm86IGFueSkge1xuXHRcdFx0aWYgKHRhcmdldC5EYXRhW3RlbXBsYXRlSW5mb10gPT09IGVsZW1lbnQgJiYgdGVtcEFycmF5LmluZGV4T2YodGVtcGxhdGVJbmZvKSAhPT0gdGVtcEFycmF5Lmxlbmd0aCAtIDEpIHtcblx0XHRcdFx0aXNMYXN0SW5kZXggPSB0cnVlO1xuXHRcdFx0fVxuXHRcdH0pO1xuXHRcdHJldHVybiBpc0xhc3RJbmRleDtcblx0fSxcblxuXHQvKipcblx0ICogRGV0ZXJtaW5lcyB0aGUgZGVsaW1pdGVyIGZyb20gdGhlIHRlbXBsYXRlLlxuXHQgKlxuXHQgKiBAZnVuY3Rpb25cblx0ICogQG1lbWJlcm9mIHNhcC5mZS5tYWNyb3MuQ29tbW9uSGVscGVyXG5cdCAqIEBwYXJhbSB0ZW1wbGF0ZSBUaGUgdGVtcGxhdGUgc3RyaW5nLlxuXHQgKiBAcmV0dXJucyBUaGUgZGVsaW1pdGVyIGluIHRoZSB0ZW1wbGF0ZSBzdHJpbmcuXG5cdCAqL1xuXHRnZXREZWxpbWl0ZXI6IGZ1bmN0aW9uICh0ZW1wbGF0ZTogc3RyaW5nKSB7XG5cdFx0cmV0dXJuIHRlbXBsYXRlLnNwbGl0KFwifVwiKVsxXS5zcGxpdChcIntcIilbMF0udHJpbSgpO1xuXHR9LFxuXG5cdG9NZXRhTW9kZWw6IHVuZGVmaW5lZCBhcyBhbnksXG5cdHNldE1ldGFNb2RlbDogZnVuY3Rpb24gKG9NZXRhTW9kZWw6IE9EYXRhTWV0YU1vZGVsKSB7XG5cdFx0dGhpcy5vTWV0YU1vZGVsID0gb01ldGFNb2RlbDtcblx0fSxcblxuXHRnZXRNZXRhTW9kZWw6IGZ1bmN0aW9uIChvQ29udGV4dD86IGFueSwgb0ludGVyZmFjZT86IGFueSkge1xuXHRcdGlmIChvQ29udGV4dCkge1xuXHRcdFx0cmV0dXJuIG9JbnRlcmZhY2UuY29udGV4dC5nZXRNb2RlbCgpO1xuXHRcdH1cblx0XHRyZXR1cm4gdGhpcy5vTWV0YU1vZGVsO1xuXHR9LFxuXG5cdGdldFBhcmFtZXRlcnM6IGZ1bmN0aW9uIChvQ29udGV4dDogYW55LCBvSW50ZXJmYWNlOiBhbnkpIHtcblx0XHRpZiAob0NvbnRleHQpIHtcblx0XHRcdGNvbnN0IG9NZXRhTW9kZWwgPSBvSW50ZXJmYWNlLmNvbnRleHQuZ2V0TW9kZWwoKTtcblx0XHRcdGNvbnN0IHNQYXRoID0gb0ludGVyZmFjZS5jb250ZXh0LmdldFBhdGgoKTtcblx0XHRcdGNvbnN0IG9QYXJhbWV0ZXJJbmZvID0gQ29tbW9uVXRpbHMuZ2V0UGFyYW1ldGVySW5mbyhvTWV0YU1vZGVsLCBzUGF0aCk7XG5cdFx0XHRpZiAob1BhcmFtZXRlckluZm8ucGFyYW1ldGVyUHJvcGVydGllcykge1xuXHRcdFx0XHRyZXR1cm4gT2JqZWN0LmtleXMob1BhcmFtZXRlckluZm8ucGFyYW1ldGVyUHJvcGVydGllcyk7XG5cdFx0XHR9XG5cdFx0fVxuXHRcdHJldHVybiBbXTtcblx0fSxcblxuXHQvKipcblx0ICogQnVpbGQgYW4gZXhwcmVzc2lvbiBjYWxsaW5nIGFuIGFjdGlvbiBoYW5kbGVyIHZpYSB0aGUgRlBNIGhlbHBlcidzIGFjdGlvbldyYXBwZXIgZnVuY3Rpb25cblx0ICpcblx0ICogVGhpcyBmdW5jdGlvbiBhc3N1bWVzIHRoYXQgdGhlICdGUE0uYWN0aW9uV3JhcHBlcigpJyBmdW5jdGlvbiBpcyBhdmFpbGFibGUgYXQgcnVudGltZS5cblx0ICpcblx0ICogQHBhcmFtIG9BY3Rpb24gQWN0aW9uIG1ldGFkYXRhXG5cdCAqIEBwYXJhbSBvQWN0aW9uLmhhbmRsZXJNb2R1bGUgTW9kdWxlIGNvbnRhaW5pbmcgdGhlIGFjdGlvbiBoYW5kbGVyIG1ldGhvZFxuXHQgKiBAcGFyYW0gb0FjdGlvbi5oYW5kbGVyTWV0aG9kIEFjdGlvbiBoYW5kbGVyIG1ldGhvZCBuYW1lXG5cdCAqIEBwYXJhbSBbb1RoaXNdIGB0aGlzYCAoaWYgdGhlIGZ1bmN0aW9uIGlzIGNhbGxlZCBmcm9tIGEgbWFjcm8pXG5cdCAqIEBwYXJhbSBvVGhpcy5pZCBUaGUgdGFibGUncyBJRFxuXHQgKiBAcmV0dXJucyBUaGUgYWN0aW9uIHdyYXBwZXIgYmluZGluZ1x0ZXhwcmVzc2lvblxuXHQgKi9cblx0YnVpbGRBY3Rpb25XcmFwcGVyOiBmdW5jdGlvbiAob0FjdGlvbjogQ3VzdG9tQWN0aW9uLCBvVGhpczogeyBpZD86IHN0cmluZyB9IHwgdW5kZWZpbmVkKSB7XG5cdFx0Y29uc3QgYVBhcmFtczogYW55W10gPSBbcmVmKFwiJGV2ZW50XCIpLCBvQWN0aW9uLmhhbmRsZXJNb2R1bGUsIG9BY3Rpb24uaGFuZGxlck1ldGhvZF07XG5cblx0XHRpZiAob1RoaXMgJiYgb1RoaXMuaWQpIHtcblx0XHRcdGNvbnN0IG9BZGRpdGlvbmFsUGFyYW1zID0ge1xuXHRcdFx0XHRjb250ZXh0czogcmVmKFwiJHtpbnRlcm5hbD5zZWxlY3RlZENvbnRleHRzfVwiKVxuXHRcdFx0fTtcblx0XHRcdGFQYXJhbXMucHVzaChvQWRkaXRpb25hbFBhcmFtcyk7XG5cdFx0fVxuXHRcdHJldHVybiBjb21waWxlRXhwcmVzc2lvbihmbihcIkZQTS5hY3Rpb25XcmFwcGVyXCIsIGFQYXJhbXMpKTtcblx0fSxcblx0LyoqXG5cdCAqIFJldHVybnMgdGhlIHZhbHVlIHdoZXRoZXIgb3Igbm90IHRoZSBlbGVtZW50IHNob3VsZCBiZSB2aXNpYmxlIGRlcGVuZGluZyBvbiB0aGUgSGlkZGVuIGFubm90YXRpb24uXG5cdCAqIEl0IGlzIGludmVydGVkIGFzIHRoZSBVSSBlbGVtZW50cyBoYXZlIGEgdmlzaWJsZSBwcm9wZXJ0eSBpbnN0ZWFkIG9mIGEgaGlkZGVuIG9uZS5cblx0ICpcblx0ICogQHBhcmFtIGRhdGFGaWVsZEFubm90YXRpb25zIFRoZSBkYXRhRmllbGQgb2JqZWN0XG5cdCAqIEByZXR1cm5zIEEgcGF0aCBvciBhIEJvb2xlYW5cblx0ICovXG5cdGdldEhpZGRlblBhdGhFeHByZXNzaW9uOiBmdW5jdGlvbiAoZGF0YUZpZWxkQW5ub3RhdGlvbnM6IGFueSkge1xuXHRcdGlmIChkYXRhRmllbGRBbm5vdGF0aW9uc1tcIkBjb20uc2FwLnZvY2FidWxhcmllcy5VSS52MS5IaWRkZW5cIl0gIT09IG51bGwpIHtcblx0XHRcdGNvbnN0IGhpZGRlbiA9IGRhdGFGaWVsZEFubm90YXRpb25zW1wiQGNvbS5zYXAudm9jYWJ1bGFyaWVzLlVJLnYxLkhpZGRlblwiXTtcblx0XHRcdHJldHVybiB0eXBlb2YgaGlkZGVuID09PSBcIm9iamVjdFwiID8gXCJ7PSAhJHtcIiArIGhpZGRlbi4kUGF0aCArIFwifSB9XCIgOiAhaGlkZGVuO1xuXHRcdH1cblx0XHRyZXR1cm4gdHJ1ZTtcblx0fSxcblx0dmFsaWRhdGVQcmVzZW50YXRpb25NZXRhUGF0aDogZnVuY3Rpb24gKG1ldGFQYXRoOiBzdHJpbmcsIG9iamVjdFRlcm06IHN0cmluZykge1xuXHRcdC8vIHBlcmZvcm0gdmFsaWRhdGlvbiBvbmx5IGlmIGFubm90YXRpb24gc2V0ICh0byBhdm9pZCBiYWNrd2FyZHMgY29tcGF0aWJpbGl0eSBpc3N1ZXMgZm9yIHRlc3Qgd2l0aG91dCBhbm5vdGF0aW9ucylcblx0XHRpZiAobWV0YVBhdGguaW5kZXhPZihvYmplY3RUZXJtLnNsaWNlKDAsIG9iamVjdFRlcm0ubGFzdEluZGV4T2YoXCIuXCIpKSkgPiAtMSkge1xuXHRcdFx0Y29uc3QgYWxsb3dlZFRlcm1zID0gW1VJQW5ub3RhdGlvblRlcm1zLlByZXNlbnRhdGlvblZhcmlhbnQsIFVJQW5ub3RhdGlvblRlcm1zLlNlbGVjdGlvblByZXNlbnRhdGlvblZhcmlhbnQsIG9iamVjdFRlcm1dO1xuXHRcdFx0aWYgKFxuXHRcdFx0XHQhYWxsb3dlZFRlcm1zLnNvbWUoKHRlcm0pID0+IHtcblx0XHRcdFx0XHRyZXR1cm4gbWV0YVBhdGguc2VhcmNoKG5ldyBSZWdFeHAoYCR7dGVybX0oI3wvfCQpYCkpID4gLTE7XG5cdFx0XHRcdH0pXG5cdFx0XHQpIHtcblx0XHRcdFx0dGhyb3cgbmV3IEVycm9yKGBBbm5vdGF0aW9uIFBhdGggJHttZXRhUGF0aH0gbWVudGlvbmVkIGluIHRoZSBtYW5pZmVzdCBpcyBub3QgdmFsaWQgZm9yICR7b2JqZWN0VGVybX1gKTtcblx0XHRcdH1cblx0XHR9XG5cdH1cbn07XG4oQ29tbW9uSGVscGVyLmdldFNvcnRDb25kaXRpb25zIGFzIGFueSkucmVxdWlyZXNJQ29udGV4dCA9IHRydWU7XG5cbmV4cG9ydCBkZWZhdWx0IENvbW1vbkhlbHBlcjtcbiJdLCJtYXBwaW5ncyI6IjtBQUFBO0FBQUE7QUFBQTs7Ozs7Ozs7O0VBY0EsTUFBTUEsVUFBVSxHQUFHQyxRQUFRLENBQUNELFVBQVU7RUFDdEMsTUFBTUUsWUFBWSxHQUFHO0lBQ3BCQyxZQUFZLEVBQUUsVUFBVUMsSUFBUyxFQUFFO01BQ2xDLE9BQU9BLElBQUksQ0FBQ0MsU0FBUyxFQUFFO0lBQ3hCLENBQUM7SUFFRDtBQUNEO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtJQUNDQyxTQUFTLEVBQUUsVUFBVUMsTUFBYyxFQUFFQyxVQUFlLEVBQUU7TUFDckQsTUFBTUMsTUFB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
806
+ //# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJuYW1lcyI6WyJWYWx1ZUNvbG9yIiwibUxpYnJhcnkiLCJDb21tb25IZWxwZXIiLCJnZXRQYXRoVG9LZXkiLCJvQ3R4IiwiZ2V0T2JqZWN0IiwiaXNWaXNpYmxlIiwidGFyZ2V0Iiwib0ludGVyZmFjZSIsIm9Nb2RlbCIsImNvbnRleHQiLCJnZXRNb2RlbCIsInNQcm9wZXJ0eVBhdGgiLCJnZXRQYXRoIiwib0Fubm90YXRpb25zIiwiaGlkZGVuIiwiJFBhdGgiLCJnZXRQYXJhbWV0ZXJFZGl0TW9kZSIsImZpZWxkQ29udHJvbCIsImltbXV0YWJsZSIsImNvbXB1dGVkIiwic0VkaXRNb2RlIiwiRWRpdE1vZGUiLCJFZGl0YWJsZSIsIlJlYWRPbmx5IiwiJEVudW1NZW1iZXIiLCJEaXNhYmxlZCIsImdldE1ldGFQYXRoIiwidW5kZWZpbmVkIiwiaXNEZXNrdG9wIiwic3lzdGVtIiwiZGVza3RvcCIsImdldFRhcmdldENvbGxlY3Rpb25QYXRoIiwibmF2Q29sbGVjdGlvbiIsInNQYXRoIiwiZ2V0TWV0YWRhdGEiLCJnZXROYW1lIiwiZ2V0TWV0YU1vZGVsIiwiYVBhcnRzIiwic3BsaXQiLCJmaWx0ZXIiLCJzUGFydCIsImVudGl0eVNldCIsImxlbmd0aCIsIm5hdmlnYXRpb25Db2xsZWN0aW9uIiwic2xpY2UiLCJqb2luIiwiaXNQcm9wZXJ0eUZpbHRlcmFibGUiLCJvRGF0YUZpZWxkIiwic1Byb3BlcnR5TG9jYXRpb25QYXRoIiwiZ2V0TG9jYXRpb25Gb3JQcm9wZXJ0eVBhdGgiLCJzUHJvcGVydHkiLCJyZXBsYWNlIiwiJFR5cGUiLCJpTGVuZ3RoIiwic0NvbGxlY3Rpb25QYXRoIiwibGFzdEluZGV4T2YiLCJpbmRleE9mIiwiZ290b0FjdGlvblBhcmFtZXRlciIsIm9Db250ZXh0Iiwic1Byb3BlcnR5TmFtZSIsIkNvbW1vblV0aWxzIiwiZ2V0UGFyYW1ldGVyUGF0aCIsImdldEVudGl0eVNldE5hbWUiLCJvTWV0YU1vZGVsIiwic0VudGl0eVR5cGUiLCJvRW50aXR5Q29udGFpbmVyIiwia2V5IiwiZ2V0QWN0aW9uUGF0aCIsIm9BY3Rpb24iLCJiUmV0dXJuT25seVBhdGgiLCJzQWN0aW9uTmFtZSIsImJDaGVja1N0YXRpY1ZhbHVlIiwic0NvbnRleHRQYXRoIiwic0VudGl0eVR5cGVOYW1lIiwic0VudGl0eU5hbWUiLCJzQmluZGluZ1BhcmFtZXRlciIsImdldE5hdmlnYXRpb25Db250ZXh0IiwiT0RhdGFNb2RlbEFubm90YXRpb25IZWxwZXIiLCJnZXROYXZpZ2F0aW9uUGF0aCIsImJLZWVwUHJvcGVydHkiLCJiU3RhcnRzV2l0aEVudGl0eVR5cGUiLCJzdGFydHNXaXRoIiwicGFydCIsInNoaWZ0IiwicG9wIiwiZ2V0QWN0aW9uQ29udGV4dCIsImdldFBhdGhUb0JvdW5kQWN0aW9uT3ZlcmxvYWQiLCJhZGRTaW5nbGVRdW90ZXMiLCJzVmFsdWUiLCJiRXNjYXBlIiwiZXNjYXBlU2luZ2xlUXVvdGVzIiwiZ2VuZXJhdGVGdW5jdGlvbiIsInNGdW5jTmFtZSIsInNQYXJhbXMiLCJpIiwic0Z1bmN0aW9uIiwiZ2V0SGVhZGVyRGF0YVBvaW50TGlua1Zpc2liaWxpdHkiLCJiTGluayIsImJGaWVsZFZpc2liaWxpdHkiLCJzVmlzaWJpbGl0eUV4cCIsIm9iamVjdFRvU3RyaW5nIiwib1BhcmFtcyIsImlOdW1iZXJPZktleXMiLCJPYmplY3QiLCJrZXlzIiwic0tleSIsInJlbW92ZUVzY2FwZUNoYXJhY3RlcnMiLCJzRXhwcmVzc2lvbiIsInN0cmluZ2lmeU9iamVjdCIsInNTdHJpbmdpZmllZCIsIm9PYmplY3QiLCJKU09OIiwicGFyc2UiLCJBcnJheSIsImlzQXJyYXkiLCJvVUk1T2JqZWN0IiwidWk1b2JqZWN0IiwiYXNzaWduIiwic3RyaW5naWZ5Iiwic1R5cGUiLCJMb2ciLCJlcnJvciIsIkVycm9yIiwic3RyaW5naWZ5Q3VzdG9tRGF0YSIsInZEYXRhIiwiQ29udGV4dCIsInBhcnNlQ3VzdG9tRGF0YSIsImhhc093blByb3BlcnR5IiwiZ2V0Q29udGV4dFBhdGgiLCJvVmFsdWUiLCJnZXRTb3J0Q29uZGl0aW9ucyIsIm9QcmVzZW50YXRpb25WYXJpYW50Iiwic1ByZXNlbnRhdGlvblZhcmlhbnRQYXRoIiwiX2lzUHJlc2VudGF0aW9uVmFyaWFudEFubm90YXRpb24iLCJTb3J0T3JkZXIiLCJhU29ydENvbmRpdGlvbnMiLCJzb3J0ZXJzIiwic0VudGl0eVBhdGgiLCJmb3JFYWNoIiwib0NvbmRpdGlvbiIsIm9Tb3J0UHJvcGVydHkiLCJvU29ydGVyIiwiRHluYW1pY1Byb3BlcnR5IiwiJEFubm90YXRpb25QYXRoIiwiTmFtZSIsIlByb3BlcnR5IiwiJFByb3BlcnR5UGF0aCIsIm5hbWUiLCJkZXNjZW5kaW5nIiwiRGVzY2VuZGluZyIsInB1c2giLCJhbm5vdGF0aW9uUGF0aCIsImNyZWF0ZVByZXNlbnRhdGlvblBhdGhDb250ZXh0Iiwib1ByZXNlbnRhdGlvbkNvbnRleHQiLCJhUGF0aHMiLCJjcmVhdGVCaW5kaW5nQ29udGV4dCIsImdldFByZXNzSGFuZGxlckZvckRhdGFGaWVsZEZvcklCTiIsInNDb250ZXh0IiwiYk5hdmlnYXRlV2l0aENvbmZpcm1hdGlvbkRpYWxvZyIsIm1OYXZpZ2F0aW9uUGFyYW1ldGVycyIsIm5hdmlnYXRpb25Db250ZXh0cyIsIlJlcXVpcmVzQ29udGV4dCIsIklubGluZSIsImFwcGxpY2FibGVDb250ZXh0cyIsIlNlbWFudGljT2JqZWN0IiwiQWN0aW9uIiwibm90QXBwbGljYWJsZUNvbnRleHRzIiwibGFiZWwiLCJMYWJlbCIsIk1hcHBpbmciLCJzZW1hbnRpY09iamVjdE1hcHBpbmciLCJnZXRFbnRpdHlTZXQiLCJNb2RlbEhlbHBlciIsImdldEVudGl0eVNldFBhdGgiLCJoYW5kbGVWaXNpYmlsaXR5T2ZNZW51QWN0aW9ucyIsInNWaXNpYmxlVmFsdWUiLCJjb21iaW5lZENvbmRpdGlvbnMiLCJnZXRDcml0aWNhbGl0eUNhbGN1bGF0aW9uQmluZGluZyIsInNJbXByb3ZlbWVudERpcmVjdGlvbiIsInNEZXZpYXRpb25Mb3ciLCJzVG9sZXJhbmNlTG93Iiwic0FjY2VwdGFuY2VMb3ciLCJzQWNjZXB0YW5jZUhpZ2giLCJzVG9sZXJhbmNlSGlnaCIsInNEZXZpYXRpb25IaWdoIiwic0NyaXRpY2FsaXR5RXhwcmVzc2lvbiIsIk5ldXRyYWwiLCJJbmZpbml0eSIsIkdvb2QiLCJDcml0aWNhbCIsIndhcm5pbmciLCJnZXRNZWFzdXJlQXR0cmlidXRlSW5kZXgiLCJpTWVhc3VyZSIsIm9DaGFydEFubm90YXRpb25zIiwiYU1lYXN1cmVzIiwic01lYXN1cmVQcm9wZXJ0eVBhdGgiLCJNZWFzdXJlcyIsIkR5bmFtaWNNZWFzdXJlcyIsImJNZWFzdXJlQXR0cmlidXRlRXhpc3RzIiwiYU1lYXN1cmVBdHRyaWJ1dGVzIiwiTWVhc3VyZUF0dHJpYnV0ZXMiLCJpTWVhc3VyZUF0dHJpYnV0ZSIsImZuQ2hlY2tNZWFzdXJlIiwic01lYXN1cmVQYXRoIiwib01lYXN1cmVBdHRyaWJ1dGUiLCJpbmRleCIsIk1lYXN1cmUiLCJEeW5hbWljTWVhc3VyZSIsInNvbWUiLCJiaW5kIiwiZ2V0TWVhc3VyZUF0dHJpYnV0ZSIsInNDaGFydEFubm90YXRpb25QYXRoIiwicmVxdWVzdE9iamVjdCIsInRoZW4iLCJzTWVhc3VyZUF0dHJpYnV0ZVBhdGgiLCJEYXRhUG9pbnQiLCJnZXRNZWFzdXJlQXR0cmlidXRlRm9yTWVhc3VyZSIsInN1YnN0cmluZyIsImlzRHJhZnRQYXJlbnRFbnRpdHlGb3JDb250YWlubWVudCIsIm9UYXJnZXRDb2xsZWN0aW9uQ29udGFpbnNUYXJnZXQiLCJvVGFibGVNZXRhZGF0YSIsInBhcmVudEVudGl0eVNldCIsInNQYXJlbnRFbnRpdHlTZXRQYXRoIiwib0RyYWZ0Um9vdCIsIm9EcmFmdE5vZGUiLCJnZXREYXRhRnJvbVRlbXBsYXRlIiwiZGF0YUVsZW1lbnQiLCJzcGxpdFBhdGgiLCJkYXRhS2V5IiwiY29ubmVjdGVkRGF0YVBhdGgiLCJjb25uZWN0ZWRPYmplY3QiLCJ0ZW1wbGF0ZSIsIlRlbXBsYXRlIiwic3BsaXRUZW1wIiwidGVtcEFycmF5IiwidHJpbSIsIkRhdGEiLCJub3RMYXN0SW5kZXgiLCJlbGVtZW50IiwiaXNMYXN0SW5kZXgiLCJ0ZW1wbGF0ZUluZm8iLCJnZXREZWxpbWl0ZXIiLCJzZXRNZXRhTW9kZWwiLCJnZXRQYXJhbWV0ZXJzIiwib1BhcmFtZXRlckluZm8iLCJnZXRQYXJhbWV0ZXJJbmZvIiwicGFyYW1ldGVyUHJvcGVydGllcyIsImJ1aWxkQWN0aW9uV3JhcHBlciIsIm9UaGlzIiwiYVBhcmFtcyIsInJlZiIsImhhbmRsZXJNb2R1bGUiLCJoYW5kbGVyTWV0aG9kIiwiaWQiLCJvQWRkaXRpb25hbFBhcmFtcyIsImNvbnRleHRzIiwiY29tcGlsZUV4cHJlc3Npb24iLCJmbiIsImdldEhpZGRlblBhdGhFeHByZXNzaW9uIiwiZGF0YUZpZWxkQW5ub3RhdGlvbnMiLCJ2YWxpZGF0ZVByZXNlbnRhdGlvbk1ldGFQYXRoIiwibWV0YVBhdGgiLCJvYmplY3RUZXJtIiwiYWxsb3dlZFRlcm1zIiwidGVybSIsInNlYXJjaCIsIlJlZ0V4cCIsInJlcXVpcmVzSUNvbnRleHQiXSwic291cmNlUm9vdCI6Ii4iLCJzb3VyY2VzIjpbIkNvbW1vbkhlbHBlci50cyJdLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBVSUFubm90YXRpb25UZXJtcyB9IGZyb20gXCJAc2FwLXV4L3ZvY2FidWxhcmllcy10eXBlcy92b2NhYnVsYXJpZXMvVUlcIjtcbmltcG9ydCBMb2cgZnJvbSBcInNhcC9iYXNlL0xvZ1wiO1xuaW1wb3J0IENvbW1vblV0aWxzIGZyb20gXCJzYXAvZmUvY29yZS9Db21tb25VdGlsc1wiO1xuaW1wb3J0IHsgQ3VzdG9tQWN0aW9uIH0gZnJvbSBcInNhcC9mZS9jb3JlL2NvbnZlcnRlcnMvY29udHJvbHMvQ29tbW9uL0FjdGlvblwiO1xuaW1wb3J0IHsgY29tcGlsZUV4cHJlc3Npb24sIGZuLCByZWYgfSBmcm9tIFwic2FwL2ZlL2NvcmUvaGVscGVycy9CaW5kaW5nVG9vbGtpdFwiO1xuaW1wb3J0IHsgaXNQcm9wZXJ0eUZpbHRlcmFibGUgfSBmcm9tIFwic2FwL2ZlL2NvcmUvaGVscGVycy9NZXRhTW9kZWxGdW5jdGlvblwiO1xuaW1wb3J0IE1vZGVsSGVscGVyIGZyb20gXCJzYXAvZmUvY29yZS9oZWxwZXJzL01vZGVsSGVscGVyXCI7XG5pbXBvcnQgbUxpYnJhcnkgZnJvbSBcInNhcC9tL2xpYnJhcnlcIjtcbmltcG9ydCB7IHN5c3RlbSB9IGZyb20gXCJzYXAvdWkvRGV2aWNlXCI7XG5pbXBvcnQgRWRpdE1vZGUgZnJvbSBcInNhcC91aS9tZGMvZW51bS9FZGl0TW9kZVwiO1xuaW1wb3J0IENvbnRleHQgZnJvbSBcInNhcC91aS9tb2RlbC9Db250ZXh0XCI7XG5pbXBvcnQgT0RhdGFNb2RlbEFubm90YXRpb25IZWxwZXIgZnJvbSBcInNhcC91aS9tb2RlbC9vZGF0YS92NC9Bbm5vdGF0aW9uSGVscGVyXCI7XG5pbXBvcnQgdHlwZSBPRGF0YU1ldGFNb2RlbCBmcm9tIFwic2FwL3VpL21vZGVsL29kYXRhL3Y0L09EYXRhTWV0YU1vZGVsXCI7XG5cbmNvbnN0IFZhbHVlQ29sb3IgPSBtTGlicmFyeS5WYWx1ZUNvbG9yO1xuY29uc3QgQ29tbW9uSGVscGVyID0ge1xuXHRnZXRQYXRoVG9LZXk6IGZ1bmN0aW9uIChvQ3R4OiBhbnkpIHtcblx0XHRyZXR1cm4gb0N0eC5nZXRPYmplY3QoKTtcblx0fSxcblxuXHQvKipcblx0ICogRGV0ZXJtaW5lcyBpZiBhIGZpZWxkIGlzIHZpc2libGUuXG5cdCAqXG5cdCAqIEBwYXJhbSB0YXJnZXQgVGFyZ2V0IGluc3RhbmNlXG5cdCAqIEBwYXJhbSBvSW50ZXJmYWNlIEludGVyZmFjZSBpbnN0YW5jZVxuXHQgKiBAcmV0dXJucyBSZXR1cm5zIHRydWUsIGZhbHNlLCBvciBleHByZXNzaW9uIHdpdGggcGF0aFxuXHQgKi9cblx0aXNWaXNpYmxlOiBmdW5jdGlvbiAodGFyZ2V0OiBvYmplY3QsIG9JbnRlcmZhY2U6IGFueSkge1xuXHRcdGNvbnN0IG9Nb2RlbCA9IG9JbnRlcmZhY2UuY29udGV4dC5nZXRNb2RlbCgpLFxuXHRcdFx0c1Byb3BlcnR5UGF0aCA9IG9JbnRlcmZhY2UuY29udGV4dC5nZXRQYXRoKCksXG5cdFx0XHRvQW5ub3RhdGlvbnMgPSBvTW9kZWwuZ2V0T2JqZWN0KGAke3NQcm9wZXJ0eVBhdGh9QGApLFxuXHRcdFx0aGlkZGVuID0gb0Fubm90YXRpb25zW1wiQGNvbS5zYXAudm9jYWJ1bGFyaWVzLlVJLnYxLkhpZGRlblwiXTtcblxuXHRcdHJldHVybiB0eXBlb2YgaGlkZGVuID09PSBcIm9iamVjdFwiID8gXCJ7PSAhJHtcIiArIGhpZGRlbi4kUGF0aCArIFwifSB9XCIgOiAhaGlkZGVuO1xuXHR9LFxuXHQvKipcblx0ICogRGV0ZXJtaW5lIGlmIGZpZWxkIGlzIGVkaXRhYmxlLlxuXHQgKlxuXHQgKiBAcGFyYW0gdGFyZ2V0IFRhcmdldCBpbnN0YW5jZVxuXHQgKiBAcGFyYW0gb0ludGVyZmFjZSBJbnRlcmZhY2UgaW5zdGFuY2Vcblx0ICogQHJldHVybnMgQSBCaW5kaW5nIEV4cHJlc3Npb24gdG8gZGV0ZXJtaW5lIGlmIGEgZmllbGQgc2hvdWxkIGJlIGVkaXRhYmxlIG9yIG5vdC5cblx0ICovXG5cdGdldFBhcmFtZXRlckVkaXRNb2RlOiBmdW5jdGlvbiAodGFyZ2V0OiBvYmplY3QsIG9JbnRlcmZhY2U6IGFueSkge1xuXHRcdGNvbnN0IG9Nb2RlbCA9IG9JbnRlcmZhY2UuY29udGV4dC5nZXRNb2RlbCgpLFxuXHRcdFx0c1Byb3BlcnR5UGF0aCA9IG9JbnRlcmZhY2UuY29udGV4dC5nZXRQYXRoKCksXG5cdFx0XHRvQW5ub3RhdGlvbnMgPSBvTW9kZWwuZ2V0T2JqZWN0KGAke3NQcm9wZXJ0eVBhdGh9QGApLFxuXHRcdFx0ZmllbGRDb250cm9sID0gb0Fubm90YXRpb25zW1wiQGNvbS5zYXAudm9jYWJ1bGFyaWVzLkNvbW1vbi52MS5GaWVsZENvbnRyb2xcIl0sXG5cdFx0XHRpbW11dGFibGUgPSBvQW5ub3RhdGlvbnNbXCJAT3JnLk9EYXRhLkNvcmUuVjEuSW1tdXRhYmxlXCJdLFxuXHRcdFx0Y29tcHV0ZWQgPSBvQW5ub3RhdGlvbnNbXCJAT3JnLk9EYXRhLkNvcmUuVjEuQ29tcHV0ZWRcIl07XG5cblx0XHRsZXQgc0VkaXRNb2RlOiBFZGl0TW9kZSB8IHN0cmluZyA9IEVkaXRNb2RlLkVkaXRhYmxlO1xuXG5cdFx0aWYgKGltbXV0YWJsZSB8fCBjb21wdXRlZCkge1xuXHRcdFx0c0VkaXRNb2RlID0gRWRpdE1vZGUuUmVhZE9ubHk7XG5cdFx0fSBlbHNlIGlmIChmaWVsZENvbnRyb2wpIHtcblx0XHRcdGlmIChmaWVsZENvbnRyb2wuJEVudW1NZW1iZXIpIHtcblx0XHRcdFx0aWYgKGZpZWxkQ29udHJvbC4kRW51bU1lbWJlciA9PT0gXCJjb20uc2FwLnZvY2FidWxhcmllcy5Db21tb24udjEuRmllbGRDb250cm9sVHlwZS9SZWFkT25seVwiKSB7XG5cdFx0XHRcdFx0c0VkaXRNb2RlID0gRWRpdE1vZGUuUmVhZE9ubHk7XG5cdFx0XHRcdH1cblx0XHRcdFx0aWYgKFxuXHRcdFx0XHRcdGZpZWxkQ29udHJvbC4kRW51bU1lbWJlciA9PT0gXCJjb20uc2FwLnZvY2FidWxhcmllcy5Db21tb24udjEuRmllbGRDb250cm9sVHlwZS9JbmFwcGxpY2FibGVcIiB8fFxuXHRcdFx0XHRcdGZpZWxkQ29udHJvbC4kRW51bU1lbWJlciA9PT0gXCJjb20uc2FwLnZvY2FidWxhcmllcy5Db21tb24udjEuRmllbGRDb250cm9sVHlwZS9IaWRkZW5cIlxuXHRcdFx0XHQpIHtcblx0XHRcdFx0XHRzRWRpdE1vZGUgPSBFZGl0TW9kZS5EaXNhYmxlZDtcblx0XHRcdFx0fVxuXHRcdFx0fVxuXHRcdFx0aWYgKGZpZWxkQ29udHJvbC4kUGF0aCkge1xuXHRcdFx0XHRzRWRpdE1vZGUgPVxuXHRcdFx0XHRcdFwiez0gJXtcIiArXG5cdFx0XHRcdFx0ZmllbGRDb250cm9sLiRQYXRoICtcblx0XHRcdFx0XHRcIn0gPCAzID8gKCV7XCIgK1xuXHRcdFx0XHRcdGZpZWxkQ29udHJvbC4kUGF0aCArXG5cdFx0XHRcdFx0XCJ9ID09PSAwID8gJ1wiICtcblx0XHRcdFx0XHRFZGl0TW9kZS5EaXNhYmxlZCArXG5cdFx0XHRcdFx0XCInIDogJ1wiICtcblx0XHRcdFx0XHRFZGl0TW9kZS5SZWFkT25seSArXG5cdFx0XHRcdFx0XCInKSA6ICdcIiArXG5cdFx0XHRcdFx0RWRpdE1vZGUuRWRpdGFibGUgK1xuXHRcdFx0XHRcdFwiJ31cIjtcblx0XHRcdH1cblx0XHR9XG5cblx0XHRyZXR1cm4gc0VkaXRNb2RlO1xuXHR9LFxuXHQvKipcblx0ICogR2V0IHRoZSBjb21wbGV0ZSBtZXRhcGF0aCB0byB0aGUgdGFyZ2V0LlxuXHQgKlxuXHQgKiBAcGFyYW0gdGFyZ2V0XG5cdCAqIEBwYXJhbSBvSW50ZXJmYWNlXG5cdCAqIEByZXR1cm5zIFRoZSBtZXRhcGF0aFxuXHQgKi9cblx0Z2V0TWV0YVBhdGg6IGZ1bmN0aW9uICh0YXJnZXQ6IGFueSwgb0ludGVyZmFjZTogYW55KSB7XG5cdFx0cmV0dXJuIChvSW50ZXJmYWNlICYmIG9JbnRlcmZhY2UuY29udGV4dCAmJiBvSW50ZXJmYWNlLmNvbnRleHQuZ2V0UGF0aCgpKSB8fCB1bmRlZmluZWQ7XG5cdH0sXG5cdGlzRGVza3RvcDogZnVuY3Rpb24gKCkge1xuXHRcdHJldHVybiBzeXN0ZW0uZGVza3RvcCA9PT0gdHJ1ZTtcblx0fSxcblx0Z2V0VGFyZ2V0Q29sbGVjdGlvblBhdGg6IGZ1bmN0aW9uIChjb250ZXh0OiBDb250ZXh0LCBuYXZDb2xsZWN0aW9uPzogYW55KSB7XG5cdFx0bGV0IHNQYXRoID0gY29udGV4dC5nZXRQYXRoKCk7XG5cdFx0aWYgKFxuXHRcdFx0Y29udGV4dC5nZXRNZXRhZGF0YSgpLmdldE5hbWUoKSA9PT0gXCJzYXAudWkubW9kZWwuQ29udGV4dFwiICYmXG5cdFx0XHQoKGNvbnRleHQuZ2V0T2JqZWN0KFwiJGtpbmRcIikgYXMgdW5rbm93biBhcyBzdHJpbmcpID09PSBcIkVudGl0eVNldFwiIHx8XG5cdFx0XHRcdChjb250ZXh0LmdldE9iamVjdChcIiRDb250YWluc1RhcmdldFwiKSBhcyB1bmtub3duIGFzIGJvb2xlYW4pID09PSB0cnVlKVxuXHRcdCkge1xuXHRcdFx0cmV0dXJuIHNQYXRoO1xuXHRcdH1cblx0XHRpZiAoY29udGV4dC5nZXRNb2RlbCkge1xuXHRcdFx0c1BhdGggPVxuXHRcdFx0XHQoY29udGV4dC5nZXRNb2RlbCgpLmdldE1ldGFQYXRoICYmIGNvbnRleHQuZ2V0TW9kZWwoKS5nZXRNZXRhUGF0aChzUGF0aCkpIHx8XG5cdFx0XHRcdGNvbnRleHQuZ2V0TW9kZWwoKS5nZXRNZXRhTW9kZWwoKSEuZ2V0TWV0YVBhdGgoc1BhdGgpO1xuXHRcdH1cblx0XHQvL1N1cHBvcnRpbmcgc1BhdGggb2YgYW55IGZvcm1hdCwgZWl0aGVyICcvPGVudGl0eVNldD4vPG5hdmlnYXRpb25Db2xsZWN0aW9uPicgPE9SPiAnLzxlbnRpdHlTZXQ+LyRUeXBlLzxuYXZpZ2F0aW9uQ29sbGVjdGlvbj4nXG5cdFx0Y29uc3QgYVBhcnRzID0gc1BhdGguc3BsaXQoXCIvXCIpLmZpbHRlcihmdW5jdGlvbiAoc1BhcnQ6IGFueSkge1xuXHRcdFx0cmV0dXJuIHNQYXJ0ICYmIHNQYXJ0ICE9IFwiJFR5cGVcIjtcblx0XHR9KTsgLy9maWx0ZXIgb3V0IGVtcHR5IHN0cmluZ3MgYW5kIHBhcnRzIHJlZmVycmluZyB0byAnJFR5cGUnXG5cdFx0Y29uc3QgZW50aXR5U2V0ID0gYC8ke2FQYXJ0c1swXX1gO1xuXHRcdGlmIChhUGFydHMubGVuZ3RoID09PSAxKSB7XG5cdFx0XHRyZXR1cm4gZW50aXR5U2V0O1xuXHRcdH1cblx0XHRjb25zdCBuYXZpZ2F0aW9uQ29sbGVjdGlvbiA9IG5hdkNvbGxlY3Rpb24gPT09IHVuZGVmaW5lZCA/IGFQYXJ0cy5zbGljZSgxKS5qb2luKFwiLyROYXZpZ2F0aW9uUHJvcGVydHlCaW5kaW5nL1wiKSA6IG5hdkNvbGxlY3Rpb247XG5cdFx0cmV0dXJuIGAke2VudGl0eVNldH0vJE5hdmlnYXRpb25Qcm9wZXJ0eUJpbmRpbmcvJHtuYXZpZ2F0aW9uQ29sbGVjdGlvbn1gOyAvLyB1c2VkIGluIGdvdG9UYXJnZXRFbnRpdHlTZXQgbWV0aG9kIGluIHRoZSBzYW1lIGZpbGVcblx0fSxcblxuXHRpc1Byb3BlcnR5RmlsdGVyYWJsZTogZnVuY3Rpb24gKGNvbnRleHQ6IENvbnRleHQsIG9EYXRhRmllbGQ/OiBhbnkpIHtcblx0XHRjb25zdCBvTW9kZWwgPSBjb250ZXh0LmdldE1vZGVsKCkgYXMgT0RhdGFNZXRhTW9kZWwsXG5cdFx0XHRzUHJvcGVydHlQYXRoID0gY29udGV4dC5nZXRQYXRoKCksXG5cdFx0XHQvLyBMb2FjYXRpb25QYXRoIHdvdWxkIGJlIHRoZSBwcmVmaXggb2Ygc1Byb3BlcnR5UGF0aCwgZXhhbXBsZTogc1Byb3BlcnR5UGF0aCA9ICcvQ3VzdG9tZXIvU2V0L05hbWUnIC0+IHNQcm9wZXJ0eUxvY2F0aW9uUGF0aCA9ICcvQ3VzdG9tZXIvU2V0J1xuXHRcdFx0c1Byb3BlcnR5TG9jYXRpb25QYXRoID0gQ29tbW9uSGVscGVyLmdldExvY2F0aW9uRm9yUHJvcGVydHlQYXRoKG9Nb2RlbCwgc1Byb3BlcnR5UGF0aCksXG5cdFx0XHRzUHJvcGVydHkgPSBzUHJvcGVydHlQYXRoLnJlcGxhY2UoYCR7c1Byb3BlcnR5TG9jYXRpb25QYXRofS9gLCBcIlwiKTtcblxuXHRcdGlmIChcblx0XHRcdG9EYXRhRmllbGQgJiZcblx0XHRcdChvRGF0YUZpZWxkLiRUeXBlID09PSBcImNvbS5zYXAudm9jYWJ1bGFyaWVzLlVJLnYxLkRhdGFGaWVsZEZvckFjdGlvblwiIHx8XG5cdFx0XHRcdG9EYXRhRmllbGQuJFR5cGUgPT09IFwiY29tLnNhcC52b2NhYnVsYXJpZXMuVUkudjEuRGF0YUZpZWxkRm9ySW50ZW50QmFzZWROYXZpZ2F0aW9uXCIpXG5cdFx0KSB7XG5cdFx0XHRyZXR1cm4gZmFsc2U7XG5cdFx0fVxuXG5cdFx0cmV0dXJuIGlzUHJvcGVydHlGaWx0ZXJhYmxlKG9Nb2RlbCwgc1Byb3BlcnR5TG9jYXRpb25QYXRoLCBzUHJvcGVydHkpO1xuXHR9LFxuXG5cdGdldExvY2F0aW9uRm9yUHJvcGVydHlQYXRoOiBmdW5jdGlvbiAob01vZGVsOiBhbnksIHNQcm9wZXJ0eVBhdGg6IGFueSkge1xuXHRcdGxldCBpTGVuZ3RoO1xuXHRcdGxldCBzQ29sbGVjdGlvblBhdGggPSBzUHJvcGVydHlQYXRoLnNsaWNlKDAsIHNQcm9wZXJ0eVBhdGgubGFzdEluZGV4T2YoXCIvXCIpKTtcblx0XHRpZiAob01vZGVsLmdldE9iamVjdChgJHtzQ29sbGVjdGlvblBhdGh9LyRraW5kYCkgPT09IFwiRW50aXR5Q29udGFpbmVyXCIpIHtcblx0XHRcdGlMZW5ndGggPSBzQ29sbGVjdGlvblBhdGgubGVuZ3RoICsgMTtcblx0XHRcdHNDb2xsZWN0aW9uUGF0aCA9IHNQcm9wZXJ0eVBhdGguc2xpY2UoaUxlbmd0aCwgc1Byb3BlcnR5UGF0aC5pbmRleE9mKFwiL1wiLCBpTGVuZ3RoKSk7XG5cdFx0fVxuXHRcdHJldHVybiBzQ29sbGVjdGlvblBhdGg7XG5cdH0sXG5cdGdvdG9BY3Rpb25QYXJhbWV0ZXI6IGZ1bmN0aW9uIChvQ29udGV4dDogYW55KSB7XG5cdFx0Y29uc3Qgc1BhdGggPSBvQ29udGV4dC5nZXRQYXRoKCksXG5cdFx0XHRzUHJvcGVydHlOYW1lID0gb0NvbnRleHQuZ2V0T2JqZWN0KGAke3NQYXRofS8kTmFtZWApO1xuXG5cdFx0cmV0dXJuIENvbW1vblV0aWxzLmdldFBhcmFtZXRlclBhdGgoc1BhdGgsIHNQcm9wZXJ0eU5hbWUpO1xuXHR9LFxuXHQvKipcblx0ICogUmV0dXJucyB0aGUgZW50aXR5IHNldCBuYW1lIGZyb20gdGhlIGVudGl0eSB0eXBlIG5hbWUuXG5cdCAqXG5cdCAqIEBwYXJhbSBvTWV0YU1vZGVsIE9EYXRhIHY0IG1ldGFtb2RlbCBpbnN0YW5jZVxuXHQgKiBAcGFyYW0gc0VudGl0eVR5cGUgRW50aXR5VHlwZSBvZiB0aGUgYWN0aW9tXG5cdCAqIEByZXR1cm5zIFRoZSBFbnRpdHlTZXQgb2YgdGhlIGJvdW5kIGFjdGlvblxuXHQgKiBAcHJpdmF0ZVxuXHQgKiBAdWk1LXJlc3RyaWN0ZWRcblx0ICovXG5cdGdldEVudGl0eVNldE5hbWU6IGZ1bmN0aW9uIChvTWV0YU1vZGVsOiBPRGF0YU1ldGFNb2RlbCwgc0VudGl0eVR5cGU6IHN0cmluZykge1xuXHRcdGNvbnN0IG9FbnRpdHlDb250YWluZXIgPSBvTWV0YU1vZGVsLmdldE9iamVjdChcIi9cIik7XG5cdFx0Zm9yIChjb25zdCBrZXkgaW4gb0VudGl0eUNvbnRhaW5lcikge1xuXHRcdFx0aWYgKHR5cGVvZiBvRW50aXR5Q29udGFpbmVyW2tleV0gPT09IFwib2JqZWN0XCIgJiYgb0VudGl0eUNvbnRhaW5lcltrZXldLiRUeXBlID09PSBzRW50aXR5VHlwZSkge1xuXHRcdFx0XHRyZXR1cm4ga2V5O1xuXHRcdFx0fVxuXHRcdH1cblx0XHRyZXR1cm4gdW5kZWZpbmVkO1xuXHR9LFxuXHQvKipcblx0ICogUmV0dXJucyB0aGUgbWV0YW1vZGVsIHBhdGggY29ycmVjdGx5IGZvciBib3VuZCBhY3Rpb25zIGlmIHVzZWQgd2l0aCBiUmV0dXJuT25seVBhdGggYXMgdHJ1ZSxcblx0ICogZWxzZSByZXR1cm5zIGFuIG9iamVjdCB3aGljaCBoYXMgMyBwcm9wZXJ0aWVzIHJlbGF0ZWQgdG8gdGhlIGFjdGlvbi4gVGhleSBhcmUgdGhlIGVudGl0eSBzZXQgbmFtZSxcblx0ICogdGhlICRQYXRoIHZhbHVlIG9mIHRoZSBPcGVyYXRpb25BdmFpbGFibGUgYW5ub3RhdGlvbiBhbmQgdGhlIGJpbmRpbmcgcGFyYW1ldGVyIG5hbWUuIElmXG5cdCAqIGJDaGVja1N0YXRpY1ZhbHVlIGlzIHRydWUsIHJldHVybnMgdGhlIHN0YXRpYyB2YWx1ZSBvZiBPcGVyYXRpb25BdmFpbGFibGUgYW5ub3RhdGlvbiwgaWYgcHJlc2VudC5cblx0ICogZS5nLiBmb3IgYm91bmQgYWN0aW9uIHNvbWVOYW1lU3BhY2UuU29tZUJvdW5kQWN0aW9uXG5cdCAqIG9mIGVudGl0eSBzZXQgU29tZUVudGl0eVNldCwgdGhlIHN0cmluZyBcIi9Tb21lRW50aXR5U2V0L3NvbWVOYW1lU3BhY2UuU29tZUJvdW5kQWN0aW9uXCIgaXMgcmV0dXJuZWQuXG5cdCAqXG5cdCAqIEBwYXJhbSBvQWN0aW9uIFRoZSBjb250ZXh0IG9iamVjdCBvZiB0aGUgYWN0aW9uXG5cdCAqIEBwYXJhbSBiUmV0dXJuT25seVBhdGggSWYgZmFsc2UsIGFkZGl0aW9uYWwgaW5mbyBpcyByZXR1cm5lZCBhbG9uZyB3aXRoIG1ldGFtb2RlbCBwYXRoIHRvIHRoZSBib3VuZCBhY3Rpb25cblx0ICogQHBhcmFtIHNBY3Rpb25OYW1lIFRoZSBuYW1lIG9mIHRoZSBib3VuZCBhY3Rpb24gb2YgdGhlIGZvcm0gc29tZU5hbWVTcGFjZS5Tb21lQm91bmRBY3Rpb25cblx0ICogQHBhcmFtIGJDaGVja1N0YXRpY1ZhbHVlIElmIHRydWUsIHRoZSBzdGF0aWMgdmFsdWUgb2YgT3BlcmF0aW9uQXZhaWxhYmxlIGlzIHJldHVybmVkLCBpZiBwcmVzZW50XG5cdCAqIEByZXR1cm5zIFRoZSBzdHJpbmcgb3Igb2JqZWN0IGFzIHNwZWNpZmllZCBieSBiUmV0dXJuT25seVBhdGhcblx0ICogQHByaXZhdGVcblx0ICogQHVpNS1yZXN0cmljdGVkXG5cdCAqL1xuXHRnZXRBY3Rpb25QYXRoOiBmdW5jdGlvbiAob0FjdGlvbjogYW55LCBiUmV0dXJuT25seVBhdGg6IGJvb2xlYW4sIHNBY3Rpb25OYW1lPzogc3RyaW5nLCBiQ2hlY2tTdGF0aWNWYWx1ZT86IGJvb2xlYW4pIHtcblx0XHRsZXQgc0NvbnRleHRQYXRoID0gb0FjdGlvbi5nZXRQYXRoKCkuc3BsaXQoXCIvQFwiKVswXTtcblxuXHRcdHNBY3Rpb25OYW1lID0gIXNBY3Rpb25OYW1lID8gb0FjdGlvbi5nZXRPYmplY3Qob0FjdGlvbi5nZXRQYXRoKCkpIDogc0FjdGlvbk5hbWU7XG5cblx0XHRpZiAoc0FjdGlvbk5hbWUgJiYgc0FjdGlvbk5hbWUuaW5kZXhPZihcIihcIikgPiAtMSkge1xuXHRcdFx0Ly8gYWN0aW9uIGJvdW5kIHRvIGFub3RoZXIgZW50aXR5IHR5cGVcblx0XHRcdHNBY3Rpb25OYW1lID0gc0FjdGlvbk5hbWUuc3BsaXQoXCIoXCIpWzBdO1xuXHRcdH0gZWxzZSBpZiAob0FjdGlvbi5nZXRPYmplY3Qoc0NvbnRleHRQYXRoKSkge1xuXHRcdFx0Ly8gVE9ETzogdGhpcyBsb2dpYyBzb3VuZHMgd3JvbmcsIHRvIGJlIGNvcnJlY3RlZFxuXHRcdFx0Y29uc3Qgc0VudGl0eVR5cGVOYW1lID0gb0FjdGlvbi5nZXRPYmplY3Qoc0NvbnRleHRQYXRoKS4kVHlwZTtcblx0XHRcdGNvbnN0IHNFbnRpdHlOYW1lID0gdGhpcy5nZXRFbnRpdHlTZXROYW1lKG9BY3Rpb24uZ2V0TW9kZWwoKSwgc0VudGl0eVR5cGVOYW1lKTtcblx0XHRcdGlmIChzRW50aXR5TmFtZSkge1xuXHRcdFx0XHRzQ29udGV4dFBhdGggPSBgLyR7c0VudGl0eU5hbWV9YDtcblx0XHRcdH1cblx0XHR9IGVsc2Uge1xuXHRcdFx0cmV0dXJuIHNDb250ZXh0UGF0aDtcblx0XHR9XG5cblx0XHRpZiAoYkNoZWNrU3RhdGljVmFsdWUpIHtcblx0XHRcdHJldHVybiBvQWN0aW9uLmdldE9iamVjdChgJHtzQ29udGV4dFBhdGh9LyR7c0FjdGlvbk5hbWV9QE9yZy5PRGF0YS5Db3JlLlYxLk9wZXJhdGlvbkF2YWlsYWJsZWApO1xuXHRcdH1cblx0XHRpZiAoYlJldHVybk9ubHlQYXRoKSB7XG5cdFx0XHRyZXR1cm4gYCR7c0NvbnRleHRQYXRofS8ke3NBY3Rpb25OYW1lfWA7XG5cdFx0fSBlbHNlIHtcblx0XHRcdHJldHVybiB7XG5cdFx0XHRcdHNDb250ZXh0UGF0aDogc0NvbnRleHRQYXRoLFxuXHRcdFx0XHRzUHJvcGVydHk6IG9BY3Rpb24uZ2V0T2JqZWN0KGAke3NDb250ZXh0UGF0aH0vJHtzQWN0aW9uTmFtZX1AT3JnLk9EYXRhLkNvcmUuVjEuT3BlcmF0aW9uQXZhaWxhYmxlLyRQYXRoYCksXG5cdFx0XHRcdHNCaW5kaW5nUGFyYW1ldGVyOiBvQWN0aW9uLmdldE9iamVjdChgJHtzQ29udGV4dFBhdGh9LyR7c0FjdGlvbk5hbWV9L0AkdWk1Lm92ZXJsb2FkLzAvJFBhcmFtZXRlci8wLyROYW1lYClcblx0XHRcdH07XG5cdFx0fVxuXHR9LFxuXG5cdGdldE5hdmlnYXRpb25Db250ZXh0OiBmdW5jdGlvbiAob0NvbnRleHQ6IGFueSkge1xuXHRcdHJldHVybiBPRGF0YU1vZGVsQW5ub3RhdGlvbkhlbHBlci5nZXROYXZpZ2F0aW9uUGF0aChvQ29udGV4dC5nZXRQYXRoKCkpO1xuXHR9LFxuXG5cdC8qKlxuXHQgKiBSZXR1cm5zIHRoZSBwYXRoIHdpdGhvdXQgdGhlIGVudGl0eSB0eXBlIChwb3RlbnRpYWxseSBmaXJzdCkgYW5kIHByb3BlcnR5IChsYXN0KSBwYXJ0IChvcHRpb25hbCkuXG5cdCAqIFRoZSByZXN1bHQgY2FuIGJlIGFuIGVtcHR5IHN0cmluZyBpZiBpdCBpcyBhIHNpbXBsZSBkaXJlY3QgcHJvcGVydHkuXG5cdCAqXG5cdCAqIElmIGFuZCBvbmx5IGlmIHRoZSBnaXZlbiBwcm9wZXJ0eSBwYXRoIHN0YXJ0cyB3aXRoIGEgc2xhc2ggKC8pLCBpdCBpcyBjb25zaWRlcmVkIHRoYXQgdGhlIGVudGl0eSB0eXBlXG5cdCAqIGlzIHBhcnQgb2YgdGhlIHBhdGggYW5kIHdpbGwgYmUgc3RyaXBwZWQgYXdheS5cblx0ICpcblx0ICogQHBhcmFtIHNQcm9wZXJ0eVBhdGhcblx0ICogQHBhcmFtIGJLZWVwUHJvcGVydHlcblx0ICogQHJldHVybnMgVGhlIG5hdmlnYXRpb24gcGF0aFxuXHQgKi9cblx0Z2V0TmF2aWdhdGlvblBhdGg6IGZ1bmN0aW9uIChzUHJvcGVydHlQYXRoOiBhbnksIGJLZWVwUHJvcGVydHk/OiBib29sZWFuKSB7XG5cdFx0Y29uc3QgYlN0YXJ0c1dpdGhFbnRpdHlUeXBlID0gc1Byb3BlcnR5UGF0aC5zdGFydHNXaXRoKFwiL1wiKTtcblx0XHRjb25zdCBhUGFydHMgPSBzUHJvcGVydHlQYXRoLnNwbGl0KFwiL1wiKS5maWx0ZXIoZnVuY3Rpb24gKHBhcnQ6IGFueSkge1xuXHRcdFx0cmV0dXJuICEhcGFydDtcblx0XHR9KTtcblx0XHRpZiAoYlN0YXJ0c1dpdGhFbnRpdHlUeXBlKSB7XG5cdFx0XHRhUGFydHMuc2hpZnQoKTtcblx0XHR9XG5cdFx0aWYgKCFiS2VlcFByb3BlcnR5KSB7XG5cdFx0XHRhUGFydHMucG9wKCk7XG5cdFx0fVxuXHRcdHJldHVybiBhUGFydHMuam9pbihcIi9cIik7XG5cdH0sXG5cblx0LyoqXG5cdCAqIFJldHVybnMgdGhlIGNvcnJlY3QgbWV0YW1vZGVsIHBhdGggZm9yIGJvdW5kIGFjdGlvbnMuXG5cdCAqXG5cdCAqIFNpbmNlIHRoaXMgbWV0aG9kIGlzIGNhbGxlZCBpcnJlc3BlY3RpdmUgb2YgdGhlIGFjdGlvbiB0eXBlLCB0aGlzIHdpbGwgYmUgYXBwbGllZCB0byB1bmJvdW5kIGFjdGlvbnMuXG5cdCAqIEluIHN1Y2ggYSBjYXNlLCBpZiBhbiBpbmNvcnJlY3QgcGF0aCBpcyByZXR1cm5lZCwgaXQgaXMgaWdub3JlZCBkdXJpbmcgdGVtcGxhdGluZy5cblx0ICpcblx0ICogRXhhbXBsZTogZm9yIHRoZSBib3VuZCBhY3Rpb24gc29tZU5hbWVTcGFjZS5Tb21lQm91bmRBY3Rpb24gb2YgZW50aXR5IHNldCBTb21lRW50aXR5U2V0LFxuXHQgKiB0aGUgc3RyaW5nIFwiL1NvbWVFbnRpdHlTZXQvc29tZU5hbWVTcGFjZS5Tb21lQm91bmRBY3Rpb25cIiBpcyByZXR1cm5lZC5cblx0ICpcblx0ICogQGZ1bmN0aW9uXG5cdCAqIEBzdGF0aWNcblx0ICogQG5hbWUgc2FwLmZlLm1hY3Jvcy5Db21tb25IZWxwZXIuZ2V0QWN0aW9uQ29udGV4dFxuXHQgKiBAbWVtYmVyb2Ygc2FwLmZlLm1hY3Jvcy5Db21tb25IZWxwZXJcblx0ICogQHBhcmFtIG9BY3Rpb24gQ29udGV4dCBvYmplY3QgZm9yIHRoZSBhY3Rpb25cblx0ICogQHJldHVybnMgQ29ycmVjdCBtZXRhbW9kZWwgcGF0aCBmb3IgYm91bmQgYW5kIGluY29ycmVjdCBwYXRoIGZvciB1bmJvdW5kIGFjdGlvbnNcblx0ICogQHByaXZhdGVcblx0ICogQHVpNS1yZXN0cmljdGVkXG5cdCAqL1xuXHRnZXRBY3Rpb25Db250ZXh0OiBmdW5jdGlvbiAob0FjdGlvbjogb2JqZWN0KSB7XG5cdFx0cmV0dXJuIENvbW1vbkhlbHBlci5nZXRBY3Rpb25QYXRoKG9BY3Rpb24sIHRydWUpO1xuXHR9LFxuXHQvKipcblx0ICogUmV0dXJucyB0aGUgbWV0YW1vZGVsIHBhdGggY29ycmVjdGx5IGZvciBvdmVybG9hZGVkIGJvdW5kIGFjdGlvbnMuIEZvciB1bmJvdW5kIGFjdGlvbnMsXG5cdCAqIHRoZSBpbmNvcnJlY3QgcGF0aCBpcyByZXR1cm5lZCwgYnV0IGlnbm9yZWQgZHVyaW5nIHRlbXBsYXRpbmcuXG5cdCAqIGUuZy4gZm9yIGJvdW5kIGFjdGlvbiBzb21lTmFtZVNwYWNlLlNvbWVCb3VuZEFjdGlvbiBvZiBlbnRpdHkgc2V0IFNvbWVFbnRpdHlTZXQsXG5cdCAqIHRoZSBzdHJpbmcgXCIvU29tZUVudGl0eVNldC9zb21lTmFtZVNwYWNlLlNvbWVCb3VuZEFjdGlvbi9AJHVpNS5vdmVybG9hZC8wXCIgaXMgcmV0dXJuZWQuXG5cdCAqXG5cdCAqIEBmdW5jdGlvblxuXHQgKiBAc3RhdGljXG5cdCAqIEBuYW1lIHNhcC5mZS5tYWNyb3MuQ29tbW9uSGVscGVyLmdldFBhdGhUb0JvdW5kQWN0aW9uT3ZlcmxvYWRcblx0ICogQG1lbWJlcm9mIHNhcC5mZS5tYWNyb3MuQ29tbW9uSGVscGVyXG5cdCAqIEBwYXJhbSBvQWN0aW9uIFRoZSBjb250ZXh0IG9iamVjdCBmb3IgdGhlIGFjdGlvblxuXHQgKiBAcmV0dXJucyBUaGUgY29ycmVjdCBtZXRhbW9kZWwgcGF0aCBmb3IgYm91bmQgYWN0aW9uIG92ZXJsb2FkIGFuZCBpbmNvcnJlY3QgcGF0aCBmb3IgdW5ib3VuZCBhY3Rpb25zXG5cdCAqIEBwcml2YXRlXG5cdCAqIEB1aTUtcmVzdHJpY3RlZFxuXHQgKi9cblx0Z2V0UGF0aFRvQm91bmRBY3Rpb25PdmVybG9hZDogZnVuY3Rpb24gKG9BY3Rpb246IG9iamVjdCkge1xuXHRcdGNvbnN0IHNQYXRoID0gQ29tbW9uSGVscGVyLmdldEFjdGlvblBhdGgob0FjdGlvbiwgdHJ1ZSk7XG5cdFx0cmV0dXJuIGAke3NQYXRofS9AJHVpNS5vdmVybG9hZC8wYDtcblx0fSxcblxuXHQvKipcblx0ICogUmV0dXJucyB0aGUgc3RyaW5nIHdpdGggc2luZ2xlIHF1b3Rlcy5cblx0ICpcblx0ICogQGZ1bmN0aW9uXG5cdCAqIEBtZW1iZXJvZiBzYXAuZmUubWFjcm9zLkNvbW1vbkhlbHBlclxuXHQgKiBAcGFyYW0gc1ZhbHVlIFNvbWUgc3RyaW5nIHRoYXQgbmVlZHMgdG8gYmUgY29udmVydGVkIGludG8gc2luZ2xlIHF1b3Rlc1xuXHQgKiBAcGFyYW0gW2JFc2NhcGVdIFNob3VsZCB0aGUgc3RyaW5nIGJlIGVzY2FwZWQgYmVmb3JlaGFuZFxuXHQgKiBAcmV0dXJucyAtIFN0cmluZyB3aXRoIHNpbmdsZSBxdW90ZXNcblx0ICovXG5cdGFkZFNpbmdsZVF1b3RlczogZnVuY3Rpb24gKHNWYWx1ZTogc3RyaW5nLCBiRXNjYXBlPzogYm9vbGVhbikge1xuXHRcdGlmIChiRXNjYXBlICYmIHNWYWx1ZSkge1xuXHRcdFx0c1ZhbHVlID0gdGhpcy5lc2NhcGVTaW5nbGVRdW90ZXMoc1ZhbHVlKTtcblx0XHR9XG5cdFx0cmV0dXJuIGAnJHtzVmFsdWV9J2A7XG5cdH0sXG5cblx0LyoqXG5cdCAqIFJldHVybnMgdGhlIHN0cmluZyB3aXRoIGVzY2FwZWQgc2luZ2xlIHF1b3Rlcy5cblx0ICpcblx0ICogQGZ1bmN0aW9uXG5cdCAqIEBtZW1iZXJvZiBzYXAuZmUubWFjcm9zLkNvbW1vbkhlbHBlclxuXHQgKiBAcGFyYW0gc1ZhbHVlIFNvbWUgc3RyaW5nIHRoYXQgbmVlZHMgZXNjYXBpbmcgb2Ygc2luZ2xlIHF1b3Rlc1xuXHQgKiBAcmV0dXJucyAtIFN0cmluZyB3aXRoIGVzY2FwZWQgc2luZ2xlIHF1b3Rlc1xuXHQgKi9cblx0ZXNjYXBlU2luZ2xlUXVvdGVzOiBmdW5jdGlvbiAoc1ZhbHVlOiBzdHJpbmcpIHtcblx0XHRyZXR1cm4gc1ZhbHVlLnJlcGxhY2UoL1snXS9nLCBcIlxcXFwnXCIpO1xuXHR9LFxuXG5cdC8qKlxuXHQgKiBSZXR1cm5zIHRoZSBmdW5jdGlvbiBzdHJpbmdcblx0ICogVGhlIGZpcnN0IGFyZ3VtZW50IG9mIGdlbmVyYXRlRnVuY3Rpb24gaXMgbmFtZSBvZiB0aGUgZ2VuZXJhdGVkIGZ1bmN0aW9uIHN0cmluZy5cblx0ICogUmVtYWluaW5nIGFyZ3VtZW50cyBvZiBnZW5lcmF0ZUZ1bmN0aW9uIGFyZSBhcmd1bWVudHMgb2YgdGhlIG5ld2x5IGdlbmVyYXRlZCBmdW5jdGlvbiBzdHJpbmcuXG5cdCAqXG5cdCAqIEBmdW5jdGlvblxuXHQgKiBAbWVtYmVyb2Ygc2FwLmZlLm1hY3Jvcy5Db21tb25IZWxwZXJcblx0ICogQHBhcmFtIHNGdW5jTmFtZSBTb21lIHN0cmluZyBmb3IgdGhlIGZ1bmN0aW9uIG5hbWVcblx0ICogQHBhcmFtIGFyZ3MgVGhlIHJlbWFpbmluZyBhcmd1bWVudHNcblx0ICogQHJldHVybnMgLSBGdW5jdGlvbiBzdHJpbmcgZGVwZW5kcyBvbiBhcmd1bWVudHMgcGFzc2VkXG5cdCAqL1xuXHRnZW5lcmF0ZUZ1bmN0aW9uOiBmdW5jdGlvbiAoc0Z1bmNOYW1lOiBzdHJpbmcsIC4uLmFyZ3M6IHN0cmluZ1tdKSB7XG5cdFx0bGV0IHNQYXJhbXMgPSBcIlwiO1xuXHRcdGZvciAobGV0IGkgPSAwOyBpIDwgYXJncy5sZW5ndGg7IGkrKykge1xuXHRcdFx0c1BhcmFtcyArPSBhcmdzW2ldO1xuXHRcdFx0aWYgKGkgPCBhcmdzLmxlbmd0aCAtIDEpIHtcblx0XHRcdFx0c1BhcmFtcyArPSBcIiwgXCI7XG5cdFx0XHR9XG5cdFx0fVxuXG5cdFx0bGV0IHNGdW5jdGlvbiA9IGAke3NGdW5jTmFtZX0oKWA7XG5cdFx0aWYgKHNQYXJhbXMpIHtcblx0XHRcdHNGdW5jdGlvbiA9IGAke3NGdW5jTmFtZX0oJHtzUGFyYW1zfSlgO1xuXHRcdH1cblx0XHRyZXR1cm4gc0Z1bmN0aW9uO1xuXHR9LFxuXHQvKlxuXHQgKiBSZXR1cm5zIHRoZSB2aXNpYmlsaXR5IGV4cHJlc3Npb24gZm9yIGRhdGFwb2ludCB0aXRsZS9saW5rXG5cdCAqXG5cdCAqIEBmdW5jdGlvblxuXHQgKiBAcGFyYW0ge3N0cmluZ30gW3NQYXRoXSBhbm5vdGF0aW9uIHBhdGggb2YgZGF0YSBwb2ludCBvciBNaWNyb2NoYXJ0XG5cdCAqIEBwYXJhbSB7Ym9vbGVhbn0gW2JMaW5rXSB0cnVlIGlmIGxpbmsgdmlzaWJpbGl0eSBpcyBiZWluZyBkZXRlcm1pbmVkLCBmYWxzZSBpZiB0aXRsZSB2aXNpYmlsaXR5IGlzIGJlaW5nIGRldGVybWluZWRcblx0ICogQHBhcmFtIHtib29sZWFufSBbYkZpZWxkVmlzaWJpbGl0eV0gdHJ1ZSBpZiBmaWVsZCBpcyB2c2lpYmxlLCBmYWxzZSBvdGhlcndpc2Vcblx0ICogQHJldHVybnMgIHtzdHJpbmd9IHNWaXNpYmlsaXR5RXhwIFVzZWQgdG8gZ2V0IHRoZSAgdmlzaWJpbGl0eSBiaW5kaW5nIGZvciBEYXRhUG9pbnRzIHRpdGxlIGluIHRoZSBIZWFkZXIuXG5cdCAqXG5cdCAqL1xuXG5cdGdldEhlYWRlckRhdGFQb2ludExpbmtWaXNpYmlsaXR5OiBmdW5jdGlvbiAoc1BhdGg6IGFueSwgYkxpbms6IGFueSwgYkZpZWxkVmlzaWJpbGl0eTogYW55KSB7XG5cdFx0bGV0IHNWaXNpYmlsaXR5RXhwO1xuXHRcdGlmIChiRmllbGRWaXNpYmlsaXR5KSB7XG5cdFx0XHRzVmlzaWJpbGl0eUV4cCA9IGJMaW5rXG5cdFx0XHRcdD8gXCJ7PSAke2ludGVybmFsPmlzSGVhZGVyRFBMaW5rVmlzaWJsZS9cIiArIHNQYXRoICsgXCJ9ID09PSB0cnVlICYmIFwiICsgYkZpZWxkVmlzaWJpbGl0eSArIFwifVwiXG5cdFx0XHRcdDogXCJ7PSAke2ludGVybmFsPmlzSGVhZGVyRFBMaW5rVmlzaWJsZS9cIiArIHNQYXRoICsgXCJ9ICE9PSB0cnVlICYmIFwiICsgYkZpZWxkVmlzaWJpbGl0eSArIFwifVwiO1xuXHRcdH0gZWxzZSB7XG5cdFx0XHRzVmlzaWJpbGl0eUV4cCA9IGJMaW5rXG5cdFx0XHRcdD8gXCJ7PSAke2ludGVybmFsPmlzSGVhZGVyRFBMaW5rVmlzaWJsZS9cIiArIHNQYXRoICsgXCJ9ID09PSB0cnVlfVwiXG5cdFx0XHRcdDogXCJ7PSAke2ludGVybmFsPmlzSGVhZGVyRFBMaW5rVmlzaWJsZS9cIiArIHNQYXRoICsgXCJ9ICE9PSB0cnVlfVwiO1xuXHRcdH1cblx0XHRyZXR1cm4gc1Zpc2liaWxpdHlFeHA7XG5cdH0sXG5cblx0LyoqXG5cdCAqIENvbnZlcnRzIG9iamVjdCB0byBzdHJpbmcoZGlmZmVyZW50IGZyb20gSlNPTi5zdHJpbmdpZnkgb3IudG9TdHJpbmcpLlxuXHQgKlxuXHQgKiBAZnVuY3Rpb25cblx0ICogQG1lbWJlcm9mIHNhcC5mZS5tYWNyb3MuQ29tbW9uSGVscGVyXG5cdCAqIEBwYXJhbSBvUGFyYW1zIFNvbWUgb2JqZWN0XG5cdCAqIEByZXR1cm5zIC0gT2JqZWN0IHN0cmluZ1xuXHQgKi9cblx0b2JqZWN0VG9TdHJpbmc6IGZ1bmN0aW9uIChvUGFyYW1zOiBhbnkpIHtcblx0XHRsZXQgaU51bWJlck9mS2V5cyA9IE9iamVjdC5rZXlzKG9QYXJhbXMpLmxlbmd0aCxcblx0XHRcdHNQYXJhbXMgPSBcIlwiO1xuXG5cdFx0Zm9yIChjb25zdCBzS2V5IGluIG9QYXJhbXMpIHtcblx0XHRcdGxldCBzVmFsdWUgPSBvUGFyYW1zW3NLZXldO1xuXHRcdFx0aWYgKHNWYWx1ZSAmJiB0eXBlb2Ygc1ZhbHVlID09PSBcIm9iamVjdFwiKSB7XG5cdFx0XHRcdHNWYWx1ZSA9IHRoaXMub2JqZWN0VG9TdHJpbmcoc1ZhbHVlKTtcblx0XHRcdH1cblx0XHRcdHNQYXJhbXMgKz0gYCR7c0tleX06ICR7c1ZhbHVlfWA7XG5cdFx0XHRpZiAoaU51bWJlck9mS2V5cyA+IDEpIHtcblx0XHRcdFx0LS1pTnVtYmVyT2ZLZXlzO1xuXHRcdFx0XHRzUGFyYW1zICs9IFwiLCBcIjtcblx0XHRcdH1cblx0XHR9XG5cblx0XHRyZXR1cm4gYHsgJHtzUGFyYW1zfX1gO1xuXHR9LFxuXG5cdC8qKlxuXHQgKiBSZW1vdmVzIGVzY2FwZSBjaGFyYWN0ZXJzIChcXCkgZnJvbSBhbiBleHByZXNzaW9uLlxuXHQgKlxuXHQgKiBAZnVuY3Rpb25cblx0ICogQG1lbWJlcm9mIHNhcC5mZS5tYWNyb3MuQ29tbW9uSGVscGVyXG5cdCAqIEBwYXJhbSBzRXhwcmVzc2lvbiBBbiBleHByZXNzaW9uIHdpdGggZXNjYXBlIGNoYXJhY3RlcnNcblx0ICogQHJldHVybnMgRXhwcmVzc2lvbiBzdHJpbmcgd2l0aG91dCBlc2NhcGUgY2hhcmFjdGVycyBvciB1bmRlZmluZWRcblx0ICovXG5cdHJlbW92ZUVzY2FwZUNoYXJhY3RlcnM6IGZ1bmN0aW9uIChzRXhwcmVzc2lvbjogc3RyaW5nKSB7XG5cdFx0cmV0dXJuIHNFeHByZXNzaW9uID8gc0V4cHJlc3Npb24ucmVwbGFjZSgvXFxcXD9cXFxcKFt7fV0pL2csIFwiJDFcIikgOiB1bmRlZmluZWQ7XG5cdH0sXG5cblx0LyoqXG5cdCAqIE1ha2VzIHVwZGF0ZXMgdG8gYSBzdHJpbmdpZmllZCBvYmplY3Qgc28gdGhhdCBpdCB3b3JrcyBwcm9wZXJseSBpbiBhIHRlbXBsYXRlIGJ5IGFkZGluZyB1aTVPYmplY3Q6dHJ1ZS5cblx0ICpcblx0ICogQHBhcmFtIHNTdHJpbmdpZmllZFxuXHQgKiBAcmV0dXJucyBUaGUgdXBkYXRlZCBzdHJpbmcgcmVwcmVzZW50YXRpb24gb2YgdGhlIG9iamVjdFxuXHQgKi9cblx0c3RyaW5naWZ5T2JqZWN0OiBmdW5jdGlvbiAoc1N0cmluZ2lmaWVkOiBzdHJpbmcpIHtcblx0XHRpZiAoIXNTdHJpbmdpZmllZCB8fCBzU3RyaW5naWZpZWQgPT09IFwie31cIikge1xuXHRcdFx0cmV0dXJuIHVuZGVmaW5lZDtcblx0XHR9IGVsc2Uge1xuXHRcdFx0Y29uc3Qgb09iamVjdCA9IEpTT04ucGFyc2Uoc1N0cmluZ2lmaWVkKTtcblx0XHRcdGlmICh0eXBlb2Ygb09iamVjdCA9PT0gXCJvYmplY3RcIiAmJiAhQXJyYXkuaXNBcnJheShvT2JqZWN0KSkge1xuXHRcdFx0XHRjb25zdCBvVUk1T2JqZWN0ID0ge1xuXHRcdFx0XHRcdHVpNW9iamVjdDogdHJ1ZVxuXHRcdFx0XHR9O1xuXHRcdFx0XHRPYmplY3QuYXNzaWduKG9VSTVPYmplY3QsIG9PYmplY3QpO1xuXHRcdFx0XHRyZXR1cm4gSlNPTi5zdHJpbmdpZnkob1VJNU9iamVjdCk7XG5cdFx0XHR9IGVsc2Uge1xuXHRcdFx0XHRjb25zdCBzVHlwZSA9IEFycmF5LmlzQXJyYXkob09iamVjdCkgPyBcIkFycmF5XCIgOiB0eXBlb2Ygb09iamVjdDtcblx0XHRcdFx0TG9nLmVycm9yKGBVbmV4cGVjdGVkIG9iamVjdCB0eXBlIGluIHN0cmluZ2lmeU9iamVjdCAoJHtzVHlwZX0pIC0gb25seSB3b3JrcyB3aXRoIG9iamVjdGApO1xuXHRcdFx0XHR0aHJvdyBuZXcgRXJyb3IoXCJzdHJpbmdpZnlPYmplY3Qgb25seSB3b3JrcyB3aXRoIG9iamVjdHMhXCIpO1xuXHRcdFx0fVxuXHRcdH1cblx0fSxcblxuXHQvKipcblx0ICogQ3JlYXRlIGEgc3RyaW5nIHJlcHJlc2VudGF0aW9uIG9mIHRoZSBnaXZlbiBkYXRhLCB0YWtpbmcgY2FyZSB0aGF0IGl0IGlzIG5vdCB0cmVhdGVkIGFzIGEgYmluZGluZyBleHByZXNzaW9uLlxuXHQgKlxuXHQgKiBAcGFyYW0gdkRhdGEgVGhlIGRhdGEgdG8gc3RyaW5naWZ5XG5cdCAqIEByZXR1cm5zIFRoZSBzdHJpbmcgcmVwcmVzZW50YXRpb24gb2YgdGhlIGRhdGEuXG5cdCAqL1xuXHRzdHJpbmdpZnlDdXN0b21EYXRhOiBmdW5jdGlvbiAodkRhdGE6IG9iamVjdCB8IHN0cmluZyB8IHVuZGVmaW5lZCkge1xuXHRcdGNvbnN0IG9PYmplY3Q6IGFueSA9IHtcblx0XHRcdHVpNW9iamVjdDogdHJ1ZVxuXHRcdH07XG5cdFx0b09iamVjdFtcImN1c3RvbURhdGFcIl0gPSB2RGF0YSBpbnN0YW5jZW9mIENvbnRleHQgPyB2RGF0YS5nZXRPYmplY3QoKSA6IHZEYXRhO1xuXHRcdHJldHVybiBKU09OLnN0cmluZ2lmeShvT2JqZWN0KTtcblx0fSxcblxuXHQvKipcblx0ICogUGFyc2VzIHRoZSBnaXZlbiBkYXRhLCBwb3RlbnRpYWxseSB1bndyYXBzIHRoZSBkYXRhLlxuXHQgKlxuXHQgKiBAcGFyYW0gdkRhdGEgVGhlIGRhdGEgdG8gcGFyc2Vcblx0ICogQHJldHVybnMgVGhlIHJlc3VsdCBvZiB0aGUgZGF0YSBwYXJzaW5nXG5cdCAqL1xuXHRwYXJzZUN1c3RvbURhdGE6IGZ1bmN0aW9uICh2RGF0YTogYW55KSB7XG5cdFx0dkRhdGEgPSB0eXBlb2YgdkRhdGEgPT09IFwic3RyaW5nXCIgPyBKU09OLnBhcnNlKHZEYXRhKSA6IHZEYXRhO1xuXHRcdGlmICh2RGF0YSAmJiB2RGF0YS5oYXNPd25Qcm9wZXJ0eShcImN1c3RvbURhdGFcIikpIHtcblx0XHRcdHJldHVybiB2RGF0YVtcImN1c3RvbURhdGFcIl07XG5cdFx0fVxuXHRcdHJldHVybiB2RGF0YTtcblx0fSxcblx0Z2V0Q29udGV4dFBhdGg6IGZ1bmN0aW9uIChvVmFsdWU6IGFueSwgb0ludGVyZmFjZTogYW55KSB7XG5cdFx0Y29uc3Qgc1BhdGggPSBvSW50ZXJmYWNlICYmIG9JbnRlcmZhY2UuY29udGV4dCAmJiBvSW50ZXJmYWNlLmNvbnRleHQuZ2V0UGF0aCgpO1xuXHRcdHJldHVybiBzUGF0aFtzUGF0aC5sZW5ndGggLSAxXSA9PT0gXCIvXCIgPyBzUGF0aC5zbGljZSgwLCAtMSkgOiBzUGF0aDtcblx0fSxcblx0LyoqXG5cdCAqIFJldHVybnMgYSBzdHJpbmdpZmllZCBKU09OIG9iamVjdCBjb250YWluaW5nICBQcmVzZW50YXRpb24gVmFyaWFudCBzb3J0IGNvbmRpdGlvbnMuXG5cdCAqXG5cdCAqIEBwYXJhbSBvQ29udGV4dFxuXHQgKiBAcGFyYW0gb1ByZXNlbnRhdGlvblZhcmlhbnQgUHJlc2VudGF0aW9uIHZhcmlhbnQgQW5ub3RhdGlvblxuXHQgKiBAcGFyYW0gc1ByZXNlbnRhdGlvblZhcmlhbnRQYXRoXG5cdCAqIEByZXR1cm5zIFN0cmluZ2lmaWVkIEpTT04gb2JqZWN0XG5cdCAqL1xuXHRnZXRTb3J0Q29uZGl0aW9uczogZnVuY3Rpb24gKG9Db250ZXh0OiBhbnksIG9QcmVzZW50YXRpb25WYXJpYW50OiBhbnksIHNQcmVzZW50YXRpb25WYXJpYW50UGF0aDogc3RyaW5nKSB7XG5cdFx0aWYgKFxuXHRcdFx0b1ByZXNlbnRhdGlvblZhcmlhbnQgJiZcblx0XHRcdENvbW1vbkhlbHBlci5faXNQcmVzZW50YXRpb25WYXJpYW50QW5ub3RhdGlvbihzUHJlc2VudGF0aW9uVmFyaWFudFBhdGgpICYmXG5cdFx0XHRvUHJlc2VudGF0aW9uVmFyaWFudC5Tb3J0T3JkZXJcblx0XHQpIHtcblx0XHRcdGNvbnN0IGFTb3J0Q29uZGl0aW9uczogYW55ID0ge1xuXHRcdFx0XHRzb3J0ZXJzOiBbXVxuXHRcdFx0fTtcblxuXHRcdFx0Y29uc3Qgc0VudGl0eVBhdGggPSBvQ29udGV4dC5nZXRQYXRoKDApLnNwbGl0KFwiQFwiKVswXTtcblx0XHRcdG9QcmVzZW50YXRpb25WYXJpYW50LlNvcnRPcmRlci5mb3JFYWNoKGZ1bmN0aW9uIChvQ29uZGl0aW9uOiBhbnkgPSB7fSkge1xuXHRcdFx0XHRsZXQgb1NvcnRQcm9wZXJ0eTogYW55ID0ge307XG5cdFx0XHRcdGNvbnN0IG9Tb3J0ZXI6IGFueSA9IHt9O1xuXHRcdFx0XHRpZiAob0NvbmRpdGlvbi5EeW5hbWljUHJvcGVydHkpIHtcblx0XHRcdFx0XHRvU29ydFByb3BlcnR5ID0gb0NvbnRleHQuZ2V0TW9kZWwoMCkuZ2V0T2JqZWN0KHNFbnRpdHlQYXRoICsgb0NvbmRpdGlvbi5EeW5hbWljUHJvcGVydHkuJEFubm90YXRpb25QYXRoKT8uTmFtZTtcblx0XHRcdFx0fSBlbHNlIGlmIChvQ29uZGl0aW9uLlByb3BlcnR5KSB7XG5cdFx0XHRcdFx0b1NvcnRQcm9wZXJ0eSA9IG9Db25kaXRpb24uUHJvcGVydHkuJFByb3BlcnR5UGF0aDtcblx0XHRcdFx0fVxuXHRcdFx0XHRpZiAob1NvcnRQcm9wZXJ0eSkge1xuXHRcdFx0XHRcdG9Tb3J0ZXIubmFtZSA9IG9Tb3J0UHJvcGVydHk7XG5cdFx0XHRcdFx0b1NvcnRlci5kZXNjZW5kaW5nID0gISFvQ29uZGl0aW9uLkRlc2NlbmRpbmc7XG5cdFx0XHRcdFx0YVNvcnRDb25kaXRpb25zLnNvcnRlcnMucHVzaChvU29ydGVyKTtcblx0XHRcdFx0fSBlbHNlIHtcblx0XHRcdFx0XHR0aHJvdyBuZXcgRXJyb3IoXCJQbGVhc2UgZGVmaW5lIHRoZSByaWdodCBwYXRoIHRvIHRoZSBzb3J0IHByb3BlcnR5XCIpO1xuXHRcdFx0XHR9XG5cdFx0XHR9KTtcblx0XHRcdHJldHVybiBKU09OLnN0cmluZ2lmeShhU29ydENvbmRpdGlvbnMpO1xuXHRcdH1cblx0XHRyZXR1cm4gdW5kZWZpbmVkO1xuXHR9LFxuXHRfaXNQcmVzZW50YXRpb25WYXJpYW50QW5ub3RhdGlvbjogZnVuY3Rpb24gKGFubm90YXRpb25QYXRoOiBzdHJpbmcpIHtcblx0XHRyZXR1cm4gKFxuXHRcdFx0YW5ub3RhdGlvblBhdGguaW5kZXhPZihgQCR7VUlBbm5vdGF0aW9uVGVybXMuUHJlc2VudGF0aW9uVmFyaWFudH1gKSA+IC0xIHx8XG5cdFx0XHRhbm5vdGF0aW9uUGF0aC5pbmRleE9mKGBAJHtVSUFubm90YXRpb25UZXJtcy5TZWxlY3Rpb25QcmVzZW50YXRpb25WYXJpYW50fWApID4gLTFcblx0XHQpO1xuXHR9LFxuXHRjcmVhdGVQcmVzZW50YXRpb25QYXRoQ29udGV4dDogZnVuY3Rpb24gKG9QcmVzZW50YXRpb25Db250ZXh0OiBhbnkpIHtcblx0XHRjb25zdCBhUGF0aHMgPSBvUHJlc2VudGF0aW9uQ29udGV4dC5zUGF0aC5zcGxpdChcIkBcIikgfHwgW107XG5cdFx0Y29uc3Qgb01vZGVsID0gb1ByZXNlbnRhdGlvbkNvbnRleHQuZ2V0TW9kZWwoKTtcblx0XHRpZiAoYVBhdGhzLmxlbmd0aCAmJiBhUGF0aHNbYVBhdGhzLmxlbmd0aCAtIDFdLmluZGV4T2YoXCJjb20uc2FwLnZvY2FidWxhcmllcy5VSS52MS5TZWxlY3Rpb25QcmVzZW50YXRpb25WYXJpYW50XCIpID4gLTEpIHtcblx0XHRcdGNvbnN0IHNQYXRoID0gb1ByZXNlbnRhdGlvbkNvbnRleHQuc1BhdGguc3BsaXQoXCIvUHJlc2VudGF0aW9uVmFyaWFudFwiKVswXTtcblx0XHRcdHJldHVybiBvTW9kZWwuY3JlYXRlQmluZGluZ0NvbnRleHQoYCR7c1BhdGh9QHNhcHVpLm5hbWVgKTtcblx0XHR9XG5cdFx0cmV0dXJuIG9Nb2RlbC5jcmVhdGVCaW5kaW5nQ29udGV4dChgJHtvUHJlc2VudGF0aW9uQ29udGV4dC5zUGF0aH1Ac2FwdWkubmFtZWApO1xuXHR9LFxuXHRnZXRQcmVzc0hhbmRsZXJGb3JEYXRhRmllbGRGb3JJQk46IGZ1bmN0aW9uIChvRGF0YUZpZWxkOiBhbnksIHNDb250ZXh0Pzogc3RyaW5nLCBiTmF2aWdhdGVXaXRoQ29uZmlybWF0aW9uRGlhbG9nPzogYm9vbGVhbikge1xuXHRcdGlmICghb0RhdGFGaWVsZCkgcmV0dXJuIHVuZGVmaW5lZDtcblx0XHRjb25zdCBtTmF2aWdhdGlvblBhcmFtZXRlcnM6IGFueSA9IHtcblx0XHRcdG5hdmlnYXRpb25Db250ZXh0czogc0NvbnRleHQgPyBzQ29udGV4dCA6IFwiJHskc291cmNlPi99LmdldEJpbmRpbmdDb250ZXh0KClcIlxuXHRcdH07XG5cdFx0aWYgKG9EYXRhRmllbGQuUmVxdWlyZXNDb250ZXh0ICYmICFvRGF0YUZpZWxkLklubGluZSAmJiBiTmF2aWdhdGVXaXRoQ29uZmlybWF0aW9uRGlhbG9nKSB7XG5cdFx0XHRtTmF2aWdhdGlvblBhcmFtZXRlcnMuYXBwbGljYWJsZUNvbnRleHRzID1cblx0XHRcdFx0XCIke2ludGVybmFsPmlibi9cIiArIG9EYXRhRmllbGQuU2VtYW50aWNPYmplY3QgKyBcIi1cIiArIG9EYXRhRmllbGQuQWN0aW9uICsgXCIvYUFwcGxpY2FibGUvfVwiO1xuXHRcdFx0bU5hdmlnYXRpb25QYXJhbWV0ZXJzLm5vdEFwcGxpY2FibGVDb250ZXh0cyA9XG5cdFx0XHRcdFwiJHtpbnRlcm5hbD5pYm4vXCIgKyBvRGF0YUZpZWxkLlNlbWFudGljT2JqZWN0ICsgXCItXCIgKyBvRGF0YUZpZWxkLkFjdGlvbiArIFwiL2FOb3RBcHBsaWNhYmxlL31cIjtcblx0XHRcdG1OYXZpZ2F0aW9uUGFyYW1ldGVycy5sYWJlbCA9IHRoaXMuYWRkU2luZ2xlUXVvdGVzKG9EYXRhRmllbGQuTGFiZWwsIHRydWUpO1xuXHRcdH1cblx0XHRpZiAob0RhdGFGaWVsZC5NYXBwaW5nKSB7XG5cdFx0XHRtTmF2aWdhdGlvblBhcmFtZXRlcnMuc2VtYW50aWNPYmplY3RNYXBwaW5nID0gdGhpcy5hZGRTaW5nbGVRdW90ZXMoSlNPTi5zdHJpbmdpZnkob0RhdGFGaWVsZC5NYXBwaW5nKSk7XG5cdFx0fVxuXHRcdHJldHVybiB0aGlzLmdlbmVyYXRlRnVuY3Rpb24oXG5cdFx0XHRiTmF2aWdhdGVXaXRoQ29uZmlybWF0aW9uRGlhbG9nID8gXCIuX2ludGVudEJhc2VkTmF2aWdhdGlvbi5uYXZpZ2F0ZVdpdGhDb25maXJtYXRpb25EaWFsb2dcIiA6IFwiLl9pbnRlbnRCYXNlZE5hdmlnYXRpb24ubmF2aWdhdGVcIixcblx0XHRcdHRoaXMuYWRkU2luZ2xlUXVvdGVzKG9EYXRhRmllbGQuU2VtYW50aWNPYmplY3QpLFxuXHRcdFx0dGhpcy5hZGRTaW5nbGVRdW90ZXMob0RhdGFGaWVsZC5BY3Rpb24pLFxuXHRcdFx0dGhpcy5vYmplY3RUb1N0cmluZyhtTmF2aWdhdGlvblBhcmFtZXRlcnMpXG5cdFx0KTtcblx0fSxcblx0Z2V0RW50aXR5U2V0OiBmdW5jdGlvbiAob0NvbnRleHQ6IGFueSkge1xuXHRcdGNvbnN0IHNQYXRoID0gb0NvbnRleHQuZ2V0UGF0aCgpO1xuXHRcdHJldHVybiBNb2RlbEhlbHBlci5nZXRFbnRpdHlTZXRQYXRoKHNQYXRoKTtcblx0fSxcblxuXHQvKipcblx0ICogSGFuZGxlcyB0aGUgdmlzaWJpbGl0eSBvZiBmb3JtIG1lbnUgYWN0aW9ucyBib3RoIGluIHBhdGggYmFzZWQgYW5kIHN0YXRpYyB2YWx1ZSBzY2VuYXJpb3MuXG5cdCAqXG5cdCAqIEBmdW5jdGlvblxuXHQgKiBAbWVtYmVyb2Ygc2FwLmZlLm1hY3Jvcy5Db21tb25IZWxwZXJcblx0ICogQHBhcmFtIHNWaXNpYmxlVmFsdWUgRWl0aGVyIHN0YXRpYyBib29sZWFuIHZhbHVlcyBvciBBcnJheSBvZiBwYXRoIGV4cHJlc3Npb25zIGZvciB2aXNpYmlsaXR5IG9mIG1lbnUgYnV0dG9uLlxuXHQgKiBAcmV0dXJucyBUaGUgYmluZGluZyBleHByZXNzaW9uIGRldGVybWluaW5nIHRoZSB2aXNpYmlsaXR5IG9mIG1lbnUgYWN0aW9ucy5cblx0ICovXG5cdGhhbmRsZVZpc2liaWxpdHlPZk1lbnVBY3Rpb25zOiBmdW5jdGlvbiAoc1Zpc2libGVWYWx1ZTogYW55KSB7XG5cdFx0Y29uc3QgY29tYmluZWRDb25kaXRpb25zID0gW107XG5cdFx0aWYgKEFycmF5LmlzQXJyYXkoc1Zpc2libGVWYWx1ZSkpIHtcblx0XHRcdGZvciAobGV0IGkgPSAwOyBpIDwgc1Zpc2libGVWYWx1ZS5sZW5ndGg7IGkrKykge1xuXHRcdFx0XHRpZiAoc1Zpc2libGVWYWx1ZVtpXS5pbmRleE9mKFwie1wiKSA+IC0xICYmIHNWaXNpYmxlVmFsdWVbaV0uaW5kZXhPZihcIns9XCIpID09PSAtMSkge1xuXHRcdFx0XHRcdHNWaXNpYmxlVmFsdWVbaV0gPSBcIns9XCIgKyBzVmlzaWJsZVZhbHVlW2ldICsgXCJ9XCI7XG5cdFx0XHRcdH1cblx0XHRcdFx0aWYgKHNWaXNpYmxlVmFsdWVbaV0uc3BsaXQoXCJ7PVwiKS5sZW5ndGggPiAwKSB7XG5cdFx0XHRcdFx0c1Zpc2libGVWYWx1ZVtpXSA9IHNWaXNpYmxlVmFsdWVbaV0uc3BsaXQoXCJ7PVwiKVsxXS5zbGljZSgwLCAtMSk7XG5cdFx0XHRcdH1cblx0XHRcdFx0Y29tYmluZWRDb25kaXRpb25zLnB1c2goYCgke3NWaXNpYmxlVmFsdWVbaV19KWApO1xuXHRcdFx0fVxuXHRcdH1cblx0XHRyZXR1cm4gY29tYmluZWRDb25kaXRpb25zLmxlbmd0aCA+IDAgPyBgez0gJHtjb21iaW5lZENvbmRpdGlvbnMuam9pbihcIiB8fCBcIil9fWAgOiBzVmlzaWJsZVZhbHVlO1xuXHR9LFxuXHQvKipcblx0ICogTWV0aG9kIHRvIGRvIHRoZSBjYWxjdWxhdGlvbiBvZiBjcml0aWNhbGl0eSBpbiBjYXNlIENyaXRpY2FsaXR5Q2FsY3VsYXRpb24gcHJlc2VudCBpbiB0aGUgYW5ub3RhdGlvblxuXHQgKlxuXHQgKiBUaGUgY2FsY3VsYXRpb24gaXMgZG9uZSBieSBjb21wYXJpbmcgYSB2YWx1ZSB0byB0aGUgdGhyZXNob2xkIHZhbHVlcyByZWxldmFudCBmb3IgdGhlIHNwZWNpZmllZCBpbXByb3ZlbWVudCBkaXJlY3Rpb24uXG5cdCAqIEZvciBpbXByb3ZlbWVudCBkaXJlY3Rpb24gVGFyZ2V0LCB0aGUgY3JpdGljYWxpdHkgaXMgY2FsY3VsYXRlZCB1c2luZyBib3RoIGxvdyBhbmQgaGlnaCB0aHJlc2hvbGQgdmFsdWVzLiBJdCB3aWxsIGJlXG5cdCAqXG5cdCAqIC0gUG9zaXRpdmUgaWYgdGhlIHZhbHVlIGlzIGdyZWF0ZXIgdGhhbiBvciBlcXVhbCB0byBBY2NlcHRhbmNlUmFuZ2VMb3dWYWx1ZSBhbmQgbG93ZXIgdGhhbiBvciBlcXVhbCB0byBBY2NlcHRhbmNlUmFuZ2VIaWdoVmFsdWVcblx0ICogLSBOZXV0cmFsIGlmIHRoZSB2YWx1ZSBpcyBncmVhdGVyIHRoYW4gb3IgZXF1YWwgdG8gVG9sZXJhbmNlUmFuZ2VMb3dWYWx1ZSBhbmQgbG93ZXIgdGhhbiBBY2NlcHRhbmNlUmFuZ2VMb3dWYWx1ZSBPUiBncmVhdGVyIHRoYW4gQWNjZXB0YW5jZVJhbmdlSGlnaFZhbHVlIGFuZCBsb3dlciB0aGFuIG9yIGVxdWFsIHRvIFRvbGVyYW5jZVJhbmdlSGlnaFZhbHVlXG5cdCAqIC0gQ3JpdGljYWwgaWYgdGhlIHZhbHVlIGlzIGdyZWF0ZXIgdGhhbiBvciBlcXVhbCB0byBEZXZpYXRpb25SYW5nZUxvd1ZhbHVlIGFuZCBsb3dlciB0aGFuIFRvbGVyYW5jZVJhbmdlTG93VmFsdWUgT1IgZ3JlYXRlciB0aGFuIFRvbGVyYW5jZVJhbmdlSGlnaFZhbHVlIGFuZCBsb3dlciB0aGFuIG9yIGVxdWFsIHRvIERldmlhdGlvblJhbmdlSGlnaFZhbHVlXG5cdCAqIC0gTmVnYXRpdmUgaWYgdGhlIHZhbHVlIGlzIGxvd2VyIHRoYW4gRGV2aWF0aW9uUmFuZ2VMb3dWYWx1ZSBvciBncmVhdGVyIHRoYW4gRGV2aWF0aW9uUmFuZ2VIaWdoVmFsdWVcblx0ICpcblx0ICogRm9yIGltcHJvdmVtZW50IGRpcmVjdGlvbiBNaW5pbWl6ZSwgdGhlIGNyaXRpY2FsaXR5IGlzIGNhbGN1bGF0ZWQgdXNpbmcgdGhlIGhpZ2ggdGhyZXNob2xkIHZhbHVlcy4gSXQgaXNcblx0ICogLSBQb3NpdGl2ZSBpZiB0aGUgdmFsdWUgaXMgbG93ZXIgdGhhbiBvciBlcXVhbCB0byBBY2NlcHRhbmNlUmFuZ2VIaWdoVmFsdWVcblx0ICogLSBOZXV0cmFsIGlmIHRoZSB2YWx1ZSBpcyBncmVhdGVyIHRoYW4gQWNjZXB0YW5jZVJhbmdlSGlnaFZhbHVlIGFuZCBsb3dlciB0aGFuIG9yIGVxdWFsIHRvIFRvbGVyYW5jZVJhbmdlSGlnaFZhbHVlXG5cdCAqIC0gQ3JpdGljYWwgaWYgdGhlIHZhbHVlIGlzIGdyZWF0ZXIgdGhhbiBUb2xlcmFuY2VSYW5nZUhpZ2hWYWx1ZSBhbmQgbG93ZXIgdGhhbiBvciBlcXVhbCB0byBEZXZpYXRpb25SYW5nZUhpZ2hWYWx1ZVxuXHQgKiAtIE5lZ2F0aXZlIGlmIHRoZSB2YWx1ZSBpcyBncmVhdGVyIHRoYW4gRGV2aWF0aW9uUmFuZ2VIaWdoVmFsdWVcblx0ICpcblx0ICogRm9yIGltcHJvdmVtZW50IGRpcmVjdGlvbiBNYXhpbWl6ZSwgdGhlIGNyaXRpY2FsaXR5IGlzIGNhbGN1bGF0ZWQgdXNpbmcgdGhlIGxvdyB0aHJlc2hvbGQgdmFsdWVzLiBJdCBpc1xuXHQgKlxuXHQgKiAtIFBvc2l0aXZlIGlmIHRoZSB2YWx1ZSBpcyBncmVhdGVyIHRoYW4gb3IgZXF1YWwgdG8gQWNjZXB0YW5jZVJhbmdlTG93VmFsdWVcblx0ICogLSBOZXV0cmFsIGlmIHRoZSB2YWx1ZSBpcyBsZXNzIHRoYW4gQWNjZXB0YW5jZVJhbmdlTG93VmFsdWUgYW5kIGdyZWF0ZXIgdGhhbiBvciBlcXVhbCB0byBUb2xlcmFuY2VSYW5nZUxvd1ZhbHVlXG5cdCAqIC0gQ3JpdGljYWwgaWYgdGhlIHZhbHVlIGlzIGxvd2VyIHRoYW4gVG9sZXJhbmNlUmFuZ2VMb3dWYWx1ZSBhbmQgZ3JlYXRlciB0aGFuIG9yIGVxdWFsIHRvIERldmlhdGlvblJhbmdlTG93VmFsdWVcblx0ICogLSBOZWdhdGl2ZSBpZiB0aGUgdmFsdWUgaXMgbG93ZXIgdGhhbiBEZXZpYXRpb25SYW5nZUxvd1ZhbHVlXG5cdCAqXG5cdCAqIFRocmVzaG9sZHMgYXJlIG9wdGlvbmFsLiBGb3IgdW5hc3NpZ25lZCB2YWx1ZXMsIGRlZmF1bHRzIGFyZSBkZXRlcm1pbmVkIGluIHRoaXMgb3JkZXI6XG5cdCAqXG5cdCAqIC0gRm9yIERldmlhdGlvblJhbmdlLCBhbiBvbWl0dGVkIExvd1ZhbHVlIHRyYW5zbGF0ZXMgaW50byB0aGUgc21hbGxlc3QgcG9zc2libGUgbnVtYmVyICgtSU5GKSwgYW4gb21pdHRlZCBIaWdoVmFsdWUgdHJhbnNsYXRlcyBpbnRvIHRoZSBsYXJnZXN0IHBvc3NpYmxlIG51bWJlciAoK0lORilcblx0ICogLSBGb3IgVG9sZXJhbmNlUmFuZ2UsIGFuIG9taXR0ZWQgTG93VmFsdWUgd2lsbCBiZSBpbml0aWFsaXplZCB3aXRoIERldmlhdGlvblJhbmdlTG93VmFsdWUsIGFuIG9taXR0ZWQgSGlnaFZhbHVlIHdpbGwgYmUgaW5pdGlhbGl6ZWQgd2l0aCBEZXZpYXRpb25SYW5nZUhpZ2hWYWx1ZVxuXHQgKiAtIEZvciBBY2NlcHRhbmNlUmFuZ2UsIGFuIG9taXR0ZWQgTG93VmFsdWUgd2lsbCBiZSBpbml0aWFsaXplZCB3aXRoIFRvbGVyYW5jZVJhbmdlTG93VmFsdWUsIGFuIG9taXR0ZWQgSGlnaFZhbHVlIHdpbGwgYmUgaW5pdGlhbGl6ZWQgd2l0aCBUb2xlcmFuY2VSYW5nZUhpZ2hWYWx1ZS5cblx0ICpcblx0ICogQHBhcmFtIHNJbXByb3ZlbWVudERpcmVjdGlvbiBJbXByb3ZlbWVudERpcmVjdGlvbiB0byBiZSB1c2VkIGZvciBjcmVhdGluZyB0aGUgY3JpdGljYWxpdHkgYmluZGluZ1xuXHQgKiBAcGFyYW0gc1ZhbHVlIFZhbHVlIGZyb20gRGF0YXBvaW50IHRvIGJlIG1lYXN1cmVkXG5cdCAqIEBwYXJhbSBzRGV2aWF0aW9uTG93IEV4cHJlc3Npb25CaW5kaW5nIGZvciBMb3dlciBEZXZpYXRpb24gbGV2ZWxcblx0ICogQHBhcmFtIHNUb2xlcmFuY2VMb3cgRXhwcmVzc2lvbkJpbmRpbmcgZm9yIExvd2VyIFRvbGVyYW5jZSBsZXZlbFxuXHQgKiBAcGFyYW0gc0FjY2VwdGFuY2VMb3cgRXhwcmVzc2lvbkJpbmRpbmcgZm9yIExvd2VyIEFjY2VwdGFuY2UgbGV2ZWxcblx0ICogQHBhcmFtIHNBY2NlcHRhbmNlSGlnaCBFeHByZXNzaW9uQmluZGluZyBmb3IgSGlnaGVyIEFjY2VwdGFuY2UgbGV2ZWxcblx0ICogQHBhcmFtIHNUb2xlcmFuY2VIaWdoIEV4cHJlc3Npb25CaW5kaW5nIGZvciBIaWdoZXIgVG9sZXJhbmNlIGxldmVsXG5cdCAqIEBwYXJhbSBzRGV2aWF0aW9uSGlnaCBFeHByZXNzaW9uQmluZGluZyBmb3IgSGlnaGVyIERldmlhdGlvbiBsZXZlbFxuXHQgKiBAcmV0dXJucyBSZXR1cm5zIGNyaXRpY2FsaXR5IGNhbGN1bGF0aW9uIGFzIGV4cHJlc3Npb24gYmluZGluZ1xuXHQgKi9cblx0Z2V0Q3JpdGljYWxpdHlDYWxjdWxhdGlvbkJpbmRpbmc6IGZ1bmN0aW9uIChcblx0XHRzSW1wcm92ZW1lbnREaXJlY3Rpb246IHN0cmluZyxcblx0XHRzVmFsdWU6IHN0cmluZyxcblx0XHRzRGV2aWF0aW9uTG93OiBzdHJpbmcgfCBudW1iZXIsXG5cdFx0c1RvbGVyYW5jZUxvdzogc3RyaW5nIHwgbnVtYmVyLFxuXHRcdHNBY2NlcHRhbmNlTG93OiBzdHJpbmcgfCBudW1iZXIsXG5cdFx0c0FjY2VwdGFuY2VIaWdoOiBzdHJpbmcgfCBudW1iZXIsXG5cdFx0c1RvbGVyYW5jZUhpZ2g6IHN0cmluZyB8IG51bWJlcixcblx0XHRzRGV2aWF0aW9uSGlnaDogc3RyaW5nIHwgbnVtYmVyXG5cdCkge1xuXHRcdGxldCBzQ3JpdGljYWxpdHlFeHByZXNzaW9uOiB0eXBlb2YgVmFsdWVDb2xvciB8IHN0cmluZyA9IFZhbHVlQ29sb3IuTmV1dHJhbDsgLy8gRGVmYXVsdCBDcml0aWNhbGl0eSBTdGF0ZVxuXG5cdFx0c1ZhbHVlID0gYCUke3NWYWx1ZX1gO1xuXG5cdFx0Ly8gU2V0dGluZyBVbmFzc2lnbmVkIFZhbHVlc1xuXHRcdHNEZXZpYXRpb25Mb3cgPSBzRGV2aWF0aW9uTG93IHx8IC1JbmZpbml0eTtcblx0XHRzVG9sZXJhbmNlTG93ID0gc1RvbGVyYW5jZUxvdyB8fCBzRGV2aWF0aW9uTG93O1xuXHRcdHNBY2NlcHRhbmNlTG93ID0gc0FjY2VwdGFuY2VMb3cgfHwgc1RvbGVyYW5jZUxvdztcblx0XHRzRGV2aWF0aW9uSGlnaCA9IHNEZXZpYXRpb25IaWdoIHx8IEluZmluaXR5O1xuXHRcdHNUb2xlcmFuY2VIaWdoID0gc1RvbGVyYW5jZUhpZ2ggfHwgc0RldmlhdGlvbkhpZ2g7XG5cdFx0c0FjY2VwdGFuY2VIaWdoID0gc0FjY2VwdGFuY2VIaWdoIHx8IHNUb2xlcmFuY2VIaWdoO1xuXG5cdFx0Ly8gRGVhbGluZyB3aXRoIERlY2ltYWwgYW5kIFBhdGggYmFzZWQgYmluZ2RpbmdzXG5cdFx0c0RldmlhdGlvbkxvdyA9IHNEZXZpYXRpb25Mb3cgJiYgKCtzRGV2aWF0aW9uTG93ID8gK3NEZXZpYXRpb25Mb3cgOiBgJSR7c0RldmlhdGlvbkxvd31gKTtcblx0XHRzVG9sZXJhbmNlTG93ID0gc1RvbGVyYW5jZUxvdyAmJiAoK3NUb2xlcmFuY2VMb3cgPyArc1RvbGVyYW5jZUxvdyA6IGAlJHtzVG9sZXJhbmNlTG93fWApO1xuXHRcdHNBY2NlcHRhbmNlTG93ID0gc0FjY2VwdGFuY2VMb3cgJiYgKCtzQWNjZXB0YW5jZUxvdyA/ICtzQWNjZXB0YW5jZUxvdyA6IGAlJHtzQWNjZXB0YW5jZUxvd31gKTtcblx0XHRzQWNjZXB0YW5jZUhpZ2ggPSBzQWNjZXB0YW5jZUhpZ2ggJiYgKCtzQWNjZXB0YW5jZUhpZ2ggPyArc0FjY2VwdGFuY2VIaWdoIDogYCUke3NBY2NlcHRhbmNlSGlnaH1gKTtcblx0XHRzVG9sZXJhbmNlSGlnaCA9IHNUb2xlcmFuY2VIaWdoICYmICgrc1RvbGVyYW5jZUhpZ2ggPyArc1RvbGVyYW5jZUhpZ2ggOiBgJSR7c1RvbGVyYW5jZUhpZ2h9YCk7XG5cdFx0c0RldmlhdGlvbkhpZ2ggPSBzRGV2aWF0aW9uSGlnaCAmJiAoK3NEZXZpYXRpb25IaWdoID8gK3NEZXZpYXRpb25IaWdoIDogYCUke3NEZXZpYXRpb25IaWdofWApO1xuXG5cdFx0Ly8gQ3JlYXRpbmcgcnVudGltZSBleHByZXNzaW9uIGJpbmRpbmcgZnJvbSBjcml0aWNhbGl0eSBjYWxjdWxhdGlvbiBmb3IgQ3JpdGljYWxpdHkgU3RhdGVcblx0XHRpZiAoc0ltcHJvdmVtZW50RGlyZWN0aW9uLmluZGV4T2YoXCJNaW5pbWl6ZVwiKSA+IC0xKSB7XG5cdFx0XHRzQ3JpdGljYWxpdHlFeHByZXNzaW9uID1cblx0XHRcdFx0XCJ7PSBcIiArXG5cdFx0XHRcdHNWYWx1ZSArXG5cdFx0XHRcdFwiIDw9IFwiICtcblx0XHRcdFx0c0FjY2VwdGFuY2VIaWdoICtcblx0XHRcdFx0XCIgPyAnXCIgK1xuXHRcdFx0XHRWYWx1ZUNvbG9yLkdvb2QgK1xuXHRcdFx0XHRcIicgOiBcIiArXG5cdFx0XHRcdHNWYWx1ZSArXG5cdFx0XHRcdFwiIDw9IFwiICtcblx0XHRcdFx0c1RvbGVyYW5jZUhpZ2ggK1xuXHRcdFx0XHRcIiA/ICdcIiArXG5cdFx0XHRcdFZhbHVlQ29sb3IuTmV1dHJhbCArXG5cdFx0XHRcdFwiJyA6IFwiICtcblx0XHRcdFx0XCIoXCIgK1xuXHRcdFx0XHRzRGV2aWF0aW9uSGlnaCArXG5cdFx0XHRcdFwiICYmIFwiICtcblx0XHRcdFx0c1ZhbHVlICtcblx0XHRcdFx0XCIgPD0gXCIgK1xuXHRcdFx0XHRzRGV2aWF0aW9uSGlnaCArXG5cdFx0XHRcdFwiKSA/ICdcIiArXG5cdFx0XHRcdFZhbHVlQ29sb3IuQ3JpdGljYWwgK1xuXHRcdFx0XHRcIicgOiAnXCIgK1xuXHRcdFx0XHRWYWx1ZUNvbG9yLkVycm9yICtcblx0XHRcdFx0XCInIH1cIjtcblx0XHR9IGVsc2UgaWYgKHNJbXByb3ZlbWVudERpcmVjdGlvbi5pbmRleE9mKFwiTWF4aW1pemVcIikgPiAtMSkge1xuXHRcdFx0c0NyaXRpY2FsaXR5RXhwcmVzc2lvbiA9XG5cdFx0XHRcdFwiez0gXCIgK1xuXHRcdFx0XHRzVmFsdWUgK1xuXHRcdFx0XHRcIiA+PSBcIiArXG5cdFx0XHRcdHNBY2NlcHRhbmNlTG93ICtcblx0XHRcdFx0XCIgPyAnXCIgK1xuXHRcdFx0XHRWYWx1ZUNvbG9yLkdvb2QgK1xuXHRcdFx0XHRcIicgOiBcIiArXG5cdFx0XHRcdHNWYWx1ZSArXG5cdFx0XHRcdFwiID49IFwiICtcblx0XHRcdFx0c1RvbGVyYW5jZUxvdyArXG5cdFx0XHRcdFwiID8gJ1wiICtcblx0XHRcdFx0VmFsdWVDb2xvci5OZXV0cmFsICtcblx0XHRcdFx0XCInIDogXCIgK1xuXHRcdFx0XHRcIihcIiArXG5cdFx0XHRcdHNEZXZpYXRpb25Mb3cgK1xuXHRcdFx0XHRcIiAmJiBcIiArXG5cdFx0XHRcdHNWYWx1ZSArXG5cdFx0XHRcdFwiID49IFwiICtcblx0XHRcdFx0c0RldmlhdGlvbkxvdyArXG5cdFx0XHRcdFwiKSA/ICdcIiArXG5cdFx0XHRcdFZhbHVlQ29sb3IuQ3JpdGljYWwgK1xuXHRcdFx0XHRcIicgOiAnXCIgK1xuXHRcdFx0XHRWYWx1ZUNvbG9yLkVycm9yICtcblx0XHRcdFx0XCInIH1cIjtcblx0XHR9IGVsc2UgaWYgKHNJbXByb3ZlbWVudERpcmVjdGlvbi5pbmRleE9mKFwiVGFyZ2V0XCIpID4gLTEpIHtcblx0XHRcdHNDcml0aWNhbGl0eUV4cHJlc3Npb24gPVxuXHRcdFx0XHRcIns9IChcIiArXG5cdFx0XHRcdHNWYWx1ZSArXG5cdFx0XHRcdFwiIDw9IFwiICtcblx0XHRcdFx0c0FjY2VwdGFuY2VIaWdoICtcblx0XHRcdFx0XCIgJiYgXCIgK1xuXHRcdFx0XHRzVmFsdWUgK1xuXHRcdFx0XHRcIiA+PSBcIiArXG5cdFx0XHRcdHNBY2NlcHRhbmNlTG93ICtcblx0XHRcdFx0XCIpID8gJ1wiICtcblx0XHRcdFx0VmFsdWVDb2xvci5Hb29kICtcblx0XHRcdFx0XCInIDogXCIgK1xuXHRcdFx0XHRcIigoXCIgK1xuXHRcdFx0XHRzVmFsdWUgK1xuXHRcdFx0XHRcIiA+PSBcIiArXG5cdFx0XHRcdHNUb2xlcmFuY2VMb3cgK1xuXHRcdFx0XHRcIiAmJiBcIiArXG5cdFx0XHRcdHNWYWx1ZSArXG5cdFx0XHRcdFwiIDwgXCIgK1xuXHRcdFx0XHRzQWNjZXB0YW5jZUxvdyArXG5cdFx0XHRcdFwiKSB8fCAoXCIgK1xuXHRcdFx0XHRzVmFsdWUgK1xuXHRcdFx0XHRcIiA+IFwiICtcblx0XHRcdFx0c0FjY2VwdGFuY2VIaWdoICtcblx0XHRcdFx0XCIgJiYgXCIgK1xuXHRcdFx0XHRzVmFsdWUgK1xuXHRcdFx0XHRcIiA8PSBcIiArXG5cdFx0XHRcdHNUb2xlcmFuY2VIaWdoICtcblx0XHRcdFx0XCIpKSA/ICdcIiArXG5cdFx0XHRcdFZhbHVlQ29sb3IuTmV1dHJhbCArXG5cdFx0XHRcdFwiJyA6IFwiICtcblx0XHRcdFx0XCIoKFwiICtcblx0XHRcdFx0c0RldmlhdGlvbkxvdyArXG5cdFx0XHRcdFwiICYmIChcIiArXG5cdFx0XHRcdHNWYWx1ZSArXG5cdFx0XHRcdFwiID49IFwiICtcblx0XHRcdFx0c0RldmlhdGlvbkxvdyArXG5cdFx0XHRcdFwiKSAmJiAoXCIgK1xuXHRcdFx0XHRzVmFsdWUgK1xuXHRcdFx0XHRcIiA8IFwiICtcblx0XHRcdFx0c1RvbGVyYW5jZUxvdyArXG5cdFx0XHRcdFwiKSkgfHwgKChcIiArXG5cdFx0XHRcdHNWYWx1ZSArXG5cdFx0XHRcdFwiID4gXCIgK1xuXHRcdFx0XHRzVG9sZXJhbmNlSGlnaCArXG5cdFx0XHRcdFwiKSAmJiBcIiArXG5cdFx0XHRcdHNEZXZpYXRpb25IaWdoICtcblx0XHRcdFx0XCIgJiYgKFwiICtcblx0XHRcdFx0c1ZhbHVlICtcblx0XHRcdFx0XCIgPD0gXCIgK1xuXHRcdFx0XHRzRGV2aWF0aW9uSGlnaCArXG5cdFx0XHRcdFwiKSkpID8gJ1wiICtcblx0XHRcdFx0VmFsdWVDb2xvci5Dcml0aWNhbCArXG5cdFx0XHRcdFwiJyA6ICdcIiArXG5cdFx0XHRcdFZhbHVlQ29sb3IuRXJyb3IgK1xuXHRcdFx0XHRcIicgfVwiO1xuXHRcdH0gZWxzZSB7XG5cdFx0XHRMb2cud2FybmluZyhcIkNhc2Ugbm90IHN1cHBvcnRlZCwgcmV0dXJuaW5nIHRoZSBkZWZhdWx0IFZhbHVlIE5ldXRyYWxcIik7XG5cdFx0fVxuXG5cdFx0cmV0dXJuIHNDcml0aWNhbGl0eUV4cHJlc3Npb247XG5cdH0sXG5cdC8qKlxuXHQgKiBUbyBmZXRjaCBtZWFzdXJlIGF0dHJpYnV0ZSBpbmRleC5cblx0ICpcblx0ICogQHBhcmFtIGlNZWFzdXJlIENoYXJ0IEFubm90YXRpb25zXG5cdCAqIEBwYXJhbSBvQ2hhcnRBbm5vdGF0aW9ucyBDaGFydCBBbm5vdGF0aW9uc1xuXHQgKiBAcmV0dXJucyBNZWFzdXJlQXR0cmlidXRlIGluZGV4LlxuXHQgKiBAcHJpdmF0ZVxuXHQgKi9cblx0Z2V0TWVhc3VyZUF0dHJpYnV0ZUluZGV4OiBmdW5jdGlvbiAoaU1lYXN1cmU6IGFueSwgb0NoYXJ0QW5ub3RhdGlvbnM6IGFueSkge1xuXHRcdGxldCBhTWVhc3VyZXMsIHNNZWFzdXJlUHJvcGVydHlQYXRoO1xuXHRcdGlmIChvQ2hhcnRBbm5vdGF0aW9ucz8uTWVhc3VyZXM/Lmxlbmd0aCA+IDApIHtcblx0XHRcdGFNZWFzdXJlcyA9IG9DaGFydEFubm90YXRpb25zLk1lYXN1cmVzO1xuXHRcdFx0c01lYXN1cmVQcm9wZXJ0eVBhdGggPSBhTWVhc3VyZXNbaU1lYXN1cmVdLiRQcm9wZXJ0eVBhdGg7XG5cdFx0fSBlbHNlIGlmIChvQ2hhcnRBbm5vdGF0aW9ucz8uRHluYW1pY01lYXN1cmVzPy5sZW5ndGggPiAwKSB7XG5cdFx0XHRhTWVhc3VyZXMgPSBvQ2hhcnRBbm5vdGF0aW9ucy5EeW5hbWljTWVhc3VyZXM7XG5cdFx0XHRzTWVhc3VyZVByb3BlcnR5UGF0aCA9IGFNZWFzdXJlc1tpTWVhc3VyZV0uJEFubm90YXRpb25QYXRoO1xuXHRcdH1cblx0XHRsZXQgYk1lYXN1cmVBdHRyaWJ1dGVFeGlzdHM7XG5cdFx0Y29uc3QgYU1lYXN1cmVBdHRyaWJ1dGVzID0gb0NoYXJ0QW5ub3RhdGlvbnMuTWVhc3VyZUF0dHJpYnV0ZXM7XG5cdFx0bGV0IGlNZWFzdXJlQXR0cmlidXRlID0gLTE7XG5cdFx0Y29uc3QgZm5DaGVja01lYXN1cmUgPSBmdW5jdGlvbiAoc01lYXN1cmVQYXRoOiBhbnksIG9NZWFzdXJlQXR0cmlidXRlOiBhbnksIGluZGV4OiBhbnkpIHtcblx0XHRcdGlmIChvTWVhc3VyZUF0dHJpYnV0ZSkge1xuXHRcdFx0XHRpZiAob01lYXN1cmVBdHRyaWJ1dGUuTWVhc3VyZSAmJiBvTWVhc3VyZUF0dHJpYnV0ZS5NZWFzdXJlLiRQcm9wZXJ0eVBhdGggPT09IHNNZWFzdXJlUGF0aCkge1xuXHRcdFx0XHRcdGlNZWFzdXJlQXR0cmlidXRlID0gaW5kZXg7XG5cdFx0XHRcdFx0cmV0dXJuIHRydWU7XG5cdFx0XHRcdH0gZWxzZSBpZiAob01lYXN1cmVBdHRyaWJ1dGUuRHluYW1pY01lYXN1cmUgJiYgb01lYXN1cmVBdHRyaWJ1dGUuRHluYW1pY01lYXN1cmUuJEFubm90YXRpb25QYXRoID09PSBzTWVhc3VyZVBhdGgpIHtcblx0XHRcdFx0XHRpTWVhc3VyZUF0dHJpYnV0ZSA9IGluZGV4O1xuXHRcdFx0XHRcdHJldHVybiB0cnVlO1xuXHRcdFx0XHR9XG5cdFx0XHR9XG5cdFx0fTtcblx0XHRpZiAoYU1lYXN1cmVBdHRyaWJ1dGVzKSB7XG5cdFx0XHRiTWVhc3VyZUF0dHJpYnV0ZUV4aXN0cyA9IGFNZWFzdXJlQXR0cmlidXRlcy5zb21lKGZuQ2hlY2tNZWFzdXJlLmJpbmQobnVsbCwgc01lYXN1cmVQcm9wZXJ0eVBhdGgpKTtcblx0XHR9XG5cdFx0cmV0dXJuIGJNZWFzdXJlQXR0cmlidXRlRXhpc3RzICYmIGlNZWFzdXJlQXR0cmlidXRlID4gLTEgJiYgaU1lYXN1cmVBdHRyaWJ1dGU7XG5cdH0sXG5cblx0Z2V0TWVhc3VyZUF0dHJpYnV0ZTogZnVuY3Rpb24gKG9Db250ZXh0OiBDb250ZXh0KSB7XG5cdFx0Y29uc3Qgb01ldGFNb2RlbCA9IG9Db250ZXh0LmdldE1vZGVsKCkgYXMgT0RhdGFNZXRhTW9kZWwsXG5cdFx0XHRzQ2hhcnRBbm5vdGF0aW9uUGF0aCA9IG9Db250ZXh0LmdldFBhdGgoKTtcblx0XHRyZXR1cm4gb01ldGFNb2RlbC5yZXF1ZXN0T2JqZWN0KHNDaGFydEFubm90YXRpb25QYXRoKS50aGVuKGZ1bmN0aW9uIChvQ2hhcnRBbm5vdGF0aW9uczogYW55KSB7XG5cdFx0XHRjb25zdCBhTWVhc3VyZUF0dHJpYnV0ZXMgPSBvQ2hhcnRBbm5vdGF0aW9ucy5NZWFzdXJlQXR0cmlidXRlcyxcblx0XHRcdFx0aU1lYXN1cmVBdHRyaWJ1dGUgPSBDb21tb25IZWxwZXIuZ2V0TWVhc3VyZUF0dHJpYnV0ZUluZGV4KDAsIG9DaGFydEFubm90YXRpb25zKTtcblx0XHRcdGNvbnN0IHNNZWFzdXJlQXR0cmlidXRlUGF0aCA9XG5cdFx0XHRcdGlNZWFzdXJlQXR0cmlidXRlID4gLTEgJiYgYU1lYXN1cmVBdHRyaWJ1dGVzW2lNZWFzdXJlQXR0cmlidXRlXSAmJiBhTWVhc3VyZUF0dHJpYnV0ZXNbaU1lYXN1cmVBdHRyaWJ1dGVdLkRhdGFQb2ludFxuXHRcdFx0XHRcdD8gYCR7c0NoYXJ0QW5ub3RhdGlvblBhdGh9L01lYXN1cmVBdHRyaWJ1dGVzLyR7aU1lYXN1cmVBdHRyaWJ1dGV9L2Bcblx0XHRcdFx0XHQ6IHVuZGVmaW5lZDtcblx0XHRcdGlmIChzTWVhc3VyZUF0dHJpYnV0ZVBhdGggPT09IHVuZGVmaW5lZCkge1xuXHRcdFx0XHRMb2cud2FybmluZyhcIkRhdGFQb2ludCBtaXNzaW5nIGZvciB0aGUgbWVhc3VyZVwiKTtcblx0XHRcdH1cblx0XHRcdHJldHVybiBzTWVhc3VyZUF0dHJpYnV0ZVBhdGggPyBgJHtzTWVhc3VyZUF0dHJpYnV0ZVBhdGh9RGF0YVBvaW50LyRBbm5vdGF0aW9uUGF0aC9gIDogc01lYXN1cmVBdHRyaWJ1dGVQYXRoO1xuXHRcdH0pO1xuXHR9LFxuXHQvKipcblx0ICogVGhpcyBmdW5jdGlvbiByZXR1cm5zIHRoZSBtZWFzdXJlQXR0cmlidXRlIGZvciB0aGUgbWVhc3VyZS5cblx0ICpcblx0ICogQHBhcmFtIG9Db250ZXh0IENvbnRleHQgdG8gdGhlIG1lYXN1cmUgYW5ub3RhdGlvblxuXHQgKiBAcmV0dXJucyBQYXRoIHRvIHRoZSBtZWFzdXJlQXR0cmlidXRlIG9mIHRoZSBtZWFzdXJlXG5cdCAqL1xuXHRnZXRNZWFzdXJlQXR0cmlidXRlRm9yTWVhc3VyZTogZnVuY3Rpb24gKG9Db250ZXh0OiBDb250ZXh0KSB7XG5cdFx0Y29uc3Qgb01ldGFNb2RlbCA9IG9Db250ZXh0LmdldE1vZGVsKCkgYXMgT0RhdGFNZXRhTW9kZWwsXG5cdFx0XHRzTWVhc3VyZVBhdGggPSBvQ29udGV4dC5nZXRQYXRoKCksXG5cdFx0XHRzQ2hhcnRBbm5vdGF0aW9uUGF0aCA9IHNNZWFzdXJlUGF0aC5zdWJzdHJpbmcoMCwgc01lYXN1cmVQYXRoLmxhc3RJbmRleE9mKFwiTWVhc3VyZVwiKSksXG5cdFx0XHRpTWVhc3VyZSA9IHNNZWFzdXJlUGF0aC5yZXBsYWNlKC8uKlxcLy8sIFwiXCIpO1xuXG5cdFx0Y29uc3Qgb0NoYXJ0QW5ub3RhdGlvbnMgPSBvTWV0YU1vZGVsLmdldE9iamVjdChzQ2hhcnRBbm5vdGF0aW9uUGF0aCk7XG5cdFx0Y29uc3QgYU1lYXN1cmVBdHRyaWJ1dGVzID0gb0NoYXJ0QW5ub3RhdGlvbnMuTWVhc3VyZUF0dHJpYnV0ZXMsXG5cdFx0XHRpTWVhc3VyZUF0dHJpYnV0ZSA9IENvbW1vbkhlbHBlci5nZXRNZWFzdXJlQXR0cmlidXRlSW5kZXgoaU1lYXN1cmUsIG9DaGFydEFubm90YXRpb25zKTtcblx0XHRjb25zdCBzTWVhc3VyZUF0dHJpYnV0ZVBhdGggPVxuXHRcdFx0aU1lYXN1cmVBdHRyaWJ1dGUgPiAtMSAmJiBhTWVhc3VyZUF0dHJpYnV0ZXNbaU1lYXN1cmVBdHRyaWJ1dGVdICYmIGFNZWFzdXJlQXR0cmlidXRlc1tpTWVhc3VyZUF0dHJpYnV0ZV0uRGF0YVBvaW50XG5cdFx0XHRcdD8gYCR7c0NoYXJ0QW5ub3RhdGlvblBhdGh9TWVhc3VyZUF0dHJpYnV0ZXMvJHtpTWVhc3VyZUF0dHJpYnV0ZX0vYFxuXHRcdFx0XHQ6IHVuZGVmaW5lZDtcblx0XHRpZiAoc01lYXN1cmVBdHRyaWJ1dGVQYXRoID09PSB1bmRlZmluZWQpIHtcblx0XHRcdExvZy53YXJuaW5nKFwiRGF0YVBvaW50IG1pc3NpbmcgZm9yIHRoZSBtZWFzdXJlXCIpO1xuXHRcdH1cblx0XHRyZXR1cm4gc01lYXN1cmVBdHRyaWJ1dGVQYXRoID8gYCR7c01lYXN1cmVBdHRyaWJ1dGVQYXRofURhdGFQb2ludC8kQW5ub3RhdGlvblBhdGgvYCA6IHNNZWFzdXJlQXR0cmlidXRlUGF0aDtcblx0fSxcblx0LyoqXG5cdCAqIE1ldGhvZCB0byBkZXRlcm1pbmUgaWYgdGhlIGNvbnRhaW5lZCBuYXZpZ2F0aW9uIHByb3BlcnR5IGhhcyBhIGRyYWZ0IHJvb3Qvbm9kZSBwYXJlbnQgZW50aXR5U2V0LlxuXHQgKlxuXHQgKiBAZnVuY3Rpb25cblx0ICogQG5hbWUgaXNEcmFmdFBhcmVudEVudGl0eUZvckNvbnRhaW5tZW50XG5cdCAqIEBwYXJhbSBvVGFyZ2V0Q29sbGVjdGlvbkNvbnRhaW5zVGFyZ2V0IFRhcmdldCBjb2xsZWN0aW9uIGhhcyBDb250YWluc1RhcmdldCBwcm9wZXJ0eVxuXHQgKiBAcGFyYW0gb1RhYmxlTWV0YWRhdGEgVGFibGUgbWV0YWRhdGEgZm9yIHdoaWNoIGRyYWZ0IHN1cHBvcnQgc2hhbGwgYmUgY2hlY2tlZFxuXHQgKiBAcmV0dXJucyBSZXR1cm5zIHRydWUgaWYgZHJhZnRcblx0ICovXG5cdGlzRHJhZnRQYXJlbnRFbnRpdHlGb3JDb250YWlubWVudDogZnVuY3Rpb24gKG9UYXJnZXRDb2xsZWN0aW9uQ29udGFpbnNUYXJnZXQ6IG9iamVjdCwgb1RhYmxlTWV0YWRhdGE6IGFueSkge1xuXHRcdGlmIChvVGFyZ2V0Q29sbGVjdGlvbkNvbnRhaW5zVGFyZ2V0KSB7XG5cdFx0XHRpZiAob1RhYmxlTWV0YWRhdGEgJiYgb1RhYmxlTWV0YWRhdGEucGFyZW50RW50aXR5U2V0ICYmIG9UYWJsZU1ldGFkYXRhLnBhcmVudEVudGl0eVNldC5zUGF0aCkge1xuXHRcdFx0XHRjb25zdCBzUGFyZW50RW50aXR5U2V0UGF0aCA9IG9UYWJsZU1ldGFkYXRhLnBhcmVudEVudGl0eVNldC5zUGF0aDtcblx0XHRcdFx0Y29uc3Qgb0RyYWZ0Um9vdCA9IG9UYWJsZU1ldGFkYXRhLnBhcmVudEVudGl0eVNldC5vTW9kZWwuZ2V0T2JqZWN0KFxuXHRcdFx0XHRcdGAke3NQYXJlbnRFbnRpdHlTZXRQYXRofUBjb20uc2FwLnZvY2FidWxhcmllcy5Db21tb24udjEuRHJhZnRSb290YFxuXHRcdFx0XHQpO1xuXHRcdFx0XHRjb25zdCBvRHJhZnROb2RlID0gb1RhYmxlTWV0YWRhdGEucGFyZW50RW50aXR5U2V0Lm9Nb2RlbC5nZXRPYmplY3QoXG5cdFx0XHRcdFx0YCR7c1BhcmVudEVudGl0eVNldFBhdGh9QGNvbS5zYXAudm9jYWJ1bGFyaWVzLkNvbW1vbi52MS5EcmFmdE5vZGVgXG5cdFx0XHRcdCk7XG5cdFx0XHRcdGlmIChvRHJhZnRSb290IHx8IG9EcmFmdE5vZGUpIHtcblx0XHRcdFx0XHRyZXR1cm4gdHJ1ZTtcblx0XHRcdFx0fSBlbHNlIHtcblx0XHRcdFx0XHRyZXR1cm4gZmFsc2U7XG5cdFx0XHRcdH1cblx0XHRcdH1cblx0XHR9XG5cdFx0cmV0dXJuIGZhbHNlO1xuXHR9LFxuXG5cdC8qKlxuXHQgKiBFbnN1cmVzIHRoZSBkYXRhIGlzIHByb2Nlc3NlZCBhcyBkZWZpbmVkIGluIHRoZSB0ZW1wbGF0ZS5cblx0ICogU2luY2UgdGhlIHByb3BlcnR5IERhdGEgaXMgb2YgdGhlIHR5cGUgJ29iamVjdCcsIGl0IG1heSBub3QgYmUgaW4gdGhlIHNhbWUgb3JkZXIgYXMgcmVxdWlyZWQgYnkgdGhlIHRlbXBsYXRlLlxuXHQgKlxuXHQgKiBAZnVuY3Rpb25cblx0ICogQG1lbWJlcm9mIHNhcC5mZS5tYWNyb3MuQ29tbW9uSGVscGVyXG5cdCAqIEBwYXJhbSBkYXRhRWxlbWVudCBUaGUgZGF0YSB0aGF0IGlzIGN1cnJlbnRseSBiZWluZyBwcm9jZXNzZWQuXG5cdCAqIEByZXR1cm5zIFRoZSBjb3JyZWN0IHBhdGggYWNjb3JkaW5nIHRvIHRoZSB0ZW1wbGF0ZS5cblx0ICovXG5cdGdldERhdGFGcm9tVGVtcGxhdGU6IGZ1bmN0aW9uIChkYXRhRWxlbWVudDogQ29udGV4dCkge1xuXHRcdGNvbnN0IHNwbGl0UGF0aCA9IGRhdGFFbGVtZW50LmdldFBhdGgoKS5zcGxpdChcIi9cIik7XG5cdFx0Y29uc3QgZGF0YUtleSA9IHNwbGl0UGF0aFtzcGxpdFBhdGgubGVuZ3RoIC0gMV07XG5cdFx0Y29uc3QgY29ubmVjdGVkRGF0YVBhdGggPSBgLyR7c3BsaXRQYXRoLnNsaWNlKDEsIC0yKS5qb2luKFwiL1wiKX0vQGA7XG5cdFx0Y29uc3QgY29ubmVjdGVkT2JqZWN0ID0gZGF0YUVsZW1lbnQuZ2V0T2JqZWN0KGNvbm5lY3RlZERhdGFQYXRoKTtcblx0XHRjb25zdCB0ZW1wbGF0ZSA9IGNvbm5lY3RlZE9iamVjdC5UZW1wbGF0ZTtcblx0XHRjb25zdCBzcGxpdFRlbXAgPSB0ZW1wbGF0ZS5zcGxpdChcIn1cIik7XG5cdFx0Y29uc3QgdGVtcEFycmF5ID0gW107XG5cdFx0Zm9yIChsZXQgaSA9IDA7IGkgPCBzcGxpdFRlbXAubGVuZ3RoIC0gMTsgaSsrKSB7XG5cdFx0XHRjb25zdCBrZXkgPSBzcGxpdFRlbXBbaV0uc3BsaXQoXCJ7XCIpWzFdLnRyaW0oKTtcblx0XHRcdHRlbXBBcnJheS5wdXNoKGtleSk7XG5cdFx0fVxuXHRcdE9iamVjdC5rZXlzKGNvbm5lY3RlZE9iamVjdC5EYXRhKS5mb3JFYWNoKGZ1bmN0aW9uIChzS2V5OiBzdHJpbmcpIHtcblx0XHRcdGlmIChzS2V5LnN0YXJ0c1dpdGgoXCIkXCIpKSB7XG5cdFx0XHRcdGRlbGV0ZSBjb25uZWN0ZWRPYmplY3QuRGF0YVtzS2V5XTtcblx0XHRcdH1cblx0XHR9KTtcblx0XHRjb25zdCBpbmRleCA9IE9iamVjdC5rZXlzKGNvbm5lY3RlZE9iamVjdC5EYXRhKS5pbmRleE9mKGRhdGFLZXkpO1xuXHRcdHJldHVybiBgLyR7c3BsaXRQYXRoLnNsaWNlKDEsIC0yKS5qb2luKFwiL1wiKX0vRGF0YS8ke3RlbXBBcnJheVtpbmRleF19YDtcblx0fSxcblxuXHQvKipcblx0ICogQ2hlY2tzIGlmIHRoZSBlbmQgb2YgdGhlIHRlbXBsYXRlIGhhcyBiZWVuIHJlYWNoZWQuXG5cdCAqXG5cdCAqIEBmdW5jdGlvblxuXHQgKiBAbWVtYmVyb2Ygc2FwLmZlLm1hY3Jvcy5Db21tb25IZWxwZXJcblx0ICogQHBhcmFtIHRhcmdldCBUaGUgdGFyZ2V0IG9mIHRoZSBjb25uZWN0ZWQgZmllbGRzLlxuXHQgKiBAcGFyYW0gZWxlbWVudCBUaGUgZWxlbWVudCB0aGF0IGlzIGN1cnJlbnRseSBiZWluZyBwcm9jZXNzZWQuXG5cdCAqIEByZXR1cm5zIFRydWUgb3IgRmFsc2UgKGRlcGVuZGluZyBvbiB0aGUgdGVtcGxhdGUgaW5kZXgpLlxuXHQgKi9cblx0bm90TGFzdEluZGV4OiBmdW5jdGlvbiAodGFyZ2V0OiBhbnksIGVsZW1lbnQ6IG9iamVjdCkge1xuXHRcdGNvbnN0IHRlbXBsYXRlID0gdGFyZ2V0LlRlbXBsYXRlO1xuXHRcdGNvbnN0IHNwbGl0VGVtcCA9IHRlbXBsYXRlLnNwbGl0KFwifVwiKTtcblx0XHRjb25zdCB0ZW1wQXJyYXk6IGFueVtdID0gW107XG5cdFx0bGV0IGlzTGFzdEluZGV4ID0gZmFsc2U7XG5cdFx0Zm9yIChsZXQgaSA9IDA7IGkgPCBzcGxpdFRlbXAubGVuZ3RoIC0gMTsgaSsrKSB7XG5cdFx0XHRjb25zdCBkYXRhS2V5ID0gc3BsaXRUZW1wW2ldLnNwbGl0KFwie1wiKVsxXS50cmltKCk7XG5cdFx0XHR0ZW1wQXJyYXkucHVzaChkYXRhS2V5KTtcblx0XHR9XG5cblx0XHR0ZW1wQXJyYXkuZm9yRWFjaChmdW5jdGlvbiAodGVtcGxhdGVJbmZvOiBhbnkpIHtcblx0XHRcdGlmICh0YXJnZXQuRGF0YVt0ZW1wbGF0ZUluZm9dID09PSBlbGVtZW50ICYmIHRlbXBBcnJheS5pbmRleE9mKHRlbXBsYXRlSW5mbykgIT09IHRlbXBBcnJheS5sZW5ndGggLSAxKSB7XG5cdFx0XHRcdGlzTGFzdEluZGV4ID0gdHJ1ZTtcblx0XHRcdH1cblx0XHR9KTtcblx0XHRyZXR1cm4gaXNMYXN0SW5kZXg7XG5cdH0sXG5cblx0LyoqXG5cdCAqIERldGVybWluZXMgdGhlIGRlbGltaXRlciBmcm9tIHRoZSB0ZW1wbGF0ZS5cblx0ICpcblx0ICogQGZ1bmN0aW9uXG5cdCAqIEBtZW1iZXJvZiBzYXAuZmUubWFjcm9zLkNvbW1vbkhlbHBlclxuXHQgKiBAcGFyYW0gdGVtcGxhdGUgVGhlIHRlbXBsYXRlIHN0cmluZy5cblx0ICogQHJldHVybnMgVGhlIGRlbGltaXRlciBpbiB0aGUgdGVtcGxhdGUgc3RyaW5nLlxuXHQgKi9cblx0Z2V0RGVsaW1pdGVyOiBmdW5jdGlvbiAodGVtcGxhdGU6IHN0cmluZykge1xuXHRcdHJldHVybiB0ZW1wbGF0ZS5zcGxpdChcIn1cIilbMV0uc3BsaXQoXCJ7XCIpWzBdLnRyaW0oKTtcblx0fSxcblxuXHRvTWV0YU1vZGVsOiB1bmRlZmluZWQgYXMgYW55LFxuXHRzZXRNZXRhTW9kZWw6IGZ1bmN0aW9uIChvTWV0YU1vZGVsOiBPRGF0YU1ldGFNb2RlbCkge1xuXHRcdHRoaXMub01ldGFNb2RlbCA9IG9NZXRhTW9kZWw7XG5cdH0sXG5cblx0Z2V0TWV0YU1vZGVsOiBmdW5jdGlvbiAob0NvbnRleHQ/OiBhbnksIG9JbnRlcmZhY2U/OiBhbnkpIHtcblx0XHRpZiAob0NvbnRleHQpIHtcblx0XHRcdHJldHVybiBvSW50ZXJmYWNlLmNvbnRleHQuZ2V0TW9kZWwoKTtcblx0XHR9XG5cdFx0cmV0dXJuIHRoaXMub01ldGFNb2RlbDtcblx0fSxcblxuXHRnZXRQYXJhbWV0ZXJzOiBmdW5jdGlvbiAob0NvbnRleHQ6IGFueSwgb0ludGVyZmFjZTogYW55KSB7XG5cdFx0aWYgKG9Db250ZXh0KSB7XG5cdFx0XHRjb25zdCBvTWV0YU1vZGVsID0gb0ludGVyZmFjZS5jb250ZXh0LmdldE1vZGVsKCk7XG5cdFx0XHRjb25zdCBzUGF0aCA9IG9JbnRlcmZhY2UuY29udGV4dC5nZXRQYXRoKCk7XG5cdFx0XHRjb25zdCBvUGFyYW1ldGVySW5mbyA9IENvbW1vblV0aWxzLmdldFBhcmFtZXRlckluZm8ob01ldGFNb2RlbCwgc1BhdGgpO1xuXHRcdFx0aWYgKG9QYXJhbWV0ZXJJbmZvLnBhcmFtZXRlclByb3BlcnRpZXMpIHtcblx0XHRcdFx0cmV0dXJuIE9iamVjdC5rZXlzKG9QYXJhbWV0ZXJJbmZvLnBhcmFtZXRlclByb3BlcnRpZXMpO1xuXHRcdFx0fVxuXHRcdH1cblx0XHRyZXR1cm4gW107XG5cdH0sXG5cblx0LyoqXG5cdCAqIEJ1aWxkIGFuIGV4cHJlc3Npb24gY2FsbGluZyBhbiBhY3Rpb24gaGFuZGxlciB2aWEgdGhlIEZQTSBoZWxwZXIncyBhY3Rpb25XcmFwcGVyIGZ1bmN0aW9uXG5cdCAqXG5cdCAqIFRoaXMgZnVuY3Rpb24gYXNzdW1lcyB0aGF0IHRoZSAnRlBNLmFjdGlvbldyYXBwZXIoKScgZnVuY3Rpb24gaXMgYXZhaWxhYmxlIGF0IHJ1bnRpbWUuXG5cdCAqXG5cdCAqIEBwYXJhbSBvQWN0aW9uIEFjdGlvbiBtZXRhZGF0YVxuXHQgKiBAcGFyYW0gb0FjdGlvbi5oYW5kbGVyTW9kdWxlIE1vZHVsZSBjb250YWluaW5nIHRoZSBhY3Rpb24gaGFuZGxlciBtZXRob2Rcblx0ICogQHBhcmFtIG9BY3Rpb24uaGFuZGxlck1ldGhvZCBBY3Rpb24gaGFuZGxlciBtZXRob2QgbmFtZVxuXHQgKiBAcGFyYW0gW29UaGlzXSBgdGhpc2AgKGlmIHRoZSBmdW5jdGlvbiBpcyBjYWxsZWQgZnJvbSBhIG1hY3JvKVxuXHQgKiBAcGFyYW0gb1RoaXMuaWQgVGhlIHRhYmxlJ3MgSURcblx0ICogQHJldHVybnMgVGhlIGFjdGlvbiB3cmFwcGVyIGJpbmRpbmdcdGV4cHJlc3Npb25cblx0ICovXG5cdGJ1aWxkQWN0aW9uV3JhcHBlcjogZnVuY3Rpb24gKG9BY3Rpb246IEN1c3RvbUFjdGlvbiwgb1RoaXM6IHsgaWQ/OiBzdHJpbmcgfSB8IHVuZGVmaW5lZCkge1xuXHRcdGNvbnN0IGFQYXJhbXM6IGFueVtdID0gW3JlZihcIiRldmVudFwiKSwgb0FjdGlvbi5oYW5kbGVyTW9kdWxlLCBvQWN0aW9uLmhhbmRsZXJNZXRob2RdO1xuXG5cdFx0aWYgKG9UaGlzICYmIG9UaGlzLmlkKSB7XG5cdFx0XHRjb25zdCBvQWRkaXRpb25hbFBhcmFtcyA9IHtcblx0XHRcdFx0Y29udGV4dHM6IHJlZihcIiR7aW50ZXJuYWw+c2VsZWN0ZWRDb250ZXh0c31cIilcblx0XHRcdH07XG5cdFx0XHRhUGFyYW1zLnB1c2gob0FkZGl0aW9uYWxQYXJhbXMpO1xuXHRcdH1cblx0XHRyZXR1cm4gY29tcGlsZUV4cHJlc3Npb24oZm4oXCJGUE0uYWN0aW9uV3JhcHBlclwiLCBhUGFyYW1zKSk7XG5cdH0sXG5cdC8qKlxuXHQgKiBSZXR1cm5zIHRoZSB2YWx1ZSB3aGV0aGVyIG9yIG5vdCB0aGUgZWxlbWVudCBzaG91bGQgYmUgdmlzaWJsZSBkZXBlbmRpbmcgb24gdGhlIEhpZGRlbiBhbm5vdGF0aW9uLlxuXHQgKiBJdCBpcyBpbnZlcnRlZCBhcyB0aGUgVUkgZWxlbWVudHMgaGF2ZSBhIHZpc2libGUgcHJvcGVydHkgaW5zdGVhZCBvZiBhIGhpZGRlbiBvbmUuXG5cdCAqXG5cdCAqIEBwYXJhbSBkYXRhRmllbGRBbm5vdGF0aW9ucyBUaGUgZGF0YUZpZWxkIG9iamVjdFxuXHQgKiBAcmV0dXJucyBBIHBhdGggb3IgYSBCb29sZWFuXG5cdCAqL1xuXHRnZXRIaWRkZW5QYXRoRXhwcmVzc2lvbjogZnVuY3Rpb24gKGRhdGFGaWVsZEFubm90YXRpb25zOiBhbnkpIHtcblx0XHRpZiAoZGF0YUZpZWxkQW5ub3RhdGlvbnNbXCJAY29tLnNhcC52b2NhYnVsYXJpZXMuVUkudjEuSGlkZGVuXCJdICE9PSBudWxsKSB7XG5cdFx0XHRjb25zdCBoaWRkZW4gPSBkYXRhRmllbGRBbm5vdGF0aW9uc1tcIkBjb20uc2FwLnZvY2FidWxhcmllcy5VSS52MS5IaWRkZW5cIl07XG5cdFx0XHRyZXR1cm4gdHlwZW9mIGhpZGRlbiA9PT0gXCJvYmplY3RcIiA/IFwiez0gISR7XCIgKyBoaWRkZW4uJFBhdGggKyBcIn0gfVwiIDogIWhpZGRlbjtcblx0XHR9XG5cdFx0cmV0dXJuIHRydWU7XG5cdH0sXG5cdHZhbGlkYXRlUHJlc2VudGF0aW9uTWV0YVBhdGg6IGZ1bmN0aW9uIChtZXRhUGF0aDogc3RyaW5nLCBvYmplY3RUZXJtOiBzdHJpbmcpIHtcblx0XHQvLyBwZXJmb3JtIHZhbGlkYXRpb24gb25seSBpZiBhbm5vdGF0aW9uIHNldCAodG8gYXZvaWQgYmFja3dhcmRzIGNvbXBhdGliaWxpdHkgaXNzdWVzIGZvciB0ZXN0IHdpdGhvdXQgYW5ub3RhdGlvbnMpXG5cdFx0aWYgKG1ldGFQYXRoLmluZGV4T2Yob2JqZWN0VGVybS5zbGljZSgwLCBvYmplY3RUZXJtLmxhc3RJbmRleE9mKFwiLlwiKSkpID4gLTEpIHtcblx0XHRcdGNvbnN0IGFsbG93ZWRUZXJtcyA9IFtVSUFubm90YXRpb25UZXJtcy5QcmVzZW50YXRpb25WYXJpYW50LCBVSUFubm90YXRpb25UZXJtcy5TZWxlY3Rpb25QcmVzZW50YXRpb25WYXJpYW50LCBvYmplY3RUZXJtXTtcblx0XHRcdGlmIChcblx0XHRcdFx0IWFsbG93ZWRUZXJtcy5zb21lKCh0ZXJtKSA9PiB7XG5cdFx0XHRcdFx0cmV0dXJuIG1ldGFQYXRoLnNlYXJjaChuZXcgUmVnRXhwKGAke3Rlcm19KCN8L3wkKWApKSA+IC0xO1xuXHRcdFx0XHR9KVxuXHRcdFx0KSB7XG5cdFx0XHRcdHRocm93IG5ldyBFcnJvcihgQW5ub3RhdGlvbiBQYXRoICR7bWV0YVBhdGh9IG1lbnRpb25lZCBpbiB0aGUgbWFuaWZlc3QgaXMgbm90IHZhbGlkIGZvciAke29iamVjdFRlcm19YCk7XG5cdFx0XHR9XG5cdFx0fVxuXHR9XG59O1xuKENvbW1vbkhlbHBlci5nZXRTb3J0Q29uZGl0aW9ucyBhcyBhbnkpLnJlcXVpcmVzSUNvbnRleHQgPSB0cnVlO1xuXG5leHBvcnQgZGVmYXVsdCBDb21tb25IZWxwZXI7XG4iXSwibWFwcGluZ3MiOiI7QUFBQTtBQUFBO0FBQUE7Ozs7Ozs7OztFQWNBLE1BQU1BLFVBQVUsR0FBR0MsUUFBUSxDQUFDRCxVQUFVO0VBQ3RDLE1BQU1FLFlBQVksR0FBRztJQUNwQkMsWUFBWSxFQUFFLFVBQVVDLElBQVMsRUFBRTtNQUNsQyxPQUFPQSxJQUFJLENBQUNDLFNBQVMsRUFBRTtJQUN4QixDQUFDO0lBRUQ7QUFDRDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7SUFDQ0MsU0FBUyxFQUFFLFVB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
@@ -2,5 +2,5 @@
2
2
  * SAP UI development toolkit for HTML5 (SAPUI5)
3
3
  * (c) Copyright 2009-2023 SAP SE. All rights reserved
4
4
  */
5
- sap.ui.define(["sap/base/Log","sap/fe/core/CommonUtils","sap/fe/core/helpers/BindingToolkit","sap/fe/core/helpers/MetaModelFunction","sap/fe/core/helpers/ModelHelper","sap/m/library","sap/ui/Device","sap/ui/mdc/enum/EditMode","sap/ui/model/Context","sap/ui/model/odata/v4/AnnotationHelper"],function(t,e,n,i,o,r,a,s,c,l){"use strict";var u=a.system;var f=i.isPropertyFilterable;var g=n.ref;var d=n.fn;var p=n.compileExpression;const h=r.ValueColor;const b={getPathToKey:function(t){return t.getObject()},isVisible:function(t,e){const n=e.context.getModel(),i=e.context.getPath(),o=n.getObject(`${i}@`),r=o["@com.sap.vocabularies.UI.v1.Hidden"];return typeof r==="object"?"{= !${"+r.$Path+"} }":!r},getParameterEditMode:function(t,e){const n=e.context.getModel(),i=e.context.getPath(),o=n.getObject(`${i}@`),r=o["@com.sap.vocabularies.Common.v1.FieldControl"],a=o["@Org.OData.Core.V1.Immutable"],c=o["@Org.OData.Core.V1.Computed"];let l=s.Editable;if(a||c){l=s.ReadOnly}else if(r){if(r.$EnumMember){if(r.$EnumMember==="com.sap.vocabularies.Common.v1.FieldControlType/ReadOnly"){l=s.ReadOnly}if(r.$EnumMember==="com.sap.vocabularies.Common.v1.FieldControlType/Inapplicable"||r.$EnumMember==="com.sap.vocabularies.Common.v1.FieldControlType/Hidden"){l=s.Disabled}}if(r.$Path){l="{= %{"+r.$Path+"} < 3 ? (%{"+r.$Path+"} === 0 ? '"+s.Disabled+"' : '"+s.ReadOnly+"') : '"+s.Editable+"'}"}}return l},getMetaPath:function(t,e){return e&&e.context&&e.context.getPath()||undefined},isDesktop:function(){return u.desktop===true},getTargetCollectionPath:function(t,e){let n=t.getPath();if(t.getMetadata().getName()==="sap.ui.model.Context"&&(t.getObject("$kind")==="EntitySet"||t.getObject("$ContainsTarget")===true)){return n}if(t.getModel){n=t.getModel().getMetaPath&&t.getModel().getMetaPath(n)||t.getModel().getMetaModel().getMetaPath(n)}const i=n.split("/").filter(function(t){return t&&t!="$Type"});const o=`/${i[0]}`;if(i.length===1){return o}const r=e===undefined?i.slice(1).join("/$NavigationPropertyBinding/"):e;return`${o}/$NavigationPropertyBinding/${r}`},isPropertyFilterable:function(t,e){const n=t.getModel(),i=t.getPath(),o=b.getLocationForPropertyPath(n,i),r=i.replace(`${o}/`,"");if(e&&(e.$Type==="com.sap.vocabularies.UI.v1.DataFieldForAction"||e.$Type==="com.sap.vocabularies.UI.v1.DataFieldForIntentBasedNavigation")){return false}return f(n,o,r)},getLocationForPropertyPath:function(t,e){let n;let i=e.slice(0,e.lastIndexOf("/"));if(t.getObject(`${i}/$kind`)==="EntityContainer"){n=i.length+1;i=e.slice(n,e.indexOf("/",n))}return i},gotoActionParameter:function(t){const n=t.getPath(),i=t.getObject(`${n}/$Name`);return e.getParameterPath(n,i)},getEntitySetName:function(t,e){const n=t.getObject("/");for(const t in n){if(typeof n[t]==="object"&&n[t].$Type===e){return t}}return undefined},getActionPath:function(t,e,n,i){let o=t.getPath().split("/@")[0];n=!n?t.getObject(t.getPath()):n;if(n&&n.indexOf("(")>-1){n=n.split("(")[0]}else if(t.getObject(o)){const e=t.getObject(o).$Type;const n=this.getEntitySetName(t.getModel(),e);if(n){o=`/${n}`}}else{return o}if(i){return t.getObject(`${o}/${n}@Org.OData.Core.V1.OperationAvailable`)}if(e){return`${o}/${n}`}else{return{sContextPath:o,sProperty:t.getObject(`${o}/${n}@Org.OData.Core.V1.OperationAvailable/$Path`),sBindingParameter:t.getObject(`${o}/${n}/@$ui5.overload/0/$Parameter/0/$Name`)}}},getNavigationContext:function(t){return l.getNavigationPath(t.getPath())},getNavigationPath:function(t,e){const n=t.startsWith("/");const i=t.split("/").filter(function(t){return!!t});if(n){i.shift()}if(!e){i.pop()}return i.join("/")},getActionContext:function(t){return b.getActionPath(t,true)},getPathToBoundActionOverload:function(t){const e=b.getActionPath(t,true);return`${e}/@$ui5.overload/0`},addSingleQuotes:function(t,e){if(e&&t){t=this.escapeSingleQuotes(t)}return`'${t}'`},escapeSingleQuotes:function(t){return t.replace(/[']/g,"\\'")},generateFunction:function(t){let e="";for(let t=0;t<(arguments.length<=1?0:arguments.length-1);t++){e+=t+1<1||arguments.length<=t+1?undefined:arguments[t+1];if(t<(arguments.length<=1?0:arguments.length-1)-1){e+=", "}}let n=`${t}()`;if(e){n=`${t}(${e})`}return n},getHeaderDataPointLinkVisibility:function(t,e,n){let i;if(n){i=e?"{= ${internal>isHeaderDPLinkVisible/"+t+"} === true && "+n+"}":"{= ${internal>isHeaderDPLinkVisible/"+t+"} !== true && "+n+"}"}else{i=e?"{= ${internal>isHeaderDPLinkVisible/"+t+"} === true}":"{= ${internal>isHeaderDPLinkVisible/"+t+"} !== true}"}return i},objectToString:function(t){let e=Object.keys(t).length,n="";for(const i in t){let o=t[i];if(o&&typeof o==="object"){o=this.objectToString(o)}n+=`${i}: ${o}`;if(e>1){--e;n+=", "}}return`{ ${n}}`},removeEscapeCharacters:function(t){return t?t.replace(/\\?\\([{}])/g,"$1"):undefined},stringifyObject:function(e){if(!e||e==="{}"){return undefined}else{const n=JSON.parse(e);if(typeof n==="object"&&!Array.isArray(n)){const t={ui5object:true};Object.assign(t,n);return JSON.stringify(t)}else{const e=Array.isArray(n)?"Array":typeof n;t.error(`Unexpected object type in stringifyObject (${e}) - only works with object`);throw new Error("stringifyObject only works with objects!")}}},stringifyCustomData:function(t){const e={ui5object:true};e["customData"]=t instanceof c?t.getObject():t;return JSON.stringify(e)},parseCustomData:function(t){t=typeof t==="string"?JSON.parse(t):t;if(t&&t.hasOwnProperty("customData")){return t["customData"]}return t},getContextPath:function(t,e){const n=e&&e.context&&e.context.getPath();return n[n.length-1]==="/"?n.slice(0,-1):n},getSortConditions:function(t,e,n){if(e&&b._isPresentationVariantAnnotation(n)&&e.SortOrder){const n={sorters:[]};const i=t.getPath(0).split("@")[0];e.SortOrder.forEach(function(){let e=arguments.length>0&&arguments[0]!==undefined?arguments[0]:{};let o={};const r={};if(e.DynamicProperty){var a;o=(a=t.getModel(0).getObject(i+e.DynamicProperty.$AnnotationPath))===null||a===void 0?void 0:a.Name}else if(e.Property){o=e.Property.$PropertyPath}if(o){r.name=o;r.descending=!!e.Descending;n.sorters.push(r)}else{throw new Error("Please define the right path to the sort property")}});return JSON.stringify(n)}return undefined},_isPresentationVariantAnnotation:function(t){return t.indexOf(`@${"com.sap.vocabularies.UI.v1.PresentationVariant"}`)>-1||t.indexOf(`@${"com.sap.vocabularies.UI.v1.SelectionPresentationVariant"}`)>-1},createPresentationPathContext:function(t){const e=t.sPath.split("@")||[];const n=t.getModel();if(e.length&&e[e.length-1].indexOf("com.sap.vocabularies.UI.v1.SelectionPresentationVariant")>-1){const e=t.sPath.split("/PresentationVariant")[0];return n.createBindingContext(`${e}@sapui.name`)}return n.createBindingContext(`${t.sPath}@sapui.name`)},getPressHandlerForDataFieldForIBN:function(t,e,n){const i={navigationContexts:e?e:"${$source>/}.getBindingContext()"};if(t.RequiresContext&&!t.Inline&&n){i.applicableContexts="${internal>ibn/"+t.SemanticObject+"-"+t.Action+"/aApplicable/}";i.notApplicableContexts="${internal>ibn/"+t.SemanticObject+"-"+t.Action+"/aNotApplicable/}";i.label=this.addSingleQuotes(t.Label,true)}if(t.Mapping){i.semanticObjectMapping=this.addSingleQuotes(JSON.stringify(t.Mapping))}return this.generateFunction(n?"._intentBasedNavigation.navigateWithConfirmationDialog":"._intentBasedNavigation.navigate",this.addSingleQuotes(t.SemanticObject),this.addSingleQuotes(t.Action),this.objectToString(i))},getEntitySet:function(t){const e=t.getPath();return o.getEntitySetPath(e)},handleVisibilityOfMenuActions:function(t){const e=[];if(Array.isArray(t)){for(let n=0;n<t.length;n++){if(t[n].indexOf("{")>-1&&t[n].indexOf("{=")===-1){t[n]="{="+t[n]+"}"}if(t[n].split("{=").length>0){t[n]=t[n].split("{=")[1].slice(0,-1)}e.push(`(${t[n]})`)}}return e.length>0?`{= ${e.join(" || ")}}`:t},getCriticalityCalculationBinding:function(e,n,i,o,r,a,s,c){let l=h.Neutral;n=`%${n}`;i=i||-Infinity;o=o||i;r=r||o;c=c||Infinity;s=s||c;a=a||s;i=i&&(+i?+i:`%${i}`);o=o&&(+o?+o:`%${o}`);r=r&&(+r?+r:`%${r}`);a=a&&(+a?+a:`%${a}`);s=s&&(+s?+s:`%${s}`);c=c&&(+c?+c:`%${c}`);if(e.indexOf("Minimize")>-1){l="{= "+n+" <= "+a+" ? '"+h.Good+"' : "+n+" <= "+s+" ? '"+h.Neutral+"' : "+"("+c+" && "+n+" <= "+c+") ? '"+h.Critical+"' : '"+h.Error+"' }"}else if(e.indexOf("Maximize")>-1){l="{= "+n+" >= "+r+" ? '"+h.Good+"' : "+n+" >= "+o+" ? '"+h.Neutral+"' : "+"("+i+" && "+n+" >= "+i+") ? '"+h.Critical+"' : '"+h.Error+"' }"}else if(e.indexOf("Target")>-1){l="{= ("+n+" <= "+a+" && "+n+" >= "+r+") ? '"+h.Good+"' : "+"(("+n+" >= "+o+" && "+n+" < "+r+") || ("+n+" > "+a+" && "+n+" <= "+s+")) ? '"+h.Neutral+"' : "+"(("+i+" && ("+n+" >= "+i+") && ("+n+" < "+o+")) || (("+n+" > "+s+") && "+c+" && ("+n+" <= "+c+"))) ? '"+h.Critical+"' : '"+h.Error+"' }"}else{t.warning("Case not supported, returning the default Value Neutral")}return l},getMeasureAttributeIndex:function(t,e){var n,i;let o,r;if((e===null||e===void 0?void 0:(n=e.Measures)===null||n===void 0?void 0:n.length)>0){o=e.Measures;r=o[t].$PropertyPath}else if((e===null||e===void 0?void 0:(i=e.DynamicMeasures)===null||i===void 0?void 0:i.length)>0){o=e.DynamicMeasures;r=o[t].$AnnotationPath}let a;const s=e.MeasureAttributes;let c=-1;const l=function(t,e,n){if(e){if(e.Measure&&e.Measure.$PropertyPath===t){c=n;return true}else if(e.DynamicMeasure&&e.DynamicMeasure.$AnnotationPath===t){c=n;return true}}};if(s){a=s.some(l.bind(null,r))}return a&&c>-1&&c},getMeasureAttribute:function(e){const n=e.getModel(),i=e.getPath();return n.requestObject(i).then(function(e){const n=e.MeasureAttributes,o=b.getMeasureAttributeIndex(0,e);const r=o>-1&&n[o]&&n[o].DataPoint?`${i}/MeasureAttributes/${o}/`:undefined;if(r===undefined){t.warning("DataPoint missing for the measure")}return r?`${r}DataPoint/$AnnotationPath/`:r})},getMeasureAttributeForMeasure:function(e){const n=e.getModel(),i=e.getPath(),o=i.substring(0,i.lastIndexOf("Measure")),r=i.replace(/.*\//,"");const a=n.getObject(o);const s=a.MeasureAttributes,c=b.getMeasureAttributeIndex(r,a);const l=c>-1&&s[c]&&s[c].DataPoint?`${o}MeasureAttributes/${c}/`:undefined;if(l===undefined){t.warning("DataPoint missing for the measure")}return l?`${l}DataPoint/$AnnotationPath/`:l},isDraftParentEntityForContainment:function(t,e){if(t){if(e&&e.parentEntitySet&&e.parentEntitySet.sPath){const t=e.parentEntitySet.sPath;const n=e.parentEntitySet.oModel.getObject(`${t}@com.sap.vocabularies.Common.v1.DraftRoot`);const i=e.parentEntitySet.oModel.getObject(`${t}@com.sap.vocabularies.Common.v1.DraftNode`);if(n||i){return true}else{return false}}}return false},getDataFromTemplate:function(t){const e=t.getPath().split("/");const n=e[e.length-1];const i=`/${e.slice(1,-2).join("/")}/@`;const o=t.getObject(i);const r=o.Template;const a=r.split("}");const s=[];for(let t=0;t<a.length-1;t++){const e=a[t].split("{")[1].trim();s.push(e)}Object.keys(o.Data).forEach(function(t){if(t.startsWith("$")){delete o.Data[t]}});const c=Object.keys(o.Data).indexOf(n);return`/${e.slice(1,-2).join("/")}/Data/${s[c]}`},notLastIndex:function(t,e){const n=t.Template;const i=n.split("}");const o=[];let r=false;for(let t=0;t<i.length-1;t++){const e=i[t].split("{")[1].trim();o.push(e)}o.forEach(function(n){if(t.Data[n]===e&&o.indexOf(n)!==o.length-1){r=true}});return r},getDelimiter:function(t){return t.split("}")[1].split("{")[0].trim()},oMetaModel:undefined,setMetaModel:function(t){this.oMetaModel=t},getMetaModel:function(t,e){if(t){return e.context.getModel()}return this.oMetaModel},getParameters:function(t,n){if(t){const t=n.context.getModel();const i=n.context.getPath();const o=e.getParameterInfo(t,i);if(o.parameterProperties){return Object.keys(o.parameterProperties)}}return[]},buildActionWrapper:function(t,e){const n=[g("$event"),t.handlerModule,t.handlerMethod];if(e&&e.id){const t={contexts:g("${internal>selectedContexts}")};n.push(t)}return p(d("FPM.actionWrapper",n))},getHiddenPathExpression:function(t){if(t["@com.sap.vocabularies.UI.v1.Hidden"]!==null){const e=t["@com.sap.vocabularies.UI.v1.Hidden"];return typeof e==="object"?"{= !${"+e.$Path+"} }":!e}return true},validatePresentationMetaPath:function(t,e){if(t.indexOf(e.slice(0,e.lastIndexOf(".")))>-1){const n=["com.sap.vocabularies.UI.v1.PresentationVariant","com.sap.vocabularies.UI.v1.SelectionPresentationVariant",e];if(!n.some(e=>t.search(new RegExp(`${e}(#|/|$)`))>-1)){throw new Error(`Annotation Path ${t} mentioned in the manifest is not valid for ${e}`)}}}};b.getSortConditions.requiresIContext=true;return b},false);
5
+ sap.ui.define(["sap/base/Log","sap/fe/core/CommonUtils","sap/fe/core/helpers/BindingToolkit","sap/fe/core/helpers/MetaModelFunction","sap/fe/core/helpers/ModelHelper","sap/m/library","sap/ui/Device","sap/ui/mdc/enum/EditMode","sap/ui/model/Context","sap/ui/model/odata/v4/AnnotationHelper"],function(t,e,n,i,r,o,a,s,c,l){"use strict";var u=a.system;var f=i.isPropertyFilterable;var d=n.ref;var g=n.fn;var p=n.compileExpression;const h=o.ValueColor;const b={getPathToKey:function(t){return t.getObject()},isVisible:function(t,e){const n=e.context.getModel(),i=e.context.getPath(),r=n.getObject(`${i}@`),o=r["@com.sap.vocabularies.UI.v1.Hidden"];return typeof o==="object"?"{= !${"+o.$Path+"} }":!o},getParameterEditMode:function(t,e){const n=e.context.getModel(),i=e.context.getPath(),r=n.getObject(`${i}@`),o=r["@com.sap.vocabularies.Common.v1.FieldControl"],a=r["@Org.OData.Core.V1.Immutable"],c=r["@Org.OData.Core.V1.Computed"];let l=s.Editable;if(a||c){l=s.ReadOnly}else if(o){if(o.$EnumMember){if(o.$EnumMember==="com.sap.vocabularies.Common.v1.FieldControlType/ReadOnly"){l=s.ReadOnly}if(o.$EnumMember==="com.sap.vocabularies.Common.v1.FieldControlType/Inapplicable"||o.$EnumMember==="com.sap.vocabularies.Common.v1.FieldControlType/Hidden"){l=s.Disabled}}if(o.$Path){l="{= %{"+o.$Path+"} < 3 ? (%{"+o.$Path+"} === 0 ? '"+s.Disabled+"' : '"+s.ReadOnly+"') : '"+s.Editable+"'}"}}return l},getMetaPath:function(t,e){return e&&e.context&&e.context.getPath()||undefined},isDesktop:function(){return u.desktop===true},getTargetCollectionPath:function(t,e){let n=t.getPath();if(t.getMetadata().getName()==="sap.ui.model.Context"&&(t.getObject("$kind")==="EntitySet"||t.getObject("$ContainsTarget")===true)){return n}if(t.getModel){n=t.getModel().getMetaPath&&t.getModel().getMetaPath(n)||t.getModel().getMetaModel().getMetaPath(n)}const i=n.split("/").filter(function(t){return t&&t!="$Type"});const r=`/${i[0]}`;if(i.length===1){return r}const o=e===undefined?i.slice(1).join("/$NavigationPropertyBinding/"):e;return`${r}/$NavigationPropertyBinding/${o}`},isPropertyFilterable:function(t,e){const n=t.getModel(),i=t.getPath(),r=b.getLocationForPropertyPath(n,i),o=i.replace(`${r}/`,"");if(e&&(e.$Type==="com.sap.vocabularies.UI.v1.DataFieldForAction"||e.$Type==="com.sap.vocabularies.UI.v1.DataFieldForIntentBasedNavigation")){return false}return f(n,r,o)},getLocationForPropertyPath:function(t,e){let n;let i=e.slice(0,e.lastIndexOf("/"));if(t.getObject(`${i}/$kind`)==="EntityContainer"){n=i.length+1;i=e.slice(n,e.indexOf("/",n))}return i},gotoActionParameter:function(t){const n=t.getPath(),i=t.getObject(`${n}/$Name`);return e.getParameterPath(n,i)},getEntitySetName:function(t,e){const n=t.getObject("/");for(const t in n){if(typeof n[t]==="object"&&n[t].$Type===e){return t}}return undefined},getActionPath:function(t,e,n,i){let r=t.getPath().split("/@")[0];n=!n?t.getObject(t.getPath()):n;if(n&&n.indexOf("(")>-1){n=n.split("(")[0]}else if(t.getObject(r)){const e=t.getObject(r).$Type;const n=this.getEntitySetName(t.getModel(),e);if(n){r=`/${n}`}}else{return r}if(i){return t.getObject(`${r}/${n}@Org.OData.Core.V1.OperationAvailable`)}if(e){return`${r}/${n}`}else{return{sContextPath:r,sProperty:t.getObject(`${r}/${n}@Org.OData.Core.V1.OperationAvailable/$Path`),sBindingParameter:t.getObject(`${r}/${n}/@$ui5.overload/0/$Parameter/0/$Name`)}}},getNavigationContext:function(t){return l.getNavigationPath(t.getPath())},getNavigationPath:function(t,e){const n=t.startsWith("/");const i=t.split("/").filter(function(t){return!!t});if(n){i.shift()}if(!e){i.pop()}return i.join("/")},getActionContext:function(t){return b.getActionPath(t,true)},getPathToBoundActionOverload:function(t){const e=b.getActionPath(t,true);return`${e}/@$ui5.overload/0`},addSingleQuotes:function(t,e){if(e&&t){t=this.escapeSingleQuotes(t)}return`'${t}'`},escapeSingleQuotes:function(t){return t.replace(/[']/g,"\\'")},generateFunction:function(t){let e="";for(let t=0;t<(arguments.length<=1?0:arguments.length-1);t++){e+=t+1<1||arguments.length<=t+1?undefined:arguments[t+1];if(t<(arguments.length<=1?0:arguments.length-1)-1){e+=", "}}let n=`${t}()`;if(e){n=`${t}(${e})`}return n},getHeaderDataPointLinkVisibility:function(t,e,n){let i;if(n){i=e?"{= ${internal>isHeaderDPLinkVisible/"+t+"} === true && "+n+"}":"{= ${internal>isHeaderDPLinkVisible/"+t+"} !== true && "+n+"}"}else{i=e?"{= ${internal>isHeaderDPLinkVisible/"+t+"} === true}":"{= ${internal>isHeaderDPLinkVisible/"+t+"} !== true}"}return i},objectToString:function(t){let e=Object.keys(t).length,n="";for(const i in t){let r=t[i];if(r&&typeof r==="object"){r=this.objectToString(r)}n+=`${i}: ${r}`;if(e>1){--e;n+=", "}}return`{ ${n}}`},removeEscapeCharacters:function(t){return t?t.replace(/\\?\\([{}])/g,"$1"):undefined},stringifyObject:function(e){if(!e||e==="{}"){return undefined}else{const n=JSON.parse(e);if(typeof n==="object"&&!Array.isArray(n)){const t={ui5object:true};Object.assign(t,n);return JSON.stringify(t)}else{const e=Array.isArray(n)?"Array":typeof n;t.error(`Unexpected object type in stringifyObject (${e}) - only works with object`);throw new Error("stringifyObject only works with objects!")}}},stringifyCustomData:function(t){const e={ui5object:true};e["customData"]=t instanceof c?t.getObject():t;return JSON.stringify(e)},parseCustomData:function(t){t=typeof t==="string"?JSON.parse(t):t;if(t&&t.hasOwnProperty("customData")){return t["customData"]}return t},getContextPath:function(t,e){const n=e&&e.context&&e.context.getPath();return n[n.length-1]==="/"?n.slice(0,-1):n},getSortConditions:function(t,e,n){if(e&&b._isPresentationVariantAnnotation(n)&&e.SortOrder){const n={sorters:[]};const i=t.getPath(0).split("@")[0];e.SortOrder.forEach(function(){let e=arguments.length>0&&arguments[0]!==undefined?arguments[0]:{};let r={};const o={};if(e.DynamicProperty){var a;r=(a=t.getModel(0).getObject(i+e.DynamicProperty.$AnnotationPath))===null||a===void 0?void 0:a.Name}else if(e.Property){r=e.Property.$PropertyPath}if(r){o.name=r;o.descending=!!e.Descending;n.sorters.push(o)}else{throw new Error("Please define the right path to the sort property")}});return JSON.stringify(n)}return undefined},_isPresentationVariantAnnotation:function(t){return t.indexOf(`@${"com.sap.vocabularies.UI.v1.PresentationVariant"}`)>-1||t.indexOf(`@${"com.sap.vocabularies.UI.v1.SelectionPresentationVariant"}`)>-1},createPresentationPathContext:function(t){const e=t.sPath.split("@")||[];const n=t.getModel();if(e.length&&e[e.length-1].indexOf("com.sap.vocabularies.UI.v1.SelectionPresentationVariant")>-1){const e=t.sPath.split("/PresentationVariant")[0];return n.createBindingContext(`${e}@sapui.name`)}return n.createBindingContext(`${t.sPath}@sapui.name`)},getPressHandlerForDataFieldForIBN:function(t,e,n){if(!t)return undefined;const i={navigationContexts:e?e:"${$source>/}.getBindingContext()"};if(t.RequiresContext&&!t.Inline&&n){i.applicableContexts="${internal>ibn/"+t.SemanticObject+"-"+t.Action+"/aApplicable/}";i.notApplicableContexts="${internal>ibn/"+t.SemanticObject+"-"+t.Action+"/aNotApplicable/}";i.label=this.addSingleQuotes(t.Label,true)}if(t.Mapping){i.semanticObjectMapping=this.addSingleQuotes(JSON.stringify(t.Mapping))}return this.generateFunction(n?"._intentBasedNavigation.navigateWithConfirmationDialog":"._intentBasedNavigation.navigate",this.addSingleQuotes(t.SemanticObject),this.addSingleQuotes(t.Action),this.objectToString(i))},getEntitySet:function(t){const e=t.getPath();return r.getEntitySetPath(e)},handleVisibilityOfMenuActions:function(t){const e=[];if(Array.isArray(t)){for(let n=0;n<t.length;n++){if(t[n].indexOf("{")>-1&&t[n].indexOf("{=")===-1){t[n]="{="+t[n]+"}"}if(t[n].split("{=").length>0){t[n]=t[n].split("{=")[1].slice(0,-1)}e.push(`(${t[n]})`)}}return e.length>0?`{= ${e.join(" || ")}}`:t},getCriticalityCalculationBinding:function(e,n,i,r,o,a,s,c){let l=h.Neutral;n=`%${n}`;i=i||-Infinity;r=r||i;o=o||r;c=c||Infinity;s=s||c;a=a||s;i=i&&(+i?+i:`%${i}`);r=r&&(+r?+r:`%${r}`);o=o&&(+o?+o:`%${o}`);a=a&&(+a?+a:`%${a}`);s=s&&(+s?+s:`%${s}`);c=c&&(+c?+c:`%${c}`);if(e.indexOf("Minimize")>-1){l="{= "+n+" <= "+a+" ? '"+h.Good+"' : "+n+" <= "+s+" ? '"+h.Neutral+"' : "+"("+c+" && "+n+" <= "+c+") ? '"+h.Critical+"' : '"+h.Error+"' }"}else if(e.indexOf("Maximize")>-1){l="{= "+n+" >= "+o+" ? '"+h.Good+"' : "+n+" >= "+r+" ? '"+h.Neutral+"' : "+"("+i+" && "+n+" >= "+i+") ? '"+h.Critical+"' : '"+h.Error+"' }"}else if(e.indexOf("Target")>-1){l="{= ("+n+" <= "+a+" && "+n+" >= "+o+") ? '"+h.Good+"' : "+"(("+n+" >= "+r+" && "+n+" < "+o+") || ("+n+" > "+a+" && "+n+" <= "+s+")) ? '"+h.Neutral+"' : "+"(("+i+" && ("+n+" >= "+i+") && ("+n+" < "+r+")) || (("+n+" > "+s+") && "+c+" && ("+n+" <= "+c+"))) ? '"+h.Critical+"' : '"+h.Error+"' }"}else{t.warning("Case not supported, returning the default Value Neutral")}return l},getMeasureAttributeIndex:function(t,e){var n,i;let r,o;if((e===null||e===void 0?void 0:(n=e.Measures)===null||n===void 0?void 0:n.length)>0){r=e.Measures;o=r[t].$PropertyPath}else if((e===null||e===void 0?void 0:(i=e.DynamicMeasures)===null||i===void 0?void 0:i.length)>0){r=e.DynamicMeasures;o=r[t].$AnnotationPath}let a;const s=e.MeasureAttributes;let c=-1;const l=function(t,e,n){if(e){if(e.Measure&&e.Measure.$PropertyPath===t){c=n;return true}else if(e.DynamicMeasure&&e.DynamicMeasure.$AnnotationPath===t){c=n;return true}}};if(s){a=s.some(l.bind(null,o))}return a&&c>-1&&c},getMeasureAttribute:function(e){const n=e.getModel(),i=e.getPath();return n.requestObject(i).then(function(e){const n=e.MeasureAttributes,r=b.getMeasureAttributeIndex(0,e);const o=r>-1&&n[r]&&n[r].DataPoint?`${i}/MeasureAttributes/${r}/`:undefined;if(o===undefined){t.warning("DataPoint missing for the measure")}return o?`${o}DataPoint/$AnnotationPath/`:o})},getMeasureAttributeForMeasure:function(e){const n=e.getModel(),i=e.getPath(),r=i.substring(0,i.lastIndexOf("Measure")),o=i.replace(/.*\//,"");const a=n.getObject(r);const s=a.MeasureAttributes,c=b.getMeasureAttributeIndex(o,a);const l=c>-1&&s[c]&&s[c].DataPoint?`${r}MeasureAttributes/${c}/`:undefined;if(l===undefined){t.warning("DataPoint missing for the measure")}return l?`${l}DataPoint/$AnnotationPath/`:l},isDraftParentEntityForContainment:function(t,e){if(t){if(e&&e.parentEntitySet&&e.parentEntitySet.sPath){const t=e.parentEntitySet.sPath;const n=e.parentEntitySet.oModel.getObject(`${t}@com.sap.vocabularies.Common.v1.DraftRoot`);const i=e.parentEntitySet.oModel.getObject(`${t}@com.sap.vocabularies.Common.v1.DraftNode`);if(n||i){return true}else{return false}}}return false},getDataFromTemplate:function(t){const e=t.getPath().split("/");const n=e[e.length-1];const i=`/${e.slice(1,-2).join("/")}/@`;const r=t.getObject(i);const o=r.Template;const a=o.split("}");const s=[];for(let t=0;t<a.length-1;t++){const e=a[t].split("{")[1].trim();s.push(e)}Object.keys(r.Data).forEach(function(t){if(t.startsWith("$")){delete r.Data[t]}});const c=Object.keys(r.Data).indexOf(n);return`/${e.slice(1,-2).join("/")}/Data/${s[c]}`},notLastIndex:function(t,e){const n=t.Template;const i=n.split("}");const r=[];let o=false;for(let t=0;t<i.length-1;t++){const e=i[t].split("{")[1].trim();r.push(e)}r.forEach(function(n){if(t.Data[n]===e&&r.indexOf(n)!==r.length-1){o=true}});return o},getDelimiter:function(t){return t.split("}")[1].split("{")[0].trim()},oMetaModel:undefined,setMetaModel:function(t){this.oMetaModel=t},getMetaModel:function(t,e){if(t){return e.context.getModel()}return this.oMetaModel},getParameters:function(t,n){if(t){const t=n.context.getModel();const i=n.context.getPath();const r=e.getParameterInfo(t,i);if(r.parameterProperties){return Object.keys(r.parameterProperties)}}return[]},buildActionWrapper:function(t,e){const n=[d("$event"),t.handlerModule,t.handlerMethod];if(e&&e.id){const t={contexts:d("${internal>selectedContexts}")};n.push(t)}return p(g("FPM.actionWrapper",n))},getHiddenPathExpression:function(t){if(t["@com.sap.vocabularies.UI.v1.Hidden"]!==null){const e=t["@com.sap.vocabularies.UI.v1.Hidden"];return typeof e==="object"?"{= !${"+e.$Path+"} }":!e}return true},validatePresentationMetaPath:function(t,e){if(t.indexOf(e.slice(0,e.lastIndexOf(".")))>-1){const n=["com.sap.vocabularies.UI.v1.PresentationVariant","com.sap.vocabularies.UI.v1.SelectionPresentationVariant",e];if(!n.some(e=>t.search(new RegExp(`${e}(#|/|$)`))>-1)){throw new Error(`Annotation Path ${t} mentioned in the manifest is not valid for ${e}`)}}}};b.getSortConditions.requiresIContext=true;return b},false);
6
6
  //# sourceMappingURL=CommonHelper.js.map