@sapui5/sap.fe.macros 1.138.0 → 1.139.1

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 (210) 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 +269 -0
  4. package/src/sap/fe/macros/Breadcrumbs.tsx +243 -0
  5. package/src/sap/fe/macros/Chart.js +1 -1
  6. package/src/sap/fe/macros/Chart.tsx +1 -1
  7. package/src/sap/fe/macros/CommonHelper.js +2 -2
  8. package/src/sap/fe/macros/CommonHelper.ts +1 -1
  9. package/src/sap/fe/macros/Field.js +21 -4
  10. package/src/sap/fe/macros/Field.ts +21 -3
  11. package/src/sap/fe/macros/FooterContent.js +40 -10
  12. package/src/sap/fe/macros/FooterContent.tsx +44 -8
  13. package/src/sap/fe/macros/FormElement.js +2 -2
  14. package/src/sap/fe/macros/FormElement.ts +1 -2
  15. package/src/sap/fe/macros/MultiValueField.js +17 -4
  16. package/src/sap/fe/macros/MultiValueField.tsx +7 -2
  17. package/src/sap/fe/macros/RichTextEditor.js +30 -6
  18. package/src/sap/fe/macros/RichTextEditor.tsx +34 -7
  19. package/src/sap/fe/macros/Share.js +73 -40
  20. package/src/sap/fe/macros/Share.tsx +29 -1
  21. package/src/sap/fe/macros/ValueHelp.js +4 -29
  22. package/src/sap/fe/macros/ValueHelp.tsx +2 -43
  23. package/src/sap/fe/macros/ai/EasyFillButton.js +10 -4
  24. package/src/sap/fe/macros/ai/EasyFillButton.tsx +8 -1
  25. package/src/sap/fe/macros/ai/EasyFillDialog.js +25 -10
  26. package/src/sap/fe/macros/ai/EasyFillDialog.tsx +32 -23
  27. package/src/sap/fe/macros/ai/EasyFilterBar.js +30 -30
  28. package/src/sap/fe/macros/ai/EasyFilterBar.tsx +40 -43
  29. package/src/sap/fe/macros/ai/EasyFilterDataFetcher.js +11 -5
  30. package/src/sap/fe/macros/ai/EasyFilterDataFetcher.ts +14 -5
  31. package/src/sap/fe/macros/chart/ChartDelegate.js +4 -4
  32. package/src/sap/fe/macros/chart/ChartDelegate.ts +3 -3
  33. package/src/sap/fe/macros/chart/MdcChartTemplate.js +20 -6
  34. package/src/sap/fe/macros/chart/MdcChartTemplate.tsx +16 -8
  35. package/src/sap/fe/macros/controls/BuildingBlockObjectProperty.js +5 -1
  36. package/src/sap/fe/macros/controls/BuildingBlockObjectProperty.ts +4 -0
  37. package/src/sap/fe/macros/controls/FieldWrapper.js +9 -3
  38. package/src/sap/fe/macros/controls/FieldWrapper.ts +11 -2
  39. package/src/sap/fe/macros/controls/FilterBar.js +86 -3
  40. package/src/sap/fe/macros/controls/FilterBar.ts +97 -2
  41. package/src/sap/fe/macros/controls/RequiredFlexBox.js +62 -0
  42. package/src/sap/fe/macros/controls/RequiredFlexBox.tsx +20 -0
  43. package/src/sap/fe/macros/controls/Section.js +3 -2
  44. package/src/sap/fe/macros/controls/Section.ts +2 -1
  45. package/src/sap/fe/macros/controls/filterbar/VisualFilter.js +21 -11
  46. package/src/sap/fe/macros/controls/filterbar/VisualFilter.ts +25 -11
  47. package/src/sap/fe/macros/controls/filterbar/VisualFilterContainer.js +11 -2
  48. package/src/sap/fe/macros/controls/filterbar/VisualFilterContainer.ts +12 -1
  49. package/src/sap/fe/macros/controls/filterbar/utils/VisualFilterUtils.js +18 -1
  50. package/src/sap/fe/macros/controls/filterbar/utils/VisualFilterUtils.ts +20 -0
  51. package/src/sap/fe/macros/coreUI/CreateDialog.js +2 -2
  52. package/src/sap/fe/macros/coreUI/CreateDialog.tsx +1 -1
  53. package/src/sap/fe/macros/designtime/Designtime.helper.js +12 -2
  54. package/src/sap/fe/macros/designtime/Designtime.helper.ts +12 -0
  55. package/src/sap/fe/macros/draftIndicator/DraftIndicator.js +16 -5
  56. package/src/sap/fe/macros/draftIndicator/DraftIndicator.tsx +6 -1
  57. package/src/sap/fe/macros/field/FieldBaseDelegate.js +20 -8
  58. package/src/sap/fe/macros/field/FieldBaseDelegate.ts +34 -9
  59. package/src/sap/fe/macros/field/FieldFormatOptions.js +73 -44
  60. package/src/sap/fe/macros/field/FieldFormatOptions.ts +20 -2
  61. package/src/sap/fe/macros/field/FieldRuntime.js +38 -8
  62. package/src/sap/fe/macros/field/FieldRuntime.ts +65 -7
  63. package/src/sap/fe/macros/filter/FilterUtils.js +7 -1
  64. package/src/sap/fe/macros/filter/FilterUtils.ts +7 -0
  65. package/src/sap/fe/macros/filterBar/FilterBar.block.js +8 -2
  66. package/src/sap/fe/macros/filterBar/FilterBar.block.tsx +2 -5
  67. package/src/sap/fe/macros/filterBar/FilterBarAPI.js +8 -8
  68. package/src/sap/fe/macros/filterBar/FilterBarAPI.ts +8 -8
  69. package/src/sap/fe/macros/filterBar/designtime/FilterBar.designtime.js +3 -1
  70. package/src/sap/fe/macros/filterBar/designtime/FilterBar.designtime.ts +2 -0
  71. package/src/sap/fe/macros/filterBar/mixin/FilterBarAPIStateHandler.js +1 -1
  72. package/src/sap/fe/macros/filterBar/mixin/FilterBarAPIStateHandler.ts +1 -1
  73. package/src/sap/fe/macros/form/Form.block.js +6 -2
  74. package/src/sap/fe/macros/form/Form.block.ts +4 -1
  75. package/src/sap/fe/macros/form/FormActionButtons.fragment.xml +13 -2
  76. package/src/sap/fe/macros/form/FormContainer.fragment.xml +40 -0
  77. package/src/sap/fe/macros/form/FormContainerAPI.js +14 -16
  78. package/src/sap/fe/macros/form/FormContainerAPI.ts +13 -15
  79. package/src/sap/fe/macros/form/FormDelegate.js +20 -1
  80. package/src/sap/fe/macros/form/FormDelegate.ts +25 -0
  81. package/src/sap/fe/macros/formatters/TableFormatter.js +10 -1
  82. package/src/sap/fe/macros/formatters/TableFormatter.ts +14 -5
  83. package/src/sap/fe/macros/inlineEdit/InlineEdit.js +15 -3
  84. package/src/sap/fe/macros/inlineEdit/InlineEdit.ts +14 -2
  85. package/src/sap/fe/macros/internal/DataPoint.js +2 -1
  86. package/src/sap/fe/macros/internal/DataPoint.tsx +1 -0
  87. package/src/sap/fe/macros/internal/DataPointFormatOptions.js +11 -2
  88. package/src/sap/fe/macros/internal/DataPointFormatOptions.ts +3 -0
  89. package/src/sap/fe/macros/internal/FilterField.block.js +4 -2
  90. package/src/sap/fe/macros/internal/FilterField.block.ts +3 -1
  91. package/src/sap/fe/macros/internal/field/CheckBoxGroup.fragment.xml +25 -0
  92. package/src/sap/fe/macros/internal/field/DisplayStyle.js +52 -12
  93. package/src/sap/fe/macros/internal/field/DisplayStyle.tsx +54 -5
  94. package/src/sap/fe/macros/internal/field/EditStyle.js +5 -1
  95. package/src/sap/fe/macros/internal/field/EditStyle.tsx +4 -0
  96. package/src/sap/fe/macros/internal/field/FieldStructureHelper.js +9 -2
  97. package/src/sap/fe/macros/internal/field/FieldStructureHelper.ts +10 -0
  98. package/src/sap/fe/macros/internal/field/FieldStyles.js +1 -1
  99. package/src/sap/fe/macros/internal/field/FieldStyles.tsx +2 -1
  100. package/src/sap/fe/macros/internal/valuehelp/TableDelegate.js +4 -4
  101. package/src/sap/fe/macros/internal/valuehelp/TableDelegate.ts +3 -3
  102. package/src/sap/fe/macros/internal/valuehelp/ValueListDialogTable.fragment.xml +1 -0
  103. package/src/sap/fe/macros/internal/valuehelp/ValueListHelper.js +11 -3
  104. package/src/sap/fe/macros/internal/valuehelp/ValueListHelper.ts +12 -7
  105. package/src/sap/fe/macros/internal/valuehelp/ValueListTable.fragment.xml +1 -0
  106. package/src/sap/fe/macros/library.js +1 -1
  107. package/src/sap/fe/macros/mdc/adapter/StateHelper.js +11 -6
  108. package/src/sap/fe/macros/mdc/adapter/StateHelper.ts +12 -7
  109. package/src/sap/fe/macros/messagebundle.properties +37 -29
  110. package/src/sap/fe/macros/messagebundle_ar.properties +5 -3
  111. package/src/sap/fe/macros/messagebundle_bg.properties +6 -4
  112. package/src/sap/fe/macros/messagebundle_ca.properties +8 -6
  113. package/src/sap/fe/macros/messagebundle_cnr.properties +5 -3
  114. package/src/sap/fe/macros/messagebundle_cs.properties +4 -2
  115. package/src/sap/fe/macros/messagebundle_cy.properties +7 -5
  116. package/src/sap/fe/macros/messagebundle_da.properties +6 -4
  117. package/src/sap/fe/macros/messagebundle_de.properties +11 -9
  118. package/src/sap/fe/macros/messagebundle_el.properties +7 -5
  119. package/src/sap/fe/macros/messagebundle_en.properties +8 -6
  120. package/src/sap/fe/macros/messagebundle_en_GB.properties +8 -6
  121. package/src/sap/fe/macros/messagebundle_en_US_saprigi.properties +8 -6
  122. package/src/sap/fe/macros/messagebundle_es.properties +6 -4
  123. package/src/sap/fe/macros/messagebundle_es_MX.properties +6 -4
  124. package/src/sap/fe/macros/messagebundle_et.properties +5 -3
  125. package/src/sap/fe/macros/messagebundle_fi.properties +8 -6
  126. package/src/sap/fe/macros/messagebundle_fr.properties +6 -4
  127. package/src/sap/fe/macros/messagebundle_fr_CA.properties +8 -6
  128. package/src/sap/fe/macros/messagebundle_hi.properties +6 -4
  129. package/src/sap/fe/macros/messagebundle_hr.properties +6 -4
  130. package/src/sap/fe/macros/messagebundle_hu.properties +4 -2
  131. package/src/sap/fe/macros/messagebundle_id.properties +8 -6
  132. package/src/sap/fe/macros/messagebundle_it.properties +4 -2
  133. package/src/sap/fe/macros/messagebundle_iw.properties +5 -3
  134. package/src/sap/fe/macros/messagebundle_ja.properties +5 -3
  135. package/src/sap/fe/macros/messagebundle_kk.properties +5 -3
  136. package/src/sap/fe/macros/messagebundle_ko.properties +4 -2
  137. package/src/sap/fe/macros/messagebundle_lt.properties +6 -4
  138. package/src/sap/fe/macros/messagebundle_lv.properties +5 -3
  139. package/src/sap/fe/macros/messagebundle_mk.properties +5 -3
  140. package/src/sap/fe/macros/messagebundle_ms.properties +8 -6
  141. package/src/sap/fe/macros/messagebundle_nl.properties +7 -5
  142. package/src/sap/fe/macros/messagebundle_no.properties +6 -4
  143. package/src/sap/fe/macros/messagebundle_pl.properties +6 -4
  144. package/src/sap/fe/macros/messagebundle_pt.properties +7 -5
  145. package/src/sap/fe/macros/messagebundle_pt_PT.properties +6 -4
  146. package/src/sap/fe/macros/messagebundle_ro.properties +7 -5
  147. package/src/sap/fe/macros/messagebundle_ru.properties +4 -2
  148. package/src/sap/fe/macros/messagebundle_sh.properties +5 -3
  149. package/src/sap/fe/macros/messagebundle_sk.properties +5 -3
  150. package/src/sap/fe/macros/messagebundle_sl.properties +6 -4
  151. package/src/sap/fe/macros/messagebundle_sr.properties +5 -3
  152. package/src/sap/fe/macros/messagebundle_sv.properties +5 -3
  153. package/src/sap/fe/macros/messagebundle_th.properties +4 -2
  154. package/src/sap/fe/macros/messagebundle_tr.properties +4 -2
  155. package/src/sap/fe/macros/messagebundle_uk.properties +10 -8
  156. package/src/sap/fe/macros/messagebundle_vi.properties +6 -4
  157. package/src/sap/fe/macros/messagebundle_zh_CN.properties +5 -3
  158. package/src/sap/fe/macros/messagebundle_zh_TW.properties +5 -3
  159. package/src/sap/fe/macros/messages/MessageButton.js +17 -19
  160. package/src/sap/fe/macros/messages/MessageButton.ts +24 -22
  161. package/src/sap/fe/macros/table/Action.js +24 -2
  162. package/src/sap/fe/macros/table/Action.ts +13 -0
  163. package/src/sap/fe/macros/table/ActionGroup.js +24 -2
  164. package/src/sap/fe/macros/table/ActionGroup.ts +13 -0
  165. package/src/sap/fe/macros/table/ActionGroupOverride.js +24 -2
  166. package/src/sap/fe/macros/table/ActionGroupOverride.ts +13 -0
  167. package/src/sap/fe/macros/table/ActionOverride.js +24 -2
  168. package/src/sap/fe/macros/table/ActionOverride.ts +13 -0
  169. package/src/sap/fe/macros/table/ActionsTemplating.js +73 -12
  170. package/src/sap/fe/macros/table/ActionsTemplating.tsx +69 -13
  171. package/src/sap/fe/macros/table/Column.js +3 -3
  172. package/src/sap/fe/macros/table/Column.ts +2 -2
  173. package/src/sap/fe/macros/table/MdcTableTemplate.js +20 -8
  174. package/src/sap/fe/macros/table/MdcTableTemplate.tsx +32 -6
  175. package/src/sap/fe/macros/table/QuickFilterSelector.js +35 -14
  176. package/src/sap/fe/macros/table/QuickFilterSelector.tsx +22 -3
  177. package/src/sap/fe/macros/table/Table.block.js +137 -108
  178. package/src/sap/fe/macros/table/Table.block.tsx +29 -2
  179. package/src/sap/fe/macros/table/Table.js +7 -1
  180. package/src/sap/fe/macros/table/Table.tsx +7 -1
  181. package/src/sap/fe/macros/table/TableAPI.js +150 -133
  182. package/src/sap/fe/macros/table/TableAPI.ts +20 -3
  183. package/src/sap/fe/macros/table/TableDefinition.js +4 -2
  184. package/src/sap/fe/macros/table/TableDefinition.ts +3 -1
  185. package/src/sap/fe/macros/table/TableRuntime.js +3 -3
  186. package/src/sap/fe/macros/table/TableRuntime.ts +2 -2
  187. package/src/sap/fe/macros/table/TableSizeHelper.js +3 -3
  188. package/src/sap/fe/macros/table/TableSizeHelper.ts +5 -2
  189. package/src/sap/fe/macros/table/TreeTable.js +7 -1
  190. package/src/sap/fe/macros/table/TreeTable.tsx +7 -1
  191. package/src/sap/fe/macros/table/delegates/TableDelegate.js +27 -20
  192. package/src/sap/fe/macros/table/delegates/TableDelegate.ts +35 -26
  193. package/src/sap/fe/macros/table/designtime/Table.designtime.js +3 -1
  194. package/src/sap/fe/macros/table/designtime/Table.designtime.ts +2 -0
  195. package/src/sap/fe/macros/table/massEdit/MassEditDialog.js +10 -10
  196. package/src/sap/fe/macros/table/massEdit/MassEditDialog.tsx +11 -9
  197. package/src/sap/fe/macros/table/massEdit/MassEditDialogHelper.js +8 -8
  198. package/src/sap/fe/macros/table/massEdit/MassEditDialogHelper.tsx +7 -6
  199. package/src/sap/fe/macros/table/massEdit/designtime/MassEdit.designtime.js +3 -1
  200. package/src/sap/fe/macros/table/massEdit/designtime/MassEdit.designtime.ts +2 -1
  201. package/src/sap/fe/macros/table/mixin/ContextMenuHandler.js +2 -1
  202. package/src/sap/fe/macros/table/mixin/ContextMenuHandler.ts +1 -0
  203. package/src/sap/fe/macros/table/mixin/TableHierarchy.js +4 -1
  204. package/src/sap/fe/macros/table/mixin/TableHierarchy.ts +3 -0
  205. package/src/sap/fe/macros/valuehelp/ValueHelpDelegate.js +37 -8
  206. package/src/sap/fe/macros/valuehelp/ValueHelpDelegate.ts +47 -16
  207. package/src/sap/fe/macros/visualfilters/VisualFilter.js +95 -6
  208. package/src/sap/fe/macros/visualfilters/VisualFilter.tsx +93 -2
  209. package/src/sap/fe/macros/visualfilters/VisualFilterRuntime.js +15 -3
  210. package/src/sap/fe/macros/visualfilters/VisualFilterRuntime.ts +17 -2
@@ -6,6 +6,7 @@ sap.ui.define(["sap/fe/macros/designtime/Designtime.helper", "sap/ui/core/Lib",
6
6
  "use strict";
7
7
 
8
8
  var getPropertyPath = Table_designtime_helper.getPropertyPath;
9
+ var isManifestChangesEnabled = Designtime_helper.isManifestChangesEnabled;
9
10
  var extractChanges = Designtime_helper.extractChanges;
10
11
  const massEditRtaPath = "rta/massEditConfigSettings/visibleFields";
11
12
  const MassEditDesignTime = {
@@ -16,6 +17,7 @@ sap.ui.define(["sap/fe/macros/designtime/Designtime.helper", "sap/ui/core/Lib",
16
17
  fe: {
17
18
  name: Library.getResourceBundleFor("sap.fe.macros").getText("C_MASS_EDIT_DESIGN_CONFIGURATION"),
18
19
  icon: "sap-icon://developer-settings",
20
+ isEnabled: isManifestChangesEnabled,
19
21
  /**
20
22
  * Handles the changes for the mass edit configuration.
21
23
  * @param dialog The dialog that is opened
@@ -71,4 +73,4 @@ sap.ui.define(["sap/fe/macros/designtime/Designtime.helper", "sap/ui/core/Lib",
71
73
  };
72
74
  return MassEditDesignTime;
73
75
  }, false);
74
- //# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJuYW1lcyI6WyJtYXNzRWRpdFJ0YVBhdGgiLCJNYXNzRWRpdERlc2lnblRpbWUiLCJhY3Rpb25zIiwicmVuYW1lIiwic2V0dGluZ3MiLCJmZSIsIm5hbWUiLCJMaWJyYXJ5IiwiZ2V0UmVzb3VyY2VCdW5kbGVGb3IiLCJnZXRUZXh0IiwiaWNvbiIsImhhbmRsZXIiLCJkaWFsb2ciLCJlbGVtZW50IiwiaXNBIiwiZ2V0UGFyZW50IiwibWFzc0VkaXREaWFsb2dIZWxwZXIiLCJnZXRNYXNzRWRpdERpYWxvZ0hlbHBlciIsImNvbmZpZ0NvbnRleHQiLCJnZXRCaW5kaW5nQ29udGV4dCIsInJ0YVNlbGVjdGVkSXRlbXMiLCJnZXRQcm9wZXJ0eSIsIm9yaWdpbmFsRmllbGRzIiwiZ2V0RmllbGRQcm9wZXJ0aWVzIiwibWFwIiwiZmllbGQiLCJwcm9wZXJ0eUluZm8iLCJyZWxhdGl2ZVBhdGgiLCJqb2luIiwicmVzdWx0IiwiTWFzc0VkaXREZXNpZ25EaWFsb2ciLCJvcGVuRGlhbG9nIiwiaXNDaGFuZ2VPYnNlcnZlZCIsImluaXRpYWxJZ25vcmVkRmllbGRzIiwiZ2V0VGFibGVEZWZpbml0aW9uIiwiY29udHJvbCIsIm1hc3NFZGl0IiwiaWdub3JlZEZpZWxkcyIsInNldFByb3BlcnR5IiwiZXh0cmFjdENoYW5nZXMiLCJpZCIsImRlc2NyaXB0aW9uIiwidHlwZSIsInZhbHVlIiwidmlzaWJsZUZpZWxkcyIsImdldFByb3BlcnR5UGF0aCIsImdldENvbnRlbnQiLCJlcnJvciIsInByb3BlcnRpZXMiLCJhZ2dyZWdhdGlvbnMiXSwic291cmNlUm9vdCI6Ii4iLCJzb3VyY2VzIjpbIk1hc3NFZGl0LmRlc2lnbnRpbWUudHMiXSwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHR5cGUgUmVzb3VyY2VCdW5kbGUgZnJvbSBcInNhcC9iYXNlL2kxOG4vUmVzb3VyY2VCdW5kbGVcIjtcbmltcG9ydCB0eXBlIHsgYWRhcHRpb25DaGFuZ2UgfSBmcm9tIFwic2FwL2ZlL21hY3Jvcy9kZXNpZ250aW1lL0Rlc2lnbnRpbWUuaGVscGVyXCI7XG5pbXBvcnQgeyBleHRyYWN0Q2hhbmdlcyB9IGZyb20gXCJzYXAvZmUvbWFjcm9zL2Rlc2lnbnRpbWUvRGVzaWdudGltZS5oZWxwZXJcIjtcbmltcG9ydCB0eXBlIFRhYmxlQVBJIGZyb20gXCJzYXAvZmUvbWFjcm9zL3RhYmxlL1RhYmxlQVBJXCI7XG5pbXBvcnQgdHlwZSBEaWFsb2cgZnJvbSBcInNhcC9tL0RpYWxvZ1wiO1xuaW1wb3J0IHR5cGUgTWFuYWdlZE9iamVjdCBmcm9tIFwic2FwL3VpL2Jhc2UvTWFuYWdlZE9iamVjdFwiO1xuaW1wb3J0IExpYnJhcnkgZnJvbSBcInNhcC91aS9jb3JlL0xpYlwiO1xuaW1wb3J0IHR5cGUgQ29udGV4dCBmcm9tIFwic2FwL3VpL21vZGVsL0NvbnRleHRcIjtcbmltcG9ydCB7IGdldFByb3BlcnR5UGF0aCB9IGZyb20gXCIuLi8uLi9kZXNpZ250aW1lL1RhYmxlLmRlc2lnbnRpbWUuaGVscGVyXCI7XG5pbXBvcnQgTWFzc0VkaXREZXNpZ25EaWFsb2cgZnJvbSBcIi4vTWFzc0VkaXREZXNpZ25EaWFsb2dcIjtcblxuY29uc3QgbWFzc0VkaXRSdGFQYXRoID0gXCJydGEvbWFzc0VkaXRDb25maWdTZXR0aW5ncy92aXNpYmxlRmllbGRzXCI7XG5jb25zdCBNYXNzRWRpdERlc2lnblRpbWUgPSB7XG5cdGFjdGlvbnM6IHtcblx0XHRyZW5hbWU6ICgpOiBudWxsID0+IG51bGwsIC8vIFJlbW92ZSB0aGUgcmVuYW1lIGFjdGlvbiBvZiB0aGUgc2FwLm0uZGlhbG9nXG5cdFx0c2V0dGluZ3M6IHtcblx0XHRcdGZlOiB7XG5cdFx0XHRcdG5hbWU6IChMaWJyYXJ5LmdldFJlc291cmNlQnVuZGxlRm9yKFwic2FwLmZlLm1hY3Jvc1wiKSBhcyBSZXNvdXJjZUJ1bmRsZSkuZ2V0VGV4dChcIkNfTUFTU19FRElUX0RFU0lHTl9DT05GSUdVUkFUSU9OXCIpLFxuXHRcdFx0XHRpY29uOiBcInNhcC1pY29uOi8vZGV2ZWxvcGVyLXNldHRpbmdzXCIsXG5cdFx0XHRcdC8qKlxuXHRcdFx0XHQgKiBIYW5kbGVzIHRoZSBjaGFuZ2VzIGZvciB0aGUgbWFzcyBlZGl0IGNvbmZpZ3VyYXRpb24uXG5cdFx0XHRcdCAqIEBwYXJhbSBkaWFsb2cgVGhlIGRpYWxvZyB0aGF0IGlzIG9wZW5lZFxuXHRcdFx0XHQgKiBAcmV0dXJucyBUaGUgY2hhbmdlc1xuXHRcdFx0XHQgKi9cblx0XHRcdFx0aGFuZGxlcjogYXN5bmMgKGRpYWxvZzogRGlhbG9nKTogUHJvbWlzZTxhZGFwdGlvbkNoYW5nZVtdPiA9PiB7XG5cdFx0XHRcdFx0bGV0IGVsZW1lbnQ6IE1hbmFnZWRPYmplY3QgfCBudWxsID0gZGlhbG9nO1xuXHRcdFx0XHRcdHdoaWxlIChlbGVtZW50ICYmICFlbGVtZW50LmlzQTxUYWJsZUFQST4oXCJzYXAuZmUubWFjcm9zLnRhYmxlLlRhYmxlQVBJXCIpKSB7XG5cdFx0XHRcdFx0XHRlbGVtZW50ID0gZWxlbWVudC5nZXRQYXJlbnQoKTtcblx0XHRcdFx0XHR9XG5cdFx0XHRcdFx0Y29uc3QgbWFzc0VkaXREaWFsb2dIZWxwZXIgPSBlbGVtZW50Py5nZXRNYXNzRWRpdERpYWxvZ0hlbHBlcigpO1xuXG5cdFx0XHRcdFx0aWYgKCFlbGVtZW50IHx8ICFtYXNzRWRpdERpYWxvZ0hlbHBlcikge1xuXHRcdFx0XHRcdFx0cmV0dXJuIFtdO1xuXHRcdFx0XHRcdH1cblx0XHRcdFx0XHR0cnkge1xuXHRcdFx0XHRcdFx0Y29uc3QgY29uZmlnQ29udGV4dCA9IGVsZW1lbnQuZ2V0QmluZGluZ0NvbnRleHQoXCJpbnRlcm5hbFwiKSBhcyBDb250ZXh0O1xuXHRcdFx0XHRcdFx0Y29uc3QgcnRhU2VsZWN0ZWRJdGVtcyA9IGNvbmZpZ0NvbnRleHQuZ2V0UHJvcGVydHkobWFzc0VkaXRSdGFQYXRoKSBhcyB1bmRlZmluZWQgfCBzdHJpbmc7XG5cdFx0XHRcdFx0XHRjb25zdCBvcmlnaW5hbEZpZWxkcyA9XG5cdFx0XHRcdFx0XHRcdHJ0YVNlbGVjdGVkSXRlbXMgPz9cblx0XHRcdFx0XHRcdFx0bWFzc0VkaXREaWFsb2dIZWxwZXJcblx0XHRcdFx0XHRcdFx0XHQuZ2V0RmllbGRQcm9wZXJ0aWVzKClcblx0XHRcdFx0XHRcdFx0XHQubWFwKChmaWVsZCkgPT4gZmllbGQucHJvcGVydHlJbmZvLnJlbGF0aXZlUGF0aClcblx0XHRcdFx0XHRcdFx0XHQuam9pbihcIixcIik7XG5cblx0XHRcdFx0XHRcdGNvbnN0IHJlc3VsdCA9IGF3YWl0IG5ldyBNYXNzRWRpdERlc2lnbkRpYWxvZyhlbGVtZW50KS5vcGVuRGlhbG9nKGRpYWxvZywgb3JpZ2luYWxGaWVsZHMpO1xuXHRcdFx0XHRcdFx0Y29uc3QgaXNDaGFuZ2VPYnNlcnZlZCA9IHJlc3VsdCAhPT0gb3JpZ2luYWxGaWVsZHM7XG5cdFx0XHRcdFx0XHRjb25zdCBpbml0aWFsSWdub3JlZEZpZWxkcyA9IGVsZW1lbnQuZ2V0VGFibGVEZWZpbml0aW9uKCkuY29udHJvbC5tYXNzRWRpdC5pZ25vcmVkRmllbGRzLmpvaW4oXCIsXCIpO1xuXHRcdFx0XHRcdFx0aWYgKGlzQ2hhbmdlT2JzZXJ2ZWQpIHtcblx0XHRcdFx0XHRcdFx0Y29uZmlnQ29udGV4dC5zZXRQcm9wZXJ0eShtYXNzRWRpdFJ0YVBhdGgsIHJlc3VsdCk7XG5cdFx0XHRcdFx0XHR9XG5cblx0XHRcdFx0XHRcdHJldHVybiBleHRyYWN0Q2hhbmdlcyhcblx0XHRcdFx0XHRcdFx0W1xuXHRcdFx0XHRcdFx0XHRcdHtcblx0XHRcdFx0XHRcdFx0XHRcdGlkOiBcInZpc2libGVGaWVsZHNcIixcblx0XHRcdFx0XHRcdFx0XHRcdG5hbWU6IFwidmlzaWJsZSBmaWVsZHNcIixcblx0XHRcdFx0XHRcdFx0XHRcdGRlc2NyaXB0aW9uOiBcIlZpc2libGUgZmllbGRzIGZvciB0aGUgbWFzcyBlZGl0IGRpYWxvZ1wiLFxuXHRcdFx0XHRcdFx0XHRcdFx0dHlwZTogXCJzdHJpbmdcIixcblx0XHRcdFx0XHRcdFx0XHRcdHZhbHVlOiBvcmlnaW5hbEZpZWxkc1xuXHRcdFx0XHRcdFx0XHRcdH0sXG5cdFx0XHRcdFx0XHRcdFx0e1xuXHRcdFx0XHRcdFx0XHRcdFx0aWQ6IFwiaWdub3JlZEZpZWxkc1wiLFxuXHRcdFx0XHRcdFx0XHRcdFx0bmFtZTogXCJpZ25vcmVkIGZpZWxkc1wiLFxuXHRcdFx0XHRcdFx0XHRcdFx0ZGVzY3JpcHRpb246IFwiSWdub3JlZCBmaWVsZHMgZm9yIHRoZSBtYXNzIGVkaXQgZGlhbG9nXCIsXG5cdFx0XHRcdFx0XHRcdFx0XHR0eXBlOiBcInN0cmluZ1wiLFxuXHRcdFx0XHRcdFx0XHRcdFx0dmFsdWU6IGluaXRpYWxJZ25vcmVkRmllbGRzXG5cdFx0XHRcdFx0XHRcdFx0fVxuXHRcdFx0XHRcdFx0XHRdLFxuXHRcdFx0XHRcdFx0XHR7XG5cdFx0XHRcdFx0XHRcdFx0dmlzaWJsZUZpZWxkczogb3JpZ2luYWxGaWVsZHMsXG5cdFx0XHRcdFx0XHRcdFx0aWdub3JlZEZpZWxkczogaW5pdGlhbElnbm9yZWRGaWVsZHNcblx0XHRcdFx0XHRcdFx0fSxcblx0XHRcdFx0XHRcdFx0e1xuXHRcdFx0XHRcdFx0XHRcdHZpc2libGVGaWVsZHM6IHJlc3VsdCxcblx0XHRcdFx0XHRcdFx0XHRpZ25vcmVkRmllbGRzOiAhaXNDaGFuZ2VPYnNlcnZlZCA/IGluaXRpYWxJZ25vcmVkRmllbGRzIDogXCJcIlxuXHRcdFx0XHRcdFx0XHR9LFxuXHRcdFx0XHRcdFx0XHRgJHtnZXRQcm9wZXJ0eVBhdGgoZWxlbWVudCl9L2VuYWJsZU1hc3NFZGl0YCxcblx0XHRcdFx0XHRcdFx0ZWxlbWVudC5nZXRDb250ZW50KClcblx0XHRcdFx0XHRcdCk7XG5cdFx0XHRcdFx0fSBjYXRjaCAoZXJyb3I6IHVua25vd24pIHtcblx0XHRcdFx0XHRcdHJldHVybiBbXTtcblx0XHRcdFx0XHR9XG5cdFx0XHRcdH1cblx0XHRcdH1cblx0XHR9XG5cdH0sXG5cdHByb3BlcnRpZXM6IHt9LFxuXHRhZ2dyZWdhdGlvbnM6IHt9XG59O1xuXG5leHBvcnQgZGVmYXVsdCBN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
76
+ //# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJuYW1lcyI6WyJtYXNzRWRpdFJ0YVBhdGgiLCJNYXNzRWRpdERlc2lnblRpbWUiLCJhY3Rpb25zIiwicmVuYW1lIiwic2V0dGluZ3MiLCJmZSIsIm5hbWUiLCJMaWJyYXJ5IiwiZ2V0UmVzb3VyY2VCdW5kbGVGb3IiLCJnZXRUZXh0IiwiaWNvbiIsImlzRW5hYmxlZCIsImlzTWFuaWZlc3RDaGFuZ2VzRW5hYmxlZCIsImhhbmRsZXIiLCJkaWFsb2ciLCJlbGVtZW50IiwiaXNBIiwiZ2V0UGFyZW50IiwibWFzc0VkaXREaWFsb2dIZWxwZXIiLCJnZXRNYXNzRWRpdERpYWxvZ0hlbHBlciIsImNvbmZpZ0NvbnRleHQiLCJnZXRCaW5kaW5nQ29udGV4dCIsInJ0YVNlbGVjdGVkSXRlbXMiLCJnZXRQcm9wZXJ0eSIsIm9yaWdpbmFsRmllbGRzIiwiZ2V0RmllbGRQcm9wZXJ0aWVzIiwibWFwIiwiZmllbGQiLCJwcm9wZXJ0eUluZm8iLCJyZWxhdGl2ZVBhdGgiLCJqb2luIiwicmVzdWx0IiwiTWFzc0VkaXREZXNpZ25EaWFsb2ciLCJvcGVuRGlhbG9nIiwiaXNDaGFuZ2VPYnNlcnZlZCIsImluaXRpYWxJZ25vcmVkRmllbGRzIiwiZ2V0VGFibGVEZWZpbml0aW9uIiwiY29udHJvbCIsIm1hc3NFZGl0IiwiaWdub3JlZEZpZWxkcyIsInNldFByb3BlcnR5IiwiZXh0cmFjdENoYW5nZXMiLCJpZCIsImRlc2NyaXB0aW9uIiwidHlwZSIsInZhbHVlIiwidmlzaWJsZUZpZWxkcyIsImdldFByb3BlcnR5UGF0aCIsImdldENvbnRlbnQiLCJlcnJvciIsInByb3BlcnRpZXMiLCJhZ2dyZWdhdGlvbnMiXSwic291cmNlUm9vdCI6Ii4iLCJzb3VyY2VzIjpbIk1hc3NFZGl0LmRlc2lnbnRpbWUudHMiXSwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHR5cGUgUmVzb3VyY2VCdW5kbGUgZnJvbSBcInNhcC9iYXNlL2kxOG4vUmVzb3VyY2VCdW5kbGVcIjtcbmltcG9ydCB0eXBlIHsgYWRhcHRpb25DaGFuZ2UgfSBmcm9tIFwic2FwL2ZlL21hY3Jvcy9kZXNpZ250aW1lL0Rlc2lnbnRpbWUuaGVscGVyXCI7XG5pbXBvcnQgeyBleHRyYWN0Q2hhbmdlcywgaXNNYW5pZmVzdENoYW5nZXNFbmFibGVkIH0gZnJvbSBcInNhcC9mZS9tYWNyb3MvZGVzaWdudGltZS9EZXNpZ250aW1lLmhlbHBlclwiO1xuaW1wb3J0IHR5cGUgVGFibGVBUEkgZnJvbSBcInNhcC9mZS9tYWNyb3MvdGFibGUvVGFibGVBUElcIjtcbmltcG9ydCB0eXBlIERpYWxvZyBmcm9tIFwic2FwL20vRGlhbG9nXCI7XG5pbXBvcnQgdHlwZSBNYW5hZ2VkT2JqZWN0IGZyb20gXCJzYXAvdWkvYmFzZS9NYW5hZ2VkT2JqZWN0XCI7XG5pbXBvcnQgTGlicmFyeSBmcm9tIFwic2FwL3VpL2NvcmUvTGliXCI7XG5pbXBvcnQgdHlwZSBDb250ZXh0IGZyb20gXCJzYXAvdWkvbW9kZWwvQ29udGV4dFwiO1xuaW1wb3J0IHsgZ2V0UHJvcGVydHlQYXRoIH0gZnJvbSBcIi4uLy4uL2Rlc2lnbnRpbWUvVGFibGUuZGVzaWdudGltZS5oZWxwZXJcIjtcbmltcG9ydCBNYXNzRWRpdERlc2lnbkRpYWxvZyBmcm9tIFwiLi9NYXNzRWRpdERlc2lnbkRpYWxvZ1wiO1xuXG5jb25zdCBtYXNzRWRpdFJ0YVBhdGggPSBcInJ0YS9tYXNzRWRpdENvbmZpZ1NldHRpbmdzL3Zpc2libGVGaWVsZHNcIjtcbmNvbnN0IE1hc3NFZGl0RGVzaWduVGltZSA9IHtcblx0YWN0aW9uczoge1xuXHRcdHJlbmFtZTogKCk6IG51bGwgPT4gbnVsbCwgLy8gUmVtb3ZlIHRoZSByZW5hbWUgYWN0aW9uIG9mIHRoZSBzYXAubS5kaWFsb2dcblx0XHRzZXR0aW5nczoge1xuXHRcdFx0ZmU6IHtcblx0XHRcdFx0bmFtZTogKExpYnJhcnkuZ2V0UmVzb3VyY2VCdW5kbGVGb3IoXCJzYXAuZmUubWFjcm9zXCIpIGFzIFJlc291cmNlQnVuZGxlKS5nZXRUZXh0KFwiQ19NQVNTX0VESVRfREVTSUdOX0NPTkZJR1VSQVRJT05cIiksXG5cdFx0XHRcdGljb246IFwic2FwLWljb246Ly9kZXZlbG9wZXItc2V0dGluZ3NcIixcblx0XHRcdFx0aXNFbmFibGVkOiBpc01hbmlmZXN0Q2hhbmdlc0VuYWJsZWQsXG5cdFx0XHRcdC8qKlxuXHRcdFx0XHQgKiBIYW5kbGVzIHRoZSBjaGFuZ2VzIGZvciB0aGUgbWFzcyBlZGl0IGNvbmZpZ3VyYXRpb24uXG5cdFx0XHRcdCAqIEBwYXJhbSBkaWFsb2cgVGhlIGRpYWxvZyB0aGF0IGlzIG9wZW5lZFxuXHRcdFx0XHQgKiBAcmV0dXJucyBUaGUgY2hhbmdlc1xuXHRcdFx0XHQgKi9cblx0XHRcdFx0aGFuZGxlcjogYXN5bmMgKGRpYWxvZzogRGlhbG9nKTogUHJvbWlzZTxhZGFwdGlvbkNoYW5nZVtdPiA9PiB7XG5cdFx0XHRcdFx0bGV0IGVsZW1lbnQ6IE1hbmFnZWRPYmplY3QgfCBudWxsID0gZGlhbG9nO1xuXHRcdFx0XHRcdHdoaWxlIChlbGVtZW50ICYmICFlbGVtZW50LmlzQTxUYWJsZUFQST4oXCJzYXAuZmUubWFjcm9zLnRhYmxlLlRhYmxlQVBJXCIpKSB7XG5cdFx0XHRcdFx0XHRlbGVtZW50ID0gZWxlbWVudC5nZXRQYXJlbnQoKTtcblx0XHRcdFx0XHR9XG5cdFx0XHRcdFx0Y29uc3QgbWFzc0VkaXREaWFsb2dIZWxwZXIgPSBlbGVtZW50Py5nZXRNYXNzRWRpdERpYWxvZ0hlbHBlcigpO1xuXG5cdFx0XHRcdFx0aWYgKCFlbGVtZW50IHx8ICFtYXNzRWRpdERpYWxvZ0hlbHBlcikge1xuXHRcdFx0XHRcdFx0cmV0dXJuIFtdO1xuXHRcdFx0XHRcdH1cblx0XHRcdFx0XHR0cnkge1xuXHRcdFx0XHRcdFx0Y29uc3QgY29uZmlnQ29udGV4dCA9IGVsZW1lbnQuZ2V0QmluZGluZ0NvbnRleHQoXCJpbnRlcm5hbFwiKSBhcyBDb250ZXh0O1xuXHRcdFx0XHRcdFx0Y29uc3QgcnRhU2VsZWN0ZWRJdGVtcyA9IGNvbmZpZ0NvbnRleHQuZ2V0UHJvcGVydHkobWFzc0VkaXRSdGFQYXRoKSBhcyB1bmRlZmluZWQgfCBzdHJpbmc7XG5cdFx0XHRcdFx0XHRjb25zdCBvcmlnaW5hbEZpZWxkcyA9XG5cdFx0XHRcdFx0XHRcdHJ0YVNlbGVjdGVkSXRlbXMgPz9cblx0XHRcdFx0XHRcdFx0bWFzc0VkaXREaWFsb2dIZWxwZXJcblx0XHRcdFx0XHRcdFx0XHQuZ2V0RmllbGRQcm9wZXJ0aWVzKClcblx0XHRcdFx0XHRcdFx0XHQubWFwKChmaWVsZCkgPT4gZmllbGQucHJvcGVydHlJbmZvLnJlbGF0aXZlUGF0aClcblx0XHRcdFx0XHRcdFx0XHQuam9pbihcIixcIik7XG5cblx0XHRcdFx0XHRcdGNvbnN0IHJlc3VsdCA9IGF3YWl0IG5ldyBNYXNzRWRpdERlc2lnbkRpYWxvZyhlbGVtZW50KS5vcGVuRGlhbG9nKGRpYWxvZywgb3JpZ2luYWxGaWVsZHMpO1xuXHRcdFx0XHRcdFx0Y29uc3QgaXNDaGFuZ2VPYnNlcnZlZCA9IHJlc3VsdCAhPT0gb3JpZ2luYWxGaWVsZHM7XG5cdFx0XHRcdFx0XHRjb25zdCBpbml0aWFsSWdub3JlZEZpZWxkcyA9IGVsZW1lbnQuZ2V0VGFibGVEZWZpbml0aW9uKCkuY29udHJvbC5tYXNzRWRpdC5pZ25vcmVkRmllbGRzLmpvaW4oXCIsXCIpO1xuXHRcdFx0XHRcdFx0aWYgKGlzQ2hhbmdlT2JzZXJ2ZWQpIHtcblx0XHRcdFx0XHRcdFx0Y29uZmlnQ29udGV4dC5zZXRQcm9wZXJ0eShtYXNzRWRpdFJ0YVBhdGgsIHJlc3VsdCk7XG5cdFx0XHRcdFx0XHR9XG5cblx0XHRcdFx0XHRcdHJldHVybiBleHRyYWN0Q2hhbmdlcyhcblx0XHRcdFx0XHRcdFx0W1xuXHRcdFx0XHRcdFx0XHRcdHtcblx0XHRcdFx0XHRcdFx0XHRcdGlkOiBcInZpc2libGVGaWVsZHNcIixcblx0XHRcdFx0XHRcdFx0XHRcdG5hbWU6IFwidmlzaWJsZSBmaWVsZHNcIixcblx0XHRcdFx0XHRcdFx0XHRcdGRlc2NyaXB0aW9uOiBcIlZpc2libGUgZmllbGRzIGZvciB0aGUgbWFzcyBlZGl0IGRpYWxvZ1wiLFxuXHRcdFx0XHRcdFx0XHRcdFx0dHlwZTogXCJzdHJpbmdcIixcblx0XHRcdFx0XHRcdFx0XHRcdHZhbHVlOiBvcmlnaW5hbEZpZWxkc1xuXHRcdFx0XHRcdFx0XHRcdH0sXG5cdFx0XHRcdFx0XHRcdFx0e1xuXHRcdFx0XHRcdFx0XHRcdFx0aWQ6IFwiaWdub3JlZEZpZWxkc1wiLFxuXHRcdFx0XHRcdFx0XHRcdFx0bmFtZTogXCJpZ25vcmVkIGZpZWxkc1wiLFxuXHRcdFx0XHRcdFx0XHRcdFx0ZGVzY3JpcHRpb246IFwiSWdub3JlZCBmaWVsZHMgZm9yIHRoZSBtYXNzIGVkaXQgZGlhbG9nXCIsXG5cdFx0XHRcdFx0XHRcdFx0XHR0eXBlOiBcInN0cmluZ1wiLFxuXHRcdFx0XHRcdFx0XHRcdFx0dmFsdWU6IGluaXRpYWxJZ25vcmVkRmllbGRzXG5cdFx0XHRcdFx0XHRcdFx0fVxuXHRcdFx0XHRcdFx0XHRdLFxuXHRcdFx0XHRcdFx0XHR7XG5cdFx0XHRcdFx0XHRcdFx0dmlzaWJsZUZpZWxkczogb3JpZ2luYWxGaWVsZHMsXG5cdFx0XHRcdFx0XHRcdFx0aWdub3JlZEZpZWxkczogaW5pdGlhbElnbm9yZWRGaWVsZHNcblx0XHRcdFx0XHRcdFx0fSxcblx0XHRcdFx0XHRcdFx0e1xuXHRcdFx0XHRcdFx0XHRcdHZpc2libGVGaWVsZHM6IHJlc3VsdCxcblx0XHRcdFx0XHRcdFx0XHRpZ25vcmVkRmllbGRzOiAhaXNDaGFuZ2VPYnNlcnZlZCA/IGluaXRpYWxJZ25vcmVkRmllbGRzIDogXCJcIlxuXHRcdFx0XHRcdFx0XHR9LFxuXHRcdFx0XHRcdFx0XHRgJHtnZXRQcm9wZXJ0eVBhdGgoZWxlbWVudCl9L2VuYWJsZU1hc3NFZGl0YCxcblx0XHRcdFx0XHRcdFx0ZWxlbWVudC5nZXRDb250ZW50KClcblx0XHRcdFx0XHRcdCk7XG5cdFx0XHRcdFx0fSBjYXRjaCAoZXJyb3I6IHVua25vd24pIHtcblx0XHRcdFx0XHRcdHJldHVybiBbXTtcblx0XHRcdFx0XHR9XG5cdFx0XHRcdH1cblx0XHRcdH1cblx0XHR9XG5cdH0sXG5cdHByb3BlcnRpZXM6IHt9LFxuXHRhZ2dyZWdhdGlvbnM6IHt9XG59O1xuXG5leHBvcnQgZGVmYXVsdCBNYXNzRWRpdERlc2lnblRpbWU7XG4iXSwibWFwcGluZ3MiOiI7Ozs7Ozs7Ozs7RUFXQSxNQUFNQSxlQUFlLEdBQUcsMENBQTBDO0VBQ2xFLE1BQU1DLGtCQUFrQixHQUFHO0lBQzFCQyxPQUFPLEVBQUU7TUFDUkMsTUFBTSxFQUFFQSxDQUFBLEtBQVksSUFBSTtNQUFFO01BQzFCQyxRQUFRLEVBQUU7UUFDVEMsRUFBRSxFQUFFO1VBQ0hDLElBQUksRUFBR0MsT0FBTyxDQUFDQyxvQkFBb0IsQ0FBQyxlQUFlLENBQUMsQ0FBb0JDLE9BQU8sQ0FBQyxrQ0FBa0MsQ0FBQztVQUNuSEMsSUFBSSxFQUFFLCtCQUErQjtVQUNyQ0MsU0FBUyxFQUFFQyx3QkFBd0I7VUFDbkM7QUFDSjtBQUNBO0FBQ0E7QUFDQTtVQUNJQyxPQUFPLEVBQUUsTUFBT0MsTUFBYyxJQUFnQztZQUM3RCxJQUFJQyxPQUE2QixHQUFHRCxNQUFNO1lBQzFDLE9BQU9DLE9BQU8sSUFBSSxDQUFDQSxPQUFPLENBQUNDLEdBQUcsQ0FBVyw4QkFBOEIsQ0FBQyxFQUFFO2NBQ3pFRCxPQUFPLEdBQUdBLE9BQU8sQ0FBQ0UsU0FBUyxDQUFDLENBQUM7WUFDOUI7WUFDQSxNQUFNQyxvQkFBb0IsR0FBR0gsT0FBTyxFQUFFSSx1QkFBdUIsQ0FBQyxDQUFDO1lBRS9ELElBQUksQ0FBQ0osT0FBTyxJQUFJLENBQUNHLG9CQUFvQixFQUFFO2NBQ3RDLE9BQU8sRUFBRTtZQUNWO1lBQ0EsSUFBSTtjQUNILE1BQU1FLGFBQWEsR0FBR0wsT0FBTyxDQUFDTSxpQkFBaUIsQ0FBQyxVQUFVLENBQVk7Y0FDdEUsTUFBTUMsZ0JBQWdCLEdBQUdGLGFBQWEsQ0FBQ0csV0FBVyxDQUFDdkIsZUFBZSxDQUF1QjtjQUN6RixNQUFNd0IsY0FBYyxHQUNuQkYsZ0JBQWdCLElBQ2hCSixvQkFBb0IsQ0FDbEJPLGtCQUFrQixDQUFDLENBQUMsQ0FDcEJDLEdBQUcsQ0FBRUMsS0FBSyxJQUFLQSxLQUFLLENBQUNDLFlBQVksQ0FBQ0MsWUFBWSxDQUFDLENBQy9DQyxJQUFJLENBQUMsR0FBRyxDQUFDO2NBRVosTUFBTUMsTUFBTSxHQUFHLE1BQU0sSUFBSUMsb0JBQW9CLENBQUNqQixPQUFPLENBQUMsQ0FBQ2tCLFVBQVUsQ0FBQ25CLE1BQU0sRUFBRVUsY0FBYyxDQUFDO2NBQ3pGLE1BQU1VLGdCQUFnQixHQUFHSCxNQUFNLEtBQUtQLGNBQWM7Y0FDbEQsTUFBTVcsb0JBQW9CLEdBQUdwQixPQUFPLENBQUNxQixrQkFBa0IsQ0FBQyxDQUFDLENBQUNDLE9BQU8sQ0FBQ0MsUUFBUSxDQUFDQyxhQUFhLENBQUNULElBQUksQ0FBQyxHQUFHLENBQUM7Y0FDbEcsSUFBSUksZ0JBQWdCLEVBQUU7Z0JBQ3JCZCxhQUFhLENBQUNvQixXQUFXLENBQUN4QyxlQUFlLEVBQUUrQixNQUFNLENBQUM7Y0FDbkQ7Y0FFQSxPQUFPVSxjQUFjLENBQ3BCLENBQ0M7Z0JBQ0NDLEVBQUUsRUFBRSxlQUFlO2dCQUNuQnBDLElBQUksRUFBRSxnQkFBZ0I7Z0JBQ3RCcUMsV0FBVyxFQUFFLHlDQUF5QztnQkFDdERDLElBQUksRUFBRSxRQUFRO2dCQUNkQyxLQUFLLEVBQUVyQjtjQUNSLENBQUMsRUFDRDtnQkFDQ2tCLEVBQUUsRUFBRSxlQUFlO2dCQUNuQnBDLElBQUksRUFBRSxnQkFBZ0I7Z0JBQ3RCcUMsV0FBVyxFQUFFLHlDQUF5QztnQkFDdERDLElBQUksRUFBRSxRQUFRO2dCQUNkQyxLQUFLLEVBQUVWO2NBQ1IsQ0FBQyxDQUNELEVBQ0Q7Z0JBQ0NXLGFBQWEsRUFBRXRCLGNBQWM7Z0JBQzdCZSxhQUFhLEVBQUVKO2NBQ2hCLENBQUMsRUFDRDtnQkFDQ1csYUFBYSxFQUFFZixNQUFNO2dCQUNyQlEsYUFBYSxFQUFFLENBQUNMLGdCQUFnQixHQUFHQyxvQkFBb0IsR0FBRztjQUMzRCxDQUFDLEVBQ0QsR0FBR1ksZUFBZSxDQUFDaEMsT0FBTyxDQUFDLGlCQUFpQixFQUM1Q0EsT0FBTyxDQUFDaUMsVUFBVSxDQUFDLENBQ3BCLENBQUM7WUFDRixDQUFDLENBQUMsT0FBT0MsS0FBYyxFQUFFO2NBQ3hCLE9BQU8sRUFBRTtZQUNWO1VBQ0Q7UUFDRDtNQUNEO0lBQ0QsQ0FBQztJQUNEQyxVQUFVLEVBQUUsQ0FBQyxDQUFDO0lBQ2RDLFlBQVksRUFBRSxDQUFDO0VBQ2hCLENBQUM7RUFBQyxPQUVhbEQsa0JBQWtCO0FBQUEiLCJpZ25vcmVMaXN0IjpbXX0=
@@ -1,6 +1,6 @@
1
1
  import type ResourceBundle from "sap/base/i18n/ResourceBundle";
2
2
  import type { adaptionChange } from "sap/fe/macros/designtime/Designtime.helper";
3
- import { extractChanges } from "sap/fe/macros/designtime/Designtime.helper";
3
+ import { extractChanges, isManifestChangesEnabled } from "sap/fe/macros/designtime/Designtime.helper";
4
4
  import type TableAPI from "sap/fe/macros/table/TableAPI";
5
5
  import type Dialog from "sap/m/Dialog";
6
6
  import type ManagedObject from "sap/ui/base/ManagedObject";
@@ -17,6 +17,7 @@ const MassEditDesignTime = {
17
17
  fe: {
18
18
  name: (Library.getResourceBundleFor("sap.fe.macros") as ResourceBundle).getText("C_MASS_EDIT_DESIGN_CONFIGURATION"),
19
19
  icon: "sap-icon://developer-settings",
20
+ isEnabled: isManifestChangesEnabled,
20
21
  /**
21
22
  * Handles the changes for the mass edit configuration.
22
23
  * @param dialog The dialog that is opened
@@ -298,6 +298,7 @@ sap.ui.define(["sap/fe/core/ActionRuntime", "sap/fe/core/CommonUtils", "sap/fe/c
298
298
  const activeSelectedContexts = contextMenuSelection.filter(function (oContext) {
299
299
  return !oContext.isInactive();
300
300
  });
301
+ internalModelContext?.setProperty("contextmenu/selectedContextsIncludingInactive", contextMenuSelection);
301
302
  internalModelContext?.setProperty("contextmenu/selectedContexts", activeSelectedContexts);
302
303
  //reset number of selected contexts to ensure callback for custom enable handler
303
304
  internalModelContext?.setProperty("contextmenu/numberOfSelectedContexts", -1);
@@ -371,4 +372,4 @@ sap.ui.define(["sap/fe/core/ActionRuntime", "sap/fe/core/CommonUtils", "sap/fe/c
371
372
  _exports = ContextMenuHandler;
372
373
  return _exports;
373
374
  }, false);
374
- //# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJuYW1lcyI6WyJDb250ZXh0TWVudUhhbmRsZXIiLCJjb250ZXh0TWVudUFjdGl2ZSIsIl9leHBvcnRzIiwiX3Byb3RvIiwicHJvdG90eXBlIiwic2V0dXBNaXhpbiIsIl9iYXNlQ2xhc3MiLCJhbGlnbkNvbnRleHRNZW51V2l0aFRhYmxlVG9vbGJhckNoYW5nZXMiLCJ0YWJsZSIsImNvbnRleHRNZW51IiwiZ2V0Q29udGV4dE1lbnUiLCJzb3J0SGVscGVyRm9yTWVudUl0ZW1zIiwidGFibGVBY3Rpb25zIiwiZ2V0QWN0aW9ucyIsImZvckVhY2giLCJ0YWJsZUFjdGlvbiIsInRhYmxlQWN0aW9uSXRlbSIsImdldEFnZ3JlZ2F0aW9uIiwiX2lzQWN0aW9uU3BsaXQiLCJfc3BsaXRBY3Rpb25zSW5Db250ZXh0TWVudSIsIl9pc0FjdGlvbkNvbWJpbmVkIiwiX2NvbWJpbmVBY3Rpb25JbkNvbnRleHRNZW51IiwiY29udGV4dE1lbnVJdGVtIiwiX2dldENvcnJlc3BvbmRpbmdDb250ZXh0TWVudUFjdGlvbiIsIl9hbGlnblRleHRBbmRWaXNpYmxpdHlJbkNvbnRleHRNZW51IiwicHVzaCIsImxlbmd0aCIsIm1lbnVJdGVtIiwic29ydEluZGV4IiwiaW5kZXhPZkNvbnRleHRNZW51IiwiaW5kZXhPZkl0ZW0iLCJyZW1vdmVJdGVtIiwiaW5zZXJ0SXRlbSIsImFjdGlvbkl0ZW0iLCJnZXRNZXRhZGF0YSIsImdldE5hbWUiLCJkZXBlbmRlbnRzIiwiZ2V0RGVwZW5kZW50cyIsImZsZXhNYW5hZ2VkT2JqZWN0TW9kZWxzIiwiZmlsdGVyIiwiZGVwZW5kZW50IiwiTWFuYWdlZE9iamVjdE1vZGVsIiwic29tZSIsIm1vZGVsIiwiaW5jbHVkZXMiLCJjb250ZXh0TWVudUl0ZW1zIiwiZ2V0SXRlbXMiLCJtZW51QnV0dG9uIiwiX2ZpbmRPckNyZWF0ZU1lbnVCdXR0b25JbkNvbnRleHRNZW51IiwiYWN0aW9uSXRlbXMiLCJnZXRNZW51IiwiYWN0aW9uIiwidG9vbEJhckFjdGlvbiIsImFjdGlvbklkSW5Db250ZXh0TWVudSIsImRhdGEiLCJhY3Rpb25JZEluVG9vbGJhciIsInJlcGxhY2UiLCJzZXRUZXh0IiwiZ2V0VGV4dCIsImFkZEl0ZW0iLCJnZXRJZCIsImFjdGlvbkluU3ViTWVudSIsIl9maW5kQWN0aW9uSW5TdWJNZW51IiwiZGVzdHJveSIsInN1Yk1lbnUiLCJzcGxpY2UiLCJpbmRleE9mIiwidW5kZWZpbmVkIiwibmV3TWVudUJ1dHRvbiIsIk1lbnVJdGVtIiwiaWQiLCJnZW5lcmF0ZSIsInRleHQiLCJtZW51SXRlbXMiLCJpIiwiaXRlbSIsInN1Ykl0ZW1zIiwic3ViSXRlbSIsImluZGV4IiwidGFibGVBY3Rpb25WaXNpYmlsaXR5IiwiZ2V0VmlzaWJsZSIsInNldFZpc2libGUiLCJzZXRDb250ZXh0TWVudUFjdGl2ZSIsImFjdGl2ZSIsImlzQ29udGV4dE1lbnVBY3RpdmUiLCJzZXRDb2xsYWJvcmF0aW9uTWFuYWdlck1lbnVJdGVtVmlzaWJpbGl0eSIsImNvbnRleHRzIiwiY29sbGFib3JhdGlvbk1hbmFnZXJNZW51SXRlbSIsImZpbmQiLCJhcHBDb21wb25lbnQiLCJDb21tb25VdGlscyIsImdldEFwcENvbXBvbmVudCIsImNvbGxhYm9yYXRpdmVUb29sc1NlcnZpY2UiLCJnZXRDb2xsYWJvcmF0aXZlVG9vbHNTZXJ2aWNlIiwiY29sbGFib3JhdGlvbk9wdGlvbiIsImNvbGxhYm9yYXRpb25TZXJ2aWNlIiwiY21IZWxwZXJTZXJ2aWNlIiwiZ2V0T3B0aW9ucyIsInRhYmxlRGVmaW5pdGlvbiIsImdldFBhcmVudCIsImdldFRhYmxlRGVmaW5pdGlvbiIsIm5hdmlnYXRpb25UeXBlIiwiYW5ub3RhdGlvbiIsInJvdyIsIm5hdmlnYXRpb25JbmZvIiwidHlwZSIsInZpZXciLCJnZXRUYXJnZXRWaWV3IiwiY29sbGFib3JhdGl2ZURyYWZ0IiwiZ2V0Q29udHJvbGxlciIsIm1ldGFNb2RlbCIsImdldE1vZGVsIiwiZ2V0TWV0YU1vZGVsIiwiaXNEcmFmdCIsIk1vZGVsSGVscGVyIiwiaXNEcmFmdFN1cHBvcnRlZCIsImdldFBhdGgiLCJ2aXNpYmxlIiwiaXNDb2xsYWJvcmF0aW9uRW5hYmxlZCIsImNvbnRleHQiLCJnZXRPYmplY3QiLCJJc0FjdGl2ZUVudGl0eSIsIkhhc0FjdGl2ZUVudGl0eSIsIkZFU1JIZWxwZXIiLCJzZXRTZW1hbnRpY1N0ZXBuYW1lIiwiX29uQ29udGV4dE1lbnVQcmVzcyIsIm9FdmVudCIsImdldFNvdXJjZSIsInRhYmxlQ29udGV4dHMiLCJnZXRTZWxlY3RlZENvbnRleHRzIiwiY29udGV4dE1lbnVDb250ZXh0IiwiZ2V0UGFyYW1ldGVyIiwiaW50ZXJuYWxNb2RlbENvbnRleHQiLCJnZXRCaW5kaW5nQ29udGV4dCIsImNvbnRleHRNZW51U2VsZWN0aW9uIiwiZ2V0UmVsZXZhbnRTZWxlY3Rpb24iLCJvbmVDb250ZXh0SXNBY3RpdmUiLCJpc0luYWN0aXZlIiwic2V0UHJvcGVydHkiLCJhY3RpdmVTZWxlY3RlZENvbnRleHRzIiwib0NvbnRleHQiLCJ2aXNpYmxlTWVudUl0ZW1zIiwicHJldmVudERlZmF1bHQiLCJpc0V4cGFuZGFibGUiLCJzaW5nbGVDb250ZXh0IiwiaXNFeHBhbmRlZCIsImlzQ29sbGFwc2FibGUiLCJkZWxldGVIZWxwZXIiLCJ1cGRhdGVEZWxldGVJbmZvRm9yU2VsZWN0ZWRDb250ZXh0cyIsIm5hdmlnYXRpb25BdmFpbGFibGVNYXAiLCJUYWJsZVJ1bnRpbWUiLCJzZXRJbnRlbnRCYXNlZE5hdmlnYXRpb25FbmFibGVtZW50IiwidXBkYXRhYmxlUHJvcGVydHlQYXRoIiwiZHJhZnQiLCJyZWFkT25seURyYWZ0RW5hYmxlZCIsInVwZGF0YWJsZUNvbnRleHRzIiwic2VsZWN0ZWRDb250ZXh0IiwiaXNVcGRhdGFibGVDb250ZXh0IiwiY29udHJvbCIsImNyZWF0ZUVuYWJsZW1lbnQiLCJfdXBkYXRlQ3JlYXRlRW5hYmxlbWVudCIsIm5vZGVUeXBlIiwidXBkYXRlQ3V0Q29weVBhc3RlRW5hYmxlbWVudCIsInVwZGF0ZU1vdmVVcERvd25FbmFibGVtZW50IiwiQWN0aW9uUnVudGltZSIsInNldEFjdGlvbkVuYWJsZW1lbnQiLCJKU09OIiwicGFyc2UiLCJvcGVyYXRpb25BdmFpbGFibGVNYXAiXSwic291cmNlUm9vdCI6Ii4iLCJzb3VyY2VzIjpbIkNvbnRleHRNZW51SGFuZGxlci50cyJdLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyB0eXBlIElJbnRlcmZhY2VXaXRoTWl4aW4gfSBmcm9tIFwic2FwL2ZlL2Jhc2UvQ2xhc3NTdXBwb3J0XCI7XG5pbXBvcnQgQWN0aW9uUnVudGltZSBmcm9tIFwic2FwL2ZlL2NvcmUvQWN0aW9uUnVudGltZVwiO1xuaW1wb3J0IENvbW1vblV0aWxzIGZyb20gXCJzYXAvZmUvY29yZS9Db21tb25VdGlsc1wiO1xuaW1wb3J0IGRlbGV0ZUhlbHBlciBmcm9tIFwic2FwL2ZlL2NvcmUvaGVscGVycy9EZWxldGVIZWxwZXJcIjtcbmltcG9ydCB0eXBlIHsgSW50ZXJuYWxNb2RlbENvbnRleHQgfSBmcm9tIFwic2FwL2ZlL2NvcmUvaGVscGVycy9Nb2RlbEhlbHBlclwiO1xuaW1wb3J0IE1vZGVsSGVscGVyIGZyb20gXCJzYXAvZmUvY29yZS9oZWxwZXJzL01vZGVsSGVscGVyXCI7XG5pbXBvcnQgeyBnZW5lcmF0ZSB9IGZyb20gXCJzYXAvZmUvY29yZS9oZWxwZXJzL1N0YWJsZUlkSGVscGVyXCI7XG5pbXBvcnQgdHlwZSBCdXR0b24gZnJvbSBcInNhcC9tL0J1dHRvblwiO1xuaW1wb3J0IHR5cGUgTWVudSBmcm9tIFwic2FwL20vTWVudVwiO1xuaW1wb3J0IHR5cGUgTWVudUJ1dHRvbiBmcm9tIFwic2FwL20vTWVudUJ1dHRvblwiO1xuaW1wb3J0IE1lbnVJdGVtIGZyb20gXCJzYXAvbS9NZW51SXRlbVwiO1xuaW1wb3J0IE1hbmFnZWRPYmplY3RNb2RlbCBmcm9tIFwic2FwL3VpL2ZsL3V0aWwvTWFuYWdlZE9iamVjdE1vZGVsXCI7XG5pbXBvcnQgdHlwZSBNRENUYWJsZSBmcm9tIFwic2FwL3VpL21kYy9UYWJsZVwiO1xuaW1wb3J0IHR5cGUgeyBUYWJsZSRCZWZvcmVPcGVuQ29udGV4dE1lbnVFdmVudCB9IGZyb20gXCJzYXAvdWkvbWRjL1RhYmxlXCI7XG5pbXBvcnQgdHlwZSBBY3Rpb25Ub29sYmFyQWN0aW9uIGZyb20gXCJzYXAvdWkvbWRjL2FjdGlvbnRvb2xiYXIvQWN0aW9uVG9vbGJhckFjdGlvblwiO1xuaW1wb3J0IHR5cGUgQ29udGV4dCBmcm9tIFwic2FwL3VpL21vZGVsL29kYXRhL3Y0L0NvbnRleHRcIjtcbmltcG9ydCBGRVNSSGVscGVyIGZyb20gXCJzYXAvdWkvcGVyZm9ybWFuY2UvdHJhY2UvRkVTUkhlbHBlclwiO1xuaW1wb3J0IHR5cGUgeyBJVGFibGVCbG9jayB9IGZyb20gXCIuLi9UYWJsZUFQSVwiO1xuaW1wb3J0IFRhYmxlUnVudGltZSBmcm9tIFwiLi4vVGFibGVSdW50aW1lXCI7XG5cbmV4cG9ydCBkZWZhdWx0IGNsYXNzIENvbnRleHRNZW51SGFuZGxlciBpbXBsZW1lbnRzIElJbnRlcmZhY2VXaXRoTWl4aW4ge1xuXHRwcm90ZWN0ZWQgY29udGV4dE1lbnVBY3RpdmUgPSBmYWxzZTtcblxuXHRzZXR1cE1peGluKF9iYXNlQ2xhc3M6IEZ1bmN0aW9uKTogdm9pZCB7XG5cdFx0Ly8gVGhpcyBtZXRob2QgaXMgbmVlZGVkIHRvIGltcGxlbWVudCBpbnRlcmZhY2UgSUludGVyZmFjZVdpdGhNaXhpblxuXHR9XG5cblx0LyoqXG5cdCAqIEFsaWduIGNvbnRleHQgbWVudSB3aXRoIHRoZSB0YWJsZSBhY3Rpb25zIGJ5IFJUQSBjaGFuZ2VzIGluIHRhYmxlIHRvb2xiYXIuXG5cdCAqIEBwYXJhbSB0YWJsZSBUaGUgdGFibGUgd2l0aCBib3VuZCB0YWJsZSBhY3Rpb25zXG5cdCAqL1xuXHRhbGlnbkNvbnRleHRNZW51V2l0aFRhYmxlVG9vbGJhckNoYW5nZXModGFibGU6IE1EQ1RhYmxlKTogdm9pZCB7XG5cdFx0Y29uc3QgY29udGV4dE1lbnUgPSB0YWJsZS5nZXRDb250ZXh0TWVudSgpIGFzIE1lbnU7XG5cdFx0Y29uc3Qgc29ydEhlbHBlckZvck1lbnVJdGVtczogTWVudUl0ZW1bXSA9IFtdO1xuXHRcdGNvbnN0IHRhYmxlQWN0aW9ucyA9IHRhYmxlLmdldEFjdGlvbnMoKTtcblx0XHR0YWJsZUFjdGlvbnM/LmZvckVhY2goKHRhYmxlQWN0aW9uKSA9PiB7XG5cdFx0XHRjb25zdCB0YWJsZUFjdGlvbkl0ZW0gPSB0YWJsZUFjdGlvbi5nZXRBZ2dyZWdhdGlvbihcImFjdGlvblwiKSBhcyBCdXR0b247XG5cdFx0XHQvLyBDaGVjayBpZiB0aGUgYWN0aW9uIGl0ZW0gaGFzIGJlZW4gc3BsaXQgYnkgUlRBXG5cdFx0XHRpZiAodGhpcy5faXNBY3Rpb25TcGxpdCh0YWJsZUFjdGlvbkl0ZW0pKSB7XG5cdFx0XHRcdC8vIFJlbW92ZSBvcmlnaW5hbCBtZW51IGl0ZW0gYW5kIGFkZCBzdWIgaXRlbXMgYXMgbmV3IG1lbnUgaXRlbXNcblx0XHRcdFx0dGhpcy5fc3BsaXRBY3Rpb25zSW5Db250ZXh0TWVudSh0YWJsZUFjdGlvbkl0ZW0sIGNvbnRleHRNZW51KTtcblx0XHRcdH1cblx0XHRcdC8vIENoZWNrIGlmIHRoZSBhY3Rpb24gaXRlbSBoYXMgYmVlbiBjcmVhdGVkIGJ5IGNvbWJpbmluZyB0aGUgdHdvIGFjdGlvbnNcblx0XHRcdGlmICh0aGlzLl9pc0FjdGlvbkNvbWJpbmVkKHRhYmxlQWN0aW9uSXRlbSkpIHtcblx0XHRcdFx0dGhpcy5fY29tYmluZUFjdGlvbkluQ29udGV4dE1lbnUodGFibGVBY3Rpb25JdGVtIGFzIHVua25vd24gYXMgTWVudUJ1dHRvbiwgY29udGV4dE1lbnUsIHRhYmxlKTtcblx0XHRcdH1cblx0XHRcdGNvbnN0IGNvbnRleHRNZW51SXRlbSA9IHRoaXMuX2dldENvcnJlc3BvbmRpbmdDb250ZXh0TWVudUFjdGlvbih0YWJsZUFjdGlvbkl0ZW0sIGNvbnRleHRNZW51KTtcblx0XHRcdGlmIChjb250ZXh0TWVudUl0ZW0pIHtcblx0XHRcdFx0dGhpcy5fYWxpZ25UZXh0QW5kVmlzaWJsaXR5SW5Db250ZXh0TWVudSh0YWJsZUFjdGlvbkl0ZW0sIGNvbnRleHRNZW51SXRlbSwgdGFibGVBY3Rpb24gYXMgQWN0aW9uVG9vbGJhckFjdGlvbik7XG5cdFx0XHRcdHNvcnRIZWxwZXJGb3JNZW51SXRlbXMucHVzaChjb250ZXh0TWVudUl0ZW0pO1xuXHRcdFx0fVxuXHRcdH0pO1xuXHRcdC8vIEFsaWduIHRoZSBvcmRlciBvZiBjb250ZXh0LW1lbnVJdGVtcyB3aXRoIGJvdW5kIHRhYmxlIGFjdGlvbnNcblx0XHRpZiAoc29ydEhlbHBlckZvck1lbnVJdGVtcy5sZW5ndGgpIHtcblx0XHRcdHNvcnRIZWxwZXJGb3JNZW51SXRlbXMuZm9yRWFjaCgobWVudUl0ZW0sIHNvcnRJbmRleCkgPT4ge1xuXHRcdFx0XHRjb25zdCBpbmRleE9mQ29udGV4dE1lbnUgPSBjb250ZXh0TWVudS5pbmRleE9mSXRlbShtZW51SXRlbSk7XG5cdFx0XHRcdGlmIChpbmRleE9mQ29udGV4dE1lbnUgIT09IHNvcnRJbmRleCkge1xuXHRcdFx0XHRcdGNvbnRleHRNZW51LnJlbW92ZUl0ZW0obWVudUl0ZW0pO1xuXHRcdFx0XHRcdGNvbnRleHRNZW51Lmluc2VydEl0ZW0obWVudUl0ZW0sIHNvcnRJbmRleCk7XG5cdFx0XHRcdH1cblx0XHRcdH0pO1xuXHRcdH1cblx0fVxuXG5cdC8qKlxuXHQgKiBDaGVjayBpZiB0aGUgYWN0aW9uIGl0ZW0gaGFzIGJlZW4gY3JlYXRlZCBieSBhIENvbWJpbmUgUlRBIGNoYW5nZXMgaW4gdGhlIHRhYmxlIHRvb2xiYXIuXG5cdCAqIEBwYXJhbSBhY3Rpb25JdGVtIFRoZSBhY3Rpb24gdG8gY2hlY2tcblx0ICogQHJldHVybnMgVHJ1ZSBpZiB0aGUgYWN0aW9uIGl0ZW0gaGFzIGJlZW4gY3JlYXRlZCBieSBhIENvbWJpbmUgUlRBIGNoYW5nZXMgaW4gdGhlIHRhYmxlIHRvb2xiYXJcblx0ICovXG5cdF9pc0FjdGlvbkNvbWJpbmVkKGFjdGlvbkl0ZW06IEJ1dHRvbik6IGJvb2xlYW4ge1xuXHRcdGlmIChhY3Rpb25JdGVtLmdldE1ldGFkYXRhKCkuZ2V0TmFtZSgpID09PSBcInNhcC5tLk1lbnVCdXR0b25cIikge1xuXHRcdFx0Ly8gV2UgZG9uJ3QgaGF2ZSBjdXN0b20gZGF0YSBhdHRyaWJ1dGUgb24gdGhlIE1lbnVCdXR0b24gY3JlYXRlZCBieSBSVEEgY29tYmluZSBjaGFuZ2Vcblx0XHRcdGNvbnN0IGRlcGVuZGVudHMgPSBhY3Rpb25JdGVtLmdldERlcGVuZGVudHMoKTtcblx0XHRcdC8vIGZpbmQgYWxsIHRoZSBkZXBlbmRlbnRzIHdoaWNoIGFyZSBhIEZsZXggTWFuYWdlZE9iamVjdE1vZGVsXG5cdFx0XHRjb25zdCBmbGV4TWFuYWdlZE9iamVjdE1vZGVscyA9IGRlcGVuZGVudHMuZmlsdGVyKChkZXBlbmRlbnQpID0+IGRlcGVuZGVudCBpbnN0YW5jZW9mIE1hbmFnZWRPYmplY3RNb2RlbCk7XG5cdFx0XHQvLyBjaGVjayBpZiB0aGUgbmFtZSBvZiBvbmUgb2YgdGhlbSBpbmNsdWRlcyBcIiRzYXAubS5mbGV4aWJpbGl0eS5NZW51QnV0dG9uTW9kZWxcIlxuXHRcdFx0cmV0dXJuIGZsZXhNYW5hZ2VkT2JqZWN0TW9kZWxzLnNvbWUoKG1vZGVsKSA9PlxuXHRcdFx0XHQobW9kZWwgYXMgdW5rbm93biBhcyBNYW5hZ2VkT2JqZWN0TW9kZWwpLmdldE5hbWUoKS5pbmNsdWRlcyhcIiRzYXAubS5mbGV4aWJpbGl0eS5NZW51QnV0dG9uTW9kZWxcIilcblx0XHRcdCk7XG5cdFx0fVxuXHRcdHJldHVybiBmYWxzZTtcblx0fVxuXG5cdC8qKlxuXHQgKiBDb21iaW5lIHRoZSBhY3Rpb25zIGluIHRoZSBjb250ZXh0IG1lbnUgdG8gYWxpZ24gd2l0aCB0aGUgdGFibGUgYWN0aW9uIHRvb2xiYXIuXG5cdCAqIEBwYXJhbSBhY3Rpb25JdGVtIFRoZSBhY3Rpb24gaXRlbSB0byBzcGxpdFxuXHQgKiBAcGFyYW0gY29udGV4dE1lbnUgVGhlIGNvbnRleHQgbWVudVxuXHQgKiBAcGFyYW0gdGFibGUgVGhlIE1EQ1RhYmxlXG5cdCAqL1xuXHRfY29tYmluZUFjdGlvbkluQ29udGV4dE1lbnUoYWN0aW9uSXRlbTogTWVudUJ1dHRvbiwgY29udGV4dE1lbnU6IE1lbnUsIHRhYmxlOiBNRENUYWJsZSk6IHZvaWQge1xuXHRcdGNvbnN0IGNvbnRleHRNZW51SXRlbXMgPSBjb250ZXh0TWVudS5nZXRJdGVtcygpO1xuXHRcdC8vIENyZWF0ZSBhIG5ldyBtZW51IGJ1dHRvbiBpbiB0aGUgY29udGV4dCBtZW51IGlmIGl0IGRvZXMgbm90IGV4aXN0XG5cdFx0Y29uc3QgbWVudUJ1dHRvbiA9IHRoaXMuX2ZpbmRPckNyZWF0ZU1lbnVCdXR0b25JbkNvbnRleHRNZW51KGFjdGlvbkl0ZW0sIHRhYmxlKTtcblx0XHRjb25zdCBhY3Rpb25JdGVtcyA9IGFjdGlvbkl0ZW0uZ2V0TWVudSgpLmdldEl0ZW1zKCk7XG5cdFx0Zm9yIChjb25zdCBhY3Rpb24gb2YgYWN0aW9uSXRlbXMpIHtcblx0XHRcdGNvbnN0IHRvb2xCYXJBY3Rpb24gPSBhY3Rpb247XG5cdFx0XHQvLyBub3cgZmluZCB0aGUgYWN0aW9uIGluIHRoZSBjb250ZXh0IG1lbnUgYW5kIHJlbW92ZSBpdCBmcm9tIHRoZSBjb250ZXh0IG1lbnVcblx0XHRcdGZvciAoY29uc3QgbWVudUl0ZW0gb2YgY29udGV4dE1lbnVJdGVtcykge1xuXHRcdFx0XHRjb25zdCBhY3Rpb25JZEluQ29udGV4dE1lbnUgPSBtZW51SXRlbS5kYXRhKFwiYWN0aW9uSWRcIik7XG5cdFx0XHRcdGNvbnN0IGFjdGlvbklkSW5Ub29sYmFyID0gdG9vbEJhckFjdGlvbi5kYXRhKFwiYWN0aW9uSWRcIik7XG5cdFx0XHRcdGlmIChcblx0XHRcdFx0XHRhY3Rpb25JZEluQ29udGV4dE1lbnUgPT09IGFjdGlvbklkSW5Ub29sYmFyICsgXCI6OkNvbnRleHRNZW51XCIgfHxcblx0XHRcdFx0XHRhY3Rpb25JZEluQ29udGV4dE1lbnUgPT09IGFjdGlvbklkSW5Ub29sYmFyLnJlcGxhY2UoXCI6OkFjdGlvbk1lbnVcIiwgXCI6OkNvbnRleHRNZW51XCIpXG5cdFx0XHRcdCkge1xuXHRcdFx0XHRcdG1lbnVJdGVtLnNldFRleHQodG9vbEJhckFjdGlvbi5nZXRUZXh0KCkpO1xuXHRcdFx0XHRcdC8vIEFkZCB0aGUgYWN0aW9uIHRvIHRoZSBtZW51IGJ1dHRvblxuXHRcdFx0XHRcdGNvbnRleHRNZW51LnJlbW92ZUl0ZW0obWVudUl0ZW0pO1xuXHRcdFx0XHRcdG1lbnVCdXR0b24uYWRkSXRlbShtZW51SXRlbSk7XG5cdFx0XHRcdH1cblx0XHRcdFx0Ly8gSWYgd2UgZmluZCBhbm90aGVyIG1lbnUgaW4gdGhlIGNvbnRleHQgbWVudSB3ZSBjaGVjayBpZiB0aGUgYWN0aW9uIGlzIGluIHRoZSBzdWIgbWVudVxuXHRcdFx0XHRpZiAobWVudUl0ZW0uZ2V0SXRlbXMoKS5sZW5ndGggPiAwICYmICFtZW51SXRlbS5nZXRJZCgpLmluY2x1ZGVzKGFjdGlvbkl0ZW0uZ2V0SWQoKSkpIHtcblx0XHRcdFx0XHRjb25zdCBhY3Rpb25JblN1Yk1lbnUgPSB0aGlzLl9maW5kQWN0aW9uSW5TdWJNZW51KG1lbnVJdGVtLmdldEl0ZW1zKCksIHRvb2xCYXJBY3Rpb24pO1xuXHRcdFx0XHRcdGlmIChhY3Rpb25JblN1Yk1lbnUpIHtcblx0XHRcdFx0XHRcdGFjdGlvbkluU3ViTWVudS5zZXRUZXh0KHRvb2xCYXJBY3Rpb24uZ2V0VGV4dCgpKTtcblx0XHRcdFx0XHRcdG1lbnVCdXR0b24uYWRkSXRlbShhY3Rpb25JblN1Yk1lbnUpO1xuXHRcdFx0XHRcdFx0aWYgKG1lbnVJdGVtLmdldEl0ZW1zKCkubGVuZ3RoID09PSAwKSB7XG5cdFx0XHRcdFx0XHRcdG1lbnVJdGVtLmRlc3Ryb3koKTtcblx0XHRcdFx0XHRcdH1cblx0XHRcdFx0XHR9XG5cdFx0XHRcdH1cblx0XHRcdH1cblx0XHR9XG5cdH1cblxuXHQvKipcblx0ICogRmluZHMgdGhlIGFjdGlvbiBpbiBhbiBhY3Rpb24gbWVudSBpbiB0aGUgY29udGV4dCBtZW51LCBpdCByZXR1cm4gdGhlIGFjdGlvbiBpZiBmb3VuZCBhbmQgcmVtb3ZlcyBpdCBmcm9tIHRoZSBtZW51LlxuXHQgKiBAcGFyYW0gc3ViTWVudSBUaGUgYXJyYXkgb2YgYWN0aW9ucyBpbiB0aGUgbWVudVxuXHQgKiBAcGFyYW0gYWN0aW9uSXRlbSBUaGUgYWN0aW9uIHdlIGFyZSBzZWFyY2hpbmcgZm9yXG5cdCAqIEByZXR1cm5zIFRoZSBhY3Rpb24gaWYgZm91bmQsIG90aGVyd2lzZSB1bmRlZmluZWRcblx0ICovXG5cdF9maW5kQWN0aW9uSW5TdWJNZW51KHN1Yk1lbnU6IE1lbnVJdGVtW10sIGFjdGlvbkl0ZW06IE1lbnVJdGVtKTogTWVudUl0ZW0gfCB1bmRlZmluZWQge1xuXHRcdGZvciAoY29uc3QgbWVudUl0ZW0gb2Ygc3ViTWVudSkge1xuXHRcdFx0aWYgKFxuXHRcdFx0XHRtZW51SXRlbS5kYXRhKFwiYWN0aW9uSWRcIikgPT09IGFjdGlvbkl0ZW0uZGF0YShcImFjdGlvbklkXCIpLnJlcGxhY2UoXCI6OkFjdGlvbk1lbnVcIiwgXCI6OkNvbnRleHRNZW51XCIpIHx8XG5cdFx0XHRcdG1lbnVJdGVtLmRhdGEoXCJhY3Rpb25JZFwiKSA9PT0gYWN0aW9uSXRlbS5kYXRhKFwiYWN0aW9uSWRcIikgKyBcIjo6Q29udGV4dE1lbnVcIlxuXHRcdFx0KSB7XG5cdFx0XHRcdGNvbnN0IGFjdGlvbiA9IG1lbnVJdGVtO1xuXHRcdFx0XHRzdWJNZW51LnNwbGljZShzdWJNZW51LmluZGV4T2YobWVudUl0ZW0pLCAxKTtcblx0XHRcdFx0cmV0dXJuIGFjdGlvbjtcblx0XHRcdH1cblx0XHR9XG5cdFx0cmV0dXJuIHVuZGVmaW5lZDtcblx0fVxuXG5cdC8qKlxuXHQgKiBDaGVjaydzIGlmIGEgcGFydGljdWxhciBtZW51IGJ1dHRvbiBleGlzdHMgaW4gdGhlIGNvbnRleHQgbWVudSwgaWYgbm90IGNyZWF0ZXMgYSBuZXcgbWVudSBidXR0b24gYW5kIGFkZHMgaXQgdG8gdGhlIGNvbnRleHQgbWVudS5cblx0ICogQHBhcmFtIGFjdGlvbkl0ZW0gVGhlIG1lbnUgYnV0dG9uIHRvIGZpbmQgb3IgY3JlYXRlXG5cdCAqIEBwYXJhbSB0YWJsZSBUaGUgTURDVGFibGVcblx0ICogQHJldHVybnMgVGhlIE1lbnVJdGVtIGlmIGZvdW5kLCBvdGhlcndpc2UgYSBuZXcgTWVudUl0ZW1cblx0ICovXG5cdF9maW5kT3JDcmVhdGVNZW51QnV0dG9uSW5Db250ZXh0TWVudShhY3Rpb25JdGVtOiBNZW51QnV0dG9uLCB0YWJsZTogTURDVGFibGUpOiBNZW51SXRlbSB7XG5cdFx0Y29uc3QgY29udGV4dE1lbnUgPSB0YWJsZS5nZXRDb250ZXh0TWVudSgpIGFzIE1lbnU7XG5cdFx0Y29uc3QgY29udGV4dE1lbnVJdGVtcyA9IGNvbnRleHRNZW51LmdldEl0ZW1zKCk7XG5cdFx0Ly9sb29wIG92ZXIgY29udGV4dE1lbnVJdGVtcyBhbmQgY2hlY2sgaWYgdGhlIHJlcXVpcmVkIG1lbnUgYnV0dG9uIGFscmVhZHkgZXhpc3RzXG5cdFx0Zm9yIChjb25zdCBtZW51SXRlbSBvZiBjb250ZXh0TWVudUl0ZW1zKSB7XG5cdFx0XHRpZiAobWVudUl0ZW0uZ2V0SWQoKS5pbmNsdWRlcyhhY3Rpb25JdGVtLmdldElkKCkpKSB7XG5cdFx0XHRcdHJldHVybiBtZW51SXRlbTtcblx0XHRcdH1cblx0XHR9XG5cdFx0Ly8gaWYgdGhlIHJlcXVpcmVkIG1lbnUgYnV0dG9uIGRvZXMgbm90IGV4aXN0LCBjcmVhdGUgYSBuZXcgbWVudSBidXR0b24gYW5kIGFkZCBpdCB0byB0aGUgY29udGV4dE1lbnVcblx0XHRjb25zdCBuZXdNZW51QnV0dG9uID0gbmV3IE1lbnVJdGVtKHtcblx0XHRcdGlkOiBnZW5lcmF0ZShbdGFibGUuZ2V0SWQoKSwgYWN0aW9uSXRlbS5nZXRJZCgpLCBcIjo6Q29udGV4dE1lbnVcIl0pLFxuXHRcdFx0dGV4dDogYWN0aW9uSXRlbS5nZXRUZXh0KClcblx0XHR9KTtcblx0XHRjb250ZXh0TWVudS5hZGRJdGVtKG5ld01lbnVCdXR0b24pO1xuXHRcdHJldHVybiBuZXdNZW51QnV0dG9uO1xuXHR9XG5cblx0LyoqXG5cdCAqIFNwbGl0IHRoZSBhY3Rpb24gaXRlbXMgaW4gdGhlIGNvbnRleHQgbWVudS5cblx0ICogQHBhcmFtIGFjdGlvbkl0ZW0gVGhlIGFjdGlvbiBpdGVtIHRvIHNwbGl0XG5cdCAqIEBwYXJhbSBjb250ZXh0TWVudSBUaGUgY29udGV4dCBtZW51XG5cdCAqL1xuXHRfc3BsaXRBY3Rpb25zSW5Db250ZXh0TWVudShhY3Rpb25JdGVtOiBCdXR0b24sIGNvbnRleHRNZW51OiBNZW51KTogdm9pZCB7XG5cdFx0Y29uc3QgbWVudUl0ZW1zID0gY29udGV4dE1lbnUuZ2V0SXRlbXMoKTtcblx0XHRmb3IgKGxldCBpID0gMDsgaSA8IG1lbnVJdGVtcy5sZW5ndGg7IGkrKykge1xuXHRcdFx0Ly9jaGVjayBpZiB0aGUgbWVudSBpdGVtIGlzIGEgTWVudVxuXHRcdFx0aWYgKG1lbnVJdGVtc1tpXS5nZXRJdGVtcygpLmxlbmd0aCA+IDApIHtcblx0XHRcdFx0aWYgKFxuXHRcdFx0XHRcdG1lbnVJdGVtc1tpXVxuXHRcdFx0XHRcdFx0LmdldEl0ZW1zKClcblx0XHRcdFx0XHRcdC5zb21lKChpdGVtKSA9PiBpdGVtLmRhdGEoXCJhY3Rpb25JZFwiKSA9PT0gYWN0aW9uSXRlbS5kYXRhKFwiYWN0aW9uSWRcIikucmVwbGFjZShcIjo6QWN0aW9uTWVudVwiLCBcIjo6Q29udGV4dE1lbnVcIikpXG5cdFx0XHRcdCkge1xuXHRcdFx0XHRcdGNvbnN0IG1lbnVJdGVtID0gbWVudUl0ZW1zW2ldO1xuXHRcdFx0XHRcdGNvbnN0IHN1Ykl0ZW1zID0gbWVudUl0ZW0uZ2V0SXRlbXMoKTtcblx0XHRcdFx0XHQvLyBSZW1vdmUgdGhlIG1lbnVJdGVtIGZyb20gdGhlIGNvbnRleHQgbWVudVxuXHRcdFx0XHRcdGNvbnRleHRNZW51LnJlbW92ZUl0ZW0obWVudUl0ZW0pO1xuXHRcdFx0XHRcdC8vIEluc2VydCB0aGVzZSBzdWItaXRlbXMgaW50byB0aGUgY29udGV4dE1lbnUgc3RhcnRpbmcgZnJvbSB0aGUgb3JpZ2luYWwgaW5kZXhcblx0XHRcdFx0XHRzdWJJdGVtcy5mb3JFYWNoKChzdWJJdGVtLCBpbmRleCkgPT4ge1xuXHRcdFx0XHRcdFx0Y29udGV4dE1lbnUuaW5zZXJ0SXRlbShzdWJJdGVtLCBpICsgaW5kZXgpO1xuXHRcdFx0XHRcdH0pO1xuXHRcdFx0XHR9XG5cdFx0XHR9XG5cdFx0fVxuXHR9XG5cblx0LyoqXG5cdCAqIEdldHMgdGhlIGNvcnJlc3BvbmRpbmcgY29udGV4dCBtZW51IGFjdGlvbiBmb3IgdGhlIHRhYmxlIGFjdGlvbi5cblx0ICogQHBhcmFtIHRhYmxlQWN0aW9uIFRoZSBhY3Rpb24gaXRlbSB0byBzcGxpdFxuXHQgKiBAcGFyYW0gY29udGV4dE1lbnUgVGhlIGNvbnRleHQgbWVudVxuXHQgKiBAcmV0dXJucyAgTWVudUl0ZW18bnVsbCB0aGUgY29ycmVzcG9uZGluZyBjb250ZXh0IG1lbnUgYWN0aW9uIG9yIG51bGwgaWYgbm90IGZvdW5kXG5cdCAqL1xuXHRfZ2V0Q29ycmVzcG9uZGluZ0NvbnRleHRNZW51QWN0aW9uKHRhYmxlQWN0aW9uOiBCdXR0b24sIGNvbnRleHRNZW51OiBNZW51KTogTWVudUl0ZW0gfCBudWxsIHtcblx0XHRjb25zdCBtZW51SXRlbXMgPSBjb250ZXh0TWVudS5nZXRJdGVtcygpO1xuXHRcdGZvciAoY29uc3QgaXRlbSBvZiBtZW51SXRlbXMpIHtcblx0XHRcdC8vIHRoZSBjb3JyZXNwb25kaW5nIGNvbnRleHQgbWVudSBhY3Rpb24gaXMgZWl0aGVyIGFuIGl0ZW0gd2l0aCBhbiBhZGRpdGlvbmFsIFwiOjpDb250ZXh0TWVudVwiIHRleHQgYXQgdGhlIGVuZCBvZiB0aGUgaWRcblx0XHRcdC8vIG9yIGl0IGlzIGEgc3BsaXR0ZWQgbWVudSBpdGVtIHdoZXJlIHRoZSBcIjo6Q29udGV4dE1lbnVcIiBwYXJ0IGlzIGluIHRoZSBtaWRkbGUgb2YgdGhlIGlkXG5cdFx0XHRpZiAoXG5cdFx0XHRcdHRhYmxlQWN0aW9uLmdldElkKCkgKyBcIjo6Q29udGV4dE1lbnVcIiA9PT0gaXRlbS5nZXRJZCgpIHx8XG5cdFx0XHRcdGl0ZW0uZGF0YShcImFjdGlvbklkXCIpID09PSB0YWJsZUFjdGlvbi5kYXRhKFwiYWN0aW9uSWRcIik/LnJlcGxhY2UoXCI6OkFjdGlvbk1lbnVcIiwgXCI6OkNvbnRleHRNZW51XCIpXG5cdFx0XHQpIHtcblx0XHRcdFx0cmV0dXJuIGl0ZW07XG5cdFx0XHR9XG5cdFx0XHQvLyBmb3IgY29tYmluZWQgYWN0aW9ucywgdGhlIGNvbnRleHQgbWVudSBhY3Rpb24gaXMgdGhlIG9uZSB3aXRoIHRoZSBzYW1lIHRleHRcblx0XHRcdGlmIChpdGVtLmdldElkKCkuaW5jbHVkZXModGFibGVBY3Rpb24uZ2V0SWQoKSkpIHtcblx0XHRcdFx0cmV0dXJuIGl0ZW07XG5cdFx0XHR9XG5cdFx0fVxuXHRcdHJldHVybiBudWxsO1xuXHR9XG5cblx0LyoqXG5cdCAqIEFkanVzdCB0aGUgdGV4dCBhbmQgdmlzaWJpbGl0eSBvZiB0aGUgYWN0aW9uIGl0ZW1zIGluIHRoZSBjb250ZXh0IG1lbnUuXG5cdCAqIEBwYXJhbSBhY3Rpb25JdGVtIFRoZSBhY3Rpb24gaXRlbSB0byBzcGxpdFxuXHQgKiBAcGFyYW0gY29udGV4dE1lbnVJdGVtIFRoZSBjb250ZXh0IG1lbnVcblx0ICogQHBhcmFtIHRhYmxlQWN0aW9uIFRoZSBhcnJheSBvZiB0YWJsZSBhY3Rpb25zXG5cdCAqL1xuXHRfYWxpZ25UZXh0QW5kVmlzaWJsaXR5SW5Db250ZXh0TWVudShhY3Rpb25JdGVtOiBCdXR0b24sIGNvbnRleHRNZW51SXRlbTogTWVudUl0ZW0sIHRhYmxlQWN0aW9uOiBBY3Rpb25Ub29sYmFyQWN0aW9uKTogdm9pZCB7XG5cdFx0Ly8gY2hhbmdlIHRoZSB0ZXh0IG9mIHRoZSBtZW51IGl0ZW0gYXMgdGhlIHRleHQgb2YgYWN0aW9uIGl0ZW1cblx0XHRjb250ZXh0TWVudUl0ZW0uc2V0VGV4dChhY3Rpb25JdGVtLmdldFRleHQoKSk7XG5cdFx0Ly8gY2hhbmdlIHRoZSB2aXNpYmlsaXR5IG9mIHRoZSBjb250ZXh0TWVudSBhY3Rpb24gYXMgdGhlIHZpc2liaWxpdHkgb2YgdGFibGUgYWN0aW9uXG5cdFx0Y29uc3QgdGFibGVBY3Rpb25WaXNpYmlsaXR5ID0gYWN0aW9uSXRlbS5nZXRWaXNpYmxlKCkgJiYgdGFibGVBY3Rpb24uZ2V0VmlzaWJsZSgpO1xuXHRcdGlmICh0YWJsZUFjdGlvblZpc2liaWxpdHkgIT09IGNvbnRleHRNZW51SXRlbS5nZXRWaXNpYmxlKCkpIHtcblx0XHRcdGNvbnRleHRNZW51SXRlbS5zZXRWaXNpYmxlKHRhYmxlQWN0aW9uVmlzaWJpbGl0eSk7XG5cdFx0fVxuXHR9XG5cblx0LyoqXG5cdCAqIENoZWNrIGlmIGFuIGFjdGlvbiBoYXMgYmVlbiBzcGxpdCBieSBSVEEuXG5cdCAqIEBwYXJhbSBhY3Rpb25JdGVtIFRoZSBvcmlnaW5hbCBhY3Rpb24gaXRlbVxuXHQgKiBAcmV0dXJucyBCb29sZWFuIGluZGljYXRpbmcgaWYgdGhlIGFjdGlvbiBoYXMgYmVlbiBzcGxpdFxuXHQgKi9cblx0X2lzQWN0aW9uU3BsaXQoYWN0aW9uSXRlbTogQnV0dG9uKTogYm9vbGVhbiB7XG5cdFx0aWYgKGFjdGlvbkl0ZW0uZ2V0TWV0YWRhdGEoKS5nZXROYW1lKCkgPT09IFwic2FwLm0uTWVudUJ1dHRvblwiKSB7XG5cdFx0XHRyZXR1cm4gZmFsc2U7XG5cdFx0fVxuXHRcdGNvbnN0IGRlcGVuZGVudHMgPSBhY3Rpb25JdGVtLmdldERlcGVuZGVudHMoKTtcblx0XHQvLyBmaW5kIGFsbCB0aGUgZGVwZW5kZW50cyB3aGljaCBhcmUgYSBGbGV4IE1hbmFnZWRPYmplY3RNb2RlbFxuXHRcdGNvbnN0IGZsZXhNYW5hZ2VkT2JqZWN0TW9kZWxzID0gZGVwZW5kZW50cy5maWx0ZXIoKGRlcGVuZGVudCkgPT4gZGVwZW5kZW50IGluc3RhbmNlb2YgTWFuYWdlZE9iamVjdE1vZGVsKTtcblx0XHQvLyBjaGVjayBpZiBvbmUgb2YgdGhlbSBoYXMgdGhlIG5hbWUgXCIkc2FwLm0uZmxleGliaWxpdHkuU3BsaXRCdXR0b25zTW9kZWxcIlxuXHRcdHJldHVybiBmbGV4TWFuYWdlZE9iamVjdE1vZGVscy5zb21lKFxuXHRcdFx0KG1vZGVsKSA9PiAobW9kZWwgYXMgdW5rbm93biBhcyBNYW5hZ2VkT2JqZWN0TW9kZWwpLmdldE5hbWUoKSA9PT0gXCIkc2FwLm0uZmxleGliaWxpdHkuU3BsaXRCdXR0b25zTW9kZWxcIlxuXHRcdCk7XG5cdH1cblxuXHQvKipcblx0ICogU2V0cyBhIGZsYWcgdG8gaW5kaWNhdGUgdGhhdCBhIGNvbnRleHQgbWVudSBpdGVtIGhhcyBiZWVuIHByZXNzZWQuXG5cdCAqIEBwYXJhbSBhY3RpdmVcblx0ICovXG5cdHNldENvbnRleHRNZW51QWN0aXZlKGFjdGl2ZTogYm9vbGVhbik6IHZvaWQge1xuXHRcdHRoaXMuY29udGV4dE1lbnVBY3RpdmUgPSBhY3RpdmU7XG5cdH1cblxuXHRpc0NvbnRleHRNZW51QWN0aXZlKCk6IGJvb2xlYW4ge1xuXHRcdHJldHVybiB0aGlzLmNvbnRleHRNZW51QWN0aXZlO1xuXHR9XG5cblx0LyoqXG5cdCAqIE1ha2UgdGhlIG1lbnUgaXRlbSBvZiBTQVAgQ29sbGFib3JhdGlvbiBNYW5hZ2VyIHZpc2libGUgaWYgaXQgaXMgc3VwcG9ydGVkLlxuXHQgKiBAcGFyYW0gdGFibGVcblx0ICogQHBhcmFtIGNvbnRleHRzXG5cdCAqL1xuXHRzZXRDb2xsYWJvcmF0aW9uTWFuYWdlck1lbnVJdGVtVmlzaWJpbGl0eSh0YWJsZTogTURDVGFibGUsIGNvbnRleHRzOiBDb250ZXh0W10pOiB2b2lkIHtcblx0XHQvLyBnZXQgY29sbGFib3JhdGlvbiBtZW51IGl0ZW0gZnJvbSBjb250ZXh0IG1lbnVcblx0XHRjb25zdCBjb250ZXh0TWVudSA9IHRhYmxlLmdldENvbnRleHRNZW51KCkgYXMgTWVudTtcblx0XHRjb25zdCBtZW51SXRlbXMgPSBjb250ZXh0TWVudS5nZXRJdGVtcygpO1xuXHRcdGNvbnN0IGNvbGxhYm9yYXRpb25NYW5hZ2VyTWVudUl0ZW0gPSBtZW51SXRlbXM/LmZpbmQoKG1lbnVJdGVtKSA9PiBtZW51SXRlbS5nZXRJZCgpLmluY2x1ZGVzKFwiQ29udGV4dE1lbnU6OkNvbGxhYm9yYXRpb25NYW5hZ2VyXCIpKTtcblx0XHRpZiAoY29sbGFib3JhdGlvbk1hbmFnZXJNZW51SXRlbSkge1xuXHRcdFx0Ly8gZ2V0IGNvbGxhYm9yYXRpb24gb3B0aW9uIGZyb20gY29sbGFib3JhdGl2ZSB0b29scyBzZXJ2aWNlXG5cdFx0XHRjb25zdCBhcHBDb21wb25lbnQgPSBDb21tb25VdGlscy5nZXRBcHBDb21wb25lbnQodGFibGUpO1xuXHRcdFx0Y29uc3QgY29sbGFib3JhdGl2ZVRvb2xzU2VydmljZSA9IGFwcENvbXBvbmVudD8uZ2V0Q29sbGFib3JhdGl2ZVRvb2xzU2VydmljZSgpO1xuXHRcdFx0Y29uc3QgY29sbGFib3JhdGlvbk9wdGlvbiA9IGNvbGxhYm9yYXRpdmVUb29sc1NlcnZpY2U/LmNvbGxhYm9yYXRpb25TZXJ2aWNlLmNtSGVscGVyU2VydmljZT8uZ2V0T3B0aW9ucygpO1xuXHRcdFx0Ly8gZ2V0IG5hdmlnYXRpb24gaW5mbyBmcm9tIHRhYmxlIGRlZmluaXRpb25cblx0XHRcdGNvbnN0IHRhYmxlRGVmaW5pdGlvbiA9ICh0YWJsZT8uZ2V0UGFyZW50KCkgYXMgSVRhYmxlQmxvY2spPy5nZXRUYWJsZURlZmluaXRpb24oKTtcblx0XHRcdGNvbnN0IG5hdmlnYXRpb25UeXBlID0gdGFibGVEZWZpbml0aW9uPy5hbm5vdGF0aW9uPy5yb3c/Lm5hdmlnYXRpb25JbmZvPy50eXBlO1xuXHRcdFx0aWYgKGNvbGxhYm9yYXRpb25PcHRpb24gJiYgbmF2aWdhdGlvblR5cGUgPT09IFwiTmF2aWdhdGlvblwiICYmIGNvbnRleHRzLmxlbmd0aCA+IDApIHtcblx0XHRcdFx0Ly8gSXRlbXMgdG8gc2hhcmUgbmVlZHMgdG8gaGF2ZSBhbiBhY3RpdmUgZW50aXR5LCBpZiBpdCdzIG5vdCBDb2xsYWJvcmF0aXZlIERyYWZ0IG9yIGEgbm9uIGRyYWZ0IHByb2dyYW1taW5nIG1vZGVsXG5cdFx0XHRcdGNvbnN0IHZpZXcgPSBDb21tb25VdGlscy5nZXRUYXJnZXRWaWV3KHRhYmxlKTtcblx0XHRcdFx0Y29uc3QgY29sbGFib3JhdGl2ZURyYWZ0ID0gdmlldy5nZXRDb250cm9sbGVyKCkuY29sbGFib3JhdGl2ZURyYWZ0O1xuXHRcdFx0XHRjb25zdCBtZXRhTW9kZWwgPSBjb250ZXh0c1swXS5nZXRNb2RlbCgpPy5nZXRNZXRhTW9kZWwoKTtcblx0XHRcdFx0Y29uc3QgaXNEcmFmdCA9IE1vZGVsSGVscGVyLmlzRHJhZnRTdXBwb3J0ZWQobWV0YU1vZGVsLCBjb250ZXh0c1swXS5nZXRQYXRoKCkpO1xuXHRcdFx0XHQvLyBJZiB3ZSBhcmUgaW4gQ29sbGFib3JhdGl2ZSBEcmFmdCBvciBpbiBhbiBub24tZHJhZnQgYXBwLCB3ZSBzZXQgdmlzaWJsZSB0byB0cnVlLlxuXHRcdFx0XHQvLyBPdGhlcndpc2Ugd2Ugb25seSBzZXQgdmlzaWJsZSB0byB0cnVlLCBpZiBhdCBsZWFzdCBvbmUgb2YgdGhlIHNlbGVjdGVkIGNvbnRleHRzIGlzIG9yIGhhcyBhbiBhY3RpdmUgdmVyc2lvbi5cblx0XHRcdFx0Y29uc3QgdmlzaWJsZSA9XG5cdFx0XHRcdFx0Y29sbGFib3JhdGl2ZURyYWZ0LmlzQ29sbGFib3JhdGlvbkVuYWJsZWQoKSB8fCAhaXNEcmFmdFxuXHRcdFx0XHRcdFx0PyB0cnVlXG5cdFx0XHRcdFx0XHQ6IGNvbnRleHRzLnNvbWUoKGNvbnRleHQpID0+IGNvbnRleHQuZ2V0T2JqZWN0KCkuSXNBY3RpdmVFbnRpdHkgfHwgY29udGV4dC5nZXRPYmplY3QoKS5IYXNBY3RpdmVFbnRpdHkpO1xuXHRcdFx0XHRjb2xsYWJvcmF0aW9uTWFuYWdlck1lbnVJdGVtLnNldFZpc2libGUodmlzaWJsZSk7XG5cdFx0XHRcdEZFU1JIZWxwZXIuc2V0U2VtYW50aWNTdGVwbmFtZShjb2xsYWJvcmF0aW9uTWFuYWdlck1lbnVJdGVtLCBcInByZXNzXCIsIFwiQ006U2hhcmVMaW5rXCIpO1xuXHRcdFx0fSBlbHNlIHtcblx0XHRcdFx0Y29sbGFib3JhdGlvbk1hbmFnZXJNZW51SXRlbS5zZXRWaXNpYmxlKGZhbHNlKTtcblx0XHRcdH1cblx0XHR9XG5cdH1cblxuXHQvKipcblx0ICogSGFuZGxlciB3aGVuIGFuIGl0ZW0gaW4gdGhlIGNvbnRleHQgbWVudSBpcyBwcmVzc2VkLlxuXHQgKiBAcGFyYW0gb0V2ZW50XG5cdCAqL1xuXHRfb25Db250ZXh0TWVudVByZXNzKHRoaXM6IElUYWJsZUJsb2NrICYgQ29udGV4dE1lbnVIYW5kbGVyLCBvRXZlbnQ6IFRhYmxlJEJlZm9yZU9wZW5Db250ZXh0TWVudUV2ZW50KTogdm9pZCB7XG5cdFx0Y29uc3QgdGFibGUgPSBvRXZlbnQuZ2V0U291cmNlKCksXG5cdFx0XHR0YWJsZUNvbnRleHRzID0gdGFibGUuZ2V0U2VsZWN0ZWRDb250ZXh0cygpIGFzIENvbnRleHRbXSwgLy8gc2VsZWN0ZWQgaXRlbXMgaW4gdGhlIHRhYmxlXG5cdFx0XHRjb250ZXh0TWVudUNvbnRleHQgPSBvRXZlbnQuZ2V0UGFyYW1ldGVyKFwiYmluZGluZ0NvbnRleHRcIikgYXMgQ29udGV4dCwgLy8gcm93IGNsaWNrZWQgZm9yIGNvbnRleHQgbWVudVxuXHRcdFx0aW50ZXJuYWxNb2RlbENvbnRleHQgPSB0aGlzLmdldEJpbmRpbmdDb250ZXh0KFwiaW50ZXJuYWxcIikgYXMgSW50ZXJuYWxNb2RlbENvbnRleHQ7XG5cblx0XHRjb25zdCBjb250ZXh0TWVudVNlbGVjdGlvbiA9IHRoaXMuZ2V0UmVsZXZhbnRTZWxlY3Rpb24odGFibGVDb250ZXh0cywgY29udGV4dE1lbnVDb250ZXh0KTtcblxuXHRcdC8vIENoZWNrIGlmIGFsbCBjb250ZXh0cyBpbiBjb250ZXh0TWVudVNlbGVjdGlvbiBhcmUgaW5hY3RpdmVcblx0XHQvLyBpZiBzbywgc2V0IHRoZSBpbmFjdGl2ZUNvbnRleHQgcHJvcGVydHkgaW4gdGhlIGludGVybmFsIG1vZGVsIHRvIHRydWVcblx0XHQvLyBpZiBqdXN0IG9uZSBjb250ZXh0IGlzIG5vdCBpbmFjdGl2ZSwgc2V0IHRoZSBpbmFjdGl2ZUNvbnRleHQgcHJvcGVydHkgdG8gZmFsc2Vcblx0XHRsZXQgb25lQ29udGV4dElzQWN0aXZlID0gdHJ1ZTtcblx0XHRvbmVDb250ZXh0SXNBY3RpdmUgPSBjb250ZXh0TWVudVNlbGVjdGlvbi5zb21lKChjb250ZXh0KSA9PiAhY29udGV4dC5pc0luYWN0aXZlKCkpO1xuXHRcdGludGVybmFsTW9kZWxDb250ZXh0Py5zZXRQcm9wZXJ0eShcImNvbnRleHRtZW51L2luYWN0aXZlQ29udGV4dFwiLCAhb25lQ29udGV4dElzQWN0aXZlKTtcblxuXHRcdC8vIERvIG5vdCBjb25zaWRlciBlbXB0eSByb3dzIGFzIHNlbGVjdGVkIGNvbnRleHQsIGZvciBvdGhlciBhY3Rpb25zIHRoYW4gZGVsZXRlXG5cdFx0Y29uc3QgYWN0aXZlU2VsZWN0ZWRDb250ZXh0cyA9IGNvbnRleHRNZW51U2VsZWN0aW9uLmZpbHRlcihmdW5jdGlvbiAob0NvbnRleHQ6IENvbnRleHQpIHtcblx0XHRcdHJldHVybiAhb0NvbnRleHQuaXNJbmFjdGl2ZSgpO1xuXHRcdH0pO1xuXHRcdGludGVybmFsTW9kZWxDb250ZXh0Py5zZXRQcm9wZXJ0eShcImNvbnRleHRtZW51L3NlbGVjdGVkQ29udGV4dHNcIiwgYWN0aXZlU2VsZWN0ZWRDb250ZXh0cyk7XG5cdFx0Ly9yZXNldCBudW1iZXIgb2Ygc2VsZWN0ZWQgY29udGV4dHMgdG8gZW5zdXJlIGNhbGxiYWNrIGZvciBjdXN0b20gZW5hYmxlIGhhbmRsZXJcblx0XHRpbnRlcm5hbE1vZGVsQ29udGV4dD8uc2V0UHJvcGVydHkoXCJjb250ZXh0bWVudS9udW1iZXJPZlNlbGVjdGVkQ29udGV4dHNcIiwgLTEpO1xuXHRcdGludGVybmFsTW9kZWxDb250ZXh0Py5zZXRQcm9wZXJ0eShcImNvbnRleHRtZW51L251bWJlck9mU2VsZWN0ZWRDb250ZXh0c1wiLCBhY3RpdmVTZWxlY3RlZENvbnRleHRzLmxlbmd0aCk7XG5cdFx0aW50ZXJuYWxNb2RlbENvbnRleHQ/LnNldFByb3BlcnR5KFwiY29udGV4dG1lbnUvbnVtYmVyT2ZTZWxlY3RlZENvbnRleHRzRm9yRGVsZXRlXCIsIGNvbnRleHRNZW51U2VsZWN0aW9uLmxlbmd0aCk7XG5cblx0XHRpZiAoYWN0aXZlU2VsZWN0ZWRDb250ZXh0cy5sZW5ndGggPiAwKSB7XG5cdFx0XHQvKiBBbGlnbiBjb250ZXh0IG1lbnUgd2l0aCBSVEEgY2hhbmdlcyBpbiB0YWJsZSB0b29sYmFyICovXG5cdFx0XHR0aGlzLmFsaWduQ29udGV4dE1lbnVXaXRoVGFibGVUb29sYmFyQ2hhbmdlcyh0YWJsZSk7XG5cdFx0fVxuXG5cdFx0Ly8gU2V0IHRoZSB2aXNpYmlsaXR5IG9mIHRoZSBNZW51SXRlbSBmb3IgQ29sbGFib3JhdGlvbiBNYW5hZ2VyXG5cdFx0dGhpcy5zZXRDb2xsYWJvcmF0aW9uTWFuYWdlck1lbnVJdGVtVmlzaWJpbGl0eSh0YWJsZSwgYWN0aXZlU2VsZWN0ZWRDb250ZXh0cyk7XG5cblx0XHQvLyBDaGVjayBpZiB0aGUgY29udGV4dCBtZW51IGNvbnRhaW5zIG9ubHkgbm90IHZpc2libGUgaXRlbXNcblx0XHQvLyBpbiB0aGF0IGNhc2UgcHJldmVudCB0aGUgY29udGV4dCBtZW51IGZyb20gb3BlbmluZ1xuXHRcdGNvbnN0IGNvbnRleHRNZW51ID0gdGFibGUuZ2V0Q29udGV4dE1lbnUoKSBhcyBNZW51O1xuXHRcdGNvbnN0IG1lbnVJdGVtcyA9IGNvbnRleHRNZW51LmdldEl0ZW1zKCk7XG5cblx0XHRjb25zdCB2aXNpYmxlTWVudUl0ZW1zID0gbWVudUl0ZW1zLmZpbHRlcigobWVudUl0ZW0pID0+IG1lbnVJdGVtLmdldFZpc2libGUoKSk7XG5cdFx0aWYgKHZpc2libGVNZW51SXRlbXMubGVuZ3RoID09PSAwKSB7XG5cdFx0XHRvRXZlbnQucHJldmVudERlZmF1bHQoKTtcblx0XHR9XG5cblx0XHQvLyBFbmFibGVtZW50IG9mIHRoZSBFeHBhbmQvQ29sbGFwc2UgYnV0dG9uc1xuXHRcdGNvbnN0IGlzRXhwYW5kYWJsZSA9IGNvbnRleHRNZW51U2VsZWN0aW9uLnNvbWUoKHNpbmdsZUNvbnRleHQpID0+IHNpbmdsZUNvbnRleHQuaXNFeHBhbmRlZCgpICE9PSB1bmRlZmluZWQpO1xuXHRcdGNvbnN0IGlzQ29sbGFwc2FibGUgPSBjb250ZXh0TWVudVNlbGVjdGlvbi5zb21lKChzaW5nbGVDb250ZXh0KSA9PiBzaW5nbGVDb250ZXh0LmlzRXhwYW5kZWQoKSk7XG5cdFx0aW50ZXJuYWxNb2RlbENvbnRleHQ/LnNldFByb3BlcnR5KFwiY29udGV4dG1lbnUvaXNFeHBhbmRhYmxlXCIsIGlzRXhwYW5kYWJsZSk7XG5cdFx0aW50ZXJuYWxNb2RlbENvbnRleHQ/LnNldFByb3BlcnR5KFwiY29udGV4dG1lbnUvaXNDb2xsYXBzYWJsZVwiLCBpc0NvbGxhcHNhYmxlKTtcblxuXHRcdC8vIEFjdGlvbiBlbmFibGVtZW50IGZvciBEZWxldGVcblx0XHRpbnRlcm5hbE1vZGVsQ29udGV4dD8uc2V0UHJvcGVydHkoXCJjb250cm9sSWRcIiwgdGFibGUuZ2V0SWQoKSk7XG5cdFx0ZGVsZXRlSGVscGVyLnVwZGF0ZURlbGV0ZUluZm9Gb3JTZWxlY3RlZENvbnRleHRzKGludGVybmFsTW9kZWxDb250ZXh0LCBjb250ZXh0TWVudVNlbGVjdGlvbiwgdHJ1ZSk7XG5cblx0XHQvLyBBY3Rpb24gZW5hYmxlbWVudCBmb3IgSUJOXG5cdFx0aWYgKCF0YWJsZS5kYXRhKFwiZW5hYmxlQW5hbHl0aWNzXCIpKSB7XG5cdFx0XHRjb25zdCBuYXZpZ2F0aW9uQXZhaWxhYmxlTWFwID0gdGFibGU/LmRhdGEoXCJuYXZpZ2F0aW9uQXZhaWxhYmxlTWFwXCIpO1xuXHRcdFx0VGFibGVSdW50aW1lLnNldEludGVudEJhc2VkTmF2aWdhdGlvbkVuYWJsZW1lbnQoaW50ZXJuYWxNb2RlbENvbnRleHQsIG5hdmlnYXRpb25BdmFpbGFibGVNYXAsIGFjdGl2ZVNlbGVjdGVkQ29udGV4dHMsIHRydWUpO1xuXHRcdH1cblxuXHRcdC8vIEFjdGlvbiBlbmFibGVtZW50IGZvciBNYXNzIEVkaXRcblx0XHRjb25zdCB1cGRhdGFibGVQcm9wZXJ0eVBhdGggPSB0YWJsZT8uZGF0YShcInVwZGF0YWJsZVByb3BlcnR5UGF0aFwiKTtcblx0XHRjb25zdCBkcmFmdCA9IHRhYmxlPy5kYXRhKFwiZHJhZnRcIik7XG5cdFx0Y29uc3QgcmVhZE9ubHlEcmFmdEVuYWJsZWQgPSB0YWJsZS5kYXRhKFwiZGlzcGxheU1vZGVQcm9wZXJ0eUJpbmRpbmdcIikgPT09IFwidHJ1ZVwiICYmIGRyYWZ0ICE9PSBcInVuZGVmaW5lZFwiO1xuXHRcdGNvbnN0IHVwZGF0YWJsZUNvbnRleHRzOiBDb250ZXh0W10gPSBbXTtcblx0XHRmb3IgKGNvbnN0IHNlbGVjdGVkQ29udGV4dCBvZiBhY3RpdmVTZWxlY3RlZENvbnRleHRzKSB7XG5cdFx0XHRpZiAoVGFibGVSdW50aW1lLmlzVXBkYXRhYmxlQ29udGV4dCh1cGRhdGFibGVQcm9wZXJ0eVBhdGgsIHNlbGVjdGVkQ29udGV4dCwgcmVhZE9ubHlEcmFmdEVuYWJsZWQpKSB7XG5cdFx0XHRcdHVwZGF0YWJsZUNvbnRleHRzLnB1c2goc2VsZWN0ZWRDb250ZXh0KTtcblx0XHRcdH1cblx0XHR9XG5cdFx0aW50ZXJuYWxNb2RlbENvbnRleHQ/LnNldFByb3BlcnR5KFwiY29udGV4dG1lbnUvdXBkYXRhYmxlQ29udGV4dHNcIiwgdXBkYXRhYmxlQ29udGV4dHMpO1xuXG5cdFx0Y29uc3QgdGFibGVEZWZpbml0aW9uID0gdGhpcy5nZXRUYWJsZURlZmluaXRpb24oKTtcblx0XHRpZiAodGFibGVEZWZpbml0aW9uLmNvbnRyb2wuY3JlYXRlRW5hYmxlbWVudCAmJiBjb250ZXh0TWVudVNlbGVjdGlvbi5sZW5ndGggPT09IDEpIHtcblx0XHRcdFRhYmxlUnVudGltZS5fdXBkYXRlQ3JlYXRlRW5hYmxlbWVudChcblx0XHRcdFx0aW50ZXJuYWxNb2RlbENvbnRleHQsXG5cdFx0XHRcdHRhYmxlRGVmaW5pdGlvbi5jb250cm9sLmNyZWF0ZUVuYWJsZW1lbnQsXG5cdFx0XHRcdHRhYmxlLFxuXHRcdFx0XHRjb250ZXh0TWVudVNlbGVjdGlvblswXSxcblx0XHRcdFx0dGFibGVEZWZpbml0aW9uLmNvbnRyb2wubm9kZVR5cGUsXG5cdFx0XHRcdHRydWVcblx0XHRcdCk7XG5cdFx0fVxuXG5cdFx0VGFibGVSdW50aW1lLnVwZGF0ZUN1dENvcHlQYXN0ZUVuYWJsZW1lbnQoaW50ZXJuYWxNb2RlbENvbnRleHQuZ2V0T2JqZWN0KCksIHRhYmxlLCB0cnVlKTtcblx0XHRUYWJsZVJ1bnRpbWUudXBkYXRlTW92ZVVwRG93bkVuYWJsZW1lbnQoaW50ZXJuYWxNb2RlbENvbnRleHQuZ2V0T2JqZWN0KCksIHRhYmxlLCB0cnVlKTtcblxuXHRcdC8vIE90aGVyIGFjdGlvbiBlbmFibGVtZW50XG5cdFx0QWN0aW9uUnVudGltZS5zZXRBY3Rpb25FbmFibGVtZW50KFxuXHRcdFx0aW50ZXJuYWxNb2RlbENvbnRleHQsXG5cdFx0XHRKU09OLnBhcnNlKHRhYmxlRGVmaW5pdGlvbi5vcGVyYXRpb25BdmFpbGFibGVNYXApLFxuXHRcdFx0YWN0aXZlU2VsZWN0ZWRDb250ZXh0cyxcblx0XHRcdFwidGFibGVcIixcblx0XHRcdHRydWVcblx0XHQpO1xuXHR9XG5cblx0Z2V0UmVsZXZhbnRTZWxlY3Rpb24odGFibGVDb250ZXh0czogQ29udGV4dFtdLCBjb250ZXh0TWVudUNvbnRleHQ6IENvbnRleHQpOiBDb250ZXh0W10ge1xuXHRcdGxldCBjb250ZXh0TWVudVNlbGVjdGlvbjogQ29udGV4dFtdO1xuXHRcdGlmICh0YWJsZUNvbnRleHRzLmluY2x1ZGVzKGNvbnRleHRNZW51Q29udGV4dCkpIHtcblx0XHRcdGNvbnRleHRNZW51U2VsZWN0aW9uID0gdGFibGVDb250ZXh0cztcblx0XHR9IGVsc2Uge1xuXHRcdFx0Y29udGV4dE1lbnVTZWxlY3Rpb24gPSBbY29udGV4dE1lbnVDb250ZXh0XSBhcyBDb250ZXh0W107XG5cdFx0fVxuXHRcdHJldHVybiBjb250ZXh0TWVudVNlbGVjdGlvbjtcblx0fVxufVxuIl0sIm1hcHBpbmdzIjoiOzs7Ozs7Ozs7TUFvQnFCQSxrQkFBa0I7SUFBQSxTQUFBQSxtQkFBQTtNQUFBLEtBQzVCQyxpQkFBaUIsR0FBRyxLQUFLO0lBQUE7SUFBQUMsUUFBQSxHQUFBRixrQkFBQTtJQUFBLElBQUFHLE1BQUEsR0FBQUgsa0JBQUEsQ0FBQUksU0FBQTtJQUFBRCxNQUFBLENBRW5DRSxVQUFVLEdBQVYsU0FBQUEsVUFBVUEsQ0FBQ0MsVUFBb0IsRUFBUTtNQUN0QztJQUFBOztJQUdEO0FBQ0Q7QUFDQTtBQUNBLE9BSEM7SUFBQUgsTUFBQSxDQUlBSSx1Q0FBdUMsR0FBdkMsU0FBQUEsdUNBQXVDQSxDQUFDQyxLQUFlLEVBQVE7TUFDOUQsTUFBTUMsV0FBVyxHQUFHRCxLQUFLLENBQUNFLGNBQWMsQ0FBQyxDQUFTO01BQ2xELE1BQU1DLHNCQUFrQyxHQUFHLEVBQUU7TUFDN0MsTUFBTUMsWUFBWSxHQUFHSixLQUFLLENBQUNLLFVBQVUsQ0FBQyxDQUFDO01BQ3ZDRCxZQUFZLEVBQUVFLE9BQU8sQ0FBRUMsV0FBVyxJQUFLO1FBQ3RDLE1BQU1DLGVBQWUsR0FBR0QsV0FBVyxDQUFDRSxjQUFjLENBQUMsUUFBUSxDQUFXO1FBQ3RFO1FBQ0EsSUFBSSxJQUFJLENBQUNDLGNBQWMsQ0FBQ0YsZUFBZSxDQUFDLEVBQUU7VUFDekM7VUFDQSxJQUFJLENBQUNHLDBCQUEwQixDQUFDSCxlQUFlLEVBQUVQLFdBQVcsQ0FBQztRQUM5RDtRQUNBO1FBQ0EsSUFBSSxJQUFJLENBQUNXLGlCQUFpQixDQUFDSixlQUFlLENBQUMsRUFBRTtVQUM1QyxJQUFJLENBQUNLLDJCQUEyQixDQUFDTCxlQUFlLEVBQTJCUCxXQUFXLEVBQUVELEtBQUssQ0FBQztR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LGlCQUFpQixDQUFDbEksSUFBSSxDQUFDbUksZUFBZSxDQUFDO1FBQ3hDO01BQ0Q7TUFDQXhCLG9CQUFvQixFQUFFTSxXQUFXLENBQUMsK0JBQStCLEVBQUVpQixpQkFBaUIsQ0FBQztNQUVyRixNQUFNekQsZUFBZSxHQUFHLElBQUksQ0FBQ0Usa0JBQWtCLENBQUMsQ0FBQztNQUNqRCxJQUFJRixlQUFlLENBQUM0RCxPQUFPLENBQUNDLGdCQUFnQixJQUFJekIsb0JBQW9CLENBQUM1RyxNQUFNLEtBQUssQ0FBQyxFQUFFO1FBQ2xGNEgsWUFBWSxDQUFDVSx1QkFBdUIsQ0FDbkM1QixvQkFBb0IsRUFDcEJsQyxlQUFlLENBQUM0RCxPQUFPLENBQUNDLGdCQUFnQixFQUN4Q3ZKLEtBQUssRUFDTDhILG9CQUFvQixDQUFDLENBQUMsQ0FBQyxFQUN2QnBDLGVBQWUsQ0FBQzRELE9BQU8sQ0FBQ0csUUFBUSxFQUNoQyxJQUNELENBQUM7TUFDRjtNQUVBWCxZQUFZLENBQUNZLDRCQUE0QixDQUFDOUIsb0JBQW9CLENBQUNaLFNBQVMsQ0FBQyxDQUFDLEVBQUVoSCxLQUFLLEVBQUUsSUFBSSxDQUFDO01BQ3hGOEksWUFBWSxDQUFDYSwwQkFBMEIsQ0FBQy9CLG9CQUFvQixDQUFDWixTQUFTLENBQUMsQ0FBQyxFQUFFaEgsS0FBSyxFQUFFLElBQUksQ0FBQzs7TUFFdEY7TUFDQTRKLGFBQWEsQ0FBQ0MsbUJBQW1CLENBQ2hDakMsb0JBQW9CLEVBQ3BCa0MsSUFBSSxDQUFDQyxLQUFLLENBQUNyRSxlQUFlLENBQUNzRSxxQkFBcUIsQ0FBQyxFQUNqRDdCLHNCQUFzQixFQUN0QixPQUFPLEVBQ1AsSUFDRCxDQUFDO0lBQ0YsQ0FBQztJQUFBeEksTUFBQSxDQUVEb0ksb0JBQW9CLEdBQXBCLFNBQUFBLG9CQUFvQkEsQ0FBQ1AsYUFBd0IsRUFBRUUsa0JBQTJCLEVBQWE7TUFDdEYsSUFBSUksb0JBQStCO01BQ25DLElBQUlOLGFBQWEsQ0FBQ3BGLFFBQVEsQ0FBQ3NGLGtCQUFrQixDQUFDLEVBQUU7UUFDL0NJLG9CQUFvQixHQUFHTixhQUFhO01BQ3JDLENBQUMsTUFBTTtRQUNOTSxvQkFBb0IsR0FBRyxDQUFDSixrQkFBa0IsQ0FBYztNQUN6RDtNQUNBLE9BQU9JLG9CQUFvQjtJQUM1QixDQUFDO0lBQUEsT0FBQXRJLGtCQUFBO0VBQUE7RUFBQUUsUUFBQSxHQUFBRixrQkFBQTtFQUFBLE9BQUFFLFFBQUE7QUFBQSIsImlnbm9yZUxpc3QiOltdfQ==
375
+ //# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJuYW1lcyI6WyJDb250ZXh0TWVudUhhbmRsZXIiLCJjb250ZXh0TWVudUFjdGl2ZSIsIl9leHBvcnRzIiwiX3Byb3RvIiwicHJvdG90eXBlIiwic2V0dXBNaXhpbiIsIl9iYXNlQ2xhc3MiLCJhbGlnbkNvbnRleHRNZW51V2l0aFRhYmxlVG9vbGJhckNoYW5nZXMiLCJ0YWJsZSIsImNvbnRleHRNZW51IiwiZ2V0Q29udGV4dE1lbnUiLCJzb3J0SGVscGVyRm9yTWVudUl0ZW1zIiwidGFibGVBY3Rpb25zIiwiZ2V0QWN0aW9ucyIsImZvckVhY2giLCJ0YWJsZUFjdGlvbiIsInRhYmxlQWN0aW9uSXRlbSIsImdldEFnZ3JlZ2F0aW9uIiwiX2lzQWN0aW9uU3BsaXQiLCJfc3BsaXRBY3Rpb25zSW5Db250ZXh0TWVudSIsIl9pc0FjdGlvbkNvbWJpbmVkIiwiX2NvbWJpbmVBY3Rpb25JbkNvbnRleHRNZW51IiwiY29udGV4dE1lbnVJdGVtIiwiX2dldENvcnJlc3BvbmRpbmdDb250ZXh0TWVudUFjdGlvbiIsIl9hbGlnblRleHRBbmRWaXNpYmxpdHlJbkNvbnRleHRNZW51IiwicHVzaCIsImxlbmd0aCIsIm1lbnVJdGVtIiwic29ydEluZGV4IiwiaW5kZXhPZkNvbnRleHRNZW51IiwiaW5kZXhPZkl0ZW0iLCJyZW1vdmVJdGVtIiwiaW5zZXJ0SXRlbSIsImFjdGlvbkl0ZW0iLCJnZXRNZXRhZGF0YSIsImdldE5hbWUiLCJkZXBlbmRlbnRzIiwiZ2V0RGVwZW5kZW50cyIsImZsZXhNYW5hZ2VkT2JqZWN0TW9kZWxzIiwiZmlsdGVyIiwiZGVwZW5kZW50IiwiTWFuYWdlZE9iamVjdE1vZGVsIiwic29tZSIsIm1vZGVsIiwiaW5jbHVkZXMiLCJjb250ZXh0TWVudUl0ZW1zIiwiZ2V0SXRlbXMiLCJtZW51QnV0dG9uIiwiX2ZpbmRPckNyZWF0ZU1lbnVCdXR0b25JbkNvbnRleHRNZW51IiwiYWN0aW9uSXRlbXMiLCJnZXRNZW51IiwiYWN0aW9uIiwidG9vbEJhckFjdGlvbiIsImFjdGlvbklkSW5Db250ZXh0TWVudSIsImRhdGEiLCJhY3Rpb25JZEluVG9vbGJhciIsInJlcGxhY2UiLCJzZXRUZXh0IiwiZ2V0VGV4dCIsImFkZEl0ZW0iLCJnZXRJZCIsImFjdGlvbkluU3ViTWVudSIsIl9maW5kQWN0aW9uSW5TdWJNZW51IiwiZGVzdHJveSIsInN1Yk1lbnUiLCJzcGxpY2UiLCJpbmRleE9mIiwidW5kZWZpbmVkIiwibmV3TWVudUJ1dHRvbiIsIk1lbnVJdGVtIiwiaWQiLCJnZW5lcmF0ZSIsInRleHQiLCJtZW51SXRlbXMiLCJpIiwiaXRlbSIsInN1Ykl0ZW1zIiwic3ViSXRlbSIsImluZGV4IiwidGFibGVBY3Rpb25WaXNpYmlsaXR5IiwiZ2V0VmlzaWJsZSIsInNldFZpc2libGUiLCJzZXRDb250ZXh0TWVudUFjdGl2ZSIsImFjdGl2ZSIsImlzQ29udGV4dE1lbnVBY3RpdmUiLCJzZXRDb2xsYWJvcmF0aW9uTWFuYWdlck1lbnVJdGVtVmlzaWJpbGl0eSIsImNvbnRleHRzIiwiY29sbGFib3JhdGlvbk1hbmFnZXJNZW51SXRlbSIsImZpbmQiLCJhcHBDb21wb25lbnQiLCJDb21tb25VdGlscyIsImdldEFwcENvbXBvbmVudCIsImNvbGxhYm9yYXRpdmVUb29sc1NlcnZpY2UiLCJnZXRDb2xsYWJvcmF0aXZlVG9vbHNTZXJ2aWNlIiwiY29sbGFib3JhdGlvbk9wdGlvbiIsImNvbGxhYm9yYXRpb25TZXJ2aWNlIiwiY21IZWxwZXJTZXJ2aWNlIiwiZ2V0T3B0aW9ucyIsInRhYmxlRGVmaW5pdGlvbiIsImdldFBhcmVudCIsImdldFRhYmxlRGVmaW5pdGlvbiIsIm5hdmlnYXRpb25UeXBlIiwiYW5ub3RhdGlvbiIsInJvdyIsIm5hdmlnYXRpb25JbmZvIiwidHlwZSIsInZpZXciLCJnZXRUYXJnZXRWaWV3IiwiY29sbGFib3JhdGl2ZURyYWZ0IiwiZ2V0Q29udHJvbGxlciIsIm1ldGFNb2RlbCIsImdldE1vZGVsIiwiZ2V0TWV0YU1vZGVsIiwiaXNEcmFmdCIsIk1vZGVsSGVscGVyIiwiaXNEcmFmdFN1cHBvcnRlZCIsImdldFBhdGgiLCJ2aXNpYmxlIiwiaXNDb2xsYWJvcmF0aW9uRW5hYmxlZCIsImNvbnRleHQiLCJnZXRPYmplY3QiLCJJc0FjdGl2ZUVudGl0eSIsIkhhc0FjdGl2ZUVudGl0eSIsIkZFU1JIZWxwZXIiLCJzZXRTZW1hbnRpY1N0ZXBuYW1lIiwiX29uQ29udGV4dE1lbnVQcmVzcyIsIm9FdmVudCIsImdldFNvdXJjZSIsInRhYmxlQ29udGV4dHMiLCJnZXRTZWxlY3RlZENvbnRleHRzIiwiY29udGV4dE1lbnVDb250ZXh0IiwiZ2V0UGFyYW1ldGVyIiwiaW50ZXJuYWxNb2RlbENvbnRleHQiLCJnZXRCaW5kaW5nQ29udGV4dCIsImNvbnRleHRNZW51U2VsZWN0aW9uIiwiZ2V0UmVsZXZhbnRTZWxlY3Rpb24iLCJvbmVDb250ZXh0SXNBY3RpdmUiLCJpc0luYWN0aXZlIiwic2V0UHJvcGVydHkiLCJhY3RpdmVTZWxlY3RlZENvbnRleHRzIiwib0NvbnRleHQiLCJ2aXNpYmxlTWVudUl0ZW1zIiwicHJldmVudERlZmF1bHQiLCJpc0V4cGFuZGFibGUiLCJzaW5nbGVDb250ZXh0IiwiaXNFeHBhbmRlZCIsImlzQ29sbGFwc2FibGUiLCJkZWxldGVIZWxwZXIiLCJ1cGRhdGVEZWxldGVJbmZvRm9yU2VsZWN0ZWRDb250ZXh0cyIsIm5hdmlnYXRpb25BdmFpbGFibGVNYXAiLCJUYWJsZVJ1bnRpbWUiLCJzZXRJbnRlbnRCYXNlZE5hdmlnYXRpb25FbmFibGVtZW50IiwidXBkYXRhYmxlUHJvcGVydHlQYXRoIiwiZHJhZnQiLCJyZWFkT25seURyYWZ0RW5hYmxlZCIsInVwZGF0YWJsZUNvbnRleHRzIiwic2VsZWN0ZWRDb250ZXh0IiwiaXNVcGRhdGFibGVDb250ZXh0IiwiY29udHJvbCIsImNyZWF0ZUVuYWJsZW1lbnQiLCJfdXBkYXRlQ3JlYXRlRW5hYmxlbWVudCIsIm5vZGVUeXBlIiwidXBkYXRlQ3V0Q29weVBhc3RlRW5hYmxlbWVudCIsInVwZGF0ZU1vdmVVcERvd25FbmFibGVtZW50IiwiQWN0aW9uUnVudGltZSIsInNldEFjdGlvbkVuYWJsZW1lbnQiLCJKU09OIiwicGFyc2UiLCJvcGVyYXRpb25BdmFpbGFibGVNYXAiXSwic291cmNlUm9vdCI6Ii4iLCJzb3VyY2VzIjpbIkNvbnRleHRNZW51SGFuZGxlci50cyJdLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyB0eXBlIElJbnRlcmZhY2VXaXRoTWl4aW4gfSBmcm9tIFwic2FwL2ZlL2Jhc2UvQ2xhc3NTdXBwb3J0XCI7XG5pbXBvcnQgQWN0aW9uUnVudGltZSBmcm9tIFwic2FwL2ZlL2NvcmUvQWN0aW9uUnVudGltZVwiO1xuaW1wb3J0IENvbW1vblV0aWxzIGZyb20gXCJzYXAvZmUvY29yZS9Db21tb25VdGlsc1wiO1xuaW1wb3J0IGRlbGV0ZUhlbHBlciBmcm9tIFwic2FwL2ZlL2NvcmUvaGVscGVycy9EZWxldGVIZWxwZXJcIjtcbmltcG9ydCB0eXBlIHsgSW50ZXJuYWxNb2RlbENvbnRleHQgfSBmcm9tIFwic2FwL2ZlL2NvcmUvaGVscGVycy9Nb2RlbEhlbHBlclwiO1xuaW1wb3J0IE1vZGVsSGVscGVyIGZyb20gXCJzYXAvZmUvY29yZS9oZWxwZXJzL01vZGVsSGVscGVyXCI7XG5pbXBvcnQgeyBnZW5lcmF0ZSB9IGZyb20gXCJzYXAvZmUvY29yZS9oZWxwZXJzL1N0YWJsZUlkSGVscGVyXCI7XG5pbXBvcnQgdHlwZSBCdXR0b24gZnJvbSBcInNhcC9tL0J1dHRvblwiO1xuaW1wb3J0IHR5cGUgTWVudSBmcm9tIFwic2FwL20vTWVudVwiO1xuaW1wb3J0IHR5cGUgTWVudUJ1dHRvbiBmcm9tIFwic2FwL20vTWVudUJ1dHRvblwiO1xuaW1wb3J0IE1lbnVJdGVtIGZyb20gXCJzYXAvbS9NZW51SXRlbVwiO1xuaW1wb3J0IE1hbmFnZWRPYmplY3RNb2RlbCBmcm9tIFwic2FwL3VpL2ZsL3V0aWwvTWFuYWdlZE9iamVjdE1vZGVsXCI7XG5pbXBvcnQgdHlwZSBNRENUYWJsZSBmcm9tIFwic2FwL3VpL21kYy9UYWJsZVwiO1xuaW1wb3J0IHR5cGUgeyBUYWJsZSRCZWZvcmVPcGVuQ29udGV4dE1lbnVFdmVudCB9IGZyb20gXCJzYXAvdWkvbWRjL1RhYmxlXCI7XG5pbXBvcnQgdHlwZSBBY3Rpb25Ub29sYmFyQWN0aW9uIGZyb20gXCJzYXAvdWkvbWRjL2FjdGlvbnRvb2xiYXIvQWN0aW9uVG9vbGJhckFjdGlvblwiO1xuaW1wb3J0IHR5cGUgQ29udGV4dCBmcm9tIFwic2FwL3VpL21vZGVsL29kYXRhL3Y0L0NvbnRleHRcIjtcbmltcG9ydCBGRVNSSGVscGVyIGZyb20gXCJzYXAvdWkvcGVyZm9ybWFuY2UvdHJhY2UvRkVTUkhlbHBlclwiO1xuaW1wb3J0IHR5cGUgeyBJVGFibGVCbG9jayB9IGZyb20gXCIuLi9UYWJsZUFQSVwiO1xuaW1wb3J0IFRhYmxlUnVudGltZSBmcm9tIFwiLi4vVGFibGVSdW50aW1lXCI7XG5cbmV4cG9ydCBkZWZhdWx0IGNsYXNzIENvbnRleHRNZW51SGFuZGxlciBpbXBsZW1lbnRzIElJbnRlcmZhY2VXaXRoTWl4aW4ge1xuXHRwcm90ZWN0ZWQgY29udGV4dE1lbnVBY3RpdmUgPSBmYWxzZTtcblxuXHRzZXR1cE1peGluKF9iYXNlQ2xhc3M6IEZ1bmN0aW9uKTogdm9pZCB7XG5cdFx0Ly8gVGhpcyBtZXRob2QgaXMgbmVlZGVkIHRvIGltcGxlbWVudCBpbnRlcmZhY2UgSUludGVyZmFjZVdpdGhNaXhpblxuXHR9XG5cblx0LyoqXG5cdCAqIEFsaWduIGNvbnRleHQgbWVudSB3aXRoIHRoZSB0YWJsZSBhY3Rpb25zIGJ5IFJUQSBjaGFuZ2VzIGluIHRhYmxlIHRvb2xiYXIuXG5cdCAqIEBwYXJhbSB0YWJsZSBUaGUgdGFibGUgd2l0aCBib3VuZCB0YWJsZSBhY3Rpb25zXG5cdCAqL1xuXHRhbGlnbkNvbnRleHRNZW51V2l0aFRhYmxlVG9vbGJhckNoYW5nZXModGFibGU6IE1EQ1RhYmxlKTogdm9pZCB7XG5cdFx0Y29uc3QgY29udGV4dE1lbnUgPSB0YWJsZS5nZXRDb250ZXh0TWVudSgpIGFzIE1lbnU7XG5cdFx0Y29uc3Qgc29ydEhlbHBlckZvck1lbnVJdGVtczogTWVudUl0ZW1bXSA9IFtdO1xuXHRcdGNvbnN0IHRhYmxlQWN0aW9ucyA9IHRhYmxlLmdldEFjdGlvbnMoKTtcblx0XHR0YWJsZUFjdGlvbnM/LmZvckVhY2goKHRhYmxlQWN0aW9uKSA9PiB7XG5cdFx0XHRjb25zdCB0YWJsZUFjdGlvbkl0ZW0gPSB0YWJsZUFjdGlvbi5nZXRBZ2dyZWdhdGlvbihcImFjdGlvblwiKSBhcyBCdXR0b247XG5cdFx0XHQvLyBDaGVjayBpZiB0aGUgYWN0aW9uIGl0ZW0gaGFzIGJlZW4gc3BsaXQgYnkgUlRBXG5cdFx0XHRpZiAodGhpcy5faXNBY3Rpb25TcGxpdCh0YWJsZUFjdGlvbkl0ZW0pKSB7XG5cdFx0XHRcdC8vIFJlbW92ZSBvcmlnaW5hbCBtZW51IGl0ZW0gYW5kIGFkZCBzdWIgaXRlbXMgYXMgbmV3IG1lbnUgaXRlbXNcblx0XHRcdFx0dGhpcy5fc3BsaXRBY3Rpb25zSW5Db250ZXh0TWVudSh0YWJsZUFjdGlvbkl0ZW0sIGNvbnRleHRNZW51KTtcblx0XHRcdH1cblx0XHRcdC8vIENoZWNrIGlmIHRoZSBhY3Rpb24gaXRlbSBoYXMgYmVlbiBjcmVhdGVkIGJ5IGNvbWJpbmluZyB0aGUgdHdvIGFjdGlvbnNcblx0XHRcdGlmICh0aGlzLl9pc0FjdGlvbkNvbWJpbmVkKHRhYmxlQWN0aW9uSXRlbSkpIHtcblx0XHRcdFx0dGhpcy5fY29tYmluZUFjdGlvbkluQ29udGV4dE1lbnUodGFibGVBY3Rpb25JdGVtIGFzIHVua25vd24gYXMgTWVudUJ1dHRvbiwgY29udGV4dE1lbnUsIHRhYmxlKTtcblx0XHRcdH1cblx0XHRcdGNvbnN0IGNvbnRleHRNZW51SXRlbSA9IHRoaXMuX2dldENvcnJlc3BvbmRpbmdDb250ZXh0TWVudUFjdGlvbih0YWJsZUFjdGlvbkl0ZW0sIGNvbnRleHRNZW51KTtcblx0XHRcdGlmIChjb250ZXh0TWVudUl0ZW0pIHtcblx0XHRcdFx0dGhpcy5fYWxpZ25UZXh0QW5kVmlzaWJsaXR5SW5Db250ZXh0TWVudSh0YWJsZUFjdGlvbkl0ZW0sIGNvbnRleHRNZW51SXRlbSwgdGFibGVBY3Rpb24gYXMgQWN0aW9uVG9vbGJhckFjdGlvbik7XG5cdFx0XHRcdHNvcnRIZWxwZXJGb3JNZW51SXRlbXMucHVzaChjb250ZXh0TWVudUl0ZW0pO1xuXHRcdFx0fVxuXHRcdH0pO1xuXHRcdC8vIEFsaWduIHRoZSBvcmRlciBvZiBjb250ZXh0LW1lbnVJdGVtcyB3aXRoIGJvdW5kIHRhYmxlIGFjdGlvbnNcblx0XHRpZiAoc29ydEhlbHBlckZvck1lbnVJdGVtcy5sZW5ndGgpIHtcblx0XHRcdHNvcnRIZWxwZXJGb3JNZW51SXRlbXMuZm9yRWFjaCgobWVudUl0ZW0sIHNvcnRJbmRleCkgPT4ge1xuXHRcdFx0XHRjb25zdCBpbmRleE9mQ29udGV4dE1lbnUgPSBjb250ZXh0TWVudS5pbmRleE9mSXRlbShtZW51SXRlbSk7XG5cdFx0XHRcdGlmIChpbmRleE9mQ29udGV4dE1lbnUgIT09IHNvcnRJbmRleCkge1xuXHRcdFx0XHRcdGNvbnRleHRNZW51LnJlbW92ZUl0ZW0obWVudUl0ZW0pO1xuXHRcdFx0XHRcdGNvbnRleHRNZW51Lmluc2VydEl0ZW0obWVudUl0ZW0sIHNvcnRJbmRleCk7XG5cdFx0XHRcdH1cblx0XHRcdH0pO1xuXHRcdH1cblx0fVxuXG5cdC8qKlxuXHQgKiBDaGVjayBpZiB0aGUgYWN0aW9uIGl0ZW0gaGFzIGJlZW4gY3JlYXRlZCBieSBhIENvbWJpbmUgUlRBIGNoYW5nZXMgaW4gdGhlIHRhYmxlIHRvb2xiYXIuXG5cdCAqIEBwYXJhbSBhY3Rpb25JdGVtIFRoZSBhY3Rpb24gdG8gY2hlY2tcblx0ICogQHJldHVybnMgVHJ1ZSBpZiB0aGUgYWN0aW9uIGl0ZW0gaGFzIGJlZW4gY3JlYXRlZCBieSBhIENvbWJpbmUgUlRBIGNoYW5nZXMgaW4gdGhlIHRhYmxlIHRvb2xiYXJcblx0ICovXG5cdF9pc0FjdGlvbkNvbWJpbmVkKGFjdGlvbkl0ZW06IEJ1dHRvbik6IGJvb2xlYW4ge1xuXHRcdGlmIChhY3Rpb25JdGVtLmdldE1ldGFkYXRhKCkuZ2V0TmFtZSgpID09PSBcInNhcC5tLk1lbnVCdXR0b25cIikge1xuXHRcdFx0Ly8gV2UgZG9uJ3QgaGF2ZSBjdXN0b20gZGF0YSBhdHRyaWJ1dGUgb24gdGhlIE1lbnVCdXR0b24gY3JlYXRlZCBieSBSVEEgY29tYmluZSBjaGFuZ2Vcblx0XHRcdGNvbnN0IGRlcGVuZGVudHMgPSBhY3Rpb25JdGVtLmdldERlcGVuZGVudHMoKTtcblx0XHRcdC8vIGZpbmQgYWxsIHRoZSBkZXBlbmRlbnRzIHdoaWNoIGFyZSBhIEZsZXggTWFuYWdlZE9iamVjdE1vZGVsXG5cdFx0XHRjb25zdCBmbGV4TWFuYWdlZE9iamVjdE1vZGVscyA9IGRlcGVuZGVudHMuZmlsdGVyKChkZXBlbmRlbnQpID0+IGRlcGVuZGVudCBpbnN0YW5jZW9mIE1hbmFnZWRPYmplY3RNb2RlbCk7XG5cdFx0XHQvLyBjaGVjayBpZiB0aGUgbmFtZSBvZiBvbmUgb2YgdGhlbSBpbmNsdWRlcyBcIiRzYXAubS5mbGV4aWJpbGl0eS5NZW51QnV0dG9uTW9kZWxcIlxuXHRcdFx0cmV0dXJuIGZsZXhNYW5hZ2VkT2JqZWN0TW9kZWxzLnNvbWUoKG1vZGVsKSA9PlxuXHRcdFx0XHQobW9kZWwgYXMgdW5rbm93biBhcyBNYW5hZ2VkT2JqZWN0TW9kZWwpLmdldE5hbWUoKS5pbmNsdWRlcyhcIiRzYXAubS5mbGV4aWJpbGl0eS5NZW51QnV0dG9uTW9kZWxcIilcblx0XHRcdCk7XG5cdFx0fVxuXHRcdHJldHVybiBmYWxzZTtcblx0fVxuXG5cdC8qKlxuXHQgKiBDb21iaW5lIHRoZSBhY3Rpb25zIGluIHRoZSBjb250ZXh0IG1lbnUgdG8gYWxpZ24gd2l0aCB0aGUgdGFibGUgYWN0aW9uIHRvb2xiYXIuXG5cdCAqIEBwYXJhbSBhY3Rpb25JdGVtIFRoZSBhY3Rpb24gaXRlbSB0byBzcGxpdFxuXHQgKiBAcGFyYW0gY29udGV4dE1lbnUgVGhlIGNvbnRleHQgbWVudVxuXHQgKiBAcGFyYW0gdGFibGUgVGhlIE1EQ1RhYmxlXG5cdCAqL1xuXHRfY29tYmluZUFjdGlvbkluQ29udGV4dE1lbnUoYWN0aW9uSXRlbTogTWVudUJ1dHRvbiwgY29udGV4dE1lbnU6IE1lbnUsIHRhYmxlOiBNRENUYWJsZSk6IHZvaWQge1xuXHRcdGNvbnN0IGNvbnRleHRNZW51SXRlbXMgPSBjb250ZXh0TWVudS5nZXRJdGVtcygpO1xuXHRcdC8vIENyZWF0ZSBhIG5ldyBtZW51IGJ1dHRvbiBpbiB0aGUgY29udGV4dCBtZW51IGlmIGl0IGRvZXMgbm90IGV4aXN0XG5cdFx0Y29uc3QgbWVudUJ1dHRvbiA9IHRoaXMuX2ZpbmRPckNyZWF0ZU1lbnVCdXR0b25JbkNvbnRleHRNZW51KGFjdGlvbkl0ZW0sIHRhYmxlKTtcblx0XHRjb25zdCBhY3Rpb25JdGVtcyA9IGFjdGlvbkl0ZW0uZ2V0TWVudSgpLmdldEl0ZW1zKCk7XG5cdFx0Zm9yIChjb25zdCBhY3Rpb24gb2YgYWN0aW9uSXRlbXMpIHtcblx0XHRcdGNvbnN0IHRvb2xCYXJBY3Rpb24gPSBhY3Rpb247XG5cdFx0XHQvLyBub3cgZmluZCB0aGUgYWN0aW9uIGluIHRoZSBjb250ZXh0IG1lbnUgYW5kIHJlbW92ZSBpdCBmcm9tIHRoZSBjb250ZXh0IG1lbnVcblx0XHRcdGZvciAoY29uc3QgbWVudUl0ZW0gb2YgY29udGV4dE1lbnVJdGVtcykge1xuXHRcdFx0XHRjb25zdCBhY3Rpb25JZEluQ29udGV4dE1lbnUgPSBtZW51SXRlbS5kYXRhKFwiYWN0aW9uSWRcIik7XG5cdFx0XHRcdGNvbnN0IGFjdGlvbklkSW5Ub29sYmFyID0gdG9vbEJhckFjdGlvbi5kYXRhKFwiYWN0aW9uSWRcIik7XG5cdFx0XHRcdGlmIChcblx0XHRcdFx0XHRhY3Rpb25JZEluQ29udGV4dE1lbnUgPT09IGFjdGlvbklkSW5Ub29sYmFyICsgXCI6OkNvbnRleHRNZW51XCIgfHxcblx0XHRcdFx0XHRhY3Rpb25JZEluQ29udGV4dE1lbnUgPT09IGFjdGlvbklkSW5Ub29sYmFyLnJlcGxhY2UoXCI6OkFjdGlvbk1lbnVcIiwgXCI6OkNvbnRleHRNZW51XCIpXG5cdFx0XHRcdCkge1xuXHRcdFx0XHRcdG1lbnVJdGVtLnNldFRleHQodG9vbEJhckFjdGlvbi5nZXRUZXh0KCkpO1xuXHRcdFx0XHRcdC8vIEFkZCB0aGUgYWN0aW9uIHRvIHRoZSBtZW51IGJ1dHRvblxuXHRcdFx0XHRcdGNvbnRleHRNZW51LnJlbW92ZUl0ZW0obWVudUl0ZW0pO1xuXHRcdFx0XHRcdG1lbnVCdXR0b24uYWRkSXRlbShtZW51SXRlbSk7XG5cdFx0XHRcdH1cblx0XHRcdFx0Ly8gSWYgd2UgZmluZCBhbm90aGVyIG1lbnUgaW4gdGhlIGNvbnRleHQgbWVudSB3ZSBjaGVjayBpZiB0aGUgYWN0aW9uIGlzIGluIHRoZSBzdWIgbWVudVxuXHRcdFx0XHRpZiAobWVudUl0ZW0uZ2V0SXRlbXMoKS5sZW5ndGggPiAwICYmICFtZW51SXRlbS5nZXRJZCgpLmluY2x1ZGVzKGFjdGlvbkl0ZW0uZ2V0SWQoKSkpIHtcblx0XHRcdFx0XHRjb25zdCBhY3Rpb25JblN1Yk1lbnUgPSB0aGlzLl9maW5kQWN0aW9uSW5TdWJNZW51KG1lbnVJdGVtLmdldEl0ZW1zKCksIHRvb2xCYXJBY3Rpb24pO1xuXHRcdFx0XHRcdGlmIChhY3Rpb25JblN1Yk1lbnUpIHtcblx0XHRcdFx0XHRcdGFjdGlvbkluU3ViTWVudS5zZXRUZXh0KHRvb2xCYXJBY3Rpb24uZ2V0VGV4dCgpKTtcblx0XHRcdFx0XHRcdG1lbnVCdXR0b24uYWRkSXRlbShhY3Rpb25JblN1Yk1lbnUpO1xuXHRcdFx0XHRcdFx0aWYgKG1lbnVJdGVtLmdldEl0ZW1zKCkubGVuZ3RoID09PSAwKSB7XG5cdFx0XHRcdFx0XHRcdG1lbnVJdGVtLmRlc3Ryb3koKTtcblx0XHRcdFx0XHRcdH1cblx0XHRcdFx0XHR9XG5cdFx0XHRcdH1cblx0XHRcdH1cblx0XHR9XG5cdH1cblxuXHQvKipcblx0ICogRmluZHMgdGhlIGFjdGlvbiBpbiBhbiBhY3Rpb24gbWVudSBpbiB0aGUgY29udGV4dCBtZW51LCBpdCByZXR1cm4gdGhlIGFjdGlvbiBpZiBmb3VuZCBhbmQgcmVtb3ZlcyBpdCBmcm9tIHRoZSBtZW51LlxuXHQgKiBAcGFyYW0gc3ViTWVudSBUaGUgYXJyYXkgb2YgYWN0aW9ucyBpbiB0aGUgbWVudVxuXHQgKiBAcGFyYW0gYWN0aW9uSXRlbSBUaGUgYWN0aW9uIHdlIGFyZSBzZWFyY2hpbmcgZm9yXG5cdCAqIEByZXR1cm5zIFRoZSBhY3Rpb24gaWYgZm91bmQsIG90aGVyd2lzZSB1bmRlZmluZWRcblx0ICovXG5cdF9maW5kQWN0aW9uSW5TdWJNZW51KHN1Yk1lbnU6IE1lbnVJdGVtW10sIGFjdGlvbkl0ZW06IE1lbnVJdGVtKTogTWVudUl0ZW0gfCB1bmRlZmluZWQge1xuXHRcdGZvciAoY29uc3QgbWVudUl0ZW0gb2Ygc3ViTWVudSkge1xuXHRcdFx0aWYgKFxuXHRcdFx0XHRtZW51SXRlbS5kYXRhKFwiYWN0aW9uSWRcIikgPT09IGFjdGlvbkl0ZW0uZGF0YShcImFjdGlvbklkXCIpLnJlcGxhY2UoXCI6OkFjdGlvbk1lbnVcIiwgXCI6OkNvbnRleHRNZW51XCIpIHx8XG5cdFx0XHRcdG1lbnVJdGVtLmRhdGEoXCJhY3Rpb25JZFwiKSA9PT0gYWN0aW9uSXRlbS5kYXRhKFwiYWN0aW9uSWRcIikgKyBcIjo6Q29udGV4dE1lbnVcIlxuXHRcdFx0KSB7XG5cdFx0XHRcdGNvbnN0IGFjdGlvbiA9IG1lbnVJdGVtO1xuXHRcdFx0XHRzdWJNZW51LnNwbGljZShzdWJNZW51LmluZGV4T2YobWVudUl0ZW0pLCAxKTtcblx0XHRcdFx0cmV0dXJuIGFjdGlvbjtcblx0XHRcdH1cblx0XHR9XG5cdFx0cmV0dXJuIHVuZGVmaW5lZDtcblx0fVxuXG5cdC8qKlxuXHQgKiBDaGVjaydzIGlmIGEgcGFydGljdWxhciBtZW51IGJ1dHRvbiBleGlzdHMgaW4gdGhlIGNvbnRleHQgbWVudSwgaWYgbm90IGNyZWF0ZXMgYSBuZXcgbWVudSBidXR0b24gYW5kIGFkZHMgaXQgdG8gdGhlIGNvbnRleHQgbWVudS5cblx0ICogQHBhcmFtIGFjdGlvbkl0ZW0gVGhlIG1lbnUgYnV0dG9uIHRvIGZpbmQgb3IgY3JlYXRlXG5cdCAqIEBwYXJhbSB0YWJsZSBUaGUgTURDVGFibGVcblx0ICogQHJldHVybnMgVGhlIE1lbnVJdGVtIGlmIGZvdW5kLCBvdGhlcndpc2UgYSBuZXcgTWVudUl0ZW1cblx0ICovXG5cdF9maW5kT3JDcmVhdGVNZW51QnV0dG9uSW5Db250ZXh0TWVudShhY3Rpb25JdGVtOiBNZW51QnV0dG9uLCB0YWJsZTogTURDVGFibGUpOiBNZW51SXRlbSB7XG5cdFx0Y29uc3QgY29udGV4dE1lbnUgPSB0YWJsZS5nZXRDb250ZXh0TWVudSgpIGFzIE1lbnU7XG5cdFx0Y29uc3QgY29udGV4dE1lbnVJdGVtcyA9IGNvbnRleHRNZW51LmdldEl0ZW1zKCk7XG5cdFx0Ly9sb29wIG92ZXIgY29udGV4dE1lbnVJdGVtcyBhbmQgY2hlY2sgaWYgdGhlIHJlcXVpcmVkIG1lbnUgYnV0dG9uIGFscmVhZHkgZXhpc3RzXG5cdFx0Zm9yIChjb25zdCBtZW51SXRlbSBvZiBjb250ZXh0TWVudUl0ZW1zKSB7XG5cdFx0XHRpZiAobWVudUl0ZW0uZ2V0SWQoKS5pbmNsdWRlcyhhY3Rpb25JdGVtLmdldElkKCkpKSB7XG5cdFx0XHRcdHJldHVybiBtZW51SXRlbTtcblx0XHRcdH1cblx0XHR9XG5cdFx0Ly8gaWYgdGhlIHJlcXVpcmVkIG1lbnUgYnV0dG9uIGRvZXMgbm90IGV4aXN0LCBjcmVhdGUgYSBuZXcgbWVudSBidXR0b24gYW5kIGFkZCBpdCB0byB0aGUgY29udGV4dE1lbnVcblx0XHRjb25zdCBuZXdNZW51QnV0dG9uID0gbmV3IE1lbnVJdGVtKHtcblx0XHRcdGlkOiBnZW5lcmF0ZShbdGFibGUuZ2V0SWQoKSwgYWN0aW9uSXRlbS5nZXRJZCgpLCBcIjo6Q29udGV4dE1lbnVcIl0pLFxuXHRcdFx0dGV4dDogYWN0aW9uSXRlbS5nZXRUZXh0KClcblx0XHR9KTtcblx0XHRjb250ZXh0TWVudS5hZGRJdGVtKG5ld01lbnVCdXR0b24pO1xuXHRcdHJldHVybiBuZXdNZW51QnV0dG9uO1xuXHR9XG5cblx0LyoqXG5cdCAqIFNwbGl0IHRoZSBhY3Rpb24gaXRlbXMgaW4gdGhlIGNvbnRleHQgbWVudS5cblx0ICogQHBhcmFtIGFjdGlvbkl0ZW0gVGhlIGFjdGlvbiBpdGVtIHRvIHNwbGl0XG5cdCAqIEBwYXJhbSBjb250ZXh0TWVudSBUaGUgY29udGV4dCBtZW51XG5cdCAqL1xuXHRfc3BsaXRBY3Rpb25zSW5Db250ZXh0TWVudShhY3Rpb25JdGVtOiBCdXR0b24sIGNvbnRleHRNZW51OiBNZW51KTogdm9pZCB7XG5cdFx0Y29uc3QgbWVudUl0ZW1zID0gY29udGV4dE1lbnUuZ2V0SXRlbXMoKTtcblx0XHRmb3IgKGxldCBpID0gMDsgaSA8IG1lbnVJdGVtcy5sZW5ndGg7IGkrKykge1xuXHRcdFx0Ly9jaGVjayBpZiB0aGUgbWVudSBpdGVtIGlzIGEgTWVudVxuXHRcdFx0aWYgKG1lbnVJdGVtc1tpXS5nZXRJdGVtcygpLmxlbmd0aCA+IDApIHtcblx0XHRcdFx0aWYgKFxuXHRcdFx0XHRcdG1lbnVJdGVtc1tpXVxuXHRcdFx0XHRcdFx0LmdldEl0ZW1zKClcblx0XHRcdFx0XHRcdC5zb21lKChpdGVtKSA9PiBpdGVtLmRhdGEoXCJhY3Rpb25JZFwiKSA9PT0gYWN0aW9uSXRlbS5kYXRhKFwiYWN0aW9uSWRcIikucmVwbGFjZShcIjo6QWN0aW9uTWVudVwiLCBcIjo6Q29udGV4dE1lbnVcIikpXG5cdFx0XHRcdCkge1xuXHRcdFx0XHRcdGNvbnN0IG1lbnVJdGVtID0gbWVudUl0ZW1zW2ldO1xuXHRcdFx0XHRcdGNvbnN0IHN1Ykl0ZW1zID0gbWVudUl0ZW0uZ2V0SXRlbXMoKTtcblx0XHRcdFx0XHQvLyBSZW1vdmUgdGhlIG1lbnVJdGVtIGZyb20gdGhlIGNvbnRleHQgbWVudVxuXHRcdFx0XHRcdGNvbnRleHRNZW51LnJlbW92ZUl0ZW0obWVudUl0ZW0pO1xuXHRcdFx0XHRcdC8vIEluc2VydCB0aGVzZSBzdWItaXRlbXMgaW50byB0aGUgY29udGV4dE1lbnUgc3RhcnRpbmcgZnJvbSB0aGUgb3JpZ2luYWwgaW5kZXhcblx0XHRcdFx0XHRzdWJJdGVtcy5mb3JFYWNoKChzdWJJdGVtLCBpbmRleCkgPT4ge1xuXHRcdFx0XHRcdFx0Y29udGV4dE1lbnUuaW5zZXJ0SXRlbShzdWJJdGVtLCBpICsgaW5kZXgpO1xuXHRcdFx0XHRcdH0pO1xuXHRcdFx0XHR9XG5cdFx0XHR9XG5cdFx0fVxuXHR9XG5cblx0LyoqXG5cdCAqIEdldHMgdGhlIGNvcnJlc3BvbmRpbmcgY29udGV4dCBtZW51IGFjdGlvbiBmb3IgdGhlIHRhYmxlIGFjdGlvbi5cblx0ICogQHBhcmFtIHRhYmxlQWN0aW9uIFRoZSBhY3Rpb24gaXRlbSB0byBzcGxpdFxuXHQgKiBAcGFyYW0gY29udGV4dE1lbnUgVGhlIGNvbnRleHQgbWVudVxuXHQgKiBAcmV0dXJucyAgTWVudUl0ZW18bnVsbCB0aGUgY29ycmVzcG9uZGluZyBjb250ZXh0IG1lbnUgYWN0aW9uIG9yIG51bGwgaWYgbm90IGZvdW5kXG5cdCAqL1xuXHRfZ2V0Q29ycmVzcG9uZGluZ0NvbnRleHRNZW51QWN0aW9uKHRhYmxlQWN0aW9uOiBCdXR0b24sIGNvbnRleHRNZW51OiBNZW51KTogTWVudUl0ZW0gfCBudWxsIHtcblx0XHRjb25zdCBtZW51SXRlbXMgPSBjb250ZXh0TWVudS5nZXRJdGVtcygpO1xuXHRcdGZvciAoY29uc3QgaXRlbSBvZiBtZW51SXRlbXMpIHtcblx0XHRcdC8vIHRoZSBjb3JyZXNwb25kaW5nIGNvbnRleHQgbWVudSBhY3Rpb24gaXMgZWl0aGVyIGFuIGl0ZW0gd2l0aCBhbiBhZGRpdGlvbmFsIFwiOjpDb250ZXh0TWVudVwiIHRleHQgYXQgdGhlIGVuZCBvZiB0aGUgaWRcblx0XHRcdC8vIG9yIGl0IGlzIGEgc3BsaXR0ZWQgbWVudSBpdGVtIHdoZXJlIHRoZSBcIjo6Q29udGV4dE1lbnVcIiBwYXJ0IGlzIGluIHRoZSBtaWRkbGUgb2YgdGhlIGlkXG5cdFx0XHRpZiAoXG5cdFx0XHRcdHRhYmxlQWN0aW9uLmdldElkKCkgKyBcIjo6Q29udGV4dE1lbnVcIiA9PT0gaXRlbS5nZXRJZCgpIHx8XG5cdFx0XHRcdGl0ZW0uZGF0YShcImFjdGlvbklkXCIpID09PSB0YWJsZUFjdGlvbi5kYXRhKFwiYWN0aW9uSWRcIik/LnJlcGxhY2UoXCI6OkFjdGlvbk1lbnVcIiwgXCI6OkNvbnRleHRNZW51XCIpXG5cdFx0XHQpIHtcblx0XHRcdFx0cmV0dXJuIGl0ZW07XG5cdFx0XHR9XG5cdFx0XHQvLyBmb3IgY29tYmluZWQgYWN0aW9ucywgdGhlIGNvbnRleHQgbWVudSBhY3Rpb24gaXMgdGhlIG9uZSB3aXRoIHRoZSBzYW1lIHRleHRcblx0XHRcdGlmIChpdGVtLmdldElkKCkuaW5jbHVkZXModGFibGVBY3Rpb24uZ2V0SWQoKSkpIHtcblx0XHRcdFx0cmV0dXJuIGl0ZW07XG5cdFx0XHR9XG5cdFx0fVxuXHRcdHJldHVybiBudWxsO1xuXHR9XG5cblx0LyoqXG5cdCAqIEFkanVzdCB0aGUgdGV4dCBhbmQgdmlzaWJpbGl0eSBvZiB0aGUgYWN0aW9uIGl0ZW1zIGluIHRoZSBjb250ZXh0IG1lbnUuXG5cdCAqIEBwYXJhbSBhY3Rpb25JdGVtIFRoZSBhY3Rpb24gaXRlbSB0byBzcGxpdFxuXHQgKiBAcGFyYW0gY29udGV4dE1lbnVJdGVtIFRoZSBjb250ZXh0IG1lbnVcblx0ICogQHBhcmFtIHRhYmxlQWN0aW9uIFRoZSBhcnJheSBvZiB0YWJsZSBhY3Rpb25zXG5cdCAqL1xuXHRfYWxpZ25UZXh0QW5kVmlzaWJsaXR5SW5Db250ZXh0TWVudShhY3Rpb25JdGVtOiBCdXR0b24sIGNvbnRleHRNZW51SXRlbTogTWVudUl0ZW0sIHRhYmxlQWN0aW9uOiBBY3Rpb25Ub29sYmFyQWN0aW9uKTogdm9pZCB7XG5cdFx0Ly8gY2hhbmdlIHRoZSB0ZXh0IG9mIHRoZSBtZW51IGl0ZW0gYXMgdGhlIHRleHQgb2YgYWN0aW9uIGl0ZW1cblx0XHRjb250ZXh0TWVudUl0ZW0uc2V0VGV4dChhY3Rpb25JdGVtLmdldFRleHQoKSk7XG5cdFx0Ly8gY2hhbmdlIHRoZSB2aXNpYmlsaXR5IG9mIHRoZSBjb250ZXh0TWVudSBhY3Rpb24gYXMgdGhlIHZpc2liaWxpdHkgb2YgdGFibGUgYWN0aW9uXG5cdFx0Y29uc3QgdGFibGVBY3Rpb25WaXNpYmlsaXR5ID0gYWN0aW9uSXRlbS5nZXRWaXNpYmxlKCkgJiYgdGFibGVBY3Rpb24uZ2V0VmlzaWJsZSgpO1xuXHRcdGlmICh0YWJsZUFjdGlvblZpc2liaWxpdHkgIT09IGNvbnRleHRNZW51SXRlbS5nZXRWaXNpYmxlKCkpIHtcblx0XHRcdGNvbnRleHRNZW51SXRlbS5zZXRWaXNpYmxlKHRhYmxlQWN0aW9uVmlzaWJpbGl0eSk7XG5cdFx0fVxuXHR9XG5cblx0LyoqXG5cdCAqIENoZWNrIGlmIGFuIGFjdGlvbiBoYXMgYmVlbiBzcGxpdCBieSBSVEEuXG5cdCAqIEBwYXJhbSBhY3Rpb25JdGVtIFRoZSBvcmlnaW5hbCBhY3Rpb24gaXRlbVxuXHQgKiBAcmV0dXJucyBCb29sZWFuIGluZGljYXRpbmcgaWYgdGhlIGFjdGlvbiBoYXMgYmVlbiBzcGxpdFxuXHQgKi9cblx0X2lzQWN0aW9uU3BsaXQoYWN0aW9uSXRlbTogQnV0dG9uKTogYm9vbGVhbiB7XG5cdFx0aWYgKGFjdGlvbkl0ZW0uZ2V0TWV0YWRhdGEoKS5nZXROYW1lKCkgPT09IFwic2FwLm0uTWVudUJ1dHRvblwiKSB7XG5cdFx0XHRyZXR1cm4gZmFsc2U7XG5cdFx0fVxuXHRcdGNvbnN0IGRlcGVuZGVudHMgPSBhY3Rpb25JdGVtLmdldERlcGVuZGVudHMoKTtcblx0XHQvLyBmaW5kIGFsbCB0aGUgZGVwZW5kZW50cyB3aGljaCBhcmUgYSBGbGV4IE1hbmFnZWRPYmplY3RNb2RlbFxuXHRcdGNvbnN0IGZsZXhNYW5hZ2VkT2JqZWN0TW9kZWxzID0gZGVwZW5kZW50cy5maWx0ZXIoKGRlcGVuZGVudCkgPT4gZGVwZW5kZW50IGluc3RhbmNlb2YgTWFuYWdlZE9iamVjdE1vZGVsKTtcblx0XHQvLyBjaGVjayBpZiBvbmUgb2YgdGhlbSBoYXMgdGhlIG5hbWUgXCIkc2FwLm0uZmxleGliaWxpdHkuU3BsaXRCdXR0b25zTW9kZWxcIlxuXHRcdHJldHVybiBmbGV4TWFuYWdlZE9iamVjdE1vZGVscy5zb21lKFxuXHRcdFx0KG1vZGVsKSA9PiAobW9kZWwgYXMgdW5rbm93biBhcyBNYW5hZ2VkT2JqZWN0TW9kZWwpLmdldE5hbWUoKSA9PT0gXCIkc2FwLm0uZmxleGliaWxpdHkuU3BsaXRCdXR0b25zTW9kZWxcIlxuXHRcdCk7XG5cdH1cblxuXHQvKipcblx0ICogU2V0cyBhIGZsYWcgdG8gaW5kaWNhdGUgdGhhdCBhIGNvbnRleHQgbWVudSBpdGVtIGhhcyBiZWVuIHByZXNzZWQuXG5cdCAqIEBwYXJhbSBhY3RpdmVcblx0ICovXG5cdHNldENvbnRleHRNZW51QWN0aXZlKGFjdGl2ZTogYm9vbGVhbik6IHZvaWQge1xuXHRcdHRoaXMuY29udGV4dE1lbnVBY3RpdmUgPSBhY3RpdmU7XG5cdH1cblxuXHRpc0NvbnRleHRNZW51QWN0aXZlKCk6IGJvb2xlYW4ge1xuXHRcdHJldHVybiB0aGlzLmNvbnRleHRNZW51QWN0aXZlO1xuXHR9XG5cblx0LyoqXG5cdCAqIE1ha2UgdGhlIG1lbnUgaXRlbSBvZiBTQVAgQ29sbGFib3JhdGlvbiBNYW5hZ2VyIHZpc2libGUgaWYgaXQgaXMgc3VwcG9ydGVkLlxuXHQgKiBAcGFyYW0gdGFibGVcblx0ICogQHBhcmFtIGNvbnRleHRzXG5cdCAqL1xuXHRzZXRDb2xsYWJvcmF0aW9uTWFuYWdlck1lbnVJdGVtVmlzaWJpbGl0eSh0YWJsZTogTURDVGFibGUsIGNvbnRleHRzOiBDb250ZXh0W10pOiB2b2lkIHtcblx0XHQvLyBnZXQgY29sbGFib3JhdGlvbiBtZW51IGl0ZW0gZnJvbSBjb250ZXh0IG1lbnVcblx0XHRjb25zdCBjb250ZXh0TWVudSA9IHRhYmxlLmdldENvbnRleHRNZW51KCkgYXMgTWVudTtcblx0XHRjb25zdCBtZW51SXRlbXMgPSBjb250ZXh0TWVudS5nZXRJdGVtcygpO1xuXHRcdGNvbnN0IGNvbGxhYm9yYXRpb25NYW5hZ2VyTWVudUl0ZW0gPSBtZW51SXRlbXM/LmZpbmQoKG1lbnVJdGVtKSA9PiBtZW51SXRlbS5nZXRJZCgpLmluY2x1ZGVzKFwiQ29udGV4dE1lbnU6OkNvbGxhYm9yYXRpb25NYW5hZ2VyXCIpKTtcblx0XHRpZiAoY29sbGFib3JhdGlvbk1hbmFnZXJNZW51SXRlbSkge1xuXHRcdFx0Ly8gZ2V0IGNvbGxhYm9yYXRpb24gb3B0aW9uIGZyb20gY29sbGFib3JhdGl2ZSB0b29scyBzZXJ2aWNlXG5cdFx0XHRjb25zdCBhcHBDb21wb25lbnQgPSBDb21tb25VdGlscy5nZXRBcHBDb21wb25lbnQodGFibGUpO1xuXHRcdFx0Y29uc3QgY29sbGFib3JhdGl2ZVRvb2xzU2VydmljZSA9IGFwcENvbXBvbmVudD8uZ2V0Q29sbGFib3JhdGl2ZVRvb2xzU2VydmljZSgpO1xuXHRcdFx0Y29uc3QgY29sbGFib3JhdGlvbk9wdGlvbiA9IGNvbGxhYm9yYXRpdmVUb29sc1NlcnZpY2U/LmNvbGxhYm9yYXRpb25TZXJ2aWNlLmNtSGVscGVyU2VydmljZT8uZ2V0T3B0aW9ucygpO1xuXHRcdFx0Ly8gZ2V0IG5hdmlnYXRpb24gaW5mbyBmcm9tIHRhYmxlIGRlZmluaXRpb25cblx0XHRcdGNvbnN0IHRhYmxlRGVmaW5pdGlvbiA9ICh0YWJsZT8uZ2V0UGFyZW50KCkgYXMgSVRhYmxlQmxvY2spPy5nZXRUYWJsZURlZmluaXRpb24oKTtcblx0XHRcdGNvbnN0IG5hdmlnYXRpb25UeXBlID0gdGFibGVEZWZpbml0aW9uPy5hbm5vdGF0aW9uPy5yb3c/Lm5hdmlnYXRpb25JbmZvPy50eXBlO1xuXHRcdFx0aWYgKGNvbGxhYm9yYXRpb25PcHRpb24gJiYgbmF2aWdhdGlvblR5cGUgPT09IFwiTmF2aWdhdGlvblwiICYmIGNvbnRleHRzLmxlbmd0aCA+IDApIHtcblx0XHRcdFx0Ly8gSXRlbXMgdG8gc2hhcmUgbmVlZHMgdG8gaGF2ZSBhbiBhY3RpdmUgZW50aXR5LCBpZiBpdCdzIG5vdCBDb2xsYWJvcmF0aXZlIERyYWZ0IG9yIGEgbm9uIGRyYWZ0IHByb2dyYW1taW5nIG1vZGVsXG5cdFx0XHRcdGNvbnN0IHZpZXcgPSBDb21tb25VdGlscy5nZXRUYXJnZXRWaWV3KHRhYmxlKTtcblx0XHRcdFx0Y29uc3QgY29sbGFib3JhdGl2ZURyYWZ0ID0gdmlldy5nZXRDb250cm9sbGVyKCkuY29sbGFib3JhdGl2ZURyYWZ0O1xuXHRcdFx0XHRjb25zdCBtZXRhTW9kZWwgPSBjb250ZXh0c1swXS5nZXRNb2RlbCgpPy5nZXRNZXRhTW9kZWwoKTtcblx0XHRcdFx0Y29uc3QgaXNEcmFmdCA9IE1vZGVsSGVscGVyLmlzRHJhZnRTdXBwb3J0ZWQobWV0YU1vZGVsLCBjb250ZXh0c1swXS5nZXRQYXRoKCkpO1xuXHRcdFx0XHQvLyBJZiB3ZSBhcmUgaW4gQ29sbGFib3JhdGl2ZSBEcmFmdCBvciBpbiBhbiBub24tZHJhZnQgYXBwLCB3ZSBzZXQgdmlzaWJsZSB0byB0cnVlLlxuXHRcdFx0XHQvLyBPdGhlcndpc2Ugd2Ugb25seSBzZXQgdmlzaWJsZSB0byB0cnVlLCBpZiBhdCBsZWFzdCBvbmUgb2YgdGhlIHNlbGVjdGVkIGNvbnRleHRzIGlzIG9yIGhhcyBhbiBhY3RpdmUgdmVyc2lvbi5cblx0XHRcdFx0Y29uc3QgdmlzaWJsZSA9XG5cdFx0XHRcdFx0Y29sbGFib3JhdGl2ZURyYWZ0LmlzQ29sbGFib3JhdGlvbkVuYWJsZWQoKSB8fCAhaXNEcmFmdFxuXHRcdFx0XHRcdFx0PyB0cnVlXG5cdFx0XHRcdFx0XHQ6IGNvbnRleHRzLnNvbWUoKGNvbnRleHQpID0+IGNvbnRleHQuZ2V0T2JqZWN0KCkuSXNBY3RpdmVFbnRpdHkgfHwgY29udGV4dC5nZXRPYmplY3QoKS5IYXNBY3RpdmVFbnRpdHkpO1xuXHRcdFx0XHRjb2xsYWJvcmF0aW9uTWFuYWdlck1lbnVJdGVtLnNldFZpc2libGUodmlzaWJsZSk7XG5cdFx0XHRcdEZFU1JIZWxwZXIuc2V0U2VtYW50aWNTdGVwbmFtZShjb2xsYWJvcmF0aW9uTWFuYWdlck1lbnVJdGVtLCBcInByZXNzXCIsIFwiQ006U2hhcmVMaW5rXCIpO1xuXHRcdFx0fSBlbHNlIHtcblx0XHRcdFx0Y29sbGFib3JhdGlvbk1hbmFnZXJNZW51SXRlbS5zZXRWaXNpYmxlKGZhbHNlKTtcblx0XHRcdH1cblx0XHR9XG5cdH1cblxuXHQvKipcblx0ICogSGFuZGxlciB3aGVuIGFuIGl0ZW0gaW4gdGhlIGNvbnRleHQgbWVudSBpcyBwcmVzc2VkLlxuXHQgKiBAcGFyYW0gb0V2ZW50XG5cdCAqL1xuXHRfb25Db250ZXh0TWVudVByZXNzKHRoaXM6IElUYWJsZUJsb2NrICYgQ29udGV4dE1lbnVIYW5kbGVyLCBvRXZlbnQ6IFRhYmxlJEJlZm9yZU9wZW5Db250ZXh0TWVudUV2ZW50KTogdm9pZCB7XG5cdFx0Y29uc3QgdGFibGUgPSBvRXZlbnQuZ2V0U291cmNlKCksXG5cdFx0XHR0YWJsZUNvbnRleHRzID0gdGFibGUuZ2V0U2VsZWN0ZWRDb250ZXh0cygpIGFzIENvbnRleHRbXSwgLy8gc2VsZWN0ZWQgaXRlbXMgaW4gdGhlIHRhYmxlXG5cdFx0XHRjb250ZXh0TWVudUNvbnRleHQgPSBvRXZlbnQuZ2V0UGFyYW1ldGVyKFwiYmluZGluZ0NvbnRleHRcIikgYXMgQ29udGV4dCwgLy8gcm93IGNsaWNrZWQgZm9yIGNvbnRleHQgbWVudVxuXHRcdFx0aW50ZXJuYWxNb2RlbENvbnRleHQgPSB0aGlzLmdldEJpbmRpbmdDb250ZXh0KFwiaW50ZXJuYWxcIikgYXMgSW50ZXJuYWxNb2RlbENvbnRleHQ7XG5cblx0XHRjb25zdCBjb250ZXh0TWVudVNlbGVjdGlvbiA9IHRoaXMuZ2V0UmVsZXZhbnRTZWxlY3Rpb24odGFibGVDb250ZXh0cywgY29udGV4dE1lbnVDb250ZXh0KTtcblxuXHRcdC8vIENoZWNrIGlmIGFsbCBjb250ZXh0cyBpbiBjb250ZXh0TWVudVNlbGVjdGlvbiBhcmUgaW5hY3RpdmVcblx0XHQvLyBpZiBzbywgc2V0IHRoZSBpbmFjdGl2ZUNvbnRleHQgcHJvcGVydHkgaW4gdGhlIGludGVybmFsIG1vZGVsIHRvIHRydWVcblx0XHQvLyBpZiBqdXN0IG9uZSBjb250ZXh0IGlzIG5vdCBpbmFjdGl2ZSwgc2V0IHRoZSBpbmFjdGl2ZUNvbnRleHQgcHJvcGVydHkgdG8gZmFsc2Vcblx0XHRsZXQgb25lQ29udGV4dElzQWN0aXZlID0gdHJ1ZTtcblx0XHRvbmVDb250ZXh0SXNBY3RpdmUgPSBjb250ZXh0TWVudVNlbGVjdGlvbi5zb21lKChjb250ZXh0KSA9PiAhY29udGV4dC5pc0luYWN0aXZlKCkpO1xuXHRcdGludGVybmFsTW9kZWxDb250ZXh0Py5zZXRQcm9wZXJ0eShcImNvbnRleHRtZW51L2luYWN0aXZlQ29udGV4dFwiLCAhb25lQ29udGV4dElzQWN0aXZlKTtcblxuXHRcdC8vIERvIG5vdCBjb25zaWRlciBlbXB0eSByb3dzIGFzIHNlbGVjdGVkIGNvbnRleHQsIGZvciBvdGhlciBhY3Rpb25zIHRoYW4gZGVsZXRlXG5cdFx0Y29uc3QgYWN0aXZlU2VsZWN0ZWRDb250ZXh0cyA9IGNvbnRleHRNZW51U2VsZWN0aW9uLmZpbHRlcihmdW5jdGlvbiAob0NvbnRleHQ6IENvbnRleHQpIHtcblx0XHRcdHJldHVybiAhb0NvbnRleHQuaXNJbmFjdGl2ZSgpO1xuXHRcdH0pO1xuXHRcdGludGVybmFsTW9kZWxDb250ZXh0Py5zZXRQcm9wZXJ0eShcImNvbnRleHRtZW51L3NlbGVjdGVkQ29udGV4dHNJbmNsdWRpbmdJbmFjdGl2ZVwiLCBjb250ZXh0TWVudVNlbGVjdGlvbik7XG5cdFx0aW50ZXJuYWxNb2RlbENvbnRleHQ/LnNldFByb3BlcnR5KFwiY29udGV4dG1lbnUvc2VsZWN0ZWRDb250ZXh0c1wiLCBhY3RpdmVTZWxlY3RlZENvbnRleHRzKTtcblx0XHQvL3Jlc2V0IG51bWJlciBvZiBzZWxlY3RlZCBjb250ZXh0cyB0byBlbnN1cmUgY2FsbGJhY2sgZm9yIGN1c3RvbSBlbmFibGUgaGFuZGxlclxuXHRcdGludGVybmFsTW9kZWxDb250ZXh0Py5zZXRQcm9wZXJ0eShcImNvbnRleHRtZW51L251bWJlck9mU2VsZWN0ZWRDb250ZXh0c1wiLCAtMSk7XG5cdFx0aW50ZXJuYWxNb2RlbENvbnRleHQ/LnNldFByb3BlcnR5KFwiY29udGV4dG1lbnUvbnVtYmVyT2ZTZWxlY3RlZENvbnRleHRzXCIsIGFjdGl2ZVNlbGVjdGVkQ29udGV4dHMubGVuZ3RoKTtcblx0XHRpbnRlcm5hbE1vZGVsQ29udGV4dD8uc2V0UHJvcGVydHkoXCJjb250ZXh0bWVudS9udW1iZXJPZlNlbGVjdGVkQ29udGV4dHNGb3JEZWxldGVcIiwgY29udGV4dE1lbnVTZWxlY3Rpb24ubGVuZ3RoKTtcblxuXHRcdGlmIChhY3RpdmVTZWxlY3RlZENvbnRleHRzLmxlbmd0aCA+IDApIHtcblx0XHRcdC8qIEFsaWduIGNvbnRleHQgbWVudSB3aXRoIFJUQSBjaGFuZ2VzIGluIHRhYmxlIHRvb2xiYXIgKi9cblx0XHRcdHRoaXMuYWxpZ25Db250ZXh0TWVudVdpdGhUYWJsZVRvb2xiYXJDaGFuZ2VzKHRhYmxlKTtcblx0XHR9XG5cblx0XHQvLyBTZXQgdGhlIHZpc2liaWxpdHkgb2YgdGhlIE1lbnVJdGVtIGZvciBDb2xsYWJvcmF0aW9uIE1hbmFnZXJcblx0XHR0aGlzLnNldENvbGxhYm9yYXRpb25NYW5hZ2VyTWVudUl0ZW1WaXNpYmlsaXR5KHRhYmxlLCBhY3RpdmVTZWxlY3RlZENvbnRleHRzKTtcblxuXHRcdC8vIENoZWNrIGlmIHRoZSBjb250ZXh0IG1lbnUgY29udGFpbnMgb25seSBub3QgdmlzaWJsZSBpdGVtc1xuXHRcdC8vIGluIHRoYXQgY2FzZSBwcmV2ZW50IHRoZSBjb250ZXh0IG1lbnUgZnJvbSBvcGVuaW5nXG5cdFx0Y29uc3QgY29udGV4dE1lbnUgPSB0YWJsZS5nZXRDb250ZXh0TWVudSgpIGFzIE1lbnU7XG5cdFx0Y29uc3QgbWVudUl0ZW1zID0gY29udGV4dE1lbnUuZ2V0SXRlbXMoKTtcblxuXHRcdGNvbnN0IHZpc2libGVNZW51SXRlbXMgPSBtZW51SXRlbXMuZmlsdGVyKChtZW51SXRlbSkgPT4gbWVudUl0ZW0uZ2V0VmlzaWJsZSgpKTtcblx0XHRpZiAodmlzaWJsZU1lbnVJdGVtcy5sZW5ndGggPT09IDApIHtcblx0XHRcdG9FdmVudC5wcmV2ZW50RGVmYXVsdCgpO1xuXHRcdH1cblxuXHRcdC8vIEVuYWJsZW1lbnQgb2YgdGhlIEV4cGFuZC9Db2xsYXBzZSBidXR0b25zXG5cdFx0Y29uc3QgaXNFeHBhbmRhYmxlID0gY29udGV4dE1lbnVTZWxlY3Rpb24uc29tZSgoc2luZ2xlQ29udGV4dCkgPT4gc2luZ2xlQ29udGV4dC5pc0V4cGFuZGVkKCkgIT09IHVuZGVmaW5lZCk7XG5cdFx0Y29uc3QgaXNDb2xsYXBzYWJsZSA9IGNvbnRleHRNZW51U2VsZWN0aW9uLnNvbWUoKHNpbmdsZUNvbnRleHQpID0+IHNpbmdsZUNvbnRleHQuaXNFeHBhbmRlZCgpKTtcblx0XHRpbnRlcm5hbE1vZGVsQ29udGV4dD8uc2V0UHJvcGVydHkoXCJjb250ZXh0bWVudS9pc0V4cGFuZGFibGVcIiwgaXNFeHBhbmRhYmxlKTtcblx0XHRpbnRlcm5hbE1vZGVsQ29udGV4dD8uc2V0UHJvcGVydHkoXCJjb250ZXh0bWVudS9pc0NvbGxhcHNhYmxlXCIsIGlzQ29sbGFwc2FibGUpO1xuXG5cdFx0Ly8gQWN0aW9uIGVuYWJsZW1lbnQgZm9yIERlbGV0ZVxuXHRcdGludGVybmFsTW9kZWxDb250ZXh0Py5zZXRQcm9wZXJ0eShcImNvbnRyb2xJZFwiLCB0YWJsZS5nZXRJZCgpKTtcblx0XHRkZWxldGVIZWxwZXIudXBkYXRlRGVsZXRlSW5mb0ZvclNlbGVjdGVkQ29udGV4dHMoaW50ZXJuYWxNb2RlbENvbnRleHQsIGNvbnRleHRNZW51U2VsZWN0aW9uLCB0cnVlKTtcblxuXHRcdC8vIEFjdGlvbiBlbmFibGVtZW50IGZvciBJQk5cblx0XHRpZiAoIXRhYmxlLmRhdGEoXCJlbmFibGVBbmFseXRpY3NcIikpIHtcblx0XHRcdGNvbnN0IG5hdmlnYXRpb25BdmFpbGFibGVNYXAgPSB0YWJsZT8uZGF0YShcIm5hdmlnYXRpb25BdmFpbGFibGVNYXBcIik7XG5cdFx0XHRUYWJsZVJ1bnRpbWUuc2V0SW50ZW50QmFzZWROYXZpZ2F0aW9uRW5hYmxlbWVudChpbnRlcm5hbE1vZGVsQ29udGV4dCwgbmF2aWdhdGlvbkF2YWlsYWJsZU1hcCwgYWN0aXZlU2VsZWN0ZWRDb250ZXh0cywgdHJ1ZSk7XG5cdFx0fVxuXG5cdFx0Ly8gQWN0aW9uIGVuYWJsZW1lbnQgZm9yIE1hc3MgRWRpdFxuXHRcdGNvbnN0IHVwZGF0YWJsZVByb3BlcnR5UGF0aCA9IHRhYmxlPy5kYXRhKFwidXBkYXRhYmxlUHJvcGVydHlQYXRoXCIpO1xuXHRcdGNvbnN0IGRyYWZ0ID0gdGFibGU/LmRhdGEoXCJkcmFmdFwiKTtcblx0XHRjb25zdCByZWFkT25seURyYWZ0RW5hYmxlZCA9IHRhYmxlLmRhdGEoXCJkaXNwbGF5TW9kZVByb3BlcnR5QmluZGluZ1wiKSA9PT0gXCJ0cnVlXCIgJiYgZHJhZnQgIT09IFwidW5kZWZpbmVkXCI7XG5cdFx0Y29uc3QgdXBkYXRhYmxlQ29udGV4dHM6IENvbnRleHRbXSA9IFtdO1xuXHRcdGZvciAoY29uc3Qgc2VsZWN0ZWRDb250ZXh0IG9mIGFjdGl2ZVNlbGVjdGVkQ29udGV4dHMpIHtcblx0XHRcdGlmIChUYWJsZVJ1bnRpbWUuaXNVcGRhdGFibGVDb250ZXh0KHVwZGF0YWJsZVByb3BlcnR5UGF0aCwgc2VsZWN0ZWRDb250ZXh0LCByZWFkT25seURyYWZ0RW5hYmxlZCkpIHtcblx0XHRcdFx0dXBkYXRhYmxlQ29udGV4dHMucHVzaChzZWxlY3RlZENvbnRleHQpO1xuXHRcdFx0fVxuXHRcdH1cblx0XHRpbnRlcm5hbE1vZGVsQ29udGV4dD8uc2V0UHJvcGVydHkoXCJjb250ZXh0bWVudS91cGRhdGFibGVDb250ZXh0c1wiLCB1cGRhdGFibGVDb250ZXh0cyk7XG5cblx0XHRjb25zdCB0YWJsZURlZmluaXRpb24gPSB0aGlzLmdldFRhYmxlRGVmaW5pdGlvbigpO1xuXHRcdGlmICh0YWJsZURlZmluaXRpb24uY29udHJvbC5jcmVhdGVFbmFibGVtZW50ICYmIGNvbnRleHRNZW51U2VsZWN0aW9uLmxlbmd0aCA9PT0gMSkge1xuXHRcdFx0VGFibGVSdW50aW1lLl91cGRhdGVDcmVhdGVFbmFibGVtZW50KFxuXHRcdFx0XHRpbnRlcm5hbE1vZGVsQ29udGV4dCxcblx0XHRcdFx0dGFibGVEZWZpbml0aW9uLmNvbnRyb2wuY3JlYXRlRW5hYmxlbWVudCxcblx0XHRcdFx0dGFibGUsXG5cdFx0XHRcdGNvbnRleHRNZW51U2VsZWN0aW9uWzBdLFxuXHRcdFx0XHR0YWJsZURlZmluaXRpb24uY29udHJvbC5ub2RlVHlwZSxcblx0XHRcdFx0dHJ1ZVxuXHRcdFx0KTtcblx0XHR9XG5cblx0XHRUYWJsZVJ1bnRpbWUudXBkYXRlQ3V0Q29weVBhc3RlRW5hYmxlbWVudChpbnRlcm5hbE1vZGVsQ29udGV4dC5nZXRPYmplY3QoKSwgdGFibGUsIHRydWUpO1xuXHRcdFRhYmxlUnVudGltZS51cGRhdGVNb3ZlVXBEb3duRW5hYmxlbWVudChpbnRlcm5hbE1vZGVsQ29udGV4dC5nZXRPYmplY3QoKSwgdGFibGUsIHRydWUpO1xuXG5cdFx0Ly8gT3RoZXIgYWN0aW9uIGVuYWJsZW1lbnRcblx0XHRBY3Rpb25SdW50aW1lLnNldEFjdGlvbkVuYWJsZW1lbnQoXG5cdFx0XHRpbnRlcm5hbE1vZGVsQ29udGV4dCxcblx0XHRcdEpTT04ucGFyc2UodGFibGVEZWZpbml0aW9uLm9wZXJhdGlvbkF2YWlsYWJsZU1hcCksXG5cdFx0XHRhY3RpdmVTZWxlY3RlZENvbnRleHRzLFxuXHRcdFx0XCJ0YWJsZVwiLFxuXHRcdFx0dHJ1ZVxuXHRcdCk7XG5cdH1cblxuXHRnZXRSZWxldmFudFNlbGVjdGlvbih0YWJsZUNvbnRleHRzOiBDb250ZXh0W10sIGNvbnRleHRNZW51Q29udGV4dDogQ29udGV4dCk6IENvbnRleHRbXSB7XG5cdFx0bGV0IGNvbnRleHRNZW51U2VsZWN0aW9uOiBDb250ZXh0W107XG5cdFx0aWYgKHRhYmxlQ29udGV4dHMuaW5jbHVkZXMoY29udGV4dE1lbnVDb250ZXh0KSkge1xuXHRcdFx0Y29udGV4dE1lbnVTZWxlY3Rpb24gPSB0YWJsZUNvbnRleHRzO1xuXHRcdH0gZWxzZSB7XG5cdFx0XHRjb250ZXh0TWVudVNlbGVjdGlvbiA9IFtjb250ZXh0TWVudUNvbnRleHRdIGFzIENvbnRleHRbXTtcblx0XHR9XG5cdFx0cmV0dXJuIGNvbnRleHRNZW51U2VsZWN0aW9uO1xuXHR9XG59XG4iXSwibWFwcGluZ3MiOiI7Ozs7Ozs7OztNQW9CcUJBLGtCQUFrQjtJQUFBLFNBQUFBLG1CQUFBO01BQUEsS0FDNUJDLGlCQUFpQixHQUFHLEtBQUs7SUFBQTtJQUFBQyxRQUFBLEdBQUFGLGtCQUFBO0lBQUEsSUFBQUcsTUFBQSxHQUFBSCxrQkFBQSxDQUFBSSxTQUFBO0lBQUFELE1BQUEsQ0FFbkNFLFVBQVUsR0FBVixTQUFBQSxVQUFVQSxDQUFDQyxVQUFvQixFQUFRO01BQ3RDO0lBQUE7O0lBR0Q7QUFDRDtBQUNBO0FBQ0EsT0FIQztJQUFBSCxNQUFBLENBSUFJLHVDQUF1QyxHQUF2QyxTQUFBQSx1Q0FBdUNBLENBQUNDLEtBQWUsRUFBUTtNQUM5RCxNQUFNQyxXQUFXLEdBQUdELEtBQUssQ0FBQ0UsY0FBYyxDQUFDLENBQVM7TUFDbEQsTUFBTUMsc0JBQWtDLEdBQUcsRUFBRTtNQUM3QyxNQUFNQyxZQUFZLEdBQUdKLEtBQUssQ0FBQ0ssVUFBVSxDQUFDLENBQUM7TUFDdkNELFlBQVksRUFBRUUsT0FBTyxDQUFFQyxXQUFXLElBQUs7UUFDdEMsTUFBTUMsZUFBZSxHQUFHRCxXQUFXLENBQUNFLGNBQWMsQ0FBQyxRQUFRLENBQVc7UUFDdEU7UUFDQSxJQUFJLElBQUksQ0FBQ0MsY0FBYyxDQUFDRixlQUFlLENBQUMsRUFBRTtVQUN6QztVQUNBLElBQUksQ0FBQ0csMEJBQTBCLENBQUNILGVBQWUsRUFBRVAsV0FBVyxDQUFDO1FBQzlEO1FBQ0E7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
@@ -326,6 +326,7 @@ export default class ContextMenuHandler implements IInterfaceWithMixin {
326
326
  const activeSelectedContexts = contextMenuSelection.filter(function (oContext: Context) {
327
327
  return !oContext.isInactive();
328
328
  });
329
+ internalModelContext?.setProperty("contextmenu/selectedContextsIncludingInactive", contextMenuSelection);
329
330
  internalModelContext?.setProperty("contextmenu/selectedContexts", activeSelectedContexts);
330
331
  //reset number of selected contexts to ensure callback for custom enable handler
331
332
  internalModelContext?.setProperty("contextmenu/numberOfSelectedContexts", -1);
@@ -45,6 +45,9 @@ sap.ui.define(["sap/base/Log", "sap/fe/core/CommonUtils", "sap/fe/core/controlle
45
45
  if (!forContextMenu || internalContext.getProperty("numberOfSelectedContexts") > 0) {
46
46
  TableRuntime.clearSelection(table);
47
47
  table.fireSelectionChange();
48
+ } else if (forContextMenu) {
49
+ // Using the context menu implicitly defines a context for the action
50
+ table.fireSelectionChange();
48
51
  }
49
52
  internalContext.setProperty("nodeUpdatesInfo/cutEnablement", false);
50
53
  internalContext.setProperty("contextmenu/nodeUpdatesInfo/cutEnablement", false);
@@ -491,4 +494,4 @@ sap.ui.define(["sap/base/Log", "sap/fe/core/CommonUtils", "sap/fe/core/controlle
491
494
  _exports = TableHierarchy;
492
495
  return _exports;
493
496
  }, false);
494
- //# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJuYW1lcyI6WyJEcm9wUG9zaXRpb24iLCJUYWJsZUhpZXJhcmNoeSIsIl9leHBvcnRzIiwiX3Byb3RvIiwicHJvdG90eXBlIiwic2V0dXBNaXhpbiIsIl9iYXNlQ2xhc3MiLCJfb25Db3B5Q3V0IiwiZXZ0IiwiZm9yQ29udGV4dE1lbnUiLCJhY3Rpb24iLCJ0YWJsZSIsImdldFNvdXJjZSIsImdldFBhcmVudCIsIm1lbnUiLCJpbnRlcm5hbENvbnRleHQiLCJnZXRCaW5kaW5nQ29udGV4dCIsInNlbGVjdGVkQ29udGV4dHMiLCJnZXRTZWxlY3RlZENvbnRleHRzIiwibGVuZ3RoIiwiTG9nIiwiZXJyb3IiLCJzZXRQcm9wZXJ0eSIsIk1lc3NhZ2VUb2FzdCIsInNob3ciLCJSZXNvdXJjZU1vZGVsSGVscGVyIiwiZ2V0UmVzb3VyY2VNb2RlbCIsImdldFRleHQiLCJnZXRQcm9wZXJ0eSIsIlRhYmxlUnVudGltZSIsImNsZWFyU2VsZWN0aW9uIiwiZmlyZVNlbGVjdGlvbkNoYW5nZSIsIl9vbkRyYWdFbnRlckRvY3VtZW50IiwidWk1RXZlbnQiLCJkcmFnZ2VkQ29udGV4dCIsImdldFBhcmFtZXRlciIsImdldENvbnRlbnQiLCJnZXRSb3dCaW5kaW5nIiwiZ2V0QmluZGluZyIsInByZXZlbnREZWZhdWx0IiwidGFyZ2V0Q29udGV4dCIsImlzQW5jZXN0b3JPZiIsImRpc2FibGVkQmV0d2VlbiIsImRpc2FibGVkT24iLCJ0YWJsZURlZmluaXRpb24iLCJnZXRUYWJsZURlZmluaXRpb24iLCJpc01vdmVBbGxvd2VkSW5mbyIsImNvbnRyb2wiLCJpc01vdmVUb1Bvc2l0aW9uQWxsb3dlZCIsImN1c3RvbUZ1bmN0aW9uIiwiRlBNSGVscGVyIiwiZ2V0Q3VzdG9tRnVuY3Rpb24iLCJtb2R1bGVOYW1lIiwibWV0aG9kTmFtZSIsInVuZGVmaW5lZCIsInNhZmVJc01vdmVBbGxvd2VkIiwiYW5ub3RhdGlvbiIsImFsbG93RHJvcEJldHdlZW5Ob2RlcyIsIk1hdGgiLCJhYnMiLCJnZXRJbmRleCIsImdldExlbmd0aCIsImNoYW5nZVNpYmxpbmdGb3JSb290c1N1cHBvcnRlZCIsImlzRHJvcEJldHdlZW5BbGxvd2VkRm9yRHJhZyIsImFsbG93ZWREcm9wUG9zaXRpb24iLCJPbk9yQmV0d2VlbiIsIk9uIiwiQmV0d2VlbiIsInNldERyb3BQb3NpdGlvbiIsIl9vbkRyYWdTdGFydERvY3VtZW50IiwiY29udGV4dCIsInVwZGF0YWJsZVByb3BlcnR5UGF0aCIsImRpc2FibGVEcmFnIiwiaXNSZWxhdGl2ZSIsImlzTW92YWJsZUluZm8iLCJpc05vZGVNb3ZhYmxlIiwiX2Vycm9yIiwiX29uRHJvcERvY3VtZW50IiwiQnVzeUxvY2tlciIsImxvY2siLCJkcm9wcGVkT25Db250ZXh0IiwiZHJvcEluZm8iLCJwb3NpdGlvbiIsInBhcmVudENvbnRleHQiLCJjb250ZXh0QmVmb3JlIiwiY29udGV4dEFmdGVyIiwiZ2V0Q29udGV4dEFmdGVyIiwiZ2V0Q29udGV4dEJlZm9yZSIsIm1vdmVkQ29udGV4dCIsIlByb21pc2UiLCJhbGwiLCJkcm9wQ29udGV4dCIsInJlcXVlc3RTaWRlRWZmZWN0c0ZvckNoYW5nZU5leHRTaWJsaW5nQWN0aW9uIiwiZ2V0VHJhbnNsYXRlZFRleHQiLCJtZXNzYWdlIiwidW5sb2NrIiwiX29uQ29sbGFwc2VFeHBhbmROb2RlIiwiX3VpNUV2ZW50IiwiZXhwYW5kIiwicHJvbWlzZUFycmF5IiwibWFwIiwic2luZ2xlQ29udGV4dCIsImlzRXhwYW5kZWQiLCJjb2xsYXBzZSIsIk51bWJlciIsIk1BWF9TQUZFX0lOVEVHRVIiLCJfb25Nb3ZlVXBEb3duIiwibW92ZVVwIiwiYXJndW1lbnRzIiwibWRjVGFibGUiLCJzZXRCdXN5IiwicmVxdWVzdFBhcmVudCIsImNvbnRleHRNb3ZlZCIsIm1vdmVQcm9taXNlIiwicHJldmlvdXNTaWJsaW5nIiwicmVxdWVzdFNpYmxpbmciLCJtb3ZlIiwibmV4dFNpYmxpbmciLCJwYXJlbnQiLCJuZXdJbmRleCIsInNjcm9sbFRvSW5kZXgiLCJmb2N1c1JvdyIsIl9yZXF1ZXN0U2lkZUVmZmVjdHNGb3JIaWVyYXJjaHlBY3Rpb25zIiwicmVxdWVzdFNpZGVFZmZlY3RzRm9yQ29weUFjdGlvbiIsImVudGl0eVBhdGgiLCJkYXRhIiwibWV0YU1vZGVsIiwiZ2V0TW9kZWwiLCJnZXRNZXRhTW9kZWwiLCJ0YXJnZXRPYmplY3QiLCJnZXRDb250ZXh0IiwiY29udmVydE1ldGFNb2RlbENvbnRleHQiLCJNZXRhTW9kZWxDb252ZXJ0ZXIiLCJlbnRpdHlUeXBlIiwidGFyZ2V0VHlwZSIsImFjdGlvbk5hbWUiLCJhbm5vdGF0aW9ucyIsIkhpZXJhcmNoeSIsImhpZXJhcmNoeVF1YWxpZmllciIsImFwcENvbXBvbmVudCIsIkNvbW1vblV0aWxzIiwiZ2V0QXBwQ29tcG9uZW50Iiwic2lkZUVmZmVjdHNTZXJ2aWNlIiwiZ2V0U2lkZUVmZmVjdHNTZXJ2aWNlIiwic2lkZUVmZmVjdHMiLCJnZXRPRGF0YUFjdGlvblNpZGVFZmZlY3RzIiwicmVxdWVzdFNpZGVFZmZlY3RzRm9yT0RhdGFBY3Rpb24iLCJhbGxvd2VkIiwiaXNBbGxvd2VkIiwicGFyZW50QmVmb3JlIiwicGFyYW1zQmVmb3JlIiwiZ2V0RHJvcEJldHdlZW5QYXJhbWV0ZXJzIiwicGFyZW50QWZ0ZXIiLCJwYXJhbXNBZnRlciIsImNvbnRleHRJbmRleCIsIkVycm9yIiwibGlzdEJpbmRpbmciLCJnZXRBbGxDdXJyZW50Q29udGV4dHMiLCJmaW5kIiwiY3R4IiwiaW5mbyIsImludGVybmFsTW9kZWxDb250ZXh0IiwiaXNUYWJsZVNvcnRlZCIsIm1vdmVDb250ZXh0IiwiZmluYWxseSIsInBhcmFtcyJdLCJzb3VyY2VSb290IjoiLiIsInNvdXJjZXMiOlsiVGFibGVIaWVyYXJjaHkudHMiXSwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHR5cGUgeyBFbnRpdHlTZXQsIE5hdmlnYXRpb25Qcm9wZXJ0eSB9IGZyb20gXCJAc2FwLXV4L3ZvY2FidWxhcmllcy10eXBlc1wiO1xuaW1wb3J0IExvZyBmcm9tIFwic2FwL2Jhc2UvTG9nXCI7XG5pbXBvcnQgeyB0eXBlIElJbnRlcmZhY2VXaXRoTWl4aW4gfSBmcm9tIFwic2FwL2ZlL2Jhc2UvQ2xhc3NTdXBwb3J0XCI7XG5pbXBvcnQgQ29tbW9uVXRpbHMgZnJvbSBcInNhcC9mZS9jb3JlL0NvbW1vblV0aWxzXCI7XG5pbXBvcnQgQnVzeUxvY2tlciBmcm9tIFwic2FwL2ZlL2NvcmUvY29udHJvbGxlcmV4dGVuc2lvbnMvQnVzeUxvY2tlclwiO1xuaW1wb3J0ICogYXMgTWV0YU1vZGVsQ29udmVydGVyIGZyb20gXCJzYXAvZmUvY29yZS9jb252ZXJ0ZXJzL01ldGFNb2RlbENvbnZlcnRlclwiO1xuaW1wb3J0IEZQTUhlbHBlciBmcm9tIFwic2FwL2ZlL2NvcmUvaGVscGVycy9GUE1IZWxwZXJcIjtcbmltcG9ydCB7IHR5cGUgSW50ZXJuYWxNb2RlbENvbnRleHQgfSBmcm9tIFwic2FwL2ZlL2NvcmUvaGVscGVycy9Nb2RlbEhlbHBlclwiO1xuaW1wb3J0IFJlc291cmNlTW9kZWxIZWxwZXIgZnJvbSBcInNhcC9mZS9jb3JlL2hlbHBlcnMvUmVzb3VyY2VNb2RlbEhlbHBlclwiO1xuaW1wb3J0IHR5cGUgTWVudSBmcm9tIFwic2FwL20vTWVudVwiO1xuaW1wb3J0IE1lc3NhZ2VUb2FzdCBmcm9tIFwic2FwL20vTWVzc2FnZVRvYXN0XCI7XG5pbXBvcnQgdHlwZSBVSTVFdmVudCBmcm9tIFwic2FwL3VpL2Jhc2UvRXZlbnRcIjtcbmltcG9ydCB0eXBlIENvbnRyb2wgZnJvbSBcInNhcC91aS9jb3JlL0NvbnRyb2xcIjtcbmltcG9ydCB0eXBlIFVJNUVsZW1lbnQgZnJvbSBcInNhcC91aS9jb3JlL0VsZW1lbnRcIjtcbmltcG9ydCB0eXBlIERyYWdEcm9wSW5mbyBmcm9tIFwic2FwL3VpL2NvcmUvZG5kL0RyYWdEcm9wSW5mb1wiO1xuaW1wb3J0IHR5cGUgTURDVGFibGUgZnJvbSBcInNhcC91aS9tZGMvVGFibGVcIjtcbmltcG9ydCB0eXBlIENvbnRleHQgZnJvbSBcInNhcC91aS9tb2RlbC9vZGF0YS92NC9Db250ZXh0XCI7XG5pbXBvcnQgdHlwZSBPRGF0YUxpc3RCaW5kaW5nIGZyb20gXCJzYXAvdWkvbW9kZWwvb2RhdGEvdjQvT0RhdGFMaXN0QmluZGluZ1wiO1xuaW1wb3J0IHsgdHlwZSBJVGFibGVCbG9jayB9IGZyb20gXCIuLi9UYWJsZUFQSVwiO1xuaW1wb3J0IFRhYmxlUnVudGltZSBmcm9tIFwiLi4vVGFibGVSdW50aW1lXCI7XG5cbmVudW0gRHJvcFBvc2l0aW9uIHtcblx0T24gPSBcIk9uXCIsXG5cdEJldHdlZW4gPSBcIkJldHdlZW5cIixcblx0T25PckJldHdlZW4gPSBcIk9uT3JCZXR3ZWVuXCJcbn1cblxudHlwZSBEcm9wSW5mb3JtYXRpb24gPVxuXHR8IHsgcG9zaXRpb246IERyb3BQb3NpdGlvbi5PbjsgcGFyZW50Q29udGV4dDogQ29udGV4dCB8IG51bGwgfVxuXHR8IHsgcG9zaXRpb246IERyb3BQb3NpdGlvbi5CZXR3ZWVuOyBjb250ZXh0QmVmb3JlOiBDb250ZXh0IHwgbnVsbDsgY29udGV4dEFmdGVyOiBDb250ZXh0IHwgbnVsbCB9O1xuXG5leHBvcnQgZGVmYXVsdCBjbGFzcyBUYWJsZUhpZXJhcmNoeSBpbXBsZW1lbnRzIElJbnRlcmZhY2VXaXRoTWl4aW4ge1xuXHRzZXR1cE1peGluKF9iYXNlQ2xhc3M6IEZ1bmN0aW9uKTogdm9pZCB7XG5cdFx0Ly8gVGhpcyBtZXRob2QgaXMgbmVlZGVkIHRvIGltcGxlbWVudCBpbnRlcmZhY2UgSUludGVyZmFjZVdpdGhNaXhpblxuXHR9XG5cblx0LyoqXG5cdCAqIEhhbmRsZXMgdGhlIEN1dC9Db3B5IG9wZXJhdGlvbi5cblx0ICogQHBhcmFtIGV2dCBUaGUgVUk1IGV2ZW50XG5cdCAqIEBwYXJhbSBmb3JDb250ZXh0TWVudVxuXHQgKi9cblx0X29uQ29weUN1dCh0aGlzOiBJVGFibGVCbG9jayAmIFRhYmxlSGllcmFyY2h5LCBldnQ6IFVJNUV2ZW50PHt9LCBVSTVFbGVtZW50PiwgZm9yQ29udGV4dE1lbnU6IGJvb2xlYW4sIGFjdGlvbjogXCJDb3B5XCIgfCBcIkN1dFwiKTogdm9pZCB7XG5cdFx0bGV0IHRhYmxlOiBNRENUYWJsZTtcblx0XHRpZiAoIWZvckNvbnRleHRNZW51KSB7XG5cdFx0XHR0YWJsZSA9IGV2dC5nZXRTb3VyY2UoKS5nZXRQYXJlbnQoKSBhcyBNRENUYWJsZTtcblx0XHR9IGVsc2Uge1xuXHRcdFx0Y29uc3QgbWVudSA9IGV2dC5nZXRTb3VyY2UoKS5nZXRQYXJlbnQoKSBhcyBNZW51O1xuXHRcdFx0dGFibGUgPSBtZW51LmdldFBhcmVudCgpPy5nZXRQYXJlbnQoKSBhcyBNRENUYWJsZTtcblx0XHR9XG5cdFx0Y29uc3QgaW50ZXJuYWxDb250ZXh0ID0gdGFibGUuZ2V0QmluZGluZ0NvbnRleHQoXCJpbnRlcm5hbFwiKSBhcyBJbnRlcm5hbE1vZGVsQ29udGV4dDtcblx0XHRjb25zdCBzZWxlY3RlZENvbnRleHRzID0gdGhpcy5nZXRTZWxlY3RlZENvbnRleHRzKCk7XG5cdFx0aWYgKHNlbGVjdGVkQ29udGV4dHMubGVuZ3RoID4gMSkge1xuXHRcdFx0TG9nLmVycm9yKGBNdWx0aSAke2FjdGlvbiA9PT0gXCJDdXRcIiA/IFwiY3V0dGluZ1wiIDogXCJjb3B5aW5nXCJ9IGlzIG5vdCBzdXBwb3J0ZWRgKTtcblx0XHRcdHJldHVybjtcblx0XHR9XG5cblx0XHRpbnRlcm5hbENvbnRleHQuc2V0UHJvcGVydHkoXCJub2RlVXBkYXRlc0luZm8vcGFzdGFibGVDb250ZXh0c1wiLCBzZWxlY3RlZENvbnRleHRzKTtcblx0XHRpbnRlcm5hbENvbnRleHQuc2V0UHJvcGVydHkoXCJub2RlVXBkYXRlc0luZm8vbGFzdEFjdGlvblwiLCBhY3Rpb24pO1xuXHRcdE1lc3NhZ2VUb2FzdC5zaG93KFJlc291cmNlTW9kZWxIZWxwZXIuZ2V0UmVzb3VyY2VNb2RlbCh0YWJsZSkuZ2V0VGV4dChcIk1fQ1VUQ09QWV9SRUFEWVwiKSk7XG5cdFx0aWYgKCFmb3JDb250ZXh0TWVudSB8fCBpbnRlcm5hbENvbnRleHQuZ2V0UHJvcGVydHkoXCJudW1iZXJPZlNlbGVjdGVkQ29udGV4dHNcIikgPiAwKSB7XG5cdFx0XHRUYWJsZVJ1bnRpbWUuY2xlYXJTZWxlY3Rpb24odGFibGUpO1xuXHRcdFx0dGFibGUuZmlyZVNlbGVjdGlvbkNoYW5nZSgpO1xuXHRcdH1cblxuXHRcdGludGVybmFsQ29udGV4dC5zZXRQcm9wZXJ0eShcIm5vZGVVcGRhdGVzSW5mby9jdXRFbmFibGVtZW50XCIsIGZhbHNlKTtcblx0XHRpbnRlcm5hbENvbnRleHQuc2V0UHJvcGVydHkoXCJjb250ZXh0bWVudS9ub2RlVXBkYXRlc0luZm8vY3V0RW5hYmxlbWVudFwiLCBmYWxzZSk7XG5cdFx0aW50ZXJuYWxDb250ZXh0LnNldFByb3BlcnR5KFwibm9kZVVwZGF0ZXNJbmZvL2NvcHlFbmFibGVtZW50XCIsIGZhbHNlKTtcblx0XHRpbnRlcm5hbENvbnRleHQuc2V0UHJvcGVydHkoXCJjb250ZXh0bWVudS9ub2RlVXBkYXRlc0luZm8vY29weUVuYWJsZW1lbnRcIiwgZmFsc2UpO1xuXHR9XG5cblx0LyoqXG5cdCAqIFRoZSBkcmFnZ2VkIGVsZW1lbnQgZW50ZXJzIGEgdGFibGUgcm93LlxuXHQgKiBAcGFyYW0gdWk1RXZlbnQgVUk1IGV2ZW50IGNvbWluZyBmcm9tIHRoZSBNREMgZHJhZyBhbmQgZHJvcCBjb25maWdcblx0ICovXG5cdF9vbkRyYWdFbnRlckRvY3VtZW50KFxuXHRcdHRoaXM6IElUYWJsZUJsb2NrICYgVGFibGVIaWVyYXJjaHksXG5cdFx0dWk1RXZlbnQ6IFVJNUV2ZW50PHsgYmluZGluZ0NvbnRleHQ6IENvbnRleHQ7IGRyYWdTb3VyY2U6IENvbnRleHQ7IGRyb3BQb3NpdGlvbjogXCJCZWZvcmVcIiB8IFwiQWZ0ZXJcIiB8IFwiT25cIiB9LCBEcmFnRHJvcEluZm8+XG5cdCk6IHZvaWQge1xuXHRcdGNvbnN0IGRyYWdnZWRDb250ZXh0ID0gdWk1RXZlbnQuZ2V0UGFyYW1ldGVyKFwiZHJhZ1NvdXJjZVwiKTtcblx0XHRpZiAodGhpcy5nZXRDb250ZW50KCkuZ2V0Um93QmluZGluZygpICE9PSBkcmFnZ2VkQ29udGV4dC5nZXRCaW5kaW5nKCkpIHtcblx0XHRcdC8vIFRoZSBkcmFnIGlzIGRvbmUgb24gYSBkaWZmZXJlbnQgdGFibGUgLT4gbm90IGF1dGhvcml6ZWRcblx0XHRcdHVpNUV2ZW50LnByZXZlbnREZWZhdWx0KCk7XG5cdFx0XHRyZXR1cm47XG5cdFx0fVxuXG5cdFx0Y29uc3QgdGFyZ2V0Q29udGV4dDogQ29udGV4dCB8IG51bGwgPSB1aTVFdmVudC5nZXRQYXJhbWV0ZXIoXCJiaW5kaW5nQ29udGV4dFwiKTtcblx0XHRpZiAoZHJhZ2dlZENvbnRleHQuaXNBbmNlc3Rvck9mKHRhcmdldENvbnRleHQpKSB7XG5cdFx0XHQvLyBUaGUgYW5jZXN0b3IgaXMgZHJvcHBlZCBvbiBhIGRlc2NlbmRhbnQgLT4gbm90IGF1dGhvcml6ZWRcblx0XHRcdHVpNUV2ZW50LnByZXZlbnREZWZhdWx0KCk7XG5cdFx0XHRyZXR1cm47XG5cdFx0fVxuXG5cdFx0bGV0IGRpc2FibGVkQmV0d2VlbiA9IGZhbHNlO1xuXHRcdGxldCBkaXNhYmxlZE9uID0gZmFsc2U7XG5cdFx0Y29uc3QgdGFibGVEZWZpbml0aW9uID0gdGhpcy5nZXRUYWJsZURlZmluaXRpb24oKTtcblx0XHRjb25zdCBpc01vdmVBbGxvd2VkSW5mbyA9IHRhYmxlRGVmaW5pdGlvbi5jb250cm9sLmlzTW92ZVRvUG9zaXRpb25BbGxvd2VkO1xuXHRcdGNvbnN0IGN1c3RvbUZ1bmN0aW9uID0gaXNNb3ZlQWxsb3dlZEluZm9cblx0XHRcdD8gRlBNSGVscGVyLmdldEN1c3RvbUZ1bmN0aW9uPChub2RlOiBDb250ZXh0LCBwYXJlbnQ6IENvbnRleHQgfCBudWxsKSA9PiBib29sZWFuPihcblx0XHRcdFx0XHRpc01vdmVBbGxvd2VkSW5mby5tb2R1bGVOYW1lLFxuXHRcdFx0XHRcdGlzTW92ZUFsbG93ZWRJbmZvLm1ldGhvZE5hbWUsXG5cdFx0XHRcdFx0dWk1RXZlbnQuZ2V0U291cmNlKCkuZ2V0UGFyZW50KCkgYXMgQ29udHJvbFxuXHRcdFx0ICApXG5cdFx0XHQ6IHVuZGVmaW5lZDtcblxuXHRcdGlmICh0YXJnZXRDb250ZXh0ID09PSB0aGlzLmdldENvbnRlbnQoKS5nZXRCaW5kaW5nQ29udGV4dCgpKSB7XG5cdFx0XHQvLyBUaGUgZHJhZyBpcyBkb25lIG9uIHRoZSB0YWJsZSBpdHNlbGYgLT4gZHJvcCBhcyByb290IG5vZGUpXG5cdFx0XHRkaXNhYmxlZE9uID0gIXRoaXMuc2FmZUlzTW92ZUFsbG93ZWQoY3VzdG9tRnVuY3Rpb24sIGRyYWdnZWRDb250ZXh0LCBudWxsKTtcblx0XHRcdGRpc2FibGVkQmV0d2VlbiA9IHRydWU7XG5cdFx0fSBlbHNlIHtcblx0XHRcdGRpc2FibGVkT24gPSAhdGhpcy5zYWZlSXNNb3ZlQWxsb3dlZChjdXN0b21GdW5jdGlvbiwgZHJhZ2dlZENvbnRleHQsIHRhcmdldENvbnRleHQpO1xuXHRcdFx0ZGlzYWJsZWRCZXR3ZWVuID0gdGFibGVEZWZpbml0aW9uLmFubm90YXRpb24uYWxsb3dEcm9wQmV0d2Vlbk5vZGVzICE9PSB0cnVlO1xuXG5cdFx0XHRpZiAoXG5cdFx0XHRcdE1hdGguYWJzKHRhcmdldENvbnRleHQuZ2V0SW5kZXgoKSEgLSBkcmFnZ2VkQ29udGV4dC5nZXRJbmRleCgpISkgPT09IDEgJiZcblx0XHRcdFx0ISh0YXJnZXRDb250ZXh0LmdldEluZGV4KCkgPT09IDAgJiYgdWk1RXZlbnQuZ2V0UGFyYW1ldGVyKFwiZHJvcFBvc2l0aW9uXCIpID09PSBcIkJlZm9yZVwiKSAmJlxuXHRcdFx0XHQhKFxuXHRcdFx0XHRcdHRhcmdldENvbnRleHQuZ2V0SW5kZXgoKSA9PT0gdGhpcy5nZXRDb250ZW50KCkuZ2V0Um93QmluZGluZygpLmdldExlbmd0aCgpIC0gMSAmJlxuXHRcdFx0XHRcdHVpNUV2ZW50LmdldFBhcmFtZXRlcihcImRyb3BQb3NpdGlvblwiKSA9PT0gXCJBZnRlclwiXG5cdFx0XHRcdClcblx0XHRcdCkge1xuXHRcdFx0XHQvL1xuXHRcdFx0XHRkaXNhYmxlZEJldHdlZW4gPSB0cnVlO1xuXHRcdFx0fVxuXG5cdFx0XHQvLyBJZiB0aGUgZHJvcCBiZXR3ZWVuIG5vZGUgaXMgYWxsb3dlZCwgd2UgbmVlZCB0byBjaGVjayBpZiB0aGUgdGFyZ2V0IGlzIGEgcm9vdCBub2RlIGFuZCBpZiB0aGUgdGFibGUgc3VwcG9ydHMgY2hhbmdlU2libGluZ0ZvclJvb3RzXG5cdFx0XHRpZiAoXG5cdFx0XHRcdCFkaXNhYmxlZEJldHdlZW4gJiZcblx0XHRcdFx0IXRhYmxlRGVmaW5pdGlvbi5hbm5vdGF0aW9uLmNoYW5nZVNpYmxpbmdGb3JSb290c1N1cHBvcnRlZCAmJlxuXHRcdFx0XHR0YXJnZXRDb250ZXh0LmdldFByb3BlcnR5KFwiQCR1aTUubm9kZS5sZXZlbFwiKSA9PT0gMVxuXHRcdFx0KSB7XG5cdFx0XHRcdGRpc2FibGVkQmV0d2VlbiA9IHRydWU7XG5cdFx0XHR9XG5cblx0XHRcdC8vIENoZWNrIGN1c3RvbSBsb2dpYyBmb3IgZHJvcCBiZXR3ZWVuIGlmIHRoZXJlJ3Mgc29tZSwgYW5kIGlmIGl0J3Mgbm90IGFscmVhZHkgZGlzYWJsZWQgYXQgdGhlIHRhYmxlIGxldmVsXG5cdFx0XHRpZiAoY3VzdG9tRnVuY3Rpb24gJiYgIWRpc2FibGVkQmV0d2Vlbikge1xuXHRcdFx0XHRkaXNhYmxlZEJldHdlZW4gPSAhdGhpcy5pc0Ryb3BCZXR3ZWVuQWxsb3dlZEZvckRyYWcoY3VzdG9tRnVuY3Rpb24sIGRyYWdnZWRDb250ZXh0LCB0YXJnZXRDb250ZXh0KTtcblx0XHRcdH1cblx0XHR9XG5cblx0XHRsZXQgYWxsb3dlZERyb3BQb3NpdGlvbjogRHJvcFBvc2l0aW9uID0gRHJvcFBvc2l0aW9uLk9uT3JCZXR3ZWVuO1xuXHRcdGlmIChkaXNhYmxlZEJldHdlZW4gJiYgZGlzYWJsZWRPbikge1xuXHRcdFx0Ly9TZXQgdGhlIGVsZW1lbnQgYXMgbm9uIGRyb3BwYWJsZVxuXHRcdFx0dWk1RXZlbnQucHJldmVudERlZmF1bHQoKTtcblx0XHRcdHJldHVybjtcblx0XHR9XG5cdFx0aWYgKGRpc2FibGVkQmV0d2Vlbikge1xuXHRcdFx0YWxsb3dlZERyb3BQb3NpdGlvbiA9IERyb3BQb3NpdGlvbi5Pbjtcblx0XHR9IGVsc2UgaWYgKGRpc2FibGVkT24pIHtcblx0XHRcdGFsbG93ZWREcm9wUG9zaXRpb24gPSBEcm9wUG9zaXRpb24uQmV0d2Vlbjtcblx0XHR9XG5cdFx0dWk1RXZlbnQuZ2V0U291cmNlKCkuc2V0RHJvcFBvc2l0aW9uKGFsbG93ZWREcm9wUG9zaXRpb24pO1xuXHR9XG5cblx0LyoqXG5cdCAqIFN0YXJ0cyB0aGUgZHJhZyBvZiB0aGUgZG9jdW1lbnQuXG5cdCAqIEBwYXJhbSB1aTVFdmVudCBVSTUgZXZlbnQgY29taW5nIGZyb20gdGhlIE1EQyBkcmFnIGFuZCBkcm9wIGNvbmZpZ1xuXHQgKi9cblx0X29uRHJhZ1N0YXJ0RG9jdW1lbnQodGhpczogSVRhYmxlQmxvY2sgJiBUYWJsZUhpZXJhcmNoeSwgdWk1RXZlbnQ6IFVJNUV2ZW50PHsgYmluZGluZ0NvbnRleHQ6IENvbnRleHQgfSwgQ29udHJvbD4pOiB2b2lkIHtcblx0XHRjb25zdCBjb250ZXh0ID0gdWk1RXZlbnQuZ2V0UGFyYW1ldGVyKFwiYmluZGluZ0NvbnRleHRcIik7XG5cdFx0Y29uc3QgdXBkYXRhYmxlUHJvcGVydHlQYXRoID0gdGhpcy5nZXRUYWJsZURlZmluaXRpb24oKS5hbm5vdGF0aW9uLnVwZGF0YWJsZVByb3BlcnR5UGF0aDtcblxuXHRcdC8vIENoZWNrIGlmIHRoZSBjb250ZXh0IGNhbiBiZSB1cGRhdGVkIGFjY29yZGluZyB0byB1cGRhdGUgcmVzdHJpY3Rpb25zXG5cdFx0bGV0IGRpc2FibGVEcmFnID0gISF1cGRhdGFibGVQcm9wZXJ0eVBhdGggJiYgIWNvbnRleHQuZ2V0UHJvcGVydHkodXBkYXRhYmxlUHJvcGVydHlQYXRoKTtcblxuXHRcdC8vIEluIGNhc2Ugb2YgYSBUcmVlVGFibGUgaW4gYSBMaXN0UmVwb3J0IHdpdGggZHJhZnQsIGNoZWNrIHRoYXQgdGhlIGNvbnRleHQgaGFzIG5vIGFzc29jaWF0ZWQgZHJhZnRcblx0XHRpZiAoIWRpc2FibGVEcmFnICYmICEoY29udGV4dC5nZXRCaW5kaW5nKCkgYXMgT0RhdGFMaXN0QmluZGluZykuaXNSZWxhdGl2ZSgpKSB7XG5cdFx0XHRkaXNhYmxlRHJhZyA9IGNvbnRleHQuZ2V0UHJvcGVydHkoXCJIYXNEcmFmdEVudGl0eVwiKSA9PT0gdHJ1ZTtcblx0XHR9XG5cblx0XHQvLyBBcHBseSBjdXN0b20gbG9naWMgaWYgdGhlcmUncyBvbmVcblx0XHRjb25zdCBpc01vdmFibGVJbmZvID0gdGhpcy5nZXRUYWJsZURlZmluaXRpb24oKS5jb250cm9sLmlzTm9kZU1vdmFibGU7XG5cdFx0dHJ5IHtcblx0XHRcdGlmIChpc01vdmFibGVJbmZvICYmICFkaXNhYmxlRHJhZykge1xuXHRcdFx0XHRkaXNhYmxlRHJhZyA9XG5cdFx0XHRcdFx0KFxuXHRcdFx0XHRcdFx0RlBNSGVscGVyLmdldEN1c3RvbUZ1bmN0aW9uPChjb250ZXh0czogQ29udGV4dFtdKSA9PiBib29sZWFuPihcblx0XHRcdFx0XHRcdFx0aXNNb3ZhYmxlSW5mby5tb2R1bGVOYW1lLFxuXHRcdFx0XHRcdFx0XHRpc01vdmFibGVJbmZvLm1ldGhvZE5hbWUsXG5cdFx0XHRcdFx0XHRcdHVpNUV2ZW50LmdldFNvdXJjZSgpXG5cdFx0XHRcdFx0XHQpIGFzIEZ1bmN0aW9uXG5cdFx0XHRcdFx0KShjb250ZXh0KSA9PT0gZmFsc2U7XG5cdFx0XHR9XG5cdFx0fSBjYXRjaCAoX2Vycm9yKSB7XG5cdFx0XHRkaXNhYmxlRHJhZyA9IGZhbHNlO1xuXHRcdH1cblx0XHRpZiAoZGlzYWJsZURyYWcpIHtcblx0XHRcdC8vU2V0IHRoZSBlbGVtZW50IGFzIG5vbiBkcmFnZ2FibGVcblx0XHRcdHVpNUV2ZW50LnByZXZlbnREZWZhdWx0KCk7XG5cdFx0fVxuXHR9XG5cblx0LyoqXG5cdCAqIERyb3BzIHRoZSBkb2N1bWVudC5cblx0ICogQHBhcmFtIHVpNUV2ZW50IFVJNSBldmVudCBjb21pbmcgZnJvbSB0aGUgTURDIGRyYWcgYW5kIGRyb3AgY29uZmlnXG5cdCAqIEByZXR1cm5zIFRoZSBQcm9taXNlXG5cdCAqL1xuXHRhc3luYyBfb25Ecm9wRG9jdW1lbnQoXG5cdFx0dGhpczogSVRhYmxlQmxvY2sgJiBUYWJsZUhpZXJhcmNoeSxcblx0XHR1aTVFdmVudDogVUk1RXZlbnQ8e1xuXHRcdFx0YmluZGluZ0NvbnRleHQ6IENvbnRleHQ7XG5cdFx0XHRkcmFnU291cmNlOiBDb250ZXh0O1xuXHRcdFx0ZHJvcFBvc2l0aW9uOiBzdHJpbmc7XG5cdFx0fT5cblx0KTogUHJvbWlzZTx2b2lkPiB7XG5cdFx0QnVzeUxvY2tlci5sb2NrKHRoaXMuZ2V0Q29udGVudCgpKTtcblxuXHRcdHRyeSB7XG5cdFx0XHRjb25zdCBkcm9wcGVkT25Db250ZXh0ID0gdWk1RXZlbnQuZ2V0UGFyYW1ldGVyKFwiYmluZGluZ0NvbnRleHRcIik7XG5cdFx0XHRsZXQgZHJvcEluZm86IERyb3BJbmZvcm1hdGlvbjtcblx0XHRcdGlmIChkcm9wcGVkT25Db250ZXh0ID09PSB0aGlzLmdldENvbnRlbnQoKS5nZXRCaW5kaW5nQ29udGV4dCgpKSB7XG5cdFx0XHRcdC8vIFRoZSBkcm9wIGlzIGRvbmUgb24gdGhlIHRhYmxlIGl0c2VsZiAtPiBkcm9wIGFzIHJvb3Qgbm9kZSlcblx0XHRcdFx0ZHJvcEluZm8gPSB7IHBvc2l0aW9uOiBEcm9wUG9zaXRpb24uT24sIHBhcmVudENvbnRleHQ6IG51bGwgfTtcblx0XHRcdH0gZWxzZSBpZiAodWk1RXZlbnQuZ2V0UGFyYW1ldGVyKFwiZHJvcFBvc2l0aW9uXCIpID09PSBEcm9wUG9zaXRpb24uT24pIHtcblx0XHRcdFx0Ly8gRHJvcCBvbiBhIG5vZGVcblx0XHRcdFx0ZHJvcEluZm8gPSB7IHBvc2l0aW9uOiBEcm9wUG9zaXRpb24uT24sIHBhcmVudENvbnRleHQ6IGRyb3BwZWRPbkNvbnRleHQgfTtcblx0XHRcdH0gZWxzZSB7XG5cdFx0XHRcdC8vIERyb3AgYmV0d2VlbiAyIG5vZGVzXG5cdFx0XHRcdGxldCBjb250ZXh0QmVmb3JlOiBDb250ZXh0IHwgbnVsbDtcblx0XHRcdFx0bGV0IGNvbnRleHRBZnRlcjogQ29udGV4dCB8IG51bGw7XG5cdFx0XHRcdGlmICh1aTVFdmVudC5nZXRQYXJhbWV0ZXIoXCJkcm9wUG9zaXRpb25cIikgPT09IFwiQWZ0ZXJcIikge1xuXHRcdFx0XHRcdGNvbnRleHRCZWZvcmUgPSBkcm9wcGVkT25Db250ZXh0O1xuXHRcdFx0XHRcdGNvbnRleHRBZnRlciA9IHRoaXMuZ2V0Q29udGV4dEFmdGVyKGRyb3BwZWRPbkNvbnRleHQpO1xuXHRcdFx0XHR9IGVsc2Uge1xuXHRcdFx0XHRcdGNvbnRleHRCZWZvcmUgPSB0aGlzLmdldENvbnRleHRCZWZvcmUoZHJvcHBlZE9uQ29udGV4dCk7XG5cdFx0XHRcdFx0Y29udGV4dEFmdGVyID0gZHJvcHBlZE9uQ29udGV4dDtcblx0XHRcdFx0fVxuXHRcdFx0XHRkcm9wSW5mbyA9IHsgcG9zaXRpb246IERyb3BQb3NpdGlvbi5CZXR3ZWVuLCBjb250ZXh0QWZ0ZXIsIGNvbnRleHRCZWZvcmUgfTtcblx0XHRcdH1cblxuXHRcdFx0Y29uc3QgbW92ZWRDb250ZXh0ID0gdWk1RXZlbnQuZ2V0UGFyYW1ldGVyKFwiZHJhZ1NvdXJjZVwiKTtcblx0XHRcdGF3YWl0IFByb21pc2UuYWxsKFt0aGlzLmRyb3BDb250ZXh0KG1vdmVkQ29udGV4dCwgZHJvcEluZm8pLCB0aGlzLnJlcXVlc3RTaWRlRWZmZWN0c0ZvckNoYW5nZU5leHRTaWJsaW5nQWN0aW9uKG1vdmVkQ29udGV4dCldKTtcblx0XHR9IGNhdGNoIChlcnJvcikge1xuXHRcdFx0TWVzc2FnZVRvYXN0LnNob3codGhpcy5nZXRUcmFuc2xhdGVkVGV4dChcIk1fVEFCTEVEUk9QX0ZBSUxFRFwiLCBbXCJcIl0pKTtcblx0XHRcdExvZy5lcnJvcihcIlRoZSBvcGVyYXRpb24gaXMgdW5zdWNjZXNzZnVsLiBcIiArIChlcnJvciBhcyBFcnJvcikubWVzc2FnZSA/PyBcIlwiKTtcblx0XHR9IGZpbmFsbHkge1xuXHRcdFx0QnVzeUxvY2tlci51bmxvY2sodGhpcy5nZXRDb250ZW50KCkpO1xuXHRcdH1cblx0fVxuXG5cdC8qKlxuXHQgKiBIYW5kbGVyIGZvciBjb2xsYXBzZS9leHBhbmQgZnJvbSB0aGUgY29udGV4dCBtZW51LlxuXHQgKiBAcGFyYW0gdGhpc1xuXHQgKiBAcGFyYW0gX3VpNUV2ZW50XG5cdCAqIEBwYXJhbSBleHBhbmRcblx0ICovXG5cdGFzeW5jIF9vbkNvbGxhcHNlRXhwYW5kTm9kZSh0aGlzOiBJVGFibGVCbG9jayAmIFRhYmxlSGllcmFyY2h5LCBfdWk1RXZlbnQ6IFVJNUV2ZW50LCBleHBhbmQ6IGJvb2xlYW4pOiBQcm9taXNlPHZvaWQ+IHtcblx0XHRjb25zdCBzZWxlY3RlZENvbnRleHRzID0gdGhpcy5nZXRTZWxlY3RlZENvbnRleHRzKCk7XG5cdFx0aWYgKGV4cGFuZCkge1xuXHRcdFx0Y29uc3QgcHJvbWlzZUFycmF5ID0gc2VsZWN0ZWRDb250ZXh0cy5tYXAoYXN5bmMgKHNpbmdsZUNvbnRleHQ6IENvbnRleHQpID0+IHtcblx0XHRcdFx0Ly8gQ2hlY2tpbmcgZm9yIGZhbHNlIHNwZWNpZmljYWxseTsgdW5kZWZpbmVkIG1lYW5zIHRoZSBub2RlIGNhbm5vdCBleHBhbmQvY29sbGFwc2Vcblx0XHRcdFx0aWYgKHNpbmdsZUNvbnRleHQuaXNFeHBhbmRlZCgpICE9PSB1bmRlZmluZWQpIHtcblx0XHRcdFx0XHQvLyBUZW1wb3Jhcnkgd29ya2Fyb3VuZCBkdWUgdG8gbW9kZWwgbGltaXRhdGlvbi5cblx0XHRcdFx0XHQvLyBXZSBuZWVkIHRvIGNvbGxhcHNlIGEgbm9kZSBiZWZvcmUgZXhwYW5kaW5nIGl0IHRvIGVuc3VyZSB3ZSBleHBhbmQgaXQgY29tcGxldGVseS5cblx0XHRcdFx0XHQvLyBXaWxsIGJlIGNoYW5nZWQgb25jZSB0aGUgbW9kZWwgZml4ZXMgdGhlIGlzc3VlLlxuXHRcdFx0XHRcdGlmIChzaW5nbGVDb250ZXh0LmlzRXhwYW5kZWQoKSA9PT0gdHJ1ZSkge1xuXHRcdFx0XHRcdFx0YXdhaXQgc2luZ2xlQ29udGV4dC5jb2xsYXBzZSgpO1xuXHRcdFx0XHRcdH1cblx0XHRcdFx0XHRyZXR1cm4gc2luZ2xlQ29udGV4dC5leHBhbmQoTnVtYmVyLk1BWF9TQUZFX0lOVEVHRVIpO1xuXHRcdFx0XHR9XG5cdFx0XHR9KTtcblx0XHRcdGF3YWl0IFByb21pc2UuYWxsKHByb21pc2VBcnJheSk7XG5cdFx0fSBlbHNlIHtcblx0XHRcdGF3YWl0IFByb21pc2UuYWxsKFxuXHRcdFx0XHRzZWxlY3RlZENvbnRleHRzLm1hcChhc3luYyAoc2luZ2xlQ29udGV4dDogQ29udGV4dCkgPT4ge1xuXHRcdFx0XHRcdGlmIChzaW5nbGVDb250ZXh0LmlzRXhwYW5kZWQoKSA9PT0gdHJ1ZSkge1xuXHRcdFx0XHRcdFx0cmV0dXJuIHNpbmdsZUNvbnRleHQuY29sbGFwc2UodHJ1ZSk7XG5cdFx0XHRcdFx0fVxuXHRcdFx0XHR9KVxuXHRcdFx0KTtcblx0XHR9XG5cdH1cblxuXHQvKipcblx0ICogSW50ZXJuYWwgbWV0aG9kIHRvIG1vdmUgYSByb3cgdXAgb3IgZG93biBpbiBhIFRyZWUgdGFibGUuXG5cdCAqIEBwYXJhbSBfdWk1RXZlbnRcblx0ICogQHBhcmFtIG1vdmVVcCBUcnVlIGZvciBtb3ZlIHVwLCBmYWxzZSBmb3IgbW92ZSBkb3duXG5cdCAqIEBwYXJhbSBmb3JDb250ZXh0TWVudVxuXHQgKi9cblx0YXN5bmMgX29uTW92ZVVwRG93bih0aGlzOiBJVGFibGVCbG9jayAmIFRhYmxlSGllcmFyY2h5LCBfdWk1RXZlbnQ6IFVJNUV2ZW50LCBtb3ZlVXA6IGJvb2xlYW4sIGZvckNvbnRleHRNZW51ID0gZmFsc2UpOiBQcm9taXNlPHZvaWQ+IHtcblx0XHRjb25zdCBzZWxlY3RlZENvbnRleHRzID0gdGhpcy5nZXRTZWxlY3RlZENvbnRleHRzKCk7XG5cdFx0aWYgKHNlbGVjdGVkQ29udGV4dHMubGVuZ3RoICE9PSAxKSB7XG5cdFx0XHRyZXR1cm47XG5cdFx0fVxuXHRcdGNvbnN0IG1kY1RhYmxlID0gdGhpcy5nZXRDb250ZW50KCk7XG5cdFx0bWRjVGFibGUuc2V0QnVzeSh0cnVlKTtcblxuXHRcdC8vIE1vdmUgdGhlIGNvbnRleHQgdXAgb3IgZG93blxuXHRcdGNvbnN0IG1vdmVkQ29udGV4dCA9IHNlbGVjdGVkQ29udGV4dHNbMF07XG5cdFx0Y29uc3QgcGFyZW50Q29udGV4dCA9IGF3YWl0IG1vdmVkQ29udGV4dC5yZXF1ZXN0UGFyZW50KCk7XG5cdFx0bGV0IGNvbnRleHRNb3ZlZCA9IGZhbHNlO1xuXHRcdGxldCBtb3ZlUHJvbWlzZSA9IG51bGw7XG5cdFx0aWYgKG1vdmVVcCkge1xuXHRcdFx0Y29uc3QgcHJldmlvdXNTaWJsaW5nID0gYXdhaXQgbW92ZWRDb250ZXh0LnJlcXVlc3RTaWJsaW5nKC0xKTtcblx0XHRcdGlmIChwcmV2aW91c1NpYmxpbmcpIHtcblx0XHRcdFx0bW92ZVByb21pc2UgPSBtb3ZlZENvbnRleHQubW92ZSh7IG5leHRTaWJsaW5nOiBwcmV2aW91c1NpYmxpbmcsIHBhcmVudDogcGFyZW50Q29udGV4dCB9KTtcblx0XHRcdFx0Y29udGV4dE1vdmVkID0gdHJ1ZTtcblx0XHRcdH1cblx0XHR9IGVsc2Uge1xuXHRcdFx0Y29uc3QgbmV4dFNpYmxpbmcgPSBhd2FpdCBtb3ZlZENvbnRleHQucmVxdWVzdFNpYmxpbmcoMSk7XG5cdFx0XHRpZiAobmV4dFNpYmxpbmcpIHtcblx0XHRcdFx0bW92ZVByb21pc2UgPSBuZXh0U2libGluZy5tb3ZlKHsgbmV4dFNpYmxpbmc6IG1vdmVkQ29udGV4dCwgcGFyZW50OiBwYXJlbnRDb250ZXh0IH0pO1xuXHRcdFx0XHRjb250ZXh0TW92ZWQgPSB0cnVlO1xuXHRcdFx0fVxuXHRcdH1cblxuXHRcdGF3YWl0IFByb21pc2UuYWxsKFttb3ZlUHJvbWlzZSwgdGhpcy5yZXF1ZXN0U2lkZUVmZmVjdHNGb3JDaGFuZ2VOZXh0U2libGluZ0FjdGlvbihtb3ZlZENvbnRleHQpXSk7XG5cblx0XHQvLyBTY3JvbGwgdG8gdGhlIG5ldyBwb3NpdGlvblxuXHRcdGNvbnN0IG5ld0luZGV4ID0gbW92ZWRDb250ZXh0LmdldEluZGV4KCk7XG5cdFx0aWYgKGNvbnRleHRNb3ZlZCAmJiBuZXdJbmRleCAhPT0gdW5kZWZpbmVkICYmIG5ld0luZGV4ID49IDApIHtcblx0XHRcdGlmICghZm9yQ29udGV4dE1lbnUpIHtcblx0XHRcdFx0bWRjVGFibGUuc2Nyb2xsVG9JbmRleChuZXdJbmRleCk7XG5cdFx0XHR9IGVsc2Uge1xuXHRcdFx0XHRtZGNUYWJsZS5mb2N1c1JvdyhuZXdJbmRleCk7XG5cdFx0XHR9XG5cdFx0fVxuXHRcdG1kY1RhYmxlLnNldEJ1c3koZmFsc2UpO1xuXHR9XG5cblx0LyoqXG5cdCAqIFJlcXVlc3RzIHRoZSBzaWRlIGVmZmVjdCBmb3IgdGhlIENoYW5nZU5leHRTaWJsaW5nQWN0aW9uLlxuXHQgKiBAcGFyYW0gbW92ZWRDb250ZXh0IFRoZSBjb250ZXh0IHRoYXQgaGFzIGJlZW4gbW92ZWRcblx0ICogQHJldHVybnMgQSBQcm9taXNlXG5cdCAqL1xuXHRhc3luYyByZXF1ZXN0U2lkZUVmZmVjdHNGb3JDaGFuZ2VOZXh0U2libGluZ0FjdGlvbih0aGlzOiBJVGFibGVCbG9jayAmIFRhYmxlSGllcmFyY2h5LCBtb3ZlZENvbnRleHQ6IENvbnRleHQpOiBQcm9taXNlPHZvaWQ+IHtcblx0XHRyZXR1cm4gdGhpcy5fcmVxdWVzdFNpZGVFZmZlY3RzRm9ySGllcmFyY2h5QWN0aW9ucyhtb3ZlZENvbnRleHQsIFwiQ2hhbmdlTmV4dFNpYmxpbmdBY3Rpb25cIik7XG5cdH1cblxuXHQvKipcblx0ICogUmVxdWVzdHMgdGhlIHNpZGUgZWZmZWN0IGZvciB0aGUgQ29weUFjdGlvbi5cblx0ICogQHBhcmFtIG1vdmVkQ29udGV4dCBUaGUgY29udGV4dCB0aGF0IGhhcyBiZWVuIG1vdmVkXG5cdCAqIEByZXR1cm5zIEEgUHJvbWlzZVxuXHQgKi9cblx0YXN5bmMgcmVxdWVzdFNpZGVFZmZlY3RzRm9yQ29weUFjdGlvbih0aGlzOiBJVGFibGVCbG9jayAmIFRhYmxlSGllcmFyY2h5LCBtb3ZlZENvbnRleHQ6IENvbnRleHQpOiBQcm9taXNlPHZvaWQ+IHtcblx0XHRyZXR1cm4gdGhpcy5fcmVxdWVzdFNpZGVFZmZlY3RzRm9ySGllcmFyY2h5QWN0aW9ucyhtb3ZlZENvbnRleHQsIFwiQ29weUFjdGlvblwiKTtcblx0fVxuXG5cdC8qKlxuXHQgKiBSZXF1ZXN0cyB0aGUgc2lkZSBlZmZlY3QgZm9yIHRoZSBDb3B5QWN0aW9uIG9yIENoYW5nZU5leHRTaWJsaW5nQWN0aW9uLlxuXHQgKiBAcGFyYW0gbW92ZWRDb250ZXh0IFRoZSBjb250ZXh0IHRoYXQgaGFzIGJlZW4gbW92ZWRcblx0ICogQHBhcmFtIGFjdGlvblxuXHQgKiBAcmV0dXJucyBBIFByb21pc2Vcblx0ICovXG5cdGFzeW5jIF9yZXF1ZXN0U2lkZUVmZmVjdHNGb3JIaWVyYXJjaHlBY3Rpb25zKFxuXHRcdHRoaXM6IElUYWJsZUJsb2NrICYgVGFibGVIaWVyYXJjaHksXG5cdFx0bW92ZWRDb250ZXh0OiBDb250ZXh0LFxuXHRcdGFjdGlvbjogXCJDaGFuZ2VOZXh0U2libGluZ0FjdGlvblwiIHwgXCJDb3B5QWN0aW9uXCJcblx0KTogUHJvbWlzZTx2b2lkPiB7XG5cdFx0Y29uc3QgZW50aXR5UGF0aCA9IHRoaXMuZ2V0Q29udGVudCgpLmRhdGEoXCJtZXRhUGF0aFwiKTtcblx0XHRjb25zdCBtZXRhTW9kZWwgPSBtb3ZlZENvbnRleHQuZ2V0TW9kZWwoKS5nZXRNZXRhTW9kZWwoKTtcblxuXHRcdGNvbnN0IHRhcmdldE9iamVjdCA9IG1ldGFNb2RlbC5nZXRDb250ZXh0KGVudGl0eVBhdGgpO1xuXHRcdGNvbnN0IGNvbnZlcnRNZXRhTW9kZWxDb250ZXh0ID0gTWV0YU1vZGVsQ29udmVydGVyLmNvbnZlcnRNZXRhTW9kZWxDb250ZXh0KHRhcmdldE9iamVjdCkgYXMgTmF2aWdhdGlvblByb3BlcnR5IHwgRW50aXR5U2V0O1xuXHRcdGNvbnN0IGVudGl0eVR5cGUgPSAoY29udmVydE1ldGFNb2RlbENvbnRleHQgYXMgTmF2aWdhdGlvblByb3BlcnR5KS50YXJnZXRUeXBlID8/IChjb252ZXJ0TWV0YU1vZGVsQ29udGV4dCBhcyBFbnRpdHlTZXQpLmVudGl0eVR5cGU7XG5cdFx0Y29uc3QgYWN0aW9uTmFtZSA9IGVudGl0eVR5cGUuYW5ub3RhdGlvbnMuSGllcmFyY2h5Py5bXG5cdFx0XHRgUmVjdXJzaXZlSGllcmFyY2h5QWN0aW9ucyMke3RoaXMuZ2V0VGFibGVEZWZpbml0aW9uKCkuY29udHJvbC5oaWVyYXJjaHlRdWFsaWZpZXIgPz8gXCJcIn1gXG5cdFx0XT8uW2FjdGlvbl0gYXMgc3RyaW5nIHwgdW5kZWZpbmVkO1xuXG5cdFx0aWYgKGFjdGlvbk5hbWUpIHtcblx0XHRcdGNvbnN0IGFwcENvbXBvbmVudCA9IENvbW1vblV0aWxzLmdldEFwcENvbXBvbmVudCh0aGlzLmdldENvbnRlbnQoKSk7XG5cdFx0XHRjb25zdCBzaWRlRWZmZWN0c1NlcnZpY2UgPSBhcHBDb21wb25lbnQuZ2V0U2lkZUVmZmVjdHNTZXJ2aWNlKCk7XG5cdFx0XHRjb25zdCBzaWRlRWZmZWN0cyA9IHNpZGVFZmZlY3RzU2VydmljZS5nZXRPRGF0YUFjdGlvblNpZGVFZmZlY3RzKGFjdGlvbk5hbWUsIG1vdmVkQ29udGV4dCk7XG5cdFx0XHRpZiAoc2lkZUVmZmVjdHMpIHtcblx0XHRcdFx0YXdhaXQgc2lkZUVmZmVjdHNTZXJ2aWNlLnJlcXVlc3RTaWRlRWZmZWN0c0Zvck9EYXRhQWN0aW9uKHNpZGVFZmZlY3RzLCBtb3ZlZENvbnRleHQpO1xuXHRcdFx0fVxuXHRcdH1cblx0fVxuXG5cdC8qKlxuXHQgKiBTYWZlbHkgY2hlY2tzIGlmIG1vdmluZyBhIG5vZGUgaXMgYWxsb3dlZC5cblx0ICogQHBhcmFtIGN1c3RvbUZ1bmN0aW9uXG5cdCAqIEBwYXJhbSBtb3ZlZENvbnRleHRcblx0ICogQHBhcmFtIHBhcmVudENvbnRleHRcblx0ICogQHJldHVybnMgVHJ1ZSBpZiBhbGxvd2VkXG5cdCAqL1xuXHRwcml2YXRlIHNhZmVJc01vdmVBbGxvd2VkKFxuXHRcdGN1c3RvbUZ1bmN0aW9uOiAoKGNvbnRleHQ6IENvbnRleHQsIHBhcmVudDogQ29udGV4dCB8IG51bGwpID0+IGJvb2xlYW4pIHwgdW5kZWZpbmVkLFxuXHRcdG1vdmVkQ29udGV4dDogQ29udGV4dCxcblx0XHRwYXJlbnRDb250ZXh0OiBDb250ZXh0IHwgbnVsbFxuXHQpOiBib29sZWFuIHtcblx0XHRpZiAoIWN1c3RvbUZ1bmN0aW9uKSB7XG5cdFx0XHRyZXR1cm4gdHJ1ZTtcblx0XHR9XG5cblx0XHRsZXQgYWxsb3dlZCA9IHRydWU7XG5cdFx0dHJ5IHtcblx0XHRcdGFsbG93ZWQgPSBjdXN0b21GdW5jdGlvbihtb3ZlZENvbnRleHQsIHBhcmVudENvbnRleHQpID09PSB0cnVlO1xuXHRcdH0gY2F0Y2ggKGVycm9yKSB7XG5cdFx0XHRMb2cuZXJyb3IoXCJDYW5ub3QgZXhlY3V0ZSBmdW5jdGlvbiByZWxhdGVkIHRvIGlzTW92ZVRvUG9zaXRpb25BbGxvd2VkXCIsIGVycm9yIGFzIHN0cmluZyk7XG5cdFx0XHRhbGxvd2VkID0gdHJ1ZTtcblx0XHR9XG5cblx0XHRyZXR1cm4gYWxsb3dlZDtcblx0fVxuXG5cdC8qKlxuXHQgKiBDaGVja3MgaXMgZHJvcCBcImJldHdlZW5cIiBpcyBhbGxvd2VkIGJ5IGN1c3RvbSBsb2dpYyBmb3IgYSBnaXZlbiB0YXJnZXRDb250ZXh0LlxuXHQgKiBAcGFyYW0gY3VzdG9tRnVuY3Rpb25cblx0ICogQHBhcmFtIGRyYWdnZWRDb250ZXh0XG5cdCAqIEBwYXJhbSB0YXJnZXRDb250ZXh0XG5cdCAqIEByZXR1cm5zIFRydWUgaWYgYWxsb3dlZFxuXHQgKi9cblx0cHJpdmF0ZSBpc0Ryb3BCZXR3ZWVuQWxsb3dlZEZvckRyYWcoXG5cdFx0Y3VzdG9tRnVuY3Rpb246IChjb250ZXh0OiBDb250ZXh0LCBwYXJlbnQ6IENvbnRleHQgfCBudWxsKSA9PiBib29sZWFuLFxuXHRcdGRyYWdnZWRDb250ZXh0OiBDb250ZXh0LFxuXHRcdHRhcmdldENvbnRleHQ6IENvbnRleHRcblx0KTogYm9vbGVhbiB7XG5cdFx0bGV0IGlzQWxsb3dlZCA9IHRydWU7XG5cblx0XHQvLyBEZXRlcm1pbmUgd2hhdCB0byBkbyBpZiB3ZSBkcm9wIGJlZm9yZSB0YXJnZXRDb250ZXh0XG5cdFx0Y29uc3QgY29udGV4dEJlZm9yZSA9IHRoaXMuZ2V0Q29udGV4dEJlZm9yZSh0YXJnZXRDb250ZXh0KTtcblx0XHRjb25zdCBwYXJlbnRCZWZvcmUgPSBjb250ZXh0QmVmb3JlID09PSBudWxsID8gbnVsbCA6IGNvbnRleHRCZWZvcmUuZ2V0UGFyZW50KCk7XG5cdFx0Y29uc3QgcGFyYW1zQmVmb3JlID0gdGhpcy5nZXREcm9wQmV0d2VlblBhcmFtZXRlcnMoY29udGV4dEJlZm9yZSwgcGFyZW50QmVmb3JlLCB0YXJnZXRDb250ZXh0LCB0YXJnZXRDb250ZXh0LmdldFBhcmVudCgpKTtcblxuXHRcdC8vIERldGVybWluZSB3aGF0IHRvIGRvIGlmIHdlIGRyb3AgYWZ0ZXIgdGFyZ2V0Q29udGV4dFxuXHRcdGNvbnN0IGNvbnRleHRBZnRlciA9IHRoaXMuZ2V0Q29udGV4dEFmdGVyKHRhcmdldENvbnRleHQpO1xuXHRcdGNvbnN0IHBhcmVudEFmdGVyID0gY29udGV4dEFmdGVyID09PSBudWxsID8gbnVsbCA6IGNvbnRleHRBZnRlci5nZXRQYXJlbnQoKTtcblx0XHRjb25zdCBwYXJhbXNBZnRlciA9IHRoaXMuZ2V0RHJvcEJldHdlZW5QYXJhbWV0ZXJzKHRhcmdldENvbnRleHQsIHRhcmdldENvbnRleHQuZ2V0UGFyZW50KCksIGNvbnRleHRBZnRlciwgcGFyZW50QWZ0ZXIpO1xuXG5cdFx0Ly8gSWYgcGFyYW1zQmVmb3JlIG9yIHBhcmFtc0FmdGVyIGNhbm5vdCBiZSBkZXRlcm1pbmVkIChiZWNhdXNlIHBhcmVudHMgYXJlIG5vdCBsb2FkZWQpLCB3ZSBhbGxvdyBkcm9wIGJldHdlZW4gYW5kIGRvIHRoZSByZWFsIGNoZWNrIGluIG9uRHJvcERvY3VtZW50XG5cdFx0aWYgKHBhcmFtc0JlZm9yZSAhPT0gdW5kZWZpbmVkICYmIHBhcmFtc0FmdGVyICE9PSB1bmRlZmluZWQpIHtcblx0XHRcdGlmIChwYXJhbXNCZWZvcmUucGFyZW50ID09PSBwYXJhbXNBZnRlci5wYXJlbnQpIHtcblx0XHRcdFx0Ly8gRHJvcHBpbmcgYmVmb3JlIG9yIGFmdGVyIHdpbGwgbW92ZSB1bmRlciB0aGUgc2FtZSBwYXJlbnQgLS0+IHdlIGNhbGwgdGhlIGN1c3RvbSBsb2dpYyBvbmx5IG9uY2Vcblx0XHRcdFx0aXNBbGxvd2VkID0gdGhpcy5zYWZlSXNNb3ZlQWxsb3dlZChjdXN0b21GdW5jdGlvbiwgZHJhZ2dlZENvbnRleHQsIHBhcmFtc0JlZm9yZS5wYXJlbnQpO1xuXHRcdFx0fSBlbHNlIHtcblx0XHRcdFx0Ly8gQXMgdGhlIE1EQyB0YWJsZSBjYW5ub3QgZGlzYWJsZSBkcm9wIGJlZm9yZSBhbmQgYWZ0ZXIgc2VwYXJhdGVseSwgd2UgZGlzYWJsZSBkcm9wIGJldHdlZW4gb25seSBpZiBib3RoIGRyb3AgYmVmb3JlIGFuZCBhZnRlciBhcmUgZm9yYmlkZGVuXG5cdFx0XHRcdGlzQWxsb3dlZCA9XG5cdFx0XHRcdFx0dGhpcy5zYWZlSXNNb3ZlQWxsb3dlZChjdXN0b21GdW5jdGlvbiwgZHJhZ2dlZENvbnRleHQsIHBhcmFtc0JlZm9yZS5wYXJlbnQpIHx8XG5cdFx0XHRcdFx0dGhpcy5zYWZlSXNNb3ZlQWxsb3dlZChjdXN0b21GdW5jdGlvbiwgZHJhZ2dlZENvbnRleHQsIHBhcmFtc0FmdGVyLnBhcmVudCk7XG5cdFx0XHR9XG5cdFx0fVxuXG5cdFx0cmV0dXJuIGlzQWxsb3dlZDtcblx0fVxuXG5cdC8qKlxuXHQgKiBSZXR1cm5zIHRoZSBjb250ZXh0IHRoYXQgaXMgcGxhY2VkIGJlZm9yZSBhIGdpdmVuIGNvbnRleHQgaW4gYSBMaXN0QmluZGluZy5cblx0ICogQHBhcmFtIGNvbnRleHRcblx0ICogQHJldHVybnMgVGhlIGNvbnRleHQgYmVmb3JlLCBvciBudWxsXG5cdCAqL1xuXHRwcml2YXRlIGdldENvbnRleHRCZWZvcmUoY29udGV4dDogQ29udGV4dCk6IENvbnRleHQgfCBudWxsIHtcblx0XHRjb25zdCBjb250ZXh0SW5kZXggPSBjb250ZXh0LmdldEluZGV4KCk7XG5cdFx0aWYgKGNvbnRleHRJbmRleCA9PT0gdW5kZWZpbmVkKSB7XG5cdFx0XHR0aHJvdyBuZXcgRXJyb3IoXCJVbmV4cGVjdGVkIGVycm9yXCIpO1xuXHRcdH1cblxuXHRcdGNvbnN0IGxpc3RCaW5kaW5nID0gY29udGV4dC5nZXRCaW5kaW5nKCkgYXMgT0RhdGFMaXN0QmluZGluZztcblx0XHRyZXR1cm4gY29udGV4dEluZGV4ID09PSAwXG5cdFx0XHQ/IG51bGxcblx0XHRcdDogbGlzdEJpbmRpbmcuZ2V0QWxsQ3VycmVudENvbnRleHRzKCkuZmluZCgoY3R4KSA9PiB7XG5cdFx0XHRcdFx0cmV0dXJuIGN0eC5nZXRJbmRleCgpID09PSBjb250ZXh0SW5kZXggLSAxO1xuXHRcdFx0ICB9KSA/PyBudWxsO1xuXHR9XG5cblx0LyoqXG5cdCAqIFJldHVybnMgdGhlIGNvbnRleHQgdGhhdCBpcyBwbGFjZWQgYWZ0ZXIgYSBnaXZlbiBjb250ZXh0IGluIGEgTGlzdEJpbmRpbmcuXG5cdCAqIEBwYXJhbSBjb250ZXh0XG5cdCAqIEByZXR1cm5zIFRoZSBjb250ZXh0IGFmdGVyLCBvciBudWxsXG5cdCAqL1xuXHRwcml2YXRlIGdldENvbnRleHRBZnRlcihjb250ZXh0OiBDb250ZXh0KTogQ29udGV4dCB8IG51bGwge1xuXHRcdGNvbnN0IGNvbnRleHRJbmRleCA9IGNvbnRleHQuZ2V0SW5kZXgoKTtcblx0XHRpZiAoY29udGV4dEluZGV4ID09PSB1bmRlZmluZWQpIHtcblx0XHRcdHRocm93IG5ldyBFcnJvcihcIlVuZXhwZWN0ZWQgZXJyb3JcIik7XG5cdFx0fVxuXG5cdFx0Y29uc3QgbGlzdEJpbmRpbmcgPSBjb250ZXh0LmdldEJpbmRpbmcoKSBhcyBPRGF0YUxpc3RCaW5kaW5nO1xuXHRcdHJldHVybiAoXG5cdFx0XHRsaXN0QmluZGluZy5nZXRBbGxDdXJyZW50Q29udGV4dHMoKS5maW5kKChjdHgpID0+IHtcblx0XHRcdFx0cmV0dXJuIGN0eC5nZXRJbmRleCgpID09PSBjb250ZXh0SW5kZXggKyAxO1xuXHRcdFx0fSkgPz8gbnVsbFxuXHRcdCk7XG5cdH1cblxuXHQvKipcblx0ICogUmV0dXJucyBpbmZvcm1hdGlvbiB0byBwZXJmb3JtIGEgZHJvcCBiZXR3ZWVuIDIgbm9kZXM6IHRoZSBuZXcgcGFyZW50IGFuZCB0aGUgbmV4dCBzaWJsaW5nLlxuXHQgKiBAcGFyYW0gY29udGV4dEJlZm9yZSBDb250ZXh0IGFmdGVyIHdoaWNoIHRoZSBkcm9wIGlzIGRvbmVcblx0ICogQHBhcmFtIHBhcmVudEJlZm9yZSBQYXJlbnQgb2YgY29udGV4dEJlZm9yZSAodW5kZWZpbmVkIGlmIG5vdCBrbm93bilcblx0ICogQHBhcmFtIGNvbnRleHRBZnRlciBDb250ZXh0IGJlZm9yZSB3aGljaCB0aGUgZHJvcCBpcyBkb25lXG5cdCAqIEBwYXJhbSBwYXJlbnRBZnRlciBQYXJlbnQgb2YgY29udGV4dEFmdGVyICh1bmRlZmluZWQgaWYgbm90IGtub3duKVxuXHQgKiBAcmV0dXJucyBUaGUgbmV3IHBhcmVudCBhbmQgdGhlIG5leHQgc2libGluZywgb3IgdW5kZWZpbmVkIGlmIGl0IGNhbm5vdCBiZSBkZXRlcm1pbmVkXG5cdCAqL1xuXHRwcml2YXRlIGdldERyb3BCZXR3ZWVuUGFyYW1ldGVycyhcblx0XHRjb250ZXh0QmVmb3JlOiBDb250ZXh0IHwgbnVsbCxcblx0XHRwYXJlbnRCZWZvcmU6IENvbnRleHQgfCBudWxsIHwgdW5kZWZpbmVkLFxuXHRcdGNvbnRleHRBZnRlcjogQ29udGV4dCB8IG51bGwsXG5cdFx0cGFyZW50QWZ0ZXI6IENvbnRleHQgfCBudWxsIHwgdW5kZWZpbmVkXG5cdCk6IHsgcGFyZW50OiBDb250ZXh0IHwgbnVsbDsgbmV4dFNpYmxpbmc/OiBDb250ZXh0IHwgbnVsbCB9IHwgdW5kZWZpbmVkIHtcblx0XHRpZiAoY29udGV4dEJlZm9yZSA9PT0gbnVsbCkge1xuXHRcdFx0Ly8gRHJvcCBiZWZvcmUgZmlyc3Qgbm9kZSAtLT4gbW92ZSBhcyBmaXJzdCByb290IG5vZGVcblx0XHRcdHJldHVybiB7IHBhcmVudDogbnVsbCwgbmV4dFNpYmxpbmc6IGNvbnRleHRBZnRlciB9O1xuXHRcdH0gZWxzZSBpZiAoY29udGV4dEFmdGVyID09PSBudWxsKSB7XG5cdFx0XHQvLyBEcm9wIGFmdGVyIGxhc3Qgbm9kZSAtLT4gbW92ZSBhcyBuZXh0IHNpYmxpbmcgb2YgdGhlIGxhc3Qgbm9kZVxuXHRcdFx0cmV0dXJuIHBhcmVudEJlZm9yZSAhPT0gdW5kZWZpbmVkID8geyBwYXJlbnQ6IHBhcmVudEJlZm9yZSwgbmV4dFNpYmxpbmc6IG51bGwgfSA6IHVuZGVmaW5lZDtcblx0XHR9IGVsc2UgaWYgKHBhcmVudEFmdGVyID09PSBjb250ZXh0QmVmb3JlKSB7XG5cdFx0XHQvLyBEcm9wIGJldHdlZW4gYSBwYXJlbnQgYW5kIGl0cyBmaXJzdCBjaGlsZCAtLT4gbW92ZSBhcyBmaXJzdCBjaGlsZCBvZiB0aGUgcGFyZW50XG5cdFx0XHRyZXR1cm4geyBwYXJlbnQ6IGNvbnRleHRCZWZvcmUsIG5leHRTaWJsaW5nOiBjb250ZXh0QWZ0ZXIgfTtcblx0XHR9IGVsc2UgaWYgKHBhcmVudEJlZm9yZSA9PT0gdW5kZWZpbmVkIHx8IHBhcmVudEFmdGVyID09PSB1bmRlZmluZWQpIHtcblx0XHRcdC8vIElmIG9uZSBvZiB0aGUgcGFyZW50IGlzIG5vdCBrbm93biwgd2UgZG9uJ3Qga25vdyB3aGF0IHRvIGRvXG5cdFx0XHRyZXR1cm4gdW5kZWZpbmVkO1xuXHRcdH0gZWxzZSBpZiAocGFyZW50QmVmb3JlID09PSBwYXJlbnRBZnRlcikge1xuXHRcdFx0Ly8gRHJvcCBiZXR3ZWVuIDIgc2libGluZ3Ncblx0XHRcdHJldHVybiB7IHBhcmVudDogcGFyZW50QmVmb3JlLCBuZXh0U2libGluZzogY29udGV4dEFmdGVyIH07XG5cdFx0fSBlbHNlIHtcblx0XHRcdC8vIE5vZGVYXG5cdFx0XHQvLyAgLi4uLlxuXHRcdFx0Ly8gICAgIHwtLSBjb250ZXh0QmVmb3JlXG5cdFx0XHQvLyBjb250ZXh0QWZ0ZXJcblx0XHRcdC8vIC0tPiBNb3ZlIGFzIHRoZSBuZXh0IHNpYmxpbmcgb2YgY29udGV4dEJlZm9yZVxuXHRcdFx0cmV0dXJuIHsgcGFyZW50OiBwYXJlbnRCZWZvcmUsIG5leHRTaWJsaW5nOiBudWxsIH07XG5cdFx0fVxuXHR9XG5cblx0LyoqXG5cdCAqIEludGVybmFsIG1ldGhvZCB0byBkcm9wIGEgY29udGV4dCBvbiBvciBiZXR3ZWVuIDIgbm9kZXMuXG5cdCAqIEBwYXJhbSBjb250ZXh0XG5cdCAqIEBwYXJhbSBpbmZvXG5cdCAqIEByZXR1cm5zIFRoZSBtb3ZlIFByb21pc2Vcblx0ICovXG5cdHByaXZhdGUgYXN5bmMgZHJvcENvbnRleHQodGhpczogSVRhYmxlQmxvY2sgJiBUYWJsZUhpZXJhcmNoeSwgY29udGV4dDogQ29udGV4dCwgaW5mbzogRHJvcEluZm9ybWF0aW9uKTogUHJvbWlzZTx2b2lkPiB7XG5cdFx0Y29uc3QgaXNNb3ZlQWxsb3dlZEluZm8gPSB0aGlzLmdldFRhYmxlRGVmaW5pdGlvbigpLmNvbnRyb2wuaXNNb3ZlVG9Qb3NpdGlvbkFsbG93ZWQ7XG5cdFx0Y29uc3QgY3VzdG9tRnVuY3Rpb24gPSBpc01vdmVBbGxvd2VkSW5mb1xuXHRcdFx0PyBGUE1IZWxwZXIuZ2V0Q3VzdG9tRnVuY3Rpb248KG5vZGU6IENvbnRleHQsIHBhcmVudDogQ29udGV4dCB8IG51bGwpID0+IGJvb2xlYW4+KFxuXHRcdFx0XHRcdGlzTW92ZUFsbG93ZWRJbmZvLm1vZHVsZU5hbWUsXG5cdFx0XHRcdFx0aXNNb3ZlQWxsb3dlZEluZm8ubWV0aG9kTmFtZSxcblx0XHRcdFx0XHR0aGlzLmdldENvbnRlbnQoKVxuXHRcdFx0ICApXG5cdFx0XHQ6IHVuZGVmaW5lZDtcblx0XHRjb25zdCB0YWJsZSA9IHRoaXMuZ2V0Q29udGVudCgpO1xuXHRcdHRhYmxlLnNldEJ1c3kodHJ1ZSk7XG5cdFx0Y29uc3QgaW50ZXJuYWxNb2RlbENvbnRleHQgPSB0YWJsZS5nZXRCaW5kaW5nQ29udGV4dChcImludGVybmFsXCIpIGFzIEludGVybmFsTW9kZWxDb250ZXh0O1xuXHRcdGNvbnN0IGlzVGFibGVTb3J0ZWQgPSBpbnRlcm5hbE1vZGVsQ29udGV4dC5nZXRQcm9wZXJ0eShcImlzU29ydGVkXCIpID09PSB0cnVlO1xuXG5cdFx0Y29uc3QgbW92ZUNvbnRleHQgPSBhc3luYyAocGFyZW50OiBDb250ZXh0IHwgbnVsbCwgbmV4dFNpYmxpbmc/OiBDb250ZXh0IHwgbnVsbCk6IFByb21pc2U8dm9pZD4gPT4ge1xuXHRcdFx0Ly8gV2UgY2hlY2sgaWYgdGhlIG1vdmUgaXMgYWxsb3dlZCBieSBjdXN0b20gbG9naWMgKGlmIGFueSksIGFzIHRoaXMgY2hlY2sgbWlnaHRcblx0XHRcdC8vIG5vdCBoYXZlIGJlZW4gZG9uZSBpbiBvbkRyYWdFbnRlckRvY3VtZW50IGlmIHRoZSBwYXJlbnQgd2FzIG5vdCBsb2FkZWQgeWV0LlxuXHRcdFx0aWYgKHRoaXMuc2FmZUlzTW92ZUFsbG93ZWQoY3VzdG9tRnVuY3Rpb24sIGNvbnRleHQsIHBhcmVudCkpIHtcblx0XHRcdFx0Ly8gSWYgdGhlIHRhYmxlIGlzIHNvcnRlZCwgd2UgaWdub3JlIHRoZSBzaWJsaW5nIGFzIHRoZSBwb3NpdGlvbiBzaGFsbCBiZSBkZXRlcm1pbmVkIGJ5IHRoZSBzZXJ2ZXJcblx0XHRcdFx0cmV0dXJuIGNvbnRleHQubW92ZSh7IHBhcmVudCwgbmV4dFNpYmxpbmc6IGlzVGFibGVTb3J0ZWQgPyB1bmRlZmluZWQgOiBuZXh0U2libGluZyB9KTtcblx0XHRcdH0gZWxzZSB7XG5cdFx0XHRcdE1lc3NhZ2VUb2FzdC5zaG93KHRoaXMuZ2V0VHJhbnNsYXRlZFRleHQoXCJNX1RBQkxFX0RST1BfTk9UX0FMTE9XRURcIikpO1xuXHRcdFx0fVxuXHRcdH07XG5cblx0XHRpZiAoaW5mby5wb3NpdGlvbiA9PT0gRHJvcFBvc2l0aW9uLk9uKSB7XG5cdFx0XHQvLyBEcm9wIG9uIGEgbm9kZVxuXHRcdFx0cmV0dXJuIG1vdmVDb250ZXh0KGluZm8ucGFyZW50Q29udGV4dCkuZmluYWxseSgoKSA9PiB0YWJsZS5zZXRCdXN5KGZhbHNlKSk7XG5cdFx0fSBlbHNlIHtcblx0XHRcdC8vIERyb3AgYmV0d2VlbiAyIG5vZGVzXG5cdFx0XHRjb25zdCBbcGFyZW50QmVmb3JlLCBwYXJlbnRBZnRlcl0gPSBhd2FpdCBQcm9taXNlLmFsbChbXG5cdFx0XHRcdGluZm8uY29udGV4dEJlZm9yZT8ucmVxdWVzdFBhcmVudCgpID8/IG51bGwsXG5cdFx0XHRcdGluZm8uY29udGV4dEFmdGVyPy5yZXF1ZXN0UGFyZW50KCkgPz8gbnVsbFxuXHRcdFx0XSk7XG5cdFx0XHRjb25zdCBwYXJhbXMgPSB0aGlzLmdldERyb3BCZXR3ZWVuUGFyYW1ldGVycyhpbmZvLmNvbnRleHRCZWZvcmUsIHBhcmVudEJlZm9yZSwgaW5mby5jb250ZXh0QWZ0ZXIsIHBhcmVudEFmdGVyKSE7XG5cdFx0XHRyZXR1cm4gbW92ZUNvbnRleHQocGFyYW1zLnBhcmVudCwgcGFyYW1zLm5leHRTaWJsaW5nKS5maW5hbGx5KCgpID0+IHRhYmxlLnNldEJ1c3koZmFsc2UpKTtcblx0XHR9XG5cdH1cbn1cbiJdLCJtYXBwaW5ncyI6Ijs7Ozs7Ozs7TUFxQktBLFlBQVksMEJBQVpBLFlBQVk7SUFBWkEsWUFBWTtJQUFaQSxZQUFZO0lBQVpBLFlBQVk7SUFBQSxPQUFaQSxZQUFZO0VBQUEsRUFBWkEsWUFBWTtFQUFBLElBVUlDLGNBQWM7SUFBQSxTQUFBQSxlQUFBO0lBQUFDLFFBQUEsR0FBQUQsY0FBQTtJQUFBLElBQUFFLE1BQUEsR0FBQUYsY0FBQSxDQUFBRyxTQUFBO0lBQUFELE1BQUEsQ0FD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
497
+ //# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJuYW1lcyI6WyJEcm9wUG9zaXRpb24iLCJUYWJsZUhpZXJhcmNoeSIsIl9leHBvcnRzIiwiX3Byb3RvIiwicHJvdG90eXBlIiwic2V0dXBNaXhpbiIsIl9iYXNlQ2xhc3MiLCJfb25Db3B5Q3V0IiwiZXZ0IiwiZm9yQ29udGV4dE1lbnUiLCJhY3Rpb24iLCJ0YWJsZSIsImdldFNvdXJjZSIsImdldFBhcmVudCIsIm1lbnUiLCJpbnRlcm5hbENvbnRleHQiLCJnZXRCaW5kaW5nQ29udGV4dCIsInNlbGVjdGVkQ29udGV4dHMiLCJnZXRTZWxlY3RlZENvbnRleHRzIiwibGVuZ3RoIiwiTG9nIiwiZXJyb3IiLCJzZXRQcm9wZXJ0eSIsIk1lc3NhZ2VUb2FzdCIsInNob3ciLCJSZXNvdXJjZU1vZGVsSGVscGVyIiwiZ2V0UmVzb3VyY2VNb2RlbCIsImdldFRleHQiLCJnZXRQcm9wZXJ0eSIsIlRhYmxlUnVudGltZSIsImNsZWFyU2VsZWN0aW9uIiwiZmlyZVNlbGVjdGlvbkNoYW5nZSIsIl9vbkRyYWdFbnRlckRvY3VtZW50IiwidWk1RXZlbnQiLCJkcmFnZ2VkQ29udGV4dCIsImdldFBhcmFtZXRlciIsImdldENvbnRlbnQiLCJnZXRSb3dCaW5kaW5nIiwiZ2V0QmluZGluZyIsInByZXZlbnREZWZhdWx0IiwidGFyZ2V0Q29udGV4dCIsImlzQW5jZXN0b3JPZiIsImRpc2FibGVkQmV0d2VlbiIsImRpc2FibGVkT24iLCJ0YWJsZURlZmluaXRpb24iLCJnZXRUYWJsZURlZmluaXRpb24iLCJpc01vdmVBbGxvd2VkSW5mbyIsImNvbnRyb2wiLCJpc01vdmVUb1Bvc2l0aW9uQWxsb3dlZCIsImN1c3RvbUZ1bmN0aW9uIiwiRlBNSGVscGVyIiwiZ2V0Q3VzdG9tRnVuY3Rpb24iLCJtb2R1bGVOYW1lIiwibWV0aG9kTmFtZSIsInVuZGVmaW5lZCIsInNhZmVJc01vdmVBbGxvd2VkIiwiYW5ub3RhdGlvbiIsImFsbG93RHJvcEJldHdlZW5Ob2RlcyIsIk1hdGgiLCJhYnMiLCJnZXRJbmRleCIsImdldExlbmd0aCIsImNoYW5nZVNpYmxpbmdGb3JSb290c1N1cHBvcnRlZCIsImlzRHJvcEJldHdlZW5BbGxvd2VkRm9yRHJhZyIsImFsbG93ZWREcm9wUG9zaXRpb24iLCJPbk9yQmV0d2VlbiIsIk9uIiwiQmV0d2VlbiIsInNldERyb3BQb3NpdGlvbiIsIl9vbkRyYWdTdGFydERvY3VtZW50IiwiY29udGV4dCIsInVwZGF0YWJsZVByb3BlcnR5UGF0aCIsImRpc2FibGVEcmFnIiwiaXNSZWxhdGl2ZSIsImlzTW92YWJsZUluZm8iLCJpc05vZGVNb3ZhYmxlIiwiX2Vycm9yIiwiX29uRHJvcERvY3VtZW50IiwiQnVzeUxvY2tlciIsImxvY2siLCJkcm9wcGVkT25Db250ZXh0IiwiZHJvcEluZm8iLCJwb3NpdGlvbiIsInBhcmVudENvbnRleHQiLCJjb250ZXh0QmVmb3JlIiwiY29udGV4dEFmdGVyIiwiZ2V0Q29udGV4dEFmdGVyIiwiZ2V0Q29udGV4dEJlZm9yZSIsIm1vdmVkQ29udGV4dCIsIlByb21pc2UiLCJhbGwiLCJkcm9wQ29udGV4dCIsInJlcXVlc3RTaWRlRWZmZWN0c0ZvckNoYW5nZU5leHRTaWJsaW5nQWN0aW9uIiwiZ2V0VHJhbnNsYXRlZFRleHQiLCJtZXNzYWdlIiwidW5sb2NrIiwiX29uQ29sbGFwc2VFeHBhbmROb2RlIiwiX3VpNUV2ZW50IiwiZXhwYW5kIiwicHJvbWlzZUFycmF5IiwibWFwIiwic2luZ2xlQ29udGV4dCIsImlzRXhwYW5kZWQiLCJjb2xsYXBzZSIsIk51bWJlciIsIk1BWF9TQUZFX0lOVEVHRVIiLCJfb25Nb3ZlVXBEb3duIiwibW92ZVVwIiwiYXJndW1lbnRzIiwibWRjVGFibGUiLCJzZXRCdXN5IiwicmVxdWVzdFBhcmVudCIsImNvbnRleHRNb3ZlZCIsIm1vdmVQcm9taXNlIiwicHJldmlvdXNTaWJsaW5nIiwicmVxdWVzdFNpYmxpbmciLCJtb3ZlIiwibmV4dFNpYmxpbmciLCJwYXJlbnQiLCJuZXdJbmRleCIsInNjcm9sbFRvSW5kZXgiLCJmb2N1c1JvdyIsIl9yZXF1ZXN0U2lkZUVmZmVjdHNGb3JIaWVyYXJjaHlBY3Rpb25zIiwicmVxdWVzdFNpZGVFZmZlY3RzRm9yQ29weUFjdGlvbiIsImVudGl0eVBhdGgiLCJkYXRhIiwibWV0YU1vZGVsIiwiZ2V0TW9kZWwiLCJnZXRNZXRhTW9kZWwiLCJ0YXJnZXRPYmplY3QiLCJnZXRDb250ZXh0IiwiY29udmVydE1ldGFNb2RlbENvbnRleHQiLCJNZXRhTW9kZWxDb252ZXJ0ZXIiLCJlbnRpdHlUeXBlIiwidGFyZ2V0VHlwZSIsImFjdGlvbk5hbWUiLCJhbm5vdGF0aW9ucyIsIkhpZXJhcmNoeSIsImhpZXJhcmNoeVF1YWxpZmllciIsImFwcENvbXBvbmVudCIsIkNvbW1vblV0aWxzIiwiZ2V0QXBwQ29tcG9uZW50Iiwic2lkZUVmZmVjdHNTZXJ2aWNlIiwiZ2V0U2lkZUVmZmVjdHNTZXJ2aWNlIiwic2lkZUVmZmVjdHMiLCJnZXRPRGF0YUFjdGlvblNpZGVFZmZlY3RzIiwicmVxdWVzdFNpZGVFZmZlY3RzRm9yT0RhdGFBY3Rpb24iLCJhbGxvd2VkIiwiaXNBbGxvd2VkIiwicGFyZW50QmVmb3JlIiwicGFyYW1zQmVmb3JlIiwiZ2V0RHJvcEJldHdlZW5QYXJhbWV0ZXJzIiwicGFyZW50QWZ0ZXIiLCJwYXJhbXNBZnRlciIsImNvbnRleHRJbmRleCIsIkVycm9yIiwibGlzdEJpbmRpbmciLCJnZXRBbGxDdXJyZW50Q29udGV4dHMiLCJmaW5kIiwiY3R4IiwiaW5mbyIsImludGVybmFsTW9kZWxDb250ZXh0IiwiaXNUYWJsZVNvcnRlZCIsIm1vdmVDb250ZXh0IiwiZmluYWxseSIsInBhcmFtcyJdLCJzb3VyY2VSb290IjoiLiIsInNvdXJjZXMiOlsiVGFibGVIaWVyYXJjaHkudHMiXSwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHR5cGUgeyBFbnRpdHlTZXQsIE5hdmlnYXRpb25Qcm9wZXJ0eSB9IGZyb20gXCJAc2FwLXV4L3ZvY2FidWxhcmllcy10eXBlc1wiO1xuaW1wb3J0IExvZyBmcm9tIFwic2FwL2Jhc2UvTG9nXCI7XG5pbXBvcnQgeyB0eXBlIElJbnRlcmZhY2VXaXRoTWl4aW4gfSBmcm9tIFwic2FwL2ZlL2Jhc2UvQ2xhc3NTdXBwb3J0XCI7XG5pbXBvcnQgQ29tbW9uVXRpbHMgZnJvbSBcInNhcC9mZS9jb3JlL0NvbW1vblV0aWxzXCI7XG5pbXBvcnQgQnVzeUxvY2tlciBmcm9tIFwic2FwL2ZlL2NvcmUvY29udHJvbGxlcmV4dGVuc2lvbnMvQnVzeUxvY2tlclwiO1xuaW1wb3J0ICogYXMgTWV0YU1vZGVsQ29udmVydGVyIGZyb20gXCJzYXAvZmUvY29yZS9jb252ZXJ0ZXJzL01ldGFNb2RlbENvbnZlcnRlclwiO1xuaW1wb3J0IEZQTUhlbHBlciBmcm9tIFwic2FwL2ZlL2NvcmUvaGVscGVycy9GUE1IZWxwZXJcIjtcbmltcG9ydCB7IHR5cGUgSW50ZXJuYWxNb2RlbENvbnRleHQgfSBmcm9tIFwic2FwL2ZlL2NvcmUvaGVscGVycy9Nb2RlbEhlbHBlclwiO1xuaW1wb3J0IFJlc291cmNlTW9kZWxIZWxwZXIgZnJvbSBcInNhcC9mZS9jb3JlL2hlbHBlcnMvUmVzb3VyY2VNb2RlbEhlbHBlclwiO1xuaW1wb3J0IHR5cGUgTWVudSBmcm9tIFwic2FwL20vTWVudVwiO1xuaW1wb3J0IE1lc3NhZ2VUb2FzdCBmcm9tIFwic2FwL20vTWVzc2FnZVRvYXN0XCI7XG5pbXBvcnQgdHlwZSBVSTVFdmVudCBmcm9tIFwic2FwL3VpL2Jhc2UvRXZlbnRcIjtcbmltcG9ydCB0eXBlIENvbnRyb2wgZnJvbSBcInNhcC91aS9jb3JlL0NvbnRyb2xcIjtcbmltcG9ydCB0eXBlIFVJNUVsZW1lbnQgZnJvbSBcInNhcC91aS9jb3JlL0VsZW1lbnRcIjtcbmltcG9ydCB0eXBlIERyYWdEcm9wSW5mbyBmcm9tIFwic2FwL3VpL2NvcmUvZG5kL0RyYWdEcm9wSW5mb1wiO1xuaW1wb3J0IHR5cGUgTURDVGFibGUgZnJvbSBcInNhcC91aS9tZGMvVGFibGVcIjtcbmltcG9ydCB0eXBlIENvbnRleHQgZnJvbSBcInNhcC91aS9tb2RlbC9vZGF0YS92NC9Db250ZXh0XCI7XG5pbXBvcnQgdHlwZSBPRGF0YUxpc3RCaW5kaW5nIGZyb20gXCJzYXAvdWkvbW9kZWwvb2RhdGEvdjQvT0RhdGFMaXN0QmluZGluZ1wiO1xuaW1wb3J0IHsgdHlwZSBJVGFibGVCbG9jayB9IGZyb20gXCIuLi9UYWJsZUFQSVwiO1xuaW1wb3J0IFRhYmxlUnVudGltZSBmcm9tIFwiLi4vVGFibGVSdW50aW1lXCI7XG5cbmVudW0gRHJvcFBvc2l0aW9uIHtcblx0T24gPSBcIk9uXCIsXG5cdEJldHdlZW4gPSBcIkJldHdlZW5cIixcblx0T25PckJldHdlZW4gPSBcIk9uT3JCZXR3ZWVuXCJcbn1cblxudHlwZSBEcm9wSW5mb3JtYXRpb24gPVxuXHR8IHsgcG9zaXRpb246IERyb3BQb3NpdGlvbi5PbjsgcGFyZW50Q29udGV4dDogQ29udGV4dCB8IG51bGwgfVxuXHR8IHsgcG9zaXRpb246IERyb3BQb3NpdGlvbi5CZXR3ZWVuOyBjb250ZXh0QmVmb3JlOiBDb250ZXh0IHwgbnVsbDsgY29udGV4dEFmdGVyOiBDb250ZXh0IHwgbnVsbCB9O1xuXG5leHBvcnQgZGVmYXVsdCBjbGFzcyBUYWJsZUhpZXJhcmNoeSBpbXBsZW1lbnRzIElJbnRlcmZhY2VXaXRoTWl4aW4ge1xuXHRzZXR1cE1peGluKF9iYXNlQ2xhc3M6IEZ1bmN0aW9uKTogdm9pZCB7XG5cdFx0Ly8gVGhpcyBtZXRob2QgaXMgbmVlZGVkIHRvIGltcGxlbWVudCBpbnRlcmZhY2UgSUludGVyZmFjZVdpdGhNaXhpblxuXHR9XG5cblx0LyoqXG5cdCAqIEhhbmRsZXMgdGhlIEN1dC9Db3B5IG9wZXJhdGlvbi5cblx0ICogQHBhcmFtIGV2dCBUaGUgVUk1IGV2ZW50XG5cdCAqIEBwYXJhbSBmb3JDb250ZXh0TWVudVxuXHQgKi9cblx0X29uQ29weUN1dCh0aGlzOiBJVGFibGVCbG9jayAmIFRhYmxlSGllcmFyY2h5LCBldnQ6IFVJNUV2ZW50PHt9LCBVSTVFbGVtZW50PiwgZm9yQ29udGV4dE1lbnU6IGJvb2xlYW4sIGFjdGlvbjogXCJDb3B5XCIgfCBcIkN1dFwiKTogdm9pZCB7XG5cdFx0bGV0IHRhYmxlOiBNRENUYWJsZTtcblx0XHRpZiAoIWZvckNvbnRleHRNZW51KSB7XG5cdFx0XHR0YWJsZSA9IGV2dC5nZXRTb3VyY2UoKS5nZXRQYXJlbnQoKSBhcyBNRENUYWJsZTtcblx0XHR9IGVsc2Uge1xuXHRcdFx0Y29uc3QgbWVudSA9IGV2dC5nZXRTb3VyY2UoKS5nZXRQYXJlbnQoKSBhcyBNZW51O1xuXHRcdFx0dGFibGUgPSBtZW51LmdldFBhcmVudCgpPy5nZXRQYXJlbnQoKSBhcyBNRENUYWJsZTtcblx0XHR9XG5cdFx0Y29uc3QgaW50ZXJuYWxDb250ZXh0ID0gdGFibGUuZ2V0QmluZGluZ0NvbnRleHQoXCJpbnRlcm5hbFwiKSBhcyBJbnRlcm5hbE1vZGVsQ29udGV4dDtcblx0XHRjb25zdCBzZWxlY3RlZENvbnRleHRzID0gdGhpcy5nZXRTZWxlY3RlZENvbnRleHRzKCk7XG5cdFx0aWYgKHNlbGVjdGVkQ29udGV4dHMubGVuZ3RoID4gMSkge1xuXHRcdFx0TG9nLmVycm9yKGBNdWx0aSAke2FjdGlvbiA9PT0gXCJDdXRcIiA/IFwiY3V0dGluZ1wiIDogXCJjb3B5aW5nXCJ9IGlzIG5vdCBzdXBwb3J0ZWRgKTtcblx0XHRcdHJldHVybjtcblx0XHR9XG5cblx0XHRpbnRlcm5hbENvbnRleHQuc2V0UHJvcGVydHkoXCJub2RlVXBkYXRlc0luZm8vcGFzdGFibGVDb250ZXh0c1wiLCBzZWxlY3RlZENvbnRleHRzKTtcblx0XHRpbnRlcm5hbENvbnRleHQuc2V0UHJvcGVydHkoXCJub2RlVXBkYXRlc0luZm8vbGFzdEFjdGlvblwiLCBhY3Rpb24pO1xuXHRcdE1lc3NhZ2VUb2FzdC5zaG93KFJlc291cmNlTW9kZWxIZWxwZXIuZ2V0UmVzb3VyY2VNb2RlbCh0YWJsZSkuZ2V0VGV4dChcIk1fQ1VUQ09QWV9SRUFEWVwiKSk7XG5cdFx0aWYgKCFmb3JDb250ZXh0TWVudSB8fCBpbnRlcm5hbENvbnRleHQuZ2V0UHJvcGVydHkoXCJudW1iZXJPZlNlbGVjdGVkQ29udGV4dHNcIikgPiAwKSB7XG5cdFx0XHRUYWJsZVJ1bnRpbWUuY2xlYXJTZWxlY3Rpb24odGFibGUpO1xuXHRcdFx0dGFibGUuZmlyZVNlbGVjdGlvbkNoYW5nZSgpO1xuXHRcdH0gZWxzZSBpZiAoZm9yQ29udGV4dE1lbnUpIHtcblx0XHRcdC8vIFVzaW5nIHRoZSBjb250ZXh0IG1lbnUgaW1wbGljaXRseSBkZWZpbmVzIGEgY29udGV4dCBmb3IgdGhlIGFjdGlvblxuXHRcdFx0dGFibGUuZmlyZVNlbGVjdGlvbkNoYW5nZSgpO1xuXHRcdH1cblxuXHRcdGludGVybmFsQ29udGV4dC5zZXRQcm9wZXJ0eShcIm5vZGVVcGRhdGVzSW5mby9jdXRFbmFibGVtZW50XCIsIGZhbHNlKTtcblx0XHRpbnRlcm5hbENvbnRleHQuc2V0UHJvcGVydHkoXCJjb250ZXh0bWVudS9ub2RlVXBkYXRlc0luZm8vY3V0RW5hYmxlbWVudFwiLCBmYWxzZSk7XG5cdFx0aW50ZXJuYWxDb250ZXh0LnNldFByb3BlcnR5KFwibm9kZVVwZGF0ZXNJbmZvL2NvcHlFbmFibGVtZW50XCIsIGZhbHNlKTtcblx0XHRpbnRlcm5hbENvbnRleHQuc2V0UHJvcGVydHkoXCJjb250ZXh0bWVudS9ub2RlVXBkYXRlc0luZm8vY29weUVuYWJsZW1lbnRcIiwgZmFsc2UpO1xuXHR9XG5cblx0LyoqXG5cdCAqIFRoZSBkcmFnZ2VkIGVsZW1lbnQgZW50ZXJzIGEgdGFibGUgcm93LlxuXHQgKiBAcGFyYW0gdWk1RXZlbnQgVUk1IGV2ZW50IGNvbWluZyBmcm9tIHRoZSBNREMgZHJhZyBhbmQgZHJvcCBjb25maWdcblx0ICovXG5cdF9vbkRyYWdFbnRlckRvY3VtZW50KFxuXHRcdHRoaXM6IElUYWJsZUJsb2NrICYgVGFibGVIaWVyYXJjaHksXG5cdFx0dWk1RXZlbnQ6IFVJNUV2ZW50PHsgYmluZGluZ0NvbnRleHQ6IENvbnRleHQ7IGRyYWdTb3VyY2U6IENvbnRleHQ7IGRyb3BQb3NpdGlvbjogXCJCZWZvcmVcIiB8IFwiQWZ0ZXJcIiB8IFwiT25cIiB9LCBEcmFnRHJvcEluZm8+XG5cdCk6IHZvaWQge1xuXHRcdGNvbnN0IGRyYWdnZWRDb250ZXh0ID0gdWk1RXZlbnQuZ2V0UGFyYW1ldGVyKFwiZHJhZ1NvdXJjZVwiKTtcblx0XHRpZiAodGhpcy5nZXRDb250ZW50KCkuZ2V0Um93QmluZGluZygpICE9PSBkcmFnZ2VkQ29udGV4dC5nZXRCaW5kaW5nKCkpIHtcblx0XHRcdC8vIFRoZSBkcmFnIGlzIGRvbmUgb24gYSBkaWZmZXJlbnQgdGFibGUgLT4gbm90IGF1dGhvcml6ZWRcblx0XHRcdHVpNUV2ZW50LnByZXZlbnREZWZhdWx0KCk7XG5cdFx0XHRyZXR1cm47XG5cdFx0fVxuXG5cdFx0Y29uc3QgdGFyZ2V0Q29udGV4dDogQ29udGV4dCB8IG51bGwgPSB1aTVFdmVudC5nZXRQYXJhbWV0ZXIoXCJiaW5kaW5nQ29udGV4dFwiKTtcblx0XHRpZiAoZHJhZ2dlZENvbnRleHQuaXNBbmNlc3Rvck9mKHRhcmdldENvbnRleHQpKSB7XG5cdFx0XHQvLyBUaGUgYW5jZXN0b3IgaXMgZHJvcHBlZCBvbiBhIGRlc2NlbmRhbnQgLT4gbm90IGF1dGhvcml6ZWRcblx0XHRcdHVpNUV2ZW50LnByZXZlbnREZWZhdWx0KCk7XG5cdFx0XHRyZXR1cm47XG5cdFx0fVxuXG5cdFx0bGV0IGRpc2FibGVkQmV0d2VlbiA9IGZhbHNlO1xuXHRcdGxldCBkaXNhYmxlZE9uID0gZmFsc2U7XG5cdFx0Y29uc3QgdGFibGVEZWZpbml0aW9uID0gdGhpcy5nZXRUYWJsZURlZmluaXRpb24oKTtcblx0XHRjb25zdCBpc01vdmVBbGxvd2VkSW5mbyA9IHRhYmxlRGVmaW5pdGlvbi5jb250cm9sLmlzTW92ZVRvUG9zaXRpb25BbGxvd2VkO1xuXHRcdGNvbnN0IGN1c3RvbUZ1bmN0aW9uID0gaXNNb3ZlQWxsb3dlZEluZm9cblx0XHRcdD8gRlBNSGVscGVyLmdldEN1c3RvbUZ1bmN0aW9uPChub2RlOiBDb250ZXh0LCBwYXJlbnQ6IENvbnRleHQgfCBudWxsKSA9PiBib29sZWFuPihcblx0XHRcdFx0XHRpc01vdmVBbGxvd2VkSW5mby5tb2R1bGVOYW1lLFxuXHRcdFx0XHRcdGlzTW92ZUFsbG93ZWRJbmZvLm1ldGhvZE5hbWUsXG5cdFx0XHRcdFx0dWk1RXZlbnQuZ2V0U291cmNlKCkuZ2V0UGFyZW50KCkgYXMgQ29udHJvbFxuXHRcdFx0ICApXG5cdFx0XHQ6IHVuZGVmaW5lZDtcblxuXHRcdGlmICh0YXJnZXRDb250ZXh0ID09PSB0aGlzLmdldENvbnRlbnQoKS5nZXRCaW5kaW5nQ29udGV4dCgpKSB7XG5cdFx0XHQvLyBUaGUgZHJhZyBpcyBkb25lIG9uIHRoZSB0YWJsZSBpdHNlbGYgLT4gZHJvcCBhcyByb290IG5vZGUpXG5cdFx0XHRkaXNhYmxlZE9uID0gIXRoaXMuc2FmZUlzTW92ZUFsbG93ZWQoY3VzdG9tRnVuY3Rpb24sIGRyYWdnZWRDb250ZXh0LCBudWxsKTtcblx0XHRcdGRpc2FibGVkQmV0d2VlbiA9IHRydWU7XG5cdFx0fSBlbHNlIHtcblx0XHRcdGRpc2FibGVkT24gPSAhdGhpcy5zYWZlSXNNb3ZlQWxsb3dlZChjdXN0b21GdW5jdGlvbiwgZHJhZ2dlZENvbnRleHQsIHRhcmdldENvbnRleHQpO1xuXHRcdFx0ZGlzYWJsZWRCZXR3ZWVuID0gdGFibGVEZWZpbml0aW9uLmFubm90YXRpb24uYWxsb3dEcm9wQmV0d2Vlbk5vZGVzICE9PSB0cnVlO1xuXG5cdFx0XHRpZiAoXG5cdFx0XHRcdE1hdGguYWJzKHRhcmdldENvbnRleHQuZ2V0SW5kZXgoKSEgLSBkcmFnZ2VkQ29udGV4dC5nZXRJbmRleCgpISkgPT09IDEgJiZcblx0XHRcdFx0ISh0YXJnZXRDb250ZXh0LmdldEluZGV4KCkgPT09IDAgJiYgdWk1RXZlbnQuZ2V0UGFyYW1ldGVyKFwiZHJvcFBvc2l0aW9uXCIpID09PSBcIkJlZm9yZVwiKSAmJlxuXHRcdFx0XHQhKFxuXHRcdFx0XHRcdHRhcmdldENvbnRleHQuZ2V0SW5kZXgoKSA9PT0gdGhpcy5nZXRDb250ZW50KCkuZ2V0Um93QmluZGluZygpLmdldExlbmd0aCgpIC0gMSAmJlxuXHRcdFx0XHRcdHVpNUV2ZW50LmdldFBhcmFtZXRlcihcImRyb3BQb3NpdGlvblwiKSA9PT0gXCJBZnRlclwiXG5cdFx0XHRcdClcblx0XHRcdCkge1xuXHRcdFx0XHQvL1xuXHRcdFx0XHRkaXNhYmxlZEJldHdlZW4gPSB0cnVlO1xuXHRcdFx0fVxuXG5cdFx0XHQvLyBJZiB0aGUgZHJvcCBiZXR3ZWVuIG5vZGUgaXMgYWxsb3dlZCwgd2UgbmVlZCB0byBjaGVjayBpZiB0aGUgdGFyZ2V0IGlzIGEgcm9vdCBub2RlIGFuZCBpZiB0aGUgdGFibGUgc3VwcG9ydHMgY2hhbmdlU2libGluZ0ZvclJvb3RzXG5cdFx0XHRpZiAoXG5cdFx0XHRcdCFkaXNhYmxlZEJldHdlZW4gJiZcblx0XHRcdFx0IXRhYmxlRGVmaW5pdGlvbi5hbm5vdGF0aW9uLmNoYW5nZVNpYmxpbmdGb3JSb290c1N1cHBvcnRlZCAmJlxuXHRcdFx0XHR0YXJnZXRDb250ZXh0LmdldFByb3BlcnR5KFwiQCR1aTUubm9kZS5sZXZlbFwiKSA9PT0gMVxuXHRcdFx0KSB7XG5cdFx0XHRcdGRpc2FibGVkQmV0d2VlbiA9IHRydWU7XG5cdFx0XHR9XG5cblx0XHRcdC8vIENoZWNrIGN1c3RvbSBsb2dpYyBmb3IgZHJvcCBiZXR3ZWVuIGlmIHRoZXJlJ3Mgc29tZSwgYW5kIGlmIGl0J3Mgbm90IGFscmVhZHkgZGlzYWJsZWQgYXQgdGhlIHRhYmxlIGxldmVsXG5cdFx0XHRpZiAoY3VzdG9tRnVuY3Rpb24gJiYgIWRpc2FibGVkQmV0d2Vlbikge1xuXHRcdFx0XHRkaXNhYmxlZEJldHdlZW4gPSAhdGhpcy5pc0Ryb3BCZXR3ZWVuQWxsb3dlZEZvckRyYWcoY3VzdG9tRnVuY3Rpb24sIGRyYWdnZWRDb250ZXh0LCB0YXJnZXRDb250ZXh0KTtcblx0XHRcdH1cblx0XHR9XG5cblx0XHRsZXQgYWxsb3dlZERyb3BQb3NpdGlvbjogRHJvcFBvc2l0aW9uID0gRHJvcFBvc2l0aW9uLk9uT3JCZXR3ZWVuO1xuXHRcdGlmIChkaXNhYmxlZEJldHdlZW4gJiYgZGlzYWJsZWRPbikge1xuXHRcdFx0Ly9TZXQgdGhlIGVsZW1lbnQgYXMgbm9uIGRyb3BwYWJsZVxuXHRcdFx0dWk1RXZlbnQucHJldmVudERlZmF1bHQoKTtcblx0XHRcdHJldHVybjtcblx0XHR9XG5cdFx0aWYgKGRpc2FibGVkQmV0d2Vlbikge1xuXHRcdFx0YWxsb3dlZERyb3BQb3NpdGlvbiA9IERyb3BQb3NpdGlvbi5Pbjtcblx0XHR9IGVsc2UgaWYgKGRpc2FibGVkT24pIHtcblx0XHRcdGFsbG93ZWREcm9wUG9zaXRpb24gPSBEcm9wUG9zaXRpb24uQmV0d2Vlbjtcblx0XHR9XG5cdFx0dWk1RXZlbnQuZ2V0U291cmNlKCkuc2V0RHJvcFBvc2l0aW9uKGFsbG93ZWREcm9wUG9zaXRpb24pO1xuXHR9XG5cblx0LyoqXG5cdCAqIFN0YXJ0cyB0aGUgZHJhZyBvZiB0aGUgZG9jdW1lbnQuXG5cdCAqIEBwYXJhbSB1aTVFdmVudCBVSTUgZXZlbnQgY29taW5nIGZyb20gdGhlIE1EQyBkcmFnIGFuZCBkcm9wIGNvbmZpZ1xuXHQgKi9cblx0X29uRHJhZ1N0YXJ0RG9jdW1lbnQodGhpczogSVRhYmxlQmxvY2sgJiBUYWJsZUhpZXJhcmNoeSwgdWk1RXZlbnQ6IFVJNUV2ZW50PHsgYmluZGluZ0NvbnRleHQ6IENvbnRleHQgfSwgQ29udHJvbD4pOiB2b2lkIHtcblx0XHRjb25zdCBjb250ZXh0ID0gdWk1RXZlbnQuZ2V0UGFyYW1ldGVyKFwiYmluZGluZ0NvbnRleHRcIik7XG5cdFx0Y29uc3QgdXBkYXRhYmxlUHJvcGVydHlQYXRoID0gdGhpcy5nZXRUYWJsZURlZmluaXRpb24oKS5hbm5vdGF0aW9uLnVwZGF0YWJsZVByb3BlcnR5UGF0aDtcblxuXHRcdC8vIENoZWNrIGlmIHRoZSBjb250ZXh0IGNhbiBiZSB1cGRhdGVkIGFjY29yZGluZyB0byB1cGRhdGUgcmVzdHJpY3Rpb25zXG5cdFx0bGV0IGRpc2FibGVEcmFnID0gISF1cGRhdGFibGVQcm9wZXJ0eVBhdGggJiYgIWNvbnRleHQuZ2V0UHJvcGVydHkodXBkYXRhYmxlUHJvcGVydHlQYXRoKTtcblxuXHRcdC8vIEluIGNhc2Ugb2YgYSBUcmVlVGFibGUgaW4gYSBMaXN0UmVwb3J0IHdpdGggZHJhZnQsIGNoZWNrIHRoYXQgdGhlIGNvbnRleHQgaGFzIG5vIGFzc29jaWF0ZWQgZHJhZnRcblx0XHRpZiAoIWRpc2FibGVEcmFnICYmICEoY29udGV4dC5nZXRCaW5kaW5nKCkgYXMgT0RhdGFMaXN0QmluZGluZykuaXNSZWxhdGl2ZSgpKSB7XG5cdFx0XHRkaXNhYmxlRHJhZyA9IGNvbnRleHQuZ2V0UHJvcGVydHkoXCJIYXNEcmFmdEVudGl0eVwiKSA9PT0gdHJ1ZTtcblx0XHR9XG5cblx0XHQvLyBBcHBseSBjdXN0b20gbG9naWMgaWYgdGhlcmUncyBvbmVcblx0XHRjb25zdCBpc01vdmFibGVJbmZvID0gdGhpcy5nZXRUYWJsZURlZmluaXRpb24oKS5jb250cm9sLmlzTm9kZU1vdmFibGU7XG5cdFx0dHJ5IHtcblx0XHRcdGlmIChpc01vdmFibGVJbmZvICYmICFkaXNhYmxlRHJhZykge1xuXHRcdFx0XHRkaXNhYmxlRHJhZyA9XG5cdFx0XHRcdFx0KFxuXHRcdFx0XHRcdFx0RlBNSGVscGVyLmdldEN1c3RvbUZ1bmN0aW9uPChjb250ZXh0czogQ29udGV4dFtdKSA9PiBib29sZWFuPihcblx0XHRcdFx0XHRcdFx0aXNNb3ZhYmxlSW5mby5tb2R1bGVOYW1lLFxuXHRcdFx0XHRcdFx0XHRpc01vdmFibGVJbmZvLm1ldGhvZE5hbWUsXG5cdFx0XHRcdFx0XHRcdHVpNUV2ZW50LmdldFNvdXJjZSgpXG5cdFx0XHRcdFx0XHQpIGFzIEZ1bmN0aW9uXG5cdFx0XHRcdFx0KShjb250ZXh0KSA9PT0gZmFsc2U7XG5cdFx0XHR9XG5cdFx0fSBjYXRjaCAoX2Vycm9yKSB7XG5cdFx0XHRkaXNhYmxlRHJhZyA9IGZhbHNlO1xuXHRcdH1cblx0XHRpZiAoZGlzYWJsZURyYWcpIHtcblx0XHRcdC8vU2V0IHRoZSBlbGVtZW50IGFzIG5vbiBkcmFnZ2FibGVcblx0XHRcdHVpNUV2ZW50LnByZXZlbnREZWZhdWx0KCk7XG5cdFx0fVxuXHR9XG5cblx0LyoqXG5cdCAqIERyb3BzIHRoZSBkb2N1bWVudC5cblx0ICogQHBhcmFtIHVpNUV2ZW50IFVJNSBldmVudCBjb21pbmcgZnJvbSB0aGUgTURDIGRyYWcgYW5kIGRyb3AgY29uZmlnXG5cdCAqIEByZXR1cm5zIFRoZSBQcm9taXNlXG5cdCAqL1xuXHRhc3luYyBfb25Ecm9wRG9jdW1lbnQoXG5cdFx0dGhpczogSVRhYmxlQmxvY2sgJiBUYWJsZUhpZXJhcmNoeSxcblx0XHR1aTVFdmVudDogVUk1RXZlbnQ8e1xuXHRcdFx0YmluZGluZ0NvbnRleHQ6IENvbnRleHQ7XG5cdFx0XHRkcmFnU291cmNlOiBDb250ZXh0O1xuXHRcdFx0ZHJvcFBvc2l0aW9uOiBzdHJpbmc7XG5cdFx0fT5cblx0KTogUHJvbWlzZTx2b2lkPiB7XG5cdFx0QnVzeUxvY2tlci5sb2NrKHRoaXMuZ2V0Q29udGVudCgpKTtcblxuXHRcdHRyeSB7XG5cdFx0XHRjb25zdCBkcm9wcGVkT25Db250ZXh0ID0gdWk1RXZlbnQuZ2V0UGFyYW1ldGVyKFwiYmluZGluZ0NvbnRleHRcIik7XG5cdFx0XHRsZXQgZHJvcEluZm86IERyb3BJbmZvcm1hdGlvbjtcblx0XHRcdGlmIChkcm9wcGVkT25Db250ZXh0ID09PSB0aGlzLmdldENvbnRlbnQoKS5nZXRCaW5kaW5nQ29udGV4dCgpKSB7XG5cdFx0XHRcdC8vIFRoZSBkcm9wIGlzIGRvbmUgb24gdGhlIHRhYmxlIGl0c2VsZiAtPiBkcm9wIGFzIHJvb3Qgbm9kZSlcblx0XHRcdFx0ZHJvcEluZm8gPSB7IHBvc2l0aW9uOiBEcm9wUG9zaXRpb24uT24sIHBhcmVudENvbnRleHQ6IG51bGwgfTtcblx0XHRcdH0gZWxzZSBpZiAodWk1RXZlbnQuZ2V0UGFyYW1ldGVyKFwiZHJvcFBvc2l0aW9uXCIpID09PSBEcm9wUG9zaXRpb24uT24pIHtcblx0XHRcdFx0Ly8gRHJvcCBvbiBhIG5vZGVcblx0XHRcdFx0ZHJvcEluZm8gPSB7IHBvc2l0aW9uOiBEcm9wUG9zaXRpb24uT24sIHBhcmVudENvbnRleHQ6IGRyb3BwZWRPbkNvbnRleHQgfTtcblx0XHRcdH0gZWxzZSB7XG5cdFx0XHRcdC8vIERyb3AgYmV0d2VlbiAyIG5vZGVzXG5cdFx0XHRcdGxldCBjb250ZXh0QmVmb3JlOiBDb250ZXh0IHwgbnVsbDtcblx0XHRcdFx0bGV0IGNvbnRleHRBZnRlcjogQ29udGV4dCB8IG51bGw7XG5cdFx0XHRcdGlmICh1aTVFdmVudC5nZXRQYXJhbWV0ZXIoXCJkcm9wUG9zaXRpb25cIikgPT09IFwiQWZ0ZXJcIikge1xuXHRcdFx0XHRcdGNvbnRleHRCZWZvcmUgPSBkcm9wcGVkT25Db250ZXh0O1xuXHRcdFx0XHRcdGNvbnRleHRBZnRlciA9IHRoaXMuZ2V0Q29udGV4dEFmdGVyKGRyb3BwZWRPbkNvbnRleHQpO1xuXHRcdFx0XHR9IGVsc2Uge1xuXHRcdFx0XHRcdGNvbnRleHRCZWZvcmUgPSB0aGlzLmdldENvbnRleHRCZWZvcmUoZHJvcHBlZE9uQ29udGV4dCk7XG5cdFx0XHRcdFx0Y29udGV4dEFmdGVyID0gZHJvcHBlZE9uQ29udGV4dDtcblx0XHRcdFx0fVxuXHRcdFx0XHRkcm9wSW5mbyA9IHsgcG9zaXRpb246IERyb3BQb3NpdGlvbi5CZXR3ZWVuLCBjb250ZXh0QWZ0ZXIsIGNvbnRleHRCZWZvcmUgfTtcblx0XHRcdH1cblxuXHRcdFx0Y29uc3QgbW92ZWRDb250ZXh0ID0gdWk1RXZlbnQuZ2V0UGFyYW1ldGVyKFwiZHJhZ1NvdXJjZVwiKTtcblx0XHRcdGF3YWl0IFByb21pc2UuYWxsKFt0aGlzLmRyb3BDb250ZXh0KG1vdmVkQ29udGV4dCwgZHJvcEluZm8pLCB0aGlzLnJlcXVlc3RTaWRlRWZmZWN0c0ZvckNoYW5nZU5leHRTaWJsaW5nQWN0aW9uKG1vdmVkQ29udGV4dCldKTtcblx0XHR9IGNhdGNoIChlcnJvcikge1xuXHRcdFx0TWVzc2FnZVRvYXN0LnNob3codGhpcy5nZXRUcmFuc2xhdGVkVGV4dChcIk1fVEFCTEVEUk9QX0ZBSUxFRFwiLCBbXCJcIl0pKTtcblx0XHRcdExvZy5lcnJvcihcIlRoZSBvcGVyYXRpb24gaXMgdW5zdWNjZXNzZnVsLiBcIiArIChlcnJvciBhcyBFcnJvcikubWVzc2FnZSA/PyBcIlwiKTtcblx0XHR9IGZpbmFsbHkge1xuXHRcdFx0QnVzeUxvY2tlci51bmxvY2sodGhpcy5nZXRDb250ZW50KCkpO1xuXHRcdH1cblx0fVxuXG5cdC8qKlxuXHQgKiBIYW5kbGVyIGZvciBjb2xsYXBzZS9leHBhbmQgZnJvbSB0aGUgY29udGV4dCBtZW51LlxuXHQgKiBAcGFyYW0gdGhpc1xuXHQgKiBAcGFyYW0gX3VpNUV2ZW50XG5cdCAqIEBwYXJhbSBleHBhbmRcblx0ICovXG5cdGFzeW5jIF9vbkNvbGxhcHNlRXhwYW5kTm9kZSh0aGlzOiBJVGFibGVCbG9jayAmIFRhYmxlSGllcmFyY2h5LCBfdWk1RXZlbnQ6IFVJNUV2ZW50LCBleHBhbmQ6IGJvb2xlYW4pOiBQcm9taXNlPHZvaWQ+IHtcblx0XHRjb25zdCBzZWxlY3RlZENvbnRleHRzID0gdGhpcy5nZXRTZWxlY3RlZENvbnRleHRzKCk7XG5cdFx0aWYgKGV4cGFuZCkge1xuXHRcdFx0Y29uc3QgcHJvbWlzZUFycmF5ID0gc2VsZWN0ZWRDb250ZXh0cy5tYXAoYXN5bmMgKHNpbmdsZUNvbnRleHQ6IENvbnRleHQpID0+IHtcblx0XHRcdFx0Ly8gQ2hlY2tpbmcgZm9yIGZhbHNlIHNwZWNpZmljYWxseTsgdW5kZWZpbmVkIG1lYW5zIHRoZSBub2RlIGNhbm5vdCBleHBhbmQvY29sbGFwc2Vcblx0XHRcdFx0aWYgKHNpbmdsZUNvbnRleHQuaXNFeHBhbmRlZCgpICE9PSB1bmRlZmluZWQpIHtcblx0XHRcdFx0XHQvLyBUZW1wb3Jhcnkgd29ya2Fyb3VuZCBkdWUgdG8gbW9kZWwgbGltaXRhdGlvbi5cblx0XHRcdFx0XHQvLyBXZSBuZWVkIHRvIGNvbGxhcHNlIGEgbm9kZSBiZWZvcmUgZXhwYW5kaW5nIGl0IHRvIGVuc3VyZSB3ZSBleHBhbmQgaXQgY29tcGxldGVseS5cblx0XHRcdFx0XHQvLyBXaWxsIGJlIGNoYW5nZWQgb25jZSB0aGUgbW9kZWwgZml4ZXMgdGhlIGlzc3VlLlxuXHRcdFx0XHRcdGlmIChzaW5nbGVDb250ZXh0LmlzRXhwYW5kZWQoKSA9PT0gdHJ1ZSkge1xuXHRcdFx0XHRcdFx0YXdhaXQgc2luZ2xlQ29udGV4dC5jb2xsYXBzZSgpO1xuXHRcdFx0XHRcdH1cblx0XHRcdFx0XHRyZXR1cm4gc2luZ2xlQ29udGV4dC5leHBhbmQoTnVtYmVyLk1BWF9TQUZFX0lOVEVHRVIpO1xuXHRcdFx0XHR9XG5cdFx0XHR9KTtcblx0XHRcdGF3YWl0IFByb21pc2UuYWxsKHByb21pc2VBcnJheSk7XG5cdFx0fSBlbHNlIHtcblx0XHRcdGF3YWl0IFByb21pc2UuYWxsKFxuXHRcdFx0XHRzZWxlY3RlZENvbnRleHRzLm1hcChhc3luYyAoc2luZ2xlQ29udGV4dDogQ29udGV4dCkgPT4ge1xuXHRcdFx0XHRcdGlmIChzaW5nbGVDb250ZXh0LmlzRXhwYW5kZWQoKSA9PT0gdHJ1ZSkge1xuXHRcdFx0XHRcdFx0cmV0dXJuIHNpbmdsZUNvbnRleHQuY29sbGFwc2UodHJ1ZSk7XG5cdFx0XHRcdFx0fVxuXHRcdFx0XHR9KVxuXHRcdFx0KTtcblx0XHR9XG5cdH1cblxuXHQvKipcblx0ICogSW50ZXJuYWwgbWV0aG9kIHRvIG1vdmUgYSByb3cgdXAgb3IgZG93biBpbiBhIFRyZWUgdGFibGUuXG5cdCAqIEBwYXJhbSBfdWk1RXZlbnRcblx0ICogQHBhcmFtIG1vdmVVcCBUcnVlIGZvciBtb3ZlIHVwLCBmYWxzZSBmb3IgbW92ZSBkb3duXG5cdCAqIEBwYXJhbSBmb3JDb250ZXh0TWVudVxuXHQgKi9cblx0YXN5bmMgX29uTW92ZVVwRG93bih0aGlzOiBJVGFibGVCbG9jayAmIFRhYmxlSGllcmFyY2h5LCBfdWk1RXZlbnQ6IFVJNUV2ZW50LCBtb3ZlVXA6IGJvb2xlYW4sIGZvckNvbnRleHRNZW51ID0gZmFsc2UpOiBQcm9taXNlPHZvaWQ+IHtcblx0XHRjb25zdCBzZWxlY3RlZENvbnRleHRzID0gdGhpcy5nZXRTZWxlY3RlZENvbnRleHRzKCk7XG5cdFx0aWYgKHNlbGVjdGVkQ29udGV4dHMubGVuZ3RoICE9PSAxKSB7XG5cdFx0XHRyZXR1cm47XG5cdFx0fVxuXHRcdGNvbnN0IG1kY1RhYmxlID0gdGhpcy5nZXRDb250ZW50KCk7XG5cdFx0bWRjVGFibGUuc2V0QnVzeSh0cnVlKTtcblxuXHRcdC8vIE1vdmUgdGhlIGNvbnRleHQgdXAgb3IgZG93blxuXHRcdGNvbnN0IG1vdmVkQ29udGV4dCA9IHNlbGVjdGVkQ29udGV4dHNbMF07XG5cdFx0Y29uc3QgcGFyZW50Q29udGV4dCA9IGF3YWl0IG1vdmVkQ29udGV4dC5yZXF1ZXN0UGFyZW50KCk7XG5cdFx0bGV0IGNvbnRleHRNb3ZlZCA9IGZhbHNlO1xuXHRcdGxldCBtb3ZlUHJvbWlzZSA9IG51bGw7XG5cdFx0aWYgKG1vdmVVcCkge1xuXHRcdFx0Y29uc3QgcHJldmlvdXNTaWJsaW5nID0gYXdhaXQgbW92ZWRDb250ZXh0LnJlcXVlc3RTaWJsaW5nKC0xKTtcblx0XHRcdGlmIChwcmV2aW91c1NpYmxpbmcpIHtcblx0XHRcdFx0bW92ZVByb21pc2UgPSBtb3ZlZENvbnRleHQubW92ZSh7IG5leHRTaWJsaW5nOiBwcmV2aW91c1NpYmxpbmcsIHBhcmVudDogcGFyZW50Q29udGV4dCB9KTtcblx0XHRcdFx0Y29udGV4dE1vdmVkID0gdHJ1ZTtcblx0XHRcdH1cblx0XHR9IGVsc2Uge1xuXHRcdFx0Y29uc3QgbmV4dFNpYmxpbmcgPSBhd2FpdCBtb3ZlZENvbnRleHQucmVxdWVzdFNpYmxpbmcoMSk7XG5cdFx0XHRpZiAobmV4dFNpYmxpbmcpIHtcblx0XHRcdFx0bW92ZVByb21pc2UgPSBuZXh0U2libGluZy5tb3ZlKHsgbmV4dFNpYmxpbmc6IG1vdmVkQ29udGV4dCwgcGFyZW50OiBwYXJlbnRDb250ZXh0IH0pO1xuXHRcdFx0XHRjb250ZXh0TW92ZWQgPSB0cnVlO1xuXHRcdFx0fVxuXHRcdH1cblxuXHRcdGF3YWl0IFByb21pc2UuYWxsKFttb3ZlUHJvbWlzZSwgdGhpcy5yZXF1ZXN0U2lkZUVmZmVjdHNGb3JDaGFuZ2VOZXh0U2libGluZ0FjdGlvbihtb3ZlZENvbnRleHQpXSk7XG5cblx0XHQvLyBTY3JvbGwgdG8gdGhlIG5ldyBwb3NpdGlvblxuXHRcdGNvbnN0IG5ld0luZGV4ID0gbW92ZWRDb250ZXh0LmdldEluZGV4KCk7XG5cdFx0aWYgKGNvbnRleHRNb3ZlZCAmJiBuZXdJbmRleCAhPT0gdW5kZWZpbmVkICYmIG5ld0luZGV4ID49IDApIHtcblx0XHRcdGlmICghZm9yQ29udGV4dE1lbnUpIHtcblx0XHRcdFx0bWRjVGFibGUuc2Nyb2xsVG9JbmRleChuZXdJbmRleCk7XG5cdFx0XHR9IGVsc2Uge1xuXHRcdFx0XHRtZGNUYWJsZS5mb2N1c1JvdyhuZXdJbmRleCk7XG5cdFx0XHR9XG5cdFx0fVxuXHRcdG1kY1RhYmxlLnNldEJ1c3koZmFsc2UpO1xuXHR9XG5cblx0LyoqXG5cdCAqIFJlcXVlc3RzIHRoZSBzaWRlIGVmZmVjdCBmb3IgdGhlIENoYW5nZU5leHRTaWJsaW5nQWN0aW9uLlxuXHQgKiBAcGFyYW0gbW92ZWRDb250ZXh0IFRoZSBjb250ZXh0IHRoYXQgaGFzIGJlZW4gbW92ZWRcblx0ICogQHJldHVybnMgQSBQcm9taXNlXG5cdCAqL1xuXHRhc3luYyByZXF1ZXN0U2lkZUVmZmVjdHNGb3JDaGFuZ2VOZXh0U2libGluZ0FjdGlvbih0aGlzOiBJVGFibGVCbG9jayAmIFRhYmxlSGllcmFyY2h5LCBtb3ZlZENvbnRleHQ6IENvbnRleHQpOiBQcm9taXNlPHZvaWQ+IHtcblx0XHRyZXR1cm4gdGhpcy5fcmVxdWVzdFNpZGVFZmZlY3RzRm9ySGllcmFyY2h5QWN0aW9ucyhtb3ZlZENvbnRleHQsIFwiQ2hhbmdlTmV4dFNpYmxpbmdBY3Rpb25cIik7XG5cdH1cblxuXHQvKipcblx0ICogUmVxdWVzdHMgdGhlIHNpZGUgZWZmZWN0IGZvciB0aGUgQ29weUFjdGlvbi5cblx0ICogQHBhcmFtIG1vdmVkQ29udGV4dCBUaGUgY29udGV4dCB0aGF0IGhhcyBiZWVuIG1vdmVkXG5cdCAqIEByZXR1cm5zIEEgUHJvbWlzZVxuXHQgKi9cblx0YXN5bmMgcmVxdWVzdFNpZGVFZmZlY3RzRm9yQ29weUFjdGlvbih0aGlzOiBJVGFibGVCbG9jayAmIFRhYmxlSGllcmFyY2h5LCBtb3ZlZENvbnRleHQ6IENvbnRleHQpOiBQcm9taXNlPHZvaWQ+IHtcblx0XHRyZXR1cm4gdGhpcy5fcmVxdWVzdFNpZGVFZmZlY3RzRm9ySGllcmFyY2h5QWN0aW9ucyhtb3ZlZENvbnRleHQsIFwiQ29weUFjdGlvblwiKTtcblx0fVxuXG5cdC8qKlxuXHQgKiBSZXF1ZXN0cyB0aGUgc2lkZSBlZmZlY3QgZm9yIHRoZSBDb3B5QWN0aW9uIG9yIENoYW5nZU5leHRTaWJsaW5nQWN0aW9uLlxuXHQgKiBAcGFyYW0gbW92ZWRDb250ZXh0IFRoZSBjb250ZXh0IHRoYXQgaGFzIGJlZW4gbW92ZWRcblx0ICogQHBhcmFtIGFjdGlvblxuXHQgKiBAcmV0dXJucyBBIFByb21pc2Vcblx0ICovXG5cdGFzeW5jIF9yZXF1ZXN0U2lkZUVmZmVjdHNGb3JIaWVyYXJjaHlBY3Rpb25zKFxuXHRcdHRoaXM6IElUYWJsZUJsb2NrICYgVGFibGVIaWVyYXJjaHksXG5cdFx0bW92ZWRDb250ZXh0OiBDb250ZXh0LFxuXHRcdGFjdGlvbjogXCJDaGFuZ2VOZXh0U2libGluZ0FjdGlvblwiIHwgXCJDb3B5QWN0aW9uXCJcblx0KTogUHJvbWlzZTx2b2lkPiB7XG5cdFx0Y29uc3QgZW50aXR5UGF0aCA9IHRoaXMuZ2V0Q29udGVudCgpLmRhdGEoXCJtZXRhUGF0aFwiKTtcblx0XHRjb25zdCBtZXRhTW9kZWwgPSBtb3ZlZENvbnRleHQuZ2V0TW9kZWwoKS5nZXRNZXRhTW9kZWwoKTtcblxuXHRcdGNvbnN0IHRhcmdldE9iamVjdCA9IG1ldGFNb2RlbC5nZXRDb250ZXh0KGVudGl0eVBhdGgpO1xuXHRcdGNvbnN0IGNvbnZlcnRNZXRhTW9kZWxDb250ZXh0ID0gTWV0YU1vZGVsQ29udmVydGVyLmNvbnZlcnRNZXRhTW9kZWxDb250ZXh0KHRhcmdldE9iamVjdCkgYXMgTmF2aWdhdGlvblByb3BlcnR5IHwgRW50aXR5U2V0O1xuXHRcdGNvbnN0IGVudGl0eVR5cGUgPSAoY29udmVydE1ldGFNb2RlbENvbnRleHQgYXMgTmF2aWdhdGlvblByb3BlcnR5KS50YXJnZXRUeXBlID8/IChjb252ZXJ0TWV0YU1vZGVsQ29udGV4dCBhcyBFbnRpdHlTZXQpLmVudGl0eVR5cGU7XG5cdFx0Y29uc3QgYWN0aW9uTmFtZSA9IGVudGl0eVR5cGUuYW5ub3RhdGlvbnMuSGllcmFyY2h5Py5bXG5cdFx0XHRgUmVjdXJzaXZlSGllcmFyY2h5QWN0aW9ucyMke3RoaXMuZ2V0VGFibGVEZWZpbml0aW9uKCkuY29udHJvbC5oaWVyYXJjaHlRdWFsaWZpZXIgPz8gXCJcIn1gXG5cdFx0XT8uW2FjdGlvbl0gYXMgc3RyaW5nIHwgdW5kZWZpbmVkO1xuXG5cdFx0aWYgKGFjdGlvbk5hbWUpIHtcblx0XHRcdGNvbnN0IGFwcENvbXBvbmVudCA9IENvbW1vblV0aWxzLmdldEFwcENvbXBvbmVudCh0aGlzLmdldENvbnRlbnQoKSk7XG5cdFx0XHRjb25zdCBzaWRlRWZmZWN0c1NlcnZpY2UgPSBhcHBDb21wb25lbnQuZ2V0U2lkZUVmZmVjdHNTZXJ2aWNlKCk7XG5cdFx0XHRjb25zdCBzaWRlRWZmZWN0cyA9IHNpZGVFZmZlY3RzU2VydmljZS5nZXRPRGF0YUFjdGlvblNpZGVFZmZlY3RzKGFjdGlvbk5hbWUsIG1vdmVkQ29udGV4dCk7XG5cdFx0XHRpZiAoc2lkZUVmZmVjdHMpIHtcblx0XHRcdFx0YXdhaXQgc2lkZUVmZmVjdHNTZXJ2aWNlLnJlcXVlc3RTaWRlRWZmZWN0c0Zvck9EYXRhQWN0aW9uKHNpZGVFZmZlY3RzLCBtb3ZlZENvbnRleHQpO1xuXHRcdFx0fVxuXHRcdH1cblx0fVxuXG5cdC8qKlxuXHQgKiBTYWZlbHkgY2hlY2tzIGlmIG1vdmluZyBhIG5vZGUgaXMgYWxsb3dlZC5cblx0ICogQHBhcmFtIGN1c3RvbUZ1bmN0aW9uXG5cdCAqIEBwYXJhbSBtb3ZlZENvbnRleHRcblx0ICogQHBhcmFtIHBhcmVudENvbnRleHRcblx0ICogQHJldHVybnMgVHJ1ZSBpZiBhbGxvd2VkXG5cdCAqL1xuXHRwcml2YXRlIHNhZmVJc01vdmVBbGxvd2VkKFxuXHRcdGN1c3RvbUZ1bmN0aW9uOiAoKGNvbnRleHQ6IENvbnRleHQsIHBhcmVudDogQ29udGV4dCB8IG51bGwpID0+IGJvb2xlYW4pIHwgdW5kZWZpbmVkLFxuXHRcdG1vdmVkQ29udGV4dDogQ29udGV4dCxcblx0XHRwYXJlbnRDb250ZXh0OiBDb250ZXh0IHwgbnVsbFxuXHQpOiBib29sZWFuIHtcblx0XHRpZiAoIWN1c3RvbUZ1bmN0aW9uKSB7XG5cdFx0XHRyZXR1cm4gdHJ1ZTtcblx0XHR9XG5cblx0XHRsZXQgYWxsb3dlZCA9IHRydWU7XG5cdFx0dHJ5IHtcblx0XHRcdGFsbG93ZWQgPSBjdXN0b21GdW5jdGlvbihtb3ZlZENvbnRleHQsIHBhcmVudENvbnRleHQpID09PSB0cnVlO1xuXHRcdH0gY2F0Y2ggKGVycm9yKSB7XG5cdFx0XHRMb2cuZXJyb3IoXCJDYW5ub3QgZXhlY3V0ZSBmdW5jdGlvbiByZWxhdGVkIHRvIGlzTW92ZVRvUG9zaXRpb25BbGxvd2VkXCIsIGVycm9yIGFzIHN0cmluZyk7XG5cdFx0XHRhbGxvd2VkID0gdHJ1ZTtcblx0XHR9XG5cblx0XHRyZXR1cm4gYWxsb3dlZDtcblx0fVxuXG5cdC8qKlxuXHQgKiBDaGVja3MgaXMgZHJvcCBcImJldHdlZW5cIiBpcyBhbGxvd2VkIGJ5IGN1c3RvbSBsb2dpYyBmb3IgYSBnaXZlbiB0YXJnZXRDb250ZXh0LlxuXHQgKiBAcGFyYW0gY3VzdG9tRnVuY3Rpb25cblx0ICogQHBhcmFtIGRyYWdnZWRDb250ZXh0XG5cdCAqIEBwYXJhbSB0YXJnZXRDb250ZXh0XG5cdCAqIEByZXR1cm5zIFRydWUgaWYgYWxsb3dlZFxuXHQgKi9cblx0cHJpdmF0ZSBpc0Ryb3BCZXR3ZWVuQWxsb3dlZEZvckRyYWcoXG5cdFx0Y3VzdG9tRnVuY3Rpb246IChjb250ZXh0OiBDb250ZXh0LCBwYXJlbnQ6IENvbnRleHQgfCBudWxsKSA9PiBib29sZWFuLFxuXHRcdGRyYWdnZWRDb250ZXh0OiBDb250ZXh0LFxuXHRcdHRhcmdldENvbnRleHQ6IENvbnRleHRcblx0KTogYm9vbGVhbiB7XG5cdFx0bGV0IGlzQWxsb3dlZCA9IHRydWU7XG5cblx0XHQvLyBEZXRlcm1pbmUgd2hhdCB0byBkbyBpZiB3ZSBkcm9wIGJlZm9yZSB0YXJnZXRDb250ZXh0XG5cdFx0Y29uc3QgY29udGV4dEJlZm9yZSA9IHRoaXMuZ2V0Q29udGV4dEJlZm9yZSh0YXJnZXRDb250ZXh0KTtcblx0XHRjb25zdCBwYXJlbnRCZWZvcmUgPSBjb250ZXh0QmVmb3JlID09PSBudWxsID8gbnVsbCA6IGNvbnRleHRCZWZvcmUuZ2V0UGFyZW50KCk7XG5cdFx0Y29uc3QgcGFyYW1zQmVmb3JlID0gdGhpcy5nZXREcm9wQmV0d2VlblBhcmFtZXRlcnMoY29udGV4dEJlZm9yZSwgcGFyZW50QmVmb3JlLCB0YXJnZXRDb250ZXh0LCB0YXJnZXRDb250ZXh0LmdldFBhcmVudCgpKTtcblxuXHRcdC8vIERldGVybWluZSB3aGF0IHRvIGRvIGlmIHdlIGRyb3AgYWZ0ZXIgdGFyZ2V0Q29udGV4dFxuXHRcdGNvbnN0IGNvbnRleHRBZnRlciA9IHRoaXMuZ2V0Q29udGV4dEFmdGVyKHRhcmdldENvbnRleHQpO1xuXHRcdGNvbnN0IHBhcmVudEFmdGVyID0gY29udGV4dEFmdGVyID09PSBudWxsID8gbnVsbCA6IGNvbnRleHRBZnRlci5nZXRQYXJlbnQoKTtcblx0XHRjb25zdCBwYXJhbXNBZnRlciA9IHRoaXMuZ2V0RHJvcEJldHdlZW5QYXJhbWV0ZXJzKHRhcmdldENvbnRleHQsIHRhcmdldENvbnRleHQuZ2V0UGFyZW50KCksIGNvbnRleHRBZnRlciwgcGFyZW50QWZ0ZXIpO1xuXG5cdFx0Ly8gSWYgcGFyYW1zQmVmb3JlIG9yIHBhcmFtc0FmdGVyIGNhbm5vdCBiZSBkZXRlcm1pbmVkIChiZWNhdXNlIHBhcmVudHMgYXJlIG5vdCBsb2FkZWQpLCB3ZSBhbGxvdyBkcm9wIGJldHdlZW4gYW5kIGRvIHRoZSByZWFsIGNoZWNrIGluIG9uRHJvcERvY3VtZW50XG5cdFx0aWYgKHBhcmFtc0JlZm9yZSAhPT0gdW5kZWZpbmVkICYmIHBhcmFtc0FmdGVyICE9PSB1bmRlZmluZWQpIHtcblx0XHRcdGlmIChwYXJhbXNCZWZvcmUucGFyZW50ID09PSBwYXJhbXNBZnRlci5wYXJlbnQpIHtcblx0XHRcdFx0Ly8gRHJvcHBpbmcgYmVmb3JlIG9yIGFmdGVyIHdpbGwgbW92ZSB1bmRlciB0aGUgc2FtZSBwYXJlbnQgLS0+IHdlIGNhbGwgdGhlIGN1c3RvbSBsb2dpYyBvbmx5IG9uY2Vcblx0XHRcdFx0aXNBbGxvd2VkID0gdGhpcy5zYWZlSXNNb3ZlQWxsb3dlZChjdXN0b21GdW5jdGlvbiwgZHJhZ2dlZENvbnRleHQsIHBhcmFtc0JlZm9yZS5wYXJlbnQpO1xuXHRcdFx0fSBlbHNlIHtcblx0XHRcdFx0Ly8gQXMgdGhlIE1EQyB0YWJsZSBjYW5ub3QgZGlzYWJsZSBkcm9wIGJlZm9yZSBhbmQgYWZ0ZXIgc2VwYXJhdGVseSwgd2UgZGlzYWJsZSBkcm9wIGJldHdlZW4gb25seSBpZiBib3RoIGRyb3AgYmVmb3JlIGFuZCBhZnRlciBhcmUgZm9yYmlkZGVuXG5cdFx0XHRcdGlzQWxsb3dlZCA9XG5cdFx0XHRcdFx0dGhpcy5zYWZlSXNNb3ZlQWxsb3dlZChjdXN0b21GdW5jdGlvbiwgZHJhZ2dlZENvbnRleHQsIHBhcmFtc0JlZm9yZS5wYXJlbnQpIHx8XG5cdFx0XHRcdFx0dGhpcy5zYWZlSXNNb3ZlQWxsb3dlZChjdXN0b21GdW5jdGlvbiwgZHJhZ2dlZENvbnRleHQsIHBhcmFtc0FmdGVyLnBhcmVudCk7XG5cdFx0XHR9XG5cdFx0fVxuXG5cdFx0cmV0dXJuIGlzQWxsb3dlZDtcblx0fVxuXG5cdC8qKlxuXHQgKiBSZXR1cm5zIHRoZSBjb250ZXh0IHRoYXQgaXMgcGxhY2VkIGJlZm9yZSBhIGdpdmVuIGNvbnRleHQgaW4gYSBMaXN0QmluZGluZy5cblx0ICogQHBhcmFtIGNvbnRleHRcblx0ICogQHJldHVybnMgVGhlIGNvbnRleHQgYmVmb3JlLCBvciBudWxsXG5cdCAqL1xuXHRwcml2YXRlIGdldENvbnRleHRCZWZvcmUoY29udGV4dDogQ29udGV4dCk6IENvbnRleHQgfCBudWxsIHtcblx0XHRjb25zdCBjb250ZXh0SW5kZXggPSBjb250ZXh0LmdldEluZGV4KCk7XG5cdFx0aWYgKGNvbnRleHRJbmRleCA9PT0gdW5kZWZpbmVkKSB7XG5cdFx0XHR0aHJvdyBuZXcgRXJyb3IoXCJVbmV4cGVjdGVkIGVycm9yXCIpO1xuXHRcdH1cblxuXHRcdGNvbnN0IGxpc3RCaW5kaW5nID0gY29udGV4dC5nZXRCaW5kaW5nKCkgYXMgT0RhdGFMaXN0QmluZGluZztcblx0XHRyZXR1cm4gY29udGV4dEluZGV4ID09PSAwXG5cdFx0XHQ/IG51bGxcblx0XHRcdDogbGlzdEJpbmRpbmcuZ2V0QWxsQ3VycmVudENvbnRleHRzKCkuZmluZCgoY3R4KSA9PiB7XG5cdFx0XHRcdFx0cmV0dXJuIGN0eC5nZXRJbmRleCgpID09PSBjb250ZXh0SW5kZXggLSAxO1xuXHRcdFx0ICB9KSA/PyBudWxsO1xuXHR9XG5cblx0LyoqXG5cdCAqIFJldHVybnMgdGhlIGNvbnRleHQgdGhhdCBpcyBwbGFjZWQgYWZ0ZXIgYSBnaXZlbiBjb250ZXh0IGluIGEgTGlzdEJpbmRpbmcuXG5cdCAqIEBwYXJhbSBjb250ZXh0XG5cdCAqIEByZXR1cm5zIFRoZSBjb250ZXh0IGFmdGVyLCBvciBudWxsXG5cdCAqL1xuXHRwcml2YXRlIGdldENvbnRleHRBZnRlcihjb250ZXh0OiBDb250ZXh0KTogQ29udGV4dCB8IG51bGwge1xuXHRcdGNvbnN0IGNvbnRleHRJbmRleCA9IGNvbnRleHQuZ2V0SW5kZXgoKTtcblx0XHRpZiAoY29udGV4dEluZGV4ID09PSB1bmRlZmluZWQpIHtcblx0XHRcdHRocm93IG5ldyBFcnJvcihcIlVuZXhwZWN0ZWQgZXJyb3JcIik7XG5cdFx0fVxuXG5cdFx0Y29uc3QgbGlzdEJpbmRpbmcgPSBjb250ZXh0LmdldEJpbmRpbmcoKSBhcyBPRGF0YUxpc3RCaW5kaW5nO1xuXHRcdHJldHVybiAoXG5cdFx0XHRsaXN0QmluZGluZy5nZXRBbGxDdXJyZW50Q29udGV4dHMoKS5maW5kKChjdHgpID0+IHtcblx0XHRcdFx0cmV0dXJuIGN0eC5nZXRJbmRleCgpID09PSBjb250ZXh0SW5kZXggKyAxO1xuXHRcdFx0fSkgPz8gbnVsbFxuXHRcdCk7XG5cdH1cblxuXHQvKipcblx0ICogUmV0dXJucyBpbmZvcm1hdGlvbiB0byBwZXJmb3JtIGEgZHJvcCBiZXR3ZWVuIDIgbm9kZXM6IHRoZSBuZXcgcGFyZW50IGFuZCB0aGUgbmV4dCBzaWJsaW5nLlxuXHQgKiBAcGFyYW0gY29udGV4dEJlZm9yZSBDb250ZXh0IGFmdGVyIHdoaWNoIHRoZSBkcm9wIGlzIGRvbmVcblx0ICogQHBhcmFtIHBhcmVudEJlZm9yZSBQYXJlbnQgb2YgY29udGV4dEJlZm9yZSAodW5kZWZpbmVkIGlmIG5vdCBrbm93bilcblx0ICogQHBhcmFtIGNvbnRleHRBZnRlciBDb250ZXh0IGJlZm9yZSB3aGljaCB0aGUgZHJvcCBpcyBkb25lXG5cdCAqIEBwYXJhbSBwYXJlbnRBZnRlciBQYXJlbnQgb2YgY29udGV4dEFmdGVyICh1bmRlZmluZWQgaWYgbm90IGtub3duKVxuXHQgKiBAcmV0dXJucyBUaGUgbmV3IHBhcmVudCBhbmQgdGhlIG5leHQgc2libGluZywgb3IgdW5kZWZpbmVkIGlmIGl0IGNhbm5vdCBiZSBkZXRlcm1pbmVkXG5cdCAqL1xuXHRwcml2YXRlIGdldERyb3BCZXR3ZWVuUGFyYW1ldGVycyhcblx0XHRjb250ZXh0QmVmb3JlOiBDb250ZXh0IHwgbnVsbCxcblx0XHRwYXJlbnRCZWZvcmU6IENvbnRleHQgfCBudWxsIHwgdW5kZWZpbmVkLFxuXHRcdGNvbnRleHRBZnRlcjogQ29udGV4dCB8IG51bGwsXG5cdFx0cGFyZW50QWZ0ZXI6IENvbnRleHQgfCBudWxsIHwgdW5kZWZpbmVkXG5cdCk6IHsgcGFyZW50OiBDb250ZXh0IHwgbnVsbDsgbmV4dFNpYmxpbmc/OiBDb250ZXh0IHwgbnVsbCB9IHwgdW5kZWZpbmVkIHtcblx0XHRpZiAoY29udGV4dEJlZm9yZSA9PT0gbnVsbCkge1xuXHRcdFx0Ly8gRHJvcCBiZWZvcmUgZmlyc3Qgbm9kZSAtLT4gbW92ZSBhcyBmaXJzdCByb290IG5vZGVcblx0XHRcdHJldHVybiB7IHBhcmVudDogbnVsbCwgbmV4dFNpYmxpbmc6IGNvbnRleHRBZnRlciB9O1xuXHRcdH0gZWxzZSBpZiAoY29udGV4dEFmdGVyID09PSBudWxsKSB7XG5cdFx0XHQvLyBEcm9wIGFmdGVyIGxhc3Qgbm9kZSAtLT4gbW92ZSBhcyBuZXh0IHNpYmxpbmcgb2YgdGhlIGxhc3Qgbm9kZVxuXHRcdFx0cmV0dXJuIHBhcmVudEJlZm9yZSAhPT0gdW5kZWZpbmVkID8geyBwYXJlbnQ6IHBhcmVudEJlZm9yZSwgbmV4dFNpYmxpbmc6IG51bGwgfSA6IHVuZGVmaW5lZDtcblx0XHR9IGVsc2UgaWYgKHBhcmVudEFmdGVyID09PSBjb250ZXh0QmVmb3JlKSB7XG5cdFx0XHQvLyBEcm9wIGJldHdlZW4gYSBwYXJlbnQgYW5kIGl0cyBmaXJzdCBjaGlsZCAtLT4gbW92ZSBhcyBmaXJzdCBjaGlsZCBvZiB0aGUgcGFyZW50XG5cdFx0XHRyZXR1cm4geyBwYXJlbnQ6IGNvbnRleHRCZWZvcmUsIG5leHRTaWJsaW5nOiBjb250ZXh0QWZ0ZXIgfTtcblx0XHR9IGVsc2UgaWYgKHBhcmVudEJlZm9yZSA9PT0gdW5kZWZpbmVkIHx8IHBhcmVudEFmdGVyID09PSB1bmRlZmluZWQpIHtcblx0XHRcdC8vIElmIG9uZSBvZiB0aGUgcGFyZW50IGlzIG5vdCBrbm93biwgd2UgZG9uJ3Qga25vdyB3aGF0IHRvIGRvXG5cdFx0XHRyZXR1cm4gdW5kZWZpbmVkO1xuXHRcdH0gZWxzZSBpZiAocGFyZW50QmVmb3JlID09PSBwYXJlbnRBZnRlcikge1xuXHRcdFx0Ly8gRHJvcCBiZXR3ZWVuIDIgc2libGluZ3Ncblx0XHRcdHJldHVybiB7IHBhcmVudDogcGFyZW50QmVmb3JlLCBuZXh0U2libGluZzogY29udGV4dEFmdGVyIH07XG5cdFx0fSBlbHNlIHtcblx0XHRcdC8vIE5vZGVYXG5cdFx0XHQvLyAgLi4uLlxuXHRcdFx0Ly8gICAgIHwtLSBjb250ZXh0QmVmb3JlXG5cdFx0XHQvLyBjb250ZXh0QWZ0ZXJcblx0XHRcdC8vIC0tPiBNb3ZlIGFzIHRoZSBuZXh0IHNpYmxpbmcgb2YgY29udGV4dEJlZm9yZVxuXHRcdFx0cmV0dXJuIHsgcGFyZW50OiBwYXJlbnRCZWZvcmUsIG5leHRTaWJsaW5nOiBudWxsIH07XG5cdFx0fVxuXHR9XG5cblx0LyoqXG5cdCAqIEludGVybmFsIG1ldGhvZCB0byBkcm9wIGEgY29udGV4dCBvbiBvciBiZXR3ZWVuIDIgbm9kZXMuXG5cdCAqIEBwYXJhbSBjb250ZXh0XG5cdCAqIEBwYXJhbSBpbmZvXG5cdCAqIEByZXR1cm5zIFRoZSBtb3ZlIFByb21pc2Vcblx0ICovXG5cdHByaXZhdGUgYXN5bmMgZHJvcENvbnRleHQodGhpczogSVRhYmxlQmxvY2sgJiBUYWJsZUhpZXJhcmNoeSwgY29udGV4dDogQ29udGV4dCwgaW5mbzogRHJvcEluZm9ybWF0aW9uKTogUHJvbWlzZTx2b2lkPiB7XG5cdFx0Y29uc3QgaXNNb3ZlQWxsb3dlZEluZm8gPSB0aGlzLmdldFRhYmxlRGVmaW5pdGlvbigpLmNvbnRyb2wuaXNNb3ZlVG9Qb3NpdGlvbkFsbG93ZWQ7XG5cdFx0Y29uc3QgY3VzdG9tRnVuY3Rpb24gPSBpc01vdmVBbGxvd2VkSW5mb1xuXHRcdFx0PyBGUE1IZWxwZXIuZ2V0Q3VzdG9tRnVuY3Rpb248KG5vZGU6IENvbnRleHQsIHBhcmVudDogQ29udGV4dCB8IG51bGwpID0+IGJvb2xlYW4+KFxuXHRcdFx0XHRcdGlzTW92ZUFsbG93ZWRJbmZvLm1vZHVsZU5hbWUsXG5cdFx0XHRcdFx0aXNNb3ZlQWxsb3dlZEluZm8ubWV0aG9kTmFtZSxcblx0XHRcdFx0XHR0aGlzLmdldENvbnRlbnQoKVxuXHRcdFx0ICApXG5cdFx0XHQ6IHVuZGVmaW5lZDtcblx0XHRjb25zdCB0YWJsZSA9IHRoaXMuZ2V0Q29udGVudCgpO1xuXHRcdHRhYmxlLnNldEJ1c3kodHJ1ZSk7XG5cdFx0Y29uc3QgaW50ZXJuYWxNb2RlbENvbnRleHQgPSB0YWJsZS5nZXRCaW5kaW5nQ29udGV4dChcImludGVybmFsXCIpIGFzIEludGVybmFsTW9kZWxDb250ZXh0O1xuXHRcdGNvbnN0IGlzVGFibGVTb3J0ZWQgPSBpbnRlcm5hbE1vZGVsQ29udGV4dC5nZXRQcm9wZXJ0eShcImlzU29ydGVkXCIpID09PSB0cnVlO1xuXG5cdFx0Y29uc3QgbW92ZUNvbnRleHQgPSBhc3luYyAocGFyZW50OiBDb250ZXh0IHwgbnVsbCwgbmV4dFNpYmxpbmc/OiBDb250ZXh0IHwgbnVsbCk6IFByb21pc2U8dm9pZD4gPT4ge1xuXHRcdFx0Ly8gV2UgY2hlY2sgaWYgdGhlIG1vdmUgaXMgYWxsb3dlZCBieSBjdXN0b20gbG9naWMgKGlmIGFueSksIGFzIHRoaXMgY2hlY2sgbWlnaHRcblx0XHRcdC8vIG5vdCBoYXZlIGJlZW4gZG9uZSBpbiBvbkRyYWdFbnRlckRvY3VtZW50IGlmIHRoZSBwYXJlbnQgd2FzIG5vdCBsb2FkZWQgeWV0LlxuXHRcdFx0aWYgKHRoaXMuc2FmZUlzTW92ZUFsbG93ZWQoY3VzdG9tRnVuY3Rpb24sIGNvbnRleHQsIHBhcmVudCkpIHtcblx0XHRcdFx0Ly8gSWYgdGhlIHRhYmxlIGlzIHNvcnRlZCwgd2UgaWdub3JlIHRoZSBzaWJsaW5nIGFzIHRoZSBwb3NpdGlvbiBzaGFsbCBiZSBkZXRlcm1pbmVkIGJ5IHRoZSBzZXJ2ZXJcblx0XHRcdFx0cmV0dXJuIGNvbnRleHQubW92ZSh7IHBhcmVudCwgbmV4dFNpYmxpbmc6IGlzVGFibGVTb3J0ZWQgPyB1bmRlZmluZWQgOiBuZXh0U2libGluZyB9KTtcblx0XHRcdH0gZWxzZSB7XG5cdFx0XHRcdE1lc3NhZ2VUb2FzdC5zaG93KHRoaXMuZ2V0VHJhbnNsYXRlZFRleHQoXCJNX1RBQkxFX0RST1BfTk9UX0FMTE9XRURcIikpO1xuXHRcdFx0fVxuXHRcdH07XG5cblx0XHRpZiAoaW5mby5wb3NpdGlvbiA9PT0gRHJvcFBvc2l0aW9uLk9uKSB7XG5cdFx0XHQvLyBEcm9wIG9uIGEgbm9kZVxuXHRcdFx0cmV0dXJuIG1vdmVDb250ZXh0KGluZm8ucGFyZW50Q29udGV4dCkuZmluYWxseSgoKSA9PiB0YWJsZS5zZXRCdXN5KGZhbHNlKSk7XG5cdFx0fSBlbHNlIHtcblx0XHRcdC8vIERyb3AgYmV0d2VlbiAyIG5vZGVzXG5cdFx0XHRjb25zdCBbcGFyZW50QmVmb3JlLCBwYXJlbnRBZnRlcl0gPSBhd2FpdCBQcm9taXNlLmFsbChbXG5cdFx0XHRcdGluZm8uY29udGV4dEJlZm9yZT8ucmVxdWVzdFBhcmVudCgpID8/IG51bGwsXG5cdFx0XHRcdGluZm8uY29udGV4dEFmdGVyPy5yZXF1ZXN0UGFyZW50KCkgPz8gbnVsbFxuXHRcdFx0XSk7XG5cdFx0XHRjb25zdCBwYXJhbXMgPSB0aGlzLmdldERyb3BCZXR3ZWVuUGFyYW1ldGVycyhpbmZvLmNvbnRleHRCZWZvcmUsIHBhcmVudEJlZm9yZSwgaW5mby5jb250ZXh0QWZ0ZXIsIHBhcmVudEFmdGVyKSE7XG5cdFx0XHRyZXR1cm4gbW92ZUNvbnRleHQocGFyYW1zLnBhcmVudCwgcGFyYW1zLm5leHRTaWJsaW5nKS5maW5hbGx5KCgpID0+IHRhYmxlLnNldEJ1c3koZmFsc2UpKTtcblx0XHR9XG5cdH1cbn1cbiJdLCJtYXBwaW5ncyI6Ijs7Ozs7Ozs7TUFxQktBLFlBQVksMEJBQVpBLFlBQVk7SUFBWkEsWUFBWTtJQUFaQSxZQUFZO0lBQVpBLFlBQVk7SUFBQSxPQUFaQSxZQUFZO0VBQUEsRUFBWkEsWUFBWTtFQUFBLElBVUlDLGNBQWM7SUFBQSxTQUFBQSxlQUFBO0lBQUFDLFFBQUEsR0FBQUQsY0FBQTtJQUFBLElBQUFFLE1BQUEsR0FBQUYsY0FBQSxDQUFBRyxTQUFBO0lBQUFELE1BQUEsQ0FDbENFLFVBQVUsR0FBVixTQUFBQSxVQUFVQSxDQUFDQyxVQUFvQixFQUFRO01BQ3RDO0lBQUE7O0lBR0Q7QUFDRDtBQUNBO0FBQ0E7QUFDQSxPQUpDO0lBQUFILE1BQUEsQ0FLQUksVUFBVSxHQUFWLFNBQUFBLFVBQVVBLENBQXFDQyxHQUE2QixFQUFFQyxjQUF1QixFQUFFQyxNQUFzQixFQUFRO01BQ3BJLElBQUlDLEtBQWU7TUFDbkIsSUFBSSxDQUFDRixjQUFjLEVBQUU7UUFDcEJFLEtBQUssR0FBR0gsR0FBRyxDQUFDSSxTQUFTLENBQUMsQ0FBQyxDQUFDQyxTQUFTLENBQUMsQ0FBYTtNQUNoRCxDQUFDLE1BQU07UUFDTixNQUFNQyxJQUFJLEdBQUdOLEdBQUcsQ0FBQ0ksU0FBUyxDQUFDLENBQUMsQ0FBQ0MsU0FBUyxDQUFDLENBQVM7UUFDaERGLEtBQUssR0FBR0csSUFBSSxDQUFDRCxTQUFTLENBQUMsQ0FBQyxFQUFFQSxTQUFTLENBQUMsQ0FBYTtNQUNsRDtNQUNBLE1BQU1FLGVBQWUsR0FBR0osS0FBSyxDQUFDSyxpQkFBaUIsQ0FBQyxVQUFVLENBQXlCO01BQ25GLE1BQU1DLGdCQUFnQixHQUFHLElBQUksQ0FBQ0MsbUJBQW1CLENBQUMsQ0FBQztNQUNuRCxJQUFJRCxnQkFBZ0IsQ0FBQ0UsTUFBTSxHQUFHLENBQUMsRUFBRTtRQUNoQ0MsR0FBRyxDQUFDQyxLQUFLLENBQUMsU0FBU1gsTUFBTSxLQUFLLEtBQUssR0FBRyxTQUFTLEdBQUcsU0FBUyxtQkFBbUIsQ0FBQztRQUMvRTtNQUNEO01BRUFLLGVBQWUsQ0FBQ08sV0FBVyxDQUFDLGtDQUFrQyxFQUFFTCxnQkFBZ0IsQ0FBQztNQUNqRkYsZUFBZSxDQUFDTyxXQUFXLENBQUMsNEJBQTRCLEVBQUVaLE1BQU0sQ0FBQztNQUNqRWEsWUFBWSxDQUFDQyxJQUFJLENBQUNDLG1CQUFtQixDQUFDQyxnQkFBZ0IsQ0FBQ2YsS0FBSyxDQUFDLENBQUNnQixPQUFPLENBQUMsaUJBQWlCLENBQUMsQ0FBQztNQUN6RixJQUFJLENBQUNsQixjQUFjLElBQUlNLGVBQWUsQ0FBQ2EsV0FBVyxDQUFDLDBCQUEwQixDQUFDLEdBQUcsQ0FBQyxFQUFFO1FBQ25GQyxZQUFZLENBQUNDLGNBQWMsQ0FBQ25CLEtBQUssQ0FBQztRQUNsQ0EsS0FBSyxDQUFDb0IsbUJBQW1CLENBQUMsQ0FBQztNQUM1QixDQUFDLE1BQU0sSUFBSXRCLGNBQWMsRUFBRTtRQUMxQjtRQUNBRSxLQUFLLENBQUNvQixtQkFBbUIsQ0FBQyxDQUFDO01BQzVCO01BRUFoQixlQUFlLENBQUNPLFdBQVcsQ0FBQywrQkFBK0IsRUFBRSxLQUFLLENBQUM7TUFDbkVQLGVBQWUsQ0FBQ08sV0FBVyxDQUFDLDJDQUEyQyxFQUFFLEtBQUssQ0FBQztNQUMvRVAsZUFBZSxDQUFDTyxXQUFXLENBQUMsZ0NBQWdDLEVBQUUsS0FBSyxDQUFDO01BQ3BFUCxlQUFlLENBQUNPLFdBQVcsQ0FBQyw0Q0FBNEMsRUFBRSxLQUFLLENBQUM7SUFDakY7O0lBRUE7QUFDRDtBQUNBO0FBQ0EsT0FIQztJQUFBbkIsTUFBQSxDQUlBNkIsb0JBQW9CLEdBQXBCLFNBQUFBLG9CQUFvQkEsQ0FFbkJDLFFBQTJILEVBQ3BIO01BQ1AsTUFBTUMsY0FBYyxHQUFHRCxRQUFRLENBQUNFLFlBQVksQ0FBQyxZQUFZLENBQUM7TUFDMUQsSUFBSSxJQUFJLENBQUNDLFVBQVUsQ0FBQyxDQUFDLENBQUNDLGFBQWEsQ0FBQyxDQUFDLEtBQUtILGNBQWMsQ0FBQ0ksVUFBVSxDQUFDLENBQUMsRUFBRTtRQUN0RTtRQUNBTCxRQUFRLENBQUNNLGNBQWMsQ0FBQyxDQUFDO1FBQ3pCO01BQ0Q7TUFFQSxNQUFNQyxhQUE2QixHQUFHUCxRQUFRLENBQUNFLFlBQVksQ0FBQyxnQkFBZ0IsQ0FBQztNQUM3RSxJQUFJRCxjQUFjLENBQUNPLFlBQVksQ0FBQ0QsYUFBYSxDQUFDLEVBQUU7UUFDL0M7UUFDQVAsUUFBUSxDQUFDTSxjQUFjLENBQUMsQ0FBQztRQUN6QjtNQUNEO01BRUEsSUFBSUcsZUFBZSxHQUFHLEtBQUs7TUFDM0IsSUFBSUMsVUFBVSxHQUFHLEtBQUs7TUFDdEIsTUFBTUMsZUFBZSxHQUFHLElBQUksQ0FBQ0Msa0JBQWtCLENBQUMsQ0FBQztNQUNqRCxNQUFNQyxpQkFBaUIsR0FBR0YsZUFBZSxDQUFDRyxPQUFPLENBQUNDLHVCQUF1QjtNQUN6RSxNQUFNQyxjQUFjLEdBQUdILGlCQUFpQixHQUNyQ0ksU0FBUyxDQUFDQyxpQkFBaUIsQ0FDM0JMLGlCQUFpQixDQUFDTSxVQUFVLEVBQzVCTixpQkFBaUIsQ0FBQ08sVUFBVSxFQUM1QnBCLFFBQVEsQ0FBQ3JCLFNBQVMsQ0FBQyxDQUFDLENBQUNDLFNBQVMsQ0FBQyxDQUMvQixDQUFDLEdBQ0R5QyxTQUFTO01BRVosSUFBSWQsYUFBYSxLQUFLLElBQUksQ0FBQ0osVUFBVSxDQUFDLENBQUMsQ0FBQ3BCLGlCQUFpQixDQUFDLENBQUMsRUFBRTtRQUM1RDtRQUNBMkIsVUFBVSxHQUFHLENBQUMsSUFBSSxDQUFDWSxpQkFBaUIsQ0FBQ04sY0FBYyxFQUFFZixjQUFjLEVBQUUsSUFBSSxDQUFDO1FBQzFFUSxlQUFlLEdBQUcsSUFBSTtNQUN2QixDQUFDLE1BQU07UUFDTkMsVUFBVSxHQUFHLENBQUMsSUFBSSxDQUFDWSxpQkFBaUIsQ0FBQ04sY0FBYyxFQUFFZixjQUFjLEVBQUVNLGFBQWEsQ0FBQztRQUNuRkUsZUFBZSxHQUFHRSxlQUFlLENBQUNZLFVBQVUsQ0FBQ0MscUJBQXFCLEtBQUssSUFBSTtRQUUzRSxJQUNDQyxJQUFJLENBQUNDLEdBQUcsQ0FBQ25CLGFBQWEsQ0FBQ29CLFFBQVEsQ0FBQyxDQUFDLEdBQUkxQixjQUFjLENBQUMwQixRQUFRLENBQUMsQ0FBRSxDQUFDLEtBQUssQ0FBQyxJQUN0RSxFQUFFcEIsYUFBYSxDQUFDb0IsUUFBUSxDQUFDLENBQUMsS0FBSyxDQUFDLElBQUkzQixRQUFRLENBQUNFLFlBQVksQ0FBQyxjQUFjLENBQUMsS0FBSyxRQUFRLENBQUMsSUFDdkYsRUFDQ0ssYUFBYSxDQUFDb0IsUUFBUSxDQUFDLENBQUMsS0FBSyxJQUFJLENBQUN4QixVQUFVLENBQUMsQ0FBQyxDQUFDQyxhQUFhLENBQUMsQ0FBQyxDQUFDd0IsU0FBUyxDQUFDLENBQUMsR0FBRyxDQUFDLElBQzlFNUIsUUFBUSxDQUFDRSxZQUFZLENBQUMsY0FBYyxDQUFDLEtBQUssT0FBTyxDQUNqRCxFQUNBO1VBQ0Q7VUFDQU8sZUFBZSxHQUFHLElBQUk7UUFDdkI7O1FBRUE7UUFDQSxJQUNDLENBQUNBLGVBQWUsSUFDaEIsQ0FBQ0UsZUFBZSxDQUFDWSxVQUFVLENBQUNNLDhCQUE4QixJQUMxRHRCLGFBQWEsQ0FBQ1osV0FBVyxDQUFDLGtCQUFrQixDQUFDLEtBQUssQ0FBQyxFQUNsRDtVQUNEYyxlQUFlLEdBQUcsSUFBSTtRQUN2Qjs7UUFFQTtRQUNBLElBQUlPLGNBQWMsSUFBSSxDQUFDUCxlQUFlLEVBQUU7VUFDdkNBLGVBQWUsR0FBRyxDQUFDLElBQUksQ0FBQ3FCLDJCQUEyQixDQUFDZCxjQUFjLEVBQUVmLGNBQWMsRUFBRU0sYUFBYSxDQUFDO1FBQ25HO01BQ0Q7TUFFQSxJQUFJd0IsbUJBQWlDLEdBQUdoRSxZQUFZLENBQUNpRSxXQUFXO01BQ2hFLElBQUl2QixlQUFlLElBQUlDLFVBQVUsRUFBRTtRQUNsQztRQUNBVixRQUFRLENBQUNNLGNBQWMsQ0FBQyxDQUFDO1FBQ3pCO01BQ0Q7TUFDQSxJQUFJRyxlQUFlLEVBQUU7UUFDcEJzQixtQkFBbUIsR0FBR2hFLFlBQVksQ0FBQ2tFLEVBQUU7TUFDdEMsQ0FBQyxNQUFNLElBQUl2QixVQUFVLEVBQUU7UUFDdEJxQixtQkFBbUIsR0FBR2hFLFlBQVksQ0FBQ21FLE9BQU87TUFDM0M7TUFDQWxDLFFBQVEsQ0FBQ3JCLFNBQVMsQ0FBQyxDQUFDLENBQUN3RCxlQUFlLENBQUNKLG1CQUFtQixDQUFDO0lBQzFEOztJQUVBO0FBQ0Q7QUFDQTtBQUNBLE9BSEM7SUFBQTdELE1BQUEsQ0FJQWtFLG9CQUFvQixHQUFwQixTQUFBQSxvQkFBb0JBLENBQXFDcEMsUUFBd0QsRUFBUTtNQUN4SCxNQUFNcUMsT0FBTyxHQUFHckMsUUFBUSxDQUFDRSxZQUFZLENBQUMsZ0JBQWdCLENBQUM7TUFDdkQsTUFBTW9DLHFCQUFxQixHQUFHLElBQUksQ0FBQzFCLGtCQUFrQixDQUFDLENBQUMsQ0FBQ1csVUFBVSxDQUFDZSxxQkFBcUI7O01BRXhGO01BQ0EsSUFBSUMsV0FBVyxHQUFHLENBQUMsQ0FBQ0QscUJBQXFCLElBQUksQ0FBQ0QsT0FBTyxDQUFDMUMsV0FBVyxDQUFDMkMscUJBQXFCLENBQUM7O01BRXhGO01BQ0EsSUFBSSxDQUFDQyxXQUFXLElBQUksQ0FBRUYsT0FBTyxDQUFDaEMsVUFBVSxDQUFDLENBQUMsQ0FBc0JtQyxVQUFVLENBQUMsQ0FBQyxFQUFFO1FBQzdFRCxXQUFXLEdBQUdGLE9BQU8sQ0FBQzFDLFdBQVcsQ0FBQyxnQkFBZ0IsQ0FBQyxLQUFLLElBQUk7TUFDN0Q7O01BRUE7TUFDQSxNQUFNOEMsYUFBYSxHQUFHLElBQUksQ0FBQzdCLGtCQUFrQixDQUFDLENBQUMsQ0FBQ0UsT0FBTyxDQUFDNEIsYUFBYTtNQUNyRSxJQUFJO1FBQ0gsSUFBSUQsYUFBYSxJQUFJLENBQUNGLFdBQVcsRUFBRTtVQUNsQ0EsV0FBVyxHQUVUdEIsU0FBUyxDQUFDQyxpQkFBaUIsQ0FDMUJ1QixhQUFhLENBQUN0QixVQUFVLEVBQ3hCc0IsYUFBYSxDQUFDckIsVUFBVSxFQUN4QnBCLFFBQVEsQ0FBQ3JCLFNBQVMsQ0FBQyxDQUNwQixDQUFDLENBQ0EwRCxPQUFPLENBQUMsS0FBSyxLQUFLO1FBQ3RCO01BQ0QsQ0FBQyxDQUFDLE9BQU9NLE1BQU0sRUFBRTtRQUNoQkosV0FBVyxHQUFHLEtBQUs7TUFDcEI7TUFDQSxJQUFJQSxXQUFXLEVBQUU7UUFDaEI7UUFDQXZDLFFBQVEsQ0FBQ00sY0FBYyxDQUFDLENBQUM7TUFDMUI7SUFDRDs7SUFFQTtBQUNEO0FBQ0E7QUFDQTtBQUNBLE9BSkM7SUFBQXBDLE1BQUEsQ0FLTTBFLGVBQWUsR0FBckIsZUFBTUEsZUFBZUEsQ0FFcEI1QyxRQUlFLEVBQ2M7TUFDaEI2QyxVQUFVLENBQUNDLElBQUksQ0FBQyxJQUFJLENBQUMzQyxVQUFVLENBQUMsQ0FBQyxDQUFDO01BRWxDLElBQUk7UUFDSCxNQUFNNEMsZ0JBQWdCLEdBQUcvQyxRQUFRLENBQUNFLFlBQVksQ0FBQyxnQkFBZ0IsQ0FBQztRQUNoRSxJQUFJOEMsUUFBeUI7UUFDN0IsSUFBSUQsZ0JBQWdCLEtBQUssSUFBSSxDQUFDNUMsVUFBVSxDQUFDLENBQUMsQ0FBQ3BCLGlCQUFpQixDQUFDLENBQUMsRUFBRTtVQUMvRDtVQUNBaUUsUUFBUSxHQUFHO1lBQUVDLFFBQVEsRUFBRWxGLFlBQVksQ0FBQ2tFLEVBQUU7WUFBRWlCLGFBQWEsRUFBRTtVQUFLLENBQUM7UUFDOUQsQ0FBQyxNQUFNLElBQUlsRCxRQUFRLENBQUNFLFlBQVksQ0FBQyxjQUFjLENBQUMsS0FBS25DLFlBQVksQ0FBQ2tFLEVBQUUsRUFBRTtVQUNyRTtVQUNBZSxRQUFRLEdBQUc7WUFBRUMsUUFBUSxFQUFFbEYsWUFBWSxDQUFDa0UsRUFBRTtZQUFFaUIsYUFBYSxFQUFFSDtVQUFpQixDQUFDO1FBQzFFLENBQUMsTUFBTTtVQUNOO1VBQ0EsSUFBSUksYUFBNkI7VUFDakMsSUFBSUMsWUFBNEI7VUFDaEMsSUFBSXBELFFBQVEsQ0FBQ0UsWUFBWSxDQUFDLGNBQWMsQ0FBQyxLQUFLLE9BQU8sRUFBRTtZQUN0RGlELGFBQWEsR0FBR0osZ0JBQWdCO1lBQ2hDSyxZQUFZLEdBQUcsSUFBSSxDQUFDQyxlQUFlLENBQUNOLGdCQUFnQixDQUFDO1VBQ3RELENBQUMsTUFBTTtZQUNOSSxhQUFhLEdBQUcsSUFBSSxDQUFDRyxnQkFBZ0IsQ0FBQ1AsZ0JBQWdCLENBQUM7WUFDdkRLLFlBQVksR0FBR0wsZ0JBQWdCO1VBQ2hDO1VBQ0FDLFFBQVEsR0FBRztZQUFFQyxRQUFRLEVBQUVsRixZQUFZLENBQUNtRSxPQUFPO1lBQUVrQixZQUFZO1lBQUVEO1VBQWMsQ0FBQztRQUMzRTtRQUVBLE1BQU1JLFlBQVksR0FBR3ZELFFBQVEsQ0FBQ0UsWUFBWSxDQUFDLFlBQVksQ0FBQztRQUN4RCxNQUFNc0QsT0FBTyxDQUFDQyxHQUFHLENBQUMsQ0FBQyxJQUFJLENBQUNDLFdBQVcsQ0FBQ0gsWUFBWSxFQUFFUCxRQUFRLENBQUMsRUFBRSxJQUFJLENBQUNXLDRDQUE0QyxDQUFDSixZQUFZLENBQUMsQ0FBQyxDQUFDO01BQy9ILENBQUMsQ0FBQyxPQUFPbkUsS0FBSyxFQUFFO1FBQ2ZFLFlBQVksQ0FBQ0MsSUFBSSxDQUFDLElBQUksQ0FBQ3FFLGlCQUFpQixDQUFDLG9CQUFvQixFQUFFLENBQUMsRUFBRSxDQUFDLENBQUMsQ0FBQztRQUNyRXpFLEdBQUcsQ0FBQ0MsS0FBSyxDQUFDLGlDQUFpQyxHQUFJQSxLQUFLLENBQVd5RSxPQUFPLElBQUksRUFBRSxDQUFDO01BQzlFLENBQUMsU0FBUztRQUNUaEIsVUFBVSxDQUFDaUIsTUFBTSxDQUFDLElBQUksQ0FBQzNELFVBQVUsQ0FBQyxDQUFDLENBQUM7TUFDckM7SUFDRDs7SUFFQTtBQUNEO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsT0FMQztJQUFBakMsTUFBQSxDQU1NNkYscUJBQXFCLEdBQTNCLGVBQU1BLHFCQUFxQkEsQ0FBcUNDLFNBQW1CLEVBQUVDLE1BQWUsRUFBaUI7TUFDcEgsTUFBTWpGLGdCQUFnQixHQUFHLElBQUksQ0FBQ0MsbUJBQW1CLENBQUMsQ0FBQztNQUNuRCxJQUFJZ0YsTUFBTSxFQUFFO1FBQ1gsTUFBTUMsWUFBWSxHQUFHbEYsZ0JBQWdCLENBQUNtRixHQUFHLENBQUMsTUFBT0MsYUFBc0IsSUFBSztVQUMzRTtVQUNBLElBQUlBLGFBQWEsQ0FBQ0MsVUFBVSxDQUFDLENBQUMsS0FBS2hELFNBQVMsRUFBRTtZQUM3QztZQUNBO1lBQ0E7WUFDQSxJQUFJK0MsYUFBYSxDQUFDQyxVQUFVLENBQUMsQ0FBQyxLQUFLLElBQUksRUFBRTtjQUN4QyxNQUFNRCxhQUFhLENBQUNFLFFBQVEsQ0FBQyxDQUFDO1lBQy9CO1lBQ0EsT0FBT0YsYUFBYSxDQUFDSCxNQUFNLENBQUNNLE1BQU0sQ0FBQ0MsZ0JBQWdCLENBQUM7VUFDckQ7UUFDRCxDQUFDLENBQUM7UUFDRixNQUFNaEIsT0FBTyxDQUFDQyxHQUFHLENBQUNTLFlBQVksQ0FBQztNQUNoQyxDQUFDLE1BQU07UUFDTixNQUFNVixPQUFPLENBQUNDLEdBQUcsQ0FDaEJ6RSxnQkFBZ0IsQ0FBQ21GLEdBQUcsQ0FBQyxNQUFPQyxhQUFzQixJQUFLO1VBQ3RELElBQUlBLGFBQWEsQ0FBQ0MsVUFBVSxDQUFDLENBQUMsS0FBSyxJQUFJLEVBQUU7WUFDeEMsT0FBT0QsYUFBYSxDQUFDRSxRQUFRLENBQUMsSUFBSSxDQUFDO1VBQ3BDO1FBQ0QsQ0FBQyxDQUNGLENBQUM7TUFDRjtJQUNEOztJQUVBO0FBQ0Q7QUFDQTtBQUNBO0FBQ0E7QUFDQSxPQUxDO0lBQUFwRyxNQUFBLENBTU11RyxhQUFhLEdBQW5CLGVBQU1BLGFBQWFBLENBQXFDVCxTQUFtQixFQUFFVSxNQUFlLEVBQXlDO01BQUEsSUFBdkNsRyxjQUFjLEdBQUFtRyxTQUFBLENBQUF6RixNQUFBLFFBQUF5RixTQUFBLFFBQUF0RCxTQUFBLEdBQUFzRCxTQUFBLE1BQUcsS0FBSztNQUNuSCxNQUFNM0YsZ0JBQWdCLEdBQUcsSUFBSSxDQUFDQyxtQkFBbUIsQ0FBQyxDQUFDO01BQ25ELElBQUlELGdCQUFnQixDQUFDRSxNQUFNLEtBQUssQ0FBQyxFQUFFO1FBQ2xDO01BQ0Q7TUFDQSxNQUFNMEYsUUFBUSxHQUFHLElBQUksQ0FBQ3pFLFVBQVUsQ0FBQyxDQUFDO01BQ2xDeUUsUUFBUSxDQUFDQyxPQUFPLENBQUMsSUFBSSxDQUFDOztNQUV0QjtNQUNBLE1BQU10QixZQUFZLEdBQUd2RSxnQkFBZ0IsQ0FBQyxDQUFDLENBQUM7TUFDeEMsTUFBTWtFLGFBQWEsR0FBRyxNQUFNSyxZQUFZLENBQUN1QixhQUFhLENBQUMsQ0FBQztNQUN4RCxJQUFJQyxZQUFZLEdBQUcsS0FBSztNQUN4QixJQUFJQyxXQUFXLEdBQUcsSUFBSTtNQUN0QixJQUFJTixNQUFNLEVBQUU7UUFDWCxNQUFNTyxlQUFlLEdBQUcsTUFBTTFCLFlBQVksQ0FBQzJCLGNBQWMsQ0FBQyxDQUFDLENBQUMsQ0FBQztRQUM3RCxJQUFJRCxlQUFlLEVBQUU7VUFDcEJELFdBQVcsR0FBR3pCLFlBQVksQ0FBQzRCLElBQUksQ0FBQztZQUFFQyxXQUFXLEVBQUVILGVBQWU7WUFBRUksTUFBTSxFQUFFbkM7VUFBYyxDQUFDLENBQUM7VUFDeEY2QixZQUFZLEdBQUcsSUFBSTtRQUNwQjtNQUNELENBQUMsTUFBTTtRQUNOLE1BQU1LLFdBQVcsR0FBRyxNQUFNN0IsWUFBWSxDQUFDMkIsY0FBYyxDQUFDLENBQUMsQ0FBQztRQUN4RCxJQUFJRSxXQUFXLEVBQUU7VUFDaEJKLFdBQVcsR0FBR0ksV0FBVyxDQUFDRCxJQUFJLENBQUM7WUFBRUMsV0FBVyxFQUFFN0IsWUFBWTtZQUFFOEIsTUFBTSxFQUFFbkM7VUFBYyxDQUFDLENBQUM7VUFDcEY2QixZQUFZLEdBQUcsSUFBSTtRQUNwQjtNQUNEO01BRUEsTUFBTXZCLE9BQU8sQ0FBQ0MsR0FBRyxDQUFDLENBQUN1QixXQUFXLEVBQUUsSUFBSSxDQUFDckIsNENBQTRDLENBQUNKLFlBQVksQ0FBQyxDQUFDLENBQUM7O01BRWpHO01BQ0EsTUFBTStCLFFBQVEsR0FBRy9CLFlBQVksQ0FBQzVCLFFBQVEsQ0FBQyxDQUFDO01BQ3hDLElBQUlvRCxZQUFZLElBQUlPLFFBQVEsS0FBS2pFLFNBQVMsSUFBSWlFLFFBQVEsSUFBSSxDQUFDLEVBQUU7UUFDNUQsSUFBSSxDQUFDOUcsY0FBYyxFQUFFO1VBQ3BCb0csUUFBUSxDQUFDVyxhQUFhLENBQUNELFFBQVEsQ0FBQztRQUNqQyxDQUFDLE1BQU07VUFDTlYsUUFBUSxDQUFDWSxRQUFRLENBQUNGLFFBQVEsQ0FBQztRQUM1QjtNQUNEO01BQ0FWLFFBQVEsQ0FBQ0MsT0FBTyxDQUFDLEtBQUssQ0FBQztJQUN4Qjs7SUFFQTtBQUNEO0FBQ0E7QUFDQTtBQUNBLE9BSkM7SUFBQTNHLE1BQUEsQ0FLTXlGLDRDQUE0QyxHQUFsRCxlQUFNQSw0Q0FBNENBLENBQXFDSixZQUFxQixFQUFpQjtNQUM1SCxPQUFPLElBQUksQ0FBQ2tDLHNDQUFzQyxDQUFDbEMsWUFBWSxFQUFFLHlCQUF5QixDQUFDO0lBQzVGOztJQUVBO0FBQ0Q7QUFDQTtBQUNBO0FBQ0EsT0FKQztJQUFBckYsTUFBQSxDQUtNd0gsK0JBQStCLEdBQXJDLGVBQU1BLCtCQUErQkEsQ0FBcUNuQyxZQUFxQixFQUFpQjtNQUMvRyxPQUFPLElBQUksQ0FBQ2tDLHNDQUFzQyxDQUFDbEMsWUFBWSxFQUFFLFlBQVksQ0FBQztJQUMvRTs7SUFFQTtBQUNEO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsT0FMQztJQUFBckYsTUFBQSxDQU1NdUgsc0NBQXNDLEdBQTVDLGVBQU1BLHNDQUFzQ0EsQ0FFM0NsQyxZQUFxQixFQUNyQjlFLE1BQWdELEVBQ2hDO01BQ2hCLE1BQU1rSCxVQUFVLEdBQUcsSUFBSSxDQUFDeEYsVUFBVSxDQUFDLENBQUMsQ0FBQ3lGLElBQUksQ0FBQyxVQUFVLENBQUM7TUFDckQsTUFBTUMsU0FBUyxHQUFHdEMsWUFBWSxDQUFDdUMsUUFBUSxDQUFDLENBQUMsQ0FBQ0MsWUFBWSxDQUFDLENBQUM7TUFFeEQsTUFBTUMsWUFBWSxHQUFHSCxTQUFTLENBQUNJLFVBQVUsQ0FBQ04sVUFBVSxDQUFDO01BQ3JELE1BQU1PLHVCQUF1QixHQUFHQyxrQkFBa0IsQ0FBQ0QsdUJBQXVCLENBQUNGLFlBQVksQ0FBbUM7TUFDMUgsTUFBTUksVUFBVSxHQUFJRix1QkFBdUIsQ0FBd0JHLFVBQVUsSUFBS0gsdUJBQXVCLENBQWVFLFVBQVU7TUFDbEksTUFBTUUsVUFBVSxHQUFHRixVQUFVLENBQUNHLFdBQVcsQ0FBQ0MsU0FBUyxHQUNsRCw2QkFBNkIsSUFBSSxDQUFDNUYsa0JBQWtCLENBQUMsQ0FBQyxDQUFDRSxPQUFPLENBQUMyRixrQkFBa0IsSUFBSSxFQUFFLEVBQUUsQ0FDekYsR0FBR2hJLE1BQU0sQ0FBdUI7TUFFakMsSUFBSTZILFVBQVUsRUFBRTtRQUNmLE1BQU1JLFlBQVksR0FBR0MsV0FBVyxDQUFDQyxlQUFlLENBQUMsSUFBSSxDQUFDekcsVUFBVSxDQUFDLENBQUMsQ0FBQztRQUNuRSxNQUFNMEcsa0JBQWtCLEdBQUdILFlBQVksQ0FBQ0kscUJBQXFCLENBQUMsQ0FBQztRQUMvRCxNQUFNQyxXQUFXLEdBQUdGLGtCQUFrQixDQUFDRyx5QkFBeUIsQ0FBQ1YsVUFBVSxFQUFFL0MsWUFBWSxDQUFDO1FBQzFGLElBQUl3RCxXQUFXLEVBQUU7VUFDaEIsTUFBTUYsa0JBQWtCLENBQUNJLGdDQUFnQyxDQUFDRixXQUFXLEVBQUV4RCxZQUFZLENBQUM7UUFDckY7TUFDRDtJQUNEOztJQUVBO0FBQ0Q7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLE9BTkM7SUFBQXJGLE1BQUEsQ0FPUW9ELGlCQUFpQixHQUF6QixTQUFRQSxpQkFBaUJBLENBQ3hCTixjQUFtRixFQUNuRnVDLFlBQXFCLEVBQ3JCTCxhQUE2QixFQUNuQjtNQUNWLElBQUksQ0FBQ2xDLGNBQWMsRUFBRTtRQUNwQixPQUFPLElBQUk7TUFDWjtNQUVBLElBQUlrRyxPQUFPLEdBQUcsSUFBSTtNQUNsQixJQUFJO1FBQ0hBLE9BQU8sR0FBR2xHLGNBQWMsQ0FBQ3VDLFlBQVksRUFBRUwsYUFBYSxDQUFDLEtBQUssSUFBSTtNQUMvRCxDQUFDLENBQUMsT0FBTzlELEtBQUssRUFBRTtRQUNmRCxHQUFHLENBQUNDLEtBQUssQ0FBQyw0REFBNEQsRUFBRUEsS0FBZSxDQUFDO1FBQ3hGOEgsT0FBTyxHQUFHLElBQUk7TUFDZjtNQUVBLE9BQU9BLE9BQU87SUFDZjs7SUFFQTtBQUNEO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxPQU5DO0lBQUFoSixNQUFBLENBT1E0RCwyQkFBMkIsR0FBbkMsU0FBUUEsMkJBQTJCQSxDQUNsQ2QsY0FBcUUsRUFDckVmLGNBQXVCLEVBQ3ZCTSxhQUFzQixFQUNaO01BQ1YsSUFBSTRHLFNBQVMsR0FBRyxJQUFJOztNQUVwQjtNQUNBLE1BQU1oRSxhQUFhLEdBQUcsSUFBSSxDQUFDRyxnQkFBZ0IsQ0FBQy9DLGFBQWEsQ0FBQztNQUMxRCxNQUFNNkcsWUFBWSxHQUFHakUsYUFBYSxLQUFLLElBQUksR0FBRyxJQUFJLEdBQUdBLGFBQWEsQ0FBQ3ZFLFNBQVMsQ0FBQyxDQUFDO01BQzlFLE1BQU15SSxZQUFZLEdBQUcsSUFBSSxDQUFDQyx3QkFBd0IsQ0FBQ25FLGFBQWEsRUFBRWlFLFlBQVksRUFBRTdHLGFBQWEsRUFBRUEsYUFBYSxDQUFDM0IsU0FBUyxDQUFDLENBQUMsQ0FBQzs7TUFFekg7TUFDQSxNQUFNd0UsWUFBWSxHQUFHLElBQUksQ0FBQ0MsZUFBZSxDQUFDOUMsYUFBYSxDQUFDO01BQ3hELE1BQU1nSCxXQUFXLEdBQUduRSxZQUFZLEtBQUssSUFBSSxHQUFHLElBQUksR0FBR0EsWUFBWSxDQUFDeEUsU0FBUyxDQUFDLENBQUM7TUFDM0UsTUFBTTRJLFdBQVcsR0FBRyxJQUFJLENBQUNGLHdCQUF3QixDQUFDL0csYUFBYSxFQUFFQSxhQUFhLENBQUMzQixTQUFTLENBQUMsQ0FBQyxFQUFFd0UsWUFBWSxFQUFFbUUsV0FBVyxDQUFDOztNQUV0SDtNQUNBLElBQUlGLFlBQVksS0FBS2hHLFNBQVMsSUFBSW1HLFdBQVcsS0FBS25HLFNBQVMsRUFBRTtRQUM1RCxJQUFJZ0csWUFBWSxDQUFDaEMsTUFBTSxLQUFLbUMsV0FBVyxDQUFDbkMsTUFBTSxFQUFFO1VBQy9DO1VBQ0E4QixTQUFTLEdBQUcsSUFBSSxDQUFDN0YsaUJBQWlCLENBQUNOLGNBQWMsRUFBRWYsY0FBYyxFQUFFb0gsWUFBWSxDQUFDaEMsTUFBTSxDQUFDO1FBQ3hGLENBQUMsTUFBTTtVQUNOO1VBQ0E4QixTQUFTLEdBQ1IsSUFBSSxDQUFDN0YsaUJBQWlCLENBQUNOLGNBQWMsRUFBRWYsY0FBYyxFQUFFb0gsWUFBWSxDQUFDaEMsTUFBTSxDQUFDLElBQzNFLElBQUksQ0FBQy9ELGlCQUFpQixDQUFDTixjQUFjLEVBQUVmLGNBQWMsRUFBRXVILFdBQVcsQ0FBQ25DLE1BQU0sQ0FBQztRQUM1RTtNQUNEO01BRUEsT0FBTzhCLFNBQVM7SUFDakI7O0lBRUE7QUFDRDtBQUNBO0FBQ0E7QUFDQSxPQUpDO0lBQUFqSixNQUFBLENBS1FvRixnQkFBZ0IsR0FBeEIsU0FBUUEsZ0JBQWdCQSxDQUFDakIsT0FBZ0IsRUFBa0I7TUFDMUQsTUFBTW9GLFlBQVksR0FBR3BGLE9BQU8sQ0FBQ1YsUUFBUSxDQUFDLENBQUM7TUFDdkMsSUFBSThGLFlBQVksS0FBS3BHLFNBQVMsRUFBRTtRQUMvQixNQUFNLElBQUlxRyxLQUFLLENBQUMsa0JBQWtCLENBQUM7TUFDcEM7TUFFQSxNQUFNQyxXQUFXLEdBQUd0RixPQUFPLENBQUNoQyxVQUFVLENBQUMsQ0FBcUI7TUFDNUQsT0FBT29ILFlBQVksS0FBSyxDQUFDLEdBQ3RCLElBQUksR0FDSkUsV0FBVyxDQUFDQyxxQkFBcUIsQ0FBQyxDQUFDLENBQUNDLElBQUksQ0FBRUMsR0FBRyxJQUFLO1FBQ2xELE9BQU9BLEdBQUcsQ0FBQ25HLFFBQVEsQ0FBQyxDQUFDLEtBQUs4RixZQUFZLEdBQUcsQ0FBQztNQUMxQyxDQUFDLENBQUMsSUFBSSxJQUFJO0lBQ2Q7O0lBRUE7QUFDRDtBQUNBO0FBQ0E7QUFDQSxPQUpDO0lBQUF2SixNQUFBLENBS1FtRixlQUFlLEdBQXZCLFNBQVFBLGVBQWVBLENBQUNoQixPQUFnQixFQUFrQjtNQUN6RCxNQUFNb0YsWUFBWSxHQUFHcEYsT0FBTyxDQUFDVixRQUFRLENBQUMsQ0FBQztNQUN2QyxJQUFJOEYsWUFBWSxLQUFLcEcsU0FBUyxFQUFFO1FBQy9CLE1BQU0sSUFBSXFHLEtBQUssQ0FBQyxrQkFBa0IsQ0FBQztNQUNwQztNQUVBLE1BQU1DLFdBQVcsR0FBR3RGLE9BQU8sQ0FBQ2hDLFVBQVUsQ0FBQyxDQUFxQjtNQUM1RCxPQUNDc0gsV0FBVyxDQUFDQyxxQkFBcUIsQ0FBQyxDQUFDLENBQUNDLElBQUksQ0FBRUMsR0FBRyxJQUFLO1FBQ2pELE9BQU9BLEdBQUcsQ0FBQ25HLFFBQVEsQ0FBQyxDQUFDLEtBQUs4RixZQUFZLEdBQUcsQ0FBQztNQUMzQyxDQUFDLENBQUMsSUFBSSxJQUFJO0lBRVo7O0lBRUE7QUFDRDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxPQVBDO0lBQUF2SixNQUFBLENBUVFvSix3QkFBd0IsR0FBaEMsU0FBUUEsd0JBQXdCQSxDQUMvQm5FLGFBQTZCLEVBQzdCaUUsWUFBd0MsRUFDeENoRSxZQUE0QixFQUM1Qm1FLFdBQXVDLEVBQ2dDO01BQ3ZFLElBQUlwRSxhQUFhLEtBQUssSUFBSSxFQUFFO1FBQzNCO1FBQ0EsT0FBTztVQUFFa0MsTUFBTSxFQUFFLElBQUk7VUFBRUQsV0FBVyxFQUFFaEM7UUFBYSxDQUFDO01BQ25ELENBQUMsTUFBTSxJQUFJQSxZQUFZLEtBQUssSUFBSSxFQUFFO1FBQ2pDO1FBQ0EsT0FBT2dFLFlBQVksS0FBSy9GLFNBQVMsR0FBRztVQUFFZ0UsTUFBTSxFQUFFK0IsWUFBWTtVQUFFaEMsV0FBVyxFQUFFO1FBQUssQ0FBQyxHQUFHL0QsU0FBUztNQUM1RixDQUFDLE1BQU0sSUFBSWtHLFdBQVcsS0FBS3BFLGFBQWEsRUFBRTtRQUN6QztRQUNBLE9BQU87VUFBRWtDLE1BQU0sRUFBRWxDLGFBQWE7VUFBRWlDLFdBQVcsRUFBRWhDO1FBQWEsQ0FBQztNQUM1RCxDQUFDLE1BQU0sSUFBSWdFLFlBQVksS0FBSy9GLFNBQVMsSUFBSWtHLFdBQVcsS0FBS2xHLFNBQVMsRUFBRTtRQUNuRTtRQUNBLE9BQU9BLFNBQVM7TUFDakIsQ0FBQyxNQUFNLElBQUkrRixZQUFZLEtBQUtHLFdBQVcsRUFBRTtRQUN4QztRQUNBLE9BQU87VUFBRWxDLE1BQU0sRUFBRStCLFlBQVk7VUFBRWhDLFdBQVcsRUFBRWhDO1FBQWEsQ0FBQztNQUMzRCxDQUFDLE1BQU07UUFDTjtRQUNBO1FBQ0E7UUFDQTtRQUNBO1FBQ0EsT0FBTztVQUFFaUMsTUFBTSxFQUFFK0IsWUFBWTtVQUFFaEMsV0FBVyxFQUFFO1FBQUssQ0FBQztNQUNuRDtJQUNEOztJQUVBO0FBQ0Q7QUFDQTtBQUNBO0FBQ0E7QUFDQSxPQUxDO0lBQUFsSCxNQUFBLENBTWN3RixXQUFXLEdBQXpCLGVBQWNBLFdBQVdBLENBQXFDckIsT0FBZ0IsRUFBRTBGLElBQXFCLEVBQWlCO01BQ3JILE1BQU1sSCxpQkFBaUIsR0FBRyxJQUFJLENBQUNELGtCQUFrQixDQUFDLENBQUMsQ0FBQ0UsT0FBTyxDQUFDQyx1QkFBdUI7TUFDbkYsTUFBTUMsY0FBYyxHQUFHSCxpQkFBaUIsR0FDckNJLFNBQVMsQ0FBQ0MsaUJBQWlCLENBQzNCTCxpQkFBaUIsQ0FBQ00sVUFBVSxFQUM1Qk4saUJBQWlCLENBQUNPLFVBQVUsRUFDNUIsSUFBSSxDQUFDakIsVUFBVSxDQUFDLENBQ2hCLENBQUMsR0FDRGtCLFNBQVM7TUFDWixNQUFNM0MsS0FBSyxHQUFHLElBQUksQ0FBQ3lCLFVBQVUsQ0FBQyxDQUFDO01BQy9CekIsS0FBSyxDQUFDbUcsT0FBTyxDQUFDLElBQUksQ0FBQztNQUNuQixNQUFNbUQsb0JBQW9CLEdBQUd0SixLQUFLLENBQUNLLGlCQUFpQixDQUFDLFVBQVUsQ0FBeUI7TUFDeEYsTUFBTWtKLGFBQWEsR0FBR0Qsb0JBQW9CLENBQUNySSxXQUFXLENBQUMsVUFBVSxDQUFDLEtBQUssSUFBSTtNQUUzRSxNQUFNdUksV0FBVyxHQUFHLE1BQUFBLENBQU83QyxNQUFzQixFQUFFRCxXQUE0QixLQUFvQjtRQUNsRztRQUNBO1FBQ0EsSUFBSSxJQUFJLENBQUM5RCxpQkFBaUIsQ0FBQ04sY0FBYyxFQUFFcUIsT0FBTyxFQUFFZ0QsTUFBTSxDQUFDLEVBQUU7VUFDNUQ7VUFDQSxPQUFPaEQsT0FBTyxDQUFDOEMsSUFBSSxDQUFDO1lBQUVFLE1BQU07WUFBRUQsV0FBVyxFQUFFNkMsYUFBYSxHQUFHNUcsU0FBUyxHQUFHK0Q7VUFBWSxDQUFDLENBQUM7UUFDdEYsQ0FBQyxNQUFNO1VBQ045RixZQUFZLENBQUNDLElBQUksQ0FBQyxJQUFJLENBQUNxRSxpQkFBaUIsQ0FBQywwQkFBMEIsQ0FBQyxDQUFDO1FBQ3RFO01BQ0QsQ0FBQztNQUVELElBQUltRSxJQUFJLENBQUM5RSxRQUFRLEtBQUtsRixZQUFZLENBQUNrRSxFQUFFLEVBQUU7UUFDdEM7UUFDQSxPQUFPaUcsV0FBVyxDQUFDSCxJQUFJLENBQUM3RSxhQUFhLENBQUMsQ0FBQ2lGLE9BQU8sQ0FBQyxNQUFNekosS0FBSyxDQUFDbUcsT0FBTyxDQUFDLEtBQUssQ0FBQyxDQUFDO01BQzNFLENBQUMsTUFBTTtRQUNOO1FBQ0EsTUFBTSxDQUFDdUMsWUFBWSxFQUFFRyxXQUFXLENBQUMsR0FBRyxNQUFNL0QsT0FBTyxDQUFDQyxHQUFHLENBQUMsQ0FDckRzRSxJQUFJLENBQUM1RSxhQUFhLEVBQUUyQixhQUFhLENBQUMsQ0FBQyxJQUFJLElBQUksRUFDM0NpRCxJQUFJLENBQUMzRSxZQUFZLEVBQUUwQixhQUFhLENBQUMsQ0FBQyxJQUFJLElBQUksQ0FDMUMsQ0FBQztRQUNGLE1BQU1zRCxNQUFNLEdBQUcsSUFBSSxDQUFDZCx3QkFBd0IsQ0FBQ1MsSUFBSSxDQUFDNUUsYUFBYSxFQUFFaUUsWUFBWSxFQUFFVyxJQUFJLENBQUMzRSxZQUFZLEVBQUVtRSxXQUFXLENBQUU7UUFDL0csT0FBT1csV0FBVyxDQUFDRSxNQUFNLENBQUMvQyxNQUFNLEVBQUUrQyxNQUFNLENBQUNoRCxXQUFXLENBQUMsQ0FBQytDLE9BQU8sQ0FBQyxNQUFNekosS0FBSyxDQUFDbUcsT0FBTyxDQUFDLEtBQUssQ0FBQyxDQUFDO01BQzFGO0lBQ0QsQ0FBQztJQUFBLE9BQUE3RyxjQUFBO0VBQUE7RUFBQUMsUUFBQSxHQUFBRCxjQUFBO0VBQUEsT0FBQUMsUUFBQTtBQUFBIiwiaWdub3JlTGlzdCI6W119
@@ -60,6 +60,9 @@ export default class TableHierarchy implements IInterfaceWithMixin {
60
60
  if (!forContextMenu || internalContext.getProperty("numberOfSelectedContexts") > 0) {
61
61
  TableRuntime.clearSelection(table);
62
62
  table.fireSelectionChange();
63
+ } else if (forContextMenu) {
64
+ // Using the context menu implicitly defines a context for the action
65
+ table.fireSelectionChange();
63
66
  }
64
67
 
65
68
  internalContext.setProperty("nodeUpdatesInfo/cutEnablement", false);