@sapui5/sap.fe.templates 1.110.0 → 1.111.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 (142) hide show
  1. package/package.json +2 -20
  2. package/src/sap/fe/templates/.library +1 -1
  3. package/src/sap/fe/templates/AnalyticalListPage/Component-dbg.js +21 -0
  4. package/src/sap/fe/templates/AnalyticalListPage/Component.js +3 -18
  5. package/src/sap/fe/templates/AnalyticalListPage/Component.js.map +1 -0
  6. package/src/sap/fe/templates/AnalyticalListPage/chart/FEChartDelegate-dbg.js +32 -0
  7. package/src/sap/fe/templates/AnalyticalListPage/chart/FEChartDelegate.js +3 -29
  8. package/src/sap/fe/templates/AnalyticalListPage/chart/FEChartDelegate.js.map +1 -0
  9. package/src/sap/fe/templates/AnalyticalListPage/manifest.json +1 -1
  10. package/src/sap/fe/templates/ListComponent-dbg.js +146 -0
  11. package/src/sap/fe/templates/ListComponent.js +3 -143
  12. package/src/sap/fe/templates/ListComponent.js.map +1 -0
  13. package/src/sap/fe/templates/ListReport/Component-dbg.js +77 -0
  14. package/src/sap/fe/templates/ListReport/Component.js +3 -74
  15. package/src/sap/fe/templates/ListReport/Component.js.map +1 -0
  16. package/src/sap/fe/templates/ListReport/ExtensionAPI-dbg.js +147 -0
  17. package/src/sap/fe/templates/ListReport/ExtensionAPI.js +3 -144
  18. package/src/sap/fe/templates/ListReport/ExtensionAPI.js.map +1 -0
  19. package/src/sap/fe/templates/ListReport/LRMessageStrip-dbg.js +191 -0
  20. package/src/sap/fe/templates/ListReport/LRMessageStrip.js +3 -193
  21. package/src/sap/fe/templates/ListReport/LRMessageStrip.js.map +1 -0
  22. package/src/sap/fe/templates/ListReport/ListReport.view.xml +1 -0
  23. package/src/sap/fe/templates/ListReport/ListReportController-dbg.controller.js +799 -0
  24. package/src/sap/fe/templates/ListReport/ListReportController.controller.js +3 -832
  25. package/src/sap/fe/templates/ListReport/ListReportController.controller.js.map +1 -0
  26. package/src/sap/fe/templates/ListReport/ListReportController.controller.ts +6 -24
  27. package/src/sap/fe/templates/ListReport/ListReportTemplating-dbg.js +40 -0
  28. package/src/sap/fe/templates/ListReport/ListReportTemplating.js +3 -37
  29. package/src/sap/fe/templates/ListReport/ListReportTemplating.js.map +1 -0
  30. package/src/sap/fe/templates/ListReport/controls/MultipleModeControl-dbg.js +375 -0
  31. package/src/sap/fe/templates/ListReport/controls/MultipleModeControl.js +3 -378
  32. package/src/sap/fe/templates/ListReport/controls/MultipleModeControl.js.map +1 -0
  33. package/src/sap/fe/templates/ListReport/controls/MultipleModeControl.ts +10 -3
  34. package/src/sap/fe/templates/ListReport/manifest.json +1 -1
  35. package/src/sap/fe/templates/ListReport/overrides/IntentBasedNavigation-dbg.js +53 -0
  36. package/src/sap/fe/templates/ListReport/overrides/IntentBasedNavigation.js +3 -50
  37. package/src/sap/fe/templates/ListReport/overrides/IntentBasedNavigation.js.map +1 -0
  38. package/src/sap/fe/templates/ListReport/overrides/Share-dbg.js +109 -0
  39. package/src/sap/fe/templates/ListReport/overrides/Share.js +3 -107
  40. package/src/sap/fe/templates/ListReport/overrides/Share.js.map +1 -0
  41. package/src/sap/fe/templates/ListReport/overrides/ViewState-dbg.js +481 -0
  42. package/src/sap/fe/templates/ListReport/overrides/ViewState.js +3 -428
  43. package/src/sap/fe/templates/ListReport/overrides/ViewState.js.map +1 -0
  44. package/src/sap/fe/templates/ListReport/overrides/ViewState.ts +164 -32
  45. package/src/sap/fe/templates/ListReport/view/fragments/CustomView.fragment.xml +0 -3
  46. package/src/sap/fe/templates/ListReport/view/fragments/MacroChart.fragment.xml +2 -0
  47. package/src/sap/fe/templates/ListReport/view/fragments/MultipleMode-dbg.fragment.js +123 -0
  48. package/src/sap/fe/templates/ListReport/view/fragments/MultipleMode.fragment.js +29 -63
  49. package/src/sap/fe/templates/ListReport/view/fragments/MultipleMode.fragment.js.map +1 -0
  50. package/src/sap/fe/templates/ListReport/view/fragments/MultipleMode.fragment.ts +2 -2
  51. package/src/sap/fe/templates/ObjectPage/Component-dbg.js +150 -0
  52. package/src/sap/fe/templates/ObjectPage/Component.js +3 -148
  53. package/src/sap/fe/templates/ObjectPage/Component.js.map +1 -0
  54. package/src/sap/fe/templates/ObjectPage/ExtendPageDefinition-dbg.js +57 -0
  55. package/src/sap/fe/templates/ObjectPage/ExtendPageDefinition.js +3 -61
  56. package/src/sap/fe/templates/ObjectPage/ExtendPageDefinition.js.map +1 -0
  57. package/src/sap/fe/templates/ObjectPage/ExtensionAPI-dbg.js +222 -0
  58. package/src/sap/fe/templates/ObjectPage/ExtensionAPI.js +3 -243
  59. package/src/sap/fe/templates/ObjectPage/ExtensionAPI.js.map +1 -0
  60. package/src/sap/fe/templates/ObjectPage/ObjectPage.view.xml +2 -2
  61. package/src/sap/fe/templates/ObjectPage/ObjectPageController-dbg.controller.js +1413 -0
  62. package/src/sap/fe/templates/ObjectPage/ObjectPageController.controller.js +3 -1534
  63. package/src/sap/fe/templates/ObjectPage/ObjectPageController.controller.js.map +1 -0
  64. package/src/sap/fe/templates/ObjectPage/ObjectPageController.controller.ts +11 -14
  65. package/src/sap/fe/templates/ObjectPage/ObjectPageTemplating-dbg.js +851 -0
  66. package/src/sap/fe/templates/ObjectPage/ObjectPageTemplating.js +3 -851
  67. package/src/sap/fe/templates/ObjectPage/ObjectPageTemplating.js.map +1 -0
  68. package/src/sap/fe/templates/ObjectPage/ObjectPageTemplating.ts +14 -4
  69. package/src/sap/fe/templates/ObjectPage/components/DraftHandlerButton-dbg.js +147 -0
  70. package/src/sap/fe/templates/ObjectPage/components/DraftHandlerButton.js +3 -144
  71. package/src/sap/fe/templates/ObjectPage/components/DraftHandlerButton.js.map +1 -0
  72. package/src/sap/fe/templates/ObjectPage/components/DraftHandlerButton.tsx +5 -6
  73. package/src/sap/fe/templates/ObjectPage/controls/StashableHBox-dbg.js +111 -0
  74. package/src/sap/fe/templates/ObjectPage/controls/StashableHBox.js +3 -108
  75. package/src/sap/fe/templates/ObjectPage/controls/StashableHBox.js.map +1 -0
  76. package/src/sap/fe/templates/ObjectPage/controls/StashableVBox-dbg.js +24 -0
  77. package/src/sap/fe/templates/ObjectPage/controls/StashableVBox.js +3 -21
  78. package/src/sap/fe/templates/ObjectPage/controls/StashableVBox.js.map +1 -0
  79. package/src/sap/fe/templates/ObjectPage/controls/SubSectionBlock-dbg.js +79 -0
  80. package/src/sap/fe/templates/ObjectPage/controls/SubSectionBlock.js +3 -76
  81. package/src/sap/fe/templates/ObjectPage/controls/SubSectionBlock.js.map +1 -0
  82. package/src/sap/fe/templates/ObjectPage/designtime/FlexBox-dbg.designtime.js +23 -0
  83. package/src/sap/fe/templates/ObjectPage/designtime/FlexBox.designtime.js +3 -20
  84. package/src/sap/fe/templates/ObjectPage/designtime/FlexBox.designtime.js.map +1 -0
  85. package/src/sap/fe/templates/ObjectPage/designtime/StashableHBox-dbg.designtime.js +52 -0
  86. package/src/sap/fe/templates/ObjectPage/designtime/StashableHBox.designtime.js +3 -49
  87. package/src/sap/fe/templates/ObjectPage/designtime/StashableHBox.designtime.js.map +1 -0
  88. package/src/sap/fe/templates/ObjectPage/designtime/StashableVBox-dbg.designtime.js +38 -0
  89. package/src/sap/fe/templates/ObjectPage/designtime/StashableVBox.designtime.js +3 -35
  90. package/src/sap/fe/templates/ObjectPage/designtime/StashableVBox.designtime.js.map +1 -0
  91. package/src/sap/fe/templates/ObjectPage/flexibility/ScrollableHeaderContainer.flexibility-dbg.js +28 -0
  92. package/src/sap/fe/templates/ObjectPage/flexibility/ScrollableHeaderContainer.flexibility.js +3 -29
  93. package/src/sap/fe/templates/ObjectPage/flexibility/ScrollableHeaderContainer.flexibility.js.map +1 -0
  94. package/src/sap/fe/templates/ObjectPage/flexibility/StashableHBox.flexibility-dbg.js +19 -0
  95. package/src/sap/fe/templates/ObjectPage/flexibility/StashableHBox.flexibility.js +3 -16
  96. package/src/sap/fe/templates/ObjectPage/flexibility/StashableHBox.flexibility.js.map +1 -0
  97. package/src/sap/fe/templates/ObjectPage/flexibility/StashableVBox.flexibility-dbg.js +15 -0
  98. package/src/sap/fe/templates/ObjectPage/flexibility/StashableVBox.flexibility.js +3 -12
  99. package/src/sap/fe/templates/ObjectPage/flexibility/StashableVBox.flexibility.js.map +1 -0
  100. package/src/sap/fe/templates/ObjectPage/manifest.json +1 -1
  101. package/src/sap/fe/templates/ObjectPage/overrides/IntentBasedNavigation-dbg.js +54 -0
  102. package/src/sap/fe/templates/ObjectPage/overrides/IntentBasedNavigation.js +3 -51
  103. package/src/sap/fe/templates/ObjectPage/overrides/IntentBasedNavigation.js.map +1 -0
  104. package/src/sap/fe/templates/ObjectPage/overrides/InternalRouting-dbg.js +36 -0
  105. package/src/sap/fe/templates/ObjectPage/overrides/InternalRouting.js +3 -33
  106. package/src/sap/fe/templates/ObjectPage/overrides/InternalRouting.js.map +1 -0
  107. package/src/sap/fe/templates/ObjectPage/overrides/MessageHandler-dbg.js +16 -0
  108. package/src/sap/fe/templates/ObjectPage/overrides/MessageHandler.js +3 -13
  109. package/src/sap/fe/templates/ObjectPage/overrides/MessageHandler.js.map +1 -0
  110. package/src/sap/fe/templates/ObjectPage/overrides/Paginator-dbg.js +27 -0
  111. package/src/sap/fe/templates/ObjectPage/overrides/Paginator.js +3 -24
  112. package/src/sap/fe/templates/ObjectPage/overrides/Paginator.js.map +1 -0
  113. package/src/sap/fe/templates/ObjectPage/overrides/Share-dbg.js +276 -0
  114. package/src/sap/fe/templates/ObjectPage/overrides/Share.js +3 -293
  115. package/src/sap/fe/templates/ObjectPage/overrides/Share.js.map +1 -0
  116. package/src/sap/fe/templates/ObjectPage/overrides/ViewState-dbg.js +69 -0
  117. package/src/sap/fe/templates/ObjectPage/overrides/ViewState.js +3 -63
  118. package/src/sap/fe/templates/ObjectPage/overrides/ViewState.js.map +1 -0
  119. package/src/sap/fe/templates/ObjectPage/overrides/ViewState.ts +3 -0
  120. package/src/sap/fe/templates/ObjectPage/view/fragments/Actions.fragment.xml +2 -2
  121. package/src/sap/fe/templates/ObjectPage/view/fragments/HeaderFacetCustomContainer.fragment.xml +1 -2
  122. package/src/sap/fe/templates/ObjectPage/view/fragments/MacroChart.fragment.xml +2 -0
  123. package/src/sap/fe/templates/ObjectPage/view/fragments/ObjectPageHeaderContact.fragment.xml +2 -2
  124. package/src/sap/fe/templates/ObjectPage/view/fragments/ObjectPageHeaderForm.fragment.xml +12 -1
  125. package/src/sap/fe/templates/ObjectPage/view/fragments/Section.fragment.xml +0 -2
  126. package/src/sap/fe/templates/ObjectPage/view/fragments/SectionContent.fragment.xml +0 -2
  127. package/src/sap/fe/templates/ObjectPage/view/fragments/SectionContentLazyLoader.fragment.xml +0 -2
  128. package/src/sap/fe/templates/ObjectPage/view/fragments/SectionCustomSection.fragment.xml +2 -9
  129. package/src/sap/fe/templates/ObjectPage/view/fragments/SideContentCustomContainer.fragment.xml +1 -2
  130. package/src/sap/fe/templates/TableScroller-dbg.js +49 -0
  131. package/src/sap/fe/templates/TableScroller.js +3 -46
  132. package/src/sap/fe/templates/TableScroller.js.map +1 -0
  133. package/src/sap/fe/templates/designtime/library-preload.designtime.js +17 -0
  134. package/src/sap/fe/templates/designtime/library-preload.designtime.js.map +1 -0
  135. package/src/sap/fe/templates/library-dbg.js +66 -0
  136. package/src/sap/fe/templates/library-preload.js +236 -0
  137. package/src/sap/fe/templates/library-preload.js.map +1 -0
  138. package/src/sap/fe/templates/library.js +3 -56
  139. package/src/sap/fe/templates/library.js.map +1 -0
  140. package/src/sap/fe/templates/library.ts +4 -0
  141. package/src/sap/fe/templates/manifest.json +109 -0
  142. package/src/sap/fe/templates/messagebundle_fr.properties +1 -1
@@ -1,835 +1,6 @@
1
1
  /*!
2
2
  * SAP UI development toolkit for HTML5 (SAPUI5)
3
- * (c) Copyright 2009-2021 SAP SE. All rights reserved
3
+ * (c) Copyright 2009-2023 SAP SE. All rights reserved
4
4
  */
