vcomply-workflow-engine 2.3.18 → 2.3.21

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 (38) hide show
  1. package/bundles/vcomply-workflow-engine.umd.js +331 -119
  2. package/bundles/vcomply-workflow-engine.umd.js.map +1 -1
  3. package/esm2015/lib/more-option/more-option.component.js +14 -14
  4. package/esm2015/lib/sharedComponents/floating-bar/floating-bar.component.js +1 -1
  5. package/esm2015/lib/sharedComponents/program-listing/program-list-model.js +2 -0
  6. package/esm2015/lib/sharedComponents/program-listing/program-list-model.ngsummary.json +1 -0
  7. package/esm2015/lib/sharedComponents/program-listing/program-listing.component.js +166 -18
  8. package/esm2015/lib/sharedComponents/program-listing/program-listing.component.ngfactory.js +126 -56
  9. package/esm2015/lib/sharedComponents/program-listing/program-listing.component.ngsummary.json +1 -1
  10. package/esm2015/lib/workflow-compliance/workflow-compliance.component.js +74 -56
  11. package/esm2015/lib/workflow-compliance/workflow-compliance.component.ngfactory.js +80 -80
  12. package/esm2015/lib/workflow-engine-container/workflow-engine-container.component.js +14 -8
  13. package/esm2015/lib/workflow-engine-container/workflow-engine-container.component.ngfactory.js +7 -4
  14. package/esm2015/lib/workflow-engine-container/workflow-engine-container.component.ngsummary.json +1 -1
  15. package/esm2015/lib/workflow-engine.module.ngfactory.js +1 -1
  16. package/esm2015/lib/workflow-program/constants.js +5 -4
  17. package/esm2015/lib/workflow-program/constants.ngsummary.json +1 -1
  18. package/esm2015/lib/workflow-program/create-program-ui/assessment-picker/assessment-picker.component.js +3 -2
  19. package/esm2015/lib/workflow-program/create-program-ui/assessment-picker/assessment-picker.component.ngfactory.js +38 -39
  20. package/esm2015/lib/workflow-program/create-program-ui/custom-field/custom-field.component.js +2 -2
  21. package/esm2015/lib/workflow-program/create-program-ui/custom-field/custom-field.component.ngfactory.js +1 -1
  22. package/esm2015/lib/workflow-program/create-program-ui/define-framework-listing/define-framework-listing.component.js +1 -1
  23. package/esm2015/lib/workflow-program/create-program-ui/pipes/assessment-resolver.pipe.js +3 -3
  24. package/esm2015/lib/workflow-program/create-program-ui/pipes/assessment-resolver.pipe.ngsummary.json +1 -1
  25. package/esm2015/lib/workflow-program/create-program-ui/role-list/role-list.component.js +2 -2
  26. package/esm2015/lib/workflow-program/create-program-ui/role-list/role-list.component.ngfactory.js +1 -1
  27. package/esm2015/lib/workflow-program/workflow-program.component.js +59 -22
  28. package/esm2015/lib/workflow-program/workflow-program.component.ngfactory.js +141 -139
  29. package/esm2015/lib/workflow-program/workflow-program.component.ngsummary.json +1 -1
  30. package/fesm2015/vcomply-workflow-engine.js +333 -122
  31. package/fesm2015/vcomply-workflow-engine.js.map +1 -1
  32. package/lib/sharedComponents/program-listing/program-list-model.d.ts +25 -0
  33. package/lib/sharedComponents/program-listing/program-listing.component.d.ts +25 -12
  34. package/lib/workflow-engine-container/workflow-engine-container.component.d.ts +2 -0
  35. package/lib/workflow-program/constants.d.ts +1 -0
  36. package/lib/workflow-program/workflow-program.component.d.ts +5 -0
  37. package/package.json +1 -1
  38. package/vcomply-workflow-engine.metadata.json +1 -1
@@ -1,5 +1,5 @@
1
1
  import { HttpParams } from '@angular/common/http';
2
- import { Component, EventEmitter, Input, Output } from '@angular/core';
2
+ import { Component, EventEmitter, Input, Output, ViewChild } from '@angular/core';
3
3
  import { ResponsibilityService } from '../../workflow-services/responsibility.service';
