@sapui5/sap.fe.core 1.108.7 → 1.108.10

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 (183) hide show
  1. package/package.json +5 -2
  2. package/src/sap/fe/core/.library +1 -1
  3. package/src/sap/fe/core/ActionRuntime.js +7 -21
  4. package/src/sap/fe/core/AppComponent.js +42 -88
  5. package/src/sap/fe/core/AppStateHandler.js +19 -56
  6. package/src/sap/fe/core/BaseController.js +5 -19
  7. package/src/sap/fe/core/CommonUtils.js +173 -550
  8. package/src/sap/fe/core/CommonUtils.ts +3 -2
  9. package/src/sap/fe/core/ExtensionAPI.js +41 -75
  10. package/src/sap/fe/core/PageController.js +14 -44
  11. package/src/sap/fe/core/TemplateComponent.js +6 -51
  12. package/src/sap/fe/core/TemplateModel.js +8 -28
  13. package/src/sap/fe/core/buildingBlocks/AttributeModel.js +7 -21
  14. package/src/sap/fe/core/buildingBlocks/BuildingBlock.js +11 -84
  15. package/src/sap/fe/core/buildingBlocks/BuildingBlockFormatter.js +1 -1
  16. package/src/sap/fe/core/buildingBlocks/BuildingBlockRuntime.js +54 -273
  17. package/src/sap/fe/core/buildingBlocks/TraceInfo.js +28 -66
  18. package/src/sap/fe/core/controllerextensions/BusyLocker.js +11 -26
  19. package/src/sap/fe/core/controllerextensions/EditFlow.js +291 -536
  20. package/src/sap/fe/core/controllerextensions/EditFlow.ts +69 -25
  21. package/src/sap/fe/core/controllerextensions/IntentBasedNavigation.js +11 -22
  22. package/src/sap/fe/core/controllerextensions/InternalEditFlow.js +73 -165
  23. package/src/sap/fe/core/controllerextensions/InternalEditFlow.ts +7 -2
  24. package/src/sap/fe/core/controllerextensions/InternalIntentBasedNavigation.js +94 -196
  25. package/src/sap/fe/core/controllerextensions/InternalRouting.js +114 -279
  26. package/src/sap/fe/core/controllerextensions/KPIManagement.js +69 -172
  27. package/src/sap/fe/core/controllerextensions/MassEdit.js +24 -44
  28. package/src/sap/fe/core/controllerextensions/MessageHandler.js +20 -46
  29. package/src/sap/fe/core/controllerextensions/PageReady.js +70 -110
  30. package/src/sap/fe/core/controllerextensions/PageReady.ts +20 -2
  31. package/src/sap/fe/core/controllerextensions/Paginator.js +16 -50
  32. package/src/sap/fe/core/controllerextensions/Placeholder.js +7 -33
  33. package/src/sap/fe/core/controllerextensions/Routing.js +19 -31
  34. package/src/sap/fe/core/controllerextensions/RoutingListener.js +1 -1
  35. package/src/sap/fe/core/controllerextensions/Share.js +51 -96
  36. package/src/sap/fe/core/controllerextensions/SideEffects.js +78 -164
  37. package/src/sap/fe/core/controllerextensions/ViewState.js +109 -180
  38. package/src/sap/fe/core/controllerextensions/collaboration/ActivityBase.js +3 -20
  39. package/src/sap/fe/core/controllerextensions/collaboration/ActivitySync.js +16 -71
  40. package/src/sap/fe/core/controllerextensions/collaboration/CollaborationCommon.js +6 -33
  41. package/src/sap/fe/core/controllerextensions/collaboration/Manage.js +8 -45
  42. package/src/sap/fe/core/controllerextensions/editFlow/TransactionHelper.js +95 -371
  43. package/src/sap/fe/core/controllerextensions/editFlow/draft.js +41 -105
  44. package/src/sap/fe/core/controllerextensions/editFlow/draft.ts +9 -0
  45. package/src/sap/fe/core/controllerextensions/editFlow/draftDataLossPopup.js +1 -30
  46. package/src/sap/fe/core/controllerextensions/editFlow/operations.js +113 -288
  47. package/src/sap/fe/core/controllerextensions/editFlow/sticky.js +16 -36
  48. package/src/sap/fe/core/controllerextensions/messageHandler/messageHandling.js +39 -121
  49. package/src/sap/fe/core/controllerextensions/pageReady/DataQueryWatcher.js +24 -101
  50. package/src/sap/fe/core/controllerextensions/routing/RouterProxy.js +91 -217
  51. package/src/sap/fe/core/controls/Any.js +1 -1
  52. package/src/sap/fe/core/controls/AnyElement.js +1 -1
  53. package/src/sap/fe/core/controls/CommandExecution.js +4 -26
  54. package/src/sap/fe/core/controls/ConditionalWrapper.js +1 -33
  55. package/src/sap/fe/core/controls/CustomFilterFieldContentWrapper.js +39 -93
  56. package/src/sap/fe/core/controls/CustomQuickViewPage.js +1 -32
  57. package/src/sap/fe/core/controls/DataLossOrDraftDiscard/DataLossOrDraftDiscardHandler.js +16 -34
  58. package/src/sap/fe/core/controls/FieldWrapper.js +6 -49
  59. package/src/sap/fe/core/controls/FileWrapper.js +9 -76
  60. package/src/sap/fe/core/controls/FilterBar.js +19 -54
  61. package/src/sap/fe/core/controls/FormElementWrapper.js +1 -22
  62. package/src/sap/fe/core/controls/MassEditSelect.js +1 -1
  63. package/src/sap/fe/core/controls/MultiValueParameterDelegate.js +1 -5
  64. package/src/sap/fe/core/controls/filterbar/FilterContainer.js +13 -40
  65. package/src/sap/fe/core/controls/filterbar/VisualFilter.js +5 -48
  66. package/src/sap/fe/core/controls/filterbar/VisualFilterContainer.js +12 -48
  67. package/src/sap/fe/core/controls/filterbar/utils/VisualFilterUtils.js +14 -43
  68. package/src/sap/fe/core/controls/massEdit/MassEditHandlers.js +6 -78
  69. package/src/sap/fe/core/converters/ConverterContext.js +44 -98
  70. package/src/sap/fe/core/converters/ManifestSettings.js +1 -20
  71. package/src/sap/fe/core/converters/ManifestWrapper.js +66 -131
  72. package/src/sap/fe/core/converters/MetaModelConverter.js +19 -162
  73. package/src/sap/fe/core/converters/TemplateConverter.js +2 -19
  74. package/src/sap/fe/core/converters/annotations/DataField.js +16 -100
  75. package/src/sap/fe/core/converters/controls/Common/Action.js +40 -112
  76. package/src/sap/fe/core/converters/controls/Common/Chart.js +6 -60
  77. package/src/sap/fe/core/converters/controls/Common/Criticality.js +1 -9
  78. package/src/sap/fe/core/converters/controls/Common/DataVisualization.js +9 -65
  79. package/src/sap/fe/core/converters/controls/Common/Form.js +6 -49
  80. package/src/sap/fe/core/converters/controls/Common/KPI.js +13 -63
  81. package/src/sap/fe/core/converters/controls/Common/Table.js +145 -570
  82. package/src/sap/fe/core/converters/controls/Common/table/StandardActions.js +42 -100
  83. package/src/sap/fe/core/converters/controls/ListReport/FilterBar.js +57 -199
  84. package/src/sap/fe/core/converters/controls/ListReport/FilterBar.ts +3 -2
  85. package/src/sap/fe/core/converters/controls/ListReport/VisualFilters.js +10 -79
  86. package/src/sap/fe/core/converters/controls/ObjectPage/Avatar.js +1 -19
  87. package/src/sap/fe/core/converters/controls/ObjectPage/HeaderFacet.js +40 -113
  88. package/src/sap/fe/core/converters/controls/ObjectPage/SubSection.js +69 -160
  89. package/src/sap/fe/core/converters/controls/ObjectPage/SubSection.ts +22 -10
  90. package/src/sap/fe/core/converters/helpers/Aggregation.js +22 -59
  91. package/src/sap/fe/core/converters/helpers/BindingHelper.js +9 -18
  92. package/src/sap/fe/core/converters/helpers/ConfigurableObject.js +13 -48
  93. package/src/sap/fe/core/converters/helpers/DataFieldHelper.js +3 -46
  94. package/src/sap/fe/core/converters/helpers/ID.js +3 -17
  95. package/src/sap/fe/core/converters/helpers/IssueManager.js +1 -6
  96. package/src/sap/fe/core/converters/helpers/Key.js +7 -16
  97. package/src/sap/fe/core/converters/helpers/SelectionVariantHelper.js +2 -20
  98. package/src/sap/fe/core/converters/objectPage/FormMenuActions.js +2 -37
  99. package/src/sap/fe/core/converters/objectPage/HeaderAndFooterAction.js +80 -120
  100. package/src/sap/fe/core/converters/templates/ListReportConverter.js +25 -111
  101. package/src/sap/fe/core/converters/templates/ObjectPageConverter.js +31 -101
  102. package/src/sap/fe/core/designtime/AppComponent.designtime.js +3 -9
  103. package/src/sap/fe/core/formatters/CollaborationFormatter.js +2 -21
  104. package/src/sap/fe/core/formatters/FPMFormatter.js +3 -7
  105. package/src/sap/fe/core/formatters/KPIFormatter.js +5 -13
  106. package/src/sap/fe/core/formatters/StandardFormatter.js +3 -18
  107. package/src/sap/fe/core/formatters/TableFormatter.js +6 -43
  108. package/src/sap/fe/core/formatters/TableFormatterTypes.js +1 -4
  109. package/src/sap/fe/core/formatters/ValueFormatter.js +1 -37
  110. package/src/sap/fe/core/fpm/Component.js +2 -17
  111. package/src/sap/fe/core/helpers/AnnotationEnum.js +5 -15
  112. package/src/sap/fe/core/helpers/AppStartupHelper.js +15 -51
  113. package/src/sap/fe/core/helpers/BindingToolkit.js +82 -363
  114. package/src/sap/fe/core/helpers/ClassSupport.js +16 -97
  115. package/src/sap/fe/core/helpers/DynamicAnnotationPathHelper.js +1 -12
  116. package/src/sap/fe/core/helpers/EditState.js +2 -5
  117. package/src/sap/fe/core/helpers/ExcelFormatHelper.js +1 -10
  118. package/src/sap/fe/core/helpers/FPMHelper.js +3 -8
  119. package/src/sap/fe/core/helpers/KeepAliveHelper.js +8 -38
  120. package/src/sap/fe/core/helpers/KeepAliveRefreshTypes.js +1 -5
  121. package/src/sap/fe/core/helpers/LRMessageStrip.js +15 -53
  122. package/src/sap/fe/core/helpers/LoaderUtils.js +1 -7
  123. package/src/sap/fe/core/helpers/MassEditHelper.js +78 -218
  124. package/src/sap/fe/core/helpers/MessageStrip.js +12 -28
  125. package/src/sap/fe/core/helpers/ModelHelper.js +10 -92
  126. package/src/sap/fe/core/helpers/PasteHelper.js +19 -46
  127. package/src/sap/fe/core/helpers/SemanticDateOperators.js +1 -25
  128. package/src/sap/fe/core/helpers/SemanticKeyHelper.js +5 -11
  129. package/src/sap/fe/core/helpers/SideEffectsHelper.js +26 -32
  130. package/src/sap/fe/core/helpers/StableIdHelper.js +9 -46
  131. package/src/sap/fe/core/helpers/Synchronization.js +1 -8
  132. package/src/sap/fe/core/helpers/ToES6Promise.js +1 -4
  133. package/src/sap/fe/core/jsx-runtime/Fragment.js +1 -3
  134. package/src/sap/fe/core/jsx-runtime/ViewLoader.js +3 -23
  135. package/src/sap/fe/core/jsx-runtime/jsx-control.js +3 -23
  136. package/src/sap/fe/core/jsx-runtime/jsx-xml.js +4 -16
  137. package/src/sap/fe/core/jsx-runtime/jsx.js +2 -5
  138. package/src/sap/fe/core/jsx-runtime/jsxs.js +1 -1
  139. package/src/sap/fe/core/jsx-runtime/useMDXComponents.js +3 -26
  140. package/src/sap/fe/core/library.js +8 -42
  141. package/src/sap/fe/core/library.support.js +1 -2
  142. package/src/sap/fe/core/manifestMerger/ChangePageConfiguration.js +5 -15
  143. package/src/sap/fe/core/messagebundle_bg.properties +5 -5
  144. package/src/sap/fe/core/messagebundle_hr.properties +3 -3
  145. package/src/sap/fe/core/messagebundle_pl.properties +1 -1
  146. package/src/sap/fe/core/operationsHelper.js +2 -38
  147. package/src/sap/fe/core/rootView/Fcl.controller.js +68 -217
  148. package/src/sap/fe/core/rootView/NavContainer.controller.js +17 -49
  149. package/src/sap/fe/core/rootView/RootViewBaseController.js +74 -167
  150. package/src/sap/fe/core/services/AsyncComponentServiceFactory.js +1 -18
  151. package/src/sap/fe/core/services/CacheHandlerServiceFactory.js +13 -52
  152. package/src/sap/fe/core/services/EnvironmentServiceFactory.js +1 -22
  153. package/src/sap/fe/core/services/NavigationServiceFactory.js +36 -84
  154. package/src/sap/fe/core/services/ResourceModelServiceFactory.js +4 -28
  155. package/src/sap/fe/core/services/RoutingServiceFactory.js +84 -242
  156. package/src/sap/fe/core/services/ShellServicesFactory.js +118 -249
  157. package/src/sap/fe/core/services/SideEffectsServiceFactory.js +83 -167
  158. package/src/sap/fe/core/services/TemplatedViewServiceFactory.js +8 -80
  159. package/src/sap/fe/core/services/view/TemplatingErrorPage.controller.js +1 -15
  160. package/src/sap/fe/core/support/AnnotationIssue.support.js +1 -4
  161. package/src/sap/fe/core/support/CollectionFacetMissingID.support.js +1 -4
  162. package/src/sap/fe/core/support/CollectionFacetUnsupportedLevel.support.js +1 -4
  163. package/src/sap/fe/core/support/CommonHelper.js +7 -16
  164. package/src/sap/fe/core/support/Diagnostics.js +1 -10
  165. package/src/sap/fe/core/support/InvalidAnnotationColumnKey.support.js +1 -4
  166. package/src/sap/fe/core/templating/CommonFormatters.js +1 -15
  167. package/src/sap/fe/core/templating/CriticalityFormatters.js +4 -20
  168. package/src/sap/fe/core/templating/DataFieldFormatters.js +1 -20
  169. package/src/sap/fe/core/templating/DataModelPathHelper.js +15 -99
  170. package/src/sap/fe/core/templating/DisplayModeFormatter.js +1 -8
  171. package/src/sap/fe/core/templating/EntitySetHelper.js +6 -31
  172. package/src/sap/fe/core/templating/FieldControlHelper.js +4 -21
  173. package/src/sap/fe/core/templating/FilterHelper.js +25 -96
  174. package/src/sap/fe/core/templating/FilterHelper.ts +5 -1
  175. package/src/sap/fe/core/templating/FilterTemplating.js +1 -19
  176. package/src/sap/fe/core/templating/PropertyFormatters.js +1 -34
  177. package/src/sap/fe/core/templating/PropertyHelper.js +21 -107
  178. package/src/sap/fe/core/templating/SemanticObjectHelper.js +2 -12
  179. package/src/sap/fe/core/templating/UIFormatters.js +14 -155
  180. package/src/sap/fe/core/type/DateTimeWithTimezone.js +3 -14
  181. package/src/sap/fe/core/type/Email.js +1 -10
  182. package/src/sap/fe/core/type/TypeUtil.js +1 -11
  183. package/src/sap/fe/core/converters/common/AnnotationConverter.js +0 -2193
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@sapui5/sap.fe.core",
3
- "version": "1.108.7",
3
+ "version": "1.108.10",
4
4
  "description": "SAPUI5 Library sap.fe.core",