5
- sap.ui.define(["sap/base/Log", "sap/base/util/ObjectPath", "sap/fe/core/ActionRuntime", "sap/fe/core/CommonUtils", "sap/fe/core/controllerextensions/IntentBasedNavigation", "sap/fe/core/controllerextensions/InternalIntentBasedNavigation", "sap/fe/core/controllerextensions/InternalRouting", "sap/fe/core/controllerextensions/KPIManagement", "sap/fe/core/controllerextensions/MassEdit", "sap/fe/core/controllerextensions/Placeholder", "sap/fe/core/controllerextensions/Share", "sap/fe/core/controllerextensions/SideEffects", "sap/fe/core/controllerextensions/ViewState", "sap/fe/core/helpers/ClassSupport", "sap/fe/core/helpers/EditState", "sap/fe/core/helpers/MessageStrip", "sap/fe/core/helpers/StableIdHelper", "sap/fe/core/library", "sap/fe/core/PageController", "sap/fe/macros/chart/ChartRuntime", "sap/fe/macros/chart/ChartUtils", "sap/fe/macros/CommonHelper", "sap/fe/macros/DelegateUtil", "sap/fe/macros/filter/FilterUtils", "sap/fe/macros/table/TableHelper", "sap/fe/templates/ListReport/ExtensionAPI", "sap/fe/templates/TableScroller", "sap/ui/core/mvc/OverrideExecution", "sap/ui/Device", "sap/ui/mdc/p13n/StateUtil", "sap/ui/thirdparty/hasher", "./ListReportTemplating", "./overrides/IntentBasedNavigation", "./overrides/Share", "./overrides/ViewState"], function (Log, ObjectPath, ActionRuntime, CommonUtils, IntentBasedNavigation, InternalIntentBasedNavigation, InternalRouting, KPIManagement, MassEdit, Placeholder, Share, SideEffects, ViewState, ClassSupport, EditState, MessageStrip, StableIdHelper, CoreLibrary, PageController, ChartRuntime, ChartUtils, CommonHelper, DelegateUtil, FilterUtils, TableHelper, ExtensionAPI, TableScroller, OverrideExecution, Device, StateUtil, hasher, ListReportTemplating, IntentBasedNavigationOverride, ShareOverrides, ViewStateOverrides) {
6
- "use strict";
7
-
8
- var _dec, _dec2, _dec3, _dec4, _dec5, _dec6, _dec7, _dec8, _dec9, _dec10, _dec11, _dec12, _dec13, _dec14, _dec15, _dec16, _dec17, _dec18, _dec19, _dec20, _class, _class2, _descriptor, _descriptor2, _descriptor3, _descriptor4, _descriptor5, _descriptor6, _descriptor7, _descriptor8, _descriptor9;
9
- var system = Device.system;
10
- var usingExtension = ClassSupport.usingExtension;
11
- var publicExtension = ClassSupport.publicExtension;
12
- var privateExtension = ClassSupport.privateExtension;
13
- var finalExtension = ClassSupport.finalExtension;
14
- var extensible = ClassSupport.extensible;
15
- var defineUI5Class = ClassSupport.defineUI5Class;
16
- function _createForOfIteratorHelper(o, allowArrayLike) { var it = typeof Symbol !== "undefined" && o[Symbol.iterator] || o["@@iterator"]; if (!it) { if (Array.isArray(o) || (it = _unsupportedIterableToArray(o)) || allowArrayLike && o && typeof o.length === "number") { if (it) o = it; var i = 0; var F = function () {}; return { s: F, n: function () { if (i >= o.length) return { done: true }; return { done: false, value: o[i++] }; }, e: function (e) { throw e; }, f: F }; } throw new TypeError("Invalid attempt to iterate non-iterable instance.\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method."); } var normalCompletion = true, didErr = false, err; return { s: function () { it = it.call(o); }, n: function () { var step = it.next(); normalCompletion = step.done; return step; }, e: function (e) { didErr = true; err = e; }, f: function () { try { if (!normalCompletion && it.return != null) it.return(); } finally { if (didErr) throw err; } } }; }
17
- function _unsupportedIterableToArray(o, minLen) { if (!o) return; if (typeof o === "string") return _arrayLikeToArray(o, minLen); var n = Object.prototype.toString.call(o).slice(8, -1); if (n === "Object" && o.constructor) n = o.constructor.name; if (n === "Map" || n === "Set") return Array.from(o); if (n === "Arguments" || /^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(n)) return _arrayLikeToArray(o, minLen); }
18
- function _arrayLikeToArray(arr, len) { if (len == null || len > arr.length) len = arr.length; for (var i = 0, arr2 = new Array(len); i < len; i++) { arr2[i] = arr[i]; } return arr2; }
19
- function _initializerDefineProperty(target, property, descriptor, context) { if (!descriptor) return; Object.defineProperty(target, property, { enumerable: descriptor.enumerable, configurable: descriptor.configurable, writable: descriptor.writable, value: descriptor.initializer ? descriptor.initializer.call(context) : void 0 }); }
20
- function _assertThisInitialized(self) { if (self === void 0) { throw new ReferenceError("this hasn't been initialised - super() hasn't been called"); } return self; }
21
- function _inheritsLoose(subClass, superClass) { subClass.prototype = Object.create(superClass.prototype); subClass.prototype.constructor = subClass; _setPrototypeOf(subClass, superClass); }
22
- function _setPrototypeOf(o, p) { _setPrototypeOf = Object.setPrototypeOf ? Object.setPrototypeOf.bind() : function _setPrototypeOf(o, p) { o.__proto__ = p; return o; }; return _setPrototypeOf(o, p); }
23
- function _applyDecoratedDescriptor(target, property, decorators, descriptor, context) { var desc = {}; Object.keys(descriptor).forEach(function (key) { desc[key] = descriptor[key]; }); desc.enumerable = !!desc.enumerable; desc.configurable = !!desc.configurable; if ('value' in desc || desc.initializer) { desc.writable = true; } desc = decorators.slice().reverse().reduce(function (desc, decorator) { return decorator(target, property, desc) || desc; }, desc); if (context && desc.initializer !== void 0) { desc.value = desc.initializer ? desc.initializer.call(context) : void 0; desc.initializer = undefined; } if (desc.initializer === void 0) { Object.defineProperty(target, property, desc); desc = null; } return desc; }
24
- function _initializerWarningHelper(descriptor, context) { throw new Error('Decorating class property failed. Please ensure that ' + 'proposal-class-properties is enabled and runs after the decorators transform.'); }
25
- var TemplateContentView = CoreLibrary.TemplateContentView,
26
- InitialLoadMode = CoreLibrary.InitialLoadMode;
27
-
28
- /**
29
- * Controller class for the list report page, used inside an SAP Fiori elements application.
30
- *
31
- * @hideconstructor
32
- * @public
33
- */
34
- var ListReportController = (_dec = defineUI5Class("sap.fe.templates.ListReport.ListReportController"), _dec2 = usingExtension(InternalRouting.override({
35
- onAfterBinding: function () {
36
- this.getView().getController()._onAfterBinding();
37
- }
38
- })), _dec3 = usingExtension(InternalIntentBasedNavigation.override({
39
- getEntitySet: function () {
40
- return this.base.getCurrentEntitySet();
41
- }
42
- })), _dec4 = usingExtension(SideEffects), _dec5 = usingExtension(IntentBasedNavigation.override(IntentBasedNavigationOverride)), _dec6 = usingExtension(Share.override(ShareOverrides)), _dec7 = usingExtension(ViewState.override(ViewStateOverrides)), _dec8 = usingExtension(KPIManagement), _dec9 = usingExtension(Placeholder), _dec10 = usingExtension(MassEdit), _dec11 = publicExtension(), _dec12 = finalExtension(), _dec13 = privateExtension(), _dec14 = extensible(OverrideExecution.After), _dec15 = publicExtension(), _dec16 = extensible(OverrideExecution.After), _dec17 = publicExtension(), _dec18 = extensible(OverrideExecution.After), _dec19 = publicExtension(), _dec20 = extensible(OverrideExecution.After), _dec(_class = (_class2 = /*#__PURE__*/function (_PageController) {
43
- _inheritsLoose(ListReportController, _PageController);
44
- function ListReportController() {
45
- var _this;
46
- for (var _len = arguments.length, args = new Array(_len), _key = 0; _key < _len; _key++) {
47
- args[_key] = arguments[_key];
48
- }
49
- _this = _PageController.call.apply(_PageController, [this].concat(args)) || this;
50
- _initializerDefineProperty(_this, "_routing", _descriptor, _assertThisInitialized(_this));
51
- _initializerDefineProperty(_this, "_intentBasedNavigation", _descriptor2, _assertThisInitialized(_this));
52
- _initializerDefineProperty(_this, "sideEffects", _descriptor3, _assertThisInitialized(_this));
53
- _initializerDefineProperty(_this, "intentBasedNavigation", _descriptor4, _assertThisInitialized(_this));
54
- _initializerDefineProperty(_this, "share", _descriptor5, _assertThisInitialized(_this));
55
- _initializerDefineProperty(_this, "viewState", _descriptor6, _assertThisInitialized(_this));
56
- _initializerDefineProperty(_this, "kpiManagement", _descriptor7, _assertThisInitialized(_this));
57
- _initializerDefineProperty(_this, "placeholder", _descriptor8, _assertThisInitialized(_this));
58
- _initializerDefineProperty(_this, "massEdit", _descriptor9, _assertThisInitialized(_this));
59
- _this.handlers = {
60
- onFilterSearch: function () {
61
- this._getFilterBarControl().triggerSearch();
62
- },
63
- onFiltersChanged: function (oEvent) {
64
- var oFilterBar = this._getFilterBarControl();
65
- if (oFilterBar) {
66
- var oInternalModelContext = this.getView().getBindingContext("internal");
67
- // Pending filters into FilterBar to be used for custom views
68
- this.onPendingFilters();
69
- oInternalModelContext.setProperty("appliedFilters", oFilterBar.getAssignedFiltersText().filtersText);
70
- if (oEvent.getParameter("conditionsBased")) {
71
- oInternalModelContext.setProperty("hasPendingFilters", true);
72
- }
73
- }
74
- },
75
- onVariantSelected: function (oEvent) {
76
- var _this2 = this;
77
- var oVM = oEvent.getSource();
78
- var currentVariantKey = oEvent.getParameter("key");
79
- var oMultiModeControl = this._getMultiModeControl();
80
- var initialControlStatesMapper = this.viewState.initialControlStatesMapper;
81
- oMultiModeControl === null || oMultiModeControl === void 0 ? void 0 : oMultiModeControl.invalidateContent();
82
- oMultiModeControl === null || oMultiModeControl === void 0 ? void 0 : oMultiModeControl.setFreezeContent(true);
83
- // Reset the Controls Mapped to the selected VM
84
- var vmAssociatedControlsToReset = oVM.getFor();
85
- Object.keys(initialControlStatesMapper).forEach(function (controlKey) {
86
- var found = false;
87
- var _iterator = _createForOfIteratorHelper(vmAssociatedControlsToReset),
88
- _step;
89
- try {
90
- for (_iterator.s(); !(_step = _iterator.n()).done;) {
91
- var vmAssociatedcontrolKey = _step.value;
92
- if (vmAssociatedcontrolKey.indexOf(controlKey) > -1) {
93
- found = true;
94
- break;
95
- }
96
- }
97
- } catch (err) {
98
- _iterator.e(err);
99
- } finally {
100
- _iterator.f();
101
- }
102
- if (found) {
103
- initialControlStatesMapper[controlKey] = {};
104
- }
105
- });
106
-
107
- // setTimeout cause the variant needs to be applied before judging the auto search or updating the app state
108
- setTimeout(function () {
109
- if (_this2._shouldAutoTriggerSearch(oVM)) {
110
- // the app state will be updated via onSearch handler
111
- return _this2._getFilterBarControl().triggerSearch();
112
- } else if (!_this2._getApplyAutomaticallyOnVariant(oVM, currentVariantKey)) {
113
- _this2.getExtensionAPI().updateAppState();
114
- }
115
- }, 0);
116
- },
117
- onVariantSaved: function () {
118
- var _this3 = this;
119
- this.viewState.initialControlStatesMapper = {};
120
-
121
- //TODO: Should remove this setTimeOut once Variant Management provides an api to fetch the current variant key on save!!!
122
- setTimeout(function () {
123
- _this3.getExtensionAPI().updateAppState();
124
- }, 1000);
125
- },
126
- onSearch: function () {
127
- var _this4 = this;
128
- var oFilterBar = this._getFilterBarControl();
129
- var oInternalModelContext = this.getView().getBindingContext("internal");
130
- var oMdcChart = this.getChartControl();
131
- var bHideDraft = FilterUtils.getEditStateIsHideDraft(oFilterBar.getConditions());
132
- oInternalModelContext.setProperty("hasPendingFilters", false);
133
- oInternalModelContext.setProperty("hideDraftInfo", bHideDraft);
134
- if (!this._getMultiModeControl()) {
135
- this._updateALPNotApplicableFields(oInternalModelContext, oFilterBar);
136
- }
137
- if (oMdcChart) {
138
- // disable bound actions TODO: this clears everything for the chart?
139
- oMdcChart.getBindingContext("internal").setProperty("", {});
140
- var oPageInternalModelContext = oMdcChart.getBindingContext("pageInternal");
141
- var sTemplateContentView = oPageInternalModelContext.getProperty("".concat(oPageInternalModelContext.getPath(), "/alpContentView"));
142
- if (sTemplateContentView === TemplateContentView.Chart) {
143
- this.hasPendingChartChanges = true;
144
- }
145
- if (sTemplateContentView === TemplateContentView.Table) {
146
- this.hasPendingTableChanges = true;
147
- }
148
- }
149
- // store filter bar conditions to use later while navigation
150
- StateUtil.retrieveExternalState(oFilterBar).then(function (oExternalState) {
151
- _this4.filterBarConditions = oExternalState.filter;
152
- }).catch(function (oError) {
153
- Log.error("Error while retrieving the external state", oError);
154
- });
155
- if (this.getView().getViewData().liveMode === false) {
156
- this.getExtensionAPI().updateAppState();
157
- }
158
- if (system.phone) {
159
- var oDynamicPage = this._getDynamicListReportControl();
160
- oDynamicPage.setHeaderExpanded(false);
161
- }
162
- },
163
- /**
164
- * Triggers an outbound navigation when a user chooses the chevron.
165
- *
166
- * @param oController
167
- * @param sOutboundTarget Name of the outbound target (needs to be defined in the manifest)
168
- * @param oContext The context that contains the data for the target app
169
- * @param sCreatePath Create path when the chevron is created.
170
- * @returns Promise which is resolved once the navigation is triggered
171
- * @ui5-restricted
172
- * @final
173
- */
174
- onChevronPressNavigateOutBound: function (oController, sOutboundTarget, oContext, sCreatePath) {
175
- return oController._intentBasedNavigation.onChevronPressNavigateOutBound(oController, sOutboundTarget, oContext, sCreatePath);
176
- },
177
- onChartSelectionChanged: function (oEvent) {
178
- var oMdcChart = oEvent.getSource().getContent(),
179
- oTable = this._getTable(),
180
- aData = oEvent.getParameter("data"),
181
- oInternalModelContext = this.getView().getBindingContext("internal");
182
- if (aData) {
183
- // update action buttons enablement / disablement
184
- ChartRuntime.fnUpdateChart(oEvent);
185
- // update selections on selection or deselection
186
- ChartUtils.setChartFilters(oMdcChart);
187
- }
188
- var sTemplateContentView = oInternalModelContext.getProperty("".concat(oInternalModelContext.getPath(), "/alpContentView"));
189
- if (sTemplateContentView === TemplateContentView.Chart) {
190
- this.hasPendingChartChanges = true;
191
- } else if (oTable) {
192
- oTable.rebind();
193
- this.hasPendingChartChanges = false;
194
- }
195
- },
196
- onSegmentedButtonPressed: function (oEvent) {
197
- var sSelectedKey = oEvent.mParameters.key ? oEvent.mParameters.key : null;
198
- var oInternalModelContext = this.getView().getBindingContext("internal");
199
- oInternalModelContext.setProperty("alpContentView", sSelectedKey);
200
- var oChart = this.getChartControl();
201
- var oTable = this._getTable();
202
- var oSegmentedButtonDelegate = {
203
- onAfterRendering: function () {
204
- var aItems = oSegmentedButton.getItems();
205
- aItems.forEach(function (oItem) {
206
- if (oItem.getKey() === sSelectedKey) {
207
- oItem.focus();
208
- }
209
- });
210
- oSegmentedButton.removeEventDelegate(oSegmentedButtonDelegate);
211
- }
212
- };
213
- var oSegmentedButton = sSelectedKey === TemplateContentView.Table ? this._getSegmentedButton("Table") : this._getSegmentedButton("Chart");
214
- if (oSegmentedButton !== oEvent.getSource()) {
215
- oSegmentedButton.addEventDelegate(oSegmentedButtonDelegate);
216
- }
217
- switch (sSelectedKey) {
218
- case TemplateContentView.Table:
219
- this._updateTable(oTable);
220
- break;
221
- case TemplateContentView.Chart:
222
- this._updateChart(oChart);
223
- break;
224
- case TemplateContentView.Hybrid:
225
- this._updateTable(oTable);
226
- this._updateChart(oChart);
227
- break;
228
- default:
229
- break;
230
- }
231
- this.getExtensionAPI().updateAppState();
232
- },
233
- onFiltersSegmentedButtonPressed: function (oEvent) {
234
- var isCompact = oEvent.getParameter("key") === "Compact";
235
- this._getFilterBarControl().setVisible(isCompact);
236
- this._getVisualFilterBarControl().setVisible(!isCompact);
237
- },
238
- onStateChange: function () {
239
- this.getExtensionAPI().updateAppState();
240
- },
241
- onDynamicPageTitleStateChanged: function (oEvent) {
242
- var filterBar = this._getFilterBarControl();
243
- if (filterBar && filterBar.getSegmentedButton()) {
244
- if (oEvent.getParameter("isExpanded")) {
245
- filterBar.getSegmentedButton().setVisible(true);
246
- } else {
247
- filterBar.getSegmentedButton().setVisible(false);
248
- }
249
- }
250
- }
251
- };
252
- _this.formatters = {
253
- setALPControlMessageStrip: function (aIgnoredFields, bIsChart, oApplySupported) {
254
- var sText = "";
255
- bIsChart = bIsChart === "true" || bIsChart === true;
256
- var oFilterBar = this._getFilterBarControl();
257
- if (oFilterBar && Array.isArray(aIgnoredFields) && aIgnoredFields.length > 0 && bIsChart) {
258
- var aIgnoredLabels = MessageStrip.getLabels(aIgnoredFields, oFilterBar.data("entityType"), oFilterBar, this.oResourceBundle);
259
- var bIsSearchIgnored = !oApplySupported.enableSearch;
260
- sText = bIsChart ? MessageStrip.getALPText(aIgnoredLabels, oFilterBar, bIsSearchIgnored) : MessageStrip.getText(aIgnoredLabels, oFilterBar, "", DelegateUtil.getLocalizedText);
261
- return sText;
262
- }
263
- }
264
- };
265
- return _this;
266
- }
267
- var _proto = ListReportController.prototype;
268
- /**
269
- * Get the extension API for the current page.
270
- *
271
- * @public
272
- * @returns The extension API.
273
- */
274
- _proto.getExtensionAPI = function getExtensionAPI() {
275
- if (!this.extensionAPI) {
276
- this.extensionAPI = new ExtensionAPI(this);
277
- }
278
- return this.extensionAPI;
279
- };
280
- _proto.onInit = function onInit() {
281
- PageController.prototype.onInit.apply(this);
282
- var oInternalModelContext = this.getView().getBindingContext("internal");
283
- oInternalModelContext.setProperty("hasPendingFilters", true);
284
- oInternalModelContext.setProperty("appliedFilters", "");
285
- oInternalModelContext.setProperty("hideDraftInfo", false);
286
- oInternalModelContext.setProperty("uom", {});
287
- oInternalModelContext.setProperty("scalefactor", {});
288
- oInternalModelContext.setProperty("scalefactorNumber", {});
289
- oInternalModelContext.setProperty("currency", {});
290
- if (this._hasMultiVisualizations()) {
291
- var alpContentView = this._getDefaultPath();
292
- if (!system.desktop && alpContentView === TemplateContentView.Hybrid) {
293
- alpContentView = TemplateContentView.Chart;
294
- }
295
- oInternalModelContext.setProperty("alpContentView", alpContentView);
296
- }
297
-
298
- // Store conditions from filter bar
299
- // this is later used before navigation to get conditions applied on the filter bar
300
- this.filterBarConditions = {};
301
-
302
- // As AppStateHandler.applyAppState triggers a navigation we want to make sure it will
303
- // happen after the routeMatch event has been processed (otherwise the router gets broken)
304
- this.getAppComponent().getRouterProxy().waitForRouteMatchBeforeNavigation();
305
-
306
- // Configure the initial load settings
307
- this._setInitLoad();
308
- };
309
- _proto.onExit = function onExit() {
310
- delete this.filterBarConditions;
311
- if (this.extensionAPI) {
312
- this.extensionAPI.destroy();
313
- }
314
- delete this.extensionAPI;
315
- };
316
- _proto._onAfterBinding = function _onAfterBinding() {
317
- var _this5 = this;
318
- var aTables = this._getControls("table");
319
- if (EditState.isEditStateDirty()) {
320
- var _this$_getMultiModeCo, _this$_getTable;
321
- (_this$_getMultiModeCo = this._getMultiModeControl()) === null || _this$_getMultiModeCo === void 0 ? void 0 : _this$_getMultiModeCo.invalidateContent();
322
- var oTableBinding = (_this$_getTable = this._getTable()) === null || _this$_getTable === void 0 ? void 0 : _this$_getTable.getRowBinding();
323
- if (oTableBinding) {
324
- if (CommonUtils.getAppComponent(this.getView())._isFclEnabled()) {
325
- // there is an issue if we use a timeout with a kept alive context used on another page
326
- oTableBinding.refresh();
327
- } else {
328
- if (!this.sUpdateTimer) {
329
- this.sUpdateTimer = setTimeout(function () {
330
- oTableBinding.refresh();
331
- delete _this5.sUpdateTimer;
332
- }, 0);
333
- }
334
-
335
- // Update action enablement and visibility upon table data update.
336
- var fnUpdateTableActions = function () {
337
- _this5._updateTableActions(aTables);
338
- oTableBinding.detachDataReceived(fnUpdateTableActions);
339
- };
340
- oTableBinding.attachDataReceived(fnUpdateTableActions);
341
- }
342
- }
343
- EditState.setEditStateProcessed();
344
- }
345
- if (!this.sUpdateTimer) {
346
- this._updateTableActions(aTables);
347
- }
348
- var internalModelContext = this.getView().getBindingContext("internal");
349
- if (!internalModelContext.getProperty("initialVariantApplied")) {
350
- var viewId = this.getView().getId();
351
- this.pageReady.waitFor(this.getAppComponent().getAppStateHandler().applyAppState(viewId, this.getView()));
352
- internalModelContext.setProperty("initialVariantApplied", true);
353
- }
354
- };
355
- _proto.onBeforeRendering = function onBeforeRendering() {
356
- PageController.prototype.onBeforeRendering.apply(this);
357
- };
358
- _proto.onAfterRendering = function onAfterRendering() {
359
- var _this6 = this;
360
- this.getView().getModel("sap.fe.i18n").getResourceBundle().then(function (response) {
361
- _this6.oResourceBundle = response;
362
- var aTables = _this6._getControls();
363
- var sEntitySet = _this6.getView().getViewData().entitySet;
364
- var sText = CommonUtils.getTranslatedText("T_TABLE_AND_CHART_NO_DATA_TEXT", _this6.oResourceBundle, undefined, sEntitySet);
365
- aTables.forEach(function (oTable) {
366
- oTable.setNoData(sText);
367
- });
368
- }).catch(function (oError) {
369
- Log.error("Error while retrieving the resource bundle", oError);
370
- });
371
- };
372
- _proto.onPageReady = function onPageReady(mParameters) {
373
- if (mParameters.forceFocus) {
374
- this._setInitialFocus();
375
- }
376
- // Remove the handler on back navigation that displays Draft confirmation
377
- this.getAppComponent().getShellServices().setBackNavigation(undefined);
378
- }
379
-
380
- /**
381
- * Method called when the content of a custom view used in a list report needs to be refreshed.
382
- * This happens either when there is a change on the FilterBar and the search is triggered,
383
- * or when a tab with custom content is selected.
384
- * This method can be overwritten by the controller extension in case of customization.
385
- *
386
- * @param mParameters Map containing the filter conditions of the FilterBar, the currentTabID
387
- * and the view refresh cause (tabChanged or search).
388
- * The map looks like this:
389
- * <code><pre>
390
- * {
391
- * filterConditions: {
392
- * Country: [
393
- * {
394
- * operator: "EQ"
395
- * validated: "NotValidated"
396
- * values: ["Germany", ...]
397
- * },
398
- * ...
399
- * ]
400
- * ...
401
- * },
402
- * currentTabId: "fe::CustomTab::tab1",
403
- * refreshCause: "tabChanged" | "search"
404
- * }
405
- * </pre></code>
406
- * @public
407
- */;
408
- _proto.
409
- // eslint-disable-next-line @typescript-eslint/no-unused-vars
410
- onViewNeedsRefresh = function onViewNeedsRefresh(mParameters) {
411
- /* To be overriden */
412
- }
413
-
414
- /**
415
- * Method called when a filter or search value has been changed in the FilterBar,
416
- * but has not been validated yet by the end user (with the 'Go' or 'Search' button).
417
- * Typically, the content of the current tab is greyed out until the filters are validated.
418
- * This method can be overwritten by the controller extension in case of customization.
419
- *
420
- * @public
421
- */;
422
- _proto.onPendingFilters = function onPendingFilters() {
423
- /* To be overriden */
424
- };
425
- _proto.getCurrentEntitySet = function getCurrentEntitySet() {
426
- var _this$_getTable2;
427
- return (_this$_getTable2 = this._getTable()) === null || _this$_getTable2 === void 0 ? void 0 : _this$_getTable2.data("targetCollectionPath").slice(1);
428
- }
429
-
430
- /**
431
- * Method called when the 'Clear' button on the FilterBar is pressed.
432
- *
433
- * @public
434
- */;
435
- _proto.onAfterClear = function onAfterClear() {
436
- /* To be overriden */
437
- }
438
-
439
- /**
440
- * This method initiates the update of the enabled state of the DataFieldForAction and the visible state of the DataFieldForIBN buttons.
441
- *
442
- * @param aTables Array of tables in the list report
443
- * @private
444
- */;
445
- _proto._updateTableActions = function _updateTableActions(aTables) {
446
- var aIBNActions = [];
447
- aTables.forEach(function (oTable) {
448
- aIBNActions = CommonUtils.getIBNActions(oTable, aIBNActions);
449
- // Update 'enabled' property of DataFieldForAction buttons on table toolbar
450
- // The same is also performed on Table selectionChange event
451
- var oInternalModelContext = oTable.getBindingContext("internal"),
452
- oActionOperationAvailableMap = JSON.parse(CommonHelper.parseCustomData(DelegateUtil.getCustomData(oTable, "operationAvailableMap"))),
453
- aSelectedContexts = oTable.getSelectedContexts();
454
- oInternalModelContext.setProperty("selectedContexts", aSelectedContexts);
455
- oInternalModelContext.setProperty("numberOfSelectedContexts", aSelectedContexts.length);
456
- TableHelper.handleTableDeleteEnablementForSideEffects(oTable, oInternalModelContext);
457
- ActionRuntime.setActionEnablement(oInternalModelContext, oActionOperationAvailableMap, aSelectedContexts, "table");
458
- });
459
- CommonUtils.updateDataFieldForIBNButtonsVisibility(aIBNActions, this.getView());
460
- }
461
-
462
- /**
463
- * This method scrolls to a specific row on all the available tables.
464
- *
465
- * @function
466
- * @name sap.fe.templates.ListReport.ListReportController.controller#_scrollTablesToRow
467
- * @param sRowPath The path of the table row context to be scrolled to
468
- */;
469
- _proto._scrollTablesToRow = function _scrollTablesToRow(sRowPath) {
470
- this._getControls("table").forEach(function (oTable) {
471
- TableScroller.scrollTableToRow(oTable, sRowPath);
472
- });
473
- }
474
-
475
- /**
476
- * This method set the initial focus within the List Report according to the UX guide lines.
477
- *
478
- * @function
479
- * @name sap.fe.templates.ListReport.ListReportController.controller#_setInitialFocus
480
- */;
481
- _proto._setInitialFocus = function _setInitialFocus() {
482
- var dynamicPage = this._getDynamicListReportControl(),
483
- isHeaderExpanded = dynamicPage.getHeaderExpanded(),
484
- filterBar = this._getFilterBarControl();
485
- if (filterBar) {
486
- if (isHeaderExpanded) {
487
- //Enabling mandatory filter fields message dialog
488
- if (!filterBar.getShowMessages()) {
489
- filterBar.setShowMessages(true);
490
- }
491
- var firstEmptyMandatoryField = filterBar.getFilterItems().find(function (oFilterItem) {
492
- return oFilterItem.getRequired() && oFilterItem.getConditions().length === 0;
493
- });
494
- //Focusing on the first empty mandatory filter field, or on the first filter field if the table data is loaded
495
- if (firstEmptyMandatoryField) {
496
- firstEmptyMandatoryField.focus();
497
- } else if (this._isInitLoadEnabled()) {
498
- filterBar.getFilterItems()[0].focus();
499
- } else {
500
- var _this$getView$byId;
501
- //Focusing on the Go button
502
- (_this$getView$byId = this.getView().byId("".concat(this._getFilterBarControlId(), "-btnSearch"))) === null || _this$getView$byId === void 0 ? void 0 : _this$getView$byId.focus();
503
- }
504
- } else if (this._isInitLoadEnabled()) {
505
- var _this$_getTable3;
506
- (_this$_getTable3 = this._getTable()) === null || _this$_getTable3 === void 0 ? void 0 : _this$_getTable3.focusRow(0);
507
- }
508
- } else {
509
- var _this$_getTable4;
510
- (_this$_getTable4 = this._getTable()) === null || _this$_getTable4 === void 0 ? void 0 : _this$_getTable4.focusRow(0);
511
- }
512
- };
513
- _proto._getPageTitleInformation = function _getPageTitleInformation() {
514
- var oManifestEntry = this.getAppComponent().getManifestEntry("sap.app");
515
- return {
516
- title: oManifestEntry.title,
517
- subtitle: oManifestEntry.subTitle || "",
518
- intent: "",
519
- icon: ""
520
- };
521
- };
522
- _proto._getFilterBarControl = function _getFilterBarControl() {
523
- return this.getView().byId(this._getFilterBarControlId());
524
- };
525
- _proto._getDynamicListReportControl = function _getDynamicListReportControl() {
526
- return this.getView().byId(this._getDynamicListReportControlId());
527
- };
528
- _proto._getAdaptationFilterBarControl = function _getAdaptationFilterBarControl() {
529
- // If the adaptation filter bar is part of the DOM tree, the "Adapt Filter" dialog is open,
530
- // and we return the adaptation filter bar as an active control (visible for the user)
531
- var adaptationFilterBar = this._getFilterBarControl().getInbuiltFilter();
532
- return adaptationFilterBar !== null && adaptationFilterBar !== void 0 && adaptationFilterBar.getParent() ? adaptationFilterBar : undefined;
533
- };
534
- _proto._getSegmentedButton = function _getSegmentedButton(sControl) {
535
- var _ref;
536
- var sSegmentedButtonId = (_ref = sControl === "Chart" ? this.getChartControl() : this._getTable()) === null || _ref === void 0 ? void 0 : _ref.data("segmentedButtonId");
537
- return this.getView().byId(sSegmentedButtonId);
538
- };
539
- _proto._getControlFromPageModelProperty = function _getControlFromPageModelProperty(sPath) {
540
- var _this$_getPageModel;
541
- var controlId = (_this$_getPageModel = this._getPageModel()) === null || _this$_getPageModel === void 0 ? void 0 : _this$_getPageModel.getProperty(sPath);
542
- return controlId && this.getView().byId(controlId);
543
- };
544
- _proto._getDynamicListReportControlId = function _getDynamicListReportControlId() {
545
- var _this$_getPageModel2;
546
- return ((_this$_getPageModel2 = this._getPageModel()) === null || _this$_getPageModel2 === void 0 ? void 0 : _this$_getPageModel2.getProperty("/dynamicListReportId")) || "";
547
- };
548
- _proto._getFilterBarControlId = function _getFilterBarControlId() {
549
- var _this$_getPageModel3;
550
- return ((_this$_getPageModel3 = this._getPageModel()) === null || _this$_getPageModel3 === void 0 ? void 0 : _this$_getPageModel3.getProperty("/filterBarId")) || "";
551
- };
552
- _proto.getChartControl = function getChartControl() {
553
- return this._getControlFromPageModelProperty("/singleChartId");
554
- };
555
- _proto._getVisualFilterBarControl = function _getVisualFilterBarControl() {
556
- var sVisualFilterBarId = StableIdHelper.generate(["visualFilter", this._getFilterBarControlId()]);
557
- return sVisualFilterBarId && this.getView().byId(sVisualFilterBarId);
558
- };
559
- _proto._getFilterBarVariantControl = function _getFilterBarVariantControl() {
560
- return this._getControlFromPageModelProperty("/variantManagement/id");
561
- };
562
- _proto._getMultiModeControl = function _getMultiModeControl() {
563
- return this.getView().byId("fe::TabMultipleMode::Control");
564
- };
565
- _proto._getTable = function _getTable() {
566
- if (this._isMultiMode()) {
567
- var _this$_getMultiModeCo2, _this$_getMultiModeCo3;
568
- var oControl = (_this$_getMultiModeCo2 = this._getMultiModeControl()) === null || _this$_getMultiModeCo2 === void 0 ? void 0 : (_this$_getMultiModeCo3 = _this$_getMultiModeCo2.getSelectedInnerControl()) === null || _this$_getMultiModeCo3 === void 0 ? void 0 : _this$_getMultiModeCo3.content;
569
- return oControl !== null && oControl !== void 0 && oControl.isA("sap.ui.mdc.Table") ? oControl : undefined;
570
- } else {
571
- return this._getControlFromPageModelProperty("/singleTableId");
572
- }
573
- };
574
- _proto._getControls = function _getControls(sKey) {
575
- var _this7 = this;
576
- if (this._isMultiMode()) {
577
- var aControls = [];
578
- var oTabMultiMode = this._getMultiModeControl().content;
579
- oTabMultiMode.getItems().forEach(function (oItem) {
580
- var oControl = _this7.getView().byId(oItem.getKey());
581
- if (oControl && sKey) {
582
- if (oItem.getKey().indexOf("fe::".concat(sKey)) > -1) {
583
- aControls.push(oControl);
584
- }
585
- } else if (oControl !== undefined && oControl !== null) {
586
- aControls.push(oControl);
587
- }
588
- });
589
- return aControls;
590
- } else if (sKey === "Chart") {
591
- var oChart = this.getChartControl();
592
- return oChart ? [oChart] : [];
593
- } else {
594
- var oTable = this._getTable();
595
- return oTable ? [oTable] : [];
596
- }
597
- };
598
- _proto._getDefaultPath = function _getDefaultPath() {
599
- var _this$_getPageModel4;
600
- var defaultPath = ListReportTemplating.getDefaultPath(((_this$_getPageModel4 = this._getPageModel()) === null || _this$_getPageModel4 === void 0 ? void 0 : _this$_getPageModel4.getProperty("/views")) || []);
601
- switch (defaultPath) {
602
- case "primary":
603
- return TemplateContentView.Chart;
604
- case "secondary":
605
- return TemplateContentView.Table;
606
- case "both":
607
- default:
608
- return TemplateContentView.Hybrid;
609
- }
610
- }
611
-
612
- /**
613
- * Method to know if ListReport is configured with Multiple Table mode.
614
- *
615
- * @function
616
- * @name _isMultiMode
617
- * @returns Is Multiple Table mode set?
618
- */;
619
- _proto._isMultiMode = function _isMultiMode() {
620
- var _this$_getPageModel5;
621
- return !!((_this$_getPageModel5 = this._getPageModel()) !== null && _this$_getPageModel5 !== void 0 && _this$_getPageModel5.getProperty("/multiViewsControl"));
622
- }
623
-
624
- /**
625
- * Method to know if ListReport is configured to load data at start up.
626
- *
627
- * @function
628
- * @name _isInitLoadDisabled
629
- * @returns Is InitLoad enabled?
630
- */;
631
- _proto._isInitLoadEnabled = function _isInitLoadEnabled() {
632
- var initLoadMode = this.getView().getViewData().initialLoad;
633
- return initLoadMode === InitialLoadMode.Enabled;
634
- };
635
- _proto._hasMultiVisualizations = function _hasMultiVisualizations() {
636
- var _this$_getPageModel6;
637
- return (_this$_getPageModel6 = this._getPageModel()) === null || _this$_getPageModel6 === void 0 ? void 0 : _this$_getPageModel6.getProperty("/hasMultiVisualizations");
638
- }
639
-
640
- /**
641
- * Method to suspend search on the filter bar. The initial loading of data is disabled based on the manifest configuration InitLoad - Disabled/Auto.
642
- * It is enabled later when the view state is set, when it is possible to realize if there are default filters.
643
- */;
644
- _proto._disableInitLoad = function _disableInitLoad() {
645
- var filterBar = this._getFilterBarControl();
646
- // check for filter bar hidden
647
- if (filterBar) {
648
- filterBar.setSuspendSelection(true);
649
- }
650
- }
651
-
652
- /**
653
- * Method called by flex to determine if the applyAutomatically setting on the variant is valid.
654
- * Called only for Standard Variant and only when there is display text set for applyAutomatically (FE only sets it for Auto).
655
- *
656
- * @returns Boolean true if data should be loaded automatically, false otherwise
657
- */;
658
- _proto._applyAutomaticallyOnStandardVariant = function _applyAutomaticallyOnStandardVariant() {
659
- // We always return false and take care of it when view state is set
660
- return false;
661
- }
662
-
663
- /**
664
- * Configure the settings for initial load based on
665
- * - manifest setting initLoad - Enabled/Disabled/Auto
666
- * - user's setting of applyAutomatically on variant
667
- * - if there are default filters
668
- * We disable the filter bar search at the beginning and enable it when view state is set.
669
- */;
670
- _proto._setInitLoad = function _setInitLoad() {
671
- // if initLoad is Disabled or Auto, switch off filter bar search temporarily at start
672
- if (!this._isInitLoadEnabled()) {
673
- this._disableInitLoad();
674
- }
675
- // set hook for flex for when standard variant is set (at start or by user at runtime)
676
- // required to override the user setting 'apply automatically' behaviour if there are no filters
677
- var variantManagementId = ListReportTemplating.getVariantBackReference(this.getView().getViewData(), this._getPageModel());
678
- var variantManagement = variantManagementId && this.getView().byId(variantManagementId);
679
- if (variantManagement) {
680
- variantManagement.registerApplyAutomaticallyOnStandardVariant(this._applyAutomaticallyOnStandardVariant.bind(this));
681
- }
682
- };
683
- _proto._setShareModel = function _setShareModel() {
684
- // TODO: deactivated for now - currently there is no _templPriv anymore, to be discussed
685
- // this method is currently not called anymore from the init method
686
-
687
- var fnGetUser = ObjectPath.get("sap.ushell.Container.getUser");
688
- //var oManifest = this.getOwnerComponent().getAppComponent().getMetadata().getManifestEntry("sap.ui");
689
- //var sBookmarkIcon = (oManifest && oManifest.icons && oManifest.icons.icon) || "";
690
-
691
- //shareModel: Holds all the sharing relevant information and info used in XML view
692
- var oShareInfo = {
693
- bookmarkTitle: document.title,
694
- //To name the bookmark according to the app title.
695
- bookmarkCustomUrl: function () {
696
- var sHash = hasher.getHash();
697
- return sHash ? "#".concat(sHash) : window.location.href;
698
- },
699
- /*
700
- To be activated once the FLP shows the count - see comment above
701
- bookmarkServiceUrl: function() {
702
- //var oTable = oTable.getInnerTable(); oTable is already the sap.fe table (but not the inner one)
703
- // we should use table.getListBindingInfo instead of the binding
704
- var oBinding = oTable.getBinding("rows") || oTable.getBinding("items");
705
- return oBinding ? fnGetDownloadUrl(oBinding) : "";
706
- },*/
707
- isShareInJamActive: !!fnGetUser && fnGetUser().isJamActive()
708
- };
709
- var oTemplatePrivateModel = this.getOwnerComponent().getModel("_templPriv");
710
- oTemplatePrivateModel.setProperty("/listReport/share", oShareInfo);
711
- }
712
-
713
- /**
714
- * Method to update the local UI model of the page with the fields that are not applicable to the filter bar (this is specific to the ALP scenario).
715
- *
716
- * @param oInternalModelContext The internal model context
717
- * @param oFilterBar MDC filter bar
718
- */;
719
- _proto._updateALPNotApplicableFields = function _updateALPNotApplicableFields(oInternalModelContext, oFilterBar) {
720
- var mCache = {};
721
- var ignoredFields = {},
722
- aTables = this._getControls("table"),
723
- aCharts = this._getControls("Chart");
724
- if (!aTables.length || !aCharts.length) {
725
- // If there's not a table and a chart, we're not in the ALP case
726
- return;
727
- }
728
-
729
- // For the moment, there's nothing for tables...
730
- aCharts.forEach(function (oChart) {
731
- var sChartEntityPath = oChart.data("targetCollectionPath"),
732
- sChartEntitySet = sChartEntityPath.slice(1),
733
- sCacheKey = "".concat(sChartEntitySet, "Chart");
734
- if (!mCache[sCacheKey]) {
735
- mCache[sCacheKey] = FilterUtils.getNotApplicableFilters(oFilterBar, oChart);
736
- }
737
- ignoredFields[sCacheKey] = mCache[sCacheKey];
738
- });
739
- oInternalModelContext.setProperty("controls/ignoredFields", ignoredFields);
740
- };
741
- _proto._isFilterBarHidden = function _isFilterBarHidden() {
742
- return this.getView().getViewData().hideFilterBar;
743
- };
744
- _proto._getApplyAutomaticallyOnVariant = function _getApplyAutomaticallyOnVariant(VariantManagement, key) {
745
- if (!VariantManagement || !key) {
746
- return false;
747
- }
748
- var variants = VariantManagement.getVariants();
749
- var currentVariant = variants.find(function (variant) {
750
- return variant && variant.key === key;
751
- });
752
- return currentVariant && currentVariant.executeOnSelect || false;
753
- };
754
- _proto._shouldAutoTriggerSearch = function _shouldAutoTriggerSearch(oVM) {
755
- if (this.getView().getViewData().initialLoad === InitialLoadMode.Auto && (!oVM || oVM.getStandardVariantKey() === oVM.getCurrentVariantKey())) {
756
- var oFilterBar = this._getFilterBarControl();
757
- if (oFilterBar) {
758
- var oConditions = oFilterBar.getConditions();
759
- for (var sKey in oConditions) {
760
- // ignore filters starting with $ (e.g. $search, $editState)
761
- if (!sKey.startsWith("$") && Array.isArray(oConditions[sKey]) && oConditions[sKey].length) {
762
- // load data as per user's setting of applyAutomatically on the variant
763
- var standardVariant = oVM.getVariants().find(function (variant) {
764
- return variant.key === oVM.getCurrentVariantKey();
765
- });
766
- return standardVariant && standardVariant.executeOnSelect;
767
- }
768
- }
769
- }
770
- }
771
- return false;
772
- };
773
- _proto._updateTable = function _updateTable(oTable) {
774
- if (!oTable.isTableBound() || this.hasPendingChartChanges) {
775
- oTable.rebind();
776
- this.hasPendingChartChanges = false;
777
- }
778
- };
779
- _proto._updateChart = function _updateChart(oChart) {
780
- var oInnerChart = oChart.getControlDelegate()._getChart(oChart);
781
- if (!(oInnerChart && oInnerChart.isBound("data")) || this.hasPendingTableChanges) {
782
- oChart.getControlDelegate().rebind(oChart, oInnerChart.getBindingInfo("data"));
783
- this.hasPendingTableChanges = false;
784
- }
785
- };
786
- return ListReportController;
787
- }(PageController), (_descriptor = _applyDecoratedDescriptor(_class2.prototype, "_routing", [_dec2], {
788
- configurable: true,
789
- enumerable: true,
790
- writable: true,
791
- initializer: null
792
- }), _descriptor2 = _applyDecoratedDescriptor(_class2.prototype, "_intentBasedNavigation", [_dec3], {
793
- configurable: true,
794
- enumerable: true,
795
- writable: true,
796
- initializer: null
797
- }), _descriptor3 = _applyDecoratedDescriptor(_class2.prototype, "sideEffects", [_dec4], {
798
- configurable: true,
799
- enumerable: true,
800
- writable: true,
801
- initializer: null
802
- }), _descriptor4 = _applyDecoratedDescriptor(_class2.prototype, "intentBasedNavigation", [_dec5], {
803
- configurable: true,
804
- enumerable: true,
805
- writable: true,
806
- initializer: null
807
- }), _descriptor5 = _applyDecoratedDescriptor(_class2.prototype, "share", [_dec6], {
808
- configurable: true,
809
- enumerable: true,
810
- writable: true,
811
- initializer: null
812
- }), _descriptor6 = _applyDecoratedDescriptor(_class2.prototype, "viewState", [_dec7], {
813
- configurable: true,
814
- enumerable: true,
815
- writable: true,
816
- initializer: null
817
- }), _descriptor7 = _applyDecoratedDescriptor(_class2.prototype, "kpiManagement", [_dec8], {
818
- configurable: true,
819
- enumerable: true,
820
- writable: true,
821
- initializer: null
822
- }), _descriptor8 = _applyDecoratedDescriptor(_class2.prototype, "placeholder", [_dec9], {
823
- configurable: true,
824
- enumerable: true,
825
- writable: true,
826
- initializer: null
827
- }), _descriptor9 = _applyDecoratedDescriptor(_class2.prototype, "massEdit", [_dec10], {
828
- configurable: true,
829
- enumerable: true,
830
- writable: true,
831
- initializer: null
832
- }), _applyDecoratedDescriptor(_class2.prototype, "getExtensionAPI", [_dec11, _dec12], Object.getOwnPropertyDescriptor(_class2.prototype, "getExtensionAPI"), _class2.prototype), _applyDecoratedDescriptor(_class2.prototype, "onPageReady", [_dec13, _dec14], Object.getOwnPropertyDescriptor(_class2.prototype, "onPageReady"), _class2.prototype), _applyDecoratedDescriptor(_class2.prototype, "onViewNeedsRefresh", [_dec15, _dec16], Object.getOwnPropertyDescriptor(_class2.prototype, "onViewNeedsRefresh"), _class2.prototype), _applyDecoratedDescriptor(_class2.prototype, "onPendingFilters", [_dec17, _dec18], Object.getOwnPropertyDescriptor(_class2.prototype, "onPendingFilters"), _class2.prototype), _applyDecoratedDescriptor(_class2.prototype, "onAfterClear", [_dec19, _dec20], Object.getOwnPropertyDescriptor(_class2.prototype, "onAfterClear"), _class2.prototype)), _class2)) || _class);
833
- return ListReportController;
834
- }, false);
835
- //# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJuYW1lcyI6WyJUZW1wbGF0ZUNvbnRlbnRWaWV3IiwiQ29yZUxpYnJhcnkiLCJJbml0aWFsTG9hZE1vZGUiLCJMaXN0UmVwb3J0Q29udHJvbGxlciIsImRlZmluZVVJNUNsYXNzIiwidXNpbmdFeHRlbnNpb24iLCJJbnRlcm5hbFJvdXRpbmciLCJvdmVycmlkZSIsIm9uQWZ0ZXJCaW5kaW5nIiwiZ2V0VmlldyIsImdldENvbnRyb2xsZXIiLCJfb25BZnRlckJpbmRpbmciLCJJbnRlcm5hbEludGVudEJhc2VkTmF2aWdhdGlvbiIsImdldEVudGl0eVNldCIsImJhc2UiLCJnZXRDdXJyZW50RW50aXR5U2V0IiwiU2lkZUVmZmVjdHMiLCJJbnRlbnRCYXNlZE5hdmlnYXRpb24iLCJJbnRlbnRCYXNlZE5hdmlnYXRpb25PdmVycmlkZSIsIlNoYXJlIiwiU2hhcmVPdmVycmlkZXMiLCJWaWV3U3RhdGUiLCJWaWV3U3RhdGVPdmVycmlkZXMiLCJLUElNYW5hZ2VtZW50IiwiUGxhY2Vob2xkZXIiLCJNYXNzRWRpdCIsInB1YmxpY0V4dGVuc2lvbiIsImZpbmFsRXh0ZW5zaW9uIiwicHJpdmF0ZUV4dGVuc2lvbiIsImV4dGVuc2libGUiLCJPdmVycmlkZUV4ZWN1dGlvbiIsIkFmdGVyIiwiaGFuZGxlcnMiLCJvbkZpbHRlclNlYXJjaCIsIl9nZXRGaWx0ZXJCYXJDb250cm9sIiwidHJpZ2dlclNlYXJjaCIsIm9uRmlsdGVyc0NoYW5nZWQiLCJvRXZlbnQiLCJvRmlsdGVyQmFyIiwib0ludGVybmFsTW9kZWxDb250ZXh0IiwiZ2V0QmluZGluZ0NvbnRleHQiLCJvblBlbmRpbmdGaWx0ZXJzIiwic2V0UHJvcGVydHkiLCJnZXRBc3NpZ25lZEZpbHRlcnNUZXh0IiwiZmlsdGVyc1RleHQiLCJnZXRQYXJhbWV0ZXIiLCJvblZhcmlhbnRTZWxlY3RlZCIsIm9WTSIsImdldFNvdXJjZSIsImN1cnJlbnRWYXJpYW50S2V5Iiwib011bHRpTW9kZUNvbnRyb2wiLCJfZ2V0TXVsdGlNb2RlQ29udHJvbCIsImluaXRpYWxDb250cm9sU3RhdGVzTWFwcGVyIiwidmlld1N0YXRlIiwiaW52YWxpZGF0ZUNvbnRlbnQiLCJzZXRGcmVlemVDb250ZW50Iiwidm1Bc3NvY2lhdGVkQ29udHJvbHNUb1Jlc2V0IiwiZ2V0Rm9yIiwiT2JqZWN0Iiwia2V5cyIsImZvckVhY2giLCJjb250cm9sS2V5IiwiZm91bmQiLCJ2bUFzc29jaWF0ZWRjb250cm9sS2V5IiwiaW5kZXhPZiIsInNldFRpbWVvdXQiLCJfc2hvdWxkQXV0b1RyaWdnZXJTZWFyY2giLCJfZ2V0QXBwbHlBdXRvbWF0aWNhbGx5T25WYXJpYW50IiwiZ2V0RXh0ZW5zaW9uQVBJIiwidXBkYXRlQXBwU3RhdGUiLCJvblZhcmlhbnRTYXZlZCIsIm9uU2VhcmNoIiwib01kY0NoYXJ0IiwiZ2V0Q2hhcnRDb250cm9sIiwiYkhpZGVEcmFmdCIsIkZpbHRlclV0aWxzIiwiZ2V0RWRpdFN0YXRlSXNIaWRlRHJhZnQiLCJnZXRDb25kaXRpb25zIiwiX3VwZGF0ZUFMUE5vdEFwcGxpY2FibGVGaWVsZHMiLCJvUGFnZUludGVybmFsTW9kZWxDb250ZXh0Iiwic1RlbXBsYXRlQ29udGVudFZpZXciLCJnZXRQcm9wZXJ0eSIsImdldFBhdGgiLCJDaGFydCIsImhhc1BlbmRpbmdDaGFydENoYW5nZXMiLCJUYWJsZSIsImhhc1BlbmRpbmdUYWJsZUNoYW5nZXMiLCJTdGF0ZVV0aWwiLCJyZXRyaWV2ZUV4dGVybmFsU3RhdGUiLCJ0aGVuIiwib0V4dGVybmFsU3RhdGUiLCJmaWx0ZXJCYXJDb25kaXRpb25zIiwiZmlsdGVyIiwiY2F0Y2giLCJvRXJyb3IiLCJMb2ciLCJlcnJvciIsImdldFZpZXdEYXRhIiwibGl2ZU1vZGUiLCJzeXN0ZW0iLCJwaG9uZSIsIm9EeW5hbWljUGFnZSIsIl9nZXREeW5hbWljTGlzdFJlcG9ydENvbnRyb2wiLCJzZXRIZWFkZXJFeHBhbmRlZCIsIm9uQ2hldnJvblByZXNzTmF2aWdhdGVPdXRCb3VuZCIsIm9Db250cm9sbGVyIiwic091dGJvdW5kVGFyZ2V0Iiwib0NvbnRleHQiLCJzQ3JlYXRlUGF0aCIsIl9pbnRlbnRCYXNlZE5hdmlnYXRpb24iLCJvbkNoYXJ0U2VsZWN0aW9uQ2hhbmdlZCIsImdldENvbnRlbnQiLCJvVGFibGUiLCJfZ2V0VGFibGUiLCJhRGF0YSIsIkNoYXJ0UnVudGltZSIsImZuVXBkYXRlQ2hhcnQiLCJDaGFydFV0aWxzIiwic2V0Q2hhcnRGaWx0ZXJzIiwicmViaW5kIiwib25TZWdtZW50ZWRCdXR0b25QcmVzc2VkIiwic1NlbGVjdGVkS2V5IiwibVBhcmFtZXRlcnMiLCJrZXkiLCJvQ2hhcnQiLCJvU2VnbWVudGVkQnV0dG9uRGVsZWdhdGUiLCJvbkFmdGVyUmVuZGVyaW5nIiwiYUl0ZW1zIiwib1NlZ21lbnRlZEJ1dHRvbiIsImdldEl0ZW1zIiwib0l0ZW0iLCJnZXRLZXkiLCJmb2N1cyIsInJlbW92ZUV2ZW50RGVsZWdhdGUiLCJfZ2V0U2VnbWVudGVkQnV0dG9uIiwiYWRkRXZlbnREZWxlZ2F0ZSIsIl91cGRhdGVUYWJsZSIsIl91cGRhdGVDaGFydCIsIkh5YnJpZCIsIm9uRmlsdGVyc1NlZ21lbnRlZEJ1dHRvblByZXNzZWQiLCJpc0NvbXBhY3QiLCJzZXRWaXNpYmxlIiwiX2dldFZpc3VhbEZpbHRlckJhckNvbnRyb2wiLCJvblN0YXRlQ2hhbmdlIiwib25EeW5hbWljUGFnZVRpdGxlU3RhdGVDaGFuZ2VkIiwiZmlsdGVyQmFyIiwiZ2V0U2VnbWVudGVkQnV0dG9uIiwiZm9ybWF0dGVycyIsInNldEFMUENvbnRyb2xNZXNzYWdlU3RyaXAiLCJhSWdub3JlZEZpZWxkcyIsImJJc0NoYXJ0Iiwib0FwcGx5U3VwcG9ydGVkIiwic1RleHQiLCJBcnJheSIsImlzQXJyYXkiLCJsZW5ndGgiLCJhSWdub3JlZExhYmVscyIsIk1lc3NhZ2VTdHJpcCIsImdldExhYmVscyIsImRhdGEiLCJvUmVzb3VyY2VCdW5kbGUiLCJiSXNTZWFyY2hJZ25vcmVkIiwiZW5hYmxlU2VhcmNoIiwiZ2V0QUxQVGV4dCIsImdldFRleHQiLCJEZWxlZ2F0ZVV0aWwiLCJnZXRMb2NhbGl6ZWRUZXh0IiwiZXh0ZW5zaW9uQVBJIiwiRXh0ZW5zaW9uQVBJIiwib25Jbml0IiwiUGFnZUNvbnRyb2xsZXIiLCJwcm90b3R5cGUiLCJhcHBseSIsIl9oYXNNdWx0aVZpc3VhbGl6YXRpb25zIiwiYWxwQ29udGVudFZpZXciLCJfZ2V0RGVmYXVsdFBhdGgiLCJkZXNrdG9wIiwiZ2V0QXBwQ29tcG9uZW50IiwiZ2V0Um91dGVyUHJveHkiLCJ3YWl0Rm9yUm91dGVNYXRjaEJlZm9yZU5hdmlnYXRpb24iLCJfc2V0SW5pdExvYWQiLCJvbkV4aXQiLCJkZXN0cm95IiwiYVRhYmxlcyIsIl9nZXRDb250cm9scyIsIkVkaXRTdGF0ZSIsImlzRWRpdFN0YXRlRGlydHkiLCJvVGFibGVCaW5kaW5nIiwiZ2V0Um93QmluZGluZyIsIkNvbW1vblV0aWxzIiwiX2lzRmNsRW5hYmxlZCIsInJlZnJlc2giLCJzVXBkYXRlVGltZXIiLCJmblVwZGF0ZVRhYmxlQWN0aW9ucyIsIl91cGRhdGVUYWJsZUFjdGlvbnMiLCJkZXRhY2hEYXRhUmVjZWl2ZWQiLCJhdHRhY2hEYXRhUmVjZWl2ZWQiLCJzZXRFZGl0U3RhdGVQcm9jZXNzZWQiLCJpbnRlcm5hbE1vZGVsQ29udGV4dCIsInZpZXdJZCIsImdldElkIiwicGFnZVJlYWR5Iiwid2FpdEZvciIsImdldEFwcFN0YXRlSGFuZGxlciIsImFwcGx5QXBwU3RhdGUiLCJvbkJlZm9yZVJlbmRlcmluZyIsImdldE1vZGVsIiwiZ2V0UmVzb3VyY2VCdW5kbGUiLCJyZXNwb25zZSIsInNFbnRpdHlTZXQiLCJlbnRpdHlTZXQiLCJnZXRUcmFuc2xhdGVkVGV4dCIsInVuZGVmaW5lZCIsInNldE5vRGF0YSIsIm9uUGFnZVJlYWR5IiwiZm9yY2VGb2N1cyIsIl9zZXRJbml0aWFsRm9jdXMiLCJnZXRTaGVsbFNlcnZpY2VzIiwic2V0QmFja05hdmlnYXRpb24iLCJvblZpZXdOZWVkc1JlZnJlc2giLCJzbGljZSIsIm9uQWZ0ZXJDbGVhciIsImFJQk5BY3Rpb25zIiwiZ2V0SUJOQWN0aW9ucyIsIm9BY3Rpb25PcGVyYXRpb25BdmFpbGFibGVNYXAiLCJKU09OIiwicGFyc2UiLCJDb21tb25IZWxwZXIiLCJwYXJzZUN1c3RvbURhdGEiLCJnZXRDdXN0b21EYXRhIiwiYVNlbGVjdGVkQ29udGV4dHMiLCJnZXRTZWxlY3RlZENvbnRleHRzIiwiVGFibGVIZWxwZXIiLCJoYW5kbGVUYWJsZURlbGV0ZUVuYWJsZW1lbnRGb3JTaWRlRWZmZWN0cyIsIkFjdGlvblJ1bnRpbWUiLCJzZXRBY3Rpb25FbmFibGVtZW50IiwidXBkYXRlRGF0YUZpZWxkRm9ySUJOQnV0dG9uc1Zpc2liaWxpdHkiLCJfc2Nyb2xsVGFibGVzVG9Sb3ciLCJzUm93UGF0aCIsIlRhYmxlU2Nyb2xsZXIiLCJzY3JvbGxUYWJsZVRvUm93IiwiZHluYW1pY1BhZ2UiLCJpc0hlYWRlckV4cGFuZGVkIiwiZ2V0SGVhZGVyRXhwYW5kZWQiLCJnZXRTaG93TWVzc2FnZXMiLCJzZXRTaG93TWVzc2FnZXMiLCJmaXJzdEVtcHR5TWFuZGF0b3J5RmllbGQiLCJnZXRGaWx0ZXJJdGVtcyIsImZpbmQiLCJvRmlsdGVySXRlbSIsImdldFJlcXVpcmVkIiwiX2lzSW5pdExvYWRFbmFibGVkIiwiYnlJZCIsIl9nZXRGaWx0ZXJCYXJDb250cm9sSWQiLCJmb2N1c1JvdyIsIl9nZXRQYWdlVGl0bGVJbmZvcm1hdGlvbiIsIm9NYW5pZmVzdEVudHJ5IiwiZ2V0TWFuaWZlc3RFbnRyeSIsInRpdGxlIiwic3VidGl0bGUiLCJzdWJUaXRsZSIsImludGVudCIsImljb24iLCJfZ2V0RHluYW1pY0xpc3RSZXBvcnRDb250cm9sSWQiLCJfZ2V0QWRhcHRhdGlvbkZpbHRlckJhckNvbnRyb2wiLCJhZGFwdGF0aW9uRmlsdGVyQmFyIiwiZ2V0SW5idWlsdEZpbHRlciIsImdldFBhcmVudCIsInNDb250cm9sIiwic1NlZ21lbnRlZEJ1dHRvbklkIiwiX2dldENvbnRyb2xGcm9tUGFnZU1vZGVsUHJvcGVydHkiLCJzUGF0aCIsImNvbnRyb2xJZCIsIl9nZXRQYWdlTW9kZWwiLCJzVmlzdWFsRmlsdGVyQmFySWQiLCJTdGFibGVJZEhlbHBlciIsImdlbmVyYXRlIiwiX2dldEZpbHRlckJhclZhcmlhbnRDb250cm9sIiwiX2lzTXVsdGlNb2RlIiwib0NvbnRyb2wiLCJnZXRTZWxlY3RlZElubmVyQ29udHJvbCIsImNvbnRlbnQiLCJpc0EiLCJzS2V5IiwiYUNvbnRyb2xzIiwib1RhYk11bHRpTW9kZSIsInB1c2giLCJkZWZhdWx0UGF0aCIsIkxpc3RSZXBvcnRUZW1wbGF0aW5nIiwiZ2V0RGVmYXVsdFBhdGgiLCJpbml0TG9hZE1vZGUiLCJpbml0aWFsTG9hZCIsIkVuYWJsZWQiLCJfZGlzYWJsZUluaXRMb2FkIiwic2V0U3VzcGVuZFNlbGVjdGlvbiIsIl9hcHBseUF1dG9tYXRpY2FsbHlPblN0YW5kYXJkVmFyaWFudCIsInZhcmlhbnRNYW5hZ2VtZW50SWQiLCJnZXRWYXJpYW50QmFja1JlZmVyZW5jZSIsInZhcmlhbnRNYW5hZ2VtZW50IiwicmVnaXN0ZXJBcHBseUF1dG9tYXRpY2FsbHlPblN0YW5kYXJkVmFyaWFudCIsImJpbmQiLCJfc2V0U2hhcmVNb2RlbCIsImZuR2V0VXNlciIsIk9iamVjdFBhdGgiLCJnZXQiLCJvU2hhcmVJbmZvIiwiYm9va21hcmtUaXRsZSIsImRvY3VtZW50IiwiYm9va21hcmtDdXN0b21VcmwiLCJzSGFzaCIsImhhc2hlciIsImdldEhhc2giLCJ3aW5kb3ciLCJsb2NhdGlvbiIsImhyZWYiLCJpc1NoYXJlSW5KYW1BY3RpdmUiLCJpc0phbUFjdGl2ZSIsIm9UZW1wbGF0ZVByaXZhdGVNb2RlbCIsImdldE93bmVyQ29tcG9uZW50IiwibUNhY2hlIiwiaWdub3JlZEZpZWxkcyIsImFDaGFydHMiLCJzQ2hhcnRFbnRpdHlQYXRoIiwic0NoYXJ0RW50aXR5U2V0Iiwic0NhY2hlS2V5IiwiZ2V0Tm90QXBwbGljYWJsZUZpbHRlcnMiLCJfaXNGaWx0ZXJCYXJIaWRkZW4iLCJoaWRlRmlsdGVyQmFyIiwiVmFyaWFudE1hbmFnZW1lbnQiLCJ2YXJpYW50cyIsImdldFZhcmlhbnRzIiwiY3VycmVudFZhcmlhbnQiLCJ2YXJpYW50IiwiZXhlY3V0ZU9uU2VsZWN0IiwiQXV0byIsImdldFN0YW5kYXJkVmFyaWFudEtleSIsImdldEN1cnJlbnRWYXJpYW50S2V5Iiwib0NvbmRpdGlvbnMiLCJzdGFydHNXaXRoIiwic3RhbmRhcmRWYXJpYW50IiwiaXNUYWJsZUJvdW5kIiwib0lubmVyQ2hhcnQiLCJnZXRDb250cm9sRGVsZWdhdGUiLCJfZ2V0Q2hhcnQiLCJpc0JvdW5kIiwiZ2V0QmluZGluZ0luZm8iXSwic291cmNlUm9vdCI6Ii4iLCJzb3VyY2VzIjpbIkxpc3RSZXBvcnRDb250cm9sbGVyLmNvbnRyb2xsZXIudHMiXSwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHR5cGUgUmVzb3VyY2VCdW5kbGUgZnJvbSBcInNhcC9iYXNlL2kxOG4vUmVzb3VyY2VCdW5kbGVcIjtcbmltcG9ydCBMb2cgZnJvbSBcInNhcC9iYXNlL0xvZ1wiO1xuaW1wb3J0IE9iamVjdFBhdGggZnJvbSBcInNhcC9iYXNlL3V0aWwvT2JqZWN0UGF0aFwiO1xuaW1wb3J0IHR5cGUgRHluYW1pY1BhZ2UgZnJvbSBcInNhcC9mL0R5bmFtaWNQYWdlXCI7XG5pbXBvcnQgQWN0aW9uUnVudGltZSBmcm9tIFwic2FwL2ZlL2NvcmUvQWN0aW9uUnVudGltZVwiO1xuaW1wb3J0IENvbW1vblV0aWxzIGZyb20gXCJzYXAvZmUvY29yZS9Db21tb25VdGlsc1wiO1xuaW1wb3J0IEludGVudEJhc2VkTmF2aWdhdGlvbiBmcm9tIFwic2FwL2ZlL2NvcmUvY29udHJvbGxlcmV4dGVuc2lvbnMvSW50ZW50QmFzZWROYXZpZ2F0aW9uXCI7XG5pbXBvcnQgSW50ZXJuYWxJbnRlbnRCYXNlZE5hdmlnYXRpb24gZnJvbSBcInNhcC9mZS9jb3JlL2NvbnRyb2xsZXJleHRlbnNpb25zL0ludGVybmFsSW50ZW50QmFzZWROYXZpZ2F0aW9uXCI7XG5pbXBvcnQgSW50ZXJuYWxSb3V0aW5nIGZyb20gXCJzYXAvZmUvY29yZS9jb250cm9sbGVyZXh0ZW5zaW9ucy9JbnRlcm5hbFJvdXRpbmdcIjtcbmltcG9ydCBLUElNYW5hZ2VtZW50IGZyb20gXCJzYXAvZmUvY29yZS9jb250cm9sbGVyZXh0ZW5zaW9ucy9LUElNYW5hZ2VtZW50XCI7XG5pbXBvcnQgTWFzc0VkaXQgZnJvbSBcInNhcC9mZS9jb3JlL2NvbnRyb2xsZXJleHRlbnNpb25zL01hc3NFZGl0XCI7XG5pbXBvcnQgUGxhY2Vob2xkZXIgZnJvbSBcInNhcC9mZS9jb3JlL2NvbnRyb2xsZXJleHRlbnNpb25zL1BsYWNlaG9sZGVyXCI7XG5pbXBvcnQgU2hhcmUgZnJvbSBcInNhcC9mZS9jb3JlL2NvbnRyb2xsZXJleHRlbnNpb25zL1NoYXJlXCI7XG5pbXBvcnQgU2lkZUVmZmVjdHMgZnJvbSBcInNhcC9mZS9jb3JlL2NvbnRyb2xsZXJleHRlbnNpb25zL1NpZGVFZmZlY3RzXCI7XG5pbXBvcnQgVmlld1N0YXRlIGZyb20gXCJzYXAvZmUvY29yZS9jb250cm9sbGVyZXh0ZW5zaW9ucy9WaWV3U3RhdGVcIjtcbmltcG9ydCB0eXBlIEZpbHRlckJhciBmcm9tIFwic2FwL2ZlL2NvcmUvY29udHJvbHMvRmlsdGVyQmFyXCI7XG5pbXBvcnQge1xuXHRkZWZpbmVVSTVDbGFzcyxcblx0ZXh0ZW5zaWJsZSxcblx0ZmluYWxFeHRlbnNpb24sXG5cdHByaXZhdGVFeHRlbnNpb24sXG5cdHB1YmxpY0V4dGVuc2lvbixcblx0dXNpbmdFeHRlbnNpb25cbn0gZnJvbSBcInNhcC9mZS9jb3JlL2hlbHBlcnMvQ2xhc3NTdXBwb3J0XCI7XG5pbXBvcnQgRWRpdFN0YXRlIGZyb20gXCJzYXAvZmUvY29yZS9oZWxwZXJzL0VkaXRTdGF0ZVwiO1xuaW1wb3J0IE1lc3NhZ2VTdHJpcCBmcm9tIFwic2FwL2ZlL2NvcmUvaGVscGVycy9NZXNzYWdlU3RyaXBcIjtcbmltcG9ydCB7IEludGVybmFsTW9kZWxDb250ZXh0IH0gZnJvbSBcInNhcC9mZS9jb3JlL2hlbHBlcnMvTW9kZWxIZWxwZXJcIjtcbmltcG9ydCAqIGFzIFN0YWJsZUlkSGVscGVyIGZyb20gXCJzYXAvZmUvY29yZS9oZWxwZXJzL1N0YWJsZUlkSGVscGVyXCI7XG5pbXBvcnQgQ29yZUxpYnJhcnkgZnJvbSBcInNhcC9mZS9jb3JlL2xpYnJhcnlcIjtcbmltcG9ydCBQYWdlQ29udHJvbGxlciBmcm9tIFwic2FwL2ZlL2NvcmUvUGFnZUNvbnRyb2xsZXJcIjtcbmltcG9ydCBDaGFydFJ1bnRpbWUgZnJvbSBcInNhcC9mZS9tYWNyb3MvY2hhcnQvQ2hhcnRSdW50aW1lXCI7XG5pbXBvcnQgQ2hhcnRVdGlscyBmcm9tIFwic2FwL2ZlL21hY3Jvcy9jaGFydC9DaGFydFV0aWxzXCI7XG5pbXBvcnQgQ29tbW9uSGVscGVyIGZyb20gXCJzYXAvZmUvbWFjcm9zL0NvbW1vbkhlbHBlclwiO1xuaW1wb3J0IERlbGVnYXRlVXRpbCBmcm9tIFwic2FwL2ZlL21hY3Jvcy9EZWxlZ2F0ZVV0aWxcIjtcbmltcG9ydCBGaWx0ZXJVdGlscyBmcm9tIFwic2FwL2ZlL21hY3Jvcy9maWx0ZXIvRmlsdGVyVXRpbHNcIjtcbmltcG9ydCBUYWJsZUhlbHBlciBmcm9tIFwic2FwL2ZlL21hY3Jvcy90YWJsZS9UYWJsZUhlbHBlclwiO1xuaW1wb3J0IE11bHRpcGxlTW9kZUNvbnRyb2wgZnJvbSBcInNhcC9mZS90ZW1wbGF0ZXMvTGlzdFJlcG9ydC9jb250cm9scy9NdWx0aXBsZU1vZGVDb250cm9sXCI7XG5pbXBvcnQgRXh0ZW5zaW9uQVBJIGZyb20gXCJzYXAvZmUvdGVtcGxhdGVzL0xpc3RSZXBvcnQvRXh0ZW5zaW9uQVBJXCI7XG5pbXBvcnQgVGFibGVTY3JvbGxlciBmcm9tIFwic2FwL2ZlL3RlbXBsYXRlcy9UYWJsZVNjcm9sbGVyXCI7XG5pbXBvcnQgdHlwZSBTZWdtZW50ZWRCdXR0b24gZnJvbSBcInNhcC9tL1NlZ21lbnRlZEJ1dHRvblwiO1xuaW1wb3J0IHR5cGUgQ29udHJvbCBmcm9tIFwic2FwL3VpL2NvcmUvQ29udHJvbFwiO1xuaW1wb3J0IE92ZXJyaWRlRXhlY3V0aW9uIGZyb20gXCJzYXAvdWkvY29yZS9tdmMvT3ZlcnJpZGVFeGVjdXRpb25cIjtcbmltcG9ydCB7IHN5c3RlbSB9IGZyb20gXCJzYXAvdWkvRGV2aWNlXCI7XG5pbXBvcnQgU3RhdGVVdGlsIGZyb20gXCJzYXAvdWkvbWRjL3AxM24vU3RhdGVVdGlsXCI7XG5pbXBvcnQgdHlwZSBUYWJsZSBmcm9tIFwic2FwL3VpL21kYy9UYWJsZVwiO1xuaW1wb3J0IHR5cGUgSlNPTk1vZGVsIGZyb20gXCJzYXAvdWkvbW9kZWwvanNvbi9KU09OTW9kZWxcIjtcbmltcG9ydCB0eXBlIFJlc291cmNlTW9kZWwgZnJvbSBcInNhcC91aS9tb2RlbC9yZXNvdXJjZS9SZXNvdXJjZU1vZGVsXCI7XG5pbXBvcnQgaGFzaGVyIGZyb20gXCJzYXAvdWkvdGhpcmRwYXJ0eS9oYXNoZXJcIjtcbmltcG9ydCB0eXBlIHsgVjRDb250ZXh0IH0gZnJvbSBcInR5cGVzL2V4dGVuc2lvbl90eXBlc1wiO1xuaW1wb3J0ICogYXMgTGlzdFJlcG9ydFRlbXBsYXRpbmcgZnJvbSBcIi4vTGlzdFJlcG9ydFRlbXBsYXRpbmdcIjtcbmltcG9ydCBJbnRlbnRCYXNlZE5hdmlnYXRpb25PdmVycmlkZSBmcm9tIFwiLi9vdmVycmlkZXMvSW50ZW50QmFzZWROYXZpZ2F0aW9uXCI7XG5pbXBvcnQgU2hhcmVPdmVycmlkZXMgZnJvbSBcIi4vb3ZlcnJpZGVzL1NoYXJlXCI7XG5pbXBvcnQgVmlld1N0YXRlT3ZlcnJpZGVzIGZyb20gXCIuL292ZXJyaWRlcy9WaWV3U3RhdGVcIjtcblxuY29uc3QgVGVtcGxhdGVDb250ZW50VmlldyA9IENvcmVMaWJyYXJ5LlRlbXBsYXRlQ29udGVudFZpZXcsXG5cdEluaXRpYWxMb2FkTW9kZSA9IENvcmVMaWJyYXJ5LkluaXRpYWxMb2FkTW9kZTtcblxuLyoqXG4gKiBDb250cm9sbGVyIGNsYXNzIGZvciB0aGUgbGlzdCByZXBvcnQgcGFnZSwgdXNlZCBpbnNpZGUgYW4gU0FQIEZpb3JpIGVsZW1lbnRzIGFwcGxpY2F0aW9uLlxuICpcbiAqIEBoaWRlY29uc3RydWN0b3JcbiAqIEBwdWJsaWNcbiAqL1xuQGRlZmluZVVJNUNsYXNzKFwic2FwLmZlLnRlbXBsYXRlcy5MaXN0UmVwb3J0Lkxpc3RSZXBvcnRDb250cm9sbGVyXCIpXG5jbGFzcyBMaXN0UmVwb3J0Q29udHJvbGxlciBleHRlbmRzIFBhZ2VDb250cm9sbGVyIHtcblx0QHVzaW5nRXh0ZW5zaW9uKFxuXHRcdEludGVybmFsUm91dGluZy5vdmVycmlkZSh7XG5cdFx0XHRvbkFmdGVyQmluZGluZzogZnVuY3Rpb24gKHRoaXM6IEludGVybmFsUm91dGluZykge1xuXHRcdFx0XHQodGhpcy5nZXRWaWV3KCkuZ2V0Q29udHJvbGxlcigpIGFzIExpc3RSZXBvcnRDb250cm9sbGVyKS5fb25BZnRlckJpbmRpbmcoKTtcblx0XHRcdH1cblx0XHR9KVxuXHQpXG5cdF9yb3V0aW5nITogSW50ZXJuYWxSb3V0aW5nO1xuXHRAdXNpbmdFeHRlbnNpb24oXG5cdFx0SW50ZXJuYWxJbnRlbnRCYXNlZE5hdmlnYXRpb24ub3ZlcnJpZGUoe1xuXHRcdFx0Z2V0RW50aXR5U2V0OiBmdW5jdGlvbiAodGhpczogSW50ZXJuYWxJbnRlbnRCYXNlZE5hdmlnYXRpb24pIHtcblx0XHRcdFx0cmV0dXJuICh0aGlzLmJhc2UgYXMgTGlzdFJlcG9ydENvbnRyb2xsZXIpLmdldEN1cnJlbnRFbnRpdHlTZXQoKTtcblx0XHRcdH1cblx0XHR9KVxuXHQpXG5cdF9pbnRlbnRCYXNlZE5hdmlnYXRpb24hOiBJbnRlcm5hbEludGVudEJhc2VkTmF2aWdhdGlvbjtcblx0QHVzaW5nRXh0ZW5zaW9uKFNpZGVFZmZlY3RzKVxuXHRzaWRlRWZmZWN0cyE6IFNpZGVFZmZlY3RzO1xuXG5cdEB1c2luZ0V4dGVuc2lvbihJbnRlbnRCYXNlZE5hdmlnYXRpb24ub3ZlcnJpZGUoSW50ZW50QmFzZWROYXZpZ2F0aW9uT3ZlcnJpZGUpKVxuXHRpbnRlbnRCYXNlZE5hdmlnYXRpb24hOiBJbnRlbnRCYXNlZE5hdmlnYXRpb247XG5cblx0QHVzaW5nRXh0ZW5zaW9uKFNoYXJlLm92ZXJyaWRlKFNoYXJlT3ZlcnJpZGVzKSlcblx0c2hhcmUhOiBTaGFyZTtcblxuXHRAdXNpbmdFeHRlbnNpb24oVmlld1N0YXRlLm92ZXJyaWRlKFZpZXdTdGF0ZU92ZXJyaWRlcykpXG5cdHZpZXdTdGF0ZSE6IFZpZXdTdGF0ZTtcblxuXHRAdXNpbmdFeHRlbnNpb24oS1BJTWFuYWdlbWVudClcblx0a3BpTWFuYWdlbWVudCE6IEtQSU1hbmFnZW1lbnQ7XG5cdEB1c2luZ0V4dGVuc2lvbihQbGFjZWhvbGRlcilcblx0cGxhY2Vob2xkZXIhOiBQbGFjZWhvbGRlcjtcblx0QHVzaW5nRXh0ZW5zaW9uKE1hc3NFZGl0KVxuXHRtYXNzRWRpdCE6IE1hc3NFZGl0O1xuXHRwcm90ZWN0ZWQgZXh0ZW5zaW9uQVBJPzogRXh0ZW5zaW9uQVBJO1xuXHRwcml2YXRlIGZpbHRlckJhckNvbmRpdGlvbnM/OiBhbnk7XG5cdHByaXZhdGUgc1VwZGF0ZVRpbWVyPzogYW55O1xuXHRwcml2YXRlIG9SZXNvdXJjZUJ1bmRsZT86IFJlc291cmNlQnVuZGxlO1xuXHRwcml2YXRlIGhhc1BlbmRpbmdDaGFydENoYW5nZXM/OiBib29sZWFuO1xuXHRwcml2YXRlIGhhc1BlbmRpbmdUYWJsZUNoYW5nZXM/OiBib29sZWFuO1xuXG5cdC8qKlxuXHQgKiBHZXQgdGhlIGV4dGVuc2lvbiBBUEkgZm9yIHRoZSBjdXJyZW50IHBhZ2UuXG5cdCAqXG5cdCAqIEBwdWJsaWNcblx0ICogQHJldHVybnMgVGhlIGV4dGVuc2lvbiBBUEkuXG5cdCAqL1xuXHRAcHVibGljRXh0ZW5zaW9uKClcblx0QGZpbmFsRXh0ZW5zaW9uKClcblx0Z2V0RXh0ZW5zaW9uQVBJKCk6IEV4dGVuc2lvbkFQSSB7XG5cdFx0aWYgKCF0aGlzLmV4dGVuc2lvbkFQSSkge1xuXHRcdFx0dGhpcy5leHRlbnNpb25BUEkgPSBuZXcgRXh0ZW5zaW9uQVBJKHRoaXMpO1xuXHRcdH1cblx0XHRyZXR1cm4gdGhpcy5leHRlbnNpb25BUEk7XG5cdH1cblxuXHRvbkluaXQoKSB7XG5cdFx0UGFnZUNvbnRyb2xsZXIucHJvdG90eXBlLm9uSW5pdC5hcHBseSh0aGlzKTtcblx0XHRjb25zdCBvSW50ZXJuYWxNb2RlbENvbnRleHQgPSB0aGlzLmdldFZpZXcoKS5nZXRCaW5kaW5nQ29udGV4dChcImludGVybmFsXCIpIGFzIEludGVybmFsTW9kZWxDb250ZXh0O1xuXG5cdFx0b0ludGVybmFsTW9kZWxDb250ZXh0LnNldFByb3BlcnR5KFwiaGFzUGVuZGluZ0ZpbHRlcnNcIiwgdHJ1ZSk7XG5cdFx0b0ludGVybmFsTW9kZWxDb250ZXh0LnNldFByb3BlcnR5KFwiYXBwbGllZEZpbHRlcnNcIiwgXCJcIik7XG5cdFx0b0ludGVybmFsTW9kZWxDb250ZXh0LnNldFByb3BlcnR5KFwiaGlkZURyYWZ0SW5mb1wiLCBmYWxzZSk7XG5cdFx0b0ludGVybmFsTW9kZWxDb250ZXh0LnNldFByb3BlcnR5KFwidW9tXCIsIHt9KTtcblx0XHRvSW50ZXJuYWxNb2RlbENvbnRleHQuc2V0UHJvcGVydHkoXCJzY2FsZWZhY3RvclwiLCB7fSk7XG5cdFx0b0ludGVybmFsTW9kZWxDb250ZXh0LnNldFByb3BlcnR5KFwic2NhbGVmYWN0b3JOdW1iZXJcIiwge30pO1xuXHRcdG9JbnRlcm5hbE1vZGVsQ29udGV4dC5zZXRQcm9wZXJ0eShcImN1cnJlbmN5XCIsIHt9KTtcblxuXHRcdGlmICh0aGlzLl9oYXNNdWx0aVZpc3VhbGl6YXRpb25zKCkpIHtcblx0XHRcdGxldCBhbHBDb250ZW50VmlldyA9IHRoaXMuX2dldERlZmF1bHRQYXRoKCk7XG5cdFx0XHRpZiAoIXN5c3RlbS5kZXNrdG9wICYmIGFscENvbnRlbnRWaWV3ID09PSBUZW1wbGF0ZUNvbnRlbnRWaWV3Lkh5YnJpZCkge1xuXHRcdFx0XHRhbHBDb250ZW50VmlldyA9IFRlbXBsYXRlQ29udGVudFZpZXcuQ2hhcnQ7XG5cdFx0XHR9XG5cdFx0XHRvSW50ZXJuYWxNb2RlbENvbnRleHQuc2V0UHJvcGVydHkoXCJhbHBDb250ZW50Vmlld1wiLCBhbHBDb250ZW50Vmlldyk7XG5cdFx0fVxuXG5cdFx0Ly8gU3RvcmUgY29uZGl0aW9ucyBmcm9tIGZpbHRlciBiYXJcblx0XHQvLyB0aGlzIGlzIGxhdGVyIHVzZWQgYmVmb3JlIG5hdmlnYXRpb24gdG8gZ2V0IGNvbmRpdGlvbnMgYXBwbGllZCBvbiB0aGUgZmlsdGVyIGJhclxuXHRcdHRoaXMuZmlsdGVyQmFyQ29uZGl0aW9ucyA9IHt9O1xuXG5cdFx0Ly8gQXMgQXBwU3RhdGVIYW5kbGVyLmFwcGx5QXBwU3RhdGUgdHJpZ2dlcnMgYSBuYXZpZ2F0aW9uIHdlIHdhbnQgdG8gbWFrZSBzdXJlIGl0IHdpbGxcblx0XHQvLyBoYXBwZW4gYWZ0ZXIgdGhlIHJvdXRlTWF0Y2ggZXZlbnQgaGFzIGJlZW4gcHJvY2Vzc2VkIChvdGhlcndpc2UgdGhlIHJvdXRlciBnZXRzIGJyb2tlbilcblx0XHR0aGlzLmdldEFwcENvbXBvbmVudCgpLmdldFJvdXRlclByb3h5KCkud2FpdEZvclJvdXRlTWF0Y2hCZWZvcmVOYXZpZ2F0aW9uKCk7XG5cblx0XHQvLyBDb25maWd1cmUgdGhlIGluaXRpYWwgbG9hZCBzZXR0aW5nc1xuXHRcdHRoaXMuX3NldEluaXRMb2FkKCk7XG5cdH1cblxuXHRvbkV4aXQoKSB7XG5cdFx0ZGVsZXRlIHRoaXMuZmlsdGVyQmFyQ29uZGl0aW9ucztcblx0XHRpZiAodGhpcy5leHRlbnNpb25BUEkpIHtcblx0XHRcdHRoaXMuZXh0ZW5zaW9uQVBJLmRlc3Ryb3koKTtcblx0XHR9XG5cdFx0ZGVsZXRlIHRoaXMuZXh0ZW5zaW9uQVBJO1xuXHR9XG5cblx0X29uQWZ0ZXJCaW5kaW5nKCkge1xuXHRcdGNvbnN0IGFUYWJsZXMgPSB0aGlzLl9nZXRDb250cm9scyhcInRhYmxlXCIpO1xuXHRcdGlmIChFZGl0U3RhdGUuaXNFZGl0U3RhdGVEaXJ0eSgpKSB7XG5cdFx0XHR0aGlzLl9nZXRNdWx0aU1vZGVDb250cm9sKCk/LmludmFsaWRhdGVDb250ZW50KCk7XG5cdFx0XHRjb25zdCBvVGFibGVCaW5kaW5nID0gdGhpcy5fZ2V0VGFibGUoKT8uZ2V0Um93QmluZGluZygpO1xuXHRcdFx0aWYgKG9UYWJsZUJpbmRpbmcpIHtcblx0XHRcdFx0aWYgKENvbW1vblV0aWxzLmdldEFwcENvbXBvbmVudCh0aGlzLmdldFZpZXcoKSkuX2lzRmNsRW5hYmxlZCgpKSB7XG5cdFx0XHRcdFx0Ly8gdGhlcmUgaXMgYW4gaXNzdWUgaWYgd2UgdXNlIGEgdGltZW91dCB3aXRoIGEga2VwdCBhbGl2ZSBjb250ZXh0IHVzZWQgb24gYW5vdGhlciBwYWdlXG5cdFx0XHRcdFx0b1RhYmxlQmluZGluZy5yZWZyZXNoKCk7XG5cdFx0XHRcdH0gZWxzZSB7XG5cdFx0XHRcdFx0aWYgKCF0aGlzLnNVcGRhdGVUaW1lcikge1xuXHRcdFx0XHRcdFx0dGhpcy5zVXBkYXRlVGltZXIgPSBzZXRUaW1lb3V0KCgpID0+IHtcblx0XHRcdFx0XHRcdFx0b1RhYmxlQmluZGluZy5yZWZyZXNoKCk7XG5cdFx0XHRcdFx0XHRcdGRlbGV0ZSB0aGlzLnNVcGRhdGVUaW1lcjtcblx0XHRcdFx0XHRcdH0sIDApO1xuXHRcdFx0XHRcdH1cblxuXHRcdFx0XHRcdC8vIFVwZGF0ZSBhY3Rpb24gZW5hYmxlbWVudCBhbmQgdmlzaWJpbGl0eSB1cG9uIHRhYmxlIGRhdGEgdXBkYXRlLlxuXHRcdFx0XHRcdGNvbnN0IGZuVXBkYXRlVGFibGVBY3Rpb25zID0gKCkgPT4ge1xuXHRcdFx0XHRcdFx0dGhpcy5fdXBkYXRlVGFibGVBY3Rpb25zKGFUYWJsZXMpO1xuXHRcdFx0XHRcdFx0b1RhYmxlQmluZGluZy5kZXRhY2hEYXRhUmVjZWl2ZWQoZm5VcGRhdGVUYWJsZUFjdGlvbnMpO1xuXHRcdFx0XHRcdH07XG5cdFx0XHRcdFx0b1RhYmxlQmluZGluZy5hdHRhY2hEYXRhUmVjZWl2ZWQoZm5VcGRhdGVUYWJsZUFjdGlvbnMpO1xuXHRcdFx0XHR9XG5cdFx0XHR9XG5cdFx0XHRFZGl0U3RhdGUuc2V0RWRpdFN0YXRlUHJvY2Vzc2VkKCk7XG5cdFx0fVxuXG5cdFx0aWYgKCF0aGlzLnNVcGRhdGVUaW1lcikge1xuXHRcdFx0dGhpcy5fdXBkYXRlVGFibGVBY3Rpb25zKGFUYWJsZXMpO1xuXHRcdH1cblxuXHRcdGNvbnN0IGludGVybmFsTW9kZWxDb250ZXh0ID0gdGhpcy5nZXRWaWV3KCkuZ2V0QmluZGluZ0NvbnRleHQoXCJpbnRlcm5hbFwiKSBhcyBJbnRlcm5hbE1vZGVsQ29udGV4dDtcblx0XHRpZiAoIWludGVybmFsTW9kZWxDb250ZXh0LmdldFByb3BlcnR5KFwiaW5pdGlhbFZhcmlhbnRBcHBsaWVkXCIpKSB7XG5cdFx0XHRjb25zdCB2aWV3SWQgPSB0aGlzLmdldFZpZXcoKS5nZXRJZCgpO1xuXHRcdFx0dGhpcy5wYWdlUmVhZHkud2FpdEZvcih0aGlzLmdldEFwcENvbXBvbmVudCgpLmdldEFwcFN0YXRlSGFuZGxlcigpLmFwcGx5QXBwU3RhdGUodmlld0lkLCB0aGlzLmdldFZpZXcoKSkpO1xuXHRcdFx0aW50ZXJuYWxNb2RlbENvbnRleHQuc2V0UHJvcGVydHkoXCJpbml0aWFsVmFyaWFudEFwcGxpZWRcIiwgdHJ1ZSk7XG5cdFx0fVxuXHR9XG5cblx0b25CZWZvcmVSZW5kZXJpbmcoKSB7XG5cdFx0UGFnZUNvbnRyb2xsZXIucHJvdG90eXBlLm9uQmVmb3JlUmVuZGVyaW5nLmFwcGx5KHRoaXMpO1xuXHR9XG5cblx0b25BZnRlclJlbmRlcmluZygpIHtcblx0XHQoKHRoaXMuZ2V0VmlldygpLmdldE1vZGVsKFwic2FwLmZlLmkxOG5cIikgYXMgUmVzb3VyY2VNb2RlbCkuZ2V0UmVzb3VyY2VCdW5kbGUoKSBhcyBQcm9taXNlPFJlc291cmNlQnVuZGxlPilcblx0XHRcdC50aGVuKChyZXNwb25zZTogYW55KSA9PiB7XG5cdFx0XHRcdHRoaXMub1Jlc291cmNlQnVuZGxlID0gcmVzcG9uc2U7XG5cdFx0XHRcdGNvbnN0IGFUYWJsZXMgPSB0aGlzLl9nZXRDb250cm9scygpIGFzIFRhYmxlW107XG5cdFx0XHRcdGNvbnN0IHNFbnRpdHlTZXQgPSAodGhpcy5nZXRWaWV3KCkuZ2V0Vmlld0RhdGEoKSBhcyBhbnkpLmVudGl0eVNldDtcblx0XHRcdFx0Y29uc3Qgc1RleHQgPSBDb21tb25VdGlscy5nZXRUcmFuc2xhdGVkVGV4dChcblx0XHRcdFx0XHRcIlRfVEFCTEVfQU5EX0NIQVJUX05PX0RBVEFfVEVYVFwiLFxuXHRcdFx0XHRcdHRoaXMub1Jlc291cmNlQnVuZGxlIGFzIFJlc291cmNlQnVuZGxlLFxuXHRcdFx0XHRcdHVuZGVmaW5lZCxcblx0XHRcdFx0XHRzRW50aXR5U2V0XG5cdFx0XHRcdCk7XG5cdFx0XHRcdGFUYWJsZXMuZm9yRWFjaChmdW5jdGlvbiAob1RhYmxlOiBUYWJsZSkge1xuXHRcdFx0XHRcdG9UYWJsZS5zZXROb0RhdGEoc1RleHQpO1xuXHRcdFx0XHR9KTtcblx0XHRcdH0pXG5cdFx0XHQuY2F0Y2goZnVuY3Rpb24gKG9FcnJvcjogYW55KSB7XG5cdFx0XHRcdExvZy5lcnJvcihcIkVycm9yIHdoaWxlIHJldHJpZXZpbmcgdGhlIHJlc291cmNlIGJ1bmRsZVwiLCBvRXJyb3IpO1xuXHRcdFx0fSk7XG5cdH1cblxuXHRAcHJpdmF0ZUV4dGVuc2lvbigpXG5cdEBleHRlbnNpYmxlKE92ZXJyaWRlRXhlY3V0aW9uLkFmdGVyKVxuXHRvblBhZ2VSZWFkeShtUGFyYW1ldGVyczogYW55KSB7XG5cdFx0aWYgKG1QYXJhbWV0ZXJzLmZvcmNlRm9jdXMpIHtcblx0XHRcdHRoaXMuX3NldEluaXRpYWxGb2N1cygpO1xuXHRcdH1cblx0XHQvLyBSZW1vdmUgdGhlIGhhbmRsZXIgb24gYmFjayBuYXZpZ2F0aW9uIHRoYXQgZGlzcGxheXMgRHJhZnQgY29uZmlybWF0aW9uXG5cdFx0dGhpcy5nZXRBcHBDb21wb25lbnQoKS5nZXRTaGVsbFNlcnZpY2VzKCkuc2V0QmFja05hdmlnYXRpb24odW5kZWZpbmVkKTtcblx0fVxuXG5cdC8qKlxuXHQgKiBNZXRob2QgY2FsbGVkIHdoZW4gdGhlIGNvbnRlbnQgb2YgYSBjdXN0b20gdmlldyB1c2VkIGluIGEgbGlzdCByZXBvcnQgbmVlZHMgdG8gYmUgcmVmcmVzaGVkLlxuXHQgKiBUaGlzIGhhcHBlbnMgZWl0aGVyIHdoZW4gdGhlcmUgaXMgYSBjaGFuZ2Ugb24gdGhlIEZpbHRlckJhciBhbmQgdGhlIHNlYXJjaCBpcyB0cmlnZ2VyZWQsXG5cdCAqIG9yIHdoZW4gYSB0YWIgd2l0aCBjdXN0b20gY29udGVudCBpcyBzZWxlY3RlZC5cblx0ICogVGhpcyBtZXRob2QgY2FuIGJlIG92ZXJ3cml0dGVuIGJ5IHRoZSBjb250cm9sbGVyIGV4dGVuc2lvbiBpbiBjYXNlIG9mIGN1c3RvbWl6YXRpb24uXG5cdCAqXG5cdCAqIEBwYXJhbSBtUGFyYW1ldGVycyBNYXAgY29udGFpbmluZyB0aGUgZmlsdGVyIGNvbmRpdGlvbnMgb2YgdGhlIEZpbHRlckJhciwgdGhlIGN1cnJlbnRUYWJJRFxuXHQgKiBhbmQgdGhlIHZpZXcgcmVmcmVzaCBjYXVzZSAodGFiQ2hhbmdlZCBvciBzZWFyY2gpLlxuXHQgKiBUaGUgbWFwIGxvb2tzIGxpa2UgdGhpczpcblx0ICogPGNvZGU+PHByZT5cblx0ICogXHR7XG5cdCAqIFx0XHRmaWx0ZXJDb25kaXRpb25zOiB7XG5cdCAqIFx0XHRcdENvdW50cnk6IFtcblx0ICogXHRcdFx0XHR7XG5cdCAqIFx0XHRcdFx0XHRvcGVyYXRvcjogXCJFUVwiXG5cdCAqXHRcdFx0XHRcdHZhbGlkYXRlZDogXCJOb3RWYWxpZGF0ZWRcIlxuXHQgKlx0XHRcdFx0XHR2YWx1ZXM6IFtcIkdlcm1hbnlcIiwgLi4uXVxuXHQgKiBcdFx0XHRcdH0sXG5cdCAqIFx0XHRcdFx0Li4uXG5cdCAqIFx0XHRcdF1cblx0ICogXHRcdFx0Li4uXG5cdCAqIFx0XHR9LFxuXHQgKlx0XHRjdXJyZW50VGFiSWQ6IFwiZmU6OkN1c3RvbVRhYjo6dGFiMVwiLFxuXHQgKlx0XHRyZWZyZXNoQ2F1c2U6IFwidGFiQ2hhbmdlZFwiIHwgXCJzZWFyY2hcIlxuXHQgKlx0fVxuXHQgKiA8L3ByZT48L2NvZGU+XG5cdCAqIEBwdWJsaWNcblx0ICovXG5cdEBwdWJsaWNFeHRlbnNpb24oKVxuXHRAZXh0ZW5zaWJsZShPdmVycmlkZUV4ZWN1dGlvbi5BZnRlcilcblx0Ly8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIEB0eXBlc2NyaXB0LWVzbGludC9uby11bnVzZWQtdmFyc1xuXHRvblZpZXdOZWVkc1JlZnJlc2gobVBhcmFtZXRlcnM6IGFueSkge1xuXHRcdC8qIFRvIGJlIG92ZXJyaWRlbiAqL1xuXHR9XG5cblx0LyoqXG5cdCAqIE1ldGhvZCBjYWxsZWQgd2hlbiBhIGZpbHRlciBvciBzZWFyY2ggdmFsdWUgaGFzIGJlZW4gY2hhbmdlZCBpbiB0aGUgRmlsdGVyQmFyLFxuXHQgKiBidXQgaGFzIG5vdCBiZWVuIHZhbGlkYXRlZCB5ZXQgYnkgdGhlIGVuZCB1c2VyICh3aXRoIHRoZSAnR28nIG9yICdTZWFyY2gnIGJ1dHRvbikuXG5cdCAqIFR5cGljYWxseSwgdGhlIGNvbnRlbnQgb2YgdGhlIGN1cnJlbnQgdGFiIGlzIGdyZXllZCBvdXQgdW50aWwgdGhlIGZpbHRlcnMgYXJlIHZhbGlkYXRlZC5cblx0ICogVGhpcyBtZXRob2QgY2FuIGJlIG92ZXJ3cml0dGVuIGJ5IHRoZSBjb250cm9sbGVyIGV4dGVuc2lvbiBpbiBjYXNlIG9mIGN1c3RvbWl6YXRpb24uXG5cdCAqXG5cdCAqIEBwdWJsaWNcblx0ICovXG5cdEBwdWJsaWNFeHRlbnNpb24oKVxuXHRAZXh0ZW5zaWJsZShPdmVycmlkZUV4ZWN1dGlvbi5BZnRlcilcblx0b25QZW5kaW5nRmlsdGVycygpIHtcblx0XHQvKiBUbyBiZSBvdmVycmlkZW4gKi9cblx0fVxuXG5cdGdldEN1cnJlbnRFbnRpdHlTZXQoKSB7XG5cdFx0cmV0dXJuIHRoaXMuX2dldFRhYmxlKCk/LmRhdGEoXCJ0YXJnZXRDb2xsZWN0aW9uUGF0aFwiKS5zbGljZSgxKTtcblx0fVxuXG5cdC8qKlxuXHQgKiBNZXRob2QgY2FsbGVkIHdoZW4gdGhlICdDbGVhcicgYnV0dG9uIG9uIHRoZSBGaWx0ZXJCYXIgaXMgcHJlc3NlZC5cblx0ICpcblx0ICogQHB1YmxpY1xuXHQgKi9cblx0QHB1YmxpY0V4dGVuc2lvbigpXG5cdEBleHRlbnNpYmxlKE92ZXJyaWRlRXhlY3V0aW9uLkFmdGVyKVxuXHRvbkFmdGVyQ2xlYXIoKSB7XG5cdFx0LyogVG8gYmUgb3ZlcnJpZGVuICovXG5cdH1cblxuXHQvKipcblx0ICogVGhpcyBtZXRob2QgaW5pdGlhdGVzIHRoZSB1cGRhdGUgb2YgdGhlIGVuYWJsZWQgc3RhdGUgb2YgdGhlIERhdGFGaWVsZEZvckFjdGlvbiBhbmQgdGhlIHZpc2libGUgc3RhdGUgb2YgdGhlIERhdGFGaWVsZEZvcklCTiBidXR0b25zLlxuXHQgKlxuXHQgKiBAcGFyYW0gYVRhYmxlcyBBcnJheSBvZiB0YWJsZXMgaW4gdGhlIGxpc3QgcmVwb3J0XG5cdCAqIEBwcml2YXRlXG5cdCAqL1xuXHRfdXBkYXRlVGFibGVBY3Rpb25zKGFUYWJsZXM6IGFueSkge1xuXHRcdGxldCBhSUJOQWN0aW9uczogYW55W10gPSBbXTtcblx0XHRhVGFibGVzLmZvckVhY2goZnVuY3Rpb24gKG9UYWJsZTogYW55KSB7XG5cdFx0XHRhSUJOQWN0aW9ucyA9IENvbW1vblV0aWxzLmdldElCTkFjdGlvbnMob1RhYmxlLCBhSUJOQWN0aW9ucyk7XG5cdFx0XHQvLyBVcGRhdGUgJ2VuYWJsZWQnIHByb3BlcnR5IG9mIERhdGFGaWVsZEZvckFjdGlvbiBidXR0b25zIG9uIHRhYmxlIHRvb2xiYXJcblx0XHRcdC8vIFRoZSBzYW1lIGlzIGFsc28gcGVyZm9ybWVkIG9uIFRhYmxlIHNlbGVjdGlvbkNoYW5nZSBldmVudFxuXHRcdFx0Y29uc3Qgb0ludGVybmFsTW9kZWxDb250ZXh0ID0gb1RhYmxlLmdldEJpbmRpbmdDb250ZXh0KFwiaW50ZXJuYWxcIiksXG5cdFx0XHRcdG9BY3Rpb25PcGVyYXRpb25BdmFpbGFibGVNYXAgPSBKU09OLnBhcnNlKFxuXHRcdFx0XHRcdENvbW1vbkhlbHBlci5wYXJzZUN1c3RvbURhdGEoRGVsZWdhdGVVdGlsLmdldEN1c3RvbURhdGEob1RhYmxlLCBcIm9wZXJhdGlvbkF2YWlsYWJsZU1hcFwiKSlcblx0XHRcdFx0KSxcblx0XHRcdFx0YVNlbGVjdGVkQ29udGV4dHMgPSBvVGFibGUuZ2V0U2VsZWN0ZWRDb250ZXh0cygpO1xuXG5cdFx0XHRvSW50ZXJuYWxNb2RlbENvbnRleHQuc2V0UHJvcGVydHkoXCJzZWxlY3RlZENvbnRleHRzXCIsIGFTZWxlY3RlZENvbnRleHRzKTtcblx0XHRcdG9JbnRlcm5hbE1vZGVsQ29udGV4dC5zZXRQcm9wZXJ0eShcIm51bWJlck9mU2VsZWN0ZWRDb250ZXh0c1wiLCBhU2VsZWN0ZWRDb250ZXh0cy5sZW5ndGgpO1xuXHRcdFx0VGFibGVIZWxwZXIuaGFuZGxlVGFibGVEZWxldGVFbmFibGVtZW50Rm9yU2lkZUVmZmVjdHMob1RhYmxlLCBvSW50ZXJuYWxNb2RlbENvbnRleHQpO1xuXHRcdFx0QWN0aW9uUnVudGltZS5zZXRBY3Rpb25FbmFibGVtZW50KG9JbnRlcm5hbE1vZGVsQ29udGV4dCwgb0FjdGlvbk9wZXJhdGlvbkF2YWlsYWJsZU1hcCwgYVNlbGVjdGVkQ29udGV4dHMsIFwidGFibGVcIik7XG5cdFx0fSk7XG5cdFx0Q29tbW9uVXRpbHMudXBkYXRlRGF0YUZpZWxkRm9ySUJOQnV0dG9uc1Zpc2liaWxpdHkoYUlCTkFjdGlvbnMsIHRoaXMuZ2V0VmlldygpKTtcblx0fVxuXG5cdC8qKlxuXHQgKiBUaGlzIG1ldGhvZCBzY3JvbGxzIHRvIGEgc3BlY2lmaWMgcm93IG9uIGFsbCB0aGUgYXZhaWxhYmxlIHRhYmxlcy5cblx0ICpcblx0ICogQGZ1bmN0aW9uXG5cdCAqIEBuYW1lIHNhcC5mZS50ZW1wbGF0ZXMuTGlzdFJlcG9ydC5MaXN0UmVwb3J0Q29udHJvbGxlci5jb250cm9sbGVyI19zY3JvbGxUYWJsZXNUb1Jvd1xuXHQgKiBAcGFyYW0gc1Jvd1BhdGggVGhlIHBhdGggb2YgdGhlIHRhYmxlIHJvdyBjb250ZXh0IHRvIGJlIHNjcm9sbGVkIHRvXG5cdCAqL1xuXHRfc2Nyb2xsVGFibGVzVG9Sb3coc1Jvd1BhdGg6IHN0cmluZykge1xuXHRcdHRoaXMuX2dldENvbnRyb2xzKFwidGFibGVcIikuZm9yRWFjaChmdW5jdGlvbiAob1RhYmxlOiBhbnkpIHtcblx0XHRcdFRhYmxlU2Nyb2xsZXIuc2Nyb2xsVGFibGVUb1JvdyhvVGFibGUsIHNSb3dQYXRoKTtcblx0XHR9KTtcblx0fVxuXG5cdC8qKlxuXHQgKiBUaGlzIG1ldGhvZCBzZXQgdGhlIGluaXRpYWwgZm9jdXMgd2l0aGluIHRoZSBMaXN0IFJlcG9ydCBhY2NvcmRpbmcgdG8gdGhlIFVYIGd1aWRlIGxpbmVzLlxuXHQgKlxuXHQgKiBAZnVuY3Rpb25cblx0ICogQG5hbWUgc2FwLmZlLnRlbXBsYXRlcy5MaXN0UmVwb3J0Lkxpc3RSZXBvcnRDb250cm9sbGVyLmNvbnRyb2xsZXIjX3NldEluaXRpYWxGb2N1c1xuXHQgKi9cblx0X3NldEluaXRpYWxGb2N1cygpIHtcblx0XHRjb25zdCBkeW5hbWljUGFnZSA9IHRoaXMuX2dldER5bmFtaWNMaXN0UmVwb3J0Q29udHJvbCgpLFxuXHRcdFx0aXNIZWFkZXJFeHBhbmRlZCA9IGR5bmFtaWNQYWdlLmdldEhlYWRlckV4cGFuZGVkKCksXG5cdFx0XHRmaWx0ZXJCYXIgPSB0aGlzLl9nZXRGaWx0ZXJCYXJDb250cm9sKCkgYXMgYW55O1xuXHRcdGlmIChmaWx0ZXJCYXIpIHtcblx0XHRcdGlmIChpc0hlYWRlckV4cGFuZGVkKSB7XG5cdFx0XHRcdC8vRW5hYmxpbmcgbWFuZGF0b3J5IGZpbHRlciBmaWVsZHMgbWVzc2FnZSBkaWFsb2dcblx0XHRcdFx0aWYgKCFmaWx0ZXJCYXIuZ2V0U2hvd01lc3NhZ2VzKCkpIHtcblx0XHRcdFx0XHRmaWx0ZXJCYXIuc2V0U2hvd01lc3NhZ2VzKHRydWUpO1xuXHRcdFx0XHR9XG5cdFx0XHRcdGNvbnN0IGZpcnN0RW1wdHlNYW5kYXRvcnlGaWVsZCA9IGZpbHRlckJhci5nZXRGaWx0ZXJJdGVtcygpLmZpbmQoZnVuY3Rpb24gKG9GaWx0ZXJJdGVtOiBhbnkpIHtcblx0XHRcdFx0XHRyZXR1cm4gb0ZpbHRlckl0ZW0uZ2V0UmVxdWlyZWQoKSAmJiBvRmlsdGVySXRlbS5nZXRDb25kaXRpb25zKCkubGVuZ3RoID09PSAwO1xuXHRcdFx0XHR9KTtcblx0XHRcdFx0Ly9Gb2N1c2luZyBvbiB0aGUgZmlyc3QgZW1wdHkgbWFuZGF0b3J5IGZpbHRlciBmaWVsZCwgb3Igb24gdGhlIGZpcnN0IGZpbHRlciBmaWVsZCBpZiB0aGUgdGFibGUgZGF0YSBpcyBsb2FkZWRcblx0XHRcdFx0aWYgKGZpcnN0RW1wdHlNYW5kYXRvcnlGaWVsZCkge1xuXHRcdFx0XHRcdGZpcnN0RW1wdHlNYW5kYXRvcnlGaWVsZC5mb2N1cygpO1xuXHRcdFx0XHR9IGVsc2UgaWYgKHRoaXMuX2lzSW5pdExvYWRFbmFibGVkKCkpIHtcblx0XHRcdFx0XHRmaWx0ZXJCYXIuZ2V0RmlsdGVySXRlbXMoKVswXS5mb2N1cygpO1xuXHRcdFx0XHR9IGVsc2Uge1xuXHRcdFx0XHRcdC8vRm9jdXNpbmcgb24gdGhlIEdvIGJ1dHRvblxuXHRcdFx0XHRcdHRoaXMuZ2V0VmlldygpLmJ5SWQoYCR7dGhpcy5fZ2V0RmlsdGVyQmFyQ29udHJvbElkKCl9LWJ0blNlYXJjaGApPy5mb2N1cygpO1xuXHRcdFx0XHR9XG5cdFx0XHR9IGVsc2UgaWYgKHRoaXMuX2lzSW5pdExvYWRFbmFibGVkKCkpIHtcblx0XHRcdFx0dGhpcy5fZ2V0VGFibGUoKT8uZm9jdXNSb3coMCk7XG5cdFx0XHR9XG5cdFx0fSBlbHNlIHtcblx0XHRcdHRoaXMuX2dldFRhYmxlKCk/LmZvY3VzUm93KDApO1xuXHRcdH1cblx0fVxuXG5cdF9nZXRQYWdlVGl0bGVJbmZvcm1hdGlvbigpIHtcblx0XHRjb25zdCBvTWFuaWZlc3RFbnRyeSA9IHRoaXMuZ2V0QXBwQ29tcG9uZW50KCkuZ2V0TWFuaWZlc3RFbnRyeShcInNhcC5hcHBcIik7XG5cdFx0cmV0dXJuIHtcblx0XHRcdHRpdGxlOiBvTWFuaWZlc3RFbnRyeS50aXRsZSxcblx0XHRcdHN1YnRpdGxlOiBvTWFuaWZlc3RFbnRyeS5zdWJUaXRsZSB8fCBcIlwiLFxuXHRcdFx0aW50ZW50OiBcIlwiLFxuXHRcdFx0aWNvbjogXCJcIlxuXHRcdH07XG5cdH1cblxuXHRfZ2V0RmlsdGVyQmFyQ29udHJvbCgpIHtcblx0XHRyZXR1cm4gdGhpcy5nZXRWaWV3KCkuYnlJZCh0aGlzLl9nZXRGaWx0ZXJCYXJDb250cm9sSWQoKSkgYXMgRmlsdGVyQmFyO1xuXHR9XG5cblx0X2dldER5bmFtaWNMaXN0UmVwb3J0Q29udHJvbCgpIHtcblx0XHRyZXR1cm4gdGhpcy5nZXRWaWV3KCkuYnlJZCh0aGlzLl9nZXREeW5hbWljTGlzdFJlcG9ydENvbnRyb2xJZCgpKSBhcyBEeW5hbWljUGFnZTtcblx0fVxuXG5cdF9nZXRBZGFwdGF0aW9uRmlsdGVyQmFyQ29udHJvbCgpIHtcblx0XHQvLyBJZiB0aGUgYWRhcHRhdGlvbiBmaWx0ZXIgYmFyIGlzIHBhcnQgb2YgdGhlIERPTSB0cmVlLCB0aGUgXCJBZGFwdCBGaWx0ZXJcIiBkaWFsb2cgaXMgb3Blbixcblx0XHQvLyBhbmQgd2UgcmV0dXJuIHRoZSBhZGFwdGF0aW9uIGZpbHRlciBiYXIgYXMgYW4gYWN0aXZlIGNvbnRyb2wgKHZpc2libGUgZm9yIHRoZSB1c2VyKVxuXHRcdGNvbnN0IGFkYXB0YXRpb25GaWx0ZXJCYXIgPSAodGhpcy5fZ2V0RmlsdGVyQmFyQ29udHJvbCgpIGFzIGFueSkuZ2V0SW5idWlsdEZpbHRlcigpO1xuXHRcdHJldHVybiBhZGFwdGF0aW9uRmlsdGVyQmFyPy5nZXRQYXJlbnQoKSA/IGFkYXB0YXRpb25GaWx0ZXJCYXIgOiB1bmRlZmluZWQ7XG5cdH1cblxuXHRfZ2V0U2VnbWVudGVkQnV0dG9uKHNDb250cm9sOiBhbnkpIHtcblx0XHRjb25zdCBzU2VnbWVudGVkQnV0dG9uSWQgPSAoc0NvbnRyb2wgPT09IFwiQ2hhcnRcIiA/IHRoaXMuZ2V0Q2hhcnRDb250cm9sKCkgOiB0aGlzLl9nZXRUYWJsZSgpKT8uZGF0YShcInNlZ21lbnRlZEJ1dHRvbklkXCIpO1xuXHRcdHJldHVybiB0aGlzLmdldFZpZXcoKS5ieUlkKHNTZWdtZW50ZWRCdXR0b25JZCk7XG5cdH1cblxuXHRfZ2V0Q29udHJvbEZyb21QYWdlTW9kZWxQcm9wZXJ0eShzUGF0aDogc3RyaW5nKSB7XG5cdFx0Y29uc3QgY29udHJvbElkID0gdGhpcy5fZ2V0UGFnZU1vZGVsKCk/LmdldFByb3BlcnR5KHNQYXRoKTtcblx0XHRyZXR1cm4gY29udHJvbElkICYmIHRoaXMuZ2V0VmlldygpLmJ5SWQoY29udHJvbElkKTtcblx0fVxuXG5cdF9nZXREeW5hbWljTGlzdFJlcG9ydENvbnRyb2xJZCgpOiBzdHJpbmcge1xuXHRcdHJldHVybiB0aGlzLl9nZXRQYWdlTW9kZWwoKT8uZ2V0UHJvcGVydHkoXCIvZHluYW1pY0xpc3RSZXBvcnRJZFwiKSB8fCBcIlwiO1xuXHR9XG5cblx0X2dldEZpbHRlckJhckNvbnRyb2xJZCgpOiBzdHJpbmcge1xuXHRcdHJldHVybiB0aGlzLl9nZXRQYWdlTW9kZWwoKT8uZ2V0UHJvcGVydHkoXCIvZmlsdGVyQmFySWRcIikgfHwgXCJcIjtcblx0fVxuXG5cdGdldENoYXJ0Q29udHJvbCgpIHtcblx0XHRyZXR1cm4gdGhpcy5fZ2V0Q29udHJvbEZyb21QYWdlTW9kZWxQcm9wZXJ0eShcIi9zaW5nbGVDaGFydElkXCIpO1xuXHR9XG5cblx0X2dldFZpc3VhbEZpbHRlckJhckNvbnRyb2woKSB7XG5cdFx0Y29uc3Qgc1Zpc3VhbEZpbHRlckJhcklkID0gU3RhYmxlSWRIZWxwZXIuZ2VuZXJhdGUoW1widmlzdWFsRmlsdGVyXCIsIHRoaXMuX2dldEZpbHRlckJhckNvbnRyb2xJZCgpXSk7XG5cdFx0cmV0dXJuIHNWaXN1YWxGaWx0ZXJCYXJJZCAmJiB0aGlzLmdldFZpZXcoKS5ieUlkKHNWaXN1YWxGaWx0ZXJCYXJJZCk7XG5cdH1cblx0X2dldEZpbHRlckJhclZhcmlhbnRDb250cm9sKCkge1xuXHRcdHJldHVybiB0aGlzLl9nZXRDb250cm9sRnJvbVBhZ2VNb2RlbFByb3BlcnR5KFwiL3ZhcmlhbnRNYW5hZ2VtZW50L2lkXCIpO1xuXHR9XG5cblx0X2dldE11bHRpTW9kZUNvbnRyb2woKSB7XG5cdFx0cmV0dXJuIHRoaXMuZ2V0VmlldygpLmJ5SWQoXCJmZTo6VGFiTXVsdGlwbGVNb2RlOjpDb250cm9sXCIpIGFzIE11bHRpcGxlTW9kZUNvbnRyb2w7XG5cdH1cblxuXHRfZ2V0VGFibGUoKTogVGFibGUgfCB1bmRlZmluZWQge1xuXHRcdGlmICh0aGlzLl9pc011bHRpTW9kZSgpKSB7XG5cdFx0XHRjb25zdCBvQ29udHJvbCA9IHRoaXMuX2dldE11bHRpTW9kZUNvbnRyb2woKT8uZ2V0U2VsZWN0ZWRJbm5lckNvbnRyb2woKT8uY29udGVudDtcblx0XHRcdHJldHVybiBvQ29udHJvbD8uaXNBKFwic2FwLnVpLm1kYy5UYWJsZVwiKSA/IChvQ29udHJvbCBhcyBUYWJsZSkgOiB1bmRlZmluZWQ7XG5cdFx0fSBlbHNlIHtcblx0XHRcdHJldHVybiB0aGlzLl9nZXRDb250cm9sRnJvbVBhZ2VNb2RlbFByb3BlcnR5KFwiL3NpbmdsZVRhYmxlSWRcIikgYXMgVGFibGU7XG5cdFx0fVxuXHR9XG5cdF9nZXRDb250cm9scyhzS2V5PzogYW55KSB7XG5cdFx0aWYgKHRoaXMuX2lzTXVsdGlNb2RlKCkpIHtcblx0XHRcdGNvbnN0IGFDb250cm9sczogYW55W10gPSBbXTtcblx0XHRcdGNvbnN0IG9UYWJNdWx0aU1vZGUgPSB0aGlzLl9nZXRNdWx0aU1vZGVDb250cm9sKCkuY29udGVudDtcblx0XHRcdG9UYWJNdWx0aU1vZGUuZ2V0SXRlbXMoKS5mb3JFYWNoKChvSXRlbTogYW55KSA9PiB7XG5cdFx0XHRcdGNvbnN0IG9Db250cm9sID0gdGhpcy5nZXRWaWV3KCkuYnlJZChvSXRlbS5nZXRLZXkoKSk7XG5cdFx0XHRcdGlmIChvQ29udHJvbCAmJiBzS2V5KSB7XG5cdFx0XHRcdFx0aWYgKG9JdGVtLmdldEtleSgpLmluZGV4T2YoYGZlOjoke3NLZXl9YCkgPiAtMSkge1xuXHRcdFx0XHRcdFx0YUNvbnRyb2xzLnB1c2gob0NvbnRyb2wpO1xuXHRcdFx0XHRcdH1cblx0XHRcdFx0fSBlbHNlIGlmIChvQ29udHJvbCAhPT0gdW5kZWZpbmVkICYmIG9Db250cm9sICE9PSBudWxsKSB7XG5cdFx0XHRcdFx0YUNvbnRyb2xzLnB1c2gob0NvbnRyb2wpO1xuXHRcdFx0XHR9XG5cdFx0XHR9KTtcblx0XHRcdHJldHVybiBhQ29udHJvbHM7XG5cdFx0fSBlbHNlIGlmIChzS2V5ID09PSBcIkNoYXJ0XCIpIHtcblx0XHRcdGNvbnN0IG9DaGFydCA9IHRoaXMuZ2V0Q2hhcnRDb250cm9sKCk7XG5cdFx0XHRyZXR1cm4gb0NoYXJ0ID8gW29DaGFydF0gOiBbXTtcblx0XHR9IGVsc2Uge1xuXHRcdFx0Y29uc3Qgb1RhYmxlID0gdGhpcy5fZ2V0VGFibGUoKTtcblx0XHRcdHJldHVybiBvVGFibGUgPyBbb1RhYmxlXSA6IFtdO1xuXHRcdH1cblx0fVxuXG5cdF9nZXREZWZhdWx0UGF0aCgpIHtcblx0XHRjb25zdCBkZWZhdWx0UGF0aCA9IExpc3RSZXBvcnRUZW1wbGF0aW5nLmdldERlZmF1bHRQYXRoKHRoaXMuX2dldFBhZ2VNb2RlbCgpPy5nZXRQcm9wZXJ0eShcIi92aWV3c1wiKSB8fCBbXSk7XG5cdFx0c3dpdGNoIChkZWZhdWx0UGF0aCkge1xuXHRcdFx0Y2FzZSBcInByaW1hcnlcIjpcblx0XHRcdFx0cmV0dXJuIFRlbXBsYXRlQ29udGVudFZpZXcuQ2hhcnQ7XG5cdFx0XHRjYXNlIFwic2Vjb25kYXJ5XCI6XG5cdFx0XHRcdHJldHVybiBUZW1wbGF0ZUNvbnRlbnRWaWV3LlRhYmxlO1xuXHRcdFx0Y2FzZSBcImJvdGhcIjpcblx0XHRcdGRlZmF1bHQ6XG5cdFx0XHRcdHJldHVybiBUZW1wbGF0ZUNvbnRlbnRWaWV3Lkh5YnJpZDtcblx0XHR9XG5cdH1cblxuXHQvKipcblx0ICogTWV0aG9kIHRvIGtub3cgaWYgTGlzdFJlcG9ydCBpcyBjb25maWd1cmVkIHdpdGggTXVsdGlwbGUgVGFibGUgbW9kZS5cblx0ICpcblx0ICogQGZ1bmN0aW9uXG5cdCAqIEBuYW1lIF9pc011bHRpTW9kZVxuXHQgKiBAcmV0dXJucyBJcyBNdWx0aXBsZSBUYWJsZSBtb2RlIHNldD9cblx0ICovXG5cdF9pc011bHRpTW9kZSgpOiBib29sZWFuIHtcblx0XHRyZXR1cm4gISF0aGlzLl9nZXRQYWdlTW9kZWwoKT8uZ2V0UHJvcGVydHkoXCIvbXVsdGlWaWV3c0NvbnRyb2xcIik7XG5cdH1cblxuXHQvKipcblx0ICogTWV0aG9kIHRvIGtub3cgaWYgTGlzdFJlcG9ydCBpcyBjb25maWd1cmVkIHRvIGxvYWQgZGF0YSBhdCBzdGFydCB1cC5cblx0ICpcblx0ICogQGZ1bmN0aW9uXG5cdCAqIEBuYW1lIF9pc0luaXRMb2FkRGlzYWJsZWRcblx0ICogQHJldHVybnMgSXMgSW5pdExvYWQgZW5hYmxlZD9cblx0ICovXG5cdF9pc0luaXRMb2FkRW5hYmxlZCgpOiBib29sZWFuIHtcblx0XHRjb25zdCBpbml0TG9hZE1vZGUgPSAodGhpcy5nZXRWaWV3KCkuZ2V0Vmlld0RhdGEoKSBhcyBhbnkpLmluaXRpYWxMb2FkO1xuXHRcdHJldHVybiBpbml0TG9hZE1vZGUgPT09IEluaXRpYWxMb2FkTW9kZS5FbmFibGVkO1xuXHR9XG5cblx0X2hhc011bHRpVmlzdWFsaXphdGlvbnMoKTogYm9vbGVhbiB7XG5cdFx0cmV0dXJuIHRoaXMuX2dldFBhZ2VNb2RlbCgpPy5nZXRQcm9wZXJ0eShcIi9oYXNNdWx0aVZpc3VhbGl6YXRpb25zXCIpO1xuXHR9XG5cblx0LyoqXG5cdCAqIE1ldGhvZCB0byBzdXNwZW5kIHNlYXJjaCBvbiB0aGUgZmlsdGVyIGJhci4gVGhlIGluaXRpYWwgbG9hZGluZyBvZiBkYXRhIGlzIGRpc2FibGVkIGJhc2VkIG9uIHRoZSBtYW5pZmVzdCBjb25maWd1cmF0aW9uIEluaXRMb2FkIC0gRGlzYWJsZWQvQXV0by5cblx0ICogSXQgaXMgZW5hYmxlZCBsYXRlciB3aGVuIHRoZSB2aWV3IHN0YXRlIGlzIHNldCwgd2hlbiBpdCBpcyBwb3NzaWJsZSB0byByZWFsaXplIGlmIHRoZXJlIGFyZSBkZWZhdWx0IGZpbHRlcnMuXG5cdCAqL1xuXHRfZGlzYWJsZUluaXRMb2FkKCkge1xuXHRcdGNvbnN0IGZpbHRlckJhciA9IHRoaXMuX2dldEZpbHRlckJhckNvbnRyb2woKTtcblx0XHQvLyBjaGVjayBmb3IgZmlsdGVyIGJhciBoaWRkZW5cblx0XHRpZiAoZmlsdGVyQmFyKSB7XG5cdFx0XHRmaWx0ZXJCYXIuc2V0U3VzcGVuZFNlbGVjdGlvbih0cnVlKTtcblx0XHR9XG5cdH1cblxuXHQvKipcblx0ICogTWV0aG9kIGNhbGxlZCBieSBmbGV4IHRvIGRldGVybWluZSBpZiB0aGUgYXBwbHlBdXRvbWF0aWNhbGx5IHNldHRpbmcgb24gdGhlIHZhcmlhbnQgaXMgdmFsaWQuXG5cdCAqIENhbGxlZCBvbmx5IGZvciBTdGFuZGFyZCBWYXJpYW50IGFuZCBvbmx5IHdoZW4gdGhlcmUgaXMgZGlzcGxheSB0ZXh0IHNldCBmb3IgYXBwbHlBdXRvbWF0aWNhbGx5IChGRSBvbmx5IHNldHMgaXQgZm9yIEF1dG8pLlxuXHQgKlxuXHQgKiBAcmV0dXJucyBCb29sZWFuIHRydWUgaWYgZGF0YSBzaG91bGQgYmUgbG9hZGVkIGF1dG9tYXRpY2FsbHksIGZhbHNlIG90aGVyd2lzZVxuXHQgKi9cblx0X2FwcGx5QXV0b21hdGljYWxseU9uU3RhbmRhcmRWYXJpYW50KCkge1xuXHRcdC8vIFdlIGFsd2F5cyByZXR1cm4gZmFsc2UgYW5kIHRha2UgY2FyZSBvZiBpdCB3aGVuIHZpZXcgc3RhdGUgaXMgc2V0XG5cdFx0cmV0dXJuIGZhbHNlO1xuXHR9XG5cblx0LyoqXG5cdCAqIENvbmZpZ3VyZSB0aGUgc2V0dGluZ3MgZm9yIGluaXRpYWwgbG9hZCBiYXNlZCBvblxuXHQgKiAtIG1hbmlmZXN0IHNldHRpbmcgaW5pdExvYWQgLSBFbmFibGVkL0Rpc2FibGVkL0F1dG9cblx0ICogLSB1c2VyJ3Mgc2V0dGluZyBvZiBhcHBseUF1dG9tYXRpY2FsbHkgb24gdmFyaWFudFxuXHQgKiAtIGlmIHRoZXJlIGFyZSBkZWZhdWx0IGZpbHRlcnNcblx0ICogV2UgZGlzYWJsZSB0aGUgZmlsdGVyIGJhciBzZWFyY2ggYXQgdGhlIGJlZ2lubmluZyBhbmQgZW5hYmxlIGl0IHdoZW4gdmlldyBzdGF0ZSBpcyBzZXQuXG5cdCAqL1xuXHRfc2V0SW5pdExvYWQoKSB7XG5cdFx0Ly8gaWYgaW5pdExvYWQgaXMgRGlzYWJsZWQgb3IgQXV0bywgc3dpdGNoIG9mZiBmaWx0ZXIgYmFyIHNlYXJjaCB0ZW1wb3JhcmlseSBhdCBzdGFydFxuXHRcdGlmICghdGhpcy5faXNJbml0TG9hZEVuYWJsZWQoKSkge1xuXHRcdFx0dGhpcy5fZGlzYWJsZUluaXRMb2FkKCk7XG5cdFx0fVxuXHRcdC8vIHNldCBob29rIGZvciBmbGV4IGZvciB3aGVuIHN0YW5kYXJkIHZhcmlhbnQgaXMgc2V0IChhdCBzdGFydCBvciBieSB1c2VyIGF0IHJ1bnRpbWUpXG5cdFx0Ly8gcmVxdWlyZWQgdG8gb3ZlcnJpZGUgdGhlIHVzZXIgc2V0dGluZyAnYXBwbHkgYXV0b21hdGljYWxseScgYmVoYXZpb3VyIGlmIHRoZXJlIGFyZSBubyBmaWx0ZXJzXG5cdFx0Y29uc3QgdmFyaWFudE1hbmFnZW1lbnRJZDogYW55ID0gTGlzdFJlcG9ydFRlbXBsYXRpbmcuZ2V0VmFyaWFudEJhY2tSZWZlcmVuY2UodGhpcy5nZXRWaWV3KCkuZ2V0Vmlld0RhdGEoKSwgdGhpcy5fZ2V0UGFnZU1vZGVsKCkpO1xuXHRcdGNvbnN0IHZhcmlhbnRNYW5hZ2VtZW50ID0gdmFyaWFudE1hbmFnZW1lbnRJZCAmJiB0aGlzLmdldFZpZXcoKS5ieUlkKHZhcmlhbnRNYW5hZ2VtZW50SWQpO1xuXHRcdGlmICh2YXJpYW50TWFuYWdlbWVudCkge1xuXHRcdFx0dmFyaWFudE1hbmFnZW1lbnQucmVnaXN0ZXJBcHBseUF1dG9tYXRpY2FsbHlPblN0YW5kYXJkVmFyaWFudCh0aGlzLl9hcHBseUF1dG9tYXRpY2FsbHlPblN0YW5kYXJkVmFyaWFudC5iaW5kKHRoaXMpKTtcblx0XHR9XG5cdH1cblxuXHRfc2V0U2hhcmVNb2RlbCgpIHtcblx0XHQvLyBUT0RPOiBkZWFjdGl2YXRlZCBmb3Igbm93IC0gY3VycmVudGx5IHRoZXJlIGlzIG5vIF90ZW1wbFByaXYgYW55bW9yZSwgdG8gYmUgZGlzY3Vzc2VkXG5cdFx0Ly8gdGhpcyBtZXRob2QgaXMgY3VycmVudGx5IG5vdCBjYWxsZWQgYW55bW9yZSBmcm9tIHRoZSBpbml0IG1ldGhvZFxuXG5cdFx0Y29uc3QgZm5HZXRVc2VyID0gT2JqZWN0UGF0aC5nZXQoXCJzYXAudXNoZWxsLkNvbnRhaW5lci5nZXRVc2VyXCIpO1xuXHRcdC8vdmFyIG9NYW5pZmVzdCA9IHRoaXMuZ2V0T3duZXJDb21wb25lbnQoKS5nZXRBcHBDb21wb25lbnQoKS5nZXRNZXRhZGF0YSgpLmdldE1hbmlmZXN0RW50cnkoXCJzYXAudWlcIik7XG5cdFx0Ly92YXIgc0Jvb2ttYXJrSWNvbiA9IChvTWFuaWZlc3QgJiYgb01hbmlmZXN0Lmljb25zICYmIG9NYW5pZmVzdC5pY29ucy5pY29uKSB8fCBcIlwiO1xuXG5cdFx0Ly9zaGFyZU1vZGVsOiBIb2xkcyBhbGwgdGhlIHNoYXJpbmcgcmVsZXZhbnQgaW5mb3JtYXRpb24gYW5kIGluZm8gdXNlZCBpbiBYTUwgdmlld1xuXHRcdGNvbnN0IG9TaGFyZUluZm8gPSB7XG5cdFx0XHRib29rbWFya1RpdGxlOiBkb2N1bWVudC50aXRsZSwgLy9UbyBuYW1lIHRoZSBib29rbWFyayBhY2NvcmRpbmcgdG8gdGhlIGFwcCB0aXRsZS5cblx0XHRcdGJvb2ttYXJrQ3VzdG9tVXJsOiBmdW5jdGlvbiAoKSB7XG5cdFx0XHRcdGNvbnN0IHNIYXNoID0gaGFzaGVyLmdldEhhc2goKTtcblx0XHRcdFx0cmV0dXJuIHNIYXNoID8gYCMke3NIYXNofWAgOiB3aW5kb3cubG9jYXRpb24uaHJlZjtcblx0XHRcdH0sXG5cdFx0XHQvKlxuXHRcdFx0XHRcdFx0XHRUbyBiZSBhY3RpdmF0ZWQgb25jZSB0aGUgRkxQIHNob3dzIHRoZSBjb3VudCAtIHNlZSBjb21tZW50IGFib3ZlXG5cdFx0XHRcdFx0XHRcdGJvb2ttYXJrU2VydmljZVVybDogZnVuY3Rpb24oKSB7XG5cdFx0XHRcdFx0XHRcdFx0Ly92YXIgb1RhYmxlID0gb1RhYmxlLmdldElubmVyVGFibGUoKTsgb1RhYmxlIGlzIGFscmVhZHkgdGhlIHNhcC5mZSB0YWJsZSAoYnV0IG5vdCB0aGUgaW5uZXIgb25lKVxuXHRcdFx0XHRcdFx0XHRcdC8vIHdlIHNob3VsZCB1c2UgdGFibGUuZ2V0TGlzdEJpbmRpbmdJbmZvIGluc3RlYWQgb2YgdGhlIGJpbmRpbmdcblx0XHRcdFx0XHRcdFx0XHR2YXIgb0JpbmRpbmcgPSBvVGFibGUuZ2V0QmluZGluZyhcInJvd3NcIikgfHwgb1RhYmxlLmdldEJpbmRpbmcoXCJpdGVtc1wiKTtcblx0XHRcdFx0XHRcdFx0XHRyZXR1cm4gb0JpbmRpbmcgPyBmbkdldERvd25sb2FkVXJsKG9CaW5kaW5nKSA6IFwiXCI7XG5cdFx0XHRcdFx0XHRcdH0sKi9cblx0XHRcdGlzU2hhcmVJbkphbUFjdGl2ZTogISFmbkdldFVzZXIgJiYgZm5HZXRVc2VyKCkuaXNKYW1BY3RpdmUoKVxuXHRcdH07XG5cblx0XHRjb25zdCBvVGVtcGxhdGVQcml2YXRlTW9kZWwgPSB0aGlzLmdldE93bmVyQ29tcG9uZW50KCkuZ2V0TW9kZWwoXCJfdGVtcGxQcml2XCIpIGFzIEpTT05Nb2RlbDtcblx0XHRvVGVtcGxhdGVQcml2YXRlTW9kZWwuc2V0UHJvcGVydHkoXCIvbGlzdFJlcG9ydC9zaGFyZVwiLCBvU2hhcmVJbmZvKTtcblx0fVxuXG5cdC8qKlxuXHQgKiBNZXRob2QgdG8gdXBkYXRlIHRoZSBsb2NhbCBVSSBtb2RlbCBvZiB0aGUgcGFnZSB3aXRoIHRoZSBmaWVsZHMgdGhhdCBhcmUgbm90IGFwcGxpY2FibGUgdG8gdGhlIGZpbHRlciBiYXIgKHRoaXMgaXMgc3BlY2lmaWMgdG8gdGhlIEFMUCBzY2VuYXJpbykuXG5cdCAqXG5cdCAqIEBwYXJhbSBvSW50ZXJuYWxNb2RlbENvbnRleHQgVGhlIGludGVybmFsIG1vZGVsIGNvbnRleHRcblx0ICogQHBhcmFtIG9GaWx0ZXJCYXIgTURDIGZpbHRlciBiYXJcblx0ICovXG5cdF91cGRhdGVBTFBOb3RBcHBsaWNhYmxlRmllbGRzKG9JbnRlcm5hbE1vZGVsQ29udGV4dDogSW50ZXJuYWxNb2RlbENvbnRleHQsIG9GaWx0ZXJCYXI6IEZpbHRlckJhcikge1xuXHRcdGNvbnN0IG1DYWNoZTogYW55ID0ge307XG5cdFx0Y29uc3QgaWdub3JlZEZpZWxkczogYW55ID0ge30sXG5cdFx0XHRhVGFibGVzID0gdGhpcy5fZ2V0Q29udHJvbHMoXCJ0YWJsZVwiKSxcblx0XHRcdGFDaGFydHMgPSB0aGlzLl9nZXRDb250cm9scyhcIkNoYXJ0XCIpO1xuXG5cdFx0aWYgKCFhVGFibGVzLmxlbmd0aCB8fCAhYUNoYXJ0cy5sZW5ndGgpIHtcblx0XHRcdC8vIElmIHRoZXJlJ3Mgbm90IGEgdGFibGUgYW5kIGEgY2hhcnQsIHdlJ3JlIG5vdCBpbiB0aGUgQUxQIGNhc2Vcblx0XHRcdHJldHVybjtcblx0XHR9XG5cblx0XHQvLyBGb3IgdGhlIG1vbWVudCwgdGhlcmUncyBub3RoaW5nIGZvciB0YWJsZXMuLi5cblx0XHRhQ2hhcnRzLmZvckVhY2goZnVuY3Rpb24gKG9DaGFydDogYW55KSB7XG5cdFx0XHRjb25zdCBzQ2hhcnRFbnRpdHlQYXRoID0gb0NoYXJ0LmRhdGEoXCJ0YXJnZXRDb2xsZWN0aW9uUGF0aFwiKSxcblx0XHRcdFx0c0NoYXJ0RW50aXR5U2V0ID0gc0NoYXJ0RW50aXR5UGF0aC5zbGljZSgxKSxcblx0XHRcdFx0c0NhY2hlS2V5ID0gYCR7c0NoYXJ0RW50aXR5U2V0fUNoYXJ0YDtcblx0XHRcdGlmICghbUNhY2hlW3NDYWNoZUtleV0pIHtcblx0XHRcdFx0bUNhY2hlW3NDYWNoZUtleV0gPSBGaWx0ZXJVdGlscy5nZXROb3RBcHBsaWNhYmxlRmlsdGVycyhvRmlsdGVyQmFyLCBvQ2hhcnQpO1xuXHRcdFx0fVxuXHRcdFx0aWdub3JlZEZpZWxkc1tzQ2FjaGVLZXldID0gbUNhY2hlW3NDYWNoZUtleV07XG5cdFx0fSk7XG5cdFx0b0ludGVybmFsTW9kZWxDb250ZXh0LnNldFByb3BlcnR5KFwiY29udHJvbHMvaWdub3JlZEZpZWxkc1wiLCBpZ25vcmVkRmllbGRzKTtcblx0fVxuXG5cdF9pc0ZpbHRlckJhckhpZGRlbigpIHtcblx0XHRyZXR1cm4gKHRoaXMuZ2V0VmlldygpLmdldFZpZXdEYXRhKCkgYXMgYW55KS5oaWRlRmlsdGVyQmFyO1xuXHR9XG5cblx0X2dldEFwcGx5QXV0b21hdGljYWxseU9uVmFyaWFudChWYXJpYW50TWFuYWdlbWVudDogYW55LCBrZXk6IHN0cmluZyk6IEJvb2xlYW4ge1xuXHRcdGlmICghVmFyaWFudE1hbmFnZW1lbnQgfHwgIWtleSkge1xuXHRcdFx0cmV0dXJuIGZhbHNlO1xuXHRcdH1cblx0XHRjb25zdCB2YXJpYW50cyA9IFZhcmlhbnRNYW5hZ2VtZW50LmdldFZhcmlhbnRzKCk7XG5cdFx0Y29uc3QgY3VycmVudFZhcmlhbnQgPSB2YXJpYW50cy5maW5kKGZ1bmN0aW9uICh2YXJpYW50OiBhbnkpIHtcblx0XHRcdHJldHVybiB2YXJpYW50ICYmIHZhcmlhbnQua2V5ID09PSBrZXk7XG5cdFx0fSk7XG5cdFx0cmV0dXJuIChjdXJyZW50VmFyaWFudCAmJiBjdXJyZW50VmFyaWFudC5leGVjdXRlT25TZWxlY3QpIHx8IGZhbHNlO1xuXHR9XG5cblx0X3Nob3VsZEF1dG9UcmlnZ2VyU2VhcmNoKG9WTTogYW55KSB7XG5cdFx0aWYgKFxuXHRcdFx0KHRoaXMuZ2V0VmlldygpLmdldFZpZXdEYXRhKCkgYXMgYW55KS5pbml0aWFsTG9hZCA9PT0gSW5pdGlhbExvYWRNb2RlLkF1dG8gJiZcblx0XHRcdCghb1ZNIHx8IG9WTS5nZXRTdGFuZGFyZFZhcmlhbnRLZXkoKSA9PT0gb1ZNLmdldEN1cnJlbnRWYXJpYW50S2V5KCkpXG5cdFx0KSB7XG5cdFx0XHRjb25zdCBvRmlsdGVyQmFyID0gdGhpcy5fZ2V0RmlsdGVyQmFyQ29udHJvbCgpO1xuXHRcdFx0aWYgKG9GaWx0ZXJCYXIpIHtcblx0XHRcdFx0Y29uc3Qgb0NvbmRpdGlvbnMgPSBvRmlsdGVyQmFyLmdldENvbmRpdGlvbnMoKTtcblx0XHRcdFx0Zm9yIChjb25zdCBzS2V5IGluIG9Db25kaXRpb25zKSB7XG5cdFx0XHRcdFx0Ly8gaWdub3JlIGZpbHRlcnMgc3RhcnRpbmcgd2l0aCAkIChlLmcuICRzZWFyY2gsICRlZGl0U3RhdGUpXG5cdFx0XHRcdFx0aWYgKCFzS2V5LnN0YXJ0c1dpdGgoXCIkXCIpICYmIEFycmF5LmlzQXJyYXkob0NvbmRpdGlvbnNbc0tleV0pICYmIG9Db25kaXRpb25zW3NLZXldLmxlbmd0aCkge1xuXHRcdFx0XHRcdFx0Ly8gbG9hZCBkYXRhIGFzIHBlciB1c2VyJ3Mgc2V0dGluZyBvZiBhcHBseUF1dG9tYXRpY2FsbHkgb24gdGhlIHZhcmlhbnRcblx0XHRcdFx0XHRcdGNvbnN0IHN0YW5kYXJkVmFyaWFudDogYW55ID0gb1ZNLmdldFZhcmlhbnRzKCkuZmluZCgodmFyaWFudDogYW55KSA9PiB7XG5cdFx0XHRcdFx0XHRcdHJldHVybiB2YXJpYW50LmtleSA9PT0gb1ZNLmdldEN1cnJlbnRWYXJpYW50S2V5KCk7XG5cdFx0XHRcdFx0XHR9KTtcblx0XHRcdFx0XHRcdHJldHVybiBzdGFuZGFyZFZhcmlhbnQgJiYgc3RhbmRhcmRWYXJpYW50LmV4ZWN1dGVPblNlbGVjdDtcblx0XHRcdFx0XHR9XG5cdFx0XHRcdH1cblx0XHRcdH1cblx0XHR9XG5cdFx0cmV0dXJuIGZhbHNlO1xuXHR9XG5cblx0X3VwZGF0ZVRhYmxlKG9UYWJsZTogYW55KSB7XG5cdFx0aWYgKCFvVGFibGUuaXNUYWJsZUJvdW5kKCkgfHwgdGhpcy5oYXNQZW5kaW5nQ2hhcnRDaGFuZ2VzKSB7XG5cdFx0XHRvVGFibGUucmViaW5kKCk7XG5cdFx0XHR0aGlzLmhhc1BlbmRpbmdDaGFydENoYW5nZXMgPSBmYWxzZTtcblx0XHR9XG5cdH1cblxuXHRfdXBkYXRlQ2hhcnQob0NoYXJ0OiBhbnkpIHtcblx0XHRjb25zdCBvSW5uZXJDaGFydCA9IG9DaGFydC5nZXRDb250cm9sRGVsZWdhdGUoKS5fZ2V0Q2hhcnQob0NoYXJ0KTtcblx0XHRpZiAoIShvSW5uZXJDaGFydCAmJiBvSW5uZXJDaGFydC5pc0JvdW5kKFwiZGF0YVwiKSkgfHwgdGhpcy5oYXNQZW5kaW5nVGFibGVDaGFuZ2VzKSB7XG5cdFx0XHRvQ2hhcnQuZ2V0Q29udHJvbERlbGVnYXRlKCkucmViaW5kKG9DaGFydCwgb0lubmVyQ2hhcnQuZ2V0QmluZGluZ0luZm8oXCJkYXRhXCIpKTtcblx0XHRcdHRoaXMuaGFzUGVuZGluZ1RhYmxlQ2hhbmdlcyA9IGZhbHNlO1xuXHRcdH1cblx0fVxuXG5cdGhhbmRsZXJzID0ge1xuXHRcdG9uRmlsdGVyU2VhcmNoKHRoaXM6IExpc3RSZXBvcnRDb250cm9sbGVyKSB7XG5cdFx0XHR0aGlzLl9nZXRGaWx0ZXJCYXJDb250cm9sKCkudHJpZ2dlclNlYXJjaCgpO1xuXHRcdH0sXG5cdFx0b25GaWx0ZXJzQ2hhbmdlZCh0aGlzOiBMaXN0UmVwb3J0Q29udHJvbGxlciwgb0V2ZW50OiBhbnkpIHtcblx0XHRcdGNvbnN0IG9GaWx0ZXJCYXIgPSB0aGlzLl9nZXRGaWx0ZXJCYXJDb250cm9sKCk7XG5cdFx0XHRpZiAob0ZpbHRlckJhcikge1xuXHRcdFx0XHRjb25zdCBvSW50ZXJuYWxNb2RlbENvbnRleHQgPSB0aGlzLmdldFZpZXcoKS5nZXRCaW5kaW5nQ29udGV4dChcImludGVybmFsXCIpIGFzIEludGVybmFsTW9kZWxDb250ZXh0O1xuXHRcdFx0XHQvLyBQZW5kaW5nIGZpbHRlcnMgaW50byBGaWx0ZXJCYXIgdG8gYmUgdXNlZCBmb3IgY3VzdG9tIHZpZXdzXG5cdFx0XHRcdHRoaXMub25QZW5kaW5nRmlsdGVycygpO1xuXHRcdFx0XHRvSW50ZXJuYWxNb2RlbENvbnRleHQuc2V0UHJvcGVydHkoXCJhcHBsaWVkRmlsdGVyc1wiLCBvRmlsdGVyQmFyLmdldEFzc2lnbmVkRmlsdGVyc1RleHQoKS5maWx0ZXJzVGV4dCk7XG5cdFx0XHRcdGlmIChvRXZlbnQuZ2V0UGFyYW1ldGVyKFwiY29uZGl0aW9uc0Jhc2VkXCIpKSB7XG5cdFx0XHRcdFx0b0ludGVybmFsTW9kZWxDb250ZXh0LnNldFByb3BlcnR5KFwiaGFzUGVuZGluZ0ZpbHRlcnNcIiwgdHJ1ZSk7XG5cdFx0XHRcdH1cblx0XHRcdH1cblx0XHR9LFxuXHRcdG9uVmFyaWFudFNlbGVjdGVkKHRoaXM6IExpc3RSZXBvcnRDb250cm9sbGVyLCBvRXZlbnQ6IGFueSkge1xuXHRcdFx0Y29uc3Qgb1ZNID0gb0V2ZW50LmdldFNvdXJjZSgpO1xuXHRcdFx0Y29uc3QgY3VycmVudFZhcmlhbnRLZXkgPSBvRXZlbnQuZ2V0UGFyYW1ldGVyKFwia2V5XCIpO1xuXHRcdFx0Y29uc3Qgb011bHRpTW9kZUNvbnRyb2wgPSB0aGlzLl9nZXRNdWx0aU1vZGVDb250cm9sKCk7XG5cdFx0XHRjb25zdCBpbml0aWFsQ29udHJvbFN0YXRlc01hcHBlciA9IHRoaXMudmlld1N0YXRlLmluaXRpYWxDb250cm9sU3RhdGVzTWFwcGVyO1xuXG5cdFx0XHRvTXVsdGlNb2RlQ29udHJvbD8uaW52YWxpZGF0ZUNvbnRlbnQoKTtcblx0XHRcdG9NdWx0aU1vZGVDb250cm9sPy5zZXRGcmVlemVDb250ZW50KHRydWUpO1xuXHRcdFx0Ly8gUmVzZXQgdGhlIENvbnRyb2xzIE1hcHBlZCB0byB0aGUgc2VsZWN0ZWQgVk1cblx0XHRcdGNvbnN0IHZtQXNzb2NpYXRlZENvbnRyb2xzVG9SZXNldCA9IG9WTS5nZXRGb3IoKTtcblx0XHRcdE9iamVjdC5rZXlzKGluaXRpYWxDb250cm9sU3RhdGVzTWFwcGVyKS5mb3JFYWNoKChjb250cm9sS2V5KSA9PiB7XG5cdFx0XHRcdGxldCBmb3VuZCA9IGZhbHNlO1xuXHRcdFx0XHRmb3IgKGNvbnN0IHZtQXNzb2NpYXRlZGNvbnRyb2xLZXkgb2Ygdm1Bc3NvY2lhdGVkQ29udHJvbHNUb1Jlc2V0KSB7XG5cdFx0XHRcdFx0aWYgKHZtQXNzb2NpYXRlZGNvbnRyb2xLZXkuaW5kZXhPZihjb250cm9sS2V5KSA+IC0xKSB7XG5cdFx0XHRcdFx0XHRmb3VuZCA9IHRydWU7XG5cdFx0XHRcdFx0XHRicmVhaztcblx0XHRcdFx0XHR9XG5cdFx0XHRcdH1cblx0XHRcdFx0aWYgKGZvdW5kKSB7XG5cdFx0XHRcdFx0aW5pdGlhbENvbnRyb2xTdGF0ZXNNYXBwZXJbY29udHJvbEtleV0gPSB7fTtcblx0XHRcdFx0fVxuXHRcdFx0fSk7XG5cblx0XHRcdC8vIHNldFRpbWVvdXQgY2F1c2UgdGhlIHZhcmlhbnQgbmVlZHMgdG8gYmUgYXBwbGllZCBiZWZvcmUganVkZ2luZyB0aGUgYXV0byBzZWFyY2ggb3IgdXBkYXRpbmcgdGhlIGFwcCBzdGF0ZVxuXHRcdFx0c2V0VGltZW91dCgoKSA9PiB7XG5cdFx0XHRcdGlmICh0aGlzLl9zaG91bGRBdXRvVHJpZ2dlclNlYXJjaChvVk0pKSB7XG5cdFx0XHRcdFx0Ly8gdGhlIGFwcCBzdGF0ZSB3aWxsIGJlIHVwZGF0ZWQgdmlhIG9uU2VhcmNoIGhhbmRsZXJcblx0XHRcdFx0XHRyZXR1cm4gdGhpcy5fZ2V0RmlsdGVyQmFyQ29udHJvbCgpLnRyaWdnZXJTZWFyY2goKTtcblx0XHRcdFx0fSBlbHNlIGlmICghdGhpcy5fZ2V0QXBwbHlBdXRvbWF0aWNhbGx5T25WYXJpYW50KG9WTSwgY3VycmVudFZhcmlhbnRLZXkpKSB7XG5cdFx0XHRcdFx0dGhpcy5nZXRFeHRlbnNpb25BUEkoKS51cGRhdGVBcHBTdGF0ZSgpO1xuXHRcdFx0XHR9XG5cdFx0XHR9LCAwKTtcblx0XHR9LFxuXHRcdG9uVmFyaWFudFNhdmVkKHRoaXM6IExpc3RSZXBvcnRDb250cm9sbGVyKSB7XG5cdFx0XHR0aGlzLnZpZXdTdGF0ZS5pbml0aWFsQ29udHJvbFN0YXRlc01hcHBlciA9IHt9O1xuXG5cdFx0XHQvL1RPRE86IFNob3VsZCByZW1vdmUgdGhpcyBzZXRUaW1lT3V0IG9uY2UgVmFyaWFudCBNYW5hZ2VtZW50IHByb3ZpZGVzIGFuIGFwaSB0byBmZXRjaCB0aGUgY3VycmVudCB2YXJpYW50IGtleSBvbiBzYXZlISEhXG5cdFx0XHRzZXRUaW1lb3V0KCgpID0+IHtcblx0XHRcdFx0dGhpcy5nZXRFeHRlbnNpb25BUEkoKS51cGRhdGVBcHBTdGF0ZSgpO1xuXHRcdFx0fSwgMTAwMCk7XG5cdFx0fSxcblx0XHRvblNlYXJjaCh0aGlzOiBMaXN0UmVwb3J0Q29udHJvbGxlcikge1xuXHRcdFx0Y29uc3Qgb0ZpbHRlckJhciA9IHRoaXMuX2dldEZpbHRlckJhckNvbnRyb2woKTtcblx0XHRcdGNvbnN0IG9JbnRlcm5hbE1vZGVsQ29udGV4dCA9IHRoaXMuZ2V0VmlldygpLmdldEJpbmRpbmdDb250ZXh0KFwiaW50ZXJuYWxcIikgYXMgSW50ZXJuYWxNb2RlbENvbnRleHQ7XG5cdFx0XHRjb25zdCBvTWRjQ2hhcnQgPSB0aGlzLmdldENoYXJ0Q29udHJvbCgpO1xuXHRcdFx0Y29uc3QgYkhpZGVEcmFmdCA9IEZpbHRlclV0aWxzLmdldEVkaXRTdGF0ZUlzSGlkZURyYWZ0KG9GaWx0ZXJCYXIuZ2V0Q29uZGl0aW9ucygpKTtcblx0XHRcdG9JbnRlcm5hbE1vZGVsQ29udGV4dC5zZXRQcm9wZXJ0eShcImhhc1BlbmRpbmdGaWx0ZXJzXCIsIGZhbHNlKTtcblx0XHRcdG9JbnRlcm5hbE1vZGVsQ29udGV4dC5zZXRQcm9wZXJ0eShcImhpZGVEcmFmdEluZm9cIiwgYkhpZGVEcmFmdCk7XG5cblx0XHRcdGlmICghdGhpcy5fZ2V0TXVsdGlNb2RlQ29udHJvbCgpKSB7XG5cdFx0XHRcdHRoaXMuX3VwZGF0ZUFMUE5vdEFwcGxpY2FibGVGaWVsZHMob0ludGVybmFsTW9kZWxDb250ZXh0LCBvRmlsdGVyQmFyKTtcblx0XHRcdH1cblx0XHRcdGlmIChvTWRjQ2hhcnQpIHtcblx0XHRcdFx0Ly8gZGlzYWJsZSBib3VuZCBhY3Rpb25zIFRPRE86IHRoaXMgY2xlYXJzIGV2ZXJ5dGhpbmcgZm9yIHRoZSBjaGFydD9cblx0XHRcdFx0KG9NZGNDaGFydC5nZXRCaW5kaW5nQ29udGV4dChcImludGVybmFsXCIpIGFzIEludGVybmFsTW9kZWxDb250ZXh0KS5zZXRQcm9wZXJ0eShcIlwiLCB7fSk7XG5cblx0XHRcdFx0Y29uc3Qgb1BhZ2VJbnRlcm5hbE1vZGVsQ29udGV4dCA9IG9NZGNDaGFydC5nZXRCaW5kaW5nQ29udGV4dChcInBhZ2VJbnRlcm5hbFwiKSBhcyBJbnRlcm5hbE1vZGVsQ29udGV4dDtcblx0XHRcdFx0Y29uc3Qgc1RlbXBsYXRlQ29udGVudFZpZXcgPSBvUGFnZUludGVybmFsTW9kZWxDb250ZXh0LmdldFByb3BlcnR5KGAke29QYWdlSW50ZXJuYWxNb2RlbENvbnRleHQuZ2V0UGF0aCgpfS9hbHBDb250ZW50Vmlld2ApO1xuXHRcdFx0XHRpZiAoc1RlbXBsYXRlQ29udGVudFZpZXcgPT09IFRlbXBsYXRlQ29udGVudFZpZXcuQ2hhcnQpIHtcblx0XHRcdFx0XHR0aGlzLmhhc1BlbmRpbmdDaGFydENoYW5nZXMgPSB0cnVlO1xuXHRcdFx0XHR9XG5cdFx0XHRcdGlmIChzVGVtcGxhdGVDb250ZW50VmlldyA9PT0gVGVtcGxhdGVDb250ZW50Vmlldy5UYWJsZSkge1xuXHRcdFx0XHRcdHRoaXMuaGFzUGVuZGluZ1RhYmxlQ2hhbmdlcyA9IHRydWU7XG5cdFx0XHRcdH1cblx0XHRcdH1cblx0XHRcdC8vIHN0b3JlIGZpbHRlciBiYXIgY29uZGl0aW9ucyB0byB1c2UgbGF0ZXIgd2hpbGUgbmF2aWdhdGlvblxuXHRcdFx0U3RhdGVVdGlsLnJldHJpZXZlRXh0ZXJuYWxTdGF0ZShvRmlsdGVyQmFyKVxuXHRcdFx0XHQudGhlbigob0V4dGVybmFsU3RhdGU6IGFueSkgPT4ge1xuXHRcdFx0XHRcdHRoaXMuZmlsdGVyQmFyQ29uZGl0aW9ucyA9IG9FeHRlcm5hbFN0YXRlLmZpbHRlcjtcblx0XHRcdFx0fSlcblx0XHRcdFx0LmNhdGNoKGZ1bmN0aW9uIChvRXJyb3I6IGFueSkge1xuXHRcdFx0XHRcdExvZy5lcnJvcihcIkVycm9yIHdoaWxlIHJldHJpZXZpbmcgdGhlIGV4dGVybmFsIHN0YXRlXCIsIG9FcnJvcik7XG5cdFx0XHRcdH0pO1xuXHRcdFx0aWYgKCh0aGlzLmdldFZpZXcoKS5nZXRWaWV3RGF0YSgpIGFzIGFueSkubGl2ZU1vZGUgPT09IGZhbHNlKSB7XG5cdFx0XHRcdHRoaXMuZ2V0RXh0ZW5zaW9uQVBJKCkudXBkYXRlQXBwU3RhdGUoKTtcblx0XHRcdH1cblxuXHRcdFx0aWYgKHN5c3RlbS5waG9uZSkge1xuXHRcdFx0XHRjb25zdCBvRHluYW1pY1BhZ2UgPSB0aGlzLl9nZXREeW5hbWljTGlzdFJlcG9ydENvbnRyb2woKTtcblx0XHRcdFx0b0R5bmFtaWNQYWdlLnNldEhlYWRlckV4cGFuZGVkKGZhbHNlKTtcblx0XHRcdH1cblx0XHR9LFxuXHRcdC8qKlxuXHRcdCAqIFRyaWdnZXJzIGFuIG91dGJvdW5kIG5hdmlnYXRpb24gd2hlbiBhIHVzZXIgY2hvb3NlcyB0aGUgY2hldnJvbi5cblx0XHQgKlxuXHRcdCAqIEBwYXJhbSBvQ29udHJvbGxlclxuXHRcdCAqIEBwYXJhbSBzT3V0Ym91bmRUYXJnZXQgTmFtZSBvZiB0aGUgb3V0Ym91bmQgdGFyZ2V0IChuZWVkcyB0byBiZSBkZWZpbmVkIGluIHRoZSBtYW5pZmVzdClcblx0XHQgKiBAcGFyYW0gb0NvbnRleHQgVGhlIGNvbnRleHQgdGhhdCBjb250YWlucyB0aGUgZGF0YSBmb3IgdGhlIHRhcmdldCBhcHBcblx0XHQgKiBAcGFyYW0gc0NyZWF0ZVBhdGggQ3JlYXRlIHBhdGggd2hlbiB0aGUgY2hldnJvbiBpcyBjcmVhdGVkLlxuXHRcdCAqIEByZXR1cm5zIFByb21pc2Ugd2hpY2ggaXMgcmVzb2x2ZWQgb25jZSB0aGUgbmF2aWdhdGlvbiBpcyB0cmlnZ2VyZWRcblx0XHQgKiBAdWk1LXJlc3RyaWN0ZWRcblx0XHQgKiBAZmluYWxcblx0XHQgKi9cblx0XHRvbkNoZXZyb25QcmVzc05hdmlnYXRlT3V0Qm91bmQoXG5cdFx0XHRvQ29udHJvbGxlcjogTGlzdFJlcG9ydENvbnRyb2xsZXIsXG5cdFx0XHRzT3V0Ym91bmRUYXJnZXQ6IHN0cmluZyxcblx0XHRcdG9Db250ZXh0OiBWNENvbnRleHQsXG5cdFx0XHRzQ3JlYXRlUGF0aDogc3RyaW5nXG5cdFx0KSB7XG5cdFx0XHRyZXR1cm4gb0NvbnRyb2xsZXIuX2ludGVudEJhc2VkTmF2aWdhdGlvbi5vbkNoZXZyb25QcmVzc05hdmlnYXRlT3V0Qm91bmQob0NvbnRyb2xsZXIsIHNPdXRib3VuZFRhcmdldCwgb0NvbnRleHQsIHNDcmVhdGVQYXRoKTtcblx0XHR9LFxuXHRcdG9uQ2hhcnRTZWxlY3Rpb25DaGFuZ2VkKHRoaXM6IExpc3RSZXBvcnRDb250cm9sbGVyLCBvRXZlbnQ6IGFueSkge1xuXHRcdFx0Y29uc3Qgb01kY0NoYXJ0ID0gb0V2ZW50LmdldFNvdXJjZSgpLmdldENvbnRlbnQoKSxcblx0XHRcdFx0b1RhYmxlID0gdGhpcy5fZ2V0VGFibGUoKSxcblx0XHRcdFx0YURhdGEgPSBvRXZlbnQuZ2V0UGFyYW1ldGVyKFwiZGF0YVwiKSxcblx0XHRcdFx0b0ludGVybmFsTW9kZWxDb250ZXh0ID0gdGhpcy5nZXRWaWV3KCkuZ2V0QmluZGluZ0NvbnRleHQoXCJpbnRlcm5hbFwiKSBhcyBJbnRlcm5hbE1vZGVsQ29udGV4dDtcblx0XHRcdGlmIChhRGF0YSkge1xuXHRcdFx0XHQvLyB1cGRhdGUgYWN0aW9uIGJ1dHRvbnMgZW5hYmxlbWVudCAvIGRpc2FibGVtZW50XG5cdFx0XHRcdENoYXJ0UnVudGltZS5mblVwZGF0ZUNoYXJ0KG9FdmVudCk7XG5cdFx0XHRcdC8vIHVwZGF0ZSBzZWxlY3Rpb25zIG9uIHNlbGVjdGlvbiBvciBkZXNlbGVjdGlvblxuXHRcdFx0XHRDaGFydFV0aWxzLnNldENoYXJ0RmlsdGVycyhvTWRjQ2hhcnQpO1xuXHRcdFx0fVxuXHRcdFx0Y29uc3Qgc1RlbXBsYXRlQ29udGVudFZpZXcgPSBvSW50ZXJuYWxNb2RlbENvbnRleHQuZ2V0UHJvcGVydHkoYCR7b0ludGVybmFsTW9kZWxDb250ZXh0LmdldFBhdGgoKX0vYWxwQ29udGVudFZpZXdgKTtcblx0XHRcdGlmIChzVGVtcGxhdGVDb250ZW50VmlldyA9PT0gVGVtcGxhdGVDb250ZW50Vmlldy5DaGFydCkge1xuXHRcdFx0XHR0aGlzLmhhc1BlbmRpbmdDaGFydENoYW5nZXMgPSB0cnVlO1xuXHRcdFx0fSBlbHNlIGlmIChvVGFibGUpIHtcblx0XHRcdFx0KG9UYWJsZSBhcyBhbnkpLnJlYmluZCgpO1xuXHRcdFx0XHR0aGlzLmhhc1BlbmRpbmdDaGFydENoYW5nZXMgPSBmYWxzZTtcblx0XHRcdH1cblx0XHR9LFxuXHRcdG9uU2VnbWVudGVkQnV0dG9uUHJlc3NlZCh0aGlzOiBMaXN0UmVwb3J0Q29udHJvbGxlciwgb0V2ZW50OiBhbnkpIHtcblx0XHRcdGNvbnN0IHNTZWxlY3RlZEtleSA9IG9FdmVudC5tUGFyYW1ldGVycy5rZXkgPyBvRXZlbnQubVBhcmFtZXRlcnMua2V5IDogbnVsbDtcblx0XHRcdGNvbnN0IG9JbnRlcm5hbE1vZGVsQ29udGV4dCA9IHRoaXMuZ2V0VmlldygpLmdldEJpbmRpbmdDb250ZXh0KFwiaW50ZXJuYWxcIikgYXMgSW50ZXJuYWxNb2RlbENvbnRleHQ7XG5cdFx0XHRvSW50ZXJuYWxNb2RlbENvbnRleHQuc2V0UHJvcGVydHkoXCJhbHBDb250ZW50Vmlld1wiLCBzU2VsZWN0ZWRLZXkpO1xuXHRcdFx0Y29uc3Qgb0NoYXJ0ID0gdGhpcy5nZXRDaGFydENvbnRyb2woKTtcblx0XHRcdGNvbnN0IG9UYWJsZSA9IHRoaXMuX2dldFRhYmxlKCk7XG5cdFx0XHRjb25zdCBvU2VnbWVudGVkQnV0dG9uRGVsZWdhdGUgPSB7XG5cdFx0XHRcdG9uQWZ0ZXJSZW5kZXJpbmcoKSB7XG5cdFx0XHRcdFx0Y29uc3QgYUl0ZW1zID0gb1NlZ21lbnRlZEJ1dHRvbi5nZXRJdGVtcygpO1xuXHRcdFx0XHRcdGFJdGVtcy5mb3JFYWNoKGZ1bmN0aW9uIChvSXRlbTogYW55KSB7XG5cdFx0XHRcdFx0XHRpZiAob0l0ZW0uZ2V0S2V5KCkgPT09IHNTZWxlY3RlZEtleSkge1xuXHRcdFx0XHRcdFx0XHRvSXRlbS5mb2N1cygpO1xuXHRcdFx0XHRcdFx0fVxuXHRcdFx0XHRcdH0pO1xuXHRcdFx0XHRcdG9TZWdtZW50ZWRCdXR0b24ucmVtb3ZlRXZlbnREZWxlZ2F0ZShvU2VnbWVudGVkQnV0dG9uRGVsZWdhdGUpO1xuXHRcdFx0XHR9XG5cdFx0XHR9O1xuXHRcdFx0Y29uc3Qgb1NlZ21lbnRlZEJ1dHRvbiA9IChcblx0XHRcdFx0c1NlbGVjdGVkS2V5ID09PSBUZW1wbGF0ZUNvbnRlbnRWaWV3LlRhYmxlID8gdGhpcy5fZ2V0U2VnbWVudGVkQnV0dG9uKFwiVGFibGVcIikgOiB0aGlzLl9nZXRTZWdtZW50ZWRCdXR0b24oXCJDaGFydFwiKVxuXHRcdFx0KSBhcyBTZWdtZW50ZWRCdXR0b247XG5cdFx0XHRpZiAob1NlZ21lbnRlZEJ1dHRvbiAhPT0gb0V2ZW50LmdldFNvdXJjZSgpKSB7XG5cdFx0XHRcdG9TZWdtZW50ZWRCdXR0b24uYWRkRXZlbnREZWxlZ2F0ZShvU2VnbWVudGVkQnV0dG9uRGVsZWdhdGUpO1xuXHRcdFx0fVxuXHRcdFx0c3dpdGNoIChzU2VsZWN0ZWRLZXkpIHtcblx0XHRcdFx0Y2FzZSBUZW1wbGF0ZUNvbnRlbnRWaWV3LlRhYmxlOlxuXHRcdFx0XHRcdHRoaXMuX3VwZGF0ZVRhYmxlKG9UYWJsZSk7XG5cdFx0XHRcdFx0YnJlYWs7XG5cdFx0XHRcdGNhc2UgVGVtcGxhdGVDb250ZW50Vmlldy5DaGFydDpcblx0XHRcdFx0XHR0aGlzLl91cGRhdGVDaGFydChvQ2hhcnQpO1xuXHRcdFx0XHRcdGJyZWFrO1xuXHRcdFx0XHRjYXNlIFRlbXBsYXRlQ29udGVudFZpZXcuSHlicmlkOlxuXHRcdFx0XHRcdHRoaXMuX3VwZGF0ZVRhYmxlKG9UYWJsZSk7XG5cdFx0XHRcdFx0dGhpcy5fdXBkYXRlQ2hhcnQob0NoYXJ0KTtcblx0XHRcdFx0XHRicmVhaztcblx0XHRcdFx0ZGVmYXVsdDpcblx0XHRcdFx0XHRicmVhaztcblx0XHRcdH1cblx0XHRcdHRoaXMuZ2V0RXh0ZW5zaW9uQVBJKCkudXBkYXRlQXBwU3RhdGUoKTtcblx0XHR9LFxuXHRcdG9uRmlsdGVyc1NlZ21lbnRlZEJ1dHRvblByZXNzZWQodGhpczogTGlzdFJlcG9ydENvbnRyb2xsZXIsIG9FdmVudDogYW55KSB7XG5cdFx0XHRjb25zdCBpc0NvbXBhY3QgPSBvRXZlbnQuZ2V0UGFyYW1ldGVyKFwia2V5XCIpID09PSBcIkNvbXBhY3RcIjtcblx0XHRcdHRoaXMuX2dldEZpbHRlckJhckNvbnRyb2woKS5zZXRWaXNpYmxlKGlzQ29tcGFjdCk7XG5cdFx0XHQodGhpcy5fZ2V0VmlzdWFsRmlsdGVyQmFyQ29udHJvbCgpIGFzIENvbnRyb2wpLnNldFZpc2libGUoIWlzQ29tcGFjdCk7XG5cdFx0fSxcblx0XHRvblN0YXRlQ2hhbmdlKHRoaXM6IExpc3RSZXBvcnRDb250cm9sbGVyKSB7XG5cdFx0XHR0aGlzLmdldEV4dGVuc2lvbkFQSSgpLnVwZGF0ZUFwcFN0YXRlKCk7XG5cdFx0fSxcblx0XHRvbkR5bmFtaWNQYWdlVGl0bGVTdGF0ZUNoYW5nZWQodGhpczogTGlzdFJlcG9ydENvbnRyb2xsZXIsIG9FdmVudDogYW55KSB7XG5cdFx0XHRjb25zdCBmaWx0ZXJCYXI6IGFueSA9IHRoaXMuX2dldEZpbHRlckJhckNvbnRyb2woKTtcblx0XHRcdGlmIChmaWx0ZXJCYXIgJiYgZmlsdGVyQmFyLmdldFNlZ21lbnRlZEJ1dHRvbigpKSB7XG5cdFx0XHRcdGlmIChvRXZlbnQuZ2V0UGFyYW1ldGVyKFwiaXNFeHBhbmRlZFwiKSkge1xuXHRcdFx0XHRcdGZpbHRlckJhci5nZXRTZWdtZW50ZWRCdXR0b24oKS5zZXRWaXNpYmxlKHRydWUpO1xuXHRcdFx0XHR9IGVsc2Uge1xuXHRcdFx0XHRcdGZpbHRlckJhci5nZXRTZWdtZW50ZWRCdXR0b24oKS5zZXRWaXNpYmxlKGZhbHNlKTtcblx0XHRcdFx0fVxuXHRcdFx0fVxuXHRcdH1cblx0fTtcblx0Zm9ybWF0dGVycyA9IHtcblx0XHRzZXRBTFBDb250cm9sTWVzc2FnZVN0cmlwKHRoaXM6IExpc3RSZXBvcnRDb250cm9sbGVyLCBhSWdub3JlZEZpZWxkczogYW55W10sIGJJc0NoYXJ0OiBhbnksIG9BcHBseVN1cHBvcnRlZD86IGFueSkge1xuXHRcdFx0bGV0IHNUZXh0ID0gXCJcIjtcblx0XHRcdGJJc0NoYXJ0ID0gYklzQ2hhcnQgPT09IFwidHJ1ZVwiIHx8IGJJc0NoYXJ0ID09PSB0cnVlO1xuXHRcdFx0Y29uc3Qgb0ZpbHRlckJhciA9IHRoaXMuX2dldEZpbHRlckJhckNvbnRyb2woKTtcblx0XHRcdGlmIChvRmlsdGVyQmFyICYmIEFycmF5LmlzQXJyYXkoYUlnbm9yZWRGaWVsZHMpICYmIGFJZ25vcmVkRmllbGRzLmxlbmd0aCA+IDAgJiYgYklzQ2hhcnQpIHtcblx0XHRcdFx0Y29uc3QgYUlnbm9yZWRMYWJlbHMgPSBNZXNzYWdlU3RyaXAuZ2V0TGFiZWxzKFxuXHRcdFx0XHRcdGFJZ25vcmVkRmllbGRzLFxuXHRcdFx0XHRcdG9GaWx0ZXJCYXIuZGF0YShcImVudGl0eVR5cGVcIiksXG5cdFx0XHRcdFx0b0ZpbHRlckJhcixcblx0XHRcdFx0XHR0aGlzLm9SZXNvdXJjZUJ1bmRsZSBhcyBSZXNvdXJjZUJ1bmRsZVxuXHRcdFx0XHQpO1xuXHRcdFx0XHRjb25zdCBiSXNTZWFyY2hJZ25vcmVkID0gIW9BcHBseVN1cHBvcnRlZC5lbmFibGVTZWFyY2g7XG5cdFx0XHRcdHNUZXh0ID0gYklzQ2hhcnRcblx0XHRcdFx0XHQ/IE1lc3NhZ2VTdHJpcC5nZXRBTFBUZXh0KGFJZ25vcmVkTGFiZWxzLCBvRmlsdGVyQmFyLCBiSXNTZWFyY2hJZ25vcmVkKVxuXHRcdFx0XHRcdDogTWVzc2FnZVN0cmlwLmdldFRleHQoYUlnbm9yZWRMYWJlbHMsIG9GaWx0ZXJCYXIsIFwiXCIsIERlbGVnYXRlVXRpbC5nZXRMb2NhbGl6ZWRUZXh0KTtcblx0XHRcdFx0cmV0dXJuIHNUZXh0O1xuXHRcdFx0fVxuXHRcdH1cblx0fTtcbn1cblxuZXhwb3J0IGRlZmF1bHQgTGlzdFJlcG9ydENvbnRyb2xsZXI7XG4iXSwibWFwcGluZ3MiOiI7QUFBQTtBQUFBO0FBQUE7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7OztFQXNEQSxJQUFNQSxtQkFBbUIsR0FBR0MsV0FBVyxDQUFDRCxtQkFBbUI7SUFDMURFLGVBQWUsR0FBR0QsV0FBVyxDQUFDQyxlQUFlOztFQUU5QztBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7RUFMQSxJQU9NQyxvQkFBb0IsV0FEekJDLGNBQWMsQ0FBQyxrREFBa0QsQ0FBQyxVQUVqRUMsY0FBYyxDQUNkQyxlQUFlLENBQUNDLFFBQVEsQ0FBQztJQUN4QkMsY0FBYyxFQUFFLFlBQWlDO01BQy9DLElBQUksQ0FBQ0MsT0FBTyxFQUFFLENBQUNDLGFBQWEsRUFBRSxDQUEwQkMsZUFBZSxFQUFFO0lBQzNFO0VBQ0QsQ0FBQyxDQUFDLENBQ0YsVUFFQU4sY0FBYyxDQUNkTyw2QkFBNkIsQ0FBQ0wsUUFBUSxDQUFDO0lBQ3RDTSxZQUFZLEVBQUUsWUFBK0M7TUFDNUQsT0FBUSxJQUFJLENBQUNDLElBQUksQ0FBMEJDLG1CQUFtQixFQUFFO0lBQ2pFO0VBQ0QsQ0FBQyxDQUFDLENBQ0YsVUFFQVYsY0FBYyxDQUFDVyxXQUFXLENBQUMsVUFHM0JYLGNBQWMsQ0FBQ1kscUJBQXFCLENBQUNWLFFBQVEsQ0FBQ1csNkJBQTZCLENBQUMsQ0FBQyxVQUc3RWIsY0FBYyxDQUFDYyxLQUFLLENBQUNaLFFBQVEsQ0FBQ2EsY0FBYyxDQUFDLENBQUMsVUFHOUNmLGNBQWMsQ0FBQ2dCLFNBQVMsQ0FBQ2QsUUFBUSxDQUFDZSxrQkFBa0IsQ0FBQyxDQUFDLFVBR3REakIs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
5
+ sap.ui.define(["sap/base/Log","sap/base/util/ObjectPath","sap/fe/core/ActionRuntime","sap/fe/core/CommonUtils","sap/fe/core/controllerextensions/IntentBasedNavigation","sap/fe/core/controllerextensions/InternalIntentBasedNavigation","sap/fe/core/controllerextensions/InternalRouting","sap/fe/core/controllerextensions/KPIManagement","sap/fe/core/controllerextensions/MassEdit","sap/fe/core/controllerextensions/Placeholder","sap/fe/core/controllerextensions/Share","sap/fe/core/controllerextensions/SideEffects","sap/fe/core/controllerextensions/ViewState","sap/fe/core/helpers/ClassSupport","sap/fe/core/helpers/DeleteHelper","sap/fe/core/helpers/EditState","sap/fe/core/helpers/MessageStrip","sap/fe/core/helpers/StableIdHelper","sap/fe/core/library","sap/fe/core/PageController","sap/fe/macros/chart/ChartUtils","sap/fe/macros/CommonHelper","sap/fe/macros/DelegateUtil","sap/fe/macros/filter/FilterUtils","sap/fe/templates/ListReport/ExtensionAPI","sap/fe/templates/TableScroller","sap/ui/core/mvc/OverrideExecution","sap/ui/Device","sap/ui/mdc/p13n/StateUtil","sap/ui/thirdparty/hasher","./ListReportTemplating","./overrides/IntentBasedNavigation","./overrides/Share","./overrides/ViewState"],function(e,t,i,n,r,o,a,s,l,u,g,d,c,p,h,f,C,b,y,P,_,v,m,w,A,B,I,S,V,T,F,x,E,M){"use strict";var D,R,O,L,N,z,k,H,j,U,K,$,J,q,W,X,G,Q,Y,Z,ee,te,ie,ne,re,oe,ae,se,le,ue,ge;var de=S.system;var ce=p.usingExtension;var pe=p.publicExtension;var he=p.privateExtension;var fe=p.finalExtension;var Ce=p.extensible;var be=p.defineUI5Class;function ye(e,t,i,n){if(!i)return;Object.defineProperty(e,t,{enumerable:i.enumerable,configurable:i.configurable,writable:i.writable,value:i.initializer?i.initializer.call(n):void 0})}function Pe(e){if(e===void 0){throw new ReferenceError("this hasn't been initialised - super() hasn't been called")}return e}function _e(e,t){e.prototype=Object.create(t.prototype);e.prototype.constructor=e;ve(e,t)}function ve(e,t){ve=Object.setPrototypeOf?Object.setPrototypeOf.bind():function e(t,i){t.__proto__=i;return t};return ve(e,t)}function me(e,t,i,n,r){var o={};Object.keys(n).forEach(function(e){o[e]=n[e]});o.enumerable=!!o.enumerable;o.configurable=!!o.configurable;if("value"in o||o.initializer){o.writable=true}o=i.slice().reverse().reduce(function(i,n){return n(e,t,i)||i},o);if(r&&o.initializer!==void 0){o.value=o.initializer?o.initializer.call(r):void 0;o.initializer=undefined}if(o.initializer===void 0){Object.defineProperty(e,t,o);o=null}return o}function we(e,t){throw new Error("Decorating class property failed. Please ensure that "+"proposal-class-properties is enabled and runs after the decorators transform.")}const Ae=y.TemplateContentView,Be=y.InitialLoadMode;let Ie=(D=be("sap.fe.templates.ListReport.ListReportController"),R=ce(a.override({onAfterBinding:function(){this.getView().getController()._onAfterBinding()}})),O=ce(o.override({getEntitySet:function(){return this.base.getCurrentEntitySet()}})),L=ce(d),N=ce(r.override(x)),z=ce(g.override(E)),k=ce(c.override(M)),H=ce(s),j=ce(u),U=ce(l),K=pe(),$=fe(),J=he(),q=Ce(I.After),W=pe(),X=Ce(I.After),G=pe(),Q=Ce(I.After),Y=pe(),Z=Ce(I.After),D(ee=(te=function(r){_e(o,r);function o(){var t;for(var i=arguments.length,n=new Array(i),o=0;o<i;o++){n[o]=arguments[o]}t=r.call(this,...n)||this;ye(t,"_routing",ie,Pe(t));ye(t,"_intentBasedNavigation",ne,Pe(t));ye(t,"sideEffects",re,Pe(t));ye(t,"intentBasedNavigation",oe,Pe(t));ye(t,"share",ae,Pe(t));ye(t,"viewState",se,Pe(t));ye(t,"kpiManagement",le,Pe(t));ye(t,"placeholder",ue,Pe(t));ye(t,"massEdit",ge,Pe(t));t.handlers={onFilterSearch(){this._getFilterBarControl().triggerSearch()},onFiltersChanged(e){const t=this._getFilterBarControl();if(t){const i=this.getView().getBindingContext("internal");this.onPendingFilters();i.setProperty("appliedFilters",t.getAssignedFiltersText().filtersText);if(e.getParameter("conditionsBased")){i.setProperty("hasPendingFilters",true)}}},onVariantSelected(e){const t=e.getSource();const i=e.getParameter("key");const n=this._getMultiModeControl();n===null||n===void 0?void 0:n.invalidateContent();n===null||n===void 0?void 0:n.setFreezeContent(true);setTimeout(()=>{if(this._shouldAutoTriggerSearch(t)){return this._getFilterBarControl().triggerSearch()}else if(!this._getApplyAutomaticallyOnVariant(t,i)){this.getExtensionAPI().updateAppState()}},0)},onVariantSaved(){setTimeout(()=>{this.getExtensionAPI().updateAppState()},1e3)},onSearch(){const t=this._getFilterBarControl();const i=this.getView().getBindingContext("internal");const n=this.getChartControl();const r=w.getEditStateIsHideDraft(t.getConditions());i.setProperty("hasPendingFilters",false);i.setProperty("hideDraftInfo",r);if(!this._getMultiModeControl()){this._updateALPNotApplicableFields(i,t)}if(n){n.getBindingContext("internal").setProperty("",{});const e=n.getBindingContext("pageInternal");const t=e.getProperty(`${e.getPath()}/alpContentView`);if(t===Ae.Chart){this.hasPendingChartChanges=true}if(t===Ae.Table){this.hasPendingTableChanges=true}}V.retrieveExternalState(t).then(e=>{this.filterBarConditions=e.filter}).catch(function(t){e.error("Error while retrieving the external state",t)});if(this.getView().getViewData().liveMode===false){this.getExtensionAPI().updateAppState()}if(de.phone){const e=this._getDynamicListReportControl();e.setHeaderExpanded(false)}},onChevronPressNavigateOutBound(e,t,i,n){return e._intentBasedNavigation.onChevronPressNavigateOutBound(e,t,i,n)},onChartSelectionChanged(e){const t=e.getSource().getContent(),i=this._getTable(),n=e.getParameter("data"),r=this.getView().getBindingContext("internal");if(n){_.setChartFilters(t)}const o=r.getProperty(`${r.getPath()}/alpContentView`);if(o===Ae.Chart){this.hasPendingChartChanges=true}else if(i){i.rebind();this.hasPendingChartChanges=false}},onSegmentedButtonPressed(e){const t=e.mParameters.key?e.mParameters.key:null;const i=this.getView().getBindingContext("internal");i.setProperty("alpContentView",t);const n=this.getChartControl();const r=this._getTable();const o={onAfterRendering(){const e=a.getItems();e.forEach(function(e){if(e.getKey()===t){e.focus()}});a.removeEventDelegate(o)}};const a=t===Ae.Table?this._getSegmentedButton("Table"):this._getSegmentedButton("Chart");if(a!==e.getSource()){a.addEventDelegate(o)}switch(t){case Ae.Table:this._updateTable(r);break;case Ae.Chart:this._updateChart(n);break;case Ae.Hybrid:this._updateTable(r);this._updateChart(n);break;default:break}this.getExtensionAPI().updateAppState()},onFiltersSegmentedButtonPressed(e){const t=e.getParameter("key")==="Compact";this._getFilterBarControl().setVisible(t);this._getVisualFilterBarControl().setVisible(!t)},onStateChange(){this.getExtensionAPI().updateAppState()},onDynamicPageTitleStateChanged(e){const t=this._getFilterBarControl();if(t&&t.getSegmentedButton()){if(e.getParameter("isExpanded")){t.getSegmentedButton().setVisible(true)}else{t.getSegmentedButton().setVisible(false)}}}};t.formatters={setALPControlMessageStrip(e,t,i){let n="";t=t==="true"||t===true;const r=this._getFilterBarControl();if(r&&Array.isArray(e)&&e.length>0&&t){const o=C.getLabels(e,r.data("entityType"),r,this.oResourceBundle);const a=!i.enableSearch;n=t?C.getALPText(o,r,a):C.getText(o,r,"",m.getLocalizedText);return n}}};return t}var a=o.prototype;a.getExtensionAPI=function e(){if(!this.extensionAPI){this.extensionAPI=new A(this)}return this.extensionAPI};a.onInit=function e(){P.prototype.onInit.apply(this);const t=this.getView().getBindingContext("internal");t.setProperty("hasPendingFilters",true);t.setProperty("appliedFilters","");t.setProperty("hideDraftInfo",false);t.setProperty("uom",{});t.setProperty("scalefactor",{});t.setProperty("scalefactorNumber",{});t.setProperty("currency",{});if(this._hasMultiVisualizations()){let e=this._getDefaultPath();if(!de.desktop&&e===Ae.Hybrid){e=Ae.Chart}t.setProperty("alpContentView",e)}this.filterBarConditions={};this.getAppComponent().getRouterProxy().waitForRouteMatchBeforeNavigation();this._setInitLoad()};a.onExit=function e(){delete this.filterBarConditions;if(this.extensionAPI){this.extensionAPI.destroy()}delete this.extensionAPI};a._onAfterBinding=function e(){const t=this._getControls("table");if(f.isEditStateDirty()){var i,r;(i=this._getMultiModeControl())===null||i===void 0?void 0:i.invalidateContent();const e=(r=this._getTable())===null||r===void 0?void 0:r.getRowBinding();if(e){if(n.getAppComponent(this.getView())._isFclEnabled()){e.refresh()}else{if(!this.sUpdateTimer){this.sUpdateTimer=setTimeout(()=>{e.refresh();delete this.sUpdateTimer},0)}const i=()=>{this._updateTableActions(t);e.detachDataReceived(i)};e.attachDataReceived(i)}}f.setEditStateProcessed()}if(!this.sUpdateTimer){this._updateTableActions(t)}const o=this.getView().getBindingContext("internal");if(!o.getProperty("initialVariantApplied")){const e=this.getView().getId();this.pageReady.waitFor(this.getAppComponent().getAppStateHandler().applyAppState(e,this.getView()));o.setProperty("initialVariantApplied",true)}};a.onBeforeRendering=function e(){P.prototype.onBeforeRendering.apply(this)};a.onAfterRendering=function t(){this.getView().getModel("sap.fe.i18n").getResourceBundle().then(e=>{this.oResourceBundle=e;const t=this._getControls();const i=this.getView().getViewData().entitySet;const r=n.getTranslatedText("T_TABLE_AND_CHART_NO_DATA_TEXT",this.oResourceBundle,undefined,i);t.forEach(function(e){e.setNoData(r)})}).catch(function(t){e.error("Error while retrieving the resource bundle",t)})};a.onPageReady=function e(t){if(t.forceFocus){this._setInitialFocus()}this.getAppComponent().getShellServices().setBackNavigation(undefined)};a.onViewNeedsRefresh=function e(t){};a.onPendingFilters=function e(){};a.getCurrentEntitySet=function e(){var t;return(t=this._getTable())===null||t===void 0?void 0:t.data("targetCollectionPath").slice(1)};a.onAfterClear=function e(){};a._updateTableActions=function e(t){let r=[];t.forEach(function(e){r=n.getIBNActions(e,r);const t=e.getBindingContext("internal"),o=JSON.parse(v.parseCustomData(m.getCustomData(e,"operationAvailableMap"))),a=e.getSelectedContexts();t.setProperty("selectedContexts",a);t.setProperty("numberOfSelectedContexts",a.length);h.updateDeleteInfoForSelectedContexts(t,a);i.setActionEnablement(t,o,a,"table")});n.updateDataFieldForIBNButtonsVisibility(r,this.getView())};a._scrollTablesToRow=function e(t){this._getControls("table").forEach(function(e){B.scrollTableToRow(e,t)})};a._setInitialFocus=function e(){const t=this._getDynamicListReportControl(),i=t.getHeaderExpanded(),n=this._getFilterBarControl();if(n){if(i){if(!n.getShowMessages()){n.setShowMessages(true)}const e=n.getFilterItems().find(function(e){return e.getRequired()&&e.getConditions().length===0});if(e){e.focus()}else if(this._isInitLoadEnabled()&&n.getFilterItems().length>0){n.getFilterItems()[0].focus()}else{var r;(r=this.getView().byId(`${this._getFilterBarControlId()}-btnSearch`))===null||r===void 0?void 0:r.focus()}}else if(this._isInitLoadEnabled()){var o;(o=this._getTable())===null||o===void 0?void 0:o.focusRow(0)}}else{var a;(a=this._getTable())===null||a===void 0?void 0:a.focusRow(0)}};a._getPageTitleInformation=function e(){const t=this.getAppComponent().getManifestEntry("sap.app");return{title:t.title,subtitle:t.subTitle||"",intent:"",icon:""}};a._getFilterBarControl=function e(){return this.getView().byId(this._getFilterBarControlId())};a._getDynamicListReportControl=function e(){return this.getView().byId(this._getDynamicListReportControlId())};a._getAdaptationFilterBarControl=function e(){const t=this._getFilterBarControl().getInbuiltFilter();return t!==null&&t!==void 0&&t.getParent()?t:undefined};a._getSegmentedButton=function e(t){var i;const n=(i=t==="Chart"?this.getChartControl():this._getTable())===null||i===void 0?void 0:i.data("segmentedButtonId");return this.getView().byId(n)};a._getControlFromPageModelProperty=function e(t){var i;const n=(i=this._getPageModel())===null||i===void 0?void 0:i.getProperty(t);return n&&this.getView().byId(n)};a._getDynamicListReportControlId=function e(){var t;return((t=this._getPageModel())===null||t===void 0?void 0:t.getProperty("/dynamicListReportId"))||""};a._getFilterBarControlId=function e(){var t;return((t=this._getPageModel())===null||t===void 0?void 0:t.getProperty("/filterBarId"))||""};a.getChartControl=function e(){return this._getControlFromPageModelProperty("/singleChartId")};a._getVisualFilterBarControl=function e(){const t=b.generate(["visualFilter",this._getFilterBarControlId()]);return t&&this.getView().byId(t)};a._getFilterBarVariantControl=function e(){return this._getControlFromPageModelProperty("/variantManagement/id")};a._getMultiModeControl=function e(){return this.getView().byId("fe::TabMultipleMode::Control")};a._getTable=function e(){if(this._isMultiMode()){var t,i;const e=(t=this._getMultiModeControl())===null||t===void 0?void 0:(i=t.getSelectedInnerControl())===null||i===void 0?void 0:i.content;return e!==null&&e!==void 0&&e.isA("sap.ui.mdc.Table")?e:undefined}else{return this._getControlFromPageModelProperty("/singleTableId")}};a._getControls=function e(t){if(this._isMultiMode()){const e=[];const i=this._getMultiModeControl().content;i.getItems().forEach(i=>{const n=this.getView().byId(i.getKey());if(n&&t){if(i.getKey().indexOf(`fe::${t}`)>-1){e.push(n)}}else if(n!==undefined&&n!==null){e.push(n)}});return e}else if(t==="Chart"){const e=this.getChartControl();return e?[e]:[]}else{const e=this._getTable();return e?[e]:[]}};a._getDefaultPath=function e(){var t;const i=F.getDefaultPath(((t=this._getPageModel())===null||t===void 0?void 0:t.getProperty("/views"))||[]);switch(i){case"primary":return Ae.Chart;case"secondary":return Ae.Table;case"both":default:return Ae.Hybrid}};a._isMultiMode=function e(){var t;return!!((t=this._getPageModel())!==null&&t!==void 0&&t.getProperty("/multiViewsControl"))};a._isInitLoadEnabled=function e(){const t=this.getView().getViewData().initialLoad;return t===Be.Enabled};a._hasMultiVisualizations=function e(){var t;return(t=this._getPageModel())===null||t===void 0?void 0:t.getProperty("/hasMultiVisualizations")};a._disableInitLoad=function e(){const t=this._getFilterBarControl();if(t){t.setSuspendSelection(true)}};a._applyAutomaticallyOnStandardVariant=function e(){return false};a._setInitLoad=function e(){if(!this._isInitLoadEnabled()){this._disableInitLoad()}const t=F.getVariantBackReference(this.getView().getViewData(),this._getPageModel());const i=t&&this.getView().byId(t);if(i){i.registerApplyAutomaticallyOnStandardVariant(this._applyAutomaticallyOnStandardVariant.bind(this))}};a._setShareModel=function e(){const i=t.get("sap.ushell.Container.getUser");const n={bookmarkTitle:document.title,bookmarkCustomUrl:function(){const e=T.getHash();return e?`#${e}`:window.location.href},isShareInJamActive:!!i&&i().isJamActive()};const r=this.getOwnerComponent().getModel("_templPriv");r.setProperty("/listReport/share",n)};a._updateALPNotApplicableFields=function e(t,i){const n={};const r={},o=this._getControls("table"),a=this._getControls("Chart");if(!o.length||!a.length){return}a.forEach(function(e){const t=e.data("targetCollectionPath"),o=t.slice(1),a=`${o}Chart`;if(!n[a]){n[a]=w.getNotApplicableFilters(i,e)}r[a]=n[a]});t.setProperty("controls/ignoredFields",r)};a._isFilterBarHidden=function e(){return this.getView().getViewData().hideFilterBar};a._getApplyAutomaticallyOnVariant=function e(t,i){if(!t||!i){return false}const n=t.getVariants();const r=n.find(function(e){return e&&e.key===i});return r&&r.executeOnSelect||false};a._shouldAutoTriggerSearch=function e(t){if(this.getView().getViewData().initialLoad===Be.Auto&&(!t||t.getStandardVariantKey()===t.getCurrentVariantKey())){const e=this._getFilterBarControl();if(e){const i=e.getConditions();for(const e in i){if(!e.startsWith("$")&&Array.isArray(i[e])&&i[e].length){const e=t.getVariants().find(e=>e.key===t.getCurrentVariantKey());return e&&e.executeOnSelect}}}}return false};a._updateTable=function e(t){if(!t.isTableBound()||this.hasPendingChartChanges){t.rebind();this.hasPendingChartChanges=false}};a._updateChart=function e(t){const i=t.getControlDelegate()._getChart(t);if(!(i&&i.isBound("data"))||this.hasPendingTableChanges){t.getControlDelegate().rebind(t,i.getBindingInfo("data"));this.hasPendingTableChanges=false}};return o}(P),ie=me(te.prototype,"_routing",[R],{configurable:true,enumerable:true,writable:true,initializer:null}),ne=me(te.prototype,"_intentBasedNavigation",[O],{configurable:true,enumerable:true,writable:true,initializer:null}),re=me(te.prototype,"sideEffects",[L],{configurable:true,enumerable:true,writable:true,initializer:null}),oe=me(te.prototype,"intentBasedNavigation",[N],{configurable:true,enumerable:true,writable:true,initializer:null}),ae=me(te.prototype,"share",[z],{configurable:true,enumerable:true,writable:true,initializer:null}),se=me(te.prototype,"viewState",[k],{configurable:true,enumerable:true,writable:true,initializer:null}),le=me(te.prototype,"kpiManagement",[H],{configurable:true,enumerable:true,writable:true,initializer:null}),ue=me(te.prototype,"placeholder",[j],{configurable:true,enumerable:true,writable:true,initializer:null}),ge=me(te.prototype,"massEdit",[U],{configurable:true,enumerable:true,writable:true,initializer:null}),me(te.prototype,"getExtensionAPI",[K,$],Object.getOwnPropertyDescriptor(te.prototype,"getExtensionAPI"),te.prototype),me(te.prototype,"onPageReady",[J,q],Object.getOwnPropertyDescriptor(te.prototype,"onPageReady"),te.prototype),me(te.prototype,"onViewNeedsRefresh",[W,X],Object.getOwnPropertyDescriptor(te.prototype,"onViewNeedsRefresh"),te.prototype),me(te.prototype,"onPendingFilters",[G,Q],Object.getOwnPropertyDescriptor(te.prototype,"onPendingFilters"),te.prototype),me(te.prototype,"onAfterClear",[Y,Z],Object.getOwnPropertyDescriptor(te.prototype,"onAfterClear"),te.prototype),te))||ee);return Ie},false);
6
+ //# sourceMappingURL=ListReportController.controller.js.map