@sapui5/sap.fe.core 1.121.2 → 1.123.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 (241) hide show
  1. package/package.json +1 -1
  2. package/src/sap/fe/core/.library +1 -1
  3. package/src/sap/fe/core/ActionRuntime.js +2 -2
  4. package/src/sap/fe/core/ActionRuntime.ts +1 -2
  5. package/src/sap/fe/core/CommonUtils.js +14 -171
  6. package/src/sap/fe/core/CommonUtils.ts +15 -221
  7. package/src/sap/fe/core/PageController.js +13 -1
  8. package/src/sap/fe/core/PageController.ts +16 -0
  9. package/src/sap/fe/core/TemplateComponent.js +6 -1
  10. package/src/sap/fe/core/TemplateComponent.ts +8 -0
  11. package/src/sap/fe/core/UIProvider.js +23 -0
  12. package/src/sap/fe/core/UIProvider.ts +38 -0
  13. package/src/sap/fe/core/buildingBlocks/BuildingBlockBase.js +97 -43
  14. package/src/sap/fe/core/buildingBlocks/BuildingBlockBase.ts +120 -50
  15. package/src/sap/fe/core/buildingBlocks/templating/BuildingBlockSupport.js +6 -3
  16. package/src/sap/fe/core/buildingBlocks/templating/BuildingBlockSupport.ts +12 -18
  17. package/src/sap/fe/core/buildingBlocks/templating/BuildingBlockTemplateProcessor.js +2 -2
  18. package/src/sap/fe/core/buildingBlocks/templating/BuildingBlockTemplateProcessor.ts +1 -1
  19. package/src/sap/fe/core/buildingBlocks/templating/BuildingBlockTemplatingBase.js +1 -1
  20. package/src/sap/fe/core/buildingBlocks/templating/BuildingBlockTemplatingBase.ts +4 -3
  21. package/src/sap/fe/core/buildingBlocks/templating/RuntimeBuildingBlockFragment.js +1 -1
  22. package/src/sap/fe/core/buildingBlocks/templating/RuntimeBuildingBlockFragment.ts +1 -0
  23. package/src/sap/fe/core/controllerextensions/BaseControllerExtension.js +42 -1
  24. package/src/sap/fe/core/controllerextensions/BaseControllerExtension.ts +40 -0
  25. package/src/sap/fe/core/controllerextensions/CollaborativeDraft.js +5 -2
  26. package/src/sap/fe/core/controllerextensions/CollaborativeDraft.ts +5 -3
  27. package/src/sap/fe/core/controllerextensions/EditFlow.js +151 -60
  28. package/src/sap/fe/core/controllerextensions/EditFlow.ts +165 -68
  29. package/src/sap/fe/core/controllerextensions/HookSupport.js +32 -14
  30. package/src/sap/fe/core/controllerextensions/HookSupport.ts +35 -14
  31. package/src/sap/fe/core/controllerextensions/IntentBasedNavigation.js +5 -17
  32. package/src/sap/fe/core/controllerextensions/IntentBasedNavigation.ts +0 -12
  33. package/src/sap/fe/core/controllerextensions/InternalIntentBasedNavigation.js +6 -6
  34. package/src/sap/fe/core/controllerextensions/InternalIntentBasedNavigation.ts +15 -10
  35. package/src/sap/fe/core/controllerextensions/InternalRouting.js +108 -287
  36. package/src/sap/fe/core/controllerextensions/InternalRouting.ts +117 -309
  37. package/src/sap/fe/core/controllerextensions/KPIManagement.js +2 -2
  38. package/src/sap/fe/core/controllerextensions/KPIManagement.ts +6 -2
  39. package/src/sap/fe/core/controllerextensions/MessageHandler.js +2 -2
  40. package/src/sap/fe/core/controllerextensions/MessageHandler.ts +1 -1
  41. package/src/sap/fe/core/controllerextensions/PageReady.js +6 -6
  42. package/src/sap/fe/core/controllerextensions/PageReady.ts +5 -4
  43. package/src/sap/fe/core/controllerextensions/Paginator.js +17 -110
  44. package/src/sap/fe/core/controllerextensions/Paginator.ts +13 -130
  45. package/src/sap/fe/core/controllerextensions/Placeholder.js +3 -3
  46. package/src/sap/fe/core/controllerextensions/Placeholder.ts +1 -2
  47. package/src/sap/fe/core/controllerextensions/Recommendations.js +36 -31
  48. package/src/sap/fe/core/controllerextensions/Recommendations.ts +32 -37
  49. package/src/sap/fe/core/controllerextensions/Share.js +7 -7
  50. package/src/sap/fe/core/controllerextensions/Share.ts +6 -6
  51. package/src/sap/fe/core/controllerextensions/SideEffects.js +52 -6
  52. package/src/sap/fe/core/controllerextensions/SideEffects.ts +56 -4
  53. package/src/sap/fe/core/controllerextensions/ViewState.js +32 -46
  54. package/src/sap/fe/core/controllerextensions/ViewState.ts +24 -31
  55. package/src/sap/fe/core/controllerextensions/dialog/OperationsDialog.block.js +42 -31
  56. package/src/sap/fe/core/controllerextensions/dialog/OperationsDialog.block.tsx +6 -0
  57. package/src/sap/fe/core/controllerextensions/editFlow/TransactionHelper.js +168 -276
  58. package/src/sap/fe/core/controllerextensions/editFlow/TransactionHelper.ts +182 -310
  59. package/src/sap/fe/core/controllerextensions/editFlow/draft.js +3 -3
  60. package/src/sap/fe/core/controllerextensions/editFlow/draft.ts +2 -2
  61. package/src/sap/fe/core/controllerextensions/editFlow/draftDataLossPopup.js +4 -3
  62. package/src/sap/fe/core/controllerextensions/editFlow/draftDataLossPopup.ts +3 -2
  63. package/src/sap/fe/core/controllerextensions/editFlow/operations/facade.js +74 -52
  64. package/src/sap/fe/core/controllerextensions/editFlow/operations/facade.ts +95 -55
  65. package/src/sap/fe/core/controllerextensions/messageHandler/messageHandling.js +3 -17
  66. package/src/sap/fe/core/controllerextensions/messageHandler/messageHandling.ts +10 -23
  67. package/src/sap/fe/core/controllerextensions/recommendations/Telemetry.js +3 -3
  68. package/src/sap/fe/core/controllerextensions/recommendations/Telemetry.ts +2 -2
  69. package/src/sap/fe/core/controllerextensions/routing/ContextPathHelper.js +225 -0
  70. package/src/sap/fe/core/controllerextensions/routing/ContextPathHelper.ts +241 -0
  71. package/src/sap/fe/core/controls/DataLossOrDraftDiscard/DraftDataLossDialog.block.js +69 -48
  72. package/src/sap/fe/core/controls/DataLossOrDraftDiscard/DraftDataLossDialog.block.tsx +56 -33
  73. package/src/sap/fe/core/controls/FormElementWrapper.js +8 -11
  74. package/src/sap/fe/core/controls/FormElementWrapper.ts +9 -0
  75. package/src/sap/fe/core/controls/Recommendations/ConfirmRecommendationDialog.block.js +6 -14
  76. package/src/sap/fe/core/controls/Recommendations/ConfirmRecommendationDialog.block.tsx +12 -23
  77. package/src/sap/fe/core/converters/ConverterContext.js +17 -9
  78. package/src/sap/fe/core/converters/ConverterContext.ts +55 -41
  79. package/src/sap/fe/core/converters/ManifestSettings.js +1 -1
  80. package/src/sap/fe/core/converters/ManifestSettings.ts +19 -5
  81. package/src/sap/fe/core/converters/ManifestWrapper.js +14 -4
  82. package/src/sap/fe/core/converters/ManifestWrapper.ts +21 -10
  83. package/src/sap/fe/core/converters/MetaModelConverter.js +402 -383
  84. package/src/sap/fe/core/converters/MetaModelConverter.ts +538 -338
  85. package/src/sap/fe/core/converters/TemplateConverter.js +4 -2
  86. package/src/sap/fe/core/converters/TemplateConverter.ts +18 -13
  87. package/src/sap/fe/core/converters/annotations/DataField.js +30 -28
  88. package/src/sap/fe/core/converters/annotations/DataField.ts +58 -35
  89. package/src/sap/fe/core/converters/common/AnnotationConverter.js +24 -23
  90. package/src/sap/fe/core/converters/controls/Common/Action.js +5 -4
  91. package/src/sap/fe/core/converters/controls/Common/Action.ts +34 -28
  92. package/src/sap/fe/core/converters/controls/Common/Chart.js +37 -33
  93. package/src/sap/fe/core/converters/controls/Common/Chart.ts +64 -46
  94. package/src/sap/fe/core/converters/controls/Common/DataVisualization.js +15 -4
  95. package/src/sap/fe/core/converters/controls/Common/DataVisualization.ts +31 -15
  96. package/src/sap/fe/core/converters/controls/Common/Form.js +6 -4
  97. package/src/sap/fe/core/converters/controls/Common/Form.ts +23 -11
  98. package/src/sap/fe/core/converters/controls/Common/KPI.js +5 -3
  99. package/src/sap/fe/core/converters/controls/Common/KPI.ts +17 -11
  100. package/src/sap/fe/core/converters/controls/Common/Table.js +197 -101
  101. package/src/sap/fe/core/converters/controls/Common/Table.ts +393 -182
  102. package/src/sap/fe/core/converters/controls/Common/table/StandardActions.js +4 -5
  103. package/src/sap/fe/core/converters/controls/Common/table/StandardActions.ts +38 -27
  104. package/src/sap/fe/core/converters/controls/ListReport/FilterBar.js +41 -11
  105. package/src/sap/fe/core/converters/controls/ListReport/FilterBar.ts +112 -45
  106. package/src/sap/fe/core/converters/controls/ListReport/VisualFilters.js +7 -7
  107. package/src/sap/fe/core/converters/controls/ListReport/VisualFilters.ts +18 -12
  108. package/src/sap/fe/core/converters/controls/ObjectPage/Avatar.js +1 -1
  109. package/src/sap/fe/core/converters/controls/ObjectPage/Avatar.ts +5 -4
  110. package/src/sap/fe/core/converters/controls/ObjectPage/HeaderFacet.js +1 -1
  111. package/src/sap/fe/core/converters/controls/ObjectPage/HeaderFacet.ts +19 -9
  112. package/src/sap/fe/core/converters/controls/ObjectPage/SubSection.js +64 -63
  113. package/src/sap/fe/core/converters/controls/ObjectPage/SubSection.ts +109 -100
  114. package/src/sap/fe/core/converters/helpers/Aggregation.js +12 -11
  115. package/src/sap/fe/core/converters/helpers/Aggregation.ts +35 -30
  116. package/src/sap/fe/core/converters/helpers/ConfigurableObject.js +4 -1
  117. package/src/sap/fe/core/converters/helpers/ConfigurableObject.ts +12 -9
  118. package/src/sap/fe/core/converters/helpers/DataFieldHelper.js +1 -1
  119. package/src/sap/fe/core/converters/helpers/DataFieldHelper.ts +1 -1
  120. package/src/sap/fe/core/converters/helpers/ID.js +1 -1
  121. package/src/sap/fe/core/converters/helpers/ID.ts +6 -6
  122. package/src/sap/fe/core/converters/helpers/InsightsHelpers.js +3 -3
  123. package/src/sap/fe/core/converters/helpers/InsightsHelpers.ts +11 -6
  124. package/src/sap/fe/core/converters/helpers/Key.js +2 -2
  125. package/src/sap/fe/core/converters/helpers/Key.ts +4 -4
  126. package/src/sap/fe/core/converters/helpers/SelectionVariantHelper.js +1 -1
  127. package/src/sap/fe/core/converters/helpers/SelectionVariantHelper.ts +2 -2
  128. package/src/sap/fe/core/converters/objectPage/FormMenuActions.js +21 -19
  129. package/src/sap/fe/core/converters/objectPage/FormMenuActions.ts +43 -31
  130. package/src/sap/fe/core/converters/objectPage/HeaderAndFooterAction.js +1 -1
  131. package/src/sap/fe/core/converters/objectPage/HeaderAndFooterAction.ts +16 -12
  132. package/src/sap/fe/core/converters/templates/ListReportConverter.js +8 -3
  133. package/src/sap/fe/core/converters/templates/ListReportConverter.ts +41 -21
  134. package/src/sap/fe/core/converters/templates/ObjectPageConverter.js +5 -3
  135. package/src/sap/fe/core/converters/templates/ObjectPageConverter.ts +24 -19
  136. package/src/sap/fe/core/designtime/AppComponent.designtime.js +3 -2
  137. package/src/sap/fe/core/designtime/AppComponent.designtime.ts +2 -1
  138. package/src/sap/fe/core/filter/DraftEditState.fragment.xml +1 -1
  139. package/src/sap/fe/core/formatters/CollaborationFormatter.js +4 -6
  140. package/src/sap/fe/core/formatters/CollaborationFormatter.ts +5 -4
  141. package/src/sap/fe/core/formatters/FPMFormatter.js +5 -13
  142. package/src/sap/fe/core/formatters/FPMFormatter.ts +11 -10
  143. package/src/sap/fe/core/formatters/FiscalFormat.js +1 -1
  144. package/src/sap/fe/core/formatters/FiscalFormat.ts +1 -1
  145. package/src/sap/fe/core/formatters/KPIFormatter.js +4 -7
  146. package/src/sap/fe/core/formatters/KPIFormatter.ts +3 -3
  147. package/src/sap/fe/core/formatters/StandardFormatter.js +4 -7
  148. package/src/sap/fe/core/formatters/StandardFormatter.ts +3 -3
  149. package/src/sap/fe/core/formatters/ValueFormatter.js +35 -6
  150. package/src/sap/fe/core/formatters/ValueFormatter.ts +31 -3
  151. package/src/sap/fe/core/fpm/manifest.json +1 -1
  152. package/src/sap/fe/core/helpers/AppStartupHelper.js +54 -33
  153. package/src/sap/fe/core/helpers/AppStartupHelper.ts +62 -41
  154. package/src/sap/fe/core/helpers/BindingToolkit.js +17 -3
  155. package/src/sap/fe/core/helpers/BindingToolkit.ts +28 -6
  156. package/src/sap/fe/core/helpers/ClassSupport.js +32 -13
  157. package/src/sap/fe/core/helpers/ClassSupport.ts +35 -15
  158. package/src/sap/fe/core/helpers/DeleteHelper.js +71 -61
  159. package/src/sap/fe/core/helpers/DeleteHelper.ts +125 -103
  160. package/src/sap/fe/core/helpers/DraftEditState.js +5 -3
  161. package/src/sap/fe/core/helpers/DraftEditState.ts +3 -1
  162. package/src/sap/fe/core/helpers/FPMHelper.js +43 -46
  163. package/src/sap/fe/core/helpers/FPMHelper.ts +50 -56
  164. package/src/sap/fe/core/helpers/MetaModelFunction.js +77 -53
  165. package/src/sap/fe/core/helpers/MetaModelFunction.ts +78 -57
  166. package/src/sap/fe/core/helpers/ModelHelper.js +10 -4
  167. package/src/sap/fe/core/helpers/ModelHelper.ts +12 -6
  168. package/src/sap/fe/core/helpers/PasteHelper.js +194 -7
  169. package/src/sap/fe/core/helpers/PasteHelper.ts +265 -13
  170. package/src/sap/fe/core/helpers/PromiseKeeper.js +66 -0
  171. package/src/sap/fe/core/helpers/PromiseKeeper.ts +56 -0
  172. package/src/sap/fe/core/helpers/SemanticKeyHelper.js +30 -19
  173. package/src/sap/fe/core/helpers/SemanticKeyHelper.ts +34 -22
  174. package/src/sap/fe/core/helpers/StableIdHelper.js +1 -1
  175. package/src/sap/fe/core/helpers/StableIdHelper.ts +7 -2
  176. package/src/sap/fe/core/helpers/StandardRecommendationHelper.js +26 -52
  177. package/src/sap/fe/core/helpers/StandardRecommendationHelper.ts +37 -63
  178. package/src/sap/fe/core/helpers/TitleHelper.js +1 -1
  179. package/src/sap/fe/core/helpers/TitleHelper.ts +17 -14
  180. package/src/sap/fe/core/helpers/TypeGuards.js +27 -3
  181. package/src/sap/fe/core/helpers/TypeGuards.ts +37 -7
  182. package/src/sap/fe/core/jsx-runtime/jsx-xml.js +48 -8
  183. package/src/sap/fe/core/jsx-runtime/jsx-xml.ts +40 -9
  184. package/src/sap/fe/core/library.js +1 -1
  185. package/src/sap/fe/core/messagebundle.properties +5 -2
  186. package/src/sap/fe/core/messagebundle_da.properties +1 -1
  187. package/src/sap/fe/core/messagebundle_en.properties +267 -2
  188. package/src/sap/fe/core/messagebundle_sl.properties +1 -1
  189. package/src/sap/fe/core/operationsHelper.js +2 -1
  190. package/src/sap/fe/core/operationsHelper.ts +1 -0
  191. package/src/sap/fe/core/services/EnvironmentServiceFactory.js +3 -3
  192. package/src/sap/fe/core/services/EnvironmentServiceFactory.ts +2 -2
  193. package/src/sap/fe/core/services/NavigationServiceFactory.js +2 -2
  194. package/src/sap/fe/core/services/NavigationServiceFactory.ts +3 -2
  195. package/src/sap/fe/core/services/RoutingServiceFactory.js +27 -14
  196. package/src/sap/fe/core/services/RoutingServiceFactory.ts +27 -14
  197. package/src/sap/fe/core/services/ShellServicesFactory.js +49 -12
  198. package/src/sap/fe/core/services/ShellServicesFactory.ts +62 -13
  199. package/src/sap/fe/core/services/SideEffectsServiceFactory.js +156 -82
  200. package/src/sap/fe/core/services/SideEffectsServiceFactory.ts +218 -100
  201. package/src/sap/fe/core/services/TelemetryServiceFactory.js +3 -3
  202. package/src/sap/fe/core/services/TelemetryServiceFactory.ts +6 -6
  203. package/src/sap/fe/core/services/ValueHelpHistoryServiceFactory.js +3 -2
  204. package/src/sap/fe/core/services/ValueHelpHistoryServiceFactory.ts +1 -1
  205. package/src/sap/fe/core/services/collaborativeDraftServiceFactory.js +1 -1
  206. package/src/sap/fe/core/services/collaborativeDraftServiceFactory.ts +2 -2
  207. package/src/sap/fe/core/services/view/TemplatingErrorPage.view.xml +1 -1
  208. package/src/sap/fe/core/templating/CommonFormatters.js +6 -3
  209. package/src/sap/fe/core/templating/CommonFormatters.ts +13 -12
  210. package/src/sap/fe/core/templating/CriticalityFormatters.js +2 -2
  211. package/src/sap/fe/core/templating/CriticalityFormatters.ts +37 -14
  212. package/src/sap/fe/core/templating/DataFieldFormatters.js +12 -11
  213. package/src/sap/fe/core/templating/DataFieldFormatters.ts +35 -24
  214. package/src/sap/fe/core/templating/DataModelPathHelper.js +22 -18
  215. package/src/sap/fe/core/templating/DataModelPathHelper.ts +61 -51
  216. package/src/sap/fe/core/templating/DisplayModeFormatter.js +1 -1
  217. package/src/sap/fe/core/templating/DisplayModeFormatter.ts +8 -3
  218. package/src/sap/fe/core/templating/EntityTypeHelper.js +1 -1
  219. package/src/sap/fe/core/templating/EntityTypeHelper.ts +1 -1
  220. package/src/sap/fe/core/templating/FieldControlHelper.js +3 -3
  221. package/src/sap/fe/core/templating/FieldControlHelper.ts +27 -8
  222. package/src/sap/fe/core/templating/FilterHelper.js +13 -10
  223. package/src/sap/fe/core/templating/FilterHelper.ts +80 -46
  224. package/src/sap/fe/core/templating/FilterTemplating.js +1 -1
  225. package/src/sap/fe/core/templating/FilterTemplating.ts +2 -2
  226. package/src/sap/fe/core/templating/PropertyFormatters.js +6 -8
  227. package/src/sap/fe/core/templating/PropertyFormatters.ts +11 -11
  228. package/src/sap/fe/core/templating/PropertyHelper.js +3 -3
  229. package/src/sap/fe/core/templating/PropertyHelper.ts +4 -4
  230. package/src/sap/fe/core/templating/SemanticObjectHelper.js +157 -13
  231. package/src/sap/fe/core/templating/SemanticObjectHelper.ts +182 -16
  232. package/src/sap/fe/core/templating/UIFormatters.js +23 -22
  233. package/src/sap/fe/core/templating/UIFormatters.ts +94 -66
  234. package/src/sap/fe/core/type/DateTimeWithTimezone.js +1 -1
  235. package/src/sap/fe/core/type/DateTimeWithTimezone.ts +2 -2
  236. package/src/sap/fe/core/type/EDM.js +1 -1
  237. package/src/sap/fe/core/type/EDM.ts +2 -2
  238. package/src/sap/fe/core/type/Email.js +1 -1
  239. package/src/sap/fe/core/type/Email.ts +1 -1
  240. package/src/sap/fe/core/type/FiscalDate.js +2 -2
  241. package/src/sap/fe/core/type/FiscalDate.ts +2 -2
@@ -81,6 +81,8 @@ sap.ui.define(["sap/base/Log"], function (Log) {
81
81
  * Checks if any item in the delayedPositioningItems object can be positioned based on the presence of its anchor in a sorted array or the fact that all remaining items self reference.
82
82
  * @param delayedPositioningItems Key-value pair where the key is the item and the value is its position.
83
83
  * @param sorted The array of sorted keys.
84
+ * @param positioningItems
85
+ * @param possibleAnchors
84
86
  * @returns Returns whether any delayedPositioningItem can be positioned.
85
87
  */
86
88
  const isDelayedItemPositionable = (delayedPositioningItems, sorted, positioningItems, possibleAnchors) => {
@@ -139,6 +141,7 @@ sap.ui.define(["sap/base/Log"], function (Log) {
139
141
  * @param anchorItem The position metadata for the item to insert.
140
142
  * @param delayedPositioningItems Key-value pair where the key is the item and the value is its position.
141
143
  * @param positioningItems A map defining the order of elements, keyed by an identifier.
144
+ * @param possibleAnchors
142
145
  * @returns The index at which the item should be inserted in the sorted array, or -1 if the item's positioning should be delayed.
143
146
  */
144
147
  const getInsertIndexOrDelayItem = (sorted, anchor, anchorItem, delayedPositioningItems, positioningItems, possibleAnchors) => {
@@ -353,4 +356,4 @@ sap.ui.define(["sap/base/Log"], function (Log) {
353
356
  _exports.insertCustomElements = insertCustomElements;
354
357
  return _exports;
355
358
  }, false);
356
- //# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJuYW1lcyI6WyJQbGFjZW1lbnQiLCJzZXRGaXJzdEFuY2hvciIsInNvcnRlZCIsImRlbGF5ZWRQb3NpdGlvbmluZ0l0ZW1zIiwiZmlyc3RBbmNob3IiLCJiZWZvcmVQb3NpdGlvbmluZ0l0ZW1zIiwiT2JqZWN0Iiwia2V5cyIsImZpbHRlciIsImRlbGF5ZWRQb3NpdGlvbmluZ0l0ZW1LZXkiLCJwbGFjZW1lbnQiLCJCZWZvcmUiLCJsZW5ndGgiLCJmaXJzdFBvc2l0aW9uaW5nSXRlbSIsImZpbmQiLCJpbmNsdWRlcyIsImFuY2hvciIsInB1c2giLCJpc0FscmVhZHlQb3NpdGlvbmVkIiwiaXNQb3NpdGlvbmFibGUiLCJpbnNlcnRJbmRleCIsImlzRGVsYXllZEl0ZW1Qb3NpdGlvbmFibGUiLCJwb3NpdGlvbmluZ0l0ZW1zIiwicG9zc2libGVBbmNob3JzIiwibWFwIiwiaXRlbUtleSIsInNvbWUiLCJkZWxheWVkQW5jaG9yS2V5IiwiZXZlcnkiLCJyZW9yZGVyUG9zaXRpb25pbmdJdGVtcyIsInJvb3RFbGVtZW50cyIsIml0ZW1zUGVyS2V5IiwiZW5kRWxlbWVudCIsInNvcnRlZEtleXMiLCJkZWZhdWx0QW5jaG9ycyIsImZpcnN0IiwidW5kZWZpbmVkIiwibGFzdCIsImtleSIsImZvckVhY2giLCJwb3NpdGlvbkl0ZW1LZXkiLCJvcmRlclBvc2l0aW9uaW5nSXRlbVJlY3Vyc2l2ZWx5Iiwib3V0RWxlbWVudHMiLCJlbGVtZW50IiwiaW5kZXgiLCJwb3NpdGlvbiIsImdldEluc2VydEluZGV4T3JEZWxheUl0ZW0iLCJhbmNob3JJdGVtIiwiaW5kZXhPZiIsImFkZGVkQW5jaG9yIiwiQWZ0ZXIiLCJMb2ciLCJ3YXJuaW5nIiwic3BsaWNlIiwiT3ZlcnJpZGVUeXBlIiwiaXNBcnJheUNvbmZpZyIsImNvbmZpZyIsImFwcGx5T3ZlcnJpZGUiLCJvdmVyd3JpdGFibGVLZXlzIiwic291cmNlSXRlbSIsImN1c3RvbUVsZW1lbnQiLCJvdXRJdGVtIiwib3ZlcndyaXRhYmxlS2V5IiwiaGFzT3duUHJvcGVydHkiLCJjYWxsIiwib3ZlcnJpZGVDb25maWciLCJzdWJJdGVtIiwic3ViQ29uZmlnIiwiQXJyYXkiLCJpc0FycmF5IiwiaW5zZXJ0Q3VzdG9tRWxlbWVudHMiLCJjdXN0b21FbGVtZW50cyIsInJvb3RFbGVtZW50IiwiRW5kIiwiY3VzdG9tRWxlbWVudEtleSIsImFkanVzdGVkQ3VzdG9tRWxlbWVudEtleSJdLCJzb3VyY2VSb290IjoiLiIsInNvdXJjZXMiOlsiQ29uZmlndXJhYmxlT2JqZWN0LnRzIl0sInNvdXJjZXNDb250ZW50IjpbImltcG9ydCBMb2cgZnJvbSBcInNhcC9iYXNlL0xvZ1wiO1xuXG5leHBvcnQgdHlwZSBQb3NpdGlvbiA9IHtcblx0YW5jaG9yPzogc3RyaW5nO1xuXHRwbGFjZW1lbnQ6IFBsYWNlbWVudDtcbn07XG5cbmV4cG9ydCBlbnVtIFBsYWNlbWVudCB7XG5cdEFmdGVyID0gXCJBZnRlclwiLFxuXHRCZWZvcmUgPSBcIkJlZm9yZVwiLFxuXHRFbmQgPSBcIkVuZFwiXG59XG5leHBvcnQgdHlwZSBDb25maWd1cmFibGVPYmplY3RLZXkgPSBzdHJpbmc7XG5leHBvcnQgdHlwZSBDb25maWd1cmFibGVPYmplY3QgPSBQb3NpdGlvbmFibGUgJiB7XG5cdGtleTogQ29uZmlndXJhYmxlT2JqZWN0S2V5O1xufTtcblxudHlwZSBNYWtlTmVzdGVkQXJyYXlDdXN0b208VD4gPSB7XG5cdFtLIGluIGtleW9mIFRdOiBUW0tdIGV4dGVuZHMgQXJyYXk8aW5mZXIgVSBleHRlbmRzIENvbmZpZ3VyYWJsZU9iamVjdD4gPyBSZWNvcmQ8c3RyaW5nLCBDdXN0b21FbGVtZW50PFU+PiA6IFRbS107XG59O1xuXG5leHBvcnQgdHlwZSBDdXN0b21FbGVtZW50PFQgZXh0ZW5kcyBDb25maWd1cmFibGVPYmplY3Q+ID0gTWFrZU5lc3RlZEFycmF5Q3VzdG9tPFQ+ICYge1xuXHRwb3NpdGlvbjogUG9zaXRpb247XG5cdG1lbnU/OiB1bmtub3duW107XG59O1xuXG5leHBvcnQgdHlwZSBQb3NpdGlvbmFibGUgPSB7XG5cdHBvc2l0aW9uPzogUG9zaXRpb247XG59O1xuXG5leHBvcnQgdHlwZSBDb25maWd1cmFibGVSZWNvcmQ8VD4gPSBSZWNvcmQ8Q29uZmlndXJhYmxlT2JqZWN0S2V5LCBUPjtcblxuLyoqXG4gKiBEZXRlcm1pbmUgdGhlIGZpcnN0IGFuY2hvciBhbW9uZyBkZWxheWVkUG9zaXRpb25pbmdJdGVtcy4gSWYgbXVsdGlwbGUgaXRlbXMgYXJlICdCZWZvcmUnIHBvc2l0aW9uZWQsXG4gKiBmaW5kIG9uZSB0aGF0IGRvZXMgbm90IHJlZmVyZW5jZSBhbm90aGVyIHBvc2l0aW9uaW5nIGl0ZW0gaW4gdGhlIGxpc3QuIElmIG9ubHkgb25lIGlzICdCZWZvcmUnIHBvc2l0aW9uZWQsXG4gKiBtYWtlIGl0IHRoZSBmaXJzdCBhbmNob3IuIElmIG5vbmUgYXJlICdCZWZvcmUnIHBvc2l0aW9uZWQsIHVzZSB0aGUgZmlyc3QgaXRlbSBpbiB0aGUgbGlzdC4gVGhlIHNlbGVjdGVkXG4gKiBmaXJzdCBhbmNob3IgaXMgYWRkZWQgdG8gdGhlIHNvcnRlZCBsaXN0LlxuICpcbiAqIEBwYXJhbSBzb3J0ZWQgTGlzdCBvZiBzb3J0ZWQgaXRlbXMuIFRoZSBkZXRlcm1pbmVkIGZpcnN0IGFuY2hvciBpcyBhZGRlZCB0byB0aGlzIGxpc3QuXG4gKiBAcGFyYW0gZGVsYXllZFBvc2l0aW9uaW5nSXRlbXMgS2V5LXZhbHVlIHBhaXIgd2hlcmUgdGhlIGtleSBpcyB0aGUgaXRlbSBhbmQgdGhlIHZhbHVlIGlzIGl0cyBwb3NpdGlvbi5cbiAqIEByZXR1cm5zIFRoZSBrZXkgb2YgdGhlIGRldGVybWluZWQgZmlyc3QgYW5jaG9yIG9mIHRoZSBkZWxheWVkUG9zaXRpb25pbmdJdGVtcy1saXN0LlxuICpcbiAqIEBleGFtcGxlXG4gKiAgIGNvbnN0IHNvcnRlZCA9IFtdO1xuICogICBjb25zdCBkZWxheWVkUG9zaXRpb25pbmdJdGVtcyA9IHtcbiAqICAgICBcIml0ZW0xXCI6IHsgcGxhY2VtZW50OiBQbGFjZW1lbnQuQmVmb3JlLCBhbmNob3I6IFwiaXRlbTJcIiB9LFxuICogICAgIFwiaXRlbTJcIjogeyBwbGFjZW1lbnQ6IFBsYWNlbWVudC5BZnRlciwgYW5jaG9yOiBcIml0ZW0xXCIgfVxuICogICB9O1xuICogICBzZXRGaXJzdEFuY2hvcihzb3J0ZWQsIGRlbGF5ZWRQb3NpdGlvbmluZ0l0ZW1zKTtcbiAqICAgPT0+XG4gKiAgIHNvcnRlZDogW1wiaXRlbTFcIl1cbiAqL1xuY29uc3Qgc2V0Rmlyc3RBbmNob3IgPSBmdW5jdGlvbiAoc29ydGVkOiBzdHJpbmdbXSwgZGVsYXllZFBvc2l0aW9uaW5nSXRlbXM6IFJlY29yZDxzdHJpbmcsIFBvc2l0aW9uPik6IHN0cmluZyB7XG5cdGxldCBmaXJzdEFuY2hvcjtcblx0Ly8gSWYgYWxsIGN1c3RvbSBlbGVtZW50cyByZWZlcmVuY2UgZWFjaCBvdGhlciwgdGFrZVxuXHQvLyBhKSBhIGJlZm9yZSBwbGFjZWQgY3VzdG9tIGVsZW1lbnQsIHdoaWNoIGlzIG5vdCByZWZlcmVuY2luZyBhbnkgb3RoZXIgXCJiZWZvcmVcIi1zZXQgb25lLFxuXHQvLyBiKSB0aGUgZmlyc3QgYmVmb3JlIHBsYWNlZCBjdXN0b20gZWxlbWVudFxuXHQvLyBjKSB0aGUgZmlyc3Qgb3ZlcmFsbCBjdXN0b20gZWxlbWVudFxuXHRjb25zdCBiZWZvcmVQb3NpdGlvbmluZ0l0ZW1zID0gT2JqZWN0LmtleXMoZGVsYXllZFBvc2l0aW9uaW5nSXRlbXMpLmZpbHRlcihcblx0XHQoZGVsYXllZFBvc2l0aW9uaW5nSXRlbUtleSkgPT4gZGVsYXllZFBvc2l0aW9uaW5nSXRlbXNbZGVsYXllZFBvc2l0aW9uaW5nSXRlbUtleV0ucGxhY2VtZW50ID09PSBQbGFjZW1lbnQuQmVmb3JlXG5cdCk7XG5cdGlmIChiZWZvcmVQb3NpdGlvbmluZ0l0ZW1zLmxlbmd0aCA+IDEpIHtcblx0XHQvLyBGaW5kIHBvc2l0aW9uaW5nSXRlbSB3aGljaCBkb2VzIG5vdCByZWZlcmVuY2UgYW5vdGhlciBwb3NpdGlvbmluZ0l0ZW0gaW4gdGhlIGxpc3Rcblx0XHRjb25zdCBmaXJzdFBvc2l0aW9uaW5nSXRlbSA9IGJlZm9yZVBvc2l0aW9uaW5nSXRlbXMuZmluZChcblx0XHRcdChkZWxheWVkUG9zaXRpb25pbmdJdGVtS2V5KSA9PiAhYmVmb3JlUG9zaXRpb25pbmdJdGVtcy5pbmNsdWRlcyhkZWxheWVkUG9zaXRpb25pbmdJdGVtc1tkZWxheWVkUG9zaXRpb25pbmdJdGVtS2V5XS5hbmNob3IhKVxuXHRcdCk7XG5cdFx0Zmlyc3RBbmNob3IgPSBmaXJzdFBvc2l0aW9uaW5nSXRlbSB8fCBiZWZvcmVQb3NpdGlvbmluZ0l0ZW1zWzBdO1xuXHR9IGVsc2UgaWYgKGJlZm9yZVBvc2l0aW9uaW5nSXRlbXMubGVuZ3RoKSB7XG5cdFx0Zmlyc3RBbmNob3IgPSBiZWZvcmVQb3NpdGlvbmluZ0l0ZW1zWzBdO1xuXHR9IGVsc2Uge1xuXHRcdGZpcnN0QW5jaG9yID0gT2JqZWN0LmtleXMoZGVsYXllZFBvc2l0aW9uaW5nSXRlbXMpWzBdO1xuXHR9XG5cdHNvcnRlZC5wdXNoKGZpcnN0QW5jaG9yKTtcblx0cmV0dXJuIGZpcnN0QW5jaG9yO1xufTtcblxuLyoqXG4gKiBDaGVja3MgaWYgYSBnaXZlbiBhbmNob3Igc3RyaW5nIGlzIGFscmVhZHkgcHJlc2VudCBpbiBhIHNvcnRlZCBhcnJheS5cbiAqIEBwYXJhbSBhbmNob3IgVGhlIGFuY2hvciBzdHJpbmcgcmVsYXRlZCB0byB0aGUgaXRlbS5cbiAqIEBwYXJhbSBzb3J0ZWQgVGhlIGFycmF5IG9mIHNvcnRlZCBrZXlzLlxuICogQHJldHVybnMgUmV0dXJucyB3aGV0aGVyIHRoZSBhbmNob3Igd2FzIGFscmVhZHkgcG9zaXRpb25lZC5cbiAqL1xuY29uc3QgaXNBbHJlYWR5UG9zaXRpb25lZCA9IChhbmNob3I6IHN0cmluZywgc29ydGVkOiBzdHJpbmdbXSk6IGJvb2xlYW4gPT4ge1xuXHRyZXR1cm4gc29ydGVkLmluY2x1ZGVzKGFuY2hvcik7XG59O1xuXG4vKipcbiAqIENoZWNrcyBpZiBhbiBpdGVtIGNhbiBiZSBwb3NpdGlvbmVkIGJhc2VkIG9uIGl0cyBpbnNlcnQgaW5kZXggYW5kIHByZXNlbmNlIGluIGEgc29ydGVkIGFycmF5LlxuICogQHBhcmFtIGluc2VydEluZGV4IFRoZSBpbmRleCB3aGVyZSBhbiBpdGVtIGlzIGludGVuZGVkIHRvIGJlIGluc2VydGVkLlxuICogQHBhcmFtIGFuY2hvciBUaGUgYW5jaG9yIHN0cmluZyByZWxhdGVkIHRvIHRoZSBpdGVtLlxuICogQHBhcmFtIHNvcnRlZCBUaGUgYXJyYXkgb2Ygc29ydGVkIGtleXMuXG4gKiBAcmV0dXJucyBSZXR1cm5zIHdoZXRoZXIgdGhlIGFuY2hvciBjYW4gYWxyZWFkeSBiZSBwb3NpdGlvbmVkLlxuICovXG5jb25zdCBpc1Bvc2l0aW9uYWJsZSA9IChpbnNlcnRJbmRleDogbnVtYmVyLCBhbmNob3I6IHN0cmluZywgc29ydGVkOiBzdHJpbmdbXSk6IGJvb2xlYW4gPT4ge1xuXHRpZiAoaW5zZXJ0SW5kZXggPT09IC0xKSB7XG5cdFx0cmV0dXJuIGZhbHNlO1xuXHR9XG5cdHJldHVybiAhaXNBbHJlYWR5UG9zaXRpb25lZChhbmNob3IsIHNvcnRlZCk7XG59O1xuXG4vKipcbiAqIENoZWNrcyBpZiBhbnkgaXRlbSBpbiB0aGUgZGVsYXllZFBvc2l0aW9uaW5nSXRlbXMgb2JqZWN0IGNhbiBiZSBwb3NpdGlvbmVkIGJhc2VkIG9uIHRoZSBwcmVzZW5jZSBvZiBpdHMgYW5jaG9yIGluIGEgc29ydGVkIGFycmF5IG9yIHRoZSBmYWN0IHRoYXQgYWxsIHJlbWFpbmluZyBpdGVtcyBzZWxmIHJlZmVyZW5jZS5cbiAqIEBwYXJhbSBkZWxheWVkUG9zaXRpb25pbmdJdGVtcyBLZXktdmFsdWUgcGFpciB3aGVyZSB0aGUga2V5IGlzIHRoZSBpdGVtIGFuZCB0aGUgdmFsdWUgaXMgaXRzIHBvc2l0aW9uLlxuICogQHBhcmFtIHNvcnRlZCBUaGUgYXJyYXkgb2Ygc29ydGVkIGtleXMuXG4gKiBAcmV0dXJucyBSZXR1cm5zIHdoZXRoZXIgYW55IGRlbGF5ZWRQb3NpdGlvbmluZ0l0ZW0gY2FuIGJlIHBvc2l0aW9uZWQuXG4gKi9cbmNvbnN0IGlzRGVsYXllZEl0ZW1Qb3NpdGlvbmFibGUgPSAoXG5cdGRlbGF5ZWRQb3NpdGlvbmluZ0l0ZW1zOiBSZWNvcmQ8c3RyaW5nLCBQb3NpdGlvbj4sXG5cdHNvcnRlZDogc3RyaW5nW10sXG5cdHBvc2l0aW9uaW5nSXRlbXM6IFJlY29yZDxzdHJpbmcsIFBvc2l0aW9uPixcblx0cG9zc2libGVBbmNob3JzOiBzdHJpbmdbXVxuKTogYm9vbGVhbiA9PiB7XG5cdHJldHVybiAoXG5cdFx0ISEoXG5cdFx0XHRPYmplY3Qua2V5cyhkZWxheWVkUG9zaXRpb25pbmdJdGVtcykubGVuZ3RoICYmXG5cdFx0XHRPYmplY3Qua2V5cyhkZWxheWVkUG9zaXRpb25pbmdJdGVtcylcblx0XHRcdFx0Lm1hcCgoaXRlbUtleSkgPT4gZGVsYXllZFBvc2l0aW9uaW5nSXRlbXNbaXRlbUtleV0uYW5jaG9yISlcblx0XHRcdFx0LnNvbWUoKGRlbGF5ZWRBbmNob3JLZXkpID0+IHNvcnRlZC5pbmNsdWRlcyhkZWxheWVkQW5jaG9yS2V5KSlcblx0XHQpIHx8XG5cdFx0Ly8gRmlyc3QgcmVjdXJzaXZlIGxvb3Agb25seVxuXHRcdChPYmplY3Qua2V5cyhwb3NpdGlvbmluZ0l0ZW1zKS5sZW5ndGggPT09IHBvc3NpYmxlQW5jaG9ycy5sZW5ndGggJiZcblx0XHRcdC8vIE9ubHkgaWYgYWxsIG90aGVycyB3ZXJlIGhhbmRsZWRcblx0XHRcdHBvc3NpYmxlQW5jaG9ycy5sZW5ndGggLSBzb3J0ZWQubGVuZ3RoID09PSBPYmplY3Qua2V5cyhkZWxheWVkUG9zaXRpb25pbmdJdGVtcykubGVuZ3RoICYmXG5cdFx0XHQvLyBDaGVjayBmb3IgY2lyY3VsYXIgZGVwZW5kZW5jeVxuXHRcdFx0T2JqZWN0LmtleXMoZGVsYXllZFBvc2l0aW9uaW5nSXRlbXMpLmV2ZXJ5KChpdGVtS2V5KSA9PlxuXHRcdFx0XHRPYmplY3Qua2V5cyhkZWxheWVkUG9zaXRpb25pbmdJdGVtcykuaW5jbHVkZXMoZGVsYXllZFBvc2l0aW9uaW5nSXRlbXNbaXRlbUtleV0uYW5jaG9yISlcblx0XHRcdCkpXG5cdCk7XG59O1xuXG4vKipcbiAqIFJlb3JkZXJzIGEgZ2l2ZW4gYXJyYXkgb2YgZWxlbWVudHMgYmFzZWQgb24gYSBwcmVkZWZpbmVkIHBvc2l0aW9uaW5nIG1hcC5cbiAqXG4gKiBAdGVtcGxhdGUgVCBBIHR5cGUgdGhhdCBleHRlbmRzIHRoZSBDb25maWd1cmFibGVPYmplY3QuXG4gKiBAcGFyYW0gcm9vdEVsZW1lbnRzIFRoZSBpbml0aWFsIGFycmF5IG9mIGVsZW1lbnRzIHRvIHJlb3JkZXIuXG4gKiBAcGFyYW0gaXRlbXNQZXJLZXkgQSBtYXAgb2YgZWxlbWVudHMgdG8gcmVvcmRlciwga2V5ZWQgYnkgYW4gaWRlbnRpZmllci5cbiAqIEBwYXJhbSBwb3NpdGlvbmluZ0l0ZW1zIEEgbWFwIGRlZmluaW5nIHRoZSBvcmRlciBvZiBlbGVtZW50cywga2V5ZWQgYnkgYW4gaWRlbnRpZmllci5cbiAqIEBwYXJhbSBlbmRFbGVtZW50IE9ubHkgb25lIGVsZW1lbnQgY2FuIGhhdmUgcG9zaXRpb24gZW5kIGFzIG9mIG5vdywgb25seSB1c2VkIGZvciBTdGFuZGFyZEFjdGlvbjo6Q2FuY2VsXG4gKiBAcmV0dXJucyBBIG5ldyBhcnJheSBvZiBlbGVtZW50cywgcmVvcmRlcmVkIGFjY29yZGluZyB0byB0aGUgZ2l2ZW4gcG9zaXRpb25pbmcgbWFwLiBObyBkZWZhdWx0IHBvc2l0aW9uaW5nIGlzIGtlcHQsIG9ubHkgdGhlIHJvb3RFbGVtZW50cyBwb3NpdGlvbiBjb25maWd1cmF0aW9uIGlzIGtlcHRcbiAqL1xuY29uc3QgcmVvcmRlclBvc2l0aW9uaW5nSXRlbXMgPSA8VCBleHRlbmRzIENvbmZpZ3VyYWJsZU9iamVjdD4oXG5cdHJvb3RFbGVtZW50czogVFtdLFxuXHRpdGVtc1BlcktleTogUmVjb3JkPHN0cmluZywgVD4sXG5cdHBvc2l0aW9uaW5nSXRlbXM6IFJlY29yZDxzdHJpbmcsIFBvc2l0aW9uPixcblx0ZW5kRWxlbWVudDogVCB8IHVuZGVmaW5lZFxuKTogQXJyYXk8VD4gPT4ge1xuXHRjb25zdCBzb3J0ZWRLZXlzOiBzdHJpbmdbXSA9IFtdO1xuXG5cdC8vIENhbGN1bGF0ZSBpbml0aWFsIGRlZmF1bHQgYW5jaG9ycyB0byBwbGFjZSBlbGVtZW50cyB3aXRob3V0IGV4cGxpY2l0IGFuY2hvcnNcblx0Y29uc3QgZGVmYXVsdEFuY2hvcnM6IHsgZmlyc3Q/OiBzdHJpbmc7IGxhc3Q/OiBzdHJpbmcgfSA9IHsgZmlyc3Q6IHVuZGVmaW5lZCwgbGFzdDogdW5kZWZpbmVkIH07XG5cdGRlZmF1bHRBbmNob3JzLmZpcnN0ID0gcm9vdEVsZW1lbnRzLmxlbmd0aCA/IHJvb3RFbGVtZW50c1swXS5rZXkgOiB1bmRlZmluZWQ7XG5cdGRlZmF1bHRBbmNob3JzLmxhc3QgPSByb290RWxlbWVudHMubGVuZ3RoID8gcm9vdEVsZW1lbnRzW3Jvb3RFbGVtZW50cy5sZW5ndGggLSAxXS5rZXkgOiB1bmRlZmluZWQ7XG5cblx0Y29uc3QgZGVsYXllZFBvc2l0aW9uaW5nSXRlbXM6IFJlY29yZDxzdHJpbmcsIFJlcXVpcmVkPFBvc2l0aW9uPj4gPSB7fTtcblx0T2JqZWN0LmtleXMocG9zaXRpb25pbmdJdGVtcykuZm9yRWFjaCgocG9zaXRpb25JdGVtS2V5KSA9PiB7XG5cdFx0b3JkZXJQb3NpdGlvbmluZ0l0ZW1SZWN1cnNpdmVseShwb3NpdGlvbmluZ0l0ZW1zLCBwb3NpdGlvbkl0ZW1LZXksIHNvcnRlZEtleXMsIGRlZmF1bHRBbmNob3JzLCBkZWxheWVkUG9zaXRpb25pbmdJdGVtcywgW10pO1xuXHR9KTtcblxuXHRjb25zdCBvdXRFbGVtZW50cyA9IHNvcnRlZEtleXMubWFwKChrZXkpID0+IGl0ZW1zUGVyS2V5W2tleV0pO1xuXHQvLyBPbmx5IGtlZXAgZXhwbGljaXRseSBzZXQgcG9zaXRpb25zLCBuZWVkZWQgZm9yIHVzaW5nIHRoZSBvdXRwdXQgb2YgaW5zZXJ0Q3VzdG9tRWxlbWVudHMgYXMgbmV4dCBpbnB1dFxuXHRvdXRFbGVtZW50cy5mb3JFYWNoKChlbGVtZW50LCBpbmRleCkgPT4ge1xuXHRcdGlmIChlbGVtZW50LnBvc2l0aW9uICYmICFpdGVtc1BlcktleVtlbGVtZW50LmtleV0/LnBvc2l0aW9uKSB7XG5cdFx0XHRkZWxldGUgb3V0RWxlbWVudHNbaW5kZXhdLnBvc2l0aW9uO1xuXHRcdH1cblx0fSk7XG5cblx0aWYgKGVuZEVsZW1lbnQpIHtcblx0XHRvdXRFbGVtZW50cy5wdXNoKGVuZEVsZW1lbnQpO1xuXHR9XG5cblx0cmV0dXJuIG91dEVsZW1lbnRzO1xufTtcblxuLyoqXG4gKiBEZXRlcm1pbmVzIHRoZSBpbnNlcnRpb24gaW5kZXggZm9yIGFuIGl0ZW0gaW4gYSBzb3J0ZWQgYXJyYXksIG9yIGRlbGF5cyBpdHMgcG9zaXRpb25pbmcgaWYgbmVjZXNzYXJ5LlxuICpcbiAqIEBwYXJhbSBzb3J0ZWQgVGhlIGFycmF5IG9mIHNvcnRlZCBrZXlzLlxuICogQHBhcmFtIGFuY2hvciBUaGUgYW5jaG9yIHN0cmluZyByZWxhdGVkIHRvIHRoZSBpdGVtLlxuICogQHBhcmFtIGFuY2hvckl0ZW0gVGhlIHBvc2l0aW9uIG1ldGFkYXRhIGZvciB0aGUgaXRlbSB0byBpbnNlcnQuXG4gKiBAcGFyYW0gZGVsYXllZFBvc2l0aW9uaW5nSXRlbXMgS2V5LXZhbHVlIHBhaXIgd2hlcmUgdGhlIGtleSBpcyB0aGUgaXRlbSBhbmQgdGhlIHZhbHVlIGlzIGl0cyBwb3NpdGlvbi5cbiAqIEBwYXJhbSBwb3NpdGlvbmluZ0l0ZW1zIEEgbWFwIGRlZmluaW5nIHRoZSBvcmRlciBvZiBlbGVtZW50cywga2V5ZWQgYnkgYW4gaWRlbnRpZmllci5cbiAqIEByZXR1cm5zIFRoZSBpbmRleCBhdCB3aGljaCB0aGUgaXRlbSBzaG91bGQgYmUgaW5zZXJ0ZWQgaW4gdGhlIHNvcnRlZCBhcnJheSwgb3IgLTEgaWYgdGhlIGl0ZW0ncyBwb3NpdGlvbmluZyBzaG91bGQgYmUgZGVsYXllZC5cbiAqL1xuY29uc3QgZ2V0SW5zZXJ0SW5kZXhPckRlbGF5SXRlbSA9IChcblx0c29ydGVkOiBzdHJpbmdbXSxcblx0YW5jaG9yOiBzdHJpbmcsXG5cdGFuY2hvckl0ZW06IFBvc2l0aW9uLFxuXHRkZWxheWVkUG9zaXRpb25pbmdJdGVtczogUmVjb3JkPHN0cmluZywgUG9zaXRpb24+LFxuXHRwb3NpdGlvbmluZ0l0ZW1zOiBSZWNvcmQ8c3RyaW5nLCBQb3NpdGlvbj4sXG5cdHBvc3NpYmxlQW5jaG9yczogc3RyaW5nW11cbik6IG51bWJlciA9PiB7XG5cdGxldCBpbnNlcnRJbmRleCA9IHNvcnRlZC5pbmRleE9mKGFuY2hvcik7XG5cblx0Ly8gVGFrZSBvdXQgYW5jaG9yLCBpZiBpdCdzIGN1cnJlbnRseSB3b3JrZWQgb25cblx0aWYgKE9iamVjdC5rZXlzKGRlbGF5ZWRQb3NpdGlvbmluZ0l0ZW1zKS5pbmNsdWRlcyhhbmNob3IpKSB7XG5cdFx0ZGVsZXRlIGRlbGF5ZWRQb3NpdGlvbmluZ0l0ZW1zW2FuY2hvcl07XG5cdH1cblxuXHRpZiAoYW5jaG9ySXRlbSAmJiBhbmNob3JJdGVtLmFuY2hvciAmJiBhbmNob3IgIT09IGFuY2hvckl0ZW0uYW5jaG9yICYmICFzb3J0ZWQuaW5jbHVkZXMoYW5jaG9ySXRlbS5hbmNob3IpKSB7XG5cdFx0ZGVsYXllZFBvc2l0aW9uaW5nSXRlbXNbYW5jaG9yXSA9IHBvc2l0aW9uaW5nSXRlbXNbYW5jaG9yXTtcblx0XHQvLyBTb2x2ZSBjaXJjdWxhciBkZXBlbmRlbmN5XG5cdFx0aWYgKFxuXHRcdFx0T2JqZWN0LmtleXMoZGVsYXllZFBvc2l0aW9uaW5nSXRlbXMpLmxlbmd0aCAmJlxuXHRcdFx0IU9iamVjdC5rZXlzKGRlbGF5ZWRQb3NpdGlvbmluZ0l0ZW1zKS5zb21lKChpdGVtS2V5KSA9PiBzb3J0ZWQuaW5jbHVkZXMoZGVsYXllZFBvc2l0aW9uaW5nSXRlbXNbaXRlbUtleV0uYW5jaG9yISkpICYmXG5cdFx0XHRwb3NzaWJsZUFuY2hvcnMubGVuZ3RoIC0gc29ydGVkLmxlbmd0aCA9PT0gT2JqZWN0LmtleXMoZGVsYXllZFBvc2l0aW9uaW5nSXRlbXMpLmxlbmd0aFxuXHRcdCkge1xuXHRcdFx0Y29uc3QgYWRkZWRBbmNob3IgPSBzZXRGaXJzdEFuY2hvcihzb3J0ZWQsIGRlbGF5ZWRQb3NpdGlvbmluZ0l0ZW1zKTtcblx0XHRcdGRlbGV0ZSBkZWxheWVkUG9zaXRpb25pbmdJdGVtc1thZGRlZEFuY2hvcl07XG5cdFx0fSBlbHNlIHtcblx0XHRcdHJldHVybiAtMTtcblx0XHR9XG5cdH0gZWxzZSBpZiAoYW5jaG9yID09PSBhbmNob3JJdGVtLmFuY2hvcikge1xuXHRcdC8vIEFuY2hvciByZWZlcmVuY2VzIGl0c2VsZlxuXHRcdGluc2VydEluZGV4ID0gc29ydGVkLmxlbmd0aDtcblx0fSBlbHNlIHtcblx0XHRpbnNlcnRJbmRleCA9IHNvcnRlZC5pbmRleE9mKGFuY2hvckl0ZW0uYW5jaG9yISk7XG5cdFx0aWYgKGFuY2hvckl0ZW0ucGxhY2VtZW50ID09PSBQbGFjZW1lbnQuQWZ0ZXIpIHtcblx0XHRcdGluc2VydEluZGV4Kys7XG5cdFx0fVxuXHR9XG5cdHJldHVybiBpbnNlcnRJbmRleDtcbn07XG5cbi8qKlxuICogUmVjdXJzaXZlIG1ldGhvZCB0aGF0IG9yZGVyIHRoZSBrZXlzIGJhc2VkIG9uIGEgcG9zaXRpb24gaW5mb3JtYXRpb24uXG4gKlxuICogQHBhcmFtIHBvc2l0aW9uaW5nSXRlbXMgQSBtYXAgZGVmaW5pbmcgdGhlIG9yZGVyIG9mIGVsZW1lbnRzLCBrZXllZCBieSBhbiBpZGVudGlmaWVyLlxuICogQHBhcmFtIGFuY2hvciBUaGUgYW5jaG9yIHN0cmluZyByZWxhdGVkIHRvIHRoZSBpdGVtLlxuICogQHBhcmFtIHNvcnRlZCBUaGUgYXJyYXkgb2Ygc29ydGVkIGtleXMuXG4gKiBAcGFyYW0gZGVmYXVsdEFuY2hvcnMgRGVmYXVsdCBhbmNob3JzIHVzZWQgdG8gcGxhY2UgZWxlbWVudHMgd2l0aG91dCBleHBsaWNpdCBhbmNob3JzXG4gKiBAcGFyYW0gZGVmYXVsdEFuY2hvcnMuZmlyc3RcbiAqIEBwYXJhbSBkZWZhdWx0QW5jaG9ycy5sYXN0XG4gKiBAcGFyYW0gZGVsYXllZFBvc2l0aW9uaW5nSXRlbXMgS2V5LXZhbHVlIHBhaXIgd2hlcmUgdGhlIGtleSBpcyB0aGUgaXRlbSBhbmQgdGhlIHZhbHVlIGlzIGl0cyBwb3NpdGlvbi5cbiAqIEBwYXJhbSBwb3NzaWJsZUFuY2hvcnMgRm9yIHJlY3Vyc2l2ZSBhZGRpdGlvbiBvZiBkZWxheWVkIGN1c3RvbSBlbGVtZW50c1xuICovXG5jb25zdCBvcmRlclBvc2l0aW9uaW5nSXRlbVJlY3Vyc2l2ZWx5ID0gKFxuXHRwb3NpdGlvbmluZ0l0ZW1zOiBSZWNvcmQ8c3RyaW5nLCBQb3NpdGlvbj4sXG5cdGFuY2hvcjogc3RyaW5nLFxuXHRzb3J0ZWQ6IHN0cmluZ1tdLFxuXHRkZWZhdWx0QW5jaG9yczogeyBmaXJzdD86IHN0cmluZzsgbGFzdD86IHN0cmluZyB9LFxuXHRkZWxheWVkUG9zaXRpb25pbmdJdGVtczogUmVjb3JkPHN0cmluZywgUG9zaXRpb24+LFxuXHRwb3NzaWJsZUFuY2hvcnM6IHN0cmluZ1tdXG4pOiB2b2lkID0+IHtcblx0aWYgKGlzQWxyZWFkeVBvc2l0aW9uZWQoYW5jaG9yLCBzb3J0ZWQpKSB7XG5cdFx0cmV0dXJuO1xuXHR9XG5cdGNvbnN0IGFuY2hvckl0ZW0gPSBwb3NpdGlvbmluZ0l0ZW1zW2FuY2hvcl07XG5cdHBvc3NpYmxlQW5jaG9ycyA9IHBvc3NpYmxlQW5jaG9ycy5sZW5ndGggPyBwb3NzaWJsZUFuY2hvcnMgOiBPYmplY3Qua2V5cyhwb3NpdGlvbmluZ0l0ZW1zKTsgLy8gUGFzcyBpbiBhbGwgcG9zc2libGUgYW5jaG9ycyBpbmRlcGVuZGVudCBvZiByZWN1cnNpb24gbGV2ZWxcblxuXHQvLyBDb25maWd1cmF0aW9uIG1pc3Rha2VzXG5cdGlmIChhbmNob3JJdGVtLmFuY2hvciAmJiAhT2JqZWN0LmtleXMocG9zaXRpb25pbmdJdGVtcykuaW5jbHVkZXMoYW5jaG9ySXRlbS5hbmNob3IpICYmICFwb3NzaWJsZUFuY2hvcnMuaW5jbHVkZXMoYW5jaG9ySXRlbS5hbmNob3IpKSB7XG5cdFx0TG9nLndhcm5pbmcoXG5cdFx0XHRgUG9zaXRpb24gYW5jaG9yICcke2FuY2hvckl0ZW0uYW5jaG9yfScgbm90IGZvdW5kIGZvciBpdGVtICcke2FuY2hvcn0nLiBQbGVhc2UgY2hlY2sgc2V0dGluZ3MuIERlZmF1bHRpbmcgYXMgaWYgbm8gQW5jaG9yIHdhcyBzZXQuYFxuXHRcdCk7XG5cdFx0Ly9EZWZhdWx0aW5nIGluIGNhc2Ugb2YgbWlzY29uZmlndXJhdGlvblxuXHRcdHBvc2l0aW9uaW5nSXRlbXNbYW5jaG9yXS5hbmNob3IgPSBhbmNob3I7XG5cdFx0YW5jaG9ySXRlbS5hbmNob3IgPSBhbmNob3I7XG5cdH1cblxuXHQvLyBHZW5lcmFsIGRlZmF1bHRpbmdcblx0aWYgKCFhbmNob3JJdGVtLmFuY2hvcikge1xuXHRcdGFuY2hvckl0ZW0uYW5jaG9yID0gYW5jaG9ySXRlbS5wbGFjZW1lbnQgPT09IFBsYWNlbWVudC5BZnRlciA/IGRlZmF1bHRBbmNob3JzLmxhc3QgOiBkZWZhdWx0QW5jaG9ycy5maXJzdDtcblx0XHQvLyBUaGVyZSBpcyBubyBwb3NzaWJsZSByZWZlcmVuY2UgYW5jaG9yIHlldCB0byBhbGlnbiB0b1xuXHRcdGlmIChhbmNob3JJdGVtLmFuY2hvciA9PT0gdW5kZWZpbmVkKSB7XG5cdFx0XHRzZXRGaXJzdEFuY2hvcihzb3J0ZWQsIHsgW2FuY2hvcl06IGFuY2hvckl0ZW0gfSk7XG5cdFx0fVxuXHR9XG5cblx0Ly8gSWYgYW5jaG9yIGl0ZW0gY2Fubm90IGJlIGFzc2lnbmVkIHlldCwgZGVsYXkgaXQsIG90aGVyd2lzZSBnZXQgaW5zZXJ0SW5kZXggYWNjb3JkaW5nIHRvIGNvbmZpZ3VyYXRpb25cblx0Y29uc3QgaW5zZXJ0SW5kZXggPSBnZXRJbnNlcnRJbmRleE9yRGVsYXlJdGVtKHNvcnRlZCwgYW5jaG9yLCBhbmNob3JJdGVtLCBkZWxheWVkUG9zaXRpb25pbmdJdGVtcywgcG9zaXRpb25pbmdJdGVtcywgcG9zc2libGVBbmNob3JzKTtcblxuXHRpZiAoaXNQb3NpdGlvbmFibGUoaW5zZXJ0SW5kZXgsIGFuY2hvciwgc29ydGVkKSkge1xuXHRcdHNvcnRlZC5zcGxpY2UoaW5zZXJ0SW5kZXgsIDAsIGFuY2hvcik7XG5cdH1cblxuXHQvLyBNYWtlIHN1cmUgdGhhdCB0aGUgbmV4dCBlbGVtZW50IHdpdGhvdXQgYW4gYW5jaG9yIGlzIHBsYWNlZCBhZnRlciB0aGUgbmV3IGxhc3Qgb25lIHRvIHByZXZlbnQgcmV2ZXJzaW5nIHRoZSBsaXN0IG9yZGVyXG5cdGRlZmF1bHRBbmNob3JzLmxhc3QgPSBzb3J0ZWRbc29ydGVkLmxlbmd0aCAtIDFdO1xuXG5cdC8vIEV2ZXJ5IHRpbWUgd2Ugc3VjY2Vzc2Z1bGx5IGFkZGVkIG9uIGl0ZW0gd2UgY2hlY2sgZm9yIHRob3NlIHdlIGNvdWxkIG5vdCBhZGQgc28gZmFyLCBhbmQgYWRkIHRoZW0gaWYgdGhleSBoYXZlIGEgcmVmZXJlbmNlIG5vd1xuXHRpZiAoXG5cdFx0T2JqZWN0LmtleXMoZGVsYXllZFBvc2l0aW9uaW5nSXRlbXMpLmxlbmd0aCAmJlxuXHRcdGlzRGVsYXllZEl0ZW1Qb3NpdGlvbmFibGUoZGVsYXllZFBvc2l0aW9uaW5nSXRlbXMsIHNvcnRlZCwgcG9zaXRpb25pbmdJdGVtcywgcG9zc2libGVBbmNob3JzKVxuXHQpIHtcblx0XHRPYmplY3Qua2V5cyhkZWxheWVkUG9zaXRpb25pbmdJdGVtcykuZm9yRWFjaCgocG9zaXRpb25JdGVtS2V5KSA9PiB7XG5cdFx0XHRvcmRlclBvc2l0aW9uaW5nSXRlbVJlY3Vyc2l2ZWx5KFxuXHRcdFx0XHR7IC4uLmRlbGF5ZWRQb3NpdGlvbmluZ0l0ZW1zIH0sXG5cdFx0XHRcdHBvc2l0aW9uSXRlbUtleSxcblx0XHRcdFx0c29ydGVkLFxuXHRcdFx0XHRkZWZhdWx0QW5jaG9ycyxcblx0XHRcdFx0ZGVsYXllZFBvc2l0aW9uaW5nSXRlbXMsXG5cdFx0XHRcdHBvc3NpYmxlQW5jaG9yc1xuXHRcdFx0KTtcblx0XHR9KTtcblx0fVxufTtcblxuZXhwb3J0IGVudW0gT3ZlcnJpZGVUeXBlIHtcblx0bWVyZ2UgPSBcIm1lcmdlXCIsXG5cdG92ZXJ3cml0ZSA9IFwib3ZlcndyaXRlXCIsXG5cdGlnbm9yZSA9IFwiaWdub3JlXCJcbn1cbnR5cGUgQXJyYXlPdmVycmlkZVR5cGU8QXJyYXlUeXBlPiA9IE92ZXJyaWRlS2V5czxBcnJheVR5cGU+O1xuXG50eXBlIEVsZW1lbnRUeXBlPFQ+ID0gVCBleHRlbmRzIGFueVtdID8gVFtudW1iZXJdIDogVDtcbnR5cGUgT3ZlcnJpZGVLZXlzPFQ+ID0ge1xuXHRbUCBpbiBrZXlvZiBUXT86IE92ZXJyaWRlVHlwZSB8IEFycmF5T3ZlcnJpZGVUeXBlPEVsZW1lbnRUeXBlPFRbUF0+Pjtcbn07XG5cbmZ1bmN0aW9uIGlzQXJyYXlDb25maWc8VD4oY29uZmlnOiBPdmVycmlkZVR5cGUgfCBBcnJheU92ZXJyaWRlVHlwZTxUPiB8IHVuZGVmaW5lZCk6IGNvbmZpZyBpcyBBcnJheU92ZXJyaWRlVHlwZTxUPiB7XG5cdHJldHVybiB0eXBlb2YgY29uZmlnID09PSBcIm9iamVjdFwiO1xufVxuXG5mdW5jdGlvbiBhcHBseU92ZXJyaWRlPFQgZXh0ZW5kcyBDb25maWd1cmFibGVPYmplY3Q+KFxuXHRvdmVyd3JpdGFibGVLZXlzOiBPdmVycmlkZUtleXM8VD4sXG5cdHNvdXJjZUl0ZW06IFQgfCBudWxsLFxuXHRjdXN0b21FbGVtZW50OiBDdXN0b21FbGVtZW50PFQ+XG4pOiBUIHtcblx0Y29uc3Qgb3V0SXRlbTogVCA9IHNvdXJjZUl0ZW0gfHwgKGN1c3RvbUVsZW1lbnQgYXMgVCk7XG5cdGZvciAoY29uc3Qgb3ZlcndyaXRhYmxlS2V5IGluIG92ZXJ3cml0YWJsZUtleXMpIHtcblx0XHRpZiAoT2JqZWN0Lmhhc093blByb3BlcnR5LmNhbGwob3ZlcndyaXRhYmxlS2V5cywgb3ZlcndyaXRhYmxlS2V5KSkge1xuXHRcdFx0Y29uc3Qgb3ZlcnJpZGVDb25maWcgPSBvdmVyd3JpdGFibGVLZXlzW292ZXJ3cml0YWJsZUtleV07XG5cdFx0XHRpZiAoc291cmNlSXRlbSAhPT0gbnVsbCkge1xuXHRcdFx0XHRzd2l0Y2ggKG92ZXJyaWRlQ29uZmlnKSB7XG5cdFx0XHRcdFx0Y2FzZSBcIm92ZXJ3cml0ZVwiOlxuXHRcdFx0XHRcdFx0aWYgKGN1c3RvbUVsZW1lbnQuaGFzT3duUHJvcGVydHkob3ZlcndyaXRhYmxlS2V5KSAmJiBjdXN0b21FbGVtZW50W292ZXJ3cml0YWJsZUtleV0gIT09IHVuZGVmaW5lZCkge1xuXHRcdFx0XHRcdFx0XHRzb3VyY2VJdGVtW292ZXJ3cml0YWJsZUtleV0gPSBjdXN0b21FbGVtZW50W292ZXJ3cml0YWJsZUtleV0gYXMgYW55O1xuXHRcdFx0XHRcdFx0fVxuXHRcdFx0XHRcdFx0YnJlYWs7XG5cdFx0XHRcdFx0Y2FzZSBcIm1lcmdlXCI6XG5cdFx0XHRcdFx0ZGVmYXVsdDpcblx0XHRcdFx0XHRcdGNvbnN0IHN1Ykl0ZW0gPSBzb3VyY2VJdGVtW292ZXJ3cml0YWJsZUtleV0gfHwgKFtdIGFzIGFueVtdKTtcblx0XHRcdFx0XHRcdGxldCBzdWJDb25maWcgPSB7fTtcblx0XHRcdFx0XHRcdGlmIChpc0FycmF5Q29uZmlnKG92ZXJyaWRlQ29uZmlnKSkge1xuXHRcdFx0XHRcdFx0XHRzdWJDb25maWcgPSBvdmVycmlkZUNvbmZpZztcblx0XHRcdFx0XHRcdH1cblx0XHRcdFx0XHRcdGlmIChBcnJheS5pc0FycmF5KHN1Ykl0ZW0pKSB7XG5cdFx0XHRcdFx0XHRcdHNvdXJjZUl0ZW1bb3ZlcndyaXRhYmxlS2V5XSA9IGluc2VydEN1c3RvbUVsZW1lbnRzKFxuXHRcdFx0XHRcdFx0XHRcdHN1Ykl0ZW0sXG5cdFx0XHRcdFx0XHRcdFx0KGN1c3RvbUVsZW1lbnQgJiYgKGN1c3RvbUVsZW1lbnRbb3ZlcndyaXRhYmxlS2V5XSBhcyBSZWNvcmQ8c3RyaW5nLCBDdXN0b21FbGVtZW50PGFueT4+KSkgfHwge30sXG5cdFx0XHRcdFx0XHRcdFx0c3ViQ29uZmlnXG5cdFx0XHRcdFx0XHRcdCkgYXMgYW55O1xuXHRcdFx0XHRcdFx0fVxuXHRcdFx0XHRcdFx0YnJlYWs7XG5cdFx0XHRcdH1cblx0XHRcdH0gZWxzZSB7XG5cdFx0XHRcdHN3aXRjaCAob3ZlcnJpZGVDb25maWcpIHtcblx0XHRcdFx0XHRjYXNlIFwib3ZlcndyaXRlXCI6XG5cdFx0XHRcdFx0XHRpZiAoY3VzdG9tRWxlbWVudC5oYXNPd25Qcm9wZXJ0eShvdmVyd3JpdGFibGVLZXkpICYmIGN1c3RvbUVsZW1lbnRbb3ZlcndyaXRhYmxlS2V5XSAhPT0gdW5kZWZpbmVkKSB7XG5cdFx0XHRcdFx0XHRcdG91dEl0ZW1bb3ZlcndyaXRhYmxlS2V5XSA9IGN1c3RvbUVsZW1lbnRbb3ZlcndyaXRhYmxlS2V5XSBhcyBhbnk7XG5cdFx0XHRcdFx0XHR9XG5cdFx0XHRcdFx0XHRicmVhaztcblx0XHRcdFx0XHRjYXNlIFwibWVyZ2VcIjpcblx0XHRcdFx0XHRkZWZhdWx0OlxuXHRcdFx0XHRcdFx0bGV0IHN1YkNvbmZpZyA9IHt9O1xuXHRcdFx0XHRcdFx0aWYgKGlzQXJyYXlDb25maWcob3ZlcnJpZGVDb25maWcpKSB7XG5cdFx0XHRcdFx0XHRcdHN1YkNvbmZpZyA9IG92ZXJyaWRlQ29uZmlnO1xuXHRcdFx0XHRcdFx0fVxuXHRcdFx0XHRcdFx0b3V0SXRlbVtvdmVyd3JpdGFibGVLZXldID0gaW5zZXJ0Q3VzdG9tRWxlbWVudHMoXG5cdFx0XHRcdFx0XHRcdFtdIGFzIGFueVtdLFxuXHRcdFx0XHRcdFx0XHQoY3VzdG9tRWxlbWVudCAmJiAoY3VzdG9tRWxlbWVudFtvdmVyd3JpdGFibGVLZXldIGFzIFJlY29yZDxzdHJpbmcsIEN1c3RvbUVsZW1lbnQ8YW55Pj4pKSB8fCB7fSxcblx0XHRcdFx0XHRcdFx0c3ViQ29uZmlnXG5cdFx0XHRcdFx0XHQpIGFzIGFueTtcblx0XHRcdFx0XHRcdGJyZWFrO1xuXHRcdFx0XHR9XG5cdFx0XHR9XG5cdFx0fVxuXHR9XG5cdHJldHVybiBvdXRJdGVtO1xufVxuXG4vKipcbiAqIEluc2VydCBhIHNldCBvZiBjdXN0b20gZWxlbWVudHMgaW4gdGhlIHJpZ2h0IHBvc2l0aW9uIGluIGFuIG9yaWdpbmFsIGNvbGxlY3Rpb24uXG4gKlxuICogUGFyYW1ldGVycyBmb3Igb3ZlcndyaXRhYmxlS2V5cyBhbmQgdGhlaXIgaW1wbGljYXRpb25zOlxuICogXCJvdmVyd3JpdGVcIjogVGhlIHdob2xlIG9iamVjdCBnZXRzIG92ZXJ3cml0dGVuIC0gaWYgdGhlIGN1c3RvbUVsZW1lbnRzIGluY2x1ZGUgYSBkZWZhdWx0LCB0aGlzIHdpbGwgb3ZlcnJ1bGUgdGhlIHdob2xlIHJvb3RFbGVtZW50cyBjb25maWd1cmF0aW9uLlxuICogXCJtZXJnZVwiOiBUaGlzIGlzIHNpbWlsYXIgdG8gY2FsbGluZyBpbnNlcnRDdXN0b21FbGVtZW50cyBpdHNlbGYuIFlvdSBtdXN0IGluY2x1ZGUgdGhlXG4gKiBmdWxsIEN1c3RvbUVsZW1lbnQgc3ludGF4IHdpdGhpbiB0aGUgY3VzdG9tRWxlbWVudHMsIGluY2x1ZGluZyBhbmNob3JzLCBmb3IgZXhhbXBsZS5cbiAqIFwiaWdub3JlXCI6IFRoZXJlIGFyZSBubyBhZGRpdGlvbnMgYW5kIG5vIGNvbWJpbmF0aW9ucy4gT25seSB0aGUgcm9vdEVsZW1lbnRzIG9iamVjdCBpcyB1c2VkLlxuICpcbiAqIE5vdGUgLSBQcm9jZWVkIGFzIGZvbGxvd3MgaW4gY2FzZSB5b3UgaGF2ZSBkZWZpbmVkIGN1c3RvbUVsZW1lbnRzIGFuZCBkbyBub3Qgd2FudCB0byBvdmVyd3JpdGUgdGhlaXIgdmFsdWVzIHdpdGggZGVmYXVsdHM6XG4gKiBIYW5kIHRoZSByb290RWxlbWVudHMgaW50byB0aGUgY3JlYXRpb24gZnVuY3Rpb24gb2YgdGhlIGN1c3RvbUVsZW1lbnQuXG4gKiBEZXBlbmRpbmcgb24gdGhlIGV4aXN0ZW5jZSBvZiBib3RoIHJvb3RFbGVtZW50LWNvbmZpZ3VyYXRpb24gYW5kIGN1c3RvbUVsZW1lbnQtY29uZmlndXJhdGlvbixcbiAqIHlvdSBtdXN0IHNldCB0aGUgY3VzdG9tRWxlbWVudHMgcHJvcGVydHksIGZvciB3aGljaCB0aGUgXCJvdmVyd3JpdGVcIi1wcm9wZXJ0eSBpcyBzZXQsIGV4cGxpY2l0bHkgdG8gdW5kZWZpbmVkLlxuICpcbiAqIEB0ZW1wbGF0ZSBUXG4gKiBAcGFyYW0gcm9vdEVsZW1lbnRzIEEgbGlzdCBvZiBcIkNvbmZpZ3VyYWJsZU9iamVjdFwiIHdoaWNoIG1lYW5zIG9iamVjdCB0aGF0IGhhdmUgYSB1bmlxdWUgXCJrZXlcIlxuICogQHBhcmFtIGN1c3RvbUVsZW1lbnRzIEFuIG9iamVjdCBjb250YWluaW5nIGV4dHJhIG9iamVjdCB0byBhZGQsIHRoZXkgYXJlIGluZGV4ZWQgYnkgYSBrZXkgYW5kIGhhdmUgYSBcInBvc2l0aW9uXCIgb2JqZWN0XG4gKiBAcGFyYW0gb3ZlcndyaXRhYmxlS2V5cyBUaGUgbGlzdCBvZiBrZXlzIGZyb20gdGhlIG9yaWdpbmFsIG9iamVjdCB0aGF0IGNhbiBiZSBvdmVyd3JpdHRlbiBpbiBjYXNlIGEgY3VzdG9tIGVsZW1lbnQgaGFzIHRoZSBzYW1lIFwia2V5XCJcbiAqIEByZXR1cm5zIEFuIG9yZGVyZWQgYXJyYXkgb2YgZWxlbWVudHMgaW5jbHVkaW5nIHRoZSBjdXN0b20gb25lc1xuICovXG5leHBvcnQgZnVuY3Rpb24gaW5zZXJ0Q3VzdG9tRWxlbWVudHM8VCBleHRlbmRzIENvbmZpZ3VyYWJsZU9iamVjdD4oXG5cdHJvb3RFbGVtZW50czogVFtdLFxuXHRjdXN0b21FbGVtZW50czogUmVjb3JkPHN0cmluZywgQ3VzdG9tRWxlbWVudDxUPj4sXG5cdG92ZXJ3cml0YWJsZUtleXM6IE92ZXJyaWRlS2V5czxUPiA9IHt9XG4pOiBUW10ge1xuXHRsZXQgZW5kRWxlbWVudDogVCB8IHVuZGVmaW5lZDtcblx0Y29uc3QgcG9zaXRpb25pbmdJdGVtczogUmVjb3JkPHN0cmluZywgUmVxdWlyZWQ8UG9zaXRpb24+PiA9IHt9O1xuXHRjb25zdCBpdGVtc1BlcktleTogUmVjb3JkPHN0cmluZywgVD4gPSB7fTtcblxuXHQvLyBDcmVhdGlvbiBvZiBpbml0aWFsIGxpc3Rcblx0cm9vdEVsZW1lbnRzLmZvckVhY2goKHJvb3RFbGVtZW50KSA9PiB7XG5cdFx0aWYgKHJvb3RFbGVtZW50LnBvc2l0aW9uPy5wbGFjZW1lbnQgPT09IFBsYWNlbWVudC5FbmQgJiYgIWVuZEVsZW1lbnQpIHtcblx0XHRcdGVuZEVsZW1lbnQgPSByb290RWxlbWVudDtcblx0XHR9IGVsc2Uge1xuXHRcdFx0cG9zaXRpb25pbmdJdGVtc1tyb290RWxlbWVudC5rZXldID0ge1xuXHRcdFx0XHRhbmNob3I6IHJvb3RFbGVtZW50LnBvc2l0aW9uPy5hbmNob3IgfHwgcm9vdEVsZW1lbnQua2V5LFxuXHRcdFx0XHRwbGFjZW1lbnQ6IHJvb3RFbGVtZW50LnBvc2l0aW9uPy5wbGFjZW1lbnQgfHwgUGxhY2VtZW50LkFmdGVyXG5cdFx0XHR9O1xuXHRcdH1cblx0XHRpdGVtc1BlcktleVtyb290RWxlbWVudC5rZXldID0gcm9vdEVsZW1lbnQ7XG5cdH0pO1xuXG5cdC8vIE92ZXJyaWRpbmcgb2YgcHJvcGVydGllcyB0aHJvdWdoIGN1c3RvbUVsZW1lbnRzLCBkZXBlbmRpbmcgb24gb3ZlcndyaXRhYmxlS2V5c1xuXHRPYmplY3Qua2V5cyhjdXN0b21FbGVtZW50cykuZm9yRWFjaCgoY3VzdG9tRWxlbWVudEtleSkgPT4ge1xuXHRcdGNvbnN0IGN1c3RvbUVsZW1lbnQgPSBjdXN0b21FbGVtZW50c1tjdXN0b21FbGVtZW50S2V5XTtcblx0XHRjb25zdCBhbmNob3IgPSBjdXN0b21FbGVtZW50LnBvc2l0aW9uLmFuY2hvcjtcblx0XHQvLyBJZiBubyBwbGFjZW1lbnQgZGVmaW5lZCB3ZSBhcmUgQWZ0ZXJcblx0XHRpZiAoIWN1c3RvbUVsZW1lbnQucG9zaXRpb24ucGxhY2VtZW50KSB7XG5cdFx0XHRjdXN0b21FbGVtZW50LnBvc2l0aW9uLnBsYWNlbWVudCA9IFBsYWNlbWVudC5BZnRlcjtcblx0XHR9XG5cblx0XHRjb25zdCBhZGp1c3RlZEN1c3RvbUVsZW1lbnRLZXkgPSBjdXN0b21FbGVtZW50LmtleSBhcyBrZXlvZiBSZWNvcmQ8c3RyaW5nLCBUPjtcblx0XHRpZiAoaXRlbXNQZXJLZXlbYWRqdXN0ZWRDdXN0b21FbGVtZW50S2V5XSkge1xuXHRcdFx0aXRlbXNQZXJLZXlbYWRqdXN0ZWRDdXN0b21FbGVtZW50S2V5XSA9IGFwcGx5T3ZlcnJpZGUob3ZlcndyaXRhYmxlS2V5cywgaXRlbXNQZXJLZXlbYWRqdXN0ZWRDdXN0b21FbGVtZW50S2V5XSwgY3VzdG9tRWxlbWVudCk7XG5cblx0XHRcdC8vUG9zaXRpb24gaXMgb3ZlcndyaXR0ZW4gZm9yIGZpbHRlciBmaWVsZHMgaWYgdGhlcmUgaXMgYSBjaGFuZ2UgaW4gbWFuaWZlc3Rcblx0XHRcdGlmIChhbmNob3IgJiYgY3VzdG9tRWxlbWVudC5wb3NpdGlvbiAmJiBvdmVyd3JpdGFibGVLZXlzLnBvc2l0aW9uICYmIG92ZXJ3cml0YWJsZUtleXMucG9zaXRpb24gPT09IFwib3ZlcndyaXRlXCIpIHtcblx0XHRcdFx0cG9zaXRpb25pbmdJdGVtc1thZGp1c3RlZEN1c3RvbUVsZW1lbnRLZXldID0gaXRlbXNQZXJLZXlbYWRqdXN0ZWRDdXN0b21FbGVtZW50S2V5XS5wb3NpdGlvbiBhcyBSZXF1aXJlZDxQb3NpdGlvbj47XG5cdFx0XHR9XG5cdFx0XHQvKipcblx0XHRcdCAqIGFuY2hvciBjaGVjayBpcyBhZGRlZCB0byBtYWtlIHN1cmUgY2hhbmdlIGluIHByb3BlcnRpZXMgaW4gdGhlIG1hbmlmZXN0IGRvZXMgbm90IGFmZmVjdCB0aGUgcG9zaXRpb24gb2YgdGhlIGZpZWxkLlxuXHRcdFx0ICogT3RoZXJ3aXNlLCB3aGVuIG5vIHBvc2l0aW9uIGlzIG1lbnRpb25lZCBpbiBtYW5pZmVzdCBmb3IgYW4gYWx0ZXJlZCBmaWVsZCwgdGhlIHBvc2l0aW9uIGlzIGNoYW5nZWQgYXNcblx0XHRcdCAqIHBlciB0aGUgcG90ZW50aWFsIGFuY2hvclxuXHRcdFx0ICovXG5cdFx0fSBlbHNlIHtcblx0XHRcdGl0ZW1zUGVyS2V5W2FkanVzdGVkQ3VzdG9tRWxlbWVudEtleV0gPSBhcHBseU92ZXJyaWRlKG92ZXJ3cml0YWJsZUtleXMsIG51bGwsIGN1c3RvbUVsZW1lbnQpO1xuXHRcdFx0cG9zaXRpb25pbmdJdGVtc1thZGp1c3RlZEN1c3RvbUVsZW1lbnRLZXldID0gY3VzdG9tRWxlbWVudC5wb3NpdGlvbiBhcyBSZXF1aXJlZDxQb3NpdGlvbj47XG5cdFx0fVxuXHR9KTtcblxuXHRyZXR1cm4gcmVvcmRlclBvc2l0aW9uaW5nSXRlbXMocm9vdEVsZW1lbnRzLCBpdGVtc1BlcktleSwgcG9zaXRpb25pbmdJdGVtcywgZW5kRWxlbWVudCk7XG59XG4iXSwibWFwcGluZ3MiOiI7QUFBQTtBQUFBO0FBQUE7Ozs7O01BT1lBLFNBQVM7RUFBQSxXQUFUQSxTQUFTO0lBQVRBLFNBQVM7SUFBVEEsU0FBUztJQUFUQSxTQUFTO0VBQUEsR0FBVEEsU0FBUyxLQUFUQSxTQUFTO0VBQUE7RUF5QnJCO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7RUFDQSxNQUFNQyxjQUFjLEdBQUcsVUFBVUMsTUFBZ0IsRUFBRUMsdUJBQWlELEVBQVU7SUFDN0csSUFBSUMsV0FBVztJQUNmO0lBQ0E7SUFDQTtJQUNBO0lBQ0EsTUFBTUMsc0JBQXNCLEdBQUdDLE1BQU0sQ0FBQ0MsSUFBSSxDQUFDSix1QkFBdUIsQ0FBQyxDQUFDSyxNQUFNLENBQ3hFQyx5QkFBeUIsSUFBS04sdUJBQXVCLENBQUNNLHlCQUF5QixDQUFDLENBQUNDLFNBQVMsS0FBS1YsU0FBUyxDQUFDVyxNQUFNLENBQ2hIO0lBQ0QsSUFBSU4sc0JBQXNCLENBQUNPLE1BQU0sR0FBRyxDQUFDLEVBQUU7TUFDdEM7TUFD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
359
+ //# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJuYW1lcyI6WyJQbGFjZW1lbnQiLCJzZXRGaXJzdEFuY2hvciIsInNvcnRlZCIsImRlbGF5ZWRQb3NpdGlvbmluZ0l0ZW1zIiwiZmlyc3RBbmNob3IiLCJiZWZvcmVQb3NpdGlvbmluZ0l0ZW1zIiwiT2JqZWN0Iiwia2V5cyIsImZpbHRlciIsImRlbGF5ZWRQb3NpdGlvbmluZ0l0ZW1LZXkiLCJwbGFjZW1lbnQiLCJCZWZvcmUiLCJsZW5ndGgiLCJmaXJzdFBvc2l0aW9uaW5nSXRlbSIsImZpbmQiLCJpbmNsdWRlcyIsImFuY2hvciIsInB1c2giLCJpc0FscmVhZHlQb3NpdGlvbmVkIiwiaXNQb3NpdGlvbmFibGUiLCJpbnNlcnRJbmRleCIsImlzRGVsYXllZEl0ZW1Qb3NpdGlvbmFibGUiLCJwb3NpdGlvbmluZ0l0ZW1zIiwicG9zc2libGVBbmNob3JzIiwibWFwIiwiaXRlbUtleSIsInNvbWUiLCJkZWxheWVkQW5jaG9yS2V5IiwiZXZlcnkiLCJyZW9yZGVyUG9zaXRpb25pbmdJdGVtcyIsInJvb3RFbGVtZW50cyIsIml0ZW1zUGVyS2V5IiwiZW5kRWxlbWVudCIsInNvcnRlZEtleXMiLCJkZWZhdWx0QW5jaG9ycyIsImZpcnN0IiwidW5kZWZpbmVkIiwibGFzdCIsImtleSIsImZvckVhY2giLCJwb3NpdGlvbkl0ZW1LZXkiLCJvcmRlclBvc2l0aW9uaW5nSXRlbVJlY3Vyc2l2ZWx5Iiwib3V0RWxlbWVudHMiLCJlbGVtZW50IiwiaW5kZXgiLCJwb3NpdGlvbiIsImdldEluc2VydEluZGV4T3JEZWxheUl0ZW0iLCJhbmNob3JJdGVtIiwiaW5kZXhPZiIsImFkZGVkQW5jaG9yIiwiQWZ0ZXIiLCJMb2ciLCJ3YXJuaW5nIiwic3BsaWNlIiwiT3ZlcnJpZGVUeXBlIiwiaXNBcnJheUNvbmZpZyIsImNvbmZpZyIsImFwcGx5T3ZlcnJpZGUiLCJvdmVyd3JpdGFibGVLZXlzIiwic291cmNlSXRlbSIsImN1c3RvbUVsZW1lbnQiLCJvdXRJdGVtIiwib3ZlcndyaXRhYmxlS2V5IiwiaGFzT3duUHJvcGVydHkiLCJjYWxsIiwib3ZlcnJpZGVDb25maWciLCJzdWJJdGVtIiwic3ViQ29uZmlnIiwiQXJyYXkiLCJpc0FycmF5IiwiaW5zZXJ0Q3VzdG9tRWxlbWVudHMiLCJjdXN0b21FbGVtZW50cyIsInJvb3RFbGVtZW50IiwiRW5kIiwiY3VzdG9tRWxlbWVudEtleSIsImFkanVzdGVkQ3VzdG9tRWxlbWVudEtleSJdLCJzb3VyY2VSb290IjoiLiIsInNvdXJjZXMiOlsiQ29uZmlndXJhYmxlT2JqZWN0LnRzIl0sInNvdXJjZXNDb250ZW50IjpbImltcG9ydCBMb2cgZnJvbSBcInNhcC9iYXNlL0xvZ1wiO1xuXG5leHBvcnQgdHlwZSBQb3NpdGlvbiA9IHtcblx0YW5jaG9yPzogc3RyaW5nO1xuXHRwbGFjZW1lbnQ6IFBsYWNlbWVudDtcbn07XG5cbmV4cG9ydCBlbnVtIFBsYWNlbWVudCB7XG5cdEFmdGVyID0gXCJBZnRlclwiLFxuXHRCZWZvcmUgPSBcIkJlZm9yZVwiLFxuXHRFbmQgPSBcIkVuZFwiXG59XG5leHBvcnQgdHlwZSBDb25maWd1cmFibGVPYmplY3RLZXkgPSBzdHJpbmc7XG5leHBvcnQgdHlwZSBDb25maWd1cmFibGVPYmplY3QgPSBQb3NpdGlvbmFibGUgJiB7XG5cdGtleTogQ29uZmlndXJhYmxlT2JqZWN0S2V5O1xufTtcblxudHlwZSBNYWtlTmVzdGVkQXJyYXlDdXN0b208VD4gPSB7XG5cdFtLIGluIGtleW9mIFRdOiBUW0tdIGV4dGVuZHMgQXJyYXk8aW5mZXIgVSBleHRlbmRzIENvbmZpZ3VyYWJsZU9iamVjdD4gPyBSZWNvcmQ8c3RyaW5nLCBDdXN0b21FbGVtZW50PFU+PiA6IFRbS107XG59O1xuXG5leHBvcnQgdHlwZSBDdXN0b21FbGVtZW50PFQgZXh0ZW5kcyBDb25maWd1cmFibGVPYmplY3Q+ID0gTWFrZU5lc3RlZEFycmF5Q3VzdG9tPFQ+ICYge1xuXHRwb3NpdGlvbjogUG9zaXRpb247XG5cdG1lbnU/OiB1bmtub3duW107XG59O1xuXG5leHBvcnQgdHlwZSBQb3NpdGlvbmFibGUgPSB7XG5cdHBvc2l0aW9uPzogUG9zaXRpb247XG59O1xuXG5leHBvcnQgdHlwZSBDb25maWd1cmFibGVSZWNvcmQ8VD4gPSBSZWNvcmQ8Q29uZmlndXJhYmxlT2JqZWN0S2V5LCBUPjtcblxuLyoqXG4gKiBEZXRlcm1pbmUgdGhlIGZpcnN0IGFuY2hvciBhbW9uZyBkZWxheWVkUG9zaXRpb25pbmdJdGVtcy4gSWYgbXVsdGlwbGUgaXRlbXMgYXJlICdCZWZvcmUnIHBvc2l0aW9uZWQsXG4gKiBmaW5kIG9uZSB0aGF0IGRvZXMgbm90IHJlZmVyZW5jZSBhbm90aGVyIHBvc2l0aW9uaW5nIGl0ZW0gaW4gdGhlIGxpc3QuIElmIG9ubHkgb25lIGlzICdCZWZvcmUnIHBvc2l0aW9uZWQsXG4gKiBtYWtlIGl0IHRoZSBmaXJzdCBhbmNob3IuIElmIG5vbmUgYXJlICdCZWZvcmUnIHBvc2l0aW9uZWQsIHVzZSB0aGUgZmlyc3QgaXRlbSBpbiB0aGUgbGlzdC4gVGhlIHNlbGVjdGVkXG4gKiBmaXJzdCBhbmNob3IgaXMgYWRkZWQgdG8gdGhlIHNvcnRlZCBsaXN0LlxuICpcbiAqIEBwYXJhbSBzb3J0ZWQgTGlzdCBvZiBzb3J0ZWQgaXRlbXMuIFRoZSBkZXRlcm1pbmVkIGZpcnN0IGFuY2hvciBpcyBhZGRlZCB0byB0aGlzIGxpc3QuXG4gKiBAcGFyYW0gZGVsYXllZFBvc2l0aW9uaW5nSXRlbXMgS2V5LXZhbHVlIHBhaXIgd2hlcmUgdGhlIGtleSBpcyB0aGUgaXRlbSBhbmQgdGhlIHZhbHVlIGlzIGl0cyBwb3NpdGlvbi5cbiAqIEByZXR1cm5zIFRoZSBrZXkgb2YgdGhlIGRldGVybWluZWQgZmlyc3QgYW5jaG9yIG9mIHRoZSBkZWxheWVkUG9zaXRpb25pbmdJdGVtcy1saXN0LlxuICpcbiAqIEBleGFtcGxlXG4gKiAgIGNvbnN0IHNvcnRlZCA9IFtdO1xuICogICBjb25zdCBkZWxheWVkUG9zaXRpb25pbmdJdGVtcyA9IHtcbiAqICAgICBcIml0ZW0xXCI6IHsgcGxhY2VtZW50OiBQbGFjZW1lbnQuQmVmb3JlLCBhbmNob3I6IFwiaXRlbTJcIiB9LFxuICogICAgIFwiaXRlbTJcIjogeyBwbGFjZW1lbnQ6IFBsYWNlbWVudC5BZnRlciwgYW5jaG9yOiBcIml0ZW0xXCIgfVxuICogICB9O1xuICogICBzZXRGaXJzdEFuY2hvcihzb3J0ZWQsIGRlbGF5ZWRQb3NpdGlvbmluZ0l0ZW1zKTtcbiAqICAgPT0+XG4gKiAgIHNvcnRlZDogW1wiaXRlbTFcIl1cbiAqL1xuY29uc3Qgc2V0Rmlyc3RBbmNob3IgPSBmdW5jdGlvbiAoc29ydGVkOiBzdHJpbmdbXSwgZGVsYXllZFBvc2l0aW9uaW5nSXRlbXM6IFJlY29yZDxzdHJpbmcsIFBvc2l0aW9uPik6IHN0cmluZyB7XG5cdGxldCBmaXJzdEFuY2hvcjtcblx0Ly8gSWYgYWxsIGN1c3RvbSBlbGVtZW50cyByZWZlcmVuY2UgZWFjaCBvdGhlciwgdGFrZVxuXHQvLyBhKSBhIGJlZm9yZSBwbGFjZWQgY3VzdG9tIGVsZW1lbnQsIHdoaWNoIGlzIG5vdCByZWZlcmVuY2luZyBhbnkgb3RoZXIgXCJiZWZvcmVcIi1zZXQgb25lLFxuXHQvLyBiKSB0aGUgZmlyc3QgYmVmb3JlIHBsYWNlZCBjdXN0b20gZWxlbWVudFxuXHQvLyBjKSB0aGUgZmlyc3Qgb3ZlcmFsbCBjdXN0b20gZWxlbWVudFxuXHRjb25zdCBiZWZvcmVQb3NpdGlvbmluZ0l0ZW1zID0gT2JqZWN0LmtleXMoZGVsYXllZFBvc2l0aW9uaW5nSXRlbXMpLmZpbHRlcihcblx0XHQoZGVsYXllZFBvc2l0aW9uaW5nSXRlbUtleSkgPT4gZGVsYXllZFBvc2l0aW9uaW5nSXRlbXNbZGVsYXllZFBvc2l0aW9uaW5nSXRlbUtleV0ucGxhY2VtZW50ID09PSBQbGFjZW1lbnQuQmVmb3JlXG5cdCk7XG5cdGlmIChiZWZvcmVQb3NpdGlvbmluZ0l0ZW1zLmxlbmd0aCA+IDEpIHtcblx0XHQvLyBGaW5kIHBvc2l0aW9uaW5nSXRlbSB3aGljaCBkb2VzIG5vdCByZWZlcmVuY2UgYW5vdGhlciBwb3NpdGlvbmluZ0l0ZW0gaW4gdGhlIGxpc3Rcblx0XHRjb25zdCBmaXJzdFBvc2l0aW9uaW5nSXRlbSA9IGJlZm9yZVBvc2l0aW9uaW5nSXRlbXMuZmluZChcblx0XHRcdChkZWxheWVkUG9zaXRpb25pbmdJdGVtS2V5KSA9PiAhYmVmb3JlUG9zaXRpb25pbmdJdGVtcy5pbmNsdWRlcyhkZWxheWVkUG9zaXRpb25pbmdJdGVtc1tkZWxheWVkUG9zaXRpb25pbmdJdGVtS2V5XS5hbmNob3IhKVxuXHRcdCk7XG5cdFx0Zmlyc3RBbmNob3IgPSBmaXJzdFBvc2l0aW9uaW5nSXRlbSB8fCBiZWZvcmVQb3NpdGlvbmluZ0l0ZW1zWzBdO1xuXHR9IGVsc2UgaWYgKGJlZm9yZVBvc2l0aW9uaW5nSXRlbXMubGVuZ3RoKSB7XG5cdFx0Zmlyc3RBbmNob3IgPSBiZWZvcmVQb3NpdGlvbmluZ0l0ZW1zWzBdO1xuXHR9IGVsc2Uge1xuXHRcdGZpcnN0QW5jaG9yID0gT2JqZWN0LmtleXMoZGVsYXllZFBvc2l0aW9uaW5nSXRlbXMpWzBdO1xuXHR9XG5cdHNvcnRlZC5wdXNoKGZpcnN0QW5jaG9yKTtcblx0cmV0dXJuIGZpcnN0QW5jaG9yO1xufTtcblxuLyoqXG4gKiBDaGVja3MgaWYgYSBnaXZlbiBhbmNob3Igc3RyaW5nIGlzIGFscmVhZHkgcHJlc2VudCBpbiBhIHNvcnRlZCBhcnJheS5cbiAqIEBwYXJhbSBhbmNob3IgVGhlIGFuY2hvciBzdHJpbmcgcmVsYXRlZCB0byB0aGUgaXRlbS5cbiAqIEBwYXJhbSBzb3J0ZWQgVGhlIGFycmF5IG9mIHNvcnRlZCBrZXlzLlxuICogQHJldHVybnMgUmV0dXJucyB3aGV0aGVyIHRoZSBhbmNob3Igd2FzIGFscmVhZHkgcG9zaXRpb25lZC5cbiAqL1xuY29uc3QgaXNBbHJlYWR5UG9zaXRpb25lZCA9IChhbmNob3I6IHN0cmluZywgc29ydGVkOiBzdHJpbmdbXSk6IGJvb2xlYW4gPT4ge1xuXHRyZXR1cm4gc29ydGVkLmluY2x1ZGVzKGFuY2hvcik7XG59O1xuXG4vKipcbiAqIENoZWNrcyBpZiBhbiBpdGVtIGNhbiBiZSBwb3NpdGlvbmVkIGJhc2VkIG9uIGl0cyBpbnNlcnQgaW5kZXggYW5kIHByZXNlbmNlIGluIGEgc29ydGVkIGFycmF5LlxuICogQHBhcmFtIGluc2VydEluZGV4IFRoZSBpbmRleCB3aGVyZSBhbiBpdGVtIGlzIGludGVuZGVkIHRvIGJlIGluc2VydGVkLlxuICogQHBhcmFtIGFuY2hvciBUaGUgYW5jaG9yIHN0cmluZyByZWxhdGVkIHRvIHRoZSBpdGVtLlxuICogQHBhcmFtIHNvcnRlZCBUaGUgYXJyYXkgb2Ygc29ydGVkIGtleXMuXG4gKiBAcmV0dXJucyBSZXR1cm5zIHdoZXRoZXIgdGhlIGFuY2hvciBjYW4gYWxyZWFkeSBiZSBwb3NpdGlvbmVkLlxuICovXG5jb25zdCBpc1Bvc2l0aW9uYWJsZSA9IChpbnNlcnRJbmRleDogbnVtYmVyLCBhbmNob3I6IHN0cmluZywgc29ydGVkOiBzdHJpbmdbXSk6IGJvb2xlYW4gPT4ge1xuXHRpZiAoaW5zZXJ0SW5kZXggPT09IC0xKSB7XG5cdFx0cmV0dXJuIGZhbHNlO1xuXHR9XG5cdHJldHVybiAhaXNBbHJlYWR5UG9zaXRpb25lZChhbmNob3IsIHNvcnRlZCk7XG59O1xuXG4vKipcbiAqIENoZWNrcyBpZiBhbnkgaXRlbSBpbiB0aGUgZGVsYXllZFBvc2l0aW9uaW5nSXRlbXMgb2JqZWN0IGNhbiBiZSBwb3NpdGlvbmVkIGJhc2VkIG9uIHRoZSBwcmVzZW5jZSBvZiBpdHMgYW5jaG9yIGluIGEgc29ydGVkIGFycmF5IG9yIHRoZSBmYWN0IHRoYXQgYWxsIHJlbWFpbmluZyBpdGVtcyBzZWxmIHJlZmVyZW5jZS5cbiAqIEBwYXJhbSBkZWxheWVkUG9zaXRpb25pbmdJdGVtcyBLZXktdmFsdWUgcGFpciB3aGVyZSB0aGUga2V5IGlzIHRoZSBpdGVtIGFuZCB0aGUgdmFsdWUgaXMgaXRzIHBvc2l0aW9uLlxuICogQHBhcmFtIHNvcnRlZCBUaGUgYXJyYXkgb2Ygc29ydGVkIGtleXMuXG4gKiBAcGFyYW0gcG9zaXRpb25pbmdJdGVtc1xuICogQHBhcmFtIHBvc3NpYmxlQW5jaG9yc1xuICogQHJldHVybnMgUmV0dXJucyB3aGV0aGVyIGFueSBkZWxheWVkUG9zaXRpb25pbmdJdGVtIGNhbiBiZSBwb3NpdGlvbmVkLlxuICovXG5jb25zdCBpc0RlbGF5ZWRJdGVtUG9zaXRpb25hYmxlID0gKFxuXHRkZWxheWVkUG9zaXRpb25pbmdJdGVtczogUmVjb3JkPHN0cmluZywgUG9zaXRpb24+LFxuXHRzb3J0ZWQ6IHN0cmluZ1tdLFxuXHRwb3NpdGlvbmluZ0l0ZW1zOiBSZWNvcmQ8c3RyaW5nLCBQb3NpdGlvbj4sXG5cdHBvc3NpYmxlQW5jaG9yczogc3RyaW5nW11cbik6IGJvb2xlYW4gPT4ge1xuXHRyZXR1cm4gKFxuXHRcdCEhKFxuXHRcdFx0T2JqZWN0LmtleXMoZGVsYXllZFBvc2l0aW9uaW5nSXRlbXMpLmxlbmd0aCAmJlxuXHRcdFx0T2JqZWN0LmtleXMoZGVsYXllZFBvc2l0aW9uaW5nSXRlbXMpXG5cdFx0XHRcdC5tYXAoKGl0ZW1LZXkpID0+IGRlbGF5ZWRQb3NpdGlvbmluZ0l0ZW1zW2l0ZW1LZXldLmFuY2hvciEpXG5cdFx0XHRcdC5zb21lKChkZWxheWVkQW5jaG9yS2V5KSA9PiBzb3J0ZWQuaW5jbHVkZXMoZGVsYXllZEFuY2hvcktleSkpXG5cdFx0KSB8fFxuXHRcdC8vIEZpcnN0IHJlY3Vyc2l2ZSBsb29wIG9ubHlcblx0XHQoT2JqZWN0LmtleXMocG9zaXRpb25pbmdJdGVtcykubGVuZ3RoID09PSBwb3NzaWJsZUFuY2hvcnMubGVuZ3RoICYmXG5cdFx0XHQvLyBPbmx5IGlmIGFsbCBvdGhlcnMgd2VyZSBoYW5kbGVkXG5cdFx0XHRwb3NzaWJsZUFuY2hvcnMubGVuZ3RoIC0gc29ydGVkLmxlbmd0aCA9PT0gT2JqZWN0LmtleXMoZGVsYXllZFBvc2l0aW9uaW5nSXRlbXMpLmxlbmd0aCAmJlxuXHRcdFx0Ly8gQ2hlY2sgZm9yIGNpcmN1bGFyIGRlcGVuZGVuY3lcblx0XHRcdE9iamVjdC5rZXlzKGRlbGF5ZWRQb3NpdGlvbmluZ0l0ZW1zKS5ldmVyeSgoaXRlbUtleSkgPT5cblx0XHRcdFx0T2JqZWN0LmtleXMoZGVsYXllZFBvc2l0aW9uaW5nSXRlbXMpLmluY2x1ZGVzKGRlbGF5ZWRQb3NpdGlvbmluZ0l0ZW1zW2l0ZW1LZXldLmFuY2hvciEpXG5cdFx0XHQpKVxuXHQpO1xufTtcblxuLyoqXG4gKiBSZW9yZGVycyBhIGdpdmVuIGFycmF5IG9mIGVsZW1lbnRzIGJhc2VkIG9uIGEgcHJlZGVmaW5lZCBwb3NpdGlvbmluZyBtYXAuXG4gKlxuICogQHRlbXBsYXRlIFQgQSB0eXBlIHRoYXQgZXh0ZW5kcyB0aGUgQ29uZmlndXJhYmxlT2JqZWN0LlxuICogQHBhcmFtIHJvb3RFbGVtZW50cyBUaGUgaW5pdGlhbCBhcnJheSBvZiBlbGVtZW50cyB0byByZW9yZGVyLlxuICogQHBhcmFtIGl0ZW1zUGVyS2V5IEEgbWFwIG9mIGVsZW1lbnRzIHRvIHJlb3JkZXIsIGtleWVkIGJ5IGFuIGlkZW50aWZpZXIuXG4gKiBAcGFyYW0gcG9zaXRpb25pbmdJdGVtcyBBIG1hcCBkZWZpbmluZyB0aGUgb3JkZXIgb2YgZWxlbWVudHMsIGtleWVkIGJ5IGFuIGlkZW50aWZpZXIuXG4gKiBAcGFyYW0gZW5kRWxlbWVudCBPbmx5IG9uZSBlbGVtZW50IGNhbiBoYXZlIHBvc2l0aW9uIGVuZCBhcyBvZiBub3csIG9ubHkgdXNlZCBmb3IgU3RhbmRhcmRBY3Rpb246OkNhbmNlbFxuICogQHJldHVybnMgQSBuZXcgYXJyYXkgb2YgZWxlbWVudHMsIHJlb3JkZXJlZCBhY2NvcmRpbmcgdG8gdGhlIGdpdmVuIHBvc2l0aW9uaW5nIG1hcC4gTm8gZGVmYXVsdCBwb3NpdGlvbmluZyBpcyBrZXB0LCBvbmx5IHRoZSByb290RWxlbWVudHMgcG9zaXRpb24gY29uZmlndXJhdGlvbiBpcyBrZXB0XG4gKi9cbmNvbnN0IHJlb3JkZXJQb3NpdGlvbmluZ0l0ZW1zID0gPFQgZXh0ZW5kcyBDb25maWd1cmFibGVPYmplY3Q+KFxuXHRyb290RWxlbWVudHM6IFRbXSxcblx0aXRlbXNQZXJLZXk6IFJlY29yZDxzdHJpbmcsIFQ+LFxuXHRwb3NpdGlvbmluZ0l0ZW1zOiBSZWNvcmQ8c3RyaW5nLCBQb3NpdGlvbj4sXG5cdGVuZEVsZW1lbnQ6IFQgfCB1bmRlZmluZWRcbik6IEFycmF5PFQ+ID0+IHtcblx0Y29uc3Qgc29ydGVkS2V5czogc3RyaW5nW10gPSBbXTtcblxuXHQvLyBDYWxjdWxhdGUgaW5pdGlhbCBkZWZhdWx0IGFuY2hvcnMgdG8gcGxhY2UgZWxlbWVudHMgd2l0aG91dCBleHBsaWNpdCBhbmNob3JzXG5cdGNvbnN0IGRlZmF1bHRBbmNob3JzOiB7IGZpcnN0Pzogc3RyaW5nOyBsYXN0Pzogc3RyaW5nIH0gPSB7IGZpcnN0OiB1bmRlZmluZWQsIGxhc3Q6IHVuZGVmaW5lZCB9O1xuXHRkZWZhdWx0QW5jaG9ycy5maXJzdCA9IHJvb3RFbGVtZW50cy5sZW5ndGggPyByb290RWxlbWVudHNbMF0ua2V5IDogdW5kZWZpbmVkO1xuXHRkZWZhdWx0QW5jaG9ycy5sYXN0ID0gcm9vdEVsZW1lbnRzLmxlbmd0aCA/IHJvb3RFbGVtZW50c1tyb290RWxlbWVudHMubGVuZ3RoIC0gMV0ua2V5IDogdW5kZWZpbmVkO1xuXG5cdGNvbnN0IGRlbGF5ZWRQb3NpdGlvbmluZ0l0ZW1zOiBSZWNvcmQ8c3RyaW5nLCBSZXF1aXJlZDxQb3NpdGlvbj4+ID0ge307XG5cdE9iamVjdC5rZXlzKHBvc2l0aW9uaW5nSXRlbXMpLmZvckVhY2goKHBvc2l0aW9uSXRlbUtleSkgPT4ge1xuXHRcdG9yZGVyUG9zaXRpb25pbmdJdGVtUmVjdXJzaXZlbHkocG9zaXRpb25pbmdJdGVtcywgcG9zaXRpb25JdGVtS2V5LCBzb3J0ZWRLZXlzLCBkZWZhdWx0QW5jaG9ycywgZGVsYXllZFBvc2l0aW9uaW5nSXRlbXMsIFtdKTtcblx0fSk7XG5cblx0Y29uc3Qgb3V0RWxlbWVudHMgPSBzb3J0ZWRLZXlzLm1hcCgoa2V5KSA9PiBpdGVtc1BlcktleVtrZXldKTtcblx0Ly8gT25seSBrZWVwIGV4cGxpY2l0bHkgc2V0IHBvc2l0aW9ucywgbmVlZGVkIGZvciB1c2luZyB0aGUgb3V0cHV0IG9mIGluc2VydEN1c3RvbUVsZW1lbnRzIGFzIG5leHQgaW5wdXRcblx0b3V0RWxlbWVudHMuZm9yRWFjaCgoZWxlbWVudCwgaW5kZXgpID0+IHtcblx0XHRpZiAoZWxlbWVudC5wb3NpdGlvbiAmJiAhaXRlbXNQZXJLZXlbZWxlbWVudC5rZXldPy5wb3NpdGlvbikge1xuXHRcdFx0ZGVsZXRlIG91dEVsZW1lbnRzW2luZGV4XS5wb3NpdGlvbjtcblx0XHR9XG5cdH0pO1xuXG5cdGlmIChlbmRFbGVtZW50KSB7XG5cdFx0b3V0RWxlbWVudHMucHVzaChlbmRFbGVtZW50KTtcblx0fVxuXG5cdHJldHVybiBvdXRFbGVtZW50cztcbn07XG5cbi8qKlxuICogRGV0ZXJtaW5lcyB0aGUgaW5zZXJ0aW9uIGluZGV4IGZvciBhbiBpdGVtIGluIGEgc29ydGVkIGFycmF5LCBvciBkZWxheXMgaXRzIHBvc2l0aW9uaW5nIGlmIG5lY2Vzc2FyeS5cbiAqXG4gKiBAcGFyYW0gc29ydGVkIFRoZSBhcnJheSBvZiBzb3J0ZWQga2V5cy5cbiAqIEBwYXJhbSBhbmNob3IgVGhlIGFuY2hvciBzdHJpbmcgcmVsYXRlZCB0byB0aGUgaXRlbS5cbiAqIEBwYXJhbSBhbmNob3JJdGVtIFRoZSBwb3NpdGlvbiBtZXRhZGF0YSBmb3IgdGhlIGl0ZW0gdG8gaW5zZXJ0LlxuICogQHBhcmFtIGRlbGF5ZWRQb3NpdGlvbmluZ0l0ZW1zIEtleS12YWx1ZSBwYWlyIHdoZXJlIHRoZSBrZXkgaXMgdGhlIGl0ZW0gYW5kIHRoZSB2YWx1ZSBpcyBpdHMgcG9zaXRpb24uXG4gKiBAcGFyYW0gcG9zaXRpb25pbmdJdGVtcyBBIG1hcCBkZWZpbmluZyB0aGUgb3JkZXIgb2YgZWxlbWVudHMsIGtleWVkIGJ5IGFuIGlkZW50aWZpZXIuXG4gKiBAcGFyYW0gcG9zc2libGVBbmNob3JzXG4gKiBAcmV0dXJucyBUaGUgaW5kZXggYXQgd2hpY2ggdGhlIGl0ZW0gc2hvdWxkIGJlIGluc2VydGVkIGluIHRoZSBzb3J0ZWQgYXJyYXksIG9yIC0xIGlmIHRoZSBpdGVtJ3MgcG9zaXRpb25pbmcgc2hvdWxkIGJlIGRlbGF5ZWQuXG4gKi9cbmNvbnN0IGdldEluc2VydEluZGV4T3JEZWxheUl0ZW0gPSAoXG5cdHNvcnRlZDogc3RyaW5nW10sXG5cdGFuY2hvcjogc3RyaW5nLFxuXHRhbmNob3JJdGVtOiBQb3NpdGlvbixcblx0ZGVsYXllZFBvc2l0aW9uaW5nSXRlbXM6IFJlY29yZDxzdHJpbmcsIFBvc2l0aW9uPixcblx0cG9zaXRpb25pbmdJdGVtczogUmVjb3JkPHN0cmluZywgUG9zaXRpb24+LFxuXHRwb3NzaWJsZUFuY2hvcnM6IHN0cmluZ1tdXG4pOiBudW1iZXIgPT4ge1xuXHRsZXQgaW5zZXJ0SW5kZXggPSBzb3J0ZWQuaW5kZXhPZihhbmNob3IpO1xuXG5cdC8vIFRha2Ugb3V0IGFuY2hvciwgaWYgaXQncyBjdXJyZW50bHkgd29ya2VkIG9uXG5cdGlmIChPYmplY3Qua2V5cyhkZWxheWVkUG9zaXRpb25pbmdJdGVtcykuaW5jbHVkZXMoYW5jaG9yKSkge1xuXHRcdGRlbGV0ZSBkZWxheWVkUG9zaXRpb25pbmdJdGVtc1thbmNob3JdO1xuXHR9XG5cblx0aWYgKGFuY2hvckl0ZW0gJiYgYW5jaG9ySXRlbS5hbmNob3IgJiYgYW5jaG9yICE9PSBhbmNob3JJdGVtLmFuY2hvciAmJiAhc29ydGVkLmluY2x1ZGVzKGFuY2hvckl0ZW0uYW5jaG9yKSkge1xuXHRcdGRlbGF5ZWRQb3NpdGlvbmluZ0l0ZW1zW2FuY2hvcl0gPSBwb3NpdGlvbmluZ0l0ZW1zW2FuY2hvcl07XG5cdFx0Ly8gU29sdmUgY2lyY3VsYXIgZGVwZW5kZW5jeVxuXHRcdGlmIChcblx0XHRcdE9iamVjdC5rZXlzKGRlbGF5ZWRQb3NpdGlvbmluZ0l0ZW1zKS5sZW5ndGggJiZcblx0XHRcdCFPYmplY3Qua2V5cyhkZWxheWVkUG9zaXRpb25pbmdJdGVtcykuc29tZSgoaXRlbUtleSkgPT4gc29ydGVkLmluY2x1ZGVzKGRlbGF5ZWRQb3NpdGlvbmluZ0l0ZW1zW2l0ZW1LZXldLmFuY2hvciEpKSAmJlxuXHRcdFx0cG9zc2libGVBbmNob3JzLmxlbmd0aCAtIHNvcnRlZC5sZW5ndGggPT09IE9iamVjdC5rZXlzKGRlbGF5ZWRQb3NpdGlvbmluZ0l0ZW1zKS5sZW5ndGhcblx0XHQpIHtcblx0XHRcdGNvbnN0IGFkZGVkQW5jaG9yID0gc2V0Rmlyc3RBbmNob3Ioc29ydGVkLCBkZWxheWVkUG9zaXRpb25pbmdJdGVtcyk7XG5cdFx0XHRkZWxldGUgZGVsYXllZFBvc2l0aW9uaW5nSXRlbXNbYWRkZWRBbmNob3JdO1xuXHRcdH0gZWxzZSB7XG5cdFx0XHRyZXR1cm4gLTE7XG5cdFx0fVxuXHR9IGVsc2UgaWYgKGFuY2hvciA9PT0gYW5jaG9ySXRlbS5hbmNob3IpIHtcblx0XHQvLyBBbmNob3IgcmVmZXJlbmNlcyBpdHNlbGZcblx0XHRpbnNlcnRJbmRleCA9IHNvcnRlZC5sZW5ndGg7XG5cdH0gZWxzZSB7XG5cdFx0aW5zZXJ0SW5kZXggPSBzb3J0ZWQuaW5kZXhPZihhbmNob3JJdGVtLmFuY2hvciEpO1xuXHRcdGlmIChhbmNob3JJdGVtLnBsYWNlbWVudCA9PT0gUGxhY2VtZW50LkFmdGVyKSB7XG5cdFx0XHRpbnNlcnRJbmRleCsrO1xuXHRcdH1cblx0fVxuXHRyZXR1cm4gaW5zZXJ0SW5kZXg7XG59O1xuXG4vKipcbiAqIFJlY3Vyc2l2ZSBtZXRob2QgdGhhdCBvcmRlciB0aGUga2V5cyBiYXNlZCBvbiBhIHBvc2l0aW9uIGluZm9ybWF0aW9uLlxuICpcbiAqIEBwYXJhbSBwb3NpdGlvbmluZ0l0ZW1zIEEgbWFwIGRlZmluaW5nIHRoZSBvcmRlciBvZiBlbGVtZW50cywga2V5ZWQgYnkgYW4gaWRlbnRpZmllci5cbiAqIEBwYXJhbSBhbmNob3IgVGhlIGFuY2hvciBzdHJpbmcgcmVsYXRlZCB0byB0aGUgaXRlbS5cbiAqIEBwYXJhbSBzb3J0ZWQgVGhlIGFycmF5IG9mIHNvcnRlZCBrZXlzLlxuICogQHBhcmFtIGRlZmF1bHRBbmNob3JzIERlZmF1bHQgYW5jaG9ycyB1c2VkIHRvIHBsYWNlIGVsZW1lbnRzIHdpdGhvdXQgZXhwbGljaXQgYW5jaG9yc1xuICogQHBhcmFtIGRlZmF1bHRBbmNob3JzLmZpcnN0XG4gKiBAcGFyYW0gZGVmYXVsdEFuY2hvcnMubGFzdFxuICogQHBhcmFtIGRlbGF5ZWRQb3NpdGlvbmluZ0l0ZW1zIEtleS12YWx1ZSBwYWlyIHdoZXJlIHRoZSBrZXkgaXMgdGhlIGl0ZW0gYW5kIHRoZSB2YWx1ZSBpcyBpdHMgcG9zaXRpb24uXG4gKiBAcGFyYW0gcG9zc2libGVBbmNob3JzIEZvciByZWN1cnNpdmUgYWRkaXRpb24gb2YgZGVsYXllZCBjdXN0b20gZWxlbWVudHNcbiAqL1xuY29uc3Qgb3JkZXJQb3NpdGlvbmluZ0l0ZW1SZWN1cnNpdmVseSA9IChcblx0cG9zaXRpb25pbmdJdGVtczogUmVjb3JkPHN0cmluZywgUG9zaXRpb24+LFxuXHRhbmNob3I6IHN0cmluZyxcblx0c29ydGVkOiBzdHJpbmdbXSxcblx0ZGVmYXVsdEFuY2hvcnM6IHsgZmlyc3Q/OiBzdHJpbmc7IGxhc3Q/OiBzdHJpbmcgfSxcblx0ZGVsYXllZFBvc2l0aW9uaW5nSXRlbXM6IFJlY29yZDxzdHJpbmcsIFBvc2l0aW9uPixcblx0cG9zc2libGVBbmNob3JzOiBzdHJpbmdbXVxuKTogdm9pZCA9PiB7XG5cdGlmIChpc0FscmVhZHlQb3NpdGlvbmVkKGFuY2hvciwgc29ydGVkKSkge1xuXHRcdHJldHVybjtcblx0fVxuXHRjb25zdCBhbmNob3JJdGVtID0gcG9zaXRpb25pbmdJdGVtc1thbmNob3JdO1xuXHRwb3NzaWJsZUFuY2hvcnMgPSBwb3NzaWJsZUFuY2hvcnMubGVuZ3RoID8gcG9zc2libGVBbmNob3JzIDogT2JqZWN0LmtleXMocG9zaXRpb25pbmdJdGVtcyk7IC8vIFBhc3MgaW4gYWxsIHBvc3NpYmxlIGFuY2hvcnMgaW5kZXBlbmRlbnQgb2YgcmVjdXJzaW9uIGxldmVsXG5cblx0Ly8gQ29uZmlndXJhdGlvbiBtaXN0YWtlc1xuXHRpZiAoYW5jaG9ySXRlbS5hbmNob3IgJiYgIU9iamVjdC5rZXlzKHBvc2l0aW9uaW5nSXRlbXMpLmluY2x1ZGVzKGFuY2hvckl0ZW0uYW5jaG9yKSAmJiAhcG9zc2libGVBbmNob3JzLmluY2x1ZGVzKGFuY2hvckl0ZW0uYW5jaG9yKSkge1xuXHRcdExvZy53YXJuaW5nKFxuXHRcdFx0YFBvc2l0aW9uIGFuY2hvciAnJHthbmNob3JJdGVtLmFuY2hvcn0nIG5vdCBmb3VuZCBmb3IgaXRlbSAnJHthbmNob3J9Jy4gUGxlYXNlIGNoZWNrIHNldHRpbmdzLiBEZWZhdWx0aW5nIGFzIGlmIG5vIEFuY2hvciB3YXMgc2V0LmBcblx0XHQpO1xuXHRcdC8vRGVmYXVsdGluZyBpbiBjYXNlIG9mIG1pc2NvbmZpZ3VyYXRpb25cblx0XHRwb3NpdGlvbmluZ0l0ZW1zW2FuY2hvcl0uYW5jaG9yID0gYW5jaG9yO1xuXHRcdGFuY2hvckl0ZW0uYW5jaG9yID0gYW5jaG9yO1xuXHR9XG5cblx0Ly8gR2VuZXJhbCBkZWZhdWx0aW5nXG5cdGlmICghYW5jaG9ySXRlbS5hbmNob3IpIHtcblx0XHRhbmNob3JJdGVtLmFuY2hvciA9IGFuY2hvckl0ZW0ucGxhY2VtZW50ID09PSBQbGFjZW1lbnQuQWZ0ZXIgPyBkZWZhdWx0QW5jaG9ycy5sYXN0IDogZGVmYXVsdEFuY2hvcnMuZmlyc3Q7XG5cdFx0Ly8gVGhlcmUgaXMgbm8gcG9zc2libGUgcmVmZXJlbmNlIGFuY2hvciB5ZXQgdG8gYWxpZ24gdG9cblx0XHRpZiAoYW5jaG9ySXRlbS5hbmNob3IgPT09IHVuZGVmaW5lZCkge1xuXHRcdFx0c2V0Rmlyc3RBbmNob3Ioc29ydGVkLCB7IFthbmNob3JdOiBhbmNob3JJdGVtIH0pO1xuXHRcdH1cblx0fVxuXG5cdC8vIElmIGFuY2hvciBpdGVtIGNhbm5vdCBiZSBhc3NpZ25lZCB5ZXQsIGRlbGF5IGl0LCBvdGhlcndpc2UgZ2V0IGluc2VydEluZGV4IGFjY29yZGluZyB0byBjb25maWd1cmF0aW9uXG5cdGNvbnN0IGluc2VydEluZGV4ID0gZ2V0SW5zZXJ0SW5kZXhPckRlbGF5SXRlbShzb3J0ZWQsIGFuY2hvciwgYW5jaG9ySXRlbSwgZGVsYXllZFBvc2l0aW9uaW5nSXRlbXMsIHBvc2l0aW9uaW5nSXRlbXMsIHBvc3NpYmxlQW5jaG9ycyk7XG5cblx0aWYgKGlzUG9zaXRpb25hYmxlKGluc2VydEluZGV4LCBhbmNob3IsIHNvcnRlZCkpIHtcblx0XHRzb3J0ZWQuc3BsaWNlKGluc2VydEluZGV4LCAwLCBhbmNob3IpO1xuXHR9XG5cblx0Ly8gTWFrZSBzdXJlIHRoYXQgdGhlIG5leHQgZWxlbWVudCB3aXRob3V0IGFuIGFuY2hvciBpcyBwbGFjZWQgYWZ0ZXIgdGhlIG5ldyBsYXN0IG9uZSB0byBwcmV2ZW50IHJldmVyc2luZyB0aGUgbGlzdCBvcmRlclxuXHRkZWZhdWx0QW5jaG9ycy5sYXN0ID0gc29ydGVkW3NvcnRlZC5sZW5ndGggLSAxXTtcblxuXHQvLyBFdmVyeSB0aW1lIHdlIHN1Y2Nlc3NmdWxseSBhZGRlZCBvbiBpdGVtIHdlIGNoZWNrIGZvciB0aG9zZSB3ZSBjb3VsZCBub3QgYWRkIHNvIGZhciwgYW5kIGFkZCB0aGVtIGlmIHRoZXkgaGF2ZSBhIHJlZmVyZW5jZSBub3dcblx0aWYgKFxuXHRcdE9iamVjdC5rZXlzKGRlbGF5ZWRQb3NpdGlvbmluZ0l0ZW1zKS5sZW5ndGggJiZcblx0XHRpc0RlbGF5ZWRJdGVtUG9zaXRpb25hYmxlKGRlbGF5ZWRQb3NpdGlvbmluZ0l0ZW1zLCBzb3J0ZWQsIHBvc2l0aW9uaW5nSXRlbXMsIHBvc3NpYmxlQW5jaG9ycylcblx0KSB7XG5cdFx0T2JqZWN0LmtleXMoZGVsYXllZFBvc2l0aW9uaW5nSXRlbXMpLmZvckVhY2goKHBvc2l0aW9uSXRlbUtleSkgPT4ge1xuXHRcdFx0b3JkZXJQb3NpdGlvbmluZ0l0ZW1SZWN1cnNpdmVseShcblx0XHRcdFx0eyAuLi5kZWxheWVkUG9zaXRpb25pbmdJdGVtcyB9LFxuXHRcdFx0XHRwb3NpdGlvbkl0ZW1LZXksXG5cdFx0XHRcdHNvcnRlZCxcblx0XHRcdFx0ZGVmYXVsdEFuY2hvcnMsXG5cdFx0XHRcdGRlbGF5ZWRQb3NpdGlvbmluZ0l0ZW1zLFxuXHRcdFx0XHRwb3NzaWJsZUFuY2hvcnNcblx0XHRcdCk7XG5cdFx0fSk7XG5cdH1cbn07XG5cbmV4cG9ydCBlbnVtIE92ZXJyaWRlVHlwZSB7XG5cdG1lcmdlID0gXCJtZXJnZVwiLFxuXHRvdmVyd3JpdGUgPSBcIm92ZXJ3cml0ZVwiLFxuXHRpZ25vcmUgPSBcImlnbm9yZVwiXG59XG50eXBlIEFycmF5T3ZlcnJpZGVUeXBlPEFycmF5VHlwZT4gPSBPdmVycmlkZUtleXM8QXJyYXlUeXBlPjtcblxudHlwZSBFbGVtZW50VHlwZTxUPiA9IFQgZXh0ZW5kcyB1bmtub3duW10gPyBUW251bWJlcl0gOiBUO1xudHlwZSBPdmVycmlkZUtleXM8VD4gPSB7XG5cdFtQIGluIGtleW9mIFRdPzogT3ZlcnJpZGVUeXBlIHwgQXJyYXlPdmVycmlkZVR5cGU8RWxlbWVudFR5cGU8VFtQXT4+O1xufTtcblxuZnVuY3Rpb24gaXNBcnJheUNvbmZpZzxUPihjb25maWc6IE92ZXJyaWRlVHlwZSB8IEFycmF5T3ZlcnJpZGVUeXBlPFQ+IHwgdW5kZWZpbmVkKTogY29uZmlnIGlzIEFycmF5T3ZlcnJpZGVUeXBlPFQ+IHtcblx0cmV0dXJuIHR5cGVvZiBjb25maWcgPT09IFwib2JqZWN0XCI7XG59XG5cbmZ1bmN0aW9uIGFwcGx5T3ZlcnJpZGU8VCBleHRlbmRzIENvbmZpZ3VyYWJsZU9iamVjdD4oXG5cdG92ZXJ3cml0YWJsZUtleXM6IE92ZXJyaWRlS2V5czxUPixcblx0c291cmNlSXRlbTogVCB8IG51bGwsXG5cdGN1c3RvbUVsZW1lbnQ6IEN1c3RvbUVsZW1lbnQ8VD5cbik6IFQge1xuXHRjb25zdCBvdXRJdGVtOiBUID0gc291cmNlSXRlbSB8fCAoY3VzdG9tRWxlbWVudCBhcyBUKTtcblx0Zm9yIChjb25zdCBvdmVyd3JpdGFibGVLZXkgaW4gb3ZlcndyaXRhYmxlS2V5cykge1xuXHRcdGlmIChPYmplY3QuaGFzT3duUHJvcGVydHkuY2FsbChvdmVyd3JpdGFibGVLZXlzLCBvdmVyd3JpdGFibGVLZXkpKSB7XG5cdFx0XHRjb25zdCBvdmVycmlkZUNvbmZpZyA9IG92ZXJ3cml0YWJsZUtleXNbb3ZlcndyaXRhYmxlS2V5XTtcblx0XHRcdGlmIChzb3VyY2VJdGVtICE9PSBudWxsKSB7XG5cdFx0XHRcdHN3aXRjaCAob3ZlcnJpZGVDb25maWcpIHtcblx0XHRcdFx0XHRjYXNlIFwib3ZlcndyaXRlXCI6XG5cdFx0XHRcdFx0XHRpZiAoY3VzdG9tRWxlbWVudC5oYXNPd25Qcm9wZXJ0eShvdmVyd3JpdGFibGVLZXkpICYmIGN1c3RvbUVsZW1lbnRbb3ZlcndyaXRhYmxlS2V5XSAhPT0gdW5kZWZpbmVkKSB7XG5cdFx0XHRcdFx0XHRcdHNvdXJjZUl0ZW1bb3ZlcndyaXRhYmxlS2V5XSA9IGN1c3RvbUVsZW1lbnRbb3ZlcndyaXRhYmxlS2V5XSBhcyBUW3R5cGVvZiBvdmVyd3JpdGFibGVLZXldO1xuXHRcdFx0XHRcdFx0fVxuXHRcdFx0XHRcdFx0YnJlYWs7XG5cdFx0XHRcdFx0Y2FzZSBcIm1lcmdlXCI6XG5cdFx0XHRcdFx0ZGVmYXVsdDpcblx0XHRcdFx0XHRcdGNvbnN0IHN1Ykl0ZW0gPSBzb3VyY2VJdGVtW292ZXJ3cml0YWJsZUtleV0gfHwgKFtdIGFzIENvbmZpZ3VyYWJsZU9iamVjdFtdKTtcblx0XHRcdFx0XHRcdGxldCBzdWJDb25maWcgPSB7fTtcblx0XHRcdFx0XHRcdGlmIChpc0FycmF5Q29uZmlnKG92ZXJyaWRlQ29uZmlnKSkge1xuXHRcdFx0XHRcdFx0XHRzdWJDb25maWcgPSBvdmVycmlkZUNvbmZpZztcblx0XHRcdFx0XHRcdH1cblx0XHRcdFx0XHRcdGlmIChBcnJheS5pc0FycmF5KHN1Ykl0ZW0pKSB7XG5cdFx0XHRcdFx0XHRcdHNvdXJjZUl0ZW1bb3ZlcndyaXRhYmxlS2V5XSA9IGluc2VydEN1c3RvbUVsZW1lbnRzKFxuXHRcdFx0XHRcdFx0XHRcdHN1Ykl0ZW0sXG5cdFx0XHRcdFx0XHRcdFx0KGN1c3RvbUVsZW1lbnQgJiYgY3VzdG9tRWxlbWVudFtvdmVyd3JpdGFibGVLZXldKSB8fCB7fSxcblx0XHRcdFx0XHRcdFx0XHRzdWJDb25maWdcblx0XHRcdFx0XHRcdFx0KSBhcyBUW3R5cGVvZiBvdmVyd3JpdGFibGVLZXldO1xuXHRcdFx0XHRcdFx0fVxuXHRcdFx0XHRcdFx0YnJlYWs7XG5cdFx0XHRcdH1cblx0XHRcdH0gZWxzZSB7XG5cdFx0XHRcdHN3aXRjaCAob3ZlcnJpZGVDb25maWcpIHtcblx0XHRcdFx0XHRjYXNlIFwib3ZlcndyaXRlXCI6XG5cdFx0XHRcdFx0XHRpZiAoY3VzdG9tRWxlbWVudC5oYXNPd25Qcm9wZXJ0eShvdmVyd3JpdGFibGVLZXkpICYmIGN1c3RvbUVsZW1lbnRbb3ZlcndyaXRhYmxlS2V5XSAhPT0gdW5kZWZpbmVkKSB7XG5cdFx0XHRcdFx0XHRcdG91dEl0ZW1bb3ZlcndyaXRhYmxlS2V5XSA9IGN1c3RvbUVsZW1lbnRbb3ZlcndyaXRhYmxlS2V5XSBhcyBUW3R5cGVvZiBvdmVyd3JpdGFibGVLZXldO1xuXHRcdFx0XHRcdFx0fVxuXHRcdFx0XHRcdFx0YnJlYWs7XG5cdFx0XHRcdFx0Y2FzZSBcIm1lcmdlXCI6XG5cdFx0XHRcdFx0ZGVmYXVsdDpcblx0XHRcdFx0XHRcdGxldCBzdWJDb25maWcgPSB7fTtcblx0XHRcdFx0XHRcdGlmIChpc0FycmF5Q29uZmlnKG92ZXJyaWRlQ29uZmlnKSkge1xuXHRcdFx0XHRcdFx0XHRzdWJDb25maWcgPSBvdmVycmlkZUNvbmZpZztcblx0XHRcdFx0XHRcdH1cblx0XHRcdFx0XHRcdG91dEl0ZW1bb3ZlcndyaXRhYmxlS2V5XSA9IGluc2VydEN1c3RvbUVsZW1lbnRzKFxuXHRcdFx0XHRcdFx0XHRbXSBhcyBDb25maWd1cmFibGVPYmplY3RbXSxcblx0XHRcdFx0XHRcdFx0KGN1c3RvbUVsZW1lbnQgJiYgY3VzdG9tRWxlbWVudFtvdmVyd3JpdGFibGVLZXldKSB8fCB7fSxcblx0XHRcdFx0XHRcdFx0c3ViQ29uZmlnXG5cdFx0XHRcdFx0XHQpIGFzIFRbdHlwZW9mIG92ZXJ3cml0YWJsZUtleV07XG5cdFx0XHRcdFx0XHRicmVhaztcblx0XHRcdFx0fVxuXHRcdFx0fVxuXHRcdH1cblx0fVxuXHRyZXR1cm4gb3V0SXRlbTtcbn1cblxuLyoqXG4gKiBJbnNlcnQgYSBzZXQgb2YgY3VzdG9tIGVsZW1lbnRzIGluIHRoZSByaWdodCBwb3NpdGlvbiBpbiBhbiBvcmlnaW5hbCBjb2xsZWN0aW9uLlxuICpcbiAqIFBhcmFtZXRlcnMgZm9yIG92ZXJ3cml0YWJsZUtleXMgYW5kIHRoZWlyIGltcGxpY2F0aW9uczpcbiAqIFwib3ZlcndyaXRlXCI6IFRoZSB3aG9sZSBvYmplY3QgZ2V0cyBvdmVyd3JpdHRlbiAtIGlmIHRoZSBjdXN0b21FbGVtZW50cyBpbmNsdWRlIGEgZGVmYXVsdCwgdGhpcyB3aWxsIG92ZXJydWxlIHRoZSB3aG9sZSByb290RWxlbWVudHMgY29uZmlndXJhdGlvbi5cbiAqIFwibWVyZ2VcIjogVGhpcyBpcyBzaW1pbGFyIHRvIGNhbGxpbmcgaW5zZXJ0Q3VzdG9tRWxlbWVudHMgaXRzZWxmLiBZb3UgbXVzdCBpbmNsdWRlIHRoZVxuICogZnVsbCBDdXN0b21FbGVtZW50IHN5bnRheCB3aXRoaW4gdGhlIGN1c3RvbUVsZW1lbnRzLCBpbmNsdWRpbmcgYW5jaG9ycywgZm9yIGV4YW1wbGUuXG4gKiBcImlnbm9yZVwiOiBUaGVyZSBhcmUgbm8gYWRkaXRpb25zIGFuZCBubyBjb21iaW5hdGlvbnMuIE9ubHkgdGhlIHJvb3RFbGVtZW50cyBvYmplY3QgaXMgdXNlZC5cbiAqXG4gKiBOb3RlIC0gUHJvY2VlZCBhcyBmb2xsb3dzIGluIGNhc2UgeW91IGhhdmUgZGVmaW5lZCBjdXN0b21FbGVtZW50cyBhbmQgZG8gbm90IHdhbnQgdG8gb3ZlcndyaXRlIHRoZWlyIHZhbHVlcyB3aXRoIGRlZmF1bHRzOlxuICogSGFuZCB0aGUgcm9vdEVsZW1lbnRzIGludG8gdGhlIGNyZWF0aW9uIGZ1bmN0aW9uIG9mIHRoZSBjdXN0b21FbGVtZW50LlxuICogRGVwZW5kaW5nIG9uIHRoZSBleGlzdGVuY2Ugb2YgYm90aCByb290RWxlbWVudC1jb25maWd1cmF0aW9uIGFuZCBjdXN0b21FbGVtZW50LWNvbmZpZ3VyYXRpb24sXG4gKiB5b3UgbXVzdCBzZXQgdGhlIGN1c3RvbUVsZW1lbnRzIHByb3BlcnR5LCBmb3Igd2hpY2ggdGhlIFwib3ZlcndyaXRlXCItcHJvcGVydHkgaXMgc2V0LCBleHBsaWNpdGx5IHRvIHVuZGVmaW5lZC5cbiAqXG4gKiBAdGVtcGxhdGUgVFxuICogQHBhcmFtIHJvb3RFbGVtZW50cyBBIGxpc3Qgb2YgXCJDb25maWd1cmFibGVPYmplY3RcIiB3aGljaCBtZWFucyBvYmplY3QgdGhhdCBoYXZlIGEgdW5pcXVlIFwia2V5XCJcbiAqIEBwYXJhbSBjdXN0b21FbGVtZW50cyBBbiBvYmplY3QgY29udGFpbmluZyBleHRyYSBvYmplY3QgdG8gYWRkLCB0aGV5IGFyZSBpbmRleGVkIGJ5IGEga2V5IGFuZCBoYXZlIGEgXCJwb3NpdGlvblwiIG9iamVjdFxuICogQHBhcmFtIG92ZXJ3cml0YWJsZUtleXMgVGhlIGxpc3Qgb2Yga2V5cyBmcm9tIHRoZSBvcmlnaW5hbCBvYmplY3QgdGhhdCBjYW4gYmUgb3ZlcndyaXR0ZW4gaW4gY2FzZSBhIGN1c3RvbSBlbGVtZW50IGhhcyB0aGUgc2FtZSBcImtleVwiXG4gKiBAcmV0dXJucyBBbiBvcmRlcmVkIGFycmF5IG9mIGVsZW1lbnRzIGluY2x1ZGluZyB0aGUgY3VzdG9tIG9uZXNcbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGluc2VydEN1c3RvbUVsZW1lbnRzPFQgZXh0ZW5kcyBDb25maWd1cmFibGVPYmplY3Q+KFxuXHRyb290RWxlbWVudHM6IFRbXSxcblx0Y3VzdG9tRWxlbWVudHM6IFJlY29yZDxzdHJpbmcsIEN1c3RvbUVsZW1lbnQ8VD4+LFxuXHRvdmVyd3JpdGFibGVLZXlzOiBPdmVycmlkZUtleXM8VD4gPSB7fVxuKTogVFtdIHtcblx0bGV0IGVuZEVsZW1lbnQ6IFQgfCB1bmRlZmluZWQ7XG5cdGNvbnN0IHBvc2l0aW9uaW5nSXRlbXM6IFJlY29yZDxzdHJpbmcsIFJlcXVpcmVkPFBvc2l0aW9uPj4gPSB7fTtcblx0Y29uc3QgaXRlbXNQZXJLZXk6IFJlY29yZDxzdHJpbmcsIFQ+ID0ge307XG5cblx0Ly8gQ3JlYXRpb24gb2YgaW5pdGlhbCBsaXN0XG5cdHJvb3RFbGVtZW50cy5mb3JFYWNoKChyb290RWxlbWVudCkgPT4ge1xuXHRcdGlmIChyb290RWxlbWVudC5wb3NpdGlvbj8ucGxhY2VtZW50ID09PSBQbGFjZW1lbnQuRW5kICYmICFlbmRFbGVtZW50KSB7XG5cdFx0XHRlbmRFbGVtZW50ID0gcm9vdEVsZW1lbnQ7XG5cdFx0fSBlbHNlIHtcblx0XHRcdHBvc2l0aW9uaW5nSXRlbXNbcm9vdEVsZW1lbnQua2V5XSA9IHtcblx0XHRcdFx0YW5jaG9yOiByb290RWxlbWVudC5wb3NpdGlvbj8uYW5jaG9yIHx8IHJvb3RFbGVtZW50LmtleSxcblx0XHRcdFx0cGxhY2VtZW50OiByb290RWxlbWVudC5wb3NpdGlvbj8ucGxhY2VtZW50IHx8IFBsYWNlbWVudC5BZnRlclxuXHRcdFx0fTtcblx0XHR9XG5cdFx0aXRlbXNQZXJLZXlbcm9vdEVsZW1lbnQua2V5XSA9IHJvb3RFbGVtZW50O1xuXHR9KTtcblxuXHQvLyBPdmVycmlkaW5nIG9mIHByb3BlcnRpZXMgdGhyb3VnaCBjdXN0b21FbGVtZW50cywgZGVwZW5kaW5nIG9uIG92ZXJ3cml0YWJsZUtleXNcblx0T2JqZWN0LmtleXMoY3VzdG9tRWxlbWVudHMpLmZvckVhY2goKGN1c3RvbUVsZW1lbnRLZXkpID0+IHtcblx0XHRjb25zdCBjdXN0b21FbGVtZW50ID0gY3VzdG9tRWxlbWVudHNbY3VzdG9tRWxlbWVudEtleV07XG5cdFx0Y29uc3QgYW5jaG9yID0gY3VzdG9tRWxlbWVudC5wb3NpdGlvbi5hbmNob3I7XG5cdFx0Ly8gSWYgbm8gcGxhY2VtZW50IGRlZmluZWQgd2UgYXJlIEFmdGVyXG5cdFx0aWYgKCFjdXN0b21FbGVtZW50LnBvc2l0aW9uLnBsYWNlbWVudCkge1xuXHRcdFx0Y3VzdG9tRWxlbWVudC5wb3NpdGlvbi5wbGFjZW1lbnQgPSBQbGFjZW1lbnQuQWZ0ZXI7XG5cdFx0fVxuXG5cdFx0Y29uc3QgYWRqdXN0ZWRDdXN0b21FbGVtZW50S2V5ID0gY3VzdG9tRWxlbWVudC5rZXkgYXMga2V5b2YgUmVjb3JkPHN0cmluZywgVD47XG5cdFx0aWYgKGl0ZW1zUGVyS2V5W2FkanVzdGVkQ3VzdG9tRWxlbWVudEtleV0pIHtcblx0XHRcdGl0ZW1zUGVyS2V5W2FkanVzdGVkQ3VzdG9tRWxlbWVudEtleV0gPSBhcHBseU92ZXJyaWRlKG92ZXJ3cml0YWJsZUtleXMsIGl0ZW1zUGVyS2V5W2FkanVzdGVkQ3VzdG9tRWxlbWVudEtleV0sIGN1c3RvbUVsZW1lbnQpO1xuXG5cdFx0XHQvL1Bvc2l0aW9uIGlzIG92ZXJ3cml0dGVuIGZvciBmaWx0ZXIgZmllbGRzIGlmIHRoZXJlIGlzIGEgY2hhbmdlIGluIG1hbmlmZXN0XG5cdFx0XHRpZiAoYW5jaG9yICYmIGN1c3RvbUVsZW1lbnQucG9zaXRpb24gJiYgb3ZlcndyaXRhYmxlS2V5cy5wb3NpdGlvbiAmJiBvdmVyd3JpdGFibGVLZXlzLnBvc2l0aW9uID09PSBcIm92ZXJ3cml0ZVwiKSB7XG5cdFx0XHRcdHBvc2l0aW9uaW5nSXRlbXNbYWRqdXN0ZWRDdXN0b21FbGVtZW50S2V5XSA9IGl0ZW1zUGVyS2V5W2FkanVzdGVkQ3VzdG9tRWxlbWVudEtleV0ucG9zaXRpb24gYXMgUmVxdWlyZWQ8UG9zaXRpb24+O1xuXHRcdFx0fVxuXHRcdFx0LyoqXG5cdFx0XHQgKiBhbmNob3IgY2hlY2sgaXMgYWRkZWQgdG8gbWFrZSBzdXJlIGNoYW5nZSBpbiBwcm9wZXJ0aWVzIGluIHRoZSBtYW5pZmVzdCBkb2VzIG5vdCBhZmZlY3QgdGhlIHBvc2l0aW9uIG9mIHRoZSBmaWVsZC5cblx0XHRcdCAqIE90aGVyd2lzZSwgd2hlbiBubyBwb3NpdGlvbiBpcyBtZW50aW9uZWQgaW4gbWFuaWZlc3QgZm9yIGFuIGFsdGVyZWQgZmllbGQsIHRoZSBwb3NpdGlvbiBpcyBjaGFuZ2VkIGFzXG5cdFx0XHQgKiBwZXIgdGhlIHBvdGVudGlhbCBhbmNob3Jcblx0XHRcdCAqL1xuXHRcdH0gZWxzZSB7XG5cdFx0XHRpdGVtc1BlcktleVthZGp1c3RlZEN1c3RvbUVsZW1lbnRLZXldID0gYXBwbHlPdmVycmlkZShvdmVyd3JpdGFibGVLZXlzLCBudWxsLCBjdXN0b21FbGVtZW50KTtcblx0XHRcdHBvc2l0aW9uaW5nSXRlbXNbYWRqdXN0ZWRDdXN0b21FbGVtZW50S2V5XSA9IGN1c3RvbUVsZW1lbnQucG9zaXRpb24gYXMgUmVxdWlyZWQ8UG9zaXRpb24+O1xuXHRcdH1cblx0fSk7XG5cblx0cmV0dXJuIHJlb3JkZXJQb3NpdGlvbmluZ0l0ZW1zKHJvb3RFbGVtZW50cywgaXRlbXNQZXJLZXksIHBvc2l0aW9uaW5nSXRlbXMsIGVuZEVsZW1lbnQpO1xufVxuIl0sIm1hcHBpbmdzIjoiO0FBQUE7QUFBQTtBQUFBOzs7OztNQU9ZQSxTQUFTO0VBQUEsV0FBVEEsU0FBUztJQUFUQSxTQUFTO0lBQVRBLFNBQVM7SUFBVEEsU0FBUztFQUFBLEdBQVRBLFNBQVMsS0FBVEEsU0FBUztFQUFBO0VBeUJyQjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0VBQ0EsTUFBTUMsY0FBYyxHQUFHLFVBQVVDLE1BQWdCLEVBQUVDLHVCQUFpRCxFQUFVO0lBQzdHLElBQUlDLFdBQVc7SUFDZjtJQUNBO0lBQ0E7SUFDQTtJQUNBLE1BQU1DLHNCQUFzQixHQUFHQyxNQUFNLENBQUNDLElBQUksQ0FBQ0osdUJBQXVCLENBQUMsQ0FBQ0ssTUFBTSxDQUN4RUMseUJBQXlCLElBQUtOLHVCQUF1QixDQUFDTSx5QkFBeUIsQ0FBQyxDQUFDQyxTQUFTLEtBQUtWLFNBQVMsQ0FBQ1csTUFBTSxDQUNoSDtJQUNELElBQUlOLHNCQUFzQixDQUFDTyxNQUFNLEdBQUcsQ0FBQyxFQUFFO01BQ3RDO01BQ0EsTUFBTUMsb0JBQW9CLEdBQUdSLHNCQUFzQixDQUFDUyxJQUFJLENBQ3RETCx5QkFBeUIsSUFBSyxDQUFDSixzQkFBc0IsQ0FBQ1UsUUFBUSxDQUFDWix1QkFBdUIsQ0FBQ00seUJBQXlCLENBQUMsQ0FBQ08sTUFBTSxDQUFFLENBQzNIO01BQ0RaLFdBQVcsR0FBR1Msb0JBQW9CLElBQUlSLHNCQUFzQixDQUFDLENBQUMsQ0FBQztJQUNoRSxDQUFDLE1BQU0sSUFBSUEsc0JBQXNCLENBQUNPLE1BQU0sRUFBRTtNQUN6Q1IsV0FBVyxHQUFHQyxzQkFBc0IsQ0FBQyxDQUFDLENBQUM7SUFDeEMsQ0FBQyxNQUFNO01BQ05ELFdBQVcsR0FBR0UsTUFBTSxDQUFDQyxJQUFJLENBQUNKLHVCQUF1QixDQUFDLENBQUMsQ0FBQyxDQUFDO0lBQ3REO0lBQ0FELE1BQU0sQ0FBQ2UsSUFBSSxDQUFDYixXQUFXLENBQUM7SUFDeEIsT0FBT0EsV0FBVztFQUNuQixDQUFDOztFQUVEO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtFQUNBLE1BQU1jLG1CQUFtQixHQUFHLENBQUNGLE1BQWMsRUFBRWQsTUFBZ0IsS0FBYztJQUMxRSxPQUFPQSxNQUFNLENBQUNhLFFBQVEsQ0FBQ0MsTUFBTSxDQUFDO0VBQy9CLENBQUM7O0VBRUQ7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7RUFDQSxNQUFNRyxjQUFjLEdBQUcsQ0FBQ0MsV0FBbUIsRUFBRUosTUFBYyxFQUFFZCxNQUFnQixLQUFjO0lBQzFGLElBQUlrQixXQUFXLEtBQUssQ0FBQyxDQUFDLEVBQUU7TUFDdkIsT0FBTyxLQUFLO0lBQ2I7SUFDQSxPQUFPLENBQUNGLG1CQUFtQixDQUFDRixNQUFNLEVBQUVkLE1BQU0sQ0FBQztFQUM1QyxDQUFDOztFQUVEO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7RUFDQSxNQUFNbUIseUJBQXlCLEdBQUcsQ0FDakNsQix1QkFBaUQsRUFDakRELE1BQWdCLEVBQ2hCb0IsZ0JBQTBDLEVBQzFDQyxlQUF5QixLQUNaO0lBQ2IsT0FDQyxDQUFDLEVBQ0FqQixNQUFNLENBQUNDLElBQUksQ0FBQ0osdUJBQXVCLENBQUMsQ0FBQ1MsTUFBTSxJQUMzQ04sTUFBTSxDQUFDQyxJQUFJLENBQUNKLHVCQUF1QixDQUFDLENBQ2xDcUIsR0FBRyxDQUFFQyxPQUFPLElBQUt0Qix1QkFBdUIsQ0FBQ3NCLE9BQU8sQ0FBQyxDQUFDVCxNQUFPLENBQUMsQ0FDMURVLElBQUksQ0FBRUMsZ0JBQWdCLElBQUt6QixNQUFNLENBQUNhLFFBQVEsQ0FBQ1ksZ0JBQWdCLENBQUMsQ0FBQyxDQUMvRDtJQUNEO0lBQ0NyQixNQUFNLENBQUNDLElBQUksQ0FBQ2UsZ0JBQWdCLENBQUMsQ0FBQ1YsTUFBTSxLQUFLVyxlQUFlLENBQUNYLE1BQU07SUFDL0Q7SUFDQVcsZUFBZSxDQUFDWCxNQUFNLEdBQUdWLE1BQU0sQ0FBQ1UsTUFBTSxLQUFLTixNQUFNLENBQUNDLElBQUksQ0FBQ0osdUJBQXVCLENBQUMsQ0FBQ1MsTUFBTTtJQUN0RjtJQUNBTixNQUFNLENBQUNDLElBQUksQ0FBQ0osdUJBQXVCLENBQUMsQ0FBQ3lCLEtBQUssQ0FBRUgsT0FBTyxJQUNsRG5CLE1BQU0sQ0FBQ0MsSUFBSSxDQUFDSix1QkFBdUIsQ0FBQyxDQUFDWSxRQUFRLENBQUNaLHVCQUF1QixDQUFDc0IsT0FBTyxDQUFDLENBQUNULE1BQU0sQ0FBRSxDQUN0RjtFQUVMLENBQUM7O0VBRUQ7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7RUFDQSxNQUFNYSx1QkFBdUIsR0FBRyxDQUMvQkMsWUFBaUIsRUFDakJDLFdBQThCLEVBQzlCVCxnQkFBMEMsRUFDMUNVLFVBQXlCLEtBQ1g7SUFDZCxNQUFNQyxVQUFvQixHQUFHLEVBQUU7O0lBRS9CO0lBQ0EsTUFBTUMsY0FBaUQsR0FBRztNQUFFQyxLQUFLLEVBQUVDLFNBQVM7TUFBRUMsSUFBSSxFQUFFRDtJQUFVLENBQUM7SUFDL0ZGLGNBQWMsQ0FBQ0MsS0FBSyxHQUFHTCxZQUFZLENBQUNsQixNQUFNLEdBQUdrQixZQUFZLENBQUMsQ0FBQyxDQUFDLENBQUNRLEdBQUcsR0FBR0YsU0FBUztJQUM1RUYsY0FBYyxDQUFDRyxJQUFJLEdBQUdQLFlBQVksQ0FBQ2xCLE1BQU0sR0FBR2tCLFlBQVksQ0FBQ0EsWUFBWSxDQUFDbEIsTUFBTSxHQUFHLENBQUMsQ0FBQyxDQUFDMEIsR0FBRyxHQUFHRixTQUFTO0lBRWpHLE1BQU1qQyx1QkFBMkQsR0FBRyxDQUFDLENBQUM7SUFDdEVHLE1BQU0sQ0FBQ0MsSUFBSSxDQUFDZSxnQkFBZ0IsQ0FBQyxDQUFDaUIsT0FBTyxDQUFFQyxlQUFlLElBQUs7TUFDMURDLCtCQUErQixDQUFDbkIsZ0JBQWdCLEVBQUVrQixlQUFlLEVBQUVQLFVBQVUsRUFBRUMsY0FBYyxFQUFFL0IsdUJBQXVCLEVBQUUsRUFBRSxDQUFDO0lBQzVILENBQUMsQ0FBQztJQUVGLE1BQU11QyxXQUFXLEdBQUdULFVBQVUsQ0FBQ1QsR0FBRyxDQUFFYyxHQUFHLElBQUtQLFdBQVcsQ0FBQ08sR0FBRyxDQUFDLENBQUM7SUFDN0Q7SUFDQUksV0FBVyxDQUFDSCxPQUFPLENBQUMsQ0FBQ0ksT0FBTyxFQUFFQyxLQUFLLEtBQUs7TUFBQTtNQUN2QyxJQUFJRCxPQUFPLENBQUNFLFFBQVEsSUFBSSwyQkFBQ2QsV0FBVyxDQUFDWSxPQUFPLENBQUNMLEdBQUcsQ0FBQyxrREFBeEIsc0JBQTBCTyxRQUFRLEdBQUU7UUFDNUQsT0FBT0gsV0FBVyxDQUFDRSxLQUFLLENBQUMsQ0FBQ0MsUUFBUTtNQUNuQztJQUNELENBQUMsQ0FBQztJQUVGLElBQUliLFVBQVUsRUFBRTtNQUNmVSxXQUFXLENBQUN6QixJQUFJLENBQUNlLFVBQVUsQ0FBQztJQUM3QjtJQUVBLE9BQU9VLFdBQVc7RUFDbkIsQ0FBQzs7RUFFRDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0VBQ0EsTUFBTUkseUJBQXlCLEdBQUcsQ0FDakM1QyxNQUFnQixFQUNoQmMsTUFBYyxFQUNkK0IsVUFBb0IsRUFDcEI1Qyx1QkFBaUQsRUFDakRtQixnQkFBMEMsRUFDMUNDLGVBQXlCLEtBQ2I7SUFDWixJQUFJSCxXQUFXLEdBQUdsQixNQUFNLENBQUM4QyxPQUFPLENBQUNoQyxNQUFNLENBQUM7O0lBRXhDO0lBQ0EsSUFBSVYsTUFBTSxDQUFDQyxJQUFJLENBQUNKLHVCQUF1QixDQUFDLENBQUNZLFFBQVEsQ0FBQ0MsTUFBTSxDQUFDLEVBQUU7TUFDMUQsT0FBT2IsdUJBQXVCLENBQUNhLE1BQU0sQ0FBQztJQUN2QztJQUVBLElBQUkrQixVQUFVLElBQUlBLFVBQVUsQ0FBQy9CLE1BQU0sSUFBSUEsTUFBTSxLQUFLK0IsVUFBVSxDQUFDL0IsTUFBTSxJQUFJLENBQUNkLE1BQU0sQ0FBQ2EsUUFBUSxDQUFDZ0MsVUFBVSxDQUFDL0IsTUFBTSxDQUFDLEVBQUU7TUFDM0diLHVCQUF1QixDQUFDYSxNQUFNLENBQUMsR0FBR00sZ0JBQWdCLENBQUNOLE1BQU0sQ0FBQztNQUMxRDtNQUNBLElBQ0NWLE1BQU0sQ0FBQ0MsSUFBSSxDQUFDSix1QkFBdUIsQ0FBQyxDQUFDUyxNQUFNLElBQzNDLENBQUNOLE1BQU0sQ0FBQ0MsSUFBSSxDQUFDSix1QkFBdUIsQ0FBQyxDQUFDdUIsSUFBSSxDQUFFRCxPQUFPLElBQUt2QixNQUFNLENBQUNhLFFBQVEsQ0FBQ1osdUJBQXVCLENBQUNzQixPQUFPLENBQUMsQ0FBQ1QsTUFBTSxDQUFFLENBQUMsSUFDbEhPLGVBQWUsQ0FBQ1gsTUFBTSxHQUFHVixNQUFNLENBQUNVLE1BQU0sS0FBS04sTUFBTSxDQUFDQyxJQUFJLENBQUNKLHVCQUF1QixDQUFDLENBQUNTLE1BQU0sRUFDckY7UUFDRCxNQUFNcUMsV0FBVyxHQUFHaEQsY0FBYyxDQUFDQyxNQUFNLEVBQUVDLHVCQUF1QixDQUFDO1FBQ25FLE9BQU9BLHVCQUF1QixDQUFDOEMsV0FBVyxDQUFDO01BQzVDLENBQUMsTUFBTTtRQUNOLE9BQU8sQ0FBQyxDQUFDO01BQ1Y7SUFDRCxDQUFDLE1BQU0sSUFBSWpDLE1BQU0sS0FBSytCLFVBQVUsQ0FBQy9CLE1BQU0sRUFBRTtNQUN4QztNQUNBSSxXQUFXLEdBQUdsQixNQUFNLENBQUNVLE1BQU07SUFDNUIsQ0FBQyxNQUFNO01BQ05RLFdBQVcsR0FBR2xCLE1BQU0sQ0FBQzhDLE9BQU8sQ0FBQ0QsVUFBVSxDQUFDL0IsTUFBTSxDQUFFO01BQ2hELElBQUkrQixVQUFVLENBQUNyQyxTQUFTLEtBQUtWLFNBQVMsQ0FBQ2tELEtBQUssRUFBRTtRQUM3QzlCLFdBQVcsRUFBRTtNQUNkO0lBQ0Q7SUFDQSxPQUFPQSxXQUFXO0VBQ25CLENBQUM7O0VBRUQ7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0VBQ0EsTUFBTXFCLCtCQUErQixHQUFHLENBQ3ZDbkIsZ0JBQTBDLEVBQzFDTixNQUFjLEVBQ2RkLE1BQWdCLEVBQ2hCZ0MsY0FBaUQsRUFDakQvQix1QkFBaUQsRUFDakRvQixlQUF5QixLQUNmO0lBQ1YsSUFBSUwsbUJBQW1CLENBQUNGLE1BQU0sRUFBRWQsTUFBTSxDQUFDLEVBQUU7TUFDeEM7SUFDRDtJQUNBLE1BQU02QyxVQUFVLEdBQUd6QixnQkFBZ0IsQ0FBQ04sTUFBTSxDQUFDO0lBQzNDTyxlQUFlLEdBQUdBLGVBQWUsQ0FBQ1gsTUFBTSxHQUFHVyxlQUFlLEdBQUdqQixNQUFNLENBQUNDLElBQUksQ0FBQ2UsZ0JBQWdCLENBQUMsQ0FBQyxDQUFDOztJQUU1RjtJQUNBLElBQUl5QixVQUFVLENBQUMvQixNQUFNLElBQUksQ0FBQ1YsTUFBTSxDQUFDQyxJQUFJLENBQUNlLGdCQUFnQixDQUFDLENBQUNQLFFBQVEsQ0FBQ2dDLFVBQVUsQ0FBQy9CLE1BQU0sQ0FBQyxJQUFJLENBQUNPLGVBQWUsQ0FBQ1IsUUFBUSxDQUFDZ0MsVUFBVSxDQUFDL0IsTUFBTSxDQUFDLEVBQUU7TUFDcEltQyxHQUFHLENBQUNDLE9BQU8sQ0FDVCxvQkFBbUJMLFVBQVUsQ0FBQy9CLE1BQU8seUJBQXdCQSxNQUFPLCtEQUE4RCxDQUNuSTtNQUNEO01BQ0FNLGdCQUFnQixDQUFDTixNQUFNLENBQUMsQ0FBQ0EsTUFBTSxHQUFHQSxNQUFNO01BQ3hDK0IsVUFBVSxDQUFDL0IsTUFBTSxHQUFHQSxNQUFNO0lBQzNCOztJQUVBO0lBQ0EsSUFBSSxDQUFDK0IsVUFBVSxDQUFDL0IsTUFBTSxFQUFFO01BQ3ZCK0IsVUFBVSxDQUFDL0IsTUFBTSxHQUFHK0IsVUFBVSxDQUFDckMsU0FBUyxLQUFLVixTQUFTLENBQUNrRCxLQUFLLEdBQUdoQixjQUFjLENBQUNHLElBQUksR0FBR0gsY0FBYyxDQUFDQyxLQUFLO01BQ3pHO01BQ0EsSUFBSVksVUFBVSxDQUFDL0IsTUFBTSxLQUFLb0IsU0FBUyxFQUFFO1FBQ3BDbkMsY0FBYyxDQUFDQyxNQUFNLEVBQUU7VUFBRSxDQUFDYyxNQUFNLEdBQUcrQjtRQUFXLENBQUMsQ0FBQztNQUNqRDtJQUNEOztJQUVBO0lBQ0EsTUFBTTNCLFdBQVcsR0FBRzBCLHlCQUF5QixDQUFDNUMsTUFBTSxFQUFFYyxNQUFNLEVBQUUrQixVQUFVLEVBQUU1Qyx1QkFBdUIsRUFBRW1CLGdCQUFnQixFQUFFQyxlQUFlLENBQUM7SUFFckksSUFBSUosY0FBYyxDQUFDQyxXQUFXLEVBQUVKLE1BQU0sRUFBRWQsTUFBTSxDQUFDLEVBQUU7TUFDaERBLE1BQU0sQ0FBQ21ELE1BQU0sQ0FBQ2pDLFdBQVcsRUFBRSxDQUFDLEVBQUVKLE1BQU0sQ0FBQztJQUN0Qzs7SUFFQTtJQUNBa0IsY0FBYyxDQUFDRyxJQUFJLEdBQUduQyxNQUFNLENBQUNBLE1BQU0sQ0FBQ1UsTUFBTSxHQUFHLENBQUMsQ0FBQzs7SUFFL0M7SUFDQSxJQUNDTixNQUFNLENBQUNDLElBQUksQ0FBQ0osdUJBQXVCLENBQUMsQ0FBQ1MsTUFBTSxJQUMzQ1MseUJBQXlCLENBQUNsQix1QkFBdUIsRUFBRUQsTUFBTSxFQUFFb0IsZ0JBQWdCLEVBQUVDLGVBQWUsQ0FBQyxFQUM1RjtNQUNEakIsTUFBTSxDQUFDQyxJQUFJLENBQUNKLHVCQUF1QixDQUFDLENBQUNvQyxPQUFPLENBQUVDLGVBQWUsSUFBSztRQUNqRUMsK0JBQStCLENBQzlCO1VBQUUsR0FBR3RDO1FBQXdCLENBQUMsRUFDOUJxQyxlQUFlLEVBQ2Z0QyxNQUFNLEVBQ05nQyxjQUFjLEVBQ2QvQix1QkFBdUIsRUFDdkJvQixlQUFlLENBQ2Y7TUFDRixDQUFDLENBQUM7SUFDSDtFQUNELENBQUM7RUFBQyxJQUVVK0IsWUFBWTtFQUFBLFdBQVpBLFlBQVk7SUFBWkEsWUFBWTtJQUFaQSxZQUFZO0lBQVpBLFlBQVk7RUFBQSxHQUFaQSxZQUFZLEtBQVpBLFlBQVk7RUFBQTtFQVl4QixTQUFTQyxhQUFhLENBQUlDLE1BQXVELEVBQWtDO0lBQ2xILE9BQU8sT0FBT0EsTUFBTSxLQUFLLFFBQVE7RUFDbEM7RUFFQSxTQUFTQyxhQUFhLENBQ3JCQyxnQkFBaUMsRUFDakNDLFVBQW9CLEVBQ3BCQyxhQUErQixFQUMzQjtJQUNKLE1BQU1DLE9BQVUsR0FBR0YsVUFBVSxJQUFLQyxhQUFtQjtJQUNyRCxLQUFLLE1BQU1FLGVBQWUsSUFBSUosZ0JBQWdCLEVBQUU7TUFDL0MsSUFBSXBELE1BQU0sQ0FBQ3lELGNBQWMsQ0FBQ0MsSUFBSSxDQUFDTixnQkFBZ0IsRUFBRUksZUFBZSxDQUFDLEVBQUU7UUFDbEUsTUFBTUcsY0FBYyxHQUFHUCxnQkFBZ0IsQ0FBQ0ksZUFBZSxDQUFDO1FBQ3hELElBQUlILFVBQVUsS0FBSyxJQUFJLEVBQUU7VUFDeEIsUUFBUU0sY0FBYztZQUNyQixLQUFLLFdBQVc7Y0FDZixJQUFJTCxhQUFhLENBQUNHLGNBQWMsQ0FBQ0QsZUFBZSxDQUFDLElBQUlGLGFBQWEsQ0FBQ0UsZUFBZSxDQUFDLEtBQUsxQixTQUFTLEVBQUU7Z0JBQ2xHdUIsVUFBVSxDQUFDRyxlQUFlLENBQUMsR0FBR0YsYUFBYSxDQUFDRSxlQUFlLENBQThCO2NBQzFGO2NBQ0E7WUFDRCxLQUFLLE9BQU87WUFDWjtjQUNDLE1BQU1JLE9BQU8sR0FBR1AsVUFBVSxDQUFDRyxlQUFlLENBQUMsSUFBSyxFQUEyQjtjQUMzRSxJQUFJSyxTQUFTLEdBQUcsQ0FBQyxDQUFDO2NBQ2xCLElBQUlaLGFBQWEsQ0FBQ1UsY0FBYyxDQUFDLEVBQUU7Z0JBQ2xDRSxTQUFTLEdBQUdGLGNBQWM7Y0FDM0I7Y0FDQSxJQUFJRyxLQUFLLENBQUNDLE9BQU8sQ0FBQ0gsT0FBTyxDQUFDLEVBQUU7Z0JBQzNCUCxVQUFVLENBQUNHLGVBQWUsQ0FBQyxHQUFHUSxvQkFBb0IsQ0FDakRKLE9BQU8sRUFDTk4sYUFBYSxJQUFJQSxhQUFhLENBQUNFLGVBQWUsQ0FBQyxJQUFLLENBQUMsQ0FBQyxFQUN2REssU0FBUyxDQUNvQjtjQUMvQjtjQUNBO1VBQU07UUFFVCxDQUFDLE1BQU07VUFDTixRQUFRRixjQUFjO1lBQ3JCLEtBQUssV0FBVztjQUNmLElBQUlMLGFBQWEsQ0FBQ0csY0FBYyxDQUFDRCxlQUFlLENBQUMsSUFBSUYsYUFBYSxDQUFDRSxlQUFlLENBQUMsS0FBSzFCLFNBQVMsRUFBRTtnQkFDbEd5QixPQUFPLENBQUNDLGVBQWUsQ0FBQyxHQUFHRixhQUFhLENBQUNFLGVBQWUsQ0FBOEI7Y0FDdkY7Y0FDQTtZQUNELEtBQUssT0FBTztZQUNaO2NBQ0MsSUFBSUssU0FBUyxHQUFHLENBQUMsQ0FBQztjQUNsQixJQUFJWixhQUFhLENBQUNVLGNBQWMsQ0FBQyxFQUFFO2dCQUNsQ0UsU0FBUyxHQUFHRixjQUFjO2NBQzNCO2NBQ0FKLE9BQU8sQ0FBQ0MsZUFBZSxDQUFDLEdBQUdRLG9CQUFvQixDQUM5QyxFQUFFLEVBQ0RWLGFBQWEsSUFBSUEsYUFBYSxDQUFDRSxlQUFlLENBQUMsSUFBSyxDQUFDLENBQUMsRUFDdkRLLFNBQVMsQ0FDb0I7Y0FDOUI7VUFBTTtRQUVUO01BQ0Q7SUFDRDtJQUNBLE9BQU9OLE9BQU87RUFDZjs7RUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0VBQ08sU0FBU1Msb0JBQW9CLENBQ25DeEMsWUFBaUIsRUFDakJ5QyxjQUFnRCxFQUUxQztJQUFBLElBRE5iLGdCQUFpQyx1RUFBRyxDQUFDLENBQUM7SUFFdEMsSUFBSTFCLFVBQXlCO0lBQzdCLE1BQU1WLGdCQUFvRCxHQUFHLENBQUMsQ0FBQztJQUMvRCxNQUFNUyxXQUE4QixHQUFHLENBQUMsQ0FBQzs7SUFFekM7SUFDQUQsWUFBWSxDQUFDUyxPQUFPLENBQUVpQyxXQUFXLElBQUs7TUFBQTtNQUNyQyxJQUFJLDBCQUFBQSxXQUFXLENBQUMzQixRQUFRLDBEQUFwQixzQkFBc0JuQyxTQUFTLE1BQUtWLFNBQVMsQ0FBQ3lFLEdBQUcsSUFBSSxDQUFDekMsVUFBVSxFQUFFO1FBQ3JFQSxVQUFVLEdBQUd3QyxXQUFXO01BQ3pCLENBQUMsTUFBTTtRQUFBO1FBQ05sRCxnQkFBZ0IsQ0FBQ2tELFdBQVcsQ0FBQ2xDLEdBQUcsQ0FBQyxHQUFHO1VBQ25DdEIsTUFBTSxFQUFFLDJCQUFBd0QsV0FBVyxDQUFDM0IsUUFBUSwyREFBcEIsdUJBQXNCN0IsTUFBTSxLQUFJd0QsV0FBVyxDQUFDbEMsR0FBRztVQUN2RDVCLFNBQVMsRUFBRSwyQkFBQThELFdBQVcsQ0FBQzNCLFFBQVEsMkRBQXBCLHVCQUFzQm5DLFNBQVMsS0FBSVYsU0FBUyxDQUFDa0Q7UUFDekQsQ0FBQztNQUNGO01BQ0FuQixXQUFXLENBQUN5QyxXQUFXLENBQUNsQyxHQUFHLENBQUMsR0FBR2tDLFdBQVc7SUFDM0MsQ0FBQyxDQUFDOztJQUVGO0lBQ0FsRSxNQUFNLENBQUNDLElBQUksQ0FBQ2dFLGNBQWMsQ0FBQyxDQUFDaEMsT0FBTyxDQUFFbUMsZ0JBQWdCLElBQUs7TUFDekQsTUFBTWQsYUFBYSxHQUFHVyxjQUFjLENBQUNHLGdCQUFnQixDQUFDO01BQ3RELE1BQU0xRCxNQUFNLEdBQUc0QyxhQUFhLENBQUNmLFFBQVEsQ0FBQzdCLE1BQU07TUFDNUM7TUFDQSxJQUFJLENBQUM0QyxhQUFhLENBQUNmLFFBQVEsQ0FBQ25DLFNBQVMsRUFBRTtRQUN0Q2tELGFBQWEsQ0FBQ2YsUUFBUSxDQUFDbkMsU0FBUyxHQUFHVixTQUFTLENBQUNrRCxLQUFLO01BQ25EO01BRUEsTUFBTXlCLHdCQUF3QixHQUFHZixhQUFhLENBQUN0QixHQUE4QjtNQUM3RSxJQUFJUCxXQUFXLENBQUM0Qyx3QkFBd0IsQ0FBQyxFQUFFO1FBQzFDNUMsV0FBVyxDQUFDNEMsd0JBQXdCLENBQUMsR0FBR2xCLGFBQWEsQ0FBQ0MsZ0JBQWdCLEVBQUUzQixXQUFXLENBQUM0Qyx3QkFBd0IsQ0FBQyxFQUFFZixhQUFhLENBQUM7O1FBRTdIO1FBQ0EsSUFBSTVDLE1BQU0sSUFBSTRDLGFBQWEsQ0FBQ2YsUUFBUSxJQUFJYSxnQkFBZ0IsQ0FBQ2IsUUFBUSxJQUFJYSxnQkFBZ0IsQ0FBQ2IsUUFBUSxLQUFLLFdBQVcsRUFBRTtVQUMvR3ZCLGdCQUFnQixDQUFDcUQsd0JBQXdCLENBQUMsR0FBRzVDLFdBQVcsQ0FBQzRDLHdCQUF3QixDQUFDLENBQUM5QixRQUE4QjtRQUNsSDtRQUNBO0FBQ0g7QUFDQTtBQUNBO0FBQ0E7TUFDRSxDQUFDLE1BQU07UUFDTmQsV0FBVyxDQUFDNEMsd0JBQXdCLENBQUMsR0FBR2xCLGFBQWEsQ0FBQ0MsZ0JBQWdCLEVBQUUsSUFBSSxFQUFFRSxhQUFhLENBQUM7UUFDNUZ0QyxnQkFBZ0IsQ0FBQ3FELHdCQUF3QixDQUFDLEdBQUdmLGFBQWEsQ0FBQ2YsUUFBOEI7TUFDMUY7SUFDRCxDQUFDLENBQUM7SUFFRixPQUFPaEIsdUJBQXVCLENBQUNDLFlBQVksRUFBRUMsV0FBVyxFQUFFVCxnQkFBZ0IsRUFBRVUsVUFBVSxDQUFDO0VBQ3hGO0VBQUM7RUFBQTtBQUFBIn0=
@@ -102,6 +102,8 @@ const isPositionable = (insertIndex: number, anchor: string, sorted: string[]):
102
102
  * Checks if any item in the delayedPositioningItems object can be positioned based on the presence of its anchor in a sorted array or the fact that all remaining items self reference.
103
103
  * @param delayedPositioningItems Key-value pair where the key is the item and the value is its position.
104
104
  * @param sorted The array of sorted keys.
105
+ * @param positioningItems
106
+ * @param possibleAnchors
105
107
  * @returns Returns whether any delayedPositioningItem can be positioned.
106
108
  */
107
109
  const isDelayedItemPositionable = (
@@ -179,6 +181,7 @@ const reorderPositioningItems = <T extends ConfigurableObject>(
179
181
  * @param anchorItem The position metadata for the item to insert.
180
182
  * @param delayedPositioningItems Key-value pair where the key is the item and the value is its position.
181
183
  * @param positioningItems A map defining the order of elements, keyed by an identifier.
184
+ * @param possibleAnchors
182
185
  * @returns The index at which the item should be inserted in the sorted array, or -1 if the item's positioning should be delayed.
183
186
  */
184
187
  const getInsertIndexOrDelayItem = (
@@ -301,7 +304,7 @@ export enum OverrideType {
301
304
  }
302
305
  type ArrayOverrideType<ArrayType> = OverrideKeys<ArrayType>;
303
306
 
304
- type ElementType<T> = T extends any[] ? T[number] : T;
307
+ type ElementType<T> = T extends unknown[] ? T[number] : T;
305
308
  type OverrideKeys<T> = {
306
309
  [P in keyof T]?: OverrideType | ArrayOverrideType<ElementType<T[P]>>;
307
310
  };
@@ -323,12 +326,12 @@ function applyOverride<T extends ConfigurableObject>(
323
326
  switch (overrideConfig) {
324
327
  case "overwrite":
325
328
  if (customElement.hasOwnProperty(overwritableKey) && customElement[overwritableKey] !== undefined) {
326
- sourceItem[overwritableKey] = customElement[overwritableKey] as any;
329
+ sourceItem[overwritableKey] = customElement[overwritableKey] as T[typeof overwritableKey];
327
330
  }
328
331
  break;
329
332
  case "merge":
330
333
  default:
331
- const subItem = sourceItem[overwritableKey] || ([] as any[]);
334
+ const subItem = sourceItem[overwritableKey] || ([] as ConfigurableObject[]);
332
335
  let subConfig = {};
333
336
  if (isArrayConfig(overrideConfig)) {
334
337
  subConfig = overrideConfig;
@@ -336,9 +339,9 @@ function applyOverride<T extends ConfigurableObject>(
336
339
  if (Array.isArray(subItem)) {
337
340
  sourceItem[overwritableKey] = insertCustomElements(
338
341
  subItem,
339
- (customElement && (customElement[overwritableKey] as Record<string, CustomElement<any>>)) || {},
342
+ (customElement && customElement[overwritableKey]) || {},
340
343
  subConfig
341
- ) as any;
344
+ ) as T[typeof overwritableKey];
342
345
  }
343
346
  break;
344
347
  }
@@ -346,7 +349,7 @@ function applyOverride<T extends ConfigurableObject>(
346
349
  switch (overrideConfig) {
347
350
  case "overwrite":
348
351
  if (customElement.hasOwnProperty(overwritableKey) && customElement[overwritableKey] !== undefined) {
349
- outItem[overwritableKey] = customElement[overwritableKey] as any;
352
+ outItem[overwritableKey] = customElement[overwritableKey] as T[typeof overwritableKey];
350
353
  }
351
354
  break;
352
355
  case "merge":
@@ -356,10 +359,10 @@ function applyOverride<T extends ConfigurableObject>(
356
359
  subConfig = overrideConfig;
357
360
  }
358
361
  outItem[overwritableKey] = insertCustomElements(
359
- [] as any[],
360
- (customElement && (customElement[overwritableKey] as Record<string, CustomElement<any>>)) || {},
362
+ [] as ConfigurableObject[],
363
+ (customElement && customElement[overwritableKey]) || {},
361
364
  subConfig
362
- ) as any;
365
+ ) as T[typeof overwritableKey];
363
366
  break;
364
367
  }
365
368
  }
@@ -171,4 +171,4 @@ sap.ui.define(["sap/base/Log", "../../helpers/TypeGuards"], function (Log, TypeG
171
171
  _exports.isPotentiallySensitive = isPotentiallySensitive;
172
172
  return _exports;
173
173
  }, false);
174
- //# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJuYW1lcyI6WyJpc1JlZmVyZW5jZVByb3BlcnR5U3RhdGljYWxseUhpZGRlbiIsInNvdXJjZSIsImlzUHJvcGVydHlIaWRkZW4iLCJwcm9wZXJ0eSIsImRhdGFGaWVsZERlZmF1bHQiLCJhbm5vdGF0aW9ucyIsIlVJIiwiRGF0YUZpZWxkRGVmYXVsdCIsImlzUHJvcGVydHlTdGF0aWNhbGx5SGlkZGVuIiwiaXNTdGF0aWNhbGx5SGlkZGVuRGF0YUZpZWxkIiwiaXNEYXRhRmllbGRBYnN0cmFjdFR5cGVzSGlkZGVuIiwiZGF0YUZpZWxkIiwiJFR5cGUiLCJpc0Fubm90YXRpb25GaWVsZFN0YXRpY2FsbHlIaWRkZW4iLCJnZXRQcm9wZXJ0eVBhdGhGcm9tUHJvcGVydHlXaXRoSGlkZGVuRmlsdGVyIiwibmFtZSIsImdldFByb3BlcnR5UGF0aEZyb21EYXRhRmllbGRXaXRoSGlkZGVuRmlsdGVyIiwiaXNEYXRhRmllbGRUeXBlcyIsIlZhbHVlIiwiJHRhcmdldCIsInBhdGgiLCJpc0hpZGRlbiIsImlzUHJvcGVydHkiLCJwcm9wZXJ0eVBhdGhXaXRoSGlkZGVuRmlsdGVyIiwic2V0TG9nTWVzc2FnZUZvckhpZGRlbkZpbHRlciIsImFubm90YXRpb25Qcm9wZXJ0eSIsIlRhcmdldCIsInRlcm0iLCJtZWFzdXJlc0hpZGRlbiIsIk1lYXN1cmVzIiwiZXZlcnkiLCJjaGFydE1lYXN1cmUiLCJMb2ciLCJ3YXJuaW5nIiwiRGF0YSIsInByb3BlcnR5VmFsdWVBbm5vdGF0aW9uIiwiaXNIZWFkZXJTdGF0aWNhbGx5SGlkZGVuIiwicHJvcGVydHlEYXRhTW9kZWwiLCJ0YXJnZXRPYmplY3QiLCJoZWFkZXJJbmZvQW5ub3RhdGlvbiIsIkhpZGRlbiIsInZhbHVlT2YiLCJoYXNPd25Qcm9wZXJ0eSIsIkFubm90YXRpb25UZXJtIiwiaXNQb3RlbnRpYWxseVNlbnNpdGl2ZSIsImRhdGFGaWVsZFRhcmdldCIsImZuIiwiUGVyc29uYWxEYXRhIiwiSXNQb3RlbnRpYWxseVNlbnNpdGl2ZSJdLCJzb3VyY2VSb290IjoiLiIsInNvdXJjZXMiOlsiRGF0YUZpZWxkSGVscGVyLnRzIl0sInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB0eXBlIHsgUHJpbWl0aXZlVHlwZSwgUHJvcGVydHkgfSBmcm9tIFwiQHNhcC11eC92b2NhYnVsYXJpZXMtdHlwZXNcIjtcbmltcG9ydCB7IENvbW11bmljYXRpb25Bbm5vdGF0aW9uVGVybXMgfSBmcm9tIFwiQHNhcC11eC92b2NhYnVsYXJpZXMtdHlwZXMvdm9jYWJ1bGFyaWVzL0NvbW11bmljYXRpb25cIjtcbmltcG9ydCB0eXBlIHtcblx0RGF0YUZpZWxkQWJzdHJhY3RUeXBlcyxcblx0RGF0YUZpZWxkRm9yQW5ub3RhdGlvblR5cGVzLFxuXHREYXRhRmllbGRUeXBlcyxcblx0RGF0YVBvaW50VHlwZSxcblx0RmllbGRHcm91cCxcblx0UmVmZXJlbmNlRmFjZXRUeXBlc1xufSBmcm9tIFwiQHNhcC11eC92b2NhYnVsYXJpZXMtdHlwZXMvdm9jYWJ1bGFyaWVzL1VJXCI7XG5pbXBvcnQgeyBVSUFubm90YXRpb25UZXJtcywgVUlBbm5vdGF0aW9uVHlwZXMgfSBmcm9tIFwiQHNhcC11eC92b2NhYnVsYXJpZXMtdHlwZXMvdm9jYWJ1bGFyaWVzL1VJXCI7XG5pbXBvcnQgTG9nIGZyb20gXCJzYXAvYmFzZS9Mb2dcIjtcbmltcG9ydCB7IGlzUHJvcGVydHkgfSBmcm9tIFwiLi4vLi4vaGVscGVycy9UeXBlR3VhcmRzXCI7XG5pbXBvcnQgdHlwZSB7IERhdGFNb2RlbE9iamVjdFBhdGggfSBmcm9tIFwiLi4vLi4vdGVtcGxhdGluZy9EYXRhTW9kZWxQYXRoSGVscGVyXCI7XG5cbi8qKlxuICogQ2hlY2tzIGZvciBzdGF0aWNhbGx5IGhpZGRlbiByZWZlcmVuY2UgcHJvcGVydGllcy5cbiAqXG4gKiBAcGFyYW0gc291cmNlIFRoZSBkYXRhRmllbGQgb3IgcHJvcGVydHkgdG8gYmUgYW5hbGl6ZWRcbiAqIEByZXR1cm5zIFdoZXRoZXIgdGhlIGFyZ3VtZW50IGhhcyBiZWVuIHNldCBhcyBoaWRkZW5cbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGlzUmVmZXJlbmNlUHJvcGVydHlTdGF0aWNhbGx5SGlkZGVuKHNvdXJjZT86IERhdGFGaWVsZEFic3RyYWN0VHlwZXMgfCBQcm9wZXJ0eSk6IGJvb2xlYW4ge1xuXHRpZiAoIXNvdXJjZSkge1xuXHRcdHJldHVybiBmYWxzZTtcblx0fVxuXHRmdW5jdGlvbiBpc1Byb3BlcnR5SGlkZGVuKHByb3BlcnR5OiBQcm9wZXJ0eSk6IGJvb2xlYW4ge1xuXHRcdGNvbnN0IGRhdGFGaWVsZERlZmF1bHQgPSBwcm9wZXJ0eS5hbm5vdGF0aW9ucy5VST8uRGF0YUZpZWxkRGVmYXVsdCB8fCBmYWxzZTtcblx0XHRyZXR1cm4gaXNQcm9wZXJ0eVN0YXRpY2FsbHlIaWRkZW4oXCJIaWRkZW5cIiwgcHJvcGVydHkpIHx8IChkYXRhRmllbGREZWZhdWx0ICYmIGlzU3RhdGljYWxseUhpZGRlbkRhdGFGaWVsZChkYXRhRmllbGREZWZhdWx0KSk7XG5cdH1cblx0ZnVuY3Rpb24gaXNEYXRhRmllbGRBYnN0cmFjdFR5cGVzSGlkZGVuKGRhdGFGaWVsZDogRGF0YUZpZWxkQWJzdHJhY3RUeXBlcyk6IGJvb2xlYW4ge1xuXHRcdHJldHVybiAoXG5cdFx0XHRpc1N0YXRpY2FsbHlIaWRkZW5EYXRhRmllbGQoZGF0YUZpZWxkKSB8fFxuXHRcdFx0KGRhdGFGaWVsZC4kVHlwZSA9PT0gVUlBbm5vdGF0aW9uVHlwZXMuRGF0YUZpZWxkRm9yQW5ub3RhdGlvbiAmJiBpc0Fubm90YXRpb25GaWVsZFN0YXRpY2FsbHlIaWRkZW4oZGF0YUZpZWxkKSlcblx0XHQpO1xuXHR9XG5cblx0ZnVuY3Rpb24gZ2V0UHJvcGVydHlQYXRoRnJvbVByb3BlcnR5V2l0aEhpZGRlbkZpbHRlcihwcm9wZXJ0eTogUHJvcGVydHkpOiBzdHJpbmcgfCBmYWxzZSB7XG5cdFx0cmV0dXJuIGlzUHJvcGVydHlTdGF0aWNhbGx5SGlkZGVuKFwiSGlkZGVuRmlsdGVyXCIsIHByb3BlcnR5KSAmJiBwcm9wZXJ0eS5uYW1lO1xuXHR9XG5cdGZ1bmN0aW9uIGdldFByb3BlcnR5UGF0aEZyb21EYXRhRmllbGRXaXRoSGlkZGVuRmlsdGVyKGRhdGFGaWVsZDogRGF0YUZpZWxkQWJzdHJhY3RUeXBlcyk6IHN0cmluZyB8IGZhbHNlIHtcblx0XHRyZXR1cm4gaXNEYXRhRmllbGRUeXBlcyhkYXRhRmllbGQpICYmIGlzUHJvcGVydHlTdGF0aWNhbGx5SGlkZGVuKFwiSGlkZGVuRmlsdGVyXCIsIGRhdGFGaWVsZC5WYWx1ZS4kdGFyZ2V0KSAmJiBkYXRhRmllbGQuVmFsdWUucGF0aDtcblx0fVxuXG5cdGNvbnN0IGlzSGlkZGVuID0gaXNQcm9wZXJ0eShzb3VyY2UpID8gaXNQcm9wZXJ0eUhpZGRlbihzb3VyY2UpIDogaXNEYXRhRmllbGRBYnN0cmFjdFR5cGVzSGlkZGVuKHNvdXJjZSk7XG5cdGNvbnN0IHByb3BlcnR5UGF0aFdpdGhIaWRkZW5GaWx0ZXIgPSBpc1Byb3BlcnR5KHNvdXJjZSlcblx0XHQ/IGdldFByb3BlcnR5UGF0aEZyb21Qcm9wZXJ0eVdpdGhIaWRkZW5GaWx0ZXIoc291cmNlKVxuXHRcdDogZ2V0UHJvcGVydHlQYXRoRnJvbURhdGFGaWVsZFdpdGhIaWRkZW5GaWx0ZXIoc291cmNlKTtcblx0aWYgKGlzSGlkZGVuICYmIHByb3BlcnR5UGF0aFdpdGhIaWRkZW5GaWx0ZXIpIHtcblx0XHRzZXRMb2dNZXNzYWdlRm9ySGlkZGVuRmlsdGVyKHByb3BlcnR5UGF0aFdpdGhIaWRkZW5GaWx0ZXIpO1xuXHR9XG5cdHJldHVybiBpc0hpZGRlbjtcbn1cblxuLyoqXG4gKiBDaGVja3MgZm9yIGRhdGEgZmllbGRzIGZvciBhbm5vdGF0aW9uIHdpdGggc3RhdGljYWxseSBoaWRkZW4gcmVmZXJlbmNlZCBwcm9wZXJ0aWVzLlxuICpcbiAqIEBwYXJhbSBhbm5vdGF0aW9uUHJvcGVydHkgVGhlIGRhdGFGaWVsZCBvciByZWZlcmVuY2UgRmFjZXQgdHlwZSB0byBiZSBhbmFseXplZFxuICogQHJldHVybnMgV2hldGhlciB0aGUgYXJndW1lbnQgaGFzIGJlZW4gc2V0IGFzIGhpZGRlblxuICovXG5leHBvcnQgZnVuY3Rpb24gaXNBbm5vdGF0aW9uRmllbGRTdGF0aWNhbGx5SGlkZGVuKGFubm90YXRpb25Qcm9wZXJ0eTogRGF0YUZpZWxkRm9yQW5ub3RhdGlvblR5cGVzIHwgUmVmZXJlbmNlRmFjZXRUeXBlcyk6IGJvb2xlYW4ge1xuXHRpZiAoaXNTdGF0aWNhbGx5SGlkZGVuRGF0YUZpZWxkKGFubm90YXRpb25Qcm9wZXJ0eSkpIHtcblx0XHRyZXR1cm4gdHJ1ZTtcblx0fVxuXHRzd2l0Y2ggKGFubm90YXRpb25Qcm9wZXJ0eS5UYXJnZXQuJHRhcmdldD8udGVybSkge1xuXHRcdGNhc2UgVUlBbm5vdGF0aW9uVGVybXMuQ2hhcnQ6XG5cdFx0XHRjb25zdCBtZWFzdXJlc0hpZGRlbiA9IGFubm90YXRpb25Qcm9wZXJ0eS5UYXJnZXQuJHRhcmdldC5NZWFzdXJlcy5ldmVyeSgoY2hhcnRNZWFzdXJlKSA9PiB7XG5cdFx0XHRcdGlmIChjaGFydE1lYXN1cmUuJHRhcmdldCAmJiBpc1Byb3BlcnR5U3RhdGljYWxseUhpZGRlbihcIkhpZGRlblwiLCBjaGFydE1lYXN1cmUuJHRhcmdldCkpIHtcblx0XHRcdFx0XHRpZiAoaXNQcm9wZXJ0eVN0YXRpY2FsbHlIaWRkZW4oXCJIaWRkZW5GaWx0ZXJcIiwgY2hhcnRNZWFzdXJlLiR0YXJnZXQpKSB7XG5cdFx0XHRcdFx0XHRzZXRMb2dNZXNzYWdlRm9ySGlkZGVuRmlsdGVyKGNoYXJ0TWVhc3VyZS4kdGFyZ2V0Lm5hbWUpO1xuXHRcdFx0XHRcdH1cblx0XHRcdFx0XHRyZXR1cm4gdHJ1ZTtcblx0XHRcdFx0fVxuXHRcdFx0fSk7XG5cdFx0XHRpZiAobWVhc3VyZXNIaWRkZW4pIHtcblx0XHRcdFx0TG9nLndhcm5pbmcoXCJXYXJuaW5nOiBBbGwgbWVhc3VyZXMgYXR0cmlidXRlIGZvciBDaGFydCBhcmUgc3RhdGljYWxseSBoaWRkZW4gaGVuY2UgY2hhcnQgY2FuJ3QgYmUgcmVuZGVyZWRcIik7XG5cdFx0XHR9XG5cdFx0XHRyZXR1cm4gbWVhc3VyZXNIaWRkZW47XG5cdFx0Y2FzZSBVSUFubm90YXRpb25UZXJtcy5GaWVsZEdyb3VwOlxuXHRcdFx0cmV0dXJuIChhbm5vdGF0aW9uUHJvcGVydHkuVGFyZ2V0LiR0YXJnZXQgYXMgRmllbGRHcm91cCkuRGF0YS5ldmVyeShpc1JlZmVyZW5jZVByb3BlcnR5U3RhdGljYWxseUhpZGRlbik7XG5cdFx0Y2FzZSBVSUFubm90YXRpb25UZXJtcy5EYXRhUG9pbnQ6XG5cdFx0XHRjb25zdCBwcm9wZXJ0eVZhbHVlQW5ub3RhdGlvbiA9IChhbm5vdGF0aW9uUHJvcGVydHkuVGFyZ2V0LiR0YXJnZXQgYXMgRGF0YVBvaW50VHlwZSkuVmFsdWUuJHRhcmdldCBhcyBQcm9wZXJ0eTtcblx0XHRcdHJldHVybiBpc1JlZmVyZW5jZVByb3BlcnR5U3RhdGljYWxseUhpZGRlbihwcm9wZXJ0eVZhbHVlQW5ub3RhdGlvbik7XG5cdFx0ZGVmYXVsdDpcblx0XHRcdHJldHVybiBmYWxzZTtcblx0fVxufVxuXG4vKipcbiAqIENoZWNrcyBpZiBoZWFkZXIgaXMgc3RhdGljYWxseSBoaWRkZW4uXG4gKlxuICogQHBhcmFtIHByb3BlcnR5RGF0YU1vZGVsIFRoZSBwcm9wZXJ0eSBEYXRhIE1vZGVsIHRvIGJlIGFuYWxpemVkXG4gKiBAcmV0dXJucyBXaGV0aGVyIHRoZSBhcmd1bWVudCBoYXMgYmVlbiBzZXQgYXMgaGlkZGVuXG4gKi9cblxuZXhwb3J0IGZ1bmN0aW9uIGlzSGVhZGVyU3RhdGljYWxseUhpZGRlbihwcm9wZXJ0eURhdGFNb2RlbD86IERhdGFNb2RlbE9iamVjdFBhdGgpOiBib29sZWFuIHtcblx0aWYgKHByb3BlcnR5RGF0YU1vZGVsPy50YXJnZXRPYmplY3QpIHtcblx0XHRjb25zdCBoZWFkZXJJbmZvQW5ub3RhdGlvbiA9IHByb3BlcnR5RGF0YU1vZGVsLnRhcmdldE9iamVjdDtcblx0XHRyZXR1cm4gaXNSZWZlcmVuY2VQcm9wZXJ0eVN0YXRpY2FsbHlIaWRkZW4oaGVhZGVySW5mb0Fubm90YXRpb24pO1xuXHR9XG5cdHJldHVybiBmYWxzZTtcbn1cblxuLyoqXG4gKiBDaGVja3MgaWYgZGF0YSBmaWVsZCBvciBSZWZlcmVuY2UgRmFjZXQgaXMgc3RhdGljYWxseSBoaWRkZW4uXG4gKlxuICogQHBhcmFtIGRhdGFGaWVsZCBUaGUgZGF0YUZpZWxkIG9yIFJlZmVyZW5jZSBGYWNldCB0byBiZSBhbmFseXplZFxuICogQHJldHVybnMgV2hldGhlciB0aGUgYXJndW1lbnQgaGFzIGJlZW4gc2V0IHN0YXRpY2FsbHkgYXMgaGlkZGVuXG4gKi9cbmZ1bmN0aW9uIGlzU3RhdGljYWxseUhpZGRlbkRhdGFGaWVsZChkYXRhRmllbGQ6IERhdGFGaWVsZEFic3RyYWN0VHlwZXMgfCBSZWZlcmVuY2VGYWNldFR5cGVzKTogYm9vbGVhbiB7XG5cdHJldHVybiAoXG5cdFx0ZGF0YUZpZWxkLmFubm90YXRpb25zPy5VST8uSGlkZGVuPy52YWx1ZU9mKCkgPT09IHRydWUgfHxcblx0XHQoaXNEYXRhRmllbGRUeXBlcyhkYXRhRmllbGQpICYmIGlzUHJvcGVydHlTdGF0aWNhbGx5SGlkZGVuKFwiSGlkZGVuXCIsIGRhdGFGaWVsZD8uVmFsdWU/LiR0YXJnZXQpKVxuXHQpO1xufVxuXG4vKipcbiAqIEFkZHMgY29uc29sZSB3YXJuaW5nIHdoZW4gc2V0dGluZyBoaWRkZW4gYW5kIGhpZGRlbiBmaWx0ZXIgdG9nZXRoZXIuXG4gKlxuICogQHBhcmFtIHBhdGggVGhlIHByb3BlcnR5IHBhdGggdG8gYmUgYWRkZWQgdG8gdGhlIHdhcm5pbmcgZXJyb3IgbWVzc2FnZVxuICovXG5mdW5jdGlvbiBzZXRMb2dNZXNzYWdlRm9ySGlkZGVuRmlsdGVyKHBhdGg6IHN0cmluZyk6IHZvaWQge1xuXHRMb2cud2FybmluZyhcblx0XHRcIldhcm5pbmc6IFByb3BlcnR5IFwiICtcblx0XHRcdHBhdGggK1xuXHRcdFx0XCIgaXMgc2V0IHdpdGggYm90aCBVSS5IaWRkZW4gYW5kIFVJLkhpZGRlbkZpbHRlciAtIHBsZWFzZSBzZXQgb25seSBvbmUgb2YgdGhlc2UhIFVJLkhpZGRlbkZpbHRlciBpcyBpZ25vcmVkIGN1cnJlbnRseSFcIlxuXHQpO1xufVxuXG4vKipcbiAqIElkZW50aWZpZXMgaWYgdGhlIGdpdmVuIGRhdGFGaWVsZEFic3RyYWN0IHRoYXQgaXMgcGFzc2VkIGlzIGEgXCJEYXRhRmllbGRUeXBlc1wiLlxuICogRGF0YUZpZWxkIGhhcyBhIHZhbHVlIGRlZmluZWQuXG4gKlxuICogQHBhcmFtIGRhdGFGaWVsZCBEYXRhRmllbGQgdG8gYmUgZXZhbHVhdGVkXG4gKiBAcmV0dXJucyBWYWxpZGF0ZSB0aGF0IGRhdGFGaWVsZCBpcyBhIERhdGFGaWVsZFR5cGVzXG4gKi9cbmZ1bmN0aW9uIGlzRGF0YUZpZWxkVHlwZXMoZGF0YUZpZWxkOiBEYXRhRmllbGRBYnN0cmFjdFR5cGVzIHwgdW5rbm93bik6IGRhdGFGaWVsZCBpcyBEYXRhRmllbGRUeXBlcyB7XG5cdHJldHVybiAoZGF0YUZpZWxkIGFzIERhdGFGaWVsZFR5cGVzKS5oYXNPd25Qcm9wZXJ0eShcIlZhbHVlXCIpO1xufVxuXG4vKipcbiAqIElkZW50aWZpZXMgaWYgdGhlIGdpdmVuIHByb3BlcnR5IGlzIHN0YXRpY2FsbHkgaGlkZGVuIG9yIGhpZGRlbiBGaWx0ZXJcIi5cbiAqXG4gKiBAcGFyYW0gQW5ub3RhdGlvblRlcm0gQW5ub3RhdGlvblRlcm0gdG8gYmUgZXZhbHVhdGVkLCBvbmx5IG9wdGlvbnMgYXJlIFwiSGlkZGVuXCIgb3IgXCJIaWRkZW5GaWx0ZXJcbiAqIEBwYXJhbSBwcm9wZXJ0eSBUaGUgcHJvcGVydHkgdG8gYmUgY2hlY2tlZFxuICogQHJldHVybnMgYHRydWVgIGlmIGl0IGlzIGEgc3RhdGljYWxseSBoaWRkZW4gb3IgaGlkZGVuIGZpbHRlciBwcm9wZXJ0eVxuICovXG5mdW5jdGlvbiBpc1Byb3BlcnR5U3RhdGljYWxseUhpZGRlbihBbm5vdGF0aW9uVGVybTogXCJIaWRkZW5cIiB8IFwiSGlkZGVuRmlsdGVyXCIsIHByb3BlcnR5PzogUHJvcGVydHkpOiBib29sZWFuIHtcblx0cmV0dXJuIHByb3BlcnR5Py5hbm5vdGF0aW9ucz8uVUk/LltBbm5vdGF0aW9uVGVybV0/LnZhbHVlT2YoKSA9PT0gdHJ1ZTtcbn1cblxuLyoqXG4gKiBDaGVjayBpZiBkYXRhRmllbGQgb3IgZGF0YVBvaW50IG1haW4gcHJvcGVydHkgaXMgcG90ZW50aWFsbHkgc2Vuc2l0aXZlLlxuICpcbiAqIEBwYXJhbSBkYXRhRmllbGQgRGF0YUZpZWxkQWJzdHJhY3RUeXBlcyBvciBEYXRhUE9pbnQuXG4gKiBAcmV0dXJucyBCb29sZWFuXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBpc1BvdGVudGlhbGx5U2Vuc2l0aXZlKGRhdGFGaWVsZDogRGF0YUZpZWxkQWJzdHJhY3RUeXBlcyB8IERhdGFQb2ludFR5cGUpOiBib29sZWFuIHtcblx0bGV0IHByb3BlcnR5O1xuXHRzd2l0Y2ggKGRhdGFGaWVsZD8uJFR5cGUpIHtcblx0XHRjYXNlIFVJQW5ub3RhdGlvblR5cGVzLkRhdGFGaWVsZDpcblx0XHRjYXNlIFVJQW5ub3RhdGlvblR5cGVzLkRhdGFGaWVsZFdpdGhVcmw6XG5cdFx0Y2FzZSBVSUFubm90YXRpb25UeXBlcy5EYXRhRmllbGRXaXRoTmF2aWdhdGlvblBhdGg6XG5cdFx0XHRwcm9wZXJ0eSA9IGRhdGFGaWVsZD8uVmFsdWU/LiR0YXJnZXQ7XG5cdFx0XHRicmVhaztcblx0XHRjYXNlIFVJQW5ub3RhdGlvblR5cGVzLkRhdGFGaWVsZEZvckFubm90YXRpb246XG5cdFx0XHRjb25zdCBkYXRhRmllbGRUYXJnZXQgPSBkYXRhRmllbGQuVGFyZ2V0LiR0YXJnZXQ7XG5cdFx0XHRpZiAoZGF0YUZpZWxkVGFyZ2V0Py50ZXJtID09PSBVSUFubm90YXRpb25UZXJtcy5EYXRhUG9pbnQpIHtcblx0XHRcdFx0cHJvcGVydHkgPSBkYXRhRmllbGRUYXJnZXQ/LlZhbHVlPy4kdGFyZ2V0O1xuXHRcdFx0fVxuXHRcdFx0aWYgKGRhdGFGaWVsZFRhcmdldD8udGVybSA9PT0gQ29tbXVuaWNhdGlvbkFubm90YXRpb25UZXJtcy5Db250YWN0KSB7XG5cdFx0XHRcdHByb3BlcnR5ID0gKGRhdGFGaWVsZFRhcmdldCBhcyBQcmltaXRpdmVUeXBlKT8uZm4/LiR0YXJnZXQ7XG5cdFx0XHR9XG5cdFx0XHRicmVhaztcblx0XHRjYXNlIFVJQW5ub3RhdGlvblR5cGVzLkRhdGFQb2ludFR5cGU6XG5cdFx0XHRwcm9wZXJ0eSA9IGRhdGFGaWVsZD8uVmFsdWU/LiR0YXJnZXQ7XG5cdFx0XHRicmVhaztcblx0XHRkZWZhdWx0OlxuXHRcdFx0YnJlYWs7XG5cdH1cblx0cmV0dXJuIHByb3BlcnR5Py5hbm5vdGF0aW9ucz8uUGVyc29uYWxEYXRhPy5Jc1BvdGVudGlhbGx5U2Vuc2l0aXZlPy52YWx1ZU9mKCkgPT09IHRydWU7XG59XG4iXSwibWFwcGluZ3MiOiI7QUFBQTtBQUFBO0FBQUE7Ozs7OztFQWVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtFQUNPLFNBQVNBLG1DQUFtQyxDQUFDQyxNQUEwQyxFQUFXO0lBQ3hHLElBQUksQ0FBQ0EsTUFBTSxFQUFFO01BQ1osT0FBTyxLQUFLO0lBQ2I7SUFDQSxTQUFTQyxnQkFBZ0IsQ0FBQ0MsUUFBa0IsRUFBVztNQUFBO01BQ3RELE1BQU1DLGdCQUFnQixHQUFHLDBCQUFBRCxRQUFRLENBQUNFLFdBQVcsQ0FBQ0MsRUFBRSwwREFBdkIsc0JBQXlCQyxnQkFBZ0IsS0FBSSxLQUFLO01BQzNFLE9BQU9DLDBCQUEwQixDQUFDLFFBQVEsRUFBRUwsUUFBUSxDQUFDLElBQUtDLGdCQUFnQixJQUFJSywyQkFBMkIsQ0FBQ0wsZ0JBQWdCLENBQUU7SUFDN0g7SUFDQSxTQUFTTSw4QkFBOEIsQ0FBQ0MsU0FBaUMsRUFBVztNQUNuRixPQUNDRiwyQkFBMkIsQ0FBQ0UsU0FBUyxDQUFDLElBQ3JDQSxTQUFTLENBQUNDLEtBQUssd0RBQTZDLElBQUlDLGlDQUFpQyxDQUFDRixTQUFTLENBQUU7SUFFaEg7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
174
+ //# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJuYW1lcyI6WyJpc1JlZmVyZW5jZVByb3BlcnR5U3RhdGljYWxseUhpZGRlbiIsInNvdXJjZSIsImlzUHJvcGVydHlIaWRkZW4iLCJwcm9wZXJ0eSIsImRhdGFGaWVsZERlZmF1bHQiLCJhbm5vdGF0aW9ucyIsIlVJIiwiRGF0YUZpZWxkRGVmYXVsdCIsImlzUHJvcGVydHlTdGF0aWNhbGx5SGlkZGVuIiwiaXNTdGF0aWNhbGx5SGlkZGVuRGF0YUZpZWxkIiwiaXNEYXRhRmllbGRBYnN0cmFjdFR5cGVzSGlkZGVuIiwiZGF0YUZpZWxkIiwiJFR5cGUiLCJpc0Fubm90YXRpb25GaWVsZFN0YXRpY2FsbHlIaWRkZW4iLCJnZXRQcm9wZXJ0eVBhdGhGcm9tUHJvcGVydHlXaXRoSGlkZGVuRmlsdGVyIiwibmFtZSIsImdldFByb3BlcnR5UGF0aEZyb21EYXRhRmllbGRXaXRoSGlkZGVuRmlsdGVyIiwiaXNEYXRhRmllbGRUeXBlcyIsIlZhbHVlIiwiJHRhcmdldCIsInBhdGgiLCJpc0hpZGRlbiIsImlzUHJvcGVydHkiLCJwcm9wZXJ0eVBhdGhXaXRoSGlkZGVuRmlsdGVyIiwic2V0TG9nTWVzc2FnZUZvckhpZGRlbkZpbHRlciIsImFubm90YXRpb25Qcm9wZXJ0eSIsIlRhcmdldCIsInRlcm0iLCJtZWFzdXJlc0hpZGRlbiIsIk1lYXN1cmVzIiwiZXZlcnkiLCJjaGFydE1lYXN1cmUiLCJMb2ciLCJ3YXJuaW5nIiwiRGF0YSIsInByb3BlcnR5VmFsdWVBbm5vdGF0aW9uIiwiaXNIZWFkZXJTdGF0aWNhbGx5SGlkZGVuIiwicHJvcGVydHlEYXRhTW9kZWwiLCJ0YXJnZXRPYmplY3QiLCJoZWFkZXJJbmZvQW5ub3RhdGlvbiIsIkhpZGRlbiIsInZhbHVlT2YiLCJoYXNPd25Qcm9wZXJ0eSIsIkFubm90YXRpb25UZXJtIiwiaXNQb3RlbnRpYWxseVNlbnNpdGl2ZSIsImRhdGFGaWVsZFRhcmdldCIsImZuIiwiUGVyc29uYWxEYXRhIiwiSXNQb3RlbnRpYWxseVNlbnNpdGl2ZSJdLCJzb3VyY2VSb290IjoiLiIsInNvdXJjZXMiOlsiRGF0YUZpZWxkSGVscGVyLnRzIl0sInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB0eXBlIHsgUHJpbWl0aXZlVHlwZSwgUHJvcGVydHkgfSBmcm9tIFwiQHNhcC11eC92b2NhYnVsYXJpZXMtdHlwZXNcIjtcbmltcG9ydCB7IENvbW11bmljYXRpb25Bbm5vdGF0aW9uVGVybXMgfSBmcm9tIFwiQHNhcC11eC92b2NhYnVsYXJpZXMtdHlwZXMvdm9jYWJ1bGFyaWVzL0NvbW11bmljYXRpb25cIjtcbmltcG9ydCB0eXBlIHtcblx0RGF0YUZpZWxkQWJzdHJhY3RUeXBlcyxcblx0RGF0YUZpZWxkRm9yQW5ub3RhdGlvblR5cGVzLFxuXHREYXRhRmllbGRUeXBlcyxcblx0RGF0YVBvaW50VHlwZSxcblx0RmllbGRHcm91cCxcblx0UmVmZXJlbmNlRmFjZXRUeXBlc1xufSBmcm9tIFwiQHNhcC11eC92b2NhYnVsYXJpZXMtdHlwZXMvdm9jYWJ1bGFyaWVzL1VJXCI7XG5pbXBvcnQgeyBVSUFubm90YXRpb25UZXJtcywgVUlBbm5vdGF0aW9uVHlwZXMgfSBmcm9tIFwiQHNhcC11eC92b2NhYnVsYXJpZXMtdHlwZXMvdm9jYWJ1bGFyaWVzL1VJXCI7XG5pbXBvcnQgTG9nIGZyb20gXCJzYXAvYmFzZS9Mb2dcIjtcbmltcG9ydCB7IGlzUHJvcGVydHkgfSBmcm9tIFwiLi4vLi4vaGVscGVycy9UeXBlR3VhcmRzXCI7XG5pbXBvcnQgdHlwZSB7IERhdGFNb2RlbE9iamVjdFBhdGggfSBmcm9tIFwiLi4vLi4vdGVtcGxhdGluZy9EYXRhTW9kZWxQYXRoSGVscGVyXCI7XG5cbi8qKlxuICogQ2hlY2tzIGZvciBzdGF0aWNhbGx5IGhpZGRlbiByZWZlcmVuY2UgcHJvcGVydGllcy5cbiAqXG4gKiBAcGFyYW0gc291cmNlIFRoZSBkYXRhRmllbGQgb3IgcHJvcGVydHkgdG8gYmUgYW5hbGl6ZWRcbiAqIEByZXR1cm5zIFdoZXRoZXIgdGhlIGFyZ3VtZW50IGhhcyBiZWVuIHNldCBhcyBoaWRkZW5cbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGlzUmVmZXJlbmNlUHJvcGVydHlTdGF0aWNhbGx5SGlkZGVuKHNvdXJjZT86IERhdGFGaWVsZEFic3RyYWN0VHlwZXMgfCBQcm9wZXJ0eSk6IGJvb2xlYW4ge1xuXHRpZiAoIXNvdXJjZSkge1xuXHRcdHJldHVybiBmYWxzZTtcblx0fVxuXHRmdW5jdGlvbiBpc1Byb3BlcnR5SGlkZGVuKHByb3BlcnR5OiBQcm9wZXJ0eSk6IGJvb2xlYW4ge1xuXHRcdGNvbnN0IGRhdGFGaWVsZERlZmF1bHQgPSBwcm9wZXJ0eS5hbm5vdGF0aW9ucy5VST8uRGF0YUZpZWxkRGVmYXVsdCB8fCBmYWxzZTtcblx0XHRyZXR1cm4gaXNQcm9wZXJ0eVN0YXRpY2FsbHlIaWRkZW4oXCJIaWRkZW5cIiwgcHJvcGVydHkpIHx8IChkYXRhRmllbGREZWZhdWx0ICYmIGlzU3RhdGljYWxseUhpZGRlbkRhdGFGaWVsZChkYXRhRmllbGREZWZhdWx0KSk7XG5cdH1cblx0ZnVuY3Rpb24gaXNEYXRhRmllbGRBYnN0cmFjdFR5cGVzSGlkZGVuKGRhdGFGaWVsZDogRGF0YUZpZWxkQWJzdHJhY3RUeXBlcyk6IGJvb2xlYW4ge1xuXHRcdHJldHVybiAoXG5cdFx0XHRpc1N0YXRpY2FsbHlIaWRkZW5EYXRhRmllbGQoZGF0YUZpZWxkKSB8fFxuXHRcdFx0KGRhdGFGaWVsZC4kVHlwZSA9PT0gVUlBbm5vdGF0aW9uVHlwZXMuRGF0YUZpZWxkRm9yQW5ub3RhdGlvbiAmJiBpc0Fubm90YXRpb25GaWVsZFN0YXRpY2FsbHlIaWRkZW4oZGF0YUZpZWxkKSlcblx0XHQpO1xuXHR9XG5cblx0ZnVuY3Rpb24gZ2V0UHJvcGVydHlQYXRoRnJvbVByb3BlcnR5V2l0aEhpZGRlbkZpbHRlcihwcm9wZXJ0eTogUHJvcGVydHkpOiBzdHJpbmcgfCBmYWxzZSB7XG5cdFx0cmV0dXJuIGlzUHJvcGVydHlTdGF0aWNhbGx5SGlkZGVuKFwiSGlkZGVuRmlsdGVyXCIsIHByb3BlcnR5KSAmJiBwcm9wZXJ0eS5uYW1lO1xuXHR9XG5cdGZ1bmN0aW9uIGdldFByb3BlcnR5UGF0aEZyb21EYXRhRmllbGRXaXRoSGlkZGVuRmlsdGVyKGRhdGFGaWVsZDogRGF0YUZpZWxkQWJzdHJhY3RUeXBlcyk6IHN0cmluZyB8IGZhbHNlIHtcblx0XHRyZXR1cm4gaXNEYXRhRmllbGRUeXBlcyhkYXRhRmllbGQpICYmIGlzUHJvcGVydHlTdGF0aWNhbGx5SGlkZGVuKFwiSGlkZGVuRmlsdGVyXCIsIGRhdGFGaWVsZC5WYWx1ZS4kdGFyZ2V0KSAmJiBkYXRhRmllbGQuVmFsdWUucGF0aDtcblx0fVxuXG5cdGNvbnN0IGlzSGlkZGVuID0gaXNQcm9wZXJ0eShzb3VyY2UpID8gaXNQcm9wZXJ0eUhpZGRlbihzb3VyY2UpIDogaXNEYXRhRmllbGRBYnN0cmFjdFR5cGVzSGlkZGVuKHNvdXJjZSk7XG5cdGNvbnN0IHByb3BlcnR5UGF0aFdpdGhIaWRkZW5GaWx0ZXIgPSBpc1Byb3BlcnR5KHNvdXJjZSlcblx0XHQ/IGdldFByb3BlcnR5UGF0aEZyb21Qcm9wZXJ0eVdpdGhIaWRkZW5GaWx0ZXIoc291cmNlKVxuXHRcdDogZ2V0UHJvcGVydHlQYXRoRnJvbURhdGFGaWVsZFdpdGhIaWRkZW5GaWx0ZXIoc291cmNlKTtcblx0aWYgKGlzSGlkZGVuICYmIHByb3BlcnR5UGF0aFdpdGhIaWRkZW5GaWx0ZXIpIHtcblx0XHRzZXRMb2dNZXNzYWdlRm9ySGlkZGVuRmlsdGVyKHByb3BlcnR5UGF0aFdpdGhIaWRkZW5GaWx0ZXIpO1xuXHR9XG5cdHJldHVybiBpc0hpZGRlbjtcbn1cblxuLyoqXG4gKiBDaGVja3MgZm9yIGRhdGEgZmllbGRzIGZvciBhbm5vdGF0aW9uIHdpdGggc3RhdGljYWxseSBoaWRkZW4gcmVmZXJlbmNlZCBwcm9wZXJ0aWVzLlxuICpcbiAqIEBwYXJhbSBhbm5vdGF0aW9uUHJvcGVydHkgVGhlIGRhdGFGaWVsZCBvciByZWZlcmVuY2UgRmFjZXQgdHlwZSB0byBiZSBhbmFseXplZFxuICogQHJldHVybnMgV2hldGhlciB0aGUgYXJndW1lbnQgaGFzIGJlZW4gc2V0IGFzIGhpZGRlblxuICovXG5leHBvcnQgZnVuY3Rpb24gaXNBbm5vdGF0aW9uRmllbGRTdGF0aWNhbGx5SGlkZGVuKGFubm90YXRpb25Qcm9wZXJ0eTogRGF0YUZpZWxkRm9yQW5ub3RhdGlvblR5cGVzIHwgUmVmZXJlbmNlRmFjZXRUeXBlcyk6IGJvb2xlYW4ge1xuXHRpZiAoaXNTdGF0aWNhbGx5SGlkZGVuRGF0YUZpZWxkKGFubm90YXRpb25Qcm9wZXJ0eSkpIHtcblx0XHRyZXR1cm4gdHJ1ZTtcblx0fVxuXHRzd2l0Y2ggKGFubm90YXRpb25Qcm9wZXJ0eS5UYXJnZXQuJHRhcmdldD8udGVybSkge1xuXHRcdGNhc2UgVUlBbm5vdGF0aW9uVGVybXMuQ2hhcnQ6XG5cdFx0XHRjb25zdCBtZWFzdXJlc0hpZGRlbiA9IGFubm90YXRpb25Qcm9wZXJ0eS5UYXJnZXQuJHRhcmdldC5NZWFzdXJlcy5ldmVyeSgoY2hhcnRNZWFzdXJlKSA9PiB7XG5cdFx0XHRcdGlmIChjaGFydE1lYXN1cmUuJHRhcmdldCAmJiBpc1Byb3BlcnR5U3RhdGljYWxseUhpZGRlbihcIkhpZGRlblwiLCBjaGFydE1lYXN1cmUuJHRhcmdldCkpIHtcblx0XHRcdFx0XHRpZiAoaXNQcm9wZXJ0eVN0YXRpY2FsbHlIaWRkZW4oXCJIaWRkZW5GaWx0ZXJcIiwgY2hhcnRNZWFzdXJlLiR0YXJnZXQpKSB7XG5cdFx0XHRcdFx0XHRzZXRMb2dNZXNzYWdlRm9ySGlkZGVuRmlsdGVyKGNoYXJ0TWVhc3VyZS4kdGFyZ2V0Lm5hbWUpO1xuXHRcdFx0XHRcdH1cblx0XHRcdFx0XHRyZXR1cm4gdHJ1ZTtcblx0XHRcdFx0fVxuXHRcdFx0fSk7XG5cdFx0XHRpZiAobWVhc3VyZXNIaWRkZW4pIHtcblx0XHRcdFx0TG9nLndhcm5pbmcoXCJXYXJuaW5nOiBBbGwgbWVhc3VyZXMgYXR0cmlidXRlIGZvciBDaGFydCBhcmUgc3RhdGljYWxseSBoaWRkZW4gaGVuY2UgY2hhcnQgY2FuJ3QgYmUgcmVuZGVyZWRcIik7XG5cdFx0XHR9XG5cdFx0XHRyZXR1cm4gbWVhc3VyZXNIaWRkZW47XG5cdFx0Y2FzZSBVSUFubm90YXRpb25UZXJtcy5GaWVsZEdyb3VwOlxuXHRcdFx0cmV0dXJuIChhbm5vdGF0aW9uUHJvcGVydHkuVGFyZ2V0LiR0YXJnZXQgYXMgRmllbGRHcm91cCkuRGF0YS5ldmVyeShpc1JlZmVyZW5jZVByb3BlcnR5U3RhdGljYWxseUhpZGRlbik7XG5cdFx0Y2FzZSBVSUFubm90YXRpb25UZXJtcy5EYXRhUG9pbnQ6XG5cdFx0XHRjb25zdCBwcm9wZXJ0eVZhbHVlQW5ub3RhdGlvbiA9IChhbm5vdGF0aW9uUHJvcGVydHkuVGFyZ2V0LiR0YXJnZXQgYXMgRGF0YVBvaW50VHlwZSkuVmFsdWUuJHRhcmdldCBhcyBQcm9wZXJ0eTtcblx0XHRcdHJldHVybiBpc1JlZmVyZW5jZVByb3BlcnR5U3RhdGljYWxseUhpZGRlbihwcm9wZXJ0eVZhbHVlQW5ub3RhdGlvbik7XG5cdFx0ZGVmYXVsdDpcblx0XHRcdHJldHVybiBmYWxzZTtcblx0fVxufVxuXG4vKipcbiAqIENoZWNrcyBpZiBoZWFkZXIgaXMgc3RhdGljYWxseSBoaWRkZW4uXG4gKlxuICogQHBhcmFtIHByb3BlcnR5RGF0YU1vZGVsIFRoZSBwcm9wZXJ0eSBEYXRhIE1vZGVsIHRvIGJlIGFuYWxpemVkXG4gKiBAcmV0dXJucyBXaGV0aGVyIHRoZSBhcmd1bWVudCBoYXMgYmVlbiBzZXQgYXMgaGlkZGVuXG4gKi9cblxuZXhwb3J0IGZ1bmN0aW9uIGlzSGVhZGVyU3RhdGljYWxseUhpZGRlbihwcm9wZXJ0eURhdGFNb2RlbD86IERhdGFNb2RlbE9iamVjdFBhdGg8RGF0YUZpZWxkQWJzdHJhY3RUeXBlcz4pOiBib29sZWFuIHtcblx0aWYgKHByb3BlcnR5RGF0YU1vZGVsPy50YXJnZXRPYmplY3QpIHtcblx0XHRjb25zdCBoZWFkZXJJbmZvQW5ub3RhdGlvbiA9IHByb3BlcnR5RGF0YU1vZGVsLnRhcmdldE9iamVjdDtcblx0XHRyZXR1cm4gaXNSZWZlcmVuY2VQcm9wZXJ0eVN0YXRpY2FsbHlIaWRkZW4oaGVhZGVySW5mb0Fubm90YXRpb24pO1xuXHR9XG5cdHJldHVybiBmYWxzZTtcbn1cblxuLyoqXG4gKiBDaGVja3MgaWYgZGF0YSBmaWVsZCBvciBSZWZlcmVuY2UgRmFjZXQgaXMgc3RhdGljYWxseSBoaWRkZW4uXG4gKlxuICogQHBhcmFtIGRhdGFGaWVsZCBUaGUgZGF0YUZpZWxkIG9yIFJlZmVyZW5jZSBGYWNldCB0byBiZSBhbmFseXplZFxuICogQHJldHVybnMgV2hldGhlciB0aGUgYXJndW1lbnQgaGFzIGJlZW4gc2V0IHN0YXRpY2FsbHkgYXMgaGlkZGVuXG4gKi9cbmZ1bmN0aW9uIGlzU3RhdGljYWxseUhpZGRlbkRhdGFGaWVsZChkYXRhRmllbGQ6IERhdGFGaWVsZEFic3RyYWN0VHlwZXMgfCBSZWZlcmVuY2VGYWNldFR5cGVzKTogYm9vbGVhbiB7XG5cdHJldHVybiAoXG5cdFx0ZGF0YUZpZWxkLmFubm90YXRpb25zPy5VST8uSGlkZGVuPy52YWx1ZU9mKCkgPT09IHRydWUgfHxcblx0XHQoaXNEYXRhRmllbGRUeXBlcyhkYXRhRmllbGQpICYmIGlzUHJvcGVydHlTdGF0aWNhbGx5SGlkZGVuKFwiSGlkZGVuXCIsIGRhdGFGaWVsZD8uVmFsdWU/LiR0YXJnZXQpKVxuXHQpO1xufVxuXG4vKipcbiAqIEFkZHMgY29uc29sZSB3YXJuaW5nIHdoZW4gc2V0dGluZyBoaWRkZW4gYW5kIGhpZGRlbiBmaWx0ZXIgdG9nZXRoZXIuXG4gKlxuICogQHBhcmFtIHBhdGggVGhlIHByb3BlcnR5IHBhdGggdG8gYmUgYWRkZWQgdG8gdGhlIHdhcm5pbmcgZXJyb3IgbWVzc2FnZVxuICovXG5mdW5jdGlvbiBzZXRMb2dNZXNzYWdlRm9ySGlkZGVuRmlsdGVyKHBhdGg6IHN0cmluZyk6IHZvaWQge1xuXHRMb2cud2FybmluZyhcblx0XHRcIldhcm5pbmc6IFByb3BlcnR5IFwiICtcblx0XHRcdHBhdGggK1xuXHRcdFx0XCIgaXMgc2V0IHdpdGggYm90aCBVSS5IaWRkZW4gYW5kIFVJLkhpZGRlbkZpbHRlciAtIHBsZWFzZSBzZXQgb25seSBvbmUgb2YgdGhlc2UhIFVJLkhpZGRlbkZpbHRlciBpcyBpZ25vcmVkIGN1cnJlbnRseSFcIlxuXHQpO1xufVxuXG4vKipcbiAqIElkZW50aWZpZXMgaWYgdGhlIGdpdmVuIGRhdGFGaWVsZEFic3RyYWN0IHRoYXQgaXMgcGFzc2VkIGlzIGEgXCJEYXRhRmllbGRUeXBlc1wiLlxuICogRGF0YUZpZWxkIGhhcyBhIHZhbHVlIGRlZmluZWQuXG4gKlxuICogQHBhcmFtIGRhdGFGaWVsZCBEYXRhRmllbGQgdG8gYmUgZXZhbHVhdGVkXG4gKiBAcmV0dXJucyBWYWxpZGF0ZSB0aGF0IGRhdGFGaWVsZCBpcyBhIERhdGFGaWVsZFR5cGVzXG4gKi9cbmZ1bmN0aW9uIGlzRGF0YUZpZWxkVHlwZXMoZGF0YUZpZWxkOiBEYXRhRmllbGRBYnN0cmFjdFR5cGVzIHwgdW5rbm93bik6IGRhdGFGaWVsZCBpcyBEYXRhRmllbGRUeXBlcyB7XG5cdHJldHVybiAoZGF0YUZpZWxkIGFzIERhdGFGaWVsZFR5cGVzKS5oYXNPd25Qcm9wZXJ0eShcIlZhbHVlXCIpO1xufVxuXG4vKipcbiAqIElkZW50aWZpZXMgaWYgdGhlIGdpdmVuIHByb3BlcnR5IGlzIHN0YXRpY2FsbHkgaGlkZGVuIG9yIGhpZGRlbiBGaWx0ZXJcIi5cbiAqXG4gKiBAcGFyYW0gQW5ub3RhdGlvblRlcm0gQW5ub3RhdGlvblRlcm0gdG8gYmUgZXZhbHVhdGVkLCBvbmx5IG9wdGlvbnMgYXJlIFwiSGlkZGVuXCIgb3IgXCJIaWRkZW5GaWx0ZXJcbiAqIEBwYXJhbSBwcm9wZXJ0eSBUaGUgcHJvcGVydHkgdG8gYmUgY2hlY2tlZFxuICogQHJldHVybnMgYHRydWVgIGlmIGl0IGlzIGEgc3RhdGljYWxseSBoaWRkZW4gb3IgaGlkZGVuIGZpbHRlciBwcm9wZXJ0eVxuICovXG5mdW5jdGlvbiBpc1Byb3BlcnR5U3RhdGljYWxseUhpZGRlbihBbm5vdGF0aW9uVGVybTogXCJIaWRkZW5cIiB8IFwiSGlkZGVuRmlsdGVyXCIsIHByb3BlcnR5PzogUHJvcGVydHkpOiBib29sZWFuIHtcblx0cmV0dXJuIHByb3BlcnR5Py5hbm5vdGF0aW9ucz8uVUk/LltBbm5vdGF0aW9uVGVybV0/LnZhbHVlT2YoKSA9PT0gdHJ1ZTtcbn1cblxuLyoqXG4gKiBDaGVjayBpZiBkYXRhRmllbGQgb3IgZGF0YVBvaW50IG1haW4gcHJvcGVydHkgaXMgcG90ZW50aWFsbHkgc2Vuc2l0aXZlLlxuICpcbiAqIEBwYXJhbSBkYXRhRmllbGQgRGF0YUZpZWxkQWJzdHJhY3RUeXBlcyBvciBEYXRhUE9pbnQuXG4gKiBAcmV0dXJucyBCb29sZWFuXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBpc1BvdGVudGlhbGx5U2Vuc2l0aXZlKGRhdGFGaWVsZDogRGF0YUZpZWxkQWJzdHJhY3RUeXBlcyB8IERhdGFQb2ludFR5cGUpOiBib29sZWFuIHtcblx0bGV0IHByb3BlcnR5O1xuXHRzd2l0Y2ggKGRhdGFGaWVsZD8uJFR5cGUpIHtcblx0XHRjYXNlIFVJQW5ub3RhdGlvblR5cGVzLkRhdGFGaWVsZDpcblx0XHRjYXNlIFVJQW5ub3RhdGlvblR5cGVzLkRhdGFGaWVsZFdpdGhVcmw6XG5cdFx0Y2FzZSBVSUFubm90YXRpb25UeXBlcy5EYXRhRmllbGRXaXRoTmF2aWdhdGlvblBhdGg6XG5cdFx0XHRwcm9wZXJ0eSA9IGRhdGFGaWVsZD8uVmFsdWU/LiR0YXJnZXQ7XG5cdFx0XHRicmVhaztcblx0XHRjYXNlIFVJQW5ub3RhdGlvblR5cGVzLkRhdGFGaWVsZEZvckFubm90YXRpb246XG5cdFx0XHRjb25zdCBkYXRhRmllbGRUYXJnZXQgPSBkYXRhRmllbGQuVGFyZ2V0LiR0YXJnZXQ7XG5cdFx0XHRpZiAoZGF0YUZpZWxkVGFyZ2V0Py50ZXJtID09PSBVSUFubm90YXRpb25UZXJtcy5EYXRhUG9pbnQpIHtcblx0XHRcdFx0cHJvcGVydHkgPSBkYXRhRmllbGRUYXJnZXQ/LlZhbHVlPy4kdGFyZ2V0O1xuXHRcdFx0fVxuXHRcdFx0aWYgKGRhdGFGaWVsZFRhcmdldD8udGVybSA9PT0gQ29tbXVuaWNhdGlvbkFubm90YXRpb25UZXJtcy5Db250YWN0KSB7XG5cdFx0XHRcdHByb3BlcnR5ID0gKGRhdGFGaWVsZFRhcmdldCBhcyBQcmltaXRpdmVUeXBlKT8uZm4/LiR0YXJnZXQ7XG5cdFx0XHR9XG5cdFx0XHRicmVhaztcblx0XHRjYXNlIFVJQW5ub3RhdGlvblR5cGVzLkRhdGFQb2ludFR5cGU6XG5cdFx0XHRwcm9wZXJ0eSA9IGRhdGFGaWVsZD8uVmFsdWU/LiR0YXJnZXQ7XG5cdFx0XHRicmVhaztcblx0XHRkZWZhdWx0OlxuXHRcdFx0YnJlYWs7XG5cdH1cblx0cmV0dXJuIHByb3BlcnR5Py5hbm5vdGF0aW9ucz8uUGVyc29uYWxEYXRhPy5Jc1BvdGVudGlhbGx5U2Vuc2l0aXZlPy52YWx1ZU9mKCkgPT09IHRydWU7XG59XG4iXSwibWFwcGluZ3MiOiI7QUFBQTtBQUFBO0FBQUE7Ozs7OztFQWVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtFQUNPLFNBQVNBLG1DQUFtQyxDQUFDQyxNQUEwQyxFQUFXO0lBQ3hHLElBQUksQ0FBQ0EsTUFBTSxFQUFFO01BQ1osT0FBTyxLQUFLO0lBQ2I7SUFDQSxTQUFTQyxnQkFBZ0IsQ0FBQ0MsUUFBa0IsRUFBVztNQUFBO01BQ3RELE1BQU1DLGdCQUFnQixHQUFHLDBCQUFBRCxRQUFRLENBQUNFLFdBQVcsQ0FBQ0MsRUFBRSwwREFBdkIsc0JBQXlCQyxnQkFBZ0IsS0FBSSxLQUFLO01BQzNFLE9BQU9DLDBCQUEwQixDQUFDLFFBQVEsRUFBRUwsUUFBUSxDQUFDLElBQUtDLGdCQUFnQixJQUFJSywyQkFBMkIsQ0FBQ0wsZ0JBQWdCLENBQUU7SUFDN0g7SUFDQSxTQUFTTSw4QkFBOEIsQ0FBQ0MsU0FBaUMsRUFBVztNQUNuRixPQUNDRiwyQkFBMkIsQ0FBQ0UsU0FBUyxDQUFDLElBQ3JDQSxTQUFTLENBQUNDLEtBQUssd0RBQTZDLElBQUlDLGlDQUFp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
@@ -92,7 +92,7 @@ export function isAnnotationFieldStaticallyHidden(annotationProperty: DataFieldF
92
92
  * @returns Whether the argument has been set as hidden
93
93
  */
94
94
 
95
- export function isHeaderStaticallyHidden(propertyDataModel?: DataModelObjectPath): boolean {
95
+ export function isHeaderStaticallyHidden(propertyDataModel?: DataModelObjectPath<DataFieldAbstractTypes>): boolean {
96
96
  if (propertyDataModel?.targetObject) {
97
97
  const headerInfoAnnotation = propertyDataModel.targetObject;
98
98
  return isReferencePropertyStaticallyHidden(headerInfoAnnotation);
@@ -89,4 +89,4 @@ sap.ui.define(["../../helpers/StableIdHelper"], function (StableIdHelper) {
89
89
  _exports.getKPIID = getKPIID;
90
90
  return _exports;
91
91
  }, false);
92
- //# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJuYW1lcyI6WyJCQVNFX0lEIiwiY3JlYXRlSURHZW5lcmF0b3IiLCJzRml4ZWRQYXJ0Iiwic0lEUGFydCIsImdlbmVyYXRlIiwiY29uY2F0IiwiZ2V0SGVhZGVyRmFjZXRJRCIsImdldEhlYWRlckZhY2V0Q29udGFpbmVySUQiLCJnZXRIZWFkZXJGYWNldEZvcm1JRCIsImdldEN1c3RvbUhlYWRlckZhY2V0SUQiLCJnZXRFZGl0YWJsZUhlYWRlclNlY3Rpb25JRCIsImdldFNlY3Rpb25JRCIsImdldEN1c3RvbVNlY3Rpb25JRCIsImdldFN1YlNlY3Rpb25JRCIsImdldEN1c3RvbVN1YlNlY3Rpb25JRCIsImdldFNpZGVDb250ZW50SUQiLCJnZXRTaWRlQ29udGVudExheW91dElEIiwic1NlY3Rpb25JRCIsImdldEZvcm1JRCIsImdldEZvcm1Db250YWluZXJJRCIsImdldEZvcm1TdGFuZGFyZEFjdGlvbkJ1dHRvbklEIiwic0Zvcm1Db250YWluZXJJZCIsInNBY3Rpb25OYW1lIiwiZ2V0VGFibGVJRCIsImdldEN1c3RvbVRhYklEIiwiZ2V0RmlsdGVyQmFySUQiLCJnZXREeW5hbWljTGlzdFJlcG9ydElEIiwiZ2V0SWNvblRhYkJhcklEIiwiZ2V0RmlsdGVyVmFyaWFudE1hbmFnZW1lbnRJRCIsInNGaWx0ZXJJRCIsImdldENoYXJ0SUQiLCJnZXRDdXN0b21BY3Rpb25JRCIsInNBY3Rpb25JRCIsImdldEtQSUlEIl0sInNvdXJjZVJvb3QiOiIuIiwic291cmNlcyI6WyJJRC50cyJdLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgdHlwZSB7IEF1dGhvcml6ZWRJZEFubm90YXRpb25zVHlwZSB9IGZyb20gXCIuLi8uLi9oZWxwZXJzL1N0YWJsZUlkSGVscGVyXCI7XG5pbXBvcnQgeyBnZW5lcmF0ZSB9IGZyb20gXCIuLi8uLi9oZWxwZXJzL1N0YWJsZUlkSGVscGVyXCI7XG50eXBlIElEUGFydCA9IHN0cmluZyB8IEF1dGhvcml6ZWRJZEFubm90YXRpb25zVHlwZTtcbmNvbnN0IEJBU0VfSUQ6IElEUGFydFtdID0gW1wiZmVcIl07XG5cbi8qKlxuICogU2hvcnRjdXQgdG8gdGhlIHN0YWJsZUlkSGVscGVyIHByb3ZpZGluZyBhIFwiY3VycnlcIiBsaWtlIG1ldGhvZCB3aGVyZSB0aGUgbGFzdCBwYXJhbWV0ZXIgaXMgbWlzc2luZy5cbiAqXG4gKiBAcGFyYW0gc0ZpeGVkUGFydFxuICogQHJldHVybnMgQSBzaG9ydGN1dCBmdW5jdGlvbiB3aXRoIHRoZSBmaXhlZCBJRCBwYXJ0XG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBjcmVhdGVJREdlbmVyYXRvciguLi5zRml4ZWRQYXJ0OiBJRFBhcnRbXSkge1xuXHRyZXR1cm4gZnVuY3Rpb24gKC4uLnNJRFBhcnQ6IElEUGFydFtdKSB7XG5cdFx0cmV0dXJuIGdlbmVyYXRlKEJBU0VfSUQuY29uY2F0KC4uLnNGaXhlZFBhcnQsIC4uLnNJRFBhcnQpKTtcblx0fTtcbn1cblxuLyoqXG4gKiBUaG9zZSBhcmUgYWxsIGhlbHBlcnMgdG8gY2VudHJhbGl6ZSBJRCBnZW5lcmF0aW9uIGluIHRoZSBjb2RlIGZvciBkaWZmZXJlbnQgZWxlbWVudHNcbiAqL1xuZXhwb3J0IGNvbnN0IGdldEhlYWRlckZhY2V0SUQgPSBjcmVhdGVJREdlbmVyYXRvcihcIkhlYWRlckZhY2V0XCIpO1xuZXhwb3J0IGNvbnN0IGdldEhlYWRlckZhY2V0Q29udGFpbmVySUQgPSBjcmVhdGVJREdlbmVyYXRvcihcIkhlYWRlckZhY2V0Q29udGFpbmVyXCIpO1xuZXhwb3J0IGNvbnN0IGdldEhlYWRlckZhY2V0Rm9ybUlEID0gY3JlYXRlSURHZW5lcmF0b3IoXCJIZWFkZXJGYWNldFwiLCBcIkZvcm1cIik7XG5leHBvcnQgY29uc3QgZ2V0Q3VzdG9tSGVhZGVyRmFjZXRJRCA9IGNyZWF0ZUlER2VuZXJhdG9yKFwiSGVhZGVyRmFjZXRDdXN0b21Db250YWluZXJcIik7XG5leHBvcnQgY29uc3QgZ2V0RWRpdGFibGVIZWFkZXJTZWN0aW9uSUQgPSBjcmVhdGVJREdlbmVyYXRvcihcIkVkaXRhYmxlSGVhZGVyU2VjdGlvblwiKTtcbmV4cG9ydCBjb25zdCBnZXRTZWN0aW9uSUQgPSBjcmVhdGVJREdlbmVyYXRvcihcIkZhY2V0U2VjdGlvblwiKTtcbmV4cG9ydCBjb25zdCBnZXRDdXN0b21TZWN0aW9uSUQgPSBjcmVhdGVJREdlbmVyYXRvcihcIkN1c3RvbVNlY3Rpb25cIik7XG5leHBvcnQgY29uc3QgZ2V0U3ViU2VjdGlvbklEID0gY3JlYXRlSURHZW5lcmF0b3IoXCJGYWNldFN1YlNlY3Rpb25cIik7XG5leHBvcnQgY29uc3QgZ2V0Q3VzdG9tU3ViU2VjdGlvbklEID0gY3JlYXRlSURHZW5lcmF0b3IoXCJDdXN0b21TdWJTZWN0aW9uXCIpO1xuZXhwb3J0IGNvbnN0IGdldFNpZGVDb250ZW50SUQgPSBjcmVhdGVJREdlbmVyYXRvcihcIlNpZGVDb250ZW50XCIpO1xuZXhwb3J0IGNvbnN0IGdldFNpZGVDb250ZW50TGF5b3V0SUQgPSBmdW5jdGlvbiAoc1NlY3Rpb25JRDogc3RyaW5nKSB7XG5cdHJldHVybiBnZW5lcmF0ZShbXCJmZVwiLCBzU2VjdGlvbklELCBcIlNpZGVDb250ZW50TGF5b3V0XCJdKTtcbn07XG5leHBvcnQgY29uc3QgZ2V0Rm9ybUlEID0gY3JlYXRlSURHZW5lcmF0b3IoXCJGb3JtXCIpO1xuZXhwb3J0IGNvbnN0IGdldEZvcm1Db250YWluZXJJRCA9IGNyZWF0ZUlER2VuZXJhdG9yKFwiRm9ybUNvbnRhaW5lclwiKTtcbmV4cG9ydCBjb25zdCBnZXRGb3JtU3RhbmRhcmRBY3Rpb25CdXR0b25JRCA9IGZ1bmN0aW9uIChzRm9ybUNvbnRhaW5lcklkOiBzdHJpbmcsIHNBY3Rpb25OYW1lOiBzdHJpbmcpIHtcblx0cmV0dXJuIGdlbmVyYXRlKFtcImZlXCIsIFwiRm9ybUNvbnRhaW5lclwiLCBzRm9ybUNvbnRhaW5lcklkLCBcIlN0YW5kYXJkQWN0aW9uXCIsIHNBY3Rpb25OYW1lXSk7XG59O1xuZXhwb3J0IGNvbnN0IGdldFRhYmxlSUQgPSBjcmVhdGVJREdlbmVyYXRvcihcInRhYmxlXCIpO1xuZXhwb3J0IGNvbnN0IGdldEN1c3RvbVRhYklEID0gY3JlYXRlSURHZW5lcmF0b3IoXCJDdXN0b21UYWJcIik7XG5leHBvcnQgY29uc3QgZ2V0RmlsdGVyQmFySUQgPSBjcmVhdGVJREdlbmVyYXRvcihcIkZpbHRlckJhclwiKTtcbmV4cG9ydCBjb25zdCBnZXREeW5hbWljTGlzdFJlcG9ydElEID0gZnVuY3Rpb24gKCkge1xuXHRyZXR1cm4gXCJmZTo6TGlzdFJlcG9ydFwiO1xufTtcbmV4cG9ydCBjb25zdCBnZXRJY29uVGFiQmFySUQgPSBjcmVhdGVJREdlbmVyYXRvcihcIlRhYk11bHRpcGxlTW9kZVwiKTtcbmV4cG9ydCBjb25zdCBnZXRGaWx0ZXJWYXJpYW50TWFuYWdlbWVudElEID0gZnVuY3Rpb24gKHNGaWx0ZXJJRDogc3RyaW5nKSB7XG5cdHJldHVybiBnZW5lcmF0ZShbc0ZpbHRlcklELCBcIlZhcmlhbnRNYW5hZ2VtZW50XCJdKTtcbn07XG5leHBvcnQgY29uc3QgZ2V0Q2hhcnRJRCA9IGNyZWF0ZUlER2VuZXJhdG9yKFwiQ2hhcnRcIik7XG5leHBvcnQgY29uc3QgZ2V0Q3VzdG9tQWN0aW9uSUQgPSBmdW5jdGlvbiAoc0FjdGlvbklEOiBzdHJpbmcpIHtcblx0cmV0dXJuIGdlbmVyYXRlKFtcIkN1c3RvbUFjdGlvblwiLCBzQWN0aW9uSURdKTtcbn07XG5leHBvcnQgY29uc3QgZ2V0S1BJSUQgPSBjcmVhdGVJREdlbmVyYXRvcihcIktQSVwiKTtcbiJdLCJtYXBwaW5ncyI6IjtBQUFBO0FBQUE7QUFBQTs7Ozs7O0VBR0EsTUFBTUEsT0FBaUIsR0FBRyxDQUFDLElBQUksQ0FBQzs7RUFFaEM7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0VBQ08sU0FBU0MsaUJBQWlCLEdBQTBCO0lBQUEsa0NBQXRCQyxVQUFVO01BQVZBLFVBQVU7SUFBQTtJQUM5QyxPQUFPLFlBQWdDO01BQUEsbUNBQW5CQyxPQUFPO1FBQVBBLE9BQU87TUFBQTtNQUMxQixPQUFPQyxRQUFRLENBQUNKLE9BQU8sQ0FBQ0ssTUFBTSxDQUFDLEdBQUdILFVBQVUsRUFBRSxHQUFHQyxPQUFPLENBQUMsQ0FBQztJQUMzRCxDQUFDO0VBQ0Y7O0VBRUE7QUFDQTtBQUNBO0VBRkE7RUFHTyxNQUFNRyxnQkFBZ0IsR0FBR0wsaUJBQWlCLENBQUMsYUFBYSxDQUFDO0VBQUM7RUFDMUQsTUFBTU0seUJBQXlCLEdBQUdOLGlCQUFpQixDQUFDLHNCQUFzQixDQUFDO0VBQUM7RUFDNUUsTUFBTU8sb0JBQW9CLEdBQUdQLGlCQUFpQixDQUFDLGFBQWEsRUFBRSxNQUFNLENBQUM7RUFBQztFQUN0RSxNQUFNUSxzQkFBc0IsR0FBR1IsaUJBQWlCLENBQUMsNEJBQTRCLENBQUM7RUFBQztFQUMvRSxNQUFNUywwQkFBMEIsR0FBR1QsaUJBQWlCLENBQUMsdUJBQXVCLENBQUM7RUFBQztFQUM5RSxNQUFNVSxZQUFZLEdBQUdWLGlCQUFpQixDQUFDLGNBQWMsQ0FBQztFQUFDO0VBQ3ZELE1BQU1XLGtCQUFrQixHQUFHWCxpQkFBaUIsQ0FBQyxlQUFlLENBQUM7RUFBQztFQUM5RCxNQUFNWSxlQUFlLEdBQUdaLGlCQUFpQixDQUFDLGlCQUFpQixDQUFDO0VBQUM7RUFDN0QsTUFBTWEscUJBQXFCLEdBQUdiLGlCQUFpQixDQUFDLGtCQUFrQixDQUFDO0VBQUM7RUFDcEUsTUFBTWMsZ0JBQWdCLEdBQUdkLGlCQUFpQixDQUFDLGFBQWEsQ0FBQztFQUFDO0VBQzFELE1BQU1lLHNCQUFzQixHQUFHLFVBQVVDLFVBQWtCLEVBQUU7SUFDbkUsT0FBT2IsUUFBUSxDQUFDLENBQUMsSUFBSSxFQUFFYSxVQUFVLEVBQUUsbUJBQW1CLENBQUMsQ0FBQztFQUN6RCxDQUFDO0VBQUM7RUFDSyxNQUFNQyxTQUFTLEdBQUdqQixpQkFBaUIsQ0FBQyxNQUFNLENBQUM7RUFBQztFQUM1QyxNQUFNa0Isa0JBQWtCLEdBQUdsQixpQkFBaUIsQ0FBQyxlQUFlLENBQUM7RUFBQztFQUM5RCxNQUFNbUIsNkJBQTZCLEdBQUcsVUFBVUMsZ0JBQXdCLEVBQUVDLFdBQW1CLEVBQUU7SUFDckcsT0FBT2xCLFFBQVEsQ0FBQyxDQUFDLElBQUksRUFBRSxlQUFlLEVBQUVpQixnQkFBZ0IsRUFBRSxnQkFBZ0IsRUFBRUMsV0FBVyxDQUFDLENBQUM7RUFDMUYsQ0FBQztFQUFDO0VBQ0ssTUFBTUMsVUFBVSxHQUFHdEIsaUJBQWlCLENBQUMsT0FBTyxDQUFDO0VBQUM7RUFDOUMsTUFBTXVCLGNBQWMsR0FBR3ZCLGlCQUFpQixDQUFDLFdBQVcsQ0FBQztFQUFDO0VBQ3RELE1BQU13QixjQUFjLEdBQUd4QixpQkFBaUIsQ0FBQyxXQUFXLENBQUM7RUFBQztFQUN0RCxNQUFNeUIsc0JBQXNCLEdBQUcsWUFBWTtJQUNqRCxPQUFPLGdCQUFnQjtFQUN4QixDQUFDO0VBQUM7RUFDSyxNQUFNQyxlQUFlLEdBQUcxQixpQkFBaUIsQ0FBQyxpQkFBaUIsQ0FBQztFQUFDO0VBQzdELE1BQU0yQiw0QkFBNEIsR0FBRyxVQUFVQyxTQUFpQixFQUFFO0lBQ3hFLE9BQU96QixRQUFRLENBQUMsQ0FBQ3lCLFNBQVMsRUFBRSxtQkFBbUIsQ0FBQyxDQUFDO0VBQ2xELENBQUM7RUFBQztFQUNLLE1BQU1DLFVBQVUsR0FBRzdCLGlCQUFpQixDQUFDLE9BQU8sQ0FBQztFQUFDO0VBQzlDLE1BQU04QixpQkFBaUIsR0FBRyxVQUFVQyxTQUFpQixFQUFFO0lBQzdELE9BQU81QixRQUFRLENBQUMsQ0FBQyxjQUFjLEVBQUU0QixTQUFTLENBQUMsQ0FBQztFQUM3QyxDQUFDO0VBQUM7RUFDSyxNQUFNQyxRQUFRLEdBQUdoQyxpQkFBaUIsQ0FBQyxLQUFLLENBQUM7RUFBQztFQUFBO0FBQUEifQ==
92
+ //# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJuYW1lcyI6WyJCQVNFX0lEIiwiY3JlYXRlSURHZW5lcmF0b3IiLCJzRml4ZWRQYXJ0Iiwic0lEUGFydCIsImdlbmVyYXRlIiwiY29uY2F0IiwiZ2V0SGVhZGVyRmFjZXRJRCIsImdldEhlYWRlckZhY2V0Q29udGFpbmVySUQiLCJnZXRIZWFkZXJGYWNldEZvcm1JRCIsImdldEN1c3RvbUhlYWRlckZhY2V0SUQiLCJnZXRFZGl0YWJsZUhlYWRlclNlY3Rpb25JRCIsImdldFNlY3Rpb25JRCIsImdldEN1c3RvbVNlY3Rpb25JRCIsImdldFN1YlNlY3Rpb25JRCIsImdldEN1c3RvbVN1YlNlY3Rpb25JRCIsImdldFNpZGVDb250ZW50SUQiLCJnZXRTaWRlQ29udGVudExheW91dElEIiwic1NlY3Rpb25JRCIsImdldEZvcm1JRCIsImdldEZvcm1Db250YWluZXJJRCIsImdldEZvcm1TdGFuZGFyZEFjdGlvbkJ1dHRvbklEIiwic0Zvcm1Db250YWluZXJJZCIsInNBY3Rpb25OYW1lIiwiZ2V0VGFibGVJRCIsImdldEN1c3RvbVRhYklEIiwiZ2V0RmlsdGVyQmFySUQiLCJnZXREeW5hbWljTGlzdFJlcG9ydElEIiwiZ2V0SWNvblRhYkJhcklEIiwiZ2V0RmlsdGVyVmFyaWFudE1hbmFnZW1lbnRJRCIsInNGaWx0ZXJJRCIsImdldENoYXJ0SUQiLCJnZXRDdXN0b21BY3Rpb25JRCIsInNBY3Rpb25JRCIsImdldEtQSUlEIl0sInNvdXJjZVJvb3QiOiIuIiwic291cmNlcyI6WyJJRC50cyJdLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgdHlwZSB7IEF1dGhvcml6ZWRJZEFubm90YXRpb25zVHlwZSB9IGZyb20gXCIuLi8uLi9oZWxwZXJzL1N0YWJsZUlkSGVscGVyXCI7XG5pbXBvcnQgeyBnZW5lcmF0ZSB9IGZyb20gXCIuLi8uLi9oZWxwZXJzL1N0YWJsZUlkSGVscGVyXCI7XG50eXBlIElEUGFydCA9IHN0cmluZyB8IEF1dGhvcml6ZWRJZEFubm90YXRpb25zVHlwZTtcbmNvbnN0IEJBU0VfSUQ6IElEUGFydFtdID0gW1wiZmVcIl07XG5cbi8qKlxuICogU2hvcnRjdXQgdG8gdGhlIHN0YWJsZUlkSGVscGVyIHByb3ZpZGluZyBhIFwiY3VycnlcIiBsaWtlIG1ldGhvZCB3aGVyZSB0aGUgbGFzdCBwYXJhbWV0ZXIgaXMgbWlzc2luZy5cbiAqXG4gKiBAcGFyYW0gc0ZpeGVkUGFydFxuICogQHJldHVybnMgQSBzaG9ydGN1dCBmdW5jdGlvbiB3aXRoIHRoZSBmaXhlZCBJRCBwYXJ0XG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBjcmVhdGVJREdlbmVyYXRvciguLi5zRml4ZWRQYXJ0OiBJRFBhcnRbXSkge1xuXHRyZXR1cm4gZnVuY3Rpb24gKC4uLnNJRFBhcnQ6IElEUGFydFtdKTogc3RyaW5nIHtcblx0XHRyZXR1cm4gZ2VuZXJhdGUoQkFTRV9JRC5jb25jYXQoLi4uc0ZpeGVkUGFydCwgLi4uc0lEUGFydCkpO1xuXHR9O1xufVxuXG4vKipcbiAqIFRob3NlIGFyZSBhbGwgaGVscGVycyB0byBjZW50cmFsaXplIElEIGdlbmVyYXRpb24gaW4gdGhlIGNvZGUgZm9yIGRpZmZlcmVudCBlbGVtZW50c1xuICovXG5leHBvcnQgY29uc3QgZ2V0SGVhZGVyRmFjZXRJRCA9IGNyZWF0ZUlER2VuZXJhdG9yKFwiSGVhZGVyRmFjZXRcIik7XG5leHBvcnQgY29uc3QgZ2V0SGVhZGVyRmFjZXRDb250YWluZXJJRCA9IGNyZWF0ZUlER2VuZXJhdG9yKFwiSGVhZGVyRmFjZXRDb250YWluZXJcIik7XG5leHBvcnQgY29uc3QgZ2V0SGVhZGVyRmFjZXRGb3JtSUQgPSBjcmVhdGVJREdlbmVyYXRvcihcIkhlYWRlckZhY2V0XCIsIFwiRm9ybVwiKTtcbmV4cG9ydCBjb25zdCBnZXRDdXN0b21IZWFkZXJGYWNldElEID0gY3JlYXRlSURHZW5lcmF0b3IoXCJIZWFkZXJGYWNldEN1c3RvbUNvbnRhaW5lclwiKTtcbmV4cG9ydCBjb25zdCBnZXRFZGl0YWJsZUhlYWRlclNlY3Rpb25JRCA9IGNyZWF0ZUlER2VuZXJhdG9yKFwiRWRpdGFibGVIZWFkZXJTZWN0aW9uXCIpO1xuZXhwb3J0IGNvbnN0IGdldFNlY3Rpb25JRCA9IGNyZWF0ZUlER2VuZXJhdG9yKFwiRmFjZXRTZWN0aW9uXCIpO1xuZXhwb3J0IGNvbnN0IGdldEN1c3RvbVNlY3Rpb25JRCA9IGNyZWF0ZUlER2VuZXJhdG9yKFwiQ3VzdG9tU2VjdGlvblwiKTtcbmV4cG9ydCBjb25zdCBnZXRTdWJTZWN0aW9uSUQgPSBjcmVhdGVJREdlbmVyYXRvcihcIkZhY2V0U3ViU2VjdGlvblwiKTtcbmV4cG9ydCBjb25zdCBnZXRDdXN0b21TdWJTZWN0aW9uSUQgPSBjcmVhdGVJREdlbmVyYXRvcihcIkN1c3RvbVN1YlNlY3Rpb25cIik7XG5leHBvcnQgY29uc3QgZ2V0U2lkZUNvbnRlbnRJRCA9IGNyZWF0ZUlER2VuZXJhdG9yKFwiU2lkZUNvbnRlbnRcIik7XG5leHBvcnQgY29uc3QgZ2V0U2lkZUNvbnRlbnRMYXlvdXRJRCA9IGZ1bmN0aW9uIChzU2VjdGlvbklEOiBzdHJpbmcpOiBzdHJpbmcge1xuXHRyZXR1cm4gZ2VuZXJhdGUoW1wiZmVcIiwgc1NlY3Rpb25JRCwgXCJTaWRlQ29udGVudExheW91dFwiXSk7XG59O1xuZXhwb3J0IGNvbnN0IGdldEZvcm1JRCA9IGNyZWF0ZUlER2VuZXJhdG9yKFwiRm9ybVwiKTtcbmV4cG9ydCBjb25zdCBnZXRGb3JtQ29udGFpbmVySUQgPSBjcmVhdGVJREdlbmVyYXRvcihcIkZvcm1Db250YWluZXJcIik7XG5leHBvcnQgY29uc3QgZ2V0Rm9ybVN0YW5kYXJkQWN0aW9uQnV0dG9uSUQgPSBmdW5jdGlvbiAoc0Zvcm1Db250YWluZXJJZDogc3RyaW5nLCBzQWN0aW9uTmFtZTogc3RyaW5nKTogc3RyaW5nIHtcblx0cmV0dXJuIGdlbmVyYXRlKFtcImZlXCIsIFwiRm9ybUNvbnRhaW5lclwiLCBzRm9ybUNvbnRhaW5lcklkLCBcIlN0YW5kYXJkQWN0aW9uXCIsIHNBY3Rpb25OYW1lXSk7XG59O1xuZXhwb3J0IGNvbnN0IGdldFRhYmxlSUQgPSBjcmVhdGVJREdlbmVyYXRvcihcInRhYmxlXCIpO1xuZXhwb3J0IGNvbnN0IGdldEN1c3RvbVRhYklEID0gY3JlYXRlSURHZW5lcmF0b3IoXCJDdXN0b21UYWJcIik7XG5leHBvcnQgY29uc3QgZ2V0RmlsdGVyQmFySUQgPSBjcmVhdGVJREdlbmVyYXRvcihcIkZpbHRlckJhclwiKTtcbmV4cG9ydCBjb25zdCBnZXREeW5hbWljTGlzdFJlcG9ydElEID0gZnVuY3Rpb24gKCk6IHN0cmluZyB7XG5cdHJldHVybiBcImZlOjpMaXN0UmVwb3J0XCI7XG59O1xuZXhwb3J0IGNvbnN0IGdldEljb25UYWJCYXJJRCA9IGNyZWF0ZUlER2VuZXJhdG9yKFwiVGFiTXVsdGlwbGVNb2RlXCIpO1xuZXhwb3J0IGNvbnN0IGdldEZpbHRlclZhcmlhbnRNYW5hZ2VtZW50SUQgPSBmdW5jdGlvbiAoc0ZpbHRlcklEOiBzdHJpbmcpOiBzdHJpbmcge1xuXHRyZXR1cm4gZ2VuZXJhdGUoW3NGaWx0ZXJJRCwgXCJWYXJpYW50TWFuYWdlbWVudFwiXSk7XG59O1xuZXhwb3J0IGNvbnN0IGdldENoYXJ0SUQgPSBjcmVhdGVJREdlbmVyYXRvcihcIkNoYXJ0XCIpO1xuZXhwb3J0IGNvbnN0IGdldEN1c3RvbUFjdGlvbklEID0gZnVuY3Rpb24gKHNBY3Rpb25JRDogc3RyaW5nKTogc3RyaW5nIHtcblx0cmV0dXJuIGdlbmVyYXRlKFtcIkN1c3RvbUFjdGlvblwiLCBzQWN0aW9uSURdKTtcbn07XG5leHBvcnQgY29uc3QgZ2V0S1BJSUQgPSBjcmVhdGVJREdlbmVyYXRvcihcIktQSVwiKTtcbiJdLCJtYXBwaW5ncyI6IjtBQUFBO0FBQUE7QUFBQTs7Ozs7O0VBR0EsTUFBTUEsT0FBaUIsR0FBRyxDQUFDLElBQUksQ0FBQzs7RUFFaEM7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0VBQ08sU0FBU0MsaUJBQWlCLEdBQTBCO0lBQUEsa0NBQXRCQyxVQUFVO01BQVZBLFVBQVU7SUFBQTtJQUM5QyxPQUFP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
@@ -10,7 +10,7 @@ const BASE_ID: IDPart[] = ["fe"];
10
10
  * @returns A shortcut function with the fixed ID part
11
11
  */
12
12
  export function createIDGenerator(...sFixedPart: IDPart[]) {
13
- return function (...sIDPart: IDPart[]) {
13
+ return function (...sIDPart: IDPart[]): string {
14
14
  return generate(BASE_ID.concat(...sFixedPart, ...sIDPart));
15
15
  };
16
16
  }
@@ -28,26 +28,26 @@ export const getCustomSectionID = createIDGenerator("CustomSection");
28
28
  export const getSubSectionID = createIDGenerator("FacetSubSection");
29
29
  export const getCustomSubSectionID = createIDGenerator("CustomSubSection");
30
30
  export const getSideContentID = createIDGenerator("SideContent");
31
- export const getSideContentLayoutID = function (sSectionID: string) {
31
+ export const getSideContentLayoutID = function (sSectionID: string): string {
32
32
  return generate(["fe", sSectionID, "SideContentLayout"]);
33
33
  };
34
34
  export const getFormID = createIDGenerator("Form");
35
35
  export const getFormContainerID = createIDGenerator("FormContainer");
36
- export const getFormStandardActionButtonID = function (sFormContainerId: string, sActionName: string) {
36
+ export const getFormStandardActionButtonID = function (sFormContainerId: string, sActionName: string): string {
37
37
  return generate(["fe", "FormContainer", sFormContainerId, "StandardAction", sActionName]);
38
38
  };
39
39
  export const getTableID = createIDGenerator("table");
40
40
  export const getCustomTabID = createIDGenerator("CustomTab");
41
41
  export const getFilterBarID = createIDGenerator("FilterBar");
42
- export const getDynamicListReportID = function () {
42
+ export const getDynamicListReportID = function (): string {
43
43
  return "fe::ListReport";
44
44
  };
45
45
  export const getIconTabBarID = createIDGenerator("TabMultipleMode");
46
- export const getFilterVariantManagementID = function (sFilterID: string) {
46
+ export const getFilterVariantManagementID = function (sFilterID: string): string {
47
47
  return generate([sFilterID, "VariantManagement"]);
48
48
  };
49
49
  export const getChartID = createIDGenerator("Chart");
50
- export const getCustomActionID = function (sActionID: string) {
50
+ export const getCustomActionID = function (sActionID: string): string {
51
51
  return generate(["CustomAction", sActionID]);
52
52
  };
53
53
  export const getKPIID = createIDGenerator("KPI");
@@ -21,7 +21,7 @@ sap.ui.define(["../../helpers/BindingToolkit", "../ManifestSettings"], function
21
21
  * @returns Boolean value for the 'visible' property of the 'AddCardToInsights' action.
22
22
  */
23
23
  function getInsightsVisibility(cardType, converterContext, visualizationPath, standardActionsContext) {
24
- var _vizPathConfiguration;
24
+ var _tableSettings;
25
25
  let tableManifestConfig, isResponsiveTable;
26
26
  const isMultiEntity = converterContext.getManifestWrapper().hasMultipleEntitySets();
27
27
  const isMultipleVisualizations = converterContext.getManifestWrapper().hasMultipleVisualizations();
@@ -29,7 +29,7 @@ sap.ui.define(["../../helpers/BindingToolkit", "../ManifestSettings"], function
29
29
  const isMultiTabs = viewConfig !== undefined && viewConfig.paths.length > 1 ? true : false;
30
30
  const templateBindingExpression = converterContext.getTemplateType() === TemplateType.ListReport;
31
31
  const vizPathConfiguration = converterContext.getManifestControlConfiguration(visualizationPath);
32
- const enableAddCardToInsights = cardType === "Analytical" ? (vizPathConfiguration === null || vizPathConfiguration === void 0 ? void 0 : vizPathConfiguration.enableAddCardToInsights) ?? true : (vizPathConfiguration === null || vizPathConfiguration === void 0 ? void 0 : (_vizPathConfiguration = vizPathConfiguration.tableSettings) === null || _vizPathConfiguration === void 0 ? void 0 : _vizPathConfiguration.enableAddCardToInsights) ?? true;
32
+ const enableAddCardToInsights = cardType === "Analytical" ? (vizPathConfiguration === null || vizPathConfiguration === void 0 ? void 0 : vizPathConfiguration.enableAddCardToInsights) ?? true : (vizPathConfiguration === null || vizPathConfiguration === void 0 ? void 0 : (_tableSettings = vizPathConfiguration.tableSettings) === null || _tableSettings === void 0 ? void 0 : _tableSettings.enableAddCardToInsights) ?? true;
33
33
  if (cardType === "Table") {
34
34
  var _tableManifestConfig;
35
35
  tableManifestConfig = standardActionsContext === null || standardActionsContext === void 0 ? void 0 : standardActionsContext.tableManifestConfiguration;
@@ -44,4 +44,4 @@ sap.ui.define(["../../helpers/BindingToolkit", "../ManifestSettings"], function
44
44
  _exports.getInsightsEnablement = getInsightsEnablement;
45
45
  return _exports;
46
46
  }, false);
47
- //# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJuYW1lcyI6WyJnZXRJbnNpZ2h0c1Zpc2liaWxpdHkiLCJjYXJkVHlwZSIsImNvbnZlcnRlckNvbnRleHQiLCJ2aXN1YWxpemF0aW9uUGF0aCIsInN0YW5kYXJkQWN0aW9uc0NvbnRleHQiLCJ0YWJsZU1hbmlmZXN0Q29uZmlnIiwiaXNSZXNwb25zaXZlVGFibGUiLCJpc011bHRpRW50aXR5IiwiZ2V0TWFuaWZlc3RXcmFwcGVyIiwiaGFzTXVsdGlwbGVFbnRpdHlTZXRzIiwiaXNNdWx0aXBsZVZpc3VhbGl6YXRpb25zIiwiaGFzTXVsdGlwbGVWaXN1YWxpemF0aW9ucyIsInZpZXdDb25maWciLCJnZXRWaWV3Q29uZmlndXJhdGlvbiIsImlzTXVsdGlUYWJzIiwidW5kZWZpbmVkIiwicGF0aHMiLCJsZW5ndGgiLCJ0ZW1wbGF0ZUJpbmRpbmdFeHByZXNzaW9uIiwiZ2V0VGVtcGxhdGVUeXBlIiwiVGVtcGxhdGVUeXBlIiwiTGlzdFJlcG9ydCIsInZpelBhdGhDb25maWd1cmF0aW9uIiwiZ2V0TWFuaWZlc3RDb250cm9sQ29uZmlndXJhdGlvbiIsImVuYWJsZUFkZENhcmRUb0luc2lnaHRzIiwidGFibGVTZXR0aW5ncyIsInRhYmxlTWFuaWZlc3RDb25maWd1cmF0aW9uIiwidHlwZSIsImFuZCIsImNvbnN0YW50IiwiZXF1YWwiLCJwYXRoSW5Nb2RlbCIsImdldEluc2lnaHRzRW5hYmxlbWVudCJdLCJzb3VyY2VSb290IjoiLiIsInNvdXJjZXMiOlsiSW5zaWdodHNIZWxwZXJzLnRzIl0sInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IGFuZCwgY29uc3RhbnQsIGVxdWFsLCBwYXRoSW5Nb2RlbCwgdHlwZSBCaW5kaW5nVG9vbGtpdEV4cHJlc3Npb24gfSBmcm9tIFwiLi4vLi4vaGVscGVycy9CaW5kaW5nVG9vbGtpdFwiO1xuaW1wb3J0IHR5cGUgeyBTdGFuZGFyZEFjdGlvbnNDb250ZXh0IH0gZnJvbSBcIi4uL2NvbnRyb2xzL0NvbW1vbi90YWJsZS9TdGFuZGFyZEFjdGlvbnNcIjtcbmltcG9ydCB0eXBlIENvbnZlcnRlckNvbnRleHQgZnJvbSBcIi4uL0NvbnZlcnRlckNvbnRleHRcIjtcbmltcG9ydCB7IFRlbXBsYXRlVHlwZSB9IGZyb20gXCIuLi9NYW5pZmVzdFNldHRpbmdzXCI7XG5cbi8qKlxuICogR2V0cyB0aGUgYm9vbGVhbiB2YWx1ZSBmb3IgdGhlICd2aXNpYmxlJyBwcm9wZXJ0eSBvZiB0aGUgJ0FkZENhcmRUb0luc2lnaHRzJyBhY3Rpb24uXG4gKlxuICogQHBhcmFtIGNhcmRUeXBlXG4gKiBAcGFyYW0gY29udmVydGVyQ29udGV4dFxuICogQHBhcmFtIHZpc3VhbGl6YXRpb25QYXRoXG4gKiBAcGFyYW0gc3RhbmRhcmRBY3Rpb25zQ29udGV4dFxuICogQHJldHVybnMgQm9vbGVhbiB2YWx1ZSBmb3IgdGhlICd2aXNpYmxlJyBwcm9wZXJ0eSBvZiB0aGUgJ0FkZENhcmRUb0luc2lnaHRzJyBhY3Rpb24uXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBnZXRJbnNpZ2h0c1Zpc2liaWxpdHkoXG5cdGNhcmRUeXBlOiBcIkFuYWx5dGljYWxcIiB8IFwiVGFibGVcIixcblx0Y29udmVydGVyQ29udGV4dDogQ29udmVydGVyQ29udGV4dCxcblx0dmlzdWFsaXphdGlvblBhdGg6IHN0cmluZyxcblx0c3RhbmRhcmRBY3Rpb25zQ29udGV4dD86IFN0YW5kYXJkQWN0aW9uc0NvbnRleHRcbik6IEJpbmRpbmdUb29sa2l0RXhwcmVzc2lvbjxib29sZWFuPiB7XG5cdGxldCB0YWJsZU1hbmlmZXN0Q29uZmlnLCBpc1Jlc3BvbnNpdmVUYWJsZTtcblxuXHRjb25zdCBpc011bHRpRW50aXR5ID0gY29udmVydGVyQ29udGV4dC5nZXRNYW5pZmVzdFdyYXBwZXIoKS5oYXNNdWx0aXBsZUVudGl0eVNldHMoKTtcblx0Y29uc3QgaXNNdWx0aXBsZVZpc3VhbGl6YXRpb25zID0gY29udmVydGVyQ29udGV4dC5nZXRNYW5pZmVzdFdyYXBwZXIoKS5oYXNNdWx0aXBsZVZpc3VhbGl6YXRpb25zKCk7XG5cdGNvbnN0IHZpZXdDb25maWcgPSBjb252ZXJ0ZXJDb250ZXh0LmdldE1hbmlmZXN0V3JhcHBlcigpLmdldFZpZXdDb25maWd1cmF0aW9uKCk7XG5cdGNvbnN0IGlzTXVsdGlUYWJzID0gdmlld0NvbmZpZyAhPT0gdW5kZWZpbmVkICYmIHZpZXdDb25maWcucGF0aHMubGVuZ3RoID4gMSA/IHRydWUgOiBmYWxzZTtcblx0Y29uc3QgdGVtcGxhdGVCaW5kaW5nRXhwcmVzc2lvbiA9IGNvbnZlcnRlckNvbnRleHQuZ2V0VGVtcGxhdGVUeXBlKCkgPT09IFRlbXBsYXRlVHlwZS5MaXN0UmVwb3J0O1xuXHRjb25zdCB2aXpQYXRoQ29uZmlndXJhdGlvbiA9IGNvbnZlcnRlckNvbnRleHQuZ2V0TWFuaWZlc3RDb250cm9sQ29uZmlndXJhdGlvbih2aXN1YWxpemF0aW9uUGF0aCk7XG5cdGNvbnN0IGVuYWJsZUFkZENhcmRUb0luc2lnaHRzID1cblx0XHRjYXJkVHlwZSA9PT0gXCJBbmFseXRpY2FsXCJcblx0XHRcdD8gdml6UGF0aENvbmZpZ3VyYXRpb24/LmVuYWJsZUFkZENhcmRUb0luc2lnaHRzID8/IHRydWVcblx0XHRcdDogdml6UGF0aENvbmZpZ3VyYXRpb24/LnRhYmxlU2V0dGluZ3M/LmVuYWJsZUFkZENhcmRUb0luc2lnaHRzID8/IHRydWU7XG5cblx0aWYgKGNhcmRUeXBlID09PSBcIlRhYmxlXCIpIHtcblx0XHR0YWJsZU1hbmlmZXN0Q29uZmlnID0gc3RhbmRhcmRBY3Rpb25zQ29udGV4dD8udGFibGVNYW5pZmVzdENvbmZpZ3VyYXRpb247XG5cdFx0aXNSZXNwb25zaXZlVGFibGUgPSB0YWJsZU1hbmlmZXN0Q29uZmlnPy50eXBlID09PSBcIlJlc3BvbnNpdmVUYWJsZVwiO1xuXHR9XG5cblx0cmV0dXJuIGFuZChcblx0XHRjb25zdGFudChlbmFibGVBZGRDYXJkVG9JbnNpZ2h0cyksXG5cdFx0Y29uc3RhbnQodGVtcGxhdGVCaW5kaW5nRXhwcmVzc2lvbiksXG5cdFx0Y29uc3RhbnQoIWlzTXVsdGlFbnRpdHkpLFxuXHRcdGNvbnN0YW50KCFpc011bHRpVGFicyksXG5cdFx0Y29uc3RhbnQoY2FyZFR5cGUgPT09IFwiVGFibGVcIiA/IChpc1Jlc3BvbnNpdmVUYWJsZSA/PyBmYWxzZSkgJiYgIWlzTXVsdGlwbGVWaXN1YWxpemF0aW9ucyA6IHRydWUpLFxuXHRcdGVxdWFsKHBhdGhJbk1vZGVsKFwiaXNJbnNpZ2h0c1N1cHBvcnRlZFwiLCBcInBhZ2VJbnRlcm5hbFwiKSwgdHJ1ZSlcblx0KTtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGdldEluc2lnaHRzRW5hYmxlbWVudCgpOiBCaW5kaW5nVG9vbGtpdEV4cHJlc3Npb248Ym9vbGVhbj4ge1xuXHRyZXR1cm4gZXF1YWwocGF0aEluTW9kZWwoXCJpc0luc2lnaHRzRW5hYmxlZFwiLCBcImludGVybmFsXCIpLCB0cnVlKTtcbn1cbiJdLCJtYXBwaW5ncyI6IjtBQUFBO0FBQUE7QUFBQTs7Ozs7Ozs7OztFQUtBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtFQUNPLFNBQVNBLHFCQUFxQixDQUNwQ0MsUUFBZ0MsRUFDaENDLGdCQUFrQyxFQUNsQ0MsaUJBQXlCLEVBQ3pCQyxzQkFBK0MsRUFDWDtJQUFBO0lBQ3BDLElBQUlDLG1CQUFtQixFQUFFQyxpQkFBaUI7SUFFMUMsTUFBTUMsYUFBYSxHQUFHTCxnQkFBZ0IsQ0FBQ00sa0JBQWtCLEVBQUUsQ0FBQ0MscUJBQXFCLEVBQUU7SUFDbkYsTUFBTUMsd0JBQXdCLEdBQUdSLGdCQUFnQixDQUFDTSxrQkFBa0IsRUFBRSxDQUFDRyx5QkFBeUIsRUFBRTtJQUNsRyxNQUFNQyxVQUFVLEdBQUdWLGdCQUFnQixDQUFDTSxrQkFBa0IsRUFBRSxDQUFDSyxvQkFBb0IsRUFBRTtJQUMvRSxNQUFNQyxXQUFXLEdBQUdGLFVBQVUsS0FBS0csU0FBUyxJQUFJSCxVQUFVLENBQUNJLEtBQUssQ0FBQ0MsTUFBTSxHQUFHLENBQUMsR0FBRyxJQUFJLEdBQUcsS0FBSztJQUMxRixNQUFNQyx5QkFBeUIsR0FBR2hCLGdCQUFnQixDQUFDaUIsZUFBZSxFQUFFLEtBQUtDLFlBQVksQ0FBQ0MsVUFBVTtJQUNoRyxNQUFNQyxvQkFBb0IsR0FBR3BCLGdCQUFnQixDQUFDcUIsK0JBQStCLENBQUNwQixpQkFBaUIsQ0FBQztJQUNoRyxNQUFNcUIsdUJBQXVCLEdBQzVCdkIsUUFBUSxLQUFLLFlBQVksR0FDdEIsQ0FBQXFCLG9CQUFvQixhQUFwQkEsb0JBQW9CLHVCQUFwQkEsb0JBQW9CLENBQUVFLHVCQUF1QixLQUFJLElBQUksR0FDckQsQ0FBQUYsb0JBQW9CLGFBQXBCQSxvQkFBb0IsZ0RBQXBCQSxvQkFBb0IsQ0FBRUcsYUFBYSwwREFBbkMsc0JBQXFDRCx1QkFBdUIsS0FBSSxJQUFJO0lBRXhFLElBQUl2QixRQUFRLEtBQUssT0FBTyxFQUFFO01BQUE7TUFDekJJLG1CQUFtQixHQUFHRCxzQkFBc0IsYUFBdEJBLHNCQUFzQix1QkFBdEJBLHNCQUFzQixDQUFFc0IsMEJBQTBCO01BQ3hFcEIsaUJBQWlCLEdBQUcseUJBQUFELG1CQUFtQix5REFBbkIscUJBQXFCc0IsSUFBSSxNQUFLLGlCQUFpQjtJQUNwRTtJQUVBLE9BQU9DLEdBQUcsQ0FDVEMsUUFBUSxDQUFDTCx1QkFBdUIsQ0FBQyxFQUNqQ0ssUUFBUSxDQUFDWCx5QkFBeUIsQ0FBQyxFQUNuQ1csUUFBUSxDQUFDLENBQUN0QixhQUFhLENBQUMsRUFDeEJzQixRQUFRLENBQUMsQ0FBQ2YsV0FBVyxDQUFDLEVBQ3RCZSxRQUFRLENBQUM1QixRQUFRLEtBQUssT0FBTyxHQUFHLENBQUNLLGlCQUFpQixJQUFJLEtBQUssS0FBSyxDQUFDSSx3QkFBd0IsR0FBRyxJQUFJLENBQUMsRUFDakdvQixLQUFLLENBQUNDLFdBQVcsQ0FBQyxxQkFBcUIsRUFBRSxjQUFjLENBQUMsRUFBRSxJQUFJLENBQUMsQ0FDL0Q7RUFDRjtFQUFDO0VBRU0sU0FBU0MscUJBQXFCLEdBQXNDO0lBQzFFLE9BQU9GLEtBQUssQ0FBQ0MsV0FBVyxDQUFDLG1CQUFtQixFQUFFLFVBQVUsQ0FBQyxFQUFFLElBQUksQ0FBQztFQUNqRTtFQUFDO0VBQUE7QUFBQSJ9
47
+ //# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJuYW1lcyI6WyJnZXRJbnNpZ2h0c1Zpc2liaWxpdHkiLCJjYXJkVHlwZSIsImNvbnZlcnRlckNvbnRleHQiLCJ2aXN1YWxpemF0aW9uUGF0aCIsInN0YW5kYXJkQWN0aW9uc0NvbnRleHQiLCJ0YWJsZU1hbmlmZXN0Q29uZmlnIiwiaXNSZXNwb25zaXZlVGFibGUiLCJpc011bHRpRW50aXR5IiwiZ2V0TWFuaWZlc3RXcmFwcGVyIiwiaGFzTXVsdGlwbGVFbnRpdHlTZXRzIiwiaXNNdWx0aXBsZVZpc3VhbGl6YXRpb25zIiwiaGFzTXVsdGlwbGVWaXN1YWxpemF0aW9ucyIsInZpZXdDb25maWciLCJnZXRWaWV3Q29uZmlndXJhdGlvbiIsImlzTXVsdGlUYWJzIiwidW5kZWZpbmVkIiwicGF0aHMiLCJsZW5ndGgiLCJ0ZW1wbGF0ZUJpbmRpbmdFeHByZXNzaW9uIiwiZ2V0VGVtcGxhdGVUeXBlIiwiVGVtcGxhdGVUeXBlIiwiTGlzdFJlcG9ydCIsInZpelBhdGhDb25maWd1cmF0aW9uIiwiZ2V0TWFuaWZlc3RDb250cm9sQ29uZmlndXJhdGlvbiIsImVuYWJsZUFkZENhcmRUb0luc2lnaHRzIiwidGFibGVTZXR0aW5ncyIsInRhYmxlTWFuaWZlc3RDb25maWd1cmF0aW9uIiwidHlwZSIsImFuZCIsImNvbnN0YW50IiwiZXF1YWwiLCJwYXRoSW5Nb2RlbCIsImdldEluc2lnaHRzRW5hYmxlbWVudCJdLCJzb3VyY2VSb290IjoiLiIsInNvdXJjZXMiOlsiSW5zaWdodHNIZWxwZXJzLnRzIl0sInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB0eXBlIHsgUGFnZUNvbnRleHRQYXRoVGFyZ2V0IH0gZnJvbSBcInNhcC9mZS9jb3JlL2NvbnZlcnRlcnMvVGVtcGxhdGVDb252ZXJ0ZXJcIjtcbmltcG9ydCB7IGFuZCwgY29uc3RhbnQsIGVxdWFsLCBwYXRoSW5Nb2RlbCwgdHlwZSBCaW5kaW5nVG9vbGtpdEV4cHJlc3Npb24gfSBmcm9tIFwiLi4vLi4vaGVscGVycy9CaW5kaW5nVG9vbGtpdFwiO1xuaW1wb3J0IHR5cGUgQ29udmVydGVyQ29udGV4dCBmcm9tIFwiLi4vQ29udmVydGVyQ29udGV4dFwiO1xuaW1wb3J0IHR5cGUgeyBDaGFydE1hbmlmZXN0Q29uZmlndXJhdGlvbiwgVGFibGVNYW5pZmVzdENvbmZpZ3VyYXRpb24gfSBmcm9tIFwiLi4vTWFuaWZlc3RTZXR0aW5nc1wiO1xuaW1wb3J0IHsgVGVtcGxhdGVUeXBlIH0gZnJvbSBcIi4uL01hbmlmZXN0U2V0dGluZ3NcIjtcbmltcG9ydCB0eXBlIHsgU3RhbmRhcmRBY3Rpb25zQ29udGV4dCB9IGZyb20gXCIuLi9jb250cm9scy9Db21tb24vdGFibGUvU3RhbmRhcmRBY3Rpb25zXCI7XG5cbi8qKlxuICogR2V0cyB0aGUgYm9vbGVhbiB2YWx1ZSBmb3IgdGhlICd2aXNpYmxlJyBwcm9wZXJ0eSBvZiB0aGUgJ0FkZENhcmRUb0luc2lnaHRzJyBhY3Rpb24uXG4gKlxuICogQHBhcmFtIGNhcmRUeXBlXG4gKiBAcGFyYW0gY29udmVydGVyQ29udGV4dFxuICogQHBhcmFtIHZpc3VhbGl6YXRpb25QYXRoXG4gKiBAcGFyYW0gc3RhbmRhcmRBY3Rpb25zQ29udGV4dFxuICogQHJldHVybnMgQm9vbGVhbiB2YWx1ZSBmb3IgdGhlICd2aXNpYmxlJyBwcm9wZXJ0eSBvZiB0aGUgJ0FkZENhcmRUb0luc2lnaHRzJyBhY3Rpb24uXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBnZXRJbnNpZ2h0c1Zpc2liaWxpdHkoXG5cdGNhcmRUeXBlOiBcIkFuYWx5dGljYWxcIiB8IFwiVGFibGVcIixcblx0Y29udmVydGVyQ29udGV4dDogQ29udmVydGVyQ29udGV4dDxQYWdlQ29udGV4dFBhdGhUYXJnZXQ+LFxuXHR2aXN1YWxpemF0aW9uUGF0aDogc3RyaW5nLFxuXHRzdGFuZGFyZEFjdGlvbnNDb250ZXh0PzogU3RhbmRhcmRBY3Rpb25zQ29udGV4dFxuKTogQmluZGluZ1Rvb2xraXRFeHByZXNzaW9uPGJvb2xlYW4+IHtcblx0bGV0IHRhYmxlTWFuaWZlc3RDb25maWcsIGlzUmVzcG9uc2l2ZVRhYmxlO1xuXG5cdGNvbnN0IGlzTXVsdGlFbnRpdHkgPSBjb252ZXJ0ZXJDb250ZXh0LmdldE1hbmlmZXN0V3JhcHBlcigpLmhhc011bHRpcGxlRW50aXR5U2V0cygpO1xuXHRjb25zdCBpc011bHRpcGxlVmlzdWFsaXphdGlvbnMgPSBjb252ZXJ0ZXJDb250ZXh0LmdldE1hbmlmZXN0V3JhcHBlcigpLmhhc011bHRpcGxlVmlzdWFsaXphdGlvbnMoKTtcblx0Y29uc3Qgdmlld0NvbmZpZyA9IGNvbnZlcnRlckNvbnRleHQuZ2V0TWFuaWZlc3RXcmFwcGVyKCkuZ2V0Vmlld0NvbmZpZ3VyYXRpb24oKTtcblx0Y29uc3QgaXNNdWx0aVRhYnMgPSB2aWV3Q29uZmlnICE9PSB1bmRlZmluZWQgJiYgdmlld0NvbmZpZy5wYXRocy5sZW5ndGggPiAxID8gdHJ1ZSA6IGZhbHNlO1xuXHRjb25zdCB0ZW1wbGF0ZUJpbmRpbmdFeHByZXNzaW9uID0gY29udmVydGVyQ29udGV4dC5nZXRUZW1wbGF0ZVR5cGUoKSA9PT0gVGVtcGxhdGVUeXBlLkxpc3RSZXBvcnQ7XG5cdGNvbnN0IHZpelBhdGhDb25maWd1cmF0aW9uID0gY29udmVydGVyQ29udGV4dC5nZXRNYW5pZmVzdENvbnRyb2xDb25maWd1cmF0aW9uPFRhYmxlTWFuaWZlc3RDb25maWd1cmF0aW9uIHwgQ2hhcnRNYW5pZmVzdENvbmZpZ3VyYXRpb24+KFxuXHRcdHZpc3VhbGl6YXRpb25QYXRoXG5cdCk7XG5cdGNvbnN0IGVuYWJsZUFkZENhcmRUb0luc2lnaHRzID0gKFxuXHRcdGNhcmRUeXBlID09PSBcIkFuYWx5dGljYWxcIlxuXHRcdFx0PyAodml6UGF0aENvbmZpZ3VyYXRpb24gYXMgQ2hhcnRNYW5pZmVzdENvbmZpZ3VyYXRpb24pPy5lbmFibGVBZGRDYXJkVG9JbnNpZ2h0cyA/PyB0cnVlXG5cdFx0XHQ6ICh2aXpQYXRoQ29uZmlndXJhdGlvbiBhcyBUYWJsZU1hbmlmZXN0Q29uZmlndXJhdGlvbik/LnRhYmxlU2V0dGluZ3M/LmVuYWJsZUFkZENhcmRUb0luc2lnaHRzID8/IHRydWVcblx0KSBhcyBib29sZWFuO1xuXG5cdGlmIChjYXJkVHlwZSA9PT0gXCJUYWJsZVwiKSB7XG5cdFx0dGFibGVNYW5pZmVzdENvbmZpZyA9IHN0YW5kYXJkQWN0aW9uc0NvbnRleHQ/LnRhYmxlTWFuaWZlc3RDb25maWd1cmF0aW9uO1xuXHRcdGlzUmVzcG9uc2l2ZVRhYmxlID0gdGFibGVNYW5pZmVzdENvbmZpZz8udHlwZSA9PT0gXCJSZXNwb25zaXZlVGFibGVcIjtcblx0fVxuXG5cdHJldHVybiBhbmQoXG5cdFx0Y29uc3RhbnQoZW5hYmxlQWRkQ2FyZFRvSW5zaWdodHMpLFxuXHRcdGNvbnN0YW50KHRlbXBsYXRlQmluZGluZ0V4cHJlc3Npb24pLFxuXHRcdGNvbnN0YW50KCFpc011bHRpRW50aXR5KSxcblx0XHRjb25zdGFudCghaXNNdWx0aVRhYnMpLFxuXHRcdGNvbnN0YW50KGNhcmRUeXBlID09PSBcIlRhYmxlXCIgPyAoaXNSZXNwb25zaXZlVGFibGUgPz8gZmFsc2UpICYmICFpc011bHRpcGxlVmlzdWFsaXphdGlvbnMgOiB0cnVlKSxcblx0XHRlcXVhbChwYXRoSW5Nb2RlbChcImlzSW5zaWdodHNTdXBwb3J0ZWRcIiwgXCJwYWdlSW50ZXJuYWxcIiksIHRydWUpXG5cdCk7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBnZXRJbnNpZ2h0c0VuYWJsZW1lbnQoKTogQmluZGluZ1Rvb2xraXRFeHByZXNzaW9uPGJvb2xlYW4+IHtcblx0cmV0dXJuIGVxdWFsKHBhdGhJbk1vZGVsKFwiaXNJbnNpZ2h0c0VuYWJsZWRcIiwgXCJpbnRlcm5hbFwiKSwgdHJ1ZSk7XG59XG4iXSwibWFwcGluZ3MiOiI7QUFBQTtBQUFBO0FBQUE7Ozs7Ozs7Ozs7RUFPQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7RUFDTyxTQUFTQSxxQkFBcUIsQ0FDcENDLFFBQWdDLEVBQ2hDQyxnQkFBeUQsRUFDekRDLGlCQUF5QixFQUN6QkMsc0JBQStDLEVBQ1g7SUFBQTtJQUNwQyxJQUFJQyxtQkFBbUIsRUFBRUMsaUJBQWlCO0lBRTFDLE1BQU1DLGFBQWEsR0FBR0wsZ0JBQWdCLENBQUNNLGtCQUFrQixFQUFFLENBQUNDLHFCQUFxQixFQUFFO0lBQ25GLE1BQU1DLHdCQUF3QixHQUFHUixnQkFBZ0IsQ0FBQ00sa0JBQWtCLEVBQUUsQ0FBQ0cseUJBQXlCLEVBQUU7SUFDbEcsTUFBTUMsVUFBVSxHQUFHVixnQkFBZ0IsQ0FBQ00sa0JBQWtCLEVBQUUsQ0FBQ0ssb0JBQW9CLEVBQUU7SUFDL0UsTUFBTUMsV0FBVyxHQUFHRixVQUFVLEtBQUtHLFNBQVMsSUFBSUgsVUFBVSxDQUFDSSxLQUFLLENBQUNDLE1BQU0sR0FBRyxDQUFDLEdBQUcsSUFBSSxHQUFHLEtBQUs7SUFDMUYsTUFBTUMseUJBQXlCLEdBQUdoQixnQkFBZ0IsQ0FBQ2lCLGVBQWUsRUFBRSxLQUFLQyxZQUFZLENBQUNDLFVBQVU7SUFDaEcsTUFBTUMsb0JBQW9CLEdBQUdwQixnQkFBZ0IsQ0FBQ3FCLCtCQUErQixDQUM1RXBCLGlCQUFpQixDQUNqQjtJQUNELE1BQU1xQix1QkFBdUIsR0FDNUJ2QixRQUFRLEtBQUssWUFBWSxHQUN0QixDQUFDcUIsb0JBQW9CLGFBQXBCQSxvQkFBb0IsdUJBQXBCQSxvQkFBb0IsQ0FBaUNFLHVCQUF1QixLQUFJLElBQUksR0FDckYsQ0FBQ0Ysb0JBQW9CLGFBQXBCQSxvQkFBb0IseUNBQXBCQSxvQkFBb0IsQ0FBaUNHLGFBQWEsbURBQW5FLGVBQXFFRCx1QkFBdUIsS0FBSSxJQUN4RjtJQUVaLElBQUl2QixRQUFRLEtBQUssT0FBTyxFQUFFO01BQUE7TUFDekJJLG1CQUFtQixHQUFHRCxzQkFBc0IsYUFBdEJBLHNCQUFzQix1QkFBdEJBLHNCQUFzQixDQUFFc0IsMEJBQTBCO01BQ3hFcEIsaUJBQWlCLEdBQUcseUJBQUFELG1CQUFtQix5REFBbkIscUJBQXFCc0IsSUFBSSxNQUFLLGlCQUFpQjtJQUNwRTtJQUVBLE9BQU9DLEdBQUcsQ0FDVEMsUUFBUSxDQUFDTCx1QkFBdUIsQ0FBQyxFQUNqQ0ssUUFBUSxDQUFDWCx5QkFBeUIsQ0FBQyxFQUNuQ1csUUFBUSxDQUFDLENBQUN0QixhQUFhLENBQUMsRUFDeEJzQixRQUFRLENBQUMsQ0FBQ2YsV0FBVyxDQUFDLEVBQ3RCZSxRQUFRLENBQUM1QixRQUFRLEtBQUssT0FBTyxHQUFHLENBQUNLLGlCQUFpQixJQUFJLEtBQUssS0FBSyxDQUFDSSx3QkFBd0IsR0FBRyxJQUFJLENBQUMsRUFDakdvQixLQUFLLENBQUNDLFdBQVcsQ0FBQyxxQkFBcUIsRUFBRSxjQUFjLENBQUMsRUFBRSxJQUFJLENBQUMsQ0FDL0Q7RUFDRjtFQUFDO0VBRU0sU0FBU0MscUJBQXFCLEdBQXNDO0lBQzFFLE9BQU9GLEtBQUssQ0FBQ0MsV0FBVyxDQUFDLG1CQUFtQixFQUFFLFVBQVUsQ0FBQyxFQUFFLElBQUksQ0FBQztFQUNqRTtFQUFDO0VBQUE7QUFBQSJ9
@@ -1,7 +1,9 @@
1
+ import type { PageContextPathTarget } from "sap/fe/core/converters/TemplateConverter";
1
2
  import { and, constant, equal, pathInModel, type BindingToolkitExpression } from "../../helpers/BindingToolkit";
2
- import type { StandardActionsContext } from "../controls/Common/table/StandardActions";
3
3
  import type ConverterContext from "../ConverterContext";
4
+ import type { ChartManifestConfiguration, TableManifestConfiguration } from "../ManifestSettings";
4
5
  import { TemplateType } from "../ManifestSettings";
6
+ import type { StandardActionsContext } from "../controls/Common/table/StandardActions";
5
7
 
6
8
  /**
7
9
  * Gets the boolean value for the 'visible' property of the 'AddCardToInsights' action.
@@ -14,7 +16,7 @@ import { TemplateType } from "../ManifestSettings";
14
16
  */
15
17
  export function getInsightsVisibility(
16
18
  cardType: "Analytical" | "Table",
17
- converterContext: ConverterContext,
19
+ converterContext: ConverterContext<PageContextPathTarget>,
18
20
  visualizationPath: string,
19
21
  standardActionsContext?: StandardActionsContext
20
22
  ): BindingToolkitExpression<boolean> {
@@ -25,11 +27,14 @@ export function getInsightsVisibility(
25
27
  const viewConfig = converterContext.getManifestWrapper().getViewConfiguration();
26
28
  const isMultiTabs = viewConfig !== undefined && viewConfig.paths.length > 1 ? true : false;
27
29
  const templateBindingExpression = converterContext.getTemplateType() === TemplateType.ListReport;
28
- const vizPathConfiguration = converterContext.getManifestControlConfiguration(visualizationPath);
29
- const enableAddCardToInsights =
30
+ const vizPathConfiguration = converterContext.getManifestControlConfiguration<TableManifestConfiguration | ChartManifestConfiguration>(
31
+ visualizationPath
32
+ );
33
+ const enableAddCardToInsights = (
30
34
  cardType === "Analytical"
31
- ? vizPathConfiguration?.enableAddCardToInsights ?? true
32
- : vizPathConfiguration?.tableSettings?.enableAddCardToInsights ?? true;
35
+ ? (vizPathConfiguration as ChartManifestConfiguration)?.enableAddCardToInsights ?? true
36
+ : (vizPathConfiguration as TableManifestConfiguration)?.tableSettings?.enableAddCardToInsights ?? true
37
+ ) as boolean;
33
38
 
34
39
  if (cardType === "Table") {
35
40
  tableManifestConfig = standardActionsContext?.tableManifestConfiguration;
@@ -24,7 +24,7 @@ sap.ui.define(["../../helpers/StableIdHelper"], function (StableIdHelper) {
24
24
  }
25
25
 
26
26
  /**
27
- * Throws a Error if any other character then aA-zZ, 0-9, ':', '_' or '-' is used.
27
+ * Throws an Error if any other character then aA-zZ, 0-9, ':', '_' or '-' is used.
28
28
  *
29
29
  * @param key String to check validity on
30
30
  */;
@@ -59,4 +59,4 @@ sap.ui.define(["../../helpers/StableIdHelper"], function (StableIdHelper) {
59
59
  _exports.KeyHelper = KeyHelper;
60
60
  return _exports;
61
61
  }, false);
62
- //# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJuYW1lcyI6WyJLZXlIZWxwZXIiLCJnZW5lcmF0ZUtleUZyb21EYXRhRmllbGQiLCJkYXRhRmllbGQiLCJnZXRTdGFibGVJZFBhcnRGcm9tRGF0YUZpZWxkIiwidmFsaWRhdGVLZXkiLCJrZXkiLCJwYXR0ZXJuIiwiZXhlYyIsIkVycm9yIiwiZ2V0U2VsZWN0aW9uRmllbGRLZXlGcm9tUGF0aCIsImZ1bGxQcm9wZXJ0eVBhdGgiLCJyZXBsYWNlIiwiZ2V0UGF0aEZyb21TZWxlY3Rpb25GaWVsZEtleSIsInNlbGVjdGlvbkZpZWxkS2V5Il0sInNvdXJjZVJvb3QiOiIuIiwic291cmNlcyI6WyJLZXkudHMiXSwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHR5cGUgeyBEYXRhRmllbGRBYnN0cmFjdFR5cGVzIH0gZnJvbSBcIkBzYXAtdXgvdm9jYWJ1bGFyaWVzLXR5cGVzL3ZvY2FidWxhcmllcy9VSVwiO1xuaW1wb3J0IHsgZ2V0U3RhYmxlSWRQYXJ0RnJvbURhdGFGaWVsZCB9IGZyb20gXCIuLi8uLi9oZWxwZXJzL1N0YWJsZUlkSGVscGVyXCI7XG5cbi8qKlxuICogVGhlIEtleUhlbHBlciBpcyB1c2VkIGZvciBkZWFsaW5nIHdpdGggS2V5IGluIHRoZSBjb25jZXJuIG9mIHRoZSBmbGV4aWJsZSBwcm9ncmFtbWluZyBtb2RlbFxuICovXG5leHBvcnQgY2xhc3MgS2V5SGVscGVyIHtcblx0LyoqXG5cdCAqIFJldHVybnMgYSBnZW5lcmF0ZWQga2V5IGZvciBEYXRhRmllbGRzIHRvIGJlIHVzZWQgaW4gdGhlIGZsZXhpYmxlIHByb2dyYW1taW5nIG1vZGVsLlxuXHQgKlxuXHQgKiBAcGFyYW0gZGF0YUZpZWxkIERhdGFGaWVsZCB0byBnZW5lcmF0ZSB0aGUga2V5IGZvclxuXHQgKiBAcmV0dXJucyBSZXR1cm5zIGEgdGhyb3VnaCBTdGFibGVJZEhlbHBlciBnZW5lcmF0ZWQga2V5XG5cdCAqL1xuXHRzdGF0aWMgZ2VuZXJhdGVLZXlGcm9tRGF0YUZpZWxkKGRhdGFGaWVsZDogRGF0YUZpZWxkQWJzdHJhY3RUeXBlcyk6IHN0cmluZyB7XG5cdFx0cmV0dXJuIGdldFN0YWJsZUlkUGFydEZyb21EYXRhRmllbGQoZGF0YUZpZWxkLCB0cnVlKSE7XG5cdH1cblxuXHQvKipcblx0ICogVGhyb3dzIGEgRXJyb3IgaWYgYW55IG90aGVyIGNoYXJhY3RlciB0aGVuIGFBLXpaLCAwLTksICc6JywgJ18nIG9yICctJyBpcyB1c2VkLlxuXHQgKlxuXHQgKiBAcGFyYW0ga2V5IFN0cmluZyB0byBjaGVjayB2YWxpZGl0eSBvblxuXHQgKi9cblx0c3RhdGljIHZhbGlkYXRlS2V5KGtleTogc3RyaW5nKSB7XG5cdFx0Y29uc3QgcGF0dGVybiA9IC9bXkEtWmEtejAtOV9cXC06XS87XG5cdFx0aWYgKHBhdHRlcm4uZXhlYyhrZXkpKSB7XG5cdFx0XHR0aHJvdyBuZXcgRXJyb3IoYEludmFsaWQga2V5OiAke2tleX0gLSBvbmx5ICdBLVphLXowLTlfLTonIGFyZSBhbGxvd2VkYCk7XG5cdFx0fVxuXHR9XG5cblx0LyoqXG5cdCAqIFJldHVybnMgdGhlIGtleSBmb3IgYSBzZWxlY3Rpb24gZmllbGQgcmVxdWlyZWQgZm9yIGFkYXB0aW9uLlxuXHQgKlxuXHQgKiBAcGFyYW0gZnVsbFByb3BlcnR5UGF0aCBUaGUgZnVsbCBwcm9wZXJ0eSBwYXRoICh3aXRob3V0IGVudGl0eVR5cGUpXG5cdCAqIEByZXR1cm5zIFRoZSBrZXkgb2YgdGhlIHNlbGVjdGlvbiBmaWVsZFxuXHQgKi9cblx0c3RhdGljIGdldFNlbGVjdGlvbkZpZWxkS2V5RnJvbVBhdGgoZnVsbFByb3BlcnR5UGF0aDogc3RyaW5nKSB7XG5cdFx0cmV0dXJuIGZ1bGxQcm9wZXJ0eVBhdGgucmVwbGFjZSgvKFsqK10pP1xcLy9nLCBcIjo6XCIpO1xuXHR9XG5cblx0LyoqXG5cdCAqIFJldHVybnMgdGhlIHBhdGggZm9yIGEgc2VsZWN0aW9uIGZpZWxkIHJlcXVpcmVkIGZvciBhZGFwdGlvbi5cblx0ICpcblx0ICogQHBhcmFtIHNlbGVjdGlvbkZpZWxkS2V5IFRoZSBrZXkgb2YgdGhlIHNlbGVjdGlvbiBmaWVsZFxuXHQgKiBAcmV0dXJucyBUaGUgZnVsbCBwcm9wZXJ0eSBwYXRoXG5cdCAqL1xuXHRzdGF0aWMgZ2V0UGF0aEZyb21TZWxlY3Rpb25GaWVsZEtleShzZWxlY3Rpb25GaWVsZEtleTogc3RyaW5nKSB7XG5cdFx0cmV0dXJuIHNlbGVjdGlvbkZpZWxkS2V5LnJlcGxhY2UoLzo6L2csIFwiL1wiKTtcblx0fVxufVxuIl0sIm1hcHBpbmdzIjoiO0FBQUE7QUFBQTtBQUFBOzs7Ozs7RUFHQTtBQUNBO0FBQ0E7RUFGQSxJQUdhQSxTQUFTO0lBQUE7SUFBQTtJQUNyQjtBQUNEO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7SUFMQyxVQU1PQyx3QkFBd0IsR0FBL0Isa0NBQWdDQyxTQUFpQyxFQUFVO01BQzFFLE9BQU9DLDRCQUE0QixDQUFDRCxTQUFTLEVBQUUsSUFBSSxDQUFDO0lBQ3JEOztJQUVBO0FBQ0Q7QUFDQTtBQUNBO0FBQ0EsT0FKQztJQUFBLFVBS09FLFdBQVcsR0FBbEIscUJBQW1CQyxHQUFXLEVBQUU7TUFDL0IsTUFBTUMsT0FBTyxHQUFHLGtCQUFrQjtNQUNsQyxJQUFJQSxPQUFPLENBQUNDLElBQUksQ0FBQ0YsR0FBRyxDQUFDLEVBQUU7UUFDdEIsTUFBTSxJQUFJRyxLQUFLLENBQUUsZ0JBQWVILEdBQUksb0NBQW1DLENBQUM7TUFDekU7SUFDRDs7SUFFQTtBQUNEO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsT0FMQztJQUFBLFVBTU9JLDRCQUE0QixHQUFuQyxzQ0FBb0NDLGdCQUF3QixFQUFFO01BQzdELE9BQU9BLGdCQUFnQixDQUFDQyxPQUFPLENBQUMsWUFBWSxFQUFFLElBQUksQ0FBQztJQUNwRDs7SUFFQTtBQUNEO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsT0FMQztJQUFBLFVBTU9DLDRCQUE0QixHQUFuQyxzQ0FBb0NDLGlCQUF5QixFQUFFO01BQzlELE9BQU9BLGlCQUFpQixDQUFDRixPQUFPLENBQUMsS0FBSyxFQUFFLEdBQUcsQ0FBQztJQUM3QyxDQUFDO0lBQUE7RUFBQTtFQUFBO0VBQUE7QUFBQSJ9
62
+ //# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJuYW1lcyI6WyJLZXlIZWxwZXIiLCJnZW5lcmF0ZUtleUZyb21EYXRhRmllbGQiLCJkYXRhRmllbGQiLCJnZXRTdGFibGVJZFBhcnRGcm9tRGF0YUZpZWxkIiwidmFsaWRhdGVLZXkiLCJrZXkiLCJwYXR0ZXJuIiwiZXhlYyIsIkVycm9yIiwiZ2V0U2VsZWN0aW9uRmllbGRLZXlGcm9tUGF0aCIsImZ1bGxQcm9wZXJ0eVBhdGgiLCJyZXBsYWNlIiwiZ2V0UGF0aEZyb21TZWxlY3Rpb25GaWVsZEtleSIsInNlbGVjdGlvbkZpZWxkS2V5Il0sInNvdXJjZVJvb3QiOiIuIiwic291cmNlcyI6WyJLZXkudHMiXSwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHR5cGUgeyBEYXRhRmllbGRBYnN0cmFjdFR5cGVzIH0gZnJvbSBcIkBzYXAtdXgvdm9jYWJ1bGFyaWVzLXR5cGVzL3ZvY2FidWxhcmllcy9VSVwiO1xuaW1wb3J0IHsgZ2V0U3RhYmxlSWRQYXJ0RnJvbURhdGFGaWVsZCB9IGZyb20gXCIuLi8uLi9oZWxwZXJzL1N0YWJsZUlkSGVscGVyXCI7XG5cbi8qKlxuICogVGhlIEtleUhlbHBlciBpcyB1c2VkIGZvciBkZWFsaW5nIHdpdGggS2V5IGluIHRoZSBjb25jZXJuIG9mIHRoZSBmbGV4aWJsZSBwcm9ncmFtbWluZyBtb2RlbFxuICovXG5leHBvcnQgY2xhc3MgS2V5SGVscGVyIHtcblx0LyoqXG5cdCAqIFJldHVybnMgYSBnZW5lcmF0ZWQga2V5IGZvciBEYXRhRmllbGRzIHRvIGJlIHVzZWQgaW4gdGhlIGZsZXhpYmxlIHByb2dyYW1taW5nIG1vZGVsLlxuXHQgKlxuXHQgKiBAcGFyYW0gZGF0YUZpZWxkIERhdGFGaWVsZCB0byBnZW5lcmF0ZSB0aGUga2V5IGZvclxuXHQgKiBAcmV0dXJucyBSZXR1cm5zIGEgdGhyb3VnaCBTdGFibGVJZEhlbHBlciBnZW5lcmF0ZWQga2V5XG5cdCAqL1xuXHRzdGF0aWMgZ2VuZXJhdGVLZXlGcm9tRGF0YUZpZWxkKGRhdGFGaWVsZDogRGF0YUZpZWxkQWJzdHJhY3RUeXBlcyk6IHN0cmluZyB7XG5cdFx0cmV0dXJuIGdldFN0YWJsZUlkUGFydEZyb21EYXRhRmllbGQoZGF0YUZpZWxkLCB0cnVlKSE7XG5cdH1cblxuXHQvKipcblx0ICogVGhyb3dzIGFuIEVycm9yIGlmIGFueSBvdGhlciBjaGFyYWN0ZXIgdGhlbiBhQS16WiwgMC05LCAnOicsICdfJyBvciAnLScgaXMgdXNlZC5cblx0ICpcblx0ICogQHBhcmFtIGtleSBTdHJpbmcgdG8gY2hlY2sgdmFsaWRpdHkgb25cblx0ICovXG5cdHN0YXRpYyB2YWxpZGF0ZUtleShrZXk6IHN0cmluZyk6IHZvaWQge1xuXHRcdGNvbnN0IHBhdHRlcm4gPSAvW15BLVphLXowLTlfXFwtOl0vO1xuXHRcdGlmIChwYXR0ZXJuLmV4ZWMoa2V5KSkge1xuXHRcdFx0dGhyb3cgbmV3IEVycm9yKGBJbnZhbGlkIGtleTogJHtrZXl9IC0gb25seSAnQS1aYS16MC05Xy06JyBhcmUgYWxsb3dlZGApO1xuXHRcdH1cblx0fVxuXG5cdC8qKlxuXHQgKiBSZXR1cm5zIHRoZSBrZXkgZm9yIGEgc2VsZWN0aW9uIGZpZWxkIHJlcXVpcmVkIGZvciBhZGFwdGlvbi5cblx0ICpcblx0ICogQHBhcmFtIGZ1bGxQcm9wZXJ0eVBhdGggVGhlIGZ1bGwgcHJvcGVydHkgcGF0aCAod2l0aG91dCBlbnRpdHlUeXBlKVxuXHQgKiBAcmV0dXJucyBUaGUga2V5IG9mIHRoZSBzZWxlY3Rpb24gZmllbGRcblx0ICovXG5cdHN0YXRpYyBnZXRTZWxlY3Rpb25GaWVsZEtleUZyb21QYXRoKGZ1bGxQcm9wZXJ0eVBhdGg6IHN0cmluZyk6IHN0cmluZyB7XG5cdFx0cmV0dXJuIGZ1bGxQcm9wZXJ0eVBhdGgucmVwbGFjZSgvKFsqK10pP1xcLy9nLCBcIjo6XCIpO1xuXHR9XG5cblx0LyoqXG5cdCAqIFJldHVybnMgdGhlIHBhdGggZm9yIGEgc2VsZWN0aW9uIGZpZWxkIHJlcXVpcmVkIGZvciBhZGFwdGlvbi5cblx0ICpcblx0ICogQHBhcmFtIHNlbGVjdGlvbkZpZWxkS2V5IFRoZSBrZXkgb2YgdGhlIHNlbGVjdGlvbiBmaWVsZFxuXHQgKiBAcmV0dXJucyBUaGUgZnVsbCBwcm9wZXJ0eSBwYXRoXG5cdCAqL1xuXHRzdGF0aWMgZ2V0UGF0aEZyb21TZWxlY3Rpb25GaWVsZEtleShzZWxlY3Rpb25GaWVsZEtleTogc3RyaW5nKTogc3RyaW5nIHtcblx0XHRyZXR1cm4gc2VsZWN0aW9uRmllbGRLZXkucmVwbGFjZSgvOjovZywgXCIvXCIpO1xuXHR9XG59XG4iXSwibWFwcGluZ3MiOiI7QUFBQTtBQUFBO0FBQUE7Ozs7OztFQUdBO0FBQ0E7QUFDQTtFQUZBLElBR2FBLFNBQVM7SUFBQTtJQUFBO0lBQ3JCO0FBQ0Q7QUFDQTtBQUNBO0FBQ0E7QUFDQTtJQUxDLFVBTU9DLHdCQUF3QixHQUEvQixrQ0FBZ0NDLFNBQWlDLEVBQVU7TUFDMUUsT0FBT0MsNEJBQTRCLENBQUNELFNBQVMsRUFBRSxJQUFJLENBQUM7SUFDckQ7O0lBRUE7QUFDRDtBQUNBO0FBQ0E7QUFDQSxPQUpDO0lBQUEsVUFLT0UsV0FBVyxHQUFsQixxQkFBbUJDLEdBQVcsRUFBUTtNQUNyQyxNQUFNQyxPQUFPLEdBQUcsa0JBQWtCO01BQ2xDLElBQUlBLE9BQU8sQ0FBQ0MsSUFBSSxDQUFDRixHQUFHLENBQUMsRUFBRTtRQUN0QixNQUFNLElBQUlHLEtBQUssQ0FBRSxnQkFBZUgsR0FBSSxvQ0FBbUMsQ0FBQztNQUN6RTtJQUNEOztJQUVBO0FBQ0Q7QUFDQTtBQUNBO0FBQ0E7QUFDQSxPQUxDO0lBQUEsVUFNT0ksNEJBQTRCLEdBQW5DLHNDQUFvQ0MsZ0JBQXdCLEVBQVU7TUFDckUsT0FBT0EsZ0JBQWdCLENBQUNDLE9BQU8sQ0FBQyxZQUFZLEVBQUUsSUFBSSxDQUFDO0lBQ3BEOztJQUVBO0FBQ0Q7QUFDQTtBQUNBO0FBQ0E7QUFDQSxPQUxDO0lBQUEsVUFNT0MsNEJBQTRCLEdBQW5DLHNDQUFvQ0MsaUJBQXlCLEVBQVU7TUFDdEUsT0FBT0EsaUJBQWlCLENBQUNGLE9BQU8sQ0FBQyxLQUFLLEVBQUUsR0FBRyxDQUFDO0lBQzdDLENBQUM7SUFBQTtFQUFBO0VBQUE7RUFBQTtBQUFBIn0=
@@ -16,11 +16,11 @@ export class KeyHelper {
16
16
  }
17
17
 
18
18
  /**
19
- * Throws a Error if any other character then aA-zZ, 0-9, ':', '_' or '-' is used.
19
+ * Throws an Error if any other character then aA-zZ, 0-9, ':', '_' or '-' is used.
20
20
  *
21
21
  * @param key String to check validity on
22
22
  */
23
- static validateKey(key: string) {
23
+ static validateKey(key: string): void {
24
24
  const pattern = /[^A-Za-z0-9_\-:]/;
25
25
  if (pattern.exec(key)) {
26
26
  throw new Error(`Invalid key: ${key} - only 'A-Za-z0-9_-:' are allowed`);
@@ -33,7 +33,7 @@ export class KeyHelper {
33
33
  * @param fullPropertyPath The full property path (without entityType)
34
34
  * @returns The key of the selection field
35
35
  */
36
- static getSelectionFieldKeyFromPath(fullPropertyPath: string) {
36
+ static getSelectionFieldKeyFromPath(fullPropertyPath: string): string {
37
37
  return fullPropertyPath.replace(/([*+])?\//g, "::");
38
38
  }
39
39
 
@@ -43,7 +43,7 @@ export class KeyHelper {
43
43
  * @param selectionFieldKey The key of the selection field
44
44
  * @returns The full property path
45
45
  */
46
- static getPathFromSelectionFieldKey(selectionFieldKey: string) {
46
+ static getPathFromSelectionFieldKey(selectionFieldKey: string): string {
47
47
  return selectionFieldKey.replace(/::/g, "/");
48
48
  }
49
49
  }