@sapui5/sap.fe.templates 1.103.0 → 1.106.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 +5 -6
- package/src/sap/fe/templates/.library +1 -1
- package/src/sap/fe/templates/AnalyticalListPage/Component.js +2 -2
- package/src/sap/fe/templates/AnalyticalListPage/chart/FEChartDelegate.js +2 -2
- package/src/sap/fe/templates/AnalyticalListPage/chart/FEChartDelegate.ts +1 -1
- package/src/sap/fe/templates/Feedback.js +1 -1
- package/src/sap/fe/templates/Feedback.ts +0 -3
- package/src/sap/fe/templates/ListComponent.js +2 -2
- package/src/sap/fe/templates/ListReport/Component.js +2 -2
- package/src/sap/fe/templates/ListReport/ExtensionAPI.js +5 -3
- package/src/sap/fe/templates/ListReport/ExtensionAPI.ts +2 -1
- package/src/sap/fe/templates/ListReport/ListReport.view.xml +12 -86
- package/src/sap/fe/templates/ListReport/ListReportController.controller.js +90 -429
- package/src/sap/fe/templates/ListReport/ListReportController.controller.ts +81 -392
- package/src/sap/fe/templates/ListReport/ListReportTemplating.js +1 -1
- package/src/sap/fe/templates/ListReport/controls/MultipleModeControl.js +459 -0
- package/src/sap/fe/templates/ListReport/controls/MultipleModeControl.ts +338 -0
- package/src/sap/fe/templates/ListReport/overrides/IntentBasedNavigation.js +16 -9
- package/src/sap/fe/templates/ListReport/overrides/IntentBasedNavigation.ts +15 -9
- package/src/sap/fe/templates/ListReport/overrides/Share.js +4 -12
- package/src/sap/fe/templates/ListReport/overrides/Share.ts +4 -12
- package/src/sap/fe/templates/ListReport/overrides/ViewState.js +23 -31
- package/src/sap/fe/templates/ListReport/overrides/ViewState.ts +27 -31
- package/src/sap/fe/templates/ListReport/view/fragments/Chart.fragment.xml +3 -0
- package/src/sap/fe/templates/ListReport/view/fragments/CollectionVisualization.fragment.xml +16 -5
- package/src/sap/fe/templates/{controls → ListReport/view/fragments}/MacroChart.fragment.xml +3 -2
- package/src/sap/fe/templates/ListReport/view/fragments/MultipleMode.fragment.js +20 -4
- package/src/sap/fe/templates/ListReport/view/fragments/MultipleMode.fragment.ts +80 -48
- package/src/sap/fe/templates/{controls → ListReport/view/fragments}/Table.fragment.xml +6 -6
- package/src/sap/fe/templates/ListReport/view/fragments/VariantManagement.fragment.xml +31 -0
- package/src/sap/fe/templates/ObjectPage/Component.js +9 -9
- package/src/sap/fe/templates/ObjectPage/Component.ts +10 -6
- package/src/sap/fe/templates/ObjectPage/ExtensionAPI.js +25 -12
- package/src/sap/fe/templates/ObjectPage/ExtensionAPI.ts +18 -5
- package/src/sap/fe/templates/ObjectPage/ObjectPage.view.xml +60 -151
- package/src/sap/fe/templates/ObjectPage/ObjectPageController.controller.js +195 -140
- package/src/sap/fe/templates/ObjectPage/ObjectPageController.controller.ts +103 -93
- package/src/sap/fe/templates/ObjectPage/ObjectPageTemplating.js +52 -22
- package/src/sap/fe/templates/ObjectPage/ObjectPageTemplating.ts +46 -25
- package/src/sap/fe/templates/ObjectPage/components/DraftHandlerButton.js +178 -0
- package/src/sap/fe/templates/ObjectPage/components/DraftHandlerButton.tsx +132 -0
- package/src/sap/fe/templates/ObjectPage/controls/StashableHBox.js +2 -2
- package/src/sap/fe/templates/ObjectPage/controls/StashableVBox.js +2 -2
- package/src/sap/fe/templates/ObjectPage/controls/SubSectionBlock.js +2 -2
- package/src/sap/fe/templates/ObjectPage/designtime/FlexBox.designtime.js +1 -1
- package/src/sap/fe/templates/ObjectPage/designtime/StashableHBox.designtime.js +1 -1
- package/src/sap/fe/templates/ObjectPage/designtime/StashableVBox.designtime.js +1 -1
- package/src/sap/fe/templates/ObjectPage/flexibility/StashableHBox.flexibility.js +1 -1
- package/src/sap/fe/templates/ObjectPage/flexibility/StashableVBox.flexibility.js +1 -1
- package/src/sap/fe/templates/ObjectPage/overrides/IntentBasedNavigation.js +1 -1
- package/src/sap/fe/templates/ObjectPage/overrides/IntentBasedNavigation.ts +1 -1
- package/src/sap/fe/templates/ObjectPage/overrides/InternalRouting.js +1 -1
- package/src/sap/fe/templates/ObjectPage/overrides/MessageHandler.js +1 -1
- package/src/sap/fe/templates/ObjectPage/overrides/Paginator.js +1 -1
- package/src/sap/fe/templates/ObjectPage/overrides/Share.js +55 -29
- package/src/sap/fe/templates/ObjectPage/overrides/Share.ts +28 -29
- package/src/sap/fe/templates/ObjectPage/overrides/ViewState.js +1 -1
- package/src/sap/fe/templates/ObjectPage/view/fragments/Actions.fragment.xml +62 -62
- package/src/sap/fe/templates/ObjectPage/view/fragments/Chart.fragment.xml +13 -0
- package/src/sap/fe/templates/ObjectPage/view/fragments/EditableHeaderFacet.fragment.xml +10 -8
- package/src/sap/fe/templates/ObjectPage/view/fragments/FooterContent.fragment.xml +1 -1
- package/src/sap/fe/templates/ObjectPage/view/fragments/FormActionButtons.fragment.xml +5 -1
- package/src/sap/fe/templates/ObjectPage/view/fragments/HeaderDataPoint.fragment.xml +1 -1
- package/src/sap/fe/templates/ObjectPage/view/fragments/Heading.fragment.xml +2 -2
- package/src/sap/fe/templates/ObjectPage/view/fragments/HeadingTitle.fragment.xml +11 -6
- package/src/sap/fe/templates/ObjectPage/view/fragments/MacroChart.fragment.xml +22 -0
- package/src/sap/fe/templates/ObjectPage/view/fragments/ObjectPageHeaderForm.fragment.xml +7 -2
- package/src/sap/fe/templates/ObjectPage/view/fragments/Section.fragment.xml +8 -49
- package/src/sap/fe/templates/ObjectPage/view/fragments/SectionPresentationVisualization.fragment.xml +1 -1
- package/src/sap/fe/templates/ObjectPage/view/fragments/Table.fragment.xml +23 -0
- package/src/sap/fe/templates/RootContainer/controller/Fcl.controller.js +2 -2
- package/src/sap/fe/templates/RootContainer/controller/NavContainer.controller.js +2 -2
- package/src/sap/fe/templates/RootContainer/controller/RootContainerBaseController.js +5 -5
- package/src/sap/fe/templates/RootContainer/controller/RootContainerBaseController.ts +3 -3
- package/src/sap/fe/templates/RootContainer/overrides/EditFlow.js +1 -1
- package/src/sap/fe/templates/TableScroller.js +1 -1
- package/src/sap/fe/templates/library.js +4 -3
- package/src/sap/fe/templates/library.ts +2 -0
- package/src/sap/fe/templates/messagebundle.properties +2 -5
- package/src/sap/fe/templates/messagebundle_ar.properties +3 -12
- package/src/sap/fe/templates/messagebundle_bg.properties +2 -11
- package/src/sap/fe/templates/messagebundle_ca.properties +2 -11
- package/src/sap/fe/templates/messagebundle_cs.properties +3 -12
- package/src/sap/fe/templates/messagebundle_cy.properties +2 -11
- package/src/sap/fe/templates/messagebundle_da.properties +3 -12
- package/src/sap/fe/templates/messagebundle_de.properties +2 -11
- package/src/sap/fe/templates/messagebundle_el.properties +2 -11
- package/src/sap/fe/templates/messagebundle_en.properties +2 -11
- package/src/sap/fe/templates/messagebundle_en_GB.properties +2 -11
- package/src/sap/fe/templates/messagebundle_en_US_sappsd.properties +2 -11
- package/src/sap/fe/templates/messagebundle_en_US_saprigi.properties +2 -11
- package/src/sap/fe/templates/messagebundle_en_US_saptrc.properties +2 -11
- package/src/sap/fe/templates/messagebundle_es.properties +0 -9
- package/src/sap/fe/templates/messagebundle_es_MX.properties +2 -11
- package/src/sap/fe/templates/messagebundle_et.properties +0 -9
- package/src/sap/fe/templates/messagebundle_fi.properties +2 -11
- package/src/sap/fe/templates/messagebundle_fr.properties +3 -12
- package/src/sap/fe/templates/messagebundle_fr_CA.properties +2 -11
- package/src/sap/fe/templates/messagebundle_hi.properties +2 -11
- package/src/sap/fe/templates/messagebundle_hr.properties +2 -11
- package/src/sap/fe/templates/messagebundle_hu.properties +2 -11
- package/src/sap/fe/templates/messagebundle_id.properties +2 -11
- package/src/sap/fe/templates/messagebundle_it.properties +2 -11
- package/src/sap/fe/templates/messagebundle_iw.properties +2 -11
- package/src/sap/fe/templates/messagebundle_ja.properties +2 -11
- package/src/sap/fe/templates/messagebundle_kk.properties +2 -11
- package/src/sap/fe/templates/messagebundle_ko.properties +2 -11
- package/src/sap/fe/templates/messagebundle_lt.properties +2 -11
- package/src/sap/fe/templates/messagebundle_lv.properties +2 -11
- package/src/sap/fe/templates/messagebundle_ms.properties +2 -11
- package/src/sap/fe/templates/messagebundle_nl.properties +2 -11
- package/src/sap/fe/templates/messagebundle_no.properties +0 -9
- package/src/sap/fe/templates/messagebundle_pl.properties +0 -9
- package/src/sap/fe/templates/messagebundle_pt.properties +2 -11
- package/src/sap/fe/templates/messagebundle_pt_PT.properties +2 -11
- package/src/sap/fe/templates/messagebundle_ro.properties +0 -9
- package/src/sap/fe/templates/messagebundle_ru.properties +2 -11
- package/src/sap/fe/templates/messagebundle_sh.properties +2 -11
- package/src/sap/fe/templates/messagebundle_sk.properties +2 -11
- package/src/sap/fe/templates/messagebundle_sl.properties +2 -11
- package/src/sap/fe/templates/messagebundle_sv.properties +2 -11
- package/src/sap/fe/templates/messagebundle_th.properties +1 -10
- package/src/sap/fe/templates/messagebundle_tr.properties +2 -11
- package/src/sap/fe/templates/messagebundle_uk.properties +2 -11
- package/src/sap/fe/templates/messagebundle_vi.properties +0 -9
- package/src/sap/fe/templates/messagebundle_zh_CN.properties +0 -9
- package/src/sap/fe/templates/messagebundle_zh_TW.properties +2 -11
- package/src/sap/fe/templates/ListReport/view/fragments/MultipleModeOld.fragment.xml +0 -50
- package/src/sap/fe/templates/ObjectPage/handler/DraftHandler.js +0 -103
- package/src/sap/fe/templates/ObjectPage/handler/DraftHandler.ts +0 -97
- package/src/sap/fe/templates/ObjectPage/view/fragments/SwitchDraftAndActiveObjectPopOver.fragment.xml +0 -27
- package/src/sap/fe/templates/controls/Chart.fragment.xml +0 -25
|
@@ -42,4 +42,4 @@ sap.ui.define(["sap/fe/core/helpers/StableIdHelper"], function (StableIdHelper)
|
|
|
42
42
|
_exports.getDefaultPath = getDefaultPath;
|
|
43
43
|
return _exports;
|
|
44
44
|
}, false);
|
|
45
|
-
//# sourceMappingURL=data:application/json;charset=utf-8;base64,
|
|
45
|
+
//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJuYW1lcyI6WyJnZXRWYXJpYW50QmFja1JlZmVyZW5jZSIsIm9WaWV3RGF0YSIsIm9Db252ZXJ0ZXJDb250ZXh0IiwidmFyaWFudE1hbmFnZW1lbnQiLCJnZW5lcmF0ZSIsImZpbHRlckJhcklkIiwidW5kZWZpbmVkIiwiZ2V0RGVmYXVsdFBhdGgiLCJhVmlld3MiLCJpIiwibGVuZ3RoIiwiZGVmYXVsdFBhdGgiXSwic291cmNlUm9vdCI6Ii4iLCJzb3VyY2VzIjpbIkxpc3RSZXBvcnRUZW1wbGF0aW5nLnRzIl0sInNvdXJjZXNDb250ZW50IjpbIi8vIFRlbXBsYXRlIEhlbHBlcnMgZm9yIHRoZSBMaXN0IFJlcG9ydFxuaW1wb3J0IHsgZ2VuZXJhdGUgfSBmcm9tIFwic2FwL2ZlL2NvcmUvaGVscGVycy9TdGFibGVJZEhlbHBlclwiO1xuXG4vKipcbiAqIE1ldGhvZCByZXR1cm5zIGFuIFZhcmlhbnRCYWNrUmVmZXJlbmNlIGV4cHJlc3Npb24gYmFzZWQgb24gdmFyaWFudE1hbmFnZW1lbnQgYW5kIG9Db252ZXJ0ZXJDb250ZXh0IHZhbHVlLlxuICpcbiAqIEBmdW5jdGlvblxuICogQG5hbWUgZ2V0VmFyaWFudEJhY2tSZWZlcmVuY2VcbiAqIEBwYXJhbSB7b2JqZWN0fSBvVmlld0RhdGEgT2JqZWN0IENvbnRhaW5pbmcgVmlldyBEYXRhXG4gKiBAcGFyYW0ge29iamVjdH0gb0NvbnZlcnRlckNvbnRleHQgT2JqZWN0IGNvbnRhaW5pbmcgY29udmVydGVkIGNvbnRleHRcbiAqIEByZXR1cm5zIHtzdHJpbmd9XG4gKi9cblxuZXhwb3J0IGNvbnN0IGdldFZhcmlhbnRCYWNrUmVmZXJlbmNlID0gZnVuY3Rpb24gKG9WaWV3RGF0YTogYW55LCBvQ29udmVydGVyQ29udGV4dDogYW55KSB7XG5cdGlmIChvVmlld0RhdGEgJiYgb1ZpZXdEYXRhLnZhcmlhbnRNYW5hZ2VtZW50ID09PSBcIlBhZ2VcIikge1xuXHRcdHJldHVybiBcImZlOjpQYWdlVmFyaWFudE1hbmFnZW1lbnRcIjtcblx0fVxuXHRpZiAob1ZpZXdEYXRhICYmIG9WaWV3RGF0YS52YXJpYW50TWFuYWdlbWVudCA9PT0gXCJDb250cm9sXCIpIHtcblx0XHRyZXR1cm4gZ2VuZXJhdGUoW29Db252ZXJ0ZXJDb250ZXh0LmZpbHRlckJhcklkLCBcIlZhcmlhbnRNYW5hZ2VtZW50XCJdKTtcblx0fVxuXHRyZXR1cm4gdW5kZWZpbmVkO1xufTtcblxuZXhwb3J0IGNvbnN0IGdldERlZmF1bHRQYXRoID0gZnVuY3Rpb24gKGFWaWV3czogYW55KSB7XG5cdGZvciAobGV0IGkgPSAwOyBpIDwgYVZpZXdzLmxlbmd0aDsgaSsrKSB7XG5cdFx0aWYgKGFWaWV3c1tpXS5kZWZhdWx0UGF0aCkge1xuXHRcdFx0cmV0dXJuIGFWaWV3c1tpXS5kZWZhdWx0UGF0aDtcblx0XHR9XG5cdH1cbn07XG4iXSwibWFwcGluZ3MiOiI7QUFBQTtBQUFBO0FBQUE7Ozs7Ozs7RUFHQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7RUFFTyxJQUFNQSx1QkFBdUIsR0FBRyxVQUFVQyxTQUFWLEVBQTBCQyxpQkFBMUIsRUFBa0Q7SUFDeEYsSUFBSUQsU0FBUyxJQUFJQSxTQUFTLENBQUNFLGlCQUFWLEtBQWdDLE1BQWpELEVBQXlEO01BQ3hELE9BQU8sMkJBQVA7SUFDQTs7SUFDRCxJQUFJRixTQUFTLElBQUlBLFNBQVMsQ0FBQ0UsaUJBQVYsS0FBZ0MsU0FBakQsRUFBNEQ7TUFDM0QsT0FBT0MsUUFBUSxDQUFDLENBQUNGLGlCQUFpQixDQUFDRyxXQUFuQixFQUFnQyxtQkFBaEMsQ0FBRCxDQUFmO0lBQ0E7O0lBQ0QsT0FBT0MsU0FBUDtFQUNBLENBUk07Ozs7RUFVQSxJQUFNQyxjQUFjLEdBQUcsVUFBVUMsTUFBVixFQUF1QjtJQUNwRCxLQUFLLElBQUlDLENBQUMsR0FBRyxDQUFiLEVBQWdCQSxDQUFDLEdBQUdELE1BQU0sQ0FBQ0UsTUFBM0IsRUFBbUNELENBQUMsRUFBcEMsRUFBd0M7TUFDdkMsSUFBSUQsTUFBTSxDQUFDQyxDQUFELENBQU4sQ0FBVUUsV0FBZCxFQUEyQjtRQUMxQixPQUFPSCxNQUFNLENBQUNDLENBQUQsQ0FBTixDQUFVRSxXQUFqQjtNQUNBO0lBQ0Q7RUFDRCxDQU5NIn0=
|
|
@@ -0,0 +1,459 @@
|
|
|
1
|
+
/*!
|
|
2
|
+
* SAP UI development toolkit for HTML5 (SAPUI5)
|
|
3
|
+
* (c) Copyright 2009-2021 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
|
+
|
|
10
|
+
var property = ClassSupport.property;
|
|
11
|
+
var event = ClassSupport.event;
|
|
12
|
+
var defineUI5Class = ClassSupport.defineUI5Class;
|
|
13
|
+
var association = ClassSupport.association;
|
|
14
|
+
var aggregation = ClassSupport.aggregation;
|
|
15
|
+
|
|
16
|
+
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 }); }
|
|
17
|
+
|
|
18
|
+
function _assertThisInitialized(self) { if (self === void 0) { throw new ReferenceError("this hasn't been initialised - super() hasn't been called"); } return self; }
|
|
19
|
+
|
|
20
|
+
function _inheritsLoose(subClass, superClass) { subClass.prototype = Object.create(superClass.prototype); subClass.prototype.constructor = subClass; _setPrototypeOf(subClass, superClass); }
|
|
21
|
+
|
|
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
|
+
|
|
24
|
+
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; }
|
|
25
|
+
|
|
26
|
+
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.'); }
|
|
27
|
+
|
|
28
|
+
var BindingAction;
|
|
29
|
+
|
|
30
|
+
(function (BindingAction) {
|
|
31
|
+
BindingAction["Suspend"] = "suspendBinding";
|
|
32
|
+
BindingAction["Resume"] = "resumeBinding";
|
|
33
|
+
})(BindingAction || (BindingAction = {}));
|
|
34
|
+
|
|
35
|
+
var MultipleModeControl = (_dec = defineUI5Class("sap.fe.templates.ListReport.controls.MultipleModeControl"), _dec2 = property({
|
|
36
|
+
type: "boolean"
|
|
37
|
+
}), _dec3 = property({
|
|
38
|
+
type: "boolean",
|
|
39
|
+
defaultValue: false
|
|
40
|
+
}), _dec4 = property({
|
|
41
|
+
type: "boolean",
|
|
42
|
+
defaultValue: false
|
|
43
|
+
}), _dec5 = aggregation({
|
|
44
|
+
type: "sap.m.IconTabBar",
|
|
45
|
+
multiple: false,
|
|
46
|
+
isDefault: true
|
|
47
|
+
}), _dec6 = association({
|
|
48
|
+
type: "sap.ui.core.Control",
|
|
49
|
+
multiple: true
|
|
50
|
+
}), _dec7 = association({
|
|
51
|
+
type: "sap.fe.core.controls.FilterBar",
|
|
52
|
+
multiple: false
|
|
53
|
+
}), _dec8 = event(), _dec(_class = (_class2 = /*#__PURE__*/function (_Control) {
|
|
54
|
+
_inheritsLoose(MultipleModeControl, _Control);
|
|
55
|
+
|
|
56
|
+
function MultipleModeControl() {
|
|
57
|
+
var _this;
|
|
58
|
+
|
|
59
|
+
for (var _len = arguments.length, args = new Array(_len), _key = 0; _key < _len; _key++) {
|
|
60
|
+
args[_key] = arguments[_key];
|
|
61
|
+
}
|
|
62
|
+
|
|
63
|
+
_this = _Control.call.apply(_Control, [this].concat(args)) || this;
|
|
64
|
+
|
|
65
|
+
_initializerDefineProperty(_this, "showCounts", _descriptor, _assertThisInitialized(_this));
|
|
66
|
+
|
|
67
|
+
_initializerDefineProperty(_this, "freezeContent", _descriptor2, _assertThisInitialized(_this));
|
|
68
|
+
|
|
69
|
+
_initializerDefineProperty(_this, "countsOutDated", _descriptor3, _assertThisInitialized(_this));
|
|
70
|
+
|
|
71
|
+
_initializerDefineProperty(_this, "content", _descriptor4, _assertThisInitialized(_this));
|
|
72
|
+
|
|
73
|
+
_initializerDefineProperty(_this, "innerControls", _descriptor5, _assertThisInitialized(_this));
|
|
74
|
+
|
|
75
|
+
_initializerDefineProperty(_this, "filterControl", _descriptor6, _assertThisInitialized(_this));
|
|
76
|
+
|
|
77
|
+
_initializerDefineProperty(_this, "select", _descriptor7, _assertThisInitialized(_this));
|
|
78
|
+
|
|
79
|
+
return _this;
|
|
80
|
+
}
|
|
81
|
+
|
|
82
|
+
var _proto = MultipleModeControl.prototype;
|
|
83
|
+
|
|
84
|
+
_proto.onBeforeRendering = function onBeforeRendering() {
|
|
85
|
+
var _this$_getFilterContr,
|
|
86
|
+
_this2 = this;
|
|
87
|
+
|
|
88
|
+
this.getTabsModel(); // Generate the model which is mandatory for some bindings
|
|
89
|
+
|
|
90
|
+
var oFilterBarAPI = (_this$_getFilterContr = this._getFilterControl()) === null || _this$_getFilterContr === void 0 ? void 0 : _this$_getFilterContr.getParent();
|
|
91
|
+
|
|
92
|
+
this._getAllInnerControls().forEach(function (oMacroAPI) {
|
|
93
|
+
var _oMacroAPI$suspendBin;
|
|
94
|
+
|
|
95
|
+
if (_this2.showCounts) {
|
|
96
|
+
oMacroAPI.attachEvent("internalDataRequested", _this2._refreshTabsCount.bind(_this2));
|
|
97
|
+
}
|
|
98
|
+
|
|
99
|
+
(_oMacroAPI$suspendBin = oMacroAPI.suspendBinding) === null || _oMacroAPI$suspendBin === void 0 ? void 0 : _oMacroAPI$suspendBin.call(oMacroAPI);
|
|
100
|
+
});
|
|
101
|
+
|
|
102
|
+
if (oFilterBarAPI) {
|
|
103
|
+
oFilterBarAPI.attachEvent("internalSearch", this._onSearch.bind(this));
|
|
104
|
+
oFilterBarAPI.attachEvent("internalFilterChanged", this._onFilterChanged.bind(this));
|
|
105
|
+
}
|
|
106
|
+
};
|
|
107
|
+
|
|
108
|
+
_proto.onAfterRendering = function onAfterRendering() {
|
|
109
|
+
var _this$getSelectedInne, _this$getSelectedInne2;
|
|
110
|
+
|
|
111
|
+
(_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"));
|
|
112
|
+
};
|
|
113
|
+
|
|
114
|
+
MultipleModeControl.render = function render(oRm, oControl) {
|
|
115
|
+
oRm.renderControl(oControl.content);
|
|
116
|
+
}
|
|
117
|
+
/**
|
|
118
|
+
* Gets the model containing information related to the IconTabFilters.
|
|
119
|
+
*
|
|
120
|
+
* @returns {sap.ui.model.Model | undefined} The model
|
|
121
|
+
*/
|
|
122
|
+
;
|
|
123
|
+
|
|
124
|
+
_proto.getTabsModel = function getTabsModel() {
|
|
125
|
+
var sTabsModel = "tabsInternal";
|
|
126
|
+
var oContent = this.content;
|
|
127
|
+
|
|
128
|
+
if (!oContent) {
|
|
129
|
+
return undefined;
|
|
130
|
+
}
|
|
131
|
+
|
|
132
|
+
var oModel = oContent.getModel(sTabsModel);
|
|
133
|
+
|
|
134
|
+
if (!oModel) {
|
|
135
|
+
oModel = new JSONModel({});
|
|
136
|
+
oContent.setModel(oModel, sTabsModel);
|
|
137
|
+
}
|
|
138
|
+
|
|
139
|
+
return oModel;
|
|
140
|
+
}
|
|
141
|
+
/**
|
|
142
|
+
* Gets the inner control of the displayed tab.
|
|
143
|
+
*
|
|
144
|
+
* @returns {InnerControlType | undefined} The control
|
|
145
|
+
*/
|
|
146
|
+
;
|
|
147
|
+
|
|
148
|
+
_proto.getSelectedInnerControl = function getSelectedInnerControl() {
|
|
149
|
+
var _this3 = this;
|
|
150
|
+
|
|
151
|
+
var oSelectedTab = this.content.getItems().find(function (oItem) {
|
|
152
|
+
return oItem.getKey() === _this3.content.getSelectedKey();
|
|
153
|
+
});
|
|
154
|
+
return oSelectedTab ? this._getAllInnerControls().find(function (oMacroAPI) {
|
|
155
|
+
return _this3._getTabFromInnerControl(oMacroAPI) === oSelectedTab;
|
|
156
|
+
}) : undefined;
|
|
157
|
+
}
|
|
158
|
+
/**
|
|
159
|
+
* Manages the binding of all inner controls when the selected IconTabFilter is changed.
|
|
160
|
+
*
|
|
161
|
+
* @param {sap.ui.base.Event} oEvent Event fired by the IconTabBar
|
|
162
|
+
*/
|
|
163
|
+
;
|
|
164
|
+
|
|
165
|
+
MultipleModeControl.handleTabChange = function handleTabChange(oEvent) {
|
|
166
|
+
var _oMultiControl$_getVi, _oMultiControl$_getVi2;
|
|
167
|
+
|
|
168
|
+
var oIconTabBar = oEvent.getSource();
|
|
169
|
+
var oMultiControl = oIconTabBar.getParent();
|
|
170
|
+
var mParameters = oEvent.getParameters();
|
|
171
|
+
|
|
172
|
+
oMultiControl._setInnerBinding(true);
|
|
173
|
+
|
|
174
|
+
var sPreviousSelectedKey = mParameters === null || mParameters === void 0 ? void 0 : mParameters.previousKey;
|
|
175
|
+
var sSelectedKey = mParameters === null || mParameters === void 0 ? void 0 : mParameters.selectedKey;
|
|
176
|
+
|
|
177
|
+
if (sSelectedKey && sPreviousSelectedKey !== sSelectedKey) {
|
|
178
|
+
var oFilterBar = oMultiControl._getFilterControl();
|
|
179
|
+
|
|
180
|
+
if (oFilterBar && !oMultiControl.getProperty("freezeContent")) {
|
|
181
|
+
if (!oMultiControl.getSelectedInnerControl()) {
|
|
182
|
+
//custom tab
|
|
183
|
+
oMultiControl._refreshCustomView(oFilterBar.getFilterConditions(), "tabChanged");
|
|
184
|
+
}
|
|
185
|
+
}
|
|
186
|
+
|
|
187
|
+
ControlPersonalizationWriteAPI.add({
|
|
188
|
+
changes: [{
|
|
189
|
+
changeSpecificData: {
|
|
190
|
+
changeType: "selectIconTabBarFilter",
|
|
191
|
+
content: {
|
|
192
|
+
selectedKey: sSelectedKey,
|
|
193
|
+
previousSelectedKey: sPreviousSelectedKey
|
|
194
|
+
}
|
|
195
|
+
},
|
|
196
|
+
selectorElement: oIconTabBar
|
|
197
|
+
}]
|
|
198
|
+
});
|
|
199
|
+
}
|
|
200
|
+
|
|
201
|
+
(_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();
|
|
202
|
+
oMultiControl.fireEvent("select", {
|
|
203
|
+
iconTabBar: oIconTabBar,
|
|
204
|
+
selectedKey: sSelectedKey,
|
|
205
|
+
previousKey: sPreviousSelectedKey
|
|
206
|
+
});
|
|
207
|
+
}
|
|
208
|
+
/**
|
|
209
|
+
* Invalidates the content of all inner controls.
|
|
210
|
+
*/
|
|
211
|
+
;
|
|
212
|
+
|
|
213
|
+
_proto.invalidateContent = function invalidateContent() {
|
|
214
|
+
this.setCountsOutDated(true);
|
|
215
|
+
|
|
216
|
+
this._getAllInnerControls().forEach(function (oMacroAPI) {
|
|
217
|
+
var _oMacroAPI$invalidate;
|
|
218
|
+
|
|
219
|
+
(_oMacroAPI$invalidate = oMacroAPI.invalidateContent) === null || _oMacroAPI$invalidate === void 0 ? void 0 : _oMacroAPI$invalidate.call(oMacroAPI);
|
|
220
|
+
});
|
|
221
|
+
}
|
|
222
|
+
/**
|
|
223
|
+
* Sets the counts to out of date or up to date
|
|
224
|
+
* 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.
|
|
225
|
+
*
|
|
226
|
+
* @param {boolean} bValue Freeze or not the control
|
|
227
|
+
*/
|
|
228
|
+
;
|
|
229
|
+
|
|
230
|
+
_proto.setCountsOutDated = function setCountsOutDated() {
|
|
231
|
+
var bValue = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : true;
|
|
232
|
+
this.setProperty("countsOutDated", bValue); // if the current tab is not configured with no inner Control
|
|
233
|
+
// the tab counts must be manually refreshed since no Macro API will sent event internalDataRequested
|
|
234
|
+
|
|
235
|
+
if (bValue && !this.getSelectedInnerControl()) {
|
|
236
|
+
this._refreshTabsCount();
|
|
237
|
+
}
|
|
238
|
+
}
|
|
239
|
+
/**
|
|
240
|
+
* Freezes the content :
|
|
241
|
+
* - content is frozen: the binding of the inner controls are suspended.
|
|
242
|
+
* - content is unfrozen: the binding of inner control related to the selected IconTabFilter is resumed.
|
|
243
|
+
*
|
|
244
|
+
* @param {boolean} bValue Freeze or not the control
|
|
245
|
+
*/
|
|
246
|
+
;
|
|
247
|
+
|
|
248
|
+
_proto.setFreezeContent = function setFreezeContent(bValue) {
|
|
249
|
+
this.setProperty("freezeContent", bValue);
|
|
250
|
+
|
|
251
|
+
this._setInnerBinding();
|
|
252
|
+
}
|
|
253
|
+
/**
|
|
254
|
+
* 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.
|
|
255
|
+
*
|
|
256
|
+
* @param oResourceBundle
|
|
257
|
+
*/
|
|
258
|
+
;
|
|
259
|
+
|
|
260
|
+
_proto._updateMultiTabNotApplicableFields = function _updateMultiTabNotApplicableFields(oResourceBundle) {
|
|
261
|
+
var _this4 = this;
|
|
262
|
+
|
|
263
|
+
var tabsModel = this.getTabsModel();
|
|
264
|
+
|
|
265
|
+
var oFilterControl = this._getFilterControl();
|
|
266
|
+
|
|
267
|
+
if (tabsModel && oFilterControl) {
|
|
268
|
+
var results = {};
|
|
269
|
+
|
|
270
|
+
this._getAllInnerControls().forEach(function (oMacroAPI) {
|
|
271
|
+
var oTab = _this4._getTabFromInnerControl(oMacroAPI);
|
|
272
|
+
|
|
273
|
+
if (oTab) {
|
|
274
|
+
var _oMacroAPI$refreshNot;
|
|
275
|
+
|
|
276
|
+
var sTabId = oTab.getKey();
|
|
277
|
+
var mIgnoredFields = ((_oMacroAPI$refreshNot = oMacroAPI.refreshNotApplicableFields) === null || _oMacroAPI$refreshNot === void 0 ? void 0 : _oMacroAPI$refreshNot.call(oMacroAPI, oFilterControl)) || [];
|
|
278
|
+
results[sTabId] = {
|
|
279
|
+
notApplicable: {
|
|
280
|
+
fields: mIgnoredFields,
|
|
281
|
+
title: _this4._setTabMessageStrip({
|
|
282
|
+
entityTypePath: oFilterControl.data("entityType"),
|
|
283
|
+
ignoredFields: mIgnoredFields,
|
|
284
|
+
resourceBundle: oResourceBundle,
|
|
285
|
+
title: oTab.getText()
|
|
286
|
+
})
|
|
287
|
+
}
|
|
288
|
+
};
|
|
289
|
+
}
|
|
290
|
+
});
|
|
291
|
+
|
|
292
|
+
tabsModel.setData(results);
|
|
293
|
+
}
|
|
294
|
+
};
|
|
295
|
+
|
|
296
|
+
_proto._getAllInnerControls = function _getAllInnerControls() {
|
|
297
|
+
var _this5 = this;
|
|
298
|
+
|
|
299
|
+
var bOnlyForVisibleTab = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : false;
|
|
300
|
+
return this.innerControls.reduce(function (aInnerControls, sInnerControl) {
|
|
301
|
+
var oControl = Core.byId(sInnerControl);
|
|
302
|
+
|
|
303
|
+
if (oControl) {
|
|
304
|
+
aInnerControls.push(oControl);
|
|
305
|
+
}
|
|
306
|
+
|
|
307
|
+
return aInnerControls.filter(function (oInnerControl) {
|
|
308
|
+
var _this5$_getTabFromInn;
|
|
309
|
+
|
|
310
|
+
return !bOnlyForVisibleTab || ((_this5$_getTabFromInn = _this5._getTabFromInnerControl(oInnerControl)) === null || _this5$_getTabFromInn === void 0 ? void 0 : _this5$_getTabFromInn.getVisible());
|
|
311
|
+
});
|
|
312
|
+
}, []) || [];
|
|
313
|
+
};
|
|
314
|
+
|
|
315
|
+
_proto._getFilterControl = function _getFilterControl() {
|
|
316
|
+
return Core.byId(this.filterControl);
|
|
317
|
+
};
|
|
318
|
+
|
|
319
|
+
_proto._getTabFromInnerControl = function _getTabFromInnerControl(oControl) {
|
|
320
|
+
var sSupportedClass = IconTabFilter.getMetadata().getName();
|
|
321
|
+
var oTab = oControl;
|
|
322
|
+
|
|
323
|
+
if (oTab && !oTab.isA(sSupportedClass) && oTab.getParent) {
|
|
324
|
+
oTab = oControl.getParent();
|
|
325
|
+
}
|
|
326
|
+
|
|
327
|
+
return oTab && oTab.isA(sSupportedClass) ? oTab : undefined;
|
|
328
|
+
};
|
|
329
|
+
|
|
330
|
+
_proto._getViewController = function _getViewController() {
|
|
331
|
+
var oView = CommonUtils.getTargetView(this);
|
|
332
|
+
return oView && oView.getController();
|
|
333
|
+
};
|
|
334
|
+
|
|
335
|
+
_proto._refreshCustomView = function _refreshCustomView(oFilterConditions, sRefreshCause) {
|
|
336
|
+
var _this$_getViewControl, _this$_getViewControl2;
|
|
337
|
+
|
|
338
|
+
(_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, {
|
|
339
|
+
filterConditions: oFilterConditions,
|
|
340
|
+
currentTabId: this.content.getSelectedKey(),
|
|
341
|
+
refreshCause: sRefreshCause
|
|
342
|
+
});
|
|
343
|
+
};
|
|
344
|
+
|
|
345
|
+
_proto._refreshTabsCount = function _refreshTabsCount() {
|
|
346
|
+
var _this6 = this;
|
|
347
|
+
|
|
348
|
+
var sSelectedKey = this.content.getSelectedKey();
|
|
349
|
+
|
|
350
|
+
this._getAllInnerControls(true).forEach(function (oMacroAPI) {
|
|
351
|
+
var oIconTabFilter = _this6._getTabFromInnerControl(oMacroAPI);
|
|
352
|
+
|
|
353
|
+
if (oMacroAPI !== null && oMacroAPI !== void 0 && oMacroAPI.getCounts && (_this6.countsOutDated || sSelectedKey === (oIconTabFilter === null || oIconTabFilter === void 0 ? void 0 : oIconTabFilter.getKey()))) {
|
|
354
|
+
if (oIconTabFilter && oIconTabFilter.setCount) {
|
|
355
|
+
oIconTabFilter.setCount("...");
|
|
356
|
+
oMacroAPI.getCounts().then(function (iCount) {
|
|
357
|
+
return oIconTabFilter.setCount(iCount || "0");
|
|
358
|
+
}).catch(function (oError) {
|
|
359
|
+
Log.error("Error while requesting Counts for Control", oError);
|
|
360
|
+
});
|
|
361
|
+
}
|
|
362
|
+
}
|
|
363
|
+
});
|
|
364
|
+
|
|
365
|
+
this.setCountsOutDated(false);
|
|
366
|
+
};
|
|
367
|
+
|
|
368
|
+
_proto._setInnerBinding = function _setInnerBinding() {
|
|
369
|
+
var _this7 = this;
|
|
370
|
+
|
|
371
|
+
var bRequestIfNotInitialized = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : false;
|
|
372
|
+
|
|
373
|
+
if (this.content) {
|
|
374
|
+
this._getAllInnerControls().forEach(function (oMacroAPI) {
|
|
375
|
+
var _oMacroAPI$sAction;
|
|
376
|
+
|
|
377
|
+
var oIconTabFilter = _this7._getTabFromInnerControl(oMacroAPI);
|
|
378
|
+
|
|
379
|
+
var bIsSelectedKey = (oIconTabFilter === null || oIconTabFilter === void 0 ? void 0 : oIconTabFilter.getKey()) === _this7.content.getSelectedKey();
|
|
380
|
+
|
|
381
|
+
var sAction = bIsSelectedKey && !_this7.getProperty("freezeContent") ? BindingAction.Resume : BindingAction.Suspend;
|
|
382
|
+
(_oMacroAPI$sAction = oMacroAPI[sAction]) === null || _oMacroAPI$sAction === void 0 ? void 0 : _oMacroAPI$sAction.call(oMacroAPI, sAction === BindingAction.Resume ? bRequestIfNotInitialized && bIsSelectedKey : undefined);
|
|
383
|
+
});
|
|
384
|
+
}
|
|
385
|
+
};
|
|
386
|
+
|
|
387
|
+
_proto._setTabMessageStrip = function _setTabMessageStrip(properties) {
|
|
388
|
+
var sText = "";
|
|
389
|
+
var aIgnoredFields = properties.ignoredFields;
|
|
390
|
+
|
|
391
|
+
var oFilterControl = this._getFilterControl();
|
|
392
|
+
|
|
393
|
+
if (oFilterControl && Array.isArray(aIgnoredFields) && aIgnoredFields.length > 0 && properties.title) {
|
|
394
|
+
var aIgnoredLabels = MessageStrip.getLabels(aIgnoredFields, properties.entityTypePath, oFilterControl, properties.resourceBundle);
|
|
395
|
+
sText = MessageStrip.getText(aIgnoredLabels, oFilterControl, properties.title, DelegateUtil.getLocalizedText);
|
|
396
|
+
return sText;
|
|
397
|
+
}
|
|
398
|
+
};
|
|
399
|
+
|
|
400
|
+
_proto._onSearch = function _onSearch(oEvent) {
|
|
401
|
+
this.setCountsOutDated(true);
|
|
402
|
+
this.setFreezeContent(false);
|
|
403
|
+
|
|
404
|
+
if (this.getSelectedInnerControl()) {
|
|
405
|
+
var _this$_getViewControl3;
|
|
406
|
+
|
|
407
|
+
this._updateMultiTabNotApplicableFields((_this$_getViewControl3 = this._getViewController()) === null || _this$_getViewControl3 === void 0 ? void 0 : _this$_getViewControl3.oResourceBundle);
|
|
408
|
+
} else {
|
|
409
|
+
// custom tab
|
|
410
|
+
this._refreshCustomView(oEvent.getParameter("conditions"), "search");
|
|
411
|
+
}
|
|
412
|
+
};
|
|
413
|
+
|
|
414
|
+
_proto._onFilterChanged = function _onFilterChanged(oEvent) {
|
|
415
|
+
if (oEvent.getParameter("conditionsBased")) {
|
|
416
|
+
this.setFreezeContent(true);
|
|
417
|
+
}
|
|
418
|
+
};
|
|
419
|
+
|
|
420
|
+
return MultipleModeControl;
|
|
421
|
+
}(Control), (_descriptor = _applyDecoratedDescriptor(_class2.prototype, "showCounts", [_dec2], {
|
|
422
|
+
configurable: true,
|
|
423
|
+
enumerable: true,
|
|
424
|
+
writable: true,
|
|
425
|
+
initializer: null
|
|
426
|
+
}), _descriptor2 = _applyDecoratedDescriptor(_class2.prototype, "freezeContent", [_dec3], {
|
|
427
|
+
configurable: true,
|
|
428
|
+
enumerable: true,
|
|
429
|
+
writable: true,
|
|
430
|
+
initializer: null
|
|
431
|
+
}), _descriptor3 = _applyDecoratedDescriptor(_class2.prototype, "countsOutDated", [_dec4], {
|
|
432
|
+
configurable: true,
|
|
433
|
+
enumerable: true,
|
|
434
|
+
writable: true,
|
|
435
|
+
initializer: null
|
|
436
|
+
}), _descriptor4 = _applyDecoratedDescriptor(_class2.prototype, "content", [_dec5], {
|
|
437
|
+
configurable: true,
|
|
438
|
+
enumerable: true,
|
|
439
|
+
writable: true,
|
|
440
|
+
initializer: null
|
|
441
|
+
}), _descriptor5 = _applyDecoratedDescriptor(_class2.prototype, "innerControls", [_dec6], {
|
|
442
|
+
configurable: true,
|
|
443
|
+
enumerable: true,
|
|
444
|
+
writable: true,
|
|
445
|
+
initializer: null
|
|
446
|
+
}), _descriptor6 = _applyDecoratedDescriptor(_class2.prototype, "filterControl", [_dec7], {
|
|
447
|
+
configurable: true,
|
|
448
|
+
enumerable: true,
|
|
449
|
+
writable: true,
|
|
450
|
+
initializer: null
|
|
451
|
+
}), _descriptor7 = _applyDecoratedDescriptor(_class2.prototype, "select", [_dec8], {
|
|
452
|
+
configurable: true,
|
|
453
|
+
enumerable: true,
|
|
454
|
+
writable: true,
|
|
455
|
+
initializer: null
|
|
456
|
+
})), _class2)) || _class);
|
|
457
|
+
return MultipleModeControl;
|
|
458
|
+
}, false);
|
|
459
|
+
//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJuYW1lcyI6WyJCaW5kaW5nQWN0aW9uIiwiTXVsdGlwbGVNb2RlQ29udHJvbCIsImRlZmluZVVJNUNsYXNzIiwicHJvcGVydHkiLCJ0eXBlIiwiZGVmYXVsdFZhbHVlIiwiYWdncmVnYXRpb24iLCJtdWx0aXBsZSIsImlzRGVmYXVsdCIsImFzc29jaWF0aW9uIiwiZXZlbnQiLCJvbkJlZm9yZVJlbmRlcmluZyIsImdldFRhYnNNb2RlbCIsIm9GaWx0ZXJCYXJBUEkiLCJfZ2V0RmlsdGVyQ29udHJvbCIsImdldFBhcmVudCIsIl9nZXRBbGxJbm5lckNvbnRyb2xzIiwiZm9yRWFjaCIsIm9NYWNyb0FQSSIsInNob3dDb3VudHMiLCJhdHRhY2hFdmVudCIsIl9yZWZyZXNoVGFic0NvdW50IiwiYmluZCIsInN1c3BlbmRCaW5kaW5nIiwiX29uU2VhcmNoIiwiX29uRmlsdGVyQ2hhbmdlZCIsIm9uQWZ0ZXJSZW5kZXJpbmciLCJnZXRTZWxlY3RlZElubmVyQ29udHJvbCIsInJlc3VtZUJpbmRpbmciLCJnZXRQcm9wZXJ0eSIsInJlbmRlciIsIm9SbSIsIm9Db250cm9sIiwicmVuZGVyQ29udHJvbCIsImNvbnRlbnQiLCJzVGFic01vZGVsIiwib0NvbnRlbnQiLCJ1bmRlZmluZWQiLCJvTW9kZWwiLCJnZXRNb2RlbCIsIkpTT05Nb2RlbCIsInNldE1vZGVsIiwib1NlbGVjdGVkVGFiIiwiZ2V0SXRlbXMiLCJmaW5kIiwib0l0ZW0iLCJnZXRLZXkiLCJnZXRTZWxlY3RlZEtleSIsIl9nZXRUYWJGcm9tSW5uZXJDb250cm9sIiwiaGFuZGxlVGFiQ2hhbmdlIiwib0V2ZW50Iiwib0ljb25UYWJCYXIiLCJnZXRTb3VyY2UiLCJvTXVsdGlDb250cm9sIiwibVBhcmFtZXRlcnMiLCJnZXRQYXJhbWV0ZXJzIiwiX3NldElubmVyQmluZGluZyIsInNQcmV2aW91c1NlbGVjdGVkS2V5IiwicHJldmlvdXNLZXkiLCJzU2VsZWN0ZWRLZXkiLCJzZWxlY3RlZEtleSIsIm9GaWx0ZXJCYXIiLCJfcmVmcmVzaEN1c3RvbVZpZXciLCJnZXRGaWx0ZXJDb25kaXRpb25zIiwiQ29udHJvbFBlcnNvbmFsaXphdGlvbldyaXRlQVBJIiwiYWRkIiwiY2hhbmdlcyIsImNoYW5nZVNwZWNpZmljRGF0YSIsImNoYW5nZVR5cGUiLCJwcmV2aW91c1NlbGVjdGVkS2V5Iiwic2VsZWN0b3JFbGVtZW50IiwiX2dldFZpZXdDb250cm9sbGVyIiwiZ2V0RXh0ZW5zaW9uQVBJIiwidXBkYXRlQXBwU3RhdGUiLCJmaXJlRXZlbnQiLCJpY29uVGFiQmFyIiwiaW52YWxpZGF0ZUNvbnRlbnQiLCJzZXRDb3VudHNPdXREYXRlZCIsImJWYWx1ZSIsInNldFByb3BlcnR5Iiwic2V0RnJlZXplQ29udGVudCIsIl91cGRhdGVNdWx0aVRhYk5vdEFwcGxpY2FibGVGaWVsZHMiLCJvUmVzb3VyY2VCdW5kbGUiLCJ0YWJzTW9kZWwiLCJvRmlsdGVyQ29udHJvbCIsInJlc3VsdHMiLCJvVGFiIiwic1RhYklkIiwibUlnbm9yZWRGaWVsZHMiLCJyZWZyZXNoTm90QXBwbGljYWJsZUZpZWxkcyIsIm5vdEFwcGxpY2FibGUiLCJmaWVsZHMiLCJ0aXRsZSIsIl9zZXRUYWJNZXNzYWdlU3RyaXAiLCJlbnRpdHlUeXBlUGF0aCIsImRhdGEiLCJpZ25vcmVkRmllbGRzIiwicmVzb3VyY2VCdW5kbGUiLCJnZXRUZXh0Iiwic2V0RGF0YSIsImJPbmx5Rm9yVmlzaWJsZVRhYiIsImlubmVyQ29udHJvbHMiLCJyZWR1Y2UiLCJhSW5uZXJDb250cm9scyIsInNJbm5lckNvbnRyb2wiLCJDb3JlIiwiYnlJZCIsInB1c2giLCJmaWx0ZXIiLCJvSW5uZXJDb250cm9sIiwiZ2V0VmlzaWJsZSIsImZpbHRlckNvbnRyb2wiLCJzU3VwcG9ydGVkQ2xhc3MiLCJJY29uVGFiRmlsdGVyIiwiZ2V0TWV0YWRhdGEiLCJnZXROYW1lIiwiaXNBIiwib1ZpZXciLCJDb21tb25VdGlscyIsImdldFRhcmdldFZpZXciLCJnZXRDb250cm9sbGVyIiwib0ZpbHRlckNvbmRpdGlvbnMiLCJzUmVmcmVzaENhdXNlIiwib25WaWV3TmVlZHNSZWZyZXNoIiwiZmlsdGVyQ29uZGl0aW9ucyIsImN1cnJlbnRUYWJJZCIsInJlZnJlc2hDYXVzZSIsIm9JY29uVGFiRmlsdGVyIiwiZ2V0Q291bnRzIiwiY291bnRzT3V0RGF0ZWQiLCJzZXRDb3VudCIsInRoZW4iLCJpQ291bnQiLCJjYXRjaCIsIm9FcnJvciIsIkxvZyIsImVycm9yIiwiYlJlcXVlc3RJZk5vdEluaXRpYWxpemVkIiwiYklzU2VsZWN0ZWRLZXkiLCJzQWN0aW9uIiwiUmVzdW1lIiwiU3VzcGVuZCIsInByb3BlcnRpZXMiLCJzVGV4dCIsImFJZ25vcmVkRmllbGRzIiwiQXJyYXkiLCJpc0FycmF5IiwibGVuZ3RoIiwiYUlnbm9yZWRMYWJlbHMiLCJNZXNzYWdlU3RyaXAiLCJnZXRMYWJlbHMiLCJEZWxlZ2F0ZVV0aWwiLCJnZXRMb2NhbGl6ZWRUZXh0IiwiZ2V0UGFyYW1ldGVyIiwiQ29udHJvbCJdLCJzb3VyY2VSb290IjoiLiIsInNvdXJjZXMiOlsiTXVsdGlwbGVNb2RlQ29udHJvbC50cyJdLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgdHlwZSBSZXNvdXJjZUJ1bmRsZSBmcm9tIFwic2FwL2Jhc2UvaTE4bi9SZXNvdXJjZUJ1bmRsZVwiO1xuaW1wb3J0IExvZyBmcm9tIFwic2FwL2Jhc2UvTG9nXCI7XG5pbXBvcnQgQ29tbW9uVXRpbHMgZnJvbSBcInNhcC9mZS9jb3JlL0NvbW1vblV0aWxzXCI7XG5pbXBvcnQgdHlwZSBGaWx0ZXJCYXIgZnJvbSBcInNhcC9mZS9jb3JlL2NvbnRyb2xzL0ZpbHRlckJhclwiO1xuaW1wb3J0IHsgYWdncmVnYXRpb24sIGFzc29jaWF0aW9uLCBkZWZpbmVVSTVDbGFzcywgZXZlbnQsIHByb3BlcnR5IH0gZnJvbSBcInNhcC9mZS9jb3JlL2hlbHBlcnMvQ2xhc3NTdXBwb3J0XCI7XG5pbXBvcnQgTWVzc2FnZVN0cmlwIGZyb20gXCJzYXAvZmUvY29yZS9oZWxwZXJzL01lc3NhZ2VTdHJpcFwiO1xuaW1wb3J0IERlbGVnYXRlVXRpbCBmcm9tIFwic2FwL2ZlL21hY3Jvcy9EZWxlZ2F0ZVV0aWxcIjtcbmltcG9ydCBNYWNyb0FQSSBmcm9tIFwic2FwL2ZlL21hY3Jvcy9NYWNyb0FQSVwiO1xuaW1wb3J0IEljb25UYWJCYXIgZnJvbSBcInNhcC9tL0ljb25UYWJCYXJcIjtcbmltcG9ydCBJY29uVGFiRmlsdGVyIGZyb20gXCJzYXAvbS9JY29uVGFiRmlsdGVyXCI7XG5pbXBvcnQgdHlwZSBDb3JlRXZlbnQgZnJvbSBcInNhcC91aS9iYXNlL0V2ZW50XCI7XG5pbXBvcnQgQ29udHJvbCBmcm9tIFwic2FwL3VpL2NvcmUvQ29udHJvbFwiO1xuaW1wb3J0IENvcmUgZnJvbSBcInNhcC91aS9jb3JlL0NvcmVcIjtcbmltcG9ydCBSZW5kZXJNYW5hZ2VyIGZyb20gXCJzYXAvdWkvY29yZS9SZW5kZXJNYW5hZ2VyXCI7XG5pbXBvcnQgQ29udHJvbFBlcnNvbmFsaXphdGlvbldyaXRlQVBJIGZyb20gXCJzYXAvdWkvZmwvd3JpdGUvYXBpL0NvbnRyb2xQZXJzb25hbGl6YXRpb25Xcml0ZUFQSVwiO1xuaW1wb3J0IEpTT05Nb2RlbCBmcm9tIFwic2FwL3VpL21vZGVsL2pzb24vSlNPTk1vZGVsXCI7XG5pbXBvcnQgTW9kZWwgZnJvbSBcInNhcC91aS9tb2RlbC9Nb2RlbFwiO1xuXG5leHBvcnQgdHlwZSBJbm5lckNvbnRyb2xUeXBlID0gTWFjcm9BUEkgJlxuXHRQYXJ0aWFsPHtcblx0XHRyZXN1bWVCaW5kaW5nOiBGdW5jdGlvbjtcblx0XHRzdXNwZW5kQmluZGluZzogRnVuY3Rpb247XG5cdFx0Z2V0Q291bnRzOiBGdW5jdGlvbjtcblx0XHRyZWZyZXNoTm90QXBwbGljYWJsZUZpZWxkczogRnVuY3Rpb247XG5cdFx0aW52YWxpZGF0ZUNvbnRlbnQ6IEZ1bmN0aW9uO1xuXHR9PjtcblxudHlwZSBNZXNzYWdlU3RyaXBQcm9wZXJ0aWVzID0ge1xuXHRlbnRpdHlUeXBlUGF0aDogc3RyaW5nO1xuXHRpZ25vcmVkRmllbGRzOiBhbnlbXTtcblx0cmVzb3VyY2VCdW5kbGU6IFJlc291cmNlQnVuZGxlO1xuXHR0aXRsZTogc3RyaW5nO1xufTtcblxuZW51bSBCaW5kaW5nQWN0aW9uIHtcblx0U3VzcGVuZCA9IFwic3VzcGVuZEJpbmRpbmdcIixcblx0UmVzdW1lID0gXCJyZXN1bWVCaW5kaW5nXCJcbn1cblxuQGRlZmluZVVJNUNsYXNzKFwic2FwLmZlLnRlbXBsYXRlcy5MaXN0UmVwb3J0LmNvbnRyb2xzLk11bHRpcGxlTW9kZUNvbnRyb2xcIilcbmNsYXNzIE11bHRpcGxlTW9kZUNvbnRyb2wgZXh0ZW5kcyBDb250cm9sIHtcblx0QHByb3BlcnR5KHsgdHlwZTogXCJib29sZWFuXCIgfSlcblx0c2hvd0NvdW50cyE6IGJvb2xlYW47XG5cblx0QHByb3BlcnR5KHsgdHlwZTogXCJib29sZWFuXCIsIGRlZmF1bHRWYWx1ZTogZmFsc2UgfSlcblx0ZnJlZXplQ29udGVudCE6IGJvb2xlYW47XG5cblx0QHByb3BlcnR5KHsgdHlwZTogXCJib29sZWFuXCIsIGRlZmF1bHRWYWx1ZTogZmFsc2UgfSlcblx0Y291bnRzT3V0RGF0ZWQhOiBib29sZWFuO1xuXG5cdEBhZ2dyZWdhdGlvbih7IHR5cGU6IFwic2FwLm0uSWNvblRhYkJhclwiLCBtdWx0aXBsZTogZmFsc2UsIGlzRGVmYXVsdDogdHJ1ZSB9KVxuXHRjb250ZW50ITogSWNvblRhYkJhcjtcblxuXHRAYXNzb2NpYXRpb24oeyB0eXBlOiBcInNhcC51aS5jb3JlLkNvbnRyb2xcIiwgbXVsdGlwbGU6IHRydWUgfSlcblx0aW5uZXJDb250cm9scyE6IHN0cmluZ1tdO1xuXG5cdEBhc3NvY2lhdGlvbih7IHR5cGU6IFwic2FwLmZlLmNvcmUuY29udHJvbHMuRmlsdGVyQmFyXCIsIG11bHRpcGxlOiBmYWxzZSB9KVxuXHRmaWx0ZXJDb250cm9sITogc3RyaW5nO1xuXG5cdEBldmVudCgpXG5cdHNlbGVjdCE6IEZ1bmN0aW9uO1xuXG5cdG9uQmVmb3JlUmVuZGVyaW5nKCkge1xuXHRcdHRoaXMuZ2V0VGFic01vZGVsKCk7IC8vIEdlbmVyYXRlIHRoZSBtb2RlbCB3aGljaCBpcyBtYW5kYXRvcnkgZm9yIHNvbWUgYmluZGluZ3NcblxuXHRcdGNvbnN0IG9GaWx0ZXJCYXJBUEkgPSB0aGlzLl9nZXRGaWx0ZXJDb250cm9sKCk/LmdldFBhcmVudCgpO1xuXHRcdHRoaXMuX2dldEFsbElubmVyQ29udHJvbHMoKS5mb3JFYWNoKChvTWFjcm9BUEkpID0+IHtcblx0XHRcdGlmICh0aGlzLnNob3dDb3VudHMpIHtcblx0XHRcdFx0b01hY3JvQVBJLmF0dGFjaEV2ZW50KFwiaW50ZXJuYWxEYXRhUmVxdWVzdGVkXCIsIHRoaXMuX3JlZnJlc2hUYWJzQ291bnQuYmluZCh0aGlzKSk7XG5cdFx0XHR9XG5cdFx0XHRvTWFjcm9BUEkuc3VzcGVuZEJpbmRpbmc/LigpO1xuXHRcdH0pO1xuXHRcdGlmIChvRmlsdGVyQmFyQVBJKSB7XG5cdFx0XHRvRmlsdGVyQmFyQVBJLmF0dGFjaEV2ZW50KFwiaW50ZXJuYWxTZWFyY2hcIiwgdGhpcy5fb25TZWFyY2guYmluZCh0aGlzKSk7XG5cdFx0XHRvRmlsdGVyQmFyQVBJLmF0dGFjaEV2ZW50KFwiaW50ZXJuYWxGaWx0ZXJDaGFuZ2VkXCIsIHRoaXMuX29uRmlsdGVyQ2hhbmdlZC5iaW5kKHRoaXMpKTtcblx0XHR9XG5cdH1cblxuXHRvbkFmdGVyUmVuZGVyaW5nKCkge1xuXHRcdHRoaXMuZ2V0U2VsZWN0ZWRJbm5lckNvbnRyb2woKT8ucmVzdW1lQmluZGluZz8uKCF0aGlzLmdldFByb3BlcnR5KFwiZnJlZXplQ29udGVudFwiKSk7XG5cdH1cblxuXHRzdGF0aWMgcmVuZGVyKG9SbTogUmVuZGVyTWFuYWdlciwgb0NvbnRyb2w6IE11bHRpcGxlTW9kZUNvbnRyb2wpIHtcblx0XHRvUm0ucmVuZGVyQ29udHJvbChvQ29udHJvbC5jb250ZW50KTtcblx0fVxuXG5cdC8qKlxuXHQgKiBHZXRzIHRoZSBtb2RlbCBjb250YWluaW5nIGluZm9ybWF0aW9uIHJlbGF0ZWQgdG8gdGhlIEljb25UYWJGaWx0ZXJzLlxuXHQgKlxuXHQgKiBAcmV0dXJucyB7c2FwLnVpLm1vZGVsLk1vZGVsIHwgdW5kZWZpbmVkfSBUaGUgbW9kZWxcblx0ICovXG5cdGdldFRhYnNNb2RlbCgpOiBNb2RlbCB8IHVuZGVmaW5lZCB7XG5cdFx0Y29uc3Qgc1RhYnNNb2RlbCA9IFwidGFic0ludGVybmFsXCI7XG5cdFx0Y29uc3Qgb0NvbnRlbnQgPSB0aGlzLmNvbnRlbnQ7XG5cdFx0aWYgKCFvQ29udGVudCkge1xuXHRcdFx0cmV0dXJuIHVuZGVmaW5lZDtcblx0XHR9XG5cdFx0bGV0IG9Nb2RlbCA9IG9Db250ZW50LmdldE1vZGVsKHNUYWJzTW9kZWwpO1xuXHRcdGlmICghb01vZGVsKSB7XG5cdFx0XHRvTW9kZWwgPSBuZXcgSlNPTk1vZGVsKHt9KTtcblx0XHRcdG9Db250ZW50LnNldE1vZGVsKG9Nb2RlbCwgc1RhYnNNb2RlbCk7XG5cdFx0fVxuXHRcdHJldHVybiBvTW9kZWw7XG5cdH1cblxuXHQvKipcblx0ICogR2V0cyB0aGUgaW5uZXIgY29udHJvbCBvZiB0aGUgZGlzcGxheWVkIHRhYi5cblx0ICpcblx0ICogQHJldHVybnMge0lubmVyQ29udHJvbFR5cGUgfCB1bmRlZmluZWR9IFRoZSBjb250cm9sXG5cdCAqL1xuXHRnZXRTZWxlY3RlZElubmVyQ29udHJvbCgpOiBJbm5lckNvbnRyb2xUeXBlIHwgdW5kZWZpbmVkIHtcblx0XHRjb25zdCBvU2VsZWN0ZWRUYWIgPSB0aGlzLmNvbnRlbnQuZ2V0SXRlbXMoKS5maW5kKChvSXRlbSkgPT4gKG9JdGVtIGFzIEljb25UYWJGaWx0ZXIpLmdldEtleSgpID09PSB0aGlzLmNvbnRlbnQuZ2V0U2VsZWN0ZWRLZXkoKSk7XG5cdFx0cmV0dXJuIG9TZWxlY3RlZFRhYlxuXHRcdFx0PyB0aGlzLl9nZXRBbGxJbm5lckNvbnRyb2xzKCkuZmluZCgob01hY3JvQVBJKSA9PiB0aGlzLl9nZXRUYWJGcm9tSW5uZXJDb250cm9sKG9NYWNyb0FQSSkgPT09IG9TZWxlY3RlZFRhYilcblx0XHRcdDogdW5kZWZpbmVkO1xuXHR9XG5cblx0LyoqXG5cdCAqIE1hbmFnZXMgdGhlIGJpbmRpbmcgb2YgYWxsIGlubmVyIGNvbnRyb2xzIHdoZW4gdGhlIHNlbGVjdGVkIEljb25UYWJGaWx0ZXIgaXMgY2hhbmdlZC5cblx0ICpcblx0ICogQHBhcmFtIHtzYXAudWkuYmFzZS5FdmVudH0gb0V2ZW50IEV2ZW50IGZpcmVkIGJ5IHRoZSBJY29uVGFiQmFyXG5cdCAqL1xuXHRzdGF0aWMgaGFuZGxlVGFiQ2hhbmdlKG9FdmVudDogYW55KTogdm9pZCB7XG5cdFx0Y29uc3Qgb0ljb25UYWJCYXIgPSBvRXZlbnQuZ2V0U291cmNlKCk7XG5cdFx0Y29uc3Qgb011bHRpQ29udHJvbCA9IG9JY29uVGFiQmFyLmdldFBhcmVudCgpO1xuXG5cdFx0Y29uc3QgbVBhcmFtZXRlcnMgPSBvRXZlbnQuZ2V0UGFyYW1ldGVycygpO1xuXHRcdG9NdWx0aUNvbnRyb2wuX3NldElubmVyQmluZGluZyh0cnVlKTtcblx0XHRjb25zdCBzUHJldmlvdXNTZWxlY3RlZEtleSA9IG1QYXJhbWV0ZXJzPy5wcmV2aW91c0tleTtcblx0XHRjb25zdCBzU2VsZWN0ZWRLZXkgPSBtUGFyYW1ldGVycz8uc2VsZWN0ZWRLZXk7XG5cblx0XHRpZiAoc1NlbGVjdGVkS2V5ICYmIHNQcmV2aW91c1NlbGVjdGVkS2V5ICE9PSBzU2VsZWN0ZWRLZXkpIHtcblx0XHRcdGNvbnN0IG9GaWx0ZXJCYXIgPSBvTXVsdGlDb250cm9sLl9nZXRGaWx0ZXJDb250cm9sKCk7XG5cdFx0XHRpZiAob0ZpbHRlckJhciAmJiAhb011bHRpQ29udHJvbC5nZXRQcm9wZXJ0eShcImZyZWV6ZUNvbnRlbnRcIikpIHtcblx0XHRcdFx0aWYgKCFvTXVsdGlDb250cm9sLmdldFNlbGVjdGVkSW5uZXJDb250cm9sKCkpIHtcblx0XHRcdFx0XHQvL2N1c3RvbSB0YWJcblx0XHRcdFx0XHRvTXVsdGlDb250cm9sLl9yZWZyZXNoQ3VzdG9tVmlldyhvRmlsdGVyQmFyLmdldEZpbHRlckNvbmRpdGlvbnMoKSwgXCJ0YWJDaGFuZ2VkXCIpO1xuXHRcdFx0XHR9XG5cdFx0XHR9XG5cdFx0XHRDb250cm9sUGVyc29uYWxpemF0aW9uV3JpdGVBUEkuYWRkKHtcblx0XHRcdFx0Y2hhbmdlczogW1xuXHRcdFx0XHRcdHtcblx0XHRcdFx0XHRcdGNoYW5nZVNwZWNpZmljRGF0YToge1xuXHRcdFx0XHRcdFx0XHRjaGFuZ2VUeXBlOiBcInNlbGVjdEljb25UYWJCYXJGaWx0ZXJcIixcblx0XHRcdFx0XHRcdFx0Y29udGVudDoge1xuXHRcdFx0XHRcdFx0XHRcdHNlbGVjdGVkS2V5OiBzU2VsZWN0ZWRLZXksXG5cdFx0XHRcdFx0XHRcdFx0cHJldmlvdXNTZWxlY3RlZEtleTogc1ByZXZpb3VzU2VsZWN0ZWRLZXlcblx0XHRcdFx0XHRcdFx0fVxuXHRcdFx0XHRcdFx0fSxcblx0XHRcdFx0XHRcdHNlbGVjdG9yRWxlbWVudDogb0ljb25UYWJCYXJcblx0XHRcdFx0XHR9XG5cdFx0XHRcdF1cblx0XHRcdH0pO1xuXHRcdH1cblxuXHRcdG9NdWx0aUNvbnRyb2wuX2dldFZpZXdDb250cm9sbGVyKCk/LmdldEV4dGVuc2lvbkFQSSgpPy51cGRhdGVBcHBTdGF0ZSgpO1xuXG5cdFx0b011bHRpQ29udHJvbC5maXJlRXZlbnQoXCJzZWxlY3RcIiwge1xuXHRcdFx0aWNvblRhYkJhcjogb0ljb25UYWJCYXIsXG5cdFx0XHRzZWxlY3RlZEtleTogc1NlbGVjdGVkS2V5LFxuXHRcdFx0cHJldmlvdXNLZXk6IHNQcmV2aW91c1NlbGVjdGVkS2V5XG5cdFx0fSk7XG5cdH1cblxuXHQvKipcblx0ICogSW52YWxpZGF0ZXMgdGhlIGNvbnRlbnQgb2YgYWxsIGlubmVyIGNvbnRyb2xzLlxuXHQgKi9cblx0aW52YWxpZGF0ZUNvbnRlbnQoKSB7XG5cdFx0dGhpcy5zZXRDb3VudHNPdXREYXRlZCh0cnVlKTtcblx0XHR0aGlzLl9nZXRBbGxJbm5lckNvbnRyb2xzKCkuZm9yRWFjaCgob01hY3JvQVBJKSA9PiB7XG5cdFx0XHRvTWFjcm9BUEkuaW52YWxpZGF0ZUNvbnRlbnQ/LigpO1xuXHRcdH0pO1xuXHR9XG5cblx0LyoqXG5cdCAqIFNldHMgdGhlIGNvdW50cyB0byBvdXQgb2YgZGF0ZSBvciB1cCB0byBkYXRlXG5cdCAqIElmIHRoZSBjb3VudHMgYXJlIHNldCB0byBcIm91dCBvZiBkYXRlXCIgYW5kIHRoZSBzZWxlY3RlZCBJY29uVGFiRmlsdGVyIGRvZXNuJ3QgY29udGFpbiBhbiBpbm5lciBjb250cm9sIGFsbCBpbm5lciBjb250cm9scyBhcmUgcmVxdWVzdGVkIHRvIGdldCB0aGUgbmV3IGNvdW50cy5cblx0ICpcblx0ICogQHBhcmFtIHtib29sZWFufSBiVmFsdWUgRnJlZXplIG9yIG5vdCB0aGUgY29udHJvbFxuXHQgKi9cblx0c2V0Q291bnRzT3V0RGF0ZWQoYlZhbHVlID0gdHJ1ZSkge1xuXHRcdHRoaXMuc2V0UHJvcGVydHkoXCJjb3VudHNPdXREYXRlZFwiLCBiVmFsdWUpO1xuXHRcdC8vIGlmIHRoZSBjdXJyZW50IHRhYiBpcyBub3QgY29uZmlndXJlZCB3aXRoIG5vIGlubmVyIENvbnRyb2xcblx0XHQvLyB0aGUgdGFiIGNvdW50cyBtdXN0IGJlIG1hbnVhbGx5IHJlZnJlc2hlZCBzaW5jZSBubyBNYWNybyBBUEkgd2lsbCBzZW50IGV2ZW50IGludGVybmFsRGF0YVJlcXVlc3RlZFxuXHRcdGlmIChiVmFsdWUgJiYgIXRoaXMuZ2V0U2VsZWN0ZWRJbm5lckNvbnRyb2woKSkge1xuXHRcdFx0dGhpcy5fcmVmcmVzaFRhYnNDb3VudCgpO1xuXHRcdH1cblx0fVxuXG5cdC8qKlxuXHQgKiBGcmVlemVzIHRoZSBjb250ZW50IDpcblx0ICogIC0gY29udGVudCBpcyBmcm96ZW46IHRoZSBiaW5kaW5nIG9mIHRoZSBpbm5lciBjb250cm9scyBhcmUgc3VzcGVuZGVkLlxuXHQgKiAgLSBjb250ZW50IGlzIHVuZnJvemVuOiB0aGUgYmluZGluZyBvZiBpbm5lciBjb250cm9sIHJlbGF0ZWQgdG8gdGhlIHNlbGVjdGVkIEljb25UYWJGaWx0ZXIgaXMgcmVzdW1lZC5cblx0ICpcblx0ICogQHBhcmFtIHtib29sZWFufSBiVmFsdWUgRnJlZXplIG9yIG5vdCB0aGUgY29udHJvbFxuXHQgKi9cblx0c2V0RnJlZXplQ29udGVudChiVmFsdWU6IGJvb2xlYW4pIHtcblx0XHR0aGlzLnNldFByb3BlcnR5KFwiZnJlZXplQ29udGVudFwiLCBiVmFsdWUpO1xuXHRcdHRoaXMuX3NldElubmVyQmluZGluZygpO1xuXHR9XG5cblx0LyoqXG5cdCAqIFVwZGF0ZXMgdGhlIGludGVybmFsIG1vZGVsIHdpdGggdGhlIHByb3BlcnRpZXMgdGhhdCBhcmUgbm90IGFwcGxpY2FibGUgb24gZWFjaCBJY29uVGFiRmlsdGVyIChjb250YWluaW5nIGlubmVyIGNvbnRyb2wpIGFjY29yZGluZyB0byB0aGUgZW50aXR5VHlwZSBvZiB0aGUgZmlsdGVyIGNvbnRyb2wuXG5cdCAqXG5cdCAqIEBwYXJhbSBvUmVzb3VyY2VCdW5kbGVcblx0ICovXG5cdF91cGRhdGVNdWx0aVRhYk5vdEFwcGxpY2FibGVGaWVsZHMob1Jlc291cmNlQnVuZGxlOiBSZXNvdXJjZUJ1bmRsZSkge1xuXHRcdGNvbnN0IHRhYnNNb2RlbCA9IHRoaXMuZ2V0VGFic01vZGVsKCk7XG5cdFx0Y29uc3Qgb0ZpbHRlckNvbnRyb2wgPSB0aGlzLl9nZXRGaWx0ZXJDb250cm9sKCkgYXMgQ29udHJvbDtcblx0XHRpZiAodGFic01vZGVsICYmIG9GaWx0ZXJDb250cm9sKSB7XG5cdFx0XHRjb25zdCByZXN1bHRzOiBhbnkgPSB7fTtcblx0XHRcdHRoaXMuX2dldEFsbElubmVyQ29udHJvbHMoKS5mb3JFYWNoKChvTWFjcm9BUEkpID0+IHtcblx0XHRcdFx0Y29uc3Qgb1RhYiA9IHRoaXMuX2dldFRhYkZyb21Jbm5lckNvbnRyb2wob01hY3JvQVBJKTtcblx0XHRcdFx0aWYgKG9UYWIpIHtcblx0XHRcdFx0XHRjb25zdCBzVGFiSWQgPSBvVGFiLmdldEtleSgpO1xuXHRcdFx0XHRcdGNvbnN0IG1JZ25vcmVkRmllbGRzID0gb01hY3JvQVBJLnJlZnJlc2hOb3RBcHBsaWNhYmxlRmllbGRzPy4ob0ZpbHRlckNvbnRyb2wpIHx8IFtdO1xuXHRcdFx0XHRcdHJlc3VsdHNbc1RhYklkXSA9IHtcblx0XHRcdFx0XHRcdG5vdEFwcGxpY2FibGU6IHtcblx0XHRcdFx0XHRcdFx0ZmllbGRzOiBtSWdub3JlZEZpZWxkcyxcblx0XHRcdFx0XHRcdFx0dGl0bGU6IHRoaXMuX3NldFRhYk1lc3NhZ2VTdHJpcCh7XG5cdFx0XHRcdFx0XHRcdFx0ZW50aXR5VHlwZVBhdGg6IG9GaWx0ZXJDb250cm9sLmRhdGEoXCJlbnRpdHlUeXBlXCIpLFxuXHRcdFx0XHRcdFx0XHRcdGlnbm9yZWRGaWVsZHM6IG1JZ25vcmVkRmllbGRzLFxuXHRcdFx0XHRcdFx0XHRcdHJlc291cmNlQnVuZGxlOiBvUmVzb3VyY2VCdW5kbGUsXG5cdFx0XHRcdFx0XHRcdFx0dGl0bGU6IG9UYWIuZ2V0VGV4dCgpXG5cdFx0XHRcdFx0XHRcdH0pXG5cdFx0XHRcdFx0XHR9XG5cdFx0XHRcdFx0fTtcblx0XHRcdFx0fVxuXHRcdFx0fSk7XG5cdFx0XHQodGFic01vZGVsIGFzIGFueSkuc2V0RGF0YShyZXN1bHRzKTtcblx0XHR9XG5cdH1cblxuXHRfZ2V0QWxsSW5uZXJDb250cm9scyhiT25seUZvclZpc2libGVUYWIgPSBmYWxzZSk6IElubmVyQ29udHJvbFR5cGVbXSB7XG5cdFx0cmV0dXJuIChcblx0XHRcdHRoaXMuaW5uZXJDb250cm9scy5yZWR1Y2UoKGFJbm5lckNvbnRyb2xzOiBJbm5lckNvbnRyb2xUeXBlW10sIHNJbm5lckNvbnRyb2w6IHN0cmluZykgPT4ge1xuXHRcdFx0XHRjb25zdCBvQ29udHJvbCA9IENvcmUuYnlJZChzSW5uZXJDb250cm9sKSBhcyBJbm5lckNvbnRyb2xUeXBlO1xuXHRcdFx0XHRpZiAob0NvbnRyb2wpIHtcblx0XHRcdFx0XHRhSW5uZXJDb250cm9scy5wdXNoKG9Db250cm9sKTtcblx0XHRcdFx0fVxuXHRcdFx0XHRyZXR1cm4gYUlubmVyQ29udHJvbHMuZmlsdGVyKFxuXHRcdFx0XHRcdChvSW5uZXJDb250cm9sKSA9PiAhYk9ubHlGb3JWaXNpYmxlVGFiIHx8IHRoaXMuX2dldFRhYkZyb21Jbm5lckNvbnRyb2wob0lubmVyQ29udHJvbCk/LmdldFZpc2libGUoKVxuXHRcdFx0XHQpO1xuXHRcdFx0fSwgW10pIHx8IFtdXG5cdFx0KTtcblx0fVxuXG5cdF9nZXRGaWx0ZXJDb250cm9sKCk6IEZpbHRlckJhciB8IHVuZGVmaW5lZCB7XG5cdFx0cmV0dXJuIENvcmUuYnlJZCh0aGlzLmZpbHRlckNvbnRyb2wpIGFzIEZpbHRlckJhciB8IHVuZGVmaW5lZDtcblx0fVxuXG5cdF9nZXRUYWJGcm9tSW5uZXJDb250cm9sKG9Db250cm9sOiBDb250cm9sKTogSWNvblRhYkZpbHRlciB8IHVuZGVmaW5lZCB7XG5cdFx0Y29uc3Qgc1N1cHBvcnRlZENsYXNzID0gSWNvblRhYkZpbHRlci5nZXRNZXRhZGF0YSgpLmdldE5hbWUoKTtcblx0XHRsZXQgb1RhYjogYW55ID0gb0NvbnRyb2w7XG5cdFx0aWYgKG9UYWIgJiYgIW9UYWIuaXNBKHNTdXBwb3J0ZWRDbGFzcykgJiYgb1RhYi5nZXRQYXJlbnQpIHtcblx0XHRcdG9UYWIgPSBvQ29udHJvbC5nZXRQYXJlbnQoKTtcblx0XHR9XG5cdFx0cmV0dXJuIG9UYWIgJiYgb1RhYi5pc0Eoc1N1cHBvcnRlZENsYXNzKSA/IChvVGFiIGFzIEljb25UYWJGaWx0ZXIpIDogdW5kZWZpbmVkO1xuXHR9XG5cblx0X2dldFZpZXdDb250cm9sbGVyKCkge1xuXHRcdGNvbnN0IG9WaWV3ID0gQ29tbW9uVXRpbHMuZ2V0VGFyZ2V0Vmlldyh0aGlzKTtcblx0XHRyZXR1cm4gb1ZpZXcgJiYgb1ZpZXcuZ2V0Q29udHJvbGxlcigpO1xuXHR9XG5cblx0X3JlZnJlc2hDdXN0b21WaWV3KG9GaWx0ZXJDb25kaXRpb25zOiBhbnksIHNSZWZyZXNoQ2F1c2U6IHN0cmluZykge1xuXHRcdHRoaXMuX2dldFZpZXdDb250cm9sbGVyKCk/Lm9uVmlld05lZWRzUmVmcmVzaD8uKHtcblx0XHRcdGZpbHRlckNvbmRpdGlvbnM6IG9GaWx0ZXJDb25kaXRpb25zLFxuXHRcdFx0Y3VycmVudFRhYklkOiB0aGlzLmNvbnRlbnQuZ2V0U2VsZWN0ZWRLZXkoKSxcblx0XHRcdHJlZnJlc2hDYXVzZTogc1JlZnJlc2hDYXVzZVxuXHRcdH0pO1xuXHR9XG5cblx0X3JlZnJlc2hUYWJzQ291bnQoKTogdm9pZCB7XG5cdFx0Y29uc3Qgc1NlbGVjdGVkS2V5ID0gdGhpcy5jb250ZW50LmdldFNlbGVjdGVkS2V5KCk7XG5cdFx0dGhpcy5fZ2V0QWxsSW5uZXJDb250cm9scyh0cnVlKS5mb3JFYWNoKChvTWFjcm9BUEkpID0+IHtcblx0XHRcdGNvbnN0IG9JY29uVGFiRmlsdGVyID0gdGhpcy5fZ2V0VGFiRnJvbUlubmVyQ29udHJvbChvTWFjcm9BUEkpO1xuXHRcdFx0aWYgKG9NYWNyb0FQST8uZ2V0Q291bnRzICYmICh0aGlzLmNvdW50c091dERhdGVkIHx8IHNTZWxlY3RlZEtleSA9PT0gb0ljb25UYWJGaWx0ZXI/LmdldEtleSgpKSkge1xuXHRcdFx0XHRpZiAob0ljb25UYWJGaWx0ZXIgJiYgb0ljb25UYWJGaWx0ZXIuc2V0Q291bnQpIHtcblx0XHRcdFx0XHRvSWNvblRhYkZpbHRlci5zZXRDb3VudChcIi4uLlwiKTtcblx0XHRcdFx0XHRvTWFjcm9BUElcblx0XHRcdFx0XHRcdC5nZXRDb3VudHMoKVxuXHRcdFx0XHRcdFx0LnRoZW4oKGlDb3VudDogc3RyaW5nKSA9PiBvSWNvblRhYkZpbHRlci5zZXRDb3VudChpQ291bnQgfHwgXCIwXCIpKVxuXHRcdFx0XHRcdFx0LmNhdGNoKGZ1bmN0aW9uIChvRXJyb3I6IGFueSkge1xuXHRcdFx0XHRcdFx0XHRMb2cuZXJyb3IoXCJFcnJvciB3aGlsZSByZXF1ZXN0aW5nIENvdW50cyBmb3IgQ29udHJvbFwiLCBvRXJyb3IpO1xuXHRcdFx0XHRcdFx0fSk7XG5cdFx0XHRcdH1cblx0XHRcdH1cblx0XHR9KTtcblx0XHR0aGlzLnNldENvdW50c091dERhdGVkKGZhbHNlKTtcblx0fVxuXG5cdF9zZXRJbm5lckJpbmRpbmcoYlJlcXVlc3RJZk5vdEluaXRpYWxpemVkID0gZmFsc2UpIHtcblx0XHRpZiAodGhpcy5jb250ZW50KSB7XG5cdFx0XHR0aGlzLl9nZXRBbGxJbm5lckNvbnRyb2xzKCkuZm9yRWFjaCgob01hY3JvQVBJKSA9PiB7XG5cdFx0XHRcdGNvbnN0IG9JY29uVGFiRmlsdGVyID0gdGhpcy5fZ2V0VGFiRnJvbUlubmVyQ29udHJvbChvTWFjcm9BUEkpO1xuXHRcdFx0XHRjb25zdCBiSXNTZWxlY3RlZEtleSA9IG9JY29uVGFiRmlsdGVyPy5nZXRLZXkoKSA9PT0gdGhpcy5jb250ZW50LmdldFNlbGVjdGVkS2V5KCk7XG5cdFx0XHRcdGNvbnN0IHNBY3Rpb24gPSBiSXNTZWxlY3RlZEtleSAmJiAhdGhpcy5nZXRQcm9wZXJ0eShcImZyZWV6ZUNvbnRlbnRcIikgPyBCaW5kaW5nQWN0aW9uLlJlc3VtZSA6IEJpbmRpbmdBY3Rpb24uU3VzcGVuZDtcblx0XHRcdFx0b01hY3JvQVBJW3NBY3Rpb25dPy4oc0FjdGlvbiA9PT0gQmluZGluZ0FjdGlvbi5SZXN1bWUgPyBiUmVxdWVzdElmTm90SW5pdGlhbGl6ZWQgJiYgYklzU2VsZWN0ZWRLZXkgOiB1bmRlZmluZWQpO1xuXHRcdFx0fSk7XG5cdFx0fVxuXHR9XG5cblx0X3NldFRhYk1lc3NhZ2VTdHJpcChwcm9wZXJ0aWVzOiBNZXNzYWdlU3RyaXBQcm9wZXJ0aWVzKSB7XG5cdFx0bGV0IHNUZXh0ID0gXCJcIjtcblx0XHRjb25zdCBhSWdub3JlZEZpZWxkcyA9IHByb3BlcnRpZXMuaWdub3JlZEZpZWxkcztcblx0XHRjb25zdCBvRmlsdGVyQ29udHJvbCA9IHRoaXMuX2dldEZpbHRlckNvbnRyb2woKSBhcyBDb250cm9sO1xuXHRcdGlmIChvRmlsdGVyQ29udHJvbCAmJiBBcnJheS5pc0FycmF5KGFJZ25vcmVkRmllbGRzKSAmJiBhSWdub3JlZEZpZWxkcy5sZW5ndGggPiAwICYmIHByb3BlcnRpZXMudGl0bGUpIHtcblx0XHRcdGNvbnN0IGFJZ25vcmVkTGFiZWxzID0gTWVzc2FnZVN0cmlwLmdldExhYmVscyhcblx0XHRcdFx0YUlnbm9yZWRGaWVsZHMsXG5cdFx0XHRcdHByb3BlcnRpZXMuZW50aXR5VHlwZVBhdGgsXG5cdFx0XHRcdG9GaWx0ZXJDb250cm9sLFxuXHRcdFx0XHRwcm9wZXJ0aWVzLnJlc291cmNlQnVuZGxlXG5cdFx0XHQpO1xuXHRcdFx0c1RleHQgPSBNZXNzYWdlU3RyaXAuZ2V0VGV4dChhSWdub3JlZExhYmVscywgb0ZpbHRlckNvbnRyb2wsIHByb3BlcnRpZXMudGl0bGUsIERlbGVnYXRlVXRpbC5nZXRMb2NhbGl6ZWRUZXh0KTtcblx0XHRcdHJldHVybiBzVGV4dDtcblx0XHR9XG5cdH1cblxuXHRfb25TZWFyY2gob0V2ZW50OiBDb3JlRXZlbnQpOiB2b2lkIHtcblx0XHR0aGlzLnNldENvdW50c091dERhdGVkKHRydWUpO1xuXHRcdHRoaXMuc2V0RnJlZXplQ29udGVudChmYWxzZSk7XG5cdFx0aWYgKHRoaXMuZ2V0U2VsZWN0ZWRJbm5lckNvbnRyb2woKSkge1xuXHRcdFx0dGhpcy5fdXBkYXRlTXVsdGlUYWJOb3RBcHBsaWNhYmxlRmllbGRzKHRoaXMuX2dldFZpZXdDb250cm9sbGVyKCk/Lm9SZXNvdXJjZUJ1bmRsZSk7XG5cdFx0fSBlbHNlIHtcblx0XHRcdC8vIGN1c3RvbSB0YWJcblx0XHRcdHRoaXMuX3JlZnJlc2hDdXN0b21WaWV3KG9FdmVudC5nZXRQYXJhbWV0ZXIoXCJjb25kaXRpb25zXCIpLCBcInNlYXJjaFwiKTtcblx0XHR9XG5cdH1cblxuXHRfb25GaWx0ZXJDaGFuZ2VkKG9FdmVudDogQ29yZUV2ZW50KTogdm9pZCB7XG5cdFx0aWYgKG9FdmVudC5nZXRQYXJhbWV0ZXIoXCJjb25kaXRpb25zQmFzZWRcIikpIHtcblx0XHRcdHRoaXMuc2V0RnJlZXplQ29udGVudCh0cnVlKTtcblx0XHR9XG5cdH1cbn1cblxuZXhwb3J0IGRlZmF1bHQgTXVsdGlwbGVNb2RlQ29udHJvbDtcbiJdLCJtYXBwaW5ncyI6IjtBQUFBO0FBQUE7QUFBQTs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7O01Ba0NLQSxhOzthQUFBQSxhO0lBQUFBLGE7SUFBQUEsYTtLQUFBQSxhLEtBQUFBLGE7O01BTUNDLG1CLFdBRExDLGNBQWMsQ0FBQywwREFBRCxDLFVBRWJDLFFBQVEsQ0FBQztJQUFFQyxJQUFJLEVBQUU7RUFBUixDQUFELEMsVUFHUkQsUUFBUSxDQUFDO0lBQUVDLElBQUksRUFBRSxTQUFSO0lBQW1CQyxZQUFZLEVBQUU7RUFBakMsQ0FBRCxDLFVBR1JGLFFBQVEsQ0FBQztJQUFFQyxJQUFJLEVBQUUsU0FBUjtJQUFtQkMsWUFBWSxFQUFFO0VBQWpDLENBQUQsQyxVQUdSQyxXQUFXLENBQUM7SUFBRUYsSUFBSSxFQUFFLGtCQUFSO0lBQTRCRyxRQUFRLEVBQUUsS0FBdEM7SUFBNkNDLFNBQVMsRUFBRTtFQUF4RCxDQUFELEMsVUFHWEMsV0FBVyxDQUFDO0lBQUVMLElBQUksRUFBRSxxQkFBUjtJQUErQkcsUUFBUSxFQUFFO0VBQXpDLENBQUQsQyxVQUdYRSxXQUFXLENBQUM7SUFBRUwsSUFBSSxFQUFFLGdDQUFSO0lBQTBDRyxRQUFRLEVBQUU7RUFBcEQsQ0FBRCxDLFVBR1hHLEtBQUssRTs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7OztXQUdOQyxpQixHQUFBLDZCQUFvQjtNQUFBO01BQUE7O01BQ25CLEtBQUtDLFlBQUwsR0FEbUIsQ0FDRTs7TUFFckIsSUFBTUMsYUFBYSw0QkFBRyxLQUFLQyxpQkFBTCxFQUFILDBEQUFHLHNCQUEwQkMsU0FBMUIsRUFBdEI7O01BQ0EsS0FBS0Msb0JBQUwsR0FBNEJDLE9BQTVCLENBQW9DLFVBQUNDLFNBQUQsRUFBZTtRQUFBOztRQUNsRCxJQUFJLE1BQUksQ0FB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
|