@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.
- package/package.json +2 -20
- package/src/sap/fe/templates/.library +1 -1
- package/src/sap/fe/templates/AnalyticalListPage/Component-dbg.js +21 -0
- package/src/sap/fe/templates/AnalyticalListPage/Component.js +3 -18
- package/src/sap/fe/templates/AnalyticalListPage/Component.js.map +1 -0
- package/src/sap/fe/templates/AnalyticalListPage/chart/FEChartDelegate-dbg.js +32 -0
- package/src/sap/fe/templates/AnalyticalListPage/chart/FEChartDelegate.js +3 -29
- package/src/sap/fe/templates/AnalyticalListPage/chart/FEChartDelegate.js.map +1 -0
- package/src/sap/fe/templates/AnalyticalListPage/manifest.json +1 -1
- package/src/sap/fe/templates/ListComponent-dbg.js +146 -0
- package/src/sap/fe/templates/ListComponent.js +3 -143
- package/src/sap/fe/templates/ListComponent.js.map +1 -0
- package/src/sap/fe/templates/ListReport/Component-dbg.js +77 -0
- package/src/sap/fe/templates/ListReport/Component.js +3 -74
- package/src/sap/fe/templates/ListReport/Component.js.map +1 -0
- package/src/sap/fe/templates/ListReport/ExtensionAPI-dbg.js +147 -0
- package/src/sap/fe/templates/ListReport/ExtensionAPI.js +3 -144
- package/src/sap/fe/templates/ListReport/ExtensionAPI.js.map +1 -0
- package/src/sap/fe/templates/ListReport/LRMessageStrip-dbg.js +191 -0
- package/src/sap/fe/templates/ListReport/LRMessageStrip.js +3 -193
- package/src/sap/fe/templates/ListReport/LRMessageStrip.js.map +1 -0
- package/src/sap/fe/templates/ListReport/ListReport.view.xml +1 -0
- package/src/sap/fe/templates/ListReport/ListReportController-dbg.controller.js +799 -0
- package/src/sap/fe/templates/ListReport/ListReportController.controller.js +3 -832
- package/src/sap/fe/templates/ListReport/ListReportController.controller.js.map +1 -0
- package/src/sap/fe/templates/ListReport/ListReportController.controller.ts +6 -24
- package/src/sap/fe/templates/ListReport/ListReportTemplating-dbg.js +40 -0
- package/src/sap/fe/templates/ListReport/ListReportTemplating.js +3 -37
- package/src/sap/fe/templates/ListReport/ListReportTemplating.js.map +1 -0
- package/src/sap/fe/templates/ListReport/controls/MultipleModeControl-dbg.js +375 -0
- package/src/sap/fe/templates/ListReport/controls/MultipleModeControl.js +3 -378
- package/src/sap/fe/templates/ListReport/controls/MultipleModeControl.js.map +1 -0
- package/src/sap/fe/templates/ListReport/controls/MultipleModeControl.ts +10 -3
- package/src/sap/fe/templates/ListReport/manifest.json +1 -1
- package/src/sap/fe/templates/ListReport/overrides/IntentBasedNavigation-dbg.js +53 -0
- package/src/sap/fe/templates/ListReport/overrides/IntentBasedNavigation.js +3 -50
- package/src/sap/fe/templates/ListReport/overrides/IntentBasedNavigation.js.map +1 -0
- package/src/sap/fe/templates/ListReport/overrides/Share-dbg.js +109 -0
- package/src/sap/fe/templates/ListReport/overrides/Share.js +3 -107
- package/src/sap/fe/templates/ListReport/overrides/Share.js.map +1 -0
- package/src/sap/fe/templates/ListReport/overrides/ViewState-dbg.js +481 -0
- package/src/sap/fe/templates/ListReport/overrides/ViewState.js +3 -428
- package/src/sap/fe/templates/ListReport/overrides/ViewState.js.map +1 -0
- package/src/sap/fe/templates/ListReport/overrides/ViewState.ts +164 -32
- package/src/sap/fe/templates/ListReport/view/fragments/CustomView.fragment.xml +0 -3
- package/src/sap/fe/templates/ListReport/view/fragments/MacroChart.fragment.xml +2 -0
- package/src/sap/fe/templates/ListReport/view/fragments/MultipleMode-dbg.fragment.js +123 -0
- package/src/sap/fe/templates/ListReport/view/fragments/MultipleMode.fragment.js +29 -63
- package/src/sap/fe/templates/ListReport/view/fragments/MultipleMode.fragment.js.map +1 -0
- package/src/sap/fe/templates/ListReport/view/fragments/MultipleMode.fragment.ts +2 -2
- package/src/sap/fe/templates/ObjectPage/Component-dbg.js +150 -0
- package/src/sap/fe/templates/ObjectPage/Component.js +3 -148
- package/src/sap/fe/templates/ObjectPage/Component.js.map +1 -0
- package/src/sap/fe/templates/ObjectPage/ExtendPageDefinition-dbg.js +57 -0
- package/src/sap/fe/templates/ObjectPage/ExtendPageDefinition.js +3 -61
- package/src/sap/fe/templates/ObjectPage/ExtendPageDefinition.js.map +1 -0
- package/src/sap/fe/templates/ObjectPage/ExtensionAPI-dbg.js +222 -0
- package/src/sap/fe/templates/ObjectPage/ExtensionAPI.js +3 -243
- package/src/sap/fe/templates/ObjectPage/ExtensionAPI.js.map +1 -0
- package/src/sap/fe/templates/ObjectPage/ObjectPage.view.xml +2 -2
- package/src/sap/fe/templates/ObjectPage/ObjectPageController-dbg.controller.js +1413 -0
- package/src/sap/fe/templates/ObjectPage/ObjectPageController.controller.js +3 -1534
- package/src/sap/fe/templates/ObjectPage/ObjectPageController.controller.js.map +1 -0
- package/src/sap/fe/templates/ObjectPage/ObjectPageController.controller.ts +11 -14
- package/src/sap/fe/templates/ObjectPage/ObjectPageTemplating-dbg.js +851 -0
- package/src/sap/fe/templates/ObjectPage/ObjectPageTemplating.js +3 -851
- package/src/sap/fe/templates/ObjectPage/ObjectPageTemplating.js.map +1 -0
- package/src/sap/fe/templates/ObjectPage/ObjectPageTemplating.ts +14 -4
- package/src/sap/fe/templates/ObjectPage/components/DraftHandlerButton-dbg.js +147 -0
- package/src/sap/fe/templates/ObjectPage/components/DraftHandlerButton.js +3 -144
- package/src/sap/fe/templates/ObjectPage/components/DraftHandlerButton.js.map +1 -0
- package/src/sap/fe/templates/ObjectPage/components/DraftHandlerButton.tsx +5 -6
- package/src/sap/fe/templates/ObjectPage/controls/StashableHBox-dbg.js +111 -0
- package/src/sap/fe/templates/ObjectPage/controls/StashableHBox.js +3 -108
- package/src/sap/fe/templates/ObjectPage/controls/StashableHBox.js.map +1 -0
- package/src/sap/fe/templates/ObjectPage/controls/StashableVBox-dbg.js +24 -0
- package/src/sap/fe/templates/ObjectPage/controls/StashableVBox.js +3 -21
- package/src/sap/fe/templates/ObjectPage/controls/StashableVBox.js.map +1 -0
- package/src/sap/fe/templates/ObjectPage/controls/SubSectionBlock-dbg.js +79 -0
- package/src/sap/fe/templates/ObjectPage/controls/SubSectionBlock.js +3 -76
- package/src/sap/fe/templates/ObjectPage/controls/SubSectionBlock.js.map +1 -0
- package/src/sap/fe/templates/ObjectPage/designtime/FlexBox-dbg.designtime.js +23 -0
- package/src/sap/fe/templates/ObjectPage/designtime/FlexBox.designtime.js +3 -20
- package/src/sap/fe/templates/ObjectPage/designtime/FlexBox.designtime.js.map +1 -0
- package/src/sap/fe/templates/ObjectPage/designtime/StashableHBox-dbg.designtime.js +52 -0
- package/src/sap/fe/templates/ObjectPage/designtime/StashableHBox.designtime.js +3 -49
- package/src/sap/fe/templates/ObjectPage/designtime/StashableHBox.designtime.js.map +1 -0
- package/src/sap/fe/templates/ObjectPage/designtime/StashableVBox-dbg.designtime.js +38 -0
- package/src/sap/fe/templates/ObjectPage/designtime/StashableVBox.designtime.js +3 -35
- package/src/sap/fe/templates/ObjectPage/designtime/StashableVBox.designtime.js.map +1 -0
- package/src/sap/fe/templates/ObjectPage/flexibility/ScrollableHeaderContainer.flexibility-dbg.js +28 -0
- package/src/sap/fe/templates/ObjectPage/flexibility/ScrollableHeaderContainer.flexibility.js +3 -29
- package/src/sap/fe/templates/ObjectPage/flexibility/ScrollableHeaderContainer.flexibility.js.map +1 -0
- package/src/sap/fe/templates/ObjectPage/flexibility/StashableHBox.flexibility-dbg.js +19 -0
- package/src/sap/fe/templates/ObjectPage/flexibility/StashableHBox.flexibility.js +3 -16
- package/src/sap/fe/templates/ObjectPage/flexibility/StashableHBox.flexibility.js.map +1 -0
- package/src/sap/fe/templates/ObjectPage/flexibility/StashableVBox.flexibility-dbg.js +15 -0
- package/src/sap/fe/templates/ObjectPage/flexibility/StashableVBox.flexibility.js +3 -12
- package/src/sap/fe/templates/ObjectPage/flexibility/StashableVBox.flexibility.js.map +1 -0
- package/src/sap/fe/templates/ObjectPage/manifest.json +1 -1
- package/src/sap/fe/templates/ObjectPage/overrides/IntentBasedNavigation-dbg.js +54 -0
- package/src/sap/fe/templates/ObjectPage/overrides/IntentBasedNavigation.js +3 -51
- package/src/sap/fe/templates/ObjectPage/overrides/IntentBasedNavigation.js.map +1 -0
- package/src/sap/fe/templates/ObjectPage/overrides/InternalRouting-dbg.js +36 -0
- package/src/sap/fe/templates/ObjectPage/overrides/InternalRouting.js +3 -33
- package/src/sap/fe/templates/ObjectPage/overrides/InternalRouting.js.map +1 -0
- package/src/sap/fe/templates/ObjectPage/overrides/MessageHandler-dbg.js +16 -0
- package/src/sap/fe/templates/ObjectPage/overrides/MessageHandler.js +3 -13
- package/src/sap/fe/templates/ObjectPage/overrides/MessageHandler.js.map +1 -0
- package/src/sap/fe/templates/ObjectPage/overrides/Paginator-dbg.js +27 -0
- package/src/sap/fe/templates/ObjectPage/overrides/Paginator.js +3 -24
- package/src/sap/fe/templates/ObjectPage/overrides/Paginator.js.map +1 -0
- package/src/sap/fe/templates/ObjectPage/overrides/Share-dbg.js +276 -0
- package/src/sap/fe/templates/ObjectPage/overrides/Share.js +3 -293
- package/src/sap/fe/templates/ObjectPage/overrides/Share.js.map +1 -0
- package/src/sap/fe/templates/ObjectPage/overrides/ViewState-dbg.js +69 -0
- package/src/sap/fe/templates/ObjectPage/overrides/ViewState.js +3 -63
- package/src/sap/fe/templates/ObjectPage/overrides/ViewState.js.map +1 -0
- package/src/sap/fe/templates/ObjectPage/overrides/ViewState.ts +3 -0
- package/src/sap/fe/templates/ObjectPage/view/fragments/Actions.fragment.xml +2 -2
- package/src/sap/fe/templates/ObjectPage/view/fragments/HeaderFacetCustomContainer.fragment.xml +1 -2
- package/src/sap/fe/templates/ObjectPage/view/fragments/MacroChart.fragment.xml +2 -0
- package/src/sap/fe/templates/ObjectPage/view/fragments/ObjectPageHeaderContact.fragment.xml +2 -2
- package/src/sap/fe/templates/ObjectPage/view/fragments/ObjectPageHeaderForm.fragment.xml +12 -1
- package/src/sap/fe/templates/ObjectPage/view/fragments/Section.fragment.xml +0 -2
- package/src/sap/fe/templates/ObjectPage/view/fragments/SectionContent.fragment.xml +0 -2
- package/src/sap/fe/templates/ObjectPage/view/fragments/SectionContentLazyLoader.fragment.xml +0 -2
- package/src/sap/fe/templates/ObjectPage/view/fragments/SectionCustomSection.fragment.xml +2 -9
- package/src/sap/fe/templates/ObjectPage/view/fragments/SideContentCustomContainer.fragment.xml +1 -2
- package/src/sap/fe/templates/TableScroller-dbg.js +49 -0
- package/src/sap/fe/templates/TableScroller.js +3 -46
- package/src/sap/fe/templates/TableScroller.js.map +1 -0
- package/src/sap/fe/templates/designtime/library-preload.designtime.js +17 -0
- package/src/sap/fe/templates/designtime/library-preload.designtime.js.map +1 -0
- package/src/sap/fe/templates/library-dbg.js +66 -0
- package/src/sap/fe/templates/library-preload.js +236 -0
- package/src/sap/fe/templates/library-preload.js.map +1 -0
- package/src/sap/fe/templates/library.js +3 -56
- package/src/sap/fe/templates/library.js.map +1 -0
- package/src/sap/fe/templates/library.ts +4 -0
- package/src/sap/fe/templates/manifest.json +109 -0
- package/src/sap/fe/templates/messagebundle_fr.properties +1 -1
|
@@ -0,0 +1,375 @@
|
|
|
1
|
+
/*!
|
|
2
|
+
* SAP UI development toolkit for HTML5 (SAPUI5)
|
|
3
|
+
* (c) Copyright 2009-2023 SAP SE. All rights reserved
|
|
4
|
+
*/
|
|
5
|
+
sap.ui.define(["sap/base/Log", "sap/fe/core/CommonUtils", "sap/fe/core/helpers/ClassSupport", "sap/fe/core/helpers/MessageStrip", "sap/fe/macros/DelegateUtil", "sap/m/IconTabFilter", "sap/ui/core/Control", "sap/ui/core/Core", "sap/ui/fl/write/api/ControlPersonalizationWriteAPI", "sap/ui/model/json/JSONModel"], function (Log, CommonUtils, ClassSupport, MessageStrip, DelegateUtil, IconTabFilter, Control, Core, ControlPersonalizationWriteAPI, JSONModel) {
|
|
6
|
+
"use strict";
|
|
7
|
+
|
|
8
|
+
var _dec, _dec2, _dec3, _dec4, _dec5, _dec6, _dec7, _dec8, _class, _class2, _descriptor, _descriptor2, _descriptor3, _descriptor4, _descriptor5, _descriptor6, _descriptor7;
|
|
9
|
+
var property = ClassSupport.property;
|
|
10
|
+
var event = ClassSupport.event;
|
|
11
|
+
var defineUI5Class = ClassSupport.defineUI5Class;
|
|
12
|
+
var association = ClassSupport.association;
|
|
13
|
+
var aggregation = ClassSupport.aggregation;
|
|
14
|
+
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 }); }
|
|
15
|
+
function _assertThisInitialized(self) { if (self === void 0) { throw new ReferenceError("this hasn't been initialised - super() hasn't been called"); } return self; }
|
|
16
|
+
function _inheritsLoose(subClass, superClass) { subClass.prototype = Object.create(superClass.prototype); subClass.prototype.constructor = subClass; _setPrototypeOf(subClass, superClass); }
|
|
17
|
+
function _setPrototypeOf(o, p) { _setPrototypeOf = Object.setPrototypeOf ? Object.setPrototypeOf.bind() : function _setPrototypeOf(o, p) { o.__proto__ = p; return o; }; return _setPrototypeOf(o, p); }
|
|
18
|
+
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; }
|
|
19
|
+
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.'); }
|
|
20
|
+
var BindingAction;
|
|
21
|
+
(function (BindingAction) {
|
|
22
|
+
BindingAction["Suspend"] = "suspendBinding";
|
|
23
|
+
BindingAction["Resume"] = "resumeBinding";
|
|
24
|
+
})(BindingAction || (BindingAction = {}));
|
|
25
|
+
let MultipleModeControl = (_dec = defineUI5Class("sap.fe.templates.ListReport.controls.MultipleModeControl"), _dec2 = property({
|
|
26
|
+
type: "boolean"
|
|
27
|
+
}), _dec3 = property({
|
|
28
|
+
type: "boolean",
|
|
29
|
+
defaultValue: false
|
|
30
|
+
}), _dec4 = property({
|
|
31
|
+
type: "boolean",
|
|
32
|
+
defaultValue: false
|
|
33
|
+
}), _dec5 = aggregation({
|
|
34
|
+
type: "sap.m.IconTabBar",
|
|
35
|
+
multiple: false,
|
|
36
|
+
isDefault: true
|
|
37
|
+
}), _dec6 = association({
|
|
38
|
+
type: "sap.ui.core.Control",
|
|
39
|
+
multiple: true
|
|
40
|
+
}), _dec7 = association({
|
|
41
|
+
type: "sap.fe.core.controls.FilterBar",
|
|
42
|
+
multiple: false
|
|
43
|
+
}), _dec8 = event(), _dec(_class = (_class2 = /*#__PURE__*/function (_Control) {
|
|
44
|
+
_inheritsLoose(MultipleModeControl, _Control);
|
|
45
|
+
function MultipleModeControl() {
|
|
46
|
+
var _this;
|
|
47
|
+
for (var _len = arguments.length, args = new Array(_len), _key = 0; _key < _len; _key++) {
|
|
48
|
+
args[_key] = arguments[_key];
|
|
49
|
+
}
|
|
50
|
+
_this = _Control.call(this, ...args) || this;
|
|
51
|
+
_initializerDefineProperty(_this, "showCounts", _descriptor, _assertThisInitialized(_this));
|
|
52
|
+
_initializerDefineProperty(_this, "freezeContent", _descriptor2, _assertThisInitialized(_this));
|
|
53
|
+
_initializerDefineProperty(_this, "countsOutDated", _descriptor3, _assertThisInitialized(_this));
|
|
54
|
+
_initializerDefineProperty(_this, "content", _descriptor4, _assertThisInitialized(_this));
|
|
55
|
+
_initializerDefineProperty(_this, "innerControls", _descriptor5, _assertThisInitialized(_this));
|
|
56
|
+
_initializerDefineProperty(_this, "filterControl", _descriptor6, _assertThisInitialized(_this));
|
|
57
|
+
_initializerDefineProperty(_this, "select", _descriptor7, _assertThisInitialized(_this));
|
|
58
|
+
return _this;
|
|
59
|
+
}
|
|
60
|
+
var _proto = MultipleModeControl.prototype;
|
|
61
|
+
_proto.onBeforeRendering = function onBeforeRendering() {
|
|
62
|
+
this.getTabsModel(); // Generate the model which is mandatory for some bindings
|
|
63
|
+
|
|
64
|
+
const oFilterControl = this._getFilterControl();
|
|
65
|
+
if (!oFilterControl) {
|
|
66
|
+
// In case there's no filterbar, we have to update the counts in the tabs immediately
|
|
67
|
+
this.setCountsOutDated(true);
|
|
68
|
+
}
|
|
69
|
+
const oFilterBarAPI = oFilterControl === null || oFilterControl === void 0 ? void 0 : oFilterControl.getParent();
|
|
70
|
+
this.getAllInnerControls().forEach(oMacroAPI => {
|
|
71
|
+
var _oMacroAPI$suspendBin;
|
|
72
|
+
if (this.showCounts) {
|
|
73
|
+
oMacroAPI.attachEvent("internalDataRequested", this._refreshTabsCount.bind(this));
|
|
74
|
+
}
|
|
75
|
+
(_oMacroAPI$suspendBin = oMacroAPI.suspendBinding) === null || _oMacroAPI$suspendBin === void 0 ? void 0 : _oMacroAPI$suspendBin.call(oMacroAPI);
|
|
76
|
+
});
|
|
77
|
+
if (oFilterBarAPI) {
|
|
78
|
+
oFilterBarAPI.attachEvent("internalSearch", this._onSearch.bind(this));
|
|
79
|
+
oFilterBarAPI.attachEvent("internalFilterChanged", this._onFilterChanged.bind(this));
|
|
80
|
+
}
|
|
81
|
+
};
|
|
82
|
+
_proto.onAfterRendering = function onAfterRendering() {
|
|
83
|
+
var _this$getSelectedInne, _this$getSelectedInne2;
|
|
84
|
+
(_this$getSelectedInne = this.getSelectedInnerControl()) === null || _this$getSelectedInne === void 0 ? void 0 : (_this$getSelectedInne2 = _this$getSelectedInne.resumeBinding) === null || _this$getSelectedInne2 === void 0 ? void 0 : _this$getSelectedInne2.call(_this$getSelectedInne, !this.getProperty("freezeContent"));
|
|
85
|
+
};
|
|
86
|
+
MultipleModeControl.render = function render(oRm, oControl) {
|
|
87
|
+
oRm.renderControl(oControl.content);
|
|
88
|
+
}
|
|
89
|
+
|
|
90
|
+
/**
|
|
91
|
+
* Gets the model containing information related to the IconTabFilters.
|
|
92
|
+
*
|
|
93
|
+
* @returns {sap.ui.model.Model | undefined} The model
|
|
94
|
+
*/;
|
|
95
|
+
_proto.getTabsModel = function getTabsModel() {
|
|
96
|
+
const sTabsModel = "tabsInternal";
|
|
97
|
+
const oContent = this.content;
|
|
98
|
+
if (!oContent) {
|
|
99
|
+
return undefined;
|
|
100
|
+
}
|
|
101
|
+
let oModel = oContent.getModel(sTabsModel);
|
|
102
|
+
if (!oModel) {
|
|
103
|
+
oModel = new JSONModel({});
|
|
104
|
+
oContent.setModel(oModel, sTabsModel);
|
|
105
|
+
}
|
|
106
|
+
return oModel;
|
|
107
|
+
}
|
|
108
|
+
|
|
109
|
+
/**
|
|
110
|
+
* Gets the inner control of the displayed tab.
|
|
111
|
+
*
|
|
112
|
+
* @returns {InnerControlType | undefined} The control
|
|
113
|
+
*/;
|
|
114
|
+
_proto.getSelectedInnerControl = function getSelectedInnerControl() {
|
|
115
|
+
var _this$content;
|
|
116
|
+
const oSelectedTab = (_this$content = this.content) === null || _this$content === void 0 ? void 0 : _this$content.getItems().find(oItem => oItem.getKey() === this.content.getSelectedKey());
|
|
117
|
+
return oSelectedTab ? this.getAllInnerControls().find(oMacroAPI => this._getTabFromInnerControl(oMacroAPI) === oSelectedTab) : undefined;
|
|
118
|
+
}
|
|
119
|
+
|
|
120
|
+
/**
|
|
121
|
+
* Manages the binding of all inner controls when the selected IconTabFilter is changed.
|
|
122
|
+
*
|
|
123
|
+
* @param {sap.ui.base.Event} oEvent Event fired by the IconTabBar
|
|
124
|
+
*/;
|
|
125
|
+
MultipleModeControl.handleTabChange = function handleTabChange(oEvent) {
|
|
126
|
+
var _oMultiControl$_getVi, _oMultiControl$_getVi2;
|
|
127
|
+
const oIconTabBar = oEvent.getSource();
|
|
128
|
+
const oMultiControl = oIconTabBar.getParent();
|
|
129
|
+
const mParameters = oEvent.getParameters();
|
|
130
|
+
oMultiControl._setInnerBinding(true);
|
|
131
|
+
const sPreviousSelectedKey = mParameters === null || mParameters === void 0 ? void 0 : mParameters.previousKey;
|
|
132
|
+
const sSelectedKey = mParameters === null || mParameters === void 0 ? void 0 : mParameters.selectedKey;
|
|
133
|
+
if (sSelectedKey && sPreviousSelectedKey !== sSelectedKey) {
|
|
134
|
+
const oFilterBar = oMultiControl._getFilterControl();
|
|
135
|
+
if (oFilterBar && !oMultiControl.getProperty("freezeContent")) {
|
|
136
|
+
if (!oMultiControl.getSelectedInnerControl()) {
|
|
137
|
+
//custom tab
|
|
138
|
+
oMultiControl._refreshCustomView(oFilterBar.getFilterConditions(), "tabChanged");
|
|
139
|
+
}
|
|
140
|
+
}
|
|
141
|
+
ControlPersonalizationWriteAPI.add({
|
|
142
|
+
changes: [{
|
|
143
|
+
changeSpecificData: {
|
|
144
|
+
changeType: "selectIconTabBarFilter",
|
|
145
|
+
content: {
|
|
146
|
+
selectedKey: sSelectedKey,
|
|
147
|
+
previousSelectedKey: sPreviousSelectedKey
|
|
148
|
+
}
|
|
149
|
+
},
|
|
150
|
+
selectorElement: oIconTabBar
|
|
151
|
+
}]
|
|
152
|
+
});
|
|
153
|
+
}
|
|
154
|
+
(_oMultiControl$_getVi = oMultiControl._getViewController()) === null || _oMultiControl$_getVi === void 0 ? void 0 : (_oMultiControl$_getVi2 = _oMultiControl$_getVi.getExtensionAPI()) === null || _oMultiControl$_getVi2 === void 0 ? void 0 : _oMultiControl$_getVi2.updateAppState();
|
|
155
|
+
oMultiControl.fireEvent("select", {
|
|
156
|
+
iconTabBar: oIconTabBar,
|
|
157
|
+
selectedKey: sSelectedKey,
|
|
158
|
+
previousKey: sPreviousSelectedKey
|
|
159
|
+
});
|
|
160
|
+
}
|
|
161
|
+
|
|
162
|
+
/**
|
|
163
|
+
* Invalidates the content of all inner controls.
|
|
164
|
+
*/;
|
|
165
|
+
_proto.invalidateContent = function invalidateContent() {
|
|
166
|
+
this.setCountsOutDated(true);
|
|
167
|
+
this.getAllInnerControls().forEach(oMacroAPI => {
|
|
168
|
+
var _oMacroAPI$invalidate;
|
|
169
|
+
(_oMacroAPI$invalidate = oMacroAPI.invalidateContent) === null || _oMacroAPI$invalidate === void 0 ? void 0 : _oMacroAPI$invalidate.call(oMacroAPI);
|
|
170
|
+
});
|
|
171
|
+
}
|
|
172
|
+
|
|
173
|
+
/**
|
|
174
|
+
* Sets the counts to out of date or up to date
|
|
175
|
+
* If the counts are set to "out of date" and the selected IconTabFilter doesn't contain an inner control all inner controls are requested to get the new counts.
|
|
176
|
+
*
|
|
177
|
+
* @param {boolean} bValue Freeze or not the control
|
|
178
|
+
*/;
|
|
179
|
+
_proto.setCountsOutDated = function setCountsOutDated() {
|
|
180
|
+
let bValue = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : true;
|
|
181
|
+
this.setProperty("countsOutDated", bValue);
|
|
182
|
+
// if the current tab is not configured with no inner Control
|
|
183
|
+
// the tab counts must be manually refreshed since no Macro API will sent event internalDataRequested
|
|
184
|
+
if (bValue && !this.getSelectedInnerControl()) {
|
|
185
|
+
this._refreshTabsCount();
|
|
186
|
+
}
|
|
187
|
+
}
|
|
188
|
+
|
|
189
|
+
/**
|
|
190
|
+
* Freezes the content :
|
|
191
|
+
* - content is frozen: the binding of the inner controls are suspended.
|
|
192
|
+
* - content is unfrozen: the binding of inner control related to the selected IconTabFilter is resumed.
|
|
193
|
+
*
|
|
194
|
+
* @param {boolean} bValue Freeze or not the control
|
|
195
|
+
*/;
|
|
196
|
+
_proto.setFreezeContent = function setFreezeContent(bValue) {
|
|
197
|
+
this.setProperty("freezeContent", bValue);
|
|
198
|
+
this._setInnerBinding();
|
|
199
|
+
}
|
|
200
|
+
|
|
201
|
+
/**
|
|
202
|
+
* Updates the internal model with the properties that are not applicable on each IconTabFilter (containing inner control) according to the entityType of the filter control.
|
|
203
|
+
*
|
|
204
|
+
* @param oResourceBundle
|
|
205
|
+
*/;
|
|
206
|
+
_proto._updateMultiTabNotApplicableFields = function _updateMultiTabNotApplicableFields(oResourceBundle) {
|
|
207
|
+
const tabsModel = this.getTabsModel();
|
|
208
|
+
const oFilterControl = this._getFilterControl();
|
|
209
|
+
if (tabsModel && oFilterControl) {
|
|
210
|
+
const results = {};
|
|
211
|
+
this.getAllInnerControls().forEach(oMacroAPI => {
|
|
212
|
+
const oTab = this._getTabFromInnerControl(oMacroAPI);
|
|
213
|
+
if (oTab) {
|
|
214
|
+
var _oMacroAPI$refreshNot;
|
|
215
|
+
const sTabId = oTab.getKey();
|
|
216
|
+
const mIgnoredFields = ((_oMacroAPI$refreshNot = oMacroAPI.refreshNotApplicableFields) === null || _oMacroAPI$refreshNot === void 0 ? void 0 : _oMacroAPI$refreshNot.call(oMacroAPI, oFilterControl)) || [];
|
|
217
|
+
results[sTabId] = {
|
|
218
|
+
notApplicable: {
|
|
219
|
+
fields: mIgnoredFields,
|
|
220
|
+
title: this._setTabMessageStrip({
|
|
221
|
+
entityTypePath: oFilterControl.data("entityType"),
|
|
222
|
+
ignoredFields: mIgnoredFields,
|
|
223
|
+
resourceBundle: oResourceBundle,
|
|
224
|
+
title: oTab.getText()
|
|
225
|
+
})
|
|
226
|
+
}
|
|
227
|
+
};
|
|
228
|
+
}
|
|
229
|
+
});
|
|
230
|
+
tabsModel.setData(results);
|
|
231
|
+
}
|
|
232
|
+
}
|
|
233
|
+
|
|
234
|
+
/**
|
|
235
|
+
* Gets the inner controls.
|
|
236
|
+
*
|
|
237
|
+
* @param {boolean} bOnlyForVisibleTab Should display only the visible controls
|
|
238
|
+
* @returns {InnerControlType[]} An array of controls
|
|
239
|
+
*/;
|
|
240
|
+
_proto.getAllInnerControls = function getAllInnerControls() {
|
|
241
|
+
let bOnlyForVisibleTab = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : false;
|
|
242
|
+
return this.innerControls.reduce((aInnerControls, sInnerControl) => {
|
|
243
|
+
const oControl = Core.byId(sInnerControl);
|
|
244
|
+
if (oControl) {
|
|
245
|
+
aInnerControls.push(oControl);
|
|
246
|
+
}
|
|
247
|
+
return aInnerControls.filter(oInnerControl => {
|
|
248
|
+
var _this$_getTabFromInne;
|
|
249
|
+
return !bOnlyForVisibleTab || ((_this$_getTabFromInne = this._getTabFromInnerControl(oInnerControl)) === null || _this$_getTabFromInne === void 0 ? void 0 : _this$_getTabFromInne.getVisible());
|
|
250
|
+
});
|
|
251
|
+
}, []) || [];
|
|
252
|
+
};
|
|
253
|
+
_proto._getFilterControl = function _getFilterControl() {
|
|
254
|
+
return Core.byId(this.filterControl);
|
|
255
|
+
};
|
|
256
|
+
_proto._getTabFromInnerControl = function _getTabFromInnerControl(oControl) {
|
|
257
|
+
const sSupportedClass = IconTabFilter.getMetadata().getName();
|
|
258
|
+
let oTab = oControl;
|
|
259
|
+
if (oTab && !oTab.isA(sSupportedClass) && oTab.getParent) {
|
|
260
|
+
oTab = oControl.getParent();
|
|
261
|
+
}
|
|
262
|
+
return oTab && oTab.isA(sSupportedClass) ? oTab : undefined;
|
|
263
|
+
};
|
|
264
|
+
_proto._getViewController = function _getViewController() {
|
|
265
|
+
const oView = CommonUtils.getTargetView(this);
|
|
266
|
+
return oView && oView.getController();
|
|
267
|
+
};
|
|
268
|
+
_proto._refreshCustomView = function _refreshCustomView(oFilterConditions, sRefreshCause) {
|
|
269
|
+
var _this$_getViewControl, _this$_getViewControl2;
|
|
270
|
+
(_this$_getViewControl = this._getViewController()) === null || _this$_getViewControl === void 0 ? void 0 : (_this$_getViewControl2 = _this$_getViewControl.onViewNeedsRefresh) === null || _this$_getViewControl2 === void 0 ? void 0 : _this$_getViewControl2.call(_this$_getViewControl, {
|
|
271
|
+
filterConditions: oFilterConditions,
|
|
272
|
+
currentTabId: this.content.getSelectedKey(),
|
|
273
|
+
refreshCause: sRefreshCause
|
|
274
|
+
});
|
|
275
|
+
};
|
|
276
|
+
_proto._refreshTabsCount = function _refreshTabsCount(tableEvent) {
|
|
277
|
+
var _this$_getTabFromInne2, _this$content2;
|
|
278
|
+
// If the refresh is triggered by an event (internalDataRequested)
|
|
279
|
+
// we cannot use the selected key as reference since table can be refreshed by SideEffects
|
|
280
|
+
// so the table could be into a different tab -> we use the source of the event to find the targeted tab
|
|
281
|
+
// If not triggered by an event -> refresh at least the counts of the current MacroAPI
|
|
282
|
+
// In any case if the counts are set to Outdated for the MultipleModeControl all the counts are refreshed
|
|
283
|
+
const eventMacroAPI = tableEvent === null || tableEvent === void 0 ? void 0 : tableEvent.getSource();
|
|
284
|
+
const targetKey = eventMacroAPI ? (_this$_getTabFromInne2 = this._getTabFromInnerControl(eventMacroAPI)) === null || _this$_getTabFromInne2 === void 0 ? void 0 : _this$_getTabFromInne2.getKey() : (_this$content2 = this.content) === null || _this$content2 === void 0 ? void 0 : _this$content2.getSelectedKey();
|
|
285
|
+
this.getAllInnerControls(true).forEach(oMacroAPI => {
|
|
286
|
+
const oIconTabFilter = this._getTabFromInnerControl(oMacroAPI);
|
|
287
|
+
if (oMacroAPI !== null && oMacroAPI !== void 0 && oMacroAPI.getCounts && (this.countsOutDated || targetKey === (oIconTabFilter === null || oIconTabFilter === void 0 ? void 0 : oIconTabFilter.getKey()))) {
|
|
288
|
+
if (oIconTabFilter && oIconTabFilter.setCount) {
|
|
289
|
+
oIconTabFilter.setCount("...");
|
|
290
|
+
oMacroAPI.getCounts().then(iCount => oIconTabFilter.setCount(iCount || "0")).catch(function (oError) {
|
|
291
|
+
Log.error("Error while requesting Counts for Control", oError);
|
|
292
|
+
});
|
|
293
|
+
}
|
|
294
|
+
}
|
|
295
|
+
});
|
|
296
|
+
this.setCountsOutDated(false);
|
|
297
|
+
};
|
|
298
|
+
_proto._setInnerBinding = function _setInnerBinding() {
|
|
299
|
+
let bRequestIfNotInitialized = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : false;
|
|
300
|
+
if (this.content) {
|
|
301
|
+
this.getAllInnerControls().forEach(oMacroAPI => {
|
|
302
|
+
var _oMacroAPI$sAction;
|
|
303
|
+
const oIconTabFilter = this._getTabFromInnerControl(oMacroAPI);
|
|
304
|
+
const bIsSelectedKey = (oIconTabFilter === null || oIconTabFilter === void 0 ? void 0 : oIconTabFilter.getKey()) === this.content.getSelectedKey();
|
|
305
|
+
const sAction = bIsSelectedKey && !this.getProperty("freezeContent") ? BindingAction.Resume : BindingAction.Suspend;
|
|
306
|
+
(_oMacroAPI$sAction = oMacroAPI[sAction]) === null || _oMacroAPI$sAction === void 0 ? void 0 : _oMacroAPI$sAction.call(oMacroAPI, sAction === BindingAction.Resume ? bRequestIfNotInitialized && bIsSelectedKey : undefined);
|
|
307
|
+
});
|
|
308
|
+
}
|
|
309
|
+
};
|
|
310
|
+
_proto._setTabMessageStrip = function _setTabMessageStrip(properties) {
|
|
311
|
+
let sText = "";
|
|
312
|
+
const aIgnoredFields = properties.ignoredFields;
|
|
313
|
+
const oFilterControl = this._getFilterControl();
|
|
314
|
+
if (oFilterControl && Array.isArray(aIgnoredFields) && aIgnoredFields.length > 0 && properties.title) {
|
|
315
|
+
const aIgnoredLabels = MessageStrip.getLabels(aIgnoredFields, properties.entityTypePath, oFilterControl, properties.resourceBundle);
|
|
316
|
+
sText = MessageStrip.getText(aIgnoredLabels, oFilterControl, properties.title, DelegateUtil.getLocalizedText);
|
|
317
|
+
return sText;
|
|
318
|
+
}
|
|
319
|
+
};
|
|
320
|
+
_proto._onSearch = function _onSearch(oEvent) {
|
|
321
|
+
this.setCountsOutDated(true);
|
|
322
|
+
this.setFreezeContent(false);
|
|
323
|
+
if (this.getSelectedInnerControl()) {
|
|
324
|
+
var _this$_getViewControl3;
|
|
325
|
+
this._updateMultiTabNotApplicableFields((_this$_getViewControl3 = this._getViewController()) === null || _this$_getViewControl3 === void 0 ? void 0 : _this$_getViewControl3.oResourceBundle);
|
|
326
|
+
} else {
|
|
327
|
+
// custom tab
|
|
328
|
+
this._refreshCustomView(oEvent.getParameter("conditions"), "search");
|
|
329
|
+
}
|
|
330
|
+
};
|
|
331
|
+
_proto._onFilterChanged = function _onFilterChanged(oEvent) {
|
|
332
|
+
if (oEvent.getParameter("conditionsBased")) {
|
|
333
|
+
this.setFreezeContent(true);
|
|
334
|
+
}
|
|
335
|
+
};
|
|
336
|
+
return MultipleModeControl;
|
|
337
|
+
}(Control), (_descriptor = _applyDecoratedDescriptor(_class2.prototype, "showCounts", [_dec2], {
|
|
338
|
+
configurable: true,
|
|
339
|
+
enumerable: true,
|
|
340
|
+
writable: true,
|
|
341
|
+
initializer: null
|
|
342
|
+
}), _descriptor2 = _applyDecoratedDescriptor(_class2.prototype, "freezeContent", [_dec3], {
|
|
343
|
+
configurable: true,
|
|
344
|
+
enumerable: true,
|
|
345
|
+
writable: true,
|
|
346
|
+
initializer: null
|
|
347
|
+
}), _descriptor3 = _applyDecoratedDescriptor(_class2.prototype, "countsOutDated", [_dec4], {
|
|
348
|
+
configurable: true,
|
|
349
|
+
enumerable: true,
|
|
350
|
+
writable: true,
|
|
351
|
+
initializer: null
|
|
352
|
+
}), _descriptor4 = _applyDecoratedDescriptor(_class2.prototype, "content", [_dec5], {
|
|
353
|
+
configurable: true,
|
|
354
|
+
enumerable: true,
|
|
355
|
+
writable: true,
|
|
356
|
+
initializer: null
|
|
357
|
+
}), _descriptor5 = _applyDecoratedDescriptor(_class2.prototype, "innerControls", [_dec6], {
|
|
358
|
+
configurable: true,
|
|
359
|
+
enumerable: true,
|
|
360
|
+
writable: true,
|
|
361
|
+
initializer: null
|
|
362
|
+
}), _descriptor6 = _applyDecoratedDescriptor(_class2.prototype, "filterControl", [_dec7], {
|
|
363
|
+
configurable: true,
|
|
364
|
+
enumerable: true,
|
|
365
|
+
writable: true,
|
|
366
|
+
initializer: null
|
|
367
|
+
}), _descriptor7 = _applyDecoratedDescriptor(_class2.prototype, "select", [_dec8], {
|
|
368
|
+
configurable: true,
|
|
369
|
+
enumerable: true,
|
|
370
|
+
writable: true,
|
|
371
|
+
initializer: null
|
|
372
|
+
})), _class2)) || _class);
|
|
373
|
+
return MultipleModeControl;
|
|
374
|
+
}, false);
|
|
375
|
+
//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJuYW1lcyI6WyJCaW5kaW5nQWN0aW9uIiwiTXVsdGlwbGVNb2RlQ29udHJvbCIsImRlZmluZVVJNUNsYXNzIiwicHJvcGVydHkiLCJ0eXBlIiwiZGVmYXVsdFZhbHVlIiwiYWdncmVnYXRpb24iLCJtdWx0aXBsZSIsImlzRGVmYXVsdCIsImFzc29jaWF0aW9uIiwiZXZlbnQiLCJvbkJlZm9yZVJlbmRlcmluZyIsImdldFRhYnNNb2RlbCIsIm9GaWx0ZXJDb250cm9sIiwiX2dldEZpbHRlckNvbnRyb2wiLCJzZXRDb3VudHNPdXREYXRlZCIsIm9GaWx0ZXJCYXJBUEkiLCJnZXRQYXJlbnQiLCJnZXRBbGxJbm5lckNvbnRyb2xzIiwiZm9yRWFjaCIsIm9NYWNyb0FQSSIsInNob3dDb3VudHMiLCJhdHRhY2hFdmVudCIsIl9yZWZyZXNoVGFic0NvdW50IiwiYmluZCIsInN1c3BlbmRCaW5kaW5nIiwiX29uU2VhcmNoIiwiX29uRmlsdGVyQ2hhbmdlZCIsIm9uQWZ0ZXJSZW5kZXJpbmciLCJnZXRTZWxlY3RlZElubmVyQ29udHJvbCIsInJlc3VtZUJpbmRpbmciLCJnZXRQcm9wZXJ0eSIsInJlbmRlciIsIm9SbSIsIm9Db250cm9sIiwicmVuZGVyQ29udHJvbCIsImNvbnRlbnQiLCJzVGFic01vZGVsIiwib0NvbnRlbnQiLCJ1bmRlZmluZWQiLCJvTW9kZWwiLCJnZXRNb2RlbCIsIkpTT05Nb2RlbCIsInNldE1vZGVsIiwib1NlbGVjdGVkVGFiIiwiZ2V0SXRlbXMiLCJmaW5kIiwib0l0ZW0iLCJnZXRLZXkiLCJnZXRTZWxlY3RlZEtleSIsIl9nZXRUYWJGcm9tSW5uZXJDb250cm9sIiwiaGFuZGxlVGFiQ2hhbmdlIiwib0V2ZW50Iiwib0ljb25UYWJCYXIiLCJnZXRTb3VyY2UiLCJvTXVsdGlDb250cm9sIiwibVBhcmFtZXRlcnMiLCJnZXRQYXJhbWV0ZXJzIiwiX3NldElubmVyQmluZGluZyIsInNQcmV2aW91c1NlbGVjdGVkS2V5IiwicHJldmlvdXNLZXkiLCJzU2VsZWN0ZWRLZXkiLCJzZWxlY3RlZEtleSIsIm9GaWx0ZXJCYXIiLCJfcmVmcmVzaEN1c3RvbVZpZXciLCJnZXRGaWx0ZXJDb25kaXRpb25zIiwiQ29udHJvbFBlcnNvbmFsaXphdGlvbldyaXRlQVBJIiwiYWRkIiwiY2hhbmdlcyIsImNoYW5nZVNwZWNpZmljRGF0YSIsImNoYW5nZVR5cGUiLCJwcmV2aW91c1NlbGVjdGVkS2V5Iiwic2VsZWN0b3JFbGVtZW50IiwiX2dldFZpZXdDb250cm9sbGVyIiwiZ2V0RXh0ZW5zaW9uQVBJIiwidXBkYXRlQXBwU3RhdGUiLCJmaXJlRXZlbnQiLCJpY29uVGFiQmFyIiwiaW52YWxpZGF0ZUNvbnRlbnQiLCJiVmFsdWUiLCJzZXRQcm9wZXJ0eSIsInNldEZyZWV6ZUNvbnRlbnQiLCJfdXBkYXRlTXVsdGlUYWJOb3RBcHBsaWNhYmxlRmllbGRzIiwib1Jlc291cmNlQnVuZGxlIiwidGFic01vZGVsIiwicmVzdWx0cyIsIm9UYWIiLCJzVGFiSWQiLCJtSWdub3JlZEZpZWxkcyIsInJlZnJlc2hOb3RBcHBsaWNhYmxlRmllbGRzIiwibm90QXBwbGljYWJsZSIsImZpZWxkcyIsInRpdGxlIiwiX3NldFRhYk1lc3NhZ2VTdHJpcCIsImVudGl0eVR5cGVQYXRoIiwiZGF0YSIsImlnbm9yZWRGaWVsZHMiLCJyZXNvdXJjZUJ1bmRsZSIsImdldFRleHQiLCJzZXREYXRhIiwiYk9ubHlGb3JWaXNpYmxlVGFiIiwiaW5uZXJDb250cm9scyIsInJlZHVjZSIsImFJbm5lckNvbnRyb2xzIiwic0lubmVyQ29udHJvbCIsIkNvcmUiLCJieUlkIiwicHVzaCIsImZpbHRlciIsIm9Jbm5lckNvbnRyb2wiLCJnZXRWaXNpYmxlIiwiZmlsdGVyQ29udHJvbCIsInNTdXBwb3J0ZWRDbGFzcyIsIkljb25UYWJGaWx0ZXIiLCJnZXRNZXRhZGF0YSIsImdldE5hbWUiLCJpc0EiLCJvVmlldyIsIkNvbW1vblV0aWxzIiwiZ2V0VGFyZ2V0VmlldyIsImdldENvbnRyb2xsZXIiLCJvRmlsdGVyQ29uZGl0aW9ucyIsInNSZWZyZXNoQ2F1c2UiLCJvblZpZXdOZWVkc1JlZnJlc2giLCJmaWx0ZXJDb25kaXRpb25zIiwiY3VycmVudFRhYklkIiwicmVmcmVzaENhdXNlIiwidGFibGVFdmVudCIsImV2ZW50TWFjcm9BUEkiLCJ0YXJnZXRLZXkiLCJvSWNvblRhYkZpbHRlciIsImdldENvdW50cyIsImNvdW50c091dERhdGVkIiwic2V0Q291bnQiLCJ0aGVuIiwiaUNvdW50IiwiY2F0Y2giLCJvRXJyb3IiLCJMb2ciLCJlcnJvciIsImJSZXF1ZXN0SWZOb3RJbml0aWFsaXplZCIsImJJc1NlbGVjdGVkS2V5Iiwic0FjdGlvbiIsIlJlc3VtZSIsIlN1c3BlbmQiLCJwcm9wZXJ0aWVzIiwic1RleHQiLCJhSWdub3JlZEZpZWxkcyIsIkFycmF5IiwiaXNBcnJheSIsImxlbmd0aCIsImFJZ25vcmVkTGFiZWxzIiwiTWVzc2FnZVN0cmlwIiwiZ2V0TGFiZWxzIiwiRGVsZWdhdGVVdGlsIiwiZ2V0TG9jYWxpemVkVGV4dCIsImdldFBhcmFtZXRlciIsIkNvbnRyb2wiXSwic291cmNlUm9vdCI6Ii4iLCJzb3VyY2VzIjpbIk11bHRpcGxlTW9kZUNvbnRyb2wudHMiXSwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHR5cGUgUmVzb3VyY2VCdW5kbGUgZnJvbSBcInNhcC9iYXNlL2kxOG4vUmVzb3VyY2VCdW5kbGVcIjtcbmltcG9ydCBMb2cgZnJvbSBcInNhcC9iYXNlL0xvZ1wiO1xuaW1wb3J0IENvbW1vblV0aWxzIGZyb20gXCJzYXAvZmUvY29yZS9Db21tb25VdGlsc1wiO1xuaW1wb3J0IHR5cGUgRmlsdGVyQmFyIGZyb20gXCJzYXAvZmUvY29yZS9jb250cm9scy9GaWx0ZXJCYXJcIjtcbmltcG9ydCB7IGFnZ3JlZ2F0aW9uLCBhc3NvY2lhdGlvbiwgZGVmaW5lVUk1Q2xhc3MsIGV2ZW50LCBwcm9wZXJ0eSB9IGZyb20gXCJzYXAvZmUvY29yZS9oZWxwZXJzL0NsYXNzU3VwcG9ydFwiO1xuaW1wb3J0IE1lc3NhZ2VTdHJpcCBmcm9tIFwic2FwL2ZlL2NvcmUvaGVscGVycy9NZXNzYWdlU3RyaXBcIjtcbmltcG9ydCBEZWxlZ2F0ZVV0aWwgZnJvbSBcInNhcC9mZS9tYWNyb3MvRGVsZWdhdGVVdGlsXCI7XG5pbXBvcnQgTWFjcm9BUEkgZnJvbSBcInNhcC9mZS9tYWNyb3MvTWFjcm9BUElcIjtcbmltcG9ydCBJY29uVGFiQmFyIGZyb20gXCJzYXAvbS9JY29uVGFiQmFyXCI7XG5pbXBvcnQgSWNvblRhYkZpbHRlciBmcm9tIFwic2FwL20vSWNvblRhYkZpbHRlclwiO1xuaW1wb3J0IHR5cGUgQ29yZUV2ZW50IGZyb20gXCJzYXAvdWkvYmFzZS9FdmVudFwiO1xuaW1wb3J0IENvbnRyb2wgZnJvbSBcInNhcC91aS9jb3JlL0NvbnRyb2xcIjtcbmltcG9ydCBDb3JlIGZyb20gXCJzYXAvdWkvY29yZS9Db3JlXCI7XG5pbXBvcnQgUmVuZGVyTWFuYWdlciBmcm9tIFwic2FwL3VpL2NvcmUvUmVuZGVyTWFuYWdlclwiO1xuaW1wb3J0IENvbnRyb2xQZXJzb25hbGl6YXRpb25Xcml0ZUFQSSBmcm9tIFwic2FwL3VpL2ZsL3dyaXRlL2FwaS9Db250cm9sUGVyc29uYWxpemF0aW9uV3JpdGVBUElcIjtcbmltcG9ydCBKU09OTW9kZWwgZnJvbSBcInNhcC91aS9tb2RlbC9qc29uL0pTT05Nb2RlbFwiO1xuaW1wb3J0IE1vZGVsIGZyb20gXCJzYXAvdWkvbW9kZWwvTW9kZWxcIjtcblxuZXhwb3J0IHR5cGUgSW5uZXJDb250cm9sVHlwZSA9IE1hY3JvQVBJICZcblx0UGFydGlhbDx7XG5cdFx0cmVzdW1lQmluZGluZzogRnVuY3Rpb247XG5cdFx0c3VzcGVuZEJpbmRpbmc6IEZ1bmN0aW9uO1xuXHRcdGdldENvdW50czogRnVuY3Rpb247XG5cdFx0cmVmcmVzaE5vdEFwcGxpY2FibGVGaWVsZHM6IEZ1bmN0aW9uO1xuXHRcdGludmFsaWRhdGVDb250ZW50OiBGdW5jdGlvbjtcblx0fT47XG5cbnR5cGUgTWVzc2FnZVN0cmlwUHJvcGVydGllcyA9IHtcblx0ZW50aXR5VHlwZVBhdGg6IHN0cmluZztcblx0aWdub3JlZEZpZWxkczogYW55W107XG5cdHJlc291cmNlQnVuZGxlOiBSZXNvdXJjZUJ1bmRsZTtcblx0dGl0bGU6IHN0cmluZztcbn07XG5cbmVudW0gQmluZGluZ0FjdGlvbiB7XG5cdFN1c3BlbmQgPSBcInN1c3BlbmRCaW5kaW5nXCIsXG5cdFJlc3VtZSA9IFwicmVzdW1lQmluZGluZ1wiXG59XG5cbkBkZWZpbmVVSTVDbGFzcyhcInNhcC5mZS50ZW1wbGF0ZXMuTGlzdFJlcG9ydC5jb250cm9scy5NdWx0aXBsZU1vZGVDb250cm9sXCIpXG5jbGFzcyBNdWx0aXBsZU1vZGVDb250cm9sIGV4dGVuZHMgQ29udHJvbCB7XG5cdEBwcm9wZXJ0eSh7IHR5cGU6IFwiYm9vbGVhblwiIH0pXG5cdHNob3dDb3VudHMhOiBib29sZWFuO1xuXG5cdEBwcm9wZXJ0eSh7IHR5cGU6IFwiYm9vbGVhblwiLCBkZWZhdWx0VmFsdWU6IGZhbHNlIH0pXG5cdGZyZWV6ZUNvbnRlbnQhOiBib29sZWFuO1xuXG5cdEBwcm9wZXJ0eSh7IHR5cGU6IFwiYm9vbGVhblwiLCBkZWZhdWx0VmFsdWU6IGZhbHNlIH0pXG5cdGNvdW50c091dERhdGVkITogYm9vbGVhbjtcblxuXHRAYWdncmVnYXRpb24oeyB0eXBlOiBcInNhcC5tLkljb25UYWJCYXJcIiwgbXVsdGlwbGU6IGZhbHNlLCBpc0RlZmF1bHQ6IHRydWUgfSlcblx0Y29udGVudCE6IEljb25UYWJCYXI7XG5cblx0QGFzc29jaWF0aW9uKHsgdHlwZTogXCJzYXAudWkuY29yZS5Db250cm9sXCIsIG11bHRpcGxlOiB0cnVlIH0pXG5cdGlubmVyQ29udHJvbHMhOiBzdHJpbmdbXTtcblxuXHRAYXNzb2NpYXRpb24oeyB0eXBlOiBcInNhcC5mZS5jb3JlLmNvbnRyb2xzLkZpbHRlckJhclwiLCBtdWx0aXBsZTogZmFsc2UgfSlcblx0ZmlsdGVyQ29udHJvbCE6IHN0cmluZztcblxuXHRAZXZlbnQoKVxuXHRzZWxlY3QhOiBGdW5jdGlvbjtcblxuXHRvbkJlZm9yZVJlbmRlcmluZygpIHtcblx0XHR0aGlzLmdldFRhYnNNb2RlbCgpOyAvLyBHZW5lcmF0ZSB0aGUgbW9kZWwgd2hpY2ggaXMgbWFuZGF0b3J5IGZvciBzb21lIGJpbmRpbmdzXG5cblx0XHRjb25zdCBvRmlsdGVyQ29udHJvbCA9IHRoaXMuX2dldEZpbHRlckNvbnRyb2woKTtcblx0XHRpZiAoIW9GaWx0ZXJDb250cm9sKSB7XG5cdFx0XHQvLyBJbiBjYXNlIHRoZXJlJ3Mgbm8gZmlsdGVyYmFyLCB3ZSBoYXZlIHRvIHVwZGF0ZSB0aGUgY291bnRzIGluIHRoZSB0YWJzIGltbWVkaWF0ZWx5XG5cdFx0XHR0aGlzLnNldENvdW50c091dERhdGVkKHRydWUpO1xuXHRcdH1cblx0XHRjb25zdCBvRmlsdGVyQmFyQVBJID0gb0ZpbHRlckNvbnRyb2w/LmdldFBhcmVudCgpO1xuXHRcdHRoaXMuZ2V0QWxsSW5uZXJDb250cm9scygpLmZvckVhY2goKG9NYWNyb0FQSSkgPT4ge1xuXHRcdFx0aWYgKHRoaXMuc2hvd0NvdW50cykge1xuXHRcdFx0XHRvTWFjcm9BUEkuYXR0YWNoRXZlbnQoXCJpbnRlcm5hbERhdGFSZXF1ZXN0ZWRcIiwgdGhpcy5fcmVmcmVzaFRhYnNDb3VudC5iaW5kKHRoaXMpKTtcblx0XHRcdH1cblx0XHRcdG9NYWNyb0FQSS5zdXNwZW5kQmluZGluZz8uKCk7XG5cdFx0fSk7XG5cdFx0aWYgKG9GaWx0ZXJCYXJBUEkpIHtcblx0XHRcdG9GaWx0ZXJCYXJBUEkuYXR0YWNoRXZlbnQoXCJpbnRlcm5hbFNlYXJjaFwiLCB0aGlzLl9vblNlYXJjaC5iaW5kKHRoaXMpKTtcblx0XHRcdG9GaWx0ZXJCYXJBUEkuYXR0YWNoRXZlbnQoXCJpbnRlcm5hbEZpbHRlckNoYW5nZWRcIiwgdGhpcy5fb25GaWx0ZXJDaGFuZ2VkLmJpbmQodGhpcykpO1xuXHRcdH1cblx0fVxuXG5cdG9uQWZ0ZXJSZW5kZXJpbmcoKSB7XG5cdFx0dGhpcy5nZXRTZWxlY3RlZElubmVyQ29udHJvbCgpPy5yZXN1bWVCaW5kaW5nPy4oIXRoaXMuZ2V0UHJvcGVydHkoXCJmcmVlemVDb250ZW50XCIpKTtcblx0fVxuXG5cdHN0YXRpYyByZW5kZXIob1JtOiBSZW5kZXJNYW5hZ2VyLCBvQ29udHJvbDogTXVsdGlwbGVNb2RlQ29udHJvbCkge1xuXHRcdG9SbS5yZW5kZXJDb250cm9sKG9Db250cm9sLmNvbnRlbnQpO1xuXHR9XG5cblx0LyoqXG5cdCAqIEdldHMgdGhlIG1vZGVsIGNvbnRhaW5pbmcgaW5mb3JtYXRpb24gcmVsYXRlZCB0byB0aGUgSWNvblRhYkZpbHRlcnMuXG5cdCAqXG5cdCAqIEByZXR1cm5zIHtzYXAudWkubW9kZWwuTW9kZWwgfCB1bmRlZmluZWR9IFRoZSBtb2RlbFxuXHQgKi9cblx0Z2V0VGFic01vZGVsKCk6IE1vZGVsIHwgdW5kZWZpbmVkIHtcblx0XHRjb25zdCBzVGFic01vZGVsID0gXCJ0YWJzSW50ZXJuYWxcIjtcblx0XHRjb25zdCBvQ29udGVudCA9IHRoaXMuY29udGVudDtcblx0XHRpZiAoIW9Db250ZW50KSB7XG5cdFx0XHRyZXR1cm4gdW5kZWZpbmVkO1xuXHRcdH1cblx0XHRsZXQgb01vZGVsID0gb0NvbnRlbnQuZ2V0TW9kZWwoc1RhYnNNb2RlbCk7XG5cdFx0aWYgKCFvTW9kZWwpIHtcblx0XHRcdG9Nb2RlbCA9IG5ldyBKU09OTW9kZWwoe30pO1xuXHRcdFx0b0NvbnRlbnQuc2V0TW9kZWwob01vZGVsLCBzVGFic01vZGVsKTtcblx0XHR9XG5cdFx0cmV0dXJuIG9Nb2RlbDtcblx0fVxuXG5cdC8qKlxuXHQgKiBHZXRzIHRoZSBpbm5lciBjb250cm9sIG9mIHRoZSBkaXNwbGF5ZWQgdGFiLlxuXHQgKlxuXHQgKiBAcmV0dXJucyB7SW5uZXJDb250cm9sVHlwZSB8IHVuZGVmaW5lZH0gVGhlIGNvbnRyb2xcblx0ICovXG5cdGdldFNlbGVjdGVkSW5uZXJDb250cm9sKCk6IElubmVyQ29udHJvbFR5cGUgfCB1bmRlZmluZWQge1xuXHRcdGNvbnN0IG9TZWxlY3RlZFRhYiA9IHRoaXMuY29udGVudD8uZ2V0SXRlbXMoKS5maW5kKChvSXRlbSkgPT4gKG9JdGVtIGFzIEljb25UYWJGaWx0ZXIpLmdldEtleSgpID09PSB0aGlzLmNvbnRlbnQuZ2V0U2VsZWN0ZWRLZXkoKSk7XG5cdFx0cmV0dXJuIG9TZWxlY3RlZFRhYlxuXHRcdFx0PyB0aGlzLmdldEFsbElubmVyQ29udHJvbHMoKS5maW5kKChvTWFjcm9BUEkpID0+IHRoaXMuX2dldFRhYkZyb21Jbm5lckNvbnRyb2wob01hY3JvQVBJKSA9PT0gb1NlbGVjdGVkVGFiKVxuXHRcdFx0OiB1bmRlZmluZWQ7XG5cdH1cblxuXHQvKipcblx0ICogTWFuYWdlcyB0aGUgYmluZGluZyBvZiBhbGwgaW5uZXIgY29udHJvbHMgd2hlbiB0aGUgc2VsZWN0ZWQgSWNvblRhYkZpbHRlciBpcyBjaGFuZ2VkLlxuXHQgKlxuXHQgKiBAcGFyYW0ge3NhcC51aS5iYXNlLkV2ZW50fSBvRXZlbnQgRXZlbnQgZmlyZWQgYnkgdGhlIEljb25UYWJCYXJcblx0ICovXG5cdHN0YXRpYyBoYW5kbGVUYWJDaGFuZ2Uob0V2ZW50OiBhbnkpOiB2b2lkIHtcblx0XHRjb25zdCBvSWNvblRhYkJhciA9IG9FdmVudC5nZXRTb3VyY2UoKTtcblx0XHRjb25zdCBvTXVsdGlDb250cm9sID0gb0ljb25UYWJCYXIuZ2V0UGFyZW50KCk7XG5cblx0XHRjb25zdCBtUGFyYW1ldGVycyA9IG9FdmVudC5nZXRQYXJhbWV0ZXJzKCk7XG5cdFx0b011bHRpQ29udHJvbC5fc2V0SW5uZXJCaW5kaW5nKHRydWUpO1xuXHRcdGNvbnN0IHNQcmV2aW91c1NlbGVjdGVkS2V5ID0gbVBhcmFtZXRlcnM/LnByZXZpb3VzS2V5O1xuXHRcdGNvbnN0IHNTZWxlY3RlZEtleSA9IG1QYXJhbWV0ZXJzPy5zZWxlY3RlZEtleTtcblxuXHRcdGlmIChzU2VsZWN0ZWRLZXkgJiYgc1ByZXZpb3VzU2VsZWN0ZWRLZXkgIT09IHNTZWxlY3RlZEtleSkge1xuXHRcdFx0Y29uc3Qgb0ZpbHRlckJhciA9IG9NdWx0aUNvbnRyb2wuX2dldEZpbHRlckNvbnRyb2woKTtcblx0XHRcdGlmIChvRmlsdGVyQmFyICYmICFvTXVsdGlDb250cm9sLmdldFByb3BlcnR5KFwiZnJlZXplQ29udGVudFwiKSkge1xuXHRcdFx0XHRpZiAoIW9NdWx0aUNvbnRyb2wuZ2V0U2VsZWN0ZWRJbm5lckNvbnRyb2woKSkge1xuXHRcdFx0XHRcdC8vY3VzdG9tIHRhYlxuXHRcdFx0XHRcdG9NdWx0aUNvbnRyb2wuX3JlZnJlc2hDdXN0b21WaWV3KG9GaWx0ZXJCYXIuZ2V0RmlsdGVyQ29uZGl0aW9ucygpLCBcInRhYkNoYW5nZWRcIik7XG5cdFx0XHRcdH1cblx0XHRcdH1cblx0XHRcdENvbnRyb2xQZXJzb25hbGl6YXRpb25Xcml0ZUFQSS5hZGQoe1xuXHRcdFx0XHRjaGFuZ2VzOiBbXG5cdFx0XHRcdFx0e1xuXHRcdFx0XHRcdFx0Y2hhbmdlU3BlY2lmaWNEYXRhOiB7XG5cdFx0XHRcdFx0XHRcdGNoYW5nZVR5cGU6IFwic2VsZWN0SWNvblRhYkJhckZpbHRlclwiLFxuXHRcdFx0XHRcdFx0XHRjb250ZW50OiB7XG5cdFx0XHRcdFx0XHRcdFx0c2VsZWN0ZWRLZXk6IHNTZWxlY3RlZEtleSxcblx0XHRcdFx0XHRcdFx0XHRwcmV2aW91c1NlbGVjdGVkS2V5OiBzUHJldmlvdXNTZWxlY3RlZEtleVxuXHRcdFx0XHRcdFx0XHR9XG5cdFx0XHRcdFx0XHR9LFxuXHRcdFx0XHRcdFx0c2VsZWN0b3JFbGVtZW50OiBvSWNvblRhYkJhclxuXHRcdFx0XHRcdH1cblx0XHRcdFx0XVxuXHRcdFx0fSk7XG5cdFx0fVxuXG5cdFx0b011bHRpQ29udHJvbC5fZ2V0Vmlld0NvbnRyb2xsZXIoKT8uZ2V0RXh0ZW5zaW9uQVBJKCk/LnVwZGF0ZUFwcFN0YXRlKCk7XG5cblx0XHRvTXVsdGlDb250cm9sLmZpcmVFdmVudChcInNlbGVjdFwiLCB7XG5cdFx0XHRpY29uVGFiQmFyOiBvSWNvblRhYkJhcixcblx0XHRcdHNlbGVjdGVkS2V5OiBzU2VsZWN0ZWRLZXksXG5cdFx0XHRwcmV2aW91c0tleTogc1ByZXZpb3VzU2VsZWN0ZWRLZXlcblx0XHR9KTtcblx0fVxuXG5cdC8qKlxuXHQgKiBJbnZhbGlkYXRlcyB0aGUgY29udGVudCBvZiBhbGwgaW5uZXIgY29udHJvbHMuXG5cdCAqL1xuXHRpbnZhbGlkYXRlQ29udGVudCgpIHtcblx0XHR0aGlzLnNldENvdW50c091dERhdGVkKHRydWUpO1xuXHRcdHRoaXMuZ2V0QWxsSW5uZXJDb250cm9scygpLmZvckVhY2goKG9NYWNyb0FQSSkgPT4ge1xuXHRcdFx0b01hY3JvQVBJLmludmFsaWRhdGVDb250ZW50Py4oKTtcblx0XHR9KTtcblx0fVxuXG5cdC8qKlxuXHQgKiBTZXRzIHRoZSBjb3VudHMgdG8gb3V0IG9mIGRhdGUgb3IgdXAgdG8gZGF0ZVxuXHQgKiBJZiB0aGUgY291bnRzIGFyZSBzZXQgdG8gXCJvdXQgb2YgZGF0ZVwiIGFuZCB0aGUgc2VsZWN0ZWQgSWNvblRhYkZpbHRlciBkb2Vzbid0IGNvbnRhaW4gYW4gaW5uZXIgY29udHJvbCBhbGwgaW5uZXIgY29udHJvbHMgYXJlIHJlcXVlc3RlZCB0byBnZXQgdGhlIG5ldyBjb3VudHMuXG5cdCAqXG5cdCAqIEBwYXJhbSB7Ym9vbGVhbn0gYlZhbHVlIEZyZWV6ZSBvciBub3QgdGhlIGNvbnRyb2xcblx0ICovXG5cdHNldENvdW50c091dERhdGVkKGJWYWx1ZSA9IHRydWUpIHtcblx0XHR0aGlzLnNldFByb3BlcnR5KFwiY291bnRzT3V0RGF0ZWRcIiwgYlZhbHVlKTtcblx0XHQvLyBpZiB0aGUgY3VycmVudCB0YWIgaXMgbm90IGNvbmZpZ3VyZWQgd2l0aCBubyBpbm5lciBDb250cm9sXG5cdFx0Ly8gdGhlIHRhYiBjb3VudHMgbXVzdCBiZSBtYW51YWxseSByZWZyZXNoZWQgc2luY2Ugbm8gTWFjcm8gQVBJIHdpbGwgc2VudCBldmVudCBpbnRlcm5hbERhdGFSZXF1ZXN0ZWRcblx0XHRpZiAoYlZhbHVlICYmICF0aGlzLmdldFNlbGVjdGVkSW5uZXJDb250cm9sKCkpIHtcblx0XHRcdHRoaXMuX3JlZnJlc2hUYWJzQ291bnQoKTtcblx0XHR9XG5cdH1cblxuXHQvKipcblx0ICogRnJlZXplcyB0aGUgY29udGVudCA6XG5cdCAqICAtIGNvbnRlbnQgaXMgZnJvemVuOiB0aGUgYmluZGluZyBvZiB0aGUgaW5uZXIgY29udHJvbHMgYXJlIHN1c3BlbmRlZC5cblx0ICogIC0gY29udGVudCBpcyB1bmZyb3plbjogdGhlIGJpbmRpbmcgb2YgaW5uZXIgY29udHJvbCByZWxhdGVkIHRvIHRoZSBzZWxlY3RlZCBJY29uVGFiRmlsdGVyIGlzIHJlc3VtZWQuXG5cdCAqXG5cdCAqIEBwYXJhbSB7Ym9vbGVhbn0gYlZhbHVlIEZyZWV6ZSBvciBub3QgdGhlIGNvbnRyb2xcblx0ICovXG5cdHNldEZyZWV6ZUNvbnRlbnQoYlZhbHVlOiBib29sZWFuKSB7XG5cdFx0dGhpcy5zZXRQcm9wZXJ0eShcImZyZWV6ZUNvbnRlbnRcIiwgYlZhbHVlKTtcblx0XHR0aGlzLl9zZXRJbm5lckJpbmRpbmcoKTtcblx0fVxuXG5cdC8qKlxuXHQgKiBVcGRhdGVzIHRoZSBpbnRlcm5hbCBtb2RlbCB3aXRoIHRoZSBwcm9wZXJ0aWVzIHRoYXQgYXJlIG5vdCBhcHBsaWNhYmxlIG9uIGVhY2ggSWNvblRhYkZpbHRlciAoY29udGFpbmluZyBpbm5lciBjb250cm9sKSBhY2NvcmRpbmcgdG8gdGhlIGVudGl0eVR5cGUgb2YgdGhlIGZpbHRlciBjb250cm9sLlxuXHQgKlxuXHQgKiBAcGFyYW0gb1Jlc291cmNlQnVuZGxlXG5cdCAqL1xuXHRfdXBkYXRlTXVsdGlUYWJOb3RBcHBsaWNhYmxlRmllbGRzKG9SZXNvdXJjZUJ1bmRsZTogUmVzb3VyY2VCdW5kbGUpIHtcblx0XHRjb25zdCB0YWJzTW9kZWwgPSB0aGlzLmdldFRhYnNNb2RlbCgpO1xuXHRcdGNvbnN0IG9GaWx0ZXJDb250cm9sID0gdGhpcy5fZ2V0RmlsdGVyQ29udHJvbCgpIGFzIENvbnRyb2w7XG5cdFx0aWYgKHRhYnNNb2RlbCAmJiBvRmlsdGVyQ29udHJvbCkge1xuXHRcdFx0Y29uc3QgcmVzdWx0czogYW55ID0ge307XG5cdFx0XHR0aGlzLmdldEFsbElubmVyQ29udHJvbHMoKS5mb3JFYWNoKChvTWFjcm9BUEkpID0+IHtcblx0XHRcdFx0Y29uc3Qgb1RhYiA9IHRoaXMuX2dldFRhYkZyb21Jbm5lckNvbnRyb2wob01hY3JvQVBJKTtcblx0XHRcdFx0aWYgKG9UYWIpIHtcblx0XHRcdFx0XHRjb25zdCBzVGFiSWQgPSBvVGFiLmdldEtleSgpO1xuXHRcdFx0XHRcdGNvbnN0IG1JZ25vcmVkRmllbGRzID0gb01hY3JvQVBJLnJlZnJlc2hOb3RBcHBsaWNhYmxlRmllbGRzPy4ob0ZpbHRlckNvbnRyb2wpIHx8IFtdO1xuXHRcdFx0XHRcdHJlc3VsdHNbc1RhYklkXSA9IHtcblx0XHRcdFx0XHRcdG5vdEFwcGxpY2FibGU6IHtcblx0XHRcdFx0XHRcdFx0ZmllbGRzOiBtSWdub3JlZEZpZWxkcyxcblx0XHRcdFx0XHRcdFx0dGl0bGU6IHRoaXMuX3NldFRhYk1lc3NhZ2VTdHJpcCh7XG5cdFx0XHRcdFx0XHRcdFx0ZW50aXR5VHlwZVBhdGg6IG9GaWx0ZXJDb250cm9sLmRhdGEoXCJlbnRpdHlUeXBlXCIpLFxuXHRcdFx0XHRcdFx0XHRcdGlnbm9yZWRGaWVsZHM6IG1JZ25vcmVkRmllbGRzLFxuXHRcdFx0XHRcdFx0XHRcdHJlc291cmNlQnVuZGxlOiBvUmVzb3VyY2VCdW5kbGUsXG5cdFx0XHRcdFx0XHRcdFx0dGl0bGU6IG9UYWIuZ2V0VGV4dCgpXG5cdFx0XHRcdFx0XHRcdH0pXG5cdFx0XHRcdFx0XHR9XG5cdFx0XHRcdFx0fTtcblx0XHRcdFx0fVxuXHRcdFx0fSk7XG5cdFx0XHQodGFic01vZGVsIGFzIGFueSkuc2V0RGF0YShyZXN1bHRzKTtcblx0XHR9XG5cdH1cblxuXHQvKipcblx0ICogR2V0cyB0aGUgaW5uZXIgY29udHJvbHMuXG5cdCAqXG5cdCAqIEBwYXJhbSB7Ym9vbGVhbn0gYk9ubHlGb3JWaXNpYmxlVGFiIFNob3VsZCBkaXNwbGF5IG9ubHkgdGhlIHZpc2libGUgY29udHJvbHNcblx0ICogQHJldHVybnMge0lubmVyQ29udHJvbFR5cGVbXX0gQW4gYXJyYXkgb2YgY29udHJvbHNcblx0ICovXG5cdGdldEFsbElubmVyQ29udHJvbHMoYk9ubHlGb3JWaXNpYmxlVGFiID0gZmFsc2UpOiBJbm5lckNvbnRyb2xUeXBlW10ge1xuXHRcdHJldHVybiAoXG5cdFx0XHR0aGlzLmlubmVyQ29udHJvbHMucmVkdWNlKChhSW5uZXJDb250cm9sczogSW5uZXJDb250cm9sVHlwZVtdLCBzSW5uZXJDb250cm9sOiBzdHJpbmcpID0+IHtcblx0XHRcdFx0Y29uc3Qgb0NvbnRyb2wgPSBDb3JlLmJ5SWQoc0lubmVyQ29udHJvbCkgYXMgSW5uZXJDb250cm9sVHlwZTtcblx0XHRcdFx0aWYgKG9Db250cm9sKSB7XG5cdFx0XHRcdFx0YUlubmVyQ29udHJvbHMucHVzaChvQ29udHJvbCk7XG5cdFx0XHRcdH1cblx0XHRcdFx0cmV0dXJuIGFJbm5lckNvbnRyb2xzLmZpbHRlcihcblx0XHRcdFx0XHQob0lubmVyQ29udHJvbCkgPT4gIWJPbmx5Rm9yVmlzaWJsZVRhYiB8fCB0aGlzLl9nZXRUYWJGcm9tSW5uZXJDb250cm9sKG9Jbm5lckNvbnRyb2wpPy5nZXRWaXNpYmxlKClcblx0XHRcdFx0KTtcblx0XHRcdH0sIFtdKSB8fCBbXVxuXHRcdCk7XG5cdH1cblxuXHRfZ2V0RmlsdGVyQ29udHJvbCgpOiBGaWx0ZXJCYXIgfCB1bmRlZmluZWQge1xuXHRcdHJldHVybiBDb3JlLmJ5SWQodGhpcy5maWx0ZXJDb250cm9sKSBhcyBGaWx0ZXJCYXIgfCB1bmRlZmluZWQ7XG5cdH1cblxuXHRfZ2V0VGFiRnJvbUlubmVyQ29udHJvbChvQ29udHJvbDogQ29udHJvbCk6IEljb25UYWJGaWx0ZXIgfCB1bmRlZmluZWQge1xuXHRcdGNvbnN0IHNTdXBwb3J0ZWRDbGFzcyA9IEljb25UYWJGaWx0ZXIuZ2V0TWV0YWRhdGEoKS5nZXROYW1lKCk7XG5cdFx0bGV0IG9UYWI6IGFueSA9IG9Db250cm9sO1xuXHRcdGlmIChvVGFiICYmICFvVGFiLmlzQShzU3VwcG9ydGVkQ2xhc3MpICYmIG9UYWIuZ2V0UGFyZW50KSB7XG5cdFx0XHRvVGFiID0gb0NvbnRyb2wuZ2V0UGFyZW50KCk7XG5cdFx0fVxuXHRcdHJldHVybiBvVGFiICYmIG9UYWIuaXNBKHNTdXBwb3J0ZWRDbGFzcykgPyAob1RhYiBhcyBJY29uVGFiRmlsdGVyKSA6IHVuZGVmaW5lZDtcblx0fVxuXG5cdF9nZXRWaWV3Q29udHJvbGxlcigpIHtcblx0XHRjb25zdCBvVmlldyA9IENvbW1vblV0aWxzLmdldFRhcmdldFZpZXcodGhpcyk7XG5cdFx0cmV0dXJuIG9WaWV3ICYmIG9WaWV3LmdldENvbnRyb2xsZXIoKTtcblx0fVxuXG5cdF9yZWZyZXNoQ3VzdG9tVmlldyhvRmlsdGVyQ29uZGl0aW9uczogYW55LCBzUmVmcmVzaENhdXNlOiBzdHJpbmcpIHtcblx0XHQodGhpcy5fZ2V0Vmlld0NvbnRyb2xsZXIoKSBhcyBhbnkpPy5vblZpZXdOZWVkc1JlZnJlc2g/Lih7XG5cdFx0XHRmaWx0ZXJDb25kaXRpb25zOiBvRmlsdGVyQ29uZGl0aW9ucyxcblx0XHRcdGN1cnJlbnRUYWJJZDogdGhpcy5jb250ZW50LmdldFNlbGVjdGVkS2V5KCksXG5cdFx0XHRyZWZyZXNoQ2F1c2U6IHNSZWZyZXNoQ2F1c2Vcblx0XHR9KTtcblx0fVxuXG5cdF9yZWZyZXNoVGFic0NvdW50KHRhYmxlRXZlbnQ/OiBDb3JlRXZlbnQpOiB2b2lkIHtcblx0XHQvLyBJZiB0aGUgcmVmcmVzaCBpcyB0cmlnZ2VyZWQgYnkgYW4gZXZlbnQgKGludGVybmFsRGF0YVJlcXVlc3RlZClcblx0XHQvLyB3ZSBjYW5ub3QgdXNlIHRoZSBzZWxlY3RlZCBrZXkgYXMgcmVmZXJlbmNlIHNpbmNlIHRhYmxlIGNhbiBiZSByZWZyZXNoZWQgYnkgU2lkZUVmZmVjdHNcblx0XHQvLyBzbyB0aGUgdGFibGUgY291bGQgYmUgaW50byBhIGRpZmZlcmVudCB0YWIgLT4gd2UgdXNlIHRoZSBzb3VyY2Ugb2YgdGhlIGV2ZW50IHRvIGZpbmQgdGhlIHRhcmdldGVkIHRhYlxuXHRcdC8vIElmIG5vdCB0cmlnZ2VyZWQgYnkgYW4gZXZlbnQgLT4gcmVmcmVzaCBhdCBsZWFzdCB0aGUgY291bnRzIG9mIHRoZSBjdXJyZW50IE1hY3JvQVBJXG5cdFx0Ly8gSW4gYW55IGNhc2UgaWYgdGhlIGNvdW50cyBhcmUgc2V0IHRvIE91dGRhdGVkIGZvciB0aGUgTXVsdGlwbGVNb2RlQ29udHJvbCBhbGwgdGhlIGNvdW50cyBhcmUgcmVmcmVzaGVkXG5cdFx0Y29uc3QgZXZlbnRNYWNyb0FQSSA9IHRhYmxlRXZlbnQ/LmdldFNvdXJjZSgpIGFzIE1hY3JvQVBJO1xuXHRcdGNvbnN0IHRhcmdldEtleSA9IGV2ZW50TWFjcm9BUEkgPyB0aGlzLl9nZXRUYWJGcm9tSW5uZXJDb250cm9sKGV2ZW50TWFjcm9BUEkpPy5nZXRLZXkoKSA6IHRoaXMuY29udGVudD8uZ2V0U2VsZWN0ZWRLZXkoKTtcblxuXHRcdHRoaXMuZ2V0QWxsSW5uZXJDb250cm9scyh0cnVlKS5mb3JFYWNoKChvTWFjcm9BUEkpID0+IHtcblx0XHRcdGNvbnN0IG9JY29uVGFiRmlsdGVyID0gdGhpcy5fZ2V0VGFiRnJvbUlubmVyQ29udHJvbChvTWFjcm9BUEkpO1xuXHRcdFx0aWYgKG9NYWNyb0FQST8uZ2V0Q291bnRzICYmICh0aGlzLmNvdW50c091dERhdGVkIHx8IHRhcmdldEtleSA9PT0gb0ljb25UYWJGaWx0ZXI/LmdldEtleSgpKSkge1xuXHRcdFx0XHRpZiAob0ljb25UYWJGaWx0ZXIgJiYgb0ljb25UYWJGaWx0ZXIuc2V0Q291bnQpIHtcblx0XHRcdFx0XHRvSWNvblRhYkZpbHRlci5zZXRDb3VudChcIi4uLlwiKTtcblx0XHRcdFx0XHRvTWFjcm9BUElcblx0XHRcdFx0XHRcdC5nZXRDb3VudHMoKVxuXHRcdFx0XHRcdFx0LnRoZW4oKGlDb3VudDogc3RyaW5nKSA9PiBvSWNvblRhYkZpbHRlci5zZXRDb3VudChpQ291bnQgfHwgXCIwXCIpKVxuXHRcdFx0XHRcdFx0LmNhdGNoKGZ1bmN0aW9uIChvRXJyb3I6IGFueSkge1xuXHRcdFx0XHRcdFx0XHRMb2cuZXJyb3IoXCJFcnJvciB3aGlsZSByZXF1ZXN0aW5nIENvdW50cyBmb3IgQ29udHJvbFwiLCBvRXJyb3IpO1xuXHRcdFx0XHRcdFx0fSk7XG5cdFx0XHRcdH1cblx0XHRcdH1cblx0XHR9KTtcblx0XHR0aGlzLnNldENvdW50c091dERhdGVkKGZhbHNlKTtcblx0fVxuXG5cdF9zZXRJbm5lckJpbmRpbmcoYlJlcXVlc3RJZk5vdEluaXRpYWxpemVkID0gZmFsc2UpIHtcblx0XHRpZiAodGhpcy5jb250ZW50KSB7XG5cdFx0XHR0aGlzLmdldEFsbElubmVyQ29udHJvbHMoKS5mb3JFYWNoKChvTWFjcm9BUEkpID0+IHtcblx0XHRcdFx0Y29uc3Qgb0ljb25UYWJGaWx0ZXIgPSB0aGlzLl9nZXRUYWJGcm9tSW5uZXJDb250cm9sKG9NYWNyb0FQSSk7XG5cdFx0XHRcdGNvbnN0IGJJc1NlbGVjdGVkS2V5ID0gb0ljb25UYWJGaWx0ZXI/LmdldEtleSgpID09PSB0aGlzLmNvbnRlbnQuZ2V0U2VsZWN0ZWRLZXkoKTtcblx0XHRcdFx0Y29uc3Qgc0FjdGlvbiA9IGJJc1NlbGVjdGVkS2V5ICYmICF0aGlzLmdldFByb3BlcnR5KFwiZnJlZXplQ29udGVudFwiKSA/IEJpbmRpbmdBY3Rpb24uUmVzdW1lIDogQmluZGluZ0FjdGlvbi5TdXNwZW5kO1xuXHRcdFx0XHRvTWFjcm9BUElbc0FjdGlvbl0/LihzQWN0aW9uID09PSBCaW5kaW5nQWN0aW9uLlJlc3VtZSA/IGJSZXF1ZXN0SWZOb3RJbml0aWFsaXplZCAmJiBiSXNTZWxlY3RlZEtleSA6IHVuZGVmaW5lZCk7XG5cdFx0XHR9KTtcblx0XHR9XG5cdH1cblxuXHRfc2V0VGFiTWVzc2FnZVN0cmlwKHByb3BlcnRpZXM6IE1lc3NhZ2VTdHJpcFByb3BlcnRpZXMpIHtcblx0XHRsZXQgc1RleHQgPSBcIlwiO1xuXHRcdGNvbnN0IGFJZ25vcmVkRmllbGRzID0gcHJvcGVydGllcy5pZ25vcmVkRmllbGRzO1xuXHRcdGNvbnN0IG9GaWx0ZXJDb250cm9sID0gdGhpcy5fZ2V0RmlsdGVyQ29udHJvbCgpIGFzIENvbnRyb2w7XG5cdFx0aWYgKG9GaWx0ZXJDb250cm9sICYmIEFycmF5LmlzQXJyYXkoYUlnbm9yZWRGaWVsZHMpICYmIGFJZ25vcmVkRmllbGRzLmxlbmd0aCA+IDAgJiYgcHJvcGVydGllcy50aXRsZSkge1xuXHRcdFx0Y29uc3QgYUlnbm9yZWRMYWJlbHMgPSBNZXNzYWdlU3RyaXAuZ2V0TGFiZWxzKFxuXHRcdFx0XHRhSWdub3JlZEZpZWxkcyxcblx0XHRcdFx0cHJvcGVydGllcy5lbnRpdHlUeXBlUGF0aCxcblx0XHRcdFx0b0ZpbHRlckNvbnRyb2wsXG5cdFx0XHRcdHByb3BlcnRpZXMucmVzb3VyY2VCdW5kbGVcblx0XHRcdCk7XG5cdFx0XHRzVGV4dCA9IE1lc3NhZ2VTdHJpcC5nZXRUZXh0KGFJZ25vcmVkTGFiZWxzLCBvRmlsdGVyQ29udHJvbCwgcHJvcGVydGllcy50aXRsZSwgRGVsZWdhdGVVdGlsLmdldExvY2FsaXplZFRleHQpO1xuXHRcdFx0cmV0dXJuIHNUZXh0O1xuXHRcdH1cblx0fVxuXG5cdF9vblNlYXJjaChvRXZlbnQ6IENvcmVFdmVudCk6IHZvaWQge1xuXHRcdHRoaXMuc2V0Q291bnRzT3V0RGF0ZWQodHJ1ZSk7XG5cdFx0dGhpcy5zZXRGcmVlemVDb250ZW50KGZhbHNlKTtcblx0XHRpZiAodGhpcy5nZXRTZWxlY3RlZElubmVyQ29udHJvbCgpKSB7XG5cdFx0XHR0aGlzLl91cGRhdGVNdWx0aVRhYk5vdEFwcGxpY2FibGVGaWVsZHMoKHRoaXMuX2dldFZpZXdDb250cm9sbGVyKCkgYXMgYW55KT8ub1Jlc291cmNlQnVuZGxlKTtcblx0XHR9IGVsc2Uge1xuXHRcdFx0Ly8gY3VzdG9tIHRhYlxuXHRcdFx0dGhpcy5fcmVmcmVzaEN1c3RvbVZpZXcob0V2ZW50LmdldFBhcmFtZXRlcihcImNvbmRpdGlvbnNcIiksIFwic2VhcmNoXCIpO1xuXHRcdH1cblx0fVxuXG5cdF9vbkZpbHRlckNoYW5nZWQob0V2ZW50OiBDb3JlRXZlbnQpOiB2b2lkIHtcblx0XHRpZiAob0V2ZW50LmdldFBhcmFtZXRlcihcImNvbmRpdGlvbnNCYXNlZFwiKSkge1xuXHRcdFx0dGhpcy5zZXRGcmVlemVDb250ZW50KHRydWUpO1xuXHRcdH1cblx0fVxufVxuXG5leHBvcnQgZGVmYXVsdCBNdWx0aXBsZU1vZGVDb250cm9sO1xuIl0sIm1hcHBpbmdzIjoiO0FBQUE7QUFBQTtBQUFBOzs7Ozs7Ozs7Ozs7Ozs7O01Ba0NLQSxhQUFhO0VBQUEsV0FBYkEsYUFBYTtJQUFiQSxhQUFhO0lBQWJBLGFBQWE7RUFBQSxHQUFiQSxhQUFhLEtBQWJBLGFBQWE7RUFBQSxJQU1aQyxtQkFBbUIsV0FEeEJDLGNBQWMsQ0FBQywwREFBMEQsQ0FBQyxVQUV6RUMsUUFBUSxDQUFDO0lBQUVDLElBQUksRUFBRTtFQUFVLENBQUMsQ0FBQyxVQUc3QkQsUUFBUSxDQUFDO0lBQUVDLElBQUksRUFBRSxTQUFTO0lBQUVDLFlBQVksRUFBRTtFQUFNLENBQUMsQ0FBQyxVQUdsREYsUUFBUSxDQUFDO0lBQUVDLElBQUksRUFBRSxTQUFTO0lBQUVDLFlBQVksRUFBRTtFQUFNLENBQUMsQ0FBQyxVQUdsREMsV0FBVyxDQUFDO0lBQUVGLElBQUksRUFBRSxrQkFBa0I7SUFBRUcsUUFBUSxFQUFFLEtBQUs7SUFBRUMsU0FBUyxFQUFFO0VBQUssQ0FBQyxDQUFDLFVBRzNFQyxXQUFXLENBQUM7SUFBRUwsSUFBSSxFQUFFLHFCQUFxQjtJQUFFRyxRQUFRLEVBQUU7RUFBSyxDQUFDLENBQUMsVUFHNURFLFdBQVcsQ0FBQztJQUFFTCxJQUFJLEVBQUUsZ0NBQWdDO0lBQUVHLFFBQVEsRUFBRTtFQUFNLENBQUMsQ0FBQyxVQUd4RUcsS0FBSyxF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
|