@sapui5/sap.fe.test 1.105.1 → 1.107.1

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@sapui5/sap.fe.test",
3
- "version": "1.105.1",
3
+ "version": "1.107.1",
4
4
  "description": "SAPUI5 Library sap.fe.test",
5
5
  "license": "SEE LICENSE IN LICENSE.txt",
6
6
  "author": "SAP SE (https://www.sap.com)",
@@ -6,7 +6,7 @@
6
6
  <copyright>SAP UI development toolkit for HTML5 (SAPUI5)
7
7
  (c) Copyright 2009-2021 SAP SE. All rights reserved
8
8
  </copyright>
9
- <version>1.105.1</version>
9
+ <version>1.107.1</version>
10
10
 
11
11
  <documentation>UI5 library: sap.fe.test</documentation>
12
12
 
@@ -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,eyJ2ZXJzaW9uIjozLCJuYW1lcyI6WyJtb2NrTGlzdFJlcG9ydENvbnRyb2xsZXIiLCJsaXN0UmVwb3J0IiwiX2dldEZpbHRlckJhckNvbnRyb2wiLCJqZXN0IiwiZm4iLCJfZ2V0Q29udHJvbHMiLCJfaXNGaWx0ZXJCYXJIaWRkZW4iLCJfaXNNdWx0aU1vZGUiLCJfZ2V0TXVsdGlNb2RlQ29udHJvbCIsIl9oYXNNdWx0aVZpc3VhbGl6YXRpb25zIiwiX3Nob3VsZEF1dG9UcmlnZ2VyU2VhcmNoIiwiX2dldFRhYmxlIiwiZ2V0RXh0ZW5zaW9uQVBJIiwiX2VkaXRGbG93IiwibW9jayIsIkludGVybmFsRWRpdEZsb3ciLCJPYmplY3QiLCJhc3NpZ24iLCJQYWdlQ29udHJvbGxlciIsIm1vY2tPYmplY3RQYWdlQ29udHJvbGxlciIsIm9iamVjdFBhZ2UiLCJnZXRTdGlja3lFZGl0TW9kZSIsIm1vY2tDb250ZXh0Rm9yRXh0ZW5zaW9uIiwiZXh0ZW5zaW9uIiwiY29udHJvbGxlciIsImJhc2UiLCJ2aWV3IiwiZ2V0VmlldyIsIm1vY2tlZEJhc2UiLCJtb2NrRmlsdGVyQmFyIiwiZmlsdGVyQmFyIiwiRmlsdGVyQmFyIiwid2FpdEZvckluaXRpYWxpemF0aW9uIl0sInNvdXJjZVJvb3QiOiIuIiwic291cmNlcyI6WyJGZU1vY2tzLnRzIl0sInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB0eXBlIHsgTW9ja2VkSW5zdGFuY2UsIFVJNUluc3RhbmNlVHlwZSwgV2l0aE1vY2sgfSBmcm9tIFwiQHNhcC11eC9qZXN0LW1vY2stdWk1L2Rpc3QvZ2VuZXJpY1wiO1xuaW1wb3J0IHsgbW9jayB9IGZyb20gXCJAc2FwLXV4L2plc3QtbW9jay11aTUvZGlzdC9nZW5lcmljXCI7XG5pbXBvcnQgSW50ZXJuYWxFZGl0RmxvdyBmcm9tIFwic2FwL2ZlL2NvcmUvY29udHJvbGxlcmV4dGVuc2lvbnMvSW50ZXJuYWxFZGl0Rmxvd1wiO1xuaW1wb3J0IFBhZ2VDb250cm9sbGVyIGZyb20gXCJzYXAvZmUvY29yZS9QYWdlQ29udHJvbGxlclwiO1xuaW1wb3J0IHR5cGUgQ29udHJvbGxlciBmcm9tIFwic2FwL3VpL2NvcmUvbXZjL0NvbnRyb2xsZXJcIjtcbmltcG9ydCBGaWx0ZXJCYXIgZnJvbSBcInNhcC91aS9tZGMvRmlsdGVyQmFyXCI7XG5cbmludGVyZmFjZSBDb21tb25Db250cm9sbGVyVHlwZSB7XG5cdGdldEV4dGVuc2lvbkFQSTogYW55O1xuXHRfZWRpdEZsb3c6IFdpdGhNb2NrPEludGVybmFsRWRpdEZsb3c+O1xufVxuXG5leHBvcnQgaW50ZXJmYWNlIExpc3RSZXBvcnRDb250cm9sbGVyVHlwZSB7XG5cdF9nZXRGaWx0ZXJCYXJDb250cm9sOiBhbnk7XG5cdF9nZXRDb250cm9sczogYW55O1xuXHRfaXNGaWx0ZXJCYXJIaWRkZW46IGFueTtcblx0X2lzTXVsdGlNb2RlOiBhbnk7XG5cdF9nZXRNdWx0aU1vZGVDb250cm9sOiBhbnk7XG5cdF9oYXNNdWx0aVZpc3VhbGl6YXRpb25zOiBhbnk7XG5cdF9zaG91bGRBdXRvVHJpZ2dlclNlYXJjaDogYW55O1xuXHRfZ2V0VGFibGU6IGFueTtcbn1cblxuZXhwb3J0IGludGVyZmFjZSBPYmplY3RQYWdlQ29udHJvbGxlclR5cGUge1xuXHRnZXRTdGlja3lFZGl0TW9kZTogYW55O1xufVxuXG5leHBvcnQgZnVuY3Rpb24gbW9ja0xpc3RSZXBvcnRDb250cm9sbGVyKCk6IFdpdGhNb2NrPENvbnRyb2xsZXIgJiBQYWdlQ29udHJvbGxlciAmIExpc3RSZXBvcnRDb250cm9sbGVyVHlwZSAmIENvbW1vbkNvbnRyb2xsZXJUeXBlPiB7XG5cdC8vIG1hbnVhbGx5IGFkZCBMaXN0UmVwb3J0Q29udHJvbGxlci5jb250cm9sbGVyIGZ1bmN0aW9ucyBzaW5jZSBJIGFtIHVuYWJsZSB0byBpbXBvcnQgdGhlIHByb3RvdHlwZVxuXHRjb25zdCBsaXN0UmVwb3J0OiBNb2NrZWRJbnN0YW5jZTxMaXN0UmVwb3J0Q29udHJvbGxlclR5cGUgJiBDb21tb25Db250cm9sbGVyVHlwZT4gPSB7XG5cdFx0X2dldEZpbHRlckJhckNvbnRyb2w6IGplc3QuZm4oKSxcblx0XHRfZ2V0Q29udHJvbHM6IGplc3QuZm4oKSxcblx0XHRfaXNGaWx0ZXJCYXJIaWRkZW46IGplc3QuZm4oKSxcblx0XHRfaXNNdWx0aU1vZGU6IGplc3QuZm4oKSxcblx0XHRfZ2V0TXVsdGlNb2RlQ29udHJvbDogamVzdC5mbigpLFxuXHRcdF9oYXNNdWx0aVZpc3VhbGl6YXRpb25zOiBqZXN0LmZuKCksXG5cdFx0X3Nob3VsZEF1dG9UcmlnZ2VyU2VhcmNoOiBqZXN0LmZuKCksXG5cdFx0X2dldFRhYmxlOiBqZXN0LmZuKCksXG5cdFx0Z2V0RXh0ZW5zaW9uQVBJOiBqZXN0LmZuKCksXG5cdFx0X2VkaXRGbG93OiBtb2NrKEludGVybmFsRWRpdEZsb3cpIGFzIGFueVxuXHR9O1xuXHRyZXR1cm4gT2JqZWN0LmFzc2lnbihtb2NrKFBhZ2VDb250cm9sbGVyKSBhcyBhbnksIGxpc3RSZXBvcnQpIGFzIFdpdGhNb2NrPFxuXHRcdENvbnRyb2xsZXIgJiBQYWdlQ29udHJvbGxlciAmIExpc3RSZXBvcnRDb250cm9sbGVyVHlwZSAmIENvbW1vbkNvbnRyb2xsZXJUeXBlXG5cdD47XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBtb2NrT2JqZWN0UGFnZUNvbnRyb2xsZXIoKTogV2l0aE1vY2s8Q29udHJvbGxlciAmIFBhZ2VDb250cm9sbGVyICYgT2JqZWN0UGFnZUNvbnRyb2xsZXJUeXBlICYgQ29tbW9uQ29udHJvbGxlclR5cGU+IHtcblx0Ly8gbWFudWFsbHkgYWRkIExpc3RSZXBvcnRDb250cm9sbGVyLmNvbnRyb2xsZXIgZnVuY3Rpb25zIHNpbmNlIEkgYW0gdW5hYmxlIHRvIGltcG9ydCB0aGUgcHJvdG90eXBlXG5cdGNvbnN0IG9iamVjdFBhZ2U6IE1vY2tlZEluc3RhbmNlPE9iamVjdFBhZ2VDb250cm9sbGVyVHlwZSAmIENvbW1vbkNvbnRyb2xsZXJUeXBlPiA9IHtcblx0XHRnZXRTdGlja3lFZGl0TW9kZTogamVzdC5mbigpLFxuXHRcdGdldEV4dGVuc2lvbkFQSTogamVzdC5mbigpLFxuXHRcdF9lZGl0RmxvdzogbW9jayhJbnRlcm5hbEVkaXRGbG93KSBhcyBhbnlcblx0fTtcblx0cmV0dXJuIE9iamVjdC5hc3NpZ24obW9jayhQYWdlQ29udHJvbGxlcikgYXMgYW55LCBvYmplY3RQYWdlKSBhcyBXaXRoTW9jazxcblx0XHRDb250cm9sbGVyICYgUGFnZUNvbnRyb2xsZXIgJiBPYmplY3RQYWdlQ29udHJvbGxlclR5cGUgJiBDb21tb25Db250cm9sbGVyVHlwZVxuXHQ+O1xufVxuXG5leHBvcnQgZnVuY3Rpb24gbW9ja0NvbnRleHRGb3JFeHRlbnNpb248RVhUIGV4dGVuZHMgb2JqZWN0LCBCQVNFIGV4dGVuZHMgb2JqZWN0Pihcblx0ZXh0ZW5zaW9uOiBFWFQsXG5cdGNvbnRyb2xsZXI6IFdpdGhNb2NrPENvbnRyb2xsZXI+LFxuXHRiYXNlPzogQkFTRVxuKTogV2l0aE1vY2s8RVhUICYgVUk1SW5zdGFuY2VUeXBlPEJBU0U+PiB7XG5cdGNvbnN0IHZpZXcgPSBjb250cm9sbGVyLmdldFZpZXcoKTtcblx0KGV4dGVuc2lvbiBhcyBhbnkpLmdldFZpZXcgPSAoKSA9PiB2aWV3O1xuXHRjb25zdCBtb2NrZWRCYXNlID0gbW9jayhiYXNlIHx8IHt9KTtcblx0cmV0dXJuIE9iamVjdC5hc3NpZ24obW9ja2VkQmFzZSwgZXh0ZW5zaW9uKSBhcyBXaXRoTW9jazxFWFQgJiBVSTVJbnN0YW5jZVR5cGU8QkFTRT4+O1xufVxuXG5leHBvcnQgZnVuY3Rpb24gbW9ja0ZpbHRlckJhcigpOiBXaXRoTW9jazxcblx0RmlsdGVyQmFyICYgeyB3YWl0Rm9ySW5pdGlhbGl6YXRpb246IEZ1bmN0aW9uOyBfYlNlYXJjaFRyaWdnZXJlZDogQm9vbGVhbjsgX2dldENvbmRpdGlvbk1vZGVsOiBGdW5jdGlvbiB9XG4+IHtcblx0Y29uc3QgZmlsdGVyQmFyID0gbW9jayhGaWx0ZXJCYXIpIGFzIFdpdGhNb2NrPFxuXHRcdEZpbHRlckJhciAmIHsgd2FpdEZvckluaXRpYWxpemF0aW9uOiBGdW5jdGlvbjsgX2JTZWFyY2hUcmlnZ2VyZWQ6IEJvb2xlYW47IF9nZXRDb25kaXRpb25Nb2RlbDogRnVuY3Rpb24gfVxuXHQ+O1xuXHRmaWx0ZXJCYXIubW9jay53YWl0Rm9ySW5pdGlhbGl6YXRpb24gPSBqZXN0LmZuKCk7XG5cdHJldHVybiBmaWx0ZXJCYXI7XG59XG4iXSwibWFwcGluZ3MiOiI7QUFBQTtBQUFBO0FBQUE7Ozs7Ozs7RUEyQk8sU0FBU0Esd0JBQVQsR0FBNkg7SUFDbkk7SUFDQSxJQUFNQyxVQUEyRSxHQUFHO01BQ25GQyxvQkFBb0IsRUFBRUMsSUFBSSxDQUFDQyxFQUFMLEVBRDZEO01BRW5GQyxZQUFZLEVBQUVGLElBQUksQ0FBQ0MsRUFBTCxFQUZxRTtNQUduRkUsa0JBQWtCLEVBQUVILElBQUksQ0FBQ0MsRUFBTCxFQUgrRDtNQUluRkcsWUFBWSxFQUFFSixJQUFJLENBQUNDLEVBQUwsRUFKcUU7TUFLbkZJLG9CQUFvQixFQUFFTCxJQUFJLENBQUNDLEVBQUwsRUFMNkQ7TUFNbkZLLHVCQUF1QixFQUFFTixJQUFJLENBQUNDLEVBQUwsRUFOMEQ7TUFPbkZNLHdCQUF3QixFQUFFUCxJQUFJLENBQUNDLEVBQUwsRUFQeUQ7TUFRbkZPLFNBQVMsRUFBRVIsSUFBSSxDQUFDQyxFQUFMLEVBUndFO01BU25GUSxlQUFlLEVBQUVULElBQUksQ0FBQ0MsRUFBTCxFQVRrRTtNQVVuRlMsU0FBUyxFQUFFQyxJQUFJLENBQUNDLGdCQUFEO0lBVm9FLENBQXBGO0lBWUEsT0FBT0MsTUFBTSxDQUFDQyxNQUFQLENBQWNILElBQUksQ0FBQ0ksY0FBRCxDQUFsQixFQUEyQ2pCLFVBQTNDLENBQVA7RUFHQTs7OztFQUVNLFNBQVNrQix3QkFBVCxHQUE2SDtJQUNuSTtJQUNBLElBQU1DLFVBQTJFLEdBQUc7TUFDbkZDLGlCQUFpQixFQUFFbEIsSUFBSSxDQUFDQyxFQUFMLEVBRGdFO01BRW5GUSxlQUFlLEVBQUVULElBQUksQ0FBQ0MsRUFBTCxFQUZrRTtNQUduRlMsU0FBUyxFQUFFQyxJQUFJLENBQUNDLGdCQUFEO0lBSG9FLENBQXBGO0lBS0EsT0FBT0MsTUFBTSxDQUFDQyxNQUFQLENBQWNILElBQUksQ0FBQ0ksY0FBRCxDQUFsQixFQUEyQ0UsVUFBM0MsQ0FBUDtFQUdBOzs7O0VBRU0sU0FBU0UsdUJBQVQsQ0FDTkMsU0FETSxFQUVOQyxVQUZNLEVBR05DLElBSE0sRUFJa0M7SUFDeEMsSUFBTUMsSUFBSSxHQUFHRixVQUFVLENBQUNHLE9BQVgsRUFBYjs7SUFDQ0osU0FBRCxDQUFtQkksT0FBbkIsR0FBNkI7TUFBQSxPQUFNRCxJQUFOO0lBQUEsQ0FBN0I7O0lBQ0EsSUFBTUUsVUFBVSxHQUFHZCxJQUFJLENBQUNXLElBQUksSUFBSSxFQUFULENBQXZCO0lBQ0EsT0FBT1QsTUFBTSxDQUFDQyxNQUFQLENBQWNXLFVBQWQsRUFBMEJMLFNBQTFCLENBQVA7RUFDQTs7OztFQUVNLFNBQVNNLGFBQVQsR0FFTDtJQUNELElBQU1DLFNBQVMsR0FBR2hCLElBQUksQ0FBQ2lCLFNBQUQsQ0FBdEI7SUFHQUQsU0FBUyxDQUFDaEIsSUFBVixDQUFla0IscUJBQWYsR0FBdUM3QixJQUFJLENBQUNDLEVBQUwsRUFBdkM7SUFDQSxPQUFPMEIsU0FBUDtFQUNBIn0=
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(),
@@ -108,6 +108,7 @@ sap.ui.define(["@sap/cds-compiler", "fs", "path", "prettier", "sap/base/Log", "s
108
108
  var nameSpaceMap = {
109
109
  "macros": "sap.fe.macros",
110
110
  "macro": "sap.fe.macros",
111
+ "macroField": "sap.fe.macros.field",
111
112
  "macrodata": "http://schemas.sap.com/sapui5/extension/sap.ui.core.CustomData/1",
112
113
  "log": "http://schemas.sap.com/sapui5/extension/sap.ui.core.CustomData/1",
113
114
  "unittest": "http://schemas.sap.com/sapui5/preprocessorextension/sap.fe.unittesting/1",
@@ -196,6 +197,8 @@ sap.ui.define(["@sap/cds-compiler", "fs", "path", "prettier", "sap/base/Log", "s
196
197
  return formatXML(xmlString);
197
198
  };
198
199
 
200
+ _exports.serializeXML = serializeXML;
201
+
199
202
  var formatXML = function (xmlString) {
200
203
  return format(xmlString, {
201
204
  parser: "xml",
@@ -245,9 +248,15 @@ sap.ui.define(["@sap/cds-compiler", "fs", "path", "prettier", "sap/base/Log", "s
245
248
  function cds2edmx(cds) {
246
249
  var service = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : "sap.fe.test.JestService";
247
250
  var options = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : {};
248
- var csn = compiler.compileSources({
249
- "string.cds": cds
250
- }, {});
251
+ var sources = {
252
+ "source.cds": cds
253
+ }; // allow to include stuff from @sap/cds/common
254
+
255
+ if (cds.includes("'@sap/cds/common'")) {
256
+ sources["common.cds"] = fs.readFileSync(require.resolve("@sap/cds/common.cds"), "utf-8");
257
+ }
258
+
259
+ var csn = compiler.compileSources(sources, {});
251
260
 
252
261
  var edmxOptions = _objectSpread(_objectSpread({
253
262
  odataForeignKeys: true,
@@ -582,10 +591,12 @@ sap.ui.define(["@sap/cds-compiler", "fs", "path", "prettier", "sap/base/Log", "s
582
591
  var controlDetail = "";
583
592
 
584
593
  if (sAggregationName) {
585
- var indexInParent = control.getParent().getAggregation(sAggregationName).indexOf(control);
594
+ if (control.getParent()) {
595
+ var indexInParent = control.getParent().getAggregation(sAggregationName).indexOf(control);
586
596
 
587
- if (indexInParent > 0) {
588
- controlDetail += ",\n".concat(getTab());
597
+ if (indexInParent > 0) {
598
+ controlDetail += ",\n".concat(getTab());
599
+ }
589
600
  }
590
601
  }
591
602
 
@@ -621,12 +632,23 @@ sap.ui.define(["@sap/cds-compiler", "fs", "path", "prettier", "sap/base/Log", "s
621
632
  startAggregation: function (control, sName) {
622
633
  var out = ",\n".concat(getTab()).concat(sName);
623
634
  tabCount++;
624
- out += "=[\n".concat(getTab());
635
+
636
+ if (control.mBindingInfos[sName]) {
637
+ out += "={ path:'".concat(control.mBindingInfos[sName].path, "', template:\n").concat(getTab());
638
+ } else {
639
+ out += "=[\n".concat(getTab());
640
+ }
641
+
625
642
  return out;
626
643
  },
627
- endAggregation: function () {
644
+ endAggregation: function (control, sName) {
628
645
  tabCount--;
629
- return "\n".concat(getTab(), "]");
646
+
647
+ if (control.mBindingInfos[sName]) {
648
+ return "\n".concat(getTab(), "}");
649
+ } else {
650
+ return "\n".concat(getTab(), "]");
651
+ }
630
652
  }
631
653
  };
632
654
 
@@ -655,4 +677,4 @@ sap.ui.define(["@sap/cds-compiler", "fs", "path", "prettier", "sap/base/Log", "s
655
677
  _exports.createAwaiter = createAwaiter;
656
678
  return _exports;
657
679
  }, 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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
680
+ //# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJuYW1lcyI6WyJwcm9jZXNzRnJhZ21lbnQiLCJuYW1lIiwidGVzdERhdGEiLCJpbnB1dFhtbCIsInBhcnNlciIsIndpbmRvdyIsIkRPTVBhcnNlciIsImlucHV0RG9jIiwicGFyc2VGcm9tU3RyaW5nIiwic2V0dGluZ3MiLCJtb2RlbHMiLCJiaW5kaW5nQ29udGV4dHMiLCJtb2RlbCIsImpzb25Nb2RlbCIsIkpTT05Nb2RlbCIsInNldERhdGEiLCJjcmVhdGVCaW5kaW5nQ29udGV4dCIsIlhNTFByZXByb2Nlc3NvciIsInByb2Nlc3MiLCJmaXJzdEVsZW1lbnRDaGlsZCIsInJlc3VsdERvYyIsImZyYWdtZW50cyIsImdldEVsZW1lbnRzQnlUYWdOYW1lIiwibGVuZ3RoIiwiZnJhZ21lbnQiLCJpbm5lckhUTUwiLCJ4bWxSZXN1bHQiLCJjaGlsZHJlbiIsIm91dGVySFRNTCIsImZvcm1hdFhtbCIsImZpbHRlciIsIm5vZGUiLCJ0eXBlIiwicmVxdWlyZSIsIkxvZyIsInNldExldmVsIiwiamVzdCIsInNldFRpbWVvdXQiLCJuYW1lU3BhY2VNYXAiLCJzZWxlY3QiLCJ4cGF0aCIsInVzZU5hbWVzcGFjZXMiLCJyZWdpc3Rlck1hY3JvIiwibWFjcm9NZXRhZGF0YSIsInJlZ2lzdGVyQnVpbGRpbmdCbG9jayIsInVucmVnaXN0ZXJNYWNybyIsInBsdWdJbiIsIm5hbWVzcGFjZSIsInB1YmxpY05hbWVzcGFjZSIsInJ1blhQYXRoUXVlcnkiLCJzZWxlY3RvciIsInhtbGRvbSIsImV4cGVjdCIsImV4dGVuZCIsInRvSGF2ZUNvbnRyb2wiLCJub2RlcyIsIm1lc3NhZ2UiLCJvdXRwdXRYbWwiLCJzZXJpYWxpemVYTUwiLCJwYXNzIiwidG9Ob3RIYXZlQ29udHJvbCIsImZvcm1hdEJ1aWxkaW5nQmxvY2tYTUwiLCJ4bWxTdHJpbmciLCJBcnJheSIsImlzQXJyYXkiLCJqb2luIiwieG1sRm9ybWF0dGVkIiwiZm9ybWF0WE1MIiwicmVwbGFjZSIsImdldENvbnRyb2xBdHRyaWJ1dGUiLCJjb250cm9sU2VsZWN0b3IiLCJhdHRyaWJ1dGVOYW1lIiwieG1sRG9tIiwic2VyaWFsaXplciIsIlhNTFNlcmlhbGl6ZXIiLCJzZXJpYWxpemVUb1N0cmluZyIsImZvcm1hdCIsInhtbFdoaXRlc3BhY2VTZW5zaXRpdml0eSIsImNvbXBpbGVDRFMiLCJjZHNVcmwiLCJvcHRpb25zIiwiZWRteEZpbGVOYW1lIiwicGF0aCIsImJhc2VuYW1lIiwiY2RzU3RyaW5nIiwiZnMiLCJyZWFkRmlsZVN5bmMiLCJlZG14Q29udGVudCIsImNkczJlZG14IiwiZGlyIiwicmVzb2x2ZSIsImVkbXhGaWxlUGF0aCIsIm1rZGlyU3luYyIsInJlY3Vyc2l2ZSIsIndyaXRlRmlsZVN5bmMiLCJjZHMiLCJzZXJ2aWNlIiwic291cmNlcyIsImluY2x1ZGVzIiwiY3NuIiwiY29tcGlsZXIiLCJjb21waWxlU291cmNlcyIsImVkbXhPcHRpb25zIiwib2RhdGFGb3JlaWduS2V5cyIsIm9kYXRhRm9ybWF0Iiwib2RhdGFDb250YWlubWVudCIsImVkbXgiLCJ0byIsIkVycm9yIiwiZ2V0RmFrZVNpZGVFZmZlY3RzU2VydmljZSIsIm9NZXRhTW9kZWwiLCJvU2VydmljZUNvbnRleHQiLCJzY29wZU9iamVjdCIsInNjb3BlVHlwZSIsIlNpZGVFZmZlY3RzRmFjdG9yeSIsImNyZWF0ZUluc3RhbmNlIiwidGhlbiIsIm9TZXJ2aWNlSW5zdGFuY2UiLCJvSmVzdFNpZGVFZmZlY3RzU2VydmljZSIsImdldEludGVyZmFjZSIsImdldENvbnRleHQiLCJnZXRNb2RlbCIsImdldE1ldGFNb2RlbCIsImdldEZha2VEaWFnbm9zdGljcyIsImlzc3VlcyIsImFkZElzc3VlIiwiaXNzdWVDYXRlZ29yeSIsImlzc3VlU2V2ZXJpdHkiLCJkZXRhaWxzIiwicHVzaCIsImdldElzc3VlcyIsImNoZWNrSWZJc3N1ZUV4aXN0cyIsImZpbmQiLCJpc3N1ZSIsImdldENvbnZlcnRlckNvbnRleHRGb3JUZXN0IiwiY29udmVydGVkVHlwZXMiLCJtYW5pZmVzdFNldHRpbmdzIiwiZW50aXR5U2V0IiwiZW50aXR5U2V0cyIsImVzIiwiZGF0YU1vZGVsUGF0aCIsImdldERhdGFNb2RlbE9iamVjdFBhdGhGb3JQcm9wZXJ0eSIsIkNvbnZlcnRlckNvbnRleHQiLCJtZXJnZSIsIm1ldGFNb2RlbENhY2hlIiwic01ldGFkYXRhVXJsIiwib1JlcXVlc3RvciIsIl9NZXRhZGF0YVJlcXVlc3RvciIsImNyZWF0ZSIsIk9EYXRhTWV0YU1vZGVsIiwidW5kZWZpbmVkIiwiZmV0Y2hFbnRpdHlDb250YWluZXIiLCJwcm9wZXJ0eSIsInRhcmdldFBhdGgiLCJzdGFydGluZ0VudGl0eVNldCIsIm5hdmlnYXRpb25Qcm9wZXJ0aWVzIiwidGFyZ2V0T2JqZWN0IiwidGFyZ2V0RW50aXR5U2V0IiwidGFyZ2V0RW50aXR5VHlwZSIsImVudGl0eVR5cGUiLCJjb250ZXh0TG9jYXRpb24iLCJldmFsdWF0ZUJpbmRpbmciLCJiaW5kaW5nU3RyaW5nIiwiYmluZGluZ0VsZW1lbnQiLCJCaW5kaW5nUGFyc2VyIiwiY29tcGxleFBhcnNlciIsImFyZ3MiLCJmb3JtYXR0ZXIiLCJhcHBseSIsImV2YWx1YXRlQmluZGluZ1dpdGhNb2RlbCIsIm1vZGVsQ29udGVudCIsIm5hbWVkTW9kZWxzQ29udGVudCIsInRleHQiLCJJbnZpc2libGVUZXh0IiwiYmluZFByb3BlcnR5IiwiZGVmYXVsdE1vZGVsIiwic2V0TW9kZWwiLCJzZXRCaW5kaW5nQ29udGV4dCIsIk9iamVjdCIsImVudHJpZXMiLCJjb250ZW50IiwiZ2V0VGV4dCIsIlRFU1RWSUVXSUQiLCJhcHBseUZsZXhDaGFuZ2VzIiwiYVZhcmlhbnREZXBlbmRlbnRDb250cm9sQ2hhbmdlcyIsInJlc3VsdFhNTCIsImNyZWF0ZUNoYW5nZXNPYmplY3QiLCJjaGFuZ2VzIiwiYXBwSWQiLCJvTWFuaWZlc3QiLCJpZCIsImNyb3NzTmF2aWdhdGlvbiIsIm91dGJvdW5kcyIsIm9BcHBDb21wb25lbnQiLCJnZXREaWFnbm9zdGljcyIsImZuIiwibW9ja1JldHVyblZhbHVlIiwiZ2V0Q29tcG9uZW50RGF0YSIsImdldE1hbmlmZXN0T2JqZWN0IiwiZ2V0RW50cnkiLCJzcHlPbiIsIkFwcFN0b3JhZ2UiLCJQcm9taXNlIiwiQ29tcG9uZW50IiwiVXRpbHMiLCJGbGV4U3RhdGUiLCJpbml0aWFsaXplIiwiY29tcG9uZW50SWQiLCJYbWxQcmVwcm9jZXNzb3IiLCJnZXRDaGFuZ2VzRnJvbVhNTCIsInhtbCIsInF1ZXJ5U2VsZWN0b3JBbGwiLCJmbGF0TWFwIiwiZSIsImF0dHJpYnV0ZXMiLCJtYXAiLCJhIiwiYXR0ciIsImdldFRlbXBsYXRpbmdSZXN1bHQiLCJ4bWxJbnB1dCIsIm1CaW5kaW5nQ29udGV4dHMiLCJtTW9kZWxzIiwidGVtcGxhdGVkWG1sIiwieG1sRG9jIiwiaGFzT3duUHJvcGVydHkiLCJhc3NpZ24iLCJUZW1wbGF0ZU1vZGVsIiwia2V5cyIsImZvckVhY2giLCJzTW9kZWxOYW1lIiwiaXNUZW1wbGF0ZU1vZGVsIiwiZGF0YSIsIm9QcmVwcm9jZXNzb3JTZXR0aW5ncyIsIm1ldGFNb2RlbCIsInNLZXkiLCJnZXRPYmplY3QiLCJ0b0JlRGVmaW5lZCIsIm9Nb2RlbCIsImNoYW5nZXNBcHBsaWVkIiwidG9CZSIsImdldFRlbXBsYXRlZFhNTCIsInNlcmlhbGl6ZUNvbnRyb2wiLCJjb250cm9sVG9TZXJpYWxpemUiLCJ0YWJDb3VudCIsImdldFRhYiIsInRvQWRkIiwidGFiIiwiaSIsInNlcmlhbGl6ZURlbGVnYXRlIiwic3RhcnQiLCJjb250cm9sIiwic0FnZ3JlZ2F0aW9uTmFtZSIsImNvbnRyb2xEZXRhaWwiLCJnZXRQYXJlbnQiLCJpbmRleEluUGFyZW50IiwiZ2V0QWdncmVnYXRpb24iLCJpbmRleE9mIiwiZ2V0TWV0YWRhdGEiLCJnZXROYW1lIiwiZW5kIiwibWlkZGxlIiwiZ2V0SWQiLCJvQ29udHJvbEtleSIsIm1Qcm9wZXJ0aWVzIiwibUJpbmRpbmdJbmZvcyIsImJpbmRpbmdEZXRhaWwiLCJwYXJ0cyIsImJpbmRpbmdJbmZvIiwibUFzc29jaWF0aW9ucyIsInN0YXJ0QWdncmVnYXRpb24iLCJzTmFtZSIsIm91dCIsImVuZEFnZ3JlZ2F0aW9uIiwiY29udHJvbFRvUmVuZGVyIiwiU2VyaWFsaXplciIsInNlcmlhbGl6ZSIsImNyZWF0ZUF3YWl0ZXIiLCJmblJlc29sdmUiLCJteVByb21pc2UiLCJwcm9taXNlIl0sInNvdXJjZVJvb3QiOiIuIiwic291cmNlcyI6WyJKZXN0VGVtcGxhdGluZ0hlbHBlci50cyJdLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgdHlwZSB7IEFueUFubm90YXRpb24sIENvbnZlcnRlZE1ldGFkYXRhLCBFbnRpdHlTZXQsIFByb3BlcnR5IH0gZnJvbSBcIkBzYXAtdXgvdm9jYWJ1bGFyaWVzLXR5cGVzXCI7XG5pbXBvcnQgY29tcGlsZXIgZnJvbSBcIkBzYXAvY2RzLWNvbXBpbGVyXCI7XG5pbXBvcnQgKiBhcyBmcyBmcm9tIFwiZnNcIjtcbmltcG9ydCAqIGFzIHBhdGggZnJvbSBcInBhdGhcIjtcbmltcG9ydCB0eXBlIHsgUmVxdWlyZWRPcHRpb25zIH0gZnJvbSBcInByZXR0aWVyXCI7XG5pbXBvcnQgeyBmb3JtYXQgfSBmcm9tIFwicHJldHRpZXJcIjtcbmltcG9ydCBMb2cgZnJvbSBcInNhcC9iYXNlL0xvZ1wiO1xuaW1wb3J0IG1lcmdlIGZyb20gXCJzYXAvYmFzZS91dGlsL21lcmdlXCI7XG5pbXBvcnQgQXBwQ29tcG9uZW50IGZyb20gXCJzYXAvZmUvY29yZS9BcHBDb21wb25lbnRcIjtcbmltcG9ydCB7IHJlZ2lzdGVyQnVpbGRpbmdCbG9jayB9IGZyb20gXCJzYXAvZmUvY29yZS9idWlsZGluZ0Jsb2Nrcy9CdWlsZGluZ0Jsb2NrUnVudGltZVwiO1xuaW1wb3J0IENvbnZlcnRlckNvbnRleHQgZnJvbSBcInNhcC9mZS9jb3JlL2NvbnZlcnRlcnMvQ29udmVydGVyQ29udGV4dFwiO1xuaW1wb3J0IHR5cGUgeyBJc3N1ZUNhdGVnb3J5LCBJc3N1ZVNldmVyaXR5IH0gZnJvbSBcInNhcC9mZS9jb3JlL2NvbnZlcnRlcnMvaGVscGVycy9Jc3N1ZU1hbmFnZXJcIjtcbmltcG9ydCB0eXBlIHsgTGlzdFJlcG9ydE1hbmlmZXN0U2V0dGluZ3MsIE9iamVjdFBhZ2VNYW5pZmVzdFNldHRpbmdzIH0gZnJvbSBcInNhcC9mZS9jb3JlL2NvbnZlcnRlcnMvTWFuaWZlc3RTZXR0aW5nc1wiO1xuaW1wb3J0IHR5cGUgeyBJRGlhZ25vc3RpY3MgfSBmcm9tIFwic2FwL2ZlL2NvcmUvY29udmVydGVycy9UZW1wbGF0ZUNvbnZlcnRlclwiO1xuaW1wb3J0IFNpZGVFZmZlY3RzRmFjdG9yeSBmcm9tIFwic2FwL2ZlL2NvcmUvc2VydmljZXMvU2lkZUVmZmVjdHNTZXJ2aWNlRmFjdG9yeVwiO1xuaW1wb3J0IFRlbXBsYXRlTW9kZWwgZnJvbSBcInNhcC9mZS9jb3JlL1RlbXBsYXRlTW9kZWxcIjtcbmltcG9ydCB0eXBlIHsgRGF0YU1vZGVsT2JqZWN0UGF0aCB9IGZyb20gXCJzYXAvZmUvY29yZS90ZW1wbGF0aW5nL0RhdGFNb2RlbFBhdGhIZWxwZXJcIjtcbmltcG9ydCBCaW5kaW5nUGFyc2VyIGZyb20gXCJzYXAvdWkvYmFzZS9CaW5kaW5nUGFyc2VyXCI7XG5pbXBvcnQgTWFuYWdlZE9iamVjdCBmcm9tIFwic2FwL3VpL2Jhc2UvTWFuYWdlZE9iamVjdFwiO1xuaW1wb3J0IENvbXBvbmVudCBmcm9tIFwic2FwL3VpL2NvcmUvQ29tcG9uZW50XCI7XG5pbXBvcnQgQ29udHJvbCBmcm9tIFwic2FwL3VpL2NvcmUvQ29udHJvbFwiO1xuaW1wb3J0IEludmlzaWJsZVRleHQgZnJvbSBcInNhcC91aS9jb3JlL0ludmlzaWJsZVRleHRcIjtcbmltcG9ydCBTZXJpYWxpemVyIGZyb20gXCJzYXAvdWkvY29yZS91dGlsL3NlcmlhbGl6ZXIvU2VyaWFsaXplclwiO1xuaW1wb3J0IFhNTFByZXByb2Nlc3NvciBmcm9tIFwic2FwL3VpL2NvcmUvdXRpbC9YTUxQcmVwcm9jZXNzb3JcIjtcbmltcG9ydCBGbGV4U3RhdGUgZnJvbSBcInNhcC91aS9mbC9hcHBseS9faW50ZXJuYWwvZmxleFN0YXRlL0ZsZXhTdGF0ZVwiO1xuaW1wb3J0IFhtbFByZXByb2Nlc3NvciBmcm9tIFwic2FwL3VpL2ZsL2FwcGx5L19pbnRlcm5hbC9wcmVwcm9jZXNzb3JzL1htbFByZXByb2Nlc3NvclwiO1xuaW1wb3J0IEFwcFN0b3JhZ2UgZnJvbSBcInNhcC91aS9mbC9pbml0aWFsL19pbnRlcm5hbC9TdG9yYWdlXCI7XG5pbXBvcnQgVXRpbHMgZnJvbSBcInNhcC91aS9mbC9VdGlsc1wiO1xuaW1wb3J0IHR5cGUgQ29udGV4dCBmcm9tIFwic2FwL3VpL21vZGVsL0NvbnRleHRcIjtcbmltcG9ydCBKU09OTW9kZWwgZnJvbSBcInNhcC91aS9tb2RlbC9qc29uL0pTT05Nb2RlbFwiO1xuaW1wb3J0IE1ldGFNb2RlbCBmcm9tIFwic2FwL3VpL21vZGVsL01ldGFNb2RlbFwiO1xuaW1wb3J0IF9NZXRhZGF0YVJlcXVlc3RvciBmcm9tIFwic2FwL3VpL21vZGVsL29kYXRhL3Y0L2xpYi9fTWV0YWRhdGFSZXF1ZXN0b3JcIjtcbmltcG9ydCBPRGF0YU1ldGFNb2RlbCBmcm9tIFwic2FwL3VpL21vZGVsL29kYXRhL3Y0L09EYXRhTWV0YU1vZGVsXCI7XG5pbXBvcnQgeHBhdGggZnJvbSBcInhwYXRoXCI7XG4vLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgQHR5cGVzY3JpcHQtZXNsaW50L25vLXZhci1yZXF1aXJlc1xuY29uc3QgZm9ybWF0WG1sID0gcmVxdWlyZShcInhtbC1mb3JtYXR0ZXJcIik7XG5cbkxvZy5zZXRMZXZlbCgxIGFzIGFueSwgXCJzYXAudWkuY29yZS51dGlsLlhNTFByZXByb2Nlc3NvclwiKTtcbmplc3Quc2V0VGltZW91dCg0MDAwMCk7XG5cbmNvbnN0IG5hbWVTcGFjZU1hcCA9IHtcblx0XCJtYWNyb3NcIjogXCJzYXAuZmUubWFjcm9zXCIsXG5cdFwibWFjcm9cIjogXCJzYXAuZmUubWFjcm9zXCIsXG5cdFwibWFjcm9GaWVsZFwiOiBcInNhcC5mZS5tYWNyb3MuZmllbGRcIixcblx0XCJtYWNyb2RhdGFcIjogXCJodHRwOi8vc2NoZW1hcy5zYXAuY29tL3NhcHVpNS9leHRlbnNpb24vc2FwLnVpLmNvcmUuQ3VzdG9tRGF0YS8xXCIsXG5cdFwibG9nXCI6IFwiaHR0cDovL3NjaGVtYXMuc2FwLmNvbS9zYXB1aTUvZXh0ZW5zaW9uL3NhcC51aS5jb3JlLkN1c3RvbURhdGEvMVwiLFxuXHRcInVuaXR0ZXN0XCI6IFwiaHR0cDovL3NjaGVtYXMuc2FwLmNvbS9zYXB1aTUvcHJlcHJvY2Vzc29yZXh0ZW5zaW9uL3NhcC5mZS51bml0dGVzdGluZy8xXCIsXG5cdFwiY29udHJvbFwiOiBcInNhcC5mZS5jb3JlLmNvbnRyb2xzXCIsXG5cdFwiY29yZVwiOiBcInNhcC51aS5jb3JlXCIsXG5cdFwibVwiOiBcInNhcC5tXCIsXG5cdFwiZlwiOiBcInNhcC51aS5sYXlvdXQuZm9ybVwiLFxuXHRcImludGVybmFsTWFjcm9cIjogXCJzYXAuZmUubWFjcm9zLmludGVybmFsXCIsXG5cdFwibWRjXCI6IFwic2FwLnVpLm1kY1wiLFxuXHRcIm1kY2F0XCI6IFwic2FwLnVpLm1kYy5hY3Rpb250b29sYmFyXCIsXG5cdFwibWRjRmllbGRcIjogXCJzYXAudWkubWRjLmZpZWxkXCIsXG5cdFwibWRjVGFibGVcIjogXCJzYXAudWkubWRjLnRhYmxlXCIsXG5cdFwidVwiOiBcInNhcC51aS51bmlmaWVkXCIsXG5cdFwibWFjcm9NaWNyb0NoYXJ0XCI6IFwic2FwLmZlLm1hY3Jvcy5taWNyb2NoYXJ0XCIsXG5cdFwibWljcm9DaGFydFwiOiBcInNhcC5zdWl0ZS51aS5taWNyb2NoYXJ0XCIsXG5cdFwibWFjcm9UYWJsZVwiOiBcInNhcC5mZS5tYWNyb3MudGFibGVcIlxufTtcbmNvbnN0IHNlbGVjdCA9IHhwYXRoLnVzZU5hbWVzcGFjZXMobmFtZVNwYWNlTWFwKTtcblxuZXhwb3J0IGNvbnN0IHJlZ2lzdGVyTWFjcm8gPSBmdW5jdGlvbiAobWFjcm9NZXRhZGF0YTogYW55KSB7XG5cdHJlZ2lzdGVyQnVpbGRpbmdCbG9jayhtYWNyb01ldGFkYXRhKTtcbn07XG5leHBvcnQgY29uc3QgdW5yZWdpc3Rlck1hY3JvID0gZnVuY3Rpb24gKG1hY3JvTWV0YWRhdGE6IGFueSkge1xuXHRYTUxQcmVwcm9jZXNzb3IucGx1Z0luKG51bGwsIG1hY3JvTWV0YWRhdGEubmFtZXNwYWNlLCBtYWNyb01ldGFkYXRhLm5hbWUpO1xuXHRpZiAobWFjcm9NZXRhZGF0YS5wdWJsaWNOYW1lc3BhY2UpIHtcblx0XHRYTUxQcmVwcm9jZXNzb3IucGx1Z0luKG51bGwsIG1hY3JvTWV0YWRhdGEucHVibGljTmFtZXNwYWNlLCBtYWNyb01ldGFkYXRhLm5hbWUpO1xuXHR9XG59O1xuZXhwb3J0IGNvbnN0IHJ1blhQYXRoUXVlcnkgPSBmdW5jdGlvbiAoc2VsZWN0b3I6IHN0cmluZywgeG1sZG9tOiBOb2RlIHwgdW5kZWZpbmVkKSB7XG5cdHJldHVybiBzZWxlY3Qoc2VsZWN0b3IsIHhtbGRvbSk7XG59O1xuXG5leHBlY3QuZXh0ZW5kKHtcblx0dG9IYXZlQ29udHJvbCh4bWxkb20sIHNlbGVjdG9yKSB7XG5cdFx0Y29uc3Qgbm9kZXMgPSBydW5YUGF0aFF1ZXJ5KGAvcm9vdCR7c2VsZWN0b3J9YCwgeG1sZG9tKTtcblx0XHRyZXR1cm4ge1xuXHRcdFx0bWVzc2FnZTogKCkgPT4ge1xuXHRcdFx0XHRjb25zdCBvdXRwdXRYbWwgPSBzZXJpYWxpemVYTUwoeG1sZG9tKTtcblx0XHRcdFx0cmV0dXJuIGBkaWQgbm90IGZpbmQgY29udHJvbHMgbWF0Y2hpbmcgJHtzZWxlY3Rvcn0gaW4gZ2VuZXJhdGVkIHhtbDpcXG4gJHtvdXRwdXRYbWx9YDtcblx0XHRcdH0sXG5cdFx0XHRwYXNzOiBub2RlcyAmJiBub2Rlcy5sZW5ndGggPj0gMVxuXHRcdH07XG5cdH0sXG5cdHRvTm90SGF2ZUNvbnRyb2woeG1sZG9tLCBzZWxlY3Rvcikge1xuXHRcdGNvbnN0IG5vZGVzID0gcnVuWFBhdGhRdWVyeShgL3Jvb3Qke3NlbGVjdG9yfWAsIHhtbGRvbSk7XG5cdFx0cmV0dXJuIHtcblx0XHRcdG1lc3NhZ2U6ICgpID0+IHtcblx0XHRcdFx0Y29uc3Qgb3V0cHV0WG1sID0gc2VyaWFsaXplWE1MKHhtbGRvbSk7XG5cdFx0XHRcdHJldHVybiBgVGhlcmUgaXMgYSBjb250cm9sIG1hdGNoaW5nICR7c2VsZWN0b3J9IGluIGdlbmVyYXRlZCB4bWw6XFxuICR7b3V0cHV0WG1sfWA7XG5cdFx0XHR9LFxuXHRcdFx0cGFzczogbm9kZXMgJiYgbm9kZXMubGVuZ3RoID09PSAwXG5cdFx0fTtcblx0fVxufSk7XG5cbmV4cG9ydCBjb25zdCBmb3JtYXRCdWlsZGluZ0Jsb2NrWE1MID0gZnVuY3Rpb24gKHhtbFN0cmluZzogc3RyaW5nIHwgc3RyaW5nW10pIHtcblx0aWYgKEFycmF5LmlzQXJyYXkoeG1sU3RyaW5nKSkge1xuXHRcdHhtbFN0cmluZyA9IHhtbFN0cmluZy5qb2luKFwiXCIpO1xuXHR9XG5cdGxldCB4bWxGb3JtYXR0ZWQgPSBmb3JtYXRYTUwoeG1sU3RyaW5nKTtcblx0eG1sRm9ybWF0dGVkID0geG1sRm9ybWF0dGVkLnJlcGxhY2UoL3VpZC0taWQtWzAtOV17MTN9LVswLTldezEsMn0vZywgXCJ1aWQtLWlkXCIpO1xuXHRyZXR1cm4geG1sRm9ybWF0dGVkO1xufTtcblxuZXhwb3J0IGNvbnN0IGdldENvbnRyb2xBdHRyaWJ1dGUgPSBmdW5jdGlvbiAoY29udHJvbFNlbGVjdG9yOiBzdHJpbmcsIGF0dHJpYnV0ZU5hbWU6IHN0cmluZywgeG1sRG9tOiBOb2RlKSB7XG5cdGNvbnN0IHNlbGVjdG9yID0gYHN0cmluZygvcm9vdCR7Y29udHJvbFNlbGVjdG9yfS9AJHthdHRyaWJ1dGVOYW1lfSlgO1xuXHRyZXR1cm4gcnVuWFBhdGhRdWVyeShzZWxlY3RvciwgeG1sRG9tKTtcbn07XG5cbmV4cG9ydCBjb25zdCBzZXJpYWxpemVYTUwgPSBmdW5jdGlvbiAoeG1sRG9tOiBOb2RlKSB7XG5cdGNvbnN0IHNlcmlhbGl6ZXIgPSBuZXcgd2luZG93LlhNTFNlcmlhbGl6ZXIoKTtcblx0Y29uc3QgeG1sU3RyaW5nID0gc2VyaWFsaXplci5zZXJpYWxpemVUb1N0cmluZyh4bWxEb20pO1xuXHRyZXR1cm4gZm9ybWF0WE1MKHhtbFN0cmluZyk7XG59O1xuXG5leHBvcnQgY29uc3QgZm9ybWF0WE1MID0gZnVuY3Rpb24gKHhtbFN0cmluZzogc3RyaW5nKSB7XG5cdHJldHVybiBmb3JtYXQoXG5cdFx0eG1sU3RyaW5nLFxuXHRcdHsgcGFyc2VyOiBcInhtbFwiLCB4bWxXaGl0ZXNwYWNlU2Vuc2l0aXZpdHk6IFwiaWdub3JlXCIgfSBhcyBQYXJ0aWFsPFJlcXVpcmVkT3B0aW9ucz4gLyogb3B0aW9ucyBieSB0aGUgUHJldHRpZXIgWE1MIHBsdWdpbiAqL1xuXHQpO1xufTtcblxuLyoqXG4gKiBDb21waWxlIGEgQ0RTIGZpbGUgaW50byBhbiBFRE1YIGZpbGUuXG4gKlxuICogQHBhcmFtIGNkc1VybCBUaGUgcGF0aCB0byB0aGUgZmlsZSBjb250YWluaW5nIHRoZSBDRFMgZGVmaW5pdGlvbi4gVGhpcyBmaWxlIG11c3QgZGVjbGFyZSB0aGUgbmFtZXNwYWNlXG4gKiBzYXAuZmUudGVzdCBhbmQgYSBzZXJ2aWNlIEplc3RTZXJ2aWNlXG4gKiBAcGFyYW0gb3B0aW9ucyBPcHRpb25zIGZvciBjcmVhdGluZyB0aGUgRURNWCBvdXRwdXRcbiAqIEBwYXJhbSBlZG14RmlsZU5hbWUgQWxsb3dzIHlvdSB0byBvdmVycmlkZSB0aGUgbmFtZSBvZiB0aGUgY29tcGlsZWQgRURNWCBtZXRhZGF0YSBmaWxlXG4gKiBAcmV0dXJucyBUaGUgcGF0aCBvZiB0aGUgZ2VuZXJhdGVkIEVETVhcbiAqL1xuZXhwb3J0IGNvbnN0IGNvbXBpbGVDRFMgPSBmdW5jdGlvbiAoXG5cdGNkc1VybDogc3RyaW5nLFxuXHRvcHRpb25zOiBjb21waWxlci5PRGF0YU9wdGlvbnMgPSB7fSxcblx0ZWRteEZpbGVOYW1lID0gcGF0aC5iYXNlbmFtZShjZHNVcmwpLnJlcGxhY2UoXCIuY2RzXCIsIFwiLnhtbFwiKVxuKSB7XG5cdGNvbnN0IGNkc1N0cmluZyA9IGZzLnJlYWRGaWxlU3luYyhjZHNVcmwsIFwidXRmLThcIik7XG5cdGNvbnN0IGVkbXhDb250ZW50ID0gY2RzMmVkbXgoY2RzU3RyaW5nLCBcInNhcC5mZS50ZXN0Lkplc3RTZXJ2aWNlXCIsIG9wdGlvbnMpO1xuXHRjb25zdCBkaXIgPSBwYXRoLnJlc29sdmUoY2RzVXJsLCBcIi4uXCIsIFwiZ2VuXCIpO1xuXG5cdGNvbnN0IGVkbXhGaWxlUGF0aCA9IHBhdGgucmVzb2x2ZShkaXIsIGVkbXhGaWxlTmFtZSk7XG5cblx0ZnMubWtkaXJTeW5jKGRpciwgeyByZWN1cnNpdmU6IHRydWUgfSk7XG5cblx0ZnMud3JpdGVGaWxlU3luYyhlZG14RmlsZVBhdGgsIGVkbXhDb250ZW50KTtcblx0cmV0dXJuIGVkbXhGaWxlUGF0aDtcbn07XG5cbi8qKlxuICogQ29tcGlsZSBDRFMgdG8gRURNWC5cbiAqXG4gKiBAcGFyYW0gY2RzIFRoZSBDRFMgbW9kZWwuIEl0IG11c3QgZGVmaW5lIGF0IGxlYXN0IG9uZSBzZXJ2aWNlLlxuICogQHBhcmFtIHNlcnZpY2UgVGhlIGZ1bGx5LXF1YWxpZmllZCBuYW1lIG9mIHRoZSBzZXJ2aWNlIHRvIGJlIGNvbXBpbGVkLiBEZWZhdWx0cyB0byBcInNhcC5mZS50ZXN0Lkplc3RTZXJ2aWNlXCIuXG4gKiBAcGFyYW0gb3B0aW9ucyBPcHRpb25zIGZvciBjcmVhdGluZyB0aGUgRURNWCBvdXRwdXRcbiAqIEByZXR1cm5zIFRoZSBjb21waWxlZCBzZXJ2aWNlIG1vZGVsIGFzIEVETVguXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBjZHMyZWRteChjZHM6IHN0cmluZywgc2VydmljZSA9IFwic2FwLmZlLnRlc3QuSmVzdFNlcnZpY2VcIiwgb3B0aW9uczogY29tcGlsZXIuT0RhdGFPcHRpb25zID0ge30pIHtcblx0Y29uc3Qgc291cmNlczogUmVjb3JkPHN0cmluZywgc3RyaW5nPiA9IHsgXCJzb3VyY2UuY2RzXCI6IGNkcyB9O1xuXG5cdC8vIGFsbG93IHRvIGluY2x1ZGUgc3R1ZmYgZnJvbSBAc2FwL2Nkcy9jb21tb25cblx0aWYgKGNkcy5pbmNsdWRlcyhcIidAc2FwL2Nkcy9jb21tb24nXCIpKSB7XG5cdFx0c291cmNlc1tcImNvbW1vbi5jZHNcIl0gPSBmcy5yZWFkRmlsZVN5bmMocmVxdWlyZS5yZXNvbHZlKFwiQHNhcC9jZHMvY29tbW9uLmNkc1wiKSwgXCJ1dGYtOFwiKTtcblx0fVxuXG5cdGNvbnN0IGNzbiA9IGNvbXBpbGVyLmNvbXBpbGVTb3VyY2VzKHNvdXJjZXMsIHt9KTtcblxuXHRjb25zdCBlZG14T3B0aW9uczogY29tcGlsZXIuT0RhdGFPcHRpb25zID0ge1xuXHRcdG9kYXRhRm9yZWlnbktleXM6IHRydWUsXG5cdFx0b2RhdGFGb3JtYXQ6IFwic3RydWN0dXJlZFwiLFxuXHRcdG9kYXRhQ29udGFpbm1lbnQ6IGZhbHNlLFxuXHRcdC4uLm9wdGlvbnMsXG5cdFx0c2VydmljZTogc2VydmljZVxuXHR9O1xuXG5cdGNvbnN0IGVkbXggPSBjb21waWxlci50by5lZG14KGNzbiwgZWRteE9wdGlvbnMpO1xuXHRpZiAoIWVkbXgpIHtcblx0XHR0aHJvdyBuZXcgRXJyb3IoYENvbXBpbGF0aW9uIGZhaWxlZC4gSGludDogTWFrZSBzdXJlIHRoYXQgdGhlIENEUyBtb2RlbCBkZWZpbmVzIHNlcnZpY2UgJHtzZXJ2aWNlfS5gKTtcblx0fVxuXHRyZXR1cm4gZWRteDtcbn1cblxuZXhwb3J0IGNvbnN0IGdldEZha2VTaWRlRWZmZWN0c1NlcnZpY2UgPSBhc3luYyBmdW5jdGlvbiAob01ldGFNb2RlbDogT0RhdGFNZXRhTW9kZWwpOiBQcm9taXNlPGFueT4ge1xuXHRjb25zdCBvU2VydmljZUNvbnRleHQgPSB7IHNjb3BlT2JqZWN0OiB7fSwgc2NvcGVUeXBlOiBcIlwiLCBzZXR0aW5nczoge30gfTtcblx0cmV0dXJuIG5ldyBTaWRlRWZmZWN0c0ZhY3RvcnkoKS5jcmVhdGVJbnN0YW5jZShvU2VydmljZUNvbnRleHQpLnRoZW4oZnVuY3Rpb24gKG9TZXJ2aWNlSW5zdGFuY2U6IGFueSkge1xuXHRcdGNvbnN0IG9KZXN0U2lkZUVmZmVjdHNTZXJ2aWNlID0gb1NlcnZpY2VJbnN0YW5jZS5nZXRJbnRlcmZhY2UoKTtcblx0XHRvSmVzdFNpZGVFZmZlY3RzU2VydmljZS5nZXRDb250ZXh0ID0gZnVuY3Rpb24gKCkge1xuXHRcdFx0cmV0dXJuIHtcblx0XHRcdFx0c2NvcGVPYmplY3Q6IHtcblx0XHRcdFx0XHRnZXRNb2RlbDogZnVuY3Rpb24gKCkge1xuXHRcdFx0XHRcdFx0cmV0dXJuIHtcblx0XHRcdFx0XHRcdFx0Z2V0TWV0YU1vZGVsOiBmdW5jdGlvbiAoKSB7XG5cdFx0XHRcdFx0XHRcdFx0cmV0dXJuIG9NZXRhTW9kZWw7XG5cdFx0XHRcdFx0XHRcdH1cblx0XHRcdFx0XHRcdH07XG5cdFx0XHRcdFx0fVxuXHRcdFx0XHR9XG5cdFx0XHR9O1xuXHRcdH07XG5cdFx0cmV0dXJuIG9KZXN0U2lkZUVmZmVjdHNTZXJ2aWNlO1xuXHR9KTtcbn07XG5cbmV4cG9ydCBjb25zdCBnZXRGYWtlRGlhZ25vc3RpY3MgPSBmdW5jdGlvbiAoKTogSURpYWdub3N0aWNzIHtcblx0Y29uc3QgaXNzdWVzOiBhbnlbXSA9IFtdO1xuXHRyZXR1cm4ge1xuXHRcdGFkZElzc3VlKGlzc3VlQ2F0ZWdvcnk6IElzc3VlQ2F0ZWdvcnksIGlzc3VlU2V2ZXJpdHk6IElzc3VlU2V2ZXJpdHksIGRldGFpbHM6IHN0cmluZyk6IHZvaWQge1xuXHRcdFx0aXNzdWVzLnB1c2goe1xuXHRcdFx0XHRpc3N1ZUNhdGVnb3J5LFxuXHRcdFx0XHRpc3N1ZVNldmVyaXR5LFxuXHRcdFx0XHRkZXRhaWxzXG5cdFx0XHR9KTtcblx0XHR9LFxuXHRcdGdldElzc3VlcygpOiBhbnlbXSB7XG5cdFx0XHRyZXR1cm4gaXNzdWVzO1xuXHRcdH0sXG5cdFx0Y2hlY2tJZklzc3VlRXhpc3RzKGlzc3VlQ2F0ZWdvcnk6IElzc3VlQ2F0ZWdvcnksIGlzc3VlU2V2ZXJpdHk6IElzc3VlU2V2ZXJpdHksIGRldGFpbHM6IHN0cmluZyk6IGJvb2xlYW4ge1xuXHRcdFx0cmV0dXJuIGlzc3Vlcy5maW5kKChpc3N1ZSkgPT4ge1xuXHRcdFx0XHRyZXR1cm4gaXNzdWUuaXNzdWVDYXRlZ29yeSA9PT0gaXNzdWVDYXRlZ29yeSAmJiBpc3N1ZS5pc3N1ZVNldmVyaXR5ID09PSBpc3N1ZVNldmVyaXR5ICYmIGlzc3VlLmRldGFpbHMgPT09IGRldGFpbHM7XG5cdFx0XHR9KTtcblx0XHR9XG5cdH07XG59O1xuXG5leHBvcnQgY29uc3QgZ2V0Q29udmVydGVyQ29udGV4dEZvclRlc3QgPSBmdW5jdGlvbiAoXG5cdGNvbnZlcnRlZFR5cGVzOiBDb252ZXJ0ZWRNZXRhZGF0YSxcblx0bWFuaWZlc3RTZXR0aW5nczogTGlzdFJlcG9ydE1hbmlmZXN0U2V0dGluZ3MgfCBPYmplY3RQYWdlTWFuaWZlc3RTZXR0aW5nc1xuKSB7XG5cdGNvbnN0IGVudGl0eVNldCA9IGNvbnZlcnRlZFR5cGVzLmVudGl0eVNldHMuZmluZCgoZXMpID0+IGVzLm5hbWUgPT09IG1hbmlmZXN0U2V0dGluZ3MuZW50aXR5U2V0KTtcblx0Y29uc3QgZGF0YU1vZGVsUGF0aCA9IGdldERhdGFNb2RlbE9iamVjdFBhdGhGb3JQcm9wZXJ0eShlbnRpdHlTZXQgYXMgRW50aXR5U2V0LCBjb252ZXJ0ZWRUeXBlcywgZW50aXR5U2V0KTtcblx0cmV0dXJuIG5ldyBDb252ZXJ0ZXJDb250ZXh0KGNvbnZlcnRlZFR5cGVzLCBtYW5pZmVzdFNldHRpbmdzLCBnZXRGYWtlRGlhZ25vc3RpY3MoKSwgbWVyZ2UsIGRhdGFNb2RlbFBhdGgpO1xufTtcbmNvbnN0IG1ldGFNb2RlbENhY2hlOiBhbnkgPSB7fTtcbmV4cG9ydCBjb25zdCBnZXRNZXRhTW9kZWwgPSBhc3luYyBmdW5jdGlvbiAoc01ldGFkYXRhVXJsOiBzdHJpbmcpIHtcblx0Y29uc3Qgb1JlcXVlc3RvciA9IF9NZXRhZGF0YVJlcXVlc3Rvci5jcmVhdGUoe30sIFwiNC4wXCIsIHt9KTtcblx0aWYgKCFtZXRhTW9kZWxDYWNoZVtzTWV0YWRhdGFVcmxdKSB7XG5cdFx0Y29uc3Qgb01ldGFNb2RlbCA9IG5ldyAoT0RhdGFNZXRhTW9kZWwgYXMgYW55KShvUmVxdWVzdG9yLCBzTWV0YWRhdGFVcmwsIHVuZGVmaW5lZCwgbnVsbCk7XG5cdFx0YXdhaXQgb01ldGFNb2RlbC5mZXRjaEVudGl0eUNvbnRhaW5lcigpO1xuXHRcdG1ldGFNb2RlbENhY2hlW3NNZXRhZGF0YVVybF0gPSBvTWV0YU1vZGVsO1xuXHR9XG5cblx0cmV0dXJuIG1ldGFNb2RlbENhY2hlW3NNZXRhZGF0YVVybF07XG59O1xuXG5leHBvcnQgY29uc3QgZ2V0RGF0YU1vZGVsT2JqZWN0UGF0aEZvclByb3BlcnR5ID0gZnVuY3Rpb24gKFxuXHRlbnRpdHlTZXQ6IEVudGl0eVNldCxcblx0Y29udmVydGVkVHlwZXM6IENvbnZlcnRlZE1ldGFkYXRhLFxuXHRwcm9wZXJ0eT86IFByb3BlcnR5IHwgRW50aXR5U2V0IHwgQW55QW5ub3RhdGlvblxuKTogRGF0YU1vZGVsT2JqZWN0UGF0aCB7XG5cdGNvbnN0IHRhcmdldFBhdGg6IERhdGFNb2RlbE9iamVjdFBhdGggPSB7XG5cdFx0c3RhcnRpbmdFbnRpdHlTZXQ6IGVudGl0eVNldCxcblx0XHRuYXZpZ2F0aW9uUHJvcGVydGllczogW10sXG5cdFx0dGFyZ2V0T2JqZWN0OiBwcm9wZXJ0eSxcblx0XHR0YXJnZXRFbnRpdHlTZXQ6IGVudGl0eVNldCxcblx0XHR0YXJnZXRFbnRpdHlUeXBlOiBlbnRpdHlTZXQuZW50aXR5VHlwZSxcblx0XHRjb252ZXJ0ZWRUeXBlczogY29udmVydGVkVHlwZXNcblx0fTtcblx0dGFyZ2V0UGF0aC5jb250ZXh0TG9jYXRpb24gPSB0YXJnZXRQYXRoO1xuXHRyZXR1cm4gdGFyZ2V0UGF0aDtcbn07XG5cbmV4cG9ydCBjb25zdCBldmFsdWF0ZUJpbmRpbmcgPSBmdW5jdGlvbiAoYmluZGluZ1N0cmluZzogc3RyaW5nLCAuLi5hcmdzOiBhbnlbXSkge1xuXHRjb25zdCBiaW5kaW5nRWxlbWVudCA9IEJpbmRpbmdQYXJzZXIuY29tcGxleFBhcnNlcihiaW5kaW5nU3RyaW5nKTtcblx0cmV0dXJuIGJpbmRpbmdFbGVtZW50LmZvcm1hdHRlci5hcHBseSh1bmRlZmluZWQsIGFyZ3MpO1xufTtcblxudHlwZSBNb2RlbENvbnRlbnQgPSB7XG5cdFtuYW1lOiBzdHJpbmddOiBhbnk7XG59O1xuXG4vKipcbiAqIEV2YWx1YXRlIGEgYmluZGluZyBhZ2FpbnN0IGEgbW9kZWwuXG4gKlxuICogQHBhcmFtIGJpbmRpbmdTdHJpbmcgVGhlIGJpbmRpbmcgc3RyaW5nLlxuICogQHBhcmFtIG1vZGVsQ29udGVudCBDb250ZW50IG9mIHRoZSBkZWZhdWx0IG1vZGVsIHRvIHVzZSBmb3IgZXZhbHVhdGlvbi5cbiAqIEBwYXJhbSBuYW1lZE1vZGVsc0NvbnRlbnQgQ29udGVudHMgb2YgYWRkaXRpb25hbCwgbmFtZWQgbW9kZWxzIHRvIHVzZS5cbiAqIEByZXR1cm5zIFRoZSBldmFsdWF0ZWQgYmluZGluZy5cbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGV2YWx1YXRlQmluZGluZ1dpdGhNb2RlbChcblx0YmluZGluZ1N0cmluZzogc3RyaW5nIHwgdW5kZWZpbmVkLFxuXHRtb2RlbENvbnRlbnQ6IE1vZGVsQ29udGVudCxcblx0bmFtZWRNb2RlbHNDb250ZW50PzogeyBbbW9kZWxOYW1lOiBzdHJpbmddOiBNb2RlbENvbnRlbnQgfVxuKTogc3RyaW5nIHtcblx0Y29uc3QgYmluZGluZ0VsZW1lbnQgPSBCaW5kaW5nUGFyc2VyLmNvbXBsZXhQYXJzZXIoYmluZGluZ1N0cmluZyk7XG5cdGNvbnN0IHRleHQgPSBuZXcgSW52aXNpYmxlVGV4dCgpO1xuXHR0ZXh0LmJpbmRQcm9wZXJ0eShcInRleHRcIiwgYmluZGluZ0VsZW1lbnQpO1xuXG5cdGNvbnN0IGRlZmF1bHRNb2RlbCA9IG5ldyBKU09OTW9kZWwobW9kZWxDb250ZW50KTtcblx0dGV4dC5zZXRNb2RlbChkZWZhdWx0TW9kZWwpO1xuXHR0ZXh0LnNldEJpbmRpbmdDb250ZXh0KGRlZmF1bHRNb2RlbC5jcmVhdGVCaW5kaW5nQ29udGV4dChcIi9cIikgYXMgQ29udGV4dCk7XG5cblx0aWYgKG5hbWVkTW9kZWxzQ29udGVudCkge1xuXHRcdGZvciAoY29uc3QgW25hbWUsIGNvbnRlbnRdIG9mIE9iamVjdC5lbnRyaWVzKG5hbWVkTW9kZWxzQ29udGVudCkpIHtcblx0XHRcdGNvbnN0IG1vZGVsID0gbmV3IEpTT05Nb2RlbChjb250ZW50KTtcblx0XHRcdHRleHQuc2V0TW9kZWwobW9kZWwsIG5hbWUpO1xuXHRcdFx0dGV4dC5zZXRCaW5kaW5nQ29udGV4dChtb2RlbC5jcmVhdGVCaW5kaW5nQ29udGV4dChcIi9cIikgYXMgQ29udGV4dCwgbmFtZSk7XG5cdFx0fVxuXHR9XG5cblx0cmV0dXJuIHRleHQuZ2V0VGV4dCgpO1xufVxuXG5jb25zdCBURVNUVklFV0lEID0gXCJ0ZXN0Vmlld0lkXCI7XG5cbmV4cG9ydCBjb25zdCBhcHBseUZsZXhDaGFuZ2VzID0gYXN5bmMgZnVuY3Rpb24gKFxuXHRhVmFyaWFudERlcGVuZGVudENvbnRyb2xDaGFuZ2VzOiBhbnlbXSxcblx0b01ldGFNb2RlbDogTWV0YU1vZGVsLFxuXHRyZXN1bHRYTUw6IGFueSxcblx0Y3JlYXRlQ2hhbmdlc09iamVjdDogRnVuY3Rpb25cbikge1xuXHRjb25zdCBjaGFuZ2VzID0gY3JlYXRlQ2hhbmdlc09iamVjdChURVNUVklFV0lELCBhVmFyaWFudERlcGVuZGVudENvbnRyb2xDaGFuZ2VzKTtcblx0Y29uc3QgYXBwSWQgPSBcInNvbWVDb21wb25lbnRcIjtcblx0Y29uc3Qgb01hbmlmZXN0ID0ge1xuXHRcdFwic2FwLmFwcFwiOiB7XG5cdFx0XHRpZDogYXBwSWQsXG5cdFx0XHR0eXBlOiBcImFwcGxpY2F0aW9uXCIsXG5cdFx0XHRjcm9zc05hdmlnYXRpb246IHtcblx0XHRcdFx0b3V0Ym91bmRzOiBbXVxuXHRcdFx0fVxuXHRcdH1cblx0fTtcblx0Y29uc3Qgb0FwcENvbXBvbmVudDogQXBwQ29tcG9uZW50ID0ge1xuXHRcdGdldERpYWdub3N0aWNzOiBqZXN0LmZuKCkubW9ja1JldHVyblZhbHVlKGdldEZha2VEaWFnbm9zdGljcygpKSxcblx0XHRnZXRNb2RlbDogamVzdC5mbigpLm1vY2tSZXR1cm5WYWx1ZSh7XG5cdFx0XHRnZXRNZXRhTW9kZWw6IGplc3QuZm4oKS5tb2NrUmV0dXJuVmFsdWUob01ldGFNb2RlbClcblx0XHR9KSxcblx0XHRnZXRDb21wb25lbnREYXRhOiBqZXN0LmZuKCkubW9ja1JldHVyblZhbHVlKHt9KSxcblx0XHRnZXRNYW5pZmVzdE9iamVjdDogamVzdC5mbigpLm1vY2tSZXR1cm5WYWx1ZSh7XG5cdFx0XHRnZXRFbnRyeTogZnVuY3Rpb24gKG5hbWU6IHN0cmluZykge1xuXHRcdFx0XHRyZXR1cm4gKG9NYW5pZmVzdCBhcyBhbnkpW25hbWVdO1xuXHRcdFx0fVxuXHRcdH0pXG5cdH0gYXMgdW5rbm93biBhcyBBcHBDb21wb25lbnQ7XG5cdC8vZmFrZSBjaGFuZ2VzXG5cdGplc3Quc3B5T24oQXBwU3RvcmFnZSwgXCJsb2FkRmxleERhdGFcIikubW9ja1JldHVyblZhbHVlKFByb21pc2UucmVzb2x2ZShjaGFuZ2VzKSk7XG5cdGplc3Quc3B5T24oQ29tcG9uZW50LCBcImdldFwiKS5tb2NrUmV0dXJuVmFsdWUob0FwcENvbXBvbmVudCk7XG5cdGplc3Quc3B5T24oVXRpbHMsIFwiZ2V0QXBwQ29tcG9uZW50Rm9yQ29udHJvbFwiKS5tb2NrUmV0dXJuVmFsdWUob0FwcENvbXBvbmVudCk7XG5cdGF3YWl0IEZsZXhTdGF0ZS5pbml0aWFsaXplKHtcblx0XHRjb21wb25lbnRJZDogYXBwSWRcblx0fSk7XG5cdHJlc3VsdFhNTCA9IGF3YWl0IFhtbFByZXByb2Nlc3Nvci5wcm9jZXNzKHJlc3VsdFhNTCwgeyBuYW1lOiBcIlRlc3QgRnJhZ21lbnRcIiwgY29tcG9uZW50SWQ6IGFwcElkLCBpZDogVEVTVFZJRVdJRCB9KTtcblx0cmV0dXJuIHJlc3VsdFhNTDtcbn07XG5cbmV4cG9ydCBjb25zdCBnZXRDaGFuZ2VzRnJvbVhNTCA9ICh4bWw6IGFueSkgPT5cblx0Wy4uLnhtbC5xdWVyeVNlbGVjdG9yQWxsKFwiKlwiKV1cblx0XHQuZmxhdE1hcCgoZSkgPT4gWy4uLmUuYXR0cmlidXRlc10ubWFwKChhKSA9PiBhLm5hbWUpKVxuXHRcdC5maWx0ZXIoKGF0dHIpID0+IGF0dHIuaW5jbHVkZXMoXCJzYXAudWkuZmwuYXBwbGllZENoYW5nZXNcIikpO1xuXG5leHBvcnQgY29uc3QgZ2V0VGVtcGxhdGluZ1Jlc3VsdCA9IGFzeW5jIGZ1bmN0aW9uIChcblx0eG1sSW5wdXQ6IHN0cmluZyxcblx0c01ldGFkYXRhVXJsOiBzdHJpbmcsXG5cdG1CaW5kaW5nQ29udGV4dHM6IHsgW3g6IHN0cmluZ106IGFueTsgZW50aXR5U2V0Pzogc3RyaW5nIH0sXG5cdG1Nb2RlbHM6IHsgW3g6IHN0cmluZ106IGFueSB9LFxuXHRhVmFyaWFudERlcGVuZGVudENvbnRyb2xDaGFuZ2VzPzogYW55W10sXG5cdGNyZWF0ZUNoYW5nZXNPYmplY3Q/OiBGdW5jdGlvblxuKSB7XG5cdGNvbnN0IHRlbXBsYXRlZFhtbCA9IGA8cm9vdD4ke3htbElucHV0fTwvcm9vdD5gO1xuXHRjb25zdCBwYXJzZXIgPSBuZXcgd2luZG93LkRPTVBhcnNlcigpO1xuXHRjb25zdCB4bWxEb2MgPSBwYXJzZXIucGFyc2VGcm9tU3RyaW5nKHRlbXBsYXRlZFhtbCwgXCJ0ZXh0L3htbFwiKTtcblx0Ly8gVG8gZW5zdXJlIG91ciBtYWNybyBjYW4gdXNlICNzZXRCaW5kaW5nQ29udGV4dCB3ZSBlbnN1cmUgdGhlcmUgaXMgYSBwcmUgZXhpc3RpbmcgSlNPTk1vZGVsIGZvciBjb252ZXJ0ZXJDb250ZXh0XG5cdC8vIGlmIG5vdCBhbHJlYWR5IHBhc3NlZCB0byB0ZWggdGVtcGxhdGluZ1xuXG5cdGNvbnN0IG9NZXRhTW9kZWwgPSBhd2FpdCBnZXRNZXRhTW9kZWwoc01ldGFkYXRhVXJsKTtcblx0aWYgKCFtTW9kZWxzLmhhc093blByb3BlcnR5KFwiY29udmVydGVyQ29udGV4dFwiKSkge1xuXHRcdG1Nb2RlbHMgPSBPYmplY3QuYXNzaWduKG1Nb2RlbHMsIHsgXCJjb252ZXJ0ZXJDb250ZXh0XCI6IG5ldyBUZW1wbGF0ZU1vZGVsKHt9LCBvTWV0YU1vZGVsKSB9KTtcblx0fVxuXG5cdE9iamVjdC5rZXlzKG1Nb2RlbHMpLmZvckVhY2goZnVuY3Rpb24gKHNNb2RlbE5hbWUpIHtcblx0XHRpZiAobU1vZGVsc1tzTW9kZWxOYW1lXSAmJiBtTW9kZWxzW3NNb2RlbE5hbWVdLmlzVGVtcGxhdGVNb2RlbCkge1xuXHRcdFx0bU1vZGVsc1tzTW9kZWxOYW1lXSA9IG5ldyBUZW1wbGF0ZU1vZGVsKG1Nb2RlbHNbc01vZGVsTmFtZV0uZGF0YSwgb01ldGFNb2RlbCk7XG5cdFx0fVxuXHR9KTtcblxuXHRjb25zdCBvUHJlcHJvY2Vzc29yU2V0dGluZ3M6IGFueSA9IHtcblx0XHRtb2RlbHM6IE9iamVjdC5hc3NpZ24oXG5cdFx0XHR7XG5cdFx0XHRcdG1ldGFNb2RlbDogb01ldGFNb2RlbFxuXHRcdFx0fSxcblx0XHRcdG1Nb2RlbHNcblx0XHQpLFxuXHRcdGJpbmRpbmdDb250ZXh0czoge31cblx0fTtcblxuXHQvL0luamVjdCBtb2RlbHMgYW5kIGJpbmRpbmdDb250ZXh0c1xuXHRPYmplY3Qua2V5cyhtQmluZGluZ0NvbnRleHRzKS5mb3JFYWNoKGZ1bmN0aW9uIChzS2V5KSB7XG5cdFx0LyogQXNzZXJ0IHRvIG1ha2Ugc3VyZSB0aGUgYW5ub3RhdGlvbnMgYXJlIGluIHRoZSB0ZXN0IG1ldGFkYXRhIC0+IGF2b2lkIG1pc2xlYWRpbmcgdGVzdHMgKi9cblx0XHRleHBlY3QodHlwZW9mIG9NZXRhTW9kZWwuZ2V0T2JqZWN0KG1CaW5kaW5nQ29udGV4dHNbc0tleV0pKS50b0JlRGVmaW5lZCgpO1xuXHRcdGNvbnN0IG9Nb2RlbCA9IG1Nb2RlbHNbc0tleV0gfHwgb01ldGFNb2RlbDtcblx0XHRvUHJlcHJvY2Vzc29yU2V0dGluZ3MuYmluZGluZ0NvbnRleHRzW3NLZXldID0gb01vZGVsLmNyZWF0ZUJpbmRpbmdDb250ZXh0KG1CaW5kaW5nQ29udGV4dHNbc0tleV0pOyAvL1ZhbHVlIGlzIHNQYXRoXG5cdFx0b1ByZXByb2Nlc3NvclNldHRpbmdzLm1vZGVsc1tzS2V5XSA9IG9Nb2RlbDtcblx0fSk7XG5cblx0Ly9UaGlzIGNvbnRleHQgZm9yIG1hY3JvIHRlc3Rpbmdcblx0aWYgKG9QcmVwcm9jZXNzb3JTZXR0aW5ncy5tb2RlbHNbXCJ0aGlzXCJdKSB7XG5cdFx0b1ByZXByb2Nlc3NvclNldHRpbmdzLmJpbmRpbmdDb250ZXh0c1tcInRoaXNcIl0gPSBvUHJlcHJvY2Vzc29yU2V0dGluZ3MubW9kZWxzW1widGhpc1wiXS5jcmVhdGVCaW5kaW5nQ29udGV4dChcIi9cIik7XG5cdH1cblxuXHRsZXQgcmVzdWx0WE1MID0gYXdhaXQgWE1MUHJlcHJvY2Vzc29yLnByb2Nlc3MoeG1sRG9jLmZpcnN0RWxlbWVudENoaWxkISwgeyBuYW1lOiBcIlRlc3QgRnJhZ21lbnRcIiB9LCBvUHJlcHJvY2Vzc29yU2V0dGluZ3MpO1xuXG5cdGlmIChhVmFyaWFudERlcGVuZGVudENvbnRyb2xDaGFuZ2VzICYmIGNyZWF0ZUNoYW5nZXNPYmplY3QpIHtcblx0XHQvLyBwcmVmaXggSWRzXG5cdFx0Wy4uLnJlc3VsdFhNTC5xdWVyeVNlbGVjdG9yQWxsKFwiW2lkXVwiKV0uZm9yRWFjaCgobm9kZSkgPT4ge1xuXHRcdFx0bm9kZS5pZCA9IGAke1RFU1RWSUVXSUR9LS0ke25vZGUuaWR9YDtcblx0XHR9KTtcblx0XHQvLyBhcHBseSBmbGV4IGNoYW5nZXNcblx0XHRyZXN1bHRYTUwgPSBhd2FpdCBhcHBseUZsZXhDaGFuZ2VzKGFWYXJpYW50RGVwZW5kZW50Q29udHJvbENoYW5nZXMsIG9NZXRhTW9kZWwsIHJlc3VsdFhNTCwgY3JlYXRlQ2hhbmdlc09iamVjdCk7XG5cdFx0Ly9Bc3NlcnQgdGhhdCBhbGwgY2hhbmdlcyBoYXZlIGJlZW4gYXBwbGllZFxuXHRcdGNvbnN0IGNoYW5nZXNBcHBsaWVkID0gZ2V0Q2hhbmdlc0Zyb21YTUwocmVzdWx0WE1MKTtcblx0XHRleHBlY3QoY2hhbmdlc0FwcGxpZWQubGVuZ3RoKS50b0JlKGFWYXJpYW50RGVwZW5kZW50Q29udHJvbENoYW5nZXMubGVuZ3RoKTtcblx0fVxuXHRyZXR1cm4gcmVzdWx0WE1MO1xufTtcblxuZXhwb3J0IGNvbnN0IGdldFRlbXBsYXRlZFhNTCA9IGFzeW5jIGZ1bmN0aW9uIChcblx0eG1sSW5wdXQ6IHN0cmluZyxcblx0c01ldGFkYXRhVXJsOiBzdHJpbmcsXG5cdG1CaW5kaW5nQ29udGV4dHM6IHsgW3g6IHN0cmluZ106IGFueTsgZW50aXR5U2V0Pzogc3RyaW5nIH0sXG5cdG1Nb2RlbHM6IHsgW3g6IHN0cmluZ106IGFueSB9LFxuXHRhVmFyaWFudERlcGVuZGVudENvbnRyb2xDaGFuZ2VzPzogYW55W10sXG5cdGNyZWF0ZUNoYW5nZXNPYmplY3Q/OiBGdW5jdGlvblxuKSB7XG5cdGNvbnN0IHRlbXBsYXRlZFhNTCA9IGF3YWl0IGdldFRlbXBsYXRpbmdSZXN1bHQoXG5cdFx0eG1sSW5wdXQsXG5cdFx0c01ldGFkYXRhVXJsLFxuXHRcdG1CaW5kaW5nQ29udGV4dHMsXG5cdFx0bU1vZGVscyxcblx0XHRhVmFyaWFudERlcGVuZGVudENvbnRyb2xDaGFuZ2VzLFxuXHRcdGNyZWF0ZUNoYW5nZXNPYmplY3Rcblx0KTtcblx0cmV0dXJuIHNlcmlhbGl6ZVhNTCh0ZW1wbGF0ZWRYTUwpO1xufTtcblxuLyoqXG4gKiBQcm9jZXNzIHRoZSByZXF1ZXN0ZWQgWE1MIGZyYWdtZW50IHdpdGggdGhlIHByb3ZpZGVkIGRhdGEuXG4gKlxuICogQHBhcmFtIG5hbWUgRnVsbHkgcXVhbGlmaWVkIG5hbWUgb2YgdGhlIGZyYWdtZW50IHRvIGJlIHRlc3RlZC5cbiAqIEBwYXJhbSB0ZXN0RGF0YSBUZXN0IGRhdGEgY29uc2lzdGluZ1xuICogQHJldHVybnMgVGVtcGxhdGVkIGZyYWdtZW50IGFzIHN0cmluZ1xuICovXG5leHBvcnQgYXN5bmMgZnVuY3Rpb24gcHJvY2Vzc0ZyYWdtZW50KG5hbWU6IHN0cmluZywgdGVzdERhdGE6IHsgW21vZGVsOiBzdHJpbmddOiBvYmplY3QgfSk6IFByb21pc2U8c3RyaW5nPiB7XG5cdGNvbnN0IGlucHV0WG1sID0gYDxyb290Pjxjb3JlOkZyYWdtZW50IGZyYWdtZW50TmFtZT1cIiR7bmFtZX1cIiB0eXBlPVwiWE1MXCIgeG1sbnM6Y29yZT1cInNhcC51aS5jb3JlXCIgLz48L3Jvb3Q+YDtcblx0Y29uc3QgcGFyc2VyID0gbmV3IHdpbmRvdy5ET01QYXJzZXIoKTtcblx0Y29uc3QgaW5wdXREb2MgPSBwYXJzZXIucGFyc2VGcm9tU3RyaW5nKGlucHV0WG1sLCBcInRleHQveG1sXCIpO1xuXG5cdC8vIGJ1aWxkIG1vZGVsIGFuZCBiaW5kaW5ncyBmb3IgZ2l2ZW4gdGVzdCBkYXRhXG5cdGNvbnN0IHNldHRpbmdzID0ge1xuXHRcdG1vZGVsczoge30gYXMgeyBbbmFtZTogc3RyaW5nXTogSlNPTk1vZGVsIH0sXG5cdFx0YmluZGluZ0NvbnRleHRzOiB7fSBhcyB7IFtuYW1lOiBzdHJpbmddOiBvYmplY3QgfVxuXHR9O1xuXHRmb3IgKGNvbnN0IG1vZGVsIGluIHRlc3REYXRhKSB7XG5cdFx0Y29uc3QganNvbk1vZGVsID0gbmV3IEpTT05Nb2RlbCgpO1xuXHRcdGpzb25Nb2RlbC5zZXREYXRhKHRlc3REYXRhW21vZGVsXSk7XG5cdFx0c2V0dGluZ3MubW9kZWxzW21vZGVsXSA9IGpzb25Nb2RlbDtcblx0XHRzZXR0aW5ncy5iaW5kaW5nQ29udGV4dHNbbW9kZWxdID0gc2V0dGluZ3MubW9kZWxzW21vZGVsXS5jcmVhdGVCaW5kaW5nQ29udGV4dChcIi9cIikgYXMgQ29udGV4dDtcblx0fVxuXG5cdC8vIGV4ZWN1dGUgdGhlIHByZS1wcm9jZXNzb3Jcblx0Y29uc3QgcmVzdWx0RG9jID0gYXdhaXQgWE1MUHJlcHJvY2Vzc29yLnByb2Nlc3MoaW5wdXREb2MuZmlyc3RFbGVtZW50Q2hpbGQsIHsgbmFtZSB9LCBzZXR0aW5ncyk7XG5cblx0Ly8gZXhjbHVkZSBuZXN0ZWQgZnJhZ21lbnRzIGZyb20gdGVzdCBzbmFwc2hvdHNcblx0Y29uc3QgZnJhZ21lbnRzID0gcmVzdWx0RG9jLmdldEVsZW1lbnRzQnlUYWdOYW1lKFwiY29yZTpGcmFnbWVudFwiKTtcblx0aWYgKGZyYWdtZW50cz8ubGVuZ3RoID4gMCkge1xuXHRcdGZvciAoY29uc3QgZnJhZ21lbnQgb2YgZnJhZ21lbnRzKSB7XG5cdFx0XHRmcmFnbWVudC5pbm5lckhUTUwgPSBcIlwiO1xuXHRcdH1cblx0fVxuXG5cdC8vIEtlZXAgdGhlIGZyYWdtZW50IHJlc3VsdCBhcyBjaGlsZCBvZiByb290IG5vZGUgd2hlbiBmcmFnbWVudCBnZW5lcmF0ZXMgbXVsdGlwbGUgcm9vdCBjb250cm9sc1xuXHRjb25zdCB4bWxSZXN1bHQgPSByZXN1bHREb2MuY2hpbGRyZW4ubGVuZ3RoID4gMSA/IHJlc3VsdERvYy5vdXRlckhUTUwgOiByZXN1bHREb2MuaW5uZXJIVE1MO1xuXG5cdHJldHVybiBmb3JtYXRYbWwoeG1sUmVzdWx0LCB7XG5cdFx0ZmlsdGVyOiAobm9kZTogYW55KSA9PiBub2RlLnR5cGUgIT09IFwiQ29tbWVudFwiXG5cdH0pO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gc2VyaWFsaXplQ29udHJvbChjb250cm9sVG9TZXJpYWxpemU6IENvbnRyb2wgfCBDb250cm9sW10pIHtcblx0bGV0IHRhYkNvdW50ID0gMDtcblx0ZnVuY3Rpb24gZ2V0VGFiKHRvQWRkOiBudW1iZXIgPSAwKSB7XG5cdFx0bGV0IHRhYiA9IFwiXCI7XG5cdFx0Zm9yIChsZXQgaSA9IDA7IGkgPCB0YWJDb3VudCArIHRvQWRkOyBpKyspIHtcblx0XHRcdHRhYiArPSBcIlxcdFwiO1xuXHRcdH1cblx0XHRyZXR1cm4gdGFiO1xuXHR9XG5cdGNvbnN0IHNlcmlhbGl6ZURlbGVnYXRlID0ge1xuXHRcdHN0YXJ0OiBmdW5jdGlvbiAoY29udHJvbDogYW55LCBzQWdncmVnYXRpb25OYW1lOiBzdHJpbmcpIHtcblx0XHRcdGxldCBjb250cm9sRGV0YWlsID0gXCJcIjtcblx0XHRcdGlmIChzQWdncmVnYXRpb25OYW1lKSB7XG5cdFx0XHRcdGlmIChjb250cm9sLmdldFBhcmVudCgpKSB7XG5cdFx0XHRcdFx0Y29uc3QgaW5kZXhJblBhcmVudCA9IChjb250cm9sLmdldFBhcmVudCgpLmdldEFnZ3JlZ2F0aW9uKHNBZ2dyZWdhdGlvbk5hbWUpIGFzIE1hbmFnZWRPYmplY3RbXSkuaW5kZXhPZihjb250cm9sKTtcblx0XHRcdFx0XHRpZiAoaW5kZXhJblBhcmVudCA+IDApIHtcblx0XHRcdFx0XHRcdGNvbnRyb2xEZXRhaWwgKz0gYCxcXG4ke2dldFRhYigpfWA7XG5cdFx0XHRcdFx0fVxuXHRcdFx0XHR9XG5cdFx0XHR9XG5cdFx0XHRjb250cm9sRGV0YWlsICs9IGAke2NvbnRyb2wuZ2V0TWV0YWRhdGEoKS5nZXROYW1lKCl9KGA7XG5cdFx0XHRyZXR1cm4gY29udHJvbERldGFpbDtcblx0XHR9LFxuXHRcdGVuZDogZnVuY3Rpb24gKCkge1xuXHRcdFx0cmV0dXJuIFwifSlcIjtcblx0XHR9LFxuXHRcdG1pZGRsZTogZnVuY3Rpb24gKGNvbnRyb2w6IGFueSkge1xuXHRcdFx0bGV0IGRhdGEgPSBge2lkOiAke2NvbnRyb2wuZ2V0SWQoKX1gO1xuXHRcdFx0Zm9yIChjb25zdCBvQ29udHJvbEtleSBpbiBjb250cm9sLm1Qcm9wZXJ0aWVzKSB7XG5cdFx0XHRcdGlmIChjb250cm9sLm1Qcm9wZXJ0aWVzLmhhc093blByb3BlcnR5KG9Db250cm9sS2V5KSkge1xuXHRcdFx0XHRcdGRhdGEgKz0gYCxcXG4ke2dldFRhYigpfSAke29Db250cm9sS2V5fTogJHtjb250cm9sLm1Qcm9wZXJ0aWVzW29Db250cm9sS2V5XX1gO1xuXHRcdFx0XHR9IGVsc2UgaWYgKGNvbnRyb2wubUJpbmRpbmdJbmZvcy5oYXNPd25Qcm9wZXJ0eShvQ29udHJvbEtleSkpIHtcblx0XHRcdFx0XHRjb25zdCBiaW5kaW5nRGV0YWlsID0gY29udHJvbC5tQmluZGluZ0luZm9zW29Db250cm9sS2V5XTtcblx0XHRcdFx0XHRkYXRhICs9IGAsXFxuJHtnZXRUYWIoKX0gJHtvQ29udHJvbEtleX06IGZvcm1hdHRlcigke2JpbmRpbmdEZXRhaWwucGFydHMubWFwKFxuXHRcdFx0XHRcdFx0KGJpbmRpbmdJbmZvOiBhbnkpID0+IGBcXG4ke2dldFRhYigxKX0ke2JpbmRpbmdJbmZvLm1vZGVsID8gYmluZGluZ0luZm8ubW9kZWwgOiBcIlwifT4ke2JpbmRpbmdJbmZvLnBhdGh9YFxuXHRcdFx0XHRcdCl9KWA7XG5cdFx0XHRcdH1cblx0XHRcdH1cblx0XHRcdGZvciAoY29uc3Qgb0NvbnRyb2xLZXkgaW4gY29udHJvbC5tQXNzb2NpYXRpb25zKSB7XG5cdFx0XHRcdGlmIChjb250cm9sLm1Bc3NvY2lhdGlvbnMuaGFzT3duUHJvcGVydHkob0NvbnRyb2xLZXkpKSB7XG5cdFx0XHRcdFx0ZGF0YSArPSBgLFxcbiR7Z2V0VGFiKCl9ICR7b0NvbnRyb2xLZXl9OiAke2NvbnRyb2wubUFzc29jaWF0aW9uc1tvQ29udHJvbEtleV1bMF19YDtcblx0XHRcdFx0fVxuXHRcdFx0fVxuXHRcdFx0ZGF0YSArPSBgYDtcblx0XHRcdHJldHVybiBkYXRhO1xuXHRcdH0sXG5cdFx0c3RhcnRBZ2dyZWdhdGlvbjogZnVuY3Rpb24gKGNvbnRyb2w6IGFueSwgc05hbWU6IHN0cmluZykge1xuXHRcdFx0bGV0IG91dCA9IGAsXFxuJHtnZXRUYWIoKX0ke3NOYW1lfWA7XG5cdFx0XHR0YWJDb3VudCsrO1xuXG5cdFx0XHRpZiAoY29udHJvbC5tQmluZGluZ0luZm9zW3NOYW1lXSkge1xuXHRcdFx0XHRvdXQgKz0gYD17IHBhdGg6JyR7Y29udHJvbC5tQmluZGluZ0luZm9zW3NOYW1lXS5wYXRofScsIHRlbXBsYXRlOlxcbiR7Z2V0VGFiKCl9YDtcblx0XHRcdH0gZWxzZSB7XG5cdFx0XHRcdG91dCArPSBgPVtcXG4ke2dldFRhYigpfWA7XG5cdFx0XHR9XG5cdFx0XHRyZXR1cm4gb3V0O1xuXHRcdH0sXG5cdFx0ZW5kQWdncmVnYXRpb246IGZ1bmN0aW9uIChjb250cm9sOiBhbnksIHNOYW1lOiBzdHJpbmcpIHtcblx0XHRcdHRhYkNvdW50LS07XG5cdFx0XHRpZiAoY29udHJvbC5tQmluZGluZ0luZm9zW3NOYW1lXSkge1xuXHRcdFx0XHRyZXR1cm4gYFxcbiR7Z2V0VGFiKCl9fWA7XG5cdFx0XHR9IGVsc2Uge1xuXHRcdFx0XHRyZXR1cm4gYFxcbiR7Z2V0VGFiKCl9XWA7XG5cdFx0XHR9XG5cdFx0fVxuXHR9O1xuXHRpZiAoQXJyYXkuaXNBcnJheShjb250cm9sVG9TZXJpYWxpemUpKSB7XG5cdFx0cmV0dXJuIGNvbnRyb2xUb1NlcmlhbGl6ZS5tYXAoKGNvbnRyb2xUb1JlbmRlcjogQ29udHJvbCkgPT4ge1xuXHRcdFx0cmV0dXJuIG5ldyBTZXJpYWxpemVyKGNvbnRyb2xUb1JlbmRlciwgc2VyaWFsaXplRGVsZWdhdGUpLnNlcmlhbGl6ZSgpO1xuXHRcdH0pO1xuXHR9IGVsc2Uge1xuXHRcdHJldHVybiBuZXcgU2VyaWFsaXplcihjb250cm9sVG9TZXJpYWxpemUsIHNlcmlhbGl6ZURlbGVnYXRlKS5zZXJpYWxpemUoKTtcblx0fVxufVxuXG5leHBvcnQgZnVuY3Rpb24gY3JlYXRlQXdhaXRlcigpIHtcblx0bGV0IGZuUmVzb2x2ZSE6IEZ1bmN0aW9uO1xuXHRjb25zdCBteVByb21pc2UgPSBuZXcgUHJvbWlzZSgocmVzb2x2ZSkgPT4ge1xuXHRcdGZuUmVzb2x2ZSA9IHJlc29sdmU7XG5cdH0pO1xuXHRyZXR1cm4geyBwcm9taXNlOiBteVByb21pc2UsIHJlc29sdmU6IGZuUmVzb2x2ZSB9O1xufVxuIl0sIm1hcHBpbmdzIjoiO0FBQUE7QUFBQTtBQUFBOzs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7RUFvYkE7QUFDQTtB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
@@ -41,6 +41,7 @@ jest.setTimeout(40000);
41
41
  const nameSpaceMap = {
42
42
  "macros": "sap.fe.macros",
43
43
  "macro": "sap.fe.macros",
44
+ "macroField": "sap.fe.macros.field",
44
45
  "macrodata": "http://schemas.sap.com/sapui5/extension/sap.ui.core.CustomData/1",
45
46
  "log": "http://schemas.sap.com/sapui5/extension/sap.ui.core.CustomData/1",
46
47
  "unittest": "http://schemas.sap.com/sapui5/preprocessorextension/sap.fe.unittesting/1",
@@ -110,7 +111,7 @@ export const getControlAttribute = function (controlSelector: string, attributeN
110
111
  return runXPathQuery(selector, xmlDom);
111
112
  };
112
113
 
113
- const serializeXML = function (xmlDom: Node) {
114
+ export const serializeXML = function (xmlDom: Node) {
114
115
  const serializer = new window.XMLSerializer();
115
116
  const xmlString = serializer.serializeToString(xmlDom);
116
117
  return formatXML(xmlString);
@@ -158,7 +159,14 @@ export const compileCDS = function (
158
159
  * @returns The compiled service model as EDMX.
159
160
  */
160
161
  export function cds2edmx(cds: string, service = "sap.fe.test.JestService", options: compiler.ODataOptions = {}) {
161
- const csn = compiler.compileSources({ "string.cds": cds }, {});
162
+ const sources: Record<string, string> = { "source.cds": cds };
163
+
164
+ // allow to include stuff from @sap/cds/common
165
+ if (cds.includes("'@sap/cds/common'")) {
166
+ sources["common.cds"] = fs.readFileSync(require.resolve("@sap/cds/common.cds"), "utf-8");
167
+ }
168
+
169
+ const csn = compiler.compileSources(sources, {});
162
170
 
163
171
  const edmxOptions: compiler.ODataOptions = {
164
172
  odataForeignKeys: true,
@@ -479,12 +487,14 @@ export function serializeControl(controlToSerialize: Control | Control[]) {
479
487
  return tab;
480
488
  }
481
489
  const serializeDelegate = {
482
- start: function (control: Control, sAggregationName: string) {
490
+ start: function (control: any, sAggregationName: string) {
483
491
  let controlDetail = "";
484
492
  if (sAggregationName) {
485
- const indexInParent = (control.getParent()!.getAggregation(sAggregationName) as ManagedObject[]).indexOf(control);
486
- if (indexInParent > 0) {
487
- controlDetail += `,\n${getTab()}`;
493
+ if (control.getParent()) {
494
+ const indexInParent = (control.getParent().getAggregation(sAggregationName) as ManagedObject[]).indexOf(control);
495
+ if (indexInParent > 0) {
496
+ controlDetail += `,\n${getTab()}`;
497
+ }
488
498
  }
489
499
  }
490
500
  controlDetail += `${control.getMetadata().getName()}(`;
@@ -513,15 +523,24 @@ export function serializeControl(controlToSerialize: Control | Control[]) {
513
523
  data += ``;
514
524
  return data;
515
525
  },
516
- startAggregation: function (control: Control, sName: string) {
526
+ startAggregation: function (control: any, sName: string) {
517
527
  let out = `,\n${getTab()}${sName}`;
518
528
  tabCount++;
519
- out += `=[\n${getTab()}`;
529
+
530
+ if (control.mBindingInfos[sName]) {
531
+ out += `={ path:'${control.mBindingInfos[sName].path}', template:\n${getTab()}`;
532
+ } else {
533
+ out += `=[\n${getTab()}`;
534
+ }
520
535
  return out;
521
536
  },
522
- endAggregation: function () {
537
+ endAggregation: function (control: any, sName: string) {
523
538
  tabCount--;
524
- return `\n${getTab()}]`;
539
+ if (control.mBindingInfos[sName]) {
540
+ return `\n${getTab()}}`;
541
+ } else {
542
+ return `\n${getTab()}]`;
543
+ }
525
544
  }
526
545
  };
527
546
  if (Array.isArray(controlToSerialize)) {
@@ -242,7 +242,8 @@ sap.ui.define(
242
242
  {
243
243
  viewNamespace: "sap.fe.templates",
244
244
  autoWait: true,
245
- timeout: 120,
245
+ timeout: 30,
246
+ pollingInterval: 50,
246
247
  logLevel: "ERROR",
247
248
  disableHistoryOverride: true,
248
249
  asyncPolling: true
@@ -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 this.iGoToSection(sName);
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() === aBoundMessagesInfo[0].GroupLabel &&
822
- messages[1].getGroupName() === aBoundMessagesInfo[1].GroupLabel &&
823
- messages[0].getTitle() === aBoundMessagesInfo[0].MessageText &&
824
- messages[1].getTitle() === aBoundMessagesInfo[1].MessageText
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)
@@ -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")
@@ -30,8 +30,14 @@ sap.ui.define(["@sap-ux/jest-mock-ui5/dist/generic", "sap/fe/core/controllerexte
30
30
  mocked.mock.getProperty.mockImplementation(function (key) {
31
31
  return mocked._contextData[key];
32
32
  });
33
- mocked.mock.requestProperty.mockImplementation(function (key) {
34
- return Promise.resolve(mocked._contextData[key]);
33
+ mocked.mock.requestProperty.mockImplementation(function (keyOrKeys) {
34
+ if (Array.isArray(keyOrKeys)) {
35
+ return Promise.resolve(keyOrKeys.map(function (key) {
36
+ return mocked._contextData[key];
37
+ }));
38
+ }
39
+
40
+ return Promise.resolve(mocked._contextData[keyOrKeys]);
35
41
  });
36
42
  mocked.mock.requestObject.mockImplementation(function (key) {
37
43
  return Promise.resolve(mocked._contextData[key]);
@@ -182,7 +188,7 @@ sap.ui.define(["@sap-ux/jest-mock-ui5/dist/generic", "sap/fe/core/controllerexte
182
188
  mocked._path = path; // Default behavior
183
189
 
184
190
  mocked.mock.isA.mockImplementation(function (sClassName) {
185
- return sClassName === "sap/ui/model/odata/v4/ODataPropertyBinding";
191
+ return sClassName === "sap.ui.model.odata.v4.ODataPropertyBinding";
186
192
  });
187
193
  mocked.mock.getModel.mockImplementation(function () {
188
194
  return mocked._mockModel;
@@ -482,4 +488,4 @@ sap.ui.define(["@sap-ux/jest-mock-ui5/dist/generic", "sap/fe/core/controllerexte
482
488
  _exports.mockMVC = mockMVC;
483
489
  return _exports;
484
490
  }, false);
485
- //# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJuYW1lcyI6WyJjcmVhdGVNb2NrQ29udGV4dCIsIm9Db250ZXh0RGF0YSIsIm9CaW5kaW5nIiwiaXNJbmFjdGl2ZSIsIm1vY2tlZCIsIm1vY2siLCJPYmplY3QiLCJnZXRQcm90b3R5cGVPZiIsIkNvbnRleHQiLCJjcmVhdGVOZXdDb250ZXh0IiwiX2lzS2VwdEFsaXZlIiwiX2NvbnRleHREYXRhIiwiX29CaW5kaW5nIiwiX2lzSW5hY3RpdmUiLCJpc0EiLCJtb2NrSW1wbGVtZW50YXRpb24iLCJzQ2xhc3NOYW1lIiwiZ2V0UHJvcGVydHkiLCJrZXkiLCJyZXF1ZXN0UHJvcGVydHkiLCJQcm9taXNlIiwicmVzb2x2ZSIsInJlcXVlc3RPYmplY3QiLCJzZXRQcm9wZXJ0eSIsInZhbHVlIiwiZ2V0T2JqZWN0IiwicGF0aCIsInJlc3VsdCIsImluZGV4T2YiLCJwYXJ0cyIsInNwbGl0IiwicmVkdWNlIiwic3VtIiwicGFydCIsImdldFBhdGgiLCJnZXRCaW5kaW5nIiwiZ2V0TW9kZWwiLCJzZXRLZWVwQWxpdmUiLCJib29sIiwiX2ZuT25CZWZvcmVEZXN0cm95IiwiX2JSZXF1ZXN0TWVzc2FnZXMiLCJpc0tlZXBBbGl2ZSIsIk1vY2tDb250ZXh0IiwiY3JlYXRlTW9ja0V2ZW50IiwicGFyYW1zIiwiRXZlbnQiLCJfcGFyYW1zIiwiZ2V0UGFyYW1ldGVyIiwibmFtZSIsIk1vY2tFdmVudCIsImNyZWF0ZU1vY2tMaXN0QmluZGluZyIsImFDb250ZXh0RGF0YSIsIm9Nb2NrTW9kZWwiLCJPRGF0YUxpc3RCaW5kaW5nIiwiX2FNb2NrQ29udGV4dHMiLCJtYXAiLCJjb250ZXh0RGF0YSIsIl9tb2NrTW9kZWwiLCJzZXRNb2RlbCIsIm1vZGVsIiwicmVxdWVzdENvbnRleHRzIiwiZ2V0Q3VycmVudENvbnRleHRzIiwiZ2V0QWxsQ3VycmVudENvbnRleHRzIiwiZ2V0VXBkYXRlR3JvdXBJZCIsIm1vY2tSZXR1cm5WYWx1ZSIsIk1vY2tMaXN0QmluZGluZyIsImNyZWF0ZU1vY2tQcm9wZXJ0eUJpbmRpbmciLCJPRGF0YVByb3BlcnR5QmluZGluZyIsIl92YWx1ZSIsIl9wYXRoIiwiZ2V0VmFsdWUiLCJNb2NrUHJvcGVydHlCaW5kaW5nIiwiY3JlYXRlTW9ja0NvbXBvc2l0ZUJpbmRpbmciLCJhQmluZGluZ3MiLCJDb21wb3NpdGVCaW5kaW5nIiwiX2FCaW5kaW5ncyIsImdldEJpbmRpbmdzIiwiYmluZGluZyIsIk1vY2tDb21wb3NpdGVCaW5kaW5nIiwiY3JlYXRlTW9ja0NvbnRleHRCaW5kaW5nIiwib0NvbnRleHQiLCJPRGF0YUNvbnRleHRCaW5kaW5nIiwibW9ja01vZGVsIiwib01vY2tDb250ZXh0IiwiZ2V0SW50ZXJuYWxNb2NrQ29udGV4dCIsIm9Nb2RlbCIsImdldEJvdW5kQ29udGV4dCIsImV4ZWN1dGUiLCJtb2NrUmVzb2x2ZWRWYWx1ZSIsIk1vY2tDb250ZXh0QmluZGluZyIsImNyZWF0ZU1vY2tNZXRhTW9kZWwiLCJvTWV0YURhdGEiLCJPRGF0YU1ldGFNb2RlbCIsIm9NZXRhQ29udGV4dCIsImdldE1ldGFDb250ZXh0Iiwic1BhdGgiLCIkcGF0aCIsImNyZWF0ZUJpbmRpbmdDb250ZXh0IiwiZ2V0TWV0YVBhdGgiLCJtZXRhbW9kZWwiLCJNb2NrTWV0YU1vZGVsIiwiY3JlYXRlTW9ja01vZGVsIiwib01vY2tMaXN0QmluZGluZyIsIm9Nb2NrQ29udGV4dEJpbmRpbmciLCJPRGF0YU1vZGVsIiwibW9ja0xpc3RCaW5kaW5nIiwibW9ja0NvbnRleHRCaW5kaW5nIiwic2V0TWV0YU1vZGVsIiwib01ldGFNb2RlbCIsImJpbmRMaXN0IiwiYmluZENvbnRleHQiLCJnZXRNZXRhTW9kZWwiLCJNb2NrTW9kZWwiLCJjcmVhdGVNb2NrTW9kZWxGcm9tTGlzdEJpbmRpbmciLCJjcmVhdGVNb2NrTW9kZWxGcm9tQ29udGV4dEJpbmRpbmciLCJ1bmRlZmluZWQiLCJjcmVhdGVNb2NrVmlldyIsIlZpZXciLCJNb2NrVmlldyIsImNyZWF0ZU1vY2tDb250cm9sbGVyIiwiQ29udHJvbGxlciIsIl9yb3V0aW5nIiwiSW50ZXJuYWxSb3V0aW5nIiwiX2VkaXRGbG93IiwiSW50ZXJuYWxFZGl0RmxvdyIsIl9zaWRlRWZmZWN0cyIsIlNpZGVFZmZlY3RzIiwiZWRpdEZsb3ciLCJFZGl0RmxvdyIsImdldFZpZXciLCJNb2NrQ29udHJvbGxlciIsIm1vY2tNVkMiLCJleGlzdGluZyIsInZpZXciLCJjb250cm9sbGVyIiwiZ2V0Q29udHJvbGxlciJdLCJzb3VyY2VSb290IjoiLiIsInNvdXJjZXMiOlsiVUk1TW9ja0hlbHBlci50cyJdLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgdHlwZSB7IFdpdGhNb2NrIH0gZnJvbSBcIkBzYXAtdXgvamVzdC1tb2NrLXVpNS9kaXN0L2dlbmVyaWNcIjtcbmltcG9ydCB7IG1vY2sgfSBmcm9tIFwiQHNhcC11eC9qZXN0LW1vY2stdWk1L2Rpc3QvZ2VuZXJpY1wiO1xuaW1wb3J0IEVkaXRGbG93IGZyb20gXCJzYXAvZmUvY29yZS9jb250cm9sbGVyZXh0ZW5zaW9ucy9FZGl0Rmxvd1wiO1xuaW1wb3J0IEludGVybmFsRWRpdEZsb3cgZnJvbSBcInNhcC9mZS9jb3JlL2NvbnRyb2xsZXJleHRlbnNpb25zL0ludGVybmFsRWRpdEZsb3dcIjtcbmltcG9ydCBJbnRlcm5hbFJvdXRpbmcgZnJvbSBcInNhcC9mZS9jb3JlL2NvbnRyb2xsZXJleHRlbnNpb25zL0ludGVybmFsUm91dGluZ1wiO1xuaW1wb3J0IFNpZGVFZmZlY3RzIGZyb20gXCJzYXAvZmUvY29yZS9jb250cm9sbGVyZXh0ZW5zaW9ucy9TaWRlRWZmZWN0c1wiO1xuaW1wb3J0IEV2ZW50IGZyb20gXCJzYXAvdWkvYmFzZS9FdmVudFwiO1xuaW1wb3J0IENvbnRyb2xsZXIgZnJvbSBcInNhcC91aS9jb3JlL212Yy9Db250cm9sbGVyXCI7XG5pbXBvcnQgVmlldyBmcm9tIFwic2FwL3VpL2NvcmUvbXZjL1ZpZXdcIjtcbmltcG9ydCBDb21wb3NpdGVCaW5kaW5nIGZyb20gXCJzYXAvdWkvbW9kZWwvQ29tcG9zaXRlQmluZGluZ1wiO1xuaW1wb3J0IENvbnRleHQgZnJvbSBcInNhcC91aS9tb2RlbC9vZGF0YS92NC9Db250ZXh0XCI7XG5pbXBvcnQgT0RhdGFDb250ZXh0QmluZGluZyBmcm9tIFwic2FwL3VpL21vZGVsL29kYXRhL3Y0L09EYXRhQ29udGV4dEJpbmRpbmdcIjtcbmltcG9ydCBPRGF0YUxpc3RCaW5kaW5nIGZyb20gXCJzYXAvdWkvbW9kZWwvb2RhdGEvdjQvT0RhdGFMaXN0QmluZGluZ1wiO1xuaW1wb3J0IE9EYXRhTWV0YU1vZGVsIGZyb20gXCJzYXAvdWkvbW9kZWwvb2RhdGEvdjQvT0RhdGFNZXRhTW9kZWxcIjtcbmltcG9ydCBPRGF0YU1vZGVsIGZyb20gXCJzYXAvdWkvbW9kZWwvb2RhdGEvdjQvT0RhdGFNb2RlbFwiO1xuaW1wb3J0IE9EYXRhUHJvcGVydHlCaW5kaW5nIGZyb20gXCJzYXAvdWkvbW9kZWwvb2RhdGEvdjQvT0RhdGFQcm9wZXJ0eUJpbmRpbmdcIjtcblxuLyoqXG4gKiBVdGlsaXR5IHR5cGUgdG8gbW9jayBhIHNhcC51aS5tb2RlbC5vZGF0YS52NC5Db250ZXh0XG4gKi9cbmV4cG9ydCB0eXBlIE1vY2tDb250ZXh0ID0gV2l0aE1vY2s8Q29udGV4dD4gJiB7XG5cdF9pc0tlcHRBbGl2ZTogYm9vbGVhbjtcblx0X2NvbnRleHREYXRhOiBhbnk7XG5cdF9vQmluZGluZzogYW55O1xuXHRfaXNJbmFjdGl2ZTogYm9vbGVhbjtcbn07XG4vKipcbiAqIEZhY3RvcnkgZnVuY3Rpb24gdG8gY3JlYXRlIGEgbmV3IE1vY2tDb250ZXh0LlxuICpcbiAqIEBwYXJhbSBvQ29udGV4dERhdGEgQSBtYXAgb2YgdGhlIGRpZmZlcmVudCBwcm9wZXJ0aWVzIG9mIHRoZSBjb250ZXh0LiBUaGUgdmFsdWUgZm9yIHRoZSBrZXkgJyRwYXRoJyB3aWxsIGJlIHJldHVybmVkIGJ5IHRoZSAnZ2V0UGF0aCcgbWV0aG9kXG4gKiBAcGFyYW0gb0JpbmRpbmcgVGhlIGJpbmRpbmcgb2YgdGhlIGNvbnRleHRcbiAqIEBwYXJhbSBpc0luYWN0aXZlIElzIHRoZSBjb250ZXh0IGluaWFjdGl2ZSBvciBub3RcbiAqIEByZXR1cm5zIEEgbmV3IE1vY2tDb250ZXh0XG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBjcmVhdGVNb2NrQ29udGV4dChvQ29udGV4dERhdGE/OiBhbnksIG9CaW5kaW5nPzogYW55LCBpc0luYWN0aXZlPzogYm9vbGVhbik6IE1vY2tDb250ZXh0IHtcblx0Ly8gVWdseSB3b3JrYXJvdW5kIHRvIGdldCBhIHByb3BlciBtb2NrIHBiamVjdCwgYXMgQ29udGV4dCBpc24ndCBwcm9wZXJseSBleHBvcnRlZCBmcm9tIFVJNVxuXHRjb25zdCBtb2NrZWQgPSBtb2NrKE9iamVjdC5nZXRQcm90b3R5cGVPZigoQ29udGV4dCBhcyBhbnkpLmNyZWF0ZU5ld0NvbnRleHQobnVsbCwgbnVsbCwgXCIvZVwiKSkpIGFzIE1vY2tDb250ZXh0O1xuXHRtb2NrZWQuX2lzS2VwdEFsaXZlID0gZmFsc2U7XG5cdG1vY2tlZC5fY29udGV4dERhdGEgPSBvQ29udGV4dERhdGEgfHwge307XG5cdG1vY2tlZC5fb0JpbmRpbmcgPSBvQmluZGluZztcblx0bW9ja2VkLl9pc0luYWN0aXZlID0gISFpc0luYWN0aXZlO1xuXG5cdC8vIERlZmF1bHQgYmVoYXZpb3Jcblx0bW9ja2VkLm1vY2suaXNBLm1vY2tJbXBsZW1lbnRhdGlvbigoc0NsYXNzTmFtZTogc3RyaW5nKSA9PiB7XG5cdFx0cmV0dXJuIHNDbGFzc05hbWUgPT09IFwic2FwLnVpLm1vZGVsLm9kYXRhLnY0LkNvbnRleHRcIjtcblx0fSk7XG5cdG1vY2tlZC5tb2NrLmdldFByb3BlcnR5Lm1vY2tJbXBsZW1lbnRhdGlvbigoa2V5OiBzdHJpbmcpID0+IHtcblx0XHRyZXR1cm4gbW9ja2VkLl9jb250ZXh0RGF0YVtrZXldO1xuXHR9KTtcblx0bW9ja2VkLm1vY2sucmVxdWVzdFByb3BlcnR5Lm1vY2tJbXBsZW1lbnRhdGlvbigoa2V5OiBzdHJpbmcpID0+IHtcblx0XHRyZXR1cm4gUHJvbWlzZS5yZXNvbHZlKG1vY2tlZC5fY29udGV4dERhdGFba2V5XSk7XG5cdH0pO1xuXHRtb2NrZWQubW9jay5yZXF1ZXN0T2JqZWN0Lm1vY2tJbXBsZW1lbnRhdGlvbigoa2V5OiBzdHJpbmcpID0+IHtcblx0XHRyZXR1cm4gUHJvbWlzZS5yZXNvbHZlKG1vY2tlZC5fY29udGV4dERhdGFba2V5XSk7XG5cdH0pO1xuXHRtb2NrZWQubW9jay5zZXRQcm9wZXJ0eS5tb2NrSW1wbGVtZW50YXRpb24oKGtleTogc3RyaW5nLCB2YWx1ZTogYW55KSA9PiB7XG5cdFx0bW9ja2VkLl9jb250ZXh0RGF0YVtrZXldID0gdmFsdWU7XG5cdFx0cmV0dXJuIG1vY2tlZC5fY29udGV4dERhdGFba2V5XTtcblx0fSk7XG5cblx0bW9ja2VkLm1vY2suZ2V0T2JqZWN0Lm1vY2tJbXBsZW1lbnRhdGlvbigocGF0aDogc3RyaW5nKSA9PiB7XG5cdFx0bGV0IHJlc3VsdCA9IHBhdGggPyBtb2NrZWQuX2NvbnRleHREYXRhW3BhdGhdIDogbW9ja2VkLl9jb250ZXh0RGF0YTtcblxuXHRcdGlmICghcmVzdWx0ICYmIHBhdGggJiYgcGF0aC5pbmRleE9mKFwiL1wiKSA+IC0xKSB7XG5cdFx0XHRjb25zdCBwYXJ0cyA9IHBhdGguc3BsaXQoXCIvXCIpO1xuXHRcdFx0cmVzdWx0ID0gcGFydHMucmVkdWNlKChzdW0sIHBhcnQ6IGFueSkgPT4ge1xuXHRcdFx0XHRzdW0gPSBwYXJ0ID8gc3VtW3BhcnRdIDogc3VtO1xuXHRcdFx0XHRyZXR1cm4gc3VtO1xuXHRcdFx0fSwgbW9ja2VkLl9jb250ZXh0RGF0YSk7XG5cdFx0fVxuXG5cdFx0cmV0dXJuIHJlc3VsdDtcblx0fSk7XG5cblx0bW9ja2VkLm1vY2suZ2V0UGF0aC5tb2NrSW1wbGVtZW50YXRpb24oKCkgPT4gbW9ja2VkLl9jb250ZXh0RGF0YVtcIiRwYXRoXCJdKTtcblx0bW9ja2VkLm1vY2suZ2V0QmluZGluZy5tb2NrSW1wbGVtZW50YXRpb24oKCkgPT4gbW9ja2VkLl9vQmluZGluZyk7XG5cdG1vY2tlZC5tb2NrLmdldE1vZGVsLm1vY2tJbXBsZW1lbnRhdGlvbigoKSA9PiBtb2NrZWQuX29CaW5kaW5nPy5nZXRNb2RlbCgpKTtcblx0bW9ja2VkLm1vY2suc2V0S2VlcEFsaXZlLm1vY2tJbXBsZW1lbnRhdGlvbigoYm9vbDogYm9vbGVhbiwgX2ZuT25CZWZvcmVEZXN0cm95PzogYW55LCBfYlJlcXVlc3RNZXNzYWdlcz86IGJvb2xlYW4pID0+IHtcblx0XHRtb2NrZWQuX2lzS2VwdEFsaXZlID0gYm9vbDtcblx0fSk7XG5cdG1vY2tlZC5tb2NrLmlzS2VlcEFsaXZlLm1vY2tJbXBsZW1lbnRhdGlvbigoKSA9PiBtb2NrZWQuX2lzS2VwdEFsaXZlKTtcblx0bW9ja2VkLm1vY2suaXNJbmFjdGl2ZS5tb2NrSW1wbGVtZW50YXRpb24oKCkgPT4gbW9ja2VkLl9pc0luYWN0aXZlKTtcblxuXHRyZXR1cm4gbW9ja2VkO1xufVxuLyoqXG4gKiBGb3IgY29tcGF0aWJpbGl0eSByZWFzb25zLCB3ZSBrZWVwIGEgbmV3IG9wZXJhdG9yLiBVc2UgdGhlIGZhY3RvcnkgZnVuY3Rpb24gY3JlYXRlTW9ja0NvbnRleHQgaW5zdGVhZC5cbiAqL1xuZXhwb3J0IGNvbnN0IE1vY2tDb250ZXh0OiBuZXcgKG9WYWx1ZXM/OiBhbnksIG9CaW5kaW5nPzogYW55LCBpc0luYWN0aXZlPzogYm9vbGVhbikgPT4gTW9ja0NvbnRleHQgPSBjcmVhdGVNb2NrQ29udGV4dCBhcyBhbnk7XG5cbi8qKlxuICogVXRpbGl0eSB0eXBlIHRvIG1vY2sgYSBzYXAudWkuYmFzZS5FdmVudFxuICovXG5leHBvcnQgdHlwZSBNb2NrRXZlbnQgPSBXaXRoTW9jazxFdmVudD4gJiB7XG5cdF9wYXJhbXM6IHsgW2tleTogc3RyaW5nXTogYW55IH07XG59O1xuLyoqXG4gKiBGYWN0b3J5IGZ1bmN0aW9uIHRvIGNyZWF0ZSBhIG5ldyBNb2NrRXZlbnQuXG4gKlxuICogQHBhcmFtIHBhcmFtcyBUaGUgcGFyYW1ldGVycyBvZiB0aGUgZXZlbnRcbiAqIEByZXR1cm5zIEEgbmV3IE1vY2tFdmVudFxuICovXG5leHBvcnQgZnVuY3Rpb24gY3JlYXRlTW9ja0V2ZW50KHBhcmFtcz86IHsgW2tleTogc3RyaW5nXTogYW55IH0pOiBNb2NrRXZlbnQge1xuXHRjb25zdCBtb2NrZWQgPSBtb2NrKEV2ZW50KSBhcyBNb2NrRXZlbnQ7XG5cdG1vY2tlZC5fcGFyYW1zID0gcGFyYW1zIHx8IHt9O1xuXG5cdC8vIERlZmF1bHQgYmVoYXZpb3Jcblx0bW9ja2VkLm1vY2suZ2V0UGFyYW1ldGVyLm1vY2tJbXBsZW1lbnRhdGlvbigobmFtZSkgPT4gbW9ja2VkLl9wYXJhbXNbbmFtZV0pO1xuXG5cdHJldHVybiBtb2NrZWQ7XG59XG4vKipcbiAqIEZvciBjb21wYXRpYmlsaXR5IHJlYXNvbnMsIHdlIGtlZXAgYSBuZXcgb3BlcmF0b3IuIFVzZSB0aGUgZmFjdG9yeSBmdW5jdGlvbiBjcmVhdGVNb2NrRXZlbnQgaW5zdGVhZC5cbiAqL1xuZXhwb3J0IGNvbnN0IE1vY2tFdmVudDogbmV3IChwYXJhbXM/OiB7IFtrZXk6IHN0cmluZ106IGFueSB9KSA9PiBNb2NrRXZlbnQgPSBjcmVhdGVNb2NrRXZlbnQgYXMgYW55O1xuXG4vKipcbiAqIFV0aWxpdHkgdHlwZSB0byBtb2NrIGEgc2FwLnVpLm1vZGVsLm9kYXRhLnY0Lk9EYXRhTGlzdEJpbmRpbmdcbiAqL1xuZXhwb3J0IHR5cGUgTW9ja0xpc3RCaW5kaW5nID0gV2l0aE1vY2s8T0RhdGFMaXN0QmluZGluZz4gJiB7XG5cdF9hTW9ja0NvbnRleHRzOiBNb2NrQ29udGV4dFtdO1xuXHRfbW9ja01vZGVsPzogTW9ja01vZGVsO1xuXG5cdC8qKlxuXHQgKiBVdGlsaXR5IG1ldGhvZCB0byBzZXQgdGhlIG1vZGVsIG9mIHRoZSBMaXN0QmluZGluZ1xuXHQgKi9cblx0c2V0TW9kZWw6IChtb2RlbDogTW9ja01vZGVsKSA9PiB2b2lkO1xufTtcbi8qKlxuICogRmFjdG9yeSBmdW5jdGlvbiB0byBjcmVhdGUgYSBuZXcgTW9ja0xpc3RCaW5kaW5nLlxuICpcbiAqIEBwYXJhbSBhQ29udGV4dERhdGEgQW4gYXJyYXkgb2Ygb2JqZWN0cyBob2xkaW5nIHRoZSBkaWZmZXJlbnQgcHJvcGVydGllcyBvZiB0aGUgY29udGV4dHMgcmVmZXJlbmNlZCBieSB0aGUgTGlzdEJpbmRpbmdcbiAqIEBwYXJhbSBvTW9ja01vZGVsIFRoZSBtb2RlbCBvZiB0aGUgTGlzdEJpbmRpbmdcbiAqIEByZXR1cm5zIEEgbmV3IE1vY2tMaXN0QmluZGluZ1xuICovXG5leHBvcnQgZnVuY3Rpb24gY3JlYXRlTW9ja0xpc3RCaW5kaW5nKGFDb250ZXh0RGF0YT86IGFueVtdLCBvTW9ja01vZGVsPzogTW9ja01vZGVsKTogTW9ja0xpc3RCaW5kaW5nIHtcblx0Y29uc3QgbW9ja2VkID0gbW9jayhPRGF0YUxpc3RCaW5kaW5nKSBhcyBNb2NrTGlzdEJpbmRpbmc7XG5cdGFDb250ZXh0RGF0YSA9IGFDb250ZXh0RGF0YSB8fCBbXTtcblx0bW9ja2VkLl9hTW9ja0NvbnRleHRzID0gYUNvbnRleHREYXRhLm1hcCgoY29udGV4dERhdGEpID0+IHtcblx0XHRyZXR1cm4gY3JlYXRlTW9ja0NvbnRleHQoY29udGV4dERhdGEsIG1vY2tlZCk7XG5cdH0pO1xuXHRtb2NrZWQuX21vY2tNb2RlbCA9IG9Nb2NrTW9kZWw7XG5cblx0Ly8gVXRpbGl0eSBBUElcblx0bW9ja2VkLnNldE1vZGVsID0gKG1vZGVsOiBNb2NrTW9kZWwpID0+IHtcblx0XHRtb2NrZWQuX21vY2tNb2RlbCA9IG1vZGVsO1xuXHR9O1xuXG5cdC8vIERlZmF1bHQgYmVoYXZpb3Jcblx0bW9ja2VkLm1vY2suaXNBLm1vY2tJbXBsZW1lbnRhdGlvbigoc0NsYXNzTmFtZTogc3RyaW5nKSA9PiB7XG5cdFx0cmV0dXJuIHNDbGFzc05hbWUgPT09IFwic2FwLnVpLm1vZGVsLm9kYXRhLnY0Lk9EYXRhTGlzdEJpbmRpbmdcIjtcblx0fSk7XG5cdG1vY2tlZC5tb2NrLnJlcXVlc3RDb250ZXh0cy5tb2NrSW1wbGVtZW50YXRpb24oKCkgPT4ge1xuXHRcdHJldHVybiBQcm9taXNlLnJlc29sdmUobW9ja2VkLl9hTW9ja0NvbnRleHRzKTtcblx0fSk7XG5cdG1vY2tlZC5tb2NrLmdldEN1cnJlbnRDb250ZXh0cy5tb2NrSW1wbGVtZW50YXRpb24oKCkgPT4ge1xuXHRcdHJldHVybiBtb2NrZWQuX2FNb2NrQ29udGV4dHM7XG5cdH0pO1xuXHRtb2NrZWQubW9jay5nZXRBbGxDdXJyZW50Q29udGV4dHMubW9ja0ltcGxlbWVudGF0aW9uKCgpID0+IHtcblx0XHRyZXR1cm4gbW9ja2VkLl9hTW9ja0NvbnRleHRzO1xuXHR9KTtcblx0bW9ja2VkLm1vY2suZ2V0TW9kZWwubW9ja0ltcGxlbWVudGF0aW9uKCgpID0+IHtcblx0XHRyZXR1cm4gbW9ja2VkLl9tb2NrTW9kZWw7XG5cdH0pO1xuXHRtb2NrZWQubW9jay5nZXRVcGRhdGVHcm91cElkLm1vY2tSZXR1cm5WYWx1ZShcImF1dG9cIik7XG5cblx0cmV0dXJuIG1vY2tlZDtcbn1cbi8qKlxuICogRm9yIGNvbXBhdGliaWxpdHkgcmVhc29ucywgd2Uga2VlcCBhIG5ldyBvcGVyYXRvci4gVXNlIHRoZSBmYWN0b3J5IGZ1bmN0aW9uIGNyZWF0ZU1vY2tMaXN0QmluZGluZyBpbnN0ZWFkLlxuICovXG5leHBvcnQgY29uc3QgTW9ja0xpc3RCaW5kaW5nOiBuZXcgKGFDb250ZXh0cz86IGFueVtdLCBtb2NrTW9kZWw/OiBNb2NrTW9kZWwpID0+IE1vY2tMaXN0QmluZGluZyA9IGNyZWF0ZU1vY2tMaXN0QmluZGluZyBhcyBhbnk7XG5cbi8qKlxuICogVXRpbGl0eSB0eXBlIHRvIG1vY2sgYSBzYXAudWkubW9kZWwub2RhdGEudjQuT0RhdGFQcm9wZXJ0eUJpbmRpbmdcbiAqL1xuZXhwb3J0IHR5cGUgTW9ja1Byb3BlcnR5QmluZGluZyA9IFdpdGhNb2NrPE9EYXRhUHJvcGVydHlCaW5kaW5nPiAmIHtcblx0X3ZhbHVlPzogYW55O1xuXHRfcGF0aD86IHN0cmluZztcblx0X21vY2tNb2RlbD86IE1vY2tNb2RlbDtcbn07XG4vKipcbiAqIEZhY3RvcnkgZnVuY3Rpb24gdG8gY3JlYXRlIGEgbmV3IE1vY2tQcm9wZXJ0eUJpbmRpbmcuXG4gKlxuICogQHBhcmFtIHZhbHVlIFRoZSB2YWx1ZSByZXR1cm5kIGJ5IHRoZSBQcm9wZXJ0eUJpbmRpbmdcbiAqIEBwYXJhbSBwYXRoIFRoZSBwYXRoIG9mIHRoZSBQcm9wZXJ0eUJpbmRpbmdcbiAqIEBwYXJhbSBvTW9ja01vZGVsIFRoZSBtb2RlbCBvZiB0aGUgUHJvcGVydHlCaW5kaW5nXG4gKiBAcmV0dXJucyBBIG5ldyBNb2NrUHJvcGVydHlCaW5kaW5nXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBjcmVhdGVNb2NrUHJvcGVydHlCaW5kaW5nKHZhbHVlOiBhbnksIHBhdGg/OiBzdHJpbmcsIG9Nb2NrTW9kZWw/OiBNb2NrTW9kZWwpOiBNb2NrUHJvcGVydHlCaW5kaW5nIHtcblx0Y29uc3QgbW9ja2VkID0gbW9jayhPRGF0YVByb3BlcnR5QmluZGluZykgYXMgTW9ja1Byb3BlcnR5QmluZGluZztcblx0bW9ja2VkLl9tb2NrTW9kZWwgPSBvTW9ja01vZGVsO1xuXHRtb2NrZWQuX3ZhbHVlID0gdmFsdWU7XG5cdG1vY2tlZC5fcGF0aCA9IHBhdGg7XG5cblx0Ly8gRGVmYXVsdCBiZWhhdmlvclxuXHRtb2NrZWQubW9jay5pc0EubW9ja0ltcGxlbWVudGF0aW9uKChzQ2xhc3NOYW1lOiBzdHJpbmcpID0+IHtcblx0XHRyZXR1cm4gc0NsYXNzTmFtZSA9PT0gXCJzYXAvdWkvbW9kZWwvb2RhdGEvdjQvT0RhdGFQcm9wZXJ0eUJpbmRpbmdcIjtcblx0fSk7XG5cdG1vY2tlZC5tb2NrLmdldE1vZGVsLm1vY2tJbXBsZW1lbnRhdGlvbigoKSA9PiB7XG5cdFx0cmV0dXJuIG1vY2tlZC5fbW9ja01vZGVsO1xuXHR9KTtcblx0bW9ja2VkLm1vY2suZ2V0VmFsdWUubW9ja0ltcGxlbWVudGF0aW9uKCgpID0+IHtcblx0XHRyZXR1cm4gbW9ja2VkLl92YWx1ZTtcblx0fSk7XG5cdG1vY2tlZC5tb2NrLmdldFBhdGgubW9ja0ltcGxlbWVudGF0aW9uKCgpID0+IHtcblx0XHRyZXR1cm4gbW9ja2VkLl9wYXRoO1xuXHR9KTtcblxuXHRyZXR1cm4gbW9ja2VkO1xufVxuLyoqXG4gKiBGb3IgY29tcGF0aWJpbGl0eSByZWFzb25zLCB3ZSBrZWVwIGEgbmV3IG9wZXJhdG9yLiBVc2UgdGhlIGZhY3RvcnkgZnVuY3Rpb24gY3JlYXRlTW9ja1Byb3BlcnR5QmluZGluZyBpbnN0ZWFkLlxuICovXG5leHBvcnQgY29uc3QgTW9ja1Byb3BlcnR5QmluZGluZzogbmV3ICh2YWx1ZTogYW55LCBvTW9ja01vZGVsPzogTW9ja01vZGVsKSA9PiBNb2NrUHJvcGVydHlCaW5kaW5nID0gY3JlYXRlTW9ja1Byb3BlcnR5QmluZGluZyBhcyBhbnk7XG5cbi8qKlxuICogVXRpbGl0eSB0eXBlIHRvIG1vY2sgYSBzYXAudWkubW9kZWwuQ29tcG9zaXRlQmluZGluZ1xuICovXG5leHBvcnQgdHlwZSBNb2NrQ29tcG9zaXRlQmluZGluZyA9IFdpdGhNb2NrPENvbXBvc2l0ZUJpbmRpbmc+ICYge1xuXHRfYUJpbmRpbmdzOiBNb2NrUHJvcGVydHlCaW5kaW5nW107XG59O1xuLyoqXG4gKiBGYWN0b3J5IGZ1bmN0aW9uIHRvIGNyZWF0ZSBhIG5ldyBNb2NrQ29tcG9zaXRlQmluZGluZy5cbiAqXG4gKiBAcGFyYW0gYUJpbmRpbmdzIFRoZSBiaW5kaW5ncyBvZiB0aGUgQ29tcG9zaXRlQmluZGluZ1xuICogQHJldHVybnMgQSBuZXcgTW9ja0NvbXBvc2l0ZUJpbmRpbmdcbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGNyZWF0ZU1vY2tDb21wb3NpdGVCaW5kaW5nKGFCaW5kaW5nczogTW9ja1Byb3BlcnR5QmluZGluZ1tdKTogTW9ja0NvbXBvc2l0ZUJpbmRpbmcge1xuXHRjb25zdCBtb2NrZWQgPSBtb2NrKENvbXBvc2l0ZUJpbmRpbmcpIGFzIE1vY2tDb21wb3NpdGVCaW5kaW5nO1xuXHRtb2NrZWQuX2FCaW5kaW5ncyA9IGFCaW5kaW5ncztcblxuXHQvLyBEZWZhdWx0IGJlaGF2aW9yXG5cdG1vY2tlZC5tb2NrLmlzQS5tb2NrSW1wbGVtZW50YXRpb24oKHNDbGFzc05hbWU6IHN0cmluZykgPT4ge1xuXHRcdHJldHVybiBzQ2xhc3NOYW1lID09PSBcInNhcC51aS5tb2RlbC5Db21wb3NpdGVCaW5kaW5nXCI7XG5cdH0pO1xuXHRtb2NrZWQubW9jay5nZXRCaW5kaW5ncy5tb2NrSW1wbGVtZW50YXRpb24oKCkgPT4ge1xuXHRcdHJldHVybiBtb2NrZWQuX2FCaW5kaW5ncztcblx0fSk7XG5cdG1vY2tlZC5tb2NrLmdldFZhbHVlLm1vY2tJbXBsZW1lbnRhdGlvbigoKSA9PiB7XG5cdFx0cmV0dXJuIG1vY2tlZC5fYUJpbmRpbmdzLm1hcCgoYmluZGluZykgPT4gYmluZGluZy5nZXRWYWx1ZSgpKTtcblx0fSk7XG5cblx0cmV0dXJuIG1vY2tlZDtcbn1cbi8qKlxuICogRm9yIGNvbXBhdGliaWxpdHkgcmVhc29ucywgd2Uga2VlcCBhIG5ldyBvcGVyYXRvci4gVXNlIHRoZSBmYWN0b3J5IGZ1bmN0aW9uIGNyZWF0ZU1vY2tDb21wb3NpdGVCaW5kaW5nIGluc3RlYWQuXG4gKi9cbmV4cG9ydCBjb25zdCBNb2NrQ29tcG9zaXRlQmluZGluZzogbmV3IChhQmluZGluZ3M6IE1vY2tQcm9wZXJ0eUJpbmRpbmdbXSkgPT4gTW9ja0NvbXBvc2l0ZUJpbmRpbmcgPSBjcmVhdGVNb2NrQ29tcG9zaXRlQmluZGluZyBhcyBhbnk7XG5cbi8qKlxuICogVXRpbGl0eSB0eXBlIHRvIG1vY2sgYSBzYXAudWkubW9kZWwub2RhdGEudjQuT0RhdGFDb250ZXh0QmluZGluZ1xuICovXG5leHBvcnQgdHlwZSBNb2NrQ29udGV4dEJpbmRpbmcgPSBXaXRoTW9jazxPRGF0YUNvbnRleHRCaW5kaW5nPiAmIHtcblx0b01vY2tDb250ZXh0OiBNb2NrQ29udGV4dDtcblx0aXNLZXB0QWxpdmU6IGJvb2xlYW47XG5cdG1vY2tNb2RlbD86IE1vY2tNb2RlbDtcblxuXHQvKipcblx0ICogVXRpbGl0eSBtZXRob2QgdG8gYWNjZXNzIHRoZSBpbnRlcm5hbCBNb2NrQ29udGV4dCBvZiB0aGUgQ29udGV4dEJpbmRpbmdcblx0ICovXG5cdGdldEludGVybmFsTW9ja0NvbnRleHQ6ICgpID0+IE1vY2tDb250ZXh0O1xuXHQvKipcblx0ICogVXRpbGl0eSBtZXRob2QgdG8gc2V0IHRoZSBtb2RlbCBvZiB0aGUgQ29udGV4dEJpbmRpbmdcblx0ICovXG5cdHNldE1vZGVsOiAob01vZGVsOiBNb2NrTW9kZWwpID0+IHZvaWQ7XG59O1xuLyoqXG4gKiBGYWN0b3J5IGZ1bmN0aW9uIHRvIGNyZWF0ZSBhIG5ldyBNb2NrQ29udGV4dEJpbmRpbmcuXG4gKlxuICogQHBhcmFtIG9Db250ZXh0IFRoZSBjb250ZXh0IG9mIHRoZSBDb250ZXh0QmluZGluZ1xuICogQHBhcmFtIG9Nb2NrTW9kZWwgVGhlIG1vZGVsIG9mIHRoZSBDb250ZXh0QmluZGluZ1xuICogQHJldHVybnMgQSBuZXcgTW9ja0NvbnRleHRCaW5kaW5nXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBjcmVhdGVNb2NrQ29udGV4dEJpbmRpbmcob0NvbnRleHQ/OiBhbnksIG9Nb2NrTW9kZWw/OiBNb2NrTW9kZWwpOiBNb2NrQ29udGV4dEJpbmRpbmcge1xuXHRjb25zdCBtb2NrZWQgPSBtb2NrKE9EYXRhQ29udGV4dEJpbmRpbmcpIGFzIE1vY2tDb250ZXh0QmluZGluZztcblx0bW9ja2VkLm1vY2tNb2RlbCA9IG9Nb2NrTW9kZWw7XG5cdG1vY2tlZC5vTW9ja0NvbnRleHQgPSBjcmVhdGVNb2NrQ29udGV4dChvQ29udGV4dCB8fCB7fSwgbW9ja2VkKTtcblxuXHQvLyBVdGlsaXR5IEFQSVxuXHRtb2NrZWQuZ2V0SW50ZXJuYWxNb2NrQ29udGV4dCA9ICgpID0+IHtcblx0XHRyZXR1cm4gbW9ja2VkLm9Nb2NrQ29udGV4dDtcblx0fTtcblx0bW9ja2VkLnNldE1vZGVsID0gKG9Nb2RlbDogTW9ja01vZGVsKSA9PiB7XG5cdFx0bW9ja2VkLm1vY2tNb2RlbCA9IG9Nb2RlbDtcblx0fTtcblxuXHQvLyBEZWZhdWx0IGJlaGF2aW9yXG5cdG1vY2tlZC5tb2NrLmlzQS5tb2NrSW1wbGVtZW50YXRpb24oKHNDbGFzc05hbWU6IHN0cmluZykgPT4ge1xuXHRcdHJldHVybiBzQ2xhc3NOYW1lID09PSBcInNhcC51aS5tb2RlbC5vZGF0YS52NC5PRGF0YUNvbnRleHRCaW5kaW5nXCI7XG5cdH0pO1xuXHRtb2NrZWQubW9jay5nZXRCb3VuZENvbnRleHQubW9ja0ltcGxlbWVudGF0aW9uKCgpID0+IHtcblx0XHRyZXR1cm4gbW9ja2VkLm9Nb2NrQ29udGV4dDtcblx0fSk7XG5cdG1vY2tlZC5tb2NrLmdldE1vZGVsLm1vY2tJbXBsZW1lbnRhdGlvbigoKSA9PiB7XG5cdFx0cmV0dXJuIG1vY2tlZC5tb2NrTW9kZWw7XG5cdH0pO1xuXHRtb2NrZWQubW9jay5leGVjdXRlLm1vY2tSZXNvbHZlZFZhbHVlKHRydWUpO1xuXG5cdHJldHVybiBtb2NrZWQ7XG59XG4vKipcbiAqIEZvciBjb21wYXRpYmlsaXR5IHJlYXNvbnMsIHdlIGtlZXAgYSBuZXcgb3BlcmF0b3IuIFVzZSB0aGUgZmFjdG9yeSBmdW5jdGlvbiBjcmVhdGVNb2NrQ29udGV4dEJpbmRpbmcgaW5zdGVhZC5cbiAqL1xuZXhwb3J0IGNvbnN0IE1vY2tDb250ZXh0QmluZGluZzogbmV3IChvQ29udGV4dD86IGFueSwgb01vY2tNb2RlbD86IE1vY2tNb2RlbCkgPT4gTW9ja0NvbnRleHRCaW5kaW5nID0gY3JlYXRlTW9ja0NvbnRleHRCaW5kaW5nIGFzIGFueTtcblxuLyoqXG4gKiBVdGlsaXR5IHR5cGUgdG8gbW9jayBhIHNhcC51aS5tb2RlbC5vZGF0YS52NC5PRGF0YU1ldGFNb2RlbFxuICovXG5leHBvcnQgdHlwZSBNb2NrTWV0YU1vZGVsID0gV2l0aE1vY2s8T0RhdGFNZXRhTW9kZWw+ICYge1xuXHRvTWV0YUNvbnRleHQ6IE1vY2tDb250ZXh0O1xufTtcbi8qKlxuICogRmFjdG9yeSBmdW5jdGlvbiB0byBjcmVhdGUgYSBuZXcgTW9ja01ldGFNb2RlbC5cbiAqXG4gKiBAcGFyYW0gb01ldGFEYXRhIEEgbWFwIG9mIHRoZSBkaWZmZXJlbnQgbWV0YWRhdGEgcHJvcGVydGllcyBvZiB0aGUgTWV0YU1vZGVsIChwYXRoIC0+IHZhbHVlKS5cbiAqIEByZXR1cm5zIEEgbmV3IE1vY2tNZXRhTW9kZWxcbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGNyZWF0ZU1vY2tNZXRhTW9kZWwob01ldGFEYXRhPzogYW55KTogTW9ja01ldGFNb2RlbCB7XG5cdGNvbnN0IG1vY2tlZCA9IG1vY2soT0RhdGFNZXRhTW9kZWwpIGFzIE1vY2tNZXRhTW9kZWw7XG5cdG1vY2tlZC5vTWV0YUNvbnRleHQgPSBjcmVhdGVNb2NrQ29udGV4dChvTWV0YURhdGEgfHwge30pO1xuXG5cdC8vIERlZmF1bHQgYmVoYXZpb3Jcblx0bW9ja2VkLm1vY2suZ2V0TWV0YUNvbnRleHQubW9ja0ltcGxlbWVudGF0aW9uKChzUGF0aDogc3RyaW5nKSA9PiB7XG5cdFx0cmV0dXJuIGNyZWF0ZU1vY2tDb250ZXh0KHsgJHBhdGg6IHNQYXRoIH0pO1xuXHR9KTtcblx0bW9ja2VkLm1vY2suZ2V0T2JqZWN0Lm1vY2tJbXBsZW1lbnRhdGlvbigoc1BhdGg6IHN0cmluZykgPT4ge1xuXHRcdHJldHVybiBtb2NrZWQub01ldGFDb250ZXh0LmdldFByb3BlcnR5KHNQYXRoKTtcblx0fSk7XG5cdG1vY2tlZC5tb2NrLmNyZWF0ZUJpbmRpbmdDb250ZXh0Lm1vY2tJbXBsZW1lbnRhdGlvbigoc1BhdGg6IHN0cmluZykgPT4ge1xuXHRcdHJldHVybiBjcmVhdGVNb2NrQ29udGV4dCh7ICRwYXRoOiBzUGF0aCB9KTtcblx0fSk7XG5cdG1vY2tlZC5tb2NrLmdldE1ldGFQYXRoLm1vY2tJbXBsZW1lbnRhdGlvbigoc1BhdGg6IHN0cmluZykgPT4ge1xuXHRcdGNvbnN0IG1ldGFtb2RlbCA9IG5ldyBPRGF0YU1ldGFNb2RlbCgpO1xuXHRcdHJldHVybiBzUGF0aCA/IG1ldGFtb2RlbC5nZXRNZXRhUGF0aChzUGF0aCkgOiBzUGF0aDtcblx0fSk7XG5cblx0cmV0dXJuIG1vY2tlZDtcbn1cbi8qKlxuICogRm9yIGNvbXBhdGliaWxpdHkgcmVhc29ucywgd2Uga2VlcCBhIG5ldyBvcGVyYXRvci4gVXNlIHRoZSBmYWN0b3J5IGZ1bmN0aW9uIGNyZWF0ZU1vY2tNZXRhTW9kZWwgaW5zdGVhZC5cbiAqL1xuZXhwb3J0IGNvbnN0IE1vY2tNZXRhTW9kZWw6IG5ldyAob01ldGFEYXRhPzogYW55KSA9PiBNb2NrTWV0YU1vZGVsID0gY3JlYXRlTW9ja01ldGFNb2RlbCBhcyBhbnk7XG5cbi8qKlxuICogVXRpbGl0eSB0eXBlIHRvIG1vY2sgYSBzYXAudWkubW9kZWwub2RhdGEudjQuT0RhdGFNb2RlbFxuICovXG5leHBvcnQgdHlwZSBNb2NrTW9kZWwgPSBXaXRoTW9jazxPRGF0YU1vZGVsPiAmIHtcblx0b01ldGFNb2RlbD86IE1vY2tNZXRhTW9kZWw7XG5cdG1vY2tMaXN0QmluZGluZz86IE1vY2tMaXN0QmluZGluZztcblx0bW9ja0NvbnRleHRCaW5kaW5nPzogTW9ja0NvbnRleHRCaW5kaW5nO1xuXG5cdC8qKlxuXHQgKiBVdGlsaXR5IG1ldGhvZCB0byBzZXQgdGhlIG1ldGFtb2RlbCBvZiB0aGUgTW9ja01vZGVsXG5cdCAqL1xuXHRzZXRNZXRhTW9kZWw6IChvTWV0YU1vZGVsOiBNb2NrTWV0YU1vZGVsKSA9PiB2b2lkO1xufTtcbi8qKlxuICogRmFjdG9yeSBmdW5jdGlvbiB0byBjcmVhdGUgYSBuZXcgTW9ja01vZGVsLlxuICpcbiAqIEBwYXJhbSBvTW9ja0xpc3RCaW5kaW5nIEEgbGlzdCBiaW5kaW5nIHRoYXQgd2lsbCBiZSByZXR1cm5lZCB3aGVuIGNhbGxpbmcgYmluZExpc3QuXG4gKiBAcGFyYW0gb01vY2tDb250ZXh0QmluZGluZyBBIGNvbnRleHQgYmluZGluZyB0aGF0IHdpbGwgYmUgcmV0dXJuZWQgd2hlbiBjYWxsaW5nIGJpbmRDb250ZXh0LlxuICogQHJldHVybnMgQSBuZXcgTW9ja01vZGVsXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBjcmVhdGVNb2NrTW9kZWwob01vY2tMaXN0QmluZGluZz86IE1vY2tMaXN0QmluZGluZywgb01vY2tDb250ZXh0QmluZGluZz86IE1vY2tDb250ZXh0QmluZGluZyk6IE1vY2tNb2RlbCB7XG5cdGNvbnN0IG1vY2tlZCA9IG1vY2soT0RhdGFNb2RlbCkgYXMgTW9ja01vZGVsO1xuXHRtb2NrZWQubW9ja0xpc3RCaW5kaW5nID0gb01vY2tMaXN0QmluZGluZztcblx0bW9ja2VkLm1vY2tDb250ZXh0QmluZGluZyA9IG9Nb2NrQ29udGV4dEJpbmRpbmc7XG5cdGlmIChvTW9ja0xpc3RCaW5kaW5nKSB7XG5cdFx0b01vY2tMaXN0QmluZGluZy5zZXRNb2RlbChtb2NrZWQpO1xuXHR9XG5cdGlmIChvTW9ja0NvbnRleHRCaW5kaW5nKSB7XG5cdFx0b01vY2tDb250ZXh0QmluZGluZy5zZXRNb2RlbChtb2NrZWQpO1xuXHR9XG5cblx0Ly8gVXRpbGl0eSBBUElcblx0bW9ja2VkLnNldE1ldGFNb2RlbCA9IChvTWV0YU1vZGVsOiBNb2NrTWV0YU1vZGVsKSA9PiB7XG5cdFx0bW9ja2VkLm9NZXRhTW9kZWwgPSBvTWV0YU1vZGVsO1xuXHR9O1xuXG5cdC8vIERlZmF1bHQgYmVoYXZpb3Jcblx0bW9ja2VkLm1vY2suYmluZExpc3QubW9ja0ltcGxlbWVudGF0aW9uKCgpID0+IHtcblx0XHRyZXR1cm4gbW9ja2VkLm1vY2tMaXN0QmluZGluZztcblx0fSk7XG5cdG1vY2tlZC5tb2NrLmJpbmRDb250ZXh0Lm1vY2tJbXBsZW1lbnRhdGlvbigoKSA9PiB7XG5cdFx0cmV0dXJuIG1vY2tlZC5tb2NrQ29udGV4dEJpbmRpbmc7XG5cdH0pO1xuXHRtb2NrZWQubW9jay5nZXRNZXRhTW9kZWwubW9ja0ltcGxlbWVudGF0aW9uKCgpID0+IHtcblx0XHRyZXR1cm4gbW9ja2VkLm9NZXRhTW9kZWw7XG5cdH0pO1xuXG5cdHJldHVybiBtb2NrZWQ7XG59XG4vKipcbiAqIEZvciBjb21wYXRpYmlsaXR5IHJlYXNvbnMsIHdlIGtlZXAgYSBuZXcgb3BlcmF0b3IuIFVzZSB0aGUgZmFjdG9yeSBmdW5jdGlvbiBjcmVhdGVNb2NrTW9kZWwgaW5zdGVhZC5cbiAqL1xuZXhwb3J0IGNvbnN0IE1vY2tNb2RlbDogbmV3IChvTW9ja0xpc3RCaW5kaW5nPzogTW9ja0xpc3RCaW5kaW5nLCBvTW9ja0NvbnRleHRCaW5kaW5nPzogTW9ja0NvbnRleHRCaW5kaW5nKSA9PiBNb2NrTW9kZWwgPVxuXHRjcmVhdGVNb2NrTW9kZWwgYXMgYW55O1xuLyoqXG4gKiBGYWN0b3J5IGZ1bmN0aW9uIHRvIGNyZWF0ZSBhIG5ldyBNb2NrTW9kZWwgdXNlZCB3aXRoIGEgbGlzdEJpbmRpbmcuXG4gKlxuICogQHBhcmFtIG9Nb2NrTGlzdEJpbmRpbmcgQSBsaXN0IGJpbmRpbmcgdGhhdCB3aWxsIGJlIHJldHVybmVkIHdoZW4gY2FsbGluZyBiaW5kTGlzdC5cbiAqIEByZXR1cm5zIEEgbmV3IE1vY2tNb2RlbFxuICovXG5leHBvcnQgZnVuY3Rpb24gY3JlYXRlTW9ja01vZGVsRnJvbUxpc3RCaW5kaW5nKG9Nb2NrTGlzdEJpbmRpbmc6IE1vY2tMaXN0QmluZGluZyk6IE1vY2tNb2RlbCB7XG5cdHJldHVybiBjcmVhdGVNb2NrTW9kZWwob01vY2tMaXN0QmluZGluZyk7XG59XG4vKipcbiAqICBGYWN0b3J5IGZ1bmN0aW9uIHRvIGNyZWF0ZSBhIG5ldyBNb2NrTW9kZWwgdXNlZCB3aXRoIGEgY29udGV4dEJpbmRpbmcuXG4gKlxuICogQHBhcmFtIG9Nb2NrQ29udGV4dEJpbmRpbmcgQSBjb250ZXh0IGJpbmRpbmcgdGhhdCB3aWxsIGJlIHJldHVybmVkIHdoZW4gY2FsbGluZyBiaW5kQ29udGV4dC5cbiAqIEByZXR1cm5zIEEgbmV3IE1vY2tNb2RlbFxuICovXG5leHBvcnQgZnVuY3Rpb24gY3JlYXRlTW9ja01vZGVsRnJvbUNvbnRleHRCaW5kaW5nKG9Nb2NrQ29udGV4dEJpbmRpbmc6IE1vY2tDb250ZXh0QmluZGluZyk6IE1vY2tNb2RlbCB7XG5cdHJldHVybiBjcmVhdGVNb2NrTW9kZWwodW5kZWZpbmVkLCBvTW9ja0NvbnRleHRCaW5kaW5nKTtcbn1cblxuLyoqXG4gKiBVdGlsaXR5IHR5cGUgdG8gbW9jayBhIHNhcC51aS5jb3JlLm12Yy5WaWV3XG4gKi9cbmV4cG9ydCB0eXBlIE1vY2tWaWV3ID0gV2l0aE1vY2s8Vmlldz47XG4vKipcbiAqIEZhY3RvcnkgZnVuY3Rpb24gdG8gY3JlYXRlIGEgbmV3IE1vY2tWaWV3LlxuICpcbiAqIEByZXR1cm5zIEEgbmV3IE1vY2tWaWV3XG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBjcmVhdGVNb2NrVmlldygpOiBNb2NrVmlldyB7XG5cdGNvbnN0IG1vY2tlZCA9IG1vY2soVmlldyk7XG5cblx0Ly8gRGVmYXVsdCBiZWhhdmlvclxuXHRtb2NrZWQubW9jay5pc0EubW9ja0ltcGxlbWVudGF0aW9uKChzQ2xhc3NOYW1lOiBzdHJpbmcpID0+IHtcblx0XHRyZXR1cm4gc0NsYXNzTmFtZSA9PT0gXCJzYXAudWkuY29yZS5tdmMuVmlld1wiO1xuXHR9KTtcblxuXHRyZXR1cm4gbW9ja2VkO1xufVxuLyoqXG4gKiBGb3IgY29tcGF0aWJpbGl0eSByZWFzb25zLCB3ZSBrZWVwIGEgbmV3IG9wZXJhdG9yLiBVc2UgdGhlIGZhY3RvcnkgZnVuY3Rpb24gY3JlYXRlTW9ja1ZpZXcgaW5zdGVhZC5cbiAqL1xuZXhwb3J0IGNvbnN0IE1vY2tWaWV3OiBuZXcgKCkgPT4gTW9ja1ZpZXcgPSBjcmVhdGVNb2NrVmlldyBhcyBhbnk7XG5cbi8qKlxuICogVXRpbGl0eSB0eXBlIHRvIG1vY2sgYSBzYXAuZmUuY29yZS5QYWdlQ29udHJvbGxlclxuICovXG5leHBvcnQgdHlwZSBNb2NrQ29udHJvbGxlciA9IFdpdGhNb2NrPENvbnRyb2xsZXI+ICYge1xuXHRfcm91dGluZzogV2l0aE1vY2s8SW50ZXJuYWxSb3V0aW5nPjtcblx0X2VkaXRGbG93OiBXaXRoTW9jazxJbnRlcm5hbEVkaXRGbG93Pjtcblx0X3NpZGVFZmZlY3RzOiBXaXRoTW9jazxTaWRlRWZmZWN0cz47XG5cdGVkaXRGbG93OiBXaXRoTW9jazxFZGl0Rmxvdz47XG59O1xuLyoqXG4gKiBGYWN0b3J5IGZ1bmN0aW9uIHRvIGNyZWF0ZSBhIG5ldyBNb2NrQ29udHJvbGxlci5cbiAqXG4gKiBAcmV0dXJucyBBIG5ldyBNb2NrQ29udHJvbGxlclxuICovXG5leHBvcnQgZnVuY3Rpb24gY3JlYXRlTW9ja0NvbnRyb2xsZXIoKTogTW9ja0NvbnRyb2xsZXIge1xuXHRjb25zdCBtb2NrZWQgPSBtb2NrKENvbnRyb2xsZXIpIGFzIE1vY2tDb250cm9sbGVyO1xuXHRtb2NrZWQuX3JvdXRpbmcgPSBtb2NrKEludGVybmFsUm91dGluZyk7XG5cdG1vY2tlZC5fZWRpdEZsb3cgPSBtb2NrKEludGVybmFsRWRpdEZsb3cpO1xuXHRtb2NrZWQuX3NpZGVFZmZlY3RzID0gbW9jayhTaWRlRWZmZWN0cyk7XG5cdG1vY2tlZC5lZGl0RmxvdyA9IG1vY2soRWRpdEZsb3cpO1xuXG5cdC8vIERlZmF1bHQgQmVoYXZpb3Jcblx0bW9ja2VkLm1vY2suZ2V0Vmlldy5tb2NrUmV0dXJuVmFsdWUoY3JlYXRlTW9ja1ZpZXcoKSk7XG5cdG1vY2tlZC5tb2NrLmlzQS5tb2NrUmV0dXJuVmFsdWUoZmFsc2UpO1xuXG5cdHJldHVybiBtb2NrZWQ7XG59XG4vKipcbiAqIEZvciBjb21wYXRpYmlsaXR5IHJlYXNvbnMsIHdlIGtlZXAgYSBuZXcgb3BlcmF0b3IuIFVzZSB0aGUgZmFjdG9yeSBmdW5jdGlvbiBtb2NrQ29udHJvbGxlciBpbnN0ZWFkLlxuICovXG5leHBvcnQgY29uc3QgTW9ja0NvbnRyb2xsZXI6IG5ldyAoKSA9PiBNb2NrQ29udHJvbGxlciA9IGNyZWF0ZU1vY2tDb250cm9sbGVyIGFzIGFueTtcblxuZXhwb3J0IGludGVyZmFjZSBNVkNNb2NrIHtcblx0bW9kZWw6IE1vY2tNb2RlbDtcblx0dmlldzogTW9ja1ZpZXc7XG5cdGNvbnRyb2xsZXI6IE1vY2tDb250cm9sbGVyO1xufVxuLyoqXG4gKiBHZW5lcmF0ZSBtb2RlbCwgdmlldyBhbmQgY29udHJvbGxlciBtb2NrcyB0aGF0IHJlZmVyIHRvIGVhY2ggb3RoZXIuXG4gKlxuICogQHBhcmFtIGV4aXN0aW5nIE9wdGlvbmFsIGV4aXN0aW5nIG1vY2tlZCBpbnN0YW5jZXMgdGhhdCBzaG91bGQgYmUgdXNlZFxuICogQHJldHVybnMgTW9ja2VkIG1vZGVsLCB2aWV3IGFuZCBjb250cm9sbGVyIGluc3RhbmNlc1xuICovXG5leHBvcnQgZnVuY3Rpb24gbW9ja01WQyhleGlzdGluZz86IFBhcnRpYWw8TVZDTW9jaz4pOiBNVkNNb2NrIHtcblx0Y29uc3QgbW9kZWwgPSBleGlzdGluZz8ubW9kZWwgfHwgY3JlYXRlTW9ja01vZGVsKCk7XG5cdGNvbnN0IHZpZXcgPSBleGlzdGluZz8udmlldyB8fCBjcmVhdGVNb2NrVmlldygpO1xuXHRjb25zdCBjb250cm9sbGVyID0gZXhpc3Rpbmc/LmNvbnRyb2xsZXIgfHwgY3JlYXRlTW9ja0NvbnRyb2xsZXIoKTtcblxuXHR2aWV3Lm1vY2suZ2V0Q29udHJvbGxlci5tb2NrUmV0dXJuVmFsdWUoY29udHJvbGxlcik7XG5cdHZpZXcubW9jay5nZXRNb2RlbC5tb2NrUmV0dXJuVmFsdWUobW9kZWwpO1xuXHRjb250cm9sbGVyLm1vY2suZ2V0Vmlldy5tb2NrUmV0dXJuVmFsdWUodmlldyk7XG5cblx0cmV0dXJuIHsgbW9kZWwsIHZpZXcsIGNvbnRyb2xsZXIgfTtcbn1cbiJdLCJtYXBwaW5ncyI6IjtBQUFBO0FBQUE7QUFBQTs7Ozs7OztFQTBCQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0VBQ08sU0FBU0EsaUJBQVQsQ0FBMkJDLFlBQTNCLEVBQStDQyxRQUEvQyxFQUErREMsVUFBL0QsRUFBa0c7SUFD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
491
+ //# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJuYW1lcyI6WyJjcmVhdGVNb2NrQ29udGV4dCIsIm9Db250ZXh0RGF0YSIsIm9CaW5kaW5nIiwiaXNJbmFjdGl2ZSIsIm1vY2tlZCIsIm1vY2siLCJPYmplY3QiLCJnZXRQcm90b3R5cGVPZiIsIkNvbnRleHQiLCJjcmVhdGVOZXdDb250ZXh0IiwiX2lzS2VwdEFsaXZlIiwiX2NvbnRleHREYXRhIiwiX29CaW5kaW5nIiwiX2lzSW5hY3RpdmUiLCJpc0EiLCJtb2NrSW1wbGVtZW50YXRpb24iLCJzQ2xhc3NOYW1lIiwiZ2V0UHJvcGVydHkiLCJrZXkiLCJyZXF1ZXN0UHJvcGVydHkiLCJrZXlPcktleXMiLCJBcnJheSIsImlzQXJyYXkiLCJQcm9taXNlIiwicmVzb2x2ZSIsIm1hcCIsInJlcXVlc3RPYmplY3QiLCJzZXRQcm9wZXJ0eSIsInZhbHVlIiwiZ2V0T2JqZWN0IiwicGF0aCIsInJlc3VsdCIsImluZGV4T2YiLCJwYXJ0cyIsInNwbGl0IiwicmVkdWNlIiwic3VtIiwicGFydCIsImdldFBhdGgiLCJnZXRCaW5kaW5nIiwiZ2V0TW9kZWwiLCJzZXRLZWVwQWxpdmUiLCJib29sIiwiX2ZuT25CZWZvcmVEZXN0cm95IiwiX2JSZXF1ZXN0TWVzc2FnZXMiLCJpc0tlZXBBbGl2ZSIsIk1vY2tDb250ZXh0IiwiY3JlYXRlTW9ja0V2ZW50IiwicGFyYW1zIiwiRXZlbnQiLCJfcGFyYW1zIiwiZ2V0UGFyYW1ldGVyIiwibmFtZSIsIk1vY2tFdmVudCIsImNyZWF0ZU1vY2tMaXN0QmluZGluZyIsImFDb250ZXh0RGF0YSIsIm9Nb2NrTW9kZWwiLCJPRGF0YUxpc3RCaW5kaW5nIiwiX2FNb2NrQ29udGV4dHMiLCJjb250ZXh0RGF0YSIsIl9tb2NrTW9kZWwiLCJzZXRNb2RlbCIsIm1vZGVsIiwicmVxdWVzdENvbnRleHRzIiwiZ2V0Q3VycmVudENvbnRleHRzIiwiZ2V0QWxsQ3VycmVudENvbnRleHRzIiwiZ2V0VXBkYXRlR3JvdXBJZCIsIm1vY2tSZXR1cm5WYWx1ZSIsIk1vY2tMaXN0QmluZGluZyIsImNyZWF0ZU1vY2tQcm9wZXJ0eUJpbmRpbmciLCJPRGF0YVByb3BlcnR5QmluZGluZyIsIl92YWx1ZSIsIl9wYXRoIiwiZ2V0VmFsdWUiLCJNb2NrUHJvcGVydHlCaW5kaW5nIiwiY3JlYXRlTW9ja0NvbXBvc2l0ZUJpbmRpbmciLCJhQmluZGluZ3MiLCJDb21wb3NpdGVCaW5kaW5nIiwiX2FCaW5kaW5ncyIsImdldEJpbmRpbmdzIiwiYmluZGluZyIsIk1vY2tDb21wb3NpdGVCaW5kaW5nIiwiY3JlYXRlTW9ja0NvbnRleHRCaW5kaW5nIiwib0NvbnRleHQiLCJPRGF0YUNvbnRleHRCaW5kaW5nIiwibW9ja01vZGVsIiwib01vY2tDb250ZXh0IiwiZ2V0SW50ZXJuYWxNb2NrQ29udGV4dCIsIm9Nb2RlbCIsImdldEJvdW5kQ29udGV4dCIsImV4ZWN1dGUiLCJtb2NrUmVzb2x2ZWRWYWx1ZSIsIk1vY2tDb250ZXh0QmluZGluZyIsImNyZWF0ZU1vY2tNZXRhTW9kZWwiLCJvTWV0YURhdGEiLCJPRGF0YU1ldGFNb2RlbCIsIm9NZXRhQ29udGV4dCIsImdldE1ldGFDb250ZXh0Iiwic1BhdGgiLCIkcGF0aCIsImNyZWF0ZUJpbmRpbmdDb250ZXh0IiwiZ2V0TWV0YVBhdGgiLCJtZXRhbW9kZWwiLCJNb2NrTWV0YU1vZGVsIiwiY3JlYXRlTW9ja01vZGVsIiwib01vY2tMaXN0QmluZGluZyIsIm9Nb2NrQ29udGV4dEJpbmRpbmciLCJPRGF0YU1vZGVsIiwibW9ja0xpc3RCaW5kaW5nIiwibW9ja0NvbnRleHRCaW5kaW5nIiwic2V0TWV0YU1vZGVsIiwib01ldGFNb2RlbCIsImJpbmRMaXN0IiwiYmluZENvbnRleHQiLCJnZXRNZXRhTW9kZWwiLCJNb2NrTW9kZWwiLCJjcmVhdGVNb2NrTW9kZWxGcm9tTGlzdEJpbmRpbmciLCJjcmVhdGVNb2NrTW9kZWxGcm9tQ29udGV4dEJpbmRpbmciLCJ1bmRlZmluZWQiLCJjcmVhdGVNb2NrVmlldyIsIlZpZXciLCJNb2NrVmlldyIsImNyZWF0ZU1vY2tDb250cm9sbGVyIiwiQ29udHJvbGxlciIsIl9yb3V0aW5nIiwiSW50ZXJuYWxSb3V0aW5nIiwiX2VkaXRGbG93IiwiSW50ZXJuYWxFZGl0RmxvdyIsIl9zaWRlRWZmZWN0cyIsIlNpZGVFZmZlY3RzIiwiZWRpdEZsb3ciLCJFZGl0RmxvdyIsImdldFZpZXciLCJNb2NrQ29udHJvbGxlciIsIm1vY2tNVkMiLCJleGlzdGluZyIsInZpZXciLCJjb250cm9sbGVyIiwiZ2V0Q29udHJvbGxlciJdLCJzb3VyY2VSb290IjoiLiIsInNvdXJjZXMiOlsiVUk1TW9ja0hlbHBlci50cyJdLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgdHlwZSB7IFdpdGhNb2NrIH0gZnJvbSBcIkBzYXAtdXgvamVzdC1tb2NrLXVpNS9kaXN0L2dlbmVyaWNcIjtcbmltcG9ydCB7IG1vY2sgfSBmcm9tIFwiQHNhcC11eC9qZXN0LW1vY2stdWk1L2Rpc3QvZ2VuZXJpY1wiO1xuaW1wb3J0IEVkaXRGbG93IGZyb20gXCJzYXAvZmUvY29yZS9jb250cm9sbGVyZXh0ZW5zaW9ucy9FZGl0Rmxvd1wiO1xuaW1wb3J0IEludGVybmFsRWRpdEZsb3cgZnJvbSBcInNhcC9mZS9jb3JlL2NvbnRyb2xsZXJleHRlbnNpb25zL0ludGVybmFsRWRpdEZsb3dcIjtcbmltcG9ydCBJbnRlcm5hbFJvdXRpbmcgZnJvbSBcInNhcC9mZS9jb3JlL2NvbnRyb2xsZXJleHRlbnNpb25zL0ludGVybmFsUm91dGluZ1wiO1xuaW1wb3J0IFNpZGVFZmZlY3RzIGZyb20gXCJzYXAvZmUvY29yZS9jb250cm9sbGVyZXh0ZW5zaW9ucy9TaWRlRWZmZWN0c1wiO1xuaW1wb3J0IEV2ZW50IGZyb20gXCJzYXAvdWkvYmFzZS9FdmVudFwiO1xuaW1wb3J0IENvbnRyb2xsZXIgZnJvbSBcInNhcC91aS9jb3JlL212Yy9Db250cm9sbGVyXCI7XG5pbXBvcnQgVmlldyBmcm9tIFwic2FwL3VpL2NvcmUvbXZjL1ZpZXdcIjtcbmltcG9ydCBDb21wb3NpdGVCaW5kaW5nIGZyb20gXCJzYXAvdWkvbW9kZWwvQ29tcG9zaXRlQmluZGluZ1wiO1xuaW1wb3J0IENvbnRleHQgZnJvbSBcInNhcC91aS9tb2RlbC9vZGF0YS92NC9Db250ZXh0XCI7XG5pbXBvcnQgT0RhdGFDb250ZXh0QmluZGluZyBmcm9tIFwic2FwL3VpL21vZGVsL29kYXRhL3Y0L09EYXRhQ29udGV4dEJpbmRpbmdcIjtcbmltcG9ydCBPRGF0YUxpc3RCaW5kaW5nIGZyb20gXCJzYXAvdWkvbW9kZWwvb2RhdGEvdjQvT0RhdGFMaXN0QmluZGluZ1wiO1xuaW1wb3J0IE9EYXRhTWV0YU1vZGVsIGZyb20gXCJzYXAvdWkvbW9kZWwvb2RhdGEvdjQvT0RhdGFNZXRhTW9kZWxcIjtcbmltcG9ydCBPRGF0YU1vZGVsIGZyb20gXCJzYXAvdWkvbW9kZWwvb2RhdGEvdjQvT0RhdGFNb2RlbFwiO1xuaW1wb3J0IE9EYXRhUHJvcGVydHlCaW5kaW5nIGZyb20gXCJzYXAvdWkvbW9kZWwvb2RhdGEvdjQvT0RhdGFQcm9wZXJ0eUJpbmRpbmdcIjtcblxuLyoqXG4gKiBVdGlsaXR5IHR5cGUgdG8gbW9jayBhIHNhcC51aS5tb2RlbC5vZGF0YS52NC5Db250ZXh0XG4gKi9cbmV4cG9ydCB0eXBlIE1vY2tDb250ZXh0ID0gV2l0aE1vY2s8Q29udGV4dD4gJiB7XG5cdF9pc0tlcHRBbGl2ZTogYm9vbGVhbjtcblx0X2NvbnRleHREYXRhOiBhbnk7XG5cdF9vQmluZGluZzogYW55O1xuXHRfaXNJbmFjdGl2ZTogYm9vbGVhbjtcbn07XG4vKipcbiAqIEZhY3RvcnkgZnVuY3Rpb24gdG8gY3JlYXRlIGEgbmV3IE1vY2tDb250ZXh0LlxuICpcbiAqIEBwYXJhbSBvQ29udGV4dERhdGEgQSBtYXAgb2YgdGhlIGRpZmZlcmVudCBwcm9wZXJ0aWVzIG9mIHRoZSBjb250ZXh0LiBUaGUgdmFsdWUgZm9yIHRoZSBrZXkgJyRwYXRoJyB3aWxsIGJlIHJldHVybmVkIGJ5IHRoZSAnZ2V0UGF0aCcgbWV0aG9kXG4gKiBAcGFyYW0gb0JpbmRpbmcgVGhlIGJpbmRpbmcgb2YgdGhlIGNvbnRleHRcbiAqIEBwYXJhbSBpc0luYWN0aXZlIElzIHRoZSBjb250ZXh0IGluaWFjdGl2ZSBvciBub3RcbiAqIEByZXR1cm5zIEEgbmV3IE1vY2tDb250ZXh0XG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBjcmVhdGVNb2NrQ29udGV4dChvQ29udGV4dERhdGE/OiBhbnksIG9CaW5kaW5nPzogYW55LCBpc0luYWN0aXZlPzogYm9vbGVhbik6IE1vY2tDb250ZXh0IHtcblx0Ly8gVWdseSB3b3JrYXJvdW5kIHRvIGdldCBhIHByb3BlciBtb2NrIHBiamVjdCwgYXMgQ29udGV4dCBpc24ndCBwcm9wZXJseSBleHBvcnRlZCBmcm9tIFVJNVxuXHRjb25zdCBtb2NrZWQgPSBtb2NrKE9iamVjdC5nZXRQcm90b3R5cGVPZigoQ29udGV4dCBhcyBhbnkpLmNyZWF0ZU5ld0NvbnRleHQobnVsbCwgbnVsbCwgXCIvZVwiKSkpIGFzIE1vY2tDb250ZXh0O1xuXHRtb2NrZWQuX2lzS2VwdEFsaXZlID0gZmFsc2U7XG5cdG1vY2tlZC5fY29udGV4dERhdGEgPSBvQ29udGV4dERhdGEgfHwge307XG5cdG1vY2tlZC5fb0JpbmRpbmcgPSBvQmluZGluZztcblx0bW9ja2VkLl9pc0luYWN0aXZlID0gISFpc0luYWN0aXZlO1xuXG5cdC8vIERlZmF1bHQgYmVoYXZpb3Jcblx0bW9ja2VkLm1vY2suaXNBLm1vY2tJbXBsZW1lbnRhdGlvbigoc0NsYXNzTmFtZTogc3RyaW5nKSA9PiB7XG5cdFx0cmV0dXJuIHNDbGFzc05hbWUgPT09IFwic2FwLnVpLm1vZGVsLm9kYXRhLnY0LkNvbnRleHRcIjtcblx0fSk7XG5cdG1vY2tlZC5tb2NrLmdldFByb3BlcnR5Lm1vY2tJbXBsZW1lbnRhdGlvbigoa2V5OiBzdHJpbmcpID0+IHtcblx0XHRyZXR1cm4gbW9ja2VkLl9jb250ZXh0RGF0YVtrZXldO1xuXHR9KTtcblx0bW9ja2VkLm1vY2sucmVxdWVzdFByb3BlcnR5Lm1vY2tJbXBsZW1lbnRhdGlvbigoa2V5T3JLZXlzOiBzdHJpbmcgfCBzdHJpbmdbXSkgPT4ge1xuXHRcdGlmIChBcnJheS5pc0FycmF5KGtleU9yS2V5cykpIHtcblx0XHRcdHJldHVybiBQcm9taXNlLnJlc29sdmUoa2V5T3JLZXlzLm1hcCgoa2V5KSA9PiBtb2NrZWQuX2NvbnRleHREYXRhW2tleV0pKTtcblx0XHR9XG5cdFx0cmV0dXJuIFByb21pc2UucmVzb2x2ZShtb2NrZWQuX2NvbnRleHREYXRhW2tleU9yS2V5c10pO1xuXHR9KTtcblx0bW9ja2VkLm1vY2sucmVxdWVzdE9iamVjdC5tb2NrSW1wbGVtZW50YXRpb24oKGtleTogc3RyaW5nKSA9PiB7XG5cdFx0cmV0dXJuIFByb21pc2UucmVzb2x2ZShtb2NrZWQuX2NvbnRleHREYXRhW2tleV0pO1xuXHR9KTtcblx0bW9ja2VkLm1vY2suc2V0UHJvcGVydHkubW9ja0ltcGxlbWVudGF0aW9uKChrZXk6IHN0cmluZywgdmFsdWU6IGFueSkgPT4ge1xuXHRcdG1vY2tlZC5fY29udGV4dERhdGFba2V5XSA9IHZhbHVlO1xuXHRcdHJldHVybiBtb2NrZWQuX2NvbnRleHREYXRhW2tleV07XG5cdH0pO1xuXG5cdG1vY2tlZC5tb2NrLmdldE9iamVjdC5tb2NrSW1wbGVtZW50YXRpb24oKHBhdGg6IHN0cmluZykgPT4ge1xuXHRcdGxldCByZXN1bHQgPSBwYXRoID8gbW9ja2VkLl9jb250ZXh0RGF0YVtwYXRoXSA6IG1vY2tlZC5fY29udGV4dERhdGE7XG5cblx0XHRpZiAoIXJlc3VsdCAmJiBwYXRoICYmIHBhdGguaW5kZXhPZihcIi9cIikgPiAtMSkge1xuXHRcdFx0Y29uc3QgcGFydHMgPSBwYXRoLnNwbGl0KFwiL1wiKTtcblx0XHRcdHJlc3VsdCA9IHBhcnRzLnJlZHVjZSgoc3VtLCBwYXJ0OiBhbnkpID0+IHtcblx0XHRcdFx0c3VtID0gcGFydCA/IHN1bVtwYXJ0XSA6IHN1bTtcblx0XHRcdFx0cmV0dXJuIHN1bTtcblx0XHRcdH0sIG1vY2tlZC5fY29udGV4dERhdGEpO1xuXHRcdH1cblxuXHRcdHJldHVybiByZXN1bHQ7XG5cdH0pO1xuXG5cdG1vY2tlZC5tb2NrLmdldFBhdGgubW9ja0ltcGxlbWVudGF0aW9uKCgpID0+IG1vY2tlZC5fY29udGV4dERhdGFbXCIkcGF0aFwiXSk7XG5cdG1vY2tlZC5tb2NrLmdldEJpbmRpbmcubW9ja0ltcGxlbWVudGF0aW9uKCgpID0+IG1vY2tlZC5fb0JpbmRpbmcpO1xuXHRtb2NrZWQubW9jay5nZXRNb2RlbC5tb2NrSW1wbGVtZW50YXRpb24oKCkgPT4gbW9ja2VkLl9vQmluZGluZz8uZ2V0TW9kZWwoKSk7XG5cdG1vY2tlZC5tb2NrLnNldEtlZXBBbGl2ZS5tb2NrSW1wbGVtZW50YXRpb24oKGJvb2w6IGJvb2xlYW4sIF9mbk9uQmVmb3JlRGVzdHJveT86IGFueSwgX2JSZXF1ZXN0TWVzc2FnZXM/OiBib29sZWFuKSA9PiB7XG5cdFx0bW9ja2VkLl9pc0tlcHRBbGl2ZSA9IGJvb2w7XG5cdH0pO1xuXHRtb2NrZWQubW9jay5pc0tlZXBBbGl2ZS5tb2NrSW1wbGVtZW50YXRpb24oKCkgPT4gbW9ja2VkLl9pc0tlcHRBbGl2ZSk7XG5cdG1vY2tlZC5tb2NrLmlzSW5hY3RpdmUubW9ja0ltcGxlbWVudGF0aW9uKCgpID0+IG1vY2tlZC5faXNJbmFjdGl2ZSk7XG5cblx0cmV0dXJuIG1vY2tlZDtcbn1cbi8qKlxuICogRm9yIGNvbXBhdGliaWxpdHkgcmVhc29ucywgd2Uga2VlcCBhIG5ldyBvcGVyYXRvci4gVXNlIHRoZSBmYWN0b3J5IGZ1bmN0aW9uIGNyZWF0ZU1vY2tDb250ZXh0IGluc3RlYWQuXG4gKi9cbmV4cG9ydCBjb25zdCBNb2NrQ29udGV4dDogbmV3IChvVmFsdWVzPzogYW55LCBvQmluZGluZz86IGFueSwgaXNJbmFjdGl2ZT86IGJvb2xlYW4pID0+IE1vY2tDb250ZXh0ID0gY3JlYXRlTW9ja0NvbnRleHQgYXMgYW55O1xuXG4vKipcbiAqIFV0aWxpdHkgdHlwZSB0byBtb2NrIGEgc2FwLnVpLmJhc2UuRXZlbnRcbiAqL1xuZXhwb3J0IHR5cGUgTW9ja0V2ZW50ID0gV2l0aE1vY2s8RXZlbnQ+ICYge1xuXHRfcGFyYW1zOiB7IFtrZXk6IHN0cmluZ106IGFueSB9O1xufTtcbi8qKlxuICogRmFjdG9yeSBmdW5jdGlvbiB0byBjcmVhdGUgYSBuZXcgTW9ja0V2ZW50LlxuICpcbiAqIEBwYXJhbSBwYXJhbXMgVGhlIHBhcmFtZXRlcnMgb2YgdGhlIGV2ZW50XG4gKiBAcmV0dXJucyBBIG5ldyBNb2NrRXZlbnRcbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGNyZWF0ZU1vY2tFdmVudChwYXJhbXM/OiB7IFtrZXk6IHN0cmluZ106IGFueSB9KTogTW9ja0V2ZW50IHtcblx0Y29uc3QgbW9ja2VkID0gbW9jayhFdmVudCkgYXMgTW9ja0V2ZW50O1xuXHRtb2NrZWQuX3BhcmFtcyA9IHBhcmFtcyB8fCB7fTtcblxuXHQvLyBEZWZhdWx0IGJlaGF2aW9yXG5cdG1vY2tlZC5tb2NrLmdldFBhcmFtZXRlci5tb2NrSW1wbGVtZW50YXRpb24oKG5hbWUpID0+IG1vY2tlZC5fcGFyYW1zW25hbWVdKTtcblxuXHRyZXR1cm4gbW9ja2VkO1xufVxuLyoqXG4gKiBGb3IgY29tcGF0aWJpbGl0eSByZWFzb25zLCB3ZSBrZWVwIGEgbmV3IG9wZXJhdG9yLiBVc2UgdGhlIGZhY3RvcnkgZnVuY3Rpb24gY3JlYXRlTW9ja0V2ZW50IGluc3RlYWQuXG4gKi9cbmV4cG9ydCBjb25zdCBNb2NrRXZlbnQ6IG5ldyAocGFyYW1zPzogeyBba2V5OiBzdHJpbmddOiBhbnkgfSkgPT4gTW9ja0V2ZW50ID0gY3JlYXRlTW9ja0V2ZW50IGFzIGFueTtcblxuLyoqXG4gKiBVdGlsaXR5IHR5cGUgdG8gbW9jayBhIHNhcC51aS5tb2RlbC5vZGF0YS52NC5PRGF0YUxpc3RCaW5kaW5nXG4gKi9cbmV4cG9ydCB0eXBlIE1vY2tMaXN0QmluZGluZyA9IFdpdGhNb2NrPE9EYXRhTGlzdEJpbmRpbmc+ICYge1xuXHRfYU1vY2tDb250ZXh0czogTW9ja0NvbnRleHRbXTtcblx0X21vY2tNb2RlbD86IE1vY2tNb2RlbDtcblxuXHQvKipcblx0ICogVXRpbGl0eSBtZXRob2QgdG8gc2V0IHRoZSBtb2RlbCBvZiB0aGUgTGlzdEJpbmRpbmdcblx0ICovXG5cdHNldE1vZGVsOiAobW9kZWw6IE1vY2tNb2RlbCkgPT4gdm9pZDtcbn07XG4vKipcbiAqIEZhY3RvcnkgZnVuY3Rpb24gdG8gY3JlYXRlIGEgbmV3IE1vY2tMaXN0QmluZGluZy5cbiAqXG4gKiBAcGFyYW0gYUNvbnRleHREYXRhIEFuIGFycmF5IG9mIG9iamVjdHMgaG9sZGluZyB0aGUgZGlmZmVyZW50IHByb3BlcnRpZXMgb2YgdGhlIGNvbnRleHRzIHJlZmVyZW5jZWQgYnkgdGhlIExpc3RCaW5kaW5nXG4gKiBAcGFyYW0gb01vY2tNb2RlbCBUaGUgbW9kZWwgb2YgdGhlIExpc3RCaW5kaW5nXG4gKiBAcmV0dXJucyBBIG5ldyBNb2NrTGlzdEJpbmRpbmdcbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGNyZWF0ZU1vY2tMaXN0QmluZGluZyhhQ29udGV4dERhdGE/OiBhbnlbXSwgb01vY2tNb2RlbD86IE1vY2tNb2RlbCk6IE1vY2tMaXN0QmluZGluZyB7XG5cdGNvbnN0IG1vY2tlZCA9IG1vY2soT0RhdGFMaXN0QmluZGluZykgYXMgTW9ja0xpc3RCaW5kaW5nO1xuXHRhQ29udGV4dERhdGEgPSBhQ29udGV4dERhdGEgfHwgW107XG5cdG1vY2tlZC5fYU1vY2tDb250ZXh0cyA9IGFDb250ZXh0RGF0YS5tYXAoKGNvbnRleHREYXRhKSA9PiB7XG5cdFx0cmV0dXJuIGNyZWF0ZU1vY2tDb250ZXh0KGNvbnRleHREYXRhLCBtb2NrZWQpO1xuXHR9KTtcblx0bW9ja2VkLl9tb2NrTW9kZWwgPSBvTW9ja01vZGVsO1xuXG5cdC8vIFV0aWxpdHkgQVBJXG5cdG1vY2tlZC5zZXRNb2RlbCA9IChtb2RlbDogTW9ja01vZGVsKSA9PiB7XG5cdFx0bW9ja2VkLl9tb2NrTW9kZWwgPSBtb2RlbDtcblx0fTtcblxuXHQvLyBEZWZhdWx0IGJlaGF2aW9yXG5cdG1vY2tlZC5tb2NrLmlzQS5tb2NrSW1wbGVtZW50YXRpb24oKHNDbGFzc05hbWU6IHN0cmluZykgPT4ge1xuXHRcdHJldHVybiBzQ2xhc3NOYW1lID09PSBcInNhcC51aS5tb2RlbC5vZGF0YS52NC5PRGF0YUxpc3RCaW5kaW5nXCI7XG5cdH0pO1xuXHRtb2NrZWQubW9jay5yZXF1ZXN0Q29udGV4dHMubW9ja0ltcGxlbWVudGF0aW9uKCgpID0+IHtcblx0XHRyZXR1cm4gUHJvbWlzZS5yZXNvbHZlKG1vY2tlZC5fYU1vY2tDb250ZXh0cyk7XG5cdH0pO1xuXHRtb2NrZWQubW9jay5nZXRDdXJyZW50Q29udGV4dHMubW9ja0ltcGxlbWVudGF0aW9uKCgpID0+IHtcblx0XHRyZXR1cm4gbW9ja2VkLl9hTW9ja0NvbnRleHRzO1xuXHR9KTtcblx0bW9ja2VkLm1vY2suZ2V0QWxsQ3VycmVudENvbnRleHRzLm1vY2tJbXBsZW1lbnRhdGlvbigoKSA9PiB7XG5cdFx0cmV0dXJuIG1vY2tlZC5fYU1vY2tDb250ZXh0cztcblx0fSk7XG5cdG1vY2tlZC5tb2NrLmdldE1vZGVsLm1vY2tJbXBsZW1lbnRhdGlvbigoKSA9PiB7XG5cdFx0cmV0dXJuIG1vY2tlZC5fbW9ja01vZGVsO1xuXHR9KTtcblx0bW9ja2VkLm1vY2suZ2V0VXBkYXRlR3JvdXBJZC5tb2NrUmV0dXJuVmFsdWUoXCJhdXRvXCIpO1xuXG5cdHJldHVybiBtb2NrZWQ7XG59XG4vKipcbiAqIEZvciBjb21wYXRpYmlsaXR5IHJlYXNvbnMsIHdlIGtlZXAgYSBuZXcgb3BlcmF0b3IuIFVzZSB0aGUgZmFjdG9yeSBmdW5jdGlvbiBjcmVhdGVNb2NrTGlzdEJpbmRpbmcgaW5zdGVhZC5cbiAqL1xuZXhwb3J0IGNvbnN0IE1vY2tMaXN0QmluZGluZzogbmV3IChhQ29udGV4dHM/OiBhbnlbXSwgbW9ja01vZGVsPzogTW9ja01vZGVsKSA9PiBNb2NrTGlzdEJpbmRpbmcgPSBjcmVhdGVNb2NrTGlzdEJpbmRpbmcgYXMgYW55O1xuXG4vKipcbiAqIFV0aWxpdHkgdHlwZSB0byBtb2NrIGEgc2FwLnVpLm1vZGVsLm9kYXRhLnY0Lk9EYXRhUHJvcGVydHlCaW5kaW5nXG4gKi9cbmV4cG9ydCB0eXBlIE1vY2tQcm9wZXJ0eUJpbmRpbmcgPSBXaXRoTW9jazxPRGF0YVByb3BlcnR5QmluZGluZz4gJiB7XG5cdF92YWx1ZT86IGFueTtcblx0X3BhdGg/OiBzdHJpbmc7XG5cdF9tb2NrTW9kZWw/OiBNb2NrTW9kZWw7XG59O1xuLyoqXG4gKiBGYWN0b3J5IGZ1bmN0aW9uIHRvIGNyZWF0ZSBhIG5ldyBNb2NrUHJvcGVydHlCaW5kaW5nLlxuICpcbiAqIEBwYXJhbSB2YWx1ZSBUaGUgdmFsdWUgcmV0dXJuZCBieSB0aGUgUHJvcGVydHlCaW5kaW5nXG4gKiBAcGFyYW0gcGF0aCBUaGUgcGF0aCBvZiB0aGUgUHJvcGVydHlCaW5kaW5nXG4gKiBAcGFyYW0gb01vY2tNb2RlbCBUaGUgbW9kZWwgb2YgdGhlIFByb3BlcnR5QmluZGluZ1xuICogQHJldHVybnMgQSBuZXcgTW9ja1Byb3BlcnR5QmluZGluZ1xuICovXG5leHBvcnQgZnVuY3Rpb24gY3JlYXRlTW9ja1Byb3BlcnR5QmluZGluZyh2YWx1ZTogYW55LCBwYXRoPzogc3RyaW5nLCBvTW9ja01vZGVsPzogTW9ja01vZGVsKTogTW9ja1Byb3BlcnR5QmluZGluZyB7XG5cdGNvbnN0IG1vY2tlZCA9IG1vY2soT0RhdGFQcm9wZXJ0eUJpbmRpbmcpIGFzIE1vY2tQcm9wZXJ0eUJpbmRpbmc7XG5cdG1vY2tlZC5fbW9ja01vZGVsID0gb01vY2tNb2RlbDtcblx0bW9ja2VkLl92YWx1ZSA9IHZhbHVlO1xuXHRtb2NrZWQuX3BhdGggPSBwYXRoO1xuXG5cdC8vIERlZmF1bHQgYmVoYXZpb3Jcblx0bW9ja2VkLm1vY2suaXNBLm1vY2tJbXBsZW1lbnRhdGlvbigoc0NsYXNzTmFtZTogc3RyaW5nKSA9PiB7XG5cdFx0cmV0dXJuIHNDbGFzc05hbWUgPT09IFwic2FwLnVpLm1vZGVsLm9kYXRhLnY0Lk9EYXRhUHJvcGVydHlCaW5kaW5nXCI7XG5cdH0pO1xuXHRtb2NrZWQubW9jay5nZXRNb2RlbC5tb2NrSW1wbGVtZW50YXRpb24oKCkgPT4ge1xuXHRcdHJldHVybiBtb2NrZWQuX21vY2tNb2RlbDtcblx0fSk7XG5cdG1vY2tlZC5tb2NrLmdldFZhbHVlLm1vY2tJbXBsZW1lbnRhdGlvbigoKSA9PiB7XG5cdFx0cmV0dXJuIG1vY2tlZC5fdmFsdWU7XG5cdH0pO1xuXHRtb2NrZWQubW9jay5nZXRQYXRoLm1vY2tJbXBsZW1lbnRhdGlvbigoKSA9PiB7XG5cdFx0cmV0dXJuIG1vY2tlZC5fcGF0aDtcblx0fSk7XG5cblx0cmV0dXJuIG1vY2tlZDtcbn1cbi8qKlxuICogRm9yIGNvbXBhdGliaWxpdHkgcmVhc29ucywgd2Uga2VlcCBhIG5ldyBvcGVyYXRvci4gVXNlIHRoZSBmYWN0b3J5IGZ1bmN0aW9uIGNyZWF0ZU1vY2tQcm9wZXJ0eUJpbmRpbmcgaW5zdGVhZC5cbiAqL1xuZXhwb3J0IGNvbnN0IE1vY2tQcm9wZXJ0eUJpbmRpbmc6IG5ldyAodmFsdWU6IGFueSwgb01vY2tNb2RlbD86IE1vY2tNb2RlbCkgPT4gTW9ja1Byb3BlcnR5QmluZGluZyA9IGNyZWF0ZU1vY2tQcm9wZXJ0eUJpbmRpbmcgYXMgYW55O1xuXG4vKipcbiAqIFV0aWxpdHkgdHlwZSB0byBtb2NrIGEgc2FwLnVpLm1vZGVsLkNvbXBvc2l0ZUJpbmRpbmdcbiAqL1xuZXhwb3J0IHR5cGUgTW9ja0NvbXBvc2l0ZUJpbmRpbmcgPSBXaXRoTW9jazxDb21wb3NpdGVCaW5kaW5nPiAmIHtcblx0X2FCaW5kaW5nczogTW9ja1Byb3BlcnR5QmluZGluZ1tdO1xufTtcbi8qKlxuICogRmFjdG9yeSBmdW5jdGlvbiB0byBjcmVhdGUgYSBuZXcgTW9ja0NvbXBvc2l0ZUJpbmRpbmcuXG4gKlxuICogQHBhcmFtIGFCaW5kaW5ncyBUaGUgYmluZGluZ3Mgb2YgdGhlIENvbXBvc2l0ZUJpbmRpbmdcbiAqIEByZXR1cm5zIEEgbmV3IE1vY2tDb21wb3NpdGVCaW5kaW5nXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBjcmVhdGVNb2NrQ29tcG9zaXRlQmluZGluZyhhQmluZGluZ3M6IE1vY2tQcm9wZXJ0eUJpbmRpbmdbXSk6IE1vY2tDb21wb3NpdGVCaW5kaW5nIHtcblx0Y29uc3QgbW9ja2VkID0gbW9jayhDb21wb3NpdGVCaW5kaW5nKSBhcyBNb2NrQ29tcG9zaXRlQmluZGluZztcblx0bW9ja2VkLl9hQmluZGluZ3MgPSBhQmluZGluZ3M7XG5cblx0Ly8gRGVmYXVsdCBiZWhhdmlvclxuXHRtb2NrZWQubW9jay5pc0EubW9ja0ltcGxlbWVudGF0aW9uKChzQ2xhc3NOYW1lOiBzdHJpbmcpID0+IHtcblx0XHRyZXR1cm4gc0NsYXNzTmFtZSA9PT0gXCJzYXAudWkubW9kZWwuQ29tcG9zaXRlQmluZGluZ1wiO1xuXHR9KTtcblx0bW9ja2VkLm1vY2suZ2V0QmluZGluZ3MubW9ja0ltcGxlbWVudGF0aW9uKCgpID0+IHtcblx0XHRyZXR1cm4gbW9ja2VkLl9hQmluZGluZ3M7XG5cdH0pO1xuXHRtb2NrZWQubW9jay5nZXRWYWx1ZS5tb2NrSW1wbGVtZW50YXRpb24oKCkgPT4ge1xuXHRcdHJldHVybiBtb2NrZWQuX2FCaW5kaW5ncy5tYXAoKGJpbmRpbmcpID0+IGJpbmRpbmcuZ2V0VmFsdWUoKSk7XG5cdH0pO1xuXG5cdHJldHVybiBtb2NrZWQ7XG59XG4vKipcbiAqIEZvciBjb21wYXRpYmlsaXR5IHJlYXNvbnMsIHdlIGtlZXAgYSBuZXcgb3BlcmF0b3IuIFVzZSB0aGUgZmFjdG9yeSBmdW5jdGlvbiBjcmVhdGVNb2NrQ29tcG9zaXRlQmluZGluZyBpbnN0ZWFkLlxuICovXG5leHBvcnQgY29uc3QgTW9ja0NvbXBvc2l0ZUJpbmRpbmc6IG5ldyAoYUJpbmRpbmdzOiBNb2NrUHJvcGVydHlCaW5kaW5nW10pID0+IE1vY2tDb21wb3NpdGVCaW5kaW5nID0gY3JlYXRlTW9ja0NvbXBvc2l0ZUJpbmRpbmcgYXMgYW55O1xuXG4vKipcbiAqIFV0aWxpdHkgdHlwZSB0byBtb2NrIGEgc2FwLnVpLm1vZGVsLm9kYXRhLnY0Lk9EYXRhQ29udGV4dEJpbmRpbmdcbiAqL1xuZXhwb3J0IHR5cGUgTW9ja0NvbnRleHRCaW5kaW5nID0gV2l0aE1vY2s8T0RhdGFDb250ZXh0QmluZGluZz4gJiB7XG5cdG9Nb2NrQ29udGV4dDogTW9ja0NvbnRleHQ7XG5cdGlzS2VwdEFsaXZlOiBib29sZWFuO1xuXHRtb2NrTW9kZWw/OiBNb2NrTW9kZWw7XG5cblx0LyoqXG5cdCAqIFV0aWxpdHkgbWV0aG9kIHRvIGFjY2VzcyB0aGUgaW50ZXJuYWwgTW9ja0NvbnRleHQgb2YgdGhlIENvbnRleHRCaW5kaW5nXG5cdCAqL1xuXHRnZXRJbnRlcm5hbE1vY2tDb250ZXh0OiAoKSA9PiBNb2NrQ29udGV4dDtcblx0LyoqXG5cdCAqIFV0aWxpdHkgbWV0aG9kIHRvIHNldCB0aGUgbW9kZWwgb2YgdGhlIENvbnRleHRCaW5kaW5nXG5cdCAqL1xuXHRzZXRNb2RlbDogKG9Nb2RlbDogTW9ja01vZGVsKSA9PiB2b2lkO1xufTtcbi8qKlxuICogRmFjdG9yeSBmdW5jdGlvbiB0byBjcmVhdGUgYSBuZXcgTW9ja0NvbnRleHRCaW5kaW5nLlxuICpcbiAqIEBwYXJhbSBvQ29udGV4dCBUaGUgY29udGV4dCBvZiB0aGUgQ29udGV4dEJpbmRpbmdcbiAqIEBwYXJhbSBvTW9ja01vZGVsIFRoZSBtb2RlbCBvZiB0aGUgQ29udGV4dEJpbmRpbmdcbiAqIEByZXR1cm5zIEEgbmV3IE1vY2tDb250ZXh0QmluZGluZ1xuICovXG5leHBvcnQgZnVuY3Rpb24gY3JlYXRlTW9ja0NvbnRleHRCaW5kaW5nKG9Db250ZXh0PzogYW55LCBvTW9ja01vZGVsPzogTW9ja01vZGVsKTogTW9ja0NvbnRleHRCaW5kaW5nIHtcblx0Y29uc3QgbW9ja2VkID0gbW9jayhPRGF0YUNvbnRleHRCaW5kaW5nKSBhcyBNb2NrQ29udGV4dEJpbmRpbmc7XG5cdG1vY2tlZC5tb2NrTW9kZWwgPSBvTW9ja01vZGVsO1xuXHRtb2NrZWQub01vY2tDb250ZXh0ID0gY3JlYXRlTW9ja0NvbnRleHQob0NvbnRleHQgfHwge30sIG1vY2tlZCk7XG5cblx0Ly8gVXRpbGl0eSBBUElcblx0bW9ja2VkLmdldEludGVybmFsTW9ja0NvbnRleHQgPSAoKSA9PiB7XG5cdFx0cmV0dXJuIG1vY2tlZC5vTW9ja0NvbnRleHQ7XG5cdH07XG5cdG1vY2tlZC5zZXRNb2RlbCA9IChvTW9kZWw6IE1vY2tNb2RlbCkgPT4ge1xuXHRcdG1vY2tlZC5tb2NrTW9kZWwgPSBvTW9kZWw7XG5cdH07XG5cblx0Ly8gRGVmYXVsdCBiZWhhdmlvclxuXHRtb2NrZWQubW9jay5pc0EubW9ja0ltcGxlbWVudGF0aW9uKChzQ2xhc3NOYW1lOiBzdHJpbmcpID0+IHtcblx0XHRyZXR1cm4gc0NsYXNzTmFtZSA9PT0gXCJzYXAudWkubW9kZWwub2RhdGEudjQuT0RhdGFDb250ZXh0QmluZGluZ1wiO1xuXHR9KTtcblx0bW9ja2VkLm1vY2suZ2V0Qm91bmRDb250ZXh0Lm1vY2tJbXBsZW1lbnRhdGlvbigoKSA9PiB7XG5cdFx0cmV0dXJuIG1vY2tlZC5vTW9ja0NvbnRleHQ7XG5cdH0pO1xuXHRtb2NrZWQubW9jay5nZXRNb2RlbC5tb2NrSW1wbGVtZW50YXRpb24oKCkgPT4ge1xuXHRcdHJldHVybiBtb2NrZWQubW9ja01vZGVsO1xuXHR9KTtcblx0bW9ja2VkLm1vY2suZXhlY3V0ZS5tb2NrUmVzb2x2ZWRWYWx1ZSh0cnVlKTtcblxuXHRyZXR1cm4gbW9ja2VkO1xufVxuLyoqXG4gKiBGb3IgY29tcGF0aWJpbGl0eSByZWFzb25zLCB3ZSBrZWVwIGEgbmV3IG9wZXJhdG9yLiBVc2UgdGhlIGZhY3RvcnkgZnVuY3Rpb24gY3JlYXRlTW9ja0NvbnRleHRCaW5kaW5nIGluc3RlYWQuXG4gKi9cbmV4cG9ydCBjb25zdCBNb2NrQ29udGV4dEJpbmRpbmc6IG5ldyAob0NvbnRleHQ/OiBhbnksIG9Nb2NrTW9kZWw/OiBNb2NrTW9kZWwpID0+IE1vY2tDb250ZXh0QmluZGluZyA9IGNyZWF0ZU1vY2tDb250ZXh0QmluZGluZyBhcyBhbnk7XG5cbi8qKlxuICogVXRpbGl0eSB0eXBlIHRvIG1vY2sgYSBzYXAudWkubW9kZWwub2RhdGEudjQuT0RhdGFNZXRhTW9kZWxcbiAqL1xuZXhwb3J0IHR5cGUgTW9ja01ldGFNb2RlbCA9IFdpdGhNb2NrPE9EYXRhTWV0YU1vZGVsPiAmIHtcblx0b01ldGFDb250ZXh0OiBNb2NrQ29udGV4dDtcbn07XG4vKipcbiAqIEZhY3RvcnkgZnVuY3Rpb24gdG8gY3JlYXRlIGEgbmV3IE1vY2tNZXRhTW9kZWwuXG4gKlxuICogQHBhcmFtIG9NZXRhRGF0YSBBIG1hcCBvZiB0aGUgZGlmZmVyZW50IG1ldGFkYXRhIHByb3BlcnRpZXMgb2YgdGhlIE1ldGFNb2RlbCAocGF0aCAtPiB2YWx1ZSkuXG4gKiBAcmV0dXJucyBBIG5ldyBNb2NrTWV0YU1vZGVsXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBjcmVhdGVNb2NrTWV0YU1vZGVsKG9NZXRhRGF0YT86IGFueSk6IE1vY2tNZXRhTW9kZWwge1xuXHRjb25zdCBtb2NrZWQgPSBtb2NrKE9EYXRhTWV0YU1vZGVsKSBhcyBNb2NrTWV0YU1vZGVsO1xuXHRtb2NrZWQub01ldGFDb250ZXh0ID0gY3JlYXRlTW9ja0NvbnRleHQob01ldGFEYXRhIHx8IHt9KTtcblxuXHQvLyBEZWZhdWx0IGJlaGF2aW9yXG5cdG1vY2tlZC5tb2NrLmdldE1ldGFDb250ZXh0Lm1vY2tJbXBsZW1lbnRhdGlvbigoc1BhdGg6IHN0cmluZykgPT4ge1xuXHRcdHJldHVybiBjcmVhdGVNb2NrQ29udGV4dCh7ICRwYXRoOiBzUGF0aCB9KTtcblx0fSk7XG5cdG1vY2tlZC5tb2NrLmdldE9iamVjdC5tb2NrSW1wbGVtZW50YXRpb24oKHNQYXRoOiBzdHJpbmcpID0+IHtcblx0XHRyZXR1cm4gbW9ja2VkLm9NZXRhQ29udGV4dC5nZXRQcm9wZXJ0eShzUGF0aCk7XG5cdH0pO1xuXHRtb2NrZWQubW9jay5jcmVhdGVCaW5kaW5nQ29udGV4dC5tb2NrSW1wbGVtZW50YXRpb24oKHNQYXRoOiBzdHJpbmcpID0+IHtcblx0XHRyZXR1cm4gY3JlYXRlTW9ja0NvbnRleHQoeyAkcGF0aDogc1BhdGggfSk7XG5cdH0pO1xuXHRtb2NrZWQubW9jay5nZXRNZXRhUGF0aC5tb2NrSW1wbGVtZW50YXRpb24oKHNQYXRoOiBzdHJpbmcpID0+IHtcblx0XHRjb25zdCBtZXRhbW9kZWwgPSBuZXcgT0RhdGFNZXRhTW9kZWwoKTtcblx0XHRyZXR1cm4gc1BhdGggPyBtZXRhbW9kZWwuZ2V0TWV0YVBhdGgoc1BhdGgpIDogc1BhdGg7XG5cdH0pO1xuXG5cdHJldHVybiBtb2NrZWQ7XG59XG4vKipcbiAqIEZvciBjb21wYXRpYmlsaXR5IHJlYXNvbnMsIHdlIGtlZXAgYSBuZXcgb3BlcmF0b3IuIFVzZSB0aGUgZmFjdG9yeSBmdW5jdGlvbiBjcmVhdGVNb2NrTWV0YU1vZGVsIGluc3RlYWQuXG4gKi9cbmV4cG9ydCBjb25zdCBNb2NrTWV0YU1vZGVsOiBuZXcgKG9NZXRhRGF0YT86IGFueSkgPT4gTW9ja01ldGFNb2RlbCA9IGNyZWF0ZU1vY2tNZXRhTW9kZWwgYXMgYW55O1xuXG4vKipcbiAqIFV0aWxpdHkgdHlwZSB0byBtb2NrIGEgc2FwLnVpLm1vZGVsLm9kYXRhLnY0Lk9EYXRhTW9kZWxcbiAqL1xuZXhwb3J0IHR5cGUgTW9ja01vZGVsID0gV2l0aE1vY2s8T0RhdGFNb2RlbD4gJiB7XG5cdG9NZXRhTW9kZWw/OiBNb2NrTWV0YU1vZGVsO1xuXHRtb2NrTGlzdEJpbmRpbmc/OiBNb2NrTGlzdEJpbmRpbmc7XG5cdG1vY2tDb250ZXh0QmluZGluZz86IE1vY2tDb250ZXh0QmluZGluZztcblxuXHQvKipcblx0ICogVXRpbGl0eSBtZXRob2QgdG8gc2V0IHRoZSBtZXRhbW9kZWwgb2YgdGhlIE1vY2tNb2RlbFxuXHQgKi9cblx0c2V0TWV0YU1vZGVsOiAob01ldGFNb2RlbDogTW9ja01ldGFNb2RlbCkgPT4gdm9pZDtcbn07XG4vKipcbiAqIEZhY3RvcnkgZnVuY3Rpb24gdG8gY3JlYXRlIGEgbmV3IE1vY2tNb2RlbC5cbiAqXG4gKiBAcGFyYW0gb01vY2tMaXN0QmluZGluZyBBIGxpc3QgYmluZGluZyB0aGF0IHdpbGwgYmUgcmV0dXJuZWQgd2hlbiBjYWxsaW5nIGJpbmRMaXN0LlxuICogQHBhcmFtIG9Nb2NrQ29udGV4dEJpbmRpbmcgQSBjb250ZXh0IGJpbmRpbmcgdGhhdCB3aWxsIGJlIHJldHVybmVkIHdoZW4gY2FsbGluZyBiaW5kQ29udGV4dC5cbiAqIEByZXR1cm5zIEEgbmV3IE1vY2tNb2RlbFxuICovXG5leHBvcnQgZnVuY3Rpb24gY3JlYXRlTW9ja01vZGVsKG9Nb2NrTGlzdEJpbmRpbmc/OiBNb2NrTGlzdEJpbmRpbmcsIG9Nb2NrQ29udGV4dEJpbmRpbmc/OiBNb2NrQ29udGV4dEJpbmRpbmcpOiBNb2NrTW9kZWwge1xuXHRjb25zdCBtb2NrZWQgPSBtb2NrKE9EYXRhTW9kZWwpIGFzIE1vY2tNb2RlbDtcblx0bW9ja2VkLm1vY2tMaXN0QmluZGluZyA9IG9Nb2NrTGlzdEJpbmRpbmc7XG5cdG1vY2tlZC5tb2NrQ29udGV4dEJpbmRpbmcgPSBvTW9ja0NvbnRleHRCaW5kaW5nO1xuXHRpZiAob01vY2tMaXN0QmluZGluZykge1xuXHRcdG9Nb2NrTGlzdEJpbmRpbmcuc2V0TW9kZWwobW9ja2VkKTtcblx0fVxuXHRpZiAob01vY2tDb250ZXh0QmluZGluZykge1xuXHRcdG9Nb2NrQ29udGV4dEJpbmRpbmcuc2V0TW9kZWwobW9ja2VkKTtcblx0fVxuXG5cdC8vIFV0aWxpdHkgQVBJXG5cdG1vY2tlZC5zZXRNZXRhTW9kZWwgPSAob01ldGFNb2RlbDogTW9ja01ldGFNb2RlbCkgPT4ge1xuXHRcdG1vY2tlZC5vTWV0YU1vZGVsID0gb01ldGFNb2RlbDtcblx0fTtcblxuXHQvLyBEZWZhdWx0IGJlaGF2aW9yXG5cdG1vY2tlZC5tb2NrLmJpbmRMaXN0Lm1vY2tJbXBsZW1lbnRhdGlvbigoKSA9PiB7XG5cdFx0cmV0dXJuIG1vY2tlZC5tb2NrTGlzdEJpbmRpbmc7XG5cdH0pO1xuXHRtb2NrZWQubW9jay5iaW5kQ29udGV4dC5tb2NrSW1wbGVtZW50YXRpb24oKCkgPT4ge1xuXHRcdHJldHVybiBtb2NrZWQubW9ja0NvbnRleHRCaW5kaW5nO1xuXHR9KTtcblx0bW9ja2VkLm1vY2suZ2V0TWV0YU1vZGVsLm1vY2tJbXBsZW1lbnRhdGlvbigoKSA9PiB7XG5cdFx0cmV0dXJuIG1vY2tlZC5vTWV0YU1vZGVsO1xuXHR9KTtcblxuXHRyZXR1cm4gbW9ja2VkO1xufVxuLyoqXG4gKiBGb3IgY29tcGF0aWJpbGl0eSByZWFzb25zLCB3ZSBrZWVwIGEgbmV3IG9wZXJhdG9yLiBVc2UgdGhlIGZhY3RvcnkgZnVuY3Rpb24gY3JlYXRlTW9ja01vZGVsIGluc3RlYWQuXG4gKi9cbmV4cG9ydCBjb25zdCBNb2NrTW9kZWw6IG5ldyAob01vY2tMaXN0QmluZGluZz86IE1vY2tMaXN0QmluZGluZywgb01vY2tDb250ZXh0QmluZGluZz86IE1vY2tDb250ZXh0QmluZGluZykgPT4gTW9ja01vZGVsID1cblx0Y3JlYXRlTW9ja01vZGVsIGFzIGFueTtcbi8qKlxuICogRmFjdG9yeSBmdW5jdGlvbiB0byBjcmVhdGUgYSBuZXcgTW9ja01vZGVsIHVzZWQgd2l0aCBhIGxpc3RCaW5kaW5nLlxuICpcbiAqIEBwYXJhbSBvTW9ja0xpc3RCaW5kaW5nIEEgbGlzdCBiaW5kaW5nIHRoYXQgd2lsbCBiZSByZXR1cm5lZCB3aGVuIGNhbGxpbmcgYmluZExpc3QuXG4gKiBAcmV0dXJucyBBIG5ldyBNb2NrTW9kZWxcbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGNyZWF0ZU1vY2tNb2RlbEZyb21MaXN0QmluZGluZyhvTW9ja0xpc3RCaW5kaW5nOiBNb2NrTGlzdEJpbmRpbmcpOiBNb2NrTW9kZWwge1xuXHRyZXR1cm4gY3JlYXRlTW9ja01vZGVsKG9Nb2NrTGlzdEJpbmRpbmcpO1xufVxuLyoqXG4gKiAgRmFjdG9yeSBmdW5jdGlvbiB0byBjcmVhdGUgYSBuZXcgTW9ja01vZGVsIHVzZWQgd2l0aCBhIGNvbnRleHRCaW5kaW5nLlxuICpcbiAqIEBwYXJhbSBvTW9ja0NvbnRleHRCaW5kaW5nIEEgY29udGV4dCBiaW5kaW5nIHRoYXQgd2lsbCBiZSByZXR1cm5lZCB3aGVuIGNhbGxpbmcgYmluZENvbnRleHQuXG4gKiBAcmV0dXJucyBBIG5ldyBNb2NrTW9kZWxcbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGNyZWF0ZU1vY2tNb2RlbEZyb21Db250ZXh0QmluZGluZyhvTW9ja0NvbnRleHRCaW5kaW5nOiBNb2NrQ29udGV4dEJpbmRpbmcpOiBNb2NrTW9kZWwge1xuXHRyZXR1cm4gY3JlYXRlTW9ja01vZGVsKHVuZGVmaW5lZCwgb01vY2tDb250ZXh0QmluZGluZyk7XG59XG5cbi8qKlxuICogVXRpbGl0eSB0eXBlIHRvIG1vY2sgYSBzYXAudWkuY29yZS5tdmMuVmlld1xuICovXG5leHBvcnQgdHlwZSBNb2NrVmlldyA9IFdpdGhNb2NrPFZpZXc+O1xuLyoqXG4gKiBGYWN0b3J5IGZ1bmN0aW9uIHRvIGNyZWF0ZSBhIG5ldyBNb2NrVmlldy5cbiAqXG4gKiBAcmV0dXJucyBBIG5ldyBNb2NrVmlld1xuICovXG5leHBvcnQgZnVuY3Rpb24gY3JlYXRlTW9ja1ZpZXcoKTogTW9ja1ZpZXcge1xuXHRjb25zdCBtb2NrZWQgPSBtb2NrKFZpZXcpO1xuXG5cdC8vIERlZmF1bHQgYmVoYXZpb3Jcblx0bW9ja2VkLm1vY2suaXNBLm1vY2tJbXBsZW1lbnRhdGlvbigoc0NsYXNzTmFtZTogc3RyaW5nKSA9PiB7XG5cdFx0cmV0dXJuIHNDbGFzc05hbWUgPT09IFwic2FwLnVpLmNvcmUubXZjLlZpZXdcIjtcblx0fSk7XG5cblx0cmV0dXJuIG1vY2tlZDtcbn1cbi8qKlxuICogRm9yIGNvbXBhdGliaWxpdHkgcmVhc29ucywgd2Uga2VlcCBhIG5ldyBvcGVyYXRvci4gVXNlIHRoZSBmYWN0b3J5IGZ1bmN0aW9uIGNyZWF0ZU1vY2tWaWV3IGluc3RlYWQuXG4gKi9cbmV4cG9ydCBjb25zdCBNb2NrVmlldzogbmV3ICgpID0+IE1vY2tWaWV3ID0gY3JlYXRlTW9ja1ZpZXcgYXMgYW55O1xuXG4vKipcbiAqIFV0aWxpdHkgdHlwZSB0byBtb2NrIGEgc2FwLmZlLmNvcmUuUGFnZUNvbnRyb2xsZXJcbiAqL1xuZXhwb3J0IHR5cGUgTW9ja0NvbnRyb2xsZXIgPSBXaXRoTW9jazxDb250cm9sbGVyPiAmIHtcblx0X3JvdXRpbmc6IFdpdGhNb2NrPEludGVybmFsUm91dGluZz47XG5cdF9lZGl0RmxvdzogV2l0aE1vY2s8SW50ZXJuYWxFZGl0Rmxvdz47XG5cdF9zaWRlRWZmZWN0czogV2l0aE1vY2s8U2lkZUVmZmVjdHM+O1xuXHRlZGl0RmxvdzogV2l0aE1vY2s8RWRpdEZsb3c+O1xufTtcbi8qKlxuICogRmFjdG9yeSBmdW5jdGlvbiB0byBjcmVhdGUgYSBuZXcgTW9ja0NvbnRyb2xsZXIuXG4gKlxuICogQHJldHVybnMgQSBuZXcgTW9ja0NvbnRyb2xsZXJcbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGNyZWF0ZU1vY2tDb250cm9sbGVyKCk6IE1vY2tDb250cm9sbGVyIHtcblx0Y29uc3QgbW9ja2VkID0gbW9jayhDb250cm9sbGVyKSBhcyBNb2NrQ29udHJvbGxlcjtcblx0bW9ja2VkLl9yb3V0aW5nID0gbW9jayhJbnRlcm5hbFJvdXRpbmcpO1xuXHRtb2NrZWQuX2VkaXRGbG93ID0gbW9jayhJbnRlcm5hbEVkaXRGbG93KTtcblx0bW9ja2VkLl9zaWRlRWZmZWN0cyA9IG1vY2soU2lkZUVmZmVjdHMpO1xuXHRtb2NrZWQuZWRpdEZsb3cgPSBtb2NrKEVkaXRGbG93KTtcblxuXHQvLyBEZWZhdWx0IEJlaGF2aW9yXG5cdG1vY2tlZC5tb2NrLmdldFZpZXcubW9ja1JldHVyblZhbHVlKGNyZWF0ZU1vY2tWaWV3KCkpO1xuXHRtb2NrZWQubW9jay5pc0EubW9ja1JldHVyblZhbHVlKGZhbHNlKTtcblxuXHRyZXR1cm4gbW9ja2VkO1xufVxuLyoqXG4gKiBGb3IgY29tcGF0aWJpbGl0eSByZWFzb25zLCB3ZSBrZWVwIGEgbmV3IG9wZXJhdG9yLiBVc2UgdGhlIGZhY3RvcnkgZnVuY3Rpb24gbW9ja0NvbnRyb2xsZXIgaW5zdGVhZC5cbiAqL1xuZXhwb3J0IGNvbnN0IE1vY2tDb250cm9sbGVyOiBuZXcgKCkgPT4gTW9ja0NvbnRyb2xsZXIgPSBjcmVhdGVNb2NrQ29udHJvbGxlciBhcyBhbnk7XG5cbmV4cG9ydCBpbnRlcmZhY2UgTVZDTW9jayB7XG5cdG1vZGVsOiBNb2NrTW9kZWw7XG5cdHZpZXc6IE1vY2tWaWV3O1xuXHRjb250cm9sbGVyOiBNb2NrQ29udHJvbGxlcjtcbn1cbi8qKlxuICogR2VuZXJhdGUgbW9kZWwsIHZpZXcgYW5kIGNvbnRyb2xsZXIgbW9ja3MgdGhhdCByZWZlciB0byBlYWNoIG90aGVyLlxuICpcbiAqIEBwYXJhbSBleGlzdGluZyBPcHRpb25hbCBleGlzdGluZyBtb2NrZWQgaW5zdGFuY2VzIHRoYXQgc2hvdWxkIGJlIHVzZWRcbiAqIEByZXR1cm5zIE1vY2tlZCBtb2RlbCwgdmlldyBhbmQgY29udHJvbGxlciBpbnN0YW5jZXNcbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIG1vY2tNVkMoZXhpc3Rpbmc/OiBQYXJ0aWFsPE1WQ01vY2s+KTogTVZDTW9jayB7XG5cdGNvbnN0IG1vZGVsID0gZXhpc3Rpbmc/Lm1vZGVsIHx8IGNyZWF0ZU1vY2tNb2RlbCgpO1xuXHRjb25zdCB2aWV3ID0gZXhpc3Rpbmc/LnZpZXcgfHwgY3JlYXRlTW9ja1ZpZXcoKTtcblx0Y29uc3QgY29udHJvbGxlciA9IGV4aXN0aW5nPy5jb250cm9sbGVyIHx8IGNyZWF0ZU1vY2tDb250cm9sbGVyKCk7XG5cblx0dmlldy5tb2NrLmdldENvbnRyb2xsZXIubW9ja1JldHVyblZhbHVlKGNvbnRyb2xsZXIpO1xuXHR2aWV3Lm1vY2suZ2V0TW9kZWwubW9ja1JldHVyblZhbHVlKG1vZGVsKTtcblx0Y29udHJvbGxlci5tb2NrLmdldFZpZXcubW9ja1JldHVyblZhbHVlKHZpZXcpO1xuXG5cdHJldHVy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
@@ -47,8 +47,11 @@ export function createMockContext(oContextData?: any, oBinding?: any, isInactive
47
47
  mocked.mock.getProperty.mockImplementation((key: string) => {
48
48
  return mocked._contextData[key];
49
49
  });
50
- mocked.mock.requestProperty.mockImplementation((key: string) => {
51
- return Promise.resolve(mocked._contextData[key]);
50
+ mocked.mock.requestProperty.mockImplementation((keyOrKeys: string | string[]) => {
51
+ if (Array.isArray(keyOrKeys)) {
52
+ return Promise.resolve(keyOrKeys.map((key) => mocked._contextData[key]));
53
+ }
54
+ return Promise.resolve(mocked._contextData[keyOrKeys]);
52
55
  });
53
56
  mocked.mock.requestObject.mockImplementation((key: string) => {
54
57
  return Promise.resolve(mocked._contextData[key]);
@@ -195,7 +198,7 @@ export function createMockPropertyBinding(value: any, path?: string, oMockModel?
195
198
 
196
199
  // Default behavior
197
200
  mocked.mock.isA.mockImplementation((sClassName: string) => {
198
- return sClassName === "sap/ui/model/odata/v4/ODataPropertyBinding";
201
+ return sClassName === "sap.ui.model.odata.v4.ODataPropertyBinding";
199
202
  });
200
203
  mocked.mock.getModel.mockImplementation(() => {
201
204
  return mocked._mockModel;
@@ -52,11 +52,17 @@ sap.ui.define(
52
52
  oBuilder.has(OpaBuilder.Matchers.children(this._getBuilderForFieldGroup(vFieldIdentifier)));
53
53
  }
54
54
 
55
- return oBuilder
56
- .has(OpaBuilder.Matchers.children(this._getBuilderForFormElement(vFieldIdentifier)))
57
- .has(FEBuilder.Matchers.singleElement())
58
- .has(OpaBuilder.Matchers.children(this.createFieldMatcher(vFieldIdentifier)))
59
- .has(FEBuilder.Matchers.singleElement());
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.getObjectPageDynamicHeaderContentBuilder(this._sHeaderContentId);
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.getObjectPageDynamicHeaderContentBuilder(this._sHeaderContentId),
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.getObjectPageDynamicHeaderContentBuilder(this._sHeaderContentId);
459
+ oHeaderContentBuilder = this.getObjectPageHeaderContentContainerBuilder(this._sHeaderContentContainerId);
459
460
  return this.prepareResult(
460
461
  oHeaderContentBuilder
461
462
  .has(
@@ -46,7 +46,7 @@ sap.ui.define(
46
46
  }
47
47
 
48
48
  function _getMainControls(oContent) {
49
- if (oContent.isA("sap.fe.macros.FieldAPI")) {
49
+ if (oContent.isA("sap.fe.macros.field.FieldAPI")) {
50
50
  return _getMainControls(oContent.getContent());
51
51
  }
52
52
 
@@ -972,6 +972,17 @@ sap.ui.define(
972
972
  return sHighlight === sRowHighlight;
973
973
  };
974
974
  },
975
+ isDraft: function (bIsDraft) {
976
+ var draftMatcher = OpaBuilder.Matchers.childrenMatcher(function (oRowChild) {
977
+ return oRowChild.isA("sap.m.ObjectMarker");
978
+ }, false);
979
+
980
+ if (bIsDraft) {
981
+ return draftMatcher;
982
+ } else {
983
+ return OpaBuilder.Matchers.not(draftMatcher);
984
+ }
985
+ },
975
986
  states: function (mStateMap) {
976
987
  if (!Utils.isOfType(mStateMap, Object)) {
977
988
  return OpaBuilder.Matchers.TRUE;
@@ -987,6 +998,8 @@ sap.ui.define(
987
998
  return TableBuilder.Row.Matchers.navigated(mStateMap.navigated);
988
999
  case "highlight":
989
1000
  return TableBuilder.Row.Matchers.highlighted(mStateMap.highlight);
1001
+ case "isDraft":
1002
+ return TableBuilder.Row.Matchers.isDraft(mStateMap.isDraft);
990
1003
  default:
991
1004
  return FEBuilder.Matchers.state(sProperty, mStateMap[sProperty]);
992
1005
  }
@@ -54,6 +54,7 @@ sap.ui.define(
54
54
  });
55
55
 
56
56
  return OpaBuilder.create(this)
57
+ .timeout(60) // allow some time (redeployment on the Java stack is slow)
57
58
  .check(function () {
58
59
  return bSuccess;
59
60
  })
@@ -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.105.1",
24
+ version: "1.107.1",
25
25
  noLibraryCSS: true
26
26
  });
27
27
  return thisLib;
28
28
  }, false);
29
- //# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJuYW1lcyI6WyJ0aGlzTGliIiwiQ29yZSIsImluaXRMaWJyYXJ5IiwibmFtZSIsImRlcGVuZGVuY2llcyIsInR5cGVzIiwiaW50ZXJmYWNlcyIsImNvbnRyb2xzIiwiZWxlbWVudHMiLCJ2ZXJzaW9uIiwibm9MaWJyYXJ5Q1NTIl0sInNvdXJjZVJvb3QiOiIuIiwic291cmNlcyI6WyJsaWJyYXJ5LnRzIl0sInNvdXJjZXNDb250ZW50IjpbIi8qXG4gKiAhICR7Y29weXJpZ2h0fVxuICovXG5cbmltcG9ydCBDb3JlIGZyb20gXCJzYXAvdWkvY29yZS9Db3JlXCI7XG5pbXBvcnQgXCJzYXAvdWkvY29yZS9saWJyYXJ5XCI7XG5cbi8qKlxuICogVGVzdCBsaWJyYXJ5IGZvciBTQVAgRmlvcmkgZWxlbWVudHNcbiAqXG4gKiBAbmFtZXNwYWNlXG4gKiBAbmFtZSBzYXAuZmUudGVzdFxuICogQHB1YmxpY1xuICovXG5cbi8vIGxpYnJhcnkgZGVwZW5kZW5jaWVzXG5jb25zdCB0aGlzTGliID0gQ29yZS5pbml0TGlicmFyeSh7XG5cdG5hbWU6IFwic2FwLmZlLnRlc3RcIixcblx0ZGVwZW5kZW5jaWVzOiBbXCJzYXAudWkuY29yZVwiXSxcblx0dHlwZXM6IFtdLFxuXHRpbnRlcmZhY2VzOiBbXSxcblx0Y29udHJvbHM6IFtdLFxuXHRlbGVtZW50czogW10sXG5cdC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBuby10ZW1wbGF0ZS1jdXJseS1pbi1zdHJpbmdcblx0dmVyc2lvbjogXCIke3ZlcnNpb259XCIsXG5cdG5vTGlicmFyeUNTUzogdHJ1ZVxufSk7XG5cbmV4cG9ydCBkZWZhdWx0IHRoaXNMaWI7XG4iXSwibWFwcGluZ3MiOiI7QUFBQTtBQUFBO0FBQUE7Ozs7RUFPQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtFQUVBO0VBQ0EsSUFBTUEsT0FBTyxHQUFHQyxJQUFJLENBQUNDLFdBQUwsQ0FBaUI7SUFDaENDLElBQUksRUFBRSxhQUQwQjtJQUVoQ0MsWUFBWSxFQUFFLENBQUMsYUFBRCxDQUZrQjtJQUdoQ0MsS0FBSyxFQUFFLEVBSHlCO0lBSWhDQyxVQUFVLEVBQUUsRUFKb0I7SUFLaENDLFFBQVEsRUFBRSxFQUxzQjtJQU1oQ0MsUUFBUSxFQUFFLEVBTnNCO0lBT2hDO0lBQ0FDLE9BQU8sRUFBRSxZQVJ1QjtJQVNoQ0MsWUFBWSxFQUFFO0VBVGtCLENBQWpCLENBQWhCO1NBWWVWLE8ifQ==
29
+ //# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJuYW1lcyI6WyJ0aGlzTGliIiwiQ29yZSIsImluaXRMaWJyYXJ5IiwibmFtZSIsImRlcGVuZGVuY2llcyIsInR5cGVzIiwiaW50ZXJmYWNlcyIsImNvbnRyb2xzIiwiZWxlbWVudHMiLCJ2ZXJzaW9uIiwibm9MaWJyYXJ5Q1NTIl0sInNvdXJjZVJvb3QiOiIuIiwic291cmNlcyI6WyJsaWJyYXJ5LnRzIl0sInNvdXJjZXNDb250ZW50IjpbImltcG9ydCBDb3JlIGZyb20gXCJzYXAvdWkvY29yZS9Db3JlXCI7XG5pbXBvcnQgXCJzYXAvdWkvY29yZS9saWJyYXJ5XCI7XG5cbi8qKlxuICogVGVzdCBsaWJyYXJ5IGZvciBTQVAgRmlvcmkgZWxlbWVudHNcbiAqXG4gKiBAbmFtZXNwYWNlXG4gKiBAbmFtZSBzYXAuZmUudGVzdFxuICogQHB1YmxpY1xuICovXG5cbi8vIGxpYnJhcnkgZGVwZW5kZW5jaWVzXG5jb25zdCB0aGlzTGliID0gQ29yZS5pbml0TGlicmFyeSh7XG5cdG5hbWU6IFwic2FwLmZlLnRlc3RcIixcblx0ZGVwZW5kZW5jaWVzOiBbXCJzYXAudWkuY29yZVwiXSxcblx0dHlwZXM6IFtdLFxuXHRpbnRlcmZhY2VzOiBbXSxcblx0Y29udHJvbHM6IFtdLFxuXHRlbGVtZW50czogW10sXG5cdC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBuby10ZW1wbGF0ZS1jdXJseS1pbi1zdHJpbmdcblx0dmVyc2lvbjogXCIke3ZlcnNpb259XCIsXG5cdG5vTGlicmFyeUNTUzogdHJ1ZVxufSk7XG5cbmV4cG9ydCBkZWZhdWx0IHRoaXNMaWI7XG4iXSwibWFwcGluZ3MiOiI7QUFBQTtBQUFBO0FBQUE7Ozs7RUFHQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtFQUVBO0VBQ0EsSUFBTUEsT0FBTyxHQUFHQyxJQUFJLENBQUNDLFdBQUwsQ0FBaUI7SUFDaENDLElBQUksRUFBRSxhQUQwQjtJQUVoQ0MsWUFBWSxFQUFFLENBQUMsYUFBRCxDQUZrQjtJQUdoQ0MsS0FBSyxFQUFFLEVBSHlCO0lBSWhDQyxVQUFVLEVBQUUsRUFKb0I7SUFLaENDLFFBQVEsRUFBRSxFQUxzQjtJQU1oQ0MsUUFBUSxFQUFFLEVBTnNCO0lBT2hDO0lBQ0FDLE9BQU8sRUFBRSxZQVJ1QjtJQVNoQ0MsWUFBWSxFQUFFO0VBVGtCLENBQWpCLENBQWhCO1NBWWVWLE8ifQ==
@@ -1,7 +1,3 @@
1
- /*
2
- * ! ${copyright}
3
- */
4
-
5
1
  import Core from "sap/ui/core/Core";
6
2
  import "sap/ui/core/library";
7
3