@sapui5/sap.fe.core 1.97.0 → 1.98.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 (186) hide show
  1. package/package.json +4 -4
  2. package/src/sap/fe/core/.library +1 -1
  3. package/src/sap/fe/core/AnnotationHelper.js +1 -1
  4. package/src/sap/fe/core/AppComponent.js +4 -2
  5. package/src/sap/fe/core/AppStateHandler.js +2 -2
  6. package/src/sap/fe/core/BaseController.js +1 -1
  7. package/src/sap/fe/core/BusyLocker.js +1 -1
  8. package/src/sap/fe/core/CommonUtils.js +36 -16
  9. package/src/sap/fe/core/ExtensionAPI.js +14 -6
  10. package/src/sap/fe/core/PageController.js +9 -3
  11. package/src/sap/fe/core/RouterProxy.js +27 -11
  12. package/src/sap/fe/core/Synchronization.js +1 -1
  13. package/src/sap/fe/core/TemplateComponent.js +14 -5
  14. package/src/sap/fe/core/TemplateModel.js +1 -1
  15. package/src/sap/fe/core/TransactionHelper.js +125 -40
  16. package/src/sap/fe/core/actions/draft.js +50 -23
  17. package/src/sap/fe/core/actions/messageHandling.js +12 -9
  18. package/src/sap/fe/core/actions/nonDraft.js +1 -1
  19. package/src/sap/fe/core/actions/operations.js +13 -9
  20. package/src/sap/fe/core/actions/sticky.js +1 -1
  21. package/src/sap/fe/core/controllerextensions/ControllerExtensionMetadata.js +1 -1
  22. package/src/sap/fe/core/controllerextensions/EditFlow.js +197 -71
  23. package/src/sap/fe/core/controllerextensions/IntentBasedNavigation.js +1 -1
  24. package/src/sap/fe/core/controllerextensions/InternalEditFlow.js +10 -3
  25. package/src/sap/fe/core/controllerextensions/InternalIntentBasedNavigation.js +20 -18
  26. package/src/sap/fe/core/controllerextensions/InternalRouting.js +40 -9
  27. package/src/sap/fe/core/controllerextensions/KPIManagement.js +114 -25
  28. package/src/sap/fe/core/controllerextensions/KPIManagement.ts +112 -24
  29. package/src/sap/fe/core/controllerextensions/MassEdit.js +79 -0
  30. package/src/sap/fe/core/controllerextensions/MessageHandler.js +6 -2
  31. package/src/sap/fe/core/controllerextensions/PageReady.js +1 -1
  32. package/src/sap/fe/core/controllerextensions/Paginator.js +35 -8
  33. package/src/sap/fe/core/controllerextensions/Placeholder.js +6 -3
  34. package/src/sap/fe/core/controllerextensions/Routing.js +17 -2
  35. package/src/sap/fe/core/controllerextensions/RoutingListener.js +1 -1
  36. package/src/sap/fe/core/controllerextensions/Share.js +20 -7
  37. package/src/sap/fe/core/controllerextensions/SideEffects.js +7 -7
  38. package/src/sap/fe/core/controllerextensions/SideEffects.ts +6 -5
  39. package/src/sap/fe/core/controllerextensions/ViewState.js +1 -1
  40. package/src/sap/fe/core/controls/ActionParameterDialog.fragment.xml +2 -1
  41. package/src/sap/fe/core/controls/CommandExecution.js +1 -1
  42. package/src/sap/fe/core/controls/ConditionalWrapper.js +1 -1
  43. package/src/sap/fe/core/controls/CustomQuickViewPage.js +1 -1
  44. package/src/sap/fe/core/controls/DataLossOrDraftDiscard/DataLossOrDraftDiscardHandler.js +7 -4
  45. package/src/sap/fe/core/controls/FieldWrapper.js +10 -4
  46. package/src/sap/fe/core/controls/FilterBar.js +1 -1
  47. package/src/sap/fe/core/controls/FormElementWrapper.js +1 -6
  48. package/src/sap/fe/core/controls/MultiValueParameterDelegate.js +1 -1
  49. package/src/sap/fe/core/controls/NonComputedVisibleKeyFieldsDialog.fragment.xml +1 -1
  50. package/src/sap/fe/core/controls/filterbar/FilterContainer.js +1 -1
  51. package/src/sap/fe/core/controls/filterbar/VisualFilter.js +1 -1
  52. package/src/sap/fe/core/controls/filterbar/VisualFilterContainer.js +1 -1
  53. package/src/sap/fe/core/controls/filterbar/utils/VisualFilterUtils.js +1 -1
  54. package/src/sap/fe/core/controls/massEdit/MassEditDialog.fragment.xml +106 -0
  55. package/src/sap/fe/core/controls/massEdit/MassEditHandlers.js +78 -0
  56. package/src/sap/fe/core/converters/ConverterContext.js +13 -1
  57. package/src/sap/fe/core/converters/ConverterContext.ts +10 -0
  58. package/src/sap/fe/core/converters/ManifestSettings.js +1 -1
  59. package/src/sap/fe/core/converters/ManifestSettings.ts +3 -0
  60. package/src/sap/fe/core/converters/ManifestWrapper.js +18 -7
  61. package/src/sap/fe/core/converters/ManifestWrapper.ts +15 -6
  62. package/src/sap/fe/core/converters/MetaModelConverter.js +62 -4
  63. package/src/sap/fe/core/converters/MetaModelConverter.ts +60 -4
  64. package/src/sap/fe/core/converters/annotations/DataField.js +3 -3
  65. package/src/sap/fe/core/converters/annotations/DataField.ts +1 -1
  66. package/src/sap/fe/core/converters/common/AnnotationConverter.js +18 -10
  67. package/src/sap/fe/core/converters/controls/Common/Action.js +10 -1
  68. package/src/sap/fe/core/converters/controls/Common/Action.ts +6 -0
  69. package/src/sap/fe/core/converters/controls/Common/Form.js +17 -9
  70. package/src/sap/fe/core/converters/controls/Common/Form.ts +9 -3
  71. package/src/sap/fe/core/converters/controls/Common/KPI.js +69 -4
  72. package/src/sap/fe/core/converters/controls/Common/KPI.ts +72 -0
  73. package/src/sap/fe/core/converters/controls/Common/Table.js +172 -284
  74. package/src/sap/fe/core/converters/controls/Common/Table.ts +228 -348
  75. package/src/sap/fe/core/converters/controls/Common/table/StandardActions.js +468 -0
  76. package/src/sap/fe/core/converters/controls/Common/table/StandardActions.ts +609 -0
  77. package/src/sap/fe/core/converters/controls/ListReport/FilterBar.js +30 -13
  78. package/src/sap/fe/core/converters/controls/ListReport/FilterBar.ts +31 -12
  79. package/src/sap/fe/core/converters/controls/ListReport/VisualFilters.js +2 -2
  80. package/src/sap/fe/core/converters/controls/ListReport/VisualFilters.ts +1 -1
  81. package/src/sap/fe/core/converters/controls/ObjectPage/SubSection.js +14 -6
  82. package/src/sap/fe/core/converters/controls/ObjectPage/SubSection.ts +26 -5
  83. package/src/sap/fe/core/converters/helpers/Aggregation.js +8 -1
  84. package/src/sap/fe/core/converters/helpers/Aggregation.ts +9 -1
  85. package/src/sap/fe/core/converters/helpers/IssueManager.js +4 -1
  86. package/src/sap/fe/core/converters/helpers/IssueManager.ts +3 -0
  87. package/src/sap/fe/core/designtime/AppComponent.designtime.js +9 -1
  88. package/src/sap/fe/core/formatters/ValueFormatter.js +30 -5
  89. package/src/sap/fe/core/formatters/ValueFormatter.ts +25 -3
  90. package/src/sap/fe/core/fpm/Component.js +1 -1
  91. package/src/sap/fe/core/helpers/AppStartupHelper.js +359 -0
  92. package/src/sap/fe/core/helpers/AppStartupHelper.ts +388 -0
  93. package/src/sap/fe/core/helpers/BindingExpression.js +199 -111
  94. package/src/sap/fe/core/helpers/BindingExpression.ts +193 -102
  95. package/src/sap/fe/core/helpers/DynamicAnnotationPathHelper.js +1 -1
  96. package/src/sap/fe/core/helpers/EditState.js +1 -1
  97. package/src/sap/fe/core/helpers/ExcelFormatHelper.js +1 -1
  98. package/src/sap/fe/core/helpers/FPMHelper.js +1 -1
  99. package/src/sap/fe/core/helpers/KeepAliveHelper.js +2 -2
  100. package/src/sap/fe/core/helpers/KeepAliveHelper.ts +1 -1
  101. package/src/sap/fe/core/helpers/MassEditHelper.js +678 -0
  102. package/src/sap/fe/core/helpers/ModelHelper.js +1 -1
  103. package/src/sap/fe/core/helpers/PasteHelper.js +1 -1
  104. package/src/sap/fe/core/helpers/SemanticDateOperators.js +1 -1
  105. package/src/sap/fe/core/helpers/SemanticKeyHelper.js +1 -1
  106. package/src/sap/fe/core/helpers/StableIdHelper.js +1 -1
  107. package/src/sap/fe/core/library.js +28 -2
  108. package/src/sap/fe/core/library.support.js +10 -4
  109. package/src/sap/fe/core/manifestMerger/ChangePageConfiguration.js +62 -0
  110. package/src/sap/fe/core/manifestMerger/ChangePageConfiguration.ts +66 -0
  111. package/src/sap/fe/core/messagebundle.properties +40 -5
  112. package/src/sap/fe/core/messagebundle_ar.properties +24 -2
  113. package/src/sap/fe/core/messagebundle_bg.properties +24 -2
  114. package/src/sap/fe/core/messagebundle_ca.properties +24 -2
  115. package/src/sap/fe/core/messagebundle_cs.properties +25 -3
  116. package/src/sap/fe/core/messagebundle_cy.properties +24 -2
  117. package/src/sap/fe/core/messagebundle_da.properties +24 -2
  118. package/src/sap/fe/core/messagebundle_de.properties +24 -2
  119. package/src/sap/fe/core/messagebundle_el.properties +24 -2
  120. package/src/sap/fe/core/messagebundle_en.properties +23 -1
  121. package/src/sap/fe/core/messagebundle_en_GB.properties +23 -1
  122. package/src/sap/fe/core/messagebundle_en_US_sappsd.properties +27 -1
  123. package/src/sap/fe/core/messagebundle_en_US_saprigi.properties +24 -2
  124. package/src/sap/fe/core/messagebundle_en_US_saptrc.properties +24 -2
  125. package/src/sap/fe/core/messagebundle_es.properties +24 -2
  126. package/src/sap/fe/core/messagebundle_es_MX.properties +24 -2
  127. package/src/sap/fe/core/messagebundle_et.properties +24 -2
  128. package/src/sap/fe/core/messagebundle_fi.properties +25 -3
  129. package/src/sap/fe/core/messagebundle_fr.properties +25 -3
  130. package/src/sap/fe/core/messagebundle_fr_CA.properties +24 -2
  131. package/src/sap/fe/core/messagebundle_hi.properties +24 -2
  132. package/src/sap/fe/core/messagebundle_hr.properties +24 -2
  133. package/src/sap/fe/core/messagebundle_hu.properties +25 -3
  134. package/src/sap/fe/core/messagebundle_id.properties +26 -4
  135. package/src/sap/fe/core/messagebundle_it.properties +24 -2
  136. package/src/sap/fe/core/messagebundle_iw.properties +24 -2
  137. package/src/sap/fe/core/messagebundle_ja.properties +24 -2
  138. package/src/sap/fe/core/messagebundle_kk.properties +24 -2
  139. package/src/sap/fe/core/messagebundle_ko.properties +24 -2
  140. package/src/sap/fe/core/messagebundle_lt.properties +24 -2
  141. package/src/sap/fe/core/messagebundle_lv.properties +24 -2
  142. package/src/sap/fe/core/messagebundle_ms.properties +24 -2
  143. package/src/sap/fe/core/messagebundle_nl.properties +24 -2
  144. package/src/sap/fe/core/messagebundle_no.properties +24 -2
  145. package/src/sap/fe/core/messagebundle_pl.properties +24 -2
  146. package/src/sap/fe/core/messagebundle_pt.properties +25 -3
  147. package/src/sap/fe/core/messagebundle_pt_PT.properties +24 -2
  148. package/src/sap/fe/core/messagebundle_ro.properties +24 -2
  149. package/src/sap/fe/core/messagebundle_ru.properties +24 -2
  150. package/src/sap/fe/core/messagebundle_sh.properties +24 -2
  151. package/src/sap/fe/core/messagebundle_sk.properties +24 -2
  152. package/src/sap/fe/core/messagebundle_sl.properties +24 -2
  153. package/src/sap/fe/core/messagebundle_sv.properties +25 -3
  154. package/src/sap/fe/core/messagebundle_th.properties +24 -2
  155. package/src/sap/fe/core/messagebundle_tr.properties +24 -2
  156. package/src/sap/fe/core/messagebundle_uk.properties +24 -2
  157. package/src/sap/fe/core/messagebundle_vi.properties +24 -2
  158. package/src/sap/fe/core/messagebundle_zh_CN.properties +24 -2
  159. package/src/sap/fe/core/messagebundle_zh_TW.properties +24 -2
  160. package/src/sap/fe/core/services/AsyncComponentServiceFactory.js +1 -1
  161. package/src/sap/fe/core/services/CacheHandlerServiceFactory.js +1 -1
  162. package/src/sap/fe/core/services/EnvironmentServiceFactory.js +4 -3
  163. package/src/sap/fe/core/services/EnvironmentServiceFactory.ts +3 -0
  164. package/src/sap/fe/core/services/NavigationServiceFactory.js +1 -1
  165. package/src/sap/fe/core/services/ResourceModelServiceFactory.js +1 -1
  166. package/src/sap/fe/core/services/RoutingServiceFactory.js +94 -347
  167. package/src/sap/fe/core/services/ShellServicesFactory.js +31 -2
  168. package/src/sap/fe/core/services/ShellServicesFactory.ts +30 -1
  169. package/src/sap/fe/core/services/SideEffectsServiceFactory.js +8 -5
  170. package/src/sap/fe/core/services/SideEffectsServiceFactory.ts +11 -6
  171. package/src/sap/fe/core/services/TemplatedViewServiceFactory.js +13 -4
  172. package/src/sap/fe/core/services/view/TemplatingErrorPage.controller.js +1 -1
  173. package/src/sap/fe/core/support/InvalidAnnotationColumnKey.support.js +38 -0
  174. package/src/sap/fe/core/support/InvalidAnnotationColumnKey.support.ts +18 -0
  175. package/src/sap/fe/core/templating/DataModelPathHelper.js +10 -48
  176. package/src/sap/fe/core/templating/DataModelPathHelper.ts +14 -46
  177. package/src/sap/fe/core/templating/DisplayModeFormatter.js +114 -0
  178. package/src/sap/fe/core/templating/DisplayModeFormatter.ts +86 -0
  179. package/src/sap/fe/core/templating/FilterHelper.js +10 -7
  180. package/src/sap/fe/core/templating/FilterHelper.ts +8 -6
  181. package/src/sap/fe/core/templating/PropertyHelper.js +2 -2
  182. package/src/sap/fe/core/templating/PropertyHelper.ts +1 -1
  183. package/src/sap/fe/core/templating/UIFormatters.js +15 -110
  184. package/src/sap/fe/core/templating/UIFormatters.ts +6 -73
  185. package/src/sap/fe/core/controls/filterbar.d.js +0 -8
  186. package/src/sap/fe/core/controls/filterbar.d.ts +0 -0
@@ -2,40 +2,47 @@
2
2
  * SAP UI development toolkit for HTML5 (SAPUI5)
3
3
  * (c) Copyright 2009-2021 SAP SE. All rights reserved
4
4
  */
5
- sap.ui.define(["../../ManifestSettings", "../../helpers/ID", "sap/fe/core/converters/controls/Common/Action", "sap/fe/core/converters/helpers/ConfigurableObject", "sap/fe/core/converters/annotations/DataField", "sap/fe/core/helpers/BindingExpression", "sap/fe/core/converters/helpers/BindingHelper", "sap/fe/core/converters/helpers/Key", "sap/fe/core/formatters/TableFormatter", "sap/fe/core/formatters/TableFormatterTypes", "sap/fe/core/templating/DataModelPathHelper", "sap/fe/core/helpers/StableIdHelper", "sap/fe/core/converters/helpers/IssueManager", "sap/fe/core/templating/PropertyHelper", "../../helpers/Aggregation", "sap/fe/core/templating/UIFormatters", "./Criticality", "sap/fe/core/templating/EntitySetHelper"], function (ManifestSettings, ID, Action, ConfigurableObject, DataField, BindingExpression, BindingHelper, Key, tableFormatters, TableFormatterTypes, DataModelPathHelper, StableIdHelper, IssueManager, PropertyHelper, Aggregation, UIFormatters, Criticality, EntitySetHelper) {
5
+ sap.ui.define(["../../ManifestSettings", "../../helpers/ID", "sap/fe/core/converters/controls/Common/Action", "sap/fe/core/converters/helpers/ConfigurableObject", "sap/fe/core/converters/annotations/DataField", "sap/fe/core/helpers/BindingExpression", "sap/fe/core/converters/helpers/BindingHelper", "sap/fe/core/converters/helpers/Key", "sap/fe/core/formatters/TableFormatter", "sap/fe/core/formatters/TableFormatterTypes", "sap/fe/core/templating/DataModelPathHelper", "sap/fe/core/helpers/StableIdHelper", "sap/fe/core/converters/helpers/IssueManager", "sap/fe/core/templating/PropertyHelper", "../../helpers/Aggregation", "sap/fe/core/templating/DisplayModeFormatter", "./Criticality", "sap/fe/core/templating/EntitySetHelper", "./table/StandardActions"], function (ManifestSettings, ID, Action, ConfigurableObject, DataField, BindingExpression, BindingHelper, Key, tableFormatters, TableFormatterTypes, DataModelPathHelper, StableIdHelper, IssueManager, PropertyHelper, Aggregation, DisplayModeFormatter, Criticality, EntitySetHelper, StandardActions) {
6
6
  "use strict";
7
7
 
8
8
  var _exports = {};
9
+ var getInsertUpdateActionsTemplating = StandardActions.getInsertUpdateActionsTemplating;
10
+ var isDraftOrStickySupported = StandardActions.isDraftOrStickySupported;
11
+ var getStandardActionMassEdit = StandardActions.getStandardActionMassEdit;
12
+ var getStandardActionPaste = StandardActions.getStandardActionPaste;
13
+ var getStandardActionDelete = StandardActions.getStandardActionDelete;
14
+ var getStandardActionCreate = StandardActions.getStandardActionCreate;
15
+ var getDeleteVisibility = StandardActions.getDeleteVisibility;
16
+ var isExternalCreateConfigured = StandardActions.isExternalCreateConfigured;
17
+ var generateStandardActionsContext = StandardActions.generateStandardActionsContext;
9
18
  var getNonSortablePropertiesRestrictions = EntitySetHelper.getNonSortablePropertiesRestrictions;
10
19
  var getMessageTypeFromCriticalityType = Criticality.getMessageTypeFromCriticalityType;
11
- var getTypeConfig = UIFormatters.getTypeConfig;
12
- var getDisplayMode = UIFormatters.getDisplayMode;
20
+ var getDisplayMode = DisplayModeFormatter.getDisplayMode;
21
+ var EDM_TYPE_MAPPING = DisplayModeFormatter.EDM_TYPE_MAPPING;
13
22
  var AggregationHelper = Aggregation.AggregationHelper;
14
23
  var getTargetValueOnDataPoint = PropertyHelper.getTargetValueOnDataPoint;
15
24
  var isPathExpression = PropertyHelper.isPathExpression;
16
25
  var getAssociatedCurrencyProperty = PropertyHelper.getAssociatedCurrencyProperty;
17
26
  var getAssociatedUnitProperty = PropertyHelper.getAssociatedUnitProperty;
18
27
  var isProperty = PropertyHelper.isProperty;
28
+ var IssueCategoryType = IssueManager.IssueCategoryType;
19
29
  var IssueType = IssueManager.IssueType;
20
30
  var IssueSeverity = IssueManager.IssueSeverity;
21
31
  var IssueCategory = IssueManager.IssueCategory;
22
32
  var replaceSpecialChars = StableIdHelper.replaceSpecialChars;
23
33
  var isPathUpdatable = DataModelPathHelper.isPathUpdatable;
24
- var isPathInsertable = DataModelPathHelper.isPathInsertable;
25
34
  var isPathSearchable = DataModelPathHelper.isPathSearchable;
26
35
  var isPathDeletable = DataModelPathHelper.isPathDeletable;
27
36
  var getTargetObjectPath = DataModelPathHelper.getTargetObjectPath;
28
37
  var MessageType = TableFormatterTypes.MessageType;
29
38
  var KeyHelper = Key.KeyHelper;
30
39
  var UI = BindingHelper.UI;
31
- var singletonPathVisitor = BindingHelper.singletonPathVisitor;
32
40
  var bindingContextPathVisitor = BindingHelper.bindingContextPathVisitor;
33
41
  var Draft = BindingHelper.Draft;
34
42
  var resolveBindingString = BindingExpression.resolveBindingString;
35
43
  var or = BindingExpression.or;
36
44
  var not = BindingExpression.not;
37
45
  var isConstant = BindingExpression.isConstant;
38
- var isBinding = BindingExpression.isBinding;
39
46
  var ifElse = BindingExpression.ifElse;
40
47
  var formatResult = BindingExpression.formatResult;
41
48
  var equal = BindingExpression.equal;
@@ -246,7 +253,10 @@ sap.ui.define(["../../ManifestSettings", "../../helpers/ID", "sap/fe/core/conver
246
253
 
247
254
  if (aggregatesDefinitions) {
248
255
  tableVisualization.enableAnalytics = true;
249
- tableVisualization.aggregates = aggregatesDefinitions; // Add group and sort conditions from the presentation variant
256
+ tableVisualization.aggregates = aggregatesDefinitions;
257
+ var aggregationHelper = new AggregationHelper(entityType, converterContext);
258
+ var allowedTransformations = aggregationHelper.getAllowedTransformations();
259
+ tableVisualization.enableAnalyticsSearch = allowedTransformations ? allowedTransformations.indexOf("search") >= 0 : true; // Add group and sort conditions from the presentation variant
250
260
 
251
261
  tableVisualization.annotation.groupConditions = getGroupConditions(presentationVariantAnnotation, tableVisualization.columns);
252
262
  tableVisualization.annotation.aggregateConditions = getAggregateConditions(presentationVariantAnnotation, tableVisualization.columns);
@@ -808,7 +818,7 @@ sap.ui.define(["../../ManifestSettings", "../../helpers/ID", "sap/fe/core/conver
808
818
 
809
819
  var navigation = (navigationSettings === null || navigationSettings === void 0 ? void 0 : navigationSettings.create) || (navigationSettings === null || navigationSettings === void 0 ? void 0 : navigationSettings.detail); // cross-app
810
820
 
811
- if (navigation !== null && navigation !== void 0 && navigation.outbound && navigation.outboundDetail && navigationSettings !== null && navigationSettings !== void 0 && navigationSettings.create) {
821
+ if (isExternalCreateConfigured(navigationSettings) && navigation) {
812
822
  return {
813
823
  mode: "External",
814
824
  outbound: navigation.outbound,
@@ -1009,7 +1019,7 @@ sap.ui.define(["../../ManifestSettings", "../../helpers/ID", "sap/fe/core/conver
1009
1019
  trueValue: property.type === "Edm.Boolean" ? "Yes" : undefined,
1010
1020
  falseValue: property.type === "Edm.Boolean" ? "No" : undefined
1011
1021
  };
1012
- return {
1022
+ var oColumn = {
1013
1023
  key: key,
1014
1024
  isGroupable: !isDataPointFakeProperty && !isHidden ? aggregationHelper.isPropertyGroupable(property) : false,
1015
1025
  type: ColumnType.Annotation,
@@ -1032,6 +1042,14 @@ sap.ui.define(["../../ManifestSettings", "../../helpers/ID", "sap/fe/core/conver
1032
1042
  widthCalculation: null
1033
1043
  } : undefined
1034
1044
  };
1045
+
1046
+ var sTooltip = _getTooltip(property);
1047
+
1048
+ if (sTooltip) {
1049
+ oColumn.tooltip = sTooltip;
1050
+ }
1051
+
1052
+ return oColumn;
1035
1053
  };
1036
1054
  /**
1037
1055
  * Returns Boolean true for valid columns, false for invalid columns.
@@ -1193,6 +1211,29 @@ sap.ui.define(["../../ManifestSettings", "../../helpers/ID", "sap/fe/core/conver
1193
1211
  return compileBinding(annotationExpression((_property$Label4 = property.Label) === null || _property$Label4 === void 0 ? void 0 : _property$Label4.valueOf()));
1194
1212
  }
1195
1213
  };
1214
+
1215
+ var _getTooltip = function (source) {
1216
+ if (!source) {
1217
+ return undefined;
1218
+ }
1219
+
1220
+ if (isProperty(source)) {
1221
+ var _source$annotations$C;
1222
+
1223
+ return (_source$annotations$C = source.annotations.Common) !== null && _source$annotations$C !== void 0 && _source$annotations$C.QuickInfo ? compileBinding(annotationExpression(source.annotations.Common.QuickInfo.valueOf())) : undefined;
1224
+ } else if (isDataFieldTypes(source)) {
1225
+ var _source$Value, _source$Value$$target, _source$Value$$target2, _source$Value$$target3;
1226
+
1227
+ return (_source$Value = source.Value) !== null && _source$Value !== void 0 && (_source$Value$$target = _source$Value.$target) !== null && _source$Value$$target !== void 0 && (_source$Value$$target2 = _source$Value$$target.annotations) !== null && _source$Value$$target2 !== void 0 && (_source$Value$$target3 = _source$Value$$target2.Common) !== null && _source$Value$$target3 !== void 0 && _source$Value$$target3.QuickInfo ? compileBinding(annotationExpression(source.Value.$target.annotations.Common.QuickInfo.valueOf())) : undefined;
1228
+ } else if (source.$Type === "com.sap.vocabularies.UI.v1.DataFieldForAnnotation") {
1229
+ var _source$Target, _datapointTarget$Valu, _datapointTarget$Valu2, _datapointTarget$Valu3, _datapointTarget$Valu4;
1230
+
1231
+ var datapointTarget = (_source$Target = source.Target) === null || _source$Target === void 0 ? void 0 : _source$Target.$target;
1232
+ return datapointTarget !== null && datapointTarget !== void 0 && (_datapointTarget$Valu = datapointTarget.Value) !== null && _datapointTarget$Valu !== void 0 && (_datapointTarget$Valu2 = _datapointTarget$Valu.$target) !== null && _datapointTarget$Valu2 !== void 0 && (_datapointTarget$Valu3 = _datapointTarget$Valu2.annotations) !== null && _datapointTarget$Valu3 !== void 0 && (_datapointTarget$Valu4 = _datapointTarget$Valu3.Common) !== null && _datapointTarget$Valu4 !== void 0 && _datapointTarget$Valu4.QuickInfo ? compileBinding(annotationExpression(datapointTarget.Value.$target.annotations.Common.QuickInfo.valueOf())) : undefined;
1233
+ } else {
1234
+ return undefined;
1235
+ }
1236
+ };
1196
1237
  /**
1197
1238
  * Creates a PropertyInfo for each identified property consumed by a LineItem.
1198
1239
  *
@@ -1457,9 +1498,8 @@ sap.ui.define(["../../ManifestSettings", "../../helpers/ID", "sap/fe/core/conver
1457
1498
  var semanticKeys = converterContext.getAnnotationsByTerm("Common", "com.sap.vocabularies.Common.v1.SemanticKey", [converterContext.getEntityType()])[0];
1458
1499
 
1459
1500
  if (lineItemAnnotation) {
1460
- // Get columns from the LineItem Annotation
1461
1501
  lineItemAnnotation.forEach(function (lineItem) {
1462
- var _lineItem$Value, _lineItem$Value$$targ, _Target2, _Target2$$target, _lineItem$Target, _lineItem$Target$$tar, _lineItem$annotations, _lineItem$annotations2, _lineItem$annotations3;
1502
+ var _lineItem$Value, _lineItem$Value$$targ, _lineItem$Target, _lineItem$Target$$tar, _FE, _lineItem$annotations, _lineItem$annotations2, _lineItem$annotations3;
1463
1503
 
1464
1504
  if (!_isValidColumn(lineItem)) {
1465
1505
  return;
@@ -1483,7 +1523,7 @@ sap.ui.define(["../../ManifestSettings", "../../helpers/ID", "sap/fe/core/conver
1483
1523
  var name = _getAnnotationColumnName(lineItem);
1484
1524
 
1485
1525
  var isFieldGroupColumn = groupPath.indexOf("@com.sap.vocabularies.UI.v1.FieldGroup") > -1;
1486
- var showDataFieldsLabel = isFieldGroupColumn && (lineItem === null || lineItem === void 0 ? void 0 : (_Target2 = lineItem.Target) === null || _Target2 === void 0 ? void 0 : (_Target2$$target = _Target2.$target) === null || _Target2$$target === void 0 ? void 0 : _Target2$$target.Data.length) > 1 ? _getShowDataFieldsLabel(name, visualizationPath, converterContext) : false;
1526
+ var showDataFieldsLabel = isFieldGroupColumn ? _getShowDataFieldsLabel(name, visualizationPath, converterContext) : false;
1487
1527
  var dataType = getDataFieldDataType(lineItem);
1488
1528
  var sDateInputFormat = dataType === "Edm.Date" ? "YYYY-MM-DD" : undefined;
1489
1529
 
@@ -1522,9 +1562,15 @@ sap.ui.define(["../../ManifestSettings", "../../helpers/ID", "sap/fe/core/conver
1522
1562
  } else if (!dataType || !oTypeConfig) {
1523
1563
  // for charts
1524
1564
  visualSettings.widthCalculation = null;
1525
- }
1565
+ } // TODO: For situation POC - increase width of the column with the situations indicator - works for the situations demo app only!
1566
+ // Might be a good idea to move the complete column width determination to the converter, that would allow us to widen the columns as needed. This workaround only deals with Date columns.
1526
1567
 
1527
- annotationColumns.push({
1568
+
1569
+ var _getDefaultDraftIndic = getDefaultDraftIndicatorForColumn(name, semanticKeys),
1570
+ hasDraftIndicator = _getDefaultDraftIndic.hasDraftIndicator;
1571
+
1572
+ var widthOverride = (_FE = converterContext.getEntityType().annotations.FE) !== null && _FE !== void 0 && _FE.Situations && hasDraftIndicator && lineItem.$Type === "com.sap.vocabularies.UI.v1.DataField" && lineItem.Value.$target.type === "Edm.Date" ? "11em" : undefined;
1573
+ var oColumn = {
1528
1574
  key: KeyHelper.generateKeyFromDataField(lineItem),
1529
1575
  type: ColumnType.Annotation,
1530
1576
  label: sLabel,
@@ -1541,14 +1587,22 @@ sap.ui.define(["../../ManifestSettings", "../../helpers/ID", "sap/fe/core/conver
1541
1587
  propertyInfos: relatedPropertyNames.length > 0 ? relatedPropertyNames : undefined,
1542
1588
  additionalPropertyInfos: additionalPropertyNames.length > 0 ? additionalPropertyNames : undefined,
1543
1589
  exportSettings: exportSettings,
1544
- width: ((_lineItem$annotations = lineItem.annotations) === null || _lineItem$annotations === void 0 ? void 0 : (_lineItem$annotations2 = _lineItem$annotations.HTML5) === null || _lineItem$annotations2 === void 0 ? void 0 : (_lineItem$annotations3 = _lineItem$annotations2.CssDefaults) === null || _lineItem$annotations3 === void 0 ? void 0 : _lineItem$annotations3.width) || undefined,
1590
+ width: ((_lineItem$annotations = lineItem.annotations) === null || _lineItem$annotations === void 0 ? void 0 : (_lineItem$annotations2 = _lineItem$annotations.HTML5) === null || _lineItem$annotations2 === void 0 ? void 0 : (_lineItem$annotations3 = _lineItem$annotations2.CssDefaults) === null || _lineItem$annotations3 === void 0 ? void 0 : _lineItem$annotations3.width) || widthOverride || undefined,
1545
1591
  isNavigable: true,
1546
1592
  formatOptions: formatOptions,
1547
1593
  exportContactProperty: relatedPropertiesInfo.exportSettingsContactProperty,
1548
1594
  caseSensitive: isFilteringCaseSensitive(converterContext),
1549
1595
  typeConfig: oTypeConfig,
1550
1596
  visualSettings: visualSettings
1551
- }); // Collect information of related columns to be created.
1597
+ };
1598
+
1599
+ var sTooltip = _getTooltip(lineItem);
1600
+
1601
+ if (sTooltip) {
1602
+ oColumn.tooltip = sTooltip;
1603
+ }
1604
+
1605
+ annotationColumns.push(oColumn); // Collect information of related columns to be created.
1552
1606
 
1553
1607
  relatedPropertyNames.forEach(function (name) {
1554
1608
  columnsToBeCreated[name] = relatedPropertiesInfo.properties[name];
@@ -1647,8 +1701,6 @@ sap.ui.define(["../../ManifestSettings", "../../helpers/ID", "sap/fe/core/conver
1647
1701
  var internalColumns = {};
1648
1702
 
1649
1703
  var _loop = function (key) {
1650
- var _manifestColumn$posit;
1651
-
1652
1704
  var manifestColumn = columns[key]; // To identify the annotation column property overwrite via manifest use-case.
1653
1705
 
1654
1706
  var isAnnotationColumn = annotationColumns.some(function (column) {
@@ -1658,32 +1710,41 @@ sap.ui.define(["../../ManifestSettings", "../../helpers/ID", "sap/fe/core/conver
1658
1710
 
1659
1711
  var propertyInfos = _getPropertyNames(manifestColumn.properties, annotationColumns, converterContext, entityType);
1660
1712
 
1661
- internalColumns[key] = {
1662
- key: key,
1663
- id: "CustomColumn::" + key,
1664
- name: "CustomColumn::" + key,
1665
- header: manifestColumn.header,
1666
- width: manifestColumn.width || undefined,
1667
- horizontalAlign: _getManifestOrDefaultValue(manifestColumn === null || manifestColumn === void 0 ? void 0 : manifestColumn.horizontalAlign, HorizontalAlign.Begin, isAnnotationColumn),
1668
- type: manifestColumn.type === "Slot" ? ColumnType.Slot : ColumnType.Default,
1669
- availability: _getManifestOrDefaultValue(manifestColumn === null || manifestColumn === void 0 ? void 0 : manifestColumn.availability, AvailabilityType.Default, isAnnotationColumn),
1670
- template: manifestColumn.template || "undefined",
1671
- position: {
1672
- anchor: (_manifestColumn$posit = manifestColumn.position) === null || _manifestColumn$posit === void 0 ? void 0 : _manifestColumn$posit.anchor,
1673
- placement: manifestColumn.position === undefined ? Placement.After : manifestColumn.position.placement
1674
- },
1675
- isNavigable: isAnnotationColumn ? undefined : isActionNavigable(manifestColumn, navigationSettings, true),
1676
- settings: manifestColumn.settings,
1677
- sortable: false,
1678
- propertyInfos: propertyInfos,
1679
- formatOptions: _objectSpread(_objectSpread({}, getDefaultFormatOptionsForTable()), manifestColumn.formatOptions),
1680
- exportSettings: {
1681
- template: propertyInfos ? _appendCustomTemplate(propertyInfos) : undefined,
1682
- fieldLabel: propertyInfos ? manifestColumn.header : undefined,
1683
- wrap: propertyInfos && propertyInfos.length > 1 ? true : false
1684
- },
1685
- caseSensitive: isFilteringCaseSensitive(converterContext)
1686
- };
1713
+ if (!(manifestColumn !== null && manifestColumn !== void 0 && manifestColumn.template) && !isAnnotationColumn) {
1714
+ var _IssueCategoryType$An;
1715
+
1716
+ var Message = "The annotation column '" + key + "' referenced in the manifest is not found";
1717
+ converterContext.getDiagnostics().addIssue(IssueCategory.Manifest, IssueSeverity.Low, Message, IssueCategoryType, IssueCategoryType === null || IssueCategoryType === void 0 ? void 0 : (_IssueCategoryType$An = IssueCategoryType.AnnotationColumns) === null || _IssueCategoryType$An === void 0 ? void 0 : _IssueCategoryType$An.InvalidKey);
1718
+ } else {
1719
+ var _manifestColumn$posit;
1720
+
1721
+ internalColumns[key] = {
1722
+ key: key,
1723
+ id: "CustomColumn::" + key,
1724
+ name: "CustomColumn::" + key,
1725
+ header: manifestColumn.header,
1726
+ width: manifestColumn.width || undefined,
1727
+ horizontalAlign: _getManifestOrDefaultValue(manifestColumn === null || manifestColumn === void 0 ? void 0 : manifestColumn.horizontalAlign, HorizontalAlign.Begin, isAnnotationColumn),
1728
+ type: manifestColumn.type === "Slot" ? ColumnType.Slot : ColumnType.Default,
1729
+ availability: _getManifestOrDefaultValue(manifestColumn === null || manifestColumn === void 0 ? void 0 : manifestColumn.availability, AvailabilityType.Default, isAnnotationColumn),
1730
+ template: manifestColumn.template || "undefined",
1731
+ position: {
1732
+ anchor: (_manifestColumn$posit = manifestColumn.position) === null || _manifestColumn$posit === void 0 ? void 0 : _manifestColumn$posit.anchor,
1733
+ placement: manifestColumn.position === undefined ? Placement.After : manifestColumn.position.placement
1734
+ },
1735
+ isNavigable: isAnnotationColumn ? undefined : isActionNavigable(manifestColumn, navigationSettings, true),
1736
+ settings: manifestColumn.settings,
1737
+ sortable: false,
1738
+ propertyInfos: propertyInfos,
1739
+ formatOptions: _objectSpread(_objectSpread({}, getDefaultFormatOptionsForTable()), manifestColumn.formatOptions),
1740
+ exportSettings: {
1741
+ template: propertyInfos ? _appendCustomTemplate(propertyInfos) : undefined,
1742
+ fieldLabel: propertyInfos ? manifestColumn.header : undefined,
1743
+ wrap: propertyInfos && propertyInfos.length > 1 ? true : false
1744
+ },
1745
+ caseSensitive: isFilteringCaseSensitive(converterContext)
1746
+ };
1747
+ }
1687
1748
  };
1688
1749
 
1689
1750
  for (var key in columns) {
@@ -1754,203 +1815,6 @@ sap.ui.define(["../../ManifestSettings", "../../helpers/ID", "sap/fe/core/conver
1754
1815
 
1755
1816
  return undefined;
1756
1817
  }
1757
- /**
1758
- * Function to determine the visibility of the Delete button.
1759
- *
1760
- * @param converterContext The instance of the converter context
1761
- * @param navigationPath Path to the navigation entity
1762
- * @param isTargetDeletable Flag which determines whether a target is deletable
1763
- * @param viewConfiguration The instance of the configuration for the view path
1764
- * @returns {Expression<boolean>} The expression for the Delete button
1765
- */
1766
-
1767
-
1768
- _exports.getP13nMode = getP13nMode;
1769
-
1770
- function getDeleteVisible(converterContext, navigationPath, isTargetDeletable, viewConfiguration) {
1771
- var _currentEntitySet$ann, _converterContext$get8, _converterContext$get9, _converterContext$get10, _currentEntitySet$ann2, _currentEntitySet$ann3, _currentEntitySet$ann4, _currentEntitySet$ann5, _converterContext$get11, _converterContext$get12, _converterContext$get13, _converterContext$get14, _converterContext$get15, _converterContext$get16, _converterContext$get17;
1772
-
1773
- var currentEntitySet = converterContext.getEntitySet();
1774
- var dataModelObjectPath = converterContext.getDataModelObjectPath();
1775
- var visitedNavigationPaths = dataModelObjectPath.navigationProperties.map(function (navProp) {
1776
- return navProp.name;
1777
- });
1778
- var isDeleteHiddenExpression = currentEntitySet ? annotationExpression((currentEntitySet === null || currentEntitySet === void 0 ? void 0 : (_currentEntitySet$ann = currentEntitySet.annotations.UI) === null || _currentEntitySet$ann === void 0 ? void 0 : _currentEntitySet$ann.DeleteHidden) || false, visitedNavigationPaths, undefined, function (path) {
1779
- return singletonPathVisitor(path, converterContext, visitedNavigationPaths);
1780
- }) : constant(false);
1781
- var isDeleteHidden = compileBinding(isDeleteHiddenExpression);
1782
- var isParentDeletable, parentEntitySetDeletable;
1783
-
1784
- if (converterContext.getTemplateType() === TemplateType.ObjectPage) {
1785
- isParentDeletable = isPathDeletable(converterContext.getDataModelObjectPath(), navigationPath);
1786
- parentEntitySetDeletable = isParentDeletable ? compileBinding(isParentDeletable) : isParentDeletable;
1787
- }
1788
-
1789
- var bIsStickySessionSupported = (_converterContext$get8 = converterContext.getDataModelObjectPath().startingEntitySet) !== null && _converterContext$get8 !== void 0 && (_converterContext$get9 = _converterContext$get8.annotations) !== null && _converterContext$get9 !== void 0 && (_converterContext$get10 = _converterContext$get9.Session) !== null && _converterContext$get10 !== void 0 && _converterContext$get10.StickySessionSupported ? true : false;
1790
- var bIsDraftRoot = currentEntitySet && (_currentEntitySet$ann2 = currentEntitySet.annotations) !== null && _currentEntitySet$ann2 !== void 0 && (_currentEntitySet$ann3 = _currentEntitySet$ann2.Common) !== null && _currentEntitySet$ann3 !== void 0 && _currentEntitySet$ann3.DraftRoot ? true : false;
1791
- var bIsDraftNode = currentEntitySet && (_currentEntitySet$ann4 = currentEntitySet.annotations) !== null && _currentEntitySet$ann4 !== void 0 && (_currentEntitySet$ann5 = _currentEntitySet$ann4.Common) !== null && _currentEntitySet$ann5 !== void 0 && _currentEntitySet$ann5.DraftNode ? true : false;
1792
- var bIsDraftParentEntityForContainment = (_converterContext$get11 = converterContext.getDataModelObjectPath().targetObject) !== null && _converterContext$get11 !== void 0 && _converterContext$get11.containsTarget && ((_converterContext$get12 = converterContext.getDataModelObjectPath().startingEntitySet) !== null && _converterContext$get12 !== void 0 && (_converterContext$get13 = _converterContext$get12.annotations) !== null && _converterContext$get13 !== void 0 && (_converterContext$get14 = _converterContext$get13.Common) !== null && _converterContext$get14 !== void 0 && _converterContext$get14.DraftRoot || (_converterContext$get15 = converterContext.getDataModelObjectPath().startingEntitySet) !== null && _converterContext$get15 !== void 0 && (_converterContext$get16 = _converterContext$get15.annotations) !== null && _converterContext$get16 !== void 0 && (_converterContext$get17 = _converterContext$get16.Common) !== null && _converterContext$get17 !== void 0 && _converterContext$get17.DraftNode) ? true : false;
1793
-
1794
- if (bIsDraftRoot || bIsDraftNode || bIsStickySessionSupported || !converterContext.getEntitySet() && bIsDraftParentEntityForContainment) {
1795
- //do not show case the delete button if parentEntitySetDeletable is false
1796
- if (parentEntitySetDeletable === "false") {
1797
- return constant(false); //OP
1798
- } else if (parentEntitySetDeletable && isDeleteHidden !== "true") {
1799
- //Delete Hidden in case of true and path based
1800
- if (isDeleteHidden && isDeleteHidden !== "false") {
1801
- return and(equal(bindingExpression("/editMode", "ui"), "Editable"), not(isDeleteHiddenExpression));
1802
- } else {
1803
- return equal(bindingExpression("/editMode", "ui"), "Editable");
1804
- }
1805
- } else if (isDeleteHidden === "true" || !isTargetDeletable || viewConfiguration && converterContext.getManifestWrapper().hasMultipleVisualizations(viewConfiguration) || converterContext.getTemplateType() === TemplateType.AnalyticalListPage) {
1806
- return constant(false);
1807
- } else if (converterContext.getTemplateType() !== TemplateType.ListReport) {
1808
- if (isDeleteHidden && isDeleteHidden === "false") {
1809
- return and(equal(bindingExpression("/editMode", "ui"), "Editable"), not(isDeleteHiddenExpression));
1810
- } else {
1811
- return equal(bindingExpression("/editMode", "ui"), "Editable");
1812
- }
1813
- } else if (isBinding(isDeleteHiddenExpression)) {
1814
- // UI.DeleteHidden annotation points to a path
1815
- return not(isDeleteHiddenExpression);
1816
- } else {
1817
- return constant(true);
1818
- }
1819
- } else {
1820
- return constant(false);
1821
- }
1822
- }
1823
- /**
1824
- * Returns the enablement for the 'Mass Edit' button
1825
- *
1826
- * @param converterContext The converterContext
1827
- * @param bMassEditVisible The visibility of the 'Mass Edit' button
1828
- * @returns {*} Expression or Boolean value for the enablement of the 'Mass Edit' button
1829
- */
1830
-
1831
-
1832
- _exports.getDeleteVisible = getDeleteVisible;
1833
-
1834
- function getEnablementMassEdit(converterContext, bMassEditVisible) {
1835
- if (bMassEditVisible) {
1836
- var isParentUpdatable = isPathUpdatable(converterContext.getDataModelObjectPath(), undefined, true); //when updatable is path based and pointing to current entity set property, that case is handled in table helper and runtime
1837
-
1838
- if (isParentUpdatable !== null && isParentUpdatable !== void 0 && isParentUpdatable.currentEntityRestriction) {
1839
- return false;
1840
- }
1841
-
1842
- var oExpression = compileBinding(isParentUpdatable);
1843
- return isParentUpdatable ? "{= %{internal>numberOfSelectedContexts} >= 2 && " + compileBinding(isParentUpdatable, oExpression) + "}" : false;
1844
- }
1845
-
1846
- return false;
1847
- }
1848
- /**
1849
- * Returns the visibility for the 'Mass Edit' button
1850
- *
1851
- * @param converterContext The converterContext
1852
- * @param tableManifestConfiguration The manifest configuration for the table
1853
- * @param targetCapabilities The target capability restrictions for the table
1854
- * @param selectionMode The selection mode for the table
1855
- * @returns {*} Expression or Boolean value for the visibility of the 'Mass Edit' button
1856
- */
1857
-
1858
-
1859
- _exports.getEnablementMassEdit = getEnablementMassEdit;
1860
-
1861
- function getVisibilityMassEdit(converterContext, tableManifestConfiguration, targetCapabilities, selectionMode) {
1862
- var _entitySet$annotation, _entitySet$annotation2;
1863
-
1864
- var entitySet = converterContext.getEntitySet(),
1865
- bUpdateHidden = entitySet && (entitySet === null || entitySet === void 0 ? void 0 : (_entitySet$annotation = entitySet.annotations.UI) === null || _entitySet$annotation === void 0 ? void 0 : (_entitySet$annotation2 = _entitySet$annotation.UpdateHidden) === null || _entitySet$annotation2 === void 0 ? void 0 : _entitySet$annotation2.valueOf()),
1866
- bMassEditEnabled = (tableManifestConfiguration === null || tableManifestConfiguration === void 0 ? void 0 : tableManifestConfiguration.enableMassEdit) || false,
1867
- iSelectionLimit = tableManifestConfiguration === null || tableManifestConfiguration === void 0 ? void 0 : tableManifestConfiguration.selectionLimit;
1868
- var bMassEditVisible = true;
1869
-
1870
- if (selectionMode && selectionMode === "Single" || iSelectionLimit && iSelectionLimit < 2) {
1871
- bMassEditVisible = false;
1872
- } else if (selectionMode && (selectionMode === "Auto" || selectionMode === "None")) {
1873
- bMassEditVisible = true;
1874
- }
1875
-
1876
- if ((targetCapabilities === null || targetCapabilities === void 0 ? void 0 : targetCapabilities.isUpdatable) !== false && bMassEditVisible && bMassEditEnabled) {
1877
- if (bUpdateHidden && typeof bUpdateHidden === "boolean") {
1878
- return !bUpdateHidden && converterContext.getTemplateType() === TemplateType.ObjectPage ? compileBinding(UI.IsEditable) : false;
1879
- } else if (bUpdateHidden && bUpdateHidden !== null && bUpdateHidden !== void 0 && bUpdateHidden.path) {
1880
- return converterContext.getTemplateType() === TemplateType.ObjectPage ? compileBinding(and(equal(UI.IsEditable, true), equal(annotationExpression(bUpdateHidden), false))) : false;
1881
- }
1882
-
1883
- return converterContext.getTemplateType() === TemplateType.ObjectPage ? compileBinding(UI.IsEditable) : false;
1884
- }
1885
-
1886
- return false;
1887
- }
1888
- /**
1889
- * Function to determine the visibility of the Create button.
1890
- *
1891
- * @param converterContext The instance of the converter context
1892
- * @param creationMode The mode used for creation
1893
- * @param isInsertable Annotation expression of InsertRestrictions.Insertable
1894
- * @param viewConfiguration The instance of the configuration for the view path
1895
- * @returns {Expression<boolean>} Expression or Boolean value of the 'UI.CreateHidden' annotation
1896
- */
1897
-
1898
-
1899
- _exports.getVisibilityMassEdit = getVisibilityMassEdit;
1900
-
1901
- function getCreateVisible(converterContext, creationMode, isInsertable, viewConfiguration) {
1902
- var _currentEntitySet$ann6, _currentEntitySet$ann7, _currentEntitySet$ann8, _currentEntitySet$ann9, _converterContext$get18, _converterContext$get19, _converterContext$get20;
1903
-
1904
- var currentEntitySet = converterContext.getEntitySet();
1905
- var dataModelObjectPath = converterContext.getDataModelObjectPath();
1906
- var visitedNavigationPaths = dataModelObjectPath.navigationProperties.map(function (navProp) {
1907
- return navProp.name;
1908
- });
1909
- var isCreateHidden = currentEntitySet ? annotationExpression((currentEntitySet === null || currentEntitySet === void 0 ? void 0 : (_currentEntitySet$ann6 = currentEntitySet.annotations.UI) === null || _currentEntitySet$ann6 === void 0 ? void 0 : _currentEntitySet$ann6.CreateHidden) || false, visitedNavigationPaths, undefined, function (path) {
1910
- return singletonPathVisitor(path, converterContext, visitedNavigationPaths);
1911
- }) : constant(false); // if there is a custom new action the create button will be bound against this new action (instead of a POST action).
1912
- // The visibility of the create button then depends on the new action's OperationAvailable annotation (instead of the insertRestrictions):
1913
- // OperationAvailable = true or undefined -> create is visible
1914
- // OperationAvailable = false -> create is not visible
1915
-
1916
- var newActionName = currentEntitySet === null || currentEntitySet === void 0 ? void 0 : (_currentEntitySet$ann7 = currentEntitySet.annotations.Common) === null || _currentEntitySet$ann7 === void 0 ? void 0 : (_currentEntitySet$ann8 = _currentEntitySet$ann7.DraftRoot) === null || _currentEntitySet$ann8 === void 0 ? void 0 : (_currentEntitySet$ann9 = _currentEntitySet$ann8.NewAction) === null || _currentEntitySet$ann9 === void 0 ? void 0 : _currentEntitySet$ann9.toString();
1917
- var showCreateForNewAction = newActionName ? annotationExpression(converterContext === null || converterContext === void 0 ? void 0 : (_converterContext$get18 = converterContext.getEntityType().actions[newActionName].annotations) === null || _converterContext$get18 === void 0 ? void 0 : (_converterContext$get19 = _converterContext$get18.Core) === null || _converterContext$get19 === void 0 ? void 0 : (_converterContext$get20 = _converterContext$get19.OperationAvailable) === null || _converterContext$get20 === void 0 ? void 0 : _converterContext$get20.valueOf(), [], true, function (path) {
1918
- return singletonPathVisitor(path, converterContext, []);
1919
- }) : undefined; // - If it's statically not insertable -> create is not visible
1920
- // - If create is statically hidden -> create is not visible
1921
- // - If it's an ALP template -> create is not visible
1922
- // -
1923
- // - Otherwise
1924
- // - If the create mode is external -> create is visible
1925
- // - If we're on the list report ->
1926
- // - If UI.CreateHidden points to a property path -> provide a negated binding to this path
1927
- // - Otherwise, create is visible
1928
- // - Otherwise
1929
- // - This depends on the value of the the UI.IsEditable
1930
-
1931
- return ifElse(or(or(equal(showCreateForNewAction, false), and(isConstant(isInsertable), equal(isInsertable, false), equal(showCreateForNewAction, undefined))), isConstant(isCreateHidden) && equal(isCreateHidden, true), or(viewConfiguration ? converterContext.getManifestWrapper().hasMultipleVisualizations(viewConfiguration) : false, converterContext.getTemplateType() === TemplateType.AnalyticalListPage)), false, ifElse(creationMode === "External", true, ifElse(converterContext.getTemplateType() === TemplateType.ListReport, ifElse(isBinding(isCreateHidden), not(isCreateHidden), true), and(not(isCreateHidden), UI.IsEditable))));
1932
- }
1933
- /**
1934
- * Returns the visibility for the Paste button.
1935
- *
1936
- * @param converterContext The instance of the converter context
1937
- * @param creationBehaviour The chosen behavior of creation
1938
- * @param isInsertable The expression which denotes insert restrictions
1939
- * @param pasteEnabledInManifest The flag which denotes the paste enablement status via manifest
1940
- * @param viewConfiguration The instance of the configuration for the view path
1941
- * @returns {Expression<boolean>} Expression or Boolean value of the UI.CreateHidden annotation
1942
- */
1943
-
1944
-
1945
- _exports.getCreateVisible = getCreateVisible;
1946
-
1947
- function getPasteEnabled(converterContext, creationBehaviour, isInsertable, pasteEnabledInManifest, viewConfiguration) {
1948
- // If create is not visible -> it's not enabled
1949
- // If create is visible ->
1950
- // If it's in the ListReport -> not enabled
1951
- // If it's insertable -> enabled
1952
- return ifElse(pasteEnabledInManifest && equal(getCreateVisible(converterContext, creationBehaviour.mode, isInsertable, viewConfiguration), true), converterContext.getTemplateType() === TemplateType.ObjectPage && isInsertable, false);
1953
- }
1954
1818
  /**
1955
1819
  * Returns a JSON string containing the sort conditions for the presentation variant.
1956
1820
  *
@@ -1961,7 +1825,7 @@ sap.ui.define(["../../ManifestSettings", "../../helpers/ID", "sap/fe/core/conver
1961
1825
  */
1962
1826
 
1963
1827
 
1964
- _exports.getPasteEnabled = getPasteEnabled;
1828
+ _exports.getP13nMode = getP13nMode;
1965
1829
 
1966
1830
  function getSortConditions(converterContext, presentationVariantAnnotation, columns) {
1967
1831
  // Currently navigation property is not supported as sorter
@@ -2074,20 +1938,23 @@ sap.ui.define(["../../ManifestSettings", "../../helpers/ID", "sap/fe/core/conver
2074
1938
  }
2075
1939
 
2076
1940
  function getTableAnnotationConfiguration(lineItemAnnotation, visualizationPath, converterContext, tableManifestConfiguration, columns, presentationVariantAnnotation, viewConfiguration) {
2077
- var _converterContext$get21, _converterContext$get22, _converterContext$get23;
1941
+ var _converterContext$get8, _converterContext$get9, _converterContext$get10;
2078
1942
 
2079
1943
  // Need to get the target
2080
1944
  var _splitPath2 = splitPath(visualizationPath),
2081
1945
  navigationPropertyPath = _splitPath2.navigationPropertyPath;
2082
1946
 
2083
- var title = (_converterContext$get21 = converterContext.getDataModelObjectPath().targetEntityType.annotations) === null || _converterContext$get21 === void 0 ? void 0 : (_converterContext$get22 = _converterContext$get21.UI) === null || _converterContext$get22 === void 0 ? void 0 : (_converterContext$get23 = _converterContext$get22.HeaderInfo) === null || _converterContext$get23 === void 0 ? void 0 : _converterContext$get23.TypeNamePlural;
1947
+ var title = (_converterContext$get8 = converterContext.getDataModelObjectPath().targetEntityType.annotations) === null || _converterContext$get8 === void 0 ? void 0 : (_converterContext$get9 = _converterContext$get8.UI) === null || _converterContext$get9 === void 0 ? void 0 : (_converterContext$get10 = _converterContext$get9.HeaderInfo) === null || _converterContext$get10 === void 0 ? void 0 : _converterContext$get10.TypeNamePlural;
2084
1948
  var entitySet = converterContext.getDataModelObjectPath().targetEntitySet;
2085
1949
  var pageManifestSettings = converterContext.getManifestWrapper();
2086
1950
  var hasAbsolutePath = navigationPropertyPath.length === 0,
2087
1951
  p13nMode = getP13nMode(visualizationPath, converterContext, tableManifestConfiguration),
2088
1952
  id = navigationPropertyPath ? TableID(visualizationPath) : TableID(converterContext.getContextPath(), "LineItem");
2089
1953
  var targetCapabilities = getCapabilityRestriction(converterContext);
2090
- var isDeleteButtonVisible = getDeleteVisible(converterContext, navigationPropertyPath, targetCapabilities.isDeletable, viewConfiguration);
1954
+ var navigationTargetPath = getNavigationTargetPath(converterContext, navigationPropertyPath);
1955
+ var navigationSettings = pageManifestSettings.getNavigationConfiguration(navigationTargetPath);
1956
+ var standardActionsContext = generateStandardActionsContext(converterContext, navigationSettings, tableManifestConfiguration, viewConfiguration);
1957
+ var isDeleteButtonVisible = getDeleteVisibility(converterContext, standardActionsContext);
2091
1958
  var selectionMode = getSelectionMode(lineItemAnnotation, visualizationPath, converterContext, hasAbsolutePath, targetCapabilities, isDeleteButtonVisible);
2092
1959
  var threshold = navigationPropertyPath ? 10 : 30;
2093
1960
 
@@ -2095,30 +1962,17 @@ sap.ui.define(["../../ManifestSettings", "../../helpers/ID", "sap/fe/core/conver
2095
1962
  threshold = presentationVariantAnnotation.MaxItems.valueOf();
2096
1963
  }
2097
1964
 
2098
- var navigationTargetPath = getNavigationTargetPath(converterContext, navigationPropertyPath);
2099
- var navigationSettings = pageManifestSettings.getNavigationConfiguration(navigationTargetPath);
2100
-
2101
1965
  var creationBehaviour = _getCreationBehaviour(lineItemAnnotation, tableManifestConfiguration, converterContext, navigationSettings);
2102
1966
 
2103
- var isParentDeletable, parentEntitySetDeletable;
2104
-
2105
- if (converterContext.getTemplateType() === TemplateType.ObjectPage) {
2106
- var _isParentDeletable;
2107
-
2108
- isParentDeletable = isPathDeletable(converterContext.getDataModelObjectPath(), undefined, true);
2109
-
2110
- if ((_isParentDeletable = isParentDeletable) !== null && _isParentDeletable !== void 0 && _isParentDeletable.currentEntityRestriction) {
2111
- parentEntitySetDeletable = undefined;
2112
- } else {
2113
- parentEntitySetDeletable = isParentDeletable ? compileBinding(isParentDeletable, true) : isParentDeletable;
2114
- }
2115
- }
2116
-
2117
- var dataModelObjectPath = converterContext.getDataModelObjectPath();
2118
- var isInsertable = isPathInsertable(dataModelObjectPath);
2119
1967
  var variantManagement = pageManifestSettings.getVariantManagement();
2120
- var bMassEditVisible = getVisibilityMassEdit(converterContext, tableManifestConfiguration, targetCapabilities, selectionMode);
2121
1968
  var isSearchable = isPathSearchable(converterContext.getDataModelObjectPath());
1969
+ var tableActions = {
1970
+ create: getStandardActionCreate(converterContext, standardActionsContext),
1971
+ "delete": getStandardActionDelete(converterContext, standardActionsContext),
1972
+ paste: getStandardActionPaste(converterContext, standardActionsContext),
1973
+ massEdit: getStandardActionMassEdit(converterContext, standardActionsContext, selectionMode)
1974
+ };
1975
+ var isInsertUpdateTemplated = getInsertUpdateActionsTemplating(standardActionsContext, isDraftOrStickySupported(converterContext), tableActions.create.visible === "false");
2122
1976
  return {
2123
1977
  id: id,
2124
1978
  entityName: entitySet ? entitySet.name : "",
@@ -2126,14 +1980,9 @@ sap.ui.define(["../../ManifestSettings", "../../helpers/ID", "sap/fe/core/conver
2126
1980
  navigationPath: navigationPropertyPath,
2127
1981
  row: _getRowConfigurationProperty(lineItemAnnotation, visualizationPath, converterContext, navigationSettings, navigationTargetPath),
2128
1982
  p13nMode: p13nMode,
2129
- show: {
2130
- "delete": compileBinding(isDeleteButtonVisible),
2131
- create: compileBinding(getCreateVisible(converterContext, creationBehaviour === null || creationBehaviour === void 0 ? void 0 : creationBehaviour.mode, isInsertable)),
2132
- paste: compileBinding(getPasteEnabled(converterContext, creationBehaviour, isInsertable, tableManifestConfiguration.enablePaste, viewConfiguration)),
2133
- massEdit: {
2134
- visible: bMassEditVisible,
2135
- enabled: getEnablementMassEdit(converterContext, bMassEditVisible)
2136
- }
1983
+ standardActions: {
1984
+ actions: tableActions,
1985
+ isInsertUpdateTemplated: isInsertUpdateTemplated
2137
1986
  },
2138
1987
  displayMode: isInDisplayMode(converterContext, viewConfiguration),
2139
1988
  create: creationBehaviour,
@@ -2142,7 +1991,6 @@ sap.ui.define(["../../ManifestSettings", "../../helpers/ID", "sap/fe/core/conver
2142
1991
  variantManagement: variantManagement === "Control" && !p13nMode ? VariantManagementType.None : variantManagement,
2143
1992
  threshold: threshold,
2144
1993
  sortConditions: getSortConditions(converterContext, presentationVariantAnnotation, columns),
2145
- parentEntityDeleteEnabled: parentEntitySetDeletable,
2146
1994
  title: title,
2147
1995
  searchable: tableManifestConfiguration.type !== "AnalyticalTable" && !(isConstant(isSearchable) && isSearchable.value === false)
2148
1996
  };
@@ -2256,7 +2104,7 @@ sap.ui.define(["../../ManifestSettings", "../../helpers/ID", "sap/fe/core/conver
2256
2104
  _exports.getSelectionVariantConfiguration = getSelectionVariantConfiguration;
2257
2105
 
2258
2106
  function getTableManifestConfiguration(lineItemAnnotation, visualizationPath, converterContext) {
2259
- var _tableSettings$quickV5, _converterContext$get24;
2107
+ var _tableSettings$quickV5, _converterContext$get11;
2260
2108
 
2261
2109
  var checkCondensedLayout = arguments.length > 3 && arguments[3] !== undefined ? arguments[3] : false;
2262
2110
  var tableManifestSettings = converterContext.getManifestControlConfiguration(visualizationPath);
@@ -2275,14 +2123,15 @@ sap.ui.define(["../../ManifestSettings", "../../helpers/ID", "sap/fe/core/conver
2275
2123
  var enableFullScreen = false;
2276
2124
  var selectionLimit = 200;
2277
2125
  var multiSelectMode;
2278
- var enableAutoColumnWidth = true;
2279
- var enablePaste = converterContext.getTemplateType() === "ObjectPage";
2126
+ var enableAutoColumnWidth = !converterContext.getManifestWrapper().isPhone();
2127
+ var enablePaste = tableSettings.enablePaste !== undefined ? tableSettings.enablePaste : converterContext.getTemplateType() === "ObjectPage"; // Paste is disabled by default excepted for OP
2128
+
2280
2129
  var isCondensedTableLayoutCompliant = checkCondensedLayout && converterContext.getManifestWrapper().isCondensedLayoutCompliant();
2281
2130
  var entityType = converterContext.getEntityType();
2282
2131
  var aggregationHelper = new AggregationHelper(entityType, converterContext);
2283
2132
 
2284
2133
  if (lineItemAnnotation) {
2285
- var _tableSettings$quickV, _tableSettings$quickV2, _tableSettings$creati, _tableSettings$creati2, _tableSettings$creati3, _tableSettings$creati4, _tableSettings$creati5, _tableSettings$quickV4;
2134
+ var _tableSettings$quickV, _tableSettings$quickV2, _tableSettings$creati, _tableSettings$creati2, _tableSettings$creati3, _tableSettings$creati4, _tableSettings$creati5, _tableSettings$quickV4, _tableSettings$enable;
2286
2135
 
2287
2136
  var targetEntityType = converterContext.getAnnotationEntityType(lineItemAnnotation);
2288
2137
  tableSettings === null || tableSettings === void 0 ? void 0 : (_tableSettings$quickV = tableSettings.quickVariantSelection) === null || _tableSettings$quickV === void 0 ? void 0 : (_tableSettings$quickV2 = _tableSettings$quickV.paths) === null || _tableSettings$quickV2 === void 0 ? void 0 : _tableSettings$quickV2.forEach(function (path) {
@@ -2325,11 +2174,12 @@ sap.ui.define(["../../ManifestSettings", "../../helpers/ID", "sap/fe/core/conver
2325
2174
  tableType = "ResponsiveTable";
2326
2175
  }
2327
2176
  }
2328
- }
2177
+ } // If enableFullScreen is not set, use as default true on phone and false otherwise
2329
2178
 
2330
- enableFullScreen = tableSettings.enableFullScreen || false;
2331
2179
 
2332
- if (enableFullScreen === true && converterContext.getTemplateType() === TemplateType.ListReport) {
2180
+ enableFullScreen = (_tableSettings$enable = tableSettings.enableFullScreen) !== null && _tableSettings$enable !== void 0 ? _tableSettings$enable : converterContext.getManifestWrapper().isPhone(); // Make sure that enableFullScreen is not set on ListReport for desktop or tablet
2181
+
2182
+ if (!converterContext.getManifestWrapper().isPhone() && enableFullScreen && converterContext.getTemplateType() === TemplateType.ListReport) {
2333
2183
  enableFullScreen = false;
2334
2184
  converterContext.getDiagnostics().addIssue(IssueCategory.Manifest, IssueSeverity.Low, IssueType.FULLSCREENMODE_NOT_ON_LISTREPORT);
2335
2185
  }
@@ -2350,7 +2200,6 @@ sap.ui.define(["../../ManifestSettings", "../../helpers/ID", "sap/fe/core/conver
2350
2200
  }
2351
2201
  }
2352
2202
 
2353
- enablePaste = converterContext.getTemplateType() === "ObjectPage" && tableSettings.enablePaste !== false;
2354
2203
  enableExport = tableSettings.enableExport !== undefined ? tableSettings.enableExport : converterContext.getTemplateType() !== "ObjectPage" || enablePaste;
2355
2204
  }
2356
2205
 
@@ -2368,13 +2217,52 @@ sap.ui.define(["../../ManifestSettings", "../../helpers/ID", "sap/fe/core/conver
2368
2217
  selectionLimit: selectionLimit,
2369
2218
  multiSelectMode: multiSelectMode,
2370
2219
  enablePaste: enablePaste,
2371
- showRowCount: !(tableSettings !== null && tableSettings !== void 0 && (_tableSettings$quickV5 = tableSettings.quickVariantSelection) !== null && _tableSettings$quickV5 !== void 0 && _tableSettings$quickV5.showCounts) && !((_converterContext$get24 = converterContext.getManifestWrapper().getViewConfiguration()) !== null && _converterContext$get24 !== void 0 && _converterContext$get24.showCounts),
2220
+ showRowCount: !(tableSettings !== null && tableSettings !== void 0 && (_tableSettings$quickV5 = tableSettings.quickVariantSelection) !== null && _tableSettings$quickV5 !== void 0 && _tableSettings$quickV5.showCounts) && !((_converterContext$get11 = converterContext.getManifestWrapper().getViewConfiguration()) !== null && _converterContext$get11 !== void 0 && _converterContext$get11.showCounts),
2372
2221
  enableMassEdit: tableSettings === null || tableSettings === void 0 ? void 0 : tableSettings.enableMassEdit,
2373
2222
  enableAutoColumnWidth: enableAutoColumnWidth
2374
2223
  };
2375
2224
  }
2376
2225
 
2377
2226
  _exports.getTableManifestConfiguration = getTableManifestConfiguration;
2227
+
2228
+ function getTypeConfig(oProperty, dataType) {
2229
+ var _targetType, _propertyTypeConfig$t, _propertyTypeConfig$t2, _propertyTypeConfig$t3, _propertyTypeConfig$t4;
2230
+
2231
+ var oTargetMapping = EDM_TYPE_MAPPING[oProperty === null || oProperty === void 0 ? void 0 : oProperty.type] || (dataType ? EDM_TYPE_MAPPING[dataType] : undefined);
2232
+
2233
+ if (!oTargetMapping && oProperty.targetType && ((_targetType = oProperty.targetType) === null || _targetType === void 0 ? void 0 : _targetType._type) === "TypeDefinition") {
2234
+ oTargetMapping = EDM_TYPE_MAPPING[oProperty.targetType.underlyingType];
2235
+ }
2236
+
2237
+ var propertyTypeConfig = {
2238
+ type: oTargetMapping.type,
2239
+ constraints: {},
2240
+ formatOptions: {}
2241
+ };
2242
+
2243
+ if (isProperty(oProperty)) {
2244
+ var _oTargetMapping$const, _oTargetMapping$const2, _oTargetMapping$const3, _oTargetMapping$const4, _oTargetMapping$const5, _oProperty$annotation2, _oProperty$annotation3, _oProperty$annotation4, _oProperty$annotation5, _oTargetMapping$const6, _oProperty$annotation6, _oProperty$annotation7, _oProperty$annotation8, _oProperty$annotation9, _oTargetMapping$const7, _annotations3, _annotations3$Common;
2245
+
2246
+ propertyTypeConfig.constraints = {
2247
+ scale: (_oTargetMapping$const = oTargetMapping.constraints) !== null && _oTargetMapping$const !== void 0 && _oTargetMapping$const.$Scale ? oProperty.scale : undefined,
2248
+ precision: (_oTargetMapping$const2 = oTargetMapping.constraints) !== null && _oTargetMapping$const2 !== void 0 && _oTargetMapping$const2.$Precision ? oProperty.precision : undefined,
2249
+ maxLength: (_oTargetMapping$const3 = oTargetMapping.constraints) !== null && _oTargetMapping$const3 !== void 0 && _oTargetMapping$const3.$MaxLength ? oProperty.maxLength : undefined,
2250
+ nullable: (_oTargetMapping$const4 = oTargetMapping.constraints) !== null && _oTargetMapping$const4 !== void 0 && _oTargetMapping$const4.$Nullable ? oProperty.nullable : undefined,
2251
+ minimum: (_oTargetMapping$const5 = oTargetMapping.constraints) !== null && _oTargetMapping$const5 !== void 0 && _oTargetMapping$const5["@Org.OData.Validation.V1.Minimum/$Decimal"] && !isNaN((_oProperty$annotation2 = oProperty.annotations) === null || _oProperty$annotation2 === void 0 ? void 0 : (_oProperty$annotation3 = _oProperty$annotation2.Validation) === null || _oProperty$annotation3 === void 0 ? void 0 : _oProperty$annotation3.Minimum) ? "".concat((_oProperty$annotation4 = oProperty.annotations) === null || _oProperty$annotation4 === void 0 ? void 0 : (_oProperty$annotation5 = _oProperty$annotation4.Validation) === null || _oProperty$annotation5 === void 0 ? void 0 : _oProperty$annotation5.Minimum) : undefined,
2252
+ maximum: (_oTargetMapping$const6 = oTargetMapping.constraints) !== null && _oTargetMapping$const6 !== void 0 && _oTargetMapping$const6["@Org.OData.Validation.V1.Maximum/$Decimal"] && !isNaN((_oProperty$annotation6 = oProperty.annotations) === null || _oProperty$annotation6 === void 0 ? void 0 : (_oProperty$annotation7 = _oProperty$annotation6.Validation) === null || _oProperty$annotation7 === void 0 ? void 0 : _oProperty$annotation7.Maximum) ? "".concat((_oProperty$annotation8 = oProperty.annotations) === null || _oProperty$annotation8 === void 0 ? void 0 : (_oProperty$annotation9 = _oProperty$annotation8.Validation) === null || _oProperty$annotation9 === void 0 ? void 0 : _oProperty$annotation9.Maximum) : undefined,
2253
+ isDigitSequence: propertyTypeConfig.type === "sap.ui.model.odata.type.String" && (_oTargetMapping$const7 = oTargetMapping.constraints) !== null && _oTargetMapping$const7 !== void 0 && _oTargetMapping$const7["@com.sap.vocabularies.Common.v1.IsDigitSequence"] && (_annotations3 = oProperty.annotations) !== null && _annotations3 !== void 0 && (_annotations3$Common = _annotations3.Common) !== null && _annotations3$Common !== void 0 && _annotations3$Common.IsDigitSequence ? true : undefined
2254
+ };
2255
+ }
2256
+
2257
+ propertyTypeConfig.formatOptions = {
2258
+ parseAsString: (propertyTypeConfig === null || propertyTypeConfig === void 0 ? void 0 : (_propertyTypeConfig$t = propertyTypeConfig.type) === null || _propertyTypeConfig$t === void 0 ? void 0 : _propertyTypeConfig$t.indexOf("sap.ui.model.odata.type.Int")) === 0 || (propertyTypeConfig === null || propertyTypeConfig === void 0 ? void 0 : (_propertyTypeConfig$t2 = propertyTypeConfig.type) === null || _propertyTypeConfig$t2 === void 0 ? void 0 : _propertyTypeConfig$t2.indexOf("sap.ui.model.odata.type.Double")) === 0 ? false : undefined,
2259
+ emptyString: (propertyTypeConfig === null || propertyTypeConfig === void 0 ? void 0 : (_propertyTypeConfig$t3 = propertyTypeConfig.type) === null || _propertyTypeConfig$t3 === void 0 ? void 0 : _propertyTypeConfig$t3.indexOf("sap.ui.model.odata.type.Int")) === 0 || (propertyTypeConfig === null || propertyTypeConfig === void 0 ? void 0 : (_propertyTypeConfig$t4 = propertyTypeConfig.type) === null || _propertyTypeConfig$t4 === void 0 ? void 0 : _propertyTypeConfig$t4.indexOf("sap.ui.model.odata.type.Double")) === 0 ? "" : undefined,
2260
+ parseKeepsEmptyString: propertyTypeConfig.type === "sap.ui.model.odata.type.String" ? true : undefined
2261
+ };
2262
+ return propertyTypeConfig;
2263
+ }
2264
+
2265
+ _exports.getTypeConfig = getTypeConfig;
2378
2266
  return _exports;
2379
2267
  }, false);
2380
- //# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIlRhYmxlLnRzIl0sIm5hbWVzIjpbIkNvbHVtblR5cGUiLCJnZXRUYWJsZUFjdGlvbnMiLCJsaW5lSXRlbUFubm90YXRpb24iLCJ2aXN1YWxpemF0aW9uUGF0aCIsImNvbnZlcnRlckNvbnRleHQiLCJuYXZpZ2F0aW9uU2V0dGluZ3MiLCJhVGFibGVBY3Rpb25zIiwiZ2V0VGFibGVBbm5vdGF0aW9uQWN0aW9ucyIsImFBbm5vdGF0aW9uQWN0aW9ucyIsInRhYmxlQWN0aW9ucyIsImFIaWRkZW5BY3Rpb25zIiwiaGlkZGVuVGFibGVBY3Rpb25zIiwiaW5zZXJ0Q3VzdG9tRWxlbWVudHMiLCJnZXRBY3Rpb25zRnJvbU1hbmlmZXN0IiwiZ2V0TWFuaWZlc3RDb250cm9sQ29uZmlndXJhdGlvbiIsImFjdGlvbnMiLCJpc05hdmlnYWJsZSIsImVuYWJsZU9uU2VsZWN0IiwiZW5hYmxlQXV0b1Njcm9sbCIsImVuYWJsZWQiLCJkZWZhdWx0VmFsdWVzRXh0ZW5zaW9uRnVuY3Rpb24iLCJnZXRUYWJsZUNvbHVtbnMiLCJhbm5vdGF0aW9uQ29sdW1ucyIsImdldENvbHVtbnNGcm9tQW5ub3RhdGlvbnMiLCJtYW5pZmVzdENvbHVtbnMiLCJnZXRDb2x1bW5zRnJvbU1hbmlmZXN0IiwiY29sdW1ucyIsImdldEFubm90YXRpb25FbnRpdHlUeXBlIiwid2lkdGgiLCJhdmFpbGFiaWxpdHkiLCJzZXR0aW5ncyIsImhvcml6b250YWxBbGlnbiIsImZvcm1hdE9wdGlvbnMiLCJnZXRBZ2dyZWdhdGVEZWZpbml0aW9uc0Zyb21FbnRpdHlUeXBlIiwiZW50aXR5VHlwZSIsInRhYmxlQ29sdW1ucyIsImFnZ3JlZ2F0aW9uSGVscGVyIiwiQWdncmVnYXRpb25IZWxwZXIiLCJmaW5kQ29sdW1uRnJvbVBhdGgiLCJwYXRoIiwiZmluZCIsImNvbHVtbiIsImFubm90YXRpb25Db2x1bW4iLCJwcm9wZXJ0eUluZm9zIiwidW5kZWZpbmVkIiwicmVsYXRpdmVQYXRoIiwiaXNBbmFseXRpY3NTdXBwb3J0ZWQiLCJtQ3VycmVuY3lPclVuaXRQcm9wZXJ0aWVzIiwiU2V0IiwiZm9yRWFjaCIsIm9Db2x1bW4iLCJvVGFibGVDb2x1bW4iLCJ1bml0IiwiYWRkIiwiYUN1c3RvbUFnZ3JlZ2F0ZUFubm90YXRpb25zIiwiZ2V0Q3VzdG9tQWdncmVnYXRlRGVmaW5pdGlvbnMiLCJtUmF3RGVmaW5pdGlvbnMiLCJhbm5vdGF0aW9uIiwib0FnZ3JlZ2F0ZWRQcm9wZXJ0eSIsIl9lbnRpdHlUeXBlIiwiZW50aXR5UHJvcGVydGllcyIsIm9Qcm9wZXJ0eSIsIm5hbWUiLCJxdWFsaWZpZXIiLCJhQ29udGV4dERlZmluaW5nUHJvcGVydGllcyIsImFubm90YXRpb25zIiwiQWdncmVnYXRpb24iLCJDb250ZXh0RGVmaW5pbmdQcm9wZXJ0aWVzIiwibWFwIiwib0N0eERlZlByb3BlcnR5IiwidmFsdWUiLCJtUmVzdWx0IiwiYVJhd0NvbnRleHREZWZpbmluZ1Byb3BlcnRpZXMiLCJoYXMiLCJpc0RhdGFQb2ludEZha2VUYXJnZXRQcm9wZXJ0eSIsImRlZmF1bHRBZ2dyZWdhdGUiLCJjb250ZXh0RGVmaW5pbmdQcm9wZXJ0eU5hbWUiLCJwdXNoIiwibGVuZ3RoIiwiY29udGV4dERlZmluaW5nUHJvcGVydGllcyIsInVwZGF0ZVRhYmxlVmlzdWFsaXphdGlvbkZvckFuYWx5dGljcyIsInRhYmxlVmlzdWFsaXphdGlvbiIsInByZXNlbnRhdGlvblZhcmlhbnRBbm5vdGF0aW9uIiwiY29udHJvbCIsInR5cGUiLCJhZ2dyZWdhdGVzRGVmaW5pdGlvbnMiLCJlbmFibGVBbmFseXRpY3MiLCJhZ2dyZWdhdGVzIiwiZ3JvdXBDb25kaXRpb25zIiwiZ2V0R3JvdXBDb25kaXRpb25zIiwiYWdncmVnYXRlQ29uZGl0aW9ucyIsImdldEFnZ3JlZ2F0ZUNvbmRpdGlvbnMiLCJnZXROYXZpZ2F0aW9uVGFyZ2V0UGF0aCIsIm5hdmlnYXRpb25Qcm9wZXJ0eVBhdGgiLCJtYW5pZmVzdFdyYXBwZXIiLCJnZXRNYW5pZmVzdFdyYXBwZXIiLCJnZXROYXZpZ2F0aW9uQ29uZmlndXJhdGlvbiIsIm5hdkNvbmZpZyIsIk9iamVjdCIsImtleXMiLCJkYXRhTW9kZWxQYXRoIiwiZ2V0RGF0YU1vZGVsT2JqZWN0UGF0aCIsImNvbnRleHRQYXRoIiwiZ2V0Q29udGV4dFBhdGgiLCJuYXZDb25maWdGb3JDb250ZXh0UGF0aCIsInRhcmdldEVudGl0eVNldCIsInN0YXJ0aW5nRW50aXR5U2V0IiwidXBkYXRlTGlua2VkUHJvcGVydGllcyIsImZpbmRDb2x1bW5CeVBhdGgiLCJvUHJvcCIsInNVbml0IiwiZ2V0QXNzb2NpYXRlZEN1cnJlbmN5UHJvcGVydHkiLCJnZXRBc3NvY2lhdGVkVW5pdFByb3BlcnR5Iiwib1VuaXRDb2x1bW4iLCJkaXNwbGF5TW9kZSIsImdldERpc3BsYXlNb2RlIiwidGV4dEFubm90YXRpb24iLCJDb21tb24iLCJUZXh0IiwiaXNQYXRoRXhwcmVzc2lvbiIsIm9UZXh0Q29sdW1uIiwidGV4dEFycmFuZ2VtZW50IiwidGV4dFByb3BlcnR5IiwibW9kZSIsImNyZWF0ZVRhYmxlVmlzdWFsaXphdGlvbiIsImlzQ29uZGVuc2VkVGFibGVMYXlvdXRDb21wbGlhbnQiLCJ2aWV3Q29uZmlndXJhdGlvbiIsInRhYmxlTWFuaWZlc3RDb25maWciLCJnZXRUYWJsZU1hbmlmZXN0Q29uZmlndXJhdGlvbiIsInNwbGl0UGF0aCIsIm5hdmlnYXRpb25UYXJnZXRQYXRoIiwib3BlcmF0aW9uQXZhaWxhYmxlTWFwIiwiZ2V0T3BlcmF0aW9uQXZhaWxhYmxlTWFwIiwib1Zpc3VhbGl6YXRpb24iLCJWaXN1YWxpemF0aW9uVHlwZSIsIlRhYmxlIiwiZ2V0VGFibGVBbm5vdGF0aW9uQ29uZmlndXJhdGlvbiIsInJlbW92ZUR1cGxpY2F0ZUFjdGlvbnMiLCJlbmFibGVEYXRhU3RhdGVGaWx0ZXIiLCJnZXRUZW1wbGF0ZVR5cGUiLCJKU09OIiwic3RyaW5naWZ5Iiwib3BlcmF0aW9uQXZhaWxhYmxlUHJvcGVydGllcyIsImdldE9wZXJhdGlvbkF2YWlsYWJsZVByb3BlcnRpZXMiLCJjcmVhdGVEZWZhdWx0VGFibGVWaXN1YWxpemF0aW9uIiwiZ2V0Q29sdW1uc0Zyb21FbnRpdHlUeXBlIiwiZ2V0RW50aXR5VHlwZSIsImFkZFRvTWFwIiwia2V5IiwiZGF0YUZpZWxkIiwiJFR5cGUiLCJhY3Rpb25OYW1lIiwiQWN0aW9uIiwiaW5kZXhPZiIsIkRldGVybWluaW5nIiwiYWN0aW9uVGFyZ2V0IiwiQWN0aW9uVGFyZ2V0IiwiQ29yZSIsIk9wZXJhdGlvbkF2YWlsYWJsZSIsInBhcmFtZXRlcnMiLCJiaW5kaW5nUGFyYW1ldGVyRnVsbE5hbWUiLCJmdWxseVF1YWxpZmllZE5hbWUiLCJ0YXJnZXRFeHByZXNzaW9uIiwiYW5ub3RhdGlvbkV4cHJlc3Npb24iLCJiaW5kaW5nQ29udGV4dFBhdGhWaXNpdG9yIiwicHJvcGVydGllcyIsInByb3BlcnR5TmFtZSIsInNpemUiLCJ0aXRsZVByb3BlcnR5IiwiVUkiLCJIZWFkZXJJbmZvIiwiVGl0bGUiLCJWYWx1ZSIsIkFycmF5IiwiZnJvbSIsImpvaW4iLCJnZXRVSUhpZGRlbkV4cEZvckFjdGlvbnNSZXF1aXJpbmdDb250ZXh0IiwiY3VycmVudEVudGl0eVR5cGUiLCJjb250ZXh0RGF0YU1vZGVsT2JqZWN0UGF0aCIsImlzRW50aXR5U2V0IiwiYVVpSGlkZGVuUGF0aEV4cHJlc3Npb25zIiwiaXNCb3VuZCIsInNvdXJjZUVudGl0eVR5cGUiLCJSZXF1aXJlc0NvbnRleHQiLCJJbmxpbmUiLCJ2YWx1ZU9mIiwiSGlkZGVuIiwiZXF1YWwiLCJnZXRCaW5kaW5nRXhwRnJvbUNvbnRleHQiLCJzb3VyY2UiLCJzRXhwcmVzc2lvbiIsInZpc2libGUiLCJzUGF0aCIsInN1YnN0cmluZyIsImFTcGxpdFBhdGgiLCJzcGxpdCIsInNOYXZpZ2F0aW9uUGF0aCIsInRhcmdldE9iamVjdCIsIl90eXBlIiwicGFydG5lciIsImJpbmRpbmdFeHByZXNzaW9uIiwic2xpY2UiLCJjb25zdGFudCIsImhhc0JvdW5kQWN0aW9uc0Fsd2F5c1Zpc2libGVJblRvb2xCYXIiLCJzb21lIiwiaGFzQ3VzdG9tQWN0aW9uc0Fsd2F5c1Zpc2libGVJblRvb2xCYXIiLCJtYW5pZmVzdEFjdGlvbnMiLCJhY3Rpb25LZXkiLCJhY3Rpb24iLCJyZXF1aXJlc1NlbGVjdGlvbiIsInRvU3RyaW5nIiwiZ2V0VmlzaWJsZUV4cEZvckN1c3RvbUFjdGlvbnNSZXF1aXJpbmdDb250ZXh0IiwiYVZpc2libGVQYXRoRXhwcmVzc2lvbnMiLCJyZXNvbHZlQmluZGluZ1N0cmluZyIsImdldENhcGFiaWxpdHlSZXN0cmljdGlvbiIsImlzRGVsZXRhYmxlIiwiaXNQYXRoRGVsZXRhYmxlIiwiaXNVcGRhdGFibGUiLCJpc1BhdGhVcGRhdGFibGUiLCJpc0NvbnN0YW50IiwiZ2V0U2VsZWN0aW9uTW9kZSIsInRhcmdldENhcGFiaWxpdGllcyIsImlzRGVsZXRlQnV0dG9uVmlzaWJsZSIsIlNlbGVjdGlvbk1vZGUiLCJOb25lIiwidGFibGVNYW5pZmVzdFNldHRpbmdzIiwic2VsZWN0aW9uTW9kZSIsInRhYmxlU2V0dGluZ3MiLCJhSGlkZGVuQmluZGluZ0V4cHJlc3Npb25zIiwiYVZpc2libGVCaW5kaW5nRXhwcmVzc2lvbnMiLCJpc1BhcmVudERlbGV0YWJsZSIsInBhcmVudEVudGl0eVNldERlbGV0YWJsZSIsIlRlbXBsYXRlVHlwZSIsIk9iamVjdFBhZ2UiLCJjb21waWxlQmluZGluZyIsImlmRWxzZSIsIkF1dG8iLCJNdWx0aSIsImFuZCIsIm9yIiwiY29uY2F0IiwidGFibGVBY3Rpb24iLCJpc0RhdGFGaWVsZEZvckFjdGlvbkFic3RyYWN0IiwiS2V5SGVscGVyIiwiZ2VuZXJhdGVLZXlGcm9tRGF0YUZpZWxkIiwiQWN0aW9uVHlwZSIsIkRhdGFGaWVsZEZvckFjdGlvbiIsImFubm90YXRpb25QYXRoIiwiZ2V0RW50aXR5U2V0QmFzZWRBbm5vdGF0aW9uUGF0aCIsIm5vdCIsImdldFJlbGF0aXZlTW9kZWxQYXRoRnVuY3Rpb24iLCJEYXRhRmllbGRGb3JJbnRlbnRCYXNlZE5hdmlnYXRpb24iLCJEZWZhdWx0IiwiZ2V0SGlnaGxpZ2h0Um93QmluZGluZyIsImNyaXRpY2FsaXR5QW5ub3RhdGlvbiIsImlzRHJhZnRSb290IiwidGFyZ2V0RW50aXR5VHlwZSIsImRlZmF1bHRIaWdobGlnaHRSb3dEZWZpbml0aW9uIiwiTWVzc2FnZVR5cGUiLCJnZXRNZXNzYWdlVHlwZUZyb21Dcml0aWNhbGl0eVR5cGUiLCJEcmFmdCIsIklzTmV3T2JqZWN0IiwiSW5mb3JtYXRpb24iLCJmb3JtYXRSZXN1bHQiLCJ0YWJsZUZvcm1hdHRlcnMiLCJyb3dIaWdobGlnaHRpbmciLCJfZ2V0Q3JlYXRpb25CZWhhdmlvdXIiLCJ0YWJsZU1hbmlmZXN0Q29uZmlndXJhdGlvbiIsIm5hdmlnYXRpb24iLCJjcmVhdGUiLCJkZXRhaWwiLCJvdXRib3VuZCIsIm91dGJvdW5kRGV0YWlsIiwibmV3QWN0aW9uIiwidGFyZ2V0QW5ub3RhdGlvbnMiLCJnZXRFbnRpdHlTZXQiLCJEcmFmdFJvb3QiLCJOZXdBY3Rpb24iLCJTZXNzaW9uIiwiU3RpY2t5U2Vzc2lvblN1cHBvcnRlZCIsImNyZWF0aW9uTW9kZSIsIkNyZWF0aW9uTW9kZSIsIkNyZWF0aW9uUm93IiwiRXJyb3IiLCJyb3V0ZSIsImFwcGVuZCIsImNyZWF0ZUF0RW5kIiwibmF2aWdhdGVUb1RhcmdldCIsIk5ld1BhZ2UiLCJfZ2V0Um93Q29uZmlndXJhdGlvblByb3BlcnR5IiwidGFyZ2V0UGF0aCIsInByZXNzUHJvcGVydHkiLCJuYXZpZ2F0aW9uVGFyZ2V0IiwiY3JpdGljYWxpdHlQcm9wZXJ0eSIsImRpc3BsYXkiLCJ0YXJnZXQiLCJDcml0aWNhbGl0eSIsIkRyYWZ0Tm9kZSIsInJvd05hdmlnYXRlZEV4cHJlc3Npb24iLCJuYXZpZ2F0ZWRSb3ciLCJwcmVzcyIsInJvd05hdmlnYXRlZCIsImNvbHVtbnNUb0JlQ3JlYXRlZCIsIm5vblNvcnRhYmxlQ29sdW1ucyIsInRhYmxlVHlwZSIsInByb3BlcnR5IiwiZXhpc3RzIiwidGFyZ2V0VHlwZSIsInJlbGF0ZWRQcm9wZXJ0aWVzSW5mbyIsImNvbGxlY3RSZWxhdGVkUHJvcGVydGllcyIsInJlbGF0ZWRQcm9wZXJ0eU5hbWVzIiwiYWRkaXRpb25hbFByb3BlcnR5TmFtZXMiLCJhZGRpdGlvbmFsUHJvcGVydGllcyIsImNvbHVtbkluZm8iLCJnZXRDb2x1bW5EZWZpbml0aW9uRnJvbVByb3BlcnR5Iiwic2VtYW50aWNLZXlzIiwiZ2V0QW5ub3RhdGlvbnNCeVRlcm0iLCJvQ29sdW1uRHJhZnRJbmRpY2F0b3IiLCJnZXREZWZhdWx0RHJhZnRJbmRpY2F0b3JGb3JDb2x1bW4iLCJleHBvcnRTZXR0aW5ncyIsInRlbXBsYXRlIiwiZXhwb3J0U2V0dGluZ3NUZW1wbGF0ZSIsIndyYXAiLCJleHBvcnRTZXR0aW5nc1dyYXBwaW5nIiwiYWRkaXRpb25hbFByb3BlcnR5SW5mb3MiLCJmdWxsUHJvcGVydHlQYXRoIiwidXNlRGF0YUZpZWxkUHJlZml4IiwiYXZhaWxhYmxlRm9yQWRhcHRhdGlvbiIsInJlcGxhY2VTcGVjaWFsQ2hhcnMiLCJzZW1hbnRpY09iamVjdEFubm90YXRpb25QYXRoIiwiZ2V0U2VtYW50aWNPYmplY3RQYXRoIiwiaXNIaWRkZW4iLCJncm91cFBhdGgiLCJfc2xpY2VBdFNsYXNoIiwiaXNHcm91cCIsImlzRGF0YVBvaW50RmFrZVByb3BlcnR5IiwiZXhwb3J0VHlwZSIsIl9nZXRFeHBvcnREYXRhVHlwZSIsInNEYXRlSW5wdXRGb3JtYXQiLCJkYXRhVHlwZSIsImdldERhdGFGaWVsZERhdGFUeXBlIiwicHJvcGVydHlUeXBlQ29uZmlnIiwiZ2V0VHlwZUNvbmZpZyIsIm9UeXBlQ29uZmlnIiwiY2xhc3NOYW1lIiwib0Zvcm1hdE9wdGlvbnMiLCJvQ29uc3RyYWludHMiLCJjb25zdHJhaW50cyIsImdldFRhcmdldFZhbHVlT25EYXRhUG9pbnQiLCJpbnB1dEZvcm1hdCIsInNjYWxlIiwiZGVsaW1pdGVyIiwidHJ1ZVZhbHVlIiwiZmFsc2VWYWx1ZSIsImlzR3JvdXBhYmxlIiwiaXNQcm9wZXJ0eUdyb3VwYWJsZSIsIkFubm90YXRpb24iLCJsYWJlbCIsIl9nZXRMYWJlbCIsImdyb3VwTGFiZWwiLCJncm91cCIsInNlbWFudGljT2JqZWN0UGF0aCIsIkF2YWlsYWJpbGl0eVR5cGUiLCJBZGFwdGF0aW9uIiwiRGF0YUZpZWxkRGVmYXVsdCIsIlRhcmdldCIsIiR0YXJnZXQiLCJzb3J0YWJsZSIsImlzS2V5IiwiY2FzZVNlbnNpdGl2ZSIsImlzRmlsdGVyaW5nQ2FzZVNlbnNpdGl2ZSIsInR5cGVDb25maWciLCJ2aXN1YWxTZXR0aW5ncyIsIndpZHRoQ2FsY3VsYXRpb24iLCJfaXNWYWxpZENvbHVtbiIsIl9nZXRWaXNpYmxlRXhwcmVzc2lvbiIsImRhdGFGaWVsZE1vZGVsUGF0aCIsInJldHVybkV4cHJlc3Npb24iLCJwcm9wZXJ0eVZhbHVlIiwiaXNBbmFseXRpY2FsR3JvdXBIZWFkZXJFeHBhbmRlZCIsImlzQW5hbHl0aWNzIiwiSXNFeHBhbmRlZCIsImlzQW5hbHl0aWNhbExlYWYiLCJOb2RlTGV2ZWwiLCJleHByZXNzaW9uIiwiX2dldEZpZWxkR3JvdXBIaWRkZW5FeHByZXNzaW9ucyIsImRhdGFGaWVsZEdyb3VwIiwiZmllbGRGb3JtYXRPcHRpb25zIiwiYUZpZWxkR3JvdXBIaWRkZW5FeHByZXNzaW9ucyIsIkRhdGEiLCJpbm5lckRhdGFGaWVsZCIsImlzUHJvcGVydHkiLCJkYXRhRmllbGREZWZhdWx0IiwiTGFiZWwiLCJpc0RhdGFGaWVsZFR5cGVzIiwiX2NyZWF0ZVJlbGF0ZWRDb2x1bW5zIiwiZXhpc3RpbmdDb2x1bW5zIiwicmVsYXRlZENvbHVtbnMiLCJyZWxhdGVkUHJvcGVydHlOYW1lTWFwIiwiZ2V0QWJzb2x1dGVBbm5vdGF0aW9uUGF0aCIsInJlbGF0ZWRDb2x1bW4iLCJuZXdOYW1lIiwicHJvcGVydHlJbmZvIiwiX2dldEFubm90YXRpb25Db2x1bW5OYW1lIiwiX2dldFNob3dEYXRhRmllbGRzTGFiZWwiLCJmaWVsZEdyb3VwTmFtZSIsIm9Db2x1bW5zIiwiYUNvbHVtbktleXMiLCJzaG93RGF0YUZpZWxkc0xhYmVsIiwiX2dldFJlbGF0aXZlUGF0aCIsImlzTGFzdFNsYXNoIiwiaXNMYXN0UGFydCIsImlTbGFzaEluZGV4IiwibGFzdEluZGV4T2YiLCJfaXNDb2x1bW5Tb3J0YWJsZSIsInByb3BlcnR5UGF0aCIsImlzU29ydGFibGUiLCJmaWx0ZXJGdW5jdGlvbnMiLCJDYXBhYmlsaXRpZXMiLCJGaWx0ZXJGdW5jdGlvbnMiLCJnZXRFbnRpdHlDb250YWluZXIiLCJpc0FycmF5IiwiZ2V0RGVmYXVsdEZvcm1hdE9wdGlvbnNGb3JUYWJsZSIsInRleHRMaW5lc0VkaXQiLCJiU2VtYW50aWNLZXlGb3VuZCIsImFTZW1hbnRpY0tleVZhbHVlcyIsImkiLCJoYXNEcmFmdEluZGljYXRvciIsInNlbWFudGlja2V5cyIsImdldE5vblNvcnRhYmxlUHJvcGVydGllc1Jlc3RyaWN0aW9ucyIsImxpbmVJdGVtIiwiY29sbGVjdFJlbGF0ZWRQcm9wZXJ0aWVzUmVjdXJzaXZlbHkiLCJzTGFiZWwiLCJpc0ZpZWxkR3JvdXBDb2x1bW4iLCJmaWVsZEdyb3VwSGlkZGVuRXhwcmVzc2lvbnMiLCJ2aXN1YWxTZXR0aW5nc1RvQmVFeGNsdWRlZCIsImV4Y2x1ZGVQcm9wZXJ0aWVzIiwiRmllbGRHcm91cEhpZGRlbkV4cHJlc3Npb25zIiwiaXNEYXRhRmllbGRBbHdheXNIaWRkZW4iLCJIVE1MNSIsIkNzc0RlZmF1bHRzIiwiZXhwb3J0Q29udGFjdFByb3BlcnR5IiwiZXhwb3J0U2V0dGluZ3NDb250YWN0UHJvcGVydHkiLCJfZ2V0UHJvcGVydHlOYW1lcyIsIm1hdGNoZWRQcm9wZXJ0aWVzIiwicmVzb2x2ZVBhdGgiLCJfYXBwZW5kQ3VzdG9tVGVtcGxhdGUiLCJfZ2V0TWFuaWZlc3RPckRlZmF1bHRWYWx1ZSIsImRlZmF1bHRWYWx1ZSIsImlzQW5ub3RhdGlvbkNvbHVtbiIsImludGVybmFsQ29sdW1ucyIsIm1hbmlmZXN0Q29sdW1uIiwidmFsaWRhdGVLZXkiLCJpZCIsImhlYWRlciIsIkhvcml6b250YWxBbGlnbiIsIkJlZ2luIiwiU2xvdCIsInBvc2l0aW9uIiwiYW5jaG9yIiwicGxhY2VtZW50IiwiUGxhY2VtZW50IiwiQWZ0ZXIiLCJpc0FjdGlvbk5hdmlnYWJsZSIsImZpZWxkTGFiZWwiLCJnZXRQMTNuTW9kZSIsInZhcmlhbnRNYW5hZ2VtZW50IiwiZ2V0VmFyaWFudE1hbmFnZW1lbnQiLCJhUGVyc29uYWxpemF0aW9uIiwiYkFuYWx5dGljYWxUYWJsZSIsInBlcnNvbmFsaXphdGlvbiIsInNvcnQiLCJmaWx0ZXIiLCJhZ2dyZWdhdGUiLCJWYXJpYW50TWFuYWdlbWVudFR5cGUiLCJDb250cm9sIiwiZ2V0RGVsZXRlVmlzaWJsZSIsIm5hdmlnYXRpb25QYXRoIiwiaXNUYXJnZXREZWxldGFibGUiLCJjdXJyZW50RW50aXR5U2V0IiwiZGF0YU1vZGVsT2JqZWN0UGF0aCIsInZpc2l0ZWROYXZpZ2F0aW9uUGF0aHMiLCJuYXZpZ2F0aW9uUHJvcGVydGllcyIsIm5hdlByb3AiLCJpc0RlbGV0ZUhpZGRlbkV4cHJlc3Npb24iLCJEZWxldGVIaWRkZW4iLCJzaW5nbGV0b25QYXRoVmlzaXRvciIsImlzRGVsZXRlSGlkZGVuIiwiYklzU3RpY2t5U2Vzc2lvblN1cHBvcnRlZCIsImJJc0RyYWZ0Um9vdCIsImJJc0RyYWZ0Tm9kZSIsImJJc0RyYWZ0UGFyZW50RW50aXR5Rm9yQ29udGFpbm1lbnQiLCJjb250YWluc1RhcmdldCIsImhhc011bHRpcGxlVmlzdWFsaXphdGlvbnMiLCJBbmFseXRpY2FsTGlzdFBhZ2UiLCJMaXN0UmVwb3J0IiwiaXNCaW5kaW5nIiwiZ2V0RW5hYmxlbWVudE1hc3NFZGl0IiwiYk1hc3NFZGl0VmlzaWJsZSIsImlzUGFyZW50VXBkYXRhYmxlIiwiY3VycmVudEVudGl0eVJlc3RyaWN0aW9uIiwib0V4cHJlc3Npb24iLCJnZXRWaXNpYmlsaXR5TWFzc0VkaXQiLCJlbnRpdHlTZXQiLCJiVXBkYXRlSGlkZGVuIiwiVXBkYXRlSGlkZGVuIiwiYk1hc3NFZGl0RW5hYmxlZCIsImVuYWJsZU1hc3NFZGl0IiwiaVNlbGVjdGlvbkxpbWl0Iiwic2VsZWN0aW9uTGltaXQiLCJJc0VkaXRhYmxlIiwiZ2V0Q3JlYXRlVmlzaWJsZSIsImlzSW5zZXJ0YWJsZSIsImlzQ3JlYXRlSGlkZGVuIiwiQ3JlYXRlSGlkZGVuIiwibmV3QWN0aW9uTmFtZSIsInNob3dDcmVhdGVGb3JOZXdBY3Rpb24iLCJnZXRQYXN0ZUVuYWJsZWQiLCJjcmVhdGlvbkJlaGF2aW91ciIsInBhc3RlRW5hYmxlZEluTWFuaWZlc3QiLCJnZXRTb3J0Q29uZGl0aW9ucyIsIm5vblNvcnRhYmxlUHJvcGVydGllcyIsInNvcnRDb25kaXRpb25zIiwiU29ydE9yZGVyIiwic29ydGVycyIsImNvbmRpdGlvbnMiLCJjb25kaXRpb24iLCJjb25kaXRpb25Qcm9wZXJ0eSIsIlByb3BlcnR5IiwiaW5mb05hbWUiLCJjb252ZXJ0UHJvcGVydHlQYXRoc1RvSW5mb05hbWVzIiwiZGVzY2VuZGluZyIsIkRlc2NlbmRpbmciLCJwYXRocyIsImluZm9OYW1lcyIsImN1cnJlbnRQYXRoIiwiR3JvdXBCeSIsImFHcm91cEJ5IiwiYUdyb3VwTGV2ZWxzIiwiZ3JvdXBMZXZlbHMiLCJUb3RhbCIsImFUb3RhbHMiLCJ0aXRsZSIsIlR5cGVOYW1lUGx1cmFsIiwicGFnZU1hbmlmZXN0U2V0dGluZ3MiLCJoYXNBYnNvbHV0ZVBhdGgiLCJwMTNuTW9kZSIsIlRhYmxlSUQiLCJ0aHJlc2hvbGQiLCJNYXhJdGVtcyIsImlzUGF0aEluc2VydGFibGUiLCJpc1NlYXJjaGFibGUiLCJpc1BhdGhTZWFyY2hhYmxlIiwiZW50aXR5TmFtZSIsImNvbGxlY3Rpb24iLCJnZXRUYXJnZXRPYmplY3RQYXRoIiwicm93Iiwic2hvdyIsInBhc3RlIiwiZW5hYmxlUGFzdGUiLCJtYXNzRWRpdCIsImlzSW5EaXNwbGF5TW9kZSIsImF1dG9CaW5kT25Jbml0IiwicGFyZW50RW50aXR5RGVsZXRlRW5hYmxlZCIsInNlYXJjaGFibGUiLCJpc0NvbXBsZXhQcm9wZXJ0eSIsImV4cG9ydERhdGFUeXBlIiwidGVtcGxhdGVUeXBlIiwic3Vic3RyIiwiZ2V0U2VsZWN0aW9uVmFyaWFudENvbmZpZ3VyYXRpb24iLCJzZWxlY3Rpb25WYXJpYW50UGF0aCIsInJlc29sdmVkVGFyZ2V0IiwiZ2V0RW50aXR5VHlwZUFubm90YXRpb24iLCJzZWxlY3Rpb24iLCJwcm9wZXJ0eU5hbWVzIiwiU2VsZWN0T3B0aW9ucyIsInNlbGVjdE9wdGlvbiIsIlByb3BlcnR5TmFtZSIsIlByb3BlcnR5UGF0aCIsInRleHQiLCJjaGVja0NvbmRlbnNlZExheW91dCIsInF1aWNrU2VsZWN0aW9uVmFyaWFudCIsInF1aWNrRmlsdGVyUGF0aHMiLCJlbmFibGVFeHBvcnQiLCJmaWx0ZXJzIiwiZGlzYWJsZUFkZFJvd0J1dHRvbkZvckVtcHR5RGF0YSIsImN1c3RvbVZhbGlkYXRpb25GdW5jdGlvbiIsImNvbmRlbnNlZFRhYmxlTGF5b3V0IiwiaGlkZVRhYmxlVGl0bGUiLCJlbmFibGVGdWxsU2NyZWVuIiwibXVsdGlTZWxlY3RNb2RlIiwiZW5hYmxlQXV0b0NvbHVtbldpZHRoIiwiaXNDb25kZW5zZWRMYXlvdXRDb21wbGlhbnQiLCJxdWlja1ZhcmlhbnRTZWxlY3Rpb24iLCJxdWlja0ZpbHRlcnMiLCJzaG93Q291bnRzIiwiaXNEZXNrdG9wIiwiZ2V0RGlhZ25vc3RpY3MiLCJhZGRJc3N1ZSIsIklzc3VlQ2F0ZWdvcnkiLCJNYW5pZmVzdCIsIklzc3VlU2V2ZXJpdHkiLCJMb3ciLCJJc3N1ZVR5cGUiLCJGVUxMU0NSRUVOTU9ERV9OT1RfT05fTElTVFJFUE9SVCIsInNlbGVjdEFsbCIsInVzZUljb25UYWJCYXIiLCJoZWFkZXJWaXNpYmxlIiwidXNlQ29uZGVuc2VkVGFibGVMYXlvdXQiLCJzaG93Um93Q291bnQiLCJnZXRWaWV3Q29uZmlndXJhdGlvbiJdLCJtYXBwaW5ncyI6IjtBQUFBO0FBQ0E7QUFDQTs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7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akIsR0FFR25rQixnQkFBZ0IsQ0FBQ3VJLGVBQWpCLE9BQXVDLFlBQXZDLElBQXVEb2EsV0FIM0Q7QUFJQTs7QUFDRCxXQUFPO0FBQ055QixNQUFBQSxPQUFPLEVBQUVBLE9BREg7QUFFTnBmLE1BQUFBLElBQUksRUFBRTROLFNBRkE7QUFHTjZSLE1BQUFBLGdCQUFnQixFQUFFQSxnQkFIWjtBQUlOa0IsTUFBQUEsYUFBYSxFQUFFLEVBQUUxQixxQkFBcUIsSUFBSU8sY0FBM0IsQ0FKVDtBQUtOTCxNQUFBQSxZQUFZLEVBQUVBLFlBTFI7QUFNTi9TLE1BQUFBLFlBQVksRUFBRUEsWUFOUjtBQU9OTSxNQUFBQSxXQUFXLEVBQUVBLFdBUFA7QUFRTjJTLE1BQUFBLCtCQUErQixFQUFFQSwrQkFSM0I7QUFTTkMsTUFBQUEsd0JBQXdCLEVBQUVBLHdCQVRwQjtBQVVOc0IsTUFBQUEsdUJBQXVCLEVBQUVyQixvQkFBb0IsSUFBSTljLCtCQVYzQztBQVdOZ1ksTUFBQUEsY0FBYyxFQUFFQSxjQVhWO0FBWU5pRixNQUFBQSxlQUFlLEVBQUVBLGVBWlg7QUFhTi9CLE1BQUFBLFdBQVcsRUFBRUEsV0FiUDtBQWNOa0QsTUFBQUEsWUFBWSxFQUNYLEVBQUM5WCxhQUFELGFBQUNBLGFBQUQseUNBQUNBLGFBQWEsQ0FBRThXLHFCQUFoQixtREFBQyx1QkFBc0NFLFVBQXZDLEtBQXFELDZCQUFDL2tCLGdCQUFnQixDQUFDMkYsa0JBQWpCLEdBQXNDbWdCLG9CQUF0QyxFQUFELG9EQUFDLHdCQUE4RGYsVUFBL0QsQ0FmaEQ7QUFnQk54RixNQUFBQSxjQUFjLEVBQUV4UixhQUFGLGFBQUVBLGFBQUYsdUJBQUVBLGFBQWEsQ0FBRXdSLGNBaEJ6QjtBQWlCTm9GLE1BQUFBLHFCQUFxQixFQUFFQTtBQWpCakIsS0FBUDtBQW1CQSIsInNvdXJjZVJvb3QiOiIuIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHtcblx0Q3JpdGljYWxpdHlUeXBlLFxuXHREYXRhRmllbGQsXG5cdERhdGFGaWVsZEFic3RyYWN0VHlwZXMsXG5cdERhdGFGaWVsZEZvckFjdGlvbixcblx0RGF0YUZpZWxkRm9yQW5ub3RhdGlvbixcblx0RGF0YUZpZWxkRm9ySW50ZW50QmFzZWROYXZpZ2F0aW9uLFxuXHREYXRhRmllbGRUeXBlcyxcblx0RGF0YVBvaW50LFxuXHREYXRhUG9pbnRUeXBlVHlwZXMsXG5cdEVudW1WYWx1ZSxcblx0TGluZUl0ZW0sXG5cdFBhdGhBbm5vdGF0aW9uRXhwcmVzc2lvbixcblx0UHJlc2VudGF0aW9uVmFyaWFudFR5cGVUeXBlcyxcblx0UHJvcGVydHlBbm5vdGF0aW9uVmFsdWUsXG5cdFByb3BlcnR5UGF0aCxcblx0U2VsZWN0aW9uVmFyaWFudFR5cGUsXG5cdFNlbGVjdE9wdGlvblR5cGUsXG5cdFVJQW5ub3RhdGlvblR5cGVzXG59IGZyb20gXCJAc2FwLXV4L3ZvY2FidWxhcmllcy10eXBlc1wiO1xuaW1wb3J0IHtcblx0QWN0aW9uVHlwZSxcblx0QXZhaWxhYmlsaXR5VHlwZSxcblx0Q3JlYXRpb25Nb2RlLFxuXHRGb3JtYXRPcHRpb25zVHlwZSxcblx0SG9yaXpvbnRhbEFsaWduLFxuXHRNYW5pZmVzdFRhYmxlQ29sdW1uLFxuXHROYXZpZ2F0aW9uU2V0dGluZ3NDb25maWd1cmF0aW9uLFxuXHROYXZpZ2F0aW9uVGFyZ2V0Q29uZmlndXJhdGlvbixcblx0U2VsZWN0aW9uTW9kZSxcblx0VGFibGVDb2x1bW5TZXR0aW5ncyxcblx0VGFibGVNYW5pZmVzdENvbmZpZ3VyYXRpb24sXG5cdFRlbXBsYXRlVHlwZSxcblx0VmFyaWFudE1hbmFnZW1lbnRUeXBlLFxuXHRWaWV3UGF0aENvbmZpZ3VyYXRpb24sXG5cdFZpc3VhbGl6YXRpb25UeXBlXG59IGZyb20gXCIuLi8uLi9NYW5pZmVzdFNldHRpbmdzXCI7XG5pbXBvcnQgeyBFbnRpdHlUeXBlLCBQcm9wZXJ0eSB9IGZyb20gXCJAc2FwLXV4L2Fubm90YXRpb24tY29udmVydGVyXCI7XG5pbXBvcnQgeyBUYWJsZUlEIH0gZnJvbSBcIi4uLy4uL2hlbHBlcnMvSURcIjtcbmltcG9ydCB7XG5cdEFubm90YXRpb25BY3Rpb24sXG5cdEJhc2VBY3Rpb24sXG5cdEN1c3RvbUFjdGlvbixcblx0Z2V0QWN0aW9uc0Zyb21NYW5pZmVzdCxcblx0aXNBY3Rpb25OYXZpZ2FibGUsXG5cdHJlbW92ZUR1cGxpY2F0ZUFjdGlvbnNcbn0gZnJvbSBcInNhcC9mZS9jb3JlL2NvbnZlcnRlcnMvY29udHJvbHMvQ29tbW9uL0FjdGlvblwiO1xuaW1wb3J0IHsgQ29uZmlndXJhYmxlT2JqZWN0LCBDdXN0b21FbGVtZW50LCBpbnNlcnRDdXN0b21FbGVtZW50cywgUGxhY2VtZW50IH0gZnJvbSBcInNhcC9mZS9jb3JlL2NvbnZlcnRlcnMvaGVscGVycy9Db25maWd1cmFibGVPYmplY3RcIjtcbmltcG9ydCB7XG5cdGNvbGxlY3RSZWxhdGVkUHJvcGVydGllcyxcblx0Y29sbGVjdFJlbGF0ZWRQcm9wZXJ0aWVzUmVjdXJzaXZlbHksXG5cdENvbXBsZXhQcm9wZXJ0eUluZm8sXG5cdGdldERhdGFGaWVsZERhdGFUeXBlLFxuXHRnZXRTZW1hbnRpY09iamVjdFBhdGgsXG5cdGlzRGF0YUZpZWxkQWx3YXlzSGlkZGVuLFxuXHRpc0RhdGFGaWVsZEZvckFjdGlvbkFic3RyYWN0LFxuXHRpc0RhdGFGaWVsZFR5cGVzXG59IGZyb20gXCJzYXAvZmUvY29yZS9jb252ZXJ0ZXJzL2Fubm90YXRpb25zL0RhdGFGaWVsZFwiO1xuaW1wb3J0IHtcblx0YW5kLFxuXHRhbm5vdGF0aW9uRXhwcmVzc2lvbixcblx0QmluZGluZ0V4cHJlc3Npb24sXG5cdGJpbmRpbmdFeHByZXNzaW9uLFxuXHRCaW5kaW5nRXhwcmVzc2lvbkV4cHJlc3Npb24sXG5cdGNvbXBpbGVCaW5kaW5nLFxuXHRjb25zdGFudCxcblx0ZXF1YWwsXG5cdEV4cHJlc3Npb24sXG5cdEV4cHJlc3Npb25PclByaW1pdGl2ZSxcblx0Zm9ybWF0UmVzdWx0LFxuXHRpZkVsc2UsXG5cdGlzQmluZGluZyxcblx0aXNDb25zdGFudCxcblx0bm90LFxuXHRvcixcblx0cmVzb2x2ZUJpbmRpbmdTdHJpbmdcbn0gZnJvbSBcInNhcC9mZS9jb3JlL2hlbHBlcnMvQmluZGluZ0V4cHJlc3Npb25cIjtcbmltcG9ydCB7IERyYWZ0LCBiaW5kaW5nQ29udGV4dFBhdGhWaXNpdG9yLCBzaW5nbGV0b25QYXRoVmlzaXRvciwgVUkgfSBmcm9tIFwic2FwL2ZlL2NvcmUvY29udmVydGVycy9oZWxwZXJzL0JpbmRpbmdIZWxwZXJcIjtcbmltcG9ydCB7IEtleUhlbHBlciB9IGZyb20gXCJzYXAvZmUvY29yZS9jb252ZXJ0ZXJzL2hlbHBlcnMvS2V5XCI7XG5pbXBvcnQgdGFibGVGb3JtYXR0ZXJzIGZyb20gXCJzYXAvZmUvY29yZS9mb3JtYXR0ZXJzL1RhYmxlRm9ybWF0dGVyXCI7XG5pbXBvcnQgeyBNZXNzYWdlVHlwZSB9IGZyb20gXCJzYXAvZmUvY29yZS9mb3JtYXR0ZXJzL1RhYmxlRm9ybWF0dGVyVHlwZXNcIjtcbmltcG9ydCB7XG5cdERhdGFNb2RlbE9iamVjdFBhdGgsXG5cdGdldFRhcmdldE9iamVjdFBhdGgsXG5cdGlzUGF0aERlbGV0YWJsZSxcblx0aXNQYXRoU2VhcmNoYWJsZSxcblx0aXNQYXRoSW5zZXJ0YWJsZSxcblx0aXNQYXRoVXBkYXRhYmxlXG59IGZyb20gXCJzYXAvZmUvY29yZS90ZW1wbGF0aW5nL0RhdGFNb2RlbFBhdGhIZWxwZXJcIjtcbmltcG9ydCB7IHJlcGxhY2VTcGVjaWFsQ2hhcnMgfSBmcm9tIFwic2FwL2ZlL2NvcmUvaGVscGVycy9TdGFibGVJZEhlbHBlclwiO1xuaW1wb3J0IHsgSXNzdWVDYXRlZ29yeSwgSXNzdWVTZXZlcml0eSwgSXNzdWVUeXBlIH0gZnJvbSBcInNhcC9mZS9jb3JlL2NvbnZlcnRlcnMvaGVscGVycy9Jc3N1ZU1hbmFnZXJcIjtcblxuaW1wb3J0IE1hbmlmZXN0V3JhcHBlciBmcm9tIFwiLi4vLi4vTWFuaWZlc3RXcmFwcGVyXCI7XG5pbXBvcnQgQ29udmVydGVyQ29udGV4dCBmcm9tIFwiLi4vLi4vQ29udmVydGVyQ29udGV4dFwiO1xuaW1wb3J0IHtcblx0aXNQcm9wZXJ0eSxcblx0Z2V0QXNzb2NpYXRlZFVuaXRQcm9wZXJ0eSxcblx0Z2V0QXNzb2NpYXRlZEN1cnJlbmN5UHJvcGVydHksXG5cdGlzUGF0aEV4cHJlc3Npb24sXG5cdGdldFRhcmdldFZhbHVlT25EYXRhUG9pbnRcbn0gZnJvbSBcInNhcC9mZS9jb3JlL3RlbXBsYXRpbmcvUHJvcGVydHlIZWxwZXJcIjtcbmltcG9ydCB7IEFnZ3JlZ2F0aW9uSGVscGVyIH0gZnJvbSBcIi4uLy4uL2hlbHBlcnMvQWdncmVnYXRpb25cIjtcbmltcG9ydCB7IERpc3BsYXlNb2RlLCBnZXREaXNwbGF5TW9kZSwgZ2V0VHlwZUNvbmZpZyB9IGZyb20gXCJzYXAvZmUvY29yZS90ZW1wbGF0aW5nL1VJRm9ybWF0dGVyc1wiO1xuaW1wb3J0IHsgZ2V0TWVzc2FnZVR5cGVGcm9tQ3JpdGljYWxpdHlUeXBlIH0gZnJvbSBcIi4vQ3JpdGljYWxpdHlcIjtcbmltcG9ydCB7IEZpbHRlckZ1bmN0aW9ucyB9IGZyb20gXCJAc2FwLXV4L3ZvY2FidWxhcmllcy10eXBlcy9kaXN0L2dlbmVyYXRlZC9DYXBhYmlsaXRpZXNcIjtcbmltcG9ydCB7IGdldE5vblNvcnRhYmxlUHJvcGVydGllc1Jlc3RyaWN0aW9ucyB9IGZyb20gXCJzYXAvZmUvY29yZS90ZW1wbGF0aW5nL0VudGl0eVNldEhlbHBlclwiO1xuXG5leHBvcnQgdHlwZSBUYWJsZUFubm90YXRpb25Db25maWd1cmF0aW9uID0ge1xuXHRhdXRvQmluZE9uSW5pdDogYm9vbGVhbjtcblx0Y29sbGVjdGlvbjogc3RyaW5nO1xuXHR2YXJpYW50TWFuYWdlbWVudDogVmFyaWFudE1hbmFnZW1lbnRUeXBlO1xuXHRmaWx0ZXJJZD86IHN0cmluZztcblx0aWQ6IHN0cmluZztcblx0bmF2aWdhdGlvblBhdGg6IHN0cmluZztcblx0cDEzbk1vZGU/OiBzdHJpbmc7XG5cdHJvdz86IHtcblx0XHRhY3Rpb24/OiBzdHJpbmc7XG5cdFx0cHJlc3M/OiBzdHJpbmc7XG5cdFx0cm93SGlnaGxpZ2h0aW5nOiBCaW5kaW5nRXhwcmVzc2lvbjxNZXNzYWdlVHlwZT47XG5cdFx0cm93TmF2aWdhdGVkOiBCaW5kaW5nRXhwcmVzc2lvbjxib29sZWFuPjtcblx0fTtcblx0c2VsZWN0aW9uTW9kZTogc3RyaW5nIHwgdW5kZWZpbmVkO1xuXHRzaG93Pzoge1xuXHRcdGNyZWF0ZT86IHN0cmluZyB8IGJvb2xlYW47XG5cdFx0ZGVsZXRlPzogc3RyaW5nIHwgYm9vbGVhbjtcblx0XHRwYXN0ZT86IEJpbmRpbmdFeHByZXNzaW9uPGJvb2xlYW4+O1xuXHRcdG1hc3NFZGl0PzogeyB2aXNpYmxlOiBib29sZWFuIHwgc3RyaW5nOyBlbmFibGVkOiBib29sZWFuIHwgc3RyaW5nIH07XG5cdH07XG5cdGRpc3BsYXlNb2RlPzogYm9vbGVhbjtcblx0dGhyZXNob2xkOiBudW1iZXI7XG5cdGVudGl0eU5hbWU6IHN0cmluZztcblx0c29ydENvbmRpdGlvbnM/OiBzdHJpbmc7XG5cdGdyb3VwQ29uZGl0aW9ucz86IHN0cmluZztcblx0YWdncmVnYXRlQ29uZGl0aW9ucz86IHN0cmluZztcblxuXHQvKiogQ3JlYXRlIG5ldyBlbnRyaWVzICovXG5cdGNyZWF0ZTogQ3JlYXRlQmVoYXZpb3VyIHwgQ3JlYXRlQmVoYXZpb3VyRXh0ZXJuYWw7XG5cdHBhcmVudEVudGl0eURlbGV0ZUVuYWJsZWQ/OiBCaW5kaW5nRXhwcmVzc2lvbjxib29sZWFuPjtcblx0dGl0bGU6IHN0cmluZztcblx0c2VhcmNoYWJsZTogYm9vbGVhbjtcbn07XG5cbi8qKlxuICogTmV3IGVudHJpZXMgYXJlIGNyZWF0ZWQgd2l0aGluIHRoZSBhcHAgKGRlZmF1bHQgY2FzZSlcbiAqL1xudHlwZSBDcmVhdGVCZWhhdmlvdXIgPSB7XG5cdG1vZGU6IENyZWF0aW9uTW9kZTtcblx0YXBwZW5kOiBCb29sZWFuO1xuXHRuZXdBY3Rpb24/OiBzdHJpbmc7XG5cdG5hdmlnYXRlVG9UYXJnZXQ/OiBzdHJpbmc7XG59O1xuXG4vKipcbiAqIE5ldyBlbnRyaWVzIGFyZSBjcmVhdGVkIGJ5IG5hdmlnYXRpbmcgdG8gc29tZSB0YXJnZXRcbiAqL1xudHlwZSBDcmVhdGVCZWhhdmlvdXJFeHRlcm5hbCA9IHtcblx0bW9kZTogXCJFeHRlcm5hbFwiO1xuXHRvdXRib3VuZDogc3RyaW5nO1xuXHRvdXRib3VuZERldGFpbDogTmF2aWdhdGlvblRhcmdldENvbmZpZ3VyYXRpb25bXCJvdXRib3VuZERldGFpbFwiXTtcblx0bmF2aWdhdGlvblNldHRpbmdzOiBOYXZpZ2F0aW9uU2V0dGluZ3NDb25maWd1cmF0aW9uO1xufTtcblxuZXhwb3J0IHR5cGUgVGFibGVDYXBhYmlsaXR5UmVzdHJpY3Rpb24gPSB7XG5cdGlzRGVsZXRhYmxlOiBib29sZWFuO1xuXHRpc1VwZGF0YWJsZTogYm9vbGVhbjtcbn07XG5cbmV4cG9ydCB0eXBlIFRhYmxlRmlsdGVyc0NvbmZpZ3VyYXRpb24gPSB7XG5cdGVuYWJsZWQ/OiBzdHJpbmcgfCBib29sZWFuO1xuXHRwYXRoczogW1xuXHRcdHtcblx0XHRcdGFubm90YXRpb25QYXRoOiBzdHJpbmc7XG5cdFx0fVxuXHRdO1xuXHRzaG93Q291bnRzPzogYm9vbGVhbjtcbn07XG5cbmV4cG9ydCB0eXBlIFNlbGVjdGlvblZhcmlhbnRDb25maWd1cmF0aW9uID0ge1xuXHRwcm9wZXJ0eU5hbWVzOiBzdHJpbmdbXTtcblx0dGV4dD86IHN0cmluZztcbn07XG5cbmV4cG9ydCB0eXBlIFRhYmxlQ29udHJvbENvbmZpZ3VyYXRpb24gPSB7XG5cdGNyZWF0ZUF0RW5kOiBib29sZWFuO1xuXHRjcmVhdGlvbk1vZGU6IENyZWF0aW9uTW9kZTtcblx0ZGlzYWJsZUFkZFJvd0J1dHRvbkZvckVtcHR5RGF0YTogYm9vbGVhbjtcblx0Y3VzdG9tVmFsaWRhdGlvbkZ1bmN0aW9uOiBzdHJpbmcgfCB1bmRlZmluZWQ7XG5cdHVzZUNvbmRlbnNlZFRhYmxlTGF5b3V0OiBib29sZWFuO1xuXHRlbmFibGVFeHBvcnQ6IGJvb2xlYW47XG5cdGhlYWRlclZpc2libGU6IGJvb2xlYW47XG5cdGZpbHRlcnM/OiBSZWNvcmQ8c3RyaW5nLCBUYWJsZUZpbHRlcnNDb25maWd1cmF0aW9uPjtcblx0dHlwZTogVGFibGVUeXBlO1xuXHRzZWxlY3RBbGw/OiBib29sZWFuO1xuXHRzZWxlY3Rpb25MaW1pdDogbnVtYmVyO1xuXHRtdWx0aVNlbGVjdE1vZGU6IHN0cmluZyB8IHVuZGVmaW5lZDtcblx0ZW5hYmxlUGFzdGU6IGJvb2xlYW47XG5cdGVuYWJsZUZ1bGxTY3JlZW46IGJvb2xlYW47XG5cdHNob3dSb3dDb3VudDogYm9vbGVhbjtcblx0ZW5hYmxlTWFzc0VkaXQ6IGJvb2xlYW4gfCB1bmRlZmluZWQ7XG5cdGVuYWJsZUF1dG9Db2x1bW5XaWR0aDogYm9vbGVhbjtcbn07XG5cbmV4cG9ydCB0eXBlIFRhYmxlVHlwZSA9IFwiR3JpZFRhYmxlXCIgfCBcIlJlc3BvbnNpdmVUYWJsZVwiIHwgXCJBbmFseXRpY2FsVGFibGVcIjtcblxuZW51bSBDb2x1bW5UeXBlIHtcblx0RGVmYXVsdCA9IFwiRGVmYXVsdFwiLCAvLyBEZWZhdWx0IFR5cGVcblx0QW5ub3RhdGlvbiA9IFwiQW5ub3RhdGlvblwiLFxuXHRTbG90ID0gXCJTbG90XCJcbn1cblxuZXhwb3J0IHR5cGUgQmFzZVRhYmxlQ29sdW1uID0gQ29uZmlndXJhYmxlT2JqZWN0ICYge1xuXHRpZDogc3RyaW5nO1xuXHR3aWR0aD86IHN0cmluZztcblx0bmFtZTogc3RyaW5nO1xuXHRhdmFpbGFiaWxpdHk/OiBBdmFpbGFiaWxpdHlUeXBlO1xuXHR0eXBlOiBDb2x1bW5UeXBlOyAvL09yaWdpbiBvZiB0aGUgc291cmNlIHdoZXJlIHdlIGFyZSBnZXR0aW5nIHRoZSB0ZW1wbGF0ZWQgaW5mb3JtYXRpb24gZnJvbSxcblx0aXNOYXZpZ2FibGU/OiBib29sZWFuO1xuXHRzZXR0aW5ncz86IFRhYmxlQ29sdW1uU2V0dGluZ3M7XG5cdHNlbWFudGljT2JqZWN0UGF0aD86IHN0cmluZztcblx0cHJvcGVydHlJbmZvcz86IHN0cmluZ1tdO1xuXHRjYXNlU2Vuc2l0aXZlPzogYm9vbGVhbjtcblx0c29ydGFibGU6IGJvb2xlYW47XG5cdGhvcml6b250YWxBbGlnbj86IEhvcml6b250YWxBbGlnbjtcblx0Zm9ybWF0T3B0aW9uczogRm9ybWF0T3B0aW9uc1R5cGU7XG59O1xuXG5leHBvcnQgdHlwZSBDdXN0b21UYWJsZUNvbHVtbiA9IEJhc2VUYWJsZUNvbHVtbiAmIHtcblx0aGVhZGVyPzogc3RyaW5nO1xuXHR0ZW1wbGF0ZTogc3RyaW5nO1xufTtcblxuZXhwb3J0IHR5cGUgQW5ub3RhdGlvblRhYmxlQ29sdW1uID0gQmFzZVRhYmxlQ29sdW1uICYge1xuXHRhbm5vdGF0aW9uUGF0aDogc3RyaW5nO1xuXHRyZWxhdGl2ZVBhdGg6IHN0cmluZztcblx0bGFiZWw/OiBzdHJpbmc7XG5cdGdyb3VwTGFiZWw/OiBzdHJpbmc7XG5cdGdyb3VwPzogc3RyaW5nO1xuXHRpc0dyb3VwYWJsZT86IGJvb2xlYW47XG5cdEZpZWxkR3JvdXBIaWRkZW5FeHByZXNzaW9ucz86IEJpbmRpbmdFeHByZXNzaW9uPHN0cmluZz47XG5cdHNob3dEYXRhRmllbGRzTGFiZWw/OiBib29sZWFuO1xuXHRpc0tleT86IGJvb2xlYW47XG5cdHVuaXQ/OiBzdHJpbmc7XG5cdGV4cG9ydFNldHRpbmdzPzoge1xuXHRcdHRlbXBsYXRlPzogc3RyaW5nO1xuXHRcdGxhYmVsPzogc3RyaW5nO1xuXHRcdGZpZWxkTGFiZWw/OiBzdHJpbmc7XG5cdFx0d3JhcD86IGJvb2xlYW47XG5cdFx0dHlwZT86IHN0cmluZztcblx0XHRpbnB1dEZvcm1hdD86IHN0cmluZztcblx0XHRmb3JtYXQ/OiBzdHJpbmc7XG5cdFx0c2NhbGU/OiBudW1iZXI7XG5cdFx0ZGVsaW1pdGVyPzogYm9vbGVhbjtcblx0XHR0cnVlVmFsdWU/OiBib29sZWFuO1xuXHRcdGZhbHNlVmFsdWU/OiBib29sZWFuO1xuXHR9O1xuXHRpc0RhdGFQb2ludEZha2VUYXJnZXRQcm9wZXJ0eT86IGJvb2xlYW47XG5cdHRleHRBcnJhbmdlbWVudD86IHtcblx0XHR0ZXh0UHJvcGVydHk6IHN0cmluZztcblx0XHRtb2RlOiBEaXNwbGF5TW9kZTtcblx0fTtcblx0ZXhwb3J0Q29udGFjdFByb3BlcnR5Pzogc3RyaW5nO1xuXHRhZGRpdGlvbmFsUHJvcGVydHlJbmZvcz86IHN0cmluZ1tdO1xuXHR2aXN1YWxTZXR0aW5ncz86IFZpc3VhbFNldHRpbmdzO1xuXHR0eXBlQ29uZmlnPzogb2JqZWN0O1xufTtcblxuZXhwb3J0IHR5cGUgVmlzdWFsU2V0dGluZ3MgPSB7XG5cdHdpZHRoQ2FsY3VsYXRpb24/OiBXaWR0aENhbGN1bGF0aW9uO1xufTtcblxuZXhwb3J0IHR5cGUgV2lkdGhDYWxjdWxhdGlvbiA9IG51bGwgfCB7XG5cdG1pbldpZHRoPzogbnVtYmVyO1xuXHRtYXhXaWR0aD86IG51bWJlcjtcblx0ZGVmYXVsdFdpZHRoPzogbnVtYmVyO1xuXHRpbmNsdWRlTGFiZWw/OiBib29sZWFuO1xuXHRnYXA/OiBudW1iZXI7XG5cdC8vIG9ubHkgcmVsZXZhbnQgZm9yIGNvbXBsZXggdHlwZXNcblx0ZXhjbHVkZVByb3BlcnRpZXM/OiBzdHJpbmcgfCBzdHJpbmdbXTtcblx0dmVydGljYWxBcnJhbmdlbWVudD86IGJvb2xlYW47XG59O1xuXG5leHBvcnQgdHlwZSBUYWJsZUNvbHVtbiA9IEN1c3RvbVRhYmxlQ29sdW1uIHwgQW5ub3RhdGlvblRhYmxlQ29sdW1uO1xuXG5leHBvcnQgdHlwZSBDdXN0b21Db2x1bW4gPSBDdXN0b21FbGVtZW50PFRhYmxlQ29sdW1uPjtcblxuZXhwb3J0IHR5cGUgQWdncmVnYXRlRGF0YSA9IHtcblx0ZGVmYXVsdEFnZ3JlZ2F0ZToge1xuXHRcdGNvbnRleHREZWZpbmluZ1Byb3BlcnRpZXM/OiBzdHJpbmdbXTtcblx0fTtcblx0cmVsYXRpdmVQYXRoOiBzdHJpbmc7XG59O1xuXG5leHBvcnQgdHlwZSBUYWJsZVZpc3VhbGl6YXRpb24gPSB7XG5cdHR5cGU6IFZpc3VhbGl6YXRpb25UeXBlLlRhYmxlO1xuXHRhbm5vdGF0aW9uOiBUYWJsZUFubm90YXRpb25Db25maWd1cmF0aW9uO1xuXHRjb250cm9sOiBUYWJsZUNvbnRyb2xDb25maWd1cmF0aW9uO1xuXHRjb2x1bW5zOiBUYWJsZUNvbHVtbltdO1xuXHRhY3Rpb25zOiBCYXNlQWN0aW9uW107XG5cdGFnZ3JlZ2F0ZXM/OiBSZWNvcmQ8c3RyaW5nLCBBZ2dyZWdhdGVEYXRhPjtcblx0ZW5hYmxlQW5hbHl0aWNzPzogYm9vbGVhbjtcblx0ZW5hYmxlRGF0YVN0YXRlRmlsdGVyOiBib29sZWFuO1xuXHRvcGVyYXRpb25BdmFpbGFibGVNYXA6IHN0cmluZztcblx0b3BlcmF0aW9uQXZhaWxhYmxlUHJvcGVydGllczogc3RyaW5nO1xufTtcblxudHlwZSBTb3J0ZXJUeXBlID0ge1xuXHRuYW1lOiBzdHJpbmc7XG5cdGRlc2NlbmRpbmc6IGJvb2xlYW47XG59O1xuXG4vKipcbiAqIFJldHVybnMgYW4gYXJyYXkgb2YgYWxsIGFubm90YXRpb24tYmFzZWQgYW5kIG1hbmlmZXN0LWJhc2VkIHRhYmxlIGFjdGlvbnMuXG4gKlxuICogQHBhcmFtIHtMaW5lSXRlbX0gbGluZUl0ZW1Bbm5vdGF0aW9uXG4gKiBAcGFyYW0ge3N0cmluZ30gdmlzdWFsaXphdGlvblBhdGhcbiAqIEBwYXJhbSB7Q29udmVydGVyQ29udGV4dH0gY29udmVydGVyQ29udGV4dFxuICogQHBhcmFtIHtOYXZpZ2F0aW9uU2V0dGluZ3NDb25maWd1cmF0aW9ufSBuYXZpZ2F0aW9uU2V0dGluZ3NcbiAqIEByZXR1cm5zIHtCYXNlQWN0aW9ufSBUaGUgY29tcGxldGUgdGFibGUgYWN0aW9uc1xuICovXG5leHBvcnQgZnVuY3Rpb24gZ2V0VGFibGVBY3Rpb25zKFxuXHRsaW5lSXRlbUFubm90YXRpb246IExpbmVJdGVtLFxuXHR2aXN1YWxpemF0aW9uUGF0aDogc3RyaW5nLFxuXHRjb252ZXJ0ZXJDb250ZXh0OiBDb252ZXJ0ZXJDb250ZXh0LFxuXHRuYXZpZ2F0aW9uU2V0dGluZ3M/OiBOYXZpZ2F0aW9uU2V0dGluZ3NDb25maWd1cmF0aW9uXG4pOiBCYXNlQWN0aW9uW10ge1xuXHRjb25zdCBhVGFibGVBY3Rpb25zID0gZ2V0VGFibGVBbm5vdGF0aW9uQWN0aW9ucyhsaW5lSXRlbUFubm90YXRpb24sIHZpc3VhbGl6YXRpb25QYXRoLCBjb252ZXJ0ZXJDb250ZXh0KTtcblx0Y29uc3QgYUFubm90YXRpb25BY3Rpb25zID0gYVRhYmxlQWN0aW9ucy50YWJsZUFjdGlvbnM7XG5cdGNvbnN0IGFIaWRkZW5BY3Rpb25zID0gYVRhYmxlQWN0aW9ucy5oaWRkZW5UYWJsZUFjdGlvbnM7XG5cdHJldHVybiBpbnNlcnRDdXN0b21FbGVtZW50cyhcblx0XHRhQW5ub3RhdGlvbkFjdGlvbnMsXG5cdFx0Z2V0QWN0aW9uc0Zyb21NYW5pZmVzdChcblx0XHRcdGNvbnZlcnRlckNvbnRleHQuZ2V0TWFuaWZlc3RDb250cm9sQ29uZmlndXJhdGlvbih2aXN1YWxpemF0aW9uUGF0aCkuYWN0aW9ucyxcblx0XHRcdGNvbnZlcnRlckNvbnRleHQsXG5cdFx0XHRhQW5ub3RhdGlvbkFjdGlvbnMsXG5cdFx0XHRuYXZpZ2F0aW9uU2V0dGluZ3MsXG5cdFx0XHR0cnVlLFxuXHRcdFx0YUhpZGRlbkFjdGlvbnNcblx0XHQpLFxuXHRcdHtcblx0XHRcdGlzTmF2aWdhYmxlOiBcIm92ZXJ3cml0ZVwiLFxuXHRcdFx0ZW5hYmxlT25TZWxlY3Q6IFwib3ZlcndyaXRlXCIsXG5cdFx0XHRlbmFibGVBdXRvU2Nyb2xsOiBcIm92ZXJ3cml0ZVwiLFxuXHRcdFx0ZW5hYmxlZDogXCJvdmVyd3JpdGVcIixcblx0XHRcdGRlZmF1bHRWYWx1ZXNFeHRlbnNpb25GdW5jdGlvbjogXCJvdmVyd3JpdGVcIlxuXHRcdH1cblx0KTtcbn1cblxuLyoqXG4gKiBSZXR1cm5zIGFuIGFycmF5IG9mIGFsbCBjb2x1bW5zLCBhbm5vdGF0aW9uLWJhc2VkIGFzIHdlbGwgYXMgbWFuaWZlc3QgYmFzZWQuXG4gKiBUaGV5IGFyZSBzb3J0ZWQgYW5kIHNvbWUgcHJvcGVydGllcyBjYW4gYmUgb3ZlcndyaXR0ZW4gdmlhIHRoZSBtYW5pZmVzdCAoY2hlY2sgb3V0IHRoZSBrZXlzIHRoYXQgY2FuIGJlIG92ZXJ3cml0dGVuKS5cbiAqXG4gKiBAcGFyYW0ge0xpbmVJdGVtfSBsaW5lSXRlbUFubm90YXRpb24gQ29sbGVjdGlvbiBvZiBkYXRhIGZpZWxkcyBmb3IgcmVwcmVzZW50YXRpb24gaW4gYSB0YWJsZSBvciBsaXN0XG4gKiBAcGFyYW0ge3N0cmluZ30gdmlzdWFsaXphdGlvblBhdGhcbiAqIEBwYXJhbSB7Q29udmVydGVyQ29udGV4dH0gY29udmVydGVyQ29udGV4dFxuICogQHBhcmFtIHtOYXZpZ2F0aW9uU2V0dGluZ3NDb25maWd1cmF0aW9ufSBuYXZpZ2F0aW9uU2V0dGluZ3NcbiAqIEByZXR1cm5zIHtUYWJsZUNvbHVtbltdfSBSZXR1cm5zIGFsbCB0YWJsZSBjb2x1bW5zIHRoYXQgc2hvdWxkIGJlIGF2YWlsYWJsZSwgcmVnYXJkbGVzcyBvZiB0ZW1wbGF0aW5nIG9yIHBlcnNvbmFsaXphdGlvbiBvciB0aGVpciBvcmlnaW5cbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGdldFRhYmxlQ29sdW1ucyhcblx0bGluZUl0ZW1Bbm5vdGF0aW9uOiBMaW5lSXRlbSxcblx0dmlzdWFsaXphdGlvblBhdGg6IHN0cmluZyxcblx0Y29udmVydGVyQ29udGV4dDogQ29udmVydGVyQ29udGV4dCxcblx0bmF2aWdhdGlvblNldHRpbmdzPzogTmF2aWdhdGlvblNldHRpbmdzQ29uZmlndXJhdGlvblxuKTogVGFibGVDb2x1bW5bXSB7XG5cdGNvbnN0IGFubm90YXRpb25Db2x1bW5zID0gZ2V0Q29sdW1uc0Zyb21Bbm5vdGF0aW9ucyhsaW5lSXRlbUFubm90YXRpb24sIHZpc3VhbGl6YXRpb25QYXRoLCBjb252ZXJ0ZXJDb250ZXh0KTtcblx0Y29uc3QgbWFuaWZlc3RDb2x1bW5zID0gZ2V0Q29sdW1uc0Zyb21NYW5pZmVzdChcblx0XHRjb252ZXJ0ZXJDb250ZXh0LmdldE1hbmlmZXN0Q29udHJvbENvbmZpZ3VyYXRpb24odmlzdWFsaXphdGlvblBhdGgpLmNvbHVtbnMsXG5cdFx0YW5ub3RhdGlvbkNvbHVtbnMgYXMgQW5ub3RhdGlvblRhYmxlQ29sdW1uW10sXG5cdFx0Y29udmVydGVyQ29udGV4dCxcblx0XHRjb252ZXJ0ZXJDb250ZXh0LmdldEFubm90YXRpb25FbnRpdHlUeXBlKGxpbmVJdGVtQW5ub3RhdGlvbiksXG5cdFx0bmF2aWdhdGlvblNldHRpbmdzXG5cdCk7XG5cblx0cmV0dXJuIGluc2VydEN1c3RvbUVsZW1lbnRzKGFubm90YXRpb25Db2x1bW5zLCBtYW5pZmVzdENvbHVtbnMsIHtcblx0XHR3aWR0aDogXCJvdmVyd3JpdGVcIixcblx0XHRpc05hdmlnYWJsZTogXCJvdmVyd3JpdGVcIixcblx0XHRhdmFpbGFiaWxpdHk6IFwib3ZlcndyaXRlXCIsXG5cdFx0c2V0dGluZ3M6IFwib3ZlcndyaXRlXCIsXG5cdFx0aG9yaXpvbnRhbEFsaWduOiBcIm92ZXJ3cml0ZVwiLFxuXHRcdGZvcm1hdE9wdGlvbnM6IFwib3ZlcndyaXRlXCJcblx0fSk7XG59XG5cbi8qKlxuICogUmV0cmlldmUgdGhlIGN1c3RvbSBhZ2dyZWdhdGlvbiBkZWZpbml0aW9ucyBmcm9tIHRoZSBlbnRpdHlUeXBlLlxuICpcbiAqIEBwYXJhbSBlbnRpdHlUeXBlIFRoZSB0YXJnZXQgZW50aXR5IHR5cGUuXG4gKiBAcGFyYW0gdGFibGVDb2x1bW5zIFRoZSBhcnJheSBvZiBjb2x1bW5zIGZvciB0aGUgZW50aXR5IHR5cGUuXG4gKiBAcGFyYW0gY29udmVydGVyQ29udGV4dCBUaGUgY29udmVydGVyIGNvbnRleHQuXG4gKiBAcmV0dXJucyBUaGUgYWdncmVnYXRlIGRlZmluaXRpb25zIGZyb20gdGhlIGVudGl0eVR5cGUsIG9yIHVuZGVmaW5lZCBpZiB0aGUgZW50aXR5IGRvZXNuJ3Qgc3VwcG9ydCBhbmFseXRpY2FsIHF1ZXJpZXMuXG4gKi9cbmV4cG9ydCBjb25zdCBnZXRBZ2dyZWdhdGVEZWZpbml0aW9uc0Zyb21FbnRpdHlUeXBlID0gZnVuY3Rpb24oXG5cdGVudGl0eVR5cGU6IEVudGl0eVR5cGUsXG5cdHRhYmxlQ29sdW1uczogVGFibGVDb2x1bW5bXSxcblx0Y29udmVydGVyQ29udGV4dDogQ29udmVydGVyQ29udGV4dFxuKTogUmVjb3JkPHN0cmluZywgQWdncmVnYXRlRGF0YT4gfCB1bmRlZmluZWQge1xuXHRjb25zdCBhZ2dyZWdhdGlvbkhlbHBlciA9IG5ldyBBZ2dyZWdhdGlvbkhlbHBlcihlbnRpdHlUeXBlLCBjb252ZXJ0ZXJDb250ZXh0KTtcblxuXHRmdW5jdGlvbiBmaW5kQ29sdW1uRnJvbVBhdGgocGF0aDogc3RyaW5nKTogVGFibGVDb2x1bW4gfCB1bmRlZmluZWQge1xuXHRcdHJldHVybiB0YWJsZUNvbHVtbnMuZmluZChjb2x1bW4gPT4ge1xuXHRcdFx0Y29uc3QgYW5ub3RhdGlvbkNvbHVtbiA9IGNvbHVtbiBhcyBBbm5vdGF0aW9uVGFibGVDb2x1bW47XG5cdFx0XHRyZXR1cm4gYW5ub3RhdGlvbkNvbHVtbi5wcm9wZXJ0eUluZm9zID09PSB1bmRlZmluZWQgJiYgYW5ub3RhdGlvbkNvbHVtbi5yZWxhdGl2ZVBhdGggPT09IHBhdGg7XG5cdFx0fSk7XG5cdH1cblxuXHRpZiAoIWFnZ3JlZ2F0aW9uSGVscGVyLmlzQW5hbHl0aWNzU3VwcG9ydGVkKCkpIHtcblx0XHRyZXR1cm4gdW5kZWZpbmVkO1xuXHR9XG5cblx0Ly8gS2VlcCBhIHNldCBvZiBhbGwgY3VycmVuY3kvdW5pdCBwcm9wZXJ0aWVzLCBhcyB3ZSBkb24ndCB3YW50IHRvIGNvbnNpZGVyIHRoZW0gYXMgYWdncmVnYXRlc1xuXHQvLyBUaGV5IGFyZSBhZ2dyZWdhdGVzIGZvciB0ZWNobmljYWwgcmVhc29ucyAodG8gbWFuYWdlIG11bHRpLXVuaXRzIHNpdHVhdGlvbnMpIGJ1dCBpdCBkb2Vzbid0IG1ha2Ugc2Vuc2UgZnJvbSBhIHVzZXIgc3RhbmRwb2ludFxuXHRjb25zdCBtQ3VycmVuY3lPclVuaXRQcm9wZXJ0aWVzID0gbmV3IFNldCgpO1xuXHR0YWJsZUNvbHVtbnMuZm9yRWFjaChvQ29sdW1uID0+IHtcblx0XHRjb25zdCBvVGFibGVDb2x1bW4gPSBvQ29sdW1uIGFzIEFubm90YXRpb25UYWJsZUNvbHVtbjtcblx0XHRpZiAob1RhYmxlQ29sdW1uLnVuaXQpIHtcblx0XHRcdG1DdXJyZW5jeU9yVW5pdFByb3BlcnRpZXMuYWRkKG9UYWJsZUNvbHVtbi51bml0KTtcblx0XHR9XG5cdH0pO1xuXG5cdGNvbnN0IGFDdXN0b21BZ2dyZWdhdGVBbm5vdGF0aW9ucyA9IGFnZ3JlZ2F0aW9uSGVscGVyLmdldEN1c3RvbUFnZ3JlZ2F0ZURlZmluaXRpb25zKCk7XG5cdGNvbnN0IG1SYXdEZWZpbml0aW9uczogUmVjb3JkPHN0cmluZywgc3RyaW5nW10+ID0ge307XG5cblx0YUN1c3RvbUFnZ3JlZ2F0ZUFubm90YXRpb25zLmZvckVhY2goYW5ub3RhdGlvbiA9PiB7XG5cdFx0Y29uc3Qgb0FnZ3JlZ2F0ZWRQcm9wZXJ0eSA9IGFnZ3JlZ2F0aW9uSGVscGVyLl9lbnRpdHlUeXBlLmVudGl0eVByb3BlcnRpZXMuZmluZChvUHJvcGVydHkgPT4ge1xuXHRcdFx0cmV0dXJuIG9Qcm9wZXJ0eS5uYW1lID09PSBhbm5vdGF0aW9uLnF1YWxpZmllcjtcblx0XHR9KTtcblxuXHRcdGlmIChvQWdncmVnYXRlZFByb3BlcnR5KSB7XG5cdFx0XHRjb25zdCBhQ29udGV4dERlZmluaW5nUHJvcGVydGllcyA9IGFubm90YXRpb24uYW5ub3RhdGlvbnM/LkFnZ3JlZ2F0aW9uPy5Db250ZXh0RGVmaW5pbmdQcm9wZXJ0aWVzO1xuXHRcdFx0bVJhd0RlZmluaXRpb25zW29BZ2dyZWdhdGVkUHJvcGVydHkubmFtZV0gPSBhQ29udGV4dERlZmluaW5nUHJvcGVydGllc1xuXHRcdFx0XHQ/IGFDb250ZXh0RGVmaW5pbmdQcm9wZXJ0aWVzLm1hcChvQ3R4RGVmUHJvcGVydHkgPT4ge1xuXHRcdFx0XHRcdFx0cmV0dXJuIG9DdHhEZWZQcm9wZXJ0eS52YWx1ZTtcblx0XHRcdFx0ICB9KVxuXHRcdFx0XHQ6IFtdO1xuXHRcdH1cblx0fSk7XG5cdGNvbnN0IG1SZXN1bHQ6IFJlY29yZDxzdHJpbmcsIEFnZ3JlZ2F0ZURhdGE+ID0ge307XG5cblx0dGFibGVDb2x1bW5zLmZvckVhY2gob0NvbHVtbiA9PiB7XG5cdFx0Y29uc3Qgb1RhYmxlQ29sdW1uID0gb0NvbHVtbiBhcyBBbm5vdGF0aW9uVGFibGVDb2x1bW47XG5cdFx0aWYgKG9UYWJsZUNvbHVtbi5wcm9wZXJ0eUluZm9zID09PSB1bmRlZmluZWQgJiYgb1RhYmxlQ29sdW1uLnJlbGF0aXZlUGF0aCkge1xuXHRcdFx0Y29uc3QgYVJhd0NvbnRleHREZWZpbmluZ1Byb3BlcnRpZXMgPSBtUmF3RGVmaW5pdGlvbnNbb1RhYmxlQ29sdW1uLnJlbGF0aXZlUGF0aF07XG5cblx0XHRcdC8vIElnbm9yZSBhZ2dyZWdhdGVzIGNvcnJlc3BvbmRpbmcgdG8gY3VycmVuY2llcyBvciB1bml0cyBvZiBtZWFzdXJlIGFuZCBkdW1teSBjcmVhdGVkIHByb3BlcnR5IGZvciBkYXRhcG9pbnQgdGFyZ2V0IFZhbHVlXG5cdFx0XHRpZiAoXG5cdFx0XHRcdGFSYXdDb250ZXh0RGVmaW5pbmdQcm9wZXJ0aWVzICYmXG5cdFx0XHRcdCFtQ3VycmVuY3lPclVuaXRQcm9wZXJ0aWVzLmhhcyhvVGFibGVDb2x1bW4ubmFtZSkgJiZcblx0XHRcdFx0IW9UYWJsZUNvbHVtbi5pc0RhdGFQb2ludEZha2VUYXJnZXRQcm9wZXJ0eVxuXHRcdFx0KSB7XG5cdFx0XHRcdG1SZXN1bHRbb1RhYmxlQ29sdW1uLm5hbWVdID0ge1xuXHRcdFx0XHRcdGRlZmF1bHRBZ2dyZWdhdGU6IHt9LFxuXHRcdFx0XHRcdHJlbGF0aXZlUGF0aDogb1RhYmxlQ29sdW1uLnJlbGF0aXZlUGF0aFxuXHRcdFx0XHR9O1xuXHRcdFx0XHRjb25zdCBhQ29udGV4dERlZmluaW5nUHJvcGVydGllczogc3RyaW5nW10gPSBbXTtcblx0XHRcdFx0YVJhd0NvbnRleHREZWZpbmluZ1Byb3BlcnRpZXMuZm9yRWFjaChjb250ZXh0RGVmaW5pbmdQcm9wZXJ0eU5hbWUgPT4ge1xuXHRcdFx0XHRcdGNvbnN0IG9Db2x1bW4gPSBmaW5kQ29sdW1uRnJvbVBhdGgoY29udGV4dERlZmluaW5nUHJvcGVydHlOYW1lKTtcblx0XHRcdFx0XHRpZiAob0NvbHVtbikge1xuXHRcdFx0XHRcdFx0YUNvbnRleHREZWZpbmluZ1Byb3BlcnRpZXMucHVzaChvQ29sdW1uLm5hbWUpO1xuXHRcdFx0XHRcdH1cblx0XHRcdFx0fSk7XG5cblx0XHRcdFx0aWYgKGFDb250ZXh0RGVmaW5pbmdQcm9wZXJ0aWVzLmxlbmd0aCkge1xuXHRcdFx0XHRcdG1SZXN1bHRbb1RhYmxlQ29sdW1uLm5hbWVdLmRlZmF1bHRBZ2dyZWdhdGUuY29udGV4dERlZmluaW5nUHJvcGVydGllcyA9IGFDb250ZXh0RGVmaW5pbmdQcm9wZXJ0aWVzO1xuXHRcdFx0XHR9XG5cdFx0XHR9XG5cdFx0fVxuXHR9KTtcblxuXHRyZXR1cm4gbVJlc3VsdDtcbn07XG5cbi8qKlxuICogVXBkYXRlcyBhIHRhYmxlIHZpc3VhbGl6YXRpb24gZm9yIGFuYWx5dGljYWwgdXNlIGNhc2VzLlxuICpcbiAqIEBwYXJhbSB0YWJsZVZpc3VhbGl6YXRpb24gVGhlIHZpc3VhbGl6YXRpb24gdG8gYmUgdXBkYXRlZFxuICogQHBhcmFtIGVudGl0eVR5cGUgVGhlIGVudGl0eSB0eXBlIGRpc3BsYXllZCBpbiB0aGUgdGFibGVcbiAqIEBwYXJhbSBjb252ZXJ0ZXJDb250ZXh0IFRoZSBjb252ZXJ0ZXIgY29udGV4dFxuICogQHBhcmFtIHByZXNlbnRhdGlvblZhcmlhbnRBbm5vdGF0aW9uIFRoZSBwcmVzZW50YXRpb25WYXJpYW50IGFubm90YXRpb24gKGlmIGFueSlcbiAqL1xuZnVuY3Rpb24gdXBkYXRlVGFibGVWaXN1YWxpemF0aW9uRm9yQW5hbHl0aWNzKFxuXHR0YWJsZVZpc3VhbGl6YXRpb246IFRhYmxlVmlzdWFsaXphdGlvbixcblx0ZW50aXR5VHlwZTogRW50aXR5VHlwZSxcblx0Y29udmVydGVyQ29udGV4dDogQ29udmVydGVyQ29udGV4dCxcblx0cHJlc2VudGF0aW9uVmFyaWFudEFubm90YXRpb24/OiBQcmVzZW50YXRpb25WYXJpYW50VHlwZVR5cGVzXG4pIHtcblx0aWYgKHRhYmxlVmlzdWFsaXphdGlvbi5jb250cm9sLnR5cGUgPT09IFwiQW5hbHl0aWNhbFRhYmxlXCIpIHtcblx0XHRjb25zdCBhZ2dyZWdhdGVzRGVmaW5pdGlvbnMgPSBnZXRBZ2dyZWdhdGVEZWZpbml0aW9uc0Zyb21FbnRpdHlUeXBlKGVudGl0eVR5cGUsIHRhYmxlVmlzdWFsaXphdGlvbi5jb2x1bW5zLCBjb252ZXJ0ZXJDb250ZXh0KTtcblxuXHRcdGlmIChhZ2dyZWdhdGVzRGVmaW5pdGlvbnMpIHtcblx0XHRcdHRhYmxlVmlzdWFsaXphdGlvbi5lbmFibGVBbmFseXRpY3MgPSB0cnVlO1xuXHRcdFx0dGFibGVWaXN1YWxpemF0aW9uLmFnZ3JlZ2F0ZXMgPSBhZ2dyZWdhdGVzRGVmaW5pdGlvbnM7XG5cblx0XHRcdC8vIEFkZCBncm91cCBhbmQgc29ydCBjb25kaXRpb25zIGZyb20gdGhlIHByZXNlbnRhdGlvbiB2YXJpYW50XG5cdFx0XHR0YWJsZVZpc3VhbGl6YXRpb24uYW5ub3RhdGlvbi5ncm91cENvbmRpdGlvbnMgPSBnZXRHcm91cENvbmRpdGlvbnMocHJlc2VudGF0aW9uVmFyaWFudEFubm90YXRpb24sIHRhYmxlVmlzdWFsaXphdGlvbi5jb2x1bW5zKTtcblx0XHRcdHRhYmxlVmlzdWFsaXphdGlvbi5hbm5vdGF0aW9uLmFnZ3JlZ2F0ZUNvbmRpdGlvbnMgPSBnZXRBZ2dyZWdhdGVDb25kaXRpb25zKFxuXHRcdFx0XHRwcmVzZW50YXRpb25WYXJpYW50QW5ub3RhdGlvbixcblx0XHRcdFx0dGFibGVWaXN1YWxpemF0aW9uLmNvbHVtbnNcblx0XHRcdCk7XG5cdFx0fVxuXG5cdFx0dGFibGVWaXN1YWxpemF0aW9uLmNvbnRyb2wudHlwZSA9IFwiR3JpZFRhYmxlXCI7IC8vIEFuYWx5dGljYWxUYWJsZSBpc24ndCBhIHJlYWwgdHlwZSBmb3IgdGhlIE1EQzpUYWJsZSwgc28gd2UgYWx3YXlzIHN3aXRjaCBiYWNrIHRvIEdyaWRcblx0fVxufVxuXG4vKipcbiAqIEdldCB0aGUgbmF2aWdhdGlvbiB0YXJnZXQgcGF0aCBmcm9tIG1hbmlmZXN0IHNldHRpbmdzLlxuICpcbiAqIEBwYXJhbSBjb252ZXJ0ZXJDb250ZXh0IFRoZSBjb252ZXJ0ZXIgY29udGV4dFxuICogQHBhcmFtIG5hdmlnYXRpb25Qcm9wZXJ0eVBhdGggVGhlIG5hdmlnYXRpb24gcGF0aCB0byBjaGVjayBpbiB0aGUgbWFuaWZlc3Qgc2V0dGluZ3NcbiAqIEByZXR1cm5zIE5hdmlnYXRpb24gcGF0aCBmcm9tIG1hbmlmZXN0IHNldHRpbmdzXG4gKi9cbmZ1bmN0aW9uIGdldE5hdmlnYXRpb25UYXJnZXRQYXRoKGNvbnZlcnRlckNvbnRleHQ6IENvbnZlcnRlckNvbnRleHQsIG5hdmlnYXRpb25Qcm9wZXJ0eVBhdGg6IHN0cmluZykge1xuXHRjb25zdCBtYW5pZmVzdFdyYXBwZXIgPSBjb252ZXJ0ZXJDb250ZXh0LmdldE1hbmlmZXN0V3JhcHBlcigpO1xuXHRpZiAobmF2aWdhdGlvblByb3BlcnR5UGF0aCAmJiBtYW5pZmVzdFdyYXBwZXIuZ2V0TmF2aWdhdGlvbkNvbmZpZ3VyYXRpb24obmF2aWdhdGlvblByb3BlcnR5UGF0aCkpIHtcblx0XHRjb25zdCBuYXZDb25maWcgPSBtYW5pZmVzdFdyYXBwZXIuZ2V0TmF2aWdhdGlvbkNvbmZpZ3VyYXRpb24obmF2aWdhdGlvblByb3BlcnR5UGF0aCk7XG5cdFx0aWYgKE9iamVjdC5rZXlzKG5hdkNvbmZpZykubGVuZ3RoID4gMCkge1xuXHRcdFx0cmV0dXJuIG5hdmlnYXRpb25Qcm9wZXJ0eVBhdGg7XG5cdFx0fVxuXHR9XG5cblx0Y29uc3QgZGF0YU1vZGVsUGF0aCA9IGNvbnZlcnRlckNvbnRleHQuZ2V0RGF0YU1vZGVsT2JqZWN0UGF0aCgpO1xuXHRjb25zdCBjb250ZXh0UGF0aCA9IGNvbnZlcnRlckNvbnRleHQuZ2V0Q29udGV4dFBhdGgoKTtcblx0Y29uc3QgbmF2Q29uZmlnRm9yQ29udGV4dFBhdGggPSBtYW5pZmVzdFdyYXBwZXIuZ2V0TmF2aWdhdGlvbkNvbmZpZ3VyYXRpb24oY29udGV4dFBhdGgpO1xuXHRpZiAobmF2Q29uZmlnRm9yQ29udGV4dFBhdGggJiYgT2JqZWN0LmtleXMobmF2Q29uZmlnRm9yQ29udGV4dFBhdGgpLmxlbmd0aCA+IDApIHtcblx0XHRyZXR1cm4gY29udGV4dFBhdGg7XG5cdH1cblxuXHRyZXR1cm4gZGF0YU1vZGVsUGF0aC50YXJnZXRFbnRpdHlTZXQgPyBkYXRhTW9kZWxQYXRoLnRhcmdldEVudGl0eVNldC5uYW1lIDogZGF0YU1vZGVsUGF0aC5zdGFydGluZ0VudGl0eVNldC5uYW1lO1xufVxuXG4vKipcbiAqIFNldHMgdGhlICd1bml0JyBhbmQgJ3RleHRBcnJhbmdlbWVudCcgcHJvcGVydGllcyBpbiBjb2x1bW5zIHdoZW4gbmVjZXNzYXJ5LlxuICpcbiAqIEBwYXJhbSBlbnRpdHlUeXBlIFRoZSBlbnRpdHkgdHlwZSBkaXNwbGF5ZWQgaW4gdGhlIHRhYmxlXG4gKiBAcGFyYW0gdGFibGVDb2x1bW5zIFRoZSBjb2x1bW5zIHRvIGJlIHVwZGF0ZWRcbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIHVwZGF0ZUxpbmtlZFByb3BlcnRpZXMoZW50aXR5VHlwZTogRW50aXR5VHlwZSwgdGFibGVDb2x1bW5zOiBUYWJsZUNvbHVtbltdKSB7XG5cdGZ1bmN0aW9uIGZpbmRDb2x1bW5CeVBhdGgocGF0aDogc3RyaW5nKTogVGFibGVDb2x1bW4gfCB1bmRlZmluZWQge1xuXHRcdHJldHVybiB0YWJsZUNvbHVtbnMuZmluZChjb2x1bW4gPT4ge1xuXHRcdFx0Y29uc3QgYW5ub3RhdGlvbkNvbHVtbiA9IGNvbHVtbiBhcyBBbm5vdGF0aW9uVGFibGVDb2x1bW47XG5cdFx0XHRyZXR1cm4gYW5ub3RhdGlvbkNvbHVtbi5wcm9wZXJ0eUluZm9zID09PSB1bmRlZmluZWQgJiYgYW5ub3RhdGlvbkNvbHVtbi5yZWxhdGl2ZVBhdGggPT09IHBhdGg7XG5cdFx0fSk7XG5cdH1cblxuXHR0YWJsZUNvbHVtbnMuZm9yRWFjaChvQ29sdW1uID0+IHtcblx0XHRjb25zdCBvVGFibGVDb2x1bW4gPSBvQ29sdW1uIGFzIEFubm90YXRpb25UYWJsZUNvbHVtbjtcblx0XHRpZiAob1RhYmxlQ29sdW1uLnByb3BlcnR5SW5mb3MgPT09IHVuZGVmaW5lZCAmJiBvVGFibGVDb2x1bW4ucmVsYXRpdmVQYXRoKSB7XG5cdFx0XHRjb25zdCBvUHJvcGVydHkgPSBlbnRpdHlUeXBlLmVudGl0eVByb3BlcnRpZXMuZmluZChvUHJvcCA9PiBvUHJvcC5uYW1lID09PSBvVGFibGVDb2x1bW4ucmVsYXRpdmVQYXRoKTtcblx0XHRcdGlmIChvUHJvcGVydHkpIHtcblx0XHRcdFx0Y29uc3Qgc1VuaXQgPSBnZXRBc3NvY2lhdGVkQ3VycmVuY3lQcm9wZXJ0eShvUHJvcGVydHkpPy5uYW1lIHx8IGdldEFzc29jaWF0ZWRVbml0UHJvcGVydHkob1Byb3BlcnR5KT8ubmFtZTtcblx0XHRcdFx0aWYgKHNVbml0KSB7XG5cdFx0XHRcdFx0Y29uc3Qgb1VuaXRDb2x1bW4gPSBmaW5kQ29sdW1uQnlQYXRoKHNVbml0KTtcblxuXHRcdFx0XHRcdG9UYWJsZUNvbHVtbi51bml0ID0gb1VuaXRDb2x1bW4/Lm5hbWU7XG5cdFx0XHRcdH1cblxuXHRcdFx0XHRjb25zdCBkaXNwbGF5TW9kZSA9IGdldERpc3BsYXlNb2RlKG9Qcm9wZXJ0eSksXG5cdFx0XHRcdFx0dGV4dEFubm90YXRpb24gPSBvUHJvcGVydHkuYW5ub3RhdGlvbnMuQ29tbW9uPy5UZXh0O1xuXHRcdFx0XHRpZiAoaXNQYXRoRXhwcmVzc2lvbih0ZXh0QW5ub3RhdGlvbikgJiYgZGlzcGxheU1vZGUgIT09IFwiVmFsdWVcIikge1xuXHRcdFx0XHRcdGNvbnN0IG9UZXh0Q29sdW1uID0gZmluZENvbHVtbkJ5UGF0aCh0ZXh0QW5ub3RhdGlvbi5wYXRoKTtcblx0XHRcdFx0XHRpZiAob1RleHRDb2x1bW4gJiYgb1RleHRDb2x1bW4ubmFtZSAhPT0gb1RhYmxlQ29sdW1uLm5hbWUpIHtcblx0XHRcdFx0XHRcdG9UYWJsZUNvbHVtbi50ZXh0QXJyYW5nZW1lbnQgPSB7XG5cdFx0XHRcdFx0XHRcdHRleHRQcm9wZXJ0eTogb1RleHRDb2x1bW4ubmFtZSxcblx0XHRcdFx0XHRcdFx0bW9kZTogZGlzcGxheU1vZGVcblx0XHRcdFx0XHRcdH07XG5cdFx0XHRcdFx0fVxuXHRcdFx0XHR9XG5cdFx0XHR9XG5cdFx0fVxuXHR9KTtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGNyZWF0ZVRhYmxlVmlzdWFsaXphdGlvbihcblx0bGluZUl0ZW1Bbm5vdGF0aW9uOiBMaW5lSXRlbSxcblx0dmlzdWFsaXphdGlvblBhdGg6IHN0cmluZyxcblx0Y29udmVydGVyQ29udGV4dDogQ29udmVydGVyQ29udGV4dCxcblx0cHJlc2VudGF0aW9uVmFyaWFudEFubm90YXRpb24/OiBQcmVzZW50YXRpb25WYXJpYW50VHlwZVR5cGVzLFxuXHRpc0NvbmRlbnNlZFRhYmxlTGF5b3V0Q29tcGxpYW50PzogYm9vbGVhbixcblx0dmlld0NvbmZpZ3VyYXRpb24/OiBWaWV3UGF0aENvbmZpZ3VyYXRpb25cbik6IFRhYmxlVmlzdWFsaXphdGlvbiB7XG5cdGNvbnN0IHRhYmxlTWFuaWZlc3RDb25maWcgPSBnZXRUYWJsZU1hbmlmZXN0Q29uZmlndXJhdGlvbihcblx0XHRsaW5lSXRlbUFubm90YXRpb24sXG5cdFx0dmlzdWFsaXphdGlvblBhdGgsXG5cdFx0Y29udmVydGVyQ29udGV4dCxcblx0XHRpc0NvbmRlbnNlZFRhYmxlTGF5b3V0Q29tcGxpYW50XG5cdCk7XG5cdGNvbnN0IHsgbmF2aWdhdGlvblByb3BlcnR5UGF0aCB9ID0gc3BsaXRQYXRoKHZpc3VhbGl6YXRpb25QYXRoKTtcblx0Y29uc3QgbmF2aWdhdGlvblRhcmdldFBhdGggPSBnZXROYXZpZ2F0aW9uVGFyZ2V0UGF0aChjb252ZXJ0ZXJDb250ZXh0LCBuYXZpZ2F0aW9uUHJvcGVydHlQYXRoKTtcblx0Y29uc3QgbmF2aWdhdGlvblNldHRpbmdzID0gY29udmVydGVyQ29udGV4dC5nZXRNYW5pZmVzdFdyYXBwZXIoKS5nZXROYXZpZ2F0aW9uQ29uZmlndXJhdGlvbihuYXZpZ2F0aW9uVGFyZ2V0UGF0aCk7XG5cdGNvbnN0IGNvbHVtbnMgPSBnZXRUYWJsZUNvbHVtbnMobGluZUl0ZW1Bbm5vdGF0aW9uLCB2aXN1YWxpemF0aW9uUGF0aCwgY29udmVydGVyQ29udGV4dCwgbmF2aWdhdGlvblNldHRpbmdzKTtcblx0Y29uc3Qgb3BlcmF0aW9uQXZhaWxhYmxlTWFwID0gZ2V0T3BlcmF0aW9uQXZhaWxhYmxlTWFwKGxpbmVJdGVtQW5ub3RhdGlvbiwgY29udmVydGVyQ29udGV4dCk7XG5cblx0Y29uc3Qgb1Zpc3VhbGl6YXRpb246IFRhYmxlVmlzdWFsaXphdGlvbiA9IHtcblx0XHR0eXBlOiBWaXN1YWxpemF0aW9uVHlwZS5UYWJsZSxcblx0XHRhbm5vdGF0aW9uOiBnZXRUYWJsZUFubm90YXRpb25Db25maWd1cmF0aW9uKFxuXHRcdFx0bGluZUl0ZW1Bbm5vdGF0aW9uLFxuXHRcdFx0dmlzdWFsaXphdGlvblBhdGgsXG5cdFx0XHRjb252ZXJ0ZXJDb250ZXh0LFxuXHRcdFx0dGFibGVNYW5pZmVzdENvbmZpZyxcblx0XHRcdGNvbHVtbnMsXG5cdFx0XHRwcmVzZW50YXRpb25WYXJpYW50QW5ub3RhdGlvbixcblx0XHRcdHZpZXdDb25maWd1cmF0aW9uXG5cdFx0KSxcblx0XHRjb250cm9sOiB0YWJsZU1hbmlmZXN0Q29uZmlnLFxuXHRcdGFjdGlvbnM6IHJlbW92ZUR1cGxpY2F0ZUFjdGlvbnMoZ2V0VGFibGVBY3Rpb25zKGxpbmVJdGVtQW5ub3RhdGlvbiwgdmlzdWFsaXphdGlvblBhdGgsIGNvbnZlcnRlckNvbnRleHQsIG5hdmlnYXRpb25TZXR0aW5ncykpLFxuXHRcdGNvbHVtbnM6IGNvbHVtbnMsXG5cdFx0ZW5hYmxlRGF0YVN0YXRlRmlsdGVyOiBjb252ZXJ0ZXJDb250ZXh0LmdldFRlbXBsYXRlVHlwZSgpID09PSBcIk9iamVjdFBhZ2VcIixcblx0XHRvcGVyYXRpb25BdmFpbGFibGVNYXA6IEpTT04uc3RyaW5naWZ5KG9wZXJhdGlvbkF2YWlsYWJsZU1hcCksXG5cdFx0b3BlcmF0aW9uQXZhaWxhYmxlUHJvcGVydGllczogZ2V0T3BlcmF0aW9uQXZhaWxhYmxlUHJvcGVydGllcyhvcGVyYXRpb25BdmFpbGFibGVNYXAsIGNvbnZlcnRlckNvbnRleHQpXG5cdH07XG5cblx0dXBkYXRlTGlua2VkUHJvcGVydGllcyhjb252ZXJ0ZXJDb250ZXh0LmdldEFubm90YXRpb25FbnRpdHlUeXBlKGxpbmVJdGVtQW5ub3RhdGlvbiksIGNvbHVtbnMpO1xuXHR1cGRhdGVUYWJsZVZpc3VhbGl6YXRpb25Gb3JBbmFseXRpY3MoXG5cdFx0b1Zpc3VhbGl6YXRpb24sXG5cdFx0Y29udmVydGVyQ29udGV4dC5nZXRBbm5vdGF0aW9uRW50aXR5VHlwZShsaW5lSXRlbUFubm90YXRpb24pLFxuXHRcdGNvbnZlcnRlckNvbnRleHQsXG5cdFx0cHJlc2VudGF0aW9uVmFyaWFudEFubm90YXRpb25cblx0KTtcblxuXHRyZXR1cm4gb1Zpc3VhbGl6YXRpb247XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBjcmVhdGVEZWZhdWx0VGFibGVWaXN1YWxpemF0aW9uKGNvbnZlcnRlckNvbnRleHQ6IENvbnZlcnRlckNvbnRleHQpOiBUYWJsZVZpc3VhbGl6YXRpb24ge1xuXHRjb25zdCB0YWJsZU1hbmlmZXN0Q29uZmlnID0gZ2V0VGFibGVNYW5pZmVzdENvbmZpZ3VyYXRpb24odW5kZWZpbmVkLCBcIlwiLCBjb252ZXJ0ZXJDb250ZXh0LCBmYWxzZSk7XG5cdGNvbnN0IGNvbHVtbnMgPSBnZXRDb2x1bW5zRnJvbUVudGl0eVR5cGUoe30sIGNvbnZlcnRlckNvbnRleHQuZ2V0RW50aXR5VHlwZSgpLCBbXSwgW10sIGNvbnZlcnRlckNvbnRleHQsIHRhYmxlTWFuaWZlc3RDb25maWcudHlwZSk7XG5cdGNvbnN0IG9wZXJhdGlvbkF2YWlsYWJsZU1hcCA9IGdldE9wZXJhdGlvbkF2YWlsYWJsZU1hcCh1bmRlZmluZWQsIGNvbnZlcnRlckNvbnRleHQpO1xuXHRjb25zdCBvVmlzdWFsaXphdGlvbjogVGFibGVWaXN1YWxpemF0aW9uID0ge1xuXHRcdHR5cGU6IFZpc3VhbGl6YXRpb25UeXBlLlRhYmxlLFxuXHRcdGFubm90YXRpb246IGdldFRhYmxlQW5ub3RhdGlvbkNvbmZpZ3VyYXRpb24odW5kZWZpbmVkLCBcIlwiLCBjb252ZXJ0ZXJDb250ZXh0LCB0YWJsZU1hbmlmZXN0Q29uZmlnLCBjb2x1bW5zKSxcblx0XHRjb250cm9sOiB0YWJsZU1hbmlmZXN0Q29uZmlnLFxuXHRcdGFjdGlvbnM6IFtdLFxuXHRcdGNvbHVtbnM6IGNvbHVtbnMsXG5cdFx0ZW5hYmxlRGF0YVN0YXRlRmlsdGVyOiBjb252ZXJ0ZXJDb250ZXh0LmdldFRlbXBsYXRlVHlwZSgpID09PSBcIk9iamVjdFBhZ2VcIixcblx0XHRvcGVyYXRpb25BdmFpbGFibGVNYXA6IEpTT04uc3RyaW5naWZ5KG9wZXJhdGlvbkF2YWlsYWJsZU1hcCksXG5cdFx0b3BlcmF0aW9uQXZhaWxhYmxlUHJvcGVydGllczogZ2V0T3BlcmF0aW9uQXZhaWxhYmxlUHJvcGVydGllcyhvcGVyYXRpb25BdmFpbGFibGVNYXAsIGNvbnZlcnRlckNvbnRleHQpXG5cdH07XG5cblx0dXBkYXRlTGlua2VkUHJvcGVydGllcyhjb252ZXJ0ZXJDb250ZXh0LmdldEVudGl0eVR5cGUoKSwgY29sdW1ucyk7XG5cdHVwZGF0ZVRhYmxlVmlzdWFsaXphdGlvbkZvckFuYWx5dGljcyhvVmlzdWFsaXphdGlvbiwgY29udmVydGVyQ29udGV4dC5nZXRFbnRpdHlUeXBlKCksIGNvbnZlcnRlckNvbnRleHQpO1xuXG5cdHJldHVybiBvVmlzdWFsaXphdGlvbjtcbn1cblxuLyoqXG4gKiBHZXRzIHRoZSBtYXAgb2YgQ29yZS5PcGVyYXRpb25BdmFpbGFibGUgcHJvcGVydHkgcGF0aHMgZm9yIGFsbCBEYXRhRmllbGRGb3JBY3Rpb25zLlxuICpcbiAqIEBwYXJhbSBsaW5lSXRlbUFubm90YXRpb24gVGhlIGluc3RhbmNlIG9mIHRoZSBsaW5lIGl0ZW1cbiAqIEBwYXJhbSBjb252ZXJ0ZXJDb250ZXh0IFRoZSBpbnN0YW5jZSBvZiB0aGUgY29udmVydGVyIGNvbnRleHRcbiAqIEByZXR1cm5zIHtSZWNvcmQ8c3RyaW5nLCBhbnk+fSBUaGUgcmVjb3JkIGNvbnRhaW5pbmcgYWxsIGFjdGlvbiBuYW1lcyBhbmQgdGhlaXIgY29ycmVzcG9uZGluZyBDb3JlLk9wZXJhdGlvbkF2YWlsYWJsZSBwcm9wZXJ0eSBwYXRoc1xuICovXG5mdW5jdGlvbiBnZXRPcGVyYXRpb25BdmFpbGFibGVNYXAobGluZUl0ZW1Bbm5vdGF0aW9uOiBMaW5lSXRlbSB8IHVuZGVmaW5lZCwgY29udmVydGVyQ29udGV4dDogQ29udmVydGVyQ29udGV4dCk6IFJlY29yZDxzdHJpbmcsIGFueT4ge1xuXHRjb25zdCBvcGVyYXRpb25BdmFpbGFibGVNYXA6IFJlY29yZDxzdHJpbmcsIGFueT4gPSB7fTtcblx0Y29uc3QgYWRkVG9NYXAgPSBmdW5jdGlvbihrZXk6IHN0cmluZywgdmFsdWU6IGFueSkge1xuXHRcdGlmIChrZXkpIHtcblx0XHRcdG9wZXJhdGlvbkF2YWlsYWJsZU1hcFtrZXldID0gdmFsdWU7XG5cdFx0fVxuXHR9O1xuXG5cdGlmIChsaW5lSXRlbUFubm90YXRpb24pIHtcblx0XHRsaW5lSXRlbUFubm90YXRpb24uZm9yRWFjaChkYXRhRmllbGQgPT4ge1xuXHRcdFx0aWYgKGRhdGFGaWVsZC4kVHlwZSA9PT0gVUlBbm5vdGF0aW9uVHlwZXMuRGF0YUZpZWxkRm9yQWN0aW9uKSB7XG5cdFx0XHRcdGNvbnN0IGFjdGlvbk5hbWUgPSBkYXRhRmllbGQuQWN0aW9uIGFzIHN0cmluZztcblx0XHRcdFx0aWYgKGFjdGlvbk5hbWU/LmluZGV4T2YoXCIvXCIpIDwgMCAmJiAhZGF0YUZpZWxkLkRldGVybWluaW5nKSB7XG5cdFx0XHRcdFx0Y29uc3QgYWN0aW9uVGFyZ2V0ID0gZGF0YUZpZWxkLkFjdGlvblRhcmdldDtcblx0XHRcdFx0XHRpZiAoYWN0aW9uVGFyZ2V0Py5hbm5vdGF0aW9ucz8uQ29yZT8uT3BlcmF0aW9uQXZhaWxhYmxlID09PSBudWxsKSB7XG5cdFx0XHRcdFx0XHQvLyBBbm5vdGF0aW9uIGV4cGxpY2l0bHkgY29uZmlndXJlZCB3aXRoIG51bGwgKGFjdGlvbiBhZHZlcnRpc2VtZW50IHJlbGF0ZWQpXG5cdFx0XHRcdFx0XHRhZGRUb01hcChhY3Rpb25OYW1lLCBudWxsKTtcblx0XHRcdFx0XHR9IGVsc2UgaWYgKGFjdGlvblRhcmdldD8ucGFyYW1ldGVycz8ubGVuZ3RoKSB7XG5cdFx0XHRcdFx0XHRjb25zdCBiaW5kaW5nUGFyYW1ldGVyRnVsbE5hbWUgPSBhY3Rpb25UYXJnZXQucGFyYW1ldGVyc1swXS5mdWxseVF1YWxpZmllZE5hbWUsXG5cdFx0XHRcdFx0XHRcdHRhcmdldEV4cHJlc3Npb24gPSBhbm5vdGF0aW9uRXhwcmVzc2lvbihcblx0XHRcdFx0XHRcdFx0XHRhY3Rpb25UYXJnZXQ/LmFubm90YXRpb25zPy5Db3JlPy5PcGVyYXRpb25BdmFpbGFibGUsXG5cdFx0XHRcdFx0XHRcdFx0W10sXG5cdFx0XHRcdFx0XHRcdFx0dW5kZWZpbmVkLFxuXHRcdFx0XHRcdFx0XHRcdChwYXRoOiBzdHJpbmcpID0+IGJpbmRpbmdDb250ZXh0UGF0aFZpc2l0b3IocGF0aCwgY29udmVydGVyQ29udGV4dCwgYmluZGluZ1BhcmFtZXRlckZ1bGxOYW1lKVxuXHRcdFx0XHRcdFx0XHQpIGFzIEJpbmRpbmdFeHByZXNzaW9uRXhwcmVzc2lvbjxzdHJpbmc+O1xuXG5cdFx0XHRcdFx0XHRpZiAodGFyZ2V0RXhwcmVzc2lvbj8ucGF0aCkge1xuXHRcdFx0XHRcdFx0XHRhZGRUb01hcChhY3Rpb25OYW1lLCB0YXJnZXRFeHByZXNzaW9uLnBhdGgpO1xuXHRcdFx0XHRcdFx0fSBlbHNlIGlmIChhY3Rpb25UYXJnZXQ/LmFubm90YXRpb25zPy5Db3JlPy5PcGVyYXRpb25BdmFpbGFibGUgIT09IHVuZGVmaW5lZCkge1xuXHRcdFx0XHRcdFx0XHRhZGRUb01hcChhY3Rpb25OYW1lLCB0YXJnZXRFeHByZXNzaW9uKTtcblx0XHRcdFx0XHRcdH1cblx0XHRcdFx0XHR9XG5cdFx0XHRcdH1cblx0XHRcdH1cblx0XHR9KTtcblx0fVxuXG5cdHJldHVybiBvcGVyYXRpb25BdmFpbGFibGVNYXA7XG59XG5cbi8qKlxuICogTWV0aG9kIHRvIHJldHJpZXZlIGFsbCBwcm9wZXJ0eSBwYXRocyBhc3NpZ25lZCB0byB0aGUgQ29yZS5PcGVyYXRpb25BdmFpbGFibGUgYW5ub3RhdGlvbi5cbiAqXG4gKiBAcGFyYW0ge1JlY29yZDxzdHJpbmcsIGFueT59IG9wZXJhdGlvbkF2YWlsYWJsZU1hcCBUaGUgcmVjb3JkIGNvbnNpc3Rpbmcgb2YgYWN0aW9ucyBhbmQgdGhlaXIgQ29yZS5PcGVyYXRpb25BdmFpbGFibGUgcHJvcGVydHkgcGF0aHNcbiAqIEBwYXJhbSB7Q29udmVydGVyQ29udGV4dH0gY29udmVydGVyQ29udGV4dCBUaGUgaW5zdGFuY2Ugb2YgdGhlIGNvbnZlcnRlciBjb250ZXh0XG4gKiBAcmV0dXJucyB7c3RyaW5nfSBUaGUgQ1NWIHN0cmluZyBvZiBhbGwgcHJvcGVydHkgcGF0aHMgYXNzb2NpYXRlZCB3aXRoIHRoZSBDb3JlLk9wZXJhdGlvbkF2YWlsYWJsZSBhbm5vdGF0aW9uXG4gKi9cbmZ1bmN0aW9uIGdldE9wZXJhdGlvbkF2YWlsYWJsZVByb3BlcnRpZXMob3BlcmF0aW9uQXZhaWxhYmxlTWFwOiBSZWNvcmQ8c3RyaW5nLCBhbnk+LCBjb252ZXJ0ZXJDb250ZXh0OiBDb252ZXJ0ZXJDb250ZXh0KTogc3RyaW5nIHtcblx0Y29uc3QgcHJvcGVydGllcyA9IG5ldyBTZXQoKTtcblxuXHRmb3IgKGNvbnN0IGFjdGlvbk5hbWUgaW4gb3BlcmF0aW9uQXZhaWxhYmxlTWFwKSB7XG5cdFx0Y29uc3QgcHJvcGVydHlOYW1lID0gb3BlcmF0aW9uQXZhaWxhYmxlTWFwW2FjdGlvbk5hbWVdO1xuXHRcdGlmIChwcm9wZXJ0eU5hbWUgPT09IG51bGwpIHtcblx0XHRcdC8vIEFubm90YXRpb24gY29uZmlndXJlZCB3aXRoIGV4cGxpY2l0ICdudWxsJyAoYWN0aW9uIGFkdmVydGlzZW1lbnQgcmVsZXZhbnQpXG5cdFx0XHRwcm9wZXJ0aWVzLmFkZChhY3Rpb25OYW1lKTtcblx0XHR9IGVsc2UgaWYgKHR5cGVvZiBwcm9wZXJ0eU5hbWUgPT09IFwic3RyaW5nXCIpIHtcblx0XHRcdC8vIEFkZCBwcm9wZXJ0eSBwYXRocyBhbmQgbm90IENvbnN0YW50IHZhbHVlcy5cblx0XHRcdHByb3BlcnRpZXMuYWRkKHByb3BlcnR5TmFtZSk7XG5cdFx0fVxuXHR9XG5cblx0aWYgKHByb3BlcnRpZXMuc2l6ZSkge1xuXHRcdC8vIFNvbWUgYWN0aW9ucyBoYXZlIGFuIG9wZXJhdGlvbiBhdmFpbGFibGUgYmFzZWQgb24gcHJvcGVydHkgLS0+IHdlIG5lZWQgdG8gbG9hZCB0aGUgSGVhZGVySW5mby5UaXRsZSBwcm9wZXJ0eVxuXHRcdC8vIHNvIHRoYXQgdGhlIGRpYWxvZyBvbiBwYXJ0aWFsIGFjdGlvbnMgaXMgZGlzcGxheWVkIHByb3Blcmx5IChCQ1AgMjE4MDI3MTQyNSlcblx0XHRjb25zdCBlbnRpdHlUeXBlID0gY29udmVydGVyQ29udGV4dC5nZXRFbnRpdHlUeXBlKCk7XG5cdFx0Y29uc3QgdGl0bGVQcm9wZXJ0eSA9IChlbnRpdHlUeXBlLmFubm90YXRpb25zPy5VST8uSGVhZGVySW5mbz8uVGl0bGUgYXMgRGF0YUZpZWxkVHlwZXMpPy5WYWx1ZT8ucGF0aDtcblx0XHRpZiAodGl0bGVQcm9wZXJ0eSkge1xuXHRcdFx0cHJvcGVydGllcy5hZGQodGl0bGVQcm9wZXJ0eSk7XG5cdFx0fVxuXHR9XG5cblx0cmV0dXJuIEFycmF5LmZyb20ocHJvcGVydGllcykuam9pbihcIixcIik7XG59XG5cbi8qKlxuICogSXRlcmF0ZXMgb3ZlciB0aGUgRGF0YUZpZWxkRm9yQWN0aW9uIGFuZCBEYXRhRmllbGRGb3JJbnRlbnRCYXNlZE5hdmlnYXRpb24gb2YgYSBsaW5lIGl0ZW0gYW5kXG4gKiByZXR1cm5zIGFsbCB0aGUgVUkuSGlkZGVuIGFubm90YXRpb24gZXhwcmVzc2lvbnMuXG4gKlxuICogQHBhcmFtIGxpbmVJdGVtQW5ub3RhdGlvbiBDb2xsZWN0aW9uIG9mIGRhdGEgZmllbGRzIHVzZWQgZm9yIHJlcHJlc2VudGF0aW9uIGluIGEgdGFibGUgb3IgbGlzdFxuICogQHBhcmFtIGN1cnJlbnRFbnRpdHlUeXBlIEN1cnJlbnQgZW50aXR5IHR5cGVcbiAqIEBwYXJhbSBjb250ZXh0RGF0YU1vZGVsT2JqZWN0UGF0aCBPYmplY3QgcGF0aCBvZiB0aGUgZGF0YSBtb2RlbFxuICogQHBhcmFtIGlzRW50aXR5U2V0XG4gKiBAcmV0dXJucyBBbGwgdGhlIGBVSS5IaWRkZW5gIHBhdGggZXhwcmVzc2lvbnMgZm91bmQgaW4gdGhlIHJlbGV2YW50IGFjdGlvbnNcbiAqL1xuZnVuY3Rpb24gZ2V0VUlIaWRkZW5FeHBGb3JBY3Rpb25zUmVxdWlyaW5nQ29udGV4dChcblx0bGluZUl0ZW1Bbm5vdGF0aW9uOiBMaW5lSXRlbSxcblx0Y3VycmVudEVudGl0eVR5cGU6IEVudGl0eVR5cGUsXG5cdGNvbnRleHREYXRhTW9kZWxPYmplY3RQYXRoOiBEYXRhTW9kZWxPYmplY3RQYXRoLFxuXHRpc0VudGl0eVNldDogYm9vbGVhblxuKTogRXhwcmVzc2lvbjxib29sZWFuPltdIHtcblx0Y29uc3QgYVVpSGlkZGVuUGF0aEV4cHJlc3Npb25zOiBFeHByZXNzaW9uPGJvb2xlYW4+W10gPSBbXTtcblx0bGluZUl0ZW1Bbm5vdGF0aW9uLmZvckVhY2goZGF0YUZpZWxkID0+IHtcblx0XHQvLyBDaGVjayBpZiB0aGUgbGluZUl0ZW0gY29udGV4dCBpcyB0aGUgc2FtZSBhcyB0aGF0IG9mIHRoZSBhY3Rpb246XG5cdFx0aWYgKFxuXHRcdFx0KGRhdGFGaWVsZC4kVHlwZSA9PT0gVUlBbm5vdGF0aW9uVHlwZXMuRGF0YUZpZWxkRm9yQWN0aW9uICYmXG5cdFx0XHRcdGRhdGFGaWVsZD8uQWN0aW9uVGFyZ2V0Py5pc0JvdW5kICYmXG5cdFx0XHRcdGN1cnJlbnRFbnRpdHlUeXBlID09PSBkYXRhRmllbGQ/LkFjdGlvblRhcmdldC5zb3VyY2VFbnRpdHlUeXBlKSB8fFxuXHRcdFx0KGRhdGFGaWVsZC4kVHlwZSA9PT0gVUlBbm5vdGF0aW9uVHlwZXMuRGF0YUZpZWxkRm9ySW50ZW50QmFzZWROYXZpZ2F0aW9uICYmXG5cdFx0XHRcdGRhdGFGaWVsZC5SZXF1aXJlc0NvbnRleHQgJiZcblx0XHRcdFx0ZGF0YUZpZWxkPy5JbmxpbmU/LnZhbHVlT2YoKSAhPT0gdHJ1ZSlcblx0XHQpIHtcblx0XHRcdGlmICh0eXBlb2YgZGF0YUZpZWxkLmFubm90YXRpb25zPy5VST8uSGlkZGVuPy52YWx1ZU9mKCkgPT09IFwib2JqZWN0XCIpIHtcblx0XHRcdFx0YVVpSGlkZGVuUGF0aEV4cHJlc3Npb25zLnB1c2goXG5cdFx0XHRcdFx0ZXF1YWwoXG5cdFx0XHRcdFx0XHRnZXRCaW5kaW5nRXhwRnJvbUNvbnRleHQoXG5cdFx0XHRcdFx0XHRcdGRhdGFGaWVsZCBhcyBEYXRhRmllbGRGb3JBY3Rpb24gfCBEYXRhRmllbGRGb3JJbnRlbnRCYXNlZE5hdmlnYXRpb24sXG5cdFx0XHRcdFx0XHRcdGNvbnRleHREYXRhTW9kZWxPYmplY3RQYXRoLFxuXHRcdFx0XHRcdFx0XHRpc0VudGl0eVNldFxuXHRcdFx0XHRcdFx0KSxcblx0XHRcdFx0XHRcdGZhbHNlXG5cdFx0XHRcdFx0KVxuXHRcdFx0XHQpO1xuXHRcdFx0fVxuXHRcdH1cblx0fSk7XG5cdHJldHVybiBhVWlIaWRkZW5QYXRoRXhwcmVzc2lvbnM7XG59XG5cbi8qKlxuICogVGhpcyBtZXRob2QgaXMgdXNlZCB0byBjaGFuZ2UgdGhlIGNvbnRleHQgY3VycmVudGx5IHJlZmVyZW5jZWQgYnkgdGhpcyBiaW5kaW5nIGJ5IHJlbW92aW5nIHRoZSBsYXN0IG5hdmlnYXRpb24gcHJvcGVydHkuXG4gKlxuICogSXQgaXMgdXNlZCAoc3BlY2lmaWNhbGx5IGluIHRoaXMgY2FzZSksIHRvIHRyYW5zZm9ybSBhIGJpbmRpbmcgbWFkZSBmb3IgYSBOYXZQcm9wIGNvbnRleHQgL01haW5PYmplY3QvTmF2UHJvcDEvTmF2UHJvcDIsXG4gKiBpbnRvIGEgYmluZGluZyBvbiB0aGUgcHJldmlvdXMgY29udGV4dCAvTWFpbk9iamVjdC9OYXZQcm9wMS5cbiAqXG4gKiBAcGFyYW0gc291cmNlIERhdGFGaWVsZEZvckFjdGlvbiB8IERhdGFGaWVsZEZvckludGVudEJhc2VkTmF2aWdhdGlvbiB8IEN1c3RvbUFjdGlvblxuICogQHBhcmFtIGNvbnRleHREYXRhTW9kZWxPYmplY3RQYXRoIERhdGFNb2RlbE9iamVjdFBhdGhcbiAqIEBwYXJhbSBpc0VudGl0eVNldFxuICogQHJldHVybnMgVGhlIGJpbmRpbmcgZXhwcmVzc2lvblxuICovXG5mdW5jdGlvbiBnZXRCaW5kaW5nRXhwRnJvbUNvbnRleHQoXG5cdHNvdXJjZTogRGF0YUZpZWxkRm9yQWN0aW9uIHwgRGF0YUZpZWxkRm9ySW50ZW50QmFzZWROYXZpZ2F0aW9uIHwgQ3VzdG9tQWN0aW9uLFxuXHRjb250ZXh0RGF0YU1vZGVsT2JqZWN0UGF0aDogRGF0YU1vZGVsT2JqZWN0UGF0aCxcblx0aXNFbnRpdHlTZXQ6IGJvb2xlYW5cbik6IEV4cHJlc3Npb248YW55PiB7XG5cdGxldCBzRXhwcmVzc2lvbjogYW55IHwgdW5kZWZpbmVkO1xuXHRpZiAoXG5cdFx0KHNvdXJjZSBhcyBEYXRhRmllbGRGb3JBY3Rpb24pPy4kVHlwZSA9PT0gVUlBbm5vdGF0aW9uVHlwZXMuRGF0YUZpZWxkRm9yQWN0aW9uIHx8XG5cdFx0KHNvdXJjZSBhcyBEYXRhRmllbGRGb3JJbnRlbnRCYXNlZE5hdmlnYXRpb24pPy4kVHlwZSA9PT0gVUlBbm5vdGF0aW9uVHlwZXMuRGF0YUZpZWxkRm9ySW50ZW50QmFzZWROYXZpZ2F0aW9uXG5cdCkge1xuXHRcdHNFeHByZXNzaW9uID0gKHNvdXJjZSBhcyBEYXRhRmllbGRGb3JBY3Rpb24gfCBEYXRhRmllbGRGb3JJbnRlbnRCYXNlZE5hdmlnYXRpb24pPy5hbm5vdGF0aW9ucz8uVUk/LkhpZGRlbjtcblx0fSBlbHNlIHtcblx0XHRzRXhwcmVzc2lvbiA9IChzb3VyY2UgYXMgQ3VzdG9tQWN0aW9uKT8udmlzaWJsZTtcblx0fVxuXHRsZXQgc1BhdGg6IHN0cmluZztcblx0aWYgKHNFeHByZXNzaW9uPy5wYXRoKSB7XG5cdFx0c1BhdGggPSBzRXhwcmVzc2lvbi5wYXRoO1xuXHR9IGVsc2Uge1xuXHRcdHNQYXRoID0gc0V4cHJlc3Npb247XG5cdH1cblx0aWYgKHNQYXRoKSB7XG5cdFx0aWYgKChzb3VyY2UgYXMgQ3VzdG9tQWN0aW9uKT8udmlzaWJsZSkge1xuXHRcdFx0c1BhdGggPSBzUGF0aC5zdWJzdHJpbmcoMSwgc1BhdGgubGVuZ3RoIC0gMSk7XG5cdFx0fVxuXHRcdGlmIChzUGF0aC5pbmRleE9mKFwiL1wiKSA+IDApIHtcblx0XHRcdC8vY2hlY2sgaWYgdGhlIG5hdmlnYXRpb24gcHJvcGVydHkgaXMgY29ycmVjdDpcblx0XHRcdGNvbnN0IGFTcGxpdFBhdGggPSBzUGF0aC5zcGxpdChcIi9cIik7XG5cdFx0XHRjb25zdCBzTmF2aWdhdGlvblBhdGggPSBhU3BsaXRQYXRoWzBdO1xuXHRcdFx0aWYgKFxuXHRcdFx0XHRjb250ZXh0RGF0YU1vZGVsT2JqZWN0UGF0aD8udGFyZ2V0T2JqZWN0Py5fdHlwZSA9PT0gXCJOYXZpZ2F0aW9uUHJvcGVydHlcIiAmJlxuXHRcdFx0XHRjb250ZXh0RGF0YU1vZGVsT2JqZWN0UGF0aC50YXJnZXRPYmplY3QucGFydG5lciA9PT0gc05hdmlnYXRpb25QYXRoXG5cdFx0XHQpIHtcblx0XHRcdFx0cmV0dXJuIGJpbmRpbmdFeHByZXNzaW9uKGFTcGxpdFBhdGguc2xpY2UoMSkuam9pbihcIi9cIikpO1xuXHRcdFx0fSBlbHNlIHtcblx0XHRcdFx0cmV0dXJuIGNvbnN0YW50KHRydWUpO1xuXHRcdFx0fVxuXHRcdFx0Ly8gSW4gY2FzZSB0aGVyZSBpcyBubyBuYXZpZ2F0aW9uIHByb3BlcnR5LCBpZiBpdCdzIGFuIGVudGl0eVNldCwgdGhlIGV4cHJlc3Npb24gYmluZGluZyBoYXMgdG8gYmUgcmV0dXJuZWQ6XG5cdFx0fSBlbHNlIGlmIChpc0VudGl0eVNldCkge1xuXHRcdFx0cmV0dXJuIGJpbmRpbmdFeHByZXNzaW9uKHNQYXRoKTtcblx0XHRcdC8vIG90aGVyd2lzZSB0aGUgZXhwcmVzc2lvbiBiaW5kaW5nIGNhbm5vdCBiZSB0YWtlbiBpbnRvIGFjY291bnQgZm9yIHRoZSBzZWxlY3Rpb24gbW9kZSBldmFsdWF0aW9uOlxuXHRcdH0gZWxzZSB7XG5cdFx0XHRyZXR1cm4gY29uc3RhbnQodHJ1ZSk7XG5cdFx0fVxuXHR9XG5cdHJldHVybiBjb25zdGFudCh0cnVlKTtcbn1cblxuLyoqXG4gKiBMb29wIHRocm91Z2ggdGhlIERhdGFGaWVsZEZvckFjdGlvbiBhbmQgRGF0YUZpZWxkRm9ySW50ZW50QmFzZWROYXZpZ2F0aW9uIG9mIGEgbGluZSBpdGVtIGFuZCBjaGVja1xuICogaWYgYXQgbGVhc3Qgb25lIG9mIHRoZW0gaXMgYWx3YXlzIHZpc2libGUgaW4gdGhlIHRhYmxlIHRvb2xiYXIgKGFuZCByZXF1aXJlcyBhIGNvbnRleHQpLlxuICpcbiAqIEBwYXJhbSBsaW5lSXRlbUFubm90YXRpb24gQ29sbGVjdGlvbiBvZiBkYXRhIGZpZWxkcyBmb3IgcmVwcmVzZW50YXRpb24gaW4gYSB0YWJsZSBvciBsaXN0XG4gKiBAcGFyYW0gY3VycmVudEVudGl0eVR5cGUgQ3VycmVudCBFbnRpdHkgVHlwZVxuICogQHJldHVybnMge2Jvb2xlYW59IGB0cnVlYCBpZiB0aGVyZSBpcyBhdCBsZWFzdCAxIGFjdGlvbiB0aGF0IG1lZXRzIHRoZSBjcml0ZXJpYVxuICovXG5mdW5jdGlvbiBoYXNCb3VuZEFjdGlvbnNBbHdheXNWaXNpYmxlSW5Ub29sQmFyKGxpbmVJdGVtQW5ub3RhdGlvbjogTGluZUl0ZW0sIGN1cnJlbnRFbnRpdHlUeXBlOiBFbnRpdHlUeXBlKTogYm9vbGVhbiB7XG5cdHJldHVybiBsaW5lSXRlbUFubm90YXRpb24uc29tZShkYXRhRmllbGQgPT4ge1xuXHRcdGlmIChcblx0XHRcdChkYXRhRmllbGQuJFR5cGUgPT09IFVJQW5ub3RhdGlvblR5cGVzLkRhdGFGaWVsZEZvckFjdGlvbiB8fFxuXHRcdFx0XHRkYXRhRmllbGQuJFR5cGUgPT09IFVJQW5ub3RhdGlvblR5cGVzLkRhdGFGaWVsZEZvckludGVudEJhc2VkTmF2aWdhdGlvbikgJiZcblx0XHRcdGRhdGFGaWVsZD8uSW5saW5lPy52YWx1ZU9mKCkgIT09IHRydWUgJiZcblx0XHRcdChkYXRhRmllbGQuYW5ub3RhdGlvbnM/LlVJPy5IaWRkZW4/LnZhbHVlT2YoKSA9PT0gZmFsc2UgfHwgZGF0YUZpZWxkLmFubm90YXRpb25zPy5VST8uSGlkZGVuPy52YWx1ZU9mKCkgPT09IHVuZGVmaW5lZClcblx0XHQpIHtcblx0XHRcdGlmIChkYXRhRmllbGQuJFR5cGUgPT09IFVJQW5ub3RhdGlvblR5cGVzLkRhdGFGaWVsZEZvckFjdGlvbikge1xuXHRcdFx0XHQvLyBDaGVjayBpZiB0aGUgbGluZUl0ZW0gY29udGV4dCBpcyB0aGUgc2FtZSBhcyB0aGF0IG9mIHRoZSBhY3Rpb246XG5cdFx0XHRcdHJldHVybiBkYXRhRmllbGQ/LkFjdGlvblRhcmdldD8uaXNCb3VuZCAmJiBjdXJyZW50RW50aXR5VHlwZSA9PT0gZGF0YUZpZWxkPy5BY3Rpb25UYXJnZXQuc291cmNlRW50aXR5VHlwZTtcblx0XHRcdH0gZWxzZSBpZiAoZGF0YUZpZWxkLiRUeXBlID09PSBVSUFubm90YXRpb25UeXBlcy5EYXRhRmllbGRGb3JJbnRlbnRCYXNlZE5hdmlnYXRpb24pIHtcblx0XHRcdFx0cmV0dXJuIGRhdGFGaWVsZC5SZXF1aXJlc0NvbnRleHQ7XG5cdFx0XHR9XG5cdFx0fVxuXHRcdHJldHVybiBmYWxzZTtcblx0fSk7XG59XG5cbmZ1bmN0aW9uIGhhc0N1c3RvbUFjdGlvbnNBbHdheXNWaXNpYmxlSW5Ub29sQmFyKG1hbmlmZXN0QWN0aW9uczogUmVjb3JkPHN0cmluZywgQ3VzdG9tQWN0aW9uPik6IGJvb2xlYW4ge1xuXHRyZXR1cm4gT2JqZWN0LmtleXMobWFuaWZlc3RBY3Rpb25zKS5zb21lKGFjdGlvbktleSA9PiB7XG5cdFx0Y29uc3QgYWN0aW9uID0gbWFuaWZlc3RBY3Rpb25zW2FjdGlvbktleV07XG5cdFx0aWYgKGFjdGlvbi5yZXF1aXJlc1NlbGVjdGlvbiAmJiBhY3Rpb24udmlzaWJsZT8udG9TdHJpbmcoKSA9PT0gXCJ0cnVlXCIpIHtcblx0XHRcdHJldHVybiB0cnVlO1xuXHRcdH1cblx0XHRyZXR1cm4gZmFsc2U7XG5cdH0pO1xufVxuXG4vKipcbiAqIEl0ZXJhdGVzIG92ZXIgdGhlIGN1c3RvbSBhY3Rpb25zICh3aXRoIGtleSByZXF1aXJlc1NlbGVjdGlvbikgZGVjbGFyZWQgaW4gdGhlIG1hbmlmZXN0IGZvciB0aGUgY3VycmVudCBsaW5lIGl0ZW0gYW5kIHJldHVybnMgYWxsIHRoZVxuICogdmlzaWJsZSBrZXkgdmFsdWVzIGFzIGFuIGV4cHJlc3Npb24uXG4gKlxuICogQHBhcmFtIG1hbmlmZXN0QWN0aW9ucyBUaGUgYWN0aW9ucyBkZWZpbmVkIGluIHRoZSBtYW5pZmVzdFxuICogQHJldHVybnMgQXJyYXk8RXhwcmVzc2lvbjxib29sZWFuPj4gQWxsIHRoZSB2aXNpYmxlIHBhdGggZXhwcmVzc2lvbnMgb2YgdGhlIGFjdGlvbnMgdGhhdCBtZWV0IHRoZSBjcml0ZXJpYVxuICovXG5mdW5jdGlvbiBnZXRWaXNpYmxlRXhwRm9yQ3VzdG9tQWN0aW9uc1JlcXVpcmluZ0NvbnRleHQobWFuaWZlc3RBY3Rpb25zOiBSZWNvcmQ8c3RyaW5nLCBDdXN0b21BY3Rpb24+KTogRXhwcmVzc2lvbjxib29sZWFuPltdIHtcblx0Y29uc3QgYVZpc2libGVQYXRoRXhwcmVzc2lvbnM6IEV4cHJlc3Npb248Ym9vbGVhbj5bXSA9IFtdO1xuXHRpZiAobWFuaWZlc3RBY3Rpb25zKSB7XG5cdFx0T2JqZWN0LmtleXMobWFuaWZlc3RBY3Rpb25zKS5mb3JFYWNoKGFjdGlvbktleSA9PiB7XG5cdFx0XHRjb25zdCBhY3Rpb24gPSBtYW5pZmVzdEFjdGlvbnNbYWN0aW9uS2V5XTtcblx0XHRcdGlmIChhY3Rpb24ucmVxdWlyZXNTZWxlY3Rpb24gPT09IHRydWUgJiYgYWN0aW9uLnZpc2libGUgIT09IHVuZGVmaW5lZCkge1xuXHRcdFx0XHRpZiAodHlwZW9mIGFjdGlvbi52aXNpYmxlID09PSBcInN0cmluZ1wiKSB7XG5cdFx0XHRcdFx0LypUaGUgZmluYWwgYWltIHdvdWxkIGJlIHRvIGNoZWNrIGlmIHRoZSBwYXRoIGV4cHJlc3Npb24gZGVwZW5kcyBvbiB0aGUgcGFyZW50IGNvbnRleHRcblx0XHRcdFx0XHRhbmQgY29uc2lkZXJzIG9ubHkgdGhvc2UgZXhwcmVzc2lvbnMgZm9yIHRoZSBleHByZXNzaW9uIGV2YWx1YXRpb24sXG5cdFx0XHRcdFx0YnV0IGN1cnJlbnRseSBub3QgcG9zc2libGUgZnJvbSB0aGUgbWFuaWZlc3QgYXMgdGhlIHZpc2libGUga2V5IGlzIGJvdW5kIG9uIHRoZSBwYXJlbnQgZW50aXR5LlxuXHRcdFx0XHRcdFRyaWNreSB0byBkaWZmZXJlbnRpYXRlIHRoZSBwYXRoIGFzIGl0J3MgZG9uZSBmb3IgdGhlIEhpZGRlbiBhbm5vdGF0aW9uLlxuXHRcdFx0XHRcdEZvciB0aGUgdGltZSBiZWluZyB3ZSBjb25zaWRlciBhbGwgdGhlIHBhdGhzIG9mIHRoZSBtYW5pZmVzdCovXG5cblx0XHRcdFx0XHRhVmlzaWJsZVBhdGhFeHByZXNzaW9ucy5wdXNoKHJlc29sdmVCaW5kaW5nU3RyaW5nKGFjdGlvbj8udmlzaWJsZT8udmFsdWVPZigpKSk7XG5cdFx0XHRcdH1cblx0XHRcdH1cblx0XHR9KTtcblx0fVxuXHRyZXR1cm4gYVZpc2libGVQYXRoRXhwcmVzc2lvbnM7XG59XG5cbi8qKlxuICogRXZhbHVhdGUgaWYgdGhlIHBhdGggaXMgc3RhdGljYWxseSBkZWxldGFibGUgb3IgdXBkYXRhYmxlLlxuICpcbiAqIEBwYXJhbSBjb252ZXJ0ZXJDb250ZXh0XG4gKiBAcmV0dXJucyB7VGFibGVDYXBhYmlsaXR5UmVzdHJpY3Rpb259IFRoZSB0YWJsZSBjYXBhYmlsaXRpZXNcbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGdldENhcGFiaWxpdHlSZXN0cmljdGlvbihjb252ZXJ0ZXJDb250ZXh0OiBDb252ZXJ0ZXJDb250ZXh0KTogVGFibGVDYXBhYmlsaXR5UmVzdHJpY3Rpb24ge1xuXHRjb25zdCBpc0RlbGV0YWJsZSA9IGlzUGF0aERlbGV0YWJsZShjb252ZXJ0ZXJDb250ZXh0LmdldERhdGFNb2RlbE9iamVjdFBhdGgoKSk7XG5cdGNvbnN0IGlzVXBkYXRhYmxlID0gaXNQYXRoVXBkYXRhYmxlKGNvbnZlcnRlckNvbnRleHQuZ2V0RGF0YU1vZGVsT2JqZWN0UGF0aCgpKTtcblx0cmV0dXJuIHtcblx0XHRpc0RlbGV0YWJsZTogIShpc0NvbnN0YW50KGlzRGVsZXRhYmxlKSAmJiBpc0RlbGV0YWJsZS52YWx1ZSA9PT0gZmFsc2UpLFxuXHRcdGlzVXBkYXRhYmxlOiAhKGlzQ29uc3RhbnQoaXNVcGRhdGFibGUpICYmIGlzVXBkYXRhYmxlLnZhbHVlID09PSBmYWxzZSlcblx0fTtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGdldFNlbGVjdGlvbk1vZGUoXG5cdGxpbmVJdGVtQW5ub3RhdGlvbjogTGluZUl0ZW0gfCB1bmRlZmluZWQsXG5cdHZpc3VhbGl6YXRpb25QYXRoOiBzdHJpbmcsXG5cdGNvbnZlcnRlckNvbnRleHQ6IENvbnZlcnRlckNvbnRleHQsXG5cdGlzRW50aXR5U2V0OiBib29sZWFuLFxuXHR0YXJnZXRDYXBhYmlsaXRpZXM6IFRhYmxlQ2FwYWJpbGl0eVJlc3RyaWN0aW9uLFxuXHRpc0RlbGV0ZUJ1dHRvblZpc2libGU/OiBFeHByZXNzaW9uPGJvb2xlYW4+XG4pOiBzdHJpbmcgfCB1bmRlZmluZWQge1xuXHRpZiAoIWxpbmVJdGVtQW5ub3RhdGlvbikge1xuXHRcdHJldHVybiBTZWxlY3Rpb25Nb2RlLk5vbmU7XG5cdH1cblx0Y29uc3QgdGFibGVNYW5pZmVzdFNldHRpbmdzID0gY29udmVydGVyQ29udGV4dC5nZXRNYW5pZmVzdENvbnRyb2xDb25maWd1cmF0aW9uKHZpc3VhbGl6YXRpb25QYXRoKTtcblx0bGV0IHNlbGVjdGlvbk1vZGUgPSB0YWJsZU1hbmlmZXN0U2V0dGluZ3MudGFibGVTZXR0aW5ncz8uc2VsZWN0aW9uTW9kZTtcblx0bGV0IGFIaWRkZW5CaW5kaW5nRXhwcmVzc2lvbnM6IEV4cHJlc3Npb248Ym9vbGVhbj5bXSA9IFtdLFxuXHRcdGFWaXNpYmxlQmluZGluZ0V4cHJlc3Npb25zOiBFeHByZXNzaW9uPGJvb2xlYW4+W10gPSBbXTtcblx0Y29uc3QgbWFuaWZlc3RBY3Rpb25zID0gZ2V0QWN0aW9uc0Zyb21NYW5pZmVzdChcblx0XHRjb252ZXJ0ZXJDb250ZXh0LmdldE1hbmlmZXN0Q29udHJvbENvbmZpZ3VyYXRpb24odmlzdWFsaXphdGlvblBhdGgpLmFjdGlvbnMsXG5cdFx0Y29udmVydGVyQ29udGV4dCxcblx0XHRbXSxcblx0XHR1bmRlZmluZWQsXG5cdFx0ZmFsc2Vcblx0KTtcblx0bGV0IGlzUGFyZW50RGVsZXRhYmxlLCBwYXJlbnRFbnRpdHlTZXREZWxldGFibGU7XG5cdGlmIChjb252ZXJ0ZXJDb250ZXh0LmdldFRlbXBsYXRlVHlwZSgpID09PSBUZW1wbGF0ZVR5cGUuT2JqZWN0UGFnZSkge1xuXHRcdGlzUGFyZW50RGVsZXRhYmxlID0gaXNQYXRoRGVsZXRhYmxlKGNvbnZlcnRlckNvbnRleHQuZ2V0RGF0YU1vZGVsT2JqZWN0UGF0aCgpLCB1bmRlZmluZWQpO1xuXHRcdHBhcmVudEVudGl0eVNldERlbGV0YWJsZSA9IGlzUGFyZW50RGVsZXRhYmxlID8gY29tcGlsZUJpbmRpbmcoaXNQYXJlbnREZWxldGFibGUsIHRydWUpIDogaXNQYXJlbnREZWxldGFibGU7XG5cdH1cblx0aWYgKHNlbGVjdGlvbk1vZGUgJiYgc2VsZWN0aW9uTW9kZSA9PT0gU2VsZWN0aW9uTW9kZS5Ob25lICYmIGlzRGVsZXRlQnV0dG9uVmlzaWJsZSkge1xuXHRcdHJldHVybiBjb21waWxlQmluZGluZyhpZkVsc2UoaXNEZWxldGVCdXR0b25WaXNpYmxlLCBjb25zdGFudChcIk11bHRpXCIpLCBjb25zdGFudChcIk5vbmVcIikpKTtcblx0fVxuXHRpZiAoIXNlbGVjdGlvbk1vZGUgfHwgc2VsZWN0aW9uTW9kZSA9PT0gU2VsZWN0aW9uTW9kZS5BdXRvKSB7XG5cdFx0c2VsZWN0aW9uTW9kZSA9IFNlbGVjdGlvbk1vZGUuTXVsdGk7XG5cdH1cblxuXHRpZiAoXG5cdFx0aGFzQm91bmRBY3Rpb25zQWx3YXlzVmlzaWJsZUluVG9vbEJhcihsaW5lSXRlbUFubm90YXRpb24sIGNvbnZlcnRlckNvbnRleHQuZ2V0RW50aXR5VHlwZSgpKSB8fFxuXHRcdGhhc0N1c3RvbUFjdGlvbnNBbHdheXNWaXNpYmxlSW5Ub29sQmFyKG1hbmlmZXN0QWN0aW9ucylcblx0KSB7XG5cdFx0cmV0dXJuIHNlbGVjdGlvbk1vZGU7XG5cdH1cblx0YUhpZGRlbkJpbmRpbmdFeHByZXNzaW9ucyA9IGdldFVJSGlkZGVuRXhwRm9yQWN0aW9uc1JlcXVpcmluZ0NvbnRleHQoXG5cdFx0bGluZUl0ZW1Bbm5vdGF0aW9uLFxuXHRcdGNvbnZlcnRlckNvbnRleHQuZ2V0RW50aXR5VHlwZSgpLFxuXHRcdGNvbnZlcnRlckNvbnRleHQuZ2V0RGF0YU1vZGVsT2JqZWN0UGF0aCgpLFxuXHRcdGlzRW50aXR5U2V0XG5cdCk7XG5cdGFWaXNpYmxlQmluZGluZ0V4cHJlc3Npb25zID0gZ2V0VmlzaWJsZUV4cEZvckN1c3RvbUFjdGlvbnNSZXF1aXJpbmdDb250ZXh0KG1hbmlmZXN0QWN0aW9ucyk7XG5cblx0Ly8gTm8gYWN0aW9uIHJlcXVpcmluZyBhIGNvbnRleHQ6XG5cdGlmIChhSGlkZGVuQmluZGluZ0V4cHJlc3Npb25zLmxlbmd0aCA9PT0gMCAmJiBhVmlzaWJsZUJpbmRpbmdFeHByZXNzaW9ucy5sZW5ndGggPT09IDAgJiYgaXNEZWxldGVCdXR0b25WaXNpYmxlKSB7XG5cdFx0aWYgKCFpc0VudGl0eVNldCkge1xuXHRcdFx0aWYgKHRhcmdldENhcGFiaWxpdGllcy5pc0RlbGV0YWJsZSB8fCBwYXJlbnRFbnRpdHlTZXREZWxldGFibGUgIT09IFwiZmFsc2VcIikge1xuXHRcdFx0XHRyZXR1cm4gY29tcGlsZUJpbmRpbmcoXG5cdFx0XHRcdFx0aWZFbHNlKFxuXHRcdFx0XHRcdFx0YW5kKGVxdWFsKGJpbmRpbmdFeHByZXNzaW9uKFwiL2VkaXRNb2RlXCIsIFwidWlcIiksIFwiRWRpdGFibGVcIiksIGlzRGVsZXRlQnV0dG9uVmlzaWJsZSksXG5cdFx0XHRcdFx0XHRjb25zdGFudChzZWxlY3Rpb25Nb2RlKSxcblx0XHRcdFx0XHRcdGNvbnN0YW50KFNlbGVjdGlvbk1vZGUuTm9uZSlcblx0XHRcdFx0XHQpXG5cdFx0XHRcdCk7XG5cdFx0XHR9IGVsc2Uge1xuXHRcdFx0XHRyZXR1cm4gU2VsZWN0aW9uTW9kZS5Ob25lO1xuXHRcdFx0fVxuXHRcdFx0Ly8gRW50aXR5U2V0IGRlbGV0YWJsZTpcblx0XHR9IGVsc2UgaWYgKHRhcmdldENhcGFiaWxpdGllcy5pc0RlbGV0YWJsZSAmJiBpc0RlbGV0ZUJ1dHRvblZpc2libGUpIHtcblx0XHRcdHJldHVybiBjb21waWxlQmluZGluZyhpZkVsc2UoaXNEZWxldGVCdXR0b25WaXNpYmxlLCBjb25zdGFudChzZWxlY3Rpb25Nb2RlKSwgY29uc3RhbnQoXCJOb25lXCIpKSk7XG5cdFx0XHQvLyBFbnRpdHlTZXQgbm90IGRlbGV0YWJsZTpcblx0XHR9IGVsc2Uge1xuXHRcdFx0cmV0dXJuIFNlbGVjdGlvbk1vZGUuTm9uZTtcblx0XHR9XG5cdFx0Ly8gVGhlcmUgYXJlIGFjdGlvbnMgcmVxdWlyaW5nIGEgY29udGV4dDpcblx0fSBlbHNlIGlmICghaXNFbnRpdHlTZXQpIHtcblx0XHRpZiAodGFyZ2V0Q2FwYWJpbGl0aWVzLmlzRGVsZXRhYmxlIHx8IHBhcmVudEVudGl0eVNldERlbGV0YWJsZSAhPT0gXCJmYWxzZVwiKSB7XG5cdFx0XHRyZXR1cm4gY29tcGlsZUJpbmRpbmcoXG5cdFx0XHRcdGlmRWxzZShcblx0XHRcdFx0XHRlcXVhbChiaW5kaW5nRXhwcmVzc2lvbihcIi9lZGl0TW9kZVwiLCBcInVpXCIpLCBcIkVkaXRhYmxlXCIpLFxuXHRcdFx0XHRcdGNvbnN0YW50KHNlbGVjdGlvbk1vZGUpLFxuXHRcdFx0XHRcdGlmRWxzZShcblx0XHRcdFx0XHRcdG9yKC4uLmFIaWRkZW5CaW5kaW5nRXhwcmVzc2lvbnMuY29uY2F0KGFWaXNpYmxlQmluZGluZ0V4cHJlc3Npb25zKSksXG5cdFx0XHRcdFx0XHRjb25zdGFudChzZWxlY3Rpb25Nb2RlKSxcblx0XHRcdFx0XHRcdGNvbnN0YW50KFNlbGVjdGlvbk1vZGUuTm9uZSlcblx0XHRcdFx0XHQpXG5cdFx0XHRcdClcblx0XHRcdCk7XG5cdFx0fSBlbHNlIHtcblx0XHRcdHJldHVybiBjb21waWxlQmluZGluZyhcblx0XHRcdFx0aWZFbHNlKFxuXHRcdFx0XHRcdG9yKC4uLmFIaWRkZW5CaW5kaW5nRXhwcmVzc2lvbnMuY29uY2F0KGFWaXNpYmxlQmluZGluZ0V4cHJlc3Npb25zKSksXG5cdFx0XHRcdFx0Y29uc3RhbnQoc2VsZWN0aW9uTW9kZSksXG5cdFx0XHRcdFx0Y29uc3RhbnQoU2VsZWN0aW9uTW9kZS5Ob25lKVxuXHRcdFx0XHQpXG5cdFx0XHQpO1xuXHRcdH1cblx0XHQvL0VudGl0eVNldCBkZWxldGFibGU6XG5cdH0gZWxzZSBpZiAodGFyZ2V0Q2FwYWJpbGl0aWVzLmlzRGVsZXRhYmxlKSB7XG5cdFx0cmV0dXJuIFNlbGVjdGlvbk1vZGUuTXVsdGk7XG5cdFx0Ly9FbnRpdHlTZXQgbm90IGRlbGV0YWJsZTpcblx0fSBlbHNlIHtcblx0XHRyZXR1cm4gY29tcGlsZUJpbmRpbmcoXG5cdFx0XHRpZkVsc2UoXG5cdFx0XHRcdG9yKC4uLmFIaWRkZW5CaW5kaW5nRXhwcmVzc2lvbnMuY29uY2F0KGFWaXNpYmxlQmluZGluZ0V4cHJlc3Npb25zKSksXG5cdFx0XHRcdGNvbnN0YW50KHNlbGVjdGlvbk1vZGUpLFxuXHRcdFx0XHRjb25zdGFudChTZWxlY3Rpb25Nb2RlLk5vbmUpXG5cdFx0XHQpXG5cdFx0KTtcblx0fVxufVxuXG4vKipcbiAqIE1ldGhvZCB0byByZXRyaWV2ZSBhbGwgdGFibGUgYWN0aW9ucyBmcm9tIGFubm90YXRpb25zLlxuICpcbiAqIEBwYXJhbSBsaW5lSXRlbUFubm90YXRpb25cbiAqIEBwYXJhbSB2aXN1YWxpemF0aW9uUGF0aFxuICogQHBhcmFtIGNvbnZlcnRlckNvbnRleHRcbiAqIEByZXR1cm5zIHtSZWNvcmQ8QmFzZUFjdGlvbiwgQmFzZUFjdGlvbj59IFRoZSB0YWJsZSBhbm5vdGF0aW9uIGFjdGlvbnNcbiAqL1xuZnVuY3Rpb24gZ2V0VGFibGVBbm5vdGF0aW9uQWN0aW9ucyhsaW5lSXRlbUFubm90YXRpb246IExpbmVJdGVtLCB2aXN1YWxpemF0aW9uUGF0aDogc3RyaW5nLCBjb252ZXJ0ZXJDb250ZXh0OiBDb252ZXJ0ZXJDb250ZXh0KSB7XG5cdGNvbnN0IHRhYmxlQWN0aW9uczogQmFzZUFjdGlvbltdID0gW107XG5cdGNvbnN0IGhpZGRlblRhYmxlQWN0aW9uczogQmFzZUFjdGlvbltdID0gW107XG5cdGlmIChsaW5lSXRlbUFubm90YXRpb24pIHtcblx0XHRsaW5lSXRlbUFubm90YXRpb24uZm9yRWFjaCgoZGF0YUZpZWxkOiBEYXRhRmllbGRBYnN0cmFjdFR5cGVzKSA9PiB7XG5cdFx0XHRsZXQgdGFibGVBY3Rpb246IEFubm90YXRpb25BY3Rpb24gfCB1bmRlZmluZWQ7XG5cdFx0XHRpZiAoXG5cdFx0XHRcdGlzRGF0YUZpZWxkRm9yQWN0aW9uQWJzdHJhY3QoZGF0YUZpZWxkKSAmJlxuXHRcdFx0XHQhKGRhdGFGaWVsZC5hbm5vdGF0aW9ucz8uVUk/LkhpZGRlbj8udmFsdWVPZigpID09PSB0cnVlKSAmJlxuXHRcdFx0XHQhZGF0YUZpZWxkLklubGluZSAmJlxuXHRcdFx0XHQhZGF0YUZpZWxkLkRldGVybWluaW5nXG5cdFx0XHQpIHtcblx0XHRcdFx0Y29uc3Qga2V5ID0gS2V5SGVscGVyLmdlbmVyYXRlS2V5RnJvbURhdGFGaWVsZChkYXRhRmllbGQpO1xuXHRcdFx0XHRzd2l0Y2ggKGRhdGFGaWVsZC4kVHlwZSkge1xuXHRcdFx0XHRcdGNhc2UgXCJjb20uc2FwLnZvY2FidWxhcmllcy5VSS52MS5EYXRhRmllbGRGb3JBY3Rpb25cIjpcblx0XHRcdFx0XHRcdHRhYmxlQWN0aW9uID0ge1xuXHRcdFx0XHRcdFx0XHR0eXBlOiBBY3Rpb25UeXBlLkRhdGFGaWVsZEZvckFjdGlvbixcblx0XHRcdFx0XHRcdFx0YW5ub3RhdGlvblBhdGg6IGNvbnZlcnRlckNvbnRleHQuZ2V0RW50aXR5U2V0QmFzZWRBbm5vdGF0aW9uUGF0aChkYXRhRmllbGQuZnVsbHlRdWFsaWZpZWROYW1lKSxcblx0XHRcdFx0XHRcdFx0a2V5OiBrZXksXG5cdFx0XHRcdFx0XHRcdHZpc2libGU6IGNvbXBpbGVCaW5kaW5nKFxuXHRcdFx0XHRcdFx0XHRcdG5vdChcblx0XHRcdFx0XHRcdFx0XHRcdGVxdWFsKFxuXHRcdFx0XHRcdFx0XHRcdFx0XHRhbm5vdGF0aW9uRXhwcmVzc2lvbihcblx0XHRcdFx0XHRcdFx0XHRcdFx0XHRkYXRhRmllbGQuYW5ub3RhdGlvbnM/LlVJPy5IaWRkZW4sXG5cdFx0XHRcdFx0XHRcdFx0XHRcdFx0W10sXG5cdFx0XHRcdFx0XHRcdFx0XHRcdFx0dW5kZWZpbmVkLFxuXHRcdFx0XHRcdFx0XHRcdFx0XHRcdGNvbnZlcnRlckNvbnRleHQuZ2V0UmVsYXRpdmVNb2RlbFBhdGhGdW5jdGlvbigpXG5cdFx0XHRcdFx0XHRcdFx0XHRcdCksXG5cdFx0XHRcdFx0XHRcdFx0XHRcdHRydWVcblx0XHRcdFx0XHRcdFx0XHRcdClcblx0XHRcdFx0XHRcdFx0XHQpXG5cdFx0XHRcdFx0XHRcdCksXG5cdFx0XHRcdFx0XHRcdGlzTmF2aWdhYmxlOiB0cnVlXG5cdFx0XHRcdFx0XHR9O1xuXHRcdFx0XHRcdFx0YnJlYWs7XG5cblx0XHRcdFx0XHRjYXNlIFwiY29tLnNhcC52b2NhYnVsYXJpZXMuVUkudjEuRGF0YUZpZWxkRm9ySW50ZW50QmFzZWROYXZpZ2F0aW9uXCI6XG5cdFx0XHRcdFx0XHR0YWJsZUFjdGlvbiA9IHtcblx0XHRcdFx0XHRcdFx0dHlwZTogQWN0aW9uVHlwZS5EYXRhRmllbGRGb3JJbnRlbnRCYXNlZE5hdmlnYXRpb24sXG5cdFx0XHRcdFx0XHRcdGFubm90YXRpb25QYXRoOiBjb252ZXJ0ZXJDb250ZXh0LmdldEVudGl0eVNldEJhc2VkQW5ub3RhdGlvblBhdGgoZGF0YUZpZWxkLmZ1bGx5UXVhbGlmaWVkTmFtZSksXG5cdFx0XHRcdFx0XHRcdGtleToga2V5LFxuXHRcdFx0XHRcdFx0XHR2aXNpYmxlOiBjb21waWxlQmluZGluZyhcblx0XHRcdFx0XHRcdFx0XHRub3QoXG5cdFx0XHRcdFx0XHRcdFx0XHRlcXVhbChcblx0XHRcdFx0XHRcdFx0XHRcdFx0YW5ub3RhdGlvbkV4cHJlc3Npb24oXG5cdFx0XHRcdFx0XHRcdFx0XHRcdFx0ZGF0YUZpZWxkLmFubm90YXRpb25zPy5VST8uSGlkZGVuLFxuXHRcdFx0XHRcdFx0XHRcdFx0XHRcdFtdLFxuXHRcdFx0XHRcdFx0XHRcdFx0XHRcdHVuZGVmaW5lZCxcblx0XHRcdFx0XHRcdFx0XHRcdFx0XHRjb252ZXJ0ZXJDb250ZXh0LmdldFJlbGF0aXZlTW9kZWxQYXRoRnVuY3Rpb24oKVxuXHRcdFx0XHRcdFx0XHRcdFx0XHQpLFxuXHRcdFx0XHRcdFx0XHRcdFx0XHR0cnVlXG5cdFx0XHRcdFx0XHRcdFx0XHQpXG5cdFx0XHRcdFx0XHRcdFx0KVxuXHRcdFx0XHRcdFx0XHQpXG5cdFx0XHRcdFx0XHR9O1xuXHRcdFx0XHRcdFx0YnJlYWs7XG5cdFx0XHRcdFx0ZGVmYXVsdDpcblx0XHRcdFx0XHRcdGJyZWFrO1xuXHRcdFx0XHR9XG5cdFx0XHR9IGVsc2UgaWYgKGRhdGFGaWVsZC5hbm5vdGF0aW9ucz8uVUk/LkhpZGRlbj8udmFsdWVPZigpID09PSB0cnVlKSB7XG5cdFx0XHRcdGhpZGRlblRhYmxlQWN0aW9ucy5wdXNoKHtcblx0XHRcdFx0XHR0eXBlOiBBY3Rpb25UeXBlLkRlZmF1bHQsXG5cdFx0XHRcdFx0a2V5OiBLZXlIZWxwZXIuZ2VuZXJhdGVLZXlGcm9tRGF0YUZpZWxkKGRhdGFGaWVsZClcblx0XHRcdFx0fSk7XG5cdFx0XHR9XG5cdFx0XHRpZiAodGFibGVBY3Rpb24pIHtcblx0XHRcdFx0dGFibGVBY3Rpb25zLnB1c2godGFibGVBY3Rpb24pO1xuXHRcdFx0fVxuXHRcdH0pO1xuXHR9XG5cdHJldHVybiB7XG5cdFx0dGFibGVBY3Rpb25zOiB0YWJsZUFjdGlvbnMsXG5cdFx0aGlkZGVuVGFibGVBY3Rpb25zOiBoaWRkZW5UYWJsZUFjdGlvbnNcblx0fTtcbn1cblxuZnVuY3Rpb24gZ2V0SGlnaGxpZ2h0Um93QmluZGluZyhcblx0Y3JpdGljYWxpdHlBbm5vdGF0aW9uOiBQYXRoQW5ub3RhdGlvbkV4cHJlc3Npb248Q3JpdGljYWxpdHlUeXBlPiB8IEVudW1WYWx1ZTxDcml0aWNhbGl0eVR5cGU+IHwgdW5kZWZpbmVkLFxuXHRpc0RyYWZ0Um9vdDogYm9vbGVhbixcblx0dGFyZ2V0RW50aXR5VHlwZT86IEVudGl0eVR5cGVcbik6IEV4cHJlc3Npb248TWVzc2FnZVR5cGU+IHtcblx0bGV0IGRlZmF1bHRIaWdobGlnaHRSb3dEZWZpbml0aW9uOiBNZXNzYWdlVHlwZSB8IEV4cHJlc3Npb248TWVzc2FnZVR5cGU+ID0gTWVzc2FnZVR5cGUuTm9uZTtcblx0aWYgKGNyaXRpY2FsaXR5QW5ub3RhdGlvbikge1xuXHRcdGlmICh0eXBlb2YgY3JpdGljYWxpdHlBbm5vdGF0aW9uID09PSBcIm9iamVjdFwiKSB7XG5cdFx0XHRkZWZhdWx0SGlnaGxpZ2h0Um93RGVmaW5pdGlvbiA9IGFubm90YXRpb25FeHByZXNzaW9uKGNyaXRpY2FsaXR5QW5ub3RhdGlvbikgYXMgRXhwcmVzc2lvbjxNZXNzYWdlVHlwZT47XG5cdFx0fSBlbHNlIHtcblx0XHRcdC8vIEVudW0gVmFsdWUgc28gd2UgZ2V0IHRoZSBjb3JyZXNwb25kaW5nIHN0YXRpYyBwYXJ0XG5cdFx0XHRkZWZhdWx0SGlnaGxpZ2h0Um93RGVmaW5pdGlvbiA9IGdldE1lc3NhZ2VUeXBlRnJvbUNyaXRpY2FsaXR5VHlwZShjcml0aWNhbGl0eUFubm90YXRpb24pO1xuXHRcdH1cblx0fVxuXHRyZXR1cm4gaWZFbHNlKFxuXHRcdGlzRHJhZnRSb290ICYmIERyYWZ0LklzTmV3T2JqZWN0LFxuXHRcdE1lc3NhZ2VUeXBlLkluZm9ybWF0aW9uIGFzIE1lc3NhZ2VUeXBlLFxuXHRcdGZvcm1hdFJlc3VsdChcblx0XHRcdFtkZWZhdWx0SGlnaGxpZ2h0Um93RGVmaW5pdGlvbiwgYmluZGluZ0V4cHJlc3Npb24oYGZpbHRlcmVkTWVzc2FnZXNgLCBcImludGVybmFsXCIpXSxcblx0XHRcdHRhYmxlRm9ybWF0dGVycy5yb3dIaWdobGlnaHRpbmcsXG5cdFx0XHR0YXJnZXRFbnRpdHlUeXBlXG5cdFx0KVxuXHQpO1xufVxuXG5mdW5jdGlvbiBfZ2V0Q3JlYXRpb25CZWhhdmlvdXIoXG5cdGxpbmVJdGVtQW5ub3RhdGlvbjogTGluZUl0ZW0gfCB1bmRlZmluZWQsXG5cdHRhYmxlTWFuaWZlc3RDb25maWd1cmF0aW9uOiBUYWJsZUNvbnRyb2xDb25maWd1cmF0aW9uLFxuXHRjb252ZXJ0ZXJDb250ZXh0OiBDb252ZXJ0ZXJDb250ZXh0LFxuXHRuYXZpZ2F0aW9uU2V0dGluZ3M6IE5hdmlnYXRpb25TZXR0aW5nc0NvbmZpZ3VyYXRpb25cbik6IFRhYmxlQW5ub3RhdGlvbkNvbmZpZ3VyYXRpb25bXCJjcmVhdGVcIl0ge1xuXHRjb25zdCBuYXZpZ2F0aW9uID0gbmF2aWdhdGlvblNldHRpbmdzPy5jcmVhdGUgfHwgbmF2aWdhdGlvblNldHRpbmdzPy5kZXRhaWw7XG5cblx0Ly8gY3Jvc3MtYXBwXG5cdGlmIChuYXZpZ2F0aW9uPy5vdXRib3VuZCAmJiBuYXZpZ2F0aW9uLm91dGJvdW5kRGV0YWlsICYmIG5hdmlnYXRpb25TZXR0aW5ncz8uY3JlYXRlKSB7XG5cdFx0cmV0dXJuIHtcblx0XHRcdG1vZGU6IFwiRXh0ZXJuYWxcIixcblx0XHRcdG91dGJvdW5kOiBuYXZpZ2F0aW9uLm91dGJvdW5kLFxuXHRcdFx0b3V0Ym91bmREZXRhaWw6IG5hdmlnYXRpb24ub3V0Ym91bmREZXRhaWwsXG5cdFx0XHRuYXZpZ2F0aW9uU2V0dGluZ3M6IG5hdmlnYXRpb25TZXR0aW5nc1xuXHRcdH07XG5cdH1cblxuXHRsZXQgbmV3QWN0aW9uO1xuXHRpZiAobGluZUl0ZW1Bbm5vdGF0aW9uKSB7XG5cdFx0Ly8gaW4tYXBwXG5cdFx0Y29uc3QgdGFyZ2V0QW5ub3RhdGlvbnMgPSBjb252ZXJ0ZXJDb250ZXh0LmdldEVudGl0eVNldCgpPy5hbm5vdGF0aW9ucztcblx0XHRuZXdBY3Rpb24gPSB0YXJnZXRBbm5vdGF0aW9ucz8uQ29tbW9uPy5EcmFmdFJvb3Q/Lk5ld0FjdGlvbiB8fCB0YXJnZXRBbm5vdGF0aW9ucz8uU2Vzc2lvbj8uU3RpY2t5U2Vzc2lvblN1cHBvcnRlZD8uTmV3QWN0aW9uOyAvLyBUT0RPOiBJcyB0aGVyZSByZWFsbHkgbm8gJ05ld0FjdGlvbicgb24gRHJhZnROb2RlPyB0YXJnZXRBbm5vdGF0aW9ucz8uQ29tbW9uPy5EcmFmdE5vZGU/Lk5ld0FjdGlvblxuXG5cdFx0aWYgKHRhYmxlTWFuaWZlc3RDb25maWd1cmF0aW9uLmNyZWF0aW9uTW9kZSA9PT0gQ3JlYXRpb25Nb2RlLkNyZWF0aW9uUm93ICYmIG5ld0FjdGlvbikge1xuXHRcdFx0Ly8gQSBjb21iaW5hdGlvbiBvZiAnQ3JlYXRpb25Sb3cnIGFuZCAnTmV3QWN0aW9uJyBkb2VzIG5vdCBtYWtlIHNlbnNlXG5cdFx0XHQvLyBUT0RPOiBPciBkb2VzIGl0P1xuXHRcdFx0dGhyb3cgRXJyb3IoYENyZWF0aW9uIG1vZGUgJyR7Q3JlYXRpb25Nb2RlLkNyZWF0aW9uUm93fScgY2FuIG5vdCBiZSB1c2VkIHdpdGggYSBjdXN0b20gJ25ldycgYWN0aW9uICgke25ld0FjdGlvbn0pYCk7XG5cdFx0fVxuXHRcdGlmIChuYXZpZ2F0aW9uPy5yb3V0ZSkge1xuXHRcdFx0Ly8gcm91dGUgc3BlY2lmaWVkXG5cdFx0XHRyZXR1cm4ge1xuXHRcdFx0XHRtb2RlOiB0YWJsZU1hbmlmZXN0Q29uZmlndXJhdGlvbi5jcmVhdGlvbk1vZGUsXG5cdFx0XHRcdGFwcGVuZDogdGFibGVNYW5pZmVzdENvbmZpZ3VyYXRpb24uY3JlYXRlQXRFbmQsXG5cdFx0XHRcdG5ld0FjdGlvbjogbmV3QWN0aW9uPy50b1N0cmluZygpLFxuXHRcdFx0XHRuYXZpZ2F0ZVRvVGFyZ2V0OiB0YWJsZU1hbmlmZXN0Q29uZmlndXJhdGlvbi5jcmVhdGlvbk1vZGUgPT09IENyZWF0aW9uTW9kZS5OZXdQYWdlID8gbmF2aWdhdGlvbi5yb3V0ZSA6IHVuZGVmaW5lZCAvLyBuYXZpZ2F0ZSBvbmx5IGluIE5ld1BhZ2UgbW9kZVxuXHRcdFx0fTtcblx0XHR9XG5cdH1cblxuXHQvLyBubyBuYXZpZ2F0aW9uIG9yIG5vIHJvdXRlIHNwZWNpZmllZCAtIGZhbGxiYWNrIHRvIGlubGluZSBjcmVhdGUgaWYgb3JpZ2luYWwgY3JlYXRpb24gbW9kZSB3YXMgJ05ld1BhZ2UnXG5cdGlmICh0YWJsZU1hbmlmZXN0Q29uZmlndXJhdGlvbi5jcmVhdGlvbk1vZGUgPT09IENyZWF0aW9uTW9kZS5OZXdQYWdlKSB7XG5cdFx0dGFibGVNYW5pZmVzdENvbmZpZ3VyYXRpb24uY3JlYXRpb25Nb2RlID0gQ3JlYXRpb25Nb2RlLklubGluZTtcblx0fVxuXG5cdHJldHVybiB7XG5cdFx0bW9kZTogdGFibGVNYW5pZmVzdENvbmZpZ3VyYXRpb24uY3JlYXRpb25Nb2RlLFxuXHRcdGFwcGVuZDogdGFibGVNYW5pZmVzdENvbmZpZ3VyYXRpb24uY3JlYXRlQXRFbmQsXG5cdFx0bmV3QWN0aW9uOiBuZXdBY3Rpb24/LnRvU3RyaW5nKClcblx0fTtcbn1cblxuY29uc3QgX2dldFJvd0NvbmZpZ3VyYXRpb25Qcm9wZXJ0eSA9IGZ1bmN0aW9uKFxuXHRsaW5lSXRlbUFubm90YXRpb246IExpbmVJdGVtIHwgdW5kZWZpbmVkLFxuXHR2aXN1YWxpemF0aW9uUGF0aDogc3RyaW5nLFxuXHRjb252ZXJ0ZXJDb250ZXh0OiBDb252ZXJ0ZXJDb250ZXh0LFxuXHRuYXZpZ2F0aW9uU2V0dGluZ3M6IE5hdmlnYXRpb25TZXR0aW5nc0NvbmZpZ3VyYXRpb24sXG5cdHRhcmdldFBhdGg6IHN0cmluZ1xuKSB7XG5cdGxldCBwcmVzc1Byb3BlcnR5LCBuYXZpZ2F0aW9uVGFyZ2V0O1xuXHRsZXQgY3JpdGljYWxpdHlQcm9wZXJ0eTogRXhwcmVzc2lvbk9yUHJpbWl0aXZlPE1lc3NhZ2VUeXBlPiA9IE1lc3NhZ2VUeXBlLk5vbmU7XG5cdGNvbnN0IHRhcmdldEVudGl0eVR5cGUgPSBjb252ZXJ0ZXJDb250ZXh0LmdldEVudGl0eVR5cGUoKTtcblx0aWYgKG5hdmlnYXRpb25TZXR0aW5ncyAmJiBsaW5lSXRlbUFubm90YXRpb24pIHtcblx0XHRuYXZpZ2F0aW9uVGFyZ2V0ID0gbmF2aWdhdGlvblNldHRpbmdzLmRpc3BsYXk/LnRhcmdldCB8fCBuYXZpZ2F0aW9uU2V0dGluZ3MuZGV0YWlsPy5vdXRib3VuZDtcblx0XHRpZiAobmF2aWdhdGlvblRhcmdldCkge1xuXHRcdFx0cHJlc3NQcm9wZXJ0eSA9XG5cdFx0XHRcdFwiLmhhbmRsZXJzLm9uQ2hldnJvblByZXNzTmF2aWdhdGVPdXRCb3VuZCggJGNvbnRyb2xsZXIgLCdcIiArIG5hdmlnYXRpb25UYXJnZXQgKyBcIicsICR7JHBhcmFtZXRlcnM+YmluZGluZ0NvbnRleHR9KVwiO1xuXHRcdH0gZWxzZSBpZiAodGFyZ2V0RW50aXR5VHlwZSkge1xuXHRcdFx0Y29uc3QgdGFyZ2V0RW50aXR5U2V0ID0gY29udmVydGVyQ29udGV4dC5nZXRFbnRpdHlTZXQoKTtcblx0XHRcdG5hdmlnYXRpb25UYXJnZXQgPSBuYXZpZ2F0aW9uU2V0dGluZ3MuZGV0YWlsPy5yb3V0ZTtcblx0XHRcdGlmIChuYXZpZ2F0aW9uVGFyZ2V0KSB7XG5cdFx0XHRcdGNyaXRpY2FsaXR5UHJvcGVydHkgPSBnZXRIaWdobGlnaHRSb3dCaW5kaW5nKFxuXHRcdFx0XHRcdGxpbmVJdGVtQW5ub3RhdGlvbi5hbm5vdGF0aW9ucz8uVUk/LkNyaXRpY2FsaXR5LFxuXHRcdFx0XHRcdCEhdGFyZ2V0RW50aXR5U2V0Py5hbm5vdGF0aW9ucz8uQ29tbW9uPy5EcmFmdFJvb3QgfHwgISF0YXJnZXRFbnRpdHlTZXQ/LmFubm90YXRpb25zPy5Db21tb24/LkRyYWZ0Tm9kZSxcblx0XHRcdFx0XHR0YXJnZXRFbnRpdHlUeXBlXG5cdFx0XHRcdCk7XG5cdFx0XHRcdHByZXNzUHJvcGVydHkgPVxuXHRcdFx0XHRcdFwiQVBJLm9uVGFibGVSb3dQcmVzcygkZXZlbnQsICRjb250cm9sbGVyLCAkeyRwYXJhbWV0ZXJzPmJpbmRpbmdDb250ZXh0fSwgeyBjYWxsRXh0ZW5zaW9uOiB0cnVlLCB0YXJnZXRQYXRoOiAnXCIgK1xuXHRcdFx0XHRcdHRhcmdldFBhdGggK1xuXHRcdFx0XHRcdFwiJywgZWRpdGFibGUgOiBcIiArXG5cdFx0XHRcdFx0KHRhcmdldEVudGl0eVNldD8uYW5ub3RhdGlvbnM/LkNvbW1vbj8uRHJhZnRSb290IHx8IHRhcmdldEVudGl0eVNldD8uYW5ub3RhdGlvbnM/LkNvbW1vbj8uRHJhZnROb2RlXG5cdFx0XHRcdFx0XHQ/IFwiISR7JHBhcmFtZXRlcnM+YmluZGluZ0NvbnRleHR9LmdldFByb3BlcnR5KCdJc0FjdGl2ZUVudGl0eScpXCJcblx0XHRcdFx0XHRcdDogXCJ1bmRlZmluZWRcIikgK1xuXHRcdFx0XHRcdFwifSlcIjsgLy9OZWVkIHRvIGFjY2VzcyB0byBEcmFmdFJvb3QgYW5kIERyYWZ0Tm9kZSAhISEhISEhXG5cdFx0XHR9IGVsc2Uge1xuXHRcdFx0XHRjcml0aWNhbGl0eVByb3BlcnR5ID0gZ2V0SGlnaGxpZ2h0Um93QmluZGluZyhsaW5lSXRlbUFubm90YXRpb24uYW5ub3RhdGlvbnM/LlVJPy5Dcml0aWNhbGl0eSwgZmFsc2UsIHRhcmdldEVudGl0eVR5cGUpO1xuXHRcdFx0fVxuXHRcdH1cblx0fVxuXHRjb25zdCByb3dOYXZpZ2F0ZWRFeHByZXNzaW9uOiBFeHByZXNzaW9uPGJvb2xlYW4+ID0gZm9ybWF0UmVzdWx0KFxuXHRcdFtiaW5kaW5nRXhwcmVzc2lvbihcIi9kZWVwZXN0UGF0aFwiLCBcImludGVybmFsXCIpXSxcblx0XHR0YWJsZUZvcm1hdHRlcnMubmF2aWdhdGVkUm93LFxuXHRcdHRhcmdldEVudGl0eVR5cGVcblx0KTtcblx0cmV0dXJuIHtcblx0XHRwcmVzczogcHJlc3NQcm9wZXJ0eSxcblx0XHRhY3Rpb246IHByZXNzUHJvcGVydHkgPyBcIk5hdmlnYXRpb25cIiA6IHVuZGVmaW5lZCxcblx0XHRyb3dIaWdobGlnaHRpbmc6IGNvbXBpbGVCaW5kaW5nKGNyaXRpY2FsaXR5UHJvcGVydHkpLFxuXHRcdHJvd05hdmlnYXRlZDogY29tcGlsZUJpbmRpbmcocm93TmF2aWdhdGVkRXhwcmVzc2lvbilcblx0fTtcbn07XG5cbi8qKlxuICogUmV0cmlldmUgdGhlIGNvbHVtbnMgZnJvbSB0aGUgZW50aXR5VHlwZS5cbiAqXG4gKiBAcGFyYW0gY29sdW1uc1RvQmVDcmVhdGVkIFRoZSBjb2x1bW5zIHRvIGJlIGNyZWF0ZWQuXG4gKiBAcGFyYW0gZW50aXR5VHlwZSBUaGUgdGFyZ2V0IGVudGl0eSB0eXBlLlxuICogQHBhcmFtIGFubm90YXRpb25Db2x1bW5zIFRoZSBhcnJheSBvZiBjb2x1bW5zIGNyZWF0ZWQgYmFzZWQgb24gTGluZUl0ZW0gYW5ub3RhdGlvbnMuXG4gKiBAcGFyYW0gbm9uU29ydGFibGVDb2x1bW5zIFRoZSBhcnJheSBvZiBhbGwgbm9uIHNvcnRhYmxlIGNvbHVtbiBuYW1lcy5cbiAqIEBwYXJhbSBjb252ZXJ0ZXJDb250ZXh0IFRoZSBjb252ZXJ0ZXIgY29udGV4dC5cbiAqIEBwYXJhbSB0YWJsZVR5cGUgVGhlIHRhYmxlIHR5cGUuXG4gKiBAcmV0dXJucyB7QW5ub3RhdGlvblRhYmxlQ29sdW1uW119IFRoZSBjb2x1bW4gZnJvbSB0aGUgZW50aXR5VHlwZVxuICovXG5leHBvcnQgY29uc3QgZ2V0Q29sdW1uc0Zyb21FbnRpdHlUeXBlID0gZnVuY3Rpb24oXG5cdGNvbHVtbnNUb0JlQ3JlYXRlZDogUmVjb3JkPHN0cmluZywgUHJvcGVydHk+LFxuXHRlbnRpdHlUeXBlOiBFbnRpdHlUeXBlLFxuXHRhbm5vdGF0aW9uQ29sdW1uczogQW5ub3RhdGlvblRhYmxlQ29sdW1uW10gPSBbXSxcblx0bm9uU29ydGFibGVDb2x1bW5zOiBzdHJpbmdbXSxcblx0Y29udmVydGVyQ29udGV4dDogQ29udmVydGVyQ29udGV4dCxcblx0dGFibGVUeXBlOiBUYWJsZVR5cGVcbik6IEFubm90YXRpb25UYWJsZUNvbHVtbltdIHtcblx0Y29uc3QgdGFibGVDb2x1bW5zOiBBbm5vdGF0aW9uVGFibGVDb2x1bW5bXSA9IFtdO1xuXHQvLyBDYXRjaCBhbHJlYWR5IGV4aXN0aW5nIGNvbHVtbnMgLSB3aGljaCB3ZXJlIGFkZGVkIGJlZm9yZSBieSBMaW5lSXRlbSBBbm5vdGF0aW9uc1xuXHRjb25zdCBhZ2dyZWdhdGlvbkhlbHBlciA9IG5ldyBBZ2dyZWdhdGlvbkhlbHBlcihlbnRpdHlUeXBlLCBjb252ZXJ0ZXJDb250ZXh0KTtcblxuXHRlbnRpdHlUeXBlLmVudGl0eVByb3BlcnRpZXMuZm9yRWFjaCgocHJvcGVydHk6IFByb3BlcnR5KSA9PiB7XG5cdFx0Ly8gQ2F0Y2ggYWxyZWFkeSBleGlzdGluZyBjb2x1bW5zIC0gd2hpY2ggd2VyZSBhZGRlZCBiZWZvcmUgYnkgTGluZUl0ZW0gQW5ub3RhdGlvbnNcblx0XHRjb25zdCBleGlzdHMgPSBhbm5vdGF0aW9uQ29sdW1ucy5zb21lKGNvbHVtbiA9PiB7XG5cdFx0XHRyZXR1cm4gY29sdW1uLm5hbWUgPT09IHByb3BlcnR5Lm5hbWU7XG5cdFx0fSk7XG5cblx0XHQvLyBpZiB0YXJnZXQgdHlwZSBleGlzdHMsIGl0IGlzIGEgY29tcGxleCBwcm9wZXJ0eSBhbmQgc2hvdWxkIGJlIGlnbm9yZWRcblx0XHRpZiAoIXByb3BlcnR5LnRhcmdldFR5cGUgJiYgIWV4aXN0cykge1xuXHRcdFx0Y29uc3QgcmVsYXRlZFByb3BlcnRpZXNJbmZvOiBDb21wbGV4UHJvcGVydHlJbmZvID0gY29sbGVjdFJlbGF0ZWRQcm9wZXJ0aWVzKFxuXHRcdFx0XHRwcm9wZXJ0eS5uYW1lLFxuXHRcdFx0XHRwcm9wZXJ0eSxcblx0XHRcdFx0Y29udmVydGVyQ29udGV4dCxcblx0XHRcdFx0dHJ1ZSxcblx0XHRcdFx0dGFibGVUeXBlXG5cdFx0XHQpO1xuXHRcdFx0Y29uc3QgcmVsYXRlZFByb3BlcnR5TmFtZXM6IHN0cmluZ1tdID0gT2JqZWN0LmtleXMocmVsYXRlZFByb3BlcnRpZXNJbmZvLnByb3BlcnRpZXMpO1xuXHRcdFx0Y29uc3QgYWRkaXRpb25hbFByb3BlcnR5TmFtZXM6IHN0cmluZ1tdID0gT2JqZWN0LmtleXMocmVsYXRlZFByb3BlcnRpZXNJbmZvLmFkZGl0aW9uYWxQcm9wZXJ0aWVzKTtcblx0XHRcdGNvbnN0IGNvbHVtbkluZm8gPSBnZXRDb2x1bW5EZWZpbml0aW9uRnJvbVByb3BlcnR5KFxuXHRcdFx0XHRwcm9wZXJ0eSxcblx0XHRcdFx0Y29udmVydGVyQ29udGV4dC5nZXRFbnRpdHlTZXRCYXNlZEFubm90YXRpb25QYXRoKHByb3BlcnR5LmZ1bGx5UXVhbGlmaWVkTmFtZSksXG5cdFx0XHRcdHByb3BlcnR5Lm5hbWUsXG5cdFx0XHRcdHRydWUsXG5cdFx0XHRcdHRydWUsXG5cdFx0XHRcdG5vblNvcnRhYmxlQ29sdW1ucyxcblx0XHRcdFx0YWdncmVnYXRpb25IZWxwZXIsXG5cdFx0XHRcdGNvbnZlcnRlckNvbnRleHRcblx0XHRcdCk7XG5cdFx0XHRjb25zdCBzZW1hbnRpY0tleXMgPSBjb252ZXJ0ZXJDb250ZXh0LmdldEFubm90YXRpb25zQnlUZXJtKFwiQ29tbW9uXCIsIFwiY29tLnNhcC52b2NhYnVsYXJpZXMuQ29tbW9uLnYxLlNlbWFudGljS2V5XCIsIFtcblx0XHRcdFx0Y29udmVydGVyQ29udGV4dC5nZXRFbnRpdHlUeXBlKClcblx0XHRcdF0pWzBdO1xuXHRcdFx0Y29uc3Qgb0NvbHVtbkRyYWZ0SW5kaWNhdG9yID0gZ2V0RGVmYXVsdERyYWZ0SW5kaWNhdG9yRm9yQ29sdW1uKGNvbHVtbkluZm8ubmFtZSwgc2VtYW50aWNLZXlzKTtcblx0XHRcdGlmIChPYmplY3Qua2V5cyhvQ29sdW1uRHJhZnRJbmRpY2F0b3IpLmxlbmd0aCA+IDApIHtcblx0XHRcdFx0Y29sdW1uSW5mby5mb3JtYXRPcHRpb25zID0ge1xuXHRcdFx0XHRcdC4uLm9Db2x1bW5EcmFmdEluZGljYXRvclxuXHRcdFx0XHR9O1xuXHRcdFx0fVxuXHRcdFx0aWYgKHJlbGF0ZWRQcm9wZXJ0eU5hbWVzLmxlbmd0aCA+IDApIHtcblx0XHRcdFx0Y29sdW1uSW5mby5wcm9wZXJ0eUluZm9zID0gcmVsYXRlZFByb3BlcnR5TmFtZXM7XG5cdFx0XHRcdGNvbHVtbkluZm8uZXhwb3J0U2V0dGluZ3MgPSB7XG5cdFx0XHRcdFx0Li4uY29sdW1uSW5mby5leHBvcnRTZXR0aW5ncyxcblx0XHRcdFx0XHR0ZW1wbGF0ZTogcmVsYXRlZFByb3BlcnRpZXNJbmZvLmV4cG9ydFNldHRpbmdzVGVtcGxhdGUsXG5cdFx0XHRcdFx0d3JhcDogcmVsYXRlZFByb3BlcnRpZXNJbmZvLmV4cG9ydFNldHRpbmdzV3JhcHBpbmdcblx0XHRcdFx0fTtcblxuXHRcdFx0XHQvLyBDb2xsZWN0IGluZm9ybWF0aW9uIG9mIHJlbGF0ZWQgY29sdW1ucyB0byBiZSBjcmVhdGVkLlxuXHRcdFx0XHRyZWxhdGVkUHJvcGVydHlOYW1lcy5mb3JFYWNoKG5hbWUgPT4ge1xuXHRcdFx0XHRcdGNvbHVtbnNUb0JlQ3JlYXRlZFtuYW1lXSA9IHJlbGF0ZWRQcm9wZXJ0aWVzSW5mby5wcm9wZXJ0aWVzW25hbWVdO1xuXHRcdFx0XHR9KTtcblx0XHRcdH1cblxuXHRcdFx0aWYgKGFkZGl0aW9uYWxQcm9wZXJ0eU5hbWVzLmxlbmd0aCA+IDApIHtcblx0XHRcdFx0Y29sdW1uSW5mby5hZGRpdGlvbmFsUHJvcGVydHlJbmZvcyA9IGFkZGl0aW9uYWxQcm9wZXJ0eU5hbWVzO1xuXHRcdFx0XHQvLyBDcmVhdGUgY29sdW1ucyBmb3IgYWRkaXRpb25hbCBwcm9wZXJ0aWVzIGlkZW50aWZpZWQgZm9yIEFMUCB1c2UgY2FzZS5cblx0XHRcdFx0YWRkaXRpb25hbFByb3BlcnR5TmFtZXMuZm9yRWFjaChuYW1lID0+IHtcblx0XHRcdFx0XHQvLyBJbnRlbnRpb25hbCBvdmVyd3JpdGUgYXMgd2UgcmVxdWlyZSBvbmx5IG9uZSBuZXcgUHJvcGVydHlJbmZvIGZvciBhIHJlbGF0ZWQgUHJvcGVydHkuXG5cdFx0XHRcdFx0Y29sdW1uc1RvQmVDcmVhdGVkW25hbWVdID0gcmVsYXRlZFByb3BlcnRpZXNJbmZvLmFkZGl0aW9uYWxQcm9wZXJ0aWVzW25hbWVdO1xuXHRcdFx0XHR9KTtcblx0XHRcdH1cblx0XHRcdHRhYmxlQ29sdW1ucy5wdXNoKGNvbHVtbkluZm8pO1xuXHRcdH1cblx0fSk7XG5cdHJldHVybiB0YWJsZUNvbHVtbnM7XG59O1xuXG4vKipcbiAqIENyZWF0ZSBhIGNvbHVtbiBkZWZpbml0aW9uIGZyb20gYSBwcm9wZXJ0eS5cbiAqIEBwYXJhbSB7UHJvcGVydHl9IHByb3BlcnR5IEVudGl0eSB0eXBlIHByb3BlcnR5IGZvciB3aGljaCB0aGUgY29sdW1uIGlzIGNyZWF0ZWRcbiAqIEBwYXJhbSB7c3RyaW5nfSBmdWxsUHJvcGVydHlQYXRoIFRoZSBmdWxsIHBhdGggdG8gdGhlIHRhcmdldCBwcm9wZXJ0eVxuICogQHBhcmFtIHtzdHJpbmd9IHJlbGF0aXZlUGF0aCBUaGUgcmVsYXRpdmUgcGF0aCB0byB0aGUgdGFyZ2V0IHByb3BlcnR5IGJhc2VkIG9uIHRoZSBjb250ZXh0XG4gKiBAcGFyYW0ge2Jvb2xlYW59IHVzZURhdGFGaWVsZFByZWZpeCBTaG91bGQgYmUgcHJlZml4ZWQgd2l0aCBcIkRhdGFGaWVsZDo6XCIsIGVsc2UgaXQgd2lsbCBiZSBwcmVmaXhlZCB3aXRoIFwiUHJvcGVydHk6OlwiXG4gKiBAcGFyYW0ge2Jvb2xlYW59IGF2YWlsYWJsZUZvckFkYXB0YXRpb24gRGVjaWRlcyB3aGV0aGVyIGNvbHVtbiBzaG91bGQgYmUgYXZhaWxhYmxlIGZvciBhZGFwdGF0aW9uXG4gKiBAcGFyYW0ge3N0cmluZ1tdfSBub25Tb3J0YWJsZUNvbHVtbnMgVGhlIGFycmF5IG9mIGFsbCBub24gc29ydGFibGUgY29sdW1uIG5hbWVzXG4gKiBAcGFyYW0ge0FnZ3JlZ2F0aW9uSGVscGVyfSBhZ2dyZWdhdGlvbkhlbHBlciBUaGUgYWdncmVnYXRpb25IZWxwZXIgZm9yIHRoZSBlbnRpdHlcbiAqIEBwYXJhbSB7Q29udmVydGVyQ29udGV4dH0gY29udmVydGVyQ29udGV4dCBUaGUgY29udmVydGVyIGNvbnRleHRcbiAqIEByZXR1cm5zIHtBbm5vdGF0aW9uVGFibGVDb2x1bW59IFRoZSBhbm5vdGF0aW9uIGNvbHVtbiBkZWZpbml0aW9uXG4gKi9cbmNvbnN0IGdldENvbHVtbkRlZmluaXRpb25Gcm9tUHJvcGVydHkgPSBmdW5jdGlvbihcblx0cHJvcGVydHk6IFByb3BlcnR5LFxuXHRmdWxsUHJvcGVydHlQYXRoOiBzdHJpbmcsXG5cdHJlbGF0aXZlUGF0aDogc3RyaW5nLFxuXHR1c2VEYXRhRmllbGRQcmVmaXg6IGJvb2xlYW4sXG5cdGF2YWlsYWJsZUZvckFkYXB0YXRpb246IGJvb2xlYW4sXG5cdG5vblNvcnRhYmxlQ29sdW1uczogc3RyaW5nW10sXG5cdGFnZ3JlZ2F0aW9uSGVscGVyOiBBZ2dyZWdhdGlvbkhlbHBlcixcblx0Y29udmVydGVyQ29udGV4dDogQ29udmVydGVyQ29udGV4dFxuKTogQW5ub3RhdGlvblRhYmxlQ29sdW1uIHtcblx0Y29uc3QgbmFtZSA9IHVzZURhdGFGaWVsZFByZWZpeCA/IHJlbGF0aXZlUGF0aCA6IFwiUHJvcGVydHk6OlwiICsgcmVsYXRpdmVQYXRoO1xuXHRjb25zdCBrZXkgPSAodXNlRGF0YUZpZWxkUHJlZml4ID8gXCJEYXRhRmllbGQ6OlwiIDogXCJQcm9wZXJ0eTo6XCIpICsgcmVwbGFjZVNwZWNpYWxDaGFycyhyZWxhdGl2ZVBhdGgpO1xuXHRjb25zdCBzZW1hbnRpY09iamVjdEFubm90YXRpb25QYXRoID0gZ2V0U2VtYW50aWNPYmplY3RQYXRoKGNvbnZlcnRlckNvbnRleHQsIHByb3BlcnR5KTtcblx0Y29uc3QgaXNIaWRkZW4gPSBwcm9wZXJ0eS5hbm5vdGF0aW9ucz8uVUk/LkhpZGRlbj8udmFsdWVPZigpID09PSB0cnVlO1xuXHRjb25zdCBncm91cFBhdGg6IHN0cmluZyB8IHVuZGVmaW5lZCA9IHByb3BlcnR5Lm5hbWUgPyBfc2xpY2VBdFNsYXNoKHByb3BlcnR5Lm5hbWUsIHRydWUsIGZhbHNlKSA6IHVuZGVmaW5lZDtcblx0Y29uc3QgaXNHcm91cDogYm9vbGVhbiA9IGdyb3VwUGF0aCAhPSBwcm9wZXJ0eS5uYW1lO1xuXHRjb25zdCBpc0RhdGFQb2ludEZha2VQcm9wZXJ0eTogYm9vbGVhbiA9IG5hbWUuaW5kZXhPZihcIkBjb20uc2FwLnZvY2FidWxhcmllcy5VSS52MS5EYXRhUG9pbnRcIikgPiAtMTtcblx0Y29uc3QgZXhwb3J0VHlwZTogc3RyaW5nID0gX2dldEV4cG9ydERhdGFUeXBlKHByb3BlcnR5LnR5cGUpO1xuXHRjb25zdCBzRGF0ZUlucHV0Rm9ybWF0OiBzdHJpbmcgfCB1bmRlZmluZWQgPSBwcm9wZXJ0eS50eXBlID09PSBcIkVkbS5EYXRlXCIgPyBcIllZWVktTU0tRERcIiA6IHVuZGVmaW5lZDtcblx0Y29uc3QgZGF0YVR5cGU6IHN0cmluZyB8IHVuZGVmaW5lZCA9IGdldERhdGFGaWVsZERhdGFUeXBlKHByb3BlcnR5KTtcblx0Y29uc3QgcHJvcGVydHlUeXBlQ29uZmlnID0gIWlzRGF0YVBvaW50RmFrZVByb3BlcnR5ID8gZ2V0VHlwZUNvbmZpZyhwcm9wZXJ0eSwgZGF0YVR5cGUpIDogdW5kZWZpbmVkO1xuXHRjb25zdCBvVHlwZUNvbmZpZyA9ICFpc0RhdGFQb2ludEZha2VQcm9wZXJ0eVxuXHRcdD8ge1xuXHRcdFx0XHRjbGFzc05hbWU6IHByb3BlcnR5LnR5cGUgfHwgZGF0YVR5cGUsXG5cdFx0XHRcdG9Gb3JtYXRPcHRpb25zOiBwcm9wZXJ0eVR5cGVDb25maWcuZm9ybWF0T3B0aW9ucyxcblx0XHRcdFx0b0NvbnN0cmFpbnRzOiBwcm9wZXJ0eVR5cGVDb25maWcuY29uc3RyYWludHNcblx0XHQgIH1cblx0XHQ6IHVuZGVmaW5lZDtcblx0Y29uc3QgZXhwb3J0U2V0dGluZ3MgPSBpc0RhdGFQb2ludEZha2VQcm9wZXJ0eVxuXHRcdD8ge1xuXHRcdFx0XHR0ZW1wbGF0ZTogZ2V0VGFyZ2V0VmFsdWVPbkRhdGFQb2ludChwcm9wZXJ0eSlcblx0XHQgIH1cblx0XHQ6IHtcblx0XHRcdFx0dHlwZTogZXhwb3J0VHlwZSxcblx0XHRcdFx0aW5wdXRGb3JtYXQ6IHNEYXRlSW5wdXRGb3JtYXQsXG5cdFx0XHRcdHNjYWxlOiBwcm9wZXJ0eS5zY2FsZSxcblx0XHRcdFx0ZGVsaW1pdGVyOiBwcm9wZXJ0eS50eXBlID09PSBcIkVkbS5JbnQ2NFwiID8gdHJ1ZSA6IGZhbHNlLFxuXHRcdFx0XHR0cnVlVmFsdWU6IHByb3BlcnR5LnR5cGUgPT09IFwiRWRtLkJvb2xlYW5cIiA/IFwiWWVzXCIgOiB1bmRlZmluZWQsXG5cdFx0XHRcdGZhbHNlVmFsdWU6IHByb3BlcnR5LnR5cGUgPT09IFwiRWRtLkJvb2xlYW5cIiA/IFwiTm9cIiA6IHVuZGVmaW5lZFxuXHRcdCAgfTtcblx0cmV0dXJuIHtcblx0XHRrZXk6IGtleSxcblx0XHRpc0dyb3VwYWJsZTogIWlzRGF0YVBvaW50RmFrZVByb3BlcnR5ICYmICFpc0hpZGRlbiA/IGFnZ3JlZ2F0aW9uSGVscGVyLmlzUHJvcGVydHlHcm91cGFibGUocHJvcGVydHkpIDogZmFsc2UsXG5cdFx0dHlwZTogQ29sdW1uVHlwZS5Bbm5vdGF0aW9uLFxuXHRcdGxhYmVsOiBfZ2V0TGFiZWwocHJvcGVydHksIGlzR3JvdXApLFxuXHRcdGdyb3VwTGFiZWw6IGlzR3JvdXAgPyBfZ2V0TGFiZWwocHJvcGVydHkpIDogbnVsbCxcblx0XHRncm91cDogaXNHcm91cCA/IGdyb3VwUGF0aCA6IG51bGwsXG5cdFx0YW5ub3RhdGlvblBhdGg6IGZ1bGxQcm9wZXJ0eVBhdGgsXG5cdFx0c2VtYW50aWNPYmplY3RQYXRoOiBzZW1hbnRpY09iamVjdEFubm90YXRpb25QYXRoLFxuXHRcdC8vIEEgZmFrZSBwcm9wZXJ0eSB3YXMgY3JlYXRlZCBmb3IgdGhlIFRhcmdldFZhbHVlIHVzZWQgb24gRGF0YVBvaW50cywgdGhpcyBwcm9wZXJ0eSBzaG91bGQgYmUgaGlkZGVuIGFuZCBub24gc29ydGFibGVcblx0XHRhdmFpbGFiaWxpdHk6XG5cdFx0XHQhYXZhaWxhYmxlRm9yQWRhcHRhdGlvbiB8fCBpc0hpZGRlbiB8fCBpc0RhdGFQb2ludEZha2VQcm9wZXJ0eSA/IEF2YWlsYWJpbGl0eVR5cGUuSGlkZGVuIDogQXZhaWxhYmlsaXR5VHlwZS5BZGFwdGF0aW9uLFxuXHRcdG5hbWU6IG5hbWUsXG5cdFx0cmVsYXRpdmVQYXRoOiBpc0RhdGFQb2ludEZha2VQcm9wZXJ0eVxuXHRcdFx0PyAocHJvcGVydHkgYXMgYW55KS5hbm5vdGF0aW9ucz8uVUk/LkRhdGFGaWVsZERlZmF1bHQ/LlRhcmdldD8uJHRhcmdldD8uVmFsdWU/LnBhdGggfHwgKHByb3BlcnR5IGFzIGFueSkuVmFsdWUucGF0aFxuXHRcdFx0OiByZWxhdGl2ZVBhdGgsXG5cdFx0c29ydGFibGU6ICFpc0hpZGRlbiAmJiBub25Tb3J0YWJsZUNvbHVtbnMuaW5kZXhPZihyZWxhdGl2ZVBhdGgpID09PSAtMSAmJiAhaXNEYXRhUG9pbnRGYWtlUHJvcGVydHksXG5cdFx0aXNLZXk6IHByb3BlcnR5LmlzS2V5LFxuXHRcdGlzRGF0YVBvaW50RmFrZVRhcmdldFByb3BlcnR5OiBpc0RhdGFQb2ludEZha2VQcm9wZXJ0eSxcblx0XHRleHBvcnRTZXR0aW5nczogZXhwb3J0U2V0dGluZ3MsXG5cdFx0Y2FzZVNlbnNpdGl2ZTogaXNGaWx0ZXJpbmdDYXNlU2Vuc2l0aXZlKGNvbnZlcnRlckNvbnRleHQpLFxuXHRcdHR5cGVDb25maWc6IG9UeXBlQ29uZmlnLFxuXHRcdHZpc3VhbFNldHRpbmdzOiBpc0RhdGFQb2ludEZha2VQcm9wZXJ0eSA/IHsgd2lkdGhDYWxjdWxhdGlvbjogbnVsbCB9IDogdW5kZWZpbmVkXG5cdH0gYXMgQW5ub3RhdGlvblRhYmxlQ29sdW1uO1xufTtcblxuLyoqXG4gKiBSZXR1cm5zIEJvb2xlYW4gdHJ1ZSBmb3IgdmFsaWQgY29sdW1ucywgZmFsc2UgZm9yIGludmFsaWQgY29sdW1ucy5cbiAqXG4gKiBAcGFyYW0ge0RhdGFGaWVsZEFic3RyYWN0VHlwZXN9IGRhdGFGaWVsZCBEaWZmZXJlbnQgRGF0YUZpZWxkIHR5cGVzIGRlZmluZWQgaW4gdGhlIGFubm90YXRpb25zXG4gKiBAcmV0dXJucyB7Ym9vbGVhbn0gVHJ1ZSBmb3IgdmFsaWQgY29sdW1ucywgZmFsc2UgZm9yIGludmFsaWQgY29sdW1uc1xuICogQHByaXZhdGVcbiAqL1xuY29uc3QgX2lzVmFsaWRDb2x1bW4gPSBmdW5jdGlvbihkYXRhRmllbGQ6IERhdGFGaWVsZEFic3RyYWN0VHlwZXMpIHtcblx0c3dpdGNoIChkYXRhRmllbGQuJFR5cGUpIHtcblx0XHRjYXNlIFVJQW5ub3RhdGlvblR5cGVzLkRhdGFGaWVsZEZvckFjdGlvbjpcblx0XHRjYXNlIFVJQW5ub3RhdGlvblR5cGVzLkRhdGFGaWVsZEZvckludGVudEJhc2VkTmF2aWdhdGlvbjpcblx0XHRcdHJldHVybiAhIWRhdGFGaWVsZC5JbmxpbmU7XG5cdFx0Y2FzZSBVSUFubm90YXRpb25UeXBlcy5EYXRhRmllbGRXaXRoQWN0aW9uOlxuXHRcdGNhc2UgVUlBbm5vdGF0aW9uVHlwZXMuRGF0YUZpZWxkV2l0aEludGVudEJhc2VkTmF2aWdhdGlvbjpcblx0XHRcdHJldHVybiBmYWxzZTtcblx0XHRjYXNlIFVJQW5ub3RhdGlvblR5cGVzLkRhdGFGaWVsZDpcblx0XHRjYXNlIFVJQW5ub3RhdGlvblR5cGVzLkRhdGFGaWVsZFdpdGhVcmw6XG5cdFx0Y2FzZSBVSUFubm90YXRpb25UeXBlcy5EYXRhRmllbGRGb3JBbm5vdGF0aW9uOlxuXHRcdGNhc2UgVUlBbm5vdGF0aW9uVHlwZXMuRGF0YUZpZWxkV2l0aE5hdmlnYXRpb25QYXRoOlxuXHRcdFx0cmV0dXJuIHRydWU7XG5cdFx0ZGVmYXVsdDpcblx0XHQvLyBUb2RvOiBSZXBsYWNlIHdpdGggcHJvcGVyIExvZyBzdGF0ZW1lbnQgb25jZSBhdmFpbGFibGVcblx0XHQvLyAgdGhyb3cgbmV3IEVycm9yKFwiVW5oYW5kbGVkIERhdGFGaWVsZCBBYnN0cmFjdCB0eXBlOiBcIiArIGRhdGFGaWVsZC4kVHlwZSk7XG5cdH1cbn07XG5cbi8qKlxuICogUmV0dXJucyB0aGUgYmluZGluZyBleHByZXNzaW9uIHRvIGV2YWx1YXRlIHRoZSB2aXNpYmlsaXR5IG9mIGEgRGF0YUZpZWxkIG9yIERhdGFQb2ludCBhbm5vdGF0aW9uLlxuICpcbiAqIFNBUCBGaW9yaSBlbGVtZW50cyB3aWxsIGV2YWx1YXRlIGVpdGhlciB0aGUgVUkuSGlkZGVuIGFubm90YXRpb24gZGVmaW5lZCBvbiB0aGUgYW5ub3RhdGlvbiBpdHNlbGYgb3Igb24gdGhlIHRhcmdldCBwcm9wZXJ0eS5cbiAqXG4gKiBAcGFyYW0ge0RhdGFNb2RlbE9iamVjdFBhdGh9IGRhdGFGaWVsZE1vZGVsUGF0aCBUaGUgbWV0YXBhdGggcmVmZXJyaW5nIHRvIHRoZSBhbm5vdGF0aW9uIHRoYXQgaXMgZXZhbHVhdGVkIGJ5IFNBUCBGaW9yaSBlbGVtZW50cy5cbiAqIEBwYXJhbSB7RmllbGRGb3JtYXRPcHRpb25zfSBbZm9ybWF0T3B0aW9uc10gRm9ybWF0T3B0aW9ucyBpcyBvcHRpb25hbCwgdXNlZCB0byBjaGVjayBpZiB0aGUgYW5hbHl0aWMgdGFibGUgaGFzIEdyb3VwSGVhZGVyIGV4cGFuZGVkLlxuICogQHBhcmFtIHtib29sZWFufSBbcmV0dXJuRXhwcmVzc2lvbl0gUmV0dXJuRXhwcmVzc2lvbiBvcHRpb25hbC5cbiAqIEByZXR1cm5zIHtCaW5kaW5nRXhwcmVzc2lvbjxzdHJpbmc+fSBBbiBleHByZXNzaW9uIHRoYXQgeW91IGNhbiBiaW5kIHRvIHRoZSBVSS5cbiAqL1xuZXhwb3J0IGNvbnN0IF9nZXRWaXNpYmxlRXhwcmVzc2lvbiA9IGZ1bmN0aW9uKFxuXHRkYXRhRmllbGRNb2RlbFBhdGg6IERhdGFNb2RlbE9iamVjdFBhdGgsXG5cdGZvcm1hdE9wdGlvbnM/OiBhbnksXG5cdHJldHVybkV4cHJlc3Npb24/OiBCb29sZWFuXG4pOiBCaW5kaW5nRXhwcmVzc2lvbjxzdHJpbmc+IHtcblx0Y29uc3QgdGFyZ2V0T2JqZWN0OiBEYXRhRmllbGRBYnN0cmFjdFR5cGVzIHwgRGF0YVBvaW50VHlwZVR5cGVzID0gZGF0YUZpZWxkTW9kZWxQYXRoLnRhcmdldE9iamVjdDtcblx0bGV0IHByb3BlcnR5VmFsdWU7XG5cdGlmICh0YXJnZXRPYmplY3QpIHtcblx0XHRzd2l0Y2ggKHRhcmdldE9iamVjdC4kVHlwZSkge1xuXHRcdFx0Y2FzZSBVSUFubm90YXRpb25UeXBlcy5EYXRhRmllbGQ6XG5cdFx0XHRjYXNlIFVJQW5ub3RhdGlvblR5cGVzLkRhdGFGaWVsZFdpdGhVcmw6XG5cdFx0XHRjYXNlIFVJQW5ub3RhdGlvblR5cGVzLkRhdGFGaWVsZFdpdGhOYXZpZ2F0aW9uUGF0aDpcblx0XHRcdGNhc2UgVUlBbm5vdGF0aW9uVHlwZXMuRGF0YUZpZWxkV2l0aEludGVudEJhc2VkTmF2aWdhdGlvbjpcblx0XHRcdGNhc2UgVUlBbm5vdGF0aW9uVHlwZXMuRGF0YUZpZWxkV2l0aEFjdGlvbjpcblx0XHRcdGNhc2UgVUlBbm5vdGF0aW9uVHlwZXMuRGF0YVBvaW50VHlwZTpcblx0XHRcdFx0cHJvcGVydHlWYWx1ZSA9IHRhcmdldE9iamVjdC5WYWx1ZS4kdGFyZ2V0O1xuXHRcdFx0XHRicmVhaztcblx0XHRcdGNhc2UgVUlBbm5vdGF0aW9uVHlwZXMuRGF0YUZpZWxkRm9yQW5ub3RhdGlvbjpcblx0XHRcdFx0Ly8gaWYgaXQgaXMgYSBEYXRhRmllbGRGb3JBbm5vdGF0aW9uIHBvaW50aW5nIHRvIGEgRGF0YVBvaW50IHdlIGxvb2sgYXQgdGhlIGRhdGFQb2ludCdzIHZhbHVlXG5cdFx0XHRcdGlmICh0YXJnZXRPYmplY3Q/LlRhcmdldD8uJHRhcmdldD8uJFR5cGUgPT09IFVJQW5ub3RhdGlvblR5cGVzLkRhdGFQb2ludFR5cGUpIHtcblx0XHRcdFx0XHRwcm9wZXJ0eVZhbHVlID0gdGFyZ2V0T2JqZWN0LlRhcmdldC4kdGFyZ2V0Py5WYWx1ZS4kdGFyZ2V0O1xuXHRcdFx0XHR9XG5cdFx0XHRcdGJyZWFrO1xuXHRcdFx0Y2FzZSBVSUFubm90YXRpb25UeXBlcy5EYXRhRmllbGRGb3JJbnRlbnRCYXNlZE5hdmlnYXRpb246XG5cdFx0XHRjYXNlIFVJQW5ub3RhdGlvblR5cGVzLkRhdGFGaWVsZEZvckFjdGlvbjpcblx0XHRcdGRlZmF1bHQ6XG5cdFx0XHRcdHByb3BlcnR5VmFsdWUgPSB1bmRlZmluZWQ7XG5cdFx0fVxuXHR9XG5cdGNvbnN0IGlzQW5hbHl0aWNhbEdyb3VwSGVhZGVyRXhwYW5kZWQgPSBmb3JtYXRPcHRpb25zPy5pc0FuYWx5dGljcyA/IFVJLklzRXhwYW5kZWQgOiBjb25zdGFudChmYWxzZSk7XG5cdGNvbnN0IGlzQW5hbHl0aWNhbExlYWYgPSBmb3JtYXRPcHRpb25zPy5pc0FuYWx5dGljcyA/IGVxdWFsKFVJLk5vZGVMZXZlbCwgMCkgOiBjb25zdGFudChmYWxzZSk7XG5cblx0Ly8gQSBkYXRhIGZpZWxkIGlzIHZpc2libGUgaWY6XG5cdC8vIC0gdGhlIFVJLkhpZGRlbiBleHByZXNzaW9uIGluIHRoZSBvcmlnaW5hbCBhbm5vdGF0aW9uIGRvZXMgbm90IGV2YWx1YXRlIHRvICd0cnVlJ1xuXHQvLyAtIHRoZSBVSS5IaWRkZW4gZXhwcmVzc2lvbiBpbiB0aGUgdGFyZ2V0IHByb3BlcnR5IGRvZXMgbm90IGV2YWx1YXRlIHRvICd0cnVlJ1xuXHQvLyAtIGluIGNhc2Ugb2YgQW5hbHl0aWNzIGl0J3Mgbm90IHZpc2libGUgZm9yIGFuIGV4cGFuZGVkIEdyb3VwSGVhZGVyXG5cdGNvbnN0IGV4cHJlc3Npb24gPSBhbmQoXG5cdFx0Li4uW1xuXHRcdFx0bm90KGVxdWFsKGFubm90YXRpb25FeHByZXNzaW9uKHRhcmdldE9iamVjdD8uYW5ub3RhdGlvbnM/LlVJPy5IaWRkZW4pLCB0cnVlKSksXG5cdFx0XHRpZkVsc2UoISFwcm9wZXJ0eVZhbHVlLCBwcm9wZXJ0eVZhbHVlICYmIG5vdChlcXVhbChhbm5vdGF0aW9uRXhwcmVzc2lvbihwcm9wZXJ0eVZhbHVlLmFubm90YXRpb25zPy5VST8uSGlkZGVuKSwgdHJ1ZSkpLCB0cnVlKSxcblx0XHRcdG9yKG5vdChpc0FuYWx5dGljYWxHcm91cEhlYWRlckV4cGFuZGVkKSwgaXNBbmFseXRpY2FsTGVhZilcblx0XHRdXG5cdCk7XG5cdHJldHVybiByZXR1cm5FeHByZXNzaW9uID8gKGV4cHJlc3Npb24gYXMgQmluZGluZ0V4cHJlc3Npb248c3RyaW5nPikgOiBjb21waWxlQmluZGluZyhleHByZXNzaW9uKTtcbn07XG5cbi8qKlxuICogUmV0dXJucyBoaWRkZW4gYmluZGluZyBleHByZXNzaW9ucyBmb3IgYSBmaWVsZCBncm91cC5cbiAqIEBwYXJhbSB7RGF0YUZpZWxkQWJzdHJhY3RUeXBlc30gZGF0YUZpZWxkR3JvdXAgRGF0YUZpZWxkIGRlZmluZWQgaW4gdGhlIGFubm90YXRpb25zXG4gKiBAcGFyYW0ge0ZpZWxkRm9ybWF0T3B0aW9uc30gW2ZpZWxkRm9ybWF0T3B0aW9uc10gRm9ybWF0T3B0aW9ucyBpcyBvcHRpb25hbCwgdXNlZCB0byBjaGVjayBpZiB0aGUgYW5hbHl0aWMgdGFibGUgaGFzIEdyb3VwSGVhZGVyIGV4cGFuZGVkLlxuICogQHJldHVybnMge0JpbmRpbmdFeHByZXNzaW9uPHN0cmluZz59IENvbXBpbGUgYmluZGluZyBvZiBmaWVsZCBncm91cCBleHByZXNzaW9ucy5cbiAqIEBwcml2YXRlXG4gKi9cbmNvbnN0IF9nZXRGaWVsZEdyb3VwSGlkZGVuRXhwcmVzc2lvbnMgPSBmdW5jdGlvbihcblx0ZGF0YUZpZWxkR3JvdXA6IERhdGFGaWVsZEFic3RyYWN0VHlwZXMsXG5cdGZpZWxkRm9ybWF0T3B0aW9uczogYW55XG4pOiBCaW5kaW5nRXhwcmVzc2lvbjxzdHJpbmc+IHtcblx0Y29uc3QgYUZpZWxkR3JvdXBIaWRkZW5FeHByZXNzaW9uczogQmluZGluZ0V4cHJlc3Npb248c3RyaW5nPltdID0gW107XG5cdGlmIChcblx0XHRkYXRhRmllbGRHcm91cC4kVHlwZSA9PT0gVUlBbm5vdGF0aW9uVHlwZXMuRGF0YUZpZWxkRm9yQW5ub3RhdGlvbiAmJlxuXHRcdGRhdGFGaWVsZEdyb3VwLlRhcmdldD8uJHRhcmdldD8uJFR5cGUgPT09IFVJQW5ub3RhdGlvblR5cGVzLkZpZWxkR3JvdXBUeXBlXG5cdCkge1xuXHRcdGRhdGFGaWVsZEdyb3VwLlRhcmdldC4kdGFyZ2V0LkRhdGE/LmZvckVhY2goKGlubmVyRGF0YUZpZWxkOiBEYXRhRmllbGRBYnN0cmFjdFR5cGVzIHwgRGF0YVBvaW50VHlwZVR5cGVzKSA9PiB7XG5cdFx0XHRhRmllbGRHcm91cEhpZGRlbkV4cHJlc3Npb25zLnB1c2goXG5cdFx0XHRcdF9nZXRWaXNpYmxlRXhwcmVzc2lvbih7IHRhcmdldE9iamVjdDogaW5uZXJEYXRhRmllbGQgfSBhcyBEYXRhTW9kZWxPYmplY3RQYXRoLCBmaWVsZEZvcm1hdE9wdGlvbnMsIHRydWUpXG5cdFx0XHQpO1xuXHRcdH0pO1xuXHRcdHJldHVybiBjb21waWxlQmluZGluZyhcblx0XHRcdGlmRWxzZShvciguLi4oYUZpZWxkR3JvdXBIaWRkZW5FeHByZXNzaW9ucyBhcyBFeHByZXNzaW9uT3JQcmltaXRpdmU8Ym9vbGVhbj5bXSkpLCBjb25zdGFudCh0cnVlKSwgY29uc3RhbnQoZmFsc2UpKVxuXHRcdCk7XG5cdH1cbn07XG5cbi8qKlxuICogUmV0dXJucyB0aGUgbGFiZWwgZm9yIHRoZSBwcm9wZXJ0eSBhbmQgZGF0YUZpZWxkLlxuICogQHBhcmFtIHtEYXRhRmllbGRBYnN0cmFjdFR5cGVzIHwgUHJvcGVydHl9IFtwcm9wZXJ0eV0gUHJvcGVydHkgb3IgRGF0YUZpZWxkIGRlZmluZWQgaW4gdGhlIGFubm90YXRpb25zXG4gKiBAcGFyYW0gaXNHcm91cFxuICogQHJldHVybnMge3N0cmluZ30gTGFiZWwgb2YgdGhlIHByb3BlcnR5IG9yIERhdGFGaWVsZFxuICogQHByaXZhdGVcbiAqL1xuY29uc3QgX2dldExhYmVsID0gZnVuY3Rpb24ocHJvcGVydHk6IERhdGFGaWVsZEFic3RyYWN0VHlwZXMgfCBQcm9wZXJ0eSwgaXNHcm91cDogYm9vbGVhbiA9IGZhbHNlKTogc3RyaW5nIHwgdW5kZWZpbmVkIHtcblx0aWYgKCFwcm9wZXJ0eSkge1xuXHRcdHJldHVybiB1bmRlZmluZWQ7XG5cdH1cblx0aWYgKGlzUHJvcGVydHkocHJvcGVydHkpKSB7XG5cdFx0Y29uc3QgZGF0YUZpZWxkRGVmYXVsdCA9IHByb3BlcnR5LmFubm90YXRpb25zPy5VST8uRGF0YUZpZWxkRGVmYXVsdDtcblx0XHRpZiAoZGF0YUZpZWxkRGVmYXVsdCAmJiAhZGF0YUZpZWxkRGVmYXVsdC5xdWFsaWZpZXIgJiYgZGF0YUZpZWxkRGVmYXVsdC5MYWJlbD8udmFsdWVPZigpKSB7XG5cdFx0XHRyZXR1cm4gY29tcGlsZUJpbmRpbmcoYW5ub3RhdGlvbkV4cHJlc3Npb24oZGF0YUZpZWxkRGVmYXVsdC5MYWJlbD8udmFsdWVPZigpKSk7XG5cdFx0fVxuXHRcdHJldHVybiBjb21waWxlQmluZGluZyhhbm5vdGF0aW9uRXhwcmVzc2lvbihwcm9wZXJ0eS5hbm5vdGF0aW9ucy5Db21tb24/LkxhYmVsPy52YWx1ZU9mKCkgfHwgcHJvcGVydHkubmFtZSkpO1xuXHR9IGVsc2UgaWYgKGlzRGF0YUZpZWxkVHlwZXMocHJvcGVydHkpKSB7XG5cdFx0aWYgKCEhaXNHcm91cCAmJiBwcm9wZXJ0eS4kVHlwZSA9PT0gVUlBbm5vdGF0aW9uVHlwZXMuRGF0YUZpZWxkV2l0aEludGVudEJhc2VkTmF2aWdhdGlvbikge1xuXHRcdFx0cmV0dXJuIGNvbXBpbGVCaW5kaW5nKGFubm90YXRpb25FeHByZXNzaW9uKHByb3BlcnR5LkxhYmVsPy52YWx1ZU9mKCkpKTtcblx0XHR9XG5cdFx0cmV0dXJuIGNvbXBpbGVCaW5kaW5nKFxuXHRcdFx0YW5ub3RhdGlvbkV4cHJlc3Npb24oXG5cdFx0XHRcdHByb3BlcnR5LkxhYmVsPy52YWx1ZU9mKCkgfHwgcHJvcGVydHkuVmFsdWU/LiR0YXJnZXQ/LmFubm90YXRpb25zPy5Db21tb24/LkxhYmVsPy52YWx1ZU9mKCkgfHwgcHJvcGVydHkuVmFsdWU/LiR0YXJnZXQ/Lm5hbWVcblx0XHRcdClcblx0XHQpO1xuXHR9IGVsc2UgaWYgKHByb3BlcnR5LiRUeXBlID09PSBVSUFubm90YXRpb25UeXBlcy5EYXRhRmllbGRGb3JBbm5vdGF0aW9uKSB7XG5cdFx0cmV0dXJuIGNvbXBpbGVCaW5kaW5nKFxuXHRcdFx0YW5ub3RhdGlvbkV4cHJlc3Npb24oXG5cdFx0XHRcdHByb3BlcnR5LkxhYmVsPy52YWx1ZU9mKCkgfHwgKHByb3BlcnR5LlRhcmdldD8uJHRhcmdldCBhcyBEYXRhUG9pbnQpPy5WYWx1ZT8uJHRhcmdldD8uYW5ub3RhdGlvbnM/LkNvbW1vbj8uTGFiZWw/LnZhbHVlT2YoKVxuXHRcdFx0KVxuXHRcdCk7XG5cdH0gZWxzZSB7XG5cdFx0cmV0dXJuIGNvbXBpbGVCaW5kaW5nKGFubm90YXRpb25FeHByZXNzaW9uKHByb3BlcnR5LkxhYmVsPy52YWx1ZU9mKCkpKTtcblx0fVxufTtcblxuLyoqXG4gKiBDcmVhdGVzIGEgUHJvcGVydHlJbmZvIGZvciBlYWNoIGlkZW50aWZpZWQgcHJvcGVydHkgY29uc3VtZWQgYnkgYSBMaW5lSXRlbS5cbiAqXG4gKiBAcGFyYW0ge1JlY29yZDxzdHJpbmcsIFByb3BlcnR5Pn0gY29sdW1uc1RvQmVDcmVhdGVkIElkZW50aWZpZWQgcHJvcGVydGllcy5cbiAqIEBwYXJhbSBleGlzdGluZ0NvbHVtbnMgVGhlIGxpc3Qgb2YgY29sdW1ucyBjcmVhdGVkIGZvciBMaW5lSXRlbXMgYW5kIFByb3BlcnRpZXMgb2YgZW50aXR5VHlwZS5cbiAqIEBwYXJhbSBub25Tb3J0YWJsZUNvbHVtbnMgVGhlIGFycmF5IG9mIGNvbHVtbiBuYW1lcyB3aGljaCBjYW5ub3QgYmUgc29ydGVkLlxuICogQHBhcmFtIGNvbnZlcnRlckNvbnRleHQgVGhlIGNvbnZlcnRlciBjb250ZXh0LlxuICogQHBhcmFtIGVudGl0eVR5cGUgVGhlIGVudGl0eSB0eXBlIGZvciB0aGUgTGluZUl0ZW1cbiAqIEByZXR1cm5zIHtBbm5vdGF0aW9uVGFibGVDb2x1bW5bXX0gVGhlIGFycmF5IG9mIGNvbHVtbnMgY3JlYXRlZC5cbiAqL1xuY29uc3QgX2NyZWF0ZVJlbGF0ZWRDb2x1bW5zID0gZnVuY3Rpb24oXG5cdGNvbHVtbnNUb0JlQ3JlYXRlZDogUmVjb3JkPHN0cmluZywgUHJvcGVydHk+LFxuXHRleGlzdGluZ0NvbHVtbnM6IEFubm90YXRpb25UYWJsZUNvbHVtbltdLFxuXHRub25Tb3J0YWJsZUNvbHVtbnM6IHN0cmluZ1tdLFxuXHRjb252ZXJ0ZXJDb250ZXh0OiBDb252ZXJ0ZXJDb250ZXh0LFxuXHRlbnRpdHlUeXBlOiBFbnRpdHlUeXBlXG4pOiBBbm5vdGF0aW9uVGFibGVDb2x1bW5bXSB7XG5cdGNvbnN0IHJlbGF0ZWRDb2x1bW5zOiBBbm5vdGF0aW9uVGFibGVDb2x1bW5bXSA9IFtdO1xuXHRjb25zdCByZWxhdGVkUHJvcGVydHlOYW1lTWFwOiBSZWNvcmQ8c3RyaW5nLCBzdHJpbmc+ID0ge307XG5cdGNvbnN0IGFnZ3JlZ2F0aW9uSGVscGVyID0gbmV3IEFnZ3JlZ2F0aW9uSGVscGVyKGVudGl0eVR5cGUsIGNvbnZlcnRlckNvbnRleHQpO1xuXG5cdE9iamVjdC5rZXlzKGNvbHVtbnNUb0JlQ3JlYXRlZCkuZm9yRWFjaChuYW1lID0+IHtcblx0XHRjb25zdCBwcm9wZXJ0eSA9IGNvbHVtbnNUb0JlQ3JlYXRlZFtuYW1lXSxcblx0XHRcdGFubm90YXRpb25QYXRoID0gY29udmVydGVyQ29udGV4dC5nZXRBYnNvbHV0ZUFubm90YXRpb25QYXRoKG5hbWUpLFxuXHRcdFx0Ly8gQ2hlY2sgd2hldGhlciB0aGUgcmVsYXRlZCBjb2x1bW4gYWxyZWFkeSBleGlzdHMuXG5cdFx0XHRyZWxhdGVkQ29sdW1uID0gZXhpc3RpbmdDb2x1bW5zLmZpbmQoY29sdW1uID0+IGNvbHVtbi5uYW1lID09PSBuYW1lKTtcblx0XHRpZiAocmVsYXRlZENvbHVtbiA9PT0gdW5kZWZpbmVkKSB7XG5cdFx0XHQvLyBDYXNlIDE6IEtleSBjb250YWlucyBEYXRhRmllbGQgcHJlZml4IHRvIGVuc3VyZSBhbGwgcHJvcGVydHkgY29sdW1ucyBoYXZlIHRoZSBzYW1lIGtleSBmb3JtYXQuXG5cdFx0XHQvLyBOZXcgY3JlYXRlZCBwcm9wZXJ0eSBjb2x1bW4gaXMgc2V0IHRvIGhpZGRlbi5cblx0XHRcdHJlbGF0ZWRDb2x1bW5zLnB1c2goXG5cdFx0XHRcdGdldENvbHVtbkRlZmluaXRpb25Gcm9tUHJvcGVydHkoXG5cdFx0XHRcdFx0cHJvcGVydHksXG5cdFx0XHRcdFx0YW5ub3RhdGlvblBhdGgsXG5cdFx0XHRcdFx0bmFtZSxcblx0XHRcdFx0XHR0cnVlLFxuXHRcdFx0XHRcdGZhbHNlLFxuXHRcdFx0XHRcdG5vblNvcnRhYmxlQ29sdW1ucyxcblx0XHRcdFx0XHRhZ2dyZWdhdGlvbkhlbHBlcixcblx0XHRcdFx0XHRjb252ZXJ0ZXJDb250ZXh0XG5cdFx0XHRcdClcblx0XHRcdCk7XG5cdFx0fSBlbHNlIGlmIChcblx0XHRcdHJlbGF0ZWRDb2x1bW4uYW5ub3RhdGlvblBhdGggIT09IGFubm90YXRpb25QYXRoIHx8XG5cdFx0XHQocmVsYXRlZENvbHVtbi5wcm9wZXJ0eUluZm9zICYmIHJlbGF0ZWRDb2x1bW4ucHJvcGVydHlJbmZvcy5pbmRleE9mKG5hbWUpICE9PSAtMSlcblx0XHQpIHtcblx0XHRcdC8vIENhc2UgMjogVGhlIGV4aXN0aW5nIGNvbHVtbiBwb2ludHMgdG8gYSBMaW5lSXRlbSAob3IpXG5cdFx0XHQvLyBDYXNlIDM6IFRoaXMgaXMgYSBzZWxmIHJlZmVyZW5jZSBmcm9tIGFuIGV4aXN0aW5nIGNvbHVtbiBhbmRcblx0XHRcdC8vIGJvdGggY2FzZXMgcmVxdWlyZSBhIGR1bW15IFByb3BlcnR5SW5mbyBmb3Igc2V0dGluZyBjb3JyZWN0IGV4cG9ydCBzZXR0aW5ncy5cblxuXHRcdFx0Y29uc3QgbmV3TmFtZSA9IFwiUHJvcGVydHk6OlwiICsgbmFtZTtcblxuXHRcdFx0Ly8gQ2hlY2tpbmcgd2hldGhlciB0aGUgcmVsYXRlZCBwcm9wZXJ0eSBjb2x1bW4gaGFzIGFscmVhZHkgYmVlbiBjcmVhdGVkIGluIGEgcHJldmlvdXMgaXRlcmF0aW9uLlxuXHRcdFx0aWYgKCFleGlzdGluZ0NvbHVtbnMuc29tZShjb2x1bW4gPT4gY29sdW1uLm5hbWUgPT09IG5ld05hbWUpKSB7XG5cdFx0XHRcdC8vIENyZWF0ZSBhIG5ldyBwcm9wZXJ0eSBjb2x1bW4gd2l0aCAnUHJvcGVydHk6OicgcHJlZml4LFxuXHRcdFx0XHQvLyBTZXQgaXQgdG8gaGlkZGVuIGFzIGl0IGlzIG9ubHkgY29uc3VtZWQgYnkgQ29tcGxleCBwcm9wZXJ0eSBpbmZvcy5cblx0XHRcdFx0cmVsYXRlZENvbHVtbnMucHVzaChcblx0XHRcdFx0XHRnZXRDb2x1bW5EZWZpbml0aW9uRnJvbVByb3BlcnR5KFxuXHRcdFx0XHRcdFx0cHJvcGVydHksXG5cdFx0XHRcdFx0XHRhbm5vdGF0aW9uUGF0aCxcblx0XHRcdFx0XHRcdG5hbWUsXG5cdFx0XHRcdFx0XHRmYWxzZSxcblx0XHRcdFx0XHRcdGZhbHNlLFxuXHRcdFx0XHRcdFx0bm9uU29ydGFibGVDb2x1bW5zLFxuXHRcdFx0XHRcdFx0YWdncmVnYXRpb25IZWxwZXIsXG5cdFx0XHRcdFx0XHRjb252ZXJ0ZXJDb250ZXh0XG5cdFx0XHRcdFx0KVxuXHRcdFx0XHQpO1xuXHRcdFx0XHRyZWxhdGVkUHJvcGVydHlOYW1lTWFwW25hbWVdID0gbmV3TmFtZTtcblx0XHRcdH1cblx0XHR9XG5cdH0pO1xuXG5cdC8vIFRoZSBwcm9wZXJ0eSAnbmFtZScgaGFzIGJlZW4gcHJlZml4ZWQgd2l0aCAnUHJvcGVydHk6OicgZm9yIHVuaXF1ZW5lc3MuXG5cdC8vIFVwZGF0ZSB0aGUgc2FtZSBpbiBvdGhlciBwcm9wZXJ0eUluZm9zW10gcmVmZXJlbmNlcyB3aGljaCBwb2ludCB0byB0aGlzIHByb3BlcnR5LlxuXHRleGlzdGluZ0NvbHVtbnMuZm9yRWFjaChjb2x1bW4gPT4ge1xuXHRcdGNvbHVtbi5wcm9wZXJ0eUluZm9zID0gY29sdW1uLnByb3BlcnR5SW5mb3M/Lm1hcChwcm9wZXJ0eUluZm8gPT4gcmVsYXRlZFByb3BlcnR5TmFtZU1hcFtwcm9wZXJ0eUluZm9dID8/IHByb3BlcnR5SW5mbyk7XG5cdFx0Y29sdW1uLmFkZGl0aW9uYWxQcm9wZXJ0eUluZm9zID0gY29sdW1uLmFkZGl0aW9uYWxQcm9wZXJ0eUluZm9zPy5tYXAoXG5cdFx0XHRwcm9wZXJ0eUluZm8gPT4gcmVsYXRlZFByb3BlcnR5TmFtZU1hcFtwcm9wZXJ0eUluZm9dID8/IHByb3BlcnR5SW5mb1xuXHRcdCk7XG5cdH0pO1xuXG5cdHJldHVybiByZWxhdGVkQ29sdW1ucztcbn07XG5cbi8qKlxuICogR2V0dGluZyB0aGUgQ29sdW1uIE5hbWVcbiAqIElmIGl0IHBvaW50cyB0byBhIERhdGFGaWVsZCB3aXRoIG9uZSBwcm9wZXJ0eSBvciBEYXRhUG9pbnQgd2l0aCBvbmUgcHJvcGVydHksIGl0IHdpbGwgdXNlIHRoZSBwcm9wZXJ0eSBuYW1lXG4gKiBoZXJlIHRvIGJlIGNvbnNpc3RlbnQgd2l0aCB0aGUgZXhpc3RpbmcgZmxleCBjaGFuZ2VzLlxuICpcbiAqIEBwYXJhbSB7RGF0YUZpZWxkQWJzdHJhY3RUeXBlc30gZGF0YUZpZWxkIERpZmZlcmVudCBEYXRhRmllbGQgdHlwZXMgZGVmaW5lZCBpbiB0aGUgYW5ub3RhdGlvbnNcbiAqIEByZXR1cm5zIHtzdHJpbmd9IFRoZSBuYW1lIG9mIGFubm90YXRpb24gY29sdW1uc1xuICogQHByaXZhdGVcbiAqL1xuY29uc3QgX2dldEFubm90YXRpb25Db2x1bW5OYW1lID0gZnVuY3Rpb24oZGF0YUZpZWxkOiBEYXRhRmllbGRBYnN0cmFjdFR5cGVzKSB7XG5cdC8vIFRoaXMgaXMgbmVlZGVkIGFzIHdlIGhhdmUgZmxleGliaWxpdHkgY2hhbmdlcyBhbHJlYWR5IHRoYXQgd2UgaGF2ZSB0byBjaGVjayBhZ2FpbnN0XG5cdGlmIChpc0RhdGFGaWVsZFR5cGVzKGRhdGFGaWVsZCkpIHtcblx0XHRyZXR1cm4gZGF0YUZpZWxkLlZhbHVlPy5wYXRoO1xuXHR9IGVsc2UgaWYgKGRhdGFGaWVsZC4kVHlwZSA9PT0gVUlBbm5vdGF0aW9uVHlwZXMuRGF0YUZpZWxkRm9yQW5ub3RhdGlvbiAmJiAoZGF0YUZpZWxkLlRhcmdldD8uJHRhcmdldCBhcyBEYXRhUG9pbnQpPy5WYWx1ZT8ucGF0aCkge1xuXHRcdC8vIFRoaXMgaXMgZm9yIHJlbW92aW5nIGR1cGxpY2F0ZSBwcm9wZXJ0aWVzLiBGb3IgZXhhbXBsZSwgJ1Byb2dyZXNzJyBQcm9wZXJ0eSBpcyByZW1vdmVkIGlmIGl0IGlzIGFscmVhZHkgZGVmaW5lZCBhcyBhIERhdGFQb2ludFxuXHRcdHJldHVybiAoZGF0YUZpZWxkLlRhcmdldD8uJHRhcmdldCBhcyBEYXRhUG9pbnQpPy5WYWx1ZS5wYXRoO1xuXHR9IGVsc2Uge1xuXHRcdHJldHVybiBLZXlIZWxwZXIuZ2VuZXJhdGVLZXlGcm9tRGF0YUZpZWxkKGRhdGFGaWVsZCk7XG5cdH1cbn07XG5cbi8qKlxuICogRGV0ZXJtaW5lcyBpZiB0aGUgZGF0YSBmaWVsZCBsYWJlbHMgaGF2ZSB0byBiZSBkaXNwbGF5ZWQgaW4gdGhlIHRhYmxlLlxuICogQHBhcmFtIHtzdHJpbmd9IGZpZWxkR3JvdXBOYW1lIFRoZSBgRGF0YUZpZWxkYCBuYW1lIGJlaW5nIHByb2Nlc3NlZC5cbiAqIEBwYXJhbSB7c3RyaW5nfSB2aXN1YWxpemF0aW9uUGF0aFxuICogQHBhcmFtIHtDb252ZXJ0ZXJDb250ZXh0fSBjb252ZXJ0ZXJDb250ZXh0XG4gKiBAcmV0dXJucyB7Ym9vbGVhbn0gYHNob3dEYXRhRmllbGRzTGFiZWxgIHZhbHVlIGZyb20gdGhlIG1hbmlmZXN0XG4gKiBAcHJpdmF0ZVxuICovXG5jb25zdCBfZ2V0U2hvd0RhdGFGaWVsZHNMYWJlbCA9IGZ1bmN0aW9uKGZpZWxkR3JvdXBOYW1lOiBzdHJpbmcsIHZpc3VhbGl6YXRpb25QYXRoOiBzdHJpbmcsIGNvbnZlcnRlckNvbnRleHQ6IENvbnZlcnRlckNvbnRleHQpOiBib29sZWFuIHtcblx0Y29uc3Qgb0NvbHVtbnMgPSBjb252ZXJ0ZXJDb250ZXh0LmdldE1hbmlmZXN0Q29udHJvbENvbmZpZ3VyYXRpb24odmlzdWFsaXphdGlvblBhdGgpPy5jb2x1bW5zO1xuXHRjb25zdCBhQ29sdW1uS2V5cyA9IG9Db2x1bW5zICYmIE9iamVjdC5rZXlzKG9Db2x1bW5zKTtcblx0cmV0dXJuIChcblx0XHRhQ29sdW1uS2V5cyAmJlxuXHRcdCEhYUNvbHVtbktleXMuZmluZChmdW5jdGlvbihrZXk6IHN0cmluZykge1xuXHRcdFx0cmV0dXJuIGtleSA9PT0gZmllbGRHcm91cE5hbWUgJiYgb0NvbHVtbnNba2V5XS5zaG93RGF0YUZpZWxkc0xhYmVsO1xuXHRcdH0pXG5cdCk7XG59O1xuXG4vKipcbiAqIERldGVybWluZXMgdGhlIHJlbGF0aXZlIHBhdGggb2YgdGhlIHByb3BlcnR5IHdpdGggcmVzcGVjdCB0byB0aGUgcm9vdCBlbnRpdHkuXG4gKiBAcGFyYW0gZGF0YUZpZWxkIFRoZSBgRGF0YUZpZWxkYCBiZWluZyBwcm9jZXNzZWQuXG4gKiBAcmV0dXJucyB7c3RyaW5nfSBUaGUgcmVsYXRpdmUgcGF0aFxuICovXG5jb25zdCBfZ2V0UmVsYXRpdmVQYXRoID0gZnVuY3Rpb24oZGF0YUZpZWxkOiBEYXRhRmllbGRBYnN0cmFjdFR5cGVzKTogc3RyaW5nIHtcblx0bGV0IHJlbGF0aXZlUGF0aDogc3RyaW5nID0gXCJcIjtcblxuXHRzd2l0Y2ggKGRhdGFGaWVsZC4kVHlwZSkge1xuXHRcdGNhc2UgVUlBbm5vdGF0aW9uVHlwZXMuRGF0YUZpZWxkOlxuXHRcdGNhc2UgVUlBbm5vdGF0aW9uVHlwZXMuRGF0YUZpZWxkV2l0aE5hdmlnYXRpb25QYXRoOlxuXHRcdGNhc2UgVUlBbm5vdGF0aW9uVHlwZXMuRGF0YUZpZWxkV2l0aFVybDpcblx0XHRcdHJlbGF0aXZlUGF0aCA9IChkYXRhRmllbGQgYXMgRGF0YUZpZWxkKT8uVmFsdWU/LnBhdGg7XG5cdFx0XHRicmVhaztcblxuXHRcdGNhc2UgVUlBbm5vdGF0aW9uVHlwZXMuRGF0YUZpZWxkRm9yQW5ub3RhdGlvbjpcblx0XHRcdHJlbGF0aXZlUGF0aCA9IChkYXRhRmllbGQgYXMgRGF0YUZpZWxkRm9yQW5ub3RhdGlvbik/LlRhcmdldD8udmFsdWU7XG5cdFx0XHRicmVhaztcblxuXHRcdGNhc2UgVUlBbm5vdGF0aW9uVHlwZXMuRGF0YUZpZWxkRm9yQWN0aW9uOlxuXHRcdGNhc2UgVUlBbm5vdGF0aW9uVHlwZXMuRGF0YUZpZWxkRm9ySW50ZW50QmFzZWROYXZpZ2F0aW9uOlxuXHRcdFx0cmVsYXRpdmVQYXRoID0gS2V5SGVscGVyLmdlbmVyYXRlS2V5RnJvbURhdGFGaWVsZChkYXRhRmllbGQpO1xuXHRcdFx0YnJlYWs7XG5cdH1cblxuXHRyZXR1cm4gcmVsYXRpdmVQYXRoO1xufTtcblxuY29uc3QgX3NsaWNlQXRTbGFzaCA9IGZ1bmN0aW9uKHBhdGg6IHN0cmluZywgaXNMYXN0U2xhc2g6IGJvb2xlYW4sIGlzTGFzdFBhcnQ6IGJvb2xlYW4pIHtcblx0Y29uc3QgaVNsYXNoSW5kZXggPSBpc0xhc3RTbGFzaCA/IHBhdGgubGFzdEluZGV4T2YoXCIvXCIpIDogcGF0aC5pbmRleE9mKFwiL1wiKTtcblxuXHRpZiAoaVNsYXNoSW5kZXggPT09IC0xKSB7XG5cdFx0cmV0dXJuIHBhdGg7XG5cdH1cblx0cmV0dXJuIGlzTGFzdFBhcnQgPyBwYXRoLnN1YnN0cmluZyhpU2xhc2hJbmRleCArIDEsIHBhdGgubGVuZ3RoKSA6IHBhdGguc3Vic3RyaW5nKDAsIGlTbGFzaEluZGV4KTtcbn07XG5cbi8qKlxuICogRGV0ZXJtaW5lIHdoZXRoZXIgYSBjb2x1bW4gaXMgc29ydGFibGUuXG4gKlxuICogQHBhcmFtIGRhdGFGaWVsZCBUaGUgZGF0YSBmaWVsZCBiZWluZyBwcm9jZXNzZWRcbiAqIEBwYXJhbSBwcm9wZXJ0eVBhdGggVGhlIHByb3BlcnR5IHBhdGhcbiAqIEBwYXJhbSBub25Tb3J0YWJsZUNvbHVtbnMgQ29sbGVjdGlvbiBvZiBub24tc29ydGFibGUgY29sdW1uIG5hbWVzIGFzIHBlciBhbm5vdGF0aW9uXG4gKiBAcmV0dXJucyB7Ym9vbGVhbn0gVHJ1ZSBpZiB0aGUgY29sdW1uIGlzIHNvcnRhYmxlXG4gKi9cbmNvbnN0IF9pc0NvbHVtblNvcnRhYmxlID0gZnVuY3Rpb24oZGF0YUZpZWxkOiBEYXRhRmllbGRBYnN0cmFjdFR5cGVzLCBwcm9wZXJ0eVBhdGg6IHN0cmluZywgbm9uU29ydGFibGVDb2x1bW5zOiBzdHJpbmdbXSk6IGJvb2xlYW4ge1xuXHRsZXQgaXNTb3J0YWJsZTogYm9vbGVhbiA9IGZhbHNlO1xuXHRpZiAobm9uU29ydGFibGVDb2x1bW5zLmluZGV4T2YocHJvcGVydHlQYXRoKSA9PT0gLTEpIHtcblx0XHQvLyBDb2x1bW4gaXMgbm90IG1hcmtlZCBhcyBub24tc29ydGFibGUgdmlhIGFubm90YXRpb25cblx0XHRzd2l0Y2ggKGRhdGFGaWVsZC4kVHlwZSkge1xuXHRcdFx0Y2FzZSBVSUFubm90YXRpb25UeXBlcy5EYXRhRmllbGQ6XG5cdFx0XHRjYXNlIFVJQW5ub3RhdGlvblR5cGVzLkRhdGFGaWVsZFdpdGhVcmw6XG5cdFx0XHRcdGlzU29ydGFibGUgPSB0cnVlO1xuXHRcdFx0XHRicmVhaztcblxuXHRcdFx0Y2FzZSBVSUFubm90YXRpb25UeXBlcy5EYXRhRmllbGRGb3JJbnRlbnRCYXNlZE5hdmlnYXRpb246XG5cdFx0XHRjYXNlIFVJQW5ub3RhdGlvblR5cGVzLkRhdGFGaWVsZEZvckFjdGlvbjpcblx0XHRcdFx0Ly8gQWN0aW9uIGNvbHVtbnMgYXJlIG5vdCBzb3J0YWJsZVxuXHRcdFx0XHRpc1NvcnRhYmxlID0gZmFsc2U7XG5cdFx0XHRcdGJyZWFrO1xuXHRcdH1cblx0fVxuXHRyZXR1cm4gaXNTb3J0YWJsZTtcbn07XG5cbi8qKlxuICogUmV0dXJucyB3aGV0aGVyIGZpbHRlcmluZyBvbiB0aGUgdGFibGUgaXMgY2FzZSBzZW5zaXRpdmUuXG4gKlxuICogQHBhcmFtIHtDb252ZXJ0ZXJDb250ZXh0fSBjb252ZXJ0ZXJDb250ZXh0IFRoZSBpbnN0YW5jZSBvZiB0aGUgY29udmVydGVyIGNvbnRleHRcbiAqIEByZXR1cm5zIHtib29sZWFufSBSZXR1cm5zICdmYWxzZScgaWYgRmlsdGVyRnVuY3Rpb25zIGFubm90YXRpb24gc3VwcG9ydHMgJ3RvbG93ZXInLCBlbHNlICd0cnVlJ1xuICovXG5leHBvcnQgY29uc3QgaXNGaWx0ZXJpbmdDYXNlU2Vuc2l0aXZlID0gZnVuY3Rpb24oY29udmVydGVyQ29udGV4dDogQ29udmVydGVyQ29udGV4dCk6IGJvb2xlYW4ge1xuXHRjb25zdCBmaWx0ZXJGdW5jdGlvbnM6IEZpbHRlckZ1bmN0aW9ucyB8IHVuZGVmaW5lZCA9XG5cdFx0Y29udmVydGVyQ29udGV4dC5nZXRFbnRpdHlTZXQoKT8uYW5ub3RhdGlvbnM/LkNhcGFiaWxpdGllcz8uRmlsdGVyRnVuY3Rpb25zIHx8XG5cdFx0Y29udmVydGVyQ29udGV4dC5nZXRFbnRpdHlDb250YWluZXIoKS5hbm5vdGF0aW9ucz8uQ2FwYWJpbGl0aWVzPy5GaWx0ZXJGdW5jdGlvbnM7XG5cdHJldHVybiBBcnJheS5pc0FycmF5KGZpbHRlckZ1bmN0aW9ucykgPyAoZmlsdGVyRnVuY3Rpb25zIGFzIFN0cmluZ1tdKS5pbmRleE9mKFwidG9sb3dlclwiKSA9PT0gLTEgOiB0cnVlO1xufTtcblxuLyoqXG4gKiBSZXR1cm5zIGRlZmF1bHQgZm9ybWF0IG9wdGlvbnMgZm9yIHRleHQgZmllbGRzIGluIGEgdGFibGUuXG4gKlxuICogQHJldHVybnMge0Zvcm1hdE9wdGlvbnNUeXBlfSBDb2xsZWN0aW9uIG9mIGZvcm1hdCBvcHRpb25zIHdpdGggZGVmYXVsdCB2YWx1ZXNcbiAqL1xuZnVuY3Rpb24gZ2V0RGVmYXVsdEZvcm1hdE9wdGlvbnNGb3JUYWJsZSgpOiBGb3JtYXRPcHRpb25zVHlwZSB7XG5cdHJldHVybiB7XG5cdFx0dGV4dExpbmVzRWRpdDogNFxuXHR9O1xufVxuXG4vKipcbiAqIFJldHVybnMgZGVmYXVsdCBmb3JtYXQgb3B0aW9ucyB3aXRoIGRyYWZ0SW5kaWNhdG9yIGZvciBhIGNvbHVtbi5cbiAqIEBwYXJhbSBuYW1lXG4gKiBAcGFyYW0gc2VtYW50aWNLZXlzXG4gKiBAcmV0dXJucyB7Rm9ybWF0T3B0aW9uc1R5cGV9IENvbGxlY3Rpb24gb2YgZm9ybWF0IG9wdGlvbnMgd2l0aCBkZWZhdWx0IHZhbHVlc1xuICovXG5mdW5jdGlvbiBnZXREZWZhdWx0RHJhZnRJbmRpY2F0b3JGb3JDb2x1bW4obmFtZTogc3RyaW5nLCBzZW1hbnRpY0tleXM6IGFueVtdKSB7XG5cdGxldCBiU2VtYW50aWNLZXlGb3VuZCA9IGZhbHNlO1xuXHRjb25zdCBhU2VtYW50aWNLZXlWYWx1ZXM6IHN0cmluZ1tdID0gW107XG5cdGlmICghc2VtYW50aWNLZXlzKSB7XG5cdFx0cmV0dXJuIHt9O1xuXHR9XG5cdGZvciAobGV0IGkgPSAwOyBpIDwgc2VtYW50aWNLZXlzLmxlbmd0aDsgaSsrKSB7XG5cdFx0YVNlbWFudGljS2V5VmFsdWVzLnB1c2goc2VtYW50aWNLZXlzW2ldLnZhbHVlKTtcblx0XHRpZiAoc2VtYW50aWNLZXlzW2ldLnZhbHVlID09PSBuYW1lKSB7XG5cdFx0XHRiU2VtYW50aWNLZXlGb3VuZCA9IHRydWU7XG5cdFx0fVxuXHR9XG5cdGlmIChiU2VtYW50aWNLZXlGb3VuZCkge1xuXHRcdHJldHVybiB7XG5cdFx0XHRoYXNEcmFmdEluZGljYXRvcjogdHJ1ZSxcblx0XHRcdHNlbWFudGlja2V5czogYVNlbWFudGljS2V5VmFsdWVzXG5cdFx0fTtcblx0fSBlbHNlIHtcblx0XHRyZXR1cm4ge307XG5cdH1cbn1cblxuLyoqXG4gKiBSZXR1cm5zIGxpbmUgaXRlbXMgZnJvbSBtZXRhZGF0YSBhbm5vdGF0aW9ucy5cbiAqXG4gKiBAcGFyYW0ge0xpbmVJdGVtfSBsaW5lSXRlbUFubm90YXRpb24gQ29sbGVjdGlvbiBvZiBkYXRhIGZpZWxkcyB3aXRoIHRoZWlyIGFubm90YXRpb25zXG4gKiBAcGFyYW0ge3N0cmluZ30gdmlzdWFsaXphdGlvblBhdGggVGhlIHZpc3VhbGl6YXRpb24gcGF0aFxuICogQHBhcmFtIHtDb252ZXJ0ZXJDb250ZXh0fSBjb252ZXJ0ZXJDb250ZXh0IFRoZSBjb252ZXJ0ZXIgY29udGV4dFxuICogQHJldHVybnMge1RhYmxlQ29sdW1uW119IFRoZSBjb2x1bW5zIGZyb20gdGhlIGFubm90YXRpb25zXG4gKi9cbmNvbnN0IGdldENvbHVtbnNGcm9tQW5ub3RhdGlvbnMgPSBmdW5jdGlvbihcblx0bGluZUl0ZW1Bbm5vdGF0aW9uOiBMaW5lSXRlbSxcblx0dmlzdWFsaXphdGlvblBhdGg6IHN0cmluZyxcblx0Y29udmVydGVyQ29udGV4dDogQ29udmVydGVyQ29udGV4dFxuKTogVGFibGVDb2x1bW5bXSB7XG5cdGNvbnN0IGVudGl0eVR5cGUgPSBjb252ZXJ0ZXJDb250ZXh0LmdldEFubm90YXRpb25FbnRpdHlUeXBlKGxpbmVJdGVtQW5ub3RhdGlvbiksXG5cdFx0YW5ub3RhdGlvbkNvbHVtbnM6IEFubm90YXRpb25UYWJsZUNvbHVtbltdID0gW10sXG5cdFx0Y29sdW1uc1RvQmVDcmVhdGVkOiBSZWNvcmQ8c3RyaW5nLCBQcm9wZXJ0eT4gPSB7fSxcblx0XHRub25Tb3J0YWJsZUNvbHVtbnM6IHN0cmluZ1tdID0gZ2V0Tm9uU29ydGFibGVQcm9wZXJ0aWVzUmVzdHJpY3Rpb25zKGNvbnZlcnRlckNvbnRleHQuZ2V0RW50aXR5U2V0KCkpLFxuXHRcdHRhYmxlTWFuaWZlc3RTZXR0aW5nczogVGFibGVNYW5pZmVzdENvbmZpZ3VyYXRpb24gPSBjb252ZXJ0ZXJDb250ZXh0LmdldE1hbmlmZXN0Q29udHJvbENvbmZpZ3VyYXRpb24odmlzdWFsaXphdGlvblBhdGgpLFxuXHRcdHRhYmxlVHlwZTogVGFibGVUeXBlID0gdGFibGVNYW5pZmVzdFNldHRpbmdzPy50YWJsZVNldHRpbmdzPy50eXBlIHx8IFwiUmVzcG9uc2l2ZVRhYmxlXCI7XG5cdGNvbnN0IHNlbWFudGljS2V5cyA9IGNvbnZlcnRlckNvbnRleHQuZ2V0QW5ub3RhdGlvbnNCeVRlcm0oXCJDb21tb25cIiwgXCJjb20uc2FwLnZvY2FidWxhcmllcy5Db21tb24udjEuU2VtYW50aWNLZXlcIiwgW1xuXHRcdGNvbnZlcnRlckNvbnRleHQuZ2V0RW50aXR5VHlwZSgpXG5cdF0pWzBdO1xuXHRpZiAobGluZUl0ZW1Bbm5vdGF0aW9uKSB7XG5cdFx0Ly8gR2V0IGNvbHVtbnMgZnJvbSB0aGUgTGluZUl0ZW0gQW5ub3RhdGlvblxuXHRcdGxpbmVJdGVtQW5ub3RhdGlvbi5mb3JFYWNoKGxpbmVJdGVtID0+IHtcblx0XHRcdGlmICghX2lzVmFsaWRDb2x1bW4obGluZUl0ZW0pKSB7XG5cdFx0XHRcdHJldHVybjtcblx0XHRcdH1cblx0XHRcdGNvbnN0IHNlbWFudGljT2JqZWN0QW5ub3RhdGlvblBhdGggPVxuXHRcdFx0XHRpc0RhdGFGaWVsZFR5cGVzKGxpbmVJdGVtKSAmJiBsaW5lSXRlbS5WYWx1ZT8uJHRhcmdldD8uZnVsbHlRdWFsaWZpZWROYW1lXG5cdFx0XHRcdFx0PyBnZXRTZW1hbnRpY09iamVjdFBhdGgoY29udmVydGVyQ29udGV4dCwgbGluZUl0ZW0pXG5cdFx0XHRcdFx0OiB1bmRlZmluZWQ7XG5cdFx0XHRjb25zdCByZWxhdGl2ZVBhdGggPSBfZ2V0UmVsYXRpdmVQYXRoKGxpbmVJdGVtKTtcblx0XHRcdC8vIERldGVybWluZSBwcm9wZXJ0aWVzIHdoaWNoIGFyZSBjb25zdW1lZCBieSB0aGlzIExpbmVJdGVtLlxuXHRcdFx0Y29uc3QgcmVsYXRlZFByb3BlcnRpZXNJbmZvOiBDb21wbGV4UHJvcGVydHlJbmZvID0gY29sbGVjdFJlbGF0ZWRQcm9wZXJ0aWVzUmVjdXJzaXZlbHkobGluZUl0ZW0sIGNvbnZlcnRlckNvbnRleHQsIHRhYmxlVHlwZSk7XG5cdFx0XHRjb25zdCByZWxhdGVkUHJvcGVydHlOYW1lczogc3RyaW5nW10gPSBPYmplY3Qua2V5cyhyZWxhdGVkUHJvcGVydGllc0luZm8ucHJvcGVydGllcyk7XG5cdFx0XHRjb25zdCBhZGRpdGlvbmFsUHJvcGVydHlOYW1lczogc3RyaW5nW10gPSBPYmplY3Qua2V5cyhyZWxhdGVkUHJvcGVydGllc0luZm8uYWRkaXRpb25hbFByb3BlcnRpZXMpO1xuXHRcdFx0Y29uc3QgZ3JvdXBQYXRoOiBzdHJpbmcgPSBfc2xpY2VBdFNsYXNoKHJlbGF0aXZlUGF0aCwgdHJ1ZSwgZmFsc2UpO1xuXHRcdFx0Y29uc3QgaXNHcm91cDogYm9vbGVhbiA9IGdyb3VwUGF0aCAhPSByZWxhdGl2ZVBhdGg7XG5cdFx0XHRjb25zdCBzTGFiZWw6IHN0cmluZyB8IHVuZGVmaW5lZCA9IF9nZXRMYWJlbChsaW5lSXRlbSwgaXNHcm91cCk7XG5cdFx0XHRjb25zdCBuYW1lID0gX2dldEFubm90YXRpb25Db2x1bW5OYW1lKGxpbmVJdGVtKTtcblx0XHRcdGNvbnN0IGlzRmllbGRHcm91cENvbHVtbjogYm9vbGVhbiA9IGdyb3VwUGF0aC5pbmRleE9mKFwiQGNvbS5zYXAudm9jYWJ1bGFyaWVzLlVJLnYxLkZpZWxkR3JvdXBcIikgPiAtMTtcblx0XHRcdGNvbnN0IHNob3dEYXRhRmllbGRzTGFiZWw6IGJvb2xlYW4gPVxuXHRcdFx0XHRpc0ZpZWxkR3JvdXBDb2x1bW4gJiYgKGxpbmVJdGVtIGFzIGFueSk/LlRhcmdldD8uJHRhcmdldD8uRGF0YS5sZW5ndGggPiAxXG5cdFx0XHRcdFx0PyBfZ2V0U2hvd0RhdGFGaWVsZHNMYWJlbChuYW1lLCB2aXN1YWxpemF0aW9uUGF0aCwgY29udmVydGVyQ29udGV4dClcblx0XHRcdFx0XHQ6IGZhbHNlO1xuXHRcdFx0Y29uc3QgZGF0YVR5cGU6IHN0cmluZyB8IHVuZGVmaW5lZCA9IGdldERhdGFGaWVsZERhdGFUeXBlKGxpbmVJdGVtKTtcblx0XHRcdGNvbnN0IHNEYXRlSW5wdXRGb3JtYXQ6IHN0cmluZyB8IHVuZGVmaW5lZCA9IGRhdGFUeXBlID09PSBcIkVkbS5EYXRlXCIgPyBcIllZWVktTU0tRERcIiA6IHVuZGVmaW5lZDtcblx0XHRcdGNvbnN0IGZvcm1hdE9wdGlvbnMgPSB7XG5cdFx0XHRcdC4uLmdldERlZmF1bHRGb3JtYXRPcHRpb25zRm9yVGFibGUoKSxcblx0XHRcdFx0Li4uZ2V0RGVmYXVsdERyYWZ0SW5kaWNhdG9yRm9yQ29sdW1uKG5hbWUsIHNlbWFudGljS2V5cylcblx0XHRcdH07XG5cdFx0XHRsZXQgZmllbGRHcm91cEhpZGRlbkV4cHJlc3Npb25zOiBCaW5kaW5nRXhwcmVzc2lvbjxzdHJpbmc+O1xuXHRcdFx0aWYgKFxuXHRcdFx0XHRsaW5lSXRlbS4kVHlwZSA9PT0gVUlBbm5vdGF0aW9uVHlwZXMuRGF0YUZpZWxkRm9yQW5ub3RhdGlvbiAmJlxuXHRcdFx0XHRsaW5lSXRlbS5UYXJnZXQ/LiR0YXJnZXQ/LiRUeXBlID09PSBVSUFubm90YXRpb25UeXBlcy5GaWVsZEdyb3VwVHlwZVxuXHRcdFx0KSB7XG5cdFx0XHRcdGZpZWxkR3JvdXBIaWRkZW5FeHByZXNzaW9ucyA9IF9nZXRGaWVsZEdyb3VwSGlkZGVuRXhwcmVzc2lvbnMobGluZUl0ZW0sIGZvcm1hdE9wdGlvbnMpO1xuXHRcdFx0fVxuXHRcdFx0Y29uc3QgZXhwb3J0U2V0dGluZ3MgPSB7XG5cdFx0XHRcdHRlbXBsYXRlOiByZWxhdGVkUHJvcGVydGllc0luZm8uZXhwb3J0U2V0dGluZ3NUZW1wbGF0ZSxcblx0XHRcdFx0d3JhcDogcmVsYXRlZFByb3BlcnRpZXNJbmZvLmV4cG9ydFNldHRpbmdzV3JhcHBpbmcsXG5cdFx0XHRcdHR5cGU6IGRhdGFUeXBlID8gX2dldEV4cG9ydERhdGFUeXBlKGRhdGFUeXBlLCByZWxhdGVkUHJvcGVydHlOYW1lcy5sZW5ndGggPiAxKSA6IHVuZGVmaW5lZCxcblx0XHRcdFx0aW5wdXRGb3JtYXQ6IHNEYXRlSW5wdXRGb3JtYXQsXG5cdFx0XHRcdGRlbGltaXRlcjogZGF0YVR5cGUgPT09IFwiRWRtLkludDY0XCIgPyB0cnVlIDogZmFsc2UsXG5cdFx0XHRcdHRydWVWYWx1ZTogZGF0YVR5cGUgPT09IFwiRWRtLkJvb2xlYW5cIiA/IFwiWWVzXCIgOiB1bmRlZmluZWQsXG5cdFx0XHRcdGZhbHNlVmFsdWU6IGRhdGFUeXBlID09PSBcIkVkbS5Cb29sZWFuXCIgPyBcIk5vXCIgOiB1bmRlZmluZWRcblx0XHRcdH07XG5cdFx0XHRjb25zdCBwcm9wZXJ0eVR5cGVDb25maWcgPSBkYXRhVHlwZSAmJiBnZXRUeXBlQ29uZmlnKGxpbmVJdGVtLCBkYXRhVHlwZSk7XG5cdFx0XHRjb25zdCBvVHlwZUNvbmZpZyA9IHByb3BlcnR5VHlwZUNvbmZpZ1xuXHRcdFx0XHQ/IHtcblx0XHRcdFx0XHRcdGNsYXNzTmFtZTogZGF0YVR5cGUsXG5cdFx0XHRcdFx0XHRvRm9ybWF0T3B0aW9uczoge1xuXHRcdFx0XHRcdFx0XHQuLi5mb3JtYXRPcHRpb25zLFxuXHRcdFx0XHRcdFx0XHQuLi5wcm9wZXJ0eVR5cGVDb25maWcuZm9ybWF0T3B0aW9uc1xuXHRcdFx0XHRcdFx0fSxcblx0XHRcdFx0XHRcdG9Db25zdHJhaW50czogcHJvcGVydHlUeXBlQ29uZmlnLmNvbnN0cmFpbnRzXG5cdFx0XHRcdCAgfVxuXHRcdFx0XHQ6IHVuZGVmaW5lZDtcblx0XHRcdGxldCB2aXN1YWxTZXR0aW5nczogVmlzdWFsU2V0dGluZ3MgPSB7fTtcblx0XHRcdGlmIChyZWxhdGVkUHJvcGVydGllc0luZm8udmlzdWFsU2V0dGluZ3NUb0JlRXhjbHVkZWQpIHtcblx0XHRcdFx0Ly8gSW4gY2FzZSBvZiB0ZXh0IGFycmFuZ2VtZW50IGFubm90YXRpb24gd2l0aCBkaXNwbGF5IG1vZGUgYXMgdGV4dCBvbmx5LCBleGNsdWRlIHRleHQgcHJvcGVydHkgZnJvbSB0aGUgd2lkdGggY2FsY3VsYXRpb25cblx0XHRcdFx0dmlzdWFsU2V0dGluZ3MgPSB7XG5cdFx0XHRcdFx0d2lkdGhDYWxjdWxhdGlvbjoge1xuXHRcdFx0XHRcdFx0ZXhjbHVkZVByb3BlcnRpZXM6IFwiUHJvcGVydHk6OlwiICsgcmVsYXRlZFByb3BlcnRpZXNJbmZvLnZpc3VhbFNldHRpbmdzVG9CZUV4Y2x1ZGVkXG5cdFx0XHRcdFx0fVxuXHRcdFx0XHR9O1xuXHRcdFx0fSBlbHNlIGlmICghZGF0YVR5cGUgfHwgIW9UeXBlQ29uZmlnKSB7XG5cdFx0XHRcdC8vIGZvciBjaGFydHNcblx0XHRcdFx0dmlzdWFsU2V0dGluZ3Mud2lkdGhDYWxjdWxhdGlvbiA9IG51bGw7XG5cdFx0XHR9XG5cblx0XHRcdGFubm90YXRpb25Db2x1bW5zLnB1c2goe1xuXHRcdFx0XHRrZXk6IEtleUhlbHBlci5nZW5lcmF0ZUtleUZyb21EYXRhRmllbGQobGluZUl0ZW0pLFxuXHRcdFx0XHR0eXBlOiBDb2x1bW5UeXBlLkFubm90YXRpb24sXG5cdFx0XHRcdGxhYmVsOiBzTGFiZWwsXG5cdFx0XHRcdGdyb3VwTGFiZWw6IGlzR3JvdXAgPyBfZ2V0TGFiZWwobGluZUl0ZW0pIDogbnVsbCxcblx0XHRcdFx0Z3JvdXA6IGlzR3JvdXAgPyBncm91cFBhdGggOiBudWxsLFxuXHRcdFx0XHRGaWVsZEdyb3VwSGlkZGVuRXhwcmVzc2lvbnM6IGZpZWxkR3JvdXBIaWRkZW5FeHByZXNzaW9ucyxcblx0XHRcdFx0YW5ub3RhdGlvblBhdGg6IGNvbnZlcnRlckNvbnRleHQuZ2V0RW50aXR5U2V0QmFzZWRBbm5vdGF0aW9uUGF0aChsaW5lSXRlbS5mdWxseVF1YWxpZmllZE5hbWUpLFxuXHRcdFx0XHRzZW1hbnRpY09iamVjdFBhdGg6IHNlbWFudGljT2JqZWN0QW5ub3RhdGlvblBhdGgsXG5cdFx0XHRcdGF2YWlsYWJpbGl0eTogaXNEYXRhRmllbGRBbHdheXNIaWRkZW4obGluZUl0ZW0pID8gQXZhaWxhYmlsaXR5VHlwZS5IaWRkZW4gOiBBdmFpbGFiaWxpdHlUeXBlLkRlZmF1bHQsXG5cdFx0XHRcdG5hbWU6IG5hbWUsXG5cdFx0XHRcdHNob3dEYXRhRmllbGRzTGFiZWw6IHNob3dEYXRhRmllbGRzTGFiZWwsXG5cdFx0XHRcdHJlbGF0aXZlUGF0aDogcmVsYXRpdmVQYXRoLFxuXHRcdFx0XHRzb3J0YWJsZTogX2lzQ29sdW1uU29ydGFibGUobGluZUl0ZW0sIHJlbGF0aXZlUGF0aCwgbm9uU29ydGFibGVDb2x1bW5zKSxcblx0XHRcdFx0cHJvcGVydHlJbmZvczogcmVsYXRlZFByb3BlcnR5TmFtZXMubGVuZ3RoID4gMCA/IHJlbGF0ZWRQcm9wZXJ0eU5hbWVzIDogdW5kZWZpbmVkLFxuXHRcdFx0XHRhZGRpdGlvbmFsUHJvcGVydHlJbmZvczogYWRkaXRpb25hbFByb3BlcnR5TmFtZXMubGVuZ3RoID4gMCA/IGFkZGl0aW9uYWxQcm9wZXJ0eU5hbWVzIDogdW5kZWZpbmVkLFxuXHRcdFx0XHRleHBvcnRTZXR0aW5nczogZXhwb3J0U2V0dGluZ3MsXG5cdFx0XHRcdHdpZHRoOiBsaW5lSXRlbS5hbm5vdGF0aW9ucz8uSFRNTDU/LkNzc0RlZmF1bHRzPy53aWR0aCB8fCB1bmRlZmluZWQsXG5cdFx0XHRcdGlzTmF2aWdhYmxlOiB0cnVlLFxuXHRcdFx0XHRmb3JtYXRPcHRpb25zOiBmb3JtYXRPcHRpb25zLFxuXHRcdFx0XHRleHBvcnRDb250YWN0UHJvcGVydHk6IHJlbGF0ZWRQcm9wZXJ0aWVzSW5mby5leHBvcnRTZXR0aW5nc0NvbnRhY3RQcm9wZXJ0eSxcblx0XHRcdFx0Y2FzZVNlbnNpdGl2ZTogaXNGaWx0ZXJpbmdDYXNlU2Vuc2l0aXZlKGNvbnZlcnRlckNvbnRleHQpLFxuXHRcdFx0XHR0eXBlQ29uZmlnOiBvVHlwZUNvbmZpZyxcblx0XHRcdFx0dmlzdWFsU2V0dGluZ3M6IHZpc3VhbFNldHRpbmdzXG5cdFx0XHR9IGFzIEFubm90YXRpb25UYWJsZUNvbHVtbik7XG5cblx0XHRcdC8vIENvbGxlY3QgaW5mb3JtYXRpb24gb2YgcmVsYXRlZCBjb2x1bW5zIHRvIGJlIGNyZWF0ZWQuXG5cdFx0XHRyZWxhdGVkUHJvcGVydHlOYW1lcy5mb3JFYWNoKG5hbWUgPT4ge1xuXHRcdFx0XHRjb2x1bW5zVG9CZUNyZWF0ZWRbbmFtZV0gPSByZWxhdGVkUHJvcGVydGllc0luZm8ucHJvcGVydGllc1tuYW1lXTtcblx0XHRcdH0pO1xuXG5cdFx0XHQvLyBDcmVhdGUgY29sdW1ucyBmb3IgYWRkaXRpb25hbCBwcm9wZXJ0aWVzIGlkZW50aWZpZWQgZm9yIEFMUCB1c2UgY2FzZS5cblx0XHRcdGFkZGl0aW9uYWxQcm9wZXJ0eU5hbWVzLmZvckVhY2gobmFtZSA9PiB7XG5cdFx0XHRcdC8vIEludGVudGlvbmFsIG92ZXJ3cml0ZSBhcyB3ZSByZXF1aXJlIG9ubHkgb25lIG5ldyBQcm9wZXJ0eUluZm8gZm9yIGEgcmVsYXRlZCBQcm9wZXJ0eS5cblx0XHRcdFx0Y29sdW1uc1RvQmVDcmVhdGVkW25hbWVdID0gcmVsYXRlZFByb3BlcnRpZXNJbmZvLmFkZGl0aW9uYWxQcm9wZXJ0aWVzW25hbWVdO1xuXHRcdFx0fSk7XG5cdFx0fSk7XG5cdH1cblxuXHQvLyBHZXQgY29sdW1ucyBmcm9tIHRoZSBQcm9wZXJ0aWVzIG9mIEVudGl0eVR5cGVcblx0bGV0IHRhYmxlQ29sdW1ucyA9IGdldENvbHVtbnNGcm9tRW50aXR5VHlwZShcblx0XHRjb2x1bW5zVG9CZUNyZWF0ZWQsXG5cdFx0ZW50aXR5VHlwZSxcblx0XHRhbm5vdGF0aW9uQ29sdW1ucyxcblx0XHRub25Tb3J0YWJsZUNvbHVtbnMsXG5cdFx0Y29udmVydGVyQ29udGV4dCxcblx0XHR0YWJsZVR5cGVcblx0KTtcblx0dGFibGVDb2x1bW5zID0gdGFibGVDb2x1bW5zLmNvbmNhdChhbm5vdGF0aW9uQ29sdW1ucyk7XG5cblx0Ly8gQ3JlYXRlIGEgcHJvcGVydHlJbmZvIGZvciBlYWNoIHJlbGF0ZWQgcHJvcGVydHkuXG5cdGNvbnN0IHJlbGF0ZWRDb2x1bW5zID0gX2NyZWF0ZVJlbGF0ZWRDb2x1bW5zKGNvbHVtbnNUb0JlQ3JlYXRlZCwgdGFibGVDb2x1bW5zLCBub25Tb3J0YWJsZUNvbHVtbnMsIGNvbnZlcnRlckNvbnRleHQsIGVudGl0eVR5cGUpO1xuXHR0YWJsZUNvbHVtbnMgPSB0YWJsZUNvbHVtbnMuY29uY2F0KHJlbGF0ZWRDb2x1bW5zKTtcblxuXHRyZXR1cm4gdGFibGVDb2x1bW5zO1xufTtcblxuLyoqXG4gKiBHZXRzIHRoZSBwcm9wZXJ0eSBuYW1lcyBmcm9tIHRoZSBtYW5pZmVzdCBhbmQgY2hlY2tzIGFnYWluc3QgZXhpc3RpbmcgcHJvcGVydGllcyBhbHJlYWR5IGFkZGVkIGJ5IGFubm90YXRpb25zLlxuICogSWYgYSBub3QgeWV0IHN0b3JlZCBwcm9wZXJ0eSBpcyBmb3VuZCBpdCBhZGRzIGl0IGZvciBzb3J0aW5nIGFuZCBmaWx0ZXJpbmcgb25seSB0byB0aGUgYW5ub3RhdGlvbkNvbHVtbnMuXG4gKiBAcGFyYW0ge3N0cmluZ1tdIHwgdW5kZWZpbmVkfSBwcm9wZXJ0aWVzXG4gKiBAcGFyYW0ge0Fubm90YXRpb25UYWJsZUNvbHVtbltdfSBhbm5vdGF0aW9uQ29sdW1uc1xuICogQHBhcmFtIHtDb252ZXJ0ZXJDb250ZXh0fSBjb252ZXJ0ZXJDb250ZXh0XG4gKiBAcGFyYW0gZW50aXR5VHlwZVxuICogQHJldHVybnMge3N0cmluZ1tdfSBUaGUgY29sdW1ucyBmcm9tIHRoZSBhbm5vdGF0aW9uc1xuICovXG5jb25zdCBfZ2V0UHJvcGVydHlOYW1lcyA9IGZ1bmN0aW9uKFxuXHRwcm9wZXJ0aWVzOiBzdHJpbmdbXSB8IHVuZGVmaW5lZCxcblx0YW5ub3RhdGlvbkNvbHVtbnM6IEFubm90YXRpb25UYWJsZUNvbHVtbltdLFxuXHRjb252ZXJ0ZXJDb250ZXh0OiBDb252ZXJ0ZXJDb250ZXh0LFxuXHRlbnRpdHlUeXBlOiBFbnRpdHlUeXBlXG4pOiBzdHJpbmdbXSB8IHVuZGVmaW5lZCB7XG5cdGxldCBtYXRjaGVkUHJvcGVydGllczogc3RyaW5nW10gfCB1bmRlZmluZWQ7XG5cdGlmIChwcm9wZXJ0aWVzKSB7XG5cdFx0bWF0Y2hlZFByb3BlcnRpZXMgPSBwcm9wZXJ0aWVzLm1hcChmdW5jdGlvbihwcm9wZXJ0eVBhdGgpIHtcblx0XHRcdGNvbnN0IGFubm90YXRpb25Db2x1bW4gPSBhbm5vdGF0aW9uQ29sdW1ucy5maW5kKGZ1bmN0aW9uKGFubm90YXRpb25Db2x1bW4pIHtcblx0XHRcdFx0cmV0dXJuIGFubm90YXRpb25Db2x1bW4ucmVsYXRpdmVQYXRoID09PSBwcm9wZXJ0eVBhdGggJiYgYW5ub3RhdGlvbkNvbHVtbi5wcm9wZXJ0eUluZm9zID09PSB1bmRlZmluZWQ7XG5cdFx0XHR9KTtcblx0XHRcdGlmIChhbm5vdGF0aW9uQ29sdW1uKSB7XG5cdFx0XHRcdHJldHVybiBhbm5vdGF0aW9uQ29sdW1uLm5hbWU7XG5cdFx0XHR9IGVsc2Uge1xuXHRcdFx0XHRjb25zdCByZWxhdGVkQ29sdW1ucyA9IF9jcmVhdGVSZWxhdGVkQ29sdW1ucyhcblx0XHRcdFx0XHR7IFtwcm9wZXJ0eVBhdGhdOiBlbnRpdHlUeXBlLnJlc29sdmVQYXRoKHByb3BlcnR5UGF0aCkgfSxcblx0XHRcdFx0XHRhbm5vdGF0aW9uQ29sdW1ucyxcblx0XHRcdFx0XHRbXSxcblx0XHRcdFx0XHRjb252ZXJ0ZXJDb250ZXh0LFxuXHRcdFx0XHRcdGVudGl0eVR5cGVcblx0XHRcdFx0KTtcblx0XHRcdFx0YW5ub3RhdGlvbkNvbHVtbnMucHVzaChyZWxhdGVkQ29sdW1uc1swXSk7XG5cdFx0XHRcdHJldHVybiByZWxhdGVkQ29sdW1uc1swXS5uYW1lO1xuXHRcdFx0fVxuXHRcdH0pO1xuXHR9XG5cblx0cmV0dXJuIG1hdGNoZWRQcm9wZXJ0aWVzO1xufTtcblxuY29uc3QgX2FwcGVuZEN1c3RvbVRlbXBsYXRlID0gZnVuY3Rpb24ocHJvcGVydGllczogc3RyaW5nW10pOiBzdHJpbmcge1xuXHRyZXR1cm4gcHJvcGVydGllc1xuXHRcdC5tYXAocHJvcGVydHkgPT4ge1xuXHRcdFx0cmV0dXJuIGB7JHtwcm9wZXJ0aWVzLmluZGV4T2YocHJvcGVydHkpfX1gO1xuXHRcdH0pXG5cdFx0LmpvaW4oYCR7XCJcXG5cIn1gKTtcbn07XG5cbi8qKlxuICogUmV0cmlldmVzIHRoZSB0YWJsZSBjb2x1bW4gcHJvcGVydHkgdmFsdWUgYmFzZWQgb24gY2VydGFpbiBjb25kaXRpb25zLlxuICpcbiAqIE1hbmlmZXN0IGRlZmluZWQgcHJvcGVydHkgdmFsdWUgZm9yIGN1c3RvbSAvIGFubm90YXRpb24gY29sdW1uc1xuICogRGVmYXVsdCBwcm9wZXJ0eSB2YWx1ZSBmb3IgY3VzdG9tIGNvbHVtbiBpZiBub3Qgb3ZlcndyaXR0ZW4gaW4gbWFuaWZlc3QuXG4gKlxuICogQHBhcmFtIHthbnl9IHByb3BlcnR5IFRoZSBjb2x1bW4gcHJvcGVydHkgZGVmaW5lZCBpbiB0aGUgbWFuaWZlc3RcbiAqIEBwYXJhbSB7YW55fSBkZWZhdWx0VmFsdWUgVGhlIGRlZmF1bHQgdmFsdWUgb2YgdGhlIHByb3BlcnR5XG4gKiBAcGFyYW0ge2Jvb2xlYW59IGlzQW5ub3RhdGlvbkNvbHVtbiBXaGV0aGVyIHRoZSBjb2x1bW4sIGRlZmluZWQgaW4gbWFuaWZlc3QsIGNvcnJlc3BvbmRzIHRvIGFuIGV4aXN0aW5nIGFubm90YXRpb24gY29sdW1uLlxuICogQHJldHVybnMge2FueX0gRGV0ZXJtaW5lZCBwcm9wZXJ0eSB2YWx1ZSBmb3IgdGhlIGNvbHVtblxuICovXG5jb25zdCBfZ2V0TWFuaWZlc3RPckRlZmF1bHRWYWx1ZSA9IGZ1bmN0aW9uKHByb3BlcnR5OiBhbnksIGRlZmF1bHRWYWx1ZTogYW55LCBpc0Fubm90YXRpb25Db2x1bW46IGJvb2xlYW4pOiBhbnkge1xuXHRpZiAocHJvcGVydHkgPT09IHVuZGVmaW5lZCkge1xuXHRcdC8vIElmIGFubm90YXRpb24gY29sdW1uIGhhcyBubyBwcm9wZXJ0eSBkZWZpbmVkIGluIG1hbmlmZXN0LFxuXHRcdC8vIGRvIG5vdCBvdmVyd3JpdGUgaXQgd2l0aCBtYW5pZmVzdCBjb2x1bW4ncyBkZWZhdWx0IHZhbHVlLlxuXHRcdHJldHVybiBpc0Fubm90YXRpb25Db2x1bW4gPyB1bmRlZmluZWQgOiBkZWZhdWx0VmFsdWU7XG5cdH1cblx0Ly8gUmV0dXJuIHdoYXQgaXMgZGVmaW5lZCBpbiBtYW5pZmVzdC5cblx0cmV0dXJuIHByb3BlcnR5O1xufTtcblxuLyoqXG4gKiBSZXR1cm5zIHRhYmxlIGNvbHVtbiBkZWZpbml0aW9ucyBmcm9tIG1hbmlmZXN0LlxuICogQHBhcmFtIGNvbHVtbnNcbiAqIEBwYXJhbSBhbm5vdGF0aW9uQ29sdW1uc1xuICogQHBhcmFtIGNvbnZlcnRlckNvbnRleHRcbiAqIEBwYXJhbSBlbnRpdHlUeXBlXG4gKiBAcGFyYW0gbmF2aWdhdGlvblNldHRpbmdzXG4gKiBAcmV0dXJucyB7UmVjb3JkPHN0cmluZywgQ3VzdG9tQ29sdW1uPn0gVGhlIGNvbHVtbnMgZnJvbSB0aGUgbWFuaWZlc3RcbiAqL1xuY29uc3QgZ2V0Q29sdW1uc0Zyb21NYW5pZmVzdCA9IGZ1bmN0aW9uKFxuXHRjb2x1bW5zOiBSZWNvcmQ8c3RyaW5nLCBNYW5pZmVzdFRhYmxlQ29sdW1uPixcblx0YW5ub3RhdGlvbkNvbHVtbnM6IEFubm90YXRpb25UYWJsZUNvbHVtbltdLFxuXHRjb252ZXJ0ZXJDb250ZXh0OiBDb252ZXJ0ZXJDb250ZXh0LFxuXHRlbnRpdHlUeXBlOiBFbnRpdHlUeXBlLFxuXHRuYXZpZ2F0aW9uU2V0dGluZ3M/OiBOYXZpZ2F0aW9uU2V0dGluZ3NDb25maWd1cmF0aW9uXG4pOiBSZWNvcmQ8c3RyaW5nLCBDdXN0b21Db2x1bW4+IHtcblx0Y29uc3QgaW50ZXJuYWxDb2x1bW5zOiBSZWNvcmQ8c3RyaW5nLCBDdXN0b21Db2x1bW4+ID0ge307XG5cblx0Zm9yIChjb25zdCBrZXkgaW4gY29sdW1ucykge1xuXHRcdGNvbnN0IG1hbmlmZXN0Q29sdW1uID0gY29sdW1uc1trZXldO1xuXHRcdC8vIFRvIGlkZW50aWZ5IHRoZSBhbm5vdGF0aW9uIGNvbHVtbiBwcm9wZXJ0eSBvdmVyd3JpdGUgdmlhIG1hbmlmZXN0IHVzZS1jYXNlLlxuXHRcdGNvbnN0IGlzQW5ub3RhdGlvbkNvbHVtbiA9IGFubm90YXRpb25Db2x1bW5zLnNvbWUoY29sdW1uID0+IGNvbHVtbi5rZXkgPT09IGtleSk7XG5cdFx0S2V5SGVscGVyLnZhbGlkYXRlS2V5KGtleSk7XG5cdFx0Y29uc3QgcHJvcGVydHlJbmZvczogc3RyaW5nW10gfCB1bmRlZmluZWQgPSBfZ2V0UHJvcGVydHlOYW1lcyhcblx0XHRcdG1hbmlmZXN0Q29sdW1uLnByb3BlcnRpZXMsXG5cdFx0XHRhbm5vdGF0aW9uQ29sdW1ucyxcblx0XHRcdGNvbnZlcnRlckNvbnRleHQsXG5cdFx0XHRlbnRpdHlUeXBlXG5cdFx0KTtcblxuXHRcdGludGVybmFsQ29sdW1uc1trZXldID0ge1xuXHRcdFx0a2V5OiBrZXksXG5cdFx0XHRpZDogXCJDdXN0b21Db2x1bW46OlwiICsga2V5LFxuXHRcdFx0bmFtZTogXCJDdXN0b21Db2x1bW46OlwiICsga2V5LFxuXHRcdFx0aGVhZGVyOiBtYW5pZmVzdENvbHVtbi5oZWFkZXIsXG5cdFx0XHR3aWR0aDogbWFuaWZlc3RDb2x1bW4ud2lkdGggfHwgdW5kZWZpbmVkLFxuXHRcdFx0aG9yaXpvbnRhbEFsaWduOiBfZ2V0TWFuaWZlc3RPckRlZmF1bHRWYWx1ZShtYW5pZmVzdENvbHVtbj8uaG9yaXpvbnRhbEFsaWduLCBIb3Jpem9udGFsQWxpZ24uQmVnaW4sIGlzQW5ub3RhdGlvbkNvbHVtbiksXG5cdFx0XHR0eXBlOiBtYW5pZmVzdENvbHVtbi50eXBlID09PSBcIlNsb3RcIiA/IENvbHVtblR5cGUuU2xvdCA6IENvbHVtblR5cGUuRGVmYXVsdCxcblx0XHRcdGF2YWlsYWJpbGl0eTogX2dldE1hbmlmZXN0T3JEZWZhdWx0VmFsdWUobWFuaWZlc3RDb2x1bW4/LmF2YWlsYWJpbGl0eSwgQXZhaWxhYmlsaXR5VHlwZS5EZWZhdWx0LCBpc0Fubm90YXRpb25Db2x1bW4pLFxuXHRcdFx0dGVtcGxhdGU6IG1hbmlmZXN0Q29sdW1uLnRlbXBsYXRlIHx8IFwidW5kZWZpbmVkXCIsXG5cdFx0XHRwb3NpdGlvbjoge1xuXHRcdFx0XHRhbmNob3I6IG1hbmlmZXN0Q29sdW1uLnBvc2l0aW9uPy5hbmNob3IsXG5cdFx0XHRcdHBsYWNlbWVudDogbWFuaWZlc3RDb2x1bW4ucG9zaXRpb24gPT09IHVuZGVmaW5lZCA/IFBsYWNlbWVudC5BZnRlciA6IG1hbmlmZXN0Q29sdW1uLnBvc2l0aW9uLnBsYWNlbWVudFxuXHRcdFx0fSxcblx0XHRcdGlzTmF2aWdhYmxlOiBpc0Fubm90YXRpb25Db2x1bW4gPyB1bmRlZmluZWQgOiBpc0FjdGlvbk5hdmlnYWJsZShtYW5pZmVzdENvbHVtbiwgbmF2aWdhdGlvblNldHRpbmdzLCB0cnVlKSxcblx0XHRcdHNldHRpbmdzOiBtYW5pZmVzdENvbHVtbi5zZXR0aW5ncyxcblx0XHRcdHNvcnRhYmxlOiBmYWxzZSxcblx0XHRcdHByb3BlcnR5SW5mb3M6IHByb3BlcnR5SW5mb3MsXG5cdFx0XHRmb3JtYXRPcHRpb25zOiB7XG5cdFx0XHRcdC4uLmdldERlZmF1bHRGb3JtYXRPcHRpb25zRm9yVGFibGUoKSxcblx0XHRcdFx0Li4ubWFuaWZlc3RDb2x1bW4uZm9ybWF0T3B0aW9uc1xuXHRcdFx0fSxcblx0XHRcdGV4cG9ydFNldHRpbmdzOiB7XG5cdFx0XHRcdHRlbXBsYXRlOiBwcm9wZXJ0eUluZm9zID8gX2FwcGVuZEN1c3RvbVRlbXBsYXRlKHByb3BlcnR5SW5mb3MpIDogdW5kZWZpbmVkLFxuXHRcdFx0XHRmaWVsZExhYmVsOiBwcm9wZXJ0eUluZm9zID8gbWFuaWZlc3RDb2x1bW4uaGVhZGVyIDogdW5kZWZpbmVkLFxuXHRcdFx0XHR3cmFwOiBwcm9wZXJ0eUluZm9zICYmIHByb3BlcnR5SW5mb3MubGVuZ3RoID4gMSA/IHRydWUgOiBmYWxzZVxuXHRcdFx0fSxcblx0XHRcdGNhc2VTZW5zaXRpdmU6IGlzRmlsdGVyaW5nQ2FzZVNlbnNpdGl2ZShjb252ZXJ0ZXJDb250ZXh0KVxuXHRcdH07XG5cdH1cblx0cmV0dXJuIGludGVybmFsQ29sdW1ucztcbn07XG5cbmV4cG9ydCBmdW5jdGlvbiBnZXRQMTNuTW9kZShcblx0dmlzdWFsaXphdGlvblBhdGg6IHN0cmluZyxcblx0Y29udmVydGVyQ29udGV4dDogQ29udmVydGVyQ29udGV4dCxcblx0dGFibGVNYW5pZmVzdENvbmZpZ3VyYXRpb246IFRhYmxlQ29udHJvbENvbmZpZ3VyYXRpb25cbik6IHN0cmluZyB8IHVuZGVmaW5lZCB7XG5cdGNvbnN0IG1hbmlmZXN0V3JhcHBlcjogTWFuaWZlc3RXcmFwcGVyID0gY29udmVydGVyQ29udGV4dC5nZXRNYW5pZmVzdFdyYXBwZXIoKTtcblx0Y29uc3QgdGFibGVNYW5pZmVzdFNldHRpbmdzOiBUYWJsZU1hbmlmZXN0Q29uZmlndXJhdGlvbiA9IGNvbnZlcnRlckNvbnRleHQuZ2V0TWFuaWZlc3RDb250cm9sQ29uZmlndXJhdGlvbih2aXN1YWxpemF0aW9uUGF0aCk7XG5cdGNvbnN0IHZhcmlhbnRNYW5hZ2VtZW50OiBWYXJpYW50TWFuYWdlbWVudFR5cGUgPSBtYW5pZmVzdFdyYXBwZXIuZ2V0VmFyaWFudE1hbmFnZW1lbnQoKTtcblx0Y29uc3QgYVBlcnNvbmFsaXphdGlvbjogc3RyaW5nW10gPSBbXTtcblx0Y29uc3QgYkFuYWx5dGljYWxUYWJsZSA9IHRhYmxlTWFuaWZlc3RDb25maWd1cmF0aW9uLnR5cGUgPT09IFwiQW5hbHl0aWNhbFRhYmxlXCI7XG5cdGlmICh0YWJsZU1hbmlmZXN0U2V0dGluZ3M/LnRhYmxlU2V0dGluZ3M/LnBlcnNvbmFsaXphdGlvbiAhPT0gdW5kZWZpbmVkKSB7XG5cdFx0Ly8gUGVyc29uYWxpemF0aW9uIGNvbmZpZ3VyZWQgaW4gbWFuaWZlc3QuXG5cdFx0Y29uc3QgcGVyc29uYWxpemF0aW9uOiBhbnkgPSB0YWJsZU1hbmlmZXN0U2V0dGluZ3MudGFibGVTZXR0aW5ncy5wZXJzb25hbGl6YXRpb247XG5cdFx0aWYgKHBlcnNvbmFsaXphdGlvbiA9PT0gdHJ1ZSkge1xuXHRcdFx0Ly8gVGFibGUgcGVyc29uYWxpemF0aW9uIGZ1bGx5IGVuYWJsZWQuXG5cdFx0XHRyZXR1cm4gYkFuYWx5dGljYWxUYWJsZSA/IFwiU29ydCxDb2x1bW4sRmlsdGVyLEdyb3VwLEFnZ3JlZ2F0ZVwiIDogXCJTb3J0LENvbHVtbixGaWx0ZXJcIjtcblx0XHR9IGVsc2UgaWYgKHR5cGVvZiBwZXJzb25hbGl6YXRpb24gPT09IFwib2JqZWN0XCIpIHtcblx0XHRcdC8vIFNwZWNpZmljIHBlcnNvbmFsaXphdGlvbiBvcHRpb25zIGVuYWJsZWQgaW4gbWFuaWZlc3QuIFVzZSB0aGVtIGFzIGlzLlxuXHRcdFx0aWYgKHBlcnNvbmFsaXphdGlvbi5zb3J0KSB7XG5cdFx0XHRcdGFQZXJzb25hbGl6YXRpb24ucHVzaChcIlNvcnRcIik7XG5cdFx0XHR9XG5cdFx0XHRpZiAocGVyc29uYWxpemF0aW9uLmNvbHVtbikge1xuXHRcdFx0XHRhUGVyc29uYWxpemF0aW9uLnB1c2goXCJDb2x1bW5cIik7XG5cdFx0XHR9XG5cdFx0XHRpZiAocGVyc29uYWxpemF0aW9uLmZpbHRlcikge1xuXHRcdFx0XHRhUGVyc29uYWxpemF0aW9uLnB1c2goXCJGaWx0ZXJcIik7XG5cdFx0XHR9XG5cdFx0XHRpZiAocGVyc29uYWxpemF0aW9uLmdyb3VwICYmIGJBbmFseXRpY2FsVGFibGUpIHtcblx0XHRcdFx0YVBlcnNvbmFsaXphdGlvbi5wdXNoKFwiR3JvdXBcIik7XG5cdFx0XHR9XG5cdFx0XHRpZiAocGVyc29uYWxpemF0aW9uLmFnZ3JlZ2F0ZSAmJiBiQW5hbHl0aWNhbFRhYmxlKSB7XG5cdFx0XHRcdGFQZXJzb25hbGl6YXRpb24ucHVzaChcIkFnZ3JlZ2F0ZVwiKTtcblx0XHRcdH1cblx0XHRcdHJldHVybiBhUGVyc29uYWxpemF0aW9uLmxlbmd0aCA+IDAgPyBhUGVyc29uYWxpemF0aW9uLmpvaW4oXCIsXCIpIDogdW5kZWZpbmVkO1xuXHRcdH1cblx0fSBlbHNlIHtcblx0XHQvLyBObyBwZXJzb25hbGl6YXRpb24gY29uZmlndXJlZCBpbiBtYW5pZmVzdC5cblx0XHRhUGVyc29uYWxpemF0aW9uLnB1c2goXCJTb3J0XCIpO1xuXHRcdGFQZXJzb25hbGl6YXRpb24ucHVzaChcIkNvbHVtblwiKTtcblx0XHRpZiAodmFyaWFudE1hbmFnZW1lbnQgPT09IFZhcmlhbnRNYW5hZ2VtZW50VHlwZS5Db250cm9sKSB7XG5cdFx0XHQvLyBGZWF0dXJlIHBhcml0eSB3aXRoIFYyLlxuXHRcdFx0Ly8gRW5hYmxlIHRhYmxlIGZpbHRlcmluZyBieSBkZWZhdWx0IG9ubHkgaW4gY2FzZSBvZiBDb250cm9sIGxldmVsIHZhcmlhbnQgbWFuYWdlbWVudC5cblx0XHRcdGFQZXJzb25hbGl6YXRpb24ucHVzaChcIkZpbHRlclwiKTtcblx0XHR9XG5cdFx0aWYgKGJBbmFseXRpY2FsVGFibGUpIHtcblx0XHRcdGFQZXJzb25hbGl6YXRpb24ucHVzaChcIkdyb3VwXCIpO1xuXHRcdFx0YVBlcnNvbmFsaXphdGlvbi5wdXNoKFwiQWdncmVnYXRlXCIpO1xuXHRcdH1cblx0XHRyZXR1cm4gYVBlcnNvbmFsaXphdGlvbi5qb2luKFwiLFwiKTtcblx0fVxuXHRyZXR1cm4gdW5kZWZpbmVkO1xufVxuXG4vKipcbiAqIEZ1bmN0aW9uIHRvIGRldGVybWluZSB0aGUgdmlzaWJpbGl0eSBvZiB0aGUgRGVsZXRlIGJ1dHRvbi5cbiAqXG4gKiBAcGFyYW0gY29udmVydGVyQ29udGV4dCBUaGUgaW5zdGFuY2Ugb2YgdGhlIGNvbnZlcnRlciBjb250ZXh0XG4gKiBAcGFyYW0gbmF2aWdhdGlvblBhdGggUGF0aCB0byB0aGUgbmF2aWdhdGlvbiBlbnRpdHlcbiAqIEBwYXJhbSBpc1RhcmdldERlbGV0YWJsZSBGbGFnIHdoaWNoIGRldGVybWluZXMgd2hldGhlciBhIHRhcmdldCBpcyBkZWxldGFibGVcbiAqIEBwYXJhbSB2aWV3Q29uZmlndXJhdGlvbiBUaGUgaW5zdGFuY2Ugb2YgdGhlIGNvbmZpZ3VyYXRpb24gZm9yIHRoZSB2aWV3IHBhdGhcbiAqIEByZXR1cm5zIHtFeHByZXNzaW9uPGJvb2xlYW4+fSBUaGUgZXhwcmVzc2lvbiBmb3IgdGhlIERlbGV0ZSBidXR0b25cbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGdldERlbGV0ZVZpc2libGUoXG5cdGNvbnZlcnRlckNvbnRleHQ6IENvbnZlcnRlckNvbnRleHQsXG5cdG5hdmlnYXRpb25QYXRoOiBzdHJpbmcsXG5cdGlzVGFyZ2V0RGVsZXRhYmxlOiBib29sZWFuLFxuXHR2aWV3Q29uZmlndXJhdGlvbj86IFZpZXdQYXRoQ29uZmlndXJhdGlvblxuKTogRXhwcmVzc2lvbjxib29sZWFuPiB7XG5cdGNvbnN0IGN1cnJlbnRFbnRpdHlTZXQgPSBjb252ZXJ0ZXJDb250ZXh0LmdldEVudGl0eVNldCgpO1xuXHRjb25zdCBkYXRhTW9kZWxPYmplY3RQYXRoID0gY29udmVydGVyQ29udGV4dC5nZXREYXRhTW9kZWxPYmplY3RQYXRoKCk7XG5cdGNvbnN0IHZpc2l0ZWROYXZpZ2F0aW9uUGF0aHMgPSBkYXRhTW9kZWxPYmplY3RQYXRoLm5hdmlnYXRpb25Qcm9wZXJ0aWVzLm1hcChuYXZQcm9wID0+IG5hdlByb3AubmFtZSk7XG5cdGNvbnN0IGlzRGVsZXRlSGlkZGVuRXhwcmVzc2lvbiA9IGN1cnJlbnRFbnRpdHlTZXRcblx0XHQ/IGFubm90YXRpb25FeHByZXNzaW9uKFxuXHRcdFx0XHQoY3VycmVudEVudGl0eVNldD8uYW5ub3RhdGlvbnMuVUk/LkRlbGV0ZUhpZGRlbiBhcyBQcm9wZXJ0eUFubm90YXRpb25WYWx1ZTxib29sZWFuPikgfHwgZmFsc2UsXG5cdFx0XHRcdHZpc2l0ZWROYXZpZ2F0aW9uUGF0aHMsXG5cdFx0XHRcdHVuZGVmaW5lZCxcblx0XHRcdFx0KHBhdGg6IHN0cmluZykgPT4gc2luZ2xldG9uUGF0aFZpc2l0b3IocGF0aCwgY29udmVydGVyQ29udGV4dCwgdmlzaXRlZE5hdmlnYXRpb25QYXRocylcblx0XHQgIClcblx0XHQ6IGNvbnN0YW50KGZhbHNlKTtcblx0Y29uc3QgaXNEZWxldGVIaWRkZW46IGFueSA9IGNvbXBpbGVCaW5kaW5nKGlzRGVsZXRlSGlkZGVuRXhwcmVzc2lvbik7XG5cdGxldCBpc1BhcmVudERlbGV0YWJsZSwgcGFyZW50RW50aXR5U2V0RGVsZXRhYmxlO1xuXHRpZiAoY29udmVydGVyQ29udGV4dC5nZXRUZW1wbGF0ZVR5cGUoKSA9PT0gVGVtcGxhdGVUeXBlLk9iamVjdFBhZ2UpIHtcblx0XHRpc1BhcmVudERlbGV0YWJsZSA9IGlzUGF0aERlbGV0YWJsZShjb252ZXJ0ZXJDb250ZXh0LmdldERhdGFNb2RlbE9iamVjdFBhdGgoKSwgbmF2aWdhdGlvblBhdGgpO1xuXHRcdHBhcmVudEVudGl0eVNldERlbGV0YWJsZSA9IGlzUGFyZW50RGVsZXRhYmxlID8gY29tcGlsZUJpbmRpbmcoaXNQYXJlbnREZWxldGFibGUpIDogaXNQYXJlbnREZWxldGFibGU7XG5cdH1cblx0Y29uc3QgYklzU3RpY2t5U2Vzc2lvblN1cHBvcnRlZCA9IGNvbnZlcnRlckNvbnRleHQuZ2V0RGF0YU1vZGVsT2JqZWN0UGF0aCgpLnN0YXJ0aW5nRW50aXR5U2V0Py5hbm5vdGF0aW9ucz8uU2Vzc2lvblxuXHRcdD8uU3RpY2t5U2Vzc2lvblN1cHBvcnRlZFxuXHRcdD8gdHJ1ZVxuXHRcdDogZmFsc2U7XG5cdGNvbnN0IGJJc0RyYWZ0Um9vdCA9IGN1cnJlbnRFbnRpdHlTZXQgJiYgY3VycmVudEVudGl0eVNldC5hbm5vdGF0aW9ucz8uQ29tbW9uPy5EcmFmdFJvb3QgPyB0cnVlIDogZmFsc2U7XG5cdGNvbnN0IGJJc0RyYWZ0Tm9kZSA9IGN1cnJlbnRFbnRpdHlTZXQgJiYgY3VycmVudEVudGl0eVNldC5hbm5vdGF0aW9ucz8uQ29tbW9uPy5EcmFmdE5vZGUgPyB0cnVlIDogZmFsc2U7XG5cdGNvbnN0IGJJc0RyYWZ0UGFyZW50RW50aXR5Rm9yQ29udGFpbm1lbnQgPVxuXHRcdGNvbnZlcnRlckNvbnRleHQuZ2V0RGF0YU1vZGVsT2JqZWN0UGF0aCgpLnRhcmdldE9iamVjdD8uY29udGFpbnNUYXJnZXQgJiZcblx0XHQoY29udmVydGVyQ29udGV4dC5nZXREYXRhTW9kZWxPYmplY3RQYXRoKCkuc3RhcnRpbmdFbnRpdHlTZXQ/LmFubm90YXRpb25zPy5Db21tb24/LkRyYWZ0Um9vdCB8fFxuXHRcdFx0Y29udmVydGVyQ29udGV4dC5nZXREYXRhTW9kZWxPYmplY3RQYXRoKCkuc3RhcnRpbmdFbnRpdHlTZXQ/LmFubm90YXRpb25zPy5Db21tb24/LkRyYWZ0Tm9kZSlcblx0XHRcdD8gdHJ1ZVxuXHRcdFx0OiBmYWxzZTtcblx0aWYgKFxuXHRcdGJJc0RyYWZ0Um9vdCB8fFxuXHRcdGJJc0RyYWZ0Tm9kZSB8fFxuXHRcdGJJc1N0aWNreVNlc3Npb25TdXBwb3J0ZWQgfHxcblx0XHQoIWNvbnZlcnRlckNvbnRleHQuZ2V0RW50aXR5U2V0KCkgJiYgYklzRHJhZnRQYXJlbnRFbnRpdHlGb3JDb250YWlubWVudClcblx0KSB7XG5cdFx0Ly9kbyBub3Qgc2hvdyBjYXNlIHRoZSBkZWxldGUgYnV0dG9uIGlmIHBhcmVudEVudGl0eVNldERlbGV0YWJsZSBpcyBmYWxzZVxuXHRcdGlmIChwYXJlbnRFbnRpdHlTZXREZWxldGFibGUgPT09IFwiZmFsc2VcIikge1xuXHRcdFx0cmV0dXJuIGNvbnN0YW50KGZhbHNlKTtcblx0XHRcdC8vT1Bcblx0XHR9IGVsc2UgaWYgKHBhcmVudEVudGl0eVNldERlbGV0YWJsZSAmJiBpc0RlbGV0ZUhpZGRlbiAhPT0gXCJ0cnVlXCIpIHtcblx0XHRcdC8vRGVsZXRlIEhpZGRlbiBpbiBjYXNlIG9mIHRydWUgYW5kIHBhdGggYmFzZWRcblx0XHRcdGlmIChpc0RlbGV0ZUhpZGRlbiAmJiBpc0RlbGV0ZUhpZGRlbiAhPT0gXCJmYWxzZVwiKSB7XG5cdFx0XHRcdHJldHVybiBhbmQoZXF1YWwoYmluZGluZ0V4cHJlc3Npb24oXCIvZWRpdE1vZGVcIiwgXCJ1aVwiKSwgXCJFZGl0YWJsZVwiKSwgbm90KGlzRGVsZXRlSGlkZGVuRXhwcmVzc2lvbikpO1xuXHRcdFx0fSBlbHNlIHtcblx0XHRcdFx0cmV0dXJuIGVxdWFsKGJpbmRpbmdFeHByZXNzaW9uKFwiL2VkaXRNb2RlXCIsIFwidWlcIiksIFwiRWRpdGFibGVcIik7XG5cdFx0XHR9XG5cdFx0fSBlbHNlIGlmIChcblx0XHRcdGlzRGVsZXRlSGlkZGVuID09PSBcInRydWVcIiB8fFxuXHRcdFx0IWlzVGFyZ2V0RGVsZXRhYmxlIHx8XG5cdFx0XHQodmlld0NvbmZpZ3VyYXRpb24gJiYgY29udmVydGVyQ29udGV4dC5nZXRNYW5pZmVzdFdyYXBwZXIoKS5oYXNNdWx0aXBsZVZpc3VhbGl6YXRpb25zKHZpZXdDb25maWd1cmF0aW9uKSkgfHxcblx0XHRcdGNvbnZlcnRlckNvbnRleHQuZ2V0VGVtcGxhdGVUeXBlKCkgPT09IFRlbXBsYXRlVHlwZS5BbmFseXRpY2FsTGlzdFBhZ2Vcblx0XHQpIHtcblx0XHRcdHJldHVybiBjb25zdGFudChmYWxzZSk7XG5cdFx0fSBlbHNlIGlmIChjb252ZXJ0ZXJDb250ZXh0LmdldFRlbXBsYXRlVHlwZSgpICE9PSBUZW1wbGF0ZVR5cGUuTGlzdFJlcG9ydCkge1xuXHRcdFx0aWYgKGlzRGVsZXRlSGlkZGVuICYmIGlzRGVsZXRlSGlkZGVuID09PSBcImZhbHNlXCIpIHtcblx0XHRcdFx0cmV0dXJuIGFuZChlcXVhbChiaW5kaW5nRXhwcmVzc2lvbihcIi9lZGl0TW9kZVwiLCBcInVpXCIpLCBcIkVkaXRhYmxlXCIpLCBub3QoaXNEZWxldGVIaWRkZW5FeHByZXNzaW9uKSk7XG5cdFx0XHR9IGVsc2Uge1xuXHRcdFx0XHRyZXR1cm4gZXF1YWwoYmluZGluZ0V4cHJlc3Npb24oXCIvZWRpdE1vZGVcIiwgXCJ1aVwiKSwgXCJFZGl0YWJsZVwiKTtcblx0XHRcdH1cblx0XHR9IGVsc2UgaWYgKGlzQmluZGluZyhpc0RlbGV0ZUhpZGRlbkV4cHJlc3Npb24pKSB7XG5cdFx0XHQvLyBVSS5EZWxldGVIaWRkZW4gYW5ub3RhdGlvbiBwb2ludHMgdG8gYSBwYXRoXG5cdFx0XHRyZXR1cm4gbm90KGlzRGVsZXRlSGlkZGVuRXhwcmVzc2lvbik7XG5cdFx0fSBlbHNlIHtcblx0XHRcdHJldHVybiBjb25zdGFudCh0cnVlKTtcblx0XHR9XG5cdH0gZWxzZSB7XG5cdFx0cmV0dXJuIGNvbnN0YW50KGZhbHNlKTtcblx0fVxufVxuXG4vKipcbiAqIFJldHVybnMgdGhlIGVuYWJsZW1lbnQgZm9yIHRoZSAnTWFzcyBFZGl0JyBidXR0b25cbiAqXG4gKiBAcGFyYW0gY29udmVydGVyQ29udGV4dCBUaGUgY29udmVydGVyQ29udGV4dFxuICogQHBhcmFtIGJNYXNzRWRpdFZpc2libGUgVGhlIHZpc2liaWxpdHkgb2YgdGhlICdNYXNzIEVkaXQnIGJ1dHRvblxuICogQHJldHVybnMgeyp9IEV4cHJlc3Npb24gb3IgQm9vbGVhbiB2YWx1ZSBmb3IgdGhlIGVuYWJsZW1lbnQgb2YgdGhlICdNYXNzIEVkaXQnIGJ1dHRvblxuICovXG5cbmV4cG9ydCBmdW5jdGlvbiBnZXRFbmFibGVtZW50TWFzc0VkaXQoXG5cdGNvbnZlcnRlckNvbnRleHQ6IENvbnZlcnRlckNvbnRleHQsXG5cdGJNYXNzRWRpdFZpc2libGU6IHN0cmluZyB8IGJvb2xlYW4gfCB1bmRlZmluZWRcbik6IHN0cmluZyB8IGJvb2xlYW4ge1xuXHRpZiAoYk1hc3NFZGl0VmlzaWJsZSkge1xuXHRcdGNvbnN0IGlzUGFyZW50VXBkYXRhYmxlOiBhbnkgPSBpc1BhdGhVcGRhdGFibGUoY29udmVydGVyQ29udGV4dC5nZXREYXRhTW9kZWxPYmplY3RQYXRoKCksIHVuZGVmaW5lZCwgdHJ1ZSk7XG5cdFx0Ly93aGVuIHVwZGF0YWJsZSBpcyBwYXRoIGJhc2VkIGFuZCBwb2ludGluZyB0byBjdXJyZW50IGVudGl0eSBzZXQgcHJvcGVydHksIHRoYXQgY2FzZSBpcyBoYW5kbGVkIGluIHRhYmxlIGhlbHBlciBhbmQgcnVudGltZVxuXHRcdGlmIChpc1BhcmVudFVwZGF0YWJsZT8uY3VycmVudEVudGl0eVJlc3RyaWN0aW9uKSB7XG5cdFx0XHRyZXR1cm4gZmFsc2U7XG5cdFx0fVxuXHRcdGNvbnN0IG9FeHByZXNzaW9uOiBhbnkgPSBjb21waWxlQmluZGluZyhpc1BhcmVudFVwZGF0YWJsZSk7XG5cdFx0cmV0dXJuIGlzUGFyZW50VXBkYXRhYmxlXG5cdFx0XHQ/IFwiez0gJXtpbnRlcm5hbD5udW1iZXJPZlNlbGVjdGVkQ29udGV4dHN9ID49IDIgJiYgXCIgKyBjb21waWxlQmluZGluZyhpc1BhcmVudFVwZGF0YWJsZSwgb0V4cHJlc3Npb24pICsgXCJ9XCJcblx0XHRcdDogZmFsc2U7XG5cdH1cblx0cmV0dXJuIGZhbHNlO1xufVxuXG4vKipcbiAqIFJldHVybnMgdGhlIHZpc2liaWxpdHkgZm9yIHRoZSAnTWFzcyBFZGl0JyBidXR0b25cbiAqXG4gKiBAcGFyYW0gY29udmVydGVyQ29udGV4dCBUaGUgY29udmVydGVyQ29udGV4dFxuICogQHBhcmFtIHRhYmxlTWFuaWZlc3RDb25maWd1cmF0aW9uIFRoZSBtYW5pZmVzdCBjb25maWd1cmF0aW9uIGZvciB0aGUgdGFibGVcbiAqIEBwYXJhbSB0YXJnZXRDYXBhYmlsaXRpZXMgVGhlIHRhcmdldCBjYXBhYmlsaXR5IHJlc3RyaWN0aW9ucyBmb3IgdGhlIHRhYmxlXG4gKiBAcGFyYW0gc2VsZWN0aW9uTW9kZSBUaGUgc2VsZWN0aW9uIG1vZGUgZm9yIHRoZSB0YWJsZVxuICogQHJldHVybnMgeyp9IEV4cHJlc3Npb24gb3IgQm9vbGVhbiB2YWx1ZSBmb3IgdGhlIHZpc2liaWxpdHkgb2YgdGhlICdNYXNzIEVkaXQnIGJ1dHRvblxuICovXG5cbmV4cG9ydCBmdW5jdGlvbiBnZXRWaXNpYmlsaXR5TWFzc0VkaXQoXG5cdGNvbnZlcnRlckNvbnRleHQ6IENvbnZlcnRlckNvbnRleHQsXG5cdHRhYmxlTWFuaWZlc3RDb25maWd1cmF0aW9uOiBUYWJsZUNvbnRyb2xDb25maWd1cmF0aW9uLFxuXHR0YXJnZXRDYXBhYmlsaXRpZXM6IFRhYmxlQ2FwYWJpbGl0eVJlc3RyaWN0aW9uLFxuXHRzZWxlY3Rpb25Nb2RlOiBzdHJpbmcgfCB1bmRlZmluZWRcbik6IGJvb2xlYW4gfCBzdHJpbmcgfCB1bmRlZmluZWQge1xuXHRjb25zdCBlbnRpdHlTZXQgPSBjb252ZXJ0ZXJDb250ZXh0LmdldEVudGl0eVNldCgpLFxuXHRcdGJVcGRhdGVIaWRkZW46IGFueSA9IGVudGl0eVNldCAmJiBlbnRpdHlTZXQ/LmFubm90YXRpb25zLlVJPy5VcGRhdGVIaWRkZW4/LnZhbHVlT2YoKSxcblx0XHRiTWFzc0VkaXRFbmFibGVkOiBib29sZWFuID0gdGFibGVNYW5pZmVzdENvbmZpZ3VyYXRpb24/LmVuYWJsZU1hc3NFZGl0IHx8IGZhbHNlLFxuXHRcdGlTZWxlY3Rpb25MaW1pdDogbnVtYmVyID0gdGFibGVNYW5pZmVzdENvbmZpZ3VyYXRpb24/LnNlbGVjdGlvbkxpbWl0O1xuXHRsZXQgYk1hc3NFZGl0VmlzaWJsZTogYm9vbGVhbiA9IHRydWU7XG5cdGlmICgoc2VsZWN0aW9uTW9kZSAmJiBzZWxlY3Rpb25Nb2RlID09PSBcIlNpbmdsZVwiKSB8fCAoaVNlbGVjdGlvbkxpbWl0ICYmIGlTZWxlY3Rpb25MaW1pdCA8IDIpKSB7XG5cdFx0Yk1hc3NFZGl0VmlzaWJsZSA9IGZhbHNlO1xuXHR9IGVsc2UgaWYgKHNlbGVjdGlvbk1vZGUgJiYgKHNlbGVjdGlvbk1vZGUgPT09IFwiQXV0b1wiIHx8IHNlbGVjdGlvbk1vZGUgPT09IFwiTm9uZVwiKSkge1xuXHRcdGJNYXNzRWRpdFZpc2libGUgPSB0cnVlO1xuXHR9XG5cdGlmICh0YXJnZXRDYXBhYmlsaXRpZXM/LmlzVXBkYXRhYmxlICE9PSBmYWxzZSAmJiBiTWFzc0VkaXRWaXNpYmxlICYmIGJNYXNzRWRpdEVuYWJsZWQpIHtcblx0XHRpZiAoYlVwZGF0ZUhpZGRlbiAmJiB0eXBlb2YgYlVwZGF0ZUhpZGRlbiA9PT0gXCJib29sZWFuXCIpIHtcblx0XHRcdHJldHVybiAhYlVwZGF0ZUhpZGRlbiAmJiBjb252ZXJ0ZXJDb250ZXh0LmdldFRlbXBsYXRlVHlwZSgpID09PSBUZW1wbGF0ZVR5cGUuT2JqZWN0UGFnZSA/IGNvbXBpbGVCaW5kaW5nKFVJLklzRWRpdGFibGUpIDogZmFsc2U7XG5cdFx0fSBlbHNlIGlmIChiVXBkYXRlSGlkZGVuICYmIGJVcGRhdGVIaWRkZW4/LnBhdGgpIHtcblx0XHRcdHJldHVybiBjb252ZXJ0ZXJDb250ZXh0LmdldFRlbXBsYXRlVHlwZSgpID09PSBUZW1wbGF0ZVR5cGUuT2JqZWN0UGFnZVxuXHRcdFx0XHQ/IGNvbXBpbGVCaW5kaW5nKGFuZChlcXVhbChVSS5Jc0VkaXRhYmxlLCB0cnVlKSwgZXF1YWwoYW5ub3RhdGlvbkV4cHJlc3Npb24oYlVwZGF0ZUhpZGRlbiksIGZhbHNlKSkpXG5cdFx0XHRcdDogZmFsc2U7XG5cdFx0fVxuXHRcdHJldHVybiBjb252ZXJ0ZXJDb250ZXh0LmdldFRlbXBsYXRlVHlwZSgpID09PSBUZW1wbGF0ZVR5cGUuT2JqZWN0UGFnZSA/IGNvbXBpbGVCaW5kaW5nKFVJLklzRWRpdGFibGUpIDogZmFsc2U7XG5cdH1cblx0cmV0dXJuIGZhbHNlO1xufVxuXG4vKipcbiAqIEZ1bmN0aW9uIHRvIGRldGVybWluZSB0aGUgdmlzaWJpbGl0eSBvZiB0aGUgQ3JlYXRlIGJ1dHRvbi5cbiAqXG4gKiBAcGFyYW0gY29udmVydGVyQ29udGV4dCBUaGUgaW5zdGFuY2Ugb2YgdGhlIGNvbnZlcnRlciBjb250ZXh0XG4gKiBAcGFyYW0gY3JlYXRpb25Nb2RlIFRoZSBtb2RlIHVzZWQgZm9yIGNyZWF0aW9uXG4gKiBAcGFyYW0gaXNJbnNlcnRhYmxlIEFubm90YXRpb24gZXhwcmVzc2lvbiBvZiBJbnNlcnRSZXN0cmljdGlvbnMuSW5zZXJ0YWJsZVxuICogQHBhcmFtIHZpZXdDb25maWd1cmF0aW9uIFRoZSBpbnN0YW5jZSBvZiB0aGUgY29uZmlndXJhdGlvbiBmb3IgdGhlIHZpZXcgcGF0aFxuICogQHJldHVybnMge0V4cHJlc3Npb248Ym9vbGVhbj59IEV4cHJlc3Npb24gb3IgQm9vbGVhbiB2YWx1ZSBvZiB0aGUgJ1VJLkNyZWF0ZUhpZGRlbicgYW5ub3RhdGlvblxuICovXG5leHBvcnQgZnVuY3Rpb24gZ2V0Q3JlYXRlVmlzaWJsZShcblx0Y29udmVydGVyQ29udGV4dDogQ29udmVydGVyQ29udGV4dCxcblx0Y3JlYXRpb25Nb2RlOiBDcmVhdGlvbk1vZGUgfCBcIkV4dGVybmFsXCIsXG5cdGlzSW5zZXJ0YWJsZTogRXhwcmVzc2lvbjxib29sZWFuPixcblx0dmlld0NvbmZpZ3VyYXRpb24/OiBWaWV3UGF0aENvbmZpZ3VyYXRpb25cbik6IEV4cHJlc3Npb248Ym9vbGVhbj4ge1xuXHRjb25zdCBjdXJyZW50RW50aXR5U2V0ID0gY29udmVydGVyQ29udGV4dC5nZXRFbnRpdHlTZXQoKTtcblx0Y29uc3QgZGF0YU1vZGVsT2JqZWN0UGF0aCA9IGNvbnZlcnRlckNvbnRleHQuZ2V0RGF0YU1vZGVsT2JqZWN0UGF0aCgpO1xuXHRjb25zdCB2aXNpdGVkTmF2aWdhdGlvblBhdGhzID0gZGF0YU1vZGVsT2JqZWN0UGF0aC5uYXZpZ2F0aW9uUHJvcGVydGllcy5tYXAobmF2UHJvcCA9PiBuYXZQcm9wLm5hbWUpO1xuXHRjb25zdCBpc0NyZWF0ZUhpZGRlbjogRXhwcmVzc2lvbjxib29sZWFuPiA9IGN1cnJlbnRFbnRpdHlTZXRcblx0XHQ/IGFubm90YXRpb25FeHByZXNzaW9uKFxuXHRcdFx0XHQoY3VycmVudEVudGl0eVNldD8uYW5ub3RhdGlvbnMuVUk/LkNyZWF0ZUhpZGRlbiBhcyBQcm9wZXJ0eUFubm90YXRpb25WYWx1ZTxib29sZWFuPikgfHwgZmFsc2UsXG5cdFx0XHRcdHZpc2l0ZWROYXZpZ2F0aW9uUGF0aHMsXG5cdFx0XHRcdHVuZGVmaW5lZCxcblx0XHRcdFx0KHBhdGg6IHN0cmluZykgPT4gc2luZ2xldG9uUGF0aFZpc2l0b3IocGF0aCwgY29udmVydGVyQ29udGV4dCwgdmlzaXRlZE5hdmlnYXRpb25QYXRocylcblx0XHQgIClcblx0XHQ6IGNvbnN0YW50KGZhbHNlKTtcblxuXHQvLyBpZiB0aGVyZSBpcyBhIGN1c3RvbSBuZXcgYWN0aW9uIHRoZSBjcmVhdGUgYnV0dG9uIHdpbGwgYmUgYm91bmQgYWdhaW5zdCB0aGlzIG5ldyBhY3Rpb24gKGluc3RlYWQgb2YgYSBQT1NUIGFjdGlvbikuXG5cdC8vIFRoZSB2aXNpYmlsaXR5IG9mIHRoZSBjcmVhdGUgYnV0dG9uIHRoZW4gZGVwZW5kcyBvbiB0aGUgbmV3IGFjdGlvbidzIE9wZXJhdGlvbkF2YWlsYWJsZSBhbm5vdGF0aW9uIChpbnN0ZWFkIG9mIHRoZSBpbnNlcnRSZXN0cmljdGlvbnMpOlxuXHQvLyBPcGVyYXRpb25BdmFpbGFibGUgPSB0cnVlIG9yIHVuZGVmaW5lZCAtPiBjcmVhdGUgaXMgdmlzaWJsZVxuXHQvLyBPcGVyYXRpb25BdmFpbGFibGUgPSBmYWxzZSAtPiBjcmVhdGUgaXMgbm90IHZpc2libGVcblx0Y29uc3QgbmV3QWN0aW9uTmFtZTogQmluZGluZ0V4cHJlc3Npb248c3RyaW5nPiA9IGN1cnJlbnRFbnRpdHlTZXQ/LmFubm90YXRpb25zLkNvbW1vbj8uRHJhZnRSb290Py5OZXdBY3Rpb24/LnRvU3RyaW5nKCk7XG5cdGNvbnN0IHNob3dDcmVhdGVGb3JOZXdBY3Rpb24gPSBuZXdBY3Rpb25OYW1lXG5cdFx0PyBhbm5vdGF0aW9uRXhwcmVzc2lvbihcblx0XHRcdFx0Y29udmVydGVyQ29udGV4dD8uZ2V0RW50aXR5VHlwZSgpLmFjdGlvbnNbbmV3QWN0aW9uTmFtZV0uYW5ub3RhdGlvbnM/LkNvcmU/Lk9wZXJhdGlvbkF2YWlsYWJsZT8udmFsdWVPZigpLFxuXHRcdFx0XHRbXSxcblx0XHRcdFx0dHJ1ZSxcblx0XHRcdFx0KHBhdGg6IHN0cmluZykgPT4gc2luZ2xldG9uUGF0aFZpc2l0b3IocGF0aCwgY29udmVydGVyQ29udGV4dCwgW10pXG5cdFx0ICApXG5cdFx0OiB1bmRlZmluZWQ7XG5cdC8vIC0gSWYgaXQncyBzdGF0aWNhbGx5IG5vdCBpbnNlcnRhYmxlIC0+IGNyZWF0ZSBpcyBub3QgdmlzaWJsZVxuXHQvLyAtIElmIGNyZWF0ZSBpcyBzdGF0aWNhbGx5IGhpZGRlbiAtPiBjcmVhdGUgaXMgbm90IHZpc2libGVcblx0Ly8gLSBJZiBpdCdzIGFuIEFMUCB0ZW1wbGF0ZSAtPiBjcmVhdGUgaXMgbm90IHZpc2libGVcblx0Ly8gLVxuXHQvLyAtIE90aGVyd2lzZVxuXHQvLyBcdCAtIElmIHRoZSBjcmVhdGUgbW9kZSBpcyBleHRlcm5hbCAtPiBjcmVhdGUgaXMgdmlzaWJsZVxuXHQvLyBcdCAtIElmIHdlJ3JlIG9uIHRoZSBsaXN0IHJlcG9ydCAtPlxuXHQvLyBcdCBcdC0gSWYgVUkuQ3JlYXRlSGlkZGVuIHBvaW50cyB0byBhIHByb3BlcnR5IHBhdGggLT4gcHJvdmlkZSBhIG5lZ2F0ZWQgYmluZGluZyB0byB0aGlzIHBhdGhcblx0Ly8gXHQgXHQtIE90aGVyd2lzZSwgY3JlYXRlIGlzIHZpc2libGVcblx0Ly8gXHQgLSBPdGhlcndpc2Vcblx0Ly8gXHQgICAtIFRoaXMgZGVwZW5kcyBvbiB0aGUgdmFsdWUgb2YgdGhlIHRoZSBVSS5Jc0VkaXRhYmxlXG5cdHJldHVybiBpZkVsc2UoXG5cdFx0b3IoXG5cdFx0XHRvcihcblx0XHRcdFx0ZXF1YWwoc2hvd0NyZWF0ZUZvck5ld0FjdGlvbiwgZmFsc2UpLFxuXHRcdFx0XHRhbmQoaXNDb25zdGFudChpc0luc2VydGFibGUpLCBlcXVhbChpc0luc2VydGFibGUsIGZhbHNlKSwgZXF1YWwoc2hvd0NyZWF0ZUZvck5ld0FjdGlvbiwgdW5kZWZpbmVkKSlcblx0XHRcdCksXG5cdFx0XHRpc0NvbnN0YW50KGlzQ3JlYXRlSGlkZGVuKSAmJiBlcXVhbChpc0NyZWF0ZUhpZGRlbiwgdHJ1ZSksXG5cdFx0XHRvcihcblx0XHRcdFx0dmlld0NvbmZpZ3VyYXRpb24gPyBjb252ZXJ0ZXJDb250ZXh0LmdldE1hbmlmZXN0V3JhcHBlcigpLmhhc011bHRpcGxlVmlzdWFsaXphdGlvbnModmlld0NvbmZpZ3VyYXRpb24pIDogZmFsc2UsXG5cdFx0XHRcdGNvbnZlcnRlckNvbnRleHQuZ2V0VGVtcGxhdGVUeXBlKCkgPT09IFRlbXBsYXRlVHlwZS5BbmFseXRpY2FsTGlzdFBhZ2Vcblx0XHRcdClcblx0XHQpLFxuXHRcdGZhbHNlLFxuXHRcdGlmRWxzZShcblx0XHRcdGNyZWF0aW9uTW9kZSA9PT0gXCJFeHRlcm5hbFwiLFxuXHRcdFx0dHJ1ZSxcblx0XHRcdGlmRWxzZShcblx0XHRcdFx0Y29udmVydGVyQ29udGV4dC5nZXRUZW1wbGF0ZVR5cGUoKSA9PT0gVGVtcGxhdGVUeXBlLkxpc3RSZXBvcnQsXG5cdFx0XHRcdGlmRWxzZShpc0JpbmRpbmcoaXNDcmVhdGVIaWRkZW4pLCBub3QoaXNDcmVhdGVIaWRkZW4pLCB0cnVlKSxcblx0XHRcdFx0YW5kKG5vdChpc0NyZWF0ZUhpZGRlbiksIFVJLklzRWRpdGFibGUpXG5cdFx0XHQpXG5cdFx0KVxuXHQpO1xufVxuXG4vKipcbiAqIFJldHVybnMgdGhlIHZpc2liaWxpdHkgZm9yIHRoZSBQYXN0ZSBidXR0b24uXG4gKlxuICogQHBhcmFtIGNvbnZlcnRlckNvbnRleHQgVGhlIGluc3RhbmNlIG9mIHRoZSBjb252ZXJ0ZXIgY29udGV4dFxuICogQHBhcmFtIGNyZWF0aW9uQmVoYXZpb3VyIFRoZSBjaG9zZW4gYmVoYXZpb3Igb2YgY3JlYXRpb25cbiAqIEBwYXJhbSBpc0luc2VydGFibGUgVGhlIGV4cHJlc3Npb24gd2hpY2ggZGVub3RlcyBpbnNlcnQgcmVzdHJpY3Rpb25zXG4gKiBAcGFyYW0gcGFzdGVFbmFibGVkSW5NYW5pZmVzdCBUaGUgZmxhZyB3aGljaCBkZW5vdGVzIHRoZSBwYXN0ZSBlbmFibGVtZW50IHN0YXR1cyB2aWEgbWFuaWZlc3RcbiAqIEBwYXJhbSB2aWV3Q29uZmlndXJhdGlvbiBUaGUgaW5zdGFuY2Ugb2YgdGhlIGNvbmZpZ3VyYXRpb24gZm9yIHRoZSB2aWV3IHBhdGhcbiAqIEByZXR1cm5zIHtFeHByZXNzaW9uPGJvb2xlYW4+fSBFeHByZXNzaW9uIG9yIEJvb2xlYW4gdmFsdWUgb2YgdGhlIFVJLkNyZWF0ZUhpZGRlbiBhbm5vdGF0aW9uXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBnZXRQYXN0ZUVuYWJsZWQoXG5cdGNvbnZlcnRlckNvbnRleHQ6IENvbnZlcnRlckNvbnRleHQsXG5cdGNyZWF0aW9uQmVoYXZpb3VyOiBUYWJsZUFubm90YXRpb25Db25maWd1cmF0aW9uW1wiY3JlYXRlXCJdLFxuXHRpc0luc2VydGFibGU6IEV4cHJlc3Npb248Ym9vbGVhbj4sXG5cdHBhc3RlRW5hYmxlZEluTWFuaWZlc3Q6IGJvb2xlYW4sXG5cdHZpZXdDb25maWd1cmF0aW9uPzogVmlld1BhdGhDb25maWd1cmF0aW9uXG4pOiBFeHByZXNzaW9uPGJvb2xlYW4+IHtcblx0Ly8gSWYgY3JlYXRlIGlzIG5vdCB2aXNpYmxlIC0+IGl0J3Mgbm90IGVuYWJsZWRcblx0Ly8gSWYgY3JlYXRlIGlzIHZpc2libGUgLT5cblx0Ly8gXHQgSWYgaXQncyBpbiB0aGUgTGlzdFJlcG9ydCAtPiBub3QgZW5hYmxlZFxuXHQvL1x0IElmIGl0J3MgaW5zZXJ0YWJsZSAtPiBlbmFibGVkXG5cdHJldHVybiBpZkVsc2UoXG5cdFx0cGFzdGVFbmFibGVkSW5NYW5pZmVzdCAmJiBlcXVhbChnZXRDcmVhdGVWaXNpYmxlKGNvbnZlcnRlckNvbnRleHQsIGNyZWF0aW9uQmVoYXZpb3VyLm1vZGUsIGlzSW5zZXJ0YWJsZSwgdmlld0NvbmZpZ3VyYXRpb24pLCB0cnVlKSxcblx0XHRjb252ZXJ0ZXJDb250ZXh0LmdldFRlbXBsYXRlVHlwZSgpID09PSBUZW1wbGF0ZVR5cGUuT2JqZWN0UGFnZSAmJiBpc0luc2VydGFibGUsXG5cdFx0ZmFsc2Vcblx0KTtcbn1cblxuLyoqXG4gKiBSZXR1cm5zIGEgSlNPTiBzdHJpbmcgY29udGFpbmluZyB0aGUgc29ydCBjb25kaXRpb25zIGZvciB0aGUgcHJlc2VudGF0aW9uIHZhcmlhbnQuXG4gKlxuICogQHBhcmFtIGNvbnZlcnRlckNvbnRleHQgVGhlIGluc3RhbmNlIG9mIHRoZSBjb252ZXJ0ZXIgY29udGV4dFxuICogQHBhcmFtIHtQcmVzZW50YXRpb25WYXJpYW50VHlwZVR5cGVzIHwgdW5kZWZpbmVkfSBwcmVzZW50YXRpb25WYXJpYW50QW5ub3RhdGlvbiBQcmVzZW50YXRpb24gdmFyaWFudCBhbm5vdGF0aW9uXG4gKiBAcGFyYW0gY29sdW1ucyBUYWJsZSBjb2x1bW5zIHByb2Nlc3NlZCBieSB0aGUgY29udmVydGVyXG4gKiBAcmV0dXJucyB7c3RyaW5nIHwgdW5kZWZpbmVkfSBTb3J0IGNvbmRpdGlvbnMgZm9yIGEgcHJlc2VudGF0aW9uIHZhcmlhbnQuXG4gKi9cbmZ1bmN0aW9uIGdldFNvcnRDb25kaXRpb25zKFxuXHRjb252ZXJ0ZXJDb250ZXh0OiBDb252ZXJ0ZXJDb250ZXh0LFxuXHRwcmVzZW50YXRpb25WYXJpYW50QW5ub3RhdGlvbjogUHJlc2VudGF0aW9uVmFyaWFudFR5cGVUeXBlcyB8IHVuZGVmaW5lZCxcblx0Y29sdW1uczogVGFibGVDb2x1bW5bXVxuKTogc3RyaW5nIHwgdW5kZWZpbmVkIHtcblx0Ly8gQ3VycmVudGx5IG5hdmlnYXRpb24gcHJvcGVydHkgaXMgbm90IHN1cHBvcnRlZCBhcyBzb3J0ZXJcblx0Y29uc3Qgbm9uU29ydGFibGVQcm9wZXJ0aWVzID0gZ2V0Tm9uU29ydGFibGVQcm9wZXJ0aWVzUmVzdHJpY3Rpb25zKGNvbnZlcnRlckNvbnRleHQuZ2V0RW50aXR5U2V0KCkpO1xuXHRsZXQgc29ydENvbmRpdGlvbnM6IHN0cmluZyB8IHVuZGVmaW5lZDtcblx0aWYgKHByZXNlbnRhdGlvblZhcmlhbnRBbm5vdGF0aW9uPy5Tb3J0T3JkZXIpIHtcblx0XHRjb25zdCBzb3J0ZXJzOiBTb3J0ZXJUeXBlW10gPSBbXTtcblx0XHRjb25zdCBjb25kaXRpb25zID0ge1xuXHRcdFx0c29ydGVyczogc29ydGVyc1xuXHRcdH07XG5cdFx0cHJlc2VudGF0aW9uVmFyaWFudEFubm90YXRpb24uU29ydE9yZGVyLmZvckVhY2goY29uZGl0aW9uID0+IHtcblx0XHRcdGNvbnN0IGNvbmRpdGlvblByb3BlcnR5ID0gY29uZGl0aW9uLlByb3BlcnR5O1xuXHRcdFx0aWYgKGNvbmRpdGlvblByb3BlcnR5ICYmIG5vblNvcnRhYmxlUHJvcGVydGllcy5pbmRleE9mKGNvbmRpdGlvblByb3BlcnR5LiR0YXJnZXQ/Lm5hbWUpID09PSAtMSkge1xuXHRcdFx0XHRjb25zdCBpbmZvTmFtZSA9IGNvbnZlcnRQcm9wZXJ0eVBhdGhzVG9JbmZvTmFtZXMoW2NvbmRpdGlvblByb3BlcnR5XSwgY29sdW1ucylbMF07XG5cdFx0XHRcdGlmIChpbmZvTmFtZSkge1xuXHRcdFx0XHRcdGNvbmRpdGlvbnMuc29ydGVycy5wdXNoKHtcblx0XHRcdFx0XHRcdG5hbWU6IGluZm9OYW1lLFxuXHRcdFx0XHRcdFx0ZGVzY2VuZGluZzogISFjb25kaXRpb24uRGVzY2VuZGluZ1xuXHRcdFx0XHRcdH0pO1xuXHRcdFx0XHR9XG5cdFx0XHR9XG5cdFx0fSk7XG5cdFx0c29ydENvbmRpdGlvbnMgPSBjb25kaXRpb25zLnNvcnRlcnMubGVuZ3RoID8gSlNPTi5zdHJpbmdpZnkoY29uZGl0aW9ucykgOiB1bmRlZmluZWQ7XG5cdH1cblx0cmV0dXJuIHNvcnRDb25kaXRpb25zO1xufVxuXG4vKipcbiAqIENvbnZlcnRzIGFuIGFycmF5IG9mIHByb3BlcnR5UGF0aCB0byBhbiBhcnJheSBvZiBwcm9wZXJ0eUluZm8gbmFtZXMuXG4gKlxuICogQHBhcmFtIHBhdGhzIHRoZSBhcnJheSB0byBiZSBjb252ZXJ0ZWRcbiAqIEBwYXJhbSBjb2x1bW5zIHRoZSBhcnJheSBvZiBwcm9wZXJ0eUluZm9zXG4gKiBAcmV0dXJucyBhbiBhcnJheSBvZiBwcm9wZXJ0eUluZm8gbmFtZXNcbiAqL1xuXG5mdW5jdGlvbiBjb252ZXJ0UHJvcGVydHlQYXRoc1RvSW5mb05hbWVzKHBhdGhzOiBQcm9wZXJ0eVBhdGhbXSwgY29sdW1uczogVGFibGVDb2x1bW5bXSk6IHN0cmluZ1tdIHtcblx0Y29uc3QgaW5mb05hbWVzOiBzdHJpbmdbXSA9IFtdO1xuXHRwYXRocy5mb3JFYWNoKGN1cnJlbnRQYXRoID0+IHtcblx0XHRpZiAoY3VycmVudFBhdGg/LiR0YXJnZXQ/Lm5hbWUpIHtcblx0XHRcdGNvbnN0IHByb3BlcnR5SW5mbyA9IGNvbHVtbnMuZmluZChjb2x1bW4gPT4ge1xuXHRcdFx0XHRjb25zdCBhbm5vdGF0aW9uQ29sdW1uID0gY29sdW1uIGFzIEFubm90YXRpb25UYWJsZUNvbHVtbjtcblx0XHRcdFx0cmV0dXJuICFhbm5vdGF0aW9uQ29sdW1uLnByb3BlcnR5SW5mb3MgJiYgYW5ub3RhdGlvbkNvbHVtbi5yZWxhdGl2ZVBhdGggPT09IGN1cnJlbnRQYXRoPy4kdGFyZ2V0Py5uYW1lO1xuXHRcdFx0fSk7XG5cdFx0XHRpZiAocHJvcGVydHlJbmZvKSB7XG5cdFx0XHRcdGluZm9OYW1lcy5wdXNoKHByb3BlcnR5SW5mby5uYW1lKTtcblx0XHRcdH1cblx0XHR9XG5cdH0pO1xuXG5cdHJldHVybiBpbmZvTmFtZXM7XG59XG5cbi8qKlxuICogUmV0dXJucyBhIEpTT04gc3RyaW5nIGNvbnRhaW5pbmcgUHJlc2VudGF0aW9uIFZhcmlhbnQgZ3JvdXAgY29uZGl0aW9ucy5cbiAqXG4gKiBAcGFyYW0ge1ByZXNlbnRhdGlvblZhcmlhbnRUeXBlVHlwZXMgfCB1bmRlZmluZWR9IHByZXNlbnRhdGlvblZhcmlhbnRBbm5vdGF0aW9uIFByZXNlbnRhdGlvbiB2YXJpYW50IGFubm90YXRpb25cbiAqIEBwYXJhbSBjb2x1bW5zIENvbnZlcnRlciBwcm9jZXNzZWQgdGFibGUgY29sdW1uc1xuICogQHJldHVybnMge3N0cmluZyB8IHVuZGVmaW5lZH0gR3JvdXAgY29uZGl0aW9ucyBmb3IgYSBQcmVzZW50YXRpb24gdmFyaWFudC5cbiAqL1xuZnVuY3Rpb24gZ2V0R3JvdXBDb25kaXRpb25zKFxuXHRwcmVzZW50YXRpb25WYXJpYW50QW5ub3RhdGlvbjogUHJlc2VudGF0aW9uVmFyaWFudFR5cGVUeXBlcyB8IHVuZGVmaW5lZCxcblx0Y29sdW1uczogVGFibGVDb2x1bW5bXVxuKTogc3RyaW5nIHwgdW5kZWZpbmVkIHtcblx0bGV0IGdyb3VwQ29uZGl0aW9uczogc3RyaW5nIHwgdW5kZWZpbmVkO1xuXHRpZiAocHJlc2VudGF0aW9uVmFyaWFudEFubm90YXRpb24/Lkdyb3VwQnkpIHtcblx0XHRjb25zdCBhR3JvdXBCeSA9IHByZXNlbnRhdGlvblZhcmlhbnRBbm5vdGF0aW9uLkdyb3VwQnkgYXMgUHJvcGVydHlQYXRoW107XG5cdFx0Y29uc3QgYUdyb3VwTGV2ZWxzID0gY29udmVydFByb3BlcnR5UGF0aHNUb0luZm9OYW1lcyhhR3JvdXBCeSwgY29sdW1ucykubWFwKGluZm9OYW1lID0+IHtcblx0XHRcdHJldHVybiB7IG5hbWU6IGluZm9OYW1lIH07XG5cdFx0fSk7XG5cblx0XHRncm91cENvbmRpdGlvbnMgPSBhR3JvdXBMZXZlbHMubGVuZ3RoID8gSlNPTi5zdHJpbmdpZnkoeyBncm91cExldmVsczogYUdyb3VwTGV2ZWxzIH0pIDogdW5kZWZpbmVkO1xuXHR9XG5cdHJldHVybiBncm91cENvbmRpdGlvbnM7XG59XG5cbi8qKlxuICogUmV0dXJucyBhIEpTT04gc3RyaW5nIGNvbnRhaW5pbmcgUHJlc2VudGF0aW9uIFZhcmlhbnQgYWdncmVnYXRlIGNvbmRpdGlvbnMuXG4gKlxuICogQHBhcmFtIHtQcmVzZW50YXRpb25WYXJpYW50VHlwZVR5cGVzIHwgdW5kZWZpbmVkfSBwcmVzZW50YXRpb25WYXJpYW50QW5ub3RhdGlvbiBQcmVzZW50YXRpb24gdmFyaWFudCBhbm5vdGF0aW9uXG4gKiBAcGFyYW0gY29sdW1ucyBDb252ZXJ0ZXIgcHJvY2Vzc2VkIHRhYmxlIGNvbHVtbnNcbiAqIEByZXR1cm5zIHtzdHJpbmcgfCB1bmRlZmluZWR9IEdyb3VwIGNvbmRpdGlvbnMgZm9yIGEgUHJlc2VudGF0aW9uIHZhcmlhbnQuXG4gKi9cbmZ1bmN0aW9uIGdldEFnZ3JlZ2F0ZUNvbmRpdGlvbnMoXG5cdHByZXNlbnRhdGlvblZhcmlhbnRBbm5vdGF0aW9uOiBQcmVzZW50YXRpb25WYXJpYW50VHlwZVR5cGVzIHwgdW5kZWZpbmVkLFxuXHRjb2x1bW5zOiBUYWJsZUNvbHVtbltdXG4pOiBzdHJpbmcgfCB1bmRlZmluZWQge1xuXHRsZXQgYWdncmVnYXRlQ29uZGl0aW9uczogc3RyaW5nIHwgdW5kZWZpbmVkO1xuXHRpZiAocHJlc2VudGF0aW9uVmFyaWFudEFubm90YXRpb24/LlRvdGFsKSB7XG5cdFx0Y29uc3QgYVRvdGFscyA9IHByZXNlbnRhdGlvblZhcmlhbnRBbm5vdGF0aW9uLlRvdGFsIGFzIFByb3BlcnR5UGF0aFtdO1xuXHRcdGNvbnN0IGFnZ3JlZ2F0ZXM6IFJlY29yZDxzdHJpbmcsIG9iamVjdD4gPSB7fTtcblx0XHRjb252ZXJ0UHJvcGVydHlQYXRoc1RvSW5mb05hbWVzKGFUb3RhbHMsIGNvbHVtbnMpLmZvckVhY2goaW5mb05hbWUgPT4ge1xuXHRcdFx0YWdncmVnYXRlc1tpbmZvTmFtZV0gPSB7fTtcblx0XHR9KTtcblxuXHRcdGFnZ3JlZ2F0ZUNvbmRpdGlvbnMgPSBKU09OLnN0cmluZ2lmeShhZ2dyZWdhdGVzKTtcblx0fVxuXG5cdHJldHVybiBhZ2dyZWdhdGVDb25kaXRpb25zO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gZ2V0VGFibGVBbm5vdGF0aW9uQ29uZmlndXJhdGlvbihcblx0bGluZUl0ZW1Bbm5vdGF0aW9uOiBMaW5lSXRlbSB8IHVuZGVmaW5lZCxcblx0dmlzdWFsaXphdGlvblBhdGg6IHN0cmluZyxcblx0Y29udmVydGVyQ29udGV4dDogQ29udmVydGVyQ29udGV4dCxcblx0dGFibGVNYW5pZmVzdENvbmZpZ3VyYXRpb246IFRhYmxlQ29udHJvbENvbmZpZ3VyYXRpb24sXG5cdGNvbHVtbnM6IFRhYmxlQ29sdW1uW10sXG5cdHByZXNlbnRhdGlvblZhcmlhbnRBbm5vdGF0aW9uPzogUHJlc2VudGF0aW9uVmFyaWFudFR5cGVUeXBlcyxcblx0dmlld0NvbmZpZ3VyYXRpb24/OiBWaWV3UGF0aENvbmZpZ3VyYXRpb25cbik6IFRhYmxlQW5ub3RhdGlvbkNvbmZpZ3VyYXRpb24ge1xuXHQvLyBOZWVkIHRvIGdldCB0aGUgdGFyZ2V0XG5cdGNvbnN0IHsgbmF2aWdhdGlvblByb3BlcnR5UGF0aCB9ID0gc3BsaXRQYXRoKHZpc3VhbGl6YXRpb25QYXRoKTtcblx0Y29uc3QgdGl0bGU6IGFueSA9IGNvbnZlcnRlckNvbnRleHQuZ2V0RGF0YU1vZGVsT2JqZWN0UGF0aCgpLnRhcmdldEVudGl0eVR5cGUuYW5ub3RhdGlvbnM/LlVJPy5IZWFkZXJJbmZvPy5UeXBlTmFtZVBsdXJhbDtcblx0Y29uc3QgZW50aXR5U2V0ID0gY29udmVydGVyQ29udGV4dC5nZXREYXRhTW9kZWxPYmplY3RQYXRoKCkudGFyZ2V0RW50aXR5U2V0O1xuXHRjb25zdCBwYWdlTWFuaWZlc3RTZXR0aW5nczogTWFuaWZlc3RXcmFwcGVyID0gY29udmVydGVyQ29udGV4dC5nZXRNYW5pZmVzdFdyYXBwZXIoKTtcblx0Y29uc3QgaGFzQWJzb2x1dGVQYXRoID0gbmF2aWdhdGlvblByb3BlcnR5UGF0aC5sZW5ndGggPT09IDAsXG5cdFx0cDEzbk1vZGU6IHN0cmluZyB8IHVuZGVmaW5lZCA9IGdldFAxM25Nb2RlKHZpc3VhbGl6YXRpb25QYXRoLCBjb252ZXJ0ZXJDb250ZXh0LCB0YWJsZU1hbmlmZXN0Q29uZmlndXJhdGlvbiksXG5cdFx0aWQgPSBuYXZpZ2F0aW9uUHJvcGVydHlQYXRoID8gVGFibGVJRCh2aXN1YWxpemF0aW9uUGF0aCkgOiBUYWJsZUlEKGNvbnZlcnRlckNvbnRleHQuZ2V0Q29udGV4dFBhdGgoKSwgXCJMaW5lSXRlbVwiKTtcblx0Y29uc3QgdGFyZ2V0Q2FwYWJpbGl0aWVzID0gZ2V0Q2FwYWJpbGl0eVJlc3RyaWN0aW9uKGNvbnZlcnRlckNvbnRleHQpO1xuXHRjb25zdCBpc0RlbGV0ZUJ1dHRvblZpc2libGUgPSBnZXREZWxldGVWaXNpYmxlKFxuXHRcdGNvbnZlcnRlckNvbnRleHQsXG5cdFx0bmF2aWdhdGlvblByb3BlcnR5UGF0aCxcblx0XHR0YXJnZXRDYXBhYmlsaXRpZXMuaXNEZWxldGFibGUsXG5cdFx0dmlld0NvbmZpZ3VyYXRpb25cblx0KTtcblx0Y29uc3Qgc2VsZWN0aW9uTW9kZSA9IGdldFNlbGVjdGlvbk1vZGUoXG5cdFx0bGluZUl0ZW1Bbm5vdGF0aW9uLFxuXHRcdHZpc3VhbGl6YXRpb25QYXRoLFxuXHRcdGNvbnZlcnRlckNvbnRleHQsXG5cdFx0aGFzQWJzb2x1dGVQYXRoLFxuXHRcdHRhcmdldENhcGFiaWxpdGllcyxcblx0XHRpc0RlbGV0ZUJ1dHRvblZpc2libGVcblx0KTtcblx0bGV0IHRocmVzaG9sZCA9IG5hdmlnYXRpb25Qcm9wZXJ0eVBhdGggPyAxMCA6IDMwO1xuXHRpZiAocHJlc2VudGF0aW9uVmFyaWFudEFubm90YXRpb24/Lk1heEl0ZW1zKSB7XG5cdFx0dGhyZXNob2xkID0gcHJlc2VudGF0aW9uVmFyaWFudEFubm90YXRpb24uTWF4SXRlbXMudmFsdWVPZigpIGFzIG51bWJlcjtcblx0fVxuXHRjb25zdCBuYXZpZ2F0aW9uVGFyZ2V0UGF0aCA9IGdldE5hdmlnYXRpb25UYXJnZXRQYXRoKGNvbnZlcnRlckNvbnRleHQsIG5hdmlnYXRpb25Qcm9wZXJ0eVBhdGgpO1xuXHRjb25zdCBuYXZpZ2F0aW9uU2V0dGluZ3MgPSBwYWdlTWFuaWZlc3RTZXR0aW5ncy5nZXROYXZpZ2F0aW9uQ29uZmlndXJhdGlvbihuYXZpZ2F0aW9uVGFyZ2V0UGF0aCk7XG5cdGNvbnN0IGNyZWF0aW9uQmVoYXZpb3VyID0gX2dldENyZWF0aW9uQmVoYXZpb3VyKGxpbmVJdGVtQW5ub3RhdGlvbiwgdGFibGVNYW5pZmVzdENvbmZpZ3VyYXRpb24sIGNvbnZlcnRlckNvbnRleHQsIG5hdmlnYXRpb25TZXR0aW5ncyk7XG5cdGxldCBpc1BhcmVudERlbGV0YWJsZTogYW55LCBwYXJlbnRFbnRpdHlTZXREZWxldGFibGU7XG5cdGlmIChjb252ZXJ0ZXJDb250ZXh0LmdldFRlbXBsYXRlVHlwZSgpID09PSBUZW1wbGF0ZVR5cGUuT2JqZWN0UGFnZSkge1xuXHRcdGlzUGFyZW50RGVsZXRhYmxlID0gaXNQYXRoRGVsZXRhYmxlKGNvbnZlcnRlckNvbnRleHQuZ2V0RGF0YU1vZGVsT2JqZWN0UGF0aCgpLCB1bmRlZmluZWQsIHRydWUpO1xuXHRcdGlmIChpc1BhcmVudERlbGV0YWJsZT8uY3VycmVudEVudGl0eVJlc3RyaWN0aW9uKSB7XG5cdFx0XHRwYXJlbnRFbnRpdHlTZXREZWxldGFibGUgPSB1bmRlZmluZWQ7XG5cdFx0fSBlbHNlIHtcblx0XHRcdHBhcmVudEVudGl0eVNldERlbGV0YWJsZSA9IGlzUGFyZW50RGVsZXRhYmxlID8gY29tcGlsZUJpbmRpbmcoaXNQYXJlbnREZWxldGFibGUsIHRydWUpIDogaXNQYXJlbnREZWxldGFibGU7XG5cdFx0fVxuXHR9XG5cdGNvbnN0IGRhdGFNb2RlbE9iamVjdFBhdGggPSBjb252ZXJ0ZXJDb250ZXh0LmdldERhdGFNb2RlbE9iamVjdFBhdGgoKTtcblx0Y29uc3QgaXNJbnNlcnRhYmxlOiBFeHByZXNzaW9uPGJvb2xlYW4+ID0gaXNQYXRoSW5zZXJ0YWJsZShkYXRhTW9kZWxPYmplY3RQYXRoKTtcblx0Y29uc3QgdmFyaWFudE1hbmFnZW1lbnQ6IFZhcmlhbnRNYW5hZ2VtZW50VHlwZSA9IHBhZ2VNYW5pZmVzdFNldHRpbmdzLmdldFZhcmlhbnRNYW5hZ2VtZW50KCk7XG5cdGNvbnN0IGJNYXNzRWRpdFZpc2libGU6IGFueSA9IGdldFZpc2liaWxpdHlNYXNzRWRpdChjb252ZXJ0ZXJDb250ZXh0LCB0YWJsZU1hbmlmZXN0Q29uZmlndXJhdGlvbiwgdGFyZ2V0Q2FwYWJpbGl0aWVzLCBzZWxlY3Rpb25Nb2RlKTtcblx0Y29uc3QgaXNTZWFyY2hhYmxlID0gaXNQYXRoU2VhcmNoYWJsZShjb252ZXJ0ZXJDb250ZXh0LmdldERhdGFNb2RlbE9iamVjdFBhdGgoKSk7XG5cblx0cmV0dXJuIHtcblx0XHRpZDogaWQsXG5cdFx0ZW50aXR5TmFtZTogZW50aXR5U2V0ID8gZW50aXR5U2V0Lm5hbWUgOiBcIlwiLFxuXHRcdGNvbGxlY3Rpb246IGdldFRhcmdldE9iamVjdFBhdGgoY29udmVydGVyQ29udGV4dC5nZXREYXRhTW9kZWxPYmplY3RQYXRoKCkpLFxuXHRcdG5hdmlnYXRpb25QYXRoOiBuYXZpZ2F0aW9uUHJvcGVydHlQYXRoLFxuXHRcdHJvdzogX2dldFJvd0NvbmZpZ3VyYXRpb25Qcm9wZXJ0eShcblx0XHRcdGxpbmVJdGVtQW5ub3RhdGlvbixcblx0XHRcdHZpc3VhbGl6YXRpb25QYXRoLFxuXHRcdFx0Y29udmVydGVyQ29udGV4dCxcblx0XHRcdG5hdmlnYXRpb25TZXR0aW5ncyxcblx0XHRcdG5hdmlnYXRpb25UYXJnZXRQYXRoXG5cdFx0KSxcblx0XHRwMTNuTW9kZTogcDEzbk1vZGUsXG5cdFx0c2hvdzoge1xuXHRcdFx0XCJkZWxldGVcIjogY29tcGlsZUJpbmRpbmcoaXNEZWxldGVCdXR0b25WaXNpYmxlKSxcblx0XHRcdGNyZWF0ZTogY29tcGlsZUJpbmRpbmcoZ2V0Q3JlYXRlVmlzaWJsZShjb252ZXJ0ZXJDb250ZXh0LCBjcmVhdGlvbkJlaGF2aW91cj8ubW9kZSwgaXNJbnNlcnRhYmxlKSksXG5cdFx0XHRwYXN0ZTogY29tcGlsZUJpbmRpbmcoXG5cdFx0XHRcdGdldFBhc3RlRW5hYmxlZChcblx0XHRcdFx0XHRjb252ZXJ0ZXJDb250ZXh0LFxuXHRcdFx0XHRcdGNyZWF0aW9uQmVoYXZpb3VyLFxuXHRcdFx0XHRcdGlzSW5zZXJ0YWJsZSxcblx0XHRcdFx0XHR0YWJsZU1hbmlmZXN0Q29uZmlndXJhdGlvbi5lbmFibGVQYXN0ZSxcblx0XHRcdFx0XHR2aWV3Q29uZmlndXJhdGlvblxuXHRcdFx0XHQpXG5cdFx0XHQpLFxuXHRcdFx0bWFzc0VkaXQ6IHtcblx0XHRcdFx0dmlzaWJsZTogYk1hc3NFZGl0VmlzaWJsZSxcblx0XHRcdFx0ZW5hYmxlZDogZ2V0RW5hYmxlbWVudE1hc3NFZGl0KGNvbnZlcnRlckNvbnRleHQsIGJNYXNzRWRpdFZpc2libGUpXG5cdFx0XHR9XG5cdFx0fSxcblx0XHRkaXNwbGF5TW9kZTogaXNJbkRpc3BsYXlNb2RlKGNvbnZlcnRlckNvbnRleHQsIHZpZXdDb25maWd1cmF0aW9uKSxcblx0XHRjcmVhdGU6IGNyZWF0aW9uQmVoYXZpb3VyLFxuXHRcdHNlbGVjdGlvbk1vZGU6IHNlbGVjdGlvbk1vZGUsXG5cdFx0YXV0b0JpbmRPbkluaXQ6XG5cdFx0XHRjb252ZXJ0ZXJDb250ZXh0LmdldFRlbXBsYXRlVHlwZSgpICE9PSBUZW1wbGF0ZVR5cGUuTGlzdFJlcG9ydCAmJlxuXHRcdFx0Y29udmVydGVyQ29udGV4dC5nZXRUZW1wbGF0ZVR5cGUoKSAhPT0gVGVtcGxhdGVUeXBlLkFuYWx5dGljYWxMaXN0UGFnZSAmJlxuXHRcdFx0ISh2aWV3Q29uZmlndXJhdGlvbiAmJiBjb252ZXJ0ZXJDb250ZXh0LmdldE1hbmlmZXN0V3JhcHBlcigpLmhhc011bHRpcGxlVmlzdWFsaXphdGlvbnModmlld0NvbmZpZ3VyYXRpb24pKSxcblx0XHR2YXJpYW50TWFuYWdlbWVudDogdmFyaWFudE1hbmFnZW1lbnQgPT09IFwiQ29udHJvbFwiICYmICFwMTNuTW9kZSA/IFZhcmlhbnRNYW5hZ2VtZW50VHlwZS5Ob25lIDogdmFyaWFudE1hbmFnZW1lbnQsXG5cdFx0dGhyZXNob2xkOiB0aHJlc2hvbGQsXG5cdFx0c29ydENvbmRpdGlvbnM6IGdldFNvcnRDb25kaXRpb25zKGNvbnZlcnRlckNvbnRleHQsIHByZXNlbnRhdGlvblZhcmlhbnRBbm5vdGF0aW9uLCBjb2x1bW5zKSxcblx0XHRwYXJlbnRFbnRpdHlEZWxldGVFbmFibGVkOiBwYXJlbnRFbnRpdHlTZXREZWxldGFibGUsXG5cdFx0dGl0bGU6IHRpdGxlLFxuXHRcdHNlYXJjaGFibGU6IHRhYmxlTWFuaWZlc3RDb25maWd1cmF0aW9uLnR5cGUgIT09IFwiQW5hbHl0aWNhbFRhYmxlXCIgJiYgIShpc0NvbnN0YW50KGlzU2VhcmNoYWJsZSkgJiYgaXNTZWFyY2hhYmxlLnZhbHVlID09PSBmYWxzZSlcblx0fTtcbn1cblxuZnVuY3Rpb24gX2dldEV4cG9ydERhdGFUeXBlKGRhdGFUeXBlOiBzdHJpbmcsIGlzQ29tcGxleFByb3BlcnR5OiBib29sZWFuID0gZmFsc2UpOiBzdHJpbmcge1xuXHRsZXQgZXhwb3J0RGF0YVR5cGU6IHN0cmluZyA9IFwiU3RyaW5nXCI7XG5cdGlmIChpc0NvbXBsZXhQcm9wZXJ0eSkge1xuXHRcdHJldHVybiBleHBvcnREYXRhVHlwZTtcblx0fSBlbHNlIHtcblx0XHRzd2l0Y2ggKGRhdGFUeXBlKSB7XG5cdFx0XHRjYXNlIFwiRWRtLkRlY2ltYWxcIjpcblx0XHRcdGNhc2UgXCJFZG0uSW50MzJcIjpcblx0XHRcdGNhc2UgXCJFZG0uSW50NjRcIjpcblx0XHRcdGNhc2UgXCJFZG0uRG91YmxlXCI6XG5cdFx0XHRjYXNlIFwiRWRtLkJ5dGVcIjpcblx0XHRcdFx0ZXhwb3J0RGF0YVR5cGUgPSBcIk51bWJlclwiO1xuXHRcdFx0XHRicmVhaztcblx0XHRcdGNhc2UgXCJFZG0uRGF0ZU9mVGltZVwiOlxuXHRcdFx0Y2FzZSBcIkVkbS5EYXRlXCI6XG5cdFx0XHRcdGV4cG9ydERhdGFUeXBlID0gXCJEYXRlXCI7XG5cdFx0XHRcdGJyZWFrO1xuXHRcdFx0Y2FzZSBcIkVkbS5EYXRlVGltZU9mZnNldFwiOlxuXHRcdFx0XHRleHBvcnREYXRhVHlwZSA9IFwiRGF0ZVRpbWVcIjtcblx0XHRcdFx0YnJlYWs7XG5cdFx0XHRjYXNlIFwiRWRtLlRpbWVPZkRheVwiOlxuXHRcdFx0XHRleHBvcnREYXRhVHlwZSA9IFwiVGltZVwiO1xuXHRcdFx0XHRicmVhaztcblx0XHRcdGNhc2UgXCJFZG0uQm9vbGVhblwiOlxuXHRcdFx0XHRleHBvcnREYXRhVHlwZSA9IFwiQm9vbGVhblwiO1xuXHRcdFx0XHRicmVhaztcblx0XHRcdGRlZmF1bHQ6XG5cdFx0XHRcdGV4cG9ydERhdGFUeXBlID0gXCJTdHJpbmdcIjtcblx0XHR9XG5cdH1cblx0cmV0dXJuIGV4cG9ydERhdGFUeXBlO1xufVxuXG5mdW5jdGlvbiBpc0luRGlzcGxheU1vZGUoY29udmVydGVyQ29udGV4dDogQ29udmVydGVyQ29udGV4dCwgdmlld0NvbmZpZ3VyYXRpb24/OiBWaWV3UGF0aENvbmZpZ3VyYXRpb24pOiBib29sZWFuIHtcblx0Y29uc3QgdGVtcGxhdGVUeXBlID0gY29udmVydGVyQ29udGV4dC5nZXRUZW1wbGF0ZVR5cGUoKTtcblx0aWYgKFxuXHRcdHRlbXBsYXRlVHlwZSA9PT0gVGVtcGxhdGVUeXBlLkxpc3RSZXBvcnQgfHxcblx0XHR0ZW1wbGF0ZVR5cGUgPT09IFRlbXBsYXRlVHlwZS5BbmFseXRpY2FsTGlzdFBhZ2UgfHxcblx0XHQodmlld0NvbmZpZ3VyYXRpb24gJiYgY29udmVydGVyQ29udGV4dC5nZXRNYW5pZmVzdFdyYXBwZXIoKS5oYXNNdWx0aXBsZVZpc3VhbGl6YXRpb25zKHZpZXdDb25maWd1cmF0aW9uKSlcblx0KSB7XG5cdFx0cmV0dXJuIHRydWU7XG5cdH1cblx0Ly8gdXBkYXRhYmxlIHdpbGwgYmUgaGFuZGxlZCBhdCB0aGUgcHJvcGVydHkgbGV2ZWxcblx0cmV0dXJuIGZhbHNlO1xufVxuXG4vKipcbiAqIFNwbGl0IHRoZSB2aXN1YWxpemF0aW9uIHBhdGggaW50byB0aGUgbmF2aWdhdGlvbiBwcm9wZXJ0eSBwYXRoIGFuZCBhbm5vdGF0aW9uLlxuICpcbiAqIEBwYXJhbSB2aXN1YWxpemF0aW9uUGF0aFxuICogQHJldHVybnMge29iamVjdH1cbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIHNwbGl0UGF0aCh2aXN1YWxpemF0aW9uUGF0aDogc3RyaW5nKSB7XG5cdGxldCBbbmF2aWdhdGlvblByb3BlcnR5UGF0aCwgYW5ub3RhdGlvblBhdGhdID0gdmlzdWFsaXphdGlvblBhdGguc3BsaXQoXCJAXCIpO1xuXG5cdGlmIChuYXZpZ2F0aW9uUHJvcGVydHlQYXRoLmxhc3RJbmRleE9mKFwiL1wiKSA9PT0gbmF2aWdhdGlvblByb3BlcnR5UGF0aC5sZW5ndGggLSAxKSB7XG5cdFx0Ly8gRHJvcCB0cmFpbGluZyBzbGFzaFxuXHRcdG5hdmlnYXRpb25Qcm9wZXJ0eVBhdGggPSBuYXZpZ2F0aW9uUHJvcGVydHlQYXRoLnN1YnN0cigwLCBuYXZpZ2F0aW9uUHJvcGVydHlQYXRoLmxlbmd0aCAtIDEpO1xuXHR9XG5cdHJldHVybiB7IG5hdmlnYXRpb25Qcm9wZXJ0eVBhdGgsIGFubm90YXRpb25QYXRoIH07XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBnZXRTZWxlY3Rpb25WYXJpYW50Q29uZmlndXJhdGlvbihcblx0c2VsZWN0aW9uVmFyaWFudFBhdGg6IHN0cmluZyxcblx0Y29udmVydGVyQ29udGV4dDogQ29udmVydGVyQ29udGV4dFxuKTogU2VsZWN0aW9uVmFyaWFudENvbmZpZ3VyYXRpb24gfCB1bmRlZmluZWQge1xuXHRjb25zdCByZXNvbHZlZFRhcmdldCA9IGNvbnZlcnRlckNvbnRleHQuZ2V0RW50aXR5VHlwZUFubm90YXRpb24oc2VsZWN0aW9uVmFyaWFudFBhdGgpO1xuXHRjb25zdCBzZWxlY3Rpb246IFNlbGVjdGlvblZhcmlhbnRUeXBlID0gcmVzb2x2ZWRUYXJnZXQuYW5ub3RhdGlvbiBhcyBTZWxlY3Rpb25WYXJpYW50VHlwZTtcblxuXHRpZiAoc2VsZWN0aW9uKSB7XG5cdFx0Y29uc3QgcHJvcGVydHlOYW1lczogc3RyaW5nW10gPSBbXTtcblx0XHRzZWxlY3Rpb24uU2VsZWN0T3B0aW9ucz8uZm9yRWFjaCgoc2VsZWN0T3B0aW9uOiBTZWxlY3RPcHRpb25UeXBlKSA9PiB7XG5cdFx0XHRjb25zdCBwcm9wZXJ0eU5hbWU6IGFueSA9IHNlbGVjdE9wdGlvbi5Qcm9wZXJ0eU5hbWU7XG5cdFx0XHRjb25zdCBQcm9wZXJ0eVBhdGg6IHN0cmluZyA9IHByb3BlcnR5TmFtZS52YWx1ZTtcblx0XHRcdGlmIChwcm9wZXJ0eU5hbWVzLmluZGV4T2YoUHJvcGVydHlQYXRoKSA9PT0gLTEpIHtcblx0XHRcdFx0cHJvcGVydHlOYW1lcy5wdXNoKFByb3BlcnR5UGF0aCk7XG5cdFx0XHR9XG5cdFx0fSk7XG5cdFx0cmV0dXJuIHtcblx0XHRcdHRleHQ6IHNlbGVjdGlvbj8uVGV4dD8udG9TdHJpbmcoKSxcblx0XHRcdHByb3BlcnR5TmFtZXM6IHByb3BlcnR5TmFtZXNcblx0XHR9O1xuXHR9XG5cdHJldHVybiB1bmRlZmluZWQ7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBnZXRUYWJsZU1hbmlmZXN0Q29uZmlndXJhdGlvbihcblx0bGluZUl0ZW1Bbm5vdGF0aW9uOiBMaW5lSXRlbSB8IHVuZGVmaW5lZCxcblx0dmlzdWFsaXphdGlvblBhdGg6IHN0cmluZyxcblx0Y29udmVydGVyQ29udGV4dDogQ29udmVydGVyQ29udGV4dCxcblx0Y2hlY2tDb25kZW5zZWRMYXlvdXQ6IGJvb2xlYW4gPSBmYWxzZVxuKTogVGFibGVDb250cm9sQ29uZmlndXJhdGlvbiB7XG5cdGNvbnN0IHRhYmxlTWFuaWZlc3RTZXR0aW5nczogVGFibGVNYW5pZmVzdENvbmZpZ3VyYXRpb24gPSBjb252ZXJ0ZXJDb250ZXh0LmdldE1hbmlmZXN0Q29udHJvbENvbmZpZ3VyYXRpb24odmlzdWFsaXphdGlvblBhdGgpO1xuXHRjb25zdCB0YWJsZVNldHRpbmdzID0gKHRhYmxlTWFuaWZlc3RTZXR0aW5ncyAmJiB0YWJsZU1hbmlmZXN0U2V0dGluZ3MudGFibGVTZXR0aW5ncykgfHwge307XG5cdGxldCBxdWlja1NlbGVjdGlvblZhcmlhbnQ6IGFueTtcblx0Y29uc3QgcXVpY2tGaWx0ZXJQYXRoczogeyBhbm5vdGF0aW9uUGF0aDogc3RyaW5nIH1bXSA9IFtdO1xuXHRsZXQgZW5hYmxlRXhwb3J0ID0gdHJ1ZTtcblx0bGV0IGNyZWF0aW9uTW9kZSA9IENyZWF0aW9uTW9kZS5OZXdQYWdlO1xuXHRsZXQgZmlsdGVycztcblx0bGV0IGNyZWF0ZUF0RW5kID0gdHJ1ZTtcblx0bGV0IGRpc2FibGVBZGRSb3dCdXR0b25Gb3JFbXB0eURhdGEgPSBmYWxzZTtcblx0bGV0IGN1c3RvbVZhbGlkYXRpb25GdW5jdGlvbjtcblx0bGV0IGNvbmRlbnNlZFRhYmxlTGF5b3V0ID0gZmFsc2U7XG5cdGxldCBoaWRlVGFibGVUaXRsZSA9IGZhbHNlO1xuXHRsZXQgdGFibGVUeXBlOiBUYWJsZVR5cGUgPSBcIlJlc3BvbnNpdmVUYWJsZVwiO1xuXHRsZXQgZW5hYmxlRnVsbFNjcmVlbiA9IGZhbHNlO1xuXHRsZXQgc2VsZWN0aW9uTGltaXQgPSAyMDA7XG5cdGxldCBtdWx0aVNlbGVjdE1vZGU7XG5cdGNvbnN0IGVuYWJsZUF1dG9Db2x1bW5XaWR0aCA9IHRydWU7XG5cdGxldCBlbmFibGVQYXN0ZSA9IGNvbnZlcnRlckNvbnRleHQuZ2V0VGVtcGxhdGVUeXBlKCkgPT09IFwiT2JqZWN0UGFnZVwiO1xuXHRjb25zdCBpc0NvbmRlbnNlZFRhYmxlTGF5b3V0Q29tcGxpYW50ID0gY2hlY2tDb25kZW5zZWRMYXlvdXQgJiYgY29udmVydGVyQ29udGV4dC5nZXRNYW5pZmVzdFdyYXBwZXIoKS5pc0NvbmRlbnNlZExheW91dENvbXBsaWFudCgpO1xuXHRjb25zdCBlbnRpdHlUeXBlID0gY29udmVydGVyQ29udGV4dC5nZXRFbnRpdHlUeXBlKCk7XG5cdGNvbnN0IGFnZ3JlZ2F0aW9uSGVscGVyID0gbmV3IEFnZ3JlZ2F0aW9uSGVscGVyKGVudGl0eVR5cGUsIGNvbnZlcnRlckNvbnRleHQpO1xuXHRpZiAobGluZUl0ZW1Bbm5vdGF0aW9uKSB7XG5cdFx0Y29uc3QgdGFyZ2V0RW50aXR5VHlwZSA9IGNvbnZlcnRlckNvbnRleHQuZ2V0QW5ub3RhdGlvbkVudGl0eVR5cGUobGluZUl0ZW1Bbm5vdGF0aW9uKTtcblx0XHR0YWJsZVNldHRpbmdzPy5xdWlja1ZhcmlhbnRTZWxlY3Rpb24/LnBhdGhzPy5mb3JFYWNoKChwYXRoOiB7IGFubm90YXRpb25QYXRoOiBzdHJpbmcgfSkgPT4ge1xuXHRcdFx0cXVpY2tTZWxlY3Rpb25WYXJpYW50ID0gdGFyZ2V0RW50aXR5VHlwZS5yZXNvbHZlUGF0aChcIkBcIiArIHBhdGguYW5ub3RhdGlvblBhdGgpO1xuXHRcdFx0Ly8gcXVpY2tTZWxlY3Rpb25WYXJpYW50ID0gY29udmVydGVyQ29udGV4dC5nZXRFbnRpdHlUeXBlQW5ub3RhdGlvbihwYXRoLmFubm90YXRpb25QYXRoKTtcblx0XHRcdGlmIChxdWlja1NlbGVjdGlvblZhcmlhbnQpIHtcblx0XHRcdFx0cXVpY2tGaWx0ZXJQYXRocy5wdXNoKHsgYW5ub3RhdGlvblBhdGg6IHBhdGguYW5ub3RhdGlvblBhdGggfSk7XG5cdFx0XHR9XG5cdFx0XHRmaWx0ZXJzID0ge1xuXHRcdFx0XHRxdWlja0ZpbHRlcnM6IHtcblx0XHRcdFx0XHRlbmFibGVkOlxuXHRcdFx0XHRcdFx0Y29udmVydGVyQ29udGV4dC5nZXRUZW1wbGF0ZVR5cGUoKSA9PT0gVGVtcGxhdGVUeXBlLkxpc3RSZXBvcnRcblx0XHRcdFx0XHRcdFx0PyBcIns9ICR7cGFnZUludGVybmFsPmhhc1BlbmRpbmdGaWx0ZXJzfSAhPT0gdHJ1ZX1cIlxuXHRcdFx0XHRcdFx0XHQ6IHRydWUsXG5cdFx0XHRcdFx0c2hvd0NvdW50czogdGFibGVTZXR0aW5ncz8ucXVpY2tWYXJpYW50U2VsZWN0aW9uPy5zaG93Q291bnRzLFxuXHRcdFx0XHRcdHBhdGhzOiBxdWlja0ZpbHRlclBhdGhzXG5cdFx0XHRcdH1cblx0XHRcdH07XG5cdFx0fSk7XG5cdFx0Y3JlYXRpb25Nb2RlID0gdGFibGVTZXR0aW5ncy5jcmVhdGlvbk1vZGU/Lm5hbWUgfHwgY3JlYXRpb25Nb2RlO1xuXHRcdGNyZWF0ZUF0RW5kID0gdGFibGVTZXR0aW5ncy5jcmVhdGlvbk1vZGU/LmNyZWF0ZUF0RW5kICE9PSB1bmRlZmluZWQgPyB0YWJsZVNldHRpbmdzLmNyZWF0aW9uTW9kZT8uY3JlYXRlQXRFbmQgOiB0cnVlO1xuXHRcdGN1c3RvbVZhbGlkYXRpb25GdW5jdGlvbiA9IHRhYmxlU2V0dGluZ3MuY3JlYXRpb25Nb2RlPy5jdXN0b21WYWxpZGF0aW9uRnVuY3Rpb247XG5cdFx0Ly8gaWYgYSBjdXN0b20gdmFsaWRhdGlvbiBmdW5jdGlvbiBpcyBwcm92aWRlZCwgZGlzYWJsZUFkZFJvd0J1dHRvbkZvckVtcHR5RGF0YSBzaG91bGQgbm90IGJlIGNvbnNpZGVyZWQsIGkuZS4gc2V0IHRvIGZhbHNlXG5cdFx0ZGlzYWJsZUFkZFJvd0J1dHRvbkZvckVtcHR5RGF0YSA9ICFjdXN0b21WYWxpZGF0aW9uRnVuY3Rpb24gPyAhIXRhYmxlU2V0dGluZ3MuY3JlYXRpb25Nb2RlPy5kaXNhYmxlQWRkUm93QnV0dG9uRm9yRW1wdHlEYXRhIDogZmFsc2U7XG5cdFx0Y29uZGVuc2VkVGFibGVMYXlvdXQgPSB0YWJsZVNldHRpbmdzLmNvbmRlbnNlZFRhYmxlTGF5b3V0ICE9PSB1bmRlZmluZWQgPyB0YWJsZVNldHRpbmdzLmNvbmRlbnNlZFRhYmxlTGF5b3V0IDogZmFsc2U7XG5cdFx0aGlkZVRhYmxlVGl0bGUgPSAhIXRhYmxlU2V0dGluZ3MucXVpY2tWYXJpYW50U2VsZWN0aW9uPy5oaWRlVGFibGVUaXRsZTtcblx0XHR0YWJsZVR5cGUgPSB0YWJsZVNldHRpbmdzPy50eXBlIHx8IFwiUmVzcG9uc2l2ZVRhYmxlXCI7XG5cdFx0aWYgKGNvbnZlcnRlckNvbnRleHQuZ2V0VGVtcGxhdGVUeXBlKCkgIT09IFwiT2JqZWN0UGFnZVwiKSB7XG5cdFx0XHRpZiAodGFibGVTZXR0aW5ncz8udHlwZSA9PT0gXCJBbmFseXRpY2FsVGFibGVcIiAmJiAhYWdncmVnYXRpb25IZWxwZXIuaXNBbmFseXRpY3NTdXBwb3J0ZWQoKSkge1xuXHRcdFx0XHR0YWJsZVR5cGUgPSBcIkdyaWRUYWJsZVwiO1xuXHRcdFx0fVxuXHRcdFx0aWYgKCF0YWJsZVNldHRpbmdzPy50eXBlKSB7XG5cdFx0XHRcdGlmIChjb252ZXJ0ZXJDb250ZXh0LmdldE1hbmlmZXN0V3JhcHBlcigpLmlzRGVza3RvcCgpICYmIGFnZ3JlZ2F0aW9uSGVscGVyLmlzQW5hbHl0aWNzU3VwcG9ydGVkKCkpIHtcblx0XHRcdFx0XHR0YWJsZVR5cGUgPSBcIkFuYWx5dGljYWxUYWJsZVwiO1xuXHRcdFx0XHR9IGVsc2Uge1xuXHRcdFx0XHRcdHRhYmxlVHlwZSA9IFwiUmVzcG9uc2l2ZVRhYmxlXCI7XG5cdFx0XHRcdH1cblx0XHRcdH1cblx0XHR9XG5cdFx0ZW5hYmxlRnVsbFNjcmVlbiA9IHRhYmxlU2V0dGluZ3MuZW5hYmxlRnVsbFNjcmVlbiB8fCBmYWxzZTtcblx0XHRpZiAoZW5hYmxlRnVsbFNjcmVlbiA9PT0gdHJ1ZSAmJiBjb252ZXJ0ZXJDb250ZXh0LmdldFRlbXBsYXRlVHlwZSgpID09PSBUZW1wbGF0ZVR5cGUuTGlzdFJlcG9ydCkge1xuXHRcdFx0ZW5hYmxlRnVsbFNjcmVlbiA9IGZhbHNlO1xuXHRcdFx0Y29udmVydGVyQ29udGV4dFxuXHRcdFx0XHQuZ2V0RGlhZ25vc3RpY3MoKVxuXHRcdFx0XHQuYWRkSXNzdWUoSXNzdWVDYXRlZ29yeS5NYW5pZmVzdCwgSXNzdWVTZXZlcml0eS5Mb3csIElzc3VlVHlwZS5GVUxMU0NSRUVOTU9ERV9OT1RfT05fTElTVFJFUE9SVCk7XG5cdFx0fVxuXHRcdHNlbGVjdGlvbkxpbWl0ID0gdGFibGVTZXR0aW5ncy5zZWxlY3RBbGwgPT09IHRydWUgfHwgdGFibGVTZXR0aW5ncy5zZWxlY3Rpb25MaW1pdCA9PT0gMCA/IDAgOiB0YWJsZVNldHRpbmdzLnNlbGVjdGlvbkxpbWl0IHx8IDIwMDtcblx0XHRpZiAodGFibGVUeXBlID09PSBcIlJlc3BvbnNpdmVUYWJsZVwiKSB7XG5cdFx0XHRpZiAoXG5cdFx0XHRcdGNvbnZlcnRlckNvbnRleHQuZ2V0VGVtcGxhdGVUeXBlKCkgPT09IFRlbXBsYXRlVHlwZS5MaXN0UmVwb3J0IHx8XG5cdFx0XHRcdGNvbnZlcnRlckNvbnRleHQuZ2V0VGVtcGxhdGVUeXBlKCkgPT09IFRlbXBsYXRlVHlwZS5BbmFseXRpY2FsTGlzdFBhZ2Vcblx0XHRcdCkge1xuXHRcdFx0XHRtdWx0aVNlbGVjdE1vZGUgPSAhIXRhYmxlU2V0dGluZ3Muc2VsZWN0QWxsID8gXCJEZWZhdWx0XCIgOiBcIkNsZWFyQWxsXCI7XG5cdFx0XHR9XG5cdFx0XHRpZiAoY29udmVydGVyQ29udGV4dC5nZXRUZW1wbGF0ZVR5cGUoKSA9PT0gVGVtcGxhdGVUeXBlLk9iamVjdFBhZ2UpIHtcblx0XHRcdFx0aWYgKGNvbnZlcnRlckNvbnRleHQuZ2V0TWFuaWZlc3RXcmFwcGVyKCkudXNlSWNvblRhYkJhcigpKSB7XG5cdFx0XHRcdFx0bXVsdGlTZWxlY3RNb2RlID0gISF0YWJsZVNldHRpbmdzLnNlbGVjdEFsbCA/IFwiRGVmYXVsdFwiIDogXCJDbGVhckFsbFwiO1xuXHRcdFx0XHR9IGVsc2Uge1xuXHRcdFx0XHRcdG11bHRpU2VsZWN0TW9kZSA9IHRhYmxlU2V0dGluZ3Muc2VsZWN0QWxsID09PSBmYWxzZSA/IFwiQ2xlYXJBbGxcIiA6IFwiRGVmYXVsdFwiO1xuXHRcdFx0XHR9XG5cdFx0XHR9XG5cdFx0fVxuXHRcdGVuYWJsZVBhc3RlID0gY29udmVydGVyQ29udGV4dC5nZXRUZW1wbGF0ZVR5cGUoKSA9PT0gXCJPYmplY3RQYWdlXCIgJiYgdGFibGVTZXR0aW5ncy5lbmFibGVQYXN0ZSAhPT0gZmFsc2U7XG5cdFx0ZW5hYmxlRXhwb3J0ID1cblx0XHRcdHRhYmxlU2V0dGluZ3MuZW5hYmxlRXhwb3J0ICE9PSB1bmRlZmluZWRcblx0XHRcdFx0PyB0YWJsZVNldHRpbmdzLmVuYWJsZUV4cG9ydFxuXHRcdFx0XHQ6IGNvbnZlcnRlckNvbnRleHQuZ2V0VGVtcGxhdGVUeXBlKCkgIT09IFwiT2JqZWN0UGFnZVwiIHx8IGVuYWJsZVBhc3RlO1xuXHR9XG5cdHJldHVybiB7XG5cdFx0ZmlsdGVyczogZmlsdGVycyxcblx0XHR0eXBlOiB0YWJsZVR5cGUsXG5cdFx0ZW5hYmxlRnVsbFNjcmVlbjogZW5hYmxlRnVsbFNjcmVlbixcblx0XHRoZWFkZXJWaXNpYmxlOiAhKHF1aWNrU2VsZWN0aW9uVmFyaWFudCAmJiBoaWRlVGFibGVUaXRsZSksXG5cdFx0ZW5hYmxlRXhwb3J0OiBlbmFibGVFeHBvcnQsXG5cdFx0Y3JlYXRpb25Nb2RlOiBjcmVhdGlvbk1vZGUsXG5cdFx0Y3JlYXRlQXRFbmQ6IGNyZWF0ZUF0RW5kLFxuXHRcdGRpc2FibGVBZGRSb3dCdXR0b25Gb3JFbXB0eURhdGE6IGRpc2FibGVBZGRSb3dCdXR0b25Gb3JFbXB0eURhdGEsXG5cdFx0Y3VzdG9tVmFsaWRhdGlvbkZ1bmN0aW9uOiBjdXN0b21WYWxpZGF0aW9uRnVuY3Rpb24sXG5cdFx0dXNlQ29uZGVuc2VkVGFibGVMYXlvdXQ6IGNvbmRlbnNlZFRhYmxlTGF5b3V0ICYmIGlzQ29uZGVuc2VkVGFibGVMYXlvdXRDb21wbGlhbnQsXG5cdFx0c2VsZWN0aW9uTGltaXQ6IHNlbGVjdGlvbkxpbWl0LFxuXHRcdG11bHRpU2VsZWN0TW9kZTogbXVsdGlTZWxlY3RNb2RlLFxuXHRcdGVuYWJsZVBhc3RlOiBlbmFibGVQYXN0ZSxcblx0XHRzaG93Um93Q291bnQ6XG5cdFx0XHQhdGFibGVTZXR0aW5ncz8ucXVpY2tWYXJpYW50U2VsZWN0aW9uPy5zaG93Q291bnRzICYmICFjb252ZXJ0ZXJDb250ZXh0LmdldE1hbmlmZXN0V3JhcHBlcigpLmdldFZpZXdDb25maWd1cmF0aW9uKCk/LnNob3dDb3VudHMsXG5cdFx0ZW5hYmxlTWFzc0VkaXQ6IHRhYmxlU2V0dGluZ3M/LmVuYWJsZU1hc3NFZGl0LFxuXHRcdGVuYWJsZUF1dG9Db2x1bW5XaWR0aDogZW5hYmxlQXV0b0NvbHVtbldpZHRoXG5cdH07XG59XG4iXX0=
2268
+ //# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIlRhYmxlLnRzIl0sIm5hbWVzIjpbIkNvbHVtblR5cGUiLCJnZXRUYWJsZUFjdGlvbnMiLCJsaW5lSXRlbUFubm90YXRpb24iLCJ2aXN1YWxpemF0aW9uUGF0aCIsImNvbnZlcnRlckNvbnRleHQiLCJuYXZpZ2F0aW9uU2V0dGluZ3MiLCJhVGFibGVBY3Rpb25zIiwiZ2V0VGFibGVBbm5vdGF0aW9uQWN0aW9ucyIsImFBbm5vdGF0aW9uQWN0aW9ucyIsInRhYmxlQWN0aW9ucyIsImFIaWRkZW5BY3Rpb25zIiwiaGlkZGVuVGFibGVBY3Rpb25zIiwiaW5zZXJ0Q3VzdG9tRWxlbWVudHMiLCJnZXRBY3Rpb25zRnJvbU1hbmlmZXN0IiwiZ2V0TWFuaWZlc3RDb250cm9sQ29uZmlndXJhdGlvbiIsImFjdGlvbnMiLCJpc05hdmlnYWJsZSIsImVuYWJsZU9uU2VsZWN0IiwiZW5hYmxlQXV0b1Njcm9sbCIsImVuYWJsZWQiLCJkZWZhdWx0VmFsdWVzRXh0ZW5zaW9uRnVuY3Rpb24iLCJnZXRUYWJsZUNvbHVtbnMiLCJhbm5vdGF0aW9uQ29sdW1ucyIsImdldENvbHVtbnNGcm9tQW5ub3RhdGlvbnMiLCJtYW5pZmVzdENvbHVtbnMiLCJnZXRDb2x1bW5zRnJvbU1hbmlmZXN0IiwiY29sdW1ucyIsImdldEFubm90YXRpb25FbnRpdHlUeXBlIiwid2lkdGgiLCJhdmFpbGFiaWxpdHkiLCJzZXR0aW5ncyIsImhvcml6b250YWxBbGlnbiIsImZvcm1hdE9wdGlvbnMiLCJnZXRBZ2dyZWdhdGVEZWZpbml0aW9uc0Zyb21FbnRpdHlUeXBlIiwiZW50aXR5VHlwZSIsInRhYmxlQ29sdW1ucyIsImFnZ3JlZ2F0aW9uSGVscGVyIiwiQWdncmVnYXRpb25IZWxwZXIiLCJmaW5kQ29sdW1uRnJvbVBhdGgiLCJwYXRoIiwiZmluZCIsImNvbHVtbiIsImFubm90YXRpb25Db2x1bW4iLCJwcm9wZXJ0eUluZm9zIiwidW5kZWZpbmVkIiwicmVsYXRpdmVQYXRoIiwiaXNBbmFseXRpY3NTdXBwb3J0ZWQiLCJtQ3VycmVuY3lPclVuaXRQcm9wZXJ0aWVzIiwiU2V0IiwiZm9yRWFjaCIsIm9Db2x1bW4iLCJvVGFibGVDb2x1bW4iLCJ1bml0IiwiYWRkIiwiYUN1c3RvbUFnZ3JlZ2F0ZUFubm90YXRpb25zIiwiZ2V0Q3VzdG9tQWdncmVnYXRlRGVmaW5pdGlvbnMiLCJtUmF3RGVmaW5pdGlvbnMiLCJhbm5vdGF0aW9uIiwib0FnZ3JlZ2F0ZWRQcm9wZXJ0eSIsIl9lbnRpdHlUeXBlIiwiZW50aXR5UHJvcGVydGllcyIsIm9Qcm9wZXJ0eSIsIm5hbWUiLCJxdWFsaWZpZXIiLCJhQ29udGV4dERlZmluaW5nUHJvcGVydGllcyIsImFubm90YXRpb25zIiwiQWdncmVnYXRpb24iLCJDb250ZXh0RGVmaW5pbmdQcm9wZXJ0aWVzIiwibWFwIiwib0N0eERlZlByb3BlcnR5IiwidmFsdWUiLCJtUmVzdWx0IiwiYVJhd0NvbnRleHREZWZpbmluZ1Byb3BlcnRpZXMiLCJoYXMiLCJpc0RhdGFQb2ludEZha2VUYXJnZXRQcm9wZXJ0eSIsImRlZmF1bHRBZ2dyZWdhdGUiLCJjb250ZXh0RGVmaW5pbmdQcm9wZXJ0eU5hbWUiLCJwdXNoIiwibGVuZ3RoIiwiY29udGV4dERlZmluaW5nUHJvcGVydGllcyIsInVwZGF0ZVRhYmxlVmlzdWFsaXphdGlvbkZvckFuYWx5dGljcyIsInRhYmxlVmlzdWFsaXphdGlvbiIsInByZXNlbnRhdGlvblZhcmlhbnRBbm5vdGF0aW9uIiwiY29udHJvbCIsInR5cGUiLCJhZ2dyZWdhdGVzRGVmaW5pdGlvbnMiLCJlbmFibGVBbmFseXRpY3MiLCJhZ2dyZWdhdGVzIiwiYWxsb3dlZFRyYW5zZm9ybWF0aW9ucyIsImdldEFsbG93ZWRUcmFuc2Zvcm1hdGlvbnMiLCJlbmFibGVBbmFseXRpY3NTZWFyY2giLCJpbmRleE9mIiwiZ3JvdXBDb25kaXRpb25zIiwiZ2V0R3JvdXBDb25kaXRpb25zIiwiYWdncmVnYXRlQ29uZGl0aW9ucyIsImdldEFnZ3JlZ2F0ZUNvbmRpdGlvbnMiLCJnZXROYXZpZ2F0aW9uVGFyZ2V0UGF0aCIsIm5hdmlnYXRpb25Qcm9wZXJ0eVBhdGgiLCJtYW5pZmVzdFdyYXBwZXIiLCJnZXRNYW5pZmVzdFdyYXBwZXIiLCJnZXROYXZpZ2F0aW9uQ29uZmlndXJhdGlvbiIsIm5hdkNvbmZpZyIsIk9iamVjdCIsImtleXMiLCJkYXRhTW9kZWxQYXRoIiwiZ2V0RGF0YU1vZGVsT2JqZWN0UGF0aCIsImNvbnRleHRQYXRoIiwiZ2V0Q29udGV4dFBhdGgiLCJuYXZDb25maWdGb3JDb250ZXh0UGF0aCIsInRhcmdldEVudGl0eVNldCIsInN0YXJ0aW5nRW50aXR5U2V0IiwidXBkYXRlTGlua2VkUHJvcGVydGllcyIsImZpbmRDb2x1bW5CeVBhdGgiLCJvUHJvcCIsInNVbml0IiwiZ2V0QXNzb2NpYXRlZEN1cnJlbmN5UHJvcGVydHkiLCJnZXRBc3NvY2lhdGVkVW5pdFByb3BlcnR5Iiwib1VuaXRDb2x1bW4iLCJkaXNwbGF5TW9kZSIsImdldERpc3BsYXlNb2RlIiwidGV4dEFubm90YXRpb24iLCJDb21tb24iLCJUZXh0IiwiaXNQYXRoRXhwcmVzc2lvbiIsIm9UZXh0Q29sdW1uIiwidGV4dEFycmFuZ2VtZW50IiwidGV4dFByb3BlcnR5IiwibW9kZSIsImNyZWF0ZVRhYmxlVmlzdWFsaXphdGlvbiIsImlzQ29uZGVuc2VkVGFibGVMYXlvdXRDb21wbGlhbnQiLCJ2aWV3Q29uZmlndXJhdGlvbiIsInRhYmxlTWFuaWZlc3RDb25maWciLCJnZXRUYWJsZU1hbmlmZXN0Q29uZmlndXJhdGlvbiIsInNwbGl0UGF0aCIsIm5hdmlnYXRpb25UYXJnZXRQYXRoIiwib3BlcmF0aW9uQXZhaWxhYmxlTWFwIiwiZ2V0T3BlcmF0aW9uQXZhaWxhYmxlTWFwIiwib1Zpc3VhbGl6YXRpb24iLCJWaXN1YWxpemF0aW9uVHlwZSIsIlRhYmxlIiwiZ2V0VGFibGVBbm5vdGF0aW9uQ29uZmlndXJhdGlvbiIsInJlbW92ZUR1cGxpY2F0ZUFjdGlvbnMiLCJlbmFibGVEYXRhU3RhdGVGaWx0ZXIiLCJnZXRUZW1wbGF0ZVR5cGUiLCJKU09OIiwic3RyaW5naWZ5Iiwib3BlcmF0aW9uQXZhaWxhYmxlUHJvcGVydGllcyIsImdldE9wZXJhdGlvbkF2YWlsYWJsZVByb3BlcnRpZXMiLCJjcmVhdGVEZWZhdWx0VGFibGVWaXN1YWxpemF0aW9uIiwiZ2V0Q29sdW1uc0Zyb21FbnRpdHlUeXBlIiwiZ2V0RW50aXR5VHlwZSIsImFkZFRvTWFwIiwia2V5IiwiZGF0YUZpZWxkIiwiJFR5cGUiLCJhY3Rpb25OYW1lIiwiQWN0aW9uIiwiRGV0ZXJtaW5pbmciLCJhY3Rpb25UYXJnZXQiLCJBY3Rpb25UYXJnZXQiLCJDb3JlIiwiT3BlcmF0aW9uQXZhaWxhYmxlIiwicGFyYW1ldGVycyIsImJpbmRpbmdQYXJhbWV0ZXJGdWxsTmFtZSIsImZ1bGx5UXVhbGlmaWVkTmFtZSIsInRhcmdldEV4cHJlc3Npb24iLCJhbm5vdGF0aW9uRXhwcmVzc2lvbiIsImJpbmRpbmdDb250ZXh0UGF0aFZpc2l0b3IiLCJwcm9wZXJ0aWVzIiwicHJvcGVydHlOYW1lIiwic2l6ZSIsInRpdGxlUHJvcGVydHkiLCJVSSIsIkhlYWRlckluZm8iLCJUaXRsZSIsIlZhbHVlIiwiQXJyYXkiLCJmcm9tIiwiam9pbiIsImdldFVJSGlkZGVuRXhwRm9yQWN0aW9uc1JlcXVpcmluZ0NvbnRleHQiLCJjdXJyZW50RW50aXR5VHlwZSIsImNvbnRleHREYXRhTW9kZWxPYmplY3RQYXRoIiwiaXNFbnRpdHlTZXQiLCJhVWlIaWRkZW5QYXRoRXhwcmVzc2lvbnMiLCJpc0JvdW5kIiwic291cmNlRW50aXR5VHlwZSIsIlJlcXVpcmVzQ29udGV4dCIsIklubGluZSIsInZhbHVlT2YiLCJIaWRkZW4iLCJlcXVhbCIsImdldEJpbmRpbmdFeHBGcm9tQ29udGV4dCIsInNvdXJjZSIsInNFeHByZXNzaW9uIiwidmlzaWJsZSIsInNQYXRoIiwic3Vic3RyaW5nIiwiYVNwbGl0UGF0aCIsInNwbGl0Iiwic05hdmlnYXRpb25QYXRoIiwidGFyZ2V0T2JqZWN0IiwiX3R5cGUiLCJwYXJ0bmVyIiwiYmluZGluZ0V4cHJlc3Npb24iLCJzbGljZSIsImNvbnN0YW50IiwiaGFzQm91bmRBY3Rpb25zQWx3YXlzVmlzaWJsZUluVG9vbEJhciIsInNvbWUiLCJoYXNDdXN0b21BY3Rpb25zQWx3YXlzVmlzaWJsZUluVG9vbEJhciIsIm1hbmlmZXN0QWN0aW9ucyIsImFjdGlvbktleSIsImFjdGlvbiIsInJlcXVpcmVzU2VsZWN0aW9uIiwidG9TdHJpbmciLCJnZXRWaXNpYmxlRXhwRm9yQ3VzdG9tQWN0aW9uc1JlcXVpcmluZ0NvbnRleHQiLCJhVmlzaWJsZVBhdGhFeHByZXNzaW9ucyIsInJlc29sdmVCaW5kaW5nU3RyaW5nIiwiZ2V0Q2FwYWJpbGl0eVJlc3RyaWN0aW9uIiwiaXNEZWxldGFibGUiLCJpc1BhdGhEZWxldGFibGUiLCJpc1VwZGF0YWJsZSIsImlzUGF0aFVwZGF0YWJsZSIsImlzQ29uc3RhbnQiLCJnZXRTZWxlY3Rpb25Nb2RlIiwidGFyZ2V0Q2FwYWJpbGl0aWVzIiwiaXNEZWxldGVCdXR0b25WaXNpYmxlIiwiU2VsZWN0aW9uTW9kZSIsIk5vbmUiLCJ0YWJsZU1hbmlmZXN0U2V0dGluZ3MiLCJzZWxlY3Rpb25Nb2RlIiwidGFibGVTZXR0aW5ncyIsImFIaWRkZW5CaW5kaW5nRXhwcmVzc2lvbnMiLCJhVmlzaWJsZUJpbmRpbmdFeHByZXNzaW9ucyIsImlzUGFyZW50RGVsZXRhYmxlIiwicGFyZW50RW50aXR5U2V0RGVsZXRhYmxlIiwiVGVtcGxhdGVUeXBlIiwiT2JqZWN0UGFnZSIsImNvbXBpbGVCaW5kaW5nIiwiaWZFbHNlIiwiQXV0byIsIk11bHRpIiwiYW5kIiwib3IiLCJjb25jYXQiLCJ0YWJsZUFjdGlvbiIsImlzRGF0YUZpZWxkRm9yQWN0aW9uQWJzdHJhY3QiLCJLZXlIZWxwZXIiLCJnZW5lcmF0ZUtleUZyb21EYXRhRmllbGQiLCJBY3Rpb25UeXBlIiwiRGF0YUZpZWxkRm9yQWN0aW9uIiwiYW5ub3RhdGlvblBhdGgiLCJnZXRFbnRpdHlTZXRCYXNlZEFubm90YXRpb25QYXRoIiwibm90IiwiZ2V0UmVsYXRpdmVNb2RlbFBhdGhGdW5jdGlvbiIsIkRhdGFGaWVsZEZvckludGVudEJhc2VkTmF2aWdhdGlvbiIsIkRlZmF1bHQiLCJnZXRIaWdobGlnaHRSb3dCaW5kaW5nIiwiY3JpdGljYWxpdHlBbm5vdGF0aW9uIiwiaXNEcmFmdFJvb3QiLCJ0YXJnZXRFbnRpdHlUeXBlIiwiZGVmYXVsdEhpZ2hsaWdodFJvd0RlZmluaXRpb24iLCJNZXNzYWdlVHlwZSIsImdldE1lc3NhZ2VUeXBlRnJvbUNyaXRpY2FsaXR5VHlwZSIsIkRyYWZ0IiwiSXNOZXdPYmplY3QiLCJJbmZvcm1hdGlvbiIsImZvcm1hdFJlc3VsdCIsInRhYmxlRm9ybWF0dGVycyIsInJvd0hpZ2hsaWdodGluZyIsIl9nZXRDcmVhdGlvbkJlaGF2aW91ciIsInRhYmxlTWFuaWZlc3RDb25maWd1cmF0aW9uIiwibmF2aWdhdGlvbiIsImNyZWF0ZSIsImRldGFpbCIsImlzRXh0ZXJuYWxDcmVhdGVDb25maWd1cmVkIiwib3V0Ym91bmQiLCJvdXRib3VuZERldGFpbCIsIm5ld0FjdGlvbiIsInRhcmdldEFubm90YXRpb25zIiwiZ2V0RW50aXR5U2V0IiwiRHJhZnRSb290IiwiTmV3QWN0aW9uIiwiU2Vzc2lvbiIsIlN0aWNreVNlc3Npb25TdXBwb3J0ZWQiLCJjcmVhdGlvbk1vZGUiLCJDcmVhdGlvbk1vZGUiLCJDcmVhdGlvblJvdyIsIkVycm9yIiwicm91dGUiLCJhcHBlbmQiLCJjcmVhdGVBdEVuZCIsIm5hdmlnYXRlVG9UYXJnZXQiLCJOZXdQYWdlIiwiX2dldFJvd0NvbmZpZ3VyYXRpb25Qcm9wZXJ0eSIsInRhcmdldFBhdGgiLCJwcmVzc1Byb3BlcnR5IiwibmF2aWdhdGlvblRhcmdldCIsImNyaXRpY2FsaXR5UHJvcGVydHkiLCJkaXNwbGF5IiwidGFyZ2V0IiwiQ3JpdGljYWxpdHkiLCJEcmFmdE5vZGUiLCJyb3dOYXZpZ2F0ZWRFeHByZXNzaW9uIiwibmF2aWdhdGVkUm93IiwicHJlc3MiLCJyb3dOYXZpZ2F0ZWQiLCJjb2x1bW5zVG9CZUNyZWF0ZWQiLCJub25Tb3J0YWJsZUNvbHVtbnMiLCJ0YWJsZVR5cGUiLCJwcm9wZXJ0eSIsImV4aXN0cyIsInRhcmdldFR5cGUiLCJyZWxhdGVkUHJvcGVydGllc0luZm8iLCJjb2xsZWN0UmVsYXRlZFByb3BlcnRpZXMiLCJyZWxhdGVkUHJvcGVydHlOYW1lcyIsImFkZGl0aW9uYWxQcm9wZXJ0eU5hbWVzIiwiYWRkaXRpb25hbFByb3BlcnRpZXMiLCJjb2x1bW5JbmZvIiwiZ2V0Q29sdW1uRGVmaW5pdGlvbkZyb21Qcm9wZXJ0eSIsInNlbWFudGljS2V5cyIsImdldEFubm90YXRpb25zQnlUZXJtIiwib0NvbHVtbkRyYWZ0SW5kaWNhdG9yIiwiZ2V0RGVmYXVsdERyYWZ0SW5kaWNhdG9yRm9yQ29sdW1uIiwiZXhwb3J0U2V0dGluZ3MiLCJ0ZW1wbGF0ZSIsImV4cG9ydFNldHRpbmdzVGVtcGxhdGUiLCJ3cmFwIiwiZXhwb3J0U2V0dGluZ3NXcmFwcGluZyIsImFkZGl0aW9uYWxQcm9wZXJ0eUluZm9zIiwiZnVsbFByb3BlcnR5UGF0aCIsInVzZURhdGFGaWVsZFByZWZpeCIsImF2YWlsYWJsZUZvckFkYXB0YXRpb24iLCJyZXBsYWNlU3BlY2lhbENoYXJzIiwic2VtYW50aWNPYmplY3RBbm5vdGF0aW9uUGF0aCIsImdldFNlbWFudGljT2JqZWN0UGF0aCIsImlzSGlkZGVuIiwiZ3JvdXBQYXRoIiwiX3NsaWNlQXRTbGFzaCIsImlzR3JvdXAiLCJpc0RhdGFQb2ludEZha2VQcm9wZXJ0eSIsImV4cG9ydFR5cGUiLCJfZ2V0RXhwb3J0RGF0YVR5cGUiLCJzRGF0ZUlucHV0Rm9ybWF0IiwiZGF0YVR5cGUiLCJnZXREYXRhRmllbGREYXRhVHlwZSIsInByb3BlcnR5VHlwZUNvbmZpZyIsImdldFR5cGVDb25maWciLCJvVHlwZUNvbmZpZyIsImNsYXNzTmFtZSIsIm9Gb3JtYXRPcHRpb25zIiwib0NvbnN0cmFpbnRzIiwiY29uc3RyYWludHMiLCJnZXRUYXJnZXRWYWx1ZU9uRGF0YVBvaW50IiwiaW5wdXRGb3JtYXQiLCJzY2FsZSIsImRlbGltaXRlciIsInRydWVWYWx1ZSIsImZhbHNlVmFsdWUiLCJpc0dyb3VwYWJsZSIsImlzUHJvcGVydHlHcm91cGFibGUiLCJBbm5vdGF0aW9uIiwibGFiZWwiLCJfZ2V0TGFiZWwiLCJncm91cExhYmVsIiwiZ3JvdXAiLCJzZW1hbnRpY09iamVjdFBhdGgiLCJBdmFpbGFiaWxpdHlUeXBlIiwiQWRhcHRhdGlvbiIsIkRhdGFGaWVsZERlZmF1bHQiLCJUYXJnZXQiLCIkdGFyZ2V0Iiwic29ydGFibGUiLCJpc0tleSIsImNhc2VTZW5zaXRpdmUiLCJpc0ZpbHRlcmluZ0Nhc2VTZW5zaXRpdmUiLCJ0eXBlQ29uZmlnIiwidmlzdWFsU2V0dGluZ3MiLCJ3aWR0aENhbGN1bGF0aW9uIiwic1Rvb2x0aXAiLCJfZ2V0VG9vbHRpcCIsInRvb2x0aXAiLCJfaXNWYWxpZENvbHVtbiIsIl9nZXRWaXNpYmxlRXhwcmVzc2lvbiIsImRhdGFGaWVsZE1vZGVsUGF0aCIsInJldHVybkV4cHJlc3Npb24iLCJwcm9wZXJ0eVZhbHVlIiwiaXNBbmFseXRpY2FsR3JvdXBIZWFkZXJFeHBhbmRlZCIsImlzQW5hbHl0aWNzIiwiSXNFeHBhbmRlZCIsImlzQW5hbHl0aWNhbExlYWYiLCJOb2RlTGV2ZWwiLCJleHByZXNzaW9uIiwiX2dldEZpZWxkR3JvdXBIaWRkZW5FeHByZXNzaW9ucyIsImRhdGFGaWVsZEdyb3VwIiwiZmllbGRGb3JtYXRPcHRpb25zIiwiYUZpZWxkR3JvdXBIaWRkZW5FeHByZXNzaW9ucyIsIkRhdGEiLCJpbm5lckRhdGFGaWVsZCIsImlzUHJvcGVydHkiLCJkYXRhRmllbGREZWZhdWx0IiwiTGFiZWwiLCJpc0RhdGFGaWVsZFR5cGVzIiwiUXVpY2tJbmZvIiwiZGF0YXBvaW50VGFyZ2V0IiwiX2NyZWF0ZVJlbGF0ZWRDb2x1bW5zIiwiZXhpc3RpbmdDb2x1bW5zIiwicmVsYXRlZENvbHVtbnMiLCJyZWxhdGVkUHJvcGVydHlOYW1lTWFwIiwiZ2V0QWJzb2x1dGVBbm5vdGF0aW9uUGF0aCIsInJlbGF0ZWRDb2x1bW4iLCJuZXdOYW1lIiwicHJvcGVydHlJbmZvIiwiX2dldEFubm90YXRpb25Db2x1bW5OYW1lIiwiX2dldFNob3dEYXRhRmllbGRzTGFiZWwiLCJmaWVsZEdyb3VwTmFtZSIsIm9Db2x1bW5zIiwiYUNvbHVtbktleXMiLCJzaG93RGF0YUZpZWxkc0xhYmVsIiwiX2dldFJlbGF0aXZlUGF0aCIsImlzTGFzdFNsYXNoIiwiaXNMYXN0UGFydCIsImlTbGFzaEluZGV4IiwibGFzdEluZGV4T2YiLCJfaXNDb2x1bW5Tb3J0YWJsZSIsInByb3BlcnR5UGF0aCIsImlzU29ydGFibGUiLCJmaWx0ZXJGdW5jdGlvbnMiLCJDYXBhYmlsaXRpZXMiLCJGaWx0ZXJGdW5jdGlvbnMiLCJnZXRFbnRpdHlDb250YWluZXIiLCJpc0FycmF5IiwiZ2V0RGVmYXVsdEZvcm1hdE9wdGlvbnNGb3JUYWJsZSIsInRleHRMaW5lc0VkaXQiLCJiU2VtYW50aWNLZXlGb3VuZCIsImFTZW1hbnRpY0tleVZhbHVlcyIsImkiLCJoYXNEcmFmdEluZGljYXRvciIsInNlbWFudGlja2V5cyIsImdldE5vblNvcnRhYmxlUHJvcGVydGllc1Jlc3RyaWN0aW9ucyIsImxpbmVJdGVtIiwiY29sbGVjdFJlbGF0ZWRQcm9wZXJ0aWVzUmVjdXJzaXZlbHkiLCJzTGFiZWwiLCJpc0ZpZWxkR3JvdXBDb2x1bW4iLCJmaWVsZEdyb3VwSGlkZGVuRXhwcmVzc2lvbnMiLCJ2aXN1YWxTZXR0aW5nc1RvQmVFeGNsdWRlZCIsImV4Y2x1ZGVQcm9wZXJ0aWVzIiwid2lkdGhPdmVycmlkZSIsIkZFIiwiU2l0dWF0aW9ucyIsIkZpZWxkR3JvdXBIaWRkZW5FeHByZXNzaW9ucyIsImlzRGF0YUZpZWxkQWx3YXlzSGlkZGVuIiwiSFRNTDUiLCJDc3NEZWZhdWx0cyIsImV4cG9ydENvbnRhY3RQcm9wZXJ0eSIsImV4cG9ydFNldHRpbmdzQ29udGFjdFByb3BlcnR5IiwiX2dldFByb3BlcnR5TmFtZXMiLCJtYXRjaGVkUHJvcGVydGllcyIsInJlc29sdmVQYXRoIiwiX2FwcGVuZEN1c3RvbVRlbXBsYXRlIiwiX2dldE1hbmlmZXN0T3JEZWZhdWx0VmFsdWUiLCJkZWZhdWx0VmFsdWUiLCJpc0Fubm90YXRpb25Db2x1bW4iLCJpbnRlcm5hbENvbHVtbnMiLCJtYW5pZmVzdENvbHVtbiIsInZhbGlkYXRlS2V5IiwiTWVzc2FnZSIsImdldERpYWdub3N0aWNzIiwiYWRkSXNzdWUiLCJJc3N1ZUNhdGVnb3J5IiwiTWFuaWZlc3QiLCJJc3N1ZVNldmVyaXR5IiwiTG93IiwiSXNzdWVDYXRlZ29yeVR5cGUiLCJBbm5vdGF0aW9uQ29sdW1ucyIsIkludmFsaWRLZXkiLCJpZCIsImhlYWRlciIsIkhvcml6b250YWxBbGlnbiIsIkJlZ2luIiwiU2xvdCIsInBvc2l0aW9uIiwiYW5jaG9yIiwicGxhY2VtZW50IiwiUGxhY2VtZW50IiwiQWZ0ZXIiLCJpc0FjdGlvbk5hdmlnYWJsZSIsImZpZWxkTGFiZWwiLCJnZXRQMTNuTW9kZSIsInZhcmlhbnRNYW5hZ2VtZW50IiwiZ2V0VmFyaWFudE1hbmFnZW1lbnQiLCJhUGVyc29uYWxpemF0aW9uIiwiYkFuYWx5dGljYWxUYWJsZSIsInBlcnNvbmFsaXphdGlvbiIsInNvcnQiLCJmaWx0ZXIiLCJhZ2dyZWdhdGUiLCJWYXJpYW50TWFuYWdlbWVudFR5cGUiLCJDb250cm9sIiwiZ2V0U29ydENvbmRpdGlvbnMiLCJub25Tb3J0YWJsZVByb3BlcnRpZXMiLCJzb3J0Q29uZGl0aW9ucyIsIlNvcnRPcmRlciIsInNvcnRlcnMiLCJjb25kaXRpb25zIiwiY29uZGl0aW9uIiwiY29uZGl0aW9uUHJvcGVydHkiLCJQcm9wZXJ0eSIsImluZm9OYW1lIiwiY29udmVydFByb3BlcnR5UGF0aHNUb0luZm9OYW1lcyIsImRlc2NlbmRpbmciLCJEZXNjZW5kaW5nIiwicGF0aHMiLCJpbmZvTmFtZXMiLCJjdXJyZW50UGF0aCIsIkdyb3VwQnkiLCJhR3JvdXBCeSIsImFHcm91cExldmVscyIsImdyb3VwTGV2ZWxzIiwiVG90YWwiLCJhVG90YWxzIiwidGl0bGUiLCJUeXBlTmFtZVBsdXJhbCIsImVudGl0eVNldCIsInBhZ2VNYW5pZmVzdFNldHRpbmdzIiwiaGFzQWJzb2x1dGVQYXRoIiwicDEzbk1vZGUiLCJUYWJsZUlEIiwic3RhbmRhcmRBY3Rpb25zQ29udGV4dCIsImdlbmVyYXRlU3RhbmRhcmRBY3Rpb25zQ29udGV4dCIsImdldERlbGV0ZVZpc2liaWxpdHkiLCJ0aHJlc2hvbGQiLCJNYXhJdGVtcyIsImNyZWF0aW9uQmVoYXZpb3VyIiwiaXNTZWFyY2hhYmxlIiwiaXNQYXRoU2VhcmNoYWJsZSIsImdldFN0YW5kYXJkQWN0aW9uQ3JlYXRlIiwiZ2V0U3RhbmRhcmRBY3Rpb25EZWxldGUiLCJwYXN0ZSIsImdldFN0YW5kYXJkQWN0aW9uUGFzdGUiLCJtYXNzRWRpdCIsImdldFN0YW5kYXJkQWN0aW9uTWFzc0VkaXQiLCJpc0luc2VydFVwZGF0ZVRlbXBsYXRlZCIsImdldEluc2VydFVwZGF0ZUFjdGlvbnNUZW1wbGF0aW5nIiwiaXNEcmFmdE9yU3RpY2t5U3VwcG9ydGVkIiwiZW50aXR5TmFtZSIsImNvbGxlY3Rpb24iLCJnZXRUYXJnZXRPYmplY3RQYXRoIiwibmF2aWdhdGlvblBhdGgiLCJyb3ciLCJzdGFuZGFyZEFjdGlvbnMiLCJpc0luRGlzcGxheU1vZGUiLCJhdXRvQmluZE9uSW5pdCIsIkxpc3RSZXBvcnQiLCJBbmFseXRpY2FsTGlzdFBhZ2UiLCJoYXNNdWx0aXBsZVZpc3VhbGl6YXRpb25zIiwic2VhcmNoYWJsZSIsImlzQ29tcGxleFByb3BlcnR5IiwiZXhwb3J0RGF0YVR5cGUiLCJ0ZW1wbGF0ZVR5cGUiLCJzdWJzdHIiLCJnZXRTZWxlY3Rpb25WYXJpYW50Q29uZmlndXJhdGlvbiIsInNlbGVjdGlvblZhcmlhbnRQYXRoIiwicmVzb2x2ZWRUYXJnZXQiLCJnZXRFbnRpdHlUeXBlQW5ub3RhdGlvbiIsInNlbGVjdGlvbiIsInByb3BlcnR5TmFtZXMiLCJTZWxlY3RPcHRpb25zIiwic2VsZWN0T3B0aW9uIiwiUHJvcGVydHlOYW1lIiwiUHJvcGVydHlQYXRoIiwidGV4dCIsImNoZWNrQ29uZGVuc2VkTGF5b3V0IiwicXVpY2tTZWxlY3Rpb25WYXJpYW50IiwicXVpY2tGaWx0ZXJQYXRocyIsImVuYWJsZUV4cG9ydCIsImZpbHRlcnMiLCJkaXNhYmxlQWRkUm93QnV0dG9uRm9yRW1wdHlEYXRhIiwiY3VzdG9tVmFsaWRhdGlvbkZ1bmN0aW9uIiwiY29uZGVuc2VkVGFibGVMYXlvdXQiLCJoaWRlVGFibGVUaXRsZSIsImVuYWJsZUZ1bGxTY3JlZW4iLCJzZWxlY3Rpb25MaW1pdCIsIm11bHRpU2VsZWN0TW9kZSIsImVuYWJsZUF1dG9Db2x1bW5XaWR0aCIsImlzUGhvbmUiLCJlbmFibGVQYXN0ZSIsImlzQ29uZGVuc2VkTGF5b3V0Q29tcGxpYW50IiwicXVpY2tWYXJpYW50U2VsZWN0aW9uIiwicXVpY2tGaWx0ZXJzIiwic2hvd0NvdW50cyIsImlzRGVza3RvcCIsIklzc3VlVHlwZSIsIkZVTExTQ1JFRU5NT0RFX05PVF9PTl9MSVNUUkVQT1JUIiwic2VsZWN0QWxsIiwidXNlSWNvblRhYkJhciIsImhlYWRlclZpc2libGUiLCJ1c2VDb25kZW5zZWRUYWJsZUxheW91dCIsInNob3dSb3dDb3VudCIsImdldFZpZXdDb25maWd1cmF0aW9uIiwiZW5hYmxlTWFzc0VkaXQiLCJvVGFyZ2V0TWFwcGluZyIsIkVETV9UWVBFX01BUFBJTkciLCJ1bmRlcmx5aW5nVHlwZSIsIiRTY2FsZSIsInByZWNpc2lvbiIsIiRQcmVjaXNpb24iLCJtYXhMZW5ndGgiLCIkTWF4TGVuZ3RoIiwibnVsbGFibGUiLCIkTnVsbGFibGUiLCJtaW5pbXVtIiwiaXNOYU4iLCJWYWxpZGF0aW9uIiwiTWluaW11bSIsIm1heGltdW0iLCJNYXhpbXVtIiwiaXNEaWdpdFNlcXVlbmNlIiwiSXNEaWdpdFNlcXVlbmNlIiwicGFyc2VBc1N0cmluZyIsImVtcHR5U3RyaW5nIiwi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a0MsZ0NBQWxDLE9BQXdFLENBRHhFLEdBRUcsS0FGSCxHQUdHL0MsU0FMOEI7QUFNbEMrakIsTUFBQUEsV0FBVyxFQUNWLENBQUFsUixrQkFBa0IsU0FBbEIsSUFBQUEsa0JBQWtCLFdBQWxCLHNDQUFBQSxrQkFBa0IsQ0FBRXJRLElBQXBCLGtGQUEwQk8sT0FBMUIsQ0FBa0MsNkJBQWxDLE9BQXFFLENBQXJFLElBQ0EsQ0FBQThQLGtCQUFrQixTQUFsQixJQUFBQSxrQkFBa0IsV0FBbEIsc0NBQUFBLGtCQUFrQixDQUFFclEsSUFBcEIsa0ZBQTBCTyxPQUExQixDQUFrQyxnQ0FBbEMsT0FBd0UsQ0FEeEUsR0FFRyxFQUZILEdBR0cvQyxTQVY4QjtBQVdsQ2drQixNQUFBQSxxQkFBcUIsRUFBRW5SLGtCQUFrQixDQUFDclEsSUFBbkIsS0FBNEIsZ0NBQTVCLEdBQStELElBQS9ELEdBQXNFeEM7QUFYM0QsS0FBbkM7QUFhQSxXQUFPNlMsa0JBQVA7QUFDQSIsInNvdXJjZVJvb3QiOiIuIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHtcblx0Q3JpdGljYWxpdHlUeXBlLFxuXHREYXRhRmllbGQsXG5cdERhdGFGaWVsZEFic3RyYWN0VHlwZXMsXG5cdERhdGFGaWVsZEZvckFjdGlvbixcblx0RGF0YUZpZWxkRm9yQW5ub3RhdGlvbixcblx0RGF0YUZpZWxkRm9ySW50ZW50QmFzZWROYXZpZ2F0aW9uLFxuXHREYXRhRmllbGRUeXBlcyxcblx0RGF0YVBvaW50LFxuXHREYXRhUG9pbnRUeXBlVHlwZXMsXG5cdEVudW1WYWx1ZSxcblx0TGluZUl0ZW0sXG5cdFBhdGhBbm5vdGF0aW9uRXhwcmVzc2lvbixcblx0UHJlc2VudGF0aW9uVmFyaWFudFR5cGVUeXBlcyxcblx0UHJvcGVydHlQYXRoLFxuXHRTZWxlY3Rpb25WYXJpYW50VHlwZSxcblx0U2VsZWN0T3B0aW9uVHlwZSxcblx0VUlBbm5vdGF0aW9uVHlwZXNcbn0gZnJvbSBcIkBzYXAtdXgvdm9jYWJ1bGFyaWVzLXR5cGVzXCI7XG5pbXBvcnQge1xuXHRBY3Rpb25UeXBlLFxuXHRBdmFpbGFiaWxpdHlUeXBlLFxuXHRDcmVhdGlvbk1vZGUsXG5cdEZvcm1hdE9wdGlvbnNUeXBlLFxuXHRIb3Jpem9udGFsQWxpZ24sXG5cdE1hbmlmZXN0VGFibGVDb2x1bW4sXG5cdE5hdmlnYXRpb25TZXR0aW5nc0NvbmZpZ3VyYXRpb24sXG5cdE5hdmlnYXRpb25UYXJnZXRDb25maWd1cmF0aW9uLFxuXHRTZWxlY3Rpb25Nb2RlLFxuXHRUYWJsZUNvbHVtblNldHRpbmdzLFxuXHRUYWJsZU1hbmlmZXN0Q29uZmlndXJhdGlvbixcblx0VGVtcGxhdGVUeXBlLFxuXHRWYXJpYW50TWFuYWdlbWVudFR5cGUsXG5cdFZpZXdQYXRoQ29uZmlndXJhdGlvbixcblx0VmlzdWFsaXphdGlvblR5cGVcbn0gZnJvbSBcIi4uLy4uL01hbmlmZXN0U2V0dGluZ3NcIjtcbmltcG9ydCB7IEVudGl0eVR5cGUsIFByb3BlcnR5LCBUeXBlRGVmaW5pdGlvbiB9IGZyb20gXCJAc2FwLXV4L2Fubm90YXRpb24tY29udmVydGVyXCI7XG5pbXBvcnQgeyBUYWJsZUlEIH0gZnJvbSBcIi4uLy4uL2hlbHBlcnMvSURcIjtcbmltcG9ydCB7XG5cdEFubm90YXRpb25BY3Rpb24sXG5cdEJhc2VBY3Rpb24sXG5cdEN1c3RvbUFjdGlvbixcblx0Z2V0QWN0aW9uc0Zyb21NYW5pZmVzdCxcblx0aXNBY3Rpb25OYXZpZ2FibGUsXG5cdHJlbW92ZUR1cGxpY2F0ZUFjdGlvbnNcbn0gZnJvbSBcInNhcC9mZS9jb3JlL2NvbnZlcnRlcnMvY29udHJvbHMvQ29tbW9uL0FjdGlvblwiO1xuaW1wb3J0IHsgQ29uZmlndXJhYmxlT2JqZWN0LCBDdXN0b21FbGVtZW50LCBpbnNlcnRDdXN0b21FbGVtZW50cywgUGxhY2VtZW50IH0gZnJvbSBcInNhcC9mZS9jb3JlL2NvbnZlcnRlcnMvaGVscGVycy9Db25maWd1cmFibGVPYmplY3RcIjtcbmltcG9ydCB7XG5cdGNvbGxlY3RSZWxhdGVkUHJvcGVydGllcyxcblx0Y29sbGVjdFJlbGF0ZWRQcm9wZXJ0aWVzUmVjdXJzaXZlbHksXG5cdENvbXBsZXhQcm9wZXJ0eUluZm8sXG5cdGdldERhdGFGaWVsZERhdGFUeXBlLFxuXHRnZXRTZW1hbnRpY09iamVjdFBhdGgsXG5cdGlzRGF0YUZpZWxkQWx3YXlzSGlkZGVuLFxuXHRpc0RhdGFGaWVsZEZvckFjdGlvbkFic3RyYWN0LFxuXHRpc0RhdGFGaWVsZFR5cGVzXG59IGZyb20gXCJzYXAvZmUvY29yZS9jb252ZXJ0ZXJzL2Fubm90YXRpb25zL0RhdGFGaWVsZFwiO1xuaW1wb3J0IHtcblx0YW5kLFxuXHRhbm5vdGF0aW9uRXhwcmVzc2lvbixcblx0QmluZGluZ0V4cHJlc3Npb24sXG5cdGJpbmRpbmdFeHByZXNzaW9uLFxuXHRCaW5kaW5nRXhwcmVzc2lvbkV4cHJlc3Npb24sXG5cdGNvbXBpbGVCaW5kaW5nLFxuXHRjb25zdGFudCxcblx0ZXF1YWwsXG5cdEV4cHJlc3Npb24sXG5cdEV4cHJlc3Npb25PclByaW1pdGl2ZSxcblx0Zm9ybWF0UmVzdWx0LFxuXHRpZkVsc2UsXG5cdGlzQ29uc3RhbnQsXG5cdG5vdCxcblx0b3IsXG5cdHJlc29sdmVCaW5kaW5nU3RyaW5nXG59IGZyb20gXCJzYXAvZmUvY29yZS9oZWxwZXJzL0JpbmRpbmdFeHByZXNzaW9uXCI7XG5pbXBvcnQgeyBEcmFmdCwgYmluZGluZ0NvbnRleHRQYXRoVmlzaXRvciwgVUkgfSBmcm9tIFwic2FwL2ZlL2NvcmUvY29udmVydGVycy9oZWxwZXJzL0JpbmRpbmdIZWxwZXJcIjtcbmltcG9ydCB7IEtleUhlbHBlciB9IGZyb20gXCJzYXAvZmUvY29yZS9jb252ZXJ0ZXJzL2hlbHBlcnMvS2V5XCI7XG5pbXBvcnQgdGFibGVGb3JtYXR0ZXJzIGZyb20gXCJzYXAvZmUvY29yZS9mb3JtYXR0ZXJzL1RhYmxlRm9ybWF0dGVyXCI7XG5pbXBvcnQgeyBNZXNzYWdlVHlwZSB9IGZyb20gXCJzYXAvZmUvY29yZS9mb3JtYXR0ZXJzL1RhYmxlRm9ybWF0dGVyVHlwZXNcIjtcbmltcG9ydCB7XG5cdERhdGFNb2RlbE9iamVjdFBhdGgsXG5cdGdldFRhcmdldE9iamVjdFBhdGgsXG5cdGlzUGF0aERlbGV0YWJsZSxcblx0aXNQYXRoU2VhcmNoYWJsZSxcblx0aXNQYXRoVXBkYXRhYmxlXG59IGZyb20gXCJzYXAvZmUvY29yZS90ZW1wbGF0aW5nL0RhdGFNb2RlbFBhdGhIZWxwZXJcIjtcbmltcG9ydCB7IHJlcGxhY2VTcGVjaWFsQ2hhcnMgfSBmcm9tIFwic2FwL2ZlL2NvcmUvaGVscGVycy9TdGFibGVJZEhlbHBlclwiO1xuaW1wb3J0IHsgSXNzdWVDYXRlZ29yeSwgSXNzdWVTZXZlcml0eSwgSXNzdWVUeXBlLCBJc3N1ZUNhdGVnb3J5VHlwZSB9IGZyb20gXCJzYXAvZmUvY29yZS9jb252ZXJ0ZXJzL2hlbHBlcnMvSXNzdWVNYW5hZ2VyXCI7XG5cbmltcG9ydCBNYW5pZmVzdFdyYXBwZXIgZnJvbSBcIi4uLy4uL01hbmlmZXN0V3JhcHBlclwiO1xuaW1wb3J0IENvbnZlcnRlckNvbnRleHQgZnJvbSBcIi4uLy4uL0NvbnZlcnRlckNvbnRleHRcIjtcbmltcG9ydCB7XG5cdGlzUHJvcGVydHksXG5cdGdldEFzc29jaWF0ZWRVbml0UHJvcGVydHksXG5cdGdldEFzc29jaWF0ZWRDdXJyZW5jeVByb3BlcnR5LFxuXHRpc1BhdGhFeHByZXNzaW9uLFxuXHRnZXRUYXJnZXRWYWx1ZU9uRGF0YVBvaW50XG59IGZyb20gXCJzYXAvZmUvY29yZS90ZW1wbGF0aW5nL1Byb3BlcnR5SGVscGVyXCI7XG5pbXBvcnQgeyBBZ2dyZWdhdGlvbkhlbHBlciB9IGZyb20gXCIuLi8uLi9oZWxwZXJzL0FnZ3JlZ2F0aW9uXCI7XG5pbXBvcnQgeyBEaXNwbGF5TW9kZSwgRURNX1RZUEVfTUFQUElORywgZ2V0RGlzcGxheU1vZGUgfSBmcm9tIFwic2FwL2ZlL2NvcmUvdGVtcGxhdGluZy9EaXNwbGF5TW9kZUZvcm1hdHRlclwiO1xuaW1wb3J0IHsgZ2V0TWVzc2FnZVR5cGVGcm9tQ3JpdGljYWxpdHlUeXBlIH0gZnJvbSBcIi4vQ3JpdGljYWxpdHlcIjtcbmltcG9ydCB7IEZpbHRlckZ1bmN0aW9ucyB9IGZyb20gXCJAc2FwLXV4L3ZvY2FidWxhcmllcy10eXBlcy9kaXN0L2dlbmVyYXRlZC9DYXBhYmlsaXRpZXNcIjtcbmltcG9ydCB7IGdldE5vblNvcnRhYmxlUHJvcGVydGllc1Jlc3RyaWN0aW9ucyB9IGZyb20gXCJzYXAvZmUvY29yZS90ZW1wbGF0aW5nL0VudGl0eVNldEhlbHBlclwiO1xuaW1wb3J0IHtcblx0Z2VuZXJhdGVTdGFuZGFyZEFjdGlvbnNDb250ZXh0LFxuXHRpc0V4dGVybmFsQ3JlYXRlQ29uZmlndXJlZCxcblx0U3RhbmRhcmRBY3Rpb25Db25maWdUeXBlLFxuXHRnZXREZWxldGVWaXNpYmlsaXR5LFxuXHRnZXRTdGFuZGFyZEFjdGlvbkNyZWF0ZSxcblx0Z2V0U3RhbmRhcmRBY3Rpb25EZWxldGUsXG5cdGdldFN0YW5kYXJkQWN0aW9uUGFzdGUsXG5cdGdldFN0YW5kYXJkQWN0aW9uTWFzc0VkaXQsXG5cdGlzRHJhZnRPclN0aWNreVN1cHBvcnRlZCxcblx0Z2V0SW5zZXJ0VXBkYXRlQWN0aW9uc1RlbXBsYXRpbmdcbn0gZnJvbSBcIi4vdGFibGUvU3RhbmRhcmRBY3Rpb25zXCI7XG5cbmV4cG9ydCB0eXBlIFRhYmxlQW5ub3RhdGlvbkNvbmZpZ3VyYXRpb24gPSB7XG5cdGF1dG9CaW5kT25Jbml0OiBib29sZWFuO1xuXHRjb2xsZWN0aW9uOiBzdHJpbmc7XG5cdHZhcmlhbnRNYW5hZ2VtZW50OiBWYXJpYW50TWFuYWdlbWVudFR5cGU7XG5cdGZpbHRlcklkPzogc3RyaW5nO1xuXHRpZDogc3RyaW5nO1xuXHRuYXZpZ2F0aW9uUGF0aDogc3RyaW5nO1xuXHRwMTNuTW9kZT86IHN0cmluZztcblx0cm93Pzoge1xuXHRcdGFjdGlvbj86IHN0cmluZztcblx0XHRwcmVzcz86IHN0cmluZztcblx0XHRyb3dIaWdobGlnaHRpbmc6IEJpbmRpbmdFeHByZXNzaW9uPE1lc3NhZ2VUeXBlPjtcblx0XHRyb3dOYXZpZ2F0ZWQ6IEJpbmRpbmdFeHByZXNzaW9uPGJvb2xlYW4+O1xuXHR9O1xuXHRzZWxlY3Rpb25Nb2RlOiBzdHJpbmcgfCB1bmRlZmluZWQ7XG5cdHN0YW5kYXJkQWN0aW9uczoge1xuXHRcdGFjdGlvbnM6IFJlY29yZDxzdHJpbmcsIFN0YW5kYXJkQWN0aW9uQ29uZmlnVHlwZT47XG5cdFx0aXNJbnNlcnRVcGRhdGVUZW1wbGF0ZWQ6IGJvb2xlYW47XG5cdH07XG5cdGRpc3BsYXlNb2RlPzogYm9vbGVhbjtcblx0dGhyZXNob2xkOiBudW1iZXI7XG5cdGVudGl0eU5hbWU6IHN0cmluZztcblx0c29ydENvbmRpdGlvbnM/OiBzdHJpbmc7XG5cdGdyb3VwQ29uZGl0aW9ucz86IHN0cmluZztcblx0YWdncmVnYXRlQ29uZGl0aW9ucz86IHN0cmluZztcblxuXHQvKiogQ3JlYXRlIG5ldyBlbnRyaWVzICovXG5cdGNyZWF0ZTogQ3JlYXRlQmVoYXZpb3VyIHwgQ3JlYXRlQmVoYXZpb3VyRXh0ZXJuYWw7XG5cdHRpdGxlOiBzdHJpbmc7XG5cdHNlYXJjaGFibGU6IGJvb2xlYW47XG59O1xuXG4vKipcbiAqIE5ldyBlbnRyaWVzIGFyZSBjcmVhdGVkIHdpdGhpbiB0aGUgYXBwIChkZWZhdWx0IGNhc2UpXG4gKi9cbnR5cGUgQ3JlYXRlQmVoYXZpb3VyID0ge1xuXHRtb2RlOiBDcmVhdGlvbk1vZGU7XG5cdGFwcGVuZDogQm9vbGVhbjtcblx0bmV3QWN0aW9uPzogc3RyaW5nO1xuXHRuYXZpZ2F0ZVRvVGFyZ2V0Pzogc3RyaW5nO1xufTtcblxuLyoqXG4gKiBOZXcgZW50cmllcyBhcmUgY3JlYXRlZCBieSBuYXZpZ2F0aW5nIHRvIHNvbWUgdGFyZ2V0XG4gKi9cbnR5cGUgQ3JlYXRlQmVoYXZpb3VyRXh0ZXJuYWwgPSB7XG5cdG1vZGU6IFwiRXh0ZXJuYWxcIjtcblx0b3V0Ym91bmQ6IHN0cmluZztcblx0b3V0Ym91bmREZXRhaWw6IE5hdmlnYXRpb25UYXJnZXRDb25maWd1cmF0aW9uW1wib3V0Ym91bmREZXRhaWxcIl07XG5cdG5hdmlnYXRpb25TZXR0aW5nczogTmF2aWdhdGlvblNldHRpbmdzQ29uZmlndXJhdGlvbjtcbn07XG5cbmV4cG9ydCB0eXBlIFRhYmxlQ2FwYWJpbGl0eVJlc3RyaWN0aW9uID0ge1xuXHRpc0RlbGV0YWJsZTogYm9vbGVhbjtcblx0aXNVcGRhdGFibGU6IGJvb2xlYW47XG59O1xuXG5leHBvcnQgdHlwZSBUYWJsZUZpbHRlcnNDb25maWd1cmF0aW9uID0ge1xuXHRlbmFibGVkPzogc3RyaW5nIHwgYm9vbGVhbjtcblx0cGF0aHM6IFtcblx0XHR7XG5cdFx0XHRhbm5vdGF0aW9uUGF0aDogc3RyaW5nO1xuXHRcdH1cblx0XTtcblx0c2hvd0NvdW50cz86IGJvb2xlYW47XG59O1xuXG5leHBvcnQgdHlwZSBTZWxlY3Rpb25WYXJpYW50Q29uZmlndXJhdGlvbiA9IHtcblx0cHJvcGVydHlOYW1lczogc3RyaW5nW107XG5cdHRleHQ/OiBzdHJpbmc7XG59O1xuXG5leHBvcnQgdHlwZSBUYWJsZUNvbnRyb2xDb25maWd1cmF0aW9uID0ge1xuXHRjcmVhdGVBdEVuZDogYm9vbGVhbjtcblx0Y3JlYXRpb25Nb2RlOiBDcmVhdGlvbk1vZGU7XG5cdGRpc2FibGVBZGRSb3dCdXR0b25Gb3JFbXB0eURhdGE6IGJvb2xlYW47XG5cdGN1c3RvbVZhbGlkYXRpb25GdW5jdGlvbjogc3RyaW5nIHwgdW5kZWZpbmVkO1xuXHR1c2VDb25kZW5zZWRUYWJsZUxheW91dDogYm9vbGVhbjtcblx0ZW5hYmxlRXhwb3J0OiBib29sZWFuO1xuXHRoZWFkZXJWaXNpYmxlOiBib29sZWFuO1xuXHRmaWx0ZXJzPzogUmVjb3JkPHN0cmluZywgVGFibGVGaWx0ZXJzQ29uZmlndXJhdGlvbj47XG5cdHR5cGU6IFRhYmxlVHlwZTtcblx0c2VsZWN0QWxsPzogYm9vbGVhbjtcblx0c2VsZWN0aW9uTGltaXQ6IG51bWJlcjtcblx0bXVsdGlTZWxlY3RNb2RlOiBzdHJpbmcgfCB1bmRlZmluZWQ7XG5cdGVuYWJsZVBhc3RlOiBib29sZWFuO1xuXHRlbmFibGVGdWxsU2NyZWVuOiBib29sZWFuO1xuXHRzaG93Um93Q291bnQ6IGJvb2xlYW47XG5cdGVuYWJsZU1hc3NFZGl0OiBib29sZWFuIHwgdW5kZWZpbmVkO1xuXHRlbmFibGVBdXRvQ29sdW1uV2lkdGg6IGJvb2xlYW47XG59O1xuXG5leHBvcnQgdHlwZSBUYWJsZVR5cGUgPSBcIkdyaWRUYWJsZVwiIHwgXCJSZXNwb25zaXZlVGFibGVcIiB8IFwiQW5hbHl0aWNhbFRhYmxlXCI7XG5cbmVudW0gQ29sdW1uVHlwZSB7XG5cdERlZmF1bHQgPSBcIkRlZmF1bHRcIiwgLy8gRGVmYXVsdCBUeXBlXG5cdEFubm90YXRpb24gPSBcIkFubm90YXRpb25cIixcblx0U2xvdCA9IFwiU2xvdFwiXG59XG5cbmV4cG9ydCB0eXBlIEJhc2VUYWJsZUNvbHVtbiA9IENvbmZpZ3VyYWJsZU9iamVjdCAmIHtcblx0aWQ6IHN0cmluZztcblx0d2lkdGg/OiBzdHJpbmc7XG5cdG5hbWU6IHN0cmluZztcblx0YXZhaWxhYmlsaXR5PzogQXZhaWxhYmlsaXR5VHlwZTtcblx0dHlwZTogQ29sdW1uVHlwZTsgLy9PcmlnaW4gb2YgdGhlIHNvdXJjZSB3aGVyZSB3ZSBhcmUgZ2V0dGluZyB0aGUgdGVtcGxhdGVkIGluZm9ybWF0aW9uIGZyb20sXG5cdGlzTmF2aWdhYmxlPzogYm9vbGVhbjtcblx0c2V0dGluZ3M/OiBUYWJsZUNvbHVtblNldHRpbmdzO1xuXHRzZW1hbnRpY09iamVjdFBhdGg/OiBzdHJpbmc7XG5cdHByb3BlcnR5SW5mb3M/OiBzdHJpbmdbXTtcblx0Y2FzZVNlbnNpdGl2ZT86IGJvb2xlYW47XG5cdHNvcnRhYmxlOiBib29sZWFuO1xuXHRob3Jpem9udGFsQWxpZ24/OiBIb3Jpem9udGFsQWxpZ247XG5cdGZvcm1hdE9wdGlvbnM6IEZvcm1hdE9wdGlvbnNUeXBlO1xufTtcblxuZXhwb3J0IHR5cGUgQ3VzdG9tVGFibGVDb2x1bW4gPSBCYXNlVGFibGVDb2x1bW4gJiB7XG5cdGhlYWRlcj86IHN0cmluZztcblx0dGVtcGxhdGU6IHN0cmluZztcbn07XG5cbmV4cG9ydCB0eXBlIEFubm90YXRpb25UYWJsZUNvbHVtbiA9IEJhc2VUYWJsZUNvbHVtbiAmIHtcblx0YW5ub3RhdGlvblBhdGg6IHN0cmluZztcblx0cmVsYXRpdmVQYXRoOiBzdHJpbmc7XG5cdGxhYmVsPzogc3RyaW5nO1xuXHR0b29sdGlwPzogc3RyaW5nO1xuXHRncm91cExhYmVsPzogc3RyaW5nO1xuXHRncm91cD86IHN0cmluZztcblx0aXNHcm91cGFibGU/OiBib29sZWFuO1xuXHRGaWVsZEdyb3VwSGlkZGVuRXhwcmVzc2lvbnM/OiBCaW5kaW5nRXhwcmVzc2lvbjxzdHJpbmc+O1xuXHRzaG93RGF0YUZpZWxkc0xhYmVsPzogYm9vbGVhbjtcblx0aXNLZXk/OiBib29sZWFuO1xuXHR1bml0Pzogc3RyaW5nO1xuXHRleHBvcnRTZXR0aW5ncz86IHtcblx0XHR0ZW1wbGF0ZT86IHN0cmluZztcblx0XHRsYWJlbD86IHN0cmluZztcblx0XHRmaWVsZExhYmVsPzogc3RyaW5nO1xuXHRcdHdyYXA/OiBib29sZWFuO1xuXHRcdHR5cGU/OiBzdHJpbmc7XG5cdFx0aW5wdXRGb3JtYXQ/OiBzdHJpbmc7XG5cdFx0Zm9ybWF0Pzogc3RyaW5nO1xuXHRcdHNjYWxlPzogbnVtYmVyO1xuXHRcdGRlbGltaXRlcj86IGJvb2xlYW47XG5cdFx0dHJ1ZVZhbHVlPzogYm9vbGVhbjtcblx0XHRmYWxzZVZhbHVlPzogYm9vbGVhbjtcblx0fTtcblx0aXNEYXRhUG9pbnRGYWtlVGFyZ2V0UHJvcGVydHk/OiBib29sZWFuO1xuXHR0ZXh0QXJyYW5nZW1lbnQ/OiB7XG5cdFx0dGV4dFByb3BlcnR5OiBzdHJpbmc7XG5cdFx0bW9kZTogRGlzcGxheU1vZGU7XG5cdH07XG5cdGV4cG9ydENvbnRhY3RQcm9wZXJ0eT86IHN0cmluZztcblx0YWRkaXRpb25hbFByb3BlcnR5SW5mb3M/OiBzdHJpbmdbXTtcblx0dmlzdWFsU2V0dGluZ3M/OiBWaXN1YWxTZXR0aW5ncztcblx0dHlwZUNvbmZpZz86IG9iamVjdDtcbn07XG5cbmV4cG9ydCB0eXBlIFZpc3VhbFNldHRpbmdzID0ge1xuXHR3aWR0aENhbGN1bGF0aW9uPzogV2lkdGhDYWxjdWxhdGlvbjtcbn07XG5cbmV4cG9ydCB0eXBlIFdpZHRoQ2FsY3VsYXRpb24gPSBudWxsIHwge1xuXHRtaW5XaWR0aD86IG51bWJlcjtcblx0bWF4V2lkdGg/OiBudW1iZXI7XG5cdGRlZmF1bHRXaWR0aD86IG51bWJlcjtcblx0aW5jbHVkZUxhYmVsPzogYm9vbGVhbjtcblx0Z2FwPzogbnVtYmVyO1xuXHQvLyBvbmx5IHJlbGV2YW50IGZvciBjb21wbGV4IHR5cGVzXG5cdGV4Y2x1ZGVQcm9wZXJ0aWVzPzogc3RyaW5nIHwgc3RyaW5nW107XG5cdHZlcnRpY2FsQXJyYW5nZW1lbnQ/OiBib29sZWFuO1xufTtcblxuZXhwb3J0IHR5cGUgVGFibGVDb2x1bW4gPSBDdXN0b21UYWJsZUNvbHVtbiB8IEFubm90YXRpb25UYWJsZUNvbHVtbjtcblxuZXhwb3J0IHR5cGUgQ3VzdG9tQ29sdW1uID0gQ3VzdG9tRWxlbWVudDxUYWJsZUNvbHVtbj47XG5cbmV4cG9ydCB0eXBlIEFnZ3JlZ2F0ZURhdGEgPSB7XG5cdGRlZmF1bHRBZ2dyZWdhdGU6IHtcblx0XHRjb250ZXh0RGVmaW5pbmdQcm9wZXJ0aWVzPzogc3RyaW5nW107XG5cdH07XG5cdHJlbGF0aXZlUGF0aDogc3RyaW5nO1xufTtcblxuZXhwb3J0IHR5cGUgVGFibGVWaXN1YWxpemF0aW9uID0ge1xuXHR0eXBlOiBWaXN1YWxpemF0aW9uVHlwZS5UYWJsZTtcblx0YW5ub3RhdGlvbjogVGFibGVBbm5vdGF0aW9uQ29uZmlndXJhdGlvbjtcblx0Y29udHJvbDogVGFibGVDb250cm9sQ29uZmlndXJhdGlvbjtcblx0Y29sdW1uczogVGFibGVDb2x1bW5bXTtcblx0YWN0aW9uczogQmFzZUFjdGlvbltdO1xuXHRhZ2dyZWdhdGVzPzogUmVjb3JkPHN0cmluZywgQWdncmVnYXRlRGF0YT47XG5cdGVuYWJsZUFuYWx5dGljcz86IGJvb2xlYW47XG5cdGVuYWJsZUFuYWx5dGljc1NlYXJjaD86IGJvb2xlYW47XG5cdGVuYWJsZURhdGFTdGF0ZUZpbHRlcjogYm9vbGVhbjtcblx0b3BlcmF0aW9uQXZhaWxhYmxlTWFwOiBzdHJpbmc7XG5cdG9wZXJhdGlvbkF2YWlsYWJsZVByb3BlcnRpZXM6IHN0cmluZztcbn07XG5cbnR5cGUgU29ydGVyVHlwZSA9IHtcblx0bmFtZTogc3RyaW5nO1xuXHRkZXNjZW5kaW5nOiBib29sZWFuO1xufTtcblxuLyoqXG4gKiBSZXR1cm5zIGFuIGFycmF5IG9mIGFsbCBhbm5vdGF0aW9uLWJhc2VkIGFuZCBtYW5pZmVzdC1iYXNlZCB0YWJsZSBhY3Rpb25zLlxuICpcbiAqIEBwYXJhbSB7TGluZUl0ZW19IGxpbmVJdGVtQW5ub3RhdGlvblxuICogQHBhcmFtIHtzdHJpbmd9IHZpc3VhbGl6YXRpb25QYXRoXG4gKiBAcGFyYW0ge0NvbnZlcnRlckNvbnRleHR9IGNvbnZlcnRlckNvbnRleHRcbiAqIEBwYXJhbSB7TmF2aWdhdGlvblNldHRpbmdzQ29uZmlndXJhdGlvbn0gbmF2aWdhdGlvblNldHRpbmdzXG4gKiBAcmV0dXJucyB7QmFzZUFjdGlvbn0gVGhlIGNvbXBsZXRlIHRhYmxlIGFjdGlvbnNcbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGdldFRhYmxlQWN0aW9ucyhcblx0bGluZUl0ZW1Bbm5vdGF0aW9uOiBMaW5lSXRlbSxcblx0dmlzdWFsaXphdGlvblBhdGg6IHN0cmluZyxcblx0Y29udmVydGVyQ29udGV4dDogQ29udmVydGVyQ29udGV4dCxcblx0bmF2aWdhdGlvblNldHRpbmdzPzogTmF2aWdhdGlvblNldHRpbmdzQ29uZmlndXJhdGlvblxuKTogQmFzZUFjdGlvbltdIHtcblx0Y29uc3QgYVRhYmxlQWN0aW9ucyA9IGdldFRhYmxlQW5ub3RhdGlvbkFjdGlvbnMobGluZUl0ZW1Bbm5vdGF0aW9uLCB2aXN1YWxpemF0aW9uUGF0aCwgY29udmVydGVyQ29udGV4dCk7XG5cdGNvbnN0IGFBbm5vdGF0aW9uQWN0aW9ucyA9IGFUYWJsZUFjdGlvbnMudGFibGVBY3Rpb25zO1xuXHRjb25zdCBhSGlkZGVuQWN0aW9ucyA9IGFUYWJsZUFjdGlvbnMuaGlkZGVuVGFibGVBY3Rpb25zO1xuXHRyZXR1cm4gaW5zZXJ0Q3VzdG9tRWxlbWVudHMoXG5cdFx0YUFubm90YXRpb25BY3Rpb25zLFxuXHRcdGdldEFjdGlvbnNGcm9tTWFuaWZlc3QoXG5cdFx0XHRjb252ZXJ0ZXJDb250ZXh0LmdldE1hbmlmZXN0Q29udHJvbENvbmZpZ3VyYXRpb24odmlzdWFsaXphdGlvblBhdGgpLmFjdGlvbnMsXG5cdFx0XHRjb252ZXJ0ZXJDb250ZXh0LFxuXHRcdFx0YUFubm90YXRpb25BY3Rpb25zLFxuXHRcdFx0bmF2aWdhdGlvblNldHRpbmdzLFxuXHRcdFx0dHJ1ZSxcblx0XHRcdGFIaWRkZW5BY3Rpb25zXG5cdFx0KSxcblx0XHR7XG5cdFx0XHRpc05hdmlnYWJsZTogXCJvdmVyd3JpdGVcIixcblx0XHRcdGVuYWJsZU9uU2VsZWN0OiBcIm92ZXJ3cml0ZVwiLFxuXHRcdFx0ZW5hYmxlQXV0b1Njcm9sbDogXCJvdmVyd3JpdGVcIixcblx0XHRcdGVuYWJsZWQ6IFwib3ZlcndyaXRlXCIsXG5cdFx0XHRkZWZhdWx0VmFsdWVzRXh0ZW5zaW9uRnVuY3Rpb246IFwib3ZlcndyaXRlXCJcblx0XHR9XG5cdCk7XG59XG5cbi8qKlxuICogUmV0dXJucyBhbiBhcnJheSBvZiBhbGwgY29sdW1ucywgYW5ub3RhdGlvbi1iYXNlZCBhcyB3ZWxsIGFzIG1hbmlmZXN0IGJhc2VkLlxuICogVGhleSBhcmUgc29ydGVkIGFuZCBzb21lIHByb3BlcnRpZXMgY2FuIGJlIG92ZXJ3cml0dGVuIHZpYSB0aGUgbWFuaWZlc3QgKGNoZWNrIG91dCB0aGUga2V5cyB0aGF0IGNhbiBiZSBvdmVyd3JpdHRlbikuXG4gKlxuICogQHBhcmFtIHtMaW5lSXRlbX0gbGluZUl0ZW1Bbm5vdGF0aW9uIENvbGxlY3Rpb24gb2YgZGF0YSBmaWVsZHMgZm9yIHJlcHJlc2VudGF0aW9uIGluIGEgdGFibGUgb3IgbGlzdFxuICogQHBhcmFtIHtzdHJpbmd9IHZpc3VhbGl6YXRpb25QYXRoXG4gKiBAcGFyYW0ge0NvbnZlcnRlckNvbnRleHR9IGNvbnZlcnRlckNvbnRleHRcbiAqIEBwYXJhbSB7TmF2aWdhdGlvblNldHRpbmdzQ29uZmlndXJhdGlvbn0gbmF2aWdhdGlvblNldHRpbmdzXG4gKiBAcmV0dXJucyB7VGFibGVDb2x1bW5bXX0gUmV0dXJucyBhbGwgdGFibGUgY29sdW1ucyB0aGF0IHNob3VsZCBiZSBhdmFpbGFibGUsIHJlZ2FyZGxlc3Mgb2YgdGVtcGxhdGluZyBvciBwZXJzb25hbGl6YXRpb24gb3IgdGhlaXIgb3JpZ2luXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBnZXRUYWJsZUNvbHVtbnMoXG5cdGxpbmVJdGVtQW5ub3RhdGlvbjogTGluZUl0ZW0sXG5cdHZpc3VhbGl6YXRpb25QYXRoOiBzdHJpbmcsXG5cdGNvbnZlcnRlckNvbnRleHQ6IENvbnZlcnRlckNvbnRleHQsXG5cdG5hdmlnYXRpb25TZXR0aW5ncz86IE5hdmlnYXRpb25TZXR0aW5nc0NvbmZpZ3VyYXRpb25cbik6IFRhYmxlQ29sdW1uW10ge1xuXHRjb25zdCBhbm5vdGF0aW9uQ29sdW1ucyA9IGdldENvbHVtbnNGcm9tQW5ub3RhdGlvbnMobGluZUl0ZW1Bbm5vdGF0aW9uLCB2aXN1YWxpemF0aW9uUGF0aCwgY29udmVydGVyQ29udGV4dCk7XG5cdGNvbnN0IG1hbmlmZXN0Q29sdW1ucyA9IGdldENvbHVtbnNGcm9tTWFuaWZlc3QoXG5cdFx0Y29udmVydGVyQ29udGV4dC5nZXRNYW5pZmVzdENvbnRyb2xDb25maWd1cmF0aW9uKHZpc3VhbGl6YXRpb25QYXRoKS5jb2x1bW5zLFxuXHRcdGFubm90YXRpb25Db2x1bW5zIGFzIEFubm90YXRpb25UYWJsZUNvbHVtbltdLFxuXHRcdGNvbnZlcnRlckNvbnRleHQsXG5cdFx0Y29udmVydGVyQ29udGV4dC5nZXRBbm5vdGF0aW9uRW50aXR5VHlwZShsaW5lSXRlbUFubm90YXRpb24pLFxuXHRcdG5hdmlnYXRpb25TZXR0aW5nc1xuXHQpO1xuXG5cdHJldHVybiBpbnNlcnRDdXN0b21FbGVtZW50cyhhbm5vdGF0aW9uQ29sdW1ucywgbWFuaWZlc3RDb2x1bW5zLCB7XG5cdFx0d2lkdGg6IFwib3ZlcndyaXRlXCIsXG5cdFx0aXNOYXZpZ2FibGU6IFwib3ZlcndyaXRlXCIsXG5cdFx0YXZhaWxhYmlsaXR5OiBcIm92ZXJ3cml0ZVwiLFxuXHRcdHNldHRpbmdzOiBcIm92ZXJ3cml0ZVwiLFxuXHRcdGhvcml6b250YWxBbGlnbjogXCJvdmVyd3JpdGVcIixcblx0XHRmb3JtYXRPcHRpb25zOiBcIm92ZXJ3cml0ZVwiXG5cdH0pO1xufVxuXG4vKipcbiAqIFJldHJpZXZlIHRoZSBjdXN0b20gYWdncmVnYXRpb24gZGVmaW5pdGlvbnMgZnJvbSB0aGUgZW50aXR5VHlwZS5cbiAqXG4gKiBAcGFyYW0gZW50aXR5VHlwZSBUaGUgdGFyZ2V0IGVudGl0eSB0eXBlLlxuICogQHBhcmFtIHRhYmxlQ29sdW1ucyBUaGUgYXJyYXkgb2YgY29sdW1ucyBmb3IgdGhlIGVudGl0eSB0eXBlLlxuICogQHBhcmFtIGNvbnZlcnRlckNvbnRleHQgVGhlIGNvbnZlcnRlciBjb250ZXh0LlxuICogQHJldHVybnMgVGhlIGFnZ3JlZ2F0ZSBkZWZpbml0aW9ucyBmcm9tIHRoZSBlbnRpdHlUeXBlLCBvciB1bmRlZmluZWQgaWYgdGhlIGVudGl0eSBkb2Vzbid0IHN1cHBvcnQgYW5hbHl0aWNhbCBxdWVyaWVzLlxuICovXG5leHBvcnQgY29uc3QgZ2V0QWdncmVnYXRlRGVmaW5pdGlvbnNGcm9tRW50aXR5VHlwZSA9IGZ1bmN0aW9uKFxuXHRlbnRpdHlUeXBlOiBFbnRpdHlUeXBlLFxuXHR0YWJsZUNvbHVtbnM6IFRhYmxlQ29sdW1uW10sXG5cdGNvbnZlcnRlckNvbnRleHQ6IENvbnZlcnRlckNvbnRleHRcbik6IFJlY29yZDxzdHJpbmcsIEFnZ3JlZ2F0ZURhdGE+IHwgdW5kZWZpbmVkIHtcblx0Y29uc3QgYWdncmVnYXRpb25IZWxwZXIgPSBuZXcgQWdncmVnYXRpb25IZWxwZXIoZW50aXR5VHlwZSwgY29udmVydGVyQ29udGV4dCk7XG5cblx0ZnVuY3Rpb24gZmluZENvbHVtbkZyb21QYXRoKHBhdGg6IHN0cmluZyk6IFRhYmxlQ29sdW1uIHwgdW5kZWZpbmVkIHtcblx0XHRyZXR1cm4gdGFibGVDb2x1bW5zLmZpbmQoY29sdW1uID0+IHtcblx0XHRcdGNvbnN0IGFubm90YXRpb25Db2x1bW4gPSBjb2x1bW4gYXMgQW5ub3RhdGlvblRhYmxlQ29sdW1uO1xuXHRcdFx0cmV0dXJuIGFubm90YXRpb25Db2x1bW4ucHJvcGVydHlJbmZvcyA9PT0gdW5kZWZpbmVkICYmIGFubm90YXRpb25Db2x1bW4ucmVsYXRpdmVQYXRoID09PSBwYXRoO1xuXHRcdH0pO1xuXHR9XG5cblx0aWYgKCFhZ2dyZWdhdGlvbkhlbHBlci5pc0FuYWx5dGljc1N1cHBvcnRlZCgpKSB7XG5cdFx0cmV0dXJuIHVuZGVmaW5lZDtcblx0fVxuXG5cdC8vIEtlZXAgYSBzZXQgb2YgYWxsIGN1cnJlbmN5L3VuaXQgcHJvcGVydGllcywgYXMgd2UgZG9uJ3Qgd2FudCB0byBjb25zaWRlciB0aGVtIGFzIGFnZ3JlZ2F0ZXNcblx0Ly8gVGhleSBhcmUgYWdncmVnYXRlcyBmb3IgdGVjaG5pY2FsIHJlYXNvbnMgKHRvIG1hbmFnZSBtdWx0aS11bml0cyBzaXR1YXRpb25zKSBidXQgaXQgZG9lc24ndCBtYWtlIHNlbnNlIGZyb20gYSB1c2VyIHN0YW5kcG9pbnRcblx0Y29uc3QgbUN1cnJlbmN5T3JVbml0UHJvcGVydGllcyA9IG5ldyBTZXQoKTtcblx0dGFibGVDb2x1bW5zLmZvckVhY2gob0NvbHVtbiA9PiB7XG5cdFx0Y29uc3Qgb1RhYmxlQ29sdW1uID0gb0NvbHVtbiBhcyBBbm5vdGF0aW9uVGFibGVDb2x1bW47XG5cdFx0aWYgKG9UYWJsZUNvbHVtbi51bml0KSB7XG5cdFx0XHRtQ3VycmVuY3lPclVuaXRQcm9wZXJ0aWVzLmFkZChvVGFibGVDb2x1bW4udW5pdCk7XG5cdFx0fVxuXHR9KTtcblxuXHRjb25zdCBhQ3VzdG9tQWdncmVnYXRlQW5ub3RhdGlvbnMgPSBhZ2dyZWdhdGlvbkhlbHBlci5nZXRDdXN0b21BZ2dyZWdhdGVEZWZpbml0aW9ucygpO1xuXHRjb25zdCBtUmF3RGVmaW5pdGlvbnM6IFJlY29yZDxzdHJpbmcsIHN0cmluZ1tdPiA9IHt9O1xuXG5cdGFDdXN0b21BZ2dyZWdhdGVBbm5vdGF0aW9ucy5mb3JFYWNoKGFubm90YXRpb24gPT4ge1xuXHRcdGNvbnN0IG9BZ2dyZWdhdGVkUHJvcGVydHkgPSBhZ2dyZWdhdGlvbkhlbHBlci5fZW50aXR5VHlwZS5lbnRpdHlQcm9wZXJ0aWVzLmZpbmQob1Byb3BlcnR5ID0+IHtcblx0XHRcdHJldHVybiBvUHJvcGVydHkubmFtZSA9PT0gYW5ub3RhdGlvbi5xdWFsaWZpZXI7XG5cdFx0fSk7XG5cblx0XHRpZiAob0FnZ3JlZ2F0ZWRQcm9wZXJ0eSkge1xuXHRcdFx0Y29uc3QgYUNvbnRleHREZWZpbmluZ1Byb3BlcnRpZXMgPSBhbm5vdGF0aW9uLmFubm90YXRpb25zPy5BZ2dyZWdhdGlvbj8uQ29udGV4dERlZmluaW5nUHJvcGVydGllcztcblx0XHRcdG1SYXdEZWZpbml0aW9uc1tvQWdncmVnYXRlZFByb3BlcnR5Lm5hbWVdID0gYUNvbnRleHREZWZpbmluZ1Byb3BlcnRpZXNcblx0XHRcdFx0PyBhQ29udGV4dERlZmluaW5nUHJvcGVydGllcy5tYXAob0N0eERlZlByb3BlcnR5ID0+IHtcblx0XHRcdFx0XHRcdHJldHVybiBvQ3R4RGVmUHJvcGVydHkudmFsdWU7XG5cdFx0XHRcdCAgfSlcblx0XHRcdFx0OiBbXTtcblx0XHR9XG5cdH0pO1xuXHRjb25zdCBtUmVzdWx0OiBSZWNvcmQ8c3RyaW5nLCBBZ2dyZWdhdGVEYXRhPiA9IHt9O1xuXG5cdHRhYmxlQ29sdW1ucy5mb3JFYWNoKG9Db2x1bW4gPT4ge1xuXHRcdGNvbnN0IG9UYWJsZUNvbHVtbiA9IG9Db2x1bW4gYXMgQW5ub3RhdGlvblRhYmxlQ29sdW1uO1xuXHRcdGlmIChvVGFibGVDb2x1bW4ucHJvcGVydHlJbmZvcyA9PT0gdW5kZWZpbmVkICYmIG9UYWJsZUNvbHVtbi5yZWxhdGl2ZVBhdGgpIHtcblx0XHRcdGNvbnN0IGFSYXdDb250ZXh0RGVmaW5pbmdQcm9wZXJ0aWVzID0gbVJhd0RlZmluaXRpb25zW29UYWJsZUNvbHVtbi5yZWxhdGl2ZVBhdGhdO1xuXG5cdFx0XHQvLyBJZ25vcmUgYWdncmVnYXRlcyBjb3JyZXNwb25kaW5nIHRvIGN1cnJlbmNpZXMgb3IgdW5pdHMgb2YgbWVhc3VyZSBhbmQgZHVtbXkgY3JlYXRlZCBwcm9wZXJ0eSBmb3IgZGF0YXBvaW50IHRhcmdldCBWYWx1ZVxuXHRcdFx0aWYgKFxuXHRcdFx0XHRhUmF3Q29udGV4dERlZmluaW5nUHJvcGVydGllcyAmJlxuXHRcdFx0XHQhbUN1cnJlbmN5T3JVbml0UHJvcGVydGllcy5oYXMob1RhYmxlQ29sdW1uLm5hbWUpICYmXG5cdFx0XHRcdCFvVGFibGVDb2x1bW4uaXNEYXRhUG9pbnRGYWtlVGFyZ2V0UHJvcGVydHlcblx0XHRcdCkge1xuXHRcdFx0XHRtUmVzdWx0W29UYWJsZUNvbHVtbi5uYW1lXSA9IHtcblx0XHRcdFx0XHRkZWZhdWx0QWdncmVnYXRlOiB7fSxcblx0XHRcdFx0XHRyZWxhdGl2ZVBhdGg6IG9UYWJsZUNvbHVtbi5yZWxhdGl2ZVBhdGhcblx0XHRcdFx0fTtcblx0XHRcdFx0Y29uc3QgYUNvbnRleHREZWZpbmluZ1Byb3BlcnRpZXM6IHN0cmluZ1tdID0gW107XG5cdFx0XHRcdGFSYXdDb250ZXh0RGVmaW5pbmdQcm9wZXJ0aWVzLmZvckVhY2goY29udGV4dERlZmluaW5nUHJvcGVydHlOYW1lID0+IHtcblx0XHRcdFx0XHRjb25zdCBvQ29sdW1uID0gZmluZENvbHVtbkZyb21QYXRoKGNvbnRleHREZWZpbmluZ1Byb3BlcnR5TmFtZSk7XG5cdFx0XHRcdFx0aWYgKG9Db2x1bW4pIHtcblx0XHRcdFx0XHRcdGFDb250ZXh0RGVmaW5pbmdQcm9wZXJ0aWVzLnB1c2gob0NvbHVtbi5uYW1lKTtcblx0XHRcdFx0XHR9XG5cdFx0XHRcdH0pO1xuXG5cdFx0XHRcdGlmIChhQ29udGV4dERlZmluaW5nUHJvcGVydGllcy5sZW5ndGgpIHtcblx0XHRcdFx0XHRtUmVzdWx0W29UYWJsZUNvbHVtbi5uYW1lXS5kZWZhdWx0QWdncmVnYXRlLmNvbnRleHREZWZpbmluZ1Byb3BlcnRpZXMgPSBhQ29udGV4dERlZmluaW5nUHJvcGVydGllcztcblx0XHRcdFx0fVxuXHRcdFx0fVxuXHRcdH1cblx0fSk7XG5cblx0cmV0dXJuIG1SZXN1bHQ7XG59O1xuXG4vKipcbiAqIFVwZGF0ZXMgYSB0YWJsZSB2aXN1YWxpemF0aW9uIGZvciBhbmFseXRpY2FsIHVzZSBjYXNlcy5cbiAqXG4gKiBAcGFyYW0gdGFibGVWaXN1YWxpemF0aW9uIFRoZSB2aXN1YWxpemF0aW9uIHRvIGJlIHVwZGF0ZWRcbiAqIEBwYXJhbSBlbnRpdHlUeXBlIFRoZSBlbnRpdHkgdHlwZSBkaXNwbGF5ZWQgaW4gdGhlIHRhYmxlXG4gKiBAcGFyYW0gY29udmVydGVyQ29udGV4dCBUaGUgY29udmVydGVyIGNvbnRleHRcbiAqIEBwYXJhbSBwcmVzZW50YXRpb25WYXJpYW50QW5ub3RhdGlvbiBUaGUgcHJlc2VudGF0aW9uVmFyaWFudCBhbm5vdGF0aW9uIChpZiBhbnkpXG4gKi9cbmZ1bmN0aW9uIHVwZGF0ZVRhYmxlVmlzdWFsaXphdGlvbkZvckFuYWx5dGljcyhcblx0dGFibGVWaXN1YWxpemF0aW9uOiBUYWJsZVZpc3VhbGl6YXRpb24sXG5cdGVudGl0eVR5cGU6IEVudGl0eVR5cGUsXG5cdGNvbnZlcnRlckNvbnRleHQ6IENvbnZlcnRlckNvbnRleHQsXG5cdHByZXNlbnRhdGlvblZhcmlhbnRBbm5vdGF0aW9uPzogUHJlc2VudGF0aW9uVmFyaWFudFR5cGVUeXBlc1xuKSB7XG5cdGlmICh0YWJsZVZpc3VhbGl6YXRpb24uY29udHJvbC50eXBlID09PSBcIkFuYWx5dGljYWxUYWJsZVwiKSB7XG5cdFx0Y29uc3QgYWdncmVnYXRlc0RlZmluaXRpb25zID0gZ2V0QWdncmVnYXRlRGVmaW5pdGlvbnNGcm9tRW50aXR5VHlwZShlbnRpdHlUeXBlLCB0YWJsZVZpc3VhbGl6YXRpb24uY29sdW1ucywgY29udmVydGVyQ29udGV4dCk7XG5cblx0XHRpZiAoYWdncmVnYXRlc0RlZmluaXRpb25zKSB7XG5cdFx0XHR0YWJsZVZpc3VhbGl6YXRpb24uZW5hYmxlQW5hbHl0aWNzID0gdHJ1ZTtcblx0XHRcdHRhYmxlVmlzdWFsaXphdGlvbi5hZ2dyZWdhdGVzID0gYWdncmVnYXRlc0RlZmluaXRpb25zO1xuXG5cdFx0XHRjb25zdCBhZ2dyZWdhdGlvbkhlbHBlciA9IG5ldyBBZ2dyZWdhdGlvbkhlbHBlcihlbnRpdHlUeXBlLCBjb252ZXJ0ZXJDb250ZXh0KTtcblx0XHRcdGNvbnN0IGFsbG93ZWRUcmFuc2Zvcm1hdGlvbnMgPSBhZ2dyZWdhdGlvbkhlbHBlci5nZXRBbGxvd2VkVHJhbnNmb3JtYXRpb25zKCk7XG5cdFx0XHR0YWJsZVZpc3VhbGl6YXRpb24uZW5hYmxlQW5hbHl0aWNzU2VhcmNoID0gYWxsb3dlZFRyYW5zZm9ybWF0aW9ucyA/IGFsbG93ZWRUcmFuc2Zvcm1hdGlvbnMuaW5kZXhPZihcInNlYXJjaFwiKSA+PSAwIDogdHJ1ZTtcblxuXHRcdFx0Ly8gQWRkIGdyb3VwIGFuZCBzb3J0IGNvbmRpdGlvbnMgZnJvbSB0aGUgcHJlc2VudGF0aW9uIHZhcmlhbnRcblx0XHRcdHRhYmxlVmlzdWFsaXphdGlvbi5hbm5vdGF0aW9uLmdyb3VwQ29uZGl0aW9ucyA9IGdldEdyb3VwQ29uZGl0aW9ucyhwcmVzZW50YXRpb25WYXJpYW50QW5ub3RhdGlvbiwgdGFibGVWaXN1YWxpemF0aW9uLmNvbHVtbnMpO1xuXHRcdFx0dGFibGVWaXN1YWxpemF0aW9uLmFubm90YXRpb24uYWdncmVnYXRlQ29uZGl0aW9ucyA9IGdldEFnZ3JlZ2F0ZUNvbmRpdGlvbnMoXG5cdFx0XHRcdHByZXNlbnRhdGlvblZhcmlhbnRBbm5vdGF0aW9uLFxuXHRcdFx0XHR0YWJsZVZpc3VhbGl6YXRpb24uY29sdW1uc1xuXHRcdFx0KTtcblx0XHR9XG5cblx0XHR0YWJsZVZpc3VhbGl6YXRpb24uY29udHJvbC50eXBlID0gXCJHcmlkVGFibGVcIjsgLy8gQW5hbHl0aWNhbFRhYmxlIGlzbid0IGEgcmVhbCB0eXBlIGZvciB0aGUgTURDOlRhYmxlLCBzbyB3ZSBhbHdheXMgc3dpdGNoIGJhY2sgdG8gR3JpZFxuXHR9XG59XG5cbi8qKlxuICogR2V0IHRoZSBuYXZpZ2F0aW9uIHRhcmdldCBwYXRoIGZyb20gbWFuaWZlc3Qgc2V0dGluZ3MuXG4gKlxuICogQHBhcmFtIGNvbnZlcnRlckNvbnRleHQgVGhlIGNvbnZlcnRlciBjb250ZXh0XG4gKiBAcGFyYW0gbmF2aWdhdGlvblByb3BlcnR5UGF0aCBUaGUgbmF2aWdhdGlvbiBwYXRoIHRvIGNoZWNrIGluIHRoZSBtYW5pZmVzdCBzZXR0aW5nc1xuICogQHJldHVybnMgTmF2aWdhdGlvbiBwYXRoIGZyb20gbWFuaWZlc3Qgc2V0dGluZ3NcbiAqL1xuZnVuY3Rpb24gZ2V0TmF2aWdhdGlvblRhcmdldFBhdGgoY29udmVydGVyQ29udGV4dDogQ29udmVydGVyQ29udGV4dCwgbmF2aWdhdGlvblByb3BlcnR5UGF0aDogc3RyaW5nKSB7XG5cdGNvbnN0IG1hbmlmZXN0V3JhcHBlciA9IGNvbnZlcnRlckNvbnRleHQuZ2V0TWFuaWZlc3RXcmFwcGVyKCk7XG5cdGlmIChuYXZpZ2F0aW9uUHJvcGVydHlQYXRoICYmIG1hbmlmZXN0V3JhcHBlci5nZXROYXZpZ2F0aW9uQ29uZmlndXJhdGlvbihuYXZpZ2F0aW9uUHJvcGVydHlQYXRoKSkge1xuXHRcdGNvbnN0IG5hdkNvbmZpZyA9IG1hbmlmZXN0V3JhcHBlci5nZXROYXZpZ2F0aW9uQ29uZmlndXJhdGlvbihuYXZpZ2F0aW9uUHJvcGVydHlQYXRoKTtcblx0XHRpZiAoT2JqZWN0LmtleXMobmF2Q29uZmlnKS5sZW5ndGggPiAwKSB7XG5cdFx0XHRyZXR1cm4gbmF2aWdhdGlvblByb3BlcnR5UGF0aDtcblx0XHR9XG5cdH1cblxuXHRjb25zdCBkYXRhTW9kZWxQYXRoID0gY29udmVydGVyQ29udGV4dC5nZXREYXRhTW9kZWxPYmplY3RQYXRoKCk7XG5cdGNvbnN0IGNvbnRleHRQYXRoID0gY29udmVydGVyQ29udGV4dC5nZXRDb250ZXh0UGF0aCgpO1xuXHRjb25zdCBuYXZDb25maWdGb3JDb250ZXh0UGF0aCA9IG1hbmlmZXN0V3JhcHBlci5nZXROYXZpZ2F0aW9uQ29uZmlndXJhdGlvbihjb250ZXh0UGF0aCk7XG5cdGlmIChuYXZDb25maWdGb3JDb250ZXh0UGF0aCAmJiBPYmplY3Qua2V5cyhuYXZDb25maWdGb3JDb250ZXh0UGF0aCkubGVuZ3RoID4gMCkge1xuXHRcdHJldHVybiBjb250ZXh0UGF0aDtcblx0fVxuXG5cdHJldHVybiBkYXRhTW9kZWxQYXRoLnRhcmdldEVudGl0eVNldCA/IGRhdGFNb2RlbFBhdGgudGFyZ2V0RW50aXR5U2V0Lm5hbWUgOiBkYXRhTW9kZWxQYXRoLnN0YXJ0aW5nRW50aXR5U2V0Lm5hbWU7XG59XG5cbi8qKlxuICogU2V0cyB0aGUgJ3VuaXQnIGFuZCAndGV4dEFycmFuZ2VtZW50JyBwcm9wZXJ0aWVzIGluIGNvbHVtbnMgd2hlbiBuZWNlc3NhcnkuXG4gKlxuICogQHBhcmFtIGVudGl0eVR5cGUgVGhlIGVudGl0eSB0eXBlIGRpc3BsYXllZCBpbiB0aGUgdGFibGVcbiAqIEBwYXJhbSB0YWJsZUNvbHVtbnMgVGhlIGNvbHVtbnMgdG8gYmUgdXBkYXRlZFxuICovXG5leHBvcnQgZnVuY3Rpb24gdXBkYXRlTGlua2VkUHJvcGVydGllcyhlbnRpdHlUeXBlOiBFbnRpdHlUeXBlLCB0YWJsZUNvbHVtbnM6IFRhYmxlQ29sdW1uW10pIHtcblx0ZnVuY3Rpb24gZmluZENvbHVtbkJ5UGF0aChwYXRoOiBzdHJpbmcpOiBUYWJsZUNvbHVtbiB8IHVuZGVmaW5lZCB7XG5cdFx0cmV0dXJuIHRhYmxlQ29sdW1ucy5maW5kKGNvbHVtbiA9PiB7XG5cdFx0XHRjb25zdCBhbm5vdGF0aW9uQ29sdW1uID0gY29sdW1uIGFzIEFubm90YXRpb25UYWJsZUNvbHVtbjtcblx0XHRcdHJldHVybiBhbm5vdGF0aW9uQ29sdW1uLnByb3BlcnR5SW5mb3MgPT09IHVuZGVmaW5lZCAmJiBhbm5vdGF0aW9uQ29sdW1uLnJlbGF0aXZlUGF0aCA9PT0gcGF0aDtcblx0XHR9KTtcblx0fVxuXG5cdHRhYmxlQ29sdW1ucy5mb3JFYWNoKG9Db2x1bW4gPT4ge1xuXHRcdGNvbnN0IG9UYWJsZUNvbHVtbiA9IG9Db2x1bW4gYXMgQW5ub3RhdGlvblRhYmxlQ29sdW1uO1xuXHRcdGlmIChvVGFibGVDb2x1bW4ucHJvcGVydHlJbmZvcyA9PT0gdW5kZWZpbmVkICYmIG9UYWJsZUNvbHVtbi5yZWxhdGl2ZVBhdGgpIHtcblx0XHRcdGNvbnN0IG9Qcm9wZXJ0eSA9IGVudGl0eVR5cGUuZW50aXR5UHJvcGVydGllcy5maW5kKG9Qcm9wID0+IG9Qcm9wLm5hbWUgPT09IG9UYWJsZUNvbHVtbi5yZWxhdGl2ZVBhdGgpO1xuXHRcdFx0aWYgKG9Qcm9wZXJ0eSkge1xuXHRcdFx0XHRjb25zdCBzVW5pdCA9IGdldEFzc29jaWF0ZWRDdXJyZW5jeVByb3BlcnR5KG9Qcm9wZXJ0eSk/Lm5hbWUgfHwgZ2V0QXNzb2NpYXRlZFVuaXRQcm9wZXJ0eShvUHJvcGVydHkpPy5uYW1lO1xuXHRcdFx0XHRpZiAoc1VuaXQpIHtcblx0XHRcdFx0XHRjb25zdCBvVW5pdENvbHVtbiA9IGZpbmRDb2x1bW5CeVBhdGgoc1VuaXQpO1xuXG5cdFx0XHRcdFx0b1RhYmxlQ29sdW1uLnVuaXQgPSBvVW5pdENvbHVtbj8ubmFtZTtcblx0XHRcdFx0fVxuXG5cdFx0XHRcdGNvbnN0IGRpc3BsYXlNb2RlID0gZ2V0RGlzcGxheU1vZGUob1Byb3BlcnR5KSxcblx0XHRcdFx0XHR0ZXh0QW5ub3RhdGlvbiA9IG9Qcm9wZXJ0eS5hbm5vdGF0aW9ucy5Db21tb24/LlRleHQ7XG5cdFx0XHRcdGlmIChpc1BhdGhFeHByZXNzaW9uKHRleHRBbm5vdGF0aW9uKSAmJiBkaXNwbGF5TW9kZSAhPT0gXCJWYWx1ZVwiKSB7XG5cdFx0XHRcdFx0Y29uc3Qgb1RleHRDb2x1bW4gPSBmaW5kQ29sdW1uQnlQYXRoKHRleHRBbm5vdGF0aW9uLnBhdGgpO1xuXHRcdFx0XHRcdGlmIChvVGV4dENvbHVtbiAmJiBvVGV4dENvbHVtbi5uYW1lICE9PSBvVGFibGVDb2x1bW4ubmFtZSkge1xuXHRcdFx0XHRcdFx0b1RhYmxlQ29sdW1uLnRleHRBcnJhbmdlbWVudCA9IHtcblx0XHRcdFx0XHRcdFx0dGV4dFByb3BlcnR5OiBvVGV4dENvbHVtbi5uYW1lLFxuXHRcdFx0XHRcdFx0XHRtb2RlOiBkaXNwbGF5TW9kZVxuXHRcdFx0XHRcdFx0fTtcblx0XHRcdFx0XHR9XG5cdFx0XHRcdH1cblx0XHRcdH1cblx0XHR9XG5cdH0pO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gY3JlYXRlVGFibGVWaXN1YWxpemF0aW9uKFxuXHRsaW5lSXRlbUFubm90YXRpb246IExpbmVJdGVtLFxuXHR2aXN1YWxpemF0aW9uUGF0aDogc3RyaW5nLFxuXHRjb252ZXJ0ZXJDb250ZXh0OiBDb252ZXJ0ZXJDb250ZXh0LFxuXHRwcmVzZW50YXRpb25WYXJpYW50QW5ub3RhdGlvbj86IFByZXNlbnRhdGlvblZhcmlhbnRUeXBlVHlwZXMsXG5cdGlzQ29uZGVuc2VkVGFibGVMYXlvdXRDb21wbGlhbnQ/OiBib29sZWFuLFxuXHR2aWV3Q29uZmlndXJhdGlvbj86IFZpZXdQYXRoQ29uZmlndXJhdGlvblxuKTogVGFibGVWaXN1YWxpemF0aW9uIHtcblx0Y29uc3QgdGFibGVNYW5pZmVzdENvbmZpZyA9IGdldFRhYmxlTWFuaWZlc3RDb25maWd1cmF0aW9uKFxuXHRcdGxpbmVJdGVtQW5ub3RhdGlvbixcblx0XHR2aXN1YWxpemF0aW9uUGF0aCxcblx0XHRjb252ZXJ0ZXJDb250ZXh0LFxuXHRcdGlzQ29uZGVuc2VkVGFibGVMYXlvdXRDb21wbGlhbnRcblx0KTtcblx0Y29uc3QgeyBuYXZpZ2F0aW9uUHJvcGVydHlQYXRoIH0gPSBzcGxpdFBhdGgodmlzdWFsaXphdGlvblBhdGgpO1xuXHRjb25zdCBuYXZpZ2F0aW9uVGFyZ2V0UGF0aCA9IGdldE5hdmlnYXRpb25UYXJnZXRQYXRoKGNvbnZlcnRlckNvbnRleHQsIG5hdmlnYXRpb25Qcm9wZXJ0eVBhdGgpO1xuXHRjb25zdCBuYXZpZ2F0aW9uU2V0dGluZ3MgPSBjb252ZXJ0ZXJDb250ZXh0LmdldE1hbmlmZXN0V3JhcHBlcigpLmdldE5hdmlnYXRpb25Db25maWd1cmF0aW9uKG5hdmlnYXRpb25UYXJnZXRQYXRoKTtcblx0Y29uc3QgY29sdW1ucyA9IGdldFRhYmxlQ29sdW1ucyhsaW5lSXRlbUFubm90YXRpb24sIHZpc3VhbGl6YXRpb25QYXRoLCBjb252ZXJ0ZXJDb250ZXh0LCBuYXZpZ2F0aW9uU2V0dGluZ3MpO1xuXHRjb25zdCBvcGVyYXRpb25BdmFpbGFibGVNYXAgPSBnZXRPcGVyYXRpb25BdmFpbGFibGVNYXAobGluZUl0ZW1Bbm5vdGF0aW9uLCBjb252ZXJ0ZXJDb250ZXh0KTtcblxuXHRjb25zdCBvVmlzdWFsaXphdGlvbjogVGFibGVWaXN1YWxpemF0aW9uID0ge1xuXHRcdHR5cGU6IFZpc3VhbGl6YXRpb25UeXBlLlRhYmxlLFxuXHRcdGFubm90YXRpb246IGdldFRhYmxlQW5ub3RhdGlvbkNvbmZpZ3VyYXRpb24oXG5cdFx0XHRsaW5lSXRlbUFubm90YXRpb24sXG5cdFx0XHR2aXN1YWxpemF0aW9uUGF0aCxcblx0XHRcdGNvbnZlcnRlckNvbnRleHQsXG5cdFx0XHR0YWJsZU1hbmlmZXN0Q29uZmlnLFxuXHRcdFx0Y29sdW1ucyxcblx0XHRcdHByZXNlbnRhdGlvblZhcmlhbnRBbm5vdGF0aW9uLFxuXHRcdFx0dmlld0NvbmZpZ3VyYXRpb25cblx0XHQpLFxuXHRcdGNvbnRyb2w6IHRhYmxlTWFuaWZlc3RDb25maWcsXG5cdFx0YWN0aW9uczogcmVtb3ZlRHVwbGljYXRlQWN0aW9ucyhnZXRUYWJsZUFjdGlvbnMobGluZUl0ZW1Bbm5vdGF0aW9uLCB2aXN1YWxpemF0aW9uUGF0aCwgY29udmVydGVyQ29udGV4dCwgbmF2aWdhdGlvblNldHRpbmdzKSksXG5cdFx0Y29sdW1uczogY29sdW1ucyxcblx0XHRlbmFibGVEYXRhU3RhdGVGaWx0ZXI6IGNvbnZlcnRlckNvbnRleHQuZ2V0VGVtcGxhdGVUeXBlKCkgPT09IFwiT2JqZWN0UGFnZVwiLFxuXHRcdG9wZXJhdGlvbkF2YWlsYWJsZU1hcDogSlNPTi5zdHJpbmdpZnkob3BlcmF0aW9uQXZhaWxhYmxlTWFwKSxcblx0XHRvcGVyYXRpb25BdmFpbGFibGVQcm9wZXJ0aWVzOiBnZXRPcGVyYXRpb25BdmFpbGFibGVQcm9wZXJ0aWVzKG9wZXJhdGlvbkF2YWlsYWJsZU1hcCwgY29udmVydGVyQ29udGV4dClcblx0fTtcblxuXHR1cGRhdGVMaW5rZWRQcm9wZXJ0aWVzKGNvbnZlcnRlckNvbnRleHQuZ2V0QW5ub3RhdGlvbkVudGl0eVR5cGUobGluZUl0ZW1Bbm5vdGF0aW9uKSwgY29sdW1ucyk7XG5cdHVwZGF0ZVRhYmxlVmlzdWFsaXphdGlvbkZvckFuYWx5dGljcyhcblx0XHRvVmlzdWFsaXphdGlvbixcblx0XHRjb252ZXJ0ZXJDb250ZXh0LmdldEFubm90YXRpb25FbnRpdHlUeXBlKGxpbmVJdGVtQW5ub3RhdGlvbiksXG5cdFx0Y29udmVydGVyQ29udGV4dCxcblx0XHRwcmVzZW50YXRpb25WYXJpYW50QW5ub3RhdGlvblxuXHQpO1xuXG5cdHJldHVybiBvVmlzdWFsaXphdGlvbjtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGNyZWF0ZURlZmF1bHRUYWJsZVZpc3VhbGl6YXRpb24oY29udmVydGVyQ29udGV4dDogQ29udmVydGVyQ29udGV4dCk6IFRhYmxlVmlzdWFsaXphdGlvbiB7XG5cdGNvbnN0IHRhYmxlTWFuaWZlc3RDb25maWcgPSBnZXRUYWJsZU1hbmlmZXN0Q29uZmlndXJhdGlvbih1bmRlZmluZWQsIFwiXCIsIGNvbnZlcnRlckNvbnRleHQsIGZhbHNlKTtcblx0Y29uc3QgY29sdW1ucyA9IGdldENvbHVtbnNGcm9tRW50aXR5VHlwZSh7fSwgY29udmVydGVyQ29udGV4dC5nZXRFbnRpdHlUeXBlKCksIFtdLCBbXSwgY29udmVydGVyQ29udGV4dCwgdGFibGVNYW5pZmVzdENvbmZpZy50eXBlKTtcblx0Y29uc3Qgb3BlcmF0aW9uQXZhaWxhYmxlTWFwID0gZ2V0T3BlcmF0aW9uQXZhaWxhYmxlTWFwKHVuZGVmaW5lZCwgY29udmVydGVyQ29udGV4dCk7XG5cdGNvbnN0IG9WaXN1YWxpemF0aW9uOiBUYWJsZVZpc3VhbGl6YXRpb24gPSB7XG5cdFx0dHlwZTogVmlzdWFsaXphdGlvblR5cGUuVGFibGUsXG5cdFx0YW5ub3RhdGlvbjogZ2V0VGFibGVBbm5vdGF0aW9uQ29uZmlndXJhdGlvbih1bmRlZmluZWQsIFwiXCIsIGNvbnZlcnRlckNvbnRleHQsIHRhYmxlTWFuaWZlc3RDb25maWcsIGNvbHVtbnMpLFxuXHRcdGNvbnRyb2w6IHRhYmxlTWFuaWZlc3RDb25maWcsXG5cdFx0YWN0aW9uczogW10sXG5cdFx0Y29sdW1uczogY29sdW1ucyxcblx0XHRlbmFibGVEYXRhU3RhdGVGaWx0ZXI6IGNvbnZlcnRlckNvbnRleHQuZ2V0VGVtcGxhdGVUeXBlKCkgPT09IFwiT2JqZWN0UGFnZVwiLFxuXHRcdG9wZXJhdGlvbkF2YWlsYWJsZU1hcDogSlNPTi5zdHJpbmdpZnkob3BlcmF0aW9uQXZhaWxhYmxlTWFwKSxcblx0XHRvcGVyYXRpb25BdmFpbGFibGVQcm9wZXJ0aWVzOiBnZXRPcGVyYXRpb25BdmFpbGFibGVQcm9wZXJ0aWVzKG9wZXJhdGlvbkF2YWlsYWJsZU1hcCwgY29udmVydGVyQ29udGV4dClcblx0fTtcblxuXHR1cGRhdGVMaW5rZWRQcm9wZXJ0aWVzKGNvbnZlcnRlckNvbnRleHQuZ2V0RW50aXR5VHlwZSgpLCBjb2x1bW5zKTtcblx0dXBkYXRlVGFibGVWaXN1YWxpemF0aW9uRm9yQW5hbHl0aWNzKG9WaXN1YWxpemF0aW9uLCBjb252ZXJ0ZXJDb250ZXh0LmdldEVudGl0eVR5cGUoKSwgY29udmVydGVyQ29udGV4dCk7XG5cblx0cmV0dXJuIG9WaXN1YWxpemF0aW9uO1xufVxuXG4vKipcbiAqIEdldHMgdGhlIG1hcCBvZiBDb3JlLk9wZXJhdGlvbkF2YWlsYWJsZSBwcm9wZXJ0eSBwYXRocyBmb3IgYWxsIERhdGFGaWVsZEZvckFjdGlvbnMuXG4gKlxuICogQHBhcmFtIGxpbmVJdGVtQW5ub3RhdGlvbiBUaGUgaW5zdGFuY2Ugb2YgdGhlIGxpbmUgaXRlbVxuICogQHBhcmFtIGNvbnZlcnRlckNvbnRleHQgVGhlIGluc3RhbmNlIG9mIHRoZSBjb252ZXJ0ZXIgY29udGV4dFxuICogQHJldHVybnMge1JlY29yZDxzdHJpbmcsIGFueT59IFRoZSByZWNvcmQgY29udGFpbmluZyBhbGwgYWN0aW9uIG5hbWVzIGFuZCB0aGVpciBjb3JyZXNwb25kaW5nIENvcmUuT3BlcmF0aW9uQXZhaWxhYmxlIHByb3BlcnR5IHBhdGhzXG4gKi9cbmZ1bmN0aW9uIGdldE9wZXJhdGlvbkF2YWlsYWJsZU1hcChsaW5lSXRlbUFubm90YXRpb246IExpbmVJdGVtIHwgdW5kZWZpbmVkLCBjb252ZXJ0ZXJDb250ZXh0OiBDb252ZXJ0ZXJDb250ZXh0KTogUmVjb3JkPHN0cmluZywgYW55PiB7XG5cdGNvbnN0IG9wZXJhdGlvbkF2YWlsYWJsZU1hcDogUmVjb3JkPHN0cmluZywgYW55PiA9IHt9O1xuXHRjb25zdCBhZGRUb01hcCA9IGZ1bmN0aW9uKGtleTogc3RyaW5nLCB2YWx1ZTogYW55KSB7XG5cdFx0aWYgKGtleSkge1xuXHRcdFx0b3BlcmF0aW9uQXZhaWxhYmxlTWFwW2tleV0gPSB2YWx1ZTtcblx0XHR9XG5cdH07XG5cblx0aWYgKGxpbmVJdGVtQW5ub3RhdGlvbikge1xuXHRcdGxpbmVJdGVtQW5ub3RhdGlvbi5mb3JFYWNoKGRhdGFGaWVsZCA9PiB7XG5cdFx0XHRpZiAoZGF0YUZpZWxkLiRUeXBlID09PSBVSUFubm90YXRpb25UeXBlcy5EYXRhRmllbGRGb3JBY3Rpb24pIHtcblx0XHRcdFx0Y29uc3QgYWN0aW9uTmFtZSA9IGRhdGFGaWVsZC5BY3Rpb24gYXMgc3RyaW5nO1xuXHRcdFx0XHRpZiAoYWN0aW9uTmFtZT8uaW5kZXhPZihcIi9cIikgPCAwICYmICFkYXRhRmllbGQuRGV0ZXJtaW5pbmcpIHtcblx0XHRcdFx0XHRjb25zdCBhY3Rpb25UYXJnZXQgPSBkYXRhRmllbGQuQWN0aW9uVGFyZ2V0O1xuXHRcdFx0XHRcdGlmIChhY3Rpb25UYXJnZXQ/LmFubm90YXRpb25zPy5Db3JlPy5PcGVyYXRpb25BdmFpbGFibGUgPT09IG51bGwpIHtcblx0XHRcdFx0XHRcdC8vIEFubm90YXRpb24gZXhwbGljaXRseSBjb25maWd1cmVkIHdpdGggbnVsbCAoYWN0aW9uIGFkdmVydGlzZW1lbnQgcmVsYXRlZClcblx0XHRcdFx0XHRcdGFkZFRvTWFwKGFjdGlvbk5hbWUsIG51bGwpO1xuXHRcdFx0XHRcdH0gZWxzZSBpZiAoYWN0aW9uVGFyZ2V0Py5wYXJhbWV0ZXJzPy5sZW5ndGgpIHtcblx0XHRcdFx0XHRcdGNvbnN0IGJpbmRpbmdQYXJhbWV0ZXJGdWxsTmFtZSA9IGFjdGlvblRhcmdldC5wYXJhbWV0ZXJzWzBdLmZ1bGx5UXVhbGlmaWVkTmFtZSxcblx0XHRcdFx0XHRcdFx0dGFyZ2V0RXhwcmVzc2lvbiA9IGFubm90YXRpb25FeHByZXNzaW9uKFxuXHRcdFx0XHRcdFx0XHRcdGFjdGlvblRhcmdldD8uYW5ub3RhdGlvbnM/LkNvcmU/Lk9wZXJhdGlvbkF2YWlsYWJsZSxcblx0XHRcdFx0XHRcdFx0XHRbXSxcblx0XHRcdFx0XHRcdFx0XHR1bmRlZmluZWQsXG5cdFx0XHRcdFx0XHRcdFx0KHBhdGg6IHN0cmluZykgPT4gYmluZGluZ0NvbnRleHRQYXRoVmlzaXRvcihwYXRoLCBjb252ZXJ0ZXJDb250ZXh0LCBiaW5kaW5nUGFyYW1ldGVyRnVsbE5hbWUpXG5cdFx0XHRcdFx0XHRcdCkgYXMgQmluZGluZ0V4cHJlc3Npb25FeHByZXNzaW9uPHN0cmluZz47XG5cblx0XHRcdFx0XHRcdGlmICh0YXJnZXRFeHByZXNzaW9uPy5wYXRoKSB7XG5cdFx0XHRcdFx0XHRcdGFkZFRvTWFwKGFjdGlvbk5hbWUsIHRhcmdldEV4cHJlc3Npb24ucGF0aCk7XG5cdFx0XHRcdFx0XHR9IGVsc2UgaWYgKGFjdGlvblRhcmdldD8uYW5ub3RhdGlvbnM/LkNvcmU/Lk9wZXJhdGlvbkF2YWlsYWJsZSAhPT0gdW5kZWZpbmVkKSB7XG5cdFx0XHRcdFx0XHRcdGFkZFRvTWFwKGFjdGlvbk5hbWUsIHRhcmdldEV4cHJlc3Npb24pO1xuXHRcdFx0XHRcdFx0fVxuXHRcdFx0XHRcdH1cblx0XHRcdFx0fVxuXHRcdFx0fVxuXHRcdH0pO1xuXHR9XG5cblx0cmV0dXJuIG9wZXJhdGlvbkF2YWlsYWJsZU1hcDtcbn1cblxuLyoqXG4gKiBNZXRob2QgdG8gcmV0cmlldmUgYWxsIHByb3BlcnR5IHBhdGhzIGFzc2lnbmVkIHRvIHRoZSBDb3JlLk9wZXJhdGlvbkF2YWlsYWJsZSBhbm5vdGF0aW9uLlxuICpcbiAqIEBwYXJhbSB7UmVjb3JkPHN0cmluZywgYW55Pn0gb3BlcmF0aW9uQXZhaWxhYmxlTWFwIFRoZSByZWNvcmQgY29uc2lzdGluZyBvZiBhY3Rpb25zIGFuZCB0aGVpciBDb3JlLk9wZXJhdGlvbkF2YWlsYWJsZSBwcm9wZXJ0eSBwYXRoc1xuICogQHBhcmFtIHtDb252ZXJ0ZXJDb250ZXh0fSBjb252ZXJ0ZXJDb250ZXh0IFRoZSBpbnN0YW5jZSBvZiB0aGUgY29udmVydGVyIGNvbnRleHRcbiAqIEByZXR1cm5zIHtzdHJpbmd9IFRoZSBDU1Ygc3RyaW5nIG9mIGFsbCBwcm9wZXJ0eSBwYXRocyBhc3NvY2lhdGVkIHdpdGggdGhlIENvcmUuT3BlcmF0aW9uQXZhaWxhYmxlIGFubm90YXRpb25cbiAqL1xuZnVuY3Rpb24gZ2V0T3BlcmF0aW9uQXZhaWxhYmxlUHJvcGVydGllcyhvcGVyYXRpb25BdmFpbGFibGVNYXA6IFJlY29yZDxzdHJpbmcsIGFueT4sIGNvbnZlcnRlckNvbnRleHQ6IENvbnZlcnRlckNvbnRleHQpOiBzdHJpbmcge1xuXHRjb25zdCBwcm9wZXJ0aWVzID0gbmV3IFNldCgpO1xuXG5cdGZvciAoY29uc3QgYWN0aW9uTmFtZSBpbiBvcGVyYXRpb25BdmFpbGFibGVNYXApIHtcblx0XHRjb25zdCBwcm9wZXJ0eU5hbWUgPSBvcGVyYXRpb25BdmFpbGFibGVNYXBbYWN0aW9uTmFtZV07XG5cdFx0aWYgKHByb3BlcnR5TmFtZSA9PT0gbnVsbCkge1xuXHRcdFx0Ly8gQW5ub3RhdGlvbiBjb25maWd1cmVkIHdpdGggZXhwbGljaXQgJ251bGwnIChhY3Rpb24gYWR2ZXJ0aXNlbWVudCByZWxldmFudClcblx0XHRcdHByb3BlcnRpZXMuYWRkKGFjdGlvbk5hbWUpO1xuXHRcdH0gZWxzZSBpZiAodHlwZW9mIHByb3BlcnR5TmFtZSA9PT0gXCJzdHJpbmdcIikge1xuXHRcdFx0Ly8gQWRkIHByb3BlcnR5IHBhdGhzIGFuZCBub3QgQ29uc3RhbnQgdmFsdWVzLlxuXHRcdFx0cHJvcGVydGllcy5hZGQocHJvcGVydHlOYW1lKTtcblx0XHR9XG5cdH1cblxuXHRpZiAocHJvcGVydGllcy5zaXplKSB7XG5cdFx0Ly8gU29tZSBhY3Rpb25zIGhhdmUgYW4gb3BlcmF0aW9uIGF2YWlsYWJsZSBiYXNlZCBvbiBwcm9wZXJ0eSAtLT4gd2UgbmVlZCB0byBsb2FkIHRoZSBIZWFkZXJJbmZvLlRpdGxlIHByb3BlcnR5XG5cdFx0Ly8gc28gdGhhdCB0aGUgZGlhbG9nIG9uIHBhcnRpYWwgYWN0aW9ucyBpcyBkaXNwbGF5ZWQgcHJvcGVybHkgKEJDUCAyMTgwMjcxNDI1KVxuXHRcdGNvbnN0IGVudGl0eVR5cGUgPSBjb252ZXJ0ZXJDb250ZXh0LmdldEVudGl0eVR5cGUoKTtcblx0XHRjb25zdCB0aXRsZVByb3BlcnR5ID0gKGVudGl0eVR5cGUuYW5ub3RhdGlvbnM/LlVJPy5IZWFkZXJJbmZvPy5UaXRsZSBhcyBEYXRhRmllbGRUeXBlcyk/LlZhbHVlPy5wYXRoO1xuXHRcdGlmICh0aXRsZVByb3BlcnR5KSB7XG5cdFx0XHRwcm9wZXJ0aWVzLmFkZCh0aXRsZVByb3BlcnR5KTtcblx0XHR9XG5cdH1cblxuXHRyZXR1cm4gQXJyYXkuZnJvbShwcm9wZXJ0aWVzKS5qb2luKFwiLFwiKTtcbn1cblxuLyoqXG4gKiBJdGVyYXRlcyBvdmVyIHRoZSBEYXRhRmllbGRGb3JBY3Rpb24gYW5kIERhdGFGaWVsZEZvckludGVudEJhc2VkTmF2aWdhdGlvbiBvZiBhIGxpbmUgaXRlbSBhbmRcbiAqIHJldHVybnMgYWxsIHRoZSBVSS5IaWRkZW4gYW5ub3RhdGlvbiBleHByZXNzaW9ucy5cbiAqXG4gKiBAcGFyYW0gbGluZUl0ZW1Bbm5vdGF0aW9uIENvbGxlY3Rpb24gb2YgZGF0YSBmaWVsZHMgdXNlZCBmb3IgcmVwcmVzZW50YXRpb24gaW4gYSB0YWJsZSBvciBsaXN0XG4gKiBAcGFyYW0gY3VycmVudEVudGl0eVR5cGUgQ3VycmVudCBlbnRpdHkgdHlwZVxuICogQHBhcmFtIGNvbnRleHREYXRhTW9kZWxPYmplY3RQYXRoIE9iamVjdCBwYXRoIG9mIHRoZSBkYXRhIG1vZGVsXG4gKiBAcGFyYW0gaXNFbnRpdHlTZXRcbiAqIEByZXR1cm5zIEFsbCB0aGUgYFVJLkhpZGRlbmAgcGF0aCBleHByZXNzaW9ucyBmb3VuZCBpbiB0aGUgcmVsZXZhbnQgYWN0aW9uc1xuICovXG5mdW5jdGlvbiBnZXRVSUhpZGRlbkV4cEZvckFjdGlvbnNSZXF1aXJpbmdDb250ZXh0KFxuXHRsaW5lSXRlbUFubm90YXRpb246IExpbmVJdGVtLFxuXHRjdXJyZW50RW50aXR5VHlwZTogRW50aXR5VHlwZSxcblx0Y29udGV4dERhdGFNb2RlbE9iamVjdFBhdGg6IERhdGFNb2RlbE9iamVjdFBhdGgsXG5cdGlzRW50aXR5U2V0OiBib29sZWFuXG4pOiBFeHByZXNzaW9uPGJvb2xlYW4+W10ge1xuXHRjb25zdCBhVWlIaWRkZW5QYXRoRXhwcmVzc2lvbnM6IEV4cHJlc3Npb248Ym9vbGVhbj5bXSA9IFtdO1xuXHRsaW5lSXRlbUFubm90YXRpb24uZm9yRWFjaChkYXRhRmllbGQgPT4ge1xuXHRcdC8vIENoZWNrIGlmIHRoZSBsaW5lSXRlbSBjb250ZXh0IGlzIHRoZSBzYW1lIGFzIHRoYXQgb2YgdGhlIGFjdGlvbjpcblx0XHRpZiAoXG5cdFx0XHQoZGF0YUZpZWxkLiRUeXBlID09PSBVSUFubm90YXRpb25UeXBlcy5EYXRhRmllbGRGb3JBY3Rpb24gJiZcblx0XHRcdFx0ZGF0YUZpZWxkPy5BY3Rpb25UYXJnZXQ/LmlzQm91bmQgJiZcblx0XHRcdFx0Y3VycmVudEVudGl0eVR5cGUgPT09IGRhdGFGaWVsZD8uQWN0aW9uVGFyZ2V0LnNvdXJjZUVudGl0eVR5cGUpIHx8XG5cdFx0XHQoZGF0YUZpZWxkLiRUeXBlID09PSBVSUFubm90YXRpb25UeXBlcy5EYXRhRmllbGRGb3JJbnRlbnRCYXNlZE5hdmlnYXRpb24gJiZcblx0XHRcdFx0ZGF0YUZpZWxkLlJlcXVpcmVzQ29udGV4dCAmJlxuXHRcdFx0XHRkYXRhRmllbGQ/LklubGluZT8udmFsdWVPZigpICE9PSB0cnVlKVxuXHRcdCkge1xuXHRcdFx0aWYgKHR5cGVvZiBkYXRhRmllbGQuYW5ub3RhdGlvbnM/LlVJPy5IaWRkZW4/LnZhbHVlT2YoKSA9PT0gXCJvYmplY3RcIikge1xuXHRcdFx0XHRhVWlIaWRkZW5QYXRoRXhwcmVzc2lvbnMucHVzaChcblx0XHRcdFx0XHRlcXVhbChcblx0XHRcdFx0XHRcdGdldEJpbmRpbmdFeHBGcm9tQ29udGV4dChcblx0XHRcdFx0XHRcdFx0ZGF0YUZpZWxkIGFzIERhdGFGaWVsZEZvckFjdGlvbiB8IERhdGFGaWVsZEZvckludGVudEJhc2VkTmF2aWdhdGlvbixcblx0XHRcdFx0XHRcdFx0Y29udGV4dERhdGFNb2RlbE9iamVjdFBhdGgsXG5cdFx0XHRcdFx0XHRcdGlzRW50aXR5U2V0XG5cdFx0XHRcdFx0XHQpLFxuXHRcdFx0XHRcdFx0ZmFsc2Vcblx0XHRcdFx0XHQpXG5cdFx0XHRcdCk7XG5cdFx0XHR9XG5cdFx0fVxuXHR9KTtcblx0cmV0dXJuIGFVaUhpZGRlblBhdGhFeHByZXNzaW9ucztcbn1cblxuLyoqXG4gKiBUaGlzIG1ldGhvZCBpcyB1c2VkIHRvIGNoYW5nZSB0aGUgY29udGV4dCBjdXJyZW50bHkgcmVmZXJlbmNlZCBieSB0aGlzIGJpbmRpbmcgYnkgcmVtb3ZpbmcgdGhlIGxhc3QgbmF2aWdhdGlvbiBwcm9wZXJ0eS5cbiAqXG4gKiBJdCBpcyB1c2VkIChzcGVjaWZpY2FsbHkgaW4gdGhpcyBjYXNlKSwgdG8gdHJhbnNmb3JtIGEgYmluZGluZyBtYWRlIGZvciBhIE5hdlByb3AgY29udGV4dCAvTWFpbk9iamVjdC9OYXZQcm9wMS9OYXZQcm9wMixcbiAqIGludG8gYSBiaW5kaW5nIG9uIHRoZSBwcmV2aW91cyBjb250ZXh0IC9NYWluT2JqZWN0L05hdlByb3AxLlxuICpcbiAqIEBwYXJhbSBzb3VyY2UgRGF0YUZpZWxkRm9yQWN0aW9uIHwgRGF0YUZpZWxkRm9ySW50ZW50QmFzZWROYXZpZ2F0aW9uIHwgQ3VzdG9tQWN0aW9uXG4gKiBAcGFyYW0gY29udGV4dERhdGFNb2RlbE9iamVjdFBhdGggRGF0YU1vZGVsT2JqZWN0UGF0aFxuICogQHBhcmFtIGlzRW50aXR5U2V0XG4gKiBAcmV0dXJucyBUaGUgYmluZGluZyBleHByZXNzaW9uXG4gKi9cbmZ1bmN0aW9uIGdldEJpbmRpbmdFeHBGcm9tQ29udGV4dChcblx0c291cmNlOiBEYXRhRmllbGRGb3JBY3Rpb24gfCBEYXRhRmllbGRGb3JJbnRlbnRCYXNlZE5hdmlnYXRpb24gfCBDdXN0b21BY3Rpb24sXG5cdGNvbnRleHREYXRhTW9kZWxPYmplY3RQYXRoOiBEYXRhTW9kZWxPYmplY3RQYXRoLFxuXHRpc0VudGl0eVNldDogYm9vbGVhblxuKTogRXhwcmVzc2lvbjxhbnk+IHtcblx0bGV0IHNFeHByZXNzaW9uOiBhbnkgfCB1bmRlZmluZWQ7XG5cdGlmIChcblx0XHQoc291cmNlIGFzIERhdGFGaWVsZEZvckFjdGlvbik/LiRUeXBlID09PSBVSUFubm90YXRpb25UeXBlcy5EYXRhRmllbGRGb3JBY3Rpb24gfHxcblx0XHQoc291cmNlIGFzIERhdGFGaWVsZEZvckludGVudEJhc2VkTmF2aWdhdGlvbik/LiRUeXBlID09PSBVSUFubm90YXRpb25UeXBlcy5EYXRhRmllbGRGb3JJbnRlbnRCYXNlZE5hdmlnYXRpb25cblx0KSB7XG5cdFx0c0V4cHJlc3Npb24gPSAoc291cmNlIGFzIERhdGFGaWVsZEZvckFjdGlvbiB8IERhdGFGaWVsZEZvckludGVudEJhc2VkTmF2aWdhdGlvbik/LmFubm90YXRpb25zPy5VST8uSGlkZGVuO1xuXHR9IGVsc2Uge1xuXHRcdHNFeHByZXNzaW9uID0gKHNvdXJjZSBhcyBDdXN0b21BY3Rpb24pPy52aXNpYmxlO1xuXHR9XG5cdGxldCBzUGF0aDogc3RyaW5nO1xuXHRpZiAoc0V4cHJlc3Npb24/LnBhdGgpIHtcblx0XHRzUGF0aCA9IHNFeHByZXNzaW9uLnBhdGg7XG5cdH0gZWxzZSB7XG5cdFx0c1BhdGggPSBzRXhwcmVzc2lvbjtcblx0fVxuXHRpZiAoc1BhdGgpIHtcblx0XHRpZiAoKHNvdXJjZSBhcyBDdXN0b21BY3Rpb24pPy52aXNpYmxlKSB7XG5cdFx0XHRzUGF0aCA9IHNQYXRoLnN1YnN0cmluZygxLCBzUGF0aC5sZW5ndGggLSAxKTtcblx0XHR9XG5cdFx0aWYgKHNQYXRoLmluZGV4T2YoXCIvXCIpID4gMCkge1xuXHRcdFx0Ly9jaGVjayBpZiB0aGUgbmF2aWdhdGlvbiBwcm9wZXJ0eSBpcyBjb3JyZWN0OlxuXHRcdFx0Y29uc3QgYVNwbGl0UGF0aCA9IHNQYXRoLnNwbGl0KFwiL1wiKTtcblx0XHRcdGNvbnN0IHNOYXZpZ2F0aW9uUGF0aCA9IGFTcGxpdFBhdGhbMF07XG5cdFx0XHRpZiAoXG5cdFx0XHRcdGNvbnRleHREYXRhTW9kZWxPYmplY3RQYXRoPy50YXJnZXRPYmplY3Q/Ll90eXBlID09PSBcIk5hdmlnYXRpb25Qcm9wZXJ0eVwiICYmXG5cdFx0XHRcdGNvbnRleHREYXRhTW9kZWxPYmplY3RQYXRoLnRhcmdldE9iamVjdC5wYXJ0bmVyID09PSBzTmF2aWdhdGlvblBhdGhcblx0XHRcdCkge1xuXHRcdFx0XHRyZXR1cm4gYmluZGluZ0V4cHJlc3Npb24oYVNwbGl0UGF0aC5zbGljZSgxKS5qb2luKFwiL1wiKSk7XG5cdFx0XHR9IGVsc2Uge1xuXHRcdFx0XHRyZXR1cm4gY29uc3RhbnQodHJ1ZSk7XG5cdFx0XHR9XG5cdFx0XHQvLyBJbiBjYXNlIHRoZXJlIGlzIG5vIG5hdmlnYXRpb24gcHJvcGVydHksIGlmIGl0J3MgYW4gZW50aXR5U2V0LCB0aGUgZXhwcmVzc2lvbiBiaW5kaW5nIGhhcyB0byBiZSByZXR1cm5lZDpcblx0XHR9IGVsc2UgaWYgKGlzRW50aXR5U2V0KSB7XG5cdFx0XHRyZXR1cm4gYmluZGluZ0V4cHJlc3Npb24oc1BhdGgpO1xuXHRcdFx0Ly8gb3RoZXJ3aXNlIHRoZSBleHByZXNzaW9uIGJpbmRpbmcgY2Fubm90IGJlIHRha2VuIGludG8gYWNjb3VudCBmb3IgdGhlIHNlbGVjdGlvbiBtb2RlIGV2YWx1YXRpb246XG5cdFx0fSBlbHNlIHtcblx0XHRcdHJldHVybiBjb25zdGFudCh0cnVlKTtcblx0XHR9XG5cdH1cblx0cmV0dXJuIGNvbnN0YW50KHRydWUpO1xufVxuXG4vKipcbiAqIExvb3AgdGhyb3VnaCB0aGUgRGF0YUZpZWxkRm9yQWN0aW9uIGFuZCBEYXRhRmllbGRGb3JJbnRlbnRCYXNlZE5hdmlnYXRpb24gb2YgYSBsaW5lIGl0ZW0gYW5kIGNoZWNrXG4gKiBpZiBhdCBsZWFzdCBvbmUgb2YgdGhlbSBpcyBhbHdheXMgdmlzaWJsZSBpbiB0aGUgdGFibGUgdG9vbGJhciAoYW5kIHJlcXVpcmVzIGEgY29udGV4dCkuXG4gKlxuICogQHBhcmFtIGxpbmVJdGVtQW5ub3RhdGlvbiBDb2xsZWN0aW9uIG9mIGRhdGEgZmllbGRzIGZvciByZXByZXNlbnRhdGlvbiBpbiBhIHRhYmxlIG9yIGxpc3RcbiAqIEBwYXJhbSBjdXJyZW50RW50aXR5VHlwZSBDdXJyZW50IEVudGl0eSBUeXBlXG4gKiBAcmV0dXJucyB7Ym9vbGVhbn0gYHRydWVgIGlmIHRoZXJlIGlzIGF0IGxlYXN0IDEgYWN0aW9uIHRoYXQgbWVldHMgdGhlIGNyaXRlcmlhXG4gKi9cbmZ1bmN0aW9uIGhhc0JvdW5kQWN0aW9uc0Fsd2F5c1Zpc2libGVJblRvb2xCYXIobGluZUl0ZW1Bbm5vdGF0aW9uOiBMaW5lSXRlbSwgY3VycmVudEVudGl0eVR5cGU6IEVudGl0eVR5cGUpOiBib29sZWFuIHtcblx0cmV0dXJuIGxpbmVJdGVtQW5ub3RhdGlvbi5zb21lKGRhdGFGaWVsZCA9PiB7XG5cdFx0aWYgKFxuXHRcdFx0KGRhdGFGaWVsZC4kVHlwZSA9PT0gVUlBbm5vdGF0aW9uVHlwZXMuRGF0YUZpZWxkRm9yQWN0aW9uIHx8XG5cdFx0XHRcdGRhdGFGaWVsZC4kVHlwZSA9PT0gVUlBbm5vdGF0aW9uVHlwZXMuRGF0YUZpZWxkRm9ySW50ZW50QmFzZWROYXZpZ2F0aW9uKSAmJlxuXHRcdFx0ZGF0YUZpZWxkPy5JbmxpbmU/LnZhbHVlT2YoKSAhPT0gdHJ1ZSAmJlxuXHRcdFx0KGRhdGFGaWVsZC5hbm5vdGF0aW9ucz8uVUk/LkhpZGRlbj8udmFsdWVPZigpID09PSBmYWxzZSB8fCBkYXRhRmllbGQuYW5ub3RhdGlvbnM/LlVJPy5IaWRkZW4/LnZhbHVlT2YoKSA9PT0gdW5kZWZpbmVkKVxuXHRcdCkge1xuXHRcdFx0aWYgKGRhdGFGaWVsZC4kVHlwZSA9PT0gVUlBbm5vdGF0aW9uVHlwZXMuRGF0YUZpZWxkRm9yQWN0aW9uKSB7XG5cdFx0XHRcdC8vIENoZWNrIGlmIHRoZSBsaW5lSXRlbSBjb250ZXh0IGlzIHRoZSBzYW1lIGFzIHRoYXQgb2YgdGhlIGFjdGlvbjpcblx0XHRcdFx0cmV0dXJuIGRhdGFGaWVsZD8uQWN0aW9uVGFyZ2V0Py5pc0JvdW5kICYmIGN1cnJlbnRFbnRpdHlUeXBlID09PSBkYXRhRmllbGQ/LkFjdGlvblRhcmdldC5zb3VyY2VFbnRpdHlUeXBlO1xuXHRcdFx0fSBlbHNlIGlmIChkYXRhRmllbGQuJFR5cGUgPT09IFVJQW5ub3RhdGlvblR5cGVzLkRhdGFGaWVsZEZvckludGVudEJhc2VkTmF2aWdhdGlvbikge1xuXHRcdFx0XHRyZXR1cm4gZGF0YUZpZWxkLlJlcXVpcmVzQ29udGV4dDtcblx0XHRcdH1cblx0XHR9XG5cdFx0cmV0dXJuIGZhbHNlO1xuXHR9KTtcbn1cblxuZnVuY3Rpb24gaGFzQ3VzdG9tQWN0aW9uc0Fsd2F5c1Zpc2libGVJblRvb2xCYXIobWFuaWZlc3RBY3Rpb25zOiBSZWNvcmQ8c3RyaW5nLCBDdXN0b21BY3Rpb24+KTogYm9vbGVhbiB7XG5cdHJldHVybiBPYmplY3Qua2V5cyhtYW5pZmVzdEFjdGlvbnMpLnNvbWUoYWN0aW9uS2V5ID0+IHtcblx0XHRjb25zdCBhY3Rpb24gPSBtYW5pZmVzdEFjdGlvbnNbYWN0aW9uS2V5XTtcblx0XHRpZiAoYWN0aW9uLnJlcXVpcmVzU2VsZWN0aW9uICYmIGFjdGlvbi52aXNpYmxlPy50b1N0cmluZygpID09PSBcInRydWVcIikge1xuXHRcdFx0cmV0dXJuIHRydWU7XG5cdFx0fVxuXHRcdHJldHVybiBmYWxzZTtcblx0fSk7XG59XG5cbi8qKlxuICogSXRlcmF0ZXMgb3ZlciB0aGUgY3VzdG9tIGFjdGlvbnMgKHdpdGgga2V5IHJlcXVpcmVzU2VsZWN0aW9uKSBkZWNsYXJlZCBpbiB0aGUgbWFuaWZlc3QgZm9yIHRoZSBjdXJyZW50IGxpbmUgaXRlbSBhbmQgcmV0dXJucyBhbGwgdGhlXG4gKiB2aXNpYmxlIGtleSB2YWx1ZXMgYXMgYW4gZXhwcmVzc2lvbi5cbiAqXG4gKiBAcGFyYW0gbWFuaWZlc3RBY3Rpb25zIFRoZSBhY3Rpb25zIGRlZmluZWQgaW4gdGhlIG1hbmlmZXN0XG4gKiBAcmV0dXJucyBBcnJheTxFeHByZXNzaW9uPGJvb2xlYW4+PiBBbGwgdGhlIHZpc2libGUgcGF0aCBleHByZXNzaW9ucyBvZiB0aGUgYWN0aW9ucyB0aGF0IG1lZXQgdGhlIGNyaXRlcmlhXG4gKi9cbmZ1bmN0aW9uIGdldFZpc2libGVFeHBGb3JDdXN0b21BY3Rpb25zUmVxdWlyaW5nQ29udGV4dChtYW5pZmVzdEFjdGlvbnM6IFJlY29yZDxzdHJpbmcsIEN1c3RvbUFjdGlvbj4pOiBFeHByZXNzaW9uPGJvb2xlYW4+W10ge1xuXHRjb25zdCBhVmlzaWJsZVBhdGhFeHByZXNzaW9uczogRXhwcmVzc2lvbjxib29sZWFuPltdID0gW107XG5cdGlmIChtYW5pZmVzdEFjdGlvbnMpIHtcblx0XHRPYmplY3Qua2V5cyhtYW5pZmVzdEFjdGlvbnMpLmZvckVhY2goYWN0aW9uS2V5ID0+IHtcblx0XHRcdGNvbnN0IGFjdGlvbiA9IG1hbmlmZXN0QWN0aW9uc1thY3Rpb25LZXldO1xuXHRcdFx0aWYgKGFjdGlvbi5yZXF1aXJlc1NlbGVjdGlvbiA9PT0gdHJ1ZSAmJiBhY3Rpb24udmlzaWJsZSAhPT0gdW5kZWZpbmVkKSB7XG5cdFx0XHRcdGlmICh0eXBlb2YgYWN0aW9uLnZpc2libGUgPT09IFwic3RyaW5nXCIpIHtcblx0XHRcdFx0XHQvKlRoZSBmaW5hbCBhaW0gd291bGQgYmUgdG8gY2hlY2sgaWYgdGhlIHBhdGggZXhwcmVzc2lvbiBkZXBlbmRzIG9uIHRoZSBwYXJlbnQgY29udGV4dFxuXHRcdFx0XHRcdGFuZCBjb25zaWRlcnMgb25seSB0aG9zZSBleHByZXNzaW9ucyBmb3IgdGhlIGV4cHJlc3Npb24gZXZhbHVhdGlvbixcblx0XHRcdFx0XHRidXQgY3VycmVudGx5IG5vdCBwb3NzaWJsZSBmcm9tIHRoZSBtYW5pZmVzdCBhcyB0aGUgdmlzaWJsZSBrZXkgaXMgYm91bmQgb24gdGhlIHBhcmVudCBlbnRpdHkuXG5cdFx0XHRcdFx0VHJpY2t5IHRvIGRpZmZlcmVudGlhdGUgdGhlIHBhdGggYXMgaXQncyBkb25lIGZvciB0aGUgSGlkZGVuIGFubm90YXRpb24uXG5cdFx0XHRcdFx0Rm9yIHRoZSB0aW1lIGJlaW5nIHdlIGNvbnNpZGVyIGFsbCB0aGUgcGF0aHMgb2YgdGhlIG1hbmlmZXN0Ki9cblxuXHRcdFx0XHRcdGFWaXNpYmxlUGF0aEV4cHJlc3Npb25zLnB1c2gocmVzb2x2ZUJpbmRpbmdTdHJpbmcoYWN0aW9uPy52aXNpYmxlPy52YWx1ZU9mKCkpKTtcblx0XHRcdFx0fVxuXHRcdFx0fVxuXHRcdH0pO1xuXHR9XG5cdHJldHVybiBhVmlzaWJsZVBhdGhFeHByZXNzaW9ucztcbn1cblxuLyoqXG4gKiBFdmFsdWF0ZSBpZiB0aGUgcGF0aCBpcyBzdGF0aWNhbGx5IGRlbGV0YWJsZSBvciB1cGRhdGFibGUuXG4gKlxuICogQHBhcmFtIGNvbnZlcnRlckNvbnRleHRcbiAqIEByZXR1cm5zIHtUYWJsZUNhcGFiaWxpdHlSZXN0cmljdGlvbn0gVGhlIHRhYmxlIGNhcGFiaWxpdGllc1xuICovXG5leHBvcnQgZnVuY3Rpb24gZ2V0Q2FwYWJpbGl0eVJlc3RyaWN0aW9uKGNvbnZlcnRlckNvbnRleHQ6IENvbnZlcnRlckNvbnRleHQpOiBUYWJsZUNhcGFiaWxpdHlSZXN0cmljdGlvbiB7XG5cdGNvbnN0IGlzRGVsZXRhYmxlID0gaXNQYXRoRGVsZXRhYmxlKGNvbnZlcnRlckNvbnRleHQuZ2V0RGF0YU1vZGVsT2JqZWN0UGF0aCgpKTtcblx0Y29uc3QgaXNVcGRhdGFibGUgPSBpc1BhdGhVcGRhdGFibGUoY29udmVydGVyQ29udGV4dC5nZXREYXRhTW9kZWxPYmplY3RQYXRoKCkpO1xuXHRyZXR1cm4ge1xuXHRcdGlzRGVsZXRhYmxlOiAhKGlzQ29uc3RhbnQoaXNEZWxldGFibGUpICYmIGlzRGVsZXRhYmxlLnZhbHVlID09PSBmYWxzZSksXG5cdFx0aXNVcGRhdGFibGU6ICEoaXNDb25zdGFudChpc1VwZGF0YWJsZSkgJiYgaXNVcGRhdGFibGUudmFsdWUgPT09IGZhbHNlKVxuXHR9O1xufVxuXG5leHBvcnQgZnVuY3Rpb24gZ2V0U2VsZWN0aW9uTW9kZShcblx0bGluZUl0ZW1Bbm5vdGF0aW9uOiBMaW5lSXRlbSB8IHVuZGVmaW5lZCxcblx0dmlzdWFsaXphdGlvblBhdGg6IHN0cmluZyxcblx0Y29udmVydGVyQ29udGV4dDogQ29udmVydGVyQ29udGV4dCxcblx0aXNFbnRpdHlTZXQ6IGJvb2xlYW4sXG5cdHRhcmdldENhcGFiaWxpdGllczogVGFibGVDYXBhYmlsaXR5UmVzdHJpY3Rpb24sXG5cdGlzRGVsZXRlQnV0dG9uVmlzaWJsZT86IEV4cHJlc3Npb248Ym9vbGVhbj5cbik6IHN0cmluZyB8IHVuZGVmaW5lZCB7XG5cdGlmICghbGluZUl0ZW1Bbm5vdGF0aW9uKSB7XG5cdFx0cmV0dXJuIFNlbGVjdGlvbk1vZGUuTm9uZTtcblx0fVxuXHRjb25zdCB0YWJsZU1hbmlmZXN0U2V0dGluZ3MgPSBjb252ZXJ0ZXJDb250ZXh0LmdldE1hbmlmZXN0Q29udHJvbENvbmZpZ3VyYXRpb24odmlzdWFsaXphdGlvblBhdGgpO1xuXHRsZXQgc2VsZWN0aW9uTW9kZSA9IHRhYmxlTWFuaWZlc3RTZXR0aW5ncy50YWJsZVNldHRpbmdzPy5zZWxlY3Rpb25Nb2RlO1xuXHRsZXQgYUhpZGRlbkJpbmRpbmdFeHByZXNzaW9uczogRXhwcmVzc2lvbjxib29sZWFuPltdID0gW10sXG5cdFx0YVZpc2libGVCaW5kaW5nRXhwcmVzc2lvbnM6IEV4cHJlc3Npb248Ym9vbGVhbj5bXSA9IFtdO1xuXHRjb25zdCBtYW5pZmVzdEFjdGlvbnMgPSBnZXRBY3Rpb25zRnJvbU1hbmlmZXN0KFxuXHRcdGNvbnZlcnRlckNvbnRleHQuZ2V0TWFuaWZlc3RDb250cm9sQ29uZmlndXJhdGlvbih2aXN1YWxpemF0aW9uUGF0aCkuYWN0aW9ucyxcblx0XHRjb252ZXJ0ZXJDb250ZXh0LFxuXHRcdFtdLFxuXHRcdHVuZGVmaW5lZCxcblx0XHRmYWxzZVxuXHQpO1xuXHRsZXQgaXNQYXJlbnREZWxldGFibGUsIHBhcmVudEVudGl0eVNldERlbGV0YWJsZTtcblx0aWYgKGNvbnZlcnRlckNvbnRleHQuZ2V0VGVtcGxhdGVUeXBlKCkgPT09IFRlbXBsYXRlVHlwZS5PYmplY3RQYWdlKSB7XG5cdFx0aXNQYXJlbnREZWxldGFibGUgPSBpc1BhdGhEZWxldGFibGUoY29udmVydGVyQ29udGV4dC5nZXREYXRhTW9kZWxPYmplY3RQYXRoKCksIHVuZGVmaW5lZCk7XG5cdFx0cGFyZW50RW50aXR5U2V0RGVsZXRhYmxlID0gaXNQYXJlbnREZWxldGFibGUgPyBjb21waWxlQmluZGluZyhpc1BhcmVudERlbGV0YWJsZSwgdHJ1ZSkgOiBpc1BhcmVudERlbGV0YWJsZTtcblx0fVxuXHRpZiAoc2VsZWN0aW9uTW9kZSAmJiBzZWxlY3Rpb25Nb2RlID09PSBTZWxlY3Rpb25Nb2RlLk5vbmUgJiYgaXNEZWxldGVCdXR0b25WaXNpYmxlKSB7XG5cdFx0cmV0dXJuIGNvbXBpbGVCaW5kaW5nKGlmRWxzZShpc0RlbGV0ZUJ1dHRvblZpc2libGUsIGNvbnN0YW50KFwiTXVsdGlcIiksIGNvbnN0YW50KFwiTm9uZVwiKSkpO1xuXHR9XG5cdGlmICghc2VsZWN0aW9uTW9kZSB8fCBzZWxlY3Rpb25Nb2RlID09PSBTZWxlY3Rpb25Nb2RlLkF1dG8pIHtcblx0XHRzZWxlY3Rpb25Nb2RlID0gU2VsZWN0aW9uTW9kZS5NdWx0aTtcblx0fVxuXG5cdGlmIChcblx0XHRoYXNCb3VuZEFjdGlvbnNBbHdheXNWaXNpYmxlSW5Ub29sQmFyKGxpbmVJdGVtQW5ub3RhdGlvbiwgY29udmVydGVyQ29udGV4dC5nZXRFbnRpdHlUeXBlKCkpIHx8XG5cdFx0aGFzQ3VzdG9tQWN0aW9uc0Fsd2F5c1Zpc2libGVJblRvb2xCYXIobWFuaWZlc3RBY3Rpb25zKVxuXHQpIHtcblx0XHRyZXR1cm4gc2VsZWN0aW9uTW9kZTtcblx0fVxuXHRhSGlkZGVuQmluZGluZ0V4cHJlc3Npb25zID0gZ2V0VUlIaWRkZW5FeHBGb3JBY3Rpb25zUmVxdWlyaW5nQ29udGV4dChcblx0XHRsaW5lSXRlbUFubm90YXRpb24sXG5cdFx0Y29udmVydGVyQ29udGV4dC5nZXRFbnRpdHlUeXBlKCksXG5cdFx0Y29udmVydGVyQ29udGV4dC5nZXREYXRhTW9kZWxPYmplY3RQYXRoKCksXG5cdFx0aXNFbnRpdHlTZXRcblx0KTtcblx0YVZpc2libGVCaW5kaW5nRXhwcmVzc2lvbnMgPSBnZXRWaXNpYmxlRXhwRm9yQ3VzdG9tQWN0aW9uc1JlcXVpcmluZ0NvbnRleHQobWFuaWZlc3RBY3Rpb25zKTtcblxuXHQvLyBObyBhY3Rpb24gcmVxdWlyaW5nIGEgY29udGV4dDpcblx0aWYgKGFIaWRkZW5CaW5kaW5nRXhwcmVzc2lvbnMubGVuZ3RoID09PSAwICYmIGFWaXNpYmxlQmluZGluZ0V4cHJlc3Npb25zLmxlbmd0aCA9PT0gMCAmJiBpc0RlbGV0ZUJ1dHRvblZpc2libGUpIHtcblx0XHRpZiAoIWlzRW50aXR5U2V0KSB7XG5cdFx0XHRpZiAodGFyZ2V0Q2FwYWJpbGl0aWVzLmlzRGVsZXRhYmxlIHx8IHBhcmVudEVudGl0eVNldERlbGV0YWJsZSAhPT0gXCJmYWxzZVwiKSB7XG5cdFx0XHRcdHJldHVybiBjb21waWxlQmluZGluZyhcblx0XHRcdFx0XHRpZkVsc2UoXG5cdFx0XHRcdFx0XHRhbmQoZXF1YWwoYmluZGluZ0V4cHJlc3Npb24oXCIvZWRpdE1vZGVcIiwgXCJ1aVwiKSwgXCJFZGl0YWJsZVwiKSwgaXNEZWxldGVCdXR0b25WaXNpYmxlKSxcblx0XHRcdFx0XHRcdGNvbnN0YW50KHNlbGVjdGlvbk1vZGUpLFxuXHRcdFx0XHRcdFx0Y29uc3RhbnQoU2VsZWN0aW9uTW9kZS5Ob25lKVxuXHRcdFx0XHRcdClcblx0XHRcdFx0KTtcblx0XHRcdH0gZWxzZSB7XG5cdFx0XHRcdHJldHVybiBTZWxlY3Rpb25Nb2RlLk5vbmU7XG5cdFx0XHR9XG5cdFx0XHQvLyBFbnRpdHlTZXQgZGVsZXRhYmxlOlxuXHRcdH0gZWxzZSBpZiAodGFyZ2V0Q2FwYWJpbGl0aWVzLmlzRGVsZXRhYmxlICYmIGlzRGVsZXRlQnV0dG9uVmlzaWJsZSkge1xuXHRcdFx0cmV0dXJuIGNvbXBpbGVCaW5kaW5nKGlmRWxzZShpc0RlbGV0ZUJ1dHRvblZpc2libGUsIGNvbnN0YW50KHNlbGVjdGlvbk1vZGUpLCBjb25zdGFudChcIk5vbmVcIikpKTtcblx0XHRcdC8vIEVudGl0eVNldCBub3QgZGVsZXRhYmxlOlxuXHRcdH0gZWxzZSB7XG5cdFx0XHRyZXR1cm4gU2VsZWN0aW9uTW9kZS5Ob25lO1xuXHRcdH1cblx0XHQvLyBUaGVyZSBhcmUgYWN0aW9ucyByZXF1aXJpbmcgYSBjb250ZXh0OlxuXHR9IGVsc2UgaWYgKCFpc0VudGl0eVNldCkge1xuXHRcdGlmICh0YXJnZXRDYXBhYmlsaXRpZXMuaXNEZWxldGFibGUgfHwgcGFyZW50RW50aXR5U2V0RGVsZXRhYmxlICE9PSBcImZhbHNlXCIpIHtcblx0XHRcdHJldHVybiBjb21waWxlQmluZGluZyhcblx0XHRcdFx0aWZFbHNlKFxuXHRcdFx0XHRcdGVxdWFsKGJpbmRpbmdFeHByZXNzaW9uKFwiL2VkaXRNb2RlXCIsIFwidWlcIiksIFwiRWRpdGFibGVcIiksXG5cdFx0XHRcdFx0Y29uc3RhbnQoc2VsZWN0aW9uTW9kZSksXG5cdFx0XHRcdFx0aWZFbHNlKFxuXHRcdFx0XHRcdFx0b3IoLi4uYUhpZGRlbkJpbmRpbmdFeHByZXNzaW9ucy5jb25jYXQoYVZpc2libGVCaW5kaW5nRXhwcmVzc2lvbnMpKSxcblx0XHRcdFx0XHRcdGNvbnN0YW50KHNlbGVjdGlvbk1vZGUpLFxuXHRcdFx0XHRcdFx0Y29uc3RhbnQoU2VsZWN0aW9uTW9kZS5Ob25lKVxuXHRcdFx0XHRcdClcblx0XHRcdFx0KVxuXHRcdFx0KTtcblx0XHR9IGVsc2Uge1xuXHRcdFx0cmV0dXJuIGNvbXBpbGVCaW5kaW5nKFxuXHRcdFx0XHRpZkVsc2UoXG5cdFx0XHRcdFx0b3IoLi4uYUhpZGRlbkJpbmRpbmdFeHByZXNzaW9ucy5jb25jYXQoYVZpc2libGVCaW5kaW5nRXhwcmVzc2lvbnMpKSxcblx0XHRcdFx0XHRjb25zdGFudChzZWxlY3Rpb25Nb2RlKSxcblx0XHRcdFx0XHRjb25zdGFudChTZWxlY3Rpb25Nb2RlLk5vbmUpXG5cdFx0XHRcdClcblx0XHRcdCk7XG5cdFx0fVxuXHRcdC8vRW50aXR5U2V0IGRlbGV0YWJsZTpcblx0fSBlbHNlIGlmICh0YXJnZXRDYXBhYmlsaXRpZXMuaXNEZWxldGFibGUpIHtcblx0XHRyZXR1cm4gU2VsZWN0aW9uTW9kZS5NdWx0aTtcblx0XHQvL0VudGl0eVNldCBub3QgZGVsZXRhYmxlOlxuXHR9IGVsc2Uge1xuXHRcdHJldHVybiBjb21waWxlQmluZGluZyhcblx0XHRcdGlmRWxzZShcblx0XHRcdFx0b3IoLi4uYUhpZGRlbkJpbmRpbmdFeHByZXNzaW9ucy5jb25jYXQoYVZpc2libGVCaW5kaW5nRXhwcmVzc2lvbnMpKSxcblx0XHRcdFx0Y29uc3RhbnQoc2VsZWN0aW9uTW9kZSksXG5cdFx0XHRcdGNvbnN0YW50KFNlbGVjdGlvbk1vZGUuTm9uZSlcblx0XHRcdClcblx0XHQpO1xuXHR9XG59XG5cbi8qKlxuICogTWV0aG9kIHRvIHJldHJpZXZlIGFsbCB0YWJsZSBhY3Rpb25zIGZyb20gYW5ub3RhdGlvbnMuXG4gKlxuICogQHBhcmFtIGxpbmVJdGVtQW5ub3RhdGlvblxuICogQHBhcmFtIHZpc3VhbGl6YXRpb25QYXRoXG4gKiBAcGFyYW0gY29udmVydGVyQ29udGV4dFxuICogQHJldHVybnMge1JlY29yZDxCYXNlQWN0aW9uLCBCYXNlQWN0aW9uPn0gVGhlIHRhYmxlIGFubm90YXRpb24gYWN0aW9uc1xuICovXG5mdW5jdGlvbiBnZXRUYWJsZUFubm90YXRpb25BY3Rpb25zKGxpbmVJdGVtQW5ub3RhdGlvbjogTGluZUl0ZW0sIHZpc3VhbGl6YXRpb25QYXRoOiBzdHJpbmcsIGNvbnZlcnRlckNvbnRleHQ6IENvbnZlcnRlckNvbnRleHQpIHtcblx0Y29uc3QgdGFibGVBY3Rpb25zOiBCYXNlQWN0aW9uW10gPSBbXTtcblx0Y29uc3QgaGlkZGVuVGFibGVBY3Rpb25zOiBCYXNlQWN0aW9uW10gPSBbXTtcblx0aWYgKGxpbmVJdGVtQW5ub3RhdGlvbikge1xuXHRcdGxpbmVJdGVtQW5ub3RhdGlvbi5mb3JFYWNoKChkYXRhRmllbGQ6IERhdGFGaWVsZEFic3RyYWN0VHlwZXMpID0+IHtcblx0XHRcdGxldCB0YWJsZUFjdGlvbjogQW5ub3RhdGlvbkFjdGlvbiB8IHVuZGVmaW5lZDtcblx0XHRcdGlmIChcblx0XHRcdFx0aXNEYXRhRmllbGRGb3JBY3Rpb25BYnN0cmFjdChkYXRhRmllbGQpICYmXG5cdFx0XHRcdCEoZGF0YUZpZWxkLmFubm90YXRpb25zPy5VST8uSGlkZGVuPy52YWx1ZU9mKCkgPT09IHRydWUpICYmXG5cdFx0XHRcdCFkYXRhRmllbGQuSW5saW5lICYmXG5cdFx0XHRcdCFkYXRhRmllbGQuRGV0ZXJtaW5pbmdcblx0XHRcdCkge1xuXHRcdFx0XHRjb25zdCBrZXkgPSBLZXlIZWxwZXIuZ2VuZXJhdGVLZXlGcm9tRGF0YUZpZWxkKGRhdGFGaWVsZCk7XG5cdFx0XHRcdHN3aXRjaCAoZGF0YUZpZWxkLiRUeXBlKSB7XG5cdFx0XHRcdFx0Y2FzZSBcImNvbS5zYXAudm9jYWJ1bGFyaWVzLlVJLnYxLkRhdGFGaWVsZEZvckFjdGlvblwiOlxuXHRcdFx0XHRcdFx0dGFibGVBY3Rpb24gPSB7XG5cdFx0XHRcdFx0XHRcdHR5cGU6IEFjdGlvblR5cGUuRGF0YUZpZWxkRm9yQWN0aW9uLFxuXHRcdFx0XHRcdFx0XHRhbm5vdGF0aW9uUGF0aDogY29udmVydGVyQ29udGV4dC5nZXRFbnRpdHlTZXRCYXNlZEFubm90YXRpb25QYXRoKGRhdGFGaWVsZC5mdWxseVF1YWxpZmllZE5hbWUpLFxuXHRcdFx0XHRcdFx0XHRrZXk6IGtleSxcblx0XHRcdFx0XHRcdFx0dmlzaWJsZTogY29tcGlsZUJpbmRpbmcoXG5cdFx0XHRcdFx0XHRcdFx0bm90KFxuXHRcdFx0XHRcdFx0XHRcdFx0ZXF1YWwoXG5cdFx0XHRcdFx0XHRcdFx0XHRcdGFubm90YXRpb25FeHByZXNzaW9uKFxuXHRcdFx0XHRcdFx0XHRcdFx0XHRcdGRhdGFGaWVsZC5hbm5vdGF0aW9ucz8uVUk/LkhpZGRlbixcblx0XHRcdFx0XHRcdFx0XHRcdFx0XHRbXSxcblx0XHRcdFx0XHRcdFx0XHRcdFx0XHR1bmRlZmluZWQsXG5cdFx0XHRcdFx0XHRcdFx0XHRcdFx0Y29udmVydGVyQ29udGV4dC5nZXRSZWxhdGl2ZU1vZGVsUGF0aEZ1bmN0aW9uKClcblx0XHRcdFx0XHRcdFx0XHRcdFx0KSxcblx0XHRcdFx0XHRcdFx0XHRcdFx0dHJ1ZVxuXHRcdFx0XHRcdFx0XHRcdFx0KVxuXHRcdFx0XHRcdFx0XHRcdClcblx0XHRcdFx0XHRcdFx0KSxcblx0XHRcdFx0XHRcdFx0aXNOYXZpZ2FibGU6IHRydWVcblx0XHRcdFx0XHRcdH07XG5cdFx0XHRcdFx0XHRicmVhaztcblxuXHRcdFx0XHRcdGNhc2UgXCJjb20uc2FwLnZvY2FidWxhcmllcy5VSS52MS5EYXRhRmllbGRGb3JJbnRlbnRCYXNlZE5hdmlnYXRpb25cIjpcblx0XHRcdFx0XHRcdHRhYmxlQWN0aW9uID0ge1xuXHRcdFx0XHRcdFx0XHR0eXBlOiBBY3Rpb25UeXBlLkRhdGFGaWVsZEZvckludGVudEJhc2VkTmF2aWdhdGlvbixcblx0XHRcdFx0XHRcdFx0YW5ub3RhdGlvblBhdGg6IGNvbnZlcnRlckNvbnRleHQuZ2V0RW50aXR5U2V0QmFzZWRBbm5vdGF0aW9uUGF0aChkYXRhRmllbGQuZnVsbHlRdWFsaWZpZWROYW1lKSxcblx0XHRcdFx0XHRcdFx0a2V5OiBrZXksXG5cdFx0XHRcdFx0XHRcdHZpc2libGU6IGNvbXBpbGVCaW5kaW5nKFxuXHRcdFx0XHRcdFx0XHRcdG5vdChcblx0XHRcdFx0XHRcdFx0XHRcdGVxdWFsKFxuXHRcdFx0XHRcdFx0XHRcdFx0XHRhbm5vdGF0aW9uRXhwcmVzc2lvbihcblx0XHRcdFx0XHRcdFx0XHRcdFx0XHRkYXRhRmllbGQuYW5ub3RhdGlvbnM/LlVJPy5IaWRkZW4sXG5cdFx0XHRcdFx0XHRcdFx0XHRcdFx0W10sXG5cdFx0XHRcdFx0XHRcdFx0XHRcdFx0dW5kZWZpbmVkLFxuXHRcdFx0XHRcdFx0XHRcdFx0XHRcdGNvbnZlcnRlckNvbnRleHQuZ2V0UmVsYXRpdmVNb2RlbFBhdGhGdW5jdGlvbigpXG5cdFx0XHRcdFx0XHRcdFx0XHRcdCksXG5cdFx0XHRcdFx0XHRcdFx0XHRcdHRydWVcblx0XHRcdFx0XHRcdFx0XHRcdClcblx0XHRcdFx0XHRcdFx0XHQpXG5cdFx0XHRcdFx0XHRcdClcblx0XHRcdFx0XHRcdH07XG5cdFx0XHRcdFx0XHRicmVhaztcblx0XHRcdFx0XHRkZWZhdWx0OlxuXHRcdFx0XHRcdFx0YnJlYWs7XG5cdFx0XHRcdH1cblx0XHRcdH0gZWxzZSBpZiAoZGF0YUZpZWxkLmFubm90YXRpb25zPy5VST8uSGlkZGVuPy52YWx1ZU9mKCkgPT09IHRydWUpIHtcblx0XHRcdFx0aGlkZGVuVGFibGVBY3Rpb25zLnB1c2goe1xuXHRcdFx0XHRcdHR5cGU6IEFjdGlvblR5cGUuRGVmYXVsdCxcblx0XHRcdFx0XHRrZXk6IEtleUhlbHBlci5nZW5lcmF0ZUtleUZyb21EYXRhRmllbGQoZGF0YUZpZWxkKVxuXHRcdFx0XHR9KTtcblx0XHRcdH1cblx0XHRcdGlmICh0YWJsZUFjdGlvbikge1xuXHRcdFx0XHR0YWJsZUFjdGlvbnMucHVzaCh0YWJsZUFjdGlvbik7XG5cdFx0XHR9XG5cdFx0fSk7XG5cdH1cblx0cmV0dXJuIHtcblx0XHR0YWJsZUFjdGlvbnM6IHRhYmxlQWN0aW9ucyxcblx0XHRoaWRkZW5UYWJsZUFjdGlvbnM6IGhpZGRlblRhYmxlQWN0aW9uc1xuXHR9O1xufVxuXG5mdW5jdGlvbiBnZXRIaWdobGlnaHRSb3dCaW5kaW5nKFxuXHRjcml0aWNhbGl0eUFubm90YXRpb246IFBhdGhBbm5vdGF0aW9uRXhwcmVzc2lvbjxDcml0aWNhbGl0eVR5cGU+IHwgRW51bVZhbHVlPENyaXRpY2FsaXR5VHlwZT4gfCB1bmRlZmluZWQsXG5cdGlzRHJhZnRSb290OiBib29sZWFuLFxuXHR0YXJnZXRFbnRpdHlUeXBlPzogRW50aXR5VHlwZVxuKTogRXhwcmVzc2lvbjxNZXNzYWdlVHlwZT4ge1xuXHRsZXQgZGVmYXVsdEhpZ2hsaWdodFJvd0RlZmluaXRpb246IE1lc3NhZ2VUeXBlIHwgRXhwcmVzc2lvbjxNZXNzYWdlVHlwZT4gPSBNZXNzYWdlVHlwZS5Ob25lO1xuXHRpZiAoY3JpdGljYWxpdHlBbm5vdGF0aW9uKSB7XG5cdFx0aWYgKHR5cGVvZiBjcml0aWNhbGl0eUFubm90YXRpb24gPT09IFwib2JqZWN0XCIpIHtcblx0XHRcdGRlZmF1bHRIaWdobGlnaHRSb3dEZWZpbml0aW9uID0gYW5ub3RhdGlvbkV4cHJlc3Npb24oY3JpdGljYWxpdHlBbm5vdGF0aW9uKSBhcyBFeHByZXNzaW9uPE1lc3NhZ2VUeXBlPjtcblx0XHR9IGVsc2Uge1xuXHRcdFx0Ly8gRW51bSBWYWx1ZSBzbyB3ZSBnZXQgdGhlIGNvcnJlc3BvbmRpbmcgc3RhdGljIHBhcnRcblx0XHRcdGRlZmF1bHRIaWdobGlnaHRSb3dEZWZpbml0aW9uID0gZ2V0TWVzc2FnZVR5cGVGcm9tQ3JpdGljYWxpdHlUeXBlKGNyaXRpY2FsaXR5QW5ub3RhdGlvbik7XG5cdFx0fVxuXHR9XG5cdHJldHVybiBpZkVsc2UoXG5cdFx0aXNEcmFmdFJvb3QgJiYgRHJhZnQuSXNOZXdPYmplY3QsXG5cdFx0TWVzc2FnZVR5cGUuSW5mb3JtYXRpb24gYXMgTWVzc2FnZVR5cGUsXG5cdFx0Zm9ybWF0UmVzdWx0KFxuXHRcdFx0W2RlZmF1bHRIaWdobGlnaHRSb3dEZWZpbml0aW9uLCBiaW5kaW5nRXhwcmVzc2lvbihgZmlsdGVyZWRNZXNzYWdlc2AsIFwiaW50ZXJuYWxcIildLFxuXHRcdFx0dGFibGVGb3JtYXR0ZXJzLnJvd0hpZ2hsaWdodGluZyxcblx0XHRcdHRhcmdldEVudGl0eVR5cGVcblx0XHQpXG5cdCk7XG59XG5cbmZ1bmN0aW9uIF9nZXRDcmVhdGlvbkJlaGF2aW91cihcblx0bGluZUl0ZW1Bbm5vdGF0aW9uOiBMaW5lSXRlbSB8IHVuZGVmaW5lZCxcblx0dGFibGVNYW5pZmVzdENvbmZpZ3VyYXRpb246IFRhYmxlQ29udHJvbENvbmZpZ3VyYXRpb24sXG5cdGNvbnZlcnRlckNvbnRleHQ6IENvbnZlcnRlckNvbnRleHQsXG5cdG5hdmlnYXRpb25TZXR0aW5nczogTmF2aWdhdGlvblNldHRpbmdzQ29uZmlndXJhdGlvblxuKTogVGFibGVBbm5vdGF0aW9uQ29uZmlndXJhdGlvbltcImNyZWF0ZVwiXSB7XG5cdGNvbnN0IG5hdmlnYXRpb24gPSBuYXZpZ2F0aW9uU2V0dGluZ3M/LmNyZWF0ZSB8fCBuYXZpZ2F0aW9uU2V0dGluZ3M/LmRldGFpbDtcblxuXHQvLyBjcm9zcy1hcHBcblx0aWYgKGlzRXh0ZXJuYWxDcmVhdGVDb25maWd1cmVkKG5hdmlnYXRpb25TZXR0aW5ncykgJiYgbmF2aWdhdGlvbikge1xuXHRcdHJldHVybiB7XG5cdFx0XHRtb2RlOiBcIkV4dGVybmFsXCIsXG5cdFx0XHRvdXRib3VuZDogbmF2aWdhdGlvbi5vdXRib3VuZCBhcyBzdHJpbmcsXG5cdFx0XHRvdXRib3VuZERldGFpbDogbmF2aWdhdGlvbi5vdXRib3VuZERldGFpbCxcblx0XHRcdG5hdmlnYXRpb25TZXR0aW5nczogbmF2aWdhdGlvblNldHRpbmdzXG5cdFx0fTtcblx0fVxuXG5cdGxldCBuZXdBY3Rpb247XG5cdGlmIChsaW5lSXRlbUFubm90YXRpb24pIHtcblx0XHQvLyBpbi1hcHBcblx0XHRjb25zdCB0YXJnZXRBbm5vdGF0aW9ucyA9IGNvbnZlcnRlckNvbnRleHQuZ2V0RW50aXR5U2V0KCk/LmFubm90YXRpb25zO1xuXHRcdG5ld0FjdGlvbiA9IHRhcmdldEFubm90YXRpb25zPy5Db21tb24/LkRyYWZ0Um9vdD8uTmV3QWN0aW9uIHx8IHRhcmdldEFubm90YXRpb25zPy5TZXNzaW9uPy5TdGlja3lTZXNzaW9uU3VwcG9ydGVkPy5OZXdBY3Rpb247IC8vIFRPRE86IElzIHRoZXJlIHJlYWxseSBubyAnTmV3QWN0aW9uJyBvbiBEcmFmdE5vZGU/IHRhcmdldEFubm90YXRpb25zPy5Db21tb24/LkRyYWZ0Tm9kZT8uTmV3QWN0aW9uXG5cblx0XHRpZiAodGFibGVNYW5pZmVzdENvbmZpZ3VyYXRpb24uY3JlYXRpb25Nb2RlID09PSBDcmVhdGlvbk1vZGUuQ3JlYXRpb25Sb3cgJiYgbmV3QWN0aW9uKSB7XG5cdFx0XHQvLyBBIGNvbWJpbmF0aW9uIG9mICdDcmVhdGlvblJvdycgYW5kICdOZXdBY3Rpb24nIGRvZXMgbm90IG1ha2Ugc2Vuc2Vcblx0XHRcdC8vIFRPRE86IE9yIGRvZXMgaXQ/XG5cdFx0XHR0aHJvdyBFcnJvcihgQ3JlYXRpb24gbW9kZSAnJHtDcmVhdGlvbk1vZGUuQ3JlYXRpb25Sb3d9JyBjYW4gbm90IGJlIHVzZWQgd2l0aCBhIGN1c3RvbSAnbmV3JyBhY3Rpb24gKCR7bmV3QWN0aW9ufSlgKTtcblx0XHR9XG5cdFx0aWYgKG5hdmlnYXRpb24/LnJvdXRlKSB7XG5cdFx0XHQvLyByb3V0ZSBzcGVjaWZpZWRcblx0XHRcdHJldHVybiB7XG5cdFx0XHRcdG1vZGU6IHRhYmxlTWFuaWZlc3RDb25maWd1cmF0aW9uLmNyZWF0aW9uTW9kZSxcblx0XHRcdFx0YXBwZW5kOiB0YWJsZU1hbmlmZXN0Q29uZmlndXJhdGlvbi5jcmVhdGVBdEVuZCxcblx0XHRcdFx0bmV3QWN0aW9uOiBuZXdBY3Rpb24/LnRvU3RyaW5nKCksXG5cdFx0XHRcdG5hdmlnYXRlVG9UYXJnZXQ6IHRhYmxlTWFuaWZlc3RDb25maWd1cmF0aW9uLmNyZWF0aW9uTW9kZSA9PT0gQ3JlYXRpb25Nb2RlLk5ld1BhZ2UgPyBuYXZpZ2F0aW9uLnJvdXRlIDogdW5kZWZpbmVkIC8vIG5hdmlnYXRlIG9ubHkgaW4gTmV3UGFnZSBtb2RlXG5cdFx0XHR9O1xuXHRcdH1cblx0fVxuXG5cdC8vIG5vIG5hdmlnYXRpb24gb3Igbm8gcm91dGUgc3BlY2lmaWVkIC0gZmFsbGJhY2sgdG8gaW5saW5lIGNyZWF0ZSBpZiBvcmlnaW5hbCBjcmVhdGlvbiBtb2RlIHdhcyAnTmV3UGFnZSdcblx0aWYgKHRhYmxlTWFuaWZlc3RDb25maWd1cmF0aW9uLmNyZWF0aW9uTW9kZSA9PT0gQ3JlYXRpb25Nb2RlLk5ld1BhZ2UpIHtcblx0XHR0YWJsZU1hbmlmZXN0Q29uZmlndXJhdGlvbi5jcmVhdGlvbk1vZGUgPSBDcmVhdGlvbk1vZGUuSW5saW5lO1xuXHR9XG5cblx0cmV0dXJuIHtcblx0XHRtb2RlOiB0YWJsZU1hbmlmZXN0Q29uZmlndXJhdGlvbi5jcmVhdGlvbk1vZGUsXG5cdFx0YXBwZW5kOiB0YWJsZU1hbmlmZXN0Q29uZmlndXJhdGlvbi5jcmVhdGVBdEVuZCxcblx0XHRuZXdBY3Rpb246IG5ld0FjdGlvbj8udG9TdHJpbmcoKVxuXHR9O1xufVxuXG5jb25zdCBfZ2V0Um93Q29uZmlndXJhdGlvblByb3BlcnR5ID0gZnVuY3Rpb24oXG5cdGxpbmVJdGVtQW5ub3RhdGlvbjogTGluZUl0ZW0gfCB1bmRlZmluZWQsXG5cdHZpc3VhbGl6YXRpb25QYXRoOiBzdHJpbmcsXG5cdGNvbnZlcnRlckNvbnRleHQ6IENvbnZlcnRlckNvbnRleHQsXG5cdG5hdmlnYXRpb25TZXR0aW5nczogTmF2aWdhdGlvblNldHRpbmdzQ29uZmlndXJhdGlvbixcblx0dGFyZ2V0UGF0aDogc3RyaW5nXG4pIHtcblx0bGV0IHByZXNzUHJvcGVydHksIG5hdmlnYXRpb25UYXJnZXQ7XG5cdGxldCBjcml0aWNhbGl0eVByb3BlcnR5OiBFeHByZXNzaW9uT3JQcmltaXRpdmU8TWVzc2FnZVR5cGU+ID0gTWVzc2FnZVR5cGUuTm9uZTtcblx0Y29uc3QgdGFyZ2V0RW50aXR5VHlwZSA9IGNvbnZlcnRlckNvbnRleHQuZ2V0RW50aXR5VHlwZSgpO1xuXHRpZiAobmF2aWdhdGlvblNldHRpbmdzICYmIGxpbmVJdGVtQW5ub3RhdGlvbikge1xuXHRcdG5hdmlnYXRpb25UYXJnZXQgPSBuYXZpZ2F0aW9uU2V0dGluZ3MuZGlzcGxheT8udGFyZ2V0IHx8IG5hdmlnYXRpb25TZXR0aW5ncy5kZXRhaWw/Lm91dGJvdW5kO1xuXHRcdGlmIChuYXZpZ2F0aW9uVGFyZ2V0KSB7XG5cdFx0XHRwcmVzc1Byb3BlcnR5ID1cblx0XHRcdFx0XCIuaGFuZGxlcnMub25DaGV2cm9uUHJlc3NOYXZpZ2F0ZU91dEJvdW5kKCAkY29udHJvbGxlciAsJ1wiICsgbmF2aWdhdGlvblRhcmdldCArIFwiJywgJHskcGFyYW1ldGVycz5iaW5kaW5nQ29udGV4dH0pXCI7XG5cdFx0fSBlbHNlIGlmICh0YXJnZXRFbnRpdHlUeXBlKSB7XG5cdFx0XHRjb25zdCB0YXJnZXRFbnRpdHlTZXQgPSBjb252ZXJ0ZXJDb250ZXh0LmdldEVudGl0eVNldCgpO1xuXHRcdFx0bmF2aWdhdGlvblRhcmdldCA9IG5hdmlnYXRpb25TZXR0aW5ncy5kZXRhaWw/LnJvdXRlO1xuXHRcdFx0aWYgKG5hdmlnYXRpb25UYXJnZXQpIHtcblx0XHRcdFx0Y3JpdGljYWxpdHlQcm9wZXJ0eSA9IGdldEhpZ2hsaWdodFJvd0JpbmRpbmcoXG5cdFx0XHRcdFx0bGluZUl0ZW1Bbm5vdGF0aW9uLmFubm90YXRpb25zPy5VST8uQ3JpdGljYWxpdHksXG5cdFx0XHRcdFx0ISF0YXJnZXRFbnRpdHlTZXQ/LmFubm90YXRpb25zPy5Db21tb24/LkRyYWZ0Um9vdCB8fCAhIXRhcmdldEVudGl0eVNldD8uYW5ub3RhdGlvbnM/LkNvbW1vbj8uRHJhZnROb2RlLFxuXHRcdFx0XHRcdHRhcmdldEVudGl0eVR5cGVcblx0XHRcdFx0KTtcblx0XHRcdFx0cHJlc3NQcm9wZXJ0eSA9XG5cdFx0XHRcdFx0XCJBUEkub25UYWJsZVJvd1ByZXNzKCRldmVudCwgJGNvbnRyb2xsZXIsICR7JHBhcmFtZXRlcnM+YmluZGluZ0NvbnRleHR9LCB7IGNhbGxFeHRlbnNpb246IHRydWUsIHRhcmdldFBhdGg6ICdcIiArXG5cdFx0XHRcdFx0dGFyZ2V0UGF0aCArXG5cdFx0XHRcdFx0XCInLCBlZGl0YWJsZSA6IFwiICtcblx0XHRcdFx0XHQodGFyZ2V0RW50aXR5U2V0Py5hbm5vdGF0aW9ucz8uQ29tbW9uPy5EcmFmdFJvb3QgfHwgdGFyZ2V0RW50aXR5U2V0Py5hbm5vdGF0aW9ucz8uQ29tbW9uPy5EcmFmdE5vZGVcblx0XHRcdFx0XHRcdD8gXCIhJHskcGFyYW1ldGVycz5iaW5kaW5nQ29udGV4dH0uZ2V0UHJvcGVydHkoJ0lzQWN0aXZlRW50aXR5JylcIlxuXHRcdFx0XHRcdFx0OiBcInVuZGVmaW5lZFwiKSArXG5cdFx0XHRcdFx0XCJ9KVwiOyAvL05lZWQgdG8gYWNjZXNzIHRvIERyYWZ0Um9vdCBhbmQgRHJhZnROb2RlICEhISEhISFcblx0XHRcdH0gZWxzZSB7XG5cdFx0XHRcdGNyaXRpY2FsaXR5UHJvcGVydHkgPSBnZXRIaWdobGlnaHRSb3dCaW5kaW5nKGxpbmVJdGVtQW5ub3RhdGlvbi5hbm5vdGF0aW9ucz8uVUk/LkNyaXRpY2FsaXR5LCBmYWxzZSwgdGFyZ2V0RW50aXR5VHlwZSk7XG5cdFx0XHR9XG5cdFx0fVxuXHR9XG5cdGNvbnN0IHJvd05hdmlnYXRlZEV4cHJlc3Npb246IEV4cHJlc3Npb248Ym9vbGVhbj4gPSBmb3JtYXRSZXN1bHQoXG5cdFx0W2JpbmRpbmdFeHByZXNzaW9uKFwiL2RlZXBlc3RQYXRoXCIsIFwiaW50ZXJuYWxcIildLFxuXHRcdHRhYmxlRm9ybWF0dGVycy5uYXZpZ2F0ZWRSb3csXG5cdFx0dGFyZ2V0RW50aXR5VHlwZVxuXHQpO1xuXHRyZXR1cm4ge1xuXHRcdHByZXNzOiBwcmVzc1Byb3BlcnR5LFxuXHRcdGFjdGlvbjogcHJlc3NQcm9wZXJ0eSA/IFwiTmF2aWdhdGlvblwiIDogdW5kZWZpbmVkLFxuXHRcdHJvd0hpZ2hsaWdodGluZzogY29tcGlsZUJpbmRpbmcoY3JpdGljYWxpdHlQcm9wZXJ0eSksXG5cdFx0cm93TmF2aWdhdGVkOiBjb21waWxlQmluZGluZyhyb3dOYXZpZ2F0ZWRFeHByZXNzaW9uKVxuXHR9O1xufTtcblxuLyoqXG4gKiBSZXRyaWV2ZSB0aGUgY29sdW1ucyBmcm9tIHRoZSBlbnRpdHlUeXBlLlxuICpcbiAqIEBwYXJhbSBjb2x1bW5zVG9CZUNyZWF0ZWQgVGhlIGNvbHVtbnMgdG8gYmUgY3JlYXRlZC5cbiAqIEBwYXJhbSBlbnRpdHlUeXBlIFRoZSB0YXJnZXQgZW50aXR5IHR5cGUuXG4gKiBAcGFyYW0gYW5ub3RhdGlvbkNvbHVtbnMgVGhlIGFycmF5IG9mIGNvbHVtbnMgY3JlYXRlZCBiYXNlZCBvbiBMaW5lSXRlbSBhbm5vdGF0aW9ucy5cbiAqIEBwYXJhbSBub25Tb3J0YWJsZUNvbHVtbnMgVGhlIGFycmF5IG9mIGFsbCBub24gc29ydGFibGUgY29sdW1uIG5hbWVzLlxuICogQHBhcmFtIGNvbnZlcnRlckNvbnRleHQgVGhlIGNvbnZlcnRlciBjb250ZXh0LlxuICogQHBhcmFtIHRhYmxlVHlwZSBUaGUgdGFibGUgdHlwZS5cbiAqIEByZXR1cm5zIHtBbm5vdGF0aW9uVGFibGVDb2x1bW5bXX0gVGhlIGNvbHVtbiBmcm9tIHRoZSBlbnRpdHlUeXBlXG4gKi9cbmV4cG9ydCBjb25zdCBnZXRDb2x1bW5zRnJvbUVudGl0eVR5cGUgPSBmdW5jdGlvbihcblx0Y29sdW1uc1RvQmVDcmVhdGVkOiBSZWNvcmQ8c3RyaW5nLCBQcm9wZXJ0eT4sXG5cdGVudGl0eVR5cGU6IEVudGl0eVR5cGUsXG5cdGFubm90YXRpb25Db2x1bW5zOiBBbm5vdGF0aW9uVGFibGVDb2x1bW5bXSA9IFtdLFxuXHRub25Tb3J0YWJsZUNvbHVtbnM6IHN0cmluZ1tdLFxuXHRjb252ZXJ0ZXJDb250ZXh0OiBDb252ZXJ0ZXJDb250ZXh0LFxuXHR0YWJsZVR5cGU6IFRhYmxlVHlwZVxuKTogQW5ub3RhdGlvblRhYmxlQ29sdW1uW10ge1xuXHRjb25zdCB0YWJsZUNvbHVtbnM6IEFubm90YXRpb25UYWJsZUNvbHVtbltdID0gW107XG5cdC8vIENhdGNoIGFscmVhZHkgZXhpc3RpbmcgY29sdW1ucyAtIHdoaWNoIHdlcmUgYWRkZWQgYmVmb3JlIGJ5IExpbmVJdGVtIEFubm90YXRpb25zXG5cdGNvbnN0IGFnZ3JlZ2F0aW9uSGVscGVyID0gbmV3IEFnZ3JlZ2F0aW9uSGVscGVyKGVudGl0eVR5cGUsIGNvbnZlcnRlckNvbnRleHQpO1xuXG5cdGVudGl0eVR5cGUuZW50aXR5UHJvcGVydGllcy5mb3JFYWNoKChwcm9wZXJ0eTogUHJvcGVydHkpID0+IHtcblx0XHQvLyBDYXRjaCBhbHJlYWR5IGV4aXN0aW5nIGNvbHVtbnMgLSB3aGljaCB3ZXJlIGFkZGVkIGJlZm9yZSBieSBMaW5lSXRlbSBBbm5vdGF0aW9uc1xuXHRcdGNvbnN0IGV4aXN0cyA9IGFubm90YXRpb25Db2x1bW5zLnNvbWUoY29sdW1uID0+IHtcblx0XHRcdHJldHVybiBjb2x1bW4ubmFtZSA9PT0gcHJvcGVydHkubmFtZTtcblx0XHR9KTtcblxuXHRcdC8vIGlmIHRhcmdldCB0eXBlIGV4aXN0cywgaXQgaXMgYSBjb21wbGV4IHByb3BlcnR5IGFuZCBzaG91bGQgYmUgaWdub3JlZFxuXHRcdGlmICghcHJvcGVydHkudGFyZ2V0VHlwZSAmJiAhZXhpc3RzKSB7XG5cdFx0XHRjb25zdCByZWxhdGVkUHJvcGVydGllc0luZm86IENvbXBsZXhQcm9wZXJ0eUluZm8gPSBjb2xsZWN0UmVsYXRlZFByb3BlcnRpZXMoXG5cdFx0XHRcdHByb3BlcnR5Lm5hbWUsXG5cdFx0XHRcdHByb3BlcnR5LFxuXHRcdFx0XHRjb252ZXJ0ZXJDb250ZXh0LFxuXHRcdFx0XHR0cnVlLFxuXHRcdFx0XHR0YWJsZVR5cGVcblx0XHRcdCk7XG5cdFx0XHRjb25zdCByZWxhdGVkUHJvcGVydHlOYW1lczogc3RyaW5nW10gPSBPYmplY3Qua2V5cyhyZWxhdGVkUHJvcGVydGllc0luZm8ucHJvcGVydGllcyk7XG5cdFx0XHRjb25zdCBhZGRpdGlvbmFsUHJvcGVydHlOYW1lczogc3RyaW5nW10gPSBPYmplY3Qua2V5cyhyZWxhdGVkUHJvcGVydGllc0luZm8uYWRkaXRpb25hbFByb3BlcnRpZXMpO1xuXHRcdFx0Y29uc3QgY29sdW1uSW5mbyA9IGdldENvbHVtbkRlZmluaXRpb25Gcm9tUHJvcGVydHkoXG5cdFx0XHRcdHByb3BlcnR5LFxuXHRcdFx0XHRjb252ZXJ0ZXJDb250ZXh0LmdldEVudGl0eVNldEJhc2VkQW5ub3RhdGlvblBhdGgocHJvcGVydHkuZnVsbHlRdWFsaWZpZWROYW1lKSxcblx0XHRcdFx0cHJvcGVydHkubmFtZSxcblx0XHRcdFx0dHJ1ZSxcblx0XHRcdFx0dHJ1ZSxcblx0XHRcdFx0bm9uU29ydGFibGVDb2x1bW5zLFxuXHRcdFx0XHRhZ2dyZWdhdGlvbkhlbHBlcixcblx0XHRcdFx0Y29udmVydGVyQ29udGV4dFxuXHRcdFx0KTtcblx0XHRcdGNvbnN0IHNlbWFudGljS2V5cyA9IGNvbnZlcnRlckNvbnRleHQuZ2V0QW5ub3RhdGlvbnNCeVRlcm0oXCJDb21tb25cIiwgXCJjb20uc2FwLnZvY2FidWxhcmllcy5Db21tb24udjEuU2VtYW50aWNLZXlcIiwgW1xuXHRcdFx0XHRjb252ZXJ0ZXJDb250ZXh0LmdldEVudGl0eVR5cGUoKVxuXHRcdFx0XSlbMF07XG5cdFx0XHRjb25zdCBvQ29sdW1uRHJhZnRJbmRpY2F0b3IgPSBnZXREZWZhdWx0RHJhZnRJbmRpY2F0b3JGb3JDb2x1bW4oY29sdW1uSW5mby5uYW1lLCBzZW1hbnRpY0tleXMpO1xuXHRcdFx0aWYgKE9iamVjdC5rZXlzKG9Db2x1bW5EcmFmdEluZGljYXRvcikubGVuZ3RoID4gMCkge1xuXHRcdFx0XHRjb2x1bW5JbmZvLmZvcm1hdE9wdGlvbnMgPSB7XG5cdFx0XHRcdFx0Li4ub0NvbHVtbkRyYWZ0SW5kaWNhdG9yXG5cdFx0XHRcdH07XG5cdFx0XHR9XG5cdFx0XHRpZiAocmVsYXRlZFByb3BlcnR5TmFtZXMubGVuZ3RoID4gMCkge1xuXHRcdFx0XHRjb2x1bW5JbmZvLnByb3BlcnR5SW5mb3MgPSByZWxhdGVkUHJvcGVydHlOYW1lcztcblx0XHRcdFx0Y29sdW1uSW5mby5leHBvcnRTZXR0aW5ncyA9IHtcblx0XHRcdFx0XHQuLi5jb2x1bW5JbmZvLmV4cG9ydFNldHRpbmdzLFxuXHRcdFx0XHRcdHRlbXBsYXRlOiByZWxhdGVkUHJvcGVydGllc0luZm8uZXhwb3J0U2V0dGluZ3NUZW1wbGF0ZSxcblx0XHRcdFx0XHR3cmFwOiByZWxhdGVkUHJvcGVydGllc0luZm8uZXhwb3J0U2V0dGluZ3NXcmFwcGluZ1xuXHRcdFx0XHR9O1xuXG5cdFx0XHRcdC8vIENvbGxlY3QgaW5mb3JtYXRpb24gb2YgcmVsYXRlZCBjb2x1bW5zIHRvIGJlIGNyZWF0ZWQuXG5cdFx0XHRcdHJlbGF0ZWRQcm9wZXJ0eU5hbWVzLmZvckVhY2gobmFtZSA9PiB7XG5cdFx0XHRcdFx0Y29sdW1uc1RvQmVDcmVhdGVkW25hbWVdID0gcmVsYXRlZFByb3BlcnRpZXNJbmZvLnByb3BlcnRpZXNbbmFtZV07XG5cdFx0XHRcdH0pO1xuXHRcdFx0fVxuXG5cdFx0XHRpZiAoYWRkaXRpb25hbFByb3BlcnR5TmFtZXMubGVuZ3RoID4gMCkge1xuXHRcdFx0XHRjb2x1bW5JbmZvLmFkZGl0aW9uYWxQcm9wZXJ0eUluZm9zID0gYWRkaXRpb25hbFByb3BlcnR5TmFtZXM7XG5cdFx0XHRcdC8vIENyZWF0ZSBjb2x1bW5zIGZvciBhZGRpdGlvbmFsIHByb3BlcnRpZXMgaWRlbnRpZmllZCBmb3IgQUxQIHVzZSBjYXNlLlxuXHRcdFx0XHRhZGRpdGlvbmFsUHJvcGVydHlOYW1lcy5mb3JFYWNoKG5hbWUgPT4ge1xuXHRcdFx0XHRcdC8vIEludGVudGlvbmFsIG92ZXJ3cml0ZSBhcyB3ZSByZXF1aXJlIG9ubHkgb25lIG5ldyBQcm9wZXJ0eUluZm8gZm9yIGEgcmVsYXRlZCBQcm9wZXJ0eS5cblx0XHRcdFx0XHRjb2x1bW5zVG9CZUNyZWF0ZWRbbmFtZV0gPSByZWxhdGVkUHJvcGVydGllc0luZm8uYWRkaXRpb25hbFByb3BlcnRpZXNbbmFtZV07XG5cdFx0XHRcdH0pO1xuXHRcdFx0fVxuXHRcdFx0dGFibGVDb2x1bW5zLnB1c2goY29sdW1uSW5mbyk7XG5cdFx0fVxuXHR9KTtcblx0cmV0dXJuIHRhYmxlQ29sdW1ucztcbn07XG5cbi8qKlxuICogQ3JlYXRlIGEgY29sdW1uIGRlZmluaXRpb24gZnJvbSBhIHByb3BlcnR5LlxuICogQHBhcmFtIHtQcm9wZXJ0eX0gcHJvcGVydHkgRW50aXR5IHR5cGUgcHJvcGVydHkgZm9yIHdoaWNoIHRoZSBjb2x1bW4gaXMgY3JlYXRlZFxuICogQHBhcmFtIHtzdHJpbmd9IGZ1bGxQcm9wZXJ0eVBhdGggVGhlIGZ1bGwgcGF0aCB0byB0aGUgdGFyZ2V0IHByb3BlcnR5XG4gKiBAcGFyYW0ge3N0cmluZ30gcmVsYXRpdmVQYXRoIFRoZSByZWxhdGl2ZSBwYXRoIHRvIHRoZSB0YXJnZXQgcHJvcGVydHkgYmFzZWQgb24gdGhlIGNvbnRleHRcbiAqIEBwYXJhbSB7Ym9vbGVhbn0gdXNlRGF0YUZpZWxkUHJlZml4IFNob3VsZCBiZSBwcmVmaXhlZCB3aXRoIFwiRGF0YUZpZWxkOjpcIiwgZWxzZSBpdCB3aWxsIGJlIHByZWZpeGVkIHdpdGggXCJQcm9wZXJ0eTo6XCJcbiAqIEBwYXJhbSB7Ym9vbGVhbn0gYXZhaWxhYmxlRm9yQWRhcHRhdGlvbiBEZWNpZGVzIHdoZXRoZXIgY29sdW1uIHNob3VsZCBiZSBhdmFpbGFibGUgZm9yIGFkYXB0YXRpb25cbiAqIEBwYXJhbSB7c3RyaW5nW119IG5vblNvcnRhYmxlQ29sdW1ucyBUaGUgYXJyYXkgb2YgYWxsIG5vbiBzb3J0YWJsZSBjb2x1bW4gbmFtZXNcbiAqIEBwYXJhbSB7QWdncmVnYXRpb25IZWxwZXJ9IGFnZ3JlZ2F0aW9uSGVscGVyIFRoZSBhZ2dyZWdhdGlvbkhlbHBlciBmb3IgdGhlIGVudGl0eVxuICogQHBhcmFtIHtDb252ZXJ0ZXJDb250ZXh0fSBjb252ZXJ0ZXJDb250ZXh0IFRoZSBjb252ZXJ0ZXIgY29udGV4dFxuICogQHJldHVybnMge0Fubm90YXRpb25UYWJsZUNvbHVtbn0gVGhlIGFubm90YXRpb24gY29sdW1uIGRlZmluaXRpb25cbiAqL1xuY29uc3QgZ2V0Q29sdW1uRGVmaW5pdGlvbkZyb21Qcm9wZXJ0eSA9IGZ1bmN0aW9uKFxuXHRwcm9wZXJ0eTogUHJvcGVydHksXG5cdGZ1bGxQcm9wZXJ0eVBhdGg6IHN0cmluZyxcblx0cmVsYXRpdmVQYXRoOiBzdHJpbmcsXG5cdHVzZURhdGFGaWVsZFByZWZpeDogYm9vbGVhbixcblx0YXZhaWxhYmxlRm9yQWRhcHRhdGlvbjogYm9vbGVhbixcblx0bm9uU29ydGFibGVDb2x1bW5zOiBzdHJpbmdbXSxcblx0YWdncmVnYXRpb25IZWxwZXI6IEFnZ3JlZ2F0aW9uSGVscGVyLFxuXHRjb252ZXJ0ZXJDb250ZXh0OiBDb252ZXJ0ZXJDb250ZXh0XG4pOiBBbm5vdGF0aW9uVGFibGVDb2x1bW4ge1xuXHRjb25zdCBuYW1lID0gdXNlRGF0YUZpZWxkUHJlZml4ID8gcmVsYXRpdmVQYXRoIDogXCJQcm9wZXJ0eTo6XCIgKyByZWxhdGl2ZVBhdGg7XG5cdGNvbnN0IGtleSA9ICh1c2VEYXRhRmllbGRQcmVmaXggPyBcIkRhdGFGaWVsZDo6XCIgOiBcIlByb3BlcnR5OjpcIikgKyByZXBsYWNlU3BlY2lhbENoYXJzKHJlbGF0aXZlUGF0aCk7XG5cdGNvbnN0IHNlbWFudGljT2JqZWN0QW5ub3RhdGlvblBhdGggPSBnZXRTZW1hbnRpY09iamVjdFBhdGgoY29udmVydGVyQ29udGV4dCwgcHJvcGVydHkpO1xuXHRjb25zdCBpc0hpZGRlbiA9IHByb3BlcnR5LmFubm90YXRpb25zPy5VST8uSGlkZGVuPy52YWx1ZU9mKCkgPT09IHRydWU7XG5cdGNvbnN0IGdyb3VwUGF0aDogc3RyaW5nIHwgdW5kZWZpbmVkID0gcHJvcGVydHkubmFtZSA/IF9zbGljZUF0U2xhc2gocHJvcGVydHkubmFtZSwgdHJ1ZSwgZmFsc2UpIDogdW5kZWZpbmVkO1xuXHRjb25zdCBpc0dyb3VwOiBib29sZWFuID0gZ3JvdXBQYXRoICE9IHByb3BlcnR5Lm5hbWU7XG5cdGNvbnN0IGlzRGF0YVBvaW50RmFrZVByb3BlcnR5OiBib29sZWFuID0gbmFtZS5pbmRleE9mKFwiQGNvbS5zYXAudm9jYWJ1bGFyaWVzLlVJLnYxLkRhdGFQb2ludFwiKSA+IC0xO1xuXHRjb25zdCBleHBvcnRUeXBlOiBzdHJpbmcgPSBfZ2V0RXhwb3J0RGF0YVR5cGUocHJvcGVydHkudHlwZSk7XG5cdGNvbnN0IHNEYXRlSW5wdXRGb3JtYXQ6IHN0cmluZyB8IHVuZGVmaW5lZCA9IHByb3BlcnR5LnR5cGUgPT09IFwiRWRtLkRhdGVcIiA/IFwiWVlZWS1NTS1ERFwiIDogdW5kZWZpbmVkO1xuXHRjb25zdCBkYXRhVHlwZTogc3RyaW5nIHwgdW5kZWZpbmVkID0gZ2V0RGF0YUZpZWxkRGF0YVR5cGUocHJvcGVydHkpO1xuXHRjb25zdCBwcm9wZXJ0eVR5cGVDb25maWcgPSAhaXNEYXRhUG9pbnRGYWtlUHJvcGVydHkgPyBnZXRUeXBlQ29uZmlnKHByb3BlcnR5LCBkYXRhVHlwZSkgOiB1bmRlZmluZWQ7XG5cdGNvbnN0IG9UeXBlQ29uZmlnID0gIWlzRGF0YVBvaW50RmFrZVByb3BlcnR5XG5cdFx0PyB7XG5cdFx0XHRcdGNsYXNzTmFtZTogcHJvcGVydHkudHlwZSB8fCBkYXRhVHlwZSxcblx0XHRcdFx0b0Zvcm1hdE9wdGlvbnM6IHByb3BlcnR5VHlwZUNvbmZpZy5mb3JtYXRPcHRpb25zLFxuXHRcdFx0XHRvQ29uc3RyYWludHM6IHByb3BlcnR5VHlwZUNvbmZpZy5jb25zdHJhaW50c1xuXHRcdCAgfVxuXHRcdDogdW5kZWZpbmVkO1xuXHRjb25zdCBleHBvcnRTZXR0aW5ncyA9IGlzRGF0YVBvaW50RmFrZVByb3BlcnR5XG5cdFx0PyB7XG5cdFx0XHRcdHRlbXBsYXRlOiBnZXRUYXJnZXRWYWx1ZU9uRGF0YVBvaW50KHByb3BlcnR5KVxuXHRcdCAgfVxuXHRcdDoge1xuXHRcdFx0XHR0eXBlOiBleHBvcnRUeXBlLFxuXHRcdFx0XHRpbnB1dEZvcm1hdDogc0RhdGVJbnB1dEZvcm1hdCxcblx0XHRcdFx0c2NhbGU6IHByb3BlcnR5LnNjYWxlLFxuXHRcdFx0XHRkZWxpbWl0ZXI6IHByb3BlcnR5LnR5cGUgPT09IFwiRWRtLkludDY0XCIgPyB0cnVlIDogZmFsc2UsXG5cdFx0XHRcdHRydWVWYWx1ZTogcHJvcGVydHkudHlwZSA9PT0gXCJFZG0uQm9vbGVhblwiID8gXCJZZXNcIiA6IHVuZGVmaW5lZCxcblx0XHRcdFx0ZmFsc2VWYWx1ZTogcHJvcGVydHkudHlwZSA9PT0gXCJFZG0uQm9vbGVhblwiID8gXCJOb1wiIDogdW5kZWZpbmVkXG5cdFx0ICB9O1xuXG5cdGNvbnN0IG9Db2x1bW46IGFueSA9IHtcblx0XHRrZXk6IGtleSxcblx0XHRpc0dyb3VwYWJsZTogIWlzRGF0YVBvaW50RmFrZVByb3BlcnR5ICYmICFpc0hpZGRlbiA/IGFnZ3JlZ2F0aW9uSGVscGVyLmlzUHJvcGVydHlHcm91cGFibGUocHJvcGVydHkpIDogZmFsc2UsXG5cdFx0dHlwZTogQ29sdW1uVHlwZS5Bbm5vdGF0aW9uLFxuXHRcdGxhYmVsOiBfZ2V0TGFiZWwocHJvcGVydHksIGlzR3JvdXApLFxuXHRcdGdyb3VwTGFiZWw6IGlzR3JvdXAgPyBfZ2V0TGFiZWwocHJvcGVydHkpIDogbnVsbCxcblx0XHRncm91cDogaXNHcm91cCA/IGdyb3VwUGF0aCA6IG51bGwsXG5cdFx0YW5ub3RhdGlvblBhdGg6IGZ1bGxQcm9wZXJ0eVBhdGgsXG5cdFx0c2VtYW50aWNPYmplY3RQYXRoOiBzZW1hbnRpY09iamVjdEFubm90YXRpb25QYXRoLFxuXHRcdC8vIEEgZmFrZSBwcm9wZXJ0eSB3YXMgY3JlYXRlZCBmb3IgdGhlIFRhcmdldFZhbHVlIHVzZWQgb24gRGF0YVBvaW50cywgdGhpcyBwcm9wZXJ0eSBzaG91bGQgYmUgaGlkZGVuIGFuZCBub24gc29ydGFibGVcblx0XHRhdmFpbGFiaWxpdHk6XG5cdFx0XHQhYXZhaWxhYmxlRm9yQWRhcHRhdGlvbiB8fCBpc0hpZGRlbiB8fCBpc0RhdGFQb2ludEZha2VQcm9wZXJ0eSA/IEF2YWlsYWJpbGl0eVR5cGUuSGlkZGVuIDogQXZhaWxhYmlsaXR5VHlwZS5BZGFwdGF0aW9uLFxuXHRcdG5hbWU6IG5hbWUsXG5cdFx0cmVsYXRpdmVQYXRoOiBpc0RhdGFQb2ludEZha2VQcm9wZXJ0eVxuXHRcdFx0PyAocHJvcGVydHkgYXMgYW55KS5hbm5vdGF0aW9ucz8uVUk/LkRhdGFGaWVsZERlZmF1bHQ/LlRhcmdldD8uJHRhcmdldD8uVmFsdWU/LnBhdGggfHwgKHByb3BlcnR5IGFzIGFueSkuVmFsdWUucGF0aFxuXHRcdFx0OiByZWxhdGl2ZVBhdGgsXG5cdFx0c29ydGFibGU6ICFpc0hpZGRlbiAmJiBub25Tb3J0YWJsZUNvbHVtbnMuaW5kZXhPZihyZWxhdGl2ZVBhdGgpID09PSAtMSAmJiAhaXNEYXRhUG9pbnRGYWtlUHJvcGVydHksXG5cdFx0aXNLZXk6IHByb3BlcnR5LmlzS2V5LFxuXHRcdGlzRGF0YVBvaW50RmFrZVRhcmdldFByb3BlcnR5OiBpc0RhdGFQb2ludEZha2VQcm9wZXJ0eSxcblx0XHRleHBvcnRTZXR0aW5nczogZXhwb3J0U2V0dGluZ3MsXG5cdFx0Y2FzZVNlbnNpdGl2ZTogaXNGaWx0ZXJpbmdDYXNlU2Vuc2l0aXZlKGNvbnZlcnRlckNvbnRleHQpLFxuXHRcdHR5cGVDb25maWc6IG9UeXBlQ29uZmlnLFxuXHRcdHZpc3VhbFNldHRpbmdzOiBpc0RhdGFQb2ludEZha2VQcm9wZXJ0eSA/IHsgd2lkdGhDYWxjdWxhdGlvbjogbnVsbCB9IDogdW5kZWZpbmVkXG5cdH07XG5cdGNvbnN0IHNUb29sdGlwID0gX2dldFRvb2x0aXAocHJvcGVydHkpO1xuXHRpZiAoc1Rvb2x0aXApIHtcblx0XHRvQ29sdW1uLnRvb2x0aXAgPSBzVG9vbHRpcDtcblx0fVxuXG5cdHJldHVybiBvQ29sdW1uIGFzIEFubm90YXRpb25UYWJsZUNvbHVtbjtcbn07XG5cbi8qKlxuICogUmV0dXJucyBCb29sZWFuIHRydWUgZm9yIHZhbGlkIGNvbHVtbnMsIGZhbHNlIGZvciBpbnZhbGlkIGNvbHVtbnMuXG4gKlxuICogQHBhcmFtIHtEYXRhRmllbGRBYnN0cmFjdFR5cGVzfSBkYXRhRmllbGQgRGlmZmVyZW50IERhdGFGaWVsZCB0eXBlcyBkZWZpbmVkIGluIHRoZSBhbm5vdGF0aW9uc1xuICogQHJldHVybnMge2Jvb2xlYW59IFRydWUgZm9yIHZhbGlkIGNvbHVtbnMsIGZhbHNlIGZvciBpbnZhbGlkIGNvbHVtbnNcbiAqIEBwcml2YXRlXG4gKi9cbmNvbnN0IF9pc1ZhbGlkQ29sdW1uID0gZnVuY3Rpb24oZGF0YUZpZWxkOiBEYXRhRmllbGRBYnN0cmFjdFR5cGVzKSB7XG5cdHN3aXRjaCAoZGF0YUZpZWxkLiRUeXBlKSB7XG5cdFx0Y2FzZSBVSUFubm90YXRpb25UeXBlcy5EYXRhRmllbGRGb3JBY3Rpb246XG5cdFx0Y2FzZSBVSUFubm90YXRpb25UeXBlcy5EYXRhRmllbGRGb3JJbnRlbnRCYXNlZE5hdmlnYXRpb246XG5cdFx0XHRyZXR1cm4gISFkYXRhRmllbGQuSW5saW5lO1xuXHRcdGNhc2UgVUlBbm5vdGF0aW9uVHlwZXMuRGF0YUZpZWxkV2l0aEFjdGlvbjpcblx0XHRjYXNlIFVJQW5ub3RhdGlvblR5cGVzLkRhdGFGaWVsZFdpdGhJbnRlbnRCYXNlZE5hdmlnYXRpb246XG5cdFx0XHRyZXR1cm4gZmFsc2U7XG5cdFx0Y2FzZSBVSUFubm90YXRpb25UeXBlcy5EYXRhRmllbGQ6XG5cdFx0Y2FzZSBVSUFubm90YXRpb25UeXBlcy5EYXRhRmllbGRXaXRoVXJsOlxuXHRcdGNhc2UgVUlBbm5vdGF0aW9uVHlwZXMuRGF0YUZpZWxkRm9yQW5ub3RhdGlvbjpcblx0XHRjYXNlIFVJQW5ub3RhdGlvblR5cGVzLkRhdGFGaWVsZFdpdGhOYXZpZ2F0aW9uUGF0aDpcblx0XHRcdHJldHVybiB0cnVlO1xuXHRcdGRlZmF1bHQ6XG5cdFx0Ly8gVG9kbzogUmVwbGFjZSB3aXRoIHByb3BlciBMb2cgc3RhdGVtZW50IG9uY2UgYXZhaWxhYmxlXG5cdFx0Ly8gIHRocm93IG5ldyBFcnJvcihcIlVuaGFuZGxlZCBEYXRhRmllbGQgQWJzdHJhY3QgdHlwZTogXCIgKyBkYXRhRmllbGQuJFR5cGUpO1xuXHR9XG59O1xuXG4vKipcbiAqIFJldHVybnMgdGhlIGJpbmRpbmcgZXhwcmVzc2lvbiB0byBldmFsdWF0ZSB0aGUgdmlzaWJpbGl0eSBvZiBhIERhdGFGaWVsZCBvciBEYXRhUG9pbnQgYW5ub3RhdGlvbi5cbiAqXG4gKiBTQVAgRmlvcmkgZWxlbWVudHMgd2lsbCBldmFsdWF0ZSBlaXRoZXIgdGhlIFVJLkhpZGRlbiBhbm5vdGF0aW9uIGRlZmluZWQgb24gdGhlIGFubm90YXRpb24gaXRzZWxmIG9yIG9uIHRoZSB0YXJnZXQgcHJvcGVydHkuXG4gKlxuICogQHBhcmFtIHtEYXRhTW9kZWxPYmplY3RQYXRofSBkYXRhRmllbGRNb2RlbFBhdGggVGhlIG1ldGFwYXRoIHJlZmVycmluZyB0byB0aGUgYW5ub3RhdGlvbiB0aGF0IGlzIGV2YWx1YXRlZCBieSBTQVAgRmlvcmkgZWxlbWVudHMuXG4gKiBAcGFyYW0ge0ZpZWxkRm9ybWF0T3B0aW9uc30gW2Zvcm1hdE9wdGlvbnNdIEZvcm1hdE9wdGlvbnMgaXMgb3B0aW9uYWwsIHVzZWQgdG8gY2hlY2sgaWYgdGhlIGFuYWx5dGljIHRhYmxlIGhhcyBHcm91cEhlYWRlciBleHBhbmRlZC5cbiAqIEBwYXJhbSB7Ym9vbGVhbn0gW3JldHVybkV4cHJlc3Npb25dIFJldHVybkV4cHJlc3Npb24gb3B0aW9uYWwuXG4gKiBAcmV0dXJucyB7QmluZGluZ0V4cHJlc3Npb248c3RyaW5nPn0gQW4gZXhwcmVzc2lvbiB0aGF0IHlvdSBjYW4gYmluZCB0byB0aGUgVUkuXG4gKi9cbmV4cG9ydCBjb25zdCBfZ2V0VmlzaWJsZUV4cHJlc3Npb24gPSBmdW5jdGlvbihcblx0ZGF0YUZpZWxkTW9kZWxQYXRoOiBEYXRhTW9kZWxPYmplY3RQYXRoLFxuXHRmb3JtYXRPcHRpb25zPzogYW55LFxuXHRyZXR1cm5FeHByZXNzaW9uPzogQm9vbGVhblxuKTogQmluZGluZ0V4cHJlc3Npb248c3RyaW5nPiB7XG5cdGNvbnN0IHRhcmdldE9iamVjdDogRGF0YUZpZWxkQWJzdHJhY3RUeXBlcyB8IERhdGFQb2ludFR5cGVUeXBlcyA9IGRhdGFGaWVsZE1vZGVsUGF0aC50YXJnZXRPYmplY3Q7XG5cdGxldCBwcm9wZXJ0eVZhbHVlO1xuXHRpZiAodGFyZ2V0T2JqZWN0KSB7XG5cdFx0c3dpdGNoICh0YXJnZXRPYmplY3QuJFR5cGUpIHtcblx0XHRcdGNhc2UgVUlBbm5vdGF0aW9uVHlwZXMuRGF0YUZpZWxkOlxuXHRcdFx0Y2FzZSBVSUFubm90YXRpb25UeXBlcy5EYXRhRmllbGRXaXRoVXJsOlxuXHRcdFx0Y2FzZSBVSUFubm90YXRpb25UeXBlcy5EYXRhRmllbGRXaXRoTmF2aWdhdGlvblBhdGg6XG5cdFx0XHRjYXNlIFVJQW5ub3RhdGlvblR5cGVzLkRhdGFGaWVsZFdpdGhJbnRlbnRCYXNlZE5hdmlnYXRpb246XG5cdFx0XHRjYXNlIFVJQW5ub3RhdGlvblR5cGVzLkRhdGFGaWVsZFdpdGhBY3Rpb246XG5cdFx0XHRjYXNlIFVJQW5ub3RhdGlvblR5cGVzLkRhdGFQb2ludFR5cGU6XG5cdFx0XHRcdHByb3BlcnR5VmFsdWUgPSB0YXJnZXRPYmplY3QuVmFsdWUuJHRhcmdldDtcblx0XHRcdFx0YnJlYWs7XG5cdFx0XHRjYXNlIFVJQW5ub3RhdGlvblR5cGVzLkRhdGFGaWVsZEZvckFubm90YXRpb246XG5cdFx0XHRcdC8vIGlmIGl0IGlzIGEgRGF0YUZpZWxkRm9yQW5ub3RhdGlvbiBwb2ludGluZyB0byBhIERhdGFQb2ludCB3ZSBsb29rIGF0IHRoZSBkYXRhUG9pbnQncyB2YWx1ZVxuXHRcdFx0XHRpZiAodGFyZ2V0T2JqZWN0Py5UYXJnZXQ/LiR0YXJnZXQ/LiRUeXBlID09PSBVSUFubm90YXRpb25UeXBlcy5EYXRhUG9pbnRUeXBlKSB7XG5cdFx0XHRcdFx0cHJvcGVydHlWYWx1ZSA9IHRhcmdldE9iamVjdC5UYXJnZXQuJHRhcmdldD8uVmFsdWUuJHRhcmdldDtcblx0XHRcdFx0fVxuXHRcdFx0XHRicmVhaztcblx0XHRcdGNhc2UgVUlBbm5vdGF0aW9uVHlwZXMuRGF0YUZpZWxkRm9ySW50ZW50QmFzZWROYXZpZ2F0aW9uOlxuXHRcdFx0Y2FzZSBVSUFubm90YXRpb25UeXBlcy5EYXRhRmllbGRGb3JBY3Rpb246XG5cdFx0XHRkZWZhdWx0OlxuXHRcdFx0XHRwcm9wZXJ0eVZhbHVlID0gdW5kZWZpbmVkO1xuXHRcdH1cblx0fVxuXHRjb25zdCBpc0FuYWx5dGljYWxHcm91cEhlYWRlckV4cGFuZGVkID0gZm9ybWF0T3B0aW9ucz8uaXNBbmFseXRpY3MgPyBVSS5Jc0V4cGFuZGVkIDogY29uc3RhbnQoZmFsc2UpO1xuXHRjb25zdCBpc0FuYWx5dGljYWxMZWFmID0gZm9ybWF0T3B0aW9ucz8uaXNBbmFseXRpY3MgPyBlcXVhbChVSS5Ob2RlTGV2ZWwsIDApIDogY29uc3RhbnQoZmFsc2UpO1xuXG5cdC8vIEEgZGF0YSBmaWVsZCBpcyB2aXNpYmxlIGlmOlxuXHQvLyAtIHRoZSBVSS5IaWRkZW4gZXhwcmVzc2lvbiBpbiB0aGUgb3JpZ2luYWwgYW5ub3RhdGlvbiBkb2VzIG5vdCBldmFsdWF0ZSB0byAndHJ1ZSdcblx0Ly8gLSB0aGUgVUkuSGlkZGVuIGV4cHJlc3Npb24gaW4gdGhlIHRhcmdldCBwcm9wZXJ0eSBkb2VzIG5vdCBldmFsdWF0ZSB0byAndHJ1ZSdcblx0Ly8gLSBpbiBjYXNlIG9mIEFuYWx5dGljcyBpdCdzIG5vdCB2aXNpYmxlIGZvciBhbiBleHBhbmRlZCBHcm91cEhlYWRlclxuXHRjb25zdCBleHByZXNzaW9uID0gYW5kKFxuXHRcdC4uLltcblx0XHRcdG5vdChlcXVhbChhbm5vdGF0aW9uRXhwcmVzc2lvbih0YXJnZXRPYmplY3Q/LmFubm90YXRpb25zPy5VST8uSGlkZGVuKSwgdHJ1ZSkpLFxuXHRcdFx0aWZFbHNlKCEhcHJvcGVydHlWYWx1ZSwgcHJvcGVydHlWYWx1ZSAmJiBub3QoZXF1YWwoYW5ub3RhdGlvbkV4cHJlc3Npb24ocHJvcGVydHlWYWx1ZS5hbm5vdGF0aW9ucz8uVUk/LkhpZGRlbiksIHRydWUpKSwgdHJ1ZSksXG5cdFx0XHRvcihub3QoaXNBbmFseXRpY2FsR3JvdXBIZWFkZXJFeHBhbmRlZCksIGlzQW5hbHl0aWNhbExlYWYpXG5cdFx0XVxuXHQpO1xuXHRyZXR1cm4gcmV0dXJuRXhwcmVzc2lvbiA/IChleHByZXNzaW9uIGFzIEJpbmRpbmdFeHByZXNzaW9uPHN0cmluZz4pIDogY29tcGlsZUJpbmRpbmcoZXhwcmVzc2lvbik7XG59O1xuXG4vKipcbiAqIFJldHVybnMgaGlkZGVuIGJpbmRpbmcgZXhwcmVzc2lvbnMgZm9yIGEgZmllbGQgZ3JvdXAuXG4gKiBAcGFyYW0ge0RhdGFGaWVsZEFic3RyYWN0VHlwZXN9IGRhdGFGaWVsZEdyb3VwIERhdGFGaWVsZCBkZWZpbmVkIGluIHRoZSBhbm5vdGF0aW9uc1xuICogQHBhcmFtIHtGaWVsZEZvcm1hdE9wdGlvbnN9IFtmaWVsZEZvcm1hdE9wdGlvbnNdIEZvcm1hdE9wdGlvbnMgaXMgb3B0aW9uYWwsIHVzZWQgdG8gY2hlY2sgaWYgdGhlIGFuYWx5dGljIHRhYmxlIGhhcyBHcm91cEhlYWRlciBleHBhbmRlZC5cbiAqIEByZXR1cm5zIHtCaW5kaW5nRXhwcmVzc2lvbjxzdHJpbmc+fSBDb21waWxlIGJpbmRpbmcgb2YgZmllbGQgZ3JvdXAgZXhwcmVzc2lvbnMuXG4gKiBAcHJpdmF0ZVxuICovXG5jb25zdCBfZ2V0RmllbGRHcm91cEhpZGRlbkV4cHJlc3Npb25zID0gZnVuY3Rpb24oXG5cdGRhdGFGaWVsZEdyb3VwOiBEYXRhRmllbGRBYnN0cmFjdFR5cGVzLFxuXHRmaWVsZEZvcm1hdE9wdGlvbnM6IGFueVxuKTogQmluZGluZ0V4cHJlc3Npb248c3RyaW5nPiB7XG5cdGNvbnN0IGFGaWVsZEdyb3VwSGlkZGVuRXhwcmVzc2lvbnM6IEJpbmRpbmdFeHByZXNzaW9uPHN0cmluZz5bXSA9IFtdO1xuXHRpZiAoXG5cdFx0ZGF0YUZpZWxkR3JvdXAuJFR5cGUgPT09IFVJQW5ub3RhdGlvblR5cGVzLkRhdGFGaWVsZEZvckFubm90YXRpb24gJiZcblx0XHRkYXRhRmllbGRHcm91cC5UYXJnZXQ/LiR0YXJnZXQ/LiRUeXBlID09PSBVSUFubm90YXRpb25UeXBlcy5GaWVsZEdyb3VwVHlwZVxuXHQpIHtcblx0XHRkYXRhRmllbGRHcm91cC5UYXJnZXQuJHRhcmdldC5EYXRhPy5mb3JFYWNoKChpbm5lckRhdGFGaWVsZDogRGF0YUZpZWxkQWJzdHJhY3RUeXBlcyB8IERhdGFQb2ludFR5cGVUeXBlcykgPT4ge1xuXHRcdFx0YUZpZWxkR3JvdXBIaWRkZW5FeHByZXNzaW9ucy5wdXNoKFxuXHRcdFx0XHRfZ2V0VmlzaWJsZUV4cHJlc3Npb24oeyB0YXJnZXRPYmplY3Q6IGlubmVyRGF0YUZpZWxkIH0gYXMgRGF0YU1vZGVsT2JqZWN0UGF0aCwgZmllbGRGb3JtYXRPcHRpb25zLCB0cnVlKVxuXHRcdFx0KTtcblx0XHR9KTtcblx0XHRyZXR1cm4gY29tcGlsZUJpbmRpbmcoXG5cdFx0XHRpZkVsc2Uob3IoLi4uKGFGaWVsZEdyb3VwSGlkZGVuRXhwcmVzc2lvbnMgYXMgRXhwcmVzc2lvbk9yUHJpbWl0aXZlPGJvb2xlYW4+W10pKSwgY29uc3RhbnQodHJ1ZSksIGNvbnN0YW50KGZhbHNlKSlcblx0XHQpO1xuXHR9XG59O1xuXG4vKipcbiAqIFJldHVybnMgdGhlIGxhYmVsIGZvciB0aGUgcHJvcGVydHkgYW5kIGRhdGFGaWVsZC5cbiAqIEBwYXJhbSB7RGF0YUZpZWxkQWJzdHJhY3RUeXBlcyB8IFByb3BlcnR5fSBbcHJvcGVydHldIFByb3BlcnR5IG9yIERhdGFGaWVsZCBkZWZpbmVkIGluIHRoZSBhbm5vdGF0aW9uc1xuICogQHBhcmFtIGlzR3JvdXBcbiAqIEByZXR1cm5zIHtzdHJpbmd9IExhYmVsIG9mIHRoZSBwcm9wZXJ0eSBvciBEYXRhRmllbGRcbiAqIEBwcml2YXRlXG4gKi9cbmNvbnN0IF9nZXRMYWJlbCA9IGZ1bmN0aW9uKHByb3BlcnR5OiBEYXRhRmllbGRBYnN0cmFjdFR5cGVzIHwgUHJvcGVydHksIGlzR3JvdXA6IGJvb2xlYW4gPSBmYWxzZSk6IHN0cmluZyB8IHVuZGVmaW5lZCB7XG5cdGlmICghcHJvcGVydHkpIHtcblx0XHRyZXR1cm4gdW5kZWZpbmVkO1xuXHR9XG5cdGlmIChpc1Byb3BlcnR5KHByb3BlcnR5KSkge1xuXHRcdGNvbnN0IGRhdGFGaWVsZERlZmF1bHQgPSBwcm9wZXJ0eS5hbm5vdGF0aW9ucz8uVUk/LkRhdGFGaWVsZERlZmF1bHQ7XG5cdFx0aWYgKGRhdGFGaWVsZERlZmF1bHQgJiYgIWRhdGFGaWVsZERlZmF1bHQucXVhbGlmaWVyICYmIGRhdGFGaWVsZERlZmF1bHQuTGFiZWw/LnZhbHVlT2YoKSkge1xuXHRcdFx0cmV0dXJuIGNvbXBpbGVCaW5kaW5nKGFubm90YXRpb25FeHByZXNzaW9uKGRhdGFGaWVsZERlZmF1bHQuTGFiZWw/LnZhbHVlT2YoKSkpO1xuXHRcdH1cblx0XHRyZXR1cm4gY29tcGlsZUJpbmRpbmcoYW5ub3RhdGlvbkV4cHJlc3Npb24ocHJvcGVydHkuYW5ub3RhdGlvbnMuQ29tbW9uPy5MYWJlbD8udmFsdWVPZigpIHx8IHByb3BlcnR5Lm5hbWUpKTtcblx0fSBlbHNlIGlmIChpc0RhdGFGaWVsZFR5cGVzKHByb3BlcnR5KSkge1xuXHRcdGlmICghIWlzR3JvdXAgJiYgcHJvcGVydHkuJFR5cGUgPT09IFVJQW5ub3RhdGlvblR5cGVzLkRhdGFGaWVsZFdpdGhJbnRlbnRCYXNlZE5hdmlnYXRpb24pIHtcblx0XHRcdHJldHVybiBjb21waWxlQmluZGluZyhhbm5vdGF0aW9uRXhwcmVzc2lvbihwcm9wZXJ0eS5MYWJlbD8udmFsdWVPZigpKSk7XG5cdFx0fVxuXHRcdHJldHVybiBjb21waWxlQmluZGluZyhcblx0XHRcdGFubm90YXRpb25FeHByZXNzaW9uKFxuXHRcdFx0XHRwcm9wZXJ0eS5MYWJlbD8udmFsdWVPZigpIHx8IHByb3BlcnR5LlZhbHVlPy4kdGFyZ2V0Py5hbm5vdGF0aW9ucz8uQ29tbW9uPy5MYWJlbD8udmFsdWVPZigpIHx8IHByb3BlcnR5LlZhbHVlPy4kdGFyZ2V0Py5uYW1lXG5cdFx0XHQpXG5cdFx0KTtcblx0fSBlbHNlIGlmIChwcm9wZXJ0eS4kVHlwZSA9PT0gVUlBbm5vdGF0aW9uVHlwZXMuRGF0YUZpZWxkRm9yQW5ub3RhdGlvbikge1xuXHRcdHJldHVybiBjb21waWxlQmluZGluZyhcblx0XHRcdGFubm90YXRpb25FeHByZXNzaW9uKFxuXHRcdFx0XHRwcm9wZXJ0eS5MYWJlbD8udmFsdWVPZigpIHx8IChwcm9wZXJ0eS5UYXJnZXQ/LiR0YXJnZXQgYXMgRGF0YVBvaW50KT8uVmFsdWU/LiR0YXJnZXQ/LmFubm90YXRpb25zPy5Db21tb24/LkxhYmVsPy52YWx1ZU9mKClcblx0XHRcdClcblx0XHQpO1xuXHR9IGVsc2Uge1xuXHRcdHJldHVybiBjb21waWxlQmluZGluZyhhbm5vdGF0aW9uRXhwcmVzc2lvbihwcm9wZXJ0eS5MYWJlbD8udmFsdWVPZigpKSk7XG5cdH1cbn07XG5cbmNvbnN0IF9nZXRUb29sdGlwID0gZnVuY3Rpb24oc291cmNlOiBEYXRhRmllbGRBYnN0cmFjdFR5cGVzIHwgUHJvcGVydHkpOiBzdHJpbmcgfCB1bmRlZmluZWQge1xuXHRpZiAoIXNvdXJjZSkge1xuXHRcdHJldHVybiB1bmRlZmluZWQ7XG5cdH1cblxuXHRpZiAoaXNQcm9wZXJ0eShzb3VyY2UpKSB7XG5cdFx0cmV0dXJuIHNvdXJjZS5hbm5vdGF0aW9ucy5Db21tb24/LlF1aWNrSW5mb1xuXHRcdFx0PyBjb21waWxlQmluZGluZyhhbm5vdGF0aW9uRXhwcmVzc2lvbihzb3VyY2UuYW5ub3RhdGlvbnMuQ29tbW9uLlF1aWNrSW5mby52YWx1ZU9mKCkpKVxuXHRcdFx0OiB1bmRlZmluZWQ7XG5cdH0gZWxzZSBpZiAoaXNEYXRhRmllbGRUeXBlcyhzb3VyY2UpKSB7XG5cdFx0cmV0dXJuIHNvdXJjZS5WYWx1ZT8uJHRhcmdldD8uYW5ub3RhdGlvbnM/LkNvbW1vbj8uUXVpY2tJbmZvXG5cdFx0XHQ/IGNvbXBpbGVCaW5kaW5nKGFubm90YXRpb25FeHByZXNzaW9uKHNvdXJjZS5WYWx1ZS4kdGFyZ2V0LmFubm90YXRpb25zLkNvbW1vbi5RdWlja0luZm8udmFsdWVPZigpKSlcblx0XHRcdDogdW5kZWZpbmVkO1xuXHR9IGVsc2UgaWYgKHNvdXJjZS4kVHlwZSA9PT0gVUlBbm5vdGF0aW9uVHlwZXMuRGF0YUZpZWxkRm9yQW5ub3RhdGlvbikge1xuXHRcdGNvbnN0IGRhdGFwb2ludFRhcmdldCA9IHNvdXJjZS5UYXJnZXQ/LiR0YXJnZXQgYXMgRGF0YVBvaW50O1xuXHRcdHJldHVybiBkYXRhcG9pbnRUYXJnZXQ/LlZhbHVlPy4kdGFyZ2V0Py5hbm5vdGF0aW9ucz8uQ29tbW9uPy5RdWlja0luZm9cblx0XHRcdD8gY29tcGlsZUJpbmRpbmcoYW5ub3RhdGlvbkV4cHJlc3Npb24oZGF0YXBvaW50VGFyZ2V0LlZhbHVlLiR0YXJnZXQuYW5ub3RhdGlvbnMuQ29tbW9uLlF1aWNrSW5mby52YWx1ZU9mKCkpKVxuXHRcdFx0OiB1bmRlZmluZWQ7XG5cdH0gZWxzZSB7XG5cdFx0cmV0dXJuIHVuZGVmaW5lZDtcblx0fVxufTtcblxuLyoqXG4gKiBDcmVhdGVzIGEgUHJvcGVydHlJbmZvIGZvciBlYWNoIGlkZW50aWZpZWQgcHJvcGVydHkgY29uc3VtZWQgYnkgYSBMaW5lSXRlbS5cbiAqXG4gKiBAcGFyYW0ge1JlY29yZDxzdHJpbmcsIFByb3BlcnR5Pn0gY29sdW1uc1RvQmVDcmVhdGVkIElkZW50aWZpZWQgcHJvcGVydGllcy5cbiAqIEBwYXJhbSBleGlzdGluZ0NvbHVtbnMgVGhlIGxpc3Qgb2YgY29sdW1ucyBjcmVhdGVkIGZvciBMaW5lSXRlbXMgYW5kIFByb3BlcnRpZXMgb2YgZW50aXR5VHlwZS5cbiAqIEBwYXJhbSBub25Tb3J0YWJsZUNvbHVtbnMgVGhlIGFycmF5IG9mIGNvbHVtbiBuYW1lcyB3aGljaCBjYW5ub3QgYmUgc29ydGVkLlxuICogQHBhcmFtIGNvbnZlcnRlckNvbnRleHQgVGhlIGNvbnZlcnRlciBjb250ZXh0LlxuICogQHBhcmFtIGVudGl0eVR5cGUgVGhlIGVudGl0eSB0eXBlIGZvciB0aGUgTGluZUl0ZW1cbiAqIEByZXR1cm5zIHtBbm5vdGF0aW9uVGFibGVDb2x1bW5bXX0gVGhlIGFycmF5IG9mIGNvbHVtbnMgY3JlYXRlZC5cbiAqL1xuY29uc3QgX2NyZWF0ZVJlbGF0ZWRDb2x1bW5zID0gZnVuY3Rpb24oXG5cdGNvbHVtbnNUb0JlQ3JlYXRlZDogUmVjb3JkPHN0cmluZywgUHJvcGVydHk+LFxuXHRleGlzdGluZ0NvbHVtbnM6IEFubm90YXRpb25UYWJsZUNvbHVtbltdLFxuXHRub25Tb3J0YWJsZUNvbHVtbnM6IHN0cmluZ1tdLFxuXHRjb252ZXJ0ZXJDb250ZXh0OiBDb252ZXJ0ZXJDb250ZXh0LFxuXHRlbnRpdHlUeXBlOiBFbnRpdHlUeXBlXG4pOiBBbm5vdGF0aW9uVGFibGVDb2x1bW5bXSB7XG5cdGNvbnN0IHJlbGF0ZWRDb2x1bW5zOiBBbm5vdGF0aW9uVGFibGVDb2x1bW5bXSA9IFtdO1xuXHRjb25zdCByZWxhdGVkUHJvcGVydHlOYW1lTWFwOiBSZWNvcmQ8c3RyaW5nLCBzdHJpbmc+ID0ge307XG5cdGNvbnN0IGFnZ3JlZ2F0aW9uSGVscGVyID0gbmV3IEFnZ3JlZ2F0aW9uSGVscGVyKGVudGl0eVR5cGUsIGNvbnZlcnRlckNvbnRleHQpO1xuXG5cdE9iamVjdC5rZXlzKGNvbHVtbnNUb0JlQ3JlYXRlZCkuZm9yRWFjaChuYW1lID0+IHtcblx0XHRjb25zdCBwcm9wZXJ0eSA9IGNvbHVtbnNUb0JlQ3JlYXRlZFtuYW1lXSxcblx0XHRcdGFubm90YXRpb25QYXRoID0gY29udmVydGVyQ29udGV4dC5nZXRBYnNvbHV0ZUFubm90YXRpb25QYXRoKG5hbWUpLFxuXHRcdFx0Ly8gQ2hlY2sgd2hldGhlciB0aGUgcmVsYXRlZCBjb2x1bW4gYWxyZWFkeSBleGlzdHMuXG5cdFx0XHRyZWxhdGVkQ29sdW1uID0gZXhpc3RpbmdDb2x1bW5zLmZpbmQoY29sdW1uID0+IGNvbHVtbi5uYW1lID09PSBuYW1lKTtcblx0XHRpZiAocmVsYXRlZENvbHVtbiA9PT0gdW5kZWZpbmVkKSB7XG5cdFx0XHQvLyBDYXNlIDE6IEtleSBjb250YWlucyBEYXRhRmllbGQgcHJlZml4IHRvIGVuc3VyZSBhbGwgcHJvcGVydHkgY29sdW1ucyBoYXZlIHRoZSBzYW1lIGtleSBmb3JtYXQuXG5cdFx0XHQvLyBOZXcgY3JlYXRlZCBwcm9wZXJ0eSBjb2x1bW4gaXMgc2V0IHRvIGhpZGRlbi5cblx0XHRcdHJlbGF0ZWRDb2x1bW5zLnB1c2goXG5cdFx0XHRcdGdldENvbHVtbkRlZmluaXRpb25Gcm9tUHJvcGVydHkoXG5cdFx0XHRcdFx0cHJvcGVydHksXG5cdFx0XHRcdFx0YW5ub3RhdGlvblBhdGgsXG5cdFx0XHRcdFx0bmFtZSxcblx0XHRcdFx0XHR0cnVlLFxuXHRcdFx0XHRcdGZhbHNlLFxuXHRcdFx0XHRcdG5vblNvcnRhYmxlQ29sdW1ucyxcblx0XHRcdFx0XHRhZ2dyZWdhdGlvbkhlbHBlcixcblx0XHRcdFx0XHRjb252ZXJ0ZXJDb250ZXh0XG5cdFx0XHRcdClcblx0XHRcdCk7XG5cdFx0fSBlbHNlIGlmIChcblx0XHRcdHJlbGF0ZWRDb2x1bW4uYW5ub3RhdGlvblBhdGggIT09IGFubm90YXRpb25QYXRoIHx8XG5cdFx0XHQocmVsYXRlZENvbHVtbi5wcm9wZXJ0eUluZm9zICYmIHJlbGF0ZWRDb2x1bW4ucHJvcGVydHlJbmZvcy5pbmRleE9mKG5hbWUpICE9PSAtMSlcblx0XHQpIHtcblx0XHRcdC8vIENhc2UgMjogVGhlIGV4aXN0aW5nIGNvbHVtbiBwb2ludHMgdG8gYSBMaW5lSXRlbSAob3IpXG5cdFx0XHQvLyBDYXNlIDM6IFRoaXMgaXMgYSBzZWxmIHJlZmVyZW5jZSBmcm9tIGFuIGV4aXN0aW5nIGNvbHVtbiBhbmRcblx0XHRcdC8vIGJvdGggY2FzZXMgcmVxdWlyZSBhIGR1bW15IFByb3BlcnR5SW5mbyBmb3Igc2V0dGluZyBjb3JyZWN0IGV4cG9ydCBzZXR0aW5ncy5cblxuXHRcdFx0Y29uc3QgbmV3TmFtZSA9IFwiUHJvcGVydHk6OlwiICsgbmFtZTtcblxuXHRcdFx0Ly8gQ2hlY2tpbmcgd2hldGhlciB0aGUgcmVsYXRlZCBwcm9wZXJ0eSBjb2x1bW4gaGFzIGFscmVhZHkgYmVlbiBjcmVhdGVkIGluIGEgcHJldmlvdXMgaXRlcmF0aW9uLlxuXHRcdFx0aWYgKCFleGlzdGluZ0NvbHVtbnMuc29tZShjb2x1bW4gPT4gY29sdW1uLm5hbWUgPT09IG5ld05hbWUpKSB7XG5cdFx0XHRcdC8vIENyZWF0ZSBhIG5ldyBwcm9wZXJ0eSBjb2x1bW4gd2l0aCAnUHJvcGVydHk6OicgcHJlZml4LFxuXHRcdFx0XHQvLyBTZXQgaXQgdG8gaGlkZGVuIGFzIGl0IGlzIG9ubHkgY29uc3VtZWQgYnkgQ29tcGxleCBwcm9wZXJ0eSBpbmZvcy5cblx0XHRcdFx0cmVsYXRlZENvbHVtbnMucHVzaChcblx0XHRcdFx0XHRnZXRDb2x1bW5EZWZpbml0aW9uRnJvbVByb3BlcnR5KFxuXHRcdFx0XHRcdFx0cHJvcGVydHksXG5cdFx0XHRcdFx0XHRhbm5vdGF0aW9uUGF0aCxcblx0XHRcdFx0XHRcdG5hbWUsXG5cdFx0XHRcdFx0XHRmYWxzZSxcblx0XHRcdFx0XHRcdGZhbHNlLFxuXHRcdFx0XHRcdFx0bm9uU29ydGFibGVDb2x1bW5zLFxuXHRcdFx0XHRcdFx0YWdncmVnYXRpb25IZWxwZXIsXG5cdFx0XHRcdFx0XHRjb252ZXJ0ZXJDb250ZXh0XG5cdFx0XHRcdFx0KVxuXHRcdFx0XHQpO1xuXHRcdFx0XHRyZWxhdGVkUHJvcGVydHlOYW1lTWFwW25hbWVdID0gbmV3TmFtZTtcblx0XHRcdH1cblx0XHR9XG5cdH0pO1xuXG5cdC8vIFRoZSBwcm9wZXJ0eSAnbmFtZScgaGFzIGJlZW4gcHJlZml4ZWQgd2l0aCAnUHJvcGVydHk6OicgZm9yIHVuaXF1ZW5lc3MuXG5cdC8vIFVwZGF0ZSB0aGUgc2FtZSBpbiBvdGhlciBwcm9wZXJ0eUluZm9zW10gcmVmZXJlbmNlcyB3aGljaCBwb2ludCB0byB0aGlzIHByb3BlcnR5LlxuXHRleGlzdGluZ0NvbHVtbnMuZm9yRWFjaChjb2x1bW4gPT4ge1xuXHRcdGNvbHVtbi5wcm9wZXJ0eUluZm9zID0gY29sdW1uLnByb3BlcnR5SW5mb3M/Lm1hcChwcm9wZXJ0eUluZm8gPT4gcmVsYXRlZFByb3BlcnR5TmFtZU1hcFtwcm9wZXJ0eUluZm9dID8/IHByb3BlcnR5SW5mbyk7XG5cdFx0Y29sdW1uLmFkZGl0aW9uYWxQcm9wZXJ0eUluZm9zID0gY29sdW1uLmFkZGl0aW9uYWxQcm9wZXJ0eUluZm9zPy5tYXAoXG5cdFx0XHRwcm9wZXJ0eUluZm8gPT4gcmVsYXRlZFByb3BlcnR5TmFtZU1hcFtwcm9wZXJ0eUluZm9dID8/IHByb3BlcnR5SW5mb1xuXHRcdCk7XG5cdH0pO1xuXG5cdHJldHVybiByZWxhdGVkQ29sdW1ucztcbn07XG5cbi8qKlxuICogR2V0dGluZyB0aGUgQ29sdW1uIE5hbWVcbiAqIElmIGl0IHBvaW50cyB0byBhIERhdGFGaWVsZCB3aXRoIG9uZSBwcm9wZXJ0eSBvciBEYXRhUG9pbnQgd2l0aCBvbmUgcHJvcGVydHksIGl0IHdpbGwgdXNlIHRoZSBwcm9wZXJ0eSBuYW1lXG4gKiBoZXJlIHRvIGJlIGNvbnNpc3RlbnQgd2l0aCB0aGUgZXhpc3RpbmcgZmxleCBjaGFuZ2VzLlxuICpcbiAqIEBwYXJhbSB7RGF0YUZpZWxkQWJzdHJhY3RUeXBlc30gZGF0YUZpZWxkIERpZmZlcmVudCBEYXRhRmllbGQgdHlwZXMgZGVmaW5lZCBpbiB0aGUgYW5ub3RhdGlvbnNcbiAqIEByZXR1cm5zIHtzdHJpbmd9IFRoZSBuYW1lIG9mIGFubm90YXRpb24gY29sdW1uc1xuICogQHByaXZhdGVcbiAqL1xuY29uc3QgX2dldEFubm90YXRpb25Db2x1bW5OYW1lID0gZnVuY3Rpb24oZGF0YUZpZWxkOiBEYXRhRmllbGRBYnN0cmFjdFR5cGVzKSB7XG5cdC8vIFRoaXMgaXMgbmVlZGVkIGFzIHdlIGhhdmUgZmxleGliaWxpdHkgY2hhbmdlcyBhbHJlYWR5IHRoYXQgd2UgaGF2ZSB0byBjaGVjayBhZ2FpbnN0XG5cdGlmIChpc0RhdGFGaWVsZFR5cGVzKGRhdGFGaWVsZCkpIHtcblx0XHRyZXR1cm4gZGF0YUZpZWxkLlZhbHVlPy5wYXRoO1xuXHR9IGVsc2UgaWYgKGRhdGFGaWVsZC4kVHlwZSA9PT0gVUlBbm5vdGF0aW9uVHlwZXMuRGF0YUZpZWxkRm9yQW5ub3RhdGlvbiAmJiAoZGF0YUZpZWxkLlRhcmdldD8uJHRhcmdldCBhcyBEYXRhUG9pbnQpPy5WYWx1ZT8ucGF0aCkge1xuXHRcdC8vIFRoaXMgaXMgZm9yIHJlbW92aW5nIGR1cGxpY2F0ZSBwcm9wZXJ0aWVzLiBGb3IgZXhhbXBsZSwgJ1Byb2dyZXNzJyBQcm9wZXJ0eSBpcyByZW1vdmVkIGlmIGl0IGlzIGFscmVhZHkgZGVmaW5lZCBhcyBhIERhdGFQb2ludFxuXHRcdHJldHVybiAoZGF0YUZpZWxkLlRhcmdldD8uJHRhcmdldCBhcyBEYXRhUG9pbnQpPy5WYWx1ZS5wYXRoO1xuXHR9IGVsc2Uge1xuXHRcdHJldHVybiBLZXlIZWxwZXIuZ2VuZXJhdGVLZXlGcm9tRGF0YUZpZWxkKGRhdGFGaWVsZCk7XG5cdH1cbn07XG5cbi8qKlxuICogRGV0ZXJtaW5lcyBpZiB0aGUgZGF0YSBmaWVsZCBsYWJlbHMgaGF2ZSB0byBiZSBkaXNwbGF5ZWQgaW4gdGhlIHRhYmxlLlxuICogQHBhcmFtIHtzdHJpbmd9IGZpZWxkR3JvdXBOYW1lIFRoZSBgRGF0YUZpZWxkYCBuYW1lIGJlaW5nIHByb2Nlc3NlZC5cbiAqIEBwYXJhbSB7c3RyaW5nfSB2aXN1YWxpemF0aW9uUGF0aFxuICogQHBhcmFtIHtDb252ZXJ0ZXJDb250ZXh0fSBjb252ZXJ0ZXJDb250ZXh0XG4gKiBAcmV0dXJucyB7Ym9vbGVhbn0gYHNob3dEYXRhRmllbGRzTGFiZWxgIHZhbHVlIGZyb20gdGhlIG1hbmlmZXN0XG4gKiBAcHJpdmF0ZVxuICovXG5jb25zdCBfZ2V0U2hvd0RhdGFGaWVsZHNMYWJlbCA9IGZ1bmN0aW9uKGZpZWxkR3JvdXBOYW1lOiBzdHJpbmcsIHZpc3VhbGl6YXRpb25QYXRoOiBzdHJpbmcsIGNvbnZlcnRlckNvbnRleHQ6IENvbnZlcnRlckNvbnRleHQpOiBib29sZWFuIHtcblx0Y29uc3Qgb0NvbHVtbnMgPSBjb252ZXJ0ZXJDb250ZXh0LmdldE1hbmlmZXN0Q29udHJvbENvbmZpZ3VyYXRpb24odmlzdWFsaXphdGlvblBhdGgpPy5jb2x1bW5zO1xuXHRjb25zdCBhQ29sdW1uS2V5cyA9IG9Db2x1bW5zICYmIE9iamVjdC5rZXlzKG9Db2x1bW5zKTtcblx0cmV0dXJuIChcblx0XHRhQ29sdW1uS2V5cyAmJlxuXHRcdCEhYUNvbHVtbktleXMuZmluZChmdW5jdGlvbihrZXk6IHN0cmluZykge1xuXHRcdFx0cmV0dXJuIGtleSA9PT0gZmllbGRHcm91cE5hbWUgJiYgb0NvbHVtbnNba2V5XS5zaG93RGF0YUZpZWxkc0xhYmVsO1xuXHRcdH0pXG5cdCk7XG59O1xuXG4vKipcbiAqIERldGVybWluZXMgdGhlIHJlbGF0aXZlIHBhdGggb2YgdGhlIHByb3BlcnR5IHdpdGggcmVzcGVjdCB0byB0aGUgcm9vdCBlbnRpdHkuXG4gKiBAcGFyYW0gZGF0YUZpZWxkIFRoZSBgRGF0YUZpZWxkYCBiZWluZyBwcm9jZXNzZWQuXG4gKiBAcmV0dXJucyB7c3RyaW5nfSBUaGUgcmVsYXRpdmUgcGF0aFxuICovXG5jb25zdCBfZ2V0UmVsYXRpdmVQYXRoID0gZnVuY3Rpb24oZGF0YUZpZWxkOiBEYXRhRmllbGRBYnN0cmFjdFR5cGVzKTogc3RyaW5nIHtcblx0bGV0IHJlbGF0aXZlUGF0aDogc3RyaW5nID0gXCJcIjtcblxuXHRzd2l0Y2ggKGRhdGFGaWVsZC4kVHlwZSkge1xuXHRcdGNhc2UgVUlBbm5vdGF0aW9uVHlwZXMuRGF0YUZpZWxkOlxuXHRcdGNhc2UgVUlBbm5vdGF0aW9uVHlwZXMuRGF0YUZpZWxkV2l0aE5hdmlnYXRpb25QYXRoOlxuXHRcdGNhc2UgVUlBbm5vdGF0aW9uVHlwZXMuRGF0YUZpZWxkV2l0aFVybDpcblx0XHRcdHJlbGF0aXZlUGF0aCA9IChkYXRhRmllbGQgYXMgRGF0YUZpZWxkKT8uVmFsdWU/LnBhdGg7XG5cdFx0XHRicmVhaztcblxuXHRcdGNhc2UgVUlBbm5vdGF0aW9uVHlwZXMuRGF0YUZpZWxkRm9yQW5ub3RhdGlvbjpcblx0XHRcdHJlbGF0aXZlUGF0aCA9IChkYXRhRmllbGQgYXMgRGF0YUZpZWxkRm9yQW5ub3RhdGlvbik/LlRhcmdldD8udmFsdWU7XG5cdFx0XHRicmVhaztcblxuXHRcdGNhc2UgVUlBbm5vdGF0aW9uVHlwZXMuRGF0YUZpZWxkRm9yQWN0aW9uOlxuXHRcdGNhc2UgVUlBbm5vdGF0aW9uVHlwZXMuRGF0YUZpZWxkRm9ySW50ZW50QmFzZWROYXZpZ2F0aW9uOlxuXHRcdFx0cmVsYXRpdmVQYXRoID0gS2V5SGVscGVyLmdlbmVyYXRlS2V5RnJvbURhdGFGaWVsZChkYXRhRmllbGQpO1xuXHRcdFx0YnJlYWs7XG5cdH1cblxuXHRyZXR1cm4gcmVsYXRpdmVQYXRoO1xufTtcblxuY29uc3QgX3NsaWNlQXRTbGFzaCA9IGZ1bmN0aW9uKHBhdGg6IHN0cmluZywgaXNMYXN0U2xhc2g6IGJvb2xlYW4sIGlzTGFzdFBhcnQ6IGJvb2xlYW4pIHtcblx0Y29uc3QgaVNsYXNoSW5kZXggPSBpc0xhc3RTbGFzaCA/IHBhdGgubGFzdEluZGV4T2YoXCIvXCIpIDogcGF0aC5pbmRleE9mKFwiL1wiKTtcblxuXHRpZiAoaVNsYXNoSW5kZXggPT09IC0xKSB7XG5cdFx0cmV0dXJuIHBhdGg7XG5cdH1cblx0cmV0dXJuIGlzTGFzdFBhcnQgPyBwYXRoLnN1YnN0cmluZyhpU2xhc2hJbmRleCArIDEsIHBhdGgubGVuZ3RoKSA6IHBhdGguc3Vic3RyaW5nKDAsIGlTbGFzaEluZGV4KTtcbn07XG5cbi8qKlxuICogRGV0ZXJtaW5lIHdoZXRoZXIgYSBjb2x1bW4gaXMgc29ydGFibGUuXG4gKlxuICogQHBhcmFtIGRhdGFGaWVsZCBUaGUgZGF0YSBmaWVsZCBiZWluZyBwcm9jZXNzZWRcbiAqIEBwYXJhbSBwcm9wZXJ0eVBhdGggVGhlIHByb3BlcnR5IHBhdGhcbiAqIEBwYXJhbSBub25Tb3J0YWJsZUNvbHVtbnMgQ29sbGVjdGlvbiBvZiBub24tc29ydGFibGUgY29sdW1uIG5hbWVzIGFzIHBlciBhbm5vdGF0aW9uXG4gKiBAcmV0dXJucyB7Ym9vbGVhbn0gVHJ1ZSBpZiB0aGUgY29sdW1uIGlzIHNvcnRhYmxlXG4gKi9cbmNvbnN0IF9pc0NvbHVtblNvcnRhYmxlID0gZnVuY3Rpb24oZGF0YUZpZWxkOiBEYXRhRmllbGRBYnN0cmFjdFR5cGVzLCBwcm9wZXJ0eVBhdGg6IHN0cmluZywgbm9uU29ydGFibGVDb2x1bW5zOiBzdHJpbmdbXSk6IGJvb2xlYW4ge1xuXHRsZXQgaXNTb3J0YWJsZTogYm9vbGVhbiA9IGZhbHNlO1xuXHRpZiAobm9uU29ydGFibGVDb2x1bW5zLmluZGV4T2YocHJvcGVydHlQYXRoKSA9PT0gLTEpIHtcblx0XHQvLyBDb2x1bW4gaXMgbm90IG1hcmtlZCBhcyBub24tc29ydGFibGUgdmlhIGFubm90YXRpb25cblx0XHRzd2l0Y2ggKGRhdGFGaWVsZC4kVHlwZSkge1xuXHRcdFx0Y2FzZSBVSUFubm90YXRpb25UeXBlcy5EYXRhRmllbGQ6XG5cdFx0XHRjYXNlIFVJQW5ub3RhdGlvblR5cGVzLkRhdGFGaWVsZFdpdGhVcmw6XG5cdFx0XHRcdGlzU29ydGFibGUgPSB0cnVlO1xuXHRcdFx0XHRicmVhaztcblxuXHRcdFx0Y2FzZSBVSUFubm90YXRpb25UeXBlcy5EYXRhRmllbGRGb3JJbnRlbnRCYXNlZE5hdmlnYXRpb246XG5cdFx0XHRjYXNlIFVJQW5ub3RhdGlvblR5cGVzLkRhdGFGaWVsZEZvckFjdGlvbjpcblx0XHRcdFx0Ly8gQWN0aW9uIGNvbHVtbnMgYXJlIG5vdCBzb3J0YWJsZVxuXHRcdFx0XHRpc1NvcnRhYmxlID0gZmFsc2U7XG5cdFx0XHRcdGJyZWFrO1xuXHRcdH1cblx0fVxuXHRyZXR1cm4gaXNTb3J0YWJsZTtcbn07XG5cbi8qKlxuICogUmV0dXJucyB3aGV0aGVyIGZpbHRlcmluZyBvbiB0aGUgdGFibGUgaXMgY2FzZSBzZW5zaXRpdmUuXG4gKlxuICogQHBhcmFtIHtDb252ZXJ0ZXJDb250ZXh0fSBjb252ZXJ0ZXJDb250ZXh0IFRoZSBpbnN0YW5jZSBvZiB0aGUgY29udmVydGVyIGNvbnRleHRcbiAqIEByZXR1cm5zIHtib29sZWFufSBSZXR1cm5zICdmYWxzZScgaWYgRmlsdGVyRnVuY3Rpb25zIGFubm90YXRpb24gc3VwcG9ydHMgJ3RvbG93ZXInLCBlbHNlICd0cnVlJ1xuICovXG5leHBvcnQgY29uc3QgaXNGaWx0ZXJpbmdDYXNlU2Vuc2l0aXZlID0gZnVuY3Rpb24oY29udmVydGVyQ29udGV4dDogQ29udmVydGVyQ29udGV4dCk6IGJvb2xlYW4ge1xuXHRjb25zdCBmaWx0ZXJGdW5jdGlvbnM6IEZpbHRlckZ1bmN0aW9ucyB8IHVuZGVmaW5lZCA9XG5cdFx0Y29udmVydGVyQ29udGV4dC5nZXRFbnRpdHlTZXQoKT8uYW5ub3RhdGlvbnM/LkNhcGFiaWxpdGllcz8uRmlsdGVyRnVuY3Rpb25zIHx8XG5cdFx0Y29udmVydGVyQ29udGV4dC5nZXRFbnRpdHlDb250YWluZXIoKS5hbm5vdGF0aW9ucz8uQ2FwYWJpbGl0aWVzPy5GaWx0ZXJGdW5jdGlvbnM7XG5cdHJldHVybiBBcnJheS5pc0FycmF5KGZpbHRlckZ1bmN0aW9ucykgPyAoZmlsdGVyRnVuY3Rpb25zIGFzIFN0cmluZ1tdKS5pbmRleE9mKFwidG9sb3dlclwiKSA9PT0gLTEgOiB0cnVlO1xufTtcblxuLyoqXG4gKiBSZXR1cm5zIGRlZmF1bHQgZm9ybWF0IG9wdGlvbnMgZm9yIHRleHQgZmllbGRzIGluIGEgdGFibGUuXG4gKlxuICogQHJldHVybnMge0Zvcm1hdE9wdGlvbnNUeXBlfSBDb2xsZWN0aW9uIG9mIGZvcm1hdCBvcHRpb25zIHdpdGggZGVmYXVsdCB2YWx1ZXNcbiAqL1xuZnVuY3Rpb24gZ2V0RGVmYXVsdEZvcm1hdE9wdGlvbnNGb3JUYWJsZSgpOiBGb3JtYXRPcHRpb25zVHlwZSB7XG5cdHJldHVybiB7XG5cdFx0dGV4dExpbmVzRWRpdDogNFxuXHR9O1xufVxuXG4vKipcbiAqIFJldHVybnMgZGVmYXVsdCBmb3JtYXQgb3B0aW9ucyB3aXRoIGRyYWZ0SW5kaWNhdG9yIGZvciBhIGNvbHVtbi5cbiAqIEBwYXJhbSBuYW1lXG4gKiBAcGFyYW0gc2VtYW50aWNLZXlzXG4gKiBAcmV0dXJucyB7Rm9ybWF0T3B0aW9uc1R5cGV9IENvbGxlY3Rpb24gb2YgZm9ybWF0IG9wdGlvbnMgd2l0aCBkZWZhdWx0IHZhbHVlc1xuICovXG5mdW5jdGlvbiBnZXREZWZhdWx0RHJhZnRJbmRpY2F0b3JGb3JDb2x1bW4obmFtZTogc3RyaW5nLCBzZW1hbnRpY0tleXM6IGFueVtdKSB7XG5cdGxldCBiU2VtYW50aWNLZXlGb3VuZCA9IGZhbHNlO1xuXHRjb25zdCBhU2VtYW50aWNLZXlWYWx1ZXM6IHN0cmluZ1tdID0gW107XG5cdGlmICghc2VtYW50aWNLZXlzKSB7XG5cdFx0cmV0dXJuIHt9O1xuXHR9XG5cdGZvciAobGV0IGkgPSAwOyBpIDwgc2VtYW50aWNLZXlzLmxlbmd0aDsgaSsrKSB7XG5cdFx0YVNlbWFudGljS2V5VmFsdWVzLnB1c2goc2VtYW50aWNLZXlzW2ldLnZhbHVlKTtcblx0XHRpZiAoc2VtYW50aWNLZXlzW2ldLnZhbHVlID09PSBuYW1lKSB7XG5cdFx0XHRiU2VtYW50aWNLZXlGb3VuZCA9IHRydWU7XG5cdFx0fVxuXHR9XG5cdGlmIChiU2VtYW50aWNLZXlGb3VuZCkge1xuXHRcdHJldHVybiB7XG5cdFx0XHRoYXNEcmFmdEluZGljYXRvcjogdHJ1ZSxcblx0XHRcdHNlbWFudGlja2V5czogYVNlbWFudGljS2V5VmFsdWVzXG5cdFx0fTtcblx0fSBlbHNlIHtcblx0XHRyZXR1cm4ge307XG5cdH1cbn1cblxuLyoqXG4gKiBSZXR1cm5zIGxpbmUgaXRlbXMgZnJvbSBtZXRhZGF0YSBhbm5vdGF0aW9ucy5cbiAqXG4gKiBAcGFyYW0ge0xpbmVJdGVtfSBsaW5lSXRlbUFubm90YXRpb24gQ29sbGVjdGlvbiBvZiBkYXRhIGZpZWxkcyB3aXRoIHRoZWlyIGFubm90YXRpb25zXG4gKiBAcGFyYW0ge3N0cmluZ30gdmlzdWFsaXphdGlvblBhdGggVGhlIHZpc3VhbGl6YXRpb24gcGF0aFxuICogQHBhcmFtIHtDb252ZXJ0ZXJDb250ZXh0fSBjb252ZXJ0ZXJDb250ZXh0IFRoZSBjb252ZXJ0ZXIgY29udGV4dFxuICogQHJldHVybnMge1RhYmxlQ29sdW1uW119IFRoZSBjb2x1bW5zIGZyb20gdGhlIGFubm90YXRpb25zXG4gKi9cbmNvbnN0IGdldENvbHVtbnNGcm9tQW5ub3RhdGlvbnMgPSBmdW5jdGlvbihcblx0bGluZUl0ZW1Bbm5vdGF0aW9uOiBMaW5lSXRlbSxcblx0dmlzdWFsaXphdGlvblBhdGg6IHN0cmluZyxcblx0Y29udmVydGVyQ29udGV4dDogQ29udmVydGVyQ29udGV4dFxuKTogVGFibGVDb2x1bW5bXSB7XG5cdGNvbnN0IGVudGl0eVR5cGUgPSBjb252ZXJ0ZXJDb250ZXh0LmdldEFubm90YXRpb25FbnRpdHlUeXBlKGxpbmVJdGVtQW5ub3RhdGlvbiksXG5cdFx0YW5ub3RhdGlvbkNvbHVtbnM6IEFubm90YXRpb25UYWJsZUNvbHVtbltdID0gW10sXG5cdFx0Y29sdW1uc1RvQmVDcmVhdGVkOiBSZWNvcmQ8c3RyaW5nLCBQcm9wZXJ0eT4gPSB7fSxcblx0XHRub25Tb3J0YWJsZUNvbHVtbnM6IHN0cmluZ1tdID0gZ2V0Tm9uU29ydGFibGVQcm9wZXJ0aWVzUmVzdHJpY3Rpb25zKGNvbnZlcnRlckNvbnRleHQuZ2V0RW50aXR5U2V0KCkpLFxuXHRcdHRhYmxlTWFuaWZlc3RTZXR0aW5nczogVGFibGVNYW5pZmVzdENvbmZpZ3VyYXRpb24gPSBjb252ZXJ0ZXJDb250ZXh0LmdldE1hbmlmZXN0Q29udHJvbENvbmZpZ3VyYXRpb24odmlzdWFsaXphdGlvblBhdGgpLFxuXHRcdHRhYmxlVHlwZTogVGFibGVUeXBlID0gdGFibGVNYW5pZmVzdFNldHRpbmdzPy50YWJsZVNldHRpbmdzPy50eXBlIHx8IFwiUmVzcG9uc2l2ZVRhYmxlXCI7XG5cdGNvbnN0IHNlbWFudGljS2V5cyA9IGNvbnZlcnRlckNvbnRleHQuZ2V0QW5ub3RhdGlvbnNCeVRlcm0oXCJDb21tb25cIiwgXCJjb20uc2FwLnZvY2FidWxhcmllcy5Db21tb24udjEuU2VtYW50aWNLZXlcIiwgW1xuXHRcdGNvbnZlcnRlckNvbnRleHQuZ2V0RW50aXR5VHlwZSgpXG5cdF0pWzBdO1xuXHRpZiAobGluZUl0ZW1Bbm5vdGF0aW9uKSB7XG5cdFx0bGluZUl0ZW1Bbm5vdGF0aW9uLmZvckVhY2gobGluZUl0ZW0gPT4ge1xuXHRcdFx0aWYgKCFfaXNWYWxpZENvbHVtbihsaW5lSXRlbSkpIHtcblx0XHRcdFx0cmV0dXJuO1xuXHRcdFx0fVxuXHRcdFx0Y29uc3Qgc2VtYW50aWNPYmplY3RBbm5vdGF0aW9uUGF0aCA9XG5cdFx0XHRcdGlzRGF0YUZpZWxkVHlwZXMobGluZUl0ZW0pICYmIGxpbmVJdGVtLlZhbHVlPy4kdGFyZ2V0Py5mdWxseVF1YWxpZmllZE5hbWVcblx0XHRcdFx0XHQ/IGdldFNlbWFudGljT2JqZWN0UGF0aChjb252ZXJ0ZXJDb250ZXh0LCBsaW5lSXRlbSlcblx0XHRcdFx0XHQ6IHVuZGVmaW5lZDtcblx0XHRcdGNvbnN0IHJlbGF0aXZlUGF0aCA9IF9nZXRSZWxhdGl2ZVBhdGgobGluZUl0ZW0pO1xuXHRcdFx0Ly8gRGV0ZXJtaW5lIHByb3BlcnRpZXMgd2hpY2ggYXJlIGNvbnN1bWVkIGJ5IHRoaXMgTGluZUl0ZW0uXG5cdFx0XHRjb25zdCByZWxhdGVkUHJvcGVydGllc0luZm86IENvbXBsZXhQcm9wZXJ0eUluZm8gPSBjb2xsZWN0UmVsYXRlZFByb3BlcnRpZXNSZWN1cnNpdmVseShsaW5lSXRlbSwgY29udmVydGVyQ29udGV4dCwgdGFibGVUeXBlKTtcblx0XHRcdGNvbnN0IHJlbGF0ZWRQcm9wZXJ0eU5hbWVzOiBzdHJpbmdbXSA9IE9iamVjdC5rZXlzKHJlbGF0ZWRQcm9wZXJ0aWVzSW5mby5wcm9wZXJ0aWVzKTtcblx0XHRcdGNvbnN0IGFkZGl0aW9uYWxQcm9wZXJ0eU5hbWVzOiBzdHJpbmdbXSA9IE9iamVjdC5rZXlzKHJlbGF0ZWRQcm9wZXJ0aWVzSW5mby5hZGRpdGlvbmFsUHJvcGVydGllcyk7XG5cdFx0XHRjb25zdCBncm91cFBhdGg6IHN0cmluZyA9IF9zbGljZUF0U2xhc2gocmVsYXRpdmVQYXRoLCB0cnVlLCBmYWxzZSk7XG5cdFx0XHRjb25zdCBpc0dyb3VwOiBib29sZWFuID0gZ3JvdXBQYXRoICE9IHJlbGF0aXZlUGF0aDtcblx0XHRcdGNvbnN0IHNMYWJlbDogc3RyaW5nIHwgdW5kZWZpbmVkID0gX2dldExhYmVsKGxpbmVJdGVtLCBpc0dyb3VwKTtcblx0XHRcdGNvbnN0IG5hbWUgPSBfZ2V0QW5ub3RhdGlvbkNvbHVtbk5hbWUobGluZUl0ZW0pO1xuXHRcdFx0Y29uc3QgaXNGaWVsZEdyb3VwQ29sdW1uOiBib29sZWFuID0gZ3JvdXBQYXRoLmluZGV4T2YoXCJAY29tLnNhcC52b2NhYnVsYXJpZXMuVUkudjEuRmllbGRHcm91cFwiKSA+IC0xO1xuXHRcdFx0Y29uc3Qgc2hvd0RhdGFGaWVsZHNMYWJlbDogYm9vbGVhbiA9IGlzRmllbGRHcm91cENvbHVtblxuXHRcdFx0XHQ/IF9nZXRTaG93RGF0YUZpZWxkc0xhYmVsKG5hbWUsIHZpc3VhbGl6YXRpb25QYXRoLCBjb252ZXJ0ZXJDb250ZXh0KVxuXHRcdFx0XHQ6IGZhbHNlO1xuXHRcdFx0Y29uc3QgZGF0YVR5cGU6IHN0cmluZyB8IHVuZGVmaW5lZCA9IGdldERhdGFGaWVsZERhdGFUeXBlKGxpbmVJdGVtKTtcblx0XHRcdGNvbnN0IHNEYXRlSW5wdXRGb3JtYXQ6IHN0cmluZyB8IHVuZGVmaW5lZCA9IGRhdGFUeXBlID09PSBcIkVkbS5EYXRlXCIgPyBcIllZWVktTU0tRERcIiA6IHVuZGVmaW5lZDtcblx0XHRcdGNvbnN0IGZvcm1hdE9wdGlvbnMgPSB7XG5cdFx0XHRcdC4uLmdldERlZmF1bHRGb3JtYXRPcHRpb25zRm9yVGFibGUoKSxcblx0XHRcdFx0Li4uZ2V0RGVmYXVsdERyYWZ0SW5kaWNhdG9yRm9yQ29sdW1uKG5hbWUsIHNlbWFudGljS2V5cylcblx0XHRcdH07XG5cdFx0XHRsZXQgZmllbGRHcm91cEhpZGRlbkV4cHJlc3Npb25zOiBCaW5kaW5nRXhwcmVzc2lvbjxzdHJpbmc+O1xuXHRcdFx0aWYgKFxuXHRcdFx0XHRsaW5lSXRlbS4kVHlwZSA9PT0gVUlBbm5vdGF0aW9uVHlwZXMuRGF0YUZpZWxkRm9yQW5ub3RhdGlvbiAmJlxuXHRcdFx0XHRsaW5lSXRlbS5UYXJnZXQ/LiR0YXJnZXQ/LiRUeXBlID09PSBVSUFubm90YXRpb25UeXBlcy5GaWVsZEdyb3VwVHlwZVxuXHRcdFx0KSB7XG5cdFx0XHRcdGZpZWxkR3JvdXBIaWRkZW5FeHByZXNzaW9ucyA9IF9nZXRGaWVsZEdyb3VwSGlkZGVuRXhwcmVzc2lvbnMobGluZUl0ZW0sIGZvcm1hdE9wdGlvbnMpO1xuXHRcdFx0fVxuXHRcdFx0Y29uc3QgZXhwb3J0U2V0dGluZ3MgPSB7XG5cdFx0XHRcdHRlbXBsYXRlOiByZWxhdGVkUHJvcGVydGllc0luZm8uZXhwb3J0U2V0dGluZ3NUZW1wbGF0ZSxcblx0XHRcdFx0d3JhcDogcmVsYXRlZFByb3BlcnRpZXNJbmZvLmV4cG9ydFNldHRpbmdzV3JhcHBpbmcsXG5cdFx0XHRcdHR5cGU6IGRhdGFUeXBlID8gX2dldEV4cG9ydERhdGFUeXBlKGRhdGFUeXBlLCByZWxhdGVkUHJvcGVydHlOYW1lcy5sZW5ndGggPiAxKSA6IHVuZGVmaW5lZCxcblx0XHRcdFx0aW5wdXRGb3JtYXQ6IHNEYXRlSW5wdXRGb3JtYXQsXG5cdFx0XHRcdGRlbGltaXRlcjogZGF0YVR5cGUgPT09IFwiRWRtLkludDY0XCIgPyB0cnVlIDogZmFsc2UsXG5cdFx0XHRcdHRydWVWYWx1ZTogZGF0YVR5cGUgPT09IFwiRWRtLkJvb2xlYW5cIiA/IFwiWWVzXCIgOiB1bmRlZmluZWQsXG5cdFx0XHRcdGZhbHNlVmFsdWU6IGRhdGFUeXBlID09PSBcIkVkbS5Cb29sZWFuXCIgPyBcIk5vXCIgOiB1bmRlZmluZWRcblx0XHRcdH07XG5cdFx0XHRjb25zdCBwcm9wZXJ0eVR5cGVDb25maWcgPSBkYXRhVHlwZSAmJiBnZXRUeXBlQ29uZmlnKGxpbmVJdGVtLCBkYXRhVHlwZSk7XG5cdFx0XHRjb25zdCBvVHlwZUNvbmZpZyA9IHByb3BlcnR5VHlwZUNvbmZpZ1xuXHRcdFx0XHQ/IHtcblx0XHRcdFx0XHRcdGNsYXNzTmFtZTogZGF0YVR5cGUsXG5cdFx0XHRcdFx0XHRvRm9ybWF0T3B0aW9uczoge1xuXHRcdFx0XHRcdFx0XHQuLi5mb3JtYXRPcHRpb25zLFxuXHRcdFx0XHRcdFx0XHQuLi5wcm9wZXJ0eVR5cGVDb25maWcuZm9ybWF0T3B0aW9uc1xuXHRcdFx0XHRcdFx0fSxcblx0XHRcdFx0XHRcdG9Db25zdHJhaW50czogcHJvcGVydHlUeXBlQ29uZmlnLmNvbnN0cmFpbnRzXG5cdFx0XHRcdCAgfVxuXHRcdFx0XHQ6IHVuZGVmaW5lZDtcblx0XHRcdGxldCB2aXN1YWxTZXR0aW5nczogVmlzdWFsU2V0dGluZ3MgPSB7fTtcblx0XHRcdGlmIChyZWxhdGVkUHJvcGVydGllc0luZm8udmlzdWFsU2V0dGluZ3NUb0JlRXhjbHVkZWQpIHtcblx0XHRcdFx0Ly8gSW4gY2FzZSBvZiB0ZXh0IGFycmFuZ2VtZW50IGFubm90YXRpb24gd2l0aCBkaXNwbGF5IG1vZGUgYXMgdGV4dCBvbmx5LCBleGNsdWRlIHRleHQgcHJvcGVydHkgZnJvbSB0aGUgd2lkdGggY2FsY3VsYXRpb25cblx0XHRcdFx0dmlzdWFsU2V0dGluZ3MgPSB7XG5cdFx0XHRcdFx0d2lkdGhDYWxjdWxhdGlvbjoge1xuXHRcdFx0XHRcdFx0ZXhjbHVkZVByb3BlcnRpZXM6IFwiUHJvcGVydHk6OlwiICsgcmVsYXRlZFByb3BlcnRpZXNJbmZvLnZpc3VhbFNldHRpbmdzVG9CZUV4Y2x1ZGVkXG5cdFx0XHRcdFx0fVxuXHRcdFx0XHR9O1xuXHRcdFx0fSBlbHNlIGlmICghZGF0YVR5cGUgfHwgIW9UeXBlQ29uZmlnKSB7XG5cdFx0XHRcdC8vIGZvciBjaGFydHNcblx0XHRcdFx0dmlzdWFsU2V0dGluZ3Mud2lkdGhDYWxjdWxhdGlvbiA9IG51bGw7XG5cdFx0XHR9XG5cblx0XHRcdC8vIFRPRE86IEZvciBzaXR1YXRpb24gUE9DIC0gaW5jcmVhc2Ugd2lkdGggb2YgdGhlIGNvbHVtbiB3aXRoIHRoZSBzaXR1YXRpb25zIGluZGljYXRvciAtIHdvcmtzIGZvciB0aGUgc2l0dWF0aW9ucyBkZW1vIGFwcCBvbmx5IVxuXHRcdFx0Ly8gTWlnaHQgYmUgYSBnb29kIGlkZWEgdG8gbW92ZSB0aGUgY29tcGxldGUgY29sdW1uIHdpZHRoIGRldGVybWluYXRpb24gdG8gdGhlIGNvbnZlcnRlciwgdGhhdCB3b3VsZCBhbGxvdyB1cyB0byB3aWRlbiB0aGUgY29sdW1ucyBhcyBuZWVkZWQuIFRoaXMgd29ya2Fyb3VuZCBvbmx5IGRlYWxzIHdpdGggRGF0ZSBjb2x1bW5zLlxuXHRcdFx0Y29uc3QgeyBoYXNEcmFmdEluZGljYXRvciB9ID0gZ2V0RGVmYXVsdERyYWZ0SW5kaWNhdG9yRm9yQ29sdW1uKG5hbWUsIHNlbWFudGljS2V5cyk7XG5cdFx0XHRjb25zdCB3aWR0aE92ZXJyaWRlID1cblx0XHRcdFx0KGNvbnZlcnRlckNvbnRleHQuZ2V0RW50aXR5VHlwZSgpLmFubm90YXRpb25zIGFzIGFueSkuRkU/LlNpdHVhdGlvbnMgJiZcblx0XHRcdFx0aGFzRHJhZnRJbmRpY2F0b3IgJiZcblx0XHRcdFx0bGluZUl0ZW0uJFR5cGUgPT09IFVJQW5ub3RhdGlvblR5cGVzLkRhdGFGaWVsZCAmJlxuXHRcdFx0XHRsaW5lSXRlbS5WYWx1ZS4kdGFyZ2V0LnR5cGUgPT09IFwiRWRtLkRhdGVcIlxuXHRcdFx0XHRcdD8gXCIxMWVtXCJcblx0XHRcdFx0XHQ6IHVuZGVmaW5lZDtcblxuXHRcdFx0Y29uc3Qgb0NvbHVtbjogYW55ID0ge1xuXHRcdFx0XHRrZXk6IEtleUhlbHBlci5nZW5lcmF0ZUtleUZyb21EYXRhRmllbGQobGluZUl0ZW0pLFxuXHRcdFx0XHR0eXBlOiBDb2x1bW5UeXBlLkFubm90YXRpb24sXG5cdFx0XHRcdGxhYmVsOiBzTGFiZWwsXG5cdFx0XHRcdGdyb3VwTGFiZWw6IGlzR3JvdXAgPyBfZ2V0TGFiZWwobGluZUl0ZW0pIDogbnVsbCxcblx0XHRcdFx0Z3JvdXA6IGlzR3JvdXAgPyBncm91cFBhdGggOiBudWxsLFxuXHRcdFx0XHRGaWVsZEdyb3VwSGlkZGVuRXhwcmVzc2lvbnM6IGZpZWxkR3JvdXBIaWRkZW5FeHByZXNzaW9ucyxcblx0XHRcdFx0YW5ub3RhdGlvblBhdGg6IGNvbnZlcnRlckNvbnRleHQuZ2V0RW50aXR5U2V0QmFzZWRBbm5vdGF0aW9uUGF0aChsaW5lSXRlbS5mdWxseVF1YWxpZmllZE5hbWUpLFxuXHRcdFx0XHRzZW1hbnRpY09iamVjdFBhdGg6IHNlbWFudGljT2JqZWN0QW5ub3RhdGlvblBhdGgsXG5cdFx0XHRcdGF2YWlsYWJpbGl0eTogaXNEYXRhRmllbGRBbHdheXNIaWRkZW4obGluZUl0ZW0pID8gQXZhaWxhYmlsaXR5VHlwZS5IaWRkZW4gOiBBdmFpbGFiaWxpdHlUeXBlLkRlZmF1bHQsXG5cdFx0XHRcdG5hbWU6IG5hbWUsXG5cdFx0XHRcdHNob3dEYXRhRmllbGRzTGFiZWw6IHNob3dEYXRhRmllbGRzTGFiZWwsXG5cdFx0XHRcdHJlbGF0aXZlUGF0aDogcmVsYXRpdmVQYXRoLFxuXHRcdFx0XHRzb3J0YWJsZTogX2lzQ29sdW1uU29ydGFibGUobGluZUl0ZW0sIHJlbGF0aXZlUGF0aCwgbm9uU29ydGFibGVDb2x1bW5zKSxcblx0XHRcdFx0cHJvcGVydHlJbmZvczogcmVsYXRlZFByb3BlcnR5TmFtZXMubGVuZ3RoID4gMCA/IHJlbGF0ZWRQcm9wZXJ0eU5hbWVzIDogdW5kZWZpbmVkLFxuXHRcdFx0XHRhZGRpdGlvbmFsUHJvcGVydHlJbmZvczogYWRkaXRpb25hbFByb3BlcnR5TmFtZXMubGVuZ3RoID4gMCA/IGFkZGl0aW9uYWxQcm9wZXJ0eU5hbWVzIDogdW5kZWZpbmVkLFxuXHRcdFx0XHRleHBvcnRTZXR0aW5nczogZXhwb3J0U2V0dGluZ3MsXG5cdFx0XHRcdHdpZHRoOiBsaW5lSXRlbS5hbm5vdGF0aW9ucz8uSFRNTDU/LkNzc0RlZmF1bHRzPy53aWR0aCB8fCB3aWR0aE92ZXJyaWRlIHx8IHVuZGVmaW5lZCxcblx0XHRcdFx0aXNOYXZpZ2FibGU6IHRydWUsXG5cdFx0XHRcdGZvcm1hdE9wdGlvbnM6IGZvcm1hdE9wdGlvbnMsXG5cdFx0XHRcdGV4cG9ydENvbnRhY3RQcm9wZXJ0eTogcmVsYXRlZFByb3BlcnRpZXNJbmZvLmV4cG9ydFNldHRpbmdzQ29udGFjdFByb3BlcnR5LFxuXHRcdFx0XHRjYXNlU2Vuc2l0aXZlOiBpc0ZpbHRlcmluZ0Nhc2VTZW5zaXRpdmUoY29udmVydGVyQ29udGV4dCksXG5cdFx0XHRcdHR5cGVDb25maWc6IG9UeXBlQ29uZmlnLFxuXHRcdFx0XHR2aXN1YWxTZXR0aW5nczogdmlzdWFsU2V0dGluZ3Ncblx0XHRcdH07XG5cdFx0XHRjb25zdCBzVG9vbHRpcCA9IF9nZXRUb29sdGlwKGxpbmVJdGVtKTtcblx0XHRcdGlmIChzVG9vbHRpcCkge1xuXHRcdFx0XHRvQ29sdW1uLnRvb2x0aXAgPSBzVG9vbHRpcDtcblx0XHRcdH1cblxuXHRcdFx0YW5ub3RhdGlvbkNvbHVtbnMucHVzaChvQ29sdW1uIGFzIEFubm90YXRpb25UYWJsZUNvbHVtbik7XG5cblx0XHRcdC8vIENvbGxlY3QgaW5mb3JtYXRpb24gb2YgcmVsYXRlZCBjb2x1bW5zIHRvIGJlIGNyZWF0ZWQuXG5cdFx0XHRyZWxhdGVkUHJvcGVydHlOYW1lcy5mb3JFYWNoKG5hbWUgPT4ge1xuXHRcdFx0XHRjb2x1bW5zVG9CZUNyZWF0ZWRbbmFtZV0gPSByZWxhdGVkUHJvcGVydGllc0luZm8ucHJvcGVydGllc1tuYW1lXTtcblx0XHRcdH0pO1xuXG5cdFx0XHQvLyBDcmVhdGUgY29sdW1ucyBmb3IgYWRkaXRpb25hbCBwcm9wZXJ0aWVzIGlkZW50aWZpZWQgZm9yIEFMUCB1c2UgY2FzZS5cblx0XHRcdGFkZGl0aW9uYWxQcm9wZXJ0eU5hbWVzLmZvckVhY2gobmFtZSA9PiB7XG5cdFx0XHRcdC8vIEludGVudGlvbmFsIG92ZXJ3cml0ZSBhcyB3ZSByZXF1aXJlIG9ubHkgb25lIG5ldyBQcm9wZXJ0eUluZm8gZm9yIGEgcmVsYXRlZCBQcm9wZXJ0eS5cblx0XHRcdFx0Y29sdW1uc1RvQmVDcmVhdGVkW25hbWVdID0gcmVsYXRlZFByb3BlcnRpZXNJbmZvLmFkZGl0aW9uYWxQcm9wZXJ0aWVzW25hbWVdO1xuXHRcdFx0fSk7XG5cdFx0fSk7XG5cdH1cblxuXHQvLyBHZXQgY29sdW1ucyBmcm9tIHRoZSBQcm9wZXJ0aWVzIG9mIEVudGl0eVR5cGVcblx0bGV0IHRhYmxlQ29sdW1ucyA9IGdldENvbHVtbnNGcm9tRW50aXR5VHlwZShcblx0XHRjb2x1bW5zVG9CZUNyZWF0ZWQsXG5cdFx0ZW50aXR5VHlwZSxcblx0XHRhbm5vdGF0aW9uQ29sdW1ucyxcblx0XHRub25Tb3J0YWJsZUNvbHVtbnMsXG5cdFx0Y29udmVydGVyQ29udGV4dCxcblx0XHR0YWJsZVR5cGVcblx0KTtcblx0dGFibGVDb2x1bW5zID0gdGFibGVDb2x1bW5zLmNvbmNhdChhbm5vdGF0aW9uQ29sdW1ucyk7XG5cblx0Ly8gQ3JlYXRlIGEgcHJvcGVydHlJbmZvIGZvciBlYWNoIHJlbGF0ZWQgcHJvcGVydHkuXG5cdGNvbnN0IHJlbGF0ZWRDb2x1bW5zID0gX2NyZWF0ZVJlbGF0ZWRDb2x1bW5zKGNvbHVtbnNUb0JlQ3JlYXRlZCwgdGFibGVDb2x1bW5zLCBub25Tb3J0YWJsZUNvbHVtbnMsIGNvbnZlcnRlckNvbnRleHQsIGVudGl0eVR5cGUpO1xuXHR0YWJsZUNvbHVtbnMgPSB0YWJsZUNvbHVtbnMuY29uY2F0KHJlbGF0ZWRDb2x1bW5zKTtcblxuXHRyZXR1cm4gdGFibGVDb2x1bW5zO1xufTtcblxuLyoqXG4gKiBHZXRzIHRoZSBwcm9wZXJ0eSBuYW1lcyBmcm9tIHRoZSBtYW5pZmVzdCBhbmQgY2hlY2tzIGFnYWluc3QgZXhpc3RpbmcgcHJvcGVydGllcyBhbHJlYWR5IGFkZGVkIGJ5IGFubm90YXRpb25zLlxuICogSWYgYSBub3QgeWV0IHN0b3JlZCBwcm9wZXJ0eSBpcyBmb3VuZCBpdCBhZGRzIGl0IGZvciBzb3J0aW5nIGFuZCBmaWx0ZXJpbmcgb25seSB0byB0aGUgYW5ub3RhdGlvbkNvbHVtbnMuXG4gKiBAcGFyYW0ge3N0cmluZ1tdIHwgdW5kZWZpbmVkfSBwcm9wZXJ0aWVzXG4gKiBAcGFyYW0ge0Fubm90YXRpb25UYWJsZUNvbHVtbltdfSBhbm5vdGF0aW9uQ29sdW1uc1xuICogQHBhcmFtIHtDb252ZXJ0ZXJDb250ZXh0fSBjb252ZXJ0ZXJDb250ZXh0XG4gKiBAcGFyYW0gZW50aXR5VHlwZVxuICogQHJldHVybnMge3N0cmluZ1tdfSBUaGUgY29sdW1ucyBmcm9tIHRoZSBhbm5vdGF0aW9uc1xuICovXG5jb25zdCBfZ2V0UHJvcGVydHlOYW1lcyA9IGZ1bmN0aW9uKFxuXHRwcm9wZXJ0aWVzOiBzdHJpbmdbXSB8IHVuZGVmaW5lZCxcblx0YW5ub3RhdGlvbkNvbHVtbnM6IEFubm90YXRpb25UYWJsZUNvbHVtbltdLFxuXHRjb252ZXJ0ZXJDb250ZXh0OiBDb252ZXJ0ZXJDb250ZXh0LFxuXHRlbnRpdHlUeXBlOiBFbnRpdHlUeXBlXG4pOiBzdHJpbmdbXSB8IHVuZGVmaW5lZCB7XG5cdGxldCBtYXRjaGVkUHJvcGVydGllczogc3RyaW5nW10gfCB1bmRlZmluZWQ7XG5cdGlmIChwcm9wZXJ0aWVzKSB7XG5cdFx0bWF0Y2hlZFByb3BlcnRpZXMgPSBwcm9wZXJ0aWVzLm1hcChmdW5jdGlvbihwcm9wZXJ0eVBhdGgpIHtcblx0XHRcdGNvbnN0IGFubm90YXRpb25Db2x1bW4gPSBhbm5vdGF0aW9uQ29sdW1ucy5maW5kKGZ1bmN0aW9uKGFubm90YXRpb25Db2x1bW4pIHtcblx0XHRcdFx0cmV0dXJuIGFubm90YXRpb25Db2x1bW4ucmVsYXRpdmVQYXRoID09PSBwcm9wZXJ0eVBhdGggJiYgYW5ub3RhdGlvbkNvbHVtbi5wcm9wZXJ0eUluZm9zID09PSB1bmRlZmluZWQ7XG5cdFx0XHR9KTtcblx0XHRcdGlmIChhbm5vdGF0aW9uQ29sdW1uKSB7XG5cdFx0XHRcdHJldHVybiBhbm5vdGF0aW9uQ29sdW1uLm5hbWU7XG5cdFx0XHR9IGVsc2Uge1xuXHRcdFx0XHRjb25zdCByZWxhdGVkQ29sdW1ucyA9IF9jcmVhdGVSZWxhdGVkQ29sdW1ucyhcblx0XHRcdFx0XHR7IFtwcm9wZXJ0eVBhdGhdOiBlbnRpdHlUeXBlLnJlc29sdmVQYXRoKHByb3BlcnR5UGF0aCkgfSxcblx0XHRcdFx0XHRhbm5vdGF0aW9uQ29sdW1ucyxcblx0XHRcdFx0XHRbXSxcblx0XHRcdFx0XHRjb252ZXJ0ZXJDb250ZXh0LFxuXHRcdFx0XHRcdGVudGl0eVR5cGVcblx0XHRcdFx0KTtcblx0XHRcdFx0YW5ub3RhdGlvbkNvbHVtbnMucHVzaChyZWxhdGVkQ29sdW1uc1swXSk7XG5cdFx0XHRcdHJldHVybiByZWxhdGVkQ29sdW1uc1swXS5uYW1lO1xuXHRcdFx0fVxuXHRcdH0pO1xuXHR9XG5cblx0cmV0dXJuIG1hdGNoZWRQcm9wZXJ0aWVzO1xufTtcblxuY29uc3QgX2FwcGVuZEN1c3RvbVRlbXBsYXRlID0gZnVuY3Rpb24ocHJvcGVydGllczogc3RyaW5nW10pOiBzdHJpbmcge1xuXHRyZXR1cm4gcHJvcGVydGllc1xuXHRcdC5tYXAocHJvcGVydHkgPT4ge1xuXHRcdFx0cmV0dXJuIGB7JHtwcm9wZXJ0aWVzLmluZGV4T2YocHJvcGVydHkpfX1gO1xuXHRcdH0pXG5cdFx0LmpvaW4oYCR7XCJcXG5cIn1gKTtcbn07XG5cbi8qKlxuICogUmV0cmlldmVzIHRoZSB0YWJsZSBjb2x1bW4gcHJvcGVydHkgdmFsdWUgYmFzZWQgb24gY2VydGFpbiBjb25kaXRpb25zLlxuICpcbiAqIE1hbmlmZXN0IGRlZmluZWQgcHJvcGVydHkgdmFsdWUgZm9yIGN1c3RvbSAvIGFubm90YXRpb24gY29sdW1uc1xuICogRGVmYXVsdCBwcm9wZXJ0eSB2YWx1ZSBmb3IgY3VzdG9tIGNvbHVtbiBpZiBub3Qgb3ZlcndyaXR0ZW4gaW4gbWFuaWZlc3QuXG4gKlxuICogQHBhcmFtIHthbnl9IHByb3BlcnR5IFRoZSBjb2x1bW4gcHJvcGVydHkgZGVmaW5lZCBpbiB0aGUgbWFuaWZlc3RcbiAqIEBwYXJhbSB7YW55fSBkZWZhdWx0VmFsdWUgVGhlIGRlZmF1bHQgdmFsdWUgb2YgdGhlIHByb3BlcnR5XG4gKiBAcGFyYW0ge2Jvb2xlYW59IGlzQW5ub3RhdGlvbkNvbHVtbiBXaGV0aGVyIHRoZSBjb2x1bW4sIGRlZmluZWQgaW4gbWFuaWZlc3QsIGNvcnJlc3BvbmRzIHRvIGFuIGV4aXN0aW5nIGFubm90YXRpb24gY29sdW1uLlxuICogQHJldHVybnMge2FueX0gRGV0ZXJtaW5lZCBwcm9wZXJ0eSB2YWx1ZSBmb3IgdGhlIGNvbHVtblxuICovXG5jb25zdCBfZ2V0TWFuaWZlc3RPckRlZmF1bHRWYWx1ZSA9IGZ1bmN0aW9uKHByb3BlcnR5OiBhbnksIGRlZmF1bHRWYWx1ZTogYW55LCBpc0Fubm90YXRpb25Db2x1bW46IGJvb2xlYW4pOiBhbnkge1xuXHRpZiAocHJvcGVydHkgPT09IHVuZGVmaW5lZCkge1xuXHRcdC8vIElmIGFubm90YXRpb24gY29sdW1uIGhhcyBubyBwcm9wZXJ0eSBkZWZpbmVkIGluIG1hbmlmZXN0LFxuXHRcdC8vIGRvIG5vdCBvdmVyd3JpdGUgaXQgd2l0aCBtYW5pZmVzdCBjb2x1bW4ncyBkZWZhdWx0IHZhbHVlLlxuXHRcdHJldHVybiBpc0Fubm90YXRpb25Db2x1bW4gPyB1bmRlZmluZWQgOiBkZWZhdWx0VmFsdWU7XG5cdH1cblx0Ly8gUmV0dXJuIHdoYXQgaXMgZGVmaW5lZCBpbiBtYW5pZmVzdC5cblx0cmV0dXJuIHByb3BlcnR5O1xufTtcblxuLyoqXG4gKiBSZXR1cm5zIHRhYmxlIGNvbHVtbiBkZWZpbml0aW9ucyBmcm9tIG1hbmlmZXN0LlxuICogQHBhcmFtIGNvbHVtbnNcbiAqIEBwYXJhbSBhbm5vdGF0aW9uQ29sdW1uc1xuICogQHBhcmFtIGNvbnZlcnRlckNvbnRleHRcbiAqIEBwYXJhbSBlbnRpdHlUeXBlXG4gKiBAcGFyYW0gbmF2aWdhdGlvblNldHRpbmdzXG4gKiBAcmV0dXJucyB7UmVjb3JkPHN0cmluZywgQ3VzdG9tQ29sdW1uPn0gVGhlIGNvbHVtbnMgZnJvbSB0aGUgbWFuaWZlc3RcbiAqL1xuY29uc3QgZ2V0Q29sdW1uc0Zyb21NYW5pZmVzdCA9IGZ1bmN0aW9uKFxuXHRjb2x1bW5zOiBSZWNvcmQ8c3RyaW5nLCBNYW5pZmVzdFRhYmxlQ29sdW1uPixcblx0YW5ub3RhdGlvbkNvbHVtbnM6IEFubm90YXRpb25UYWJsZUNvbHVtbltdLFxuXHRjb252ZXJ0ZXJDb250ZXh0OiBDb252ZXJ0ZXJDb250ZXh0LFxuXHRlbnRpdHlUeXBlOiBFbnRpdHlUeXBlLFxuXHRuYXZpZ2F0aW9uU2V0dGluZ3M/OiBOYXZpZ2F0aW9uU2V0dGluZ3NDb25maWd1cmF0aW9uXG4pOiBSZWNvcmQ8c3RyaW5nLCBDdXN0b21Db2x1bW4+IHtcblx0Y29uc3QgaW50ZXJuYWxDb2x1bW5zOiBSZWNvcmQ8c3RyaW5nLCBDdXN0b21Db2x1bW4+ID0ge307XG5cblx0Zm9yIChjb25zdCBrZXkgaW4gY29sdW1ucykge1xuXHRcdGNvbnN0IG1hbmlmZXN0Q29sdW1uID0gY29sdW1uc1trZXldO1xuXHRcdC8vIFRvIGlkZW50aWZ5IHRoZSBhbm5vdGF0aW9uIGNvbHVtbiBwcm9wZXJ0eSBvdmVyd3JpdGUgdmlhIG1hbmlmZXN0IHVzZS1jYXNlLlxuXHRcdGNvbnN0IGlzQW5ub3RhdGlvbkNvbHVtbiA9IGFubm90YXRpb25Db2x1bW5zLnNvbWUoY29sdW1uID0+IGNvbHVtbi5rZXkgPT09IGtleSk7XG5cdFx0S2V5SGVscGVyLnZhbGlkYXRlS2V5KGtleSk7XG5cdFx0Y29uc3QgcHJvcGVydHlJbmZvczogc3RyaW5nW10gfCB1bmRlZmluZWQgPSBfZ2V0UHJvcGVydHlOYW1lcyhcblx0XHRcdG1hbmlmZXN0Q29sdW1uLnByb3BlcnRpZXMsXG5cdFx0XHRhbm5vdGF0aW9uQ29sdW1ucyxcblx0XHRcdGNvbnZlcnRlckNvbnRleHQsXG5cdFx0XHRlbnRpdHlUeXBlXG5cdFx0KTtcblx0XHRpZiAoIW1hbmlmZXN0Q29sdW1uPy50ZW1wbGF0ZSAmJiAhaXNBbm5vdGF0aW9uQ29sdW1uKSB7XG5cdFx0XHRjb25zdCBNZXNzYWdlID0gXCJUaGUgYW5ub3RhdGlvbiBjb2x1bW4gJ1wiICsga2V5ICsgXCInIHJlZmVyZW5jZWQgaW4gdGhlIG1hbmlmZXN0IGlzIG5vdCBmb3VuZFwiO1xuXHRcdFx0Y29udmVydGVyQ29udGV4dFxuXHRcdFx0XHQuZ2V0RGlhZ25vc3RpY3MoKVxuXHRcdFx0XHQuYWRkSXNzdWUoXG5cdFx0XHRcdFx0SXNzdWVDYXRlZ29yeS5NYW5pZmVzdCxcblx0XHRcdFx0XHRJc3N1ZVNldmVyaXR5Lkxvdyxcblx0XHRcdFx0XHRNZXNzYWdlLFxuXHRcdFx0XHRcdElzc3VlQ2F0ZWdvcnlUeXBlLFxuXHRcdFx0XHRcdElzc3VlQ2F0ZWdvcnlUeXBlPy5Bbm5vdGF0aW9uQ29sdW1ucz8uSW52YWxpZEtleVxuXHRcdFx0XHQpO1xuXHRcdH0gZWxzZSB7XG5cdFx0XHRpbnRlcm5hbENvbHVtbnNba2V5XSA9IHtcblx0XHRcdFx0a2V5OiBrZXksXG5cdFx0XHRcdGlkOiBcIkN1c3RvbUNvbHVtbjo6XCIgKyBrZXksXG5cdFx0XHRcdG5hbWU6IFwiQ3VzdG9tQ29sdW1uOjpcIiArIGtleSxcblx0XHRcdFx0aGVhZGVyOiBtYW5pZmVzdENvbHVtbi5oZWFkZXIsXG5cdFx0XHRcdHdpZHRoOiBtYW5pZmVzdENvbHVtbi53aWR0aCB8fCB1bmRlZmluZWQsXG5cdFx0XHRcdGhvcml6b250YWxBbGlnbjogX2dldE1hbmlmZXN0T3JEZWZhdWx0VmFsdWUobWFuaWZlc3RDb2x1bW4/Lmhvcml6b250YWxBbGlnbiwgSG9yaXpvbnRhbEFsaWduLkJlZ2luLCBpc0Fubm90YXRpb25Db2x1bW4pLFxuXHRcdFx0XHR0eXBlOiBtYW5pZmVzdENvbHVtbi50eXBlID09PSBcIlNsb3RcIiA/IENvbHVtblR5cGUuU2xvdCA6IENvbHVtblR5cGUuRGVmYXVsdCxcblx0XHRcdFx0YXZhaWxhYmlsaXR5OiBfZ2V0TWFuaWZlc3RPckRlZmF1bHRWYWx1ZShtYW5pZmVzdENvbHVtbj8uYXZhaWxhYmlsaXR5LCBBdmFpbGFiaWxpdHlUeXBlLkRlZmF1bHQsIGlzQW5ub3RhdGlvbkNvbHVtbiksXG5cdFx0XHRcdHRlbXBsYXRlOiBtYW5pZmVzdENvbHVtbi50ZW1wbGF0ZSB8fCBcInVuZGVmaW5lZFwiLFxuXHRcdFx0XHRwb3NpdGlvbjoge1xuXHRcdFx0XHRcdGFuY2hvcjogbWFuaWZlc3RDb2x1bW4ucG9zaXRpb24/LmFuY2hvcixcblx0XHRcdFx0XHRwbGFjZW1lbnQ6IG1hbmlmZXN0Q29sdW1uLnBvc2l0aW9uID09PSB1bmRlZmluZWQgPyBQbGFjZW1lbnQuQWZ0ZXIgOiBtYW5pZmVzdENvbHVtbi5wb3NpdGlvbi5wbGFjZW1lbnRcblx0XHRcdFx0fSxcblx0XHRcdFx0aXNOYXZpZ2FibGU6IGlzQW5ub3RhdGlvbkNvbHVtbiA/IHVuZGVmaW5lZCA6IGlzQWN0aW9uTmF2aWdhYmxlKG1hbmlmZXN0Q29sdW1uLCBuYXZpZ2F0aW9uU2V0dGluZ3MsIHRydWUpLFxuXHRcdFx0XHRzZXR0aW5nczogbWFuaWZlc3RDb2x1bW4uc2V0dGluZ3MsXG5cdFx0XHRcdHNvcnRhYmxlOiBmYWxzZSxcblx0XHRcdFx0cHJvcGVydHlJbmZvczogcHJvcGVydHlJbmZvcyxcblx0XHRcdFx0Zm9ybWF0T3B0aW9uczoge1xuXHRcdFx0XHRcdC4uLmdldERlZmF1bHRGb3JtYXRPcHRpb25zRm9yVGFibGUoKSxcblx0XHRcdFx0XHQuLi5tYW5pZmVzdENvbHVtbi5mb3JtYXRPcHRpb25zXG5cdFx0XHRcdH0sXG5cdFx0XHRcdGV4cG9ydFNldHRpbmdzOiB7XG5cdFx0XHRcdFx0dGVtcGxhdGU6IHByb3BlcnR5SW5mb3MgPyBfYXBwZW5kQ3VzdG9tVGVtcGxhdGUocHJvcGVydHlJbmZvcykgOiB1bmRlZmluZWQsXG5cdFx0XHRcdFx0ZmllbGRMYWJlbDogcHJvcGVydHlJbmZvcyA/IG1hbmlmZXN0Q29sdW1uLmhlYWRlciA6IHVuZGVmaW5lZCxcblx0XHRcdFx0XHR3cmFwOiBwcm9wZXJ0eUluZm9zICYmIHByb3BlcnR5SW5mb3MubGVuZ3RoID4gMSA/IHRydWUgOiBmYWxzZVxuXHRcdFx0XHR9LFxuXHRcdFx0XHRjYXNlU2Vuc2l0aXZlOiBpc0ZpbHRlcmluZ0Nhc2VTZW5zaXRpdmUoY29udmVydGVyQ29udGV4dClcblx0XHRcdH07XG5cdFx0fVxuXHR9XG5cdHJldHVybiBpbnRlcm5hbENvbHVtbnM7XG59O1xuXG5leHBvcnQgZnVuY3Rpb24gZ2V0UDEzbk1vZGUoXG5cdHZpc3VhbGl6YXRpb25QYXRoOiBzdHJpbmcsXG5cdGNvbnZlcnRlckNvbnRleHQ6IENvbnZlcnRlckNvbnRleHQsXG5cdHRhYmxlTWFuaWZlc3RDb25maWd1cmF0aW9uOiBUYWJsZUNvbnRyb2xDb25maWd1cmF0aW9uXG4pOiBzdHJpbmcgfCB1bmRlZmluZWQge1xuXHRjb25zdCBtYW5pZmVzdFdyYXBwZXI6IE1hbmlmZXN0V3JhcHBlciA9IGNvbnZlcnRlckNvbnRleHQuZ2V0TWFuaWZlc3RXcmFwcGVyKCk7XG5cdGNvbnN0IHRhYmxlTWFuaWZlc3RTZXR0aW5nczogVGFibGVNYW5pZmVzdENvbmZpZ3VyYXRpb24gPSBjb252ZXJ0ZXJDb250ZXh0LmdldE1hbmlmZXN0Q29udHJvbENvbmZpZ3VyYXRpb24odmlzdWFsaXphdGlvblBhdGgpO1xuXHRjb25zdCB2YXJpYW50TWFuYWdlbWVudDogVmFyaWFudE1hbmFnZW1lbnRUeXBlID0gbWFuaWZlc3RXcmFwcGVyLmdldFZhcmlhbnRNYW5hZ2VtZW50KCk7XG5cdGNvbnN0IGFQZXJzb25hbGl6YXRpb246IHN0cmluZ1tdID0gW107XG5cdGNvbnN0IGJBbmFseXRpY2FsVGFibGUgPSB0YWJsZU1hbmlmZXN0Q29uZmlndXJhdGlvbi50eXBlID09PSBcIkFuYWx5dGljYWxUYWJsZVwiO1xuXHRpZiAodGFibGVNYW5pZmVzdFNldHRpbmdzPy50YWJsZVNldHRpbmdzPy5wZXJzb25hbGl6YXRpb24gIT09IHVuZGVmaW5lZCkge1xuXHRcdC8vIFBlcnNvbmFsaXphdGlvbiBjb25maWd1cmVkIGluIG1hbmlmZXN0LlxuXHRcdGNvbnN0IHBlcnNvbmFsaXphdGlvbjogYW55ID0gdGFibGVNYW5pZmVzdFNldHRpbmdzLnRhYmxlU2V0dGluZ3MucGVyc29uYWxpemF0aW9uO1xuXHRcdGlmIChwZXJzb25hbGl6YXRpb24gPT09IHRydWUpIHtcblx0XHRcdC8vIFRhYmxlIHBlcnNvbmFsaXphdGlvbiBmdWxseSBlbmFibGVkLlxuXHRcdFx0cmV0dXJuIGJBbmFseXRpY2FsVGFibGUgPyBcIlNvcnQsQ29sdW1uLEZpbHRlcixHcm91cCxBZ2dyZWdhdGVcIiA6IFwiU29ydCxDb2x1bW4sRmlsdGVyXCI7XG5cdFx0fSBlbHNlIGlmICh0eXBlb2YgcGVyc29uYWxpemF0aW9uID09PSBcIm9iamVjdFwiKSB7XG5cdFx0XHQvLyBTcGVjaWZpYyBwZXJzb25hbGl6YXRpb24gb3B0aW9ucyBlbmFibGVkIGluIG1hbmlmZXN0LiBVc2UgdGhlbSBhcyBpcy5cblx0XHRcdGlmIChwZXJzb25hbGl6YXRpb24uc29ydCkge1xuXHRcdFx0XHRhUGVyc29uYWxpemF0aW9uLnB1c2goXCJTb3J0XCIpO1xuXHRcdFx0fVxuXHRcdFx0aWYgKHBlcnNvbmFsaXphdGlvbi5jb2x1bW4pIHtcblx0XHRcdFx0YVBlcnNvbmFsaXphdGlvbi5wdXNoKFwiQ29sdW1uXCIpO1xuXHRcdFx0fVxuXHRcdFx0aWYgKHBlcnNvbmFsaXphdGlvbi5maWx0ZXIpIHtcblx0XHRcdFx0YVBlcnNvbmFsaXphdGlvbi5wdXNoKFwiRmlsdGVyXCIpO1xuXHRcdFx0fVxuXHRcdFx0aWYgKHBlcnNvbmFsaXphdGlvbi5ncm91cCAmJiBiQW5hbHl0aWNhbFRhYmxlKSB7XG5cdFx0XHRcdGFQZXJzb25hbGl6YXRpb24ucHVzaChcIkdyb3VwXCIpO1xuXHRcdFx0fVxuXHRcdFx0aWYgKHBlcnNvbmFsaXphdGlvbi5hZ2dyZWdhdGUgJiYgYkFuYWx5dGljYWxUYWJsZSkge1xuXHRcdFx0XHRhUGVyc29uYWxpemF0aW9uLnB1c2goXCJBZ2dyZWdhdGVcIik7XG5cdFx0XHR9XG5cdFx0XHRyZXR1cm4gYVBlcnNvbmFsaXphdGlvbi5sZW5ndGggPiAwID8gYVBlcnNvbmFsaXphdGlvbi5qb2luKFwiLFwiKSA6IHVuZGVmaW5lZDtcblx0XHR9XG5cdH0gZWxzZSB7XG5cdFx0Ly8gTm8gcGVyc29uYWxpemF0aW9uIGNvbmZpZ3VyZWQgaW4gbWFuaWZlc3QuXG5cdFx0YVBlcnNvbmFsaXphdGlvbi5wdXNoKFwiU29ydFwiKTtcblx0XHRhUGVyc29uYWxpemF0aW9uLnB1c2goXCJDb2x1bW5cIik7XG5cdFx0aWYgKHZhcmlhbnRNYW5hZ2VtZW50ID09PSBWYXJpYW50TWFuYWdlbWVudFR5cGUuQ29udHJvbCkge1xuXHRcdFx0Ly8gRmVhdHVyZSBwYXJpdHkgd2l0aCBWMi5cblx0XHRcdC8vIEVuYWJsZSB0YWJsZSBmaWx0ZXJpbmcgYnkgZGVmYXVsdCBvbmx5IGluIGNhc2Ugb2YgQ29udHJvbCBsZXZlbCB2YXJpYW50IG1hbmFnZW1lbnQuXG5cdFx0XHRhUGVyc29uYWxpemF0aW9uLnB1c2goXCJGaWx0ZXJcIik7XG5cdFx0fVxuXHRcdGlmIChiQW5hbHl0aWNhbFRhYmxlKSB7XG5cdFx0XHRhUGVyc29uYWxpemF0aW9uLnB1c2goXCJHcm91cFwiKTtcblx0XHRcdGFQZXJzb25hbGl6YXRpb24ucHVzaChcIkFnZ3JlZ2F0ZVwiKTtcblx0XHR9XG5cdFx0cmV0dXJuIGFQZXJzb25hbGl6YXRpb24uam9pbihcIixcIik7XG5cdH1cblx0cmV0dXJuIHVuZGVmaW5lZDtcbn1cblxuLyoqXG4gKiBSZXR1cm5zIGEgSlNPTiBzdHJpbmcgY29udGFpbmluZyB0aGUgc29ydCBjb25kaXRpb25zIGZvciB0aGUgcHJlc2VudGF0aW9uIHZhcmlhbnQuXG4gKlxuICogQHBhcmFtIGNvbnZlcnRlckNvbnRleHQgVGhlIGluc3RhbmNlIG9mIHRoZSBjb252ZXJ0ZXIgY29udGV4dFxuICogQHBhcmFtIHtQcmVzZW50YXRpb25WYXJpYW50VHlwZVR5cGVzIHwgdW5kZWZpbmVkfSBwcmVzZW50YXRpb25WYXJpYW50QW5ub3RhdGlvbiBQcmVzZW50YXRpb24gdmFyaWFudCBhbm5vdGF0aW9uXG4gKiBAcGFyYW0gY29sdW1ucyBUYWJsZSBjb2x1bW5zIHByb2Nlc3NlZCBieSB0aGUgY29udmVydGVyXG4gKiBAcmV0dXJucyB7c3RyaW5nIHwgdW5kZWZpbmVkfSBTb3J0IGNvbmRpdGlvbnMgZm9yIGEgcHJlc2VudGF0aW9uIHZhcmlhbnQuXG4gKi9cbmZ1bmN0aW9uIGdldFNvcnRDb25kaXRpb25zKFxuXHRjb252ZXJ0ZXJDb250ZXh0OiBDb252ZXJ0ZXJDb250ZXh0LFxuXHRwcmVzZW50YXRpb25WYXJpYW50QW5ub3RhdGlvbjogUHJlc2VudGF0aW9uVmFyaWFudFR5cGVUeXBlcyB8IHVuZGVmaW5lZCxcblx0Y29sdW1uczogVGFibGVDb2x1bW5bXVxuKTogc3RyaW5nIHwgdW5kZWZpbmVkIHtcblx0Ly8gQ3VycmVudGx5IG5hdmlnYXRpb24gcHJvcGVydHkgaXMgbm90IHN1cHBvcnRlZCBhcyBzb3J0ZXJcblx0Y29uc3Qgbm9uU29ydGFibGVQcm9wZXJ0aWVzID0gZ2V0Tm9uU29ydGFibGVQcm9wZXJ0aWVzUmVzdHJpY3Rpb25zKGNvbnZlcnRlckNvbnRleHQuZ2V0RW50aXR5U2V0KCkpO1xuXHRsZXQgc29ydENvbmRpdGlvbnM6IHN0cmluZyB8IHVuZGVmaW5lZDtcblx0aWYgKHByZXNlbnRhdGlvblZhcmlhbnRBbm5vdGF0aW9uPy5Tb3J0T3JkZXIpIHtcblx0XHRjb25zdCBzb3J0ZXJzOiBTb3J0ZXJUeXBlW10gPSBbXTtcblx0XHRjb25zdCBjb25kaXRpb25zID0ge1xuXHRcdFx0c29ydGVyczogc29ydGVyc1xuXHRcdH07XG5cdFx0cHJlc2VudGF0aW9uVmFyaWFudEFubm90YXRpb24uU29ydE9yZGVyLmZvckVhY2goY29uZGl0aW9uID0+IHtcblx0XHRcdGNvbnN0IGNvbmRpdGlvblByb3BlcnR5ID0gY29uZGl0aW9uLlByb3BlcnR5O1xuXHRcdFx0aWYgKGNvbmRpdGlvblByb3BlcnR5ICYmIG5vblNvcnRhYmxlUHJvcGVydGllcy5pbmRleE9mKGNvbmRpdGlvblByb3BlcnR5LiR0YXJnZXQ/Lm5hbWUpID09PSAtMSkge1xuXHRcdFx0XHRjb25zdCBpbmZvTmFtZSA9IGNvbnZlcnRQcm9wZXJ0eVBhdGhzVG9JbmZvTmFtZXMoW2NvbmRpdGlvblByb3BlcnR5XSwgY29sdW1ucylbMF07XG5cdFx0XHRcdGlmIChpbmZvTmFtZSkge1xuXHRcdFx0XHRcdGNvbmRpdGlvbnMuc29ydGVycy5wdXNoKHtcblx0XHRcdFx0XHRcdG5hbWU6IGluZm9OYW1lLFxuXHRcdFx0XHRcdFx0ZGVzY2VuZGluZzogISFjb25kaXRpb24uRGVzY2VuZGluZ1xuXHRcdFx0XHRcdH0pO1xuXHRcdFx0XHR9XG5cdFx0XHR9XG5cdFx0fSk7XG5cdFx0c29ydENvbmRpdGlvbnMgPSBjb25kaXRpb25zLnNvcnRlcnMubGVuZ3RoID8gSlNPTi5zdHJpbmdpZnkoY29uZGl0aW9ucykgOiB1bmRlZmluZWQ7XG5cdH1cblx0cmV0dXJuIHNvcnRDb25kaXRpb25zO1xufVxuXG4vKipcbiAqIENvbnZlcnRzIGFuIGFycmF5IG9mIHByb3BlcnR5UGF0aCB0byBhbiBhcnJheSBvZiBwcm9wZXJ0eUluZm8gbmFtZXMuXG4gKlxuICogQHBhcmFtIHBhdGhzIHRoZSBhcnJheSB0byBiZSBjb252ZXJ0ZWRcbiAqIEBwYXJhbSBjb2x1bW5zIHRoZSBhcnJheSBvZiBwcm9wZXJ0eUluZm9zXG4gKiBAcmV0dXJucyBhbiBhcnJheSBvZiBwcm9wZXJ0eUluZm8gbmFtZXNcbiAqL1xuXG5mdW5jdGlvbiBjb252ZXJ0UHJvcGVydHlQYXRoc1RvSW5mb05hbWVzKHBhdGhzOiBQcm9wZXJ0eVBhdGhbXSwgY29sdW1uczogVGFibGVDb2x1bW5bXSk6IHN0cmluZ1tdIHtcblx0Y29uc3QgaW5mb05hbWVzOiBzdHJpbmdbXSA9IFtdO1xuXHRwYXRocy5mb3JFYWNoKGN1cnJlbnRQYXRoID0+IHtcblx0XHRpZiAoY3VycmVudFBhdGg/LiR0YXJnZXQ/Lm5hbWUpIHtcblx0XHRcdGNvbnN0IHByb3BlcnR5SW5mbyA9IGNvbHVtbnMuZmluZChjb2x1bW4gPT4ge1xuXHRcdFx0XHRjb25zdCBhbm5vdGF0aW9uQ29sdW1uID0gY29sdW1uIGFzIEFubm90YXRpb25UYWJsZUNvbHVtbjtcblx0XHRcdFx0cmV0dXJuICFhbm5vdGF0aW9uQ29sdW1uLnByb3BlcnR5SW5mb3MgJiYgYW5ub3RhdGlvbkNvbHVtbi5yZWxhdGl2ZVBhdGggPT09IGN1cnJlbnRQYXRoPy4kdGFyZ2V0Py5uYW1lO1xuXHRcdFx0fSk7XG5cdFx0XHRpZiAocHJvcGVydHlJbmZvKSB7XG5cdFx0XHRcdGluZm9OYW1lcy5wdXNoKHByb3BlcnR5SW5mby5uYW1lKTtcblx0XHRcdH1cblx0XHR9XG5cdH0pO1xuXG5cdHJldHVybiBpbmZvTmFtZXM7XG59XG5cbi8qKlxuICogUmV0dXJucyBhIEpTT04gc3RyaW5nIGNvbnRhaW5pbmcgUHJlc2VudGF0aW9uIFZhcmlhbnQgZ3JvdXAgY29uZGl0aW9ucy5cbiAqXG4gKiBAcGFyYW0ge1ByZXNlbnRhdGlvblZhcmlhbnRUeXBlVHlwZXMgfCB1bmRlZmluZWR9IHByZXNlbnRhdGlvblZhcmlhbnRBbm5vdGF0aW9uIFByZXNlbnRhdGlvbiB2YXJpYW50IGFubm90YXRpb25cbiAqIEBwYXJhbSBjb2x1bW5zIENvbnZlcnRlciBwcm9jZXNzZWQgdGFibGUgY29sdW1uc1xuICogQHJldHVybnMge3N0cmluZyB8IHVuZGVmaW5lZH0gR3JvdXAgY29uZGl0aW9ucyBmb3IgYSBQcmVzZW50YXRpb24gdmFyaWFudC5cbiAqL1xuZnVuY3Rpb24gZ2V0R3JvdXBDb25kaXRpb25zKFxuXHRwcmVzZW50YXRpb25WYXJpYW50QW5ub3RhdGlvbjogUHJlc2VudGF0aW9uVmFyaWFudFR5cGVUeXBlcyB8IHVuZGVmaW5lZCxcblx0Y29sdW1uczogVGFibGVDb2x1bW5bXVxuKTogc3RyaW5nIHwgdW5kZWZpbmVkIHtcblx0bGV0IGdyb3VwQ29uZGl0aW9uczogc3RyaW5nIHwgdW5kZWZpbmVkO1xuXHRpZiAocHJlc2VudGF0aW9uVmFyaWFudEFubm90YXRpb24/Lkdyb3VwQnkpIHtcblx0XHRjb25zdCBhR3JvdXBCeSA9IHByZXNlbnRhdGlvblZhcmlhbnRBbm5vdGF0aW9uLkdyb3VwQnkgYXMgUHJvcGVydHlQYXRoW107XG5cdFx0Y29uc3QgYUdyb3VwTGV2ZWxzID0gY29udmVydFByb3BlcnR5UGF0aHNUb0luZm9OYW1lcyhhR3JvdXBCeSwgY29sdW1ucykubWFwKGluZm9OYW1lID0+IHtcblx0XHRcdHJldHVybiB7IG5hbWU6IGluZm9OYW1lIH07XG5cdFx0fSk7XG5cblx0XHRncm91cENvbmRpdGlvbnMgPSBhR3JvdXBMZXZlbHMubGVuZ3RoID8gSlNPTi5zdHJpbmdpZnkoeyBncm91cExldmVsczogYUdyb3VwTGV2ZWxzIH0pIDogdW5kZWZpbmVkO1xuXHR9XG5cdHJldHVybiBncm91cENvbmRpdGlvbnM7XG59XG5cbi8qKlxuICogUmV0dXJucyBhIEpTT04gc3RyaW5nIGNvbnRhaW5pbmcgUHJlc2VudGF0aW9uIFZhcmlhbnQgYWdncmVnYXRlIGNvbmRpdGlvbnMuXG4gKlxuICogQHBhcmFtIHtQcmVzZW50YXRpb25WYXJpYW50VHlwZVR5cGVzIHwgdW5kZWZpbmVkfSBwcmVzZW50YXRpb25WYXJpYW50QW5ub3RhdGlvbiBQcmVzZW50YXRpb24gdmFyaWFudCBhbm5vdGF0aW9uXG4gKiBAcGFyYW0gY29sdW1ucyBDb252ZXJ0ZXIgcHJvY2Vzc2VkIHRhYmxlIGNvbHVtbnNcbiAqIEByZXR1cm5zIHtzdHJpbmcgfCB1bmRlZmluZWR9IEdyb3VwIGNvbmRpdGlvbnMgZm9yIGEgUHJlc2VudGF0aW9uIHZhcmlhbnQuXG4gKi9cbmZ1bmN0aW9uIGdldEFnZ3JlZ2F0ZUNvbmRpdGlvbnMoXG5cdHByZXNlbnRhdGlvblZhcmlhbnRBbm5vdGF0aW9uOiBQcmVzZW50YXRpb25WYXJpYW50VHlwZVR5cGVzIHwgdW5kZWZpbmVkLFxuXHRjb2x1bW5zOiBUYWJsZUNvbHVtbltdXG4pOiBzdHJpbmcgfCB1bmRlZmluZWQge1xuXHRsZXQgYWdncmVnYXRlQ29uZGl0aW9uczogc3RyaW5nIHwgdW5kZWZpbmVkO1xuXHRpZiAocHJlc2VudGF0aW9uVmFyaWFudEFubm90YXRpb24/LlRvdGFsKSB7XG5cdFx0Y29uc3QgYVRvdGFscyA9IHByZXNlbnRhdGlvblZhcmlhbnRBbm5vdGF0aW9uLlRvdGFsIGFzIFByb3BlcnR5UGF0aFtdO1xuXHRcdGNvbnN0IGFnZ3JlZ2F0ZXM6IFJlY29yZDxzdHJpbmcsIG9iamVjdD4gPSB7fTtcblx0XHRjb252ZXJ0UHJvcGVydHlQYXRoc1RvSW5mb05hbWVzKGFUb3RhbHMsIGNvbHVtbnMpLmZvckVhY2goaW5mb05hbWUgPT4ge1xuXHRcdFx0YWdncmVnYXRlc1tpbmZvTmFtZV0gPSB7fTtcblx0XHR9KTtcblxuXHRcdGFnZ3JlZ2F0ZUNvbmRpdGlvbnMgPSBKU09OLnN0cmluZ2lmeShhZ2dyZWdhdGVzKTtcblx0fVxuXG5cdHJldHVybiBhZ2dyZWdhdGVDb25kaXRpb25zO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gZ2V0VGFibGVBbm5vdGF0aW9uQ29uZmlndXJhdGlvbihcblx0bGluZUl0ZW1Bbm5vdGF0aW9uOiBMaW5lSXRlbSB8IHVuZGVmaW5lZCxcblx0dmlzdWFsaXphdGlvblBhdGg6IHN0cmluZyxcblx0Y29udmVydGVyQ29udGV4dDogQ29udmVydGVyQ29udGV4dCxcblx0dGFibGVNYW5pZmVzdENvbmZpZ3VyYXRpb246IFRhYmxlQ29udHJvbENvbmZpZ3VyYXRpb24sXG5cdGNvbHVtbnM6IFRhYmxlQ29sdW1uW10sXG5cdHByZXNlbnRhdGlvblZhcmlhbnRBbm5vdGF0aW9uPzogUHJlc2VudGF0aW9uVmFyaWFudFR5cGVUeXBlcyxcblx0dmlld0NvbmZpZ3VyYXRpb24/OiBWaWV3UGF0aENvbmZpZ3VyYXRpb25cbik6IFRhYmxlQW5ub3RhdGlvbkNvbmZpZ3VyYXRpb24ge1xuXHQvLyBOZWVkIHRvIGdldCB0aGUgdGFyZ2V0XG5cdGNvbnN0IHsgbmF2aWdhdGlvblByb3BlcnR5UGF0aCB9ID0gc3BsaXRQYXRoKHZpc3VhbGl6YXRpb25QYXRoKTtcblx0Y29uc3QgdGl0bGU6IGFueSA9IGNvbnZlcnRlckNvbnRleHQuZ2V0RGF0YU1vZGVsT2JqZWN0UGF0aCgpLnRhcmdldEVudGl0eVR5cGUuYW5ub3RhdGlvbnM/LlVJPy5IZWFkZXJJbmZvPy5UeXBlTmFtZVBsdXJhbDtcblx0Y29uc3QgZW50aXR5U2V0ID0gY29udmVydGVyQ29udGV4dC5nZXREYXRhTW9kZWxPYmplY3RQYXRoKCkudGFyZ2V0RW50aXR5U2V0O1xuXHRjb25zdCBwYWdlTWFuaWZlc3RTZXR0aW5nczogTWFuaWZlc3RXcmFwcGVyID0gY29udmVydGVyQ29udGV4dC5nZXRNYW5pZmVzdFdyYXBwZXIoKTtcblx0Y29uc3QgaGFzQWJzb2x1dGVQYXRoID0gbmF2aWdhdGlvblByb3BlcnR5UGF0aC5sZW5ndGggPT09IDAsXG5cdFx0cDEzbk1vZGU6IHN0cmluZyB8IHVuZGVmaW5lZCA9IGdldFAxM25Nb2RlKHZpc3VhbGl6YXRpb25QYXRoLCBjb252ZXJ0ZXJDb250ZXh0LCB0YWJsZU1hbmlmZXN0Q29uZmlndXJhdGlvbiksXG5cdFx0aWQgPSBuYXZpZ2F0aW9uUHJvcGVydHlQYXRoID8gVGFibGVJRCh2aXN1YWxpemF0aW9uUGF0aCkgOiBUYWJsZUlEKGNvbnZlcnRlckNvbnRleHQuZ2V0Q29udGV4dFBhdGgoKSwgXCJMaW5lSXRlbVwiKTtcblx0Y29uc3QgdGFyZ2V0Q2FwYWJpbGl0aWVzID0gZ2V0Q2FwYWJpbGl0eVJlc3RyaWN0aW9uKGNvbnZlcnRlckNvbnRleHQpO1xuXHRjb25zdCBuYXZpZ2F0aW9uVGFyZ2V0UGF0aCA9IGdldE5hdmlnYXRpb25UYXJnZXRQYXRoKGNvbnZlcnRlckNvbnRleHQsIG5hdmlnYXRpb25Qcm9wZXJ0eVBhdGgpO1xuXHRjb25zdCBuYXZpZ2F0aW9uU2V0dGluZ3MgPSBwYWdlTWFuaWZlc3RTZXR0aW5ncy5nZXROYXZpZ2F0aW9uQ29uZmlndXJhdGlvbihuYXZpZ2F0aW9uVGFyZ2V0UGF0aCk7XG5cdGNvbnN0IHN0YW5kYXJkQWN0aW9uc0NvbnRleHQgPSBnZW5lcmF0ZVN0YW5kYXJkQWN0aW9uc0NvbnRleHQoXG5cdFx0Y29udmVydGVyQ29udGV4dCxcblx0XHRuYXZpZ2F0aW9uU2V0dGluZ3MsXG5cdFx0dGFibGVNYW5pZmVzdENvbmZpZ3VyYXRpb24sXG5cdFx0dmlld0NvbmZpZ3VyYXRpb25cblx0KTtcblx0Y29uc3QgaXNEZWxldGVCdXR0b25WaXNpYmxlID0gZ2V0RGVsZXRlVmlzaWJpbGl0eShjb252ZXJ0ZXJDb250ZXh0LCBzdGFuZGFyZEFjdGlvbnNDb250ZXh0KTtcblx0Y29uc3Qgc2VsZWN0aW9uTW9kZSA9IGdldFNlbGVjdGlvbk1vZGUoXG5cdFx0bGluZUl0ZW1Bbm5vdGF0aW9uLFxuXHRcdHZpc3VhbGl6YXRpb25QYXRoLFxuXHRcdGNvbnZlcnRlckNvbnRleHQsXG5cdFx0aGFzQWJzb2x1dGVQYXRoLFxuXHRcdHRhcmdldENhcGFiaWxpdGllcyxcblx0XHRpc0RlbGV0ZUJ1dHRvblZpc2libGVcblx0KTtcblx0bGV0IHRocmVzaG9sZCA9IG5hdmlnYXRpb25Qcm9wZXJ0eVBhdGggPyAxMCA6IDMwO1xuXHRpZiAocHJlc2VudGF0aW9uVmFyaWFudEFubm90YXRpb24/Lk1heEl0ZW1zKSB7XG5cdFx0dGhyZXNob2xkID0gcHJlc2VudGF0aW9uVmFyaWFudEFubm90YXRpb24uTWF4SXRlbXMudmFsdWVPZigpIGFzIG51bWJlcjtcblx0fVxuXG5cdGNvbnN0IGNyZWF0aW9uQmVoYXZpb3VyID0gX2dldENyZWF0aW9uQmVoYXZpb3VyKGxpbmVJdGVtQW5ub3RhdGlvbiwgdGFibGVNYW5pZmVzdENvbmZpZ3VyYXRpb24sIGNvbnZlcnRlckNvbnRleHQsIG5hdmlnYXRpb25TZXR0aW5ncyk7XG5cdGNvbnN0IHZhcmlhbnRNYW5hZ2VtZW50OiBWYXJpYW50TWFuYWdlbWVudFR5cGUgPSBwYWdlTWFuaWZlc3RTZXR0aW5ncy5nZXRWYXJpYW50TWFuYWdlbWVudCgpO1xuXHRjb25zdCBpc1NlYXJjaGFibGUgPSBpc1BhdGhTZWFyY2hhYmxlKGNvbnZlcnRlckNvbnRleHQuZ2V0RGF0YU1vZGVsT2JqZWN0UGF0aCgpKTtcblx0Y29uc3QgdGFibGVBY3Rpb25zID0ge1xuXHRcdGNyZWF0ZTogZ2V0U3RhbmRhcmRBY3Rpb25DcmVhdGUoY29udmVydGVyQ29udGV4dCwgc3RhbmRhcmRBY3Rpb25zQ29udGV4dCksXG5cdFx0XCJkZWxldGVcIjogZ2V0U3RhbmRhcmRBY3Rpb25EZWxldGUoY29udmVydGVyQ29udGV4dCwgc3RhbmRhcmRBY3Rpb25zQ29udGV4dCksXG5cdFx0cGFzdGU6IGdldFN0YW5kYXJkQWN0aW9uUGFzdGUoY29udmVydGVyQ29udGV4dCwgc3RhbmRhcmRBY3Rpb25zQ29udGV4dCksXG5cdFx0bWFzc0VkaXQ6IGdldFN0YW5kYXJkQWN0aW9uTWFzc0VkaXQoY29udmVydGVyQ29udGV4dCwgc3RhbmRhcmRBY3Rpb25zQ29udGV4dCwgc2VsZWN0aW9uTW9kZSlcblx0fTtcblx0Y29uc3QgaXNJbnNlcnRVcGRhdGVUZW1wbGF0ZWQgPSBnZXRJbnNlcnRVcGRhdGVBY3Rpb25zVGVtcGxhdGluZyhcblx0XHRzdGFuZGFyZEFjdGlvbnNDb250ZXh0LFxuXHRcdGlzRHJhZnRPclN0aWNreVN1cHBvcnRlZChjb252ZXJ0ZXJDb250ZXh0KSxcblx0XHR0YWJsZUFjdGlvbnMuY3JlYXRlLnZpc2libGUgPT09IFwiZmFsc2VcIlxuXHQpO1xuXG5cdHJldHVybiB7XG5cdFx0aWQ6IGlkLFxuXHRcdGVudGl0eU5hbWU6IGVudGl0eVNldCA/IGVudGl0eVNldC5uYW1lIDogXCJcIixcblx0XHRjb2xsZWN0aW9uOiBnZXRUYXJnZXRPYmplY3RQYXRoKGNvbnZlcnRlckNvbnRleHQuZ2V0RGF0YU1vZGVsT2JqZWN0UGF0aCgpKSxcblx0XHRuYXZpZ2F0aW9uUGF0aDogbmF2aWdhdGlvblByb3BlcnR5UGF0aCxcblx0XHRyb3c6IF9nZXRSb3dDb25maWd1cmF0aW9uUHJvcGVydHkoXG5cdFx0XHRsaW5lSXRlbUFubm90YXRpb24sXG5cdFx0XHR2aXN1YWxpemF0aW9uUGF0aCxcblx0XHRcdGNvbnZlcnRlckNvbnRleHQsXG5cdFx0XHRuYXZpZ2F0aW9uU2V0dGluZ3MsXG5cdFx0XHRuYXZpZ2F0aW9uVGFyZ2V0UGF0aFxuXHRcdCksXG5cdFx0cDEzbk1vZGU6IHAxM25Nb2RlLFxuXHRcdHN0YW5kYXJkQWN0aW9uczoge1xuXHRcdFx0YWN0aW9uczogdGFibGVBY3Rpb25zLFxuXHRcdFx0aXNJbnNlcnRVcGRhdGVUZW1wbGF0ZWQ6IGlzSW5zZXJ0VXBkYXRlVGVtcGxhdGVkXG5cdFx0fSxcblx0XHRkaXNwbGF5TW9kZTogaXNJbkRpc3BsYXlNb2RlKGNvbnZlcnRlckNvbnRleHQsIHZpZXdDb25maWd1cmF0aW9uKSxcblx0XHRjcmVhdGU6IGNyZWF0aW9uQmVoYXZpb3VyLFxuXHRcdHNlbGVjdGlvbk1vZGU6IHNlbGVjdGlvbk1vZGUsXG5cdFx0YXV0b0JpbmRPbkluaXQ6XG5cdFx0XHRjb252ZXJ0ZXJDb250ZXh0LmdldFRlbXBsYXRlVHlwZSgpICE9PSBUZW1wbGF0ZVR5cGUuTGlzdFJlcG9ydCAmJlxuXHRcdFx0Y29udmVydGVyQ29udGV4dC5nZXRUZW1wbGF0ZVR5cGUoKSAhPT0gVGVtcGxhdGVUeXBlLkFuYWx5dGljYWxMaXN0UGFnZSAmJlxuXHRcdFx0ISh2aWV3Q29uZmlndXJhdGlvbiAmJiBjb252ZXJ0ZXJDb250ZXh0LmdldE1hbmlmZXN0V3JhcHBlcigpLmhhc011bHRpcGxlVmlzdWFsaXphdGlvbnModmlld0NvbmZpZ3VyYXRpb24pKSxcblx0XHR2YXJpYW50TWFuYWdlbWVudDogdmFyaWFudE1hbmFnZW1lbnQgPT09IFwiQ29udHJvbFwiICYmICFwMTNuTW9kZSA/IFZhcmlhbnRNYW5hZ2VtZW50VHlwZS5Ob25lIDogdmFyaWFudE1hbmFnZW1lbnQsXG5cdFx0dGhyZXNob2xkOiB0aHJlc2hvbGQsXG5cdFx0c29ydENvbmRpdGlvbnM6IGdldFNvcnRDb25kaXRpb25zKGNvbnZlcnRlckNvbnRleHQsIHByZXNlbnRhdGlvblZhcmlhbnRBbm5vdGF0aW9uLCBjb2x1bW5zKSxcblx0XHR0aXRsZTogdGl0bGUsXG5cdFx0c2VhcmNoYWJsZTogdGFibGVNYW5pZmVzdENvbmZpZ3VyYXRpb24udHlwZSAhPT0gXCJBbmFseXRpY2FsVGFibGVcIiAmJiAhKGlzQ29uc3RhbnQoaXNTZWFyY2hhYmxlKSAmJiBpc1NlYXJjaGFibGUudmFsdWUgPT09IGZhbHNlKVxuXHR9O1xufVxuXG5mdW5jdGlvbiBfZ2V0RXhwb3J0RGF0YVR5cGUoZGF0YVR5cGU6IHN0cmluZywgaXNDb21wbGV4UHJvcGVydHk6IGJvb2xlYW4gPSBmYWxzZSk6IHN0cmluZyB7XG5cdGxldCBleHBvcnREYXRhVHlwZTogc3RyaW5nID0gXCJTdHJpbmdcIjtcblx0aWYgKGlzQ29tcGxleFByb3BlcnR5KSB7XG5cdFx0cmV0dXJuIGV4cG9ydERhdGFUeXBlO1xuXHR9IGVsc2Uge1xuXHRcdHN3aXRjaCAoZGF0YVR5cGUpIHtcblx0XHRcdGNhc2UgXCJFZG0uRGVjaW1hbFwiOlxuXHRcdFx0Y2FzZSBcIkVkbS5JbnQzMlwiOlxuXHRcdFx0Y2FzZSBcIkVkbS5JbnQ2NFwiOlxuXHRcdFx0Y2FzZSBcIkVkbS5Eb3VibGVcIjpcblx0XHRcdGNhc2UgXCJFZG0uQnl0ZVwiOlxuXHRcdFx0XHRleHBvcnREYXRhVHlwZSA9IFwiTnVtYmVyXCI7XG5cdFx0XHRcdGJyZWFrO1xuXHRcdFx0Y2FzZSBcIkVkbS5EYXRlT2ZUaW1lXCI6XG5cdFx0XHRjYXNlIFwiRWRtLkRhdGVcIjpcblx0XHRcdFx0ZXhwb3J0RGF0YVR5cGUgPSBcIkRhdGVcIjtcblx0XHRcdFx0YnJlYWs7XG5cdFx0XHRjYXNlIFwiRWRtLkRhdGVUaW1lT2Zmc2V0XCI6XG5cdFx0XHRcdGV4cG9ydERhdGFUeXBlID0gXCJEYXRlVGltZVwiO1xuXHRcdFx0XHRicmVhaztcblx0XHRcdGNhc2UgXCJFZG0uVGltZU9mRGF5XCI6XG5cdFx0XHRcdGV4cG9ydERhdGFUeXBlID0gXCJUaW1lXCI7XG5cdFx0XHRcdGJyZWFrO1xuXHRcdFx0Y2FzZSBcIkVkbS5Cb29sZWFuXCI6XG5cdFx0XHRcdGV4cG9ydERhdGFUeXBlID0gXCJCb29sZWFuXCI7XG5cdFx0XHRcdGJyZWFrO1xuXHRcdFx0ZGVmYXVsdDpcblx0XHRcdFx0ZXhwb3J0RGF0YVR5cGUgPSBcIlN0cmluZ1wiO1xuXHRcdH1cblx0fVxuXHRyZXR1cm4gZXhwb3J0RGF0YVR5cGU7XG59XG5cbmZ1bmN0aW9uIGlzSW5EaXNwbGF5TW9kZShjb252ZXJ0ZXJDb250ZXh0OiBDb252ZXJ0ZXJDb250ZXh0LCB2aWV3Q29uZmlndXJhdGlvbj86IFZpZXdQYXRoQ29uZmlndXJhdGlvbik6IGJvb2xlYW4ge1xuXHRjb25zdCB0ZW1wbGF0ZVR5cGUgPSBjb252ZXJ0ZXJDb250ZXh0LmdldFRlbXBsYXRlVHlwZSgpO1xuXHRpZiAoXG5cdFx0dGVtcGxhdGVUeXBlID09PSBUZW1wbGF0ZVR5cGUuTGlzdFJlcG9ydCB8fFxuXHRcdHRlbXBsYXRlVHlwZSA9PT0gVGVtcGxhdGVUeXBlLkFuYWx5dGljYWxMaXN0UGFnZSB8fFxuXHRcdCh2aWV3Q29uZmlndXJhdGlvbiAmJiBjb252ZXJ0ZXJDb250ZXh0LmdldE1hbmlmZXN0V3JhcHBlcigpLmhhc011bHRpcGxlVmlzdWFsaXphdGlvbnModmlld0NvbmZpZ3VyYXRpb24pKVxuXHQpIHtcblx0XHRyZXR1cm4gdHJ1ZTtcblx0fVxuXHQvLyB1cGRhdGFibGUgd2lsbCBiZSBoYW5kbGVkIGF0IHRoZSBwcm9wZXJ0eSBsZXZlbFxuXHRyZXR1cm4gZmFsc2U7XG59XG5cbi8qKlxuICogU3BsaXQgdGhlIHZpc3VhbGl6YXRpb24gcGF0aCBpbnRvIHRoZSBuYXZpZ2F0aW9uIHByb3BlcnR5IHBhdGggYW5kIGFubm90YXRpb24uXG4gKlxuICogQHBhcmFtIHZpc3VhbGl6YXRpb25QYXRoXG4gKiBAcmV0dXJucyB7b2JqZWN0fVxuICovXG5leHBvcnQgZnVuY3Rpb24gc3BsaXRQYXRoKHZpc3VhbGl6YXRpb25QYXRoOiBzdHJpbmcpIHtcblx0bGV0IFtuYXZpZ2F0aW9uUHJvcGVydHlQYXRoLCBhbm5vdGF0aW9uUGF0aF0gPSB2aXN1YWxpemF0aW9uUGF0aC5zcGxpdChcIkBcIik7XG5cblx0aWYgKG5hdmlnYXRpb25Qcm9wZXJ0eVBhdGgubGFzdEluZGV4T2YoXCIvXCIpID09PSBuYXZpZ2F0aW9uUHJvcGVydHlQYXRoLmxlbmd0aCAtIDEpIHtcblx0XHQvLyBEcm9wIHRyYWlsaW5nIHNsYXNoXG5cdFx0bmF2aWdhdGlvblByb3BlcnR5UGF0aCA9IG5hdmlnYXRpb25Qcm9wZXJ0eVBhdGguc3Vic3RyKDAsIG5hdmlnYXRpb25Qcm9wZXJ0eVBhdGgubGVuZ3RoIC0gMSk7XG5cdH1cblx0cmV0dXJuIHsgbmF2aWdhdGlvblByb3BlcnR5UGF0aCwgYW5ub3RhdGlvblBhdGggfTtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGdldFNlbGVjdGlvblZhcmlhbnRDb25maWd1cmF0aW9uKFxuXHRzZWxlY3Rpb25WYXJpYW50UGF0aDogc3RyaW5nLFxuXHRjb252ZXJ0ZXJDb250ZXh0OiBDb252ZXJ0ZXJDb250ZXh0XG4pOiBTZWxlY3Rpb25WYXJpYW50Q29uZmlndXJhdGlvbiB8IHVuZGVmaW5lZCB7XG5cdGNvbnN0IHJlc29sdmVkVGFyZ2V0ID0gY29udmVydGVyQ29udGV4dC5nZXRFbnRpdHlUeXBlQW5ub3RhdGlvbihzZWxlY3Rpb25WYXJpYW50UGF0aCk7XG5cdGNvbnN0IHNlbGVjdGlvbjogU2VsZWN0aW9uVmFyaWFudFR5cGUgPSByZXNvbHZlZFRhcmdldC5hbm5vdGF0aW9uIGFzIFNlbGVjdGlvblZhcmlhbnRUeXBlO1xuXG5cdGlmIChzZWxlY3Rpb24pIHtcblx0XHRjb25zdCBwcm9wZXJ0eU5hbWVzOiBzdHJpbmdbXSA9IFtdO1xuXHRcdHNlbGVjdGlvbi5TZWxlY3RPcHRpb25zPy5mb3JFYWNoKChzZWxlY3RPcHRpb246IFNlbGVjdE9wdGlvblR5cGUpID0+IHtcblx0XHRcdGNvbnN0IHByb3BlcnR5TmFtZTogYW55ID0gc2VsZWN0T3B0aW9uLlByb3BlcnR5TmFtZTtcblx0XHRcdGNvbnN0IFByb3BlcnR5UGF0aDogc3RyaW5nID0gcHJvcGVydHlOYW1lLnZhbHVlO1xuXHRcdFx0aWYgKHByb3BlcnR5TmFtZXMuaW5kZXhPZihQcm9wZXJ0eVBhdGgpID09PSAtMSkge1xuXHRcdFx0XHRwcm9wZXJ0eU5hbWVzLnB1c2goUHJvcGVydHlQYXRoKTtcblx0XHRcdH1cblx0XHR9KTtcblx0XHRyZXR1cm4ge1xuXHRcdFx0dGV4dDogc2VsZWN0aW9uPy5UZXh0Py50b1N0cmluZygpLFxuXHRcdFx0cHJvcGVydHlOYW1lczogcHJvcGVydHlOYW1lc1xuXHRcdH07XG5cdH1cblx0cmV0dXJuIHVuZGVmaW5lZDtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGdldFRhYmxlTWFuaWZlc3RDb25maWd1cmF0aW9uKFxuXHRsaW5lSXRlbUFubm90YXRpb246IExpbmVJdGVtIHwgdW5kZWZpbmVkLFxuXHR2aXN1YWxpemF0aW9uUGF0aDogc3RyaW5nLFxuXHRjb252ZXJ0ZXJDb250ZXh0OiBDb252ZXJ0ZXJDb250ZXh0LFxuXHRjaGVja0NvbmRlbnNlZExheW91dDogYm9vbGVhbiA9IGZhbHNlXG4pOiBUYWJsZUNvbnRyb2xDb25maWd1cmF0aW9uIHtcblx0Y29uc3QgdGFibGVNYW5pZmVzdFNldHRpbmdzOiBUYWJsZU1hbmlmZXN0Q29uZmlndXJhdGlvbiA9IGNvbnZlcnRlckNvbnRleHQuZ2V0TWFuaWZlc3RDb250cm9sQ29uZmlndXJhdGlvbih2aXN1YWxpemF0aW9uUGF0aCk7XG5cdGNvbnN0IHRhYmxlU2V0dGluZ3MgPSAodGFibGVNYW5pZmVzdFNldHRpbmdzICYmIHRhYmxlTWFuaWZlc3RTZXR0aW5ncy50YWJsZVNldHRpbmdzKSB8fCB7fTtcblx0bGV0IHF1aWNrU2VsZWN0aW9uVmFyaWFudDogYW55O1xuXHRjb25zdCBxdWlja0ZpbHRlclBhdGhzOiB7IGFubm90YXRpb25QYXRoOiBzdHJpbmcgfVtdID0gW107XG5cdGxldCBlbmFibGVFeHBvcnQgPSB0cnVlO1xuXHRsZXQgY3JlYXRpb25Nb2RlID0gQ3JlYXRpb25Nb2RlLk5ld1BhZ2U7XG5cdGxldCBmaWx0ZXJzO1xuXHRsZXQgY3JlYXRlQXRFbmQgPSB0cnVlO1xuXHRsZXQgZGlzYWJsZUFkZFJvd0J1dHRvbkZvckVtcHR5RGF0YSA9IGZhbHNlO1xuXHRsZXQgY3VzdG9tVmFsaWRhdGlvbkZ1bmN0aW9uO1xuXHRsZXQgY29uZGVuc2VkVGFibGVMYXlvdXQgPSBmYWxzZTtcblx0bGV0IGhpZGVUYWJsZVRpdGxlID0gZmFsc2U7XG5cdGxldCB0YWJsZVR5cGU6IFRhYmxlVHlwZSA9IFwiUmVzcG9uc2l2ZVRhYmxlXCI7XG5cdGxldCBlbmFibGVGdWxsU2NyZWVuID0gZmFsc2U7XG5cdGxldCBzZWxlY3Rpb25MaW1pdCA9IDIwMDtcblx0bGV0IG11bHRpU2VsZWN0TW9kZTtcblx0Y29uc3QgZW5hYmxlQXV0b0NvbHVtbldpZHRoID0gIWNvbnZlcnRlckNvbnRleHQuZ2V0TWFuaWZlc3RXcmFwcGVyKCkuaXNQaG9uZSgpO1xuXHRjb25zdCBlbmFibGVQYXN0ZSA9XG5cdFx0dGFibGVTZXR0aW5ncy5lbmFibGVQYXN0ZSAhPT0gdW5kZWZpbmVkID8gdGFibGVTZXR0aW5ncy5lbmFibGVQYXN0ZSA6IGNvbnZlcnRlckNvbnRleHQuZ2V0VGVtcGxhdGVUeXBlKCkgPT09IFwiT2JqZWN0UGFnZVwiOyAvLyBQYXN0ZSBpcyBkaXNhYmxlZCBieSBkZWZhdWx0IGV4Y2VwdGVkIGZvciBPUFxuXHRjb25zdCBpc0NvbmRlbnNlZFRhYmxlTGF5b3V0Q29tcGxpYW50ID0gY2hlY2tDb25kZW5zZWRMYXlvdXQgJiYgY29udmVydGVyQ29udGV4dC5nZXRNYW5pZmVzdFdyYXBwZXIoKS5pc0NvbmRlbnNlZExheW91dENvbXBsaWFudCgpO1xuXHRjb25zdCBlbnRpdHlUeXBlID0gY29udmVydGVyQ29udGV4dC5nZXRFbnRpdHlUeXBlKCk7XG5cdGNvbnN0IGFnZ3JlZ2F0aW9uSGVscGVyID0gbmV3IEFnZ3JlZ2F0aW9uSGVscGVyKGVudGl0eVR5cGUsIGNvbnZlcnRlckNvbnRleHQpO1xuXHRpZiAobGluZUl0ZW1Bbm5vdGF0aW9uKSB7XG5cdFx0Y29uc3QgdGFyZ2V0RW50aXR5VHlwZSA9IGNvbnZlcnRlckNvbnRleHQuZ2V0QW5ub3RhdGlvbkVudGl0eVR5cGUobGluZUl0ZW1Bbm5vdGF0aW9uKTtcblx0XHR0YWJsZVNldHRpbmdzPy5xdWlja1ZhcmlhbnRTZWxlY3Rpb24/LnBhdGhzPy5mb3JFYWNoKChwYXRoOiB7IGFubm90YXRpb25QYXRoOiBzdHJpbmcgfSkgPT4ge1xuXHRcdFx0cXVpY2tTZWxlY3Rpb25WYXJpYW50ID0gdGFyZ2V0RW50aXR5VHlwZS5yZXNvbHZlUGF0aChcIkBcIiArIHBhdGguYW5ub3RhdGlvblBhdGgpO1xuXHRcdFx0Ly8gcXVpY2tTZWxlY3Rpb25WYXJpYW50ID0gY29udmVydGVyQ29udGV4dC5nZXRFbnRpdHlUeXBlQW5ub3RhdGlvbihwYXRoLmFubm90YXRpb25QYXRoKTtcblx0XHRcdGlmIChxdWlja1NlbGVjdGlvblZhcmlhbnQpIHtcblx0XHRcdFx0cXVpY2tGaWx0ZXJQYXRocy5wdXNoKHsgYW5ub3RhdGlvblBhdGg6IHBhdGguYW5ub3RhdGlvblBhdGggfSk7XG5cdFx0XHR9XG5cdFx0XHRmaWx0ZXJzID0ge1xuXHRcdFx0XHRxdWlja0ZpbHRlcnM6IHtcblx0XHRcdFx0XHRlbmFibGVkOlxuXHRcdFx0XHRcdFx0Y29udmVydGVyQ29udGV4dC5nZXRUZW1wbGF0ZVR5cGUoKSA9PT0gVGVtcGxhdGVUeXBlLkxpc3RSZXBvcnRcblx0XHRcdFx0XHRcdFx0PyBcIns9ICR7cGFnZUludGVybmFsPmhhc1BlbmRpbmdGaWx0ZXJzfSAhPT0gdHJ1ZX1cIlxuXHRcdFx0XHRcdFx0XHQ6IHRydWUsXG5cdFx0XHRcdFx0c2hvd0NvdW50czogdGFibGVTZXR0aW5ncz8ucXVpY2tWYXJpYW50U2VsZWN0aW9uPy5zaG93Q291bnRzLFxuXHRcdFx0XHRcdHBhdGhzOiBxdWlja0ZpbHRlclBhdGhzXG5cdFx0XHRcdH1cblx0XHRcdH07XG5cdFx0fSk7XG5cdFx0Y3JlYXRpb25Nb2RlID0gdGFibGVTZXR0aW5ncy5jcmVhdGlvbk1vZGU/Lm5hbWUgfHwgY3JlYXRpb25Nb2RlO1xuXHRcdGNyZWF0ZUF0RW5kID0gdGFibGVTZXR0aW5ncy5jcmVhdGlvbk1vZGU/LmNyZWF0ZUF0RW5kICE9PSB1bmRlZmluZWQgPyB0YWJsZVNldHRpbmdzLmNyZWF0aW9uTW9kZT8uY3JlYXRlQXRFbmQgOiB0cnVlO1xuXHRcdGN1c3RvbVZhbGlkYXRpb25GdW5jdGlvbiA9IHRhYmxlU2V0dGluZ3MuY3JlYXRpb25Nb2RlPy5jdXN0b21WYWxpZGF0aW9uRnVuY3Rpb247XG5cdFx0Ly8gaWYgYSBjdXN0b20gdmFsaWRhdGlvbiBmdW5jdGlvbiBpcyBwcm92aWRlZCwgZGlzYWJsZUFkZFJvd0J1dHRvbkZvckVtcHR5RGF0YSBzaG91bGQgbm90IGJlIGNvbnNpZGVyZWQsIGkuZS4gc2V0IHRvIGZhbHNlXG5cdFx0ZGlzYWJsZUFkZFJvd0J1dHRvbkZvckVtcHR5RGF0YSA9ICFjdXN0b21WYWxpZGF0aW9uRnVuY3Rpb24gPyAhIXRhYmxlU2V0dGluZ3MuY3JlYXRpb25Nb2RlPy5kaXNhYmxlQWRkUm93QnV0dG9uRm9yRW1wdHlEYXRhIDogZmFsc2U7XG5cdFx0Y29uZGVuc2VkVGFibGVMYXlvdXQgPSB0YWJsZVNldHRpbmdzLmNvbmRlbnNlZFRhYmxlTGF5b3V0ICE9PSB1bmRlZmluZWQgPyB0YWJsZVNldHRpbmdzLmNvbmRlbnNlZFRhYmxlTGF5b3V0IDogZmFsc2U7XG5cdFx0aGlkZVRhYmxlVGl0bGUgPSAhIXRhYmxlU2V0dGluZ3MucXVpY2tWYXJpYW50U2VsZWN0aW9uPy5oaWRlVGFibGVUaXRsZTtcblx0XHR0YWJsZVR5cGUgPSB0YWJsZVNldHRpbmdzPy50eXBlIHx8IFwiUmVzcG9uc2l2ZVRhYmxlXCI7XG5cdFx0aWYgKGNvbnZlcnRlckNvbnRleHQuZ2V0VGVtcGxhdGVUeXBlKCkgIT09IFwiT2JqZWN0UGFnZVwiKSB7XG5cdFx0XHRpZiAodGFibGVTZXR0aW5ncz8udHlwZSA9PT0gXCJBbmFseXRpY2FsVGFibGVcIiAmJiAhYWdncmVnYXRpb25IZWxwZXIuaXNBbmFseXRpY3NTdXBwb3J0ZWQoKSkge1xuXHRcdFx0XHR0YWJsZVR5cGUgPSBcIkdyaWRUYWJsZVwiO1xuXHRcdFx0fVxuXHRcdFx0aWYgKCF0YWJsZVNldHRpbmdzPy50eXBlKSB7XG5cdFx0XHRcdGlmIChjb252ZXJ0ZXJDb250ZXh0LmdldE1hbmlmZXN0V3JhcHBlcigpLmlzRGVza3RvcCgpICYmIGFnZ3JlZ2F0aW9uSGVscGVyLmlzQW5hbHl0aWNzU3VwcG9ydGVkKCkpIHtcblx0XHRcdFx0XHR0YWJsZVR5cGUgPSBcIkFuYWx5dGljYWxUYWJsZVwiO1xuXHRcdFx0XHR9IGVsc2Uge1xuXHRcdFx0XHRcdHRhYmxlVHlwZSA9IFwiUmVzcG9uc2l2ZVRhYmxlXCI7XG5cdFx0XHRcdH1cblx0XHRcdH1cblx0XHR9XG5cdFx0Ly8gSWYgZW5hYmxlRnVsbFNjcmVlbiBpcyBub3Qgc2V0LCB1c2UgYXMgZGVmYXVsdCB0cnVlIG9uIHBob25lIGFuZCBmYWxzZSBvdGhlcndpc2Vcblx0XHRlbmFibGVGdWxsU2NyZWVuID0gdGFibGVTZXR0aW5ncy5lbmFibGVGdWxsU2NyZWVuID8/IGNvbnZlcnRlckNvbnRleHQuZ2V0TWFuaWZlc3RXcmFwcGVyKCkuaXNQaG9uZSgpO1xuXHRcdC8vIE1ha2Ugc3VyZSB0aGF0IGVuYWJsZUZ1bGxTY3JlZW4gaXMgbm90IHNldCBvbiBMaXN0UmVwb3J0IGZvciBkZXNrdG9wIG9yIHRhYmxldFxuXHRcdGlmIChcblx0XHRcdCFjb252ZXJ0ZXJDb250ZXh0LmdldE1hbmlmZXN0V3JhcHBlcigpLmlzUGhvbmUoKSAmJlxuXHRcdFx0ZW5hYmxlRnVsbFNjcmVlbiAmJlxuXHRcdFx0Y29udmVydGVyQ29udGV4dC5nZXRUZW1wbGF0ZVR5cGUoKSA9PT0gVGVtcGxhdGVUeXBlLkxpc3RSZXBvcnRcblx0XHQpIHtcblx0XHRcdGVuYWJsZUZ1bGxTY3JlZW4gPSBmYWxzZTtcblx0XHRcdGNvbnZlcnRlckNvbnRleHRcblx0XHRcdFx0LmdldERpYWdub3N0aWNzKClcblx0XHRcdFx0LmFkZElzc3VlKElzc3VlQ2F0ZWdvcnkuTWFuaWZlc3QsIElzc3VlU2V2ZXJpdHkuTG93LCBJc3N1ZVR5cGUuRlVMTFNDUkVFTk1PREVfTk9UX09OX0xJU1RSRVBPUlQpO1xuXHRcdH1cblx0XHRzZWxlY3Rpb25MaW1pdCA9IHRhYmxlU2V0dGluZ3Muc2VsZWN0QWxsID09PSB0cnVlIHx8IHRhYmxlU2V0dGluZ3Muc2VsZWN0aW9uTGltaXQgPT09IDAgPyAwIDogdGFibGVTZXR0aW5ncy5zZWxlY3Rpb25MaW1pdCB8fCAyMDA7XG5cdFx0aWYgKHRhYmxlVHlwZSA9PT0gXCJSZXNwb25zaXZlVGFibGVcIikge1xuXHRcdFx0aWYgKFxuXHRcdFx0XHRjb252ZXJ0ZXJDb250ZXh0LmdldFRlbXBsYXRlVHlwZSgpID09PSBUZW1wbGF0ZVR5cGUuTGlzdFJlcG9ydCB8fFxuXHRcdFx0XHRjb252ZXJ0ZXJDb250ZXh0LmdldFRlbXBsYXRlVHlwZSgpID09PSBUZW1wbGF0ZVR5cGUuQW5hbHl0aWNhbExpc3RQYWdlXG5cdFx0XHQpIHtcblx0XHRcdFx0bXVsdGlTZWxlY3RNb2RlID0gISF0YWJsZVNldHRpbmdzLnNlbGVjdEFsbCA/IFwiRGVmYXVsdFwiIDogXCJDbGVhckFsbFwiO1xuXHRcdFx0fVxuXHRcdFx0aWYgKGNvbnZlcnRlckNvbnRleHQuZ2V0VGVtcGxhdGVUeXBlKCkgPT09IFRlbXBsYXRlVHlwZS5PYmplY3RQYWdlKSB7XG5cdFx0XHRcdGlmIChjb252ZXJ0ZXJDb250ZXh0LmdldE1hbmlmZXN0V3JhcHBlcigpLnVzZUljb25UYWJCYXIoKSkge1xuXHRcdFx0XHRcdG11bHRpU2VsZWN0TW9kZSA9ICEhdGFibGVTZXR0aW5ncy5zZWxlY3RBbGwgPyBcIkRlZmF1bHRcIiA6IFwiQ2xlYXJBbGxcIjtcblx0XHRcdFx0fSBlbHNlIHtcblx0XHRcdFx0XHRtdWx0aVNlbGVjdE1vZGUgPSB0YWJsZVNldHRpbmdzLnNlbGVjdEFsbCA9PT0gZmFsc2UgPyBcIkNsZWFyQWxsXCIgOiBcIkRlZmF1bHRcIjtcblx0XHRcdFx0fVxuXHRcdFx0fVxuXHRcdH1cblx0XHRlbmFibGVFeHBvcnQgPVxuXHRcdFx0dGFibGVTZXR0aW5ncy5lbmFibGVFeHBvcnQgIT09IHVuZGVmaW5lZFxuXHRcdFx0XHQ/IHRhYmxlU2V0dGluZ3MuZW5hYmxlRXhwb3J0XG5cdFx0XHRcdDogY29udmVydGVyQ29udGV4dC5nZXRUZW1wbGF0ZVR5cGUoKSAhPT0gXCJPYmplY3RQYWdlXCIgfHwgZW5hYmxlUGFzdGU7XG5cdH1cblx0cmV0dXJuIHtcblx0XHRmaWx0ZXJzOiBmaWx0ZXJzLFxuXHRcdHR5cGU6IHRhYmxlVHlwZSxcblx0XHRlbmFibGVGdWxsU2NyZWVuOiBlbmFibGVGdWxsU2NyZWVuLFxuXHRcdGhlYWRlclZpc2libGU6ICEocXVpY2tTZWxlY3Rpb25WYXJpYW50ICYmIGhpZGVUYWJsZVRpdGxlKSxcblx0XHRlbmFibGVFeHBvcnQ6IGVuYWJsZUV4cG9ydCxcblx0XHRjcmVhdGlvbk1vZGU6IGNyZWF0aW9uTW9kZSxcblx0XHRjcmVhdGVBdEVuZDogY3JlYXRlQXRFbmQsXG5cdFx0ZGlzYWJsZUFkZFJvd0J1dHRvbkZvckVtcHR5RGF0YTogZGlzYWJsZUFkZFJvd0J1dHRvbkZvckVtcHR5RGF0YSxcblx0XHRjdXN0b21WYWxpZGF0aW9uRnVuY3Rpb246IGN1c3RvbVZhbGlkYXRpb25GdW5jdGlvbixcblx0XHR1c2VDb25kZW5zZWRUYWJsZUxheW91dDogY29uZGVuc2VkVGFibGVMYXlvdXQgJiYgaXNDb25kZW5zZWRUYWJsZUxheW91dENvbXBsaWFudCxcblx0XHRzZWxlY3Rpb25MaW1pdDogc2VsZWN0aW9uTGltaXQsXG5cdFx0bXVsdGlTZWxlY3RNb2RlOiBtdWx0aVNlbGVjdE1vZGUsXG5cdFx0ZW5hYmxlUGFzdGU6IGVuYWJsZVBhc3RlLFxuXHRcdHNob3dSb3dDb3VudDpcblx0XHRcdCF0YWJsZVNldHRpbmdzPy5xdWlja1ZhcmlhbnRTZWxlY3Rpb24/LnNob3dDb3VudHMgJiYgIWNvbnZlcnRlckNvbnRleHQuZ2V0TWFuaWZlc3RXcmFwcGVyKCkuZ2V0Vmlld0NvbmZpZ3VyYXRpb24oKT8uc2hvd0NvdW50cyxcblx0XHRlbmFibGVNYXNzRWRpdDogdGFibGVTZXR0aW5ncz8uZW5hYmxlTWFzc0VkaXQsXG5cdFx0ZW5hYmxlQXV0b0NvbHVtbldpZHRoOiBlbmFibGVBdXRvQ29sdW1uV2lkdGhcblx0fTtcbn1cblxuZXhwb3J0IHR5cGUgY29uZmlnVHlwZUNvbnN0cmFpbnRzID0ge1xuXHRzY2FsZT86IG51bWJlcjtcblx0cHJlY2lzaW9uPzogbnVtYmVyO1xuXHRtYXhMZW5ndGg/OiBudW1iZXI7XG5cdG51bGxhYmxlPzogYm9vbGVhbjtcblx0bWluaW11bT86IHN0cmluZztcblx0bWF4aW11bT86IHN0cmluZztcblx0aXNEaWdpdFNlcXVlbmNlPzogYm9vbGVhbjtcbn07XG5cbmV4cG9ydCB0eXBlIGNvbmZpZ1R5cGVmb3JtYXRPcHRpb25zID0ge1xuXHRwYXJzZUFzU3RyaW5nPzogYm9vbGVhbjtcblx0ZW1wdHlTdHJpbmc/OiBzdHJpbmc7XG5cdHBhcnNlS2VlcHNFbXB0eVN0cmluZz86IGJvb2xlYW47XG59O1xuXG5leHBvcnQgdHlwZSBjb25maWdUeXBlID0ge1xuXHR0eXBlOiBzdHJpbmc7XG5cdGNvbnN0cmFpbnRzOiBjb25maWdUeXBlQ29uc3RyYWludHM7XG5cdGZvcm1hdE9wdGlvbnM6IGNvbmZpZ1R5cGVmb3JtYXRPcHRpb25zO1xufTtcblxuZXhwb3J0IGZ1bmN0aW9uIGdldFR5cGVDb25maWcob1Byb3BlcnR5OiBQcm9wZXJ0eSB8IERhdGFGaWVsZEFic3RyYWN0VHlwZXMsIGRhdGFUeXBlOiBzdHJpbmcgfCB1bmRlZmluZWQpOiBhbnkge1xuXHRsZXQgb1RhcmdldE1hcHBpbmcgPSBFRE1fVFlQRV9NQVBQSU5HWyhvUHJvcGVydHkgYXMgUHJvcGVydHkpPy50eXBlXSB8fCAoZGF0YVR5cGUgPyBFRE1fVFlQRV9NQVBQSU5HW2RhdGFUeXBlXSA6IHVuZGVmaW5lZCk7XG5cdGlmICghb1RhcmdldE1hcHBpbmcgJiYgKG9Qcm9wZXJ0eSBhcyBQcm9wZXJ0eSkudGFyZ2V0VHlwZSAmJiAob1Byb3BlcnR5IGFzIFByb3BlcnR5KS50YXJnZXRUeXBlPy5fdHlwZSA9PT0gXCJUeXBlRGVmaW5pdGlvblwiKSB7XG5cdFx0b1RhcmdldE1hcHBpbmcgPSBFRE1fVFlQRV9NQVBQSU5HWygob1Byb3BlcnR5IGFzIFByb3BlcnR5KS50YXJnZXRUeXBlIGFzIFR5cGVEZWZpbml0aW9uKS51bmRlcmx5aW5nVHlwZV07XG5cdH1cblx0Y29uc3QgcHJvcGVydHlUeXBlQ29uZmlnOiBjb25maWdUeXBlID0ge1xuXHRcdHR5cGU6IG9UYXJnZXRNYXBwaW5nLnR5cGUsXG5cdFx0Y29uc3RyYWludHM6IHt9LFxuXHRcdGZvcm1hdE9wdGlvbnM6IHt9XG5cdH07XG5cdGlmIChpc1Byb3BlcnR5KG9Qcm9wZXJ0eSkpIHtcblx0XHRwcm9wZXJ0eVR5cGVDb25maWcuY29uc3RyYWludHMgPSB7XG5cdFx0XHRzY2FsZTogb1RhcmdldE1hcHBpbmcuY29uc3RyYWludHM/LiRTY2FsZSA/IG9Qcm9wZXJ0eS5zY2FsZSA6IHVuZGVmaW5lZCxcblx0XHRcdHByZWNpc2lvbjogb1RhcmdldE1hcHBpbmcuY29uc3RyYWludHM/LiRQcmVjaXNpb24gPyBvUHJvcGVydHkucHJlY2lzaW9uIDogdW5kZWZpbmVkLFxuXHRcdFx0bWF4TGVuZ3RoOiBvVGFyZ2V0TWFwcGluZy5jb25zdHJhaW50cz8uJE1heExlbmd0aCA/IG9Qcm9wZXJ0eS5tYXhMZW5ndGggOiB1bmRlZmluZWQsXG5cdFx0XHRudWxsYWJsZTogb1RhcmdldE1hcHBpbmcuY29uc3RyYWludHM/LiROdWxsYWJsZSA/IG9Qcm9wZXJ0eS5udWxsYWJsZSA6IHVuZGVmaW5lZCxcblx0XHRcdG1pbmltdW06XG5cdFx0XHRcdG9UYXJnZXRNYXBwaW5nLmNvbnN0cmFpbnRzPy5bXCJAT3JnLk9EYXRhLlZhbGlkYXRpb24uVjEuTWluaW11bS8kRGVjaW1hbFwiXSAmJlxuXHRcdFx0XHQhaXNOYU4ob1Byb3BlcnR5LmFubm90YXRpb25zPy5WYWxpZGF0aW9uPy5NaW5pbXVtKVxuXHRcdFx0XHRcdD8gYCR7b1Byb3BlcnR5LmFubm90YXRpb25zPy5WYWxpZGF0aW9uPy5NaW5pbXVtfWBcblx0XHRcdFx0XHQ6IHVuZGVmaW5lZCxcblx0XHRcdG1heGltdW06XG5cdFx0XHRcdG9UYXJnZXRNYXBwaW5nLmNvbnN0cmFpbnRzPy5bXCJAT3JnLk9EYXRhLlZhbGlkYXRpb24uVjEuTWF4aW11bS8kRGVjaW1hbFwiXSAmJlxuXHRcdFx0XHQhaXNOYU4ob1Byb3BlcnR5LmFubm90YXRpb25zPy5WYWxpZGF0aW9uPy5NYXhpbXVtKVxuXHRcdFx0XHRcdD8gYCR7b1Byb3BlcnR5LmFubm90YXRpb25zPy5WYWxpZGF0aW9uPy5NYXhpbXVtfWBcblx0XHRcdFx0XHQ6IHVuZGVmaW5lZCxcblx0XHRcdGlzRGlnaXRTZXF1ZW5jZTpcblx0XHRcdFx0cHJvcGVydHlUeXBlQ29uZmlnLnR5cGUgPT09IFwic2FwLnVpLm1vZGVsLm9kYXRhLnR5cGUuU3RyaW5nXCIgJiZcblx0XHRcdFx0b1RhcmdldE1hcHBpbmcuY29uc3RyYWludHM/LltcIkBjb20uc2FwLnZvY2FidWxhcmllcy5Db21tb24udjEuSXNEaWdpdFNlcXVlbmNlXCJdICYmXG5cdFx0XHRcdChvUHJvcGVydHkgYXMgUHJvcGVydHkpLmFubm90YXRpb25zPy5Db21tb24/LklzRGlnaXRTZXF1ZW5jZVxuXHRcdFx0XHRcdD8gdHJ1ZVxuXHRcdFx0XHRcdDogdW5kZWZpbmVkXG5cdFx0fTtcblx0fVxuXHRwcm9wZXJ0eVR5cGVDb25maWcuZm9ybWF0T3B0aW9ucyA9IHtcblx0XHRwYXJzZUFzU3RyaW5nOlxuXHRcdFx0cHJvcGVydHlUeXBlQ29uZmlnPy50eXBlPy5pbmRleE9mKFwic2FwLnVpLm1vZGVsLm9kYXRhLnR5cGUuSW50XCIpID09PSAwIHx8XG5cdFx0XHRwcm9wZXJ0eVR5cGVDb25maWc/LnR5cGU/LmluZGV4T2YoXCJzYXAudWkubW9kZWwub2RhdGEudHlwZS5Eb3VibGVcIikgPT09IDBcblx0XHRcdFx0PyBmYWxzZVxuXHRcdFx0XHQ6IHVuZGVmaW5lZCxcblx0XHRlbXB0eVN0cmluZzpcblx0XHRcdHByb3BlcnR5VHlwZUNvbmZpZz8udHlwZT8uaW5kZXhPZihcInNhcC51aS5tb2RlbC5vZGF0YS50eXBlLkludFwiKSA9PT0gMCB8fFxuXHRcdFx0cHJvcGVydHlUeXBlQ29uZmlnPy50eXBlPy5pbmRleE9mKFwic2FwLnVpLm1vZGVsLm9kYXRhLnR5cGUuRG91YmxlXCIpID09PSAwXG5cdFx0XHRcdD8gXCJcIlxuXHRcdFx0XHQ6IHVuZGVmaW5lZCxcblx0XHRwYXJzZUtlZXBzRW1wdHlTdHJpbmc6IHByb3BlcnR5VHlwZUNvbmZpZy50eXBlID09PSBcInNhcC51aS5tb2RlbC5vZGF0YS50eXBlLlN0cmluZ1wiID8gdHJ1ZSA6IHVuZGVmaW5lZFxuXHR9O1xuXHRyZXR1cm4gcHJvcGVydHlUeXBlQ29uZmlnO1xufVxuIl19