@sapui5/sap.fe.macros 1.141.2 → 1.143.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 (257) hide show
  1. package/package.json +1 -1
  2. package/src/sap/fe/macros/.library +1 -1
  3. package/src/sap/fe/macros/Breadcrumbs.js +4 -10
  4. package/src/sap/fe/macros/Breadcrumbs.tsx +2 -8
  5. package/src/sap/fe/macros/Chart.js +34 -23
  6. package/src/sap/fe/macros/Chart.tsx +25 -11
  7. package/src/sap/fe/macros/CollaborativeDraftHandler.js +47 -36
  8. package/src/sap/fe/macros/CollaborativeDraftHandler.tsx +50 -31
  9. package/src/sap/fe/macros/CollectionBindingInfo.js +8 -2
  10. package/src/sap/fe/macros/CollectionBindingInfo.ts +11 -6
  11. package/src/sap/fe/macros/CommonHelper.js +14 -24
  12. package/src/sap/fe/macros/CommonHelper.ts +18 -25
  13. package/src/sap/fe/macros/ConditionalSwitch.js +1 -2
  14. package/src/sap/fe/macros/ConditionalSwitch.tsx +0 -1
  15. package/src/sap/fe/macros/ConditionalSwitchProperty.js +1 -3
  16. package/src/sap/fe/macros/ConditionalSwitchProperty.tsx +0 -2
  17. package/src/sap/fe/macros/Field.js +34 -17
  18. package/src/sap/fe/macros/Field.ts +64 -32
  19. package/src/sap/fe/macros/FooterContent.js +7 -3
  20. package/src/sap/fe/macros/FooterContent.tsx +8 -13
  21. package/src/sap/fe/macros/KPITag.js +6 -6
  22. package/src/sap/fe/macros/KPITag.tsx +8 -6
  23. package/src/sap/fe/macros/MacroAPI.js +4 -3
  24. package/src/sap/fe/macros/MacroAPI.ts +3 -3
  25. package/src/sap/fe/macros/MessageButton.js +4 -3
  26. package/src/sap/fe/macros/MessageButton.tsx +7 -3
  27. package/src/sap/fe/macros/MicroChart.js +12 -7
  28. package/src/sap/fe/macros/MicroChart.tsx +9 -3
  29. package/src/sap/fe/macros/MultiValueField.js +22 -36
  30. package/src/sap/fe/macros/MultiValueField.tsx +34 -66
  31. package/src/sap/fe/macros/RichTextEditor.js +3 -4
  32. package/src/sap/fe/macros/RichTextEditor.tsx +2 -3
  33. package/src/sap/fe/macros/Share.js +7 -7
  34. package/src/sap/fe/macros/Share.tsx +9 -6
  35. package/src/sap/fe/macros/Status.js +39 -11
  36. package/src/sap/fe/macros/Status.tsx +25 -5
  37. package/src/sap/fe/macros/ValueHelp.js +5 -2
  38. package/src/sap/fe/macros/ValueHelp.tsx +5 -0
  39. package/src/sap/fe/macros/ai/EasyFillDialog.js +2 -1
  40. package/src/sap/fe/macros/ai/EasyFillDialog.tsx +1 -0
  41. package/src/sap/fe/macros/ai/EasyFilterBar.js +7 -34
  42. package/src/sap/fe/macros/ai/EasyFilterBar.tsx +6 -35
  43. package/src/sap/fe/macros/ai/EasyFilterDataFetcher.js +31 -7
  44. package/src/sap/fe/macros/ai/EasyFilterDataFetcher.ts +33 -6
  45. package/src/sap/fe/macros/ai/SummarizationButton.js +6 -4
  46. package/src/sap/fe/macros/ai/SummarizationButton.tsx +5 -3
  47. package/src/sap/fe/macros/chart/Action.js +25 -2
  48. package/src/sap/fe/macros/chart/Action.ts +13 -0
  49. package/src/sap/fe/macros/chart/ActionGroup.js +25 -2
  50. package/src/sap/fe/macros/chart/ActionGroup.ts +13 -0
  51. package/src/sap/fe/macros/chart/ChartDelegate.js +29 -8
  52. package/src/sap/fe/macros/chart/ChartDelegate.ts +46 -14
  53. package/src/sap/fe/macros/chart/MdcChartTemplate.js +58 -12
  54. package/src/sap/fe/macros/chart/MdcChartTemplate.tsx +75 -13
  55. package/src/sap/fe/macros/chart/OverflowGroup.js +62 -0
  56. package/src/sap/fe/macros/chart/OverflowGroup.ts +22 -0
  57. package/src/sap/fe/macros/controls/BuildingBlockObjectProperty.js +7 -7
  58. package/src/sap/fe/macros/controls/BuildingBlockObjectProperty.ts +3 -2
  59. package/src/sap/fe/macros/controls/FileWrapper.js +11 -5
  60. package/src/sap/fe/macros/controls/FileWrapper.ts +10 -4
  61. package/src/sap/fe/macros/controls/FilterBar.js +39 -3
  62. package/src/sap/fe/macros/controls/FilterBar.ts +42 -1
  63. package/src/sap/fe/macros/controls/NumberWithUnitOrCurrency.js +3 -1
  64. package/src/sap/fe/macros/controls/NumberWithUnitOrCurrency.tsx +2 -0
  65. package/src/sap/fe/macros/controls/RadioButtons.js +18 -5
  66. package/src/sap/fe/macros/controls/RadioButtons.tsx +10 -1
  67. package/src/sap/fe/macros/coreUI/CreateDialog.js +3 -3
  68. package/src/sap/fe/macros/coreUI/CreateDialog.tsx +2 -2
  69. package/src/sap/fe/macros/coreUI/OperationParameterDialog.js +40 -12
  70. package/src/sap/fe/macros/coreUI/OperationParameterDialog.tsx +48 -9
  71. package/src/sap/fe/macros/draftIndicator/DraftIndicator.js +4 -2
  72. package/src/sap/fe/macros/draftIndicator/DraftIndicator.tsx +3 -1
  73. package/src/sap/fe/macros/field/FieldFormatOptions.js +4 -4
  74. package/src/sap/fe/macros/field/FieldFormatOptions.ts +2 -2
  75. package/src/sap/fe/macros/field/FieldHelper.js +4 -3
  76. package/src/sap/fe/macros/field/FieldHelper.ts +7 -1
  77. package/src/sap/fe/macros/field/FieldRuntime.js +44 -9
  78. package/src/sap/fe/macros/field/FieldRuntime.ts +72 -8
  79. package/src/sap/fe/macros/field/FieldRuntimeHelper.js +3 -34
  80. package/src/sap/fe/macros/field/FieldRuntimeHelper.ts +28 -53
  81. package/src/sap/fe/macros/field/FieldTemplating.js +5 -4
  82. package/src/sap/fe/macros/field/FieldTemplating.ts +6 -4
  83. package/src/sap/fe/macros/filter/FilterFieldHelper.js +6 -4
  84. package/src/sap/fe/macros/filter/FilterFieldHelper.ts +7 -2
  85. package/src/sap/fe/macros/filter/FilterUtils.js +130 -40
  86. package/src/sap/fe/macros/filter/FilterUtils.ts +167 -45
  87. package/src/sap/fe/macros/filterBar/ExtendedSemanticDateOperators.js +2 -2
  88. package/src/sap/fe/macros/filterBar/ExtendedSemanticDateOperators.ts +1 -1
  89. package/src/sap/fe/macros/filterBar/FilterBar.block.js +4 -3
  90. package/src/sap/fe/macros/filterBar/FilterBar.block.tsx +19 -8
  91. package/src/sap/fe/macros/filterBar/FilterBarAPI.js +15 -9
  92. package/src/sap/fe/macros/filterBar/FilterBarAPI.ts +36 -17
  93. package/src/sap/fe/macros/filterBar/FilterBarDelegate.js +21 -10
  94. package/src/sap/fe/macros/filterBar/FilterBarDelegate.ts +81 -63
  95. package/src/sap/fe/macros/filterBar/UOMValidationDelegate.js +376 -0
  96. package/src/sap/fe/macros/filterBar/UOMValidationDelegate.ts +463 -0
  97. package/src/sap/fe/macros/filterBar/mixin/FilterBarAPIStateHandler.js +4 -3
  98. package/src/sap/fe/macros/filterBar/mixin/FilterBarAPIStateHandler.ts +3 -2
  99. package/src/sap/fe/macros/form/Form.block.js +27 -2
  100. package/src/sap/fe/macros/form/Form.block.ts +31 -11
  101. package/src/sap/fe/macros/form/FormActionButtons.fragment.xml +13 -3
  102. package/src/sap/fe/macros/form/FormContainer.block.js +110 -63
  103. package/src/sap/fe/macros/form/FormContainer.block.ts +121 -64
  104. package/src/sap/fe/macros/formatters/TableFormatter.js +13 -10
  105. package/src/sap/fe/macros/formatters/TableFormatter.ts +11 -9
  106. package/src/sap/fe/macros/formatters/VisualFilterFormatter.js +6 -4
  107. package/src/sap/fe/macros/formatters/VisualFilterFormatter.ts +5 -5
  108. package/src/sap/fe/macros/inlineEdit/InlineEdit.js +5 -5
  109. package/src/sap/fe/macros/inlineEdit/InlineEdit.ts +4 -4
  110. package/src/sap/fe/macros/insights/InsightsService.js +3 -2
  111. package/src/sap/fe/macros/insights/InsightsService.ts +2 -1
  112. package/src/sap/fe/macros/internal/DataPoint.js +7 -8
  113. package/src/sap/fe/macros/internal/DataPoint.tsx +6 -9
  114. package/src/sap/fe/macros/internal/field/DisplayStyle.js +8 -6
  115. package/src/sap/fe/macros/internal/field/DisplayStyle.tsx +7 -8
  116. package/src/sap/fe/macros/internal/field/EditStyle.js +9 -20
  117. package/src/sap/fe/macros/internal/field/EditStyle.tsx +17 -41
  118. package/src/sap/fe/macros/internal/field/FieldBlockStructure.js +2 -2
  119. package/src/sap/fe/macros/internal/field/FieldBlockStructure.tsx +1 -1
  120. package/src/sap/fe/macros/internal/field/FieldStructure.js +1 -2
  121. package/src/sap/fe/macros/internal/field/FieldStructure.tsx +0 -2
  122. package/src/sap/fe/macros/internal/field/FieldStructureHelper.js +7 -7
  123. package/src/sap/fe/macros/internal/field/FieldStructureHelper.ts +17 -11
  124. package/src/sap/fe/macros/internal/helpers/DataPointTemplating.js +6 -2
  125. package/src/sap/fe/macros/internal/helpers/DataPointTemplating.ts +5 -1
  126. package/src/sap/fe/macros/internal/valuehelp/AdditionalValueFormatter.js +9 -6
  127. package/src/sap/fe/macros/internal/valuehelp/AdditionalValueFormatter.ts +7 -5
  128. package/src/sap/fe/macros/internal/valuehelp/TableDelegate.js +4 -4
  129. package/src/sap/fe/macros/internal/valuehelp/TableDelegate.ts +6 -6
  130. package/src/sap/fe/macros/internal/valuehelp/ValueListDialogTable.fragment.xml +5 -2
  131. package/src/sap/fe/macros/internal/valuehelp/ValueListHelper.js +2 -2
  132. package/src/sap/fe/macros/internal/valuehelp/ValueListHelper.ts +2 -1
  133. package/src/sap/fe/macros/library.js +5 -6
  134. package/src/sap/fe/macros/{library.ts → library.tsx} +3 -1
  135. package/src/sap/fe/macros/mdc/adapter/StateHelper.js +15 -5
  136. package/src/sap/fe/macros/mdc/adapter/StateHelper.ts +21 -5
  137. package/src/sap/fe/macros/messagebundle.properties +13 -5
  138. package/src/sap/fe/macros/messagebundle_ar.properties +12 -3
  139. package/src/sap/fe/macros/messagebundle_bg.properties +13 -4
  140. package/src/sap/fe/macros/messagebundle_ca.properties +12 -3
  141. package/src/sap/fe/macros/messagebundle_cnr.properties +12 -3
  142. package/src/sap/fe/macros/messagebundle_cs.properties +11 -2
  143. package/src/sap/fe/macros/messagebundle_cy.properties +12 -3
  144. package/src/sap/fe/macros/messagebundle_da.properties +12 -3
  145. package/src/sap/fe/macros/messagebundle_de.properties +16 -7
  146. package/src/sap/fe/macros/messagebundle_el.properties +13 -4
  147. package/src/sap/fe/macros/messagebundle_en.properties +13 -4
  148. package/src/sap/fe/macros/messagebundle_en_GB.properties +13 -4
  149. package/src/sap/fe/macros/messagebundle_en_US_saprigi.properties +13 -4
  150. package/src/sap/fe/macros/messagebundle_es.properties +12 -3
  151. package/src/sap/fe/macros/messagebundle_es_MX.properties +12 -3
  152. package/src/sap/fe/macros/messagebundle_et.properties +12 -3
  153. package/src/sap/fe/macros/messagebundle_fi.properties +12 -3
  154. package/src/sap/fe/macros/messagebundle_fr.properties +12 -3
  155. package/src/sap/fe/macros/messagebundle_fr_CA.properties +12 -3
  156. package/src/sap/fe/macros/messagebundle_hi.properties +12 -3
  157. package/src/sap/fe/macros/messagebundle_hr.properties +13 -4
  158. package/src/sap/fe/macros/messagebundle_hu.properties +12 -3
  159. package/src/sap/fe/macros/messagebundle_id.properties +18 -9
  160. package/src/sap/fe/macros/messagebundle_it.properties +12 -3
  161. package/src/sap/fe/macros/messagebundle_iw.properties +12 -3
  162. package/src/sap/fe/macros/messagebundle_ja.properties +12 -3
  163. package/src/sap/fe/macros/messagebundle_kk.properties +11 -2
  164. package/src/sap/fe/macros/messagebundle_ko.properties +13 -4
  165. package/src/sap/fe/macros/messagebundle_lt.properties +12 -3
  166. package/src/sap/fe/macros/messagebundle_lv.properties +12 -3
  167. package/src/sap/fe/macros/messagebundle_mk.properties +12 -3
  168. package/src/sap/fe/macros/messagebundle_ms.properties +12 -3
  169. package/src/sap/fe/macros/messagebundle_nl.properties +12 -3
  170. package/src/sap/fe/macros/messagebundle_no.properties +12 -3
  171. package/src/sap/fe/macros/messagebundle_pl.properties +12 -3
  172. package/src/sap/fe/macros/messagebundle_pt.properties +12 -3
  173. package/src/sap/fe/macros/messagebundle_pt_PT.properties +12 -3
  174. package/src/sap/fe/macros/messagebundle_ro.properties +13 -4
  175. package/src/sap/fe/macros/messagebundle_ru.properties +12 -3
  176. package/src/sap/fe/macros/messagebundle_sh.properties +12 -3
  177. package/src/sap/fe/macros/messagebundle_sk.properties +12 -3
  178. package/src/sap/fe/macros/messagebundle_sl.properties +13 -4
  179. package/src/sap/fe/macros/messagebundle_sr.properties +12 -3
  180. package/src/sap/fe/macros/messagebundle_sv.properties +12 -3
  181. package/src/sap/fe/macros/messagebundle_th.properties +11 -2
  182. package/src/sap/fe/macros/messagebundle_tr.properties +12 -3
  183. package/src/sap/fe/macros/messagebundle_uk.properties +12 -3
  184. package/src/sap/fe/macros/messagebundle_vi.properties +13 -4
  185. package/src/sap/fe/macros/messagebundle_zh_CN.properties +12 -3
  186. package/src/sap/fe/macros/messagebundle_zh_TW.properties +12 -3
  187. package/src/sap/fe/macros/messages/MessageButton.js +21 -12
  188. package/src/sap/fe/macros/messages/MessageButton.ts +21 -11
  189. package/src/sap/fe/macros/multivaluefield/MultiValueFieldDelegate.js +7 -3
  190. package/src/sap/fe/macros/multivaluefield/MultiValueFieldDelegate.ts +8 -2
  191. package/src/sap/fe/macros/quickView/QuickView.js +5 -4
  192. package/src/sap/fe/macros/quickView/QuickView.tsx +10 -3
  193. package/src/sap/fe/macros/richtexteditor/ButtonGroup.js +2 -2
  194. package/src/sap/fe/macros/richtexteditor/ButtonGroup.ts +2 -2
  195. package/src/sap/fe/macros/table/Action.js +21 -5
  196. package/src/sap/fe/macros/table/Action.ts +14 -4
  197. package/src/sap/fe/macros/table/ActionGroup.js +15 -2
  198. package/src/sap/fe/macros/table/ActionGroup.ts +8 -0
  199. package/src/sap/fe/macros/table/ActionGroupOverride.js +14 -2
  200. package/src/sap/fe/macros/table/ActionGroupOverride.ts +7 -0
  201. package/src/sap/fe/macros/table/ActionOverride.js +14 -2
  202. package/src/sap/fe/macros/table/ActionOverride.ts +7 -0
  203. package/src/sap/fe/macros/table/ActionsTemplating.js +16 -2
  204. package/src/sap/fe/macros/table/ActionsTemplating.tsx +15 -0
  205. package/src/sap/fe/macros/table/Column.js +3 -2
  206. package/src/sap/fe/macros/table/Column.ts +1 -1
  207. package/src/sap/fe/macros/table/MdcTableTemplate.js +96 -18
  208. package/src/sap/fe/macros/table/MdcTableTemplate.tsx +136 -17
  209. package/src/sap/fe/macros/table/OverflowGroups.js +59 -0
  210. package/src/sap/fe/macros/table/OverflowGroups.ts +27 -0
  211. package/src/sap/fe/macros/table/Table.block.js +74 -30
  212. package/src/sap/fe/macros/table/Table.block.tsx +77 -14
  213. package/src/sap/fe/macros/table/TableAPI.js +175 -132
  214. package/src/sap/fe/macros/table/TableAPI.ts +67 -30
  215. package/src/sap/fe/macros/table/TableDefinition.js +20 -3
  216. package/src/sap/fe/macros/table/TableDefinition.ts +18 -2
  217. package/src/sap/fe/macros/table/TableEventHandlerProvider.js +6 -3
  218. package/src/sap/fe/macros/table/TableEventHandlerProvider.ts +12 -9
  219. package/src/sap/fe/macros/table/TableHelper.js +5 -2
  220. package/src/sap/fe/macros/table/TableHelper.ts +5 -2
  221. package/src/sap/fe/macros/table/TableRuntime.js +25 -13
  222. package/src/sap/fe/macros/table/TableRuntime.ts +31 -17
  223. package/src/sap/fe/macros/table/TableSizeHelper.js +4 -4
  224. package/src/sap/fe/macros/table/TableSizeHelper.ts +6 -11
  225. package/src/sap/fe/macros/table/Utils.js +9 -3
  226. package/src/sap/fe/macros/table/Utils.ts +14 -8
  227. package/src/sap/fe/macros/table/delegates/TableDelegate.js +72 -29
  228. package/src/sap/fe/macros/table/delegates/TableDelegate.ts +114 -123
  229. package/src/sap/fe/macros/table/massEdit/MassEditDialog.js +41 -15
  230. package/src/sap/fe/macros/table/massEdit/MassEditDialog.tsx +41 -22
  231. package/src/sap/fe/macros/table/massEdit/MassEditDialogHelper.js +15 -6
  232. package/src/sap/fe/macros/table/massEdit/MassEditDialogHelper.tsx +14 -5
  233. package/src/sap/fe/macros/table/massEdit/MassEditField.js +1 -1
  234. package/src/sap/fe/macros/table/massEdit/MassEditField.tsx +3 -6
  235. package/src/sap/fe/macros/table/mixin/ContextMenuHandler.js +2 -3
  236. package/src/sap/fe/macros/table/mixin/ContextMenuHandler.ts +3 -2
  237. package/src/sap/fe/macros/table/mixin/EmptyRowsHandler.js +42 -14
  238. package/src/sap/fe/macros/table/mixin/EmptyRowsHandler.ts +49 -19
  239. package/src/sap/fe/macros/table/mixin/TableAPIStateHandler.js +7 -9
  240. package/src/sap/fe/macros/table/mixin/TableAPIStateHandler.ts +7 -8
  241. package/src/sap/fe/macros/table/mixin/TableExport.js +1 -1
  242. package/src/sap/fe/macros/table/mixin/TableExport.ts +3 -3
  243. package/src/sap/fe/macros/table/mixin/TableHierarchy.js +3 -4
  244. package/src/sap/fe/macros/table/mixin/TableHierarchy.ts +2 -3
  245. package/src/sap/fe/macros/table/uploadTable/UploadTableRuntime.js +5 -4
  246. package/src/sap/fe/macros/table/uploadTable/UploadTableRuntime.ts +6 -3
  247. package/src/sap/fe/macros/valuehelp/ValueHelpDelegate.js +17 -10
  248. package/src/sap/fe/macros/valuehelp/ValueHelpDelegate.ts +24 -9
  249. package/src/sap/fe/macros/visualfilters/InteractiveChartHelper.js +4 -4
  250. package/src/sap/fe/macros/visualfilters/InteractiveChartHelper.ts +3 -3
  251. package/src/sap/fe/macros/visualfilters/VisualFilter.js +20 -2
  252. package/src/sap/fe/macros/visualfilters/VisualFilter.tsx +28 -6
  253. package/src/sap/fe/macros/visualfilters/VisualFilterRuntime.js +6 -3
  254. package/src/sap/fe/macros/visualfilters/VisualFilterRuntime.ts +4 -3
  255. package/src/sap/fe/macros/visualfilters/fragments/InteractiveCharts.js +3 -3
  256. package/src/sap/fe/macros/visualfilters/fragments/InteractiveCharts.tsx +10 -4
  257. package/src/sap/fe/macros/visualfilters/fragments/InteractiveDonutChart.fragment.xml +1 -1
@@ -1,4 +1,5 @@
1
1
  import Log from "sap/base/Log";
2
+ import type { StartupParameters } from "sap/fe/core/AppComponent";
2
3
  import CommonUtils from "sap/fe/core/CommonUtils";
3
4
  import type { NavigationParameter } from "sap/fe/core/controllerextensions/ViewState";
4
5
  import IViewStateContributorMixin from "sap/fe/core/controllerextensions/viewState/IViewStateContributorMixin";
@@ -111,18 +112,18 @@ export default class TableAPIStateHandler extends IViewStateContributorMixin<Tab
111
112
  * @returns A promise that resolves when the variant has been applied.
112
113
  */
113
114
  async handleVariantIdPassedViaURLParams(this: TableAPI & TableAPIStateHandler): Promise<unknown> {
114
- const urlParams = this.getStartupParameters() as unknown as Record<string, string[]>;
115
+ const urlParams = await this.getStartupParameters();
115
116
  const tableVariantId = urlParams["sap-ui-fe-table-variant-id"]?.[0];
116
117
  const view = CommonUtils.getTargetView(this);
117
118
  const viewData = view.getViewData();
118
119
  const vmType = viewData.variantManagement;
119
120
  const vm = this.content.getVariant();
120
- if (vm && tableVariantId && vmType === "Control") {
121
+ if (vm && tableVariantId && typeof tableVariantId === "string" && vmType === "Control") {
121
122
  const variantToApply = vm.getVariants().find((variant) => variant.getKey() === tableVariantId);
122
123
  const ControlVariantApplyAPI = (await import("sap/ui/fl/apply/api/ControlVariantApplyAPI")).default;
123
124
  return ControlVariantApplyAPI.activateVariant({
124
125
  element: vm,
125
- variantReference: variantToApply.getKey()
126
+ variantReference: variantToApply?.getKey()
126
127
  });
127
128
  }
128
129
  }
@@ -130,14 +131,12 @@ export default class TableAPIStateHandler extends IViewStateContributorMixin<Tab
130
131
  /**
131
132
  * Retrieves the startup parameters from the application component data.
132
133
  * These parameters contain URL query parameters that were passed when the application was started.
133
- * @returns The startup parameters as a key-value mapping where each key can have multiple values,
134
- * or undefined if no parameters are available or if the component chain is not accessible.
134
+ * @returns The startup parameters.
135
135
  */
136
- getStartupParameters(this: TableAPI): Record<string, string> | undefined {
136
+ async getStartupParameters(this: TableAPI): Promise<StartupParameters> {
137
137
  const controller = this.getPageController();
138
138
  const appComponent = controller.getAppComponent();
139
- const componentData = appComponent.getComponentData();
140
- return componentData.startupParameters as unknown as Record<string, string>;
139
+ return appComponent.getStartupParameters();
141
140
  }
142
141
 
143
142
  /**
@@ -259,4 +259,4 @@ sap.ui.define(["sap/base/Log", "sap/fe/core/helpers/ResourceModelHelper", "sap/u
259
259
  _exports = TableExport;
260
260
  return _exports;
261
261
  }, false);
262
- //# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJuYW1lcyI6WyJUYWJsZUV4cG9ydCIsIl9leHBvcnRzIiwiX3Byb3RvIiwicHJvdG90eXBlIiwic2V0dXBNaXhpbiIsIl9iYXNlQ2xhc3MiLCJzZXRUYWJsZUJpbmRpbmdJbmZvIiwiYmluZGluZ0luZm8iLCJ0YWJsZUJpbmRpbmdJbmZvIiwic2V0RG93bmxvYWRVcmwiLCJkb3dubG9hZFVybCIsInVuZGVmaW5lZCIsImdldFRhYmxlRGVmaW5pdGlvbiIsImVuYWJsZUFuYWx5dGljcyIsInRhYmxlIiwiZ2V0Q29udGVudCIsInByb3BlcnR5SGVscGVyIiwiZ2V0UHJvcGVydHlIZWxwZXIiLCJjb2x1bW5zRXhwb3J0U2V0dGluZ3MiLCJtZGNDb2x1bW4iLCJnZXRDb2x1bW5zIiwiY29uY2F0IiwiZ2V0Q29sdW1uRXhwb3J0U2V0dGluZ3MiLCJiaW5kaW5nUGFyYW1ldGVycyIsImNvbGxlY3Rpb25LZXlzIiwiZ2V0RGF0YU1vZGVsT2JqZWN0Rm9yTWV0YVBhdGgiLCJtZXRhUGF0aCIsImNvbnRleHRQYXRoIiwidGFyZ2V0RW50aXR5VHlwZSIsImtleXMiLCJtYXAiLCJrZXkiLCJuYW1lIiwic2VsZWN0UHJvcGVydGllcyIsImNvbHVtbiIsIkFycmF5IiwiaXNBcnJheSIsInByb3BlcnR5Iiwiam9pbiIsImZvckVhY2giLCJpbmNsdWRlcyIsInB1c2giLCJyZXF1ZXN0QXRMZWFzdFByb3BlcnRpZXMiLCJPYmplY3QiLCJyZXF1ZXN0QXRMZWFzdCIsInByb3AiLCJwYXJhbWV0ZXJzIiwiJHNlYXJjaCIsIiQkYWdncmVnYXRpb24iLCJ0YWJsZUJpbmRpbmciLCJnZXRSb3dCaW5kaW5nIiwiZG93bmxvYWRMaXN0QmluZGluZyIsImdldE1vZGVsIiwiYmluZExpc3QiLCJnZXRQYXRoIiwiZ2V0Q29udGV4dCIsInNvcnRlciIsImZpbHRlcnMiLCJyZXF1ZXN0RG93bmxvYWRVcmwiLCJkZXN0cm95IiwiZXJyb3IiLCJMb2ciLCJkZWJ1ZyIsIl9vbkJlZm9yZUV4cG9ydCIsImV4cG9ydEV2ZW50IiwiaXNTcGxpdE1vZGUiLCJnZXRQYXJhbWV0ZXIiLCJzcGxpdENlbGxzIiwiZ2V0U291cmNlIiwiZXhwb3J0U2V0dGluZ3MiLCJ0YWJsZURlZmluaXRpb24iLCJ1cGRhdGVFeHBvcnRTZXR0aW5ncyIsImNvbHVtbnMiLCJzZXRTdGF0aWNTaXplTGltaXQiLCJleHBvcnRDb2x1bW5zIiwid29ya2Jvb2siLCJpbmRleCIsImxlbmd0aCIsImV4cG9ydENvbHVtbiIsInJlc291cmNlQnVuZGxlIiwiTGlicmFyeSIsImdldFJlc291cmNlQnVuZGxlRm9yIiwibGFiZWwiLCJnZXRMb2NhbGl6ZWRUZXh0IiwidHJhbnNsYXRlQm9vbGVhblZhbHVlRm9yRXhwb3J0Iiwic2V0RXhwb3J0Q29uZmlnIiwiYWRkVGFyZ2V0VmFsdWVDb2x1bW4iLCJ2YWx1ZU1hcCIsIkpTT04iLCJwYXJzZSIsInRhYmxlQVBJRG93bmxvYWRVcmwiLCJnZXRQYXJlbnQiLCJkYXRhU291cmNlIiwiZGF0YVVybCIsInNldEZpbGVBbmRTaGVldE5hbWUiLCJjb250cm9sIiwiZXhwb3J0RmlsZU5hbWUiLCJmaWxlTmFtZSIsImV4cG9ydFNoZWV0TmFtZSIsImNvbnRleHQiLCJzaGVldE5hbWUiLCJ0eXBlIiwic2l6ZUxpbWl0IiwiZXhwb3J0UmVxdWVzdFNpemUiLCJ0cnVlVmFsdWUiLCJmYWxzZVZhbHVlIiwiZ2V0VGV4dCIsInJlZmVyZW5jZWRDb2x1bW4iLCJmaW5kIiwicHJvcGVydHlJbmZvcyIsInJlbGF0aXZlUGF0aCIsInRvU3RyaW5nIiwiZXhwb3J0Q29uZmlnTGlzdCIsInRhcmdldFZhbHVlQ29sdW1uIiwiaXNQcm9wZXJ0eUZyb21FeHBvcnQiLCJjb2x1bW5XaXRoVGFyZ2V0VmFsdWVUb0JlQWRkZWQiLCJjb2x1bW5Ub0JlQWRkZWQiLCJ0ZW1wbGF0ZSIsImV4cG9ydERhdGFQb2ludFRhcmdldFZhbHVlIiwic3BsaWNlIiwiY29sdW1uRXhwb3J0IiwiY29sdW1uTmVlZHNUb0JlQWRkZWQiXSwic291cmNlUm9vdCI6Ii4iLCJzb3VyY2VzIjpbIlRhYmxlRXhwb3J0LnRzIl0sInNvdXJjZXNDb250ZW50IjpbImltcG9ydCBMb2cgZnJvbSBcInNhcC9iYXNlL0xvZ1wiO1xuaW1wb3J0IHR5cGUgUmVzb3VyY2VCdW5kbGUgZnJvbSBcInNhcC9iYXNlL2kxOG4vUmVzb3VyY2VCdW5kbGVcIjtcbmltcG9ydCB7IHR5cGUgSUludGVyZmFjZVdpdGhNaXhpbiB9IGZyb20gXCJzYXAvZmUvYmFzZS9DbGFzc1N1cHBvcnRcIjtcbmltcG9ydCB7IHR5cGUgVGFibGVWaXN1YWxpemF0aW9uIH0gZnJvbSBcInNhcC9mZS9jb3JlL2NvbnZlcnRlcnMvY29udHJvbHMvQ29tbW9uL1RhYmxlXCI7XG5pbXBvcnQge1xuXHR0eXBlIEFubm90YXRpb25UYWJsZUNvbHVtbixcblx0dHlwZSBDb2x1bW5FeHBvcnRTZXR0aW5ncyxcblx0dHlwZSBUYWJsZUNvbHVtblxufSBmcm9tIFwic2FwL2ZlL2NvcmUvY29udmVydGVycy9jb250cm9scy9Db21tb24vdGFibGUvQ29sdW1uc1wiO1xuaW1wb3J0IHsgZ2V0TG9jYWxpemVkVGV4dCB9IGZyb20gXCJzYXAvZmUvY29yZS9oZWxwZXJzL1Jlc291cmNlTW9kZWxIZWxwZXJcIjtcbmltcG9ydCB7IHR5cGUgQ29sbGVjdGlvbkJpbmRpbmdJbmZvIH0gZnJvbSBcInNhcC9mZS9tYWNyb3MvQ29sbGVjdGlvbkJpbmRpbmdJbmZvXCI7XG5pbXBvcnQgTGlicmFyeSBmcm9tIFwic2FwL3VpL2NvcmUvTGliXCI7XG5pbXBvcnQgdHlwZSB7IFRleHRBbGlnbiB9IGZyb20gXCJzYXAvdWkvY29yZS9saWJyYXJ5XCI7XG5pbXBvcnQgdHlwZSBNRENUYWJsZSBmcm9tIFwic2FwL3VpL21kYy9UYWJsZVwiO1xuaW1wb3J0IHsgdHlwZSBUYWJsZSRCZWZvcmVFeHBvcnRFdmVudCB9IGZyb20gXCJzYXAvdWkvbWRjL1RhYmxlXCI7XG5pbXBvcnQgdHlwZSBPRGF0YU1vZGVsIGZyb20gXCJzYXAvdWkvbW9kZWwvb2RhdGEvdjQvT0RhdGFNb2RlbFwiO1xuaW1wb3J0IHsgdHlwZSBJVGFibGVCbG9jayB9IGZyb20gXCIuLi9UYWJsZUFQSVwiO1xuXG50eXBlIEV4cG9ydENvbHVtbiA9IHtcblx0cHJvcGVydHk6IHN0cmluZyB8IHN0cmluZ1tdO1xuXHRsYWJlbDogc3RyaW5nO1xuXHRjb2x1bW5JZD86IHN0cmluZztcblx0d2lkdGg/OiBudW1iZXI7XG5cdHRleHRBbGlnbj86IFRleHRBbGlnbjtcblx0ZGlzcGxheVVuaXQ/OiBib29sZWFuO1xuXHR0cnVlVmFsdWU/OiBzdHJpbmc7XG5cdGZhbHNlVmFsdWU/OiBzdHJpbmc7XG5cdHZhbHVlTWFwPzogc3RyaW5nO1xuXHR0ZW1wbGF0ZT86IHN0cmluZztcblx0dHlwZT86IHN0cmluZztcblx0ZGVsaW1pdGVyPzogYm9vbGVhbjtcblx0d3JhcD86IGJvb2xlYW47XG5cdHVuaXQ/OiBzdHJpbmc7XG5cdHNjYWxlPzogbnVtYmVyO1xufTtcblxudHlwZSBVc2VyRXhwb3J0U2V0dGluZ3MgPSB7XG5cdHNwbGl0Q2VsbHM/OiBib29sZWFuO1xufTtcblxuLy8gVGhlIHR5cGUgRXhwb3J0U2V0dGluZ3MgaXMgbm90IGV4cG9ydGVkIGZyb20gXCJzYXAvdWkvZXhwb3J0L2xpYnJhcnlcIiBzbyB3ZSBuZWVkIHRvIHJlZGVmaW5lIHRoZW0gaGVyZVxuZXhwb3J0IHR5cGUgRXhwb3J0U2V0dGluZ3MgPSB7XG5cdGZpbGVOYW1lPzogc3RyaW5nO1xuXHRkYXRhU291cmNlOiB7XG5cdFx0ZGF0YVVybDogc3RyaW5nO1xuXHRcdHNpemVMaW1pdD86IG51bWJlcjtcblx0fTtcblx0d29ya2Jvb2s6IHtcblx0XHRjb2x1bW5zOiBFeHBvcnRDb2x1bW5bXTtcblx0XHRjb250ZXh0PzogeyBzaGVldE5hbWU/OiBzdHJpbmcgfTtcblx0fTtcbn07XG5cbmV4cG9ydCBkZWZhdWx0IGNsYXNzIFRhYmxlRXhwb3J0IGltcGxlbWVudHMgSUludGVyZmFjZVdpdGhNaXhpbiB7XG5cdGRvd25sb2FkVXJsPzogc3RyaW5nO1xuXG5cdHRhYmxlQmluZGluZ0luZm8/OiBDb2xsZWN0aW9uQmluZGluZ0luZm87XG5cblx0c2V0dXBNaXhpbihfYmFzZUNsYXNzOiBGdW5jdGlvbik6IHZvaWQge1xuXHRcdC8vIFRoaXMgbWV0aG9kIGlzIG5lZWRlZCB0byBpbXBsZW1lbnQgaW50ZXJmYWNlIElJbnRlcmZhY2VXaXRoTWl4aW5cblx0fVxuXG5cdC8qKlxuXHQgKiBTdG9yZXMgdGhlIGJpbmRpbmcgaW5mbyBmb3IgdGhlIHRhYmxlIHVzZWQgdG8gY3JlYXRlIHRoZSBsaXN0IGJpbmRpbmcuXG5cdCAqIEBwYXJhbSBiaW5kaW5nSW5mb1xuXHQgKi9cblx0c2V0VGFibGVCaW5kaW5nSW5mbyhiaW5kaW5nSW5mbzogQ29sbGVjdGlvbkJpbmRpbmdJbmZvKTogdm9pZCB7XG5cdFx0dGhpcy50YWJsZUJpbmRpbmdJbmZvID0gYmluZGluZ0luZm87XG5cdH1cblxuXHQvKipcblx0ICogQ29tcHV0ZSB0aGUgZG93bmxvYWQgVVJMIHRvIGJlIHVzZWQgYnkgdGhlIGV4cG9ydCBhbmQgc3RvcmUgaXQgaW4gdGhlIFRhYmxlQVBJLlxuXHQgKiBAcGFyYW0gdGhpc1xuXHQgKiBAcmV0dXJucyBQcm9taXNlIHdoZW4gZG93bmxvYWRVcmwgaXMgc2V0XG5cdCAqL1xuXHRhc3luYyBzZXREb3dubG9hZFVybCh0aGlzOiBJVGFibGVCbG9jayAmIFRhYmxlRXhwb3J0KTogUHJvbWlzZTx2b2lkPiB7XG5cdFx0Ly9lbXB0eSB0aGUgZG93bmxvYWRVcmwgdG8gcHJldmVudCBhbiBpbnZhbGlkIG9uZSB0byBiZSB1c2VkXG5cdFx0dGhpcy5kb3dubG9hZFVybCA9IHVuZGVmaW5lZDtcblxuXHRcdGlmICh0aGlzLmdldFRhYmxlRGVmaW5pdGlvbigpLmVuYWJsZUFuYWx5dGljcyA9PT0gdHJ1ZSkge1xuXHRcdFx0Ly8gSW4gY2FzZSBvZiBhbiBhbmFseXRpY2FsIHRhYmxlLCAkc2VsZWN0IGlzIG5vdCBzdXBwb3J0ZWQsIHNvIHdlIGRvbid0IGNhbGN1bGF0ZSB0aGUgZG93bmxvYWQgVVJMICh3ZSB1c2UgdGhlIGRlZmF1bHQgYmVoYXZpb3VyKVxuXHRcdFx0cmV0dXJuO1xuXHRcdH1cblxuXHRcdGxldCBkb3dubG9hZFVybDogc3RyaW5nIHwgdW5kZWZpbmVkIHwgbnVsbDtcblx0XHRjb25zdCB0YWJsZSA9IHRoaXMuZ2V0Q29udGVudCgpO1xuXHRcdHRyeSB7XG5cdFx0XHRjb25zdCBwcm9wZXJ0eUhlbHBlciA9IHRhYmxlLmdldFByb3BlcnR5SGVscGVyKCk7XG5cdFx0XHRsZXQgY29sdW1uc0V4cG9ydFNldHRpbmdzOiBFeHBvcnRDb2x1bW5bXSA9IFtdO1xuXHRcdFx0Zm9yIChjb25zdCBtZGNDb2x1bW4gb2YgdGFibGUuZ2V0Q29sdW1ucygpKSB7XG5cdFx0XHRcdGNvbHVtbnNFeHBvcnRTZXR0aW5ncyA9IGNvbHVtbnNFeHBvcnRTZXR0aW5ncy5jb25jYXQocHJvcGVydHlIZWxwZXIuZ2V0Q29sdW1uRXhwb3J0U2V0dGluZ3MobWRjQ29sdW1uKSk7XG5cdFx0XHR9XG5cblx0XHRcdGNvbnN0IGJpbmRpbmdQYXJhbWV0ZXJzOiB7ICRzZWxlY3Q/OiBzdHJpbmc7ICRzZWFyY2g/OiBzdHJpbmc7ICQkYWdncmVnYXRpb24/OiBvYmplY3QgfSA9IHt9O1xuXHRcdFx0Ly8gd2UganVzdCB3YW50IHRvIHJlcXVlc3QgdGhlIHByb3BlcnRpZXMgbmVjZXNzYXJ5IGZvciB0aGUgZXhwb3J0XG5cdFx0XHRjb25zdCBjb2xsZWN0aW9uS2V5cyA9IHRoaXMuZ2V0RGF0YU1vZGVsT2JqZWN0Rm9yTWV0YVBhdGgodGhpcy5tZXRhUGF0aCwgdGhpcy5jb250ZXh0UGF0aCk/LnRhcmdldEVudGl0eVR5cGUua2V5cy5tYXAoXG5cdFx0XHRcdChrZXkpID0+IGtleS5uYW1lXG5cdFx0XHQpO1xuXHRcdFx0Y29uc3Qgc2VsZWN0UHJvcGVydGllcyA9IGNvbHVtbnNFeHBvcnRTZXR0aW5ncy5tYXAoKGNvbHVtbjogRXhwb3J0Q29sdW1uKSA9PiB7XG5cdFx0XHRcdHJldHVybiBBcnJheS5pc0FycmF5KGNvbHVtbi5wcm9wZXJ0eSkgPyBjb2x1bW4ucHJvcGVydHkuam9pbihcIixcIikgOiBjb2x1bW4ucHJvcGVydHk7XG5cdFx0XHR9KTtcblx0XHRcdGNvbGxlY3Rpb25LZXlzPy5mb3JFYWNoKChrZXkpID0+IHtcblx0XHRcdFx0aWYgKCFzZWxlY3RQcm9wZXJ0aWVzLmluY2x1ZGVzKGtleSkpIHtcblx0XHRcdFx0XHRzZWxlY3RQcm9wZXJ0aWVzLnB1c2goa2V5KTtcblx0XHRcdFx0fVxuXHRcdFx0fSk7XG5cdFx0XHRjb25zdCByZXF1ZXN0QXRMZWFzdFByb3BlcnRpZXMgPSBPYmplY3Qua2V5cyh0aGlzLmdldFRhYmxlRGVmaW5pdGlvbigpLnJlcXVlc3RBdExlYXN0KTtcblx0XHRcdHJlcXVlc3RBdExlYXN0UHJvcGVydGllcz8uZm9yRWFjaCgocHJvcCkgPT4ge1xuXHRcdFx0XHRpZiAoIXNlbGVjdFByb3BlcnRpZXMuaW5jbHVkZXMocHJvcCkpIHtcblx0XHRcdFx0XHRzZWxlY3RQcm9wZXJ0aWVzLnB1c2gocHJvcCk7XG5cdFx0XHRcdH1cblx0XHRcdH0pO1xuXHRcdFx0YmluZGluZ1BhcmFtZXRlcnNbXCIkc2VsZWN0XCJdID0gc2VsZWN0UHJvcGVydGllcy5qb2luKFwiLFwiKTtcblxuXHRcdFx0aWYgKHRoaXMudGFibGVCaW5kaW5nSW5mbz8ucGFyYW1ldGVycz8uJHNlYXJjaCkge1xuXHRcdFx0XHRiaW5kaW5nUGFyYW1ldGVycy4kc2VhcmNoID0gdGhpcy50YWJsZUJpbmRpbmdJbmZvLnBhcmFtZXRlcnMuJHNlYXJjaDtcblx0XHRcdH1cblxuXHRcdFx0aWYgKHRoaXMudGFibGVCaW5kaW5nSW5mbz8ucGFyYW1ldGVycz8uJCRhZ2dyZWdhdGlvbikge1xuXHRcdFx0XHRiaW5kaW5nUGFyYW1ldGVycy4kJGFnZ3JlZ2F0aW9uID0gdGhpcy50YWJsZUJpbmRpbmdJbmZvLnBhcmFtZXRlcnMuJCRhZ2dyZWdhdGlvbjtcblx0XHRcdH1cblxuXHRcdFx0Y29uc3QgdGFibGVCaW5kaW5nID0gdGFibGUuZ2V0Um93QmluZGluZygpO1xuXHRcdFx0Ly8gd2UgY3JlYXRlIGEgbGlzdCBiaW5kaW5nIHRvIGNvbXB1dGUgdGhlIHJpZ2h0IHVybCBmb3IgdGhlIGV4cG9ydCBmcm9tIGl0cyBiaW5kaW5nIHBhcmFtZXRlcnNcblx0XHRcdGNvbnN0IGRvd25sb2FkTGlzdEJpbmRpbmcgPSAodGFibGVCaW5kaW5nLmdldE1vZGVsKCkgYXMgT0RhdGFNb2RlbCkuYmluZExpc3QoXG5cdFx0XHRcdHRhYmxlQmluZGluZy5nZXRQYXRoKCksXG5cdFx0XHRcdHRhYmxlQmluZGluZy5nZXRDb250ZXh0KCksXG5cdFx0XHRcdHRoaXMudGFibGVCaW5kaW5nSW5mbz8uc29ydGVyLFxuXHRcdFx0XHR0aGlzLnRhYmxlQmluZGluZ0luZm8/LmZpbHRlcnMsXG5cdFx0XHRcdGJpbmRpbmdQYXJhbWV0ZXJzXG5cdFx0XHQpO1xuXHRcdFx0ZG93bmxvYWRVcmwgPSBhd2FpdCBkb3dubG9hZExpc3RCaW5kaW5nLnJlcXVlc3REb3dubG9hZFVybCgpO1xuXHRcdFx0ZG93bmxvYWRMaXN0QmluZGluZy5kZXN0cm95KCk7XG5cdFx0fSBjYXRjaCAoZXJyb3I6IHVua25vd24pIHtcblx0XHRcdExvZy5kZWJ1ZyhcIkVycm9yIHdoaWxlIGNvbXB1dGluZyB0aGUgZG93bmxvYWQgVVJMIGZvciB0aGUgZXhwb3J0XCIsIGVycm9yIGFzIEVycm9yKTtcblx0XHR9XG5cdFx0aWYgKGRvd25sb2FkVXJsKSB7XG5cdFx0XHR0aGlzLmRvd25sb2FkVXJsID0gZG93bmxvYWRVcmw7XG5cdFx0fVxuXHR9XG5cblx0LyoqXG5cdCAqIEludGVyY2VwdCB0aGUgZXhwb3J0IGJlZm9yZSBpdCdzIHRyaWdnZXJlZCB0byBjb3ZlciBzcGVjaWZpYyBjYXNlcyB0aGF0IGNvdWxkbid0IGJlIGFkZHJlc3NlZCBvbiB0aGUgcHJvcGVydHlJbmZvcyBmb3IgZWFjaCBjb2x1bW4uXG5cdCAqIGUuZy4gRml4ZWQgVGFyZ2V0IFZhbHVlIGZvciB0aGUgZGF0YXBvaW50cy5cblx0ICogQHBhcmFtIHRoaXNcblx0ICogQHBhcmFtIGV4cG9ydEV2ZW50XG5cdCAqL1xuXHRfb25CZWZvcmVFeHBvcnQodGhpczogSVRhYmxlQmxvY2sgJiBUYWJsZUV4cG9ydCwgZXhwb3J0RXZlbnQ6IFRhYmxlJEJlZm9yZUV4cG9ydEV2ZW50KTogdm9pZCB7XG5cdFx0Y29uc3QgaXNTcGxpdE1vZGUgPSAoZXhwb3J0RXZlbnQuZ2V0UGFyYW1ldGVyKFwidXNlckV4cG9ydFNldHRpbmdzXCIpIGFzIFVzZXJFeHBvcnRTZXR0aW5ncyk/LnNwbGl0Q2VsbHMgPT09IHRydWU7XG5cdFx0Y29uc3QgdGFibGUgPSBleHBvcnRFdmVudC5nZXRTb3VyY2UoKSxcblx0XHRcdGV4cG9ydFNldHRpbmdzID0gZXhwb3J0RXZlbnQuZ2V0UGFyYW1ldGVyKFwiZXhwb3J0U2V0dGluZ3NcIikgYXMgRXhwb3J0U2V0dGluZ3MsXG5cdFx0XHR0YWJsZURlZmluaXRpb24gPSB0aGlzLmdldFRhYmxlRGVmaW5pdGlvbigpO1xuXG5cdFx0VGFibGVFeHBvcnQudXBkYXRlRXhwb3J0U2V0dGluZ3MoZXhwb3J0U2V0dGluZ3MsIHRhYmxlRGVmaW5pdGlvbiwgdGFibGUsIGlzU3BsaXRNb2RlKTtcblx0fVxuXG5cdC8qKlxuXHQgKiBVcGRhdGVzIHRoZSB0YWJsZSBjb2x1bW5zIHRoYXQgY2FuIGJlIGV4cG9ydGVkLlxuXHQgKiBAcGFyYW0gZXhwb3J0U2V0dGluZ3MgVGhlIHRhYmxlIGV4cG9ydCBzZXR0aW5nc1xuXHQgKiBAcGFyYW0gdGFibGVEZWZpbml0aW9uIFRoZSB0YWJsZSBkZWZpbml0aW9uIGZyb20gdGhlIHRhYmxlIGNvbnZlcnRlclxuXHQgKiBAcGFyYW0gdGFibGUgVGhlIHRhYmxlXG5cdCAqIEBwYXJhbSBpc1NwbGl0TW9kZSBEZWZpbmVzIGlmIHRoZSBleHBvcnQgaGFzIGJlZW4gbGF1bmNoZWQgdXNpbmcgc3BsaXQgbW9kZVxuXHQgKiBAcmV0dXJucyBUaGUgdXBkYXRlZCBjb2x1bW5zIHRvIGJlIGV4cG9ydGVkXG5cdCAqL1xuXHRzdGF0aWMgdXBkYXRlRXhwb3J0U2V0dGluZ3MoXG5cdFx0ZXhwb3J0U2V0dGluZ3M6IEV4cG9ydFNldHRpbmdzLFxuXHRcdHRhYmxlRGVmaW5pdGlvbjogVGFibGVWaXN1YWxpemF0aW9uLFxuXHRcdHRhYmxlOiBNRENUYWJsZSxcblx0XHRpc1NwbGl0TW9kZTogYm9vbGVhblxuXHQpOiBFeHBvcnRTZXR0aW5ncyB7XG5cdFx0Y29uc3QgY29sdW1ucyA9IHRhYmxlRGVmaW5pdGlvbi5jb2x1bW5zO1xuXHRcdHRoaXMuc2V0U3RhdGljU2l6ZUxpbWl0KHRhYmxlRGVmaW5pdGlvbiwgZXhwb3J0U2V0dGluZ3MpO1xuXHRcdGNvbnN0IGV4cG9ydENvbHVtbnMgPSBleHBvcnRTZXR0aW5ncy53b3JrYm9vay5jb2x1bW5zO1xuXHRcdGZvciAobGV0IGluZGV4ID0gZXhwb3J0Q29sdW1ucy5sZW5ndGggLSAxOyBpbmRleCA+PSAwOyBpbmRleC0tKSB7XG5cdFx0XHRjb25zdCBleHBvcnRDb2x1bW4gPSBleHBvcnRDb2x1bW5zW2luZGV4XTtcblx0XHRcdGNvbnN0IHJlc291cmNlQnVuZGxlID0gTGlicmFyeS5nZXRSZXNvdXJjZUJ1bmRsZUZvcihcInNhcC5mZS5tYWNyb3NcIikhO1xuXHRcdFx0ZXhwb3J0Q29sdW1uLmxhYmVsID0gZ2V0TG9jYWxpemVkVGV4dChleHBvcnRDb2x1bW4ubGFiZWwsIHRhYmxlKTtcblx0XHRcdHRoaXMudHJhbnNsYXRlQm9vbGVhblZhbHVlRm9yRXhwb3J0KGV4cG9ydENvbHVtbiwgcmVzb3VyY2VCdW5kbGUpO1xuXHRcdFx0aWYgKGlzU3BsaXRNb2RlKSB7XG5cdFx0XHRcdHRoaXMuc2V0RXhwb3J0Q29uZmlnKGNvbHVtbnMsIGV4cG9ydENvbHVtbnMsIGluZGV4KTtcblx0XHRcdFx0dGhpcy5hZGRUYXJnZXRWYWx1ZUNvbHVtbihjb2x1bW5zLCBleHBvcnRDb2x1bW5zLCByZXNvdXJjZUJ1bmRsZSwgaW5kZXgpO1xuXHRcdFx0fVxuXHRcdFx0aWYgKGV4cG9ydENvbHVtbi52YWx1ZU1hcCAmJiB0eXBlb2YgZXhwb3J0Q29sdW1uLnZhbHVlTWFwID09PSBcInN0cmluZ1wiKSB7XG5cdFx0XHRcdGV4cG9ydENvbHVtbi52YWx1ZU1hcCA9IEpTT04ucGFyc2UoZXhwb3J0Q29sdW1uLnZhbHVlTWFwKTtcblx0XHRcdH1cblx0XHR9XG5cdFx0Y29uc3QgdGFibGVBUElEb3dubG9hZFVybCA9ICh0YWJsZS5nZXRQYXJlbnQoKSBhcyBJVGFibGVCbG9jayAmIFRhYmxlRXhwb3J0KS5kb3dubG9hZFVybDtcblx0XHRpZiAodGFibGVBUElEb3dubG9hZFVybCkge1xuXHRcdFx0ZXhwb3J0U2V0dGluZ3MuZGF0YVNvdXJjZS5kYXRhVXJsID0gdGFibGVBUElEb3dubG9hZFVybDtcblx0XHR9XG5cdFx0dGhpcy5zZXRGaWxlQW5kU2hlZXROYW1lKGV4cG9ydFNldHRpbmdzLCB0YWJsZURlZmluaXRpb24pO1xuXHRcdHJldHVybiBleHBvcnRTZXR0aW5ncztcblx0fVxuXG5cdC8qKlxuXHQgKiBTZXRzIHRoZSBmaWxlIG5hbWUgYW5kIHNoZWV0IG5hbWUgZm9yIHRoZSBleHBvcnQgc2V0dGluZ3MuXG5cdCAqIEBwYXJhbSBleHBvcnRTZXR0aW5ncyBUaGUgdGFibGUgZXhwb3J0IHNldHRpbmdzXG5cdCAqIEBwYXJhbSB0YWJsZURlZmluaXRpb24gVGhlIHRhYmxlIGRlZmluaXRpb24gZnJvbSB0aGUgdGFibGUgY29udmVydGVyXG5cdCAqL1xuXHRzdGF0aWMgc2V0RmlsZUFuZFNoZWV0TmFtZShleHBvcnRTZXR0aW5nczogRXhwb3J0U2V0dGluZ3MsIHRhYmxlRGVmaW5pdGlvbjogVGFibGVWaXN1YWxpemF0aW9uKTogdm9pZCB7XG5cdFx0aWYgKHRhYmxlRGVmaW5pdGlvbi5jb250cm9sLmV4cG9ydEZpbGVOYW1lKSB7XG5cdFx0XHRleHBvcnRTZXR0aW5ncy5maWxlTmFtZSA9IHRhYmxlRGVmaW5pdGlvbi5jb250cm9sLmV4cG9ydEZpbGVOYW1lO1xuXHRcdH1cblx0XHRpZiAodGFibGVEZWZpbml0aW9uLmNvbnRyb2wuZXhwb3J0U2hlZXROYW1lICYmIGV4cG9ydFNldHRpbmdzLndvcmtib29rLmNvbnRleHQpIHtcblx0XHRcdGV4cG9ydFNldHRpbmdzLndvcmtib29rLmNvbnRleHQuc2hlZXROYW1lID0gdGFibGVEZWZpbml0aW9uLmNvbnRyb2wuZXhwb3J0U2hlZXROYW1lO1xuXHRcdH1cblx0fVxuXG5cdC8qKlxuXHQgKiBTZXRzIHRoZSBzdGF0aWMgc2l6ZSBsaW1pdCBmb3IgdGhlIHRhYmxlIGV4cG9ydC5cblx0ICogQHBhcmFtIHRhYmxlRGVmaW5pdGlvbiBUaGUgdGFibGUgZGVmaW5pdGlvbiBmcm9tIHRoZSB0YWJsZSBjb252ZXJ0ZXJcblx0ICogQHBhcmFtIGV4cG9ydFNldHRpbmdzIFRoZSB0YWJsZSBleHBvcnQgc2V0dGluZ3Ncblx0ICovXG5cdHN0YXRpYyBzZXRTdGF0aWNTaXplTGltaXQodGFibGVEZWZpbml0aW9uOiBUYWJsZVZpc3VhbGl6YXRpb24sIGV4cG9ydFNldHRpbmdzOiBFeHBvcnRTZXR0aW5ncyk6IHZvaWQge1xuXHRcdGlmIChcblx0XHRcdCF0YWJsZURlZmluaXRpb24uZW5hYmxlQW5hbHl0aWNzICYmXG5cdFx0XHQodGFibGVEZWZpbml0aW9uLmNvbnRyb2wudHlwZSA9PT0gXCJSZXNwb25zaXZlVGFibGVcIiB8fCB0YWJsZURlZmluaXRpb24uY29udHJvbC50eXBlID09PSBcIkdyaWRUYWJsZVwiKVxuXHRcdCkge1xuXHRcdFx0ZXhwb3J0U2V0dGluZ3MuZGF0YVNvdXJjZS5zaXplTGltaXQgPSB0YWJsZURlZmluaXRpb24uY29udHJvbC5leHBvcnRSZXF1ZXN0U2l6ZSA/PyAxMDAwO1xuXHRcdH0gZWxzZSBpZiAodGFibGVEZWZpbml0aW9uLmNvbnRyb2wuZXhwb3J0UmVxdWVzdFNpemUpIHtcblx0XHRcdC8vIEluIGNhc2Ugb2YgYW5hbHl0aWNhbCBvciB0cmVlIHRhYmxlLCB0aGUgc2l6ZSBsaW1pdCBpcyBzZXQgdG8gdGhlIG9uZSBkZWZpbmVkIGluIHRoZSB0YWJsZSBkZWZpbml0aW9uXG5cdFx0XHRleHBvcnRTZXR0aW5ncy5kYXRhU291cmNlLnNpemVMaW1pdCA9IHRhYmxlRGVmaW5pdGlvbi5jb250cm9sLmV4cG9ydFJlcXVlc3RTaXplO1xuXHRcdH1cblx0fVxuXG5cdC8qKlxuXHQgKiBTZXRzIHRoZSB0cmFuc2xhdGVkIHRleHR1YWwgcmVwcmVzZW50YXRpb24gb2YgYSBjb2x1bW4gd2l0aCBhIEJvb2xlYW4gdmFsdWUuXG5cdCAqIEBwYXJhbSBleHBvcnRDb2x1bW4gVGhlIGNvbHVtbiB0byBiZSBleHBvcnRlZFxuXHQgKiBAcGFyYW0gcmVzb3VyY2VCdW5kbGUgVGhlIHJlc291cmNlIGJ1bmRsZVxuXHQgKi9cblx0c3RhdGljIHRyYW5zbGF0ZUJvb2xlYW5WYWx1ZUZvckV4cG9ydChleHBvcnRDb2x1bW46IEV4cG9ydENvbHVtbiwgcmVzb3VyY2VCdW5kbGU6IFJlc291cmNlQnVuZGxlKTogdm9pZCB7XG5cdFx0aWYgKGV4cG9ydENvbHVtbi50eXBlID09PSBcIkJvb2xlYW5cIiAmJiAhKGV4cG9ydENvbHVtbi50cnVlVmFsdWUgfHwgZXhwb3J0Q29sdW1uLmZhbHNlVmFsdWUpKSB7XG5cdFx0XHRleHBvcnRDb2x1bW4uZmFsc2VWYWx1ZSA9IHJlc291cmNlQnVuZGxlLmdldFRleHQoXCJub1wiKTtcblx0XHRcdGV4cG9ydENvbHVtbi50cnVlVmFsdWUgPSByZXNvdXJjZUJ1bmRsZS5nZXRUZXh0KFwieWVzXCIpO1xuXHRcdH1cblx0fVxuXG5cdC8qKlxuXHQgKiBTZXRzIHRoZSBvcmlnaW5hdGluZyBleHBvcnQgY29uZmlnIG9mIGEgc2luZ2xlIHByb3BlcnR5IHJlZmVyZW5jZWQgb24gYSBmaWVsZCBncm91cCBvciBhIGN1c3RvbSBjb2x1bW4uXG5cdCAqIEBwYXJhbSBjb2x1bW5zIFRoZSBjb2x1bW5zIGZyb20gdGhlIHRhYmxlIGNvbnZlcnRlclxuXHQgKiBAcGFyYW0gZXhwb3J0Q29sdW1ucyBUaGUgbGlzdCBvZiBjb2x1bW5zIHRvIGJlIGV4cG9ydGVkXG5cdCAqIEBwYXJhbSBpbmRleCBUaGUgaW5kZXggb2YgdGhlIGNvbHVtbiB0byBiZSBleHBvcnRlZFxuXHQgKi9cblx0c3RhdGljIHNldEV4cG9ydENvbmZpZyhjb2x1bW5zOiBUYWJsZUNvbHVtbltdLCBleHBvcnRDb2x1bW5zOiBFeHBvcnRDb2x1bW5bXSwgaW5kZXg6IG51bWJlcik6IHZvaWQge1xuXHRcdGNvbnN0IHJlZmVyZW5jZWRDb2x1bW4gPSBjb2x1bW5zLmZpbmQoXG5cdFx0XHQoY29sdW1uKSA9PiAhY29sdW1uLnByb3BlcnR5SW5mb3MgJiYgKGNvbHVtbiBhcyBBbm5vdGF0aW9uVGFibGVDb2x1bW4pLnJlbGF0aXZlUGF0aCA9PT0gZXhwb3J0Q29sdW1uc1tpbmRleF0ucHJvcGVydHkudG9TdHJpbmcoKVxuXHRcdCk7XG5cdFx0aWYgKHJlZmVyZW5jZWRDb2x1bW4/LmV4cG9ydFNldHRpbmdzKSB7XG5cdFx0XHQvLyBBbGwgZXhwb3J0IHNldHRpbmdzIG9mIGEgY29sdW1uIHRvIGJlIGV4cG9ydGVkIGNhbid0IGJlIGFkZGVkIHRvIHRoZSBleHBvcnQgc2V0dGluZ3Mgb2JqZWN0XG5cdFx0XHQvLyBiZWNhdXNlIGNvbHVtbiBjb3VsZCBoYXZlIHVuaXRzL3RpbWV6b25lcy9jdXJyZW5jaWVzIHRoYXQgYXJlbid0IHJlcXVpcmVkIG9uIGN1c3RvbSBjdXN0b21zIGJ1dCBvbmx5IG9uIGNvbHVtbnMgZnJvbSBhbm5vdGF0aW9uc1xuXHRcdFx0Y29uc3QgZXhwb3J0Q29uZmlnTGlzdDogQXJyYXk8a2V5b2YgQ29sdW1uRXhwb3J0U2V0dGluZ3M+ID0gW1wic2NhbGVcIiwgXCJkZWxpbWl0ZXJcIiwgXCJmb3JtYXRcIiwgXCJ1dGNcIiwgXCJ0eXBlXCIsIFwiaW5wdXRGb3JtYXRcIl07XG5cdFx0XHRmb3IgKGNvbnN0IGtleSBvZiBleHBvcnRDb25maWdMaXN0KSB7XG5cdFx0XHRcdGlmIChyZWZlcmVuY2VkQ29sdW1uLmV4cG9ydFNldHRpbmdzW2tleV0pIHtcblx0XHRcdFx0XHRleHBvcnRDb2x1bW5zW2luZGV4XSA9IHsgLi4uZXhwb3J0Q29sdW1uc1tpbmRleF0sIC4uLnsgW2tleV06IHJlZmVyZW5jZWRDb2x1bW4uZXhwb3J0U2V0dGluZ3Nba2V5XSB9IH07XG5cdFx0XHRcdFx0aWYgKGV4cG9ydENvbHVtbnNbaW5kZXhdLnR5cGUgPT09IFwiQ3VycmVuY3lcIikge1xuXHRcdFx0XHRcdFx0ZXhwb3J0Q29sdW1uc1tpbmRleF0udHlwZSA9IFwiTnVtYmVyXCI7XG5cdFx0XHRcdFx0fVxuXHRcdFx0XHR9XG5cdFx0XHR9XG5cdFx0fVxuXHR9XG5cblx0LyoqXG5cdCAqIEFkZHMgYSB0YXJnZXQgdmFsdWUgY29sdW1uIHdoZW4gdGhlcmUgaXMgYSBkYXRhcG9pbnQgY29sdW1uLlxuXHQgKiBAcGFyYW0gY29sdW1ucyBUaGUgY29sdW1ucyBmcm9tIHRoZSB0YWJsZSBjb252ZXJ0ZXJcblx0ICogQHBhcmFtIGV4cG9ydENvbHVtbnMgVGhlIGxpc3Qgb2YgY29sdW1ucyB0byBiZSBleHBvcnRlZFxuXHQgKiBAcGFyYW0gcmVzb3VyY2VCdW5kbGUgVGhlIHJlc291cmNlIGJ1bmRsZVxuXHQgKiBAcGFyYW0gaW5kZXggVGhlIGluZGV4IG9mIHRoZSBjb2x1bW4gdG8gYmUgZXhwb3J0ZWRcblx0ICovXG5cdHN0YXRpYyBhZGRUYXJnZXRWYWx1ZUNvbHVtbihcblx0XHRjb2x1bW5zOiBUYWJsZUNvbHVtbltdLFxuXHRcdGV4cG9ydENvbHVtbnM6IEV4cG9ydENvbHVtbltdLFxuXHRcdHJlc291cmNlQnVuZGxlOiBSZXNvdXJjZUJ1bmRsZSxcblx0XHRpbmRleDogbnVtYmVyXG5cdCk6IHZvaWQge1xuXHRcdGNvbnN0IHRhcmdldFZhbHVlQ29sdW1uID0gKGNvbHVtbnMgYXMgQW5ub3RhdGlvblRhYmxlQ29sdW1uW10pPy5maW5kKChjb2x1bW4pID0+IHtcblx0XHRcdGlmICghdGhpcy5pc1Byb3BlcnR5RnJvbUV4cG9ydChjb2x1bW4sIGV4cG9ydENvbHVtbnNbaW5kZXhdKSkge1xuXHRcdFx0XHRyZXR1cm4gZmFsc2U7XG5cdFx0XHR9XG5cdFx0XHRyZXR1cm4gdGhpcy5jb2x1bW5XaXRoVGFyZ2V0VmFsdWVUb0JlQWRkZWQoY29sdW1uLCBleHBvcnRDb2x1bW5zW2luZGV4XSk7XG5cdFx0fSk7XG5cdFx0aWYgKHRhcmdldFZhbHVlQ29sdW1uKSB7XG5cdFx0XHRjb25zdCBjb2x1bW5Ub0JlQWRkZWQ6IEV4cG9ydENvbHVtbiA9IHtcblx0XHRcdFx0bGFiZWw6IHJlc291cmNlQnVuZGxlLmdldFRleHQoXCJUYXJnZXRWYWx1ZVwiKSxcblx0XHRcdFx0cHJvcGVydHk6IEFycmF5LmlzQXJyYXkoZXhwb3J0Q29sdW1uc1tpbmRleF0ucHJvcGVydHkpXG5cdFx0XHRcdFx0PyBleHBvcnRDb2x1bW5zW2luZGV4XS5wcm9wZXJ0eVxuXHRcdFx0XHRcdDogKFtleHBvcnRDb2x1bW5zW2luZGV4XS5wcm9wZXJ0eV0gYXMgc3RyaW5nW10pLFxuXHRcdFx0XHR0ZW1wbGF0ZTogdGFyZ2V0VmFsdWVDb2x1bW4uZXhwb3J0RGF0YVBvaW50VGFyZ2V0VmFsdWVcblx0XHRcdH07XG5cdFx0XHRleHBvcnRDb2x1bW5zLnNwbGljZShpbmRleCArIDEsIDAsIGNvbHVtblRvQmVBZGRlZCk7XG5cdFx0fVxuXHR9XG5cblx0LyoqXG5cdCAqIENoZWNrcyBpZiB0aGUgY29sdW1uJ3MgcHJvcGVydHkgY29ycmVzcG9uZHMgdG8gdGhlIGV4cG9ydENvbHVtbi5cblx0ICogQHBhcmFtIGNvbHVtbiBUaGUgY29sdW1uIGZyb20gdGhlIGFubm90YXRpb25zIGNvbHVtblxuXHQgKiBAcGFyYW0gZXhwb3J0Q29sdW1uIFRoZSBjb2x1bW4gdG8gYmUgZXhwb3J0ZWRcblx0ICogQHJldHVybnMgYHRydWVgIFdoZXRoZXIgdGhlIGNvbHVtbiBoYXMgdGhlIGV4cG9ydENvbHVtbiBwcm9wZXJ0eVxuXHQgKi9cblx0c3RhdGljIGlzUHJvcGVydHlGcm9tRXhwb3J0KGNvbHVtbjogQW5ub3RhdGlvblRhYmxlQ29sdW1uLCBleHBvcnRDb2x1bW46IEV4cG9ydENvbHVtbik6IGJvb2xlYW4ge1xuXHRcdGlmIChcblx0XHRcdGNvbHVtbi5yZWxhdGl2ZVBhdGggPT09IGV4cG9ydENvbHVtbi5wcm9wZXJ0eSB8fFxuXHRcdFx0ZXhwb3J0Q29sdW1uLnByb3BlcnR5LmluY2x1ZGVzKGNvbHVtbi5yZWxhdGl2ZVBhdGgpIHx8XG5cdFx0XHRleHBvcnRDb2x1bW4ucHJvcGVydHkuaW5jbHVkZXMoY29sdW1uLm5hbWUpXG5cdFx0KSB7XG5cdFx0XHRyZXR1cm4gdHJ1ZTtcblx0XHR9XG5cdFx0Ly8gSW4gY2FzZSBvZiBjb21wbGV4IHByb3BlcnRpZXNcblx0XHRpZiAoY29sdW1uLnByb3BlcnR5SW5mb3M/Lmxlbmd0aCA9PT0gMSAmJiBleHBvcnRDb2x1bW4ucHJvcGVydHlbMF0gPT09IGNvbHVtbi5wcm9wZXJ0eUluZm9zWzBdKSB7XG5cdFx0XHRyZXR1cm4gdHJ1ZTtcblx0XHR9XG5cdFx0cmV0dXJuIGZhbHNlO1xuXHR9XG5cblx0LyoqXG5cdCAqIERlZmluZXMgaWYgYSBjb2x1bW4gdGhhdCBpcyB0byBiZSBleHBvcnRlZCBhbmQgY29udGFpbnMgYSBEYXRhUG9pbnQgd2l0aCBhIGZpeGVkIHRhcmdldCB2YWx1ZSBuZWVkcyB0byBiZSBhZGRlZC5cblx0ICogQHBhcmFtIGNvbHVtbiBUaGUgY29sdW1uIGZyb20gdGhlIGFubm90YXRpb25zIGNvbHVtblxuXHQgKiBAcGFyYW0gY29sdW1uRXhwb3J0IFRoZSBjb2x1bW4gdG8gYmUgZXhwb3J0ZWRcblx0ICogQHJldHVybnMgYHRydWVgIGlmIHRoZSByZWZlcmVuY2VkIGNvbHVtbiBoYXMgZGVmaW5lZCBhIHRhcmdldFZhbHVlIGZvciB0aGUgZGF0YVBvaW50LCBmYWxzZSBlbHNlXG5cdCAqIEBwcml2YXRlXG5cdCAqL1xuXHRzdGF0aWMgY29sdW1uV2l0aFRhcmdldFZhbHVlVG9CZUFkZGVkKGNvbHVtbjogQW5ub3RhdGlvblRhYmxlQ29sdW1uLCBjb2x1bW5FeHBvcnQ6IEV4cG9ydENvbHVtbik6IGJvb2xlYW4ge1xuXHRcdGxldCBjb2x1bW5OZWVkc1RvQmVBZGRlZCA9IGZhbHNlO1xuXHRcdGlmIChjb2x1bW4uZXhwb3J0RGF0YVBvaW50VGFyZ2V0VmFsdWUgJiYgY29sdW1uLnByb3BlcnR5SW5mb3M/Lmxlbmd0aCA9PT0gMSkge1xuXHRcdFx0Ly9BZGQgVGFyZ2V0VmFsdWUgY29sdW1uIHdoZW4gZXhwb3J0aW5nIG9uIHNwbGl0IG1vZGVcblx0XHRcdC8vIHBhcnQgb2YgYSBGaWVsZEdyb3VwIG9yIGZyb20gYSBsaW5lSXRlbSBvciBmcm9tIGEgY29sdW1uIG9uIHRoZSBlbnRpdHlTZXRcblx0XHRcdGRlbGV0ZSBjb2x1bW5FeHBvcnQudGVtcGxhdGU7XG5cdFx0XHRjb2x1bW5OZWVkc1RvQmVBZGRlZCA9IHRydWU7XG5cdFx0fVxuXHRcdHJldHVybiBjb2x1bW5OZWVkc1RvQmVBZGRlZDtcblx0fVxufVxuIl0sIm1hcHBpbmdzIjoiOzs7Ozs7Ozs7RUF3Q0E7RUFBQSxJQWFxQkEsV0FBVztJQUFBLFNBQUFBLFlBQUE7SUFBQUMsUUFBQSxHQUFBRCxXQUFBO0lBQUEsSUFBQUUsTUFBQSxHQUFBRixXQUFBLENBQUFHLFNBQUE7SUFBQUQsTUFBQSxDQUsvQkUsVUFBVSxHQUFWLFNBQUFBLFVBQVVBLENBQUNDLFVBQW9CLEVBQVE7TUFDdEM7SUFBQTs7SUFHRDtBQUNEO0FBQ0E7QUFDQSxPQUhDO0lBQUFILE1BQUEsQ0FJQUksbUJBQW1CLEdBQW5CLFNBQUFBLG1CQUFtQkEsQ0FBQ0MsV0FBa0MsRUFBUTtNQUM3RCxJQUFJLENBQUNDLGdCQUFnQixHQUFHRCxXQUFXO0lBQ3BDOztJQUVBO0FBQ0Q7QUFDQTtBQUNBO0FBQ0EsT0FKQztJQUFBTCxNQUFBLENBS01PLGNBQWMsR0FBcEIsZUFBTUEsY0FBY0EsQ0FBQSxFQUFpRDtNQUNwRTtNQUNBLElBQUksQ0FBQ0MsV0FBVyxHQUFH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
262
+ //# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJuYW1lcyI6WyJUYWJsZUV4cG9ydCIsIl9leHBvcnRzIiwiX3Byb3RvIiwicHJvdG90eXBlIiwic2V0dXBNaXhpbiIsIl9iYXNlQ2xhc3MiLCJzZXRUYWJsZUJpbmRpbmdJbmZvIiwiYmluZGluZ0luZm8iLCJ0YWJsZUJpbmRpbmdJbmZvIiwic2V0RG93bmxvYWRVcmwiLCJkb3dubG9hZFVybCIsInVuZGVmaW5lZCIsImdldFRhYmxlRGVmaW5pdGlvbiIsImVuYWJsZUFuYWx5dGljcyIsInRhYmxlIiwiZ2V0Q29udGVudCIsInByb3BlcnR5SGVscGVyIiwiZ2V0UHJvcGVydHlIZWxwZXIiLCJjb2x1bW5zRXhwb3J0U2V0dGluZ3MiLCJtZGNDb2x1bW4iLCJnZXRDb2x1bW5zIiwiY29uY2F0IiwiZ2V0Q29sdW1uRXhwb3J0U2V0dGluZ3MiLCJiaW5kaW5nUGFyYW1ldGVycyIsImNvbGxlY3Rpb25LZXlzIiwiZ2V0RGF0YU1vZGVsT2JqZWN0Rm9yTWV0YVBhdGgiLCJtZXRhUGF0aCIsImNvbnRleHRQYXRoIiwidGFyZ2V0RW50aXR5VHlwZSIsImtleXMiLCJtYXAiLCJrZXkiLCJuYW1lIiwic2VsZWN0UHJvcGVydGllcyIsImNvbHVtbiIsIkFycmF5IiwiaXNBcnJheSIsInByb3BlcnR5Iiwiam9pbiIsImZvckVhY2giLCJpbmNsdWRlcyIsInB1c2giLCJyZXF1ZXN0QXRMZWFzdFByb3BlcnRpZXMiLCJPYmplY3QiLCJyZXF1ZXN0QXRMZWFzdCIsInByb3AiLCJwYXJhbWV0ZXJzIiwiJHNlYXJjaCIsIiQkYWdncmVnYXRpb24iLCJ0YWJsZUJpbmRpbmciLCJnZXRSb3dCaW5kaW5nIiwiZG93bmxvYWRMaXN0QmluZGluZyIsImdldE1vZGVsIiwiYmluZExpc3QiLCJnZXRQYXRoIiwiZ2V0Q29udGV4dCIsInNvcnRlciIsImZpbHRlcnMiLCJyZXF1ZXN0RG93bmxvYWRVcmwiLCJkZXN0cm95IiwiZXJyb3IiLCJMb2ciLCJkZWJ1ZyIsIl9vbkJlZm9yZUV4cG9ydCIsImV4cG9ydEV2ZW50IiwiaXNTcGxpdE1vZGUiLCJnZXRQYXJhbWV0ZXIiLCJzcGxpdENlbGxzIiwiZ2V0U291cmNlIiwiZXhwb3J0U2V0dGluZ3MiLCJ0YWJsZURlZmluaXRpb24iLCJ1cGRhdGVFeHBvcnRTZXR0aW5ncyIsImNvbHVtbnMiLCJzZXRTdGF0aWNTaXplTGltaXQiLCJleHBvcnRDb2x1bW5zIiwid29ya2Jvb2siLCJpbmRleCIsImxlbmd0aCIsImV4cG9ydENvbHVtbiIsInJlc291cmNlQnVuZGxlIiwiTGlicmFyeSIsImdldFJlc291cmNlQnVuZGxlRm9yIiwibGFiZWwiLCJnZXRMb2NhbGl6ZWRUZXh0IiwidHJhbnNsYXRlQm9vbGVhblZhbHVlRm9yRXhwb3J0Iiwic2V0RXhwb3J0Q29uZmlnIiwiYWRkVGFyZ2V0VmFsdWVDb2x1bW4iLCJ2YWx1ZU1hcCIsIkpTT04iLCJwYXJzZSIsInRhYmxlQVBJRG93bmxvYWRVcmwiLCJnZXRQYXJlbnQiLCJkYXRhU291cmNlIiwiZGF0YVVybCIsInNldEZpbGVBbmRTaGVldE5hbWUiLCJjb250cm9sIiwiZXhwb3J0RmlsZU5hbWUiLCJmaWxlTmFtZSIsImV4cG9ydFNoZWV0TmFtZSIsImNvbnRleHQiLCJzaGVldE5hbWUiLCJ0eXBlIiwic2l6ZUxpbWl0IiwiZXhwb3J0UmVxdWVzdFNpemUiLCJ0cnVlVmFsdWUiLCJmYWxzZVZhbHVlIiwiZ2V0VGV4dCIsInJlZmVyZW5jZWRDb2x1bW4iLCJmaW5kIiwicHJvcGVydHlJbmZvcyIsInJlbGF0aXZlUGF0aCIsInRvU3RyaW5nIiwiZXhwb3J0Q29uZmlnTGlzdCIsInRhcmdldFZhbHVlQ29sdW1uIiwiaXNQcm9wZXJ0eUZyb21FeHBvcnQiLCJjb2x1bW5XaXRoVGFyZ2V0VmFsdWVUb0JlQWRkZWQiLCJjb2x1bW5Ub0JlQWRkZWQiLCJ0ZW1wbGF0ZSIsImV4cG9ydERhdGFQb2ludFRhcmdldFZhbHVlIiwic3BsaWNlIiwiY29sdW1uRXhwb3J0IiwiY29sdW1uTmVlZHNUb0JlQWRkZWQiXSwic291cmNlUm9vdCI6Ii4iLCJzb3VyY2VzIjpbIlRhYmxlRXhwb3J0LnRzIl0sInNvdXJjZXNDb250ZW50IjpbImltcG9ydCBMb2cgZnJvbSBcInNhcC9iYXNlL0xvZ1wiO1xuaW1wb3J0IHR5cGUgUmVzb3VyY2VCdW5kbGUgZnJvbSBcInNhcC9iYXNlL2kxOG4vUmVzb3VyY2VCdW5kbGVcIjtcbmltcG9ydCB7IHR5cGUgSUludGVyZmFjZVdpdGhNaXhpbiB9IGZyb20gXCJzYXAvZmUvYmFzZS9DbGFzc1N1cHBvcnRcIjtcbmltcG9ydCB7IHR5cGUgVGFibGVWaXN1YWxpemF0aW9uIH0gZnJvbSBcInNhcC9mZS9jb3JlL2NvbnZlcnRlcnMvY29udHJvbHMvQ29tbW9uL1RhYmxlXCI7XG5pbXBvcnQge1xuXHR0eXBlIEFubm90YXRpb25UYWJsZUNvbHVtbixcblx0dHlwZSBDb2x1bW5FeHBvcnRTZXR0aW5ncyxcblx0dHlwZSBUYWJsZUNvbHVtblxufSBmcm9tIFwic2FwL2ZlL2NvcmUvY29udmVydGVycy9jb250cm9scy9Db21tb24vdGFibGUvQ29sdW1uc1wiO1xuaW1wb3J0IHsgZ2V0TG9jYWxpemVkVGV4dCB9IGZyb20gXCJzYXAvZmUvY29yZS9oZWxwZXJzL1Jlc291cmNlTW9kZWxIZWxwZXJcIjtcbmltcG9ydCB7IHR5cGUgU2VyaWFsaXplZENvbGxlY3Rpb25CaW5kaW5nSW5mbyB9IGZyb20gXCJzYXAvZmUvbWFjcm9zL0NvbGxlY3Rpb25CaW5kaW5nSW5mb1wiO1xuaW1wb3J0IExpYnJhcnkgZnJvbSBcInNhcC91aS9jb3JlL0xpYlwiO1xuaW1wb3J0IHR5cGUgeyBUZXh0QWxpZ24gfSBmcm9tIFwic2FwL3VpL2NvcmUvbGlicmFyeVwiO1xuaW1wb3J0IHR5cGUgTURDVGFibGUgZnJvbSBcInNhcC91aS9tZGMvVGFibGVcIjtcbmltcG9ydCB7IHR5cGUgVGFibGUkQmVmb3JlRXhwb3J0RXZlbnQgfSBmcm9tIFwic2FwL3VpL21kYy9UYWJsZVwiO1xuaW1wb3J0IHR5cGUgT0RhdGFNb2RlbCBmcm9tIFwic2FwL3VpL21vZGVsL29kYXRhL3Y0L09EYXRhTW9kZWxcIjtcbmltcG9ydCB7IHR5cGUgSVRhYmxlQmxvY2sgfSBmcm9tIFwiLi4vVGFibGVBUElcIjtcblxudHlwZSBFeHBvcnRDb2x1bW4gPSB7XG5cdHByb3BlcnR5OiBzdHJpbmcgfCBzdHJpbmdbXTtcblx0bGFiZWw6IHN0cmluZztcblx0Y29sdW1uSWQ/OiBzdHJpbmc7XG5cdHdpZHRoPzogbnVtYmVyO1xuXHR0ZXh0QWxpZ24/OiBUZXh0QWxpZ247XG5cdGRpc3BsYXlVbml0PzogYm9vbGVhbjtcblx0dHJ1ZVZhbHVlPzogc3RyaW5nO1xuXHRmYWxzZVZhbHVlPzogc3RyaW5nO1xuXHR2YWx1ZU1hcD86IHN0cmluZztcblx0dGVtcGxhdGU/OiBzdHJpbmc7XG5cdHR5cGU/OiBzdHJpbmc7XG5cdGRlbGltaXRlcj86IGJvb2xlYW47XG5cdHdyYXA/OiBib29sZWFuO1xuXHR1bml0Pzogc3RyaW5nO1xuXHRzY2FsZT86IG51bWJlcjtcbn07XG5cbnR5cGUgVXNlckV4cG9ydFNldHRpbmdzID0ge1xuXHRzcGxpdENlbGxzPzogYm9vbGVhbjtcbn07XG5cbi8vIFRoZSB0eXBlIEV4cG9ydFNldHRpbmdzIGlzIG5vdCBleHBvcnRlZCBmcm9tIFwic2FwL3VpL2V4cG9ydC9saWJyYXJ5XCIgc28gd2UgbmVlZCB0byByZWRlZmluZSB0aGVtIGhlcmVcbmV4cG9ydCB0eXBlIEV4cG9ydFNldHRpbmdzID0ge1xuXHRmaWxlTmFtZT86IHN0cmluZztcblx0ZGF0YVNvdXJjZToge1xuXHRcdGRhdGFVcmw6IHN0cmluZztcblx0XHRzaXplTGltaXQ/OiBudW1iZXI7XG5cdH07XG5cdHdvcmtib29rOiB7XG5cdFx0Y29sdW1uczogRXhwb3J0Q29sdW1uW107XG5cdFx0Y29udGV4dD86IHsgc2hlZXROYW1lPzogc3RyaW5nIH07XG5cdH07XG59O1xuXG5leHBvcnQgZGVmYXVsdCBjbGFzcyBUYWJsZUV4cG9ydCBpbXBsZW1lbnRzIElJbnRlcmZhY2VXaXRoTWl4aW4ge1xuXHRkb3dubG9hZFVybD86IHN0cmluZztcblxuXHR0YWJsZUJpbmRpbmdJbmZvPzogU2VyaWFsaXplZENvbGxlY3Rpb25CaW5kaW5nSW5mbztcblxuXHRzZXR1cE1peGluKF9iYXNlQ2xhc3M6IEZ1bmN0aW9uKTogdm9pZCB7XG5cdFx0Ly8gVGhpcyBtZXRob2QgaXMgbmVlZGVkIHRvIGltcGxlbWVudCBpbnRlcmZhY2UgSUludGVyZmFjZVdpdGhNaXhpblxuXHR9XG5cblx0LyoqXG5cdCAqIFN0b3JlcyB0aGUgYmluZGluZyBpbmZvIGZvciB0aGUgdGFibGUgdXNlZCB0byBjcmVhdGUgdGhlIGxpc3QgYmluZGluZy5cblx0ICogQHBhcmFtIGJpbmRpbmdJbmZvXG5cdCAqL1xuXHRzZXRUYWJsZUJpbmRpbmdJbmZvKGJpbmRpbmdJbmZvOiBTZXJpYWxpemVkQ29sbGVjdGlvbkJpbmRpbmdJbmZvKTogdm9pZCB7XG5cdFx0dGhpcy50YWJsZUJpbmRpbmdJbmZvID0gYmluZGluZ0luZm87XG5cdH1cblxuXHQvKipcblx0ICogQ29tcHV0ZSB0aGUgZG93bmxvYWQgVVJMIHRvIGJlIHVzZWQgYnkgdGhlIGV4cG9ydCBhbmQgc3RvcmUgaXQgaW4gdGhlIFRhYmxlQVBJLlxuXHQgKiBAcGFyYW0gdGhpc1xuXHQgKiBAcmV0dXJucyBQcm9taXNlIHdoZW4gZG93bmxvYWRVcmwgaXMgc2V0XG5cdCAqL1xuXHRhc3luYyBzZXREb3dubG9hZFVybCh0aGlzOiBJVGFibGVCbG9jayAmIFRhYmxlRXhwb3J0KTogUHJvbWlzZTx2b2lkPiB7XG5cdFx0Ly9lbXB0eSB0aGUgZG93bmxvYWRVcmwgdG8gcHJldmVudCBhbiBpbnZhbGlkIG9uZSB0byBiZSB1c2VkXG5cdFx0dGhpcy5kb3dubG9hZFVybCA9IHVuZGVmaW5lZDtcblxuXHRcdGlmICh0aGlzLmdldFRhYmxlRGVmaW5pdGlvbigpLmVuYWJsZUFuYWx5dGljcyA9PT0gdHJ1ZSkge1xuXHRcdFx0Ly8gSW4gY2FzZSBvZiBhbiBhbmFseXRpY2FsIHRhYmxlLCAkc2VsZWN0IGlzIG5vdCBzdXBwb3J0ZWQsIHNvIHdlIGRvbid0IGNhbGN1bGF0ZSB0aGUgZG93bmxvYWQgVVJMICh3ZSB1c2UgdGhlIGRlZmF1bHQgYmVoYXZpb3VyKVxuXHRcdFx0cmV0dXJuO1xuXHRcdH1cblxuXHRcdGxldCBkb3dubG9hZFVybDogc3RyaW5nIHwgdW5kZWZpbmVkIHwgbnVsbDtcblx0XHRjb25zdCB0YWJsZSA9IHRoaXMuZ2V0Q29udGVudCgpO1xuXHRcdHRyeSB7XG5cdFx0XHRjb25zdCBwcm9wZXJ0eUhlbHBlciA9IHRhYmxlLmdldFByb3BlcnR5SGVscGVyKCk7XG5cdFx0XHRsZXQgY29sdW1uc0V4cG9ydFNldHRpbmdzOiBFeHBvcnRDb2x1bW5bXSA9IFtdO1xuXHRcdFx0Zm9yIChjb25zdCBtZGNDb2x1bW4gb2YgdGFibGUuZ2V0Q29sdW1ucygpKSB7XG5cdFx0XHRcdGNvbHVtbnNFeHBvcnRTZXR0aW5ncyA9IGNvbHVtbnNFeHBvcnRTZXR0aW5ncy5jb25jYXQocHJvcGVydHlIZWxwZXIuZ2V0Q29sdW1uRXhwb3J0U2V0dGluZ3MobWRjQ29sdW1uKSk7XG5cdFx0XHR9XG5cblx0XHRcdGNvbnN0IGJpbmRpbmdQYXJhbWV0ZXJzOiB7ICRzZWxlY3Q/OiBzdHJpbmc7ICRzZWFyY2g/OiBzdHJpbmc7ICQkYWdncmVnYXRpb24/OiBvYmplY3QgfSA9IHt9O1xuXHRcdFx0Ly8gd2UganVzdCB3YW50IHRvIHJlcXVlc3QgdGhlIHByb3BlcnRpZXMgbmVjZXNzYXJ5IGZvciB0aGUgZXhwb3J0XG5cdFx0XHRjb25zdCBjb2xsZWN0aW9uS2V5cyA9IHRoaXMuZ2V0RGF0YU1vZGVsT2JqZWN0Rm9yTWV0YVBhdGgodGhpcy5tZXRhUGF0aCwgdGhpcy5jb250ZXh0UGF0aCk/LnRhcmdldEVudGl0eVR5cGUua2V5cy5tYXAoXG5cdFx0XHRcdChrZXkpID0+IGtleS5uYW1lXG5cdFx0XHQpO1xuXHRcdFx0Y29uc3Qgc2VsZWN0UHJvcGVydGllcyA9IGNvbHVtbnNFeHBvcnRTZXR0aW5ncy5tYXAoKGNvbHVtbjogRXhwb3J0Q29sdW1uKSA9PiB7XG5cdFx0XHRcdHJldHVybiBBcnJheS5pc0FycmF5KGNvbHVtbi5wcm9wZXJ0eSkgPyBjb2x1bW4ucHJvcGVydHkuam9pbihcIixcIikgOiBjb2x1bW4ucHJvcGVydHk7XG5cdFx0XHR9KTtcblx0XHRcdGNvbGxlY3Rpb25LZXlzPy5mb3JFYWNoKChrZXkpID0+IHtcblx0XHRcdFx0aWYgKCFzZWxlY3RQcm9wZXJ0aWVzLmluY2x1ZGVzKGtleSkpIHtcblx0XHRcdFx0XHRzZWxlY3RQcm9wZXJ0aWVzLnB1c2goa2V5KTtcblx0XHRcdFx0fVxuXHRcdFx0fSk7XG5cdFx0XHRjb25zdCByZXF1ZXN0QXRMZWFzdFByb3BlcnRpZXMgPSBPYmplY3Qua2V5cyh0aGlzLmdldFRhYmxlRGVmaW5pdGlvbigpLnJlcXVlc3RBdExlYXN0KTtcblx0XHRcdHJlcXVlc3RBdExlYXN0UHJvcGVydGllcz8uZm9yRWFjaCgocHJvcCkgPT4ge1xuXHRcdFx0XHRpZiAoIXNlbGVjdFByb3BlcnRpZXMuaW5jbHVkZXMocHJvcCkpIHtcblx0XHRcdFx0XHRzZWxlY3RQcm9wZXJ0aWVzLnB1c2gocHJvcCk7XG5cdFx0XHRcdH1cblx0XHRcdH0pO1xuXHRcdFx0YmluZGluZ1BhcmFtZXRlcnNbXCIkc2VsZWN0XCJdID0gc2VsZWN0UHJvcGVydGllcy5qb2luKFwiLFwiKTtcblxuXHRcdFx0aWYgKHRoaXMudGFibGVCaW5kaW5nSW5mbz8ucGFyYW1ldGVycz8uJHNlYXJjaCkge1xuXHRcdFx0XHRiaW5kaW5nUGFyYW1ldGVycy4kc2VhcmNoID0gdGhpcy50YWJsZUJpbmRpbmdJbmZvLnBhcmFtZXRlcnMuJHNlYXJjaDtcblx0XHRcdH1cblxuXHRcdFx0aWYgKHRoaXMudGFibGVCaW5kaW5nSW5mbz8ucGFyYW1ldGVycz8uJCRhZ2dyZWdhdGlvbikge1xuXHRcdFx0XHRiaW5kaW5nUGFyYW1ldGVycy4kJGFnZ3JlZ2F0aW9uID0gdGhpcy50YWJsZUJpbmRpbmdJbmZvLnBhcmFtZXRlcnMuJCRhZ2dyZWdhdGlvbjtcblx0XHRcdH1cblxuXHRcdFx0Y29uc3QgdGFibGVCaW5kaW5nID0gdGFibGUuZ2V0Um93QmluZGluZygpO1xuXHRcdFx0Ly8gd2UgY3JlYXRlIGEgbGlzdCBiaW5kaW5nIHRvIGNvbXB1dGUgdGhlIHJpZ2h0IHVybCBmb3IgdGhlIGV4cG9ydCBmcm9tIGl0cyBiaW5kaW5nIHBhcmFtZXRlcnNcblx0XHRcdGNvbnN0IGRvd25sb2FkTGlzdEJpbmRpbmcgPSAodGFibGVCaW5kaW5nLmdldE1vZGVsKCkgYXMgT0RhdGFNb2RlbCkuYmluZExpc3QoXG5cdFx0XHRcdHRhYmxlQmluZGluZy5nZXRQYXRoKCksXG5cdFx0XHRcdHRhYmxlQmluZGluZy5nZXRDb250ZXh0KCksXG5cdFx0XHRcdHRoaXMudGFibGVCaW5kaW5nSW5mbz8uc29ydGVyLFxuXHRcdFx0XHR0aGlzLnRhYmxlQmluZGluZ0luZm8/LmZpbHRlcnMsXG5cdFx0XHRcdGJpbmRpbmdQYXJhbWV0ZXJzXG5cdFx0XHQpO1xuXHRcdFx0ZG93bmxvYWRVcmwgPSBhd2FpdCBkb3dubG9hZExpc3RCaW5kaW5nLnJlcXVlc3REb3dubG9hZFVybCgpO1xuXHRcdFx0ZG93bmxvYWRMaXN0QmluZGluZy5kZXN0cm95KCk7XG5cdFx0fSBjYXRjaCAoZXJyb3I6IHVua25vd24pIHtcblx0XHRcdExvZy5kZWJ1ZyhcIkVycm9yIHdoaWxlIGNvbXB1dGluZyB0aGUgZG93bmxvYWQgVVJMIGZvciB0aGUgZXhwb3J0XCIsIGVycm9yIGFzIEVycm9yKTtcblx0XHR9XG5cdFx0aWYgKGRvd25sb2FkVXJsKSB7XG5cdFx0XHR0aGlzLmRvd25sb2FkVXJsID0gZG93bmxvYWRVcmw7XG5cdFx0fVxuXHR9XG5cblx0LyoqXG5cdCAqIEludGVyY2VwdCB0aGUgZXhwb3J0IGJlZm9yZSBpdCdzIHRyaWdnZXJlZCB0byBjb3ZlciBzcGVjaWZpYyBjYXNlcyB0aGF0IGNvdWxkbid0IGJlIGFkZHJlc3NlZCBvbiB0aGUgcHJvcGVydHlJbmZvcyBmb3IgZWFjaCBjb2x1bW4uXG5cdCAqIGUuZy4gRml4ZWQgVGFyZ2V0IFZhbHVlIGZvciB0aGUgZGF0YXBvaW50cy5cblx0ICogQHBhcmFtIHRoaXNcblx0ICogQHBhcmFtIGV4cG9ydEV2ZW50XG5cdCAqL1xuXHRfb25CZWZvcmVFeHBvcnQodGhpczogSVRhYmxlQmxvY2sgJiBUYWJsZUV4cG9ydCwgZXhwb3J0RXZlbnQ6IFRhYmxlJEJlZm9yZUV4cG9ydEV2ZW50KTogdm9pZCB7XG5cdFx0Y29uc3QgaXNTcGxpdE1vZGUgPSAoZXhwb3J0RXZlbnQuZ2V0UGFyYW1ldGVyKFwidXNlckV4cG9ydFNldHRpbmdzXCIpIGFzIFVzZXJFeHBvcnRTZXR0aW5ncyk/LnNwbGl0Q2VsbHMgPT09IHRydWU7XG5cdFx0Y29uc3QgdGFibGUgPSBleHBvcnRFdmVudC5nZXRTb3VyY2UoKSxcblx0XHRcdGV4cG9ydFNldHRpbmdzID0gZXhwb3J0RXZlbnQuZ2V0UGFyYW1ldGVyKFwiZXhwb3J0U2V0dGluZ3NcIikgYXMgRXhwb3J0U2V0dGluZ3MsXG5cdFx0XHR0YWJsZURlZmluaXRpb24gPSB0aGlzLmdldFRhYmxlRGVmaW5pdGlvbigpO1xuXG5cdFx0VGFibGVFeHBvcnQudXBkYXRlRXhwb3J0U2V0dGluZ3MoZXhwb3J0U2V0dGluZ3MsIHRhYmxlRGVmaW5pdGlvbiwgdGFibGUsIGlzU3BsaXRNb2RlKTtcblx0fVxuXG5cdC8qKlxuXHQgKiBVcGRhdGVzIHRoZSB0YWJsZSBjb2x1bW5zIHRoYXQgY2FuIGJlIGV4cG9ydGVkLlxuXHQgKiBAcGFyYW0gZXhwb3J0U2V0dGluZ3MgVGhlIHRhYmxlIGV4cG9ydCBzZXR0aW5nc1xuXHQgKiBAcGFyYW0gdGFibGVEZWZpbml0aW9uIFRoZSB0YWJsZSBkZWZpbml0aW9uIGZyb20gdGhlIHRhYmxlIGNvbnZlcnRlclxuXHQgKiBAcGFyYW0gdGFibGUgVGhlIHRhYmxlXG5cdCAqIEBwYXJhbSBpc1NwbGl0TW9kZSBEZWZpbmVzIGlmIHRoZSBleHBvcnQgaGFzIGJlZW4gbGF1bmNoZWQgdXNpbmcgc3BsaXQgbW9kZVxuXHQgKiBAcmV0dXJucyBUaGUgdXBkYXRlZCBjb2x1bW5zIHRvIGJlIGV4cG9ydGVkXG5cdCAqL1xuXHRzdGF0aWMgdXBkYXRlRXhwb3J0U2V0dGluZ3MoXG5cdFx0ZXhwb3J0U2V0dGluZ3M6IEV4cG9ydFNldHRpbmdzLFxuXHRcdHRhYmxlRGVmaW5pdGlvbjogVGFibGVWaXN1YWxpemF0aW9uLFxuXHRcdHRhYmxlOiBNRENUYWJsZSxcblx0XHRpc1NwbGl0TW9kZTogYm9vbGVhblxuXHQpOiBFeHBvcnRTZXR0aW5ncyB7XG5cdFx0Y29uc3QgY29sdW1ucyA9IHRhYmxlRGVmaW5pdGlvbi5jb2x1bW5zO1xuXHRcdHRoaXMuc2V0U3RhdGljU2l6ZUxpbWl0KHRhYmxlRGVmaW5pdGlvbiwgZXhwb3J0U2V0dGluZ3MpO1xuXHRcdGNvbnN0IGV4cG9ydENvbHVtbnMgPSBleHBvcnRTZXR0aW5ncy53b3JrYm9vay5jb2x1bW5zO1xuXHRcdGZvciAobGV0IGluZGV4ID0gZXhwb3J0Q29sdW1ucy5sZW5ndGggLSAxOyBpbmRleCA+PSAwOyBpbmRleC0tKSB7XG5cdFx0XHRjb25zdCBleHBvcnRDb2x1bW4gPSBleHBvcnRDb2x1bW5zW2luZGV4XTtcblx0XHRcdGNvbnN0IHJlc291cmNlQnVuZGxlID0gTGlicmFyeS5nZXRSZXNvdXJjZUJ1bmRsZUZvcihcInNhcC5mZS5tYWNyb3NcIikhO1xuXHRcdFx0ZXhwb3J0Q29sdW1uLmxhYmVsID0gZ2V0TG9jYWxpemVkVGV4dChleHBvcnRDb2x1bW4ubGFiZWwsIHRhYmxlKTtcblx0XHRcdHRoaXMudHJhbnNsYXRlQm9vbGVhblZhbHVlRm9yRXhwb3J0KGV4cG9ydENvbHVtbiwgcmVzb3VyY2VCdW5kbGUpO1xuXHRcdFx0aWYgKGlzU3BsaXRNb2RlKSB7XG5cdFx0XHRcdHRoaXMuc2V0RXhwb3J0Q29uZmlnKGNvbHVtbnMsIGV4cG9ydENvbHVtbnMsIGluZGV4KTtcblx0XHRcdFx0dGhpcy5hZGRUYXJnZXRWYWx1ZUNvbHVtbihjb2x1bW5zLCBleHBvcnRDb2x1bW5zLCByZXNvdXJjZUJ1bmRsZSwgaW5kZXgpO1xuXHRcdFx0fVxuXHRcdFx0aWYgKGV4cG9ydENvbHVtbi52YWx1ZU1hcCAmJiB0eXBlb2YgZXhwb3J0Q29sdW1uLnZhbHVlTWFwID09PSBcInN0cmluZ1wiKSB7XG5cdFx0XHRcdGV4cG9ydENvbHVtbi52YWx1ZU1hcCA9IEpTT04ucGFyc2UoZXhwb3J0Q29sdW1uLnZhbHVlTWFwKTtcblx0XHRcdH1cblx0XHR9XG5cdFx0Y29uc3QgdGFibGVBUElEb3dubG9hZFVybCA9ICh0YWJsZS5nZXRQYXJlbnQoKSBhcyBJVGFibGVCbG9jayAmIFRhYmxlRXhwb3J0KS5kb3dubG9hZFVybDtcblx0XHRpZiAodGFibGVBUElEb3dubG9hZFVybCkge1xuXHRcdFx0ZXhwb3J0U2V0dGluZ3MuZGF0YVNvdXJjZS5kYXRhVXJsID0gdGFibGVBUElEb3dubG9hZFVybDtcblx0XHR9XG5cdFx0dGhpcy5zZXRGaWxlQW5kU2hlZXROYW1lKGV4cG9ydFNldHRpbmdzLCB0YWJsZURlZmluaXRpb24pO1xuXHRcdHJldHVybiBleHBvcnRTZXR0aW5ncztcblx0fVxuXG5cdC8qKlxuXHQgKiBTZXRzIHRoZSBmaWxlIG5hbWUgYW5kIHNoZWV0IG5hbWUgZm9yIHRoZSBleHBvcnQgc2V0dGluZ3MuXG5cdCAqIEBwYXJhbSBleHBvcnRTZXR0aW5ncyBUaGUgdGFibGUgZXhwb3J0IHNldHRpbmdzXG5cdCAqIEBwYXJhbSB0YWJsZURlZmluaXRpb24gVGhlIHRhYmxlIGRlZmluaXRpb24gZnJvbSB0aGUgdGFibGUgY29udmVydGVyXG5cdCAqL1xuXHRzdGF0aWMgc2V0RmlsZUFuZFNoZWV0TmFtZShleHBvcnRTZXR0aW5nczogRXhwb3J0U2V0dGluZ3MsIHRhYmxlRGVmaW5pdGlvbjogVGFibGVWaXN1YWxpemF0aW9uKTogdm9pZCB7XG5cdFx0aWYgKHRhYmxlRGVmaW5pdGlvbi5jb250cm9sLmV4cG9ydEZpbGVOYW1lKSB7XG5cdFx0XHRleHBvcnRTZXR0aW5ncy5maWxlTmFtZSA9IHRhYmxlRGVmaW5pdGlvbi5jb250cm9sLmV4cG9ydEZpbGVOYW1lO1xuXHRcdH1cblx0XHRpZiAodGFibGVEZWZpbml0aW9uLmNvbnRyb2wuZXhwb3J0U2hlZXROYW1lICYmIGV4cG9ydFNldHRpbmdzLndvcmtib29rLmNvbnRleHQpIHtcblx0XHRcdGV4cG9ydFNldHRpbmdzLndvcmtib29rLmNvbnRleHQuc2hlZXROYW1lID0gdGFibGVEZWZpbml0aW9uLmNvbnRyb2wuZXhwb3J0U2hlZXROYW1lO1xuXHRcdH1cblx0fVxuXG5cdC8qKlxuXHQgKiBTZXRzIHRoZSBzdGF0aWMgc2l6ZSBsaW1pdCBmb3IgdGhlIHRhYmxlIGV4cG9ydC5cblx0ICogQHBhcmFtIHRhYmxlRGVmaW5pdGlvbiBUaGUgdGFibGUgZGVmaW5pdGlvbiBmcm9tIHRoZSB0YWJsZSBjb252ZXJ0ZXJcblx0ICogQHBhcmFtIGV4cG9ydFNldHRpbmdzIFRoZSB0YWJsZSBleHBvcnQgc2V0dGluZ3Ncblx0ICovXG5cdHN0YXRpYyBzZXRTdGF0aWNTaXplTGltaXQodGFibGVEZWZpbml0aW9uOiBUYWJsZVZpc3VhbGl6YXRpb24sIGV4cG9ydFNldHRpbmdzOiBFeHBvcnRTZXR0aW5ncyk6IHZvaWQge1xuXHRcdGlmIChcblx0XHRcdCF0YWJsZURlZmluaXRpb24uZW5hYmxlQW5hbHl0aWNzICYmXG5cdFx0XHQodGFibGVEZWZpbml0aW9uLmNvbnRyb2wudHlwZSA9PT0gXCJSZXNwb25zaXZlVGFibGVcIiB8fCB0YWJsZURlZmluaXRpb24uY29udHJvbC50eXBlID09PSBcIkdyaWRUYWJsZVwiKVxuXHRcdCkge1xuXHRcdFx0ZXhwb3J0U2V0dGluZ3MuZGF0YVNvdXJjZS5zaXplTGltaXQgPSB0YWJsZURlZmluaXRpb24uY29udHJvbC5leHBvcnRSZXF1ZXN0U2l6ZSA/PyAxMDAwO1xuXHRcdH0gZWxzZSBpZiAodGFibGVEZWZpbml0aW9uLmNvbnRyb2wuZXhwb3J0UmVxdWVzdFNpemUpIHtcblx0XHRcdC8vIEluIGNhc2Ugb2YgYW5hbHl0aWNhbCBvciB0cmVlIHRhYmxlLCB0aGUgc2l6ZSBsaW1pdCBpcyBzZXQgdG8gdGhlIG9uZSBkZWZpbmVkIGluIHRoZSB0YWJsZSBkZWZpbml0aW9uXG5cdFx0XHRleHBvcnRTZXR0aW5ncy5kYXRhU291cmNlLnNpemVMaW1pdCA9IHRhYmxlRGVmaW5pdGlvbi5jb250cm9sLmV4cG9ydFJlcXVlc3RTaXplO1xuXHRcdH1cblx0fVxuXG5cdC8qKlxuXHQgKiBTZXRzIHRoZSB0cmFuc2xhdGVkIHRleHR1YWwgcmVwcmVzZW50YXRpb24gb2YgYSBjb2x1bW4gd2l0aCBhIEJvb2xlYW4gdmFsdWUuXG5cdCAqIEBwYXJhbSBleHBvcnRDb2x1bW4gVGhlIGNvbHVtbiB0byBiZSBleHBvcnRlZFxuXHQgKiBAcGFyYW0gcmVzb3VyY2VCdW5kbGUgVGhlIHJlc291cmNlIGJ1bmRsZVxuXHQgKi9cblx0c3RhdGljIHRyYW5zbGF0ZUJvb2xlYW5WYWx1ZUZvckV4cG9ydChleHBvcnRDb2x1bW46IEV4cG9ydENvbHVtbiwgcmVzb3VyY2VCdW5kbGU6IFJlc291cmNlQnVuZGxlKTogdm9pZCB7XG5cdFx0aWYgKGV4cG9ydENvbHVtbi50eXBlID09PSBcIkJvb2xlYW5cIiAmJiAhKGV4cG9ydENvbHVtbi50cnVlVmFsdWUgfHwgZXhwb3J0Q29sdW1uLmZhbHNlVmFsdWUpKSB7XG5cdFx0XHRleHBvcnRDb2x1bW4uZmFsc2VWYWx1ZSA9IHJlc291cmNlQnVuZGxlLmdldFRleHQoXCJub1wiKTtcblx0XHRcdGV4cG9ydENvbHVtbi50cnVlVmFsdWUgPSByZXNvdXJjZUJ1bmRsZS5nZXRUZXh0KFwieWVzXCIpO1xuXHRcdH1cblx0fVxuXG5cdC8qKlxuXHQgKiBTZXRzIHRoZSBvcmlnaW5hdGluZyBleHBvcnQgY29uZmlnIG9mIGEgc2luZ2xlIHByb3BlcnR5IHJlZmVyZW5jZWQgb24gYSBmaWVsZCBncm91cCBvciBhIGN1c3RvbSBjb2x1bW4uXG5cdCAqIEBwYXJhbSBjb2x1bW5zIFRoZSBjb2x1bW5zIGZyb20gdGhlIHRhYmxlIGNvbnZlcnRlclxuXHQgKiBAcGFyYW0gZXhwb3J0Q29sdW1ucyBUaGUgbGlzdCBvZiBjb2x1bW5zIHRvIGJlIGV4cG9ydGVkXG5cdCAqIEBwYXJhbSBpbmRleCBUaGUgaW5kZXggb2YgdGhlIGNvbHVtbiB0byBiZSBleHBvcnRlZFxuXHQgKi9cblx0c3RhdGljIHNldEV4cG9ydENvbmZpZyhjb2x1bW5zOiBUYWJsZUNvbHVtbltdLCBleHBvcnRDb2x1bW5zOiBFeHBvcnRDb2x1bW5bXSwgaW5kZXg6IG51bWJlcik6IHZvaWQge1xuXHRcdGNvbnN0IHJlZmVyZW5jZWRDb2x1bW4gPSBjb2x1bW5zLmZpbmQoXG5cdFx0XHQoY29sdW1uKSA9PiAhY29sdW1uLnByb3BlcnR5SW5mb3MgJiYgKGNvbHVtbiBhcyBBbm5vdGF0aW9uVGFibGVDb2x1bW4pLnJlbGF0aXZlUGF0aCA9PT0gZXhwb3J0Q29sdW1uc1tpbmRleF0ucHJvcGVydHkudG9TdHJpbmcoKVxuXHRcdCk7XG5cdFx0aWYgKHJlZmVyZW5jZWRDb2x1bW4/LmV4cG9ydFNldHRpbmdzKSB7XG5cdFx0XHQvLyBBbGwgZXhwb3J0IHNldHRpbmdzIG9mIGEgY29sdW1uIHRvIGJlIGV4cG9ydGVkIGNhbid0IGJlIGFkZGVkIHRvIHRoZSBleHBvcnQgc2V0dGluZ3Mgb2JqZWN0XG5cdFx0XHQvLyBiZWNhdXNlIGNvbHVtbiBjb3VsZCBoYXZlIHVuaXRzL3RpbWV6b25lcy9jdXJyZW5jaWVzIHRoYXQgYXJlbid0IHJlcXVpcmVkIG9uIGN1c3RvbSBjdXN0b21zIGJ1dCBvbmx5IG9uIGNvbHVtbnMgZnJvbSBhbm5vdGF0aW9uc1xuXHRcdFx0Y29uc3QgZXhwb3J0Q29uZmlnTGlzdDogQXJyYXk8a2V5b2YgQ29sdW1uRXhwb3J0U2V0dGluZ3M+ID0gW1wic2NhbGVcIiwgXCJkZWxpbWl0ZXJcIiwgXCJmb3JtYXRcIiwgXCJ1dGNcIiwgXCJ0eXBlXCIsIFwiaW5wdXRGb3JtYXRcIl07XG5cdFx0XHRmb3IgKGNvbnN0IGtleSBvZiBleHBvcnRDb25maWdMaXN0KSB7XG5cdFx0XHRcdGlmIChyZWZlcmVuY2VkQ29sdW1uLmV4cG9ydFNldHRpbmdzW2tleV0pIHtcblx0XHRcdFx0XHRleHBvcnRDb2x1bW5zW2luZGV4XSA9IHsgLi4uZXhwb3J0Q29sdW1uc1tpbmRleF0sIC4uLnsgW2tleV06IHJlZmVyZW5jZWRDb2x1bW4uZXhwb3J0U2V0dGluZ3Nba2V5XSB9IH07XG5cdFx0XHRcdFx0aWYgKGV4cG9ydENvbHVtbnNbaW5kZXhdLnR5cGUgPT09IFwiQ3VycmVuY3lcIikge1xuXHRcdFx0XHRcdFx0ZXhwb3J0Q29sdW1uc1tpbmRleF0udHlwZSA9IFwiTnVtYmVyXCI7XG5cdFx0XHRcdFx0fVxuXHRcdFx0XHR9XG5cdFx0XHR9XG5cdFx0fVxuXHR9XG5cblx0LyoqXG5cdCAqIEFkZHMgYSB0YXJnZXQgdmFsdWUgY29sdW1uIHdoZW4gdGhlcmUgaXMgYSBkYXRhcG9pbnQgY29sdW1uLlxuXHQgKiBAcGFyYW0gY29sdW1ucyBUaGUgY29sdW1ucyBmcm9tIHRoZSB0YWJsZSBjb252ZXJ0ZXJcblx0ICogQHBhcmFtIGV4cG9ydENvbHVtbnMgVGhlIGxpc3Qgb2YgY29sdW1ucyB0byBiZSBleHBvcnRlZFxuXHQgKiBAcGFyYW0gcmVzb3VyY2VCdW5kbGUgVGhlIHJlc291cmNlIGJ1bmRsZVxuXHQgKiBAcGFyYW0gaW5kZXggVGhlIGluZGV4IG9mIHRoZSBjb2x1bW4gdG8gYmUgZXhwb3J0ZWRcblx0ICovXG5cdHN0YXRpYyBhZGRUYXJnZXRWYWx1ZUNvbHVtbihcblx0XHRjb2x1bW5zOiBUYWJsZUNvbHVtbltdLFxuXHRcdGV4cG9ydENvbHVtbnM6IEV4cG9ydENvbHVtbltdLFxuXHRcdHJlc291cmNlQnVuZGxlOiBSZXNvdXJjZUJ1bmRsZSxcblx0XHRpbmRleDogbnVtYmVyXG5cdCk6IHZvaWQge1xuXHRcdGNvbnN0IHRhcmdldFZhbHVlQ29sdW1uID0gKGNvbHVtbnMgYXMgQW5ub3RhdGlvblRhYmxlQ29sdW1uW10pPy5maW5kKChjb2x1bW4pID0+IHtcblx0XHRcdGlmICghdGhpcy5pc1Byb3BlcnR5RnJvbUV4cG9ydChjb2x1bW4sIGV4cG9ydENvbHVtbnNbaW5kZXhdKSkge1xuXHRcdFx0XHRyZXR1cm4gZmFsc2U7XG5cdFx0XHR9XG5cdFx0XHRyZXR1cm4gdGhpcy5jb2x1bW5XaXRoVGFyZ2V0VmFsdWVUb0JlQWRkZWQoY29sdW1uLCBleHBvcnRDb2x1bW5zW2luZGV4XSk7XG5cdFx0fSk7XG5cdFx0aWYgKHRhcmdldFZhbHVlQ29sdW1uKSB7XG5cdFx0XHRjb25zdCBjb2x1bW5Ub0JlQWRkZWQ6IEV4cG9ydENvbHVtbiA9IHtcblx0XHRcdFx0bGFiZWw6IHJlc291cmNlQnVuZGxlLmdldFRleHQoXCJUYXJnZXRWYWx1ZVwiKSxcblx0XHRcdFx0cHJvcGVydHk6IEFycmF5LmlzQXJyYXkoZXhwb3J0Q29sdW1uc1tpbmRleF0ucHJvcGVydHkpXG5cdFx0XHRcdFx0PyBleHBvcnRDb2x1bW5zW2luZGV4XS5wcm9wZXJ0eVxuXHRcdFx0XHRcdDogKFtleHBvcnRDb2x1bW5zW2luZGV4XS5wcm9wZXJ0eV0gYXMgc3RyaW5nW10pLFxuXHRcdFx0XHR0ZW1wbGF0ZTogdGFyZ2V0VmFsdWVDb2x1bW4uZXhwb3J0RGF0YVBvaW50VGFyZ2V0VmFsdWVcblx0XHRcdH07XG5cdFx0XHRleHBvcnRDb2x1bW5zLnNwbGljZShpbmRleCArIDEsIDAsIGNvbHVtblRvQmVBZGRlZCk7XG5cdFx0fVxuXHR9XG5cblx0LyoqXG5cdCAqIENoZWNrcyBpZiB0aGUgY29sdW1uJ3MgcHJvcGVydHkgY29ycmVzcG9uZHMgdG8gdGhlIGV4cG9ydENvbHVtbi5cblx0ICogQHBhcmFtIGNvbHVtbiBUaGUgY29sdW1uIGZyb20gdGhlIGFubm90YXRpb25zIGNvbHVtblxuXHQgKiBAcGFyYW0gZXhwb3J0Q29sdW1uIFRoZSBjb2x1bW4gdG8gYmUgZXhwb3J0ZWRcblx0ICogQHJldHVybnMgYHRydWVgIFdoZXRoZXIgdGhlIGNvbHVtbiBoYXMgdGhlIGV4cG9ydENvbHVtbiBwcm9wZXJ0eVxuXHQgKi9cblx0c3RhdGljIGlzUHJvcGVydHlGcm9tRXhwb3J0KGNvbHVtbjogQW5ub3RhdGlvblRhYmxlQ29sdW1uLCBleHBvcnRDb2x1bW46IEV4cG9ydENvbHVtbik6IGJvb2xlYW4ge1xuXHRcdGlmIChcblx0XHRcdGNvbHVtbi5yZWxhdGl2ZVBhdGggPT09IGV4cG9ydENvbHVtbi5wcm9wZXJ0eSB8fFxuXHRcdFx0ZXhwb3J0Q29sdW1uLnByb3BlcnR5LmluY2x1ZGVzKGNvbHVtbi5yZWxhdGl2ZVBhdGgpIHx8XG5cdFx0XHRleHBvcnRDb2x1bW4ucHJvcGVydHkuaW5jbHVkZXMoY29sdW1uLm5hbWUpXG5cdFx0KSB7XG5cdFx0XHRyZXR1cm4gdHJ1ZTtcblx0XHR9XG5cdFx0Ly8gSW4gY2FzZSBvZiBjb21wbGV4IHByb3BlcnRpZXNcblx0XHRpZiAoY29sdW1uLnByb3BlcnR5SW5mb3M/Lmxlbmd0aCA9PT0gMSAmJiBleHBvcnRDb2x1bW4ucHJvcGVydHlbMF0gPT09IGNvbHVtbi5wcm9wZXJ0eUluZm9zWzBdKSB7XG5cdFx0XHRyZXR1cm4gdHJ1ZTtcblx0XHR9XG5cdFx0cmV0dXJuIGZhbHNlO1xuXHR9XG5cblx0LyoqXG5cdCAqIERlZmluZXMgaWYgYSBjb2x1bW4gdGhhdCBpcyB0byBiZSBleHBvcnRlZCBhbmQgY29udGFpbnMgYSBEYXRhUG9pbnQgd2l0aCBhIGZpeGVkIHRhcmdldCB2YWx1ZSBuZWVkcyB0byBiZSBhZGRlZC5cblx0ICogQHBhcmFtIGNvbHVtbiBUaGUgY29sdW1uIGZyb20gdGhlIGFubm90YXRpb25zIGNvbHVtblxuXHQgKiBAcGFyYW0gY29sdW1uRXhwb3J0IFRoZSBjb2x1bW4gdG8gYmUgZXhwb3J0ZWRcblx0ICogQHJldHVybnMgYHRydWVgIGlmIHRoZSByZWZlcmVuY2VkIGNvbHVtbiBoYXMgZGVmaW5lZCBhIHRhcmdldFZhbHVlIGZvciB0aGUgZGF0YVBvaW50LCBmYWxzZSBlbHNlXG5cdCAqIEBwcml2YXRlXG5cdCAqL1xuXHRzdGF0aWMgY29sdW1uV2l0aFRhcmdldFZhbHVlVG9CZUFkZGVkKGNvbHVtbjogQW5ub3RhdGlvblRhYmxlQ29sdW1uLCBjb2x1bW5FeHBvcnQ6IEV4cG9ydENvbHVtbik6IGJvb2xlYW4ge1xuXHRcdGxldCBjb2x1bW5OZWVkc1RvQmVBZGRlZCA9IGZhbHNlO1xuXHRcdGlmIChjb2x1bW4uZXhwb3J0RGF0YVBvaW50VGFyZ2V0VmFsdWUgJiYgY29sdW1uLnByb3BlcnR5SW5mb3M/Lmxlbmd0aCA9PT0gMSkge1xuXHRcdFx0Ly9BZGQgVGFyZ2V0VmFsdWUgY29sdW1uIHdoZW4gZXhwb3J0aW5nIG9uIHNwbGl0IG1vZGVcblx0XHRcdC8vIHBhcnQgb2YgYSBGaWVsZEdyb3VwIG9yIGZyb20gYSBsaW5lSXRlbSBvciBmcm9tIGEgY29sdW1uIG9uIHRoZSBlbnRpdHlTZXRcblx0XHRcdGRlbGV0ZSBjb2x1bW5FeHBvcnQudGVtcGxhdGU7XG5cdFx0XHRjb2x1bW5OZWVkc1RvQmVBZGRlZCA9IHRydWU7XG5cdFx0fVxuXHRcdHJldHVybiBjb2x1bW5OZWVkc1RvQmVBZGRlZDtcblx0fVxufVxuIl0sIm1hcHBpbmdzIjoiOzs7Ozs7Ozs7RUF3Q0E7RUFBQSxJQWFxQkEsV0FBVztJQUFBLFNBQUFBLFlBQUE7SUFBQUMsUUFBQSxHQUFBRCxXQUFBO0lBQUEsSUFBQUUsTUFBQSxHQUFBRixXQUFBLENBQUFHLFNBQUE7SUFBQUQsTUFBQSxDQUsvQkUsVUFBVSxHQUFWLFNBQUFBLFVBQVVBLENBQUNDLFVBQW9CLEVBQVE7TUFDdEM7SUFBQTs7SUFHRDtBQUNEO0FBQ0E7QUFDQSxPQUhDO0lBQUFILE1BQUEsQ0FJQUksbUJBQW1CLEdBQW5CLFNBQUFBLG1CQUFtQkEsQ0FBQ0MsV0FBNEMsRUFBUTtNQUN2RSxJQUFJLENBQUNDLGdCQUFnQixHQUFHRCxXQUFXO0lBQ3BDOztJQUVBO0FBQ0Q7QUFDQTtBQUNBO0FBQ0EsT0FKQztJQUFBTCxNQUFBLENBS01PLGNBQWMsR0FBcEIsZUFBTUEsY0FBY0EsQ0FBQSxFQUFpRDtN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Q0UsS0FBSyxDQUFDLENBQUN2QyxRQUFRLENBQWM7VUFDaERnRixRQUFRLEVBQUVKLGlCQUFpQixDQUFDSztRQUM3QixDQUFDO1FBQ0Q1QyxhQUFhLENBQUM2QyxNQUFNLENBQUMzQyxLQUFLLEdBQUcsQ0FBQyxFQUFFLENBQUMsRUFBRXdDLGVBQWUsQ0FBQztNQUNwRDtJQUNEOztJQUVBO0FBQ0Q7QUFDQTtBQUNBO0FBQ0E7QUFDQSxPQUxDO0lBQUFwSCxXQUFBLENBTU9rSCxvQkFBb0IsR0FBM0IsU0FBT0Esb0JBQW9CQSxDQUFDaEYsTUFBNkIsRUFBRTRDLFlBQTBCLEVBQVc7TUFDL0YsSUFDQzVDLE1BQU0sQ0FBQzRFLFlBQVksS0FBS2hDLFlBQVksQ0FBQ3pDLFFBQVEsSUFDN0N5QyxZQUFZLENBQUN6QyxRQUFRLENBQUNHLFFBQVEsQ0FBQ04sTUFBTSxDQUFDNEUsWUFBWSxDQUFDLElBQ25EaEMsWUFBWSxDQUFDekMsUUFBUSxDQUFDRyxRQUFRLENBQUNOLE1BQU0sQ0FBQ0YsSUFBSSxDQUFDLEVBQzFDO1FBQ0QsT0FBTyxJQUFJO01BQ1o7TUFDQTtNQUNBLElBQUlFLE1BQU0sQ0FBQzJFLGFBQWEsRUFBRWhDLE1BQU0sS0FBSyxDQUFDLElBQUlDLFlBQVksQ0FBQ3pDLFFBQVEsQ0FBQyxDQUFDLENBQUMsS0FBS0gsTUFBTSxDQUFDMkUsYUFBYSxDQUFDLENBQUMsQ0FBQyxFQUFFO1FBQy9GLE9BQU8sSUFBSTtNQUNaO01BQ0EsT0FBTyxLQUFLO0lBQ2I7O0lBRUE7QUFDRDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsT0FOQztJQUFBN0csV0FBQSxDQU9PbUgsOEJBQThCLEdBQXJDLFNBQU9BLDhCQUE4QkEsQ0FBQ2pGLE1BQTZCLEVBQUVzRixZQUEwQixFQUFXO01BQ3pHLElBQUlDLG9CQUFvQixHQUFHLEtBQUs7TUFDaEMsSUFBSXZGLE1BQU0sQ0FBQ29GLDBCQUEwQixJQUFJcEYsTUFBTSxDQUFDMkUsYUFBYSxFQUFFaEMsTUFBTSxLQUFLLENBQUMsRUFBRTtRQUM1RTtRQUNBO1FBQ0EsT0FBTzJDLFlBQVksQ0FBQ0gsUUFBUTtRQUM1Qkksb0JBQW9CLEdBQUcsSUFBSTtNQUM1QjtNQUNBLE9BQU9BLG9CQUFvQjtJQUM1QixDQUFDO0lBQUEsT0FBQXpILFdBQUE7RUFBQTtFQUFBQyxRQUFBLEdBQUFELFdBQUE7RUFBQSxPQUFBQyxRQUFBO0FBQUEiLCJpZ25vcmVMaXN0IjpbXX0=
@@ -8,7 +8,7 @@ import {
8
8
  type TableColumn
9
9
  } from "sap/fe/core/converters/controls/Common/table/Columns";
10
10
  import { getLocalizedText } from "sap/fe/core/helpers/ResourceModelHelper";
11
- import { type CollectionBindingInfo } from "sap/fe/macros/CollectionBindingInfo";
11
+ import { type SerializedCollectionBindingInfo } from "sap/fe/macros/CollectionBindingInfo";
12
12
  import Library from "sap/ui/core/Lib";
13
13
  import type { TextAlign } from "sap/ui/core/library";
14
14
  import type MDCTable from "sap/ui/mdc/Table";
@@ -54,7 +54,7 @@ export type ExportSettings = {
54
54
  export default class TableExport implements IInterfaceWithMixin {
55
55
  downloadUrl?: string;
56
56
 
57
- tableBindingInfo?: CollectionBindingInfo;
57
+ tableBindingInfo?: SerializedCollectionBindingInfo;
58
58
 
59
59
  setupMixin(_baseClass: Function): void {
60
60
  // This method is needed to implement interface IInterfaceWithMixin
@@ -64,7 +64,7 @@ export default class TableExport implements IInterfaceWithMixin {
64
64
  * Stores the binding info for the table used to create the list binding.
65
65
  * @param bindingInfo
66
66
  */
67
- setTableBindingInfo(bindingInfo: CollectionBindingInfo): void {
67
+ setTableBindingInfo(bindingInfo: SerializedCollectionBindingInfo): void {
68
68
  this.tableBindingInfo = bindingInfo;
69
69
  }
70
70
 
@@ -123,10 +123,9 @@ sap.ui.define(["sap/base/Log", "sap/fe/core/CommonUtils", "sap/fe/core/controlle
123
123
  */;
124
124
  _proto._onDragStartDocument = function _onDragStartDocument(ui5Event) {
125
125
  const context = ui5Event.getParameter("bindingContext");
126
- const updatablePropertyPath = this.getTableDefinition().annotation.updatablePropertyPath;
127
126
 
128
127
  // Check if the context can be updated according to update restrictions
129
- let disableDrag = !!updatablePropertyPath && !context.getProperty(updatablePropertyPath);
128
+ let disableDrag = !TableRuntime.isUpdatableContext(this.getTableDefinition().annotation.updatablePropertyPathInfo, context, false);
130
129
 
131
130
  // In case of a TreeTable in a ListReport with draft, check that the context has no associated draft
132
131
  if (!disableDrag && !context.getBinding().isRelative()) {
@@ -191,7 +190,7 @@ sap.ui.define(["sap/base/Log", "sap/fe/core/CommonUtils", "sap/fe/core/controlle
191
190
  await Promise.all([this.dropContext(movedContext, dropInfo), this.requestSideEffectsForChangeNextSiblingAction(movedContext)]);
192
191
  } catch (error) {
193
192
  MessageToast.show(this.getTranslatedText("M_TABLEDROP_FAILED", [""]));
194
- Log.error("The operation is unsuccessful. " + error.message ?? "");
193
+ Log.error("The operation is unsuccessful. " + (error.message ?? ""));
195
194
  } finally {
196
195
  BusyLocker.unlock(this.getContent());
197
196
  }
@@ -498,4 +497,4 @@ sap.ui.define(["sap/base/Log", "sap/fe/core/CommonUtils", "sap/fe/core/controlle
498
497
  _exports = TableHierarchy;
499
498
  return _exports;
500
499
  }, false);
501
- //# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJuYW1lcyI6WyJEcm9wUG9zaXRpb24iLCJUYWJsZUhpZXJhcmNoeSIsIl9leHBvcnRzIiwiX3Byb3RvIiwicHJvdG90eXBlIiwic2V0dXBNaXhpbiIsIl9iYXNlQ2xhc3MiLCJfb25Db3B5Q3V0IiwiZXZ0IiwiZm9yQ29udGV4dE1lbnUiLCJhY3Rpb24iLCJ0YWJsZSIsImdldFNvdXJjZSIsImdldFBhcmVudCIsIm1lbnUiLCJpbnRlcm5hbENvbnRleHQiLCJnZXRCaW5kaW5nQ29udGV4dCIsInNlbGVjdGVkQ29udGV4dHMiLCJnZXRTZWxlY3RlZENvbnRleHRzIiwibGVuZ3RoIiwiTG9nIiwiZXJyb3IiLCJzZXRQcm9wZXJ0eSIsIk1lc3NhZ2VUb2FzdCIsInNob3ciLCJSZXNvdXJjZU1vZGVsSGVscGVyIiwiZ2V0UmVzb3VyY2VNb2RlbCIsImdldFRleHQiLCJnZXRQcm9wZXJ0eSIsIlRhYmxlUnVudGltZSIsImNsZWFyU2VsZWN0aW9uIiwiZmlyZVNlbGVjdGlvbkNoYW5nZSIsInBhc3RlQnV0dG9uIiwiZ2V0QWN0aW9ucyIsImZpbmQiLCJ0b29sYmFyQWN0aW9uIiwidGVzdCIsImdldEFjdGlvbiIsImdldElkIiwic2V0VGltZW91dCIsImZvY3VzIiwiX29uRHJhZ0VudGVyRG9jdW1lbnQiLCJ1aTVFdmVudCIsImRyYWdnZWRDb250ZXh0IiwiZ2V0UGFyYW1ldGVyIiwiZ2V0Q29udGVudCIsImdldFJvd0JpbmRpbmciLCJnZXRCaW5kaW5nIiwicHJldmVudERlZmF1bHQiLCJ0YXJnZXRDb250ZXh0IiwiaXNBbmNlc3Rvck9mIiwiZGlzYWJsZWRCZXR3ZWVuIiwiZGlzYWJsZWRPbiIsInRhYmxlRGVmaW5pdGlvbiIsImdldFRhYmxlRGVmaW5pdGlvbiIsImlzTW92ZUFsbG93ZWRJbmZvIiwiY29udHJvbCIsImlzTW92ZVRvUG9zaXRpb25BbGxvd2VkIiwiY3VzdG9tRnVuY3Rpb24iLCJGUE1IZWxwZXIiLCJnZXRDdXN0b21GdW5jdGlvbiIsIm1vZHVsZU5hbWUiLCJtZXRob2ROYW1lIiwidW5kZWZpbmVkIiwic2FmZUlzTW92ZUFsbG93ZWQiLCJhbm5vdGF0aW9uIiwiYWxsb3dEcm9wQmV0d2Vlbk5vZGVzIiwiTWF0aCIsImFicyIsImdldEluZGV4IiwiZ2V0TGVuZ3RoIiwiY2hhbmdlU2libGluZ0ZvclJvb3RzU3VwcG9ydGVkIiwiaXNEcm9wQmV0d2VlbkFsbG93ZWRGb3JEcmFnIiwiYWxsb3dlZERyb3BQb3NpdGlvbiIsIk9uT3JCZXR3ZWVuIiwiT24iLCJCZXR3ZWVuIiwic2V0RHJvcFBvc2l0aW9uIiwiX29uRHJhZ1N0YXJ0RG9jdW1lbnQiLCJjb250ZXh0IiwidXBkYXRhYmxlUHJvcGVydHlQYXRoIiwiZGlzYWJsZURyYWciLCJpc1JlbGF0aXZlIiwiaXNNb3ZhYmxlSW5mbyIsImlzTm9kZU1vdmFibGUiLCJfZXJyb3IiLCJfb25Ecm9wRG9jdW1lbnQiLCJCdXN5TG9ja2VyIiwibG9jayIsImRyb3BwZWRPbkNvbnRleHQiLCJkcm9wSW5mbyIsInBvc2l0aW9uIiwicGFyZW50Q29udGV4dCIsImNvbnRleHRCZWZvcmUiLCJjb250ZXh0QWZ0ZXIiLCJnZXRDb250ZXh0QWZ0ZXIiLCJnZXRDb250ZXh0QmVmb3JlIiwibW92ZWRDb250ZXh0IiwiUHJvbWlzZSIsImFsbCIsImRyb3BDb250ZXh0IiwicmVxdWVzdFNpZGVFZmZlY3RzRm9yQ2hhbmdlTmV4dFNpYmxpbmdBY3Rpb24iLCJnZXRUcmFuc2xhdGVkVGV4dCIsIm1lc3NhZ2UiLCJ1bmxvY2siLCJfb25Db2xsYXBzZUV4cGFuZE5vZGUiLCJfdWk1RXZlbnQiLCJleHBhbmQiLCJwcm9taXNlQXJyYXkiLCJtYXAiLCJzaW5nbGVDb250ZXh0IiwiaXNFeHBhbmRlZCIsImNvbGxhcHNlIiwiTnVtYmVyIiwiTUFYX1NBRkVfSU5URUdFUiIsIl9vbk1vdmVVcERvd24iLCJtb3ZlVXAiLCJhcmd1bWVudHMiLCJtZGNUYWJsZSIsInNldEJ1c3kiLCJyZXF1ZXN0UGFyZW50IiwiY29udGV4dE1vdmVkIiwibW92ZVByb21pc2UiLCJwcmV2aW91c1NpYmxpbmciLCJyZXF1ZXN0U2libGluZyIsIm1vdmUiLCJuZXh0U2libGluZyIsInBhcmVudCIsIm5ld0luZGV4Iiwic2Nyb2xsVG9JbmRleCIsImZvY3VzUm93IiwiX3JlcXVlc3RTaWRlRWZmZWN0c0ZvckhpZXJhcmNoeUFjdGlvbnMiLCJyZXF1ZXN0U2lkZUVmZmVjdHNGb3JDb3B5QWN0aW9uIiwiZW50aXR5UGF0aCIsImRhdGEiLCJtZXRhTW9kZWwiLCJnZXRNb2RlbCIsImdldE1ldGFNb2RlbCIsInRhcmdldE9iamVjdCIsImdldENvbnRleHQiLCJjb252ZXJ0TWV0YU1vZGVsQ29udGV4dCIsIk1ldGFNb2RlbENvbnZlcnRlciIsImVudGl0eVR5cGUiLCJ0YXJnZXRUeXBlIiwiYWN0aW9uTmFtZSIsImFubm90YXRpb25zIiwiSGllcmFyY2h5IiwiaGllcmFyY2h5UXVhbGlmaWVyIiwiYXBwQ29tcG9uZW50IiwiQ29tbW9uVXRpbHMiLCJnZXRBcHBDb21wb25lbnQiLCJzaWRlRWZmZWN0c1NlcnZpY2UiLCJnZXRTaWRlRWZmZWN0c1NlcnZpY2UiLCJzaWRlRWZmZWN0cyIsImdldE9EYXRhQWN0aW9uU2lkZUVmZmVjdHMiLCJyZXF1ZXN0U2lkZUVmZmVjdHNGb3JPRGF0YUFjdGlvbiIsImFsbG93ZWQiLCJpc0FsbG93ZWQiLCJwYXJlbnRCZWZvcmUiLCJwYXJhbXNCZWZvcmUiLCJnZXREcm9wQmV0d2VlblBhcmFtZXRlcnMiLCJwYXJlbnRBZnRlciIsInBhcmFtc0FmdGVyIiwiY29udGV4dEluZGV4IiwiRXJyb3IiLCJsaXN0QmluZGluZyIsImdldEFsbEN1cnJlbnRDb250ZXh0cyIsImN0eCIsImluZm8iLCJpbnRlcm5hbE1vZGVsQ29udGV4dCIsImlzVGFibGVTb3J0ZWQiLCJtb3ZlQ29udGV4dCIsImZpbmFsbHkiLCJwYXJhbXMiXSwic291cmNlUm9vdCI6Ii4iLCJzb3VyY2VzIjpbIlRhYmxlSGllcmFyY2h5LnRzIl0sInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB0eXBlIHsgRW50aXR5U2V0LCBOYXZpZ2F0aW9uUHJvcGVydHkgfSBmcm9tIFwiQHNhcC11eC92b2NhYnVsYXJpZXMtdHlwZXNcIjtcbmltcG9ydCBMb2cgZnJvbSBcInNhcC9iYXNlL0xvZ1wiO1xuaW1wb3J0IHsgdHlwZSBJSW50ZXJmYWNlV2l0aE1peGluIH0gZnJvbSBcInNhcC9mZS9iYXNlL0NsYXNzU3VwcG9ydFwiO1xuaW1wb3J0IENvbW1vblV0aWxzIGZyb20gXCJzYXAvZmUvY29yZS9Db21tb25VdGlsc1wiO1xuaW1wb3J0IEJ1c3lMb2NrZXIgZnJvbSBcInNhcC9mZS9jb3JlL2NvbnRyb2xsZXJleHRlbnNpb25zL0J1c3lMb2NrZXJcIjtcbmltcG9ydCAqIGFzIE1ldGFNb2RlbENvbnZlcnRlciBmcm9tIFwic2FwL2ZlL2NvcmUvY29udmVydGVycy9NZXRhTW9kZWxDb252ZXJ0ZXJcIjtcbmltcG9ydCBGUE1IZWxwZXIgZnJvbSBcInNhcC9mZS9jb3JlL2hlbHBlcnMvRlBNSGVscGVyXCI7XG5pbXBvcnQgeyB0eXBlIEludGVybmFsTW9kZWxDb250ZXh0IH0gZnJvbSBcInNhcC9mZS9jb3JlL2hlbHBlcnMvTW9kZWxIZWxwZXJcIjtcbmltcG9ydCBSZXNvdXJjZU1vZGVsSGVscGVyIGZyb20gXCJzYXAvZmUvY29yZS9oZWxwZXJzL1Jlc291cmNlTW9kZWxIZWxwZXJcIjtcbmltcG9ydCB0eXBlIE1lbnUgZnJvbSBcInNhcC9tL01lbnVcIjtcbmltcG9ydCBNZXNzYWdlVG9hc3QgZnJvbSBcInNhcC9tL01lc3NhZ2VUb2FzdFwiO1xuaW1wb3J0IHR5cGUgVUk1RXZlbnQgZnJvbSBcInNhcC91aS9iYXNlL0V2ZW50XCI7XG5pbXBvcnQgdHlwZSBDb250cm9sIGZyb20gXCJzYXAvdWkvY29yZS9Db250cm9sXCI7XG5pbXBvcnQgdHlwZSBVSTVFbGVtZW50IGZyb20gXCJzYXAvdWkvY29yZS9FbGVtZW50XCI7XG5pbXBvcnQgdHlwZSBEcmFnRHJvcEluZm8gZnJvbSBcInNhcC91aS9jb3JlL2RuZC9EcmFnRHJvcEluZm9cIjtcbmltcG9ydCB0eXBlIE1EQ1RhYmxlIGZyb20gXCJzYXAvdWkvbWRjL1RhYmxlXCI7XG5pbXBvcnQgdHlwZSBBY3Rpb25Ub29sYmFyQWN0aW9uIGZyb20gXCJzYXAvdWkvbWRjL2FjdGlvbnRvb2xiYXIvQWN0aW9uVG9vbGJhckFjdGlvblwiO1xuaW1wb3J0IHR5cGUgQ29udGV4dCBmcm9tIFwic2FwL3VpL21vZGVsL29kYXRhL3Y0L0NvbnRleHRcIjtcbmltcG9ydCB0eXBlIE9EYXRhTGlzdEJpbmRpbmcgZnJvbSBcInNhcC91aS9tb2RlbC9vZGF0YS92NC9PRGF0YUxpc3RCaW5kaW5nXCI7XG5pbXBvcnQgeyB0eXBlIElUYWJsZUJsb2NrIH0gZnJvbSBcIi4uL1RhYmxlQVBJXCI7XG5pbXBvcnQgVGFibGVSdW50aW1lIGZyb20gXCIuLi9UYWJsZVJ1bnRpbWVcIjtcblxuZW51bSBEcm9wUG9zaXRpb24ge1xuXHRPbiA9IFwiT25cIixcblx0QmV0d2VlbiA9IFwiQmV0d2VlblwiLFxuXHRPbk9yQmV0d2VlbiA9IFwiT25PckJldHdlZW5cIlxufVxuXG50eXBlIERyb3BJbmZvcm1hdGlvbiA9XG5cdHwgeyBwb3NpdGlvbjogRHJvcFBvc2l0aW9uLk9uOyBwYXJlbnRDb250ZXh0OiBDb250ZXh0IHwgbnVsbCB9XG5cdHwgeyBwb3NpdGlvbjogRHJvcFBvc2l0aW9uLkJldHdlZW47IGNvbnRleHRCZWZvcmU6IENvbnRleHQgfCBudWxsOyBjb250ZXh0QWZ0ZXI6IENvbnRleHQgfCBudWxsIH07XG5cbmV4cG9ydCBkZWZhdWx0IGNsYXNzIFRhYmxlSGllcmFyY2h5IGltcGxlbWVudHMgSUludGVyZmFjZVdpdGhNaXhpbiB7XG5cdHNldHVwTWl4aW4oX2Jhc2VDbGFzczogRnVuY3Rpb24pOiB2b2lkIHtcblx0XHQvLyBUaGlzIG1ldGhvZCBpcyBuZWVkZWQgdG8gaW1wbGVtZW50IGludGVyZmFjZSBJSW50ZXJmYWNlV2l0aE1peGluXG5cdH1cblxuXHQvKipcblx0ICogSGFuZGxlcyB0aGUgQ3V0L0NvcHkgb3BlcmF0aW9uLlxuXHQgKiBAcGFyYW0gZXZ0IFRoZSBVSTUgZXZlbnRcblx0ICogQHBhcmFtIGZvckNvbnRleHRNZW51XG5cdCAqL1xuXHRfb25Db3B5Q3V0KHRoaXM6IElUYWJsZUJsb2NrICYgVGFibGVIaWVyYXJjaHksIGV2dDogVUk1RXZlbnQ8e30sIFVJNUVsZW1lbnQ+LCBmb3JDb250ZXh0TWVudTogYm9vbGVhbiwgYWN0aW9uOiBcIkNvcHlcIiB8IFwiQ3V0XCIpOiB2b2lkIHtcblx0XHRsZXQgdGFibGU6IE1EQ1RhYmxlO1xuXHRcdGlmICghZm9yQ29udGV4dE1lbnUpIHtcblx0XHRcdHRhYmxlID0gZXZ0LmdldFNvdXJjZSgpLmdldFBhcmVudCgpIGFzIE1EQ1RhYmxlO1xuXHRcdH0gZWxzZSB7XG5cdFx0XHRjb25zdCBtZW51ID0gZXZ0LmdldFNvdXJjZSgpLmdldFBhcmVudCgpIGFzIE1lbnU7XG5cdFx0XHR0YWJsZSA9IG1lbnUuZ2V0UGFyZW50KCk/LmdldFBhcmVudCgpIGFzIE1EQ1RhYmxlO1xuXHRcdH1cblx0XHRjb25zdCBpbnRlcm5hbENvbnRleHQgPSB0YWJsZS5nZXRCaW5kaW5nQ29udGV4dChcImludGVybmFsXCIpIGFzIEludGVybmFsTW9kZWxDb250ZXh0O1xuXHRcdGNvbnN0IHNlbGVjdGVkQ29udGV4dHMgPSB0aGlzLmdldFNlbGVjdGVkQ29udGV4dHMoKTtcblx0XHRpZiAoc2VsZWN0ZWRDb250ZXh0cy5sZW5ndGggPiAxKSB7XG5cdFx0XHRMb2cuZXJyb3IoYE11bHRpICR7YWN0aW9uID09PSBcIkN1dFwiID8gXCJjdXR0aW5nXCIgOiBcImNvcHlpbmdcIn0gaXMgbm90IHN1cHBvcnRlZGApO1xuXHRcdFx0cmV0dXJuO1xuXHRcdH1cblxuXHRcdGludGVybmFsQ29udGV4dC5zZXRQcm9wZXJ0eShcIm5vZGVVcGRhdGVzSW5mby9wYXN0YWJsZUNvbnRleHRzXCIsIHNlbGVjdGVkQ29udGV4dHMpO1xuXHRcdGludGVybmFsQ29udGV4dC5zZXRQcm9wZXJ0eShcIm5vZGVVcGRhdGVzSW5mby9sYXN0QWN0aW9uXCIsIGFjdGlvbik7XG5cdFx0TWVzc2FnZVRvYXN0LnNob3coUmVzb3VyY2VNb2RlbEhlbHBlci5nZXRSZXNvdXJjZU1vZGVsKHRhYmxlKS5nZXRUZXh0KFwiTV9DVVRDT1BZX1JFQURZXCIpKTtcblx0XHRpZiAoIWZvckNvbnRleHRNZW51IHx8IGludGVybmFsQ29udGV4dC5nZXRQcm9wZXJ0eShcIm51bWJlck9mU2VsZWN0ZWRDb250ZXh0c1wiKSA+IDApIHtcblx0XHRcdFRhYmxlUnVudGltZS5jbGVhclNlbGVjdGlvbih0YWJsZSk7XG5cdFx0XHR0YWJsZS5maXJlU2VsZWN0aW9uQ2hhbmdlKCk7XG5cdFx0fSBlbHNlIGlmIChmb3JDb250ZXh0TWVudSkge1xuXHRcdFx0Ly8gVXNpbmcgdGhlIGNvbnRleHQgbWVudSBpbXBsaWNpdGx5IGRlZmluZXMgYSBjb250ZXh0IGZvciB0aGUgYWN0aW9uXG5cdFx0XHR0YWJsZS5maXJlU2VsZWN0aW9uQ2hhbmdlKCk7XG5cdFx0fVxuXG5cdFx0aW50ZXJuYWxDb250ZXh0LnNldFByb3BlcnR5KFwibm9kZVVwZGF0ZXNJbmZvL2N1dEVuYWJsZW1lbnRcIiwgZmFsc2UpO1xuXHRcdGludGVybmFsQ29udGV4dC5zZXRQcm9wZXJ0eShcImNvbnRleHRtZW51L25vZGVVcGRhdGVzSW5mby9jdXRFbmFibGVtZW50XCIsIGZhbHNlKTtcblx0XHRpbnRlcm5hbENvbnRleHQuc2V0UHJvcGVydHkoXCJub2RlVXBkYXRlc0luZm8vY29weUVuYWJsZW1lbnRcIiwgZmFsc2UpO1xuXHRcdGludGVybmFsQ29udGV4dC5zZXRQcm9wZXJ0eShcImNvbnRleHRtZW51L25vZGVVcGRhdGVzSW5mby9jb3B5RW5hYmxlbWVudFwiLCBmYWxzZSk7XG5cdFx0Y29uc3QgcGFzdGVCdXR0b24gPSAodGFibGUuZ2V0QWN0aW9ucygpIGFzIEFjdGlvblRvb2xiYXJBY3Rpb25bXSkuZmluZCgodG9vbGJhckFjdGlvbikgPT5cblx0XHRcdC86OlBhc3RlJC8udGVzdCh0b29sYmFyQWN0aW9uLmdldEFjdGlvbigpLmdldElkKCkpXG5cdFx0KTtcblx0XHRzZXRUaW1lb3V0KCgpID0+IHtcblx0XHRcdHBhc3RlQnV0dG9uPy5mb2N1cygpO1xuXHRcdH0sIDApO1xuXHR9XG5cblx0LyoqXG5cdCAqIFRoZSBkcmFnZ2VkIGVsZW1lbnQgZW50ZXJzIGEgdGFibGUgcm93LlxuXHQgKiBAcGFyYW0gdWk1RXZlbnQgVUk1IGV2ZW50IGNvbWluZyBmcm9tIHRoZSBNREMgZHJhZyBhbmQgZHJvcCBjb25maWdcblx0ICovXG5cdF9vbkRyYWdFbnRlckRvY3VtZW50KFxuXHRcdHRoaXM6IElUYWJsZUJsb2NrICYgVGFibGVIaWVyYXJjaHksXG5cdFx0dWk1RXZlbnQ6IFVJNUV2ZW50PHsgYmluZGluZ0NvbnRleHQ6IENvbnRleHQ7IGRyYWdTb3VyY2U6IENvbnRleHQ7IGRyb3BQb3NpdGlvbjogXCJCZWZvcmVcIiB8IFwiQWZ0ZXJcIiB8IFwiT25cIiB9LCBEcmFnRHJvcEluZm8+XG5cdCk6IHZvaWQge1xuXHRcdGNvbnN0IGRyYWdnZWRDb250ZXh0ID0gdWk1RXZlbnQuZ2V0UGFyYW1ldGVyKFwiZHJhZ1NvdXJjZVwiKTtcblx0XHRpZiAodGhpcy5nZXRDb250ZW50KCkuZ2V0Um93QmluZGluZygpICE9PSBkcmFnZ2VkQ29udGV4dC5nZXRCaW5kaW5nKCkpIHtcblx0XHRcdC8vIFRoZSBkcmFnIGlzIGRvbmUgb24gYSBkaWZmZXJlbnQgdGFibGUgLT4gbm90IGF1dGhvcml6ZWRcblx0XHRcdHVpNUV2ZW50LnByZXZlbnREZWZhdWx0KCk7XG5cdFx0XHRyZXR1cm47XG5cdFx0fVxuXG5cdFx0Y29uc3QgdGFyZ2V0Q29udGV4dDogQ29udGV4dCB8IG51bGwgPSB1aTVFdmVudC5nZXRQYXJhbWV0ZXIoXCJiaW5kaW5nQ29udGV4dFwiKTtcblx0XHRpZiAoZHJhZ2dlZENvbnRleHQuaXNBbmNlc3Rvck9mKHRhcmdldENvbnRleHQpKSB7XG5cdFx0XHQvLyBUaGUgYW5jZXN0b3IgaXMgZHJvcHBlZCBvbiBhIGRlc2NlbmRhbnQgLT4gbm90IGF1dGhvcml6ZWRcblx0XHRcdHVpNUV2ZW50LnByZXZlbnREZWZhdWx0KCk7XG5cdFx0XHRyZXR1cm47XG5cdFx0fVxuXG5cdFx0bGV0IGRpc2FibGVkQmV0d2VlbiA9IGZhbHNlO1xuXHRcdGxldCBkaXNhYmxlZE9uID0gZmFsc2U7XG5cdFx0Y29uc3QgdGFibGVEZWZpbml0aW9uID0gdGhpcy5nZXRUYWJsZURlZmluaXRpb24oKTtcblx0XHRjb25zdCBpc01vdmVBbGxvd2VkSW5mbyA9IHRhYmxlRGVmaW5pdGlvbi5jb250cm9sLmlzTW92ZVRvUG9zaXRpb25BbGxvd2VkO1xuXHRcdGNvbnN0IGN1c3RvbUZ1bmN0aW9uID0gaXNNb3ZlQWxsb3dlZEluZm9cblx0XHRcdD8gRlBNSGVscGVyLmdldEN1c3RvbUZ1bmN0aW9uPChub2RlOiBDb250ZXh0LCBwYXJlbnQ6IENvbnRleHQgfCBudWxsKSA9PiBib29sZWFuPihcblx0XHRcdFx0XHRpc01vdmVBbGxvd2VkSW5mby5tb2R1bGVOYW1lLFxuXHRcdFx0XHRcdGlzTW92ZUFsbG93ZWRJbmZvLm1ldGhvZE5hbWUsXG5cdFx0XHRcdFx0dWk1RXZlbnQuZ2V0U291cmNlKCkuZ2V0UGFyZW50KCkgYXMgQ29udHJvbFxuXHRcdFx0ICApXG5cdFx0XHQ6IHVuZGVmaW5lZDtcblxuXHRcdGlmICh0YXJnZXRDb250ZXh0ID09PSB0aGlzLmdldENvbnRlbnQoKS5nZXRCaW5kaW5nQ29udGV4dCgpKSB7XG5cdFx0XHQvLyBUaGUgZHJhZyBpcyBkb25lIG9uIHRoZSB0YWJsZSBpdHNlbGYgLT4gZHJvcCBhcyByb290IG5vZGUpXG5cdFx0XHRkaXNhYmxlZE9uID0gIXRoaXMuc2FmZUlzTW92ZUFsbG93ZWQoY3VzdG9tRnVuY3Rpb24sIGRyYWdnZWRDb250ZXh0LCBudWxsKTtcblx0XHRcdGRpc2FibGVkQmV0d2VlbiA9IHRydWU7XG5cdFx0fSBlbHNlIHtcblx0XHRcdGRpc2FibGVkT24gPSAhdGhpcy5zYWZlSXNNb3ZlQWxsb3dlZChjdXN0b21GdW5jdGlvbiwgZHJhZ2dlZENvbnRleHQsIHRhcmdldENvbnRleHQpO1xuXHRcdFx0ZGlzYWJsZWRCZXR3ZWVuID0gdGFibGVEZWZpbml0aW9uLmFubm90YXRpb24uYWxsb3dEcm9wQmV0d2Vlbk5vZGVzICE9PSB0cnVlO1xuXG5cdFx0XHRpZiAoXG5cdFx0XHRcdE1hdGguYWJzKHRhcmdldENvbnRleHQuZ2V0SW5kZXgoKSEgLSBkcmFnZ2VkQ29udGV4dC5nZXRJbmRleCgpISkgPT09IDEgJiZcblx0XHRcdFx0ISh0YXJnZXRDb250ZXh0LmdldEluZGV4KCkgPT09IDAgJiYgdWk1RXZlbnQuZ2V0UGFyYW1ldGVyKFwiZHJvcFBvc2l0aW9uXCIpID09PSBcIkJlZm9yZVwiKSAmJlxuXHRcdFx0XHQhKFxuXHRcdFx0XHRcdHRhcmdldENvbnRleHQuZ2V0SW5kZXgoKSA9PT0gdGhpcy5nZXRDb250ZW50KCkuZ2V0Um93QmluZGluZygpLmdldExlbmd0aCgpIC0gMSAmJlxuXHRcdFx0XHRcdHVpNUV2ZW50LmdldFBhcmFtZXRlcihcImRyb3BQb3NpdGlvblwiKSA9PT0gXCJBZnRlclwiXG5cdFx0XHRcdClcblx0XHRcdCkge1xuXHRcdFx0XHQvL1xuXHRcdFx0XHRkaXNhYmxlZEJldHdlZW4gPSB0cnVlO1xuXHRcdFx0fVxuXG5cdFx0XHQvLyBJZiB0aGUgZHJvcCBiZXR3ZWVuIG5vZGUgaXMgYWxsb3dlZCwgd2UgbmVlZCB0byBjaGVjayBpZiB0aGUgdGFyZ2V0IGlzIGEgcm9vdCBub2RlIGFuZCBpZiB0aGUgdGFibGUgc3VwcG9ydHMgY2hhbmdlU2libGluZ0ZvclJvb3RzXG5cdFx0XHRpZiAoXG5cdFx0XHRcdCFkaXNhYmxlZEJldHdlZW4gJiZcblx0XHRcdFx0IXRhYmxlRGVmaW5pdGlvbi5hbm5vdGF0aW9uLmNoYW5nZVNpYmxpbmdGb3JSb290c1N1cHBvcnRlZCAmJlxuXHRcdFx0XHR0YXJnZXRDb250ZXh0LmdldFByb3BlcnR5KFwiQCR1aTUubm9kZS5sZXZlbFwiKSA9PT0gMVxuXHRcdFx0KSB7XG5cdFx0XHRcdGRpc2FibGVkQmV0d2VlbiA9IHRydWU7XG5cdFx0XHR9XG5cblx0XHRcdC8vIENoZWNrIGN1c3RvbSBsb2dpYyBmb3IgZHJvcCBiZXR3ZWVuIGlmIHRoZXJlJ3Mgc29tZSwgYW5kIGlmIGl0J3Mgbm90IGFscmVhZHkgZGlzYWJsZWQgYXQgdGhlIHRhYmxlIGxldmVsXG5cdFx0XHRpZiAoY3VzdG9tRnVuY3Rpb24gJiYgIWRpc2FibGVkQmV0d2Vlbikge1xuXHRcdFx0XHRkaXNhYmxlZEJldHdlZW4gPSAhdGhpcy5pc0Ryb3BCZXR3ZWVuQWxsb3dlZEZvckRyYWcoY3VzdG9tRnVuY3Rpb24sIGRyYWdnZWRDb250ZXh0LCB0YXJnZXRDb250ZXh0KTtcblx0XHRcdH1cblx0XHR9XG5cblx0XHRsZXQgYWxsb3dlZERyb3BQb3NpdGlvbjogRHJvcFBvc2l0aW9uID0gRHJvcFBvc2l0aW9uLk9uT3JCZXR3ZWVuO1xuXHRcdGlmIChkaXNhYmxlZEJldHdlZW4gJiYgZGlzYWJsZWRPbikge1xuXHRcdFx0Ly9TZXQgdGhlIGVsZW1lbnQgYXMgbm9uIGRyb3BwYWJsZVxuXHRcdFx0dWk1RXZlbnQucHJldmVudERlZmF1bHQoKTtcblx0XHRcdHJldHVybjtcblx0XHR9XG5cdFx0aWYgKGRpc2FibGVkQmV0d2Vlbikge1xuXHRcdFx0YWxsb3dlZERyb3BQb3NpdGlvbiA9IERyb3BQb3NpdGlvbi5Pbjtcblx0XHR9IGVsc2UgaWYgKGRpc2FibGVkT24pIHtcblx0XHRcdGFsbG93ZWREcm9wUG9zaXRpb24gPSBEcm9wUG9zaXRpb24uQmV0d2Vlbjtcblx0XHR9XG5cdFx0dWk1RXZlbnQuZ2V0U291cmNlKCkuc2V0RHJvcFBvc2l0aW9uKGFsbG93ZWREcm9wUG9zaXRpb24pO1xuXHR9XG5cblx0LyoqXG5cdCAqIFN0YXJ0cyB0aGUgZHJhZyBvZiB0aGUgZG9jdW1lbnQuXG5cdCAqIEBwYXJhbSB1aTVFdmVudCBVSTUgZXZlbnQgY29taW5nIGZyb20gdGhlIE1EQyBkcmFnIGFuZCBkcm9wIGNvbmZpZ1xuXHQgKi9cblx0X29uRHJhZ1N0YXJ0RG9jdW1lbnQodGhpczogSVRhYmxlQmxvY2sgJiBUYWJsZUhpZXJhcmNoeSwgdWk1RXZlbnQ6IFVJNUV2ZW50PHsgYmluZGluZ0NvbnRleHQ6IENvbnRleHQgfSwgQ29udHJvbD4pOiB2b2lkIHtcblx0XHRjb25zdCBjb250ZXh0ID0gdWk1RXZlbnQuZ2V0UGFyYW1ldGVyKFwiYmluZGluZ0NvbnRleHRcIik7XG5cdFx0Y29uc3QgdXBkYXRhYmxlUHJvcGVydHlQYXRoID0gdGhpcy5nZXRUYWJsZURlZmluaXRpb24oKS5hbm5vdGF0aW9uLnVwZGF0YWJsZVByb3BlcnR5UGF0aDtcblxuXHRcdC8vIENoZWNrIGlmIHRoZSBjb250ZXh0IGNhbiBiZSB1cGRhdGVkIGFjY29yZGluZyB0byB1cGRhdGUgcmVzdHJpY3Rpb25zXG5cdFx0bGV0IGRpc2FibGVEcmFnID0gISF1cGRhdGFibGVQcm9wZXJ0eVBhdGggJiYgIWNvbnRleHQuZ2V0UHJvcGVydHkodXBkYXRhYmxlUHJvcGVydHlQYXRoKTtcblxuXHRcdC8vIEluIGNhc2Ugb2YgYSBUcmVlVGFibGUgaW4gYSBMaXN0UmVwb3J0IHdpdGggZHJhZnQsIGNoZWNrIHRoYXQgdGhlIGNvbnRleHQgaGFzIG5vIGFzc29jaWF0ZWQgZHJhZnRcblx0XHRpZiAoIWRpc2FibGVEcmFnICYmICEoY29udGV4dC5nZXRCaW5kaW5nKCkgYXMgT0RhdGFMaXN0QmluZGluZykuaXNSZWxhdGl2ZSgpKSB7XG5cdFx0XHRkaXNhYmxlRHJhZyA9IGNvbnRleHQuZ2V0UHJvcGVydHkoXCJIYXNEcmFmdEVudGl0eVwiKSA9PT0gdHJ1ZTtcblx0XHR9XG5cblx0XHQvLyBBcHBseSBjdXN0b20gbG9naWMgaWYgdGhlcmUncyBvbmVcblx0XHRjb25zdCBpc01vdmFibGVJbmZvID0gdGhpcy5nZXRUYWJsZURlZmluaXRpb24oKS5jb250cm9sLmlzTm9kZU1vdmFibGU7XG5cdFx0dHJ5IHtcblx0XHRcdGlmIChpc01vdmFibGVJbmZvICYmICFkaXNhYmxlRHJhZykge1xuXHRcdFx0XHRkaXNhYmxlRHJhZyA9XG5cdFx0XHRcdFx0KFxuXHRcdFx0XHRcdFx0RlBNSGVscGVyLmdldEN1c3RvbUZ1bmN0aW9uPChjb250ZXh0czogQ29udGV4dFtdKSA9PiBib29sZWFuPihcblx0XHRcdFx0XHRcdFx0aXNNb3ZhYmxlSW5mby5tb2R1bGVOYW1lLFxuXHRcdFx0XHRcdFx0XHRpc01vdmFibGVJbmZvLm1ldGhvZE5hbWUsXG5cdFx0XHRcdFx0XHRcdHVpNUV2ZW50LmdldFNvdXJjZSgpXG5cdFx0XHRcdFx0XHQpIGFzIEZ1bmN0aW9uXG5cdFx0XHRcdFx0KShjb250ZXh0KSA9PT0gZmFsc2U7XG5cdFx0XHR9XG5cdFx0fSBjYXRjaCAoX2Vycm9yKSB7XG5cdFx0XHRkaXNhYmxlRHJhZyA9IGZhbHNlO1xuXHRcdH1cblx0XHRpZiAoZGlzYWJsZURyYWcpIHtcblx0XHRcdC8vU2V0IHRoZSBlbGVtZW50IGFzIG5vbiBkcmFnZ2FibGVcblx0XHRcdHVpNUV2ZW50LnByZXZlbnREZWZhdWx0KCk7XG5cdFx0fVxuXHR9XG5cblx0LyoqXG5cdCAqIERyb3BzIHRoZSBkb2N1bWVudC5cblx0ICogQHBhcmFtIHVpNUV2ZW50IFVJNSBldmVudCBjb21pbmcgZnJvbSB0aGUgTURDIGRyYWcgYW5kIGRyb3AgY29uZmlnXG5cdCAqIEByZXR1cm5zIFRoZSBQcm9taXNlXG5cdCAqL1xuXHRhc3luYyBfb25Ecm9wRG9jdW1lbnQoXG5cdFx0dGhpczogSVRhYmxlQmxvY2sgJiBUYWJsZUhpZXJhcmNoeSxcblx0XHR1aTVFdmVudDogVUk1RXZlbnQ8e1xuXHRcdFx0YmluZGluZ0NvbnRleHQ6IENvbnRleHQ7XG5cdFx0XHRkcmFnU291cmNlOiBDb250ZXh0O1xuXHRcdFx0ZHJvcFBvc2l0aW9uOiBzdHJpbmc7XG5cdFx0fT5cblx0KTogUHJvbWlzZTx2b2lkPiB7XG5cdFx0QnVzeUxvY2tlci5sb2NrKHRoaXMuZ2V0Q29udGVudCgpKTtcblxuXHRcdHRyeSB7XG5cdFx0XHRjb25zdCBkcm9wcGVkT25Db250ZXh0ID0gdWk1RXZlbnQuZ2V0UGFyYW1ldGVyKFwiYmluZGluZ0NvbnRleHRcIik7XG5cdFx0XHRsZXQgZHJvcEluZm86IERyb3BJbmZvcm1hdGlvbjtcblx0XHRcdGlmIChkcm9wcGVkT25Db250ZXh0ID09PSB0aGlzLmdldENvbnRlbnQoKS5nZXRCaW5kaW5nQ29udGV4dCgpKSB7XG5cdFx0XHRcdC8vIFRoZSBkcm9wIGlzIGRvbmUgb24gdGhlIHRhYmxlIGl0c2VsZiAtPiBkcm9wIGFzIHJvb3Qgbm9kZSlcblx0XHRcdFx0ZHJvcEluZm8gPSB7IHBvc2l0aW9uOiBEcm9wUG9zaXRpb24uT24sIHBhcmVudENvbnRleHQ6IG51bGwgfTtcblx0XHRcdH0gZWxzZSBpZiAodWk1RXZlbnQuZ2V0UGFyYW1ldGVyKFwiZHJvcFBvc2l0aW9uXCIpID09PSBEcm9wUG9zaXRpb24uT24pIHtcblx0XHRcdFx0Ly8gRHJvcCBvbiBhIG5vZGVcblx0XHRcdFx0ZHJvcEluZm8gPSB7IHBvc2l0aW9uOiBEcm9wUG9zaXRpb24uT24sIHBhcmVudENvbnRleHQ6IGRyb3BwZWRPbkNvbnRleHQgfTtcblx0XHRcdH0gZWxzZSB7XG5cdFx0XHRcdC8vIERyb3AgYmV0d2VlbiAyIG5vZGVzXG5cdFx0XHRcdGxldCBjb250ZXh0QmVmb3JlOiBDb250ZXh0IHwgbnVsbDtcblx0XHRcdFx0bGV0IGNvbnRleHRBZnRlcjogQ29udGV4dCB8IG51bGw7XG5cdFx0XHRcdGlmICh1aTVFdmVudC5nZXRQYXJhbWV0ZXIoXCJkcm9wUG9zaXRpb25cIikgPT09IFwiQWZ0ZXJcIikge1xuXHRcdFx0XHRcdGNvbnRleHRCZWZvcmUgPSBkcm9wcGVkT25Db250ZXh0O1xuXHRcdFx0XHRcdGNvbnRleHRBZnRlciA9IHRoaXMuZ2V0Q29udGV4dEFmdGVyKGRyb3BwZWRPbkNvbnRleHQpO1xuXHRcdFx0XHR9IGVsc2Uge1xuXHRcdFx0XHRcdGNvbnRleHRCZWZvcmUgPSB0aGlzLmdldENvbnRleHRCZWZvcmUoZHJvcHBlZE9uQ29udGV4dCk7XG5cdFx0XHRcdFx0Y29udGV4dEFmdGVyID0gZHJvcHBlZE9uQ29udGV4dDtcblx0XHRcdFx0fVxuXHRcdFx0XHRkcm9wSW5mbyA9IHsgcG9zaXRpb246IERyb3BQb3NpdGlvbi5CZXR3ZWVuLCBjb250ZXh0QWZ0ZXIsIGNvbnRleHRCZWZvcmUgfTtcblx0XHRcdH1cblxuXHRcdFx0Y29uc3QgbW92ZWRDb250ZXh0ID0gdWk1RXZlbnQuZ2V0UGFyYW1ldGVyKFwiZHJhZ1NvdXJjZVwiKTtcblx0XHRcdGF3YWl0IFByb21pc2UuYWxsKFt0aGlzLmRyb3BDb250ZXh0KG1vdmVkQ29udGV4dCwgZHJvcEluZm8pLCB0aGlzLnJlcXVlc3RTaWRlRWZmZWN0c0ZvckNoYW5nZU5leHRTaWJsaW5nQWN0aW9uKG1vdmVkQ29udGV4dCldKTtcblx0XHR9IGNhdGNoIChlcnJvcikge1xuXHRcdFx0TWVzc2FnZVRvYXN0LnNob3codGhpcy5nZXRUcmFuc2xhdGVkVGV4dChcIk1fVEFCTEVEUk9QX0ZBSUxFRFwiLCBbXCJcIl0pKTtcblx0XHRcdExvZy5lcnJvcihcIlRoZSBvcGVyYXRpb24gaXMgdW5zdWNjZXNzZnVsLiBcIiArIChlcnJvciBhcyBFcnJvcikubWVzc2FnZSA/PyBcIlwiKTtcblx0XHR9IGZpbmFsbHkge1xuXHRcdFx0QnVzeUxvY2tlci51bmxvY2sodGhpcy5nZXRDb250ZW50KCkpO1xuXHRcdH1cblx0fVxuXG5cdC8qKlxuXHQgKiBIYW5kbGVyIGZvciBjb2xsYXBzZS9leHBhbmQgZnJvbSB0aGUgY29udGV4dCBtZW51LlxuXHQgKiBAcGFyYW0gdGhpc1xuXHQgKiBAcGFyYW0gX3VpNUV2ZW50XG5cdCAqIEBwYXJhbSBleHBhbmRcblx0ICovXG5cdGFzeW5jIF9vbkNvbGxhcHNlRXhwYW5kTm9kZSh0aGlzOiBJVGFibGVCbG9jayAmIFRhYmxlSGllcmFyY2h5LCBfdWk1RXZlbnQ6IFVJNUV2ZW50LCBleHBhbmQ6IGJvb2xlYW4pOiBQcm9taXNlPHZvaWQ+IHtcblx0XHRjb25zdCBzZWxlY3RlZENvbnRleHRzID0gdGhpcy5nZXRTZWxlY3RlZENvbnRleHRzKCk7XG5cdFx0aWYgKGV4cGFuZCkge1xuXHRcdFx0Y29uc3QgcHJvbWlzZUFycmF5ID0gc2VsZWN0ZWRDb250ZXh0cy5tYXAoYXN5bmMgKHNpbmdsZUNvbnRleHQ6IENvbnRleHQpID0+IHtcblx0XHRcdFx0Ly8gQ2hlY2tpbmcgZm9yIGZhbHNlIHNwZWNpZmljYWxseTsgdW5kZWZpbmVkIG1lYW5zIHRoZSBub2RlIGNhbm5vdCBleHBhbmQvY29sbGFwc2Vcblx0XHRcdFx0aWYgKHNpbmdsZUNvbnRleHQuaXNFeHBhbmRlZCgpICE9PSB1bmRlZmluZWQpIHtcblx0XHRcdFx0XHQvLyBUZW1wb3Jhcnkgd29ya2Fyb3VuZCBkdWUgdG8gbW9kZWwgbGltaXRhdGlvbi5cblx0XHRcdFx0XHQvLyBXZSBuZWVkIHRvIGNvbGxhcHNlIGEgbm9kZSBiZWZvcmUgZXhwYW5kaW5nIGl0IHRvIGVuc3VyZSB3ZSBleHBhbmQgaXQgY29tcGxldGVseS5cblx0XHRcdFx0XHQvLyBXaWxsIGJlIGNoYW5nZWQgb25jZSB0aGUgbW9kZWwgZml4ZXMgdGhlIGlzc3VlLlxuXHRcdFx0XHRcdGlmIChzaW5nbGVDb250ZXh0LmlzRXhwYW5kZWQoKSA9PT0gdHJ1ZSkge1xuXHRcdFx0XHRcdFx0YXdhaXQgc2luZ2xlQ29udGV4dC5jb2xsYXBzZSgpO1xuXHRcdFx0XHRcdH1cblx0XHRcdFx0XHRyZXR1cm4gc2luZ2xlQ29udGV4dC5leHBhbmQoTnVtYmVyLk1BWF9TQUZFX0lOVEVHRVIpO1xuXHRcdFx0XHR9XG5cdFx0XHR9KTtcblx0XHRcdGF3YWl0IFByb21pc2UuYWxsKHByb21pc2VBcnJheSk7XG5cdFx0fSBlbHNlIHtcblx0XHRcdGF3YWl0IFByb21pc2UuYWxsKFxuXHRcdFx0XHRzZWxlY3RlZENvbnRleHRzLm1hcChhc3luYyAoc2luZ2xlQ29udGV4dDogQ29udGV4dCkgPT4ge1xuXHRcdFx0XHRcdGlmIChzaW5nbGVDb250ZXh0LmlzRXhwYW5kZWQoKSA9PT0gdHJ1ZSkge1xuXHRcdFx0XHRcdFx0cmV0dXJuIHNpbmdsZUNvbnRleHQuY29sbGFwc2UodHJ1ZSk7XG5cdFx0XHRcdFx0fVxuXHRcdFx0XHR9KVxuXHRcdFx0KTtcblx0XHR9XG5cdH1cblxuXHQvKipcblx0ICogSW50ZXJuYWwgbWV0aG9kIHRvIG1vdmUgYSByb3cgdXAgb3IgZG93biBpbiBhIFRyZWUgdGFibGUuXG5cdCAqIEBwYXJhbSBfdWk1RXZlbnRcblx0ICogQHBhcmFtIG1vdmVVcCBUcnVlIGZvciBtb3ZlIHVwLCBmYWxzZSBmb3IgbW92ZSBkb3duXG5cdCAqIEBwYXJhbSBmb3JDb250ZXh0TWVudVxuXHQgKi9cblx0YXN5bmMgX29uTW92ZVVwRG93bih0aGlzOiBJVGFibGVCbG9jayAmIFRhYmxlSGllcmFyY2h5LCBfdWk1RXZlbnQ6IFVJNUV2ZW50LCBtb3ZlVXA6IGJvb2xlYW4sIGZvckNvbnRleHRNZW51ID0gZmFsc2UpOiBQcm9taXNlPHZvaWQ+IHtcblx0XHRjb25zdCBzZWxlY3RlZENvbnRleHRzID0gdGhpcy5nZXRTZWxlY3RlZENvbnRleHRzKCk7XG5cdFx0aWYgKHNlbGVjdGVkQ29udGV4dHMubGVuZ3RoICE9PSAxKSB7XG5cdFx0XHRyZXR1cm47XG5cdFx0fVxuXHRcdGNvbnN0IG1kY1RhYmxlID0gdGhpcy5nZXRDb250ZW50KCk7XG5cdFx0bWRjVGFibGUuc2V0QnVzeSh0cnVlKTtcblxuXHRcdC8vIE1vdmUgdGhlIGNvbnRleHQgdXAgb3IgZG93blxuXHRcdGNvbnN0IG1vdmVkQ29udGV4dCA9IHNlbGVjdGVkQ29udGV4dHNbMF07XG5cdFx0Y29uc3QgcGFyZW50Q29udGV4dCA9IGF3YWl0IG1vdmVkQ29udGV4dC5yZXF1ZXN0UGFyZW50KCk7XG5cdFx0bGV0IGNvbnRleHRNb3ZlZCA9IGZhbHNlO1xuXHRcdGxldCBtb3ZlUHJvbWlzZSA9IG51bGw7XG5cdFx0aWYgKG1vdmVVcCkge1xuXHRcdFx0Y29uc3QgcHJldmlvdXNTaWJsaW5nID0gYXdhaXQgbW92ZWRDb250ZXh0LnJlcXVlc3RTaWJsaW5nKC0xKTtcblx0XHRcdGlmIChwcmV2aW91c1NpYmxpbmcpIHtcblx0XHRcdFx0bW92ZVByb21pc2UgPSBtb3ZlZENvbnRleHQubW92ZSh7IG5leHRTaWJsaW5nOiBwcmV2aW91c1NpYmxpbmcsIHBhcmVudDogcGFyZW50Q29udGV4dCB9KTtcblx0XHRcdFx0Y29udGV4dE1vdmVkID0gdHJ1ZTtcblx0XHRcdH1cblx0XHR9IGVsc2Uge1xuXHRcdFx0Y29uc3QgbmV4dFNpYmxpbmcgPSBhd2FpdCBtb3ZlZENvbnRleHQucmVxdWVzdFNpYmxpbmcoMSk7XG5cdFx0XHRpZiAobmV4dFNpYmxpbmcpIHtcblx0XHRcdFx0bW92ZVByb21pc2UgPSBuZXh0U2libGluZy5tb3ZlKHsgbmV4dFNpYmxpbmc6IG1vdmVkQ29udGV4dCwgcGFyZW50OiBwYXJlbnRDb250ZXh0IH0pO1xuXHRcdFx0XHRjb250ZXh0TW92ZWQgPSB0cnVlO1xuXHRcdFx0fVxuXHRcdH1cblxuXHRcdGF3YWl0IFByb21pc2UuYWxsKFttb3ZlUHJvbWlzZSwgdGhpcy5yZXF1ZXN0U2lkZUVmZmVjdHNGb3JDaGFuZ2VOZXh0U2libGluZ0FjdGlvbihtb3ZlZENvbnRleHQpXSk7XG5cblx0XHQvLyBTY3JvbGwgdG8gdGhlIG5ldyBwb3NpdGlvblxuXHRcdGNvbnN0IG5ld0luZGV4ID0gbW92ZWRDb250ZXh0LmdldEluZGV4KCk7XG5cdFx0aWYgKGNvbnRleHRNb3ZlZCAmJiBuZXdJbmRleCAhPT0gdW5kZWZpbmVkICYmIG5ld0luZGV4ID49IDApIHtcblx0XHRcdGlmICghZm9yQ29udGV4dE1lbnUpIHtcblx0XHRcdFx0bWRjVGFibGUuc2Nyb2xsVG9JbmRleChuZXdJbmRleCk7XG5cdFx0XHR9IGVsc2Uge1xuXHRcdFx0XHRtZGNUYWJsZS5mb2N1c1JvdyhuZXdJbmRleCk7XG5cdFx0XHR9XG5cdFx0fVxuXHRcdG1kY1RhYmxlLnNldEJ1c3koZmFsc2UpO1xuXHR9XG5cblx0LyoqXG5cdCAqIFJlcXVlc3RzIHRoZSBzaWRlIGVmZmVjdCBmb3IgdGhlIENoYW5nZU5leHRTaWJsaW5nQWN0aW9uLlxuXHQgKiBAcGFyYW0gbW92ZWRDb250ZXh0IFRoZSBjb250ZXh0IHRoYXQgaGFzIGJlZW4gbW92ZWRcblx0ICogQHJldHVybnMgQSBQcm9taXNlXG5cdCAqL1xuXHRhc3luYyByZXF1ZXN0U2lkZUVmZmVjdHNGb3JDaGFuZ2VOZXh0U2libGluZ0FjdGlvbih0aGlzOiBJVGFibGVCbG9jayAmIFRhYmxlSGllcmFyY2h5LCBtb3ZlZENvbnRleHQ6IENvbnRleHQpOiBQcm9taXNlPHZvaWQ+IHtcblx0XHRyZXR1cm4gdGhpcy5fcmVxdWVzdFNpZGVFZmZlY3RzRm9ySGllcmFyY2h5QWN0aW9ucyhtb3ZlZENvbnRleHQsIFwiQ2hhbmdlTmV4dFNpYmxpbmdBY3Rpb25cIik7XG5cdH1cblxuXHQvKipcblx0ICogUmVxdWVzdHMgdGhlIHNpZGUgZWZmZWN0IGZvciB0aGUgQ29weUFjdGlvbi5cblx0ICogQHBhcmFtIG1vdmVkQ29udGV4dCBUaGUgY29udGV4dCB0aGF0IGhhcyBiZWVuIG1vdmVkXG5cdCAqIEByZXR1cm5zIEEgUHJvbWlzZVxuXHQgKi9cblx0YXN5bmMgcmVxdWVzdFNpZGVFZmZlY3RzRm9yQ29weUFjdGlvbih0aGlzOiBJVGFibGVCbG9jayAmIFRhYmxlSGllcmFyY2h5LCBtb3ZlZENvbnRleHQ6IENvbnRleHQpOiBQcm9taXNlPHZvaWQ+IHtcblx0XHRyZXR1cm4gdGhpcy5fcmVxdWVzdFNpZGVFZmZlY3RzRm9ySGllcmFyY2h5QWN0aW9ucyhtb3ZlZENvbnRleHQsIFwiQ29weUFjdGlvblwiKTtcblx0fVxuXG5cdC8qKlxuXHQgKiBSZXF1ZXN0cyB0aGUgc2lkZSBlZmZlY3QgZm9yIHRoZSBDb3B5QWN0aW9uIG9yIENoYW5nZU5leHRTaWJsaW5nQWN0aW9uLlxuXHQgKiBAcGFyYW0gbW92ZWRDb250ZXh0IFRoZSBjb250ZXh0IHRoYXQgaGFzIGJlZW4gbW92ZWRcblx0ICogQHBhcmFtIGFjdGlvblxuXHQgKiBAcmV0dXJucyBBIFByb21pc2Vcblx0ICovXG5cdGFzeW5jIF9yZXF1ZXN0U2lkZUVmZmVjdHNGb3JIaWVyYXJjaHlBY3Rpb25zKFxuXHRcdHRoaXM6IElUYWJsZUJsb2NrICYgVGFibGVIaWVyYXJjaHksXG5cdFx0bW92ZWRDb250ZXh0OiBDb250ZXh0LFxuXHRcdGFjdGlvbjogXCJDaGFuZ2VOZXh0U2libGluZ0FjdGlvblwiIHwgXCJDb3B5QWN0aW9uXCJcblx0KTogUHJvbWlzZTx2b2lkPiB7XG5cdFx0Y29uc3QgZW50aXR5UGF0aCA9IHRoaXMuZ2V0Q29udGVudCgpLmRhdGEoXCJtZXRhUGF0aFwiKTtcblx0XHRjb25zdCBtZXRhTW9kZWwgPSBtb3ZlZENvbnRleHQuZ2V0TW9kZWwoKS5nZXRNZXRhTW9kZWwoKTtcblxuXHRcdGNvbnN0IHRhcmdldE9iamVjdCA9IG1ldGFNb2RlbC5nZXRDb250ZXh0KGVudGl0eVBhdGgpO1xuXHRcdGNvbnN0IGNvbnZlcnRNZXRhTW9kZWxDb250ZXh0ID0gTWV0YU1vZGVsQ29udmVydGVyLmNvbnZlcnRNZXRhTW9kZWxDb250ZXh0KHRhcmdldE9iamVjdCkgYXMgTmF2aWdhdGlvblByb3BlcnR5IHwgRW50aXR5U2V0O1xuXHRcdGNvbnN0IGVudGl0eVR5cGUgPSAoY29udmVydE1ldGFNb2RlbENvbnRleHQgYXMgTmF2aWdhdGlvblByb3BlcnR5KS50YXJnZXRUeXBlID8/IChjb252ZXJ0TWV0YU1vZGVsQ29udGV4dCBhcyBFbnRpdHlTZXQpLmVudGl0eVR5cGU7XG5cdFx0Y29uc3QgYWN0aW9uTmFtZSA9IGVudGl0eVR5cGUuYW5ub3RhdGlvbnMuSGllcmFyY2h5Py5bXG5cdFx0XHRgUmVjdXJzaXZlSGllcmFyY2h5QWN0aW9ucyMke3RoaXMuZ2V0VGFibGVEZWZpbml0aW9uKCkuY29udHJvbC5oaWVyYXJjaHlRdWFsaWZpZXIgPz8gXCJcIn1gXG5cdFx0XT8uW2FjdGlvbl0gYXMgc3RyaW5nIHwgdW5kZWZpbmVkO1xuXG5cdFx0aWYgKGFjdGlvbk5hbWUpIHtcblx0XHRcdGNvbnN0IGFwcENvbXBvbmVudCA9IENvbW1vblV0aWxzLmdldEFwcENvbXBvbmVudCh0aGlzLmdldENvbnRlbnQoKSk7XG5cdFx0XHRjb25zdCBzaWRlRWZmZWN0c1NlcnZpY2UgPSBhcHBDb21wb25lbnQuZ2V0U2lkZUVmZmVjdHNTZXJ2aWNlKCk7XG5cdFx0XHRjb25zdCBzaWRlRWZmZWN0cyA9IHNpZGVFZmZlY3RzU2VydmljZS5nZXRPRGF0YUFjdGlvblNpZGVFZmZlY3RzKGFjdGlvbk5hbWUsIG1vdmVkQ29udGV4dCk7XG5cdFx0XHRpZiAoc2lkZUVmZmVjdHMpIHtcblx0XHRcdFx0YXdhaXQgc2lkZUVmZmVjdHNTZXJ2aWNlLnJlcXVlc3RTaWRlRWZmZWN0c0Zvck9EYXRhQWN0aW9uKHNpZGVFZmZlY3RzLCBtb3ZlZENvbnRleHQpO1xuXHRcdFx0fVxuXHRcdH1cblx0fVxuXG5cdC8qKlxuXHQgKiBTYWZlbHkgY2hlY2tzIGlmIG1vdmluZyBhIG5vZGUgaXMgYWxsb3dlZC5cblx0ICogQHBhcmFtIGN1c3RvbUZ1bmN0aW9uXG5cdCAqIEBwYXJhbSBtb3ZlZENvbnRleHRcblx0ICogQHBhcmFtIHBhcmVudENvbnRleHRcblx0ICogQHJldHVybnMgVHJ1ZSBpZiBhbGxvd2VkXG5cdCAqL1xuXHRwcml2YXRlIHNhZmVJc01vdmVBbGxvd2VkKFxuXHRcdGN1c3RvbUZ1bmN0aW9uOiAoKGNvbnRleHQ6IENvbnRleHQsIHBhcmVudDogQ29udGV4dCB8IG51bGwpID0+IGJvb2xlYW4pIHwgdW5kZWZpbmVkLFxuXHRcdG1vdmVkQ29udGV4dDogQ29udGV4dCxcblx0XHRwYXJlbnRDb250ZXh0OiBDb250ZXh0IHwgbnVsbFxuXHQpOiBib29sZWFuIHtcblx0XHRpZiAoIWN1c3RvbUZ1bmN0aW9uKSB7XG5cdFx0XHRyZXR1cm4gdHJ1ZTtcblx0XHR9XG5cblx0XHRsZXQgYWxsb3dlZCA9IHRydWU7XG5cdFx0dHJ5IHtcblx0XHRcdGFsbG93ZWQgPSBjdXN0b21GdW5jdGlvbihtb3ZlZENvbnRleHQsIHBhcmVudENvbnRleHQpID09PSB0cnVlO1xuXHRcdH0gY2F0Y2ggKGVycm9yKSB7XG5cdFx0XHRMb2cuZXJyb3IoXCJDYW5ub3QgZXhlY3V0ZSBmdW5jdGlvbiByZWxhdGVkIHRvIGlzTW92ZVRvUG9zaXRpb25BbGxvd2VkXCIsIGVycm9yIGFzIHN0cmluZyk7XG5cdFx0XHRhbGxvd2VkID0gdHJ1ZTtcblx0XHR9XG5cblx0XHRyZXR1cm4gYWxsb3dlZDtcblx0fVxuXG5cdC8qKlxuXHQgKiBDaGVja3MgaXMgZHJvcCBcImJldHdlZW5cIiBpcyBhbGxvd2VkIGJ5IGN1c3RvbSBsb2dpYyBmb3IgYSBnaXZlbiB0YXJnZXRDb250ZXh0LlxuXHQgKiBAcGFyYW0gY3VzdG9tRnVuY3Rpb25cblx0ICogQHBhcmFtIGRyYWdnZWRDb250ZXh0XG5cdCAqIEBwYXJhbSB0YXJnZXRDb250ZXh0XG5cdCAqIEByZXR1cm5zIFRydWUgaWYgYWxsb3dlZFxuXHQgKi9cblx0cHJpdmF0ZSBpc0Ryb3BCZXR3ZWVuQWxsb3dlZEZvckRyYWcoXG5cdFx0Y3VzdG9tRnVuY3Rpb246IChjb250ZXh0OiBDb250ZXh0LCBwYXJlbnQ6IENvbnRleHQgfCBudWxsKSA9PiBib29sZWFuLFxuXHRcdGRyYWdnZWRDb250ZXh0OiBDb250ZXh0LFxuXHRcdHRhcmdldENvbnRleHQ6IENvbnRleHRcblx0KTogYm9vbGVhbiB7XG5cdFx0bGV0IGlzQWxsb3dlZCA9IHRydWU7XG5cblx0XHQvLyBEZXRlcm1pbmUgd2hhdCB0byBkbyBpZiB3ZSBkcm9wIGJlZm9yZSB0YXJnZXRDb250ZXh0XG5cdFx0Y29uc3QgY29udGV4dEJlZm9yZSA9IHRoaXMuZ2V0Q29udGV4dEJlZm9yZSh0YXJnZXRDb250ZXh0KTtcblx0XHRjb25zdCBwYXJlbnRCZWZvcmUgPSBjb250ZXh0QmVmb3JlID09PSBudWxsID8gbnVsbCA6IGNvbnRleHRCZWZvcmUuZ2V0UGFyZW50KCk7XG5cdFx0Y29uc3QgcGFyYW1zQmVmb3JlID0gdGhpcy5nZXREcm9wQmV0d2VlblBhcmFtZXRlcnMoY29udGV4dEJlZm9yZSwgcGFyZW50QmVmb3JlLCB0YXJnZXRDb250ZXh0LCB0YXJnZXRDb250ZXh0LmdldFBhcmVudCgpKTtcblxuXHRcdC8vIERldGVybWluZSB3aGF0IHRvIGRvIGlmIHdlIGRyb3AgYWZ0ZXIgdGFyZ2V0Q29udGV4dFxuXHRcdGNvbnN0IGNvbnRleHRBZnRlciA9IHRoaXMuZ2V0Q29udGV4dEFmdGVyKHRhcmdldENvbnRleHQpO1xuXHRcdGNvbnN0IHBhcmVudEFmdGVyID0gY29udGV4dEFmdGVyID09PSBudWxsID8gbnVsbCA6IGNvbnRleHRBZnRlci5nZXRQYXJlbnQoKTtcblx0XHRjb25zdCBwYXJhbXNBZnRlciA9IHRoaXMuZ2V0RHJvcEJldHdlZW5QYXJhbWV0ZXJzKHRhcmdldENvbnRleHQsIHRhcmdldENvbnRleHQuZ2V0UGFyZW50KCksIGNvbnRleHRBZnRlciwgcGFyZW50QWZ0ZXIpO1xuXG5cdFx0Ly8gSWYgcGFyYW1zQmVmb3JlIG9yIHBhcmFtc0FmdGVyIGNhbm5vdCBiZSBkZXRlcm1pbmVkIChiZWNhdXNlIHBhcmVudHMgYXJlIG5vdCBsb2FkZWQpLCB3ZSBhbGxvdyBkcm9wIGJldHdlZW4gYW5kIGRvIHRoZSByZWFsIGNoZWNrIGluIG9uRHJvcERvY3VtZW50XG5cdFx0aWYgKHBhcmFtc0JlZm9yZSAhPT0gdW5kZWZpbmVkICYmIHBhcmFtc0FmdGVyICE9PSB1bmRlZmluZWQpIHtcblx0XHRcdGlmIChwYXJhbXNCZWZvcmUucGFyZW50ID09PSBwYXJhbXNBZnRlci5wYXJlbnQpIHtcblx0XHRcdFx0Ly8gRHJvcHBpbmcgYmVmb3JlIG9yIGFmdGVyIHdpbGwgbW92ZSB1bmRlciB0aGUgc2FtZSBwYXJlbnQgLS0+IHdlIGNhbGwgdGhlIGN1c3RvbSBsb2dpYyBvbmx5IG9uY2Vcblx0XHRcdFx0aXNBbGxvd2VkID0gdGhpcy5zYWZlSXNNb3ZlQWxsb3dlZChjdXN0b21GdW5jdGlvbiwgZHJhZ2dlZENvbnRleHQsIHBhcmFtc0JlZm9yZS5wYXJlbnQpO1xuXHRcdFx0fSBlbHNlIHtcblx0XHRcdFx0Ly8gQXMgdGhlIE1EQyB0YWJsZSBjYW5ub3QgZGlzYWJsZSBkcm9wIGJlZm9yZSBhbmQgYWZ0ZXIgc2VwYXJhdGVseSwgd2UgZGlzYWJsZSBkcm9wIGJldHdlZW4gb25seSBpZiBib3RoIGRyb3AgYmVmb3JlIGFuZCBhZnRlciBhcmUgZm9yYmlkZGVuXG5cdFx0XHRcdGlzQWxsb3dlZCA9XG5cdFx0XHRcdFx0dGhpcy5zYWZlSXNNb3ZlQWxsb3dlZChjdXN0b21GdW5jdGlvbiwgZHJhZ2dlZENvbnRleHQsIHBhcmFtc0JlZm9yZS5wYXJlbnQpIHx8XG5cdFx0XHRcdFx0dGhpcy5zYWZlSXNNb3ZlQWxsb3dlZChjdXN0b21GdW5jdGlvbiwgZHJhZ2dlZENvbnRleHQsIHBhcmFtc0FmdGVyLnBhcmVudCk7XG5cdFx0XHR9XG5cdFx0fVxuXG5cdFx0cmV0dXJuIGlzQWxsb3dlZDtcblx0fVxuXG5cdC8qKlxuXHQgKiBSZXR1cm5zIHRoZSBjb250ZXh0IHRoYXQgaXMgcGxhY2VkIGJlZm9yZSBhIGdpdmVuIGNvbnRleHQgaW4gYSBMaXN0QmluZGluZy5cblx0ICogQHBhcmFtIGNvbnRleHRcblx0ICogQHJldHVybnMgVGhlIGNvbnRleHQgYmVmb3JlLCBvciBudWxsXG5cdCAqL1xuXHRwcml2YXRlIGdldENvbnRleHRCZWZvcmUoY29udGV4dDogQ29udGV4dCk6IENvbnRleHQgfCBudWxsIHtcblx0XHRjb25zdCBjb250ZXh0SW5kZXggPSBjb250ZXh0LmdldEluZGV4KCk7XG5cdFx0aWYgKGNvbnRleHRJbmRleCA9PT0gdW5kZWZpbmVkKSB7XG5cdFx0XHR0aHJvdyBuZXcgRXJyb3IoXCJVbmV4cGVjdGVkIGVycm9yXCIpO1xuXHRcdH1cblxuXHRcdGNvbnN0IGxpc3RCaW5kaW5nID0gY29udGV4dC5nZXRCaW5kaW5nKCkgYXMgT0RhdGFMaXN0QmluZGluZztcblx0XHRyZXR1cm4gY29udGV4dEluZGV4ID09PSAwXG5cdFx0XHQ/IG51bGxcblx0XHRcdDogbGlzdEJpbmRpbmcuZ2V0QWxsQ3VycmVudENvbnRleHRzKCkuZmluZCgoY3R4KSA9PiB7XG5cdFx0XHRcdFx0cmV0dXJuIGN0eC5nZXRJbmRleCgpID09PSBjb250ZXh0SW5kZXggLSAxO1xuXHRcdFx0ICB9KSA/PyBudWxsO1xuXHR9XG5cblx0LyoqXG5cdCAqIFJldHVybnMgdGhlIGNvbnRleHQgdGhhdCBpcyBwbGFjZWQgYWZ0ZXIgYSBnaXZlbiBjb250ZXh0IGluIGEgTGlzdEJpbmRpbmcuXG5cdCAqIEBwYXJhbSBjb250ZXh0XG5cdCAqIEByZXR1cm5zIFRoZSBjb250ZXh0IGFmdGVyLCBvciBudWxsXG5cdCAqL1xuXHRwcml2YXRlIGdldENvbnRleHRBZnRlcihjb250ZXh0OiBDb250ZXh0KTogQ29udGV4dCB8IG51bGwge1xuXHRcdGNvbnN0IGNvbnRleHRJbmRleCA9IGNvbnRleHQuZ2V0SW5kZXgoKTtcblx0XHRpZiAoY29udGV4dEluZGV4ID09PSB1bmRlZmluZWQpIHtcblx0XHRcdHRocm93IG5ldyBFcnJvcihcIlVuZXhwZWN0ZWQgZXJyb3JcIik7XG5cdFx0fVxuXG5cdFx0Y29uc3QgbGlzdEJpbmRpbmcgPSBjb250ZXh0LmdldEJpbmRpbmcoKSBhcyBPRGF0YUxpc3RCaW5kaW5nO1xuXHRcdHJldHVybiAoXG5cdFx0XHRsaXN0QmluZGluZy5nZXRBbGxDdXJyZW50Q29udGV4dHMoKS5maW5kKChjdHgpID0+IHtcblx0XHRcdFx0cmV0dXJuIGN0eC5nZXRJbmRleCgpID09PSBjb250ZXh0SW5kZXggKyAxO1xuXHRcdFx0fSkgPz8gbnVsbFxuXHRcdCk7XG5cdH1cblxuXHQvKipcblx0ICogUmV0dXJucyBpbmZvcm1hdGlvbiB0byBwZXJmb3JtIGEgZHJvcCBiZXR3ZWVuIDIgbm9kZXM6IHRoZSBuZXcgcGFyZW50IGFuZCB0aGUgbmV4dCBzaWJsaW5nLlxuXHQgKiBAcGFyYW0gY29udGV4dEJlZm9yZSBDb250ZXh0IGFmdGVyIHdoaWNoIHRoZSBkcm9wIGlzIGRvbmVcblx0ICogQHBhcmFtIHBhcmVudEJlZm9yZSBQYXJlbnQgb2YgY29udGV4dEJlZm9yZSAodW5kZWZpbmVkIGlmIG5vdCBrbm93bilcblx0ICogQHBhcmFtIGNvbnRleHRBZnRlciBDb250ZXh0IGJlZm9yZSB3aGljaCB0aGUgZHJvcCBpcyBkb25lXG5cdCAqIEBwYXJhbSBwYXJlbnRBZnRlciBQYXJlbnQgb2YgY29udGV4dEFmdGVyICh1bmRlZmluZWQgaWYgbm90IGtub3duKVxuXHQgKiBAcmV0dXJucyBUaGUgbmV3IHBhcmVudCBhbmQgdGhlIG5leHQgc2libGluZywgb3IgdW5kZWZpbmVkIGlmIGl0IGNhbm5vdCBiZSBkZXRlcm1pbmVkXG5cdCAqL1xuXHRwcml2YXRlIGdldERyb3BCZXR3ZWVuUGFyYW1ldGVycyhcblx0XHRjb250ZXh0QmVmb3JlOiBDb250ZXh0IHwgbnVsbCxcblx0XHRwYXJlbnRCZWZvcmU6IENvbnRleHQgfCBudWxsIHwgdW5kZWZpbmVkLFxuXHRcdGNvbnRleHRBZnRlcjogQ29udGV4dCB8IG51bGwsXG5cdFx0cGFyZW50QWZ0ZXI6IENvbnRleHQgfCBudWxsIHwgdW5kZWZpbmVkXG5cdCk6IHsgcGFyZW50OiBDb250ZXh0IHwgbnVsbDsgbmV4dFNpYmxpbmc/OiBDb250ZXh0IHwgbnVsbCB9IHwgdW5kZWZpbmVkIHtcblx0XHRpZiAoY29udGV4dEJlZm9yZSA9PT0gbnVsbCkge1xuXHRcdFx0Ly8gRHJvcCBiZWZvcmUgZmlyc3Qgbm9kZSAtLT4gbW92ZSBhcyBmaXJzdCByb290IG5vZGVcblx0XHRcdHJldHVybiB7IHBhcmVudDogbnVsbCwgbmV4dFNpYmxpbmc6IGNvbnRleHRBZnRlciB9O1xuXHRcdH0gZWxzZSBpZiAoY29udGV4dEFmdGVyID09PSBudWxsKSB7XG5cdFx0XHQvLyBEcm9wIGFmdGVyIGxhc3Qgbm9kZSAtLT4gbW92ZSBhcyBuZXh0IHNpYmxpbmcgb2YgdGhlIGxhc3Qgbm9kZVxuXHRcdFx0cmV0dXJuIHBhcmVudEJlZm9yZSAhPT0gdW5kZWZpbmVkID8geyBwYXJlbnQ6IHBhcmVudEJlZm9yZSwgbmV4dFNpYmxpbmc6IG51bGwgfSA6IHVuZGVmaW5lZDtcblx0XHR9IGVsc2UgaWYgKHBhcmVudEFmdGVyID09PSBjb250ZXh0QmVmb3JlKSB7XG5cdFx0XHQvLyBEcm9wIGJldHdlZW4gYSBwYXJlbnQgYW5kIGl0cyBmaXJzdCBjaGlsZCAtLT4gbW92ZSBhcyBmaXJzdCBjaGlsZCBvZiB0aGUgcGFyZW50XG5cdFx0XHRyZXR1cm4geyBwYXJlbnQ6IGNvbnRleHRCZWZvcmUsIG5leHRTaWJsaW5nOiBjb250ZXh0QWZ0ZXIgfTtcblx0XHR9IGVsc2UgaWYgKHBhcmVudEJlZm9yZSA9PT0gdW5kZWZpbmVkIHx8IHBhcmVudEFmdGVyID09PSB1bmRlZmluZWQpIHtcblx0XHRcdC8vIElmIG9uZSBvZiB0aGUgcGFyZW50IGlzIG5vdCBrbm93biwgd2UgZG9uJ3Qga25vdyB3aGF0IHRvIGRvXG5cdFx0XHRyZXR1cm4gdW5kZWZpbmVkO1xuXHRcdH0gZWxzZSBpZiAocGFyZW50QmVmb3JlID09PSBwYXJlbnRBZnRlcikge1xuXHRcdFx0Ly8gRHJvcCBiZXR3ZWVuIDIgc2libGluZ3Ncblx0XHRcdHJldHVybiB7IHBhcmVudDogcGFyZW50QmVmb3JlLCBuZXh0U2libGluZzogY29udGV4dEFmdGVyIH07XG5cdFx0fSBlbHNlIHtcblx0XHRcdC8vIE5vZGVYXG5cdFx0XHQvLyAgLi4uLlxuXHRcdFx0Ly8gICAgIHwtLSBjb250ZXh0QmVmb3JlXG5cdFx0XHQvLyBjb250ZXh0QWZ0ZXJcblx0XHRcdC8vIC0tPiBNb3ZlIGFzIHRoZSBuZXh0IHNpYmxpbmcgb2YgY29udGV4dEJlZm9yZVxuXHRcdFx0cmV0dXJuIHsgcGFyZW50OiBwYXJlbnRCZWZvcmUsIG5leHRTaWJsaW5nOiBudWxsIH07XG5cdFx0fVxuXHR9XG5cblx0LyoqXG5cdCAqIEludGVybmFsIG1ldGhvZCB0byBkcm9wIGEgY29udGV4dCBvbiBvciBiZXR3ZWVuIDIgbm9kZXMuXG5cdCAqIEBwYXJhbSBjb250ZXh0XG5cdCAqIEBwYXJhbSBpbmZvXG5cdCAqIEByZXR1cm5zIFRoZSBtb3ZlIFByb21pc2Vcblx0ICovXG5cdHByaXZhdGUgYXN5bmMgZHJvcENvbnRleHQodGhpczogSVRhYmxlQmxvY2sgJiBUYWJsZUhpZXJhcmNoeSwgY29udGV4dDogQ29udGV4dCwgaW5mbzogRHJvcEluZm9ybWF0aW9uKTogUHJvbWlzZTx2b2lkPiB7XG5cdFx0Y29uc3QgaXNNb3ZlQWxsb3dlZEluZm8gPSB0aGlzLmdldFRhYmxlRGVmaW5pdGlvbigpLmNvbnRyb2wuaXNNb3ZlVG9Qb3NpdGlvbkFsbG93ZWQ7XG5cdFx0Y29uc3QgY3VzdG9tRnVuY3Rpb24gPSBpc01vdmVBbGxvd2VkSW5mb1xuXHRcdFx0PyBGUE1IZWxwZXIuZ2V0Q3VzdG9tRnVuY3Rpb248KG5vZGU6IENvbnRleHQsIHBhcmVudDogQ29udGV4dCB8IG51bGwpID0+IGJvb2xlYW4+KFxuXHRcdFx0XHRcdGlzTW92ZUFsbG93ZWRJbmZvLm1vZHVsZU5hbWUsXG5cdFx0XHRcdFx0aXNNb3ZlQWxsb3dlZEluZm8ubWV0aG9kTmFtZSxcblx0XHRcdFx0XHR0aGlzLmdldENvbnRlbnQoKVxuXHRcdFx0ICApXG5cdFx0XHQ6IHVuZGVmaW5lZDtcblx0XHRjb25zdCB0YWJsZSA9IHRoaXMuZ2V0Q29udGVudCgpO1xuXHRcdHRhYmxlLnNldEJ1c3kodHJ1ZSk7XG5cdFx0Y29uc3QgaW50ZXJuYWxNb2RlbENvbnRleHQgPSB0YWJsZS5nZXRCaW5kaW5nQ29udGV4dChcImludGVybmFsXCIpIGFzIEludGVybmFsTW9kZWxDb250ZXh0O1xuXHRcdGNvbnN0IGlzVGFibGVTb3J0ZWQgPSBpbnRlcm5hbE1vZGVsQ29udGV4dC5nZXRQcm9wZXJ0eShcImlzU29ydGVkXCIpID09PSB0cnVlO1xuXG5cdFx0Y29uc3QgbW92ZUNvbnRleHQgPSBhc3luYyAocGFyZW50OiBDb250ZXh0IHwgbnVsbCwgbmV4dFNpYmxpbmc/OiBDb250ZXh0IHwgbnVsbCk6IFByb21pc2U8dm9pZD4gPT4ge1xuXHRcdFx0Ly8gV2UgY2hlY2sgaWYgdGhlIG1vdmUgaXMgYWxsb3dlZCBieSBjdXN0b20gbG9naWMgKGlmIGFueSksIGFzIHRoaXMgY2hlY2sgbWlnaHRcblx0XHRcdC8vIG5vdCBoYXZlIGJlZW4gZG9uZSBpbiBvbkRyYWdFbnRlckRvY3VtZW50IGlmIHRoZSBwYXJlbnQgd2FzIG5vdCBsb2FkZWQgeWV0LlxuXHRcdFx0aWYgKHRoaXMuc2FmZUlzTW92ZUFsbG93ZWQoY3VzdG9tRnVuY3Rpb24sIGNvbnRleHQsIHBhcmVudCkpIHtcblx0XHRcdFx0Ly8gSWYgdGhlIHRhYmxlIGlzIHNvcnRlZCwgd2UgaWdub3JlIHRoZSBzaWJsaW5nIGFzIHRoZSBwb3NpdGlvbiBzaGFsbCBiZSBkZXRlcm1pbmVkIGJ5IHRoZSBzZXJ2ZXJcblx0XHRcdFx0cmV0dXJuIGNvbnRleHQubW92ZSh7IHBhcmVudCwgbmV4dFNpYmxpbmc6IGlzVGFibGVTb3J0ZWQgPyB1bmRlZmluZWQgOiBuZXh0U2libGluZyB9KTtcblx0XHRcdH0gZWxzZSB7XG5cdFx0XHRcdE1lc3NhZ2VUb2FzdC5zaG93KHRoaXMuZ2V0VHJhbnNsYXRlZFRleHQoXCJNX1RBQkxFX0RST1BfTk9UX0FMTE9XRURcIikpO1xuXHRcdFx0fVxuXHRcdH07XG5cblx0XHRpZiAoaW5mby5wb3NpdGlvbiA9PT0gRHJvcFBvc2l0aW9uLk9uKSB7XG5cdFx0XHQvLyBEcm9wIG9uIGEgbm9kZVxuXHRcdFx0cmV0dXJuIG1vdmVDb250ZXh0KGluZm8ucGFyZW50Q29udGV4dCkuZmluYWxseSgoKSA9PiB0YWJsZS5zZXRCdXN5KGZhbHNlKSk7XG5cdFx0fSBlbHNlIHtcblx0XHRcdC8vIERyb3AgYmV0d2VlbiAyIG5vZGVzXG5cdFx0XHRjb25zdCBbcGFyZW50QmVmb3JlLCBwYXJlbnRBZnRlcl0gPSBhd2FpdCBQcm9taXNlLmFsbChbXG5cdFx0XHRcdGluZm8uY29udGV4dEJlZm9yZT8ucmVxdWVzdFBhcmVudCgpID8/IG51bGwsXG5cdFx0XHRcdGluZm8uY29udGV4dEFmdGVyPy5yZXF1ZXN0UGFyZW50KCkgPz8gbnVsbFxuXHRcdFx0XSk7XG5cdFx0XHRjb25zdCBwYXJhbXMgPSB0aGlzLmdldERyb3BCZXR3ZWVuUGFyYW1ldGVycyhpbmZvLmNvbnRleHRCZWZvcmUsIHBhcmVudEJlZm9yZSwgaW5mby5jb250ZXh0QWZ0ZXIsIHBhcmVudEFmdGVyKSE7XG5cdFx0XHRyZXR1cm4gbW92ZUNvbnRleHQocGFyYW1zLnBhcmVudCwgcGFyYW1zLm5leHRTaWJsaW5nKS5maW5hbGx5KCgpID0+IHRhYmxlLnNldEJ1c3koZmFsc2UpKTtcblx0XHR9XG5cdH1cbn1cbiJdLCJtYXBwaW5ncyI6Ijs7Ozs7Ozs7TUFzQktBLFlBQVksMEJBQVpBLFlBQVk7SUFBWkEsWUFBWTtJQUFaQSxZQUFZO0lBQVpBLFlBQVk7SUFBQSxPQUFaQSxZQUFZO0VBQUEsRUFBWkEsWUFBWTtFQUFBLElBVUlDLGNBQWM7SUFBQSxTQUFBQSxlQUFBO0lBQUFDLFFBQUEsR0FBQUQsY0FBQTtJQUFBLElBQUFFLE1BQUEsR0FBQUYsY0FBQSxDQUFBRyxTQUFBO0lBQUFELE1BQUEsQ0FDbENFLFVBQVUsR0FBVixTQUFBQSxVQUFVQSxDQUFDQyxVQUFvQixFQUFRO01BQ3RDO0lBQUE7O0lBR0Q7QUFDRDtBQUNBO0FBQ0E7QUFDQSxPQUpDO0lBQUFILE1BQUEsQ0FLQUksVUFBVSxHQUFWLFNBQUFBLFVBQVVBLENBQXFDQyxHQUE2QixFQUFFQyxjQUF1QixFQUFFQyxNQUFzQixFQUFRO01BQ3BJLElBQUlDLEtBQWU7TUFDbkIsSUFBSSxDQUFDRixjQUFjLEVBQUU7UUFDcEJFLEtBQUssR0FBR0gsR0FBRyxDQUFDSSxTQUFTLENBQUMsQ0FBQyxDQUFDQyxTQUFTLENBQUMsQ0FBYTtNQUNoRCxDQUFDLE1BQU07UUFDTixNQUFNQyxJQUFJLEdBQUdOLEdBQUcsQ0FBQ0ksU0FBUyxDQUFDLENBQUMsQ0FBQ0MsU0FB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
500
+ //# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJuYW1lcyI6WyJEcm9wUG9zaXRpb24iLCJUYWJsZUhpZXJhcmNoeSIsIl9leHBvcnRzIiwiX3Byb3RvIiwicHJvdG90eXBlIiwic2V0dXBNaXhpbiIsIl9iYXNlQ2xhc3MiLCJfb25Db3B5Q3V0IiwiZXZ0IiwiZm9yQ29udGV4dE1lbnUiLCJhY3Rpb24iLCJ0YWJsZSIsImdldFNvdXJjZSIsImdldFBhcmVudCIsIm1lbnUiLCJpbnRlcm5hbENvbnRleHQiLCJnZXRCaW5kaW5nQ29udGV4dCIsInNlbGVjdGVkQ29udGV4dHMiLCJnZXRTZWxlY3RlZENvbnRleHRzIiwibGVuZ3RoIiwiTG9nIiwiZXJyb3IiLCJzZXRQcm9wZXJ0eSIsIk1lc3NhZ2VUb2FzdCIsInNob3ciLCJSZXNvdXJjZU1vZGVsSGVscGVyIiwiZ2V0UmVzb3VyY2VNb2RlbCIsImdldFRleHQiLCJnZXRQcm9wZXJ0eSIsIlRhYmxlUnVudGltZSIsImNsZWFyU2VsZWN0aW9uIiwiZmlyZVNlbGVjdGlvbkNoYW5nZSIsInBhc3RlQnV0dG9uIiwiZ2V0QWN0aW9ucyIsImZpbmQiLCJ0b29sYmFyQWN0aW9uIiwidGVzdCIsImdldEFjdGlvbiIsImdldElkIiwic2V0VGltZW91dCIsImZvY3VzIiwiX29uRHJhZ0VudGVyRG9jdW1lbnQiLCJ1aTVFdmVudCIsImRyYWdnZWRDb250ZXh0IiwiZ2V0UGFyYW1ldGVyIiwiZ2V0Q29udGVudCIsImdldFJvd0JpbmRpbmciLCJnZXRCaW5kaW5nIiwicHJldmVudERlZmF1bHQiLCJ0YXJnZXRDb250ZXh0IiwiaXNBbmNlc3Rvck9mIiwiZGlzYWJsZWRCZXR3ZWVuIiwiZGlzYWJsZWRPbiIsInRhYmxlRGVmaW5pdGlvbiIsImdldFRhYmxlRGVmaW5pdGlvbiIsImlzTW92ZUFsbG93ZWRJbmZvIiwiY29udHJvbCIsImlzTW92ZVRvUG9zaXRpb25BbGxvd2VkIiwiY3VzdG9tRnVuY3Rpb24iLCJGUE1IZWxwZXIiLCJnZXRDdXN0b21GdW5jdGlvbiIsIm1vZHVsZU5hbWUiLCJtZXRob2ROYW1lIiwidW5kZWZpbmVkIiwic2FmZUlzTW92ZUFsbG93ZWQiLCJhbm5vdGF0aW9uIiwiYWxsb3dEcm9wQmV0d2Vlbk5vZGVzIiwiTWF0aCIsImFicyIsImdldEluZGV4IiwiZ2V0TGVuZ3RoIiwiY2hhbmdlU2libGluZ0ZvclJvb3RzU3VwcG9ydGVkIiwiaXNEcm9wQmV0d2VlbkFsbG93ZWRGb3JEcmFnIiwiYWxsb3dlZERyb3BQb3NpdGlvbiIsIk9uT3JCZXR3ZWVuIiwiT24iLCJCZXR3ZWVuIiwic2V0RHJvcFBvc2l0aW9uIiwiX29uRHJhZ1N0YXJ0RG9jdW1lbnQiLCJjb250ZXh0IiwiZGlzYWJsZURyYWciLCJpc1VwZGF0YWJsZUNvbnRleHQiLCJ1cGRhdGFibGVQcm9wZXJ0eVBhdGhJbmZvIiwiaXNSZWxhdGl2ZSIsImlzTW92YWJsZUluZm8iLCJpc05vZGVNb3ZhYmxlIiwiX2Vycm9yIiwiX29uRHJvcERvY3VtZW50IiwiQnVzeUxvY2tlciIsImxvY2siLCJkcm9wcGVkT25Db250ZXh0IiwiZHJvcEluZm8iLCJwb3NpdGlvbiIsInBhcmVudENvbnRleHQiLCJjb250ZXh0QmVmb3JlIiwiY29udGV4dEFmdGVyIiwiZ2V0Q29udGV4dEFmdGVyIiwiZ2V0Q29udGV4dEJlZm9yZSIsIm1vdmVkQ29udGV4dCIsIlByb21pc2UiLCJhbGwiLCJkcm9wQ29udGV4dCIsInJlcXVlc3RTaWRlRWZmZWN0c0ZvckNoYW5nZU5leHRTaWJsaW5nQWN0aW9uIiwiZ2V0VHJhbnNsYXRlZFRleHQiLCJtZXNzYWdlIiwidW5sb2NrIiwiX29uQ29sbGFwc2VFeHBhbmROb2RlIiwiX3VpNUV2ZW50IiwiZXhwYW5kIiwicHJvbWlzZUFycmF5IiwibWFwIiwic2luZ2xlQ29udGV4dCIsImlzRXhwYW5kZWQiLCJjb2xsYXBzZSIsIk51bWJlciIsIk1BWF9TQUZFX0lOVEVHRVIiLCJfb25Nb3ZlVXBEb3duIiwibW92ZVVwIiwiYXJndW1lbnRzIiwibWRjVGFibGUiLCJzZXRCdXN5IiwicmVxdWVzdFBhcmVudCIsImNvbnRleHRNb3ZlZCIsIm1vdmVQcm9taXNlIiwicHJldmlvdXNTaWJsaW5nIiwicmVxdWVzdFNpYmxpbmciLCJtb3ZlIiwibmV4dFNpYmxpbmciLCJwYXJlbnQiLCJuZXdJbmRleCIsInNjcm9sbFRvSW5kZXgiLCJmb2N1c1JvdyIsIl9yZXF1ZXN0U2lkZUVmZmVjdHNGb3JIaWVyYXJjaHlBY3Rpb25zIiwicmVxdWVzdFNpZGVFZmZlY3RzRm9yQ29weUFjdGlvbiIsImVudGl0eVBhdGgiLCJkYXRhIiwibWV0YU1vZGVsIiwiZ2V0TW9kZWwiLCJnZXRNZXRhTW9kZWwiLCJ0YXJnZXRPYmplY3QiLCJnZXRDb250ZXh0IiwiY29udmVydE1ldGFNb2RlbENvbnRleHQiLCJNZXRhTW9kZWxDb252ZXJ0ZXIiLCJlbnRpdHlUeXBlIiwidGFyZ2V0VHlwZSIsImFjdGlvbk5hbWUiLCJhbm5vdGF0aW9ucyIsIkhpZXJhcmNoeSIsImhpZXJhcmNoeVF1YWxpZmllciIsImFwcENvbXBvbmVudCIsIkNvbW1vblV0aWxzIiwiZ2V0QXBwQ29tcG9uZW50Iiwic2lkZUVmZmVjdHNTZXJ2aWNlIiwiZ2V0U2lkZUVmZmVjdHNTZXJ2aWNlIiwic2lkZUVmZmVjdHMiLCJnZXRPRGF0YUFjdGlvblNpZGVFZmZlY3RzIiwicmVxdWVzdFNpZGVFZmZlY3RzRm9yT0RhdGFBY3Rpb24iLCJhbGxvd2VkIiwiaXNBbGxvd2VkIiwicGFyZW50QmVmb3JlIiwicGFyYW1zQmVmb3JlIiwiZ2V0RHJvcEJldHdlZW5QYXJhbWV0ZXJzIiwicGFyZW50QWZ0ZXIiLCJwYXJhbXNBZnRlciIsImNvbnRleHRJbmRleCIsIkVycm9yIiwibGlzdEJpbmRpbmciLCJnZXRBbGxDdXJyZW50Q29udGV4dHMiLCJjdHgiLCJpbmZvIiwiaW50ZXJuYWxNb2RlbENvbnRleHQiLCJpc1RhYmxlU29ydGVkIiwibW92ZUNvbnRleHQiLCJmaW5hbGx5IiwicGFyYW1zIl0sInNvdXJjZVJvb3QiOiIuIiwic291cmNlcyI6WyJUYWJsZUhpZXJhcmNoeS50cyJdLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgdHlwZSB7IEVudGl0eVNldCwgTmF2aWdhdGlvblByb3BlcnR5IH0gZnJvbSBcIkBzYXAtdXgvdm9jYWJ1bGFyaWVzLXR5cGVzXCI7XG5pbXBvcnQgTG9nIGZyb20gXCJzYXAvYmFzZS9Mb2dcIjtcbmltcG9ydCB7IHR5cGUgSUludGVyZmFjZVdpdGhNaXhpbiB9IGZyb20gXCJzYXAvZmUvYmFzZS9DbGFzc1N1cHBvcnRcIjtcbmltcG9ydCBDb21tb25VdGlscyBmcm9tIFwic2FwL2ZlL2NvcmUvQ29tbW9uVXRpbHNcIjtcbmltcG9ydCBCdXN5TG9ja2VyIGZyb20gXCJzYXAvZmUvY29yZS9jb250cm9sbGVyZXh0ZW5zaW9ucy9CdXN5TG9ja2VyXCI7XG5pbXBvcnQgKiBhcyBNZXRhTW9kZWxDb252ZXJ0ZXIgZnJvbSBcInNhcC9mZS9jb3JlL2NvbnZlcnRlcnMvTWV0YU1vZGVsQ29udmVydGVyXCI7XG5pbXBvcnQgRlBNSGVscGVyIGZyb20gXCJzYXAvZmUvY29yZS9oZWxwZXJzL0ZQTUhlbHBlclwiO1xuaW1wb3J0IHsgdHlwZSBJbnRlcm5hbE1vZGVsQ29udGV4dCB9IGZyb20gXCJzYXAvZmUvY29yZS9oZWxwZXJzL01vZGVsSGVscGVyXCI7XG5pbXBvcnQgUmVzb3VyY2VNb2RlbEhlbHBlciBmcm9tIFwic2FwL2ZlL2NvcmUvaGVscGVycy9SZXNvdXJjZU1vZGVsSGVscGVyXCI7XG5pbXBvcnQgdHlwZSBNZW51IGZyb20gXCJzYXAvbS9NZW51XCI7XG5pbXBvcnQgTWVzc2FnZVRvYXN0IGZyb20gXCJzYXAvbS9NZXNzYWdlVG9hc3RcIjtcbmltcG9ydCB0eXBlIFVJNUV2ZW50IGZyb20gXCJzYXAvdWkvYmFzZS9FdmVudFwiO1xuaW1wb3J0IHR5cGUgQ29udHJvbCBmcm9tIFwic2FwL3VpL2NvcmUvQ29udHJvbFwiO1xuaW1wb3J0IHR5cGUgVUk1RWxlbWVudCBmcm9tIFwic2FwL3VpL2NvcmUvRWxlbWVudFwiO1xuaW1wb3J0IHR5cGUgRHJhZ0Ryb3BJbmZvIGZyb20gXCJzYXAvdWkvY29yZS9kbmQvRHJhZ0Ryb3BJbmZvXCI7XG5pbXBvcnQgdHlwZSBNRENUYWJsZSBmcm9tIFwic2FwL3VpL21kYy9UYWJsZVwiO1xuaW1wb3J0IHR5cGUgQWN0aW9uVG9vbGJhckFjdGlvbiBmcm9tIFwic2FwL3VpL21kYy9hY3Rpb250b29sYmFyL0FjdGlvblRvb2xiYXJBY3Rpb25cIjtcbmltcG9ydCB0eXBlIENvbnRleHQgZnJvbSBcInNhcC91aS9tb2RlbC9vZGF0YS92NC9Db250ZXh0XCI7XG5pbXBvcnQgdHlwZSBPRGF0YUxpc3RCaW5kaW5nIGZyb20gXCJzYXAvdWkvbW9kZWwvb2RhdGEvdjQvT0RhdGFMaXN0QmluZGluZ1wiO1xuaW1wb3J0IHsgdHlwZSBJVGFibGVCbG9jayB9IGZyb20gXCIuLi9UYWJsZUFQSVwiO1xuaW1wb3J0IFRhYmxlUnVudGltZSBmcm9tIFwiLi4vVGFibGVSdW50aW1lXCI7XG5cbmVudW0gRHJvcFBvc2l0aW9uIHtcblx0T24gPSBcIk9uXCIsXG5cdEJldHdlZW4gPSBcIkJldHdlZW5cIixcblx0T25PckJldHdlZW4gPSBcIk9uT3JCZXR3ZWVuXCJcbn1cblxudHlwZSBEcm9wSW5mb3JtYXRpb24gPVxuXHR8IHsgcG9zaXRpb246IERyb3BQb3NpdGlvbi5PbjsgcGFyZW50Q29udGV4dDogQ29udGV4dCB8IG51bGwgfVxuXHR8IHsgcG9zaXRpb246IERyb3BQb3NpdGlvbi5CZXR3ZWVuOyBjb250ZXh0QmVmb3JlOiBDb250ZXh0IHwgbnVsbDsgY29udGV4dEFmdGVyOiBDb250ZXh0IHwgbnVsbCB9O1xuXG5leHBvcnQgZGVmYXVsdCBjbGFzcyBUYWJsZUhpZXJhcmNoeSBpbXBsZW1lbnRzIElJbnRlcmZhY2VXaXRoTWl4aW4ge1xuXHRzZXR1cE1peGluKF9iYXNlQ2xhc3M6IEZ1bmN0aW9uKTogdm9pZCB7XG5cdFx0Ly8gVGhpcyBtZXRob2QgaXMgbmVlZGVkIHRvIGltcGxlbWVudCBpbnRlcmZhY2UgSUludGVyZmFjZVdpdGhNaXhpblxuXHR9XG5cblx0LyoqXG5cdCAqIEhhbmRsZXMgdGhlIEN1dC9Db3B5IG9wZXJhdGlvbi5cblx0ICogQHBhcmFtIGV2dCBUaGUgVUk1IGV2ZW50XG5cdCAqIEBwYXJhbSBmb3JDb250ZXh0TWVudVxuXHQgKi9cblx0X29uQ29weUN1dCh0aGlzOiBJVGFibGVCbG9jayAmIFRhYmxlSGllcmFyY2h5LCBldnQ6IFVJNUV2ZW50PHt9LCBVSTVFbGVtZW50PiwgZm9yQ29udGV4dE1lbnU6IGJvb2xlYW4sIGFjdGlvbjogXCJDb3B5XCIgfCBcIkN1dFwiKTogdm9pZCB7XG5cdFx0bGV0IHRhYmxlOiBNRENUYWJsZTtcblx0XHRpZiAoIWZvckNvbnRleHRNZW51KSB7XG5cdFx0XHR0YWJsZSA9IGV2dC5nZXRTb3VyY2UoKS5nZXRQYXJlbnQoKSBhcyBNRENUYWJsZTtcblx0XHR9IGVsc2Uge1xuXHRcdFx0Y29uc3QgbWVudSA9IGV2dC5nZXRTb3VyY2UoKS5nZXRQYXJlbnQoKSBhcyBNZW51O1xuXHRcdFx0dGFibGUgPSBtZW51LmdldFBhcmVudCgpPy5nZXRQYXJlbnQoKSBhcyBNRENUYWJsZTtcblx0XHR9XG5cdFx0Y29uc3QgaW50ZXJuYWxDb250ZXh0ID0gdGFibGUuZ2V0QmluZGluZ0NvbnRleHQoXCJpbnRlcm5hbFwiKSBhcyBJbnRlcm5hbE1vZGVsQ29udGV4dDtcblx0XHRjb25zdCBzZWxlY3RlZENvbnRleHRzID0gdGhpcy5nZXRTZWxlY3RlZENvbnRleHRzKCk7XG5cdFx0aWYgKHNlbGVjdGVkQ29udGV4dHMubGVuZ3RoID4gMSkge1xuXHRcdFx0TG9nLmVycm9yKGBNdWx0aSAke2FjdGlvbiA9PT0gXCJDdXRcIiA/IFwiY3V0dGluZ1wiIDogXCJjb3B5aW5nXCJ9IGlzIG5vdCBzdXBwb3J0ZWRgKTtcblx0XHRcdHJldHVybjtcblx0XHR9XG5cblx0XHRpbnRlcm5hbENvbnRleHQuc2V0UHJvcGVydHkoXCJub2RlVXBkYXRlc0luZm8vcGFzdGFibGVDb250ZXh0c1wiLCBzZWxlY3RlZENvbnRleHRzKTtcblx0XHRpbnRlcm5hbENvbnRleHQuc2V0UHJvcGVydHkoXCJub2RlVXBkYXRlc0luZm8vbGFzdEFjdGlvblwiLCBhY3Rpb24pO1xuXHRcdE1lc3NhZ2VUb2FzdC5zaG93KFJlc291cmNlTW9kZWxIZWxwZXIuZ2V0UmVzb3VyY2VNb2RlbCh0YWJsZSkuZ2V0VGV4dChcIk1fQ1VUQ09QWV9SRUFEWVwiKSk7XG5cdFx0aWYgKCFmb3JDb250ZXh0TWVudSB8fCBpbnRlcm5hbENvbnRleHQuZ2V0UHJvcGVydHkoXCJudW1iZXJPZlNlbGVjdGVkQ29udGV4dHNcIikgPiAwKSB7XG5cdFx0XHRUYWJsZVJ1bnRpbWUuY2xlYXJTZWxlY3Rpb24odGFibGUpO1xuXHRcdFx0dGFibGUuZmlyZVNlbGVjdGlvbkNoYW5nZSgpO1xuXHRcdH0gZWxzZSBpZiAoZm9yQ29udGV4dE1lbnUpIHtcblx0XHRcdC8vIFVzaW5nIHRoZSBjb250ZXh0IG1lbnUgaW1wbGljaXRseSBkZWZpbmVzIGEgY29udGV4dCBmb3IgdGhlIGFjdGlvblxuXHRcdFx0dGFibGUuZmlyZVNlbGVjdGlvbkNoYW5nZSgpO1xuXHRcdH1cblxuXHRcdGludGVybmFsQ29udGV4dC5zZXRQcm9wZXJ0eShcIm5vZGVVcGRhdGVzSW5mby9jdXRFbmFibGVtZW50XCIsIGZhbHNlKTtcblx0XHRpbnRlcm5hbENvbnRleHQuc2V0UHJvcGVydHkoXCJjb250ZXh0bWVudS9ub2RlVXBkYXRlc0luZm8vY3V0RW5hYmxlbWVudFwiLCBmYWxzZSk7XG5cdFx0aW50ZXJuYWxDb250ZXh0LnNldFByb3BlcnR5KFwibm9kZVVwZGF0ZXNJbmZvL2NvcHlFbmFibGVtZW50XCIsIGZhbHNlKTtcblx0XHRpbnRlcm5hbENvbnRleHQuc2V0UHJvcGVydHkoXCJjb250ZXh0bWVudS9ub2RlVXBkYXRlc0luZm8vY29weUVuYWJsZW1lbnRcIiwgZmFsc2UpO1xuXHRcdGNvbnN0IHBhc3RlQnV0dG9uID0gKHRhYmxlLmdldEFjdGlvbnMoKSBhcyBBY3Rpb25Ub29sYmFyQWN0aW9uW10pLmZpbmQoKHRvb2xiYXJBY3Rpb24pID0+XG5cdFx0XHQvOjpQYXN0ZSQvLnRlc3QodG9vbGJhckFjdGlvbi5nZXRBY3Rpb24oKS5nZXRJZCgpKVxuXHRcdCk7XG5cdFx0c2V0VGltZW91dCgoKSA9PiB7XG5cdFx0XHRwYXN0ZUJ1dHRvbj8uZm9jdXMoKTtcblx0XHR9LCAwKTtcblx0fVxuXG5cdC8qKlxuXHQgKiBUaGUgZHJhZ2dlZCBlbGVtZW50IGVudGVycyBhIHRhYmxlIHJvdy5cblx0ICogQHBhcmFtIHVpNUV2ZW50IFVJNSBldmVudCBjb21pbmcgZnJvbSB0aGUgTURDIGRyYWcgYW5kIGRyb3AgY29uZmlnXG5cdCAqL1xuXHRfb25EcmFnRW50ZXJEb2N1bWVudChcblx0XHR0aGlzOiBJVGFibGVCbG9jayAmIFRhYmxlSGllcmFyY2h5LFxuXHRcdHVpNUV2ZW50OiBVSTVFdmVudDx7IGJpbmRpbmdDb250ZXh0OiBDb250ZXh0OyBkcmFnU291cmNlOiBDb250ZXh0OyBkcm9wUG9zaXRpb246IFwiQmVmb3JlXCIgfCBcIkFmdGVyXCIgfCBcIk9uXCIgfSwgRHJhZ0Ryb3BJbmZvPlxuXHQpOiB2b2lkIHtcblx0XHRjb25zdCBkcmFnZ2VkQ29udGV4dCA9IHVpNUV2ZW50LmdldFBhcmFtZXRlcihcImRyYWdTb3VyY2VcIik7XG5cdFx0aWYgKHRoaXMuZ2V0Q29udGVudCgpLmdldFJvd0JpbmRpbmcoKSAhPT0gZHJhZ2dlZENvbnRleHQuZ2V0QmluZGluZygpKSB7XG5cdFx0XHQvLyBUaGUgZHJhZyBpcyBkb25lIG9uIGEgZGlmZmVyZW50IHRhYmxlIC0+IG5vdCBhdXRob3JpemVkXG5cdFx0XHR1aTVFdmVudC5wcmV2ZW50RGVmYXVsdCgpO1xuXHRcdFx0cmV0dXJuO1xuXHRcdH1cblxuXHRcdGNvbnN0IHRhcmdldENvbnRleHQ6IENvbnRleHQgfCBudWxsID0gdWk1RXZlbnQuZ2V0UGFyYW1ldGVyKFwiYmluZGluZ0NvbnRleHRcIik7XG5cdFx0aWYgKGRyYWdnZWRDb250ZXh0LmlzQW5jZXN0b3JPZih0YXJnZXRDb250ZXh0KSkge1xuXHRcdFx0Ly8gVGhlIGFuY2VzdG9yIGlzIGRyb3BwZWQgb24gYSBkZXNjZW5kYW50IC0+IG5vdCBhdXRob3JpemVkXG5cdFx0XHR1aTVFdmVudC5wcmV2ZW50RGVmYXVsdCgpO1xuXHRcdFx0cmV0dXJuO1xuXHRcdH1cblxuXHRcdGxldCBkaXNhYmxlZEJldHdlZW4gPSBmYWxzZTtcblx0XHRsZXQgZGlzYWJsZWRPbiA9IGZhbHNlO1xuXHRcdGNvbnN0IHRhYmxlRGVmaW5pdGlvbiA9IHRoaXMuZ2V0VGFibGVEZWZpbml0aW9uKCk7XG5cdFx0Y29uc3QgaXNNb3ZlQWxsb3dlZEluZm8gPSB0YWJsZURlZmluaXRpb24uY29udHJvbC5pc01vdmVUb1Bvc2l0aW9uQWxsb3dlZDtcblx0XHRjb25zdCBjdXN0b21GdW5jdGlvbiA9IGlzTW92ZUFsbG93ZWRJbmZvXG5cdFx0XHQ/IEZQTUhlbHBlci5nZXRDdXN0b21GdW5jdGlvbjwobm9kZTogQ29udGV4dCwgcGFyZW50OiBDb250ZXh0IHwgbnVsbCkgPT4gYm9vbGVhbj4oXG5cdFx0XHRcdFx0aXNNb3ZlQWxsb3dlZEluZm8ubW9kdWxlTmFtZSxcblx0XHRcdFx0XHRpc01vdmVBbGxvd2VkSW5mby5tZXRob2ROYW1lLFxuXHRcdFx0XHRcdHVpNUV2ZW50LmdldFNvdXJjZSgpLmdldFBhcmVudCgpIGFzIENvbnRyb2xcblx0XHRcdCAgKVxuXHRcdFx0OiB1bmRlZmluZWQ7XG5cblx0XHRpZiAodGFyZ2V0Q29udGV4dCA9PT0gdGhpcy5nZXRDb250ZW50KCkuZ2V0QmluZGluZ0NvbnRleHQoKSkge1xuXHRcdFx0Ly8gVGhlIGRyYWcgaXMgZG9uZSBvbiB0aGUgdGFibGUgaXRzZWxmIC0+IGRyb3AgYXMgcm9vdCBub2RlKVxuXHRcdFx0ZGlzYWJsZWRPbiA9ICF0aGlzLnNhZmVJc01vdmVBbGxvd2VkKGN1c3RvbUZ1bmN0aW9uLCBkcmFnZ2VkQ29udGV4dCwgbnVsbCk7XG5cdFx0XHRkaXNhYmxlZEJldHdlZW4gPSB0cnVlO1xuXHRcdH0gZWxzZSB7XG5cdFx0XHRkaXNhYmxlZE9uID0gIXRoaXMuc2FmZUlzTW92ZUFsbG93ZWQoY3VzdG9tRnVuY3Rpb24sIGRyYWdnZWRDb250ZXh0LCB0YXJnZXRDb250ZXh0KTtcblx0XHRcdGRpc2FibGVkQmV0d2VlbiA9IHRhYmxlRGVmaW5pdGlvbi5hbm5vdGF0aW9uLmFsbG93RHJvcEJldHdlZW5Ob2RlcyAhPT0gdHJ1ZTtcblxuXHRcdFx0aWYgKFxuXHRcdFx0XHRNYXRoLmFicyh0YXJnZXRDb250ZXh0LmdldEluZGV4KCkhIC0gZHJhZ2dlZENvbnRleHQuZ2V0SW5kZXgoKSEpID09PSAxICYmXG5cdFx0XHRcdCEodGFyZ2V0Q29udGV4dC5nZXRJbmRleCgpID09PSAwICYmIHVpNUV2ZW50LmdldFBhcmFtZXRlcihcImRyb3BQb3NpdGlvblwiKSA9PT0gXCJCZWZvcmVcIikgJiZcblx0XHRcdFx0IShcblx0XHRcdFx0XHR0YXJnZXRDb250ZXh0LmdldEluZGV4KCkgPT09IHRoaXMuZ2V0Q29udGVudCgpLmdldFJvd0JpbmRpbmcoKS5nZXRMZW5ndGgoKSAtIDEgJiZcblx0XHRcdFx0XHR1aTVFdmVudC5nZXRQYXJhbWV0ZXIoXCJkcm9wUG9zaXRpb25cIikgPT09IFwiQWZ0ZXJcIlxuXHRcdFx0XHQpXG5cdFx0XHQpIHtcblx0XHRcdFx0Ly9cblx0XHRcdFx0ZGlzYWJsZWRCZXR3ZWVuID0gdHJ1ZTtcblx0XHRcdH1cblxuXHRcdFx0Ly8gSWYgdGhlIGRyb3AgYmV0d2VlbiBub2RlIGlzIGFsbG93ZWQsIHdlIG5lZWQgdG8gY2hlY2sgaWYgdGhlIHRhcmdldCBpcyBhIHJvb3Qgbm9kZSBhbmQgaWYgdGhlIHRhYmxlIHN1cHBvcnRzIGNoYW5nZVNpYmxpbmdGb3JSb290c1xuXHRcdFx0aWYgKFxuXHRcdFx0XHQhZGlzYWJsZWRCZXR3ZWVuICYmXG5cdFx0XHRcdCF0YWJsZURlZmluaXRpb24uYW5ub3RhdGlvbi5jaGFuZ2VTaWJsaW5nRm9yUm9vdHNTdXBwb3J0ZWQgJiZcblx0XHRcdFx0dGFyZ2V0Q29udGV4dC5nZXRQcm9wZXJ0eShcIkAkdWk1Lm5vZGUubGV2ZWxcIikgPT09IDFcblx0XHRcdCkge1xuXHRcdFx0XHRkaXNhYmxlZEJldHdlZW4gPSB0cnVlO1xuXHRcdFx0fVxuXG5cdFx0XHQvLyBDaGVjayBjdXN0b20gbG9naWMgZm9yIGRyb3AgYmV0d2VlbiBpZiB0aGVyZSdzIHNvbWUsIGFuZCBpZiBpdCdzIG5vdCBhbHJlYWR5IGRpc2FibGVkIGF0IHRoZSB0YWJsZSBsZXZlbFxuXHRcdFx0aWYgKGN1c3RvbUZ1bmN0aW9uICYmICFkaXNhYmxlZEJldHdlZW4pIHtcblx0XHRcdFx0ZGlzYWJsZWRCZXR3ZWVuID0gIXRoaXMuaXNEcm9wQmV0d2VlbkFsbG93ZWRGb3JEcmFnKGN1c3RvbUZ1bmN0aW9uLCBkcmFnZ2VkQ29udGV4dCwgdGFyZ2V0Q29udGV4dCk7XG5cdFx0XHR9XG5cdFx0fVxuXG5cdFx0bGV0IGFsbG93ZWREcm9wUG9zaXRpb246IERyb3BQb3NpdGlvbiA9IERyb3BQb3NpdGlvbi5Pbk9yQmV0d2Vlbjtcblx0XHRpZiAoZGlzYWJsZWRCZXR3ZWVuICYmIGRpc2FibGVkT24pIHtcblx0XHRcdC8vU2V0IHRoZSBlbGVtZW50IGFzIG5vbiBkcm9wcGFibGVcblx0XHRcdHVpNUV2ZW50LnByZXZlbnREZWZhdWx0KCk7XG5cdFx0XHRyZXR1cm47XG5cdFx0fVxuXHRcdGlmIChkaXNhYmxlZEJldHdlZW4pIHtcblx0XHRcdGFsbG93ZWREcm9wUG9zaXRpb24gPSBEcm9wUG9zaXRpb24uT247XG5cdFx0fSBlbHNlIGlmIChkaXNhYmxlZE9uKSB7XG5cdFx0XHRhbGxvd2VkRHJvcFBvc2l0aW9uID0gRHJvcFBvc2l0aW9uLkJldHdlZW47XG5cdFx0fVxuXHRcdHVpNUV2ZW50LmdldFNvdXJjZSgpLnNldERyb3BQb3NpdGlvbihhbGxvd2VkRHJvcFBvc2l0aW9uKTtcblx0fVxuXG5cdC8qKlxuXHQgKiBTdGFydHMgdGhlIGRyYWcgb2YgdGhlIGRvY3VtZW50LlxuXHQgKiBAcGFyYW0gdWk1RXZlbnQgVUk1IGV2ZW50IGNvbWluZyBmcm9tIHRoZSBNREMgZHJhZyBhbmQgZHJvcCBjb25maWdcblx0ICovXG5cdF9vbkRyYWdTdGFydERvY3VtZW50KHRoaXM6IElUYWJsZUJsb2NrICYgVGFibGVIaWVyYXJjaHksIHVpNUV2ZW50OiBVSTVFdmVudDx7IGJpbmRpbmdDb250ZXh0OiBDb250ZXh0IH0sIENvbnRyb2w+KTogdm9pZCB7XG5cdFx0Y29uc3QgY29udGV4dCA9IHVpNUV2ZW50LmdldFBhcmFtZXRlcihcImJpbmRpbmdDb250ZXh0XCIpO1xuXG5cdFx0Ly8gQ2hlY2sgaWYgdGhlIGNvbnRleHQgY2FuIGJlIHVwZGF0ZWQgYWNjb3JkaW5nIHRvIHVwZGF0ZSByZXN0cmljdGlvbnNcblx0XHRsZXQgZGlzYWJsZURyYWcgPSAhVGFibGVSdW50aW1lLmlzVXBkYXRhYmxlQ29udGV4dCh0aGlzLmdldFRhYmxlRGVmaW5pdGlvbigpLmFubm90YXRpb24udXBkYXRhYmxlUHJvcGVydHlQYXRoSW5mbywgY29udGV4dCwgZmFsc2UpO1xuXG5cdFx0Ly8gSW4gY2FzZSBvZiBhIFRyZWVUYWJsZSBpbiBhIExpc3RSZXBvcnQgd2l0aCBkcmFmdCwgY2hlY2sgdGhhdCB0aGUgY29udGV4dCBoYXMgbm8gYXNzb2NpYXRlZCBkcmFmdFxuXHRcdGlmICghZGlzYWJsZURyYWcgJiYgIShjb250ZXh0LmdldEJpbmRpbmcoKSBhcyBPRGF0YUxpc3RCaW5kaW5nKS5pc1JlbGF0aXZlKCkpIHtcblx0XHRcdGRpc2FibGVEcmFnID0gY29udGV4dC5nZXRQcm9wZXJ0eShcIkhhc0RyYWZ0RW50aXR5XCIpID09PSB0cnVlO1xuXHRcdH1cblxuXHRcdC8vIEFwcGx5IGN1c3RvbSBsb2dpYyBpZiB0aGVyZSdzIG9uZVxuXHRcdGNvbnN0IGlzTW92YWJsZUluZm8gPSB0aGlzLmdldFRhYmxlRGVmaW5pdGlvbigpLmNvbnRyb2wuaXNOb2RlTW92YWJsZTtcblx0XHR0cnkge1xuXHRcdFx0aWYgKGlzTW92YWJsZUluZm8gJiYgIWRpc2FibGVEcmFnKSB7XG5cdFx0XHRcdGRpc2FibGVEcmFnID1cblx0XHRcdFx0XHQoXG5cdFx0XHRcdFx0XHRGUE1IZWxwZXIuZ2V0Q3VzdG9tRnVuY3Rpb248KGNvbnRleHRzOiBDb250ZXh0W10pID0+IGJvb2xlYW4+KFxuXHRcdFx0XHRcdFx0XHRpc01vdmFibGVJbmZvLm1vZHVsZU5hbWUsXG5cdFx0XHRcdFx0XHRcdGlzTW92YWJsZUluZm8ubWV0aG9kTmFtZSxcblx0XHRcdFx0XHRcdFx0dWk1RXZlbnQuZ2V0U291cmNlKClcblx0XHRcdFx0XHRcdCkgYXMgRnVuY3Rpb25cblx0XHRcdFx0XHQpKGNvbnRleHQpID09PSBmYWxzZTtcblx0XHRcdH1cblx0XHR9IGNhdGNoIChfZXJyb3IpIHtcblx0XHRcdGRpc2FibGVEcmFnID0gZmFsc2U7XG5cdFx0fVxuXHRcdGlmIChkaXNhYmxlRHJhZykge1xuXHRcdFx0Ly9TZXQgdGhlIGVsZW1lbnQgYXMgbm9uIGRyYWdnYWJsZVxuXHRcdFx0dWk1RXZlbnQucHJldmVudERlZmF1bHQoKTtcblx0XHR9XG5cdH1cblxuXHQvKipcblx0ICogRHJvcHMgdGhlIGRvY3VtZW50LlxuXHQgKiBAcGFyYW0gdWk1RXZlbnQgVUk1IGV2ZW50IGNvbWluZyBmcm9tIHRoZSBNREMgZHJhZyBhbmQgZHJvcCBjb25maWdcblx0ICogQHJldHVybnMgVGhlIFByb21pc2Vcblx0ICovXG5cdGFzeW5jIF9vbkRyb3BEb2N1bWVudChcblx0XHR0aGlzOiBJVGFibGVCbG9jayAmIFRhYmxlSGllcmFyY2h5LFxuXHRcdHVpNUV2ZW50OiBVSTVFdmVudDx7XG5cdFx0XHRiaW5kaW5nQ29udGV4dDogQ29udGV4dDtcblx0XHRcdGRyYWdTb3VyY2U6IENvbnRleHQ7XG5cdFx0XHRkcm9wUG9zaXRpb246IHN0cmluZztcblx0XHR9PlxuXHQpOiBQcm9taXNlPHZvaWQ+IHtcblx0XHRCdXN5TG9ja2VyLmxvY2sodGhpcy5nZXRDb250ZW50KCkpO1xuXG5cdFx0dHJ5IHtcblx0XHRcdGNvbnN0IGRyb3BwZWRPbkNvbnRleHQgPSB1aTVFdmVudC5nZXRQYXJhbWV0ZXIoXCJiaW5kaW5nQ29udGV4dFwiKTtcblx0XHRcdGxldCBkcm9wSW5mbzogRHJvcEluZm9ybWF0aW9uO1xuXHRcdFx0aWYgKGRyb3BwZWRPbkNvbnRleHQgPT09IHRoaXMuZ2V0Q29udGVudCgpLmdldEJpbmRpbmdDb250ZXh0KCkpIHtcblx0XHRcdFx0Ly8gVGhlIGRyb3AgaXMgZG9uZSBvbiB0aGUgdGFibGUgaXRzZWxmIC0+IGRyb3AgYXMgcm9vdCBub2RlKVxuXHRcdFx0XHRkcm9wSW5mbyA9IHsgcG9zaXRpb246IERyb3BQb3NpdGlvbi5PbiwgcGFyZW50Q29udGV4dDogbnVsbCB9O1xuXHRcdFx0fSBlbHNlIGlmICh1aTVFdmVudC5nZXRQYXJhbWV0ZXIoXCJkcm9wUG9zaXRpb25cIikgPT09IERyb3BQb3NpdGlvbi5Pbikge1xuXHRcdFx0XHQvLyBEcm9wIG9uIGEgbm9kZVxuXHRcdFx0XHRkcm9wSW5mbyA9IHsgcG9zaXRpb246IERyb3BQb3NpdGlvbi5PbiwgcGFyZW50Q29udGV4dDogZHJvcHBlZE9uQ29udGV4dCB9O1xuXHRcdFx0fSBlbHNlIHtcblx0XHRcdFx0Ly8gRHJvcCBiZXR3ZWVuIDIgbm9kZXNcblx0XHRcdFx0bGV0IGNvbnRleHRCZWZvcmU6IENvbnRleHQgfCBudWxsO1xuXHRcdFx0XHRsZXQgY29udGV4dEFmdGVyOiBDb250ZXh0IHwgbnVsbDtcblx0XHRcdFx0aWYgKHVpNUV2ZW50LmdldFBhcmFtZXRlcihcImRyb3BQb3NpdGlvblwiKSA9PT0gXCJBZnRlclwiKSB7XG5cdFx0XHRcdFx0Y29udGV4dEJlZm9yZSA9IGRyb3BwZWRPbkNvbnRleHQ7XG5cdFx0XHRcdFx0Y29udGV4dEFmdGVyID0gdGhpcy5nZXRDb250ZXh0QWZ0ZXIoZHJvcHBlZE9uQ29udGV4dCk7XG5cdFx0XHRcdH0gZWxzZSB7XG5cdFx0XHRcdFx0Y29udGV4dEJlZm9yZSA9IHRoaXMuZ2V0Q29udGV4dEJlZm9yZShkcm9wcGVkT25Db250ZXh0KTtcblx0XHRcdFx0XHRjb250ZXh0QWZ0ZXIgPSBkcm9wcGVkT25Db250ZXh0O1xuXHRcdFx0XHR9XG5cdFx0XHRcdGRyb3BJbmZvID0geyBwb3NpdGlvbjogRHJvcFBvc2l0aW9uLkJldHdlZW4sIGNvbnRleHRBZnRlciwgY29udGV4dEJlZm9yZSB9O1xuXHRcdFx0fVxuXG5cdFx0XHRjb25zdCBtb3ZlZENvbnRleHQgPSB1aTVFdmVudC5nZXRQYXJhbWV0ZXIoXCJkcmFnU291cmNlXCIpO1xuXHRcdFx0YXdhaXQgUHJvbWlzZS5hbGwoW3RoaXMuZHJvcENvbnRleHQobW92ZWRDb250ZXh0LCBkcm9wSW5mbyksIHRoaXMucmVxdWVzdFNpZGVFZmZlY3RzRm9yQ2hhbmdlTmV4dFNpYmxpbmdBY3Rpb24obW92ZWRDb250ZXh0KV0pO1xuXHRcdH0gY2F0Y2ggKGVycm9yKSB7XG5cdFx0XHRNZXNzYWdlVG9hc3Quc2hvdyh0aGlzLmdldFRyYW5zbGF0ZWRUZXh0KFwiTV9UQUJMRURST1BfRkFJTEVEXCIsIFtcIlwiXSkpO1xuXHRcdFx0TG9nLmVycm9yKFwiVGhlIG9wZXJhdGlvbiBpcyB1bnN1Y2Nlc3NmdWwuIFwiICsgKChlcnJvciBhcyBFcnJvcikubWVzc2FnZSA/PyBcIlwiKSk7XG5cdFx0fSBmaW5hbGx5IHtcblx0XHRcdEJ1c3lMb2NrZXIudW5sb2NrKHRoaXMuZ2V0Q29udGVudCgpKTtcblx0XHR9XG5cdH1cblxuXHQvKipcblx0ICogSGFuZGxlciBmb3IgY29sbGFwc2UvZXhwYW5kIGZyb20gdGhlIGNvbnRleHQgbWVudS5cblx0ICogQHBhcmFtIHRoaXNcblx0ICogQHBhcmFtIF91aTVFdmVudFxuXHQgKiBAcGFyYW0gZXhwYW5kXG5cdCAqL1xuXHRhc3luYyBfb25Db2xsYXBzZUV4cGFuZE5vZGUodGhpczogSVRhYmxlQmxvY2sgJiBUYWJsZUhpZXJhcmNoeSwgX3VpNUV2ZW50OiBVSTVFdmVudCwgZXhwYW5kOiBib29sZWFuKTogUHJvbWlzZTx2b2lkPiB7XG5cdFx0Y29uc3Qgc2VsZWN0ZWRDb250ZXh0cyA9IHRoaXMuZ2V0U2VsZWN0ZWRDb250ZXh0cygpO1xuXHRcdGlmIChleHBhbmQpIHtcblx0XHRcdGNvbnN0IHByb21pc2VBcnJheSA9IHNlbGVjdGVkQ29udGV4dHMubWFwKGFzeW5jIChzaW5nbGVDb250ZXh0OiBDb250ZXh0KSA9PiB7XG5cdFx0XHRcdC8vIENoZWNraW5nIGZvciBmYWxzZSBzcGVjaWZpY2FsbHk7IHVuZGVmaW5lZCBtZWFucyB0aGUgbm9kZSBjYW5ub3QgZXhwYW5kL2NvbGxhcHNlXG5cdFx0XHRcdGlmIChzaW5nbGVDb250ZXh0LmlzRXhwYW5kZWQoKSAhPT0gdW5kZWZpbmVkKSB7XG5cdFx0XHRcdFx0Ly8gVGVtcG9yYXJ5IHdvcmthcm91bmQgZHVlIHRvIG1vZGVsIGxpbWl0YXRpb24uXG5cdFx0XHRcdFx0Ly8gV2UgbmVlZCB0byBjb2xsYXBzZSBhIG5vZGUgYmVmb3JlIGV4cGFuZGluZyBpdCB0byBlbnN1cmUgd2UgZXhwYW5kIGl0IGNvbXBsZXRlbHkuXG5cdFx0XHRcdFx0Ly8gV2lsbCBiZSBjaGFuZ2VkIG9uY2UgdGhlIG1vZGVsIGZpeGVzIHRoZSBpc3N1ZS5cblx0XHRcdFx0XHRpZiAoc2luZ2xlQ29udGV4dC5pc0V4cGFuZGVkKCkgPT09IHRydWUpIHtcblx0XHRcdFx0XHRcdGF3YWl0IHNpbmdsZUNvbnRleHQuY29sbGFwc2UoKTtcblx0XHRcdFx0XHR9XG5cdFx0XHRcdFx0cmV0dXJuIHNpbmdsZUNvbnRleHQuZXhwYW5kKE51bWJlci5NQVhfU0FGRV9JTlRFR0VSKTtcblx0XHRcdFx0fVxuXHRcdFx0fSk7XG5cdFx0XHRhd2FpdCBQcm9taXNlLmFsbChwcm9taXNlQXJyYXkpO1xuXHRcdH0gZWxzZSB7XG5cdFx0XHRhd2FpdCBQcm9taXNlLmFsbChcblx0XHRcdFx0c2VsZWN0ZWRDb250ZXh0cy5tYXAoYXN5bmMgKHNpbmdsZUNvbnRleHQ6IENvbnRleHQpID0+IHtcblx0XHRcdFx0XHRpZiAoc2luZ2xlQ29udGV4dC5pc0V4cGFuZGVkKCkgPT09IHRydWUpIHtcblx0XHRcdFx0XHRcdHJldHVybiBzaW5nbGVDb250ZXh0LmNvbGxhcHNlKHRydWUpO1xuXHRcdFx0XHRcdH1cblx0XHRcdFx0fSlcblx0XHRcdCk7XG5cdFx0fVxuXHR9XG5cblx0LyoqXG5cdCAqIEludGVybmFsIG1ldGhvZCB0byBtb3ZlIGEgcm93IHVwIG9yIGRvd24gaW4gYSBUcmVlIHRhYmxlLlxuXHQgKiBAcGFyYW0gX3VpNUV2ZW50XG5cdCAqIEBwYXJhbSBtb3ZlVXAgVHJ1ZSBmb3IgbW92ZSB1cCwgZmFsc2UgZm9yIG1vdmUgZG93blxuXHQgKiBAcGFyYW0gZm9yQ29udGV4dE1lbnVcblx0ICovXG5cdGFzeW5jIF9vbk1vdmVVcERvd24odGhpczogSVRhYmxlQmxvY2sgJiBUYWJsZUhpZXJhcmNoeSwgX3VpNUV2ZW50OiBVSTVFdmVudCwgbW92ZVVwOiBib29sZWFuLCBmb3JDb250ZXh0TWVudSA9IGZhbHNlKTogUHJvbWlzZTx2b2lkPiB7XG5cdFx0Y29uc3Qgc2VsZWN0ZWRDb250ZXh0cyA9IHRoaXMuZ2V0U2VsZWN0ZWRDb250ZXh0cygpO1xuXHRcdGlmIChzZWxlY3RlZENvbnRleHRzLmxlbmd0aCAhPT0gMSkge1xuXHRcdFx0cmV0dXJuO1xuXHRcdH1cblx0XHRjb25zdCBtZGNUYWJsZSA9IHRoaXMuZ2V0Q29udGVudCgpO1xuXHRcdG1kY1RhYmxlLnNldEJ1c3kodHJ1ZSk7XG5cblx0XHQvLyBNb3ZlIHRoZSBjb250ZXh0IHVwIG9yIGRvd25cblx0XHRjb25zdCBtb3ZlZENvbnRleHQgPSBzZWxlY3RlZENvbnRleHRzWzBdO1xuXHRcdGNvbnN0IHBhcmVudENvbnRleHQgPSBhd2FpdCBtb3ZlZENvbnRleHQucmVxdWVzdFBhcmVudCgpO1xuXHRcdGxldCBjb250ZXh0TW92ZWQgPSBmYWxzZTtcblx0XHRsZXQgbW92ZVByb21pc2UgPSBudWxsO1xuXHRcdGlmIChtb3ZlVXApIHtcblx0XHRcdGNvbnN0IHByZXZpb3VzU2libGluZyA9IGF3YWl0IG1vdmVkQ29udGV4dC5yZXF1ZXN0U2libGluZygtMSk7XG5cdFx0XHRpZiAocHJldmlvdXNTaWJsaW5nKSB7XG5cdFx0XHRcdG1vdmVQcm9taXNlID0gbW92ZWRDb250ZXh0Lm1vdmUoeyBuZXh0U2libGluZzogcHJldmlvdXNTaWJsaW5nLCBwYXJlbnQ6IHBhcmVudENvbnRleHQgfSk7XG5cdFx0XHRcdGNvbnRleHRNb3ZlZCA9IHRydWU7XG5cdFx0XHR9XG5cdFx0fSBlbHNlIHtcblx0XHRcdGNvbnN0IG5leHRTaWJsaW5nID0gYXdhaXQgbW92ZWRDb250ZXh0LnJlcXVlc3RTaWJsaW5nKDEpO1xuXHRcdFx0aWYgKG5leHRTaWJsaW5nKSB7XG5cdFx0XHRcdG1vdmVQcm9taXNlID0gbmV4dFNpYmxpbmcubW92ZSh7IG5leHRTaWJsaW5nOiBtb3ZlZENvbnRleHQsIHBhcmVudDogcGFyZW50Q29udGV4dCB9KTtcblx0XHRcdFx0Y29udGV4dE1vdmVkID0gdHJ1ZTtcblx0XHRcdH1cblx0XHR9XG5cblx0XHRhd2FpdCBQcm9taXNlLmFsbChbbW92ZVByb21pc2UsIHRoaXMucmVxdWVzdFNpZGVFZmZlY3RzRm9yQ2hhbmdlTmV4dFNpYmxpbmdBY3Rpb24obW92ZWRDb250ZXh0KV0pO1xuXG5cdFx0Ly8gU2Nyb2xsIHRvIHRoZSBuZXcgcG9zaXRpb25cblx0XHRjb25zdCBuZXdJbmRleCA9IG1vdmVkQ29udGV4dC5nZXRJbmRleCgpO1xuXHRcdGlmIChjb250ZXh0TW92ZWQgJiYgbmV3SW5kZXggIT09IHVuZGVmaW5lZCAmJiBuZXdJbmRleCA+PSAwKSB7XG5cdFx0XHRpZiAoIWZvckNvbnRleHRNZW51KSB7XG5cdFx0XHRcdG1kY1RhYmxlLnNjcm9sbFRvSW5kZXgobmV3SW5kZXgpO1xuXHRcdFx0fSBlbHNlIHtcblx0XHRcdFx0bWRjVGFibGUuZm9jdXNSb3cobmV3SW5kZXgpO1xuXHRcdFx0fVxuXHRcdH1cblx0XHRtZGNUYWJsZS5zZXRCdXN5KGZhbHNlKTtcblx0fVxuXG5cdC8qKlxuXHQgKiBSZXF1ZXN0cyB0aGUgc2lkZSBlZmZlY3QgZm9yIHRoZSBDaGFuZ2VOZXh0U2libGluZ0FjdGlvbi5cblx0ICogQHBhcmFtIG1vdmVkQ29udGV4dCBUaGUgY29udGV4dCB0aGF0IGhhcyBiZWVuIG1vdmVkXG5cdCAqIEByZXR1cm5zIEEgUHJvbWlzZVxuXHQgKi9cblx0YXN5bmMgcmVxdWVzdFNpZGVFZmZlY3RzRm9yQ2hhbmdlTmV4dFNpYmxpbmdBY3Rpb24odGhpczogSVRhYmxlQmxvY2sgJiBUYWJsZUhpZXJhcmNoeSwgbW92ZWRDb250ZXh0OiBDb250ZXh0KTogUHJvbWlzZTx2b2lkPiB7XG5cdFx0cmV0dXJuIHRoaXMuX3JlcXVlc3RTaWRlRWZmZWN0c0ZvckhpZXJhcmNoeUFjdGlvbnMobW92ZWRDb250ZXh0LCBcIkNoYW5nZU5leHRTaWJsaW5nQWN0aW9uXCIpO1xuXHR9XG5cblx0LyoqXG5cdCAqIFJlcXVlc3RzIHRoZSBzaWRlIGVmZmVjdCBmb3IgdGhlIENvcHlBY3Rpb24uXG5cdCAqIEBwYXJhbSBtb3ZlZENvbnRleHQgVGhlIGNvbnRleHQgdGhhdCBoYXMgYmVlbiBtb3ZlZFxuXHQgKiBAcmV0dXJucyBBIFByb21pc2Vcblx0ICovXG5cdGFzeW5jIHJlcXVlc3RTaWRlRWZmZWN0c0ZvckNvcHlBY3Rpb24odGhpczogSVRhYmxlQmxvY2sgJiBUYWJsZUhpZXJhcmNoeSwgbW92ZWRDb250ZXh0OiBDb250ZXh0KTogUHJvbWlzZTx2b2lkPiB7XG5cdFx0cmV0dXJuIHRoaXMuX3JlcXVlc3RTaWRlRWZmZWN0c0ZvckhpZXJhcmNoeUFjdGlvbnMobW92ZWRDb250ZXh0LCBcIkNvcHlBY3Rpb25cIik7XG5cdH1cblxuXHQvKipcblx0ICogUmVxdWVzdHMgdGhlIHNpZGUgZWZmZWN0IGZvciB0aGUgQ29weUFjdGlvbiBvciBDaGFuZ2VOZXh0U2libGluZ0FjdGlvbi5cblx0ICogQHBhcmFtIG1vdmVkQ29udGV4dCBUaGUgY29udGV4dCB0aGF0IGhhcyBiZWVuIG1vdmVkXG5cdCAqIEBwYXJhbSBhY3Rpb25cblx0ICogQHJldHVybnMgQSBQcm9taXNlXG5cdCAqL1xuXHRhc3luYyBfcmVxdWVzdFNpZGVFZmZlY3RzRm9ySGllcmFyY2h5QWN0aW9ucyhcblx0XHR0aGlzOiBJVGFibGVCbG9jayAmIFRhYmxlSGllcmFyY2h5LFxuXHRcdG1vdmVkQ29udGV4dDogQ29udGV4dCxcblx0XHRhY3Rpb246IFwiQ2hhbmdlTmV4dFNpYmxpbmdBY3Rpb25cIiB8IFwiQ29weUFjdGlvblwiXG5cdCk6IFByb21pc2U8dm9pZD4ge1xuXHRcdGNvbnN0IGVudGl0eVBhdGggPSB0aGlzLmdldENvbnRlbnQoKS5kYXRhKFwibWV0YVBhdGhcIik7XG5cdFx0Y29uc3QgbWV0YU1vZGVsID0gbW92ZWRDb250ZXh0LmdldE1vZGVsKCkuZ2V0TWV0YU1vZGVsKCk7XG5cblx0XHRjb25zdCB0YXJnZXRPYmplY3QgPSBtZXRhTW9kZWwuZ2V0Q29udGV4dChlbnRpdHlQYXRoKTtcblx0XHRjb25zdCBjb252ZXJ0TWV0YU1vZGVsQ29udGV4dCA9IE1ldGFNb2RlbENvbnZlcnRlci5jb252ZXJ0TWV0YU1vZGVsQ29udGV4dCh0YXJnZXRPYmplY3QpIGFzIE5hdmlnYXRpb25Qcm9wZXJ0eSB8IEVudGl0eVNldDtcblx0XHRjb25zdCBlbnRpdHlUeXBlID0gKGNvbnZlcnRNZXRhTW9kZWxDb250ZXh0IGFzIE5hdmlnYXRpb25Qcm9wZXJ0eSkudGFyZ2V0VHlwZSA/PyAoY29udmVydE1ldGFNb2RlbENvbnRleHQgYXMgRW50aXR5U2V0KS5lbnRpdHlUeXBlO1xuXHRcdGNvbnN0IGFjdGlvbk5hbWUgPSBlbnRpdHlUeXBlLmFubm90YXRpb25zLkhpZXJhcmNoeT8uW1xuXHRcdFx0YFJlY3Vyc2l2ZUhpZXJhcmNoeUFjdGlvbnMjJHt0aGlzLmdldFRhYmxlRGVmaW5pdGlvbigpLmNvbnRyb2wuaGllcmFyY2h5UXVhbGlmaWVyID8/IFwiXCJ9YFxuXHRcdF0/LlthY3Rpb25dIGFzIHN0cmluZyB8IHVuZGVmaW5lZDtcblxuXHRcdGlmIChhY3Rpb25OYW1lKSB7XG5cdFx0XHRjb25zdCBhcHBDb21wb25lbnQgPSBDb21tb25VdGlscy5nZXRBcHBDb21wb25lbnQodGhpcy5nZXRDb250ZW50KCkpO1xuXHRcdFx0Y29uc3Qgc2lkZUVmZmVjdHNTZXJ2aWNlID0gYXBwQ29tcG9uZW50LmdldFNpZGVFZmZlY3RzU2VydmljZSgpO1xuXHRcdFx0Y29uc3Qgc2lkZUVmZmVjdHMgPSBzaWRlRWZmZWN0c1NlcnZpY2UuZ2V0T0RhdGFBY3Rpb25TaWRlRWZmZWN0cyhhY3Rpb25OYW1lLCBtb3ZlZENvbnRleHQpO1xuXHRcdFx0aWYgKHNpZGVFZmZlY3RzKSB7XG5cdFx0XHRcdGF3YWl0IHNpZGVFZmZlY3RzU2VydmljZS5yZXF1ZXN0U2lkZUVmZmVjdHNGb3JPRGF0YUFjdGlvbihzaWRlRWZmZWN0cywgbW92ZWRDb250ZXh0KTtcblx0XHRcdH1cblx0XHR9XG5cdH1cblxuXHQvKipcblx0ICogU2FmZWx5IGNoZWNrcyBpZiBtb3ZpbmcgYSBub2RlIGlzIGFsbG93ZWQuXG5cdCAqIEBwYXJhbSBjdXN0b21GdW5jdGlvblxuXHQgKiBAcGFyYW0gbW92ZWRDb250ZXh0XG5cdCAqIEBwYXJhbSBwYXJlbnRDb250ZXh0XG5cdCAqIEByZXR1cm5zIFRydWUgaWYgYWxsb3dlZFxuXHQgKi9cblx0cHJpdmF0ZSBzYWZlSXNNb3ZlQWxsb3dlZChcblx0XHRjdXN0b21GdW5jdGlvbjogKChjb250ZXh0OiBDb250ZXh0LCBwYXJlbnQ6IENvbnRleHQgfCBudWxsKSA9PiBib29sZWFuKSB8IHVuZGVmaW5lZCxcblx0XHRtb3ZlZENvbnRleHQ6IENvbnRleHQsXG5cdFx0cGFyZW50Q29udGV4dDogQ29udGV4dCB8IG51bGxcblx0KTogYm9vbGVhbiB7XG5cdFx0aWYgKCFjdXN0b21GdW5jdGlvbikge1xuXHRcdFx0cmV0dXJuIHRydWU7XG5cdFx0fVxuXG5cdFx0bGV0IGFsbG93ZWQgPSB0cnVlO1xuXHRcdHRyeSB7XG5cdFx0XHRhbGxvd2VkID0gY3VzdG9tRnVuY3Rpb24obW92ZWRDb250ZXh0LCBwYXJlbnRDb250ZXh0KSA9PT0gdHJ1ZTtcblx0XHR9IGNhdGNoIChlcnJvcikge1xuXHRcdFx0TG9nLmVycm9yKFwiQ2Fubm90IGV4ZWN1dGUgZnVuY3Rpb24gcmVsYXRlZCB0byBpc01vdmVUb1Bvc2l0aW9uQWxsb3dlZFwiLCBlcnJvciBhcyBzdHJpbmcpO1xuXHRcdFx0YWxsb3dlZCA9IHRydWU7XG5cdFx0fVxuXG5cdFx0cmV0dXJuIGFsbG93ZWQ7XG5cdH1cblxuXHQvKipcblx0ICogQ2hlY2tzIGlzIGRyb3AgXCJiZXR3ZWVuXCIgaXMgYWxsb3dlZCBieSBjdXN0b20gbG9naWMgZm9yIGEgZ2l2ZW4gdGFyZ2V0Q29udGV4dC5cblx0ICogQHBhcmFtIGN1c3RvbUZ1bmN0aW9uXG5cdCAqIEBwYXJhbSBkcmFnZ2VkQ29udGV4dFxuXHQgKiBAcGFyYW0gdGFyZ2V0Q29udGV4dFxuXHQgKiBAcmV0dXJucyBUcnVlIGlmIGFsbG93ZWRcblx0ICovXG5cdHByaXZhdGUgaXNEcm9wQmV0d2VlbkFsbG93ZWRGb3JEcmFnKFxuXHRcdGN1c3RvbUZ1bmN0aW9uOiAoY29udGV4dDogQ29udGV4dCwgcGFyZW50OiBDb250ZXh0IHwgbnVsbCkgPT4gYm9vbGVhbixcblx0XHRkcmFnZ2VkQ29udGV4dDogQ29udGV4dCxcblx0XHR0YXJnZXRDb250ZXh0OiBDb250ZXh0XG5cdCk6IGJvb2xlYW4ge1xuXHRcdGxldCBpc0FsbG93ZWQgPSB0cnVlO1xuXG5cdFx0Ly8gRGV0ZXJtaW5lIHdoYXQgdG8gZG8gaWYgd2UgZHJvcCBiZWZvcmUgdGFyZ2V0Q29udGV4dFxuXHRcdGNvbnN0IGNvbnRleHRCZWZvcmUgPSB0aGlzLmdldENvbnRleHRCZWZvcmUodGFyZ2V0Q29udGV4dCk7XG5cdFx0Y29uc3QgcGFyZW50QmVmb3JlID0gY29udGV4dEJlZm9yZSA9PT0gbnVsbCA/IG51bGwgOiBjb250ZXh0QmVmb3JlLmdldFBhcmVudCgpO1xuXHRcdGNvbnN0IHBhcmFtc0JlZm9yZSA9IHRoaXMuZ2V0RHJvcEJldHdlZW5QYXJhbWV0ZXJzKGNvbnRleHRCZWZvcmUsIHBhcmVudEJlZm9yZSwgdGFyZ2V0Q29udGV4dCwgdGFyZ2V0Q29udGV4dC5nZXRQYXJlbnQoKSk7XG5cblx0XHQvLyBEZXRlcm1pbmUgd2hhdCB0byBkbyBpZiB3ZSBkcm9wIGFmdGVyIHRhcmdldENvbnRleHRcblx0XHRjb25zdCBjb250ZXh0QWZ0ZXIgPSB0aGlzLmdldENvbnRleHRBZnRlcih0YXJnZXRDb250ZXh0KTtcblx0XHRjb25zdCBwYXJlbnRBZnRlciA9IGNvbnRleHRBZnRlciA9PT0gbnVsbCA/IG51bGwgOiBjb250ZXh0QWZ0ZXIuZ2V0UGFyZW50KCk7XG5cdFx0Y29uc3QgcGFyYW1zQWZ0ZXIgPSB0aGlzLmdldERyb3BCZXR3ZWVuUGFyYW1ldGVycyh0YXJnZXRDb250ZXh0LCB0YXJnZXRDb250ZXh0LmdldFBhcmVudCgpLCBjb250ZXh0QWZ0ZXIsIHBhcmVudEFmdGVyKTtcblxuXHRcdC8vIElmIHBhcmFtc0JlZm9yZSBvciBwYXJhbXNBZnRlciBjYW5ub3QgYmUgZGV0ZXJtaW5lZCAoYmVjYXVzZSBwYXJlbnRzIGFyZSBub3QgbG9hZGVkKSwgd2UgYWxsb3cgZHJvcCBiZXR3ZWVuIGFuZCBkbyB0aGUgcmVhbCBjaGVjayBpbiBvbkRyb3BEb2N1bWVudFxuXHRcdGlmIChwYXJhbXNCZWZvcmUgIT09IHVuZGVmaW5lZCAmJiBwYXJhbXNBZnRlciAhPT0gdW5kZWZpbmVkKSB7XG5cdFx0XHRpZiAocGFyYW1zQmVmb3JlLnBhcmVudCA9PT0gcGFyYW1zQWZ0ZXIucGFyZW50KSB7XG5cdFx0XHRcdC8vIERyb3BwaW5nIGJlZm9yZSBvciBhZnRlciB3aWxsIG1vdmUgdW5kZXIgdGhlIHNhbWUgcGFyZW50IC0tPiB3ZSBjYWxsIHRoZSBjdXN0b20gbG9naWMgb25seSBvbmNlXG5cdFx0XHRcdGlzQWxsb3dlZCA9IHRoaXMuc2FmZUlzTW92ZUFsbG93ZWQoY3VzdG9tRnVuY3Rpb24sIGRyYWdnZWRDb250ZXh0LCBwYXJhbXNCZWZvcmUucGFyZW50KTtcblx0XHRcdH0gZWxzZSB7XG5cdFx0XHRcdC8vIEFzIHRoZSBNREMgdGFibGUgY2Fubm90IGRpc2FibGUgZHJvcCBiZWZvcmUgYW5kIGFmdGVyIHNlcGFyYXRlbHksIHdlIGRpc2FibGUgZHJvcCBiZXR3ZWVuIG9ubHkgaWYgYm90aCBkcm9wIGJlZm9yZSBhbmQgYWZ0ZXIgYXJlIGZvcmJpZGRlblxuXHRcdFx0XHRpc0FsbG93ZWQgPVxuXHRcdFx0XHRcdHRoaXMuc2FmZUlzTW92ZUFsbG93ZWQoY3VzdG9tRnVuY3Rpb24sIGRyYWdnZWRDb250ZXh0LCBwYXJhbXNCZWZvcmUucGFyZW50KSB8fFxuXHRcdFx0XHRcdHRoaXMuc2FmZUlzTW92ZUFsbG93ZWQoY3VzdG9tRnVuY3Rpb24sIGRyYWdnZWRDb250ZXh0LCBwYXJhbXNBZnRlci5wYXJlbnQpO1xuXHRcdFx0fVxuXHRcdH1cblxuXHRcdHJldHVybiBpc0FsbG93ZWQ7XG5cdH1cblxuXHQvKipcblx0ICogUmV0dXJucyB0aGUgY29udGV4dCB0aGF0IGlzIHBsYWNlZCBiZWZvcmUgYSBnaXZlbiBjb250ZXh0IGluIGEgTGlzdEJpbmRpbmcuXG5cdCAqIEBwYXJhbSBjb250ZXh0XG5cdCAqIEByZXR1cm5zIFRoZSBjb250ZXh0IGJlZm9yZSwgb3IgbnVsbFxuXHQgKi9cblx0cHJpdmF0ZSBnZXRDb250ZXh0QmVmb3JlKGNvbnRleHQ6IENvbnRleHQpOiBDb250ZXh0IHwgbnVsbCB7XG5cdFx0Y29uc3QgY29udGV4dEluZGV4ID0gY29udGV4dC5nZXRJbmRleCgpO1xuXHRcdGlmIChjb250ZXh0SW5kZXggPT09IHVuZGVmaW5lZCkge1xuXHRcdFx0dGhyb3cgbmV3IEVycm9yKFwiVW5leHBlY3RlZCBlcnJvclwiKTtcblx0XHR9XG5cblx0XHRjb25zdCBsaXN0QmluZGluZyA9IGNvbnRleHQuZ2V0QmluZGluZygpIGFzIE9EYXRhTGlzdEJpbmRpbmc7XG5cdFx0cmV0dXJuIGNvbnRleHRJbmRleCA9PT0gMFxuXHRcdFx0PyBudWxsXG5cdFx0XHQ6IGxpc3RCaW5kaW5nLmdldEFsbEN1cnJlbnRDb250ZXh0cygpLmZpbmQoKGN0eCkgPT4ge1xuXHRcdFx0XHRcdHJldHVybiBjdHguZ2V0SW5kZXgoKSA9PT0gY29udGV4dEluZGV4IC0gMTtcblx0XHRcdCAgfSkgPz8gbnVsbDtcblx0fVxuXG5cdC8qKlxuXHQgKiBSZXR1cm5zIHRoZSBjb250ZXh0IHRoYXQgaXMgcGxhY2VkIGFmdGVyIGEgZ2l2ZW4gY29udGV4dCBpbiBhIExpc3RCaW5kaW5nLlxuXHQgKiBAcGFyYW0gY29udGV4dFxuXHQgKiBAcmV0dXJucyBUaGUgY29udGV4dCBhZnRlciwgb3IgbnVsbFxuXHQgKi9cblx0cHJpdmF0ZSBnZXRDb250ZXh0QWZ0ZXIoY29udGV4dDogQ29udGV4dCk6IENvbnRleHQgfCBudWxsIHtcblx0XHRjb25zdCBjb250ZXh0SW5kZXggPSBjb250ZXh0LmdldEluZGV4KCk7XG5cdFx0aWYgKGNvbnRleHRJbmRleCA9PT0gdW5kZWZpbmVkKSB7XG5cdFx0XHR0aHJvdyBuZXcgRXJyb3IoXCJVbmV4cGVjdGVkIGVycm9yXCIpO1xuXHRcdH1cblxuXHRcdGNvbnN0IGxpc3RCaW5kaW5nID0gY29udGV4dC5nZXRCaW5kaW5nKCkgYXMgT0RhdGFMaXN0QmluZGluZztcblx0XHRyZXR1cm4gKFxuXHRcdFx0bGlzdEJpbmRpbmcuZ2V0QWxsQ3VycmVudENvbnRleHRzKCkuZmluZCgoY3R4KSA9PiB7XG5cdFx0XHRcdHJldHVybiBjdHguZ2V0SW5kZXgoKSA9PT0gY29udGV4dEluZGV4ICsgMTtcblx0XHRcdH0pID8/IG51bGxcblx0XHQpO1xuXHR9XG5cblx0LyoqXG5cdCAqIFJldHVybnMgaW5mb3JtYXRpb24gdG8gcGVyZm9ybSBhIGRyb3AgYmV0d2VlbiAyIG5vZGVzOiB0aGUgbmV3IHBhcmVudCBhbmQgdGhlIG5leHQgc2libGluZy5cblx0ICogQHBhcmFtIGNvbnRleHRCZWZvcmUgQ29udGV4dCBhZnRlciB3aGljaCB0aGUgZHJvcCBpcyBkb25lXG5cdCAqIEBwYXJhbSBwYXJlbnRCZWZvcmUgUGFyZW50IG9mIGNvbnRleHRCZWZvcmUgKHVuZGVmaW5lZCBpZiBub3Qga25vd24pXG5cdCAqIEBwYXJhbSBjb250ZXh0QWZ0ZXIgQ29udGV4dCBiZWZvcmUgd2hpY2ggdGhlIGRyb3AgaXMgZG9uZVxuXHQgKiBAcGFyYW0gcGFyZW50QWZ0ZXIgUGFyZW50IG9mIGNvbnRleHRBZnRlciAodW5kZWZpbmVkIGlmIG5vdCBrbm93bilcblx0ICogQHJldHVybnMgVGhlIG5ldyBwYXJlbnQgYW5kIHRoZSBuZXh0IHNpYmxpbmcsIG9yIHVuZGVmaW5lZCBpZiBpdCBjYW5ub3QgYmUgZGV0ZXJtaW5lZFxuXHQgKi9cblx0cHJpdmF0ZSBnZXREcm9wQmV0d2VlblBhcmFtZXRlcnMoXG5cdFx0Y29udGV4dEJlZm9yZTogQ29udGV4dCB8IG51bGwsXG5cdFx0cGFyZW50QmVmb3JlOiBDb250ZXh0IHwgbnVsbCB8IHVuZGVmaW5lZCxcblx0XHRjb250ZXh0QWZ0ZXI6IENvbnRleHQgfCBudWxsLFxuXHRcdHBhcmVudEFmdGVyOiBDb250ZXh0IHwgbnVsbCB8IHVuZGVmaW5lZFxuXHQpOiB7IHBhcmVudDogQ29udGV4dCB8IG51bGw7IG5leHRTaWJsaW5nPzogQ29udGV4dCB8IG51bGwgfSB8IHVuZGVmaW5lZCB7XG5cdFx0aWYgKGNvbnRleHRCZWZvcmUgPT09IG51bGwpIHtcblx0XHRcdC8vIERyb3AgYmVmb3JlIGZpcnN0IG5vZGUgLS0+IG1vdmUgYXMgZmlyc3Qgcm9vdCBub2RlXG5cdFx0XHRyZXR1cm4geyBwYXJlbnQ6IG51bGwsIG5leHRTaWJsaW5nOiBjb250ZXh0QWZ0ZXIgfTtcblx0XHR9IGVsc2UgaWYgKGNvbnRleHRBZnRlciA9PT0gbnVsbCkge1xuXHRcdFx0Ly8gRHJvcCBhZnRlciBsYXN0IG5vZGUgLS0+IG1vdmUgYXMgbmV4dCBzaWJsaW5nIG9mIHRoZSBsYXN0IG5vZGVcblx0XHRcdHJldHVybiBwYXJlbnRCZWZvcmUgIT09IHVuZGVmaW5lZCA/IHsgcGFyZW50OiBwYXJlbnRCZWZvcmUsIG5leHRTaWJsaW5nOiBudWxsIH0gOiB1bmRlZmluZWQ7XG5cdFx0fSBlbHNlIGlmIChwYXJlbnRBZnRlciA9PT0gY29udGV4dEJlZm9yZSkge1xuXHRcdFx0Ly8gRHJvcCBiZXR3ZWVuIGEgcGFyZW50IGFuZCBpdHMgZmlyc3QgY2hpbGQgLS0+IG1vdmUgYXMgZmlyc3QgY2hpbGQgb2YgdGhlIHBhcmVudFxuXHRcdFx0cmV0dXJuIHsgcGFyZW50OiBjb250ZXh0QmVmb3JlLCBuZXh0U2libGluZzogY29udGV4dEFmdGVyIH07XG5cdFx0fSBlbHNlIGlmIChwYXJlbnRCZWZvcmUgPT09IHVuZGVmaW5lZCB8fCBwYXJlbnRBZnRlciA9PT0gdW5kZWZpbmVkKSB7XG5cdFx0XHQvLyBJZiBvbmUgb2YgdGhlIHBhcmVudCBpcyBub3Qga25vd24sIHdlIGRvbid0IGtub3cgd2hhdCB0byBkb1xuXHRcdFx0cmV0dXJuIHVuZGVmaW5lZDtcblx0XHR9IGVsc2UgaWYgKHBhcmVudEJlZm9yZSA9PT0gcGFyZW50QWZ0ZXIpIHtcblx0XHRcdC8vIERyb3AgYmV0d2VlbiAyIHNpYmxpbmdzXG5cdFx0XHRyZXR1cm4geyBwYXJlbnQ6IHBhcmVudEJlZm9yZSwgbmV4dFNpYmxpbmc6IGNvbnRleHRBZnRlciB9O1xuXHRcdH0gZWxzZSB7XG5cdFx0XHQvLyBOb2RlWFxuXHRcdFx0Ly8gIC4uLi5cblx0XHRcdC8vICAgICB8LS0gY29udGV4dEJlZm9yZVxuXHRcdFx0Ly8gY29udGV4dEFmdGVyXG5cdFx0XHQvLyAtLT4gTW92ZSBhcyB0aGUgbmV4dCBzaWJsaW5nIG9mIGNvbnRleHRCZWZvcmVcblx0XHRcdHJldHVybiB7IHBhcmVudDogcGFyZW50QmVmb3JlLCBuZXh0U2libGluZzogbnVsbCB9O1xuXHRcdH1cblx0fVxuXG5cdC8qKlxuXHQgKiBJbnRlcm5hbCBtZXRob2QgdG8gZHJvcCBhIGNvbnRleHQgb24gb3IgYmV0d2VlbiAyIG5vZGVzLlxuXHQgKiBAcGFyYW0gY29udGV4dFxuXHQgKiBAcGFyYW0gaW5mb1xuXHQgKiBAcmV0dXJucyBUaGUgbW92ZSBQcm9taXNlXG5cdCAqL1xuXHRwcml2YXRlIGFzeW5jIGRyb3BDb250ZXh0KHRoaXM6IElUYWJsZUJsb2NrICYgVGFibGVIaWVyYXJjaHksIGNvbnRleHQ6IENvbnRleHQsIGluZm86IERyb3BJbmZvcm1hdGlvbik6IFByb21pc2U8dm9pZD4ge1xuXHRcdGNvbnN0IGlzTW92ZUFsbG93ZWRJbmZvID0gdGhpcy5nZXRUYWJsZURlZmluaXRpb24oKS5jb250cm9sLmlzTW92ZVRvUG9zaXRpb25BbGxvd2VkO1xuXHRcdGNvbnN0IGN1c3RvbUZ1bmN0aW9uID0gaXNNb3ZlQWxsb3dlZEluZm9cblx0XHRcdD8gRlBNSGVscGVyLmdldEN1c3RvbUZ1bmN0aW9uPChub2RlOiBDb250ZXh0LCBwYXJlbnQ6IENvbnRleHQgfCBudWxsKSA9PiBib29sZWFuPihcblx0XHRcdFx0XHRpc01vdmVBbGxvd2VkSW5mby5tb2R1bGVOYW1lLFxuXHRcdFx0XHRcdGlzTW92ZUFsbG93ZWRJbmZvLm1ldGhvZE5hbWUsXG5cdFx0XHRcdFx0dGhpcy5nZXRDb250ZW50KClcblx0XHRcdCAgKVxuXHRcdFx0OiB1bmRlZmluZWQ7XG5cdFx0Y29uc3QgdGFibGUgPSB0aGlzLmdldENvbnRlbnQoKTtcblx0XHR0YWJsZS5zZXRCdXN5KHRydWUpO1xuXHRcdGNvbnN0IGludGVybmFsTW9kZWxDb250ZXh0ID0gdGFibGUuZ2V0QmluZGluZ0NvbnRleHQoXCJpbnRlcm5hbFwiKSBhcyBJbnRlcm5hbE1vZGVsQ29udGV4dDtcblx0XHRjb25zdCBpc1RhYmxlU29ydGVkID0gaW50ZXJuYWxNb2RlbENvbnRleHQuZ2V0UHJvcGVydHkoXCJpc1NvcnRlZFwiKSA9PT0gdHJ1ZTtcblxuXHRcdGNvbnN0IG1vdmVDb250ZXh0ID0gYXN5bmMgKHBhcmVudDogQ29udGV4dCB8IG51bGwsIG5leHRTaWJsaW5nPzogQ29udGV4dCB8IG51bGwpOiBQcm9taXNlPHZvaWQ+ID0+IHtcblx0XHRcdC8vIFdlIGNoZWNrIGlmIHRoZSBtb3ZlIGlzIGFsbG93ZWQgYnkgY3VzdG9tIGxvZ2ljIChpZiBhbnkpLCBhcyB0aGlzIGNoZWNrIG1pZ2h0XG5cdFx0XHQvLyBub3QgaGF2ZSBiZWVuIGRvbmUgaW4gb25EcmFnRW50ZXJEb2N1bWVudCBpZiB0aGUgcGFyZW50IHdhcyBub3QgbG9hZGVkIHlldC5cblx0XHRcdGlmICh0aGlzLnNhZmVJc01vdmVBbGxvd2VkKGN1c3RvbUZ1bmN0aW9uLCBjb250ZXh0LCBwYXJlbnQpKSB7XG5cdFx0XHRcdC8vIElmIHRoZSB0YWJsZSBpcyBzb3J0ZWQsIHdlIGlnbm9yZSB0aGUgc2libGluZyBhcyB0aGUgcG9zaXRpb24gc2hhbGwgYmUgZGV0ZXJtaW5lZCBieSB0aGUgc2VydmVyXG5cdFx0XHRcdHJldHVybiBjb250ZXh0Lm1vdmUoeyBwYXJlbnQsIG5leHRTaWJsaW5nOiBpc1RhYmxlU29ydGVkID8gdW5kZWZpbmVkIDogbmV4dFNpYmxpbmcgfSk7XG5cdFx0XHR9IGVsc2Uge1xuXHRcdFx0XHRNZXNzYWdlVG9hc3Quc2hvdyh0aGlzLmdldFRyYW5zbGF0ZWRUZXh0KFwiTV9UQUJMRV9EUk9QX05PVF9BTExPV0VEXCIpKTtcblx0XHRcdH1cblx0XHR9O1xuXG5cdFx0aWYgKGluZm8ucG9zaXRpb24gPT09IERyb3BQb3NpdGlvbi5Pbikge1xuXHRcdFx0Ly8gRHJvcCBvbiBhIG5vZGVcblx0XHRcdHJldHVybiBtb3ZlQ29udGV4dChpbmZvLnBhcmVudENvbnRleHQpLmZpbmFsbHkoKCkgPT4gdGFibGUuc2V0QnVzeShmYWxzZSkpO1xuXHRcdH0gZWxzZSB7XG5cdFx0XHQvLyBEcm9wIGJldHdlZW4gMiBub2Rlc1xuXHRcdFx0Y29uc3QgW3BhcmVudEJlZm9yZSwgcGFyZW50QWZ0ZXJdID0gYXdhaXQgUHJvbWlzZS5hbGwoW1xuXHRcdFx0XHRpbmZvLmNvbnRleHRCZWZvcmU/LnJlcXVlc3RQYXJlbnQoKSA/PyBudWxsLFxuXHRcdFx0XHRpbmZvLmNvbnRleHRBZnRlcj8ucmVxdWVzdFBhcmVudCgpID8/IG51bGxcblx0XHRcdF0pO1xuXHRcdFx0Y29uc3QgcGFyYW1zID0gdGhpcy5nZXREcm9wQmV0d2VlblBhcmFtZXRlcnMoaW5mby5jb250ZXh0QmVmb3JlLCBwYXJlbnRCZWZvcmUsIGluZm8uY29udGV4dEFmdGVyLCBwYXJlbnRBZnRlcikhO1xuXHRcdFx0cmV0dXJuIG1vdmVDb250ZXh0KHBhcmFtcy5wYXJlbnQsIHBhcmFtcy5uZXh0U2libGluZykuZmluYWxseSgoKSA9PiB0YWJsZS5zZXRCdXN5KGZhbHNlKSk7XG5cdFx0fVxuXHR9XG59XG4iXSwibWFwcGluZ3MiOiI7Ozs7Ozs7O01Bc0JLQSxZQUFZLDBCQUFaQSxZQUFZO0lBQVpBLFlBQVk7SUFBWkEsWUFBWTtJQUFaQSxZQUFZO0lBQUEsT0FBWkEsWUFBWTtFQUFBLEVBQVpBLFlBQVk7RUFBQSxJQVVJQyxjQUFjO0lBQUEsU0FBQUEsZUFBQTtJQUFBQyxRQUFBLEdBQUFELGNBQUE7SUFBQSxJQUFBRSxNQUFBLEdBQUFGLGNBQUEsQ0FBQUcsU0FBQTtJQUFBRCxNQUFBLENBQ2xDRSxVQUFVLEdBQVYsU0FBQUEsVUFBVUEsQ0FBQ0MsVUFBb0IsRUFBUTtNQUN0QztJQUFBOztJQUdEO0FBQ0Q7QUFDQTtBQUNBO0FBQ0EsT0FKQztJQUFBSCxNQUFBLENBS0FJLFVBQVUsR0FBVixTQUFBQSxVQUFVQSxDQUFxQ0MsR0FBNkIsRUFBRUMsY0FBdUIsRUFBRUMsTUFBc0IsRUFBUTtNQUNwSSxJQUFJQyxLQUFlO01BQ25CLElBQUksQ0FBQ0YsY0FBYyxFQUFFO1FBQ3BCRSxLQUFLLEdBQUdILEdBQUcsQ0FBQ0ksU0FBUyxDQUFDLENBQUMsQ0FBQ0MsU0FBUyxDQUFDLENBQWE7TUFDaEQsQ0FBQyxNQUFNO1FBQ04sTUFBTUMsSUFBSSxHQUFHTixHQUFHLENBQUNJLFNBQVMsQ0FBQyxDQUFDLENBQUNDLFNBQVMsQ0FBQyxDQUFTO1FBQ2hERixLQUFLLEdBQUdHLElBQUksQ0FBQ0QsU0FBUyxDQUFDLENBQUMsRUFBRUEsU0FBUyxDQUFDLENBQWE7TUFDbEQ7TUFDQSxNQUFNRSxlQUFlLEdBQUdKLEtBQUssQ0FBQ0ssaUJBQWlCLENBQUMsVUFBVSxDQUF5QjtNQUNuRixNQUFNQyxnQkFBZ0IsR0FBRyxJQUFJLENBQUNDLG1CQUFtQixDQUFDLENBQUM7TUFDbkQsSUFBSUQsZ0JBQWdCLENBQUNFLE1BQU0sR0FBRyxDQUFDLEVBQUU7UUFDaENDLEdBQUcsQ0FBQ0MsS0FBSyxDQUFDLFNBQVNYLE1BQU0sS0FBSyxLQUFLLEdBQUcsU0FBUyxHQUFHLFNBQVMsbUJBQW1CLENBQUM7UUFDL0U7TUFDRDtNQUVBSyxlQUFlLENBQUNPLFdBQVcsQ0FBQyxrQ0FBa0MsRUFBRUwsZ0JBQWdCLENBQUM7TUFDakZGLGVBQWUsQ0FBQ08sV0FBVyxDQUFDLDRCQUE0QixFQUFFWixNQUFNLENBQUM7TUFDakVhLFlBQVksQ0FBQ0MsSUFBSSxDQUFDQyxtQkFBbUIsQ0FBQ0MsZ0JBQWdCLENBQUNmLEtBQUssQ0FBQyxDQUFDZ0IsT0FBTyxDQUFDLGlCQUFpQixDQUFDLENBQUM7TUFDekYsSUFBSSxDQUFDbEIsY0FBYyxJQUFJTSxlQUFlLENBQUNhLFdBQVcsQ0FBQywwQkFBMEIsQ0FBQyxHQUFHLENBQUMsRUFBRTtRQUNuRkMsWUFBWSxDQUFDQyxjQUFjLENBQUNuQixLQUFLLENBQUM7UUFDbENBLEtBQUssQ0FBQ29CLG1CQUFtQixDQUFDLENBQUM7TUFDNUIsQ0FBQyxNQUFNLElBQUl0QixjQUFjLEVBQUU7UUFDMUI7UUFDQUUsS0FBSyxDQUFDb0IsbUJBQW1CLENBQUMsQ0FBQztNQUM1QjtNQUVBaEIsZUFBZSxDQUFDTyxXQUFXLENBQUMsK0JBQStCLEVBQUUsS0FBSyxDQUFDO01BQ25FUCxlQUFlLENBQUNPLFdBQVcsQ0FBQywyQ0FBMkMsRUFBRSxLQUFLLENBQUM7TUFDL0VQLGVBQWUsQ0FBQ08sV0FBVyxDQUFDLGdDQUFnQyxFQUFFLEtBQUssQ0FBQztNQUNwRVAsZUFBZSxDQUFDTyxXQUFXLENBQUMsNENBQTRDLEVBQUUsS0FBSyxDQUFDO01BQ2hGLE1BQU1VLFdBQVcsR0FBSXJCLEtBQUssQ0FBQ3NCLFVBQVUsQ0FBQyxDQUFDLENBQTJCQyxJQUFJLENBQUVDLGFBQWEsSUFDcEYsVUFBVSxDQUFDQyxJQUFJLENBQUNELGFBQWEsQ0FBQ0UsU0FBUyxDQUFDLENBQUMsQ0FBQ0MsS0FBSyxDQUFDLENBQUMsQ0FDbEQsQ0FBQztNQUNEQyxVQUFVLENBQUMsTUFBTTtRQUNoQlAsV0FBVyxFQUFFUSxLQUFLLENBQUMsQ0FBQztNQUNyQixDQUFDLEVBQUUsQ0FBQyxDQUFDO0lBQ047O0lBRUE7QUFDRDtBQUNBO0FBQ0EsT0FIQztJQUFBckMsTUFBQSxDQUlBc0Msb0JBQW9CLEdBQXBCLFNBQUFBLG9CQUFvQkEsQ0FFbkJDLFFBQTJILEVBQ3BIO01BQ1AsTUFBTUMsY0FBYyxHQUFHRCxRQUFRLENBQUNFLFlBQVksQ0FBQyxZQUFZLENBQUM7TUFDMUQsSUFBSSxJQUFJLENBQUNDLFVBQVUsQ0FBQyxDQUFDLENBQUNDLGFBQWEsQ0FBQyxDQUFDLEtBQUtILGNBQWMsQ0FBQ0ksVUFBVSxDQUFDLENBQUMsRUFBRTtRQUN0RTtRQUNBTCxRQUFRLENBQUNNLGNBQWMsQ0FBQyxDQUFDO1FBQ3pCO01BQ0Q7TUFFQSxNQUFNQyxhQUE2QixHQUFHUCxRQUFRLENBQUNFLFlBQVksQ0FBQyxnQkFBZ0IsQ0FBQztNQUM3RSxJQUFJRCxjQUFjLENBQUNPLFlBQVksQ0FBQ0QsYUFBYSxDQUFDLEVBQUU7UUFDL0M7UUFDQVAsUUFBUSxDQUFDTSxjQUFjLENBQUMsQ0FBQztRQUN6QjtNQUNEO01BRUEsSUFBSUcsZUFBZSxHQUFHLEtBQUs7TUFDM0IsSUFBSUMsVUFBVSxHQUFHLEtBQUs7TUFDdEIsTUFBTUMsZUFBZSxHQUFHLElBQUksQ0FBQ0Msa0JBQWtCLENBQUMsQ0FBQztNQUNqRCxNQUFNQyxpQkFBaUIsR0FBR0YsZUFBZSxDQUFDRyxPQUFPLENBQUNDLHVCQUF1QjtNQUN6RSxNQUFNQyxjQUFjLEdBQUdILGlCQUFpQixHQUNyQ0ksU0FBUyxDQUFDQyxpQkFBaUIsQ0FDM0JMLGlCQUFpQixDQUFDTSxVQUFVLEVBQzVCTixpQkFBaUIsQ0FBQ08sVUFBVSxFQUM1QnBCLFFBQVEsQ0FBQzlCLFNBQVMsQ0FBQyxDQUFDLENBQUNDLFNBQVMsQ0FBQyxDQUMvQixDQUFDLEdBQ0RrRCxTQUFTO01BRVosSUFBSWQsYUFBYSxLQUFLLElBQUksQ0FBQ0osVUFBVSxDQUFDLENBQUMsQ0FBQzdCLGlCQUFpQixDQUFDLENBQUMsRUFBRTtRQUM1RDtRQUNBb0MsVUFBVSxHQUFHLENBQUMsSUFBSSxDQUFDWSxpQkFBaUIsQ0FBQ04sY0FBYyxFQUFFZixjQUFjLEVBQUUsSUFBSSxDQUFDO1FBQzFFUSxlQUFlLEdBQUcsSUFBSTtNQUN2QixDQUFDLE1BQU07UUFDTkMsVUFBVSxHQUFHLENBQUMsSUFBSSxDQUFDWSxpQkFBaUIsQ0FBQ04sY0FBYyxFQUFFZixjQUFjLEVBQUVNLGFBQWEsQ0FBQztRQUNuRkUsZUFBZSxHQUFHRSxlQUFlLENBQUNZLFVBQVUsQ0FBQ0MscUJBQXFCLEtBQUssSUFBSTtRQUUzRSxJQUNDQyxJQUFJLENBQUNDLEdBQUcsQ0FBQ25CLGFBQWEsQ0FBQ29CLFFBQVEsQ0FBQyxDQUFDLEdBQUkxQixjQUFjLENBQUMwQixRQUFRLENBQUMsQ0FBRSxDQUFDLEtBQUssQ0FBQyxJQUN0RSxFQUFFcEIsYUFBYSxDQUFDb0IsUUFBUSxDQUFDLENBQUMsS0FBSyxDQUFDLElBQUkzQixRQUFRLENBQUNFLFlBQVksQ0FBQyxjQUFjLENBQUMsS0FBSyxRQUFRLENBQUMsSUFDdkYsRUFDQ0ssYUFBYSxDQUFDb0IsUUFBUSxDQUFDLENBQUMsS0FBSyxJQUFJLENBQUN4QixVQUFVLENBQUMsQ0FBQyxDQUFDQyxhQUFhLENBQUMsQ0FBQyxDQUFDd0IsU0FBUyxDQUFDLENBQUMsR0FBRyxDQUFDLElBQzlFNUIsUUFBUSxDQUFDRSxZQUFZLENBQUMsY0FBYyxDQUFDLEtBQUssT0FBTyxDQUNqRCxFQUNBO1VBQ0Q7VUFDQU8sZUFBZSxHQUFHLElBQUk7UUFDdkI7O1FBRUE7UUFDQSxJQUNDLENBQUNBLGVBQWUsSUFDaEIsQ0FBQ0UsZUFBZSxDQUFDWSxVQUFVLENBQUNNLDhCQUE4QixJQUMxRHRCLGFBQWEsQ0FBQ3JCLFdBQVcsQ0FBQyxrQkFBa0IsQ0FBQyxLQUFLLENBQUMsRUFDbEQ7VUFDRHVCLGVBQWUsR0FBRyxJQUFJO1FBQ3ZCOztRQUVBO1FBQ0EsSUFBSU8sY0FBYyxJQUFJLENBQUNQLGVBQWUsRUFBRTtVQUN2Q0EsZUFBZSxHQUFHLENBQUMsSUFBSSxDQUFDcUIsMkJBQTJCLENBQUNkLGNBQWMsRUFBRWYsY0FBYyxFQUFFTSxhQUFhLENBQUM7UUFDbkc7TUFDRDtNQUVBLElBQUl3QixtQkFBaUMsR0FBR3pFLFlBQVksQ0FBQzBFLFdBQVc7TUFDaEUsSUFBSXZCLGVBQWUsSUFBSUMsVUFBVSxFQUFFO1FBQ2xDO1FBQ0FWLFFBQVEsQ0FBQ00sY0FBYyxDQUFDLENBQUM7UUFDekI7TUFDRDtNQUNBLElBQUlHLGVBQWUsRUFBRTtRQUNwQnNCLG1CQUFtQixHQUFHekUsWUFBWSxDQUFDMkUsRUFBRTtNQUN0QyxDQUFDLE1BQU0sSUFBSXZCLFVBQVUsRUFBRTtRQUN0QnFCLG1CQUFtQixHQUFHekUsWUFBWSxDQUFDNEUsT0FBTztNQUMzQztNQUNBbEMsUUFBUSxDQUFDOUIsU0FBUyxDQUFDLENBQUMsQ0FBQ2lFLGVBQWUsQ0FBQ0osbUJBQW1CLENBQUM7SUFDMUQ7O0lBRUE7QUFDRDtBQUNBO0FBQ0EsT0FIQztJQUFBdEUsTUFBQSxDQUlBMkUsb0JBQW9CLEdBQXBCLFNBQUFBLG9CQUFvQkEsQ0FBcUNwQyxRQUF3RCxFQUFRO01BQ3hILE1BQU1xQyxPQUFPLEdBQUdyQyxRQUFRLENBQUNFLFlBQVksQ0FBQyxnQkFBZ0IsQ0FBQzs7TUFFdkQ7TUFDQSxJQUFJb0MsV0FBVyxHQUFHLENBQUNuRCxZQUFZLENBQUNvRCxrQkFBa0IsQ0FBQyxJQUFJLENBQUMzQixrQkFBa0IsQ0FBQyxDQUFDLENBQUNXLFVBQVUsQ0FBQ2lCLHlCQUF5QixFQUFFSCxPQUFPLEVBQUUsS0FBSyxDQUFDOztNQUVsSTtNQUNBLElBQUksQ0FBQ0MsV0FBVyxJQUFJLENBQUVELE9BQU8sQ0FBQ2hDLFVBQVUsQ0FBQyxDQUFDLENBQXNCb0MsVUFBVSxDQUFDLENBQUMsRUFBRTtRQUM3RUgsV0FBVyxHQUFHRCxPQUFPLENBQUNuRCxXQUFXLENBQUMsZ0JBQWdCLENBQUMsS0FBSyxJQUFJO01BQzdEOztNQUVBO01BQ0EsTUFBTXdELGFBQWEsR0FBRyxJQUFJLENBQUM5QixrQkFBa0IsQ0FBQyxDQUFDLENBQUNFLE9BQU8sQ0FBQzZCLGFBQWE7TUFDckUsSUFBSTtRQUNILElBQUlELGFBQWEsSUFBSSxDQUFDSixXQUFXLEVBQUU7VUFDbENBLFdBQVcsR0FFVHJCLFNBQVMsQ0FBQ0MsaUJBQWlCLENBQzFCd0IsYUFBYSxDQUFDdkIsVUFBVSxFQUN4QnVCLGFBQWEsQ0FBQ3RCLFVBQVUsRUFDeEJwQixRQUFRLENBQUM5QixTQUFTLENBQUMsQ0FDcEIsQ0FBQyxDQUNBbUUsT0FBTyxDQUFDLEtBQUssS0FBSztRQUN0QjtNQUNELENBQUMsQ0FBQyxPQUFPTyxNQUFNLEVBQUU7UUFDaEJOLFdBQVcsR0FBRyxLQUFLO01BQ3BCO01BQ0EsSUFBSUEsV0FBVyxFQUFFO1FBQ2hCO1FBQ0F0QyxRQUFRLENBQUNNLGNBQWMsQ0FBQyxDQUFDO01BQzFCO0lBQ0Q7O0lBRUE7QUFDRDtBQUNBO0FBQ0E7QUFDQSxPQUpDO0lBQUE3QyxNQUFBLENBS01vRixlQUFlLEdBQXJCLGVBQU1BLGVBQWVBLENBRXBCN0MsUUFJRSxFQUNjO01BQ2hCOEMsVUFBVSxDQUFDQyxJQUFJLENBQUMsSUFBSSxDQUFDNUMsVUFBVSxDQUFDLENBQUMsQ0FBQztNQUVsQyxJQUFJO1FBQ0gsTUFBTTZDLGdCQUFnQixHQUFHaEQsUUFBUSxDQUFDRSxZQUFZLENBQUMsZ0JBQWdCLENBQUM7UUFDaEUsSUFBSStDLFFBQXlCO1FBQzdCLElBQUlELGdCQUFnQixLQUFLLElBQUksQ0FBQzdDLFVBQVUsQ0FBQyxDQUFDLENBQUM3QixpQkFBaUIsQ0FBQyxDQUFDLEVBQUU7VUFDL0Q7VUFDQTJFLFFBQVEsR0FBRztZQUFFQyxRQUFRLEVBQUU1RixZQUFZLENBQUMyRSxFQUFFO1lBQUVrQixhQUFhLEVBQUU7VUFBSyxDQUFDO1FBQzlELENBQUMsTUFBTSxJQUFJbkQsUUFBUSxDQUFDRSxZQUFZLENBQUMsY0FBYyxDQUFDLEtBQUs1QyxZQUFZLENBQUMyRSxFQUFFLEVBQUU7VUFDckU7VUFDQWdCLFFBQVEsR0FBRztZQUFFQyxRQUFRLEVBQUU1RixZQUFZLENBQUMyRSxFQUFFO1lBQUVrQixhQUFhLEVBQUVIO1VBQWlCLENBQUM7UUFDMUUsQ0FBQyxNQUFNO1VBQ047VUFDQSxJQUFJSSxhQUE2QjtVQUNqQyxJQUFJQyxZQUE0QjtVQUNoQyxJQUFJckQsUUFBUSxDQUFDRSxZQUFZLENBQUMsY0FBYyxDQUFDLEtBQUssT0FBTyxFQUFFO1lBQ3REa0QsYUFBYSxHQUFHSixnQkFBZ0I7WUFDaENLLFlBQVksR0FBRyxJQUFJLENBQUNDLGVBQWUsQ0FBQ04sZ0JBQWdCLENBQUM7VUFDdEQsQ0FBQyxNQUFNO1lBQ05JLGFBQWEsR0FBRyxJQUFJLENBQUNHLGdCQUFnQixDQUFDUCxnQkFBZ0IsQ0FBQztZQUN2REssWUFBWSxHQUFHTCxnQkFBZ0I7VUFDaEM7VUFDQUMsUUFBUSxHQUFHO1lBQUVDLFFBQVEsRUFBRTVGLFlBQVksQ0FBQzRFLE9BQU87WUFBRW1CLFlBQVk7WUFBRUQ7VUFBYyxDQUFDO1FBQzNFO1FBRUEsTUFBTUksWUFBWSxHQUFHeEQsUUFBUSxDQUFDRSxZQUFZLENBQUMsWUFBWSxDQUFDO1FBQ3hELE1BQU11RCxPQUFPLENBQUNDLEdBQUcsQ0FBQyxDQUFDLElBQUksQ0FBQ0MsV0FBVyxDQUFDSCxZQUFZLEVBQUVQLFFBQVEsQ0FBQyxFQUFFLElBQUksQ0FBQ1csNENBQTRDLENBQUNKLFlBQVksQ0FBQyxDQUFDLENBQUM7TUFDL0gsQ0FBQyxDQUFDLE9BQU83RSxLQUFLLEVBQUU7UUFDZkUsWUFBWSxDQUFDQyxJQUFJLENBQUMsSUFBSSxDQUFDK0UsaUJBQWlCLENBQUMsb0JBQW9CLEVBQUUsQ0FBQyxFQUFFLENBQUMsQ0FBQyxDQUFDO1FBQ3JFbkYsR0FBRyxDQUFDQyxLQUFLLENBQUMsaUNBQWlDLElBQUtBLEtBQUssQ0FBV21GLE9BQU8sSUFBSSxFQUFFLENBQUMsQ0FBQztNQUNoRixDQUFDLFNBQVM7UUFDVGhCLFVBQVUsQ0FBQ2lCLE1BQU0sQ0FBQyxJQUFJLENBQUM1RCxVQUFVLENBQUMsQ0FBQyxDQUFDO01BQ3JDO0lBQ0Q7O0lBRUE7QUFDRDtBQUNBO0FBQ0E7QUFDQTtBQUNBLE9BTEM7SUFBQTFDLE1BQUEsQ0FNTXVHLHFCQUFxQixHQUEzQixlQUFNQSxxQkFBcUJBLENBQXFDQyxTQUFtQixFQUFFQyxNQUFlLEVBQWlCO01BQ3BILE1BQU0zRixnQkFBZ0IsR0FBRyxJQUFJLENBQUNDLG1CQUFtQixDQUFDLENBQUM7TUFDbkQsSUFBSTBGLE1BQU0sRUFBRTtRQUNYLE1BQU1DLFlBQVksR0FBRzVGLGdCQUFnQixDQUFDNkYsR0FBRyxDQUFDLE1BQU9DLGFBQXNCLElBQUs7VUFDM0U7VUFDQSxJQUFJQSxhQUFhLENBQUNDLFVBQVUsQ0FBQyxDQUFDLEtBQUtqRCxTQUFTLEVBQUU7WUFDN0M7WUFDQTtZQUNBO1lBQ0EsSUFBSWdELGFBQWEsQ0FBQ0MsVUFBVSxDQUFDLENBQUMsS0FBSyxJQUFJLEVBQUU7Y0FDeEMsTUFBTUQsYUFBYSxDQUFDRSxRQUFRLENBQUMsQ0FBQztZQUMvQjtZQUNBLE9BQU9GLGFBQWEsQ0FBQ0gsTUFBTSxDQUFDTSxNQUFNLENBQUNDLGdCQUFnQixDQUFDO1VBQ3JEO1FBQ0QsQ0FBQyxDQUFDO1FBQ0YsTUFBTWhCLE9BQU8sQ0FBQ0MsR0FBRyxDQUFDUyxZQUFZLENBQUM7TUFDaEMsQ0FBQyxNQUFNO1FBQ04sTUFBTVYsT0FBTyxDQUFDQyxHQUFHLENBQ2hCbkYsZ0JBQWdCLENBQUM2RixHQUFHLENBQUMsTUFBT0MsYUFBc0IsSUFBSztVQUN0RCxJQUFJQSxhQUFhLENBQUNDLFVBQVUsQ0FBQyxDQUFDLEtBQUssSUFBSSxFQUFFO1lBQ3hDLE9BQU9ELGFBQWEsQ0FBQ0UsUUFBUSxDQUFDLElBQUksQ0FBQztVQUNwQztRQUNELENBQUMsQ0FDRixDQUFDO01BQ0Y7SUFDRDs7SUFFQTtBQUNEO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsT0FMQztJQUFBOUcsTUFBQSxDQU1NaUgsYUFBYSxHQUFuQixlQUFNQSxhQUFhQSxDQUFxQ1QsU0FBbUIsRUFBRVUsTUFBZSxFQUF5QztNQUFBLElBQXZDNUcsY0FBYyxHQUFBNkcsU0FBQSxDQUFBbkcsTUFBQSxRQUFBbUcsU0FBQSxRQUFBdkQsU0FBQSxHQUFBdUQsU0FBQSxNQUFHLEtBQUs7TUFDbkgsTUFBTXJHLGdCQUFnQixHQUFHLElBQUksQ0FBQ0MsbUJBQW1CLENBQUMsQ0FBQztNQUNuRCxJQUFJRCxnQkFBZ0IsQ0FBQ0UsTUFBTSxLQUFLLENBQUMsRUFBRTtRQUNsQztNQUNEO01BQ0EsTUFBTW9HLFFBQVEsR0FBRyxJQUFJLENBQUMxRSxVQUFVLENBQUMsQ0FBQztNQUNsQzBFLFFBQVEsQ0FBQ0MsT0FBTyxDQUFDLElBQUksQ0FBQzs7TUFFdEI7TUFDQSxNQUFNdEIsWUFBWSxHQUFHakYsZ0JBQWdCLENBQUMsQ0FBQyxDQUFDO01BQ3hDLE1BQU00RSxhQUFhLEdBQUcsTUFBTUssWUFBWSxDQUFDdUIsYUFBYSxDQUFDLENBQUM7TUFDeEQsSUFBSUMsWUFBWSxHQUFHLEtBQUs7TUFDeEIsSUFBSUMsV0FBVyxHQUFHLElBQUk7TUFDdEIsSUFBSU4sTUFBTSxFQUFFO1FBQ1gsTUFBTU8sZUFBZSxHQUFHLE1BQU0xQixZQUFZLENBQUMyQixjQUFjLENBQUMsQ0FBQyxDQUFDLENBQUM7UUFDN0QsSUFBSUQsZUFBZSxFQUFFO1VBQ3BCRCxXQUFXLEdBQUd6QixZQUFZLENBQUM0QixJQUFJLENBQUM7WUFBRUMsV0FBVyxFQUFFSCxlQUFlO1lBQUVJLE1BQU0sRUFBRW5DO1VBQWMsQ0FBQyxDQUFDO1VBQ3hGNkIsWUFBWSxHQUFHLElBQUk7UUFDcEI7TUFDRCxDQUFDLE1BQU07UUFDTixNQUFNSyxXQUFXLEdBQUcsTUFBTTdCLFlBQVksQ0FBQzJCLGNBQWMsQ0FBQyxDQUFDLENBQUM7UUFDeEQsSUFBSUUsV0FBVyxFQUFFO1VBQ2hCSixXQUFXLEdBQUdJLFdBQVcsQ0FBQ0QsSUFBSSxDQUFDO1lBQUVDLFdBQVcsRUFBRTdCLFlBQVk7WUFBRThCLE1BQU0sRUFBRW5DO1VBQWMsQ0FBQyxDQUFDO1VBQ3BGNkIsWUFBWSxHQUFHLElBQUk7UUFDcEI7TUFDRDtNQUVBLE1BQU12QixPQUFPLENBQUNDLEdBQUcsQ0FBQyxDQUFDdUIsV0FBVyxFQUFFLElBQUksQ0FBQ3JCLDRDQUE0QyxDQUFDSixZQUFZLENBQUMsQ0FBQyxDQUFDOztNQUVqRztNQUNBLE1BQU0rQixRQUFRLEdBQUcvQixZQUFZLENBQUM3QixRQUFRLENBQUMsQ0FBQztNQUN4QyxJQUFJcUQsWUFBWSxJQUFJTyxRQUFRLEtBQUtsRSxTQUFTLElBQUlrRSxRQUFRLElBQUksQ0FBQyxFQUFFO1FBQzVELElBQUksQ0FBQ3hILGNBQWMsRUFBRTtVQUNwQjhHLFFBQVEsQ0FBQ1csYUFBYSxDQUFDRCxRQUFRLENBQUM7UUFDakMsQ0FBQyxNQUFNO1VBQ05WLFFBQVEsQ0FBQ1ksUUFBUSxDQUFDRixRQUFRLENBQUM7UUFDNUI7TUFDRDtNQUNBVixRQUFRLENBQUNDLE9BQU8sQ0FBQyxLQUFLLENBQUM7SUFDeEI7O0lBRUE7QUFDRDtBQUNBO0FBQ0E7QUFDQSxPQUpDO0lBQUFySCxNQUFBLENBS01tRyw0Q0FBNEMsR0FBbEQsZUFBTUEsNENBQTRDQSxDQUFxQ0osWUFBcUIsRUFBaUI7TUFDNUgsT0FBTyxJQUFJLENBQUNrQyxzQ0FBc0MsQ0FBQ2xDLFlBQVksRUFBRSx5QkFBeUIsQ0FBQztJQUM1Rjs7SUFFQTtBQUNEO0FBQ0E7QUFDQTtBQUNBLE9BSkM7SUFBQS9GLE1BQUEsQ0FLTWtJLCtCQUErQixHQUFyQyxlQUFNQSwrQkFBK0JBLENBQXFDbkMsWUFBcUIsRUFBaUI7TUFDL0csT0FBTyxJQUFJLENBQUNrQyxzQ0FBc0MsQ0FBQ2xDLFlBQVksRUFBRSxZQUFZLENBQUM7SUFDL0U7O0lBRUE7QUFDRDtBQUNBO0FBQ0E7QUFDQTtBQUNBLE9BTEM7SUFBQS9GLE1BQUEsQ0FNTWlJLHNDQUFzQyxHQUE1QyxlQUFNQSxzQ0FBc0NBLENBRTNDbEMsWUFBcUIsRUFDckJ4RixNQUFnRCxFQUNoQztNQUNoQixNQUFNNEgsVUFBVSxHQUFHLElBQUksQ0FBQ3pGLFVBQVUsQ0FBQyxDQUFDLENBQUMwRixJQUFJLENBQUMsVUFBVSxDQUFDO01BQ3JELE1BQU1DLFNBQVMsR0FBR3RDLFlBQVksQ0FBQ3VDLFFBQVEsQ0FBQyxDQUFDLENBQUNDLFlBQVksQ0FBQyxDQUFDO01BRXhELE1BQU1DLFlBQVksR0FBR0gsU0FBUyxDQUFDSSxVQUFVLENBQUNOLFVBQVUsQ0FBQztNQUNyRCxNQUFNTyx1QkFBdUIsR0FBR0Msa0JBQWtCLENBQUNELHVCQUF1QixDQUFDRixZQUFZLENBQW1DO01BQzFILE1BQU1JLFVBQVUsR0FBSUYsdUJBQXVCLENBQXdCRyxVQUFVLElBQUtILHVCQUF1QixDQUFlRSxVQUFVO01BQ2xJLE1BQU1FLFVBQVUsR0FBR0YsVUFBVSxDQUFDRyxXQUFXLENBQUNDLFNBQVMsR0FDbEQsNkJBQTZCLElBQUksQ0FBQzdGLGtCQUFrQixDQUFDLENBQUMsQ0FBQ0UsT0FBTyxDQUFDNEYsa0JBQWtCLElBQUksRUFBRSxFQUFFLENBQ3pGLEdBQUcxSSxNQUFNLENBQXVCO01BRWpDLElBQUl1SSxVQUFVLEVBQUU7UUFDZixNQUFNSSxZQUFZLEdBQUdDLFdBQVcsQ0FBQ0MsZUFBZSxDQUFDLElBQUksQ0FBQzFHLFVBQVUsQ0FBQyxDQUFDLENBQUM7UUFDbkUsTUFBTTJHLGtCQUFrQixHQUFHSCxZQUFZLENBQUNJLHFCQUFxQixDQUFDLENBQUM7UUFDL0QsTUFBTUMsV0FBVyxHQUFHRixrQkFBa0IsQ0FBQ0cseUJBQXlCLENBQUNWLFVBQVUsRUFBRS9DLFlBQVksQ0FBQztRQUMxRixJQUFJd0QsV0FBVyxFQUFFO1VBQ2hCLE1BQU1GLGtCQUFrQixDQUFDSSxnQ0FBZ0MsQ0FBQ0YsV0FBVyxFQUFFeEQsWUFBWSxDQUFDO1FBQ3JGO01BQ0Q7SUFDRDs7SUFFQTtBQUNEO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxPQU5DO0lBQUEvRixNQUFBLENBT1E2RCxpQkFBaUIsR0FBekIsU0FBUUEsaUJBQWlCQSxDQUN4Qk4sY0FBbUYsRUFDbkZ3QyxZQUFxQixFQUNyQkwsYUFBNkIsRUFDbkI7TUFDVixJQUFJLENBQUNuQyxjQUFjLEVBQUU7UUFDcEIsT0FBTyxJQUFJO01BQ1o7TUFFQSxJQUFJbUcsT0FBTyxHQUFHLElBQUk7TUFDbEIsSUFBSTtRQUNIQSxPQUFPLEdBQUduRyxjQUFjLENBQUN3QyxZQUFZLEVBQUVMLGFBQWEsQ0FBQyxLQUFLLElBQUk7TUFDL0QsQ0FBQyxDQUFDLE9BQU94RSxLQUFLLEVBQUU7UUFDZkQsR0FBRyxDQUFDQyxLQUFLLENBQUMsNERBQTRELEVBQUVBLEtBQWUsQ0FBQztRQUN4RndJLE9BQU8sR0FBRyxJQUFJO01BQ2Y7TUFFQSxPQUFPQSxPQUFPO0lBQ2Y7O0lBRUE7QUFDRDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsT0FOQztJQUFBMUosTUFBQSxDQU9RcUUsMkJBQTJCLEdBQW5DLFNBQVFBLDJCQUEyQkEsQ0FDbENkLGNBQXFFLEVBQ3JFZixjQUF1QixFQUN2Qk0sYUFBc0IsRUFDWjtNQUNWLElBQUk2RyxTQUFTLEdBQUcsSUFBSTs7TUFFcEI7TUFDQSxNQUFNaEUsYUFBYSxHQUFHLElBQUksQ0FBQ0csZ0JBQWdCLENBQUNoRCxhQUFhLENBQUM7TUFDMUQsTUFBTThHLFlBQVksR0FBR2pFLGFBQWEsS0FBSyxJQUFJLEdBQUcsSUFBSSxHQUFHQSxhQUFhLENBQUNqRixTQUFTLENBQUMsQ0FBQztNQUM5RSxNQUFNbUosWUFBWSxHQUFHLElBQUksQ0FBQ0Msd0JBQXdCLENBQUNuRSxhQUFhLEVBQUVpRSxZQUFZLEVBQUU5RyxhQUFhLEVBQUVBLGFBQWEsQ0FBQ3BDLFNBQVMsQ0FBQyxDQUFDLENBQUM7O01BRXpIO01BQ0EsTUFBTWtGLFlBQVksR0FBRyxJQUFJLENBQUNDLGVBQWUsQ0FBQy9DLGFBQWEsQ0FBQztNQUN4RCxNQUFNaUgsV0FBVyxHQUFHbkUsWUFBWSxLQUFLLElBQUksR0FBRyxJQUFJLEdBQUdBLFlBQVksQ0FBQ2xGLFNBQVMsQ0FBQyxDQUFDO01BQzNFLE1BQU1zSixXQUFXLEdBQUcsSUFBSSxDQUFDRix3QkFBd0IsQ0FBQ2hILGFBQWEsRUFBRUEsYUFBYSxDQUFDcEMsU0FBUyxDQUFDLENBQUMsRUFBRWtGLFlBQVksRUFBRW1FLFdBQVcsQ0FBQzs7TUFFdEg7TUFDQSxJQUFJRixZQUFZLEtBQUtqRyxTQUFTLElBQUlvRyxXQUFXLEtBQUtwRyxTQUFTLEVBQUU7UUFDNUQsSUFBSWlHLFlBQVksQ0FBQ2hDLE1BQU0sS0FBS21DLFdBQVcsQ0FBQ25DLE1BQU0sRUFBRTtVQUMvQztVQUNBOEIsU0FBUyxHQUFHLElBQUksQ0FBQzlGLGlCQUFpQixDQUFDTixjQUFjLEVBQUVmLGNBQWMsRUFBRXFILFlBQVksQ0FBQ2hDLE1BQU0sQ0FBQztRQUN4RixDQUFDLE1BQU07VUFDTjtVQUNBOEIsU0FBUyxHQUNSLElBQUksQ0FBQzlGLGlCQUFpQixDQUFDTixjQUFjLEVBQUVmLGNBQWMsRUFBRXFILFlBQVksQ0FBQ2hDLE1BQU0sQ0FBQyxJQUMzRSxJQUFJLENBQUNoRSxpQkFBaUIsQ0FBQ04sY0FBYyxFQUFFZixjQUFjLEVBQUV3SCxXQUFXLENBQUNuQyxNQUFNLENBQUM7UUFDNUU7TUFDRDtNQUVBLE9BQU84QixTQUFTO0lBQ2pCOztJQUVBO0FBQ0Q7QUFDQTtBQUNBO0FBQ0EsT0FKQztJQUFBM0osTUFBQSxDQUtROEYsZ0JBQWdCLEdBQXhCLFNBQVFBLGdCQUFnQkEsQ0FBQ2xCLE9BQWdCLEVBQWtCO01BQzFELE1BQU1xRixZQUFZLEdBQUdyRixPQUFPLENBQUNWLFFBQVEsQ0FBQyxDQUFDO01BQ3ZDLElBQUkrRixZQUFZLEtBQUtyRyxTQUFTLEVBQUU7UUFDL0IsTUFBTSxJQUFJc0csS0FBSyxDQUFDLGtCQUFrQixDQUFDO01BQ3BDO01BRUEsTUFBTUMsV0FBVyxHQUFHdkYsT0FBTyxDQUFDaEMsVUFBVSxDQUFDLENBQXFCO01BQzVELE9BQU9xSCxZQUFZLEtBQUssQ0FBQyxHQUN0QixJQUFJLEdBQ0pFLFdBQVcsQ0FBQ0MscUJBQXFCLENBQUMsQ0FBQyxDQUFDckksSUFBSSxDQUFFc0ksR0FBRyxJQUFLO1FBQ2xELE9BQU9BLEdBQUcsQ0FBQ25HLFFBQVEsQ0FBQyxDQUFDLEtBQUsrRixZQUFZLEdBQUcsQ0FBQztNQUMxQyxDQUFDLENBQUMsSUFBSSxJQUFJO0lBQ2Q7O0lBRUE7QUFDRDtBQUNBO0FBQ0E7QUFDQSxPQUpDO0lBQUFqSyxNQUFBLENBS1E2RixlQUFlLEdBQXZCLFNBQVFBLGVBQWVBLENBQUNqQixPQUFnQixFQUFrQjtNQUN6RCxNQUFNcUYsWUFBWSxHQUFHckYsT0FBTyxDQUFDVixRQUFRLENBQUMsQ0FBQztNQUN2QyxJQUFJK0YsWUFBWSxLQUFLckcsU0FBUyxFQUFFO1FBQy9CLE1BQU0sSUFBSXNHLEtBQUssQ0FBQyxrQkFBa0IsQ0FBQztNQUNwQztNQUVBLE1BQU1DLFdBQVcsR0FBR3ZGLE9BQU8sQ0FBQ2hDLFVBQVUsQ0FBQyxDQUFxQjtNQUM1RCxPQUNDdUgsV0FBVyxDQUFDQyxxQkFBcUIsQ0FBQyxDQUFDLENBQUNySSxJQUFJLENBQUVzSSxHQUFHLElBQUs7UUFDakQsT0FBT0EsR0FBRyxDQUFDbkcsUUFBUSxDQUFDLENBQUMsS0FBSytGLFlBQVksR0FBRyxDQUFDO01BQzNDLENBQUMsQ0FBQyxJQUFJLElBQUk7SUFFWjs7SUFFQTtBQUNEO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLE9BUEM7SUFBQWpLLE1BQUEsQ0FRUThKLHdCQUF3QixHQUFoQyxTQUFRQSx3QkFBd0JBLENBQy9CbkUsYUFBNkIsRUFDN0JpRSxZQUF3QyxFQUN4Q2hFLFlBQTRCLEVBQzVCbUUsV0FBdUMsRUFDZ0M7TUFDdkUsSUFBSXBFLGFBQWEsS0FBSyxJQUFJLEVBQUU7UUFDM0I7UUFDQSxPQUFPO1VBQUVrQyxNQUFNLEVBQUUsSUFBSTtVQUFFRCxXQUFXLEVBQUVoQztRQUFhLENBQUM7TUFDbkQsQ0FBQyxNQUFNLElBQUlBLFlBQVksS0FBSyxJQUFJLEVBQUU7UUFDakM7UUFDQSxPQUFPZ0UsWUFBWSxLQUFLaEcsU0FBUyxHQUFHO1VBQUVpRSxNQUFNLEVBQUUrQixZQUFZO1VBQUVoQyxXQUFXLEVBQUU7UUFBSyxDQUFDLEdBQUdoRSxTQUFTO01BQzVGLENBQUMsTUFBTSxJQUFJbUcsV0FBVyxLQUFLcEUsYUFBYSxFQUFFO1FBQ3pDO1FBQ0EsT0FBTztVQUFFa0MsTUFBTSxFQUFFbEMsYUFBYTtVQUFFaUMsV0FBVyxFQUFFaEM7UUFBYSxDQUFDO01BQzVELENBQUMsTUFBTSxJQUFJZ0UsWUFBWSxLQUFLaEcsU0FBUyxJQUFJbUcsV0FBVyxLQUFLbkcsU0FBUyxFQUFFO1FBQ25FO1FBQ0EsT0FBT0EsU0FBUztNQUNqQixDQUFDLE1BQU0sSUFBSWdHLFlBQVksS0FBS0csV0FBVyxFQUFFO1FBQ3hDO1FBQ0EsT0FBTztVQUFFbEMsTUFBTSxFQUFFK0IsWUFBWTtVQUFFaEMsV0FBVyxFQUFFaEM7UUFBYSxDQUFDO01BQzNELENBQUMsTUFBTTtRQUNOO1FBQ0E7UUFDQTtRQUNBO1FBQ0E7UUFDQSxPQUFPO1VBQUVpQyxNQUFNLEVBQUUrQixZQUFZO1VBQUVoQyxXQUFXLEVBQUU7UUFBSyxDQUFDO01BQ25EO0lBQ0Q7O0lBRUE7QUFDRDtBQUNBO0FBQ0E7QUFDQTtBQUNBLE9BTEM7SUFBQTVILE1BQUEsQ0FNY2tHLFdBQVcsR0FBekIsZUFBY0EsV0FBV0EsQ0FBcUN0QixPQUFnQixFQUFFMEYsSUFBcUIsRUFBaUI7TUFDckgsTUFBTWxILGlCQUFpQixHQUFHLElBQUksQ0FBQ0Qsa0JBQWtCLENBQUMsQ0FBQyxDQUFDRSxPQUFPLENBQUNDLHVCQUF1QjtNQUNuRixNQUFNQyxjQUFjLEdBQUdILGlCQUFpQixHQUNyQ0ksU0FBUyxDQUFDQyxpQkFBaUIsQ0FDM0JMLGlCQUFpQixDQUFDTSxVQUFVLEVBQzVCTixpQkFBaUIsQ0FBQ08sVUFBVSxFQUM1QixJQUFJLENBQUNqQixVQUFVLENBQUMsQ0FDaEIsQ0FBQyxHQUNEa0IsU0FBUztNQUNaLE1BQU1wRCxLQUFLLEdBQUcsSUFBSSxDQUFDa0MsVUFBVSxDQUFDLENBQUM7TUFDL0JsQyxLQUFLLENBQUM2RyxPQUFPLENBQUMsSUFBSSxDQUFDO01BQ25CLE1BQU1rRCxvQkFBb0IsR0FBRy9KLEtBQUssQ0FBQ0ssaUJBQWlCLENBQUMsVUFBVSxDQUF5QjtNQUN4RixNQUFNMkosYUFBYSxHQUFHRCxvQkFBb0IsQ0FBQzlJLFdBQVcsQ0FBQyxVQUFVLENBQUMsS0FBSyxJQUFJO01BRTNFLE1BQU1nSixXQUFXLEdBQUcsTUFBQUEsQ0FBTzVDLE1BQXNCLEVBQUVELFdBQTRCLEtBQW9CO1FBQ2xHO1FBQ0E7UUFDQSxJQUFJLElBQUksQ0FBQy9ELGlCQUFpQixDQUFDTixjQUFjLEVBQUVxQixPQUFPLEVBQUVpRCxNQUFNLENBQUMsRUFBRTtVQUM1RDtVQUNBLE9BQU9qRCxPQUFPLENBQUMrQyxJQUFJLENBQUM7WUFBRUUsTUFBTTtZQUFFRCxXQUFXLEVBQUU0QyxhQUFhLEdBQUc1RyxTQUFTLEdBQUdnRTtVQUFZLENBQUMsQ0FBQztRQUN0RixDQUFDLE1BQU07VUFDTnhHLFlBQVksQ0FBQ0MsSUFBSSxDQUFDLElBQUksQ0FBQytFLGlCQUFpQixDQUFDLDBCQUEwQixDQUFDLENBQUM7UUFDdEU7TUFDRCxDQUFDO01BRUQsSUFBSWtFLElBQUksQ0FBQzdFLFFBQVEsS0FBSzVGLFlBQVksQ0FBQzJFLEVBQUUsRUFBRTtRQUN0QztRQUNBLE9BQU9pRyxXQUFXLENBQUNILElBQUksQ0FBQzVFLGFBQWEsQ0FBQyxDQUFDZ0YsT0FBTyxDQUFDLE1BQU1sSyxLQUFLLENBQUM2RyxPQUFPLENBQUMsS0FBSyxDQUFDLENBQUM7TUFDM0UsQ0FBQyxNQUFNO1FBQ047UUFDQSxNQUFNLENBQUN1QyxZQUFZLEVBQUVHLFdBQVcsQ0FBQyxHQUFHLE1BQU0vRCxPQUFPLENBQUNDLEdBQUcsQ0FBQyxDQUNyRHFFLElBQUksQ0FBQzNFLGFBQWEsRUFBRTJCLGFBQWEsQ0FBQyxDQUFDLElBQUksSUFBSSxFQUMzQ2dELElBQUksQ0FBQzFFLFlBQVksRUFBRTBCLGFBQWEsQ0FBQyxDQUFDLElBQUksSUFBSSxDQUMxQyxDQUFDO1FBQ0YsTUFBTXFELE1BQU0sR0FBRyxJQUFJLENBQUNiLHdCQUF3QixDQUFDUSxJQUFJLENBQUMzRSxhQUFhLEVBQUVpRSxZQUFZLEVBQUVVLElBQUksQ0FBQzFFLFlBQVksRUFBRW1FLFdBQVcsQ0FBRTtRQUMvRyxPQUFPVSxXQUFXLENBQUNFLE1BQU0sQ0FBQzlDLE1BQU0sRUFBRThDLE1BQU0sQ0FBQy9DLFdBQVcsQ0FBQyxDQUFDOEMsT0FBTyxDQUFDLE1BQU1sSyxLQUFLLENBQUM2RyxPQUFPLENBQUMsS0FBSyxDQUFDLENBQUM7TUFDMUY7SUFDRCxDQUFDO0lBQUEsT0FBQXZILGNBQUE7RUFBQTtFQUFBQyxRQUFBLEdBQUFELGNBQUE7RUFBQSxPQUFBQyxRQUFBO0FBQUEiLCJpZ25vcmVMaXN0IjpbXX0=
@@ -167,10 +167,9 @@ export default class TableHierarchy implements IInterfaceWithMixin {
167
167
  */
168
168
  _onDragStartDocument(this: ITableBlock & TableHierarchy, ui5Event: UI5Event<{ bindingContext: Context }, Control>): void {
169
169
  const context = ui5Event.getParameter("bindingContext");
170
- const updatablePropertyPath = this.getTableDefinition().annotation.updatablePropertyPath;
171
170
 
172
171
  // Check if the context can be updated according to update restrictions
173
- let disableDrag = !!updatablePropertyPath && !context.getProperty(updatablePropertyPath);
172
+ let disableDrag = !TableRuntime.isUpdatableContext(this.getTableDefinition().annotation.updatablePropertyPathInfo, context, false);
174
173
 
175
174
  // In case of a TreeTable in a ListReport with draft, check that the context has no associated draft
176
175
  if (!disableDrag && !(context.getBinding() as ODataListBinding).isRelative()) {
@@ -241,7 +240,7 @@ export default class TableHierarchy implements IInterfaceWithMixin {
241
240
  await Promise.all([this.dropContext(movedContext, dropInfo), this.requestSideEffectsForChangeNextSiblingAction(movedContext)]);
242
241
  } catch (error) {
243
242
  MessageToast.show(this.getTranslatedText("M_TABLEDROP_FAILED", [""]));
244
- Log.error("The operation is unsuccessful. " + (error as Error).message ?? "");
243
+ Log.error("The operation is unsuccessful. " + ((error as Error).message ?? ""));
245
244
  } finally {
246
245
  BusyLocker.unlock(this.getContent());
247
246
  }