@sapui5/sap.fe.test 1.105.0 → 1.106.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/package.json +1 -1
- package/src/sap/fe/test/.library +1 -1
- package/src/sap/fe/test/FeMocks.js +2 -1
- package/src/sap/fe/test/FeMocks.ts +2 -0
- package/src/sap/fe/test/JestTemplatingHelper.js +31 -10
- package/src/sap/fe/test/JestTemplatingHelper.ts +28 -10
- package/src/sap/fe/test/JourneyRunner.js +2 -1
- package/src/sap/fe/test/ObjectPage.js +64 -11
- package/src/sap/fe/test/Shell.js +1 -0
- package/src/sap/fe/test/api/FormAPI.js +11 -5
- package/src/sap/fe/test/api/HeaderAPI.js +22 -0
- package/src/sap/fe/test/api/HeaderActions.js +2 -1
- package/src/sap/fe/test/api/HeaderAssertions.js +3 -2
- package/src/sap/fe/test/builder/MacroFieldBuilder.js +1 -1
- package/src/sap/fe/test/internal/FEArrangements.js +1 -0
- package/src/sap/fe/test/library.js +2 -2
- package/src/sap/fe/test/library.ts +0 -4
package/package.json
CHANGED
package/src/sap/fe/test/.library
CHANGED
|
@@ -16,6 +16,7 @@ sap.ui.define(["@sap-ux/jest-mock-ui5/dist/generic", "sap/fe/core/controllerexte
|
|
|
16
16
|
_isFilterBarHidden: jest.fn(),
|
|
17
17
|
_isMultiMode: jest.fn(),
|
|
18
18
|
_getMultiModeControl: jest.fn(),
|
|
19
|
+
_getFilterBarVariantControl: jest.fn(),
|
|
19
20
|
_hasMultiVisualizations: jest.fn(),
|
|
20
21
|
_shouldAutoTriggerSearch: jest.fn(),
|
|
21
22
|
_getTable: jest.fn(),
|
|
@@ -61,4 +62,4 @@ sap.ui.define(["@sap-ux/jest-mock-ui5/dist/generic", "sap/fe/core/controllerexte
|
|
|
61
62
|
_exports.mockFilterBar = mockFilterBar;
|
|
62
63
|
return _exports;
|
|
63
64
|
}, false);
|
|
64
|
-
//# sourceMappingURL=data:application/json;charset=utf-8;base64,
|
|
65
|
+
//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJuYW1lcyI6WyJtb2NrTGlzdFJlcG9ydENvbnRyb2xsZXIiLCJsaXN0UmVwb3J0IiwiX2dldEZpbHRlckJhckNvbnRyb2wiLCJqZXN0IiwiZm4iLCJfZ2V0Q29udHJvbHMiLCJfaXNGaWx0ZXJCYXJIaWRkZW4iLCJfaXNNdWx0aU1vZGUiLCJfZ2V0TXVsdGlNb2RlQ29udHJvbCIsIl9nZXRGaWx0ZXJCYXJWYXJpYW50Q29udHJvbCIsIl9oYXNNdWx0aVZpc3VhbGl6YXRpb25zIiwiX3Nob3VsZEF1dG9UcmlnZ2VyU2VhcmNoIiwiX2dldFRhYmxlIiwiZ2V0RXh0ZW5zaW9uQVBJIiwiX2VkaXRGbG93IiwibW9jayIsIkludGVybmFsRWRpdEZsb3ciLCJPYmplY3QiLCJhc3NpZ24iLCJQYWdlQ29udHJvbGxlciIsIm1vY2tPYmplY3RQYWdlQ29udHJvbGxlciIsIm9iamVjdFBhZ2UiLCJnZXRTdGlja3lFZGl0TW9kZSIsIm1vY2tDb250ZXh0Rm9yRXh0ZW5zaW9uIiwiZXh0ZW5zaW9uIiwiY29udHJvbGxlciIsImJhc2UiLCJ2aWV3IiwiZ2V0VmlldyIsIm1vY2tlZEJhc2UiLCJtb2NrRmlsdGVyQmFyIiwiZmlsdGVyQmFyIiwiRmlsdGVyQmFyIiwid2FpdEZvckluaXRpYWxpemF0aW9uIl0sInNvdXJjZVJvb3QiOiIuIiwic291cmNlcyI6WyJGZU1vY2tzLnRzIl0sInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB0eXBlIHsgTW9ja2VkSW5zdGFuY2UsIFVJNUluc3RhbmNlVHlwZSwgV2l0aE1vY2sgfSBmcm9tIFwiQHNhcC11eC9qZXN0LW1vY2stdWk1L2Rpc3QvZ2VuZXJpY1wiO1xuaW1wb3J0IHsgbW9jayB9IGZyb20gXCJAc2FwLXV4L2plc3QtbW9jay11aTUvZGlzdC9nZW5lcmljXCI7XG5pbXBvcnQgSW50ZXJuYWxFZGl0RmxvdyBmcm9tIFwic2FwL2ZlL2NvcmUvY29udHJvbGxlcmV4dGVuc2lvbnMvSW50ZXJuYWxFZGl0Rmxvd1wiO1xuaW1wb3J0IFBhZ2VDb250cm9sbGVyIGZyb20gXCJzYXAvZmUvY29yZS9QYWdlQ29udHJvbGxlclwiO1xuaW1wb3J0IHR5cGUgQ29udHJvbGxlciBmcm9tIFwic2FwL3VpL2NvcmUvbXZjL0NvbnRyb2xsZXJcIjtcbmltcG9ydCBGaWx0ZXJCYXIgZnJvbSBcInNhcC91aS9tZGMvRmlsdGVyQmFyXCI7XG5cbmludGVyZmFjZSBDb21tb25Db250cm9sbGVyVHlwZSB7XG5cdGdldEV4dGVuc2lvbkFQSTogYW55O1xuXHRfZWRpdEZsb3c6IFdpdGhNb2NrPEludGVybmFsRWRpdEZsb3c+O1xufVxuXG5leHBvcnQgaW50ZXJmYWNlIExpc3RSZXBvcnRDb250cm9sbGVyVHlwZSB7XG5cdF9nZXRGaWx0ZXJCYXJDb250cm9sOiBhbnk7XG5cdF9nZXRDb250cm9sczogYW55O1xuXHRfaXNGaWx0ZXJCYXJIaWRkZW46IGFueTtcblx0X2lzTXVsdGlNb2RlOiBhbnk7XG5cdF9nZXRNdWx0aU1vZGVDb250cm9sOiBhbnk7XG5cdF9nZXRGaWx0ZXJCYXJWYXJpYW50Q29udHJvbDogYW55O1xuXHRfaGFzTXVsdGlWaXN1YWxpemF0aW9uczogYW55O1xuXHRfc2hvdWxkQXV0b1RyaWdnZXJTZWFyY2g6IGFueTtcblx0X2dldFRhYmxlOiBhbnk7XG59XG5cbmV4cG9ydCBpbnRlcmZhY2UgT2JqZWN0UGFnZUNvbnRyb2xsZXJUeXBlIHtcblx0Z2V0U3RpY2t5RWRpdE1vZGU6IGFueTtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIG1vY2tMaXN0UmVwb3J0Q29udHJvbGxlcigpOiBXaXRoTW9jazxDb250cm9sbGVyICYgUGFnZUNvbnRyb2xsZXIgJiBMaXN0UmVwb3J0Q29udHJvbGxlclR5cGUgJiBDb21tb25Db250cm9sbGVyVHlwZT4ge1xuXHQvLyBtYW51YWxseSBhZGQgTGlzdFJlcG9ydENvbnRyb2xsZXIuY29udHJvbGxlciBmdW5jdGlvbnMgc2luY2UgSSBhbSB1bmFibGUgdG8gaW1wb3J0IHRoZSBwcm90b3R5cGVcblx0Y29uc3QgbGlzdFJlcG9ydDogTW9ja2VkSW5zdGFuY2U8TGlzdFJlcG9ydENvbnRyb2xsZXJUeXBlICYgQ29tbW9uQ29udHJvbGxlclR5cGU+ID0ge1xuXHRcdF9nZXRGaWx0ZXJCYXJDb250cm9sOiBqZXN0LmZuKCksXG5cdFx0X2dldENvbnRyb2xzOiBqZXN0LmZuKCksXG5cdFx0X2lzRmlsdGVyQmFySGlkZGVuOiBqZXN0LmZuKCksXG5cdFx0X2lzTXVsdGlNb2RlOiBqZXN0LmZuKCksXG5cdFx0X2dldE11bHRpTW9kZUNvbnRyb2w6IGplc3QuZm4oKSxcblx0XHRfZ2V0RmlsdGVyQmFyVmFyaWFudENvbnRyb2w6IGplc3QuZm4oKSxcblx0XHRfaGFzTXVsdGlWaXN1YWxpemF0aW9uczogamVzdC5mbigpLFxuXHRcdF9zaG91bGRBdXRvVHJpZ2dlclNlYXJjaDogamVzdC5mbigpLFxuXHRcdF9nZXRUYWJsZTogamVzdC5mbigpLFxuXHRcdGdldEV4dGVuc2lvbkFQSTogamVzdC5mbigpLFxuXHRcdF9lZGl0RmxvdzogbW9jayhJbnRlcm5hbEVkaXRGbG93KSBhcyBhbnlcblx0fTtcblx0cmV0dXJuIE9iamVjdC5hc3NpZ24obW9jayhQYWdlQ29udHJvbGxlcikgYXMgYW55LCBsaXN0UmVwb3J0KSBhcyBXaXRoTW9jazxcblx0XHRDb250cm9sbGVyICYgUGFnZUNvbnRyb2xsZXIgJiBMaXN0UmVwb3J0Q29udHJvbGxlclR5cGUgJiBDb21tb25Db250cm9sbGVyVHlwZVxuXHQ+O1xufVxuXG5leHBvcnQgZnVuY3Rpb24gbW9ja09iamVjdFBhZ2VDb250cm9sbGVyKCk6IFdpdGhNb2NrPENvbnRyb2xsZXIgJiBQYWdlQ29udHJvbGxlciAmIE9iamVjdFBhZ2VDb250cm9sbGVyVHlwZSAmIENvbW1vbkNvbnRyb2xsZXJUeXBlPiB7XG5cdC8vIG1hbnVhbGx5IGFkZCBMaXN0UmVwb3J0Q29udHJvbGxlci5jb250cm9sbGVyIGZ1bmN0aW9ucyBzaW5jZSBJIGFtIHVuYWJsZSB0byBpbXBvcnQgdGhlIHByb3RvdHlwZVxuXHRjb25zdCBvYmplY3RQYWdlOiBNb2NrZWRJbnN0YW5jZTxPYmplY3RQYWdlQ29udHJvbGxlclR5cGUgJiBDb21tb25Db250cm9sbGVyVHlwZT4gPSB7XG5cdFx0Z2V0U3RpY2t5RWRpdE1vZGU6IGplc3QuZm4oKSxcblx0XHRnZXRFeHRlbnNpb25BUEk6IGplc3QuZm4oKSxcblx0XHRfZWRpdEZsb3c6IG1vY2soSW50ZXJuYWxFZGl0RmxvdykgYXMgYW55XG5cdH07XG5cdHJldHVybiBPYmplY3QuYXNzaWduKG1vY2soUGFnZUNvbnRyb2xsZXIpIGFzIGFueSwgb2JqZWN0UGFnZSkgYXMgV2l0aE1vY2s8XG5cdFx0Q29udHJvbGxlciAmIFBhZ2VDb250cm9sbGVyICYgT2JqZWN0UGFnZUNvbnRyb2xsZXJUeXBlICYgQ29tbW9uQ29udHJvbGxlclR5cGVcblx0Pjtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIG1vY2tDb250ZXh0Rm9yRXh0ZW5zaW9uPEVYVCBleHRlbmRzIG9iamVjdCwgQkFTRSBleHRlbmRzIG9iamVjdD4oXG5cdGV4dGVuc2lvbjogRVhULFxuXHRjb250cm9sbGVyOiBXaXRoTW9jazxDb250cm9sbGVyPixcblx0YmFzZT86IEJBU0Vcbik6IFdpdGhNb2NrPEVYVCAmIFVJNUluc3RhbmNlVHlwZTxCQVNFPj4ge1xuXHRjb25zdCB2aWV3ID0gY29udHJvbGxlci5nZXRWaWV3KCk7XG5cdChleHRlbnNpb24gYXMgYW55KS5nZXRWaWV3ID0gKCkgPT4gdmlldztcblx0Y29uc3QgbW9ja2VkQmFzZSA9IG1vY2soYmFzZSB8fCB7fSk7XG5cdHJldHVybiBPYmplY3QuYXNzaWduKG1vY2tlZEJhc2UsIGV4dGVuc2lvbikgYXMgV2l0aE1vY2s8RVhUICYgVUk1SW5zdGFuY2VUeXBlPEJBU0U+Pjtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIG1vY2tGaWx0ZXJCYXIoKTogV2l0aE1vY2s8XG5cdEZpbHRlckJhciAmIHsgd2FpdEZvckluaXRpYWxpemF0aW9uOiBGdW5jdGlvbjsgX2JTZWFyY2hUcmlnZ2VyZWQ6IEJvb2xlYW47IF9nZXRDb25kaXRpb25Nb2RlbDogRnVuY3Rpb24gfVxuPiB7XG5cdGNvbnN0IGZpbHRlckJhciA9IG1vY2soRmlsdGVyQmFyKSBhcyBXaXRoTW9jazxcblx0XHRGaWx0ZXJCYXIgJiB7IHdhaXRGb3JJbml0aWFsaXphdGlvbjogRnVuY3Rpb247IF9iU2VhcmNoVHJpZ2dlcmVkOiBCb29sZWFuOyBfZ2V0Q29uZGl0aW9uTW9kZWw6IEZ1bmN0aW9uIH1cblx0Pjtcblx0ZmlsdGVyQmFyLm1vY2sud2FpdEZvckluaXRpYWxpemF0aW9uID0gamVzdC5mbigpO1xuXHRyZXR1cm4gZmlsdGVyQmFyO1xufVxuIl0sIm1hcHBpbmdzIjoiO0FBQUE7QUFBQTtBQUFBOzs7Ozs7O0VBNEJPLFNBQVNBLHdCQUFULEdBQTZIO0lBQ25JO0lBQ0EsSUFBTUMsVUFBMkUsR0FBRztNQUNuRkMsb0JBQW9CLEVBQUVDLElBQUksQ0FBQ0MsRUFBTCxFQUQ2RDtNQUVuRkMsWUFBWSxFQUFFRixJQUFJLENBQUNDLEVBQUwsRUFGcUU7TUFHbkZFLGtCQUFrQixFQUFFSCxJQUFJLENBQUNDLEVBQUwsRUFIK0Q7TUFJbkZHLFlBQVksRUFBRUosSUFBSSxDQUFDQyxFQUFMLEVBSnFFO01BS25GSSxvQkFBb0IsRUFBRUwsSUFBSSxDQUFDQyxFQUFMLEVBTDZEO01BTW5GSywyQkFBMkIsRUFBRU4sSUFBSSxDQUFDQyxFQUFMLEVBTnNEO01BT25GTSx1QkFBdUIsRUFBRVAsSUFBSSxDQUFDQyxFQUFMLEVBUDBEO01BUW5GTyx3QkFBd0IsRUFBRVIsSUFBSSxDQUFDQyxFQUFMLEVBUnlEO01BU25GUSxTQUFTLEVBQUVULElBQUksQ0FBQ0MsRUFBTCxFQVR3RTtNQVVuRlMsZUFBZSxFQUFFVixJQUFJLENBQUNDLEVBQUwsRUFWa0U7TUFXbkZVLFNBQVMsRUFBRUMsSUFBSSxDQUFDQyxnQkFBRDtJQVhvRSxDQUFwRjtJQWFBLE9BQU9DLE1BQU0sQ0FBQ0MsTUFBUCxDQUFjSCxJQUFJLENBQUNJLGNBQUQsQ0FBbEIsRUFBMkNsQixVQUEzQyxDQUFQO0VBR0E7Ozs7RUFFTSxTQUFTbUIsd0JBQVQsR0FBNkg7SUFDbkk7SUFDQSxJQUFNQyxVQUEyRSxHQUFHO01BQ25GQyxpQkFBaUIsRUFBRW5CLElBQUksQ0FBQ0MsRUFBTCxFQURnRTtNQUVuRlMsZUFBZSxFQUFFVixJQUFJLENBQUNDLEVBQUwsRUFGa0U7TUFHbkZVLFNBQVMsRUFBRUMsSUFBSSxDQUFDQyxnQkFBRDtJQUhvRSxDQUFwRjtJQUtBLE9BQU9DLE1BQU0sQ0FBQ0MsTUFBUCxDQUFjSCxJQUFJLENBQUNJLGNBQUQsQ0FBbEIsRUFBMkNFLFVBQTNDLENBQVA7RUFHQTs7OztFQUVNLFNBQVNFLHVCQUFULENBQ05DLFNBRE0sRUFFTkMsVUFGTSxFQUdOQyxJQUhNLEVBSWtDO0lBQ3hDLElBQU1DLElBQUksR0FBR0YsVUFBVSxDQUFDRyxPQUFYLEVBQWI7O0lBQ0NKLFNBQUQsQ0FBbUJJLE9BQW5CLEdBQTZCO01BQUEsT0FBTUQsSUFBTjtJQUFBLENBQTdCOztJQUNBLElBQU1FLFVBQVUsR0FBR2QsSUFBSSxDQUFDVyxJQUFJLElBQUksRUFBVCxDQUF2QjtJQUNBLE9BQU9ULE1BQU0sQ0FBQ0MsTUFBUCxDQUFjVyxVQUFkLEVBQTBCTCxTQUExQixDQUFQO0VBQ0E7Ozs7RUFFTSxTQUFTTSxhQUFULEdBRUw7SUFDRCxJQUFNQyxTQUFTLEdBQUdoQixJQUFJLENBQUNpQixTQUFELENBQXRCO0lBR0FELFNBQVMsQ0FBQ2hCLElBQVYsQ0FBZWtCLHFCQUFmLEdBQXVDOUIsSUFBSSxDQUFDQyxFQUFMLEVBQXZDO0lBQ0EsT0FBTzJCLFNBQVA7RUFDQSJ9
|
|
@@ -16,6 +16,7 @@ export interface ListReportControllerType {
|
|
|
16
16
|
_isFilterBarHidden: any;
|
|
17
17
|
_isMultiMode: any;
|
|
18
18
|
_getMultiModeControl: any;
|
|
19
|
+
_getFilterBarVariantControl: any;
|
|
19
20
|
_hasMultiVisualizations: any;
|
|
20
21
|
_shouldAutoTriggerSearch: any;
|
|
21
22
|
_getTable: any;
|
|
@@ -33,6 +34,7 @@ export function mockListReportController(): WithMock<Controller & PageController
|
|
|
33
34
|
_isFilterBarHidden: jest.fn(),
|
|
34
35
|
_isMultiMode: jest.fn(),
|
|
35
36
|
_getMultiModeControl: jest.fn(),
|
|
37
|
+
_getFilterBarVariantControl: jest.fn(),
|
|
36
38
|
_hasMultiVisualizations: jest.fn(),
|
|
37
39
|
_shouldAutoTriggerSearch: jest.fn(),
|
|
38
40
|
_getTable: jest.fn(),
|
|
@@ -196,6 +196,8 @@ sap.ui.define(["@sap/cds-compiler", "fs", "path", "prettier", "sap/base/Log", "s
|
|
|
196
196
|
return formatXML(xmlString);
|
|
197
197
|
};
|
|
198
198
|
|
|
199
|
+
_exports.serializeXML = serializeXML;
|
|
200
|
+
|
|
199
201
|
var formatXML = function (xmlString) {
|
|
200
202
|
return format(xmlString, {
|
|
201
203
|
parser: "xml",
|
|
@@ -245,9 +247,15 @@ sap.ui.define(["@sap/cds-compiler", "fs", "path", "prettier", "sap/base/Log", "s
|
|
|
245
247
|
function cds2edmx(cds) {
|
|
246
248
|
var service = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : "sap.fe.test.JestService";
|
|
247
249
|
var options = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : {};
|
|
248
|
-
var
|
|
249
|
-
"
|
|
250
|
-
}
|
|
250
|
+
var sources = {
|
|
251
|
+
"source.cds": cds
|
|
252
|
+
}; // allow to include stuff from @sap/cds/common
|
|
253
|
+
|
|
254
|
+
if (cds.includes("'@sap/cds/common'")) {
|
|
255
|
+
sources["common.cds"] = fs.readFileSync(require.resolve("@sap/cds/common.cds"), "utf-8");
|
|
256
|
+
}
|
|
257
|
+
|
|
258
|
+
var csn = compiler.compileSources(sources, {});
|
|
251
259
|
|
|
252
260
|
var edmxOptions = _objectSpread(_objectSpread({
|
|
253
261
|
odataForeignKeys: true,
|
|
@@ -582,10 +590,12 @@ sap.ui.define(["@sap/cds-compiler", "fs", "path", "prettier", "sap/base/Log", "s
|
|
|
582
590
|
var controlDetail = "";
|
|
583
591
|
|
|
584
592
|
if (sAggregationName) {
|
|
585
|
-
|
|
593
|
+
if (control.getParent()) {
|
|
594
|
+
var indexInParent = control.getParent().getAggregation(sAggregationName).indexOf(control);
|
|
586
595
|
|
|
587
|
-
|
|
588
|
-
|
|
596
|
+
if (indexInParent > 0) {
|
|
597
|
+
controlDetail += ",\n".concat(getTab());
|
|
598
|
+
}
|
|
589
599
|
}
|
|
590
600
|
}
|
|
591
601
|
|
|
@@ -621,12 +631,23 @@ sap.ui.define(["@sap/cds-compiler", "fs", "path", "prettier", "sap/base/Log", "s
|
|
|
621
631
|
startAggregation: function (control, sName) {
|
|
622
632
|
var out = ",\n".concat(getTab()).concat(sName);
|
|
623
633
|
tabCount++;
|
|
624
|
-
|
|
634
|
+
|
|
635
|
+
if (control.mBindingInfos[sName]) {
|
|
636
|
+
out += "={ path:'".concat(control.mBindingInfos[sName].path, "', template:\n").concat(getTab());
|
|
637
|
+
} else {
|
|
638
|
+
out += "=[\n".concat(getTab());
|
|
639
|
+
}
|
|
640
|
+
|
|
625
641
|
return out;
|
|
626
642
|
},
|
|
627
|
-
endAggregation: function () {
|
|
643
|
+
endAggregation: function (control, sName) {
|
|
628
644
|
tabCount--;
|
|
629
|
-
|
|
645
|
+
|
|
646
|
+
if (control.mBindingInfos[sName]) {
|
|
647
|
+
return "\n".concat(getTab(), "}");
|
|
648
|
+
} else {
|
|
649
|
+
return "\n".concat(getTab(), "]");
|
|
650
|
+
}
|
|
630
651
|
}
|
|
631
652
|
};
|
|
632
653
|
|
|
@@ -655,4 +676,4 @@ sap.ui.define(["@sap/cds-compiler", "fs", "path", "prettier", "sap/base/Log", "s
|
|
|
655
676
|
_exports.createAwaiter = createAwaiter;
|
|
656
677
|
return _exports;
|
|
657
678
|
}, false);
|
|
658
|
-
//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJuYW1lcyI6WyJwcm9jZXNzRnJhZ21lbnQiLCJuYW1lIiwidGVzdERhdGEiLCJpbnB1dFhtbCIsInBhcnNlciIsIndpbmRvdyIsIkRPTVBhcnNlciIsImlucHV0RG9jIiwicGFyc2VGcm9tU3RyaW5nIiwic2V0dGluZ3MiLCJtb2RlbHMiLCJiaW5kaW5nQ29udGV4dHMiLCJtb2RlbCIsImpzb25Nb2RlbCIsIkpTT05Nb2RlbCIsInNldERhdGEiLCJjcmVhdGVCaW5kaW5nQ29udGV4dCIsIlhNTFByZXByb2Nlc3NvciIsInByb2Nlc3MiLCJmaXJzdEVsZW1lbnRDaGlsZCIsInJlc3VsdERvYyIsImZyYWdtZW50cyIsImdldEVsZW1lbnRzQnlUYWdOYW1lIiwibGVuZ3RoIiwiZnJhZ21lbnQiLCJpbm5lckhUTUwiLCJ4bWxSZXN1bHQiLCJjaGlsZHJlbiIsIm91dGVySFRNTCIsImZvcm1hdFhtbCIsImZpbHRlciIsIm5vZGUiLCJ0eXBlIiwicmVxdWlyZSIsIkxvZyIsInNldExldmVsIiwiamVzdCIsInNldFRpbWVvdXQiLCJuYW1lU3BhY2VNYXAiLCJzZWxlY3QiLCJ4cGF0aCIsInVzZU5hbWVzcGFjZXMiLCJyZWdpc3Rlck1hY3JvIiwibWFjcm9NZXRhZGF0YSIsInJlZ2lzdGVyQnVpbGRpbmdCbG9jayIsInVucmVnaXN0ZXJNYWNybyIsInBsdWdJbiIsIm5hbWVzcGFjZSIsInB1YmxpY05hbWVzcGFjZSIsInJ1blhQYXRoUXVlcnkiLCJzZWxlY3RvciIsInhtbGRvbSIsImV4cGVjdCIsImV4dGVuZCIsInRvSGF2ZUNvbnRyb2wiLCJub2RlcyIsIm1lc3NhZ2UiLCJvdXRwdXRYbWwiLCJzZXJpYWxpemVYTUwiLCJwYXNzIiwidG9Ob3RIYXZlQ29udHJvbCIsImZvcm1hdEJ1aWxkaW5nQmxvY2tYTUwiLCJ4bWxTdHJpbmciLCJBcnJheSIsImlzQXJyYXkiLCJqb2luIiwieG1sRm9ybWF0dGVkIiwiZm9ybWF0WE1MIiwicmVwbGFjZSIsImdldENvbnRyb2xBdHRyaWJ1dGUiLCJjb250cm9sU2VsZWN0b3IiLCJhdHRyaWJ1dGVOYW1lIiwieG1sRG9tIiwic2VyaWFsaXplciIsIlhNTFNlcmlhbGl6ZXIiLCJzZXJpYWxpemVUb1N0cmluZyIsImZvcm1hdCIsInhtbFdoaXRlc3BhY2VTZW5zaXRpdml0eSIsImNvbXBpbGVDRFMiLCJjZHNVcmwiLCJvcHRpb25zIiwiZWRteEZpbGVOYW1lIiwicGF0aCIsImJhc2VuYW1lIiwiY2RzU3RyaW5nIiwiZnMiLCJyZWFkRmlsZVN5bmMiLCJlZG14Q29udGVudCIsImNkczJlZG14IiwiZGlyIiwicmVzb2x2ZSIsImVkbXhGaWxlUGF0aCIsIm1rZGlyU3luYyIsInJlY3Vyc2l2ZSIsIndyaXRlRmlsZVN5bmMiLCJjZHMiLCJzZXJ2aWNlIiwiY3NuIiwiY29tcGlsZXIiLCJjb21waWxlU291cmNlcyIsImVkbXhPcHRpb25zIiwib2RhdGFGb3JlaWduS2V5cyIsIm9kYXRhRm9ybWF0Iiwib2RhdGFDb250YWlubWVudCIsImVkbXgiLCJ0byIsIkVycm9yIiwiZ2V0RmFrZVNpZGVFZmZlY3RzU2VydmljZSIsIm9NZXRhTW9kZWwiLCJvU2VydmljZUNvbnRleHQiLCJzY29wZU9iamVjdCIsInNjb3BlVHlwZSIsIlNpZGVFZmZlY3RzRmFjdG9yeSIsImNyZWF0ZUluc3RhbmNlIiwidGhlbiIsIm9TZXJ2aWNlSW5zdGFuY2UiLCJvSmVzdFNpZGVFZmZlY3RzU2VydmljZSIsImdldEludGVyZmFjZSIsImdldENvbnRleHQiLCJnZXRNb2RlbCIsImdldE1ldGFNb2RlbCIsImdldEZha2VEaWFnbm9zdGljcyIsImlzc3VlcyIsImFkZElzc3VlIiwiaXNzdWVDYXRlZ29yeSIsImlzc3VlU2V2ZXJpdHkiLCJkZXRhaWxzIiwicHVzaCIsImdldElzc3VlcyIsImNoZWNrSWZJc3N1ZUV4aXN0cyIsImZpbmQiLCJpc3N1ZSIsImdldENvbnZlcnRlckNvbnRleHRGb3JUZXN0IiwiY29udmVydGVkVHlwZXMiLCJtYW5pZmVzdFNldHRpbmdzIiwiZW50aXR5U2V0IiwiZW50aXR5U2V0cyIsImVzIiwiZGF0YU1vZGVsUGF0aCIsImdldERhdGFNb2RlbE9iamVjdFBhdGhGb3JQcm9wZXJ0eSIsIkNvbnZlcnRlckNvbnRleHQiLCJtZXJnZSIsIm1ldGFNb2RlbENhY2hlIiwic01ldGFkYXRhVXJsIiwib1JlcXVlc3RvciIsIl9NZXRhZGF0YVJlcXVlc3RvciIsImNyZWF0ZSIsIk9EYXRhTWV0YU1vZGVsIiwidW5kZWZpbmVkIiwiZmV0Y2hFbnRpdHlDb250YWluZXIiLCJwcm9wZXJ0eSIsInRhcmdldFBhdGgiLCJzdGFydGluZ0VudGl0eVNldCIsIm5hdmlnYXRpb25Qcm9wZXJ0aWVzIiwidGFyZ2V0T2JqZWN0IiwidGFyZ2V0RW50aXR5U2V0IiwidGFyZ2V0RW50aXR5VHlwZSIsImVudGl0eVR5cGUiLCJjb250ZXh0TG9jYXRpb24iLCJldmFsdWF0ZUJpbmRpbmciLCJiaW5kaW5nU3RyaW5nIiwiYmluZGluZ0VsZW1lbnQiLCJCaW5kaW5nUGFyc2VyIiwiY29tcGxleFBhcnNlciIsImFyZ3MiLCJmb3JtYXR0ZXIiLCJhcHBseSIsImV2YWx1YXRlQmluZGluZ1dpdGhNb2RlbCIsIm1vZGVsQ29udGVudCIsIm5hbWVkTW9kZWxzQ29udGVudCIsInRleHQiLCJJbnZpc2libGVUZXh0IiwiYmluZFByb3BlcnR5IiwiZGVmYXVsdE1vZGVsIiwic2V0TW9kZWwiLCJzZXRCaW5kaW5nQ29udGV4dCIsIk9iamVjdCIsImVudHJpZXMiLCJjb250ZW50IiwiZ2V0VGV4dCIsIlRFU1RWSUVXSUQiLCJhcHBseUZsZXhDaGFuZ2VzIiwiYVZhcmlhbnREZXBlbmRlbnRDb250cm9sQ2hhbmdlcyIsInJlc3VsdFhNTCIsImNyZWF0ZUNoYW5nZXNPYmplY3QiLCJjaGFuZ2VzIiwiYXBwSWQiLCJvTWFuaWZlc3QiLCJpZCIsImNyb3NzTmF2aWdhdGlvbiIsIm91dGJvdW5kcyIsIm9BcHBDb21wb25lbnQiLCJnZXREaWFnbm9zdGljcyIsImZuIiwibW9ja1JldHVyblZhbHVlIiwiZ2V0Q29tcG9uZW50RGF0YSIsImdldE1hbmlmZXN0T2JqZWN0IiwiZ2V0RW50cnkiLCJzcHlPbiIsIkFwcFN0b3JhZ2UiLCJQcm9taXNlIiwiQ29tcG9uZW50IiwiVXRpbHMiLCJGbGV4U3RhdGUiLCJpbml0aWFsaXplIiwiY29tcG9uZW50SWQiLCJYbWxQcmVwcm9jZXNzb3IiLCJnZXRDaGFuZ2VzRnJvbVhNTCIsInhtbCIsInF1ZXJ5U2VsZWN0b3JBbGwiLCJmbGF0TWFwIiwiZSIsImF0dHJpYnV0ZXMiLCJtYXAiLCJhIiwiYXR0ciIsImluY2x1ZGVzIiwiZ2V0VGVtcGxhdGluZ1Jlc3VsdCIsInhtbElucHV0IiwibUJpbmRpbmdDb250ZXh0cyIsIm1Nb2RlbHMiLCJ0ZW1wbGF0ZWRYbWwiLCJ4bWxEb2MiLCJoYXNPd25Qcm9wZXJ0eSIsImFzc2lnbiIsIlRlbXBsYXRlTW9kZWwiLCJrZXlzIiwiZm9yRWFjaCIsInNNb2RlbE5hbWUiLCJpc1RlbXBsYXRlTW9kZWwiLCJkYXRhIiwib1ByZXByb2Nlc3NvclNldHRpbmdzIiwibWV0YU1vZGVsIiwic0tleSIsImdldE9iamVjdCIsInRvQmVEZWZpbmVkIiwib01vZGVsIiwiY2hhbmdlc0FwcGxpZWQiLCJ0b0JlIiwiZ2V0VGVtcGxhdGVkWE1MIiwic2VyaWFsaXplQ29udHJvbCIsImNvbnRyb2xUb1NlcmlhbGl6ZSIsInRhYkNvdW50IiwiZ2V0VGFiIiwidG9BZGQiLCJ0YWIiLCJpIiwic2VyaWFsaXplRGVsZWdhdGUiLCJzdGFydCIsImNvbnRyb2wiLCJzQWdncmVnYXRpb25OYW1lIiwiY29udHJvbERldGFpbCIsImluZGV4SW5QYXJlbnQiLCJnZXRQYXJlbnQiLCJnZXRBZ2dyZWdhdGlvbiIsImluZGV4T2YiLCJnZXRNZXRhZGF0YSIsImdldE5hbWUiLCJlbmQiLCJtaWRkbGUiLCJnZXRJZCIsIm9Db250cm9sS2V5IiwibVByb3BlcnRpZXMiLCJtQmluZGluZ0luZm9zIiwiYmluZGluZ0RldGFpbCIsInBhcnRzIiwiYmluZGluZ0luZm8iLCJtQXNzb2NpYXRpb25zIiwic3RhcnRBZ2dyZWdhdGlvbiIsInNOYW1lIiwib3V0IiwiZW5kQWdncmVnYXRpb24iLCJjb250cm9sVG9SZW5kZXIiLCJTZXJpYWxpemVyIiwic2VyaWFsaXplIiwiY3JlYXRlQXdhaXRlciIsImZuUmVzb2x2ZSIsIm15UHJvbWlzZSIsInByb21pc2UiXSwic291cmNlUm9vdCI6Ii4iLCJzb3VyY2VzIjpbIkplc3RUZW1wbGF0aW5nSGVscGVyLnRzIl0sInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB0eXBlIHsgQW55QW5ub3RhdGlvbiwgQ29udmVydGVkTWV0YWRhdGEsIEVudGl0eVNldCwgUHJvcGVydHkgfSBmcm9tIFwiQHNhcC11eC92b2NhYnVsYXJpZXMtdHlwZXNcIjtcbmltcG9ydCBjb21waWxlciBmcm9tIFwiQHNhcC9jZHMtY29tcGlsZXJcIjtcbmltcG9ydCAqIGFzIGZzIGZyb20gXCJmc1wiO1xuaW1wb3J0ICogYXMgcGF0aCBmcm9tIFwicGF0aFwiO1xuaW1wb3J0IHR5cGUgeyBSZXF1aXJlZE9wdGlvbnMgfSBmcm9tIFwicHJldHRpZXJcIjtcbmltcG9ydCB7IGZvcm1hdCB9IGZyb20gXCJwcmV0dGllclwiO1xuaW1wb3J0IExvZyBmcm9tIFwic2FwL2Jhc2UvTG9nXCI7XG5pbXBvcnQgbWVyZ2UgZnJvbSBcInNhcC9iYXNlL3V0aWwvbWVyZ2VcIjtcbmltcG9ydCBBcHBDb21wb25lbnQgZnJvbSBcInNhcC9mZS9jb3JlL0FwcENvbXBvbmVudFwiO1xuaW1wb3J0IHsgcmVnaXN0ZXJCdWlsZGluZ0Jsb2NrIH0gZnJvbSBcInNhcC9mZS9jb3JlL2J1aWxkaW5nQmxvY2tzL0J1aWxkaW5nQmxvY2tSdW50aW1lXCI7XG5pbXBvcnQgQ29udmVydGVyQ29udGV4dCBmcm9tIFwic2FwL2ZlL2NvcmUvY29udmVydGVycy9Db252ZXJ0ZXJDb250ZXh0XCI7XG5pbXBvcnQgdHlwZSB7IElzc3VlQ2F0ZWdvcnksIElzc3VlU2V2ZXJpdHkgfSBmcm9tIFwic2FwL2ZlL2NvcmUvY29udmVydGVycy9oZWxwZXJzL0lzc3VlTWFuYWdlclwiO1xuaW1wb3J0IHR5cGUgeyBMaXN0UmVwb3J0TWFuaWZlc3RTZXR0aW5ncywgT2JqZWN0UGFnZU1hbmlmZXN0U2V0dGluZ3MgfSBmcm9tIFwic2FwL2ZlL2NvcmUvY29udmVydGVycy9NYW5pZmVzdFNldHRpbmdzXCI7XG5pbXBvcnQgdHlwZSB7IElEaWFnbm9zdGljcyB9IGZyb20gXCJzYXAvZmUvY29yZS9jb252ZXJ0ZXJzL1RlbXBsYXRlQ29udmVydGVyXCI7XG5pbXBvcnQgU2lkZUVmZmVjdHNGYWN0b3J5IGZyb20gXCJzYXAvZmUvY29yZS9zZXJ2aWNlcy9TaWRlRWZmZWN0c1NlcnZpY2VGYWN0b3J5XCI7XG5pbXBvcnQgVGVtcGxhdGVNb2RlbCBmcm9tIFwic2FwL2ZlL2NvcmUvVGVtcGxhdGVNb2RlbFwiO1xuaW1wb3J0IHR5cGUgeyBEYXRhTW9kZWxPYmplY3RQYXRoIH0gZnJvbSBcInNhcC9mZS9jb3JlL3RlbXBsYXRpbmcvRGF0YU1vZGVsUGF0aEhlbHBlclwiO1xuaW1wb3J0IEJpbmRpbmdQYXJzZXIgZnJvbSBcInNhcC91aS9iYXNlL0JpbmRpbmdQYXJzZXJcIjtcbmltcG9ydCBNYW5hZ2VkT2JqZWN0IGZyb20gXCJzYXAvdWkvYmFzZS9NYW5hZ2VkT2JqZWN0XCI7XG5pbXBvcnQgQ29tcG9uZW50IGZyb20gXCJzYXAvdWkvY29yZS9Db21wb25lbnRcIjtcbmltcG9ydCBDb250cm9sIGZyb20gXCJzYXAvdWkvY29yZS9Db250cm9sXCI7XG5pbXBvcnQgSW52aXNpYmxlVGV4dCBmcm9tIFwic2FwL3VpL2NvcmUvSW52aXNpYmxlVGV4dFwiO1xuaW1wb3J0IFNlcmlhbGl6ZXIgZnJvbSBcInNhcC91aS9jb3JlL3V0aWwvc2VyaWFsaXplci9TZXJpYWxpemVyXCI7XG5pbXBvcnQgWE1MUHJlcHJvY2Vzc29yIGZyb20gXCJzYXAvdWkvY29yZS91dGlsL1hNTFByZXByb2Nlc3NvclwiO1xuaW1wb3J0IEZsZXhTdGF0ZSBmcm9tIFwic2FwL3VpL2ZsL2FwcGx5L19pbnRlcm5hbC9mbGV4U3RhdGUvRmxleFN0YXRlXCI7XG5pbXBvcnQgWG1sUHJlcHJvY2Vzc29yIGZyb20gXCJzYXAvdWkvZmwvYXBwbHkvX2ludGVybmFsL3ByZXByb2Nlc3NvcnMvWG1sUHJlcHJvY2Vzc29yXCI7XG5pbXBvcnQgQXBwU3RvcmFnZSBmcm9tIFwic2FwL3VpL2ZsL2luaXRpYWwvX2ludGVybmFsL1N0b3JhZ2VcIjtcbmltcG9ydCBVdGlscyBmcm9tIFwic2FwL3VpL2ZsL1V0aWxzXCI7XG5pbXBvcnQgdHlwZSBDb250ZXh0IGZyb20gXCJzYXAvdWkvbW9kZWwvQ29udGV4dFwiO1xuaW1wb3J0IEpTT05Nb2RlbCBmcm9tIFwic2FwL3VpL21vZGVsL2pzb24vSlNPTk1vZGVsXCI7XG5pbXBvcnQgTWV0YU1vZGVsIGZyb20gXCJzYXAvdWkvbW9kZWwvTWV0YU1vZGVsXCI7XG5pbXBvcnQgX01ldGFkYXRhUmVxdWVzdG9yIGZyb20gXCJzYXAvdWkvbW9kZWwvb2RhdGEvdjQvbGliL19NZXRhZGF0YVJlcXVlc3RvclwiO1xuaW1wb3J0IE9EYXRhTWV0YU1vZGVsIGZyb20gXCJzYXAvdWkvbW9kZWwvb2RhdGEvdjQvT0RhdGFNZXRhTW9kZWxcIjtcbmltcG9ydCB4cGF0aCBmcm9tIFwieHBhdGhcIjtcbi8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBAdHlwZXNjcmlwdC1lc2xpbnQvbm8tdmFyLXJlcXVpcmVzXG5jb25zdCBmb3JtYXRYbWwgPSByZXF1aXJlKFwieG1sLWZvcm1hdHRlclwiKTtcblxuTG9nLnNldExldmVsKDEgYXMgYW55LCBcInNhcC51aS5jb3JlLnV0aWwuWE1MUHJlcHJvY2Vzc29yXCIpO1xuamVzdC5zZXRUaW1lb3V0KDQwMDAwKTtcblxuY29uc3QgbmFtZVNwYWNlTWFwID0ge1xuXHRcIm1hY3Jvc1wiOiBcInNhcC5mZS5tYWNyb3NcIixcblx0XCJtYWNyb1wiOiBcInNhcC5mZS5tYWNyb3NcIixcblx0XCJtYWNyb2RhdGFcIjogXCJodHRwOi8vc2NoZW1hcy5zYXAuY29tL3NhcHVpNS9leHRlbnNpb24vc2FwLnVpLmNvcmUuQ3VzdG9tRGF0YS8xXCIsXG5cdFwibG9nXCI6IFwiaHR0cDovL3NjaGVtYXMuc2FwLmNvbS9zYXB1aTUvZXh0ZW5zaW9uL3NhcC51aS5jb3JlLkN1c3RvbURhdGEvMVwiLFxuXHRcInVuaXR0ZXN0XCI6IFwiaHR0cDovL3NjaGVtYXMuc2FwLmNvbS9zYXB1aTUvcHJlcHJvY2Vzc29yZXh0ZW5zaW9uL3NhcC5mZS51bml0dGVzdGluZy8xXCIsXG5cdFwiY29udHJvbFwiOiBcInNhcC5mZS5jb3JlLmNvbnRyb2xzXCIsXG5cdFwiY29yZVwiOiBcInNhcC51aS5jb3JlXCIsXG5cdFwibVwiOiBcInNhcC5tXCIsXG5cdFwiZlwiOiBcInNhcC51aS5sYXlvdXQuZm9ybVwiLFxuXHRcImludGVybmFsTWFjcm9cIjogXCJzYXAuZmUubWFjcm9zLmludGVybmFsXCIsXG5cdFwibWRjXCI6IFwic2FwLnVpLm1kY1wiLFxuXHRcIm1kY2F0XCI6IFwic2FwLnVpLm1kYy5hY3Rpb250b29sYmFyXCIsXG5cdFwibWRjRmllbGRcIjogXCJzYXAudWkubWRjLmZpZWxkXCIsXG5cdFwibWRjVGFibGVcIjogXCJzYXAudWkubWRjLnRhYmxlXCIsXG5cdFwidVwiOiBcInNhcC51aS51bmlmaWVkXCIsXG5cdFwibWFjcm9NaWNyb0NoYXJ0XCI6IFwic2FwLmZlLm1hY3Jvcy5taWNyb2NoYXJ0XCIsXG5cdFwibWljcm9DaGFydFwiOiBcInNhcC5zdWl0ZS51aS5taWNyb2NoYXJ0XCIsXG5cdFwibWFjcm9UYWJsZVwiOiBcInNhcC5mZS5tYWNyb3MudGFibGVcIlxufTtcbmNvbnN0IHNlbGVjdCA9IHhwYXRoLnVzZU5hbWVzcGFjZXMobmFtZVNwYWNlTWFwKTtcblxuZXhwb3J0IGNvbnN0IHJlZ2lzdGVyTWFjcm8gPSBmdW5jdGlvbiAobWFjcm9NZXRhZGF0YTogYW55KSB7XG5cdHJlZ2lzdGVyQnVpbGRpbmdCbG9jayhtYWNyb01ldGFkYXRhKTtcbn07XG5leHBvcnQgY29uc3QgdW5yZWdpc3Rlck1hY3JvID0gZnVuY3Rpb24gKG1hY3JvTWV0YWRhdGE6IGFueSkge1xuXHRYTUxQcmVwcm9jZXNzb3IucGx1Z0luKG51bGwsIG1hY3JvTWV0YWRhdGEubmFtZXNwYWNlLCBtYWNyb01ldGFkYXRhLm5hbWUpO1xuXHRpZiAobWFjcm9NZXRhZGF0YS5wdWJsaWNOYW1lc3BhY2UpIHtcblx0XHRYTUxQcmVwcm9jZXNzb3IucGx1Z0luKG51bGwsIG1hY3JvTWV0YWRhdGEucHVibGljTmFtZXNwYWNlLCBtYWNyb01ldGFkYXRhLm5hbWUpO1xuXHR9XG59O1xuZXhwb3J0IGNvbnN0IHJ1blhQYXRoUXVlcnkgPSBmdW5jdGlvbiAoc2VsZWN0b3I6IHN0cmluZywgeG1sZG9tOiBOb2RlIHwgdW5kZWZpbmVkKSB7XG5cdHJldHVybiBzZWxlY3Qoc2VsZWN0b3IsIHhtbGRvbSk7XG59O1xuXG5leHBlY3QuZXh0ZW5kKHtcblx0dG9IYXZlQ29udHJvbCh4bWxkb20sIHNlbGVjdG9yKSB7XG5cdFx0Y29uc3Qgbm9kZXMgPSBydW5YUGF0aFF1ZXJ5KGAvcm9vdCR7c2VsZWN0b3J9YCwgeG1sZG9tKTtcblx0XHRyZXR1cm4ge1xuXHRcdFx0bWVzc2FnZTogKCkgPT4ge1xuXHRcdFx0XHRjb25zdCBvdXRwdXRYbWwgPSBzZXJpYWxpemVYTUwoeG1sZG9tKTtcblx0XHRcdFx0cmV0dXJuIGBkaWQgbm90IGZpbmQgY29udHJvbHMgbWF0Y2hpbmcgJHtzZWxlY3Rvcn0gaW4gZ2VuZXJhdGVkIHhtbDpcXG4gJHtvdXRwdXRYbWx9YDtcblx0XHRcdH0sXG5cdFx0XHRwYXNzOiBub2RlcyAmJiBub2Rlcy5sZW5ndGggPj0gMVxuXHRcdH07XG5cdH0sXG5cdHRvTm90SGF2ZUNvbnRyb2woeG1sZG9tLCBzZWxlY3Rvcikge1xuXHRcdGNvbnN0IG5vZGVzID0gcnVuWFBhdGhRdWVyeShgL3Jvb3Qke3NlbGVjdG9yfWAsIHhtbGRvbSk7XG5cdFx0cmV0dXJuIHtcblx0XHRcdG1lc3NhZ2U6ICgpID0+IHtcblx0XHRcdFx0Y29uc3Qgb3V0cHV0WG1sID0gc2VyaWFsaXplWE1MKHhtbGRvbSk7XG5cdFx0XHRcdHJldHVybiBgVGhlcmUgaXMgYSBjb250cm9sIG1hdGNoaW5nICR7c2VsZWN0b3J9IGluIGdlbmVyYXRlZCB4bWw6XFxuICR7b3V0cHV0WG1sfWA7XG5cdFx0XHR9LFxuXHRcdFx0cGFzczogbm9kZXMgJiYgbm9kZXMubGVuZ3RoID09PSAwXG5cdFx0fTtcblx0fVxufSk7XG5cbmV4cG9ydCBjb25zdCBmb3JtYXRCdWlsZGluZ0Jsb2NrWE1MID0gZnVuY3Rpb24gKHhtbFN0cmluZzogc3RyaW5nIHwgc3RyaW5nW10pIHtcblx0aWYgKEFycmF5LmlzQXJyYXkoeG1sU3RyaW5nKSkge1xuXHRcdHhtbFN0cmluZyA9IHhtbFN0cmluZy5qb2luKFwiXCIpO1xuXHR9XG5cdGxldCB4bWxGb3JtYXR0ZWQgPSBmb3JtYXRYTUwoeG1sU3RyaW5nKTtcblx0eG1sRm9ybWF0dGVkID0geG1sRm9ybWF0dGVkLnJlcGxhY2UoL3VpZC0taWQtWzAtOV17MTN9LVswLTldezEsMn0vZywgXCJ1aWQtLWlkXCIpO1xuXHRyZXR1cm4geG1sRm9ybWF0dGVkO1xufTtcblxuZXhwb3J0IGNvbnN0IGdldENvbnRyb2xBdHRyaWJ1dGUgPSBmdW5jdGlvbiAoY29udHJvbFNlbGVjdG9yOiBzdHJpbmcsIGF0dHJpYnV0ZU5hbWU6IHN0cmluZywgeG1sRG9tOiBOb2RlKSB7XG5cdGNvbnN0IHNlbGVjdG9yID0gYHN0cmluZygvcm9vdCR7Y29udHJvbFNlbGVjdG9yfS9AJHthdHRyaWJ1dGVOYW1lfSlgO1xuXHRyZXR1cm4gcnVuWFBhdGhRdWVyeShzZWxlY3RvciwgeG1sRG9tKTtcbn07XG5cbmNvbnN0IHNlcmlhbGl6ZVhNTCA9IGZ1bmN0aW9uICh4bWxEb206IE5vZGUpIHtcblx0Y29uc3Qgc2VyaWFsaXplciA9IG5ldyB3aW5kb3cuWE1MU2VyaWFsaXplcigpO1xuXHRjb25zdCB4bWxTdHJpbmcgPSBzZXJpYWxpemVyLnNlcmlhbGl6ZVRvU3RyaW5nKHhtbERvbSk7XG5cdHJldHVybiBmb3JtYXRYTUwoeG1sU3RyaW5nKTtcbn07XG5cbmV4cG9ydCBjb25zdCBmb3JtYXRYTUwgPSBmdW5jdGlvbiAoeG1sU3RyaW5nOiBzdHJpbmcpIHtcblx0cmV0dXJuIGZvcm1hdChcblx0XHR4bWxTdHJpbmcsXG5cdFx0eyBwYXJzZXI6IFwieG1sXCIsIHhtbFdoaXRlc3BhY2VTZW5zaXRpdml0eTogXCJpZ25vcmVcIiB9IGFzIFBhcnRpYWw8UmVxdWlyZWRPcHRpb25zPiAvKiBvcHRpb25zIGJ5IHRoZSBQcmV0dGllciBYTUwgcGx1Z2luICovXG5cdCk7XG59O1xuXG4vKipcbiAqIENvbXBpbGUgYSBDRFMgZmlsZSBpbnRvIGFuIEVETVggZmlsZS5cbiAqXG4gKiBAcGFyYW0gY2RzVXJsIFRoZSBwYXRoIHRvIHRoZSBmaWxlIGNvbnRhaW5pbmcgdGhlIENEUyBkZWZpbml0aW9uLiBUaGlzIGZpbGUgbXVzdCBkZWNsYXJlIHRoZSBuYW1lc3BhY2VcbiAqIHNhcC5mZS50ZXN0IGFuZCBhIHNlcnZpY2UgSmVzdFNlcnZpY2VcbiAqIEBwYXJhbSBvcHRpb25zIE9wdGlvbnMgZm9yIGNyZWF0aW5nIHRoZSBFRE1YIG91dHB1dFxuICogQHBhcmFtIGVkbXhGaWxlTmFtZSBBbGxvd3MgeW91IHRvIG92ZXJyaWRlIHRoZSBuYW1lIG9mIHRoZSBjb21waWxlZCBFRE1YIG1ldGFkYXRhIGZpbGVcbiAqIEByZXR1cm5zIFRoZSBwYXRoIG9mIHRoZSBnZW5lcmF0ZWQgRURNWFxuICovXG5leHBvcnQgY29uc3QgY29tcGlsZUNEUyA9IGZ1bmN0aW9uIChcblx0Y2RzVXJsOiBzdHJpbmcsXG5cdG9wdGlvbnM6IGNvbXBpbGVyLk9EYXRhT3B0aW9ucyA9IHt9LFxuXHRlZG14RmlsZU5hbWUgPSBwYXRoLmJhc2VuYW1lKGNkc1VybCkucmVwbGFjZShcIi5jZHNcIiwgXCIueG1sXCIpXG4pIHtcblx0Y29uc3QgY2RzU3RyaW5nID0gZnMucmVhZEZpbGVTeW5jKGNkc1VybCwgXCJ1dGYtOFwiKTtcblx0Y29uc3QgZWRteENvbnRlbnQgPSBjZHMyZWRteChjZHNTdHJpbmcsIFwic2FwLmZlLnRlc3QuSmVzdFNlcnZpY2VcIiwgb3B0aW9ucyk7XG5cdGNvbnN0IGRpciA9IHBhdGgucmVzb2x2ZShjZHNVcmwsIFwiLi5cIiwgXCJnZW5cIik7XG5cblx0Y29uc3QgZWRteEZpbGVQYXRoID0gcGF0aC5yZXNvbHZlKGRpciwgZWRteEZpbGVOYW1lKTtcblxuXHRmcy5ta2RpclN5bmMoZGlyLCB7IHJlY3Vyc2l2ZTogdHJ1ZSB9KTtcblxuXHRmcy53cml0ZUZpbGVTeW5jKGVkbXhGaWxlUGF0aCwgZWRteENvbnRlbnQpO1xuXHRyZXR1cm4gZWRteEZpbGVQYXRoO1xufTtcblxuLyoqXG4gKiBDb21waWxlIENEUyB0byBFRE1YLlxuICpcbiAqIEBwYXJhbSBjZHMgVGhlIENEUyBtb2RlbC4gSXQgbXVzdCBkZWZpbmUgYXQgbGVhc3Qgb25lIHNlcnZpY2UuXG4gKiBAcGFyYW0gc2VydmljZSBUaGUgZnVsbHktcXVhbGlmaWVkIG5hbWUgb2YgdGhlIHNlcnZpY2UgdG8gYmUgY29tcGlsZWQuIERlZmF1bHRzIHRvIFwic2FwLmZlLnRlc3QuSmVzdFNlcnZpY2VcIi5cbiAqIEBwYXJhbSBvcHRpb25zIE9wdGlvbnMgZm9yIGNyZWF0aW5nIHRoZSBFRE1YIG91dHB1dFxuICogQHJldHVybnMgVGhlIGNvbXBpbGVkIHNlcnZpY2UgbW9kZWwgYXMgRURNWC5cbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGNkczJlZG14KGNkczogc3RyaW5nLCBzZXJ2aWNlID0gXCJzYXAuZmUudGVzdC5KZXN0U2VydmljZVwiLCBvcHRpb25zOiBjb21waWxlci5PRGF0YU9wdGlvbnMgPSB7fSkge1xuXHRjb25zdCBjc24gPSBjb21waWxlci5jb21waWxlU291cmNlcyh7IFwic3RyaW5nLmNkc1wiOiBjZHMgfSwge30pO1xuXG5cdGNvbnN0IGVkbXhPcHRpb25zOiBjb21waWxlci5PRGF0YU9wdGlvbnMgPSB7XG5cdFx0b2RhdGFGb3JlaWduS2V5czogdHJ1ZSxcblx0XHRvZGF0YUZvcm1hdDogXCJzdHJ1Y3R1cmVkXCIsXG5cdFx0b2RhdGFDb250YWlubWVudDogZmFsc2UsXG5cdFx0Li4ub3B0aW9ucyxcblx0XHRzZXJ2aWNlOiBzZXJ2aWNlXG5cdH07XG5cblx0Y29uc3QgZWRteCA9IGNvbXBpbGVyLnRvLmVkbXgoY3NuLCBlZG14T3B0aW9ucyk7XG5cdGlmICghZWRteCkge1xuXHRcdHRocm93IG5ldyBFcnJvcihgQ29tcGlsYXRpb24gZmFpbGVkLiBIaW50OiBNYWtlIHN1cmUgdGhhdCB0aGUgQ0RTIG1vZGVsIGRlZmluZXMgc2VydmljZSAke3NlcnZpY2V9LmApO1xuXHR9XG5cdHJldHVybiBlZG14O1xufVxuXG5leHBvcnQgY29uc3QgZ2V0RmFrZVNpZGVFZmZlY3RzU2VydmljZSA9IGFzeW5jIGZ1bmN0aW9uIChvTWV0YU1vZGVsOiBPRGF0YU1ldGFNb2RlbCk6IFByb21pc2U8YW55PiB7XG5cdGNvbnN0IG9TZXJ2aWNlQ29udGV4dCA9IHsgc2NvcGVPYmplY3Q6IHt9LCBzY29wZVR5cGU6IFwiXCIsIHNldHRpbmdzOiB7fSB9O1xuXHRyZXR1cm4gbmV3IFNpZGVFZmZlY3RzRmFjdG9yeSgpLmNyZWF0ZUluc3RhbmNlKG9TZXJ2aWNlQ29udGV4dCkudGhlbihmdW5jdGlvbiAob1NlcnZpY2VJbnN0YW5jZTogYW55KSB7XG5cdFx0Y29uc3Qgb0plc3RTaWRlRWZmZWN0c1NlcnZpY2UgPSBvU2VydmljZUluc3RhbmNlLmdldEludGVyZmFjZSgpO1xuXHRcdG9KZXN0U2lkZUVmZmVjdHNTZXJ2aWNlLmdldENvbnRleHQgPSBmdW5jdGlvbiAoKSB7XG5cdFx0XHRyZXR1cm4ge1xuXHRcdFx0XHRzY29wZU9iamVjdDoge1xuXHRcdFx0XHRcdGdldE1vZGVsOiBmdW5jdGlvbiAoKSB7XG5cdFx0XHRcdFx0XHRyZXR1cm4ge1xuXHRcdFx0XHRcdFx0XHRnZXRNZXRhTW9kZWw6IGZ1bmN0aW9uICgpIHtcblx0XHRcdFx0XHRcdFx0XHRyZXR1cm4gb01ldGFNb2RlbDtcblx0XHRcdFx0XHRcdFx0fVxuXHRcdFx0XHRcdFx0fTtcblx0XHRcdFx0XHR9XG5cdFx0XHRcdH1cblx0XHRcdH07XG5cdFx0fTtcblx0XHRyZXR1cm4gb0plc3RTaWRlRWZmZWN0c1NlcnZpY2U7XG5cdH0pO1xufTtcblxuZXhwb3J0IGNvbnN0IGdldEZha2VEaWFnbm9zdGljcyA9IGZ1bmN0aW9uICgpOiBJRGlhZ25vc3RpY3Mge1xuXHRjb25zdCBpc3N1ZXM6IGFueVtdID0gW107XG5cdHJldHVybiB7XG5cdFx0YWRkSXNzdWUoaXNzdWVDYXRlZ29yeTogSXNzdWVDYXRlZ29yeSwgaXNzdWVTZXZlcml0eTogSXNzdWVTZXZlcml0eSwgZGV0YWlsczogc3RyaW5nKTogdm9pZCB7XG5cdFx0XHRpc3N1ZXMucHVzaCh7XG5cdFx0XHRcdGlzc3VlQ2F0ZWdvcnksXG5cdFx0XHRcdGlzc3VlU2V2ZXJpdHksXG5cdFx0XHRcdGRldGFpbHNcblx0XHRcdH0pO1xuXHRcdH0sXG5cdFx0Z2V0SXNzdWVzKCk6IGFueVtdIHtcblx0XHRcdHJldHVybiBpc3N1ZXM7XG5cdFx0fSxcblx0XHRjaGVja0lmSXNzdWVFeGlzdHMoaXNzdWVDYXRlZ29yeTogSXNzdWVDYXRlZ29yeSwgaXNzdWVTZXZlcml0eTogSXNzdWVTZXZlcml0eSwgZGV0YWlsczogc3RyaW5nKTogYm9vbGVhbiB7XG5cdFx0XHRyZXR1cm4gaXNzdWVzLmZpbmQoKGlzc3VlKSA9PiB7XG5cdFx0XHRcdHJldHVybiBpc3N1ZS5pc3N1ZUNhdGVnb3J5ID09PSBpc3N1ZUNhdGVnb3J5ICYmIGlzc3VlLmlzc3VlU2V2ZXJpdHkgPT09IGlzc3VlU2V2ZXJpdHkgJiYgaXNzdWUuZGV0YWlscyA9PT0gZGV0YWlscztcblx0XHRcdH0pO1xuXHRcdH1cblx0fTtcbn07XG5cbmV4cG9ydCBjb25zdCBnZXRDb252ZXJ0ZXJDb250ZXh0Rm9yVGVzdCA9IGZ1bmN0aW9uIChcblx0Y29udmVydGVkVHlwZXM6IENvbnZlcnRlZE1ldGFkYXRhLFxuXHRtYW5pZmVzdFNldHRpbmdzOiBMaXN0UmVwb3J0TWFuaWZlc3RTZXR0aW5ncyB8IE9iamVjdFBhZ2VNYW5pZmVzdFNldHRpbmdzXG4pIHtcblx0Y29uc3QgZW50aXR5U2V0ID0gY29udmVydGVkVHlwZXMuZW50aXR5U2V0cy5maW5kKChlcykgPT4gZXMubmFtZSA9PT0gbWFuaWZlc3RTZXR0aW5ncy5lbnRpdHlTZXQpO1xuXHRjb25zdCBkYXRhTW9kZWxQYXRoID0gZ2V0RGF0YU1vZGVsT2JqZWN0UGF0aEZvclByb3BlcnR5KGVudGl0eVNldCBhcyBFbnRpdHlTZXQsIGNvbnZlcnRlZFR5cGVzLCBlbnRpdHlTZXQpO1xuXHRyZXR1cm4gbmV3IENvbnZlcnRlckNvbnRleHQoY29udmVydGVkVHlwZXMsIG1hbmlmZXN0U2V0dGluZ3MsIGdldEZha2VEaWFnbm9zdGljcygpLCBtZXJnZSwgZGF0YU1vZGVsUGF0aCk7XG59O1xuY29uc3QgbWV0YU1vZGVsQ2FjaGU6IGFueSA9IHt9O1xuZXhwb3J0IGNvbnN0IGdldE1ldGFNb2RlbCA9IGFzeW5jIGZ1bmN0aW9uIChzTWV0YWRhdGFVcmw6IHN0cmluZykge1xuXHRjb25zdCBvUmVxdWVzdG9yID0gX01ldGFkYXRhUmVxdWVzdG9yLmNyZWF0ZSh7fSwgXCI0LjBcIiwge30pO1xuXHRpZiAoIW1ldGFNb2RlbENhY2hlW3NNZXRhZGF0YVVybF0pIHtcblx0XHRjb25zdCBvTWV0YU1vZGVsID0gbmV3IChPRGF0YU1ldGFNb2RlbCBhcyBhbnkpKG9SZXF1ZXN0b3IsIHNNZXRhZGF0YVVybCwgdW5kZWZpbmVkLCBudWxsKTtcblx0XHRhd2FpdCBvTWV0YU1vZGVsLmZldGNoRW50aXR5Q29udGFpbmVyKCk7XG5cdFx0bWV0YU1vZGVsQ2FjaGVbc01ldGFkYXRhVXJsXSA9IG9NZXRhTW9kZWw7XG5cdH1cblxuXHRyZXR1cm4gbWV0YU1vZGVsQ2FjaGVbc01ldGFkYXRhVXJsXTtcbn07XG5cbmV4cG9ydCBjb25zdCBnZXREYXRhTW9kZWxPYmplY3RQYXRoRm9yUHJvcGVydHkgPSBmdW5jdGlvbiAoXG5cdGVudGl0eVNldDogRW50aXR5U2V0LFxuXHRjb252ZXJ0ZWRUeXBlczogQ29udmVydGVkTWV0YWRhdGEsXG5cdHByb3BlcnR5PzogUHJvcGVydHkgfCBFbnRpdHlTZXQgfCBBbnlBbm5vdGF0aW9uXG4pOiBEYXRhTW9kZWxPYmplY3RQYXRoIHtcblx0Y29uc3QgdGFyZ2V0UGF0aDogRGF0YU1vZGVsT2JqZWN0UGF0aCA9IHtcblx0XHRzdGFydGluZ0VudGl0eVNldDogZW50aXR5U2V0LFxuXHRcdG5hdmlnYXRpb25Qcm9wZXJ0aWVzOiBbXSxcblx0XHR0YXJnZXRPYmplY3Q6IHByb3BlcnR5LFxuXHRcdHRhcmdldEVudGl0eVNldDogZW50aXR5U2V0LFxuXHRcdHRhcmdldEVudGl0eVR5cGU6IGVudGl0eVNldC5lbnRpdHlUeXBlLFxuXHRcdGNvbnZlcnRlZFR5cGVzOiBjb252ZXJ0ZWRUeXBlc1xuXHR9O1xuXHR0YXJnZXRQYXRoLmNvbnRleHRMb2NhdGlvbiA9IHRhcmdldFBhdGg7XG5cdHJldHVybiB0YXJnZXRQYXRoO1xufTtcblxuZXhwb3J0IGNvbnN0IGV2YWx1YXRlQmluZGluZyA9IGZ1bmN0aW9uIChiaW5kaW5nU3RyaW5nOiBzdHJpbmcsIC4uLmFyZ3M6IGFueVtdKSB7XG5cdGNvbnN0IGJpbmRpbmdFbGVtZW50ID0gQmluZGluZ1BhcnNlci5jb21wbGV4UGFyc2VyKGJpbmRpbmdTdHJpbmcpO1xuXHRyZXR1cm4gYmluZGluZ0VsZW1lbnQuZm9ybWF0dGVyLmFwcGx5KHVuZGVmaW5lZCwgYXJncyk7XG59O1xuXG50eXBlIE1vZGVsQ29udGVudCA9IHtcblx0W25hbWU6IHN0cmluZ106IGFueTtcbn07XG5cbi8qKlxuICogRXZhbHVhdGUgYSBiaW5kaW5nIGFnYWluc3QgYSBtb2RlbC5cbiAqXG4gKiBAcGFyYW0gYmluZGluZ1N0cmluZyBUaGUgYmluZGluZyBzdHJpbmcuXG4gKiBAcGFyYW0gbW9kZWxDb250ZW50IENvbnRlbnQgb2YgdGhlIGRlZmF1bHQgbW9kZWwgdG8gdXNlIGZvciBldmFsdWF0aW9uLlxuICogQHBhcmFtIG5hbWVkTW9kZWxzQ29udGVudCBDb250ZW50cyBvZiBhZGRpdGlvbmFsLCBuYW1lZCBtb2RlbHMgdG8gdXNlLlxuICogQHJldHVybnMgVGhlIGV2YWx1YXRlZCBiaW5kaW5nLlxuICovXG5leHBvcnQgZnVuY3Rpb24gZXZhbHVhdGVCaW5kaW5nV2l0aE1vZGVsKFxuXHRiaW5kaW5nU3RyaW5nOiBzdHJpbmcgfCB1bmRlZmluZWQsXG5cdG1vZGVsQ29udGVudDogTW9kZWxDb250ZW50LFxuXHRuYW1lZE1vZGVsc0NvbnRlbnQ/OiB7IFttb2RlbE5hbWU6IHN0cmluZ106IE1vZGVsQ29udGVudCB9XG4pOiBzdHJpbmcge1xuXHRjb25zdCBiaW5kaW5nRWxlbWVudCA9IEJpbmRpbmdQYXJzZXIuY29tcGxleFBhcnNlcihiaW5kaW5nU3RyaW5nKTtcblx0Y29uc3QgdGV4dCA9IG5ldyBJbnZpc2libGVUZXh0KCk7XG5cdHRleHQuYmluZFByb3BlcnR5KFwidGV4dFwiLCBiaW5kaW5nRWxlbWVudCk7XG5cblx0Y29uc3QgZGVmYXVsdE1vZGVsID0gbmV3IEpTT05Nb2RlbChtb2RlbENvbnRlbnQpO1xuXHR0ZXh0LnNldE1vZGVsKGRlZmF1bHRNb2RlbCk7XG5cdHRleHQuc2V0QmluZGluZ0NvbnRleHQoZGVmYXVsdE1vZGVsLmNyZWF0ZUJpbmRpbmdDb250ZXh0KFwiL1wiKSBhcyBDb250ZXh0KTtcblxuXHRpZiAobmFtZWRNb2RlbHNDb250ZW50KSB7XG5cdFx0Zm9yIChjb25zdCBbbmFtZSwgY29udGVudF0gb2YgT2JqZWN0LmVudHJpZXMobmFtZWRNb2RlbHNDb250ZW50KSkge1xuXHRcdFx0Y29uc3QgbW9kZWwgPSBuZXcgSlNPTk1vZGVsKGNvbnRlbnQpO1xuXHRcdFx0dGV4dC5zZXRNb2RlbChtb2RlbCwgbmFtZSk7XG5cdFx0XHR0ZXh0LnNldEJpbmRpbmdDb250ZXh0KG1vZGVsLmNyZWF0ZUJpbmRpbmdDb250ZXh0KFwiL1wiKSBhcyBDb250ZXh0LCBuYW1lKTtcblx0XHR9XG5cdH1cblxuXHRyZXR1cm4gdGV4dC5nZXRUZXh0KCk7XG59XG5cbmNvbnN0IFRFU1RWSUVXSUQgPSBcInRlc3RWaWV3SWRcIjtcblxuZXhwb3J0IGNvbnN0IGFwcGx5RmxleENoYW5nZXMgPSBhc3luYyBmdW5jdGlvbiAoXG5cdGFWYXJpYW50RGVwZW5kZW50Q29udHJvbENoYW5nZXM6IGFueVtdLFxuXHRvTWV0YU1vZGVsOiBNZXRhTW9kZWwsXG5cdHJlc3VsdFhNTDogYW55LFxuXHRjcmVhdGVDaGFuZ2VzT2JqZWN0OiBGdW5jdGlvblxuKSB7XG5cdGNvbnN0IGNoYW5nZXMgPSBjcmVhdGVDaGFuZ2VzT2JqZWN0KFRFU1RWSUVXSUQsIGFWYXJpYW50RGVwZW5kZW50Q29udHJvbENoYW5nZXMpO1xuXHRjb25zdCBhcHBJZCA9IFwic29tZUNvbXBvbmVudFwiO1xuXHRjb25zdCBvTWFuaWZlc3QgPSB7XG5cdFx0XCJzYXAuYXBwXCI6IHtcblx0XHRcdGlkOiBhcHBJZCxcblx0XHRcdHR5cGU6IFwiYXBwbGljYXRpb25cIixcblx0XHRcdGNyb3NzTmF2aWdhdGlvbjoge1xuXHRcdFx0XHRvdXRib3VuZHM6IFtdXG5cdFx0XHR9XG5cdFx0fVxuXHR9O1xuXHRjb25zdCBvQXBwQ29tcG9uZW50OiBBcHBDb21wb25lbnQgPSB7XG5cdFx0Z2V0RGlhZ25vc3RpY3M6IGplc3QuZm4oKS5tb2NrUmV0dXJuVmFsdWUoZ2V0RmFrZURpYWdub3N0aWNzKCkpLFxuXHRcdGdldE1vZGVsOiBqZXN0LmZuKCkubW9ja1JldHVyblZhbHVlKHtcblx0XHRcdGdldE1ldGFNb2RlbDogamVzdC5mbigpLm1vY2tSZXR1cm5WYWx1ZShvTWV0YU1vZGVsKVxuXHRcdH0pLFxuXHRcdGdldENvbXBvbmVudERhdGE6IGplc3QuZm4oKS5tb2NrUmV0dXJuVmFsdWUoe30pLFxuXHRcdGdldE1hbmlmZXN0T2JqZWN0OiBqZXN0LmZuKCkubW9ja1JldHVyblZhbHVlKHtcblx0XHRcdGdldEVudHJ5OiBmdW5jdGlvbiAobmFtZTogc3RyaW5nKSB7XG5cdFx0XHRcdHJldHVybiAob01hbmlmZXN0IGFzIGFueSlbbmFtZV07XG5cdFx0XHR9XG5cdFx0fSlcblx0fSBhcyB1bmtub3duIGFzIEFwcENvbXBvbmVudDtcblx0Ly9mYWtlIGNoYW5nZXNcblx0amVzdC5zcHlPbihBcHBTdG9yYWdlLCBcImxvYWRGbGV4RGF0YVwiKS5tb2NrUmV0dXJuVmFsdWUoUHJvbWlzZS5yZXNvbHZlKGNoYW5nZXMpKTtcblx0amVzdC5zcHlPbihDb21wb25lbnQsIFwiZ2V0XCIpLm1vY2tSZXR1cm5WYWx1ZShvQXBwQ29tcG9uZW50KTtcblx0amVzdC5zcHlPbihVdGlscywgXCJnZXRBcHBDb21wb25lbnRGb3JDb250cm9sXCIpLm1vY2tSZXR1cm5WYWx1ZShvQXBwQ29tcG9uZW50KTtcblx0YXdhaXQgRmxleFN0YXRlLmluaXRpYWxpemUoe1xuXHRcdGNvbXBvbmVudElkOiBhcHBJZFxuXHR9KTtcblx0cmVzdWx0WE1MID0gYXdhaXQgWG1sUHJlcHJvY2Vzc29yLnByb2Nlc3MocmVzdWx0WE1MLCB7IG5hbWU6IFwiVGVzdCBGcmFnbWVudFwiLCBjb21wb25lbnRJZDogYXBwSWQsIGlkOiBURVNUVklFV0lEIH0pO1xuXHRyZXR1cm4gcmVzdWx0WE1MO1xufTtcblxuZXhwb3J0IGNvbnN0IGdldENoYW5nZXNGcm9tWE1MID0gKHhtbDogYW55KSA9PlxuXHRbLi4ueG1sLnF1ZXJ5U2VsZWN0b3JBbGwoXCIqXCIpXVxuXHRcdC5mbGF0TWFwKChlKSA9PiBbLi4uZS5hdHRyaWJ1dGVzXS5tYXAoKGEpID0+IGEubmFtZSkpXG5cdFx0LmZpbHRlcigoYXR0cikgPT4gYXR0ci5pbmNsdWRlcyhcInNhcC51aS5mbC5hcHBsaWVkQ2hhbmdlc1wiKSk7XG5cbmV4cG9ydCBjb25zdCBnZXRUZW1wbGF0aW5nUmVzdWx0ID0gYXN5bmMgZnVuY3Rpb24gKFxuXHR4bWxJbnB1dDogc3RyaW5nLFxuXHRzTWV0YWRhdGFVcmw6IHN0cmluZyxcblx0bUJpbmRpbmdDb250ZXh0czogeyBbeDogc3RyaW5nXTogYW55OyBlbnRpdHlTZXQ/OiBzdHJpbmcgfSxcblx0bU1vZGVsczogeyBbeDogc3RyaW5nXTogYW55IH0sXG5cdGFWYXJpYW50RGVwZW5kZW50Q29udHJvbENoYW5nZXM/OiBhbnlbXSxcblx0Y3JlYXRlQ2hhbmdlc09iamVjdD86IEZ1bmN0aW9uXG4pIHtcblx0Y29uc3QgdGVtcGxhdGVkWG1sID0gYDxyb290PiR7eG1sSW5wdXR9PC9yb290PmA7XG5cdGNvbnN0IHBhcnNlciA9IG5ldyB3aW5kb3cuRE9NUGFyc2VyKCk7XG5cdGNvbnN0IHhtbERvYyA9IHBhcnNlci5wYXJzZUZyb21TdHJpbmcodGVtcGxhdGVkWG1sLCBcInRleHQveG1sXCIpO1xuXHQvLyBUbyBlbnN1cmUgb3VyIG1hY3JvIGNhbiB1c2UgI3NldEJpbmRpbmdDb250ZXh0IHdlIGVuc3VyZSB0aGVyZSBpcyBhIHByZSBleGlzdGluZyBKU09OTW9kZWwgZm9yIGNvbnZlcnRlckNvbnRleHRcblx0Ly8gaWYgbm90IGFscmVhZHkgcGFzc2VkIHRvIHRlaCB0ZW1wbGF0aW5nXG5cblx0Y29uc3Qgb01ldGFNb2RlbCA9IGF3YWl0IGdldE1ldGFNb2RlbChzTWV0YWRhdGFVcmwpO1xuXHRpZiAoIW1Nb2RlbHMuaGFzT3duUHJvcGVydHkoXCJjb252ZXJ0ZXJDb250ZXh0XCIpKSB7XG5cdFx0bU1vZGVscyA9IE9iamVjdC5hc3NpZ24obU1vZGVscywgeyBcImNvbnZlcnRlckNvbnRleHRcIjogbmV3IFRlbXBsYXRlTW9kZWwoe30sIG9NZXRhTW9kZWwpIH0pO1xuXHR9XG5cblx0T2JqZWN0LmtleXMobU1vZGVscykuZm9yRWFjaChmdW5jdGlvbiAoc01vZGVsTmFtZSkge1xuXHRcdGlmIChtTW9kZWxzW3NNb2RlbE5hbWVdICYmIG1Nb2RlbHNbc01vZGVsTmFtZV0uaXNUZW1wbGF0ZU1vZGVsKSB7XG5cdFx0XHRtTW9kZWxzW3NNb2RlbE5hbWVdID0gbmV3IFRlbXBsYXRlTW9kZWwobU1vZGVsc1tzTW9kZWxOYW1lXS5kYXRhLCBvTWV0YU1vZGVsKTtcblx0XHR9XG5cdH0pO1xuXG5cdGNvbnN0IG9QcmVwcm9jZXNzb3JTZXR0aW5nczogYW55ID0ge1xuXHRcdG1vZGVsczogT2JqZWN0LmFzc2lnbihcblx0XHRcdHtcblx0XHRcdFx0bWV0YU1vZGVsOiBvTWV0YU1vZGVsXG5cdFx0XHR9LFxuXHRcdFx0bU1vZGVsc1xuXHRcdCksXG5cdFx0YmluZGluZ0NvbnRleHRzOiB7fVxuXHR9O1xuXG5cdC8vSW5qZWN0IG1vZGVscyBhbmQgYmluZGluZ0NvbnRleHRzXG5cdE9iamVjdC5rZXlzKG1CaW5kaW5nQ29udGV4dHMpLmZvckVhY2goZnVuY3Rpb24gKHNLZXkpIHtcblx0XHQvKiBBc3NlcnQgdG8gbWFrZSBzdXJlIHRoZSBhbm5vdGF0aW9ucyBhcmUgaW4gdGhlIHRlc3QgbWV0YWRhdGEgLT4gYXZvaWQgbWlzbGVhZGluZyB0ZXN0cyAqL1xuXHRcdGV4cGVjdCh0eXBlb2Ygb01ldGFNb2RlbC5nZXRPYmplY3QobUJpbmRpbmdDb250ZXh0c1tzS2V5XSkpLnRvQmVEZWZpbmVkKCk7XG5cdFx0Y29uc3Qgb01vZGVsID0gbU1vZGVsc1tzS2V5XSB8fCBvTWV0YU1vZGVsO1xuXHRcdG9QcmVwcm9jZXNzb3JTZXR0aW5ncy5iaW5kaW5nQ29udGV4dHNbc0tleV0gPSBvTW9kZWwuY3JlYXRlQmluZGluZ0NvbnRleHQobUJpbmRpbmdDb250ZXh0c1tzS2V5XSk7IC8vVmFsdWUgaXMgc1BhdGhcblx0XHRvUHJlcHJvY2Vzc29yU2V0dGluZ3MubW9kZWxzW3NLZXldID0gb01vZGVsO1xuXHR9KTtcblxuXHQvL1RoaXMgY29udGV4dCBmb3IgbWFjcm8gdGVzdGluZ1xuXHRpZiAob1ByZXByb2Nlc3NvclNldHRpbmdzLm1vZGVsc1tcInRoaXNcIl0pIHtcblx0XHRvUHJlcHJvY2Vzc29yU2V0dGluZ3MuYmluZGluZ0NvbnRleHRzW1widGhpc1wiXSA9IG9QcmVwcm9jZXNzb3JTZXR0aW5ncy5tb2RlbHNbXCJ0aGlzXCJdLmNyZWF0ZUJpbmRpbmdDb250ZXh0KFwiL1wiKTtcblx0fVxuXG5cdGxldCByZXN1bHRYTUwgPSBhd2FpdCBYTUxQcmVwcm9jZXNzb3IucHJvY2Vzcyh4bWxEb2MuZmlyc3RFbGVtZW50Q2hpbGQhLCB7IG5hbWU6IFwiVGVzdCBGcmFnbWVudFwiIH0sIG9QcmVwcm9jZXNzb3JTZXR0aW5ncyk7XG5cblx0aWYgKGFWYXJpYW50RGVwZW5kZW50Q29udHJvbENoYW5nZXMgJiYgY3JlYXRlQ2hhbmdlc09iamVjdCkge1xuXHRcdC8vIHByZWZpeCBJZHNcblx0XHRbLi4ucmVzdWx0WE1MLnF1ZXJ5U2VsZWN0b3JBbGwoXCJbaWRdXCIpXS5mb3JFYWNoKChub2RlKSA9PiB7XG5cdFx0XHRub2RlLmlkID0gYCR7VEVTVFZJRVdJRH0tLSR7bm9kZS5pZH1gO1xuXHRcdH0pO1xuXHRcdC8vIGFwcGx5IGZsZXggY2hhbmdlc1xuXHRcdHJlc3VsdFhNTCA9IGF3YWl0IGFwcGx5RmxleENoYW5nZXMoYVZhcmlhbnREZXBlbmRlbnRDb250cm9sQ2hhbmdlcywgb01ldGFNb2RlbCwgcmVzdWx0WE1MLCBjcmVhdGVDaGFuZ2VzT2JqZWN0KTtcblx0XHQvL0Fzc2VydCB0aGF0IGFsbCBjaGFuZ2VzIGhhdmUgYmVlbiBhcHBsaWVkXG5cdFx0Y29uc3QgY2hhbmdlc0FwcGxpZWQgPSBnZXRDaGFuZ2VzRnJvbVhNTChyZXN1bHRYTUwpO1xuXHRcdGV4cGVjdChjaGFuZ2VzQXBwbGllZC5sZW5ndGgpLnRvQmUoYVZhcmlhbnREZXBlbmRlbnRDb250cm9sQ2hhbmdlcy5sZW5ndGgpO1xuXHR9XG5cdHJldHVybiByZXN1bHRYTUw7XG59O1xuXG5leHBvcnQgY29uc3QgZ2V0VGVtcGxhdGVkWE1MID0gYXN5bmMgZnVuY3Rpb24gKFxuXHR4bWxJbnB1dDogc3RyaW5nLFxuXHRzTWV0YWRhdGFVcmw6IHN0cmluZyxcblx0bUJpbmRpbmdDb250ZXh0czogeyBbeDogc3RyaW5nXTogYW55OyBlbnRpdHlTZXQ/OiBzdHJpbmcgfSxcblx0bU1vZGVsczogeyBbeDogc3RyaW5nXTogYW55IH0sXG5cdGFWYXJpYW50RGVwZW5kZW50Q29udHJvbENoYW5nZXM/OiBhbnlbXSxcblx0Y3JlYXRlQ2hhbmdlc09iamVjdD86IEZ1bmN0aW9uXG4pIHtcblx0Y29uc3QgdGVtcGxhdGVkWE1MID0gYXdhaXQgZ2V0VGVtcGxhdGluZ1Jlc3VsdChcblx0XHR4bWxJbnB1dCxcblx0XHRzTWV0YWRhdGFVcmwsXG5cdFx0bUJpbmRpbmdDb250ZXh0cyxcblx0XHRtTW9kZWxzLFxuXHRcdGFWYXJpYW50RGVwZW5kZW50Q29udHJvbENoYW5nZXMsXG5cdFx0Y3JlYXRlQ2hhbmdlc09iamVjdFxuXHQpO1xuXHRyZXR1cm4gc2VyaWFsaXplWE1MKHRlbXBsYXRlZFhNTCk7XG59O1xuXG4vKipcbiAqIFByb2Nlc3MgdGhlIHJlcXVlc3RlZCBYTUwgZnJhZ21lbnQgd2l0aCB0aGUgcHJvdmlkZWQgZGF0YS5cbiAqXG4gKiBAcGFyYW0gbmFtZSBGdWxseSBxdWFsaWZpZWQgbmFtZSBvZiB0aGUgZnJhZ21lbnQgdG8gYmUgdGVzdGVkLlxuICogQHBhcmFtIHRlc3REYXRhIFRlc3QgZGF0YSBjb25zaXN0aW5nXG4gKiBAcmV0dXJucyBUZW1wbGF0ZWQgZnJhZ21lbnQgYXMgc3RyaW5nXG4gKi9cbmV4cG9ydCBhc3luYyBmdW5jdGlvbiBwcm9jZXNzRnJhZ21lbnQobmFtZTogc3RyaW5nLCB0ZXN0RGF0YTogeyBbbW9kZWw6IHN0cmluZ106IG9iamVjdCB9KTogUHJvbWlzZTxzdHJpbmc+IHtcblx0Y29uc3QgaW5wdXRYbWwgPSBgPHJvb3Q+PGNvcmU6RnJhZ21lbnQgZnJhZ21lbnROYW1lPVwiJHtuYW1lfVwiIHR5cGU9XCJYTUxcIiB4bWxuczpjb3JlPVwic2FwLnVpLmNvcmVcIiAvPjwvcm9vdD5gO1xuXHRjb25zdCBwYXJzZXIgPSBuZXcgd2luZG93LkRPTVBhcnNlcigpO1xuXHRjb25zdCBpbnB1dERvYyA9IHBhcnNlci5wYXJzZUZyb21TdHJpbmcoaW5wdXRYbWwsIFwidGV4dC94bWxcIik7XG5cblx0Ly8gYnVpbGQgbW9kZWwgYW5kIGJpbmRpbmdzIGZvciBnaXZlbiB0ZXN0IGRhdGFcblx0Y29uc3Qgc2V0dGluZ3MgPSB7XG5cdFx0bW9kZWxzOiB7fSBhcyB7IFtuYW1lOiBzdHJpbmddOiBKU09OTW9kZWwgfSxcblx0XHRiaW5kaW5nQ29udGV4dHM6IHt9IGFzIHsgW25hbWU6IHN0cmluZ106IG9iamVjdCB9XG5cdH07XG5cdGZvciAoY29uc3QgbW9kZWwgaW4gdGVzdERhdGEpIHtcblx0XHRjb25zdCBqc29uTW9kZWwgPSBuZXcgSlNPTk1vZGVsKCk7XG5cdFx0anNvbk1vZGVsLnNldERhdGEodGVzdERhdGFbbW9kZWxdKTtcblx0XHRzZXR0aW5ncy5tb2RlbHNbbW9kZWxdID0ganNvbk1vZGVsO1xuXHRcdHNldHRpbmdzLmJpbmRpbmdDb250ZXh0c1ttb2RlbF0gPSBzZXR0aW5ncy5tb2RlbHNbbW9kZWxdLmNyZWF0ZUJpbmRpbmdDb250ZXh0KFwiL1wiKSBhcyBDb250ZXh0O1xuXHR9XG5cblx0Ly8gZXhlY3V0ZSB0aGUgcHJlLXByb2Nlc3NvclxuXHRjb25zdCByZXN1bHREb2MgPSBhd2FpdCBYTUxQcmVwcm9jZXNzb3IucHJvY2VzcyhpbnB1dERvYy5maXJzdEVsZW1lbnRDaGlsZCwgeyBuYW1lIH0sIHNldHRpbmdzKTtcblxuXHQvLyBleGNsdWRlIG5lc3RlZCBmcmFnbWVudHMgZnJvbSB0ZXN0IHNuYXBzaG90c1xuXHRjb25zdCBmcmFnbWVudHMgPSByZXN1bHREb2MuZ2V0RWxlbWVudHNCeVRhZ05hbWUoXCJjb3JlOkZyYWdtZW50XCIpO1xuXHRpZiAoZnJhZ21lbnRzPy5sZW5ndGggPiAwKSB7XG5cdFx0Zm9yIChjb25zdCBmcmFnbWVudCBvZiBmcmFnbWVudHMpIHtcblx0XHRcdGZyYWdtZW50LmlubmVySFRNTCA9IFwiXCI7XG5cdFx0fVxuXHR9XG5cblx0Ly8gS2VlcCB0aGUgZnJhZ21lbnQgcmVzdWx0IGFzIGNoaWxkIG9mIHJvb3Qgbm9kZSB3aGVuIGZyYWdtZW50IGdlbmVyYXRlcyBtdWx0aXBsZSByb290IGNvbnRyb2xzXG5cdGNvbnN0IHhtbFJlc3VsdCA9IHJlc3VsdERvYy5jaGlsZHJlbi5sZW5ndGggPiAxID8gcmVzdWx0RG9jLm91dGVySFRNTCA6IHJlc3VsdERvYy5pbm5lckhUTUw7XG5cblx0cmV0dXJuIGZvcm1hdFhtbCh4bWxSZXN1bHQsIHtcblx0XHRmaWx0ZXI6IChub2RlOiBhbnkpID0+IG5vZGUudHlwZSAhPT0gXCJDb21tZW50XCJcblx0fSk7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBzZXJpYWxpemVDb250cm9sKGNvbnRyb2xUb1NlcmlhbGl6ZTogQ29udHJvbCB8IENvbnRyb2xbXSkge1xuXHRsZXQgdGFiQ291bnQgPSAwO1xuXHRmdW5jdGlvbiBnZXRUYWIodG9BZGQ6IG51bWJlciA9IDApIHtcblx0XHRsZXQgdGFiID0gXCJcIjtcblx0XHRmb3IgKGxldCBpID0gMDsgaSA8IHRhYkNvdW50ICsgdG9BZGQ7IGkrKykge1xuXHRcdFx0dGFiICs9IFwiXFx0XCI7XG5cdFx0fVxuXHRcdHJldHVybiB0YWI7XG5cdH1cblx0Y29uc3Qgc2VyaWFsaXplRGVsZWdhdGUgPSB7XG5cdFx0c3RhcnQ6IGZ1bmN0aW9uIChjb250cm9sOiBDb250cm9sLCBzQWdncmVnYXRpb25OYW1lOiBzdHJpbmcpIHtcblx0XHRcdGxldCBjb250cm9sRGV0YWlsID0gXCJcIjtcblx0XHRcdGlmIChzQWdncmVnYXRpb25OYW1lKSB7XG5cdFx0XHRcdGNvbnN0IGluZGV4SW5QYXJlbnQgPSAoY29udHJvbC5nZXRQYXJlbnQoKSEuZ2V0QWdncmVnYXRpb24oc0FnZ3JlZ2F0aW9uTmFtZSkgYXMgTWFuYWdlZE9iamVjdFtdKS5pbmRleE9mKGNvbnRyb2wpO1xuXHRcdFx0XHRpZiAoaW5kZXhJblBhcmVudCA+IDApIHtcblx0XHRcdFx0XHRjb250cm9sRGV0YWlsICs9IGAsXFxuJHtnZXRUYWIoKX1gO1xuXHRcdFx0XHR9XG5cdFx0XHR9XG5cdFx0XHRjb250cm9sRGV0YWlsICs9IGAke2NvbnRyb2wuZ2V0TWV0YWRhdGEoKS5nZXROYW1lKCl9KGA7XG5cdFx0XHRyZXR1cm4gY29udHJvbERldGFpbDtcblx0XHR9LFxuXHRcdGVuZDogZnVuY3Rpb24gKCkge1xuXHRcdFx0cmV0dXJuIFwifSlcIjtcblx0XHR9LFxuXHRcdG1pZGRsZTogZnVuY3Rpb24gKGNvbnRyb2w6IGFueSkge1xuXHRcdFx0bGV0IGRhdGEgPSBge2lkOiAke2NvbnRyb2wuZ2V0SWQoKX1gO1xuXHRcdFx0Zm9yIChjb25zdCBvQ29udHJvbEtleSBpbiBjb250cm9sLm1Qcm9wZXJ0aWVzKSB7XG5cdFx0XHRcdGlmIChjb250cm9sLm1Qcm9wZXJ0aWVzLmhhc093blByb3BlcnR5KG9Db250cm9sS2V5KSkge1xuXHRcdFx0XHRcdGRhdGEgKz0gYCxcXG4ke2dldFRhYigpfSAke29Db250cm9sS2V5fTogJHtjb250cm9sLm1Qcm9wZXJ0aWVzW29Db250cm9sS2V5XX1gO1xuXHRcdFx0XHR9IGVsc2UgaWYgKGNvbnRyb2wubUJpbmRpbmdJbmZvcy5oYXNPd25Qcm9wZXJ0eShvQ29udHJvbEtleSkpIHtcblx0XHRcdFx0XHRjb25zdCBiaW5kaW5nRGV0YWlsID0gY29udHJvbC5tQmluZGluZ0luZm9zW29Db250cm9sS2V5XTtcblx0XHRcdFx0XHRkYXRhICs9IGAsXFxuJHtnZXRUYWIoKX0gJHtvQ29udHJvbEtleX06IGZvcm1hdHRlcigke2JpbmRpbmdEZXRhaWwucGFydHMubWFwKFxuXHRcdFx0XHRcdFx0KGJpbmRpbmdJbmZvOiBhbnkpID0+IGBcXG4ke2dldFRhYigxKX0ke2JpbmRpbmdJbmZvLm1vZGVsID8gYmluZGluZ0luZm8ubW9kZWwgOiBcIlwifT4ke2JpbmRpbmdJbmZvLnBhdGh9YFxuXHRcdFx0XHRcdCl9KWA7XG5cdFx0XHRcdH1cblx0XHRcdH1cblx0XHRcdGZvciAoY29uc3Qgb0NvbnRyb2xLZXkgaW4gY29udHJvbC5tQXNzb2NpYXRpb25zKSB7XG5cdFx0XHRcdGlmIChjb250cm9sLm1Bc3NvY2lhdGlvbnMuaGFzT3duUHJvcGVydHkob0NvbnRyb2xLZXkpKSB7XG5cdFx0XHRcdFx0ZGF0YSArPSBgLFxcbiR7Z2V0VGFiKCl9ICR7b0NvbnRyb2xLZXl9OiAke2NvbnRyb2wubUFzc29jaWF0aW9uc1tvQ29udHJvbEtleV1bMF19YDtcblx0XHRcdFx0fVxuXHRcdFx0fVxuXHRcdFx0ZGF0YSArPSBgYDtcblx0XHRcdHJldHVybiBkYXRhO1xuXHRcdH0sXG5cdFx0c3RhcnRBZ2dyZWdhdGlvbjogZnVuY3Rpb24gKGNvbnRyb2w6IENvbnRyb2wsIHNOYW1lOiBzdHJpbmcpIHtcblx0XHRcdGxldCBvdXQgPSBgLFxcbiR7Z2V0VGFiKCl9JHtzTmFtZX1gO1xuXHRcdFx0dGFiQ291bnQrKztcblx0XHRcdG91dCArPSBgPVtcXG4ke2dldFRhYigpfWA7XG5cdFx0XHRyZXR1cm4gb3V0O1xuXHRcdH0sXG5cdFx0ZW5kQWdncmVnYXRpb246IGZ1bmN0aW9uICgpIHtcblx0XHRcdHRhYkNvdW50LS07XG5cdFx0XHRyZXR1cm4gYFxcbiR7Z2V0VGFiKCl9XWA7XG5cdFx0fVxuXHR9O1xuXHRpZiAoQXJyYXkuaXNBcnJheShjb250cm9sVG9TZXJpYWxpemUpKSB7XG5cdFx0cmV0dXJuIGNvbnRyb2xUb1NlcmlhbGl6ZS5tYXAoKGNvbnRyb2xUb1JlbmRlcjogQ29udHJvbCkgPT4ge1xuXHRcdFx0cmV0dXJuIG5ldyBTZXJpYWxpemVyKGNvbnRyb2xUb1JlbmRlciwgc2VyaWFsaXplRGVsZWdhdGUpLnNlcmlhbGl6ZSgpO1xuXHRcdH0pO1xuXHR9IGVsc2Uge1xuXHRcdHJldHVybiBuZXcgU2VyaWFsaXplcihjb250cm9sVG9TZXJpYWxpemUsIHNlcmlhbGl6ZURlbGVnYXRlKS5zZXJpYWxpemUoKTtcblx0fVxufVxuXG5leHBvcnQgZnVuY3Rpb24gY3JlYXRlQXdhaXRlcigpIHtcblx0bGV0IGZuUmVzb2x2ZSE6IEZ1bmN0aW9uO1xuXHRjb25zdCBteVByb21pc2UgPSBuZXcgUHJvbWlzZSgocmVzb2x2ZSkgPT4ge1xuXHRcdGZuUmVzb2x2ZSA9IHJlc29sdmU7XG5cdH0pO1xuXHRyZXR1cm4geyBwcm9taXNlOiBteVByb21pc2UsIHJlc29sdmU6IGZuUmVzb2x2ZSB9O1xufVxuIl0sIm1hcHBpbmdzIjoiO0FBQUE7QUFBQTtBQUFBOzs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7RUE0YUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7TUFDc0JBLGUsYUFBZ0JDLEksRUFBY0MsUTtRQUF3RDtNQUMzRyxJQUFNQyxRQUFRLGlEQUF5Q0YsSUFBekMseURBQWQ7TUFDQSxJQUFNRyxNQUFNLEdBQUcsSUFBSUMsTUFBTSxDQUFDQyxTQUFYLEVBQWY7TUFDQSxJQUFNQyxRQUFRLEdBQUdILE1BQU0sQ0FBQ0ksZUFBUCxDQUF1QkwsUUFBdkIsRUFBaUMsVUFBakMsQ0FBakIsQ0FIMkcsQ0FLM0c7O01BQ0EsSUFBTU0sUUFBUSxHQUFHO1FBQ2hCQyxNQUFNLEVBQUUsRUFEUTtRQUVoQkMsZUFBZSxFQUFFO01BRkQsQ0FBakI7O01BSUEsS0FBSyxJQUFNQyxPQUFYLElBQW9CVixRQUFwQixFQUE4QjtRQUM3QixJQUFNVyxTQUFTLEdBQUcsSUFBSUMsU0FBSixFQUFsQjtRQUNBRCxTQUFTLENBQUNFLE9BQVYsQ0FBa0JiLFFBQVEsQ0FBQ1UsT0FBRCxDQUExQjtRQUNBSCxRQUFRLENBQUNDLE1BQVQsQ0FBZ0JFLE9BQWhCLElBQXlCQyxTQUF6QjtRQUNBSixRQUFRLENBQUNFLGVBQVQsQ0FBeUJDLE9BQXpCLElBQWtDSCxRQUFRLENBQUNDLE1BQVQsQ0FBZ0JFLE9BQWhCLEVBQXVCSSxvQkFBdkIsQ0FBNEMsR0FBNUMsQ0FBbEM7TUFDQSxDQWYwRyxDQWlCM0c7OztNQWpCMkcsdUJBa0JuRkMsZUFBZSxDQUFDQyxPQUFoQixDQUF3QlgsUUFBUSxDQUFDWSxpQkFBakMsRUFBb0Q7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
|
|
679
|
+
//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJuYW1lcyI6WyJwcm9jZXNzRnJhZ21lbnQiLCJuYW1lIiwidGVzdERhdGEiLCJpbnB1dFhtbCIsInBhcnNlciIsIndpbmRvdyIsIkRPTVBhcnNlciIsImlucHV0RG9jIiwicGFyc2VGcm9tU3RyaW5nIiwic2V0dGluZ3MiLCJtb2RlbHMiLCJiaW5kaW5nQ29udGV4dHMiLCJtb2RlbCIsImpzb25Nb2RlbCIsIkpTT05Nb2RlbCIsInNldERhdGEiLCJjcmVhdGVCaW5kaW5nQ29udGV4dCIsIlhNTFByZXByb2Nlc3NvciIsInByb2Nlc3MiLCJmaXJzdEVsZW1lbnRDaGlsZCIsInJlc3VsdERvYyIsImZyYWdtZW50cyIsImdldEVsZW1lbnRzQnlUYWdOYW1lIiwibGVuZ3RoIiwiZnJhZ21lbnQiLCJpbm5lckhUTUwiLCJ4bWxSZXN1bHQiLCJjaGlsZHJlbiIsIm91dGVySFRNTCIsImZvcm1hdFhtbCIsImZpbHRlciIsIm5vZGUiLCJ0eXBlIiwicmVxdWlyZSIsIkxvZyIsInNldExldmVsIiwiamVzdCIsInNldFRpbWVvdXQiLCJuYW1lU3BhY2VNYXAiLCJzZWxlY3QiLCJ4cGF0aCIsInVzZU5hbWVzcGFjZXMiLCJyZWdpc3Rlck1hY3JvIiwibWFjcm9NZXRhZGF0YSIsInJlZ2lzdGVyQnVpbGRpbmdCbG9jayIsInVucmVnaXN0ZXJNYWNybyIsInBsdWdJbiIsIm5hbWVzcGFjZSIsInB1YmxpY05hbWVzcGFjZSIsInJ1blhQYXRoUXVlcnkiLCJzZWxlY3RvciIsInhtbGRvbSIsImV4cGVjdCIsImV4dGVuZCIsInRvSGF2ZUNvbnRyb2wiLCJub2RlcyIsIm1lc3NhZ2UiLCJvdXRwdXRYbWwiLCJzZXJpYWxpemVYTUwiLCJwYXNzIiwidG9Ob3RIYXZlQ29udHJvbCIsImZvcm1hdEJ1aWxkaW5nQmxvY2tYTUwiLCJ4bWxTdHJpbmciLCJBcnJheSIsImlzQXJyYXkiLCJqb2luIiwieG1sRm9ybWF0dGVkIiwiZm9ybWF0WE1MIiwicmVwbGFjZSIsImdldENvbnRyb2xBdHRyaWJ1dGUiLCJjb250cm9sU2VsZWN0b3IiLCJhdHRyaWJ1dGVOYW1lIiwieG1sRG9tIiwic2VyaWFsaXplciIsIlhNTFNlcmlhbGl6ZXIiLCJzZXJpYWxpemVUb1N0cmluZyIsImZvcm1hdCIsInhtbFdoaXRlc3BhY2VTZW5zaXRpdml0eSIsImNvbXBpbGVDRFMiLCJjZHNVcmwiLCJvcHRpb25zIiwiZWRteEZpbGVOYW1lIiwicGF0aCIsImJhc2VuYW1lIiwiY2RzU3RyaW5nIiwiZnMiLCJyZWFkRmlsZVN5bmMiLCJlZG14Q29udGVudCIsImNkczJlZG14IiwiZGlyIiwicmVzb2x2ZSIsImVkbXhGaWxlUGF0aCIsIm1rZGlyU3luYyIsInJlY3Vyc2l2ZSIsIndyaXRlRmlsZVN5bmMiLCJjZHMiLCJzZXJ2aWNlIiwic291cmNlcyIsImluY2x1ZGVzIiwiY3NuIiwiY29tcGlsZXIiLCJjb21waWxlU291cmNlcyIsImVkbXhPcHRpb25zIiwib2RhdGFGb3JlaWduS2V5cyIsIm9kYXRhRm9ybWF0Iiwib2RhdGFDb250YWlubWVudCIsImVkbXgiLCJ0byIsIkVycm9yIiwiZ2V0RmFrZVNpZGVFZmZlY3RzU2VydmljZSIsIm9NZXRhTW9kZWwiLCJvU2VydmljZUNvbnRleHQiLCJzY29wZU9iamVjdCIsInNjb3BlVHlwZSIsIlNpZGVFZmZlY3RzRmFjdG9yeSIsImNyZWF0ZUluc3RhbmNlIiwidGhlbiIsIm9TZXJ2aWNlSW5zdGFuY2UiLCJvSmVzdFNpZGVFZmZlY3RzU2VydmljZSIsImdldEludGVyZmFjZSIsImdldENvbnRleHQiLCJnZXRNb2RlbCIsImdldE1ldGFNb2RlbCIsImdldEZha2VEaWFnbm9zdGljcyIsImlzc3VlcyIsImFkZElzc3VlIiwiaXNzdWVDYXRlZ29yeSIsImlzc3VlU2V2ZXJpdHkiLCJkZXRhaWxzIiwicHVzaCIsImdldElzc3VlcyIsImNoZWNrSWZJc3N1ZUV4aXN0cyIsImZpbmQiLCJpc3N1ZSIsImdldENvbnZlcnRlckNvbnRleHRGb3JUZXN0IiwiY29udmVydGVkVHlwZXMiLCJtYW5pZmVzdFNldHRpbmdzIiwiZW50aXR5U2V0IiwiZW50aXR5U2V0cyIsImVzIiwiZGF0YU1vZGVsUGF0aCIsImdldERhdGFNb2RlbE9iamVjdFBhdGhGb3JQcm9wZXJ0eSIsIkNvbnZlcnRlckNvbnRleHQiLCJtZXJnZSIsIm1ldGFNb2RlbENhY2hlIiwic01ldGFkYXRhVXJsIiwib1JlcXVlc3RvciIsIl9NZXRhZGF0YVJlcXVlc3RvciIsImNyZWF0ZSIsIk9EYXRhTWV0YU1vZGVsIiwidW5kZWZpbmVkIiwiZmV0Y2hFbnRpdHlDb250YWluZXIiLCJwcm9wZXJ0eSIsInRhcmdldFBhdGgiLCJzdGFydGluZ0VudGl0eVNldCIsIm5hdmlnYXRpb25Qcm9wZXJ0aWVzIiwidGFyZ2V0T2JqZWN0IiwidGFyZ2V0RW50aXR5U2V0IiwidGFyZ2V0RW50aXR5VHlwZSIsImVudGl0eVR5cGUiLCJjb250ZXh0TG9jYXRpb24iLCJldmFsdWF0ZUJpbmRpbmciLCJiaW5kaW5nU3RyaW5nIiwiYmluZGluZ0VsZW1lbnQiLCJCaW5kaW5nUGFyc2VyIiwiY29tcGxleFBhcnNlciIsImFyZ3MiLCJmb3JtYXR0ZXIiLCJhcHBseSIsImV2YWx1YXRlQmluZGluZ1dpdGhNb2RlbCIsIm1vZGVsQ29udGVudCIsIm5hbWVkTW9kZWxzQ29udGVudCIsInRleHQiLCJJbnZpc2libGVUZXh0IiwiYmluZFByb3BlcnR5IiwiZGVmYXVsdE1vZGVsIiwic2V0TW9kZWwiLCJzZXRCaW5kaW5nQ29udGV4dCIsIk9iamVjdCIsImVudHJpZXMiLCJjb250ZW50IiwiZ2V0VGV4dCIsIlRFU1RWSUVXSUQiLCJhcHBseUZsZXhDaGFuZ2VzIiwiYVZhcmlhbnREZXBlbmRlbnRDb250cm9sQ2hhbmdlcyIsInJlc3VsdFhNTCIsImNyZWF0ZUNoYW5nZXNPYmplY3QiLCJjaGFuZ2VzIiwiYXBwSWQiLCJvTWFuaWZlc3QiLCJpZCIsImNyb3NzTmF2aWdhdGlvbiIsIm91dGJvdW5kcyIsIm9BcHBDb21wb25lbnQiLCJnZXREaWFnbm9zdGljcyIsImZuIiwibW9ja1JldHVyblZhbHVlIiwiZ2V0Q29tcG9uZW50RGF0YSIsImdldE1hbmlmZXN0T2JqZWN0IiwiZ2V0RW50cnkiLCJzcHlPbiIsIkFwcFN0b3JhZ2UiLCJQcm9taXNlIiwiQ29tcG9uZW50IiwiVXRpbHMiLCJGbGV4U3RhdGUiLCJpbml0aWFsaXplIiwiY29tcG9uZW50SWQiLCJYbWxQcmVwcm9jZXNzb3IiLCJnZXRDaGFuZ2VzRnJvbVhNTCIsInhtbCIsInF1ZXJ5U2VsZWN0b3JBbGwiLCJmbGF0TWFwIiwiZSIsImF0dHJpYnV0ZXMiLCJtYXAiLCJhIiwiYXR0ciIsImdldFRlbXBsYXRpbmdSZXN1bHQiLCJ4bWxJbnB1dCIsIm1CaW5kaW5nQ29udGV4dHMiLCJtTW9kZWxzIiwidGVtcGxhdGVkWG1sIiwieG1sRG9jIiwiaGFzT3duUHJvcGVydHkiLCJhc3NpZ24iLCJUZW1wbGF0ZU1vZGVsIiwia2V5cyIsImZvckVhY2giLCJzTW9kZWxOYW1lIiwiaXNUZW1wbGF0ZU1vZGVsIiwiZGF0YSIsIm9QcmVwcm9jZXNzb3JTZXR0aW5ncyIsIm1ldGFNb2RlbCIsInNLZXkiLCJnZXRPYmplY3QiLCJ0b0JlRGVmaW5lZCIsIm9Nb2RlbCIsImNoYW5nZXNBcHBsaWVkIiwidG9CZSIsImdldFRlbXBsYXRlZFhNTCIsInNlcmlhbGl6ZUNvbnRyb2wiLCJjb250cm9sVG9TZXJpYWxpemUiLCJ0YWJDb3VudCIsImdldFRhYiIsInRvQWRkIiwidGFiIiwiaSIsInNlcmlhbGl6ZURlbGVnYXRlIiwic3RhcnQiLCJjb250cm9sIiwic0FnZ3JlZ2F0aW9uTmFtZSIsImNvbnRyb2xEZXRhaWwiLCJnZXRQYXJlbnQiLCJpbmRleEluUGFyZW50IiwiZ2V0QWdncmVnYXRpb24iLCJpbmRleE9mIiwiZ2V0TWV0YWRhdGEiLCJnZXROYW1lIiwiZW5kIiwibWlkZGxlIiwiZ2V0SWQiLCJvQ29udHJvbEtleSIsIm1Qcm9wZXJ0aWVzIiwibUJpbmRpbmdJbmZvcyIsImJpbmRpbmdEZXRhaWwiLCJwYXJ0cyIsImJpbmRpbmdJbmZvIiwibUFzc29jaWF0aW9ucyIsInN0YXJ0QWdncmVnYXRpb24iLCJzTmFtZSIsIm91dCIsImVuZEFnZ3JlZ2F0aW9uIiwiY29udHJvbFRvUmVuZGVyIiwiU2VyaWFsaXplciIsInNlcmlhbGl6ZSIsImNyZWF0ZUF3YWl0ZXIiLCJmblJlc29sdmUiLCJteVByb21pc2UiLCJwcm9taXNlIl0sInNvdXJjZVJvb3QiOiIuIiwic291cmNlcyI6WyJKZXN0VGVtcGxhdGluZ0hlbHBlci50cyJdLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgdHlwZSB7IEFueUFubm90YXRpb24sIENvbnZlcnRlZE1ldGFkYXRhLCBFbnRpdHlTZXQsIFByb3BlcnR5IH0gZnJvbSBcIkBzYXAtdXgvdm9jYWJ1bGFyaWVzLXR5cGVzXCI7XG5pbXBvcnQgY29tcGlsZXIgZnJvbSBcIkBzYXAvY2RzLWNvbXBpbGVyXCI7XG5pbXBvcnQgKiBhcyBmcyBmcm9tIFwiZnNcIjtcbmltcG9ydCAqIGFzIHBhdGggZnJvbSBcInBhdGhcIjtcbmltcG9ydCB0eXBlIHsgUmVxdWlyZWRPcHRpb25zIH0gZnJvbSBcInByZXR0aWVyXCI7XG5pbXBvcnQgeyBmb3JtYXQgfSBmcm9tIFwicHJldHRpZXJcIjtcbmltcG9ydCBMb2cgZnJvbSBcInNhcC9iYXNlL0xvZ1wiO1xuaW1wb3J0IG1lcmdlIGZyb20gXCJzYXAvYmFzZS91dGlsL21lcmdlXCI7XG5pbXBvcnQgQXBwQ29tcG9uZW50IGZyb20gXCJzYXAvZmUvY29yZS9BcHBDb21wb25lbnRcIjtcbmltcG9ydCB7IHJlZ2lzdGVyQnVpbGRpbmdCbG9jayB9IGZyb20gXCJzYXAvZmUvY29yZS9idWlsZGluZ0Jsb2Nrcy9CdWlsZGluZ0Jsb2NrUnVudGltZVwiO1xuaW1wb3J0IENvbnZlcnRlckNvbnRleHQgZnJvbSBcInNhcC9mZS9jb3JlL2NvbnZlcnRlcnMvQ29udmVydGVyQ29udGV4dFwiO1xuaW1wb3J0IHR5cGUgeyBJc3N1ZUNhdGVnb3J5LCBJc3N1ZVNldmVyaXR5IH0gZnJvbSBcInNhcC9mZS9jb3JlL2NvbnZlcnRlcnMvaGVscGVycy9Jc3N1ZU1hbmFnZXJcIjtcbmltcG9ydCB0eXBlIHsgTGlzdFJlcG9ydE1hbmlmZXN0U2V0dGluZ3MsIE9iamVjdFBhZ2VNYW5pZmVzdFNldHRpbmdzIH0gZnJvbSBcInNhcC9mZS9jb3JlL2NvbnZlcnRlcnMvTWFuaWZlc3RTZXR0aW5nc1wiO1xuaW1wb3J0IHR5cGUgeyBJRGlhZ25vc3RpY3MgfSBmcm9tIFwic2FwL2ZlL2NvcmUvY29udmVydGVycy9UZW1wbGF0ZUNvbnZlcnRlclwiO1xuaW1wb3J0IFNpZGVFZmZlY3RzRmFjdG9yeSBmcm9tIFwic2FwL2ZlL2NvcmUvc2VydmljZXMvU2lkZUVmZmVjdHNTZXJ2aWNlRmFjdG9yeVwiO1xuaW1wb3J0IFRlbXBsYXRlTW9kZWwgZnJvbSBcInNhcC9mZS9jb3JlL1RlbXBsYXRlTW9kZWxcIjtcbmltcG9ydCB0eXBlIHsgRGF0YU1vZGVsT2JqZWN0UGF0aCB9IGZyb20gXCJzYXAvZmUvY29yZS90ZW1wbGF0aW5nL0RhdGFNb2RlbFBhdGhIZWxwZXJcIjtcbmltcG9ydCBCaW5kaW5nUGFyc2VyIGZyb20gXCJzYXAvdWkvYmFzZS9CaW5kaW5nUGFyc2VyXCI7XG5pbXBvcnQgTWFuYWdlZE9iamVjdCBmcm9tIFwic2FwL3VpL2Jhc2UvTWFuYWdlZE9iamVjdFwiO1xuaW1wb3J0IENvbXBvbmVudCBmcm9tIFwic2FwL3VpL2NvcmUvQ29tcG9uZW50XCI7XG5pbXBvcnQgQ29udHJvbCBmcm9tIFwic2FwL3VpL2NvcmUvQ29udHJvbFwiO1xuaW1wb3J0IEludmlzaWJsZVRleHQgZnJvbSBcInNhcC91aS9jb3JlL0ludmlzaWJsZVRleHRcIjtcbmltcG9ydCBTZXJpYWxpemVyIGZyb20gXCJzYXAvdWkvY29yZS91dGlsL3NlcmlhbGl6ZXIvU2VyaWFsaXplclwiO1xuaW1wb3J0IFhNTFByZXByb2Nlc3NvciBmcm9tIFwic2FwL3VpL2NvcmUvdXRpbC9YTUxQcmVwcm9jZXNzb3JcIjtcbmltcG9ydCBGbGV4U3RhdGUgZnJvbSBcInNhcC91aS9mbC9hcHBseS9faW50ZXJuYWwvZmxleFN0YXRlL0ZsZXhTdGF0ZVwiO1xuaW1wb3J0IFhtbFByZXByb2Nlc3NvciBmcm9tIFwic2FwL3VpL2ZsL2FwcGx5L19pbnRlcm5hbC9wcmVwcm9jZXNzb3JzL1htbFByZXByb2Nlc3NvclwiO1xuaW1wb3J0IEFwcFN0b3JhZ2UgZnJvbSBcInNhcC91aS9mbC9pbml0aWFsL19pbnRlcm5hbC9TdG9yYWdlXCI7XG5pbXBvcnQgVXRpbHMgZnJvbSBcInNhcC91aS9mbC9VdGlsc1wiO1xuaW1wb3J0IHR5cGUgQ29udGV4dCBmcm9tIFwic2FwL3VpL21vZGVsL0NvbnRleHRcIjtcbmltcG9ydCBKU09OTW9kZWwgZnJvbSBcInNhcC91aS9tb2RlbC9qc29uL0pTT05Nb2RlbFwiO1xuaW1wb3J0IE1ldGFNb2RlbCBmcm9tIFwic2FwL3VpL21vZGVsL01ldGFNb2RlbFwiO1xuaW1wb3J0IF9NZXRhZGF0YVJlcXVlc3RvciBmcm9tIFwic2FwL3VpL21vZGVsL29kYXRhL3Y0L2xpYi9fTWV0YWRhdGFSZXF1ZXN0b3JcIjtcbmltcG9ydCBPRGF0YU1ldGFNb2RlbCBmcm9tIFwic2FwL3VpL21vZGVsL29kYXRhL3Y0L09EYXRhTWV0YU1vZGVsXCI7XG5pbXBvcnQgeHBhdGggZnJvbSBcInhwYXRoXCI7XG4vLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgQHR5cGVzY3JpcHQtZXNsaW50L25vLXZhci1yZXF1aXJlc1xuY29uc3QgZm9ybWF0WG1sID0gcmVxdWlyZShcInhtbC1mb3JtYXR0ZXJcIik7XG5cbkxvZy5zZXRMZXZlbCgxIGFzIGFueSwgXCJzYXAudWkuY29yZS51dGlsLlhNTFByZXByb2Nlc3NvclwiKTtcbmplc3Quc2V0VGltZW91dCg0MDAwMCk7XG5cbmNvbnN0IG5hbWVTcGFjZU1hcCA9IHtcblx0XCJtYWNyb3NcIjogXCJzYXAuZmUubWFjcm9zXCIsXG5cdFwibWFjcm9cIjogXCJzYXAuZmUubWFjcm9zXCIsXG5cdFwibWFjcm9kYXRhXCI6IFwiaHR0cDovL3NjaGVtYXMuc2FwLmNvbS9zYXB1aTUvZXh0ZW5zaW9uL3NhcC51aS5jb3JlLkN1c3RvbURhdGEvMVwiLFxuXHRcImxvZ1wiOiBcImh0dHA6Ly9zY2hlbWFzLnNhcC5jb20vc2FwdWk1L2V4dGVuc2lvbi9zYXAudWkuY29yZS5DdXN0b21EYXRhLzFcIixcblx0XCJ1bml0dGVzdFwiOiBcImh0dHA6Ly9zY2hlbWFzLnNhcC5jb20vc2FwdWk1L3ByZXByb2Nlc3NvcmV4dGVuc2lvbi9zYXAuZmUudW5pdHRlc3RpbmcvMVwiLFxuXHRcImNvbnRyb2xcIjogXCJzYXAuZmUuY29yZS5jb250cm9sc1wiLFxuXHRcImNvcmVcIjogXCJzYXAudWkuY29yZVwiLFxuXHRcIm1cIjogXCJzYXAubVwiLFxuXHRcImZcIjogXCJzYXAudWkubGF5b3V0LmZvcm1cIixcblx0XCJpbnRlcm5hbE1hY3JvXCI6IFwic2FwLmZlLm1hY3Jvcy5pbnRlcm5hbFwiLFxuXHRcIm1kY1wiOiBcInNhcC51aS5tZGNcIixcblx0XCJtZGNhdFwiOiBcInNhcC51aS5tZGMuYWN0aW9udG9vbGJhclwiLFxuXHRcIm1kY0ZpZWxkXCI6IFwic2FwLnVpLm1kYy5maWVsZFwiLFxuXHRcIm1kY1RhYmxlXCI6IFwic2FwLnVpLm1kYy50YWJsZVwiLFxuXHRcInVcIjogXCJzYXAudWkudW5pZmllZFwiLFxuXHRcIm1hY3JvTWljcm9DaGFydFwiOiBcInNhcC5mZS5tYWNyb3MubWljcm9jaGFydFwiLFxuXHRcIm1pY3JvQ2hhcnRcIjogXCJzYXAuc3VpdGUudWkubWljcm9jaGFydFwiLFxuXHRcIm1hY3JvVGFibGVcIjogXCJzYXAuZmUubWFjcm9zLnRhYmxlXCJcbn07XG5jb25zdCBzZWxlY3QgPSB4cGF0aC51c2VOYW1lc3BhY2VzKG5hbWVTcGFjZU1hcCk7XG5cbmV4cG9ydCBjb25zdCByZWdpc3Rlck1hY3JvID0gZnVuY3Rpb24gKG1hY3JvTWV0YWRhdGE6IGFueSkge1xuXHRyZWdpc3RlckJ1aWxkaW5nQmxvY2sobWFjcm9NZXRhZGF0YSk7XG59O1xuZXhwb3J0IGNvbnN0IHVucmVnaXN0ZXJNYWNybyA9IGZ1bmN0aW9uIChtYWNyb01ldGFkYXRhOiBhbnkpIHtcblx0WE1MUHJlcHJvY2Vzc29yLnBsdWdJbihudWxsLCBtYWNyb01ldGFkYXRhLm5hbWVzcGFjZSwgbWFjcm9NZXRhZGF0YS5uYW1lKTtcblx0aWYgKG1hY3JvTWV0YWRhdGEucHVibGljTmFtZXNwYWNlKSB7XG5cdFx0WE1MUHJlcHJvY2Vzc29yLnBsdWdJbihudWxsLCBtYWNyb01ldGFkYXRhLnB1YmxpY05hbWVzcGFjZSwgbWFjcm9NZXRhZGF0YS5uYW1lKTtcblx0fVxufTtcbmV4cG9ydCBjb25zdCBydW5YUGF0aFF1ZXJ5ID0gZnVuY3Rpb24gKHNlbGVjdG9yOiBzdHJpbmcsIHhtbGRvbTogTm9kZSB8IHVuZGVmaW5lZCkge1xuXHRyZXR1cm4gc2VsZWN0KHNlbGVjdG9yLCB4bWxkb20pO1xufTtcblxuZXhwZWN0LmV4dGVuZCh7XG5cdHRvSGF2ZUNvbnRyb2woeG1sZG9tLCBzZWxlY3Rvcikge1xuXHRcdGNvbnN0IG5vZGVzID0gcnVuWFBhdGhRdWVyeShgL3Jvb3Qke3NlbGVjdG9yfWAsIHhtbGRvbSk7XG5cdFx0cmV0dXJuIHtcblx0XHRcdG1lc3NhZ2U6ICgpID0+IHtcblx0XHRcdFx0Y29uc3Qgb3V0cHV0WG1sID0gc2VyaWFsaXplWE1MKHhtbGRvbSk7XG5cdFx0XHRcdHJldHVybiBgZGlkIG5vdCBmaW5kIGNvbnRyb2xzIG1hdGNoaW5nICR7c2VsZWN0b3J9IGluIGdlbmVyYXRlZCB4bWw6XFxuICR7b3V0cHV0WG1sfWA7XG5cdFx0XHR9LFxuXHRcdFx0cGFzczogbm9kZXMgJiYgbm9kZXMubGVuZ3RoID49IDFcblx0XHR9O1xuXHR9LFxuXHR0b05vdEhhdmVDb250cm9sKHhtbGRvbSwgc2VsZWN0b3IpIHtcblx0XHRjb25zdCBub2RlcyA9IHJ1blhQYXRoUXVlcnkoYC9yb290JHtzZWxlY3Rvcn1gLCB4bWxkb20pO1xuXHRcdHJldHVybiB7XG5cdFx0XHRtZXNzYWdlOiAoKSA9PiB7XG5cdFx0XHRcdGNvbnN0IG91dHB1dFhtbCA9IHNlcmlhbGl6ZVhNTCh4bWxkb20pO1xuXHRcdFx0XHRyZXR1cm4gYFRoZXJlIGlzIGEgY29udHJvbCBtYXRjaGluZyAke3NlbGVjdG9yfSBpbiBnZW5lcmF0ZWQgeG1sOlxcbiAke291dHB1dFhtbH1gO1xuXHRcdFx0fSxcblx0XHRcdHBhc3M6IG5vZGVzICYmIG5vZGVzLmxlbmd0aCA9PT0gMFxuXHRcdH07XG5cdH1cbn0pO1xuXG5leHBvcnQgY29uc3QgZm9ybWF0QnVpbGRpbmdCbG9ja1hNTCA9IGZ1bmN0aW9uICh4bWxTdHJpbmc6IHN0cmluZyB8IHN0cmluZ1tdKSB7XG5cdGlmIChBcnJheS5pc0FycmF5KHhtbFN0cmluZykpIHtcblx0XHR4bWxTdHJpbmcgPSB4bWxTdHJpbmcuam9pbihcIlwiKTtcblx0fVxuXHRsZXQgeG1sRm9ybWF0dGVkID0gZm9ybWF0WE1MKHhtbFN0cmluZyk7XG5cdHhtbEZvcm1hdHRlZCA9IHhtbEZvcm1hdHRlZC5yZXBsYWNlKC91aWQtLWlkLVswLTldezEzfS1bMC05XXsxLDJ9L2csIFwidWlkLS1pZFwiKTtcblx0cmV0dXJuIHhtbEZvcm1hdHRlZDtcbn07XG5cbmV4cG9ydCBjb25zdCBnZXRDb250cm9sQXR0cmlidXRlID0gZnVuY3Rpb24gKGNvbnRyb2xTZWxlY3Rvcjogc3RyaW5nLCBhdHRyaWJ1dGVOYW1lOiBzdHJpbmcsIHhtbERvbTogTm9kZSkge1xuXHRjb25zdCBzZWxlY3RvciA9IGBzdHJpbmcoL3Jvb3Qke2NvbnRyb2xTZWxlY3Rvcn0vQCR7YXR0cmlidXRlTmFtZX0pYDtcblx0cmV0dXJuIHJ1blhQYXRoUXVlcnkoc2VsZWN0b3IsIHhtbERvbSk7XG59O1xuXG5leHBvcnQgY29uc3Qgc2VyaWFsaXplWE1MID0gZnVuY3Rpb24gKHhtbERvbTogTm9kZSkge1xuXHRjb25zdCBzZXJpYWxpemVyID0gbmV3IHdpbmRvdy5YTUxTZXJpYWxpemVyKCk7XG5cdGNvbnN0IHhtbFN0cmluZyA9IHNlcmlhbGl6ZXIuc2VyaWFsaXplVG9TdHJpbmcoeG1sRG9tKTtcblx0cmV0dXJuIGZvcm1hdFhNTCh4bWxTdHJpbmcpO1xufTtcblxuZXhwb3J0IGNvbnN0IGZvcm1hdFhNTCA9IGZ1bmN0aW9uICh4bWxTdHJpbmc6IHN0cmluZykge1xuXHRyZXR1cm4gZm9ybWF0KFxuXHRcdHhtbFN0cmluZyxcblx0XHR7IHBhcnNlcjogXCJ4bWxcIiwgeG1sV2hpdGVzcGFjZVNlbnNpdGl2aXR5OiBcImlnbm9yZVwiIH0gYXMgUGFydGlhbDxSZXF1aXJlZE9wdGlvbnM+IC8qIG9wdGlvbnMgYnkgdGhlIFByZXR0aWVyIFhNTCBwbHVnaW4gKi9cblx0KTtcbn07XG5cbi8qKlxuICogQ29tcGlsZSBhIENEUyBmaWxlIGludG8gYW4gRURNWCBmaWxlLlxuICpcbiAqIEBwYXJhbSBjZHNVcmwgVGhlIHBhdGggdG8gdGhlIGZpbGUgY29udGFpbmluZyB0aGUgQ0RTIGRlZmluaXRpb24uIFRoaXMgZmlsZSBtdXN0IGRlY2xhcmUgdGhlIG5hbWVzcGFjZVxuICogc2FwLmZlLnRlc3QgYW5kIGEgc2VydmljZSBKZXN0U2VydmljZVxuICogQHBhcmFtIG9wdGlvbnMgT3B0aW9ucyBmb3IgY3JlYXRpbmcgdGhlIEVETVggb3V0cHV0XG4gKiBAcGFyYW0gZWRteEZpbGVOYW1lIEFsbG93cyB5b3UgdG8gb3ZlcnJpZGUgdGhlIG5hbWUgb2YgdGhlIGNvbXBpbGVkIEVETVggbWV0YWRhdGEgZmlsZVxuICogQHJldHVybnMgVGhlIHBhdGggb2YgdGhlIGdlbmVyYXRlZCBFRE1YXG4gKi9cbmV4cG9ydCBjb25zdCBjb21waWxlQ0RTID0gZnVuY3Rpb24gKFxuXHRjZHNVcmw6IHN0cmluZyxcblx0b3B0aW9uczogY29tcGlsZXIuT0RhdGFPcHRpb25zID0ge30sXG5cdGVkbXhGaWxlTmFtZSA9IHBhdGguYmFzZW5hbWUoY2RzVXJsKS5yZXBsYWNlKFwiLmNkc1wiLCBcIi54bWxcIilcbikge1xuXHRjb25zdCBjZHNTdHJpbmcgPSBmcy5yZWFkRmlsZVN5bmMoY2RzVXJsLCBcInV0Zi04XCIpO1xuXHRjb25zdCBlZG14Q29udGVudCA9IGNkczJlZG14KGNkc1N0cmluZywgXCJzYXAuZmUudGVzdC5KZXN0U2VydmljZVwiLCBvcHRpb25zKTtcblx0Y29uc3QgZGlyID0gcGF0aC5yZXNvbHZlKGNkc1VybCwgXCIuLlwiLCBcImdlblwiKTtcblxuXHRjb25zdCBlZG14RmlsZVBhdGggPSBwYXRoLnJlc29sdmUoZGlyLCBlZG14RmlsZU5hbWUpO1xuXG5cdGZzLm1rZGlyU3luYyhkaXIsIHsgcmVjdXJzaXZlOiB0cnVlIH0pO1xuXG5cdGZzLndyaXRlRmlsZVN5bmMoZWRteEZpbGVQYXRoLCBlZG14Q29udGVudCk7XG5cdHJldHVybiBlZG14RmlsZVBhdGg7XG59O1xuXG4vKipcbiAqIENvbXBpbGUgQ0RTIHRvIEVETVguXG4gKlxuICogQHBhcmFtIGNkcyBUaGUgQ0RTIG1vZGVsLiBJdCBtdXN0IGRlZmluZSBhdCBsZWFzdCBvbmUgc2VydmljZS5cbiAqIEBwYXJhbSBzZXJ2aWNlIFRoZSBmdWxseS1xdWFsaWZpZWQgbmFtZSBvZiB0aGUgc2VydmljZSB0byBiZSBjb21waWxlZC4gRGVmYXVsdHMgdG8gXCJzYXAuZmUudGVzdC5KZXN0U2VydmljZVwiLlxuICogQHBhcmFtIG9wdGlvbnMgT3B0aW9ucyBmb3IgY3JlYXRpbmcgdGhlIEVETVggb3V0cHV0XG4gKiBAcmV0dXJucyBUaGUgY29tcGlsZWQgc2VydmljZSBtb2RlbCBhcyBFRE1YLlxuICovXG5leHBvcnQgZnVuY3Rpb24gY2RzMmVkbXgoY2RzOiBzdHJpbmcsIHNlcnZpY2UgPSBcInNhcC5mZS50ZXN0Lkplc3RTZXJ2aWNlXCIsIG9wdGlvbnM6IGNvbXBpbGVyLk9EYXRhT3B0aW9ucyA9IHt9KSB7XG5cdGNvbnN0IHNvdXJjZXM6IFJlY29yZDxzdHJpbmcsIHN0cmluZz4gPSB7IFwic291cmNlLmNkc1wiOiBjZHMgfTtcblxuXHQvLyBhbGxvdyB0byBpbmNsdWRlIHN0dWZmIGZyb20gQHNhcC9jZHMvY29tbW9uXG5cdGlmIChjZHMuaW5jbHVkZXMoXCInQHNhcC9jZHMvY29tbW9uJ1wiKSkge1xuXHRcdHNvdXJjZXNbXCJjb21tb24uY2RzXCJdID0gZnMucmVhZEZpbGVTeW5jKHJlcXVpcmUucmVzb2x2ZShcIkBzYXAvY2RzL2NvbW1vbi5jZHNcIiksIFwidXRmLThcIik7XG5cdH1cblxuXHRjb25zdCBjc24gPSBjb21waWxlci5jb21waWxlU291cmNlcyhzb3VyY2VzLCB7fSk7XG5cblx0Y29uc3QgZWRteE9wdGlvbnM6IGNvbXBpbGVyLk9EYXRhT3B0aW9ucyA9IHtcblx0XHRvZGF0YUZvcmVpZ25LZXlzOiB0cnVlLFxuXHRcdG9kYXRhRm9ybWF0OiBcInN0cnVjdHVyZWRcIixcblx0XHRvZGF0YUNvbnRhaW5tZW50OiBmYWxzZSxcblx0XHQuLi5vcHRpb25zLFxuXHRcdHNlcnZpY2U6IHNlcnZpY2Vcblx0fTtcblxuXHRjb25zdCBlZG14ID0gY29tcGlsZXIudG8uZWRteChjc24sIGVkbXhPcHRpb25zKTtcblx0aWYgKCFlZG14KSB7XG5cdFx0dGhyb3cgbmV3IEVycm9yKGBDb21waWxhdGlvbiBmYWlsZWQuIEhpbnQ6IE1ha2Ugc3VyZSB0aGF0IHRoZSBDRFMgbW9kZWwgZGVmaW5lcyBzZXJ2aWNlICR7c2VydmljZX0uYCk7XG5cdH1cblx0cmV0dXJuIGVkbXg7XG59XG5cbmV4cG9ydCBjb25zdCBnZXRGYWtlU2lkZUVmZmVjdHNTZXJ2aWNlID0gYXN5bmMgZnVuY3Rpb24gKG9NZXRhTW9kZWw6IE9EYXRhTWV0YU1vZGVsKTogUHJvbWlzZTxhbnk+IHtcblx0Y29uc3Qgb1NlcnZpY2VDb250ZXh0ID0geyBzY29wZU9iamVjdDoge30sIHNjb3BlVHlwZTogXCJcIiwgc2V0dGluZ3M6IHt9IH07XG5cdHJldHVybiBuZXcgU2lkZUVmZmVjdHNGYWN0b3J5KCkuY3JlYXRlSW5zdGFuY2Uob1NlcnZpY2VDb250ZXh0KS50aGVuKGZ1bmN0aW9uIChvU2VydmljZUluc3RhbmNlOiBhbnkpIHtcblx0XHRjb25zdCBvSmVzdFNpZGVFZmZlY3RzU2VydmljZSA9IG9TZXJ2aWNlSW5zdGFuY2UuZ2V0SW50ZXJmYWNlKCk7XG5cdFx0b0plc3RTaWRlRWZmZWN0c1NlcnZpY2UuZ2V0Q29udGV4dCA9IGZ1bmN0aW9uICgpIHtcblx0XHRcdHJldHVybiB7XG5cdFx0XHRcdHNjb3BlT2JqZWN0OiB7XG5cdFx0XHRcdFx0Z2V0TW9kZWw6IGZ1bmN0aW9uICgpIHtcblx0XHRcdFx0XHRcdHJldHVybiB7XG5cdFx0XHRcdFx0XHRcdGdldE1ldGFNb2RlbDogZnVuY3Rpb24gKCkge1xuXHRcdFx0XHRcdFx0XHRcdHJldHVybiBvTWV0YU1vZGVsO1xuXHRcdFx0XHRcdFx0XHR9XG5cdFx0XHRcdFx0XHR9O1xuXHRcdFx0XHRcdH1cblx0XHRcdFx0fVxuXHRcdFx0fTtcblx0XHR9O1xuXHRcdHJldHVybiBvSmVzdFNpZGVFZmZlY3RzU2VydmljZTtcblx0fSk7XG59O1xuXG5leHBvcnQgY29uc3QgZ2V0RmFrZURpYWdub3N0aWNzID0gZnVuY3Rpb24gKCk6IElEaWFnbm9zdGljcyB7XG5cdGNvbnN0IGlzc3VlczogYW55W10gPSBbXTtcblx0cmV0dXJuIHtcblx0XHRhZGRJc3N1ZShpc3N1ZUNhdGVnb3J5OiBJc3N1ZUNhdGVnb3J5LCBpc3N1ZVNldmVyaXR5OiBJc3N1ZVNldmVyaXR5LCBkZXRhaWxzOiBzdHJpbmcpOiB2b2lkIHtcblx0XHRcdGlzc3Vlcy5wdXNoKHtcblx0XHRcdFx0aXNzdWVDYXRlZ29yeSxcblx0XHRcdFx0aXNzdWVTZXZlcml0eSxcblx0XHRcdFx0ZGV0YWlsc1xuXHRcdFx0fSk7XG5cdFx0fSxcblx0XHRnZXRJc3N1ZXMoKTogYW55W10ge1xuXHRcdFx0cmV0dXJuIGlzc3Vlcztcblx0XHR9LFxuXHRcdGNoZWNrSWZJc3N1ZUV4aXN0cyhpc3N1ZUNhdGVnb3J5OiBJc3N1ZUNhdGVnb3J5LCBpc3N1ZVNldmVyaXR5OiBJc3N1ZVNldmVyaXR5LCBkZXRhaWxzOiBzdHJpbmcpOiBib29sZWFuIHtcblx0XHRcdHJldHVybiBpc3N1ZXMuZmluZCgoaXNzdWUpID0+IHtcblx0XHRcdFx0cmV0dXJuIGlzc3VlLmlzc3VlQ2F0ZWdvcnkgPT09IGlzc3VlQ2F0ZWdvcnkgJiYgaXNzdWUuaXNzdWVTZXZlcml0eSA9PT0gaXNzdWVTZXZlcml0eSAmJiBpc3N1ZS5kZXRhaWxzID09PSBkZXRhaWxzO1xuXHRcdFx0fSk7XG5cdFx0fVxuXHR9O1xufTtcblxuZXhwb3J0IGNvbnN0IGdldENvbnZlcnRlckNvbnRleHRGb3JUZXN0ID0gZnVuY3Rpb24gKFxuXHRjb252ZXJ0ZWRUeXBlczogQ29udmVydGVkTWV0YWRhdGEsXG5cdG1hbmlmZXN0U2V0dGluZ3M6IExpc3RSZXBvcnRNYW5pZmVzdFNldHRpbmdzIHwgT2JqZWN0UGFnZU1hbmlmZXN0U2V0dGluZ3Ncbikge1xuXHRjb25zdCBlbnRpdHlTZXQgPSBjb252ZXJ0ZWRUeXBlcy5lbnRpdHlTZXRzLmZpbmQoKGVzKSA9PiBlcy5uYW1lID09PSBtYW5pZmVzdFNldHRpbmdzLmVudGl0eVNldCk7XG5cdGNvbnN0IGRhdGFNb2RlbFBhdGggPSBnZXREYXRhTW9kZWxPYmplY3RQYXRoRm9yUHJvcGVydHkoZW50aXR5U2V0IGFzIEVudGl0eVNldCwgY29udmVydGVkVHlwZXMsIGVudGl0eVNldCk7XG5cdHJldHVybiBuZXcgQ29udmVydGVyQ29udGV4dChjb252ZXJ0ZWRUeXBlcywgbWFuaWZlc3RTZXR0aW5ncywgZ2V0RmFrZURpYWdub3N0aWNzKCksIG1lcmdlLCBkYXRhTW9kZWxQYXRoKTtcbn07XG5jb25zdCBtZXRhTW9kZWxDYWNoZTogYW55ID0ge307XG5leHBvcnQgY29uc3QgZ2V0TWV0YU1vZGVsID0gYXN5bmMgZnVuY3Rpb24gKHNNZXRhZGF0YVVybDogc3RyaW5nKSB7XG5cdGNvbnN0IG9SZXF1ZXN0b3IgPSBfTWV0YWRhdGFSZXF1ZXN0b3IuY3JlYXRlKHt9LCBcIjQuMFwiLCB7fSk7XG5cdGlmICghbWV0YU1vZGVsQ2FjaGVbc01ldGFkYXRhVXJsXSkge1xuXHRcdGNvbnN0IG9NZXRhTW9kZWwgPSBuZXcgKE9EYXRhTWV0YU1vZGVsIGFzIGFueSkob1JlcXVlc3Rvciwgc01ldGFkYXRhVXJsLCB1bmRlZmluZWQsIG51bGwpO1xuXHRcdGF3YWl0IG9NZXRhTW9kZWwuZmV0Y2hFbnRpdHlDb250YWluZXIoKTtcblx0XHRtZXRhTW9kZWxDYWNoZVtzTWV0YWRhdGFVcmxdID0gb01ldGFNb2RlbDtcblx0fVxuXG5cdHJldHVybiBtZXRhTW9kZWxDYWNoZVtzTWV0YWRhdGFVcmxdO1xufTtcblxuZXhwb3J0IGNvbnN0IGdldERhdGFNb2RlbE9iamVjdFBhdGhGb3JQcm9wZXJ0eSA9IGZ1bmN0aW9uIChcblx0ZW50aXR5U2V0OiBFbnRpdHlTZXQsXG5cdGNvbnZlcnRlZFR5cGVzOiBDb252ZXJ0ZWRNZXRhZGF0YSxcblx0cHJvcGVydHk/OiBQcm9wZXJ0eSB8IEVudGl0eVNldCB8IEFueUFubm90YXRpb25cbik6IERhdGFNb2RlbE9iamVjdFBhdGgge1xuXHRjb25zdCB0YXJnZXRQYXRoOiBEYXRhTW9kZWxPYmplY3RQYXRoID0ge1xuXHRcdHN0YXJ0aW5nRW50aXR5U2V0OiBlbnRpdHlTZXQsXG5cdFx0bmF2aWdhdGlvblByb3BlcnRpZXM6IFtdLFxuXHRcdHRhcmdldE9iamVjdDogcHJvcGVydHksXG5cdFx0dGFyZ2V0RW50aXR5U2V0OiBlbnRpdHlTZXQsXG5cdFx0dGFyZ2V0RW50aXR5VHlwZTogZW50aXR5U2V0LmVudGl0eVR5cGUsXG5cdFx0Y29udmVydGVkVHlwZXM6IGNvbnZlcnRlZFR5cGVzXG5cdH07XG5cdHRhcmdldFBhdGguY29udGV4dExvY2F0aW9uID0gdGFyZ2V0UGF0aDtcblx0cmV0dXJuIHRhcmdldFBhdGg7XG59O1xuXG5leHBvcnQgY29uc3QgZXZhbHVhdGVCaW5kaW5nID0gZnVuY3Rpb24gKGJpbmRpbmdTdHJpbmc6IHN0cmluZywgLi4uYXJnczogYW55W10pIHtcblx0Y29uc3QgYmluZGluZ0VsZW1lbnQgPSBCaW5kaW5nUGFyc2VyLmNvbXBsZXhQYXJzZXIoYmluZGluZ1N0cmluZyk7XG5cdHJldHVybiBiaW5kaW5nRWxlbWVudC5mb3JtYXR0ZXIuYXBwbHkodW5kZWZpbmVkLCBhcmdzKTtcbn07XG5cbnR5cGUgTW9kZWxDb250ZW50ID0ge1xuXHRbbmFtZTogc3RyaW5nXTogYW55O1xufTtcblxuLyoqXG4gKiBFdmFsdWF0ZSBhIGJpbmRpbmcgYWdhaW5zdCBhIG1vZGVsLlxuICpcbiAqIEBwYXJhbSBiaW5kaW5nU3RyaW5nIFRoZSBiaW5kaW5nIHN0cmluZy5cbiAqIEBwYXJhbSBtb2RlbENvbnRlbnQgQ29udGVudCBvZiB0aGUgZGVmYXVsdCBtb2RlbCB0byB1c2UgZm9yIGV2YWx1YXRpb24uXG4gKiBAcGFyYW0gbmFtZWRNb2RlbHNDb250ZW50IENvbnRlbnRzIG9mIGFkZGl0aW9uYWwsIG5hbWVkIG1vZGVscyB0byB1c2UuXG4gKiBAcmV0dXJucyBUaGUgZXZhbHVhdGVkIGJpbmRpbmcuXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBldmFsdWF0ZUJpbmRpbmdXaXRoTW9kZWwoXG5cdGJpbmRpbmdTdHJpbmc6IHN0cmluZyB8IHVuZGVmaW5lZCxcblx0bW9kZWxDb250ZW50OiBNb2RlbENvbnRlbnQsXG5cdG5hbWVkTW9kZWxzQ29udGVudD86IHsgW21vZGVsTmFtZTogc3RyaW5nXTogTW9kZWxDb250ZW50IH1cbik6IHN0cmluZyB7XG5cdGNvbnN0IGJpbmRpbmdFbGVtZW50ID0gQmluZGluZ1BhcnNlci5jb21wbGV4UGFyc2VyKGJpbmRpbmdTdHJpbmcpO1xuXHRjb25zdCB0ZXh0ID0gbmV3IEludmlzaWJsZVRleHQoKTtcblx0dGV4dC5iaW5kUHJvcGVydHkoXCJ0ZXh0XCIsIGJpbmRpbmdFbGVtZW50KTtcblxuXHRjb25zdCBkZWZhdWx0TW9kZWwgPSBuZXcgSlNPTk1vZGVsKG1vZGVsQ29udGVudCk7XG5cdHRleHQuc2V0TW9kZWwoZGVmYXVsdE1vZGVsKTtcblx0dGV4dC5zZXRCaW5kaW5nQ29udGV4dChkZWZhdWx0TW9kZWwuY3JlYXRlQmluZGluZ0NvbnRleHQoXCIvXCIpIGFzIENvbnRleHQpO1xuXG5cdGlmIChuYW1lZE1vZGVsc0NvbnRlbnQpIHtcblx0XHRmb3IgKGNvbnN0IFtuYW1lLCBjb250ZW50XSBvZiBPYmplY3QuZW50cmllcyhuYW1lZE1vZGVsc0NvbnRlbnQpKSB7XG5cdFx0XHRjb25zdCBtb2RlbCA9IG5ldyBKU09OTW9kZWwoY29udGVudCk7XG5cdFx0XHR0ZXh0LnNldE1vZGVsKG1vZGVsLCBuYW1lKTtcblx0XHRcdHRleHQuc2V0QmluZGluZ0NvbnRleHQobW9kZWwuY3JlYXRlQmluZGluZ0NvbnRleHQoXCIvXCIpIGFzIENvbnRleHQsIG5hbWUpO1xuXHRcdH1cblx0fVxuXG5cdHJldHVybiB0ZXh0LmdldFRleHQoKTtcbn1cblxuY29uc3QgVEVTVFZJRVdJRCA9IFwidGVzdFZpZXdJZFwiO1xuXG5leHBvcnQgY29uc3QgYXBwbHlGbGV4Q2hhbmdlcyA9IGFzeW5jIGZ1bmN0aW9uIChcblx0YVZhcmlhbnREZXBlbmRlbnRDb250cm9sQ2hhbmdlczogYW55W10sXG5cdG9NZXRhTW9kZWw6IE1ldGFNb2RlbCxcblx0cmVzdWx0WE1MOiBhbnksXG5cdGNyZWF0ZUNoYW5nZXNPYmplY3Q6IEZ1bmN0aW9uXG4pIHtcblx0Y29uc3QgY2hhbmdlcyA9IGNyZWF0ZUNoYW5nZXNPYmplY3QoVEVTVFZJRVdJRCwgYVZhcmlhbnREZXBlbmRlbnRDb250cm9sQ2hhbmdlcyk7XG5cdGNvbnN0IGFwcElkID0gXCJzb21lQ29tcG9uZW50XCI7XG5cdGNvbnN0IG9NYW5pZmVzdCA9IHtcblx0XHRcInNhcC5hcHBcIjoge1xuXHRcdFx0aWQ6IGFwcElkLFxuXHRcdFx0dHlwZTogXCJhcHBsaWNhdGlvblwiLFxuXHRcdFx0Y3Jvc3NOYXZpZ2F0aW9uOiB7XG5cdFx0XHRcdG91dGJvdW5kczogW11cblx0XHRcdH1cblx0XHR9XG5cdH07XG5cdGNvbnN0IG9BcHBDb21wb25lbnQ6IEFwcENvbXBvbmVudCA9IHtcblx0XHRnZXREaWFnbm9zdGljczogamVzdC5mbigpLm1vY2tSZXR1cm5WYWx1ZShnZXRGYWtlRGlhZ25vc3RpY3MoKSksXG5cdFx0Z2V0TW9kZWw6IGplc3QuZm4oKS5tb2NrUmV0dXJuVmFsdWUoe1xuXHRcdFx0Z2V0TWV0YU1vZGVsOiBqZXN0LmZuKCkubW9ja1JldHVyblZhbHVlKG9NZXRhTW9kZWwpXG5cdFx0fSksXG5cdFx0Z2V0Q29tcG9uZW50RGF0YTogamVzdC5mbigpLm1vY2tSZXR1cm5WYWx1ZSh7fSksXG5cdFx0Z2V0TWFuaWZlc3RPYmplY3Q6IGplc3QuZm4oKS5tb2NrUmV0dXJuVmFsdWUoe1xuXHRcdFx0Z2V0RW50cnk6IGZ1bmN0aW9uIChuYW1lOiBzdHJpbmcpIHtcblx0XHRcdFx0cmV0dXJuIChvTWFuaWZlc3QgYXMgYW55KVtuYW1lXTtcblx0XHRcdH1cblx0XHR9KVxuXHR9IGFzIHVua25vd24gYXMgQXBwQ29tcG9uZW50O1xuXHQvL2Zha2UgY2hhbmdlc1xuXHRqZXN0LnNweU9uKEFwcFN0b3JhZ2UsIFwibG9hZEZsZXhEYXRhXCIpLm1vY2tSZXR1cm5WYWx1ZShQcm9taXNlLnJlc29sdmUoY2hhbmdlcykpO1xuXHRqZXN0LnNweU9uKENvbXBvbmVudCwgXCJnZXRcIikubW9ja1JldHVyblZhbHVlKG9BcHBDb21wb25lbnQpO1xuXHRqZXN0LnNweU9uKFV0aWxzLCBcImdldEFwcENvbXBvbmVudEZvckNvbnRyb2xcIikubW9ja1JldHVyblZhbHVlKG9BcHBDb21wb25lbnQpO1xuXHRhd2FpdCBGbGV4U3RhdGUuaW5pdGlhbGl6ZSh7XG5cdFx0Y29tcG9uZW50SWQ6IGFwcElkXG5cdH0pO1xuXHRyZXN1bHRYTUwgPSBhd2FpdCBYbWxQcmVwcm9jZXNzb3IucHJvY2VzcyhyZXN1bHRYTUwsIHsgbmFtZTogXCJUZXN0IEZyYWdtZW50XCIsIGNvbXBvbmVudElkOiBhcHBJZCwgaWQ6IFRFU1RWSUVXSUQgfSk7XG5cdHJldHVybiByZXN1bHRYTUw7XG59O1xuXG5leHBvcnQgY29uc3QgZ2V0Q2hhbmdlc0Zyb21YTUwgPSAoeG1sOiBhbnkpID0+XG5cdFsuLi54bWwucXVlcnlTZWxlY3RvckFsbChcIipcIildXG5cdFx0LmZsYXRNYXAoKGUpID0+IFsuLi5lLmF0dHJpYnV0ZXNdLm1hcCgoYSkgPT4gYS5uYW1lKSlcblx0XHQuZmlsdGVyKChhdHRyKSA9PiBhdHRyLmluY2x1ZGVzKFwic2FwLnVpLmZsLmFwcGxpZWRDaGFuZ2VzXCIpKTtcblxuZXhwb3J0IGNvbnN0IGdldFRlbXBsYXRpbmdSZXN1bHQgPSBhc3luYyBmdW5jdGlvbiAoXG5cdHhtbElucHV0OiBzdHJpbmcsXG5cdHNNZXRhZGF0YVVybDogc3RyaW5nLFxuXHRtQmluZGluZ0NvbnRleHRzOiB7IFt4OiBzdHJpbmddOiBhbnk7IGVudGl0eVNldD86IHN0cmluZyB9LFxuXHRtTW9kZWxzOiB7IFt4OiBzdHJpbmddOiBhbnkgfSxcblx0YVZhcmlhbnREZXBlbmRlbnRDb250cm9sQ2hhbmdlcz86IGFueVtdLFxuXHRjcmVhdGVDaGFuZ2VzT2JqZWN0PzogRnVuY3Rpb25cbikge1xuXHRjb25zdCB0ZW1wbGF0ZWRYbWwgPSBgPHJvb3Q+JHt4bWxJbnB1dH08L3Jvb3Q+YDtcblx0Y29uc3QgcGFyc2VyID0gbmV3IHdpbmRvdy5ET01QYXJzZXIoKTtcblx0Y29uc3QgeG1sRG9jID0gcGFyc2VyLnBhcnNlRnJvbVN0cmluZyh0ZW1wbGF0ZWRYbWwsIFwidGV4dC94bWxcIik7XG5cdC8vIFRvIGVuc3VyZSBvdXIgbWFjcm8gY2FuIHVzZSAjc2V0QmluZGluZ0NvbnRleHQgd2UgZW5zdXJlIHRoZXJlIGlzIGEgcHJlIGV4aXN0aW5nIEpTT05Nb2RlbCBmb3IgY29udmVydGVyQ29udGV4dFxuXHQvLyBpZiBub3QgYWxyZWFkeSBwYXNzZWQgdG8gdGVoIHRlbXBsYXRpbmdcblxuXHRjb25zdCBvTWV0YU1vZGVsID0gYXdhaXQgZ2V0TWV0YU1vZGVsKHNNZXRhZGF0YVVybCk7XG5cdGlmICghbU1vZGVscy5oYXNPd25Qcm9wZXJ0eShcImNvbnZlcnRlckNvbnRleHRcIikpIHtcblx0XHRtTW9kZWxzID0gT2JqZWN0LmFzc2lnbihtTW9kZWxzLCB7IFwiY29udmVydGVyQ29udGV4dFwiOiBuZXcgVGVtcGxhdGVNb2RlbCh7fSwgb01ldGFNb2RlbCkgfSk7XG5cdH1cblxuXHRPYmplY3Qua2V5cyhtTW9kZWxzKS5mb3JFYWNoKGZ1bmN0aW9uIChzTW9kZWxOYW1lKSB7XG5cdFx0aWYgKG1Nb2RlbHNbc01vZGVsTmFtZV0gJiYgbU1vZGVsc1tzTW9kZWxOYW1lXS5pc1RlbXBsYXRlTW9kZWwpIHtcblx0XHRcdG1Nb2RlbHNbc01vZGVsTmFtZV0gPSBuZXcgVGVtcGxhdGVNb2RlbChtTW9kZWxzW3NNb2RlbE5hbWVdLmRhdGEsIG9NZXRhTW9kZWwpO1xuXHRcdH1cblx0fSk7XG5cblx0Y29uc3Qgb1ByZXByb2Nlc3NvclNldHRpbmdzOiBhbnkgPSB7XG5cdFx0bW9kZWxzOiBPYmplY3QuYXNzaWduKFxuXHRcdFx0e1xuXHRcdFx0XHRtZXRhTW9kZWw6IG9NZXRhTW9kZWxcblx0XHRcdH0sXG5cdFx0XHRtTW9kZWxzXG5cdFx0KSxcblx0XHRiaW5kaW5nQ29udGV4dHM6IHt9XG5cdH07XG5cblx0Ly9JbmplY3QgbW9kZWxzIGFuZCBiaW5kaW5nQ29udGV4dHNcblx0T2JqZWN0LmtleXMobUJpbmRpbmdDb250ZXh0cykuZm9yRWFjaChmdW5jdGlvbiAoc0tleSkge1xuXHRcdC8qIEFzc2VydCB0byBtYWtlIHN1cmUgdGhlIGFubm90YXRpb25zIGFyZSBpbiB0aGUgdGVzdCBtZXRhZGF0YSAtPiBhdm9pZCBtaXNsZWFkaW5nIHRlc3RzICovXG5cdFx0ZXhwZWN0KHR5cGVvZiBvTWV0YU1vZGVsLmdldE9iamVjdChtQmluZGluZ0NvbnRleHRzW3NLZXldKSkudG9CZURlZmluZWQoKTtcblx0XHRjb25zdCBvTW9kZWwgPSBtTW9kZWxzW3NLZXldIHx8IG9NZXRhTW9kZWw7XG5cdFx0b1ByZXByb2Nlc3NvclNldHRpbmdzLmJpbmRpbmdDb250ZXh0c1tzS2V5XSA9IG9Nb2RlbC5jcmVhdGVCaW5kaW5nQ29udGV4dChtQmluZGluZ0NvbnRleHRzW3NLZXldKTsgLy9WYWx1ZSBpcyBzUGF0aFxuXHRcdG9QcmVwcm9jZXNzb3JTZXR0aW5ncy5tb2RlbHNbc0tleV0gPSBvTW9kZWw7XG5cdH0pO1xuXG5cdC8vVGhpcyBjb250ZXh0IGZvciBtYWNybyB0ZXN0aW5nXG5cdGlmIChvUHJlcHJvY2Vzc29yU2V0dGluZ3MubW9kZWxzW1widGhpc1wiXSkge1xuXHRcdG9QcmVwcm9jZXNzb3JTZXR0aW5ncy5iaW5kaW5nQ29udGV4dHNbXCJ0aGlzXCJdID0gb1ByZXByb2Nlc3NvclNldHRpbmdzLm1vZGVsc1tcInRoaXNcIl0uY3JlYXRlQmluZGluZ0NvbnRleHQoXCIvXCIpO1xuXHR9XG5cblx0bGV0IHJlc3VsdFhNTCA9IGF3YWl0IFhNTFByZXByb2Nlc3Nvci5wcm9jZXNzKHhtbERvYy5maXJzdEVsZW1lbnRDaGlsZCEsIHsgbmFtZTogXCJUZXN0IEZyYWdtZW50XCIgfSwgb1ByZXByb2Nlc3NvclNldHRpbmdzKTtcblxuXHRpZiAoYVZhcmlhbnREZXBlbmRlbnRDb250cm9sQ2hhbmdlcyAmJiBjcmVhdGVDaGFuZ2VzT2JqZWN0KSB7XG5cdFx0Ly8gcHJlZml4IElkc1xuXHRcdFsuLi5yZXN1bHRYTUwucXVlcnlTZWxlY3RvckFsbChcIltpZF1cIildLmZvckVhY2goKG5vZGUpID0+IHtcblx0XHRcdG5vZGUuaWQgPSBgJHtURVNUVklFV0lEfS0tJHtub2RlLmlkfWA7XG5cdFx0fSk7XG5cdFx0Ly8gYXBwbHkgZmxleCBjaGFuZ2VzXG5cdFx0cmVzdWx0WE1MID0gYXdhaXQgYXBwbHlGbGV4Q2hhbmdlcyhhVmFyaWFudERlcGVuZGVudENvbnRyb2xDaGFuZ2VzLCBvTWV0YU1vZGVsLCByZXN1bHRYTUwsIGNyZWF0ZUNoYW5nZXNPYmplY3QpO1xuXHRcdC8vQXNzZXJ0IHRoYXQgYWxsIGNoYW5nZXMgaGF2ZSBiZWVuIGFwcGxpZWRcblx0XHRjb25zdCBjaGFuZ2VzQXBwbGllZCA9IGdldENoYW5nZXNGcm9tWE1MKHJlc3VsdFhNTCk7XG5cdFx0ZXhwZWN0KGNoYW5nZXNBcHBsaWVkLmxlbmd0aCkudG9CZShhVmFyaWFudERlcGVuZGVudENvbnRyb2xDaGFuZ2VzLmxlbmd0aCk7XG5cdH1cblx0cmV0dXJuIHJlc3VsdFhNTDtcbn07XG5cbmV4cG9ydCBjb25zdCBnZXRUZW1wbGF0ZWRYTUwgPSBhc3luYyBmdW5jdGlvbiAoXG5cdHhtbElucHV0OiBzdHJpbmcsXG5cdHNNZXRhZGF0YVVybDogc3RyaW5nLFxuXHRtQmluZGluZ0NvbnRleHRzOiB7IFt4OiBzdHJpbmddOiBhbnk7IGVudGl0eVNldD86IHN0cmluZyB9LFxuXHRtTW9kZWxzOiB7IFt4OiBzdHJpbmddOiBhbnkgfSxcblx0YVZhcmlhbnREZXBlbmRlbnRDb250cm9sQ2hhbmdlcz86IGFueVtdLFxuXHRjcmVhdGVDaGFuZ2VzT2JqZWN0PzogRnVuY3Rpb25cbikge1xuXHRjb25zdCB0ZW1wbGF0ZWRYTUwgPSBhd2FpdCBnZXRUZW1wbGF0aW5nUmVzdWx0KFxuXHRcdHhtbElucHV0LFxuXHRcdHNNZXRhZGF0YVVybCxcblx0XHRtQmluZGluZ0NvbnRleHRzLFxuXHRcdG1Nb2RlbHMsXG5cdFx0YVZhcmlhbnREZXBlbmRlbnRDb250cm9sQ2hhbmdlcyxcblx0XHRjcmVhdGVDaGFuZ2VzT2JqZWN0XG5cdCk7XG5cdHJldHVybiBzZXJpYWxpemVYTUwodGVtcGxhdGVkWE1MKTtcbn07XG5cbi8qKlxuICogUHJvY2VzcyB0aGUgcmVxdWVzdGVkIFhNTCBmcmFnbWVudCB3aXRoIHRoZSBwcm92aWRlZCBkYXRhLlxuICpcbiAqIEBwYXJhbSBuYW1lIEZ1bGx5IHF1YWxpZmllZCBuYW1lIG9mIHRoZSBmcmFnbWVudCB0byBiZSB0ZXN0ZWQuXG4gKiBAcGFyYW0gdGVzdERhdGEgVGVzdCBkYXRhIGNvbnNpc3RpbmdcbiAqIEByZXR1cm5zIFRlbXBsYXRlZCBmcmFnbWVudCBhcyBzdHJpbmdcbiAqL1xuZXhwb3J0IGFzeW5jIGZ1bmN0aW9uIHByb2Nlc3NGcmFnbWVudChuYW1lOiBzdHJpbmcsIHRlc3REYXRhOiB7IFttb2RlbDogc3RyaW5nXTogb2JqZWN0IH0pOiBQcm9taXNlPHN0cmluZz4ge1xuXHRjb25zdCBpbnB1dFhtbCA9IGA8cm9vdD48Y29yZTpGcmFnbWVudCBmcmFnbWVudE5hbWU9XCIke25hbWV9XCIgdHlwZT1cIlhNTFwiIHhtbG5zOmNvcmU9XCJzYXAudWkuY29yZVwiIC8+PC9yb290PmA7XG5cdGNvbnN0IHBhcnNlciA9IG5ldyB3aW5kb3cuRE9NUGFyc2VyKCk7XG5cdGNvbnN0IGlucHV0RG9jID0gcGFyc2VyLnBhcnNlRnJvbVN0cmluZyhpbnB1dFhtbCwgXCJ0ZXh0L3htbFwiKTtcblxuXHQvLyBidWlsZCBtb2RlbCBhbmQgYmluZGluZ3MgZm9yIGdpdmVuIHRlc3QgZGF0YVxuXHRjb25zdCBzZXR0aW5ncyA9IHtcblx0XHRtb2RlbHM6IHt9IGFzIHsgW25hbWU6IHN0cmluZ106IEpTT05Nb2RlbCB9LFxuXHRcdGJpbmRpbmdDb250ZXh0czoge30gYXMgeyBbbmFtZTogc3RyaW5nXTogb2JqZWN0IH1cblx0fTtcblx0Zm9yIChjb25zdCBtb2RlbCBpbiB0ZXN0RGF0YSkge1xuXHRcdGNvbnN0IGpzb25Nb2RlbCA9IG5ldyBKU09OTW9kZWwoKTtcblx0XHRqc29uTW9kZWwuc2V0RGF0YSh0ZXN0RGF0YVttb2RlbF0pO1xuXHRcdHNldHRpbmdzLm1vZGVsc1ttb2RlbF0gPSBqc29uTW9kZWw7XG5cdFx0c2V0dGluZ3MuYmluZGluZ0NvbnRleHRzW21vZGVsXSA9IHNldHRpbmdzLm1vZGVsc1ttb2RlbF0uY3JlYXRlQmluZGluZ0NvbnRleHQoXCIvXCIpIGFzIENvbnRleHQ7XG5cdH1cblxuXHQvLyBleGVjdXRlIHRoZSBwcmUtcHJvY2Vzc29yXG5cdGNvbnN0IHJlc3VsdERvYyA9IGF3YWl0IFhNTFByZXByb2Nlc3Nvci5wcm9jZXNzKGlucHV0RG9jLmZpcnN0RWxlbWVudENoaWxkLCB7IG5hbWUgfSwgc2V0dGluZ3MpO1xuXG5cdC8vIGV4Y2x1ZGUgbmVzdGVkIGZyYWdtZW50cyBmcm9tIHRlc3Qgc25hcHNob3RzXG5cdGNvbnN0IGZyYWdtZW50cyA9IHJlc3VsdERvYy5nZXRFbGVtZW50c0J5VGFnTmFtZShcImNvcmU6RnJhZ21lbnRcIik7XG5cdGlmIChmcmFnbWVudHM/Lmxlbmd0aCA+IDApIHtcblx0XHRmb3IgKGNvbnN0IGZyYWdtZW50IG9mIGZyYWdtZW50cykge1xuXHRcdFx0ZnJhZ21lbnQuaW5uZXJIVE1MID0gXCJcIjtcblx0XHR9XG5cdH1cblxuXHQvLyBLZWVwIHRoZSBmcmFnbWVudCByZXN1bHQgYXMgY2hpbGQgb2Ygcm9vdCBub2RlIHdoZW4gZnJhZ21lbnQgZ2VuZXJhdGVzIG11bHRpcGxlIHJvb3QgY29udHJvbHNcblx0Y29uc3QgeG1sUmVzdWx0ID0gcmVzdWx0RG9jLmNoaWxkcmVuLmxlbmd0aCA+IDEgPyByZXN1bHREb2Mub3V0ZXJIVE1MIDogcmVzdWx0RG9jLmlubmVySFRNTDtcblxuXHRyZXR1cm4gZm9ybWF0WG1sKHhtbFJlc3VsdCwge1xuXHRcdGZpbHRlcjogKG5vZGU6IGFueSkgPT4gbm9kZS50eXBlICE9PSBcIkNvbW1lbnRcIlxuXHR9KTtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIHNlcmlhbGl6ZUNvbnRyb2woY29udHJvbFRvU2VyaWFsaXplOiBDb250cm9sIHwgQ29udHJvbFtdKSB7XG5cdGxldCB0YWJDb3VudCA9IDA7XG5cdGZ1bmN0aW9uIGdldFRhYih0b0FkZDogbnVtYmVyID0gMCkge1xuXHRcdGxldCB0YWIgPSBcIlwiO1xuXHRcdGZvciAobGV0IGkgPSAwOyBpIDwgdGFiQ291bnQgKyB0b0FkZDsgaSsrKSB7XG5cdFx0XHR0YWIgKz0gXCJcXHRcIjtcblx0XHR9XG5cdFx0cmV0dXJuIHRhYjtcblx0fVxuXHRjb25zdCBzZXJpYWxpemVEZWxlZ2F0ZSA9IHtcblx0XHRzdGFydDogZnVuY3Rpb24gKGNvbnRyb2w6IGFueSwgc0FnZ3JlZ2F0aW9uTmFtZTogc3RyaW5nKSB7XG5cdFx0XHRsZXQgY29udHJvbERldGFpbCA9IFwiXCI7XG5cdFx0XHRpZiAoc0FnZ3JlZ2F0aW9uTmFtZSkge1xuXHRcdFx0XHRpZiAoY29udHJvbC5nZXRQYXJlbnQoKSkge1xuXHRcdFx0XHRcdGNvbnN0IGluZGV4SW5QYXJlbnQgPSAoY29udHJvbC5nZXRQYXJlbnQoKS5nZXRBZ2dyZWdhdGlvbihzQWdncmVnYXRpb25OYW1lKSBhcyBNYW5hZ2VkT2JqZWN0W10pLmluZGV4T2YoY29udHJvbCk7XG5cdFx0XHRcdFx0aWYgKGluZGV4SW5QYXJlbnQgPiAwKSB7XG5cdFx0XHRcdFx0XHRjb250cm9sRGV0YWlsICs9IGAsXFxuJHtnZXRUYWIoKX1gO1xuXHRcdFx0XHRcdH1cblx0XHRcdFx0fVxuXHRcdFx0fVxuXHRcdFx0Y29udHJvbERldGFpbCArPSBgJHtjb250cm9sLmdldE1ldGFkYXRhKCkuZ2V0TmFtZSgpfShgO1xuXHRcdFx0cmV0dXJuIGNvbnRyb2xEZXRhaWw7XG5cdFx0fSxcblx0XHRlbmQ6IGZ1bmN0aW9uICgpIHtcblx0XHRcdHJldHVybiBcIn0pXCI7XG5cdFx0fSxcblx0XHRtaWRkbGU6IGZ1bmN0aW9uIChjb250cm9sOiBhbnkpIHtcblx0XHRcdGxldCBkYXRhID0gYHtpZDogJHtjb250cm9sLmdldElkKCl9YDtcblx0XHRcdGZvciAoY29uc3Qgb0NvbnRyb2xLZXkgaW4gY29udHJvbC5tUHJvcGVydGllcykge1xuXHRcdFx0XHRpZiAoY29udHJvbC5tUHJvcGVydGllcy5oYXNPd25Qcm9wZXJ0eShvQ29udHJvbEtleSkpIHtcblx0XHRcdFx0XHRkYXRhICs9IGAsXFxuJHtnZXRUYWIoKX0gJHtvQ29udHJvbEtleX06ICR7Y29udHJvbC5tUHJvcGVydGllc1tvQ29udHJvbEtleV19YDtcblx0XHRcdFx0fSBlbHNlIGlmIChjb250cm9sLm1CaW5kaW5nSW5mb3MuaGFzT3duUHJvcGVydHkob0NvbnRyb2xLZXkpKSB7XG5cdFx0XHRcdFx0Y29uc3QgYmluZGluZ0RldGFpbCA9IGNvbnRyb2wubUJpbmRpbmdJbmZvc1tvQ29udHJvbEtleV07XG5cdFx0XHRcdFx0ZGF0YSArPSBgLFxcbiR7Z2V0VGFiKCl9ICR7b0NvbnRyb2xLZXl9OiBmb3JtYXR0ZXIoJHtiaW5kaW5nRGV0YWlsLnBhcnRzLm1hcChcblx0XHRcdFx0XHRcdChiaW5kaW5nSW5mbzogYW55KSA9PiBgXFxuJHtnZXRUYWIoMSl9JHtiaW5kaW5nSW5mby5tb2RlbCA/IGJpbmRpbmdJbmZvLm1vZGVsIDogXCJcIn0+JHtiaW5kaW5nSW5mby5wYXRofWBcblx0XHRcdFx0XHQpfSlgO1xuXHRcdFx0XHR9XG5cdFx0XHR9XG5cdFx0XHRmb3IgKGNvbnN0IG9Db250cm9sS2V5IGluIGNvbnRyb2wubUFzc29jaWF0aW9ucykge1xuXHRcdFx0XHRpZiAoY29udHJvbC5tQXNzb2NpYXRpb25zLmhhc093blByb3BlcnR5KG9Db250cm9sS2V5KSkge1xuXHRcdFx0XHRcdGRhdGEgKz0gYCxcXG4ke2dldFRhYigpfSAke29Db250cm9sS2V5fTogJHtjb250cm9sLm1Bc3NvY2lhdGlvbnNbb0NvbnRyb2xLZXldWzBdfWA7XG5cdFx0XHRcdH1cblx0XHRcdH1cblx0XHRcdGRhdGEgKz0gYGA7XG5cdFx0XHRyZXR1cm4gZGF0YTtcblx0XHR9LFxuXHRcdHN0YXJ0QWdncmVnYXRpb246IGZ1bmN0aW9uIChjb250cm9sOiBhbnksIHNOYW1lOiBzdHJpbmcpIHtcblx0XHRcdGxldCBvdXQgPSBgLFxcbiR7Z2V0VGFiKCl9JHtzTmFtZX1gO1xuXHRcdFx0dGFiQ291bnQrKztcblxuXHRcdFx0aWYgKGNvbnRyb2wubUJpbmRpbmdJbmZvc1tzTmFtZV0pIHtcblx0XHRcdFx0b3V0ICs9IGA9eyBwYXRoOicke2NvbnRyb2wubUJpbmRpbmdJbmZvc1tzTmFtZV0ucGF0aH0nLCB0ZW1wbGF0ZTpcXG4ke2dldFRhYigpfWA7XG5cdFx0XHR9IGVsc2Uge1xuXHRcdFx0XHRvdXQgKz0gYD1bXFxuJHtnZXRUYWIoKX1gO1xuXHRcdFx0fVxuXHRcdFx0cmV0dXJuIG91dDtcblx0XHR9LFxuXHRcdGVuZEFnZ3JlZ2F0aW9uOiBmdW5jdGlvbiAoY29udHJvbDogYW55LCBzTmFtZTogc3RyaW5nKSB7XG5cdFx0XHR0YWJDb3VudC0tO1xuXHRcdFx0aWYgKGNvbnRyb2wubUJpbmRpbmdJbmZvc1tzTmFtZV0pIHtcblx0XHRcdFx0cmV0dXJuIGBcXG4ke2dldFRhYigpfX1gO1xuXHRcdFx0fSBlbHNlIHtcblx0XHRcdFx0cmV0dXJuIGBcXG4ke2dldFRhYigpfV1gO1xuXHRcdFx0fVxuXHRcdH1cblx0fTtcblx0aWYgKEFycmF5LmlzQXJyYXkoY29udHJvbFRvU2VyaWFsaXplKSkge1xuXHRcdHJldHVybiBjb250cm9sVG9TZXJpYWxpemUubWFwKChjb250cm9sVG9SZW5kZXI6IENvbnRyb2wpID0+IHtcblx0XHRcdHJldHVybiBuZXcgU2VyaWFsaXplcihjb250cm9sVG9SZW5kZXIsIHNlcmlhbGl6ZURlbGVnYXRlKS5zZXJpYWxpemUoKTtcblx0XHR9KTtcblx0fSBlbHNlIHtcblx0XHRyZXR1cm4gbmV3IFNlcmlhbGl6ZXIoY29udHJvbFRvU2VyaWFsaXplLCBzZXJpYWxpemVEZWxlZ2F0ZSkuc2VyaWFsaXplKCk7XG5cdH1cbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGNyZWF0ZUF3YWl0ZXIoKSB7XG5cdGxldCBmblJlc29sdmUhOiBGdW5jdGlvbjtcblx0Y29uc3QgbXlQcm9taXNlID0gbmV3IFByb21pc2UoKHJlc29sdmUpID0+IHtcblx0XHRmblJlc29sdmUgPSByZXNvbHZlO1xuXHR9KTtcblx0cmV0dXJuIHsgcHJvbWlzZTogbXlQcm9taXNlLCByZXNvbHZlOiBmblJlc29sdmUgfTtcbn1cbiJdLCJtYXBwaW5ncyI6IjtBQUFBO0FBQUE7QUFBQTs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7O0VBbWJBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO01BQ3NCQSxlLGFBQWdCQyxJLEVB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
|
|
@@ -110,7 +110,7 @@ export const getControlAttribute = function (controlSelector: string, attributeN
|
|
|
110
110
|
return runXPathQuery(selector, xmlDom);
|
|
111
111
|
};
|
|
112
112
|
|
|
113
|
-
const serializeXML = function (xmlDom: Node) {
|
|
113
|
+
export const serializeXML = function (xmlDom: Node) {
|
|
114
114
|
const serializer = new window.XMLSerializer();
|
|
115
115
|
const xmlString = serializer.serializeToString(xmlDom);
|
|
116
116
|
return formatXML(xmlString);
|
|
@@ -158,7 +158,14 @@ export const compileCDS = function (
|
|
|
158
158
|
* @returns The compiled service model as EDMX.
|
|
159
159
|
*/
|
|
160
160
|
export function cds2edmx(cds: string, service = "sap.fe.test.JestService", options: compiler.ODataOptions = {}) {
|
|
161
|
-
const
|
|
161
|
+
const sources: Record<string, string> = { "source.cds": cds };
|
|
162
|
+
|
|
163
|
+
// allow to include stuff from @sap/cds/common
|
|
164
|
+
if (cds.includes("'@sap/cds/common'")) {
|
|
165
|
+
sources["common.cds"] = fs.readFileSync(require.resolve("@sap/cds/common.cds"), "utf-8");
|
|
166
|
+
}
|
|
167
|
+
|
|
168
|
+
const csn = compiler.compileSources(sources, {});
|
|
162
169
|
|
|
163
170
|
const edmxOptions: compiler.ODataOptions = {
|
|
164
171
|
odataForeignKeys: true,
|
|
@@ -479,12 +486,14 @@ export function serializeControl(controlToSerialize: Control | Control[]) {
|
|
|
479
486
|
return tab;
|
|
480
487
|
}
|
|
481
488
|
const serializeDelegate = {
|
|
482
|
-
start: function (control:
|
|
489
|
+
start: function (control: any, sAggregationName: string) {
|
|
483
490
|
let controlDetail = "";
|
|
484
491
|
if (sAggregationName) {
|
|
485
|
-
|
|
486
|
-
|
|
487
|
-
|
|
492
|
+
if (control.getParent()) {
|
|
493
|
+
const indexInParent = (control.getParent().getAggregation(sAggregationName) as ManagedObject[]).indexOf(control);
|
|
494
|
+
if (indexInParent > 0) {
|
|
495
|
+
controlDetail += `,\n${getTab()}`;
|
|
496
|
+
}
|
|
488
497
|
}
|
|
489
498
|
}
|
|
490
499
|
controlDetail += `${control.getMetadata().getName()}(`;
|
|
@@ -513,15 +522,24 @@ export function serializeControl(controlToSerialize: Control | Control[]) {
|
|
|
513
522
|
data += ``;
|
|
514
523
|
return data;
|
|
515
524
|
},
|
|
516
|
-
startAggregation: function (control:
|
|
525
|
+
startAggregation: function (control: any, sName: string) {
|
|
517
526
|
let out = `,\n${getTab()}${sName}`;
|
|
518
527
|
tabCount++;
|
|
519
|
-
|
|
528
|
+
|
|
529
|
+
if (control.mBindingInfos[sName]) {
|
|
530
|
+
out += `={ path:'${control.mBindingInfos[sName].path}', template:\n${getTab()}`;
|
|
531
|
+
} else {
|
|
532
|
+
out += `=[\n${getTab()}`;
|
|
533
|
+
}
|
|
520
534
|
return out;
|
|
521
535
|
},
|
|
522
|
-
endAggregation: function () {
|
|
536
|
+
endAggregation: function (control: any, sName: string) {
|
|
523
537
|
tabCount--;
|
|
524
|
-
|
|
538
|
+
if (control.mBindingInfos[sName]) {
|
|
539
|
+
return `\n${getTab()}}`;
|
|
540
|
+
} else {
|
|
541
|
+
return `\n${getTab()}]`;
|
|
542
|
+
}
|
|
525
543
|
}
|
|
526
544
|
};
|
|
527
545
|
if (Array.isArray(controlToSerialize)) {
|
|
@@ -18,8 +18,7 @@ sap.ui.define(
|
|
|
18
18
|
"sap/fe/test/api/HeaderActions",
|
|
19
19
|
"sap/fe/test/api/HeaderAssertions",
|
|
20
20
|
"sap/fe/test/api/FormActions",
|
|
21
|
-
"sap/fe/test/api/FormAssertions"
|
|
22
|
-
"sap/fe/test/api/APIHelper"
|
|
21
|
+
"sap/fe/test/api/FormAssertions"
|
|
23
22
|
],
|
|
24
23
|
function (
|
|
25
24
|
mergeObjects,
|
|
@@ -35,8 +34,7 @@ sap.ui.define(
|
|
|
35
34
|
HeaderActions,
|
|
36
35
|
HeaderAssertions,
|
|
37
36
|
FormActions,
|
|
38
|
-
FormAssertions
|
|
39
|
-
APIHelper
|
|
37
|
+
FormAssertions
|
|
40
38
|
) {
|
|
41
39
|
"use strict";
|
|
42
40
|
|
|
@@ -143,6 +141,7 @@ sap.ui.define(
|
|
|
143
141
|
ObjectPageLayoutId = ViewId + "--fe::ObjectPage",
|
|
144
142
|
OPHeaderId = "fe::HeaderFacet",
|
|
145
143
|
OPHeaderContentId = "fe::ObjectPage-OPHeaderContent",
|
|
144
|
+
OPHeaderContentContainerId = ViewId + "--fe::HeaderContentContainer",
|
|
146
145
|
OPFooterId = "fe::FooterBar",
|
|
147
146
|
OPSectionIdPrefix = "fe::FacetSection",
|
|
148
147
|
OPSubSectionIdPrefix = "fe::FacetSubSection",
|
|
@@ -183,7 +182,7 @@ sap.ui.define(
|
|
|
183
182
|
* @public
|
|
184
183
|
*/
|
|
185
184
|
onTable: function (vTableIdentifier) {
|
|
186
|
-
if (!Utils.isOfType(vTableIdentifier, String)) {
|
|
185
|
+
if (!Utils.isOfType(vTableIdentifier, String) && !vTableIdentifier.id) {
|
|
187
186
|
vTableIdentifier = { id: getTableId(vTableIdentifier.property, vTableIdentifier.qualifier) };
|
|
188
187
|
}
|
|
189
188
|
return this._onTable(vTableIdentifier);
|
|
@@ -199,6 +198,20 @@ sap.ui.define(
|
|
|
199
198
|
id: sChartId
|
|
200
199
|
});
|
|
201
200
|
},
|
|
201
|
+
/**
|
|
202
|
+
* Returns a {@link sap.fe.test.api.FilterBarActions} instance.
|
|
203
|
+
*
|
|
204
|
+
* @param {sap.fe.test.api.FilterBarIdentifier | string} vFilterBarIdentifier The identifier of the filterbar
|
|
205
|
+
* @returns {sap.fe.test.api.FilterBarActions} The available filter bar actions
|
|
206
|
+
* @function
|
|
207
|
+
* @alias sap.fe.test.ListReport.actions#onFilterBar
|
|
208
|
+
* @public
|
|
209
|
+
*/
|
|
210
|
+
onFilterBar: function (vFilterBarIdentifier) {
|
|
211
|
+
var vIdentifier =
|
|
212
|
+
typeof vFilterBarIdentifier === "string" ? { id: vFilterBarIdentifier } : vFilterBarIdentifier;
|
|
213
|
+
return this._onFilterBar(vIdentifier);
|
|
214
|
+
},
|
|
202
215
|
/**
|
|
203
216
|
* Returns a {@link sap.fe.test.api.FooterActionsOP} instance.
|
|
204
217
|
*
|
|
@@ -225,6 +238,7 @@ sap.ui.define(
|
|
|
225
238
|
id: ObjectPageLayoutId,
|
|
226
239
|
headerId: OPHeaderId,
|
|
227
240
|
headerContentId: OPHeaderContentId,
|
|
241
|
+
headerContentContainerId: OPHeaderContentContainerId,
|
|
228
242
|
viewId: ViewId,
|
|
229
243
|
paginatorId: PaginatorId,
|
|
230
244
|
breadCrumbId: BreadCrumbId
|
|
@@ -276,6 +290,14 @@ sap.ui.define(
|
|
|
276
290
|
.description("Pressing 'More Links' button")
|
|
277
291
|
.execute();
|
|
278
292
|
},
|
|
293
|
+
iClickQuickViewCancelButton: function () {
|
|
294
|
+
return OpaBuilder.create(this)
|
|
295
|
+
.hasType("sap.m.Button")
|
|
296
|
+
.has("Cancek")
|
|
297
|
+
.doPress()
|
|
298
|
+
.description("Pressing Quickview 'Cancel' button")
|
|
299
|
+
.execute();
|
|
300
|
+
},
|
|
279
301
|
iClickQuickViewTitleLink: function (sText) {
|
|
280
302
|
return OpaBuilder.create(this)
|
|
281
303
|
.hasType("sap.m.Link")
|
|
@@ -399,7 +421,15 @@ sap.ui.define(
|
|
|
399
421
|
* @private
|
|
400
422
|
*/
|
|
401
423
|
iOpenSectionWithTitle: function (sName) {
|
|
402
|
-
return
|
|
424
|
+
return OpaBuilder.create(this)
|
|
425
|
+
.timeout(1)
|
|
426
|
+
.check(function () {
|
|
427
|
+
return false;
|
|
428
|
+
})
|
|
429
|
+
.error(
|
|
430
|
+
"Test function iOpenSectionWithTitle() is deprecated - please use function iGoToSection() with the same parameters"
|
|
431
|
+
)
|
|
432
|
+
.execute();
|
|
403
433
|
},
|
|
404
434
|
|
|
405
435
|
iEnterValueForFieldInEditableHeader: function (sValue) {
|
|
@@ -485,7 +515,7 @@ sap.ui.define(
|
|
|
485
515
|
* @public
|
|
486
516
|
*/
|
|
487
517
|
onTable: function (vTableIdentifier) {
|
|
488
|
-
if (!Utils.isOfType(vTableIdentifier, String)) {
|
|
518
|
+
if (!Utils.isOfType(vTableIdentifier, String) && !vTableIdentifier.id) {
|
|
489
519
|
vTableIdentifier = { id: getTableId(vTableIdentifier.property, vTableIdentifier.qualifier) };
|
|
490
520
|
}
|
|
491
521
|
return this._onTable(vTableIdentifier);
|
|
@@ -501,6 +531,20 @@ sap.ui.define(
|
|
|
501
531
|
id: sChartId
|
|
502
532
|
});
|
|
503
533
|
},
|
|
534
|
+
/**
|
|
535
|
+
* Returns a {@link sap.fe.test.api.FilterBarAssertions} instance.
|
|
536
|
+
*
|
|
537
|
+
* @param {sap.fe.test.api.FilterBarIdentifier | string} vFilterBarIdentifier The identifier of the filterbar
|
|
538
|
+
* @returns {sap.fe.test.api.FilterBarAssertions} The available filter bar assertions
|
|
539
|
+
* @function
|
|
540
|
+
* @alias sap.fe.test.ListReport.assertions#onFilterBar
|
|
541
|
+
* @public
|
|
542
|
+
*/
|
|
543
|
+
onFilterBar: function (vFilterBarIdentifier) {
|
|
544
|
+
var vIdentifier =
|
|
545
|
+
typeof vFilterBarIdentifier === "string" ? { id: vFilterBarIdentifier } : vFilterBarIdentifier;
|
|
546
|
+
return this._onFilterBar(vIdentifier);
|
|
547
|
+
},
|
|
504
548
|
/**
|
|
505
549
|
* Returns a {@link sap.fe.test.api.FooterAssertionsOP} instance.
|
|
506
550
|
*
|
|
@@ -525,6 +569,7 @@ sap.ui.define(
|
|
|
525
569
|
id: ObjectPageLayoutId,
|
|
526
570
|
headerId: OPHeaderId,
|
|
527
571
|
headerContentId: OPHeaderContentId,
|
|
572
|
+
headerContentContainerId: OPHeaderContentContainerId,
|
|
528
573
|
viewId: ViewId,
|
|
529
574
|
paginatorId: PaginatorId,
|
|
530
575
|
breadCrumbId: BreadCrumbId
|
|
@@ -817,11 +862,19 @@ sap.ui.define(
|
|
|
817
862
|
.hasType("sap.m.MessageView")
|
|
818
863
|
.check(function (oMessageView) {
|
|
819
864
|
var messages = oMessageView[0].getItems();
|
|
865
|
+
var aNewBoundMessagesInfo = [];
|
|
866
|
+
if (aBoundMessagesInfo instanceof Array) {
|
|
867
|
+
aNewBoundMessagesInfo = aBoundMessagesInfo;
|
|
868
|
+
} else {
|
|
869
|
+
Object.keys(aBoundMessagesInfo).map(function (oElement) {
|
|
870
|
+
aNewBoundMessagesInfo.push(aBoundMessagesInfo[oElement]);
|
|
871
|
+
});
|
|
872
|
+
}
|
|
820
873
|
return (
|
|
821
|
-
messages[0].getGroupName() ===
|
|
822
|
-
messages[1].getGroupName() ===
|
|
823
|
-
messages[0].getTitle() ===
|
|
824
|
-
messages[1].getTitle() ===
|
|
874
|
+
messages[0].getGroupName() === aNewBoundMessagesInfo[0].GroupLabel &&
|
|
875
|
+
messages[1].getGroupName() === aNewBoundMessagesInfo[1].GroupLabel &&
|
|
876
|
+
messages[0].getTitle() === aNewBoundMessagesInfo[0].MessageText &&
|
|
877
|
+
messages[1].getTitle() === aNewBoundMessagesInfo[1].MessageText
|
|
825
878
|
);
|
|
826
879
|
}, true)
|
|
827
880
|
.isDialogElement(true)
|
package/src/sap/fe/test/Shell.js
CHANGED
|
@@ -64,6 +64,7 @@ sap.ui.define(["sap/ui/test/OpaBuilder", "sap/ui/test/Opa5", "sap/fe/test/Utils"
|
|
|
64
64
|
*/
|
|
65
65
|
iOpenNavigationMenu: function () {
|
|
66
66
|
return OpaBuilder.create(this)
|
|
67
|
+
.pollingInterval(1000) // the shell needs some time to prepare the navigation menu
|
|
67
68
|
.hasId("shellAppTitle")
|
|
68
69
|
.doPress()
|
|
69
70
|
.description("Expanding Shell Navigation Menu")
|
|
@@ -52,11 +52,17 @@ sap.ui.define(
|
|
|
52
52
|
oBuilder.has(OpaBuilder.Matchers.children(this._getBuilderForFieldGroup(vFieldIdentifier)));
|
|
53
53
|
}
|
|
54
54
|
|
|
55
|
-
|
|
56
|
-
|
|
57
|
-
|
|
58
|
-
|
|
59
|
-
|
|
55
|
+
if (vFieldIdentifier.connectedFields) {
|
|
56
|
+
return oBuilder
|
|
57
|
+
.has(OpaBuilder.Matchers.children(this._getBuilderForFormElement(vFieldIdentifier)))
|
|
58
|
+
.has(FEBuilder.Matchers.singleElement());
|
|
59
|
+
} else {
|
|
60
|
+
return oBuilder
|
|
61
|
+
.has(OpaBuilder.Matchers.children(this._getBuilderForFormElement(vFieldIdentifier)))
|
|
62
|
+
.has(FEBuilder.Matchers.singleElement())
|
|
63
|
+
.has(OpaBuilder.Matchers.children(this.createFieldMatcher(vFieldIdentifier)))
|
|
64
|
+
.has(FEBuilder.Matchers.singleElement());
|
|
65
|
+
}
|
|
60
66
|
};
|
|
61
67
|
|
|
62
68
|
FormAPI.prototype._getBuilderForFormElement = function (vFieldIdentifier) {
|
|
@@ -88,6 +88,28 @@ sap.ui.define(
|
|
|
88
88
|
return OpaBuilder.create(this.getOpaInstance()).hasId(sHeaderContentId);
|
|
89
89
|
};
|
|
90
90
|
|
|
91
|
+
/**
|
|
92
|
+
* Helper method for creating an OpaBuilder of the Object Page Layout.
|
|
93
|
+
*
|
|
94
|
+
* @param {string} sObjectPageLayoutId The identifier of <code>sap.uxap.ObjectPageLayout</code> control
|
|
95
|
+
* @returns {object} OpaBuilder object
|
|
96
|
+
* @ui5-restricted
|
|
97
|
+
*/
|
|
98
|
+
HeaderAPI.prototype.getObjectPageLayoutBuilder = function (sObjectPageLayoutId) {
|
|
99
|
+
return FEBuilder.create(this.getOpaInstance()).hasType("sap.uxap.ObjectPageLayout").hasId(sObjectPageLayoutId);
|
|
100
|
+
};
|
|
101
|
+
|
|
102
|
+
/**
|
|
103
|
+
* Helper method for creating an OpaBuilder of the Object Page Header Content Container.
|
|
104
|
+
*
|
|
105
|
+
* @param {string} sObjectPageHeaderContentContainerId The identifier of <code>sap.m.FlexBox</code> control
|
|
106
|
+
* @returns {object} OpaBuilder object
|
|
107
|
+
* @ui5-restricted
|
|
108
|
+
*/
|
|
109
|
+
HeaderAPI.prototype.getObjectPageHeaderContentContainerBuilder = function (sObjectPageHeaderContentContainerId) {
|
|
110
|
+
return FEBuilder.create(this.getOpaInstance()).hasType("sap.m.FlexBox").hasId(sObjectPageHeaderContentContainerId);
|
|
111
|
+
};
|
|
112
|
+
|
|
91
113
|
HeaderAPI.prototype.getFieldGroupFieldId = function (vFieldIdentifier, sViewId) {
|
|
92
114
|
var sId = "fe::HeaderFacet";
|
|
93
115
|
|
|
@@ -22,6 +22,7 @@ sap.ui.define(
|
|
|
22
22
|
var HeaderActions = function (oHeaderBuilder, vHeaderDescription) {
|
|
23
23
|
this._sObjectPageLayoutId = vHeaderDescription.id;
|
|
24
24
|
this._sHeaderContentId = vHeaderDescription.headerContentId;
|
|
25
|
+
this._sHeaderContentContainerId = vHeaderDescription.headerContentContainerId;
|
|
25
26
|
this._sViewId = vHeaderDescription.viewId;
|
|
26
27
|
this._sPaginatorId = vHeaderDescription.paginatorId;
|
|
27
28
|
this._sBreadCrumbId = vHeaderDescription.breadCrumbId;
|
|
@@ -218,7 +219,7 @@ sap.ui.define(
|
|
|
218
219
|
*/
|
|
219
220
|
HeaderActions.prototype.iClickLink = function (vLinkIdentifier) {
|
|
220
221
|
// TODO this function needs to aligned with onForm().iClickLink - for now vLinkIdentifier must be the link text!
|
|
221
|
-
var oHeaderContentBuilder = this.
|
|
222
|
+
var oHeaderContentBuilder = this.getObjectPageHeaderContentContainerBuilder(this._sHeaderContentContainerId);
|
|
222
223
|
return this.prepareResult(
|
|
223
224
|
oHeaderContentBuilder
|
|
224
225
|
.has(OpaBuilder.Matchers.children(FEBuilder.create().hasType("sap.m.Link").hasProperties({ text: vLinkIdentifier })))
|
|
@@ -30,6 +30,7 @@ sap.ui.define(
|
|
|
30
30
|
this._sObjectPageLayoutId = vHeaderDescription.id;
|
|
31
31
|
this._sHeaderId = vHeaderDescription.headerId;
|
|
32
32
|
this._sHeaderContentId = vHeaderDescription.headerContentId;
|
|
33
|
+
this._sHeaderContentContainerId = vHeaderDescription.headerContentContainerId;
|
|
33
34
|
this._sViewId = vHeaderDescription.viewId;
|
|
34
35
|
this._sPaginatorId = vHeaderDescription.paginatorId;
|
|
35
36
|
this._sBreadCrumbId = vHeaderDescription.breadCrumbId;
|
|
@@ -343,7 +344,7 @@ sap.ui.define(
|
|
|
343
344
|
*/
|
|
344
345
|
HeaderAssertions.prototype.iCheckHeaderFacet = function (vFacetIdentifier, mState) {
|
|
345
346
|
var aArguments = Utils.parseArguments([[Object, String], Object], arguments),
|
|
346
|
-
oHeaderContentBuilder = this.
|
|
347
|
+
oHeaderContentBuilder = this.getObjectPageHeaderContentContainerBuilder(this._sHeaderContentContainerId),
|
|
347
348
|
sId = new RegExp("fe::HeaderFacetContainer::" + vFacetIdentifier.facetId + "$");
|
|
348
349
|
|
|
349
350
|
if (vFacetIdentifier.custom) {
|
|
@@ -455,7 +456,7 @@ sap.ui.define(
|
|
|
455
456
|
HeaderAssertions.prototype.iCheckLink = function (vLinkIdentifier, mState) {
|
|
456
457
|
// TODO this function needs to aligned with onForm().iCheckLink - for now vLinkIdentifier must be the link text!
|
|
457
458
|
var aArguments = Utils.parseArguments([String, Object], arguments),
|
|
458
|
-
oHeaderContentBuilder = this.
|
|
459
|
+
oHeaderContentBuilder = this.getObjectPageHeaderContentContainerBuilder(this._sHeaderContentContainerId);
|
|
459
460
|
return this.prepareResult(
|
|
460
461
|
oHeaderContentBuilder
|
|
461
462
|
.has(
|
|
@@ -21,9 +21,9 @@ sap.ui.define(["sap/ui/core/Core", "sap/ui/core/library"], function (Core, _libr
|
|
|
21
21
|
controls: [],
|
|
22
22
|
elements: [],
|
|
23
23
|
// eslint-disable-next-line no-template-curly-in-string
|
|
24
|
-
version: "1.
|
|
24
|
+
version: "1.106.0",
|
|
25
25
|
noLibraryCSS: true
|
|
26
26
|
});
|
|
27
27
|
return thisLib;
|
|
28
28
|
}, false);
|
|
29
|
-
//# sourceMappingURL=data:application/json;charset=utf-8;base64,
|
|
29
|
+
//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJuYW1lcyI6WyJ0aGlzTGliIiwiQ29yZSIsImluaXRMaWJyYXJ5IiwibmFtZSIsImRlcGVuZGVuY2llcyIsInR5cGVzIiwiaW50ZXJmYWNlcyIsImNvbnRyb2xzIiwiZWxlbWVudHMiLCJ2ZXJzaW9uIiwibm9MaWJyYXJ5Q1NTIl0sInNvdXJjZVJvb3QiOiIuIiwic291cmNlcyI6WyJsaWJyYXJ5LnRzIl0sInNvdXJjZXNDb250ZW50IjpbImltcG9ydCBDb3JlIGZyb20gXCJzYXAvdWkvY29yZS9Db3JlXCI7XG5pbXBvcnQgXCJzYXAvdWkvY29yZS9saWJyYXJ5XCI7XG5cbi8qKlxuICogVGVzdCBsaWJyYXJ5IGZvciBTQVAgRmlvcmkgZWxlbWVudHNcbiAqXG4gKiBAbmFtZXNwYWNlXG4gKiBAbmFtZSBzYXAuZmUudGVzdFxuICogQHB1YmxpY1xuICovXG5cbi8vIGxpYnJhcnkgZGVwZW5kZW5jaWVzXG5jb25zdCB0aGlzTGliID0gQ29yZS5pbml0TGlicmFyeSh7XG5cdG5hbWU6IFwic2FwLmZlLnRlc3RcIixcblx0ZGVwZW5kZW5jaWVzOiBbXCJzYXAudWkuY29yZVwiXSxcblx0dHlwZXM6IFtdLFxuXHRpbnRlcmZhY2VzOiBbXSxcblx0Y29udHJvbHM6IFtdLFxuXHRlbGVtZW50czogW10sXG5cdC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBuby10ZW1wbGF0ZS1jdXJseS1pbi1zdHJpbmdcblx0dmVyc2lvbjogXCIke3ZlcnNpb259XCIsXG5cdG5vTGlicmFyeUNTUzogdHJ1ZVxufSk7XG5cbmV4cG9ydCBkZWZhdWx0IHRoaXNMaWI7XG4iXSwibWFwcGluZ3MiOiI7QUFBQTtBQUFBO0FBQUE7Ozs7RUFHQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtFQUVBO0VBQ0EsSUFBTUEsT0FBTyxHQUFHQyxJQUFJLENBQUNDLFdBQUwsQ0FBaUI7SUFDaENDLElBQUksRUFBRSxhQUQwQjtJQUVoQ0MsWUFBWSxFQUFFLENBQUMsYUFBRCxDQUZrQjtJQUdoQ0MsS0FBSyxFQUFFLEVBSHlCO0lBSWhDQyxVQUFVLEVBQUUsRUFKb0I7SUFLaENDLFFBQVEsRUFBRSxFQUxzQjtJQU1oQ0MsUUFBUSxFQUFFLEVBTnNCO0lBT2hDO0lBQ0FDLE9BQU8sRUFBRSxZQVJ1QjtJQVNoQ0MsWUFBWSxFQUFFO0VBVGtCLENBQWpCLENBQWhCO1NBWWVWLE8ifQ==
|