5
5
  "license": "SEE LICENSE IN LICENSE.txt",
6
6
  "author": "SAP SE (https://www.sap.com)",
@@ -24,8 +24,11 @@
24
24
  ],
25
25
  "devDependencies": {
26
26
  "@babel/cli": "^7.14.8",
27
+ "@babel/core": "7.14.8",
27
28
  "@ui5/cli": "^2.14.0",
28
29
  "copyfiles": "2.2.0",
29
- "ts-node": "^10.8.1"
30
+ "ts-node": "^10.8.1",
31
+ "typescript": "4.7.3",
32
+ "@types/node": "14.10.1"
30
33
  }
31
34
  }
@@ -6,7 +6,7 @@
6
6
  <copyright>SAP UI development toolkit for HTML5 (SAPUI5)
7
7
  (c) Copyright 2009-2021 SAP SE. All rights reserved
8
8
  </copyright>
9
- <version>1.108.7</version>
9
+ <version>1.108.10</version>
10
10
 
11
11
  <documentation>UI5 library: sap.fe.core</documentation>
12
12
 
@@ -8,7 +8,6 @@ sap.ui.define(["sap/fe/core/CommonUtils", "sap/fe/core/helpers/BindingToolkit"],
8
8
  var transformRecursively = BindingToolkit.transformRecursively;
9
9
  var constant = BindingToolkit.constant;
10
10
  var compileExpression = BindingToolkit.compileExpression;
11
-
12
11
  var ActionRuntime = {
13
12
  /**
14
13
  * Sets the action enablement.
@@ -24,18 +23,14 @@ sap.ui.define(["sap/fe/core/CommonUtils", "sap/fe/core/helpers/BindingToolkit"],
24
23
  */
25
24
  setActionEnablement: function (oInternalModelContext, oActionOperationAvailableMap, aSelectedContexts, sControl) {
26
25
  var aPromises = [];
27
-
28
26
  for (var sAction in oActionOperationAvailableMap) {
29
27
  var aRequestPromises = [];
30
28
  oInternalModelContext.setProperty(sAction, false);
31
29
  var sProperty = oActionOperationAvailableMap[sAction];
32
-
33
30
  for (var i = 0; i < aSelectedContexts.length; i++) {
34
31
  var oSelectedContext = aSelectedContexts[i];
35
-
36
32
  if (oSelectedContext) {
37
33
  var oContextData = oSelectedContext.getObject();
38
-
39
34
  if (sControl === "chart") {
40
35
  if (sProperty === null && !!oContextData["#".concat(sAction)] || oSelectedContext.getObject(sProperty)) {
41
36
  //look for action advertisement if present and its value is not null
@@ -47,7 +42,6 @@ sap.ui.define(["sap/fe/core/CommonUtils", "sap/fe/core/helpers/BindingToolkit"],
47
42
  }
48
43
  }
49
44
  }
50
-
51
45
  if (sControl === "table") {
52
46
  if (!aSelectedContexts.length) {
53
47
  oInternalModelContext.setProperty("dynamicActions/".concat(sAction), {
@@ -64,7 +58,6 @@ sap.ui.define(["sap/fe/core/CommonUtils", "sap/fe/core/helpers/BindingToolkit"],
64
58
  }
65
59
  }
66
60
  }
67
-
68
61
  if (sControl === "table") {
69
62
  return Promise.all(aPromises);
70
63
  }
@@ -72,14 +65,11 @@ sap.ui.define(["sap/fe/core/CommonUtils", "sap/fe/core/helpers/BindingToolkit"],
72
65
  setActionEnablementAfterPatch: function (oView, oListBinding, oInternalModelContext) {
73
66
  var oInternalModelContextData = oInternalModelContext === null || oInternalModelContext === void 0 ? void 0 : oInternalModelContext.getObject();
74
67
  var oControls = (oInternalModelContextData === null || oInternalModelContextData === void 0 ? void 0 : oInternalModelContextData.controls) || {};
75
-
76
68
  for (var sKey in oControls) {
77
69
  if (oControls[sKey] && oControls[sKey].controlId) {
78
70
  var oTable = oView.byId(sKey);
79
-
80
71
  if (oTable.isA("sap.ui.mdc.Table")) {
81
72
  var oRowBinding = oTable.getRowBinding();
82
-
83
73
  if (oRowBinding == oListBinding) {
84
74
  ActionRuntime.setActionEnablement(oInternalModelContext, JSON.parse(oTable.data("operationAvailableMap").customData), oTable.getSelectedContexts(), "table");
85
75
  }
@@ -93,23 +83,22 @@ sap.ui.define(["sap/fe/core/CommonUtils", "sap/fe/core/helpers/BindingToolkit"],
93
83
  bEnabled: false,
94
84
  aApplicable: [],
95
85
  aNotApplicable: []
96
- }); // Note that non dynamic actions are not processed here. They are enabled because
86
+ });
87
+ // Note that non dynamic actions are not processed here. They are enabled because
97
88
  // one or more are selected and the second part of the condition in the templating
98
89
  // is then undefined and thus the button takes the default enabling, which is true!
99
-
100
90
  var aApplicable = [],
101
- aNotApplicable = [],
102
- sDynamicActionEnabledPath = "".concat(oInternalModelContext.getPath(), "/dynamicActions/").concat(sAction, "/bEnabled");
103
-
91
+ aNotApplicable = [],
92
+ sDynamicActionEnabledPath = "".concat(oInternalModelContext.getPath(), "/dynamicActions/").concat(sAction, "/bEnabled");
104
93
  if (typeof sProperty === "object" && sProperty !== null && sProperty !== undefined) {
105
94
  if (oSelectedContext) {
106
95
  var oContextData = oSelectedContext.getObject();
107
- var oTransformedBinding = transformRecursively(sProperty, "PathInModel", // eslint-disable-next-line no-loop-func
96
+ var oTransformedBinding = transformRecursively(sProperty, "PathInModel",
97
+ // eslint-disable-next-line no-loop-func
108
98
  function (oBindingExpression) {
109
99
  return oContextData ? constant(oContextData[oBindingExpression.path]) : constant(false);
110
100
  }, true);
111
101
  var sResult = compileExpression(oTransformedBinding);
112
-
113
102
  if (sResult === "true") {
114
103
  oInternalModelContext.getModel().setProperty(sDynamicActionEnabledPath, true);
115
104
  aApplicable.push(oSelectedContext);
@@ -117,11 +106,9 @@ sap.ui.define(["sap/fe/core/CommonUtils", "sap/fe/core/helpers/BindingToolkit"],
117
106
  aNotApplicable.push(oSelectedContext);
118
107
  }
119
108
  }
120
-
121
109
  CommonUtils.setDynamicActionContexts(oInternalModelContext, sAction, aApplicable, aNotApplicable);
122
110
  } else {
123
111
  var _oContextData = oSelectedContext.getObject();
124
-
125
112
  if (sProperty === null && !!_oContextData["#".concat(sAction)]) {
126
113
  //look for action advertisement if present and its value is not null
127
114
  oInternalModelContext.getModel().setProperty(sDynamicActionEnabledPath, true);
@@ -130,10 +117,9 @@ sap.ui.define(["sap/fe/core/CommonUtils", "sap/fe/core/helpers/BindingToolkit"],
130
117
  aRequestPromises.push(CommonUtils.requestProperty(oSelectedContext, sAction, sProperty, sDynamicActionEnabledPath));
131
118
  }
132
119
  }
133
-
134
120
  return aRequestPromises;
135
121
  }
136
122
  };
137
123
  return ActionRuntime;
138
124
  }, false);
139
- //# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJuYW1lcyI6WyJBY3Rpb25SdW50aW1lIiwic2V0QWN0aW9uRW5hYmxlbWVudCIsIm9JbnRlcm5hbE1vZGVsQ29udGV4dCIsIm9BY3Rpb25PcGVyYXRpb25BdmFpbGFibGVNYXAiLCJhU2VsZWN0ZWRDb250ZXh0cyIsInNDb250cm9sIiwiYVByb21pc2VzIiwic0FjdGlvbiIsImFSZXF1ZXN0UHJvbWlzZXMiLCJzZXRQcm9wZXJ0eSIsInNQcm9wZXJ0eSIsImkiLCJsZW5ndGgiLCJvU2VsZWN0ZWRDb250ZXh0Iiwib0NvbnRleHREYXRhIiwiZ2V0T2JqZWN0IiwiX3NldEFjdGlvbkVuYWJsZW1lbnRGb3JUYWJsZSIsImJFbmFibGVkIiwiYUFwcGxpY2FibGUiLCJhTm90QXBwbGljYWJsZSIsInB1c2giLCJDb21tb25VdGlscyIsInNldENvbnRleHRzQmFzZWRPbk9wZXJhdGlvbkF2YWlsYWJsZSIsIlByb21pc2UiLCJhbGwiLCJzZXRBY3Rpb25FbmFibGVtZW50QWZ0ZXJQYXRjaCIsIm9WaWV3Iiwib0xpc3RCaW5kaW5nIiwib0ludGVybmFsTW9kZWxDb250ZXh0RGF0YSIsIm9Db250cm9scyIsImNvbnRyb2xzIiwic0tleSIsImNvbnRyb2xJZCIsIm9UYWJsZSIsImJ5SWQiLCJpc0EiLCJvUm93QmluZGluZyIsImdldFJvd0JpbmRpbmciLCJKU09OIiwicGFyc2UiLCJkYXRhIiwiY3VzdG9tRGF0YSIsImdldFNlbGVjdGVkQ29udGV4dHMiLCJzRHluYW1pY0FjdGlvbkVuYWJsZWRQYXRoIiwiZ2V0UGF0aCIsInVuZGVmaW5lZCIsIm9UcmFuc2Zvcm1lZEJpbmRpbmciLCJ0cmFuc2Zvcm1SZWN1cnNpdmVseSIsIm9CaW5kaW5nRXhwcmVzc2lvbiIsImNvbnN0YW50IiwicGF0aCIsInNSZXN1bHQiLCJjb21waWxlRXhwcmVzc2lvbiIsImdldE1vZGVsIiwic2V0RHluYW1pY0FjdGlvbkNvbnRleHRzIiwicmVxdWVzdFByb3BlcnR5Il0sInNvdXJjZVJvb3QiOiIuIiwic291cmNlcyI6WyJBY3Rpb25SdW50aW1lLnRzIl0sInNvdXJjZXNDb250ZW50IjpbImltcG9ydCBDb21tb25VdGlscyBmcm9tIFwic2FwL2ZlL2NvcmUvQ29tbW9uVXRpbHNcIjtcbmltcG9ydCB7IGNvbXBpbGVFeHByZXNzaW9uLCBjb25zdGFudCwgdHJhbnNmb3JtUmVjdXJzaXZlbHkgfSBmcm9tIFwic2FwL2ZlL2NvcmUvaGVscGVycy9CaW5kaW5nVG9vbGtpdFwiO1xuaW1wb3J0IHR5cGUgeyBJbnRlcm5hbE1vZGVsQ29udGV4dCB9IGZyb20gXCJzYXAvZmUvY29yZS9oZWxwZXJzL01vZGVsSGVscGVyXCI7XG5jb25zdCBBY3Rpb25SdW50aW1lID0ge1xuXHQvKipcblx0ICogU2V0cyB0aGUgYWN0aW9uIGVuYWJsZW1lbnQuXG5cdCAqXG5cdCAqIEBmdW5jdGlvblxuXHQgKiBAbmFtZSBzZXRBY3Rpb25FbmFibGVtZW50XG5cdCAqIEBwYXJhbSBvSW50ZXJuYWxNb2RlbENvbnRleHQgT2JqZWN0IGNvbnRhaW5pbmcgdGhlIGNvbnRleHQgbW9kZWxcblx0ICogQHBhcmFtIG9BY3Rpb25PcGVyYXRpb25BdmFpbGFibGVNYXAgTWFwIGNvbnRhaW5pbmcgdGhlIG9wZXJhdGlvbiBhdmFpbGFiaWxpdHkgb2YgYWN0aW9uc1xuXHQgKiBAcGFyYW0gYVNlbGVjdGVkQ29udGV4dHMgQXJyYXkgY29udGFpbmluZyBzZWxlY3RlZCBjb250ZXh0cyBvZiB0aGUgY2hhcnRcblx0ICogQHBhcmFtIHNDb250cm9sIENvbnRyb2wgbmFtZVxuXHQgKiBAcmV0dXJucyBQcm9taXNlLmFsbChhUHJvbWlzZXMpXG5cdCAqIEB1aTUtcmVzdHJpY3RlZFxuXHQgKi9cblx0c2V0QWN0aW9uRW5hYmxlbWVudDogZnVuY3Rpb24gKFxuXHRcdG9JbnRlcm5hbE1vZGVsQ29udGV4dDogSW50ZXJuYWxNb2RlbENvbnRleHQsXG5cdFx0b0FjdGlvbk9wZXJhdGlvbkF2YWlsYWJsZU1hcDogYW55LFxuXHRcdGFTZWxlY3RlZENvbnRleHRzOiBhbnlbXSxcblx0XHRzQ29udHJvbDogc3RyaW5nXG5cdCkge1xuXHRcdGNvbnN0IGFQcm9taXNlcyA9IFtdO1xuXHRcdGZvciAoY29uc3Qgc0FjdGlvbiBpbiBvQWN0aW9uT3BlcmF0aW9uQXZhaWxhYmxlTWFwKSB7XG5cdFx0XHRsZXQgYVJlcXVlc3RQcm9taXNlcyA9IFtdO1xuXHRcdFx0b0ludGVybmFsTW9kZWxDb250ZXh0LnNldFByb3BlcnR5KHNBY3Rpb24sIGZhbHNlKTtcblx0XHRcdGNvbnN0IHNQcm9wZXJ0eSA9IG9BY3Rpb25PcGVyYXRpb25BdmFpbGFibGVNYXBbc0FjdGlvbl07XG5cdFx0XHRmb3IgKGxldCBpID0gMDsgaSA8IGFTZWxlY3RlZENvbnRleHRzLmxlbmd0aDsgaSsrKSB7XG5cdFx0XHRcdGNvbnN0IG9TZWxlY3RlZENvbnRleHQgPSBhU2VsZWN0ZWRDb250ZXh0c1tpXTtcblx0XHRcdFx0aWYgKG9TZWxlY3RlZENvbnRleHQpIHtcblx0XHRcdFx0XHRjb25zdCBvQ29udGV4dERhdGEgPSBvU2VsZWN0ZWRDb250ZXh0LmdldE9iamVjdCgpO1xuXHRcdFx0XHRcdGlmIChzQ29udHJvbCA9PT0gXCJjaGFydFwiKSB7XG5cdFx0XHRcdFx0XHRpZiAoKHNQcm9wZXJ0eSA9PT0gbnVsbCAmJiAhIW9Db250ZXh0RGF0YVtgIyR7c0FjdGlvbn1gXSkgfHwgb1NlbGVjdGVkQ29udGV4dC5nZXRPYmplY3Qoc1Byb3BlcnR5KSkge1xuXHRcdFx0XHRcdFx0XHQvL2xvb2sgZm9yIGFjdGlvbiBhZHZlcnRpc2VtZW50IGlmIHByZXNlbnQgYW5kIGl0cyB2YWx1ZSBpcyBub3QgbnVsbFxuXHRcdFx0XHRcdFx0XHRvSW50ZXJuYWxNb2RlbENvbnRleHQuc2V0UHJvcGVydHkoc0FjdGlvbiwgdHJ1ZSk7XG5cdFx0XHRcdFx0XHRcdGJyZWFrO1xuXHRcdFx0XHRcdFx0fVxuXHRcdFx0XHRcdH0gZWxzZSBpZiAoc0NvbnRyb2wgPT09IFwidGFibGVcIikge1xuXHRcdFx0XHRcdFx0YVJlcXVlc3RQcm9taXNlcyA9IHRoaXMuX3NldEFjdGlvbkVuYWJsZW1lbnRGb3JUYWJsZShcblx0XHRcdFx0XHRcdFx0b1NlbGVjdGVkQ29udGV4dCxcblx0XHRcdFx0XHRcdFx0b0ludGVybmFsTW9kZWxDb250ZXh0LFxuXHRcdFx0XHRcdFx0XHRzQWN0aW9uLFxuXHRcdFx0XHRcdFx0XHRzUHJvcGVydHksXG5cdFx0XHRcdFx0XHRcdGFSZXF1ZXN0UHJvbWlzZXNcblx0XHRcdFx0XHRcdCk7XG5cdFx0XHRcdFx0fVxuXHRcdFx0XHR9XG5cdFx0XHR9XG5cdFx0XHRpZiAoc0NvbnRyb2wgPT09IFwidGFibGVcIikge1xuXHRcdFx0XHRpZiAoIWFTZWxlY3RlZENvbnRleHRzLmxlbmd0aCkge1xuXHRcdFx0XHRcdG9JbnRlcm5hbE1vZGVsQ29udGV4dC5zZXRQcm9wZXJ0eShgZHluYW1pY0FjdGlvbnMvJHtzQWN0aW9ufWAsIHtcblx0XHRcdFx0XHRcdGJFbmFibGVkOiBmYWxzZSxcblx0XHRcdFx0XHRcdGFBcHBsaWNhYmxlOiBbXSxcblx0XHRcdFx0XHRcdGFOb3RBcHBsaWNhYmxlOiBbXVxuXHRcdFx0XHRcdH0pO1xuXHRcdFx0XHRcdGFQcm9taXNlcy5wdXNoKENvbW1vblV0aWxzLnNldENvbnRleHRzQmFzZWRPbk9wZXJhdGlvbkF2YWlsYWJsZShvSW50ZXJuYWxNb2RlbENvbnRleHQsIFtdKSk7XG5cdFx0XHRcdH0gZWxzZSBpZiAoYVNlbGVjdGVkQ29udGV4dHMubGVuZ3RoICYmIHR5cGVvZiBzUHJvcGVydHkgPT09IFwic3RyaW5nXCIpIHtcblx0XHRcdFx0XHQvLyBXaGVuIGFsbCBwcm9wZXJ0eSB2YWx1ZXMgaGF2ZSBiZWVuIHJldHJpZXZlZCwgc2V0XG5cdFx0XHRcdFx0Ly8gVGhlIGFwcGxpY2FibGUgYW5kIG5vdC1hcHBsaWNhYmxlIHNlbGVjdGVkIGNvbnRleHRzIGZvciBlYWNoIGFjdGlvbiBhbmRcblx0XHRcdFx0XHQvLyBUaGUgZW5hYmxlZCBwcm9wZXJ0eSBvZiB0aGUgZHluYW1pYyBhY3Rpb24gaW4gaW50ZXJuYWwgbW9kZWwgY29udGV4dC5cblx0XHRcdFx0XHRhUHJvbWlzZXMucHVzaChDb21tb25VdGlscy5zZXRDb250ZXh0c0Jhc2VkT25PcGVyYXRpb25BdmFpbGFibGUob0ludGVybmFsTW9kZWxDb250ZXh0LCBhUmVxdWVzdFByb21pc2VzKSk7XG5cdFx0XHRcdH1cblx0XHRcdH1cblx0XHR9XG5cdFx0aWYgKHNDb250cm9sID09PSBcInRhYmxlXCIpIHtcblx0XHRcdHJldHVybiBQcm9taXNlLmFsbChhUHJvbWlzZXMpO1xuXHRcdH1cblx0fSxcblx0c2V0QWN0aW9uRW5hYmxlbWVudEFmdGVyUGF0Y2g6IGZ1bmN0aW9uIChvVmlldzogYW55LCBvTGlzdEJpbmRpbmc6IGFueSwgb0ludGVybmFsTW9kZWxDb250ZXh0OiBhbnkpIHtcblx0XHRjb25zdCBvSW50ZXJuYWxNb2RlbENvbnRleHREYXRhOiBhbnkgPSBvSW50ZXJuYWxNb2RlbENvbnRleHQ/LmdldE9iamVjdCgpO1xuXHRcdGNvbnN0IG9Db250cm9scyA9IG9JbnRlcm5hbE1vZGVsQ29udGV4dERhdGE/LmNvbnRyb2xzIHx8IHt9O1xuXHRcdGZvciAoY29uc3Qgc0tleSBpbiBvQ29udHJvbHMpIHtcblx0XHRcdGlmIChvQ29udHJvbHNbc0tleV0gJiYgb0NvbnRyb2xzW3NLZXldLmNvbnRyb2xJZCkge1xuXHRcdFx0XHRjb25zdCBvVGFibGU6IGFueSA9IG9WaWV3LmJ5SWQoc0tleSk7XG5cdFx0XHRcdGlmIChvVGFibGUuaXNBKFwic2FwLnVpLm1kYy5UYWJsZVwiKSkge1xuXHRcdFx0XHRcdGNvbnN0IG9Sb3dCaW5kaW5nID0gb1RhYmxlLmdldFJvd0JpbmRpbmcoKTtcblx0XHRcdFx0XHRpZiAob1Jvd0JpbmRpbmcgPT0gb0xpc3RCaW5kaW5nKSB7XG5cdFx0XHRcdFx0XHRBY3Rpb25SdW50aW1lLnNldEFjdGlvbkVuYWJsZW1lbnQoXG5cdFx0XHRcdFx0XHRcdG9JbnRlcm5hbE1vZGVsQ29udGV4dCxcblx0XHRcdFx0XHRcdFx0SlNPTi5wYXJzZShvVGFibGUuZGF0YShcIm9wZXJhdGlvbkF2YWlsYWJsZU1hcFwiKS5jdXN0b21EYXRhKSxcblx0XHRcdFx0XHRcdFx0b1RhYmxlLmdldFNlbGVjdGVkQ29udGV4dHMoKSxcblx0XHRcdFx0XHRcdFx0XCJ0YWJsZVwiXG5cdFx0XHRcdFx0XHQpO1xuXHRcdFx0XHRcdH1cblx0XHRcdFx0fVxuXHRcdFx0fVxuXHRcdH1cblx0fSxcblx0X3NldEFjdGlvbkVuYWJsZW1lbnRGb3JUYWJsZTogZnVuY3Rpb24gKFxuXHRcdG9TZWxlY3RlZENvbnRleHQ6IGFueSxcblx0XHRvSW50ZXJuYWxNb2RlbENvbnRleHQ6IGFueSxcblx0XHRzQWN0aW9uOiBzdHJpbmcsXG5cdFx0c1Byb3BlcnR5OiBhbnksXG5cdFx0YVJlcXVlc3RQcm9taXNlczogYW55XG5cdCkge1xuXHRcdC8vIFJlc2V0IGFsbCBwcm9wZXJ0aWVzIGJlZm9yZSBjb21wdXRhdGlvblxuXHRcdG9JbnRlcm5hbE1vZGVsQ29udGV4dC5zZXRQcm9wZXJ0eShgZHluYW1pY0FjdGlvbnMvJHtzQWN0aW9ufWAsIHtcblx0XHRcdGJFbmFibGVkOiBmYWxzZSxcblx0XHRcdGFBcHBsaWNhYmxlOiBbXSxcblx0XHRcdGFOb3RBcHBsaWNhYmxlOiBbXVxuXHRcdH0pO1xuXHRcdC8vIE5vdGUgdGhhdCBub24gZHluYW1pYyBhY3Rpb25zIGFyZSBub3QgcHJvY2Vzc2VkIGhlcmUuIFRoZXkgYXJlIGVuYWJsZWQgYmVjYXVzZVxuXHRcdC8vIG9uZSBvciBtb3JlIGFyZSBzZWxlY3RlZCBhbmQgdGhlIHNlY29uZCBwYXJ0IG9mIHRoZSBjb25kaXRpb24gaW4gdGhlIHRlbXBsYXRpbmdcblx0XHQvLyBpcyB0aGVuIHVuZGVmaW5lZCBhbmQgdGh1cyB0aGUgYnV0dG9uIHRha2VzIHRoZSBkZWZhdWx0IGVuYWJsaW5nLCB3aGljaCBpcyB0cnVlIVxuXHRcdGNvbnN0IGFBcHBsaWNhYmxlID0gW10sXG5cdFx0XHRhTm90QXBwbGljYWJsZSA9IFtdLFxuXHRcdFx0c0R5bmFtaWNBY3Rpb25FbmFibGVkUGF0aCA9IGAke29JbnRlcm5hbE1vZGVsQ29udGV4dC5nZXRQYXRoKCl9L2R5bmFtaWNBY3Rpb25zLyR7c0FjdGlvbn0vYkVuYWJsZWRgO1xuXHRcdGlmICh0eXBlb2Ygc1Byb3BlcnR5ID09PSBcIm9iamVjdFwiICYmIHNQcm9wZXJ0eSAhPT0gbnVsbCAmJiBzUHJvcGVydHkgIT09IHVuZGVmaW5lZCkge1xuXHRcdFx0aWYgKG9TZWxlY3RlZENvbnRleHQpIHtcblx0XHRcdFx0Y29uc3Qgb0NvbnRleHREYXRhID0gb1NlbGVjdGVkQ29udGV4dC5nZXRPYmplY3QoKTtcblx0XHRcdFx0Y29uc3Qgb1RyYW5zZm9ybWVkQmluZGluZyA9IHRyYW5zZm9ybVJlY3Vyc2l2ZWx5KFxuXHRcdFx0XHRcdHNQcm9wZXJ0eSxcblx0XHRcdFx0XHRcIlBhdGhJbk1vZGVsXCIsXG5cdFx0XHRcdFx0Ly8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIG5vLWxvb3AtZnVuY1xuXHRcdFx0XHRcdGZ1bmN0aW9uIChvQmluZGluZ0V4cHJlc3Npb246IGFueSkge1xuXHRcdFx0XHRcdFx0cmV0dXJuIG9Db250ZXh0RGF0YSA/IGNvbnN0YW50KG9Db250ZXh0RGF0YVtvQmluZGluZ0V4cHJlc3Npb24ucGF0aF0pIDogY29uc3RhbnQoZmFsc2UpO1xuXHRcdFx0XHRcdH0sXG5cdFx0XHRcdFx0dHJ1ZVxuXHRcdFx0XHQpO1xuXHRcdFx0XHRjb25zdCBzUmVzdWx0ID0gY29tcGlsZUV4cHJlc3Npb24ob1RyYW5zZm9ybWVkQmluZGluZyk7XG5cdFx0XHRcdGlmIChzUmVzdWx0ID09PSBcInRydWVcIikge1xuXHRcdFx0XHRcdG9JbnRlcm5hbE1vZGVsQ29udGV4dC5nZXRNb2RlbCgpLnNldFByb3BlcnR5KHNEeW5hbWljQWN0aW9uRW5hYmxlZFBhdGgsIHRydWUpO1xuXHRcdFx0XHRcdGFBcHBsaWNhYmxlLnB1c2gob1NlbGVjdGVkQ29udGV4dCk7XG5cdFx0XHRcdH0gZWxzZSB7XG5cdFx0XHRcdFx0YU5vdEFwcGxpY2FibGUucHVzaChvU2VsZWN0ZWRDb250ZXh0KTtcblx0XHRcdFx0fVxuXHRcdFx0fVxuXHRcdFx0Q29tbW9uVXRpbHMuc2V0RHluYW1pY0FjdGlvbkNvbnRleHRzKG9JbnRlcm5hbE1vZGVsQ29udGV4dCwgc0FjdGlvbiwgYUFwcGxpY2FibGUsIGFOb3RBcHBsaWNhYmxlKTtcblx0XHR9IGVsc2Uge1xuXHRcdFx0Y29uc3Qgb0NvbnRleHREYXRhID0gb1NlbGVjdGVkQ29udGV4dC5nZXRPYmplY3QoKTtcblx0XHRcdGlmIChzUHJvcGVydHkgPT09IG51bGwgJiYgISFvQ29udGV4dERhdGFbYCMke3NBY3Rpb259YF0pIHtcblx0XHRcdFx0Ly9sb29rIGZvciBhY3Rpb24gYWR2ZXJ0aXNlbWVudCBpZiBwcmVzZW50IGFuZCBpdHMgdmFsdWUgaXMgbm90IG51bGxcblx0XHRcdFx0b0ludGVybmFsTW9kZWxDb250ZXh0LmdldE1vZGVsKCkuc2V0UHJvcGVydHkoc0R5bmFtaWNBY3Rpb25FbmFibGVkUGF0aCwgdHJ1ZSk7XG5cdFx0XHR9IGVsc2Uge1xuXHRcdFx0XHQvLyBDb2xsZWN0IHByb21pc2VzIHRvIHJldHJpZXZlIHNpbmdsZXRvbiBvciBub3JtYWwgcHJvcGVydHkgdmFsdWUgYXN5bmNocm9ub3VzbHlcblx0XHRcdFx0YVJlcXVlc3RQcm9taXNlcy5wdXNoKENvbW1vblV0aWxzLnJlcXVlc3RQcm9wZXJ0eShvU2VsZWN0ZWRDb250ZXh0LCBzQWN0aW9uLCBzUHJvcGVydHksIHNEeW5hbWljQWN0aW9uRW5hYmxlZFBhdGgpKTtcblx0XHRcdH1cblx0XHR9XG5cdFx0cmV0dXJuIGFSZXF1ZXN0UHJvbWlzZXM7XG5cdH1cbn07XG5leHBvcnQgZGVmYXVsdCBBY3Rpb25SdW50aW1lO1xuIl0sIm1hcHBpbmdzIjoiO0FBQUE7QUFBQTtBQUFBOzs7Ozs7OztFQUdBLElBQU1BLGFBQWEsR0FBRztJQUNyQjtBQUNEO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFD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
125
+ //# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJuYW1lcyI6WyJBY3Rpb25SdW50aW1lIiwic2V0QWN0aW9uRW5hYmxlbWVudCIsIm9JbnRlcm5hbE1vZGVsQ29udGV4dCIsIm9BY3Rpb25PcGVyYXRpb25BdmFpbGFibGVNYXAiLCJhU2VsZWN0ZWRDb250ZXh0cyIsInNDb250cm9sIiwiYVByb21pc2VzIiwic0FjdGlvbiIsImFSZXF1ZXN0UHJvbWlzZXMiLCJzZXRQcm9wZXJ0eSIsInNQcm9wZXJ0eSIsImkiLCJsZW5ndGgiLCJvU2VsZWN0ZWRDb250ZXh0Iiwib0NvbnRleHREYXRhIiwiZ2V0T2JqZWN0IiwiX3NldEFjdGlvbkVuYWJsZW1lbnRGb3JUYWJsZSIsImJFbmFibGVkIiwiYUFwcGxpY2FibGUiLCJhTm90QXBwbGljYWJsZSIsInB1c2giLCJDb21tb25VdGlscyIsInNldENvbnRleHRzQmFzZWRPbk9wZXJhdGlvbkF2YWlsYWJsZSIsIlByb21pc2UiLCJhbGwiLCJzZXRBY3Rpb25FbmFibGVtZW50QWZ0ZXJQYXRjaCIsIm9WaWV3Iiwib0xpc3RCaW5kaW5nIiwib0ludGVybmFsTW9kZWxDb250ZXh0RGF0YSIsIm9Db250cm9scyIsImNvbnRyb2xzIiwic0tleSIsImNvbnRyb2xJZCIsIm9UYWJsZSIsImJ5SWQiLCJpc0EiLCJvUm93QmluZGluZyIsImdldFJvd0JpbmRpbmciLCJKU09OIiwicGFyc2UiLCJkYXRhIiwiY3VzdG9tRGF0YSIsImdldFNlbGVjdGVkQ29udGV4dHMiLCJzRHluYW1pY0FjdGlvbkVuYWJsZWRQYXRoIiwiZ2V0UGF0aCIsInVuZGVmaW5lZCIsIm9UcmFuc2Zvcm1lZEJpbmRpbmciLCJ0cmFuc2Zvcm1SZWN1cnNpdmVseSIsIm9CaW5kaW5nRXhwcmVzc2lvbiIsImNvbnN0YW50IiwicGF0aCIsInNSZXN1bHQiLCJjb21waWxlRXhwcmVzc2lvbiIsImdldE1vZGVsIiwic2V0RHluYW1pY0FjdGlvbkNvbnRleHRzIiwicmVxdWVzdFByb3BlcnR5Il0sInNvdXJjZVJvb3QiOiIuIiwic291cmNlcyI6WyJBY3Rpb25SdW50aW1lLnRzIl0sInNvdXJjZXNDb250ZW50IjpbImltcG9ydCBDb21tb25VdGlscyBmcm9tIFwic2FwL2ZlL2NvcmUvQ29tbW9uVXRpbHNcIjtcbmltcG9ydCB7IGNvbXBpbGVFeHByZXNzaW9uLCBjb25zdGFudCwgdHJhbnNmb3JtUmVjdXJzaXZlbHkgfSBmcm9tIFwic2FwL2ZlL2NvcmUvaGVscGVycy9CaW5kaW5nVG9vbGtpdFwiO1xuaW1wb3J0IHR5cGUgeyBJbnRlcm5hbE1vZGVsQ29udGV4dCB9IGZyb20gXCJzYXAvZmUvY29yZS9oZWxwZXJzL01vZGVsSGVscGVyXCI7XG5jb25zdCBBY3Rpb25SdW50aW1lID0ge1xuXHQvKipcblx0ICogU2V0cyB0aGUgYWN0aW9uIGVuYWJsZW1lbnQuXG5cdCAqXG5cdCAqIEBmdW5jdGlvblxuXHQgKiBAbmFtZSBzZXRBY3Rpb25FbmFibGVtZW50XG5cdCAqIEBwYXJhbSBvSW50ZXJuYWxNb2RlbENvbnRleHQgT2JqZWN0IGNvbnRhaW5pbmcgdGhlIGNvbnRleHQgbW9kZWxcblx0ICogQHBhcmFtIG9BY3Rpb25PcGVyYXRpb25BdmFpbGFibGVNYXAgTWFwIGNvbnRhaW5pbmcgdGhlIG9wZXJhdGlvbiBhdmFpbGFiaWxpdHkgb2YgYWN0aW9uc1xuXHQgKiBAcGFyYW0gYVNlbGVjdGVkQ29udGV4dHMgQXJyYXkgY29udGFpbmluZyBzZWxlY3RlZCBjb250ZXh0cyBvZiB0aGUgY2hhcnRcblx0ICogQHBhcmFtIHNDb250cm9sIENvbnRyb2wgbmFtZVxuXHQgKiBAcmV0dXJucyBQcm9taXNlLmFsbChhUHJvbWlzZXMpXG5cdCAqIEB1aTUtcmVzdHJpY3RlZFxuXHQgKi9cblx0c2V0QWN0aW9uRW5hYmxlbWVudDogZnVuY3Rpb24gKFxuXHRcdG9JbnRlcm5hbE1vZGVsQ29udGV4dDogSW50ZXJuYWxNb2RlbENvbnRleHQsXG5cdFx0b0FjdGlvbk9wZXJhdGlvbkF2YWlsYWJsZU1hcDogYW55LFxuXHRcdGFTZWxlY3RlZENvbnRleHRzOiBhbnlbXSxcblx0XHRzQ29udHJvbDogc3RyaW5nXG5cdCkge1xuXHRcdGNvbnN0IGFQcm9taXNlcyA9IFtdO1xuXHRcdGZvciAoY29uc3Qgc0FjdGlvbiBpbiBvQWN0aW9uT3BlcmF0aW9uQXZhaWxhYmxlTWFwKSB7XG5cdFx0XHRsZXQgYVJlcXVlc3RQcm9taXNlcyA9IFtdO1xuXHRcdFx0b0ludGVybmFsTW9kZWxDb250ZXh0LnNldFByb3BlcnR5KHNBY3Rpb24sIGZhbHNlKTtcblx0XHRcdGNvbnN0IHNQcm9wZXJ0eSA9IG9BY3Rpb25PcGVyYXRpb25BdmFpbGFibGVNYXBbc0FjdGlvbl07XG5cdFx0XHRmb3IgKGxldCBpID0gMDsgaSA8IGFTZWxlY3RlZENvbnRleHRzLmxlbmd0aDsgaSsrKSB7XG5cdFx0XHRcdGNvbnN0IG9TZWxlY3RlZENvbnRleHQgPSBhU2VsZWN0ZWRDb250ZXh0c1tpXTtcblx0XHRcdFx0aWYgKG9TZWxlY3RlZENvbnRleHQpIHtcblx0XHRcdFx0XHRjb25zdCBvQ29udGV4dERhdGEgPSBvU2VsZWN0ZWRDb250ZXh0LmdldE9iamVjdCgpO1xuXHRcdFx0XHRcdGlmIChzQ29udHJvbCA9PT0gXCJjaGFydFwiKSB7XG5cdFx0XHRcdFx0XHRpZiAoKHNQcm9wZXJ0eSA9PT0gbnVsbCAmJiAhIW9Db250ZXh0RGF0YVtgIyR7c0FjdGlvbn1gXSkgfHwgb1NlbGVjdGVkQ29udGV4dC5nZXRPYmplY3Qoc1Byb3BlcnR5KSkge1xuXHRcdFx0XHRcdFx0XHQvL2xvb2sgZm9yIGFjdGlvbiBhZHZlcnRpc2VtZW50IGlmIHByZXNlbnQgYW5kIGl0cyB2YWx1ZSBpcyBub3QgbnVsbFxuXHRcdFx0XHRcdFx0XHRvSW50ZXJuYWxNb2RlbENvbnRleHQuc2V0UHJvcGVydHkoc0FjdGlvbiwgdHJ1ZSk7XG5cdFx0XHRcdFx0XHRcdGJyZWFrO1xuXHRcdFx0XHRcdFx0fVxuXHRcdFx0XHRcdH0gZWxzZSBpZiAoc0NvbnRyb2wgPT09IFwidGFibGVcIikge1xuXHRcdFx0XHRcdFx0YVJlcXVlc3RQcm9taXNlcyA9IHRoaXMuX3NldEFjdGlvbkVuYWJsZW1lbnRGb3JUYWJsZShcblx0XHRcdFx0XHRcdFx0b1NlbGVjdGVkQ29udGV4dCxcblx0XHRcdFx0XHRcdFx0b0ludGVybmFsTW9kZWxDb250ZXh0LFxuXHRcdFx0XHRcdFx0XHRzQWN0aW9uLFxuXHRcdFx0XHRcdFx0XHRzUHJvcGVydHksXG5cdFx0XHRcdFx0XHRcdGFSZXF1ZXN0UHJvbWlzZXNcblx0XHRcdFx0XHRcdCk7XG5cdFx0XHRcdFx0fVxuXHRcdFx0XHR9XG5cdFx0XHR9XG5cdFx0XHRpZiAoc0NvbnRyb2wgPT09IFwidGFibGVcIikge1xuXHRcdFx0XHRpZiAoIWFTZWxlY3RlZENvbnRleHRzLmxlbmd0aCkge1xuXHRcdFx0XHRcdG9JbnRlcm5hbE1vZGVsQ29udGV4dC5zZXRQcm9wZXJ0eShgZHluYW1pY0FjdGlvbnMvJHtzQWN0aW9ufWAsIHtcblx0XHRcdFx0XHRcdGJFbmFibGVkOiBmYWxzZSxcblx0XHRcdFx0XHRcdGFBcHBsaWNhYmxlOiBbXSxcblx0XHRcdFx0XHRcdGFOb3RBcHBsaWNhYmxlOiBbXVxuXHRcdFx0XHRcdH0pO1xuXHRcdFx0XHRcdGFQcm9taXNlcy5wdXNoKENvbW1vblV0aWxzLnNldENvbnRleHRzQmFzZWRPbk9wZXJhdGlvbkF2YWlsYWJsZShvSW50ZXJuYWxNb2RlbENvbnRleHQsIFtdKSk7XG5cdFx0XHRcdH0gZWxzZSBpZiAoYVNlbGVjdGVkQ29udGV4dHMubGVuZ3RoICYmIHR5cGVvZiBzUHJvcGVydHkgPT09IFwic3RyaW5nXCIpIHtcblx0XHRcdFx0XHQvLyBXaGVuIGFsbCBwcm9wZXJ0eSB2YWx1ZXMgaGF2ZSBiZWVuIHJldHJpZXZlZCwgc2V0XG5cdFx0XHRcdFx0Ly8gVGhlIGFwcGxpY2FibGUgYW5kIG5vdC1hcHBsaWNhYmxlIHNlbGVjdGVkIGNvbnRleHRzIGZvciBlYWNoIGFjdGlvbiBhbmRcblx0XHRcdFx0XHQvLyBUaGUgZW5hYmxlZCBwcm9wZXJ0eSBvZiB0aGUgZHluYW1pYyBhY3Rpb24gaW4gaW50ZXJuYWwgbW9kZWwgY29udGV4dC5cblx0XHRcdFx0XHRhUHJvbWlzZXMucHVzaChDb21tb25VdGlscy5zZXRDb250ZXh0c0Jhc2VkT25PcGVyYXRpb25BdmFpbGFibGUob0ludGVybmFsTW9kZWxDb250ZXh0LCBhUmVxdWVzdFByb21pc2VzKSk7XG5cdFx0XHRcdH1cblx0XHRcdH1cblx0XHR9XG5cdFx0aWYgKHNDb250cm9sID09PSBcInRhYmxlXCIpIHtcblx0XHRcdHJldHVybiBQcm9taXNlLmFsbChhUHJvbWlzZXMpO1xuXHRcdH1cblx0fSxcblx0c2V0QWN0aW9uRW5hYmxlbWVudEFmdGVyUGF0Y2g6IGZ1bmN0aW9uIChvVmlldzogYW55LCBvTGlzdEJpbmRpbmc6IGFueSwgb0ludGVybmFsTW9kZWxDb250ZXh0OiBhbnkpIHtcblx0XHRjb25zdCBvSW50ZXJuYWxNb2RlbENvbnRleHREYXRhOiBhbnkgPSBvSW50ZXJuYWxNb2RlbENvbnRleHQ/LmdldE9iamVjdCgpO1xuXHRcdGNvbnN0IG9Db250cm9scyA9IG9JbnRlcm5hbE1vZGVsQ29udGV4dERhdGE/LmNvbnRyb2xzIHx8IHt9O1xuXHRcdGZvciAoY29uc3Qgc0tleSBpbiBvQ29udHJvbHMpIHtcblx0XHRcdGlmIChvQ29udHJvbHNbc0tleV0gJiYgb0NvbnRyb2xzW3NLZXldLmNvbnRyb2xJZCkge1xuXHRcdFx0XHRjb25zdCBvVGFibGU6IGFueSA9IG9WaWV3LmJ5SWQoc0tleSk7XG5cdFx0XHRcdGlmIChvVGFibGUuaXNBKFwic2FwLnVpLm1kYy5UYWJsZVwiKSkge1xuXHRcdFx0XHRcdGNvbnN0IG9Sb3dCaW5kaW5nID0gb1RhYmxlLmdldFJvd0JpbmRpbmcoKTtcblx0XHRcdFx0XHRpZiAob1Jvd0JpbmRpbmcgPT0gb0xpc3RCaW5kaW5nKSB7XG5cdFx0XHRcdFx0XHRBY3Rpb25SdW50aW1lLnNldEFjdGlvbkVuYWJsZW1lbnQoXG5cdFx0XHRcdFx0XHRcdG9JbnRlcm5hbE1vZGVsQ29udGV4dCxcblx0XHRcdFx0XHRcdFx0SlNPTi5wYXJzZShvVGFibGUuZGF0YShcIm9wZXJhdGlvbkF2YWlsYWJsZU1hcFwiKS5jdXN0b21EYXRhKSxcblx0XHRcdFx0XHRcdFx0b1RhYmxlLmdldFNlbGVjdGVkQ29udGV4dHMoKSxcblx0XHRcdFx0XHRcdFx0XCJ0YWJsZVwiXG5cdFx0XHRcdFx0XHQpO1xuXHRcdFx0XHRcdH1cblx0XHRcdFx0fVxuXHRcdFx0fVxuXHRcdH1cblx0fSxcblx0X3NldEFjdGlvbkVuYWJsZW1lbnRGb3JUYWJsZTogZnVuY3Rpb24gKFxuXHRcdG9TZWxlY3RlZENvbnRleHQ6IGFueSxcblx0XHRvSW50ZXJuYWxNb2RlbENvbnRleHQ6IGFueSxcblx0XHRzQWN0aW9uOiBzdHJpbmcsXG5cdFx0c1Byb3BlcnR5OiBhbnksXG5cdFx0YVJlcXVlc3RQcm9taXNlczogYW55XG5cdCkge1xuXHRcdC8vIFJlc2V0IGFsbCBwcm9wZXJ0aWVzIGJlZm9yZSBjb21wdXRhdGlvblxuXHRcdG9JbnRlcm5hbE1vZGVsQ29udGV4dC5zZXRQcm9wZXJ0eShgZHluYW1pY0FjdGlvbnMvJHtzQWN0aW9ufWAsIHtcblx0XHRcdGJFbmFibGVkOiBmYWxzZSxcblx0XHRcdGFBcHBsaWNhYmxlOiBbXSxcblx0XHRcdGFOb3RBcHBsaWNhYmxlOiBbXVxuXHRcdH0pO1xuXHRcdC8vIE5vdGUgdGhhdCBub24gZHluYW1pYyBhY3Rpb25zIGFyZSBub3QgcHJvY2Vzc2VkIGhlcmUuIFRoZXkgYXJlIGVuYWJsZWQgYmVjYXVzZVxuXHRcdC8vIG9uZSBvciBtb3JlIGFyZSBzZWxlY3RlZCBhbmQgdGhlIHNlY29uZCBwYXJ0IG9mIHRoZSBjb25kaXRpb24gaW4gdGhlIHRlbXBsYXRpbmdcblx0XHQvLyBpcyB0aGVuIHVuZGVmaW5lZCBhbmQgdGh1cyB0aGUgYnV0dG9uIHRha2VzIHRoZSBkZWZhdWx0IGVuYWJsaW5nLCB3aGljaCBpcyB0cnVlIVxuXHRcdGNvbnN0IGFBcHBsaWNhYmxlID0gW10sXG5cdFx0XHRhTm90QXBwbGljYWJsZSA9IFtdLFxuXHRcdFx0c0R5bmFtaWNBY3Rpb25FbmFibGVkUGF0aCA9IGAke29JbnRlcm5hbE1vZGVsQ29udGV4dC5nZXRQYXRoKCl9L2R5bmFtaWNBY3Rpb25zLyR7c0FjdGlvbn0vYkVuYWJsZWRgO1xuXHRcdGlmICh0eXBlb2Ygc1Byb3BlcnR5ID09PSBcIm9iamVjdFwiICYmIHNQcm9wZXJ0eSAhPT0gbnVsbCAmJiBzUHJvcGVydHkgIT09IHVuZGVmaW5lZCkge1xuXHRcdFx0aWYgKG9TZWxlY3RlZENvbnRleHQpIHtcblx0XHRcdFx0Y29uc3Qgb0NvbnRleHREYXRhID0gb1NlbGVjdGVkQ29udGV4dC5nZXRPYmplY3QoKTtcblx0XHRcdFx0Y29uc3Qgb1RyYW5zZm9ybWVkQmluZGluZyA9IHRyYW5zZm9ybVJlY3Vyc2l2ZWx5KFxuXHRcdFx0XHRcdHNQcm9wZXJ0eSxcblx0XHRcdFx0XHRcIlBhdGhJbk1vZGVsXCIsXG5cdFx0XHRcdFx0Ly8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIG5vLWxvb3AtZnVuY1xuXHRcdFx0XHRcdGZ1bmN0aW9uIChvQmluZGluZ0V4cHJlc3Npb246IGFueSkge1xuXHRcdFx0XHRcdFx0cmV0dXJuIG9Db250ZXh0RGF0YSA/IGNvbnN0YW50KG9Db250ZXh0RGF0YVtvQmluZGluZ0V4cHJlc3Npb24ucGF0aF0pIDogY29uc3RhbnQoZmFsc2UpO1xuXHRcdFx0XHRcdH0sXG5cdFx0XHRcdFx0dHJ1ZVxuXHRcdFx0XHQpO1xuXHRcdFx0XHRjb25zdCBzUmVzdWx0ID0gY29tcGlsZUV4cHJlc3Npb24ob1RyYW5zZm9ybWVkQmluZGluZyk7XG5cdFx0XHRcdGlmIChzUmVzdWx0ID09PSBcInRydWVcIikge1xuXHRcdFx0XHRcdG9JbnRlcm5hbE1vZGVsQ29udGV4dC5nZXRNb2RlbCgpLnNldFByb3BlcnR5KHNEeW5hbWljQWN0aW9uRW5hYmxlZFBhdGgsIHRydWUpO1xuXHRcdFx0XHRcdGFBcHBsaWNhYmxlLnB1c2gob1NlbGVjdGVkQ29udGV4dCk7XG5cdFx0XHRcdH0gZWxzZSB7XG5cdFx0XHRcdFx0YU5vdEFwcGxpY2FibGUucHVzaChvU2VsZWN0ZWRDb250ZXh0KTtcblx0XHRcdFx0fVxuXHRcdFx0fVxuXHRcdFx0Q29tbW9uVXRpbHMuc2V0RHluYW1pY0FjdGlvbkNvbnRleHRzKG9JbnRlcm5hbE1vZGVsQ29udGV4dCwgc0FjdGlvbiwgYUFwcGxpY2FibGUsIGFOb3RBcHBsaWNhYmxlKTtcblx0XHR9IGVsc2Uge1xuXHRcdFx0Y29uc3Qgb0NvbnRleHREYXRhID0gb1NlbGVjdGVkQ29udGV4dC5nZXRPYmplY3QoKTtcblx0XHRcdGlmIChzUHJvcGVydHkgPT09IG51bGwgJiYgISFvQ29udGV4dERhdGFbYCMke3NBY3Rpb259YF0pIHtcblx0XHRcdFx0Ly9sb29rIGZvciBhY3Rpb24gYWR2ZXJ0aXNlbWVudCBpZiBwcmVzZW50IGFuZCBpdHMgdmFsdWUgaXMgbm90IG51bGxcblx0XHRcdFx0b0ludGVybmFsTW9kZWxDb250ZXh0LmdldE1vZGVsKCkuc2V0UHJvcGVydHkoc0R5bmFtaWNBY3Rpb25FbmFibGVkUGF0aCwgdHJ1ZSk7XG5cdFx0XHR9IGVsc2Uge1xuXHRcdFx0XHQvLyBDb2xsZWN0IHByb21pc2VzIHRvIHJldHJpZXZlIHNpbmdsZXRvbiBvciBub3JtYWwgcHJvcGVydHkgdmFsdWUgYXN5bmNocm9ub3VzbHlcblx0XHRcdFx0YVJlcXVlc3RQcm9taXNlcy5wdXNoKENvbW1vblV0aWxzLnJlcXVlc3RQcm9wZXJ0eShvU2VsZWN0ZWRDb250ZXh0LCBzQWN0aW9uLCBzUHJvcGVydHksIHNEeW5hbWljQWN0aW9uRW5hYmxlZFBhdGgpKTtcblx0XHRcdH1cblx0XHR9XG5cdFx0cmV0dXJuIGFSZXF1ZXN0UHJvbWlzZXM7XG5cdH1cbn07XG5leHBvcnQgZGVmYXVsdCBBY3Rpb25SdW50aW1lO1xuIl0sIm1hcHBpbmdzIjoiO0FBQUE7QUFBQTtBQUFBOzs7Ozs7O0VBR0EsSUFBTUEsYUFBYSxHQUFHO0lBQ3JCO0FBQ0Q7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNB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