@sapui5/sap.fe.macros 1.141.0 → 1.142.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (217) hide show
  1. package/package.json +1 -1
  2. package/src/sap/fe/macros/.library +1 -1
  3. package/src/sap/fe/macros/Breadcrumbs.js +4 -10
  4. package/src/sap/fe/macros/Breadcrumbs.tsx +2 -8
  5. package/src/sap/fe/macros/Chart.js +34 -23
  6. package/src/sap/fe/macros/Chart.tsx +25 -11
  7. package/src/sap/fe/macros/CollaborativeDraftHandler.js +48 -31
  8. package/src/sap/fe/macros/CollaborativeDraftHandler.tsx +51 -26
  9. package/src/sap/fe/macros/CollectionBindingInfo.js +8 -2
  10. package/src/sap/fe/macros/CollectionBindingInfo.ts +11 -6
  11. package/src/sap/fe/macros/CommonHelper.js +14 -24
  12. package/src/sap/fe/macros/CommonHelper.ts +18 -25
  13. package/src/sap/fe/macros/Field.js +30 -13
  14. package/src/sap/fe/macros/Field.ts +60 -30
  15. package/src/sap/fe/macros/FooterContent.js +5 -2
  16. package/src/sap/fe/macros/FooterContent.tsx +6 -3
  17. package/src/sap/fe/macros/KPITag.js +1 -1
  18. package/src/sap/fe/macros/KPITag.tsx +3 -1
  19. package/src/sap/fe/macros/MacroAPI.js +3 -2
  20. package/src/sap/fe/macros/MacroAPI.ts +2 -2
  21. package/src/sap/fe/macros/MessageButton.js +3 -2
  22. package/src/sap/fe/macros/MessageButton.tsx +5 -2
  23. package/src/sap/fe/macros/MicroChart.js +10 -6
  24. package/src/sap/fe/macros/MicroChart.tsx +8 -2
  25. package/src/sap/fe/macros/MultiValueField.js +22 -36
  26. package/src/sap/fe/macros/MultiValueField.tsx +34 -66
  27. package/src/sap/fe/macros/RichTextEditor.js +3 -4
  28. package/src/sap/fe/macros/RichTextEditor.tsx +2 -3
  29. package/src/sap/fe/macros/Status.js +35 -8
  30. package/src/sap/fe/macros/Status.tsx +23 -2
  31. package/src/sap/fe/macros/ValueHelp.js +5 -2
  32. package/src/sap/fe/macros/ValueHelp.tsx +5 -0
  33. package/src/sap/fe/macros/ai/EasyFilterBar.js +7 -34
  34. package/src/sap/fe/macros/ai/EasyFilterBar.tsx +6 -35
  35. package/src/sap/fe/macros/ai/EasyFilterDataFetcher.js +31 -7
  36. package/src/sap/fe/macros/ai/EasyFilterDataFetcher.ts +33 -6
  37. package/src/sap/fe/macros/chart/Action.js +25 -2
  38. package/src/sap/fe/macros/chart/Action.ts +13 -0
  39. package/src/sap/fe/macros/chart/ActionGroup.js +25 -2
  40. package/src/sap/fe/macros/chart/ActionGroup.ts +13 -0
  41. package/src/sap/fe/macros/chart/ChartDelegate.js +8 -8
  42. package/src/sap/fe/macros/chart/ChartDelegate.ts +17 -12
  43. package/src/sap/fe/macros/chart/MdcChartTemplate.js +54 -11
  44. package/src/sap/fe/macros/chart/MdcChartTemplate.tsx +70 -11
  45. package/src/sap/fe/macros/chart/OverflowGroup.js +62 -0
  46. package/src/sap/fe/macros/chart/OverflowGroup.ts +22 -0
  47. package/src/sap/fe/macros/controls/FilterBar.js +39 -3
  48. package/src/sap/fe/macros/controls/FilterBar.ts +42 -1
  49. package/src/sap/fe/macros/controls/RadioButtons.js +18 -5
  50. package/src/sap/fe/macros/controls/RadioButtons.tsx +10 -1
  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/coreUI/OperationParameterDialog.js +37 -9
  54. package/src/sap/fe/macros/coreUI/OperationParameterDialog.tsx +45 -6
  55. package/src/sap/fe/macros/draftIndicator/DraftIndicator.js +4 -2
  56. package/src/sap/fe/macros/draftIndicator/DraftIndicator.tsx +3 -1
  57. package/src/sap/fe/macros/field/FieldFormatOptions.js +3 -3
  58. package/src/sap/fe/macros/field/FieldFormatOptions.ts +1 -1
  59. package/src/sap/fe/macros/field/FieldHelper.js +4 -3
  60. package/src/sap/fe/macros/field/FieldHelper.ts +7 -1
  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/field/FieldRuntimeHelper.js +3 -34
  64. package/src/sap/fe/macros/field/FieldRuntimeHelper.ts +28 -53
  65. package/src/sap/fe/macros/field/FieldTemplating.js +5 -4
  66. package/src/sap/fe/macros/field/FieldTemplating.ts +6 -4
  67. package/src/sap/fe/macros/filter/FilterFieldHelper.js +6 -4
  68. package/src/sap/fe/macros/filter/FilterFieldHelper.ts +7 -2
  69. package/src/sap/fe/macros/filter/FilterUtils.js +100 -36
  70. package/src/sap/fe/macros/filter/FilterUtils.ts +127 -39
  71. package/src/sap/fe/macros/filterBar/ExtendedSemanticDateOperators.js +2 -2
  72. package/src/sap/fe/macros/filterBar/ExtendedSemanticDateOperators.ts +1 -1
  73. package/src/sap/fe/macros/filterBar/FilterBar.block.js +4 -3
  74. package/src/sap/fe/macros/filterBar/FilterBar.block.tsx +19 -8
  75. package/src/sap/fe/macros/filterBar/FilterBarAPI.js +10 -7
  76. package/src/sap/fe/macros/filterBar/FilterBarAPI.ts +31 -16
  77. package/src/sap/fe/macros/filterBar/FilterBarDelegate.js +4 -3
  78. package/src/sap/fe/macros/filterBar/FilterBarDelegate.ts +5 -2
  79. package/src/sap/fe/macros/filterBar/mixin/FilterBarAPIStateHandler.js +4 -3
  80. package/src/sap/fe/macros/filterBar/mixin/FilterBarAPIStateHandler.ts +3 -2
  81. package/src/sap/fe/macros/form/Form.block.js +27 -2
  82. package/src/sap/fe/macros/form/Form.block.ts +31 -11
  83. package/src/sap/fe/macros/form/FormActionButtons.fragment.xml +13 -3
  84. package/src/sap/fe/macros/form/FormContainer.block.js +96 -65
  85. package/src/sap/fe/macros/form/FormContainer.block.ts +104 -65
  86. package/src/sap/fe/macros/formatters/TableFormatter.js +13 -10
  87. package/src/sap/fe/macros/formatters/TableFormatter.ts +11 -9
  88. package/src/sap/fe/macros/formatters/VisualFilterFormatter.js +6 -4
  89. package/src/sap/fe/macros/formatters/VisualFilterFormatter.ts +5 -5
  90. package/src/sap/fe/macros/inlineEdit/InlineEdit.js +5 -5
  91. package/src/sap/fe/macros/inlineEdit/InlineEdit.ts +4 -4
  92. package/src/sap/fe/macros/insights/InsightsService.js +3 -2
  93. package/src/sap/fe/macros/insights/InsightsService.ts +2 -1
  94. package/src/sap/fe/macros/internal/DataPoint.js +7 -8
  95. package/src/sap/fe/macros/internal/DataPoint.tsx +6 -9
  96. package/src/sap/fe/macros/internal/field/DisplayStyle.js +8 -6
  97. package/src/sap/fe/macros/internal/field/DisplayStyle.tsx +7 -8
  98. package/src/sap/fe/macros/internal/field/EditStyle.js +9 -20
  99. package/src/sap/fe/macros/internal/field/EditStyle.tsx +17 -41
  100. package/src/sap/fe/macros/internal/field/FieldBlockStructure.js +2 -2
  101. package/src/sap/fe/macros/internal/field/FieldBlockStructure.tsx +1 -1
  102. package/src/sap/fe/macros/internal/field/FieldStructure.js +1 -2
  103. package/src/sap/fe/macros/internal/field/FieldStructure.tsx +0 -2
  104. package/src/sap/fe/macros/internal/field/FieldStructureHelper.js +7 -7
  105. package/src/sap/fe/macros/internal/field/FieldStructureHelper.ts +17 -11
  106. package/src/sap/fe/macros/internal/helpers/DataPointTemplating.js +6 -2
  107. package/src/sap/fe/macros/internal/helpers/DataPointTemplating.ts +5 -1
  108. package/src/sap/fe/macros/internal/valuehelp/AdditionalValueFormatter.js +9 -6
  109. package/src/sap/fe/macros/internal/valuehelp/AdditionalValueFormatter.ts +7 -5
  110. package/src/sap/fe/macros/internal/valuehelp/TableDelegate.js +4 -4
  111. package/src/sap/fe/macros/internal/valuehelp/TableDelegate.ts +6 -6
  112. package/src/sap/fe/macros/internal/valuehelp/ValueListDialogTable.fragment.xml +5 -2
  113. package/src/sap/fe/macros/library.js +3 -3
  114. package/src/sap/fe/macros/library.ts +2 -0
  115. package/src/sap/fe/macros/mdc/adapter/StateHelper.js +15 -5
  116. package/src/sap/fe/macros/mdc/adapter/StateHelper.ts +21 -5
  117. package/src/sap/fe/macros/messagebundle.properties +7 -5
  118. package/src/sap/fe/macros/messagebundle_ar.properties +12 -3
  119. package/src/sap/fe/macros/messagebundle_bg.properties +13 -4
  120. package/src/sap/fe/macros/messagebundle_ca.properties +12 -3
  121. package/src/sap/fe/macros/messagebundle_cnr.properties +12 -3
  122. package/src/sap/fe/macros/messagebundle_cs.properties +11 -2
  123. package/src/sap/fe/macros/messagebundle_cy.properties +12 -3
  124. package/src/sap/fe/macros/messagebundle_da.properties +12 -3
  125. package/src/sap/fe/macros/messagebundle_de.properties +16 -7
  126. package/src/sap/fe/macros/messagebundle_el.properties +13 -4
  127. package/src/sap/fe/macros/messagebundle_en.properties +13 -4
  128. package/src/sap/fe/macros/messagebundle_en_GB.properties +13 -4
  129. package/src/sap/fe/macros/messagebundle_en_US_saprigi.properties +12 -3
  130. package/src/sap/fe/macros/messagebundle_es.properties +12 -3
  131. package/src/sap/fe/macros/messagebundle_es_MX.properties +12 -3
  132. package/src/sap/fe/macros/messagebundle_et.properties +12 -3
  133. package/src/sap/fe/macros/messagebundle_fi.properties +12 -3
  134. package/src/sap/fe/macros/messagebundle_fr.properties +12 -3
  135. package/src/sap/fe/macros/messagebundle_fr_CA.properties +12 -3
  136. package/src/sap/fe/macros/messagebundle_hi.properties +12 -3
  137. package/src/sap/fe/macros/messagebundle_hr.properties +13 -4
  138. package/src/sap/fe/macros/messagebundle_hu.properties +12 -3
  139. package/src/sap/fe/macros/messagebundle_id.properties +18 -9
  140. package/src/sap/fe/macros/messagebundle_it.properties +12 -3
  141. package/src/sap/fe/macros/messagebundle_iw.properties +12 -3
  142. package/src/sap/fe/macros/messagebundle_ja.properties +12 -3
  143. package/src/sap/fe/macros/messagebundle_kk.properties +11 -2
  144. package/src/sap/fe/macros/messagebundle_ko.properties +13 -4
  145. package/src/sap/fe/macros/messagebundle_lt.properties +12 -3
  146. package/src/sap/fe/macros/messagebundle_lv.properties +12 -3
  147. package/src/sap/fe/macros/messagebundle_mk.properties +12 -3
  148. package/src/sap/fe/macros/messagebundle_ms.properties +12 -3
  149. package/src/sap/fe/macros/messagebundle_nl.properties +12 -3
  150. package/src/sap/fe/macros/messagebundle_no.properties +12 -3
  151. package/src/sap/fe/macros/messagebundle_pl.properties +12 -3
  152. package/src/sap/fe/macros/messagebundle_pt.properties +12 -3
  153. package/src/sap/fe/macros/messagebundle_pt_PT.properties +12 -3
  154. package/src/sap/fe/macros/messagebundle_ro.properties +13 -4
  155. package/src/sap/fe/macros/messagebundle_ru.properties +12 -3
  156. package/src/sap/fe/macros/messagebundle_sh.properties +12 -3
  157. package/src/sap/fe/macros/messagebundle_sk.properties +12 -3
  158. package/src/sap/fe/macros/messagebundle_sl.properties +13 -4
  159. package/src/sap/fe/macros/messagebundle_sr.properties +12 -3
  160. package/src/sap/fe/macros/messagebundle_sv.properties +12 -3
  161. package/src/sap/fe/macros/messagebundle_th.properties +11 -2
  162. package/src/sap/fe/macros/messagebundle_tr.properties +12 -3
  163. package/src/sap/fe/macros/messagebundle_uk.properties +12 -3
  164. package/src/sap/fe/macros/messagebundle_vi.properties +13 -4
  165. package/src/sap/fe/macros/messagebundle_zh_CN.properties +12 -3
  166. package/src/sap/fe/macros/messagebundle_zh_TW.properties +12 -3
  167. package/src/sap/fe/macros/richtexteditor/ButtonGroup.js +2 -2
  168. package/src/sap/fe/macros/richtexteditor/ButtonGroup.ts +2 -2
  169. package/src/sap/fe/macros/table/Action.js +15 -2
  170. package/src/sap/fe/macros/table/Action.ts +11 -1
  171. package/src/sap/fe/macros/table/ActionGroup.js +15 -2
  172. package/src/sap/fe/macros/table/ActionGroup.ts +8 -0
  173. package/src/sap/fe/macros/table/ActionGroupOverride.js +14 -2
  174. package/src/sap/fe/macros/table/ActionGroupOverride.ts +7 -0
  175. package/src/sap/fe/macros/table/ActionOverride.js +14 -2
  176. package/src/sap/fe/macros/table/ActionOverride.ts +7 -0
  177. package/src/sap/fe/macros/table/ActionsTemplating.js +16 -2
  178. package/src/sap/fe/macros/table/ActionsTemplating.tsx +15 -0
  179. package/src/sap/fe/macros/table/MdcTableTemplate.js +91 -10
  180. package/src/sap/fe/macros/table/MdcTableTemplate.tsx +131 -10
  181. package/src/sap/fe/macros/table/OverflowGroups.js +59 -0
  182. package/src/sap/fe/macros/table/OverflowGroups.ts +27 -0
  183. package/src/sap/fe/macros/table/Table.block.js +70 -29
  184. package/src/sap/fe/macros/table/Table.block.tsx +65 -12
  185. package/src/sap/fe/macros/table/TableAPI.js +169 -131
  186. package/src/sap/fe/macros/table/TableAPI.ts +58 -28
  187. package/src/sap/fe/macros/table/TableDefinition.js +19 -2
  188. package/src/sap/fe/macros/table/TableDefinition.ts +17 -1
  189. package/src/sap/fe/macros/table/TableEventHandlerProvider.js +4 -3
  190. package/src/sap/fe/macros/table/TableEventHandlerProvider.ts +8 -9
  191. package/src/sap/fe/macros/table/TableHelper.js +5 -2
  192. package/src/sap/fe/macros/table/TableHelper.ts +5 -2
  193. package/src/sap/fe/macros/table/TableRuntime.js +2 -2
  194. package/src/sap/fe/macros/table/TableRuntime.ts +4 -6
  195. package/src/sap/fe/macros/table/TableSizeHelper.js +4 -4
  196. package/src/sap/fe/macros/table/TableSizeHelper.ts +6 -11
  197. package/src/sap/fe/macros/table/delegates/TableDelegate.js +67 -26
  198. package/src/sap/fe/macros/table/delegates/TableDelegate.ts +108 -118
  199. package/src/sap/fe/macros/table/massEdit/MassEditDialogHelper.js +2 -2
  200. package/src/sap/fe/macros/table/massEdit/MassEditDialogHelper.tsx +1 -1
  201. package/src/sap/fe/macros/table/massEdit/MassEditField.js +1 -1
  202. package/src/sap/fe/macros/table/massEdit/MassEditField.tsx +3 -6
  203. package/src/sap/fe/macros/table/mixin/EmptyRowsHandler.js +6 -5
  204. package/src/sap/fe/macros/table/mixin/EmptyRowsHandler.ts +10 -4
  205. package/src/sap/fe/macros/table/mixin/TableAPIStateHandler.js +7 -9
  206. package/src/sap/fe/macros/table/mixin/TableAPIStateHandler.ts +7 -8
  207. package/src/sap/fe/macros/table/mixin/TableExport.js +1 -1
  208. package/src/sap/fe/macros/table/mixin/TableExport.ts +3 -3
  209. package/src/sap/fe/macros/visualfilters/InteractiveChartHelper.js +4 -4
  210. package/src/sap/fe/macros/visualfilters/InteractiveChartHelper.ts +3 -3
  211. package/src/sap/fe/macros/visualfilters/VisualFilter.js +20 -2
  212. package/src/sap/fe/macros/visualfilters/VisualFilter.tsx +28 -6
  213. package/src/sap/fe/macros/visualfilters/VisualFilterRuntime.js +6 -3
  214. package/src/sap/fe/macros/visualfilters/VisualFilterRuntime.ts +4 -3
  215. package/src/sap/fe/macros/visualfilters/fragments/InteractiveCharts.js +3 -3
  216. package/src/sap/fe/macros/visualfilters/fragments/InteractiveCharts.tsx +10 -4
  217. package/src/sap/fe/macros/visualfilters/fragments/InteractiveDonutChart.fragment.xml +1 -1
