@sapui5/sap.fe.test 1.111.1 → 1.112.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/package.json +1 -1
- package/src/sap/fe/test/.library +1 -1
- package/src/sap/fe/test/CollaborationClient.js +4 -4
- package/src/sap/fe/test/CollaborationClient.ts +3 -3
- package/src/sap/fe/test/FeMocks.js +5 -5
- package/src/sap/fe/test/FeMocks.ts +5 -5
- package/src/sap/fe/test/JestTemplatingHelper.js +28 -23
- package/src/sap/fe/test/JestTemplatingHelper.ts +28 -22
- package/src/sap/fe/test/JourneyRunner.js +5 -7
- package/src/sap/fe/test/ListReport.js +4 -6
- package/src/sap/fe/test/ObjectPage.js +2 -2
- package/src/sap/fe/test/Shell.js +2 -2
- package/src/sap/fe/test/Stubs.js +1 -1
- package/src/sap/fe/test/TemplatePage.js +2 -2
- package/src/sap/fe/test/TemplatingTestUtils.js +2 -3
- package/src/sap/fe/test/UI5MockHelper.js +39 -3
- package/src/sap/fe/test/UI5MockHelper.ts +33 -3
- package/src/sap/fe/test/api/ChartActions.js +1 -1
- package/src/sap/fe/test/api/CollaborationAPI.js +14 -19
- package/src/sap/fe/test/api/CollaborationAPI.ts +17 -24
- package/src/sap/fe/test/api/DialogValueHelpAssertions.js +68 -27
- package/src/sap/fe/test/api/FilterBarAssertions.js +3 -3
- package/src/sap/fe/test/builder/MacroFieldBuilder.js +3 -3
- package/src/sap/fe/test/builder/MdcTableBuilder.js +12 -3
- package/src/sap/fe/test/internal/ConsoleErrorChecker.js +4 -2
- package/src/sap/fe/test/internal/ConsoleErrorChecker.ts +5 -1
- package/src/sap/fe/test/internal/FEArrangements.js +9 -5
- package/src/sap/fe/test/library-preload.js +204 -117
- package/src/sap/fe/test/library-preload.js.map +1 -1
- package/src/sap/fe/test/library.js +1 -1
- package/src/sap/fe/test/manifest.json +1 -1
|
@@ -69,7 +69,7 @@ sap.ui.define(
|
|
|
69
69
|
* @param {string} [mSettings.launchUrl] The URL to the launching page (usually a FLP.html)
|
|
70
70
|
* @param {object} [mSettings.launchParameters] The URL launch parameters
|
|
71
71
|
* @param {boolean} [mSettings.async] If false (default), only one JourneyRunner is executed at a time
|
|
72
|
-
* @param {Function[] | string[]}
|
|
72
|
+
* @param {Function[] | string[]} _vJourneys The journeys to be executed. If a journey is represented as a string, it will be interpreted
|
|
73
73
|
* as a module path to the file that should be loaded. Else it is expected to be a function.
|
|
74
74
|
* Alternatively, instead of being wrapped in an array, the journeys can also be given as separate parameters:
|
|
75
75
|
* <pre>.run(mSettings, Journey1, Journey2, ...)</pre>
|
|
@@ -78,7 +78,7 @@ sap.ui.define(
|
|
|
78
78
|
* @name sap.fe.test.JourneyRunner#run
|
|
79
79
|
* @public
|
|
80
80
|
*/
|
|
81
|
-
run: function (mSettings,
|
|
81
|
+
run: function (mSettings, _vJourneys) {
|
|
82
82
|
var iJourneyParameterIndex = 1;
|
|
83
83
|
if (!Utils.isOfType(mSettings, Object)) {
|
|
84
84
|
iJourneyParameterIndex = 0;
|
|
@@ -124,13 +124,12 @@ sap.ui.define(
|
|
|
124
124
|
*
|
|
125
125
|
* By default, an instance of {@link sap.fe.test.BaseActions} will be returned.
|
|
126
126
|
*
|
|
127
|
-
* @param {object} mSettings The settings object of the runner instance
|
|
128
127
|
* @returns {sap.ui.test.Opa} An Opa instance for the base actions
|
|
129
128
|
* @function
|
|
130
129
|
* @name sap.fe.test.JourneyRunner#getBaseActions
|
|
131
130
|
* @protected
|
|
132
131
|
*/
|
|
133
|
-
getBaseActions: function (
|
|
132
|
+
getBaseActions: function () {
|
|
134
133
|
return new BaseActions();
|
|
135
134
|
},
|
|
136
135
|
|
|
@@ -142,13 +141,12 @@ sap.ui.define(
|
|
|
142
141
|
*
|
|
143
142
|
* By default, an instance of {@link sap.fe.test.BaseAssertions} will be returned.
|
|
144
143
|
*
|
|
145
|
-
* @param {object} mSettings The settings object of the runner instance
|
|
146
144
|
* @returns {sap.ui.test.Opa} An Opa instance for the base assertions
|
|
147
145
|
* @function
|
|
148
146
|
* @name sap.fe.test.JourneyRunner#getBaseAssertions
|
|
149
147
|
* @protected
|
|
150
148
|
*/
|
|
151
|
-
getBaseAssertions: function (
|
|
149
|
+
getBaseAssertions: function () {
|
|
152
150
|
return new BaseAssertions();
|
|
153
151
|
},
|
|
154
152
|
|
|
@@ -193,7 +191,7 @@ sap.ui.define(
|
|
|
193
191
|
aJourneys.forEach(function (vJourney) {
|
|
194
192
|
if (Utils.isOfType(vJourney, String)) {
|
|
195
193
|
pPromiseChain = pPromiseChain.then(function () {
|
|
196
|
-
return new Promise(function (resolve
|
|
194
|
+
return new Promise(function (resolve) {
|
|
197
195
|
sap.ui.require([vJourney], function (oJourney) {
|
|
198
196
|
resolve(oJourney);
|
|
199
197
|
});
|
|
@@ -67,13 +67,13 @@ sap.ui.define(
|
|
|
67
67
|
* @param {string} oPageDefinition.componentId The component id (defined in the target section for the list report within the manifest)
|
|
68
68
|
* @param {string} oPageDefinition.entitySet The entitySet (optional)(defined in the settings of the corresponding target component within the manifest)
|
|
69
69
|
* @param {string} oPageDefinition.contextPath The contextPath (optional)(defined in the settings of the corresponding target component within the manifest)
|
|
70
|
-
* @param {...object} [
|
|
70
|
+
* @param {...object} [_aInAdditionalPageDefinitions] Additional custom page functions, provided in an object containing <code>actions</code> and <code>assertions</code>
|
|
71
71
|
* @returns {sap.fe.test.ListReport} A list report page definition
|
|
72
72
|
* @name sap.fe.test.ListReport
|
|
73
73
|
* @extends sap.fe.test.TemplatePage
|
|
74
74
|
* @public
|
|
75
75
|
*/
|
|
76
|
-
function ListReport(oPageDefinition,
|
|
76
|
+
function ListReport(oPageDefinition, _aInAdditionalPageDefinitions) {
|
|
77
77
|
var sAppId = oPageDefinition.appId,
|
|
78
78
|
sComponentId = oPageDefinition.componentId,
|
|
79
79
|
sContextPath = oPageDefinition.contextPath,
|
|
@@ -247,11 +247,10 @@ sap.ui.define(
|
|
|
247
247
|
/**
|
|
248
248
|
* TODO This function is only here for legacy reasons and therefore private. Use iGoToView instead.
|
|
249
249
|
*
|
|
250
|
-
* @param {string} sName The name of the view within the List Report table
|
|
251
250
|
* @returns {object} The result of the {@link sap.ui.test.Opa5#waitFor} function, to be used for chained statements
|
|
252
251
|
* @private
|
|
253
252
|
*/
|
|
254
|
-
iOpenIconTabWithTitle: function (
|
|
253
|
+
iOpenIconTabWithTitle: function () {
|
|
255
254
|
// return this.iGoToView(sName);
|
|
256
255
|
return OpaBuilder.create(this)
|
|
257
256
|
.timeout(1)
|
|
@@ -621,11 +620,10 @@ sap.ui.define(
|
|
|
621
620
|
/**
|
|
622
621
|
* TODO This function is only here for legacy reasons and therefore private. Use iCheckView instead.
|
|
623
622
|
*
|
|
624
|
-
* @param {object} mProperties Object containing the text: property and any other properties to be checked
|
|
625
623
|
* @returns {object} The result of the {@link sap.ui.test.Opa5#waitFor} function, to be used for chained statements
|
|
626
624
|
* @private
|
|
627
625
|
*/
|
|
628
|
-
iSeeIconTabWithProperties: function (
|
|
626
|
+
iSeeIconTabWithProperties: function () {
|
|
629
627
|
// return this.iCheckView(mProperties.text, mProperties);
|
|
630
628
|
return OpaBuilder.create(this)
|
|
631
629
|
.timeout(1)
|
|
@@ -159,13 +159,13 @@ sap.ui.define(
|
|
|
159
159
|
* @param {string} oPageDefinition.componentId The component id (defined in the target section for the list report within the manifest)
|
|
160
160
|
* @param {string} oPageDefinition.entitySet The entitySet (defined in the settings of the corresponding target component within the manifest)
|
|
161
161
|
* @param {string} oPageDefinition.contextPath The contextPath (optional)(defined in the settings of the corresponding target component within the manifest)
|
|
162
|
-
* @param {...object} [
|
|
162
|
+
* @param {...object} [_aAdditionalPageDefinitions] Additional custom page functions, provided in an object containing <code>actions</code> and <code>assertions</code>
|
|
163
163
|
* @returns {sap.fe.test.ObjectPage} An object page page definition
|
|
164
164
|
* @name sap.fe.test.ObjectPage
|
|
165
165
|
* @extends sap.fe.test.TemplatePage
|
|
166
166
|
* @public
|
|
167
167
|
*/
|
|
168
|
-
function ObjectPage(oPageDefinition,
|
|
168
|
+
function ObjectPage(oPageDefinition, _aAdditionalPageDefinitions) {
|
|
169
169
|
var sAppId = oPageDefinition.appId,
|
|
170
170
|
sComponentId = oPageDefinition.componentId,
|
|
171
171
|
ViewId = sAppId + "::" + sComponentId,
|
package/src/sap/fe/test/Shell.js
CHANGED
|
@@ -109,7 +109,7 @@ sap.ui.define(["sap/ui/test/OpaBuilder", "sap/ui/test/Opa5", "sap/fe/test/Utils"
|
|
|
109
109
|
actions: function (oTile) {
|
|
110
110
|
oTile.getTileViews()[0].$().trigger("tap");
|
|
111
111
|
},
|
|
112
|
-
success: function (
|
|
112
|
+
success: function () {
|
|
113
113
|
Opa5.assert.ok(true, Utils.formatMessage("Clicking on tile with target '{0}'", sTarget));
|
|
114
114
|
},
|
|
115
115
|
errorMessage: "Could not find the tile"
|
|
@@ -140,7 +140,7 @@ sap.ui.define(["sap/ui/test/OpaBuilder", "sap/ui/test/Opa5", "sap/fe/test/Utils"
|
|
|
140
140
|
.description("Selecting item: " + sOption)
|
|
141
141
|
.execute();
|
|
142
142
|
},
|
|
143
|
-
iLaunchExtendedParameterDialog: function (
|
|
143
|
+
iLaunchExtendedParameterDialog: function () {
|
|
144
144
|
return OpaBuilder.create(this)
|
|
145
145
|
.hasType("sap.m.Button")
|
|
146
146
|
.isDialogElement()
|
package/src/sap/fe/test/Stubs.js
CHANGED
|
@@ -243,13 +243,13 @@ sap.ui.define(
|
|
|
243
243
|
/**
|
|
244
244
|
* @class Provides a test page definition for a template page with the corresponding parameters.
|
|
245
245
|
* @param {object | string} vViewId The viewId
|
|
246
|
-
* @param {...object} [
|
|
246
|
+
* @param {...object} [_aAdditionalPageDefinitions] Additional custom page functions, provided in an object containing <code>actions</code> and <code>assertions</code>
|
|
247
247
|
* @returns {sap.fe.test.TemplatePage} A list report page definition
|
|
248
248
|
* @name sap.fe.test.TemplatePage
|
|
249
249
|
* @hideconstructor
|
|
250
250
|
* @public
|
|
251
251
|
*/
|
|
252
|
-
function TemplatePage(vViewId,
|
|
252
|
+
function TemplatePage(vViewId, _aAdditionalPageDefinitions) {
|
|
253
253
|
var sViewId = Utils.isOfType(vViewId, String) ? vViewId : vViewId.viewId,
|
|
254
254
|
aAdditionalPages = Array.prototype.slice.call(arguments, 1);
|
|
255
255
|
|
|
@@ -10,8 +10,7 @@ sap.ui.define(
|
|
|
10
10
|
"sap/ui/core/util/XMLPreprocessor",
|
|
11
11
|
"sap/ui/core/XMLTemplateProcessor",
|
|
12
12
|
"sap/fe/macros/macroLibrary",
|
|
13
|
-
"sap/fe/core/TemplateModel"
|
|
14
|
-
"sap/fe/macros/ResourceModel"
|
|
13
|
+
"sap/fe/core/TemplateModel"
|
|
15
14
|
],
|
|
16
15
|
function (ODataMetaModel, XMLPreprocessor, XMLTemplateProcessor, macroLibrary, TemplateModel) {
|
|
17
16
|
"use strict";
|
|
@@ -64,7 +63,7 @@ sap.ui.define(
|
|
|
64
63
|
oMetaModel = new ODataMetaModel(oRequestor, sServiceUrl + "$metadata", undefined, null);
|
|
65
64
|
|
|
66
65
|
//Switch of all plugins as we only template individual fragments in the test
|
|
67
|
-
macroLibrary.
|
|
66
|
+
macroLibrary.unregister();
|
|
68
67
|
if (useMacros) {
|
|
69
68
|
//Force option to use macros for some tests
|
|
70
69
|
macroLibrary.register();
|
|
@@ -2,7 +2,7 @@
|
|
|
2
2
|
* SAP UI development toolkit for HTML5 (SAPUI5)
|
|
3
3
|
* (c) Copyright 2009-2023 SAP SE. All rights reserved
|
|
4
4
|
*/
|
|
5
|
-
sap.ui.define(["@sap-ux/jest-mock-ui5/dist/generic", "sap/fe/core/controllerextensions/EditFlow", "sap/fe/core/controllerextensions/
|
|
5
|
+
sap.ui.define(["@sap-ux/jest-mock-ui5/dist/generic", "sap/fe/core/controllerextensions/EditFlow", "sap/fe/core/controllerextensions/InternalRouting", "sap/fe/core/controllerextensions/Share", "sap/fe/core/controllerextensions/SideEffects", "sap/fe/core/ResourceModel", "sap/ui/base/Event", "sap/ui/core/mvc/Controller", "sap/ui/core/mvc/View", "sap/ui/model/CompositeBinding", "sap/ui/model/odata/v4/Context", "sap/ui/model/odata/v4/ODataContextBinding", "sap/ui/model/odata/v4/ODataListBinding", "sap/ui/model/odata/v4/ODataMetaModel", "sap/ui/model/odata/v4/ODataModel", "sap/ui/model/odata/v4/ODataPropertyBinding"], function (generic, EditFlow, InternalRouting, Share, SideEffects, ResourceModel, Event, Controller, View, CompositeBinding, Context, ODataContextBinding, ODataListBinding, ODataMetaModel, ODataModel, ODataPropertyBinding) {
|
|
6
6
|
"use strict";
|
|
7
7
|
|
|
8
8
|
var _exports = {};
|
|
@@ -404,7 +404,6 @@ sap.ui.define(["@sap-ux/jest-mock-ui5/dist/generic", "sap/fe/core/controllerexte
|
|
|
404
404
|
function createMockController() {
|
|
405
405
|
const mocked = mock(Controller);
|
|
406
406
|
mocked._routing = mock(InternalRouting);
|
|
407
|
-
mocked._editFlow = mock(InternalEditFlow);
|
|
408
407
|
mocked._sideEffects = mock(SideEffects);
|
|
409
408
|
mocked.editFlow = mock(EditFlow);
|
|
410
409
|
mocked.share = mock(Share);
|
|
@@ -439,7 +438,44 @@ sap.ui.define(["@sap-ux/jest-mock-ui5/dist/generic", "sap/fe/core/controllerexte
|
|
|
439
438
|
controller
|
|
440
439
|
};
|
|
441
440
|
}
|
|
441
|
+
|
|
442
|
+
/**
|
|
443
|
+
* To be used to load messages bundles for tests without app/page component.
|
|
444
|
+
*
|
|
445
|
+
* @param textID ID of the Text
|
|
446
|
+
* @param parameters Array of parameters that are used to create the text
|
|
447
|
+
* @param metaPath Entity set name or action name to overload a text
|
|
448
|
+
* @returns Determined text
|
|
449
|
+
*/
|
|
442
450
|
_exports.mockMVC = mockMVC;
|
|
451
|
+
function getText(textID, parameters, metaPath) {
|
|
452
|
+
const resourceModel = new ResourceModel({
|
|
453
|
+
bundleName: "sap.fe.core.messagebundle",
|
|
454
|
+
enhanceWith: [{
|
|
455
|
+
bundleName: "sap.fe.macros.messagebundle"
|
|
456
|
+
}, {
|
|
457
|
+
bundleName: "sap.fe.templates.messagebundle"
|
|
458
|
+
}],
|
|
459
|
+
async: false
|
|
460
|
+
});
|
|
461
|
+
return resourceModel.getText(textID, parameters, metaPath);
|
|
462
|
+
}
|
|
463
|
+
|
|
464
|
+
/**
|
|
465
|
+
* Utility type to mock ResourceModel
|
|
466
|
+
*/
|
|
467
|
+
_exports.getText = getText;
|
|
468
|
+
/**
|
|
469
|
+
* Factory function to create a new MockView.
|
|
470
|
+
*
|
|
471
|
+
* @returns A new MockView
|
|
472
|
+
*/
|
|
473
|
+
function createMockResourceModel() {
|
|
474
|
+
const mocked = mock(ResourceModel);
|
|
475
|
+
mocked.getText = jest.fn().mockImplementation(getText);
|
|
476
|
+
return mocked;
|
|
477
|
+
}
|
|
478
|
+
_exports.createMockResourceModel = createMockResourceModel;
|
|
443
479
|
return _exports;
|
|
444
480
|
}, false);
|
|
445
|
-
//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJuYW1lcyI6WyJjcmVhdGVNb2NrQ29udGV4dCIsIm9Db250ZXh0RGF0YSIsIm9CaW5kaW5nIiwiaXNJbmFjdGl2ZSIsIm1vY2tlZCIsIm1vY2siLCJPYmplY3QiLCJnZXRQcm90b3R5cGVPZiIsIkNvbnRleHQiLCJjcmVhdGVOZXdDb250ZXh0IiwiX2lzS2VwdEFsaXZlIiwiX2NvbnRleHREYXRhIiwiX29CaW5kaW5nIiwiX2lzSW5hY3RpdmUiLCJpc0EiLCJtb2NrSW1wbGVtZW50YXRpb24iLCJzQ2xhc3NOYW1lIiwiZ2V0UHJvcGVydHkiLCJrZXkiLCJyZXF1ZXN0UHJvcGVydHkiLCJrZXlPcktleXMiLCJBcnJheSIsImlzQXJyYXkiLCJQcm9taXNlIiwicmVzb2x2ZSIsIm1hcCIsInJlcXVlc3RPYmplY3QiLCJzZXRQcm9wZXJ0eSIsInZhbHVlIiwiZ2V0T2JqZWN0IiwicGF0aCIsInJlc3VsdCIsImluZGV4T2YiLCJwYXJ0cyIsInNwbGl0IiwicmVkdWNlIiwic3VtIiwicGFydCIsImdldFBhdGgiLCJnZXRCaW5kaW5nIiwiZ2V0TW9kZWwiLCJzZXRLZWVwQWxpdmUiLCJib29sIiwiX2ZuT25CZWZvcmVEZXN0cm95IiwiX2JSZXF1ZXN0TWVzc2FnZXMiLCJpc0tlZXBBbGl2ZSIsIk1vY2tDb250ZXh0IiwiY3JlYXRlTW9ja0V2ZW50IiwicGFyYW1zIiwiRXZlbnQiLCJfcGFyYW1zIiwiZ2V0UGFyYW1ldGVyIiwibmFtZSIsIk1vY2tFdmVudCIsImNyZWF0ZU1vY2tMaXN0QmluZGluZyIsImFDb250ZXh0RGF0YSIsIm9Nb2NrTW9kZWwiLCJPRGF0YUxpc3RCaW5kaW5nIiwiX2FNb2NrQ29udGV4dHMiLCJjb250ZXh0RGF0YSIsIl9tb2NrTW9kZWwiLCJzZXRNb2RlbCIsIm1vZGVsIiwicmVxdWVzdENvbnRleHRzIiwiZ2V0Q3VycmVudENvbnRleHRzIiwiZ2V0QWxsQ3VycmVudENvbnRleHRzIiwiZ2V0Q29udGV4dHMiLCJnZXRVcGRhdGVHcm91cElkIiwibW9ja1JldHVyblZhbHVlIiwiTW9ja0xpc3RCaW5kaW5nIiwiY3JlYXRlTW9ja1Byb3BlcnR5QmluZGluZyIsIk9EYXRhUHJvcGVydHlCaW5kaW5nIiwiX3ZhbHVlIiwiX3BhdGgiLCJnZXRWYWx1ZSIsIk1vY2tQcm9wZXJ0eUJpbmRpbmciLCJjcmVhdGVNb2NrQ29tcG9zaXRlQmluZGluZyIsImFCaW5kaW5ncyIsIkNvbXBvc2l0ZUJpbmRpbmciLCJfYUJpbmRpbmdzIiwiZ2V0QmluZGluZ3MiLCJiaW5kaW5nIiwiTW9ja0NvbXBvc2l0ZUJpbmRpbmciLCJjcmVhdGVNb2NrQ29udGV4dEJpbmRpbmciLCJvQ29udGV4dCIsIk9EYXRhQ29udGV4dEJpbmRpbmciLCJtb2NrTW9kZWwiLCJvTW9ja0NvbnRleHQiLCJnZXRJbnRlcm5hbE1vY2tDb250ZXh0Iiwib01vZGVsIiwiZ2V0Qm91bmRDb250ZXh0IiwiZXhlY3V0ZSIsIm1vY2tSZXNvbHZlZFZhbHVlIiwiTW9ja0NvbnRleHRCaW5kaW5nIiwiY3JlYXRlTW9ja01ldGFNb2RlbCIsIm9NZXRhRGF0YSIsIk9EYXRhTWV0YU1vZGVsIiwib01ldGFDb250ZXh0IiwiZ2V0TWV0YUNvbnRleHQiLCJzUGF0aCIsIiRwYXRoIiwiY3JlYXRlQmluZGluZ0NvbnRleHQiLCJnZXRNZXRhUGF0aCIsIm1ldGFtb2RlbCIsIk1vY2tNZXRhTW9kZWwiLCJjcmVhdGVNb2NrTW9kZWwiLCJvTW9ja0xpc3RCaW5kaW5nIiwib01vY2tDb250ZXh0QmluZGluZyIsIk9EYXRhTW9kZWwiLCJtb2NrTGlzdEJpbmRpbmciLCJtb2NrQ29udGV4dEJpbmRpbmciLCJzZXRNZXRhTW9kZWwiLCJvTWV0YU1vZGVsIiwiYmluZExpc3QiLCJiaW5kQ29udGV4dCIsImdldE1ldGFNb2RlbCIsIk1vY2tNb2RlbCIsImNyZWF0ZU1vY2tNb2RlbEZyb21MaXN0QmluZGluZyIsImNyZWF0ZU1vY2tNb2RlbEZyb21Db250ZXh0QmluZGluZyIsInVuZGVmaW5lZCIsImNyZWF0ZU1vY2tWaWV3IiwiVmlldyIsIk1vY2tWaWV3IiwiY3JlYXRlTW9ja0NvbnRyb2xsZXIiLCJDb250cm9sbGVyIiwiX3JvdXRpbmciLCJJbnRlcm5hbFJvdXRpbmciLCJfZWRpdEZsb3ciLCJJbnRlcm5hbEVkaXRGbG93IiwiX3NpZGVFZmZlY3RzIiwiU2lkZUVmZmVjdHMiLCJlZGl0RmxvdyIsIkVkaXRGbG93Iiwic2hhcmUiLCJTaGFyZSIsImdldFZpZXciLCJNb2NrQ29udHJvbGxlciIsIm1vY2tNVkMiLCJleGlzdGluZyIsInZpZXciLCJjb250cm9sbGVyIiwiZ2V0Q29udHJvbGxlciJdLCJzb3VyY2VSb290IjoiLiIsInNvdXJjZXMiOlsiVUk1TW9ja0hlbHBlci50cyJdLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgdHlwZSB7IFdpdGhNb2NrIH0gZnJvbSBcIkBzYXAtdXgvamVzdC1tb2NrLXVpNS9kaXN0L2dlbmVyaWNcIjtcbmltcG9ydCB7IG1vY2sgfSBmcm9tIFwiQHNhcC11eC9qZXN0LW1vY2stdWk1L2Rpc3QvZ2VuZXJpY1wiO1xuaW1wb3J0IEVkaXRGbG93IGZyb20gXCJzYXAvZmUvY29yZS9jb250cm9sbGVyZXh0ZW5zaW9ucy9FZGl0Rmxvd1wiO1xuaW1wb3J0IEludGVybmFsRWRpdEZsb3cgZnJvbSBcInNhcC9mZS9jb3JlL2NvbnRyb2xsZXJleHRlbnNpb25zL0ludGVybmFsRWRpdEZsb3dcIjtcbmltcG9ydCBJbnRlcm5hbFJvdXRpbmcgZnJvbSBcInNhcC9mZS9jb3JlL2NvbnRyb2xsZXJleHRlbnNpb25zL0ludGVybmFsUm91dGluZ1wiO1xuaW1wb3J0IFNoYXJlIGZyb20gXCJzYXAvZmUvY29yZS9jb250cm9sbGVyZXh0ZW5zaW9ucy9TaGFyZVwiO1xuaW1wb3J0IFNpZGVFZmZlY3RzIGZyb20gXCJzYXAvZmUvY29yZS9jb250cm9sbGVyZXh0ZW5zaW9ucy9TaWRlRWZmZWN0c1wiO1xuaW1wb3J0IEV2ZW50IGZyb20gXCJzYXAvdWkvYmFzZS9FdmVudFwiO1xuaW1wb3J0IENvbnRyb2xsZXIgZnJvbSBcInNhcC91aS9jb3JlL212Yy9Db250cm9sbGVyXCI7XG5pbXBvcnQgVmlldyBmcm9tIFwic2FwL3VpL2NvcmUvbXZjL1ZpZXdcIjtcbmltcG9ydCBDb21wb3NpdGVCaW5kaW5nIGZyb20gXCJzYXAvdWkvbW9kZWwvQ29tcG9zaXRlQmluZGluZ1wiO1xuaW1wb3J0IENvbnRleHQgZnJvbSBcInNhcC91aS9tb2RlbC9vZGF0YS92NC9Db250ZXh0XCI7XG5pbXBvcnQgT0RhdGFDb250ZXh0QmluZGluZyBmcm9tIFwic2FwL3VpL21vZGVsL29kYXRhL3Y0L09EYXRhQ29udGV4dEJpbmRpbmdcIjtcbmltcG9ydCBPRGF0YUxpc3RCaW5kaW5nIGZyb20gXCJzYXAvdWkvbW9kZWwvb2RhdGEvdjQvT0RhdGFMaXN0QmluZGluZ1wiO1xuaW1wb3J0IE9EYXRhTWV0YU1vZGVsIGZyb20gXCJzYXAvdWkvbW9kZWwvb2RhdGEvdjQvT0RhdGFNZXRhTW9kZWxcIjtcbmltcG9ydCBPRGF0YU1vZGVsIGZyb20gXCJzYXAvdWkvbW9kZWwvb2RhdGEvdjQvT0RhdGFNb2RlbFwiO1xuaW1wb3J0IE9EYXRhUHJvcGVydHlCaW5kaW5nIGZyb20gXCJzYXAvdWkvbW9kZWwvb2RhdGEvdjQvT0RhdGFQcm9wZXJ0eUJpbmRpbmdcIjtcblxuLyoqXG4gKiBVdGlsaXR5IHR5cGUgdG8gbW9jayBhIHNhcC51aS5tb2RlbC5vZGF0YS52NC5Db250ZXh0XG4gKi9cbmV4cG9ydCB0eXBlIE1vY2tDb250ZXh0ID0gV2l0aE1vY2s8Q29udGV4dD4gJiB7XG5cdF9pc0tlcHRBbGl2ZTogYm9vbGVhbjtcblx0X2NvbnRleHREYXRhOiBhbnk7XG5cdF9vQmluZGluZzogYW55O1xuXHRfaXNJbmFjdGl2ZTogYm9vbGVhbjtcbn07XG4vKipcbiAqIEZhY3RvcnkgZnVuY3Rpb24gdG8gY3JlYXRlIGEgbmV3IE1vY2tDb250ZXh0LlxuICpcbiAqIEBwYXJhbSBvQ29udGV4dERhdGEgQSBtYXAgb2YgdGhlIGRpZmZlcmVudCBwcm9wZXJ0aWVzIG9mIHRoZSBjb250ZXh0LiBUaGUgdmFsdWUgZm9yIHRoZSBrZXkgJyRwYXRoJyB3aWxsIGJlIHJldHVybmVkIGJ5IHRoZSAnZ2V0UGF0aCcgbWV0aG9kXG4gKiBAcGFyYW0gb0JpbmRpbmcgVGhlIGJpbmRpbmcgb2YgdGhlIGNvbnRleHRcbiAqIEBwYXJhbSBpc0luYWN0aXZlIElzIHRoZSBjb250ZXh0IGluaWFjdGl2ZSBvciBub3RcbiAqIEByZXR1cm5zIEEgbmV3IE1vY2tDb250ZXh0XG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBjcmVhdGVNb2NrQ29udGV4dChvQ29udGV4dERhdGE/OiBhbnksIG9CaW5kaW5nPzogYW55LCBpc0luYWN0aXZlPzogYm9vbGVhbik6IE1vY2tDb250ZXh0IHtcblx0Ly8gVWdseSB3b3JrYXJvdW5kIHRvIGdldCBhIHByb3BlciBtb2NrIHBiamVjdCwgYXMgQ29udGV4dCBpc24ndCBwcm9wZXJseSBleHBvcnRlZCBmcm9tIFVJNVxuXHRjb25zdCBtb2NrZWQgPSBtb2NrKE9iamVjdC5nZXRQcm90b3R5cGVPZigoQ29udGV4dCBhcyBhbnkpLmNyZWF0ZU5ld0NvbnRleHQobnVsbCwgbnVsbCwgXCIvZVwiKSkpIGFzIE1vY2tDb250ZXh0O1xuXHRtb2NrZWQuX2lzS2VwdEFsaXZlID0gZmFsc2U7XG5cdG1vY2tlZC5fY29udGV4dERhdGEgPSBvQ29udGV4dERhdGEgfHwge307XG5cdG1vY2tlZC5fb0JpbmRpbmcgPSBvQmluZGluZztcblx0bW9ja2VkLl9pc0luYWN0aXZlID0gISFpc0luYWN0aXZlO1xuXG5cdC8vIERlZmF1bHQgYmVoYXZpb3Jcblx0bW9ja2VkLm1vY2suaXNBLm1vY2tJbXBsZW1lbnRhdGlvbigoc0NsYXNzTmFtZTogc3RyaW5nKSA9PiB7XG5cdFx0cmV0dXJuIHNDbGFzc05hbWUgPT09IFwic2FwLnVpLm1vZGVsLm9kYXRhLnY0LkNvbnRleHRcIjtcblx0fSk7XG5cdG1vY2tlZC5tb2NrLmdldFByb3BlcnR5Lm1vY2tJbXBsZW1lbnRhdGlvbigoa2V5OiBzdHJpbmcpID0+IHtcblx0XHRyZXR1cm4gbW9ja2VkLl9jb250ZXh0RGF0YVtrZXldO1xuXHR9KTtcblx0bW9ja2VkLm1vY2sucmVxdWVzdFByb3BlcnR5Lm1vY2tJbXBsZW1lbnRhdGlvbigoa2V5T3JLZXlzOiBzdHJpbmcgfCBzdHJpbmdbXSkgPT4ge1xuXHRcdGlmIChBcnJheS5pc0FycmF5KGtleU9yS2V5cykpIHtcblx0XHRcdHJldHVybiBQcm9taXNlLnJlc29sdmUoa2V5T3JLZXlzLm1hcCgoa2V5KSA9PiBtb2NrZWQuX2NvbnRleHREYXRhW2tleV0pKTtcblx0XHR9XG5cdFx0cmV0dXJuIFByb21pc2UucmVzb2x2ZShtb2NrZWQuX2NvbnRleHREYXRhW2tleU9yS2V5c10pO1xuXHR9KTtcblx0bW9ja2VkLm1vY2sucmVxdWVzdE9iamVjdC5tb2NrSW1wbGVtZW50YXRpb24oKGtleTogc3RyaW5nKSA9PiB7XG5cdFx0cmV0dXJuIFByb21pc2UucmVzb2x2ZShtb2NrZWQuX2NvbnRleHREYXRhW2tleV0pO1xuXHR9KTtcblx0bW9ja2VkLm1vY2suc2V0UHJvcGVydHkubW9ja0ltcGxlbWVudGF0aW9uKChrZXk6IHN0cmluZywgdmFsdWU6IGFueSkgPT4ge1xuXHRcdG1vY2tlZC5fY29udGV4dERhdGFba2V5XSA9IHZhbHVlO1xuXHRcdHJldHVybiBtb2NrZWQuX2NvbnRleHREYXRhW2tleV07XG5cdH0pO1xuXG5cdG1vY2tlZC5tb2NrLmdldE9iamVjdC5tb2NrSW1wbGVtZW50YXRpb24oKHBhdGg6IHN0cmluZykgPT4ge1xuXHRcdGxldCByZXN1bHQgPSBwYXRoID8gbW9ja2VkLl9jb250ZXh0RGF0YVtwYXRoXSA6IG1vY2tlZC5fY29udGV4dERhdGE7XG5cblx0XHRpZiAoIXJlc3VsdCAmJiBwYXRoICYmIHBhdGguaW5kZXhPZihcIi9cIikgPiAtMSkge1xuXHRcdFx0Y29uc3QgcGFydHMgPSBwYXRoLnNwbGl0KFwiL1wiKTtcblx0XHRcdHJlc3VsdCA9IHBhcnRzLnJlZHVjZSgoc3VtLCBwYXJ0OiBhbnkpID0+IHtcblx0XHRcdFx0c3VtID0gcGFydCA/IHN1bVtwYXJ0XSA6IHN1bTtcblx0XHRcdFx0cmV0dXJuIHN1bTtcblx0XHRcdH0sIG1vY2tlZC5fY29udGV4dERhdGEpO1xuXHRcdH1cblxuXHRcdHJldHVybiByZXN1bHQ7XG5cdH0pO1xuXG5cdG1vY2tlZC5tb2NrLmdldFBhdGgubW9ja0ltcGxlbWVudGF0aW9uKCgpID0+IG1vY2tlZC5fY29udGV4dERhdGFbXCIkcGF0aFwiXSk7XG5cdG1vY2tlZC5tb2NrLmdldEJpbmRpbmcubW9ja0ltcGxlbWVudGF0aW9uKCgpID0+IG1vY2tlZC5fb0JpbmRpbmcpO1xuXHRtb2NrZWQubW9jay5nZXRNb2RlbC5tb2NrSW1wbGVtZW50YXRpb24oKCkgPT4gbW9ja2VkLl9vQmluZGluZz8uZ2V0TW9kZWwoKSk7XG5cdG1vY2tlZC5tb2NrLnNldEtlZXBBbGl2ZS5tb2NrSW1wbGVtZW50YXRpb24oKGJvb2w6IGJvb2xlYW4sIF9mbk9uQmVmb3JlRGVzdHJveT86IGFueSwgX2JSZXF1ZXN0TWVzc2FnZXM/OiBib29sZWFuKSA9PiB7XG5cdFx0bW9ja2VkLl9pc0tlcHRBbGl2ZSA9IGJvb2w7XG5cdH0pO1xuXHRtb2NrZWQubW9jay5pc0tlZXBBbGl2ZS5tb2NrSW1wbGVtZW50YXRpb24oKCkgPT4gbW9ja2VkLl9pc0tlcHRBbGl2ZSk7XG5cdG1vY2tlZC5tb2NrLmlzSW5hY3RpdmUubW9ja0ltcGxlbWVudGF0aW9uKCgpID0+IG1vY2tlZC5faXNJbmFjdGl2ZSk7XG5cblx0cmV0dXJuIG1vY2tlZDtcbn1cbi8qKlxuICogRm9yIGNvbXBhdGliaWxpdHkgcmVhc29ucywgd2Uga2VlcCBhIG5ldyBvcGVyYXRvci4gVXNlIHRoZSBmYWN0b3J5IGZ1bmN0aW9uIGNyZWF0ZU1vY2tDb250ZXh0IGluc3RlYWQuXG4gKi9cbmV4cG9ydCBjb25zdCBNb2NrQ29udGV4dDogbmV3IChvVmFsdWVzPzogYW55LCBvQmluZGluZz86IGFueSwgaXNJbmFjdGl2ZT86IGJvb2xlYW4pID0+IE1vY2tDb250ZXh0ID0gY3JlYXRlTW9ja0NvbnRleHQgYXMgYW55O1xuXG4vKipcbiAqIFV0aWxpdHkgdHlwZSB0byBtb2NrIGEgc2FwLnVpLmJhc2UuRXZlbnRcbiAqL1xuZXhwb3J0IHR5cGUgTW9ja0V2ZW50ID0gV2l0aE1vY2s8RXZlbnQ+ICYge1xuXHRfcGFyYW1zOiB7IFtrZXk6IHN0cmluZ106IGFueSB9O1xufTtcbi8qKlxuICogRmFjdG9yeSBmdW5jdGlvbiB0byBjcmVhdGUgYSBuZXcgTW9ja0V2ZW50LlxuICpcbiAqIEBwYXJhbSBwYXJhbXMgVGhlIHBhcmFtZXRlcnMgb2YgdGhlIGV2ZW50XG4gKiBAcmV0dXJucyBBIG5ldyBNb2NrRXZlbnRcbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGNyZWF0ZU1vY2tFdmVudChwYXJhbXM/OiB7IFtrZXk6IHN0cmluZ106IGFueSB9KTogTW9ja0V2ZW50IHtcblx0Y29uc3QgbW9ja2VkID0gbW9jayhFdmVudCkgYXMgTW9ja0V2ZW50O1xuXHRtb2NrZWQuX3BhcmFtcyA9IHBhcmFtcyB8fCB7fTtcblxuXHQvLyBEZWZhdWx0IGJlaGF2aW9yXG5cdG1vY2tlZC5tb2NrLmdldFBhcmFtZXRlci5tb2NrSW1wbGVtZW50YXRpb24oKG5hbWUpID0+IG1vY2tlZC5fcGFyYW1zW25hbWVdKTtcblxuXHRyZXR1cm4gbW9ja2VkO1xufVxuLyoqXG4gKiBGb3IgY29tcGF0aWJpbGl0eSByZWFzb25zLCB3ZSBrZWVwIGEgbmV3IG9wZXJhdG9yLiBVc2UgdGhlIGZhY3RvcnkgZnVuY3Rpb24gY3JlYXRlTW9ja0V2ZW50IGluc3RlYWQuXG4gKi9cbmV4cG9ydCBjb25zdCBNb2NrRXZlbnQ6IG5ldyAocGFyYW1zPzogeyBba2V5OiBzdHJpbmddOiBhbnkgfSkgPT4gTW9ja0V2ZW50ID0gY3JlYXRlTW9ja0V2ZW50IGFzIGFueTtcblxuLyoqXG4gKiBVdGlsaXR5IHR5cGUgdG8gbW9jayBhIHNhcC51aS5tb2RlbC5vZGF0YS52NC5PRGF0YUxpc3RCaW5kaW5nXG4gKi9cbmV4cG9ydCB0eXBlIE1vY2tMaXN0QmluZGluZyA9IFdpdGhNb2NrPE9EYXRhTGlzdEJpbmRpbmc+ICYge1xuXHRfYU1vY2tDb250ZXh0czogTW9ja0NvbnRleHRbXTtcblx0X21vY2tNb2RlbD86IE1vY2tNb2RlbDtcblxuXHQvKipcblx0ICogVXRpbGl0eSBtZXRob2QgdG8gc2V0IHRoZSBtb2RlbCBvZiB0aGUgTGlzdEJpbmRpbmdcblx0ICovXG5cdHNldE1vZGVsOiAobW9kZWw6IE1vY2tNb2RlbCkgPT4gdm9pZDtcbn07XG4vKipcbiAqIEZhY3RvcnkgZnVuY3Rpb24gdG8gY3JlYXRlIGEgbmV3IE1vY2tMaXN0QmluZGluZy5cbiAqXG4gKiBAcGFyYW0gYUNvbnRleHREYXRhIEFuIGFycmF5IG9mIG9iamVjdHMgaG9sZGluZyB0aGUgZGlmZmVyZW50IHByb3BlcnRpZXMgb2YgdGhlIGNvbnRleHRzIHJlZmVyZW5jZWQgYnkgdGhlIExpc3RCaW5kaW5nXG4gKiBAcGFyYW0gb01vY2tNb2RlbCBUaGUgbW9kZWwgb2YgdGhlIExpc3RCaW5kaW5nXG4gKiBAcmV0dXJucyBBIG5ldyBNb2NrTGlzdEJpbmRpbmdcbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGNyZWF0ZU1vY2tMaXN0QmluZGluZyhhQ29udGV4dERhdGE/OiBhbnlbXSwgb01vY2tNb2RlbD86IE1vY2tNb2RlbCk6IE1vY2tMaXN0QmluZGluZyB7XG5cdGNvbnN0IG1vY2tlZCA9IG1vY2soT0RhdGFMaXN0QmluZGluZykgYXMgTW9ja0xpc3RCaW5kaW5nO1xuXHRhQ29udGV4dERhdGEgPSBhQ29udGV4dERhdGEgfHwgW107XG5cdG1vY2tlZC5fYU1vY2tDb250ZXh0cyA9IGFDb250ZXh0RGF0YS5tYXAoKGNvbnRleHREYXRhKSA9PiB7XG5cdFx0cmV0dXJuIGNyZWF0ZU1vY2tDb250ZXh0KGNvbnRleHREYXRhLCBtb2NrZWQpO1xuXHR9KTtcblx0bW9ja2VkLl9tb2NrTW9kZWwgPSBvTW9ja01vZGVsO1xuXG5cdC8vIFV0aWxpdHkgQVBJXG5cdG1vY2tlZC5zZXRNb2RlbCA9IChtb2RlbDogTW9ja01vZGVsKSA9PiB7XG5cdFx0bW9ja2VkLl9tb2NrTW9kZWwgPSBtb2RlbDtcblx0fTtcblxuXHQvLyBEZWZhdWx0IGJlaGF2aW9yXG5cdG1vY2tlZC5tb2NrLmlzQS5tb2NrSW1wbGVtZW50YXRpb24oKHNDbGFzc05hbWU6IHN0cmluZykgPT4ge1xuXHRcdHJldHVybiBzQ2xhc3NOYW1lID09PSBcInNhcC51aS5tb2RlbC5vZGF0YS52NC5PRGF0YUxpc3RCaW5kaW5nXCI7XG5cdH0pO1xuXHRtb2NrZWQubW9jay5yZXF1ZXN0Q29udGV4dHMubW9ja0ltcGxlbWVudGF0aW9uKCgpID0+IHtcblx0XHRyZXR1cm4gUHJvbWlzZS5yZXNvbHZlKG1vY2tlZC5fYU1vY2tDb250ZXh0cyk7XG5cdH0pO1xuXHRtb2NrZWQubW9jay5nZXRDdXJyZW50Q29udGV4dHMubW9ja0ltcGxlbWVudGF0aW9uKCgpID0+IHtcblx0XHRyZXR1cm4gbW9ja2VkLl9hTW9ja0NvbnRleHRzO1xuXHR9KTtcblx0bW9ja2VkLm1vY2suZ2V0QWxsQ3VycmVudENvbnRleHRzLm1vY2tJbXBsZW1lbnRhdGlvbigoKSA9PiB7XG5cdFx0cmV0dXJuIG1vY2tlZC5fYU1vY2tDb250ZXh0cztcblx0fSk7XG5cdG1vY2tlZC5tb2NrLmdldENvbnRleHRzLm1vY2tJbXBsZW1lbnRhdGlvbigoKSA9PiB7XG5cdFx0cmV0dXJuIG1vY2tlZC5fYU1vY2tDb250ZXh0cztcblx0fSk7XG5cdG1vY2tlZC5tb2NrLmdldE1vZGVsLm1vY2tJbXBsZW1lbnRhdGlvbigoKSA9PiB7XG5cdFx0cmV0dXJuIG1vY2tlZC5fbW9ja01vZGVsO1xuXHR9KTtcblx0bW9ja2VkLm1vY2suZ2V0VXBkYXRlR3JvdXBJZC5tb2NrUmV0dXJuVmFsdWUoXCJhdXRvXCIpO1xuXG5cdHJldHVybiBtb2NrZWQ7XG59XG4vKipcbiAqIEZvciBjb21wYXRpYmlsaXR5IHJlYXNvbnMsIHdlIGtlZXAgYSBuZXcgb3BlcmF0b3IuIFVzZSB0aGUgZmFjdG9yeSBmdW5jdGlvbiBjcmVhdGVNb2NrTGlzdEJpbmRpbmcgaW5zdGVhZC5cbiAqL1xuZXhwb3J0IGNvbnN0IE1vY2tMaXN0QmluZGluZzogbmV3IChhQ29udGV4dHM/OiBhbnlbXSwgbW9ja01vZGVsPzogTW9ja01vZGVsKSA9PiBNb2NrTGlzdEJpbmRpbmcgPSBjcmVhdGVNb2NrTGlzdEJpbmRpbmcgYXMgYW55O1xuXG4vKipcbiAqIFV0aWxpdHkgdHlwZSB0byBtb2NrIGEgc2FwLnVpLm1vZGVsLm9kYXRhLnY0Lk9EYXRhUHJvcGVydHlCaW5kaW5nXG4gKi9cbmV4cG9ydCB0eXBlIE1vY2tQcm9wZXJ0eUJpbmRpbmcgPSBXaXRoTW9jazxPRGF0YVByb3BlcnR5QmluZGluZz4gJiB7XG5cdF92YWx1ZT86IGFueTtcblx0X3BhdGg/OiBzdHJpbmc7XG5cdF9tb2NrTW9kZWw/OiBNb2NrTW9kZWw7XG59O1xuLyoqXG4gKiBGYWN0b3J5IGZ1bmN0aW9uIHRvIGNyZWF0ZSBhIG5ldyBNb2NrUHJvcGVydHlCaW5kaW5nLlxuICpcbiAqIEBwYXJhbSB2YWx1ZSBUaGUgdmFsdWUgcmV0dXJuZCBieSB0aGUgUHJvcGVydHlCaW5kaW5nXG4gKiBAcGFyYW0gcGF0aCBUaGUgcGF0aCBvZiB0aGUgUHJvcGVydHlCaW5kaW5nXG4gKiBAcGFyYW0gb01vY2tNb2RlbCBUaGUgbW9kZWwgb2YgdGhlIFByb3BlcnR5QmluZGluZ1xuICogQHJldHVybnMgQSBuZXcgTW9ja1Byb3BlcnR5QmluZGluZ1xuICovXG5leHBvcnQgZnVuY3Rpb24gY3JlYXRlTW9ja1Byb3BlcnR5QmluZGluZyh2YWx1ZTogYW55LCBwYXRoPzogc3RyaW5nLCBvTW9ja01vZGVsPzogTW9ja01vZGVsKTogTW9ja1Byb3BlcnR5QmluZGluZyB7XG5cdGNvbnN0IG1vY2tlZCA9IG1vY2soT0RhdGFQcm9wZXJ0eUJpbmRpbmcpIGFzIE1vY2tQcm9wZXJ0eUJpbmRpbmc7XG5cdG1vY2tlZC5fbW9ja01vZGVsID0gb01vY2tNb2RlbDtcblx0bW9ja2VkLl92YWx1ZSA9IHZhbHVlO1xuXHRtb2NrZWQuX3BhdGggPSBwYXRoO1xuXG5cdC8vIERlZmF1bHQgYmVoYXZpb3Jcblx0bW9ja2VkLm1vY2suaXNBLm1vY2tJbXBsZW1lbnRhdGlvbigoc0NsYXNzTmFtZTogc3RyaW5nKSA9PiB7XG5cdFx0cmV0dXJuIHNDbGFzc05hbWUgPT09IFwic2FwLnVpLm1vZGVsLm9kYXRhLnY0Lk9EYXRhUHJvcGVydHlCaW5kaW5nXCI7XG5cdH0pO1xuXHRtb2NrZWQubW9jay5nZXRNb2RlbC5tb2NrSW1wbGVtZW50YXRpb24oKCkgPT4ge1xuXHRcdHJldHVybiBtb2NrZWQuX21vY2tNb2RlbDtcblx0fSk7XG5cdG1vY2tlZC5tb2NrLmdldFZhbHVlLm1vY2tJbXBsZW1lbnRhdGlvbigoKSA9PiB7XG5cdFx0cmV0dXJuIG1vY2tlZC5fdmFsdWU7XG5cdH0pO1xuXHRtb2NrZWQubW9jay5nZXRQYXRoLm1vY2tJbXBsZW1lbnRhdGlvbigoKSA9PiB7XG5cdFx0cmV0dXJuIG1vY2tlZC5fcGF0aDtcblx0fSk7XG5cblx0cmV0dXJuIG1vY2tlZDtcbn1cbi8qKlxuICogRm9yIGNvbXBhdGliaWxpdHkgcmVhc29ucywgd2Uga2VlcCBhIG5ldyBvcGVyYXRvci4gVXNlIHRoZSBmYWN0b3J5IGZ1bmN0aW9uIGNyZWF0ZU1vY2tQcm9wZXJ0eUJpbmRpbmcgaW5zdGVhZC5cbiAqL1xuZXhwb3J0IGNvbnN0IE1vY2tQcm9wZXJ0eUJpbmRpbmc6IG5ldyAodmFsdWU6IGFueSwgb01vY2tNb2RlbD86IE1vY2tNb2RlbCkgPT4gTW9ja1Byb3BlcnR5QmluZGluZyA9IGNyZWF0ZU1vY2tQcm9wZXJ0eUJpbmRpbmcgYXMgYW55O1xuXG4vKipcbiAqIFV0aWxpdHkgdHlwZSB0byBtb2NrIGEgc2FwLnVpLm1vZGVsLkNvbXBvc2l0ZUJpbmRpbmdcbiAqL1xuZXhwb3J0IHR5cGUgTW9ja0NvbXBvc2l0ZUJpbmRpbmcgPSBXaXRoTW9jazxDb21wb3NpdGVCaW5kaW5nPiAmIHtcblx0X2FCaW5kaW5nczogTW9ja1Byb3BlcnR5QmluZGluZ1tdO1xufTtcbi8qKlxuICogRmFjdG9yeSBmdW5jdGlvbiB0byBjcmVhdGUgYSBuZXcgTW9ja0NvbXBvc2l0ZUJpbmRpbmcuXG4gKlxuICogQHBhcmFtIGFCaW5kaW5ncyBUaGUgYmluZGluZ3Mgb2YgdGhlIENvbXBvc2l0ZUJpbmRpbmdcbiAqIEByZXR1cm5zIEEgbmV3IE1vY2tDb21wb3NpdGVCaW5kaW5nXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBjcmVhdGVNb2NrQ29tcG9zaXRlQmluZGluZyhhQmluZGluZ3M6IE1vY2tQcm9wZXJ0eUJpbmRpbmdbXSk6IE1vY2tDb21wb3NpdGVCaW5kaW5nIHtcblx0Y29uc3QgbW9ja2VkID0gbW9jayhDb21wb3NpdGVCaW5kaW5nKSBhcyBNb2NrQ29tcG9zaXRlQmluZGluZztcblx0bW9ja2VkLl9hQmluZGluZ3MgPSBhQmluZGluZ3M7XG5cblx0Ly8gRGVmYXVsdCBiZWhhdmlvclxuXHRtb2NrZWQubW9jay5pc0EubW9ja0ltcGxlbWVudGF0aW9uKChzQ2xhc3NOYW1lOiBzdHJpbmcpID0+IHtcblx0XHRyZXR1cm4gc0NsYXNzTmFtZSA9PT0gXCJzYXAudWkubW9kZWwuQ29tcG9zaXRlQmluZGluZ1wiO1xuXHR9KTtcblx0bW9ja2VkLm1vY2suZ2V0QmluZGluZ3MubW9ja0ltcGxlbWVudGF0aW9uKCgpID0+IHtcblx0XHRyZXR1cm4gbW9ja2VkLl9hQmluZGluZ3M7XG5cdH0pO1xuXHRtb2NrZWQubW9jay5nZXRWYWx1ZS5tb2NrSW1wbGVtZW50YXRpb24oKCkgPT4ge1xuXHRcdHJldHVybiBtb2NrZWQuX2FCaW5kaW5ncy5tYXAoKGJpbmRpbmcpID0+IGJpbmRpbmcuZ2V0VmFsdWUoKSk7XG5cdH0pO1xuXG5cdHJldHVybiBtb2NrZWQ7XG59XG4vKipcbiAqIEZvciBjb21wYXRpYmlsaXR5IHJlYXNvbnMsIHdlIGtlZXAgYSBuZXcgb3BlcmF0b3IuIFVzZSB0aGUgZmFjdG9yeSBmdW5jdGlvbiBjcmVhdGVNb2NrQ29tcG9zaXRlQmluZGluZyBpbnN0ZWFkLlxuICovXG5leHBvcnQgY29uc3QgTW9ja0NvbXBvc2l0ZUJpbmRpbmc6IG5ldyAoYUJpbmRpbmdzOiBNb2NrUHJvcGVydHlCaW5kaW5nW10pID0+IE1vY2tDb21wb3NpdGVCaW5kaW5nID0gY3JlYXRlTW9ja0NvbXBvc2l0ZUJpbmRpbmcgYXMgYW55O1xuXG4vKipcbiAqIFV0aWxpdHkgdHlwZSB0byBtb2NrIGEgc2FwLnVpLm1vZGVsLm9kYXRhLnY0Lk9EYXRhQ29udGV4dEJpbmRpbmdcbiAqL1xuZXhwb3J0IHR5cGUgTW9ja0NvbnRleHRCaW5kaW5nID0gV2l0aE1vY2s8T0RhdGFDb250ZXh0QmluZGluZz4gJiB7XG5cdG9Nb2NrQ29udGV4dDogTW9ja0NvbnRleHQ7XG5cdGlzS2VwdEFsaXZlOiBib29sZWFuO1xuXHRtb2NrTW9kZWw/OiBNb2NrTW9kZWw7XG5cblx0LyoqXG5cdCAqIFV0aWxpdHkgbWV0aG9kIHRvIGFjY2VzcyB0aGUgaW50ZXJuYWwgTW9ja0NvbnRleHQgb2YgdGhlIENvbnRleHRCaW5kaW5nXG5cdCAqL1xuXHRnZXRJbnRlcm5hbE1vY2tDb250ZXh0OiAoKSA9PiBNb2NrQ29udGV4dDtcblx0LyoqXG5cdCAqIFV0aWxpdHkgbWV0aG9kIHRvIHNldCB0aGUgbW9kZWwgb2YgdGhlIENvbnRleHRCaW5kaW5nXG5cdCAqL1xuXHRzZXRNb2RlbDogKG9Nb2RlbDogTW9ja01vZGVsKSA9PiB2b2lkO1xufTtcbi8qKlxuICogRmFjdG9yeSBmdW5jdGlvbiB0byBjcmVhdGUgYSBuZXcgTW9ja0NvbnRleHRCaW5kaW5nLlxuICpcbiAqIEBwYXJhbSBvQ29udGV4dCBUaGUgY29udGV4dCBvZiB0aGUgQ29udGV4dEJpbmRpbmdcbiAqIEBwYXJhbSBvTW9ja01vZGVsIFRoZSBtb2RlbCBvZiB0aGUgQ29udGV4dEJpbmRpbmdcbiAqIEByZXR1cm5zIEEgbmV3IE1vY2tDb250ZXh0QmluZGluZ1xuICovXG5leHBvcnQgZnVuY3Rpb24gY3JlYXRlTW9ja0NvbnRleHRCaW5kaW5nKG9Db250ZXh0PzogYW55LCBvTW9ja01vZGVsPzogTW9ja01vZGVsKTogTW9ja0NvbnRleHRCaW5kaW5nIHtcblx0Y29uc3QgbW9ja2VkID0gbW9jayhPRGF0YUNvbnRleHRCaW5kaW5nKSBhcyBNb2NrQ29udGV4dEJpbmRpbmc7XG5cdG1vY2tlZC5tb2NrTW9kZWwgPSBvTW9ja01vZGVsO1xuXHRtb2NrZWQub01vY2tDb250ZXh0ID0gY3JlYXRlTW9ja0NvbnRleHQob0NvbnRleHQgfHwge30sIG1vY2tlZCk7XG5cblx0Ly8gVXRpbGl0eSBBUElcblx0bW9ja2VkLmdldEludGVybmFsTW9ja0NvbnRleHQgPSAoKSA9PiB7XG5cdFx0cmV0dXJuIG1vY2tlZC5vTW9ja0NvbnRleHQ7XG5cdH07XG5cdG1vY2tlZC5zZXRNb2RlbCA9IChvTW9kZWw6IE1vY2tNb2RlbCkgPT4ge1xuXHRcdG1vY2tlZC5tb2NrTW9kZWwgPSBvTW9kZWw7XG5cdH07XG5cblx0Ly8gRGVmYXVsdCBiZWhhdmlvclxuXHRtb2NrZWQubW9jay5pc0EubW9ja0ltcGxlbWVudGF0aW9uKChzQ2xhc3NOYW1lOiBzdHJpbmcpID0+IHtcblx0XHRyZXR1cm4gc0NsYXNzTmFtZSA9PT0gXCJzYXAudWkubW9kZWwub2RhdGEudjQuT0RhdGFDb250ZXh0QmluZGluZ1wiO1xuXHR9KTtcblx0bW9ja2VkLm1vY2suZ2V0Qm91bmRDb250ZXh0Lm1vY2tJbXBsZW1lbnRhdGlvbigoKSA9PiB7XG5cdFx0cmV0dXJuIG1vY2tlZC5vTW9ja0NvbnRleHQ7XG5cdH0pO1xuXHRtb2NrZWQubW9jay5nZXRNb2RlbC5tb2NrSW1wbGVtZW50YXRpb24oKCkgPT4ge1xuXHRcdHJldHVybiBtb2NrZWQubW9ja01vZGVsO1xuXHR9KTtcblx0bW9ja2VkLm1vY2suZXhlY3V0ZS5tb2NrUmVzb2x2ZWRWYWx1ZSh0cnVlKTtcblxuXHRyZXR1cm4gbW9ja2VkO1xufVxuLyoqXG4gKiBGb3IgY29tcGF0aWJpbGl0eSByZWFzb25zLCB3ZSBrZWVwIGEgbmV3IG9wZXJhdG9yLiBVc2UgdGhlIGZhY3RvcnkgZnVuY3Rpb24gY3JlYXRlTW9ja0NvbnRleHRCaW5kaW5nIGluc3RlYWQuXG4gKi9cbmV4cG9ydCBjb25zdCBNb2NrQ29udGV4dEJpbmRpbmc6IG5ldyAob0NvbnRleHQ/OiBhbnksIG9Nb2NrTW9kZWw/OiBNb2NrTW9kZWwpID0+IE1vY2tDb250ZXh0QmluZGluZyA9IGNyZWF0ZU1vY2tDb250ZXh0QmluZGluZyBhcyBhbnk7XG5cbi8qKlxuICogVXRpbGl0eSB0eXBlIHRvIG1vY2sgYSBzYXAudWkubW9kZWwub2RhdGEudjQuT0RhdGFNZXRhTW9kZWxcbiAqL1xuZXhwb3J0IHR5cGUgTW9ja01ldGFNb2RlbCA9IFdpdGhNb2NrPE9EYXRhTWV0YU1vZGVsPiAmIHtcblx0b01ldGFDb250ZXh0OiBNb2NrQ29udGV4dDtcbn07XG4vKipcbiAqIEZhY3RvcnkgZnVuY3Rpb24gdG8gY3JlYXRlIGEgbmV3IE1vY2tNZXRhTW9kZWwuXG4gKlxuICogQHBhcmFtIG9NZXRhRGF0YSBBIG1hcCBvZiB0aGUgZGlmZmVyZW50IG1ldGFkYXRhIHByb3BlcnRpZXMgb2YgdGhlIE1ldGFNb2RlbCAocGF0aCAtPiB2YWx1ZSkuXG4gKiBAcmV0dXJucyBBIG5ldyBNb2NrTWV0YU1vZGVsXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBjcmVhdGVNb2NrTWV0YU1vZGVsKG9NZXRhRGF0YT86IGFueSk6IE1vY2tNZXRhTW9kZWwge1xuXHRjb25zdCBtb2NrZWQgPSBtb2NrKE9EYXRhTWV0YU1vZGVsKSBhcyBNb2NrTWV0YU1vZGVsO1xuXHRtb2NrZWQub01ldGFDb250ZXh0ID0gY3JlYXRlTW9ja0NvbnRleHQob01ldGFEYXRhIHx8IHt9KTtcblxuXHQvLyBEZWZhdWx0IGJlaGF2aW9yXG5cdG1vY2tlZC5tb2NrLmdldE1ldGFDb250ZXh0Lm1vY2tJbXBsZW1lbnRhdGlvbigoc1BhdGg6IHN0cmluZykgPT4ge1xuXHRcdHJldHVybiBjcmVhdGVNb2NrQ29udGV4dCh7ICRwYXRoOiBzUGF0aCB9KTtcblx0fSk7XG5cdG1vY2tlZC5tb2NrLmdldE9iamVjdC5tb2NrSW1wbGVtZW50YXRpb24oKHNQYXRoOiBzdHJpbmcpID0+IHtcblx0XHRyZXR1cm4gbW9ja2VkLm9NZXRhQ29udGV4dC5nZXRQcm9wZXJ0eShzUGF0aCk7XG5cdH0pO1xuXHRtb2NrZWQubW9jay5jcmVhdGVCaW5kaW5nQ29udGV4dC5tb2NrSW1wbGVtZW50YXRpb24oKHNQYXRoOiBzdHJpbmcpID0+IHtcblx0XHRyZXR1cm4gY3JlYXRlTW9ja0NvbnRleHQoeyAkcGF0aDogc1BhdGggfSk7XG5cdH0pO1xuXHRtb2NrZWQubW9jay5nZXRNZXRhUGF0aC5tb2NrSW1wbGVtZW50YXRpb24oKHNQYXRoOiBzdHJpbmcpID0+IHtcblx0XHRjb25zdCBtZXRhbW9kZWwgPSBuZXcgT0RhdGFNZXRhTW9kZWwoKTtcblx0XHRyZXR1cm4gc1BhdGggPyBtZXRhbW9kZWwuZ2V0TWV0YVBhdGgoc1BhdGgpIDogc1BhdGg7XG5cdH0pO1xuXG5cdHJldHVybiBtb2NrZWQ7XG59XG4vKipcbiAqIEZvciBjb21wYXRpYmlsaXR5IHJlYXNvbnMsIHdlIGtlZXAgYSBuZXcgb3BlcmF0b3IuIFVzZSB0aGUgZmFjdG9yeSBmdW5jdGlvbiBjcmVhdGVNb2NrTWV0YU1vZGVsIGluc3RlYWQuXG4gKi9cbmV4cG9ydCBjb25zdCBNb2NrTWV0YU1vZGVsOiBuZXcgKG9NZXRhRGF0YT86IGFueSkgPT4gTW9ja01ldGFNb2RlbCA9IGNyZWF0ZU1vY2tNZXRhTW9kZWwgYXMgYW55O1xuXG4vKipcbiAqIFV0aWxpdHkgdHlwZSB0byBtb2NrIGEgc2FwLnVpLm1vZGVsLm9kYXRhLnY0Lk9EYXRhTW9kZWxcbiAqL1xuZXhwb3J0IHR5cGUgTW9ja01vZGVsID0gV2l0aE1vY2s8T0RhdGFNb2RlbD4gJiB7XG5cdG9NZXRhTW9kZWw/OiBNb2NrTWV0YU1vZGVsO1xuXHRtb2NrTGlzdEJpbmRpbmc/OiBNb2NrTGlzdEJpbmRpbmc7XG5cdG1vY2tDb250ZXh0QmluZGluZz86IE1vY2tDb250ZXh0QmluZGluZztcblxuXHQvKipcblx0ICogVXRpbGl0eSBtZXRob2QgdG8gc2V0IHRoZSBtZXRhbW9kZWwgb2YgdGhlIE1vY2tNb2RlbFxuXHQgKi9cblx0c2V0TWV0YU1vZGVsOiAob01ldGFNb2RlbDogTW9ja01ldGFNb2RlbCkgPT4gdm9pZDtcbn07XG4vKipcbiAqIEZhY3RvcnkgZnVuY3Rpb24gdG8gY3JlYXRlIGEgbmV3IE1vY2tNb2RlbC5cbiAqXG4gKiBAcGFyYW0gb01vY2tMaXN0QmluZGluZyBBIGxpc3QgYmluZGluZyB0aGF0IHdpbGwgYmUgcmV0dXJuZWQgd2hlbiBjYWxsaW5nIGJpbmRMaXN0LlxuICogQHBhcmFtIG9Nb2NrQ29udGV4dEJpbmRpbmcgQSBjb250ZXh0IGJpbmRpbmcgdGhhdCB3aWxsIGJlIHJldHVybmVkIHdoZW4gY2FsbGluZyBiaW5kQ29udGV4dC5cbiAqIEByZXR1cm5zIEEgbmV3IE1vY2tNb2RlbFxuICovXG5leHBvcnQgZnVuY3Rpb24gY3JlYXRlTW9ja01vZGVsKG9Nb2NrTGlzdEJpbmRpbmc/OiBNb2NrTGlzdEJpbmRpbmcsIG9Nb2NrQ29udGV4dEJpbmRpbmc/OiBNb2NrQ29udGV4dEJpbmRpbmcpOiBNb2NrTW9kZWwge1xuXHRjb25zdCBtb2NrZWQgPSBtb2NrKE9EYXRhTW9kZWwpIGFzIE1vY2tNb2RlbDtcblx0bW9ja2VkLm1vY2tMaXN0QmluZGluZyA9IG9Nb2NrTGlzdEJpbmRpbmc7XG5cdG1vY2tlZC5tb2NrQ29udGV4dEJpbmRpbmcgPSBvTW9ja0NvbnRleHRCaW5kaW5nO1xuXHRpZiAob01vY2tMaXN0QmluZGluZykge1xuXHRcdG9Nb2NrTGlzdEJpbmRpbmcuc2V0TW9kZWwobW9ja2VkKTtcblx0fVxuXHRpZiAob01vY2tDb250ZXh0QmluZGluZykge1xuXHRcdG9Nb2NrQ29udGV4dEJpbmRpbmcuc2V0TW9kZWwobW9ja2VkKTtcblx0fVxuXG5cdC8vIFV0aWxpdHkgQVBJXG5cdG1vY2tlZC5zZXRNZXRhTW9kZWwgPSAob01ldGFNb2RlbDogTW9ja01ldGFNb2RlbCkgPT4ge1xuXHRcdG1vY2tlZC5vTWV0YU1vZGVsID0gb01ldGFNb2RlbDtcblx0fTtcblxuXHQvLyBEZWZhdWx0IGJlaGF2aW9yXG5cdG1vY2tlZC5tb2NrLmJpbmRMaXN0Lm1vY2tJbXBsZW1lbnRhdGlvbigoKSA9PiB7XG5cdFx0cmV0dXJuIG1vY2tlZC5tb2NrTGlzdEJpbmRpbmc7XG5cdH0pO1xuXHRtb2NrZWQubW9jay5iaW5kQ29udGV4dC5tb2NrSW1wbGVtZW50YXRpb24oKCkgPT4ge1xuXHRcdHJldHVybiBtb2NrZWQubW9ja0NvbnRleHRCaW5kaW5nO1xuXHR9KTtcblx0bW9ja2VkLm1vY2suZ2V0TWV0YU1vZGVsLm1vY2tJbXBsZW1lbnRhdGlvbigoKSA9PiB7XG5cdFx0cmV0dXJuIG1vY2tlZC5vTWV0YU1vZGVsO1xuXHR9KTtcblxuXHRyZXR1cm4gbW9ja2VkO1xufVxuLyoqXG4gKiBGb3IgY29tcGF0aWJpbGl0eSByZWFzb25zLCB3ZSBrZWVwIGEgbmV3IG9wZXJhdG9yLiBVc2UgdGhlIGZhY3RvcnkgZnVuY3Rpb24gY3JlYXRlTW9ja01vZGVsIGluc3RlYWQuXG4gKi9cbmV4cG9ydCBjb25zdCBNb2NrTW9kZWw6IG5ldyAob01vY2tMaXN0QmluZGluZz86IE1vY2tMaXN0QmluZGluZywgb01vY2tDb250ZXh0QmluZGluZz86IE1vY2tDb250ZXh0QmluZGluZykgPT4gTW9ja01vZGVsID1cblx0Y3JlYXRlTW9ja01vZGVsIGFzIGFueTtcbi8qKlxuICogRmFjdG9yeSBmdW5jdGlvbiB0byBjcmVhdGUgYSBuZXcgTW9ja01vZGVsIHVzZWQgd2l0aCBhIGxpc3RCaW5kaW5nLlxuICpcbiAqIEBwYXJhbSBvTW9ja0xpc3RCaW5kaW5nIEEgbGlzdCBiaW5kaW5nIHRoYXQgd2lsbCBiZSByZXR1cm5lZCB3aGVuIGNhbGxpbmcgYmluZExpc3QuXG4gKiBAcmV0dXJucyBBIG5ldyBNb2NrTW9kZWxcbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGNyZWF0ZU1vY2tNb2RlbEZyb21MaXN0QmluZGluZyhvTW9ja0xpc3RCaW5kaW5nOiBNb2NrTGlzdEJpbmRpbmcpOiBNb2NrTW9kZWwge1xuXHRyZXR1cm4gY3JlYXRlTW9ja01vZGVsKG9Nb2NrTGlzdEJpbmRpbmcpO1xufVxuLyoqXG4gKiAgRmFjdG9yeSBmdW5jdGlvbiB0byBjcmVhdGUgYSBuZXcgTW9ja01vZGVsIHVzZWQgd2l0aCBhIGNvbnRleHRCaW5kaW5nLlxuICpcbiAqIEBwYXJhbSBvTW9ja0NvbnRleHRCaW5kaW5nIEEgY29udGV4dCBiaW5kaW5nIHRoYXQgd2lsbCBiZSByZXR1cm5lZCB3aGVuIGNhbGxpbmcgYmluZENvbnRleHQuXG4gKiBAcmV0dXJucyBBIG5ldyBNb2NrTW9kZWxcbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGNyZWF0ZU1vY2tNb2RlbEZyb21Db250ZXh0QmluZGluZyhvTW9ja0NvbnRleHRCaW5kaW5nOiBNb2NrQ29udGV4dEJpbmRpbmcpOiBNb2NrTW9kZWwge1xuXHRyZXR1cm4gY3JlYXRlTW9ja01vZGVsKHVuZGVmaW5lZCwgb01vY2tDb250ZXh0QmluZGluZyk7XG59XG5cbi8qKlxuICogVXRpbGl0eSB0eXBlIHRvIG1vY2sgYSBzYXAudWkuY29yZS5tdmMuVmlld1xuICovXG5leHBvcnQgdHlwZSBNb2NrVmlldyA9IFdpdGhNb2NrPFZpZXc+O1xuLyoqXG4gKiBGYWN0b3J5IGZ1bmN0aW9uIHRvIGNyZWF0ZSBhIG5ldyBNb2NrVmlldy5cbiAqXG4gKiBAcmV0dXJucyBBIG5ldyBNb2NrVmlld1xuICovXG5leHBvcnQgZnVuY3Rpb24gY3JlYXRlTW9ja1ZpZXcoKTogTW9ja1ZpZXcge1xuXHRjb25zdCBtb2NrZWQgPSBtb2NrKFZpZXcpO1xuXG5cdC8vIERlZmF1bHQgYmVoYXZpb3Jcblx0bW9ja2VkLm1vY2suaXNBLm1vY2tJbXBsZW1lbnRhdGlvbigoc0NsYXNzTmFtZTogc3RyaW5nKSA9PiB7XG5cdFx0cmV0dXJuIHNDbGFzc05hbWUgPT09IFwic2FwLnVpLmNvcmUubXZjLlZpZXdcIjtcblx0fSk7XG5cblx0cmV0dXJuIG1vY2tlZDtcbn1cbi8qKlxuICogRm9yIGNvbXBhdGliaWxpdHkgcmVhc29ucywgd2Uga2VlcCBhIG5ldyBvcGVyYXRvci4gVXNlIHRoZSBmYWN0b3J5IGZ1bmN0aW9uIGNyZWF0ZU1vY2tWaWV3IGluc3RlYWQuXG4gKi9cbmV4cG9ydCBjb25zdCBNb2NrVmlldzogbmV3ICgpID0+IE1vY2tWaWV3ID0gY3JlYXRlTW9ja1ZpZXcgYXMgYW55O1xuXG4vKipcbiAqIFV0aWxpdHkgdHlwZSB0byBtb2NrIGEgc2FwLmZlLmNvcmUuUGFnZUNvbnRyb2xsZXJcbiAqL1xuZXhwb3J0IHR5cGUgTW9ja0NvbnRyb2xsZXIgPSBXaXRoTW9jazxDb250cm9sbGVyPiAmIHtcblx0X3JvdXRpbmc6IFdpdGhNb2NrPEludGVybmFsUm91dGluZz47XG5cdF9lZGl0RmxvdzogV2l0aE1vY2s8SW50ZXJuYWxFZGl0Rmxvdz47XG5cdF9zaWRlRWZmZWN0czogV2l0aE1vY2s8U2lkZUVmZmVjdHM+O1xuXHRlZGl0RmxvdzogV2l0aE1vY2s8RWRpdEZsb3c+O1xuXHRzaGFyZTogV2l0aE1vY2s8U2hhcmU+O1xufTtcbi8qKlxuICogRmFjdG9yeSBmdW5jdGlvbiB0byBjcmVhdGUgYSBuZXcgTW9ja0NvbnRyb2xsZXIuXG4gKlxuICogQHJldHVybnMgQSBuZXcgTW9ja0NvbnRyb2xsZXJcbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGNyZWF0ZU1vY2tDb250cm9sbGVyKCk6IE1vY2tDb250cm9sbGVyIHtcblx0Y29uc3QgbW9ja2VkID0gbW9jayhDb250cm9sbGVyKSBhcyBNb2NrQ29udHJvbGxlcjtcblx0bW9ja2VkLl9yb3V0aW5nID0gbW9jayhJbnRlcm5hbFJvdXRpbmcpO1xuXHRtb2NrZWQuX2VkaXRGbG93ID0gbW9jayhJbnRlcm5hbEVkaXRGbG93KTtcblx0bW9ja2VkLl9zaWRlRWZmZWN0cyA9IG1vY2soU2lkZUVmZmVjdHMpO1xuXHRtb2NrZWQuZWRpdEZsb3cgPSBtb2NrKEVkaXRGbG93KTtcblx0bW9ja2VkLnNoYXJlID0gbW9jayhTaGFyZSk7XG5cblx0Ly8gRGVmYXVsdCBCZWhhdmlvclxuXHRtb2NrZWQubW9jay5nZXRWaWV3Lm1vY2tSZXR1cm5WYWx1ZShjcmVhdGVNb2NrVmlldygpKTtcblx0bW9ja2VkLm1vY2suaXNBLm1vY2tSZXR1cm5WYWx1ZShmYWxzZSk7XG5cblx0cmV0dXJuIG1vY2tlZDtcbn1cbi8qKlxuICogRm9yIGNvbXBhdGliaWxpdHkgcmVhc29ucywgd2Uga2VlcCBhIG5ldyBvcGVyYXRvci4gVXNlIHRoZSBmYWN0b3J5IGZ1bmN0aW9uIG1vY2tDb250cm9sbGVyIGluc3RlYWQuXG4gKi9cbmV4cG9ydCBjb25zdCBNb2NrQ29udHJvbGxlcjogbmV3ICgpID0+IE1vY2tDb250cm9sbGVyID0gY3JlYXRlTW9ja0NvbnRyb2xsZXIgYXMgYW55O1xuXG5leHBvcnQgaW50ZXJmYWNlIE1WQ01vY2sge1xuXHRtb2RlbDogTW9ja01vZGVsO1xuXHR2aWV3OiBNb2NrVmlldztcblx0Y29udHJvbGxlcjogTW9ja0NvbnRyb2xsZXI7XG59XG4vKipcbiAqIEdlbmVyYXRlIG1vZGVsLCB2aWV3IGFuZCBjb250cm9sbGVyIG1vY2tzIHRoYXQgcmVmZXIgdG8gZWFjaCBvdGhlci5cbiAqXG4gKiBAcGFyYW0gZXhpc3RpbmcgT3B0aW9uYWwgZXhpc3RpbmcgbW9ja2VkIGluc3RhbmNlcyB0aGF0IHNob3VsZCBiZSB1c2VkXG4gKiBAcmV0dXJucyBNb2NrZWQgbW9kZWwsIHZpZXcgYW5kIGNvbnRyb2xsZXIgaW5zdGFuY2VzXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBtb2NrTVZDKGV4aXN0aW5nPzogUGFydGlhbDxNVkNNb2NrPik6IE1WQ01vY2sge1xuXHRjb25zdCBtb2RlbCA9IGV4aXN0aW5nPy5tb2RlbCB8fCBjcmVhdGVNb2NrTW9kZWwoKTtcblx0Y29uc3QgdmlldyA9IGV4aXN0aW5nPy52aWV3IHx8IGNyZWF0ZU1vY2tWaWV3KCk7XG5cdGNvbnN0IGNvbnRyb2xsZXIgPSBleGlzdGluZz8uY29udHJvbGxlciB8fCBjcmVhdGVNb2NrQ29udHJvbGxlcigpO1xuXG5cdHZpZXcubW9jay5nZXRDb250cm9sbGVyLm1vY2tSZXR1cm5WYWx1ZShjb250cm9sbGVyKTtcblx0dmlldy5tb2NrLmdldE1vZGVsLm1vY2tSZXR1cm5WYWx1ZShtb2RlbCk7XG5cdGNvbnRyb2xsZXIubW9jay5nZXRWaWV3Lm1vY2tSZXR1cm5WYWx1ZSh2aWV3KTtcblxuXHRyZXR1cm4geyBtb2RlbCwgdmlldywgY29udHJvbGxlciB9O1xufVxuIl0sIm1hcHBpbmdzIjoiO0FBQUE7QUFBQTtBQUFBOzs7Ozs7RUEyQkE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtFQUNPLFNBQVNBLGlCQUFpQixDQUFDQyxZQUFrQixFQUFFQyxRQUFjLEVBQUVDLFVBQW9CLEVBQWU7SUFDeEc7SUFDQSxNQUFNQyxNQUFNLEdBQUdDLElBQUksQ0FBQ0MsTUFBTSxDQUFDQyxjQUFjLENBQUVDLE9BQU8sQ0FBU0MsZ0JBQWdCLENBQUMsSUFBSSxFQUFFLElBQUksRUFBRSxJQUFJLENBQUMsQ0FBQyxDQUFnQjtJQUM5R0wsTUFBTSxDQUFDTSxZQUFZLEdBQUcsS0FBSztJQUMzQk4sTUFBTSxDQUFDTyxZQUFZLEdBQUdWLFlBQVksSUFBSSxDQUFDLENBQUM7SUFDeENHLE1BQU0sQ0FBQ1EsU0FBUyxHQUFHVixRQUFRO0lBQzNCRSxNQUFNLENBQUNTLFdBQVcsR0FBRyxDQUFDLENBQUNWLFVBQVU7O0lBRWpDO0lBQ0FDLE1BQU0sQ0FBQ0MsSUFBSSxDQUFDUyxHQUFHLENBQUNDLGtCQUFrQixDQUFFQyxVQUFrQixJQUFLO01BQzFELE9BQU9BLFVBQVUsS0FBSywrQkFBK0I7SUFDdEQsQ0FBQyxDQUFDO0lBQ0ZaLE1BQU0sQ0FBQ0MsSUFBSSxDQUFDWSxXQUFXLENBQUNGLGtCQUFrQixDQUFFRyxHQUFXLElBQUs7TUFDM0QsT0FBT2QsTUFBTSxDQUFDTyxZQUFZLENBQUNPLEdBQUcsQ0FBQztJQUNoQyxDQUFDLENBQUM7SUFDRmQsTUFBTSxDQUFDQyxJQUFJLENBQUNjLGVBQWUsQ0FBQ0osa0JBQWtCLENBQUVLLFNBQTRCLElBQUs7TUFDaEYsSUFBSUMsS0FBSyxDQUFDQyxPQUFPLENBQUNGLFNBQVMsQ0FBQyxFQUFFO1FBQzdCLE9BQU9HLE9BQU8sQ0FBQ0MsT0FBTyxDQUFDSixTQUFTLENBQUNLLEdBQUcsQ0FBRVAsR0FBRyxJQUFLZCxNQUFNLENBQUNPLFlBQVksQ0FBQ08sR0FBRyxDQUFDLENBQUMsQ0FBQztNQUN6RTtNQUNBLE9BQU9LLE9BQU8sQ0FBQ0MsT0FBTyxDQUFDcEIsTUFBTSxDQUFDTyxZQUFZLENBQUNTLFNBQVMsQ0FBQyxDQUFDO0lBQ3ZELENBQUMsQ0FBQztJQUNGaEIsTUFBTSxDQUFDQyxJQUFJLENBQUNxQixhQUFhLENBQUNYLGtCQUFrQixDQUFFRyxHQUFXLElBQUs7TUFDN0QsT0FBT0ssT0FBTyxDQUFDQyxPQUFPLENBQUNwQixNQUFNLENBQUNPLFlBQVksQ0FBQ08sR0FBRyxDQUFDLENBQUM7SUFDakQsQ0FBQyxDQUFDO0lBQ0ZkLE1BQU0sQ0FBQ0MsSUFBSSxDQUFDc0IsV0FBVyxDQUFDWixrQkFBa0IsQ0FBQyxDQUFDRyxHQUFXLEVBQUVVLEtBQVUsS0FBSztNQUN2RXhCLE1BQU0sQ0FBQ08sWUFBWSxDQUFDTyxHQUFHLENBQUMsR0FBR1UsS0FBSztNQUNoQyxPQUFPeEIsTUFBTSxDQUFDTyxZQUFZLENBQUNPLEdBQUcsQ0FBQztJQUNoQyxDQUFDLENBQUM7SUFFRmQsTUFBTSxDQUFDQyxJQUFJLENBQUN3QixTQUFTLENBQUNkLGtCQUFrQixDQUFFZSxJQUFZLElBQUs7TUFDMUQsSUFBSUMsTUFBTSxHQUFHRCxJQUFJLEdBQUcxQixNQUFNLENBQUNPLFlBQVksQ0FBQ21CLElBQUksQ0FBQyxHQUFHMUIsTUFBTSxDQUFDTyxZQUFZO01BRW5FLElBQUksQ0FBQ29CLE1BQU0sSUFBSUQsSUFBSSxJQUFJQSxJQUFJLENBQUNFLE9BQU8sQ0FBQyxHQUFHLENBQUMsR0FBRyxDQUFDLENBQUMsRUFBRTtRQUM5QyxNQUFNQyxLQUFLLEdBQUdILElBQUksQ0FBQ0ksS0FBSyxDQUFDLEdBQUcsQ0FBQztRQUM3QkgsTUFBTSxHQUFHRSxLQUFLLENBQUNFLE1BQU0sQ0FBQyxDQUFDQyxHQUFHLEVBQUVDLElBQVMsS0FBSztVQUN6Q0QsR0FBRyxHQUFHQyxJQUFJLEdBQUdELEdBQUcsQ0FBQ0MsSUFBSSxDQUFDLEdBQUdELEdBQUc7VUFDNUIsT0FBT0EsR0FBRztRQUNYLENBQUMsRUFBRWhDLE1BQU0sQ0FBQ08sWUFBWSxDQUFDO01BQ3hCO01BRUEsT0FBT29CLE1BQU07SUFDZCxDQUFDLENBQUM7SUFFRjNCLE1BQU0sQ0FBQ0MsSUFBSSxDQUFDaUMsT0FBTyxDQUFDdkIsa0JBQWtCLENBQUMsTUFBTVgsTUFBTSxDQUFDTyxZQUFZLENBQUMsT0FBTyxDQUFDLENBQUM7SUFDMUVQLE1BQU0sQ0FBQ0MsSUFBSSxDQUFDa0MsVUFBVSxDQUFDeEIsa0JBQWtCLENBQUMsTUFBTVgsTUFBTSxDQUFDUSxTQUFTLENBQUM7SUFDakVSLE1BQU0sQ0FBQ0MsSUFBSSxDQUFDbUMsUUFBUSxDQUFDekIsa0JBQWtCLENBQUM7TUFBQTtNQUFBLDRCQUFNWCxNQUFNLENBQUNRLFNBQVMsc0RBQWhCLGtCQUFrQjRCLFFBQVEsRUFBRTtJQUFBLEVBQUM7SUFDM0VwQyxNQUFNLENBQUNDLElBQUksQ0FBQ29DLFlBQVksQ0FBQzFCLGtCQUFrQixDQUFDLENBQUMyQixJQUFhLEVBQUVDLGtCQUF3QixFQUFFQyxpQkFBMkIsS0FBSztNQUNySHhDLE1BQU0sQ0FBQ00sWUFBWSxHQUFHZ0MsSUFBSTtJQUMzQixDQUFDLENBQUM7SUFDRnRDLE1BQU0sQ0FBQ0MsSUFBSSxDQUFDd0MsV0FBVyxDQUFDOUIsa0JBQWtCLENBQUMsTUFBTVgsTUFBTSxDQUFDTSxZQUFZLENBQUM7SUFDckVOLE1BQU0sQ0FBQ0MsSUFBSSxDQUFDRixVQUFVLENBQUNZLGtCQUFrQixDQUFDLE1BQU1YLE1BQU0sQ0FBQ1MsV0FBVyxDQUFDO0lBRW5FLE9BQU9ULE1BQU07RUFDZDtFQUNBO0FBQ0E7QUFDQTtFQUZBO0VBR08sTUFBTTBDLFdBQXFGLEdBQUc5QyxpQkFBd0I7O0VBRTdIO0FBQ0E7QUFDQTtFQUZBO0VBTUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0VBQ08sU0FBUytDLGVBQWUsQ0FBQ0MsTUFBK0IsRUFBYTtJQUMzRSxNQUFNNUMsTUFBTSxHQUFHQyxJQUFJLENBQUM0QyxLQUFLLENBQWM7SUFDdkM3QyxNQUFNLENBQUM4QyxPQUFPLEdBQUdGLE1BQU0sSUFBSSxDQUFDLENBQUM7O0lBRTdCO0lBQ0E1QyxNQUFNLENBQUNDLElBQUksQ0FBQzhDLFlBQVksQ0FBQ3BDLGtCQUFrQixDQUFFcUMsSUFBSSxJQUFLaEQsTUFBTSxDQUFDOEMsT0FBTyxDQUFDRSxJQUFJLENBQUMsQ0FBQztJQUUzRSxPQUFPaEQsTUFBTTtFQUNkO0VBQ0E7QUFDQTtBQUNBO0VBRkE7RUFHTyxNQUFNaUQsU0FBNkQsR0FBR04sZUFBc0I7O0VBRW5HO0FBQ0E7QUFDQTtFQUZBO0VBWUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7RUFDTyxTQUFTTyxxQkFBcUIsQ0FBQ0MsWUFBb0IsRUFBRUMsVUFBc0IsRUFBbUI7SUFDcEcsTUFBTXBELE1BQU0sR0FBR0MsSUFBSSxDQUFDb0QsZ0JBQWdCLENBQW9CO0lBQ3hERixZQUFZLEdBQUdBLFlBQVksSUFBSSxFQUFFO0lBQ2pDbkQsTUFBTSxDQUFDc0QsY0FBYyxHQUFHSCxZQUFZLENBQUM5QixHQUFHLENBQUVrQyxXQUFXLElBQUs7TUFDekQsT0FBTzNELGlCQUFpQixDQUFDMkQsV0FBVyxFQUFFdkQsTUFBTSxDQUFDO0lBQzlDLENBQUMsQ0FBQztJQUNGQSxNQUFNLENBQUN3RCxVQUFVLEdBQUdKLFVBQVU7O0lBRTlCO0lBQ0FwRCxNQUFNLENBQUN5RCxRQUFRLEdBQUlDLEtBQWdCLElBQUs7TUFDdkMxRCxNQUFNLENBQUN3RCxVQUFVLEdBQUdFLEtBQUs7SUFDMUIsQ0FBQzs7SUFFRDtJQUNBMUQsTUFBTSxDQUFDQyxJQUFJLENBQUNTLEdBQUcsQ0FBQ0Msa0JBQWtCLENBQUVDLFVBQWtCLElBQUs7TUFDMUQsT0FBT0EsVUFBVSxLQUFLLHdDQUF3QztJQUMvRCxDQUFDLENBQUM7SUFDRlosTUFBTSxDQUFDQyxJQUFJLENBQUMwRCxlQUFlLENBQUNoRCxrQkFBa0IsQ0FBQyxNQUFNO01BQ3BELE9BQU9RLE9BQU8sQ0FBQ0MsT0FBTyxDQUFDcEIsTUFBTSxDQUFDc0QsY0FBYyxDQUFDO0lBQzlDLENBQUMsQ0FBQztJQUNGdEQsTUFBTSxDQUFDQyxJQUFJLENBQUMyRCxrQkFBa0IsQ0FBQ2pELGtCQUFrQixDQUFDLE1BQU07TUFDdkQsT0FBT1gsTUFBTSxDQUFDc0QsY0FBYztJQUM3QixDQUFDLENBQUM7SUFDRnRELE1BQU0sQ0FBQ0MsSUFBSSxDQUFDNEQscUJBQXFCLENBQUNsRCxrQkFBa0IsQ0FBQyxNQUFNO01BQzFELE9BQU9YLE1BQU0sQ0FBQ3NELGNBQWM7SUFDN0IsQ0FBQyxDQUFDO0lBQ0Z0RCxNQUFNLENBQUNDLElBQUksQ0FBQzZELFdBQVcsQ0FBQ25ELGtCQUFrQixDQUFDLE1BQU07TUFDaEQsT0FBT1gsTUFBTSxDQUFDc0QsY0FBYztJQUM3QixDQUFDLENBQUM7SUFDRnRELE1BQU0sQ0FBQ0MsSUFBSSxDQUFDbUMsUUFBUSxDQUFDekIsa0JBQWtCLENBQUMsTUFBTTtNQUM3QyxPQUFPWCxNQUFNLENBQUN3RCxVQUFVO0lBQ3pCLENBQUMsQ0FBQztJQUNGeEQsTUFBTSxDQUFDQyxJQUFJLENBQUM4RCxnQkFBZ0IsQ0FBQ0MsZUFBZSxDQUFDLE1BQU0sQ0FBQztJQUVwRCxPQUFPaEUsTUFBTTtFQUNkO0VBQ0E7QUFDQTtBQUNBO0VBRkE7RUFHTyxNQUFNaUUsZUFBa0YsR0FBR2YscUJBQTRCOztFQUU5SDtBQUNBO0FBQ0E7RUFGQTtFQVFBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7RUFDTyxTQUFTZ0IseUJBQXlCLENBQUMxQyxLQUFVLEVBQUVFLElBQWEsRUFBRTBCLFVBQXNCLEVBQXVCO0lBQ2pILE1BQU1wRCxNQUFNLEdBQUdDLElBQUksQ0FBQ2tFLG9CQUFvQixDQUF3QjtJQUNoRW5FLE1BQU0sQ0FBQ3dELFVBQVUsR0FBR0osVUFBVTtJQUM5QnBELE1BQU0sQ0FBQ29FLE1BQU0sR0FBRzVDLEtBQUs7SUFDckJ4QixNQUFNLENBQUNxRSxLQUFLLEdBQUczQyxJQUFJOztJQUVuQjtJQUNBMUIsTUFBTSxDQUFDQyxJQUFJLENBQUNTLEdBQUcsQ0FBQ0Msa0JBQWtCLENBQUVDLFVBQWtCLElBQUs7TUFDMUQsT0FBT0EsVUFBVSxLQUFLLDRDQUE0QztJQUNuRSxDQUFDLENBQUM7SUFDRlosTUFBTSxDQUFDQyxJQUFJLENBQUNtQyxRQUFRLENBQUN6QixrQkFBa0IsQ0FBQyxNQUFNO01BQzdDLE9BQU9YLE1BQU0sQ0FBQ3dELFVBQVU7SUFDekIsQ0FBQyxDQUFDO0lBQ0Z4RCxNQUFNLENBQUNDLElBQUksQ0FBQ3FFLFFBQVEsQ0FBQzNELGtCQUFrQixDQUFDLE1BQU07TUFDN0MsT0FBT1gsTUFBTSxDQUFDb0UsTUFBTTtJQUNyQixDQUFDLENBQUM7SUFDRnBFLE1BQU0sQ0FBQ0MsSUFBSSxDQUFDaUMsT0FBTyxDQUFDdkIsa0JBQWtCLENBQUMsTUFBTTtNQUM1QyxPQUFPWCxNQUFNLENBQUNxRSxLQUFLO0lBQ3BCLENBQUMsQ0FBQztJQUVGLE9BQU9yRSxNQUFNO0VBQ2Q7RUFDQTtBQUNBO0FBQ0E7RUFGQTtFQUdPLE1BQU11RSxtQkFBb0YsR0FBR0wseUJBQWdDOztFQUVwSTtBQUNBO0FBQ0E7RUFGQTtFQU1BO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtFQUNPLFNBQVNNLDBCQUEwQixDQUFDQyxTQUFnQyxFQUF3QjtJQUNsRyxNQUFNekUsTUFBTSxHQUFHQyxJQUFJLENBQUN5RSxnQkFBZ0IsQ0FBeUI7SUFDN0QxRSxNQUFNLENBQUMyRSxVQUFVLEdBQUdGLFNBQVM7O0lBRTdCO0lBQ0F6RSxNQUFNLENBQUNDLElBQUksQ0FBQ1MsR0FBRyxDQUFDQyxrQkFBa0IsQ0FBRUMsVUFBa0IsSUFBSztNQUMxRCxPQUFPQSxVQUFVLEtBQUssK0JBQStCO0lBQ3RELENBQUMsQ0FBQztJQUNGWixNQUFNLENBQUNDLElBQUksQ0FBQzJFLFdBQVcsQ0FBQ2pFLGtCQUFrQixDQUFDLE1BQU07TUFDaEQsT0FBT1gsTUFBTSxDQUFDMkUsVUFBVTtJQUN6QixDQUFDLENBQUM7SUFDRjNFLE1BQU0sQ0FBQ0MsSUFBSSxDQUFDcUUsUUFBUSxDQUFDM0Qsa0JBQWtCLENBQUMsTUFBTTtNQUM3QyxPQUFPWCxNQUFNLENBQUMyRSxVQUFVLENBQUN0RCxHQUFHLENBQUV3RCxPQUFPLElBQUtBLE9BQU8sQ0FBQ1AsUUFBUSxFQUFFLENBQUM7SUFDOUQsQ0FBQyxDQUFDO0lBRUYsT0FBT3RFLE1BQU07RUFDZDtFQUNBO0FBQ0E7QUFDQTtFQUZBO0VBR08sTUFBTThFLG9CQUFvRixHQUFHTiwwQkFBaUM7O0VBRXJJO0FBQ0E7QUFDQTtFQUZBO0VBaUJBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0VBQ08sU0FBU08sd0JBQXdCLENBQUNDLFFBQWMsRUFBRTVCLFVBQXNCLEVBQXNCO0lBQ3BHLE1BQU1wRCxNQUFNLEdBQUdDLElBQUksQ0FBQ2dGLG1CQUFtQixDQUF1QjtJQUM5RGpGLE1BQU0sQ0FBQ2tGLFNBQVMsR0FBRzlCLFVBQVU7SUFDN0JwRCxNQUFNLENBQUNtRixZQUFZLEdBQUd2RixpQkFBaUIsQ0FBQ29GLFFBQVEsSUFBSSxDQUFDLENBQUMsRUFBRWhGLE1BQU0sQ0FBQzs7SUFFL0Q7SUFDQUEsTUFBTSxDQUFDb0Ysc0JBQXNCLEdBQUcsTUFBTTtNQUNyQyxPQUFPcEYsTUFBTSxDQUFDbUYsWUFBWTtJQUMzQixDQUFDO0lBQ0RuRixNQUFNLENBQUN5RCxRQUFRLEdBQUk0QixNQUFpQixJQUFLO01BQ3hDckYsTUFBTSxDQUFDa0YsU0FBUyxHQUFHRyxNQUFNO0lBQzFCLENBQUM7O0lBRUQ7SUFDQXJGLE1BQU0sQ0FBQ0MsSUFBSSxDQUFDUyxHQUFHLENBQUNDLGtCQUFrQixDQUFFQyxVQUFrQixJQUFLO01BQzFELE9BQU9BLFVBQVUsS0FBSywyQ0FBMkM7SUFDbEUsQ0FBQyxDQUFDO0lBQ0ZaLE1BQU0sQ0FBQ0MsSUFBSSxDQUFDcUYsZUFBZSxDQUFDM0Usa0JBQWtCLENBQUMsTUFBTTtNQUNwRCxPQUFPWCxNQUFNLENBQUNtRixZQUFZO0lBQzNCLENBQUMsQ0FBQztJQUNGbkYsTUFBTSxDQUFDQyxJQUFJLENBQUNtQyxRQUFRLENBQUN6QixrQkFBa0IsQ0FBQyxNQUFNO01BQzdDLE9BQU9YLE1BQU0sQ0FBQ2tGLFNBQVM7SUFDeEIsQ0FBQyxDQUFDO0lBQ0ZsRixNQUFNLENBQUNDLElBQUksQ0FBQ3NGLE9BQU8sQ0FBQ0MsaUJBQWlCLENBQUMsSUFBSSxDQUFDO0lBRTNDLE9BQU94RixNQUFNO0VBQ2Q7RUFDQTtBQUNBO0FBQ0E7RUFGQTtFQUdPLE1BQU15RixrQkFBc0YsR0FBR1Ysd0JBQStCOztFQUVySTtBQUNBO0FBQ0E7RUFGQTtFQU1BO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtFQUNPLFNBQVNXLG1CQUFtQixDQUFDQyxTQUFlLEVBQWlCO0lBQ25FLE1BQU0zRixNQUFNLEdBQUdDLElBQUksQ0FBQzJGLGNBQWMsQ0FBa0I7SUFDcEQ1RixNQUFNLENBQUM2RixZQUFZLEdBQUdqRyxpQkFBaUIsQ0FBQytGLFNBQVMsSUFBSSxDQUFDLENBQUMsQ0FBQzs7SUFFeEQ7SUFDQTNGLE1BQU0sQ0FBQ0MsSUFBSSxDQUFDNkYsY0FBYyxDQUFDbkYsa0JBQWtCLENBQUVvRixLQUFhLElBQUs7TUFDaEUsT0FBT25HLGlCQUFpQixDQUFDO1FBQUVvRyxLQUFLLEVBQUVEO01BQU0sQ0FBQyxDQUFDO0lBQzNDLENBQUMsQ0FBQztJQUNGL0YsTUFBTSxDQUFDQyxJQUFJLENBQUN3QixTQUFTLENBQUNkLGtCQUFrQixDQUFFb0YsS0FBYSxJQUFLO01BQzNELE9BQU8vRixNQUFNLENBQUM2RixZQUFZLENBQUNoRixXQUFXLENBQUNrRixLQUFLLENBQUM7SUFDOUMsQ0FBQyxDQUFDO0lBQ0YvRixNQUFNLENBQUNDLElBQUksQ0FBQ2dHLG9CQUFvQixDQUFDdEYsa0JBQWtCLENBQUVvRixLQUFhLElBQUs7TUFDdEUsT0FBT25HLGlCQUFpQixDQUFDO1FBQUVvRyxLQUFLLEVBQUVEO01BQU0sQ0FBQyxDQUFDO0lBQzNDLENBQUMsQ0FBQztJQUNGL0YsTUFBTSxDQUFDQyxJQUFJLENBQUNpRyxXQUFXLENBQUN2RixrQkFBa0IsQ0FBRW9GLEtBQWEsSUFBSztNQUM3RCxNQUFNSSxTQUFTLEdBQUcsSUFBSVAsY0FBYyxFQUFFO01BQ3RDLE9BQU9HLEtBQUssR0FBR0ksU0FBUyxDQUFDRCxXQUFXLENBQUNILEtBQUssQ0FBQyxHQUFHQSxLQUFLO0lBQ3BELENBQUMsQ0FBQztJQUVGLE9BQU8vRixNQUFNO0VBQ2Q7RUFDQTtBQUNBO0FBQ0E7RUFGQTtFQUdPLE1BQU1vRyxhQUFxRCxHQUFHVixtQkFBMEI7O0VBRS9GO0FBQ0E7QUFDQTtFQUZBO0VBYUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7RUFDTyxTQUFTVyxlQUFlLENBQUNDLGdCQUFrQyxFQUFFQyxtQkFBd0MsRUFBYTtJQUN4SCxNQUFNdkcsTUFBTSxHQUFHQyxJQUFJLENBQUN1RyxVQUFVLENBQWM7SUFDNUN4RyxNQUFNLENBQUN5RyxlQUFlLEdBQUdILGdCQUFnQjtJQUN6Q3RHLE1BQU0sQ0FBQzBHLGtCQUFrQixHQUFHSCxtQkFBbUI7SUFDL0MsSUFBSUQsZ0JBQWdCLEVBQUU7TUFDckJBLGdCQUFnQixDQUFDN0MsUUFBUSxDQUFDekQsTUFBTSxDQUFDO0lBQ2xDO0lBQ0EsSUFBSXVHLG1CQUFtQixFQUFFO01BQ3hCQSxtQkFBbUIsQ0FBQzlDLFFBQVEsQ0FBQ3pELE1BQU0sQ0FBQztJQUNyQzs7SUFFQTtJQUNBQSxNQUFNLENBQUMyRyxZQUFZLEdBQUlDLFVBQXlCLElBQUs7TUFDcEQ1RyxNQUFNLENBQUM0RyxVQUFVLEdBQUdBLFVBQVU7SUFDL0IsQ0FBQzs7SUFFRDtJQUNBNUcsTUFBTSxDQUFDQyxJQUFJLENBQUM0RyxRQUFRLENBQUNsRyxrQkFBa0IsQ0FBQyxNQUFNO01BQzdDLE9BQU9YLE1BQU0sQ0FBQ3lHLGVBQWU7SUFDOUIsQ0FBQyxDQUFDO0lBQ0Z6RyxNQUFNLENBQUNDLElBQUksQ0FBQzZHLFdBQVcsQ0FBQ25HLGtCQUFrQixDQUFDLE1BQU07TUFDaEQsT0FBT1gsTUFBTSxDQUFDMEcsa0JBQWtCO0lBQ2pDLENBQUMsQ0FBQztJQUNGMUcsTUFBTSxDQUFDQyxJQUFJLENBQUM4RyxZQUFZLENBQUNwRyxrQkFBa0IsQ0FBQyxNQUFNO01BQ2pELE9BQU9YLE1BQU0sQ0FBQzRHLFVBQVU7SUFDekIsQ0FBQyxDQUFDO0lBRUYsT0FBTzVHLE1BQU07RUFDZDtFQUNBO0FBQ0E7QUFDQTtFQUZBO0VBR08sTUFBTWdILFNBQTBHLEdBQ3RIWCxlQUFzQjtFQUN2QjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7RUFMQTtFQU1PLFNBQVNZLDhCQUE4QixDQUFDWCxnQkFBaUMsRUFBYTtJQUM1RixPQUFPRCxlQUFlLENBQUNDLGdCQUFnQixDQUFDO0VBQ3pDO0VBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0VBTEE7RUFNTyxTQUFTWSxpQ0FBaUMsQ0FBQ1gsbUJBQXVDLEVBQWE7SUFDckcsT0FBT0YsZUFBZSxDQUFDYyxTQUFTLEVBQUVaLG1CQUFtQixDQUFDO0VBQ3ZEOztFQUVBO0FBQ0E7QUFDQTtFQUZBO0VBSUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtFQUNPLFNBQVNhLGNBQWMsR0FBYTtJQUMxQyxNQUFNcEgsTUFBTSxHQUFHQyxJQUFJLENBQUNvSCxJQUFJLENBQUM7O0lBRXpCO0lBQ0FySCxNQUFNLENBQUNDLElBQUksQ0FBQ1MsR0FBRyxDQUFDQyxrQkFBa0IsQ0FBRUMsVUFBa0IsSUFBSztNQUMxRCxPQUFPQSxVQUFVLEtBQUssc0JBQXNCO0lBQzdDLENBQUMsQ0FBQztJQUVGLE9BQU9aLE1BQU07RUFDZDtFQUNBO0FBQ0E7QUFDQTtFQUZBO0VBR08sTUFBTXNILFFBQTRCLEdBQUdGLGNBQXFCOztFQUVqRTtBQUNBO0FBQ0E7RUFGQTtFQVVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7RUFDTyxTQUFTRyxvQkFBb0IsR0FBbUI7SUFDdEQsTUFBTXZILE1BQU0sR0FBR0MsSUFBSSxDQUFDdUgsVUFBVSxDQUFtQjtJQUNqRHhILE1BQU0sQ0FBQ3lILFFBQVEsR0FBR3hILElBQUksQ0FBQ3lILGVBQWUsQ0FBQztJQUN2QzFILE1BQU0sQ0FBQzJILFNBQVMsR0FBRzFILElBQUksQ0FBQzJILGdCQUFnQixDQUFDO0lBQ3pDNUgsTUFBTSxDQUFDNkgsWUFBWSxHQUFHNUgsSUFBSSxDQUFDNkgsV0FBVyxDQUFDO0lBQ3ZDOUgsTUFBTSxDQUFDK0gsUUFBUSxHQUFHOUgsSUFBSSxDQUFDK0gsUUFBUSxDQUFDO0lBQ2hDaEksTUFBTSxDQUFDaUksS0FBSyxHQUFHaEksSUFBSSxDQUFDaUksS0FBSyxDQUFDOztJQUUxQjtJQUNBbEksTUFBTSxDQUFDQyxJQUFJLENBQUNrSSxPQUFPLENBQUNuRSxlQUFlLENBQUNvRCxjQUFjLEVBQUUsQ0FBQztJQUNyRHBILE1BQU0sQ0FBQ0MsSUFBSSxDQUFDUyxHQUFHLENBQUNzRCxlQUFlLENBQUMsS0FBSyxDQUFDO0lBRXRDLE9BQU9oRSxNQUFNO0VBQ2Q7RUFDQTtBQUNBO0FBQ0E7RUFGQTtFQUdPLE1BQU1vSSxjQUF3QyxHQUFHYixvQkFBMkI7RUFBQztFQU9wRjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7RUFDTyxTQUFTYyxPQUFPLENBQUNDLFFBQTJCLEVBQVc7SUFDN0QsTUFBTTVFLEtBQUssR0FBRyxDQUFBNEUsUUFBUSxhQUFSQSxRQUFRLHVCQUFSQSxRQUFRLENBQUU1RSxLQUFLLEtBQUkyQyxlQUFlLEVBQUU7SUFDbEQsTUFBTWtDLElBQUksR0FBRyxDQUFBRCxRQUFRLGFBQVJBLFFBQVEsdUJBQVJBLFFBQVEsQ0FBRUMsSUFBSSxLQUFJbkIsY0FBYyxFQUFFO0lBQy9DLE1BQU1vQixVQUFVLEdBQUcsQ0FBQUYsUUFBUSxhQUFSQSxRQUFRLHVCQUFSQSxRQUFRLENBQUVFLFVBQVUsS0FBSWpCLG9CQUFvQixFQUFFO0lBRWpFZ0IsSUFBSSxDQUFDdEksSUFBSSxDQUFDd0ksYUFBYSxDQUFDekUsZUFBZSxDQUFDd0UsVUFBVSxDQUFDO0lBQ25ERCxJQUFJLENBQUN0SSxJQUFJLENBQUNtQyxRQUFRLENBQUM0QixlQUFlLENBQUNOLEtBQUssQ0FBQztJQUN6QzhFLFVBQVUsQ0FBQ3ZJLElBQUksQ0FBQ2tJLE9BQU8sQ0FBQ25FLGVBQWUsQ0FBQ3VFLElBQUksQ0FBQztJQUU3QyxPQUFPO01BQUU3RSxLQUFLO01BQUU2RSxJQUFJO01BQUVDO0lBQVcsQ0FBQztFQUNuQztFQUFDO0VBQUE7QUFBQSJ9
|
|
481
|
+
//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJuYW1lcyI6WyJjcmVhdGVNb2NrQ29udGV4dCIsIm9Db250ZXh0RGF0YSIsIm9CaW5kaW5nIiwiaXNJbmFjdGl2ZSIsIm1vY2tlZCIsIm1vY2siLCJPYmplY3QiLCJnZXRQcm90b3R5cGVPZiIsIkNvbnRleHQiLCJjcmVhdGVOZXdDb250ZXh0IiwiX2lzS2VwdEFsaXZlIiwiX2NvbnRleHREYXRhIiwiX29CaW5kaW5nIiwiX2lzSW5hY3RpdmUiLCJpc0EiLCJtb2NrSW1wbGVtZW50YXRpb24iLCJzQ2xhc3NOYW1lIiwiZ2V0UHJvcGVydHkiLCJrZXkiLCJyZXF1ZXN0UHJvcGVydHkiLCJrZXlPcktleXMiLCJBcnJheSIsImlzQXJyYXkiLCJQcm9taXNlIiwicmVzb2x2ZSIsIm1hcCIsInJlcXVlc3RPYmplY3QiLCJzZXRQcm9wZXJ0eSIsInZhbHVlIiwiZ2V0T2JqZWN0IiwicGF0aCIsInJlc3VsdCIsImluZGV4T2YiLCJwYXJ0cyIsInNwbGl0IiwicmVkdWNlIiwic3VtIiwicGFydCIsImdldFBhdGgiLCJnZXRCaW5kaW5nIiwiZ2V0TW9kZWwiLCJzZXRLZWVwQWxpdmUiLCJib29sIiwiX2ZuT25CZWZvcmVEZXN0cm95IiwiX2JSZXF1ZXN0TWVzc2FnZXMiLCJpc0tlZXBBbGl2ZSIsIk1vY2tDb250ZXh0IiwiY3JlYXRlTW9ja0V2ZW50IiwicGFyYW1zIiwiRXZlbnQiLCJfcGFyYW1zIiwiZ2V0UGFyYW1ldGVyIiwibmFtZSIsIk1vY2tFdmVudCIsImNyZWF0ZU1vY2tMaXN0QmluZGluZyIsImFDb250ZXh0RGF0YSIsIm9Nb2NrTW9kZWwiLCJPRGF0YUxpc3RCaW5kaW5nIiwiX2FNb2NrQ29udGV4dHMiLCJjb250ZXh0RGF0YSIsIl9tb2NrTW9kZWwiLCJzZXRNb2RlbCIsIm1vZGVsIiwicmVxdWVzdENvbnRleHRzIiwiZ2V0Q3VycmVudENvbnRleHRzIiwiZ2V0QWxsQ3VycmVudENvbnRleHRzIiwiZ2V0Q29udGV4dHMiLCJnZXRVcGRhdGVHcm91cElkIiwibW9ja1JldHVyblZhbHVlIiwiTW9ja0xpc3RCaW5kaW5nIiwiY3JlYXRlTW9ja1Byb3BlcnR5QmluZGluZyIsIk9EYXRhUHJvcGVydHlCaW5kaW5nIiwiX3ZhbHVlIiwiX3BhdGgiLCJnZXRWYWx1ZSIsIk1vY2tQcm9wZXJ0eUJpbmRpbmciLCJjcmVhdGVNb2NrQ29tcG9zaXRlQmluZGluZyIsImFCaW5kaW5ncyIsIkNvbXBvc2l0ZUJpbmRpbmciLCJfYUJpbmRpbmdzIiwiZ2V0QmluZGluZ3MiLCJiaW5kaW5nIiwiTW9ja0NvbXBvc2l0ZUJpbmRpbmciLCJjcmVhdGVNb2NrQ29udGV4dEJpbmRpbmciLCJvQ29udGV4dCIsIk9EYXRhQ29udGV4dEJpbmRpbmciLCJtb2NrTW9kZWwiLCJvTW9ja0NvbnRleHQiLCJnZXRJbnRlcm5hbE1vY2tDb250ZXh0Iiwib01vZGVsIiwiZ2V0Qm91bmRDb250ZXh0IiwiZXhlY3V0ZSIsIm1vY2tSZXNvbHZlZFZhbHVlIiwiTW9ja0NvbnRleHRCaW5kaW5nIiwiY3JlYXRlTW9ja01ldGFNb2RlbCIsIm9NZXRhRGF0YSIsIk9EYXRhTWV0YU1vZGVsIiwib01ldGFDb250ZXh0IiwiZ2V0TWV0YUNvbnRleHQiLCJzUGF0aCIsIiRwYXRoIiwiY3JlYXRlQmluZGluZ0NvbnRleHQiLCJnZXRNZXRhUGF0aCIsIm1ldGFtb2RlbCIsIk1vY2tNZXRhTW9kZWwiLCJjcmVhdGVNb2NrTW9kZWwiLCJvTW9ja0xpc3RCaW5kaW5nIiwib01vY2tDb250ZXh0QmluZGluZyIsIk9EYXRhTW9kZWwiLCJtb2NrTGlzdEJpbmRpbmciLCJtb2NrQ29udGV4dEJpbmRpbmciLCJzZXRNZXRhTW9kZWwiLCJvTWV0YU1vZGVsIiwiYmluZExpc3QiLCJiaW5kQ29udGV4dCIsImdldE1ldGFNb2RlbCIsIk1vY2tNb2RlbCIsImNyZWF0ZU1vY2tNb2RlbEZyb21MaXN0QmluZGluZyIsImNyZWF0ZU1vY2tNb2RlbEZyb21Db250ZXh0QmluZGluZyIsInVuZGVmaW5lZCIsImNyZWF0ZU1vY2tWaWV3IiwiVmlldyIsIk1vY2tWaWV3IiwiY3JlYXRlTW9ja0NvbnRyb2xsZXIiLCJDb250cm9sbGVyIiwiX3JvdXRpbmciLCJJbnRlcm5hbFJvdXRpbmciLCJfc2lkZUVmZmVjdHMiLCJTaWRlRWZmZWN0cyIsImVkaXRGbG93IiwiRWRpdEZsb3ciLCJzaGFyZSIsIlNoYXJlIiwiZ2V0VmlldyIsIk1vY2tDb250cm9sbGVyIiwibW9ja01WQyIsImV4aXN0aW5nIiwidmlldyIsImNvbnRyb2xsZXIiLCJnZXRDb250cm9sbGVyIiwiZ2V0VGV4dCIsInRleHRJRCIsInBhcmFtZXRlcnMiLCJtZXRhUGF0aCIsInJlc291cmNlTW9kZWwiLCJSZXNvdXJjZU1vZGVsIiwiYnVuZGxlTmFtZSIsImVuaGFuY2VXaXRoIiwiYXN5bmMiLCJjcmVhdGVNb2NrUmVzb3VyY2VNb2RlbCIsImplc3QiLCJmbiJdLCJzb3VyY2VSb290IjoiLiIsInNvdXJjZXMiOlsiVUk1TW9ja0hlbHBlci50cyJdLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgdHlwZSB7IFdpdGhNb2NrIH0gZnJvbSBcIkBzYXAtdXgvamVzdC1tb2NrLXVpNS9kaXN0L2dlbmVyaWNcIjtcbmltcG9ydCB7IG1vY2sgfSBmcm9tIFwiQHNhcC11eC9qZXN0LW1vY2stdWk1L2Rpc3QvZ2VuZXJpY1wiO1xuaW1wb3J0IEVkaXRGbG93IGZyb20gXCJzYXAvZmUvY29yZS9jb250cm9sbGVyZXh0ZW5zaW9ucy9FZGl0Rmxvd1wiO1xuaW1wb3J0IEludGVybmFsUm91dGluZyBmcm9tIFwic2FwL2ZlL2NvcmUvY29udHJvbGxlcmV4dGVuc2lvbnMvSW50ZXJuYWxSb3V0aW5nXCI7XG5pbXBvcnQgU2hhcmUgZnJvbSBcInNhcC9mZS9jb3JlL2NvbnRyb2xsZXJleHRlbnNpb25zL1NoYXJlXCI7XG5pbXBvcnQgU2lkZUVmZmVjdHMgZnJvbSBcInNhcC9mZS9jb3JlL2NvbnRyb2xsZXJleHRlbnNpb25zL1NpZGVFZmZlY3RzXCI7XG5pbXBvcnQgUmVzb3VyY2VNb2RlbCBmcm9tIFwic2FwL2ZlL2NvcmUvUmVzb3VyY2VNb2RlbFwiO1xuaW1wb3J0IEV2ZW50IGZyb20gXCJzYXAvdWkvYmFzZS9FdmVudFwiO1xuaW1wb3J0IENvbnRyb2xsZXIgZnJvbSBcInNhcC91aS9jb3JlL212Yy9Db250cm9sbGVyXCI7XG5pbXBvcnQgVmlldyBmcm9tIFwic2FwL3VpL2NvcmUvbXZjL1ZpZXdcIjtcbmltcG9ydCBDb21wb3NpdGVCaW5kaW5nIGZyb20gXCJzYXAvdWkvbW9kZWwvQ29tcG9zaXRlQmluZGluZ1wiO1xuaW1wb3J0IENvbnRleHQgZnJvbSBcInNhcC91aS9tb2RlbC9vZGF0YS92NC9Db250ZXh0XCI7XG5pbXBvcnQgT0RhdGFDb250ZXh0QmluZGluZyBmcm9tIFwic2FwL3VpL21vZGVsL29kYXRhL3Y0L09EYXRhQ29udGV4dEJpbmRpbmdcIjtcbmltcG9ydCBPRGF0YUxpc3RCaW5kaW5nIGZyb20gXCJzYXAvdWkvbW9kZWwvb2RhdGEvdjQvT0RhdGFMaXN0QmluZGluZ1wiO1xuaW1wb3J0IE9EYXRhTWV0YU1vZGVsIGZyb20gXCJzYXAvdWkvbW9kZWwvb2RhdGEvdjQvT0RhdGFNZXRhTW9kZWxcIjtcbmltcG9ydCBPRGF0YU1vZGVsIGZyb20gXCJzYXAvdWkvbW9kZWwvb2RhdGEvdjQvT0RhdGFNb2RlbFwiO1xuaW1wb3J0IE9EYXRhUHJvcGVydHlCaW5kaW5nIGZyb20gXCJzYXAvdWkvbW9kZWwvb2RhdGEvdjQvT0RhdGFQcm9wZXJ0eUJpbmRpbmdcIjtcblxuLyoqXG4gKiBVdGlsaXR5IHR5cGUgdG8gbW9jayBhIHNhcC51aS5tb2RlbC5vZGF0YS52NC5Db250ZXh0XG4gKi9cbmV4cG9ydCB0eXBlIE1vY2tDb250ZXh0ID0gV2l0aE1vY2s8Q29udGV4dD4gJiB7XG5cdF9pc0tlcHRBbGl2ZTogYm9vbGVhbjtcblx0X2NvbnRleHREYXRhOiBhbnk7XG5cdF9vQmluZGluZzogYW55O1xuXHRfaXNJbmFjdGl2ZTogYm9vbGVhbjtcbn07XG4vKipcbiAqIEZhY3RvcnkgZnVuY3Rpb24gdG8gY3JlYXRlIGEgbmV3IE1vY2tDb250ZXh0LlxuICpcbiAqIEBwYXJhbSBvQ29udGV4dERhdGEgQSBtYXAgb2YgdGhlIGRpZmZlcmVudCBwcm9wZXJ0aWVzIG9mIHRoZSBjb250ZXh0LiBUaGUgdmFsdWUgZm9yIHRoZSBrZXkgJyRwYXRoJyB3aWxsIGJlIHJldHVybmVkIGJ5IHRoZSAnZ2V0UGF0aCcgbWV0aG9kXG4gKiBAcGFyYW0gb0JpbmRpbmcgVGhlIGJpbmRpbmcgb2YgdGhlIGNvbnRleHRcbiAqIEBwYXJhbSBpc0luYWN0aXZlIElzIHRoZSBjb250ZXh0IGluaWFjdGl2ZSBvciBub3RcbiAqIEByZXR1cm5zIEEgbmV3IE1vY2tDb250ZXh0XG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBjcmVhdGVNb2NrQ29udGV4dChvQ29udGV4dERhdGE/OiBhbnksIG9CaW5kaW5nPzogYW55LCBpc0luYWN0aXZlPzogYm9vbGVhbik6IE1vY2tDb250ZXh0IHtcblx0Ly8gVWdseSB3b3JrYXJvdW5kIHRvIGdldCBhIHByb3BlciBtb2NrIHBiamVjdCwgYXMgQ29udGV4dCBpc24ndCBwcm9wZXJseSBleHBvcnRlZCBmcm9tIFVJNVxuXHRjb25zdCBtb2NrZWQgPSBtb2NrKE9iamVjdC5nZXRQcm90b3R5cGVPZigoQ29udGV4dCBhcyBhbnkpLmNyZWF0ZU5ld0NvbnRleHQobnVsbCwgbnVsbCwgXCIvZVwiKSkpIGFzIE1vY2tDb250ZXh0O1xuXHRtb2NrZWQuX2lzS2VwdEFsaXZlID0gZmFsc2U7XG5cdG1vY2tlZC5fY29udGV4dERhdGEgPSBvQ29udGV4dERhdGEgfHwge307XG5cdG1vY2tlZC5fb0JpbmRpbmcgPSBvQmluZGluZztcblx0bW9ja2VkLl9pc0luYWN0aXZlID0gISFpc0luYWN0aXZlO1xuXG5cdC8vIERlZmF1bHQgYmVoYXZpb3Jcblx0bW9ja2VkLm1vY2suaXNBLm1vY2tJbXBsZW1lbnRhdGlvbigoc0NsYXNzTmFtZTogc3RyaW5nKSA9PiB7XG5cdFx0cmV0dXJuIHNDbGFzc05hbWUgPT09IFwic2FwLnVpLm1vZGVsLm9kYXRhLnY0LkNvbnRleHRcIjtcblx0fSk7XG5cdG1vY2tlZC5tb2NrLmdldFByb3BlcnR5Lm1vY2tJbXBsZW1lbnRhdGlvbigoa2V5OiBzdHJpbmcpID0+IHtcblx0XHRyZXR1cm4gbW9ja2VkLl9jb250ZXh0RGF0YVtrZXldO1xuXHR9KTtcblx0bW9ja2VkLm1vY2sucmVxdWVzdFByb3BlcnR5Lm1vY2tJbXBsZW1lbnRhdGlvbigoa2V5T3JLZXlzOiBzdHJpbmcgfCBzdHJpbmdbXSkgPT4ge1xuXHRcdGlmIChBcnJheS5pc0FycmF5KGtleU9yS2V5cykpIHtcblx0XHRcdHJldHVybiBQcm9taXNlLnJlc29sdmUoa2V5T3JLZXlzLm1hcCgoa2V5KSA9PiBtb2NrZWQuX2NvbnRleHREYXRhW2tleV0pKTtcblx0XHR9XG5cdFx0cmV0dXJuIFByb21pc2UucmVzb2x2ZShtb2NrZWQuX2NvbnRleHREYXRhW2tleU9yS2V5c10pO1xuXHR9KTtcblx0bW9ja2VkLm1vY2sucmVxdWVzdE9iamVjdC5tb2NrSW1wbGVtZW50YXRpb24oKGtleTogc3RyaW5nKSA9PiB7XG5cdFx0cmV0dXJuIFByb21pc2UucmVzb2x2ZShtb2NrZWQuX2NvbnRleHREYXRhW2tleV0pO1xuXHR9KTtcblx0bW9ja2VkLm1vY2suc2V0UHJvcGVydHkubW9ja0ltcGxlbWVudGF0aW9uKChrZXk6IHN0cmluZywgdmFsdWU6IGFueSkgPT4ge1xuXHRcdG1vY2tlZC5fY29udGV4dERhdGFba2V5XSA9IHZhbHVlO1xuXHRcdHJldHVybiBtb2NrZWQuX2NvbnRleHREYXRhW2tleV07XG5cdH0pO1xuXG5cdG1vY2tlZC5tb2NrLmdldE9iamVjdC5tb2NrSW1wbGVtZW50YXRpb24oKHBhdGg6IHN0cmluZykgPT4ge1xuXHRcdGxldCByZXN1bHQgPSBwYXRoID8gbW9ja2VkLl9jb250ZXh0RGF0YVtwYXRoXSA6IG1vY2tlZC5fY29udGV4dERhdGE7XG5cblx0XHRpZiAoIXJlc3VsdCAmJiBwYXRoICYmIHBhdGguaW5kZXhPZihcIi9cIikgPiAtMSkge1xuXHRcdFx0Y29uc3QgcGFydHMgPSBwYXRoLnNwbGl0KFwiL1wiKTtcblx0XHRcdHJlc3VsdCA9IHBhcnRzLnJlZHVjZSgoc3VtLCBwYXJ0OiBhbnkpID0+IHtcblx0XHRcdFx0c3VtID0gcGFydCA/IHN1bVtwYXJ0XSA6IHN1bTtcblx0XHRcdFx0cmV0dXJuIHN1bTtcblx0XHRcdH0sIG1vY2tlZC5fY29udGV4dERhdGEpO1xuXHRcdH1cblxuXHRcdHJldHVybiByZXN1bHQ7XG5cdH0pO1xuXG5cdG1vY2tlZC5tb2NrLmdldFBhdGgubW9ja0ltcGxlbWVudGF0aW9uKCgpID0+IG1vY2tlZC5fY29udGV4dERhdGFbXCIkcGF0aFwiXSk7XG5cdG1vY2tlZC5tb2NrLmdldEJpbmRpbmcubW9ja0ltcGxlbWVudGF0aW9uKCgpID0+IG1vY2tlZC5fb0JpbmRpbmcpO1xuXHRtb2NrZWQubW9jay5nZXRNb2RlbC5tb2NrSW1wbGVtZW50YXRpb24oKCkgPT4gbW9ja2VkLl9vQmluZGluZz8uZ2V0TW9kZWwoKSk7XG5cdG1vY2tlZC5tb2NrLnNldEtlZXBBbGl2ZS5tb2NrSW1wbGVtZW50YXRpb24oKGJvb2w6IGJvb2xlYW4sIF9mbk9uQmVmb3JlRGVzdHJveT86IGFueSwgX2JSZXF1ZXN0TWVzc2FnZXM/OiBib29sZWFuKSA9PiB7XG5cdFx0bW9ja2VkLl9pc0tlcHRBbGl2ZSA9IGJvb2w7XG5cdH0pO1xuXHRtb2NrZWQubW9jay5pc0tlZXBBbGl2ZS5tb2NrSW1wbGVtZW50YXRpb24oKCkgPT4gbW9ja2VkLl9pc0tlcHRBbGl2ZSk7XG5cdG1vY2tlZC5tb2NrLmlzSW5hY3RpdmUubW9ja0ltcGxlbWVudGF0aW9uKCgpID0+IG1vY2tlZC5faXNJbmFjdGl2ZSk7XG5cblx0cmV0dXJuIG1vY2tlZDtcbn1cbi8qKlxuICogRm9yIGNvbXBhdGliaWxpdHkgcmVhc29ucywgd2Uga2VlcCBhIG5ldyBvcGVyYXRvci4gVXNlIHRoZSBmYWN0b3J5IGZ1bmN0aW9uIGNyZWF0ZU1vY2tDb250ZXh0IGluc3RlYWQuXG4gKi9cbmV4cG9ydCBjb25zdCBNb2NrQ29udGV4dDogbmV3IChvVmFsdWVzPzogYW55LCBvQmluZGluZz86IGFueSwgaXNJbmFjdGl2ZT86IGJvb2xlYW4pID0+IE1vY2tDb250ZXh0ID0gY3JlYXRlTW9ja0NvbnRleHQgYXMgYW55O1xuXG4vKipcbiAqIFV0aWxpdHkgdHlwZSB0byBtb2NrIGEgc2FwLnVpLmJhc2UuRXZlbnRcbiAqL1xuZXhwb3J0IHR5cGUgTW9ja0V2ZW50ID0gV2l0aE1vY2s8RXZlbnQ+ICYge1xuXHRfcGFyYW1zOiB7IFtrZXk6IHN0cmluZ106IGFueSB9O1xufTtcbi8qKlxuICogRmFjdG9yeSBmdW5jdGlvbiB0byBjcmVhdGUgYSBuZXcgTW9ja0V2ZW50LlxuICpcbiAqIEBwYXJhbSBwYXJhbXMgVGhlIHBhcmFtZXRlcnMgb2YgdGhlIGV2ZW50XG4gKiBAcmV0dXJucyBBIG5ldyBNb2NrRXZlbnRcbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGNyZWF0ZU1vY2tFdmVudChwYXJhbXM/OiB7IFtrZXk6IHN0cmluZ106IGFueSB9KTogTW9ja0V2ZW50IHtcblx0Y29uc3QgbW9ja2VkID0gbW9jayhFdmVudCkgYXMgTW9ja0V2ZW50O1xuXHRtb2NrZWQuX3BhcmFtcyA9IHBhcmFtcyB8fCB7fTtcblxuXHQvLyBEZWZhdWx0IGJlaGF2aW9yXG5cdG1vY2tlZC5tb2NrLmdldFBhcmFtZXRlci5tb2NrSW1wbGVtZW50YXRpb24oKG5hbWUpID0+IG1vY2tlZC5fcGFyYW1zW25hbWVdKTtcblxuXHRyZXR1cm4gbW9ja2VkO1xufVxuLyoqXG4gKiBGb3IgY29tcGF0aWJpbGl0eSByZWFzb25zLCB3ZSBrZWVwIGEgbmV3IG9wZXJhdG9yLiBVc2UgdGhlIGZhY3RvcnkgZnVuY3Rpb24gY3JlYXRlTW9ja0V2ZW50IGluc3RlYWQuXG4gKi9cbmV4cG9ydCBjb25zdCBNb2NrRXZlbnQ6IG5ldyAocGFyYW1zPzogeyBba2V5OiBzdHJpbmddOiBhbnkgfSkgPT4gTW9ja0V2ZW50ID0gY3JlYXRlTW9ja0V2ZW50IGFzIGFueTtcblxuLyoqXG4gKiBVdGlsaXR5IHR5cGUgdG8gbW9jayBhIHNhcC51aS5tb2RlbC5vZGF0YS52NC5PRGF0YUxpc3RCaW5kaW5nXG4gKi9cbmV4cG9ydCB0eXBlIE1vY2tMaXN0QmluZGluZyA9IFdpdGhNb2NrPE9EYXRhTGlzdEJpbmRpbmc+ICYge1xuXHRfYU1vY2tDb250ZXh0czogTW9ja0NvbnRleHRbXTtcblx0X21vY2tNb2RlbD86IE1vY2tNb2RlbDtcblxuXHQvKipcblx0ICogVXRpbGl0eSBtZXRob2QgdG8gc2V0IHRoZSBtb2RlbCBvZiB0aGUgTGlzdEJpbmRpbmdcblx0ICovXG5cdHNldE1vZGVsOiAobW9kZWw6IE1vY2tNb2RlbCkgPT4gdm9pZDtcbn07XG4vKipcbiAqIEZhY3RvcnkgZnVuY3Rpb24gdG8gY3JlYXRlIGEgbmV3IE1vY2tMaXN0QmluZGluZy5cbiAqXG4gKiBAcGFyYW0gYUNvbnRleHREYXRhIEFuIGFycmF5IG9mIG9iamVjdHMgaG9sZGluZyB0aGUgZGlmZmVyZW50IHByb3BlcnRpZXMgb2YgdGhlIGNvbnRleHRzIHJlZmVyZW5jZWQgYnkgdGhlIExpc3RCaW5kaW5nXG4gKiBAcGFyYW0gb01vY2tNb2RlbCBUaGUgbW9kZWwgb2YgdGhlIExpc3RCaW5kaW5nXG4gKiBAcmV0dXJucyBBIG5ldyBNb2NrTGlzdEJpbmRpbmdcbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGNyZWF0ZU1vY2tMaXN0QmluZGluZyhhQ29udGV4dERhdGE/OiBhbnlbXSwgb01vY2tNb2RlbD86IE1vY2tNb2RlbCk6IE1vY2tMaXN0QmluZGluZyB7XG5cdGNvbnN0IG1vY2tlZCA9IG1vY2soT0RhdGFMaXN0QmluZGluZykgYXMgTW9ja0xpc3RCaW5kaW5nO1xuXHRhQ29udGV4dERhdGEgPSBhQ29udGV4dERhdGEgfHwgW107XG5cdG1vY2tlZC5fYU1vY2tDb250ZXh0cyA9IGFDb250ZXh0RGF0YS5tYXAoKGNvbnRleHREYXRhKSA9PiB7XG5cdFx0cmV0dXJuIGNyZWF0ZU1vY2tDb250ZXh0KGNvbnRleHREYXRhLCBtb2NrZWQpO1xuXHR9KTtcblx0bW9ja2VkLl9tb2NrTW9kZWwgPSBvTW9ja01vZGVsO1xuXG5cdC8vIFV0aWxpdHkgQVBJXG5cdG1vY2tlZC5zZXRNb2RlbCA9IChtb2RlbDogTW9ja01vZGVsKSA9PiB7XG5cdFx0bW9ja2VkLl9tb2NrTW9kZWwgPSBtb2RlbDtcblx0fTtcblxuXHQvLyBEZWZhdWx0IGJlaGF2aW9yXG5cdG1vY2tlZC5tb2NrLmlzQS5tb2NrSW1wbGVtZW50YXRpb24oKHNDbGFzc05hbWU6IHN0cmluZykgPT4ge1xuXHRcdHJldHVybiBzQ2xhc3NOYW1lID09PSBcInNhcC51aS5tb2RlbC5vZGF0YS52NC5PRGF0YUxpc3RCaW5kaW5nXCI7XG5cdH0pO1xuXHRtb2NrZWQubW9jay5yZXF1ZXN0Q29udGV4dHMubW9ja0ltcGxlbWVudGF0aW9uKCgpID0+IHtcblx0XHRyZXR1cm4gUHJvbWlzZS5yZXNvbHZlKG1vY2tlZC5fYU1vY2tDb250ZXh0cyk7XG5cdH0pO1xuXHRtb2NrZWQubW9jay5nZXRDdXJyZW50Q29udGV4dHMubW9ja0ltcGxlbWVudGF0aW9uKCgpID0+IHtcblx0XHRyZXR1cm4gbW9ja2VkLl9hTW9ja0NvbnRleHRzO1xuXHR9KTtcblx0bW9ja2VkLm1vY2suZ2V0QWxsQ3VycmVudENvbnRleHRzLm1vY2tJbXBsZW1lbnRhdGlvbigoKSA9PiB7XG5cdFx0cmV0dXJuIG1vY2tlZC5fYU1vY2tDb250ZXh0cztcblx0fSk7XG5cdG1vY2tlZC5tb2NrLmdldENvbnRleHRzLm1vY2tJbXBsZW1lbnRhdGlvbigoKSA9PiB7XG5cdFx0cmV0dXJuIG1vY2tlZC5fYU1vY2tDb250ZXh0cztcblx0fSk7XG5cdG1vY2tlZC5tb2NrLmdldE1vZGVsLm1vY2tJbXBsZW1lbnRhdGlvbigoKSA9PiB7XG5cdFx0cmV0dXJuIG1vY2tlZC5fbW9ja01vZGVsO1xuXHR9KTtcblx0bW9ja2VkLm1vY2suZ2V0VXBkYXRlR3JvdXBJZC5tb2NrUmV0dXJuVmFsdWUoXCJhdXRvXCIpO1xuXG5cdHJldHVybiBtb2NrZWQ7XG59XG4vKipcbiAqIEZvciBjb21wYXRpYmlsaXR5IHJlYXNvbnMsIHdlIGtlZXAgYSBuZXcgb3BlcmF0b3IuIFVzZSB0aGUgZmFjdG9yeSBmdW5jdGlvbiBjcmVhdGVNb2NrTGlzdEJpbmRpbmcgaW5zdGVhZC5cbiAqL1xuZXhwb3J0IGNvbnN0IE1vY2tMaXN0QmluZGluZzogbmV3IChhQ29udGV4dHM/OiBhbnlbXSwgbW9ja01vZGVsPzogTW9ja01vZGVsKSA9PiBNb2NrTGlzdEJpbmRpbmcgPSBjcmVhdGVNb2NrTGlzdEJpbmRpbmcgYXMgYW55O1xuXG4vKipcbiAqIFV0aWxpdHkgdHlwZSB0byBtb2NrIGEgc2FwLnVpLm1vZGVsLm9kYXRhLnY0Lk9EYXRhUHJvcGVydHlCaW5kaW5nXG4gKi9cbmV4cG9ydCB0eXBlIE1vY2tQcm9wZXJ0eUJpbmRpbmcgPSBXaXRoTW9jazxPRGF0YVByb3BlcnR5QmluZGluZz4gJiB7XG5cdF92YWx1ZT86IGFueTtcblx0X3BhdGg/OiBzdHJpbmc7XG5cdF9tb2NrTW9kZWw/OiBNb2NrTW9kZWw7XG59O1xuLyoqXG4gKiBGYWN0b3J5IGZ1bmN0aW9uIHRvIGNyZWF0ZSBhIG5ldyBNb2NrUHJvcGVydHlCaW5kaW5nLlxuICpcbiAqIEBwYXJhbSB2YWx1ZSBUaGUgdmFsdWUgcmV0dXJuZCBieSB0aGUgUHJvcGVydHlCaW5kaW5nXG4gKiBAcGFyYW0gcGF0aCBUaGUgcGF0aCBvZiB0aGUgUHJvcGVydHlCaW5kaW5nXG4gKiBAcGFyYW0gb01vY2tNb2RlbCBUaGUgbW9kZWwgb2YgdGhlIFByb3BlcnR5QmluZGluZ1xuICogQHJldHVybnMgQSBuZXcgTW9ja1Byb3BlcnR5QmluZGluZ1xuICovXG5leHBvcnQgZnVuY3Rpb24gY3JlYXRlTW9ja1Byb3BlcnR5QmluZGluZyh2YWx1ZTogYW55LCBwYXRoPzogc3RyaW5nLCBvTW9ja01vZGVsPzogTW9ja01vZGVsKTogTW9ja1Byb3BlcnR5QmluZGluZyB7XG5cdGNvbnN0IG1vY2tlZCA9IG1vY2soT0RhdGFQcm9wZXJ0eUJpbmRpbmcpIGFzIE1vY2tQcm9wZXJ0eUJpbmRpbmc7XG5cdG1vY2tlZC5fbW9ja01vZGVsID0gb01vY2tNb2RlbDtcblx0bW9ja2VkLl92YWx1ZSA9IHZhbHVlO1xuXHRtb2NrZWQuX3BhdGggPSBwYXRoO1xuXG5cdC8vIERlZmF1bHQgYmVoYXZpb3Jcblx0bW9ja2VkLm1vY2suaXNBLm1vY2tJbXBsZW1lbnRhdGlvbigoc0NsYXNzTmFtZTogc3RyaW5nKSA9PiB7XG5cdFx0cmV0dXJuIHNDbGFzc05hbWUgPT09IFwic2FwLnVpLm1vZGVsLm9kYXRhLnY0Lk9EYXRhUHJvcGVydHlCaW5kaW5nXCI7XG5cdH0pO1xuXHRtb2NrZWQubW9jay5nZXRNb2RlbC5tb2NrSW1wbGVtZW50YXRpb24oKCkgPT4ge1xuXHRcdHJldHVybiBtb2NrZWQuX21vY2tNb2RlbDtcblx0fSk7XG5cdG1vY2tlZC5tb2NrLmdldFZhbHVlLm1vY2tJbXBsZW1lbnRhdGlvbigoKSA9PiB7XG5cdFx0cmV0dXJuIG1vY2tlZC5fdmFsdWU7XG5cdH0pO1xuXHRtb2NrZWQubW9jay5nZXRQYXRoLm1vY2tJbXBsZW1lbnRhdGlvbigoKSA9PiB7XG5cdFx0cmV0dXJuIG1vY2tlZC5fcGF0aDtcblx0fSk7XG5cblx0cmV0dXJuIG1vY2tlZDtcbn1cbi8qKlxuICogRm9yIGNvbXBhdGliaWxpdHkgcmVhc29ucywgd2Uga2VlcCBhIG5ldyBvcGVyYXRvci4gVXNlIHRoZSBmYWN0b3J5IGZ1bmN0aW9uIGNyZWF0ZU1vY2tQcm9wZXJ0eUJpbmRpbmcgaW5zdGVhZC5cbiAqL1xuZXhwb3J0IGNvbnN0IE1vY2tQcm9wZXJ0eUJpbmRpbmc6IG5ldyAodmFsdWU6IGFueSwgb01vY2tNb2RlbD86IE1vY2tNb2RlbCkgPT4gTW9ja1Byb3BlcnR5QmluZGluZyA9IGNyZWF0ZU1vY2tQcm9wZXJ0eUJpbmRpbmcgYXMgYW55O1xuXG4vKipcbiAqIFV0aWxpdHkgdHlwZSB0byBtb2NrIGEgc2FwLnVpLm1vZGVsLkNvbXBvc2l0ZUJpbmRpbmdcbiAqL1xuZXhwb3J0IHR5cGUgTW9ja0NvbXBvc2l0ZUJpbmRpbmcgPSBXaXRoTW9jazxDb21wb3NpdGVCaW5kaW5nPiAmIHtcblx0X2FCaW5kaW5nczogTW9ja1Byb3BlcnR5QmluZGluZ1tdO1xufTtcbi8qKlxuICogRmFjdG9yeSBmdW5jdGlvbiB0byBjcmVhdGUgYSBuZXcgTW9ja0NvbXBvc2l0ZUJpbmRpbmcuXG4gKlxuICogQHBhcmFtIGFCaW5kaW5ncyBUaGUgYmluZGluZ3Mgb2YgdGhlIENvbXBvc2l0ZUJpbmRpbmdcbiAqIEByZXR1cm5zIEEgbmV3IE1vY2tDb21wb3NpdGVCaW5kaW5nXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBjcmVhdGVNb2NrQ29tcG9zaXRlQmluZGluZyhhQmluZGluZ3M6IE1vY2tQcm9wZXJ0eUJpbmRpbmdbXSk6IE1vY2tDb21wb3NpdGVCaW5kaW5nIHtcblx0Y29uc3QgbW9ja2VkID0gbW9jayhDb21wb3NpdGVCaW5kaW5nKSBhcyBNb2NrQ29tcG9zaXRlQmluZGluZztcblx0bW9ja2VkLl9hQmluZGluZ3MgPSBhQmluZGluZ3M7XG5cblx0Ly8gRGVmYXVsdCBiZWhhdmlvclxuXHRtb2NrZWQubW9jay5pc0EubW9ja0ltcGxlbWVudGF0aW9uKChzQ2xhc3NOYW1lOiBzdHJpbmcpID0+IHtcblx0XHRyZXR1cm4gc0NsYXNzTmFtZSA9PT0gXCJzYXAudWkubW9kZWwuQ29tcG9zaXRlQmluZGluZ1wiO1xuXHR9KTtcblx0bW9ja2VkLm1vY2suZ2V0QmluZGluZ3MubW9ja0ltcGxlbWVudGF0aW9uKCgpID0+IHtcblx0XHRyZXR1cm4gbW9ja2VkLl9hQmluZGluZ3M7XG5cdH0pO1xuXHRtb2NrZWQubW9jay5nZXRWYWx1ZS5tb2NrSW1wbGVtZW50YXRpb24oKCkgPT4ge1xuXHRcdHJldHVybiBtb2NrZWQuX2FCaW5kaW5ncy5tYXAoKGJpbmRpbmcpID0+IGJpbmRpbmcuZ2V0VmFsdWUoKSk7XG5cdH0pO1xuXG5cdHJldHVybiBtb2NrZWQ7XG59XG4vKipcbiAqIEZvciBjb21wYXRpYmlsaXR5IHJlYXNvbnMsIHdlIGtlZXAgYSBuZXcgb3BlcmF0b3IuIFVzZSB0aGUgZmFjdG9yeSBmdW5jdGlvbiBjcmVhdGVNb2NrQ29tcG9zaXRlQmluZGluZyBpbnN0ZWFkLlxuICovXG5leHBvcnQgY29uc3QgTW9ja0NvbXBvc2l0ZUJpbmRpbmc6IG5ldyAoYUJpbmRpbmdzOiBNb2NrUHJvcGVydHlCaW5kaW5nW10pID0+IE1vY2tDb21wb3NpdGVCaW5kaW5nID0gY3JlYXRlTW9ja0NvbXBvc2l0ZUJpbmRpbmcgYXMgYW55O1xuXG4vKipcbiAqIFV0aWxpdHkgdHlwZSB0byBtb2NrIGEgc2FwLnVpLm1vZGVsLm9kYXRhLnY0Lk9EYXRhQ29udGV4dEJpbmRpbmdcbiAqL1xuZXhwb3J0IHR5cGUgTW9ja0NvbnRleHRCaW5kaW5nID0gV2l0aE1vY2s8T0RhdGFDb250ZXh0QmluZGluZz4gJiB7XG5cdG9Nb2NrQ29udGV4dDogTW9ja0NvbnRleHQ7XG5cdGlzS2VwdEFsaXZlOiBib29sZWFuO1xuXHRtb2NrTW9kZWw/OiBNb2NrTW9kZWw7XG5cblx0LyoqXG5cdCAqIFV0aWxpdHkgbWV0aG9kIHRvIGFjY2VzcyB0aGUgaW50ZXJuYWwgTW9ja0NvbnRleHQgb2YgdGhlIENvbnRleHRCaW5kaW5nXG5cdCAqL1xuXHRnZXRJbnRlcm5hbE1vY2tDb250ZXh0OiAoKSA9PiBNb2NrQ29udGV4dDtcblx0LyoqXG5cdCAqIFV0aWxpdHkgbWV0aG9kIHRvIHNldCB0aGUgbW9kZWwgb2YgdGhlIENvbnRleHRCaW5kaW5nXG5cdCAqL1xuXHRzZXRNb2RlbDogKG9Nb2RlbDogTW9ja01vZGVsKSA9PiB2b2lkO1xufTtcbi8qKlxuICogRmFjdG9yeSBmdW5jdGlvbiB0byBjcmVhdGUgYSBuZXcgTW9ja0NvbnRleHRCaW5kaW5nLlxuICpcbiAqIEBwYXJhbSBvQ29udGV4dCBUaGUgY29udGV4dCBvZiB0aGUgQ29udGV4dEJpbmRpbmdcbiAqIEBwYXJhbSBvTW9ja01vZGVsIFRoZSBtb2RlbCBvZiB0aGUgQ29udGV4dEJpbmRpbmdcbiAqIEByZXR1cm5zIEEgbmV3IE1vY2tDb250ZXh0QmluZGluZ1xuICovXG5leHBvcnQgZnVuY3Rpb24gY3JlYXRlTW9ja0NvbnRleHRCaW5kaW5nKG9Db250ZXh0PzogYW55LCBvTW9ja01vZGVsPzogTW9ja01vZGVsKTogTW9ja0NvbnRleHRCaW5kaW5nIHtcblx0Y29uc3QgbW9ja2VkID0gbW9jayhPRGF0YUNvbnRleHRCaW5kaW5nKSBhcyBNb2NrQ29udGV4dEJpbmRpbmc7XG5cdG1vY2tlZC5tb2NrTW9kZWwgPSBvTW9ja01vZGVsO1xuXHRtb2NrZWQub01vY2tDb250ZXh0ID0gY3JlYXRlTW9ja0NvbnRleHQob0NvbnRleHQgfHwge30sIG1vY2tlZCk7XG5cblx0Ly8gVXRpbGl0eSBBUElcblx0bW9ja2VkLmdldEludGVybmFsTW9ja0NvbnRleHQgPSAoKSA9PiB7XG5cdFx0cmV0dXJuIG1vY2tlZC5vTW9ja0NvbnRleHQ7XG5cdH07XG5cdG1vY2tlZC5zZXRNb2RlbCA9IChvTW9kZWw6IE1vY2tNb2RlbCkgPT4ge1xuXHRcdG1vY2tlZC5tb2NrTW9kZWwgPSBvTW9kZWw7XG5cdH07XG5cblx0Ly8gRGVmYXVsdCBiZWhhdmlvclxuXHRtb2NrZWQubW9jay5pc0EubW9ja0ltcGxlbWVudGF0aW9uKChzQ2xhc3NOYW1lOiBzdHJpbmcpID0+IHtcblx0XHRyZXR1cm4gc0NsYXNzTmFtZSA9PT0gXCJzYXAudWkubW9kZWwub2RhdGEudjQuT0RhdGFDb250ZXh0QmluZGluZ1wiO1xuXHR9KTtcblx0bW9ja2VkLm1vY2suZ2V0Qm91bmRDb250ZXh0Lm1vY2tJbXBsZW1lbnRhdGlvbigoKSA9PiB7XG5cdFx0cmV0dXJuIG1vY2tlZC5vTW9ja0NvbnRleHQ7XG5cdH0pO1xuXHRtb2NrZWQubW9jay5nZXRNb2RlbC5tb2NrSW1wbGVtZW50YXRpb24oKCkgPT4ge1xuXHRcdHJldHVybiBtb2NrZWQubW9ja01vZGVsO1xuXHR9KTtcblx0bW9ja2VkLm1vY2suZXhlY3V0ZS5tb2NrUmVzb2x2ZWRWYWx1ZSh0cnVlKTtcblxuXHRyZXR1cm4gbW9ja2VkO1xufVxuLyoqXG4gKiBGb3IgY29tcGF0aWJpbGl0eSByZWFzb25zLCB3ZSBrZWVwIGEgbmV3IG9wZXJhdG9yLiBVc2UgdGhlIGZhY3RvcnkgZnVuY3Rpb24gY3JlYXRlTW9ja0NvbnRleHRCaW5kaW5nIGluc3RlYWQuXG4gKi9cbmV4cG9ydCBjb25zdCBNb2NrQ29udGV4dEJpbmRpbmc6IG5ldyAob0NvbnRleHQ/OiBhbnksIG9Nb2NrTW9kZWw/OiBNb2NrTW9kZWwpID0+IE1vY2tDb250ZXh0QmluZGluZyA9IGNyZWF0ZU1vY2tDb250ZXh0QmluZGluZyBhcyBhbnk7XG5cbi8qKlxuICogVXRpbGl0eSB0eXBlIHRvIG1vY2sgYSBzYXAudWkubW9kZWwub2RhdGEudjQuT0RhdGFNZXRhTW9kZWxcbiAqL1xuZXhwb3J0IHR5cGUgTW9ja01ldGFNb2RlbCA9IFdpdGhNb2NrPE9EYXRhTWV0YU1vZGVsPiAmIHtcblx0b01ldGFDb250ZXh0OiBNb2NrQ29udGV4dDtcbn07XG4vKipcbiAqIEZhY3RvcnkgZnVuY3Rpb24gdG8gY3JlYXRlIGEgbmV3IE1vY2tNZXRhTW9kZWwuXG4gKlxuICogQHBhcmFtIG9NZXRhRGF0YSBBIG1hcCBvZiB0aGUgZGlmZmVyZW50IG1ldGFkYXRhIHByb3BlcnRpZXMgb2YgdGhlIE1ldGFNb2RlbCAocGF0aCAtPiB2YWx1ZSkuXG4gKiBAcmV0dXJucyBBIG5ldyBNb2NrTWV0YU1vZGVsXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBjcmVhdGVNb2NrTWV0YU1vZGVsKG9NZXRhRGF0YT86IGFueSk6IE1vY2tNZXRhTW9kZWwge1xuXHRjb25zdCBtb2NrZWQgPSBtb2NrKE9EYXRhTWV0YU1vZGVsKSBhcyBNb2NrTWV0YU1vZGVsO1xuXHRtb2NrZWQub01ldGFDb250ZXh0ID0gY3JlYXRlTW9ja0NvbnRleHQob01ldGFEYXRhIHx8IHt9KTtcblxuXHQvLyBEZWZhdWx0IGJlaGF2aW9yXG5cdG1vY2tlZC5tb2NrLmdldE1ldGFDb250ZXh0Lm1vY2tJbXBsZW1lbnRhdGlvbigoc1BhdGg6IHN0cmluZykgPT4ge1xuXHRcdHJldHVybiBjcmVhdGVNb2NrQ29udGV4dCh7ICRwYXRoOiBzUGF0aCB9KTtcblx0fSk7XG5cdG1vY2tlZC5tb2NrLmdldE9iamVjdC5tb2NrSW1wbGVtZW50YXRpb24oKHNQYXRoOiBzdHJpbmcpID0+IHtcblx0XHRyZXR1cm4gbW9ja2VkLm9NZXRhQ29udGV4dC5nZXRQcm9wZXJ0eShzUGF0aCk7XG5cdH0pO1xuXHRtb2NrZWQubW9jay5jcmVhdGVCaW5kaW5nQ29udGV4dC5tb2NrSW1wbGVtZW50YXRpb24oKHNQYXRoOiBzdHJpbmcpID0+IHtcblx0XHRyZXR1cm4gY3JlYXRlTW9ja0NvbnRleHQoeyAkcGF0aDogc1BhdGggfSk7XG5cdH0pO1xuXHRtb2NrZWQubW9jay5nZXRNZXRhUGF0aC5tb2NrSW1wbGVtZW50YXRpb24oKHNQYXRoOiBzdHJpbmcpID0+IHtcblx0XHRjb25zdCBtZXRhbW9kZWwgPSBuZXcgT0RhdGFNZXRhTW9kZWwoKTtcblx0XHRyZXR1cm4gc1BhdGggPyBtZXRhbW9kZWwuZ2V0TWV0YVBhdGgoc1BhdGgpIDogc1BhdGg7XG5cdH0pO1xuXG5cdHJldHVybiBtb2NrZWQ7XG59XG4vKipcbiAqIEZvciBjb21wYXRpYmlsaXR5IHJlYXNvbnMsIHdlIGtlZXAgYSBuZXcgb3BlcmF0b3IuIFVzZSB0aGUgZmFjdG9yeSBmdW5jdGlvbiBjcmVhdGVNb2NrTWV0YU1vZGVsIGluc3RlYWQuXG4gKi9cbmV4cG9ydCBjb25zdCBNb2NrTWV0YU1vZGVsOiBuZXcgKG9NZXRhRGF0YT86IGFueSkgPT4gTW9ja01ldGFNb2RlbCA9IGNyZWF0ZU1vY2tNZXRhTW9kZWwgYXMgYW55O1xuXG4vKipcbiAqIFV0aWxpdHkgdHlwZSB0byBtb2NrIGEgc2FwLnVpLm1vZGVsLm9kYXRhLnY0Lk9EYXRhTW9kZWxcbiAqL1xuZXhwb3J0IHR5cGUgTW9ja01vZGVsID0gV2l0aE1vY2s8T0RhdGFNb2RlbD4gJiB7XG5cdG9NZXRhTW9kZWw/OiBNb2NrTWV0YU1vZGVsO1xuXHRtb2NrTGlzdEJpbmRpbmc/OiBNb2NrTGlzdEJpbmRpbmc7XG5cdG1vY2tDb250ZXh0QmluZGluZz86IE1vY2tDb250ZXh0QmluZGluZztcblxuXHQvKipcblx0ICogVXRpbGl0eSBtZXRob2QgdG8gc2V0IHRoZSBtZXRhbW9kZWwgb2YgdGhlIE1vY2tNb2RlbFxuXHQgKi9cblx0c2V0TWV0YU1vZGVsOiAob01ldGFNb2RlbDogTW9ja01ldGFNb2RlbCkgPT4gdm9pZDtcbn07XG4vKipcbiAqIEZhY3RvcnkgZnVuY3Rpb24gdG8gY3JlYXRlIGEgbmV3IE1vY2tNb2RlbC5cbiAqXG4gKiBAcGFyYW0gb01vY2tMaXN0QmluZGluZyBBIGxpc3QgYmluZGluZyB0aGF0IHdpbGwgYmUgcmV0dXJuZWQgd2hlbiBjYWxsaW5nIGJpbmRMaXN0LlxuICogQHBhcmFtIG9Nb2NrQ29udGV4dEJpbmRpbmcgQSBjb250ZXh0IGJpbmRpbmcgdGhhdCB3aWxsIGJlIHJldHVybmVkIHdoZW4gY2FsbGluZyBiaW5kQ29udGV4dC5cbiAqIEByZXR1cm5zIEEgbmV3IE1vY2tNb2RlbFxuICovXG5leHBvcnQgZnVuY3Rpb24gY3JlYXRlTW9ja01vZGVsKG9Nb2NrTGlzdEJpbmRpbmc/OiBNb2NrTGlzdEJpbmRpbmcsIG9Nb2NrQ29udGV4dEJpbmRpbmc/OiBNb2NrQ29udGV4dEJpbmRpbmcpOiBNb2NrTW9kZWwge1xuXHRjb25zdCBtb2NrZWQgPSBtb2NrKE9EYXRhTW9kZWwpIGFzIE1vY2tNb2RlbDtcblx0bW9ja2VkLm1vY2tMaXN0QmluZGluZyA9IG9Nb2NrTGlzdEJpbmRpbmc7XG5cdG1vY2tlZC5tb2NrQ29udGV4dEJpbmRpbmcgPSBvTW9ja0NvbnRleHRCaW5kaW5nO1xuXHRpZiAob01vY2tMaXN0QmluZGluZykge1xuXHRcdG9Nb2NrTGlzdEJpbmRpbmcuc2V0TW9kZWwobW9ja2VkKTtcblx0fVxuXHRpZiAob01vY2tDb250ZXh0QmluZGluZykge1xuXHRcdG9Nb2NrQ29udGV4dEJpbmRpbmcuc2V0TW9kZWwobW9ja2VkKTtcblx0fVxuXG5cdC8vIFV0aWxpdHkgQVBJXG5cdG1vY2tlZC5zZXRNZXRhTW9kZWwgPSAob01ldGFNb2RlbDogTW9ja01ldGFNb2RlbCkgPT4ge1xuXHRcdG1vY2tlZC5vTWV0YU1vZGVsID0gb01ldGFNb2RlbDtcblx0fTtcblxuXHQvLyBEZWZhdWx0IGJlaGF2aW9yXG5cdG1vY2tlZC5tb2NrLmJpbmRMaXN0Lm1vY2tJbXBsZW1lbnRhdGlvbigoKSA9PiB7XG5cdFx0cmV0dXJuIG1vY2tlZC5tb2NrTGlzdEJpbmRpbmc7XG5cdH0pO1xuXHRtb2NrZWQubW9jay5iaW5kQ29udGV4dC5tb2NrSW1wbGVtZW50YXRpb24oKCkgPT4ge1xuXHRcdHJldHVybiBtb2NrZWQubW9ja0NvbnRleHRCaW5kaW5nO1xuXHR9KTtcblx0bW9ja2VkLm1vY2suZ2V0TWV0YU1vZGVsLm1vY2tJbXBsZW1lbnRhdGlvbigoKSA9PiB7XG5cdFx0cmV0dXJuIG1vY2tlZC5vTWV0YU1vZGVsO1xuXHR9KTtcblxuXHRyZXR1cm4gbW9ja2VkO1xufVxuLyoqXG4gKiBGb3IgY29tcGF0aWJpbGl0eSByZWFzb25zLCB3ZSBrZWVwIGEgbmV3IG9wZXJhdG9yLiBVc2UgdGhlIGZhY3RvcnkgZnVuY3Rpb24gY3JlYXRlTW9ja01vZGVsIGluc3RlYWQuXG4gKi9cbmV4cG9ydCBjb25zdCBNb2NrTW9kZWw6IG5ldyAob01vY2tMaXN0QmluZGluZz86IE1vY2tMaXN0QmluZGluZywgb01vY2tDb250ZXh0QmluZGluZz86IE1vY2tDb250ZXh0QmluZGluZykgPT4gTW9ja01vZGVsID1cblx0Y3JlYXRlTW9ja01vZGVsIGFzIGFueTtcbi8qKlxuICogRmFjdG9yeSBmdW5jdGlvbiB0byBjcmVhdGUgYSBuZXcgTW9ja01vZGVsIHVzZWQgd2l0aCBhIGxpc3RCaW5kaW5nLlxuICpcbiAqIEBwYXJhbSBvTW9ja0xpc3RCaW5kaW5nIEEgbGlzdCBiaW5kaW5nIHRoYXQgd2lsbCBiZSByZXR1cm5lZCB3aGVuIGNhbGxpbmcgYmluZExpc3QuXG4gKiBAcmV0dXJucyBBIG5ldyBNb2NrTW9kZWxcbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGNyZWF0ZU1vY2tNb2RlbEZyb21MaXN0QmluZGluZyhvTW9ja0xpc3RCaW5kaW5nOiBNb2NrTGlzdEJpbmRpbmcpOiBNb2NrTW9kZWwge1xuXHRyZXR1cm4gY3JlYXRlTW9ja01vZGVsKG9Nb2NrTGlzdEJpbmRpbmcpO1xufVxuLyoqXG4gKiAgRmFjdG9yeSBmdW5jdGlvbiB0byBjcmVhdGUgYSBuZXcgTW9ja01vZGVsIHVzZWQgd2l0aCBhIGNvbnRleHRCaW5kaW5nLlxuICpcbiAqIEBwYXJhbSBvTW9ja0NvbnRleHRCaW5kaW5nIEEgY29udGV4dCBiaW5kaW5nIHRoYXQgd2lsbCBiZSByZXR1cm5lZCB3aGVuIGNhbGxpbmcgYmluZENvbnRleHQuXG4gKiBAcmV0dXJucyBBIG5ldyBNb2NrTW9kZWxcbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGNyZWF0ZU1vY2tNb2RlbEZyb21Db250ZXh0QmluZGluZyhvTW9ja0NvbnRleHRCaW5kaW5nOiBNb2NrQ29udGV4dEJpbmRpbmcpOiBNb2NrTW9kZWwge1xuXHRyZXR1cm4gY3JlYXRlTW9ja01vZGVsKHVuZGVmaW5lZCwgb01vY2tDb250ZXh0QmluZGluZyk7XG59XG5cbi8qKlxuICogVXRpbGl0eSB0eXBlIHRvIG1vY2sgYSBzYXAudWkuY29yZS5tdmMuVmlld1xuICovXG5leHBvcnQgdHlwZSBNb2NrVmlldyA9IFdpdGhNb2NrPFZpZXc+O1xuLyoqXG4gKiBGYWN0b3J5IGZ1bmN0aW9uIHRvIGNyZWF0ZSBhIG5ldyBNb2NrVmlldy5cbiAqXG4gKiBAcmV0dXJucyBBIG5ldyBNb2NrVmlld1xuICovXG5leHBvcnQgZnVuY3Rpb24gY3JlYXRlTW9ja1ZpZXcoKTogTW9ja1ZpZXcge1xuXHRjb25zdCBtb2NrZWQgPSBtb2NrKFZpZXcpO1xuXG5cdC8vIERlZmF1bHQgYmVoYXZpb3Jcblx0bW9ja2VkLm1vY2suaXNBLm1vY2tJbXBsZW1lbnRhdGlvbigoc0NsYXNzTmFtZTogc3RyaW5nKSA9PiB7XG5cdFx0cmV0dXJuIHNDbGFzc05hbWUgPT09IFwic2FwLnVpLmNvcmUubXZjLlZpZXdcIjtcblx0fSk7XG5cblx0cmV0dXJuIG1vY2tlZDtcbn1cbi8qKlxuICogRm9yIGNvbXBhdGliaWxpdHkgcmVhc29ucywgd2Uga2VlcCBhIG5ldyBvcGVyYXRvci4gVXNlIHRoZSBmYWN0b3J5IGZ1bmN0aW9uIGNyZWF0ZU1vY2tWaWV3IGluc3RlYWQuXG4gKi9cbmV4cG9ydCBjb25zdCBNb2NrVmlldzogbmV3ICgpID0+IE1vY2tWaWV3ID0gY3JlYXRlTW9ja1ZpZXcgYXMgYW55O1xuXG4vKipcbiAqIFV0aWxpdHkgdHlwZSB0byBtb2NrIGEgc2FwLmZlLmNvcmUuUGFnZUNvbnRyb2xsZXJcbiAqL1xuZXhwb3J0IHR5cGUgTW9ja0NvbnRyb2xsZXIgPSBXaXRoTW9jazxDb250cm9sbGVyPiAmIHtcblx0X3JvdXRpbmc6IFdpdGhNb2NrPEludGVybmFsUm91dGluZz47XG5cdF9zaWRlRWZmZWN0czogV2l0aE1vY2s8U2lkZUVmZmVjdHM+O1xuXHRlZGl0RmxvdzogV2l0aE1vY2s8RWRpdEZsb3c+O1xuXHRzaGFyZTogV2l0aE1vY2s8U2hhcmU+O1xufTtcbi8qKlxuICogRmFjdG9yeSBmdW5jdGlvbiB0byBjcmVhdGUgYSBuZXcgTW9ja0NvbnRyb2xsZXIuXG4gKlxuICogQHJldHVybnMgQSBuZXcgTW9ja0NvbnRyb2xsZXJcbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGNyZWF0ZU1vY2tDb250cm9sbGVyKCk6IE1vY2tDb250cm9sbGVyIHtcblx0Y29uc3QgbW9ja2VkID0gbW9jayhDb250cm9sbGVyKSBhcyBNb2NrQ29udHJvbGxlcjtcblx0bW9ja2VkLl9yb3V0aW5nID0gbW9jayhJbnRlcm5hbFJvdXRpbmcpO1xuXHRtb2NrZWQuX3NpZGVFZmZlY3RzID0gbW9jayhTaWRlRWZmZWN0cyk7XG5cdG1vY2tlZC5lZGl0RmxvdyA9IG1vY2soRWRpdEZsb3cpO1xuXHRtb2NrZWQuc2hhcmUgPSBtb2NrKFNoYXJlKTtcblxuXHQvLyBEZWZhdWx0IEJlaGF2aW9yXG5cdG1vY2tlZC5tb2NrLmdldFZpZXcubW9ja1JldHVyblZhbHVlKGNyZWF0ZU1vY2tWaWV3KCkpO1xuXHRtb2NrZWQubW9jay5pc0EubW9ja1JldHVyblZhbHVlKGZhbHNlKTtcblxuXHRyZXR1cm4gbW9ja2VkO1xufVxuLyoqXG4gKiBGb3IgY29tcGF0aWJpbGl0eSByZWFzb25zLCB3ZSBrZWVwIGEgbmV3IG9wZXJhdG9yLiBVc2UgdGhlIGZhY3RvcnkgZnVuY3Rpb24gbW9ja0NvbnRyb2xsZXIgaW5zdGVhZC5cbiAqL1xuZXhwb3J0IGNvbnN0IE1vY2tDb250cm9sbGVyOiBuZXcgKCkgPT4gTW9ja0NvbnRyb2xsZXIgPSBjcmVhdGVNb2NrQ29udHJvbGxlciBhcyBhbnk7XG5cbmV4cG9ydCBpbnRlcmZhY2UgTVZDTW9jayB7XG5cdG1vZGVsOiBNb2NrTW9kZWw7XG5cdHZpZXc6IE1vY2tWaWV3O1xuXHRjb250cm9sbGVyOiBNb2NrQ29udHJvbGxlcjtcbn1cbi8qKlxuICogR2VuZXJhdGUgbW9kZWwsIHZpZXcgYW5kIGNvbnRyb2xsZXIgbW9ja3MgdGhhdCByZWZlciB0byBlYWNoIG90aGVyLlxuICpcbiAqIEBwYXJhbSBleGlzdGluZyBPcHRpb25hbCBleGlzdGluZyBtb2NrZWQgaW5zdGFuY2VzIHRoYXQgc2hvdWxkIGJlIHVzZWRcbiAqIEByZXR1cm5zIE1vY2tlZCBtb2RlbCwgdmlldyBhbmQgY29udHJvbGxlciBpbnN0YW5jZXNcbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIG1vY2tNVkMoZXhpc3Rpbmc/OiBQYXJ0aWFsPE1WQ01vY2s+KTogTVZDTW9jayB7XG5cdGNvbnN0IG1vZGVsID0gZXhpc3Rpbmc/Lm1vZGVsIHx8IGNyZWF0ZU1vY2tNb2RlbCgpO1xuXHRjb25zdCB2aWV3ID0gZXhpc3Rpbmc/LnZpZXcgfHwgY3JlYXRlTW9ja1ZpZXcoKTtcblx0Y29uc3QgY29udHJvbGxlciA9IGV4aXN0aW5nPy5jb250cm9sbGVyIHx8IGNyZWF0ZU1vY2tDb250cm9sbGVyKCk7XG5cblx0dmlldy5tb2NrLmdldENvbnRyb2xsZXIubW9ja1JldHVyblZhbHVlKGNvbnRyb2xsZXIpO1xuXHR2aWV3Lm1vY2suZ2V0TW9kZWwubW9ja1JldHVyblZhbHVlKG1vZGVsKTtcblx0Y29udHJvbGxlci5tb2NrLmdldFZpZXcubW9ja1JldHVyblZhbHVlKHZpZXcpO1xuXG5cdHJldHVybiB7IG1vZGVsLCB2aWV3LCBjb250cm9sbGVyIH07XG59XG5cbi8qKlxuICogVG8gYmUgdXNlZCB0byBsb2FkIG1lc3NhZ2VzIGJ1bmRsZXMgZm9yIHRlc3RzIHdpdGhvdXQgYXBwL3BhZ2UgY29tcG9uZW50LlxuICpcbiAqIEBwYXJhbSB0ZXh0SUQgSUQgb2YgdGhlIFRleHRcbiAqIEBwYXJhbSBwYXJhbWV0ZXJzIEFycmF5IG9mIHBhcmFtZXRlcnMgdGhhdCBhcmUgdXNlZCB0byBjcmVhdGUgdGhlIHRleHRcbiAqIEBwYXJhbSBtZXRhUGF0aCBFbnRpdHkgc2V0IG5hbWUgb3IgYWN0aW9uIG5hbWUgdG8gb3ZlcmxvYWQgYSB0ZXh0XG4gKiBAcmV0dXJucyBEZXRlcm1pbmVkIHRleHRcbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGdldFRleHQodGV4dElEOiBzdHJpbmcsIHBhcmFtZXRlcnM/OiBhbnlbXSwgbWV0YVBhdGg/OiBzdHJpbmcpIHtcblx0Y29uc3QgcmVzb3VyY2VNb2RlbCA9IG5ldyBSZXNvdXJjZU1vZGVsKHtcblx0XHRidW5kbGVOYW1lOiBcInNhcC5mZS5jb3JlLm1lc3NhZ2VidW5kbGVcIixcblx0XHRlbmhhbmNlV2l0aDogW3sgYnVuZGxlTmFtZTogXCJzYXAuZmUubWFjcm9zLm1lc3NhZ2VidW5kbGVcIiB9LCB7IGJ1bmRsZU5hbWU6IFwic2FwLmZlLnRlbXBsYXRlcy5tZXNzYWdlYnVuZGxlXCIgfV0sXG5cdFx0YXN5bmM6IGZhbHNlXG5cdH0pO1xuXHRyZXR1cm4gcmVzb3VyY2VNb2RlbC5nZXRUZXh0KHRleHRJRCwgcGFyYW1ldGVycywgbWV0YVBhdGgpO1xufVxuXG4vKipcbiAqIFV0aWxpdHkgdHlwZSB0byBtb2NrIFJlc291cmNlTW9kZWxcbiAqL1xuZXhwb3J0IHR5cGUgTW9ja1Jlc291cmNlTW9kZWwgPSBXaXRoTW9jazxSZXNvdXJjZU1vZGVsPjtcbi8qKlxuICogRmFjdG9yeSBmdW5jdGlvbiB0byBjcmVhdGUgYSBuZXcgTW9ja1ZpZXcuXG4gKlxuICogQHJldHVybnMgQSBuZXcgTW9ja1ZpZXdcbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGNyZWF0ZU1vY2tSZXNvdXJjZU1vZGVsKCk6IE1vY2tSZXNvdXJjZU1vZGVsIHtcblx0Y29uc3QgbW9ja2VkID0gbW9jayhSZXNvdXJjZU1vZGVsKTtcblx0bW9ja2VkLmdldFRleHQgPSBqZXN0LmZuKCkubW9ja0ltcGxlbWVudGF0aW9uKGdldFRleHQpO1xuXHRyZXR1cm4gbW9ja2VkO1xufVxuIl0sIm1hcHBpbmdzIjoiO0FBQUE7QUFBQTtBQUFBOzs7Ozs7RUEyQkE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtFQUNPLFNBQVNBLGlCQUFpQixDQUFDQyxZQUFrQixFQUFFQyxRQUFjLEVBQUVDLFVBQW9CLEVBQWU7SUFDeEc7SUFDQSxNQUFNQyxNQUFNLEdBQUdDLElBQUksQ0FBQ0MsTUFBTSxDQUFDQyxjQUFjLENBQUVDLE9BQU8sQ0FBU0MsZ0JBQWdCLENBQUMsSUFBSSxFQUFFLElBQUksRUFBRSxJQUFJLENBQUMsQ0FBQyxDQUFnQjtJQUM5R0wsTUFBTSxDQUFDTSxZQUFZLEdBQUcsS0FBSztJQUMzQk4sTUFBTSxDQUFDTyxZQUFZLEdBQUdWLFlBQVksSUFBSSxDQUFDLENBQUM7SUFDeENHLE1BQU0sQ0FBQ1EsU0FBUyxHQUFHVixRQUFRO0lBQzNCRSxNQUFNLENBQUNTLFdBQVcsR0FBRyxDQUFDLENBQUNWLFVBQVU7O0lBRWpDO0lBQ0FDLE1BQU0sQ0FBQ0MsSUFB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
|
|
@@ -1,10 +1,10 @@
|
|
|
1
1
|
import type { WithMock } from "@sap-ux/jest-mock-ui5/dist/generic";
|
|
2
2
|
import { mock } from "@sap-ux/jest-mock-ui5/dist/generic";
|
|
3
3
|
import EditFlow from "sap/fe/core/controllerextensions/EditFlow";
|
|
4
|
-
import InternalEditFlow from "sap/fe/core/controllerextensions/InternalEditFlow";
|
|
5
4
|
import InternalRouting from "sap/fe/core/controllerextensions/InternalRouting";
|
|
6
5
|
import Share from "sap/fe/core/controllerextensions/Share";
|
|
7
6
|
import SideEffects from "sap/fe/core/controllerextensions/SideEffects";
|
|
7
|
+
import ResourceModel from "sap/fe/core/ResourceModel";
|
|
8
8
|
import Event from "sap/ui/base/Event";
|
|
9
9
|
import Controller from "sap/ui/core/mvc/Controller";
|
|
10
10
|
import View from "sap/ui/core/mvc/View";
|
|
@@ -451,7 +451,6 @@ export const MockView: new () => MockView = createMockView as any;
|
|
|
451
451
|
*/
|
|
452
452
|
export type MockController = WithMock<Controller> & {
|
|
453
453
|
_routing: WithMock<InternalRouting>;
|
|
454
|
-
_editFlow: WithMock<InternalEditFlow>;
|
|
455
454
|
_sideEffects: WithMock<SideEffects>;
|
|
456
455
|
editFlow: WithMock<EditFlow>;
|
|
457
456
|
share: WithMock<Share>;
|
|
@@ -464,7 +463,6 @@ export type MockController = WithMock<Controller> & {
|
|
|
464
463
|
export function createMockController(): MockController {
|
|
465
464
|
const mocked = mock(Controller) as MockController;
|
|
466
465
|
mocked._routing = mock(InternalRouting);
|
|
467
|
-
mocked._editFlow = mock(InternalEditFlow);
|
|
468
466
|
mocked._sideEffects = mock(SideEffects);
|
|
469
467
|
mocked.editFlow = mock(EditFlow);
|
|
470
468
|
mocked.share = mock(Share);
|
|
@@ -502,3 +500,35 @@ export function mockMVC(existing?: Partial<MVCMock>): MVCMock {
|
|
|
502
500
|
|
|
503
501
|
return { model, view, controller };
|
|
504
502
|
}
|
|
503
|
+
|
|
504
|
+
/**
|
|
505
|
+
* To be used to load messages bundles for tests without app/page component.
|
|
506
|
+
*
|
|
507
|
+
* @param textID ID of the Text
|
|
508
|
+
* @param parameters Array of parameters that are used to create the text
|
|
509
|
+
* @param metaPath Entity set name or action name to overload a text
|
|
510
|
+
* @returns Determined text
|
|
511
|
+
*/
|
|
512
|
+
export function getText(textID: string, parameters?: any[], metaPath?: string) {
|
|
513
|
+
const resourceModel = new ResourceModel({
|
|
514
|
+
bundleName: "sap.fe.core.messagebundle",
|
|
515
|
+
enhanceWith: [{ bundleName: "sap.fe.macros.messagebundle" }, { bundleName: "sap.fe.templates.messagebundle" }],
|
|
516
|
+
async: false
|
|
517
|
+
});
|
|
518
|
+
return resourceModel.getText(textID, parameters, metaPath);
|
|
519
|
+
}
|
|
520
|
+
|
|
521
|
+
/**
|
|
522
|
+
* Utility type to mock ResourceModel
|
|
523
|
+
*/
|
|
524
|
+
export type MockResourceModel = WithMock<ResourceModel>;
|
|
525
|
+
/**
|
|
526
|
+
* Factory function to create a new MockView.
|
|
527
|
+
*
|
|
528
|
+
* @returns A new MockView
|
|
529
|
+
*/
|
|
530
|
+
export function createMockResourceModel(): MockResourceModel {
|
|
531
|
+
const mocked = mock(ResourceModel);
|
|
532
|
+
mocked.getText = jest.fn().mockImplementation(getText);
|
|
533
|
+
return mocked;
|
|
534
|
+
}
|
|
@@ -44,7 +44,7 @@ sap.ui.define(
|
|
|
44
44
|
|
|
45
45
|
Actions.prototype.iSelectItems = function (innerData, bClearSelection) {
|
|
46
46
|
if (typeof bClearSelection === "boolean") {
|
|
47
|
-
bClearSelection = bClearSelection;
|
|
47
|
+
bClearSelection = !!bClearSelection;
|
|
48
48
|
} else {
|
|
49
49
|
bClearSelection = true;
|
|
50
50
|
}
|