@sapui5/sap.fe.test 1.97.0 → 1.100.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (77) hide show
  1. package/package.json +6 -2
  2. package/src/sap/fe/test/.library +1 -1
  3. package/src/sap/fe/test/BaseActions.js +3 -2
  4. package/src/sap/fe/test/BaseArrangements.js +3 -2
  5. package/src/sap/fe/test/BaseAssertions.js +3 -2
  6. package/src/sap/fe/test/ConfirmDialog.js +3 -2
  7. package/src/sap/fe/test/FCLView.js +3 -2
  8. package/src/sap/fe/test/FeMocks.js +66 -0
  9. package/src/sap/fe/test/FeMocks.ts +77 -0
  10. package/src/sap/fe/test/Flexibility.js +3 -2
  11. package/src/sap/fe/test/FlexibleColumnLayout.js +3 -2
  12. package/src/sap/fe/test/JestTemplatingHelper.js +83 -25
  13. package/src/sap/fe/test/JestTemplatingHelper.ts +74 -26
  14. package/src/sap/fe/test/JourneyRunner.js +11 -5
  15. package/src/sap/fe/test/ListReport.js +11 -5
  16. package/src/sap/fe/test/LocationUtil.js +3 -2
  17. package/src/sap/fe/test/ObjectPage.js +28 -17
  18. package/src/sap/fe/test/Shell.js +3 -2
  19. package/src/sap/fe/test/Stubs.js +3 -2
  20. package/src/sap/fe/test/TemplatePage.js +3 -2
  21. package/src/sap/fe/test/TemplatingTestUtils.js +4 -3
  22. package/src/sap/fe/test/UI5MockHelper.js +249 -137
  23. package/src/sap/fe/test/UI5MockHelper.ts +143 -13
  24. package/src/sap/fe/test/Utils.js +3 -14
  25. package/src/sap/fe/test/api/APIHelper.js +3 -2
  26. package/src/sap/fe/test/api/BaseAPI.js +5 -9
  27. package/src/sap/fe/test/api/ChartActions.js +3 -2
  28. package/src/sap/fe/test/api/ChartAssertions.js +7 -6
  29. package/src/sap/fe/test/api/DialogAPI.js +17 -4
  30. package/src/sap/fe/test/api/DialogActions.js +3 -2
  31. package/src/sap/fe/test/api/DialogAssertions.js +3 -2
  32. package/src/sap/fe/test/api/DialogCreateActions.js +4 -3
  33. package/src/sap/fe/test/api/DialogCreateAssertions.js +4 -3
  34. package/src/sap/fe/test/api/DialogMessageActions.js +19 -3
  35. package/src/sap/fe/test/api/DialogMessageAssertions.js +4 -3
  36. package/src/sap/fe/test/api/DialogType.js +3 -2
  37. package/src/sap/fe/test/api/DialogValueHelpActions.js +4 -3
  38. package/src/sap/fe/test/api/DialogValueHelpAssertions.js +4 -3
  39. package/src/sap/fe/test/api/EditState.js +3 -2
  40. package/src/sap/fe/test/api/FilterBarAPI.js +12 -3
  41. package/src/sap/fe/test/api/FilterBarActions.js +3 -2
  42. package/src/sap/fe/test/api/FilterBarAssertions.js +3 -2
  43. package/src/sap/fe/test/api/FooterAPI.js +3 -2
  44. package/src/sap/fe/test/api/FooterActionsBase.js +3 -2
  45. package/src/sap/fe/test/api/FooterActionsOP.js +3 -2
  46. package/src/sap/fe/test/api/FooterAssertionsBase.js +3 -2
  47. package/src/sap/fe/test/api/FooterAssertionsOP.js +3 -2
  48. package/src/sap/fe/test/api/FormAPI.js +3 -2
  49. package/src/sap/fe/test/api/FormActions.js +3 -2
  50. package/src/sap/fe/test/api/FormAssertions.js +3 -2
  51. package/src/sap/fe/test/api/HeaderAPI.js +3 -2
  52. package/src/sap/fe/test/api/HeaderActions.js +3 -2
  53. package/src/sap/fe/test/api/HeaderActionsLR.js +3 -2
  54. package/src/sap/fe/test/api/HeaderAssertions.js +3 -2
  55. package/src/sap/fe/test/api/HeaderAssertionsLR.js +3 -2
  56. package/src/sap/fe/test/api/HeaderLR.js +3 -2
  57. package/src/sap/fe/test/api/KPICardAPI.js +3 -2
  58. package/src/sap/fe/test/api/KPICardActions.js +43 -0
  59. package/src/sap/fe/test/api/KPICardAssertions.js +22 -17
  60. package/src/sap/fe/test/api/TableAPI.js +3 -2
  61. package/src/sap/fe/test/api/TableActions.js +3 -21
  62. package/src/sap/fe/test/api/TableAssertions.js +17 -6
  63. package/src/sap/fe/test/builder/DialogBuilder.js +3 -2
  64. package/src/sap/fe/test/builder/FEBuilder.js +3 -2
  65. package/src/sap/fe/test/builder/KPIBuilder.js +14 -4
  66. package/src/sap/fe/test/builder/MacroFieldBuilder.js +3 -2
  67. package/src/sap/fe/test/builder/MdcFieldBuilder.js +3 -2
  68. package/src/sap/fe/test/builder/MdcFilterBarBuilder.js +3 -2
  69. package/src/sap/fe/test/builder/MdcFilterFieldBuilder.js +3 -2
  70. package/src/sap/fe/test/builder/MdcTableBuilder.js +29 -2
  71. package/src/sap/fe/test/builder/OverflowToolbarBuilder.js +3 -2
  72. package/src/sap/fe/test/builder/VMBuilder.js +3 -2
  73. package/src/sap/fe/test/internal/FEArrangements.js +3 -2
  74. package/src/sap/fe/test/internal/FEJourneyRunner.js +9 -5
  75. package/src/sap/fe/test/library.js +4 -3
  76. package/src/sap/fe/test/massEdit.js +3 -2
  77. package/ui5.yaml +0 -3
@@ -7,104 +7,157 @@ sap.ui.define([], function () {
7
7
 
8
8
  var _exports = {};
9
9
 
10
- function _defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if ("value" in descriptor) descriptor.writable = true; Object.defineProperty(target, descriptor.key, descriptor); } }
10
+ function _inherits(subClass, superClass) { if (typeof superClass !== "function" && superClass !== null) { throw new TypeError("Super expression must either be null or a function"); } subClass.prototype = Object.create(superClass && superClass.prototype, { constructor: { value: subClass, writable: true, configurable: true } }); if (superClass) _setPrototypeOf(subClass, superClass); }
11
11
 
12
- function _createClass(Constructor, protoProps, staticProps) { if (protoProps) _defineProperties(Constructor.prototype, protoProps); if (staticProps) _defineProperties(Constructor, staticProps); return Constructor; }
13
-
14
- function _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError("Cannot call a class as a function"); } }
15
-
16
- function _defineProperty(obj, key, value) { if (key in obj) { Object.defineProperty(obj, key, { value: value, enumerable: true, configurable: true, writable: true }); } else { obj[key] = value; } return obj; }
12
+ function _setPrototypeOf(o, p) { _setPrototypeOf = Object.setPrototypeOf || function _setPrototypeOf(o, p) { o.__proto__ = p; return o; }; return _setPrototypeOf(o, p); }
17
13
 
18
14
  /**
19
15
  * Mock class for a V4 Context
20
16
  */