@@ -2,18 +2,16 @@
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/fe/base/BindingToolkit", "sap/fe/base/ClassSupport", "sap/fe/core/helpers/BindingHelper", "sap/fe/core/helpers/StableIdHelper", "sap/fe/core/helpers/TypeGuards", "sap/fe/core/templating/DataModelPathHelper", "sap/fe/core/templating/UIFormatters", "sap/fe/macros/field/FieldHelper", "sap/fe/macros/field/FieldTemplating", "sap/ui/core/CustomData", "sap/ui/mdc/MultiValueField", "sap/ui/mdc/field/MultiValueFieldItem", "sap/fe/core/buildingBlocks/BuildingBlock", "sap/fe/core/controllerextensions/collaboration/CollaborationCommon", "sap/fe/core/controls/FormElementWrapper", "sap/fe/core/formatters/CollaborationFormatter", "sap/fe/core/helpers/ModelHelper", "sap/fe/core/templating/FieldControlHelper", "sap/fe/macros/field/FieldRuntime", "sap/fe/macros/multivaluefield/FormatOptions", "sap/fe/macros/multivaluefield/MultiValueFieldRuntime", "sap/m/Avatar", "sap/m/HBox", "sap/ui/base/Event", "sap/ui/core/Element", "./ValueHelp", "./field/FieldRuntimeHelper", "sap/fe/base/jsx-runtime/jsx"], function (BindingToolkit, ClassSupport, BindingHelper, ID, TypeGuards, DataModelPathHelper, UIFormatters, FieldHelper, FieldTemplating, CustomData, MultiValueField, MultiValueFieldItem, BuildingBlock, CollaborationCommon, FormElementWrapper, CollaborationFormatters, ModelHelper, FieldControlHelper, FieldRuntime, FormatOptions, MultiValueFieldRuntime, Avatar, HBox, UI5Event, Element, ValueHelp, FieldRuntimeHelper, _jsx) {
5
+ sap.ui.define(["sap/fe/base/BindingToolkit", "sap/fe/base/ClassSupport", "sap/fe/core/buildingBlocks/BuildingBlock", "sap/fe/core/controllerextensions/collaboration/CollaborationCommon", "sap/fe/core/controls/FormElementWrapper", "sap/fe/core/formatters/CollaborationFormatter", "sap/fe/core/helpers/BindingHelper", "sap/fe/core/helpers/ModelHelper", "sap/fe/core/helpers/StableIdHelper", "sap/fe/core/helpers/TypeGuards", "sap/fe/core/templating/DataModelPathHelper", "sap/fe/core/templating/FieldControlHelper", "sap/fe/core/templating/UIFormatters", "sap/fe/macros/field/FieldHelper", "sap/fe/macros/field/FieldRuntime", "sap/fe/macros/field/FieldTemplating", "sap/fe/macros/multivaluefield/FormatOptions", "sap/fe/macros/multivaluefield/MultiValueFieldRuntime", "sap/m/HBox", "sap/ui/core/CustomData", "sap/ui/core/Element", "sap/ui/mdc/MultiValueField", "sap/ui/mdc/field/MultiValueFieldItem", "./CollaborativeDraftHandler", "./ValueHelp", "sap/fe/base/jsx-runtime/jsx"], function (BindingToolkit, ClassSupport, BuildingBlock, CollaborationCommon, FormElementWrapper, CollaborationFormatters, BindingHelper, ModelHelper, ID, TypeGuards, DataModelPathHelper, FieldControlHelper, UIFormatters, FieldHelper, FieldRuntime, FieldTemplating, FormatOptions, MultiValueFieldRuntime, HBox, CustomData, Element, MultiValueField, MultiValueFieldItem, CollaborativeDraftHandler, ValueHelp, _jsx) {
6
6
  "use strict";
7
7
 
8
8
  var _dec, _dec2, _dec3, _dec4, _dec5, _dec6, _dec7, _dec8, _dec9, _dec10, _dec11, _dec12, _class, _class2, _descriptor, _descriptor2, _descriptor3, _descriptor4, _descriptor5, _descriptor6, _descriptor7, _descriptor8, _descriptor9, _descriptor10, _descriptor11;
9
9
  var _exports = {};
10
- var isRequiredExpression = FieldControlHelper.isRequiredExpression;
11
- var isReadOnlyExpression = FieldControlHelper.isReadOnlyExpression;
12
- var CollaborationFieldGroupPrefix = CollaborationCommon.CollaborationFieldGroupPrefix;
13
10
  var getVisibleExpression = FieldTemplating.getVisibleExpression;
14
11
  var getValueBinding = FieldTemplating.getValueBinding;
15
12
  var getDisplayMode = UIFormatters.getDisplayMode;
16
- var getCollaborationExpression = UIFormatters.getCollaborationExpression;
13
+ var isRequiredExpression = FieldControlHelper.isRequiredExpression;
14
+ var isReadOnlyExpression = FieldControlHelper.isReadOnlyExpression;
17
15
  var isPathInsertable = DataModelPathHelper.isPathInsertable;
18
16
  var isPathDeletable = DataModelPathHelper.isPathDeletable;
19
17
  var getTargetObjectPath = DataModelPathHelper.getTargetObjectPath;
@@ -25,6 +23,7 @@ sap.ui.define(["sap/fe/base/BindingToolkit", "sap/fe/base/ClassSupport", "sap/fe
25
23
  var isPathAnnotationExpression = TypeGuards.isPathAnnotationExpression;
26
24
  var isMultipleNavigationProperty = TypeGuards.isMultipleNavigationProperty;
27
25
  var UI = BindingHelper.UI;
26
+ var CollaborationFieldGroupPrefix = CollaborationCommon.CollaborationFieldGroupPrefix;
28
27
  var property = ClassSupport.property;
29
28
  var implementInterface = ClassSupport.implementInterface;
30
29
  var defineUI5Class = ClassSupport.defineUI5Class;
@@ -97,10 +96,6 @@ sap.ui.define(["sap/fe/base/BindingToolkit", "sap/fe/base/ClassSupport", "sap/fe
97
96
  * DataModelPath for the corresponding property displayed.
98
97
  */
99
98
 
100
- /**
101
- * Property to be displayed
102
- */
103
-
104
99
  /**
105
100
  * Edit Mode of the field.
106
101
  * If the editMode is undefined then we compute it based on the metadata
@@ -313,7 +308,6 @@ sap.ui.define(["sap/fe/base/BindingToolkit", "sap/fe/base/ClassSupport", "sap/fe
313
308
  this.convertedDataField = dataFieldDataModelPath.targetObject;
314
309
  this.dataModelPath = enhanceDataModelPath(dataFieldDataModelPath, this.convertedDataField.Value.path);
315
310
  this.dataSourcePath = getTargetObjectPath(this.dataModelPath);
316
- this.property = this.dataModelPath.targetObject;
317
311
  let insertable = isPathInsertable(this.dataModelPath);
318
312
  const deleteNavigationRestriction = isPathDeletable(this.dataModelPath, {
319
313
  ignoreTargetCollection: true,
@@ -379,8 +373,6 @@ sap.ui.define(["sap/fe/base/BindingToolkit", "sap/fe/base/ClassSupport", "sap/fe
379
373
  if (this.isCollaborationDraftSupported() && this.editMode !== "Display") {
380
374
  this.collaborationEnabled = true;
381
375
  this.collaborationExpression = UIFormatters.getCollaborationExpression(this.dataModelPath, CollaborationFormatters.hasCollaborationActivity);
382
- this.collaborationInitialsExpression = compileExpression(getCollaborationExpression(this.dataModelPath, CollaborationFormatters.getCollaborationActivityInitials));
383
- this.collaborationColorExpression = compileExpression(getCollaborationExpression(this.dataModelPath, CollaborationFormatters.getCollaborationActivityColor));
384
376
  }
385
377
  };
386
378
  _proto.getRequired = function getRequired() {
@@ -407,7 +399,6 @@ sap.ui.define(["sap/fe/base/BindingToolkit", "sap/fe/base/ClassSupport", "sap/fe
407
399
  this.vhIdPrefix = this.createId("FieldValueHelp");
408
400
  }
409
401
  const controller = this._getOwner()?.getRootController();
410
- const view = controller.getView();
411
402
  const odataMetaModel = this._getOwner()?.getMetaModel();
412
403
  const metaContext = odataMetaModel?.createBindingContext(metaContextPath.getPath());
413
404
  const context = odataMetaModel?.createBindingContext(metaContextPath.getContextPath());
@@ -448,7 +439,7 @@ sap.ui.define(["sap/fe/base/BindingToolkit", "sap/fe/base/ClassSupport", "sap/fe
448
439
  required: compileExpression(and(UI.IsEditable, isRequiredExpression(this.convertedDataField))),
449
440
  change: MultiValueFieldRuntime.handleChange.bind(MultiValueFieldRuntime, controller),
450
441
  fieldGroupIds: this.fieldGroupIds,
451
- validateFieldGroup: FieldRuntime.onValidateFieldGroup,
442
+ validateFieldGroup: this.onValidateFieldGroup.bind(this),
452
443
  children: {
453
444
  items: _jsx(MultiValueFieldItem, {
454
445
  description: this.item.description
@@ -460,16 +451,11 @@ sap.ui.define(["sap/fe/base/BindingToolkit", "sap/fe/base/ClassSupport", "sap/fe
460
451
  });
461
452
  let formwrapper = null;
462
453
  if (this.collaborationEnabled) {
463
- const avatar = _jsx(Avatar, {
464
- visible: this.collaborationExpression,
465
- initials: this.collaborationInitialsExpression,
466
- displaySize: "Custom",
467
- customDisplaySize: "1.5rem",
468
- customFontSize: "0.8rem",
469
- backgroundColor: this.collaborationColorExpression,
470
- press: () => {
471
- FieldRuntimeHelper.showCollaborationEditUser(avatar, view);
472
- }
454
+ const propertyPath = getContextRelativeTargetObjectPath(this.dataModelPath);
455
+ const collDraftHandler = _jsx(CollaborativeDraftHandler, {
456
+ metaPath: propertyPath,
457
+ contextPath: this.contextPath,
458
+ showAvatar: true
473
459
  });
474
460
  formwrapper = _jsx(FormElementWrapper, {
475
461
  children: _jsx(HBox, {
@@ -477,7 +463,7 @@ sap.ui.define(["sap/fe/base/BindingToolkit", "sap/fe/base/ClassSupport", "sap/fe
477
463
  renderType: "Bare",
478
464
  alignItems: "End",
479
465
  children: {
480
- items: [multiValueField, avatar]
466
+ items: [multiValueField, collDraftHandler]
481
467
  }
482
468
  })
483
469
  });
@@ -490,16 +476,6 @@ sap.ui.define(["sap/fe/base/BindingToolkit", "sap/fe/base/ClassSupport", "sap/fe
490
476
  currentMultiValueField?.focus();
491
477
  });
492
478
  }
493
- },
494
- onfocusout: evt => {
495
- let currentMultiValueField = evt.srcControl.getParent();
496
- if (currentMultiValueField?.isA("sap.m.Tokenizer")) {
497
- currentMultiValueField = currentMultiValueField.getParent()?.getParent();
498
- }
499
- const event = new UI5Event("", currentMultiValueField, {
500
- fieldGroupIds: currentMultiValueField.getFieldGroupIds()
501
- });
502
- controller.collaborativeDraft.handleContentFocusOut(event);
503
479
  }
504
480
  }, this);
505
481
  const valueHelpControl = Element.getElementById(multiValueField.getValueHelp());
@@ -516,6 +492,16 @@ sap.ui.define(["sap/fe/base/BindingToolkit", "sap/fe/base/ClassSupport", "sap/fe
516
492
  }
517
493
  }
518
494
 
495
+ /**
496
+ * Callback when the user leaves the MVF.
497
+ * @param event
498
+ */;
499
+ _proto.onValidateFieldGroup = function onValidateFieldGroup(event) {
500
+ const controller = this._getOwner()?.getRootController();
501
+ controller.collaborativeDraft.handleContentFocusOut(event);
502
+ FieldRuntime.onValidateFieldGroup(event);
503
+ }
504
+
519
505
  /**
520
506
  * Setter for the readOnly property.
521
507
  * @param readOnly
@@ -652,4 +638,4 @@ sap.ui.define(["sap/fe/base/BindingToolkit", "sap/fe/base/ClassSupport", "sap/fe
652
638
  _exports = MultiValueFieldBlock;
653
639
  return _exports;
654
640
  }, false);
655
- //# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJuYW1lcyI6WyJNdWx0aVZhbHVlRmllbGRCbG9jayIsIl9kZWMiLCJkZWZpbmVVSTVDbGFzcyIsIl9kZWMyIiwiaW1wbGVtZW50SW50ZXJmYWNlIiwiX2RlYzMiLCJwcm9wZXJ0eSIsInR5cGUiLCJfZGVjNCIsImFzc29jaWF0aW9uIiwiX2RlYzUiLCJfZGVjNiIsInJlcXVpcmVkIiwiX2RlYzciLCJfZGVjOCIsIl9kZWM5IiwiaXNCaW5kaW5nSW5mbyIsIl9kZWMxMCIsImFnZ3JlZ2F0aW9uIiwibXVsdGlwbGUiLCJkZWZhdWx0Q2xhc3MiLCJGb3JtYXRPcHRpb25zIiwiX2RlYzExIiwiX2RlYzEyIiwiX2NsYXNzIiwiX2NsYXNzMiIsIl9CdWlsZGluZ0Jsb2NrIiwicHJvcHMiLCJvdGhlcnMiLCJfdGhpcyIsIl9pc0luRWRpdE1vZGUiLCJjb21waWxlRXhwcmVzc2lvbiIsIlVJIiwiSXNFZGl0YWJsZSIsImNhbGwiLCJfaW5pdGlhbGl6ZXJEZWZpbmVQcm9wZXJ0eSIsIl9kZXNjcmlwdG9yIiwiX2Rlc2NyaXB0b3IyIiwiX2Rlc2NyaXB0b3IzIiwiX2Rlc2NyaXB0b3I0IiwiX2Rlc2NyaXB0b3I1IiwiX2Rlc2NyaXB0b3I2IiwiX2Rlc2NyaXB0b3I3IiwiX2Rlc2NyaXB0b3I4IiwiX2Rlc2NyaXB0b3I5IiwiX2Rlc2NyaXB0b3IxMCIsIl9kZXNjcmlwdG9yMTEiLCJfZXhwb3J0cyIsIl9pbmhlcml0c0xvb3NlIiwiX3Byb3RvIiwicHJvdG90eXBlIiwiX292ZXJyaWRlVmFsdWUiLCJjb2xsZWN0aW9uQmluZGluZyIsIml0ZW1EYXRhTW9kZWxPYmplY3RQYXRoIiwidGV4dEV4cHJlc3Npb24iLCJrZXkiLCJpdGVtcyIsIm1vZGVsIiwibW9kZWxOYW1lIiwicGF0aCIsImNvbW1vblRhcmdldE9iamVjdFByb3BlcnR5IiwidGFyZ2V0T2JqZWN0IiwiY29tbW9uUHJvcGVydHlQYXRoIiwibmFtZSIsImlzUGF0aEFubm90YXRpb25FeHByZXNzaW9uIiwiYW5ub3RhdGlvbnMiLCJDb21tb24iLCJUZXh0IiwiZGVzY3JpcHRpb24iLCJfZ2V0TXVsdGlJbnB1dFNldHRpbmdzIiwicHJvcGVydHlEYXRhTW9kZWxPYmplY3RQYXRoIiwiZm9ybWF0T3B0aW9ucyIsInBhdGhTdHJ1Y3R1cmUiLCJfZ2V0UGF0aFN0cnVjdHVyZSIsImNvbGxlY3Rpb25QYXRoIiwibWV0YVBhdGgiLCJzdGFydHNXaXRoIiwiY29udGV4dExvY2F0aW9uIiwic3RhcnRpbmdFbnRpdHlTZXQiLCJ1c2VQYXJlbnRCaW5kaW5nQ2FjaGUiLCJ0ZW1wbGF0ZVNoYXJlYWJsZSIsInBhcmFtZXRlcnMiLCIkJG93blJlcXVlc3QiLCJwcm9wZXJ0eVBhdGhPclByb3BlcnR5IiwicHJvcGVydHlEZWZpbml0aW9uIiwiaXNQcm9wZXJ0eVBhdGhFeHByZXNzaW9uIiwiJHRhcmdldCIsImNvbW1vblRleHQiLCJyZWxhdGl2ZUxvY2F0aW9uIiwiZ2V0UmVsYXRpdmVQYXRocyIsImdldEV4cHJlc3Npb25Gcm9tQW5ub3RhdGlvbiIsImdldFZhbHVlQmluZGluZyIsImRpc3BsYXlPbmx5IiwibGVuZ3RoIiwiZGF0YU1vZGVsT2JqZWN0UGF0aCIsImZpcnN0Q29sbGVjdGlvblBhdGgiLCJjdXJyZW50RW50aXR5U2V0IiwidGFyZ2V0RW50aXR5U2V0IiwibmF2aWdhdGVkUGF0aHMiLCJjb250ZXh0TmF2c0Zvckl0ZW0iLCJuYXZpZ2F0aW9uUHJvcGVydGllcyIsIm5hdlByb3AiLCJ1bmRlZmluZWQiLCJzb21lIiwiY29udGV4dE5hdlByb3AiLCJmdWxseVF1YWxpZmllZE5hbWUiLCJwdXNoIiwibmF2aWdhdGlvblByb3BlcnR5QmluZGluZyIsImhhc093blByb3BlcnR5IiwiaXNNdWx0aXBsZU5hdmlnYXRpb25Qcm9wZXJ0eSIsImpvaW4iLCJPYmplY3QiLCJhc3NpZ24iLCJjb21wdXRlRmllbGRHcm91cElkcyIsImFwcENvbXBvbmVudCIsInNpZGVFZmZlY3RTZXJ2aWNlIiwiZ2V0U2lkZUVmZmVjdHNTZXJ2aWNlIiwiZmllbGRHcm91cElkcyIsImRhdGFNb2RlbFBhdGgiLCJ0YXJnZXRFbnRpdHlUeXBlIiwiY29sbGFib3JhdGlvbkVuYWJsZWQiLCJjb2xsYWJvcmF0aW9uRmllbGRHcm91cCIsIkNvbGxhYm9yYXRpb25GaWVsZEdyb3VwUHJlZml4IiwiZGF0YVNvdXJjZVBhdGgiLCJyZXN1bHQiLCJpbml0aWFsaXplIiwibWV0YUNvbnRleHRQYXRoIiwib3duZXIiLCJfZ2V0T3duZXIiLCJjb250ZXh0UGF0aCIsInByZXByb2Nlc3NvckNvbnRleHQiLCJmdWxsQ29udGV4dFBhdGgiLCJvZGF0YU1ldGFNb2RlbCIsImdldE1ldGFNb2RlbCIsIm1ldGFDb250ZXh0IiwiY3JlYXRlQmluZGluZ0NvbnRleHQiLCJnZXRQYXRoIiwibWV0YVBhdGhPYmplY3QiLCJnZXRUYXJnZXQiLCJpc1Byb3BlcnR5IiwiRGF0YUZpZWxkRGVmYXVsdCIsImVuaGFuY2VkTWV0YVBhdGgiLCJkYXRhRmllbGREYXRhTW9kZWxQYXRoIiwiZ2V0RGF0YU1vZGVsT2JqZWN0Rm9yTWV0YVBhdGgiLCJjb252ZXJ0ZWREYXRhRmllbGQiLCJlbmhhbmNlRGF0YU1vZGVsUGF0aCIsIlZhbHVlIiwiZ2V0VGFyZ2V0T2JqZWN0UGF0aCIsImluc2VydGFibGUiLCJpc1BhdGhJbnNlcnRhYmxlIiwiZGVsZXRlTmF2aWdhdGlvblJlc3RyaWN0aW9uIiwiaXNQYXRoRGVsZXRhYmxlIiwiaWdub3JlVGFyZ2V0Q29sbGVjdGlvbiIsImF1dGhvcml6ZVVucmVzb2x2YWJsZSIsImRlbGV0ZVBhdGgiLCJkZWxldGFibGUiLCJpZkVsc2UiLCJfdHlwZSIsIm9yIiwibm90IiwiaXNDb25zdGFudCIsImNvbnN0YW50IiwicmVhZE9ubHkiLCJ2aXNpYmxlIiwiZ2V0VmlzaWJsZUV4cHJlc3Npb24iLCJpbnNlcnRhYmxlQW5kRGVsZXRhYmxlIiwiYW5kIiwiY29sbGFib3JhdGlvbkV4cHJlc3Npb24iLCJjb21wdXRlQ29sbGFib3JhdGlvblByb3BlcnRpZXMiLCJpc1Byb3BlcnR5SW5pdGlhbCIsImVkaXRNb2RlIiwiZXF1YWwiLCJpc1JlYWRPbmx5RXhwcmVzc2lvbiIsImRpc3BsYXlNb2RlIiwiZ2V0RGlzcGxheU1vZGUiLCJsb2NhbERhdGFNb2RlbFBhdGgiLCJpdGVtIiwiY29sbGVjdGlvbiIsImdldEFwcENvbXBvbmVudCIsIm9uTWV0YWRhdGFBdmFpbGFibGUiLCJjb250ZW50IiwiY3JlYXRlQ29udGVudCIsImlzQ29sbGFib3JhdGlvbkRyYWZ0U3VwcG9ydGVkIiwiTW9kZWxIZWxwZXIiLCJVSUZvcm1hdHRlcnMiLCJnZXRDb2xsYWJvcmF0aW9uRXhwcmVzc2lvbiIsIkNvbGxhYm9yYXRpb25Gb3JtYXR0ZXJzIiwiaGFzQ29sbGFib3JhdGlvbkFjdGl2aXR5IiwiY29sbGFib3JhdGlvbkluaXRpYWxzRXhwcmVzc2lvbiIsImdldENvbGxhYm9yYXRpb25BY3Rpdml0eUluaXRpYWxzIiwiY29sbGFib3JhdGlvbkNvbG9yRXhwcmVzc2lvbiIsImdldENvbGxhYm9yYXRpb25BY3Rpdml0eUNvbG9yIiwiZ2V0UmVxdWlyZWQiLCJnZXRNdWx0aVZhbHVlRmllbGQiLCJnZXRJdGVtcyIsImdldE1ldGFQYXRoT2JqZWN0IiwiaWQiLCJ2aElkUHJlZml4IiwiSUQiLCJnZW5lcmF0ZSIsImdldElkIiwiY3JlYXRlSWQiLCJjb250cm9sbGVyIiwiZ2V0Um9vdENvbnRyb2xsZXIiLCJ2aWV3IiwiZ2V0VmlldyIsImNvbnRleHQiLCJnZXRDb250ZXh0UGF0aCIsIml0ZW1zQWdncmVnYXRpb24iLCJjdXN0b21BZ2dyZWdhdGlvbkxlbmd0aCIsImdldE1hbmlmZXN0RW50cnkiLCJtYWNyb3MiLCJtdWx0aVZhbHVlRmllbGQiLCJpdGVtc1NpemVMaW1pdCIsImxhYmVsIiwiRmllbGRIZWxwZXIiLCJjb21wdXRlTGFiZWxUZXh0IiwidmhDb250cm9sIiwiVmFsdWVIZWxwIiwiZ2V0VmFsdWVIZWxwRm9yTWV0YVBhdGgiLCJnZXRQYWdlQ29udHJvbGxlciIsImdldENvbnRleHRSZWxhdGl2ZVRhcmdldE9iamVjdFBhdGgiLCJnZXRPd25lckNvbnRleHRQYXRoIiwidmFsdWVIZWxwIiwiZ2V0Q29udGVudCIsIl9qc3giLCJNdWx0aVZhbHVlRmllbGQiLCJkZWxlZ2F0ZSIsImRpc3BsYXkiLCJ3aWR0aCIsImFyaWFMYWJlbGxlZEJ5Iiwic2hvd0VtcHR5SW5kaWNhdG9yIiwiaXNSZXF1aXJlZEV4cHJlc3Npb24iLCJjaGFuZ2UiLCJNdWx0aVZhbHVlRmllbGRSdW50aW1lIiwiaGFuZGxlQ2hhbmdlIiwiYmluZCIsInZhbGlkYXRlRmllbGRHcm91cCIsIkZpZWxkUnVudGltZSIsIm9uVmFsaWRhdGVGaWVsZEdyb3VwIiwiY2hpbGRyZW4iLCJNdWx0aVZhbHVlRmllbGRJdGVtIiwiY3VzdG9tRGF0YSIsIkN1c3RvbURhdGEiLCJ2YWx1ZSIsImZvcm13cmFwcGVyIiwiYXZhdGFyIiwiQXZhdGFyIiwiaW5pdGlhbHMiLCJkaXNwbGF5U2l6ZSIsImN1c3RvbURpc3BsYXlTaXplIiwiY3VzdG9tRm9udFNpemUiLCJiYWNrZ3JvdW5kQ29sb3IiLCJwcmVzcyIsIkZpZWxkUnVudGltZUhlbHBlciIsInNob3dDb2xsYWJvcmF0aW9uRWRpdFVzZXIiLCJGb3JtRWxlbWVudFdyYXBwZXIiLCJIQm94IiwicmVuZGVyVHlwZSIsImFsaWduSXRlbXMiLCJhZGRFdmVudERlbGVnYXRlIiwib25mb2N1c2luIiwiZXZ0IiwiY3VycmVudE11bHRpVmFsdWVGaWVsZCIsInNyY0NvbnRyb2wiLCJnZXRQYXJlbnQiLCJjb2xsYWJvcmF0aXZlRHJhZnQiLCJoYW5kbGVDb250ZW50Rm9jdXNJbiIsInZhbHVlSGVscENvbnRyb2wiLCJnZXREb21SZWYiLCJhdHRhY2hFdmVudE9uY2UiLCJmb2N1cyIsIm9uZm9jdXNvdXQiLCJpc0EiLCJldmVudCIsIlVJNUV2ZW50IiwiZ2V0RmllbGRHcm91cElkcyIsImhhbmRsZUNvbnRlbnRGb2N1c091dCIsIkVsZW1lbnQiLCJnZXRFbGVtZW50QnlJZCIsImdldFZhbHVlSGVscCIsImF0dGFjaE9wZW5lZCIsImdldFNvdXJjZSIsImdldENvbnRyb2wiLCJhZGRDdXN0b21EYXRhIiwic2V0UmVhZE9ubHkiLCJzZXRQcm9wZXJ0eSIsInVwZGF0ZUVkaXRNb2RlIiwic2V0X2lzSW5FZGl0TW9kZSIsImluRWRpdE1vZGUiLCJtdWx0aXZhbHVlRmllbGQiLCJkYXRhIiwic2V0RWRpdE1vZGUiLCJvbkJlZm9yZVJlbmRlcmluZyIsImFBcmlhTGFiZWxsZWRCeSIsImdldEFyaWFMYWJlbGxlZEJ5Iiwic0lkIiwiYUFyaWFMYWJlbGxlZEJ5cyIsImluY2x1ZGVzIiwiYWRkQXJpYUxhYmVsbGVkQnkiLCJCdWlsZGluZ0Jsb2NrIiwiX2FwcGx5RGVjb3JhdGVkRGVzY3JpcHRvciIsImNvbmZpZ3VyYWJsZSIsImVudW1lcmFibGUiLCJ3cml0YWJsZSIsImluaXRpYWxpemVyIl0sInNvdXJjZVJvb3QiOiIuIiwic291cmNlcyI6WyJNdWx0aVZhbHVlRmllbGQudHN4Il0sInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB0eXBlIHsgUHJvcGVydHkgfSBmcm9tIFwiQHNhcC11eC92b2NhYnVsYXJpZXMtdHlwZXNcIjtcbmltcG9ydCB0eXBlIHsgUGF0aEFubm90YXRpb25FeHByZXNzaW9uLCBQcm9wZXJ0eVBhdGggfSBmcm9tIFwiQHNhcC11eC92b2NhYnVsYXJpZXMtdHlwZXMvRWRtXCI7XG5pbXBvcnQgdHlwZSB7IERhdGFGaWVsZCwgRGF0YUZpZWxkVHlwZXMgfSBmcm9tIFwiQHNhcC11eC92b2NhYnVsYXJpZXMtdHlwZXMvdm9jYWJ1bGFyaWVzL1VJXCI7XG5pbXBvcnQgeyBVSUFubm90YXRpb25UZXJtcyB9IGZyb20gXCJAc2FwLXV4L3ZvY2FidWxhcmllcy10eXBlcy92b2NhYnVsYXJpZXMvVUlcIjtcbmltcG9ydCB0eXBlIHsgQmluZGluZ1Rvb2xraXRFeHByZXNzaW9uLCBDb21waWxlZEJpbmRpbmdUb29sa2l0RXhwcmVzc2lvbiB9IGZyb20gXCJzYXAvZmUvYmFzZS9CaW5kaW5nVG9vbGtpdFwiO1xuaW1wb3J0IHtcblx0YW5kLFxuXHRjb21waWxlRXhwcmVzc2lvbixcblx0Y29uc3RhbnQsXG5cdGVxdWFsLFxuXHRnZXRFeHByZXNzaW9uRnJvbUFubm90YXRpb24sXG5cdGlmRWxzZSxcblx0aXNDb25zdGFudCxcblx0bm90LFxuXHRvclxufSBmcm9tIFwic2FwL2ZlL2Jhc2UvQmluZGluZ1Rvb2xraXRcIjtcbmltcG9ydCB7XG5cdGFnZ3JlZ2F0aW9uLFxuXHRhc3NvY2lhdGlvbixcblx0ZGVmaW5lVUk1Q2xhc3MsXG5cdGltcGxlbWVudEludGVyZmFjZSxcblx0cHJvcGVydHksXG5cdHR5cGUgRW5oYW5jZVdpdGhVSTUsXG5cdHR5cGUgUHJvcGVydGllc09mXG59IGZyb20gXCJzYXAvZmUvYmFzZS9DbGFzc1N1cHBvcnRcIjtcbmltcG9ydCB0eXBlIEFwcENvbXBvbmVudCBmcm9tIFwic2FwL2ZlL2NvcmUvQXBwQ29tcG9uZW50XCI7XG5pbXBvcnQgeyBVSSB9IGZyb20gXCJzYXAvZmUvY29yZS9oZWxwZXJzL0JpbmRpbmdIZWxwZXJcIjtcbmltcG9ydCAqIGFzIElEIGZyb20gXCJzYXAvZmUvY29yZS9oZWxwZXJzL1N0YWJsZUlkSGVscGVyXCI7XG5pbXBvcnQge1xuXHRpc011bHRpcGxlTmF2aWdhdGlvblByb3BlcnR5LFxuXHRpc1BhdGhBbm5vdGF0aW9uRXhwcmVzc2lvbixcblx0aXNQcm9wZXJ0eSxcblx0aXNQcm9wZXJ0eVBhdGhFeHByZXNzaW9uXG59IGZyb20gXCJzYXAvZmUvY29yZS9oZWxwZXJzL1R5cGVHdWFyZHNcIjtcbmltcG9ydCB0eXBlIHsgRGF0YU1vZGVsT2JqZWN0UGF0aCB9IGZyb20gXCJzYXAvZmUvY29yZS90ZW1wbGF0aW5nL0RhdGFNb2RlbFBhdGhIZWxwZXJcIjtcbmltcG9ydCB7XG5cdGVuaGFuY2VEYXRhTW9kZWxQYXRoLFxuXHRnZXRDb250ZXh0UmVsYXRpdmVUYXJnZXRPYmplY3RQYXRoLFxuXHRnZXRSZWxhdGl2ZVBhdGhzLFxuXHRnZXRUYXJnZXRPYmplY3RQYXRoLFxuXHRpc1BhdGhEZWxldGFibGUsXG5cdGlzUGF0aEluc2VydGFibGVcbn0gZnJvbSBcInNhcC9mZS9jb3JlL3RlbXBsYXRpbmcvRGF0YU1vZGVsUGF0aEhlbHBlclwiO1xuaW1wb3J0IHR5cGUgeyBEaXNwbGF5TW9kZSB9IGZyb20gXCJzYXAvZmUvY29yZS90ZW1wbGF0aW5nL1VJRm9ybWF0dGVyc1wiO1xuaW1wb3J0IHsgZ2V0Q29sbGFib3JhdGlvbkV4cHJlc3Npb24sIGdldERpc3BsYXlNb2RlIH0gZnJvbSBcInNhcC9mZS9jb3JlL3RlbXBsYXRpbmcvVUlGb3JtYXR0ZXJzXCI7XG5pbXBvcnQgRmllbGRIZWxwZXIgZnJvbSBcInNhcC9mZS9tYWNyb3MvZmllbGQvRmllbGRIZWxwZXJcIjtcbmltcG9ydCB7IGdldFZhbHVlQmluZGluZywgZ2V0VmlzaWJsZUV4cHJlc3Npb24gfSBmcm9tIFwic2FwL2ZlL21hY3Jvcy9maWVsZC9GaWVsZFRlbXBsYXRpbmdcIjtcbmltcG9ydCB0eXBlIFRva2VuaXplciBmcm9tIFwic2FwL20vVG9rZW5pemVyXCI7XG5pbXBvcnQgdHlwZSB7IFByb3BlcnR5QmluZGluZ0luZm8gfSBmcm9tIFwic2FwL3VpL2Jhc2UvTWFuYWdlZE9iamVjdFwiO1xuaW1wb3J0IHR5cGUgQ29udHJvbCBmcm9tIFwic2FwL3VpL2NvcmUvQ29udHJvbFwiO1xuaW1wb3J0IEN1c3RvbURhdGEgZnJvbSBcInNhcC91aS9jb3JlL0N1c3RvbURhdGFcIjtcbmltcG9ydCBNdWx0aVZhbHVlRmllbGQgZnJvbSBcInNhcC91aS9tZGMvTXVsdGlWYWx1ZUZpZWxkXCI7XG5pbXBvcnQgdHlwZSBGaWVsZEVkaXRNb2RlIGZyb20gXCJzYXAvdWkvbWRjL2VudW1zL0ZpZWxkRWRpdE1vZGVcIjtcbmltcG9ydCBNdWx0aVZhbHVlRmllbGRJdGVtIGZyb20gXCJzYXAvdWkvbWRjL2ZpZWxkL011bHRpVmFsdWVGaWVsZEl0ZW1cIjtcbmltcG9ydCB0eXBlIENvbnRleHQgZnJvbSBcInNhcC91aS9tb2RlbC9vZGF0YS92NC9Db250ZXh0XCI7XG5cbmltcG9ydCB0eXBlIFBhZ2VDb250cm9sbGVyIGZyb20gXCJzYXAvZmUvY29yZS9QYWdlQ29udHJvbGxlclwiO1xuaW1wb3J0IEJ1aWxkaW5nQmxvY2sgZnJvbSBcInNhcC9mZS9jb3JlL2J1aWxkaW5nQmxvY2tzL0J1aWxkaW5nQmxvY2tcIjtcbmltcG9ydCB7IENvbGxhYm9yYXRpb25GaWVsZEdyb3VwUHJlZml4IH0gZnJvbSBcInNhcC9mZS9jb3JlL2NvbnRyb2xsZXJleHRlbnNpb25zL2NvbGxhYm9yYXRpb24vQ29sbGFib3JhdGlvbkNvbW1vblwiO1xuaW1wb3J0IEZvcm1FbGVtZW50V3JhcHBlciBmcm9tIFwic2FwL2ZlL2NvcmUvY29udHJvbHMvRm9ybUVsZW1lbnRXcmFwcGVyXCI7XG5pbXBvcnQgKiBhcyBDb2xsYWJvcmF0aW9uRm9ybWF0dGVycyBmcm9tIFwic2FwL2ZlL2NvcmUvZm9ybWF0dGVycy9Db2xsYWJvcmF0aW9uRm9ybWF0dGVyXCI7XG5pbXBvcnQgdHlwZSBNZXRhUGF0aCBmcm9tIFwic2FwL2ZlL2NvcmUvaGVscGVycy9NZXRhUGF0aFwiO1xuaW1wb3J0IE1vZGVsSGVscGVyIGZyb20gXCJzYXAvZmUvY29yZS9oZWxwZXJzL01vZGVsSGVscGVyXCI7XG5pbXBvcnQgeyBpc1JlYWRPbmx5RXhwcmVzc2lvbiwgaXNSZXF1aXJlZEV4cHJlc3Npb24gfSBmcm9tIFwic2FwL2ZlL2NvcmUvdGVtcGxhdGluZy9GaWVsZENvbnRyb2xIZWxwZXJcIjtcbmltcG9ydCAqIGFzIFVJRm9ybWF0dGVycyBmcm9tIFwic2FwL2ZlL2NvcmUvdGVtcGxhdGluZy9VSUZvcm1hdHRlcnNcIjtcbmltcG9ydCBGaWVsZFJ1bnRpbWUgZnJvbSBcInNhcC9mZS9tYWNyb3MvZmllbGQvRmllbGRSdW50aW1lXCI7XG5pbXBvcnQgRm9ybWF0T3B0aW9ucyBmcm9tIFwic2FwL2ZlL21hY3Jvcy9tdWx0aXZhbHVlZmllbGQvRm9ybWF0T3B0aW9uc1wiO1xuaW1wb3J0IE11bHRpVmFsdWVGaWVsZFJ1bnRpbWUgZnJvbSBcInNhcC9mZS9tYWNyb3MvbXVsdGl2YWx1ZWZpZWxkL011bHRpVmFsdWVGaWVsZFJ1bnRpbWVcIjtcbmltcG9ydCBBdmF0YXIgZnJvbSBcInNhcC9tL0F2YXRhclwiO1xuaW1wb3J0IEhCb3ggZnJvbSBcInNhcC9tL0hCb3hcIjtcbmltcG9ydCBVSTVFdmVudCBmcm9tIFwic2FwL3VpL2Jhc2UvRXZlbnRcIjtcbmltcG9ydCB0eXBlIHsgJENvbnRyb2xTZXR0aW5ncyB9IGZyb20gXCJzYXAvdWkvY29yZS9Db250cm9sXCI7XG5pbXBvcnQgRWxlbWVudCBmcm9tIFwic2FwL3VpL2NvcmUvRWxlbWVudFwiO1xuaW1wb3J0IHR5cGUgeyBkZWZhdWx0IGFzIE1kY1ZhbHVlSGVscCwgVmFsdWVIZWxwJE9wZW5lZEV2ZW50IH0gZnJvbSBcInNhcC91aS9tZGMvVmFsdWVIZWxwXCI7XG5pbXBvcnQgdHlwZSB7IE1ldGFNb2RlbFR5cGUgfSBmcm9tIFwiLi4vLi4vLi4vLi4vLi4vLi4vdHlwZXMvbWV0YW1vZGVsX3R5cGVzXCI7XG5pbXBvcnQgVmFsdWVIZWxwIGZyb20gXCIuL1ZhbHVlSGVscFwiO1xuaW1wb3J0IEZpZWxkUnVudGltZUhlbHBlciBmcm9tIFwiLi9maWVsZC9GaWVsZFJ1bnRpbWVIZWxwZXJcIjtcblxudHlwZSBNdWx0aUlucHV0U2V0dGluZ3MgPSB7XG5cdGRlc2NyaXB0aW9uOiBCaW5kaW5nVG9vbGtpdEV4cHJlc3Npb248c3RyaW5nPiB8IENvbXBpbGVkQmluZGluZ1Rvb2xraXRFeHByZXNzaW9uO1xuXHRjb2xsZWN0aW9uQmluZGluZzogUHJvcGVydHlCaW5kaW5nSW5mbztcblx0a2V5OiBCaW5kaW5nVG9vbGtpdEV4cHJlc3Npb248c3RyaW5nPiB8IENvbXBpbGVkQmluZGluZ1Rvb2xraXRFeHByZXNzaW9uO1xuXHRkaXNwbGF5T25seT86IGJvb2xlYW47XG59O1xuXG50eXBlIE11bHRpVmFsdWVGaWVsZFBhdGhTdHJ1Y3R1cmUgPSB7XG5cdGNvbGxlY3Rpb25QYXRoOiBzdHJpbmc7XG5cdGl0ZW1EYXRhTW9kZWxPYmplY3RQYXRoOiBEYXRhTW9kZWxPYmplY3RQYXRoPFByb3BlcnR5Pjtcbn07XG5cbi8qKlxuICogQnVpbGRpbmcgYmxvY2sgZm9yIGNyZWF0aW5nIGEgTXVsdGlWYWx1ZUZpZWxkIGJhc2VkIG9uIHRoZSBtZXRhZGF0YSBwcm92aWRlZCBieSBPRGF0YSBWNC5cbiAqIDxicj5cbiAqIFRoZSBNdWx0aVZhbHVlRmllbGQgY2FuIGJlIHVzZWQgdG8gZGlzcGxheSBlaXRoZXIgYSBEYXRhRmllbGQgb3IgUHJvcGVydHkgZGlyZWN0bHkuIEl0IGhhcyB0byBwb2ludCB0byBhIGNvbGxlY3Rpb24gcHJvcGVydHkuXG4gKiA8YnI+XG4gKiBVc2FnZSBleGFtcGxlOlxuICogPHByZT5cbiAqICZsdDttYWNybzpNdWx0aVZhbHVlRmllbGRcbiAqIGlkPVwiU29tZVVuaXF1ZUlkZW50aWZpZXJcIlxuICogY29udGV4dFBhdGg9XCJ7ZW50aXR5U2V0Jmd0O31cIlxuICogbWV0YVBhdGg9XCJ7ZGF0YUZpZWxkJmd0O31cIlxuICogLyZndDtcbiAqIDwvcHJlPlxuICogQGFsaWFzIHNhcC5mZS5tYWNyb3MuTXVsdGlWYWx1ZUZpZWxkXG4gKiBAcHVibGljXG4gKiBAc2luY2UgMS4xMTguMFxuICovXG5cbkBkZWZpbmVVSTVDbGFzcyhcInNhcC5mZS5tYWNyb3MuTXVsdGlWYWx1ZUZpZWxkXCIpXG5leHBvcnQgZGVmYXVsdCBjbGFzcyBNdWx0aVZhbHVlRmllbGRCbG9jayBleHRlbmRzIEJ1aWxkaW5nQmxvY2s8Q29udHJvbD4ge1xuXHRAaW1wbGVtZW50SW50ZXJmYWNlKFwic2FwLnVpLmNvcmUuSUZvcm1Db250ZW50XCIpXG5cdF9faW1wbGVtZW50c19fc2FwX3VpX2NvcmVfSUZvcm1Db250ZW50ID0gdHJ1ZTtcblxuXHQvKipcblx0ICogVGhlICdpZCcgcHJvcGVydHlcblx0ICovXG5cdEBwcm9wZXJ0eSh7XG5cdFx0dHlwZTogXCJzdHJpbmdcIlxuXHR9KVxuXHRwdWJsaWMgaWQ/OiBzdHJpbmc7XG5cblx0LyoqXG5cdCAqIFByZWZpeCBhZGRlZCB0byB0aGUgZ2VuZXJhdGVkIElEIG9mIHRoZSBmaWVsZCAtIG9ubHkgaWYgbm8gaWQgaXMgcHJvdmlkZWRcblx0ICovXG5cdEBhc3NvY2lhdGlvbih7XG5cdFx0dHlwZTogXCJzdHJpbmdcIlxuXHR9KVxuXHRpZFByZWZpeD86IHN0cmluZztcblxuXHQvKipcblx0ICogUHJlZml4IGFkZGVkIHRvIHRoZSBnZW5lcmF0ZWQgSUQgb2YgdGhlIHZhbHVlIGhlbHAgdXNlZCBmb3IgdGhlIGZpZWxkXG5cdCAqL1xuXHRAYXNzb2NpYXRpb24oe1xuXHRcdHR5cGU6IFwic3RyaW5nXCJcblx0fSlcblx0dmhJZFByZWZpeCE6IHN0cmluZztcblxuXHQvKipcblx0ICogRGVmaW5lcyB0aGUgcmVsYXRpdmUgTWV0YWRhdGEgcGF0aCB0byB0aGUgTXVsdGlWYWx1ZUZpZWxkLlxuXHQgKiBUaGUgbWV0YVBhdGggc2hvdWxkIHBvaW50IHRvIGEgUHJvcGVydHkgb3IgRGF0YUZpZWxkLlxuXHQgKiBAcHVibGljXG5cdCAqL1xuXHRAcHJvcGVydHkoe1xuXHRcdHR5cGU6IFwic3RyaW5nXCIsXG5cdFx0cmVxdWlyZWQ6IHRydWVcblx0fSlcblx0cHVibGljIG1ldGFQYXRoITogc3RyaW5nO1xuXG5cdC8qKlxuXHQgKiBUaGUgcmVhZE9ubHkgZmxhZ1xuXHQgKiBAcHVibGljXG5cdCAqL1xuXHRAcHJvcGVydHkoeyB0eXBlOiBcImJvb2xlYW5cIiwgcmVxdWlyZWQ6IGZhbHNlIH0pXG5cdHB1YmxpYyByZWFkT25seT86IGJvb2xlYW4gfCBDb21waWxlZEJpbmRpbmdUb29sa2l0RXhwcmVzc2lvbjtcblxuXHQvKipcblx0ICogVGhlIGNvbnRleHQgcGF0aCBwcm92aWRlZCBmb3IgdGhlIE11bHRpVmFsdWVGaWVsZFxuXHQgKiBAcHVibGljXG5cdCAqL1xuXHRAcHJvcGVydHkoe1xuXHRcdHR5cGU6IFwic3RyaW5nXCJcblx0fSlcblx0cHVibGljIGNvbnRleHRQYXRoPzogc3RyaW5nO1xuXG5cdC8qKlxuXHQgKiBQcm9wZXJ0eSBhZGRlZCB0byBiZSBhYmxlIHRvIGFkZCBkYXRhIC8gaXRlbXMgdG8gdGhlIG11bHRpLWlucHV0IGZpZWxkIHVzaW5nIGEgZGlmZmVyZW50IG1vZGVsXG5cdCAqIEBwdWJsaWNcblx0ICovXG5cdEBwcm9wZXJ0eSh7XG5cdFx0dHlwZTogXCJhbnlcIixcblx0XHRpc0JpbmRpbmdJbmZvOiB0cnVlXG5cdH0pXG5cdHB1YmxpYyBpdGVtcz86IFByb3BlcnR5QmluZGluZ0luZm87XG5cblx0LyoqXG5cdCAqIFRoZSBvYmplY3Qgd2l0aCB0aGUgZm9ybWF0dGluZyBvcHRpb25zXG5cdCAqXG5cdCAqL1xuXHRAYWdncmVnYXRpb24oeyB0eXBlOiBcInNhcC5mZS5tYWNyb3MubXVsdGl2YWx1ZWZpZWxkLkZvcm1hdE9wdGlvbnNcIiwgbXVsdGlwbGU6IGZhbHNlLCBkZWZhdWx0Q2xhc3M6IEZvcm1hdE9wdGlvbnMgfSlcblx0Zm9ybWF0T3B0aW9ucz86IEZvcm1hdE9wdGlvbnM7XG5cblx0QHByb3BlcnR5KHsgdHlwZTogXCJib29sZWFuXCIgfSlcblx0X2lzSW5FZGl0TW9kZTogYm9vbGVhbiB8IENvbXBpbGVkQmluZGluZ1Rvb2xraXRFeHByZXNzaW9uID0gZmFsc2U7XG5cblx0QHByb3BlcnR5KHsgdHlwZTogXCJib29sZWFuXCIgfSlcblx0dXNlUGFyZW50QmluZGluZ0NhY2hlID0gZmFsc2U7XG5cblx0Ly8gQ29tcHV0ZWQgcHJvcGVydGllc1xuXG5cdHByaXZhdGUgaXRlbSE6IE11bHRpSW5wdXRTZXR0aW5ncztcblxuXHQvKipcblx0ICogUG9pbnRlZCBhdCBhIGRhdGFGaWVsZC4gVGhpcyBjYW4gYmUgRGF0YUZpZWxkRGVmYXVsdCBmcm9tIGEgcHJvcGVydHkuXG5cdCAqL1xuXHRwcml2YXRlIGNvbnZlcnRlZERhdGFGaWVsZCE6IERhdGFGaWVsZDtcblxuXHQvKipcblx0ICogRGF0YU1vZGVsUGF0aCBmb3IgdGhlIGNvcnJlc3BvbmRpbmcgcHJvcGVydHkgZGlzcGxheWVkLlxuXHQgKi9cblx0cHJpdmF0ZSBkYXRhTW9kZWxQYXRoITogRGF0YU1vZGVsT2JqZWN0UGF0aDxQcm9wZXJ0eT47XG5cblx0LyoqXG5cdCAqIFByb3BlcnR5IHRvIGJlIGRpc3BsYXllZFxuXHQgKi9cblx0cHJpdmF0ZSBwcm9wZXJ0eSE6IFByb3BlcnR5O1xuXG5cdC8qKlxuXHQgKiBFZGl0IE1vZGUgb2YgdGhlIGZpZWxkLlxuXHQgKiBJZiB0aGUgZWRpdE1vZGUgaXMgdW5kZWZpbmVkIHRoZW4gd2UgY29tcHV0ZSBpdCBiYXNlZCBvbiB0aGUgbWV0YWRhdGFcblx0ICogT3RoZXJ3aXNlIHdlIHVzZSB0aGUgdmFsdWUgcHJvdmlkZWQgaGVyZS5cblx0ICovXG5cdHByaXZhdGUgZWRpdE1vZGUhOiBGaWVsZEVkaXRNb2RlIHwgQ29tcGlsZWRCaW5kaW5nVG9vbGtpdEV4cHJlc3Npb247XG5cblx0LyoqXG5cdCAqIFRoZSBkaXNwbGF5IG1vZGUgYWRkZWQgdG8gdGhlIGNvbGxlY3Rpb24gZmllbGRcblx0ICovXG5cdHByaXZhdGUgZGlzcGxheU1vZGUhOiBEaXNwbGF5TW9kZTtcblxuXHQvKipcblx0ICogVGhlIENvbXBpbGVkQmluZGluZ1Rvb2xraXRFeHByZXNzaW9uIHRoYXQgaXMgY2FsY3VsYXRlZCBpbnRlcm5hbGx5XG5cdCAqL1xuXHRwcml2YXRlIGNvbGxlY3Rpb24hOiBQcm9wZXJ0eUJpbmRpbmdJbmZvO1xuXG5cdHByaXZhdGUgdmlzaWJsZTogQ29tcGlsZWRCaW5kaW5nVG9vbGtpdEV4cHJlc3Npb247XG5cblx0cHJpdmF0ZSBmaWVsZEdyb3VwSWRzPzogc3RyaW5nO1xuXG5cdHByaXZhdGUgZW5oYW5jZWRNZXRhUGF0aCE6IENvbnRleHQ7XG5cblx0cHJpdmF0ZSBlbmFibGVFeHByZXNzaW9uOiBDb21waWxlZEJpbmRpbmdUb29sa2l0RXhwcmVzc2lvbjtcblxuXHRwcml2YXRlIGNvbGxhYm9yYXRpb25FeHByZXNzaW9uITogQmluZGluZ1Rvb2xraXRFeHByZXNzaW9uPGJvb2xlYW4+O1xuXG5cdHByaXZhdGUgY29sbGFib3JhdGlvbkluaXRpYWxzRXhwcmVzc2lvbiE6IENvbXBpbGVkQmluZGluZ1Rvb2xraXRFeHByZXNzaW9uO1xuXG5cdHByaXZhdGUgY29sbGFib3JhdGlvbkNvbG9yRXhwcmVzc2lvbiE6IENvbXBpbGVkQmluZGluZ1Rvb2xraXRFeHByZXNzaW9uO1xuXG5cdHByaXZhdGUgY29sbGFib3JhdGlvbkVuYWJsZWQhOiBib29sZWFuO1xuXG5cdHByaXZhdGUgZGF0YVNvdXJjZVBhdGghOiBzdHJpbmc7XG5cblx0cHJpdmF0ZSBpbnNlcnRhYmxlQW5kRGVsZXRhYmxlITogQmluZGluZ1Rvb2xraXRFeHByZXNzaW9uPGJvb2xlYW4+O1xuXG5cdGNvbnN0cnVjdG9yKHByb3BzOiBzdHJpbmcgfCAoJENvbnRyb2xTZXR0aW5ncyAmIFByb3BlcnRpZXNPZjxNdWx0aVZhbHVlRmllbGRCbG9jaz4pLCBvdGhlcnM/OiAkQ29udHJvbFNldHRpbmdzKSB7XG5cdFx0aWYgKHR5cGVvZiBwcm9wcyAhPT0gXCJzdHJpbmdcIikge1xuXHRcdFx0Ly8gdHlwZSBvZiBwcm9wcyBjYW4gYmUgYSBzdHJpbmcgaWYgd2UgYXJlIGNsb25pbmcgdGhlIE11bHRpVmFsdWVGaWVsZCBpbnNpZGUgYW4gYWdncmVnYXRpb25cblx0XHRcdC8vIGluIHRoYXQgY2FzZSBfaXNJbkVkaXRNb2RlIGhhcyBhbHJlYWR5IGJlZW4gY29tcHV0ZWQgb24gdGhlIG9uZSB3ZSBjbG9uZVxuXHRcdFx0cHJvcHMuX2lzSW5FZGl0TW9kZSA9IGNvbXBpbGVFeHByZXNzaW9uKFVJLklzRWRpdGFibGUpO1xuXHRcdH1cblx0XHRzdXBlcihwcm9wcywgb3RoZXJzKTtcblx0fVxuXG5cdC8qKlxuXHQgKiBJbiBjYXNlIGFuIGV4dGVybmFsIHZhbHVlIGlzIHNldCAoZS5nLiBmb3IgcHJvdmlkaW5nIGRhdGEgaW4gYSBqc29uIG1vZGVsKSB3ZSBuZWVkIHRvIG92ZXJyaWRlIHRoZSBiaW5kaW5nIHN0cmluZ3MgZm9yIHRoZSBpdGVtLlxuXHQgKiBAcGFyYW0gY29sbGVjdGlvbkJpbmRpbmdcblx0ICogQHBhcmFtIGl0ZW1EYXRhTW9kZWxPYmplY3RQYXRoXG5cdCAqIEBwYXJhbSB0ZXh0RXhwcmVzc2lvblxuXHQgKiBAcGFyYW0ga2V5XG5cdCAqIEByZXR1cm5zIE11bHRpSW5wdXRTZXR0aW5nc1xuXHQgKi9cblx0cHJpdmF0ZSBfb3ZlcnJpZGVWYWx1ZShcblx0XHRjb2xsZWN0aW9uQmluZGluZzogUHJvcGVydHlCaW5kaW5nSW5mbyAmIHsgcGFyYW1ldGVycz86IG9iamVjdCB9LFxuXHRcdGl0ZW1EYXRhTW9kZWxPYmplY3RQYXRoOiBEYXRhTW9kZWxPYmplY3RQYXRoPFByb3BlcnR5UGF0aCB8IFByb3BlcnR5Pixcblx0XHR0ZXh0RXhwcmVzc2lvbjogQ29tcGlsZWRCaW5kaW5nVG9vbGtpdEV4cHJlc3Npb24sXG5cdFx0a2V5OiBDb21waWxlZEJpbmRpbmdUb29sa2l0RXhwcmVzc2lvblxuXHQpOiBNdWx0aUlucHV0U2V0dGluZ3Mge1xuXHRcdGlmICh0aGlzLml0ZW1zKSB7XG5cdFx0XHRjb25zdCBtb2RlbCA9IHRoaXMuaXRlbXMubW9kZWwgPz8gdGhpcy5pdGVtcy5tb2RlbE5hbWU7XG5cdFx0XHRjb2xsZWN0aW9uQmluZGluZyA9IHsgcGF0aDogYCR7bW9kZWx9PiR7dGhpcy5pdGVtcy5wYXRofWAgfTtcblx0XHRcdGNvbnN0IGNvbW1vblRhcmdldE9iamVjdFByb3BlcnR5ID0gaXRlbURhdGFNb2RlbE9iamVjdFBhdGgudGFyZ2V0T2JqZWN0IGFzIFByb3BlcnR5O1xuXHRcdFx0Y29uc3QgY29tbW9uUHJvcGVydHlQYXRoID0gYHske21vZGVsfT4ke2NvbW1vblRhcmdldE9iamVjdFByb3BlcnR5Lm5hbWV9fWA7XG5cblx0XHRcdC8vIFRleHQgYXJyYW5nZW1lbnQgdXNlIGNhc2Vcblx0XHRcdGlmIChpc1BhdGhBbm5vdGF0aW9uRXhwcmVzc2lvbjxzdHJpbmc+KGNvbW1vblRhcmdldE9iamVjdFByb3BlcnR5LmFubm90YXRpb25zLkNvbW1vbj8uVGV4dCkpIHtcblx0XHRcdFx0dGV4dEV4cHJlc3Npb24gPSBgeyR7bW9kZWx9PiR7Y29tbW9uVGFyZ2V0T2JqZWN0UHJvcGVydHkuYW5ub3RhdGlvbnMuQ29tbW9uPy5UZXh0Py5wYXRofX1gO1xuXHRcdFx0XHQvLyBub24gdGV4dCBhcnJhbmdlbWVudCB1c2UgY2FzZVxuXHRcdFx0fSBlbHNlIHtcblx0XHRcdFx0dGV4dEV4cHJlc3Npb24gPSBjb21tb25Qcm9wZXJ0eVBhdGg7XG5cdFx0XHR9XG5cdFx0XHRrZXkgPSBjb21tb25Qcm9wZXJ0eVBhdGg7XG5cdFx0fVxuXHRcdHJldHVybiB7XG5cdFx0XHRkZXNjcmlwdGlvbjogdGV4dEV4cHJlc3Npb24sXG5cdFx0XHRjb2xsZWN0aW9uQmluZGluZyxcblx0XHRcdGtleToga2V5XG5cdFx0fTtcblx0fVxuXG5cdC8qKlxuXHQgKiBGdW5jdGlvbiB0byBnZXQgdGhlIGNvcnJlY3Qgc2V0dGluZ3MgZm9yIHRoZSBtdWx0aSBpbnB1dC5cblx0ICogQHBhcmFtIHByb3BlcnR5RGF0YU1vZGVsT2JqZWN0UGF0aCBUaGUgY29ycmVzcG9uZGluZyBEYXRhTW9kZWxPYmplY3RQYXRoLlxuXHQgKiBAcGFyYW0gZm9ybWF0T3B0aW9ucyBUaGUgZm9ybWF0IG9wdGlvbnMgdG8gY2FsY3VsYXRlIHRoZSByZXN1bHRcblx0ICogQHJldHVybnMgTXVsdGlJbnB1dFNldHRpbmdzXG5cdCAqL1xuXHRwcml2YXRlIF9nZXRNdWx0aUlucHV0U2V0dGluZ3MoXG5cdFx0cHJvcGVydHlEYXRhTW9kZWxPYmplY3RQYXRoOiBEYXRhTW9kZWxPYmplY3RQYXRoPFByb3BlcnR5Pixcblx0XHRmb3JtYXRPcHRpb25zOiBGb3JtYXRPcHRpb25zIHwgdW5kZWZpbmVkXG5cdCk6IE11bHRpSW5wdXRTZXR0aW5ncyB7XG5cdFx0Y29uc3QgcGF0aFN0cnVjdHVyZSA9IE11bHRpVmFsdWVGaWVsZEJsb2NrLl9nZXRQYXRoU3RydWN0dXJlKHByb3BlcnR5RGF0YU1vZGVsT2JqZWN0UGF0aCk7XG5cdFx0bGV0IHsgY29sbGVjdGlvblBhdGggfSA9IHBhdGhTdHJ1Y3R1cmU7XG5cdFx0Y29uc3QgaXRlbURhdGFNb2RlbE9iamVjdFBhdGggPSBwYXRoU3RydWN0dXJlLml0ZW1EYXRhTW9kZWxPYmplY3RQYXRoO1xuXHRcdGlmICh0aGlzLm1ldGFQYXRoLnN0YXJ0c1dpdGgoXCIvXCIpICYmIHRoaXMuaXRlbXMpIHtcblx0XHRcdC8vIHdlIG9ubHkgc3VwcG9ydCBhbiBhYnNvbHV0ZSBtZXRhcGF0aCBpZiB0aGVyZSBpcyBhbiBpdGVtcyBiaW5kaW5nIHByb3ZpZGVkXG5cdFx0XHRjb2xsZWN0aW9uUGF0aCA9IGAvJHtwcm9wZXJ0eURhdGFNb2RlbE9iamVjdFBhdGguY29udGV4dExvY2F0aW9uPy5zdGFydGluZ0VudGl0eVNldC5uYW1lfWA7XG5cdFx0fVxuXHRcdGNvbnN0IGNvbGxlY3Rpb25CaW5kaW5nID0gdGhpcy51c2VQYXJlbnRCaW5kaW5nQ2FjaGVcblx0XHRcdD8geyBwYXRoOiBjb2xsZWN0aW9uUGF0aCwgdGVtcGxhdGVTaGFyZWFibGU6IGZhbHNlIH1cblx0XHRcdDogeyBwYXRoOiBjb2xsZWN0aW9uUGF0aCwgcGFyYW1ldGVyczogeyAkJG93blJlcXVlc3Q6IHRydWUgfSwgdGVtcGxhdGVTaGFyZWFibGU6IGZhbHNlIH07XG5cblx0XHRjb25zdCBwcm9wZXJ0eVBhdGhPclByb3BlcnR5ID0gcHJvcGVydHlEYXRhTW9kZWxPYmplY3RQYXRoLnRhcmdldE9iamVjdCBhcyBQcm9wZXJ0eVBhdGggfCBQcm9wZXJ0eTtcblx0XHRjb25zdCBwcm9wZXJ0eURlZmluaXRpb24gPSBpc1Byb3BlcnR5UGF0aEV4cHJlc3Npb24ocHJvcGVydHlQYXRoT3JQcm9wZXJ0eSlcblx0XHRcdD8gcHJvcGVydHlQYXRoT3JQcm9wZXJ0eS4kdGFyZ2V0XG5cdFx0XHQ6IHByb3BlcnR5UGF0aE9yUHJvcGVydHk7XG5cdFx0Y29uc3QgY29tbW9uVGV4dCA9IHByb3BlcnR5RGVmaW5pdGlvbj8uYW5ub3RhdGlvbnMuQ29tbW9uPy5UZXh0O1xuXHRcdGNvbnN0IHJlbGF0aXZlTG9jYXRpb24gPSBnZXRSZWxhdGl2ZVBhdGhzKHByb3BlcnR5RGF0YU1vZGVsT2JqZWN0UGF0aCk7XG5cblx0XHRjb25zdCB0ZXh0RXhwcmVzc2lvbiA9IGNvbW1vblRleHRcblx0XHRcdD8gY29tcGlsZUV4cHJlc3Npb24oZ2V0RXhwcmVzc2lvbkZyb21Bbm5vdGF0aW9uKGNvbW1vblRleHQsIHJlbGF0aXZlTG9jYXRpb24pKVxuXHRcdFx0OiBnZXRWYWx1ZUJpbmRpbmcoaXRlbURhdGFNb2RlbE9iamVjdFBhdGgsIGZvcm1hdE9wdGlvbnMgPz8ge30sIHRydWUpO1xuXG5cdFx0Y29uc3Qga2V5ID0gZ2V0VmFsdWVCaW5kaW5nKGl0ZW1EYXRhTW9kZWxPYmplY3RQYXRoLCBmb3JtYXRPcHRpb25zID8/IHt9LCB0cnVlKTtcblx0XHRsZXQgZGlzcGxheU9ubHkgPSBmYWxzZTtcblx0XHRpZiAoZ2V0UmVsYXRpdmVQYXRocyhpdGVtRGF0YU1vZGVsT2JqZWN0UGF0aCkubGVuZ3RoID4gMCkge1xuXHRcdFx0Ly8gaWYgdGhlIHJlbGF0aXZlIHBhdGggdG8gdGhlIHZhbHVlIGNvbnRhaW5zIGEgbmF2aWdhdGlvbiwgY3JlYXRlIHdpbGwgbm90IGJlIHBvc3NpYmxlIGluIHRoZSBkZWxlZ2F0ZSwgc28gd2UgZm9yY2UgdGhlIGRpc3BsYXkgTW9kZVxuXHRcdFx0ZGlzcGxheU9ubHkgPSB0cnVlO1xuXHRcdH1cblx0XHRyZXR1cm4ge1xuXHRcdFx0ZGlzcGxheU9ubHksXG5cdFx0XHQuLi50aGlzLl9vdmVycmlkZVZhbHVlKGNvbGxlY3Rpb25CaW5kaW5nLCBpdGVtRGF0YU1vZGVsT2JqZWN0UGF0aCwgdGV4dEV4cHJlc3Npb24sIGtleSlcblx0XHR9O1xuXHR9XG5cblx0Ly8gUHJvY2VzcyB0aGUgZGF0YU1vZGVsUGF0aCB0byBmaW5kIHRoZSBjb2xsZWN0aW9uIGFuZCB0aGUgcmVsYXRpdmUgRGF0YU1vZGVsUGF0aCBmb3IgdGhlIGl0ZW0uXG5cdHByaXZhdGUgc3RhdGljIF9nZXRQYXRoU3RydWN0dXJlKGRhdGFNb2RlbE9iamVjdFBhdGg6IERhdGFNb2RlbE9iamVjdFBhdGg8UHJvcGVydHk+KTogTXVsdGlWYWx1ZUZpZWxkUGF0aFN0cnVjdHVyZSB7XG5cdFx0bGV0IGZpcnN0Q29sbGVjdGlvblBhdGggPSBcIlwiO1xuXHRcdGNvbnN0IGN1cnJlbnRFbnRpdHlTZXQgPSBkYXRhTW9kZWxPYmplY3RQYXRoLmNvbnRleHRMb2NhdGlvbj8udGFyZ2V0RW50aXR5U2V0XG5cdFx0XHQ/IGRhdGFNb2RlbE9iamVjdFBhdGguY29udGV4dExvY2F0aW9uLnRhcmdldEVudGl0eVNldFxuXHRcdFx0OiBkYXRhTW9kZWxPYmplY3RQYXRoLnN0YXJ0aW5nRW50aXR5U2V0O1xuXHRcdGNvbnN0IG5hdmlnYXRlZFBhdGhzOiBzdHJpbmdbXSA9IFtdO1xuXHRcdGNvbnN0IGNvbnRleHROYXZzRm9ySXRlbSA9IGRhdGFNb2RlbE9iamVjdFBhdGguY29udGV4dExvY2F0aW9uPy5uYXZpZ2F0aW9uUHJvcGVydGllcyB8fCBbXTtcblx0XHRmb3IgKGNvbnN0IG5hdlByb3Agb2YgZGF0YU1vZGVsT2JqZWN0UGF0aC5uYXZpZ2F0aW9uUHJvcGVydGllcykge1xuXHRcdFx0aWYgKFxuXHRcdFx0XHRkYXRhTW9kZWxPYmplY3RQYXRoLmNvbnRleHRMb2NhdGlvbiA9PT0gdW5kZWZpbmVkIHx8XG5cdFx0XHRcdCFkYXRhTW9kZWxPYmplY3RQYXRoLmNvbnRleHRMb2NhdGlvbi5uYXZpZ2F0aW9uUHJvcGVydGllcy5zb21lKFxuXHRcdFx0XHRcdChjb250ZXh0TmF2UHJvcCkgPT4gY29udGV4dE5hdlByb3AuZnVsbHlRdWFsaWZpZWROYW1lID09PSBuYXZQcm9wLmZ1bGx5UXVhbGlmaWVkTmFtZVxuXHRcdFx0XHQpXG5cdFx0XHQpIHtcblx0XHRcdFx0Ly8gaW4gY2FzZSBvZiByZWxhdGl2ZSBlbnRpdHlTZXRQYXRoIHdlIGRvbid0IGNvbnNpZGVyIG5hdmlnYXRpb25QYXRoIHRoYXQgYXJlIGFscmVhZHkgaW4gdGhlIGNvbnRleHRcblx0XHRcdFx0bmF2aWdhdGVkUGF0aHMucHVzaChuYXZQcm9wLm5hbWUpO1xuXHRcdFx0XHRjb250ZXh0TmF2c0Zvckl0ZW0ucHVzaChuYXZQcm9wKTtcblx0XHRcdFx0aWYgKGN1cnJlbnRFbnRpdHlTZXQubmF2aWdhdGlvblByb3BlcnR5QmluZGluZy5oYXNPd25Qcm9wZXJ0eShuYXZQcm9wLm5hbWUpKSB7XG5cdFx0XHRcdFx0aWYgKGlzTXVsdGlwbGVOYXZpZ2F0aW9uUHJvcGVydHkobmF2UHJvcCkpIHtcblx0XHRcdFx0XHRcdGJyZWFrO1xuXHRcdFx0XHRcdH1cblx0XHRcdFx0fVxuXHRcdFx0fVxuXHRcdH1cblx0XHRmaXJzdENvbGxlY3Rpb25QYXRoID0gYCR7bmF2aWdhdGVkUGF0aHMuam9pbihcIi9cIil9YDtcblx0XHRjb25zdCBpdGVtRGF0YU1vZGVsT2JqZWN0UGF0aDogRGF0YU1vZGVsT2JqZWN0UGF0aDxQcm9wZXJ0eT4gPSBPYmplY3QuYXNzaWduKHt9LCBkYXRhTW9kZWxPYmplY3RQYXRoKTtcblx0XHRpZiAoaXRlbURhdGFNb2RlbE9iamVjdFBhdGguY29udGV4dExvY2F0aW9uKSB7XG5cdFx0XHRpdGVtRGF0YU1vZGVsT2JqZWN0UGF0aC5jb250ZXh0TG9jYXRpb24ubmF2aWdhdGlvblByb3BlcnRpZXMgPSBjb250ZXh0TmF2c0Zvckl0ZW07IC8vIHRoaXMgY2hhbmdlcyB0aGUgY3JlYXRpb24gb2YgdGhlIHZhbHVlSGVscCBJRCAuLi5cblx0XHR9XG5cblx0XHRyZXR1cm4geyBjb2xsZWN0aW9uUGF0aDogZmlyc3RDb2xsZWN0aW9uUGF0aCwgaXRlbURhdGFNb2RlbE9iamVjdFBhdGg6IGl0ZW1EYXRhTW9kZWxPYmplY3RQYXRoIH07XG5cdH1cblxuXHQvKipcblx0ICogQ2FsY3VsYXRlIHRoZSBmaWVsZEdyb3VwSWRzIGZvciB0aGUgTXVsdGlWYWx1ZUZpZWxkLlxuXHQgKiBAcGFyYW0gYXBwQ29tcG9uZW50XG5cdCAqIEByZXR1cm5zIFRoZSB2YWx1ZSBmb3IgdGhlIGZpZWxkR3JvdXBJZHNcblx0ICovXG5cdHByaXZhdGUgY29tcHV0ZUZpZWxkR3JvdXBJZHMoYXBwQ29tcG9uZW50PzogQXBwQ29tcG9uZW50KTogc3RyaW5nIHwgdW5kZWZpbmVkIHtcblx0XHRpZiAoIWFwcENvbXBvbmVudCkge1xuXHRcdFx0Ly9mb3IgVmFsdWVIZWxwIC8gTWFzcyBlZGl0IFRlbXBsYXRpbmcgdGhlIGFwcENvbXBvbmVudCBpcyBub3QgcGFzc2VkIHRvIHRoZSB0ZW1wbGF0aW5nXG5cdFx0XHRyZXR1cm4gXCJcIjtcblx0XHR9XG5cdFx0Y29uc3Qgc2lkZUVmZmVjdFNlcnZpY2UgPSBhcHBDb21wb25lbnQuZ2V0U2lkZUVmZmVjdHNTZXJ2aWNlKCk7XG5cdFx0Y29uc3QgZmllbGRHcm91cElkcyA9IHNpZGVFZmZlY3RTZXJ2aWNlLmNvbXB1dGVGaWVsZEdyb3VwSWRzKFxuXHRcdFx0dGhpcy5kYXRhTW9kZWxQYXRoLnRhcmdldEVudGl0eVR5cGUuZnVsbHlRdWFsaWZpZWROYW1lLFxuXHRcdFx0KHRoaXMuZGF0YU1vZGVsUGF0aC50YXJnZXRPYmplY3QgYXMgUHJvcGVydHkpLmZ1bGx5UXVhbGlmaWVkTmFtZVxuXHRcdCk7XG5cdFx0aWYgKHRoaXMuY29sbGFib3JhdGlvbkVuYWJsZWQpIHtcblx0XHRcdGNvbnN0IGNvbGxhYm9yYXRpb25GaWVsZEdyb3VwID0gYCR7Q29sbGFib3JhdGlvbkZpZWxkR3JvdXBQcmVmaXh9JHt0aGlzLmRhdGFTb3VyY2VQYXRofWA7XG5cdFx0XHRmaWVsZEdyb3VwSWRzLnB1c2goY29sbGFib3JhdGlvbkZpZWxkR3JvdXApO1xuXHRcdH1cblx0XHR0aGlzLmZpZWxkR3JvdXBJZHMgPSBmaWVsZEdyb3VwSWRzLmxlbmd0aCA/IGZpZWxkR3JvdXBJZHMuam9pbihcIixcIikgOiB1bmRlZmluZWQ7XG5cdFx0Y29uc3QgcmVzdWx0ID0gZmllbGRHcm91cElkcy5qb2luKFwiLFwiKTtcblx0XHRyZXR1cm4gcmVzdWx0ID09PSBcIlwiID8gdW5kZWZpbmVkIDogcmVzdWx0O1xuXHR9XG5cblx0aW5pdGlhbGl6ZShtZXRhQ29udGV4dFBhdGg6IE1ldGFQYXRoPHVua25vd24+KTogdm9pZCB7XG5cdFx0Y29uc3Qgb3duZXIgPSB0aGlzLl9nZXRPd25lcigpO1xuXG5cdFx0dGhpcy5jb250ZXh0UGF0aCA9IHRoaXMuY29udGV4dFBhdGggPz8gb3duZXI/LnByZXByb2Nlc3NvckNvbnRleHQ/LmZ1bGxDb250ZXh0UGF0aDtcblx0XHRjb25zdCBvZGF0YU1ldGFNb2RlbCA9IG93bmVyPy5nZXRNZXRhTW9kZWwoKTtcblxuXHRcdGNvbnN0IG1ldGFDb250ZXh0ID0gb2RhdGFNZXRhTW9kZWw/LmNyZWF0ZUJpbmRpbmdDb250ZXh0KG1ldGFDb250ZXh0UGF0aC5nZXRQYXRoKCkpIGFzIENvbnRleHQgfCB1bmRlZmluZWQ7XG5cblx0XHRjb25zdCBtZXRhUGF0aE9iamVjdCA9IG1ldGFDb250ZXh0UGF0aD8uZ2V0VGFyZ2V0KCk7XG5cblx0XHQvLyBJZiB0aGUgdGFyZ2V0IGlzIGEgcHJvcGVydHkgd2l0aCBhIERhdGFGaWVsZERlZmF1bHQsIHVzZSB0aGlzIGFzIGRhdGEgZmllbGRcblx0XHRpZiAoaXNQcm9wZXJ0eShtZXRhUGF0aE9iamVjdCkgJiYgbWV0YVBhdGhPYmplY3QuYW5ub3RhdGlvbnMuVUk/LkRhdGFGaWVsZERlZmF1bHQgIT09IHVuZGVmaW5lZCkge1xuXHRcdFx0dGhpcy5lbmhhbmNlZE1ldGFQYXRoID0gb2RhdGFNZXRhTW9kZWw/LmNyZWF0ZUJpbmRpbmdDb250ZXh0KGBAJHtVSUFubm90YXRpb25UZXJtcy5EYXRhRmllbGREZWZhdWx0fWAsIG1ldGFDb250ZXh0KSBhcyBDb250ZXh0O1xuXHRcdH0gZWxzZSB7XG5cdFx0XHR0aGlzLmVuaGFuY2VkTWV0YVBhdGggPSBtZXRhQ29udGV4dCBhcyBDb250ZXh0O1xuXHRcdH1cblx0XHRjb25zdCBkYXRhRmllbGREYXRhTW9kZWxQYXRoID0gdGhpcy5nZXREYXRhTW9kZWxPYmplY3RGb3JNZXRhUGF0aCh0aGlzLmVuaGFuY2VkTWV0YVBhdGguZ2V0UGF0aCgpLCB0aGlzLmNvbnRleHRQYXRoKSE7XG5cblx0XHR0aGlzLmNvbnZlcnRlZERhdGFGaWVsZCA9IGRhdGFGaWVsZERhdGFNb2RlbFBhdGgudGFyZ2V0T2JqZWN0IGFzIERhdGFGaWVsZDtcblxuXHRcdHRoaXMuZGF0YU1vZGVsUGF0aCA9IGVuaGFuY2VEYXRhTW9kZWxQYXRoPFByb3BlcnR5Pihcblx0XHRcdGRhdGFGaWVsZERhdGFNb2RlbFBhdGgsXG5cdFx0XHQodGhpcy5jb252ZXJ0ZWREYXRhRmllbGQuVmFsdWUgYXMgUGF0aEFubm90YXRpb25FeHByZXNzaW9uPHN0cmluZz4pLnBhdGhcblx0XHQpO1xuXHRcdHRoaXMuZGF0YVNvdXJjZVBhdGggPSBnZXRUYXJnZXRPYmplY3RQYXRoKHRoaXMuZGF0YU1vZGVsUGF0aCk7XG5cdFx0dGhpcy5wcm9wZXJ0eSA9IHRoaXMuZGF0YU1vZGVsUGF0aC50YXJnZXRPYmplY3QgYXMgUHJvcGVydHk7XG5cblx0XHRsZXQgaW5zZXJ0YWJsZSA9IGlzUGF0aEluc2VydGFibGUodGhpcy5kYXRhTW9kZWxQYXRoKTtcblx0XHRjb25zdCBkZWxldGVOYXZpZ2F0aW9uUmVzdHJpY3Rpb24gPSBpc1BhdGhEZWxldGFibGUodGhpcy5kYXRhTW9kZWxQYXRoLCB7XG5cdFx0XHRpZ25vcmVUYXJnZXRDb2xsZWN0aW9uOiB0cnVlLFxuXHRcdFx0YXV0aG9yaXplVW5yZXNvbHZhYmxlOiB0cnVlXG5cdFx0fSk7XG5cdFx0Y29uc3QgZGVsZXRlUGF0aCA9IGlzUGF0aERlbGV0YWJsZSh0aGlzLmRhdGFNb2RlbFBhdGgpO1xuXG5cdFx0Ly8gZGVsZXRhYmxlOlxuXHRcdC8vXHRcdGlmIHJlc3RyaWN0aW9ucyBjb21lIGZyb20gTmF2aWdhdGlvbiB3ZSBhcHBseSBpdFxuXHRcdC8vXHRcdG90aGVyd2lzZSB3ZSBhcHBseSByZXN0cmljdGlvbnMgZGVmaW5lZCBvbiB0YXJnZXQgY29sbGVjdGlvbiBvbmx5IGlmIGl0J3MgYSBjb25zdGFudFxuXHRcdC8vICAgICAgb3RoZXJ3aXNlIGl0J3MgdHJ1ZSFcblx0XHRsZXQgZGVsZXRhYmxlID0gaWZFbHNlKFxuXHRcdFx0ZGVsZXRlTmF2aWdhdGlvblJlc3RyaWN0aW9uLl90eXBlID09PSBcIlVucmVzb2x2YWJsZVwiLFxuXHRcdFx0b3Iobm90KGlzQ29uc3RhbnQoZGVsZXRlUGF0aCkpLCBkZWxldGVQYXRoKSxcblx0XHRcdGRlbGV0ZVBhdGhcblx0XHQpO1xuXG5cdFx0aWYgKHRoaXMuaXRlbXMpIHtcblx0XHRcdGluc2VydGFibGUgPSBkZWxldGFibGUgPSBjb25zdGFudCghdGhpcy5yZWFkT25seSk7XG5cdFx0fSBlbHNlIHtcblx0XHRcdHRoaXMudmlzaWJsZSA9IGdldFZpc2libGVFeHByZXNzaW9uKHRoaXMuZGF0YU1vZGVsUGF0aCwgdGhpcy5mb3JtYXRPcHRpb25zKTtcblx0XHR9XG5cblx0XHR0aGlzLmluc2VydGFibGVBbmREZWxldGFibGUgPSBhbmQoaW5zZXJ0YWJsZSwgZGVsZXRhYmxlKTtcblx0XHR0aGlzLmNvbGxhYm9yYXRpb25FeHByZXNzaW9uID0gY29uc3RhbnQoZmFsc2UpO1xuXHRcdHRoaXMuY29tcHV0ZUNvbGxhYm9yYXRpb25Qcm9wZXJ0aWVzKCk7XG5cdFx0Y29uc3QgcmVhZE9ubHkgPSB0aGlzLmlzUHJvcGVydHlJbml0aWFsKFwicmVhZE9ubHlcIikgPyB1bmRlZmluZWQgOiB0aGlzLnJlYWRPbmx5O1xuXHRcdGlmICh0aGlzLmZvcm1hdE9wdGlvbnM/LmRpc3BsYXlPbmx5ID09PSB0cnVlIHx8IHJlYWRPbmx5ID09PSB0cnVlKSB7XG5cdFx0XHR0aGlzLmVkaXRNb2RlID0gXCJEaXNwbGF5XCI7XG5cdFx0fSBlbHNlIGlmICh0aGlzLnJlYWRPbmx5ID09PSBmYWxzZSkge1xuXHRcdFx0dGhpcy5lZGl0TW9kZSA9IGNvbXBpbGVFeHByZXNzaW9uKFxuXHRcdFx0XHRpZkVsc2UoXG5cdFx0XHRcdFx0YW5kKGluc2VydGFibGUsIGRlbGV0YWJsZSksXG5cdFx0XHRcdFx0aWZFbHNlKHRoaXMuY29sbGFib3JhdGlvbkV4cHJlc3Npb24sIGNvbnN0YW50KFwiUmVhZE9ubHlcIiksIGNvbnN0YW50KFwiRWRpdGFibGVcIikpLFxuXHRcdFx0XHRcdGNvbnN0YW50KFwiRGlzcGxheVwiKVxuXHRcdFx0XHQpXG5cdFx0XHQpO1xuXHRcdH0gZWxzZSB7XG5cdFx0XHR0aGlzLmVkaXRNb2RlID0gY29tcGlsZUV4cHJlc3Npb24oXG5cdFx0XHRcdGlmRWxzZShcblx0XHRcdFx0XHRhbmQoaW5zZXJ0YWJsZSwgZGVsZXRhYmxlLCBVSS5Jc0VkaXRhYmxlLCBub3QoZXF1YWwodHJ1ZSwgaXNSZWFkT25seUV4cHJlc3Npb24odGhpcy5jb252ZXJ0ZWREYXRhRmllbGQpKSkpLFxuXHRcdFx0XHRcdGlmRWxzZSh0aGlzLmNvbGxhYm9yYXRpb25FeHByZXNzaW9uLCBjb25zdGFudChcIlJlYWRPbmx5XCIpLCBjb25zdGFudChcIkVkaXRhYmxlXCIpKSxcblx0XHRcdFx0XHRjb25zdGFudChcIkRpc3BsYXlcIilcblx0XHRcdFx0KVxuXHRcdFx0KTtcblx0XHR9XG5cblx0XHR0aGlzLmRpc3BsYXlNb2RlID0gZ2V0RGlzcGxheU1vZGUodGhpcy5kYXRhTW9kZWxQYXRoKTtcblxuXHRcdGNvbnN0IGxvY2FsRGF0YU1vZGVsUGF0aCA9IGVuaGFuY2VEYXRhTW9kZWxQYXRoPFByb3BlcnR5Pihcblx0XHRcdHRoaXMuZ2V0RGF0YU1vZGVsT2JqZWN0Rm9yTWV0YVBhdGgodGhpcy5lbmhhbmNlZE1ldGFQYXRoLmdldFBhdGgoKSwgdGhpcy5jb250ZXh0UGF0aCkhLFxuXHRcdFx0KHRoaXMuY29udmVydGVkRGF0YUZpZWxkLlZhbHVlIGFzIFBhdGhBbm5vdGF0aW9uRXhwcmVzc2lvbjxzdHJpbmc+KS5wYXRoXG5cdFx0KTtcblxuXHRcdHRoaXMuaXRlbSA9IHRoaXMuX2dldE11bHRpSW5wdXRTZXR0aW5ncyhsb2NhbERhdGFNb2RlbFBhdGgsIHRoaXMuZm9ybWF0T3B0aW9ucyk7IC8vIHRoaXMgZnVuY3Rpb24gcmV3cml0ZXMgZGF0YU1vZGVsUGF0aCwgdGhlcmVmb3JlLCBmb3Igbm93IGEgY2xlYW4gb2JqZWN0IGlzIHBhc3NlZFxuXHRcdGlmICh0aGlzLml0ZW0uZGlzcGxheU9ubHkpIHtcblx0XHRcdHRoaXMuZWRpdE1vZGUgPSBcIkRpc3BsYXlcIjtcblx0XHR9XG5cdFx0dGhpcy5jb2xsZWN0aW9uID0gdGhpcy5pdGVtLmNvbGxlY3Rpb25CaW5kaW5nO1xuXG5cdFx0Y29uc3QgYXBwQ29tcG9uZW50ID0gdGhpcy5nZXRBcHBDb21wb25lbnQoKTtcblx0XHR0aGlzLmZpZWxkR3JvdXBJZHMgPSB0aGlzLmNvbXB1dGVGaWVsZEdyb3VwSWRzKGFwcENvbXBvbmVudCk7XG5cdH1cblxuXHQvKipcblx0ICogSGFuZGxlciBmb3IgdGhlIG9uTWV0YWRhdGFBdmFpbGFibGUgZXZlbnQuXG5cdCAqL1xuXHRvbk1ldGFkYXRhQXZhaWxhYmxlKCk6IHZvaWQge1xuXHRcdGlmICghdGhpcy5jb250ZW50KSB7XG5cdFx0XHR0aGlzLmNvbnRlbnQgPSB0aGlzLmNyZWF0ZUNvbnRlbnQoKTtcblx0XHR9XG5cdH1cblxuXHQvKipcblx0ICogVGhlIGZ1bmN0aW9uIGNoZWNrcyBpZiB0aGUgY29sbGFib3JhdGlvbiBkcmFmdCBpcyBzdXBwb3J0ZWQuXG5cdCAqIEByZXR1cm5zIFRydWUgaWYgdGhlIGNvbGxhYm9yYXRpb24gZHJhZnQgaXMgc3VwcG9ydGVkLlxuXHQgKi9cblx0aXNDb2xsYWJvcmF0aW9uRHJhZnRTdXBwb3J0ZWQoKTogYm9vbGVhbiB7XG5cdFx0Y29uc3Qgb3duZXIgPSB0aGlzLl9nZXRPd25lcigpO1xuXHRcdGNvbnN0IG9kYXRhTWV0YU1vZGVsID0gb3duZXI/LmdldE1ldGFNb2RlbCgpO1xuXHRcdHJldHVybiBNb2RlbEhlbHBlci5pc0NvbGxhYm9yYXRpb25EcmFmdFN1cHBvcnRlZChvZGF0YU1ldGFNb2RlbCEpO1xuXHR9XG5cblx0LyoqXG5cdCAqIFRoaXMgaGVscGVyIGNvbXB1dGVzIHRoZSBwcm9wZXJ0aWVzIHRoYXQgYXJlIG5lZWRlZCBmb3IgdGhlIGNvbGxhYm9yYXRpb24gYXZhdGFyLlxuXHQgKi9cblx0Y29tcHV0ZUNvbGxhYm9yYXRpb25Qcm9wZXJ0aWVzKCk6IHZvaWQge1xuXHRcdGlmICh0aGlzLmlzQ29sbGFib3JhdGlvbkRyYWZ0U3VwcG9ydGVkKCkgJiYgdGhpcy5lZGl0TW9kZSAhPT0gXCJEaXNwbGF5XCIpIHtcblx0XHRcdHRoaXMuY29sbGFib3JhdGlvbkVuYWJsZWQgPSB0cnVlO1xuXHRcdFx0dGhpcy5jb2xsYWJvcmF0aW9uRXhwcmVzc2lvbiA9IFVJRm9ybWF0dGVycy5nZXRDb2xsYWJvcmF0aW9uRXhwcmVzc2lvbihcblx0XHRcdFx0dGhpcy5kYXRhTW9kZWxQYXRoLFxuXHRcdFx0XHRDb2xsYWJvcmF0aW9uRm9ybWF0dGVycy5oYXNDb2xsYWJvcmF0aW9uQWN0aXZpdHlcblx0XHRcdCk7XG5cblx0XHRcdHRoaXMuY29sbGFib3JhdGlvbkluaXRpYWxzRXhwcmVzc2lvbiA9IGNvbXBpbGVFeHByZXNzaW9uKFxuXHRcdFx0XHRnZXRDb2xsYWJvcmF0aW9uRXhwcmVzc2lvbih0aGlzLmRhdGFNb2RlbFBhdGgsIENvbGxhYm9yYXRpb25Gb3JtYXR0ZXJzLmdldENvbGxhYm9yYXRpb25BY3Rpdml0eUluaXRpYWxzKVxuXHRcdFx0KTtcblx0XHRcdHRoaXMuY29sbGFib3JhdGlvbkNvbG9yRXhwcmVzc2lvbiA9IGNvbXBpbGVFeHByZXNzaW9uKFxuXHRcdFx0XHRnZXRDb2xsYWJvcmF0aW9uRXhwcmVzc2lvbih0aGlzLmRhdGFNb2RlbFBhdGgsIENvbGxhYm9yYXRpb25Gb3JtYXR0ZXJzLmdldENvbGxhYm9yYXRpb25BY3Rpdml0eUNvbG9yKVxuXHRcdFx0KTtcblx0XHR9XG5cdH1cblxuXHRnZXRSZXF1aXJlZCgpOiBib29sZWFuIHwgdW5kZWZpbmVkIHtcblx0XHRyZXR1cm4gdGhpcy5nZXRNdWx0aVZhbHVlRmllbGQoKS5nZXRSZXF1aXJlZCgpO1xuXHR9XG5cblx0Z2V0SXRlbXMoKTogTXVsdGlWYWx1ZUZpZWxkSXRlbVtdIHwgdW5kZWZpbmVkIHtcblx0XHRyZXR1cm4gdGhpcy5nZXRNdWx0aVZhbHVlRmllbGQoKS5nZXRJdGVtcygpO1xuXHR9XG5cblx0LyoqXG5cdCAqIENyZWF0ZXMgdGhlIGNvbnRlbnQuXG5cdCAqIEByZXR1cm5zIFRoZSBjb250ZW50IG9mIHRoZSBidWlsZGluZyBibG9jay5cblx0ICovXG5cdGNyZWF0ZUNvbnRlbnQoKTogQ29udHJvbCB8IHVuZGVmaW5lZCB7XG5cdFx0Y29uc3QgbWV0YUNvbnRleHRQYXRoID0gdGhpcy5nZXRNZXRhUGF0aE9iamVjdCh0aGlzLm1ldGFQYXRoLCB0aGlzLmNvbnRleHRQYXRoKTtcblx0XHRpZiAobWV0YUNvbnRleHRQYXRoKSB7XG5cdFx0XHR0aGlzLmluaXRpYWxpemUobWV0YUNvbnRleHRQYXRoKTtcblxuXHRcdFx0Ly8gQnVpbGRpbmdCbG9jayB3aXRoIHNldCBJRCBzY2VuYXJpb1xuXHRcdFx0aWYgKHRoaXMuaWQpIHtcblx0XHRcdFx0dGhpcy52aElkUHJlZml4ID0gSUQuZ2VuZXJhdGUoW3RoaXMuZ2V0SWQoKSwgdGhpcy52aElkUHJlZml4ID8/IFwiRmllbGRWYWx1ZUhlbHBcIl0pOyAvLyBVc2UgZ2V0SWQgdG8gcmV0cmlldmUgSUQsIG5vdCB0aGlzLmlkXG5cdFx0XHR9IGVsc2UgaWYgKCF0aGlzLnZoSWRQcmVmaXgpIHtcblx0XHRcdFx0Ly8gTWF5YmUgbm90IGVudGVyZWRcblx0XHRcdFx0dGhpcy52aElkUHJlZml4ID0gdGhpcy5jcmVhdGVJZChcIkZpZWxkVmFsdWVIZWxwXCIpITtcblx0XHRcdH1cblx0XHRcdGNvbnN0IGNvbnRyb2xsZXIgPSB0aGlzLl9nZXRPd25lcigpPy5nZXRSb290Q29udHJvbGxlcigpIGFzIFBhZ2VDb250cm9sbGVyO1xuXHRcdFx0Y29uc3QgdmlldyA9IGNvbnRyb2xsZXIuZ2V0VmlldygpO1xuXHRcdFx0Y29uc3Qgb2RhdGFNZXRhTW9kZWwgPSB0aGlzLl9nZXRPd25lcigpPy5nZXRNZXRhTW9kZWwoKTtcblx0XHRcdGNvbnN0IG1ldGFDb250ZXh0ID0gb2RhdGFNZXRhTW9kZWw/LmNyZWF0ZUJpbmRpbmdDb250ZXh0KG1ldGFDb250ZXh0UGF0aC5nZXRQYXRoKCkpO1xuXHRcdFx0Y29uc3QgY29udGV4dCA9IG9kYXRhTWV0YU1vZGVsPy5jcmVhdGVCaW5kaW5nQ29udGV4dChtZXRhQ29udGV4dFBhdGguZ2V0Q29udGV4dFBhdGgoKSk7XG5cdFx0XHRpZiAoIW1ldGFDb250ZXh0IHx8ICFjb250ZXh0KSB7XG5cdFx0XHRcdHJldHVybjtcblx0XHRcdH1cblxuXHRcdFx0Ly9jcmVhdGUgYSBuZXcgYmluZGluZyBjb250ZXh0IGZvciB0aGUgdmFsdWUgaGVscFxuXG5cdFx0XHRjb25zdCBpdGVtc0FnZ3JlZ2F0aW9uID0gdGhpcy5jb2xsZWN0aW9uO1xuXHRcdFx0Y29uc3QgY3VzdG9tQWdncmVnYXRpb25MZW5ndGggPSB0aGlzLmdldEFwcENvbXBvbmVudCgpPy5nZXRNYW5pZmVzdEVudHJ5KFwic2FwLmZlXCIpPy5tYWNyb3M/Lm11bHRpVmFsdWVGaWVsZD8uaXRlbXNTaXplTGltaXQ7XG5cdFx0XHRpZiAoY3VzdG9tQWdncmVnYXRpb25MZW5ndGggIT09IHVuZGVmaW5lZCkge1xuXHRcdFx0XHRpdGVtc0FnZ3JlZ2F0aW9uLmxlbmd0aCA9IGN1c3RvbUFnZ3JlZ2F0aW9uTGVuZ3RoO1xuXHRcdFx0fVxuXG5cdFx0XHQvL2NvbXB1dGUgdGhlIGNvcnJlY3QgbGFiZWxcblx0XHRcdGNvbnN0IGxhYmVsID0gRmllbGRIZWxwZXIuY29tcHV0ZUxhYmVsVGV4dCh0aGlzLmNvbnZlcnRlZERhdGFGaWVsZC5WYWx1ZSBhcyBNZXRhTW9kZWxUeXBlPERhdGFGaWVsZFR5cGVzPiwge1xuXHRcdFx0XHRjb250ZXh0OiBtZXRhQ29udGV4dFxuXHRcdFx0fSkgYXMgc3RyaW5nO1xuXG5cdFx0XHRjb25zdCB2aENvbnRyb2wgPSBWYWx1ZUhlbHAuZ2V0VmFsdWVIZWxwRm9yTWV0YVBhdGgoXG5cdFx0XHRcdHRoaXMuZ2V0UGFnZUNvbnRyb2xsZXIoKSxcblx0XHRcdFx0Z2V0Q29udGV4dFJlbGF0aXZlVGFyZ2V0T2JqZWN0UGF0aCh0aGlzLmRhdGFNb2RlbFBhdGgpISxcblx0XHRcdFx0dGhpcy5jb250ZXh0UGF0aCA/PyB0aGlzLmdldE93bmVyQ29udGV4dFBhdGgoKSEsXG5cdFx0XHRcdHRoaXMuX2dldE93bmVyKCk/LmdldE1ldGFNb2RlbCgpXG5cdFx0XHQpO1xuXHRcdFx0bGV0IHZhbHVlSGVscDogc3RyaW5nIHwgdW5kZWZpbmVkO1xuXHRcdFx0aWYgKHZoQ29udHJvbCAmJiB2aENvbnRyb2wuZ2V0Q29udGVudCgpKSB7XG5cdFx0XHRcdHZhbHVlSGVscCA9IHZoQ29udHJvbC5nZXRDb250ZW50KCkhLmdldElkKCk7XG5cdFx0XHR9XG5cdFx0XHRjb25zdCBtdWx0aVZhbHVlRmllbGQgPSAoXG5cdFx0XHRcdDxNdWx0aVZhbHVlRmllbGRcblx0XHRcdFx0XHRpZD17dGhpcy5jcmVhdGVJZChcIl9tdmZcIil9XG5cdFx0XHRcdFx0ZGVsZWdhdGU9e3sgbmFtZTogXCJzYXAvZmUvbWFjcm9zL211bHRpdmFsdWVmaWVsZC9NdWx0aVZhbHVlRmllbGREZWxlZ2F0ZVwiIH19XG5cdFx0XHRcdFx0aXRlbXM9e2l0ZW1zQWdncmVnYXRpb259XG5cdFx0XHRcdFx0ZGlzcGxheT17dGhpcy5kaXNwbGF5TW9kZX1cblx0XHRcdFx0XHR3aWR0aD1cIjEwMCVcIlxuXHRcdFx0XHRcdGVkaXRNb2RlPXt0aGlzLmVkaXRNb2RlfVxuXHRcdFx0XHRcdHZhbHVlSGVscD17dmFsdWVIZWxwfVxuXHRcdFx0XHRcdGFyaWFMYWJlbGxlZEJ5PXt0aGlzLmFyaWFMYWJlbGxlZEJ5ID8gdGhpcy5hcmlhTGFiZWxsZWRCeSA6IFtdfVxuXHRcdFx0XHRcdHNob3dFbXB0eUluZGljYXRvcj17dGhpcy5mb3JtYXRPcHRpb25zPy5zaG93RW1wdHlJbmRpY2F0b3J9XG5cdFx0XHRcdFx0bGFiZWw9e2xhYmVsfVxuXHRcdFx0XHRcdHJlcXVpcmVkPXtjb21waWxlRXhwcmVzc2lvbihhbmQoVUkuSXNFZGl0YWJsZSwgaXNSZXF1aXJlZEV4cHJlc3Npb24odGhpcy5jb252ZXJ0ZWREYXRhRmllbGQpKSl9XG5cdFx0XHRcdFx0Y2hhbmdlPXsoTXVsdGlWYWx1ZUZpZWxkUnVudGltZS5oYW5kbGVDaGFuZ2UgYXMgdW5rbm93biBhcyBGdW5jdGlvbikuYmluZChNdWx0aVZhbHVlRmllbGRSdW50aW1lLCBjb250cm9sbGVyKX1cblx0XHRcdFx0XHRmaWVsZEdyb3VwSWRzPXt0aGlzLmZpZWxkR3JvdXBJZHN9XG5cdFx0XHRcdFx0dmFsaWRhdGVGaWVsZEdyb3VwPXtGaWVsZFJ1bnRpbWUub25WYWxpZGF0ZUZpZWxkR3JvdXB9XG5cdFx0XHRcdD5cblx0XHRcdFx0XHR7e1xuXHRcdFx0XHRcdFx0aXRlbXM6IDxNdWx0aVZhbHVlRmllbGRJdGVtIGtleT17dGhpcy5pdGVtLmtleX0gZGVzY3JpcHRpb249e3RoaXMuaXRlbS5kZXNjcmlwdGlvbn0gLz4sXG5cdFx0XHRcdFx0XHRjdXN0b21EYXRhOiA8Q3VzdG9tRGF0YSBrZXk9XCJpbnNlcnRhYmxlQW5kRGVsZXRhYmxlXCIgdmFsdWU9e3RoaXMuaW5zZXJ0YWJsZUFuZERlbGV0YWJsZX0gLz5cblx0XHRcdFx0XHR9fVxuXHRcdFx0XHQ8L011bHRpVmFsdWVGaWVsZD5cblx0XHRcdCk7XG5cblx0XHRcdGxldCBmb3Jtd3JhcHBlciA9IG51bGw7XG5cdFx0XHRpZiAodGhpcy5jb2xsYWJvcmF0aW9uRW5hYmxlZCkge1xuXHRcdFx0XHRjb25zdCBhdmF0YXIgPSAoXG5cdFx0XHRcdFx0PEF2YXRhclxuXHRcdFx0XHRcdFx0dmlzaWJsZT17dGhpcy5jb2xsYWJvcmF0aW9uRXhwcmVzc2lvbn1cblx0XHRcdFx0XHRcdGluaXRpYWxzPXt0aGlzLmNvbGxhYm9yYXRpb25Jbml0aWFsc0V4cHJlc3Npb259XG5cdFx0XHRcdFx0XHRkaXNwbGF5U2l6ZT1cIkN1c3RvbVwiXG5cdFx0XHRcdFx0XHRjdXN0b21EaXNwbGF5U2l6ZT1cIjEuNXJlbVwiXG5cdFx0XHRcdFx0XHRjdXN0b21Gb250U2l6ZT1cIjAuOHJlbVwiXG5cdFx0XHRcdFx0XHRiYWNrZ3JvdW5kQ29sb3I9e3RoaXMuY29sbGFib3JhdGlvbkNvbG9yRXhwcmVzc2lvbn1cblx0XHRcdFx0XHRcdHByZXNzPXsoKTogdm9pZCA9PiB7XG5cdFx0XHRcdFx0XHRcdEZpZWxkUnVudGltZUhlbHBlci5zaG93Q29sbGFib3JhdGlvbkVkaXRVc2VyKGF2YXRhciwgdmlldyk7XG5cdFx0XHRcdFx0XHR9fVxuXHRcdFx0XHRcdC8+XG5cdFx0XHRcdCk7XG5cdFx0XHRcdGZvcm13cmFwcGVyID0gKFxuXHRcdFx0XHRcdDxGb3JtRWxlbWVudFdyYXBwZXI+XG5cdFx0XHRcdFx0XHQ8SEJveCB3aWR0aD1cIjEwMCVcIiByZW5kZXJUeXBlPVwiQmFyZVwiIGFsaWduSXRlbXM9XCJFbmRcIj5cblx0XHRcdFx0XHRcdFx0e3tcblx0XHRcdFx0XHRcdFx0XHRpdGVtczogW211bHRpVmFsdWVGaWVsZCwgYXZhdGFyXVxuXHRcdFx0XHRcdFx0XHR9fVxuXHRcdFx0XHRcdFx0PC9IQm94PlxuXHRcdFx0XHRcdDwvRm9ybUVsZW1lbnRXcmFwcGVyPlxuXHRcdFx0XHQpO1xuXG5cdFx0XHRcdG11bHRpVmFsdWVGaWVsZD8uYWRkRXZlbnREZWxlZ2F0ZShcblx0XHRcdFx0XHR7XG5cdFx0XHRcdFx0XHRvbmZvY3VzaW46IChldnQ6IGpRdWVyeS5FdmVudCAmIHsgc3JjQ29udHJvbDogQ29udHJvbCB9KSA9PiB7XG5cdFx0XHRcdFx0XHRcdGNvbnN0IGN1cnJlbnRNdWx0aVZhbHVlRmllbGQgPSBldnQuc3JjQ29udHJvbC5nZXRQYXJlbnQoKSBhcyBNdWx0aVZhbHVlRmllbGQ7XG5cdFx0XHRcdFx0XHRcdGNvbnRyb2xsZXIuY29sbGFib3JhdGl2ZURyYWZ0Py5oYW5kbGVDb250ZW50Rm9jdXNJbihjdXJyZW50TXVsdGlWYWx1ZUZpZWxkKTtcblxuXHRcdFx0XHRcdFx0XHRpZiAodmFsdWVIZWxwQ29udHJvbD8uZ2V0RG9tUmVmKCkpIHtcblx0XHRcdFx0XHRcdFx0XHR2YWx1ZUhlbHBDb250cm9sLmF0dGFjaEV2ZW50T25jZShcImNsb3NlZFwiLCAoKSA9PiB7XG5cdFx0XHRcdFx0XHRcdFx0XHRjdXJyZW50TXVsdGlWYWx1ZUZpZWxkPy5mb2N1cygpO1xuXHRcdFx0XHRcdFx0XHRcdH0pO1xuXHRcdFx0XHRcdFx0XHR9XG5cdFx0XHRcdFx0XHR9LFxuXHRcdFx0XHRcdFx0b25mb2N1c291dDogKGV2dDogalF1ZXJ5LkV2ZW50ICYgeyBzcmNDb250cm9sOiBDb250cm9sIH0pID0+IHtcblx0XHRcdFx0XHRcdFx0bGV0IGN1cnJlbnRNdWx0aVZhbHVlRmllbGQgPSBldnQuc3JjQ29udHJvbC5nZXRQYXJlbnQoKSBhcyBNdWx0aVZhbHVlRmllbGQ7XG5cdFx0XHRcdFx0XHRcdGlmIChjdXJyZW50TXVsdGlWYWx1ZUZpZWxkPy5pc0E8VG9rZW5pemVyPihcInNhcC5tLlRva2VuaXplclwiKSkge1xuXHRcdFx0XHRcdFx0XHRcdGN1cnJlbnRNdWx0aVZhbHVlRmllbGQgPSBjdXJyZW50TXVsdGlWYWx1ZUZpZWxkLmdldFBhcmVudCgpPy5nZXRQYXJlbnQoKSBhcyBNdWx0aVZhbHVlRmllbGQ7XG5cdFx0XHRcdFx0XHRcdH1cblx0XHRcdFx0XHRcdFx0Y29uc3QgZXZlbnQgPSBuZXcgVUk1RXZlbnQoXCJcIiwgY3VycmVudE11bHRpVmFsdWVGaWVsZCwge1xuXHRcdFx0XHRcdFx0XHRcdGZpZWxkR3JvdXBJZHM6IGN1cnJlbnRNdWx0aVZhbHVlRmllbGQuZ2V0RmllbGRHcm91cElkcygpXG5cdFx0XHRcdFx0XHRcdH0pO1xuXHRcdFx0XHRcdFx0XHRjb250cm9sbGVyLmNvbGxhYm9yYXRpdmVEcmFmdC5oYW5kbGVDb250ZW50Rm9jdXNPdXQoZXZlbnQpO1xuXHRcdFx0XHRcdFx0fVxuXHRcdFx0XHRcdH0sXG5cdFx0XHRcdFx0dGhpc1xuXHRcdFx0XHQpO1xuXG5cdFx0XHRcdGNvbnN0IHZhbHVlSGVscENvbnRyb2wgPSBFbGVtZW50LmdldEVsZW1lbnRCeUlkKG11bHRpVmFsdWVGaWVsZC5nZXRWYWx1ZUhlbHAoKSkgYXMgTWRjVmFsdWVIZWxwO1xuXG5cdFx0XHRcdHZhbHVlSGVscENvbnRyb2w/LmF0dGFjaE9wZW5lZCgoZXZ0OiBWYWx1ZUhlbHAkT3BlbmVkRXZlbnQpID0+IHtcblx0XHRcdFx0XHRjb25zdCBjdXJyZW50TXVsdGlWYWx1ZUZpZWxkID0gZXZ0LmdldFNvdXJjZSgpLmdldENvbnRyb2woKSE7XG5cdFx0XHRcdFx0Y29udHJvbGxlci5jb2xsYWJvcmF0aXZlRHJhZnQuaGFuZGxlQ29udGVudEZvY3VzSW4oY3VycmVudE11bHRpVmFsdWVGaWVsZCBhcyBNdWx0aVZhbHVlRmllbGQpO1xuXHRcdFx0XHR9KTtcblx0XHRcdH1cblx0XHRcdG11bHRpVmFsdWVGaWVsZC5hZGRDdXN0b21EYXRhKG5ldyBDdXN0b21EYXRhKHsga2V5OiBcImZvcndhcmRlZEl0ZW1zQmluZGluZ1wiLCB2YWx1ZTogdGhpcy5pdGVtcyB9KSk7XG5cdFx0XHRyZXR1cm4gdGhpcy5jb2xsYWJvcmF0aW9uRW5hYmxlZCA/IGZvcm13cmFwcGVyIDogbXVsdGlWYWx1ZUZpZWxkO1xuXHRcdH1cblx0fVxuXG5cdC8qKlxuXHQgKiBTZXR0ZXIgZm9yIHRoZSByZWFkT25seSBwcm9wZXJ0eS5cblx0ICogQHBhcmFtIHJlYWRPbmx5XG5cdCAqL1xuXHRzZXRSZWFkT25seShyZWFkT25seTogYm9vbGVhbik6IHZvaWQge1xuXHRcdHN1cGVyLnNldFByb3BlcnR5KFwicmVhZE9ubHlcIiwgcmVhZE9ubHkpO1xuXHRcdHRoaXMudXBkYXRlRWRpdE1vZGUoKTtcblx0fVxuXG5cdC8qKlxuXHQgKiBTZXR0ZXIgZm9yIHRoZSBfaXNJbkVkaXRNb2RlIHByb3BlcnR5LlxuXHQgKiBAcGFyYW0gaW5FZGl0TW9kZVxuXHQgKi9cblx0c2V0X2lzSW5FZGl0TW9kZShpbkVkaXRNb2RlOiBib29sZWFuKTogdm9pZCB7XG5cdFx0c3VwZXIuc2V0UHJvcGVydHkoXCJfaXNJbkVkaXRNb2RlXCIsIGluRWRpdE1vZGUpO1xuXHRcdHRoaXMudXBkYXRlRWRpdE1vZGUoKTtcblx0fVxuXG5cdC8qKlxuXHQgKiBUaGUgZnVuY3Rpb24gcmV0dXJucyB0aGUgTXVsdGlWYWx1ZUZpZWxkLlxuXHQgKiBAcmV0dXJucyBUaGUgTXVsdGlWYWx1ZUZpZWxkLlxuXHQgKi9cblx0Z2V0TXVsdGlWYWx1ZUZpZWxkKCk6IE11bHRpVmFsdWVGaWVsZCB7XG5cdFx0aWYgKHRoaXMuaXNDb2xsYWJvcmF0aW9uRHJhZnRTdXBwb3J0ZWQoKSkge1xuXHRcdFx0cmV0dXJuICgodGhpcy5jb250ZW50IGFzIEZvcm1FbGVtZW50V3JhcHBlcikuY29udGVudCBhcyBIQm94KS5nZXRJdGVtcygpWzBdIGFzIE11bHRpVmFsdWVGaWVsZDtcblx0XHR9IGVsc2Uge1xuXHRcdFx0cmV0dXJuIHRoaXMuY29udGVudCBhcyBNdWx0aVZhbHVlRmllbGQ7XG5cdFx0fVxuXHR9XG5cblx0LyoqXG5cdCAqIFVwZGF0ZSB0aGUgZWRpdCBtb2RlIGJhc2VkIG9uIHRoZSByZWFkT25seSBhbmQgX2lzSW5FZGl0TW9kZSBwcm9wZXJ0aWVzLlxuXHQgKi9cblx0dXBkYXRlRWRpdE1vZGUoKTogdm9pZCB7XG5cdFx0aWYgKCF0aGlzLmNvbnRlbnQpIHtcblx0XHRcdHJldHVybjtcblx0XHR9XG5cdFx0Y29uc3QgbXVsdGl2YWx1ZUZpZWxkID0gdGhpcy5nZXRNdWx0aVZhbHVlRmllbGQoKTtcblx0XHRjb25zdCBpbnNlcnRhYmxlQW5kRGVsZXRhYmxlID0gbXVsdGl2YWx1ZUZpZWxkLmRhdGEoXCJpbnNlcnRhYmxlQW5kRGVsZXRhYmxlXCIpO1xuXHRcdGlmICh0aGlzLnJlYWRPbmx5ID09PSB0cnVlIHx8ICFpbnNlcnRhYmxlQW5kRGVsZXRhYmxlKSB7XG5cdFx0XHR0aGlzLmVkaXRNb2RlID0gXCJEaXNwbGF5XCI7XG5cdFx0XHRtdWx0aXZhbHVlRmllbGQuc2V0RWRpdE1vZGUoXCJEaXNwbGF5XCIpO1xuXHRcdH0gZWxzZSBpZiAodGhpcy5yZWFkT25seSA9PT0gZmFsc2UgJiYgaW5zZXJ0YWJsZUFuZERlbGV0YWJsZSkge1xuXHRcdFx0Ly9yZWFkT25seSBmYWxzZSBjYW4gb25seSBoYXZlIGltcGFjdCBpZiBpdGVtcyBhcmUgcHJvdmlkZWRcblx0XHRcdGlmICh0aGlzLl9pc0luRWRpdE1vZGUpIHtcblx0XHRcdFx0dGhpcy5lZGl0TW9kZSA9IFwiRWRpdGFibGVcIjtcblx0XHRcdFx0bXVsdGl2YWx1ZUZpZWxkLnNldEVkaXRNb2RlKFwiRWRpdGFibGVcIik7XG5cdFx0XHR9IGVsc2Uge1xuXHRcdFx0XHR0aGlzLmVkaXRNb2RlID0gXCJEaXNwbGF5XCI7XG5cdFx0XHRcdG11bHRpdmFsdWVGaWVsZC5zZXRFZGl0TW9kZShcIkRpc3BsYXlcIik7XG5cdFx0XHR9XG5cdFx0fVxuXHRcdC8vIGlmIHJlYWRPbmx5IGlzIG5vdCBleHBsaWNpdGx5IHNldCB3ZSBrZWVwIHRlaCBzdGFuZGFyZCBiZWhhdmlvclxuXHR9XG5cblx0LyoqXG5cdCAqIE9uIEJlZm9yZSByZW5kZXJpbmcgZnJvd2FyZCB0aGUgYXJpYUxhYmVsbGVkQnkgdG8gdGhlIG1kYyBNdWx0aVZhbHVlRmllbGQuXG5cdCAqL1xuXHRvbkJlZm9yZVJlbmRlcmluZygpOiB2b2lkIHtcblx0XHRpZiAodGhpcy5jb250ZW50KSB7XG5cdFx0XHRjb25zdCBtdWx0aVZhbHVlRmllbGQgPSB0aGlzLmdldE11bHRpVmFsdWVGaWVsZCgpO1xuXHRcdFx0Y29uc3QgYUFyaWFMYWJlbGxlZEJ5ID0gKHRoaXMgYXMgdW5rbm93biBhcyBFbmhhbmNlV2l0aFVJNTxNdWx0aVZhbHVlRmllbGRCbG9jaz4pLmdldEFyaWFMYWJlbGxlZEJ5KCk7XG5cblx0XHRcdGZvciAoY29uc3Qgc0lkIG9mIGFBcmlhTGFiZWxsZWRCeSkge1xuXHRcdFx0XHRjb25zdCBhQXJpYUxhYmVsbGVkQnlzID0gbXVsdGlWYWx1ZUZpZWxkLmdldEFyaWFMYWJlbGxlZEJ5KCk7XG5cdFx0XHRcdGlmICghYUFyaWFMYWJlbGxlZEJ5cy5pbmNsdWRlcyhzSWQpKSB7XG5cdFx0XHRcdFx0bXVsdGlWYWx1ZUZpZWxkLmFkZEFyaWFMYWJlbGxlZEJ5KHNJZCk7XG5cdFx0XHRcdH1cblx0XHRcdH1cblx0XHR9XG5cdH1cbn1cbiJdLCJtYXBwaW5ncyI6Ijs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7OztFQTBGQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0VBaEJBLElBbUJxQkEsb0JBQW9CLElBQUFDLElBQUEsR0FEeENDLGNBQWMsQ0FBQywrQkFBK0IsQ0FBQyxFQUFBQyxLQUFBLEdBRTlDQyxrQkFBa0IsQ0FBQywwQkFBMEIsQ0FBQyxFQUFBQyxLQUFBLEdBTTlDQyxRQUFRLENBQUM7SUFDVEMsSUFBSSxFQUFFO0VBQ1AsQ0FBQyxDQUFDLEVBQUFDLEtBQUEsR0FNREMsV0FBVyxDQUFDO0lBQ1pGLElBQUksRUFBRTtFQUNQLENBQUMsQ0FBQyxFQUFBRyxLQUFBLEdBTURELFdBQVcsQ0FBQztJQUNaRixJQUFJLEVBQUU7RUFDUCxDQUFDLENBQUMsRUFBQUksS0FBQSxHQVFETCxRQUFRLENBQUM7SUFDVEMsSUFBSSxFQUFFLFFBQVE7SUFDZEssUUFBUSxFQUFFO0VBQ1gsQ0FBQyxDQUFDLEVBQUFDLEtBQUEsR0FPRFAsUUFBUSxDQUFDO0lBQUVDLElBQUksRUFBRSxTQUFTO0lBQUVLLFFBQVEsRUFBRTtFQUFNLENBQUMsQ0FBQyxFQUFBRSxLQUFBLEdBTzlDUixRQUFRLENBQUM7SUFDVEMsSUFB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
641
+ //# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJuYW1lcyI6WyJNdWx0aVZhbHVlRmllbGRCbG9jayIsIl9kZWMiLCJkZWZpbmVVSTVDbGFzcyIsIl9kZWMyIiwiaW1wbGVtZW50SW50ZXJmYWNlIiwiX2RlYzMiLCJwcm9wZXJ0eSIsInR5cGUiLCJfZGVjNCIsImFzc29jaWF0aW9uIiwiX2RlYzUiLCJfZGVjNiIsInJlcXVpcmVkIiwiX2RlYzciLCJfZGVjOCIsIl9kZWM5IiwiaXNCaW5kaW5nSW5mbyIsIl9kZWMxMCIsImFnZ3JlZ2F0aW9uIiwibXVsdGlwbGUiLCJkZWZhdWx0Q2xhc3MiLCJGb3JtYXRPcHRpb25zIiwiX2RlYzExIiwiX2RlYzEyIiwiX2NsYXNzIiwiX2NsYXNzMiIsIl9CdWlsZGluZ0Jsb2NrIiwicHJvcHMiLCJvdGhlcnMiLCJfdGhpcyIsIl9pc0luRWRpdE1vZGUiLCJjb21waWxlRXhwcmVzc2lvbiIsIlVJIiwiSXNFZGl0YWJsZSIsImNhbGwiLCJfaW5pdGlhbGl6ZXJEZWZpbmVQcm9wZXJ0eSIsIl9kZXNjcmlwdG9yIiwiX2Rlc2NyaXB0b3IyIiwiX2Rlc2NyaXB0b3IzIiwiX2Rlc2NyaXB0b3I0IiwiX2Rlc2NyaXB0b3I1IiwiX2Rlc2NyaXB0b3I2IiwiX2Rlc2NyaXB0b3I3IiwiX2Rlc2NyaXB0b3I4IiwiX2Rlc2NyaXB0b3I5IiwiX2Rlc2NyaXB0b3IxMCIsIl9kZXNjcmlwdG9yMTEiLCJfZXhwb3J0cyIsIl9pbmhlcml0c0xvb3NlIiwiX3Byb3RvIiwicHJvdG90eXBlIiwiX292ZXJyaWRlVmFsdWUiLCJjb2xsZWN0aW9uQmluZGluZyIsIml0ZW1EYXRhTW9kZWxPYmplY3RQYXRoIiwidGV4dEV4cHJlc3Npb24iLCJrZXkiLCJpdGVtcyIsIm1vZGVsIiwibW9kZWxOYW1lIiwicGF0aCIsImNvbW1vblRhcmdldE9iamVjdFByb3BlcnR5IiwidGFyZ2V0T2JqZWN0IiwiY29tbW9uUHJvcGVydHlQYXRoIiwibmFtZSIsImlzUGF0aEFubm90YXRpb25FeHByZXNzaW9uIiwiYW5ub3RhdGlvbnMiLCJDb21tb24iLCJUZXh0IiwiZGVzY3JpcHRpb24iLCJfZ2V0TXVsdGlJbnB1dFNldHRpbmdzIiwicHJvcGVydHlEYXRhTW9kZWxPYmplY3RQYXRoIiwiZm9ybWF0T3B0aW9ucyIsInBhdGhTdHJ1Y3R1cmUiLCJfZ2V0UGF0aFN0cnVjdHVyZSIsImNvbGxlY3Rpb25QYXRoIiwibWV0YVBhdGgiLCJzdGFydHNXaXRoIiwiY29udGV4dExvY2F0aW9uIiwic3RhcnRpbmdFbnRpdHlTZXQiLCJ1c2VQYXJlbnRCaW5kaW5nQ2FjaGUiLCJ0ZW1wbGF0ZVNoYXJlYWJsZSIsInBhcmFtZXRlcnMiLCIkJG93blJlcXVlc3QiLCJwcm9wZXJ0eVBhdGhPclByb3BlcnR5IiwicHJvcGVydHlEZWZpbml0aW9uIiwiaXNQcm9wZXJ0eVBhdGhFeHByZXNzaW9uIiwiJHRhcmdldCIsImNvbW1vblRleHQiLCJyZWxhdGl2ZUxvY2F0aW9uIiwiZ2V0UmVsYXRpdmVQYXRocyIsImdldEV4cHJlc3Npb25Gcm9tQW5ub3RhdGlvbiIsImdldFZhbHVlQmluZGluZyIsImRpc3BsYXlPbmx5IiwibGVuZ3RoIiwiZGF0YU1vZGVsT2JqZWN0UGF0aCIsImZpcnN0Q29sbGVjdGlvblBhdGgiLCJjdXJyZW50RW50aXR5U2V0IiwidGFyZ2V0RW50aXR5U2V0IiwibmF2aWdhdGVkUGF0aHMiLCJjb250ZXh0TmF2c0Zvckl0ZW0iLCJuYXZpZ2F0aW9uUHJvcGVydGllcyIsIm5hdlByb3AiLCJ1bmRlZmluZWQiLCJzb21lIiwiY29udGV4dE5hdlByb3AiLCJmdWxseVF1YWxpZmllZE5hbWUiLCJwdXNoIiwibmF2aWdhdGlvblByb3BlcnR5QmluZGluZyIsImhhc093blByb3BlcnR5IiwiaXNNdWx0aXBsZU5hdmlnYXRpb25Qcm9wZXJ0eSIsImpvaW4iLCJPYmplY3QiLCJhc3NpZ24iLCJjb21wdXRlRmllbGRHcm91cElkcyIsImFwcENvbXBvbmVudCIsInNpZGVFZmZlY3RTZXJ2aWNlIiwiZ2V0U2lkZUVmZmVjdHNTZXJ2aWNlIiwiZmllbGRHcm91cElkcyIsImRhdGFNb2RlbFBhdGgiLCJ0YXJnZXRFbnRpdHlUeXBlIiwiY29sbGFib3JhdGlvbkVuYWJsZWQiLCJjb2xsYWJvcmF0aW9uRmllbGRHcm91cCIsIkNvbGxhYm9yYXRpb25GaWVsZEdyb3VwUHJlZml4IiwiZGF0YVNvdXJjZVBhdGgiLCJyZXN1bHQiLCJpbml0aWFsaXplIiwibWV0YUNvbnRleHRQYXRoIiwib3duZXIiLCJfZ2V0T3duZXIiLCJjb250ZXh0UGF0aCIsInByZXByb2Nlc3NvckNvbnRleHQiLCJmdWxsQ29udGV4dFBhdGgiLCJvZGF0YU1ldGFNb2RlbCIsImdldE1ldGFNb2RlbCIsIm1ldGFDb250ZXh0IiwiY3JlYXRlQmluZGluZ0NvbnRleHQiLCJnZXRQYXRoIiwibWV0YVBhdGhPYmplY3QiLCJnZXRUYXJnZXQiLCJpc1Byb3BlcnR5IiwiRGF0YUZpZWxkRGVmYXVsdCIsImVuaGFuY2VkTWV0YVBhdGgiLCJkYXRhRmllbGREYXRhTW9kZWxQYXRoIiwiZ2V0RGF0YU1vZGVsT2JqZWN0Rm9yTWV0YVBhdGgiLCJjb252ZXJ0ZWREYXRhRmllbGQiLCJlbmhhbmNlRGF0YU1vZGVsUGF0aCIsIlZhbHVlIiwiZ2V0VGFyZ2V0T2JqZWN0UGF0aCIsImluc2VydGFibGUiLCJpc1BhdGhJbnNlcnRhYmxlIiwiZGVsZXRlTmF2aWdhdGlvblJlc3RyaWN0aW9uIiwiaXNQYXRoRGVsZXRhYmxlIiwiaWdub3JlVGFyZ2V0Q29sbGVjdGlvbiIsImF1dGhvcml6ZVVucmVzb2x2YWJsZSIsImRlbGV0ZVBhdGgiLCJkZWxldGFibGUiLCJpZkVsc2UiLCJfdHlwZSIsIm9yIiwibm90IiwiaXNDb25zdGFudCIsImNvbnN0YW50IiwicmVhZE9ubHkiLCJ2aXNpYmxlIiwiZ2V0VmlzaWJsZUV4cHJlc3Npb24iLCJpbnNlcnRhYmxlQW5kRGVsZXRhYmxlIiwiYW5kIiwiY29sbGFib3JhdGlvbkV4cHJlc3Npb24iLCJjb21wdXRlQ29sbGFib3JhdGlvblByb3BlcnRpZXMiLCJpc1Byb3BlcnR5SW5pdGlhbCIsImVkaXRNb2RlIiwiZXF1YWwiLCJpc1JlYWRPbmx5RXhwcmVzc2lvbiIsImRpc3BsYXlNb2RlIiwiZ2V0RGlzcGxheU1vZGUiLCJsb2NhbERhdGFNb2RlbFBhdGgiLCJpdGVtIiwiY29sbGVjdGlvbiIsImdldEFwcENvbXBvbmVudCIsIm9uTWV0YWRhdGFBdmFpbGFibGUiLCJjb250ZW50IiwiY3JlYXRlQ29udGVudCIsImlzQ29sbGFib3JhdGlvbkRyYWZ0U3VwcG9ydGVkIiwiTW9kZWxIZWxwZXIiLCJVSUZvcm1hdHRlcnMiLCJnZXRDb2xsYWJvcmF0aW9uRXhwcmVzc2lvbiIsIkNvbGxhYm9yYXRpb25Gb3JtYXR0ZXJzIiwiaGFzQ29sbGFib3JhdGlvbkFjdGl2aXR5IiwiZ2V0UmVxdWlyZWQiLCJnZXRNdWx0aVZhbHVlRmllbGQiLCJnZXRJdGVtcyIsImdldE1ldGFQYXRoT2JqZWN0IiwiaWQiLCJ2aElkUHJlZml4IiwiSUQiLCJnZW5lcmF0ZSIsImdldElkIiwiY3JlYXRlSWQiLCJjb250cm9sbGVyIiwiZ2V0Um9vdENvbnRyb2xsZXIiLCJjb250ZXh0IiwiZ2V0Q29udGV4dFBhdGgiLCJpdGVtc0FnZ3JlZ2F0aW9uIiwiY3VzdG9tQWdncmVnYXRpb25MZW5ndGgiLCJnZXRNYW5pZmVzdEVudHJ5IiwibWFjcm9zIiwibXVsdGlWYWx1ZUZpZWxkIiwiaXRlbXNTaXplTGltaXQiLCJsYWJlbCIsIkZpZWxkSGVscGVyIiwiY29tcHV0ZUxhYmVsVGV4dCIsInZoQ29udHJvbCIsIlZhbHVlSGVscCIsImdldFZhbHVlSGVscEZvck1ldGFQYXRoIiwiZ2V0UGFnZUNvbnRyb2xsZXIiLCJnZXRDb250ZXh0UmVsYXRpdmVUYXJnZXRPYmplY3RQYXRoIiwiZ2V0T3duZXJDb250ZXh0UGF0aCIsInZhbHVlSGVscCIsImdldENvbnRlbnQiLCJfanN4IiwiTXVsdGlWYWx1ZUZpZWxkIiwiZGVsZWdhdGUiLCJkaXNwbGF5Iiwid2lkdGgiLCJhcmlhTGFiZWxsZWRCeSIsInNob3dFbXB0eUluZGljYXRvciIsImlzUmVxdWlyZWRFeHByZXNzaW9uIiwiY2hhbmdlIiwiTXVsdGlWYWx1ZUZpZWxkUnVudGltZSIsImhhbmRsZUNoYW5nZSIsImJpbmQiLCJ2YWxpZGF0ZUZpZWxkR3JvdXAiLCJvblZhbGlkYXRlRmllbGRHcm91cCIsImNoaWxkcmVuIiwiTXVsdGlWYWx1ZUZpZWxkSXRlbSIsImN1c3RvbURhdGEiLCJDdXN0b21EYXRhIiwidmFsdWUiLCJmb3Jtd3JhcHBlciIsInByb3BlcnR5UGF0aCIsImNvbGxEcmFmdEhhbmRsZXIiLCJDb2xsYWJvcmF0aXZlRHJhZnRIYW5kbGVyIiwic2hvd0F2YXRhciIsIkZvcm1FbGVtZW50V3JhcHBlciIsIkhCb3giLCJyZW5kZXJUeXBlIiwiYWxpZ25JdGVtcyIsImFkZEV2ZW50RGVsZWdhdGUiLCJvbmZvY3VzaW4iLCJldnQiLCJjdXJyZW50TXVsdGlWYWx1ZUZpZWxkIiwic3JjQ29udHJvbCIsImdldFBhcmVudCIsImNvbGxhYm9yYXRpdmVEcmFmdCIsImhhbmRsZUNvbnRlbnRGb2N1c0luIiwidmFsdWVIZWxwQ29udHJvbCIsImdldERvbVJlZiIsImF0dGFjaEV2ZW50T25jZSIsImZvY3VzIiwiRWxlbWVudCIsImdldEVsZW1lbnRCeUlkIiwiZ2V0VmFsdWVIZWxwIiwiYXR0YWNoT3BlbmVkIiwiZ2V0U291cmNlIiwiZ2V0Q29udHJvbCIsImFkZEN1c3RvbURhdGEiLCJldmVudCIsImhhbmRsZUNvbnRlbnRGb2N1c091dCIsIkZpZWxkUnVudGltZSIsInNldFJlYWRPbmx5Iiwic2V0UHJvcGVydHkiLCJ1cGRhdGVFZGl0TW9kZSIsInNldF9pc0luRWRpdE1vZGUiLCJpbkVkaXRNb2RlIiwibXVsdGl2YWx1ZUZpZWxkIiwiZGF0YSIsInNldEVkaXRNb2RlIiwib25CZWZvcmVSZW5kZXJpbmciLCJhQXJpYUxhYmVsbGVkQnkiLCJnZXRBcmlhTGFiZWxsZWRCeSIsInNJZCIsImFBcmlhTGFiZWxsZWRCeXMiLCJpbmNsdWRlcyIsImFkZEFyaWFMYWJlbGxlZEJ5IiwiQnVpbGRpbmdCbG9jayIsIl9hcHBseURlY29yYXRlZERlc2NyaXB0b3IiLCJjb25maWd1cmFibGUiLCJlbnVtZXJhYmxlIiwid3JpdGFibGUiLCJpbml0aWFsaXplciJdLCJzb3VyY2VSb290IjoiLiIsInNvdXJjZXMiOlsiTXVsdGlWYWx1ZUZpZWxkLnRzeCJdLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgdHlwZSB7IFByb3BlcnR5IH0gZnJvbSBcIkBzYXAtdXgvdm9jYWJ1bGFyaWVzLXR5cGVzXCI7XG5pbXBvcnQgdHlwZSB7IFBhdGhBbm5vdGF0aW9uRXhwcmVzc2lvbiwgUHJvcGVydHlQYXRoIH0gZnJvbSBcIkBzYXAtdXgvdm9jYWJ1bGFyaWVzLXR5cGVzL0VkbVwiO1xuaW1wb3J0IHR5cGUgeyBEYXRhRmllbGQsIERhdGFGaWVsZFR5cGVzIH0gZnJvbSBcIkBzYXAtdXgvdm9jYWJ1bGFyaWVzLXR5cGVzL3ZvY2FidWxhcmllcy9VSVwiO1xuaW1wb3J0IHsgVUlBbm5vdGF0aW9uVGVybXMgfSBmcm9tIFwiQHNhcC11eC92b2NhYnVsYXJpZXMtdHlwZXMvdm9jYWJ1bGFyaWVzL1VJXCI7XG5pbXBvcnQgdHlwZSB7IEJpbmRpbmdUb29sa2l0RXhwcmVzc2lvbiwgQ29tcGlsZWRCaW5kaW5nVG9vbGtpdEV4cHJlc3Npb24gfSBmcm9tIFwic2FwL2ZlL2Jhc2UvQmluZGluZ1Rvb2xraXRcIjtcbmltcG9ydCB7XG5cdGFuZCxcblx0Y29tcGlsZUV4cHJlc3Npb24sXG5cdGNvbnN0YW50LFxuXHRlcXVhbCxcblx0Z2V0RXhwcmVzc2lvbkZyb21Bbm5vdGF0aW9uLFxuXHRpZkVsc2UsXG5cdGlzQ29uc3RhbnQsXG5cdG5vdCxcblx0b3Jcbn0gZnJvbSBcInNhcC9mZS9iYXNlL0JpbmRpbmdUb29sa2l0XCI7XG5pbXBvcnQge1xuXHRhZ2dyZWdhdGlvbixcblx0YXNzb2NpYXRpb24sXG5cdGRlZmluZVVJNUNsYXNzLFxuXHRpbXBsZW1lbnRJbnRlcmZhY2UsXG5cdHByb3BlcnR5LFxuXHR0eXBlIEVuaGFuY2VXaXRoVUk1LFxuXHR0eXBlIFByb3BlcnRpZXNPZlxufSBmcm9tIFwic2FwL2ZlL2Jhc2UvQ2xhc3NTdXBwb3J0XCI7XG5pbXBvcnQgdHlwZSBBcHBDb21wb25lbnQgZnJvbSBcInNhcC9mZS9jb3JlL0FwcENvbXBvbmVudFwiO1xuaW1wb3J0IHR5cGUgUGFnZUNvbnRyb2xsZXIgZnJvbSBcInNhcC9mZS9jb3JlL1BhZ2VDb250cm9sbGVyXCI7XG5pbXBvcnQgQnVpbGRpbmdCbG9jayBmcm9tIFwic2FwL2ZlL2NvcmUvYnVpbGRpbmdCbG9ja3MvQnVpbGRpbmdCbG9ja1wiO1xuaW1wb3J0IHsgQ29sbGFib3JhdGlvbkZpZWxkR3JvdXBQcmVmaXggfSBmcm9tIFwic2FwL2ZlL2NvcmUvY29udHJvbGxlcmV4dGVuc2lvbnMvY29sbGFib3JhdGlvbi9Db2xsYWJvcmF0aW9uQ29tbW9uXCI7XG5pbXBvcnQgRm9ybUVsZW1lbnRXcmFwcGVyIGZyb20gXCJzYXAvZmUvY29yZS9jb250cm9scy9Gb3JtRWxlbWVudFdyYXBwZXJcIjtcbmltcG9ydCAqIGFzIENvbGxhYm9yYXRpb25Gb3JtYXR0ZXJzIGZyb20gXCJzYXAvZmUvY29yZS9mb3JtYXR0ZXJzL0NvbGxhYm9yYXRpb25Gb3JtYXR0ZXJcIjtcbmltcG9ydCB7IFVJIH0gZnJvbSBcInNhcC9mZS9jb3JlL2hlbHBlcnMvQmluZGluZ0hlbHBlclwiO1xuaW1wb3J0IHR5cGUgTWV0YVBhdGggZnJvbSBcInNhcC9mZS9jb3JlL2hlbHBlcnMvTWV0YVBhdGhcIjtcbmltcG9ydCBNb2RlbEhlbHBlciBmcm9tIFwic2FwL2ZlL2NvcmUvaGVscGVycy9Nb2RlbEhlbHBlclwiO1xuaW1wb3J0ICogYXMgSUQgZnJvbSBcInNhcC9mZS9jb3JlL2hlbHBlcnMvU3RhYmxlSWRIZWxwZXJcIjtcbmltcG9ydCB7XG5cdGlzTXVsdGlwbGVOYXZpZ2F0aW9uUHJvcGVydHksXG5cdGlzUGF0aEFubm90YXRpb25FeHByZXNzaW9uLFxuXHRpc1Byb3BlcnR5LFxuXHRpc1Byb3BlcnR5UGF0aEV4cHJlc3Npb25cbn0gZnJvbSBcInNhcC9mZS9jb3JlL2hlbHBlcnMvVHlwZUd1YXJkc1wiO1xuaW1wb3J0IHR5cGUgeyBEYXRhTW9kZWxPYmplY3RQYXRoIH0gZnJvbSBcInNhcC9mZS9jb3JlL3RlbXBsYXRpbmcvRGF0YU1vZGVsUGF0aEhlbHBlclwiO1xuaW1wb3J0IHtcblx0ZW5oYW5jZURhdGFNb2RlbFBhdGgsXG5cdGdldENvbnRleHRSZWxhdGl2ZVRhcmdldE9iamVjdFBhdGgsXG5cdGdldFJlbGF0aXZlUGF0aHMsXG5cdGdldFRhcmdldE9iamVjdFBhdGgsXG5cdGlzUGF0aERlbGV0YWJsZSxcblx0aXNQYXRoSW5zZXJ0YWJsZVxufSBmcm9tIFwic2FwL2ZlL2NvcmUvdGVtcGxhdGluZy9EYXRhTW9kZWxQYXRoSGVscGVyXCI7XG5pbXBvcnQgeyBpc1JlYWRPbmx5RXhwcmVzc2lvbiwgaXNSZXF1aXJlZEV4cHJlc3Npb24gfSBmcm9tIFwic2FwL2ZlL2NvcmUvdGVtcGxhdGluZy9GaWVsZENvbnRyb2xIZWxwZXJcIjtcbmltcG9ydCB0eXBlIHsgRGlzcGxheU1vZGUgfSBmcm9tIFwic2FwL2ZlL2NvcmUvdGVtcGxhdGluZy9VSUZvcm1hdHRlcnNcIjtcbmltcG9ydCAqIGFzIFVJRm9ybWF0dGVycyBmcm9tIFwic2FwL2ZlL2NvcmUvdGVtcGxhdGluZy9VSUZvcm1hdHRlcnNcIjtcbmltcG9ydCB7IGdldERpc3BsYXlNb2RlIH0gZnJvbSBcInNhcC9mZS9jb3JlL3RlbXBsYXRpbmcvVUlGb3JtYXR0ZXJzXCI7XG5pbXBvcnQgRmllbGRIZWxwZXIgZnJvbSBcInNhcC9mZS9tYWNyb3MvZmllbGQvRmllbGRIZWxwZXJcIjtcbmltcG9ydCBGaWVsZFJ1bnRpbWUgZnJvbSBcInNhcC9mZS9tYWNyb3MvZmllbGQvRmllbGRSdW50aW1lXCI7XG5pbXBvcnQgeyBnZXRWYWx1ZUJpbmRpbmcsIGdldFZpc2libGVFeHByZXNzaW9uIH0gZnJvbSBcInNhcC9mZS9tYWNyb3MvZmllbGQvRmllbGRUZW1wbGF0aW5nXCI7XG5pbXBvcnQgRm9ybWF0T3B0aW9ucyBmcm9tIFwic2FwL2ZlL21hY3Jvcy9tdWx0aXZhbHVlZmllbGQvRm9ybWF0T3B0aW9uc1wiO1xuaW1wb3J0IE11bHRpVmFsdWVGaWVsZFJ1bnRpbWUgZnJvbSBcInNhcC9mZS9tYWNyb3MvbXVsdGl2YWx1ZWZpZWxkL011bHRpVmFsdWVGaWVsZFJ1bnRpbWVcIjtcbmltcG9ydCBIQm94IGZyb20gXCJzYXAvbS9IQm94XCI7XG5pbXBvcnQgdHlwZSB7IFByb3BlcnR5QmluZGluZ0luZm8gfSBmcm9tIFwic2FwL3VpL2Jhc2UvTWFuYWdlZE9iamVjdFwiO1xuaW1wb3J0IHR5cGUgQ29udHJvbCBmcm9tIFwic2FwL3VpL2NvcmUvQ29udHJvbFwiO1xuaW1wb3J0IHR5cGUgeyAkQ29udHJvbFNldHRpbmdzLCBDb250cm9sJFZhbGlkYXRlRmllbGRHcm91cEV2ZW50IH0gZnJvbSBcInNhcC91aS9jb3JlL0NvbnRyb2xcIjtcbmltcG9ydCBDdXN0b21EYXRhIGZyb20gXCJzYXAvdWkvY29yZS9DdXN0b21EYXRhXCI7XG5pbXBvcnQgRWxlbWVudCBmcm9tIFwic2FwL3VpL2NvcmUvRWxlbWVudFwiO1xuaW1wb3J0IE11bHRpVmFsdWVGaWVsZCBmcm9tIFwic2FwL3VpL21kYy9NdWx0aVZhbHVlRmllbGRcIjtcbmltcG9ydCB0eXBlIHsgZGVmYXVsdCBhcyBNZGNWYWx1ZUhlbHAsIFZhbHVlSGVscCRPcGVuZWRFdmVudCB9IGZyb20gXCJzYXAvdWkvbWRjL1ZhbHVlSGVscFwiO1xuaW1wb3J0IHR5cGUgRmllbGRFZGl0TW9kZSBmcm9tIFwic2FwL3VpL21kYy9lbnVtcy9GaWVsZEVkaXRNb2RlXCI7XG5pbXBvcnQgTXVsdGlWYWx1ZUZpZWxkSXRlbSBmcm9tIFwic2FwL3VpL21kYy9maWVsZC9NdWx0aVZhbHVlRmllbGRJdGVtXCI7XG5pbXBvcnQgdHlwZSBDb250ZXh0IGZyb20gXCJzYXAvdWkvbW9kZWwvb2RhdGEvdjQvQ29udGV4dFwiO1xuaW1wb3J0IHR5cGUgeyBNZXRhTW9kZWxUeXBlIH0gZnJvbSBcIi4uLy4uLy4uLy4uLy4uLy4uL3R5cGVzL21ldGFtb2RlbF90eXBlc1wiO1xuaW1wb3J0IENvbGxhYm9yYXRpdmVEcmFmdEhhbmRsZXIgZnJvbSBcIi4vQ29sbGFib3JhdGl2ZURyYWZ0SGFuZGxlclwiO1xuaW1wb3J0IFZhbHVlSGVscCBmcm9tIFwiLi9WYWx1ZUhlbHBcIjtcblxudHlwZSBNdWx0aUlucHV0U2V0dGluZ3MgPSB7XG5cdGRlc2NyaXB0aW9uOiBCaW5kaW5nVG9vbGtpdEV4cHJlc3Npb248c3RyaW5nPiB8IENvbXBpbGVkQmluZGluZ1Rvb2xraXRFeHByZXNzaW9uO1xuXHRjb2xsZWN0aW9uQmluZGluZzogUHJvcGVydHlCaW5kaW5nSW5mbztcblx0a2V5OiBCaW5kaW5nVG9vbGtpdEV4cHJlc3Npb248c3RyaW5nPiB8IENvbXBpbGVkQmluZGluZ1Rvb2xraXRFeHByZXNzaW9uO1xuXHRkaXNwbGF5T25seT86IGJvb2xlYW47XG59O1xuXG50eXBlIE11bHRpVmFsdWVGaWVsZFBhdGhTdHJ1Y3R1cmUgPSB7XG5cdGNvbGxlY3Rpb25QYXRoOiBzdHJpbmc7XG5cdGl0ZW1EYXRhTW9kZWxPYmplY3RQYXRoOiBEYXRhTW9kZWxPYmplY3RQYXRoPFByb3BlcnR5Pjtcbn07XG5cbi8qKlxuICogQnVpbGRpbmcgYmxvY2sgZm9yIGNyZWF0aW5nIGEgTXVsdGlWYWx1ZUZpZWxkIGJhc2VkIG9uIHRoZSBtZXRhZGF0YSBwcm92aWRlZCBieSBPRGF0YSBWNC5cbiAqIDxicj5cbiAqIFRoZSBNdWx0aVZhbHVlRmllbGQgY2FuIGJlIHVzZWQgdG8gZGlzcGxheSBlaXRoZXIgYSBEYXRhRmllbGQgb3IgUHJvcGVydHkgZGlyZWN0bHkuIEl0IGhhcyB0byBwb2ludCB0byBhIGNvbGxlY3Rpb24gcHJvcGVydHkuXG4gKiA8YnI+XG4gKiBVc2FnZSBleGFtcGxlOlxuICogPHByZT5cbiAqICZsdDttYWNybzpNdWx0aVZhbHVlRmllbGRcbiAqIGlkPVwiU29tZVVuaXF1ZUlkZW50aWZpZXJcIlxuICogY29udGV4dFBhdGg9XCJ7ZW50aXR5U2V0Jmd0O31cIlxuICogbWV0YVBhdGg9XCJ7ZGF0YUZpZWxkJmd0O31cIlxuICogLyZndDtcbiAqIDwvcHJlPlxuICogQGFsaWFzIHNhcC5mZS5tYWNyb3MuTXVsdGlWYWx1ZUZpZWxkXG4gKiBAcHVibGljXG4gKiBAc2luY2UgMS4xMTguMFxuICovXG5cbkBkZWZpbmVVSTVDbGFzcyhcInNhcC5mZS5tYWNyb3MuTXVsdGlWYWx1ZUZpZWxkXCIpXG5leHBvcnQgZGVmYXVsdCBjbGFzcyBNdWx0aVZhbHVlRmllbGRCbG9jayBleHRlbmRzIEJ1aWxkaW5nQmxvY2s8Q29udHJvbD4ge1xuXHRAaW1wbGVtZW50SW50ZXJmYWNlKFwic2FwLnVpLmNvcmUuSUZvcm1Db250ZW50XCIpXG5cdF9faW1wbGVtZW50c19fc2FwX3VpX2NvcmVfSUZvcm1Db250ZW50ID0gdHJ1ZTtcblxuXHQvKipcblx0ICogVGhlICdpZCcgcHJvcGVydHlcblx0ICovXG5cdEBwcm9wZXJ0eSh7XG5cdFx0dHlwZTogXCJzdHJpbmdcIlxuXHR9KVxuXHRwdWJsaWMgaWQ/OiBzdHJpbmc7XG5cblx0LyoqXG5cdCAqIFByZWZpeCBhZGRlZCB0byB0aGUgZ2VuZXJhdGVkIElEIG9mIHRoZSBmaWVsZCAtIG9ubHkgaWYgbm8gaWQgaXMgcHJvdmlkZWRcblx0ICovXG5cdEBhc3NvY2lhdGlvbih7XG5cdFx0dHlwZTogXCJzdHJpbmdcIlxuXHR9KVxuXHRpZFByZWZpeD86IHN0cmluZztcblxuXHQvKipcblx0ICogUHJlZml4IGFkZGVkIHRvIHRoZSBnZW5lcmF0ZWQgSUQgb2YgdGhlIHZhbHVlIGhlbHAgdXNlZCBmb3IgdGhlIGZpZWxkXG5cdCAqL1xuXHRAYXNzb2NpYXRpb24oe1xuXHRcdHR5cGU6IFwic3RyaW5nXCJcblx0fSlcblx0dmhJZFByZWZpeCE6IHN0cmluZztcblxuXHQvKipcblx0ICogRGVmaW5lcyB0aGUgcmVsYXRpdmUgTWV0YWRhdGEgcGF0aCB0byB0aGUgTXVsdGlWYWx1ZUZpZWxkLlxuXHQgKiBUaGUgbWV0YVBhdGggc2hvdWxkIHBvaW50IHRvIGEgUHJvcGVydHkgb3IgRGF0YUZpZWxkLlxuXHQgKiBAcHVibGljXG5cdCAqL1xuXHRAcHJvcGVydHkoe1xuXHRcdHR5cGU6IFwic3RyaW5nXCIsXG5cdFx0cmVxdWlyZWQ6IHRydWVcblx0fSlcblx0cHVibGljIG1ldGFQYXRoITogc3RyaW5nO1xuXG5cdC8qKlxuXHQgKiBUaGUgcmVhZE9ubHkgZmxhZ1xuXHQgKiBAcHVibGljXG5cdCAqL1xuXHRAcHJvcGVydHkoeyB0eXBlOiBcImJvb2xlYW5cIiwgcmVxdWlyZWQ6IGZhbHNlIH0pXG5cdHB1YmxpYyByZWFkT25seT86IGJvb2xlYW4gfCBDb21waWxlZEJpbmRpbmdUb29sa2l0RXhwcmVzc2lvbjtcblxuXHQvKipcblx0ICogVGhlIGNvbnRleHQgcGF0aCBwcm92aWRlZCBmb3IgdGhlIE11bHRpVmFsdWVGaWVsZFxuXHQgKiBAcHVibGljXG5cdCAqL1xuXHRAcHJvcGVydHkoe1xuXHRcdHR5cGU6IFwic3RyaW5nXCJcblx0fSlcblx0cHVibGljIGNvbnRleHRQYXRoPzogc3RyaW5nO1xuXG5cdC8qKlxuXHQgKiBQcm9wZXJ0eSBhZGRlZCB0byBiZSBhYmxlIHRvIGFkZCBkYXRhIC8gaXRlbXMgdG8gdGhlIG11bHRpLWlucHV0IGZpZWxkIHVzaW5nIGEgZGlmZmVyZW50IG1vZGVsXG5cdCAqIEBwdWJsaWNcblx0ICovXG5cdEBwcm9wZXJ0eSh7XG5cdFx0dHlwZTogXCJhbnlcIixcblx0XHRpc0JpbmRpbmdJbmZvOiB0cnVlXG5cdH0pXG5cdHB1YmxpYyBpdGVtcz86IFByb3BlcnR5QmluZGluZ0luZm87XG5cblx0LyoqXG5cdCAqIFRoZSBvYmplY3Qgd2l0aCB0aGUgZm9ybWF0dGluZyBvcHRpb25zXG5cdCAqXG5cdCAqL1xuXHRAYWdncmVnYXRpb24oeyB0eXBlOiBcInNhcC5mZS5tYWNyb3MubXVsdGl2YWx1ZWZpZWxkLkZvcm1hdE9wdGlvbnNcIiwgbXVsdGlwbGU6IGZhbHNlLCBkZWZhdWx0Q2xhc3M6IEZvcm1hdE9wdGlvbnMgfSlcblx0Zm9ybWF0T3B0aW9ucz86IEZvcm1hdE9wdGlvbnM7XG5cblx0QHByb3BlcnR5KHsgdHlwZTogXCJib29sZWFuXCIgfSlcblx0X2lzSW5FZGl0TW9kZTogYm9vbGVhbiB8IENvbXBpbGVkQmluZGluZ1Rvb2xraXRFeHByZXNzaW9uID0gZmFsc2U7XG5cblx0QHByb3BlcnR5KHsgdHlwZTogXCJib29sZWFuXCIgfSlcblx0dXNlUGFyZW50QmluZGluZ0NhY2hlID0gZmFsc2U7XG5cblx0Ly8gQ29tcHV0ZWQgcHJvcGVydGllc1xuXG5cdHByaXZhdGUgaXRlbSE6IE11bHRpSW5wdXRTZXR0aW5ncztcblxuXHQvKipcblx0ICogUG9pbnRlZCBhdCBhIGRhdGFGaWVsZC4gVGhpcyBjYW4gYmUgRGF0YUZpZWxkRGVmYXVsdCBmcm9tIGEgcHJvcGVydHkuXG5cdCAqL1xuXHRwcml2YXRlIGNvbnZlcnRlZERhdGFGaWVsZCE6IERhdGFGaWVsZDtcblxuXHQvKipcblx0ICogRGF0YU1vZGVsUGF0aCBmb3IgdGhlIGNvcnJlc3BvbmRpbmcgcHJvcGVydHkgZGlzcGxheWVkLlxuXHQgKi9cblx0cHJpdmF0ZSBkYXRhTW9kZWxQYXRoITogRGF0YU1vZGVsT2JqZWN0UGF0aDxQcm9wZXJ0eT47XG5cblx0LyoqXG5cdCAqIEVkaXQgTW9kZSBvZiB0aGUgZmllbGQuXG5cdCAqIElmIHRoZSBlZGl0TW9kZSBpcyB1bmRlZmluZWQgdGhlbiB3ZSBjb21wdXRlIGl0IGJhc2VkIG9uIHRoZSBtZXRhZGF0YVxuXHQgKiBPdGhlcndpc2Ugd2UgdXNlIHRoZSB2YWx1ZSBwcm92aWRlZCBoZXJlLlxuXHQgKi9cblx0cHJpdmF0ZSBlZGl0TW9kZSE6IEZpZWxkRWRpdE1vZGUgfCBDb21waWxlZEJpbmRpbmdUb29sa2l0RXhwcmVzc2lvbjtcblxuXHQvKipcblx0ICogVGhlIGRpc3BsYXkgbW9kZSBhZGRlZCB0byB0aGUgY29sbGVjdGlvbiBmaWVsZFxuXHQgKi9cblx0cHJpdmF0ZSBkaXNwbGF5TW9kZSE6IERpc3BsYXlNb2RlO1xuXG5cdC8qKlxuXHQgKiBUaGUgQ29tcGlsZWRCaW5kaW5nVG9vbGtpdEV4cHJlc3Npb24gdGhhdCBpcyBjYWxjdWxhdGVkIGludGVybmFsbHlcblx0ICovXG5cdHByaXZhdGUgY29sbGVjdGlvbiE6IFByb3BlcnR5QmluZGluZ0luZm87XG5cblx0cHJpdmF0ZSB2aXNpYmxlOiBDb21waWxlZEJpbmRpbmdUb29sa2l0RXhwcmVzc2lvbjtcblxuXHRwcml2YXRlIGZpZWxkR3JvdXBJZHM/OiBzdHJpbmc7XG5cblx0cHJpdmF0ZSBlbmhhbmNlZE1ldGFQYXRoITogQ29udGV4dDtcblxuXHRwcml2YXRlIGNvbGxhYm9yYXRpb25FeHByZXNzaW9uITogQmluZGluZ1Rvb2xraXRFeHByZXNzaW9uPGJvb2xlYW4+O1xuXG5cdHByaXZhdGUgY29sbGFib3JhdGlvbkVuYWJsZWQhOiBib29sZWFuO1xuXG5cdHByaXZhdGUgZGF0YVNvdXJjZVBhdGghOiBzdHJpbmc7XG5cblx0cHJpdmF0ZSBpbnNlcnRhYmxlQW5kRGVsZXRhYmxlITogQmluZGluZ1Rvb2xraXRFeHByZXNzaW9uPGJvb2xlYW4+O1xuXG5cdGNvbnN0cnVjdG9yKHByb3BzOiBzdHJpbmcgfCAoJENvbnRyb2xTZXR0aW5ncyAmIFByb3BlcnRpZXNPZjxNdWx0aVZhbHVlRmllbGRCbG9jaz4pLCBvdGhlcnM/OiAkQ29udHJvbFNldHRpbmdzKSB7XG5cdFx0aWYgKHR5cGVvZiBwcm9wcyAhPT0gXCJzdHJpbmdcIikge1xuXHRcdFx0Ly8gdHlwZSBvZiBwcm9wcyBjYW4gYmUgYSBzdHJpbmcgaWYgd2UgYXJlIGNsb25pbmcgdGhlIE11bHRpVmFsdWVGaWVsZCBpbnNpZGUgYW4gYWdncmVnYXRpb25cblx0XHRcdC8vIGluIHRoYXQgY2FzZSBfaXNJbkVkaXRNb2RlIGhhcyBhbHJlYWR5IGJlZW4gY29tcHV0ZWQgb24gdGhlIG9uZSB3ZSBjbG9uZVxuXHRcdFx0cHJvcHMuX2lzSW5FZGl0TW9kZSA9IGNvbXBpbGVFeHByZXNzaW9uKFVJLklzRWRpdGFibGUpO1xuXHRcdH1cblx0XHRzdXBlcihwcm9wcywgb3RoZXJzKTtcblx0fVxuXG5cdC8qKlxuXHQgKiBJbiBjYXNlIGFuIGV4dGVybmFsIHZhbHVlIGlzIHNldCAoZS5nLiBmb3IgcHJvdmlkaW5nIGRhdGEgaW4gYSBqc29uIG1vZGVsKSB3ZSBuZWVkIHRvIG92ZXJyaWRlIHRoZSBiaW5kaW5nIHN0cmluZ3MgZm9yIHRoZSBpdGVtLlxuXHQgKiBAcGFyYW0gY29sbGVjdGlvbkJpbmRpbmdcblx0ICogQHBhcmFtIGl0ZW1EYXRhTW9kZWxPYmplY3RQYXRoXG5cdCAqIEBwYXJhbSB0ZXh0RXhwcmVzc2lvblxuXHQgKiBAcGFyYW0ga2V5XG5cdCAqIEByZXR1cm5zIE11bHRpSW5wdXRTZXR0aW5nc1xuXHQgKi9cblx0cHJpdmF0ZSBfb3ZlcnJpZGVWYWx1ZShcblx0XHRjb2xsZWN0aW9uQmluZGluZzogUHJvcGVydHlCaW5kaW5nSW5mbyAmIHsgcGFyYW1ldGVycz86IG9iamVjdCB9LFxuXHRcdGl0ZW1EYXRhTW9kZWxPYmplY3RQYXRoOiBEYXRhTW9kZWxPYmplY3RQYXRoPFByb3BlcnR5UGF0aCB8IFByb3BlcnR5Pixcblx0XHR0ZXh0RXhwcmVzc2lvbjogQ29tcGlsZWRCaW5kaW5nVG9vbGtpdEV4cHJlc3Npb24sXG5cdFx0a2V5OiBDb21waWxlZEJpbmRpbmdUb29sa2l0RXhwcmVzc2lvblxuXHQpOiBNdWx0aUlucHV0U2V0dGluZ3Mge1xuXHRcdGlmICh0aGlzLml0ZW1zKSB7XG5cdFx0XHRjb25zdCBtb2RlbCA9IHRoaXMuaXRlbXMubW9kZWwgPz8gdGhpcy5pdGVtcy5tb2RlbE5hbWU7XG5cdFx0XHRjb2xsZWN0aW9uQmluZGluZyA9IHsgcGF0aDogYCR7bW9kZWx9PiR7dGhpcy5pdGVtcy5wYXRofWAgfTtcblx0XHRcdGNvbnN0IGNvbW1vblRhcmdldE9iamVjdFByb3BlcnR5ID0gaXRlbURhdGFNb2RlbE9iamVjdFBhdGgudGFyZ2V0T2JqZWN0IGFzIFByb3BlcnR5O1xuXHRcdFx0Y29uc3QgY29tbW9uUHJvcGVydHlQYXRoID0gYHske21vZGVsfT4ke2NvbW1vblRhcmdldE9iamVjdFByb3BlcnR5Lm5hbWV9fWA7XG5cblx0XHRcdC8vIFRleHQgYXJyYW5nZW1lbnQgdXNlIGNhc2Vcblx0XHRcdGlmIChpc1BhdGhBbm5vdGF0aW9uRXhwcmVzc2lvbjxzdHJpbmc+KGNvbW1vblRhcmdldE9iamVjdFByb3BlcnR5LmFubm90YXRpb25zLkNvbW1vbj8uVGV4dCkpIHtcblx0XHRcdFx0dGV4dEV4cHJlc3Npb24gPSBgeyR7bW9kZWx9PiR7Y29tbW9uVGFyZ2V0T2JqZWN0UHJvcGVydHkuYW5ub3RhdGlvbnMuQ29tbW9uPy5UZXh0Py5wYXRofX1gO1xuXHRcdFx0XHQvLyBub24gdGV4dCBhcnJhbmdlbWVudCB1c2UgY2FzZVxuXHRcdFx0fSBlbHNlIHtcblx0XHRcdFx0dGV4dEV4cHJlc3Npb24gPSBjb21tb25Qcm9wZXJ0eVBhdGg7XG5cdFx0XHR9XG5cdFx0XHRrZXkgPSBjb21tb25Qcm9wZXJ0eVBhdGg7XG5cdFx0fVxuXHRcdHJldHVybiB7XG5cdFx0XHRkZXNjcmlwdGlvbjogdGV4dEV4cHJlc3Npb24sXG5cdFx0XHRjb2xsZWN0aW9uQmluZGluZyxcblx0XHRcdGtleToga2V5XG5cdFx0fTtcblx0fVxuXG5cdC8qKlxuXHQgKiBGdW5jdGlvbiB0byBnZXQgdGhlIGNvcnJlY3Qgc2V0dGluZ3MgZm9yIHRoZSBtdWx0aSBpbnB1dC5cblx0ICogQHBhcmFtIHByb3BlcnR5RGF0YU1vZGVsT2JqZWN0UGF0aCBUaGUgY29ycmVzcG9uZGluZyBEYXRhTW9kZWxPYmplY3RQYXRoLlxuXHQgKiBAcGFyYW0gZm9ybWF0T3B0aW9ucyBUaGUgZm9ybWF0IG9wdGlvbnMgdG8gY2FsY3VsYXRlIHRoZSByZXN1bHRcblx0ICogQHJldHVybnMgTXVsdGlJbnB1dFNldHRpbmdzXG5cdCAqL1xuXHRwcml2YXRlIF9nZXRNdWx0aUlucHV0U2V0dGluZ3MoXG5cdFx0cHJvcGVydHlEYXRhTW9kZWxPYmplY3RQYXRoOiBEYXRhTW9kZWxPYmplY3RQYXRoPFByb3BlcnR5Pixcblx0XHRmb3JtYXRPcHRpb25zOiBGb3JtYXRPcHRpb25zIHwgdW5kZWZpbmVkXG5cdCk6IE11bHRpSW5wdXRTZXR0aW5ncyB7XG5cdFx0Y29uc3QgcGF0aFN0cnVjdHVyZSA9IE11bHRpVmFsdWVGaWVsZEJsb2NrLl9nZXRQYXRoU3RydWN0dXJlKHByb3BlcnR5RGF0YU1vZGVsT2JqZWN0UGF0aCk7XG5cdFx0bGV0IHsgY29sbGVjdGlvblBhdGggfSA9IHBhdGhTdHJ1Y3R1cmU7XG5cdFx0Y29uc3QgaXRlbURhdGFNb2RlbE9iamVjdFBhdGggPSBwYXRoU3RydWN0dXJlLml0ZW1EYXRhTW9kZWxPYmplY3RQYXRoO1xuXHRcdGlmICh0aGlzLm1ldGFQYXRoLnN0YXJ0c1dpdGgoXCIvXCIpICYmIHRoaXMuaXRlbXMpIHtcblx0XHRcdC8vIHdlIG9ubHkgc3VwcG9ydCBhbiBhYnNvbHV0ZSBtZXRhcGF0aCBpZiB0aGVyZSBpcyBhbiBpdGVtcyBiaW5kaW5nIHByb3ZpZGVkXG5cdFx0XHRjb2xsZWN0aW9uUGF0aCA9IGAvJHtwcm9wZXJ0eURhdGFNb2RlbE9iamVjdFBhdGguY29udGV4dExvY2F0aW9uPy5zdGFydGluZ0VudGl0eVNldC5uYW1lfWA7XG5cdFx0fVxuXHRcdGNvbnN0IGNvbGxlY3Rpb25CaW5kaW5nID0gdGhpcy51c2VQYXJlbnRCaW5kaW5nQ2FjaGVcblx0XHRcdD8geyBwYXRoOiBjb2xsZWN0aW9uUGF0aCwgdGVtcGxhdGVTaGFyZWFibGU6IGZhbHNlIH1cblx0XHRcdDogeyBwYXRoOiBjb2xsZWN0aW9uUGF0aCwgcGFyYW1ldGVyczogeyAkJG93blJlcXVlc3Q6IHRydWUgfSwgdGVtcGxhdGVTaGFyZWFibGU6IGZhbHNlIH07XG5cblx0XHRjb25zdCBwcm9wZXJ0eVBhdGhPclByb3BlcnR5ID0gcHJvcGVydHlEYXRhTW9kZWxPYmplY3RQYXRoLnRhcmdldE9iamVjdCBhcyBQcm9wZXJ0eVBhdGggfCBQcm9wZXJ0eTtcblx0XHRjb25zdCBwcm9wZXJ0eURlZmluaXRpb24gPSBpc1Byb3BlcnR5UGF0aEV4cHJlc3Npb24ocHJvcGVydHlQYXRoT3JQcm9wZXJ0eSlcblx0XHRcdD8gcHJvcGVydHlQYXRoT3JQcm9wZXJ0eS4kdGFyZ2V0XG5cdFx0XHQ6IHByb3BlcnR5UGF0aE9yUHJvcGVydHk7XG5cdFx0Y29uc3QgY29tbW9uVGV4dCA9IHByb3BlcnR5RGVmaW5pdGlvbj8uYW5ub3RhdGlvbnMuQ29tbW9uPy5UZXh0O1xuXHRcdGNvbnN0IHJlbGF0aXZlTG9jYXRpb24gPSBnZXRSZWxhdGl2ZVBhdGhzKHByb3BlcnR5RGF0YU1vZGVsT2JqZWN0UGF0aCk7XG5cblx0XHRjb25zdCB0ZXh0RXhwcmVzc2lvbiA9IGNvbW1vblRleHRcblx0XHRcdD8gY29tcGlsZUV4cHJlc3Npb24oZ2V0RXhwcmVzc2lvbkZyb21Bbm5vdGF0aW9uKGNvbW1vblRleHQsIHJlbGF0aXZlTG9jYXRpb24pKVxuXHRcdFx0OiBnZXRWYWx1ZUJpbmRpbmcoaXRlbURhdGFNb2RlbE9iamVjdFBhdGgsIGZvcm1hdE9wdGlvbnMgPz8ge30sIHRydWUpO1xuXG5cdFx0Y29uc3Qga2V5ID0gZ2V0VmFsdWVCaW5kaW5nKGl0ZW1EYXRhTW9kZWxPYmplY3RQYXRoLCBmb3JtYXRPcHRpb25zID8/IHt9LCB0cnVlKTtcblx0XHRsZXQgZGlzcGxheU9ubHkgPSBmYWxzZTtcblx0XHRpZiAoZ2V0UmVsYXRpdmVQYXRocyhpdGVtRGF0YU1vZGVsT2JqZWN0UGF0aCkubGVuZ3RoID4gMCkge1xuXHRcdFx0Ly8gaWYgdGhlIHJlbGF0aXZlIHBhdGggdG8gdGhlIHZhbHVlIGNvbnRhaW5zIGEgbmF2aWdhdGlvbiwgY3JlYXRlIHdpbGwgbm90IGJlIHBvc3NpYmxlIGluIHRoZSBkZWxlZ2F0ZSwgc28gd2UgZm9yY2UgdGhlIGRpc3BsYXkgTW9kZVxuXHRcdFx0ZGlzcGxheU9ubHkgPSB0cnVlO1xuXHRcdH1cblx0XHRyZXR1cm4ge1xuXHRcdFx0ZGlzcGxheU9ubHksXG5cdFx0XHQuLi50aGlzLl9vdmVycmlkZVZhbHVlKGNvbGxlY3Rpb25CaW5kaW5nLCBpdGVtRGF0YU1vZGVsT2JqZWN0UGF0aCwgdGV4dEV4cHJlc3Npb24sIGtleSlcblx0XHR9O1xuXHR9XG5cblx0Ly8gUHJvY2VzcyB0aGUgZGF0YU1vZGVsUGF0aCB0byBmaW5kIHRoZSBjb2xsZWN0aW9uIGFuZCB0aGUgcmVsYXRpdmUgRGF0YU1vZGVsUGF0aCBmb3IgdGhlIGl0ZW0uXG5cdHByaXZhdGUgc3RhdGljIF9nZXRQYXRoU3RydWN0dXJlKGRhdGFNb2RlbE9iamVjdFBhdGg6IERhdGFNb2RlbE9iamVjdFBhdGg8UHJvcGVydHk+KTogTXVsdGlWYWx1ZUZpZWxkUGF0aFN0cnVjdHVyZSB7XG5cdFx0bGV0IGZpcnN0Q29sbGVjdGlvblBhdGggPSBcIlwiO1xuXHRcdGNvbnN0IGN1cnJlbnRFbnRpdHlTZXQgPSBkYXRhTW9kZWxPYmplY3RQYXRoLmNvbnRleHRMb2NhdGlvbj8udGFyZ2V0RW50aXR5U2V0XG5cdFx0XHQ/IGRhdGFNb2RlbE9iamVjdFBhdGguY29udGV4dExvY2F0aW9uLnRhcmdldEVudGl0eVNldFxuXHRcdFx0OiBkYXRhTW9kZWxPYmplY3RQYXRoLnN0YXJ0aW5nRW50aXR5U2V0O1xuXHRcdGNvbnN0IG5hdmlnYXRlZFBhdGhzOiBzdHJpbmdbXSA9IFtdO1xuXHRcdGNvbnN0IGNvbnRleHROYXZzRm9ySXRlbSA9IGRhdGFNb2RlbE9iamVjdFBhdGguY29udGV4dExvY2F0aW9uPy5uYXZpZ2F0aW9uUHJvcGVydGllcyB8fCBbXTtcblx0XHRmb3IgKGNvbnN0IG5hdlByb3Agb2YgZGF0YU1vZGVsT2JqZWN0UGF0aC5uYXZpZ2F0aW9uUHJvcGVydGllcykge1xuXHRcdFx0aWYgKFxuXHRcdFx0XHRkYXRhTW9kZWxPYmplY3RQYXRoLmNvbnRleHRMb2NhdGlvbiA9PT0gdW5kZWZpbmVkIHx8XG5cdFx0XHRcdCFkYXRhTW9kZWxPYmplY3RQYXRoLmNvbnRleHRMb2NhdGlvbi5uYXZpZ2F0aW9uUHJvcGVydGllcy5zb21lKFxuXHRcdFx0XHRcdChjb250ZXh0TmF2UHJvcCkgPT4gY29udGV4dE5hdlByb3AuZnVsbHlRdWFsaWZpZWROYW1lID09PSBuYXZQcm9wLmZ1bGx5UXVhbGlmaWVkTmFtZVxuXHRcdFx0XHQpXG5cdFx0XHQpIHtcblx0XHRcdFx0Ly8gaW4gY2FzZSBvZiByZWxhdGl2ZSBlbnRpdHlTZXRQYXRoIHdlIGRvbid0IGNvbnNpZGVyIG5hdmlnYXRpb25QYXRoIHRoYXQgYXJlIGFscmVhZHkgaW4gdGhlIGNvbnRleHRcblx0XHRcdFx0bmF2aWdhdGVkUGF0aHMucHVzaChuYXZQcm9wLm5hbWUpO1xuXHRcdFx0XHRjb250ZXh0TmF2c0Zvckl0ZW0ucHVzaChuYXZQcm9wKTtcblx0XHRcdFx0aWYgKGN1cnJlbnRFbnRpdHlTZXQubmF2aWdhdGlvblByb3BlcnR5QmluZGluZy5oYXNPd25Qcm9wZXJ0eShuYXZQcm9wLm5hbWUpKSB7XG5cdFx0XHRcdFx0aWYgKGlzTXVsdGlwbGVOYXZpZ2F0aW9uUHJvcGVydHkobmF2UHJvcCkpIHtcblx0XHRcdFx0XHRcdGJyZWFrO1xuXHRcdFx0XHRcdH1cblx0XHRcdFx0fVxuXHRcdFx0fVxuXHRcdH1cblx0XHRmaXJzdENvbGxlY3Rpb25QYXRoID0gYCR7bmF2aWdhdGVkUGF0aHMuam9pbihcIi9cIil9YDtcblx0XHRjb25zdCBpdGVtRGF0YU1vZGVsT2JqZWN0UGF0aDogRGF0YU1vZGVsT2JqZWN0UGF0aDxQcm9wZXJ0eT4gPSBPYmplY3QuYXNzaWduKHt9LCBkYXRhTW9kZWxPYmplY3RQYXRoKTtcblx0XHRpZiAoaXRlbURhdGFNb2RlbE9iamVjdFBhdGguY29udGV4dExvY2F0aW9uKSB7XG5cdFx0XHRpdGVtRGF0YU1vZGVsT2JqZWN0UGF0aC5jb250ZXh0TG9jYXRpb24ubmF2aWdhdGlvblByb3BlcnRpZXMgPSBjb250ZXh0TmF2c0Zvckl0ZW07IC8vIHRoaXMgY2hhbmdlcyB0aGUgY3JlYXRpb24gb2YgdGhlIHZhbHVlSGVscCBJRCAuLi5cblx0XHR9XG5cblx0XHRyZXR1cm4geyBjb2xsZWN0aW9uUGF0aDogZmlyc3RDb2xsZWN0aW9uUGF0aCwgaXRlbURhdGFNb2RlbE9iamVjdFBhdGg6IGl0ZW1EYXRhTW9kZWxPYmplY3RQYXRoIH07XG5cdH1cblxuXHQvKipcblx0ICogQ2FsY3VsYXRlIHRoZSBmaWVsZEdyb3VwSWRzIGZvciB0aGUgTXVsdGlWYWx1ZUZpZWxkLlxuXHQgKiBAcGFyYW0gYXBwQ29tcG9uZW50XG5cdCAqIEByZXR1cm5zIFRoZSB2YWx1ZSBmb3IgdGhlIGZpZWxkR3JvdXBJZHNcblx0ICovXG5cdHByaXZhdGUgY29tcHV0ZUZpZWxkR3JvdXBJZHMoYXBwQ29tcG9uZW50PzogQXBwQ29tcG9uZW50KTogc3RyaW5nIHwgdW5kZWZpbmVkIHtcblx0XHRpZiAoIWFwcENvbXBvbmVudCkge1xuXHRcdFx0Ly9mb3IgVmFsdWVIZWxwIC8gTWFzcyBlZGl0IFRlbXBsYXRpbmcgdGhlIGFwcENvbXBvbmVudCBpcyBub3QgcGFzc2VkIHRvIHRoZSB0ZW1wbGF0aW5nXG5cdFx0XHRyZXR1cm4gXCJcIjtcblx0XHR9XG5cdFx0Y29uc3Qgc2lkZUVmZmVjdFNlcnZpY2UgPSBhcHBDb21wb25lbnQuZ2V0U2lkZUVmZmVjdHNTZXJ2aWNlKCk7XG5cdFx0Y29uc3QgZmllbGRHcm91cElkcyA9IHNpZGVFZmZlY3RTZXJ2aWNlLmNvbXB1dGVGaWVsZEdyb3VwSWRzKFxuXHRcdFx0dGhpcy5kYXRhTW9kZWxQYXRoLnRhcmdldEVudGl0eVR5cGUuZnVsbHlRdWFsaWZpZWROYW1lLFxuXHRcdFx0KHRoaXMuZGF0YU1vZGVsUGF0aC50YXJnZXRPYmplY3QgYXMgUHJvcGVydHkpLmZ1bGx5UXVhbGlmaWVkTmFtZVxuXHRcdCk7XG5cdFx0aWYgKHRoaXMuY29sbGFib3JhdGlvbkVuYWJsZWQpIHtcblx0XHRcdGNvbnN0IGNvbGxhYm9yYXRpb25GaWVsZEdyb3VwID0gYCR7Q29sbGFib3JhdGlvbkZpZWxkR3JvdXBQcmVmaXh9JHt0aGlzLmRhdGFTb3VyY2VQYXRofWA7XG5cdFx0XHRmaWVsZEdyb3VwSWRzLnB1c2goY29sbGFib3JhdGlvbkZpZWxkR3JvdXApO1xuXHRcdH1cblx0XHR0aGlzLmZpZWxkR3JvdXBJZHMgPSBmaWVsZEdyb3VwSWRzLmxlbmd0aCA/IGZpZWxkR3JvdXBJZHMuam9pbihcIixcIikgOiB1bmRlZmluZWQ7XG5cdFx0Y29uc3QgcmVzdWx0ID0gZmllbGRHcm91cElkcy5qb2luKFwiLFwiKTtcblx0XHRyZXR1cm4gcmVzdWx0ID09PSBcIlwiID8gdW5kZWZpbmVkIDogcmVzdWx0O1xuXHR9XG5cblx0aW5pdGlhbGl6ZShtZXRhQ29udGV4dFBhdGg6IE1ldGFQYXRoPHVua25vd24+KTogdm9pZCB7XG5cdFx0Y29uc3Qgb3duZXIgPSB0aGlzLl9nZXRPd25lcigpO1xuXG5cdFx0dGhpcy5jb250ZXh0UGF0aCA9IHRoaXMuY29udGV4dFBhdGggPz8gb3duZXI/LnByZXByb2Nlc3NvckNvbnRleHQ/LmZ1bGxDb250ZXh0UGF0aDtcblx0XHRjb25zdCBvZGF0YU1ldGFNb2RlbCA9IG93bmVyPy5nZXRNZXRhTW9kZWwoKTtcblxuXHRcdGNvbnN0IG1ldGFDb250ZXh0ID0gb2RhdGFNZXRhTW9kZWw/LmNyZWF0ZUJpbmRpbmdDb250ZXh0KG1ldGFDb250ZXh0UGF0aC5nZXRQYXRoKCkpIGFzIENvbnRleHQgfCB1bmRlZmluZWQ7XG5cblx0XHRjb25zdCBtZXRhUGF0aE9iamVjdCA9IG1ldGFDb250ZXh0UGF0aD8uZ2V0VGFyZ2V0KCk7XG5cblx0XHQvLyBJZiB0aGUgdGFyZ2V0IGlzIGEgcHJvcGVydHkgd2l0aCBhIERhdGFGaWVsZERlZmF1bHQsIHVzZSB0aGlzIGFzIGRhdGEgZmllbGRcblx0XHRpZiAoaXNQcm9wZXJ0eShtZXRhUGF0aE9iamVjdCkgJiYgbWV0YVBhdGhPYmplY3QuYW5ub3RhdGlvbnMuVUk/LkRhdGFGaWVsZERlZmF1bHQgIT09IHVuZGVmaW5lZCkge1xuXHRcdFx0dGhpcy5lbmhhbmNlZE1ldGFQYXRoID0gb2RhdGFNZXRhTW9kZWw/LmNyZWF0ZUJpbmRpbmdDb250ZXh0KGBAJHtVSUFubm90YXRpb25UZXJtcy5EYXRhRmllbGREZWZhdWx0fWAsIG1ldGFDb250ZXh0KSBhcyBDb250ZXh0O1xuXHRcdH0gZWxzZSB7XG5cdFx0XHR0aGlzLmVuaGFuY2VkTWV0YVBhdGggPSBtZXRhQ29udGV4dCBhcyBDb250ZXh0O1xuXHRcdH1cblx0XHRjb25zdCBkYXRhRmllbGREYXRhTW9kZWxQYXRoID0gdGhpcy5nZXREYXRhTW9kZWxPYmplY3RGb3JNZXRhUGF0aCh0aGlzLmVuaGFuY2VkTWV0YVBhdGguZ2V0UGF0aCgpLCB0aGlzLmNvbnRleHRQYXRoKSE7XG5cblx0XHR0aGlzLmNvbnZlcnRlZERhdGFGaWVsZCA9IGRhdGFGaWVsZERhdGFNb2RlbFBhdGgudGFyZ2V0T2JqZWN0IGFzIERhdGFGaWVsZDtcblxuXHRcdHRoaXMuZGF0YU1vZGVsUGF0aCA9IGVuaGFuY2VEYXRhTW9kZWxQYXRoPFByb3BlcnR5Pihcblx0XHRcdGRhdGFGaWVsZERhdGFNb2RlbFBhdGgsXG5cdFx0XHQodGhpcy5jb252ZXJ0ZWREYXRhRmllbGQuVmFsdWUgYXMgUGF0aEFubm90YXRpb25FeHByZXNzaW9uPHN0cmluZz4pLnBhdGhcblx0XHQpO1xuXHRcdHRoaXMuZGF0YVNvdXJjZVBhdGggPSBnZXRUYXJnZXRPYmplY3RQYXRoKHRoaXMuZGF0YU1vZGVsUGF0aCk7XG5cblx0XHRsZXQgaW5zZXJ0YWJsZSA9IGlzUGF0aEluc2VydGFibGUodGhpcy5kYXRhTW9kZWxQYXRoKTtcblx0XHRjb25zdCBkZWxldGVOYXZpZ2F0aW9uUmVzdHJpY3Rpb24gPSBpc1BhdGhEZWxldGFibGUodGhpcy5kYXRhTW9kZWxQYXRoLCB7XG5cdFx0XHRpZ25vcmVUYXJnZXRDb2xsZWN0aW9uOiB0cnVlLFxuXHRcdFx0YXV0aG9yaXplVW5yZXNvbHZhYmxlOiB0cnVlXG5cdFx0fSk7XG5cdFx0Y29uc3QgZGVsZXRlUGF0aCA9IGlzUGF0aERlbGV0YWJsZSh0aGlzLmRhdGFNb2RlbFBhdGgpO1xuXG5cdFx0Ly8gZGVsZXRhYmxlOlxuXHRcdC8vXHRcdGlmIHJlc3RyaWN0aW9ucyBjb21lIGZyb20gTmF2aWdhdGlvbiB3ZSBhcHBseSBpdFxuXHRcdC8vXHRcdG90aGVyd2lzZSB3ZSBhcHBseSByZXN0cmljdGlvbnMgZGVmaW5lZCBvbiB0YXJnZXQgY29sbGVjdGlvbiBvbmx5IGlmIGl0J3MgYSBjb25zdGFudFxuXHRcdC8vICAgICAgb3RoZXJ3aXNlIGl0J3MgdHJ1ZSFcblx0XHRsZXQgZGVsZXRhYmxlID0gaWZFbHNlKFxuXHRcdFx0ZGVsZXRlTmF2aWdhdGlvblJlc3RyaWN0aW9uLl90eXBlID09PSBcIlVucmVzb2x2YWJsZVwiLFxuXHRcdFx0b3Iobm90KGlzQ29uc3RhbnQoZGVsZXRlUGF0aCkpLCBkZWxldGVQYXRoKSxcblx0XHRcdGRlbGV0ZVBhdGhcblx0XHQpO1xuXG5cdFx0aWYgKHRoaXMuaXRlbXMpIHtcblx0XHRcdGluc2VydGFibGUgPSBkZWxldGFibGUgPSBjb25zdGFudCghdGhpcy5yZWFkT25seSk7XG5cdFx0fSBlbHNlIHtcblx0XHRcdHRoaXMudmlzaWJsZSA9IGdldFZpc2libGVFeHByZXNzaW9uKHRoaXMuZGF0YU1vZGVsUGF0aCwgdGhpcy5mb3JtYXRPcHRpb25zKTtcblx0XHR9XG5cblx0XHR0aGlzLmluc2VydGFibGVBbmREZWxldGFibGUgPSBhbmQoaW5zZXJ0YWJsZSwgZGVsZXRhYmxlKTtcblx0XHR0aGlzLmNvbGxhYm9yYXRpb25FeHByZXNzaW9uID0gY29uc3RhbnQoZmFsc2UpO1xuXHRcdHRoaXMuY29tcHV0ZUNvbGxhYm9yYXRpb25Qcm9wZXJ0aWVzKCk7XG5cdFx0Y29uc3QgcmVhZE9ubHkgPSB0aGlzLmlzUHJvcGVydHlJbml0aWFsKFwicmVhZE9ubHlcIikgPyB1bmRlZmluZWQgOiB0aGlzLnJlYWRPbmx5O1xuXHRcdGlmICh0aGlzLmZvcm1hdE9wdGlvbnM/LmRpc3BsYXlPbmx5ID09PSB0cnVlIHx8IHJlYWRPbmx5ID09PSB0cnVlKSB7XG5cdFx0XHR0aGlzLmVkaXRNb2RlID0gXCJEaXNwbGF5XCI7XG5cdFx0fSBlbHNlIGlmICh0aGlzLnJlYWRPbmx5ID09PSBmYWxzZSkge1xuXHRcdFx0dGhpcy5lZGl0TW9kZSA9IGNvbXBpbGVFeHByZXNzaW9uKFxuXHRcdFx0XHRpZkVsc2UoXG5cdFx0XHRcdFx0YW5kKGluc2VydGFibGUsIGRlbGV0YWJsZSksXG5cdFx0XHRcdFx0aWZFbHNlKHRoaXMuY29sbGFib3JhdGlvbkV4cHJlc3Npb24sIGNvbnN0YW50KFwiUmVhZE9ubHlcIiksIGNvbnN0YW50KFwiRWRpdGFibGVcIikpLFxuXHRcdFx0XHRcdGNvbnN0YW50KFwiRGlzcGxheVwiKVxuXHRcdFx0XHQpXG5cdFx0XHQpO1xuXHRcdH0gZWxzZSB7XG5cdFx0XHR0aGlzLmVkaXRNb2RlID0gY29tcGlsZUV4cHJlc3Npb24oXG5cdFx0XHRcdGlmRWxzZShcblx0XHRcdFx0XHRhbmQoaW5zZXJ0YWJsZSwgZGVsZXRhYmxlLCBVSS5Jc0VkaXRhYmxlLCBub3QoZXF1YWwodHJ1ZSwgaXNSZWFkT25seUV4cHJlc3Npb24odGhpcy5jb252ZXJ0ZWREYXRhRmllbGQpKSkpLFxuXHRcdFx0XHRcdGlmRWxzZSh0aGlzLmNvbGxhYm9yYXRpb25FeHByZXNzaW9uLCBjb25zdGFudChcIlJlYWRPbmx5XCIpLCBjb25zdGFudChcIkVkaXRhYmxlXCIpKSxcblx0XHRcdFx0XHRjb25zdGFudChcIkRpc3BsYXlcIilcblx0XHRcdFx0KVxuXHRcdFx0KTtcblx0XHR9XG5cblx0XHR0aGlzLmRpc3BsYXlNb2RlID0gZ2V0RGlzcGxheU1vZGUodGhpcy5kYXRhTW9kZWxQYXRoKTtcblxuXHRcdGNvbnN0IGxvY2FsRGF0YU1vZGVsUGF0aCA9IGVuaGFuY2VEYXRhTW9kZWxQYXRoPFByb3BlcnR5Pihcblx0XHRcdHRoaXMuZ2V0RGF0YU1vZGVsT2JqZWN0Rm9yTWV0YVBhdGgodGhpcy5lbmhhbmNlZE1ldGFQYXRoLmdldFBhdGgoKSwgdGhpcy5jb250ZXh0UGF0aCkhLFxuXHRcdFx0KHRoaXMuY29udmVydGVkRGF0YUZpZWxkLlZhbHVlIGFzIFBhdGhBbm5vdGF0aW9uRXhwcmVzc2lvbjxzdHJpbmc+KS5wYXRoXG5cdFx0KTtcblxuXHRcdHRoaXMuaXRlbSA9IHRoaXMuX2dldE11bHRpSW5wdXRTZXR0aW5ncyhsb2NhbERhdGFNb2RlbFBhdGgsIHRoaXMuZm9ybWF0T3B0aW9ucyk7IC8vIHRoaXMgZnVuY3Rpb24gcmV3cml0ZXMgZGF0YU1vZGVsUGF0aCwgdGhlcmVmb3JlLCBmb3Igbm93IGEgY2xlYW4gb2JqZWN0IGlzIHBhc3NlZFxuXHRcdGlmICh0aGlzLml0ZW0uZGlzcGxheU9ubHkpIHtcblx0XHRcdHRoaXMuZWRpdE1vZGUgPSBcIkRpc3BsYXlcIjtcblx0XHR9XG5cdFx0dGhpcy5jb2xsZWN0aW9uID0gdGhpcy5pdGVtLmNvbGxlY3Rpb25CaW5kaW5nO1xuXG5cdFx0Y29uc3QgYXBwQ29tcG9uZW50ID0gdGhpcy5nZXRBcHBDb21wb25lbnQoKTtcblx0XHR0aGlzLmZpZWxkR3JvdXBJZHMgPSB0aGlzLmNvbXB1dGVGaWVsZEdyb3VwSWRzKGFwcENvbXBvbmVudCk7XG5cdH1cblxuXHQvKipcblx0ICogSGFuZGxlciBmb3IgdGhlIG9uTWV0YWRhdGFBdmFpbGFibGUgZXZlbnQuXG5cdCAqL1xuXHRvbk1ldGFkYXRhQXZhaWxhYmxlKCk6IHZvaWQge1xuXHRcdGlmICghdGhpcy5jb250ZW50KSB7XG5cdFx0XHR0aGlzLmNvbnRlbnQgPSB0aGlzLmNyZWF0ZUNvbnRlbnQoKTtcblx0XHR9XG5cdH1cblxuXHQvKipcblx0ICogVGhlIGZ1bmN0aW9uIGNoZWNrcyBpZiB0aGUgY29sbGFib3JhdGlvbiBkcmFmdCBpcyBzdXBwb3J0ZWQuXG5cdCAqIEByZXR1cm5zIFRydWUgaWYgdGhlIGNvbGxhYm9yYXRpb24gZHJhZnQgaXMgc3VwcG9ydGVkLlxuXHQgKi9cblx0aXNDb2xsYWJvcmF0aW9uRHJhZnRTdXBwb3J0ZWQoKTogYm9vbGVhbiB7XG5cdFx0Y29uc3Qgb3duZXIgPSB0aGlzLl9nZXRPd25lcigpO1xuXHRcdGNvbnN0IG9kYXRhTWV0YU1vZGVsID0gb3duZXI/LmdldE1ldGFNb2RlbCgpO1xuXHRcdHJldHVybiBNb2RlbEhlbHBlci5pc0NvbGxhYm9yYXRpb25EcmFmdFN1cHBvcnRlZChvZGF0YU1ldGFNb2RlbCEpO1xuXHR9XG5cblx0LyoqXG5cdCAqIFRoaXMgaGVscGVyIGNvbXB1dGVzIHRoZSBwcm9wZXJ0aWVzIHRoYXQgYXJlIG5lZWRlZCBmb3IgdGhlIGNvbGxhYm9yYXRpb24gYXZhdGFyLlxuXHQgKi9cblx0Y29tcHV0ZUNvbGxhYm9yYXRpb25Qcm9wZXJ0aWVzKCk6IHZvaWQge1xuXHRcdGlmICh0aGlzLmlzQ29sbGFib3JhdGlvbkRyYWZ0U3VwcG9ydGVkKCkgJiYgdGhpcy5lZGl0TW9kZSAhPT0gXCJEaXNwbGF5XCIpIHtcblx0XHRcdHRoaXMuY29sbGFib3JhdGlvbkVuYWJsZWQgPSB0cnVlO1xuXHRcdFx0dGhpcy5jb2xsYWJvcmF0aW9uRXhwcmVzc2lvbiA9IFVJRm9ybWF0dGVycy5nZXRDb2xsYWJvcmF0aW9uRXhwcmVzc2lvbihcblx0XHRcdFx0dGhpcy5kYXRhTW9kZWxQYXRoLFxuXHRcdFx0XHRDb2xsYWJvcmF0aW9uRm9ybWF0dGVycy5oYXNDb2xsYWJvcmF0aW9uQWN0aXZpdHlcblx0XHRcdCk7XG5cdFx0fVxuXHR9XG5cblx0Z2V0UmVxdWlyZWQoKTogYm9vbGVhbiB8IHVuZGVmaW5lZCB7XG5cdFx0cmV0dXJuIHRoaXMuZ2V0TXVsdGlWYWx1ZUZpZWxkKCkuZ2V0UmVxdWlyZWQoKTtcblx0fVxuXG5cdGdldEl0ZW1zKCk6IE11bHRpVmFsdWVGaWVsZEl0ZW1bXSB8IHVuZGVmaW5lZCB7XG5cdFx0cmV0dXJuIHRoaXMuZ2V0TXVsdGlWYWx1ZUZpZWxkKCkuZ2V0SXRlbXMoKTtcblx0fVxuXG5cdC8qKlxuXHQgKiBDcmVhdGVzIHRoZSBjb250ZW50LlxuXHQgKiBAcmV0dXJucyBUaGUgY29udGVudCBvZiB0aGUgYnVpbGRpbmcgYmxvY2suXG5cdCAqL1xuXHRjcmVhdGVDb250ZW50KCk6IENvbnRyb2wgfCB1bmRlZmluZWQge1xuXHRcdGNvbnN0IG1ldGFDb250ZXh0UGF0aCA9IHRoaXMuZ2V0TWV0YVBhdGhPYmplY3QodGhpcy5tZXRhUGF0aCwgdGhpcy5jb250ZXh0UGF0aCk7XG5cdFx0aWYgKG1ldGFDb250ZXh0UGF0aCkge1xuXHRcdFx0dGhpcy5pbml0aWFsaXplKG1ldGFDb250ZXh0UGF0aCk7XG5cblx0XHRcdC8vIEJ1aWxkaW5nQmxvY2sgd2l0aCBzZXQgSUQgc2NlbmFyaW9cblx0XHRcdGlmICh0aGlzLmlkKSB7XG5cdFx0XHRcdHRoaXMudmhJZFByZWZpeCA9IElELmdlbmVyYXRlKFt0aGlzLmdldElkKCksIHRoaXMudmhJZFByZWZpeCA/PyBcIkZpZWxkVmFsdWVIZWxwXCJdKTsgLy8gVXNlIGdldElkIHRvIHJldHJpZXZlIElELCBub3QgdGhpcy5pZFxuXHRcdFx0fSBlbHNlIGlmICghdGhpcy52aElkUHJlZml4KSB7XG5cdFx0XHRcdC8vIE1heWJlIG5vdCBlbnRlcmVkXG5cdFx0XHRcdHRoaXMudmhJZFByZWZpeCA9IHRoaXMuY3JlYXRlSWQoXCJGaWVsZFZhbHVlSGVscFwiKSE7XG5cdFx0XHR9XG5cdFx0XHRjb25zdCBjb250cm9sbGVyID0gdGhpcy5fZ2V0T3duZXIoKT8uZ2V0Um9vdENvbnRyb2xsZXIoKSBhcyBQYWdlQ29udHJvbGxlcjtcblx0XHRcdGNvbnN0IG9kYXRhTWV0YU1vZGVsID0gdGhpcy5fZ2V0T3duZXIoKT8uZ2V0TWV0YU1vZGVsKCk7XG5cdFx0XHRjb25zdCBtZXRhQ29udGV4dCA9IG9kYXRhTWV0YU1vZGVsPy5jcmVhdGVCaW5kaW5nQ29udGV4dChtZXRhQ29udGV4dFBhdGguZ2V0UGF0aCgpKTtcblx0XHRcdGNvbnN0IGNvbnRleHQgPSBvZGF0YU1ldGFNb2RlbD8uY3JlYXRlQmluZGluZ0NvbnRleHQobWV0YUNvbnRleHRQYXRoLmdldENvbnRleHRQYXRoKCkpO1xuXHRcdFx0aWYgKCFtZXRhQ29udGV4dCB8fCAhY29udGV4dCkge1xuXHRcdFx0XHRyZXR1cm47XG5cdFx0XHR9XG5cblx0XHRcdC8vY3JlYXRlIGEgbmV3IGJpbmRpbmcgY29udGV4dCBmb3IgdGhlIHZhbHVlIGhlbHBcblxuXHRcdFx0Y29uc3QgaXRlbXNBZ2dyZWdhdGlvbiA9IHRoaXMuY29sbGVjdGlvbjtcblx0XHRcdGNvbnN0IGN1c3RvbUFnZ3JlZ2F0aW9uTGVuZ3RoID0gdGhpcy5nZXRBcHBDb21wb25lbnQoKT8uZ2V0TWFuaWZlc3RFbnRyeShcInNhcC5mZVwiKT8ubWFjcm9zPy5tdWx0aVZhbHVlRmllbGQ/Lml0ZW1zU2l6ZUxpbWl0O1xuXHRcdFx0aWYgKGN1c3RvbUFnZ3JlZ2F0aW9uTGVuZ3RoICE9PSB1bmRlZmluZWQpIHtcblx0XHRcdFx0aXRlbXNBZ2dyZWdhdGlvbi5sZW5ndGggPSBjdXN0b21BZ2dyZWdhdGlvbkxlbmd0aDtcblx0XHRcdH1cblxuXHRcdFx0Ly9jb21wdXRlIHRoZSBjb3JyZWN0IGxhYmVsXG5cdFx0XHRjb25zdCBsYWJlbCA9IEZpZWxkSGVscGVyLmNvbXB1dGVMYWJlbFRleHQodGhpcy5jb252ZXJ0ZWREYXRhRmllbGQuVmFsdWUgYXMgTWV0YU1vZGVsVHlwZTxEYXRhRmllbGRUeXBlcz4sIHtcblx0XHRcdFx0Y29udGV4dDogbWV0YUNvbnRleHRcblx0XHRcdH0pIGFzIHN0cmluZztcblxuXHRcdFx0Y29uc3QgdmhDb250cm9sID0gVmFsdWVIZWxwLmdldFZhbHVlSGVscEZvck1ldGFQYXRoKFxuXHRcdFx0XHR0aGlzLmdldFBhZ2VDb250cm9sbGVyKCksXG5cdFx0XHRcdGdldENvbnRleHRSZWxhdGl2ZVRhcmdldE9iamVjdFBhdGgodGhpcy5kYXRhTW9kZWxQYXRoKSEsXG5cdFx0XHRcdHRoaXMuY29udGV4dFBhdGggPz8gdGhpcy5nZXRPd25lckNvbnRleHRQYXRoKCkhLFxuXHRcdFx0XHR0aGlzLl9nZXRPd25lcigpPy5nZXRNZXRhTW9kZWwoKVxuXHRcdFx0KTtcblx0XHRcdGxldCB2YWx1ZUhlbHA6IHN0cmluZyB8IHVuZGVmaW5lZDtcblx0XHRcdGlmICh2aENvbnRyb2wgJiYgdmhDb250cm9sLmdldENvbnRlbnQoKSkge1xuXHRcdFx0XHR2YWx1ZUhlbHAgPSB2aENvbnRyb2wuZ2V0Q29udGVudCgpIS5nZXRJZCgpO1xuXHRcdFx0fVxuXHRcdFx0Y29uc3QgbXVsdGlWYWx1ZUZpZWxkID0gKFxuXHRcdFx0XHQ8TXVsdGlWYWx1ZUZpZWxkXG5cdFx0XHRcdFx0aWQ9e3RoaXMuY3JlYXRlSWQoXCJfbXZmXCIpfVxuXHRcdFx0XHRcdGRlbGVnYXRlPXt7IG5hbWU6IFwic2FwL2ZlL21hY3Jvcy9tdWx0aXZhbHVlZmllbGQvTXVsdGlWYWx1ZUZpZWxkRGVsZWdhdGVcIiB9fVxuXHRcdFx0XHRcdGl0ZW1zPXtpdGVtc0FnZ3JlZ2F0aW9ufVxuXHRcdFx0XHRcdGRpc3BsYXk9e3RoaXMuZGlzcGxheU1vZGV9XG5cdFx0XHRcdFx0d2lkdGg9XCIxMDAlXCJcblx0XHRcdFx0XHRlZGl0TW9kZT17dGhpcy5lZGl0TW9kZX1cblx0XHRcdFx0XHR2YWx1ZUhlbHA9e3ZhbHVlSGVscH1cblx0XHRcdFx0XHRhcmlhTGFiZWxsZWRCeT17dGhpcy5hcmlhTGFiZWxsZWRCeSA/IHRoaXMuYXJpYUxhYmVsbGVkQnkgOiBbXX1cblx0XHRcdFx0XHRzaG93RW1wdHlJbmRpY2F0b3I9e3RoaXMuZm9ybWF0T3B0aW9ucz8uc2hvd0VtcHR5SW5kaWNhdG9yfVxuXHRcdFx0XHRcdGxhYmVsPXtsYWJlbH1cblx0XHRcdFx0XHRyZXF1aXJlZD17Y29tcGlsZUV4cHJlc3Npb24oYW5kKFVJLklzRWRpdGFibGUsIGlzUmVxdWlyZWRFeHByZXNzaW9uKHRoaXMuY29udmVydGVkRGF0YUZpZWxkKSkpfVxuXHRcdFx0XHRcdGNoYW5nZT17KE11bHRpVmFsdWVGaWVsZFJ1bnRpbWUuaGFuZGxlQ2hhbmdlIGFzIHVua25vd24gYXMgRnVuY3Rpb24pLmJpbmQoTXVsdGlWYWx1ZUZpZWxkUnVudGltZSwgY29udHJvbGxlcil9XG5cdFx0XHRcdFx0ZmllbGRHcm91cElkcz17dGhpcy5maWVsZEdyb3VwSWRzfVxuXHRcdFx0XHRcdHZhbGlkYXRlRmllbGRHcm91cD17dGhpcy5vblZhbGlkYXRlRmllbGRHcm91cC5iaW5kKHRoaXMpfVxuXHRcdFx0XHQ+XG5cdFx0XHRcdFx0e3tcblx0XHRcdFx0XHRcdGl0ZW1zOiA8TXVsdGlWYWx1ZUZpZWxkSXRlbSBrZXk9e3RoaXMuaXRlbS5rZXl9IGRlc2NyaXB0aW9uPXt0aGlzLml0ZW0uZGVzY3JpcHRpb259IC8+LFxuXHRcdFx0XHRcdFx0Y3VzdG9tRGF0YTogPEN1c3RvbURhdGEga2V5PVwiaW5zZXJ0YWJsZUFuZERlbGV0YWJsZVwiIHZhbHVlPXt0aGlzLmluc2VydGFibGVBbmREZWxldGFibGV9IC8+XG5cdFx0XHRcdFx0fX1cblx0XHRcdFx0PC9NdWx0aVZhbHVlRmllbGQ+XG5cdFx0XHQpO1xuXG5cdFx0XHRsZXQgZm9ybXdyYXBwZXIgPSBudWxsO1xuXHRcdFx0aWYgKHRoaXMuY29sbGFib3JhdGlvbkVuYWJsZWQpIHtcblx0XHRcdFx0Y29uc3QgcHJvcGVydHlQYXRoID0gZ2V0Q29udGV4dFJlbGF0aXZlVGFyZ2V0T2JqZWN0UGF0aCh0aGlzLmRhdGFNb2RlbFBhdGgpO1xuXHRcdFx0XHRjb25zdCBjb2xsRHJhZnRIYW5kbGVyID0gKFxuXHRcdFx0XHRcdDxDb2xsYWJvcmF0aXZlRHJhZnRIYW5kbGVyIG1ldGFQYXRoPXtwcm9wZXJ0eVBhdGh9IGNvbnRleHRQYXRoPXt0aGlzLmNvbnRleHRQYXRofSBzaG93QXZhdGFyPXt0cnVlfSAvPlxuXHRcdFx0XHQpO1xuXG5cdFx0XHRcdGZvcm13cmFwcGVyID0gKFxuXHRcdFx0XHRcdDxGb3JtRWxlbWVudFdyYXBwZXI+XG5cdFx0XHRcdFx0XHQ8SEJveCB3aWR0aD1cIjEwMCVcIiByZW5kZXJUeXBlPVwiQmFyZVwiIGFsaWduSXRlbXM9XCJFbmRcIj5cblx0XHRcdFx0XHRcdFx0e3tcblx0XHRcdFx0XHRcdFx0XHRpdGVtczogW211bHRpVmFsdWVGaWVsZCwgY29sbERyYWZ0SGFuZGxlcl1cblx0XHRcdFx0XHRcdFx0fX1cblx0XHRcdFx0XHRcdDwvSEJveD5cblx0XHRcdFx0XHQ8L0Zvcm1FbGVtZW50V3JhcHBlcj5cblx0XHRcdFx0KTtcblxuXHRcdFx0XHRtdWx0aVZhbHVlRmllbGQ/LmFkZEV2ZW50RGVsZWdhdGUoXG5cdFx0XHRcdFx0e1xuXHRcdFx0XHRcdFx0b25mb2N1c2luOiAoZXZ0OiBqUXVlcnkuRXZlbnQgJiB7IHNyY0NvbnRyb2w6IENvbnRyb2wgfSkgPT4ge1xuXHRcdFx0XHRcdFx0XHRjb25zdCBjdXJyZW50TXVsdGlWYWx1ZUZpZWxkID0gZXZ0LnNyY0NvbnRyb2wuZ2V0UGFyZW50KCkgYXMgTXVsdGlWYWx1ZUZpZWxkO1xuXHRcdFx0XHRcdFx0XHRjb250cm9sbGVyLmNvbGxhYm9yYXRpdmVEcmFmdD8uaGFuZGxlQ29udGVudEZvY3VzSW4oY3VycmVudE11bHRpVmFsdWVGaWVsZCk7XG5cblx0XHRcdFx0XHRcdFx0aWYgKHZhbHVlSGVscENvbnRyb2w/LmdldERvbVJlZigpKSB7XG5cdFx0XHRcdFx0XHRcdFx0dmFsdWVIZWxwQ29udHJvbC5hdHRhY2hFdmVudE9uY2UoXCJjbG9zZWRcIiwgKCkgPT4ge1xuXHRcdFx0XHRcdFx0XHRcdFx0Y3VycmVudE11bHRpVmFsdWVGaWVsZD8uZm9jdXMoKTtcblx0XHRcdFx0XHRcdFx0XHR9KTtcblx0XHRcdFx0XHRcdFx0fVxuXHRcdFx0XHRcdFx0fVxuXHRcdFx0XHRcdH0sXG5cdFx0XHRcdFx0dGhpc1xuXHRcdFx0XHQpO1xuXG5cdFx0XHRcdGNvbnN0IHZhbHVlSGVscENvbnRyb2wgPSBFbGVtZW50LmdldEVsZW1lbnRCeUlkKG11bHRpVmFsdWVGaWVsZC5nZXRWYWx1ZUhlbHAoKSkgYXMgTWRjVmFsdWVIZWxwO1xuXG5cdFx0XHRcdHZhbHVlSGVscENvbnRyb2w/LmF0dGFjaE9wZW5lZCgoZXZ0OiBWYWx1ZUhlbHAkT3BlbmVkRXZlbnQpID0+IHtcblx0XHRcdFx0XHRjb25zdCBjdXJyZW50TXVsdGlWYWx1ZUZpZWxkID0gZXZ0LmdldFNvdXJjZSgpLmdldENvbnRyb2woKSE7XG5cdFx0XHRcdFx0Y29udHJvbGxlci5jb2xsYWJvcmF0aXZlRHJhZnQuaGFuZGxlQ29udGVudEZvY3VzSW4oY3VycmVudE11bHRpVmFsdWVGaWVsZCBhcyBNdWx0aVZhbHVlRmllbGQpO1xuXHRcdFx0XHR9KTtcblx0XHRcdH1cblx0XHRcdG11bHRpVmFsdWVGaWVsZC5hZGRDdXN0b21EYXRhKG5ldyBDdXN0b21EYXRhKHsga2V5OiBcImZvcndhcmRlZEl0ZW1zQmluZGluZ1wiLCB2YWx1ZTogdGhpcy5pdGVtcyB9KSk7XG5cdFx0XHRyZXR1cm4gdGhpcy5jb2xsYWJvcmF0aW9uRW5hYmxlZCA/IGZvcm13cmFwcGVyIDogbXVsdGlWYWx1ZUZpZWxkO1xuXHRcdH1cblx0fVxuXG5cdC8qKlxuXHQgKiBDYWxsYmFjayB3aGVuIHRoZSB1c2VyIGxlYXZlcyB0aGUgTVZGLlxuXHQgKiBAcGFyYW0gZXZlbnRcblx0ICovXG5cdG9uVmFsaWRhdGVGaWVsZEdyb3VwKGV2ZW50OiBDb250cm9sJFZhbGlkYXRlRmllbGRHcm91cEV2ZW50KTogdm9pZCB7XG5cdFx0Y29uc3QgY29udHJvbGxlciA9IHRoaXMuX2dldE93bmVyKCk/LmdldFJvb3RDb250cm9sbGVyKCkgYXMgUGFnZUNvbnRyb2xsZXI7XG5cdFx0Y29udHJvbGxlci5jb2xsYWJvcmF0aXZlRHJhZnQuaGFuZGxlQ29udGVudEZvY3VzT3V0KGV2ZW50KTtcblx0XHRGaWVsZFJ1bnRpbWUub25WYWxpZGF0ZUZpZWxkR3JvdXAoZXZlbnQpO1xuXHR9XG5cblx0LyoqXG5cdCAqIFNldHRlciBmb3IgdGhlIHJlYWRPbmx5IHByb3BlcnR5LlxuXHQgKiBAcGFyYW0gcmVhZE9ubHlcblx0ICovXG5cdHNldFJlYWRPbmx5KHJlYWRPbmx5OiBib29sZWFuKTogdm9pZCB7XG5cdFx0c3VwZXIuc2V0UHJvcGVydHkoXCJyZWFkT25seVwiLCByZWFkT25seSk7XG5cdFx0dGhpcy51cGRhdGVFZGl0TW9kZSgpO1xuXHR9XG5cblx0LyoqXG5cdCAqIFNldHRlciBmb3IgdGhlIF9pc0luRWRpdE1vZGUgcHJvcGVydHkuXG5cdCAqIEBwYXJhbSBpbkVkaXRNb2RlXG5cdCAqL1xuXHRzZXRfaXNJbkVkaXRNb2RlKGluRWRpdE1vZGU6IGJvb2xlYW4pOiB2b2lkIHtcblx0XHRzdXBlci5zZXRQcm9wZXJ0eShcIl9pc0luRWRpdE1vZGVcIiwgaW5FZGl0TW9kZSk7XG5cdFx0dGhpcy51cGRhdGVFZGl0TW9kZSgpO1xuXHR9XG5cblx0LyoqXG5cdCAqIFRoZSBmdW5jdGlvbiByZXR1cm5zIHRoZSBNdWx0aVZhbHVlRmllbGQuXG5cdCAqIEByZXR1cm5zIFRoZSBNdWx0aVZhbHVlRmllbGQuXG5cdCAqL1xuXHRnZXRNdWx0aVZhbHVlRmllbGQoKTogTXVsdGlWYWx1ZUZpZWxkIHtcblx0XHRpZiAodGhpcy5pc0NvbGxhYm9yYXRpb25EcmFmdFN1cHBvcnRlZCgpKSB7XG5cdFx0XHRyZXR1cm4gKCh0aGlzLmNvbnRlbnQgYXMgRm9ybUVsZW1lbnRXcmFwcGVyKS5jb250ZW50IGFzIEhCb3gpLmdldEl0ZW1zKClbMF0gYXMgTXVsdGlWYWx1ZUZpZWxkO1xuXHRcdH0gZWxzZSB7XG5cdFx0XHRyZXR1cm4gdGhpcy5jb250ZW50IGFzIE11bHRpVmFsdWVGaWVsZDtcblx0XHR9XG5cdH1cblxuXHQvKipcblx0ICogVXBkYXRlIHRoZSBlZGl0IG1vZGUgYmFzZWQgb24gdGhlIHJlYWRPbmx5IGFuZCBfaXNJbkVkaXRNb2RlIHByb3BlcnRpZXMuXG5cdCAqL1xuXHR1cGRhdGVFZGl0TW9kZSgpOiB2b2lkIHtcblx0XHRpZiAoIXRoaXMuY29udGVudCkge1xuXHRcdFx0cmV0dXJuO1xuXHRcdH1cblx0XHRjb25zdCBtdWx0aXZhbHVlRmllbGQgPSB0aGlzLmdldE11bHRpVmFsdWVGaWVsZCgpO1xuXHRcdGNvbnN0IGluc2VydGFibGVBbmREZWxldGFibGUgPSBtdWx0aXZhbHVlRmllbGQuZGF0YShcImluc2VydGFibGVBbmREZWxldGFibGVcIik7XG5cdFx0aWYgKHRoaXMucmVhZE9ubHkgPT09IHRydWUgfHwgIWluc2VydGFibGVBbmREZWxldGFibGUpIHtcblx0XHRcdHRoaXMuZWRpdE1vZGUgPSBcIkRpc3BsYXlcIjtcblx0XHRcdG11bHRpdmFsdWVGaWVsZC5zZXRFZGl0TW9kZShcIkRpc3BsYXlcIik7XG5cdFx0fSBlbHNlIGlmICh0aGlzLnJlYWRPbmx5ID09PSBmYWxzZSAmJiBpbnNlcnRhYmxlQW5kRGVsZXRhYmxlKSB7XG5cdFx0XHQvL3JlYWRPbmx5IGZhbHNlIGNhbiBvbmx5IGhhdmUgaW1wYWN0IGlmIGl0ZW1zIGFyZSBwcm92aWRlZFxuXHRcdFx0aWYgKHRoaXMuX2lzSW5FZGl0TW9kZSkge1xuXHRcdFx0XHR0aGlzLmVkaXRNb2RlID0gXCJFZGl0YWJsZVwiO1xuXHRcdFx0XHRtdWx0aXZhbHVlRmllbGQuc2V0RWRpdE1vZGUoXCJFZGl0YWJsZVwiKTtcblx0XHRcdH0gZWxzZSB7XG5cdFx0XHRcdHRoaXMuZWRpdE1vZGUgPSBcIkRpc3BsYXlcIjtcblx0XHRcdFx0bXVsdGl2YWx1ZUZpZWxkLnNldEVkaXRNb2RlKFwiRGlzcGxheVwiKTtcblx0XHRcdH1cblx0XHR9XG5cdFx0Ly8gaWYgcmVhZE9ubHkgaXMgbm90IGV4cGxpY2l0bHkgc2V0IHdlIGtlZXAgdGVoIHN0YW5kYXJkIGJlaGF2aW9yXG5cdH1cblxuXHQvKipcblx0ICogT24gQmVmb3JlIHJlbmRlcmluZyBmcm93YXJkIHRoZSBhcmlhTGFiZWxsZWRCeSB0byB0aGUgbWRjIE11bHRpVmFsdWVGaWVsZC5cblx0ICovXG5cdG9uQmVmb3JlUmVuZGVyaW5nKCk6IHZvaWQge1xuXHRcdGlmICh0aGlzLmNvbnRlbnQpIHtcblx0XHRcdGNvbnN0IG11bHRpVmFsdWVGaWVsZCA9IHRoaXMuZ2V0TXVsdGlWYWx1ZUZpZWxkKCk7XG5cdFx0XHRjb25zdCBhQXJpYUxhYmVsbGVkQnkgPSAodGhpcyBhcyB1bmtub3duIGFzIEVuaGFuY2VXaXRoVUk1PE11bHRpVmFsdWVGaWVsZEJsb2NrPikuZ2V0QXJpYUxhYmVsbGVkQnkoKTtcblxuXHRcdFx0Zm9yIChjb25zdCBzSWQgb2YgYUFyaWFMYWJlbGxlZEJ5KSB7XG5cdFx0XHRcdGNvbnN0IGFBcmlhTGFiZWxsZWRCeXMgPSBtdWx0aVZhbHVlRmllbGQuZ2V0QXJpYUxhYmVsbGVkQnkoKTtcblx0XHRcdFx0aWYgKCFhQXJpYUxhYmVsbGVkQnlzLmluY2x1ZGVzKHNJZCkpIHtcblx0XHRcdFx0XHRtdWx0aVZhbHVlRmllbGQuYWRkQXJpYUxhYmVsbGVkQnkoc0lkKTtcblx0XHRcdFx0fVxuXHRcdFx0fVxuXHRcdH1cblx0fVxufVxuIl0sIm1hcHBpbmdzIjoiOzs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7RUFzRkE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtFQWhCQSxJQW1CcUJBLG9CQUFvQixJQUFBQyxJQUFBLEdBRHhDQyxjQUFjLENBQUMsK0JBQStCLENBQUMsRUFBQUMsS0FBQSxHQUU5Q0Msa0JBQWtCLENBQUMsMEJBQTBCLENBQUMsRUFBQUMsS0FBQSxHQU05Q0MsUUFBUSxDQUFDO0lBQ1RDLElBQUksRUFBRTtFQUNQLENBQUMsQ0FBQyxFQUFBQyxLQUFBLEdBTURDLFdBQVcsQ0FBQztJQUNaRixJQUFJLEVBQUU7RUFDUCxDQUFDLENBQUMsRUFBQUcsS0FBQSxHQU1ERCxXQUFXLENBQUM7SUFDWkYsSUFBSSxFQUFFO0VBQ1AsQ0FBQyxDQUFDLEVBQUFJLEtBQUEsR0FRREwsUUFBUSxDQUFDO0lBQ1RDLElBQUksRUFBRSxRQUFRO0lBQ2RLLFFBQVEsRUFBRTtFQUNYLENBQUMsQ0FBQyxFQUFBQyxLQUFBLEdB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