4
4
  export class ProgramListingComponent {
5
5
  constructor(responsibilityService) {
@@ -14,33 +14,79 @@ export class ProgramListingComponent {
14
14
  to: 0,
15
15
  totalPages: 0,
16
16
  totalRecords: 0,
17
- currentPage: 1
17
+ currentPage: 1,
18
+ AllInternalControlsProgramsCount: 0,
19
+ AllOthersProgramsCount: 0,
20
+ AllRegulationProgramsCount: 0,
21
+ AllStandardProgramsCount: 0,
22
+ SelectedInternalControlsProgramsCount: 0,
23
+ SelectedOthersProgramsCount: 0,
24
+ SelectedRegulationProgramsCount: 0,
25
+ SelectedStandardProgramsCount: 0
26
+ };
27
+ this.categoryData = {
28
+ data: [],
29
+ from: 0,
30
+ to: 0,
31
+ totalPages: 0,
32
+ totalRecords: 0,
33
+ currentPage: 1,
34
+ selectedCategories: []
18
35
  };
19
36
  this.showCategories = false;
20
37
  this.searchString = '';
38
+ this.categorySearchString = '';
21
39
  this.activeTab = 'regulations';
22
40
  this.selectedIds = [];
23
41
  this.categoryList = [];
42
+ this.programTypeObject = {
43
+ regulations: 1,
44
+ standards: 2,
45
+ internal_controls: 3,
46
+ others: 0,
47
+ };
24
48
  this.saveSelectedProgram = new EventEmitter();
25
49
  this.closeEvent = new EventEmitter();
26
50
  this.allCategories = [];
27
- this.getProgramsList();
28
51
  }
29
52
  ngOnInit() {
53
+ var _a;
30
54
  this.animation = true;
31
55
  setTimeout(() => {
32
56
  this.animation = false;
33
57
  }, 300);
34
58
  if (this.selectedProgram[0]) {
35
59
  this.currentProgram = this.selectedProgram[0];
36
- this.showCategories = true;
37
- this.getCategoriesList(this.currentProgram._id);
60
+ switch ((_a = this.currentProgram) === null || _a === void 0 ? void 0 : _a.programType) {
61
+ case 0:
62
+ this.activeTab = 'others';
63
+ break;
64
+ case 1:
65
+ this.activeTab = 'regulations';
66
+ break;
67
+ case 2:
68
+ this.activeTab = 'standards';
69
+ break;
70
+ case 3:
71
+ this.activeTab = 'internal_controls';
72
+ break;
73
+ default:
74
+ this.activeTab = 'regulations';
75
+ break;
76
+ }
77
+ this.getSelectedProgramCount();
38
78
  }
39
79
  if (this.selectedCategories) {
40
80
  this.selectedCategories.forEach(element => {
41
81
  this.selectedIds.push(element);
42
82
  });
43
83
  }
84
+ if (this.hideProgramsList) {
85
+ this.getCategoriesList();
86
+ }
87
+ else {
88
+ this.getProgramsList();
89
+ }
44
90
  }
45
91
  clickSubList() {
46
92
  this.subList = !this.subList;
@@ -51,24 +97,82 @@ export class ProgramListingComponent {
51
97
  this.getProgramsList({ search: true });
52
98
  }
53
99
  }
100
+ categorySearch(event) {
101
+ if (this.categorySearchString != event) {
102
+ this.categorySearchString = event;
103
+ this.getCategoriesList({ search: true });
104
+ }
105
+ }
54
106
  selectProgram(event, program) {
55
- var _a;
56
- if (event.target.checked) {
107
+ if (event) {
57
108
  this.currentProgram = program;
58
- this.showCategories = true;
59
109
  this.selectedIds = [];
60
110
  this.categoryList = [];
61
- this.getCategoriesList((_a = this.currentProgram) === null || _a === void 0 ? void 0 : _a._id);
111
+ this.getSelectedProgramCount();
112
+ }
113
+ }
114
+ selectAllCategories(value) {
115
+ if (value) {
116
+ if (this.categoryData.totalPages === 1) {
117
+ this.categoryData.data.forEach((ele) => {
118
+ this.selectedIds.push(ele.category_id);
119
+ this.categoryData.selectedCategories.push(ele);
120
+ });
121
+ }
122
+ }
123
+ else {
124
+ this.categoryData.selectedCategories = [];
125
+ this.selectedIds = [];
126
+ }
127
+ }
128
+ checkCategoriesSelection() {
129
+ if (this.categoryData.selectedCategories.length == this.categoryData.totalRecords) {
130
+ return 'checked';
131
+ }
132
+ else if (!this.categoryData.selectedCategories.length) {
133
+ return 'unchecked';
134
+ }
135
+ else {
136
+ return 'indeterminate';
137
+ }
138
+ }
139
+ openCategories() {
140
+ var _a, _b;
141
+ if ((_b = (_a = this.currentProgram) === null || _a === void 0 ? void 0 : _a.child_id) === null || _b === void 0 ? void 0 : _b.length) {
142
+ this.showCategories = true;
143
+ this.getCategoriesList();
144
+ }
145
+ else {
146
+ this.save();
62
147
  }
63
148
  }
64
- changeProgramsPage(event) {
65
- this.programData.currentPage = event;
149
+ backToPrograms() {
150
+ this.showCategories = false;
151
+ }
152
+ changeTab(type) {
153
+ this.activeTab = type;
154
+ this.programData.currentPage = 1;
155
+ this.searchString = '';
156
+ this.searchProgram.nativeElement.value = '';
66
157
  this.getProgramsList();
67
158
  }
159
+ changePage(event, type) {
160
+ switch (type) {
161
+ case 'program':
162
+ this.programData.currentPage = event;
163
+ this.getProgramsList();
164
+ break;
165
+ case 'category':
166
+ this.categoryData.currentPage = event;
167
+ this.getCategoriesList();
168
+ break;
169
+ }
170
+ }
68
171
  getProgramsList(paramsObject) {
69
172
  this.loader = true;
70
173
  let params = new HttpParams();
71
- if (paramsObject === null || paramsObject === void 0 ? void 0 : paramsObject.search) {
174
+ params = params.append('programType', this.programTypeObject[this.activeTab]);
175
+ if ((paramsObject === null || paramsObject === void 0 ? void 0 : paramsObject.search) || this.searchString) {
72
176
  params = params.append('searchText', this.searchString);
73
177
  }
74
178
  else {
@@ -81,6 +185,10 @@ export class ProgramListingComponent {
81
185
  this.programData.to = res.to;
82
186
  this.programData.totalPages = res.totalPages;
83
187
  this.programData.totalRecords = res.totalRecords;
188
+ this.programData.AllInternalControlsProgramsCount = res.AllInternalControlsProgramsCount;
189
+ this.programData.AllOthersProgramsCount = res.AllOthersProgramsCount;
190
+ this.programData.AllRegulationProgramsCount = res.AllRegulationProgramsCount;
191
+ this.programData.AllStandardProgramsCount = res.AllStandardProgramsCount;
84
192
  this.loader = false;
85
193
  },
86
194
  error: err => {
@@ -89,13 +197,21 @@ export class ProgramListingComponent {
89
197
  }
90
198
  });
91
199
  }
92
- getCategoriesList(program_id) {
200
+ getCategoriesList(queryObject) {
93
201
  this.loader = true;
94
202
  let params = new HttpParams();
95
- params = params.append('program_id', program_id);
203
+ params = params.append('program_id', this.currentProgram._id);
204
+ params = params.append('pageNo', this.categoryData.currentPage);
205
+ if (queryObject === null || queryObject === void 0 ? void 0 : queryObject.search) {
206
+ params = params.append('searchText', this.searchString);
207
+ }
96
208
  this.responsibilityService.getProgramsList(params).subscribe({
97
209
  next: (res) => {
98
- this.categoryList = res.data;
210
+ this.categoryData.data = res.data;
211
+ this.categoryData.from = res.from;
212
+ this.categoryData.to = res.to;
213
+ this.categoryData.totalPages = res.totalPages;
214
+ this.categoryData.totalRecords = res.totalRecords;
99
215
  this.loader = false;
100
216
  },
101
217
  error: err => {
@@ -112,15 +228,24 @@ export class ProgramListingComponent {
112
228
  // }
113
229
  cancel() {
114
230
  }
115
- selectCategory(mode, activeTab, category) {
231
+ selectCategory(mode, category) {
116
232
  if (mode) {
117
233
  this.selectedIds.push(category.category_id);
234
+ this.categoryData.selectedCategories.push(category);
118
235
  }
119
236
  else {
120
237
  const index = this.selectedIds.findIndex((element) => element == category.category_id);
121
238
  this.selectedIds.splice(index, 1);
239
+ const categoryIndex = this.categoryData.selectedCategories.findIndex((ele) => ele.category_id == category.category_id);
240
+ this.categoryData.selectedCategories.splice(categoryIndex, 1);
122
241
  }
123
242
  }
243
+ removeCategories(event) {
244
+ const categoryIndex = this.categoryData.selectedCategories.findIndex((ele) => ele.category_id == event.category_id);
245
+ this.categoryData.selectedCategories.splice(categoryIndex, 1);
246
+ const index = this.selectedIds.findIndex((element) => element == event.category_id);
247
+ this.selectedIds.splice(index, 1);
248
+ }
124
249
  close() {
125
250
  this.closeEvent.emit();
126
251
  }
@@ -134,11 +259,31 @@ export class ProgramListingComponent {
134
259
  this.selectedIds = [];
135
260
  this.categoryList = [];
136
261
  }
262
+ getSelectedProgramCount() {
263
+ this.programData.SelectedInternalControlsProgramsCount = 0;
264
+ this.programData.SelectedOthersProgramsCount = 0;
265
+ this.programData.SelectedRegulationProgramsCount = 0;
266
+ this.programData.SelectedStandardProgramsCount = 0;
267
+ switch (this.currentProgram.programType) {
268
+ case 0:
269
+ this.programData.SelectedOthersProgramsCount++;
270
+ break;
271
+ case 1:
272
+ this.programData.SelectedRegulationProgramsCount++;
273
+ break;
274
+ case 2:
275
+ this.programData.SelectedStandardProgramsCount++;
276
+ break;
277
+ case 3:
278
+ this.programData.SelectedInternalControlsProgramsCount++;
279
+ break;
280
+ }
281
+ }
137
282
  }
138
283
  ProgramListingComponent.decorators = [
139
284
  { type: Component, args: [{
140
285
  selector: 'app-program-listing',
141
- template: "<div class=\"program-listing\" [class.animate]=\"animation\">\r\n <div class=\"program-listing-head\">\r\n <h3 class=\"program-listing-title\">Select a Program</h3>\r\n </div>\r\n <div class=\"program-listing-body\">\r\n\r\n <div class=\"search-block\">\r\n <i class=\"icons\">&#xe90b;</i>\r\n <input type=\"text\" (keyup.enter)=\"handleSearch($event.target.value)\" placeholder=\"Search Programs\" />\r\n </div>\r\n <app-pagination *ngIf=\"programData.totalPages > 1\" [start]=\"programData.from\" [end]=\"programData.to\" [total]=\"programData.totalRecords\" [pageCount]=\"programData.totalPages\" [currentPage]=\"programData.currentPage\" (selectedPage)=\"changeProgramsPage($event)\"></app-pagination>\r\n <div class=\"program-listing-part\" [class.with-category-list]=\"showCategories\">\r\n <app-no-data *ngIf=\"false\" [noDataImage]=\"'https://cdn.v-comply.com/libraries/workflow-engine/assets/workflow/search-data.svg'\" [noDataText]=\"'No Data Found'\"></app-no-data>\r\n \r\n <div class=\"program-listing-item\" [class.active]=\"showCategories && currentProgram?._id == program?._id\" *ngFor=\"let program of programData.data;let i = index\" >\r\n <div class=\"table-row main-list\" \r\n [class.active]=\"currentProgram?._id == program?._id\"\r\n \r\n [class.disabled]=\"false\" (click)=\"clickSubList()\">\r\n <div class=\"table-column serial\">\r\n <div class=\"sr-no\" [appTooltip]=\"i+programData.from\" placement=\"bottom\" delay=\"0\" type=\"black\" [tooltipMandatory]=\"true\">{{i+programData.from}}</div>\r\n <app-cs-radio [name]=\"'t'\" [checked]= \"currentProgram?._id == program?._id\" (checkedEvent)=\"selectProgram($event,program)\"></app-cs-radio>\r\n <!-- <app-cs-checkbox [ngValue]=\"selectedIds.includes(category.category_id)\"\r\n (ngValueChange)=\"selectCategory($event,activeTab,category)\"></app-cs-checkbox> -->\r\n\r\n </div>\r\n <div class=\"table-column name\" (click)=\"selectProgram(true,program)\">\r\n <div class=\"name-inner\">\r\n <div class=\"name-with-count\">\r\n <div class=\"value\" [appTooltip]=\"program?.item_name\" placement=\"bottom-left\" delay=\"0\" type=\"black\" [tooltipMandatory]=\"false\">{{program?.name}}</div>\r\n <!-- <span class=\"count\">5</span> -->\r\n </div>\r\n <!-- <div class=\"within-part\" *ngIf=\"true\">\r\n <span class=\"within-box\">Within</span>\r\n <span class=\"value\" [appTooltip]=\"'South Africa > America > India'\" placement=\"bottom-left\" delay=\"0\" type=\"black\" [tooltipMandatory]=\"false\">South Africa > America > India</span>\r\n </div> -->\r\n </div>\r\n </div>\r\n <div class=\"table-column action\">\r\n <button class=\"arrow\" *ngIf=\"program?.child_id?.length\" [class.disabled]=\"false\" [disabled]=\"false\">\r\n <i *ngIf=\"!(showCategories && currentProgram?._id == program?._id)\" (click)=\"selectProgram($event,program)\" class=\"icons\">&#xe970;</i>\r\n <i *ngIf=\"showCategories && currentProgram?._id == program?._id\" class=\"icons\">&#xe9e8;</i>\r\n </button>\r\n </div>\r\n </div>\r\n <div class=\"sub-list\" *ngIf=\"showCategories && (currentProgram?._id == program?._id)\">\r\n <div class=\"table-row\" [class.active]=\"selectedIds.includes(category.category_id)\" [class.disabled]=\"false\" *ngFor=\"let category of categoryList; let i = index\">\r\n <div class=\"table-column serial\">\r\n <div class=\"sr-no\" [appTooltip]=\"i+1\" placement=\"bottom\" delay=\"0\" type=\"black\" [tooltipMandatory]=\"true\">{{i+1}}</div>\r\n <app-cs-checkbox [ngValue]=\"selectedIds.includes(category.category_id)\"\r\n (ngValueChange)=\"selectCategory($event,activeTab,category)\"></app-cs-checkbox>\r\n </div>\r\n <div class=\"table-column name\">\r\n <div class=\"name-inner\">\r\n <div class=\"value\" [appTooltip]=\"category?.item_name\" placement=\"bottom-left\" delay=\"0\" type=\"black\" [tooltipMandatory]=\"false\">{{category?.name}}</div>\r\n <!-- <div class=\"name-with-count\">\r\n <div class=\"value\" [appTooltip]=\"program?.item_name\" placement=\"bottom-left\" delay=\"0\" type=\"black\" [tooltipMandatory]=\"false\">{{program?.name}}</div>\r\n </div> -->\r\n <!-- <div class=\"within-part\" *ngIf=\"true\">\r\n <span class=\"within-box\">Within</span>\r\n <span class=\"value\" [appTooltip]=\"'South Africa > America > India'\" placement=\"bottom-left\" delay=\"0\" type=\"black\" [tooltipMandatory]=\"false\">South Africa > America > India</span>\r\n </div> -->\r\n </div>\r\n </div>\r\n <div class=\"table-column action\"></div>\r\n </div>\r\n </div>\r\n </div>\r\n </div>\r\n </div>\r\n <app-floating-bar [selectedData]=\"(currentProgram?.category_id)?[currentProgram]:[]\" [displayElementKey]=\"'name'\"\r\n [singularText]=\"'Program selected'\" [pluralText]=\"'Programs selected'\"\r\n (closeEvent)=\"save()\" (deleteEvent)=\"deleteEvent($event)\" (closeList)=\"close()\">\r\n</app-floating-bar>\r\n\r\n\r\n <app-loader *ngIf=\"loader\"></app-loader>\r\n <!-- <app-floating-bar></app-floating-bar> -->\r\n</div>",
286
+ template: "<div class=\"program-listing\" [class.animate]=\"animation\" *ngIf=\"!showCategories && !hideProgramsList\">\r\n <div class=\"program-listing-head\">\r\n <h3 class=\"program-listing-title\">Select a Program</h3>\r\n </div>\r\n <div class=\"program-listing-body\">\r\n <div class=\"filter-card-row\">\r\n <div class=\"filter-card\" [class.active]=\"activeTab == 'regulations'\" (click)=\"changeTab('regulations')\">\r\n <div class=\"left\">\r\n <label>REGULATIONS</label>\r\n <p *ngIf=\"programData?.SelectedRegulationProgramsCount> 0\">\r\n {{programData?.SelectedRegulationProgramsCount}}\r\n {{(programData?.SelectedRegulationProgramsCount==1)?'Program':'Programs'}} selected\r\n </p>\r\n </div>\r\n <span class=\"counter\">{{programData?.AllRegulationProgramsCount}}</span>\r\n </div>\r\n <div class=\"filter-card\" [class.active]=\"activeTab == 'standards'\" (click)=\"changeTab('standards')\">\r\n <div class=\"left\">\r\n <label>STANDARDS</label>\r\n <p *ngIf=\"programData?.SelectedStandardProgramsCount> 0\">\r\n {{programData?.SelectedStandardProgramsCount}}\r\n {{(programData?.SelectedStandardProgramsCount==1)?'Program':'Programs'}} selected\r\n </p>\r\n </div>\r\n <span class=\"counter\">{{programData?.AllStandardProgramsCount}}</span>\r\n </div>\r\n <div class=\"filter-card\" [class.active]=\"activeTab == 'internal_controls'\"\r\n (click)=\"changeTab('internal_controls')\">\r\n <div class=\"left\">\r\n <label>INTERNAL CONTROLS</label>\r\n <p *ngIf=\"programData?.SelectedInternalControlsProgramsCount> 0\">\r\n {{programData?.SelectedInternalControlsProgramsCount}}\r\n {{(programData?.SelectedInternalControlsProgramsCount==1)?'Program':'Programs'}} selected\r\n </p>\r\n </div>\r\n <span class=\"counter\">{{programData?.AllInternalControlsProgramsCount}}</span>\r\n </div>\r\n <div class=\"filter-card\" [class.active]=\"activeTab == 'others'\" (click)=\"changeTab('others')\">\r\n <div class=\"left\">\r\n <label>OTHERS</label>\r\n <p *ngIf=\"programData?.SelectedOthersProgramsCount> 0\">\r\n {{programData?.SelectedOthersProgramsCount}}\r\n {{(programData?.SelectedOthersProgramsCount==1)?'Program':'Programs'}} selected\r\n </p>\r\n </div>\r\n <span class=\"counter\">{{programData?.AllOthersProgramsCount}}</span>\r\n </div>\r\n </div>\r\n <div class=\"search-block\">\r\n <i class=\"icons\">&#xe90b;</i>\r\n <input type=\"text\" #searchProgram (keyup.enter)=\"handleSearch($event.target.value)\" placeholder=\"Search Programs\" />\r\n </div>\r\n <app-pagination *ngIf=\"programData.totalPages > 1\" [start]=\"programData.from\" [end]=\"programData.to\" [total]=\"programData.totalRecords\" [pageCount]=\"programData.totalPages\" [currentPage]=\"programData.currentPage\" (selectedPage)=\"changePage($event,'program')\"></app-pagination>\r\n <div class=\"program-listing-part\" [class.with-category-list]=\"showCategories\">\r\n <app-no-data *ngIf=\"programData?.data?.length==0 && !loader\" [noDataImage]=\"'https://cdn.v-comply.com/libraries/workflow-engine/assets/workflow/search-data.svg'\" [noDataText]=\"'No Data Found'\"></app-no-data>\r\n \r\n <div class=\"program-listing-item\" [class.active]=\"showCategories && currentProgram?._id == program?._id\" *ngFor=\"let program of programData.data;let i = index\" >\r\n <div class=\"table-row main-list\" \r\n [class.active]=\"currentProgram?._id == program?._id\" \r\n [class.disabled]=\"false\" (click)=\"selectProgram(true,program)\">\r\n <div class=\"table-column serial\">\r\n <div class=\"sr-no\" [appTooltip]=\"i+programData.from\" placement=\"bottom\" delay=\"0\" type=\"black\" [tooltipMandatory]=\"true\">{{i+programData.from}}</div>\r\n <app-cs-radio [name]=\"'t'\" [checked]= \"currentProgram?._id == program?._id\" (checkedEvent)=\"selectProgram($event.target.checked,program)\"></app-cs-radio>\r\n <!-- <app-cs-checkbox [ngValue]=\"selectedIds.includes(category.category_id)\"\r\n (ngValueChange)=\"selectCategory($event,activeTab,category)\"></app-cs-checkbox> -->\r\n\r\n </div>\r\n <div class=\"table-column name\" >\r\n <div class=\"name-inner\">\r\n <div class=\"name-with-count\">\r\n <div class=\"value\" [appTooltip]=\"program?.item_name\" placement=\"bottom-left\" delay=\"0\" type=\"black\" [tooltipMandatory]=\"false\">{{program?.name}}</div>\r\n <!-- <span class=\"count\">5</span> -->\r\n </div>\r\n <!-- <div class=\"within-part\" *ngIf=\"true\">\r\n <span class=\"within-box\">Within</span>\r\n <span class=\"value\" [appTooltip]=\"'South Africa > America > India'\" placement=\"bottom-left\" delay=\"0\" type=\"black\" [tooltipMandatory]=\"false\">South Africa > America > India</span>\r\n </div> -->\r\n </div>\r\n </div>\r\n <div class=\"table-column action\">\r\n <button class=\"arrow\" *ngIf=\"program?.child_id?.length\" [class.disabled]=\"false\" [disabled]=\"false\">\r\n <i *ngIf=\"!(showCategories && currentProgram?._id == program?._id)\" (click)=\"selectProgram($event,program)\" class=\"icons\">&#xe970;</i>\r\n <i *ngIf=\"showCategories && currentProgram?._id == program?._id\" class=\"icons\">&#xe9e8;</i>\r\n </button>\r\n </div>\r\n </div>\r\n \r\n </div>\r\n </div>\r\n </div>\r\n <app-floating-bar [selectedData]=\"(currentProgram?.category_id)?[currentProgram]:[]\" [displayElementKey]=\"'name'\"\r\n [singularText]=\"'Program selected'\" [pluralText]=\"'Programs selected'\"\r\n (closeEvent)=\"openCategories()\" (deleteEvent)=\"deleteEvent($event)\" (closeList)=\"close()\">\r\n</app-floating-bar>\r\n\r\n\r\n <app-loader *ngIf=\"loader\"></app-loader>\r\n <!-- <app-floating-bar></app-floating-bar> -->\r\n</div>\r\n<div class=\"program-listing\" [class.animate]=\"animation\" *ngIf=\"showCategories || hideProgramsList\">\r\n <div class=\"program-listing-head\">\r\n <h3 class=\"program-listing-title\"> <button (click)=\"backToPrograms()\"><--</button> Program > {{currentProgram?.name}} > Select Program Categories</h3>\r\n </div>\r\n <div class=\"program-listing-body\">\r\n\r\n <div class=\"search-block\">\r\n <i class=\"icons\">&#xe90b;</i>\r\n <input type=\"text\" #searchCategory (keyup.enter)=\"categorySearch($event.target.value)\" placeholder=\"Search Categories\" />\r\n </div>\r\n <app-pagination *ngIf=\"categoryData.totalPages > 1\" [start]=\"categoryData.from\" [end]=\"categoryData.to\" [total]=\"categoryData.totalRecords\" [pageCount]=\"categoryData.totalPages\" [currentPage]=\"categoryData.currentPage\" (selectedPage)=\"changePage($event,'category')\"></app-pagination>\r\n <div class=\"program-listing-part\" [class.with-category-list]=\"true\">\r\n <app-no-data *ngIf=\"categoryData?.data?.length==0 && !loader\" [noDataImage]=\"'https://cdn.v-comply.com/libraries/workflow-engine/assets/workflow/search-data.svg'\" [noDataText]=\"'No Data Found'\"></app-no-data>\r\n\r\n <ng-container>\r\n <div class=\"selected-area\" *ngIf=\"!loader\">\r\n <app-cs-checkbox *ngIf=\"checkCategoriesSelection()=='checked'\" [ngValue]=\"true\"\r\n (ngValueChange)=\"selectAllCategories(false)\">Deselect All</app-cs-checkbox>\r\n <app-cs-checkbox-indeterminate *ngIf=\"checkCategoriesSelection()=='indeterminate'\" [ngValue]=\"true\"\r\n (ngValueChange)=\"selectAllCategories(false)\">Deselect All</app-cs-checkbox-indeterminate>\r\n <app-cs-checkbox *ngIf=\"checkCategoriesSelection()=='unchecked'\" [ngValue]=\"false\"\r\n (ngValueChange)=\"selectAllCategories(true)\">Select All</app-cs-checkbox>\r\n\r\n </div>\r\n <div class=\"program-listing-item\" [class.active]=\"subList\">\r\n <div class=\"table-row main-list\" *ngFor=\"let category of categoryData.data;let i = index\"\r\n [class.active]=\"selectedIds.includes(category.category_id)\" [class.disabled]=\"false\" (click)=\"clickSubList()\">\r\n <div class=\"table-column serial\">\r\n <div class=\"sr-no\" [appTooltip]=\"i+1\" placement=\"bottom\" delay=\"0\" type=\"black\" [tooltipMandatory]=\"true\">{{i+1}}</div>\r\n <app-cs-checkbox [ngValue]=\"selectedIds.includes(category.category_id)\"\r\n (ngValueChange)=\"selectCategory($event,category)\"></app-cs-checkbox>\r\n </div>\r\n <div class=\"table-column name\">\r\n <div class=\"name-inner\">\r\n <div class=\"name-with-count\">\r\n <div class=\"value\" [appTooltip]=\"category?.name\" placement=\"bottom-left\" delay=\"0\" type=\"black\" [tooltipMandatory]=\"false\">{{category?.name}}</div> </div>\r\n <div class=\"within-part\" *ngIf=\"category?.parent_category_name?.length>0\">\r\n <span class=\"within-box\">Within</span>\r\n <span class=\"value\" [appTooltip]=\"'South Africa > America > India'\" placement=\"bottom-left\" delay=\"0\" type=\"black\" [tooltipMandatory]=\"false\">\r\n <span *ngFor=\"let parent of category?.parent_category_name;let j=index\">{{(j!=(category?.parent_category_name?.length-1))? parent+' < ':parent}} </span>\r\n </span>\r\n </div>\r\n </div>\r\n </div>\r\n <div class=\"table-column action\">\r\n \r\n </div>\r\n </div>\r\n </div>\r\n </ng-container>\r\n </div>\r\n </div>\r\n <app-floating-bar [selectedData]=\"categoryData.selectedCategories\" [displayElementKey]=\"'name'\"\r\n [singularText]=\"'Category selected'\" [pluralText]=\"'Categories selected'\"\r\n (closeEvent)=\"save()\" (deleteEvent)=\"removeCategories($event)\" (closeList)=\"backToPrograms()\">\r\n </app-floating-bar>\r\n <app-loader *ngIf=\"loader\"></app-loader>\r\n</div>",
142
287
  styles: ["@import url(\"https://cdn.v-comply.com/design-system/css/icons/icons.css\");::ng-deep .program-listing{background:#fff;border-top:3px solid #1e5dd3;position:fixed;top:0;right:500px;bottom:0;left:0;z-index:1}::ng-deep .program-listing.animate{-webkit-animation:animate-right .2s cubic-bezier(.25,.46,.45,.94) both;animation:animate-right .2s cubic-bezier(.25,.46,.45,.94) both;z-index:-1}::ng-deep .program-listing-head{background:#fbfbfb;height:42px;padding:0 18px;display:flex;align-items:center;border:1px solid #f1f1f1;border-right:none}::ng-deep .program-listing-title{color:#161b2f;font-size:15px;font-weight:500;margin:0!important;padding:0;line-height:21px}::ng-deep .program-listing-body{padding:24px 40px 24px 36px;height:calc(100vh - 112px)}::ng-deep .program-listing-body .filter-card{display:flex;align-items:center;border:1px solid #dbdbdb;border-radius:4px;height:55px;padding:12px 15px;width:100%;justify-content:space-between;cursor:pointer}::ng-deep .program-listing-body .filter-card.active{box-shadow:0 3px 6px #1e5dd31a}::ng-deep .program-listing-body .filter-card label{font-weight:600;text-transform:uppercase;color:#747576;line-height:16px;margin-left:0;font-size:11px;width:100%;pointer-events:none}::ng-deep .program-listing-body .filter-card p{line-height:16px;font-size:10px;color:#161b2f;font-weight:600;margin:0}::ng-deep .program-listing-body .filter-card span.counter{display:flex;height:32px;min-width:32px;border-radius:4px;background:#042e7d;color:#fff;font-size:11px;font-weight:600;justify-content:center;align-items:center;padding:0 5px;line-height:32px}::ng-deep .program-listing-body .filter-card .left{display:flex;flex-wrap:wrap}::ng-deep .program-listing-body .filter-card+.filter-card{margin-left:10px}::ng-deep .program-listing-body .filter-card-row{display:flex;padding-bottom:15px}::ng-deep .program-listing-body .search-block{position:relative}::ng-deep .program-listing-body .search-block input{height:44px;line-height:24px;padding:10px 15px 10px 40px;outline:none;border:1px solid #7475763f;border-radius:4px;width:100%;font-size:14px;color:#747576}::ng-deep .program-listing-body .search-block input::-moz-placeholder{font-weight:400}::ng-deep .program-listing-body .search-block input:-ms-input-placeholder{font-weight:400}::ng-deep .program-listing-body .search-block input::placeholder{font-weight:400}::ng-deep .program-listing-body .search-block input:focus{border-color:#1e5dd3}::ng-deep .program-listing-body .search-block i{position:absolute;left:17px;font-size:12px;font-weight:400;top:17px;pointer-events:none;color:#f1f1f1}::ng-deep .program-listing-body .program-listing-part{height:calc(100vh - 228px);overflow:auto;padding:0 12px 0 0;width:calc(100% + 12px)}::ng-deep .program-listing-body .program-listing-part::-webkit-scrollbar-track{background-color:#fff;position:absolute}::ng-deep .program-listing-body .program-listing-part::-webkit-scrollbar{width:3px;height:3px;background-color:transparent;position:absolute}::ng-deep .program-listing-body .program-listing-part::-webkit-scrollbar-thumb{border-radius:3px;background-color:#dbdbdb;position:absolute}::ng-deep .program-listing-body .program-listing-part.with-category-list{height:calc(100vh - 300px)}::ng-deep .program-listing-body .program-listing-part .selected-area{background:#fff;height:32px;position:sticky;top:0;z-index:1}::ng-deep .program-listing-body .program-listing-part .selected-area app-cs-checkbox,::ng-deep .program-listing-body .program-listing-part .selected-area app-cs-checkbox-indeterminate{background:#fff;border-radius:2px;width:100%;height:16px}::ng-deep .program-listing-body .program-listing-part .selected-area app-cs-checkbox-indeterminate .checkbox-item,::ng-deep .program-listing-body .program-listing-part .selected-area app-cs-checkbox .checkbox-item{width:100%;position:relative}::ng-deep .program-listing-body .program-listing-part .selected-area app-cs-checkbox-indeterminate .checkbox-item .checkbox,::ng-deep .program-listing-body .program-listing-part .selected-area app-cs-checkbox-indeterminate .checkbox-item .checkmark,::ng-deep .program-listing-body .program-listing-part .selected-area app-cs-checkbox .checkbox-item .checkbox,::ng-deep .program-listing-body .program-listing-part .selected-area app-cs-checkbox .checkbox-item .checkmark{position:absolute;top:0;left:0}::ng-deep .program-listing-body .program-listing-part .selected-area app-cs-checkbox-indeterminate .checkbox-item .value,::ng-deep .program-listing-body .program-listing-part .selected-area app-cs-checkbox .checkbox-item .value{color:#161b2f;font-size:12px;font-weight:500;margin-left:24px}::ng-deep .program-listing-body .program-listing-part .table-head .table-row{display:flex;align-items:center;justify-content:space-between}::ng-deep .program-listing-body .program-listing-part .table-head .table-row .table-column{color:#747576;font-size:11px;font-weight:500;height:28px;position:relative;width:100%;display:flex;align-items:center;padding:0 4px;text-transform:uppercase}::ng-deep .program-listing-body .program-listing-part .table-head .table-row .table-column.serial{width:32px;max-width:32px;justify-content:center}::ng-deep .program-listing-body .program-listing-part .table-head .table-row .table-column.name{width:calc(100% - 64px);min-width:calc(100% - 64px)}::ng-deep .program-listing-body .program-listing-part .table-head .table-row .table-column.action{width:32px;max-width:32px;justify-content:center}::ng-deep .program-listing-body .program-listing-part .program-listing-item{border:1px solid #f1f1f1;border-radius:2px;margin-bottom:4px}::ng-deep .program-listing-body .program-listing-part .program-listing-item .main-list{cursor:pointer}::ng-deep .program-listing-body .program-listing-part .program-listing-item.active{border-color:#1e5dd3;box-shadow:0 3px 6px #4681ef26}::ng-deep .program-listing-body .program-listing-part .program-listing-item .table-row{display:flex;align-items:center;justify-content:space-between}::ng-deep .program-listing-body .program-listing-part .program-listing-item .table-row.disabled{pointer-events:none}::ng-deep .program-listing-body .program-listing-part .program-listing-item .table-row .table-column{color:#747576;height:48px;position:relative;width:100%;display:flex;align-items:center;padding:0 4px}::ng-deep .program-listing-body .program-listing-part .program-listing-item .table-row .table-column.serial{width:32px;max-width:32px;justify-content:center}::ng-deep .program-listing-body .program-listing-part .program-listing-item .table-row .table-column.serial .sr-no{width:16px;background:#f8f8f8;-ms-writing-mode:tb-lr;writing-mode:vertical-lr;color:#747576;font-size:10px;font-weight:500;display:flex;height:100%;align-items:center;justify-content:center;position:relative;transition:all .2s ease-in-out}::ng-deep .program-listing-body .program-listing-part .program-listing-item .table-row .table-column.serial app-cs-checkbox,::ng-deep .program-listing-body .program-listing-part .program-listing-item .table-row .table-column.serial app-cs-checkbox-indeterminate,::ng-deep .program-listing-body .program-listing-part .program-listing-item .table-row .table-column.serial app-cs-radio{position:absolute;top:14px;left:8px;opacity:0;transition:all .2s ease-in-out}::ng-deep .program-listing-body .program-listing-part .program-listing-item .table-row .table-column.serial app-cs-checkbox,::ng-deep .program-listing-body .program-listing-part .program-listing-item .table-row .table-column.serial app-cs-checkbox-indeterminate{background:#fff;border-radius:2px;width:16px;height:16px;top:16px}::ng-deep .program-listing-body .program-listing-part .program-listing-item .table-row .table-column.serial app-cs-checkbox-indeterminate .checkbox-item .checkbox,::ng-deep .program-listing-body .program-listing-part .program-listing-item .table-row .table-column.serial app-cs-checkbox-indeterminate .checkbox-item .checkmark,::ng-deep .program-listing-body .program-listing-part .program-listing-item .table-row .table-column.serial app-cs-checkbox .checkbox-item .checkbox,::ng-deep .program-listing-body .program-listing-part .program-listing-item .table-row .table-column.serial app-cs-checkbox .checkbox-item .checkmark{position:absolute;top:0;left:0}::ng-deep .program-listing-body .program-listing-part .program-listing-item .table-row .table-column.name{width:calc(100% - 64px);min-width:calc(100% - 64px)}::ng-deep .program-listing-body .program-listing-part .program-listing-item .table-row .table-column.name .name-inner{width:100%}::ng-deep .program-listing-body .program-listing-part .program-listing-item .table-row .table-column.name .name-inner .value{color:#161b2f;font-size:12px;text-overflow:ellipsis;white-space:nowrap;overflow:hidden;padding-right:8px}::ng-deep .program-listing-body .program-listing-part .program-listing-item .table-row .table-column.name .name-inner .count{background:#1e5dd3;border-radius:20px;color:#fff;font-size:9px;font-weight:500;line-height:16px;min-width:24px;display:inline-block;text-align:center;padding:0 4px}::ng-deep .program-listing-body .program-listing-part .program-listing-item .table-row .table-column.name .name-inner .name-with-count{display:flex;align-items:center;width:100%}::ng-deep .program-listing-body .program-listing-part .program-listing-item .table-row .table-column.action{width:32px;max-width:32px;justify-content:center}::ng-deep .program-listing-body .program-listing-part .program-listing-item .table-row .table-column.action button.arrow{background:transparent;border:none;border-radius:0;color:#747576;font-size:12px;padding:0;margin:0;display:flex;align-items:center;justify-content:center;height:100%;width:100%}::ng-deep .program-listing-body .program-listing-part .program-listing-item .table-row .table-column.action button.disabled{opacity:.5!important;pointer-events:none}::ng-deep .program-listing-body .program-listing-part .program-listing-item .table-row.active .table-column.serial app-cs-checkbox,::ng-deep .program-listing-body .program-listing-part .program-listing-item .table-row.active .table-column.serial app-cs-checkbox-indeterminate,::ng-deep .program-listing-body .program-listing-part .program-listing-item .table-row.active .table-column.serial app-cs-radio,::ng-deep .program-listing-body .program-listing-part .program-listing-item .table-row:hover .table-column.serial app-cs-checkbox,::ng-deep .program-listing-body .program-listing-part .program-listing-item .table-row:hover .table-column.serial app-cs-checkbox-indeterminate,::ng-deep .program-listing-body .program-listing-part .program-listing-item .table-row:hover .table-column.serial app-cs-radio{opacity:1}::ng-deep .program-listing-body .program-listing-part .program-listing-item .sub-list .table-row{border-top:1px solid #f1f1f1}::ng-deep .program-listing-body .program-listing-part .program-listing-item .sub-list .table-row.active .table-column.serial .sr-no,::ng-deep .program-listing-body .program-listing-part .program-listing-item .sub-list .table-row:hover .table-column.serial .sr-no{color:#f8f8f8}::ng-deep .program-listing-body .program-listing-part .program-listing-item .sub-list .table-row.active .table-column.serial .sr-no vui-checkbox,::ng-deep .program-listing-body .program-listing-part .program-listing-item .sub-list .table-row:hover .table-column.serial .sr-no vui-checkbox{opacity:1}::ng-deep .program-listing-body .program-listing-part .program-listing-item .sub-list .table-row .table-column.name .name-inner .value{color:#747576;font-size:12px}::ng-deep .program-listing-body .program-listing-part .program-listing-item.active .table-row .table-column.serial app-cs-checkbox,::ng-deep .program-listing-body .program-listing-part .program-listing-item.active .table-row .table-column.serial app-cs-checkbox-indeterminate,::ng-deep .program-listing-body .program-listing-part .program-listing-item.active .table-row .table-column.serial app-cs-radio{opacity:1}.within-part{display:flex;align-items:center;padding-right:12px}.within-part .value{text-overflow:ellipsis!important;white-space:nowrap!important;overflow:hidden!important;font-size:11px!important;color:#747576!important}.within-box{background:#f1f1f1;border-radius:2px;color:#042e7d;font-size:9px;font-weight:600;text-transform:uppercase;padding:0 4px;margin-right:8px;line-height:12px}"]
143
288
  },] }
144
289
  ];
@@ -149,7 +294,10 @@ ProgramListingComponent.propDecorators = {
149
294
  programsList: [{ type: Input }],
150
295
  selectedProgram: [{ type: Input }],
151
296
  selectedCategories: [{ type: Input }],
297
+ hideProgramsList: [{ type: Input }],
298
+ searchProgram: [{ type: ViewChild, args: ['searchProgram',] }],
299
+ searchCategory: [{ type: ViewChild, args: ['searchCategory',] }],
152
300
  saveSelectedProgram: [{ type: Output }],
153
301
  closeEvent: [{ type: Output }]
154
302
  };
155
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicHJvZ3JhbS1saXN0aW5nLmNvbXBvbmVudC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL3Z4LXdvcmtmbG93LWVuZ2luZS9zcmMvbGliL3NoYXJlZENvbXBvbmVudHMvcHJvZ3JhbS1saXN0aW5nL3Byb2dyYW0tbGlzdGluZy5jb21wb25lbnQudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFFLFVBQVUsRUFBRSxNQUFNLHNCQUFzQixDQUFDO0FBQ2xELE9BQU8sRUFBRSxTQUFTLEVBQUUsWUFBWSxFQUFFLEtBQUssRUFBVSxNQUFNLEVBQUUsTUFBTSxlQUFlLENBQUM7QUFDL0UsT0FBTyxFQUFFLHFCQUFxQixFQUFFLE1BQU0sZ0RBQWdELENBQUM7QUFPdkYsTUFBTSxPQUFPLHVCQUF1QjtJQThCbEMsWUFBb0IscUJBQTRDO1FBQTVDLDBCQUFxQixHQUFyQixxQkFBcUIsQ0FBdUI7UUE3QmhFLGNBQVMsR0FBRyxLQUFLLENBQUM7UUFDbEIsWUFBTyxHQUFHLEtBQUssQ0FBQztRQUNoQixXQUFNLEdBQUcsS0FBSyxDQUFDO1FBSU4sdUJBQWtCLEdBQVUsRUFBRSxDQUFDO1FBRXhDLGdCQUFXLEdBQUc7WUFDWixJQUFJLEVBQUUsRUFBRTtZQUNSLElBQUksRUFBRSxDQUFDO1lBQ1AsRUFBRSxFQUFFLENBQUM7WUFDTCxVQUFVLEVBQUUsQ0FBQztZQUNiLFlBQVksRUFBRSxDQUFDO1lBQ2YsV0FBVyxFQUFFLENBQUM7U0FDZixDQUFBO1FBRUQsbUJBQWMsR0FBRyxLQUFLLENBQUM7UUFFdkIsaUJBQVksR0FBUSxFQUFFLENBQUM7UUFDdkIsY0FBUyxHQUFRLGFBQWEsQ0FBQztRQUMvQixnQkFBVyxHQUFVLEVBQUUsQ0FBQztRQUN4QixpQkFBWSxHQUFVLEVBQUUsQ0FBQztRQUdmLHdCQUFtQixHQUFHLElBQUksWUFBWSxFQUFFLENBQUM7UUFDekMsZUFBVSxHQUFHLElBQUksWUFB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dXJjZXNDb250ZW50IjpbImltcG9ydCB7IEh0dHBQYXJhbXMgfSBmcm9tICdAYW5ndWxhci9jb21tb24vaHR0cCc7XHJcbmltcG9ydCB7IENvbXBvbmVudCwgRXZlbnRFbWl0dGVyLCBJbnB1dCwgT25Jbml0LCBPdXRwdXQgfSBmcm9tICdAYW5ndWxhci9jb3JlJztcclxuaW1wb3J0IHsgUmVzcG9uc2liaWxpdHlTZXJ2aWNlIH0gZnJvbSAnLi4vLi4vd29ya2Zsb3ctc2VydmljZXMvcmVzcG9uc2liaWxpdHkuc2VydmljZSc7XHJcblxyXG5AQ29tcG9uZW50KHtcclxuICBzZWxlY3RvcjogJ2FwcC1wcm9ncmFtLWxpc3RpbmcnLFxyXG4gIHRlbXBsYXRlVXJsOiAnLi9wcm9ncmFtLWxpc3RpbmcuY29tcG9uZW50Lmh0bWwnLFxyXG4gIHN0eWxlVXJsczogWycuL3Byb2dyYW0tbGlzdGluZy5jb21wb25lbnQubGVzcyddXHJcbn0pXHJcbmV4cG9ydCBjbGFzcyBQcm9ncmFtTGlzdGluZ0NvbXBvbmVudCBpbXBsZW1lbnRzIE9uSW5pdCB7XHJcbiAgYW5pbWF0aW9uID0gZmFsc2U7XHJcbiAgc3ViTGlzdCA9IGZhbHNlO1xyXG4gIGxvYWRlciA9IGZhbHNlO1xyXG4gIEBJbnB1dCgpIHByb2dyYW1zTGlzdDogYW55O1xyXG4gIC8vIEBJbnB1dCgpIGFsbFByb2dyYW1zOiBhbnlbXSA9IFtdO1xyXG4gIEBJbnB1dCgpIHNlbGVjdGVkUHJvZ3JhbSE6IGFueTtcclxuICBASW5wdXQoKSBzZWxlY3RlZENhdGVnb3JpZXM6IGFueVtdID0gW107XHJcblxyXG4gIHByb2dyYW1EYXRhID0ge1xyXG4gICAgZGF0YTogW10sXHJcbiAgICBmcm9tOiAwLFxyXG4gICAgdG86IDAsXHJcbiAgICB0b3RhbFBhZ2VzOiAwLFxyXG4gICAgdG90YWxSZWNvcmRzOiAwLFxyXG4gICAgY3VycmVudFBhZ2U6IDFcclxuICB9XHJcblxyXG4gIHNob3dDYXRlZ29yaWVzID0gZmFsc2U7XHJcbiAgY3VycmVudFByb2dyYW0hOiBhbnk7XHJcbiAgc2VhcmNoU3RyaW5nOnN0cmluZz0nJztcclxuICBhY3RpdmVUYWI6IGFueSA9ICdyZWd1bGF0aW9ucyc7XHJcbiAgc2VsZWN0ZWRJZHM6IGFueVtdID0gW107XHJcbiAgY2F0ZWdvcnlMaXN0OiBhbnlbXSA9IFtdO1xyXG4gIGJsb2NrV2lkdGg6IGFueTtcclxuXHJcbiAgQE91dHB1dCgpIHNhdmVTZWxlY3RlZFByb2dyYW0gPSBuZXcgRXZlbnRFbWl0dGVyKCk7XHJcbiAgQE91dHB1dCgpIGNsb3NlRXZlbnQgPSBuZXcgRXZlbnRFbWl0dGVyKCk7XHJcbiAgYWxsQ2F0ZWdvcmllczogYW55W10gPSBbXTtcclxuXHJcbiAgY29uc3RydWN0b3IocHJpdmF0ZSByZXNwb25zaWJpbGl0eVNlcnZpY2U6IFJlc3BvbnNpYmlsaXR5U2VydmljZSkge1xyXG4gICAgdGhpcy5nZXRQcm9ncmFtc0xpc3QoKVxyXG4gIH1cclxuXHJcbiAgbmdPbkluaXQoKTogdm9pZCB7XHJcbiAgICB0aGlzLmFuaW1hdGlvbiA9IHRydWU7XHJcbiAgICBzZXRUaW1lb3V0KCgpID0+IHtcclxuICAgICAgdGhpcy5hbmltYXRpb24gPSBmYWxzZTtcclxuICAgIH0sIDMwMCk7XHJcbiAgICBpZih0aGlzLnNlbGVjdGVkUHJvZ3JhbVswXSl7XHJcbiAgICAgIHRoaXMuY3VycmVudFByb2dyYW0gPSB0aGlzLnNlbGVjdGVkUHJvZ3JhbVswXTtcclxuICAgICAgdGhpcy5zaG93Q2F0ZWdvcmllcyA9IHRydWU7XHJcbiAgICAgIHRoaXMuZ2V0Q2F0ZWdvcmllc0xpc3QodGhpcy5jdXJyZW50UHJvZ3JhbS5faWQpO1xyXG4gICAgfVxyXG4gICAgaWYgKHRoaXMuc2VsZWN0ZWRDYXRlZ29yaWVzKSB7XHJcbiAgICAgIHRoaXMuc2VsZWN0ZWRDYXRlZ29yaWVzLmZvckVhY2goZWxlbWVudCA9PiB7XHJcbiAgICAgICAgdGhpcy5zZWxlY3RlZElkcy5wdXNoKGVsZW1lbnQpO1xyXG4gICAgICB9KTtcclxuICAgIH1cclxuICB9XHJcblxyXG4gIGNsaWNrU3ViTGlzdCgpIHtcclxuICAgIHRoaXMuc3ViTGlzdCA9ICF0aGlzLnN1Ykxpc3Q7XHJcbiAgfVxyXG5cclxuICBoYW5kbGVTZWFyY2goZXZlbnQ6YW55KXtcclxuICAgIGlmKHRoaXMuc2VhcmNoU3RyaW5nIT1ldmVudCl7XHJcbiAgICAgIHRoaXMuc2VhcmNoU3RyaW5nID1ldmVudDtcclxuICAgICAgdGhpcy5nZXRQcm9ncmFtc0xpc3Qoe3NlYXJjaDp0cnVlfSlcclxuXHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICBzZWxlY3RQcm9ncmFtKGV2ZW50OiBhbnksIHByb2dyYW06IGFueSkge1xyXG4gICAgaWYgKGV2ZW50LnRhcmdldC5jaGVja2VkKSB7XHJcbiAgICAgIHRoaXMuY3VycmVudFByb2dyYW0gPSBwcm9ncmFtO1xyXG4gICAgICB0aGlzLnNob3dDYXRlZ29yaWVzID0gdHJ1ZTtcclxuICAgICAgdGhpcy5zZWxlY3RlZElkcz1bXTtcclxuICAgICAgdGhpcy5jYXRlZ29yeUxpc3Q9W107XHJcbiAgICAgIHRoaXMuZ2V0Q2F0ZWdvcmllc0xpc3QodGhpcy5jdXJyZW50UHJvZ3JhbT8uX2lkKTtcclxuXHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICBjaGFuZ2VQcm9ncmFtc1BhZ2UoZXZlbnQ6IGFueSkge1xyXG4gICAgdGhpcy5wcm9ncmFtRGF0YS5jdXJyZW50UGFnZSA9IGV2ZW50O1xyXG4gICAgdGhpcy5nZXRQcm9ncmFtc0xpc3QoKTtcclxuICB9XHJcblxyXG4gIGdldFByb2dyYW1zTGlzdChwYXJhbXNPYmplY3Q/OiBhbnkpIHtcclxuICAgIHRoaXMubG9hZGVyID0gdHJ1ZTtcclxuICAgIGxldCBwYXJhbXMgPSBuZXcgSHR0cFBhcmFtcygpO1xyXG4gICAgaWYocGFyYW1zT2JqZWN0Py5zZWFyY2gpe1xyXG4gICAgICBwYXJhbXMgPSBwYXJhbXMuYXBwZW5kKCdzZWFyY2hUZXh0JywgdGhpcy5zZWFyY2hTdHJpbmcpO1xyXG4gICAgfSBlbHNlIHtcclxuICAgICAgcGFyYW1zID0gcGFyYW1zLmFwcGVuZCgncGFnZU5vJywgdGhpcy5wcm9ncmFtRGF0YS5jdXJyZW50UGFnZSk7XHJcbiAgICB9XHJcblxyXG4gICAgdGhpcy5yZXNwb25zaWJpbGl0eVNlcnZpY2UuZ2V0UHJvZ3JhbXNMaXN0KHBhcmFtcykuc3Vic2NyaWJlKHtcclxuICAgICAgbmV4dDogKHJlczogYW55KSA9PiB7XHJcbiAgICAgICAgdGhpcy5wcm9ncmFtRGF0YS5kYXRhID0gcmVzLmRhdGE7XHJcbiAgICAgICAgdGhpcy5wcm9ncmFtRGF0YS5mcm9tID0gcmVzLmZyb207XHJcbiAgICAgICAgdGhpcy5wcm9ncmFtRGF0YS50byA9IHJlcy50bztcclxuICAgICAgICB0aGlzLnByb2dyYW1EYXRhLnRvdGFsUGFnZXMgPSByZXMudG90YWxQYWdlcztcclxuICAgICAgICB0aGlzLnByb2dyYW1EYXRhLnRvdGFsUmVjb3JkcyA9IHJlcy50b3RhbFJlY29yZHM7XHJcbiAgICAgICAgdGhpcy5sb2FkZXIgPSBmYWxzZTtcclxuXHJcbiAgICAgIH0sXHJcbiAgICAgIGVycm9yOiBlcnIgPT57IFxyXG4gICAgICAgIGNvbnNvbGUuZXJyb3IoZXJyKTtcclxuICAgICAgICB0aGlzLmxvYWRlciA9IGZhbHNlO1xyXG4gICAgICB9XHJcbiAgICB9KTtcclxuICB9XHJcblxyXG4gIGdldENhdGVnb3JpZXNMaXN0KHByb2dyYW1faWQ6IHN0cmluZywpIHtcclxuICAgIHRoaXMubG9hZGVyID0gdHJ1ZTtcclxuICAgIGxldCBwYXJhbXMgPSBuZXcgSHR0cFBhcmFtcygpO1xyXG4gICAgcGFyYW1zID0gcGFyYW1zLmFwcGVuZCgncHJvZ3JhbV9pZCcsIHByb2dyYW1faWQpO1xyXG5cclxuICAgICAgICAgIHRoaXMucmVzcG9uc2liaWxpdHlTZXJ2aWNlLmdldFByb2dyYW1zTGlzdChwYXJhbXMpLnN1YnNjcmliZSh7XHJcbiAgICAgICAgICAgIG5leHQ6IChyZXM6IGFueSkgPT4ge1xyXG4gICAgICAgICAgICAgIHRoaXMuY2F0ZWdvcnlMaXN0PXJlcy5kYXRhO1xyXG4gICAgICAgICAgICAgIHRoaXMubG9hZGVyID0gZmFsc2U7XHJcbiAgICAgICAgICAgIH0sXHJcbiAgICAgICAgICAgIGVycm9yOiBlcnIgPT57IFxyXG4gICAgICAgICAgICAgIGNvbnNvbGUuZXJyb3IoZXJyKTtcclxuICAgICAgICAgICAgICB0aGlzLmxvYWRlciA9IGZhbHNlO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICB9KTtcclxuICAgICAgICAgIHRoaXMuc2hvd0NhdGVnb3JpZXMgPSB0cnVlO1xyXG5cclxuICAgICAgICB9XHJcblxyXG4gIFxyXG4gIHNhdmVQcm9ncmFtKCkge1xyXG5cclxuICB9XHJcblxyXG4gIC8vIHNhdmUoKSB7XHJcbiAgLy8gICB0aGlzLmdldENhdGVnb3JpZXNMaXN0KHRoaXMuY3VycmVudFByb2dyYW0/Ll9pZCk7XHJcbiAgLy8gfVxyXG5cclxuICBjYW5jZWwoKSB7XHJcblxyXG4gIH1cclxuXHJcblxyXG5cclxuXHJcblxyXG5cclxuXHJcbiAgc2VsZWN0Q2F0ZWdvcnkobW9kZTogYW55LCBhY3RpdmVUYWI6IGFueSwgY2F0ZWdvcnk6IGFueSkge1xyXG4gICAgaWYgKG1vZGUpIHtcclxuICAgICAgdGhpcy5zZWxlY3RlZElkcy5wdXNoKGNhdGVnb3J5LmNhdGVnb3J5X2lkKTtcclxuICAgIH0gZWxzZSB7XHJcbiAgICAgIGNvbnN0IGluZGV4ID0gdGhpcy5zZWxlY3RlZElkcy5maW5kSW5kZXgoKGVsZW1lbnQ6IGFueSkgPT4gZWxlbWVudCA9PSBjYXRlZ29yeS5jYXRlZ29yeV9pZCk7XHJcbiAgICAgIHRoaXMuc2VsZWN0ZWRJZHMuc3BsaWNlKGluZGV4LCAxKTtcclxuICAgIH1cclxuXHJcbiAgfVxyXG5cclxuICBjbG9zZSgpIHtcclxuICAgIHRoaXMuY2xvc2VFdmVudC5lbWl0KCk7XHJcbiAgfVxyXG5cclxuICBzYXZlKCkge1xyXG4gICAgLy8gdGhpcy5zYXZlU2VsZWN0ZWRQcm9ncmFtLmVtaXQoeyBwcm9ncmFtOiB0aGlzLmN1cnJlbnRQcm9ncmFtLCBjYXRlZ29yaWVzOiB0aGlzLnNlbGVjdGVkQ2F0ZWdvcmllcyB9KTtcclxuICAgIHRoaXMuc2F2ZVNlbGVjdGVkUHJvZ3JhbS5lbWl0KHsgcHJvZ3JhbTogdGhpcy5jdXJyZW50UHJvZ3JhbSwgY2F0ZWdvcmllczogdGhpcy5zZWxlY3RlZElkcyB9KTtcclxuICB9XHJcblxyXG4gIGRlbGV0ZUV2ZW50KGV2ZW50OiBhbnkpIHtcclxuICAgIHRoaXMuY3VycmVudFByb2dyYW09dW5kZWZpbmVkO1xyXG4gICAgdGhpcy5zaG93Q2F0ZWdvcmllcyA9IGZhbHNlO1xyXG4gICAgIHRoaXMuc2VsZWN0ZWRJZHM9W107XHJcbiAgICAgdGhpcy5jYXRlZ29yeUxpc3Q9IFtdO1xyXG5cclxuICB9XHJcblxyXG59XHJcbiJdfQ==
303
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicHJvZ3JhbS1saXN0aW5nLmNvbXBvbmVudC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL3Z4LXdvcmtmbG93LWVuZ2luZS9zcmMvbGliL3NoYXJlZENvbXBvbmVudHMvcHJvZ3JhbS1saXN0aW5nL3Byb2dyYW0tbGlzdGluZy5jb21wb25lbnQudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFFLFVBQVUsRUFBRSxNQUFNLHNCQUFzQixDQUFDO0FBQ2xELE9BQU8sRUFBRSxTQUFTLEVBQUUsWUFBWSxFQUFFLEtBQUssRUFBVSxNQUFNLEVBQUUsU0FBUyxFQUFFLE1BQU0sZUFBZSxDQUFDO0FBQzFGLE9BQU8sRUFBRSxxQkFBcUIsRUFBRSxNQUFNLGdEQUFnRCxDQUFDO0FBUXZGLE1BQU0sT0FBTyx1QkFBdUI7SUE0RGxDLFlBQW9CLHFCQUE0QztRQUE1QywwQkFBcUIsR0FBckIscUJBQXFCLENBQXVCO1FBM0RoRSxjQUFTLEdBQUcsS0FBSyxDQUFDO1FBQ2xCLFlBQU8sR0FBRyxLQUFLLENBQUM7UUFDaEIsV0FBTSxHQUFHLEtBQUssQ0FBQztRQUlOLHVCQUFrQixHQUFVLEVBQUUsQ0FBQztRQUt4QyxnQkFBVyxHQUFnQjtZQUN6QixJQUFJLEVBQUUsRUFBRTtZQUNSLElBQUksRUFBRSxDQUFDO1lBQ1AsRUFBRSxFQUFFLENBQUM7WUFDTCxVQUFVLEVBQUUsQ0FBQztZQUNiLFlBQVksRUFBRSxDQUFDO1lBQ2YsV0FBVyxFQUFFLENBQUM7WUFDZCxnQ0FBZ0MsRUFBRSxDQUFDO1lBQ25DLHNCQUFzQixFQUFFLENBQUM7WUFDekIsMEJBQTBCLEVBQUUsQ0FBQztZQUM3Qix3QkFBd0IsRUFBRSxDQUFDO1lBQzNCLHFDQUFxQyxFQUFFLENBQUM7WUFDeEMsMkJBQTJCLEVBQUUsQ0FBQztZQUM5QiwrQkFBK0IsRUFBRSxDQUFDO1lBQ2xDLDZCQUE2QixFQUFFLENBQUM7U0FDakMsQ0FB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V0FBVyxHQUFHLEVBQUUsQ0FBQztRQUN0QixJQUFJLENBQUMsWUFBWSxHQUFHLEVBQUUsQ0FBQztJQUV6QixDQUFDO0lBRUQsdUJBQXVCO1FBQ3JCLElBQUksQ0FBQyxXQUFXLENBQUMscUNBQXFDLEdBQUcsQ0FBQyxDQUFDO1FBQzNELElBQUksQ0FBQyxXQUFXLENBQUMsMkJBQTJCLEdBQUcsQ0FBQyxDQUFDO1FBQ2pELElBQUksQ0FBQyxXQUFXLENBQUMsK0JBQStCLEdBQUcsQ0FBQyxDQUFDO1FBQ3JELElBQUksQ0FBQyxXQUFXLENBQUMsNkJBQTZCLEdBQUcsQ0FBQyxDQUFDO1FBQ25ELFFBQVEsSUFBSSxDQUFDLGNBQWMsQ0FBQyxXQUFXLEVBQUU7WUFDdkMsS0FBSyxDQUFDO2dCQUNKLElBQUksQ0FBQyxXQUFXLENBQUMsMkJBQTJCLEVBQUUsQ0FBQztnQkFDL0MsTUFBTTtZQUNSLEtBQUssQ0FBQztnQkFDSixJQUFJLENBQUMsV0FBVyxDQUFDLCtCQUErQixFQUFFLENBQUM7Z0JBQ25ELE1BQU07WUFDUixLQUFLLENBQUM7Z0JBQ0osSUFBSSxDQUFDLFdBQVcsQ0FBQyw2QkFBNkIsRUFBRSxDQUFDO2dCQUNqRCxNQUFNO1lBQ1IsS0FBSyxDQUFDO2dCQUNKLElBQUksQ0FBQyxXQUFXLENBQUMscUNBQXFDLEVBQUUsQ0FBQztnQkFDekQsTUFBTTtTQUVUO0lBQ0gsQ0FBQzs7O1lBNVVGLFNBQVMsU0FBQztnQkFDVCxRQUFRLEVBQUUscUJBQXFCO2dCQUMvQixxOVdBQStDOzthQUVoRDs7O1lBUFEscUJBQXFCOzs7MkJBWTNCLEtBQUs7OEJBRUwsS0FBSztpQ0FDTCxLQUFLOytCQUNMLEtBQUs7NEJBQ0wsU0FBUyxTQUFDLGVBQWU7NkJBQ3pCLFNBQVMsU0FBQyxnQkFBZ0I7a0NBOEMxQixNQUFNO3lCQUNOLE1BQU0iLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBIdHRwUGFyYW1zIH0gZnJvbSAnQGFuZ3VsYXIvY29tbW9uL2h0dHAnO1xyXG5pbXBvcnQgeyBDb21wb25lbnQsIEV2ZW50RW1pdHRlciwgSW5wdXQsIE9uSW5pdCwgT3V0cHV0LCBWaWV3Q2hpbGQgfSBmcm9tICdAYW5ndWxhci9jb3JlJztcclxuaW1wb3J0IHsgUmVzcG9uc2liaWxpdHlTZXJ2aWNlIH0gZnJvbSAnLi4vLi4vd29ya2Zsb3ctc2VydmljZXMvcmVzcG9uc2liaWxpdHkuc2VydmljZSc7XHJcbmltcG9ydCB7IGNhdGVnb3J5TGlzdCwgcHJvZ3JhbUxpc3QgfSBmcm9tICcuL3Byb2dyYW0tbGlzdC1tb2RlbCc7XHJcblxyXG5AQ29tcG9uZW50KHtcclxuICBzZWxlY3RvcjogJ2FwcC1wcm9ncmFtLWxpc3RpbmcnLFxyXG4gIHRlbXBsYXRlVXJsOiAnLi9wcm9ncmFtLWxpc3RpbmcuY29tcG9uZW50Lmh0bWwnLFxyXG4gIHN0eWxlVXJsczogWycuL3Byb2dyYW0tbGlzdGluZy5jb21wb25lbnQubGVzcyddXHJcbn0pXHJcbmV4cG9ydCBjbGFzcyBQcm9ncmFtTGlzdGluZ0NvbXBvbmVudCBpbXBsZW1lbnRzIE9uSW5pdCB7XHJcbiAgYW5pbWF0aW9uID0gZmFsc2U7XHJcbiAgc3ViTGlzdCA9IGZhbHNlO1xyXG4gIGxvYWRlciA9IGZhbHNlO1xyXG4gIEBJbnB1dCgpIHByb2dyYW1zTGlzdDogYW55O1xyXG4gIC8vIEBJbnB1dCgpIGFsbFByb2dyYW1zOiBhbnlbXSA9IFtdO1xyXG4gIEBJbnB1dCgpIHNlbGVjdGVkUHJvZ3JhbSE6IGFueTtcclxuICBASW5wdXQoKSBzZWxlY3RlZENhdGVnb3JpZXM6IGFueVtdID0gW107XHJcbiAgQElucHV0KCkgaGlkZVByb2dyYW1zTGlzdCE6IGFueTtcclxuICBAVmlld0NoaWxkKCdzZWFyY2hQcm9ncmFtJykgc2VhcmNoUHJvZ3JhbSE6YW55OyBcclxuICBAVmlld0NoaWxkKCdzZWFyY2hDYXRlZ29yeScpIHNlYXJjaENhdGVnb3J5ITphbnk7IFxyXG5cclxuICBwcm9ncmFtRGF0YTogcHJvZ3JhbUxpc3QgPSB7XHJcbiAgICBkYXRhOiBbXSxcclxuICAgIGZyb206IDAsXHJcbiAgICB0bzogMCxcclxuICAgIHRvdGFsUGFnZXM6IDAsXHJcbiAgICB0b3RhbFJlY29yZHM6IDAsXHJcbiAgICBjdXJyZW50UGFnZTogMSxcclxuICAgIEFsbEludGVybmFsQ29udHJvbHNQcm9ncmFtc0NvdW50OiAwLFxyXG4gICAgQWxsT3RoZXJzUHJvZ3JhbXNDb3VudDogMCxcclxuICAgIEFsbFJlZ3VsYXRpb25Qcm9ncmFtc0NvdW50OiAwLFxyXG4gICAgQWxsU3RhbmRhcmRQcm9ncmFtc0NvdW50OiAwLFxyXG4gICAgU2VsZWN0ZWRJbnRlcm5hbENvbnRyb2xzUHJvZ3JhbXNDb3VudDogMCxcclxuICAgIFNlbGVjdGVkT3RoZXJzUHJvZ3JhbXNDb3VudDogMCxcclxuICAgIFNlbGVjdGVkUmVndWxhdGlvblByb2dyYW1zQ291bnQ6IDAsXHJcbiAgICBTZWxlY3RlZFN0YW5kYXJkUHJvZ3JhbXNDb3VudDogMFxyXG4gIH1cclxuXHJcbiAgY2F0ZWdvcnlEYXRhOiBjYXRlZ29yeUxpc3QgPSB7XHJcbiAgICBkYXRhOiBbXSxcclxuICAgIGZyb206IDAsXHJcbiAgICB0bzogMCxcclxuICAgIHRvdGFsUGFnZXM6IDAsXHJcbiAgICB0b3RhbFJlY29yZHM6IDAsXHJcbiAgICBjdXJyZW50UGFnZTogMSxcclxuICAgIHNlbGVjdGVkQ2F0ZWdvcmllczogW11cclxuICB9XHJcblxyXG4gIHNob3dDYXRlZ29yaWVzID0gZmFsc2U7XHJcbiAgY3VycmVudFByb2dyYW0hOiBhbnk7XHJcbiAgc2VhcmNoU3RyaW5nOiBzdHJpbmcgPSAnJztcclxuICBjYXRlZ29yeVNlYXJjaFN0cmluZzogc3RyaW5nID0gJyc7XHJcblxyXG4gIGFjdGl2ZVRhYjogJ3JlZ3VsYXRpb25zJyB8ICdzdGFuZGFyZHMnIHwgJ2ludGVybmFsX2NvbnRyb2xzJyB8ICdvdGhlcnMnID0gJ3JlZ3VsYXRpb25zJ1xyXG4gIHNlbGVjdGVkSWRzOiBhbnlbXSA9IFtdO1xyXG4gIGNhdGVnb3J5TGlzdDogYW55W10gPSBbXTtcclxuICBibG9ja1dpZHRoOiBhbnk7XHJcblxyXG4gIHByb2dyYW1UeXBlT2JqZWN0ID0ge1xyXG4gICAgcmVndWxhdGlvbnM6IDEsXHJcbiAgICBzdGFuZGFyZHM6IDIsXHJcbiAgICBpbnRlcm5hbF9jb250cm9sczogMyxcclxuICAgIG90aGVyczogMCxcclxuICB9XHJcblxyXG4gIEBPdXRwdXQoKSBzYXZlU2VsZWN0ZWRQcm9ncmFtID0gbmV3IEV2ZW50RW1pdHRlcigpO1xyXG4gIEBPdXRwdXQoKSBjbG9zZUV2ZW50ID0gbmV3IEV2ZW50RW1pdHRlcigpO1xyXG4gIGFsbENhdGVnb3JpZXM6IGFueVtdID0gW107XHJcblxyXG4gIGNvbnN0cnVjdG9yKHByaXZhdGUgcmVzcG9uc2liaWxpdHlTZXJ2aWNlOiBSZXNwb25zaWJpbGl0eVNlcnZpY2UpIHtcclxuICB9XHJcblxyXG4gIG5nT25Jbml0KCk6IHZvaWQge1xyXG4gICAgdGhpcy5hbmltYXRpb24gPSB0cnVlO1xyXG4gICAgc2V0VGltZW91dCgoKSA9PiB7XHJcbiAgICAgIHRoaXMuYW5pbWF0aW9uID0gZmFsc2U7XHJcbiAgICB9LCAzMDApO1xyXG4gICAgaWYgKHRoaXMuc2VsZWN0ZWRQcm9ncmFtWzBdKSB7XHJcbiAgICAgIHRoaXMuY3VycmVudFByb2dyYW0gPSB0aGlzLnNlbGVjdGVkUHJvZ3JhbVswXTtcclxuICAgICAgc3dpdGNoICh0aGlzLmN1cnJlbnRQcm9ncmFtPy5wcm9ncmFtVHlwZSkge1xyXG4gICAgICAgIGNhc2UgMDpcclxuICAgICAgICAgIHRoaXMuYWN0aXZlVGFiID0gJ290aGVycyc7XHJcbiAgICAgICAgICBicmVhaztcclxuICAgICAgICBjYXNlIDE6XHJcbiAgICAgICAgICB0aGlzLmFjdGl2ZVRhYiA9ICdyZWd1bGF0aW9ucyc7XHJcbiAgICAgICAgICBicmVhaztcclxuICAgICAgICBjYXNlIDI6XHJcbiAgICAgICAgICB0aGlzLmFjdGl2ZVRhYiA9ICdzdGFuZGFyZHMnO1xyXG4gICAgICAgICAgYnJlYWs7XHJcbiAgICAgICAgY2FzZSAzOlxyXG4gICAgICAgICAgdGhpcy5hY3RpdmVUYWIgPSAnaW50ZXJuYWxfY29udHJvbHMnO1xyXG4gICAgICAgICAgYnJlYWs7XHJcbiAgICAgICAgZGVmYXVsdDpcclxuICAgICAgICAgIHRoaXMuYWN0aXZlVGFiID0gJ3JlZ3VsYXRpb25zJztcclxuICAgICAgICAgIGJyZWFrO1xyXG4gICAgICB9XHJcbiAgICAgIHRoaXMuZ2V0U2VsZWN0ZWRQcm9ncmFtQ291bnQoKTtcclxuICAgIH1cclxuICAgIGlmICh0aGlzLnNlbGVjdGVkQ2F0ZWdvcmllcykge1xyXG4gICAgICB0aGlzLnNlbGVjdGVkQ2F0ZWdvcmllcy5mb3JFYWNoKGVsZW1lbnQgPT4ge1xyXG4gICAgICAgIHRoaXMuc2VsZWN0ZWRJZHMucHVzaChlbGVtZW50KTtcclxuICAgICAgfSk7XHJcbiAgICB9XHJcbiAgICBpZih0aGlzLmhpZGVQcm9ncmFtc0xpc3Qpe1xyXG4gICAgICB0aGlzLmdldENhdGVnb3JpZXNMaXN0KCk7XHJcbiAgICB9IGVsc2Uge1xyXG4gICAgICB0aGlzLmdldFByb2dyYW1zTGlzdCgpO1xyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgY2xpY2tTdWJMaXN0KCkge1xyXG4gICAgdGhpcy5zdWJMaXN0ID0gIXRoaXMuc3ViTGlzdDtcclxuICB9XHJcblxyXG4gIGhhbmRsZVNlYXJjaChldmVudDogYW55KSB7XHJcbiAgICBpZiAodGhpcy5zZWFyY2hTdHJpbmcgIT0gZXZlbnQpIHtcclxuICAgICAgdGhpcy5zZWFyY2hTdHJpbmcgPSBldmVudDtcclxuICAgICAgdGhpcy5nZXRQcm9ncmFtc0xpc3QoeyBzZWFyY2g6IHRydWUgfSlcclxuICAgIH1cclxuICB9XHJcbiAgY2F0ZWdvcnlTZWFyY2goZXZlbnQ6IGFueSkge1xyXG4gICAgaWYgKHRoaXMuY2F0ZWdvcnlTZWFyY2hTdHJpbmcgIT0gZXZlbnQpIHtcclxuICAgICAgdGhpcy5jYXRlZ29yeVNlYXJjaFN0cmluZyA9IGV2ZW50O1xyXG4gICAgICB0aGlzLmdldENhdGVnb3JpZXNMaXN0KHsgc2VhcmNoOiB0cnVlIH0pXHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICBzZWxlY3RQcm9ncmFtKGV2ZW50OiBhbnksIHByb2dyYW06IGFueSkge1xyXG4gICAgaWYgKGV2ZW50KSB7XHJcbiAgICAgIHRoaXMuY3VycmVudFByb2dyYW0gPSBwcm9ncmFtO1xyXG4gICAgICB0aGlzLnNlbGVjdGVkSWRzID0gW107XHJcbiAgICAgIHRoaXMuY2F0ZWdvcnlMaXN0ID0gW107XHJcbiAgICAgIHRoaXMuZ2V0U2VsZWN0ZWRQcm9ncmFtQ291bnQoKTtcclxuICAgIH1cclxuICB9XHJcblxyXG4gIHNlbGVjdEFsbENhdGVnb3JpZXModmFsdWU6Ym9vbGVhbil7XHJcbiAgICBpZih2YWx1ZSl7XHJcbiAgICAgICAgaWYodGhpcy5jYXRlZ29yeURhdGEudG90YWxQYWdlcz09PTEpe1xyXG4gICAgICAgICAgdGhpcy5jYXRlZ29yeURhdGEuZGF0YS5mb3JFYWNoKChlbGU6YW55KT0+e1xyXG4gICAgICAgICAgICB0aGlzLnNlbGVjdGVkSWRzLnB1c2goZWxlLmNhdGVnb3J5X2lkKTtcclxuICAgICAgICAgICAgdGhpcy5jYXRlZ29yeURhdGEuc2VsZWN0ZWRDYXRlZ29yaWVzLnB1c2goZWxlKTtcclxuICAgICAgICAgIH0pXHJcbiAgICB9XHJcbiAgICB9ZWxzZXtcclxuICAgICAgdGhpcy5jYXRlZ29yeURhdGEuc2VsZWN0ZWRDYXRlZ29yaWVzID1bXVxyXG4gICAgICB0aGlzLnNlbGVjdGVkSWRzPVtdO1xyXG5cclxuICAgIH1cclxuICBcclxuXHJcbiAgfVxyXG5cclxuICBjaGVja0NhdGVnb3JpZXNTZWxlY3Rpb24oKSB7XHJcblxyXG4gICAgaWYgKCB0aGlzLmNhdGVnb3J5RGF0YS5zZWxlY3RlZENhdGVnb3JpZXMubGVuZ3RoPT10aGlzLmNhdGVnb3J5RGF0YS50b3RhbFJlY29yZHMpIHtcclxuICAgICAgcmV0dXJuICdjaGVja2VkJztcclxuICAgIH0gZWxzZSBpZiAoIXRoaXMuY2F0ZWdvcnlEYXRhLnNlbGVjdGVkQ2F0ZWdvcmllcy5sZW5ndGgpIHtcclxuICAgICAgcmV0dXJuICd1bmNoZWNrZWQnO1xyXG4gICAgfSBlbHNlIHtcclxuICAgICAgcmV0dXJuICdpbmRldGVybWluYXRlJ1xyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgb3BlbkNhdGVnb3JpZXMoKSB7XHJcbiAgICBpZiAodGhpcy5jdXJyZW50UHJvZ3JhbT8uY2hpbGRfaWQ/Lmxlbmd0aCkge1xyXG4gICAgICB0aGlzLnNob3dDYXRlZ29yaWVzID0gdHJ1ZTtcclxuICAgICAgdGhpcy5nZXRDYXRlZ29yaWVzTGlzdCgpO1xyXG4gICAgfSBlbHNlIHtcclxuICAgICAgdGhpcy5zYXZlKCk7XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICBiYWNrVG9Qcm9ncmFtcygpIHtcclxuICAgIHRoaXMuc2hvd0NhdGVnb3JpZXMgPSBmYWxzZTtcclxuICB9XHJcblxyXG5cclxuICBjaGFuZ2VUYWIodHlwZTogJ3JlZ3VsYXRpb25zJyB8ICdzdGFuZGFyZHMnIHwgJ2ludGVybmFsX2NvbnRyb2xzJyB8ICdvdGhlcnMnKSB7XHJcbiAgICB0aGlzLmFjdGl2ZVRhYiA9IHR5cGU7XHJcbiAgICB0aGlzLnByb2dyYW1EYXRhLmN1cnJlbnRQYWdlID0gMTtcclxuICAgIHRoaXMuc2VhcmNoU3RyaW5nID0gJyc7XHJcbiAgICB0aGlzLnNlYXJjaFByb2dyYW0ubmF0aXZlRWxlbWVudC52YWx1ZSA9ICcnO1xyXG4gICAgdGhpcy5nZXRQcm9ncmFtc0xpc3QoKTtcclxuICB9XHJcblxyXG4gIGNoYW5nZVBhZ2UoZXZlbnQ6IGFueSwgdHlwZTogJ2NhdGVnb3J5JyB8ICdwcm9ncmFtJykge1xyXG4gICAgc3dpdGNoICh0eXBlKSB7XHJcbiAgICAgIGNhc2UgJ3Byb2dyYW0nOlxyXG4gICAgICAgIHRoaXMucHJvZ3JhbURhdGEuY3VycmVudFBhZ2UgPSBldmVudDtcclxuICAgICAgICB0aGlzLmdldFByb2dyYW1zTGlzdCgpO1xyXG4gICAgICAgIGJyZWFrO1xyXG4gICAgICBjYXNlICdjYXRlZ29yeSc6XHJcbiAgICAgICAgdGhpcy5jYXRlZ29yeURhdGEuY3VycmVudFBhZ2UgPSBldmVudDtcclxuICAgICAgICB0aGlzLmdldENhdGVnb3JpZXNMaXN0KCk7XHJcbiAgICAgICAgYnJlYWs7XHJcbiAgICB9XHJcblxyXG4gIH1cclxuXHJcblxyXG5cclxuICBnZXRQcm9ncmFtc0xpc3QocGFyYW1zT2JqZWN0PzogYW55KSB7XHJcbiAgICB0aGlzLmxvYWRlciA9IHRydWU7XHJcbiAgICBsZXQgcGFyYW1zID0gbmV3IEh0dHBQYXJhbXMoKTtcclxuICAgIHBhcmFtcyA9IHBhcmFtcy5hcHBlbmQoJ3Byb2dyYW1UeXBlJywgdGhpcy5wcm9ncmFtVHlwZU9iamVjdFt0aGlzLmFjdGl2ZVRhYl0pO1xyXG4gICAgaWYgKHBhcmFtc09iamVjdD8uc2VhcmNoIHx8IHRoaXMuc2VhcmNoU3RyaW5nKSB7XHJcbiAgICAgIHBhcmFtcyA9IHBhcmFtcy5hcHBlbmQoJ3NlYXJjaFRleHQnLCB0aGlzLnNlYXJjaFN0cmluZyk7XHJcbiAgICB9IGVsc2Uge1xyXG4gICAgICBwYXJhbXMgPSBwYXJhbXMuYXBwZW5kKCdwYWdlTm8nLCB0aGlzLnByb2dyYW1EYXRhLmN1cnJlbnRQYWdlKTtcclxuICAgIH1cclxuXHJcbiAgICB0aGlzLnJlc3BvbnNpYmlsaXR5U2VydmljZS5nZXRQcm9ncmFtc0xpc3QocGFyYW1zKS5zdWJzY3JpYmUoe1xyXG4gICAgICBuZXh0OiAocmVzOiBhbnkpID0+IHtcclxuICAgICAgICB0aGlzLnByb2dyYW1EYXRhLmRhdGEgPSByZXMuZGF0YTtcclxuICAgICAgICB0aGlzLnByb2dyYW1EYXRhLmZyb20gPSByZXMuZnJvbTtcclxuICAgICAgICB0aGlzLnByb2dyYW1EYXRhLnRvID0gcmVzLnRvO1xyXG4gICAgICAgIHRoaXMucHJvZ3JhbURhdGEudG90YWxQYWdlcyA9IHJlcy50b3RhbFBhZ2VzO1xyXG4gICAgICAgIHRoaXMucHJvZ3JhbURhdGEudG90YWxSZWNvcmRzID0gcmVzLnRvdGFsUmVjb3JkcztcclxuICAgICAgICB0aGlzLnByb2dyYW1EYXRhLkFsbEludGVybmFsQ29udHJvbHNQcm9ncmFtc0NvdW50ID0gcmVzLkFsbEludGVybmFsQ29udHJvbHNQcm9ncmFtc0NvdW50O1xyXG4gICAgICAgIHRoaXMucHJvZ3JhbURhdGEuQWxsT3RoZXJzUHJvZ3JhbXNDb3VudCA9IHJlcy5BbGxPdGhlcnNQcm9ncmFtc0NvdW50O1xyXG4gICAgICAgIHRoaXMucHJvZ3JhbURhdGEuQWxsUmVndWxhdGlvblByb2dyYW1zQ291bnQgPSByZXMuQWxsUmVndWxhdGlvblByb2dyYW1zQ291bnQ7XHJcbiAgICAgICAgdGhpcy5wcm9ncmFtRGF0YS5BbGxTdGFuZGFyZFByb2dyYW1zQ291bnQgPSByZXMuQWxsU3RhbmRhcmRQcm9ncmFtc0NvdW50O1xyXG4gICAgICAgIHRoaXMubG9hZGVyID0gZmFsc2U7XHJcblxyXG4gICAgICB9LFxyXG4gICAgICBlcnJvcjogZXJyID0+IHtcclxuICAgICAgICBjb25zb2xlLmVycm9yKGVycik7XHJcbiAgICAgICAgdGhpcy5sb2FkZXIgPSBmYWxzZTtcclxuICAgICAgfVxyXG4gICAgfSk7XHJcbiAgfVxyXG5cclxuICBnZXRDYXRlZ29yaWVzTGlzdChxdWVyeU9iamVjdD86IGFueSkge1xyXG4gICAgdGhpcy5sb2FkZXIgPSB0cnVlO1xyXG4gICAgbGV0IHBhcmFtcyA9IG5ldyBIdHRwUGFyYW1zKCk7XHJcbiAgICBwYXJhbXMgPSBwYXJhbXMuYXBwZW5kKCdwcm9ncmFtX2lkJywgdGhpcy5jdXJyZW50UHJvZ3JhbS5faWQpO1xyXG4gICAgcGFyYW1zID0gcGFyYW1zLmFwcGVuZCgncGFnZU5vJywgdGhpcy5jYXRlZ29yeURhdGEuY3VycmVudFBhZ2UpO1xyXG4gICAgaWYgKHF1ZXJ5T2JqZWN0Py5zZWFyY2gpIHtcclxuICAgICAgcGFyYW1zID0gcGFyYW1zLmFwcGVuZCgnc2VhcmNoVGV4dCcsIHRoaXMuc2VhcmNoU3RyaW5nKTtcclxuICAgIH1cclxuXHJcbiAgICB0aGlzLnJlc3BvbnNpYmlsaXR5U2VydmljZS5nZXRQcm9ncmFtc0xpc3QocGFyYW1zKS5zdWJzY3JpYmUoe1xyXG4gICAgICBuZXh0OiAocmVzOiBhbnkpID0+IHtcclxuICAgICAgICB0aGlzLmNhdGVnb3J5RGF0YS5kYXRhID0gcmVzLmRhdGE7XHJcbiAgICAgICAgdGhpcy5jYXRlZ29yeURhdGEuZnJvbSA9IHJlcy5mcm9tO1xyXG4gICAgICAgIHRoaXMuY2F0ZWdvcnlEYXRhLnRvID0gcmVzLnRvO1xyXG4gICAgICAgIHRoaXMuY2F0ZWdvcnlEYXRhLnRvdGFsUGFnZXMgPSByZXMudG90YWxQYWdlcztcclxuICAgICAgICB0aGlzLmNhdGVnb3J5RGF0YS50b3RhbFJlY29yZHMgPSByZXMudG90YWxSZWNvcmRzO1xyXG5cclxuICAgICAgICB0aGlzLmxvYWRlciA9IGZhbHNlO1xyXG4gICAgICB9LFxyXG4gICAgICBlcnJvcjogZXJyID0+IHtcclxuICAgICAgICBjb25zb2xlLmVycm9yKGVycik7XHJcbiAgICAgICAgdGhpcy5sb2FkZXIgPSBmYWxzZTtcclxuICAgICAgfVxyXG4gICAgfSk7XHJcbiAgICB0aGlzLnNob3dDYXRlZ29yaWVzID0gdHJ1ZTtcclxuXHJcbiAgfVxyXG5cclxuXHJcbiAgc2F2ZVByb2dyYW0oKSB7XHJcblxyXG4gIH1cclxuXHJcbiAgLy8gc2F2ZSgpIHtcclxuICAvLyAgIHRoaXMuZ2V0Q2F0ZWdvcmllc0xpc3QodGhpcy5jdXJyZW50UHJvZ3JhbT8uX2lkKTtcclxuICAvLyB9XHJcblxyXG4gIGNhbmNlbCgpIHtcclxuXHJcbiAgfVxyXG5cclxuXHJcblxyXG5cclxuXHJcblxyXG5cclxuICBzZWxlY3RDYXRlZ29yeShtb2RlOiBhbnksIGNhdGVnb3J5OiBhbnkpIHtcclxuICAgIGlmIChtb2RlKSB7XHJcbiAgICAgIHRoaXMuc2VsZWN0ZWRJZHMucHVzaChjYXRlZ29yeS5jYXRlZ29yeV9pZCk7XHJcbiAgICAgIHRoaXMuY2F0ZWdvcnlEYXRhLnNlbGVjdGVkQ2F0ZWdvcmllcy5wdXNoKGNhdGVnb3J5KTtcclxuICAgIH0gZWxzZSB7XHJcbiAgICAgIGNvbnN0IGluZGV4ID0gdGhpcy5zZWxlY3RlZElkcy5maW5kSW5kZXgoKGVsZW1lbnQ6IGFueSkgPT4gZWxlbWVudCA9PSBjYXRlZ29yeS5jYXRlZ29yeV9pZCk7XHJcbiAgICAgIHRoaXMuc2VsZWN0ZWRJZHMuc3BsaWNlKGluZGV4LCAxKTtcclxuICAgICAgY29uc3QgY2F0ZWdvcnlJbmRleCA9IHRoaXMuY2F0ZWdvcnlEYXRhLnNlbGVjdGVkQ2F0ZWdvcmllcy5maW5kSW5kZXgoKGVsZTogYW55KSA9PiBlbGUuY2F0ZWdvcnlfaWQgPT0gY2F0ZWdvcnkuY2F0ZWdvcnlfaWQpXHJcbiAgICAgIHRoaXMuY2F0ZWdvcnlEYXRhLnNlbGVjdGVkQ2F0ZWdvcmllcy5zcGxpY2UoY2F0ZWdvcnlJbmRleCwgMSk7XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICByZW1vdmVDYXRlZ29yaWVzKGV2ZW50OiBhbnkpIHtcclxuICAgIGNvbnN0IGNhdGVnb3J5SW5kZXggPSB0aGlzLmNhdGVnb3J5RGF0YS5zZWxlY3RlZENhdGVnb3JpZXMuZmluZEluZGV4KChlbGU6IGFueSkgPT4gZWxlLmNhdGVnb3J5X2lkID09IGV2ZW50LmNhdGVnb3J5X2lkKVxyXG4gICAgdGhpcy5jYXRlZ29yeURhdGEuc2VsZWN0ZWRDYXRlZ29yaWVzLnNwbGljZShjYXRlZ29yeUluZGV4LCAxKTtcclxuICAgIGNvbnN0IGluZGV4ID0gdGhpcy5zZWxlY3RlZElkcy5maW5kSW5kZXgoKGVsZW1lbnQ6IGFueSkgPT4gZWxlbWVudCA9PSBldmVudC5jYXRlZ29yeV9pZCk7XHJcbiAgICB0aGlzLnNlbGVjdGVkSWRzLnNwbGljZShpbmRleCwgMSk7XHJcbiAgfVxyXG5cclxuICBjbG9zZSgpIHtcclxuICAgIHRoaXMuY2xvc2VFdmVudC5lbWl0KCk7XHJcbiAgfVxyXG5cclxuICBzYXZlKCkge1xyXG4gICAgLy8gdGhpcy5zYXZlU2VsZWN0ZWRQcm9ncmFtLmVtaXQoeyBwcm9ncmFtOiB0aGlzLmN1cnJlbnRQcm9ncmFtLCBjYXRlZ29yaWVzOiB0aGlzLnNlbGVjdGVkQ2F0ZWdvcmllcyB9KTtcclxuICAgIHRoaXMuc2F2ZVNlbGVjdGVkUHJvZ3JhbS5lbWl0KHsgcHJvZ3JhbTogdGhpcy5jdXJyZW50UHJvZ3JhbSwgY2F0ZWdvcmllczogdGhpcy5zZWxlY3RlZElkcyB9KTtcclxuICB9XHJcblxyXG4gIGRlbGV0ZUV2ZW50KGV2ZW50OiBhbnkpIHtcclxuICAgIHRoaXMuY3VycmVudFByb2dyYW0gPSB1bmRlZmluZWQ7XHJcbiAgICB0aGlzLnNob3dDYXRlZ29yaWVzID0gZmFsc2U7XHJcbiAgICB0aGlzLnNlbGVjdGVkSWRzID0gW107XHJcbiAgICB0aGlzLmNhdGVnb3J5TGlzdCA9IFtdO1xyXG5cclxuICB9XHJcblxyXG4gIGdldFNlbGVjdGVkUHJvZ3JhbUNvdW50KCkge1xyXG4gICAgdGhpcy5wcm9ncmFtRGF0YS5TZWxlY3RlZEludGVybmFsQ29udHJvbHNQcm9ncmFtc0NvdW50ID0gMDtcclxuICAgIHRoaXMucHJvZ3JhbURhdGEuU2VsZWN0ZWRPdGhlcnNQcm9ncmFtc0NvdW50ID0gMDtcclxuICAgIHRoaXMucHJvZ3JhbURhdGEuU2VsZWN0ZWRSZWd1bGF0aW9uUHJvZ3JhbXNDb3VudCA9IDA7XHJcbiAgICB0aGlzLnByb2dyYW1EYXRhLlNlbGVjdGVkU3RhbmRhcmRQcm9ncmFtc0NvdW50ID0gMDtcclxuICAgIHN3aXRjaCAodGhpcy5jdXJyZW50UHJvZ3JhbS5wcm9ncmFtVHlwZSkge1xyXG4gICAgICBjYXNlIDA6XHJcbiAgICAgICAgdGhpcy5wcm9ncmFtRGF0YS5TZWxlY3RlZE90aGVyc1Byb2dyYW1zQ291bnQrKztcclxuICAgICAgICBicmVhaztcclxuICAgICAgY2FzZSAxOlxyXG4gICAgICAgIHRoaXMucHJvZ3JhbURhdGEuU2VsZWN0ZWRSZWd1bGF0aW9uUHJvZ3JhbXNDb3VudCsrO1xyXG4gICAgICAgIGJyZWFrO1xyXG4gICAgICBjYXNlIDI6XHJcbiAgICAgICAgdGhpcy5wcm9ncmFtRGF0YS5TZWxlY3RlZFN0YW5kYXJkUHJvZ3JhbXNDb3VudCsrO1xyXG4gICAgICAgIGJyZWFrO1xyXG4gICAgICBjYXNlIDM6XHJcbiAgICAgICAgdGhpcy5wcm9ncmFtRGF0YS5TZWxlY3RlZEludGVybmFsQ29udHJvbHNQcm9ncmFtc0NvdW50Kys7XHJcbiAgICAgICAgYnJlYWs7XHJcblxyXG4gICAgfVxyXG4gIH1cclxuXHJcbn1cclxuIl19