@bnsights/bbsf-admin-portal 1.0.2 → 1.0.6

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (166) hide show
  1. package/bnsights-bbsf-admin-portal-1.0.6.tgz +0 -0
  2. package/bundles/bnsights-bbsf-admin-portal.umd.js +19377 -20042
  3. package/bundles/bnsights-bbsf-admin-portal.umd.js.map +1 -1
  4. package/esm2015/lib/Pages/_layout/components/aside/aside-menu/aside-menu.component.js +2 -2
  5. package/esm2015/lib/Pages/account/account-routing.module.js +3 -1
  6. package/esm2015/lib/Pages/account/account.component.js +15 -6
  7. package/esm2015/lib/Pages/account/account.module.js +16 -8
  8. package/esm2015/lib/Pages/account/forgot-password/forgot-password.component.js +48 -0
  9. package/esm2015/lib/Pages/configurations/configuration/configuration.component.js +392 -387
  10. package/esm2015/lib/Pages/core/authentication/auth.guard.js +10 -4
  11. package/esm2015/lib/Pages/core/authentication/auth.service.js +1 -2
  12. package/esm2015/lib/Pages/departments/department/department.component.js +49 -84
  13. package/esm2015/lib/Pages/departments/department-info/department-info.component.js +85 -94
  14. package/esm2015/lib/Pages/departments/departments.module.js +7 -2
  15. package/esm2015/lib/Pages/helpCenter/help-center/help-center.component.js +224 -223
  16. package/esm2015/lib/Pages/helpCenter/help-center-secondlevel/help-center-secondlevel.component.js +137 -146
  17. package/esm2015/lib/Pages/helpCenter/help-center-thirdlevel/help-center-thirdlevel.component.js +136 -153
  18. package/esm2015/lib/Pages/home/home.component.js +32 -26
  19. package/esm2015/lib/Pages/home/home.module.js +5 -10
  20. package/esm2015/lib/Pages/impersonation-rules/impersonation-rules/impersonation-rules.component.js +336 -317
  21. package/esm2015/lib/Pages/jobs/jobs/jobs.component.js +168 -227
  22. package/esm2015/lib/Pages/license/license/license.component.js +68 -99
  23. package/esm2015/lib/Pages/localizations/localizations.component.js +378 -341
  24. package/esm2015/lib/Pages/logs/log/log.component.js +18 -27
  25. package/esm2015/lib/Pages/lookups/lookup/lookup.component.js +297 -288
  26. package/esm2015/lib/Pages/lookups/lookup-group/lookup-group.component.js +143 -165
  27. package/esm2015/lib/Pages/lookups/lookup-item/lookup-item.component.js +234 -233
  28. package/esm2015/lib/Pages/lookups/lookups-routing.module.js +2 -2
  29. package/esm2015/lib/Pages/notifications/add/add.component.js +83 -76
  30. package/esm2015/lib/Pages/notifications/edit/edit.component.js +60 -63
  31. package/esm2015/lib/Pages/notifications/edit-email/edit-email.component.js +128 -126
  32. package/esm2015/lib/Pages/notifications/edit-sms/edit-sms.component.js +87 -85
  33. package/esm2015/lib/Pages/notifications/master-layouts/master-layouts.component.js +57 -58
  34. package/esm2015/lib/Pages/notifications/notifications-routing.module.js +1 -3
  35. package/esm2015/lib/Pages/notifications/notifications.module.js +3 -4
  36. package/esm2015/lib/Pages/notifications/template-info/template-info.component.js +232 -228
  37. package/esm2015/lib/Pages/notifications/templates/templates.component.js +347 -310
  38. package/esm2015/lib/Pages/providers/provider/provider.component.js +54 -52
  39. package/esm2015/lib/Pages/publicHolidays/public-holiday/public-holiday.component.js +268 -270
  40. package/esm2015/lib/Pages/roles/permission-set-info/permission-set-info.component.js +136 -152
  41. package/esm2015/lib/Pages/roles/permissions/permissions.component.js +182 -218
  42. package/esm2015/lib/Pages/roles/permissionsets/permissionsets.component.js +223 -258
  43. package/esm2015/lib/Pages/sectors/department-info/department-info.component.js +134 -142
  44. package/esm2015/lib/Pages/sectors/sector/sector.component.js +127 -144
  45. package/esm2015/lib/Pages/sectors/sector-info/sector-info.component.js +123 -139
  46. package/esm2015/lib/Pages/shared/Enums/ConfigurationScope.js +8 -0
  47. package/esm2015/lib/Pages/shared/Enums/ConfigurationType.js +8 -0
  48. package/esm2015/lib/Pages/shared/Enums/ConfigurationValueSource.js +6 -0
  49. package/esm2015/lib/Pages/shared/Enums/ParticipantType.js +8 -0
  50. package/esm2015/lib/Pages/shared/Services/AccountService.service.js +21 -0
  51. package/esm2015/lib/Pages/shared/Services/ConfigurationsService.service.js +15 -12
  52. package/esm2015/lib/Pages/shared/Services/DepartmentService.service.js +4 -5
  53. package/esm2015/lib/Pages/shared/Services/EmailHeaderAndFooterTemplateService.Service.js +10 -9
  54. package/esm2015/lib/Pages/shared/Services/HelpCenterService.service.js +10 -7
  55. package/esm2015/lib/Pages/shared/Services/ImpersonationRuleService.service.js +14 -8
  56. package/esm2015/lib/Pages/shared/Services/LicenseService.service.js +3 -3
  57. package/esm2015/lib/Pages/shared/Services/LogsService.js +1 -1
  58. package/esm2015/lib/Pages/shared/Services/LookupGroupsService.service.js +11 -5
  59. package/esm2015/lib/Pages/shared/Services/LookupService.service.js +31 -15
  60. package/esm2015/lib/Pages/shared/Services/PermissionSetService.service.js +18 -8
  61. package/esm2015/lib/Pages/shared/Services/PermissionsService.service.js +12 -9
  62. package/esm2015/lib/Pages/shared/Services/PublicHolidayService.service.js +9 -3
  63. package/esm2015/lib/Pages/shared/Services/SectorService.service.js +18 -13
  64. package/esm2015/lib/Pages/shared/Services/TemplateService.service.js +36 -29
  65. package/esm2015/lib/Pages/shared/Services/localizationsService.service .js +23 -13
  66. package/esm2015/lib/Pages/shared/Services/provider.service.js +5 -7
  67. package/esm2015/lib/Pages/shared/Services/userService.service.js +10 -2
  68. package/esm2015/lib/Pages/shared/models/AccountModels/forgotPasswordModel.js +6 -0
  69. package/esm2015/lib/Pages/shared/models/ConfigurationModels/ConfigurationModel.js +1 -1
  70. package/esm2015/lib/Pages/shared/models/DepartmentModels/DepartmentModel.js +1 -1
  71. package/esm2015/lib/Pages/shared/models/DepartmentModels/DepartmentUsersIDRequestModel.js +1 -1
  72. package/esm2015/lib/Pages/shared/models/ImpersonationRuleModels/ImpersonationRuleModel.js +1 -1
  73. package/esm2015/lib/Pages/shared/models/Lookups/LookupItem.js +1 -1
  74. package/esm2015/lib/Pages/shared/models/Lookups/LookupModel.js +1 -2
  75. package/esm2015/lib/Pages/shared/models/PermissionsModels/PermissionSetUsersIDRequestModel.js +1 -1
  76. package/esm2015/lib/Pages/shared/models/SectorModels/SectorDepartmentModel.js +1 -1
  77. package/esm2015/lib/Pages/users/users.component.js +398 -409
  78. package/esm2015/lib/Pages/workflows/tabs/tabs.component.js +2 -2
  79. package/esm2015/lib/masterlayout-routing.module.js +5 -4
  80. package/esm2015/lib/masterlayout.component.js +22 -32
  81. package/esm2015/lib/masterlayout.module.js +26 -22
  82. package/esm2015/public-api.js +2 -1
  83. package/fesm2015/bnsights-bbsf-admin-portal.js +17234 -17314
  84. package/fesm2015/bnsights-bbsf-admin-portal.js.map +1 -1
  85. package/lib/Pages/account/account.component.d.ts +5 -1
  86. package/lib/Pages/account/account.module.d.ts +8 -6
  87. package/lib/Pages/account/forgot-password/forgot-password.component.d.ts +20 -0
  88. package/lib/Pages/configurations/configuration/configuration.component.d.ts +39 -31
  89. package/lib/Pages/core/authentication/auth.guard.d.ts +1 -0
  90. package/lib/Pages/departments/department/department.component.d.ts +15 -13
  91. package/lib/Pages/departments/department-info/department-info.component.d.ts +31 -28
  92. package/lib/Pages/helpCenter/help-center/help-center.component.d.ts +34 -32
  93. package/lib/Pages/helpCenter/help-center-secondlevel/help-center-secondlevel.component.d.ts +31 -34
  94. package/lib/Pages/helpCenter/help-center-thirdlevel/help-center-thirdlevel.component.d.ts +30 -35
  95. package/lib/Pages/home/home.component.d.ts +4 -4
  96. package/lib/Pages/impersonation-rules/impersonation-rules/impersonation-rules.component.d.ts +43 -42
  97. package/lib/Pages/jobs/jobs/jobs.component.d.ts +56 -62
  98. package/lib/Pages/license/license/license.component.d.ts +25 -23
  99. package/lib/Pages/localizations/localizations.component.d.ts +77 -65
  100. package/lib/Pages/logs/log/log.component.d.ts +7 -11
  101. package/lib/Pages/lookups/lookup/lookup.component.d.ts +64 -59
  102. package/lib/Pages/lookups/lookup-group/lookup-group.component.d.ts +44 -45
  103. package/lib/Pages/lookups/lookup-item/lookup-item.component.d.ts +62 -56
  104. package/lib/Pages/notifications/add/add.component.d.ts +13 -11
  105. package/lib/Pages/notifications/edit/edit.component.d.ts +14 -14
  106. package/lib/Pages/notifications/edit-email/edit-email.component.d.ts +18 -20
  107. package/lib/Pages/notifications/edit-sms/edit-sms.component.d.ts +15 -16
  108. package/lib/Pages/notifications/master-layouts/master-layouts.component.d.ts +24 -25
  109. package/lib/Pages/notifications/notifications.module.d.ts +15 -16
  110. package/lib/Pages/notifications/template-info/template-info.component.d.ts +32 -32
  111. package/lib/Pages/notifications/templates/templates.component.d.ts +54 -46
  112. package/lib/Pages/providers/provider/provider.component.d.ts +14 -13
  113. package/lib/Pages/publicHolidays/public-holiday/public-holiday.component.d.ts +29 -27
  114. package/lib/Pages/roles/permission-set-info/permission-set-info.component.d.ts +39 -40
  115. package/lib/Pages/roles/permissions/permissions.component.d.ts +49 -54
  116. package/lib/Pages/roles/permissionsets/permissionsets.component.d.ts +53 -55
  117. package/lib/Pages/sectors/department-info/department-info.component.d.ts +41 -44
  118. package/lib/Pages/sectors/sector/sector.component.d.ts +35 -33
  119. package/lib/Pages/sectors/sector-info/sector-info.component.d.ts +40 -44
  120. package/lib/Pages/shared/Enums/ConfigurationScope.d.ts +5 -0
  121. package/lib/Pages/shared/Enums/ConfigurationType.d.ts +6 -0
  122. package/lib/Pages/shared/Enums/ConfigurationValueSource.d.ts +4 -0
  123. package/lib/Pages/shared/Enums/ParticipantType.d.ts +6 -0
  124. package/lib/Pages/shared/Services/AccountService.service.d.ts +10 -0
  125. package/lib/Pages/shared/Services/ActiveDirectoryService.service.d.ts +8 -8
  126. package/lib/Pages/shared/Services/ConfigurationsService.service.d.ts +7 -8
  127. package/lib/Pages/shared/Services/DepartmentService.service.d.ts +7 -7
  128. package/lib/Pages/shared/Services/EmailHeaderAndFooterTemplateService.Service.d.ts +5 -5
  129. package/lib/Pages/shared/Services/HelpCenterService.service.d.ts +8 -7
  130. package/lib/Pages/shared/Services/ImpersonationRuleService.service.d.ts +5 -5
  131. package/lib/Pages/shared/Services/JobsService.service.d.ts +1 -1
  132. package/lib/Pages/shared/Services/LicenseService.service.d.ts +2 -2
  133. package/lib/Pages/shared/Services/LogsService.d.ts +1 -1
  134. package/lib/Pages/shared/Services/LookupGroupsService.service.d.ts +4 -4
  135. package/lib/Pages/shared/Services/LookupService.service.d.ts +14 -11
  136. package/lib/Pages/shared/Services/PermissionSetService.service.d.ts +8 -7
  137. package/lib/Pages/shared/Services/PermissionsService.service.d.ts +5 -6
  138. package/lib/Pages/shared/Services/PublicHolidayService.service.d.ts +6 -6
  139. package/lib/Pages/shared/Services/SectorService.service.d.ts +7 -7
  140. package/lib/Pages/shared/Services/TemplateService.service.d.ts +20 -19
  141. package/lib/Pages/shared/Services/WorkflowActivityService.service.d.ts +3 -3
  142. package/lib/Pages/shared/Services/WorkflowService.service.d.ts +3 -3
  143. package/lib/Pages/shared/Services/WorkflowVariablesService.service.d.ts +4 -4
  144. package/lib/Pages/shared/Services/localizationsService.service .d.ts +12 -11
  145. package/lib/Pages/shared/Services/provider.service.d.ts +10 -10
  146. package/lib/Pages/shared/Services/userService.service.d.ts +14 -12
  147. package/lib/Pages/shared/models/AccountModels/forgotPasswordModel.d.ts +3 -0
  148. package/lib/Pages/shared/models/ConfigurationModels/ConfigurationModel.d.ts +0 -1
  149. package/lib/Pages/shared/models/DepartmentModels/DepartmentModel.d.ts +1 -0
  150. package/lib/Pages/shared/models/DepartmentModels/DepartmentUsersIDRequestModel.d.ts +1 -1
  151. package/lib/Pages/shared/models/ImpersonationRuleModels/ImpersonationRuleModel.d.ts +0 -2
  152. package/lib/Pages/shared/models/Lookups/LookupModel.d.ts +1 -1
  153. package/lib/Pages/shared/models/PermissionsModels/PermissionSetUsersIDRequestModel.d.ts +1 -1
  154. package/lib/Pages/shared/models/SectorModels/SectorDepartmentModel.d.ts +1 -1
  155. package/lib/Pages/users/users.component.d.ts +54 -68
  156. package/lib/masterlayout.component.d.ts +4 -5
  157. package/lib/masterlayout.module.d.ts +8 -9
  158. package/package.json +5 -3
  159. package/public-api.d.ts +1 -0
  160. package/src/lib/assets/sass/core/components/_variables.scss +1 -1
  161. package/src/lib/assets/sass/custom-styles-rtl.scss +5 -0
  162. package/src/lib/assets/sass/custom-styles.scss +153 -0
  163. package/src/lib/assets/sass/style-rtl.scss +2 -0
  164. package/src/lib/assets/sass/style.scss +2 -2
  165. package/esm2015/lib/Pages/notifications/edit-template/edit-template.component.js +0 -35
  166. package/lib/Pages/notifications/edit-template/edit-template.component.d.ts +0 -35
@@ -1,61 +1,86 @@
1
- import { __awaiter } from "tslib";
2
1
  import { Component, ViewChild } from '@angular/core';
3
2
  import { FormGroup } from '@angular/forms';
4
- import { FilterItem, FilterType, InputType, PagingOptions, TagsInputOptions, TextBoxOptions } from '@bnsights/bbsf-controls';
3
+ import { ConfirmationModalOptions, FilterItem, FilterType, FormOptions, InputType, PagingOptions, TagsInputOptions, TextBoxOptions } from '@bnsights/bbsf-controls';
5
4
  import { PageInfoService } from '../../../_metronic/core/services/page-info.service';
6
5
  import { PermissionSetUsersIDRequestModel } from '../../shared/models/PermissionsModels/PermissionSetUsersIDRequestModel';
6
+ import { PermissionSetModel } from './../../shared/models/PermissionsModels/PermissionSetModel';
7
7
  import * as i0 from "@angular/core";
8
8
  import * as i1 from "../../../_metronic/core/services/page-info.service";
9
9
  import * as i2 from "@bnsights/bbsf-utilities";
10
10
  import * as i3 from "@angular/router";
