@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
@@ -2,7 +2,7 @@
2
2
  * SAP UI development toolkit for HTML5 (SAPUI5)
3
3
  * (c) Copyright 2009-2025 SAP SE. All rights reserved
4
4
  */
5
- sap.ui.define(["sap/base/Log", "sap/fe/base/BindingToolkit", "sap/fe/base/ClassSupport", "sap/fe/controls/easyFilter/AINotice", "sap/fe/core/buildingBlocks/BuildingBlock", "sap/fe/core/controllerextensions/collaboration/CollaborationCommon", "sap/fe/core/converters/MetaModelConverter", "sap/fe/core/templating/PropertyHelper", "sap/fe/macros/Field", "sap/fe/macros/ai/EasyFilterDataFetcher", "sap/fe/macros/internal/valuehelp/ValueListHelper", "sap/m/Button", "sap/m/Dialog", "sap/m/FlexBox", "sap/m/FlexItemData", "sap/m/FormattedText", "sap/m/HBox", "sap/m/IllustratedMessage", "sap/m/IllustratedMessageSize", "sap/m/IllustratedMessageType", "sap/m/MessageStrip", "sap/m/MessageToast", "sap/m/OverflowToolbar", "sap/m/ScrollContainer", "sap/m/Text", "sap/m/TextArea", "sap/m/Title", "sap/m/ToggleButton", "sap/m/ToolbarSpacer", "sap/m/VBox", "sap/m/library", "sap/ui/base/BindingInfo", "sap/ui/core/InvisibleText", "sap/ui/core/Title", "sap/ui/layout/form/ColumnLayout", "sap/ui/layout/form/Form", "sap/ui/layout/form/FormContainer", "sap/ui/layout/form/FormElement", "sap/ui/model/FilterOperator", "sap/ui/model/odata/v4/AnnotationHelper", "sap/ui/performance/trace/FESRHelper", "sap/fe/base/jsx-runtime/jsx", "sap/fe/base/jsx-runtime/jsxs"], function (Log, BindingToolkit, ClassSupport, AINotice, BuildingBlock, CollaborationCommon, MetaModelConverter, PropertyHelper, Field, EasyFilterDataFetcher, ValueListHelper, Button, Dialog, FlexBox, FlexItemData, FormattedText, HBox, IllustratedMessage, IllustratedMessageSize, IllustratedMessageType, MessageStrip, MessageToast, OverflowToolbar, ScrollContainer, Text, TextArea, Title, ToggleButton, ToolbarSpacer, VBox, library, BindingInfo, InvisibleText, CoreTitle, ColumnLayout, Form, FormContainer, FormElement, FilterOperator, AnnotationHelper, FESRHelper, _jsx, _jsxs) {
5
+ sap.ui.define(["sap/base/Log", "sap/fe/base/BindingToolkit", "sap/fe/base/ClassSupport", "sap/fe/controls/easyFilter/AINotice", "sap/fe/core/buildingBlocks/BuildingBlock", "sap/fe/core/controllerextensions/collaboration/CollaborationCommon", "sap/fe/core/converters/MetaModelConverter", "sap/fe/core/templating/PropertyHelper", "sap/fe/macros/Field", "sap/fe/macros/ai/EasyFilterDataFetcher", "sap/fe/macros/internal/valuehelp/ValueListHelper", "sap/m/Button", "sap/m/Dialog", "sap/m/FlexBox", "sap/m/FlexItemData", "sap/m/FormattedText", "sap/m/HBox", "sap/m/IllustratedMessage", "sap/m/IllustratedMessageSize", "sap/m/IllustratedMessageType", "sap/m/MessageStrip", "sap/m/MessageToast", "sap/m/OverflowToolbar", "sap/m/ScrollContainer", "sap/m/Text", "sap/m/TextArea", "sap/m/Title", "sap/m/ToggleButton", "sap/m/ToolbarSpacer", "sap/m/VBox", "sap/m/library", "sap/ui/base/BindingInfo", "sap/ui/core/InvisibleText", "sap/ui/core/Title", "sap/ui/core/message/MessageType", "sap/ui/layout/form/ColumnLayout", "sap/ui/layout/form/Form", "sap/ui/layout/form/FormContainer", "sap/ui/layout/form/FormElement", "sap/ui/model/FilterOperator", "sap/ui/model/odata/v4/AnnotationHelper", "sap/ui/performance/trace/FESRHelper", "sap/fe/base/jsx-runtime/jsx", "sap/fe/base/jsx-runtime/jsxs"], function (Log, BindingToolkit, ClassSupport, AINotice, BuildingBlock, CollaborationCommon, MetaModelConverter, PropertyHelper, Field, EasyFilterDataFetcher, ValueListHelper, Button, Dialog, FlexBox, FlexItemData, FormattedText, HBox, IllustratedMessage, IllustratedMessageSize, IllustratedMessageType, MessageStrip, MessageToast, OverflowToolbar, ScrollContainer, Text, TextArea, Title, ToggleButton, ToolbarSpacer, VBox, library, BindingInfo, InvisibleText, CoreTitle, MessageType, ColumnLayout, Form, FormContainer, FormElement, FilterOperator, AnnotationHelper, FESRHelper, _jsx, _jsxs) {
6
6
  "use strict";
7
7
 
8
8
  var _dec, _dec2, _dec3, _dec4, _class, _class2, _descriptor, _descriptor2, _descriptor3;
@@ -186,9 +186,13 @@ sap.ui.define(["sap/base/Log", "sap/fe/base/BindingToolkit", "sap/fe/base/ClassS
186
186
  _proto.onValidateFieldGroups = function onValidateFieldGroups(_e) {
187
187
  const allFields = this.$reviewArea.current?.getControlsByFieldGroupId("EasyFillField") ?? [];
188
188
  this.state.hasError = allFields.some(field => {
189
- return !!field.getValueState && field.getValueState?.() === "Error";
189
+ return !!field.data("messageId") || !!field.getValueState && field.getValueState?.() === "Error";
190
190
  });
191
191
  };
192
+ _proto.onFieldChange = function onFieldChange(ev) {
193
+ ev.getSource().removeMessage(ev.getSource().data("messageId"));
194
+ ev.getSource().data("messageId", undefined);
195
+ };
192
196
  _proto.onEasyEditPressed = async function onEasyEditPressed() {
193
197
  // Call the AI service
194
198
  // Process through chat completion API
@@ -270,6 +274,7 @@ sap.ui.define(["sap/base/Log", "sap/fe/base/BindingToolkit", "sap/fe/base/ClassS
270
274
  FESRHelper.setSemanticStepname(thumbDownButton, "press", "fe4:ef:thumbDown");
271
275
  const aiNoticeText = _jsxs(HBox, {
272
276
  alignItems: "Center",
277
+ visible: this.bindState("hasValues"),
273
278
  children: [_jsx(AILinkNotice, {}), _jsx(Text, {
274
279
  text: this.getTranslatedText("C_EASYEDIT_AI_NOTICE_TEXT"),
275
280
  class: "sapUiTinyMarginBegin"
@@ -368,7 +373,8 @@ sap.ui.define(["sap/base/Log", "sap/fe/base/BindingToolkit", "sap/fe/base/ClassS
368
373
  validateFieldGroup: this.onValidateFieldGroups.bind(this),
369
374
  fieldGroupIds: "EasyFillField",
370
375
  metaPath: updatedField,
371
- contextPath: this.getOwnerContextPath()
376
+ contextPath: this.getOwnerContextPath(),
377
+ change: this.onFieldChange.bind(this)
372
378
  });
373
379
  });
374
380
  newValuesFormContainer.addFormElement(_jsx(FormElement, {
@@ -384,11 +390,13 @@ sap.ui.define(["sap/base/Log", "sap/fe/base/BindingToolkit", "sap/fe/base/ClassS
384
390
  context: metaModel.createBindingContext(targetMetaPath)
385
391
  });
386
392
  const parsedBinding = BindingInfo.parse(valueExpression);
393
+ let errorMessage = "";
387
394
  if (parsedBinding && parsedBinding.type) {
388
395
  try {
389
396
  parsedBinding.type.validateValue(updatedFields[updatedField]);
390
397
  } catch (e) {
391
398
  this.state.hasError = true;
399
+ errorMessage = e.message;
392
400
  }
393
401
  }
394
402
 
@@ -403,24 +411,28 @@ sap.ui.define(["sap/base/Log", "sap/fe/base/BindingToolkit", "sap/fe/base/ClassS
403
411
  const values = await resolveTokenValue(valueList, {
404
412
  operator: FilterOperator.EQ,
405
413
  selectedValues: [updatedFields[updatedField]]
406
- });
414
+ }, true);
407
415
 
408
416
  // Update the field value if it differs from the resolved value
409
417
  if (!values[0].noMatch) {
410
418
  updatedFields[updatedField] = values[0].selectedValues[0].value;
419
+ errorMessage = "";
411
420
  } else {
412
421
  this.state.hasError = true;
413
422
  hasVHError = true;
423
+ errorMessage = this.getTranslatedText("C_EASYEDIT_VH_ERROR", values[0].selectedValues[0].value);
414
424
  }
415
425
  }
416
426
 
417
427
  // Use a timeout to ensure validation runs correctly for the updated field
418
428
  setTimeout(() => {
419
- if (hasVHError) {
420
- // Update the inner VH content for validation
421
- ((newField.getContent().getContentEdit()?.[0]).getAggregation("_content")?.[0]).setValue(updatedFields[updatedField]);
422
- } else {
423
- newField.setValue(updatedFields[updatedField]);
429
+ newField.setValue(updatedFields[updatedField]);
430
+ if (errorMessage.length > 0 || hasVHError) {
431
+ const messageId = newField.addMessage({
432
+ type: MessageType.Error,
433
+ message: errorMessage
434
+ });
435
+ newField.data("messageId", messageId);
424
436
  }
425
437
  }, 200);
426
438
  } else {
@@ -449,6 +461,9 @@ sap.ui.define(["sap/base/Log", "sap/fe/base/BindingToolkit", "sap/fe/base/ClassS
449
461
  $vBox.current?.setBindingContext(this.getPageController().getView()?.getBindingContext());
450
462
  $vBox.current?.setModel(this.getPageController().getModel());
451
463
  $vBox.current?.setModel(this.getPageController().getModel("ui"), "ui");
464
+ setTimeout(() => {
465
+ this.onValidateFieldGroups();
466
+ }, 1000);
452
467
  this.state.newValues = newValues;
453
468
  this.state.incorrectValues = incorrectValues;
454
469
  } else {
@@ -623,4 +638,4 @@ sap.ui.define(["sap/base/Log", "sap/fe/base/BindingToolkit", "sap/fe/base/ClassS
623
638
  _exports = EasyFillDialog;
624
639
  return _exports;
625
640
  }, false);
626
- //# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJuYW1lcyI6WyJNQVhfTEVOR1RIIiwiRWFzeUZpbGxEaWFsb2ciLCJfZGVjIiwiZGVmaW5lVUk1Q2xhc3MiLCJfZGVjMiIsImRlZmluZVJlZmVyZW5jZSIsIl9kZWMzIiwiX2RlYzQiLCJwcm9wZXJ0eSIsInR5cGUiLCJfY2xhc3MiLCJfY2xhc3MyIiwiX0J1aWxkaW5nQmxvY2siLCJpZE9yUHJvcHMiLCJwcm9wcyIsIl90aGlzIiwiY2FsbCIsIl9pbml0aWFsaXplckRlZmluZVByb3BlcnR5IiwiX2Rlc2NyaXB0b3IiLCJfZGVzY3JpcHRvcjIiLCJfZGVzY3JpcHRvcjMiLCJfZXhwb3J0cyIsIl9pbmhlcml0c0xvb3NlIiwiX3Byb3RvIiwicHJvdG90eXBlIiwib25NZXRhZGF0YUF2YWlsYWJsZSIsIl9vd25lckNvbXBvbmVudCIsInN0YXRlIiwibmV3VmFsdWVzIiwiaGFzVmFsdWVzIiwiaGFzRXJyb3IiLCJzdGF0ZVR5cGUiLCJjb250ZW50IiwiY3JlYXRlQ29udGVudCIsIm9uQ29uZmlybSIsIl9lIiwibWFpblBhZ2VCaW5kaW5nQ29udGV4dCIsImdldFBhZ2VDb250cm9sbGVyIiwiZ2V0VmlldyIsImdldEJpbmRpbmdDb250ZXh0IiwiYWxsUHJvcHMiLCJfYmluZGluZ0NvbnRleHQiLCJnZXRPYmplY3QiLCJuZXdWYWx1ZXNLZXkiLCJzdGFydHNXaXRoIiwic2V0UHJvcGVydHkiLCJwdXNoIiwiYXBwbHlVcGRhdGVzRm9yQ2hhbmdlIiwiZ2V0UGF0aCIsIlByb21pc2UiLCJhbGwiLCJyZWZyZXNoIiwiZXJyIiwiTG9nIiwiZXJyb3IiLCJjbG9zZSIsInZpZXciLCJwcm9wZXJ0eVBhdGhGb3JVcGRhdGUiLCJtZXRhTW9kZWwiLCJnZXRNb2RlbCIsImdldE1ldGFNb2RlbCIsIm1ldGFDb250ZXh0IiwiZ2V0TWV0YUNvbnRleHQiLCJkYXRhTW9kZWxPYmplY3QiLCJNZXRhTW9kZWxDb252ZXJ0ZXIiLCJnZXRJbnZvbHZlZERhdGFNb2RlbE9iamVjdHMiLCJ0YXJnZXRDb250ZXh0Iiwic2lkZUVmZmVjdHNQcm9taXNlcyIsInNpZGVFZmZlY3RzU2VydmljZSIsIkNvbGxhYm9yYXRpb25VdGlscyIsImdldEFwcENvbXBvbmVudCIsImdldFNpZGVFZmZlY3RzU2VydmljZSIsInRhcmdldE1ldGFQYXRoIiwiZ2V0TWV0YVBhdGgiLCJyZWxhdGl2ZU1ldGFQYXRoRm9yVXBkYXRlIiwicmVwbGFjZSIsInNsaWNlIiwicmVxdWVzdFNpZGVFZmZlY3RzIiwiZmllbGRHcm91cElkcyIsImNvbXB1dGVGaWVsZEdyb3VwSWRzIiwidGFyZ2V0RW50aXR5VHlwZSIsImZ1bGx5UXVhbGlmaWVkTmFtZSIsInRhcmdldE9iamVjdCIsImxlbmd0aCIsInBhZ2VDb250cm9sbGVyIiwiZ2V0Q29udHJvbGxlciIsInNpZGVFZmZlY3RzTWFwRm9yRmllbGRHcm91cCIsIl9zaWRlRWZmZWN0cyIsImdldFNpZGVFZmZlY3RzTWFwRm9yRmllbGRHcm91cHMiLCJPYmplY3QiLCJrZXlzIiwiZm9yRWFjaCIsInNpZGVFZmZlY3ROYW1lIiwic2lkZUVmZmVjdCIsInNpZGVFZmZlY3RzIiwiY29udGV4dCIsInVuZGVmaW5lZCIsIm9uQ2FuY2VsIiwib3BlbiIsIl9nZXRGaWVsZE1hcHBpbmciLCJkZWZpbml0aW9uUGFnZSIsImZpZWxkTWFwcGluZyIsInBhZ2VUYXJnZXQiLCJnZXRUYXJnZXQiLCJlbnRpdHlUeXBlIiwiX3R5cGUiLCJ0YXJnZXRUeXBlIiwiZW50aXR5UHJvcGVydHkiLCJlbnRpdHlQcm9wZXJ0aWVzIiwiaXNJbW11dGFibGUiLCJpc0NvbXB1dGVkIiwiYW5ub3RhdGlvbnMiLCJVSSIsIkhpZGRlbiIsInZhbHVlT2YiLCJuYW1lIiwiZGVzY3JpcHRpb24iLCJnZXRMYWJlbCIsImRhdGFUeXBlIiwiZ2VuZXJhdGVMaXN0QmluZGluZyIsInBhdGgiLCJtb2RlbCIsInRyYW5zaWVudExpc3RCaW5kaW5nIiwiYmluZExpc3QiLCIkJHVwZGF0ZUdyb3VwSWQiLCJyZWZyZXNoSW50ZXJuYWwiLCJvblRodW1iUHJlc3MiLCJ0aHVtYlVwQnV0dG9uIiwidGh1bWJEb3duQnV0dG9uIiwic2V0RW5hYmxlZCIsIk1lc3NhZ2VUb2FzdCIsInNob3ciLCJnZXRUcmFuc2xhdGVkVGV4dCIsImZvcm1hdFJlbWFpbmluZ0NoYXJhY3RlcnMiLCJ2YWx1ZSIsIm9uQ2xlYXJBbGwiLCJoYXNJbmNvcnJlY3RWYWx1ZXMiLCJlbnRlcmVkVGV4dCIsImN1cnJlbnRseUVudGVyZWRUZXh0IiwiaW5jb3JyZWN0VmFsdWVzIiwib25WYWxpZGF0ZUZpZWxkR3JvdXBzIiwiYWxsRmllbGRzIiwiJHJldmlld0FyZWEiLCJjdXJyZW50IiwiZ2V0Q29udHJvbHNCeUZpZWxkR3JvdXBJZCIsInNvbWUiLCJmaWVsZCIsImdldFZhbHVlU3RhdGUiLCJvbkVhc3lFZGl0UHJlc3NlZCIsIm1ldGFQYXRoIiwiZ2V0T3duZXJQYWdlRGVmaW5pdGlvbiIsImVhc3lGaWxsTGlicmFyeSIsIl9fdWk1X3JlcXVpcmVfYXN5bmMiLCJvZGF0YU1vZGVsIiwiY3JlYXRlIiwiaXNCdXN5IiwiYWlDYWxsUmVzdWx0IiwiZXh0cmFjdEZpZWxkVmFsdWVzRnJvbVRleHQiLCJzdWNjZXNzIiwidXBkYXRlZEZpZWxkcyIsImRhdGEiLCJlZGl0YWJsZUZpZWxkcyIsImdldEVkaXRhYmxlRmllbGRzIiwiJHNjcm9sbENvbnRhaW5lciIsImRlc3Ryb3kiLCJyZXZpZXdBcmVhRm9ybSIsIl9qc3giLCJGb3JtIiwiZWRpdGFibGUiLCJjbGFzcyIsInZpc2libGUiLCJiaW5kU3RhdGUiLCJjaGlsZHJlbiIsImxheW91dCIsIkNvbHVtbkxheW91dCIsImNvbHVtbnNNIiwiY29sdW1uc0wiLCJjb2x1bW5zWEwiLCJsYWJlbENlbGxzTGFyZ2UiLCJlbXB0eUNlbGxzTGFyZ2UiLCJpbmNvcnJlY3RWYWx1ZXNGb3JtIiwid2FybmluZ01lc3NhZ2UiLCJNZXNzYWdlU3RyaXAiLCJ0ZXh0Iiwic2hvd0ljb24iLCJUb2dnbGVCdXR0b24iLCJpY29uIiwidG9vbHRpcCIsInByZXNzIiwiRkVTUkhlbHBlciIsInNldFNlbWFudGljU3RlcG5hbWUiLCJhaU5vdGljZVRleHQiLCJfanN4cyIsIkhCb3giLCJhbGlnbkl0ZW1zIiwiQUlMaW5rTm90aWNlIiwiVGV4dCIsInByZXZpb3VzVmFsdWVzRm9ybUNvbnRhaW5lciIsIkZvcm1Db250YWluZXIiLCJ0aXRsZSIsIkNvcmVUaXRsZSIsInByZXZpb3VzVmFsdWVzRm9ybUNvbnRhaW5lcjIiLCJuZXdWYWx1ZXNGb3JtQ29udGFpbmVyIiwibmV3VmFsdWVzRm9ybUNvbnRhaW5lcjIiLCJ1aUNvbnRleHQiLCJjcmVhdGVCaW5kaW5nQ29udGV4dCIsInNldEJpbmRpbmdDb250ZXh0IiwiYWRkRm9ybUNvbnRhaW5lciIsInNldE1vZGVsIiwiJHZCb3giLCJjcmVhdGVSZWZlcmVuY2UiLCJhZGRJdGVtIiwiU2Nyb2xsQ29udGFpbmVyIiwicmVmIiwidmVydGljYWwiLCJWQm94IiwiaXRlbXMiLCJqdXN0aWZ5Q29udGVudCIsIlRpdGxlIiwibGF5b3V0RGF0YSIsIkZsZXhJdGVtRGF0YSIsImFsaWduU2VsZiIsInVwZGF0ZWRGaWVsZCIsImlzRWRpdGFibGUiLCJhZGRGb3JtRWxlbWVudCIsIkZvcm1FbGVtZW50IiwibGFiZWwiLCJGaWVsZCIsImNvbnRleHRQYXRoIiwiZ2V0T3duZXJDb250ZXh0UGF0aCIsInJlYWRPbmx5IiwicmVxdWlyZWQiLCJuZXdGaWVsZCIsIl9nZXRPd25lciIsInJ1bkFzT3duZXIiLCJfcmVxdWlyZXNWYWxpZGF0aW9uIiwidmFsaWRhdGVGaWVsZEdyb3VwIiwiYmluZCIsImZpZWxkcyIsIm1ldGFNb2RlbE9iaiIsInZhbHVlRXhwcmVzc2lvbiIsIkFubm90YXRpb25IZWxwZXIiLCJmb3JtYXQiLCJwYXJzZWRCaW5kaW5nIiwiQmluZGluZ0luZm8iLCJwYXJzZSIsInZhbGlkYXRlVmFsdWUiLCJlIiwidmFsdWVMaXN0IiwiX2dldFZhbHVlTGlzdCIsImhhc1ZIRXJyb3IiLCJWYWx1ZUxpc3RIZWxwZXIiLCJpc1ZhbHVlTGlzdFNlYXJjaGFibGUiLCJ2YWx1ZXMiLCJyZXNvbHZlVG9rZW5WYWx1ZSIsIm9wZXJhdG9yIiwiRmlsdGVyT3BlcmF0b3IiLCJFUSIsInNlbGVjdGVkVmFsdWVzIiwibm9NYXRjaCIsInNldFRpbWVvdXQiLCJnZXRDb250ZW50IiwiZ2V0Q29udGVudEVkaXQiLCJnZXRBZ2dyZWdhdGlvbiIsInNldFZhbHVlIiwiZWFzeUVkaXREZXNjcmlwdGlvbiIsIkludmlzaWJsZVRleHQiLCIkZWFzeUZpbGxCdXR0b24iLCIkZWFzeUZpbGxTYXZlQnV0dG9uIiwiJGVhc3lGaWxsQ2FuY2VsQnV0dG9uIiwiJGVhc3lGaWxsQ2xlYXJBbGxCdXR0b24iLCJkaWFsb2ciLCJEaWFsb2ciLCJyZXNpemFibGUiLCJob3Jpem9udGFsU2Nyb2xsaW5nIiwidmVydGljYWxTY3JvbGxpbmciLCJjb250ZW50V2lkdGgiLCJjb250ZW50SGVpZ2h0IiwiZXNjYXBlSGFuZGxlciIsImFmdGVyQ2xvc2UiLCJGbGV4Qm94IiwiZGlyZWN0aW9uIiwiRmxleERpcmVjdGlvbiIsIlJvdyIsInJlbmRlclR5cGUiLCJ3aWR0aCIsImhlaWdodCIsImlkIiwiY3JlYXRlSWQiLCJDb2x1bW4iLCJGb3JtYXR0ZWRUZXh0IiwiaHRtbFRleHQiLCJUZXh0QXJlYSIsImxpdmVDaGFuZ2UiLCJnZXRQYXJhbWV0ZXIiLCJwbGFjZWhvbGRlciIsInJvd3MiLCJncm93aW5nIiwiZ3Jvd2luZ01heExpbmVzIiwibWF4TGVuZ3RoIiwiYXJpYUxhYmVsbGVkQnkiLCJmb3JtYXR0ZXIiLCJCdXR0b24iLCJlbmFibGVkIiwibm90IiwiaXNFbXB0eSIsIkJ1dHRvblR5cGUiLCJUcmFuc3BhcmVudCIsImJ1c3kiLCJJbGx1c3RyYXRlZE1lc3NhZ2UiLCJpbGx1c3RyYXRpb25UeXBlIiwiSWxsdXN0cmF0ZWRNZXNzYWdlVHlwZSIsIk5vU2VhcmNoUmVzdWx0cyIsImlsbHVzdHJhdGlvblNpemUiLCJJbGx1c3RyYXRlZE1lc3NhZ2VTaXplIiwiTGFyZ2UiLCJlcXVhbCIsIk5vRW50cmllcyIsIlVuYWJsZVRvTG9hZCIsImZvb3RlciIsIk92ZXJmbG93VG9vbGJhciIsIlRvb2xiYXJTcGFjZXIiLCJhbmQiLCJwcm9wZXJ0eVBhdGgiLCJ2YWx1ZUxpc3RzIiwiZ2V0VmFsdWVMaXN0SW5mbyIsIkJ1aWxkaW5nQmxvY2siLCJfYXBwbHlEZWNvcmF0ZWREZXNjcmlwdG9yIiwiY29uZmlndXJhYmxlIiwiZW51bWVyYWJsZSIsIndyaXRhYmxlIiwiaW5pdGlhbGl6ZXIiXSwic291cmNlUm9vdCI6Ii4iLCJzb3VyY2VzIjpbIkVhc3lGaWxsRGlhbG9nLnRzeCJdLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgdHlwZSB7IEVudGl0eVR5cGUsIFByb3BlcnR5IH0gZnJvbSBcIkBzYXAtdXgvdm9jYWJ1bGFyaWVzLXR5cGVzXCI7XG5pbXBvcnQgTG9nIGZyb20gXCJzYXAvYmFzZS9Mb2dcIjtcbmltcG9ydCB7IGFuZCwgZXF1YWwsIGlzRW1wdHksIG5vdCB9IGZyb20gXCJzYXAvZmUvYmFzZS9CaW5kaW5nVG9vbGtpdFwiO1xuaW1wb3J0IHR5cGUgeyBFbmhhbmNlV2l0aFVJNSwgUHJvcGVydGllc09mIH0gZnJvbSBcInNhcC9mZS9iYXNlL0NsYXNzU3VwcG9ydFwiO1xuaW1wb3J0IHsgY3JlYXRlUmVmZXJlbmNlLCBkZWZpbmVSZWZlcmVuY2UsIGRlZmluZVVJNUNsYXNzLCBwcm9wZXJ0eSB9IGZyb20gXCJzYXAvZmUvYmFzZS9DbGFzc1N1cHBvcnRcIjtcbmltcG9ydCB0eXBlIHsgUmVmIH0gZnJvbSBcInNhcC9mZS9iYXNlL2pzeC1ydW50aW1lL2pzeFwiO1xuaW1wb3J0IHsgQUlMaW5rTm90aWNlIH0gZnJvbSBcInNhcC9mZS9jb250cm9scy9lYXN5RmlsdGVyL0FJTm90aWNlXCI7XG5pbXBvcnQgdHlwZSB7IEZFVmlldyB9IGZyb20gXCJzYXAvZmUvY29yZS9CYXNlQ29udHJvbGxlclwiO1xuaW1wb3J0IHR5cGUgVGVtcGxhdGVDb21wb25lbnQgZnJvbSBcInNhcC9mZS9jb3JlL1RlbXBsYXRlQ29tcG9uZW50XCI7XG5pbXBvcnQgQnVpbGRpbmdCbG9jayBmcm9tIFwic2FwL2ZlL2NvcmUvYnVpbGRpbmdCbG9ja3MvQnVpbGRpbmdCbG9ja1wiO1xuaW1wb3J0IHR5cGUgeyBGaWVsZFNpZGVFZmZlY3REaWN0aW9uYXJ5IH0gZnJvbSBcInNhcC9mZS9jb3JlL2NvbnRyb2xsZXJleHRlbnNpb25zL1NpZGVFZmZlY3RzXCI7XG5pbXBvcnQgeyBDb2xsYWJvcmF0aW9uVXRpbHMgfSBmcm9tIFwic2FwL2ZlL2NvcmUvY29udHJvbGxlcmV4dGVuc2lvbnMvY29sbGFib3JhdGlvbi9Db2xsYWJvcmF0aW9uQ29tbW9uXCI7XG5pbXBvcnQgKiBhcyBNZXRhTW9kZWxDb252ZXJ0ZXIgZnJvbSBcInNhcC9mZS9jb3JlL2NvbnZlcnRlcnMvTWV0YU1vZGVsQ29udmVydGVyXCI7XG5pbXBvcnQgdHlwZSB7IERlZmluaXRpb25QYWdlIH0gZnJvbSBcInNhcC9mZS9jb3JlL2RlZmluaXRpb24vRkVEZWZpbml0aW9uXCI7XG5pbXBvcnQgeyBnZXRMYWJlbCwgaXNDb21wdXRlZCwgaXNJbW11dGFibGUgfSBmcm9tIFwic2FwL2ZlL2NvcmUvdGVtcGxhdGluZy9Qcm9wZXJ0eUhlbHBlclwiO1xuaW1wb3J0IEZpZWxkIGZyb20gXCJzYXAvZmUvbWFjcm9zL0ZpZWxkXCI7XG5pbXBvcnQgeyByZXNvbHZlVG9rZW5WYWx1ZSB9IGZyb20gXCJzYXAvZmUvbWFjcm9zL2FpL0Vhc3lGaWx0ZXJEYXRhRmV0Y2hlclwiO1xuaW1wb3J0IHR5cGUgRmllbGRXcmFwcGVyIGZyb20gXCJzYXAvZmUvbWFjcm9zL2NvbnRyb2xzL0ZpZWxkV3JhcHBlclwiO1xuaW1wb3J0IFZhbHVlTGlzdEhlbHBlciwgeyB0eXBlIFZhbHVlTGlzdEluZm8gfSBmcm9tIFwic2FwL2ZlL21hY3Jvcy9pbnRlcm5hbC92YWx1ZWhlbHAvVmFsdWVMaXN0SGVscGVyXCI7XG5pbXBvcnQgdHlwZSB7IEJ1dHRvbiRQcmVzc0V2ZW50IH0gZnJvbSBcInNhcC9tL0J1dHRvblwiO1xuaW1wb3J0IEJ1dHRvbiBmcm9tIFwic2FwL20vQnV0dG9uXCI7XG5pbXBvcnQgRGlhbG9nIGZyb20gXCJzYXAvbS9EaWFsb2dcIjtcbmltcG9ydCBGbGV4Qm94IGZyb20gXCJzYXAvbS9GbGV4Qm94XCI7XG5pbXBvcnQgRmxleEl0ZW1EYXRhIGZyb20gXCJzYXAvbS9GbGV4SXRlbURhdGFcIjtcbmltcG9ydCBGb3JtYXR0ZWRUZXh0IGZyb20gXCJzYXAvbS9Gb3JtYXR0ZWRUZXh0XCI7XG5pbXBvcnQgSEJveCBmcm9tIFwic2FwL20vSEJveFwiO1xuaW1wb3J0IElsbHVzdHJhdGVkTWVzc2FnZSBmcm9tIFwic2FwL20vSWxsdXN0cmF0ZWRNZXNzYWdlXCI7XG5pbXBvcnQgSWxsdXN0cmF0ZWRNZXNzYWdlU2l6ZSBmcm9tIFwic2FwL20vSWxsdXN0cmF0ZWRNZXNzYWdlU2l6ZVwiO1xuaW1wb3J0IElsbHVzdHJhdGVkTWVzc2FnZVR5cGUgZnJvbSBcInNhcC9tL0lsbHVzdHJhdGVkTWVzc2FnZVR5cGVcIjtcbmltcG9ydCB0eXBlIElucHV0IGZyb20gXCJzYXAvbS9JbnB1dFwiO1xuaW1wb3J0IE1lc3NhZ2VTdHJpcCBmcm9tIFwic2FwL20vTWVzc2FnZVN0cmlwXCI7XG5pbXBvcnQgTWVzc2FnZVRvYXN0IGZyb20gXCJzYXAvbS9NZXNzYWdlVG9hc3RcIjtcbmltcG9ydCBPdmVyZmxvd1Rvb2xiYXIgZnJvbSBcInNhcC9tL092ZXJmbG93VG9vbGJhclwiO1xuaW1wb3J0IFNjcm9sbENvbnRhaW5lciBmcm9tIFwic2FwL20vU2Nyb2xsQ29udGFpbmVyXCI7XG5pbXBvcnQgVGV4dCBmcm9tIFwic2FwL20vVGV4dFwiO1xuaW1wb3J0IFRleHRBcmVhIGZyb20gXCJzYXAvbS9UZXh0QXJlYVwiO1xuaW1wb3J0IFRpdGxlIGZyb20gXCJzYXAvbS9UaXRsZVwiO1xuaW1wb3J0IFRvZ2dsZUJ1dHRvbiBmcm9tIFwic2FwL20vVG9nZ2xlQnV0dG9uXCI7XG5pbXBvcnQgVG9vbGJhclNwYWNlciBmcm9tIFwic2FwL20vVG9vbGJhclNwYWNlclwiO1xuaW1wb3J0IFZCb3ggZnJvbSBcInNhcC9tL1ZCb3hcIjtcbmltcG9ydCB7IEJ1dHRvblR5cGUsIEZsZXhEaXJlY3Rpb24gfSBmcm9tIFwic2FwL20vbGlicmFyeVwiO1xuaW1wb3J0IEJpbmRpbmdJbmZvIGZyb20gXCJzYXAvdWkvYmFzZS9CaW5kaW5nSW5mb1wiO1xuaW1wb3J0IHR5cGUgTWFuYWdlZE9iamVjdCBmcm9tIFwic2FwL3VpL2Jhc2UvTWFuYWdlZE9iamVjdFwiO1xuaW1wb3J0IHR5cGUgeyBDb250cm9sJFZhbGlkYXRlRmllbGRHcm91cEV2ZW50IH0gZnJvbSBcInNhcC91aS9jb3JlL0NvbnRyb2xcIjtcbmltcG9ydCBJbnZpc2libGVUZXh0IGZyb20gXCJzYXAvdWkvY29yZS9JbnZpc2libGVUZXh0XCI7XG5pbXBvcnQgQ29yZVRpdGxlIGZyb20gXCJzYXAvdWkvY29yZS9UaXRsZVwiO1xuaW1wb3J0IENvbHVtbkxheW91dCBmcm9tIFwic2FwL3VpL2xheW91dC9mb3JtL0NvbHVtbkxheW91dFwiO1xuaW1wb3J0IEZvcm0gZnJvbSBcInNhcC91aS9sYXlvdXQvZm9ybS9Gb3JtXCI7XG5pbXBvcnQgRm9ybUNvbnRhaW5lciBmcm9tIFwic2FwL3VpL2xheW91dC9mb3JtL0Zvcm1Db250YWluZXJcIjtcbmltcG9ydCBGb3JtRWxlbWVudCBmcm9tIFwic2FwL3VpL2xheW91dC9mb3JtL0Zvcm1FbGVtZW50XCI7XG5pbXBvcnQgdHlwZSBNRENGaWVsZCBmcm9tIFwic2FwL3VpL21kYy9GaWVsZFwiO1xuaW1wb3J0IHR5cGUgQ29udGV4dCBmcm9tIFwic2FwL3VpL21vZGVsL0NvbnRleHRcIjtcbmltcG9ydCBGaWx0ZXJPcGVyYXRvciBmcm9tIFwic2FwL3VpL21vZGVsL0ZpbHRlck9wZXJhdG9yXCI7XG5pbXBvcnQgQW5ub3RhdGlvbkhlbHBlciBmcm9tIFwic2FwL3VpL21vZGVsL29kYXRhL3Y0L0Fubm90YXRpb25IZWxwZXJcIjtcbmltcG9ydCB0eXBlIE9EYXRhTGlzdEJpbmRpbmcgZnJvbSBcInNhcC91aS9tb2RlbC9vZGF0YS92NC9PRGF0YUxpc3RCaW5kaW5nXCI7XG5pbXBvcnQgdHlwZSBPRGF0YU1vZGVsIGZyb20gXCJzYXAvdWkvbW9kZWwvb2RhdGEvdjQvT0RhdGFNb2RlbFwiO1xuaW1wb3J0IEZFU1JIZWxwZXIgZnJvbSBcInNhcC91aS9wZXJmb3JtYW5jZS90cmFjZS9GRVNSSGVscGVyXCI7XG5pbXBvcnQgdHlwZSB7IEZpZWxkTWV0YWRhdGEgfSBmcm9tIFwidXgvZW5nL2Zpb3JpYWkvcmV1c2UvZWFzeWZpbGwvRWFzeUZpbGxcIjtcblxuY29uc3QgTUFYX0xFTkdUSCA9IDIwMDA7XG5cbkBkZWZpbmVVSTVDbGFzcyhcInNhcC5mZS5tYWNyb3MuYWkuRWFzeUZpbGxEaWFsb2dcIilcbmV4cG9ydCBkZWZhdWx0IGNsYXNzIEVhc3lGaWxsRGlhbG9nIGV4dGVuZHMgQnVpbGRpbmdCbG9jazxcblx0RGlhbG9nLFxuXHR7XG5cdFx0ZW50ZXJlZFRleHQ6IHN0cmluZztcblx0XHRpc0J1c3k6IGJvb2xlYW47XG5cdFx0Y3VycmVudGx5RW50ZXJlZFRleHQ6IHN0cmluZztcblx0XHRpbmNvcnJlY3RWYWx1ZXM6IFJlY29yZDxzdHJpbmcsIHVua25vd24+O1xuXHRcdG5ld1ZhbHVlczogUmVjb3JkPHN0cmluZywgdW5rbm93bj47XG5cdFx0aGFzVmFsdWVzOiBib29sZWFuO1xuXHRcdGhhc0Vycm9yOiBib29sZWFuO1xuXHRcdGhhc0luY29ycmVjdFZhbHVlczogYm9vbGVhbjtcblx0XHRzdGF0ZVR5cGU6IFwiSW5pdGlhbFwiIHwgXCJOb0VudHJpZXNcIiB8IFwiRXJyb3JcIiB8IFwiSGFzRW50cmllc1wiO1xuXHR9XG4+IHtcblx0QGRlZmluZVJlZmVyZW5jZSgpXG5cdCRyZXZpZXdBcmVhITogUmVmPEZsZXhCb3g+O1xuXG5cdEBkZWZpbmVSZWZlcmVuY2UoKVxuXHQkc2Nyb2xsQ29udGFpbmVyITogUmVmPEZsZXhCb3g+O1xuXG5cdEBwcm9wZXJ0eSh7IHR5cGU6IFwiRnVuY3Rpb25cIiB9KVxuXHRnZXRFZGl0YWJsZUZpZWxkcz86IEZ1bmN0aW9uO1xuXG5cdHByaXZhdGUgX2JpbmRpbmdDb250ZXh0PzogQ29udGV4dDtcblxuXHRjb25zdHJ1Y3RvcihpZE9yUHJvcHM6IHN0cmluZyB8IFByb3BlcnRpZXNPZjxFYXN5RmlsbERpYWxvZz4sIHByb3BzPzogUHJvcGVydGllc09mPEVhc3lGaWxsRGlhbG9nPikge1xuXHRcdHN1cGVyKGlkT3JQcm9wcywgcHJvcHMpO1xuXHR9XG5cblx0b25NZXRhZGF0YUF2YWlsYWJsZShfb3duZXJDb21wb25lbnQ6IFRlbXBsYXRlQ29tcG9uZW50KTogdm9pZCB7XG5cdFx0c3VwZXIub25NZXRhZGF0YUF2YWlsYWJsZShfb3duZXJDb21wb25lbnQpO1xuXHRcdHRoaXMuc3RhdGUubmV3VmFsdWVzID0ge307XG5cdFx0dGhpcy5zdGF0ZS5oYXNWYWx1ZXMgPSBmYWxzZTtcblx0XHR0aGlzLnN0YXRlLmhhc0Vycm9yID0gZmFsc2U7XG5cdFx0dGhpcy5zdGF0ZS5zdGF0ZVR5cGUgPSBcIkluaXRpYWxcIjtcblx0XHR0aGlzLmNvbnRlbnQgPSB0aGlzLmNyZWF0ZUNvbnRlbnQoKTtcblx0fVxuXG5cdGFzeW5jIG9uQ29uZmlybShfZTogQnV0dG9uJFByZXNzRXZlbnQpOiBQcm9taXNlPHZvaWQ+IHtcblx0XHQvLyBWYWxpZGF0ZSB0aGUgZGF0YSBoYW5kbGluZ1xuXHRcdGNvbnN0IG1haW5QYWdlQmluZGluZ0NvbnRleHQgPSB0aGlzLmdldFBhZ2VDb250cm9sbGVyKCkuZ2V0VmlldygpPy5nZXRCaW5kaW5nQ29udGV4dCgpO1xuXHRcdGNvbnN0IGFsbFByb3BzID0gW107XG5cdFx0Y29uc3QgbmV3VmFsdWVzID0gdGhpcy5fYmluZGluZ0NvbnRleHQ/LmdldE9iamVjdCgpID8/IHRoaXMuc3RhdGUubmV3VmFsdWVzO1xuXHRcdGZvciAoY29uc3QgbmV3VmFsdWVzS2V5IGluIG5ld1ZhbHVlcykge1xuXHRcdFx0aWYgKG5ld1ZhbHVlc0tleSAhPT0gXCJfX2JpbmRpbmdJbmZvXCIgJiYgIW5ld1ZhbHVlc0tleS5zdGFydHNXaXRoKFwiQCRcIikpIHtcblx0XHRcdFx0aWYgKHR5cGVvZiBuZXdWYWx1ZXNbbmV3VmFsdWVzS2V5XSAhPT0gXCJvYmplY3RcIikge1xuXHRcdFx0XHRcdG1haW5QYWdlQmluZGluZ0NvbnRleHQ/LnNldFByb3BlcnR5KG5ld1ZhbHVlc0tleSwgbmV3VmFsdWVzW25ld1ZhbHVlc0tleV0pO1xuXHRcdFx0XHRcdGFsbFByb3BzLnB1c2goXG5cdFx0XHRcdFx0XHR0aGlzLmFwcGx5VXBkYXRlc0ZvckNoYW5nZSh0aGlzLmdldFBhZ2VDb250cm9sbGVyKCkuZ2V0VmlldygpLCBtYWluUGFnZUJpbmRpbmdDb250ZXh0LmdldFBhdGgobmV3VmFsdWVzS2V5KSlcblx0XHRcdFx0XHQpO1xuXHRcdFx0XHR9XG5cdFx0XHR9XG5cdFx0fVxuXHRcdHRyeSB7XG5cdFx0XHRhd2FpdCBQcm9taXNlLmFsbChhbGxQcm9wcyk7XG5cdFx0XHRtYWluUGFnZUJpbmRpbmdDb250ZXh0LnJlZnJlc2goKTtcblx0XHR9IGNhdGNoIChlcnIpIHtcblx0XHRcdExvZy5lcnJvcihcIkZhaWxlZCB0byB1cGRhdGUgZGF0YSBhZnRlciBjaGFuZ2U6XCIgKyBlcnIpO1xuXHRcdH1cblx0XHQvLyBDbG9zZSBub25ldGhlbGVzc1xuXHRcdHRoaXMuY29udGVudD8uY2xvc2UoKTtcblx0fVxuXG5cdGFzeW5jIGFwcGx5VXBkYXRlc0ZvckNoYW5nZSh2aWV3OiBGRVZpZXcsIHByb3BlcnR5UGF0aEZvclVwZGF0ZTogc3RyaW5nKTogUHJvbWlzZTx2b2lkPiB7XG5cdFx0Y29uc3QgbWV0YU1vZGVsID0gdmlldy5nZXRNb2RlbCgpLmdldE1ldGFNb2RlbCgpO1xuXHRcdGNvbnN0IG1ldGFDb250ZXh0ID0gbWV0YU1vZGVsLmdldE1ldGFDb250ZXh0KHByb3BlcnR5UGF0aEZvclVwZGF0ZSk7XG5cdFx0Y29uc3QgZGF0YU1vZGVsT2JqZWN0ID0gTWV0YU1vZGVsQ29udmVydGVyLmdldEludm9sdmVkRGF0YU1vZGVsT2JqZWN0czxQcm9wZXJ0eT4obWV0YUNvbnRleHQpO1xuXHRcdGNvbnN0IHRhcmdldENvbnRleHQgPSB2aWV3LmdldEJpbmRpbmdDb250ZXh0KCk7XG5cdFx0dHJ5IHtcblx0XHRcdGNvbnN0IHNpZGVFZmZlY3RzUHJvbWlzZXM6IFByb21pc2U8dW5rbm93bj5bXSA9IFtdO1xuXHRcdFx0Y29uc3Qgc2lkZUVmZmVjdHNTZXJ2aWNlID0gQ29sbGFib3JhdGlvblV0aWxzLmdldEFwcENvbXBvbmVudCh2aWV3KS5nZXRTaWRlRWZmZWN0c1NlcnZpY2UoKTtcblxuXHRcdFx0Ly8gV2UgaGF2ZSBhIHRhcmdldCBjb250ZXh0LCBzbyB3ZSBjYW4gcmV0cmlldmUgdGhlIHVwZGF0ZWQgcHJvcGVydHlcblx0XHRcdGNvbnN0IHRhcmdldE1ldGFQYXRoID0gbWV0YU1vZGVsLmdldE1ldGFQYXRoKHRhcmdldENvbnRleHQuZ2V0UGF0aCgpKTtcblx0XHRcdGNvbnN0IHJlbGF0aXZlTWV0YVBhdGhGb3JVcGRhdGUgPSBtZXRhTW9kZWwuZ2V0TWV0YVBhdGgocHJvcGVydHlQYXRoRm9yVXBkYXRlKS5yZXBsYWNlKHRhcmdldE1ldGFQYXRoLCBcIlwiKS5zbGljZSgxKTtcblx0XHRcdHNpZGVFZmZlY3RzUHJvbWlzZXMucHVzaChzaWRlRWZmZWN0c1NlcnZpY2UucmVxdWVzdFNpZGVFZmZlY3RzKFtyZWxhdGl2ZU1ldGFQYXRoRm9yVXBkYXRlXSwgdGFyZ2V0Q29udGV4dCwgXCIkYXV0b1wiKSk7XG5cblx0XHRcdC8vIEdldCB0aGUgZmllbGRHcm91cElkcyBjb3JyZXNwb25kaW5nIHRvIHBhdGhGb3JVcGRhdGVcblx0XHRcdGNvbnN0IGZpZWxkR3JvdXBJZHMgPSBzaWRlRWZmZWN0c1NlcnZpY2UuY29tcHV0ZUZpZWxkR3JvdXBJZHMoXG5cdFx0XHRcdGRhdGFNb2RlbE9iamVjdC50YXJnZXRFbnRpdHlUeXBlLmZ1bGx5UXVhbGlmaWVkTmFtZSxcblx0XHRcdFx0ZGF0YU1vZGVsT2JqZWN0LnRhcmdldE9iamVjdCEuZnVsbHlRdWFsaWZpZWROYW1lXG5cdFx0XHQpO1xuXG5cdFx0XHQvLyBFeGVjdXRlIHRoZSBzaWRlIGVmZmVjdHMgZm9yIHRoZSBmaWVsZEdyb3VwSWRzXG5cdFx0XHRpZiAoZmllbGRHcm91cElkcy5sZW5ndGgpIHtcblx0XHRcdFx0Y29uc3QgcGFnZUNvbnRyb2xsZXIgPSB2aWV3LmdldENvbnRyb2xsZXIoKTtcblx0XHRcdFx0Y29uc3Qgc2lkZUVmZmVjdHNNYXBGb3JGaWVsZEdyb3VwID0gcGFnZUNvbnRyb2xsZXIuX3NpZGVFZmZlY3RzLmdldFNpZGVFZmZlY3RzTWFwRm9yRmllbGRHcm91cHMoXG5cdFx0XHRcdFx0ZmllbGRHcm91cElkcyxcblx0XHRcdFx0XHR0YXJnZXRDb250ZXh0XG5cdFx0XHRcdCkgYXMgRmllbGRTaWRlRWZmZWN0RGljdGlvbmFyeTtcblx0XHRcdFx0T2JqZWN0LmtleXMoc2lkZUVmZmVjdHNNYXBGb3JGaWVsZEdyb3VwKS5mb3JFYWNoKChzaWRlRWZmZWN0TmFtZSkgPT4ge1xuXHRcdFx0XHRcdGNvbnN0IHNpZGVFZmZlY3QgPSBzaWRlRWZmZWN0c01hcEZvckZpZWxkR3JvdXBbc2lkZUVmZmVjdE5hbWVdO1xuXHRcdFx0XHRcdHNpZGVFZmZlY3RzUHJvbWlzZXMucHVzaChcblx0XHRcdFx0XHRcdHBhZ2VDb250cm9sbGVyLl9zaWRlRWZmZWN0cy5yZXF1ZXN0U2lkZUVmZmVjdHMoc2lkZUVmZmVjdC5zaWRlRWZmZWN0cywgc2lkZUVmZmVjdC5jb250ZXh0LCBcIiRhdXRvXCIsIHVuZGVmaW5lZCwgdHJ1ZSlcblx0XHRcdFx0XHQpO1xuXHRcdFx0XHR9KTtcblx0XHRcdH1cblxuXHRcdFx0YXdhaXQgUHJvbWlzZS5hbGwoc2lkZUVmZmVjdHNQcm9taXNlcyk7XG5cdFx0fSBjYXRjaCAoZXJyKSB7XG5cdFx0XHRMb2cuZXJyb3IoXCJGYWlsZWQgdG8gdXBkYXRlIGRhdGEgYWZ0ZXIgY2hhbmdlOlwiICsgZXJyKTtcblx0XHRcdHRocm93IGVycjtcblx0XHR9XG5cdH1cblxuXHRvbkNhbmNlbCgpOiB2b2lkIHtcblx0XHR0aGlzLmNvbnRlbnQ/LmNsb3NlKCk7XG5cdH1cblxuXHRvcGVuKCk6IHZvaWQge1xuXHRcdHRoaXMuY29udGVudD8ub3BlbigpO1xuXHR9XG5cblx0X2dldEZpZWxkTWFwcGluZyhkZWZpbml0aW9uUGFnZTogRGVmaW5pdGlvblBhZ2UgfCB1bmRlZmluZWQpOiBGaWVsZE1ldGFkYXRhIHtcblx0XHRjb25zdCBmaWVsZE1hcHBpbmc6IEZpZWxkTWV0YWRhdGEgPSB7fTtcblx0XHRpZiAoZGVmaW5pdGlvblBhZ2UpIHtcblx0XHRcdGNvbnN0IHBhZ2VUYXJnZXQgPSBkZWZpbml0aW9uUGFnZS5nZXRNZXRhUGF0aCgpLmdldFRhcmdldCgpO1xuXHRcdFx0bGV0IGVudGl0eVR5cGU6IEVudGl0eVR5cGUgfCB1bmRlZmluZWQ7XG5cdFx0XHRzd2l0Y2ggKHBhZ2VUYXJnZXQuX3R5cGUpIHtcblx0XHRcdFx0Y2FzZSBcIkVudGl0eVNldFwiOlxuXHRcdFx0XHRjYXNlIFwiU2luZ2xldG9uXCI6XG5cdFx0XHRcdFx0ZW50aXR5VHlwZSA9IHBhZ2VUYXJnZXQuZW50aXR5VHlwZTtcblx0XHRcdFx0XHRicmVhaztcblx0XHRcdFx0Y2FzZSBcIk5hdmlnYXRpb25Qcm9wZXJ0eVwiOlxuXHRcdFx0XHRcdGVudGl0eVR5cGUgPSBwYWdlVGFyZ2V0LnRhcmdldFR5cGU7XG5cdFx0XHRcdFx0YnJlYWs7XG5cdFx0XHR9XG5cblx0XHRcdGlmIChlbnRpdHlUeXBlICE9PSB1bmRlZmluZWQpIHtcblx0XHRcdFx0Zm9yIChjb25zdCBlbnRpdHlQcm9wZXJ0eSBvZiBlbnRpdHlUeXBlLmVudGl0eVByb3BlcnRpZXMpIHtcblx0XHRcdFx0XHRpZiAoXG5cdFx0XHRcdFx0XHQhaXNJbW11dGFibGUoZW50aXR5UHJvcGVydHkpICYmXG5cdFx0XHRcdFx0XHQhaXNDb21wdXRlZChlbnRpdHlQcm9wZXJ0eSkgJiZcblx0XHRcdFx0XHRcdGVudGl0eVByb3BlcnR5LmFubm90YXRpb25zLlVJPy5IaWRkZW4/LnZhbHVlT2YoKSAhPT0gdHJ1ZVxuXHRcdFx0XHRcdCkge1xuXHRcdFx0XHRcdFx0Ly8gSWYgbm90IGltbXV0YWJsZSwgY29tcHV0ZWQgb3IgaGlkZGVuIGFkZCB0byB0aGUgZmllbGQgbWFwcGluZ1xuXHRcdFx0XHRcdFx0ZmllbGRNYXBwaW5nW2VudGl0eVByb3BlcnR5Lm5hbWVdID0ge1xuXHRcdFx0XHRcdFx0XHRkZXNjcmlwdGlvbjogZ2V0TGFiZWwoZW50aXR5UHJvcGVydHkpID8/IGVudGl0eVByb3BlcnR5Lm5hbWUsXG5cdFx0XHRcdFx0XHRcdGRhdGFUeXBlOiBlbnRpdHlQcm9wZXJ0eS50eXBlXG5cdFx0XHRcdFx0XHR9O1xuXHRcdFx0XHRcdH1cblx0XHRcdFx0fVxuXHRcdFx0fVxuXHRcdH1cblx0XHRyZXR1cm4gZmllbGRNYXBwaW5nO1xuXHR9XG5cblx0cHJpdmF0ZSBnZW5lcmF0ZUxpc3RCaW5kaW5nKHBhdGg6IHN0cmluZywgbW9kZWw6IE9EYXRhTW9kZWwpOiBPRGF0YUxpc3RCaW5kaW5nIHtcblx0XHRjb25zdCB0cmFuc2llbnRMaXN0QmluZGluZyA9IG1vZGVsLmJpbmRMaXN0KFxuXHRcdFx0cGF0aCxcblx0XHRcdHVuZGVmaW5lZCxcblxuXHRcdFx0W10sXG5cdFx0XHRbXSxcblx0XHRcdHtcblx0XHRcdFx0JCR1cGRhdGVHcm91cElkOiBcInN1Ym1pdExhdGVyXCJcblx0XHRcdH1cblx0XHQpO1xuXHRcdHRyYW5zaWVudExpc3RCaW5kaW5nLnJlZnJlc2hJbnRlcm5hbCA9ICgpOiB2b2lkID0+IHtcblx0XHRcdC8qICovXG5cdFx0fTtcblx0XHRyZXR1cm4gdHJhbnNpZW50TGlzdEJpbmRpbmc7XG5cdH1cblxuXHRwcml2YXRlIG9uVGh1bWJQcmVzcyh0aHVtYlVwQnV0dG9uOiBUb2dnbGVCdXR0b24sIHRodW1iRG93bkJ1dHRvbjogVG9nZ2xlQnV0dG9uKTogdm9pZCB7XG5cdFx0dGh1bWJVcEJ1dHRvbi5zZXRFbmFibGVkKGZhbHNlKTtcblx0XHR0aHVtYkRvd25CdXR0b24uc2V0RW5hYmxlZChmYWxzZSk7XG5cdFx0TWVzc2FnZVRvYXN0LnNob3codGhpcy5nZXRUcmFuc2xhdGVkVGV4dChcIkNfRUFTWUVESVRfRkVFREJBQ0tfU0VOVFwiKSk7XG5cdH1cblxuXHRmb3JtYXRSZW1haW5pbmdDaGFyYWN0ZXJzKHZhbHVlOiBzdHJpbmcpOiBzdHJpbmcge1xuXHRcdHJldHVybiB0aGlzLmdldFRyYW5zbGF0ZWRUZXh0KFwiQ19FQVNZRURJVF9SRU1BSU5JTkdfQ0hBUkFDVEVSU1wiLCBbTUFYX0xFTkdUSCAtICh2YWx1ZT8ubGVuZ3RoID8/IDApXSk7XG5cdH1cblxuXHRvbkNsZWFyQWxsKCk6IHZvaWQge1xuXHRcdHRoaXMuc3RhdGUubmV3VmFsdWVzID0ge307XG5cdFx0dGhpcy5zdGF0ZS5oYXNWYWx1ZXMgPSBmYWxzZTtcblx0XHR0aGlzLnN0YXRlLmhhc0luY29ycmVjdFZhbHVlcyA9IGZhbHNlO1xuXHRcdHRoaXMuc3RhdGUuZW50ZXJlZFRleHQgPSBcIlwiO1xuXHRcdHRoaXMuc3RhdGUuaGFzRXJyb3IgPSBmYWxzZTtcblx0XHR0aGlzLnN0YXRlLnN0YXRlVHlwZSA9IFwiSW5pdGlhbFwiO1xuXHRcdHRoaXMuc3RhdGUuY3VycmVudGx5RW50ZXJlZFRleHQgPSBcIlwiO1xuXHRcdHRoaXMuc3RhdGUuaW5jb3JyZWN0VmFsdWVzID0ge307XG5cdH1cblxuXHRvblZhbGlkYXRlRmllbGRHcm91cHMoX2U6IENvbnRyb2wkVmFsaWRhdGVGaWVsZEdyb3VwRXZlbnQpOiB2b2lkIHtcblx0XHRjb25zdCBhbGxGaWVsZHMgPSAodGhpcy4kcmV2aWV3QXJlYS5jdXJyZW50Py5nZXRDb250cm9sc0J5RmllbGRHcm91cElkKFwiRWFzeUZpbGxGaWVsZFwiKSBhcyBFbmhhbmNlV2l0aFVJNTxGaWVsZD5bXSkgPz8gW107XG5cdFx0dGhpcy5zdGF0ZS5oYXNFcnJvciA9IGFsbEZpZWxkcy5zb21lKChmaWVsZDogRW5oYW5jZVdpdGhVSTU8RmllbGQ+KTogYm9vbGVhbiA9PiB7XG5cdFx0XHRyZXR1cm4gKFxuXHRcdFx0XHQhIShmaWVsZCBhcyB7IGdldFZhbHVlU3RhdGU/OiBGdW5jdGlvbiB9KS5nZXRWYWx1ZVN0YXRlICYmXG5cdFx0XHRcdChmaWVsZCBhcyB7IGdldFZhbHVlU3RhdGU/OiBGdW5jdGlvbiB9KS5nZXRWYWx1ZVN0YXRlPy4oKSA9PT0gXCJFcnJvclwiXG5cdFx0XHQpO1xuXHRcdH0pO1xuXHR9XG5cblx0YXN5bmMgb25FYXN5RWRpdFByZXNzZWQoKTogUHJvbWlzZTx2b2lkPiB7XG5cdFx0Ly8gQ2FsbCB0aGUgQUkgc2VydmljZVxuXHRcdC8vIFByb2Nlc3MgdGhyb3VnaCBjaGF0IGNvbXBsZXRpb24gQVBJXG5cdFx0Y29uc3QgbWV0YVBhdGggPSB0aGlzLmdldE93bmVyUGFnZURlZmluaXRpb24oKTtcblx0XHRjb25zdCBmaWVsZE1hcHBpbmcgPSB0aGlzLl9nZXRGaWVsZE1hcHBpbmcobWV0YVBhdGgpO1xuXHRcdGNvbnN0IGVhc3lGaWxsTGlicmFyeSA9IGF3YWl0IGltcG9ydChcInV4L2VuZy9maW9yaWFpL3JldXNlL2Vhc3lmaWxsL0Vhc3lGaWxsXCIpO1xuXHRcdGNvbnN0IG9kYXRhTW9kZWwgPSB0aGlzLmdldE1vZGVsKCkgYXMgT0RhdGFNb2RlbDtcblx0XHRjb25zdCB0cmFuc2llbnRMaXN0QmluZGluZyA9IHRoaXMuZ2VuZXJhdGVMaXN0QmluZGluZyhcblx0XHRcdG9kYXRhTW9kZWwuZ2V0TWV0YU1vZGVsKCkuZ2V0TWV0YVBhdGgodGhpcy5nZXRQYWdlQ29udHJvbGxlcigpLmdldFZpZXcoKT8uZ2V0QmluZGluZ0NvbnRleHQoKT8uZ2V0UGF0aCgpKSxcblx0XHRcdHRoaXMuZ2V0TW9kZWwoKSBhcyBPRGF0YU1vZGVsXG5cdFx0KTtcblx0XHR0aGlzLl9iaW5kaW5nQ29udGV4dCA9IHRyYW5zaWVudExpc3RCaW5kaW5nLmNyZWF0ZSh7fSwgdHJ1ZSk7XG5cblx0XHR0aGlzLnN0YXRlLmlzQnVzeSA9IHRydWU7XG5cdFx0dHJ5IHtcblx0XHRcdGNvbnN0IGFpQ2FsbFJlc3VsdCA9IGF3YWl0IGVhc3lGaWxsTGlicmFyeS5leHRyYWN0RmllbGRWYWx1ZXNGcm9tVGV4dCh0aGlzLnN0YXRlLmVudGVyZWRUZXh0LCBmaWVsZE1hcHBpbmcpO1xuXHRcdFx0dGhpcy5zdGF0ZS5pc0J1c3kgPSBmYWxzZTtcblx0XHRcdGlmIChhaUNhbGxSZXN1bHQuc3VjY2Vzcykge1xuXHRcdFx0XHRjb25zdCB1cGRhdGVkRmllbGRzID0gYWlDYWxsUmVzdWx0LmRhdGE7XG5cdFx0XHRcdGlmIChPYmplY3Qua2V5cyh1cGRhdGVkRmllbGRzKS5sZW5ndGggPT09IDApIHtcblx0XHRcdFx0XHR0aGlzLnN0YXRlLmhhc1ZhbHVlcyA9IGZhbHNlO1xuXHRcdFx0XHRcdHRoaXMuc3RhdGUuaGFzSW5jb3JyZWN0VmFsdWVzID0gZmFsc2U7XG5cdFx0XHRcdFx0dGhpcy5zdGF0ZS5zdGF0ZVR5cGUgPSBcIk5vRW50cmllc1wiO1xuXHRcdFx0XHRcdHJldHVybjtcblx0XHRcdFx0fVxuXHRcdFx0XHR0aGlzLnN0YXRlLnN0YXRlVHlwZSA9IFwiSGFzRW50cmllc1wiO1xuXHRcdFx0XHR0aGlzLnN0YXRlLmhhc0Vycm9yID0gZmFsc2U7XG5cdFx0XHRcdGNvbnN0IGVkaXRhYmxlRmllbGRzID0gKGF3YWl0IHRoaXMuZ2V0RWRpdGFibGVGaWVsZHM/LigpKSA/PyB7fTtcblx0XHRcdFx0dGhpcy5zdGF0ZS5oYXNWYWx1ZXMgPSBmYWxzZTtcblx0XHRcdFx0dGhpcy5zdGF0ZS5oYXNJbmNvcnJlY3RWYWx1ZXMgPSBmYWxzZTtcblx0XHRcdFx0dGhpcy4kc2Nyb2xsQ29udGFpbmVyLmN1cnJlbnQ/LmRlc3Ryb3koKTtcblxuXHRcdFx0XHRjb25zdCByZXZpZXdBcmVhRm9ybSA9IChcblx0XHRcdFx0XHQ8Rm9ybSBlZGl0YWJsZT17dHJ1ZX0gY2xhc3M9e1wic2FwVWlTbWFsbE1hcmdpblRvcEJvdHRvbVwifSB2aXNpYmxlPXt0aGlzLmJpbmRTdGF0ZShcImhhc1ZhbHVlc1wiKX0+XG5cdFx0XHRcdFx0XHR7e1xuXHRcdFx0XHRcdFx0XHRsYXlvdXQ6IDxDb2x1bW5MYXlvdXQgY29sdW1uc009ezJ9IGNvbHVtbnNMPXsyfSBjb2x1bW5zWEw9ezJ9IGxhYmVsQ2VsbHNMYXJnZT17MX0gZW1wdHlDZWxsc0xhcmdlPXsxfSAvPlxuXHRcdFx0XHRcdFx0fX1cblx0XHRcdFx0XHQ8L0Zvcm0+XG5cdFx0XHRcdCkgYXMgRm9ybTtcblx0XHRcdFx0Y29uc3QgaW5jb3JyZWN0VmFsdWVzRm9ybSA9IChcblx0XHRcdFx0XHQ8Rm9ybSBlZGl0YWJsZT17ZmFsc2V9IGNsYXNzPXtcInNhcFVpU21hbGxNYXJnaW5Ub3BCb3R0b21cIn0gdmlzaWJsZT17dGhpcy5iaW5kU3RhdGUoXCJoYXNJbmNvcnJlY3RWYWx1ZXNcIil9PlxuXHRcdFx0XHRcdFx0e3tcblx0XHRcdFx0XHRcdFx0bGF5b3V0OiA8Q29sdW1uTGF5b3V0IGNvbHVtbnNNPXsyfSBjb2x1bW5zTD17Mn0gY29sdW1uc1hMPXsyfSBsYWJlbENlbGxzTGFyZ2U9ezF9IGVtcHR5Q2VsbHNMYXJnZT17MX0gLz5cblx0XHRcdFx0XHRcdH19XG5cdFx0XHRcdFx0PC9Gb3JtPlxuXHRcdFx0XHQpO1xuXHRcdFx0XHRjb25zdCB3YXJuaW5nTWVzc2FnZSA9IChcblx0XHRcdFx0XHQ8TWVzc2FnZVN0cmlwXG5cdFx0XHRcdFx0XHR0ZXh0PXt0aGlzLmdldFRyYW5zbGF0ZWRUZXh0KFwiQ19FQVNZRURJVF9ESUFMT0dfV0FSTklOR19NU0dcIil9XG5cdFx0XHRcdFx0XHR0eXBlPXtcIldhcm5pbmdcIn1cblx0XHRcdFx0XHRcdHNob3dJY29uPXt0cnVlfVxuXHRcdFx0XHRcdFx0dmlzaWJsZT17dGhpcy5iaW5kU3RhdGUoXCJoYXNJbmNvcnJlY3RWYWx1ZXNcIil9XG5cdFx0XHRcdFx0PjwvTWVzc2FnZVN0cmlwPlxuXHRcdFx0XHQpO1xuXHRcdFx0XHRjb25zdCB0aHVtYlVwQnV0dG9uID0gKFxuXHRcdFx0XHRcdDxUb2dnbGVCdXR0b25cblx0XHRcdFx0XHRcdGljb249e1wic2FwLWljb246Ly90aHVtYi11cFwifVxuXHRcdFx0XHRcdFx0dG9vbHRpcD17dGhpcy5nZXRUcmFuc2xhdGVkVGV4dChcIkNfRUFTWUVESVRfVEhVTUJTX1VQXCIpfVxuXHRcdFx0XHRcdFx0dHlwZT17XCJUcmFuc3BhcmVudFwifVxuXHRcdFx0XHRcdFx0cHJlc3M9eygpOiB2b2lkID0+IHtcblx0XHRcdFx0XHRcdFx0cmV0dXJuIHRoaXMub25UaHVtYlByZXNzKHRodW1iVXBCdXR0b24sIHRodW1iRG93bkJ1dHRvbik7XG5cdFx0XHRcdFx0XHR9fVxuXHRcdFx0XHRcdC8+XG5cdFx0XHRcdCk7XG5cdFx0XHRcdEZFU1JIZWxwZXIuc2V0U2VtYW50aWNTdGVwbmFtZSh0aHVtYlVwQnV0dG9uLCBcInByZXNzXCIsIFwiZmU0OmVmOnRodW1iVXBcIik7XG5cdFx0XHRcdGNvbnN0IHRodW1iRG93bkJ1dHRvbiA9IChcblx0XHRcdFx0XHQ8VG9nZ2xlQnV0dG9uXG5cdFx0XHRcdFx0XHRpY29uPXtcInNhcC1pY29uOi8vdGh1bWItZG93blwifVxuXHRcdFx0XHRcdFx0dG9vbHRpcD17dGhpcy5nZXRUcmFuc2xhdGVkVGV4dChcIkNfRUFTWUVESVRfVEhVTUJTX0RPV05cIil9XG5cdFx0XHRcdFx0XHR0eXBlPXtcIlRyYW5zcGFyZW50XCJ9XG5cdFx0XHRcdFx0XHRwcmVzcz17KCk6IHZvaWQgPT4ge1xuXHRcdFx0XHRcdFx0XHRyZXR1cm4gdGhpcy5vblRodW1iUHJlc3ModGh1bWJVcEJ1dHRvbiwgdGh1bWJEb3duQnV0dG9uKTtcblx0XHRcdFx0XHRcdH19XG5cdFx0XHRcdFx0Lz5cblx0XHRcdFx0KTtcblx0XHRcdFx0RkVTUkhlbHBlci5zZXRTZW1hbnRpY1N0ZXBuYW1lKHRodW1iRG93bkJ1dHRvbiwgXCJwcmVzc1wiLCBcImZlNDplZjp0aHVtYkRvd25cIik7XG5cdFx0XHRcdGNvbnN0IGFpTm90aWNlVGV4dCA9IChcblx0XHRcdFx0XHQ8SEJveCBhbGlnbkl0ZW1zPXtcIkNlbnRlclwifT5cblx0XHRcdFx0XHRcdDxBSUxpbmtOb3RpY2UgLz5cblx0XHRcdFx0XHRcdDxUZXh0IHRleHQ9e3RoaXMuZ2V0VHJhbnNsYXRlZFRleHQoXCJDX0VBU1lFRElUX0FJX05PVElDRV9URVhUXCIpfSBjbGFzcz17XCJzYXBVaVRpbnlNYXJnaW5CZWdpblwifSAvPlxuXHRcdFx0XHRcdFx0e3RodW1iVXBCdXR0b259LCB7dGh1bWJEb3duQnV0dG9ufVxuXHRcdFx0XHRcdDwvSEJveD5cblx0XHRcdFx0KTtcblx0XHRcdFx0Y29uc3QgcHJldmlvdXNWYWx1ZXNGb3JtQ29udGFpbmVyID0gKFxuXHRcdFx0XHRcdDxGb3JtQ29udGFpbmVyPnt7IHRpdGxlOiA8Q29yZVRpdGxlIHRleHQ9e3RoaXMuZ2V0VHJhbnNsYXRlZFRleHQoXCJDX0VBU1lFRElUX1BSRVZJT1VTX1ZBTFVFU1wiKX0gLz4gfX08L0Zvcm1Db250YWluZXI+XG5cdFx0XHRcdCkgYXMgRm9ybUNvbnRhaW5lcjtcblx0XHRcdFx0Y29uc3QgcHJldmlvdXNWYWx1ZXNGb3JtQ29udGFpbmVyMiA9IChcblx0XHRcdFx0XHQ8Rm9ybUNvbnRhaW5lcj57eyB0aXRsZTogPENvcmVUaXRsZSB0ZXh0PXt0aGlzLmdldFRyYW5zbGF0ZWRUZXh0KFwiQ19FQVNZRURJVF9QUkVWSU9VU19WQUxVRVNcIil9IC8+IH19PC9Gb3JtQ29udGFpbmVyPlxuXHRcdFx0XHQpIGFzIEZvcm1Db250YWluZXI7XG5cdFx0XHRcdGNvbnN0IG5ld1ZhbHVlc0Zvcm1Db250YWluZXIgPSAoXG5cdFx0XHRcdFx0PEZvcm1Db250YWluZXI+e3sgdGl0bGU6IDxDb3JlVGl0bGUgdGV4dD17dGhpcy5nZXRUcmFuc2xhdGVkVGV4dChcIkNfRUFTWUVESVRfTkVXX1ZBTFVFU1wiKX0gLz4gfX08L0Zvcm1Db250YWluZXI+XG5cdFx0XHRcdCkgYXMgRm9ybUNvbnRhaW5lcjtcblx0XHRcdFx0Y29uc3QgbmV3VmFsdWVzRm9ybUNvbnRhaW5lcjIgPSAoXG5cdFx0XHRcdFx0PEZvcm1Db250YWluZXI+e3sgdGl0bGU6IDxDb3JlVGl0bGUgdGV4dD17dGhpcy5nZXRUcmFuc2xhdGVkVGV4dChcIkNfRUFTWUVESVRfTkVXX1ZBTFVFU1wiKX0gLz4gfX08L0Zvcm1Db250YWluZXI+XG5cdFx0XHRcdCkgYXMgRm9ybUNvbnRhaW5lcjtcblx0XHRcdFx0Y29uc3QgdWlDb250ZXh0ID0gdGhpcy5nZXRQYWdlQ29udHJvbGxlcigpLmdldE1vZGVsKFwidWlcIik/LmNyZWF0ZUJpbmRpbmdDb250ZXh0KFwiL2Vhc3lFZGl0RGlhbG9nXCIpO1xuXG5cdFx0XHRcdHRoaXMuZ2V0UGFnZUNvbnRyb2xsZXIoKS5nZXRNb2RlbChcInVpXCIpLnNldFByb3BlcnR5KFwiL2Vhc3lFZGl0RGlhbG9nXCIsIHt9KTtcblx0XHRcdFx0dWlDb250ZXh0LnNldFByb3BlcnR5KFwiaXNFZGl0YWJsZVwiLCB0cnVlKTtcblx0XHRcdFx0bmV3VmFsdWVzRm9ybUNvbnRhaW5lci5zZXRCaW5kaW5nQ29udGV4dCh1aUNvbnRleHQsIFwidWlcIik7XG5cblx0XHRcdFx0cmV2aWV3QXJlYUZvcm0uYWRkRm9ybUNvbnRhaW5lcihwcmV2aW91c1ZhbHVlc0Zvcm1Db250YWluZXIpO1xuXHRcdFx0XHRyZXZpZXdBcmVhRm9ybS5hZGRGb3JtQ29udGFpbmVyKG5ld1ZhbHVlc0Zvcm1Db250YWluZXIpO1xuXHRcdFx0XHRpbmNvcnJlY3RWYWx1ZXNGb3JtLmFkZEZvcm1Db250YWluZXIocHJldmlvdXNWYWx1ZXNGb3JtQ29udGFpbmVyMik7XG5cdFx0XHRcdGluY29ycmVjdFZhbHVlc0Zvcm0uYWRkRm9ybUNvbnRhaW5lcihuZXdWYWx1ZXNGb3JtQ29udGFpbmVyMik7XG5cdFx0XHRcdGNvbnN0IG5ld1ZhbHVlczogUmVjb3JkPHN0cmluZywgdW5rbm93bj4gPSB7fTtcblx0XHRcdFx0Y29uc3QgaW5jb3JyZWN0VmFsdWVzOiBSZWNvcmQ8c3RyaW5nLCB1bmtub3duPiA9IHt9O1xuXHRcdFx0XHRuZXdWYWx1ZXNGb3JtQ29udGFpbmVyLnNldEJpbmRpbmdDb250ZXh0KHRoaXMuX2JpbmRpbmdDb250ZXh0KTtcblx0XHRcdFx0bmV3VmFsdWVzRm9ybUNvbnRhaW5lcjIuc2V0QmluZGluZ0NvbnRleHQodGhpcy5nZXRNb2RlbChcIiRjb21wb25lbnRTdGF0ZVwiKT8uY3JlYXRlQmluZGluZ0NvbnRleHQoXCIvaW5jb3JyZWN0VmFsdWVzXCIpKTtcblx0XHRcdFx0bmV3VmFsdWVzRm9ybUNvbnRhaW5lcjIuc2V0TW9kZWwodGhpcy5nZXRNb2RlbChcIiRjb21wb25lbnRTdGF0ZVwiKSk7XG5cblx0XHRcdFx0Y29uc3QgJHZCb3ggPSBjcmVhdGVSZWZlcmVuY2U8VkJveD4oKTtcblx0XHRcdFx0dGhpcy4kcmV2aWV3QXJlYS5jdXJyZW50Py5hZGRJdGVtKFxuXHRcdFx0XHRcdDxTY3JvbGxDb250YWluZXIgcmVmPXt0aGlzLiRzY3JvbGxDb250YWluZXJ9IHZlcnRpY2FsPXt0cnVlfSBjbGFzcz17XCJzYXBVaUNvbnRlbnRQYWRkaW5nXCJ9PlxuXHRcdFx0XHRcdFx0e3tcblx0XHRcdFx0XHRcdFx0Y29udGVudDogKFxuXHRcdFx0XHRcdFx0XHRcdDxWQm94IHJlZj17JHZCb3h9PlxuXHRcdFx0XHRcdFx0XHRcdFx0e3tcblx0XHRcdFx0XHRcdFx0XHRcdFx0aXRlbXM6IFtcblx0XHRcdFx0XHRcdFx0XHRcdFx0XHQ8SEJveCBqdXN0aWZ5Q29udGVudD17XCJTcGFjZUJldHdlZW5cIn0gYWxpZ25JdGVtcz17XCJDZW50ZXJcIn0+XG5cdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHQ8SEJveD5cblx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0PFRpdGxlXG5cdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0dGV4dD17dGhpcy5nZXRUcmFuc2xhdGVkVGV4dChcIkNfRUFTWUVESVRfRklMTEVEX0ZJRUxEU1wiKX1cblx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHR2aXNpYmxlPXt0aGlzLmJpbmRTdGF0ZShcImhhc1ZhbHVlc1wiKX1cblx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0Lz5cblx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdDwvSEJveD5cblx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdCxcblx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdDxIQm94PlxuXHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHR7eyBsYXlvdXREYXRhOiA8RmxleEl0ZW1EYXRhIGFsaWduU2VsZj1cIkVuZFwiIC8+IH19XG5cdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdHthaU5vdGljZVRleHR9XG5cdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHQ8L0hCb3g+XG5cdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHQsXG5cdFx0XHRcdFx0XHRcdFx0XHRcdFx0PC9IQm94Pixcblx0XHRcdFx0XHRcdFx0XHRcdFx0XHRyZXZpZXdBcmVhRm9ybSxcblx0XHRcdFx0XHRcdFx0XHRcdFx0XHQ8VGl0bGVcblx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdHRleHQ9e3RoaXMuZ2V0VHJhbnNsYXRlZFRleHQoXCJDX0VBU1lFRElUX0lOQ09SUkVDVF9GSUVMRFNcIil9XG5cdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRjbGFzcz17XCJzYXBVaVNtYWxsTWFyZ2luVG9wQm90dG9tXCJ9XG5cdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHR2aXNpYmxlPXt0aGlzLmJpbmRTdGF0ZShcImhhc0luY29ycmVjdFZhbHVlc1wiKX1cblx0XHRcdFx0XHRcdFx0XHRcdFx0XHQvPixcblx0XHRcdFx0XHRcdFx0XHRcdFx0XHR3YXJuaW5nTWVzc2FnZSxcblx0XHRcdFx0XHRcdFx0XHRcdFx0XHRpbmNvcnJlY3RWYWx1ZXNGb3JtXG5cdFx0XHRcdFx0XHRcdFx0XHRcdF1cblx0XHRcdFx0XHRcdFx0XHRcdH19XG5cdFx0XHRcdFx0XHRcdFx0PC9WQm94PlxuXHRcdFx0XHRcdFx0XHQpXG5cdFx0XHRcdFx0XHR9fVxuXHRcdFx0XHRcdDwvU2Nyb2xsQ29udGFpbmVyPlxuXHRcdFx0XHQpO1xuXG5cdFx0XHRcdGZvciAoY29uc3QgdXBkYXRlZEZpZWxkIGluIHVwZGF0ZWRGaWVsZHMpIHtcblx0XHRcdFx0XHRpZiAoZWRpdGFibGVGaWVsZHNbdXBkYXRlZEZpZWxkXSAmJiBlZGl0YWJsZUZpZWxkc1t1cGRhdGVkRmllbGRdLmlzRWRpdGFibGUgPT09IHRydWUpIHtcblx0XHRcdFx0XHRcdHRoaXMuc3RhdGUuaGFzVmFsdWVzID0gdHJ1ZTtcblx0XHRcdFx0XHRcdHByZXZpb3VzVmFsdWVzRm9ybUNvbnRhaW5lci5hZGRGb3JtRWxlbWVudChcblx0XHRcdFx0XHRcdFx0PEZvcm1FbGVtZW50IGxhYmVsPXtmaWVsZE1hcHBpbmdbdXBkYXRlZEZpZWxkXS5kZXNjcmlwdGlvbn0+XG5cdFx0XHRcdFx0XHRcdFx0PEZpZWxkXG5cdFx0XHRcdFx0XHRcdFx0XHRtZXRhUGF0aD17dXBkYXRlZEZpZWxkfVxuXHRcdFx0XHRcdFx0XHRcdFx0Y29udGV4dFBhdGg9e3RoaXMuZ2V0T3duZXJDb250ZXh0UGF0aCgpfVxuXHRcdFx0XHRcdFx0XHRcdFx0cmVhZE9ubHk9e3RydWV9XG5cdFx0XHRcdFx0XHRcdFx0XHRyZXF1aXJlZD17ZmFsc2V9XG5cdFx0XHRcdFx0XHRcdFx0XHR2aXNpYmxlPXt0cnVlfVxuXHRcdFx0XHRcdFx0XHRcdC8+XG5cdFx0XHRcdFx0XHRcdDwvRm9ybUVsZW1lbnQ+XG5cdFx0XHRcdFx0XHQpO1xuXG5cdFx0XHRcdFx0XHRjb25zdCBuZXdGaWVsZCA9IHRoaXMuX2dldE93bmVyKCk/LnJ1bkFzT3duZXIoKCkgPT4ge1xuXHRcdFx0XHRcdFx0XHRyZXR1cm4gKFxuXHRcdFx0XHRcdFx0XHRcdDxGaWVsZFxuXHRcdFx0XHRcdFx0XHRcdFx0X3JlcXVpcmVzVmFsaWRhdGlvbj17dHJ1ZX1cblx0XHRcdFx0XHRcdFx0XHRcdHZhbGlkYXRlRmllbGRHcm91cD17dGhpcy5vblZhbGlkYXRlRmllbGRHcm91cHMuYmluZCh0aGlzKX1cblx0XHRcdFx0XHRcdFx0XHRcdGZpZWxkR3JvdXBJZHM9e1wiRWFzeUZpbGxGaWVsZFwifVxuXHRcdFx0XHRcdFx0XHRcdFx0bWV0YVBhdGg9e3VwZGF0ZWRGaWVsZH1cblx0XHRcdFx0XHRcdFx0XHRcdGNvbnRleHRQYXRoPXt0aGlzLmdldE93bmVyQ29udGV4dFBhdGgoKX1cblx0XHRcdFx0XHRcdFx0XHQvPlxuXHRcdFx0XHRcdFx0XHQpIGFzIEZpZWxkO1xuXHRcdFx0XHRcdFx0fSkgYXMgRW5oYW5jZVdpdGhVSTU8RmllbGQ+O1xuXHRcdFx0XHRcdFx0bmV3VmFsdWVzRm9ybUNvbnRhaW5lci5hZGRGb3JtRWxlbWVudChcblx0XHRcdFx0XHRcdFx0PEZvcm1FbGVtZW50IGxhYmVsPXtmaWVsZE1hcHBpbmdbdXBkYXRlZEZpZWxkXS5kZXNjcmlwdGlvbn0+e3sgZmllbGRzOiBuZXdGaWVsZCB9fTwvRm9ybUVsZW1lbnQ+XG5cdFx0XHRcdFx0XHQpO1xuXHRcdFx0XHRcdFx0Y29uc3QgbWV0YU1vZGVsID0gdGhpcy5nZXRNZXRhTW9kZWwoKSE7XG5cdFx0XHRcdFx0XHRjb25zdCB0YXJnZXRNZXRhUGF0aCA9IG1ldGFNb2RlbC5nZXRNZXRhUGF0aCh0aGlzLl9iaW5kaW5nQ29udGV4dC5nZXRQYXRoKHVwZGF0ZWRGaWVsZCkpO1xuXHRcdFx0XHRcdFx0Y29uc3QgbWV0YU1vZGVsT2JqID0gbWV0YU1vZGVsLmdldE9iamVjdCh0YXJnZXRNZXRhUGF0aCk7XG5cdFx0XHRcdFx0XHRjb25zdCB2YWx1ZUV4cHJlc3Npb24gPSBBbm5vdGF0aW9uSGVscGVyLmZvcm1hdChtZXRhTW9kZWxPYmosIHtcblx0XHRcdFx0XHRcdFx0Y29udGV4dDogbWV0YU1vZGVsLmNyZWF0ZUJpbmRpbmdDb250ZXh0KHRhcmdldE1ldGFQYXRoKSFcblx0XHRcdFx0XHRcdH0pO1xuXHRcdFx0XHRcdFx0Y29uc3QgcGFyc2VkQmluZGluZyA9IEJpbmRpbmdJbmZvLnBhcnNlKHZhbHVlRXhwcmVzc2lvbik7XG5cdFx0XHRcdFx0XHRpZiAocGFyc2VkQmluZGluZyAmJiBwYXJzZWRCaW5kaW5nLnR5cGUpIHtcblx0XHRcdFx0XHRcdFx0dHJ5IHtcblx0XHRcdFx0XHRcdFx0XHRwYXJzZWRCaW5kaW5nLnR5cGUudmFsaWRhdGVWYWx1ZSh1cGRhdGVkRmllbGRzW3VwZGF0ZWRGaWVsZF0pO1xuXHRcdFx0XHRcdFx0XHR9IGNhdGNoIChlKSB7XG5cdFx0XHRcdFx0XHRcdFx0dGhpcy5zdGF0ZS5oYXNFcnJvciA9IHRydWU7XG5cdFx0XHRcdFx0XHRcdH1cblx0XHRcdFx0XHRcdH1cblxuXHRcdFx0XHRcdFx0Ly8gRmV0Y2ggdGhlIHZhbHVlIGxpc3QgZm9yIHRoZSBnaXZlbiBwcm9wZXJ0eSBwYXRoXG5cdFx0XHRcdFx0XHRjb25zdCB2YWx1ZUxpc3QgPSBhd2FpdCB0aGlzLl9nZXRWYWx1ZUxpc3QodGFyZ2V0TWV0YVBhdGgpO1xuXG5cdFx0XHRcdFx0XHQvLyBJbml0aWFsaXplIGEgZmxhZyB0byB0cmFjayB2YWxpZGF0aW9uIGVycm9yc1xuXHRcdFx0XHRcdFx0bGV0IGhhc1ZIRXJyb3IgPSBmYWxzZTtcblxuXHRcdFx0XHRcdFx0Ly8gQ2hlY2sgaWYgdGhlIHZhbHVlIGxpc3QgaXMgc2VhcmNoYWJsZSBhbmQgdmFsaWRhdGUgdGhlIHVwZGF0ZWQgZmllbGQgdmFsdWVzXG5cdFx0XHRcdFx0XHRpZiAodmFsdWVMaXN0ICYmIFZhbHVlTGlzdEhlbHBlci5pc1ZhbHVlTGlzdFNlYXJjaGFibGUodGFyZ2V0TWV0YVBhdGgsIHZhbHVlTGlzdCkpIHtcblx0XHRcdFx0XHRcdFx0Y29uc3QgdmFsdWVzID0gYXdhaXQgcmVzb2x2ZVRva2VuVmFsdWUodmFsdWVMaXN0LCB7XG5cdFx0XHRcdFx0XHRcdFx0b3BlcmF0b3I6IEZpbHRlck9wZXJhdG9yLkVRLFxuXHRcdFx0XHRcdFx0XHRcdHNlbGVjdGVkVmFsdWVzOiBbdXBkYXRlZEZpZWxkc1t1cGRhdGVkRmllbGRdIGFzIHN0cmluZ11cblx0XHRcdFx0XHRcdFx0fSk7XG5cblx0XHRcdFx0XHRcdFx0Ly8gVXBkYXRlIHRoZSBmaWVsZCB2YWx1ZSBpZiBpdCBkaWZmZXJzIGZyb20gdGhlIHJlc29sdmVkIHZhbHVlXG5cdFx0XHRcdFx0XHRcdGlmICghdmFsdWVzWzBdLm5vTWF0Y2gpIHtcblx0XHRcdFx0XHRcdFx0XHR1cGRhdGVkRmllbGRzW3VwZGF0ZWRGaWVsZF0gPSB2YWx1ZXNbMF0uc2VsZWN0ZWRWYWx1ZXNbMF0udmFsdWU7XG5cdFx0XHRcdFx0XHRcdH0gZWxzZSB7XG5cdFx0XHRcdFx0XHRcdFx0dGhpcy5zdGF0ZS5oYXNFcnJvciA9IHRydWU7XG5cdFx0XHRcdFx0XHRcdFx0aGFzVkhFcnJvciA9IHRydWU7XG5cdFx0XHRcdFx0XHRcdH1cblx0XHRcdFx0XHRcdH1cblxuXHRcdFx0XHRcdFx0Ly8gVXNlIGEgdGltZW91dCB0byBlbnN1cmUgdmFsaWRhdGlvbiBydW5zIGNvcnJlY3RseSBmb3IgdGhlIHVwZGF0ZWQgZmllbGRcblx0XHRcdFx0XHRcdHNldFRpbWVvdXQoKCk6IHZvaWQgPT4ge1xuXHRcdFx0XHRcdFx0XHRpZiAoaGFzVkhFcnJvcikge1xuXHRcdFx0XHRcdFx0XHRcdC8vIFVwZGF0ZSB0aGUgaW5uZXIgVkggY29udGVudCBmb3IgdmFsaWRhdGlvblxuXHRcdFx0XHRcdFx0XHRcdChcblx0XHRcdFx0XHRcdFx0XHRcdChcblx0XHRcdFx0XHRcdFx0XHRcdFx0KFxuXHRcdFx0XHRcdFx0XHRcdFx0XHRcdChuZXdGaWVsZC5nZXRDb250ZW50KCkgYXMgRW5oYW5jZVdpdGhVSTU8RmllbGRXcmFwcGVyPikuZ2V0Q29udGVudEVkaXQoKT8uWzBdIGFzIE1EQ0ZpZWxkXG5cdFx0XHRcdFx0XHRcdFx0XHRcdCkuZ2V0QWdncmVnYXRpb24oXCJfY29udGVudFwiKSBhcyBNYW5hZ2VkT2JqZWN0W11cblx0XHRcdFx0XHRcdFx0XHRcdCk/LlswXSBhcyBJbnB1dFxuXHRcdFx0XHRcdFx0XHRcdCkuc2V0VmFsdWUodXBkYXRlZEZpZWxkc1t1cGRhdGVkRmllbGRdIGFzIHN0cmluZyk7XG5cdFx0XHRcdFx0XHRcdH0gZWxzZSB7XG5cdFx0XHRcdFx0XHRcdFx0bmV3RmllbGQuc2V0VmFsdWUodXBkYXRlZEZpZWxkc1t1cGRhdGVkRmllbGRdIGFzIHN0cmluZyk7XG5cdFx0XHRcdFx0XHRcdH1cblx0XHRcdFx0XHRcdH0sIDIwMCk7XG5cdFx0XHRcdFx0fSBlbHNlIHtcblx0XHRcdFx0XHRcdGluY29ycmVjdFZhbHVlc1t1cGRhdGVkRmllbGRdID0gdXBkYXRlZEZpZWxkc1t1cGRhdGVkRmllbGRdO1xuXHRcdFx0XHRcdFx0dGhpcy5zdGF0ZS5oYXNJbmNvcnJlY3RWYWx1ZXMgPSB0cnVlO1xuXHRcdFx0XHRcdFx0cHJldmlvdXNWYWx1ZXNGb3JtQ29udGFpbmVyMi5hZGRGb3JtRWxlbWVudChcblx0XHRcdFx0XHRcdFx0PEZvcm1FbGVtZW50IGxhYmVsPXtmaWVsZE1hcHBpbmdbdXBkYXRlZEZpZWxkXT8uZGVzY3JpcHRpb24gPz8gdXBkYXRlZEZpZWxkfT5cblx0XHRcdFx0XHRcdFx0XHQ8RmllbGRcblx0XHRcdFx0XHRcdFx0XHRcdG1ldGFQYXRoPXt1cGRhdGVkRmllbGR9XG5cdFx0XHRcdFx0XHRcdFx0XHRjb250ZXh0UGF0aD17dGhpcy5nZXRPd25lckNvbnRleHRQYXRoKCl9XG5cdFx0XHRcdFx0XHRcdFx0XHRyZWFkT25seT17dHJ1ZX1cblx0XHRcdFx0XHRcdFx0XHRcdHJlcXVpcmVkPXtmYWxzZX1cblx0XHRcdFx0XHRcdFx0XHRcdHZpc2libGU9e3RydWV9XG5cdFx0XHRcdFx0XHRcdFx0Lz5cblx0XHRcdFx0XHRcdFx0PC9Gb3JtRWxlbWVudD5cblx0XHRcdFx0XHRcdCk7XG5cdFx0XHRcdFx0XHRuZXdWYWx1ZXNGb3JtQ29udGFpbmVyMi5hZGRGb3JtRWxlbWVudChcblx0XHRcdFx0XHRcdFx0PEZvcm1FbGVtZW50IGxhYmVsPXtmaWVsZE1hcHBpbmdbdXBkYXRlZEZpZWxkXT8uZGVzY3JpcHRpb24gPz8gdXBkYXRlZEZpZWxkfT5cblx0XHRcdFx0XHRcdFx0XHQ8RmllbGQgbWV0YVBhdGg9e3VwZGF0ZWRGaWVsZH0gY29udGV4dFBhdGg9e3RoaXMuZ2V0T3duZXJDb250ZXh0UGF0aCgpfSByZWFkT25seT17dHJ1ZX0gLz5cblx0XHRcdFx0XHRcdFx0PC9Gb3JtRWxlbWVudD5cblx0XHRcdFx0XHRcdCk7XG5cdFx0XHRcdFx0fVxuXHRcdFx0XHR9XG5cblx0XHRcdFx0JHZCb3guY3VycmVudD8uc2V0QmluZGluZ0NvbnRleHQodGhpcy5nZXRQYWdlQ29udHJvbGxlcigpLmdldFZpZXcoKT8uZ2V0QmluZGluZ0NvbnRleHQoKSk7XG5cdFx0XHRcdCR2Qm94LmN1cnJlbnQ/LnNldE1vZGVsKHRoaXMuZ2V0UGFnZUNvbnRyb2xsZXIoKS5nZXRNb2RlbCgpKTtcblx0XHRcdFx0JHZCb3guY3VycmVudD8uc2V0TW9kZWwodGhpcy5nZXRQYWdlQ29udHJvbGxlcigpLmdldE1vZGVsKFwidWlcIiksIFwidWlcIik7XG5cblx0XHRcdFx0dGhpcy5zdGF0ZS5uZXdWYWx1ZXMgPSBuZXdWYWx1ZXM7XG5cdFx0XHRcdHRoaXMuc3RhdGUuaW5jb3JyZWN0VmFsdWVzID0gaW5jb3JyZWN0VmFsdWVzO1xuXHRcdFx0fSBlbHNlIHtcblx0XHRcdFx0dGhpcy5zdGF0ZS5oYXNWYWx1ZXMgPSBmYWxzZTtcblx0XHRcdFx0dGhpcy5zdGF0ZS5oYXNJbmNvcnJlY3RWYWx1ZXMgPSBmYWxzZTtcblx0XHRcdFx0dGhpcy5zdGF0ZS5zdGF0ZVR5cGUgPSBcIkVycm9yXCI7XG5cdFx0XHRcdHRoaXMuc3RhdGUubmV3VmFsdWVzID0ge307XG5cdFx0XHRcdHRoaXMuc3RhdGUuaW5jb3JyZWN0VmFsdWVzID0ge307XG5cdFx0XHR9XG5cdFx0fSBjYXRjaCAoZSkge1xuXHRcdFx0dGhpcy5zdGF0ZS5pc0J1c3kgPSBmYWxzZTtcblx0XHRcdHRoaXMuc3RhdGUuaGFzVmFsdWVzID0gZmFsc2U7XG5cdFx0XHR0aGlzLnN0YXRlLmhhc0luY29ycmVjdFZhbHVlcyA9IGZhbHNlO1xuXHRcdFx0dGhpcy5zdGF0ZS5zdGF0ZVR5cGUgPSBcIkVycm9yXCI7XG5cdFx0XHR0aGlzLnN0YXRlLm5ld1ZhbHVlcyA9IHt9O1xuXHRcdFx0dGhpcy5zdGF0ZS5pbmNvcnJlY3RWYWx1ZXMgPSB7fTtcblx0XHR9XG5cdH1cblxuXHRjcmVhdGVDb250ZW50KCk6IERpYWxvZyB7XG5cdFx0Y29uc3QgZWFzeUVkaXREZXNjcmlwdGlvbiA9IDxJbnZpc2libGVUZXh0IHRleHQ9e3RoaXMuZ2V0VHJhbnNsYXRlZFRleHQoXCJDX0VBU1lFRElUX0RJQUxPR19ERVNDUklQVElPTlwiKX0gLz47XG5cblx0XHRjb25zdCAkZWFzeUZpbGxCdXR0b24gPSBjcmVhdGVSZWZlcmVuY2U8QnV0dG9uPigpO1xuXHRcdGNvbnN0ICRlYXN5RmlsbFNhdmVCdXR0b24gPSBjcmVhdGVSZWZlcmVuY2U8QnV0dG9uPigpO1xuXHRcdGNvbnN0ICRlYXN5RmlsbENhbmNlbEJ1dHRvbiA9IGNyZWF0ZVJlZmVyZW5jZTxCdXR0b24+KCk7XG5cdFx0Y29uc3QgJGVhc3lGaWxsQ2xlYXJBbGxCdXR0b24gPSBjcmVhdGVSZWZlcmVuY2U8QnV0dG9uPigpO1xuXHRcdGNvbnN0IGRpYWxvZyA9IChcblx0XHRcdDxEaWFsb2dcblx0XHRcdFx0dGl0bGU9e3RoaXMuZ2V0VHJhbnNsYXRlZFRleHQoXCJDX0VBU1lFRElUX0RJQUxPR19USVRMRVwiKX1cblx0XHRcdFx0cmVzaXphYmxlPXt0cnVlfVxuXHRcdFx0XHRob3Jpem9udGFsU2Nyb2xsaW5nPXtmYWxzZX1cblx0XHRcdFx0dmVydGljYWxTY3JvbGxpbmc9e2ZhbHNlfVxuXHRcdFx0XHRjb250ZW50V2lkdGg9XCIxMTAwcHhcIlxuXHRcdFx0XHRjb250ZW50SGVpZ2h0PXtcIjgwMHB4XCJ9XG5cdFx0XHRcdGVzY2FwZUhhbmRsZXI9eygpOiB2b2lkID0+IHtcblx0XHRcdFx0XHR0aGlzLm9uQ2FuY2VsKCk7XG5cdFx0XHRcdH19XG5cdFx0XHRcdGFmdGVyQ2xvc2U9eygpOiB2b2lkID0+IHtcblx0XHRcdFx0XHR0aGlzLmRlc3Ryb3koKTtcblx0XHRcdFx0fX1cblx0XHRcdD5cblx0XHRcdFx0e3tcblx0XHRcdFx0XHRjb250ZW50OiAoXG5cdFx0XHRcdFx0XHQ8RmxleEJveCBkaXJlY3Rpb249e0ZsZXhEaXJlY3Rpb24uUm93fSByZW5kZXJUeXBlPXtcIkJhcmVcIn0gd2lkdGg9e1wiMTAwJVwifSBoZWlnaHQ9e1wiMTAwJVwifT5cblx0XHRcdFx0XHRcdFx0PEZsZXhCb3hcblx0XHRcdFx0XHRcdFx0XHR3aWR0aD17XCI0MCVcIn1cblx0XHRcdFx0XHRcdFx0XHRpZD17dGhpcy5jcmVhdGVJZChcImlucHV0QXJlYVwiKX1cblx0XHRcdFx0XHRcdFx0XHRkaXJlY3Rpb249e0ZsZXhEaXJlY3Rpb24uQ29sdW1ufVxuXHRcdFx0XHRcdFx0XHRcdGNsYXNzPXtcInNhcFVpQ29udGVudFBhZGRpbmdcIn1cblx0XHRcdFx0XHRcdFx0XHRyZW5kZXJUeXBlPXtcIkJhcmVcIn1cblx0XHRcdFx0XHRcdFx0PlxuXHRcdFx0XHRcdFx0XHRcdDxGb3JtYXR0ZWRUZXh0XG5cdFx0XHRcdFx0XHRcdFx0XHRodG1sVGV4dD17dGhpcy5nZXRUcmFuc2xhdGVkVGV4dChcIkNfRUFTWUVESVRfRElBTE9HX0RFU0NSSVBUSU9OXCIpfVxuXHRcdFx0XHRcdFx0XHRcdFx0Y2xhc3M9e1wic2FwVWlUaW55TWFyZ2luQm90dG9tXCJ9XG5cdFx0XHRcdFx0XHRcdFx0Lz5cblx0XHRcdFx0XHRcdFx0XHR7ZWFzeUVkaXREZXNjcmlwdGlvbn1cblx0XHRcdFx0XHRcdFx0XHQ8VGV4dEFyZWFcblx0XHRcdFx0XHRcdFx0XHRcdHZhbHVlPXt0aGlzLmJpbmRTdGF0ZShcImVudGVyZWRUZXh0XCIpfVxuXHRcdFx0XHRcdFx0XHRcdFx0Y2xhc3M9e1wic2FwVWlUaW55TWFyZ2luQm90dG9tXCJ9XG5cdFx0XHRcdFx0XHRcdFx0XHRsaXZlQ2hhbmdlPXsoZSk6IHZvaWQgPT4ge1xuXHRcdFx0XHRcdFx0XHRcdFx0XHR0aGlzLnN0YXRlLmN1cnJlbnRseUVudGVyZWRUZXh0ID0gZS5nZXRQYXJhbWV0ZXIoXCJ2YWx1ZVwiKSA/PyBcIlwiO1xuXHRcdFx0XHRcdFx0XHRcdFx0fX1cblx0XHRcdFx0XHRcdFx0XHRcdHdpZHRoPVwiMTAwJVwiXG5cdFx0XHRcdFx0XHRcdFx0XHRwbGFjZWhvbGRlcj17dGhpcy5nZXRUcmFuc2xhdGVkVGV4dChcIkNfRUFTWUVESVRfVEVYVEFSRUFfUExBQ0VIT0xERVJcIil9XG5cdFx0XHRcdFx0XHRcdFx0XHRyb3dzPXsyMH1cblx0XHRcdFx0XHRcdFx0XHRcdGdyb3dpbmc9e3RydWV9XG5cdFx0XHRcdFx0XHRcdFx0XHRncm93aW5nTWF4TGluZXM9ezMwfVxuXHRcdFx0XHRcdFx0XHRcdFx0bWF4TGVuZ3RoPXtNQVhfTEVOR1RIfVxuXHRcdFx0XHRcdFx0XHRcdFx0YXJpYUxhYmVsbGVkQnk9e2Vhc3lFZGl0RGVzY3JpcHRpb259XG5cdFx0XHRcdFx0XHRcdFx0Lz5cblx0XHRcdFx0XHRcdFx0XHQ8VGV4dFxuXHRcdFx0XHRcdFx0XHRcdFx0Y2xhc3M9e1wic2FwVWlUaW55TWFyZ2luQm90dG9tXCJ9XG5cdFx0XHRcdFx0XHRcdFx0XHR0ZXh0PXt7XG5cdFx0XHRcdFx0XHRcdFx0XHRcdHBhdGg6IFwiL2N1cnJlbnRseUVudGVyZWRUZXh0XCIsXG5cdFx0XHRcdFx0XHRcdFx0XHRcdG1vZGVsOiBcIiRjb21wb25lbnRTdGF0ZVwiLFxuXHRcdFx0XHRcdFx0XHRcdFx0XHRmb3JtYXR0ZXI6IHRoaXMuZm9ybWF0UmVtYWluaW5nQ2hhcmFjdGVycy5iaW5kKHRoaXMpXG5cdFx0XHRcdFx0XHRcdFx0XHR9fVxuXHRcdFx0XHRcdFx0XHRcdD5cblx0XHRcdFx0XHRcdFx0XHRcdHt7IGxheW91dERhdGE6IDxGbGV4SXRlbURhdGEgYWxpZ25TZWxmPVwiRW5kXCIgLz4gfX1cblx0XHRcdFx0XHRcdFx0XHQ8L1RleHQ+XG5cdFx0XHRcdFx0XHRcdFx0PEhCb3g+XG5cdFx0XHRcdFx0XHRcdFx0XHR7eyBsYXlvdXREYXRhOiA8RmxleEl0ZW1EYXRhIGFsaWduU2VsZj1cIkVuZFwiIC8+IH19XG5cdFx0XHRcdFx0XHRcdFx0XHQ8QnV0dG9uXG5cdFx0XHRcdFx0XHRcdFx0XHRcdHRleHQ9e3RoaXMuZ2V0VHJhbnNsYXRlZFRleHQoXCJDX0VBU1lFRElUX0JVVFRPTlwiKX1cblx0XHRcdFx0XHRcdFx0XHRcdFx0aWNvbj17XCJzYXAtaWNvbjovL2FpXCJ9XG5cdFx0XHRcdFx0XHRcdFx0XHRcdGVuYWJsZWQ9e25vdChpc0VtcHR5KHRoaXMuYmluZFN0YXRlKFwiY3VycmVudGx5RW50ZXJlZFRleHRcIikpKX1cblx0XHRcdFx0XHRcdFx0XHRcdFx0cHJlc3M9e3RoaXMub25FYXN5RWRpdFByZXNzZWQuYmluZCh0aGlzKX1cblx0XHRcdFx0XHRcdFx0XHRcdFx0cmVmPXskZWFzeUZpbGxCdXR0b259XG5cdFx0XHRcdFx0XHRcdFx0XHRcdGNsYXNzPXtcInNhcFVpU21hbGxNYXJnaW5FbmRcIn1cblx0XHRcdFx0XHRcdFx0XHRcdD48L0J1dHRvbj5cblx0XHRcdFx0XHRcdFx0XHRcdDxCdXR0b25cblx0XHRcdFx0XHRcdFx0XHRcdFx0dGV4dD17dGhpcy5nZXRUcmFuc2xhdGVkVGV4dChcIkNfRUFTWUVESVRfRElBTE9HX0NMRUFSX0FMTFwiKX1cblx0XHRcdFx0XHRcdFx0XHRcdFx0dHlwZT17QnV0dG9uVHlwZS5UcmFuc3BhcmVudH1cblx0XHRcdFx0XHRcdFx0XHRcdFx0cHJlc3M9e3RoaXMub25DbGVhckFsbC5iaW5kKHRoaXMpfVxuXHRcdFx0XHRcdFx0XHRcdFx0XHRyZWY9eyRlYXN5RmlsbENsZWFyQWxsQnV0dG9ufVxuXHRcdFx0XHRcdFx0XHRcdFx0PjwvQnV0dG9uPlxuXHRcdFx0XHRcdFx0XHRcdDwvSEJveD5cblx0XHRcdFx0XHRcdFx0PC9GbGV4Qm94PlxuXHRcdFx0XHRcdFx0XHQ8RmxleEJveFxuXHRcdFx0XHRcdFx0XHRcdGlkPXt0aGlzLmNyZWF0ZUlkKFwicmV2aWV3QXJlYVwiKX1cblx0XHRcdFx0XHRcdFx0XHRyZWY9e3RoaXMuJHJldmlld0FyZWF9XG5cdFx0XHRcdFx0XHRcdFx0d2lkdGg9e1wiNjAlXCJ9XG5cdFx0XHRcdFx0XHRcdFx0cmVuZGVyVHlwZT17XCJCYXJlXCJ9XG5cdFx0XHRcdFx0XHRcdFx0YnVzeT17dGhpcy5iaW5kU3RhdGUoXCJpc0J1c3lcIil9XG5cdFx0XHRcdFx0XHRcdFx0ZGlyZWN0aW9uPXtGbGV4RGlyZWN0aW9uLkNvbHVtbn1cblx0XHRcdFx0XHRcdFx0XHRjbGFzcz17XCJzYXBGZUVhc3lGaWxsUmV2aWV3QXJlYVwifVxuXHRcdFx0XHRcdFx0XHQ+XG5cdFx0XHRcdFx0XHRcdFx0PElsbHVzdHJhdGVkTWVzc2FnZVxuXHRcdFx0XHRcdFx0XHRcdFx0aWxsdXN0cmF0aW9uVHlwZT17SWxsdXN0cmF0ZWRNZXNzYWdlVHlwZS5Ob1NlYXJjaFJlc3VsdHN9XG5cdFx0XHRcdFx0XHRcdFx0XHRpbGx1c3RyYXRpb25TaXplPXtJbGx1c3RyYXRlZE1lc3NhZ2VTaXplLkxhcmdlfVxuXHRcdFx0XHRcdFx0XHRcdFx0dGl0bGU9e3RoaXMuZ2V0VHJhbnNsYXRlZFRleHQoXCJDX0VBU1lFRElUX0RJQUxPR19SRVZJRVdfVElUTEVcIil9XG5cdFx0XHRcdFx0XHRcdFx0XHRkZXNjcmlwdGlvbj17dGhpcy5nZXRUcmFuc2xhdGVkVGV4dChcIkNfRUFTWUVESVRfRElBTE9HX1JFVklFV19ERVNDUklQVElPTlwiKX1cblx0XHRcdFx0XHRcdFx0XHRcdHZpc2libGU9e2VxdWFsKHRoaXMuYmluZFN0YXRlKFwic3RhdGVUeXBlXCIpLCBcIkluaXRpYWxcIil9XG5cdFx0XHRcdFx0XHRcdFx0Lz5cblx0XHRcdFx0XHRcdFx0XHQ8SWxsdXN0cmF0ZWRNZXNzYWdlXG5cdFx0XHRcdFx0XHRcdFx0XHRpbGx1c3RyYXRpb25UeXBlPXtJbGx1c3RyYXRlZE1lc3NhZ2VUeXBlLk5vRW50cmllc31cblx0XHRcdFx0XHRcdFx0XHRcdGlsbHVzdHJhdGlvblNpemU9e0lsbHVzdHJhdGVkTWVzc2FnZVNpemUuTGFyZ2V9XG5cdFx0XHRcdFx0XHRcdFx0XHR0aXRsZT17dGhpcy5nZXRUcmFuc2xhdGVkVGV4dChcIkNfRUFTWUVESVRfRElBTE9HX05PX0VOVFJJRVNfVElUTEVcIil9XG5cdFx0XHRcdFx0XHRcdFx0XHRkZXNjcmlwdGlvbj17dGhpcy5nZXRUcmFuc2xhdGVkVGV4dChcIkNfRUFTWUVESVRfRElBTE9HX05PX0VOVFJJRVNfREVTQ1JJUFRJT05cIil9XG5cdFx0XHRcdFx0XHRcdFx0XHR2aXNpYmxlPXtlcXVhbCh0aGlzLmJpbmRTdGF0ZShcInN0YXRlVHlwZVwiKSwgXCJOb0VudHJpZXNcIil9XG5cdFx0XHRcdFx0XHRcdFx0Lz5cblx0XHRcdFx0XHRcdFx0XHQ8SWxsdXN0cmF0ZWRNZXNzYWdlXG5cdFx0XHRcdFx0XHRcdFx0XHRpbGx1c3RyYXRpb25UeXBlPXtJbGx1c3RyYXRlZE1lc3NhZ2VUeXBlLlVuYWJsZVRvTG9hZH1cblx0XHRcdFx0XHRcdFx0XHRcdGlsbHVzdHJhdGlvblNpemU9e0lsbHVzdHJhdGVkTWVzc2FnZVNpemUuTGFyZ2V9XG5cdFx0XHRcdFx0XHRcdFx0XHR0aXRsZT17dGhpcy5nZXRUcmFuc2xhdGVkVGV4dChcIkNfRUFTWUVESVRfRElBTE9HX0VSUk9SX1RJVExFXCIpfVxuXHRcdFx0XHRcdFx0XHRcdFx0ZGVzY3JpcHRpb249e3RoaXMuZ2V0VHJhbnNsYXRlZFRleHQoXCJDX0VBU1lFRElUX0RJQUxPR19FUlJPUl9ERVNDUklQVElPTlwiKX1cblx0XHRcdFx0XHRcdFx0XHRcdHZpc2libGU9e2VxdWFsKHRoaXMuYmluZFN0YXRlKFwic3RhdGVUeXBlXCIpLCBcIkVycm9yXCIpfVxuXHRcdFx0XHRcdFx0XHRcdC8+XG5cdFx0XHRcdFx0XHRcdDwvRmxleEJveD5cblx0XHRcdFx0XHRcdDwvRmxleEJveD5cblx0XHRcdFx0XHQpLFxuXHRcdFx0XHRcdGZvb3RlcjogKFxuXHRcdFx0XHRcdFx0PE92ZXJmbG93VG9vbGJhcj5cblx0XHRcdFx0XHRcdFx0PFRvb2xiYXJTcGFjZXIgLz5cblx0XHRcdFx0XHRcdFx0PEJ1dHRvblxuXHRcdFx0XHRcdFx0XHRcdHRleHQ9e3RoaXMuZ2V0VHJhbnNsYXRlZFRleHQoXCJDX0VBU1lFRElUX0RJQUxPR19TQVZFXCIpfVxuXHRcdFx0XHRcdFx0XHRcdHR5cGU9XCJFbXBoYXNpemVkXCJcblx0XHRcdFx0XHRcdFx0XHRlbmFibGVkPXthbmQodGhpcy5iaW5kU3RhdGUoXCJoYXNWYWx1ZXNcIiksIG5vdCh0aGlzLmJpbmRTdGF0ZShcImhhc0Vycm9yXCIpKSl9XG5cdFx0XHRcdFx0XHRcdFx0cHJlc3M9e3RoaXMub25Db25maXJtLmJpbmQodGhpcyl9XG5cdFx0XHRcdFx0XHRcdFx0cmVmPXskZWFzeUZpbGxTYXZlQnV0dG9ufVxuXHRcdFx0XHRcdFx0XHQvPlxuXHRcdFx0XHRcdFx0XHQ8QnV0dG9uXG5cdFx0XHRcdFx0XHRcdFx0dGV4dD17dGhpcy5nZXRUcmFuc2xhdGVkVGV4dChcIkNfRUFTWUVESVRfRElBTE9HX0NBTkNFTFwiKX1cblx0XHRcdFx0XHRcdFx0XHR0eXBlPVwiVHJhbnNwYXJlbnRcIlxuXHRcdFx0XHRcdFx0XHRcdHByZXNzPXt0aGlzLm9uQ2FuY2VsLmJpbmQodGhpcyl9XG5cdFx0XHRcdFx0XHRcdFx0cmVmPXskZWFzeUZpbGxDYW5jZWxCdXR0b259XG5cdFx0XHRcdFx0XHRcdC8+XG5cdFx0XHRcdFx0XHQ8L092ZXJmbG93VG9vbGJhcj5cblx0XHRcdFx0XHQpXG5cdFx0XHRcdH19XG5cdFx0XHQ8L0RpYWxvZz5cblx0XHQpO1xuXHRcdEZFU1JIZWxwZXIuc2V0U2VtYW50aWNTdGVwbmFtZSgkZWFzeUZpbGxCdXR0b24uY3VycmVudCEsIFwicHJlc3NcIiwgXCJmYWk6ZWY6YW5hbHl6ZVRleHRcIik7XG5cdFx0RkVTUkhlbHBlci5zZXRTZW1hbnRpY1N0ZXBuYW1lKCRlYXN5RmlsbFNhdmVCdXR0b24uY3VycmVudCEsIFwicHJlc3NcIiwgXCJmYWk6ZWY6c2F2ZVwiKTtcblx0XHRGRVNSSGVscGVyLnNldFNlbWFudGljU3RlcG5hbWUoJGVhc3lGaWxsQ2FuY2VsQnV0dG9uLmN1cnJlbnQhLCBcInByZXNzXCIsIFwiZmFpOmVmOmNhbmNlbFwiKTtcblx0XHRGRVNSSGVscGVyLnNldFNlbWFudGljU3RlcG5hbWUoJGVhc3lGaWxsQ2xlYXJBbGxCdXR0b24uY3VycmVudCEsIFwicHJlc3NcIiwgXCJmYWk6ZWY6Y2xlYXJBbGxcIik7XG5cdFx0cmV0dXJuIGRpYWxvZztcblx0fVxuXG5cdGFzeW5jIF9nZXRWYWx1ZUxpc3QocHJvcGVydHlQYXRoOiBzdHJpbmcpOiBQcm9taXNlPFZhbHVlTGlzdEluZm8gfCB1bmRlZmluZWQ+IHtcblx0XHRjb25zdCBtZXRhTW9kZWwgPSB0aGlzLmdldE1ldGFNb2RlbCgpITtcblx0XHRjb25zdCB2YWx1ZUxpc3RzID0gYXdhaXQgVmFsdWVMaXN0SGVscGVyLmdldFZhbHVlTGlzdEluZm8odW5kZWZpbmVkLCBwcm9wZXJ0eVBhdGgsIHVuZGVmaW5lZCwgbWV0YU1vZGVsKTtcblx0XHRyZXR1cm4gdmFsdWVMaXN0c1swXTtcblx0fVxufVxuIl0sIm1hcHBpbmdzIjoiOzs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7OztFQTJEQSxNQUFNQSxVQUFVLEdBQUcsSUFBSTtFQUFDLElBR0hDLGNBQWMsSUFBQUMsSUFBQSxHQURsQ0MsY0FBYyxDQUFDLGlDQUFpQyxDQUFDLEVBQUFDLEtBQUEsR0FlaERDLGVBQWUsQ0FBQyxDQUFDLEVBQUFDLEtBQUEsR0FHakJELGVBQWUsQ0FBQyxDQUFDLEVBQUFFLEtBQUEsR0FHakJDLFFBQVEsQ0FBQztJQUFFQyxJQUFJLEVBQUU7RUFBVyxDQUFDLENBQUMsRUFBQVAsSUFBQSxDQUFBUSxNQUFBLElBQUFDLE9BQUEsMEJBQUFDLGNBQUE7SUFLL0IsU0FBQVgsZUFBWVksU0FBZ0QsRUFBRUMsS0FBb0MsRUFBRTtNQUFBLElBQUFDLEtBQUE7TUFDbkdB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
641
+ //# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJuYW1lcyI6WyJNQVhfTEVOR1RIIiwiRWFzeUZpbGxEaWFsb2ciLCJfZGVjIiwiZGVmaW5lVUk1Q2xhc3MiLCJfZGVjMiIsImRlZmluZVJlZmVyZW5jZSIsIl9kZWMzIiwiX2RlYzQiLCJwcm9wZXJ0eSIsInR5cGUiLCJfY2xhc3MiLCJfY2xhc3MyIiwiX0J1aWxkaW5nQmxvY2siLCJpZE9yUHJvcHMiLCJwcm9wcyIsIl90aGlzIiwiY2FsbCIsIl9pbml0aWFsaXplckRlZmluZVByb3BlcnR5IiwiX2Rlc2NyaXB0b3IiLCJfZGVzY3JpcHRvcjIiLCJfZGVzY3JpcHRvcjMiLCJfZXhwb3J0cyIsIl9pbmhlcml0c0xvb3NlIiwiX3Byb3RvIiwicHJvdG90eXBlIiwib25NZXRhZGF0YUF2YWlsYWJsZSIsIl9vd25lckNvbXBvbmVudCIsInN0YXRlIiwibmV3VmFsdWVzIiwiaGFzVmFsdWVzIiwiaGFzRXJyb3IiLCJzdGF0ZVR5cGUiLCJjb250ZW50IiwiY3JlYXRlQ29udGVudCIsIm9uQ29uZmlybSIsIl9lIiwibWFpblBhZ2VCaW5kaW5nQ29udGV4dCIsImdldFBhZ2VDb250cm9sbGVyIiwiZ2V0VmlldyIsImdldEJpbmRpbmdDb250ZXh0IiwiYWxsUHJvcHMiLCJfYmluZGluZ0NvbnRleHQiLCJnZXRPYmplY3QiLCJuZXdWYWx1ZXNLZXkiLCJzdGFydHNXaXRoIiwic2V0UHJvcGVydHkiLCJwdXNoIiwiYXBwbHlVcGRhdGVzRm9yQ2hhbmdlIiwiZ2V0UGF0aCIsIlByb21pc2UiLCJhbGwiLCJyZWZyZXNoIiwiZXJyIiwiTG9nIiwiZXJyb3IiLCJjbG9zZSIsInZpZXciLCJwcm9wZXJ0eVBhdGhGb3JVcGRhdGUiLCJtZXRhTW9kZWwiLCJnZXRNb2RlbCIsImdldE1ldGFNb2RlbCIsIm1ldGFDb250ZXh0IiwiZ2V0TWV0YUNvbnRleHQiLCJkYXRhTW9kZWxPYmplY3QiLCJNZXRhTW9kZWxDb252ZXJ0ZXIiLCJnZXRJbnZvbHZlZERhdGFNb2RlbE9iamVjdHMiLCJ0YXJnZXRDb250ZXh0Iiwic2lkZUVmZmVjdHNQcm9taXNlcyIsInNpZGVFZmZlY3RzU2VydmljZSIsIkNvbGxhYm9yYXRpb25VdGlscyIsImdldEFwcENvbXBvbmVudCIsImdldFNpZGVFZmZlY3RzU2VydmljZSIsInRhcmdldE1ldGFQYXRoIiwiZ2V0TWV0YVBhdGgiLCJyZWxhdGl2ZU1ldGFQYXRoRm9yVXBkYXRlIiwicmVwbGFjZSIsInNsaWNlIiwicmVxdWVzdFNpZGVFZmZlY3RzIiwiZmllbGRHcm91cElkcyIsImNvbXB1dGVGaWVsZEdyb3VwSWRzIiwidGFyZ2V0RW50aXR5VHlwZSIsImZ1bGx5UXVhbGlmaWVkTmFtZSIsInRhcmdldE9iamVjdCIsImxlbmd0aCIsInBhZ2VDb250cm9sbGVyIiwiZ2V0Q29udHJvbGxlciIsInNpZGVFZmZlY3RzTWFwRm9yRmllbGRHcm91cCIsIl9zaWRlRWZmZWN0cyIsImdldFNpZGVFZmZlY3RzTWFwRm9yRmllbGRHcm91cHMiLCJPYmplY3QiLCJrZXlzIiwiZm9yRWFjaCIsInNpZGVFZmZlY3ROYW1lIiwic2lkZUVmZmVjdCIsInNpZGVFZmZlY3RzIiwiY29udGV4dCIsInVuZGVmaW5lZCIsIm9uQ2FuY2VsIiwib3BlbiIsIl9nZXRGaWVsZE1hcHBpbmciLCJkZWZpbml0aW9uUGFnZSIsImZpZWxkTWFwcGluZyIsInBhZ2VUYXJnZXQiLCJnZXRUYXJnZXQiLCJlbnRpdHlUeXBlIiwiX3R5cGUiLCJ0YXJnZXRUeXBlIiwiZW50aXR5UHJvcGVydHkiLCJlbnRpdHlQcm9wZXJ0aWVzIiwiaXNJbW11dGFibGUiLCJpc0NvbXB1dGVkIiwiYW5ub3RhdGlvbnMiLCJVSSIsIkhpZGRlbiIsInZhbHVlT2YiLCJuYW1lIiwiZGVzY3JpcHRpb24iLCJnZXRMYWJlbCIsImRhdGFUeXBlIiwiZ2VuZXJhdGVMaXN0QmluZGluZyIsInBhdGgiLCJtb2RlbCIsInRyYW5zaWVudExpc3RCaW5kaW5nIiwiYmluZExpc3QiLCIkJHVwZGF0ZUdyb3VwSWQiLCJyZWZyZXNoSW50ZXJuYWwiLCJvblRodW1iUHJlc3MiLCJ0aHVtYlVwQnV0dG9uIiwidGh1bWJEb3duQnV0dG9uIiwic2V0RW5hYmxlZCIsIk1lc3NhZ2VUb2FzdCIsInNob3ciLCJnZXRUcmFuc2xhdGVkVGV4dCIsImZvcm1hdFJlbWFpbmluZ0NoYXJhY3RlcnMiLCJ2YWx1ZSIsIm9uQ2xlYXJBbGwiLCJoYXNJbmNvcnJlY3RWYWx1ZXMiLCJlbnRlcmVkVGV4dCIsImN1cnJlbnRseUVudGVyZWRUZXh0IiwiaW5jb3JyZWN0VmFsdWVzIiwib25WYWxpZGF0ZUZpZWxkR3JvdXBzIiwiYWxsRmllbGRzIiwiJHJldmlld0FyZWEiLCJjdXJyZW50IiwiZ2V0Q29udHJvbHNCeUZpZWxkR3JvdXBJZCIsInNvbWUiLCJmaWVsZCIsImRhdGEiLCJnZXRWYWx1ZVN0YXRlIiwib25GaWVsZENoYW5nZSIsImV2IiwiZ2V0U291cmNlIiwicmVtb3ZlTWVzc2FnZSIsIm9uRWFzeUVkaXRQcmVzc2VkIiwibWV0YVBhdGgiLCJnZXRPd25lclBhZ2VEZWZpbml0aW9uIiwiZWFzeUZpbGxMaWJyYXJ5IiwiX191aTVfcmVxdWlyZV9hc3luYyIsIm9kYXRhTW9kZWwiLCJjcmVhdGUiLCJpc0J1c3kiLCJhaUNhbGxSZXN1bHQiLCJleHRyYWN0RmllbGRWYWx1ZXNGcm9tVGV4dCIsInN1Y2Nlc3MiLCJ1cGRhdGVkRmllbGRzIiwiZWRpdGFibGVGaWVsZHMiLCJnZXRFZGl0YWJsZUZpZWxkcyIsIiRzY3JvbGxDb250YWluZXIiLCJkZXN0cm95IiwicmV2aWV3QXJlYUZvcm0iLCJfanN4IiwiRm9ybSIsImVkaXRhYmxlIiwiY2xhc3MiLCJ2aXNpYmxlIiwiYmluZFN0YXRlIiwiY2hpbGRyZW4iLCJsYXlvdXQiLCJDb2x1bW5MYXlvdXQiLCJjb2x1bW5zTSIsImNvbHVtbnNMIiwiY29sdW1uc1hMIiwibGFiZWxDZWxsc0xhcmdlIiwiZW1wdHlDZWxsc0xhcmdlIiwiaW5jb3JyZWN0VmFsdWVzRm9ybSIsIndhcm5pbmdNZXNzYWdlIiwiTWVzc2FnZVN0cmlwIiwidGV4dCIsInNob3dJY29uIiwiVG9nZ2xlQnV0dG9uIiwiaWNvbiIsInRvb2x0aXAiLCJwcmVzcyIsIkZFU1JIZWxwZXIiLCJzZXRTZW1hbnRpY1N0ZXBuYW1lIiwiYWlOb3RpY2VUZXh0IiwiX2pzeHMiLCJIQm94IiwiYWxpZ25JdGVtcyIsIkFJTGlua05vdGljZSIsIlRleHQiLCJwcmV2aW91c1ZhbHVlc0Zvcm1Db250YWluZXIiLCJGb3JtQ29udGFpbmVyIiwidGl0bGUiLCJDb3JlVGl0bGUiLCJwcmV2aW91c1ZhbHVlc0Zvcm1Db250YWluZXIyIiwibmV3VmFsdWVzRm9ybUNvbnRhaW5lciIsIm5ld1ZhbHVlc0Zvcm1Db250YWluZXIyIiwidWlDb250ZXh0IiwiY3JlYXRlQmluZGluZ0NvbnRleHQiLCJzZXRCaW5kaW5nQ29udGV4dCIsImFkZEZvcm1Db250YWluZXIiLCJzZXRNb2RlbCIsIiR2Qm94IiwiY3JlYXRlUmVmZXJlbmNlIiwiYWRkSXRlbSIsIlNjcm9sbENvbnRhaW5lciIsInJlZiIsInZlcnRpY2FsIiwiVkJveCIsIml0ZW1zIiwianVzdGlmeUNvbnRlbnQiLCJUaXRsZSIsImxheW91dERhdGEiLCJGbGV4SXRlbURhdGEiLCJhbGlnblNlbGYiLCJ1cGRhdGVkRmllbGQiLCJpc0VkaXRhYmxlIiwiYWRkRm9ybUVsZW1lbnQiLCJGb3JtRWxlbWVudCIsImxhYmVsIiwiRmllbGQiLCJjb250ZXh0UGF0aCIsImdldE93bmVyQ29udGV4dFBhdGgiLCJyZWFkT25seSIsInJlcXVpcmVkIiwibmV3RmllbGQiLCJfZ2V0T3duZXIiLCJydW5Bc093bmVyIiwiX3JlcXVpcmVzVmFsaWRhdGlvbiIsInZhbGlkYXRlRmllbGRHcm91cCIsImJpbmQiLCJjaGFuZ2UiLCJmaWVsZHMiLCJtZXRhTW9kZWxPYmoiLCJ2YWx1ZUV4cHJlc3Npb24iLCJBbm5vdGF0aW9uSGVscGVyIiwiZm9ybWF0IiwicGFyc2VkQmluZGluZyIsIkJpbmRpbmdJbmZvIiwicGFyc2UiLCJlcnJvck1lc3NhZ2UiLCJ2YWxpZGF0ZVZhbHVlIiwiZSIsIm1lc3NhZ2UiLCJ2YWx1ZUxpc3QiLCJfZ2V0VmFsdWVMaXN0IiwiaGFzVkhFcnJvciIsIlZhbHVlTGlzdEhlbHBlciIsImlzVmFsdWVMaXN0U2VhcmNoYWJsZSIsInZhbHVlcyIsInJlc29sdmVUb2tlblZhbHVlIiwib3BlcmF0b3IiLCJGaWx0ZXJPcGVyYXRvciIsIkVRIiwic2VsZWN0ZWRWYWx1ZXMiLCJub01hdGNoIiwic2V0VGltZW91dCIsInNldFZhbHVlIiwibWVzc2FnZUlkIiwiYWRkTWVzc2FnZSIsIk1lc3NhZ2VUeXBlIiwiRXJyb3IiLCJlYXN5RWRpdERlc2NyaXB0aW9uIiwiSW52aXNpYmxlVGV4dCIsIiRlYXN5RmlsbEJ1dHRvbiIsIiRlYXN5RmlsbFNhdmVCdXR0b24iLCIkZWFzeUZpbGxDYW5jZWxCdXR0b24iLCIkZWFzeUZpbGxDbGVhckFsbEJ1dHRvbiIsImRpYWxvZyIsIkRpYWxvZyIsInJlc2l6YWJsZSIsImhvcml6b250YWxTY3JvbGxpbmciLCJ2ZXJ0aWNhbFNjcm9sbGluZyIsImNvbnRlbnRXaWR0aCIsImNvbnRlbnRIZWlnaHQiLCJlc2NhcGVIYW5kbGVyIiwiYWZ0ZXJDbG9zZSIsIkZsZXhCb3giLCJkaXJlY3Rpb24iLCJGbGV4RGlyZWN0aW9uIiwiUm93IiwicmVuZGVyVHlwZSIsIndpZHRoIiwiaGVpZ2h0IiwiaWQiLCJjcmVhdGVJZCIsIkNvbHVtbiIsIkZvcm1hdHRlZFRleHQiLCJodG1sVGV4dCIsIlRleHRBcmVhIiwibGl2ZUNoYW5nZSIsImdldFBhcmFtZXRlciIsInBsYWNlaG9sZGVyIiwicm93cyIsImdyb3dpbmciLCJncm93aW5nTWF4TGluZXMiLCJtYXhMZW5ndGgiLCJhcmlhTGFiZWxsZWRCeSIsImZvcm1hdHRlciIsIkJ1dHRvbiIsImVuYWJsZWQiLCJub3QiLCJpc0VtcHR5IiwiQnV0dG9uVHlwZSIsIlRyYW5zcGFyZW50IiwiYnVzeSIsIklsbHVzdHJhdGVkTWVzc2FnZSIsImlsbHVzdHJhdGlvblR5cGUiLCJJbGx1c3RyYXRlZE1lc3NhZ2VUeXBlIiwiTm9TZWFyY2hSZXN1bHRzIiwiaWxsdXN0cmF0aW9uU2l6ZSIsIklsbHVzdHJhdGVkTWVzc2FnZVNpemUiLCJMYXJnZSIsImVxdWFsIiwiTm9FbnRyaWVzIiwiVW5hYmxlVG9Mb2FkIiwiZm9vdGVyIiwiT3ZlcmZsb3dUb29sYmFyIiwiVG9vbGJhclNwYWNlciIsImFuZCIsInByb3BlcnR5UGF0aCIsInZhbHVlTGlzdHMiLCJnZXRWYWx1ZUxpc3RJbmZvIiwiQnVpbGRpbmdCbG9jayIsIl9hcHBseURlY29yYXRlZERlc2NyaXB0b3IiLCJjb25maWd1cmFibGUiLCJlbnVtZXJhYmxlIiwid3JpdGFibGUiLCJpbml0aWFsaXplciJdLCJzb3VyY2VSb290IjoiLiIsInNvdXJjZXMiOlsiRWFzeUZpbGxEaWFsb2cudHN4Il0sInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB0eXBlIHsgRW50aXR5VHlwZSwgUHJvcGVydHkgfSBmcm9tIFwiQHNhcC11eC92b2NhYnVsYXJpZXMtdHlwZXNcIjtcbmltcG9ydCBMb2cgZnJvbSBcInNhcC9iYXNlL0xvZ1wiO1xuaW1wb3J0IHsgYW5kLCBlcXVhbCwgaXNFbXB0eSwgbm90IH0gZnJvbSBcInNhcC9mZS9iYXNlL0JpbmRpbmdUb29sa2l0XCI7XG5pbXBvcnQgdHlwZSB7IEVuaGFuY2VXaXRoVUk1LCBQcm9wZXJ0aWVzT2YgfSBmcm9tIFwic2FwL2ZlL2Jhc2UvQ2xhc3NTdXBwb3J0XCI7XG5pbXBvcnQgeyBjcmVhdGVSZWZlcmVuY2UsIGRlZmluZVJlZmVyZW5jZSwgZGVmaW5lVUk1Q2xhc3MsIHByb3BlcnR5IH0gZnJvbSBcInNhcC9mZS9iYXNlL0NsYXNzU3VwcG9ydFwiO1xuaW1wb3J0IHR5cGUgeyBSZWYgfSBmcm9tIFwic2FwL2ZlL2Jhc2UvanN4LXJ1bnRpbWUvanN4XCI7XG5pbXBvcnQgeyBBSUxpbmtOb3RpY2UgfSBmcm9tIFwic2FwL2ZlL2NvbnRyb2xzL2Vhc3lGaWx0ZXIvQUlOb3RpY2VcIjtcbmltcG9ydCB0eXBlIHsgRkVWaWV3IH0gZnJvbSBcInNhcC9mZS9jb3JlL0Jhc2VDb250cm9sbGVyXCI7XG5pbXBvcnQgdHlwZSBUZW1wbGF0ZUNvbXBvbmVudCBmcm9tIFwic2FwL2ZlL2NvcmUvVGVtcGxhdGVDb21wb25lbnRcIjtcbmltcG9ydCBCdWlsZGluZ0Jsb2NrIGZyb20gXCJzYXAvZmUvY29yZS9idWlsZGluZ0Jsb2Nrcy9CdWlsZGluZ0Jsb2NrXCI7XG5pbXBvcnQgdHlwZSB7IEZpZWxkU2lkZUVmZmVjdERpY3Rpb25hcnkgfSBmcm9tIFwic2FwL2ZlL2NvcmUvY29udHJvbGxlcmV4dGVuc2lvbnMvU2lkZUVmZmVjdHNcIjtcbmltcG9ydCB7IENvbGxhYm9yYXRpb25VdGlscyB9IGZyb20gXCJzYXAvZmUvY29yZS9jb250cm9sbGVyZXh0ZW5zaW9ucy9jb2xsYWJvcmF0aW9uL0NvbGxhYm9yYXRpb25Db21tb25cIjtcbmltcG9ydCAqIGFzIE1ldGFNb2RlbENvbnZlcnRlciBmcm9tIFwic2FwL2ZlL2NvcmUvY29udmVydGVycy9NZXRhTW9kZWxDb252ZXJ0ZXJcIjtcbmltcG9ydCB0eXBlIHsgRGVmaW5pdGlvblBhZ2UgfSBmcm9tIFwic2FwL2ZlL2NvcmUvZGVmaW5pdGlvbi9GRURlZmluaXRpb25cIjtcbmltcG9ydCB7IGdldExhYmVsLCBpc0NvbXB1dGVkLCBpc0ltbXV0YWJsZSB9IGZyb20gXCJzYXAvZmUvY29yZS90ZW1wbGF0aW5nL1Byb3BlcnR5SGVscGVyXCI7XG5pbXBvcnQgRmllbGQgZnJvbSBcInNhcC9mZS9tYWNyb3MvRmllbGRcIjtcbmltcG9ydCB7IHJlc29sdmVUb2tlblZhbHVlIH0gZnJvbSBcInNhcC9mZS9tYWNyb3MvYWkvRWFzeUZpbHRlckRhdGFGZXRjaGVyXCI7XG5pbXBvcnQgVmFsdWVMaXN0SGVscGVyLCB7IHR5cGUgVmFsdWVMaXN0SW5mbyB9IGZyb20gXCJzYXAvZmUvbWFjcm9zL2ludGVybmFsL3ZhbHVlaGVscC9WYWx1ZUxpc3RIZWxwZXJcIjtcbmltcG9ydCB0eXBlIHsgQnV0dG9uJFByZXNzRXZlbnQgfSBmcm9tIFwic2FwL20vQnV0dG9uXCI7XG5pbXBvcnQgQnV0dG9uIGZyb20gXCJzYXAvbS9CdXR0b25cIjtcbmltcG9ydCBEaWFsb2cgZnJvbSBcInNhcC9tL0RpYWxvZ1wiO1xuaW1wb3J0IEZsZXhCb3ggZnJvbSBcInNhcC9tL0ZsZXhCb3hcIjtcbmltcG9ydCBGbGV4SXRlbURhdGEgZnJvbSBcInNhcC9tL0ZsZXhJdGVtRGF0YVwiO1xuaW1wb3J0IEZvcm1hdHRlZFRleHQgZnJvbSBcInNhcC9tL0Zvcm1hdHRlZFRleHRcIjtcbmltcG9ydCBIQm94IGZyb20gXCJzYXAvbS9IQm94XCI7XG5pbXBvcnQgSWxsdXN0cmF0ZWRNZXNzYWdlIGZyb20gXCJzYXAvbS9JbGx1c3RyYXRlZE1lc3NhZ2VcIjtcbmltcG9ydCBJbGx1c3RyYXRlZE1lc3NhZ2VTaXplIGZyb20gXCJzYXAvbS9JbGx1c3RyYXRlZE1lc3NhZ2VTaXplXCI7XG5pbXBvcnQgSWxsdXN0cmF0ZWRNZXNzYWdlVHlwZSBmcm9tIFwic2FwL20vSWxsdXN0cmF0ZWRNZXNzYWdlVHlwZVwiO1xuaW1wb3J0IE1lc3NhZ2VTdHJpcCBmcm9tIFwic2FwL20vTWVzc2FnZVN0cmlwXCI7XG5pbXBvcnQgTWVzc2FnZVRvYXN0IGZyb20gXCJzYXAvbS9NZXNzYWdlVG9hc3RcIjtcbmltcG9ydCBPdmVyZmxvd1Rvb2xiYXIgZnJvbSBcInNhcC9tL092ZXJmbG93VG9vbGJhclwiO1xuaW1wb3J0IFNjcm9sbENvbnRhaW5lciBmcm9tIFwic2FwL20vU2Nyb2xsQ29udGFpbmVyXCI7XG5pbXBvcnQgVGV4dCBmcm9tIFwic2FwL20vVGV4dFwiO1xuaW1wb3J0IFRleHRBcmVhIGZyb20gXCJzYXAvbS9UZXh0QXJlYVwiO1xuaW1wb3J0IFRpdGxlIGZyb20gXCJzYXAvbS9UaXRsZVwiO1xuaW1wb3J0IFRvZ2dsZUJ1dHRvbiBmcm9tIFwic2FwL20vVG9nZ2xlQnV0dG9uXCI7XG5pbXBvcnQgVG9vbGJhclNwYWNlciBmcm9tIFwic2FwL20vVG9vbGJhclNwYWNlclwiO1xuaW1wb3J0IFZCb3ggZnJvbSBcInNhcC9tL1ZCb3hcIjtcbmltcG9ydCB7IEJ1dHRvblR5cGUsIEZsZXhEaXJlY3Rpb24gfSBmcm9tIFwic2FwL20vbGlicmFyeVwiO1xuaW1wb3J0IEJpbmRpbmdJbmZvIGZyb20gXCJzYXAvdWkvYmFzZS9CaW5kaW5nSW5mb1wiO1xuaW1wb3J0IHR5cGUgVUk1RXZlbnQgZnJvbSBcInNhcC91aS9iYXNlL0V2ZW50XCI7XG5pbXBvcnQgdHlwZSB7IENvbnRyb2wkVmFsaWRhdGVGaWVsZEdyb3VwRXZlbnQgfSBmcm9tIFwic2FwL3VpL2NvcmUvQ29udHJvbFwiO1xuaW1wb3J0IEludmlzaWJsZVRleHQgZnJvbSBcInNhcC91aS9jb3JlL0ludmlzaWJsZVRleHRcIjtcbmltcG9ydCBDb3JlVGl0bGUgZnJvbSBcInNhcC91aS9jb3JlL1RpdGxlXCI7XG5pbXBvcnQgTWVzc2FnZVR5cGUgZnJvbSBcInNhcC91aS9jb3JlL21lc3NhZ2UvTWVzc2FnZVR5cGVcIjtcbmltcG9ydCBDb2x1bW5MYXlvdXQgZnJvbSBcInNhcC91aS9sYXlvdXQvZm9ybS9Db2x1bW5MYXlvdXRcIjtcbmltcG9ydCBGb3JtIGZyb20gXCJzYXAvdWkvbGF5b3V0L2Zvcm0vRm9ybVwiO1xuaW1wb3J0IEZvcm1Db250YWluZXIgZnJvbSBcInNhcC91aS9sYXlvdXQvZm9ybS9Gb3JtQ29udGFpbmVyXCI7XG5pbXBvcnQgRm9ybUVsZW1lbnQgZnJvbSBcInNhcC91aS9sYXlvdXQvZm9ybS9Gb3JtRWxlbWVudFwiO1xuaW1wb3J0IHR5cGUgQ29udGV4dCBmcm9tIFwic2FwL3VpL21vZGVsL0NvbnRleHRcIjtcbmltcG9ydCBGaWx0ZXJPcGVyYXRvciBmcm9tIFwic2FwL3VpL21vZGVsL0ZpbHRlck9wZXJhdG9yXCI7XG5pbXBvcnQgQW5ub3RhdGlvbkhlbHBlciBmcm9tIFwic2FwL3VpL21vZGVsL29kYXRhL3Y0L0Fubm90YXRpb25IZWxwZXJcIjtcbmltcG9ydCB0eXBlIE9EYXRhTGlzdEJpbmRpbmcgZnJvbSBcInNhcC91aS9tb2RlbC9vZGF0YS92NC9PRGF0YUxpc3RCaW5kaW5nXCI7XG5pbXBvcnQgdHlwZSBPRGF0YU1vZGVsIGZyb20gXCJzYXAvdWkvbW9kZWwvb2RhdGEvdjQvT0RhdGFNb2RlbFwiO1xuaW1wb3J0IEZFU1JIZWxwZXIgZnJvbSBcInNhcC91aS9wZXJmb3JtYW5jZS90cmFjZS9GRVNSSGVscGVyXCI7XG5pbXBvcnQgdHlwZSB7IEZpZWxkTWV0YWRhdGEgfSBmcm9tIFwidXgvZW5nL2Zpb3JpYWkvcmV1c2UvZWFzeWZpbGwvRWFzeUZpbGxcIjtcblxuY29uc3QgTUFYX0xFTkdUSCA9IDIwMDA7XG5cbkBkZWZpbmVVSTVDbGFzcyhcInNhcC5mZS5tYWNyb3MuYWkuRWFzeUZpbGxEaWFsb2dcIilcbmV4cG9ydCBkZWZhdWx0IGNsYXNzIEVhc3lGaWxsRGlhbG9nIGV4dGVuZHMgQnVpbGRpbmdCbG9jazxcblx0RGlhbG9nLFxuXHR7XG5cdFx0ZW50ZXJlZFRleHQ6IHN0cmluZztcblx0XHRpc0J1c3k6IGJvb2xlYW47XG5cdFx0Y3VycmVudGx5RW50ZXJlZFRleHQ6IHN0cmluZztcblx0XHRpbmNvcnJlY3RWYWx1ZXM6IFJlY29yZDxzdHJpbmcsIHVua25vd24+O1xuXHRcdG5ld1ZhbHVlczogUmVjb3JkPHN0cmluZywgdW5rbm93bj47XG5cdFx0aGFzVmFsdWVzOiBib29sZWFuO1xuXHRcdGhhc0Vycm9yOiBib29sZWFuO1xuXHRcdGhhc0luY29ycmVjdFZhbHVlczogYm9vbGVhbjtcblx0XHRzdGF0ZVR5cGU6IFwiSW5pdGlhbFwiIHwgXCJOb0VudHJpZXNcIiB8IFwiRXJyb3JcIiB8IFwiSGFzRW50cmllc1wiO1xuXHR9XG4+IHtcblx0QGRlZmluZVJlZmVyZW5jZSgpXG5cdCRyZXZpZXdBcmVhITogUmVmPEZsZXhCb3g+O1xuXG5cdEBkZWZpbmVSZWZlcmVuY2UoKVxuXHQkc2Nyb2xsQ29udGFpbmVyITogUmVmPEZsZXhCb3g+O1xuXG5cdEBwcm9wZXJ0eSh7IHR5cGU6IFwiRnVuY3Rpb25cIiB9KVxuXHRnZXRFZGl0YWJsZUZpZWxkcz86IEZ1bmN0aW9uO1xuXG5cdHByaXZhdGUgX2JpbmRpbmdDb250ZXh0PzogQ29udGV4dDtcblxuXHRjb25zdHJ1Y3RvcihpZE9yUHJvcHM6IHN0cmluZyB8IFByb3BlcnRpZXNPZjxFYXN5RmlsbERpYWxvZz4sIHByb3BzPzogUHJvcGVydGllc09mPEVhc3lGaWxsRGlhbG9nPikge1xuXHRcdHN1cGVyKGlkT3JQcm9wcywgcHJvcHMpO1xuXHR9XG5cblx0b25NZXRhZGF0YUF2YWlsYWJsZShfb3duZXJDb21wb25lbnQ6IFRlbXBsYXRlQ29tcG9uZW50KTogdm9pZCB7XG5cdFx0c3VwZXIub25NZXRhZGF0YUF2YWlsYWJsZShfb3duZXJDb21wb25lbnQpO1xuXHRcdHRoaXMuc3RhdGUubmV3VmFsdWVzID0ge307XG5cdFx0dGhpcy5zdGF0ZS5oYXNWYWx1ZXMgPSBmYWxzZTtcblx0XHR0aGlzLnN0YXRlLmhhc0Vycm9yID0gZmFsc2U7XG5cdFx0dGhpcy5zdGF0ZS5zdGF0ZVR5cGUgPSBcIkluaXRpYWxcIjtcblx0XHR0aGlzLmNvbnRlbnQgPSB0aGlzLmNyZWF0ZUNvbnRlbnQoKTtcblx0fVxuXG5cdGFzeW5jIG9uQ29uZmlybShfZTogQnV0dG9uJFByZXNzRXZlbnQpOiBQcm9taXNlPHZvaWQ+IHtcblx0XHQvLyBWYWxpZGF0ZSB0aGUgZGF0YSBoYW5kbGluZ1xuXHRcdGNvbnN0IG1haW5QYWdlQmluZGluZ0NvbnRleHQgPSB0aGlzLmdldFBhZ2VDb250cm9sbGVyKCkuZ2V0VmlldygpPy5nZXRCaW5kaW5nQ29udGV4dCgpO1xuXHRcdGNvbnN0IGFsbFByb3BzID0gW107XG5cdFx0Y29uc3QgbmV3VmFsdWVzID0gdGhpcy5fYmluZGluZ0NvbnRleHQ/LmdldE9iamVjdCgpID8/IHRoaXMuc3RhdGUubmV3VmFsdWVzO1xuXHRcdGZvciAoY29uc3QgbmV3VmFsdWVzS2V5IGluIG5ld1ZhbHVlcykge1xuXHRcdFx0aWYgKG5ld1ZhbHVlc0tleSAhPT0gXCJfX2JpbmRpbmdJbmZvXCIgJiYgIW5ld1ZhbHVlc0tleS5zdGFydHNXaXRoKFwiQCRcIikpIHtcblx0XHRcdFx0aWYgKHR5cGVvZiBuZXdWYWx1ZXNbbmV3VmFsdWVzS2V5XSAhPT0gXCJvYmplY3RcIikge1xuXHRcdFx0XHRcdG1haW5QYWdlQmluZGluZ0NvbnRleHQ/LnNldFByb3BlcnR5KG5ld1ZhbHVlc0tleSwgbmV3VmFsdWVzW25ld1ZhbHVlc0tleV0pO1xuXHRcdFx0XHRcdGFsbFByb3BzLnB1c2goXG5cdFx0XHRcdFx0XHR0aGlzLmFwcGx5VXBkYXRlc0ZvckNoYW5nZSh0aGlzLmdldFBhZ2VDb250cm9sbGVyKCkuZ2V0VmlldygpLCBtYWluUGFnZUJpbmRpbmdDb250ZXh0LmdldFBhdGgobmV3VmFsdWVzS2V5KSlcblx0XHRcdFx0XHQpO1xuXHRcdFx0XHR9XG5cdFx0XHR9XG5cdFx0fVxuXHRcdHRyeSB7XG5cdFx0XHRhd2FpdCBQcm9taXNlLmFsbChhbGxQcm9wcyk7XG5cdFx0XHRtYWluUGFnZUJpbmRpbmdDb250ZXh0LnJlZnJlc2goKTtcblx0XHR9IGNhdGNoIChlcnIpIHtcblx0XHRcdExvZy5lcnJvcihcIkZhaWxlZCB0byB1cGRhdGUgZGF0YSBhZnRlciBjaGFuZ2U6XCIgKyBlcnIpO1xuXHRcdH1cblx0XHQvLyBDbG9zZSBub25ldGhlbGVzc1xuXHRcdHRoaXMuY29udGVudD8uY2xvc2UoKTtcblx0fVxuXG5cdGFzeW5jIGFwcGx5VXBkYXRlc0ZvckNoYW5nZSh2aWV3OiBGRVZpZXcsIHByb3BlcnR5UGF0aEZvclVwZGF0ZTogc3RyaW5nKTogUHJvbWlzZTx2b2lkPiB7XG5cdFx0Y29uc3QgbWV0YU1vZGVsID0gdmlldy5nZXRNb2RlbCgpLmdldE1ldGFNb2RlbCgpO1xuXHRcdGNvbnN0IG1ldGFDb250ZXh0ID0gbWV0YU1vZGVsLmdldE1ldGFDb250ZXh0KHByb3BlcnR5UGF0aEZvclVwZGF0ZSk7XG5cdFx0Y29uc3QgZGF0YU1vZGVsT2JqZWN0ID0gTWV0YU1vZGVsQ29udmVydGVyLmdldEludm9sdmVkRGF0YU1vZGVsT2JqZWN0czxQcm9wZXJ0eT4obWV0YUNvbnRleHQpO1xuXHRcdGNvbnN0IHRhcmdldENvbnRleHQgPSB2aWV3LmdldEJpbmRpbmdDb250ZXh0KCk7XG5cdFx0dHJ5IHtcblx0XHRcdGNvbnN0IHNpZGVFZmZlY3RzUHJvbWlzZXM6IFByb21pc2U8dW5rbm93bj5bXSA9IFtdO1xuXHRcdFx0Y29uc3Qgc2lkZUVmZmVjdHNTZXJ2aWNlID0gQ29sbGFib3JhdGlvblV0aWxzLmdldEFwcENvbXBvbmVudCh2aWV3KS5nZXRTaWRlRWZmZWN0c1NlcnZpY2UoKTtcblxuXHRcdFx0Ly8gV2UgaGF2ZSBhIHRhcmdldCBjb250ZXh0LCBzbyB3ZSBjYW4gcmV0cmlldmUgdGhlIHVwZGF0ZWQgcHJvcGVydHlcblx0XHRcdGNvbnN0IHRhcmdldE1ldGFQYXRoID0gbWV0YU1vZGVsLmdldE1ldGFQYXRoKHRhcmdldENvbnRleHQuZ2V0UGF0aCgpKTtcblx0XHRcdGNvbnN0IHJlbGF0aXZlTWV0YVBhdGhGb3JVcGRhdGUgPSBtZXRhTW9kZWwuZ2V0TWV0YVBhdGgocHJvcGVydHlQYXRoRm9yVXBkYXRlKS5yZXBsYWNlKHRhcmdldE1ldGFQYXRoLCBcIlwiKS5zbGljZSgxKTtcblx0XHRcdHNpZGVFZmZlY3RzUHJvbWlzZXMucHVzaChzaWRlRWZmZWN0c1NlcnZpY2UucmVxdWVzdFNpZGVFZmZlY3RzKFtyZWxhdGl2ZU1ldGFQYXRoRm9yVXBkYXRlXSwgdGFyZ2V0Q29udGV4dCwgXCIkYXV0b1wiKSk7XG5cblx0XHRcdC8vIEdldCB0aGUgZmllbGRHcm91cElkcyBjb3JyZXNwb25kaW5nIHRvIHBhdGhGb3JVcGRhdGVcblx0XHRcdGNvbnN0IGZpZWxkR3JvdXBJZHMgPSBzaWRlRWZmZWN0c1NlcnZpY2UuY29tcHV0ZUZpZWxkR3JvdXBJZHMoXG5cdFx0XHRcdGRhdGFNb2RlbE9iamVjdC50YXJnZXRFbnRpdHlUeXBlLmZ1bGx5UXVhbGlmaWVkTmFtZSxcblx0XHRcdFx0ZGF0YU1vZGVsT2JqZWN0LnRhcmdldE9iamVjdCEuZnVsbHlRdWFsaWZpZWROYW1lXG5cdFx0XHQpO1xuXG5cdFx0XHQvLyBFeGVjdXRlIHRoZSBzaWRlIGVmZmVjdHMgZm9yIHRoZSBmaWVsZEdyb3VwSWRzXG5cdFx0XHRpZiAoZmllbGRHcm91cElkcy5sZW5ndGgpIHtcblx0XHRcdFx0Y29uc3QgcGFnZUNvbnRyb2xsZXIgPSB2aWV3LmdldENvbnRyb2xsZXIoKTtcblx0XHRcdFx0Y29uc3Qgc2lkZUVmZmVjdHNNYXBGb3JGaWVsZEdyb3VwID0gcGFnZUNvbnRyb2xsZXIuX3NpZGVFZmZlY3RzLmdldFNpZGVFZmZlY3RzTWFwRm9yRmllbGRHcm91cHMoXG5cdFx0XHRcdFx0ZmllbGRHcm91cElkcyxcblx0XHRcdFx0XHR0YXJnZXRDb250ZXh0XG5cdFx0XHRcdCkgYXMgRmllbGRTaWRlRWZmZWN0RGljdGlvbmFyeTtcblx0XHRcdFx0T2JqZWN0LmtleXMoc2lkZUVmZmVjdHNNYXBGb3JGaWVsZEdyb3VwKS5mb3JFYWNoKChzaWRlRWZmZWN0TmFtZSkgPT4ge1xuXHRcdFx0XHRcdGNvbnN0IHNpZGVFZmZlY3QgPSBzaWRlRWZmZWN0c01hcEZvckZpZWxkR3JvdXBbc2lkZUVmZmVjdE5hbWVdO1xuXHRcdFx0XHRcdHNpZGVFZmZlY3RzUHJvbWlzZXMucHVzaChcblx0XHRcdFx0XHRcdHBhZ2VDb250cm9sbGVyLl9zaWRlRWZmZWN0cy5yZXF1ZXN0U2lkZUVmZmVjdHMoc2lkZUVmZmVjdC5zaWRlRWZmZWN0cywgc2lkZUVmZmVjdC5jb250ZXh0LCBcIiRhdXRvXCIsIHVuZGVmaW5lZCwgdHJ1ZSlcblx0XHRcdFx0XHQpO1xuXHRcdFx0XHR9KTtcblx0XHRcdH1cblxuXHRcdFx0YXdhaXQgUHJvbWlzZS5hbGwoc2lkZUVmZmVjdHNQcm9taXNlcyk7XG5cdFx0fSBjYXRjaCAoZXJyKSB7XG5cdFx0XHRMb2cuZXJyb3IoXCJGYWlsZWQgdG8gdXBkYXRlIGRhdGEgYWZ0ZXIgY2hhbmdlOlwiICsgZXJyKTtcblx0XHRcdHRocm93IGVycjtcblx0XHR9XG5cdH1cblxuXHRvbkNhbmNlbCgpOiB2b2lkIHtcblx0XHR0aGlzLmNvbnRlbnQ/LmNsb3NlKCk7XG5cdH1cblxuXHRvcGVuKCk6IHZvaWQge1xuXHRcdHRoaXMuY29udGVudD8ub3BlbigpO1xuXHR9XG5cblx0X2dldEZpZWxkTWFwcGluZyhkZWZpbml0aW9uUGFnZTogRGVmaW5pdGlvblBhZ2UgfCB1bmRlZmluZWQpOiBGaWVsZE1ldGFkYXRhIHtcblx0XHRjb25zdCBmaWVsZE1hcHBpbmc6IEZpZWxkTWV0YWRhdGEgPSB7fTtcblx0XHRpZiAoZGVmaW5pdGlvblBhZ2UpIHtcblx0XHRcdGNvbnN0IHBhZ2VUYXJnZXQgPSBkZWZpbml0aW9uUGFnZS5nZXRNZXRhUGF0aCgpLmdldFRhcmdldCgpO1xuXHRcdFx0bGV0IGVudGl0eVR5cGU6IEVudGl0eVR5cGUgfCB1bmRlZmluZWQ7XG5cdFx0XHRzd2l0Y2ggKHBhZ2VUYXJnZXQuX3R5cGUpIHtcblx0XHRcdFx0Y2FzZSBcIkVudGl0eVNldFwiOlxuXHRcdFx0XHRjYXNlIFwiU2luZ2xldG9uXCI6XG5cdFx0XHRcdFx0ZW50aXR5VHlwZSA9IHBhZ2VUYXJnZXQuZW50aXR5VHlwZTtcblx0XHRcdFx0XHRicmVhaztcblx0XHRcdFx0Y2FzZSBcIk5hdmlnYXRpb25Qcm9wZXJ0eVwiOlxuXHRcdFx0XHRcdGVudGl0eVR5cGUgPSBwYWdlVGFyZ2V0LnRhcmdldFR5cGU7XG5cdFx0XHRcdFx0YnJlYWs7XG5cdFx0XHR9XG5cblx0XHRcdGlmIChlbnRpdHlUeXBlICE9PSB1bmRlZmluZWQpIHtcblx0XHRcdFx0Zm9yIChjb25zdCBlbnRpdHlQcm9wZXJ0eSBvZiBlbnRpdHlUeXBlLmVudGl0eVByb3BlcnRpZXMpIHtcblx0XHRcdFx0XHRpZiAoXG5cdFx0XHRcdFx0XHQhaXNJbW11dGFibGUoZW50aXR5UHJvcGVydHkpICYmXG5cdFx0XHRcdFx0XHQhaXNDb21wdXRlZChlbnRpdHlQcm9wZXJ0eSkgJiZcblx0XHRcdFx0XHRcdGVudGl0eVByb3BlcnR5LmFubm90YXRpb25zLlVJPy5IaWRkZW4/LnZhbHVlT2YoKSAhPT0gdHJ1ZVxuXHRcdFx0XHRcdCkge1xuXHRcdFx0XHRcdFx0Ly8gSWYgbm90IGltbXV0YWJsZSwgY29tcHV0ZWQgb3IgaGlkZGVuIGFkZCB0byB0aGUgZmllbGQgbWFwcGluZ1xuXHRcdFx0XHRcdFx0ZmllbGRNYXBwaW5nW2VudGl0eVByb3BlcnR5Lm5hbWVdID0ge1xuXHRcdFx0XHRcdFx0XHRkZXNjcmlwdGlvbjogZ2V0TGFiZWwoZW50aXR5UHJvcGVydHkpID8/IGVudGl0eVByb3BlcnR5Lm5hbWUsXG5cdFx0XHRcdFx0XHRcdGRhdGFUeXBlOiBlbnRpdHlQcm9wZXJ0eS50eXBlXG5cdFx0XHRcdFx0XHR9O1xuXHRcdFx0XHRcdH1cblx0XHRcdFx0fVxuXHRcdFx0fVxuXHRcdH1cblx0XHRyZXR1cm4gZmllbGRNYXBwaW5nO1xuXHR9XG5cblx0cHJpdmF0ZSBnZW5lcmF0ZUxpc3RCaW5kaW5nKHBhdGg6IHN0cmluZywgbW9kZWw6IE9EYXRhTW9kZWwpOiBPRGF0YUxpc3RCaW5kaW5nIHtcblx0XHRjb25zdCB0cmFuc2llbnRMaXN0QmluZGluZyA9IG1vZGVsLmJpbmRMaXN0KFxuXHRcdFx0cGF0aCxcblx0XHRcdHVuZGVmaW5lZCxcblxuXHRcdFx0W10sXG5cdFx0XHRbXSxcblx0XHRcdHtcblx0XHRcdFx0JCR1cGRhdGVHcm91cElkOiBcInN1Ym1pdExhdGVyXCJcblx0XHRcdH1cblx0XHQpO1xuXHRcdHRyYW5zaWVudExpc3RCaW5kaW5nLnJlZnJlc2hJbnRlcm5hbCA9ICgpOiB2b2lkID0+IHtcblx0XHRcdC8qICovXG5cdFx0fTtcblx0XHRyZXR1cm4gdHJhbnNpZW50TGlzdEJpbmRpbmc7XG5cdH1cblxuXHRwcml2YXRlIG9uVGh1bWJQcmVzcyh0aHVtYlVwQnV0dG9uOiBUb2dnbGVCdXR0b24sIHRodW1iRG93bkJ1dHRvbjogVG9nZ2xlQnV0dG9uKTogdm9pZCB7XG5cdFx0dGh1bWJVcEJ1dHRvbi5zZXRFbmFibGVkKGZhbHNlKTtcblx0XHR0aHVtYkRvd25CdXR0b24uc2V0RW5hYmxlZChmYWxzZSk7XG5cdFx0TWVzc2FnZVRvYXN0LnNob3codGhpcy5nZXRUcmFuc2xhdGVkVGV4dChcIkNfRUFTWUVESVRfRkVFREJBQ0tfU0VOVFwiKSk7XG5cdH1cblxuXHRmb3JtYXRSZW1haW5pbmdDaGFyYWN0ZXJzKHZhbHVlOiBzdHJpbmcpOiBzdHJpbmcge1xuXHRcdHJldHVybiB0aGlzLmdldFRyYW5zbGF0ZWRUZXh0KFwiQ19FQVNZRURJVF9SRU1BSU5JTkdfQ0hBUkFDVEVSU1wiLCBbTUFYX0xFTkdUSCAtICh2YWx1ZT8ubGVuZ3RoID8/IDApXSk7XG5cdH1cblxuXHRvbkNsZWFyQWxsKCk6IHZvaWQge1xuXHRcdHRoaXMuc3RhdGUubmV3VmFsdWVzID0ge307XG5cdFx0dGhpcy5zdGF0ZS5oYXNWYWx1ZXMgPSBmYWxzZTtcblx0XHR0aGlzLnN0YXRlLmhhc0luY29ycmVjdFZhbHVlcyA9IGZhbHNlO1xuXHRcdHRoaXMuc3RhdGUuZW50ZXJlZFRleHQgPSBcIlwiO1xuXHRcdHRoaXMuc3RhdGUuaGFzRXJyb3IgPSBmYWxzZTtcblx0XHR0aGlzLnN0YXRlLnN0YXRlVHlwZSA9IFwiSW5pdGlhbFwiO1xuXHRcdHRoaXMuc3RhdGUuY3VycmVudGx5RW50ZXJlZFRleHQgPSBcIlwiO1xuXHRcdHRoaXMuc3RhdGUuaW5jb3JyZWN0VmFsdWVzID0ge307XG5cdH1cblxuXHRvblZhbGlkYXRlRmllbGRHcm91cHMoX2U/OiBDb250cm9sJFZhbGlkYXRlRmllbGRHcm91cEV2ZW50KTogdm9pZCB7XG5cdFx0Y29uc3QgYWxsRmllbGRzID0gKHRoaXMuJHJldmlld0FyZWEuY3VycmVudD8uZ2V0Q29udHJvbHNCeUZpZWxkR3JvdXBJZChcIkVhc3lGaWxsRmllbGRcIikgYXMgRW5oYW5jZVdpdGhVSTU8RmllbGQ+W10pID8/IFtdO1xuXHRcdHRoaXMuc3RhdGUuaGFzRXJyb3IgPSBhbGxGaWVsZHMuc29tZSgoZmllbGQ6IEVuaGFuY2VXaXRoVUk1PEZpZWxkPik6IGJvb2xlYW4gPT4ge1xuXHRcdFx0cmV0dXJuIChcblx0XHRcdFx0ISFmaWVsZC5kYXRhKFwibWVzc2FnZUlkXCIpIHx8XG5cdFx0XHRcdCghIShmaWVsZCBhcyB7IGdldFZhbHVlU3RhdGU/OiBGdW5jdGlvbiB9KS5nZXRWYWx1ZVN0YXRlICYmXG5cdFx0XHRcdFx0KGZpZWxkIGFzIHsgZ2V0VmFsdWVTdGF0ZT86IEZ1bmN0aW9uIH0pLmdldFZhbHVlU3RhdGU/LigpID09PSBcIkVycm9yXCIpXG5cdFx0XHQpO1xuXHRcdH0pO1xuXHR9XG5cblx0b25GaWVsZENoYW5nZShldjogVUk1RXZlbnQ8e30sIEZpZWxkPik6IHZvaWQge1xuXHRcdGV2LmdldFNvdXJjZSgpLnJlbW92ZU1lc3NhZ2UoZXYuZ2V0U291cmNlKCkuZGF0YShcIm1lc3NhZ2VJZFwiKSk7XG5cdFx0ZXYuZ2V0U291cmNlKCkuZGF0YShcIm1lc3NhZ2VJZFwiLCB1bmRlZmluZWQpO1xuXHR9XG5cblx0YXN5bmMgb25FYXN5RWRpdFByZXNzZWQoKTogUHJvbWlzZTx2b2lkPiB7XG5cdFx0Ly8gQ2FsbCB0aGUgQUkgc2VydmljZVxuXHRcdC8vIFByb2Nlc3MgdGhyb3VnaCBjaGF0IGNvbXBsZXRpb24gQVBJXG5cdFx0Y29uc3QgbWV0YVBhdGggPSB0aGlzLmdldE93bmVyUGFnZURlZmluaXRpb24oKTtcblx0XHRjb25zdCBmaWVsZE1hcHBpbmcgPSB0aGlzLl9nZXRGaWVsZE1hcHBpbmcobWV0YVBhdGgpO1xuXHRcdGNvbnN0IGVhc3lGaWxsTGlicmFyeSA9IGF3YWl0IGltcG9ydChcInV4L2VuZy9maW9yaWFpL3JldXNlL2Vhc3lmaWxsL0Vhc3lGaWxsXCIpO1xuXHRcdGNvbnN0IG9kYXRhTW9kZWwgPSB0aGlzLmdldE1vZGVsKCkgYXMgT0RhdGFNb2RlbDtcblx0XHRjb25zdCB0cmFuc2llbnRMaXN0QmluZGluZyA9IHRoaXMuZ2VuZXJhdGVMaXN0QmluZGluZyhcblx0XHRcdG9kYXRhTW9kZWwuZ2V0TWV0YU1vZGVsKCkuZ2V0TWV0YVBhdGgodGhpcy5nZXRQYWdlQ29udHJvbGxlcigpLmdldFZpZXcoKT8uZ2V0QmluZGluZ0NvbnRleHQoKT8uZ2V0UGF0aCgpKSxcblx0XHRcdHRoaXMuZ2V0TW9kZWwoKSBhcyBPRGF0YU1vZGVsXG5cdFx0KTtcblx0XHR0aGlzLl9iaW5kaW5nQ29udGV4dCA9IHRyYW5zaWVudExpc3RCaW5kaW5nLmNyZWF0ZSh7fSwgdHJ1ZSk7XG5cblx0XHR0aGlzLnN0YXRlLmlzQnVzeSA9IHRydWU7XG5cdFx0dHJ5IHtcblx0XHRcdGNvbnN0IGFpQ2FsbFJlc3VsdCA9IGF3YWl0IGVhc3lGaWxsTGlicmFyeS5leHRyYWN0RmllbGRWYWx1ZXNGcm9tVGV4dCh0aGlzLnN0YXRlLmVudGVyZWRUZXh0LCBmaWVsZE1hcHBpbmcpO1xuXHRcdFx0dGhpcy5zdGF0ZS5pc0J1c3kgPSBmYWxzZTtcblx0XHRcdGlmIChhaUNhbGxSZXN1bHQuc3VjY2Vzcykge1xuXHRcdFx0XHRjb25zdCB1cGRhdGVkRmllbGRzID0gYWlDYWxsUmVzdWx0LmRhdGE7XG5cdFx0XHRcdGlmIChPYmplY3Qua2V5cyh1cGRhdGVkRmllbGRzKS5sZW5ndGggPT09IDApIHtcblx0XHRcdFx0XHR0aGlzLnN0YXRlLmhhc1ZhbHVlcyA9IGZhbHNlO1xuXHRcdFx0XHRcdHRoaXMuc3RhdGUuaGFzSW5jb3JyZWN0VmFsdWVzID0gZmFsc2U7XG5cdFx0XHRcdFx0dGhpcy5zdGF0ZS5zdGF0ZVR5cGUgPSBcIk5vRW50cmllc1wiO1xuXHRcdFx0XHRcdHJldHVybjtcblx0XHRcdFx0fVxuXHRcdFx0XHR0aGlzLnN0YXRlLnN0YXRlVHlwZSA9IFwiSGFzRW50cmllc1wiO1xuXHRcdFx0XHR0aGlzLnN0YXRlLmhhc0Vycm9yID0gZmFsc2U7XG5cdFx0XHRcdGNvbnN0IGVkaXRhYmxlRmllbGRzID0gKGF3YWl0IHRoaXMuZ2V0RWRpdGFibGVGaWVsZHM/LigpKSA/PyB7fTtcblx0XHRcdFx0dGhpcy5zdGF0ZS5oYXNWYWx1ZXMgPSBmYWxzZTtcblx0XHRcdFx0dGhpcy5zdGF0ZS5oYXNJbmNvcnJlY3RWYWx1ZXMgPSBmYWxzZTtcblx0XHRcdFx0dGhpcy4kc2Nyb2xsQ29udGFpbmVyLmN1cnJlbnQ/LmRlc3Ryb3koKTtcblxuXHRcdFx0XHRjb25zdCByZXZpZXdBcmVhRm9ybSA9IChcblx0XHRcdFx0XHQ8Rm9ybSBlZGl0YWJsZT17dHJ1ZX0gY2xhc3M9e1wic2FwVWlTbWFsbE1hcmdpblRvcEJvdHRvbVwifSB2aXNpYmxlPXt0aGlzLmJpbmRTdGF0ZShcImhhc1ZhbHVlc1wiKX0+XG5cdFx0XHRcdFx0XHR7e1xuXHRcdFx0XHRcdFx0XHRsYXlvdXQ6IDxDb2x1bW5MYXlvdXQgY29sdW1uc009ezJ9IGNvbHVtbnNMPXsyfSBjb2x1bW5zWEw9ezJ9IGxhYmVsQ2VsbHNMYXJnZT17MX0gZW1wdHlDZWxsc0xhcmdlPXsxfSAvPlxuXHRcdFx0XHRcdFx0fX1cblx0XHRcdFx0XHQ8L0Zvcm0+XG5cdFx0XHRcdCkgYXMgRm9ybTtcblx0XHRcdFx0Y29uc3QgaW5jb3JyZWN0VmFsdWVzRm9ybSA9IChcblx0XHRcdFx0XHQ8Rm9ybSBlZGl0YWJsZT17ZmFsc2V9IGNsYXNzPXtcInNhcFVpU21hbGxNYXJnaW5Ub3BCb3R0b21cIn0gdmlzaWJsZT17dGhpcy5iaW5kU3RhdGUoXCJoYXNJbmNvcnJlY3RWYWx1ZXNcIil9PlxuXHRcdFx0XHRcdFx0e3tcblx0XHRcdFx0XHRcdFx0bGF5b3V0OiA8Q29sdW1uTGF5b3V0IGNvbHVtbnNNPXsyfSBjb2x1bW5zTD17Mn0gY29sdW1uc1hMPXsyfSBsYWJlbENlbGxzTGFyZ2U9ezF9IGVtcHR5Q2VsbHNMYXJnZT17MX0gLz5cblx0XHRcdFx0XHRcdH19XG5cdFx0XHRcdFx0PC9Gb3JtPlxuXHRcdFx0XHQpO1xuXHRcdFx0XHRjb25zdCB3YXJuaW5nTWVzc2FnZSA9IChcblx0XHRcdFx0XHQ8TWVzc2FnZVN0cmlwXG5cdFx0XHRcdFx0XHR0ZXh0PXt0aGlzLmdldFRyYW5zbGF0ZWRUZXh0KFwiQ19FQVNZRURJVF9ESUFMT0dfV0FSTklOR19NU0dcIil9XG5cdFx0XHRcdFx0XHR0eXBlPXtcIldhcm5pbmdcIn1cblx0XHRcdFx0XHRcdHNob3dJY29uPXt0cnVlfVxuXHRcdFx0XHRcdFx0dmlzaWJsZT17dGhpcy5iaW5kU3RhdGUoXCJoYXNJbmNvcnJlY3RWYWx1ZXNcIil9XG5cdFx0XHRcdFx0PjwvTWVzc2FnZVN0cmlwPlxuXHRcdFx0XHQpO1xuXHRcdFx0XHRjb25zdCB0aHVtYlVwQnV0dG9uID0gKFxuXHRcdFx0XHRcdDxUb2dnbGVCdXR0b25cblx0XHRcdFx0XHRcdGljb249e1wic2FwLWljb246Ly90aHVtYi11cFwifVxuXHRcdFx0XHRcdFx0dG9vbHRpcD17dGhpcy5nZXRUcmFuc2xhdGVkVGV4dChcIkNfRUFTWUVESVRfVEhVTUJTX1VQXCIpfVxuXHRcdFx0XHRcdFx0dHlwZT17XCJUcmFuc3BhcmVudFwifVxuXHRcdFx0XHRcdFx0cHJlc3M9eygpOiB2b2lkID0+IHtcblx0XHRcdFx0XHRcdFx0cmV0dXJuIHRoaXMub25UaHVtYlByZXNzKHRodW1iVXBCdXR0b24sIHRodW1iRG93bkJ1dHRvbik7XG5cdFx0XHRcdFx0XHR9fVxuXHRcdFx0XHRcdC8+XG5cdFx0XHRcdCk7XG5cdFx0XHRcdEZFU1JIZWxwZXIuc2V0U2VtYW50aWNTdGVwbmFtZSh0aHVtYlVwQnV0dG9uLCBcInByZXNzXCIsIFwiZmU0OmVmOnRodW1iVXBcIik7XG5cdFx0XHRcdGNvbnN0IHRodW1iRG93bkJ1dHRvbiA9IChcblx0XHRcdFx0XHQ8VG9nZ2xlQnV0dG9uXG5cdFx0XHRcdFx0XHRpY29uPXtcInNhcC1pY29uOi8vdGh1bWItZG93blwifVxuXHRcdFx0XHRcdFx0dG9vbHRpcD17dGhpcy5nZXRUcmFuc2xhdGVkVGV4dChcIkNfRUFTWUVESVRfVEhVTUJTX0RPV05cIil9XG5cdFx0XHRcdFx0XHR0eXBlPXtcIlRyYW5zcGFyZW50XCJ9XG5cdFx0XHRcdFx0XHRwcmVzcz17KCk6IHZvaWQgPT4ge1xuXHRcdFx0XHRcdFx0XHRyZXR1cm4gdGhpcy5vblRodW1iUHJlc3ModGh1bWJVcEJ1dHRvbiwgdGh1bWJEb3duQnV0dG9uKTtcblx0XHRcdFx0XHRcdH19XG5cdFx0XHRcdFx0Lz5cblx0XHRcdFx0KTtcblx0XHRcdFx0RkVTUkhlbHBlci5zZXRTZW1hbnRpY1N0ZXBuYW1lKHRodW1iRG93bkJ1dHRvbiwgXCJwcmVzc1wiLCBcImZlNDplZjp0aHVtYkRvd25cIik7XG5cdFx0XHRcdGNvbnN0IGFpTm90aWNlVGV4dCA9IChcblx0XHRcdFx0XHQ8SEJveCBhbGlnbkl0ZW1zPXtcIkNlbnRlclwifSB2aXNpYmxlPXt0aGlzLmJpbmRTdGF0ZShcImhhc1ZhbHVlc1wiKX0+XG5cdFx0XHRcdFx0XHQ8QUlMaW5rTm90aWNlIC8+XG5cdFx0XHRcdFx0XHQ8VGV4dCB0ZXh0PXt0aGlzLmdldFRyYW5zbGF0ZWRUZXh0KFwiQ19FQVNZRURJVF9BSV9OT1RJQ0VfVEVYVFwiKX0gY2xhc3M9e1wic2FwVWlUaW55TWFyZ2luQmVnaW5cIn0gLz5cblx0XHRcdFx0XHRcdHt0aHVtYlVwQnV0dG9ufSwge3RodW1iRG93bkJ1dHRvbn1cblx0XHRcdFx0XHQ8L0hCb3g+XG5cdFx0XHRcdCk7XG5cdFx0XHRcdGNvbnN0IHByZXZpb3VzVmFsdWVzRm9ybUNvbnRhaW5lciA9IChcblx0XHRcdFx0XHQ8Rm9ybUNvbnRhaW5lcj57eyB0aXRsZTogPENvcmVUaXRsZSB0ZXh0PXt0aGlzLmdldFRyYW5zbGF0ZWRUZXh0KFwiQ19FQVNZRURJVF9QUkVWSU9VU19WQUxVRVNcIil9IC8+IH19PC9Gb3JtQ29udGFpbmVyPlxuXHRcdFx0XHQpIGFzIEZvcm1Db250YWluZXI7XG5cdFx0XHRcdGNvbnN0IHByZXZpb3VzVmFsdWVzRm9ybUNvbnRhaW5lcjIgPSAoXG5cdFx0XHRcdFx0PEZvcm1Db250YWluZXI+e3sgdGl0bGU6IDxDb3JlVGl0bGUgdGV4dD17dGhpcy5nZXRUcmFuc2xhdGVkVGV4dChcIkNfRUFTWUVESVRfUFJFVklPVVNfVkFMVUVTXCIpfSAvPiB9fTwvRm9ybUNvbnRhaW5lcj5cblx0XHRcdFx0KSBhcyBGb3JtQ29udGFpbmVyO1xuXHRcdFx0XHRjb25zdCBuZXdWYWx1ZXNGb3JtQ29udGFpbmVyID0gKFxuXHRcdFx0XHRcdDxGb3JtQ29udGFpbmVyPnt7IHRpdGxlOiA8Q29yZVRpdGxlIHRleHQ9e3RoaXMuZ2V0VHJhbnNsYXRlZFRleHQoXCJDX0VBU1lFRElUX05FV19WQUxVRVNcIil9IC8+IH19PC9Gb3JtQ29udGFpbmVyPlxuXHRcdFx0XHQpIGFzIEZvcm1Db250YWluZXI7XG5cdFx0XHRcdGNvbnN0IG5ld1ZhbHVlc0Zvcm1Db250YWluZXIyID0gKFxuXHRcdFx0XHRcdDxGb3JtQ29udGFpbmVyPnt7IHRpdGxlOiA8Q29yZVRpdGxlIHRleHQ9e3RoaXMuZ2V0VHJhbnNsYXRlZFRleHQoXCJDX0VBU1lFRElUX05FV19WQUxVRVNcIil9IC8+IH19PC9Gb3JtQ29udGFpbmVyPlxuXHRcdFx0XHQpIGFzIEZvcm1Db250YWluZXI7XG5cdFx0XHRcdGNvbnN0IHVpQ29udGV4dCA9IHRoaXMuZ2V0UGFnZUNvbnRyb2xsZXIoKS5nZXRNb2RlbChcInVpXCIpPy5jcmVhdGVCaW5kaW5nQ29udGV4dChcIi9lYXN5RWRpdERpYWxvZ1wiKTtcblxuXHRcdFx0XHR0aGlzLmdldFBhZ2VDb250cm9sbGVyKCkuZ2V0TW9kZWwoXCJ1aVwiKS5zZXRQcm9wZXJ0eShcIi9lYXN5RWRpdERpYWxvZ1wiLCB7fSk7XG5cdFx0XHRcdHVpQ29udGV4dC5zZXRQcm9wZXJ0eShcImlzRWRpdGFibGVcIiwgdHJ1ZSk7XG5cdFx0XHRcdG5ld1ZhbHVlc0Zvcm1Db250YWluZXIuc2V0QmluZGluZ0NvbnRleHQodWlDb250ZXh0LCBcInVpXCIpO1xuXG5cdFx0XHRcdHJldmlld0FyZWFGb3JtLmFkZEZvcm1Db250YWluZXIocHJldmlvdXNWYWx1ZXNGb3JtQ29udGFpbmVyKTtcblx0XHRcdFx0cmV2aWV3QXJlYUZvcm0uYWRkRm9ybUNvbnRhaW5lcihuZXdWYWx1ZXNGb3JtQ29udGFpbmVyKTtcblx0XHRcdFx0aW5jb3JyZWN0VmFsdWVzRm9ybS5hZGRGb3JtQ29udGFpbmVyKHByZXZpb3VzVmFsdWVzRm9ybUNvbnRhaW5lcjIpO1xuXHRcdFx0XHRpbmNvcnJlY3RWYWx1ZXNGb3JtLmFkZEZvcm1Db250YWluZXIobmV3VmFsdWVzRm9ybUNvbnRhaW5lcjIpO1xuXHRcdFx0XHRjb25zdCBuZXdWYWx1ZXM6IFJlY29yZDxzdHJpbmcsIHVua25vd24+ID0ge307XG5cdFx0XHRcdGNvbnN0IGluY29ycmVjdFZhbHVlczogUmVjb3JkPHN0cmluZywgdW5rbm93bj4gPSB7fTtcblx0XHRcdFx0bmV3VmFsdWVzRm9ybUNvbnRhaW5lci5zZXRCaW5kaW5nQ29udGV4dCh0aGlzLl9iaW5kaW5nQ29udGV4dCk7XG5cdFx0XHRcdG5ld1ZhbHVlc0Zvcm1Db250YWluZXIyLnNldEJpbmRpbmdDb250ZXh0KHRoaXMuZ2V0TW9kZWwoXCIkY29tcG9uZW50U3RhdGVcIik/LmNyZWF0ZUJpbmRpbmdDb250ZXh0KFwiL2luY29ycmVjdFZhbHVlc1wiKSk7XG5cdFx0XHRcdG5ld1ZhbHVlc0Zvcm1Db250YWluZXIyLnNldE1vZGVsKHRoaXMuZ2V0TW9kZWwoXCIkY29tcG9uZW50U3RhdGVcIikpO1xuXG5cdFx0XHRcdGNvbnN0ICR2Qm94ID0gY3JlYXRlUmVmZXJlbmNlPFZCb3g+KCk7XG5cdFx0XHRcdHRoaXMuJHJldmlld0FyZWEuY3VycmVudD8uYWRkSXRlbShcblx0XHRcdFx0XHQ8U2Nyb2xsQ29udGFpbmVyIHJlZj17dGhpcy4kc2Nyb2xsQ29udGFpbmVyfSB2ZXJ0aWNhbD17dHJ1ZX0gY2xhc3M9e1wic2FwVWlDb250ZW50UGFkZGluZ1wifT5cblx0XHRcdFx0XHRcdHt7XG5cdFx0XHRcdFx0XHRcdGNvbnRlbnQ6IChcblx0XHRcdFx0XHRcdFx0XHQ8VkJveCByZWY9eyR2Qm94fT5cblx0XHRcdFx0XHRcdFx0XHRcdHt7XG5cdFx0XHRcdFx0XHRcdFx0XHRcdGl0ZW1zOiBbXG5cdFx0XHRcdFx0XHRcdFx0XHRcdFx0PEhCb3gganVzdGlmeUNvbnRlbnQ9e1wiU3BhY2VCZXR3ZWVuXCJ9IGFsaWduSXRlbXM9e1wiQ2VudGVyXCJ9PlxuXHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0PEhCb3g+XG5cdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdDxUaXRsZVxuXHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdHRleHQ9e3RoaXMuZ2V0VHJhbnNsYXRlZFRleHQoXCJDX0VBU1lFRElUX0ZJTExFRF9GSUVMRFNcIil9XG5cdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0dmlzaWJsZT17dGhpcy5iaW5kU3RhdGUoXCJoYXNWYWx1ZXNcIil9XG5cdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdC8+XG5cdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHQ8L0hCb3g+XG5cdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHQsXG5cdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHQ8SEJveD5cblx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0e3sgbGF5b3V0RGF0YTogPEZsZXhJdGVtRGF0YSBhbGlnblNlbGY9XCJFbmRcIiAvPiB9fVxuXHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHR7YWlOb3RpY2VUZXh0fVxuXHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0PC9IQm94PlxuXHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0LFxuXHRcdFx0XHRcdFx0XHRcdFx0XHRcdDwvSEJveD4sXG5cdFx0XHRcdFx0XHRcdFx0XHRcdFx0cmV2aWV3QXJlYUZvcm0sXG5cdFx0XHRcdFx0XHRcdFx0XHRcdFx0PFRpdGxlXG5cdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHR0ZXh0PXt0aGlzLmdldFRyYW5zbGF0ZWRUZXh0KFwiQ19FQVNZRURJVF9JTkNPUlJFQ1RfRklFTERTXCIpfVxuXHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0Y2xhc3M9e1wic2FwVWlTbWFsbE1hcmdpblRvcEJvdHRvbVwifVxuXHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0dmlzaWJsZT17dGhpcy5iaW5kU3RhdGUoXCJoYXNJbmNvcnJlY3RWYWx1ZXNcIil9XG5cdFx0XHRcdFx0XHRcdFx0XHRcdFx0Lz4sXG5cdFx0XHRcdFx0XHRcdFx0XHRcdFx0d2FybmluZ01lc3NhZ2UsXG5cdFx0XHRcdFx0XHRcdFx0XHRcdFx0aW5jb3JyZWN0VmFsdWVzRm9ybVxuXHRcdFx0XHRcdFx0XHRcdFx0XHRdXG5cdFx0XHRcdFx0XHRcdFx0XHR9fVxuXHRcdFx0XHRcdFx0XHRcdDwvVkJveD5cblx0XHRcdFx0XHRcdFx0KVxuXHRcdFx0XHRcdFx0fX1cblx0XHRcdFx0XHQ8L1Njcm9sbENvbnRhaW5lcj5cblx0XHRcdFx0KTtcblxuXHRcdFx0XHRmb3IgKGNvbnN0IHVwZGF0ZWRGaWVsZCBpbiB1cGRhdGVkRmllbGRzKSB7XG5cdFx0XHRcdFx0aWYgKGVkaXRhYmxlRmllbGRzW3VwZGF0ZWRGaWVsZF0gJiYgZWRpdGFibGVGaWVsZHNbdXBkYXRlZEZpZWxkXS5pc0VkaXRhYmxlID09PSB0cnVlKSB7XG5cdFx0XHRcdFx0XHR0aGlzLnN0YXRlLmhhc1ZhbHVlcyA9IHRydWU7XG5cdFx0XHRcdFx0XHRwcmV2aW91c1ZhbHVlc0Zvcm1Db250YWluZXIuYWRkRm9ybUVsZW1lbnQoXG5cdFx0XHRcdFx0XHRcdDxGb3JtRWxlbWVudCBsYWJlbD17ZmllbGRNYXBwaW5nW3VwZGF0ZWRGaWVsZF0uZGVzY3JpcHRpb259PlxuXHRcdFx0XHRcdFx0XHRcdDxGaWVsZFxuXHRcdFx0XHRcdFx0XHRcdFx0bWV0YVBhdGg9e3VwZGF0ZWRGaWVsZH1cblx0XHRcdFx0XHRcdFx0XHRcdGNvbnRleHRQYXRoPXt0aGlzLmdldE93bmVyQ29udGV4dFBhdGgoKX1cblx0XHRcdFx0XHRcdFx0XHRcdHJlYWRPbmx5PXt0cnVlfVxuXHRcdFx0XHRcdFx0XHRcdFx0cmVxdWlyZWQ9e2ZhbHNlfVxuXHRcdFx0XHRcdFx0XHRcdFx0dmlzaWJsZT17dHJ1ZX1cblx0XHRcdFx0XHRcdFx0XHQvPlxuXHRcdFx0XHRcdFx0XHQ8L0Zvcm1FbGVtZW50PlxuXHRcdFx0XHRcdFx0KTtcblxuXHRcdFx0XHRcdFx0Y29uc3QgbmV3RmllbGQgPSB0aGlzLl9nZXRPd25lcigpPy5ydW5Bc093bmVyKCgpID0+IHtcblx0XHRcdFx0XHRcdFx0cmV0dXJuIChcblx0XHRcdFx0XHRcdFx0XHQ8RmllbGRcblx0XHRcdFx0XHRcdFx0XHRcdF9yZXF1aXJlc1ZhbGlkYXRpb249e3RydWV9XG5cdFx0XHRcdFx0XHRcdFx0XHR2YWxpZGF0ZUZpZWxkR3JvdXA9e3RoaXMub25WYWxpZGF0ZUZpZWxkR3JvdXBzLmJpbmQodGhpcyl9XG5cdFx0XHRcdFx0XHRcdFx0XHRmaWVsZEdyb3VwSWRzPXtcIkVhc3lGaWxsRmllbGRcIn1cblx0XHRcdFx0XHRcdFx0XHRcdG1ldGFQYXRoPXt1cGRhdGVkRmllbGR9XG5cdFx0XHRcdFx0XHRcdFx0XHRjb250ZXh0UGF0aD17dGhpcy5nZXRPd25lckNvbnRleHRQYXRoKCl9XG5cdFx0XHRcdFx0XHRcdFx0XHRjaGFuZ2U9e3RoaXMub25GaWVsZENoYW5nZS5iaW5kKHRoaXMpfVxuXHRcdFx0XHRcdFx0XHRcdC8+XG5cdFx0XHRcdFx0XHRcdCkgYXMgRmllbGQ7XG5cdFx0XHRcdFx0XHR9KSBhcyBFbmhhbmNlV2l0aFVJNTxGaWVsZD47XG5cdFx0XHRcdFx0XHRuZXdWYWx1ZXNGb3JtQ29udGFpbmVyLmFkZEZvcm1FbGVtZW50KFxuXHRcdFx0XHRcdFx0XHQ8Rm9ybUVsZW1lbnQgbGFiZWw9e2ZpZWxkTWFwcGluZ1t1cGRhdGVkRmllbGRdLmRlc2NyaXB0aW9ufT57eyBmaWVsZHM6IG5ld0ZpZWxkIH19PC9Gb3JtRWxlbWVudD5cblx0XHRcdFx0XHRcdCk7XG5cdFx0XHRcdFx0XHRjb25zdCBtZXRhTW9kZWwgPSB0aGlzLmdldE1ldGFNb2RlbCgpITtcblx0XHRcdFx0XHRcdGNvbnN0IHRhcmdldE1ldGFQYXRoID0gbWV0YU1vZGVsLmdldE1ldGFQYXRoKHRoaXMuX2JpbmRpbmdDb250ZXh0LmdldFBhdGgodXBkYXRlZEZpZWxkKSk7XG5cdFx0XHRcdFx0XHRjb25zdCBtZXRhTW9kZWxPYmogPSBtZXRhTW9kZWwuZ2V0T2JqZWN0KHRhcmdldE1ldGFQYXRoKTtcblx0XHRcdFx0XHRcdGNvbnN0IHZhbHVlRXhwcmVzc2lvbiA9IEFubm90YXRpb25IZWxwZXIuZm9ybWF0KG1ldGFNb2RlbE9iaiwge1xuXHRcdFx0XHRcdFx0XHRjb250ZXh0OiBtZXRhTW9kZWwuY3JlYXRlQmluZGluZ0NvbnRleHQodGFyZ2V0TWV0YVBhdGgpIVxuXHRcdFx0XHRcdFx0fSk7XG5cdFx0XHRcdFx0XHRjb25zdCBwYXJzZWRCaW5kaW5nID0gQmluZGluZ0luZm8ucGFyc2UodmFsdWVFeHByZXNzaW9uKTtcblx0XHRcdFx0XHRcdGxldCBlcnJvck1lc3NhZ2UgPSBcIlwiO1xuXHRcdFx0XHRcdFx0aWYgKHBhcnNlZEJpbmRpbmcgJiYgcGFyc2VkQmluZGluZy50eXBlKSB7XG5cdFx0XHRcdFx0XHRcdHRyeSB7XG5cdFx0XHRcdFx0XHRcdFx0cGFyc2VkQmluZGluZy50eXBlLnZhbGlkYXRlVmFsdWUodXBkYXRlZEZpZWxkc1t1cGRhdGVkRmllbGRdKTtcblx0XHRcdFx0XHRcdFx0fSBjYXRjaCAoZSkge1xuXHRcdFx0XHRcdFx0XHRcdHRoaXMuc3RhdGUuaGFzRXJyb3IgPSB0cnVlO1xuXHRcdFx0XHRcdFx0XHRcdGVycm9yTWVzc2FnZSA9IChlIGFzIEVycm9yKS5tZXNzYWdlO1xuXHRcdFx0XHRcdFx0XHR9XG5cdFx0XHRcdFx0XHR9XG5cblx0XHRcdFx0XHRcdC8vIEZldGNoIHRoZSB2YWx1ZSBsaXN0IGZvciB0aGUgZ2l2ZW4gcHJvcGVydHkgcGF0aFxuXHRcdFx0XHRcdFx0Y29uc3QgdmFsdWVMaXN0ID0gYXdhaXQgdGhpcy5fZ2V0VmFsdWVMaXN0KHRhcmdldE1ldGFQYXRoKTtcblxuXHRcdFx0XHRcdFx0Ly8gSW5pdGlhbGl6ZSBhIGZsYWcgdG8gdHJhY2sgdmFsaWRhdGlvbiBlcnJvcnNcblx0XHRcdFx0XHRcdGxldCBoYXNWSEVycm9yID0gZmFsc2U7XG5cblx0XHRcdFx0XHRcdC8vIENoZWNrIGlmIHRoZSB2YWx1ZSBsaXN0IGlzIHNlYXJjaGFibGUgYW5kIHZhbGlkYXRlIHRoZSB1cGRhdGVkIGZpZWxkIHZhbHVlc1xuXHRcdFx0XHRcdFx0aWYgKHZhbHVlTGlzdCAmJiBWYWx1ZUxpc3RIZWxwZXIuaXNWYWx1ZUxpc3RTZWFyY2hhYmxlKHRhcmdldE1ldGFQYXRoLCB2YWx1ZUxpc3QpKSB7XG5cdFx0XHRcdFx0XHRcdGNvbnN0IHZhbHVlcyA9IGF3YWl0IHJlc29sdmVUb2tlblZhbHVlKFxuXHRcdFx0XHRcdFx0XHRcdHZhbHVlTGlzdCxcblx0XHRcdFx0XHRcdFx0XHR7XG5cdFx0XHRcdFx0XHRcdFx0XHRvcGVyYXRvcjogRmlsdGVyT3BlcmF0b3IuRVEsXG5cdFx0XHRcdFx0XHRcdFx0XHRzZWxlY3RlZFZhbHVlczogW3VwZGF0ZWRGaWVsZHNbdXBkYXRlZEZpZWxkXSBhcyBzdHJpbmddXG5cdFx0XHRcdFx0XHRcdFx0fSxcblx0XHRcdFx0XHRcdFx0XHR0cnVlXG5cdFx0XHRcdFx0XHRcdCk7XG5cblx0XHRcdFx0XHRcdFx0Ly8gVXBkYXRlIHRoZSBmaWVsZCB2YWx1ZSBpZiBpdCBkaWZmZXJzIGZyb20gdGhlIHJlc29sdmVkIHZhbHVlXG5cdFx0XHRcdFx0XHRcdGlmICghdmFsdWVzWzBdLm5vTWF0Y2gpIHtcblx0XHRcdFx0XHRcdFx0XHR1cGRhdGVkRmllbGRzW3VwZGF0ZWRGaWVsZF0gPSB2YWx1ZXNbMF0uc2VsZWN0ZWRWYWx1ZXNbMF0udmFsdWU7XG5cdFx0XHRcdFx0XHRcdFx0ZXJyb3JNZXNzYWdlID0gXCJcIjtcblx0XHRcdFx0XHRcdFx0fSBlbHNlIHtcblx0XHRcdFx0XHRcdFx0XHR0aGlzLnN0YXRlLmhhc0Vycm9yID0gdHJ1ZTtcblx0XHRcdFx0XHRcdFx0XHRoYXNWSEVycm9yID0gdHJ1ZTtcblx0XHRcdFx0XHRcdFx0XHRlcnJvck1lc3NhZ2UgPSB0aGlzLmdldFRyYW5zbGF0ZWRUZXh0KFwiQ19FQVNZRURJVF9WSF9FUlJPUlwiLCB2YWx1ZXNbMF0uc2VsZWN0ZWRWYWx1ZXNbMF0udmFsdWUpO1xuXHRcdFx0XHRcdFx0XHR9XG5cdFx0XHRcdFx0XHR9XG5cblx0XHRcdFx0XHRcdC8vIFVzZSBhIHRpbWVvdXQgdG8gZW5zdXJlIHZhbGlkYXRpb24gcnVucyBjb3JyZWN0bHkgZm9yIHRoZSB1cGRhdGVkIGZpZWxkXG5cdFx0XHRcdFx0XHRzZXRUaW1lb3V0KCgpOiB2b2lkID0+IHtcblx0XHRcdFx0XHRcdFx0bmV3RmllbGQuc2V0VmFsdWUodXBkYXRlZEZpZWxkc1t1cGRhdGVkRmllbGRdIGFzIHN0cmluZyk7XG5cdFx0XHRcdFx0XHRcdGlmIChlcnJvck1lc3NhZ2UubGVuZ3RoID4gMCB8fCBoYXNWSEVycm9yKSB7XG5cdFx0XHRcdFx0XHRcdFx0Y29uc3QgbWVzc2FnZUlkID0gbmV3RmllbGQuYWRkTWVzc2FnZSh7IHR5cGU6IE1lc3NhZ2VUeXBlLkVycm9yLCBtZXNzYWdlOiBlcnJvck1lc3NhZ2UgfSk7XG5cdFx0XHRcdFx0XHRcdFx0bmV3RmllbGQuZGF0YShcIm1lc3NhZ2VJZFwiLCBtZXNzYWdlSWQpO1xuXHRcdFx0XHRcdFx0XHR9XG5cdFx0XHRcdFx0XHR9LCAyMDApO1xuXHRcdFx0XHRcdH0gZWxzZSB7XG5cdFx0XHRcdFx0XHRpbmNvcnJlY3RWYWx1ZXNbdXBkYXRlZEZpZWxkXSA9IHVwZGF0ZWRGaWVsZHNbdXBkYXRlZEZpZWxkXTtcblx0XHRcdFx0XHRcdHRoaXMuc3RhdGUuaGFzSW5jb3JyZWN0VmFsdWVzID0gdHJ1ZTtcblx0XHRcdFx0XHRcdHByZXZpb3VzVmFsdWVzRm9ybUNvbnRhaW5lcjIuYWRkRm9ybUVsZW1lbnQoXG5cdFx0XHRcdFx0XHRcdDxGb3JtRWxlbWVudCBsYWJlbD17ZmllbGRNYXBwaW5nW3VwZGF0ZWRGaWVsZF0/LmRlc2NyaXB0aW9uID8/IHVwZGF0ZWRGaWVsZH0+XG5cdFx0XHRcdFx0XHRcdFx0PEZpZWxkXG5cdFx0XHRcdFx0XHRcdFx0XHRtZXRhUGF0aD17dXBkYXRlZEZpZWxkfVxuXHRcdFx0XHRcdFx0XHRcdFx0Y29udGV4dFBhdGg9e3RoaXMuZ2V0T3duZXJDb250ZXh0UGF0aCgpfVxuXHRcdFx0XHRcdFx0XHRcdFx0cmVhZE9ubHk9e3RydWV9XG5cdFx0XHRcdFx0XHRcdFx0XHRyZXF1aXJlZD17ZmFsc2V9XG5cdFx0XHRcdFx0XHRcdFx0XHR2aXNpYmxlPXt0cnVlfVxuXHRcdFx0XHRcdFx0XHRcdC8+XG5cdFx0XHRcdFx0XHRcdDwvRm9ybUVsZW1lbnQ+XG5cdFx0XHRcdFx0XHQpO1xuXHRcdFx0XHRcdFx0bmV3VmFsdWVzRm9ybUNvbnRhaW5lcjIuYWRkRm9ybUVsZW1lbnQoXG5cdFx0XHRcdFx0XHRcdDxGb3JtRWxlbWVudCBsYWJlbD17ZmllbGRNYXBwaW5nW3VwZGF0ZWRGaWVsZF0/LmRlc2NyaXB0aW9uID8/IHVwZGF0ZWRGaWVsZH0+XG5cdFx0XHRcdFx0XHRcdFx0PEZpZWxkIG1ldGFQYXRoPXt1cGRhdGVkRmllbGR9IGNvbnRleHRQYXRoPXt0aGlzLmdldE93bmVyQ29udGV4dFBhdGgoKX0gcmVhZE9ubHk9e3RydWV9IC8+XG5cdFx0XHRcdFx0XHRcdDwvRm9ybUVsZW1lbnQ+XG5cdFx0XHRcdFx0XHQpO1xuXHRcdFx0XHRcdH1cblx0XHRcdFx0fVxuXG5cdFx0XHRcdCR2Qm94LmN1cnJlbnQ/LnNldEJpbmRpbmdDb250ZXh0KHRoaXMuZ2V0UGFnZUNvbnRyb2xsZXIoKS5nZXRWaWV3KCk/LmdldEJpbmRpbmdDb250ZXh0KCkpO1xuXHRcdFx0XHQkdkJveC5jdXJyZW50Py5zZXRNb2RlbCh0aGlzLmdldFBhZ2VDb250cm9sbGVyKCkuZ2V0TW9kZWwoKSk7XG5cdFx0XHRcdCR2Qm94LmN1cnJlbnQ/LnNldE1vZGVsKHRoaXMuZ2V0UGFnZUNvbnRyb2xsZXIoKS5nZXRNb2RlbChcInVpXCIpLCBcInVpXCIpO1xuXHRcdFx0XHRzZXRUaW1lb3V0KCgpOiB2b2lkID0+IHtcblx0XHRcdFx0XHR0aGlzLm9uVmFsaWRhdGVGaWVsZEdyb3VwcygpO1xuXHRcdFx0XHR9LCAxMDAwKTtcblxuXHRcdFx0XHR0aGlzLnN0YXRlLm5ld1ZhbHVlcyA9IG5ld1ZhbHVlcztcblx0XHRcdFx0dGhpcy5zdGF0ZS5pbmNvcnJlY3RWYWx1ZXMgPSBpbmNvcnJlY3RWYWx1ZXM7XG5cdFx0XHR9IGVsc2Uge1xuXHRcdFx0XHR0aGlzLnN0YXRlLmhhc1ZhbHVlcyA9IGZhbHNlO1xuXHRcdFx0XHR0aGlzLnN0YXRlLmhhc0luY29ycmVjdFZhbHVlcyA9IGZhbHNlO1xuXHRcdFx0XHR0aGlzLnN0YXRlLnN0YXRlVHlwZSA9IFwiRXJyb3JcIjtcblx0XHRcdFx0dGhpcy5zdGF0ZS5uZXdWYWx1ZXMgPSB7fTtcblx0XHRcdFx0dGhpcy5zdGF0ZS5pbmNvcnJlY3RWYWx1ZXMgPSB7fTtcblx0XHRcdH1cblx0XHR9IGNhdGNoIChlKSB7XG5cdFx0XHR0aGlzLnN0YXRlLmlzQnVzeSA9IGZhbHNlO1xuXHRcdFx0dGhpcy5zdGF0ZS5oYXNWYWx1ZXMgPSBmYWxzZTtcblx0XHRcdHRoaXMuc3RhdGUuaGFzSW5jb3JyZWN0VmFsdWVzID0gZmFsc2U7XG5cdFx0XHR0aGlzLnN0YXRlLnN0YXRlVHlwZSA9IFwiRXJyb3JcIjtcblx0XHRcdHRoaXMuc3RhdGUubmV3VmFsdWVzID0ge307XG5cdFx0XHR0aGlzLnN0YXRlLmluY29ycmVjdFZhbHVlcyA9IHt9O1xuXHRcdH1cblx0fVxuXG5cdGNyZWF0ZUNvbnRlbnQoKTogRGlhbG9nIHtcblx0XHRjb25zdCBlYXN5RWRpdERlc2NyaXB0aW9uID0gPEludmlzaWJsZVRleHQgdGV4dD17dGhpcy5nZXRUcmFuc2xhdGVkVGV4dChcIkNfRUFTWUVESVRfRElBTE9HX0RFU0NSSVBUSU9OXCIpfSAvPjtcblxuXHRcdGNvbnN0ICRlYXN5RmlsbEJ1dHRvbiA9IGNyZWF0ZVJlZmVyZW5jZTxCdXR0b24+KCk7XG5cdFx0Y29uc3QgJGVhc3lGaWxsU2F2ZUJ1dHRvbiA9IGNyZWF0ZVJlZmVyZW5jZTxCdXR0b24+KCk7XG5cdFx0Y29uc3QgJGVhc3lGaWxsQ2FuY2VsQnV0dG9uID0gY3JlYXRlUmVmZXJlbmNlPEJ1dHRvbj4oKTtcblx0XHRjb25zdCAkZWFzeUZpbGxDbGVhckFsbEJ1dHRvbiA9IGNyZWF0ZVJlZmVyZW5jZTxCdXR0b24+KCk7XG5cdFx0Y29uc3QgZGlhbG9nID0gKFxuXHRcdFx0PERpYWxvZ1xuXHRcdFx0XHR0aXRsZT17dGhpcy5nZXRUcmFuc2xhdGVkVGV4dChcIkNfRUFTWUVESVRfRElBTE9HX1RJVExFXCIpfVxuXHRcdFx0XHRyZXNpemFibGU9e3RydWV9XG5cdFx0XHRcdGhvcml6b250YWxTY3JvbGxpbmc9e2ZhbHNlfVxuXHRcdFx0XHR2ZXJ0aWNhbFNjcm9sbGluZz17ZmFsc2V9XG5cdFx0XHRcdGNvbnRlbnRXaWR0aD1cIjExMDBweFwiXG5cdFx0XHRcdGNvbnRlbnRIZWlnaHQ9e1wiODAwcHhcIn1cblx0XHRcdFx0ZXNjYXBlSGFuZGxlcj17KCk6IHZvaWQgPT4ge1xuXHRcdFx0XHRcdHRoaXMub25DYW5jZWwoKTtcblx0XHRcdFx0fX1cblx0XHRcdFx0YWZ0ZXJDbG9zZT17KCk6IHZvaWQgPT4ge1xuXHRcdFx0XHRcdHRoaXMuZGVzdHJveSgpO1xuXHRcdFx0XHR9fVxuXHRcdFx0PlxuXHRcdFx0XHR7e1xuXHRcdFx0XHRcdGNvbnRlbnQ6IChcblx0XHRcdFx0XHRcdDxGbGV4Qm94IGRpcmVjdGlvbj17RmxleERpcmVjdGlvbi5Sb3d9IHJlbmRlclR5cGU9e1wiQmFyZVwifSB3aWR0aD17XCIxMDAlXCJ9IGhlaWdodD17XCIxMDAlXCJ9PlxuXHRcdFx0XHRcdFx0XHQ8RmxleEJveFxuXHRcdFx0XHRcdFx0XHRcdHdpZHRoPXtcIjQwJVwifVxuXHRcdFx0XHRcdFx0XHRcdGlkPXt0aGlzLmNyZWF0ZUlkKFwiaW5wdXRBcmVhXCIpfVxuXHRcdFx0XHRcdFx0XHRcdGRpcmVjdGlvbj17RmxleERpcmVjdGlvbi5Db2x1bW59XG5cdFx0XHRcdFx0XHRcdFx0Y2xhc3M9e1wic2FwVWlDb250ZW50UGFkZGluZ1wifVxuXHRcdFx0XHRcdFx0XHRcdHJlbmRlclR5cGU9e1wiQmFyZVwifVxuXHRcdFx0XHRcdFx0XHQ+XG5cdFx0XHRcdFx0XHRcdFx0PEZvcm1hdHRlZFRleHRcblx0XHRcdFx0XHRcdFx0XHRcdGh0bWxUZXh0PXt0aGlzLmdldFRyYW5zbGF0ZWRUZXh0KFwiQ19FQVNZRURJVF9ESUFMT0dfREVTQ1JJUFRJT05cIil9XG5cdFx0XHRcdFx0XHRcdFx0XHRjbGFzcz17XCJzYXBVaVRpbnlNYXJnaW5Cb3R0b21cIn1cblx0XHRcdFx0XHRcdFx0XHQvPlxuXHRcdFx0XHRcdFx0XHRcdHtlYXN5RWRpdERlc2NyaXB0aW9ufVxuXHRcdFx0XHRcdFx0XHRcdDxUZXh0QXJlYVxuXHRcdFx0XHRcdFx0XHRcdFx0dmFsdWU9e3RoaXMuYmluZFN0YXRlKFwiZW50ZXJlZFRleHRcIil9XG5cdFx0XHRcdFx0XHRcdFx0XHRjbGFzcz17XCJzYXBVaVRpbnlNYXJnaW5Cb3R0b21cIn1cblx0XHRcdFx0XHRcdFx0XHRcdGxpdmVDaGFuZ2U9eyhlKTogdm9pZCA9PiB7XG5cdFx0XHRcdFx0XHRcdFx0XHRcdHRoaXMuc3RhdGUuY3VycmVudGx5RW50ZXJlZFRleHQgPSBlLmdldFBhcmFtZXRlcihcInZhbHVlXCIpID8/IFwiXCI7XG5cdFx0XHRcdFx0XHRcdFx0XHR9fVxuXHRcdFx0XHRcdFx0XHRcdFx0d2lkdGg9XCIxMDAlXCJcblx0XHRcdFx0XHRcdFx0XHRcdHBsYWNlaG9sZGVyPXt0aGlzLmdldFRyYW5zbGF0ZWRUZXh0KFwiQ19FQVNZRURJVF9URVhUQVJFQV9QTEFDRUhPTERFUlwiKX1cblx0XHRcdFx0XHRcdFx0XHRcdHJvd3M9ezIwfVxuXHRcdFx0XHRcdFx0XHRcdFx0Z3Jvd2luZz17dHJ1ZX1cblx0XHRcdFx0XHRcdFx0XHRcdGdyb3dpbmdNYXhMaW5lcz17MzB9XG5cdFx0XHRcdFx0XHRcdFx0XHRtYXhMZW5ndGg9e01BWF9MRU5HVEh9XG5cdFx0XHRcdFx0XHRcdFx0XHRhcmlhTGFiZWxsZWRCeT17ZWFzeUVkaXREZXNjcmlwdGlvbn1cblx0XHRcdFx0XHRcdFx0XHQvPlxuXHRcdFx0XHRcdFx0XHRcdDxUZXh0XG5cdFx0XHRcdFx0XHRcdFx0XHRjbGFzcz17XCJzYXBVaVRpbnlNYXJnaW5Cb3R0b21cIn1cblx0XHRcdFx0XHRcdFx0XHRcdHRleHQ9e3tcblx0XHRcdFx0XHRcdFx0XHRcdFx0cGF0aDogXCIvY3VycmVudGx5RW50ZXJlZFRleHRcIixcblx0XHRcdFx0XHRcdFx0XHRcdFx0bW9kZWw6IFwiJGNvbXBvbmVudFN0YXRlXCIsXG5cdFx0XHRcdFx0XHRcdFx0XHRcdGZvcm1hdHRlcjogdGhpcy5mb3JtYXRSZW1haW5pbmdDaGFyYWN0ZXJzLmJpbmQodGhpcylcblx0XHRcdFx0XHRcdFx0XHRcdH19XG5cdFx0XHRcdFx0XHRcdFx0PlxuXHRcdFx0XHRcdFx0XHRcdFx0e3sgbGF5b3V0RGF0YTogPEZsZXhJdGVtRGF0YSBhbGlnblNlbGY9XCJFbmRcIiAvPiB9fVxuXHRcdFx0XHRcdFx0XHRcdDwvVGV4dD5cblx0XHRcdFx0XHRcdFx0XHQ8SEJveD5cblx0XHRcdFx0XHRcdFx0XHRcdHt7IGxheW91dERhdGE6IDxGbGV4SXRlbURhdGEgYWxpZ25TZWxmPVwiRW5kXCIgLz4gfX1cblx0XHRcdFx0XHRcdFx0XHRcdDxCdXR0b25cblx0XHRcdFx0XHRcdFx0XHRcdFx0dGV4dD17dGhpcy5nZXRUcmFuc2xhdGVkVGV4dChcIkNfRUFTWUVESVRfQlVUVE9OXCIpfVxuXHRcdFx0XHRcdFx0XHRcdFx0XHRpY29uPXtcInNhcC1pY29uOi8vYWlcIn1cblx0XHRcdFx0XHRcdFx0XHRcdFx0ZW5hYmxlZD17bm90KGlzRW1wdHkodGhpcy5iaW5kU3RhdGUoXCJjdXJyZW50bHlFbnRlcmVkVGV4dFwiKSkpfVxuXHRcdFx0XHRcdFx0XHRcdFx0XHRwcmVzcz17dGhpcy5vbkVhc3lFZGl0UHJlc3NlZC5iaW5kKHRoaXMpfVxuXHRcdFx0XHRcdFx0XHRcdFx0XHRyZWY9eyRlYXN5RmlsbEJ1dHRvbn1cblx0XHRcdFx0XHRcdFx0XHRcdFx0Y2xhc3M9e1wic2FwVWlTbWFsbE1hcmdpbkVuZFwifVxuXHRcdFx0XHRcdFx0XHRcdFx0PjwvQnV0dG9uPlxuXHRcdFx0XHRcdFx0XHRcdFx0PEJ1dHRvblxuXHRcdFx0XHRcdFx0XHRcdFx0XHR0ZXh0PXt0aGlzLmdldFRyYW5zbGF0ZWRUZXh0KFwiQ19FQVNZRURJVF9ESUFMT0dfQ0xFQVJfQUxMXCIpfVxuXHRcdFx0XHRcdFx0XHRcdFx0XHR0eXBlPXtCdXR0b25UeXBlLlRyYW5zcGFyZW50fVxuXHRcdFx0XHRcdFx0XHRcdFx0XHRwcmVzcz17dGhpcy5vbkNsZWFyQWxsLmJpbmQodGhpcyl9XG5cdFx0XHRcdFx0XHRcdFx0XHRcdHJlZj17JGVhc3lGaWxsQ2xlYXJBbGxCdXR0b259XG5cdFx0XHRcdFx0XHRcdFx0XHQ+PC9CdXR0b24+XG5cdFx0XHRcdFx0XHRcdFx0PC9IQm94PlxuXHRcdFx0XHRcdFx0XHQ8L0ZsZXhCb3g+XG5cdFx0XHRcdFx0XHRcdDxGbGV4Qm94XG5cdFx0XHRcdFx0XHRcdFx0aWQ9e3RoaXMuY3JlYXRlSWQoXCJyZXZpZXdBcmVhXCIpfVxuXHRcdFx0XHRcdFx0XHRcdHJlZj17dGhpcy4kcmV2aWV3QXJlYX1cblx0XHRcdFx0XHRcdFx0XHR3aWR0aD17XCI2MCVcIn1cblx0XHRcdFx0XHRcdFx0XHRyZW5kZXJUeXBlPXtcIkJhcmVcIn1cblx0XHRcdFx0XHRcdFx0XHRidXN5PXt0aGlzLmJpbmRTdGF0ZShcImlzQnVzeVwiKX1cblx0XHRcdFx0XHRcdFx0XHRkaXJlY3Rpb249e0ZsZXhEaXJlY3Rpb24uQ29sdW1ufVxuXHRcdFx0XHRcdFx0XHRcdGNsYXNzPXtcInNhcEZlRWFzeUZpbGxSZXZpZXdBcmVhXCJ9XG5cdFx0XHRcdFx0XHRcdD5cblx0XHRcdFx0XHRcdFx0XHQ8SWxsdXN0cmF0ZWRNZXNzYWdlXG5cdFx0XHRcdFx0XHRcdFx0XHRpbGx1c3RyYXRpb25UeXBlPXtJbGx1c3RyYXRlZE1lc3NhZ2VUeXBlLk5vU2VhcmNoUmVzdWx0c31cblx0XHRcdFx0XHRcdFx0XHRcdGlsbHVzdHJhdGlvblNpemU9e0lsbHVzdHJhdGVkTWVzc2FnZVNpemUuTGFyZ2V9XG5cdFx0XHRcdFx0XHRcdFx0XHR0aXRsZT17dGhpcy5nZXRUcmFuc2xhdGVkVGV4dChcIkNfRUFTWUVESVRfRElBTE9HX1JFVklFV19USVRMRVwiKX1cblx0XHRcdFx0XHRcdFx0XHRcdGRlc2NyaXB0aW9uPXt0aGlzLmdldFRyYW5zbGF0ZWRUZXh0KFwiQ19FQVNZRURJVF9ESUFMT0dfUkVWSUVXX0RFU0NSSVBUSU9OXCIpfVxuXHRcdFx0XHRcdFx0XHRcdFx0dmlzaWJsZT17ZXF1YWwodGhpcy5iaW5kU3RhdGUoXCJzdGF0ZVR5cGVcIiksIFwiSW5pdGlhbFwiKX1cblx0XHRcdFx0XHRcdFx0XHQvPlxuXHRcdFx0XHRcdFx0XHRcdDxJbGx1c3RyYXRlZE1lc3NhZ2Vcblx0XHRcdFx0XHRcdFx0XHRcdGlsbHVzdHJhdGlvblR5cGU9e0lsbHVzdHJhdGVkTWVzc2FnZVR5cGUuTm9FbnRyaWVzfVxuXHRcdFx0XHRcdFx0XHRcdFx0aWxsdXN0cmF0aW9uU2l6ZT17SWxsdXN0cmF0ZWRNZXNzYWdlU2l6ZS5MYXJnZX1cblx0XHRcdFx0XHRcdFx0XHRcdHRpdGxlPXt0aGlzLmdldFRyYW5zbGF0ZWRUZXh0KFwiQ19FQVNZRURJVF9ESUFMT0dfTk9fRU5UUklFU19USVRMRVwiKX1cblx0XHRcdFx0XHRcdFx0XHRcdGRlc2NyaXB0aW9uPXt0aGlzLmdldFRyYW5zbGF0ZWRUZXh0KFwiQ19FQVNZRURJVF9ESUFMT0dfTk9fRU5UUklFU19ERVNDUklQVElPTlwiKX1cblx0XHRcdFx0XHRcdFx0XHRcdHZpc2libGU9e2VxdWFsKHRoaXMuYmluZFN0YXRlKFwic3RhdGVUeXBlXCIpLCBcIk5vRW50cmllc1wiKX1cblx0XHRcdFx0XHRcdFx0XHQvPlxuXHRcdFx0XHRcdFx0XHRcdDxJbGx1c3RyYXRlZE1lc3NhZ2Vcblx0XHRcdFx0XHRcdFx0XHRcdGlsbHVzdHJhdGlvblR5cGU9e0lsbHVzdHJhdGVkTWVzc2FnZVR5cGUuVW5hYmxlVG9Mb2FkfVxuXHRcdFx0XHRcdFx0XHRcdFx0aWxsdXN0cmF0aW9uU2l6ZT17SWxsdXN0cmF0ZWRNZXNzYWdlU2l6ZS5MYXJnZX1cblx0XHRcdFx0XHRcdFx0XHRcdHRpdGxlPXt0aGlzLmdldFRyYW5zbGF0ZWRUZXh0KFwiQ19FQVNZRURJVF9ESUFMT0dfRVJST1JfVElUTEVcIil9XG5cdFx0XHRcdFx0XHRcdFx0XHRkZXNjcmlwdGlvbj17dGhpcy5nZXRUcmFuc2xhdGVkVGV4dChcIkNfRUFTWUVESVRfRElBTE9HX0VSUk9SX0RFU0NSSVBUSU9OXCIpfVxuXHRcdFx0XHRcdFx0XHRcdFx0dmlzaWJsZT17ZXF1YWwodGhpcy5iaW5kU3RhdGUoXCJzdGF0ZVR5cGVcIiksIFwiRXJyb3JcIil9XG5cdFx0XHRcdFx0XHRcdFx0Lz5cblx0XHRcdFx0XHRcdFx0PC9GbGV4Qm94PlxuXHRcdFx0XHRcdFx0PC9GbGV4Qm94PlxuXHRcdFx0XHRcdCksXG5cdFx0XHRcdFx0Zm9vdGVyOiAoXG5cdFx0XHRcdFx0XHQ8T3ZlcmZsb3dUb29sYmFyPlxuXHRcdFx0XHRcdFx0XHQ8VG9vbGJhclNwYWNlciAvPlxuXHRcdFx0XHRcdFx0XHQ8QnV0dG9uXG5cdFx0XHRcdFx0XHRcdFx0dGV4dD17dGhpcy5nZXRUcmFuc2xhdGVkVGV4dChcIkNfRUFTWUVESVRfRElBTE9HX1NBVkVcIil9XG5cdFx0XHRcdFx0XHRcdFx0dHlwZT1cIkVtcGhhc2l6ZWRcIlxuXHRcdFx0XHRcdFx0XHRcdGVuYWJsZWQ9e2FuZCh0aGlzLmJpbmRTdGF0ZShcImhhc1ZhbHVlc1wiKSwgbm90KHRoaXMuYmluZFN0YXRlKFwiaGFzRXJyb3JcIikpKX1cblx0XHRcdFx0XHRcdFx0XHRwcmVzcz17dGhpcy5vbkNvbmZpcm0uYmluZCh0aGlzKX1cblx0XHRcdFx0XHRcdFx0XHRyZWY9eyRlYXN5RmlsbFNhdmVCdXR0b259XG5cdFx0XHRcdFx0XHRcdC8+XG5cdFx0XHRcdFx0XHRcdDxCdXR0b25cblx0XHRcdFx0XHRcdFx0XHR0ZXh0PXt0aGlzLmdldFRyYW5zbGF0ZWRUZXh0KFwiQ19FQVNZRURJVF9ESUFMT0dfQ0FOQ0VMXCIpfVxuXHRcdFx0XHRcdFx0XHRcdHR5cGU9XCJUcmFuc3BhcmVudFwiXG5cdFx0XHRcdFx0XHRcdFx0cHJlc3M9e3RoaXMub25DYW5jZWwuYmluZCh0aGlzKX1cblx0XHRcdFx0XHRcdFx0XHRyZWY9eyRlYXN5RmlsbENhbmNlbEJ1dHRvbn1cblx0XHRcdFx0XHRcdFx0Lz5cblx0XHRcdFx0XHRcdDwvT3ZlcmZsb3dUb29sYmFyPlxuXHRcdFx0XHRcdClcblx0XHRcdFx0fX1cblx0XHRcdDwvRGlhbG9nPlxuXHRcdCk7XG5cdFx0RkVTUkhlbHBlci5zZXRTZW1hbnRpY1N0ZXBuYW1lKCRlYXN5RmlsbEJ1dHRvbi5jdXJyZW50ISwgXCJwcmVzc1wiLCBcImZhaTplZjphbmFseXplVGV4dFwiKTtcblx0XHRGRVNSSGVscGVyLnNldFNlbWFudGljU3RlcG5hbWUoJGVhc3lGaWxsU2F2ZUJ1dHRvbi5jdXJyZW50ISwgXCJwcmVzc1wiLCBcImZhaTplZjpzYXZlXCIpO1xuXHRcdEZFU1JIZWxwZXIuc2V0U2VtYW50aWNTdGVwbmFtZSgkZWFzeUZpbGxDYW5jZWxCdXR0b24uY3VycmVudCEsIFwicHJlc3NcIiwgXCJmYWk6ZWY6Y2FuY2VsXCIpO1xuXHRcdEZFU1JIZWxwZXIuc2V0U2VtYW50aWNTdGVwbmFtZSgkZWFzeUZpbGxDbGVhckFsbEJ1dHRvbi5jdXJyZW50ISwgXCJwcmVzc1wiLCBcImZhaTplZjpjbGVhckFsbFwiKTtcblx0XHRyZXR1cm4gZGlhbG9nO1xuXHR9XG5cblx0YXN5bmMgX2dldFZhbHVlTGlzdChwcm9wZXJ0eVBhdGg6IHN0cmluZyk6IFByb21pc2U8VmFsdWVMaXN0SW5mbyB8IHVuZGVmaW5lZD4ge1xuXHRcdGNvbnN0IG1ldGFNb2RlbCA9IHRoaXMuZ2V0TWV0YU1vZGVsKCkhO1xuXHRcdGNvbnN0IHZhbHVlTGlzdHMgPSBhd2FpdCBWYWx1ZUxpc3RIZWxwZXIuZ2V0VmFsdWVMaXN0SW5mbyh1bmRlZmluZWQsIHByb3BlcnR5UGF0aCwgdW5kZWZpbmVkLCBtZXRhTW9kZWwpO1xuXHRcdHJldHVybiB2YWx1ZUxpc3RzWzBdO1xuXHR9XG59XG4iXSwibWFwcGluZ3MiOiI7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7O0VBeURBLE1BQU1BLFVBQVUsR0FBRyxJQUFJO0VBQUMsSUFHSEMsY0FBYyxJQUFBQyxJQUFBLEdBRGxDQyxjQUFjLENBQUMsaUNBQWlDLENBQUMsRUFBQUMsS0FBQSxHQWVoREMsZUFBZSxDQUFDLENBQUMsRUFBQUMsS0FBQSxHQUdqQkQsZUFBZSxDQUFDLENBQUMsRUFBQUUsS0FBQSxHQUdqQkMsUUFBUSxDQUFDO0lBQUVDLElBQUksRUFBRTtFQUFXLENBQUMsQ0FBQyxFQUFBUCxJQUFBLENBQUFRLE1BQUEsSUFBQUMsT0FBQSwwQkFBQUMsY0FBQTtJQUsvQixTQUFBWCxlQUFZWSxTQUFnRCxFQUFFQyxLQUFvQyxFQUFFO01BQUEsSUFBQUMsS0FBQTtNQUNuR0EsS0FBQSxHQUFBSCxjQUFBLENBQUFJLElBQUEsT0FBTUgsU0FBUyxFQUFFQyxLQUFLLENBQUM7TUFBQ0csMEJBQUEsQ0FBQUYsS0FBQSxpQkFBQUcsV0FBQSxFQUFBSCxLQUFBO01BQUFFLDBCQUFBLENBQUFGLEtBQUEsc0JBQUFJLFlBQUEsRUFBQUosS0FBQTtNQUFBRSwwQkFBQSxDQUFBRixLQUFBLHVCQUFBSyxZQUFBLEVBQUFMLEtBQUE7TUFBQSxPQUFBQSxLQUFBO0lBQ3pCO0lBQUNNLFFBQUEsR0FBQXBCLGNBQUE7SUFBQXFCLGNBQUEsQ0FBQXJCLGNBQUEsRUFBQVcsY0FBQTtJQUFBLElBQUFXLE1BQUEsR0FBQXRCLGNBQUEsQ0FBQXVCLFNBQUE7SUFBQUQsTUFBQSxDQUVERSxtQkFBbUIsR0FBbkIsU0FBQUEsbUJBQW1CQSxDQUFDQyxlQUFrQyxFQUFRO01BQzdEZCxjQUFBLENBQUFZLFNBQUEsQ0FBTUMsbUJBQW1CLENBQUFULElBQUEsT0FBQ1UsZUFBZTtN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
@@ -15,7 +15,6 @@ import type { DefinitionPage } from "sap/fe/core/definition/FEDefinition";
15
15
  import { getLabel, isComputed, isImmutable } from "sap/fe/core/templating/PropertyHelper";
16
16
  import Field from "sap/fe/macros/Field";
17
17
  import { resolveTokenValue } from "sap/fe/macros/ai/EasyFilterDataFetcher";
18
- import type FieldWrapper from "sap/fe/macros/controls/FieldWrapper";
19
18
  import ValueListHelper, { type ValueListInfo } from "sap/fe/macros/internal/valuehelp/ValueListHelper";
20
19
  import type { Button$PressEvent } from "sap/m/Button";
21
20
  import Button from "sap/m/Button";
@@ -27,7 +26,6 @@ import HBox from "sap/m/HBox";
27
26
  import IllustratedMessage from "sap/m/IllustratedMessage";
28
27
  import IllustratedMessageSize from "sap/m/IllustratedMessageSize";
29
28
  import IllustratedMessageType from "sap/m/IllustratedMessageType";
30
- import type Input from "sap/m/Input";
31
29
  import MessageStrip from "sap/m/MessageStrip";
32
30
  import MessageToast from "sap/m/MessageToast";
33
31
  import OverflowToolbar from "sap/m/OverflowToolbar";
@@ -40,15 +38,15 @@ import ToolbarSpacer from "sap/m/ToolbarSpacer";
40
38
  import VBox from "sap/m/VBox";
41
39
  import { ButtonType, FlexDirection } from "sap/m/library";
42
40
  import BindingInfo from "sap/ui/base/BindingInfo";
43
- import type ManagedObject from "sap/ui/base/ManagedObject";
41
+ import type UI5Event from "sap/ui/base/Event";
44
42
  import type { Control$ValidateFieldGroupEvent } from "sap/ui/core/Control";
45
43
  import InvisibleText from "sap/ui/core/InvisibleText";
46
44
  import CoreTitle from "sap/ui/core/Title";
45
+ import MessageType from "sap/ui/core/message/MessageType";
47
46
  import ColumnLayout from "sap/ui/layout/form/ColumnLayout";
48
47
  import Form from "sap/ui/layout/form/Form";
49
48
  import FormContainer from "sap/ui/layout/form/FormContainer";
50
49
  import FormElement from "sap/ui/layout/form/FormElement";
51
- import type MDCField from "sap/ui/mdc/Field";
52
50
  import type Context from "sap/ui/model/Context";
53
51
  import FilterOperator from "sap/ui/model/FilterOperator";
54
52
  import AnnotationHelper from "sap/ui/model/odata/v4/AnnotationHelper";
@@ -245,16 +243,22 @@ export default class EasyFillDialog extends BuildingBlock<
245
243
  this.state.incorrectValues = {};
246
244
  }
247
245
 
248
- onValidateFieldGroups(_e: Control$ValidateFieldGroupEvent): void {
246
+ onValidateFieldGroups(_e?: Control$ValidateFieldGroupEvent): void {
249
247
  const allFields = (this.$reviewArea.current?.getControlsByFieldGroupId("EasyFillField") as EnhanceWithUI5<Field>[]) ?? [];
250
248
  this.state.hasError = allFields.some((field: EnhanceWithUI5<Field>): boolean => {
251
249
  return (
252
- !!(field as { getValueState?: Function }).getValueState &&
253
- (field as { getValueState?: Function }).getValueState?.() === "Error"
250
+ !!field.data("messageId") ||
251
+ (!!(field as { getValueState?: Function }).getValueState &&
252
+ (field as { getValueState?: Function }).getValueState?.() === "Error")
254
253
  );
255
254
  });
256
255
  }
257
256
 
257
+ onFieldChange(ev: UI5Event<{}, Field>): void {
258
+ ev.getSource().removeMessage(ev.getSource().data("messageId"));
259
+ ev.getSource().data("messageId", undefined);
260
+ }
261
+
258
262
  async onEasyEditPressed(): Promise<void> {
259
263
  // Call the AI service
260
264
  // Process through chat completion API
@@ -332,7 +336,7 @@ export default class EasyFillDialog extends BuildingBlock<
332
336
  );
333
337
  FESRHelper.setSemanticStepname(thumbDownButton, "press", "fe4:ef:thumbDown");
334
338
  const aiNoticeText = (
335
- <HBox alignItems={"Center"}>
339
+ <HBox alignItems={"Center"} visible={this.bindState("hasValues")}>
336
340
  <AILinkNotice />
337
341
  <Text text={this.getTranslatedText("C_EASYEDIT_AI_NOTICE_TEXT")} class={"sapUiTinyMarginBegin"} />
338
342
  {thumbUpButton}, {thumbDownButton}
@@ -427,6 +431,7 @@ export default class EasyFillDialog extends BuildingBlock<
427
431
  fieldGroupIds={"EasyFillField"}
428
432
  metaPath={updatedField}
429
433
  contextPath={this.getOwnerContextPath()}
434
+ change={this.onFieldChange.bind(this)}
430
435
  />
431
436
  ) as Field;
432
437
  }) as EnhanceWithUI5<Field>;
@@ -440,11 +445,13 @@ export default class EasyFillDialog extends BuildingBlock<
440
445
  context: metaModel.createBindingContext(targetMetaPath)!
441
446
  });
442
447
  const parsedBinding = BindingInfo.parse(valueExpression);
448
+ let errorMessage = "";
443
449
  if (parsedBinding && parsedBinding.type) {
444
450
  try {
445
451
  parsedBinding.type.validateValue(updatedFields[updatedField]);
446
452
  } catch (e) {
447
453
  this.state.hasError = true;
454
+ errorMessage = (e as Error).message;
448
455
  }
449
456
  }
450
457
 
@@ -456,33 +463,32 @@ export default class EasyFillDialog extends BuildingBlock<
456
463
 
457
464
  // Check if the value list is searchable and validate the updated field values
458
465
  if (valueList && ValueListHelper.isValueListSearchable(targetMetaPath, valueList)) {
459
- const values = await resolveTokenValue(valueList, {
460
- operator: FilterOperator.EQ,
461
- selectedValues: [updatedFields[updatedField] as string]
462
- });
466
+ const values = await resolveTokenValue(
467
+ valueList,
468
+ {
469
+ operator: FilterOperator.EQ,
470
+ selectedValues: [updatedFields[updatedField] as string]
471
+ },
472
+ true
473
+ );
463
474
 
464
475
  // Update the field value if it differs from the resolved value
465
476
  if (!values[0].noMatch) {
466
477
  updatedFields[updatedField] = values[0].selectedValues[0].value;
478
+ errorMessage = "";
467
479
  } else {
468
480
  this.state.hasError = true;
469
481
  hasVHError = true;
482
+ errorMessage = this.getTranslatedText("C_EASYEDIT_VH_ERROR", values[0].selectedValues[0].value);
470
483
  }
471
484
  }
472
485
 
473
486
  // Use a timeout to ensure validation runs correctly for the updated field
474
487
  setTimeout((): void => {
475
- if (hasVHError) {
476
- // Update the inner VH content for validation
477
- (
478
- (
479
- (
480
- (newField.getContent() as EnhanceWithUI5<FieldWrapper>).getContentEdit()?.[0] as MDCField
481
- ).getAggregation("_content") as ManagedObject[]
482
- )?.[0] as Input
483
- ).setValue(updatedFields[updatedField] as string);
484
- } else {
485
- newField.setValue(updatedFields[updatedField] as string);
488
+ newField.setValue(updatedFields[updatedField] as string);
489
+ if (errorMessage.length > 0 || hasVHError) {
490
+ const messageId = newField.addMessage({ type: MessageType.Error, message: errorMessage });
491
+ newField.data("messageId", messageId);
486
492
  }
487
493
  }, 200);
488
494
  } else {
@@ -510,6 +516,9 @@ export default class EasyFillDialog extends BuildingBlock<
510
516
  $vBox.current?.setBindingContext(this.getPageController().getView()?.getBindingContext());
511
517
  $vBox.current?.setModel(this.getPageController().getModel());
512
518
  $vBox.current?.setModel(this.getPageController().getModel("ui"), "ui");
519
+ setTimeout((): void => {
520
+ this.onValidateFieldGroups();
521
+ }, 1000);
513
522
 
514
523
  this.state.newValues = newValues;
515
524
  this.state.incorrectValues = incorrectValues;