21
- var MockContext = function MockContext(oValues, oBinding) {
22
- var _this = this;
23
-
24
- _classCallCheck(this, MockContext);
17
+ var MockContext = /*#__PURE__*/function () {
18
+ function MockContext(oValues, oBinding) {
19
+ var _this = this;
25
20
 
26
- _defineProperty(this, "getProperty", jest.fn(function (key) {
27
- return _this.oValues[key];
28
- }));
21
+ this.getProperty = jest.fn(function (key) {
22
+ return _this.oValues[key];
23
+ });
24
+ this.requestProperty = jest.fn(function (key) {
25
+ return Promise.resolve(_this.oValues[key]);
26
+ });
27
+ this.setProperty = jest.fn(function (key, value) {
28
+ _this.oValues[key] = value;
29
+ return _this.oValues[key];
30
+ });
31
+ this.getObject = jest.fn(function (path) {
32
+ var that = _this;
33
+ var result = path ? that.oValues[path] : that.oValues;
34
+
35
+ if (!result && path && path.indexOf("/") > -1) {
36
+ var parts = path.split("/");
37
+ result = parts.reduce(function (sum, part) {
38
+ sum = part ? sum[part] : sum;
39
+ return sum;
40
+ }, that.oValues);
41
+ }
42
+
43
+ return result;
44
+ });
45
+ this.getPath = jest.fn(function () {
46
+ return _this.oValues["$path"];
47
+ });
48
+ this.getBinding = jest.fn(function () {
49
+ return _this.oBinding;
50
+ });
51
+ this.getModel = jest.fn(function () {
52
+ var _this$oBinding;
29
53
 
30
- _defineProperty(this, "setProperty", jest.fn(function (key, value) {
31
- _this.oValues[key] = value;
32
- return _this.oValues[key];
33
- }));
54
+ return (_this$oBinding = _this.oBinding) === null || _this$oBinding === void 0 ? void 0 : _this$oBinding.getModel();
55
+ });
56
+ this.isTransient = jest.fn();
57
+ this.oValues = oValues;
58
+ this.oBinding = oBinding;
59
+ }
34
60
 
35
- _defineProperty(this, "getObject", jest.fn(function (key) {
36
- return _this.oValues[key];
37
- }));
61
+ _exports.MockContext = MockContext;
62
+ var _proto = MockContext.prototype;
38
63
 
39
- _defineProperty(this, "getPath", jest.fn(function () {
40
- return _this.oValues["$path"];
41
- }));
64
+ _proto.isA = function isA(sClassName) {
65
+ return sClassName === "sap.ui.model.odata.v4.Context";
66
+ };
42
67
 
43
- _defineProperty(this, "getBinding", jest.fn(function () {
44
- return _this.oBinding;
45
- }));
68
+ return MockContext;
69
+ }();
46
70
 
47
- _defineProperty(this, "getModel", jest.fn());
71
+ _exports.MockContext = MockContext;
48
72
 
49
- this.oValues = oValues;
50
- this.oBinding = oBinding;
73
+ var MockUI5Element = function MockUI5Element() {
74
+ this.bindingContext = new MockContext({});
75
+ this.getBinding = jest.fn();
76
+ this.getBindingContext = jest.fn().mockReturnValue(this.bindingContext);
77
+ this.getBindingInfo = jest.fn();
78
+ this.data = jest.fn();
79
+ this.getModel = jest.fn();
80
+ this.getParent = jest.fn();
51
81
  };
52
82
 
53
- _exports.MockContext = MockContext;
83
+ _exports.MockUI5Element = MockUI5Element;
54
84
 
55
- var MockControl = function MockControl() {
56
- _classCallCheck(this, MockControl);
85
+ var MockControl = /*#__PURE__*/function (_MockUI5Element) {
86
+ _inherits(MockControl, _MockUI5Element);
57
87
 
58
- _defineProperty(this, "getBindingInfo", jest.fn());
88
+ function MockControl() {
89
+ var _this2;
59
90
 
60
- _defineProperty(this, "getBinding", jest.fn());
91
+ for (var _len = arguments.length, args = new Array(_len), _key = 0; _key < _len; _key++) {
92
+ args[_key] = arguments[_key];
93
+ }
61
94
 
62
- _defineProperty(this, "data", jest.fn());
95
+ _this2 = _MockUI5Element.call.apply(_MockUI5Element, [this].concat(args)) || this;
96
+ _this2.getBindingContext = jest.fn();
97
+ return _this2;
98
+ }
99
+
100
+ _exports.MockControl = MockControl;
101
+ return MockControl;
102
+ }(MockUI5Element);
103
+
104
+ _exports.MockControl = MockControl;
63
105
 
64
- _defineProperty(this, "getModel", jest.fn());
106
+ var MockEvent = function MockEvent() {
107
+ var _this3 = this;
108
+
109
+ var params = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : {};
110
+ var source = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : new MockUI5Element();
111
+ this.getParameter = jest.fn(function (name) {
112
+ return _this3.params[name];
113
+ });
114
+ this.getSource = jest.fn(function () {
115
+ return _this3.source;
116
+ });
117
+ this.params = params;
118
+ this.source = source;
65
119
  };
66
120
  /**
67
121
  * Mock class for OData V4 ListBinding
68
122
  */
69
123
 
70
124
 
71
- _exports.MockControl = MockControl;
125
+ _exports.MockEvent = MockEvent;
72
126
 
73
127
  var MockListBinding = /*#__PURE__*/function () {
74
- function MockListBinding(aContexts) {
75
- var _this2 = this;
76
-
77
- _classCallCheck(this, MockListBinding);
78
-
79
- _defineProperty(this, "setAggregation", jest.fn());
80
-
81
- _defineProperty(this, "filter", jest.fn());
82
-
83
- _defineProperty(this, "sort", jest.fn());
84
-
85
- _defineProperty(this, "requestContexts", jest.fn(function () {
86
- return Promise.resolve(_this2.aMockContexts);
87
- }));
88
-
89
- _defineProperty(this, "getCurrentContexts", jest.fn(function () {
90
- return _this2.aMockContexts;
91
- }));
92
-
128
+ function MockListBinding(aContexts, mockModel) {
129
+ var _this4 = this;
130
+
131
+ this.setAggregation = jest.fn();
132
+ this.filter = jest.fn();
133
+ this.sort = jest.fn();
134
+ this.requestContexts = jest.fn(function () {
135
+ return Promise.resolve(_this4.aMockContexts);
136
+ });
137
+ this.getCurrentContexts = jest.fn(function () {
138
+ return _this4.aMockContexts;
139
+ });
140
+ this.getModel = jest.fn(function () {
141
+ return _this4.mockModel;
142
+ });
143
+ this.mockModel = mockModel;
93
144
  aContexts = aContexts || [];
94
145
  this.aMockContexts = aContexts.map(function (context) {
95
- return new MockContext(context, _this2);
146
+ return new MockContext(context, _this4);
96
147
  });
97
148
  }
98
149
 
99
150
  _exports.MockListBinding = MockListBinding;
151
+ var _proto2 = MockListBinding.prototype;
100
152
 
101
- _createClass(MockListBinding, [{
102
- key: "isA",
103
- value: function isA(sClassName) {
104
- return sClassName === "sap.ui.model.odata.v4.ODataListBinding";
105
- } // Mocked API
153
+ _proto2.isA = function isA(sClassName) {
154
+ return sClassName === "sap.ui.model.odata.v4.ODataListBinding";
155
+ };
106
156
 
107
- }]);
157
+ _proto2.setModel = function setModel(oModel) {
158
+ this.mockModel = oModel;
159
+ } // Mocked API
160
+ ;
108
161
 
109
162
  return MockListBinding;
110
163
  }();
@@ -112,34 +165,35 @@ sap.ui.define([], function () {
112
165
  _exports.MockListBinding = MockListBinding;
113
166
 
114
167
  var MockContextBinding = /*#__PURE__*/function () {
115
- function MockContextBinding(oContext) {
116
- var _this3 = this;
117
-
118
- _classCallCheck(this, MockContextBinding);
119
-
120
- _defineProperty(this, "getBoundContext", jest.fn(function () {
121
- return _this3.oMockContext;
122
- }));
123
-
124
- _defineProperty(this, "attachEventOnce", jest.fn());
168
+ function MockContextBinding(oContext, mockModel) {
169
+ var _this5 = this;
125
170
 
171
+ this.getBoundContext = jest.fn(function () {
172
+ return _this5.oMockContext;
173
+ });
174
+ this.attachEventOnce = jest.fn();
175
+ this.getModel = jest.fn(function () {
176
+ return _this5.mockModel;
177
+ });
178
+ this.mockModel = mockModel;
126
179
  this.oMockContext = new MockContext(oContext || {}, this);
127
180
  }
128
181
 
129
182
  _exports.MockContextBinding = MockContextBinding;
183
+ var _proto3 = MockContextBinding.prototype;
130
184
 
131
- _createClass(MockContextBinding, [{
132
- key: "isA",
133
- value: function isA(sClassName) {
134
- return sClassName === "sap.ui.model.odata.v4.ODataContextBinding";
135
- }
136
- }, {
137
- key: "getInternalMockContext",
138
- value: function getInternalMockContext() {
139
- return this.oMockContext;
140
- } // Mocked API
185
+ _proto3.isA = function isA(sClassName) {
186
+ return sClassName === "sap.ui.model.odata.v4.ODataContextBinding";
187
+ };
188
+
189
+ _proto3.getInternalMockContext = function getInternalMockContext() {
190
+ return this.oMockContext;
191
+ };
141
192
 
142
- }]);
193
+ _proto3.setModel = function setModel(oModel) {
194
+ this.mockModel = oModel;
195
+ } // Mocked API
196
+ ;
143
197
 
144
198
  return MockContextBinding;
145
199
  }();
@@ -151,26 +205,26 @@ sap.ui.define([], function () {
151
205
  _exports.MockContextBinding = MockContextBinding;
152
206
 
153
207
  var MockMetaModel = function MockMetaModel(oMetaData) {
154
- var _this4 = this;
208
+ var _this6 = this;
155
209
 
156
- _classCallCheck(this, MockMetaModel);
157
-
158
- _defineProperty(this, "getMetaContext", jest.fn(function (sPath) {
210
+ this.getMetaContext = jest.fn(function (sPath) {
159
211
  return new MockContext({
160
212
  $path: sPath
161
213
  });
162
- }));
163
-
164
- _defineProperty(this, "getObject", jest.fn(function (sPath) {
165
- return _this4.oMetaContext.getProperty(sPath);
166
- }));
167
-
168
- _defineProperty(this, "requestObject", jest.fn());
169
-
170
- _defineProperty(this, "createBindingContext", jest.fn());
171
-
172
- _defineProperty(this, "getMetaPath", jest.fn());
173
-
214
+ });
215
+ this.getObject = jest.fn(function (sPath) {
216
+ return _this6.oMetaContext.getProperty(sPath);
217
+ });
218
+ this.requestObject = jest.fn();
219
+ this.createBindingContext = jest.fn(function (sPath) {
220
+ return new MockContext({
221
+ $path: sPath
222
+ });
223
+ });
224
+ this.getMetaPath = jest.fn(function (sPath) {
225
+ return sPath;
226
+ });
227
+ this.getContext = jest.fn();
174
228
  this.oMetaContext = new MockContext(oMetaData || {});
175
229
  } // Mocked API
176
230
  // eslint-disable-next-line @typescript-eslint/no-unused-vars
@@ -184,56 +238,114 @@ sap.ui.define([], function () {
184
238
 
185
239
  var MockModel = /*#__PURE__*/function () {
186
240
  function MockModel(mockListBinding, mockContextBinding) {
187
- var _this5 = this;
241
+ var _this7 = this;
188
242
 
189
- _classCallCheck(this, MockModel);
190
-
191
- _defineProperty(this, "bindList", jest.fn(function () {
192
- return _this5.mockListBinding;
193
- }));
243
+ this.bindList = jest.fn(function () {
244
+ return _this7.mockListBinding;
245
+ });
246
+ this.bindContext = jest.fn(function () {
247
+ return _this7.mockContextBinding;
248
+ });
249
+ this.getMetaModel = jest.fn(function () {
250
+ return _this7.oMetaModel;
251
+ });
252
+ this.getProperty = jest.fn();
253
+ this.setProperty = jest.fn();
254
+ this.requestObject = jest.fn();
255
+ this.mockListBinding = mockListBinding;
256
+ this.mockContextBinding = mockContextBinding;
194
257
 
195
- _defineProperty(this, "bindContext", jest.fn(function () {
196
- return _this5.mockContextBinding;
197
- }));
258
+ if (mockListBinding) {
259
+ mockListBinding.setModel(this);
260
+ }
198
261
 
199
- _defineProperty(this, "getMetaModel", jest.fn(function () {
200
- return _this5.oMetaModel;
201
- }));
262
+ if (mockContextBinding) {
263
+ mockContextBinding.setModel(this);
264
+ }
265
+ } // Factories
202
266
 
203
- _defineProperty(this, "getProperty", jest.fn());
204
267
 
205
- _defineProperty(this, "setProperty", jest.fn());
268
+ _exports.MockModel = MockModel;
206
269
 
207
- this.mockListBinding = mockListBinding;
208
- this.mockContextBinding = mockContextBinding;
209
- } // Factories
270
+ MockModel.modelFromListBinding = function modelFromListBinding(mockListBinding) {
271
+ return new MockModel(mockListBinding);
272
+ };
210
273
 
274
+ MockModel.modelFromContextBinding = function modelFromContextBinding(mockContextBinding) {
275
+ return new MockModel(undefined, mockContextBinding);
276
+ };
211
277
 
212
- _exports.MockModel = MockModel;
278
+ var _proto4 = MockModel.prototype;
213
279
 
214
- _createClass(MockModel, [{
215
- key: "setMetaModel",
216
- value: function setMetaModel(oMetaModel) {
217
- this.oMetaModel = oMetaModel;
218
- } // Mocked API
219
- // eslint-disable-next-line @typescript-eslint/no-unused-vars
220
-
221
- }], [{
222
- key: "modelFromListBinding",
223
- value: function modelFromListBinding(mockListBinding) {
224
- return new MockModel(mockListBinding);
225
- }
226
- }, {
227
- key: "modelFromContextBinding",
228
- value: function modelFromContextBinding(mockContextBinding) {
229
- return new MockModel(undefined, mockContextBinding);
230
- }
231
- }]);
280
+ _proto4.setMetaModel = function setMetaModel(oMetaModel) {
281
+ this.oMetaModel = oMetaModel;
282
+ } // Mocked API
283
+ // eslint-disable-next-line @typescript-eslint/no-unused-vars
284
+ ;
232
285
 
233
286
  return MockModel;
234
287
  }();
235
288
 
236
289
  _exports.MockModel = MockModel;
290
+
291
+ var MockView = /*#__PURE__*/function () {
292
+ function MockView() {
293
+ this.getController = jest.fn();
294
+ this.getBindingContext = jest.fn();
295
+ this.getModel = jest.fn();
296
+ this.getViewData = jest.fn();
297
+ this.getId = jest.fn();
298
+ }
299
+
300
+ _exports.MockView = MockView;
301
+ var _proto5 = MockView.prototype;
302
+
303
+ _proto5.isA = function isA(sClassName) {
304
+ return sClassName === "sap.ui.core.mvc.View";
305
+ };
306
+
307
+ return MockView;
308
+ }();
309
+
310
+ _exports.MockView = MockView;
311
+
312
+ var MockController = function MockController() {
313
+ this.getView = jest.fn().mockReturnValue(new MockView());
314
+ this._routing = {
315
+ navigateToTarget: jest.fn()
316
+ };
317
+ this._editFlow = {
318
+ syncTask: jest.fn()
319
+ };
320
+ this._sideEffects = {
321
+ handleFieldChange: jest.fn()
322
+ };
323
+ this.isA = jest.fn().mockReturnValue(false);
324
+ };
325
+
326
+ _exports.MockController = MockController;
327
+
328
+ /**
329
+ * Generate model, view and controller mocks that refer to each other.
330
+ *
331
+ * @param existing Optional existing mocked instances that should be used
332
+ * @returns Mocked model, view and controller instances
333
+ */
334
+ function mockMVC(existing) {
335
+ var model = (existing === null || existing === void 0 ? void 0 : existing.model) || new MockModel();
336
+ var view = (existing === null || existing === void 0 ? void 0 : existing.view) || new MockView();
337
+ var controller = (existing === null || existing === void 0 ? void 0 : existing.controller) || new MockController();
338
+ view.getController.mockReturnValue(controller);
339
+ view.getModel.mockReturnValue(model);
340
+ controller.getView.mockReturnValue(view);
341
+ return {
342
+ model: model,
343
+ view: view,
344
+ controller: controller
345
+ };
346
+ }
347
+
348
+ _exports.mockMVC = mockMVC;
237
349
  return _exports;
238
350
  }, false);
239
- //# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIlVJNU1vY2tIZWxwZXIudHMiXSwibmFtZXMiOlsiTW9ja0NvbnRleHQiLCJvVmFsdWVzIiwib0JpbmRpbmciLCJqZXN0IiwiZm4iLCJrZXkiLCJ2YWx1ZSIsIk1vY2tDb250cm9sIiwiTW9ja0xpc3RCaW5kaW5nIiwiYUNvbnRleHRzIiwiUHJvbWlzZSIsInJlc29sdmUiLCJhTW9ja0NvbnRleHRzIiwibWFwIiwiY29udGV4dCIsInNDbGFzc05hbWUiLCJNb2NrQ29udGV4dEJpbmRpbmciLCJvQ29udGV4dCIsIm9Nb2NrQ29udGV4dCIsIk1vY2tNZXRhTW9kZWwiLCJvTWV0YURhdGEiLCJzUGF0aCIsIiRwYXRoIiwib01ldGFDb250ZXh0IiwiZ2V0UHJvcGVydHkiLCJNb2NrTW9kZWwiLCJtb2NrTGlzdEJpbmRpbmciLCJtb2NrQ29udGV4dEJpbmRpbmciLCJvTWV0YU1vZGVsIiwidW5kZWZpbmVkIl0sIm1hcHBpbmdzIjoiO0FBQUE7QUFDQTtBQUNBOzs7Ozs7Ozs7Ozs7OztBQUZBO0FBQ0E7QUFDQTtNQUlhQSxXLEdBQ1oscUJBQTJCQyxPQUEzQixFQUFpREMsUUFBakQsRUFBaUU7QUFBQTs7QUFBQTs7QUFBQSx5Q0FFNUNDLElBQUksQ0FBQ0MsRUFBTCxDQUFRLFVBQUNDLEdBQUQsRUFBaUI7QUFDN0MsYUFBTyxLQUFJLENBQUNKLE9BQUwsQ0FBYUksR0FBYixDQUFQO0FBQ0EsS0FGb0IsQ0FGNEM7O0FBQUEseUNBSzVDRixJQUFJLENBQUNDLEVBQUwsQ0FBUSxVQUFDQyxHQUFELEVBQWNDLEtBQWQsRUFBNkI7QUFDekQsTUFBQSxLQUFJLENBQUNMLE9BQUwsQ0FBYUksR0FBYixJQUFvQkMsS0FBcEI7QUFDQSxhQUFPLEtBQUksQ0FBQ0wsT0FBTCxDQUFhSSxHQUFiLENBQVA7QUFDQSxLQUhvQixDQUw0Qzs7QUFBQSx1Q0FVOUNGLElBQUksQ0FBQ0MsRUFBTCxDQUFRLFVBQUNDLEdBQUQsRUFBaUI7QUFDM0MsYUFBTyxLQUFJLENBQUNKLE9BQUwsQ0FB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dCI6WyIvKipcbiAqIE1vY2sgY2xhc3MgZm9yIGEgVjQgQ29udGV4dFxuICovXG5cbmltcG9ydCB7IENvbnRleHQsIE9EYXRhTGlzdEJpbmRpbmcsIE9EYXRhQ29udGV4dEJpbmRpbmcsIE9EYXRhTWV0YU1vZGVsLCBPRGF0YU1vZGVsIH0gZnJvbSBcInNhcC91aS9tb2RlbC9vZGF0YS92NFwiO1xuXG5leHBvcnQgY2xhc3MgTW9ja0NvbnRleHQgaW1wbGVtZW50cyBQYXJ0aWFsPENvbnRleHQ+IHtcblx0cHVibGljIGNvbnN0cnVjdG9yKHByaXZhdGUgb1ZhbHVlczogYW55LCBwcml2YXRlIG9CaW5kaW5nPzogYW55KSB7fVxuXG5cdHB1YmxpYyBnZXRQcm9wZXJ0eSA9IGplc3QuZm4oKGtleTogc3RyaW5nKSA9PiB7XG5cdFx0cmV0dXJuIHRoaXMub1ZhbHVlc1trZXldO1xuXHR9KTtcblx0cHVibGljIHNldFByb3BlcnR5ID0gamVzdC5mbigoa2V5OiBzdHJpbmcsIHZhbHVlOiBhbnkpID0+IHtcblx0XHR0aGlzLm9WYWx1ZXNba2V5XSA9IHZhbHVlO1xuXHRcdHJldHVybiB0aGlzLm9WYWx1ZXNba2V5XTtcblx0fSk7XG5cblx0cHVibGljIGdldE9iamVjdCA9IGplc3QuZm4oKGtleTogc3RyaW5nKSA9PiB7XG5cdFx0cmV0dXJuIHRoaXMub1ZhbHVlc1trZXldO1xuXHR9KTtcblx0cHVibGljIGdldFBhdGggPSBqZXN0LmZuKCgpID0+IHtcblx0XHRyZXR1cm4gdGhpcy5vVmFsdWVzW1wiJHBhdGhcIl07XG5cdH0pO1xuXG5cdHB1YmxpYyBnZXRCaW5kaW5nID0gamVzdC5mbigoKSA9PiB7XG5cdFx0cmV0dXJuIHRoaXMub0JpbmRpbmc7XG5cdH0pO1xuXHRwdWJsaWMgZ2V0TW9kZWwgPSBqZXN0LmZuKCk7XG59XG5cbmV4cG9ydCBjbGFzcyBNb2NrQ29udHJvbCB7XG5cdHB1YmxpYyBnZXRCaW5kaW5nSW5mbyA9IGplc3QuZm4oKTtcblx0cHVibGljIGdldEJpbmRpbmcgPSBqZXN0LmZuKCk7XG5cdHB1YmxpYyBkYXRhID0gamVzdC5mbigpO1xuXHRwdWJsaWMgZ2V0TW9kZWwgPSBqZXN0LmZuKCk7XG59XG5cbi8qKlxuICogTW9jayBjbGFzcyBmb3IgT0RhdGEgVjQgTGlzdEJpbmRpbmdcbiAqL1xuZXhwb3J0IGNsYXNzIE1vY2tMaXN0QmluZGluZyBpbXBsZW1lbnRzIFBhcnRpYWw8T0RhdGFMaXN0QmluZGluZz4ge1xuXHRwcml2YXRlIGFNb2NrQ29udGV4dHM6IE1vY2tDb250ZXh0W107XG5cblx0cHVibGljIGNvbnN0cnVjdG9yKGFDb250ZXh0cz86IGFueVtdKSB7XG5cdFx0YUNvbnRleHRzID0gYUNvbnRleHRzIHx8IFtdO1xuXG5cdFx0dGhpcy5hTW9ja0NvbnRleHRzID0gYUNvbnRleHRzLm1hcChjb250ZXh0ID0+IHtcblx0XHRcdHJldHVybiBuZXcgTW9ja0NvbnRleHQoY29udGV4dCwgdGhpcyk7XG5cdFx0fSk7XG5cdH1cblxuXHRwdWJsaWMgaXNBKHNDbGFzc05hbWU6IHN0cmluZyk6IGJvb2xlYW4ge1xuXHRcdHJldHVybiBzQ2xhc3NOYW1lID09PSBcInNhcC51aS5tb2RlbC5vZGF0YS52NC5PRGF0YUxpc3RCaW5kaW5nXCI7XG5cdH1cblxuXHQvLyBNb2NrZWQgQVBJXG5cdHB1YmxpYyBzZXRBZ2dyZWdhdGlvbiA9IGplc3QuZm4oKTtcblx0cHVibGljIGZpbHRlciA9IGplc3QuZm4oKTtcblx0cHVibGljIHNvcnQgPSBqZXN0LmZuKCk7XG5cblx0Ly8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIEB0eXBlc2NyaXB0LWVzbGludC9uby11bnVzZWQtdmFyc1xuXHRwdWJsaWMgcmVxdWVzdENvbnRleHRzID0gamVzdC5mbigoLi4uYXJncykgPT4ge1xuXHRcdHJldHVybiBQcm9taXNlLnJlc29sdmUoKHRoaXMuYU1vY2tDb250ZXh0cyBhcyBhbnkpIGFzIENvbnRleHRbXSk7XG5cdH0pO1xuXHQvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgQHR5cGVzY3JpcHQtZXNsaW50L25vLXVudXNlZC12YXJzXG5cdHB1YmxpYyBnZXRDdXJyZW50Q29udGV4dHMgPSBqZXN0LmZuKCguLi5hcmdzKSA9PiB7XG5cdFx0cmV0dXJuICh0aGlzLmFNb2NrQ29udGV4dHMgYXMgYW55KSBhcyBDb250ZXh0W107XG5cdH0pO1xufVxuXG5leHBvcnQgY2xhc3MgTW9ja0NvbnRleHRCaW5kaW5nIGltcGxlbWVudHMgUGFydGlhbDxPRGF0YUNvbnRleHRCaW5kaW5nPiB7XG5cdHByaXZhdGUgb01vY2tDb250ZXh0OiBNb2NrQ29udGV4dDtcblxuXHRwdWJsaWMgY29uc3RydWN0b3Iob0NvbnRleHQ/OiBhbnkpIHtcblx0XHR0aGlzLm9Nb2NrQ29udGV4dCA9IG5ldyBNb2NrQ29udGV4dChvQ29udGV4dCB8fCB7fSwgdGhpcyk7XG5cdH1cblxuXHRwdWJsaWMgaXNBKHNDbGFzc05hbWU6IHN0cmluZyk6IGJvb2xlYW4ge1xuXHRcdHJldHVybiBzQ2xhc3NOYW1lID09PSBcInNhcC51aS5tb2RlbC5vZGF0YS52NC5PRGF0YUNvbnRleHRCaW5kaW5nXCI7XG5cdH1cblx0cHVibGljIGdldEludGVybmFsTW9ja0NvbnRleHQoKTogTW9ja0NvbnRleHQge1xuXHRcdHJldHVybiB0aGlzLm9Nb2NrQ29udGV4dDtcblx0fVxuXG5cdC8vIE1vY2tlZCBBUElcblx0cHVibGljIGdldEJvdW5kQ29udGV4dCA9IGplc3QuZm4oKCkgPT4ge1xuXHRcdHJldHVybiAodGhpcy5vTW9ja0NvbnRleHQgYXMgYW55KSBhcyBDb250ZXh0O1xuXHR9KTtcblx0cHVibGljIGF0dGFjaEV2ZW50T25jZSA9IGplc3QuZm4oKTtcbn1cblxuLyoqXG4gKiBNb2NrIGNsYXNzIGZvciBPRGF0YSBWNCBNZXRhTW9kZWxcbiAqL1xuZXhwb3J0IGNsYXNzIE1vY2tNZXRhTW9kZWwgaW1wbGVtZW50cyBQYXJ0aWFsPE9EYXRhTWV0YU1vZGVsPiB7XG5cdHByaXZhdGUgb01ldGFDb250ZXh0OiBNb2NrQ29udGV4dDtcblxuXHRwdWJsaWMgY29uc3RydWN0b3Iob01ldGFEYXRhPzogYW55KSB7XG5cdFx0dGhpcy5vTWV0YUNvbnRleHQgPSBuZXcgTW9ja0NvbnRleHQob01ldGFEYXRhIHx8IHt9KTtcblx0fVxuXG5cdC8vIE1vY2tlZCBBUElcblx0Ly8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIEB0eXBlc2NyaXB0LWVzbGludC9uby11bnVzZWQtdmFyc1xuXHRwdWJsaWMgZ2V0TWV0YUNvbnRleHQgPSBqZXN0LmZuKChzUGF0aDogc3RyaW5nKSA9PiB7XG5cdFx0cmV0dXJuIChuZXcgTW9ja0NvbnRleHQoeyAkcGF0aDogc1BhdGggfSkgYXMgYW55KSBhcyBDb250ZXh0O1xuXHR9KTtcblx0cHVibGljIGdldE9iamVjdCA9IGplc3QuZm4oKHNQYXRoOiBzdHJpbmcpID0+IHtcblx0XHRyZXR1cm4gdGhpcy5vTWV0YUNvbnRleHQuZ2V0UHJvcGVydHkoc1BhdGgpO1xuXHR9KTtcblx0cHVibGljIHJlcXVlc3RPYmplY3QgPSBqZXN0LmZuKCk7XG5cdHB1YmxpYyBjcmVhdGVCaW5kaW5nQ29udGV4dCA9IGplc3QuZm4oKTtcblx0cHVibGljIGdldE1ldGFQYXRoID0gamVzdC5mbigpO1xufVxuXG4vKipcbiAqIE1vY2sgY2xhc3MgZm9yIE9EYXRhIFY0IE1vZGVsXG4gKi9cblxuZXhwb3J0IGNsYXNzIE1vY2tNb2RlbCBpbXBsZW1lbnRzIFBhcnRpYWw8T0RhdGFNb2RlbD4ge1xuXHRwcml2YXRlIG9NZXRhTW9kZWw/OiBNb2NrTWV0YU1vZGVsO1xuXG5cdHB1YmxpYyBjb25zdHJ1Y3Rvcihwcml2YXRlIG1vY2tMaXN0QmluZGluZz86IE1vY2tMaXN0QmluZGluZywgcHJpdmF0ZSBtb2NrQ29udGV4dEJpbmRpbmc/OiBNb2NrQ29udGV4dEJpbmRpbmcpIHt9XG5cblx0Ly8gRmFjdG9yaWVzXG5cdHN0YXRpYyBtb2RlbEZyb21MaXN0QmluZGluZyhtb2NrTGlzdEJpbmRpbmc6IE1vY2tMaXN0QmluZGluZyk6IE1vY2tNb2RlbCB7XG5cdFx0cmV0dXJuIG5ldyBNb2NrTW9kZWwobW9ja0xpc3RCaW5kaW5nKTtcblx0fVxuXHRzdGF0aWMgbW9kZWxGcm9tQ29udGV4dEJpbmRpbmcobW9ja0NvbnRleHRCaW5kaW5nOiBNb2NrQ29udGV4dEJpbmRpbmcpOiBNb2NrTW9kZWwge1xuXHRcdHJldHVybiBuZXcgTW9ja01vZGVsKHVuZGVmaW5lZCwgbW9ja0NvbnRleHRCaW5kaW5nKTtcblx0fVxuXG5cdHB1YmxpYyBzZXRNZXRhTW9kZWwob01ldGFNb2RlbDogTW9ja01ldGFNb2RlbCkge1xuXHRcdHRoaXMub01ldGFNb2RlbCA9IG9NZXRhTW9kZWw7XG5cdH1cblxuXHQvLyBNb2NrZWQgQVBJXG5cdC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBAdHlwZXNjcmlwdC1lc2xpbnQvbm8tdW51c2VkLXZhcnNcblx0cHVibGljIGJpbmRMaXN0ID0gamVzdC5mbigoLi4uYXJncykgPT4ge1xuXHRcdHJldHVybiAodGhpcy5tb2NrTGlzdEJpbmRpbmcgYXMgYW55KSBhcyBPRGF0YUxpc3RCaW5kaW5nO1xuXHR9KTtcblx0Ly8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIEB0eXBlc2NyaXB0LWVzbGludC9uby11bnVzZWQtdmFyc1xuXHRwdWJsaWMgYmluZENvbnRleHQgPSBqZXN0LmZuKCguLi5hcmdzKSA9PiB7XG5cdFx0cmV0dXJuICh0aGlzLm1vY2tDb250ZXh0QmluZGluZyBhcyBhbnkpIGFzIE9EYXRhQ29udGV4dEJpbmRpbmc7XG5cdH0pO1xuXHRwdWJsaWMgZ2V0TWV0YU1vZGVsID0gamVzdC5mbigoKSA9PiB7XG5cdFx0cmV0dXJuICh0aGlzLm9NZXRhTW9kZWwgYXMgYW55KSBhcyBPRGF0YU1ldGFNb2RlbDtcblx0fSk7XG5cblx0cHVibGljIGdldFByb3BlcnR5ID0gamVzdC5mbigpO1xuXHRwdWJsaWMgc2V0UHJvcGVydHkgPSBqZXN0LmZuKCk7XG59XG4iXX0=
351
+ //# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIlVJNU1vY2tIZWxwZXIudHMiXSwibmFtZXMiOlsiTW9ja0NvbnRleHQiLCJvVmFsdWVzIiwib0JpbmRpbmciLCJnZXRQcm9wZXJ0eSIsImplc3QiLCJmbiIsImtleSIsInJlcXVlc3RQcm9wZXJ0eSIsIlByb21pc2UiLCJyZXNvbHZlIiwic2V0UHJvcGVydHkiLCJ2YWx1ZSIsImdldE9iamVjdCIsInBhdGgiLCJ0aGF0IiwicmVzdWx0IiwiaW5kZXhPZiIsInBhcnRzIiwic3BsaXQiLCJyZWR1Y2UiLCJzdW0iLCJwYXJ0IiwiZ2V0UGF0aCIsImdldEJpbmRpbmciLCJnZXRNb2RlbCIsImlzVHJhbnNpZW50IiwiaXNBIiwic0NsYXNzTmFtZSIsIk1vY2tVSTVFbGVtZW50IiwiYmluZGluZ0NvbnRleHQiLCJnZXRCaW5kaW5nQ29udGV4dCIsIm1vY2tSZXR1cm5WYWx1ZSIsImdldEJpbmRpbmdJbmZvIiwiZGF0YSIsImdldFBhcmVudCIsIk1vY2tDb250cm9sIiwiTW9ja0V2ZW50IiwicGFyYW1zIiwic291cmNlIiwiZ2V0UGFyYW1ldGVyIiwibmFtZSIsImdldFNvdXJjZSIsIk1vY2tMaXN0QmluZGluZyIsImFDb250ZXh0cyIsIm1vY2tNb2RlbCIsInNldEFnZ3JlZ2F0aW9uIiwiZmlsdGVyIiwic29ydCIsInJlcXVlc3RDb250ZXh0cyIsImFNb2NrQ29udGV4dHMiLCJnZXRDdXJyZW50Q29udGV4dHMiLCJtYXAiLCJjb250ZXh0Iiwic2V0TW9kZWwiLCJvTW9kZWwiLCJNb2NrQ29udGV4dEJpbmRpbmciLCJvQ29udGV4dCIsImdldEJvdW5kQ29udGV4dCIsIm9Nb2NrQ29udGV4dCIsImF0dGFjaEV2ZW50T25jZSIsImdldEludGVybmFsTW9ja0NvbnRleHQiLCJNb2NrTWV0YU1vZGVsIiwib01ldGFEYXRhIiwiZ2V0TWV0YUNvbnRleHQiLCJzUGF0aCIsIiRwYXRoIiwib01ldGFDb250ZXh0IiwicmVxdWVzdE9iamVjdCIsImNyZWF0ZUJpbmRpbmdDb250ZXh0IiwiZ2V0TWV0YVBhdGgiLCJnZXRDb250ZXh0IiwiTW9ja01vZGVsIiwibW9ja0xpc3RCaW5kaW5nIiwibW9ja0NvbnRleHRCaW5kaW5nIiwiYmluZExpc3QiLCJiaW5kQ29udGV4dCIsImdldE1ldGFNb2RlbCIsIm9NZXRhTW9kZWwiLCJtb2RlbEZyb21MaXN0QmluZGluZyIsIm1vZGVsRnJvbUNvbnRleHRCaW5kaW5nIiwidW5kZWZpbmVkIiwic2V0TWV0YU1vZGVsIiwiTW9ja1ZpZXciLCJnZXRDb250cm9sbGVyIiwiZ2V0Vmlld0RhdGEiLCJnZXRJZCIsIk1vY2tDb250cm9sbGVyIiwiZ2V0VmlldyIsIl9yb3V0aW5nIiwibmF2aWdhdGVUb1RhcmdldCIsIl9lZGl0RmxvdyIsInN5bmNUYXNrIiwiX3NpZGVFZmZlY3RzIiwiaGFuZGxlRmllbGRDaGFuZ2UiLCJtb2NrTVZDIiwiZXhpc3RpbmciLCJtb2RlbCIsInZpZXciLCJjb250cm9sbGVyIl0sIm1hcHBpbmdzIjoiO0FBQUE7QUFDQTtBQUNBOzs7Ozs7Ozs7O0FBRkE7QUFDQTtBQUNBO01BWWFBLFc7QUFDWix5QkFBMkJDLE9BQTNCLEVBQWtEQyxRQUFsRCxFQUFrRTtBQUFBOztBQUFBLFdBTTNEQyxXQU4yRCxHQU03Q0MsSUFBSSxDQUFDQyxFQUFMLENBQVEsVUFBQ0MsR0FBRCxFQUFpQjtBQUM3QyxlQUFPLEtBQUksQ0FBQ0wsT0FBTCxDQUFhSyxHQUFiLENBQVA7QUFDQSxPQUZvQixDQU42QztBQUFBLFdBUzNEQyxlQVQyRCxHQVN6Q0gsSUFBSSxDQUFDQyxFQUFMLENBQVEsVUFBQ0MsR0FBRCxFQUFpQjtBQUNqRCxlQUFPRSxPQUFPLENBQUNDLE9BQVIsQ0FBZ0IsS0FBSSxDQUFDUixPQUFMLENBQWFLLEdBQWIsQ0FBaEIsQ0FBUDtBQUNBLE9BRndCLENBVHlDO0FBQUEsV0FZM0RJLFdBWjJELEdBWTdDTixJQUFJLENBQUNDLEVBQUwsQ0FBUSxVQUFDQyxHQUFELEVBQWNLLEtBQWQsRUFBNkI7QUFDekQsUUFBQSxLQUFJLENBQUNW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O0FBQ0FELElBQUFBLElBQUksQ0FBQ3pFLFFBQUwsQ0FBY08sZUFBZCxDQUE4QmlFLEtBQTlCO0FBQ0FFLElBQUFBLFVBQVUsQ0FBQ1gsT0FBWCxDQUFtQnhELGVBQW5CLENBQW1Da0UsSUFBbkM7QUFFQSxXQUFPO0FBQUVELE1BQUFBLEtBQUssRUFBTEEsS0FBRjtBQUFTQyxNQUFBQSxJQUFJLEVBQUpBLElBQVQ7QUFBZUMsTUFBQUEsVUFBVSxFQUFWQTtBQUFmLEtBQVA7QUFDQSIsInNvdXJjZVJvb3QiOiIuIiwic291cmNlc0NvbnRlbnQiOlsiLyoqXG4gKiBNb2NrIGNsYXNzIGZvciBhIFY0IENvbnRleHRcbiAqL1xuaW1wb3J0IEV2ZW50IGZyb20gXCJzYXAvdWkvYmFzZS9FdmVudFwiO1xuaW1wb3J0IENvbnRyb2wgZnJvbSBcInNhcC91aS9jb3JlL0NvbnRyb2xcIjtcbmltcG9ydCBVSTVFbGVtZW50IGZyb20gXCJzYXAvdWkvY29yZS9FbGVtZW50XCI7XG5pbXBvcnQgQ29udHJvbGxlciBmcm9tIFwic2FwL3VpL2NvcmUvbXZjL0NvbnRyb2xsZXJcIjtcbmltcG9ydCBWaWV3IGZyb20gXCJzYXAvdWkvY29yZS9tdmMvVmlld1wiO1xuaW1wb3J0IENvbnRleHQgZnJvbSBcInNhcC91aS9tb2RlbC9vZGF0YS92NC9Db250ZXh0XCI7XG5pbXBvcnQgT0RhdGFMaXN0QmluZGluZyBmcm9tIFwic2FwL3VpL21vZGVsL29kYXRhL3Y0L09EYXRhTGlzdEJpbmRpbmdcIjtcbmltcG9ydCBPRGF0YUNvbnRleHRCaW5kaW5nIGZyb20gXCJzYXAvdWkvbW9kZWwvb2RhdGEvdjQvT0RhdGFDb250ZXh0QmluZGluZ1wiO1xuaW1wb3J0IE9EYXRhTWV0YU1vZGVsIGZyb20gXCJzYXAvdWkvbW9kZWwvb2RhdGEvdjQvT0RhdGFNZXRhTW9kZWxcIjtcbmltcG9ydCBPRGF0YU1vZGVsIGZyb20gXCJzYXAvdWkvbW9kZWwvb2RhdGEvdjQvT0RhdGFNb2RlbFwiO1xuXG5leHBvcnQgY2xhc3MgTW9ja0NvbnRleHQgaW1wbGVtZW50cyBQYXJ0aWFsPENvbnRleHQ+IHtcblx0cHVibGljIGNvbnN0cnVjdG9yKHByaXZhdGUgb1ZhbHVlcz86IGFueSwgcHJpdmF0ZSBvQmluZGluZz86IGFueSkge31cblxuXHRwdWJsaWMgaXNBKHNDbGFzc05hbWU6IHN0cmluZyk6IGJvb2xlYW4ge1xuXHRcdHJldHVybiBzQ2xhc3NOYW1lID09PSBcInNhcC51aS5tb2RlbC5vZGF0YS52NC5Db250ZXh0XCI7XG5cdH1cblxuXHRwdWJsaWMgZ2V0UHJvcGVydHkgPSBqZXN0LmZuKChrZXk6IHN0cmluZykgPT4ge1xuXHRcdHJldHVybiB0aGlzLm9WYWx1ZXNba2V5XTtcblx0fSk7XG5cdHB1YmxpYyByZXF1ZXN0UHJvcGVydHkgPSBqZXN0LmZuKChrZXk6IHN0cmluZykgPT4ge1xuXHRcdHJldHVybiBQcm9taXNlLnJlc29sdmUodGhpcy5vVmFsdWVzW2tleV0pO1xuXHR9KTtcblx0cHVibGljIHNldFByb3BlcnR5ID0gamVzdC5mbigoa2V5OiBzdHJpbmcsIHZhbHVlOiBhbnkpID0+IHtcblx0XHR0aGlzLm9WYWx1ZXNba2V5XSA9IHZhbHVlO1xuXHRcdHJldHVybiB0aGlzLm9WYWx1ZXNba2V5XTtcblx0fSk7XG5cblx0cHVibGljIGdldE9iamVjdCA9IGplc3QuZm4oKHBhdGg6IHN0cmluZykgPT4ge1xuXHRcdGNvbnN0IHRoYXQgPSB0aGlzIGFzIGFueTtcblx0XHRsZXQgcmVzdWx0ID0gcGF0aCA/IHRoYXQub1ZhbHVlc1twYXRoXSA6IHRoYXQub1ZhbHVlcztcblxuXHRcdGlmICghcmVzdWx0ICYmIHBhdGggJiYgcGF0aC5pbmRleE9mKFwiL1wiKSA+IC0xKSB7XG5cdFx0XHRjb25zdCBwYXJ0cyA9IHBhdGguc3BsaXQoXCIvXCIpO1xuXHRcdFx0cmVzdWx0ID0gcGFydHMucmVkdWNlKChzdW0sIHBhcnQ6IGFueSkgPT4ge1xuXHRcdFx0XHRzdW0gPSBwYXJ0ID8gc3VtW3BhcnRdIDogc3VtO1xuXHRcdFx0XHRyZXR1cm4gc3VtO1xuXHRcdFx0fSwgdGhhdC5vVmFsdWVzKTtcblx0XHR9XG5cblx0XHRyZXR1cm4gcmVzdWx0O1xuXHR9KTtcblx0cHVibGljIGdldFBhdGggPSBqZXN0LmZuKCgpID0+IHtcblx0XHRyZXR1cm4gdGhpcy5vVmFsdWVzW1wiJHBhdGhcIl07XG5cdH0pO1xuXG5cdHB1YmxpYyBnZXRCaW5kaW5nID0gamVzdC5mbigoKSA9PiB7XG5cdFx0cmV0dXJuIHRoaXMub0JpbmRpbmc7XG5cdH0pO1xuXHRwdWJsaWMgZ2V0TW9kZWwgPSBqZXN0LmZuKCgpID0+IHtcblx0XHRyZXR1cm4gKHRoaXMub0JpbmRpbmc/LmdldE1vZGVsKCkgYXMgYW55KSBhcyBPRGF0YU1vZGVsO1xuXHR9KTtcblx0cHVibGljIGlzVHJhbnNpZW50ID0gamVzdC5mbigpO1xufVxuXG5leHBvcnQgY2xhc3MgTW9ja1VJNUVsZW1lbnQgaW1wbGVtZW50cyBQYXJ0aWFsPFVJNUVsZW1lbnQ+IHtcblx0W2tleTogc3RyaW5nXTogYW55O1xuXHRwdWJsaWMgYmluZGluZ0NvbnRleHQgPSBuZXcgTW9ja0NvbnRleHQoe30pO1xuXHRwdWJsaWMgZ2V0QmluZGluZyA9IGplc3QuZm4oKTtcblx0cHVibGljIGdldEJpbmRpbmdDb250ZXh0ID0gamVzdC5mbigpLm1vY2tSZXR1cm5WYWx1ZSh0aGlzLmJpbmRpbmdDb250ZXh0KTtcblx0cHVibGljIGdldEJpbmRpbmdJbmZvID0gamVzdC5mbigpO1xuXHRwdWJsaWMgZGF0YSA9IGplc3QuZm4oKTtcblx0cHVibGljIGdldE1vZGVsID0gamVzdC5mbigpO1xuXHRwdWJsaWMgZ2V0UGFyZW50ID0gamVzdC5mbigpO1xufVxuXG5leHBvcnQgY2xhc3MgTW9ja0NvbnRyb2wgZXh0ZW5kcyBNb2NrVUk1RWxlbWVudCBpbXBsZW1lbnRzIFBhcnRpYWw8Q29udHJvbD4ge1xuXHRwdWJsaWMgZ2V0QmluZGluZ0NvbnRleHQ6IGplc3QuTW9jazxhbnksIGFueT4gPSBqZXN0LmZuKCk7XG59XG5cbmV4cG9ydCBjbGFzcyBNb2NrRXZlbnQgaW1wbGVtZW50cyBQYXJ0aWFsPEV2ZW50PiB7XG5cdHB1YmxpYyBjb25zdHJ1Y3RvcihwdWJsaWMgcGFyYW1zOiB7IFtrZXk6IHN0cmluZ106IGFueSB9ID0ge30sIHB1YmxpYyBzb3VyY2U6IE1vY2tVSTVFbGVtZW50ID0gbmV3IE1vY2tVSTVFbGVtZW50KCkpIHt9XG5cblx0cHVibGljIGdldFBhcmFtZXRlciA9IGplc3QuZm4obmFtZSA9PiB0aGlzLnBhcmFtc1tuYW1lXSk7XG5cblx0cHVibGljIGdldFNvdXJjZSA9IGplc3QuZm4oKCkgPT4gdGhpcy5zb3VyY2UgYXMgYW55KTtcbn1cblxuLyoqXG4gKiBNb2NrIGNsYXNzIGZvciBPRGF0YSBWNCBMaXN0QmluZGluZ1xuICovXG5leHBvcnQgY2xhc3MgTW9ja0xpc3RCaW5kaW5nIGltcGxlbWVudHMgUGFydGlhbDxPRGF0YUxpc3RCaW5kaW5nPiB7XG5cdHByaXZhdGUgYU1vY2tDb250ZXh0czogTW9ja0NvbnRleHRbXTtcblxuXHRwdWJsaWMgY29uc3RydWN0b3IoYUNvbnRleHRzPzogYW55W10sIHByaXZhdGUgbW9ja01vZGVsPzogTW9ja01vZGVsKSB7XG5cdFx0YUNvbnRleHRzID0gYUNvbnRleHRzIHx8IFtdO1xuXG5cdFx0dGhpcy5hTW9ja0NvbnRleHRzID0gYUNvbnRleHRzLm1hcChjb250ZXh0ID0+IHtcblx0XHRcdHJldHVybiBuZXcgTW9ja0NvbnRleHQoY29udGV4dCwgdGhpcyk7XG5cdFx0fSk7XG5cdH1cblxuXHRwdWJsaWMgaXNBKHNDbGFzc05hbWU6IHN0cmluZyk6IGJvb2xlYW4ge1xuXHRcdHJldHVybiBzQ2xhc3NOYW1lID09PSBcInNhcC51aS5tb2RlbC5vZGF0YS52NC5PRGF0YUxpc3RCaW5kaW5nXCI7XG5cdH1cblxuXHRwdWJsaWMgc2V0TW9kZWwob01vZGVsOiBNb2NrTW9kZWwpIHtcblx0XHR0aGlzLm1vY2tNb2RlbCA9IG9Nb2RlbDtcblx0fVxuXG5cdC8vIE1vY2tlZCBBUElcblx0cHVibGljIHNldEFnZ3JlZ2F0aW9uID0gamVzdC5mbigpO1xuXHRwdWJsaWMgZmlsdGVyID0gamVzdC5mbigpO1xuXHRwdWJsaWMgc29ydCA9IGplc3QuZm4oKTtcblxuXHQvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgQHR5cGVzY3JpcHQtZXNsaW50L25vLXVudXNlZC12YXJzXG5cdHB1YmxpYyByZXF1ZXN0Q29udGV4dHMgPSBqZXN0LmZuKCguLi5hcmdzKSA9PiB7XG5cdFx0cmV0dXJuIFByb21pc2UucmVzb2x2ZSgodGhpcy5hTW9ja0NvbnRleHRzIGFzIGFueSkgYXMgQ29udGV4dFtdKTtcblx0fSk7XG5cdC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBAdHlwZXNjcmlwdC1lc2xpbnQvbm8tdW51c2VkLXZhcnNcblx0cHVibGljIGdldEN1cnJlbnRDb250ZXh0cyA9IGplc3QuZm4oKC4uLmFyZ3MpID0+IHtcblx0XHRyZXR1cm4gKHRoaXMuYU1vY2tDb250ZXh0cyBhcyBhbnkpIGFzIENvbnRleHRbXTtcblx0fSk7XG5cdHB1YmxpYyBnZXRNb2RlbCA9IGplc3QuZm4oKCkgPT4ge1xuXHRcdHJldHVybiAodGhpcy5tb2NrTW9kZWwgYXMgYW55KSBhcyBPRGF0YU1vZGVsO1xuXHR9KTtcbn1cblxuZXhwb3J0IGNsYXNzIE1vY2tDb250ZXh0QmluZGluZyBpbXBsZW1lbnRzIFBhcnRpYWw8T0RhdGFDb250ZXh0QmluZGluZz4ge1xuXHRwcml2YXRlIG9Nb2NrQ29udGV4dDogTW9ja0NvbnRleHQ7XG5cblx0cHVibGljIGNvbnN0cnVjdG9yKG9Db250ZXh0PzogYW55LCBwcml2YXRlIG1vY2tNb2RlbD86IE1vY2tNb2RlbCkge1xuXHRcdHRoaXMub01vY2tDb250ZXh0ID0gbmV3IE1vY2tDb250ZXh0KG9Db250ZXh0IHx8IHt9LCB0aGlzKTtcblx0fVxuXG5cdHB1YmxpYyBpc0Eoc0NsYXNzTmFtZTogc3RyaW5nKTogYm9vbGVhbiB7XG5cdFx0cmV0dXJuIHNDbGFzc05hbWUgPT09IFwic2FwLnVpLm1vZGVsLm9kYXRhLnY0Lk9EYXRhQ29udGV4dEJpbmRpbmdcIjtcblx0fVxuXHRwdWJsaWMgZ2V0SW50ZXJuYWxNb2NrQ29udGV4dCgpOiBNb2NrQ29udGV4dCB7XG5cdFx0cmV0dXJuIHRoaXMub01vY2tDb250ZXh0O1xuXHR9XG5cdHB1YmxpYyBzZXRNb2RlbChvTW9kZWw6IE1vY2tNb2RlbCkge1xuXHRcdHRoaXMubW9ja01vZGVsID0gb01vZGVsO1xuXHR9XG5cblx0Ly8gTW9ja2VkIEFQSVxuXHRwdWJsaWMgZ2V0Qm91bmRDb250ZXh0ID0gamVzdC5mbigoKSA9PiB7XG5cdFx0cmV0dXJuICh0aGlzLm9Nb2NrQ29udGV4dCBhcyBhbnkpIGFzIENvbnRleHQ7XG5cdH0pO1xuXHRwdWJsaWMgYXR0YWNoRXZlbnRPbmNlID0gamVzdC5mbigpO1xuXHRwdWJsaWMgZ2V0TW9kZWwgPSBqZXN0LmZuKCgpID0+IHtcblx0XHRyZXR1cm4gKHRoaXMubW9ja01vZGVsIGFzIGFueSkgYXMgT0RhdGFNb2RlbDtcblx0fSk7XG59XG5cbi8qKlxuICogTW9jayBjbGFzcyBmb3IgT0RhdGEgVjQgTWV0YU1vZGVsXG4gKi9cbmV4cG9ydCBjbGFzcyBNb2NrTWV0YU1vZGVsIGltcGxlbWVudHMgUGFydGlhbDxPRGF0YU1ldGFNb2RlbD4ge1xuXHRwcml2YXRlIG9NZXRhQ29udGV4dDogTW9ja0NvbnRleHQ7XG5cdHJlcXVlc3RWYWx1ZUxpc3RJbmZvITogamVzdC5Nb2NrPGFueSwgYW55PjtcblxuXHRwdWJsaWMgY29uc3RydWN0b3Iob01ldGFEYXRhPzogYW55KSB7XG5cdFx0dGhpcy5vTWV0YUNvbnRleHQgPSBuZXcgTW9ja0NvbnRleHQob01ldGFEYXRhIHx8IHt9KTtcblx0fVxuXG5cdC8vIE1vY2tlZCBBUElcblx0Ly8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIEB0eXBlc2NyaXB0LWVzbGludC9uby11bnVzZWQtdmFyc1xuXHRwdWJsaWMgZ2V0TWV0YUNvbnRleHQgPSBqZXN0LmZuKChzUGF0aDogc3RyaW5nKSA9PiB7XG5cdFx0cmV0dXJuIChuZXcgTW9ja0NvbnRleHQoeyAkcGF0aDogc1BhdGggfSkgYXMgYW55KSBhcyBDb250ZXh0O1xuXHR9KTtcblx0cHVibGljIGdldE9iamVjdCA9IGplc3QuZm4oKHNQYXRoOiBzdHJpbmcpID0+IHtcblx0XHRyZXR1cm4gdGhpcy5vTWV0YUNvbnRleHQuZ2V0UHJvcGVydHkoc1BhdGgpO1xuXHR9KTtcblx0cHVibGljIHJlcXVlc3RPYmplY3QgPSBqZXN0LmZuKCk7XG5cdHB1YmxpYyBjcmVhdGVCaW5kaW5nQ29udGV4dCA9IGplc3QuZm4oKHNQYXRoOiBzdHJpbmcpID0+IHtcblx0XHRyZXR1cm4gKG5ldyBNb2NrQ29udGV4dCh7ICRwYXRoOiBzUGF0aCB9KSBhcyBhbnkpIGFzIENvbnRleHQ7XG5cdH0pO1xuXHRwdWJsaWMgZ2V0TWV0YVBhdGggPSBqZXN0LmZuKChzUGF0aDogc3RyaW5nKSA9PiB7XG5cdFx0cmV0dXJuIHNQYXRoO1xuXHR9KTtcblx0cHVibGljIGdldENvbnRleHQgPSBqZXN0LmZuKCk7XG59XG5cbi8qKlxuICogTW9jayBjbGFzcyBmb3IgT0RhdGEgVjQgTW9kZWxcbiAqL1xuXG5leHBvcnQgY2xhc3MgTW9ja01vZGVsIGltcGxlbWVudHMgUGFydGlhbDxPRGF0YU1vZGVsPiB7XG5cdHByaXZhdGUgb01ldGFNb2RlbD86IE1vY2tNZXRhTW9kZWw7XG5cblx0cHVibGljIGNvbnN0cnVjdG9yKHByaXZhdGUgbW9ja0xpc3RCaW5kaW5nPzogTW9ja0xpc3RCaW5kaW5nLCBwcml2YXRlIG1vY2tDb250ZXh0QmluZGluZz86IE1vY2tDb250ZXh0QmluZGluZykge1xuXHRcdGlmIChtb2NrTGlzdEJpbmRpbmcpIHtcblx0XHRcdG1vY2tMaXN0QmluZGluZy5zZXRNb2RlbCh0aGlzKTtcblx0XHR9XG5cdFx0aWYgKG1vY2tDb250ZXh0QmluZGluZykge1xuXHRcdFx0bW9ja0NvbnRleHRCaW5kaW5nLnNldE1vZGVsKHRoaXMpO1xuXHRcdH1cblx0fVxuXG5cdC8vIEZhY3Rvcmllc1xuXHRzdGF0aWMgbW9kZWxGcm9tTGlzdEJpbmRpbmcobW9ja0xpc3RCaW5kaW5nOiBNb2NrTGlzdEJpbmRpbmcpOiBNb2NrTW9kZWwge1xuXHRcdHJldHVybiBuZXcgTW9ja01vZGVsKG1vY2tMaXN0QmluZGluZyk7XG5cdH1cblx0c3RhdGljIG1vZGVsRnJvbUNvbnRleHRCaW5kaW5nKG1vY2tDb250ZXh0QmluZGluZzogTW9ja0NvbnRleHRCaW5kaW5nKTogTW9ja01vZGVsIHtcblx0XHRyZXR1cm4gbmV3IE1vY2tNb2RlbCh1bmRlZmluZWQsIG1vY2tDb250ZXh0QmluZGluZyk7XG5cdH1cblxuXHRwdWJsaWMgc2V0TWV0YU1vZGVsKG9NZXRhTW9kZWw6IE1vY2tNZXRhTW9kZWwpIHtcblx0XHR0aGlzLm9NZXRhTW9kZWwgPSBvTWV0YU1vZGVsO1xuXHR9XG5cblx0Ly8gTW9ja2VkIEFQSVxuXHQvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgQHR5cGVzY3JpcHQtZXNsaW50L25vLXVudXNlZC12YXJzXG5cdHB1YmxpYyBiaW5kTGlzdCA9IGplc3QuZm4oKC4uLmFyZ3MpID0+IHtcblx0XHRyZXR1cm4gKHRoaXMubW9ja0xpc3RCaW5kaW5nIGFzIGFueSkgYXMgT0RhdGFMaXN0QmluZGluZztcblx0fSk7XG5cdC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBAdHlwZXNjcmlwdC1lc2xpbnQvbm8tdW51c2VkLXZhcnNcblx0cHVibGljIGJpbmRDb250ZXh0ID0gamVzdC5mbigoLi4uYXJncykgPT4ge1xuXHRcdHJldHVybiAodGhpcy5tb2NrQ29udGV4dEJpbmRpbmcgYXMgYW55KSBhcyBPRGF0YUNvbnRleHRCaW5kaW5nO1xuXHR9KTtcblx0cHVibGljIGdldE1ldGFNb2RlbCA9IGplc3QuZm4oKCkgPT4ge1xuXHRcdHJldHVybiAodGhpcy5vTWV0YU1vZGVsIGFzIGFueSkgYXMgT0RhdGFNZXRhTW9kZWw7XG5cdH0pO1xuXG5cdHB1YmxpYyBnZXRQcm9wZXJ0eSA9IGplc3QuZm4oKTtcblx0cHVibGljIHNldFByb3BlcnR5ID0gamVzdC5mbigpO1xuXHRwdWJsaWMgcmVxdWVzdE9iamVjdCA9IGplc3QuZm4oKTtcbn1cblxuZXhwb3J0IGNsYXNzIE1vY2tWaWV3IGltcGxlbWVudHMgUGFydGlhbDxWaWV3PiB7XG5cdHB1YmxpYyBnZXRDb250cm9sbGVyID0gamVzdC5mbigpO1xuXG5cdHB1YmxpYyBnZXRCaW5kaW5nQ29udGV4dCA9IGplc3QuZm4oKTtcblxuXHRwdWJsaWMgZ2V0TW9kZWwgPSBqZXN0LmZuKCk7XG5cblx0cHVibGljIGdldFZpZXdEYXRhID0gamVzdC5mbigpO1xuXG5cdHB1YmxpYyBpc0Eoc0NsYXNzTmFtZTogc3RyaW5nKTogYm9vbGVhbiB7XG5cdFx0cmV0dXJuIHNDbGFzc05hbWUgPT09IFwic2FwLnVpLmNvcmUubXZjLlZpZXdcIjtcblx0fVxuXG5cdHB1YmxpYyBnZXRJZCA9IGplc3QuZm4oKTtcbn1cblxuZXhwb3J0IGNsYXNzIE1vY2tDb250cm9sbGVyIGltcGxlbWVudHMgUGFydGlhbDxDb250cm9sbGVyPiB7XG5cdHB1YmxpYyBnZXRWaWV3ID0gamVzdC5mbigpLm1vY2tSZXR1cm5WYWx1ZShuZXcgTW9ja1ZpZXcoKSk7XG5cblx0cHVibGljIF9yb3V0aW5nID0ge1xuXHRcdG5hdmlnYXRlVG9UYXJnZXQ6IGplc3QuZm4oKVxuXHR9O1xuXG5cdHB1YmxpYyBfZWRpdEZsb3cgPSB7XG5cdFx0c3luY1Rhc2s6IGplc3QuZm4oKVxuXHR9O1xuXG5cdHB1YmxpYyBfc2lkZUVmZmVjdHMgPSB7XG5cdFx0aGFuZGxlRmllbGRDaGFuZ2U6IGplc3QuZm4oKVxuXHR9O1xuXG5cdGlzQSA9IGplc3QuZm4oKS5tb2NrUmV0dXJuVmFsdWUoZmFsc2UpO1xufVxuXG5leHBvcnQgaW50ZXJmYWNlIE1WQ01vY2sge1xuXHRtb2RlbDogTW9ja01vZGVsO1xuXHR2aWV3OiBNb2NrVmlldztcblx0Y29udHJvbGxlcjogTW9ja0NvbnRyb2xsZXI7XG59XG5cbi8qKlxuICogR2VuZXJhdGUgbW9kZWwsIHZpZXcgYW5kIGNvbnRyb2xsZXIgbW9ja3MgdGhhdCByZWZlciB0byBlYWNoIG90aGVyLlxuICpcbiAqIEBwYXJhbSBleGlzdGluZyBPcHRpb25hbCBleGlzdGluZyBtb2NrZWQgaW5zdGFuY2VzIHRoYXQgc2hvdWxkIGJlIHVzZWRcbiAqIEByZXR1cm5zIE1vY2tlZCBtb2RlbCwgdmlldyBhbmQgY29udHJvbGxlciBpbnN0YW5jZXNcbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIG1vY2tNVkMoZXhpc3Rpbmc/OiBQYXJ0aWFsPE1WQ01vY2s+KTogTVZDTW9jayB7XG5cdGNvbnN0IG1vZGVsID0gZXhpc3Rpbmc/Lm1vZGVsIHx8IG5ldyBNb2NrTW9kZWwoKTtcblx0Y29uc3QgdmlldyA9IGV4aXN0aW5nPy52aWV3IHx8IG5ldyBNb2NrVmlldygpO1xuXHRjb25zdCBjb250cm9sbGVyID0gZXhpc3Rpbmc/LmNvbnRyb2xsZXIgfHwgbmV3IE1vY2tDb250cm9sbGVyKCk7XG5cblx0dmlldy5nZXRDb250cm9sbGVyLm1vY2tSZXR1cm5WYWx1ZShjb250cm9sbGVyKTtcblx0dmlldy5nZXRNb2RlbC5tb2NrUmV0dXJuVmFsdWUobW9kZWwpO1xuXHRjb250cm9sbGVyLmdldFZpZXcubW9ja1JldHVyblZhbHVlKHZpZXcpO1xuXG5cdHJldHVybiB7IG1vZGVsLCB2aWV3LCBjb250cm9sbGVyIH07XG59XG4iXX0=