11
- import * as i4 from "../../shared/Services/data.service";
12
- import * as i5 from "../../shared/Services/PermissionSetService.service";
13
- import * as i6 from "@ng-bootstrap/ng-bootstrap";
14
- import * as i7 from "ng-block-ui";
15
- import * as i8 from "@bnsights/bbsf-controls";
16
- import * as i9 from "@angular/material/menu";
17
- import * as i10 from "../../empty-data/empty-data.component";
18
- import * as i11 from "@angular/common";
19
- import * as i12 from "@angular/forms";
20
- import * as i13 from "ng-inline-svg";
11
+ import * as i4 from "../../shared/Services/PermissionSetService.service";
12
+ import * as i5 from "@ng-bootstrap/ng-bootstrap";
13
+ import * as i6 from "ng-block-ui";
14
+ import * as i7 from "@bnsights/bbsf-controls";
15
+ import * as i8 from "@angular/material/menu";
16
+ import * as i9 from "../../empty-data/empty-data.component";
17
+ import * as i10 from "@angular/common";
18
+ import * as i11 from "ng-inline-svg";
21
19
  export class PermissionSetInfoComponent {
22
- constructor(pageInfoService, utilityService, bbsfTranslateService, environmentService, activatedRoute, dataServices, authService, PermissionSetService, modalService) {
20
+ constructor(pageInfoService, utilityService, activatedRoute, authService, permissionSetService, modalService, requestHandlerService) {
23
21
  this.pageInfoService = pageInfoService;
24
22
  this.utilityService = utilityService;
25
- this.bbsfTranslateService = bbsfTranslateService;
26
- this.environmentService = environmentService;
27
23
  this.activatedRoute = activatedRoute;
28
- this.dataServices = dataServices;
29
24
  this.authService = authService;
30
- this.PermissionSetService = PermissionSetService;
25
+ this.permissionSetService = permissionSetService;
31
26
  this.modalService = modalService;
32
- this.ApiUrl = "/api/admin/PermissionSets/";
33
- this.SubheaderTitle = "";
34
- this.BreadcrumbTitle = this.utilityService.getResourceValue('PermissionSets');
35
- this.Url = "/Admin/Roles/PermissionSets";
36
- this.ShowToolbar = true;
37
- this.ShowbreadCrumb = true;
27
+ this.requestHandlerService = requestHandlerService;
28
+ //Page requirements
29
+ this.ApiUrl = this.permissionSetService.ApiUrl;
30
+ //Parent department data
31
+ this.PermissionSetId = "";
32
+ this.PermissionSet = new PermissionSetModel();
38
33
  this.filterForm = new FormGroup({});
39
- this.UserPermissionSetForm = new FormGroup({});
34
+ this.userPermissionSetForm = new FormGroup({});
40
35
  this.showFilter = false;
41
- this.UserPermissionSetPagingResult = [];
42
- this.IsFilterLoaded = false;
43
- this.PermissionSetId = "";
44
- this.PageName = "";
45
- // Decorator wires up blockUI instance
46
- this.ShowPageContent = false;
36
+ this.userPermissionSetPagingResult = [];
37
+ this.filteredUserPermissionSetPagingResult = [];
38
+ this.isFilterLoaded = false;
47
39
  //Add Model Controls
48
- this.AddUsersToPermissionSetForm = new FormGroup({});
49
- this.language = "";
40
+ this.addUsersToPermissionSetForm = new FormGroup({});
41
+ this.deleteControlLoaded = false;
42
+ this.getAddUserToPermissionSetModel = () => {
43
+ let paramArray = [];
44
+ let ResultModel = this.addUsersToPermissionSetForm.value;
45
+ let AddModel = new PermissionSetUsersIDRequestModel();
46
+ for (let index = 0; index < ResultModel.UserAutoComplete.length; index++) {
47
+ const key = ResultModel.UserAutoComplete[index].key;
48
+ AddModel.UsersIDs.push(Number(key));
49
+ }
50
+ AddModel.PermissionSetId = this.PermissionSetId;
51
+ paramArray.push(AddModel);
52
+ return paramArray;
53
+ };
54
+ this.getAddUserToPermissionSetFunction = (AddModel) => {
55
+ return this.permissionSetService.addUsersToPermissionSet(AddModel);
56
+ };
57
+ this.deleteUserFromPermissionSet = (deleteUserId, PerSetId) => {
58
+ return this.permissionSetService.deleteUserFromPermissionSet(deleteUserId, PerSetId);
59
+ };
60
+ this.activatedRoute.params.subscribe(params => {
61
+ this.PermissionSetId = params['id'];
62
+ });
50
63
  }
51
64
  ngOnInit() {
52
- return __awaiter(this, void 0, void 0, function* () {
53
- this.ShowPageContent = true;
54
- var PermissionSetNameObject = localStorage.getItem('PermissionSetName');
55
- let PageName = JSON.parse(PermissionSetNameObject);
56
- //console.log(PageName);
57
- this.SubheaderTitle = this.language == 'en' ? PageName.English : PageName.Arabic;
58
- PageInfoService.PageTitle = this.SubheaderTitle;
65
+ //Page header (breadcrumb and title)
66
+ this.loadBreadCrumpData();
67
+ }
68
+ //Paging functions
69
+ setUserPermissionSetListResult(result) {
70
+ this.userPermissionSetPagingResult = result;
71
+ this.filteredUserPermissionSetPagingResult = this.userPermissionSetPagingResult;
72
+ }
73
+ //Reset all Filters
74
+ resetFilters() {
75
+ this.userPermissionSetForm.controls["searchTextBox"].setValue(null);
76
+ let element = this.pagingElement;
77
+ element.ReinitializePaging();
78
+ }
79
+ //Get parent PermissionSets name and set page title and breadcrumbs
80
+ loadBreadCrumpData() {
81
+ this.permissionSetService.getPermissionSetInfo(this.PermissionSetId).subscribe((result) => {
82
+ let resultModel = result;
83
+ PageInfoService.PageTitle = resultModel.val;
59
84
  PageInfoService.PageBreadcrumbs = [
60
85
  { title: this.utilityService.getResourceValue("Home"), path: '/Admin/Home', isSeparator: false, isActive: false },
61
86
  { title: '', path: '', isSeparator: true, isActive: false },
@@ -64,142 +89,101 @@ export class PermissionSetInfoComponent {
64
89
  ];
65
90
  this.pageInfoService.calculateTitle();
66
91
  this.pageInfoService.calculateBreadcrumbs();
67
- this.bbsfTranslateService.onLangChange.subscribe((event) => {
68
- this.ShowPageContent = false;
69
- this.language = event.lang;
70
- this.ngOnInit();
71
- });
72
- this.language = yield this.utilityService.getCurrentLanguage();
73
- this.activatedRoute.params.subscribe(params => {
74
- this.PermissionSetId = params['id'];
75
- this.LoadUserList();
76
- });
92
+ //initialize page
93
+ this.initializePage();
77
94
  });
78
95
  }
79
- ReinitializeUserPermissionSetPaging() {
80
- let element = this.input;
81
- element.ReinitializePaging();
82
- }
83
- UpdateUserPermissionSetPaging() {
84
- let element = this.input;
85
- element.UpdatePaging();
86
- }
87
- setUserPermissionSetListResult(result) {
88
- this.UserPermissionSetPagingResult = result;
89
- this.ShowPageContent = true;
90
- }
91
- resetFilters() {
92
- this.UserPermissionSetForm.controls["searchTextBox"].setValue(null);
93
- let element = this.input;
94
- element.ReinitializePaging();
95
- }
96
- LoadUserList() {
96
+ //initialize page
97
+ initializePage() {
98
+ this.isFilterLoaded = false;
97
99
  // TextBox inti
98
- this.utilityService.startBlockUI();
99
100
  this.searchTextBox = new TextBoxOptions();
100
101
  this.searchTextBox.Name = "searchTextBox";
101
102
  this.searchTextBox.HideLabel = true;
102
103
  this.searchTextBox.Type = InputType.Text;
103
104
  this.searchTextBox.Placeholder = this.utilityService.getResourceValue("SearchByNameOrEmail");
104
- this.PermissionSetIdTextBox = new TextBoxOptions();
105
- this.PermissionSetIdTextBox.Name = "PermissionSetIdTextBox";
106
- this.PermissionSetIdTextBox.HideLabel = true;
107
- this.PermissionSetIdTextBox.Type = InputType.Text;
108
- this.PermissionSetIdTextBox.Value = this.PermissionSetId;
109
- this.PermissionSetIdTextBox.Placeholder = this.utilityService.getResourceValue("SearchByName");
110
- this.TextInputFilter = new FilterItem();
111
- this.TextInputFilter.FormControlName = "searchTextBox";
112
- this.TextInputFilter.ActionParameterName = "searchText";
113
- this.TextInputFilter.IsFormControl = true;
114
- this.TextInputFilter.FilterType = FilterType.TextBox;
115
- this.PermissionSetIdTextInputFilter = new FilterItem();
116
- this.PermissionSetIdTextInputFilter.FormControlName = "PermissionSetIdTextBox";
117
- this.PermissionSetIdTextInputFilter.ActionParameterName = "permissionSetId";
118
- this.PermissionSetIdTextInputFilter.IsFormControl = true;
119
- this.PermissionSetIdTextInputFilter.FilterType = FilterType.TextBox;
120
- this.UserPermissionSetPaging = new PagingOptions();
121
- this.UserPermissionSetPaging.ActionPostURL = this.environmentService.getApiUrl() + this.ApiUrl + 'GetUsersByFilter';
122
- this.UserPermissionSetPaging.OnKeyPressFiltersControlNames = ["searchTextBox", "PermissionSetIdTextBox"];
123
- this.UserPermissionSetPaging.Filters = [this.TextInputFilter, this.PermissionSetIdTextInputFilter];
124
- this.UserPermissionSetPaging.ValidationToken = this.authService.authorizationHeaderValue();
125
- setTimeout(() => {
126
- this.IsFilterLoaded = true;
127
- this.utilityService.stopBlockUI();
128
- }, 10);
105
+ this.permissionSetIdTextBox = new TextBoxOptions();
106
+ this.permissionSetIdTextBox.Name = "PermissionSetIdTextBox";
107
+ this.permissionSetIdTextBox.HideLabel = true;
108
+ this.permissionSetIdTextBox.Type = InputType.Text;
109
+ this.permissionSetIdTextBox.Value = this.PermissionSetId;
110
+ this.permissionSetIdTextBox.Placeholder = this.utilityService.getResourceValue("SearchByName");
111
+ this.textInputFilter = new FilterItem();
112
+ this.textInputFilter.FormControlName = "searchTextBox";
113
+ this.textInputFilter.ActionParameterName = "searchText";
114
+ this.textInputFilter.IsFormControl = true;
115
+ this.textInputFilter.FilterType = FilterType.TextBox;
116
+ this.permissionSetIdTextInputFilter = new FilterItem();
117
+ this.permissionSetIdTextInputFilter.FormControlName = "PermissionSetIdTextBox";
118
+ this.permissionSetIdTextInputFilter.ActionParameterName = "permissionSetId";
119
+ this.permissionSetIdTextInputFilter.IsFormControl = true;
120
+ this.permissionSetIdTextInputFilter.FilterType = FilterType.TextBox;
121
+ this.userPermissionSetPaging = new PagingOptions();
122
+ this.userPermissionSetPaging.ActionPostURL = this.ApiUrl + 'GetUsersByFilter';
123
+ this.userPermissionSetPaging.OnKeyPressFiltersControlNames = ["searchTextBox", "PermissionSetIdTextBox"];
124
+ this.userPermissionSetPaging.Filters = [this.textInputFilter, this.permissionSetIdTextInputFilter];
125
+ this.isFilterLoaded = true;
129
126
  }
130
- showAddUserToPermissionSetModal(AddUserToPermissionSetModal) {
127
+ ///////////// Start add user Part//////////////////////
128
+ showAddUserToPermissionSetModal(addUserToDepartmentModal) {
131
129
  this.utilityService.startBlockUI();
132
- this.AddUsersToPermissionSetForm = new FormGroup({});
133
- this.UserAutoComplete = new TagsInputOptions();
134
- this.UserAutoComplete.Name = "UserAutoComplete";
135
- this.UserAutoComplete.LabelKey = "Users";
136
- this.UserAutoComplete.IsRequired = true;
137
- this.UserAutoComplete.Value = null;
138
- this.UserAutoComplete.ActionURL = this.environmentService.getApiUrl() + this.ApiUrl + "AutoCompleteUserList";
139
- this.UserAutoComplete.ValidationToken = this.authService.authorizationHeaderValue();
140
- this.modalService.open(AddUserToPermissionSetModal);
130
+ this.addUsersToPermissionSetForm = new FormGroup({});
131
+ this.addUsersToPermissionSetFormOptions = new FormOptions();
132
+ this.addUsersToPermissionSetFormOptions.FormGroup = this.addUsersToPermissionSetForm;
133
+ this.addUsersToPermissionSetFormOptions.GetModelFunction = this.getAddUserToPermissionSetModel;
134
+ this.addUsersToPermissionSetFormOptions.ServiceSubmitFunction = this.getAddUserToPermissionSetFunction;
135
+ this.addUsersToPermissionSetFormOptions.PagingReference = this.pagingElement;
136
+ this.userAutoComplete = new TagsInputOptions();
137
+ this.userAutoComplete.Name = "UserAutoComplete";
138
+ this.userAutoComplete.LabelKey = "Users";
139
+ this.userAutoComplete.IsRequired = true;
140
+ this.userAutoComplete.Value = null;
141
+ this.userAutoComplete.ActionURL = this.ApiUrl + "AutoCompleteUserList";
142
+ this.userAutoComplete.ValidationToken = this.authService.authorizationHeaderValue();
143
+ this.modalService.open(addUserToDepartmentModal);
141
144
  this.utilityService.stopBlockUI();
142
145
  }
143
- addUserToPermissionSet() {
144
- if (this.AddUsersToPermissionSetForm.invalid) {
145
- return;
146
- }
147
- else {
148
- let ResultModel = this.AddUsersToPermissionSetForm.value;
149
- let AddModel = new PermissionSetUsersIDRequestModel();
150
- for (let index = 0; index < ResultModel.UserAutoComplete.length; index++) {
151
- const key = ResultModel.UserAutoComplete[index].key;
152
- AddModel.UsersIDs.push(Number(key));
153
- }
154
- AddModel.PermissionSetId = Number(this.PermissionSetId);
155
- this.PermissionSetService.AddUsersToPermissionSet(AddModel).subscribe((result) => {
156
- this.modalService.dismissAll();
157
- let element = this.input;
158
- element.ReinitializePaging();
159
- }, (error) => {
160
- });
161
- }
146
+ ///////////// End add User Part//////////////////////
147
+ ///////////Start delete user from PermissionSet//////////////////////
148
+ showDeleteUserFromPermissionSetModal(encryptedUserId) {
149
+ this.deleteUserId = encryptedUserId;
150
+ //array sent to service function
151
+ let paramArray = [];
152
+ paramArray.push(this.deleteUserId);
153
+ paramArray.push(this.PermissionSetId);
154
+ this.deleteConfirmationOptions = new ConfirmationModalOptions();
155
+ this.deleteConfirmationOptions.ServiceSubmitFunction = this.deleteUserFromPermissionSet;
156
+ this.deleteConfirmationOptions.ServiceSubmitModel = paramArray;
157
+ this.deleteConfirmationOptions.PagingReference = this.pagingElement;
158
+ this.deleteControlLoaded = true;
159
+ setTimeout(() => {
160
+ this.ConfirmationModalControl.showModal();
161
+ }, 200);
162
162
  }
163
- showDeleteUserFromPermissionSetModal(user, deleteUserPermissionSetModal) {
164
- this.utilityService.startBlockUI();
165
- this.deleteUserId = user.id;
166
- this.modalService.open(deleteUserPermissionSetModal);
167
- this.utilityService.stopBlockUI();
163
+ ///////////End delete user from department//////////////////////
164
+ filterUserList(searchValue) {
165
+ if (searchValue)
166
+ this.filteredUserPermissionSetPagingResult = this.userPermissionSetPagingResult.filter(item => item.userName.toLowerCase().includes(searchValue.toLowerCase()));
167
+ else
168
+ this.filteredUserPermissionSetPagingResult = this.userPermissionSetPagingResult;
168
169
  }
169
- deleteUserFromPermissionSet() {
170
- this.PermissionSetService.DeleteUserFromPermissionSet(this.deleteUserId.toString(), this.PermissionSetId).subscribe((result) => {
171
- var data = result;
172
- if (!data.val) {
173
- console.log("notified error");
174
- this.utilityService.notifyErrorMessage(this.utilityService.getResourceValue("CannotDeleteLastUserPermissionSet"));
175
- }
176
- else {
177
- this.utilityService.notifySuccessMessage();
178
- }
179
- this.deleteUserId = 0;
180
- this.modalService.dismissAll();
181
- let element = this.input;
182
- element.ReinitializePaging();
183
- }, (error) => {
184
- });
170
+ ngOnDestroy() {
171
+ this.requestHandlerService.destroyHandler();
185
172
  }
186
173
  }
187
- PermissionSetInfoComponent.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "12.2.13", ngImport: i0, type: PermissionSetInfoComponent, deps: [{ token: i1.PageInfoService }, { token: i2.UtilityService }, { token: i2.BBSFTranslateService }, { token: i2.EnvironmentService }, { token: i3.ActivatedRoute }, { token: i4.DataSecretService }, { token: i2.AuthService }, { token: i5.PermissionSetService }, { token: i6.NgbModal }], target: i0.ɵɵFactoryTarget.Component });
188
- PermissionSetInfoComponent.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "12.0.0", version: "12.2.13", type: PermissionSetInfoComponent, selector: "lib-permission-set-info", viewQueries: [{ propertyName: "input", first: true, predicate: ["UserPermissionSetPagingViewElement"], descendants: true }, { propertyName: "CloseAddUsersToPermissionSet", first: true, predicate: ["CloseAddUsersToPermissionSet"], descendants: true }, { propertyName: "CloseDeleteUserFromPermissionSetModal", first: true, predicate: ["CloseDeleteUserFromPermissionSetModal"], descendants: true }], ngImport: i0, template: "<block-ui></block-ui>\r\n <!-- Page Content -->\r\n <div *ngIf=\"ShowPageContent\" class=\"container-fluid\">\r\n <div class=\"card card-custom-h\">\r\n <div class=\"card-header border-0 pt-5\">\r\n <div class=\"card-title align-items-start flex-column\" *ngIf=\"IsFilterLoaded\">\r\n <form [formGroup]=\"UserPermissionSetForm\">\r\n <BBSF-TextBox [options]=\"searchTextBox\" [group]=\"UserPermissionSetForm\"></BBSF-TextBox>\r\n <BBSF-TextBox [hidden]=\"true\" [options]=\"PermissionSetIdTextBox\" [group]=\"UserPermissionSetForm\"></BBSF-TextBox>\r\n </form>\r\n </div>\r\n <div class=\"card-toolbar\">\r\n <!-- begin::Menu -->\r\n\r\n <button type=\"button\" class=\"btn btn-sm btn-primary\" title=\"Add\" (click)=\"showAddUserToPermissionSetModal(AddUserToPermissionSetModal)\">\r\n <i class=\"fas fa-plus me-1\"></i>\r\n {{utilityService.getResourceValue(\"Add\")}}\r\n </button>\r\n\r\n <!-- end::Menu -->\r\n </div>\r\n </div>\r\n <div class=\"card-body py-3\">\r\n <div class=\"table-responsive\">\r\n\r\n <!--begin::Permission list-->\r\n <table class=\"table align-middle table-row-dashed fs-6 gy-5 dataTable no-footer\">\r\n <thead>\r\n <tr class=\"text-start text-gray-400 fw-bolder fs-7 text-uppercase gs-0\">\r\n <th class=\"min-w-150px\">{{utilityService.getResourceValue(\"Name\")}}</th>\r\n <th class=\"min-w-150px\">{{utilityService.getResourceValue(\"Email\")}}</th>\r\n <th class=\"min-w-150px\">{{utilityService.getResourceValue(\"Roles\")}}</th>\r\n <th class=\"min-w-50px\">{{utilityService.getResourceValue(\"Action\")}}</th>\r\n </tr>\r\n </thead>\r\n <tbody id=\"listingContainer\" class=\"fw-bold text-gray-600 border-0\">\r\n\r\n <tr *ngFor=\"let user of UserPermissionSetPagingResult\">\r\n\r\n <td>\r\n <a *ngIf=\"language=='en'\" href=\"javascript:void(0)\"\r\n class=\"text-dark\">{{user.name.english}}</a>\r\n <a *ngIf=\"language=='ar'\" href=\"javascript:void(0)\"\r\n class=\"text-dark\">{{user.name.arabic}}</a>\r\n </td>\r\n <td>{{user.email}}</td>\r\n <td>{{user.userPermsets}}</td>\r\n <td>\r\n <div>\r\n <button mat-button [matMenuTriggerFor]=\"menu\" class=\"btn btn-sm btn-icon btn-light btn-active-light-primary\">\r\n <i class=\"fa fa-ellipsis-h\" aria-hidden=\"true\"></i>\r\n </button>\r\n <mat-menu #menu=\"matMenu\">\r\n <a ngbDropdownItem class=\"drop-item px-3\"\r\n (click)=\"showDeleteUserFromPermissionSetModal(user,deleteUserPermissionSetModal)\">\r\n <span class=\"drop-link px-3\">{{utilityService.getResourceValue(\"Delete\")}}</span>\r\n </a>\r\n </mat-menu>\r\n </div>\r\n </td>\r\n </tr>\r\n <tr *ngIf=\"UserPermissionSetPagingResult.length == 0\">\r\n <td colspan=\"4\">\r\n <lib-empty-data></lib-empty-data>\r\n </td>\r\n </tr>\r\n </tbody>\r\n </table>\r\n\r\n <!--end::Permission list-->\r\n </div>\r\n\r\n </div>\r\n <div class=\"card-footer border-0\">\r\n <BBSF-Paging (Items)=\"setUserPermissionSetListResult($event)\" *ngIf=\"IsFilterLoaded\"\r\n [options]=\"UserPermissionSetPaging\" [group]=\"UserPermissionSetForm\" #UserPermissionSetPagingViewElement>\r\n </BBSF-Paging>\r\n </div>\r\n </div>\r\n\r\n </div>\r\n\r\n\r\n <!-- Add Modal -->\r\n <ng-template #AddUserToPermissionSetModal let-modal>\r\n <div class=\"modal-header pb-0 border-0 justify-content-end\">\r\n <h5 class=\"modal-title\" id=\"exampleModalLabel\"></h5>\r\n <button type=\"button\" data-dismiss=\"modal\" aria-label=\"Close\" (click)=\"modal.dismiss()\" class=\"btn btn-sm btn-icon btn-active-color-primary\">\r\n <span class=\"svg-icon svg-icon-1\">\r\n <span [inlineSVG]=\"'./src/assets/images/arr061.svg'\"></span>\r\n </span>\r\n </button>\r\n </div>\r\n <div class=\"modal-body scroll-y px-10 px-lg-15 pt-0 pb-15\">\r\n <div class=\"mb-13 text-center\">\r\n <h1 class=\"mb-3\">{{utilityService.getResourceValue(\"AddUser\")}}</h1>\r\n </div>\r\n <form [formGroup]=\"AddUsersToPermissionSetForm\" (ngSubmit)=\"addUserToPermissionSet()\">\r\n <BBSF-TagsInput [options]=\"UserAutoComplete\" [group]=\"AddUsersToPermissionSetForm\">\r\n </BBSF-TagsInput>\r\n <div class=\"text-center pt-7\">\r\n <button type=\"button\" #CloseAddUsersToPermissionSet id=\"CloseAddUsersToPermissionSet\" data-dismiss=\"modal\" aria-label=\"Close\" class=\"btn btn-light me-3 btn-sm\" (click)=\"modal.dismiss()\">{{utilityService.getResourceValue(\"CancelLabel\")}} </button>\r\n <button type=\"submit\" class=\"btn btn-primary btn-sm\">{{utilityService.getResourceValue(\"SaveLabel\")}}</button>\r\n </div>\r\n </form>\r\n\r\n </div>\r\n </ng-template>\r\n\r\n\r\n <!-- Delete Modal -->\r\n <ng-template #deleteUserPermissionSetModal let-modal>\r\n <div class=\"modal-header pb-0 border-0 justify-content-end\">\r\n <h5 class=\"modal-title\" id=\"exampleModalLabel\"></h5>\r\n <button type=\"button\" data-dismiss=\"modal\" aria-label=\"Close\" class=\"btn btn-sm btn-icon btn-active-color-primary\" (click)=\"modal.dismiss()\">\r\n <span class=\"svg-icon svg-icon-1\">\r\n <span [inlineSVG]=\"'./src/assets/images/arr061.svg'\"></span>\r\n </span>\r\n </button>\r\n </div>\r\n <div class=\"modal-body scroll-y px-10 px-lg-15 pt-0 pb-15\">\r\n <div class=\"mb-13 text-center\">\r\n <h1 class=\"mb-3\">{{utilityService.getResourceValue(\"Delete\")}} {{utilityService.getResourceValue(\"User\")}}</h1>\r\n </div>\r\n <div class=\"notice d-flex bg-light-danger rounded border-danger border border-dashed mb-10 p-6\">\r\n <span class=\"svg-icon svg-icon-2tx svg-icon-danger me-4\">\r\n <span [inlineSVG]=\"'./src/assets/images/gen044.svg'\"></span>\r\n </span>\r\n\r\n <div class=\"d-flex flex-stack flex-grow-1\">\r\n <div class=\"fw-bold\">\r\n <div class=\"fs-6 text-gray-700\">\r\n {{utilityService.getResourceValue(\"Delete_Question\")}}\r\n </div>\r\n </div>\r\n </div>\r\n </div>\r\n <div class=\"text-center pt-7\">\r\n <button #CloseDeleteUserFromPermissionSetModal id=\"CloseDeleteUserFromPermissionSetModal\" type=\"button\"\r\n class=\"btn btn-light btn-sm me-3 \" data-dismiss=\"modal\" (click)=\"modal.dismiss()\">\r\n {{utilityService.getResourceValue(\"CancelLabel\")}}\r\n </button>\r\n <button type=\"button\" (click)=\"deleteUserFromPermissionSet()\"\r\n class=\"btn btn-light-danger btn-sm \">\r\n {{utilityService.getResourceValue(\"Delete\")}}\r\n </button>\r\n </div>\r\n </div>\r\n </ng-template>\r\n\r\n\r\n\r\n", components: [{ type: i7.BlockUIComponent, selector: "block-ui", inputs: ["name", "template", "message", "delayStart", "delayStop"] }, { type: i8.ɵd, selector: "BBSF-TextBox", inputs: ["group", "options"], outputs: ["OnChange"] }, { type: i9.MatMenu, selector: "mat-menu", exportAs: ["matMenu"] }, { type: i10.EmptyDataComponent, selector: "lib-empty-data", inputs: ["Message", "ShowImage", "ImgURL"] }, { type: i8.ɵs, selector: "BBSF-Paging", inputs: ["options", "group"], outputs: ["Items"] }, { type: i8r, selector: "BBSF-TagsInput", inputs: ["group", "options"], outputs: ["OnChange"] }], directives: [{ type: i11.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { type: i12NgNoValidate, selector: "form:not([ngNoForm]):not([ngNativeValidate])" }, { type: i12.NgControlStatusGroup, selector: "[formGroupName],[formArrayName],[ngModelGroup],[formGroup],form:not([ngNoForm]),[ngForm]" }, { type: i12.FormGroupDirective, selector: "[formGroup]", inputs: ["formGroup"], outputs: ["ngSubmit"], exportAs: ["ngForm"] }, { type: i11.NgForOf, selector: "[ngFor][ngForOf]", inputs: ["ngForOf", "ngForTrackBy", "ngForTemplate"] }, { type: i9.MatMenuTrigger, selector: "[mat-menu-trigger-for], [matMenuTriggerFor]", inputs: ["matMenuTriggerRestoreFocus", "mat-menu-trigger-for", "matMenuTriggerFor", "matMenuTriggerData"], outputs: ["menuOpened", "onMenuOpen", "menuClosed", "onMenuClose"], exportAs: ["matMenuTrigger"] }, { type: i6.NgbDropdownItem, selector: "[ngbDropdownItem]", inputs: ["disabled"] }, { type: i13.InlineSVGDirective, selector: "[inlineSVG]", inputs: ["resolveSVGUrl", "replaceContents", "prepend", "injectComponent", "cacheSVG", "forceEvalStyles", "evalScripts", "inlineSVG", "setSVGAttributes", "removeSVGAttributes", "fallbackImgUrl", "onSVGLoaded"], outputs: ["onSVGInserted", "onSVGFailed"] }] });
174
+ PermissionSetInfoComponent.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "12.2.13", ngImport: i0, type: PermissionSetInfoComponent, deps: [{ token: i1.PageInfoService }, { token: i2.UtilityService }, { token: i3.ActivatedRoute }, { token: i2.AuthService }, { token: i4.PermissionSetService }, { token: i5.NgbModal }, { token: i2.RequestHandlerService }], target: i0.ɵɵFactoryTarget.Component });
175
+ PermissionSetInfoComponent.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "12.0.0", version: "12.2.13", type: PermissionSetInfoComponent, selector: "lib-permission-set-info", viewQueries: [{ propertyName: "pagingElement", first: true, predicate: ["UserPermissionSetPagingViewElement"], descendants: true }, { propertyName: "ConfirmationModalControl", first: true, predicate: ["ConfirmationModalControl"], descendants: true }], ngImport: i0, template: "\r\n<block-ui></block-ui>\r\n<!-- Page Content -->\r\n<div class=\"container-fluid\">\r\n <div class=\"card card-custom-h\">\r\n <div class=\"card-header border-0 pt-5\">\r\n <div class=\"card-title align-items-start flex-column\" *ngIf=\"isFilterLoaded\">\r\n <BBSF-TextBox [options]=\"searchTextBox\" (OnChange)=\"filterUserList($event)\" [group]=\"userPermissionSetForm\"></BBSF-TextBox>\r\n <BBSF-TextBox [hidden]=\"true\" [options]=\"permissionSetIdTextBox\" [group]=\"userPermissionSetForm\"></BBSF-TextBox>\r\n </div>\r\n <div class=\"card-toolbar\">\r\n <!-- begin::Menu -->\r\n <button type=\"button\" class=\"btn btn-sm btn-primary\" title=\"Add\" (click)=\"showAddUserToPermissionSetModal(AddUserToPermissionSetModal)\">\r\n <i class=\"fas fa-plus me-1\"></i>\r\n {{utilityService.getResourceValue(\"Add\")}}\r\n </button>\r\n\r\n <!-- end::Menu -->\r\n </div>\r\n </div>\r\n <div class=\"card-body py-3\">\r\n <div class=\"table-responsive\">\r\n <!--begin::Permission list-->\r\n <table class=\"table align-middle table-row-dashed fs-6 gy-5 dataTable no-footer\">\r\n <thead>\r\n <tr class=\"text-start text-gray-400 fw-bolder fs-7 text-uppercase gs-0\">\r\n\r\n <th class=\"min-w-150px\">{{utilityService.getResourceValue(\"Name\")}}</th>\r\n <th class=\"min-w-150px\">{{utilityService.getResourceValue(\"Email\")}}</th>\r\n <th class=\"min-w-150px\">{{utilityService.getResourceValue(\"Roles\")}}</th>\r\n <th class=\"min-w-50px\">{{utilityService.getResourceValue(\"Action\")}}</th>\r\n </tr>\r\n </thead>\r\n <tbody id=\"listingContainer\" class=\"fw-bold text-gray-600 border-0\">\r\n\r\n <tr *ngFor=\"let user of filteredUserPermissionSetPagingResult\">\r\n\r\n <td>\r\n <span class=\"text-dark\">{{user.userName}}</span>\r\n </td>\r\n <td>{{user.email}}</td>\r\n <td>{{user.userPermsets}}</td>\r\n <td>\r\n <div>\r\n <button mat-button [matMenuTriggerFor]=\"menu\" class=\"btn btn-sm btn-icon btn-light btn-active-light-primary\">\r\n <i class=\"fa fa-ellipsis-h\" aria-hidden=\"true\"></i>\r\n </button>\r\n <mat-menu #menu=\"matMenu\">\r\n <a ngbDropdownItem class=\"drop-item px-3\"\r\n (click)=\"showDeleteUserFromPermissionSetModal(user.idEncrypted)\">\r\n <span class=\"drop-link px-3\">{{utilityService.getResourceValue(\"Delete\")}}</span>\r\n </a>\r\n </mat-menu>\r\n </div>\r\n </td>\r\n </tr>\r\n <tr *ngIf=\"filteredUserPermissionSetPagingResult.length == 0\">\r\n <td colspan=\"4\">\r\n <lib-empty-data></lib-empty-data>\r\n </td>\r\n </tr>\r\n </tbody>\r\n </table>\r\n\r\n <!--end::Permission list-->\r\n </div>\r\n\r\n </div>\r\n <div class=\"card-footer border-0\">\r\n <BBSF-Paging (Items)=\"setUserPermissionSetListResult($event)\" *ngIf=\"isFilterLoaded\"\r\n [options]=\"userPermissionSetPaging\" [group]=\"userPermissionSetForm\" #UserPermissionSetPagingViewElement>\r\n </BBSF-Paging>\r\n </div>\r\n </div>\r\n\r\n</div>\r\n\r\n<!--add Modal-->\r\n<ng-template #AddUserToPermissionSetModal let-modal>\r\n <div class=\"modal-header pb-0 border-0 justify-content-end\">\r\n <h5 class=\"modal-title\" id=\"exampleModalLabel\"></h5>\r\n <button type=\"button\" data-dismiss=\"modal\" aria-label=\"Close\" class=\"btn btn-sm btn-icon btn-active-color-primary\"\r\n (click)=\"modal.dismiss()\">\r\n <span class=\"svg-icon svg-icon-1\">\r\n <span [inlineSVG]=\"'./src/assets/images/arr061.svg'\"></span>\r\n </span>\r\n </button>\r\n </div>\r\n <div class=\"modal-body scroll-y px-10 px-lg-15 pt-0 pb-15\">\r\n <div class=\"mb-13 text-center\">\r\n <h1 class=\"mb-3\"> {{utilityService.getResourceValue(\"Add\")}} {{utilityService.getResourceValue(\"User\")}} </h1>\r\n </div>\r\n <BBSF-Form [options]=\"addUsersToPermissionSetFormOptions\">\r\n <div class=\"row\">\r\n <div class=\"col-md-12\">\r\n <BBSF-TagsInput [options]=\"userAutoComplete\" [group]=\"addUsersToPermissionSetForm\">\r\n </BBSF-TagsInput>\r\n </div>\r\n </div>\r\n <div class=\"text-center pt-7\">\r\n <button #CloseAddUsersToDepartment id=\"CloseAddUsersToDepartment\" type=\"button\"\r\n class=\"btn btn-light btn-sm me-3\" data-dismiss=\"modal\" (click)=\"modal.dismiss()\">\r\n {{utilityService.getResourceValue(\"CancelLabel\")}}\r\n </button>\r\n <button type=\"submit\" class=\"btn btn-primary btn-sm\">{{utilityService.getResourceValue(\"SaveLabel\")}}</button>\r\n </div>\r\n </BBSF-Form>\r\n </div>\r\n</ng-template>\r\n\r\n<!--delete Modal-->\r\n<BBSF-ConfirmationModal *ngIf=\"deleteControlLoaded\" [options]=\"deleteConfirmationOptions\" id=\"ConfirmationModalControl\"\r\n #ConfirmationModalControl></BBSF-ConfirmationModal>\r\n\r\n\r\n\r\n\r\n", components: [{ type: i6.BlockUIComponent, selector: "block-ui", inputs: ["name", "template", "message", "delayStart", "delayStop"] }, { type: i7.ɵd, selector: "BBSF-TextBox", inputs: ["group", "options"], outputs: ["OnChange"] }, { type: i8.MatMenu, selector: "mat-menu", exportAs: ["matMenu"] }, { type: i9.EmptyDataComponent, selector: "lib-empty-data", inputs: ["Message", "ShowImage", "ImgURL"] }, { type: i7.ɵs, selector: "BBSF-Paging", inputs: ["options", "group"], outputs: ["Items"] }, { type: i7v, selector: "BBSF-Form", inputs: ["options"] }, { type: i7.ɵr, selector: "BBSF-TagsInput", inputs: ["group", "options"], outputs: ["OnChange"] }, { type: i7w, selector: "BBSF-ConfirmationModal", inputs: ["options"] }], directives: [{ type: i10.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { type: i10.NgForOf, selector: "[ngFor][ngForOf]", inputs: ["ngForOf", "ngForTrackBy", "ngForTemplate"] }, { type: i8.MatMenuTrigger, selector: "[mat-menu-trigger-for], [matMenuTriggerFor]", inputs: ["matMenuTriggerRestoreFocus", "mat-menu-trigger-for", "matMenuTriggerFor", "matMenuTriggerData"], outputs: ["menuOpened", "onMenuOpen", "menuClosed", "onMenuClose"], exportAs: ["matMenuTrigger"] }, { type: i5.NgbDropdownItem, selector: "[ngbDropdownItem]", inputs: ["disabled"] }, { type: i11.InlineSVGDirective, selector: "[inlineSVG]", inputs: ["resolveSVGUrl", "replaceContents", "prepend", "injectComponent", "cacheSVG", "forceEvalStyles", "evalScripts", "inlineSVG", "setSVGAttributes", "removeSVGAttributes", "fallbackImgUrl", "onSVGLoaded"], outputs: ["onSVGInserted", "onSVGFailed"] }] });
189
176
  i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "12.2.13", ngImport: i0, type: PermissionSetInfoComponent, decorators: [{
190
177
  type: Component,
191
178
  args: [{
192
179
  selector: 'lib-permission-set-info',
193
180
  templateUrl: './permission-set-info.component.html'
194
181
  }]
195
- }], ctorParameters: function () { return [{ type: i1.PageInfoService }, { type: i2.UtilityService }, { type: i2.BBSFTranslateService }, { type: i2.EnvironmentService }, { type: i3.ActivatedRoute }, { type: i4.DataSecretService }, { type: i2.AuthService }, { type: i5.PermissionSetService }, { type: i6.NgbModal }]; }, propDecorators: { input: [{
182
+ }], ctorParameters: function () { return [{ type: i1.PageInfoService }, { type: i2.UtilityService }, { type: i3.ActivatedRoute }, { type: i2.AuthService }, { type: i4.PermissionSetService }, { type: i5.NgbModal }, { type: i2.RequestHandlerService }]; }, propDecorators: { pagingElement: [{
196
183
  type: ViewChild,
197
184
  args: ['UserPermissionSetPagingViewElement', { static: false }]
198
- }], CloseAddUsersToPermissionSet: [{
199
- type: ViewChild,
200
- args: ['CloseAddUsersToPermissionSet', { static: false }]
201
- }], CloseDeleteUserFromPermissionSetModal: [{
185
+ }], ConfirmationModalControl: [{
202
186
  type: ViewChild,
203
- args: ['CloseDeleteUserFromPermissionSetModal', { static: false }]
187
+ args: ['ConfirmationModalControl', { static: false }]
204
188
  }] } });
205
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicGVybWlzc2lvbi1zZXQtaW5mby5jb21wb25lbnQuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy9iYnNmLWFkbWluLXBvcnRhbC9zcmMvbGliL1BhZ2VzL3JvbGVzL3Blcm1pc3Npb24tc2V0LWluZm8vcGVybWlzc2lvbi1zZXQtaW5mby5jb21wb25lbnQudHMiLCIuLi8uLi8uLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy9iYnNmLWFkbWluLXBvcnRhbC9zcmMvbGliL1BhZ2VzL3JvbGVzL3Blcm1pc3Npb24tc2V0LWluZm8vcGVybWlzc2lvbi1zZXQtaW5mby5jb21wb25lbnQuaHRtbCJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiO0FBQUEsT0FBTyxFQUFFLFNBQVMsRUFBc0IsU0FBUyxFQUFFLE1BQU0sZUFBZSxDQUFDO0FBQ3pFLE9BQU8sRUFBRSxTQUFTLEVBQUUsTUFBTSxnQkFBZ0IsQ0FBQztBQUUzQyxPQUFPLEVBQUcsVUFBVSxFQUFFLFVBQVUsRUFBRSxTQUFTLEVBQUUsYUFBYSxFQUFFLGdCQUFnQixFQUFFLGNBQWMsRUFBRSxNQUFNLHlCQUF5QixDQUFDO0FBQzlILE9BQU8sRUFBRSxlQUFlLEVBQUUsTUFBTSxvREFBb0QsQ0FBQztBQUNyRixPQUFPLEVBQUUsZ0NBQWdDLEVBQUUsTUFBTSx3RUFBd0UsQ0FBQzs7Ozs7Ozs7Ozs7Ozs7O0FBVTFILE1BQU0sT0FBTywwQkFBMEI7SUFrQ3JDLFlBQW9CLGVBQStCLEVBQVMsY0FBNkIsRUFBUyxvQkFBeUMsRUFBUyxrQkFBcUMsRUFBUyxjQUE4QixFQUFVLFlBQStCLEVBQVUsV0FBd0IsRUFBVSxvQkFBMEMsRUFBVSxZQUFzQjtRQUEzVyxvQkFBZSxHQUFmLGVBQWUsQ0FBZ0I7UUFBUyxtQkFBYyxHQUFkLGNBQWMsQ0FBZTtRQUFTLHlCQUFvQixHQUFwQixvQkFBb0IsQ0FBcUI7UUFBUyx1QkFBa0IsR0FBbEIsa0JBQWtCLENBQW1CO1FBQVMs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RyxDQUFDLENBQUM7WUFDdEIsSUFBSSxDQUFDLFlBQVksQ0FBQyxVQUFVLEVBQUUsQ0FBQztZQUMvQixJQUFJLE9BQU8sR0FBRyxJQUFJLENBQUMsS0FBWSxDQUFDO1lBQ2hDLE9BQU8sQ0FBQyxrQkFBa0IsRUFBRSxDQUFDO1FBQy9CLENBQUMsRUFBRSxDQUFDLEtBQUssRUFBRSxFQUFFO1FBRWIsQ0FBQyxDQUFDLENBQUE7SUFDSixDQUFDOzt3SEFoTVUsMEJBQTBCOzRHQUExQiwwQkFBMEIsNGNDZnZDLGkxT0F3SkE7NEZEeklhLDBCQUEwQjtrQkFKdEMsU0FBUzttQkFBQztvQkFDVCxRQUFRLEVBQUUseUJBQXlCO29CQUNuQyxXQUFXLEVBQUUsc0NBQXNDO2lCQUNwRDt3VkFxQnFFLEtBQUs7c0JBQXhFLFNBQVM7dUJBQUMsb0NBQW9DLEVBQUUsRUFBRSxNQUFNLEVBQUUsS0FBSyxFQUFFO2dCQU9KLDRCQUE0QjtzQkFBekYsU0FBUzt1QkFBQyw4QkFBOEIsRUFBRSxFQUFFLE1BQU0sRUFBRSxLQUFLLEVBQUU7Z0JBS1cscUNBQXFDO3NCQUEzRyxTQUFTO3VCQUFDLHVDQUF1QyxFQUFFLEVBQUUsTUFBTSxFQUFFLEtBQUssRUFBRSIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IENvbXBvbmVudCwgRWxlbWVudFJlZiwgT25Jbml0LCBWaWV3Q2hpbGQgfSBmcm9tICdAYW5ndWxhci9jb3JlJztcclxuaW1wb3J0IHsgRm9ybUdyb3VwIH0gZnJvbSAnQGFuZ3VsYXIvZm9ybXMnO1xyXG5pbXBvcnQgeyBBY3RpdmF0ZWRSb3V0ZSB9IGZyb20gJ0Bhbmd1bGFyL3JvdXRlcic7XHJcbmltcG9ydCB7ICBGaWx0ZXJJdGVtLCBGaWx0ZXJUeXBlLCBJbnB1dFR5cGUsIFBhZ2luZ09wdGlvbnMsIFRhZ3NJbnB1dE9wdGlvbnMsIFRleHRCb3hPcHRpb25zIH0gZnJvbSAnQGJuc2lnaHRzL2Jic2YtY29udHJvbHMnO1xyXG5pbXBvcnQgeyBQYWdlSW5mb1NlcnZpY2UgfSBmcm9tICcuLi8uLi8uLi9fbWV0cm9uaWMvY29yZS9zZXJ2aWNlcy9wYWdlLWluZm8uc2VydmljZSc7XHJcbmltcG9ydCB7IFBlcm1pc3Npb25TZXRVc2Vyc0lEUmVxdWVzdE1vZGVsIH0gZnJvbSAnLi4vLi4vc2hhcmVkL21vZGVscy9QZXJtaXNzaW9uc01vZGVscy9QZXJtaXNzaW9uU2V0VXNlcnNJRFJlcXVlc3RNb2RlbCc7XHJcbmltcG9ydCB7IERhdGFTZWNyZXRTZXJ2aWNlIH0gZnJvbSAnLi4vLi4vc2hhcmVkL1NlcnZpY2VzL2RhdGEuc2VydmljZSc7XHJcbmltcG9ydCB7IFBlcm1pc3Npb25TZXRTZXJ2aWNlIH0gZnJvbSAnLi4vLi4vc2hhcmVkL1NlcnZpY2VzL1Blcm1pc3Npb25TZXRTZXJ2aWNlLnNlcnZpY2UnO1xyXG5pbXBvcnQgeyBOZ2JNb2RhbCwgTW9kYWxEaXNtaXNzUmVhc29ucyB9IGZyb20gJ0BuZy1ib290c3RyYXAvbmctYm9vdHN0cmFwJztcclxuaW1wb3J0IHsgQXV0aFNlcnZpY2UsIFV0aWxpdHlTZXJ2aWNlLCBCQlNGVHJhbnNsYXRlU2VydmljZSwgRW52aXJvbm1lbnRTZXJ2aWNlIH0gZnJvbSAnQGJuc2lnaHRzL2Jic2YtdXRpbGl0aWVzJztcclxuXHJcbkBDb21wb25lbnQoe1xyXG4gIHNlbGVjdG9yOiAnbGliLXBlcm1pc3Npb24tc2V0LWluZm8nLFxyXG4gIHRlbXBsYXRlVXJsOiAnLi9wZXJtaXNzaW9uLXNldC1pbmZvLmNvbXBvbmVudC5odG1sJ1xyXG59KVxyXG5leHBvcnQgY2xhc3MgUGVybWlzc2lvblNldEluZm9Db21wb25lbnQgaW1wbGVtZW50cyBPbkluaXQge1xyXG5cclxuICBBcGlVcmwgPSBcIi9hcGkvYWRtaW4vUGVybWlzc2lvblNldHMvXCJcclxuICBTdWJoZWFkZXJUaXRsZSA9IFwiXCI7XHJcbiAgQnJlYWRjcnVtYlRpdGxlID0gdGhpcy51dGlsaXR5U2VydmljZS5nZXRSZXNvdXJjZVZhbHVlKCdQZXJtaXNzaW9uU2V0cycpO1xyXG4gIFVybDpzdHJpbmc9XCIvQWRtaW4vUm9sZXMvUGVybWlzc2lvblNldHNcIlxyXG4gIFNob3dUb29sYmFyID0gdHJ1ZTtcclxuICBTaG93YnJlYWRDcnVtYiA9IHRydWU7XHJcbiAgc2VhcmNoVGV4dEJveDogVGV4dEJveE9wdGlvbnM7XHJcbiAgUGVybWlzc2lvblNldElkVGV4dEJveDogVGV4dEJveE9wdGlvbnM7XHJcbiAgZmlsdGVyRm9ybSA9IG5ldyBGb3JtR3JvdXAoe30pO1xyXG4gIFVzZXJQZXJtaXNzaW9uU2V0Rm9ybSA9IG5ldyBGb3JtR3JvdXAoe30pO1xyXG4gIHNob3dGaWx0ZXI6IGJvb2xlYW4gPSBmYWxzZTtcclxuICBVc2VyUGVybWlzc2lvblNldFBhZ2luZ1Jlc3VsdDogYW55W10gPSBbXTtcclxuICBVc2VyUGVybWlzc2lvblNldFBhZ2luZzogUGFnaW5nT3B0aW9ucztcclxuICBUZXh0SW5wdXRGaWx0ZXI6IEZpbHRlckl0ZW07XHJcbiAgUGVybWlzc2lvblNldElkVGV4dElucHV0RmlsdGVyOiBGaWx0ZXJJdGVtO1xyXG4gIElzRmlsdGVyTG9hZGVkOiBib29sZWFuID0gZmFsc2U7XHJcbiAgUGVybWlzc2lvblNldElkOiBzdHJpbmcgPSBcIlwiXHJcbiAgUGFnZU5hbWU6c3RyaW5nPVwiXCJcclxuICBAVmlld0NoaWxkKCdVc2VyUGVybWlzc2lvblNldFBhZ2luZ1ZpZXdFbGVtZW50JywgeyBzdGF0aWM6IGZhbHNlIH0pIGlucHV0OiBFbGVtZW50UmVmO1xyXG4gIC8vIERlY29yYXRvciB3aXJlcyB1cCBibG9ja1VJIGluc3RhbmNlXHJcbiAgU2hvd1BhZ2VDb250ZW50OiBib29sZWFuID0gZmFsc2U7XHJcblxyXG4gIC8vQWRkIE1vZGVsIENvbnRyb2xzXHJcbiAgQWRkVXNlcnNUb1Blcm1pc3Npb25TZXRGb3JtID0gbmV3IEZvcm1Hcm91cCh7fSk7XHJcbiAgVXNlckF1dG9Db21wbGV0ZTogVGFnc0lucHV0T3B0aW9ucztcclxuICBAVmlld0NoaWxkKCdDbG9zZUFkZFVzZXJzVG9QZXJtaXNzaW9uU2V0JywgeyBzdGF0aWM6IGZhbHNlIH0pIENsb3NlQWRkVXNlcnNUb1Blcm1pc3Npb25TZXQ6IEVsZW1lbnRSZWY7XHJcbiAgbGFuZ3VhZ2U6c3RyaW5nPVwiXCJcclxuXHJcbiAgLy9kZWxldGUgIE1vZGVsIENvbnRyb2xzXHJcbiAgZGVsZXRlVXNlcklkOiBudW1iZXI7XHJcbiAgQFZpZXdDaGlsZCgnQ2xvc2VEZWxldGVVc2VyRnJvbVBlcm1pc3Npb25TZXRNb2RhbCcsIHsgc3RhdGljOiBmYWxzZSB9KSBDbG9zZURlbGV0ZVVzZXJGcm9tUGVybWlzc2lvblNldE1vZGFsOiBFbGVtZW50UmVmO1xyXG5cclxuICBjb25zdHJ1Y3Rvcihwcml2YXRlIHBhZ2VJbmZvU2VydmljZTpQYWdlSW5mb1NlcnZpY2UsIHB1YmxpYyB1dGlsaXR5U2VydmljZTpVdGlsaXR5U2VydmljZSxwcml2YXRlIGJic2ZUcmFuc2xhdGVTZXJ2aWNlOkJCU0ZUcmFuc2xhdGVTZXJ2aWNlLHByaXZhdGUgZW52aXJvbm1lbnRTZXJ2aWNlOkVudmlyb25tZW50U2VydmljZSxwcml2YXRlIGFjdGl2YXRlZFJvdXRlOiBBY3RpdmF0ZWRSb3V0ZSwgcHJpdmF0ZSBkYXRhU2VydmljZXM6IERhdGFTZWNyZXRTZXJ2aWNlLCBwcml2YXRlIGF1dGhTZXJ2aWNlOiBBdXRoU2VydmljZSwgcHJpdmF0ZSBQZXJtaXNzaW9uU2V0U2VydmljZTogUGVybWlzc2lvblNldFNlcnZpY2UsIHByaXZhdGUgbW9kYWxTZXJ2aWNlOiBOZ2JNb2RhbCkge1xyXG5cclxuICB9XHJcbiAgYXN5bmMgbmdPbkluaXQoKTogUHJvbWlzZTx2b2lkPiB7XHJcbiAgICB0aGlzLlNob3dQYWdlQ29udGVudD10cnVlO1xyXG4gICAgdmFyIFBlcm1pc3Npb25TZXROYW1lT2JqZWN0ID0gbG9jYWxTdG9yYWdlLmdldEl0ZW0oJ1Blcm1pc3Npb25TZXROYW1lJyk7XHJcbiAgICBsZXQgUGFnZU5hbWUgPSBKU09OLnBhcnNlKFBlcm1pc3Npb25TZXROYW1lT2JqZWN0KTtcclxuICAgICAvL2NvbnNvbGUubG9nKFBhZ2VOYW1lKTtcclxuICAgIHRoaXMuU3ViaGVhZGVyVGl0bGUgPSB0aGlzLmxhbmd1YWdlID09ICdlbicgPyBQYWdlTmFtZS5FbmdsaXNoIDogUGFnZU5hbWUuQXJhYmljOyAgICBcclxuICAgIFBhZ2VJbmZvU2VydmljZS5QYWdlVGl0bGU9dGhpcy5TdWJoZWFkZXJUaXRsZVxyXG4gICAgUGFnZUluZm9TZXJ2aWNlLlBhZ2VCcmVhZGNydW1icz1bXHJcbiAgICAgICB7dGl0bGU6IHRoaXMudXRpbGl0eVNlcnZpY2UuZ2V0UmVzb3VyY2VWYWx1ZShcIkhvbWVcIikgLCBwYXRoOiAnL0FkbWluL0hvbWUnLCBpc1NlcGFyYXRvcjogZmFsc2UsIGlzQWN0aXZlOiBmYWxzZX0sXHJcbiAgICAgICB7dGl0bGU6ICcnLCBwYXRoOiAnJywgaXNTZXBhcmF0b3I6IHRydWUsIGlzQWN0aXZlOiBmYWxzZX0sXHJcbiAgICAgICB7dGl0bGU6IHRoaXMudXRpbGl0eVNlcnZpY2UuZ2V0UmVzb3VyY2VWYWx1ZShcIlBlcm1pc3Npb25TZXRzXCIpLCBwYXRoOiAnL0FkbWluL1JvbGVzL1Blcm1pc3Npb25TZXRzJywgaXNTZXBhcmF0b3I6IGZhbHNlLCBpc0FjdGl2ZTogZmFsc2V9LFxyXG4gICAgICAge3RpdGxlOiAnJywgcGF0aDogJycsIGlzU2VwYXJhdG9yOiB0cnVlLCBpc0FjdGl2ZTogZmFsc2V9XHJcblxyXG4gICAgXTtcclxuXHJcbiAgICB0aGlzLnBhZ2VJbmZvU2VydmljZS5jYWxjdWxhdGVUaXRsZSgpO1xyXG4gICAgdGhpcy5wYWdlSW5mb1NlcnZpY2UuY2FsY3VsYXRlQnJlYWRjcnVtYnMoKTtcclxuICAgIHRoaXMuYmJzZlRyYW5zbGF0ZVNlcnZpY2Uub25MYW5nQ2hhbmdlLnN1YnNjcmliZSgoZXZlbnQpPT57XHJcbiAgICAgIHRoaXMuU2hvd1BhZ2VDb250ZW50PWZhbHNlO1xyXG4gICAgICB0aGlzLmxhbmd1YWdlID0gZXZlbnQubGFuZztcclxuICAgICAgdGhpcy5uZ09uSW5pdCgpO1xyXG4gICAgfSlcclxuICAgIHRoaXMubGFuZ3VhZ2UgPSAgYXdhaXQgdGhpcy51dGlsaXR5U2VydmljZS5nZXRDdXJyZW50TGFuZ3VhZ2UoKTtcclxuICAgIHRoaXMuYWN0aXZhdGVkUm91dGUucGFyYW1zLnN1YnNjcmliZShwYXJhbXMgPT4ge1xyXG4gICAgICB0aGlzLlBlcm1pc3Npb25TZXRJZCA9IHBhcmFtc1snaWQnXTtcclxuICAgICAgdGhpcy5Mb2FkVXNlckxpc3QoKTtcclxuICAgIH0pO1xyXG4gIH1cclxuXHJcbiBcclxuICBSZWluaXRpYWxpemVVc2VyUGVybWlzc2lvblNldFBhZ2luZygpIHtcclxuICAgIGxldCBlbGVtZW50ID0gdGhpcy5pbnB1dCBhcyBhbnk7XHJcbiAgICBlbGVtZW50LlJlaW5pdGlhbGl6ZVBhZ2luZygpO1xyXG4gIH1cclxuXHJcbiAgVXBkYXRlVXNlclBlcm1pc3Npb25TZXRQYWdpbmcoKSB7XHJcbiAgICBsZXQgZWxlbWVudCA9IHRoaXMuaW5wdXQgYXMgYW55O1xyXG4gICAgZWxlbWVudC5VcGRhdGVQYWdpbmcoKTtcclxuICB9XHJcblxyXG4gIHNldFVzZXJQZXJtaXNzaW9uU2V0TGlzdFJlc3VsdChyZXN1bHQpIHtcclxuICAgIHRoaXMuVXNlclBlcm1pc3Npb25TZXRQYWdpbmdSZXN1bHQgPSByZXN1bHQ7XHJcbiAgICB0aGlzLlNob3dQYWdlQ29udGVudCA9IHRydWU7XHJcbiAgfVxyXG5cclxuICByZXNldEZpbHRlcnMoKSB7XHJcbiAgICB0aGlzLlVzZXJQZXJtaXNzaW9uU2V0Rm9ybS5jb250cm9sc1tcInNlYXJjaFRleHRCb3hcIl0uc2V0VmFsdWUobnVsbCk7XHJcbiAgICBsZXQgZWxlbWVudCA9IHRoaXMuaW5wdXQgYXMgYW55O1xyXG4gICAgZWxlbWVudC5SZWluaXRpYWxpemVQYWdpbmcoKTtcclxuICB9XHJcblxyXG4gIExvYWRVc2VyTGlzdCgpIHtcclxuICAgIC8vIFRleHRCb3ggaW50aVxyXG4gICAgdGhpcy51dGlsaXR5U2VydmljZS5zdGFydEJsb2NrVUkoKVxyXG4gICAgdGhpcy5zZWFyY2hUZXh0Qm94ID0gbmV3IFRleHRCb3hPcHRpb25zKCk7XHJcbiAgICB0aGlzLnNlYXJjaFRleHRCb3guTmFtZSA9IFwic2VhcmNoVGV4dEJveFwiXHJcbiAgICB0aGlzLnNlYXJjaFRleHRCb3guSGlkZUxhYmVsID0gdHJ1ZVxyXG4gICAgdGhpcy5zZWFyY2hUZXh0Qm94LlR5cGUgPSBJbnB1dFR5cGUuVGV4dFxyXG4gICAgdGhpcy5zZWFyY2hUZXh0Qm94LlBsYWNlaG9sZGVyID0gdGhpcy51dGlsaXR5U2VydmljZS5nZXRSZXNvdXJjZVZhbHVlKFwiU2VhcmNoQnlOYW1lT3JFbWFpbFwiKTtcclxuXHJcbiAgICB0aGlzLlBlcm1pc3Npb25TZXRJZFRleHRCb3ggPSBuZXcgVGV4dEJveE9wdGlvbnMoKTtcclxuICAgIHRoaXMuUGVybWlzc2lvblNldElkVGV4dEJveC5OYW1lID0gXCJQZXJtaXNzaW9uU2V0SWRUZXh0Qm94XCJcclxuICAgIHRoaXMuUGVybWlzc2lvblNldElkVGV4dEJveC5IaWRlTGFiZWwgPSB0cnVlXHJcbiAgICB0aGlzLlBlcm1pc3Npb25TZXRJZFRleHRCb3guVHlwZSA9IElucHV0VHlwZS5UZXh0XHJcbiAgICB0aGlzLlBlcm1pc3Npb25TZXRJZFRleHRCb3guVmFsdWUgPSB0aGlzLlBlcm1pc3Npb25TZXRJZDtcclxuICAgIHRoaXMuUGVybWlzc2lvblNldElkVGV4dEJveC5QbGFjZWhvbGRlciA9IHRoaXMudXRpbGl0eVNlcnZpY2UuZ2V0UmVzb3VyY2VWYWx1ZShcIlNlYXJjaEJ5TmFtZVwiKTtcclxuXHJcbiAgICB0aGlzLlRleHRJbnB1dEZpbHRlciA9IG5ldyBGaWx0ZXJJdGVtKCk7XHJcbiAgICB0aGlzLlRleHRJbnB1dEZpbHRlci5Gb3JtQ29udHJvbE5hbWUgPSBcInNlYXJjaFRleHRCb3hcIlxyXG4gICAgdGhpcy5UZXh0SW5wdXRGaWx0ZXIuQWN0aW9uUGFyYW1ldGVyTmFtZSA9IFwic2VhcmNoVGV4dFwiXHJcbiAgICB0aGlzLlRleHRJbnB1dEZpbHRlci5Jc0Zvcm1Db250cm9sID0gdHJ1ZVxyXG4gICAgdGhpcy5UZXh0SW5wdXRGaWx0ZXIuRmlsdGVyVHlwZSA9IEZpbHRlclR5cGUuVGV4dEJveFxyXG5cclxuICAgIHRoaXMuUGVybWlzc2lvblNldElkVGV4dElucHV0RmlsdGVyID0gbmV3IEZpbHRlckl0ZW0oKTtcclxuICAgIHRoaXMuUGVybWlzc2lvblNldElkVGV4dElucHV0RmlsdGVyLkZvcm1Db250cm9sTmFtZSA9IFwiUGVybWlzc2lvblNldElkVGV4dEJveFwiXHJcbiAgICB0aGlzLlBlcm1pc3Npb25TZXRJZFRleHRJbnB1dEZpbHRlci5BY3Rpb25QYXJhbWV0ZXJOYW1lID0gXCJwZXJtaXNzaW9uU2V0SWRcIlxyXG4gICAgdGhpcy5QZXJtaXNzaW9uU2V0SWRUZXh0SW5wdXRGaWx0ZXIuSXNGb3JtQ29udHJvbCA9IHRydWVcclxuICAgIHRoaXMuUGVybWlzc2lvblNldElkVGV4dElucHV0RmlsdGVyLkZpbHRlclR5cGUgPSBGaWx0ZXJUeXBlLlRleHRCb3hcclxuXHJcbiAgICB0aGlzLlVzZXJQZXJtaXNzaW9uU2V0UGFnaW5nID0gbmV3IFBhZ2luZ09wdGlvbnMoKTtcclxuICAgIHRoaXMuVXNlclBlcm1pc3Npb25TZXRQYWdpbmcuQWN0aW9uUG9zdFVSTCA9IHRoaXMuZW52aXJvbm1lbnRTZXJ2aWNlLmdldEFwaVVybCgpICsgdGhpcy5BcGlVcmwgKyAnR2V0VXNlcnNCeUZpbHRlcic7XHJcbiAgICB0aGlzLlVzZXJQZXJtaXNzaW9uU2V0UGFnaW5nLk9uS2V5UHJlc3NGaWx0ZXJzQ29udHJvbE5hbWVzID0gW1wic2VhcmNoVGV4dEJveFwiLCBcIlBlcm1pc3Npb25TZXRJZFRleHRCb3hcIl1cclxuICAgIHRoaXMuVXNlclBlcm1pc3Npb25TZXRQYWdpbmcuRmlsdGVycyA9IFt0aGlzLlRleHRJbnB1dEZpbHRlciwgdGhpcy5QZXJtaXNzaW9uU2V0SWRUZXh0SW5wdXRGaWx0ZXJdXHJcbiAgICB0aGlzLlVzZXJQZXJtaXNzaW9uU2V0UGFnaW5nLlZhbGlkYXRpb25Ub2tlbiA9IHRoaXMuYXV0aFNlcnZpY2UuYXV0aG9yaXphdGlvbkhlYWRlclZhbHVlKCk7XHJcbiAgICBzZXRUaW1lb3V0KCgpID0+IHtcclxuICAgICAgdGhpcy5Jc0ZpbHRlckxvYWRlZCA9IHRydWU7XHJcbiAgICAgIHRoaXMudXRpbGl0eVNlcnZpY2Uuc3RvcEJsb2NrVUkoKTtcclxuICAgIH0sIDEwKTtcclxuICB9XHJcblxyXG5cclxuXHJcbiAgc2hvd0FkZFVzZXJUb1Blcm1pc3Npb25TZXRNb2RhbChBZGRVc2VyVG9QZXJtaXNzaW9uU2V0TW9kYWwpIHtcclxuICAgIHRoaXMudXRpbGl0eVNlcnZpY2Uuc3RhcnRCbG9ja1VJKCk7XHJcbiAgICB0aGlzLkFkZFVzZXJzVG9QZXJtaXNzaW9uU2V0Rm9ybSA9IG5ldyBGb3JtR3JvdXAoe30pO1xyXG4gICAgdGhpcy5Vc2VyQXV0b0NvbXBsZXRlID0gbmV3IFRhZ3NJbnB1dE9wdGlvbnMoKTtcclxuICAgIHRoaXMuVXNlckF1dG9Db21wbGV0ZS5OYW1lID0gXCJVc2VyQXV0b0NvbXBsZXRlXCI7XHJcbiAgICB0aGlzLlVzZXJBdXRvQ29tcGxldGUuTGFiZWxLZXkgPSBcIlVzZXJzXCI7XHJcbiAgICB0aGlzLlVzZXJBdXRvQ29tcGxldGUuSXNSZXF1aXJlZCA9IHRydWU7XHJcbiAgICB0aGlzLlVzZXJBdXRvQ29tcGxldGUuVmFsdWUgPSBudWxsO1xyXG4gICAgdGhpcy5Vc2VyQXV0b0NvbXBsZXRlLkFjdGlvblVSTCA9IHRoaXMuZW52aXJvbm1lbnRTZXJ2aWNlLmdldEFwaVVybCgpICsgdGhpcy5BcGlVcmwgKyBcIkF1dG9Db21wbGV0ZVVzZXJMaXN0XCJcclxuICAgIHRoaXMuVXNlckF1dG9Db21wbGV0ZS5WYWxpZGF0aW9uVG9rZW4gPSB0aGlzLmF1dGhTZXJ2aWNlLmF1dGhvcml6YXRpb25IZWFkZXJWYWx1ZSgpXHJcbiAgICB0aGlzLm1vZGFsU2VydmljZS5vcGVuKEFkZFVzZXJUb1Blcm1pc3Npb25TZXRNb2RhbCk7XHJcbiAgICB0aGlzLnV0aWxpdHlTZXJ2aWNlLnN0b3BCbG9ja1VJKCk7XHJcbiAgfVxyXG5cclxuICBhZGRVc2VyVG9QZXJtaXNzaW9uU2V0KCkge1xyXG4gICAgaWYgKHRoaXMuQWRkVXNlcnNUb1Blcm1pc3Npb25TZXRGb3JtLmludmFsaWQpIHtcclxuICAgICAgcmV0dXJuO1xyXG4gICAgfVxyXG4gICAgZWxzZSB7XHJcbiAgICAgIGxldCBSZXN1bHRNb2RlbCA9IHRoaXMuQWRkVXNlcnNUb1Blcm1pc3Npb25TZXRGb3JtLnZhbHVlO1xyXG4gICAgICBsZXQgQWRkTW9kZWw6UGVybWlzc2lvblNldFVzZXJzSURSZXF1ZXN0TW9kZWw9IG5ldyBQZXJtaXNzaW9uU2V0VXNlcnNJRFJlcXVlc3RNb2RlbCgpIDtcclxuICAgICAgZm9yIChsZXQgaW5kZXggPSAwOyBpbmRleCA8IFJlc3VsdE1vZGVsLlVzZXJBdXRvQ29tcGxldGUubGVuZ3RoOyBpbmRleCsrKSB7XHJcbiAgICAgICAgY29uc3Qga2V5ID0gUmVzdWx0TW9kZWwuVXNlckF1dG9Db21wbGV0ZVtpbmRleF0ua2V5O1xyXG4gICAgICAgIEFkZE1vZGVsLlVzZXJzSURzLnB1c2goTnVtYmVyKGtleSkpXHJcbiAgICAgICAgXHJcbiAgICAgIH1cclxuICAgICAgQWRkTW9kZWwuUGVybWlzc2lvblNldElkPU51bWJlcih0aGlzLlBlcm1pc3Npb25TZXRJZCk7XHJcbiAgICAgIHRoaXMuUGVybWlzc2lvblNldFNlcnZpY2UuQWRkVXNlcnNUb1Blcm1pc3Npb25TZXQoIEFkZE1vZGVsKS5zdWJzY3JpYmUoKHJlc3VsdCkgPT4ge1xyXG4gICAgICAgIHRoaXMubW9kYWxTZXJ2aWNlLmRpc21pc3NBbGwoKTtcclxuICAgICAgICBsZXQgZWxlbWVudCA9IHRoaXMuaW5wdXQgYXMgYW55O1xyXG4gICAgICAgIGVsZW1lbnQuUmVpbml0aWFsaXplUGFnaW5nKCk7XHJcbiAgICAgIH0sIChlcnJvcikgPT4ge1xyXG4gICAgICAgIFxyXG4gICAgICB9KVxyXG4gICAgfVxyXG4gIH1cclxuXHJcblxyXG4gIHNob3dEZWxldGVVc2VyRnJvbVBlcm1pc3Npb25TZXRNb2RhbCh1c2VyOiBhbnksIGRlbGV0ZVVzZXJQZXJtaXNzaW9uU2V0TW9kYWwpIHtcclxuICAgIHRoaXMudXRpbGl0eVNlcnZpY2Uuc3RhcnRCbG9ja1VJKCk7XHJcbiAgICB0aGlzLmRlbGV0ZVVzZXJJZCA9IHVzZXIuaWRcclxuICAgIHRoaXMubW9kYWxTZXJ2aWNlLm9wZW4oZGVsZXRlVXNlclBlcm1pc3Npb25TZXRNb2RhbCk7XHJcbiAgICB0aGlzLnV0aWxpdHlTZXJ2aWNlLnN0b3BCbG9ja1VJKCk7XHJcblxyXG4gIH1cclxuXHJcbiAgZGVsZXRlVXNlckZyb21QZXJtaXNzaW9uU2V0KCkge1xyXG4gICAgdGhpcy5QZXJtaXNzaW9uU2V0U2VydmljZS5EZWxldGVVc2VyRnJvbVBlcm1pc3Npb25TZXQoIHRoaXMuZGVsZXRlVXNlcklkLnRvU3RyaW5nKCksIHRoaXMuUGVybWlzc2lvblNldElkKS5zdWJzY3JpYmUoKHJlc3VsdCkgPT4ge1xyXG4gICAgICB2YXIgZGF0YSA9IHJlc3VsdCBhcyBhbnk7XHJcbiAgICAgIGlmICghZGF0YS52YWwpIHtcclxuICAgICAgICBjb25zb2xlLmxvZyhcIm5vdGlmaWVkIGVycm9yXCIpO1xyXG4gICAgICAgIHRoaXMudXRpbGl0eVNlcnZpY2Uubm90aWZ5RXJyb3JNZXNzYWdlKHRoaXMudXRpbGl0eVNlcnZpY2UuZ2V0UmVzb3VyY2VWYWx1ZShcIkNhbm5vdERlbGV0ZUxhc3RVc2VyUGVybWlzc2lvblNldFwiKSk7XHJcbiAgICAgIH1cclxuICAgICAgZWxzZSB7XHJcbiAgICAgICAgdGhpcy51dGlsaXR5U2VydmljZS5ub3RpZnlTdWNjZXNzTWVzc2FnZSgpXHJcbiAgICAgIH1cclxuICAgICAgdGhpcy5kZWxldGVVc2VySWQgPSAwO1xyXG4gICAgICB0aGlzLm1vZGFsU2VydmljZS5kaXNtaXNzQWxsKCk7XHJcbiAgICAgIGxldCBlbGVtZW50ID0gdGhpcy5pbnB1dCBhcyBhbnk7XHJcbiAgICAgIGVsZW1lbnQuUmVpbml0aWFsaXplUGFnaW5nKCk7XHJcbiAgICB9LCAoZXJyb3IpID0+IHtcclxuICAgICAgXHJcbiAgICB9KVxyXG4gIH1cclxuXHJcblxyXG5cclxufVxyXG4iLCI8YmxvY2stdWk+PC9ibG9jay11aT5cclxuICA8IS0tIFBhZ2UgQ29udGVudCAtLT5cclxuICA8ZGl2ICpuZ0lmPVwiU2hvd1BhZ2VDb250ZW50XCIgY2xhc3M9XCJjb250YWluZXItZmx1aWRcIj5cclxuICAgIDxkaXYgY2xhc3M9XCJjYXJkIGNhcmQtY3VzdG9tLWhcIj5cclxuICAgICAgPGRpdiBjbGFzcz1cImNhcmQtaGVhZGVyIGJvcmRlci0wIHB0LTVcIj5cclxuICAgICAgICA8ZGl2IGNsYXNzPVwiY2FyZC10aXRsZSBhbGlnbi1pdGVtcy1zdGFydCBmbGV4LWNvbHVtblwiICpuZ0lmPVwiSXNGaWx0ZXJMb2FkZWRcIj5cclxuICAgICAgICAgIDxmb3JtIFtmb3JtR3JvdXBdPVwiVXNlclBlcm1pc3Npb25TZXRGb3JtXCI+XHJcbiAgICAgICAgICAgIDxCQlNGLVRleHRCb3ggW29wdGlvbnNdPVwic2VhcmNoVGV4dEJveFwiIFtncm91cF09XCJVc2VyUGVybWlzc2lvblNldEZvcm1cIj48L0JCU0YtVGV4dEJveD5cclxuICAgICAgICAgICAgPEJCU0YtVGV4dEJveCBbaGlkZGVuXT1cInRydWVcIiBbb3B0aW9uc109XCJQZXJtaXNzaW9uU2V0SWRUZXh0Qm94XCIgW2dyb3VwXT1cIlVzZXJQZXJtaXNzaW9uU2V0Rm9ybVwiPjwvQkJTRi1UZXh0Qm94PlxyXG4gICAgICAgICAgPC9mb3JtPlxyXG4gICAgICAgIDwvZGl2PlxyXG4gICAgICAgIDxkaXYgY2xhc3M9XCJjYXJkLXRvb2xiYXJcIj5cclxuICAgICAgICAgIDwhLS0gYmVnaW46Ok1lbnUgLS0+XHJcblxyXG4gICAgICAgICAgPGJ1dHRvbiB0eXBlPVwiYnV0dG9uXCIgY2xhc3M9XCJidG4gYnRuLXNtIGJ0bi1wcmltYXJ5XCIgdGl0bGU9XCJBZGRcIiAoY2xpY2spPVwic2hvd0FkZFVzZXJUb1Blcm1pc3Npb25TZXRNb2RhbChBZGRVc2VyVG9QZXJtaXNzaW9uU2V0TW9kYWwpXCI+XHJcbiAgICAgICAgICAgIDxpIGNsYXNzPVwiZmFzIGZhLXBsdXMgbWUtMVwiPjwvaT5cclxuICAgICAgICAgICAge3t1dGlsaXR5U2VydmljZS5nZXRSZXNvdXJjZVZhbHVlKFwiQWRkXCIpfX1cclxuICAgICAgICAgIDwvYnV0dG9uPlxyXG5cclxuICAgICAgICAgIDwhLS0gZW5kOjpNZW51IC0tPlxyXG4gICAgICAgIDwvZGl2PlxyXG4gICAgICA8L2Rpdj5cclxuICAgICAgPGRpdiBjbGFzcz1cImNhcmQtYm9keSBweS0zXCI+XHJcbiAgICAgICAgPGRpdiBjbGFzcz1cInRhYmxlLXJlc3BvbnNpdmVcIj5cclxuXHJcbiAgICAgICAgICA8IS0tYmVnaW46OlBlcm1pc3Npb24gbGlzdC0tPlxyXG4gICAgICAgICAgPHRhYmxlIGNsYXNzPVwidGFibGUgYWxpZ24tbWlkZGxlIHRhYmxlLXJvdy1kYXNoZWQgZnMtNiBneS01IGRhdGFUYWJsZSBuby1mb290ZXJcIj5cclxuICAgICAgICAgICAgPHRoZWFkPlxyXG4gICAgICAgICAgICAgIDx0ciBjbGFzcz1cInRleHQtc3RhcnQgdGV4dC1ncmF5LTQwMCBmdy1ib2xkZXIgZnMtNyB0ZXh0LXVwcGVyY2FzZSBncy0wXCI+XHJcbiAgICAgICAgICAgICAgICA8dGggY2xhc3M9XCJtaW4tdy0xNTBweFwiPnt7dXRpbGl0eVNlcnZpY2UuZ2V0UmVzb3VyY2VWYWx1ZShcIk5hbWVcIil9fTwvdGg+XHJcbiAgICAgICAgICAgICAgICA8dGggY2xhc3M9XCJtaW4tdy0xNTBweFwiPnt7dXRpbGl0eVNlcnZpY2UuZ2V0UmVzb3VyY2VWYWx1ZShcIkVtYWlsXCIpfX08L3RoPlxyXG4gICAgICAgICAgICAgICAgPHRoIGNsYXNzPVwibWluLXctMTUwcHhcIj57e3V0aWxpdHlTZXJ2aWNlLmdldFJlc291cmNlVmFsdWUoXCJSb2xlc1wiKX19PC90aD5cclxuICAgICAgICAgICAgICAgIDx0aCBjbGFzcz1cIm1pbi13LTUwcHhcIj57e3V0aWxpdHlTZXJ2aWNlLmdldFJlc291cmNlVmFsdWUoXCJBY3Rpb25cIil9fTwvdGg+XHJcbiAgICAgICAgICAgICAgPC90cj5cclxuICAgICAgICAgICAgPC90aGVhZD5cclxuICAgICAgICAgICAgPHRib2R5IGlkPVwibGlzdGluZ0NvbnRhaW5lclwiIGNsYXNzPVwiZnctYm9sZCB0ZXh0LWdyYXktNjAwIGJvcmRlci0wXCI+XHJcblxyXG4gICAgICAgICAgICAgIDx0ciAqbmdGb3I9XCJsZXQgdXNlciBvZiBVc2VyUGVybWlzc2lvblNldFBhZ2luZ1Jlc3VsdFwiPlxyXG5cclxuICAgICAgICAgICAgICAgIDx0ZD5cclxuICAgICAgICAgICAgICAgICAgPGEgKm5nSWY9XCJsYW5ndWFnZT09J2VuJ1wiIGhyZWY9XCJqYXZhc2NyaXB0OnZvaWQoMClcIlxyXG4gICAgICAgICAgICAgICAgICAgICBjbGFzcz1cInRleHQtZGFya1wiPnt7dXNlci5uYW1lLmVuZ2xpc2h9fTwvYT5cclxuICAgICAgICAgICAgICAgICAgPGEgKm5nSWY9XCJsYW5ndWFnZT09J2FyJ1wiIGhyZWY9XCJqYXZhc2NyaXB0OnZvaWQoMClcIlxyXG4gICAgICAgICAgICAgICAgICAgICBjbGFzcz1cInRleHQtZGFya1wiPnt7dXNlci5uYW1lLmFyYWJpY319PC9hPlxyXG4gICAgICAgICAgICAgICAgPC90ZD5cclxuICAgICAgICAgICAgICAgIDx0ZD57e3VzZXIuZW1haWx9fTwvdGQ+XHJcbiAgICAgICAgICAgICAgICA8dGQ+e3t1c2VyLnVzZXJQZXJtc2V0c319PC90ZD5cclxuICAgICAgICAgICAgICAgIDx0ZD5cclxuICAgICAgICAgICAgICAgICAgPGRpdj5cclxuICAgICAgICAgICAgICAgICAgICA8YnV0dG9uIG1hdC1idXR0b24gW21hdE1lbnVUcmlnZ2VyRm9yXT1cIm1lbnVcIiBjbGFzcz1cImJ0biBidG4tc20gYnRuLWljb24gYnRuLWxpZ2h0IGJ0bi1hY3RpdmUtbGlnaHQtcHJpbWFyeVwiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgPGkgY2xhc3M9XCJmYSBmYS1lbGxpcHNpcy1oXCIgYXJpYS1oaWRkZW49XCJ0cnVlXCI+PC9pPlxyXG4gICAgICAgICAgICAgICAgICAgIDwvYnV0dG9uPlxyXG4gICAgICAgICAgICAgICAgICAgIDxtYXQtbWVudSAjbWVudT1cIm1hdE1lbnVcIj5cclxuICAgICAgICAgICAgICAgICAgICAgIDxhIG5nYkRyb3Bkb3duSXRlbSBjbGFzcz1cImRyb3AtaXRlbSBweC0zXCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgIChjbGljayk9XCJzaG93RGVsZXRlVXNlckZyb21QZXJtaXNzaW9uU2V0TW9kYWwodXNlcixkZWxldGVVc2VyUGVybWlzc2lvblNldE1vZGFsKVwiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICA8c3BhbiBjbGFzcz1cImRyb3AtbGluayBweC0zXCI+e3t1dGlsaXR5U2VydmljZS5nZXRSZXNvdXJjZVZhbHVlKFwiRGVsZXRlXCIpfX08L3NwYW4+XHJcbiAgICAgICAgICAgICAgICAgICAgICA8L2E+XHJcbiAgICAgICAgICAgICAgICAgICAgPC9tYXQtbWVudT5cclxuICAgICAgICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgICAgICA8L3RkPlxyXG4gICAgICAgICAgICAgIDwvdHI+XHJcbiAgICAgICAgICAgICAgPHRyICpuZ0lmPVwiVXNlclBlcm1pc3Npb25TZXRQYWdpbmdSZXN1bHQubGVuZ3RoID09IDBcIj5cclxuICAgICAgICAgICAgICAgIDx0ZCBjb2xzcGFuPVwiNFwiPlxyXG4gICAgICAgICAgICAgICAgICA8bGliLWVtcHR5LWRhdGE+PC9saWItZW1wdHktZGF0YT5cclxuICAgICAgICAgICAgICAgIDwvdGQ+XHJcbiAgICAgICAgICAgICAgPC90cj5cclxuICAgICAgICAgICAgPC90Ym9keT5cclxuICAgICAgICAgIDwvdGFibGU+XHJcblxyXG4gICAgICAgICAgPCEtLWVuZDo6UGVybWlzc2lvbiBsaXN0LS0+XHJcbiAgICAgICAgPC9kaXY+XHJcblxyXG4gICAgICA8L2Rpdj5cclxuICAgICAgPGRpdiBjbGFzcz1cImNhcmQtZm9vdGVyIGJvcmRlci0wXCI+XHJcbiAgICAgICAgPEJCU0YtUGFnaW5nIChJdGVtcyk9XCJzZXRVc2VyUGVybWlzc2lvblNldExpc3RSZXN1bHQoJGV2ZW50KVwiICpuZ0lmPVwiSXNGaWx0ZXJMb2FkZWRcIlxyXG4gICAgICAgICAgICAgICAgICAgICBbb3B0aW9uc109XCJVc2VyUGVybWlzc2lvblNldFBhZ2luZ1wiIFtncm91cF09XCJVc2VyUGVybWlzc2lvblNldEZvcm1cIiAjVXNlclBlcm1pc3Npb25TZXRQYWdpbmdWaWV3RWxlbWVudD5cclxuICAgICAgICA8L0JCU0YtUGFnaW5nPlxyXG4gICAgICA8L2Rpdj5cclxuICAgIDwvZGl2PlxyXG5cclxuICA8L2Rpdj5cclxuXHJcblxyXG4gIDwhLS0gQWRkIE1vZGFsIC0tPlxyXG4gIDxuZy10ZW1wbGF0ZSAjQWRkVXNlclRvUGVybWlzc2lvblNldE1vZGFsIGxldC1tb2RhbD5cclxuICAgIDxkaXYgY2xhc3M9XCJtb2RhbC1oZWFkZXIgcGItMCBib3JkZXItMCBqdXN0aWZ5LWNvbnRlbnQtZW5kXCI+XHJcbiAgICAgIDxoNSBjbGFzcz1cIm1vZGFsLXRpdGxlXCIgaWQ9XCJleGFtcGxlTW9kYWxMYWJlbFwiPjwvaDU+XHJcbiAgICAgIDxidXR0b24gdHlwZT1cImJ1dHRvblwiIGRhdGEtZGlzbWlzcz1cIm1vZGFsXCIgYXJpYS1sYWJlbD1cIkNsb3NlXCIgKGNsaWNrKT1cIm1vZGFsLmRpc21pc3MoKVwiIGNsYXNzPVwiYnRuIGJ0bi1zbSBidG4taWNvbiBidG4tYWN0aXZlLWNvbG9yLXByaW1hcnlcIj5cclxuICAgICAgICA8c3BhbiBjbGFzcz1cInN2Zy1pY29uIHN2Zy1pY29uLTFcIj5cclxuICAgICAgICAgIDxzcGFuIFtpbmxpbmVTVkddPVwiJy4vc3JjL2Fzc2V0cy9pbWFnZXMvYXJyMDYxLnN2ZydcIj48L3NwYW4+XHJcbiAgICAgICAgPC9zcGFuPlxyXG4gICAgICA8L2J1dHRvbj5cclxuICAgIDwvZGl2PlxyXG4gICAgPGRpdiBjbGFzcz1cIm1vZGFsLWJvZHkgc2Nyb2xsLXkgcHgtMTAgcHgtbGctMTUgcHQtMCBwYi0xNVwiPlxyXG4gICAgICA8ZGl2IGNsYXNzPVwibWItMTMgdGV4dC1jZW50ZXJcIj5cclxuICAgICAgICA8aDEgY2xhc3M9XCJtYi0zXCI+e3t1dGlsaXR5U2VydmljZS5nZXRSZXNvdXJjZVZhbHVlKFwiQWRkVXNlclwiKX19PC9oMT5cclxuICAgICAgPC9kaXY+XHJcbiAgICAgIDxmb3JtIFtmb3JtR3JvdXBdPVwiQWRkVXNlcnNUb1Blcm1pc3Npb25TZXRGb3JtXCIgKG5nU3VibWl0KT1cImFkZFVzZXJUb1Blcm1pc3Npb25TZXQoKVwiPlxyXG4gICAgICAgIDxCQlNGLVRhZ3NJbnB1dCBbb3B0aW9uc109XCJVc2VyQXV0b0NvbXBsZXRlXCIgW2dyb3VwXT1cIkFkZFVzZXJzVG9QZXJtaXNzaW9uU2V0Rm9ybVwiPlxyXG4gICAgICAgIDwvQkJTRi1UYWdzSW5wdXQ+XHJcbiAgICAgICAgPGRpdiBjbGFzcz1cInRleHQtY2VudGVyIHB0LTdcIj5cclxuICAgICAgICAgIDxidXR0b24gdHlwZT1cImJ1dHRvblwiICNDbG9zZUFkZFVzZXJzVG9QZXJtaXNzaW9uU2V0IGlkPVwiQ2xvc2VBZGRVc2Vyc1RvUGVybWlzc2lvblNldFwiIGRhdGEtZGlzbWlzcz1cIm1vZGFsXCIgYXJpYS1sYWJlbD1cIkNsb3NlXCIgY2xhc3M9XCJidG4gYnRuLWxpZ2h0IG1lLTMgYnRuLXNtXCIgKGNsaWNrKT1cIm1vZGFsLmRpc21pc3MoKVwiPnt7dXRpbGl0eVNlcnZpY2UuZ2V0UmVzb3VyY2VWYWx1ZShcIkNhbmNlbExhYmVsXCIpfX0gPC9idXR0b24+XHJcbiAgICAgICAgICA8YnV0dG9uIHR5cGU9XCJzdWJtaXRcIiBjbGFzcz1cImJ0biBidG4tcHJpbWFyeSBidG4tc21cIj57e3V0aWxpdHlTZXJ2aWNlLmdldFJlc291cmNlVmFsdWUoXCJTYXZlTGFiZWxcIil9fTwvYnV0dG9uPlxyXG4gICAgICAgIDwvZGl2PlxyXG4gICAgICA8L2Zvcm0+XHJcblxyXG4gICAgPC9kaXY+XHJcbiAgPC9uZy10ZW1wbGF0ZT5cclxuXHJcblxyXG4gIDwhLS0gRGVsZXRlICBNb2RhbCAtLT5cclxuICA8bmctdGVtcGxhdGUgI2RlbGV0ZVVzZXJQZXJtaXNzaW9uU2V0TW9kYWwgbGV0LW1vZGFsPlxyXG4gICAgPGRpdiBjbGFzcz1cIm1vZGFsLWhlYWRlciBwYi0wIGJvcmRlci0wIGp1c3RpZnktY29udGVudC1lbmRcIj5cclxuICAgICAgPGg1IGNsYXNzPVwibW9kYWwtdGl0bGVcIiBpZD1cImV4YW1wbGVNb2RhbExhYmVsXCI+PC9oNT5cclxuICAgICAgPGJ1dHRvbiB0eXBlPVwiYnV0dG9uXCIgZGF0YS1kaXNtaXNzPVwibW9kYWxcIiBhcmlhLWxhYmVsPVwiQ2xvc2VcIiBjbGFzcz1cImJ0biBidG4tc20gYnRuLWljb24gYnRuLWFjdGl2ZS1jb2xvci1wcmltYXJ5XCIgKGNsaWNrKT1cIm1vZGFsLmRpc21pc3MoKVwiPlxyXG4gICAgICAgIDxzcGFuIGNsYXNzPVwic3ZnLWljb24gc3ZnLWljb24tMVwiPlxyXG4gICAgICAgICAgPHNwYW4gW2lubGluZVNWR109XCInLi9zcmMvYXNzZXRzL2ltYWdlcy9hcnIwNjEuc3ZnJ1wiPjwvc3Bhbj5cclxuICAgICAgICA8L3NwYW4+XHJcbiAgICAgIDwvYnV0dG9uPlxyXG4gICAgPC9kaXY+XHJcbiAgICA8ZGl2IGNsYXNzPVwibW9kYWwtYm9keSBzY3JvbGwteSBweC0xMCBweC1sZy0xNSBwdC0wIHBiLTE1XCI+XHJcbiAgICAgIDxkaXYgY2xhc3M9XCJtYi0xMyB0ZXh0LWNlbnRlclwiPlxyXG4gICAgICAgIDxoMSBjbGFzcz1cIm1iLTNcIj57e3V0aWxpdHlTZXJ2aWNlLmdldFJlc291cmNlVmFsdWUoXCJEZWxldGVcIil9fSB7e3V0aWxpdHlTZXJ2aWNlLmdldFJlc291cmNlVmFsdWUoXCJVc2VyXCIpfX08L2gxPlxyXG4gICAgICA8L2Rpdj5cclxuICAgICAgPGRpdiBjbGFzcz1cIm5vdGljZSBkLWZsZXggYmctbGlnaHQtZGFuZ2VyIHJvdW5kZWQgYm9yZGVyLWRhbmdlciBib3JkZXIgYm9yZGVyLWRhc2hlZCBtYi0xMCBwLTZcIj5cclxuICAgICAgICA8c3BhbiBjbGFzcz1cInN2Zy1pY29uIHN2Zy1pY29uLTJ0eCBzdmctaWNvbi1kYW5nZXIgbWUtNFwiPlxyXG4gICAgICAgICAgPHNwYW4gW2lubGluZVNWR109XCInLi9zcmMvYXNzZXRzL2ltYWdlcy9nZW4wNDQuc3ZnJ1wiPjwvc3Bhbj5cclxuICAgICAgICA8L3NwYW4+XHJcblxyXG4gICAgICAgIDxkaXYgY2xhc3M9XCJkLWZsZXggZmxleC1zdGFjayBmbGV4LWdyb3ctMVwiPlxyXG4gICAgICAgICAgPGRpdiBjbGFzcz1cImZ3LWJvbGRcIj5cclxuICAgICAgICAgICAgPGRpdiBjbGFzcz1cImZzLTYgdGV4dC1ncmF5LTcwMFwiPlxyXG4gICAgICAgICAgICAgIHt7dXRpbGl0eVNlcnZpY2UuZ2V0UmVzb3VyY2VWYWx1ZShcIkRlbGV0ZV9RdWVzdGlvblwiKX19XHJcbiAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgPC9kaXY+XHJcbiAgICAgIDwvZGl2PlxyXG4gICAgICA8ZGl2IGNsYXNzPVwidGV4dC1jZW50ZXIgcHQtN1wiPlxyXG4gICAgICAgIDxidXR0b24gI0Nsb3NlRGVsZXRlVXNlckZyb21QZXJtaXNzaW9uU2V0TW9kYWwgaWQ9XCJDbG9zZURlbGV0ZVVzZXJGcm9tUGVybWlzc2lvblNldE1vZGFsXCIgdHlwZT1cImJ1dHRvblwiXHJcbiAgICAgICAgICAgICAgICBjbGFzcz1cImJ0biBidG4tbGlnaHQgYnRuLXNtIG1lLTMgXCIgZGF0YS1kaXNtaXNzPVwibW9kYWxcIiAoY2xpY2spPVwibW9kYWwuZGlzbWlzcygpXCI+XHJcbiAgICAgICAgICB7e3V0aWxpdHlTZXJ2aWNlLmdldFJlc291cmNlVmFsdWUoXCJDYW5jZWxMYWJlbFwiKX19XHJcbiAgICAgICAgPC9idXR0b24+XHJcbiAgICAgICAgPGJ1dHRvbiB0eXBlPVwiYnV0dG9uXCIgKGNsaWNrKT1cImRlbGV0ZVVzZXJGcm9tUGVybWlzc2lvblNldCgpXCJcclxuICAgICAgICAgICAgICAgIGNsYXNzPVwiYnRuIGJ0bi1saWdodC1kYW5nZXIgYnRuLXNtIFwiPlxyXG4gICAgICAgICAge3t1dGlsaXR5U2VydmljZS5nZXRSZXNvdXJjZVZhbHVlKFwiRGVsZXRlXCIpfX1cclxuICAgICAgICA8L2J1dHRvbj5cclxuICAgICAgPC9kaXY+XHJcbiAgICA8L2Rpdj5cclxuICA8L25nLXRlbXBsYXRlPlxyXG5cclxuXHJcblxyXG4iXX0=
189
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicGVybWlzc2lvbi1zZXQtaW5mby5jb21wb25lbnQuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy9iYnNmLWFkbWluLXBvcnRhbC9zcmMvbGliL1BhZ2VzL3JvbGVzL3Blcm1pc3Npb24tc2V0LWluZm8vcGVybWlzc2lvbi1zZXQtaW5mby5jb21wb25lbnQudHMiLCIuLi8uLi8uLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy9iYnNmLWFkbWluLXBvcnRhbC9zcmMvbGliL1BhZ2VzL3JvbGVzL3Blcm1pc3Npb24tc2V0LWluZm8vcGVybWlzc2lvbi1zZXQtaW5mby5jb21wb25lbnQuaHRtbCJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQUUsU0FBUyxFQUFzQixTQUFTLEVBQWEsTUFBTSxlQUFlLENBQUM7QUFDcEYsT0FBTyxFQUFFLFNBQVMsRUFBRSxNQUFNLGdCQUFnQixDQUFDO0FBRTNDLE9BQU8sRUFBRSx3QkFBd0IsRUFBRSxVQUFVLEVBQUUsVUFBVSxFQUFFLFdBQVcsRUFBRSxTQUFTLEVBQUUsYUFBYSxFQUFFLGdCQUFnQixFQUFFLGNBQWMsRUFBRSxNQUFNLHlCQUF5QixDQUFDO0FBQ3BLLE9BQU8sRUFBRSxlQUFlLEVBQUUsTUFBTSxvREFBb0QsQ0FBQztBQUNyRixPQUFPLEVBQUUsZ0NBQWdDLEVBQUUsTUFBTSx3RUFBd0UsQ0FBQztBQUkxSCxPQUFPLEVBQUUsa0JBQWtCLEVBQUUsTUFBTSw0REFBNEQsQ0FBQzs7Ozs7Ozs7Ozs7OztBQVNoRyxNQUFNLE9BQU8sMEJBQTBCO0lBcUNyQyxZQUNVLGVBQWdDLEVBQ2hDLGNBQThCLEVBQzlCLGNBQThCLEVBQzlCLFdBQXdCLEVBQ3hCLG9CQUEwQyxFQUMxQyxZQUFzQixFQUN0QixxQkFBMkM7UUFOM0Msb0JBQWUsR0FBZixlQUFlLENBQWlCO1FBQ2hDLG1CQUFjLEdBQWQsY0FBYyxDQUFnQjtRQUM5QixtQkFBYyxHQUFkLGNB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LEVBQUUsRUFBRSxNQUFNLEVBQUUsS0FBSyxFQUFFIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgQ29tcG9uZW50LCBFbGVtZW50UmVmLCBPbkluaXQsIFZpZXdDaGlsZCwgT25EZXN0cm95IH0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XHJcbmltcG9ydCB7IEZvcm1Hcm91cCB9IGZyb20gJ0Bhbmd1bGFyL2Zvcm1zJztcclxuaW1wb3J0IHsgQWN0aXZhdGVkUm91dGUgfSBmcm9tICdAYW5ndWxhci9yb3V0ZXInO1xyXG5pbXBvcnQgeyBDb25maXJtYXRpb25Nb2RhbE9wdGlvbnMsIEZpbHRlckl0ZW0sIEZpbHRlclR5cGUsIEZvcm1PcHRpb25zLCBJbnB1dFR5cGUsIFBhZ2luZ09wdGlvbnMsIFRhZ3NJbnB1dE9wdGlvbnMsIFRleHRCb3hPcHRpb25zIH0gZnJvbSAnQGJuc2lnaHRzL2Jic2YtY29udHJvbHMnO1xyXG5pbXBvcnQgeyBQYWdlSW5mb1NlcnZpY2UgfSBmcm9tICcuLi8uLi8uLi9fbWV0cm9uaWMvY29yZS9zZXJ2aWNlcy9wYWdlLWluZm8uc2VydmljZSc7XHJcbmltcG9ydCB7IFBlcm1pc3Npb25TZXRVc2Vyc0lEUmVxdWVzdE1vZGVsIH0gZnJvbSAnLi4vLi4vc2hhcmVkL21vZGVscy9QZXJtaXNzaW9uc01vZGVscy9QZXJtaXNzaW9uU2V0VXNlcnNJRFJlcXVlc3RNb2RlbCc7XHJcbmltcG9ydCB7IFBlcm1pc3Npb25TZXRTZXJ2aWNlIH0gZnJvbSAnLi4vLi4vc2hhcmVkL1NlcnZpY2VzL1Blcm1pc3Npb25TZXRTZXJ2aWNlLnNlcnZpY2UnO1xyXG5pbXBvcnQgeyBOZ2JNb2RhbCB9IGZyb20gJ0BuZy1ib290c3RyYXAvbmctYm9vdHN0cmFwJztcclxuaW1wb3J0IHsgQXV0aFNlcnZpY2UsIFV0aWxpdHlTZXJ2aWNlLCAgUmVxdWVzdEhhbmRsZXJTZXJ2aWNlIH0gZnJvbSAnQGJuc2lnaHRzL2Jic2YtdXRpbGl0aWVzJztcclxuaW1wb3J0IHsgUGVybWlzc2lvblNldE1vZGVsIH0gZnJvbSAnLi8uLi8uLi9zaGFyZWQvbW9kZWxzL1Blcm1pc3Npb25zTW9kZWxzL1Blcm1pc3Npb25TZXRNb2RlbCc7XHJcbmltcG9ydCB7IFBhZ2luZ0NvbXBvbmVudCB9IGZyb20gJ0BibnNpZ2h0cy9iYnNmLWNvbnRyb2xzL2xpYi9jb250cm9scy9QYWdpbmcvUGFnaW5nLmNvbXBvbmVudCc7XHJcbmltcG9ydCB7IE9ic2VydmFibGUgfSBmcm9tICdyeGpzJztcclxuaW1wb3J0IHsgQ29uZmlybWF0aW9uTW9kYWxDb21wb25lbnQgfSBmcm9tICdAYm5zaWdodHMvYmJzZi1jb250cm9scy9saWIvY29udHJvbHMvQ29uZmlybWF0aW9uTW9kYWwvQ29uZmlybWF0aW9uTW9kYWwuY29tcG9uZW50JztcclxuXHJcbkBDb21wb25lbnQoe1xyXG4gIHNlbGVjdG9yOiAnbGliLXBlcm1pc3Npb24tc2V0LWluZm8nLFxyXG4gIHRlbXBsYXRlVXJsOiAnLi9wZXJtaXNzaW9uLXNldC1pbmZvLmNvbXBvbmVudC5odG1sJ1xyXG59KVxyXG5leHBvcnQgY2xhc3MgUGVybWlzc2lvblNldEluZm9Db21wb25lbnQgaW1wbGVtZW50cyBPbkluaXQgLE9uRGVzdHJveSB7XHJcblxyXG4gIC8vUGFnZSByZXF1aXJlbWVudHNcclxuICBBcGlVcmwgPSB0aGlzLnBlcm1pc3Npb25TZXRTZXJ2aWNlLkFwaVVybFxyXG5cclxuICAvL1BhcmVudCBkZXBhcnRtZW50IGRhdGFcclxuICBQZXJtaXNzaW9uU2V0SWQ6IHN0cmluZyA9IFwiXCJcclxuICBQZXJtaXNzaW9uU2V0OiBQZXJtaXNzaW9uU2V0TW9kZWwgPSBuZXcgUGVybWlzc2lvblNldE1vZGVsKCk7XHJcblxyXG4gIC8vRmlsdGVyIGFuZCBwYWdpbmcgY29tcG9uZW50c1xyXG4gIHNlYXJjaFRleHRCb3g6IFRleHRCb3hPcHRpb25zO1xyXG4gIHBlcm1pc3Npb25TZXRJZFRleHRCb3g6IFRleHRCb3hPcHRpb25zO1xyXG4gIGZpbHRlckZvcm0gPSBuZXcgRm9ybUdyb3VwKHt9KTtcclxuICB1c2VyUGVybWlzc2lvblNldEZvcm0gPSBuZXcgRm9ybUdyb3VwKHt9KTtcclxuICBzaG93RmlsdGVyOiBib29sZWFuID0gZmFsc2U7XHJcbiAgdXNlclBlcm1pc3Npb25TZXRQYWdpbmdSZXN1bHQ6IGFueVtdID0gW107XHJcbiAgZmlsdGVyZWRVc2VyUGVybWlzc2lvblNldFBhZ2luZ1Jlc3VsdDogYW55W10gPSBbXTtcclxuXHJcbiAgdXNlclBlcm1pc3Npb25TZXRQYWdpbmc6IFBhZ2luZ09wdGlvbnM7XHJcbiAgdGV4dElucHV0RmlsdGVyOiBGaWx0ZXJJdGVtO1xyXG4gIHBlcm1pc3Npb25TZXRJZFRleHRJbnB1dEZpbHRlcjogRmlsdGVySXRlbTtcclxuICBpc0ZpbHRlckxvYWRlZDogYm9vbGVhbiA9IGZhbHNlO1xyXG4gIEBWaWV3Q2hpbGQoJ1VzZXJQZXJtaXNzaW9uU2V0UGFnaW5nVmlld0VsZW1lbnQnLCB7IHN0YXRpYzogZmFsc2UgfSkgcGFnaW5nRWxlbWVudDogUGFnaW5nQ29tcG9uZW50PGFueT47XHJcblxyXG5cclxuXHJcbiAgLy9BZGQgTW9kZWwgQ29udHJvbHNcclxuICBhZGRVc2Vyc1RvUGVybWlzc2lvblNldEZvcm0gPSBuZXcgRm9ybUdyb3VwKHt9KTtcclxuICBhZGRVc2Vyc1RvUGVybWlzc2lvblNldEZvcm1PcHRpb25zOiBGb3JtT3B0aW9uc1xyXG4gIHVzZXJBdXRvQ29tcGxldGU6IFRhZ3NJbnB1dE9wdGlvbnM7XHJcbiAgXHJcbiAgLy9kZWxldGUgIE1vZGVsIENvbnRyb2xzXHJcbiAgZGVsZXRlVXNlcklkOiBzdHJpbmc7XHJcbiAgZGVsZXRlQ29uZmlybWF0aW9uT3B0aW9uczogQ29uZmlybWF0aW9uTW9kYWxPcHRpb25zO1xyXG4gIGRlbGV0ZUNvbnRyb2xMb2FkZWQ6IGJvb2xlYW4gPSBmYWxzZTtcclxuICBAVmlld0NoaWxkKCdDb25maXJtYXRpb25Nb2RhbENvbnRyb2wnLCB7IHN0YXRpYzogZmFsc2UgfSkgQ29uZmlybWF0aW9uTW9kYWxDb250cm9sOiBDb25maXJtYXRpb25Nb2RhbENvbXBvbmVudDtcclxuXHJcbiAgY29uc3RydWN0b3IoXHJcbiAgICBwcml2YXRlIHBhZ2VJbmZvU2VydmljZTogUGFnZUluZm9TZXJ2aWNlLFxyXG4gICAgcHVibGljICB1dGlsaXR5U2VydmljZTogVXRpbGl0eVNlcnZpY2UsXHJcbiAgICBwcml2YXRlIGFjdGl2YXRlZFJvdXRlOiBBY3RpdmF0ZWRSb3V0ZSxcclxuICAgIHByaXZhdGUgYXV0aFNlcnZpY2U6IEF1dGhTZXJ2aWNlLFxyXG4gICAgcHJpdmF0ZSBwZXJtaXNzaW9uU2V0U2VydmljZTogUGVybWlzc2lvblNldFNlcnZpY2UsXHJcbiAgICBwcml2YXRlIG1vZGFsU2VydmljZTogTmdiTW9kYWwsXHJcbiAgICBwcml2YXRlIHJlcXVlc3RIYW5kbGVyU2VydmljZTpSZXF1ZXN0SGFuZGxlclNlcnZpY2VcclxuICApIFxyXG4gIHtcclxuXHJcbiAgICB0aGlzLmFjdGl2YXRlZFJvdXRlLnBhcmFtcy5zdWJzY3JpYmUocGFyYW1zID0+IHtcclxuICAgICAgdGhpcy5QZXJtaXNzaW9uU2V0SWQgPSBwYXJhbXNbJ2lkJ107XHJcbiAgIH0pO1xyXG4gIH1cclxuICAgbmdPbkluaXQoKSB7XHJcbiAgICAgLy9QYWdlIGhlYWRlciAoYnJlYWRjcnVtYiBhbmQgdGl0bGUpXHJcbiAgICAgdGhpcy5sb2FkQnJlYWRDcnVtcERhdGEoKVxyXG4gICBcclxuICB9XHJcblxyXG5cclxuICAvL1BhZ2luZyBmdW5jdGlvbnNcclxuICBzZXRVc2VyUGVybWlzc2lvblNldExpc3RSZXN1bHQocmVzdWx0KSB7XHJcbiAgICB0aGlzLnVzZXJQZXJtaXNzaW9uU2V0UGFnaW5nUmVzdWx0ID0gcmVzdWx0O1xyXG4gICAgdGhpcy5maWx0ZXJlZFVzZXJQZXJtaXNzaW9uU2V0UGFnaW5nUmVzdWx0PXRoaXMudXNlclBlcm1pc3Npb25TZXRQYWdpbmdSZXN1bHRcclxuICB9XHJcbiAgLy9SZXNldCBhbGwgRmlsdGVyc1xyXG4gIHJlc2V0RmlsdGVycygpIHtcclxuICAgIHRoaXMudXNlclBlcm1pc3Npb25TZXRGb3JtLmNvbnRyb2xzW1wic2VhcmNoVGV4dEJveFwiXS5zZXRWYWx1ZShudWxsKTtcclxuICAgIGxldCBlbGVtZW50ID0gdGhpcy5wYWdpbmdFbGVtZW50IGFzIGFueTtcclxuICAgIGVsZW1lbnQuUmVpbml0aWFsaXplUGFnaW5nKCk7XHJcbiAgfVxyXG5cclxuXHJcbiAgLy9HZXQgcGFyZW50IFBlcm1pc3Npb25TZXRzIG5hbWUgYW5kIHNldCBwYWdlIHRpdGxlIGFuZCBicmVhZGNydW1ic1xyXG4gICAgbG9hZEJyZWFkQ3J1bXBEYXRhKCkge1xyXG4gICAgICB0aGlzLnBlcm1pc3Npb25TZXRTZXJ2aWNlLmdldFBlcm1pc3Npb25TZXRJbmZvKHRoaXMuUGVybWlzc2lvblNldElkKS5zdWJzY3JpYmUoKHJlc3VsdCkgPT4ge1xyXG4gICAgICAgIGxldCByZXN1bHRNb2RlbCA9IHJlc3VsdCBhcyBhbnlcclxuICAgICAgICBQYWdlSW5mb1NlcnZpY2UuUGFnZVRpdGxlID0gcmVzdWx0TW9kZWwudmFsXHJcbiAgICAgICAgUGFnZUluZm9TZXJ2aWNlLlBhZ2VCcmVhZGNydW1icyA9IFtcclxuICAgICAgICAgIHsgdGl0bGU6IHRoaXMudXRpbGl0eVNlcnZpY2UuZ2V0UmVzb3VyY2VWYWx1ZShcIkhvbWVcIiksIHBhdGg6ICcvQWRtaW4vSG9tZScsIGlzU2VwYXJhdG9yOiBmYWxzZSwgaXNBY3RpdmU6IGZhbHNlIH0sXHJcbiAgICAgICAgICB7IHRpdGxlOiAnJywgcGF0aDogJycsIGlzU2VwYXJhdG9yOiB0cnVlLCBpc0FjdGl2ZTogZmFsc2UgfSxcclxuICAgICAgICAgIHsgdGl0bGU6IHRoaXMudXRpbGl0eVNlcnZpY2UuZ2V0UmVzb3VyY2VWYWx1ZShcIlBlcm1pc3Npb25TZXRzXCIpLCBwYXRoOiAnL0FkbWluL1JvbGVzL1Blcm1pc3Npb25TZXRzJywgaXNTZXBhcmF0b3I6IGZhbHNlLCBpc0FjdGl2ZTogZmFsc2UgfSxcclxuICAgICAgICAgIHsgdGl0bGU6ICcnLCBwYXRoOiAnJywgaXNTZXBhcmF0b3I6IHRydWUsIGlzQWN0aXZlOiBmYWxzZSB9XHJcbiAgICAgICAgXTtcclxuICAgICAgICB0aGlzLnBhZ2VJbmZvU2VydmljZS5jYWxjdWxhdGVUaXRsZSgpO1xyXG4gICAgICAgIHRoaXMucGFnZUluZm9TZXJ2aWNlLmNhbGN1bGF0ZUJyZWFkY3J1bWJzKCk7XHJcbiAgICAgICAgLy9pbml0aWFsaXplIHBhZ2VcclxuICAgICAgICAgdGhpcy5pbml0aWFsaXplUGFnZSgpO1xyXG4gICAgICB9KTtcclxuICAgIH1cclxuICBcclxuICAgLy9pbml0aWFsaXplIHBhZ2VcclxuICAgIGluaXRpYWxpemVQYWdlKCkge1xyXG4gICAgICB0aGlzLmlzRmlsdGVyTG9hZGVkID0gZmFsc2VcclxuICAgICAgLy8gVGV4dEJveCBpbnRpXHJcbiAgICAgIHRoaXMuc2VhcmNoVGV4dEJveCA9IG5ldyBUZXh0Qm94T3B0aW9ucygpO1xyXG4gICAgICB0aGlzLnNlYXJjaFRleHRCb3guTmFtZSA9IFwic2VhcmNoVGV4dEJveFwiXHJcbiAgICAgIHRoaXMuc2VhcmNoVGV4dEJveC5IaWRlTGFiZWwgPSB0cnVlXHJcbiAgICAgIHRoaXMuc2VhcmNoVGV4dEJveC5UeXBlID0gSW5wdXRUeXBlLlRleHRcclxuICAgICAgdGhpcy5zZWFyY2hUZXh0Qm94LlBsYWNlaG9sZGVyID0gdGhpcy51dGlsaXR5U2VydmljZS5nZXRSZXNvdXJjZVZhbHVlKFwiU2VhcmNoQnlOYW1lT3JFbWFpbFwiKTtcclxuICBcclxuICAgICAgdGhpcy5wZXJtaXNzaW9uU2V0SWRUZXh0Qm94ID0gbmV3IFRleHRCb3hPcHRpb25zKCk7XHJcbiAgICAgIHRoaXMucGVybWlzc2lvblNldElkVGV4dEJveC5OYW1lID0gXCJQZXJtaXNzaW9uU2V0SWRUZXh0Qm94XCJcclxuICAgICAgdGhpcy5wZXJtaXNzaW9uU2V0SWRUZXh0Qm94LkhpZGVMYWJlbCA9IHRydWVcclxuICAgICAgdGhpcy5wZXJtaXNzaW9uU2V0SWRUZXh0Qm94LlR5cGUgPSBJbnB1dFR5cGUuVGV4dFxyXG4gICAgICB0aGlzLnBlcm1pc3Npb25TZXRJZFRleHRCb3guVmFsdWUgPSB0aGlzLlBlcm1pc3Npb25TZXRJZDtcclxuICAgICAgdGhpcy5wZXJtaXNzaW9uU2V0SWRUZXh0Qm94LlBsYWNlaG9sZGVyID0gdGhpcy51dGlsaXR5U2VydmljZS5nZXRSZXNvdXJjZVZhbHVlKFwiU2VhcmNoQnlOYW1lXCIpO1xyXG4gIFxyXG4gIFxyXG4gICAgICB0aGlzLnRleHRJbnB1dEZpbHRlciA9IG5ldyBGaWx0ZXJJdGVtKCk7XHJcbiAgICAgIHRoaXMudGV4dElucHV0RmlsdGVyLkZvcm1Db250cm9sTmFtZSA9IFwic2VhcmNoVGV4dEJveFwiXHJcbiAgICAgIHRoaXMudGV4dElucHV0RmlsdGVyLkFjdGlvblBhcmFtZXRlck5hbWUgPSBcInNlYXJjaFRleHRcIlxyXG4gICAgICB0aGlzLnRleHRJbnB1dEZpbHRlci5Jc0Zvcm1Db250cm9sID0gdHJ1ZVxyXG4gICAgICB0aGlzLnRleHRJbnB1dEZpbHRlci5GaWx0ZXJUeXBlID0gRmlsdGVyVHlwZS5UZXh0Qm94XHJcbiAgXHJcbiAgICAgICB0aGlzLnBlcm1pc3Npb25TZXRJZFRleHRJbnB1dEZpbHRlciA9IG5ldyBGaWx0ZXJJdGVtKCk7XHJcbiAgICAgICB0aGlzLnBlcm1pc3Npb25TZXRJZFRleHRJbnB1dEZpbHRlci5Gb3JtQ29udHJvbE5hbWUgPSBcIlBlcm1pc3Npb25TZXRJZFRleHRCb3hcIlxyXG4gICAgICAgdGhpcy5wZXJtaXNzaW9uU2V0SWRUZXh0SW5wdXRGaWx0ZXIuQWN0aW9uUGFyYW1ldGVyTmFtZSA9IFwicGVybWlzc2lvblNldElkXCJcclxuICAgICAgIHRoaXMucGVybWlzc2lvblNldElkVGV4dElucHV0RmlsdGVyLklzRm9ybUNvbnRyb2wgPSB0cnVlXHJcbiAgICAgICB0aGlzLnBlcm1pc3Npb25TZXRJZFRleHRJbnB1dEZpbHRlci5GaWx0ZXJUeXBlID0gRmlsdGVyVHlwZS5UZXh0Qm94XHJcblxyXG4gICAgICAgdGhpcy51c2VyUGVybWlzc2lvblNldFBhZ2luZyA9IG5ldyBQYWdpbmdPcHRpb25zKCk7XHJcbiAgICAgICB0aGlzLnVzZXJQZXJtaXNzaW9uU2V0UGFnaW5nLkFjdGlvblBvc3RVUkwgPXRoaXMuQXBpVXJsICsgJ0dldFVzZXJzQnlGaWx0ZXInO1xyXG4gICAgICAgdGhpcy51c2VyUGVybWlzc2lvblNldFBhZ2luZy5PbktleVByZXNzRmlsdGVyc0NvbnRyb2xOYW1lcyA9IFtcInNlYXJjaFRleHRCb3hcIiwgXCJQZXJtaXNzaW9uU2V0SWRUZXh0Qm94XCJdXHJcbiAgICAgICB0aGlzLnVzZXJQZXJtaXNzaW9uU2V0UGFnaW5nLkZpbHRlcnMgPSBbdGhpcy50ZXh0SW5wdXRGaWx0ZXIsIHRoaXMucGVybWlzc2lvblNldElkVGV4dElucHV0RmlsdGVyXVxyXG4gXHJcbiAgICAgICB0aGlzLmlzRmlsdGVyTG9hZGVkID0gdHJ1ZTtcclxuICAgIH1cclxuICBcclxuXHJcbiAgICBcclxuXHJcbiAgICAvLy8vLy8vLy8vLy8vIFN0YXJ0IGFkZCB1c2VyIFBhcnQvLy8vLy8vLy8vLy8vLy8vLy8vLy8vXHJcbiAgICBzaG93QWRkVXNlclRvUGVybWlzc2lvblNldE1vZGFsKGFkZFVzZXJUb0RlcGFydG1lbnRNb2RhbCkge1xyXG4gICAgdGhpcy51dGlsaXR5U2VydmljZS5zdGFydEJsb2NrVUkoKVxyXG4gICAgXHJcbiAgICB0aGlzLmFkZFVzZXJzVG9QZXJtaXNzaW9uU2V0Rm9ybSA9IG5ldyBGb3JtR3JvdXAoe30pXHJcbiAgICB0aGlzLmFkZFVzZXJzVG9QZXJtaXNzaW9uU2V0Rm9ybU9wdGlvbnMgPSBuZXcgRm9ybU9wdGlvbnMoKTtcclxuICAgIHRoaXMuYWRkVXNlcnNUb1Blcm1pc3Npb25TZXRGb3JtT3B0aW9ucy5Gb3JtR3JvdXAgPSB0aGlzLmFkZFVzZXJzVG9QZXJtaXNzaW9uU2V0Rm9ybVxyXG4gICAgdGhpcy5hZGRVc2Vyc1RvUGVybWlzc2lvblNldEZvcm1PcHRpb25zLkdldE1vZGVsRnVuY3Rpb24gPSB0aGlzLmdldEFkZFVzZXJUb1Blcm1pc3Npb25TZXRNb2RlbDtcclxuICAgIHRoaXMuYWRkVXNlcnNUb1Blcm1pc3Npb25TZXRGb3JtT3B0aW9ucy5TZXJ2aWNlU3VibWl0RnVuY3Rpb24gPSB0aGlzLmdldEFkZFVzZXJUb1Blcm1pc3Npb25TZXRGdW5jdGlvbjtcclxuICAgIHRoaXMuYWRkVXNlcnNUb1Blcm1pc3Npb25TZXRGb3JtT3B0aW9ucy5QYWdpbmdSZWZlcmVuY2UgPSB0aGlzLnBhZ2luZ0VsZW1lbnRcclxuXHJcbiAgICB0aGlzLnVzZXJBdXRvQ29tcGxldGUgPSBuZXcgVGFnc0lucHV0T3B0aW9ucygpO1xyXG4gICAgdGhpcy51c2VyQXV0b0NvbXBsZXRlLk5hbWUgPSBcIlVzZXJBdXRvQ29tcGxldGVcIjtcclxuICAgIHRoaXMudXNlckF1dG9Db21wbGV0ZS5MYWJlbEtleSA9IFwiVXNlcnNcIjtcclxuICAgIHRoaXMudXNlckF1dG9Db21wbGV0ZS5Jc1JlcXVpcmVkID0gdHJ1ZTtcclxuICAgIHRoaXMudXNlckF1dG9Db21wbGV0ZS5WYWx1ZSA9IG51bGw7XHJcbiAgICB0aGlzLnVzZXJBdXRvQ29tcGxldGUuQWN0aW9uVVJMID0gdGhpcy5BcGlVcmwgKyBcIkF1dG9Db21wbGV0ZVVzZXJMaXN0XCJcclxuICAgIHRoaXMudXNlckF1dG9Db21wbGV0ZS5WYWxpZGF0aW9uVG9rZW4gPSB0aGlzLmF1dGhTZXJ2aWNlLmF1dGhvcml6YXRpb25IZWFkZXJWYWx1ZSgpXHJcbiAgICB0aGlzLm1vZGFsU2VydmljZS5vcGVuKGFkZFVzZXJUb0RlcGFydG1lbnRNb2RhbCk7XHJcbiAgICB0aGlzLnV0aWxpdHlTZXJ2aWNlLnN0b3BCbG9ja1VJKClcclxuXHJcblxyXG4gIH1cclxuXHJcbiAgZ2V0QWRkVXNlclRvUGVybWlzc2lvblNldE1vZGVsID0gKCkgPT4ge1xyXG4gICAgbGV0IHBhcmFtQXJyYXk6IGFueVtdID0gW107XHJcbiAgICBsZXQgUmVzdWx0TW9kZWwgPSB0aGlzLmFkZFVzZXJzVG9QZXJtaXNzaW9uU2V0Rm9ybS52YWx1ZTtcclxuICAgIGxldCBBZGRNb2RlbDogUGVybWlzc2lvblNldFVzZXJzSURSZXF1ZXN0TW9kZWwgPSBuZXcgUGVybWlzc2lvblNldFVzZXJzSURSZXF1ZXN0TW9kZWwoKTtcclxuICAgIGZvciAobGV0IGluZGV4ID0gMDsgaW5kZXggPCBSZXN1bHRNb2RlbC5Vc2VyQXV0b0NvbXBsZXRlLmxlbmd0aDsgaW5kZXgrKykge1xyXG4gICAgICBjb25zdCBrZXkgPSBSZXN1bHRNb2RlbC5Vc2VyQXV0b0NvbXBsZXRlW2luZGV4XS5rZXk7XHJcbiAgICAgIEFkZE1vZGVsLlVzZXJzSURzLnB1c2goTnVtYmVyKGtleSkpXHJcblxyXG4gICAgfVxyXG4gICAgQWRkTW9kZWwuUGVybWlzc2lvblNldElkID0gdGhpcy5QZXJtaXNzaW9uU2V0SWQ7XHJcbiAgICBwYXJhbUFycmF5LnB1c2goQWRkTW9kZWwpO1xyXG4gICAgcmV0dXJuIHBhcmFtQXJyYXk7XHJcbiAgfVxyXG5cclxuICBnZXRBZGRVc2VyVG9QZXJtaXNzaW9uU2V0RnVuY3Rpb24gPSAoQWRkTW9kZWwpOiBPYnNlcnZhYmxlPGFueT4gPT4ge1xyXG4gICAgcmV0dXJuIHRoaXMucGVybWlzc2lvblNldFNlcnZpY2UuYWRkVXNlcnNUb1Blcm1pc3Npb25TZXQoQWRkTW9kZWwpXHJcbiAgfVxyXG5cclxuICAvLy8vLy8vLy8vLy8vIEVuZCBhZGQgVXNlciBQYXJ0Ly8vLy8vLy8vLy8vLy8vLy8vLy8vL1xyXG5cclxuXHJcblxyXG4gICAvLy8vLy8vLy8vL1N0YXJ0IGRlbGV0ZSB1c2VyIGZyb20gUGVybWlzc2lvblNldC8vLy8vLy8vLy8vLy8vLy8vLy8vLy9cclxuc2hvd0RlbGV0ZVVzZXJGcm9tUGVybWlzc2lvblNldE1vZGFsKGVuY3J5cHRlZFVzZXJJZDogc3RyaW5nKSB7XHJcbiAgdGhpcy5kZWxldGVVc2VySWQgPSBlbmNyeXB0ZWRVc2VySWQ7XHJcbiAgLy9hcnJheSBzZW50IHRvIHNlcnZpY2UgZnVuY3Rpb25cclxuICBsZXQgcGFyYW1BcnJheTogYW55W10gPSBbXTtcclxuICBwYXJhbUFycmF5LnB1c2godGhpcy5kZWxldGVVc2VySWQpO1xyXG4gIHBhcmFtQXJyYXkucHVzaCh0aGlzLlBlcm1pc3Npb25TZXRJZCk7XHJcblxyXG5cclxuICB0aGlzLmRlbGV0ZUNvbmZpcm1hdGlvbk9wdGlvbnMgPSBuZXcgQ29uZmlybWF0aW9uTW9kYWxPcHRpb25zKCk7XHJcbiAgdGhpcy5kZWxldGVDb25maXJtYXRpb25PcHRpb25zLlNlcnZpY2VTdWJtaXRGdW5jdGlvbiA9IHRoaXMuZGVsZXRlVXNlckZyb21QZXJtaXNzaW9uU2V0O1xyXG4gIHRoaXMuZGVsZXRlQ29uZmlybWF0aW9uT3B0aW9ucy5TZXJ2aWNlU3VibWl0TW9kZWwgPSBwYXJhbUFycmF5O1xyXG4gIHRoaXMuZGVsZXRlQ29uZmlybWF0aW9uT3B0aW9ucy5QYWdpbmdSZWZlcmVuY2UgPSB0aGlzLnBhZ2luZ0VsZW1lbnQ7XHJcblxyXG4gIHRoaXMuZGVsZXRlQ29udHJvbExvYWRlZCA9IHRydWU7XHJcbiAgc2V0VGltZW91dCgoKSA9PiB7XHJcbiAgICB0aGlzLkNvbmZpcm1hdGlvbk1vZGFsQ29udHJvbC5zaG93TW9kYWwoKTtcclxuICB9LCAyMDApO1xyXG59XHJcblxyXG5kZWxldGVVc2VyRnJvbVBlcm1pc3Npb25TZXQgPSAoZGVsZXRlVXNlcklkOiBzdHJpbmcsUGVyU2V0SWQ6c3RyaW5nKTogT2JzZXJ2YWJsZTxhbnk+ID0+IHtcclxuICByZXR1cm4gdGhpcy5wZXJtaXNzaW9uU2V0U2VydmljZS5kZWxldGVVc2VyRnJvbVBlcm1pc3Npb25TZXQoZGVsZXRlVXNlcklkLFBlclNldElkKTtcclxufVxyXG4vLy8vLy8vLy8vL0VuZCBkZWxldGUgdXNlciBmcm9tIGRlcGFydG1lbnQvLy8vLy8vLy8vLy8vLy8vLy8vLy8vXHJcblxyXG5maWx0ZXJVc2VyTGlzdChzZWFyY2hWYWx1ZSkge1xyXG4gIGlmIChzZWFyY2hWYWx1ZSlcclxuICAgIHRoaXMuZmlsdGVyZWRVc2VyUGVybWlzc2lvblNldFBhZ2luZ1Jlc3VsdCA9IHRoaXMudXNlclBlcm1pc3Npb25TZXRQYWdpbmdSZXN1bHQuZmlsdGVyKGl0ZW0gPT4gaXRlbS51c2VyTmFtZS50b0xvd2VyQ2FzZSgpLmluY2x1ZGVzKHNlYXJjaFZhbHVlLnRvTG93ZXJDYXNlKCkpKTtcclxuICBlbHNlXHJcbiAgICB0aGlzLmZpbHRlcmVkVXNlclBlcm1pc3Npb25TZXRQYWdpbmdSZXN1bHQgPSB0aGlzLnVzZXJQZXJtaXNzaW9uU2V0UGFnaW5nUmVzdWx0XHJcbn1cclxubmdPbkRlc3Ryb3koKTogdm9pZCB7XHJcbiAgdGhpcy5yZXF1ZXN0SGFuZGxlclNlcnZpY2UuZGVzdHJveUhhbmRsZXIoKTtcclxufVxyXG5cclxuXHJcblxyXG59XHJcbiIsIlxyXG48YmxvY2stdWk+PC9ibG9jay11aT5cclxuPCEtLSBQYWdlIENvbnRlbnQgLS0+XHJcbjxkaXYgIGNsYXNzPVwiY29udGFpbmVyLWZsdWlkXCI+XHJcbiAgPGRpdiBjbGFzcz1cImNhcmQgY2FyZC1jdXN0b20taFwiPlxyXG4gICAgPGRpdiBjbGFzcz1cImNhcmQtaGVhZGVyIGJvcmRlci0wIHB0LTVcIj5cclxuICAgICAgPGRpdiBjbGFzcz1cImNhcmQtdGl0bGUgYWxpZ24taXRlbXMtc3RhcnQgZmxleC1jb2x1bW5cIiAqbmdJZj1cImlzRmlsdGVyTG9hZGVkXCI+XHJcbiAgICAgICAgPEJCU0YtVGV4dEJveCBbb3B0aW9uc109XCJzZWFyY2hUZXh0Qm94XCIgIChPbkNoYW5nZSk9XCJmaWx0ZXJVc2VyTGlzdCgkZXZlbnQpXCIgW2dyb3VwXT1cInVzZXJQZXJtaXNzaW9uU2V0Rm9ybVwiPjwvQkJTRi1UZXh0Qm94PlxyXG4gICAgICAgIDxCQlNGLVRleHRCb3ggW2hpZGRlbl09XCJ0cnVlXCIgW29wdGlvbnNdPVwicGVybWlzc2lvblNldElkVGV4dEJveFwiIFtncm91cF09XCJ1c2VyUGVybWlzc2lvblNldEZvcm1cIj48L0JCU0YtVGV4dEJveD5cclxuICAgICAgPC9kaXY+XHJcbiAgICAgIDxkaXYgY2xhc3M9XCJjYXJkLXRvb2xiYXJcIj5cclxuICAgICAgICA8IS0tIGJlZ2luOjpNZW51IC0tPlxyXG4gICAgICAgIDxidXR0b24gdHlwZT1cImJ1dHRvblwiIGNsYXNzPVwiYnRuIGJ0bi1zbSBidG4tcHJpbWFyeVwiIHRpdGxlPVwiQWRkXCIgIChjbGljayk9XCJzaG93QWRkVXNlclRvUGVybWlzc2lvblNldE1vZGFsKEFkZFVzZXJUb1Blcm1pc3Npb25TZXRNb2RhbClcIj5cclxuICAgICAgICAgIDxpIGNsYXNzPVwiZmFzIGZhLXBsdXMgbWUtMVwiPjwvaT5cclxuICAgICAgICAgIHt7dXRpbGl0eVNlcnZpY2UuZ2V0UmVzb3VyY2VWYWx1ZShcIkFkZFwiKX19XHJcbiAgICAgICAgPC9idXR0b24+XHJcblxyXG4gICAgICAgIDwhLS0gZW5kOjpNZW51IC0tPlxyXG4gICAgICA8L2Rpdj5cclxuICAgIDwvZGl2PlxyXG4gICAgPGRpdiBjbGFzcz1cImNhcmQtYm9keSBweS0zXCI+XHJcbiAgICAgIDxkaXYgY2xhc3M9XCJ0YWJsZS1yZXNwb25zaXZlXCI+XHJcbiAgICAgICAgPCEtLWJlZ2luOjpQZXJtaXNzaW9uIGxpc3QtLT5cclxuICAgICAgICA8dGFibGUgY2xhc3M9XCJ0YWJsZSBhbGlnbi1taWRkbGUgdGFibGUtcm93LWRhc2hlZCBmcy02IGd5LTUgZGF0YVRhYmxlIG5vLWZvb3RlclwiPlxyXG4gICAgICAgICAgPHRoZWFkPlxyXG4gICAgICAgICAgICA8dHIgY2xhc3M9XCJ0ZXh0LXN0YXJ0IHRleHQtZ3JheS00MDAgZnctYm9sZGVyIGZzLTcgdGV4dC11cHBlcmNhc2UgZ3MtMFwiPlxyXG5cclxuICAgICAgICAgICAgICA8dGggY2xhc3M9XCJtaW4tdy0xNTBweFwiPnt7dXRpbGl0eVNlcnZpY2UuZ2V0UmVzb3VyY2VWYWx1ZShcIk5hbWVcIil9fTwvdGg+XHJcbiAgICAgICAgICAgICAgPHRoIGNsYXNzPVwibWluLXctMTUwcHhcIj57e3V0aWxpdHlTZXJ2aWNlLmdldFJlc291cmNlVmFsdWUoXCJFbWFpbFwiKX19PC90aD5cclxuICAgICAgICAgICAgICA8dGggY2xhc3M9XCJtaW4tdy0xNTBweFwiPnt7dXRpbGl0eVNlcnZpY2UuZ2V0UmVzb3VyY2VWYWx1ZShcIlJvbGVzXCIpfX08L3RoPlxyXG4gICAgICAgICAgICAgIDx0aCBjbGFzcz1cIm1pbi13LTUwcHhcIj57e3V0aWxpdHlTZXJ2aWNlLmdldFJlc291cmNlVmFsdWUoXCJBY3Rpb25cIil9fTwvdGg+XHJcbiAgICAgICAgICAgIDwvdHI+XHJcbiAgICAgICAgICA8L3RoZWFkPlxyXG4gICAgICAgICAgPHRib2R5IGlkPVwibGlzdGluZ0NvbnRhaW5lclwiIGNsYXNzPVwiZnctYm9sZCB0ZXh0LWdyYXktNjAwIGJvcmRlci0wXCI+XHJcblxyXG4gICAgICAgICAgICA8dHIgKm5nRm9yPVwibGV0IHVzZXIgb2YgZmlsdGVyZWRVc2VyUGVybWlzc2lvblNldFBhZ2luZ1Jlc3VsdFwiPlxyXG5cclxuICAgICAgICAgICAgICA8dGQ+XHJcbiAgICAgICAgICAgICAgICA8c3BhbiBjbGFzcz1cInRleHQtZGFya1wiPnt7dXNlci51c2VyTmFtZX19PC9zcGFuPlxyXG4gICAgICAgICAgICAgIDwvdGQ+XHJcbiAgICAgICAgICAgICAgPHRkPnt7dXNlci5lbWFpbH19PC90ZD5cclxuICAgICAgICAgICAgICA8dGQ+e3t1c2VyLnVzZXJQZXJtc2V0c319PC90ZD5cclxuICAgICAgICAgICAgICA8dGQ+XHJcbiAgICAgICAgICAgICAgICA8ZGl2PlxyXG4gICAgICAgICAgICAgICAgICA8YnV0dG9uIG1hdC1idXR0b24gW21hdE1lbnVUcmlnZ2VyRm9yXT1cIm1lbnVcIiBjbGFzcz1cImJ0biBidG4tc20gYnRuLWljb24gYnRuLWxpZ2h0IGJ0bi1hY3RpdmUtbGlnaHQtcHJpbWFyeVwiPlxyXG4gICAgICAgICAgICAgICAgICAgIDxpIGNsYXNzPVwiZmEgZmEtZWxsaXBzaXMtaFwiIGFyaWEtaGlkZGVuPVwidHJ1ZVwiPjwvaT5cclxuICAgICAgICAgICAgICAgICAgPC9idXR0b24+XHJcbiAgICAgICAgICAgICAgICAgIDxtYXQtbWVudSAjbWVudT1cIm1hdE1lbnVcIj5cclxuICAgICAgICAgICAgICAgICAgICA8YSBuZ2JEcm9wZG93bkl0ZW0gY2xhc3M9XCJkcm9wLWl0ZW0gcHgtM1wiXHJcbiAgICAgICAgICAgICAgICAgICAgKGNsaWNrKT1cInNob3dEZWxldGVVc2VyRnJvbVBlcm1pc3Npb25TZXRNb2RhbCh1c2VyLmlkRW5jcnlwdGVkKVwiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgPHNwYW4gY2xhc3M9XCJkcm9wLWxpbmsgcHgtM1wiPnt7dXRpbGl0eVNlcnZpY2UuZ2V0UmVzb3VyY2VWYWx1ZShcIkRlbGV0ZVwiKX19PC9zcGFuPlxyXG4gICAgICAgICAgICAgICAgICAgIDwvYT5cclxuICAgICAgICAgICAgICAgICAgPC9tYXQtbWVudT5cclxuICAgICAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICAgIDwvdGQ+XHJcbiAgICAgICAgICAgIDwvdHI+XHJcbiAgICAgICAgICAgIDx0ciAqbmdJZj1cImZpbHRlcmVkVXNlclBlcm1pc3Npb25TZXRQYWdpbmdSZXN1bHQubGVuZ3RoID09IDBcIj5cclxuICAgICAgICAgICAgICA8dGQgY29sc3Bhbj1cIjRcIj5cclxuICAgICAgICAgICAgICAgIDxsaWItZW1wdHktZGF0YT48L2xpYi1lbXB0eS1kYXRhPlxyXG4gICAgICAgICAgICAgIDwvdGQ+XHJcbiAgICAgICAgICAgIDwvdHI+XHJcbiAgICAgICAgICA8L3Rib2R5PlxyXG4gICAgICAgIDwvdGFibGU+XHJcblxyXG4gICAgICAgIDwhLS1lbmQ6OlBlcm1pc3Npb24gbGlzdC0tPlxyXG4gICAgICA8L2Rpdj5cclxuXHJcbiAgICA8L2Rpdj5cclxuICAgIDxkaXYgY2xhc3M9XCJjYXJkLWZvb3RlciBib3JkZXItMFwiPlxyXG4gICAgICA8QkJTRi1QYWdpbmcgKEl0ZW1zKT1cInNldFVzZXJQZXJtaXNzaW9uU2V0TGlzdFJlc3VsdCgkZXZlbnQpXCIgKm5nSWY9XCJpc0ZpbHRlckxvYWRlZFwiXHJcbiAgICAgICAgICAgICAgICAgICAgIFtvcHRpb25zXT1cInVzZXJQZXJtaXNzaW9uU2V0UGFnaW5nXCIgW2dyb3VwXT1cInVzZXJQZXJtaXNzaW9uU2V0Rm9ybVwiICNVc2VyUGVybWlzc2lvblNldFBhZ2luZ1ZpZXdFbGVtZW50PlxyXG4gICAgICAgIDwvQkJTRi1QYWdpbmc+XHJcbiAgICA8L2Rpdj5cclxuICA8L2Rpdj5cclxuXHJcbjwvZGl2PlxyXG5cclxuPCEtLWFkZCBNb2RhbC0tPlxyXG48bmctdGVtcGxhdGUgI0FkZFVzZXJUb1Blcm1pc3Npb25TZXRNb2RhbCBsZXQtbW9kYWw+XHJcbiAgPGRpdiBjbGFzcz1cIm1vZGFsLWhlYWRlciBwYi0wIGJvcmRlci0wIGp1c3RpZnktY29udGVudC1lbmRcIj5cclxuICAgIDxoNSBjbGFzcz1cIm1vZGFsLXRpdGxlXCIgaWQ9XCJleGFtcGxlTW9kYWxMYWJlbFwiPjwvaDU+XHJcbiAgICA8YnV0dG9uIHR5cGU9XCJidXR0b25cIiBkYXRhLWRpc21pc3M9XCJtb2RhbFwiIGFyaWEtbGFiZWw9XCJDbG9zZVwiIGNsYXNzPVwiYnRuIGJ0bi1zbSBidG4taWNvbiBidG4tYWN0aXZlLWNvbG9yLXByaW1hcnlcIlxyXG4gICAgICAoY2xpY2spPVwibW9kYWwuZGlzbWlzcygpXCI+XHJcbiAgICAgIDxzcGFuIGNsYXNzPVwic3ZnLWljb24gc3ZnLWljb24tMVwiPlxyXG4gICAgICAgIDxzcGFuIFtpbmxpbmVTVkddPVwiJy4vc3JjL2Fzc2V0cy9pbWFnZXMvYXJyMDYxLnN2ZydcIj48L3NwYW4+XHJcbiAgICAgIDwvc3Bhbj5cclxuICAgIDwvYnV0dG9uPlxyXG4gIDwvZGl2PlxyXG4gIDxkaXYgY2xhc3M9XCJtb2RhbC1ib2R5IHNjcm9sbC15IHB4LTEwIHB4LWxnLTE1IHB0LTAgcGItMTVcIj5cclxuICAgIDxkaXYgY2xhc3M9XCJtYi0xMyB0ZXh0LWNlbnRlclwiPlxyXG4gICAgICA8aDEgY2xhc3M9XCJtYi0zXCI+IHt7dXRpbGl0eVNlcnZpY2UuZ2V0UmVzb3VyY2VWYWx1ZShcIkFkZFwiKX19IHt7dXRpbGl0eVNlcnZpY2UuZ2V0UmVzb3VyY2VWYWx1ZShcIlVzZXJcIil9fSA8L2gxPlxyXG4gICAgPC9kaXY+XHJcbiAgICA8QkJTRi1Gb3JtIFtvcHRpb25zXT1cImFkZFVzZXJzVG9QZXJtaXNzaW9uU2V0Rm9ybU9wdGlvbnNcIj5cclxuICAgICAgPGRpdiBjbGFzcz1cInJvd1wiPlxyXG4gICAgICAgIDxkaXYgY2xhc3M9XCJjb2wtbWQtMTJcIj5cclxuICAgICAgICAgIDxCQlNGLVRhZ3NJbnB1dCBbb3B0aW9uc109XCJ1c2VyQXV0b0NvbXBsZXRlXCIgW2dyb3VwXT1cImFkZFVzZXJzVG9QZXJtaXNzaW9uU2V0Rm9ybVwiPlxyXG4gICAgICAgICAgPC9CQlNGLVRhZ3NJbnB1dD5cclxuICAgICAgICA8L2Rpdj5cclxuICAgICAgPC9kaXY+XHJcbiAgICAgIDxkaXYgY2xhc3M9XCJ0ZXh0LWNlbnRlciBwdC03XCI+XHJcbiAgICAgICAgPGJ1dHRvbiAjQ2xvc2VBZGRVc2Vyc1RvRGVwYXJ0bWVudCBpZD1cIkNsb3NlQWRkVXNlcnNUb0RlcGFydG1lbnRcIiB0eXBlPVwiYnV0dG9uXCJcclxuICAgICAgICAgIGNsYXNzPVwiYnRuIGJ0bi1saWdodCBidG4tc20gIG1lLTNcIiBkYXRhLWRpc21pc3M9XCJtb2RhbFwiIChjbGljayk9XCJtb2RhbC5kaXNtaXNzKClcIj5cclxuICAgICAgICAgIHt7dXRpbGl0eVNlcnZpY2UuZ2V0UmVzb3VyY2VWYWx1ZShcIkNhbmNlbExhYmVsXCIpfX1cclxuICAgICAgICA8L2J1dHRvbj5cclxuICAgICAgICA8YnV0dG9uIHR5cGU9XCJzdWJtaXRcIiBjbGFzcz1cImJ0biBidG4tcHJpbWFyeSBidG4tc21cIj57e3V0aWxpdHlTZXJ2aWNlLmdldFJlc291cmNlVmFsdWUoXCJTYXZlTGFiZWxcIil9fTwvYnV0dG9uPlxyXG4gICAgICA8L2Rpdj5cclxuICAgIDwvQkJTRi1Gb3JtPlxyXG4gIDwvZGl2PlxyXG48L25nLXRlbXBsYXRlPlxyXG5cclxuPCEtLWRlbGV0ZSBNb2RhbC0tPlxyXG48QkJTRi1Db25maXJtYXRpb25Nb2RhbCAqbmdJZj1cImRlbGV0ZUNvbnRyb2xMb2FkZWRcIiBbb3B0aW9uc109XCJkZWxldGVDb25maXJtYXRpb25PcHRpb25zXCIgaWQ9XCJDb25maXJtYXRpb25Nb2RhbENvbnRyb2xcIlxyXG4gICNDb25maXJtYXRpb25Nb2RhbENvbnRyb2w+PC9CQlNGLUNvbmZpcm1hdGlvbk1vZGFsPlxyXG5cclxuXHJcblxyXG5cclxuIl19