@sapui5/sap.fe.test 1.102.2 → 1.104.1
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 +3 -4
- package/src/sap/fe/test/.library +1 -1
- package/src/sap/fe/test/BaseActions.js +103 -97
- package/src/sap/fe/test/BaseArrangements.js +4 -15
- package/src/sap/fe/test/BaseAssertions.js +39 -46
- package/src/sap/fe/test/CollaborationClient.js +5 -5
- package/src/sap/fe/test/CollaborationClient.ts +5 -5
- package/src/sap/fe/test/FeMocks.js +1 -1
- package/src/sap/fe/test/FeMocks.ts +4 -3
- package/src/sap/fe/test/Flexibility.js +115 -162
- package/src/sap/fe/test/JestTemplatingHelper.js +99 -7
- package/src/sap/fe/test/JestTemplatingHelper.ts +91 -14
- package/src/sap/fe/test/JourneyRunner.js +31 -37
- package/src/sap/fe/test/ListReport.js +9 -13
- package/src/sap/fe/test/ObjectPage.js +35 -33
- package/src/sap/fe/test/Shell.js +0 -6
- package/src/sap/fe/test/TemplatePage.js +0 -2
- package/src/sap/fe/test/TemplatingTestUtils.js +20 -20
- package/src/sap/fe/test/UI5MockHelper.js +16 -10
- package/src/sap/fe/test/UI5MockHelper.ts +28 -18
- package/src/sap/fe/test/Utils.js +19 -20
- package/src/sap/fe/test/api/BaseAPI.js +11 -26
- package/src/sap/fe/test/api/ChartActions.js +116 -119
- package/src/sap/fe/test/api/ChartAssertions.js +18 -22
- package/src/sap/fe/test/api/CollaborationAPI.js +6 -6
- package/src/sap/fe/test/api/CollaborationAPI.ts +9 -11
- package/src/sap/fe/test/api/DialogAPI.js +11 -13
- package/src/sap/fe/test/api/DialogActions.js +8 -8
- package/src/sap/fe/test/api/DialogAssertions.js +9 -10
- package/src/sap/fe/test/api/DialogHelper.js +63 -0
- package/src/sap/fe/test/api/DialogMessageActions.js +2 -1
- package/src/sap/fe/test/api/DialogValueHelpActions.js +17 -39
- package/src/sap/fe/test/api/DialogValueHelpAssertions.js +47 -19
- package/src/sap/fe/test/api/FilterBarAPI.js +11 -12
- package/src/sap/fe/test/api/FilterBarActions.js +26 -40
- package/src/sap/fe/test/api/FilterBarAssertions.js +28 -47
- package/src/sap/fe/test/api/FooterActionsBase.js +3 -4
- package/src/sap/fe/test/api/FooterActionsOP.js +6 -10
- package/src/sap/fe/test/api/FooterAssertionsBase.js +5 -10
- package/src/sap/fe/test/api/FooterAssertionsOP.js +8 -13
- package/src/sap/fe/test/api/FormAPI.js +5 -6
- package/src/sap/fe/test/api/FormActions.js +11 -21
- package/src/sap/fe/test/api/FormAssertions.js +14 -20
- package/src/sap/fe/test/api/HeaderAPI.js +12 -27
- package/src/sap/fe/test/api/HeaderActions.js +10 -12
- package/src/sap/fe/test/api/HeaderActionsLR.js +76 -82
- package/src/sap/fe/test/api/HeaderAssertions.js +2 -20
- package/src/sap/fe/test/api/HeaderAssertionsLR.js +5 -8
- package/src/sap/fe/test/api/HeaderLR.js +7 -19
- package/src/sap/fe/test/api/KPICardAssertions.js +18 -37
- package/src/sap/fe/test/api/TableAPI.js +3 -13
- package/src/sap/fe/test/api/TableActions.js +2 -34
- package/src/sap/fe/test/api/TableAssertions.js +1 -24
- package/src/sap/fe/test/builder/FEBuilder.js +71 -75
- package/src/sap/fe/test/builder/MacroFieldBuilder.js +4 -3
- package/src/sap/fe/test/builder/MdcFieldBuilder.js +33 -29
- package/src/sap/fe/test/builder/MdcFilterBarBuilder.js +102 -104
- package/src/sap/fe/test/builder/MdcFilterFieldBuilder.js +9 -7
- package/src/sap/fe/test/builder/MdcTableBuilder.js +8 -4
- package/src/sap/fe/test/builder/VMBuilder.js +39 -55
- package/src/sap/fe/test/internal/ConsoleErrorChecker.js +241 -0
- package/src/sap/fe/test/internal/ConsoleErrorChecker.ts +206 -0
- package/src/sap/fe/test/internal/FEArrangements.js +28 -8
- package/src/sap/fe/test/library.js +3 -2
- package/src/sap/fe/test/library.ts +1 -0
|
@@ -2,7 +2,7 @@
|
|
|
2
2
|
* SAP UI development toolkit for HTML5 (SAPUI5)
|
|
3
3
|
* (c) Copyright 2009-2021 SAP SE. All rights reserved
|
|
4
4
|
*/
|
|
5
|
-
sap.ui.define([], function () {
|
|
5
|
+
sap.ui.define(["sap/ui/model/odata/v4/ODataMetaModel"], function (ODataMetaModel) {
|
|
6
6
|
"use strict";
|
|
7
7
|
|
|
8
8
|
var _exports = {};
|
|
@@ -11,9 +11,6 @@ sap.ui.define([], function () {
|
|
|
11
11
|
|
|
12
12
|
function _setPrototypeOf(o, p) { _setPrototypeOf = Object.setPrototypeOf || function _setPrototypeOf(o, p) { o.__proto__ = p; return o; }; return _setPrototypeOf(o, p); }
|
|
13
13
|
|
|
14
|
-
/**
|
|
15
|
-
* Mock class for a V4 Context
|
|
16
|
-
*/
|
|
17
14
|
var MockContext = /*#__PURE__*/function () {
|
|
18
15
|
function MockContext(oValues, oBinding) {
|
|
19
16
|
var _this = this;
|
|
@@ -30,15 +27,14 @@ sap.ui.define([], function () {
|
|
|
30
27
|
return _this.oValues[key];
|
|
31
28
|
});
|
|
32
29
|
this.getObject = jest.fn(function (path) {
|
|
33
|
-
var
|
|
34
|
-
var result = path ? that.oValues[path] : that.oValues;
|
|
30
|
+
var result = path ? _this.oValues[path] : _this.oValues;
|
|
35
31
|
|
|
36
32
|
if (!result && path && path.indexOf("/") > -1) {
|
|
37
33
|
var parts = path.split("/");
|
|
38
34
|
result = parts.reduce(function (sum, part) {
|
|
39
35
|
sum = part ? sum[part] : sum;
|
|
40
36
|
return sum;
|
|
41
|
-
},
|
|
37
|
+
}, _this.oValues);
|
|
42
38
|
}
|
|
43
39
|
|
|
44
40
|
return result;
|
|
@@ -141,6 +137,12 @@ sap.ui.define([], function () {
|
|
|
141
137
|
this.setAggregation = jest.fn();
|
|
142
138
|
this.filter = jest.fn();
|
|
143
139
|
this.sort = jest.fn();
|
|
140
|
+
this.getQueryOptionsFromParameters = jest.fn();
|
|
141
|
+
this.getPath = jest.fn();
|
|
142
|
+
this.isSuspended = jest.fn();
|
|
143
|
+
this.resume = jest.fn();
|
|
144
|
+
this.refresh = jest.fn();
|
|
145
|
+
this.suspend = jest.fn();
|
|
144
146
|
this.requestContexts = jest.fn(function () {
|
|
145
147
|
return Promise.resolve(_this4.aMockContexts);
|
|
146
148
|
});
|
|
@@ -190,7 +192,7 @@ sap.ui.define([], function () {
|
|
|
190
192
|
this.getValue = jest.fn(function () {
|
|
191
193
|
var _this5$mockModel;
|
|
192
194
|
|
|
193
|
-
return _this5 === null || _this5 === void 0 ? void 0 : (_this5$mockModel = _this5.mockModel) === null || _this5$mockModel === void 0 ? void 0 : _this5$mockModel.getProperty("/"
|
|
195
|
+
return _this5 === null || _this5 === void 0 ? void 0 : (_this5$mockModel = _this5.mockModel) === null || _this5$mockModel === void 0 ? void 0 : _this5$mockModel.getProperty("/".concat(_this5.mockPath));
|
|
194
196
|
});
|
|
195
197
|
this.setModel(mockModel);
|
|
196
198
|
this.setPath(mockPath);
|
|
@@ -255,6 +257,9 @@ sap.ui.define([], function () {
|
|
|
255
257
|
this.getModel = jest.fn(function () {
|
|
256
258
|
return _this7.mockModel;
|
|
257
259
|
});
|
|
260
|
+
this.setParameter = jest.fn();
|
|
261
|
+
this.execute = jest.fn().mockResolvedValue(true);
|
|
262
|
+
this.getGroupId = jest.fn();
|
|
258
263
|
this.mockModel = mockModel;
|
|
259
264
|
this.oMockContext = new MockContext(oContext || {}, this);
|
|
260
265
|
}
|
|
@@ -302,7 +307,8 @@ sap.ui.define([], function () {
|
|
|
302
307
|
});
|
|
303
308
|
});
|
|
304
309
|
this.getMetaPath = jest.fn(function (sPath) {
|
|
305
|
-
|
|
310
|
+
var metamodel = new ODataMetaModel();
|
|
311
|
+
return sPath ? metamodel.getMetaPath(sPath) : sPath;
|
|
306
312
|
});
|
|
307
313
|
this.getContext = jest.fn();
|
|
308
314
|
this.oMetaContext = new MockContext(oMetaData || {});
|
|
@@ -429,4 +435,4 @@ sap.ui.define([], function () {
|
|
|
429
435
|
_exports.mockMVC = mockMVC;
|
|
430
436
|
return _exports;
|
|
431
437
|
}, false);
|
|
432
|
-
//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIlVJNU1vY2tIZWxwZXIudHMiXSwibmFtZXMiOlsiTW9ja0NvbnRleHQiLCJvVmFsdWVzIiwib0JpbmRpbmciLCJpc0tlcHRBbGl2ZSIsImdldFByb3BlcnR5IiwiamVzdCIsImZuIiwia2V5IiwicmVxdWVzdFByb3BlcnR5IiwiUHJvbWlzZSIsInJlc29sdmUiLCJzZXRQcm9wZXJ0eSIsInZhbHVlIiwiZ2V0T2JqZWN0IiwicGF0aCIsInRoYXQiLCJyZXN1bHQiLCJpbmRleE9mIiwicGFydHMiLCJzcGxpdCIsInJlZHVjZSIsInN1bSIsInBhcnQiLCJnZXRQYXRoIiwiZ2V0QmluZGluZyIsImdldE1vZGVsIiwiaXNUcmFuc2llbnQiLCJzZXRLZWVwQWxpdmUiLCJib29sIiwiX2ZuT25CZWZvcmVEZXN0cm95IiwiX2JSZXF1ZXN0TWVzc2FnZXMiLCJpc0tlZXBBbGl2ZSIsInJlcXVlc3RTaWRlRWZmZWN0cyIsInJlcXVlc3RPYmplY3QiLCJpc0EiLCJzQ2xhc3NOYW1lIiwiTW9ja1VJNUVsZW1lbnQiLCJiaW5kaW5nQ29udGV4dCIsImdldEJpbmRpbmdDb250ZXh0IiwibW9ja1JldHVyblZhbHVlIiwiZ2V0QmluZGluZ0luZm8iLCJkYXRhIiwiZ2V0UGFyZW50IiwiTW9ja0NvbnRyb2wiLCJNb2NrRXZlbnQiLCJwYXJhbXMiLCJzb3VyY2UiLCJnZXRQYXJhbWV0ZXIiLCJuYW1lIiwiZ2V0U291cmNlIiwiTW9ja0xpc3RCaW5kaW5nIiwiYUNvbnRleHRzIiwibW9ja01vZGVsIiwic2V0QWdncmVnYXRpb24iLCJmaWx0ZXIiLCJzb3J0IiwicmVxdWVzdENvbnRleHRzIiwiYU1vY2tDb250ZXh0cyIsImdldEN1cnJlbnRDb250ZXh0cyIsImdldFVwZGF0ZUdyb3VwSWQiLCJtYXAiLCJjb250ZXh0Iiwic2V0TW9kZWwiLCJvTW9kZWwiLCJNb2NrUHJvcGVydHlCaW5kaW5nIiwibW9ja1BhdGgiLCJnZXRWYWx1ZSIsInNldFBhdGgiLCJNb2NrQ29tcG9zaXRlQmluZGluZyIsImFCaW5kaW5ncyIsImdldEJpbmRpbmdzIiwiYmluZGluZyIsIk1vY2tDb250ZXh0QmluZGluZyIsIm9Db250ZXh0IiwiZ2V0Qm91bmRDb250ZXh0Iiwib01vY2tDb250ZXh0IiwiYXR0YWNoRXZlbnRPbmNlIiwiZ2V0SW50ZXJuYWxNb2NrQ29udGV4dCIsIk1vY2tNZXRhTW9kZWwiLCJvTWV0YURhdGEiLCJnZXRNZXRhQ29udGV4dCIsInNQYXRoIiwiJHBhdGgiLCJvTWV0YUNvbnRleHQiLCJjcmVhdGVCaW5kaW5nQ29udGV4dCIsImdldE1ldGFQYXRoIiwiZ2V0Q29udGV4dCIsIk1vY2tNb2RlbCIsIm1vY2tMaXN0QmluZGluZyIsIm1vY2tDb250ZXh0QmluZGluZyIsImJpbmRMaXN0IiwiYmluZENvbnRleHQiLCJnZXRNZXRhTW9kZWwiLCJvTWV0YU1vZGVsIiwiZ2V0S2VlcEFsaXZlQ29udGV4dCIsIm1vZGVsRnJvbUxpc3RCaW5kaW5nIiwibW9kZWxGcm9tQ29udGV4dEJpbmRpbmciLCJ1bmRlZmluZWQiLCJzZXRNZXRhTW9kZWwiLCJNb2NrVmlldyIsImdldENvbnRyb2xsZXIiLCJnZXRWaWV3RGF0YSIsImdldElkIiwiTW9ja0NvbnRyb2xsZXIiLCJnZXRWaWV3IiwiX3JvdXRpbmciLCJuYXZpZ2F0ZVRvVGFyZ2V0IiwiX2VkaXRGbG93Iiwic3luY1Rhc2siLCJfc2lkZUVmZmVjdHMiLCJoYW5kbGVGaWVsZENoYW5nZSIsIm1vY2tNVkMiLCJleGlzdGluZyIsIm1vZGVsIiwidmlldyIsImNvbnRyb2xsZXIiXSwibWFwcGluZ3MiOiI7QUFBQTtBQUNBO0FBQ0E7Ozs7Ozs7Ozs7QUFGQTtBQUNBO0FBQ0E7TUFlYUEsVztBQUVaLHlCQUEyQkMsT0FBM0IsRUFBa0RDLFFBQWxELEVBQWtFO0FBQUE7O0FBQUEsV0FEMURDLFdBQzBELEdBRDVDLEtBQzRDO0FBQUEsV0FNM0RDLFdBTjJELEdBTTdDQyxJQUFJLENBQUNDLEVBQUwsQ0FBUSxVQUFDQyxHQUFELEVBQWlCO0FBQzdDLGVBQU8sS0FBSSxDQUFDTixPQUFMLENBQWFNLEdBQWIsQ0FBUDtBQUNBLE9BRm9CLENBTjZDO0FBQUEsV0FTM0RDLGVBVDJELEdBU3pDSCxJQUFJLENBQUNDLEVBQUwsQ0FBUSxVQUFDQyxHQUFELEVBQWlCO0FBQ2pELGVBQU9FLE9BQU8sQ0FBQ0MsT0FBUixDQUFnQixLQUFJLENBQUNULE9BQUwsQ0FBYU0sR0FBYixDQUFoQixDQUFQO0FBQ0EsT0FGd0IsQ0FUeUM7QUFBQSxXQVkzREksV0FaMkQsR0FZN0NOLElBQUksQ0FBQ0MsRUFBTCxDQUFRLFVBQUNDLEdBQUQsRUFBY0ssS0FBZCxFQUE2QjtBQUN6RCxRQUFBLEtBQUksQ0FBQ1gsT0FBTCxDQUFhTSxHQUFiLElBQW9CSyxLQUFwQjtBQUNBLGVBQU8sS0FBSSxDQUFDWCxPQUFMLENBQWFNLEdBQWIsQ0FBUDtBQUNBLE9BSG9CLENBWjZDO0FBQUEsV0FpQjNETSxTQWpCMkQsR0FpQi9DUixJQUFJLENBQUNDLEVBQUwsQ0FBUSxVQUFDUSxJQUFELEVBQWtCO0FBQzVDLFlBQU1DLElBQUksR0FBRyxLQUFiO0FBQ0EsWUFBSUMsTUFBTSxHQUFHRixJQUFJLEdBQUdDLElBQUksQ0FBQ2QsT0FBTCxDQUFhYSxJQUFiLENBQUgsR0FBd0JDLElBQUksQ0FBQ2QsT0FBOUM7O0FBRUEsWUFBSSxDQUFDZSxNQUFELElBQVdGLElBQVgsSUFBbUJBLElBQUksQ0FBQ0csT0FBTCxDQUFhLEdBQWIsSUFBb0IsQ0FBQyxDQUE1QyxFQUErQztBQUM5QyxjQUFNQyxLQUFLLEdBQUdKLElBQUksQ0FBQ0ssS0FBTCxDQUFXLEdBQVgsQ0FBZDtBQUNBSCxVQUFBQSxNQUFNLEdBQUdFLEtBQUssQ0FBQ0UsTUFBTixDQUFhLFVBQUNDLEdBQUQsRUFBTUMsSUFBTixFQUFvQjtBQUN6Q0QsWUFBQUEsR0FBRyxHQUFHQyxJQUFJLEdBQUdELEdBQUcsQ0FBQ0MsSUFBRCxDQUFOLEdBQWVELEdBQXpCO0FBQ0EsbUJBQU9BLEdBQVA7QUFDQSxXQUhRLEVBR05OLElBQUksQ0FBQ2QsT0FIQyxDQUFUO0FBSUE7O0FBRUQsZUFBT2UsTUFBUDtBQUNBLE9BYmtCLENBakIrQztBQUFBLFdBK0IzRE8sT0EvQjJELEdBK0JqRGxCLElBQUksQ0FBQ0MsRUFBTCxDQUFRLFlBQU07QUFDOUIsZUFBTyxLQUFJLENBQUNMLE9BQUwsQ0FBYSxPQUFiLENBQVA7QUFDQSxPQUZnQixDQS9CaUQ7QUFBQSxXQW1DM0R1QixVQW5DMkQsR0FtQzlDbkIsSUFBSSxDQUFDQyxFQUFMLENBQVEsWUFBTTtBQUNqQyxlQUFPLEtBQUksQ0FBQ0osUUFBWjtBQUNBLE9BRm1CLENBbkM4QztBQUFBLFdBc0MzRHVCLFFBdEMyRCxHQXNDaERwQixJQUFJLENBQUNDLEVBQUwsQ0FBUSxZQUFNO0FBQUE7O0FBQy9CLGlDQUFPLEtBQUksQ0FBQ0osUUFBWixtREFBTyxlQUFldUIsUUFBZixFQUFQO0FBQ0EsT0FGaUIsQ0F0Q2dEO0FBQUEsV0F5QzNEQyxXQXpDMkQsR0F5QzdDckIsSUFBSSxDQUFDQyxFQUFMLEVBekM2QztBQUFBLFdBMkMzRHFCLFlBM0MyRCxHQTJDNUN0QixJQUFJLENBQUNDLEVBQUwsQ0FBUSxVQUFDc0IsSUFBRCxFQUFnQkMsa0JBQWhCLEVBQTBDQyxpQkFBMUMsRUFBMEU7QUFDdkcsUUFBQSxLQUFJLENBQUMzQixXQUFMLEdBQW1CeUIsSUFBbkI7QUFDQSxPQUZxQixDQTNDNEM7QUFBQSxXQThDM0RHLFdBOUMyRCxHQThDN0MxQixJQUFJLENBQUNDLEVBQUwsQ0FBUTtBQUFBLGVBQU0sS0FBSSxDQUFDSCxXQUFYO0FBQUEsT0FBUixDQTlDNkM7QUFBQSxXQStDM0Q2QixrQkEvQzJELEdBK0N0QzNCLElBQUksQ0FBQ0MsRUFBTCxFQS9Dc0M7QUFBQSxXQWdEM0QyQixhQWhEMkQsR0FnRDNDNUIsSUFBSSxDQUFDQyxFQUFMLEVBaEQyQztBQUFBLFdBQXZDTCxPQUF1QyxHQUF2Q0EsT0FBdUM7QUFBQSxXQUFoQkMsUUFBZ0IsR0FBaEJBLFFBQWdCO0FBQUU7Ozs7O1dBRTdEZ0MsRyxHQUFQLGFBQVdDLFVBQVgsRUFBd0M7QUFDdkMsYUFBT0EsVUFBVSxLQUFLLCtCQUF0QjtBQUNBLEs7Ozs7Ozs7TUErQ1dDLGM7U0FFTEMsYyxHQUFpQixJQUFJckMsV0FBSixDQUFnQixFQUFoQixDO1NBQ2pCd0IsVSxHQUFhbkIsSUFBSSxDQUFDQyxFQUFMLEU7U0FDYmdDLGlCLEdBQW9CakMsSUFBSSxDQUFDQyxFQUFMLEdBQVVpQyxlQUFWLENBQTBCLEtBQUtGLGNBQS9CLEM7U0FDcEJHLGMsR0FBaUJuQyxJQUFJLENBQUNDLEVBQUwsRTtTQUNqQm1DLEksR0FBT3BDLElBQUksQ0FBQ0MsRUFBTCxFO1NBQ1BtQixRLEdBQVdwQixJQUFJLENBQUNDLEVBQUwsRTtTQUNYb0MsUyxHQUFZckMsSUFBSSxDQUFDQyxFQUFMLEU7Ozs7O01BR1BxQyxXOzs7Ozs7Ozs7OzthQUNMTCxpQixHQUF5Q2pDLElBQUksQ0FBQ0MsRUFBTCxFO2FBQ3pDbUIsUSxHQUFnQ3BCLElBQUksQ0FBQ0MsRUFBTCxFOzs7Ozs7SUFGUDhCLGM7Ozs7TUFLcEJRLFMsR0FDWixxQkFBcUg7QUFBQTs7QUFBQSxRQUEzRkMsTUFBMkYsdUVBQTFELEVBQTBEO0FBQUEsUUFBL0NDLE1BQStDLHVFQUF0QixJQUFJVixjQUFKLEVBQXNCO0FBQUEsU0FFOUdXLFlBRjhHLEdBRS9GMUMsSUFBSSxDQUFDQyxFQUFMLENBQVEsVUFBQzBDLElBQUQ7QUFBQSxhQUFVLE1BQUksQ0FBQ0gsTUFBTCxDQUFZRyxJQUFaLENBQVY7QUFBQSxLQUFSLENBRitGO0FBQUEsU0FJOUdDLFNBSjhHLEdBSWxHNUMsSUFBSSxDQUFDQyxFQUFMLENBQVE7QUFBQSxhQUFNLE1BQUksQ0FBQ3dDLE1BQVg7QUFBQSxLQUFSLENBSmtHO0FBQUEsU0FBM0ZELE1BQTJGLEdBQTNGQSxNQUEyRjtBQUFBLFNBQS9DQyxNQUErQyxHQUEvQ0EsTUFBK0M7QUFBRSxHO0FBT3hIO0FBQ0E7QUFDQTs7Ozs7TUFDYUksZTtBQUdaLDZCQUFtQkMsU0FBbkIsRUFBOENDLFNBQTlDLEVBQXFFO0FBQUE7O0FBQUEsV0FpQjlEQyxjQWpCOEQsR0FpQjdDaEQsSUFBSSxDQUFDQyxFQUFMLEVBakI2QztBQUFBLFdBa0I5RGdELE1BbEI4RCxHQWtCckRqRCxJQUFJLENBQUNDLEVBQUwsRUFsQnFEO0FBQUEsV0FtQjlEaUQsSUFuQjhELEdBbUJ2RGxELElBQUksQ0FBQ0MsRUFBTCxFQW5CdUQ7QUFBQSxXQXNCOURrRCxlQXRCOEQsR0FzQjVDbkQsSUFBSSxDQUFDQyxFQUFMLENBQVEsWUFBYTtBQUM3QyxlQUFPRyxPQUFPLENBQUNDLE9BQVIsQ0FBZ0IsTUFBSSxDQUFDK0MsYUFBckIsQ0FBUDtBQUNBLE9BRndCLENBdEI0QztBQUFBLFdBMEI5REMsa0JBMUI4RCxHQTBCekNyRCxJQUFJLENBQUNDLEVBQUwsQ0FBUSxZQUFhO0FBQ2hELGVBQU8sTUFBSSxDQUFDbUQsYUFBWjtBQUNBLE9BRjJCLENBMUJ5QztBQUFBLFdBNkI5RGhDLFFBN0I4RCxHQTZCbkRwQixJQUFJLENBQUNDLEVBQUwsQ0FBUSxZQUFNO0FBQy9CLGVBQU8sTUFBSSxDQUFDOEMsU0FBWjtBQUNBLE9BRmlCLENBN0JtRDtBQUFBLFdBZ0M5RE8sZ0JBaEM4RCxHQWdDM0N0RCxJQUFJLENBQUNDLEVBQUwsQ0FBUTtBQUFBLGVBQU0sTUFBTjtBQUFBLE9BQVIsQ0FoQzJDO0FBQUEsV0FBdkI4QyxTQUF1QixHQUF2QkEsU0FBdUI7QUFDcEVELE1BQUFBLFNBQVMsR0FBR0EsU0FBUyxJQUFJLEVBQXpCO0FBRUEsV0FBS00sYUFBTCxHQUFxQk4sU0FBUyxDQUFDUyxHQUFWLENBQWMsVUFBQ0MsT0FBRCxFQUFhO0FBQy9DLGVBQU8sSUFBSTdELFdBQUosQ0FBZ0I2RCxPQUFoQixFQUF5QixNQUF6QixDQUFQO0FBQ0EsT0FGb0IsQ0FBckI7QUFHQTs7Ozs7WUFFTTNCLEcsR0FBUCxhQUFXQyxVQUFYLEVBQXdDO0FBQ3ZDLGFBQU9BLFVBQVUsS0FBSyx3Q0FBdEI7QUFDQSxLOztZQUVNMkIsUSxHQUFQLGtCQUFnQkMsTUFBaEIsRUFBbUM7QUFDbEMsV0FBS1gsU0FBTCxHQUFpQlcsTUFBakI7QUFDQSxLLENBRUQ7Ozs7Ozs7O01BbUJZQyxtQjtBQUlaLGlDQUFtQlosU0FBbkIsRUFBeUNhLFFBQXpDLEVBQTJEO0FBQUE7O0FBQUEsV0FZcER4QyxRQVpvRCxHQVl6Q3BCLElBQUksQ0FBQ0MsRUFBTCxDQUFRLFlBQU07QUFDL0IsZUFBTyxNQUFJLENBQUM4QyxTQUFaO0FBQ0EsT0FGaUIsQ0FaeUM7QUFBQSxXQW1CcEQ3QixPQW5Cb0QsR0FtQjFDbEIsSUFBSSxDQUFDQyxFQUFMLENBQVEsWUFBTTtBQUM5QixlQUFPLE1BQUksQ0FBQzJELFFBQVo7QUFDQSxPQUZnQixDQW5CMEM7QUFBQSxXQXVCcERDLFFBdkJvRCxHQXVCekM3RCxJQUFJLENBQUNDLEVBQUwsQ0FBUSxZQUFNO0FBQUE7O0FBQy9CLGVBQU8sTUFBUCxhQUFPLE1BQVAsMkNBQU8sTUFBSSxDQUFFOEMsU0FBYixxREFBTyxpQkFBaUJoRCxXQUFqQixDQUE2QixNQUFNLE1BQUksQ0FBQzZELFFBQXhDLENBQVA7QUFDQSxPQUZpQixDQXZCeUM7QUFDMUQsV0FBS0gsUUFBTCxDQUFjVixTQUFkO0FBQ0EsV0FBS2UsT0FBTCxDQUFhRixRQUFiO0FBQ0E7Ozs7O1lBRU0vQixHLEdBQVAsYUFBV0MsVUFBWCxFQUF3QztBQUN2QyxhQUFPQSxVQUFVLEtBQUssNENBQXRCO0FBQ0EsSzs7WUFFTTJCLFEsR0FBUCxrQkFBZ0JDLE1BQWhCLEVBQW1DO0FBQ2xDLFdBQUtYLFNBQUwsR0FBaUJXLE1BQWpCO0FBQ0EsSzs7WUFLTUksTyxHQUFQLGlCQUFlckQsSUFBZixFQUF5QztBQUN4QyxXQUFLbUQsUUFBTCxHQUFnQm5ELElBQUksR0FBR0EsSUFBSCxHQUFVLEVBQTlCO0FBQ0EsSzs7Ozs7OztNQVVXc0Qsb0I7QUFHWixrQ0FBbUJDLFNBQW5CLEVBQXFEO0FBQUE7O0FBQUEsV0FROUNDLFdBUjhDLEdBUWhDakUsSUFBSSxDQUFDQyxFQUFMLENBQVEsWUFBTTtBQUNsQyxlQUFPLE1BQUksQ0FBQytELFNBQVo7QUFDQSxPQUZvQixDQVJnQztBQUFBLFdBWTlDSCxRQVo4QyxHQVluQzdELElBQUksQ0FBQ0MsRUFBTCxDQUFRLFlBQU07QUFDL0IsZUFBTyxNQUFJLENBQUMrRCxTQUFMLENBQWVULEdBQWYsQ0FBbUIsVUFBQ1csT0FBRDtBQUFBLGlCQUFhQSxPQUFPLENBQUNMLFFBQVIsRUFBYjtBQUFBLFNBQW5CLENBQVA7QUFDQSxPQUZpQixDQVptQztBQUNwRCxXQUFLRyxTQUFMLEdBQWlCQSxTQUFqQjtBQUNBOzs7OztZQUVNbkMsRyxHQUFQLGFBQVdDLFVBQVgsRUFBd0M7QUFDdkMsYUFBT0EsVUFBVSxLQUFLLCtCQUF0QjtBQUNBLEs7Ozs7Ozs7TUFXV3FDLGtCO0FBSVosZ0NBQW1CQyxRQUFuQixFQUEyQ3JCLFNBQTNDLEVBQWtFO0FBQUE7O0FBQUEsV0FGMURqRCxXQUUwRCxHQUZuQyxLQUVtQztBQUFBLFdBZTNEdUUsZUFmMkQsR0FlekNyRSxJQUFJLENBQUNDLEVBQUwsQ0FBUSxZQUFNO0FBQ3RDLGVBQU8sTUFBSSxDQUFDcUUsWUFBWjtBQUNBLE9BRndCLENBZnlDO0FBQUEsV0FrQjNEQyxlQWxCMkQsR0FrQnpDdkUsSUFBSSxDQUFDQyxFQUFMLEVBbEJ5QztBQUFBLFdBbUIzRG1CLFFBbkIyRCxHQW1CaERwQixJQUFJLENBQUNDLEVBQUwsQ0FBUSxZQUFNO0FBQy9CLGVBQU8sTUFBSSxDQUFDOEMsU0FBWjtBQUNBLE9BRmlCLENBbkJnRDtBQUFBLFdBQXZCQSxTQUF1QixHQUF2QkEsU0FBdUI7QUFDakUsV0FBS3VCLFlBQUwsR0FBb0IsSUFBSTNFLFdBQUosQ0FBZ0J5RSxRQUFRLElBQUksRUFBNUIsRUFBZ0MsSUFBaEMsQ0FBcEI7QUFDQTs7Ozs7WUFFTXZDLEcsR0FBUCxhQUFXQyxVQUFYLEVBQXdDO0FBQ3ZDLGFBQU9BLFVBQVUsS0FBSywyQ0FBdEI7QUFDQSxLOztZQUNNMEMsc0IsR0FBUCxrQ0FBNkM7QUFDNUMsYUFBTyxLQUFLRixZQUFaO0FBQ0EsSzs7WUFDTWIsUSxHQUFQLGtCQUFnQkMsTUFBaEIsRUFBbUM7QUFDbEMsV0FBS1gsU0FBTCxHQUFpQlcsTUFBakI7QUFDQSxLLENBRUQ7Ozs7O0FBVUQ7QUFDQTtBQUNBOzs7OztNQUNhZSxhLEdBSVosdUJBQW1CQyxTQUFuQixFQUFvQztBQUFBOztBQUFBLFNBTTdCQyxjQU42QixHQU1aM0UsSUFBSSxDQUFDQyxFQUFMLENBQVEsVUFBQzJFLEtBQUQsRUFBbUI7QUFDbEQsYUFBTyxJQUFJakYsV0FBSixDQUFnQjtBQUFFa0YsUUFBQUEsS0FBSyxFQUFFRDtBQUFULE9BQWhCLENBQVA7QUFDQSxLQUZ1QixDQU5ZO0FBQUEsU0FTN0JwRSxTQVQ2QixHQVNqQlIsSUFBSSxDQUFDQyxFQUFMLENBQVEsVUFBQzJFLEtBQUQsRUFBbUI7QUFDN0MsYUFBTyxNQUFJLENBQUNFLFlBQUwsQ0FBa0IvRSxXQUFsQixDQUE4QjZFLEtBQTlCLENBQVA7QUFDQSxLQUZrQixDQVRpQjtBQUFBLFNBWTdCaEQsYUFaNkIsR0FZYjVCLElBQUksQ0FBQ0MsRUFBTCxFQVphO0FBQUEsU0FhN0I4RSxvQkFiNkIsR0FhTi9FLElBQUksQ0FBQ0MsRUFBTCxDQUFRLFVBQUMyRSxLQUFELEVBQW1CO0FBQ3hELGFBQU8sSUFBSWpGLFdBQUosQ0FBZ0I7QUFBRWtGLFFBQUFBLEtBQUssRUFBRUQ7QUFBVCxPQUFoQixDQUFQO0FBQ0EsS0FGNkIsQ0FiTTtBQUFBLFNBZ0I3QkksV0FoQjZCLEdBZ0JmaEYsSUFBSSxDQUFDQyxFQUFMLENBQVEsVUFBQzJFLEtBQUQsRUFBbUI7QUFDL0MsYUFBT0EsS0FBUDtBQUNBLEtBRm9CLENBaEJlO0FBQUEsU0FtQjdCSyxVQW5CNkIsR0FtQmhCakYsSUFBSSxDQUFDQyxFQUFMLEVBbkJnQjtBQUNuQyxTQUFLNkUsWUFBTCxHQUFvQixJQUFJbkYsV0FBSixDQUFnQitFLFNBQVMsSUFBSSxFQUE3QixDQUFwQjtBQUNBLEcsQ0FFRDtBQUNBOztBQWlCRDtBQUNBO0FBQ0E7Ozs7O01BRWFRLFM7QUFHWix1QkFBMkJDLGVBQTNCLEVBQXNFQyxrQkFBdEUsRUFBK0c7QUFBQTs7QUFBQSxXQXVCeEdDLFFBdkJ3RyxHQXVCN0ZyRixJQUFJLENBQUNDLEVBQUwsQ0FBUSxZQUFhO0FBQ3RDLGVBQU8sTUFBSSxDQUFDa0YsZUFBWjtBQUNBLE9BRmlCLENBdkI2RjtBQUFBLFdBMkJ4R0csV0EzQndHLEdBMkIxRnRGLElBQUksQ0FBQ0MsRUFBTCxDQUFRLFlBQWE7QUFDekMsZUFBTyxNQUFJLENBQUNtRixrQkFBWjtBQUNBLE9BRm9CLENBM0IwRjtBQUFBLFdBOEJ4R0csWUE5QndHLEdBOEJ6RnZGLElBQUksQ0FBQ0MsRUFBTCxDQUFRLFlBQU07QUFDbkMsZUFBTyxNQUFJLENBQUN1RixVQUFaO0FBQ0EsT0FGcUIsQ0E5QnlGO0FBQUEsV0FrQ3hHekYsV0FsQ3dHLEdBa0MxRkMsSUFBSSxDQUFDQyxFQUFMLEVBbEMwRjtBQUFBLFdBbUN4R0ssV0FuQ3dHLEdBbUMxRk4sSUFBSSxDQUFDQyxFQUFMLEVBbkMwRjtBQUFBLFdBb0N4RzJCLGFBcEN3RyxHQW9DeEY1QixJQUFJLENBQUNDLEVBQUwsRUFwQ3dGO0FBQUEsV0FxQ3hHd0YsbUJBckN3RyxHQXFDbEZ6RixJQUFJLENBQUNDLEVBQUwsRUFyQ2tGO0FBQUEsV0FBcEZrRixlQUFvRixHQUFwRkEsZUFBb0Y7QUFBQSxXQUF6Q0Msa0JBQXlDLEdBQXpDQSxrQkFBeUM7O0FBQzlHLFVBQUlELGVBQUosRUFBcUI7QUFDcEJBLFFBQUFBLGVBQWUsQ0FBQzFCLFFBQWhCLENBQXlCLElBQXpCO0FBQ0E7O0FBQ0QsVUFBSTJCLGtCQUFKLEVBQXdCO0FBQ3ZCQSxRQUFBQSxrQkFBa0IsQ0FBQzNCLFFBQW5CLENBQTRCLElBQTVCO0FBQ0E7QUFDRCxLLENBRUQ7Ozs7O2NBQ09pQyxvQixHQUFQLDhCQUE0QlAsZUFBNUIsRUFBeUU7QUFDeEUsYUFBTyxJQUFJRCxTQUFKLENBQWNDLGVBQWQsQ0FBUDtBQUNBLEs7O2NBQ01RLHVCLEdBQVAsaUNBQStCUCxrQkFBL0IsRUFBa0Y7QUFDakYsYUFBTyxJQUFJRixTQUFKLENBQWNVLFNBQWQsRUFBeUJSLGtCQUF6QixDQUFQO0FBQ0EsSzs7OztZQUVNUyxZLEdBQVAsc0JBQW9CTCxVQUFwQixFQUErQztBQUM5QyxXQUFLQSxVQUFMLEdBQWtCQSxVQUFsQjtBQUNBLEssQ0FFRDtBQUNBOzs7Ozs7OztNQWtCWU0sUTs7V0FDTEMsYSxHQUFnQi9GLElBQUksQ0FBQ0MsRUFBTCxFO1dBRWhCZ0MsaUIsR0FBb0JqQyxJQUFJLENBQUNDLEVBQUwsRTtXQUVwQm1CLFEsR0FBV3BCLElBQUksQ0FBQ0MsRUFBTCxFO1dBRVgrRixXLEdBQWNoRyxJQUFJLENBQUNDLEVBQUwsRTtXQU1kZ0csSyxHQUFRakcsSUFBSSxDQUFDQyxFQUFMLEU7Ozs7OztZQUpSNEIsRyxHQUFQLGFBQVdDLFVBQVgsRUFBd0M7QUFDdkMsYUFBT0EsVUFBVSxLQUFLLHNCQUF0QjtBQUNBLEs7Ozs7Ozs7TUFLV29FLGM7U0FDTEMsTyxHQUFVbkcsSUFBSSxDQUFDQyxFQUFMLEdBQVVpQyxlQUFWLENBQTBCLElBQUk0RCxRQUFKLEVBQTFCLEM7U0FFVk0sUSxHQUFXO0FBQ2pCQyxNQUFBQSxnQkFBZ0IsRUFBRXJHLElBQUksQ0FBQ0MsRUFBTDtBQURELEs7U0FJWHFHLFMsR0FBWTtBQUNsQkMsTUFBQUEsUUFBUSxFQUFFdkcsSUFBSSxDQUFDQyxFQUFMO0FBRFEsSztTQUladUcsWSxHQUFlO0FBQ3JCQyxNQUFBQSxpQkFBaUIsRUFBRXpHLElBQUksQ0FBQ0MsRUFBTDtBQURFLEs7U0FJdEI0QixHLEdBQU03QixJQUFJLENBQUNDLEVBQUwsR0FBVWlDLGVBQVYsQ0FBMEIsS0FBMUIsQzs7Ozs7QUFTUDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDTyxXQUFTd0UsT0FBVCxDQUFpQkMsUUFBakIsRUFBdUQ7QUFDN0QsUUFBTUMsS0FBSyxHQUFHLENBQUFELFFBQVEsU0FBUixJQUFBQSxRQUFRLFdBQVIsWUFBQUEsUUFBUSxDQUFFQyxLQUFWLEtBQW1CLElBQUkxQixTQUFKLEVBQWpDO0FBQ0EsUUFBTTJCLElBQUksR0FBRyxDQUFBRixRQUFRLFNBQVIsSUFBQUEsUUFBUSxXQUFSLFlBQUFBLFFBQVEsQ0FBRUUsSUFBVixLQUFrQixJQUFJZixRQUFKLEVBQS9CO0FBQ0EsUUFBTWdCLFVBQVUsR0FBRyxDQUFBSCxRQUFRLFNBQVIsSUFBQUEsUUFBUSxXQUFSLFlBQUFBLFFBQVEsQ0FBRUcsVUFBVixLQUF3QixJQUFJWixjQUFKLEVBQTNDO0FBRUFXLElBQUFBLElBQUksQ0FBQ2QsYUFBTCxDQUFtQjdELGVBQW5CLENBQW1DNEUsVUFBbkM7QUFDQUQsSUFBQUEsSUFBSSxDQUFDekYsUUFBTCxDQUFjYyxlQUFkLENBQThCMEUsS0FBOUI7QUFDQUUsSUFBQUEsVUFBVSxDQUFDWCxPQUFYLENBQW1CakUsZUFBbkIsQ0FBbUMyRSxJQUFuQztBQUVBLFdBQU87QUFBRUQsTUFBQUEsS0FBSyxFQUFMQSxLQUFGO0FBQVNDLE1BQUFBLElBQUksRUFBSkEsSUFBVDtBQUFlQyxNQUFBQSxVQUFVLEVBQVZBO0FBQWYsS0FBUDtBQUNBIiwic291cmNlUm9vdCI6Ii4iLCJzb3VyY2VzQ29udGVudCI6WyIvKipcbiAqIE1vY2sgY2xhc3MgZm9yIGEgVjQgQ29udGV4dFxuICovXG5pbXBvcnQgRXZlbnQgZnJvbSBcInNhcC91aS9iYXNlL0V2ZW50XCI7XG5pbXBvcnQgQ29udHJvbCBmcm9tIFwic2FwL3VpL2NvcmUvQ29udHJvbFwiO1xuaW1wb3J0IFVJNUVsZW1lbnQgZnJvbSBcInNhcC91aS9jb3JlL0VsZW1lbnRcIjtcbmltcG9ydCBDb250cm9sbGVyIGZyb20gXCJzYXAvdWkvY29yZS9tdmMvQ29udHJvbGxlclwiO1xuaW1wb3J0IFZpZXcgZnJvbSBcInNhcC91aS9jb3JlL212Yy9WaWV3XCI7XG5pbXBvcnQgQ29tcG9zaXRlQmluZGluZyBmcm9tIFwic2FwL3VpL21vZGVsL0NvbXBvc2l0ZUJpbmRpbmdcIjtcbmltcG9ydCBKU09OTW9kZWwgZnJvbSBcInNhcC91aS9tb2RlbC9qc29uL0pTT05Nb2RlbFwiO1xuaW1wb3J0IENvbnRleHQgZnJvbSBcInNhcC91aS9tb2RlbC9vZGF0YS92NC9Db250ZXh0XCI7XG5pbXBvcnQgT0RhdGFDb250ZXh0QmluZGluZyBmcm9tIFwic2FwL3VpL21vZGVsL29kYXRhL3Y0L09EYXRhQ29udGV4dEJpbmRpbmdcIjtcbmltcG9ydCBPRGF0YUxpc3RCaW5kaW5nIGZyb20gXCJzYXAvdWkvbW9kZWwvb2RhdGEvdjQvT0RhdGFMaXN0QmluZGluZ1wiO1xuaW1wb3J0IE9EYXRhTWV0YU1vZGVsIGZyb20gXCJzYXAvdWkvbW9kZWwvb2RhdGEvdjQvT0RhdGFNZXRhTW9kZWxcIjtcbmltcG9ydCBPRGF0YU1vZGVsIGZyb20gXCJzYXAvdWkvbW9kZWwvb2RhdGEvdjQvT0RhdGFNb2RlbFwiO1xuaW1wb3J0IE9EYXRhUHJvcGVydHlCaW5kaW5nIGZyb20gXCJzYXAvdWkvbW9kZWwvb2RhdGEvdjQvT0RhdGFQcm9wZXJ0eUJpbmRpbmdcIjtcblxuZXhwb3J0IGNsYXNzIE1vY2tDb250ZXh0IGltcGxlbWVudHMgUGFydGlhbDxDb250ZXh0PiB7XG5cdHByaXZhdGUgaXNLZXB0QWxpdmUgPSBmYWxzZTtcblx0cHVibGljIGNvbnN0cnVjdG9yKHByaXZhdGUgb1ZhbHVlcz86IGFueSwgcHJpdmF0ZSBvQmluZGluZz86IGFueSkge31cblxuXHRwdWJsaWMgaXNBKHNDbGFzc05hbWU6IHN0cmluZyk6IGJvb2xlYW4ge1xuXHRcdHJldHVybiBzQ2xhc3NOYW1lID09PSBcInNhcC51aS5tb2RlbC5vZGF0YS52NC5Db250ZXh0XCI7XG5cdH1cblxuXHRwdWJsaWMgZ2V0UHJvcGVydHkgPSBqZXN0LmZuKChrZXk6IHN0cmluZykgPT4ge1xuXHRcdHJldHVybiB0aGlzLm9WYWx1ZXNba2V5XTtcblx0fSk7XG5cdHB1YmxpYyByZXF1ZXN0UHJvcGVydHkgPSBqZXN0LmZuKChrZXk6IHN0cmluZykgPT4ge1xuXHRcdHJldHVybiBQcm9taXNlLnJlc29sdmUodGhpcy5vVmFsdWVzW2tleV0pO1xuXHR9KTtcblx0cHVibGljIHNldFByb3BlcnR5ID0gamVzdC5mbigoa2V5OiBzdHJpbmcsIHZhbHVlOiBhbnkpID0+IHtcblx0XHR0aGlzLm9WYWx1ZXNba2V5XSA9IHZhbHVlO1xuXHRcdHJldHVybiB0aGlzLm9WYWx1ZXNba2V5XTtcblx0fSk7XG5cblx0cHVibGljIGdldE9iamVjdCA9IGplc3QuZm4oKHBhdGg6IHN0cmluZykgPT4ge1xuXHRcdGNvbnN0IHRoYXQgPSB0aGlzIGFzIGFueTtcblx0XHRsZXQgcmVzdWx0ID0gcGF0aCA/IHRoYXQub1ZhbHVlc1twYXRoXSA6IHRoYXQub1ZhbHVlcztcblxuXHRcdGlmICghcmVzdWx0ICYmIHBhdGggJiYgcGF0aC5pbmRleE9mKFwiL1wiKSA+IC0xKSB7XG5cdFx0XHRjb25zdCBwYXJ0cyA9IHBhdGguc3BsaXQoXCIvXCIpO1xuXHRcdFx0cmVzdWx0ID0gcGFydHMucmVkdWNlKChzdW0sIHBhcnQ6IGFueSkgPT4ge1xuXHRcdFx0XHRzdW0gPSBwYXJ0ID8gc3VtW3BhcnRdIDogc3VtO1xuXHRcdFx0XHRyZXR1cm4gc3VtO1xuXHRcdFx0fSwgdGhhdC5vVmFsdWVzKTtcblx0XHR9XG5cblx0XHRyZXR1cm4gcmVzdWx0O1xuXHR9KTtcblx0cHVibGljIGdldFBhdGggPSBqZXN0LmZuKCgpID0+IHtcblx0XHRyZXR1cm4gdGhpcy5vVmFsdWVzW1wiJHBhdGhcIl07XG5cdH0pO1xuXG5cdHB1YmxpYyBnZXRCaW5kaW5nID0gamVzdC5mbigoKSA9PiB7XG5cdFx0cmV0dXJuIHRoaXMub0JpbmRpbmc7XG5cdH0pO1xuXHRwdWJsaWMgZ2V0TW9kZWwgPSBqZXN0LmZuKCgpID0+IHtcblx0XHRyZXR1cm4gdGhpcy5vQmluZGluZz8uZ2V0TW9kZWwoKSBhcyBhbnkgYXMgT0RhdGFNb2RlbDtcblx0fSk7XG5cdHB1YmxpYyBpc1RyYW5zaWVudCA9IGplc3QuZm4oKTtcblx0Ly8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIEB0eXBlc2NyaXB0LWVzbGludC9uby11bnVzZWQtdmFyc1xuXHRwdWJsaWMgc2V0S2VlcEFsaXZlID0gamVzdC5mbigoYm9vbDogYm9vbGVhbiwgX2ZuT25CZWZvcmVEZXN0cm95PzogYW55LCBfYlJlcXVlc3RNZXNzYWdlcz86IGJvb2xlYW4pID0+IHtcblx0XHR0aGlzLmlzS2VwdEFsaXZlID0gYm9vbDtcblx0fSk7XG5cdHB1YmxpYyBpc0tlZXBBbGl2ZSA9IGplc3QuZm4oKCkgPT4gdGhpcy5pc0tlcHRBbGl2ZSk7XG5cdHB1YmxpYyByZXF1ZXN0U2lkZUVmZmVjdHMgPSBqZXN0LmZuKCk7XG5cdHB1YmxpYyByZXF1ZXN0T2JqZWN0ID0gamVzdC5mbigpO1xufVxuXG5leHBvcnQgY2xhc3MgTW9ja1VJNUVsZW1lbnQgaW1wbGVtZW50cyBQYXJ0aWFsPFVJNUVsZW1lbnQ+IHtcblx0W2tleTogc3RyaW5nXTogYW55O1xuXHRwdWJsaWMgYmluZGluZ0NvbnRleHQgPSBuZXcgTW9ja0NvbnRleHQoe30pO1xuXHRwdWJsaWMgZ2V0QmluZGluZyA9IGplc3QuZm4oKTtcblx0cHVibGljIGdldEJpbmRpbmdDb250ZXh0ID0gamVzdC5mbigpLm1vY2tSZXR1cm5WYWx1ZSh0aGlzLmJpbmRpbmdDb250ZXh0KTtcblx0cHVibGljIGdldEJpbmRpbmdJbmZvID0gamVzdC5mbigpO1xuXHRwdWJsaWMgZGF0YSA9IGplc3QuZm4oKTtcblx0cHVibGljIGdldE1vZGVsID0gamVzdC5mbigpO1xuXHRwdWJsaWMgZ2V0UGFyZW50ID0gamVzdC5mbigpO1xufVxuXG5leHBvcnQgY2xhc3MgTW9ja0NvbnRyb2wgZXh0ZW5kcyBNb2NrVUk1RWxlbWVudCBpbXBsZW1lbnRzIFBhcnRpYWw8Q29udHJvbD4ge1xuXHRwdWJsaWMgZ2V0QmluZGluZ0NvbnRleHQ6IGplc3QuTW9jazxhbnksIGFueT4gPSBqZXN0LmZuKCk7XG5cdHB1YmxpYyBnZXRNb2RlbDogamVzdC5Nb2NrPGFueSwgYW55PiA9IGplc3QuZm4oKTtcbn1cblxuZXhwb3J0IGNsYXNzIE1vY2tFdmVudCBpbXBsZW1lbnRzIFBhcnRpYWw8RXZlbnQ+IHtcblx0cHVibGljIGNvbnN0cnVjdG9yKHB1YmxpYyBwYXJhbXM6IHsgW2tleTogc3RyaW5nXTogYW55IH0gPSB7fSwgcHVibGljIHNvdXJjZTogTW9ja1VJNUVsZW1lbnQgPSBuZXcgTW9ja1VJNUVsZW1lbnQoKSkge31cblxuXHRwdWJsaWMgZ2V0UGFyYW1ldGVyID0gamVzdC5mbigobmFtZSkgPT4gdGhpcy5wYXJhbXNbbmFtZV0pO1xuXG5cdHB1YmxpYyBnZXRTb3VyY2UgPSBqZXN0LmZuKCgpID0+IHRoaXMuc291cmNlIGFzIGFueSk7XG59XG5cbi8qKlxuICogTW9jayBjbGFzcyBmb3IgT0RhdGEgVjQgTGlzdEJpbmRpbmdcbiAqL1xuZXhwb3J0IGNsYXNzIE1vY2tMaXN0QmluZGluZyBpbXBsZW1lbnRzIFBhcnRpYWw8T0RhdGFMaXN0QmluZGluZz4ge1xuXHRwcml2YXRlIGFNb2NrQ29udGV4dHM6IE1vY2tDb250ZXh0W107XG5cblx0cHVibGljIGNvbnN0cnVjdG9yKGFDb250ZXh0cz86IGFueVtdLCBwcml2YXRlIG1vY2tNb2RlbD86IE1vY2tNb2RlbCkge1xuXHRcdGFDb250ZXh0cyA9IGFDb250ZXh0cyB8fCBbXTtcblxuXHRcdHRoaXMuYU1vY2tDb250ZXh0cyA9IGFDb250ZXh0cy5tYXAoKGNvbnRleHQpID0+IHtcblx0XHRcdHJldHVybiBuZXcgTW9ja0NvbnRleHQoY29udGV4dCwgdGhpcyk7XG5cdFx0fSk7XG5cdH1cblxuXHRwdWJsaWMgaXNBKHNDbGFzc05hbWU6IHN0cmluZyk6IGJvb2xlYW4ge1xuXHRcdHJldHVybiBzQ2xhc3NOYW1lID09PSBcInNhcC51aS5tb2RlbC5vZGF0YS52NC5PRGF0YUxpc3RCaW5kaW5nXCI7XG5cdH1cblxuXHRwdWJsaWMgc2V0TW9kZWwob01vZGVsOiBNb2NrTW9kZWwpIHtcblx0XHR0aGlzLm1vY2tNb2RlbCA9IG9Nb2RlbDtcblx0fVxuXG5cdC8vIE1vY2tlZCBBUElcblx0cHVibGljIHNldEFnZ3JlZ2F0aW9uID0gamVzdC5mbigpO1xuXHRwdWJsaWMgZmlsdGVyID0gamVzdC5mbigpO1xuXHRwdWJsaWMgc29ydCA9IGplc3QuZm4oKTtcblxuXHQvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgQHR5cGVzY3JpcHQtZXNsaW50L25vLXVudXNlZC12YXJzXG5cdHB1YmxpYyByZXF1ZXN0Q29udGV4dHMgPSBqZXN0LmZuKCguLi5hcmdzKSA9PiB7XG5cdFx0cmV0dXJuIFByb21pc2UucmVzb2x2ZSh0aGlzLmFNb2NrQ29udGV4dHMgYXMgYW55IGFzIENvbnRleHRbXSk7XG5cdH0pO1xuXHQvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgQHR5cGVzY3JpcHQtZXNsaW50L25vLXVudXNlZC12YXJzXG5cdHB1YmxpYyBnZXRDdXJyZW50Q29udGV4dHMgPSBqZXN0LmZuKCguLi5hcmdzKSA9PiB7XG5cdFx0cmV0dXJuIHRoaXMuYU1vY2tDb250ZXh0cyBhcyBhbnkgYXMgQ29udGV4dFtdO1xuXHR9KTtcblx0cHVibGljIGdldE1vZGVsID0gamVzdC5mbigoKSA9PiB7XG5cdFx0cmV0dXJuIHRoaXMubW9ja01vZGVsIGFzIGFueSBhcyBPRGF0YU1vZGVsO1xuXHR9KTtcblx0cHVibGljIGdldFVwZGF0ZUdyb3VwSWQgPSBqZXN0LmZuKCgpID0+IFwiYXV0b1wiKTtcbn1cblxuZXhwb3J0IGNsYXNzIE1vY2tQcm9wZXJ0eUJpbmRpbmcgaW1wbGVtZW50cyBQYXJ0aWFsPE9EYXRhUHJvcGVydHlCaW5kaW5nPiB7XG5cdHByaXZhdGUgbW9ja01vZGVsITogSlNPTk1vZGVsO1xuXHRwcml2YXRlIG1vY2tQYXRoITogc3RyaW5nO1xuXG5cdHB1YmxpYyBjb25zdHJ1Y3Rvcihtb2NrTW9kZWw6IEpTT05Nb2RlbCwgbW9ja1BhdGg6IHN0cmluZykge1xuXHRcdHRoaXMuc2V0TW9kZWwobW9ja01vZGVsKTtcblx0XHR0aGlzLnNldFBhdGgobW9ja1BhdGgpO1xuXHR9XG5cblx0cHVibGljIGlzQShzQ2xhc3NOYW1lOiBzdHJpbmcpOiBib29sZWFuIHtcblx0XHRyZXR1cm4gc0NsYXNzTmFtZSA9PT0gXCJzYXAvdWkvbW9kZWwvb2RhdGEvdjQvT0RhdGFQcm9wZXJ0eUJpbmRpbmdcIjtcblx0fVxuXG5cdHB1YmxpYyBzZXRNb2RlbChvTW9kZWw6IEpTT05Nb2RlbCkge1xuXHRcdHRoaXMubW9ja01vZGVsID0gb01vZGVsO1xuXHR9XG5cdHB1YmxpYyBnZXRNb2RlbCA9IGplc3QuZm4oKCkgPT4ge1xuXHRcdHJldHVybiB0aGlzLm1vY2tNb2RlbCBhcyBhbnkgYXMgT0RhdGFNb2RlbDtcblx0fSk7XG5cblx0cHVibGljIHNldFBhdGgocGF0aDogc3RyaW5nIHwgdW5kZWZpbmVkKSB7XG5cdFx0dGhpcy5tb2NrUGF0aCA9IHBhdGggPyBwYXRoIDogXCJcIjtcblx0fVxuXHRwdWJsaWMgZ2V0UGF0aCA9IGplc3QuZm4oKCkgPT4ge1xuXHRcdHJldHVybiB0aGlzLm1vY2tQYXRoO1xuXHR9KTtcblxuXHRwdWJsaWMgZ2V0VmFsdWUgPSBqZXN0LmZuKCgpID0+IHtcblx0XHRyZXR1cm4gdGhpcz8ubW9ja01vZGVsPy5nZXRQcm9wZXJ0eShcIi9cIiArIHRoaXMubW9ja1BhdGgpO1xuXHR9KTtcbn1cblxuZXhwb3J0IGNsYXNzIE1vY2tDb21wb3NpdGVCaW5kaW5nIGltcGxlbWVudHMgUGFydGlhbDxDb21wb3NpdGVCaW5kaW5nPiB7XG5cdHByaXZhdGUgYUJpbmRpbmdzOiBNb2NrUHJvcGVydHlCaW5kaW5nW107XG5cblx0cHVibGljIGNvbnN0cnVjdG9yKGFCaW5kaW5nczogTW9ja1Byb3BlcnR5QmluZGluZ1tdKSB7XG5cdFx0dGhpcy5hQmluZGluZ3MgPSBhQmluZGluZ3M7XG5cdH1cblxuXHRwdWJsaWMgaXNBKHNDbGFzc05hbWU6IHN0cmluZyk6IGJvb2xlYW4ge1xuXHRcdHJldHVybiBzQ2xhc3NOYW1lID09PSBcInNhcC51aS5tb2RlbC5Db21wb3NpdGVCaW5kaW5nXCI7XG5cdH1cblxuXHRwdWJsaWMgZ2V0QmluZGluZ3MgPSBqZXN0LmZuKCgpID0+IHtcblx0XHRyZXR1cm4gdGhpcy5hQmluZGluZ3M7XG5cdH0pO1xuXG5cdHB1YmxpYyBnZXRWYWx1ZSA9IGplc3QuZm4oKCkgPT4ge1xuXHRcdHJldHVybiB0aGlzLmFCaW5kaW5ncy5tYXAoKGJpbmRpbmcpID0+IGJpbmRpbmcuZ2V0VmFsdWUoKSk7XG5cdH0pO1xufVxuXG5leHBvcnQgY2xhc3MgTW9ja0NvbnRleHRCaW5kaW5nIGltcGxlbWVudHMgUGFydGlhbDxPRGF0YUNvbnRleHRCaW5kaW5nPiB7XG5cdHByaXZhdGUgb01vY2tDb250ZXh0OiBNb2NrQ29udGV4dDtcblx0cHJpdmF0ZSBpc0tlcHRBbGl2ZTogYm9vbGVhbiA9IGZhbHNlO1xuXG5cdHB1YmxpYyBjb25zdHJ1Y3RvcihvQ29udGV4dD86IGFueSwgcHJpdmF0ZSBtb2NrTW9kZWw/OiBNb2NrTW9kZWwpIHtcblx0XHR0aGlzLm9Nb2NrQ29udGV4dCA9IG5ldyBNb2NrQ29udGV4dChvQ29udGV4dCB8fCB7fSwgdGhpcyk7XG5cdH1cblxuXHRwdWJsaWMgaXNBKHNDbGFzc05hbWU6IHN0cmluZyk6IGJvb2xlYW4ge1xuXHRcdHJldHVybiBzQ2xhc3NOYW1lID09PSBcInNhcC51aS5tb2RlbC5vZGF0YS52NC5PRGF0YUNvbnRleHRCaW5kaW5nXCI7XG5cdH1cblx0cHVibGljIGdldEludGVybmFsTW9ja0NvbnRleHQoKTogTW9ja0NvbnRleHQge1xuXHRcdHJldHVybiB0aGlzLm9Nb2NrQ29udGV4dDtcblx0fVxuXHRwdWJsaWMgc2V0TW9kZWwob01vZGVsOiBNb2NrTW9kZWwpIHtcblx0XHR0aGlzLm1vY2tNb2RlbCA9IG9Nb2RlbDtcblx0fVxuXG5cdC8vIE1vY2tlZCBBUElcblx0cHVibGljIGdldEJvdW5kQ29udGV4dCA9IGplc3QuZm4oKCkgPT4ge1xuXHRcdHJldHVybiB0aGlzLm9Nb2NrQ29udGV4dCBhcyBhbnkgYXMgQ29udGV4dDtcblx0fSk7XG5cdHB1YmxpYyBhdHRhY2hFdmVudE9uY2UgPSBqZXN0LmZuKCk7XG5cdHB1YmxpYyBnZXRNb2RlbCA9IGplc3QuZm4oKCkgPT4ge1xuXHRcdHJldHVybiB0aGlzLm1vY2tNb2RlbCBhcyBhbnkgYXMgT0RhdGFNb2RlbDtcblx0fSk7XG59XG5cbi8qKlxuICogTW9jayBjbGFzcyBmb3IgT0RhdGEgVjQgTWV0YU1vZGVsXG4gKi9cbmV4cG9ydCBjbGFzcyBNb2NrTWV0YU1vZGVsIGltcGxlbWVudHMgUGFydGlhbDxPRGF0YU1ldGFNb2RlbD4ge1xuXHRwcml2YXRlIG9NZXRhQ29udGV4dDogTW9ja0NvbnRleHQ7XG5cdHJlcXVlc3RWYWx1ZUxpc3RJbmZvITogamVzdC5Nb2NrPGFueSwgYW55PjtcblxuXHRwdWJsaWMgY29uc3RydWN0b3Iob01ldGFEYXRhPzogYW55KSB7XG5cdFx0dGhpcy5vTWV0YUNvbnRleHQgPSBuZXcgTW9ja0NvbnRleHQob01ldGFEYXRhIHx8IHt9KTtcblx0fVxuXG5cdC8vIE1vY2tlZCBBUElcblx0Ly8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIEB0eXBlc2NyaXB0LWVzbGludC9uby11bnVzZWQtdmFyc1xuXHRwdWJsaWMgZ2V0TWV0YUNvbnRleHQgPSBqZXN0LmZuKChzUGF0aDogc3RyaW5nKSA9PiB7XG5cdFx0cmV0dXJuIG5ldyBNb2NrQ29udGV4dCh7ICRwYXRoOiBzUGF0aCB9KSBhcyBhbnkgYXMgQ29udGV4dDtcblx0fSk7XG5cdHB1YmxpYyBnZXRPYmplY3QgPSBqZXN0LmZuKChzUGF0aDogc3RyaW5nKSA9PiB7XG5cdFx0cmV0dXJuIHRoaXMub01ldGFDb250ZXh0LmdldFByb3BlcnR5KHNQYXRoKTtcblx0fSk7XG5cdHB1YmxpYyByZXF1ZXN0T2JqZWN0ID0gamVzdC5mbigpO1xuXHRwdWJsaWMgY3JlYXRlQmluZGluZ0NvbnRleHQgPSBqZXN0LmZuKChzUGF0aDogc3RyaW5nKSA9PiB7XG5cdFx0cmV0dXJuIG5ldyBNb2NrQ29udGV4dCh7ICRwYXRoOiBzUGF0aCB9KSBhcyBhbnkgYXMgQ29udGV4dDtcblx0fSk7XG5cdHB1YmxpYyBnZXRNZXRhUGF0aCA9IGplc3QuZm4oKHNQYXRoOiBzdHJpbmcpID0+IHtcblx0XHRyZXR1cm4gc1BhdGg7XG5cdH0pO1xuXHRwdWJsaWMgZ2V0Q29udGV4dCA9IGplc3QuZm4oKTtcbn1cblxuLyoqXG4gKiBNb2NrIGNsYXNzIGZvciBPRGF0YSBWNCBNb2RlbFxuICovXG5cbmV4cG9ydCBjbGFzcyBNb2NrTW9kZWwgaW1wbGVtZW50cyBQYXJ0aWFsPE9EYXRhTW9kZWw+IHtcblx0cHJpdmF0ZSBvTWV0YU1vZGVsPzogTW9ja01ldGFNb2RlbDtcblxuXHRwdWJsaWMgY29uc3RydWN0b3IocHJpdmF0ZSBtb2NrTGlzdEJpbmRpbmc/OiBNb2NrTGlzdEJpbmRpbmcsIHByaXZhdGUgbW9ja0NvbnRleHRCaW5kaW5nPzogTW9ja0NvbnRleHRCaW5kaW5nKSB7XG5cdFx0aWYgKG1vY2tMaXN0QmluZGluZykge1xuXHRcdFx0bW9ja0xpc3RCaW5kaW5nLnNldE1vZGVsKHRoaXMpO1xuXHRcdH1cblx0XHRpZiAobW9ja0NvbnRleHRCaW5kaW5nKSB7XG5cdFx0XHRtb2NrQ29udGV4dEJpbmRpbmcuc2V0TW9kZWwodGhpcyk7XG5cdFx0fVxuXHR9XG5cblx0Ly8gRmFjdG9yaWVzXG5cdHN0YXRpYyBtb2RlbEZyb21MaXN0QmluZGluZyhtb2NrTGlzdEJpbmRpbmc6IE1vY2tMaXN0QmluZGluZyk6IE1vY2tNb2RlbCB7XG5cdFx0cmV0dXJuIG5ldyBNb2NrTW9kZWwobW9ja0xpc3RCaW5kaW5nKTtcblx0fVxuXHRzdGF0aWMgbW9kZWxGcm9tQ29udGV4dEJpbmRpbmcobW9ja0NvbnRleHRCaW5kaW5nOiBNb2NrQ29udGV4dEJpbmRpbmcpOiBNb2NrTW9kZWwge1xuXHRcdHJldHVybiBuZXcgTW9ja01vZGVsKHVuZGVmaW5lZCwgbW9ja0NvbnRleHRCaW5kaW5nKTtcblx0fVxuXG5cdHB1YmxpYyBzZXRNZXRhTW9kZWwob01ldGFNb2RlbDogTW9ja01ldGFNb2RlbCkge1xuXHRcdHRoaXMub01ldGFNb2RlbCA9IG9NZXRhTW9kZWw7XG5cdH1cblxuXHQvLyBNb2NrZWQgQVBJXG5cdC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBAdHlwZXNjcmlwdC1lc2xpbnQvbm8tdW51c2VkLXZhcnNcblx0cHVibGljIGJpbmRMaXN0ID0gamVzdC5mbigoLi4uYXJncykgPT4ge1xuXHRcdHJldHVybiB0aGlzLm1vY2tMaXN0QmluZGluZyBhcyBhbnkgYXMgT0RhdGFMaXN0QmluZGluZztcblx0fSk7XG5cdC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBAdHlwZXNjcmlwdC1lc2xpbnQvbm8tdW51c2VkLXZhcnNcblx0cHVibGljIGJpbmRDb250ZXh0ID0gamVzdC5mbigoLi4uYXJncykgPT4ge1xuXHRcdHJldHVybiB0aGlzLm1vY2tDb250ZXh0QmluZGluZyBhcyBhbnkgYXMgT0RhdGFDb250ZXh0QmluZGluZztcblx0fSk7XG5cdHB1YmxpYyBnZXRNZXRhTW9kZWwgPSBqZXN0LmZuKCgpID0+IHtcblx0XHRyZXR1cm4gdGhpcy5vTWV0YU1vZGVsIGFzIGFueSBhcyBPRGF0YU1ldGFNb2RlbDtcblx0fSk7XG5cblx0cHVibGljIGdldFByb3BlcnR5ID0gamVzdC5mbigpO1xuXHRwdWJsaWMgc2V0UHJvcGVydHkgPSBqZXN0LmZuKCk7XG5cdHB1YmxpYyByZXF1ZXN0T2JqZWN0ID0gamVzdC5mbigpO1xuXHRwdWJsaWMgZ2V0S2VlcEFsaXZlQ29udGV4dCA9IGplc3QuZm4oKTtcbn1cblxuZXhwb3J0IGNsYXNzIE1vY2tWaWV3IGltcGxlbWVudHMgUGFydGlhbDxWaWV3PiB7XG5cdHB1YmxpYyBnZXRDb250cm9sbGVyID0gamVzdC5mbigpO1xuXG5cdHB1YmxpYyBnZXRCaW5kaW5nQ29udGV4dCA9IGplc3QuZm4oKTtcblxuXHRwdWJsaWMgZ2V0TW9kZWwgPSBqZXN0LmZuKCk7XG5cblx0cHVibGljIGdldFZpZXdEYXRhID0gamVzdC5mbigpO1xuXG5cdHB1YmxpYyBpc0Eoc0NsYXNzTmFtZTogc3RyaW5nKTogYm9vbGVhbiB7XG5cdFx0cmV0dXJuIHNDbGFzc05hbWUgPT09IFwic2FwLnVpLmNvcmUubXZjLlZpZXdcIjtcblx0fVxuXG5cdHB1YmxpYyBnZXRJZCA9IGplc3QuZm4oKTtcbn1cblxuZXhwb3J0IGNsYXNzIE1vY2tDb250cm9sbGVyIGltcGxlbWVudHMgUGFydGlhbDxDb250cm9sbGVyPiB7XG5cdHB1YmxpYyBnZXRWaWV3ID0gamVzdC5mbigpLm1vY2tSZXR1cm5WYWx1ZShuZXcgTW9ja1ZpZXcoKSk7XG5cblx0cHVibGljIF9yb3V0aW5nID0ge1xuXHRcdG5hdmlnYXRlVG9UYXJnZXQ6IGplc3QuZm4oKVxuXHR9O1xuXG5cdHB1YmxpYyBfZWRpdEZsb3cgPSB7XG5cdFx0c3luY1Rhc2s6IGplc3QuZm4oKVxuXHR9O1xuXG5cdHB1YmxpYyBfc2lkZUVmZmVjdHMgPSB7XG5cdFx0aGFuZGxlRmllbGRDaGFuZ2U6IGplc3QuZm4oKVxuXHR9O1xuXG5cdGlzQSA9IGplc3QuZm4oKS5tb2NrUmV0dXJuVmFsdWUoZmFsc2UpO1xufVxuXG5leHBvcnQgaW50ZXJmYWNlIE1WQ01vY2sge1xuXHRtb2RlbDogTW9ja01vZGVsO1xuXHR2aWV3OiBNb2NrVmlldztcblx0Y29udHJvbGxlcjogTW9ja0NvbnRyb2xsZXI7XG59XG5cbi8qKlxuICogR2VuZXJhdGUgbW9kZWwsIHZpZXcgYW5kIGNvbnRyb2xsZXIgbW9ja3MgdGhhdCByZWZlciB0byBlYWNoIG90aGVyLlxuICpcbiAqIEBwYXJhbSBleGlzdGluZyBPcHRpb25hbCBleGlzdGluZyBtb2NrZWQgaW5zdGFuY2VzIHRoYXQgc2hvdWxkIGJlIHVzZWRcbiAqIEByZXR1cm5zIE1vY2tlZCBtb2RlbCwgdmlldyBhbmQgY29udHJvbGxlciBpbnN0YW5jZXNcbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIG1vY2tNVkMoZXhpc3Rpbmc/OiBQYXJ0aWFsPE1WQ01vY2s+KTogTVZDTW9jayB7XG5cdGNvbnN0IG1vZGVsID0gZXhpc3Rpbmc/Lm1vZGVsIHx8IG5ldyBNb2NrTW9kZWwoKTtcblx0Y29uc3QgdmlldyA9IGV4aXN0aW5nPy52aWV3IHx8IG5ldyBNb2NrVmlldygpO1xuXHRjb25zdCBjb250cm9sbGVyID0gZXhpc3Rpbmc/LmNvbnRyb2xsZXIgfHwgbmV3IE1vY2tDb250cm9sbGVyKCk7XG5cblx0dmlldy5nZXRDb250cm9sbGVyLm1vY2tSZXR1cm5WYWx1ZShjb250cm9sbGVyKTtcblx0dmlldy5nZXRNb2RlbC5tb2NrUmV0dXJuVmFsdWUobW9kZWwpO1xuXHRjb250cm9sbGVyLmdldFZpZXcubW9ja1JldHVyblZhbHVlKHZpZXcpO1xuXG5cdHJldHVybiB7IG1vZGVsLCB2aWV3LCBjb250cm9sbGVyIH07XG59XG4iXX0=
|
|
438
|
+
//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIlVJNU1vY2tIZWxwZXIudHMiXSwibmFtZXMiOlsiTW9ja0NvbnRleHQiLCJvVmFsdWVzIiwib0JpbmRpbmciLCJpc0tlcHRBbGl2ZSIsImdldFByb3BlcnR5IiwiamVzdCIsImZuIiwia2V5IiwicmVxdWVzdFByb3BlcnR5IiwiUHJvbWlzZSIsInJlc29sdmUiLCJzZXRQcm9wZXJ0eSIsInZhbHVlIiwiZ2V0T2JqZWN0IiwicGF0aCIsInJlc3VsdCIsImluZGV4T2YiLCJwYXJ0cyIsInNwbGl0IiwicmVkdWNlIiwic3VtIiwicGFydCIsImdldFBhdGgiLCJnZXRCaW5kaW5nIiwiZ2V0TW9kZWwiLCJpc1RyYW5zaWVudCIsInNldEtlZXBBbGl2ZSIsImJvb2wiLCJfZm5PbkJlZm9yZURlc3Ryb3kiLCJfYlJlcXVlc3RNZXNzYWdlcyIsImlzS2VlcEFsaXZlIiwicmVxdWVzdFNpZGVFZmZlY3RzIiwicmVxdWVzdE9iamVjdCIsImlzQSIsInNDbGFzc05hbWUiLCJNb2NrVUk1RWxlbWVudCIsImJpbmRpbmdDb250ZXh0IiwiZ2V0QmluZGluZ0NvbnRleHQiLCJtb2NrUmV0dXJuVmFsdWUiLCJnZXRCaW5kaW5nSW5mbyIsImRhdGEiLCJnZXRQYXJlbnQiLCJNb2NrQ29udHJvbCIsIk1vY2tFdmVudCIsInBhcmFtcyIsInNvdXJjZSIsImdldFBhcmFtZXRlciIsIm5hbWUiLCJnZXRTb3VyY2UiLCJNb2NrTGlzdEJpbmRpbmciLCJhQ29udGV4dHMiLCJtb2NrTW9kZWwiLCJzZXRBZ2dyZWdhdGlvbiIsImZpbHRlciIsInNvcnQiLCJnZXRRdWVyeU9wdGlvbnNGcm9tUGFyYW1ldGVycyIsImlzU3VzcGVuZGVkIiwicmVzdW1lIiwicmVmcmVzaCIsInN1c3BlbmQiLCJyZXF1ZXN0Q29udGV4dHMiLCJhTW9ja0NvbnRleHRzIiwiZ2V0Q3VycmVudENvbnRleHRzIiwiZ2V0VXBkYXRlR3JvdXBJZCIsIm1hcCIsImNvbnRleHQiLCJzZXRNb2RlbCIsIm9Nb2RlbCIsIk1vY2tQcm9wZXJ0eUJpbmRpbmciLCJtb2NrUGF0aCIsImdldFZhbHVlIiwic2V0UGF0aCIsIk1vY2tDb21wb3NpdGVCaW5kaW5nIiwiYUJpbmRpbmdzIiwiZ2V0QmluZGluZ3MiLCJiaW5kaW5nIiwiTW9ja0NvbnRleHRCaW5kaW5nIiwib0NvbnRleHQiLCJnZXRCb3VuZENvbnRleHQiLCJvTW9ja0NvbnRleHQiLCJhdHRhY2hFdmVudE9uY2UiLCJzZXRQYXJhbWV0ZXIiLCJleGVjdXRlIiwibW9ja1Jlc29sdmVkVmFsdWUiLCJnZXRHcm91cElkIiwiZ2V0SW50ZXJuYWxNb2NrQ29udGV4dCIsIk1vY2tNZXRhTW9kZWwiLCJvTWV0YURhdGEiLCJnZXRNZXRhQ29udGV4dCIsInNQYXRoIiwiJHBhdGgiLCJvTWV0YUNvbnRleHQiLCJjcmVhdGVCaW5kaW5nQ29udGV4dCIsImdldE1ldGFQYXRoIiwibWV0YW1vZGVsIiwiT0RhdGFNZXRhTW9kZWwiLCJnZXRDb250ZXh0IiwiTW9ja01vZGVsIiwibW9ja0xpc3RCaW5kaW5nIiwibW9ja0NvbnRleHRCaW5kaW5nIiwiYmluZExpc3QiLCJiaW5kQ29udGV4dCIsImdldE1ldGFNb2RlbCIsIm9NZXRhTW9kZWwiLCJnZXRLZWVwQWxpdmVDb250ZXh0IiwibW9kZWxGcm9tTGlzdEJpbmRpbmciLCJtb2RlbEZyb21Db250ZXh0QmluZGluZyIsInVuZGVmaW5lZCIsInNldE1ldGFNb2RlbCIsIk1vY2tWaWV3IiwiZ2V0Q29udHJvbGxlciIsImdldFZpZXdEYXRhIiwiZ2V0SWQiLCJNb2NrQ29udHJvbGxlciIsImdldFZpZXciLCJfcm91dGluZyIsIm5hdmlnYXRlVG9UYXJnZXQiLCJfZWRpdEZsb3ciLCJzeW5jVGFzayIsIl9zaWRlRWZmZWN0cyIsImhhbmRsZUZpZWxkQ2hhbmdlIiwibW9ja01WQyIsImV4aXN0aW5nIiwibW9kZWwiLCJ2aWV3IiwiY29udHJvbGxlciJdLCJtYXBwaW5ncyI6IjtBQUFBO0FBQ0E7QUFDQTs7Ozs7Ozs7OztNQWVhQSxXO0FBRVoseUJB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Q2QsYUFBTCxDQUFtQnhFLGVBQW5CLENBQW1DdUYsVUFBbkM7QUFDQUQsSUFBQUEsSUFBSSxDQUFDcEcsUUFBTCxDQUFjYyxlQUFkLENBQThCcUYsS0FBOUI7QUFDQUUsSUFBQUEsVUFBVSxDQUFDWCxPQUFYLENBQW1CNUUsZUFBbkIsQ0FBbUNzRixJQUFuQztBQUVBLFdBQU87QUFBRUQsTUFBQUEsS0FBSyxFQUFMQSxLQUFGO0FBQVNDLE1BQUFBLElBQUksRUFBSkEsSUFBVDtBQUFlQyxNQUFBQSxVQUFVLEVBQVZBO0FBQWYsS0FBUDtBQUNBIiwic291cmNlUm9vdCI6Ii4iLCJzb3VyY2VzQ29udGVudCI6WyIvKipcbiAqIE1vY2sgY2xhc3MgZm9yIGEgVjQgQ29udGV4dFxuICovXG5pbXBvcnQgdHlwZSBFdmVudCBmcm9tIFwic2FwL3VpL2Jhc2UvRXZlbnRcIjtcbmltcG9ydCB0eXBlIENvbnRyb2wgZnJvbSBcInNhcC91aS9jb3JlL0NvbnRyb2xcIjtcbmltcG9ydCB0eXBlIFVJNUVsZW1lbnQgZnJvbSBcInNhcC91aS9jb3JlL0VsZW1lbnRcIjtcbmltcG9ydCB0eXBlIENvbnRyb2xsZXIgZnJvbSBcInNhcC91aS9jb3JlL212Yy9Db250cm9sbGVyXCI7XG5pbXBvcnQgdHlwZSBWaWV3IGZyb20gXCJzYXAvdWkvY29yZS9tdmMvVmlld1wiO1xuaW1wb3J0IHR5cGUgQ29tcG9zaXRlQmluZGluZyBmcm9tIFwic2FwL3VpL21vZGVsL0NvbXBvc2l0ZUJpbmRpbmdcIjtcbmltcG9ydCB0eXBlIEpTT05Nb2RlbCBmcm9tIFwic2FwL3VpL21vZGVsL2pzb24vSlNPTk1vZGVsXCI7XG5pbXBvcnQgdHlwZSBDb250ZXh0IGZyb20gXCJzYXAvdWkvbW9kZWwvb2RhdGEvdjQvQ29udGV4dFwiO1xuaW1wb3J0IHR5cGUgT0RhdGFDb250ZXh0QmluZGluZyBmcm9tIFwic2FwL3VpL21vZGVsL29kYXRhL3Y0L09EYXRhQ29udGV4dEJpbmRpbmdcIjtcbmltcG9ydCB0eXBlIE9EYXRhTGlzdEJpbmRpbmcgZnJvbSBcInNhcC91aS9tb2RlbC9vZGF0YS92NC9PRGF0YUxpc3RCaW5kaW5nXCI7XG5pbXBvcnQgT0RhdGFNZXRhTW9kZWwgZnJvbSBcInNhcC91aS9tb2RlbC9vZGF0YS92NC9PRGF0YU1ldGFNb2RlbFwiO1xuaW1wb3J0IHR5cGUgT0RhdGFNb2RlbCBmcm9tIFwic2FwL3VpL21vZGVsL29kYXRhL3Y0L09EYXRhTW9kZWxcIjtcbmltcG9ydCB0eXBlIE9EYXRhUHJvcGVydHlCaW5kaW5nIGZyb20gXCJzYXAvdWkvbW9kZWwvb2RhdGEvdjQvT0RhdGFQcm9wZXJ0eUJpbmRpbmdcIjtcblxuZXhwb3J0IGNsYXNzIE1vY2tDb250ZXh0IGltcGxlbWVudHMgUGFydGlhbDxDb250ZXh0PiB7XG5cdHByaXZhdGUgaXNLZXB0QWxpdmUgPSBmYWxzZTtcblx0cHVibGljIGNvbnN0cnVjdG9yKHByaXZhdGUgb1ZhbHVlcz86IGFueSwgcHJpdmF0ZSBvQmluZGluZz86IGFueSkge31cblxuXHRwdWJsaWMgaXNBKHNDbGFzc05hbWU6IHN0cmluZyk6IGJvb2xlYW4ge1xuXHRcdHJldHVybiBzQ2xhc3NOYW1lID09PSBcInNhcC51aS5tb2RlbC5vZGF0YS52NC5Db250ZXh0XCI7XG5cdH1cblxuXHRwdWJsaWMgZ2V0UHJvcGVydHkgPSBqZXN0LmZuKChrZXk6IHN0cmluZykgPT4ge1xuXHRcdHJldHVybiB0aGlzLm9WYWx1ZXNba2V5XTtcblx0fSk7XG5cdHB1YmxpYyByZXF1ZXN0UHJvcGVydHkgPSBqZXN0LmZuKChrZXk6IHN0cmluZykgPT4ge1xuXHRcdHJldHVybiBQcm9taXNlLnJlc29sdmUodGhpcy5vVmFsdWVzW2tleV0pO1xuXHR9KTtcblx0cHVibGljIHNldFByb3BlcnR5ID0gamVzdC5mbigoa2V5OiBzdHJpbmcsIHZhbHVlOiBhbnkpID0+IHtcblx0XHR0aGlzLm9WYWx1ZXNba2V5XSA9IHZhbHVlO1xuXHRcdHJldHVybiB0aGlzLm9WYWx1ZXNba2V5XTtcblx0fSk7XG5cblx0cHVibGljIGdldE9iamVjdCA9IGplc3QuZm4oKHBhdGg6IHN0cmluZykgPT4ge1xuXHRcdGxldCByZXN1bHQgPSBwYXRoID8gdGhpcy5vVmFsdWVzW3BhdGhdIDogdGhpcy5vVmFsdWVzO1xuXG5cdFx0aWYgKCFyZXN1bHQgJiYgcGF0aCAmJiBwYXRoLmluZGV4T2YoXCIvXCIpID4gLTEpIHtcblx0XHRcdGNvbnN0IHBhcnRzID0gcGF0aC5zcGxpdChcIi9cIik7XG5cdFx0XHRyZXN1bHQgPSBwYXJ0cy5yZWR1Y2UoKHN1bSwgcGFydDogYW55KSA9PiB7XG5cdFx0XHRcdHN1bSA9IHBhcnQgPyBzdW1bcGFydF0gOiBzdW07XG5cdFx0XHRcdHJldHVybiBzdW07XG5cdFx0XHR9LCB0aGlzLm9WYWx1ZXMpO1xuXHRcdH1cblxuXHRcdHJldHVybiByZXN1bHQ7XG5cdH0pO1xuXHRwdWJsaWMgZ2V0UGF0aCA9IGplc3QuZm4oKCkgPT4ge1xuXHRcdHJldHVybiB0aGlzLm9WYWx1ZXNbXCIkcGF0aFwiXTtcblx0fSk7XG5cblx0cHVibGljIGdldEJpbmRpbmcgPSBqZXN0LmZuKCgpID0+IHtcblx0XHRyZXR1cm4gdGhpcy5vQmluZGluZztcblx0fSk7XG5cdHB1YmxpYyBnZXRNb2RlbCA9IGplc3QuZm4oKCkgPT4ge1xuXHRcdHJldHVybiB0aGlzLm9CaW5kaW5nPy5nZXRNb2RlbCgpIGFzIE9EYXRhTW9kZWw7XG5cdH0pO1xuXHRwdWJsaWMgaXNUcmFuc2llbnQgPSBqZXN0LmZuKCk7XG5cdC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBAdHlwZXNjcmlwdC1lc2xpbnQvbm8tdW51c2VkLXZhcnNcblx0cHVibGljIHNldEtlZXBBbGl2ZSA9IGplc3QuZm4oKGJvb2w6IGJvb2xlYW4sIF9mbk9uQmVmb3JlRGVzdHJveT86IGFueSwgX2JSZXF1ZXN0TWVzc2FnZXM/OiBib29sZWFuKSA9PiB7XG5cdFx0dGhpcy5pc0tlcHRBbGl2ZSA9IGJvb2w7XG5cdH0pO1xuXHRwdWJsaWMgaXNLZWVwQWxpdmUgPSBqZXN0LmZuKCgpID0+IHRoaXMuaXNLZXB0QWxpdmUpO1xuXHRwdWJsaWMgcmVxdWVzdFNpZGVFZmZlY3RzID0gamVzdC5mbigpO1xuXHRwdWJsaWMgcmVxdWVzdE9iamVjdCA9IGplc3QuZm4oKTtcbn1cblxuZXhwb3J0IGNsYXNzIE1vY2tVSTVFbGVtZW50IGltcGxlbWVudHMgUGFydGlhbDxVSTVFbGVtZW50PiB7XG5cdFtrZXk6IHN0cmluZ106IGFueTtcblx0cHVibGljIGJpbmRpbmdDb250ZXh0ID0gbmV3IE1vY2tDb250ZXh0KHt9KTtcblx0cHVibGljIGdldEJpbmRpbmcgPSBqZXN0LmZuKCk7XG5cdHB1YmxpYyBnZXRCaW5kaW5nQ29udGV4dCA9IGplc3QuZm4oKS5tb2NrUmV0dXJuVmFsdWUodGhpcy5iaW5kaW5nQ29udGV4dCk7XG5cdHB1YmxpYyBnZXRCaW5kaW5nSW5mbyA9IGplc3QuZm4oKTtcblx0cHVibGljIGRhdGEgPSBqZXN0LmZuKCk7XG5cdHB1YmxpYyBnZXRNb2RlbCA9IGplc3QuZm4oKTtcblx0cHVibGljIGdldFBhcmVudCA9IGplc3QuZm4oKTtcbn1cblxuZXhwb3J0IGNsYXNzIE1vY2tDb250cm9sIGV4dGVuZHMgTW9ja1VJNUVsZW1lbnQgaW1wbGVtZW50cyBQYXJ0aWFsPENvbnRyb2w+IHtcblx0cHVibGljIGdldEJpbmRpbmdDb250ZXh0OiBqZXN0Lk1vY2s8YW55LCBhbnk+ID0gamVzdC5mbigpO1xuXHRwdWJsaWMgZ2V0TW9kZWw6IGplc3QuTW9jazxhbnksIGFueT4gPSBqZXN0LmZuKCk7XG59XG5cbmV4cG9ydCBjbGFzcyBNb2NrRXZlbnQgaW1wbGVtZW50cyBQYXJ0aWFsPEV2ZW50PiB7XG5cdHB1YmxpYyBjb25zdHJ1Y3RvcihwdWJsaWMgcGFyYW1zOiB7IFtrZXk6IHN0cmluZ106IGFueSB9ID0ge30sIHB1YmxpYyBzb3VyY2U6IE1vY2tVSTVFbGVtZW50ID0gbmV3IE1vY2tVSTVFbGVtZW50KCkpIHt9XG5cblx0cHVibGljIGdldFBhcmFtZXRlciA9IGplc3QuZm4oKG5hbWUpID0+IHRoaXMucGFyYW1zW25hbWVdKTtcblxuXHRwdWJsaWMgZ2V0U291cmNlID0gamVzdC5mbigoKSA9PiB0aGlzLnNvdXJjZSBhcyBhbnkpO1xufVxuXG4vKipcbiAqIE1vY2sgY2xhc3MgZm9yIE9EYXRhIFY0IExpc3RCaW5kaW5nXG4gKi9cbmV4cG9ydCBjbGFzcyBNb2NrTGlzdEJpbmRpbmcgaW1wbGVtZW50cyBQYXJ0aWFsPE9EYXRhTGlzdEJpbmRpbmc+IHtcblx0cHJpdmF0ZSBhTW9ja0NvbnRleHRzOiBNb2NrQ29udGV4dFtdO1xuXG5cdHB1YmxpYyBjb25zdHJ1Y3RvcihhQ29udGV4dHM/OiBhbnlbXSwgcHJpdmF0ZSBtb2NrTW9kZWw/OiBNb2NrTW9kZWwpIHtcblx0XHRhQ29udGV4dHMgPSBhQ29udGV4dHMgfHwgW107XG5cblx0XHR0aGlzLmFNb2NrQ29udGV4dHMgPSBhQ29udGV4dHMubWFwKChjb250ZXh0KSA9PiB7XG5cdFx0XHRyZXR1cm4gbmV3IE1vY2tDb250ZXh0KGNvbnRleHQsIHRoaXMpO1xuXHRcdH0pO1xuXHR9XG5cblx0cHVibGljIGlzQShzQ2xhc3NOYW1lOiBzdHJpbmcpOiBib29sZWFuIHtcblx0XHRyZXR1cm4gc0NsYXNzTmFtZSA9PT0gXCJzYXAudWkubW9kZWwub2RhdGEudjQuT0RhdGFMaXN0QmluZGluZ1wiO1xuXHR9XG5cblx0cHVibGljIHNldE1vZGVsKG9Nb2RlbDogTW9ja01vZGVsKSB7XG5cdFx0dGhpcy5tb2NrTW9kZWwgPSBvTW9kZWw7XG5cdH1cblxuXHQvLyBNb2NrZWQgQVBJXG5cdHB1YmxpYyBzZXRBZ2dyZWdhdGlvbiA9IGplc3QuZm4oKTtcblx0cHVibGljIGZpbHRlciA9IGplc3QuZm4oKTtcblx0cHVibGljIHNvcnQgPSBqZXN0LmZuKCk7XG5cblx0cHVibGljIGdldFF1ZXJ5T3B0aW9uc0Zyb21QYXJhbWV0ZXJzID0gamVzdC5mbigpO1xuXHRwdWJsaWMgZ2V0UGF0aCA9IGplc3QuZm4oKTtcblx0cHVibGljIGlzU3VzcGVuZGVkID0gamVzdC5mbigpO1xuXHRwdWJsaWMgcmVzdW1lID0gamVzdC5mbigpO1xuXHRwdWJsaWMgcmVmcmVzaCA9IGplc3QuZm4oKTtcblx0cHVibGljIHN1c3BlbmQgPSBqZXN0LmZuKCk7XG5cblx0Ly8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIEB0eXBlc2NyaXB0LWVzbGludC9uby11bnVzZWQtdmFyc1xuXHRwdWJsaWMgcmVxdWVzdENvbnRleHRzID0gamVzdC5mbigoLi4uYXJncykgPT4ge1xuXHRcdHJldHVybiBQcm9taXNlLnJlc29sdmUodGhpcy5hTW9ja0NvbnRleHRzIGFzIGFueSBhcyBDb250ZXh0W10pO1xuXHR9KTtcblx0Ly8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIEB0eXBlc2NyaXB0LWVzbGludC9uby11bnVzZWQtdmFyc1xuXHRwdWJsaWMgZ2V0Q3VycmVudENvbnRleHRzID0gamVzdC5mbigoLi4uYXJncykgPT4ge1xuXHRcdHJldHVybiB0aGlzLmFNb2NrQ29udGV4dHMgYXMgYW55IGFzIENvbnRleHRbXTtcblx0fSk7XG5cdHB1YmxpYyBnZXRNb2RlbCA9IGplc3QuZm4oKCkgPT4ge1xuXHRcdHJldHVybiB0aGlzLm1vY2tNb2RlbCBhcyBhbnkgYXMgT0RhdGFNb2RlbDtcblx0fSk7XG5cdHB1YmxpYyBnZXRVcGRhdGVHcm91cElkID0gamVzdC5mbigoKSA9PiBcImF1dG9cIik7XG59XG5cbmV4cG9ydCBjbGFzcyBNb2NrUHJvcGVydHlCaW5kaW5nIGltcGxlbWVudHMgUGFydGlhbDxPRGF0YVByb3BlcnR5QmluZGluZz4ge1xuXHRwcml2YXRlIG1vY2tNb2RlbCE6IEpTT05Nb2RlbDtcblx0cHJpdmF0ZSBtb2NrUGF0aCE6IHN0cmluZztcblxuXHRwdWJsaWMgY29uc3RydWN0b3IobW9ja01vZGVsOiBKU09OTW9kZWwsIG1vY2tQYXRoOiBzdHJpbmcpIHtcblx0XHR0aGlzLnNldE1vZGVsKG1vY2tNb2RlbCk7XG5cdFx0dGhpcy5zZXRQYXRoKG1vY2tQYXRoKTtcblx0fVxuXG5cdHB1YmxpYyBpc0Eoc0NsYXNzTmFtZTogc3RyaW5nKTogYm9vbGVhbiB7XG5cdFx0cmV0dXJuIHNDbGFzc05hbWUgPT09IFwic2FwL3VpL21vZGVsL29kYXRhL3Y0L09EYXRhUHJvcGVydHlCaW5kaW5nXCI7XG5cdH1cblxuXHRwdWJsaWMgc2V0TW9kZWwob01vZGVsOiBKU09OTW9kZWwpIHtcblx0XHR0aGlzLm1vY2tNb2RlbCA9IG9Nb2RlbDtcblx0fVxuXHRwdWJsaWMgZ2V0TW9kZWwgPSBqZXN0LmZuKCgpID0+IHtcblx0XHRyZXR1cm4gdGhpcy5tb2NrTW9kZWwgYXMgYW55IGFzIE9EYXRhTW9kZWw7XG5cdH0pO1xuXG5cdHB1YmxpYyBzZXRQYXRoKHBhdGg6IHN0cmluZyB8IHVuZGVmaW5lZCkge1xuXHRcdHRoaXMubW9ja1BhdGggPSBwYXRoID8gcGF0aCA6IFwiXCI7XG5cdH1cblx0cHVibGljIGdldFBhdGggPSBqZXN0LmZuKCgpID0+IHtcblx0XHRyZXR1cm4gdGhpcy5tb2NrUGF0aDtcblx0fSk7XG5cblx0cHVibGljIGdldFZhbHVlID0gamVzdC5mbigoKSA9PiB7XG5cdFx0cmV0dXJuIHRoaXM/Lm1vY2tNb2RlbD8uZ2V0UHJvcGVydHkoYC8ke3RoaXMubW9ja1BhdGh9YCk7XG5cdH0pO1xufVxuXG5leHBvcnQgY2xhc3MgTW9ja0NvbXBvc2l0ZUJpbmRpbmcgaW1wbGVtZW50cyBQYXJ0aWFsPENvbXBvc2l0ZUJpbmRpbmc+IHtcblx0cHJpdmF0ZSBhQmluZGluZ3M6IE1vY2tQcm9wZXJ0eUJpbmRpbmdbXTtcblxuXHRwdWJsaWMgY29uc3RydWN0b3IoYUJpbmRpbmdzOiBNb2NrUHJvcGVydHlCaW5kaW5nW10pIHtcblx0XHR0aGlzLmFCaW5kaW5ncyA9IGFCaW5kaW5ncztcblx0fVxuXG5cdHB1YmxpYyBpc0Eoc0NsYXNzTmFtZTogc3RyaW5nKTogYm9vbGVhbiB7XG5cdFx0cmV0dXJuIHNDbGFzc05hbWUgPT09IFwic2FwLnVpLm1vZGVsLkNvbXBvc2l0ZUJpbmRpbmdcIjtcblx0fVxuXG5cdHB1YmxpYyBnZXRCaW5kaW5ncyA9IGplc3QuZm4oKCkgPT4ge1xuXHRcdHJldHVybiB0aGlzLmFCaW5kaW5ncztcblx0fSk7XG5cblx0cHVibGljIGdldFZhbHVlID0gamVzdC5mbigoKSA9PiB7XG5cdFx0cmV0dXJuIHRoaXMuYUJpbmRpbmdzLm1hcCgoYmluZGluZykgPT4gYmluZGluZy5nZXRWYWx1ZSgpKTtcblx0fSk7XG59XG5cbmV4cG9ydCBjbGFzcyBNb2NrQ29udGV4dEJpbmRpbmcgaW1wbGVtZW50cyBQYXJ0aWFsPE9EYXRhQ29udGV4dEJpbmRpbmc+IHtcblx0cHJpdmF0ZSBvTW9ja0NvbnRleHQ6IE1vY2tDb250ZXh0O1xuXHRwcml2YXRlIGlzS2VwdEFsaXZlOiBib29sZWFuID0gZmFsc2U7XG5cblx0cHVibGljIGNvbnN0cnVjdG9yKG9Db250ZXh0PzogYW55LCBwcml2YXRlIG1vY2tNb2RlbD86IE1vY2tNb2RlbCkge1xuXHRcdHRoaXMub01vY2tDb250ZXh0ID0gbmV3IE1vY2tDb250ZXh0KG9Db250ZXh0IHx8IHt9LCB0aGlzKTtcblx0fVxuXG5cdHB1YmxpYyBpc0Eoc0NsYXNzTmFtZTogc3RyaW5nKTogYm9vbGVhbiB7XG5cdFx0cmV0dXJuIHNDbGFzc05hbWUgPT09IFwic2FwLnVpLm1vZGVsLm9kYXRhLnY0Lk9EYXRhQ29udGV4dEJpbmRpbmdcIjtcblx0fVxuXHRwdWJsaWMgZ2V0SW50ZXJuYWxNb2NrQ29udGV4dCgpOiBNb2NrQ29udGV4dCB7XG5cdFx0cmV0dXJuIHRoaXMub01vY2tDb250ZXh0O1xuXHR9XG5cdHB1YmxpYyBzZXRNb2RlbChvTW9kZWw6IE1vY2tNb2RlbCkge1xuXHRcdHRoaXMubW9ja01vZGVsID0gb01vZGVsO1xuXHR9XG5cblx0Ly8gTW9ja2VkIEFQSVxuXHRwdWJsaWMgZ2V0Qm91bmRDb250ZXh0ID0gamVzdC5mbigoKSA9PiB7XG5cdFx0cmV0dXJuIHRoaXMub01vY2tDb250ZXh0IGFzIGFueSBhcyBDb250ZXh0O1xuXHR9KTtcblx0cHVibGljIGF0dGFjaEV2ZW50T25jZSA9IGplc3QuZm4oKTtcblx0cHVibGljIGdldE1vZGVsID0gamVzdC5mbigoKSA9PiB7XG5cdFx0cmV0dXJuIHRoaXMubW9ja01vZGVsIGFzIGFueSBhcyBPRGF0YU1vZGVsO1xuXHR9KTtcblx0cHVibGljIHNldFBhcmFtZXRlciA9IGplc3QuZm4oKTtcblx0cHVibGljIGV4ZWN1dGUgPSBqZXN0LmZuKCkubW9ja1Jlc29sdmVkVmFsdWUodHJ1ZSk7XG5cdHB1YmxpYyBnZXRHcm91cElkID0gamVzdC5mbigpO1xufVxuXG4vKipcbiAqIE1vY2sgY2xhc3MgZm9yIE9EYXRhIFY0IE1ldGFNb2RlbFxuICovXG5leHBvcnQgY2xhc3MgTW9ja01ldGFNb2RlbCBpbXBsZW1lbnRzIFBhcnRpYWw8T0RhdGFNZXRhTW9kZWw+IHtcblx0cHJpdmF0ZSBvTWV0YUNvbnRleHQ6IE1vY2tDb250ZXh0O1xuXHRyZXF1ZXN0VmFsdWVMaXN0SW5mbyE6IGplc3QuTW9jazxhbnksIGFueT47XG5cblx0cHVibGljIGNvbnN0cnVjdG9yKG9NZXRhRGF0YT86IGFueSkge1xuXHRcdHRoaXMub01ldGFDb250ZXh0ID0gbmV3IE1vY2tDb250ZXh0KG9NZXRhRGF0YSB8fCB7fSk7XG5cdH1cblxuXHQvLyBNb2NrZWQgQVBJXG5cdC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBAdHlwZXNjcmlwdC1lc2xpbnQvbm8tdW51c2VkLXZhcnNcblx0cHVibGljIGdldE1ldGFDb250ZXh0ID0gamVzdC5mbigoc1BhdGg6IHN0cmluZykgPT4ge1xuXHRcdHJldHVybiBuZXcgTW9ja0NvbnRleHQoeyAkcGF0aDogc1BhdGggfSkgYXMgYW55IGFzIENvbnRleHQ7XG5cdH0pO1xuXHRwdWJsaWMgZ2V0T2JqZWN0ID0gamVzdC5mbigoc1BhdGg6IHN0cmluZykgPT4ge1xuXHRcdHJldHVybiB0aGlzLm9NZXRhQ29udGV4dC5nZXRQcm9wZXJ0eShzUGF0aCk7XG5cdH0pO1xuXHRwdWJsaWMgcmVxdWVzdE9iamVjdCA9IGplc3QuZm4oKTtcblx0cHVibGljIGNyZWF0ZUJpbmRpbmdDb250ZXh0ID0gamVzdC5mbigoc1BhdGg6IHN0cmluZykgPT4ge1xuXHRcdHJldHVybiBuZXcgTW9ja0NvbnRleHQoeyAkcGF0aDogc1BhdGggfSkgYXMgYW55IGFzIENvbnRleHQ7XG5cdH0pO1xuXHRwdWJsaWMgZ2V0TWV0YVBhdGggPSBqZXN0LmZuKChzUGF0aDogc3RyaW5nKSA9PiB7XG5cdFx0Y29uc3QgbWV0YW1vZGVsID0gbmV3IE9EYXRhTWV0YU1vZGVsKCk7XG5cdFx0cmV0dXJuIHNQYXRoID8gbWV0YW1vZGVsLmdldE1ldGFQYXRoKHNQYXRoKSA6IHNQYXRoO1xuXHR9KTtcblx0cHVibGljIGdldENvbnRleHQgPSBqZXN0LmZuKCk7XG59XG5cbi8qKlxuICogTW9jayBjbGFzcyBmb3IgT0RhdGEgVjQgTW9kZWxcbiAqL1xuXG5leHBvcnQgY2xhc3MgTW9ja01vZGVsIGltcGxlbWVudHMgUGFydGlhbDxPRGF0YU1vZGVsPiB7XG5cdHByaXZhdGUgb01ldGFNb2RlbD86IE1vY2tNZXRhTW9kZWw7XG5cblx0cHVibGljIGNvbnN0cnVjdG9yKHByaXZhdGUgbW9ja0xpc3RCaW5kaW5nPzogTW9ja0xpc3RCaW5kaW5nLCBwcml2YXRlIG1vY2tDb250ZXh0QmluZGluZz86IE1vY2tDb250ZXh0QmluZGluZykge1xuXHRcdGlmIChtb2NrTGlzdEJpbmRpbmcpIHtcblx0XHRcdG1vY2tMaXN0QmluZGluZy5zZXRNb2RlbCh0aGlzKTtcblx0XHR9XG5cdFx0aWYgKG1vY2tDb250ZXh0QmluZGluZykge1xuXHRcdFx0bW9ja0NvbnRleHRCaW5kaW5nLnNldE1vZGVsKHRoaXMpO1xuXHRcdH1cblx0fVxuXG5cdC8vIEZhY3Rvcmllc1xuXHRzdGF0aWMgbW9kZWxGcm9tTGlzdEJpbmRpbmcobW9ja0xpc3RCaW5kaW5nOiBNb2NrTGlzdEJpbmRpbmcpOiBNb2NrTW9kZWwge1xuXHRcdHJldHVybiBuZXcgTW9ja01vZGVsKG1vY2tMaXN0QmluZGluZyk7XG5cdH1cblx0c3RhdGljIG1vZGVsRnJvbUNvbnRleHRCaW5kaW5nKG1vY2tDb250ZXh0QmluZGluZzogTW9ja0NvbnRleHRCaW5kaW5nKTogTW9ja01vZGVsIHtcblx0XHRyZXR1cm4gbmV3IE1vY2tNb2RlbCh1bmRlZmluZWQsIG1vY2tDb250ZXh0QmluZGluZyk7XG5cdH1cblxuXHRwdWJsaWMgc2V0TWV0YU1vZGVsKG9NZXRhTW9kZWw6IE1vY2tNZXRhTW9kZWwpIHtcblx0XHR0aGlzLm9NZXRhTW9kZWwgPSBvTWV0YU1vZGVsO1xuXHR9XG5cblx0Ly8gTW9ja2VkIEFQSVxuXHQvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgQHR5cGVzY3JpcHQtZXNsaW50L25vLXVudXNlZC12YXJzXG5cdHB1YmxpYyBiaW5kTGlzdCA9IGplc3QuZm4oKC4uLmFyZ3MpID0+IHtcblx0XHRyZXR1cm4gdGhpcy5tb2NrTGlzdEJpbmRpbmcgYXMgYW55IGFzIE9EYXRhTGlzdEJpbmRpbmc7XG5cdH0pO1xuXHQvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgQHR5cGVzY3JpcHQtZXNsaW50L25vLXVudXNlZC12YXJzXG5cdHB1YmxpYyBiaW5kQ29udGV4dCA9IGplc3QuZm4oKC4uLmFyZ3MpID0+IHtcblx0XHRyZXR1cm4gdGhpcy5tb2NrQ29udGV4dEJpbmRpbmcgYXMgYW55IGFzIE9EYXRhQ29udGV4dEJpbmRpbmc7XG5cdH0pO1xuXHRwdWJsaWMgZ2V0TWV0YU1vZGVsID0gamVzdC5mbigoKSA9PiB7XG5cdFx0cmV0dXJuIHRoaXMub01ldGFNb2RlbCBhcyBhbnkgYXMgT0RhdGFNZXRhTW9kZWw7XG5cdH0pO1xuXG5cdHB1YmxpYyBnZXRQcm9wZXJ0eSA9IGplc3QuZm4oKTtcblx0cHVibGljIHNldFByb3BlcnR5ID0gamVzdC5mbigpO1xuXHRwdWJsaWMgcmVxdWVzdE9iamVjdCA9IGplc3QuZm4oKTtcblx0cHVibGljIGdldEtlZXBBbGl2ZUNvbnRleHQgPSBqZXN0LmZuKCk7XG59XG5cbmV4cG9ydCBjbGFzcyBNb2NrVmlldyBpbXBsZW1lbnRzIFBhcnRpYWw8Vmlldz4ge1xuXHRwdWJsaWMgZ2V0Q29udHJvbGxlciA9IGplc3QuZm4oKTtcblxuXHRwdWJsaWMgZ2V0QmluZGluZ0NvbnRleHQgPSBqZXN0LmZuKCk7XG5cblx0cHVibGljIGdldE1vZGVsID0gamVzdC5mbigpO1xuXG5cdHB1YmxpYyBnZXRWaWV3RGF0YSA9IGplc3QuZm4oKTtcblxuXHRwdWJsaWMgaXNBKHNDbGFzc05hbWU6IHN0cmluZyk6IGJvb2xlYW4ge1xuXHRcdHJldHVybiBzQ2xhc3NOYW1lID09PSBcInNhcC51aS5jb3JlLm12Yy5WaWV3XCI7XG5cdH1cblxuXHRwdWJsaWMgZ2V0SWQgPSBqZXN0LmZuKCk7XG59XG5cbmV4cG9ydCBjbGFzcyBNb2NrQ29udHJvbGxlciBpbXBsZW1lbnRzIFBhcnRpYWw8Q29udHJvbGxlcj4ge1xuXHRwdWJsaWMgZ2V0VmlldyA9IGplc3QuZm4oKS5tb2NrUmV0dXJuVmFsdWUobmV3IE1vY2tWaWV3KCkpO1xuXG5cdHB1YmxpYyBfcm91dGluZyA9IHtcblx0XHRuYXZpZ2F0ZVRvVGFyZ2V0OiBqZXN0LmZuKClcblx0fTtcblxuXHRwdWJsaWMgX2VkaXRGbG93ID0ge1xuXHRcdHN5bmNUYXNrOiBqZXN0LmZuKClcblx0fTtcblxuXHRwdWJsaWMgX3NpZGVFZmZlY3RzID0ge1xuXHRcdGhhbmRsZUZpZWxkQ2hhbmdlOiBqZXN0LmZuKClcblx0fTtcblxuXHRpc0EgPSBqZXN0LmZuKCkubW9ja1JldHVyblZhbHVlKGZhbHNlKTtcbn1cblxuZXhwb3J0IGludGVyZmFjZSBNVkNNb2NrIHtcblx0bW9kZWw6IE1vY2tNb2RlbDtcblx0dmlldzogTW9ja1ZpZXc7XG5cdGNvbnRyb2xsZXI6IE1vY2tDb250cm9sbGVyO1xufVxuXG4vKipcbiAqIEdlbmVyYXRlIG1vZGVsLCB2aWV3IGFuZCBjb250cm9sbGVyIG1vY2tzIHRoYXQgcmVmZXIgdG8gZWFjaCBvdGhlci5cbiAqXG4gKiBAcGFyYW0gZXhpc3RpbmcgT3B0aW9uYWwgZXhpc3RpbmcgbW9ja2VkIGluc3RhbmNlcyB0aGF0IHNob3VsZCBiZSB1c2VkXG4gKiBAcmV0dXJucyBNb2NrZWQgbW9kZWwsIHZpZXcgYW5kIGNvbnRyb2xsZXIgaW5zdGFuY2VzXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBtb2NrTVZDKGV4aXN0aW5nPzogUGFydGlhbDxNVkNNb2NrPik6IE1WQ01vY2sge1xuXHRjb25zdCBtb2RlbCA9IGV4aXN0aW5nPy5tb2RlbCB8fCBuZXcgTW9ja01vZGVsKCk7XG5cdGNvbnN0IHZpZXcgPSBleGlzdGluZz8udmlldyB8fCBuZXcgTW9ja1ZpZXcoKTtcblx0Y29uc3QgY29udHJvbGxlciA9IGV4aXN0aW5nPy5jb250cm9sbGVyIHx8IG5ldyBNb2NrQ29udHJvbGxlcigpO1xuXG5cdHZpZXcuZ2V0Q29udHJvbGxlci5tb2NrUmV0dXJuVmFsdWUoY29udHJvbGxlcik7XG5cdHZpZXcuZ2V0TW9kZWwubW9ja1JldHVyblZhbHVlKG1vZGVsKTtcblx0Y29udHJvbGxlci5nZXRWaWV3Lm1vY2tSZXR1cm5WYWx1ZSh2aWV3KTtcblxuXHRyZXR1cm4geyBtb2RlbCwgdmlldywgY29udHJvbGxlciB9O1xufVxuIl19
|
|
@@ -1,19 +1,19 @@
|
|
|
1
1
|
/**
|
|
2
2
|
* Mock class for a V4 Context
|
|
3
3
|
*/
|
|
4
|
-
import Event from "sap/ui/base/Event";
|
|
5
|
-
import Control from "sap/ui/core/Control";
|
|
6
|
-
import UI5Element from "sap/ui/core/Element";
|
|
7
|
-
import Controller from "sap/ui/core/mvc/Controller";
|
|
8
|
-
import View from "sap/ui/core/mvc/View";
|
|
9
|
-
import CompositeBinding from "sap/ui/model/CompositeBinding";
|
|
10
|
-
import JSONModel from "sap/ui/model/json/JSONModel";
|
|
11
|
-
import Context from "sap/ui/model/odata/v4/Context";
|
|
12
|
-
import ODataContextBinding from "sap/ui/model/odata/v4/ODataContextBinding";
|
|
13
|
-
import ODataListBinding from "sap/ui/model/odata/v4/ODataListBinding";
|
|
4
|
+
import type Event from "sap/ui/base/Event";
|
|
5
|
+
import type Control from "sap/ui/core/Control";
|
|
6
|
+
import type UI5Element from "sap/ui/core/Element";
|
|
7
|
+
import type Controller from "sap/ui/core/mvc/Controller";
|
|
8
|
+
import type View from "sap/ui/core/mvc/View";
|
|
9
|
+
import type CompositeBinding from "sap/ui/model/CompositeBinding";
|
|
10
|
+
import type JSONModel from "sap/ui/model/json/JSONModel";
|
|
11
|
+
import type Context from "sap/ui/model/odata/v4/Context";
|
|
12
|
+
import type ODataContextBinding from "sap/ui/model/odata/v4/ODataContextBinding";
|
|
13
|
+
import type ODataListBinding from "sap/ui/model/odata/v4/ODataListBinding";
|
|
14
14
|
import ODataMetaModel from "sap/ui/model/odata/v4/ODataMetaModel";
|
|
15
|
-
import ODataModel from "sap/ui/model/odata/v4/ODataModel";
|
|
16
|
-
import ODataPropertyBinding from "sap/ui/model/odata/v4/ODataPropertyBinding";
|
|
15
|
+
import type ODataModel from "sap/ui/model/odata/v4/ODataModel";
|
|
16
|
+
import type ODataPropertyBinding from "sap/ui/model/odata/v4/ODataPropertyBinding";
|
|
17
17
|
|
|
18
18
|
export class MockContext implements Partial<Context> {
|
|
19
19
|
private isKeptAlive = false;
|
|
@@ -35,15 +35,14 @@ export class MockContext implements Partial<Context> {
|
|
|
35
35
|
});
|
|
36
36
|
|
|
37
37
|
public getObject = jest.fn((path: string) => {
|
|
38
|
-
|
|
39
|
-
let result = path ? that.oValues[path] : that.oValues;
|
|
38
|
+
let result = path ? this.oValues[path] : this.oValues;
|
|
40
39
|
|
|
41
40
|
if (!result && path && path.indexOf("/") > -1) {
|
|
42
41
|
const parts = path.split("/");
|
|
43
42
|
result = parts.reduce((sum, part: any) => {
|
|
44
43
|
sum = part ? sum[part] : sum;
|
|
45
44
|
return sum;
|
|
46
|
-
},
|
|
45
|
+
}, this.oValues);
|
|
47
46
|
}
|
|
48
47
|
|
|
49
48
|
return result;
|
|
@@ -56,7 +55,7 @@ export class MockContext implements Partial<Context> {
|
|
|
56
55
|
return this.oBinding;
|
|
57
56
|
});
|
|
58
57
|
public getModel = jest.fn(() => {
|
|
59
|
-
return this.oBinding?.getModel() as
|
|
58
|
+
return this.oBinding?.getModel() as ODataModel;
|
|
60
59
|
});
|
|
61
60
|
public isTransient = jest.fn();
|
|
62
61
|
// eslint-disable-next-line @typescript-eslint/no-unused-vars
|
|
@@ -119,6 +118,13 @@ export class MockListBinding implements Partial<ODataListBinding> {
|
|
|
119
118
|
public filter = jest.fn();
|
|
120
119
|
public sort = jest.fn();
|
|
121
120
|
|
|
121
|
+
public getQueryOptionsFromParameters = jest.fn();
|
|
122
|
+
public getPath = jest.fn();
|
|
123
|
+
public isSuspended = jest.fn();
|
|
124
|
+
public resume = jest.fn();
|
|
125
|
+
public refresh = jest.fn();
|
|
126
|
+
public suspend = jest.fn();
|
|
127
|
+
|
|
122
128
|
// eslint-disable-next-line @typescript-eslint/no-unused-vars
|
|
123
129
|
public requestContexts = jest.fn((...args) => {
|
|
124
130
|
return Promise.resolve(this.aMockContexts as any as Context[]);
|
|
@@ -161,7 +167,7 @@ export class MockPropertyBinding implements Partial<ODataPropertyBinding> {
|
|
|
161
167
|
});
|
|
162
168
|
|
|
163
169
|
public getValue = jest.fn(() => {
|
|
164
|
-
return this?.mockModel?.getProperty(
|
|
170
|
+
return this?.mockModel?.getProperty(`/${this.mockPath}`);
|
|
165
171
|
});
|
|
166
172
|
}
|
|
167
173
|
|
|
@@ -211,6 +217,9 @@ export class MockContextBinding implements Partial<ODataContextBinding> {
|
|
|
211
217
|
public getModel = jest.fn(() => {
|
|
212
218
|
return this.mockModel as any as ODataModel;
|
|
213
219
|
});
|
|
220
|
+
public setParameter = jest.fn();
|
|
221
|
+
public execute = jest.fn().mockResolvedValue(true);
|
|
222
|
+
public getGroupId = jest.fn();
|
|
214
223
|
}
|
|
215
224
|
|
|
216
225
|
/**
|
|
@@ -237,7 +246,8 @@ export class MockMetaModel implements Partial<ODataMetaModel> {
|
|
|
237
246
|
return new MockContext({ $path: sPath }) as any as Context;
|
|
238
247
|
});
|
|
239
248
|
public getMetaPath = jest.fn((sPath: string) => {
|
|
240
|
-
|
|
249
|
+
const metamodel = new ODataMetaModel();
|
|
250
|
+
return sPath ? metamodel.getMetaPath(sPath) : sPath;
|
|
241
251
|
});
|
|
242
252
|
public getContext = jest.fn();
|
|
243
253
|
}
|
package/src/sap/fe/test/Utils.js
CHANGED
|
@@ -11,12 +11,12 @@ sap.ui.define(
|
|
|
11
11
|
"sap/base/strings/formatMessage",
|
|
12
12
|
"sap/base/strings/capitalize"
|
|
13
13
|
],
|
|
14
|
-
function(LoaderExtensions, UriParameters, mergeObjects, formatMessageRaw, capitalize) {
|
|
14
|
+
function (LoaderExtensions, UriParameters, mergeObjects, formatMessageRaw, capitalize) {
|
|
15
15
|
"use strict";
|
|
16
16
|
|
|
17
17
|
var Utils = {};
|
|
18
18
|
|
|
19
|
-
Utils.getManifest = function(sComponentName) {
|
|
19
|
+
Utils.getManifest = function (sComponentName) {
|
|
20
20
|
var oUshellContainer = sap.ushell && sap.ushell.Container;
|
|
21
21
|
if (!oUshellContainer) {
|
|
22
22
|
var appPath = Utils.getNoFLPAppPath();
|
|
@@ -39,7 +39,7 @@ sap.ui.define(
|
|
|
39
39
|
|
|
40
40
|
var oTargetManifest = oDefaultManifest;
|
|
41
41
|
if (sDeltaManifest) {
|
|
42
|
-
sDeltaManifest.split(",").forEach(function(sSingleDeltaManifest) {
|
|
42
|
+
sDeltaManifest.split(",").forEach(function (sSingleDeltaManifest) {
|
|
43
43
|
if (sSingleDeltaManifest.indexOf("/") !== 0) {
|
|
44
44
|
sSingleDeltaManifest = sComponentName + "/" + sSingleDeltaManifest;
|
|
45
45
|
}
|
|
@@ -62,15 +62,14 @@ sap.ui.define(
|
|
|
62
62
|
return oTargetManifest;
|
|
63
63
|
};
|
|
64
64
|
|
|
65
|
-
Utils.getNoFLPAppPath = function() {
|
|
65
|
+
Utils.getNoFLPAppPath = function () {
|
|
66
66
|
/*demokit.html scenario - parameter app = appName expected*/
|
|
67
67
|
var oUriParameters = new UriParameters(window.location.href);
|
|
68
68
|
var sApp = oUriParameters.get("app") || "SalesOrder";
|
|
69
|
-
|
|
70
|
-
return appPath;
|
|
69
|
+
return Utils.getAppInfo(sApp).appPath;
|
|
71
70
|
};
|
|
72
71
|
|
|
73
|
-
Utils.getAppInfo = function(sApp) {
|
|
72
|
+
Utils.getAppInfo = function (sApp) {
|
|
74
73
|
var oApps = {
|
|
75
74
|
"SalesOrder-manage": {
|
|
76
75
|
appName: "SalesOrder",
|
|
@@ -156,10 +155,10 @@ sap.ui.define(
|
|
|
156
155
|
return oApps[sApp];
|
|
157
156
|
};
|
|
158
157
|
|
|
159
|
-
Utils.isOfType = function(vToTest, vValidTypes, bNullAndUndefinedAreValid) {
|
|
158
|
+
Utils.isOfType = function (vToTest, vValidTypes, bNullAndUndefinedAreValid) {
|
|
160
159
|
var aValidTypes = Array.isArray(vValidTypes) ? vValidTypes : [vValidTypes];
|
|
161
160
|
|
|
162
|
-
return aValidTypes.reduce(function(bIsOfType, vTypeToCheck) {
|
|
161
|
+
return aValidTypes.reduce(function (bIsOfType, vTypeToCheck) {
|
|
163
162
|
if (bIsOfType) {
|
|
164
163
|
return true;
|
|
165
164
|
}
|
|
@@ -195,18 +194,18 @@ sap.ui.define(
|
|
|
195
194
|
}, false);
|
|
196
195
|
};
|
|
197
196
|
|
|
198
|
-
Utils.isArguments = function(vValue) {
|
|
197
|
+
Utils.isArguments = function (vValue) {
|
|
199
198
|
return Object.prototype.toString.call(vValue) === "[object Arguments]";
|
|
200
199
|
};
|
|
201
200
|
|
|
202
|
-
Utils.parseArguments = function(aExpectedTypes) {
|
|
201
|
+
Utils.parseArguments = function (aExpectedTypes) {
|
|
203
202
|
var aArguments = Array.prototype.slice.call(arguments, 1);
|
|
204
203
|
|
|
205
204
|
if (aArguments.length === 1 && Utils.isArguments(aArguments[0])) {
|
|
206
205
|
aArguments = Array.prototype.slice.call(aArguments[0], 0);
|
|
207
206
|
}
|
|
208
207
|
|
|
209
|
-
return aExpectedTypes.reduce(function(aActualArguments, vExpectedType) {
|
|
208
|
+
return aExpectedTypes.reduce(function (aActualArguments, vExpectedType) {
|
|
210
209
|
if (Utils.isOfType(aArguments[0], vExpectedType, true)) {
|
|
211
210
|
aActualArguments.push(aArguments.shift());
|
|
212
211
|
} else {
|
|
@@ -216,7 +215,7 @@ sap.ui.define(
|
|
|
216
215
|
}, []);
|
|
217
216
|
};
|
|
218
217
|
|
|
219
|
-
Utils.formatObject = function(mObject) {
|
|
218
|
+
Utils.formatObject = function (mObject) {
|
|
220
219
|
if (Utils.isOfType(mObject, [null, undefined])) {
|
|
221
220
|
return "";
|
|
222
221
|
}
|
|
@@ -224,7 +223,7 @@ sap.ui.define(
|
|
|
224
223
|
return (
|
|
225
224
|
"[" +
|
|
226
225
|
mObject
|
|
227
|
-
.map(function(oElement) {
|
|
226
|
+
.map(function (oElement) {
|
|
228
227
|
return Utils.formatObject(oElement);
|
|
229
228
|
})
|
|
230
229
|
.join(", ") +
|
|
@@ -235,7 +234,7 @@ sap.ui.define(
|
|
|
235
234
|
return (
|
|
236
235
|
"{" +
|
|
237
236
|
Object.keys(mObject)
|
|
238
|
-
.map(function(sKey) {
|
|
237
|
+
.map(function (sKey) {
|
|
239
238
|
return sKey + ": " + Utils.formatObject(mObject[sKey]);
|
|
240
239
|
})
|
|
241
240
|
.join(", ") +
|
|
@@ -245,18 +244,18 @@ sap.ui.define(
|
|
|
245
244
|
return mObject.toString();
|
|
246
245
|
};
|
|
247
246
|
|
|
248
|
-
Utils.formatMessage = function(sMessage) {
|
|
249
|
-
var aParameters = Array.prototype.slice.call(arguments, 1).map(function(vParameter) {
|
|
247
|
+
Utils.formatMessage = function (sMessage) {
|
|
248
|
+
var aParameters = Array.prototype.slice.call(arguments, 1).map(function (vParameter) {
|
|
250
249
|
return Utils.formatObject(vParameter);
|
|
251
250
|
});
|
|
252
251
|
return formatMessageRaw(sMessage && sMessage.replace(/'/g, "''"), aParameters);
|
|
253
252
|
};
|
|
254
253
|
|
|
255
|
-
Utils.mergeObjects = function() {
|
|
254
|
+
Utils.mergeObjects = function () {
|
|
256
255
|
return mergeObjects.apply(this, [{}].concat(Array.prototype.slice.call(arguments)));
|
|
257
256
|
};
|
|
258
257
|
|
|
259
|
-
Utils.getAggregation = function(oManagedObject, sAggregationName) {
|
|
258
|
+
Utils.getAggregation = function (oManagedObject, sAggregationName) {
|
|
260
259
|
if (!oManagedObject) {
|
|
261
260
|
return null;
|
|
262
261
|
}
|
|
@@ -267,7 +266,7 @@ sap.ui.define(
|
|
|
267
266
|
return fnAggregation.call(oManagedObject);
|
|
268
267
|
};
|
|
269
268
|
|
|
270
|
-
Utils.pushToArray = function(vElement, vTarget, bAtTheBeginning) {
|
|
269
|
+
Utils.pushToArray = function (vElement, vTarget, bAtTheBeginning) {
|
|
271
270
|
if (vTarget === undefined) {
|
|
272
271
|
vTarget = [];
|
|
273
272
|
} else if (!Array.isArray(vTarget)) {
|
|
@@ -5,7 +5,7 @@
|
|
|
5
5
|
*/
|
|
6
6
|
sap.ui.define(
|
|
7
7
|
["sap/fe/test/Utils", "sap/ui/test/Opa5", "sap/ui/test/OpaBuilder", "sap/fe/test/builder/FEBuilder", "sap/m/p13n/BasePanel"],
|
|
8
|
-
function(Utils, Opa5, OpaBuilder, FEBuilder, MdcP13nBasePanel) {
|
|
8
|
+
function (Utils, Opa5, OpaBuilder, FEBuilder, MdcP13nBasePanel) {
|
|
9
9
|
"use strict";
|
|
10
10
|
|
|
11
11
|
/**
|
|
@@ -14,7 +14,6 @@ sap.ui.define(
|
|
|
14
14
|
* @typedef {object} TableIdentifier
|
|
15
15
|
* @property {string} property The name of the navigation property used for the table
|
|
16
16
|
* @property {string} [qualifier] The name of a qualifier for the table
|
|
17
|
-
*
|
|
18
17
|
* @name sap.fe.test.api.TableIdentifier
|
|
19
18
|
* @public
|
|
20
19
|
*/
|
|
@@ -24,7 +23,6 @@ sap.ui.define(
|
|
|
24
23
|
*
|
|
25
24
|
* @typedef {object} DialogIdentifier
|
|
26
25
|
* @property {sap.fe.test.api.DialogType} type The type of the dialog
|
|
27
|
-
*
|
|
28
26
|
* @name sap.fe.test.api.DialogIdentifier
|
|
29
27
|
* @public
|
|
30
28
|
*/
|
|
@@ -36,7 +34,6 @@ sap.ui.define(
|
|
|
36
34
|
* @property {string} service The name of the service
|
|
37
35
|
* @property {string} action The name of the action
|
|
38
36
|
* @property {boolean} [unbound] Defines whether the action is a bound action (default: false)
|
|
39
|
-
*
|
|
40
37
|
* @name sap.fe.test.api.ActionIdentifier
|
|
41
38
|
* @public
|
|
42
39
|
*/
|
|
@@ -48,7 +45,6 @@ sap.ui.define(
|
|
|
48
45
|
* @property {string} [fieldGroup] The name of the field group containing the field
|
|
49
46
|
* @property {string} property The name of the field
|
|
50
47
|
* @property {string} [connectedFields] The name of the connected field containing the field
|
|
51
|
-
*
|
|
52
48
|
* @name sap.fe.test.api.FieldIdentifier
|
|
53
49
|
* @public
|
|
54
50
|
*/
|
|
@@ -59,7 +55,6 @@ sap.ui.define(
|
|
|
59
55
|
* @typedef {object} SectionIdentifier
|
|
60
56
|
* @property {string} section The name of the section facet
|
|
61
57
|
* @property {string} [subSection] The name of the sub-section facet
|
|
62
|
-
*
|
|
63
58
|
* @name sap.fe.test.api.SectionIdentifier
|
|
64
59
|
* @public
|
|
65
60
|
*/
|
|
@@ -69,7 +64,6 @@ sap.ui.define(
|
|
|
69
64
|
*
|
|
70
65
|
* @typedef {object} ActionDialogFieldIdentifier
|
|
71
66
|
* @property {string} property The name of the field
|
|
72
|
-
*
|
|
73
67
|
* @name sap.fe.test.api.ActionDialogFieldIdentifier
|
|
74
68
|
* @public
|
|
75
69
|
*/
|
|
@@ -103,7 +97,7 @@ sap.ui.define(
|
|
|
103
97
|
return oAnd;
|
|
104
98
|
}
|
|
105
99
|
|
|
106
|
-
var BaseApi = function(oOpaBuilder, vIdentifier) {
|
|
100
|
+
var BaseApi = function (oOpaBuilder, vIdentifier) {
|
|
107
101
|
this._oBuilder = oOpaBuilder;
|
|
108
102
|
this._vIdentifier = vIdentifier;
|
|
109
103
|
};
|
|
@@ -127,7 +121,7 @@ sap.ui.define(
|
|
|
127
121
|
* @public
|
|
128
122
|
* @ui5-restricted
|
|
129
123
|
*/
|
|
130
|
-
BaseApi.prototype.getBuilder = function() {
|
|
124
|
+
BaseApi.prototype.getBuilder = function () {
|
|
131
125
|
return new this._oBuilder.constructor(this._oBuilder.getOpaInstance(), this._oBuilder.build());
|
|
132
126
|
};
|
|
133
127
|
|
|
@@ -138,15 +132,15 @@ sap.ui.define(
|
|
|
138
132
|
* @public
|
|
139
133
|
* @ui5-restricted
|
|
140
134
|
*/
|
|
141
|
-
BaseApi.prototype.getOpaInstance = function() {
|
|
135
|
+
BaseApi.prototype.getOpaInstance = function () {
|
|
142
136
|
return this._oBuilder.getOpaInstance();
|
|
143
137
|
};
|
|
144
138
|
|
|
145
|
-
BaseApi.prototype.getIdentifier = function() {
|
|
139
|
+
BaseApi.prototype.getIdentifier = function () {
|
|
146
140
|
return this._vIdentifier;
|
|
147
141
|
};
|
|
148
142
|
|
|
149
|
-
BaseApi.prototype.prepareResult = function(oWaitForResult) {
|
|
143
|
+
BaseApi.prototype.prepareResult = function (oWaitForResult) {
|
|
150
144
|
var oParentChain = _findParentChainFunction(oWaitForResult, this.isAction ? "when" : "then");
|
|
151
145
|
oWaitForResult.and = this;
|
|
152
146
|
if (!Utils.isOfType(this.isAction, [null, undefined])) {
|
|
@@ -159,12 +153,10 @@ sap.ui.define(
|
|
|
159
153
|
* Creates a matcher for actions.
|
|
160
154
|
*
|
|
161
155
|
* @param {sap.fe.api.ActionIdentifier | string} vActionIdentifier Identifier to be used for the matcher.
|
|
162
|
-
*
|
|
163
156
|
* @returns {object} A matcher
|
|
164
|
-
*
|
|
165
157
|
* @private
|
|
166
158
|
*/
|
|
167
|
-
BaseApi.prototype.createActionMatcher = function(vActionIdentifier) {
|
|
159
|
+
BaseApi.prototype.createActionMatcher = function (vActionIdentifier) {
|
|
168
160
|
var vMatcher, sActionId;
|
|
169
161
|
|
|
170
162
|
if (!Utils.isOfType(vActionIdentifier, String)) {
|
|
@@ -189,12 +181,10 @@ sap.ui.define(
|
|
|
189
181
|
* Creates a matcher for fields.
|
|
190
182
|
*
|
|
191
183
|
* @param {sap.fe.test.api.FieldIdentifier | string} vFieldIdentifier Identifier to be used for the matcher
|
|
192
|
-
*
|
|
193
184
|
* @returns {object} A matcher
|
|
194
|
-
*
|
|
195
185
|
* @private
|
|
196
186
|
*/
|
|
197
|
-
BaseApi.prototype.createFieldMatcher = function(vFieldIdentifier) {
|
|
187
|
+
BaseApi.prototype.createFieldMatcher = function (vFieldIdentifier) {
|
|
198
188
|
var vMatcher, sFieldId;
|
|
199
189
|
if (!Utils.isOfType(vFieldIdentifier, String)) {
|
|
200
190
|
if (typeof vFieldIdentifier.property === "string") {
|
|
@@ -210,7 +200,7 @@ sap.ui.define(
|
|
|
210
200
|
}
|
|
211
201
|
return OpaBuilder.Matchers.some.apply(
|
|
212
202
|
null,
|
|
213
|
-
["DataField", "DataFieldWithURL", "DataFieldForAnnotation"].reduce(function(aMatchers, sDataFieldType) {
|
|
203
|
+
["DataField", "DataFieldWithURL", "DataFieldForAnnotation"].reduce(function (aMatchers, sDataFieldType) {
|
|
214
204
|
return aMatchers.concat([
|
|
215
205
|
FEBuilder.Matchers.id(new RegExp(Utils.formatMessage("::{0}::{1}$", sDataFieldType, sFieldId)))
|
|
216
206
|
]);
|
|
@@ -232,15 +222,12 @@ sap.ui.define(
|
|
|
232
222
|
* Creates a matcher for FormElements (sap.ui.layout.form.FormElement).
|
|
233
223
|
*
|
|
234
224
|
* @param {sap.fe.test.api.FieldIdentifier | string} vFormElementIdentifier Identifier of the field to be used for the matcher
|
|
235
|
-
*
|
|
236
225
|
* @param {string} sDataFieldType Added as prefix for the id. Can be values like 'DataField',
|
|
237
226
|
* 'DataFieldWithUrl', 'DataFieldWithNavigationPath', etc.
|
|
238
|
-
*
|
|
239
227
|
* @returns {object} A matcher
|
|
240
|
-
*
|
|
241
228
|
* @private
|
|
242
229
|
*/
|
|
243
|
-
BaseApi.prototype.createFormElementMatcher = function(vFormElementIdentifier, sDataFieldType) {
|
|
230
|
+
BaseApi.prototype.createFormElementMatcher = function (vFormElementIdentifier, sDataFieldType) {
|
|
244
231
|
var vMatcher, sFormElementId;
|
|
245
232
|
if (!Utils.isOfType(vFormElementIdentifier, String)) {
|
|
246
233
|
if (vFormElementIdentifier.property && typeof vFormElementIdentifier.property === "string") {
|
|
@@ -271,12 +258,10 @@ sap.ui.define(
|
|
|
271
258
|
* }
|
|
272
259
|
* </pre></code>
|
|
273
260
|
* if passed as string, the content of the field will be checked with property 'title'
|
|
274
|
-
*
|
|
275
261
|
* @returns {object} A matcher
|
|
276
|
-
*
|
|
277
262
|
* @private
|
|
278
263
|
*/
|
|
279
|
-
BaseApi.prototype.createFieldGroupMatcher = function(vFieldGroupIdentifier) {
|
|
264
|
+
BaseApi.prototype.createFieldGroupMatcher = function (vFieldGroupIdentifier) {
|
|
280
265
|
var vMatcher, sFieldGroupId;
|
|
281
266
|
if (!Utils.isOfType(vFieldGroupIdentifier, String)) {
|
|
282
267
|
if (vFieldGroupIdentifier.fieldGroup && typeof vFieldGroupIdentifier.fieldGroup === "string") {
|