vcomply-workflow-engine 2.6.30 → 2.6.32
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/bundles/vcomply-workflow-engine.umd.js +1008 -626
- package/bundles/vcomply-workflow-engine.umd.js.map +1 -1
- package/esm2015/lib/add-multiple-responsibility/add-multiple-responsibility.component.js +92 -39
- package/esm2015/lib/add-multiple-risk/add-multiple-risk.component.js +3 -3
- package/esm2015/lib/add-multiple-risk/add-multiple-risk.component.ngfactory.js +2 -2
- package/esm2015/lib/confirmation-alert/confirmation-alert.component.js +4 -4
- package/esm2015/lib/confirmation-alert/confirmation-alert.component.ngfactory.js +11 -4
- package/esm2015/lib/formgroup/cs-checkbox-indeterminate/cs-checkbox-indeterminate.component.js +1 -1
- package/esm2015/lib/formgroup/cs-radio/cs-radio.component.js +1 -2
- package/esm2015/lib/interfaces/confirmation-alert.js +1 -1
- package/esm2015/lib/log-an-issue/log-an-issue.component.js +16 -12
- package/esm2015/lib/log-an-issue/log-an-issue.component.ngfactory.js +49 -50
- package/esm2015/lib/log-an-issue/log-an-issue.component.ngsummary.json +1 -1
- package/esm2015/lib/sharedComponents/assessment-editor/services/editor.service.js +1 -1
- package/esm2015/lib/sharedComponents/assessment-editor/services/validator.service.js +6 -4
- package/esm2015/lib/sharedComponents/assessment-editor/services/validator.service.ngsummary.json +1 -1
- package/esm2015/lib/sharedComponents/bulk-responsibility-view/bulk-responsibility-view.component.js +4 -3
- package/esm2015/lib/sharedComponents/bulk-responsibility-view/bulk-responsibility-view.component.ngfactory.js +18 -17
- package/esm2015/lib/sharedComponents/floating-bar/floating-bar.component.js +8 -3
- package/esm2015/lib/sharedComponents/floating-bar/floating-bar.component.ngfactory.js +4 -3
- package/esm2015/lib/sharedComponents/floating-bar/floating-bar.component.ngsummary.json +1 -1
- package/esm2015/lib/sharedComponents/format-and-evidence/format-and-evidence.component.js +1 -1
- package/esm2015/lib/sharedComponents/frequency/frequency-annual/frequency-annual.component.js +2 -3
- package/esm2015/lib/sharedComponents/frequency/frequency-annual/frequency-annual.component.ngfactory.js +14 -15
- package/esm2015/lib/sharedComponents/frequency/frequency-annual/frequency-annual.component.ngsummary.json +1 -1
- package/esm2015/lib/sharedComponents/frequency/frequency-biannual/frequency-biannual.component.js +2 -3
- package/esm2015/lib/sharedComponents/frequency/frequency-biannual/frequency-biannual.component.ngfactory.js +14 -15
- package/esm2015/lib/sharedComponents/frequency/frequency-biannual/frequency-biannual.component.ngsummary.json +1 -1
- package/esm2015/lib/sharedComponents/frequency/frequency-container/frequency-container.component.js +2 -10
- package/esm2015/lib/sharedComponents/frequency/frequency-container/frequency-container.component.ngfactory.js +9 -9
- package/esm2015/lib/sharedComponents/frequency/frequency-container/frequency-container.component.ngsummary.json +1 -1
- package/esm2015/lib/sharedComponents/frequency/frequency-daily/frequency-daily.component.js +2 -3
- package/esm2015/lib/sharedComponents/frequency/frequency-daily/frequency-daily.component.ngfactory.js +11 -12
- package/esm2015/lib/sharedComponents/frequency/frequency-daily/frequency-daily.component.ngsummary.json +1 -1
- package/esm2015/lib/sharedComponents/frequency/frequency-monthly/frequency-monthly.component.js +2 -3
- package/esm2015/lib/sharedComponents/frequency/frequency-monthly/frequency-monthly.component.ngfactory.js +14 -15
- package/esm2015/lib/sharedComponents/frequency/frequency-monthly/frequency-monthly.component.ngsummary.json +1 -1
- package/esm2015/lib/sharedComponents/frequency/frequency-one-time/frequency-one-time.component.js +2 -3
- package/esm2015/lib/sharedComponents/frequency/frequency-one-time/frequency-one-time.component.ngfactory.js +16 -17
- package/esm2015/lib/sharedComponents/frequency/frequency-one-time/frequency-one-time.component.ngsummary.json +1 -1
- package/esm2015/lib/sharedComponents/frequency/frequency-quarterly/frequency-quarterly.component.js +2 -3
- package/esm2015/lib/sharedComponents/frequency/frequency-quarterly/frequency-quarterly.component.ngfactory.js +14 -15
- package/esm2015/lib/sharedComponents/frequency/frequency-quarterly/frequency-quarterly.component.ngsummary.json +1 -1
- package/esm2015/lib/sharedComponents/frequency/frequency-weekly/frequency-weekly.component.js +2 -3
- package/esm2015/lib/sharedComponents/frequency/frequency-weekly/frequency-weekly.component.ngfactory.js +14 -15
- package/esm2015/lib/sharedComponents/frequency/frequency-weekly/frequency-weekly.component.ngsummary.json +1 -1
- package/esm2015/lib/sharedComponents/program-listing/program-list-model.js +1 -1
- package/esm2015/lib/sharedComponents/program-listing/program-listing.component.js +303 -45
- package/esm2015/lib/sharedComponents/program-listing/program-listing.component.ngfactory.js +90 -74
- package/esm2015/lib/sharedComponents/program-listing/program-listing.component.ngsummary.json +1 -1
- package/esm2015/lib/sharedComponents/risk-classification/risk-classification.component.js +1 -1
- package/esm2015/lib/ui-kit/formgroup/cs-checkbox-indeterminate/cs-checkbox-indeterminate.component.js +1 -1
- package/esm2015/lib/workflow-assessment/import-an-assessment/import-an-assessment.component.js +1 -1
- package/esm2015/lib/workflow-assessment/workflow-assessment.component.js +1 -1
- package/esm2015/lib/workflow-compliance/workflow-compliance.component.js +246 -140
- package/esm2015/lib/workflow-compliance/workflow-compliance.component.ngfactory.js +283 -285
- package/esm2015/lib/workflow-compliance/workflow-compliance.component.ngsummary.json +1 -1
- package/esm2015/lib/workflow-engine-container/workflow-engine-container.component.js +50 -18
- package/esm2015/lib/workflow-engine-container/workflow-engine-container.component.ngfactory.js +22 -16
- package/esm2015/lib/workflow-engine-container/workflow-engine-container.component.ngsummary.json +1 -1
- package/esm2015/lib/workflow-engine.module.js +2 -6
- package/esm2015/lib/workflow-engine.module.ngfactory.js +1 -1
- package/esm2015/lib/workflow-policy/workflow-policy.component.js +1 -1
- package/esm2015/lib/workflow-program/create-program-ui/file-pill/file-pill.component.js +1 -1
- package/esm2015/lib/workflow-program/create-program-ui/form-field/form-field.component.js +1 -1
- package/esm2015/lib/workflow-program/create-program-ui/input-with-pill/input-with-pill.component.js +1 -1
- package/esm2015/lib/workflow-program/workflow-program.component.js +6 -4
- package/esm2015/lib/workflow-risk/workflow-risk.component.js +1 -1
- package/esm2015/lib/workflow-services/add-risk.service.js +7 -4
- package/esm2015/lib/workflow-services/auth.service.js +7 -4
- package/esm2015/lib/workflow-services/programs.service.js +10 -9
- package/esm2015/lib/workflow-services/responsibility.service.js +21 -13
- package/esm2015/lib/workflow-services/responsibility.service.ngsummary.json +1 -1
- package/esm2015/lib/workflow-survey-form/workflow-survey-form.component.js +1 -1
- package/esm2015/vcomply-workflow-engine.js +188 -190
- package/esm2015/vcomply-workflow-engine.ngsummary.json +1 -1
- package/fesm2015/vcomply-workflow-engine.js +797 -429
- package/fesm2015/vcomply-workflow-engine.js.map +1 -1
- package/lib/interfaces/confirmation-alert.d.ts +1 -0
- package/lib/log-an-issue/log-an-issue.component.d.ts +3 -3
- package/lib/sharedComponents/assessment-editor/services/validator.service.d.ts +1 -0
- package/lib/sharedComponents/floating-bar/floating-bar.component.d.ts +2 -0
- package/lib/sharedComponents/frequency/frequency-annual/frequency-annual.component.d.ts +0 -1
- package/lib/sharedComponents/frequency/frequency-biannual/frequency-biannual.component.d.ts +0 -1
- package/lib/sharedComponents/frequency/frequency-container/frequency-container.component.d.ts +0 -1
- package/lib/sharedComponents/frequency/frequency-daily/frequency-daily.component.d.ts +0 -1
- package/lib/sharedComponents/frequency/frequency-monthly/frequency-monthly.component.d.ts +0 -1
- package/lib/sharedComponents/frequency/frequency-one-time/frequency-one-time.component.d.ts +0 -1
- package/lib/sharedComponents/frequency/frequency-quarterly/frequency-quarterly.component.d.ts +0 -1
- package/lib/sharedComponents/frequency/frequency-weekly/frequency-weekly.component.d.ts +0 -1
- package/lib/sharedComponents/program-listing/program-list-model.d.ts +2 -0
- package/lib/sharedComponents/program-listing/program-listing.component.d.ts +62 -1
- package/lib/workflow-compliance/workflow-compliance.component.d.ts +115 -13
- package/lib/workflow-engine-container/workflow-engine-container.component.d.ts +2 -0
- package/lib/workflow-services/responsibility.service.d.ts +2 -2
- package/package.json +2 -2
- package/vcomply-workflow-engine.d.ts +187 -189
- package/vcomply-workflow-engine.metadata.json +1 -1
- package/esm2015/lib/sharedComponents/system-task-selector/system-task-selector.component.js +0 -54
- package/esm2015/lib/sharedComponents/system-task-selector/system-task-selector.component.ngfactory.js +0 -75
- package/esm2015/lib/sharedComponents/system-task-selector/system-task-selector.component.ngsummary.json +0 -1
- package/esm2015/lib/sharedComponents/tab-selector/tab-selector.component.js +0 -41
- package/esm2015/lib/sharedComponents/tab-selector/tab-selector.component.ngfactory.js +0 -23
- package/esm2015/lib/sharedComponents/tab-selector/tab-selector.component.ngsummary.json +0 -1
- package/lib/sharedComponents/system-task-selector/system-task-selector.component.d.ts +0 -19
- package/lib/sharedComponents/system-task-selector/system-task-selector.component.ngfactory.d.ts +0 -1
- package/lib/sharedComponents/tab-selector/tab-selector.component.d.ts +0 -17
- package/lib/sharedComponents/tab-selector/tab-selector.component.ngfactory.d.ts +0 -1
|
@@ -7,7 +7,13 @@ export class ProgramListingComponent {
|
|
|
7
7
|
this.animation = false;
|
|
8
8
|
this.subList = false;
|
|
9
9
|
this.loader = false;
|
|
10
|
+
this.openedFrom = '';
|
|
11
|
+
// @Input() selectedCategories: any[] = [];
|
|
12
|
+
this.viewOnlyProgramsCategoryId = [];
|
|
10
13
|
this.selectedCategories = [];
|
|
14
|
+
this.tempSelectedCategories = [];
|
|
15
|
+
this.responsibilityId = '';
|
|
16
|
+
this.mode = 'CREATE';
|
|
11
17
|
this.previousSelectedValues = {
|
|
12
18
|
program: {},
|
|
13
19
|
categories: []
|
|
@@ -26,7 +32,15 @@ export class ProgramListingComponent {
|
|
|
26
32
|
SelectedInternalControlsProgramsCount: 0,
|
|
27
33
|
SelectedOthersProgramsCount: 0,
|
|
28
34
|
SelectedRegulationProgramsCount: 0,
|
|
29
|
-
SelectedStandardProgramsCount: 0
|
|
35
|
+
SelectedStandardProgramsCount: 0,
|
|
36
|
+
AllProgramsCount: 0,
|
|
37
|
+
AllViewOnlyProgramCount: 0,
|
|
38
|
+
};
|
|
39
|
+
this.programTabDataCount = {
|
|
40
|
+
allInternalControlsProgramsCount: 0,
|
|
41
|
+
allOthersProgramsCount: 0,
|
|
42
|
+
allRegulationProgramsCount: 0,
|
|
43
|
+
allStandardProgramsCount: 0,
|
|
30
44
|
};
|
|
31
45
|
this.categoryData = {
|
|
32
46
|
data: [],
|
|
@@ -50,19 +64,50 @@ export class ProgramListingComponent {
|
|
|
50
64
|
others: 0,
|
|
51
65
|
};
|
|
52
66
|
this.displayConfirmationMessage = false;
|
|
67
|
+
this.tempPrimaryProgram = {};
|
|
68
|
+
this.primaryConfirmationMessage = `Once confirmed, the <em>Primary Program</em> for this responsibility will be changed. Hence, all the default settings related to the new <em>Primary Program</em> will now apply to this responsibility.`;
|
|
69
|
+
this.isPrimaryConfirmation = false;
|
|
70
|
+
this.isUncheckedProgram = false;
|
|
71
|
+
this.isPrimaryUnchecked = false;
|
|
72
|
+
this.selectedProgramsDetail = [];
|
|
73
|
+
this.selectedProgramsId = [];
|
|
74
|
+
this.programCountLoader = false;
|
|
53
75
|
this.saveSelectedProgram = new EventEmitter();
|
|
54
76
|
this.closeEvent = new EventEmitter();
|
|
55
77
|
this.allCategories = [];
|
|
78
|
+
this.selectedSubCategoryIds = [];
|
|
79
|
+
this.programSubTab = 'PROGRAMS';
|
|
80
|
+
}
|
|
81
|
+
set getSelectedCategories(category) {
|
|
82
|
+
console.log('selectedCategoriesselectedCategories', category);
|
|
83
|
+
this.selectedCategories = category;
|
|
84
|
+
this.tempSelectedCategories = JSON.stringify(category);
|
|
85
|
+
}
|
|
86
|
+
;
|
|
87
|
+
set getLinkedProgram(program) {
|
|
88
|
+
this.selectedProgramsDetail = [];
|
|
89
|
+
this.selectedProgramsId = [];
|
|
90
|
+
this.viewOnlyProgramsCategoryId = [];
|
|
91
|
+
this.selectedProgramsDetail = program;
|
|
92
|
+
this.selectedProgramsDetail.forEach((ele) => {
|
|
93
|
+
var _a;
|
|
94
|
+
this.selectedProgramsId.push(ele === null || ele === void 0 ? void 0 : ele._id);
|
|
95
|
+
this.getSelectedProgramCount(true, ele === null || ele === void 0 ? void 0 : ele.programType);
|
|
96
|
+
(ele === null || ele === void 0 ? void 0 : ele.isViewOnlyProgram) ? (_a = this.viewOnlyProgramsCategoryId) === null || _a === void 0 ? void 0 : _a.push(ele === null || ele === void 0 ? void 0 : ele.category_id) : null;
|
|
97
|
+
});
|
|
56
98
|
}
|
|
57
99
|
ngOnInit() {
|
|
58
|
-
var _a, _b;
|
|
100
|
+
var _a, _b, _c, _d, _e;
|
|
59
101
|
this.animation = true;
|
|
60
102
|
setTimeout(() => {
|
|
61
103
|
this.animation = false;
|
|
62
104
|
}, 300);
|
|
63
105
|
if (this.selectedProgram && this.selectedProgram[0]) {
|
|
64
106
|
this.currentProgram = this.selectedProgram[0];
|
|
65
|
-
|
|
107
|
+
if (this.mode === 'EDIT' || this.openedFrom === 'PROGRAM_WORKROOM') {
|
|
108
|
+
(_a = this.viewOnlyProgramsCategoryId) === null || _a === void 0 ? void 0 : _a.push((_b = this.currentProgram) === null || _b === void 0 ? void 0 : _b.category_id);
|
|
109
|
+
}
|
|
110
|
+
switch ((_c = this.currentProgram) === null || _c === void 0 ? void 0 : _c.programType) {
|
|
66
111
|
case 0:
|
|
67
112
|
this.activeTab = 'others';
|
|
68
113
|
break;
|
|
@@ -80,45 +125,51 @@ export class ProgramListingComponent {
|
|
|
80
125
|
break;
|
|
81
126
|
}
|
|
82
127
|
this.getSelectedProgramCount();
|
|
83
|
-
if (
|
|
84
|
-
|
|
85
|
-
}
|
|
128
|
+
// if (this.selectedCategories?.length && this.currentProgram) {
|
|
129
|
+
this.populateCategories();
|
|
130
|
+
// }
|
|
86
131
|
}
|
|
87
132
|
if (this.hideProgramsList) {
|
|
133
|
+
(_d = this.selectedProgramsId) === null || _d === void 0 ? void 0 : _d.push((_e = this.selectedProgram[0]) === null || _e === void 0 ? void 0 : _e._id);
|
|
88
134
|
this.getCategoriesList();
|
|
89
135
|
}
|
|
90
136
|
else {
|
|
91
137
|
this.getProgramsList();
|
|
92
138
|
}
|
|
139
|
+
this.getProgramsCount();
|
|
93
140
|
this.previousSelectedValues = {
|
|
94
141
|
programs: this.currentProgram,
|
|
95
142
|
categories: (this.selectedCategories.length) ? [...new Set(this.selectedCategories)] : [],
|
|
96
143
|
};
|
|
144
|
+
this.preservePreviousDetails();
|
|
97
145
|
}
|
|
98
146
|
populateCategories() {
|
|
99
|
-
this.
|
|
147
|
+
this.selectedIds = [];
|
|
100
148
|
let params = new HttpParams();
|
|
101
|
-
params = params.append('program_id', this.currentProgram._id);
|
|
149
|
+
// params = params.append('program_id', this.currentProgram._id);
|
|
102
150
|
params = params.append('isPagination', false);
|
|
103
|
-
this.
|
|
151
|
+
if (this.responsibilityId) {
|
|
152
|
+
params = params.append('reportId', this.responsibilityId);
|
|
153
|
+
}
|
|
154
|
+
this.responsibilityService.getProgramsList(params, this.selectedProgramsId).subscribe({
|
|
104
155
|
next: (res) => {
|
|
105
156
|
const allCategories = res.data;
|
|
106
157
|
this.categoryData.selectedCategories = allCategories.filter((ele) => this.selectedCategories.includes(ele.category_id));
|
|
107
158
|
this.categoryData.selectedCategories.forEach((element) => {
|
|
108
159
|
this.selectedIds.push(element.category_id);
|
|
109
160
|
});
|
|
110
|
-
this.loader = false;
|
|
111
161
|
},
|
|
112
162
|
error: err => {
|
|
113
163
|
console.error(err);
|
|
114
|
-
this.loader = false;
|
|
115
164
|
}
|
|
116
165
|
});
|
|
117
166
|
}
|
|
118
167
|
handleSearch(event) {
|
|
119
168
|
if (this.searchString != event) {
|
|
169
|
+
this.programData.currentPage = 1;
|
|
120
170
|
this.searchString = event;
|
|
121
171
|
this.getProgramsList({ search: true });
|
|
172
|
+
this.getProgramsCount({ search: true });
|
|
122
173
|
}
|
|
123
174
|
}
|
|
124
175
|
categorySearch(event) {
|
|
@@ -128,15 +179,119 @@ export class ProgramListingComponent {
|
|
|
128
179
|
}
|
|
129
180
|
}
|
|
130
181
|
selectProgram(event, program) {
|
|
182
|
+
var _a;
|
|
183
|
+
this.updateSelectedPrograms(event, program);
|
|
184
|
+
// this.getSelectedProgramCount(event, program?.programType);
|
|
131
185
|
if (event) {
|
|
132
|
-
this.currentProgram = program;
|
|
186
|
+
Object.keys((_a = this.currentProgram) !== null && _a !== void 0 ? _a : {}).length ? null : this.currentProgram = program;
|
|
187
|
+
// this.currentProgram = program;
|
|
133
188
|
this.selectedIds = [];
|
|
134
189
|
this.categoryList = [];
|
|
135
|
-
this.getSelectedProgramCount();
|
|
190
|
+
// this.getSelectedProgramCount();
|
|
136
191
|
}
|
|
137
192
|
}
|
|
193
|
+
/**
|
|
194
|
+
* If the event is true, then push the program to the selectedProgramsDetail array. If the event is
|
|
195
|
+
* false, then remove the program from the selectedProgramsDetail array.
|
|
196
|
+
* @param {any} event - boolean
|
|
197
|
+
* @param {any} program - any = {
|
|
198
|
+
*/
|
|
199
|
+
updateSelectedPrograms(event, program) {
|
|
200
|
+
var _a, _b, _c, _d, _e, _f, _g, _h, _j;
|
|
201
|
+
if (event) {
|
|
202
|
+
const indexOfProgram = (_a = this.selectedProgramsDetail) === null || _a === void 0 ? void 0 : _a.findIndex((el) => (el === null || el === void 0 ? void 0 : el.category_id) === (program === null || program === void 0 ? void 0 : program.category_id));
|
|
203
|
+
if (indexOfProgram === -1 && ((_b = Object.keys(program)) === null || _b === void 0 ? void 0 : _b.length)) {
|
|
204
|
+
(_c = this.selectedProgramsId) === null || _c === void 0 ? void 0 : _c.push(program === null || program === void 0 ? void 0 : program._id);
|
|
205
|
+
(_d = this.selectedProgramsDetail) === null || _d === void 0 ? void 0 : _d.push(program);
|
|
206
|
+
this.getSelectedProgramCount(event, program === null || program === void 0 ? void 0 : program.programType);
|
|
207
|
+
}
|
|
208
|
+
}
|
|
209
|
+
else {
|
|
210
|
+
const indexOfProgram = (_e = this.selectedProgramsDetail) === null || _e === void 0 ? void 0 : _e.findIndex((el) => (el === null || el === void 0 ? void 0 : el.category_id) === (program === null || program === void 0 ? void 0 : program.category_id));
|
|
211
|
+
if (indexOfProgram !== -1) {
|
|
212
|
+
(_f = this.selectedProgramsDetail) === null || _f === void 0 ? void 0 : _f.splice(indexOfProgram, 1);
|
|
213
|
+
}
|
|
214
|
+
const indexOfId = (_g = this.selectedProgramsId) === null || _g === void 0 ? void 0 : _g.findIndex((el) => el === (program === null || program === void 0 ? void 0 : program._id));
|
|
215
|
+
if (indexOfId !== -1) {
|
|
216
|
+
(_h = this.selectedProgramsId) === null || _h === void 0 ? void 0 : _h.splice(indexOfId, 1);
|
|
217
|
+
}
|
|
218
|
+
this.isPrimaryUnchecked = false;
|
|
219
|
+
if (this.currentProgram && ((_j = this.currentProgram) === null || _j === void 0 ? void 0 : _j.category_id) === (program === null || program === void 0 ? void 0 : program.category_id)) {
|
|
220
|
+
// this.primaryConfirmationMessage = 'You cannot deselect this Program since this is the <em>Primary Program</em> for this responsibility. To proceed, first select another Program as the <em>Primary Program</em>.';
|
|
221
|
+
this.isPrimaryConfirmation = true;
|
|
222
|
+
this.isPrimaryUnchecked = true;
|
|
223
|
+
this.tempPrimaryProgram = JSON.stringify(program);
|
|
224
|
+
// this.currentProgram = undefined;
|
|
225
|
+
}
|
|
226
|
+
// }
|
|
227
|
+
this.getSelectedProgramCount(event, program === null || program === void 0 ? void 0 : program.programType);
|
|
228
|
+
}
|
|
229
|
+
}
|
|
230
|
+
/**
|
|
231
|
+
* If the currentProgram is set, then set the currentProgram to the program passed in, and set the
|
|
232
|
+
* tempPrimaryProgram to the currentProgram.
|
|
233
|
+
* If the currentProgram is not set, then set the currentProgram to the program passed in.
|
|
234
|
+
* @param {any} event - any - the event that is triggered when the user clicks on the checkbox
|
|
235
|
+
* @param {any} program - the program that is being selected
|
|
236
|
+
*/
|
|
237
|
+
setPrimaryProgram(event, program) {
|
|
238
|
+
if (this.currentProgram) {
|
|
239
|
+
const currentTemp = this.currentProgram;
|
|
240
|
+
this.tempPrimaryProgram = JSON.stringify(currentTemp);
|
|
241
|
+
this.currentProgram = program;
|
|
242
|
+
this.updateSelectedPrograms(true, program);
|
|
243
|
+
if (!event) {
|
|
244
|
+
this.currentProgram = {};
|
|
245
|
+
}
|
|
246
|
+
this.primaryConfirmationMessage = 'Once confirmed, the <em>Primary Program</em> for this responsibility will be changed. Hence, all the default settings related to the new <em>Primary Program</em> will now apply to this responsibility.';
|
|
247
|
+
this.isPrimaryConfirmation = true;
|
|
248
|
+
}
|
|
249
|
+
if (event && !this.currentProgram) {
|
|
250
|
+
this.currentProgram = program;
|
|
251
|
+
this.updateSelectedPrograms(true, program);
|
|
252
|
+
}
|
|
253
|
+
}
|
|
254
|
+
/**
|
|
255
|
+
* If the user clicks "Yes" on the confirmation modal, then the function will remove the program from
|
|
256
|
+
* the selectedProgramsDetail array and the selectedProgramsId array. If the user clicks "No" on the
|
|
257
|
+
* confirmation modal, then the function will do nothing.
|
|
258
|
+
* @param {boolean} event - boolean -> this is the value of the checkbox
|
|
259
|
+
*/
|
|
260
|
+
updatePrimaryProgram(event) {
|
|
261
|
+
var _a, _b, _c, _d, _e, _f, _g, _h, _j, _k, _l, _m, _o;
|
|
262
|
+
if (event && this.isPrimaryUnchecked) {
|
|
263
|
+
const indexOfProgram = (_a = this.selectedProgramsDetail) === null || _a === void 0 ? void 0 : _a.findIndex((el) => { var _a, _b; return (el === null || el === void 0 ? void 0 : el.category_id) === ((_b = JSON.parse((_a = this.tempPrimaryProgram) !== null && _a !== void 0 ? _a : {})) === null || _b === void 0 ? void 0 : _b.category_id); });
|
|
264
|
+
if (indexOfProgram !== -1) {
|
|
265
|
+
(_b = this.selectedProgramsDetail) === null || _b === void 0 ? void 0 : _b.splice(indexOfProgram, 1);
|
|
266
|
+
}
|
|
267
|
+
const indexOfId = (_c = this.selectedProgramsId) === null || _c === void 0 ? void 0 : _c.findIndex((el) => { var _a, _b; return el === ((_b = JSON.parse((_a = this.tempPrimaryProgram) !== null && _a !== void 0 ? _a : {})) === null || _b === void 0 ? void 0 : _b._id); });
|
|
268
|
+
if (indexOfId !== -1) {
|
|
269
|
+
(_d = this.selectedProgramsId) === null || _d === void 0 ? void 0 : _d.splice(indexOfId, 1);
|
|
270
|
+
}
|
|
271
|
+
this.isPrimaryConfirmation = false;
|
|
272
|
+
this.currentProgram = {};
|
|
273
|
+
}
|
|
274
|
+
else if (!event && this.isPrimaryUnchecked) {
|
|
275
|
+
this.updateSelectedPrograms(true, ((_e = this.tempPrimaryProgram) === null || _e === void 0 ? void 0 : _e.length) ? JSON.parse((_f = this.tempPrimaryProgram) !== null && _f !== void 0 ? _f : {}) : {});
|
|
276
|
+
this.currentProgram = ((_g = this.tempPrimaryProgram) === null || _g === void 0 ? void 0 : _g.length) ? JSON.parse((_h = this.tempPrimaryProgram) !== null && _h !== void 0 ? _h : {}) : {};
|
|
277
|
+
this.isPrimaryConfirmation = false;
|
|
278
|
+
}
|
|
279
|
+
else if (event) {
|
|
280
|
+
// this.currentProgram = this.isPrimaryUnchecked ? {} : JSON.parse(this.tempPrimaryProgram);
|
|
281
|
+
this.updateSelectedPrograms(this.isPrimaryUnchecked ? false : true, ((_j = this.tempPrimaryProgram) === null || _j === void 0 ? void 0 : _j.length) ? JSON.parse((_k = this.tempPrimaryProgram) !== null && _k !== void 0 ? _k : {}) : {});
|
|
282
|
+
this.isPrimaryConfirmation = false;
|
|
283
|
+
}
|
|
284
|
+
else {
|
|
285
|
+
let currentPrimary = JSON.stringify(this.currentProgram);
|
|
286
|
+
this.currentProgram = {};
|
|
287
|
+
// this.updateSelectedPrograms(false, JSON.parse(currentPrimary)?? {});
|
|
288
|
+
this.updateSelectedPrograms(true, (_l = JSON.parse(currentPrimary)) !== null && _l !== void 0 ? _l : {});
|
|
289
|
+
this.currentProgram = ((_m = this.tempPrimaryProgram) === null || _m === void 0 ? void 0 : _m.length) ? JSON.parse((_o = this.tempPrimaryProgram) !== null && _o !== void 0 ? _o : {}) : {};
|
|
290
|
+
this.isPrimaryConfirmation = false;
|
|
291
|
+
}
|
|
292
|
+
this.isPrimaryUnchecked = false;
|
|
293
|
+
}
|
|
138
294
|
selectAllCategories(value) {
|
|
139
|
-
var _a;
|
|
140
295
|
if (value) {
|
|
141
296
|
this.selectedIds = [];
|
|
142
297
|
this.categoryData.selectedCategories = [];
|
|
@@ -149,9 +304,12 @@ export class ProgramListingComponent {
|
|
|
149
304
|
else {
|
|
150
305
|
this.loader = true;
|
|
151
306
|
let params = new HttpParams();
|
|
152
|
-
params = params.append('program_id',
|
|
307
|
+
// params = params.append('program_id', this.currentProgram?._id);
|
|
153
308
|
params = params.append('isPagination', false);
|
|
154
|
-
this.
|
|
309
|
+
if (this.responsibilityId) {
|
|
310
|
+
params = params.append('reportId', this.responsibilityId);
|
|
311
|
+
}
|
|
312
|
+
this.responsibilityService.getProgramsList(params, this.selectedProgramsId).subscribe({
|
|
155
313
|
next: (res) => {
|
|
156
314
|
const allCategories = res.data;
|
|
157
315
|
this.categoryData.selectedCategories = res.data;
|
|
@@ -184,12 +342,16 @@ export class ProgramListingComponent {
|
|
|
184
342
|
}
|
|
185
343
|
}
|
|
186
344
|
openCategories() {
|
|
187
|
-
var _a, _b;
|
|
188
|
-
|
|
345
|
+
var _a, _b, _c;
|
|
346
|
+
this.searchString = '';
|
|
347
|
+
const isSubProgram = (_a = this.selectedProgramsDetail) === null || _a === void 0 ? void 0 : _a.some((el) => { var _a; return (_a = el === null || el === void 0 ? void 0 : el.child_id) === null || _a === void 0 ? void 0 : _a.length; });
|
|
348
|
+
this.populateCategories();
|
|
349
|
+
if (((_c = (_b = this.currentProgram) === null || _b === void 0 ? void 0 : _b.child_id) === null || _c === void 0 ? void 0 : _c.length) || isSubProgram) {
|
|
189
350
|
this.showCategories = true;
|
|
190
351
|
this.getCategoriesList();
|
|
191
352
|
}
|
|
192
353
|
else {
|
|
354
|
+
this.selectedIds = [];
|
|
193
355
|
this.save();
|
|
194
356
|
}
|
|
195
357
|
}
|
|
@@ -205,6 +367,7 @@ export class ProgramListingComponent {
|
|
|
205
367
|
});
|
|
206
368
|
}
|
|
207
369
|
else {
|
|
370
|
+
this.getProgramsList();
|
|
208
371
|
this.categoryData.selectedCategories = [];
|
|
209
372
|
this.selectedIds = [];
|
|
210
373
|
}
|
|
@@ -216,9 +379,15 @@ export class ProgramListingComponent {
|
|
|
216
379
|
}
|
|
217
380
|
}
|
|
218
381
|
changeTab(type) {
|
|
382
|
+
var _a;
|
|
383
|
+
this.programSubTab = 'PROGRAMS';
|
|
219
384
|
this.activeTab = type;
|
|
220
385
|
this.programData.currentPage = 1;
|
|
221
|
-
this.searchString
|
|
386
|
+
if ((_a = this.searchString) === null || _a === void 0 ? void 0 : _a.length) {
|
|
387
|
+
this.searchString = '';
|
|
388
|
+
this.getProgramsCount();
|
|
389
|
+
}
|
|
390
|
+
// this.searchString = '';
|
|
222
391
|
this.searchProgram.nativeElement.value = '';
|
|
223
392
|
this.getProgramsList();
|
|
224
393
|
}
|
|
@@ -241,8 +410,14 @@ export class ProgramListingComponent {
|
|
|
241
410
|
if ((paramsObject === null || paramsObject === void 0 ? void 0 : paramsObject.search) || this.searchString) {
|
|
242
411
|
params = params.append('searchText', this.searchString);
|
|
243
412
|
}
|
|
244
|
-
else {
|
|
245
|
-
|
|
413
|
+
// else {
|
|
414
|
+
params = params.append('pageNo', this.programData.currentPage);
|
|
415
|
+
// }
|
|
416
|
+
if (this.programSubTab === 'OTHER_PROGRAMS') {
|
|
417
|
+
params = params.append('isViewOnlyPrograms', true);
|
|
418
|
+
}
|
|
419
|
+
if (this.responsibilityId) {
|
|
420
|
+
params = params.append('reportId', this.responsibilityId);
|
|
246
421
|
}
|
|
247
422
|
this.responsibilityService.getProgramsList(params).subscribe({
|
|
248
423
|
next: (res) => {
|
|
@@ -255,6 +430,8 @@ export class ProgramListingComponent {
|
|
|
255
430
|
this.programData.AllOthersProgramsCount = res.AllOthersProgramsCount;
|
|
256
431
|
this.programData.AllRegulationProgramsCount = res.AllRegulationProgramsCount;
|
|
257
432
|
this.programData.AllStandardProgramsCount = res.AllStandardProgramsCount;
|
|
433
|
+
this.programData.AllProgramsCount = (res === null || res === void 0 ? void 0 : res.AllProgramsCount) ? res === null || res === void 0 ? void 0 : res.AllProgramsCount : 0;
|
|
434
|
+
this.programData.AllViewOnlyProgramCount = (res === null || res === void 0 ? void 0 : res.AllViewOnlyProgramCount) ? res === null || res === void 0 ? void 0 : res.AllViewOnlyProgramCount : 0;
|
|
258
435
|
this.loader = false;
|
|
259
436
|
},
|
|
260
437
|
error: err => {
|
|
@@ -263,22 +440,50 @@ export class ProgramListingComponent {
|
|
|
263
440
|
}
|
|
264
441
|
});
|
|
265
442
|
}
|
|
443
|
+
getProgramsCount(paramsObject) {
|
|
444
|
+
this.programCountLoader = true;
|
|
445
|
+
let params = new HttpParams();
|
|
446
|
+
// params = params.append('programType', this.programTypeObject[this.activeTab]);
|
|
447
|
+
if ((paramsObject === null || paramsObject === void 0 ? void 0 : paramsObject.search) || this.searchString) {
|
|
448
|
+
params = params.append('searchText', this.searchString);
|
|
449
|
+
}
|
|
450
|
+
if (this.responsibilityId) {
|
|
451
|
+
params = params.append('reportId', this.responsibilityId);
|
|
452
|
+
}
|
|
453
|
+
this.responsibilityService.getProgramsListCount(params).subscribe({
|
|
454
|
+
next: (res) => {
|
|
455
|
+
this.programTabDataCount.allRegulationProgramsCount = res === null || res === void 0 ? void 0 : res.AllRegulationProgramsCount;
|
|
456
|
+
this.programTabDataCount.allStandardProgramsCount = res === null || res === void 0 ? void 0 : res.AllStandardProgramsCount;
|
|
457
|
+
this.programTabDataCount.allInternalControlsProgramsCount = res === null || res === void 0 ? void 0 : res.AllInternalControlsProgramsCount;
|
|
458
|
+
this.programTabDataCount.allOthersProgramsCount = res === null || res === void 0 ? void 0 : res.AllOthersProgramsCount;
|
|
459
|
+
this.programCountLoader = false;
|
|
460
|
+
},
|
|
461
|
+
error: err => {
|
|
462
|
+
console.error(err);
|
|
463
|
+
this.programCountLoader = false;
|
|
464
|
+
}
|
|
465
|
+
});
|
|
466
|
+
}
|
|
266
467
|
getCategoriesList(queryObject) {
|
|
267
|
-
var _a;
|
|
268
468
|
this.loader = true;
|
|
269
469
|
let params = new HttpParams();
|
|
270
|
-
params = params.append('program_id',
|
|
470
|
+
// params = params.append('program_id', this.currentProgram?._id);
|
|
271
471
|
params = params.append('pageNo', this.categoryData.currentPage);
|
|
272
472
|
if (queryObject === null || queryObject === void 0 ? void 0 : queryObject.search) {
|
|
273
473
|
params = params.append('searchText', this.categorySearchString);
|
|
274
474
|
}
|
|
275
|
-
this.
|
|
475
|
+
if (this.responsibilityId) {
|
|
476
|
+
params = params.append('reportId', this.responsibilityId);
|
|
477
|
+
}
|
|
478
|
+
this.responsibilityService.getProgramsList(params, [...new Set(this.selectedProgramsId)]).subscribe({
|
|
276
479
|
next: (res) => {
|
|
480
|
+
var _a;
|
|
277
481
|
this.categoryData.data = res.data;
|
|
278
482
|
this.categoryData.from = res.from;
|
|
279
483
|
this.categoryData.to = res.to;
|
|
280
484
|
this.categoryData.totalPages = res.totalPages;
|
|
281
485
|
this.categoryData.totalRecords = res.totalRecords;
|
|
486
|
+
this.selectedSubCategoryIds = ((_a = res === null || res === void 0 ? void 0 : res.selectedSubCategoryIds) === null || _a === void 0 ? void 0 : _a.length) ? res === null || res === void 0 ? void 0 : res.selectedSubCategoryIds : [];
|
|
282
487
|
this.loader = false;
|
|
283
488
|
},
|
|
284
489
|
error: err => {
|
|
@@ -294,12 +499,15 @@ export class ProgramListingComponent {
|
|
|
294
499
|
if (mode) {
|
|
295
500
|
this.selectedIds.push(category.category_id);
|
|
296
501
|
this.categoryData.selectedCategories.push(category);
|
|
502
|
+
this.selectedCategories.push(category.category_id);
|
|
297
503
|
}
|
|
298
504
|
else {
|
|
299
505
|
const index = this.selectedIds.findIndex((element) => element == category.category_id);
|
|
300
506
|
this.selectedIds.splice(index, 1);
|
|
301
507
|
const categoryIndex = this.categoryData.selectedCategories.findIndex((ele) => ele.category_id == category.category_id);
|
|
302
508
|
this.categoryData.selectedCategories.splice(categoryIndex, 1);
|
|
509
|
+
const selectedIndex = this.selectedCategories.findIndex((ele) => ele == (category === null || category === void 0 ? void 0 : category.category_id));
|
|
510
|
+
this.selectedCategories.splice(selectedIndex, 1);
|
|
303
511
|
}
|
|
304
512
|
}
|
|
305
513
|
removeCategories(event) {
|
|
@@ -309,6 +517,14 @@ export class ProgramListingComponent {
|
|
|
309
517
|
this.selectedIds.splice(index, 1);
|
|
310
518
|
}
|
|
311
519
|
close() {
|
|
520
|
+
var _a, _b, _c, _d, _e;
|
|
521
|
+
const currentProgram = ((_a = this.preservePrimaryProgram) === null || _a === void 0 ? void 0 : _a.length) ? JSON.parse(this.preservePrimaryProgram) : {};
|
|
522
|
+
const selectedProgramsId = ((_b = this.preservedProgramsId) === null || _b === void 0 ? void 0 : _b.length) ? JSON.parse(this.preservedProgramsId) : undefined;
|
|
523
|
+
const selectedProgramsDetail = ((_c = this.preservedSelectedPrograms) === null || _c === void 0 ? void 0 : _c.length) ? JSON.parse(this.preservedSelectedPrograms) : [];
|
|
524
|
+
if (((_d = this.preservePrimaryProgram) === null || _d === void 0 ? void 0 : _d.length) && ((_e = this.preservedSelectedPrograms) === null || _e === void 0 ? void 0 : _e.length)) {
|
|
525
|
+
this.saveSelectedProgram.emit({ program: currentProgram, categories: JSON.parse(this.tempSelectedCategories), linkedProgram: selectedProgramsDetail });
|
|
526
|
+
}
|
|
527
|
+
// this.saveSelectedProgram.emit({program: currentProgram, categories: this.selectedIds, linkedProgram: selectedProgramsDetail });
|
|
312
528
|
this.closeEvent.emit();
|
|
313
529
|
}
|
|
314
530
|
save() {
|
|
@@ -316,54 +532,92 @@ export class ProgramListingComponent {
|
|
|
316
532
|
this.displayConfirmationMessage = true;
|
|
317
533
|
}
|
|
318
534
|
else {
|
|
319
|
-
this.
|
|
535
|
+
const selectedCategoryIds = this.selectedIds.concat(this.selectedSubCategoryIds);
|
|
536
|
+
this.saveSelectedProgram.emit({ program: this.currentProgram, categories: [...new Set(selectedCategoryIds)], linkedProgram: this.selectedProgramsDetail });
|
|
537
|
+
// this.saveSelectedProgram.emit({ program: this.currentProgram, categories: this.selectedIds });
|
|
320
538
|
}
|
|
321
539
|
}
|
|
322
540
|
saveChanges(value) {
|
|
323
541
|
if (value) {
|
|
324
|
-
this.
|
|
542
|
+
const selectedCategoryIds = this.selectedIds.concat(this.selectedSubCategoryIds);
|
|
543
|
+
this.saveSelectedProgram.emit({ program: this.currentProgram, categories: [...new Set(selectedCategoryIds)], linkedProgram: this.selectedProgramsDetail });
|
|
544
|
+
// this.saveSelectedProgram.emit({ program: this.currentProgram, categories: this.selectedIds });
|
|
325
545
|
}
|
|
326
546
|
else {
|
|
327
547
|
this.displayConfirmationMessage = false;
|
|
328
548
|
}
|
|
329
549
|
}
|
|
330
550
|
deleteEvent(event) {
|
|
331
|
-
|
|
551
|
+
var _a, _b, _c, _d;
|
|
552
|
+
const indexOfProgram = (_a = this.selectedProgramsDetail) === null || _a === void 0 ? void 0 : _a.findIndex((el) => (el === null || el === void 0 ? void 0 : el.category_id) === (event === null || event === void 0 ? void 0 : event.category_id));
|
|
553
|
+
if (indexOfProgram !== -1) {
|
|
554
|
+
(_b = this.selectedProgramsDetail) === null || _b === void 0 ? void 0 : _b.splice(indexOfProgram, 1);
|
|
555
|
+
}
|
|
556
|
+
const indexOfId = (_c = this.selectedProgramsId) === null || _c === void 0 ? void 0 : _c.findIndex((el) => el === (event === null || event === void 0 ? void 0 : event._id));
|
|
557
|
+
if (indexOfId !== -1) {
|
|
558
|
+
(_d = this.selectedProgramsId) === null || _d === void 0 ? void 0 : _d.splice(indexOfId, 1);
|
|
559
|
+
}
|
|
560
|
+
// this.currentProgram = undefined;
|
|
332
561
|
this.showCategories = false;
|
|
333
562
|
this.selectedIds = [];
|
|
334
563
|
this.categoryList = [];
|
|
335
564
|
//As this is a radio list and only one item can be selected thats why we are resetting all the counts to zero
|
|
336
|
-
this.
|
|
337
|
-
this.programData.SelectedOthersProgramsCount = 0;
|
|
338
|
-
this.programData.SelectedRegulationProgramsCount = 0;
|
|
339
|
-
this.programData.SelectedStandardProgramsCount = 0;
|
|
565
|
+
this.getSelectedProgramCount(false, event === null || event === void 0 ? void 0 : event.programType);
|
|
340
566
|
}
|
|
341
|
-
getSelectedProgramCount() {
|
|
342
|
-
this.
|
|
343
|
-
|
|
344
|
-
this.programData.SelectedRegulationProgramsCount = 0;
|
|
345
|
-
this.programData.SelectedStandardProgramsCount = 0;
|
|
346
|
-
switch (this.currentProgram.programType) {
|
|
567
|
+
getSelectedProgramCount(event, programType) {
|
|
568
|
+
// switch (this.currentProgram.programType) {
|
|
569
|
+
switch (programType) {
|
|
347
570
|
case 0:
|
|
348
|
-
this.programData.SelectedOthersProgramsCount
|
|
571
|
+
event ? this.programData.SelectedOthersProgramsCount++ : this.programData.SelectedOthersProgramsCount--;
|
|
349
572
|
break;
|
|
350
573
|
case 1:
|
|
351
|
-
this.programData.SelectedRegulationProgramsCount
|
|
574
|
+
event ? this.programData.SelectedRegulationProgramsCount++ : this.programData.SelectedRegulationProgramsCount--;
|
|
352
575
|
break;
|
|
353
576
|
case 2:
|
|
354
|
-
this.programData.SelectedStandardProgramsCount
|
|
577
|
+
event ? this.programData.SelectedStandardProgramsCount++ : this.programData.SelectedStandardProgramsCount--;
|
|
355
578
|
break;
|
|
356
579
|
case 3:
|
|
357
|
-
this.programData.SelectedInternalControlsProgramsCount
|
|
580
|
+
event ? this.programData.SelectedInternalControlsProgramsCount++ : this.programData.SelectedInternalControlsProgramsCount--;
|
|
358
581
|
break;
|
|
359
582
|
}
|
|
360
583
|
}
|
|
584
|
+
/**
|
|
585
|
+
* If the selectedProgram array has a length, then preserve the first element of the array as the
|
|
586
|
+
* preservePrimaryProgram variable. Otherwise, set the preservePrimaryProgram variable to an empty
|
|
587
|
+
* object.
|
|
588
|
+
*
|
|
589
|
+
* If the selectedProgramsId array has a length, then preserve the array as the preservedProgramsId
|
|
590
|
+
* variable. Otherwise, set the preservedProgramsId variable to an empty array.
|
|
591
|
+
*
|
|
592
|
+
* If the selectedProgramsDetail array has a length, then preserve the array as the
|
|
593
|
+
* preservedSelectedPrograms variable. Otherwise, set the preservedSelectedPrograms variable to an
|
|
594
|
+
* empty array.
|
|
595
|
+
*
|
|
596
|
+
* If the selectedProgram array does not have a length, then set the selectedProgramsDetail array to
|
|
597
|
+
* an empty array and the selectedProgramsId array to an empty array.
|
|
598
|
+
*/
|
|
599
|
+
preservePreviousDetails() {
|
|
600
|
+
var _a, _b, _c;
|
|
601
|
+
if (((_a = this.selectedProgram[0]) === null || _a === void 0 ? void 0 : _a.length) || this.currentProgram) {
|
|
602
|
+
this.preservePrimaryProgram = ((_b = this.selectedProgram) === null || _b === void 0 ? void 0 : _b.length) ? JSON.stringify(this.selectedProgram[0]) : {};
|
|
603
|
+
this.preservedProgramsId = ((_c = this.selectedProgramsId) === null || _c === void 0 ? void 0 : _c.length) ? JSON.stringify(this.selectedProgramsId) : [];
|
|
604
|
+
this.preservedSelectedPrograms = this.selectedProgramsDetail ? JSON.stringify(this.selectedProgramsDetail) : [];
|
|
605
|
+
}
|
|
606
|
+
else {
|
|
607
|
+
this.selectedProgramsDetail = [];
|
|
608
|
+
this.selectedProgramsId = [];
|
|
609
|
+
}
|
|
610
|
+
}
|
|
611
|
+
setProgramSubTab(tab) {
|
|
612
|
+
this.programSubTab = tab;
|
|
613
|
+
this.getProgramsList();
|
|
614
|
+
}
|
|
361
615
|
}
|
|
362
616
|
ProgramListingComponent.decorators = [
|
|
363
617
|
{ type: Component, args: [{
|
|
364
618
|
selector: 'app-program-listing',
|
|
365
|
-
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\"></i>\r\n <input type=\"text\" #searchProgram (keyup.enter)=\"handleSearch($event.target.value)\"\r\n placeholder=\"Search Programs\" />\r\n </div>\r\n <app-pagination *ngIf=\"programData.totalPages > 1\" [start]=\"programData.from\" [end]=\"programData.to\"\r\n [total]=\"programData.totalRecords\" [pageCount]=\"programData.totalPages\"\r\n [currentPage]=\"programData.currentPage\" (selectedPage)=\"changePage($event,'program')\"></app-pagination>\r\n <div class=\"program-listing-part\" [class.with-category-list]=\"!showCategories && !hideProgramsList\" [class.with-pagination]=\"programData.totalPages > 1\">\r\n <app-no-data *ngIf=\"programData?.data?.length==0 && !loader\"\r\n [noDataImage]=\"'https://cdn.v-comply.com/libraries/workflow-engine/assets/workflow/search-data.svg'\"\r\n [noDataText]=\"'No Data Found'\"></app-no-data>\r\n\r\n <div class=\"program-listing-item\" [class.active]=\"showCategories && currentProgram?._id == program?._id\"\r\n *ngFor=\"let program of programData.data;let i = index\">\r\n <div class=\"table-row main-list\" [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\"\r\n [tooltipMandatory]=\"true\">{{i+programData.from}}</div>\r\n <app-cs-radio [name]=\"'t'\" [checked]=\"currentProgram?._id == program?._id\"\r\n (checkedEvent)=\"selectProgram($event.target.checked,program)\"></app-cs-radio>\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\"\r\n type=\"black\" [tooltipMandatory]=\"false\">{{program?.name}}</div>\r\n </div>\r\n\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\"\r\n [disabled]=\"false\">\r\n <i *ngIf=\"!(showCategories && currentProgram?._id == program?._id)\"\r\n (click)=\"selectProgram($event,program)\" class=\"icons\"></i>\r\n <i *ngIf=\"showCategories && currentProgram?._id == program?._id\" class=\"icons\"></i>\r\n </button>\r\n </div>\r\n </div>\r\n\r\n </div>\r\n </div>\r\n </div>\r\n\r\n <div class=\"program-listing-confirmation\" *ngIf=\"displayConfirmationMessage\">\r\n <div class=\"confirmation-top\">\r\n <div class=\"icon-block\"><i class=\"icons\"></i></div>\r\n <div class=\"text\">Once you select this Program, all default values associated with this Program will also be updated.</div>\r\n </div>\r\n <div class=\"confirmation-bottom\">\r\n <div class=\"message\">Are you sure you would like to proceed?</div>\r\n <div class=\"button-group\">\r\n <button class=\"no-btn\" (click)=\"saveChanges(false)\">NO</button>\r\n <button class=\"yes-btn\" (click)=\"saveChanges(true)\">YES</button>\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'\" (closeEvent)=\"openCategories()\"\r\n (deleteEvent)=\"deleteEvent($event)\" [isDisabled]=\"((currentProgram?.category_id)?[currentProgram]:[])?.length ? false :true \" (closeList)=\"close()\">\r\n </app-floating-bar>\r\n\r\n\r\n <app-loader *ngIf=\"loader\"></app-loader>\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\">\r\n <button class=\"back-btn\" (click)=\"backToPrograms()\"><i class=\"icons\"></i></button>\r\n Program > <span *ngIf=\"currentProgram?.name\"> {{currentProgram?.name}} > </span> Select Program Categories\r\n </h3>\r\n </div>\r\n <div class=\"program-listing-body\">\r\n\r\n <div class=\"search-block\">\r\n <i class=\"icons\"></i>\r\n <input type=\"text\" #searchCategory (keyup.enter)=\"categorySearch($event.target.value)\"\r\n placeholder=\"Search Categories\" />\r\n </div>\r\n <app-pagination *ngIf=\"categoryData.totalPages > 1\" [start]=\"categoryData.from\" [end]=\"categoryData.to\"\r\n [total]=\"categoryData.totalRecords\" [pageCount]=\"categoryData.totalPages\"\r\n [currentPage]=\"categoryData.currentPage\" (selectedPage)=\"changePage($event,'category')\"></app-pagination>\r\n <div class=\"program-listing-part\">\r\n <app-no-data *ngIf=\"categoryData?.data?.length==0 && !loader\"\r\n [noDataImage]=\"'https://cdn.v-comply.com/libraries/workflow-engine/assets/workflow/search-data.svg'\"\r\n [noDataText]=\"'No Data Found'\"></app-no-data>\r\n\r\n <ng-container *ngIf=\"!loader && categoryData.data?.length\">\r\n <div class=\"selected-area\" *ngIf=\"!loader && (currentProgram?.name ? categoryData.data?.length : programData?.data?.length)\">\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\">\r\n <div class=\"table-column serial\">\r\n <div class=\"sr-no\" [appTooltip]=\"i + categoryData?.from\" placement=\"bottom\" delay=\"0\" type=\"black\"\r\n [tooltipMandatory]=\"true\">{{i + categoryData?.from}}</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\"\r\n type=\"black\" [tooltipMandatory]=\"false\">{{category?.name}}</div>\r\n </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'\"\r\n placement=\"bottom-left\" delay=\"0\" type=\"black\" [tooltipMandatory]=\"false\">\r\n <span\r\n *ngFor=\"let parent of category?.parent_category_name;let j=index\">{{(j!=(category?.parent_category_name?.length-1))?\r\n 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 <div class=\"program-listing-confirmation\" *ngIf=\"displayConfirmationMessage\">\r\n <div class=\"confirmation-top\">\r\n <div class=\"icon-block\"><i class=\"icons\"></i></div>\r\n <div class=\"text\">Once you select this Program, all default values associated with this Program will also be updated.</div>\r\n </div>\r\n <div class=\"confirmation-bottom\">\r\n <div class=\"message\">Are you sure you would like to proceed?</div>\r\n <div class=\"button-group\">\r\n <button class=\"no-btn\" (click)=\"saveChanges(false)\">NO</button>\r\n <button class=\"yes-btn\" (click)=\"saveChanges(true)\">YES</button>\r\n </div>\r\n </div>\r\n </div>\r\n <app-floating-bar [selectedData]=\"categoryData.selectedCategories\" [displayElementKey]=\"'name'\"\r\n [singularText]=\"'Category selected'\"\r\n [pluralText]=\"'Categories selected'\" (closeEvent)=\"save()\"\r\n (deleteEvent)=\"removeCategories($event)\" (closeList)=\"backToPrograms()\">\r\n </app-floating-bar>\r\n <app-loader *ngIf=\"loader\"></app-loader>\r\n </div>\r\n",
|
|
366
|
-
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-head button.back-btn{background:transparent;border:none;border-radius:0;font-size:16px;padding:0;margin:0 8px 0 0;position:relative;top:2px}::ng-deep .program-listing-title{color:#161b2f;font-size:15px;font-weight:500;margin:0!important;line-height:20px;text-overflow:ellipsis;white-space:nowrap;overflow:hidden;padding:0 20px 0 0}::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;box-shadow:0 0 2px #00000029;border-radius:4px;height:56px;padding:12px;width:100%;justify-content:space-between;cursor:pointer}::ng-deep .program-listing-body .filter-card.active{box-shadow:0 3px 12px #1e5dd340;pointer-events:none}::ng-deep .program-listing-body .filter-card.active span.counter{background:#f1f1f1;color:#042e7d}::ng-deep .program-listing-body .filter-card label{font-weight:500;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:11px;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:2px;background:#042e7d;color:#fff;font-size:11px;font-weight:600;justify-content:center;align-items:center;padding:0 4px;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:4px}::ng-deep .program-listing-body .filter-card-row{display:flex;padding-bottom:8px}::ng-deep .program-listing-body .search-block{position:relative;margin-bottom:8px}::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 app-pagination .wk-pagination-sec-ds{padding-top:0!important}::ng-deep .program-listing-body .program-listing-part{height:calc(100vh - 192px);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-pagination{height:calc(100vh - 262px)}::ng-deep .program-listing-body .program-listing-part.with-category-list{height:calc(100vh - 262px)}::ng-deep .program-listing-body .program-listing-part.with-category-list.with-pagination{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}::ng-deep .program-listing-confirmation{background:#161b2f;border-radius:.25rem;position:absolute;left:1rem;right:1rem;bottom:1.75rem;z-index:1}::ng-deep .program-listing-confirmation .confirmation-top{display:flex;align-items:center;justify-content:flex-start;padding:1.25rem}::ng-deep .program-listing-confirmation .confirmation-top .icon-block{height:2.25rem;width:2.25rem;border-radius:50%;background:#fff;border:1px solid #dbdbdb;display:flex;justify-content:center;align-items:center;margin-right:1rem}::ng-deep .program-listing-confirmation .confirmation-top .icon-block i{color:#eb2424;font-size:12px}::ng-deep .program-listing-confirmation .confirmation-top .text{color:#fff;font-size:14px;font-weight:300}::ng-deep .program-listing-confirmation .confirmation-bottom{background:#282e48;border-radius:0 0 .25rem .25rem;padding:.75rem .75rem .75rem 1.25rem;display:flex;align-items:center;justify-content:space-between}::ng-deep .program-listing-confirmation .confirmation-bottom .message{font-size:14px;font-weight:500;line-height:20px;color:#fff}::ng-deep .program-listing-confirmation .confirmation-bottom .button-group{display:flex}::ng-deep .program-listing-confirmation .confirmation-bottom .button-group button{height:1.5rem;width:4rem;border:1px solid #fff;border-radius:.125rem;display:flex;align-items:center;justify-content:center;line-height:22px;cursor:pointer;font-size:11px;text-transform:uppercase;font-weight:500;padding:0}::ng-deep .program-listing-confirmation .confirmation-bottom .button-group button.no-btn{background:transparent;color:#fff}::ng-deep .program-listing-confirmation .confirmation-bottom .button-group button.yes-btn{background:#fff;color:#1e5dd3;margin-left:.25rem}.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}"]
|
|
619
|
+
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 <span class=\"counter\">{{programTabDataCount?.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 <span class=\"counter\">{{programTabDataCount?.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 <span class=\"counter\">{{programTabDataCount?.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 <span class=\"counter\">{{programTabDataCount?.allOthersProgramsCount}}</span>\r\n </div>\r\n </div>\r\n <div class=\"search-block\">\r\n <i class=\"icons\"></i>\r\n <input type=\"text\" #searchProgram (keyup.enter)=\"handleSearch($event.target.value)\"\r\n placeholder=\"Search Programs\" />\r\n </div>\r\n <!-- mode === 'EDIT' -->\r\n <div *ngIf=\"mode === 'EDIT' && programData?.AllViewOnlyProgramCount\" class=\"program-listing-tab vx-d-flex vx-align-center\">\r\n <button (click)=\"setProgramSubTab('PROGRAMS')\" class=\"vx-fs-11 vx-fw-600 vx-paragraph-txt vx-tt-uppercase vx-p-0 vx-pb-2 vx-m-0 vx-d-flex vx-align-center vx-lh-4\" [class.active]=\"programSubTab === 'PROGRAMS'\">PROGRAMS <span class=\"count vx-pl-1 vx-pr-1 vx-d-flex vx-align-center vx-justify-center vx-ml-2 vx-lh-4\">{{programData?.AllProgramsCount}}</span></button>\r\n <button (click)=\"setProgramSubTab('OTHER_PROGRAMS')\" class=\"vx-fs-11 vx-fw-600 vx-paragraph-txt vx-tt-uppercase vx-p-0 vx-pb-2 vx-m-0 vx-d-flex vx-align-center vx-lh-4\" [class.active]=\"programSubTab === 'OTHER_PROGRAMS'\">OTHER PROGRAMS <span class=\"count vx-pl-1 vx-pr-1 vx-d-flex vx-align-center vx-justify-center vx-ml-2 vx-lh-4\">{{programData?.AllViewOnlyProgramCount}}</span></button>\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 && !hideProgramsList\" [class.with-program-tab]=\"false\" [class.with-pagination]=\"programData.totalPages > 1\">\r\n <app-no-data *ngIf=\"programData?.data?.length===0 && !loader\"\r\n [noDataImage]=\"'https://cdn.v-comply.com/libraries/workflow-engine/assets/workflow/search-data.svg'\"\r\n [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\" [class.final-select]=\"false\">\r\n <!-- after category was select & user move to back and edit then final-select class was show -->\r\n <div class=\"table-row main-list\" [class.active]=\"selectedProgramsId?.includes(program?._id)\" [class.disabled]=\"currentProgram?._id === program?._id && (mode === 'EDIT' || openedFrom === 'PROGRAM_WORKROOM') && programSubTab !== 'OTHER_PROGRAMS'\">\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-checkbox\r\n *ngIf=\"programSubTab !== 'OTHER_PROGRAMS'\"\r\n [disabled]=\"currentProgram?._id === program?._id && (mode === 'EDIT' || openedFrom === 'PROGRAM_WORKROOM')\"\r\n [ngValue]=\"selectedProgramsId?.includes(program?._id)\"\r\n (ngValueChange)=\"selectProgram($event,program)\"\r\n ></app-cs-checkbox>\r\n <!-- <app-cs-radio [name]=\"'t'\" [checked]=\"currentProgram?._id == program?._id\" (checkedEvent)=\"selectProgram($event.target.checked,program)\"></app-cs-radio> -->\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 </div>\r\n </div>\r\n </div>\r\n <div class=\"table-column primary-program\" >\r\n <app-cs-switch\r\n *ngIf=\"!(mode === 'EDIT' || openedFrom === 'PROGRAM_WORKROOM') || currentProgram?._id === program?._id\"\r\n [disabled]=\"currentProgram?._id === program?._id\"\r\n [ngValue]='currentProgram?._id === program?._id' \r\n (ngValueChange)=\"setPrimaryProgram($event, program)\"\r\n >{{currentProgram?._id === program?._id ? 'PRIMARY PROGRAM' : 'SET AS PRIMARY PROGRAM'}}</app-cs-switch>\r\n </div>\r\n <!-- <div class=\"table-column action\">\r\n <button class=\"arrow\" *ngIf=\"program?.child_id?.length\" [class.disabled]=\"false\"\r\n [disabled]=\"false\">\r\n <i *ngIf=\"!(showCategories && currentProgram?._id == program?._id)\"\r\n (click)=\"selectProgram($event,program)\" class=\"icons\"></i>\r\n <i *ngIf=\"showCategories && currentProgram?._id == program?._id\" class=\"icons\"></i>\r\n </button>\r\n </div> -->\r\n </div>\r\n\r\n </div>\r\n </div>\r\n </div>\r\n <div class=\"program-listing-confirmation\" *ngIf=\"displayConfirmationMessage\">\r\n <div class=\"confirmation-top\">\r\n <div class=\"icon-block\"><i class=\"icons\"></i></div>\r\n <div class=\"text\">Once you select this Program, all default values associated with this Program will also be updated.</div>\r\n </div>\r\n <div class=\"confirmation-bottom\">\r\n <div class=\"message\">Are you sure you would like to proceed?</div>\r\n <div class=\"button-group\">\r\n <button class=\"no-btn\" (click)=\"saveChanges(false)\">NO</button>\r\n <button class=\"yes-btn\" (click)=\"saveChanges(true)\">YES</button>\r\n </div>\r\n </div>\r\n </div>\r\n <div class=\"program-listing-confirmation\" *ngIf=\"isPrimaryConfirmation && !isPrimaryUnchecked\">\r\n <div class=\"confirmation-top\">\r\n <div class=\"icon-block\"><i class=\"icons\"></i></div>\r\n <div class=\"text\" [innerHTML]=\"primaryConfirmationMessage\"></div>\r\n </div>\r\n <div class=\"confirmation-bottom\">\r\n <div class=\"message\">Are you sure you would like to proceed?</div>\r\n <div class=\"button-group\">\r\n <button class=\"no-btn\" (click)=\"updatePrimaryProgram(false)\">NO</button>\r\n <button class=\"yes-btn\" (click)=\"updatePrimaryProgram(true)\">YES</button>\r\n </div>\r\n </div>\r\n </div>\r\n\r\n <div class=\"program-listing-confirmation error-confirmation\" *ngIf=\"isPrimaryUnchecked\">\r\n <div class=\"confirmation-top\">\r\n <div class=\"vx-d-flex vx-align-center\">\r\n <div class=\"icon-block\"><i class=\"icons\"></i></div>\r\n <div class=\"text vx-pr-4\">You cannot deselect this Program since this is the <em>Primary Program</em> for this responsibility. To proceed, first select another Program as the <em>Primary Program</em>.</div>\r\n </div>\r\n <button class=\"ok-btn\" (click)=\"updatePrimaryProgram(false)\">OK</button>\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'\" (closeEvent)=\"openCategories()\"\r\n (deleteEvent)=\"deleteEvent($event)\" [isDisabled]=\"((currentProgram?.category_id)?[currentProgram]:[])?.length ? false :true \" (closeList)=\"close()\">\r\n </app-floating-bar> -->\r\n\r\n <!-- ((currentProgram?.category_id)?[currentProgram]:[])?.length ? false :true -->\r\n <app-floating-bar [selectedData]=\"(selectedProgramsDetail?.length) ? selectedProgramsDetail : []\" [displayElementKey]=\"'name'\"\r\n [singularText]=\"'Program selected'\" [pluralText]=\"'Programs selected'\" (closeEvent)=\"openCategories()\"\r\n (deleteEvent)=\"deleteEvent($event)\" [isDisabled]=\"((currentProgram?.category_id)?[currentProgram]:[])?.length ? false :true\" (closeList)=\"close()\" [defaultSelected]=\"currentProgram\" [nonRemovableUsersList]=\"(mode === 'EDIT' || openedFrom === 'PROGRAM_WORKROOM') ? viewOnlyProgramsCategoryId : [currentProgram?.category_id]\" [elementId]=\"'category_id'\">\r\n </app-floating-bar>\r\n\r\n <app-loader *ngIf=\"loader\"></app-loader>\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\">\r\n <button class=\"back-btn\" (click)=\"backToPrograms()\"><i class=\"icons\"></i></button>\r\n <!-- <span *ngIf=\"currentProgram?.name\"> {{currentProgram?.name}} > </span> -->\r\n Program > Select Program Categories\r\n </h3>\r\n </div>\r\n <div class=\"program-listing-body\">\r\n <div class=\"search-block\">\r\n <i class=\"icons\"></i>\r\n <input type=\"text\" #searchCategory (keyup.enter)=\"categorySearch($event.target.value)\"\r\n placeholder=\"Search Categories\" />\r\n </div>\r\n <app-pagination *ngIf=\"categoryData.totalPages > 1\" class=\"category-pagination\" [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-pagination]=\"categoryData.totalPages > 1\">\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 *ngIf=\"!loader && categoryData.data?.length\">\r\n <ng-container *ngIf=\"false\">\r\n <div class=\"selected-area\" *ngIf=\"!loader && (currentProgram?.name ? categoryData.data?.length : programData?.data?.length)\">\r\n <app-cs-checkbox *ngIf=\"checkCategoriesSelection()=='checked'\" [ngValue]=\"true\" (ngValueChange)=\"selectAllCategories(false)\">Deselect All</app-cs-checkbox>\r\n <app-cs-checkbox-indeterminate *ngIf=\"checkCategoriesSelection()=='indeterminate'\" [ngValue]=\"true\" (ngValueChange)=\"selectAllCategories(false)\">Deselect All</app-cs-checkbox-indeterminate>\r\n <app-cs-checkbox *ngIf=\"checkCategoriesSelection()=='unchecked'\" [ngValue]=\"false\" (ngValueChange)=\"selectAllCategories(true)\">Select All</app-cs-checkbox>\r\n </div>\r\n </ng-container>\r\n <div class=\"table-head\">\r\n <div class=\"table-row\">\r\n <div class=\"table-column serial\">#</div>\r\n <div class=\"table-column category-name\">CATEGORIES</div>\r\n <div class=\"table-column category-within\">WITHIN</div>\r\n </div>\r\n </div>\r\n <div class=\"program-listing-item\" [class.active]=\"subList\" *ngFor=\"let category of categoryData.data;let i = index\" [class.active]=\"selectedIds.includes(category.category_id)\">\r\n <div class=\"table-row main-list\" [class.disabled]=\"false\">\r\n <div class=\"table-column serial\">\r\n <div class=\"sr-no\" [appTooltip]=\"i + categoryData?.from\" placement=\"bottom\" delay=\"0\" type=\"black\"\r\n [tooltipMandatory]=\"true\">{{i + categoryData?.from}}</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 category-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>\r\n </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))?\r\n parent+' < ':parent}} </span>\r\n </span>\r\n </div> -->\r\n </div>\r\n </div>\r\n <div class=\"table-column category-within\" *ngIf=\"category?.parent_category_name?.length > 0\">\r\n <div *ngFor=\"let parent of category?.parent_category_name; let last = last\" class=\"within-name\" [appTooltip]=\"category?.parent_category_name?.slice()?.reverse()?.join(' > ')\" placement=\"bottom-left\" delay=\"0\" type=\"black\" [tooltipMandatory]=\"false\">{{parent}} \r\n <span *ngIf=\"!last\"> > </span>\r\n </div>\r\n <div *ngIf=\"category?.parent_category_ids?.includes(currentProgram?.category_id)\" class=\"primary-label\">PRIMARY</div>\r\n </div>\r\n </div>\r\n </div>\r\n </ng-container>\r\n </div>\r\n </div>\r\n <div class=\"program-listing-confirmation\" *ngIf=\"displayConfirmationMessage\">\r\n <div class=\"confirmation-top\">\r\n <div class=\"icon-block\"><i class=\"icons\"></i></div>\r\n <div class=\"text\">Once you select this Program, all default values associated with this Program will also be updated.</div>\r\n </div>\r\n <div class=\"confirmation-bottom\">\r\n <div class=\"message\">Are you sure you would like to proceed?</div>\r\n <div class=\"button-group\">\r\n <button class=\"no-btn\" (click)=\"saveChanges(false)\">NO</button>\r\n <button class=\"yes-btn\" (click)=\"saveChanges(true)\">YES</button>\r\n </div>\r\n </div>\r\n </div>\r\n <app-floating-bar [selectedData]=\"categoryData.selectedCategories\" [displayElementKey]=\"'name'\"\r\n [singularText]=\"'Program Category selected'\"\r\n [pluralText]=\"'Program Categories selected'\" (closeEvent)=\"save()\"\r\n (deleteEvent)=\"removeCategories($event)\" (closeList)=\"backToPrograms()\">\r\n </app-floating-bar>\r\n <app-loader *ngIf=\"loader\"></app-loader>\r\n </div>\r\n",
|
|
620
|
+
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-head button.back-btn{background:transparent;border:none;border-radius:0;font-size:16px;padding:0;margin:0 8px 0 0;position:relative;top:2px}::ng-deep .program-listing-title{color:#161b2f;font-size:15px;font-weight:500;margin:0!important;line-height:20px;text-overflow:ellipsis;white-space:nowrap;overflow:hidden;padding:0 20px 0 0}::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;box-shadow:0 0 2px #00000029;border-radius:4px;height:56px;padding:12px;width:100%;justify-content:space-between;cursor:pointer}::ng-deep .program-listing-body .filter-card.active{box-shadow:0 3px 12px #1e5dd340;pointer-events:none}::ng-deep .program-listing-body .filter-card.active span.counter{background:#f1f1f1;color:#042e7d}::ng-deep .program-listing-body .filter-card label{font-weight:500;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:11px;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:2px;background:#042e7d;color:#fff;font-size:11px;font-weight:600;justify-content:center;align-items:center;padding:0 4px;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:4px}::ng-deep .program-listing-body .filter-card-row{display:flex;padding-bottom:8px}::ng-deep .program-listing-body .search-block{position:relative;margin-bottom:8px}::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 app-pagination .wk-pagination-sec-ds{padding-top:0!important}::ng-deep .program-listing-body app-pagination.category-pagination .wk-pagination-sec-ds{padding-bottom:0!important}::ng-deep .program-listing-body .program-listing-part{height:calc(100vh - 192px);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-pagination{height:calc(100vh - 262px)}::ng-deep .program-listing-body .program-listing-part.with-category-list{height:calc(100vh - 262px)}::ng-deep .program-listing-body .program-listing-part.with-category-list.with-pagination{height:calc(100vh - 300px)}::ng-deep .program-listing-body .program-listing-part.with-program-tab{height:calc(100vh - 292px)}::ng-deep .program-listing-body .program-listing-part.with-program-tab.with-pagination{height:calc(100vh - 330px)}::ng-deep .program-listing-body .program-listing-part.with-category-pagination{height:calc(100vh - 220px)}::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 .selected-area app-cs-checkbox-indeterminate .checkbox-item .value{margin-left:0}::ng-deep .program-listing-body .program-listing-part .table-head{background:#fff;position:sticky;top:0;z-index:1}::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:#161b2f;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 .table-head .table-row .table-column.category-name{width:calc(100% - 332px);min-width:calc(100% - 332px)}::ng-deep .program-listing-body .program-listing-part .table-head .table-row .table-column.category-within{width:300px;min-width:300px}::ng-deep .program-listing-body .program-listing-part .program-listing-item.final-select{background:#fbfbfb}::ng-deep .program-listing-body .program-listing-part .program-listing-item.final-select .table-row .table-column.serial .sr-no{background:transparent}::ng-deep .program-listing-body .program-listing-part .program-listing-item .main-list{border:1px solid #f1f1f1;border-radius:2px;cursor:pointer;margin-bottom:4px}::ng-deep .program-listing-body .program-listing-part .program-listing-item.active .table-row .table-column.serial .sr-no{opacity:0}::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.disabled .primary-program app-cs-switch .cs-switch .value{opacity:.4}::ng-deep .program-listing-body .program-listing-part .program-listing-item .table-row.disabled .name .name-inner .name-with-count .value{color:#dbdbdb!important}::ng-deep .program-listing-body .program-listing-part .program-listing-item .table-row .table-column{color:#747576;height:40px;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:12px}::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% - 232px);min-width:calc(100% - 232px)}::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.category-name{width:calc(100% - 332px);min-width:calc(100% - 332px)}::ng-deep .program-listing-body .program-listing-part .program-listing-item .table-row .table-column.category-name .name-inner{width:100%}::ng-deep .program-listing-body .program-listing-part .program-listing-item .table-row .table-column.category-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.category-name .name-inner .name-with-count .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.category-within{width:300px;min-width:300px}::ng-deep .program-listing-body .program-listing-part .program-listing-item .table-row .table-column.category-within .within-name{color:#747576;font-size:12px;text-overflow:ellipsis;white-space:nowrap;overflow:hidden}::ng-deep .program-listing-body .program-listing-part .program-listing-item .table-row .table-column.category-within .primary-label{background:#7aa7f7;border-radius:2px;color:#fff;font-size:9px;font-weight:500;text-transform:uppercase;padding:0 4px;line-height:12px;margin:0 4px}::ng-deep .program-listing-body .program-listing-part .program-listing-item .table-row .table-column.primary-program{width:200px;max-width:200px;justify-content:end}::ng-deep .program-listing-body .program-listing-part .program-listing-item .table-row .table-column.primary-program app-cs-switch{opacity:0;transition:all .2s ease-in-out}::ng-deep .program-listing-body .program-listing-part .program-listing-item .table-row .table-column.primary-program app-cs-switch .cs-switch .value{font-size:11px!important;color:#747576!important;font-weight:500!important;width:auto!important;margin-right:8px;cursor:pointer}::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 .table-row.active .table-column.primary-program app-cs-switch,::ng-deep .program-listing-body .program-listing-part .program-listing-item .table-row:hover .table-column.primary-program app-cs-switch{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}::ng-deep .program-listing-tab{border-bottom:1px solid #dbdbdb;margin-bottom:8px}::ng-deep .program-listing-tab button{background:transparent;border-radius:0;border:none;border-bottom:3px solid transparent;margin-right:40px!important}::ng-deep .program-listing-tab button span.count{border-radius:20px;color:#74757680;min-width:24px}::ng-deep .program-listing-tab button.active{border-color:#1e5dd3;color:#1e5dd3}::ng-deep .program-listing-tab button.active span.count{background:#1e5dd3;color:#fff;font-weight:500}::ng-deep .program-listing-confirmation{background:#161b2f;border-radius:.25rem;position:absolute;left:1rem;right:1rem;bottom:1rem;z-index:1}::ng-deep .program-listing-confirmation .confirmation-top{display:flex;align-items:center;justify-content:flex-start;padding:1.25rem}::ng-deep .program-listing-confirmation .confirmation-top .icon-block{height:2.25rem;min-width:2.25rem;border-radius:50%;background:#fff;border:1px solid #dbdbdb;display:flex;justify-content:center;align-items:center;margin-right:1rem}::ng-deep .program-listing-confirmation .confirmation-top .icon-block i{color:#eb2424;font-size:12px}::ng-deep .program-listing-confirmation .confirmation-top .text{color:#fff;font-size:14px;font-weight:300}::ng-deep .program-listing-confirmation .confirmation-bottom{background:#282e48;border-radius:0 0 .25rem .25rem;padding:.75rem .75rem .75rem 1.25rem;display:flex;align-items:center;justify-content:space-between}::ng-deep .program-listing-confirmation .confirmation-bottom .message{font-size:14px;font-weight:500;line-height:20px;color:#fff}::ng-deep .program-listing-confirmation .confirmation-bottom .button-group{display:flex}::ng-deep .program-listing-confirmation .confirmation-bottom .button-group button{height:1.5rem;width:4rem;border:1px solid #fff;border-radius:.125rem;display:flex;align-items:center;justify-content:center;line-height:22px;cursor:pointer;font-size:11px;text-transform:uppercase;font-weight:500;padding:0}::ng-deep .program-listing-confirmation .confirmation-bottom .button-group button.no-btn{background:transparent;color:#fff}::ng-deep .program-listing-confirmation .confirmation-bottom .button-group button.yes-btn{background:#fff;color:#1e5dd3;margin-left:.25rem}::ng-deep .program-listing-confirmation.error-confirmation{background:#eb2424}::ng-deep .program-listing-confirmation.error-confirmation .confirmation-top{justify-content:space-between}::ng-deep .program-listing-confirmation.error-confirmation .confirmation-top button{height:1.5rem;width:3rem;border:1px solid #fff;border-radius:.125rem;display:flex;align-items:center;justify-content:center;line-height:22px;cursor:pointer;font-size:11px;text-transform:uppercase;font-weight:500;padding:0}::ng-deep .program-listing-confirmation.error-confirmation .confirmation-top button.ok-btn{background:#fff;color:#eb2424;margin-left:.25rem}.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}"]
|
|
367
621
|
},] }
|
|
368
622
|
];
|
|
369
623
|
ProgramListingComponent.ctorParameters = () => [
|
|
@@ -372,11 +626,15 @@ ProgramListingComponent.ctorParameters = () => [
|
|
|
372
626
|
ProgramListingComponent.propDecorators = {
|
|
373
627
|
programsList: [{ type: Input }],
|
|
374
628
|
selectedProgram: [{ type: Input }],
|
|
375
|
-
|
|
629
|
+
openedFrom: [{ type: Input }],
|
|
630
|
+
getSelectedCategories: [{ type: Input, args: ['selectedCategories',] }],
|
|
631
|
+
responsibilityId: [{ type: Input }],
|
|
376
632
|
hideProgramsList: [{ type: Input }],
|
|
633
|
+
mode: [{ type: Input }],
|
|
377
634
|
searchProgram: [{ type: ViewChild, args: ['searchProgram',] }],
|
|
378
635
|
searchCategory: [{ type: ViewChild, args: ['searchCategory',] }],
|
|
636
|
+
getLinkedProgram: [{ type: Input, args: ['linkedProgram',] }],
|
|
379
637
|
saveSelectedProgram: [{ type: Output }],
|
|
380
638
|
closeEvent: [{ type: Output }]
|
|
381
639
|
};
|
|
382
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicHJvZ3JhbS1saXN0aW5nLmNvbXBvbmVudC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL3Z4LXdvcmtmbG93LWVuZ2luZS9zcmMvbGliL3NoYXJlZENvbXBvbmVudHMvcHJvZ3JhbS1saXN0aW5nL3Byb2dyYW0tbGlzdGluZy5jb21wb25lbnQudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFFLFVBQVUsRUFBRSxNQUFNLHNCQUFzQixDQUFDO0FBQ2xELE9BQU8sRUFBRSxTQUFTLEVBQUUsWUFBWSxFQUFFLEtBQUssRUFBVSxNQUFNLEVBQUUsU0FBUyxFQUFFLE1BQU0sZUFBZSxDQUFDO0FBQzFGLE9BQU8sRUFBRSxxQkFBcUIsRUFBRSxNQUFNLGdEQUFnRCxDQUFDO0FBUXZGLE1BQU0sT0FBTyx1QkFBdUI7SUFpRWxDLFlBQW9CLHFCQUE0QztRQUE1QywwQkFBcUIsR0FBckIscUJBQXFCLENBQXVCO1FBaEVoRSxjQUFTLEdBQUcsS0FBSyxDQUFDO1FBQ2xCLFlBQU8sR0FBRyxLQUFLLENBQUM7UUFDaEIsV0FBTSxHQUFHLEtBQUssQ0FBQztRQUlOLHVCQUFrQixHQUFVLEVBQUUsQ0FBQztRQUl4QywyQkFBc0IsR0FBSztZQUN6QixPQUFPLEVBQUMsRUFBRTtZQUNWLFVBQVUsRUFBQyxFQUFFO1NBQ2QsQ0FBQTtRQUNELGdCQUFXLEdBQWdCO1lBQ3pCLElBQUksRUFBRSxFQUFFO1lBQ1IsSUFBSSxFQUFFLENBQUM7WUFDUCxFQUFFLEVBQUUsQ0FBQztZQUNMLFVBQVUsRUFBRSxDQUFDO1lBQ2IsWUFBWSxFQUFFLENBQUM7WUFDZixXQUFXLEVBQUUsQ0FBQztZQUNkLGdDQUFnQyxFQUFFLENBQUM7WUFDbkMsc0JBQXNCLEVBQUUsQ0FBQztZQUN6QiwwQkFBMEIsRUFBRSxDQUFDO1lBQzdCLHdCQUF3QixFQUFFLENBQUM7WUFDM0IscUNBQXFDLEVBQUUsQ0FBQztZQUN4QywyQkFBMkIsRUFBRSxDQUFDO1lBQzlCLCtCQUErQixFQUFFLENBQUM7WUFDbEMsNkJBQTZCLEVBQUUsQ0FBQztTQUNqQyxDQUFBO1FBRUQsaUJBQVksR0FBaUI7WUFDM0IsSUFBSSxFQUFFLEVBQUU7WUFDUixJQUFJLEVBQUUsQ0FBQztZQUNQLEVBQUUsRUFBRSxDQUFDO1lBQ0wsVUFBVSxFQUFFLENBQUM7WUFDYixZQUFZLEVBQUUsQ0FBQztZQUNmLFdBQVcsRUFBRSxDQUFDO1lBQ2Qsa0JBQWtCLEVBQUUsRUFBRTtTQUN2QixDQUFBO1FBRUQsbUJBQWMsR0FBRyxLQUFLLENBQUM7UUFFdkIsaUJBQVksR0FBVyxFQUFFLENBQUM7UUFDMUIseUJBQW9CLEdBQVcsRUFBRSxDQUFDO1FBRWxDLGNBQVMsR0FBaUUsYUFBYSxDQUFBO1FBQ3ZGLGdCQUFXLEdBQVUsRUFBRSxDQUFDO1FBQ3hCLGlCQUFZLEdBQVUsRUFBRSxDQUFDO1FBR3pCLHNCQUFpQixHQUFHO1lBQ2xCLFdBQVcsRUFBRSxDQUFDO1lBQ2QsU0FBUyxFQUFFLENBQUM7WUFDWixpQkFBaUIsRUFBRSxDQUFDO1lBQ3BCLE1BQU0sRUFBRSxDQUFDO1NBQ1YsQ0FBQTtRQUVELCtCQUEwQixHQUFTLEtBQUssQ0FBQTtRQUU5Qix3QkFBbUIsR0FBRyxJQUFJLFlBQVksRUFBRSxDQUFDO1FBQ3pDLGVBQVUsR0FBRyxJQUFJLFlBQVksRUFBRSxDQUFDO1FBQzFDLGtCQUFhLEdBQVUsRUFBRSxDQUFDO0lBRzFCLENBQUM7SUFFRCxRQUFROztRQUNOLElBQUksQ0FBQyxTQUFTLEdBQUcsSUFBSSxDQUFDO1FBQ3RCLFVBQVUsQ0FBQyxHQUFHLEVBQUU7WUFDZCxJQUFJLENBQUMsU0FBUyxHQUFHLEtBQUssQ0FBQztRQUN6QixDQUFDLEVBQUUsR0FBRyxDQUFDLENBQUM7UUFDUixJQUFJLElBQUksQ0FBQyxlQUFlLElBQUksSUFBSSxDQUFDLGVBQWUsQ0FBQyxDQUFDLENBQUMsRUFBRTtZQUNuRCxJQUFJLENBQUMsY0FBYyxHQUFHLElBQUksQ0FBQyxlQUFlLENBQUMsQ0FBQyxDQUFDLENBQUM7WUFDOUMsUUFBUSxNQUFBLElBQUksQ0FBQyxjQUFjLDBDQUFFLFdBQVcsRUFBRTtnQkFDeEMsS0FBSyxDQUFDO29CQUNKLElBQUksQ0FBQyxTQUFTLEdBQUcsUUFBUSxDQUFDO29CQUMxQixNQUFNO2dCQUNSLEtBQUssQ0FBQztvQkFDSixJQUFJLENBQUMsU0FBUyxHQUFHLGFBQWEsQ0FBQztvQkFDL0IsTUFBTTtnQkFDUixLQUFLLENBQUM7b0JBQ0osSUFBSSxDQUFDLFNBQVMsR0FBRyxXQUFXLENBQUM7b0JBQzdCLE1BQU07Z0JBQ1IsS0FBSyxDQUFDO29CQUNKLElBQUksQ0FBQyxTQUFTLEdBQUcsbUJBQW1CLENBQUM7b0JBQ3JDLE1BQU07Z0JBQ1I7b0JBQ0UsSUFBSSxDQUFDLFNBQVMsR0FBRyxhQUFhLENBQUM7b0JBQy9CLE1BQU07YUFDVDtZQUNELElBQUksQ0FBQyx1QkFBdUIsRUFBRSxDQUFDO1lBQy9CLElBQUksQ0FBQSxNQUFBLElBQUksQ0FBQyxrQkFBa0IsMENBQUUsTUFBTSxLQUFJLElBQUksQ0FBQyxjQUFjLEVBQUU7Z0JBQzFELElBQUksQ0FBQyxrQkFBa0IsRUFBRSxDQUFDO2FBQzNCO1NBQ0Y7UUFFRCxJQUFJLElBQUksQ0FBQyxnQkFBZ0IsRUFBRTtZQUN6QixJQUFJLENBQUMsaUJBQWlCLEVBQUUsQ0FBQztTQUMxQjthQUFNO1lBQ0wsSUFBSSxDQUFDLGVBQWUsRUFBRSxDQUFDO1NBQ3hCO1FBRUQsSUFBSSxDQUFDLHNCQUFzQixHQUFDO1lBQzFCLFFBQVEsRUFBRSxJQUFJLENBQUMsY0FBYztZQUM3QixVQUFVLEVBQUMsQ0FBQyxJQUFJLENBQUMsa0JBQWtCLENBQUMsTUFBTSxDQUFDLENBQUEsQ0FBQyxDQUFFLENBQUMsR0FBRyxJQUFJLEdBQUcsQ0FBQyxJQUFJLENBQUMsa0JBQWtCLENBQUMsQ0FBQyxDQUFBLENBQUMsQ0FBQSxFQUFFO1NBQ3ZGLENBQUE7SUFFSCxDQUFDO0lBQ0Qsa0JBQWtCO1FBQ2hCLElBQUksQ0FBQyxNQUFNLEdBQUcsSUFBSSxDQUFDO1FBQ25CLElBQUksTUFBTSxHQUFHLElBQUksVUFBVSxFQUFFLENBQUM7UUFDOUIsTUFBTSxHQUFHLE1BQU0sQ0FBQyxNQUFNLENBQUMsWUFBWSxFQUFFLElBQUksQ0FBQyxjQUFjLENBQUMsR0FBRyxDQUFDLENBQUM7UUFDOUQsTUFBTSxHQUFHLE1BQU0sQ0FBQyxNQUFNLENBQUMsY0FBYyxFQUFFLEtBQUssQ0FBQyxDQUFDO1FBRTlDLElBQUksQ0FBQyxxQkFBcUIsQ0FBQyxlQUFlLENBQUMsTUFBTSxDQUFDLENBQUMsU0FBUyxDQUFDO1lBQzNELElBQUksRUFBRSxDQUFDLEdBQVEsRUFBRSxFQUFFO2dCQUNqQixNQUFNLGFBQWEsR0FBRyxHQUFHLENBQUMsSUFBSSxDQUFDO2dCQUUvQixJQUFJLENBQUMsWUFBWSxDQUFDLGtCQUFrQixHQUFHLGFBQWEsQ0FBQyxNQUFNLENBQUMsQ0FBQyxHQUFPLEVBQUMsRUFBRSxDQUFBLElBQUksQ0FBQyxrQkFBa0IsQ0FBQyxRQUFRLENBQUMsR0FBRyxDQUFDLFdBQVcsQ0FBQyxDQUFDLENBQUE7Z0JBQ3pILElBQUksQ0FBQyxZQUFZLENBQUMsa0JBQWtCLENBQUMsT0FBTyxDQUFDLENBQUMsT0FBWSxFQUFFLEVBQUU7b0JBQzVELElBQUksQ0FBQyxXQUFXLENBQUMsSUFBSSxDQUFDLE9BQU8sQ0FBQyxXQUFXLENBQUMsQ0FBQTtnQkFDNUMsQ0FBQyxDQUFDLENBQUM7Z0JBQ0gsSUFBSSxDQUFDLE1BQU0sR0FBRyxLQUFLLENBQUM7WUFDdEIsQ0FBQztZQUNELEtBQUssRUFBRSxHQUFHLENBQUMsRUFBRTtnQkFDWCxPQUFPLENBQUMsS0FBSyxDQUFDLEdBQUcsQ0FBQyxDQUFDO2dCQUNuQixJQUFJLENBQUMsTUFBTSxHQUFHLEtBQUssQ0FBQztZQUN0QixDQUFDO1NBQ0YsQ0FBQyxDQUFDO0lBQ0gsQ0FBQztJQUlILFlBQVksQ0FBQyxLQUFVO1FBQ3JCLElBQUksSUFBSSxDQUFDLFlBQVksSUFBSSxLQUFLLEVBQUU7WUFDOUIsSUFBSSxDQUFDLFlBQVksR0FBRyxLQUFLLENBQUM7WUFDMUIsSUFBSSxDQUFDLGVBQWUsQ0FBQyxFQUFFLE1BQU0sRUFBRSxJQUFJLEVBQUUsQ0FBQyxDQUFBO1NBQ3ZDO0lBQ0gsQ0FBQztJQUNELGNBQWMsQ0FBQyxLQUFVO1FBQ3ZCLElBQUksSUFBSSxDQUFDLG9CQUFvQixJQUFJLEtBQUssRUFBRTtZQUN0QyxJQUFJLENBQUMsb0JBQW9CLEdBQUcsS0FBSyxDQUFDO1lBQ2xDLElBQUksQ0FBQyxpQkFBaUIsQ0FBQyxFQUFFLE1BQU0sRUFBRSxJQUFJLEVBQUUsQ0FBQyxDQUFBO1NBQ3pDO0lBQ0gsQ0FBQztJQUVELGFBQWEsQ0FBQyxLQUFVLEVBQUUsT0FBWTtRQUNwQyxJQUFJLEtBQUssRUFBRTtZQUNULElBQUksQ0FBQyxjQUFjLEdBQUcsT0FBTyxDQUFDO1lBQzlCLElBQUksQ0FBQyxXQUFXLEdBQUcsRUFBRSxDQUFDO1lBQ3RCLElBQUksQ0FBQyxZQUFZLEdBQUcsRUFBRSxDQUFDO1lBQ3ZCLElBQUksQ0FBQyx1QkFBdUIsRUFBRSxDQUFDO1NBQ2hDO0lBQ0gsQ0FBQztJQUVELG1CQUFtQixDQUFDLEtBQWM7O1FBQ2hDLElBQUksS0FBSyxFQUFFO1lBQ1QsSUFBSSxDQUFDLFdBQVcsR0FBRyxFQUFFLENBQUM7WUFDdEIsSUFBSSxDQUFDLFlBQVksQ0FBQyxrQkFBa0IsR0FBRyxFQUFFLENBQUM7WUFDMUMsSUFBSSxJQUFJLENBQUMsWUFBWSxDQUFDLFVBQVUsR0FBRyxDQUFDLEVBQUU7Z0JBQ3BDLElBQUksQ0FBQyxZQUFZLENBQUMsSUFBSSxDQUFDLE9BQU8sQ0FBQyxDQUFDLEdBQVEsRUFBRSxFQUFFO29CQUMxQyxJQUFJLENBQUMsV0FBVyxDQUFDLElBQUksQ0FBQyxHQUFHLENBQUMsV0FBVyxDQUFDLENBQUM7b0JBQ3ZDLElBQUksQ0FBQyxZQUFZLENBQUMsa0JBQWtCLENBQUMsSUFBSSxDQUFDLEdBQUcsQ0FBQyxDQUFDO2dCQUNqRCxDQUFDLENBQUMsQ0FBQTthQUNIO2lCQUFNO2dCQUNMLElBQUksQ0FBQyxNQUFNLEdBQUcsSUFBSSxDQUFDO2dCQUNuQixJQUFJLE1BQU0sR0FBRyxJQUFJLFVBQVUsRUFBRSxDQUFDO2dCQUM5QixNQUFNLEdBQUcsTUFBTSxDQUFDLE1BQU0sQ0FBQyxZQUFZLEVBQUUsTUFBQSxJQUFJLENBQUMsY0FBYywwQ0FBRSxHQUFHLENBQUMsQ0FBQztnQkFDL0QsTUFBTSxHQUFHLE1BQU0sQ0FBQyxNQUFNLENBQUMsY0FBYyxFQUFFLEtBQUssQ0FBQyxDQUFDO2dCQUU5QyxJQUFJLENBQUMscUJBQXFCLENBQUMsZUFBZSxDQUFDLE1BQU0sQ0FBQyxDQUFDLFNBQVMsQ0FBQztvQkFDM0QsSUFBSSxFQUFFLENBQUMsR0FBUSxFQUFFLEVBQUU7d0JBQ2pCLE1BQU0sYUFBYSxHQUFHLEdBQUcsQ0FBQyxJQUFJLENBQUM7d0JBRS9CLElBQUksQ0FBQyxZQUFZLENBQUMsa0JBQWtCLEdBQUcsR0FBRyxDQUFDLElBQUksQ0FBQzt3QkFDaEQsYUFBYSxDQUFDLE9BQU8sQ0FBQyxDQUFDLE9BQVksRUFBRSxFQUFFOzRCQUNyQyxJQUFJLENBQUMsV0FBVyxDQUFDLElBQUksQ0FBQyxPQUFPLENBQUMsV0FBVyxDQUFDLENBQUE7d0JBQzVDLENBQUMsQ0FBQyxDQUFDO3dCQUNILElBQUksQ0FBQyxNQUFNLEdBQUcsS0FBSyxDQUFDO29CQUN0QixDQUFDO29CQUNELEtBQUssRUFBRSxHQUFHLENBQUMsRUFBRTt3QkFDWCxPQUFPLENBQUMsS0FBSyxDQUFDLEdBQUcsQ0FBQyxDQUFDO3dCQUNuQixJQUFJLENBQUMsTUFBTSxHQUFHLEtBQUssQ0FBQztvQkFDdEIsQ0FBQztpQkFDRixDQUFDLENBQUM7YUFDSjtTQUNGO2FBQU07WUFDTCxJQUFJLENBQUMsWUFBWSxDQUFDLGtCQUFrQixHQUFHLEVBQUUsQ0FBQTtZQUN6QyxJQUFJLENBQUMsV0FBVyxHQUFHLEVBQUUsQ0FBQztTQUV2QjtJQUdILENBQUM7SUFFRCx3QkFBd0I7UUFFdEIsSUFBSSxJQUFJLENBQUMsWUFBWSxDQUFDLGtCQUFrQixDQUFDLE1BQU0sSUFBSSxJQUFJLENBQUMsWUFBWSxDQUFDLFlBQVksRUFBRTtZQUNqRixPQUFPLFNBQVMsQ0FBQztTQUNsQjthQUFNLElBQUksQ0FBQyxJQUFJLENBQUMsWUFBWSxDQUFDLGtCQUFrQixDQUFDLE1BQU0sRUFBRTtZQUN2RCxPQUFPLFdBQVcsQ0FBQztTQUNwQjthQUFNO1lBQ0wsT0FBTyxlQUFlLENBQUE7U0FDdkI7SUFDSCxDQUFDO0lBRUQsY0FBYzs7UUFDWixJQUFJLE1BQUEsTUFBQSxJQUFJLENBQUMsY0FBYywwQ0FBRSxRQUFRLDBDQUFFLE1BQU0sRUFBRTtZQUN6QyxJQUFJLENBQUMsY0FBYyxHQUFHLElBQUksQ0FBQztZQUMzQixJQUFJLENBQUMsaUJBQWlCLEVBQUUsQ0FBQztTQUMxQjthQUFNO1lBQ0wsSUFBSSxDQUFDLElBQUksRUFBRSxDQUFDO1NBQ2I7SUFDSCxDQUFDO0lBRUQsY0FBYzs7UUFDWixJQUFJLENBQUMsSUFBSSxDQUFDLGdCQUFnQixFQUFFO1lBQzFCLElBQUksQ0FBQyxjQUFjLEdBQUcsS0FBSyxDQUFDO1lBQzVCLElBQUcsQ0FBQSxNQUFBLE1BQUEsSUFBSSxDQUFDLHNCQUFzQiwwQ0FBRSxPQUFPLDBDQUFFLEdBQUcsS0FBSSxJQUFJLENBQUMsY0FBYyxFQUFDO2dCQUNsRSxJQUFJLENBQUMsWUFBWSxDQUFDLGtCQUFrQixHQUFHLENBQUMsR0FBRyxJQUFJLEdBQUcsQ0FBQyxJQUFJLENBQUMsc0JBQXNCLENBQUMsVUFBVSxDQUFDLENBQUMsQ0FBQztnQkFDNUYsSUFBSSxDQUFDLFdBQVcsR0FBRyxFQUFFLENBQUM7Z0JBQ3RCLElBQUksQ0FBQyxZQUFZLENBQUMsa0JBQWtCLENBQUMsT0FBTyxDQUFDLE9BQU8sQ0FBQyxFQUFFO29CQUNyRCxJQUFJLENBQUMsV0FBVyxDQUFDLElBQUksQ0FBQyxPQUFPLENBQUMsQ0FBQztnQkFDakMsQ0FBQyxDQUFDLENBQUM7YUFDSjtpQkFBSTtnQkFDSCxJQUFJLENBQUMsWUFBWSxDQUFDLGtCQUFrQixHQUFHLEVBQUUsQ0FBQztnQkFDMUMsSUFBSSxDQUFDLFdBQVcsR0FBRyxFQUFFLENBQUM7YUFDdkI7U0FDRjthQUFNO1lBQ0wsSUFBSSxDQUFDLFlBQVksQ0FBQyxrQkFBa0IsR0FBRyxFQUFFLENBQUM7WUFDMUMsSUFBSSxDQUFDLFdBQVcsR0FBRyxFQUFFLENBQUM7WUFDdEIsSUFBSSxDQUFDLEtBQUssRUFBRSxDQUFDO1NBQ2Q7SUFDSCxDQUFDO0lBR0QsU0FBUyxDQUFDLElBQWtFO1FBQzFFLElBQUksQ0FBQyxTQUFTLEdBQUcsSUFBSSxDQUFDO1FBQ3RCLElBQUksQ0FBQyxXQUFXLENBQUMsV0FBVyxHQUFHLENBQUMsQ0FBQztRQUNqQyxJQUFJLENBQUMsWUFBWSxHQUFHLEVBQUUsQ0FBQztRQUN2QixJQUFJLENBQUMsYUFBYSxDQUFDLGFBQWEsQ0FBQyxLQUFLLEdBQUcsRUFBRSxDQUFDO1FBQzVDLElBQUksQ0FBQyxlQUFlLEVBQUUsQ0FBQztJQUN6QixDQUFDO0lBRUQsVUFBVSxDQUFDLEtBQVUsRUFBRSxJQUE0QjtRQUNqRCxRQUFRLElBQUksRUFBRTtZQUNaLEtBQUssU0FBUztnQkFDWixJQUFJLENBQUMsV0FBVyxDQUFDLFdBQVcsR0FBRyxLQUFLLENBQUM7Z0JBQ3JDLElBQUksQ0FBQyxlQUFlLEVBQUUsQ0FBQztnQkFDdkIsTUFBTTtZQUNSLEtBQUssVUFBVTtnQkFDYixJQUFJLENBQUMsWUFBWSxDQUFDLFdBQVcsR0FBRyxLQUFLLENBQUM7Z0JBQ3RDLElBQUksQ0FBQyxpQkFBaUIsRUFBRSxDQUFDO2dCQUN6QixNQUFNO1NBQ1Q7SUFFSCxDQUFDO0lBSUQsZUFBZSxDQUFDLFlBQWtCO1FBQ2hDLElBQUksQ0FBQyxNQUFNLEdBQUcsSUFBSSxDQUFDO1FBQ25CLElBQUksTUFBTSxHQUFHLElBQUksVUFBVSxFQUFFLENBQUM7UUFDOUIsTUFBTSxHQUFHLE1BQU0sQ0FBQyxNQUFNLENBQUMsYUFBYSxFQUFFLElBQUksQ0FBQyxpQkFBaUIsQ0FBQyxJQUFJLENBQUMsU0FBUyxDQUFDLENBQUMsQ0FBQztRQUM5RSxJQUFJLENBQUEsWUFBWSxhQUFaLFlBQVksdUJBQVosWUFBWSxDQUFFLE1BQU0sS0FBSSxJQUFJLENBQUMsWUFBWSxFQUFFO1lBQzdDLE1BQU0sR0FBRyxNQUFNLENBQUMsTUFBTSxDQUFDLFlBQVksRUFBRSxJQUFJLENBQUMsWUFBWSxDQUFDLENBQUM7U0FDekQ7YUFBTTtZQUNMLE1BQU0sR0FBRyxNQUFNLENBQUMsTUFBTSxDQUFDLFFBQVEsRUFBRSxJQUFJLENBQUMsV0FBVyxDQUFDLFdBQVcsQ0FBQyxDQUFDO1NBQ2hFO1FBRUQsSUFBSSxDQUFDLHFCQUFxQixDQUFDLGVBQWUsQ0FBQyxNQUFNLENBQUMsQ0FBQyxTQUFTLENBQUM7WUFDM0QsSUFBSSxFQUFFLENBQUMsR0FBUSxFQUFFLEVBQUU7Z0JBQ2pCLElBQUksQ0FBQyxXQUFXLENBQUMsSUFBSSxHQUFHLEdBQUcsQ0FBQyxJQUFJLENBQUM7Z0JBQ2pDLElBQUksQ0FBQyxXQUFXLENBQUMsSUFBSSxHQUFHLEdBQUcsQ0FBQyxJQUFJLENBQUM7Z0JBQ2pDLElBQUksQ0FBQyxXQUFXLENBQUMsRUFBRSxHQUFHLEdBQUcsQ0FBQyxFQUFFLENBQUM7Z0JBQzdCLElBQUksQ0FBQyxXQUFXLENBQUMsVUFBVSxHQUFHLEdBQUcsQ0FBQyxVQUFVLENBQUM7Z0JBQzdDLElBQUksQ0FBQyxXQUFXLENBQUMsWUFBWSxHQUFHLEdBQUcsQ0FBQyxZQUFZLENBQUM7Z0JBQ2pELElBQUksQ0FBQyxXQUFXLENBQUMsZ0NBQWdDLEdBQUcsR0FBRyxDQUFDLGdDQUFnQyxDQUFDO2dCQUN6RixJQUFJLENBQUMsV0FBVyxDQUFDLHNCQUFzQixHQUFHLEdBQUcsQ0FBQyxzQkFBc0IsQ0FBQztnQkFDckUsSUFBSSxDQUFDLFdBQVcsQ0FBQywwQkFBMEIsR0FBRyxHQUFHLENBQUMsMEJBQTBCLENBQUM7Z0JBQzdFLElBQUksQ0FBQyxXQUFXLENBQUMsd0JBQXdCLEdBQUcsR0FBRyxDQUFDLHdCQUF3QixDQUFDO2dCQUN6RSxJQUFJLENBQUMsTUFBTSxHQUFHLEtBQUssQ0FBQztZQUV0QixDQUFDO1lBQ0QsS0FBSyxFQUFFLEdBQUcsQ0FBQyxFQUFFO2dCQUNYLE9BQU8sQ0FBQyxLQUFLLENBQUMsR0FBRyxDQUFDLENBQUM7Z0JBQ25CLElBQUksQ0FBQyxNQUFNLEdBQUcsS0FBSyxDQUFDO1lBQ3RCLENBQUM7U0FDRixDQUFDLENBQUM7SUFDTCxDQUFDO0lBRUQsaUJBQWlCLENBQUMsV0FBaUI7O1FBQ2pDLElBQUksQ0FBQyxNQUFNLEdBQUcsSUFBSSxDQUFDO1FBQ25CLElBQUksTUFBTSxHQUFHLElBQUksVUFBVSxFQUFFLENBQUM7UUFDOUIsTUFBTSxHQUFHLE1BQU0sQ0FBQyxNQUFNLENBQUMsWUFBWSxFQUFFLE1BQUEsSUFBSSxDQUFDLGNBQWMsMENBQUUsR0FBRyxDQUFDLENBQUM7UUFDL0QsTUFBTSxHQUFHLE1BQU0sQ0FBQyxNQUFNLENBQUMsUUFBUSxFQUFFLElBQUksQ0FBQyxZQUFZLENBQUMsV0FBVyxDQUFDLENBQUM7UUFDaEUsSUFBSSxXQUFXLGFBQVgsV0FBVyx1QkFBWCxXQUFXLENBQUUsTUFBTSxFQUFFO1lBQ3ZCLE1BQU0sR0FBRyxNQUFNLENBQUMsTUFBTSxDQUFDLFlBQVksRUFBRSxJQUFJLENBQUMsb0JBQW9CLENBQUMsQ0FBQztTQUNqRTtRQUVELElBQUksQ0FBQyxxQkFBcUIsQ0FBQyxlQUFlLENBQUMsTUFBTSxDQUFDLENBQUMsU0FBUyxDQUFDO1lBQzNELElBQUksRUFBRSxDQUFDLEdBQVEsRUFBRSxFQUFFO2dCQUNqQixJQUFJLENBQUMsWUFBWSxDQUFDLElBQUksR0FBRyxHQUFHLENBQUMsSUFBSSxDQUFDO2dCQUNsQyxJQUFJLENBQUMsWUFBWSxDQUFDLElBQUksR0FBRyxHQUFHLENBQUMsSUFBSSxDQUFDO2dCQUNsQyxJQUFJLENBQUMsWUFBWSxDQUFDLEVBQUUsR0FBRyxHQUFHLENBQUMsRUFBRSxDQUFDO2dCQUM5QixJQUFJLENBQUMsWUFBWSxDQUFDLFVBQVUsR0FBRyxHQUFHLENBQUMsVUFBVSxDQUFDO2dCQUM5QyxJQUFJLENBQUMsWUFBWSxDQUFDLFlBQVksR0FBRyxHQUFHLENBQUMsWUFBWSxDQUFDO2dCQUNsRCxJQUFJLENBQUMsTUFBTSxHQUFHLEtBQUssQ0FBQztZQUN0QixDQUFDO1lBQ0QsS0FBSyxFQUFFLEdBQUcsQ0FBQyxFQUFFO2dCQUNYLE9BQU8sQ0FBQyxLQUFLLENBQUMsR0FBRyxDQUFDLENBQUM7Z0JBQ25CLElBQUksQ0FBQyxNQUFNLEdBQUcsS0FBSyxDQUFDO1lBQ3RCLENBQUM7U0FDRixDQUFDLENBQUM7UUFDSCxJQUFJLENBQUMsY0FBYyxHQUFHLElBQUksQ0FBQztJQUU3QixDQUFDO0lBR0QsV0FBVztJQUVYLENBQUM7SUFFRCxjQUFjLENBQUMsSUFBUyxFQUFFLFFBQWE7UUFDckMsSUFBSSxJQUFJLEVBQUU7WUFDUixJQUFJLENBQUMsV0FBVyxDQUFDLElBQUksQ0FBQyxRQUFRLENBQUMsV0FBVyxDQUFDLENBQUM7WUFDNUMsSUFBSSxDQUFDLFlBQVksQ0FBQyxrQkFBa0IsQ0FBQyxJQUFJLENBQUMsUUFBUSxDQUFDLENBQUM7U0FDckQ7YUFBTTtZQUNMLE1BQU0sS0FBSyxHQUFHLElBQUksQ0FBQyxXQUFXLENBQUMsU0FBUyxDQUFDLENBQUMsT0FBWSxFQUFFLEVBQUUsQ0FBQyxPQUFPLElBQUksUUFBUSxDQUFDLFdBQVcsQ0FBQyxDQUFDO1lBQzVGLElBQUksQ0FBQyxXQUFXLENBQUMsTUFBTSxDQUFDLEtBQUssRUFBRSxDQUFDLENBQUMsQ0FBQztZQUNsQyxNQUFNLGFBQWEsR0FBRyxJQUFJLENBQUMsWUFBWSxDQUFDLGtCQUFrQixDQUFDLFNBQVMsQ0FBQyxDQUFDLEdBQVEsRUFBRSxFQUFFLENBQUMsR0FBRyxDQUFDLFdBQVcsSUFBSSxRQUFRLENBQUMsV0FBVyxDQUFDLENBQUE7WUFDM0gsSUFBSSxDQUFDLFlBQVksQ0FBQyxrQkFBa0IsQ0FBQyxNQUFNLENBQUMsYUFBYSxFQUFFLENBQUMsQ0FBQyxDQUFDO1NBQy9EO0lBQ0gsQ0FBQztJQUVELGdCQUFnQixDQUFDLEtBQVU7UUFDekIsTUFBTSxhQUFhLEdBQUcsSUFBSSxDQUFDLFlBQVksQ0FBQyxrQkFBa0IsQ0FBQyxTQUFTLENBQUMsQ0FBQyxHQUFRLEVBQUUsRUFBRSxDQUFDLEdBQUcsQ0FBQyxXQUFXLElBQUksS0FBSyxDQUFDLFdBQVcsQ0FBQyxDQUFBO1FBQ3hILElBQUksQ0FBQyxZQUFZLENBQUMsa0JBQWtCLENBQUMsTUFBTSxDQUFDLGFBQWEsRUFBRSxDQUFDLENBQUMsQ0FBQztRQUM5RCxNQUFNLEtBQUssR0FBRyxJQUFJLENBQUMsV0FBVyxDQUFDLFNBQVMsQ0FBQyxDQUFDLE9BQVksRUFBRSxFQUFFLENBQUMsT0FBTyxJQUFJLEtBQUssQ0FBQyxXQUFXLENBQUMsQ0FBQztRQUN6RixJQUFJLENBQUMsV0FBVyxDQUFDLE1BQU0sQ0FBQyxLQUFLLEVBQUUsQ0FBQyxDQUFDLENBQUM7SUFDcEMsQ0FBQztJQUVELEtBQUs7UUFDSCxJQUFJLENBQUMsVUFBVSxDQUFDLElBQUksRUFBRSxDQUFDO0lBQ3pCLENBQUM7SUFFRCxJQUFJO1FBQ0YsSUFBRyxDQUFDLElBQUksQ0FBQyxnQkFBZ0IsRUFBQztZQUN4QixJQUFJLENBQUMsMEJBQTBCLEdBQUMsSUFBSSxDQUFDO1NBQ3RDO2FBQUk7WUFDSCxJQUFJLENBQUMsbUJBQW1CLENBQUMsSUFBSSxDQUFDLEVBQUUsT0FBTyxFQUFFLElBQUksQ0FBQyxjQUFjLEVBQUUsVUFBVSxFQUFFLElBQUksQ0FBQyxXQUFXLEVBQUUsQ0FBQyxDQUFDO1NBQy9GO0lBQ0gsQ0FBQztJQUVELFdBQVcsQ0FBQyxLQUFhO1FBQ3ZCLElBQUcsS0FBSyxFQUFDO1lBQ1AsSUFBSSxDQUFDLG1CQUFtQixDQUFDLElBQUksQ0FBQyxFQUFFLE9BQU8sRUFBRSxJQUFJLENBQUMsY0FBYyxFQUFFLFVBQVUsRUFBRSxJQUFJLENBQUMsV0FBVyxFQUFFLENBQUMsQ0FBQztTQUMvRjthQUFJO1lBQ0gsSUFBSSxDQUFDLDBCQUEwQixHQUFDLEtBQUssQ0FBQztTQUN2QztJQUNILENBQUM7SUFFRCxXQUFXLENBQUMsS0FBVTtRQUNwQixJQUFJLENBQUMsY0FBYyxHQUFHLFNBQVMsQ0FBQztRQUNoQyxJQUFJLENBQUMsY0FBYyxHQUFHLEtBQUssQ0FBQztRQUM1QixJQUFJLENBQUMsV0FBVyxHQUFHLEVBQUUsQ0FBQztRQUN0QixJQUFJLENBQUMsWUFBWSxHQUFHLEVBQUUsQ0FBQztRQUN2Qiw2R0FBNkc7UUFDN0csSUFBSSxDQUFDLFdBQVcsQ0FBQyxxQ0FBcUMsR0FBRyxDQUFDLENBQUM7UUFDM0QsSUFBSSxDQUFDLFdBQVcsQ0FBQywyQkFBMkIsR0FBRyxDQUFDLENBQUM7UUFDakQsSUFBSSxDQUFDLFdBQVcsQ0FBQywrQkFBK0IsR0FBRyxDQUFDLENBQUM7UUFDckQsSUFBSSxDQUFDLFdBQVcsQ0FBQyw2QkFBNkIsR0FBRyxDQUFDLENBQUM7SUFDckQsQ0FBQztJQUlELHVCQUF1QjtRQUNyQixJQUFJLENBQUMsV0FBVyxDQUFDLHFDQUFxQyxHQUFHLENBQUMsQ0FBQztRQUMzRCxJQUFJLENBQUMsV0FBVyxDQUFDLDJCQUEyQixHQUFHLENBQUMsQ0FBQztRQUNqRCxJQUFJLENBQUMsV0FBVyxDQUFDLCtCQUErQixHQUFHLENBQUMsQ0FBQztRQUNyRCxJQUFJLENBQUMsV0FBVyxDQUFDLDZCQUE2QixHQUFHLENBQUMsQ0FBQztRQUNuRCxRQUFRLElBQUksQ0FBQyxjQUFjLENBQUMsV0FBVyxFQUFFO1lBQ3ZDLEtBQUssQ0FBQztnQkFDSixJQUFJLENBQUMsV0FBVyxDQUFDLDJCQUEyQixFQUFFLENBQUM7Z0JBQy9DLE1BQU07WUFDUixLQUFLLENBQUM7Z0JBQ0osSUFBSSxDQUFDLFdBQVcsQ0FBQywrQkFBK0IsRUFBRSxDQUFDO2dCQUNuRCxNQUFNO1lBQ1IsS0FBSyxDQUFDO2dCQUNKLElBQUksQ0FBQyxXQUFXLENBQUMsNkJBQTZCLEVBQUUsQ0FBQztnQkFDakQsTUFBTTtZQUNSLEtBQUssQ0FBQztnQkFDSixJQUFJLENBQUMsV0FBVyxDQUFDLHFDQUFxQyxFQUFFLENBQUM7Z0JBQ3pELE1BQU07U0FFVDtJQUNILENBQUM7OztZQW5aRixTQUFTLFNBQUM7Z0JBQ1QsUUFBUSxFQUFFLHFCQUFxQjtnQkFDL0IsNHBhQUErQzs7YUFFaEQ7OztZQVBRLHFCQUFxQjs7OzJCQVkzQixLQUFLOzhCQUVMLEtBQUs7aUNBQ0wsS0FBSzsrQkFDTCxLQUFLOzRCQUNMLFNBQVMsU0FBQyxlQUFlOzZCQUN6QixTQUFTLFNBQUMsZ0JBQWdCO2tDQW1EMUIsTUFBTTt5QkFDTixNQUFNIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgSHR0cFBhcmFtcyB9IGZyb20gJ0Bhbmd1bGFyL2NvbW1vbi9odHRwJztcclxuaW1wb3J0IHsgQ29tcG9uZW50LCBFdmVudEVtaXR0ZXIsIElucHV0LCBPbkluaXQsIE91dHB1dCwgVmlld0NoaWxkIH0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XHJcbmltcG9ydCB7IFJlc3BvbnNpYmlsaXR5U2VydmljZSB9IGZyb20gJy4uLy4uL3dvcmtmbG93LXNlcnZpY2VzL3Jlc3BvbnNpYmlsaXR5LnNlcnZpY2UnO1xyXG5pbXBvcnQgeyBjYXRlZ29yeUxpc3QsIHByb2dyYW1MaXN0IH0gZnJvbSAnLi9wcm9ncmFtLWxpc3QtbW9kZWwnO1xyXG5cclxuQENvbXBvbmVudCh7XHJcbiAgc2VsZWN0b3I6ICdhcHAtcHJvZ3JhbS1saXN0aW5nJyxcclxuICB0ZW1wbGF0ZVVybDogJy4vcHJvZ3JhbS1saXN0aW5nLmNvbXBvbmVudC5odG1sJyxcclxuICBzdHlsZVVybHM6IFsnLi9wcm9ncmFtLWxpc3RpbmcuY29tcG9uZW50Lmxlc3MnXVxyXG59KVxyXG5leHBvcnQgY2xhc3MgUHJvZ3JhbUxpc3RpbmdDb21wb25lbnQgaW1wbGVtZW50cyBPbkluaXQge1xyXG4gIGFuaW1hdGlvbiA9IGZhbHNlO1xyXG4gIHN1Ykxpc3QgPSBmYWxzZTtcclxuICBsb2FkZXIgPSBmYWxzZTtcclxuICBASW5wdXQoKSBwcm9ncmFtc0xpc3Q6IGFueTtcclxuICAvLyBASW5wdXQoKSBhbGxQcm9ncmFtczogYW55W10gPSBbXTtcclxuICBASW5wdXQoKSBzZWxlY3RlZFByb2dyYW0hOiBhbnk7XHJcbiAgQElucHV0KCkgc2VsZWN0ZWRDYXRlZ29yaWVzOiBhbnlbXSA9IFtdO1xyXG4gIEBJbnB1dCgpIGhpZGVQcm9ncmFtc0xpc3QhOiBhbnk7XHJcbiAgQFZpZXdDaGlsZCgnc2VhcmNoUHJvZ3JhbScpIHNlYXJjaFByb2dyYW0hOiBhbnk7XHJcbiAgQFZpZXdDaGlsZCgnc2VhcmNoQ2F0ZWdvcnknKSBzZWFyY2hDYXRlZ29yeSE6IGFueTtcclxuICBwcmV2aW91c1NlbGVjdGVkVmFsdWVzOmFueT17XHJcbiAgICBwcm9ncmFtOnt9LFxyXG4gICAgY2F0ZWdvcmllczpbXVxyXG4gIH1cclxuICBwcm9ncmFtRGF0YTogcHJvZ3JhbUxpc3QgPSB7XHJcbiAgICBkYXRhOiBbXSxcclxuICAgIGZyb206IDAsXHJcbiAgICB0bzogMCxcclxuICAgIHRvdGFsUGFnZXM6IDAsXHJcbiAgICB0b3RhbFJlY29yZHM6IDAsXHJcbiAgICBjdXJyZW50UGFnZTogMSxcclxuICAgIEFsbEludGVybmFsQ29udHJvbHNQcm9ncmFtc0NvdW50OiAwLFxyXG4gICAgQWxsT3RoZXJzUHJvZ3JhbXNDb3VudDogMCxcclxuICAgIEFsbFJlZ3VsYXRpb25Qcm9ncmFtc0NvdW50OiAwLFxyXG4gICAgQWxsU3RhbmRhcmRQcm9ncmFtc0NvdW50OiAwLFxyXG4gICAgU2VsZWN0ZWRJbnRlcm5hbENvbnRyb2xzUHJvZ3JhbXNDb3VudDogMCxcclxuICAgIFNlbGVjdGVkT3RoZXJzUHJvZ3JhbXNDb3VudDogMCxcclxuICAgIFNlbGVjdGVkUmVndWxhdGlvblByb2dyYW1zQ291bnQ6IDAsXHJcbiAgICBTZWxlY3RlZFN0YW5kYXJkUHJvZ3JhbXNDb3VudDogMFxyXG4gIH1cclxuXHJcbiAgY2F0ZWdvcnlEYXRhOiBjYXRlZ29yeUxpc3QgPSB7XHJcbiAgICBkYXRhOiBbXSxcclxuICAgIGZyb206IDAsXHJcbiAgICB0bzogMCxcclxuICAgIHRvdGFsUGFnZXM6IDAsXHJcbiAgICB0b3RhbFJlY29yZHM6IDAsXHJcbiAgICBjdXJyZW50UGFnZTogMSxcclxuICAgIHNlbGVjdGVkQ2F0ZWdvcmllczogW11cclxuICB9XHJcblxyXG4gIHNob3dDYXRlZ29yaWVzID0gZmFsc2U7XHJcbiAgY3VycmVudFByb2dyYW0hOiBhbnk7XHJcbiAgc2VhcmNoU3RyaW5nOiBzdHJpbmcgPSAnJztcclxuICBjYXRlZ29yeVNlYXJjaFN0cmluZzogc3RyaW5nID0gJyc7XHJcblxyXG4gIGFjdGl2ZVRhYjogJ3JlZ3VsYXRpb25zJyB8ICdzdGFuZGFyZHMnIHwgJ2ludGVybmFsX2NvbnRyb2xzJyB8ICdvdGhlcnMnID0gJ3JlZ3VsYXRpb25zJ1xyXG4gIHNlbGVjdGVkSWRzOiBhbnlbXSA9IFtdO1xyXG4gIGNhdGVnb3J5TGlzdDogYW55W10gPSBbXTtcclxuICBibG9ja1dpZHRoOiBhbnk7XHJcblxyXG4gIHByb2dyYW1UeXBlT2JqZWN0ID0ge1xyXG4gICAgcmVndWxhdGlvbnM6IDEsXHJcbiAgICBzdGFuZGFyZHM6IDIsXHJcbiAgICBpbnRlcm5hbF9jb250cm9sczogMyxcclxuICAgIG90aGVyczogMCxcclxuICB9XHJcblxyXG4gIGRpc3BsYXlDb25maXJtYXRpb25NZXNzYWdlOmJvb2xlYW49ZmFsc2VcclxuXHJcbiAgQE91dHB1dCgpIHNhdmVTZWxlY3RlZFByb2dyYW0gPSBuZXcgRXZlbnRFbWl0dGVyKCk7XHJcbiAgQE91dHB1dCgpIGNsb3NlRXZlbnQgPSBuZXcgRXZlbnRFbWl0dGVyKCk7XHJcbiAgYWxsQ2F0ZWdvcmllczogYW55W10gPSBbXTtcclxuXHJcbiAgY29uc3RydWN0b3IocHJpdmF0ZSByZXNwb25zaWJpbGl0eVNlcnZpY2U6IFJlc3BvbnNpYmlsaXR5U2VydmljZSkge1xyXG4gIH1cclxuXHJcbiAgbmdPbkluaXQoKTogdm9pZCB7XHJcbiAgICB0aGlzLmFuaW1hdGlvbiA9IHRydWU7XHJcbiAgICBzZXRUaW1lb3V0KCgpID0+IHtcclxuICAgICAgdGhpcy5hbmltYXRpb24gPSBmYWxzZTtcclxuICAgIH0sIDMwMCk7XHJcbiAgICBpZiAodGhpcy5zZWxlY3RlZFByb2dyYW0gJiYgdGhpcy5zZWxlY3RlZFByb2dyYW1bMF0pIHtcclxuICAgICAgdGhpcy5jdXJyZW50UHJvZ3JhbSA9IHRoaXMuc2VsZWN0ZWRQcm9ncmFtWzBdO1xyXG4gICAgICBzd2l0Y2ggKHRoaXMuY3VycmVudFByb2dyYW0/LnByb2dyYW1UeXBlKSB7XHJcbiAgICAgICAgY2FzZSAwOlxyXG4gICAgICAgICAgdGhpcy5hY3RpdmVUYWIgPSAnb3RoZXJzJztcclxuICAgICAgICAgIGJyZWFrO1xyXG4gICAgICAgIGNhc2UgMTpcclxuICAgICAgICAgIHRoaXMuYWN0aXZlVGFiID0gJ3JlZ3VsYXRpb25zJztcclxuICAgICAgICAgIGJyZWFrO1xyXG4gICAgICAgIGNhc2UgMjpcclxuICAgICAgICAgIHRoaXMuYWN0aXZlVGFiID0gJ3N0YW5kYXJkcyc7XHJcbiAgICAgICAgICBicmVhaztcclxuICAgICAgICBjYXNlIDM6XHJcbiAgICAgICAgICB0aGlzLmFjdGl2ZVRhYiA9ICdpbnRlcm5hbF9jb250cm9scyc7XHJcbiAgICAgICAgICBicmVhaztcclxuICAgICAgICBkZWZhdWx0OlxyXG4gICAgICAgICAgdGhpcy5hY3RpdmVUYWIgPSAncmVndWxhdGlvbnMnO1xyXG4gICAgICAgICAgYnJlYWs7XHJcbiAgICAgIH1cclxuICAgICAgdGhpcy5nZXRTZWxlY3RlZFByb2dyYW1Db3VudCgpO1xyXG4gICAgICBpZiAodGhpcy5zZWxlY3RlZENhdGVnb3JpZXM/Lmxlbmd0aCAmJiB0aGlzLmN1cnJlbnRQcm9ncmFtKSB7XHJcbiAgICAgICAgdGhpcy5wb3B1bGF0ZUNhdGVnb3JpZXMoKTtcclxuICAgICAgfVxyXG4gICAgfVxyXG4gXHJcbiAgICBpZiAodGhpcy5oaWRlUHJvZ3JhbXNMaXN0KSB7XHJcbiAgICAgIHRoaXMuZ2V0Q2F0ZWdvcmllc0xpc3QoKTtcclxuICAgIH0gZWxzZSB7XHJcbiAgICAgIHRoaXMuZ2V0UHJvZ3JhbXNMaXN0KCk7XHJcbiAgICB9XHJcbiBcclxuICAgIHRoaXMucHJldmlvdXNTZWxlY3RlZFZhbHVlcz17XHJcbiAgICAgIHByb2dyYW1zOiB0aGlzLmN1cnJlbnRQcm9ncmFtLFxyXG4gICAgICBjYXRlZ29yaWVzOih0aGlzLnNlbGVjdGVkQ2F0ZWdvcmllcy5sZW5ndGgpPyAgWy4uLm5ldyBTZXQodGhpcy5zZWxlY3RlZENhdGVnb3JpZXMpXTpbXSxcclxuICAgIH1cclxuXHJcbiAgfVxyXG4gIHBvcHVsYXRlQ2F0ZWdvcmllcygpIHtcclxuICAgIHRoaXMubG9hZGVyID0gdHJ1ZTtcclxuICAgIGxldCBwYXJhbXMgPSBuZXcgSHR0cFBhcmFtcygpO1xyXG4gICAgcGFyYW1zID0gcGFyYW1zLmFwcGVuZCgncHJvZ3JhbV9pZCcsIHRoaXMuY3VycmVudFByb2dyYW0uX2lkKTtcclxuICAgIHBhcmFtcyA9IHBhcmFtcy5hcHBlbmQoJ2lzUGFnaW5hdGlvbicsIGZhbHNlKTtcclxuXHJcbiAgICB0aGlzLnJlc3BvbnNpYmlsaXR5U2VydmljZS5nZXRQcm9ncmFtc0xpc3QocGFyYW1zKS5zdWJzY3JpYmUoe1xyXG4gICAgICBuZXh0OiAocmVzOiBhbnkpID0+IHtcclxuICAgICAgICBjb25zdCBhbGxDYXRlZ29yaWVzID0gcmVzLmRhdGE7XHJcblxyXG4gICAgICAgIHRoaXMuY2F0ZWdvcnlEYXRhLnNlbGVjdGVkQ2F0ZWdvcmllcyA9IGFsbENhdGVnb3JpZXMuZmlsdGVyKChlbGU6YW55KT0+dGhpcy5zZWxlY3RlZENhdGVnb3JpZXMuaW5jbHVkZXMoZWxlLmNhdGVnb3J5X2lkKSlcclxuICAgICAgICB0aGlzLmNhdGVnb3J5RGF0YS5zZWxlY3RlZENhdGVnb3JpZXMuZm9yRWFjaCgoZWxlbWVudDogYW55KSA9PiB7XHJcbiAgICAgICAgICB0aGlzLnNlbGVjdGVkSWRzLnB1c2goZWxlbWVudC5jYXRlZ29yeV9pZClcclxuICAgICAgICB9KTtcclxuICAgICAgICB0aGlzLmxvYWRlciA9IGZhbHNlO1xyXG4gICAgICB9LFxyXG4gICAgICBlcnJvcjogZXJyID0+IHtcclxuICAgICAgICBjb25zb2xlLmVycm9yKGVycik7XHJcbiAgICAgICAgdGhpcy5sb2FkZXIgPSBmYWxzZTtcclxuICAgICAgfVxyXG4gICAgfSk7XHJcbiAgICB9XHJcblxyXG5cclxuXHJcbiAgaGFuZGxlU2VhcmNoKGV2ZW50OiBhbnkpIHtcclxuICAgIGlmICh0aGlzLnNlYXJjaFN0cmluZyAhPSBldmVudCkge1xyXG4gICAgICB0aGlzLnNlYXJjaFN0cmluZyA9IGV2ZW50O1xyXG4gICAgICB0aGlzLmdldFByb2dyYW1zTGlzdCh7IHNlYXJjaDogdHJ1ZSB9KVxyXG4gICAgfVxyXG4gIH1cclxuICBjYXRlZ29yeVNlYXJjaChldmVudDogYW55KSB7XHJcbiAgICBpZiAodGhpcy5jYXRlZ29yeVNlYXJjaFN0cmluZyAhPSBldmVudCkge1xyXG4gICAgICB0aGlzLmNhdGVnb3J5U2VhcmNoU3RyaW5nID0gZXZlbnQ7XHJcbiAgICAgIHRoaXMuZ2V0Q2F0ZWdvcmllc0xpc3QoeyBzZWFyY2g6IHRydWUgfSlcclxuICAgIH1cclxuICB9XHJcblxyXG4gIHNlbGVjdFByb2dyYW0oZXZlbnQ6IGFueSwgcHJvZ3JhbTogYW55KSB7XHJcbiAgICBpZiAoZXZlbnQpIHtcclxuICAgICAgdGhpcy5jdXJyZW50UHJvZ3JhbSA9IHByb2dyYW07XHJcbiAgICAgIHRoaXMuc2VsZWN0ZWRJZHMgPSBbXTtcclxuICAgICAgdGhpcy5jYXRlZ29yeUxpc3QgPSBbXTtcclxuICAgICAgdGhpcy5nZXRTZWxlY3RlZFByb2dyYW1Db3VudCgpO1xyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgc2VsZWN0QWxsQ2F0ZWdvcmllcyh2YWx1ZTogYm9vbGVhbikge1xyXG4gICAgaWYgKHZhbHVlKSB7XHJcbiAgICAgIHRoaXMuc2VsZWN0ZWRJZHMgPSBbXTtcclxuICAgICAgdGhpcy5jYXRlZ29yeURhdGEuc2VsZWN0ZWRDYXRlZ29yaWVzID0gW107XHJcbiAgICAgIGlmICh0aGlzLmNhdGVnb3J5RGF0YS50b3RhbFBhZ2VzIDwgMikge1xyXG4gICAgICAgIHRoaXMuY2F0ZWdvcnlEYXRhLmRhdGEuZm9yRWFjaCgoZWxlOiBhbnkpID0+IHtcclxuICAgICAgICAgIHRoaXMuc2VsZWN0ZWRJZHMucHVzaChlbGUuY2F0ZWdvcnlfaWQpO1xyXG4gICAgICAgICAgdGhpcy5jYXRlZ29yeURhdGEuc2VsZWN0ZWRDYXRlZ29yaWVzLnB1c2goZWxlKTtcclxuICAgICAgICB9KVxyXG4gICAgICB9IGVsc2Uge1xyXG4gICAgICAgIHRoaXMubG9hZGVyID0gdHJ1ZTtcclxuICAgICAgICBsZXQgcGFyYW1zID0gbmV3IEh0dHBQYXJhbXMoKTtcclxuICAgICAgICBwYXJhbXMgPSBwYXJhbXMuYXBwZW5kKCdwcm9ncmFtX2lkJywgdGhpcy5jdXJyZW50UHJvZ3JhbT8uX2lkKTtcclxuICAgICAgICBwYXJhbXMgPSBwYXJhbXMuYXBwZW5kKCdpc1BhZ2luYXRpb24nLCBmYWxzZSk7XHJcblxyXG4gICAgICAgIHRoaXMucmVzcG9uc2liaWxpdHlTZXJ2aWNlLmdldFByb2dyYW1zTGlzdChwYXJhbXMpLnN1YnNjcmliZSh7XHJcbiAgICAgICAgICBuZXh0OiAocmVzOiBhbnkpID0+IHtcclxuICAgICAgICAgICAgY29uc3QgYWxsQ2F0ZWdvcmllcyA9IHJlcy5kYXRhO1xyXG5cclxuICAgICAgICAgICAgdGhpcy5jYXRlZ29yeURhdGEuc2VsZWN0ZWRDYXRlZ29yaWVzID0gcmVzLmRhdGE7XHJcbiAgICAgICAgICAgIGFsbENhdGVnb3JpZXMuZm9yRWFjaCgoZWxlbWVudDogYW55KSA9PiB7XHJcbiAgICAgICAgICAgICAgdGhpcy5zZWxlY3RlZElkcy5wdXNoKGVsZW1lbnQuY2F0ZWdvcnlfaWQpXHJcbiAgICAgICAgICAgIH0pO1xyXG4gICAgICAgICAgICB0aGlzLmxvYWRlciA9IGZhbHNlO1xyXG4gICAgICAgICAgfSxcclxuICAgICAgICAgIGVycm9yOiBlcnIgPT4ge1xyXG4gICAgICAgICAgICBjb25zb2xlLmVycm9yKGVycik7XHJcbiAgICAgICAgICAgIHRoaXMubG9hZGVyID0gZmFsc2U7XHJcbiAgICAgICAgICB9XHJcbiAgICAgICAgfSk7XHJcbiAgICAgIH1cclxuICAgIH0gZWxzZSB7XHJcbiAgICAgIHRoaXMuY2F0ZWdvcnlEYXRhLnNlbGVjdGVkQ2F0ZWdvcmllcyA9IFtdXHJcbiAgICAgIHRoaXMuc2VsZWN0ZWRJZHMgPSBbXTtcclxuXHJcbiAgICB9XHJcblxyXG5cclxuICB9XHJcblxyXG4gIGNoZWNrQ2F0ZWdvcmllc1NlbGVjdGlvbigpIHtcclxuXHJcbiAgICBpZiAodGhpcy5jYXRlZ29yeURhdGEuc2VsZWN0ZWRDYXRlZ29yaWVzLmxlbmd0aCA9PSB0aGlzLmNhdGVnb3J5RGF0YS50b3RhbFJlY29yZHMpIHtcclxuICAgICAgcmV0dXJuICdjaGVja2VkJztcclxuICAgIH0gZWxzZSBpZiAoIXRoaXMuY2F0ZWdvcnlEYXRhLnNlbGVjdGVkQ2F0ZWdvcmllcy5sZW5ndGgpIHtcclxuICAgICAgcmV0dXJuICd1bmNoZWNrZWQnO1xyXG4gICAgfSBlbHNlIHtcclxuICAgICAgcmV0dXJuICdpbmRldGVybWluYXRlJ1xyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgb3BlbkNhdGVnb3JpZXMoKSB7XHJcbiAgICBpZiAodGhpcy5jdXJyZW50UHJvZ3JhbT8uY2hpbGRfaWQ/Lmxlbmd0aCkge1xyXG4gICAgICB0aGlzLnNob3dDYXRlZ29yaWVzID0gdHJ1ZTtcclxuICAgICAgdGhpcy5nZXRDYXRlZ29yaWVzTGlzdCgpO1xyXG4gICAgfSBlbHNlIHtcclxuICAgICAgdGhpcy5zYXZlKCk7XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICBiYWNrVG9Qcm9ncmFtcygpIHtcclxuICAgIGlmICghdGhpcy5oaWRlUHJvZ3JhbXNMaXN0KSB7XHJcbiAgICAgIHRoaXMuc2hvd0NhdGVnb3JpZXMgPSBmYWxzZTtcclxuICAgICAgaWYodGhpcy5wcmV2aW91c1NlbGVjdGVkVmFsdWVzPy5wcm9ncmFtPy5faWQgPT0gdGhpcy5jdXJyZW50UHJvZ3JhbSl7XHJcbiAgICAgICAgdGhpcy5jYXRlZ29yeURhdGEuc2VsZWN0ZWRDYXRlZ29yaWVzID0gWy4uLm5ldyBTZXQodGhpcy5wcmV2aW91c1NlbGVjdGVkVmFsdWVzLmNhdGVnb3JpZXMpXTtcclxuICAgICAgICB0aGlzLnNlbGVjdGVkSWRzID0gW107XHJcbiAgICAgICAgdGhpcy5jYXRlZ29yeURhdGEuc2VsZWN0ZWRDYXRlZ29yaWVzLmZvckVhY2goZWxlbWVudCA9PiB7XHJcbiAgICAgICAgICB0aGlzLnNlbGVjdGVkSWRzLnB1c2goZWxlbWVudCk7XHJcbiAgICAgICAgfSk7XHJcbiAgICAgIH1lbHNle1xyXG4gICAgICAgIHRoaXMuY2F0ZWdvcnlEYXRhLnNlbGVjdGVkQ2F0ZWdvcmllcyA9IFtdO1xyXG4gICAgICAgIHRoaXMuc2VsZWN0ZWRJZHMgPSBbXTtcclxuICAgICAgfVxyXG4gICAgfSBlbHNlIHtcclxuICAgICAgdGhpcy5jYXRlZ29yeURhdGEuc2VsZWN0ZWRDYXRlZ29yaWVzID0gW107XHJcbiAgICAgIHRoaXMuc2VsZWN0ZWRJZHMgPSBbXTtcclxuICAgICAgdGhpcy5jbG9zZSgpO1xyXG4gICAgfVxyXG4gIH1cclxuXHJcblxyXG4gIGNoYW5nZVRhYih0eXBlOiAncmVndWxhdGlvbnMnIHwgJ3N0YW5kYXJkcycgfCAnaW50ZXJuYWxfY29udHJvbHMnIHwgJ290aGVycycpIHtcclxuICAgIHRoaXMuYWN0aXZlVGFiID0gdHlwZTtcclxuICAgIHRoaXMucHJvZ3JhbURhdGEuY3VycmVudFBhZ2UgPSAxO1xyXG4gICAgdGhpcy5zZWFyY2hTdHJpbmcgPSAnJztcclxuICAgIHRoaXMuc2VhcmNoUHJvZ3JhbS5uYXRpdmVFbGVtZW50LnZhbHVlID0gJyc7XHJcbiAgICB0aGlzLmdldFByb2dyYW1zTGlzdCgpO1xyXG4gIH1cclxuXHJcbiAgY2hhbmdlUGFnZShldmVudDogYW55LCB0eXBlOiAnY2F0ZWdvcnknIHwgJ3Byb2dyYW0nKSB7XHJcbiAgICBzd2l0Y2ggKHR5cGUpIHtcclxuICAgICAgY2FzZSAncHJvZ3JhbSc6XHJcbiAgICAgICAgdGhpcy5wcm9ncmFtRGF0YS5jdXJyZW50UGFnZSA9IGV2ZW50O1xyXG4gICAgICAgIHRoaXMuZ2V0UHJvZ3JhbXNMaXN0KCk7XHJcbiAgICAgICAgYnJlYWs7XHJcbiAgICAgIGNhc2UgJ2NhdGVnb3J5JzpcclxuICAgICAgICB0aGlzLmNhdGVnb3J5RGF0YS5jdXJyZW50UGFnZSA9IGV2ZW50O1xyXG4gICAgICAgIHRoaXMuZ2V0Q2F0ZWdvcmllc0xpc3QoKTtcclxuICAgICAgICBicmVhaztcclxuICAgIH1cclxuXHJcbiAgfVxyXG5cclxuXHJcblxyXG4gIGdldFByb2dyYW1zTGlzdChwYXJhbXNPYmplY3Q/OiBhbnkpIHtcclxuICAgIHRoaXMubG9hZGVyID0gdHJ1ZTtcclxuICAgIGxldCBwYXJhbXMgPSBuZXcgSHR0cFBhcmFtcygpO1xyXG4gICAgcGFyYW1zID0gcGFyYW1zLmFwcGVuZCgncHJvZ3JhbVR5cGUnLCB0aGlzLnByb2dyYW1UeXBlT2JqZWN0W3RoaXMuYWN0aXZlVGFiXSk7XHJcbiAgICBpZiAocGFyYW1zT2JqZWN0Py5zZWFyY2ggfHwgdGhpcy5zZWFyY2hTdHJpbmcpIHtcclxuICAgICAgcGFyYW1zID0gcGFyYW1zLmFwcGVuZCgnc2VhcmNoVGV4dCcsIHRoaXMuc2VhcmNoU3RyaW5nKTtcclxuICAgIH0gZWxzZSB7XHJcbiAgICAgIHBhcmFtcyA9IHBhcmFtcy5hcHBlbmQoJ3BhZ2VObycsIHRoaXMucHJvZ3JhbURhdGEuY3VycmVudFBhZ2UpO1xyXG4gICAgfVxyXG5cclxuICAgIHRoaXMucmVzcG9uc2liaWxpdHlTZXJ2aWNlLmdldFByb2dyYW1zTGlzdChwYXJhbXMpLnN1YnNjcmliZSh7XHJcbiAgICAgIG5leHQ6IChyZXM6IGFueSkgPT4ge1xyXG4gICAgICAgIHRoaXMucHJvZ3JhbURhdGEuZGF0YSA9IHJlcy5kYXRhO1xyXG4gICAgICAgIHRoaXMucHJvZ3JhbURhdGEuZnJvbSA9IHJlcy5mcm9tO1xyXG4gICAgICAgIHRoaXMucHJvZ3JhbURhdGEudG8gPSByZXMudG87XHJcbiAgICAgICAgdGhpcy5wcm9ncmFtRGF0YS50b3RhbFBhZ2VzID0gcmVzLnRvdGFsUGFnZXM7XHJcbiAgICAgICAgdGhpcy5wcm9ncmFtRGF0YS50b3RhbFJlY29yZHMgPSByZXMudG90YWxSZWNvcmRzO1xyXG4gICAgICAgIHRoaXMucHJvZ3JhbURhdGEuQWxsSW50ZXJuYWxDb250cm9sc1Byb2dyYW1zQ291bnQgPSByZXMuQWxsSW50ZXJuYWxDb250cm9sc1Byb2dyYW1zQ291bnQ7XHJcbiAgICAgICAgdGhpcy5wcm9ncmFtRGF0YS5BbGxPdGhlcnNQcm9ncmFtc0NvdW50ID0gcmVzLkFsbE90aGVyc1Byb2dyYW1zQ291bnQ7XHJcbiAgICAgICAgdGhpcy5wcm9ncmFtRGF0YS5BbGxSZWd1bGF0aW9uUHJvZ3JhbXNDb3VudCA9IHJlcy5BbGxSZWd1bGF0aW9uUHJvZ3JhbXNDb3VudDtcclxuICAgICAgICB0aGlzLnByb2dyYW1EYXRhLkFsbFN0YW5kYXJkUHJvZ3JhbXNDb3VudCA9IHJlcy5BbGxTdGFuZGFyZFByb2dyYW1zQ291bnQ7XHJcbiAgICAgICAgdGhpcy5sb2FkZXIgPSBmYWxzZTtcclxuXHJcbiAgICAgIH0sXHJcbiAgICAgIGVycm9yOiBlcnIgPT4ge1xyXG4gICAgICAgIGNvbnNvbGUuZXJyb3IoZXJyKTtcclxuICAgICAgICB0aGlzLmxvYWRlciA9IGZhbHNlO1xyXG4gICAgICB9XHJcbiAgICB9KTtcclxuICB9XHJcblxyXG4gIGdldENhdGVnb3JpZXNMaXN0KHF1ZXJ5T2JqZWN0PzogYW55KSB7XHJcbiAgICB0aGlzLmxvYWRlciA9IHRydWU7XHJcbiAgICBsZXQgcGFyYW1zID0gbmV3IEh0dHBQYXJhbXMoKTtcclxuICAgIHBhcmFtcyA9IHBhcmFtcy5hcHBlbmQoJ3Byb2dyYW1faWQnLCB0aGlzLmN1cnJlbnRQcm9ncmFtPy5faWQpO1xyXG4gICAgcGFyYW1zID0gcGFyYW1zLmFwcGVuZCgncGFnZU5vJywgdGhpcy5jYXRlZ29yeURhdGEuY3VycmVudFBhZ2UpO1xyXG4gICAgaWYgKHF1ZXJ5T2JqZWN0Py5zZWFyY2gpIHtcclxuICAgICAgcGFyYW1zID0gcGFyYW1zLmFwcGVuZCgnc2VhcmNoVGV4dCcsIHRoaXMuY2F0ZWdvcnlTZWFyY2hTdHJpbmcpO1xyXG4gICAgfVxyXG5cclxuICAgIHRoaXMucmVzcG9uc2liaWxpdHlTZXJ2aWNlLmdldFByb2dyYW1zTGlzdChwYXJhbXMpLnN1YnNjcmliZSh7XHJcbiAgICAgIG5leHQ6IChyZXM6IGFueSkgPT4ge1xyXG4gICAgICAgIHRoaXMuY2F0ZWdvcnlEYXRhLmRhdGEgPSByZXMuZGF0YTtcclxuICAgICAgICB0aGlzLmNhdGVnb3J5RGF0YS5mcm9tID0gcmVzLmZyb207XHJcbiAgICAgICAgdGhpcy5jYXRlZ29yeURhdGEudG8gPSByZXMudG87XHJcbiAgICAgICAgdGhpcy5jYXRlZ29yeURhdGEudG90YWxQYWdlcyA9IHJlcy50b3RhbFBhZ2VzO1xyXG4gICAgICAgIHRoaXMuY2F0ZWdvcnlEYXRhLnRvdGFsUmVjb3JkcyA9IHJlcy50b3RhbFJlY29yZHM7XHJcbiAgICAgICAgdGhpcy5sb2FkZXIgPSBmYWxzZTtcclxuICAgICAgfSxcclxuICAgICAgZXJyb3I6IGVyciA9PiB7XHJcbiAgICAgICAgY29uc29sZS5lcnJvcihlcnIpO1xyXG4gICAgICAgIHRoaXMubG9hZGVyID0gZmFsc2U7XHJcbiAgICAgIH1cclxuICAgIH0pO1xyXG4gICAgdGhpcy5zaG93Q2F0ZWdvcmllcyA9IHRydWU7XHJcblxyXG4gIH1cclxuXHJcblxyXG4gIHNhdmVQcm9ncmFtKCkge1xyXG5cclxuICB9XHJcblxyXG4gIHNlbGVjdENhdGVnb3J5KG1vZGU6IGFueSwgY2F0ZWdvcnk6IGFueSkge1xyXG4gICAgaWYgKG1vZGUpIHtcclxuICAgICAgdGhpcy5zZWxlY3RlZElkcy5wdXNoKGNhdGVnb3J5LmNhdGVnb3J5X2lkKTtcclxuICAgICAgdGhpcy5jYXRlZ29yeURhdGEuc2VsZWN0ZWRDYXRlZ29yaWVzLnB1c2goY2F0ZWdvcnkpO1xyXG4gICAgfSBlbHNlIHtcclxuICAgICAgY29uc3QgaW5kZXggPSB0aGlzLnNlbGVjdGVkSWRzLmZpbmRJbmRleCgoZWxlbWVudDogYW55KSA9PiBlbGVtZW50ID09IGNhdGVnb3J5LmNhdGVnb3J5X2lkKTtcclxuICAgICAgdGhpcy5zZWxlY3RlZElkcy5zcGxpY2UoaW5kZXgsIDEpO1xyXG4gICAgICBjb25zdCBjYXRlZ29yeUluZGV4ID0gdGhpcy5jYXRlZ29yeURhdGEuc2VsZWN0ZWRDYXRlZ29yaWVzLmZpbmRJbmRleCgoZWxlOiBhbnkpID0+IGVsZS5jYXRlZ29yeV9pZCA9PSBjYXRlZ29yeS5jYXRlZ29yeV9pZClcclxuICAgICAgdGhpcy5jYXRlZ29yeURhdGEuc2VsZWN0ZWRDYXRlZ29yaWVzLnNwbGljZShjYXRlZ29yeUluZGV4LCAxKTtcclxuICAgIH1cclxuICB9XHJcblxyXG4gIHJlbW92ZUNhdGVnb3JpZXMoZXZlbnQ6IGFueSkge1xyXG4gICAgY29uc3QgY2F0ZWdvcnlJbmRleCA9IHRoaXMuY2F0ZWdvcnlEYXRhLnNlbGVjdGVkQ2F0ZWdvcmllcy5maW5kSW5kZXgoKGVsZTogYW55KSA9PiBlbGUuY2F0ZWdvcnlfaWQgPT0gZXZlbnQuY2F0ZWdvcnlfaWQpXHJcbiAgICB0aGlzLmNhdGVnb3J5RGF0YS5zZWxlY3RlZENhdGVnb3JpZXMuc3BsaWNlKGNhdGVnb3J5SW5kZXgsIDEpO1xyXG4gICAgY29uc3QgaW5kZXggPSB0aGlzLnNlbGVjdGVkSWRzLmZpbmRJbmRleCgoZWxlbWVudDogYW55KSA9PiBlbGVtZW50ID09IGV2ZW50LmNhdGVnb3J5X2lkKTtcclxuICAgIHRoaXMuc2VsZWN0ZWRJZHMuc3BsaWNlKGluZGV4LCAxKTtcclxuICB9XHJcblxyXG4gIGNsb3NlKCkge1xyXG4gICAgdGhpcy5jbG9zZUV2ZW50LmVtaXQoKTtcclxuICB9XHJcblxyXG4gIHNhdmUoKSB7XHJcbiAgICBpZighdGhpcy5oaWRlUHJvZ3JhbXNMaXN0KXtcclxuICAgICAgdGhpcy5kaXNwbGF5Q29uZmlybWF0aW9uTWVzc2FnZT10cnVlO1xyXG4gICAgfWVsc2V7XHJcbiAgICAgIHRoaXMuc2F2ZVNlbGVjdGVkUHJvZ3JhbS5lbWl0KHsgcHJvZ3JhbTogdGhpcy5jdXJyZW50UHJvZ3JhbSwgY2F0ZWdvcmllczogdGhpcy5zZWxlY3RlZElkcyB9KTtcclxuICAgIH1cclxuICB9XHJcblxyXG4gIHNhdmVDaGFuZ2VzKHZhbHVlOmJvb2xlYW4pe1xyXG4gICAgaWYodmFsdWUpe1xyXG4gICAgICB0aGlzLnNhdmVTZWxlY3RlZFByb2dyYW0uZW1pdCh7IHByb2dyYW06IHRoaXMuY3VycmVudFByb2dyYW0sIGNhdGVnb3JpZXM6IHRoaXMuc2VsZWN0ZWRJZHMgfSk7XHJcbiAgICB9ZWxzZXtcclxuICAgICAgdGhpcy5kaXNwbGF5Q29uZmlybWF0aW9uTWVzc2FnZT1mYWxzZTtcclxuICAgIH1cclxuICB9XHJcblxyXG4gIGRlbGV0ZUV2ZW50KGV2ZW50OiBhbnkpIHtcclxuICAgIHRoaXMuY3VycmVudFByb2dyYW0gPSB1bmRlZmluZWQ7XHJcbiAgICB0aGlzLnNob3dDYXRlZ29yaWVzID0gZmFsc2U7XHJcbiAgICB0aGlzLnNlbGVjdGVkSWRzID0gW107XHJcbiAgICB0aGlzLmNhdGVnb3J5TGlzdCA9IFtdO1xyXG4gICAgLy9BcyB0aGlzIGlzIGEgcmFkaW8gbGlzdCBhbmQgb25seSBvbmUgaXRlbSBjYW4gYmUgc2VsZWN0ZWQgdGhhdHMgd2h5IHdlIGFyZSByZXNldHRpbmcgYWxsIHRoZSBjb3VudHMgdG8gemVyb1xyXG4gICAgdGhpcy5wcm9ncmFtRGF0YS5TZWxlY3RlZEludGVybmFsQ29udHJvbHNQcm9ncmFtc0NvdW50ID0gMDtcclxuICAgIHRoaXMucHJvZ3JhbURhdGEuU2VsZWN0ZWRPdGhlcnNQcm9ncmFtc0NvdW50ID0gMDtcclxuICAgIHRoaXMucHJvZ3JhbURhdGEuU2VsZWN0ZWRSZWd1bGF0aW9uUHJvZ3JhbXNDb3VudCA9IDA7XHJcbiAgICB0aGlzLnByb2dyYW1EYXRhLlNlbGVjdGVkU3RhbmRhcmRQcm9ncmFtc0NvdW50ID0gMDtcclxuICB9XHJcblxyXG4gIFxyXG5cclxuICBnZXRTZWxlY3RlZFByb2dyYW1Db3VudCgpIHtcclxuICAgIHRoaXMucHJvZ3JhbURhdGEuU2VsZWN0ZWRJbnRlcm5hbENvbnRyb2xzUHJvZ3JhbXNDb3VudCA9IDA7XHJcbiAgICB0aGlzLnByb2dyYW1EYXRhLlNlbGVjdGVkT3RoZXJzUHJvZ3JhbXNDb3VudCA9IDA7XHJcbiAgICB0aGlzLnByb2dyYW1EYXRhLlNlbGVjdGVkUmVndWxhdGlvblByb2dyYW1zQ291bnQgPSAwO1xyXG4gICAgdGhpcy5wcm9ncmFtRGF0YS5TZWxlY3RlZFN0YW5kYXJkUHJvZ3JhbXNDb3VudCA9IDA7XHJcbiAgICBzd2l0Y2ggKHRoaXMuY3VycmVudFByb2dyYW0ucHJvZ3JhbVR5cGUpIHtcclxuICAgICAgY2FzZSAwOlxyXG4gICAgICAgIHRoaXMucHJvZ3JhbURhdGEuU2VsZWN0ZWRPdGhlcnNQcm9ncmFtc0NvdW50Kys7XHJcbiAgICAgICAgYnJlYWs7XHJcbiAgICAgIGNhc2UgMTpcclxuICAgICAgICB0aGlzLnByb2dyYW1EYXRhLlNlbGVjdGVkUmVndWxhdGlvblByb2dyYW1zQ291bnQrKztcclxuICAgICAgICBicmVhaztcclxuICAgICAgY2FzZSAyOlxyXG4gICAgICAgIHRoaXMucHJvZ3JhbURhdGEuU2VsZWN0ZWRTdGFuZGFyZFByb2dyYW1zQ291bnQrKztcclxuICAgICAgICBicmVhaztcclxuICAgICAgY2FzZSAzOlxyXG4gICAgICAgIHRoaXMucHJvZ3JhbURhdGEuU2VsZWN0ZWRJbnRlcm5hbENvbnRyb2xzUHJvZ3JhbXNDb3VudCsrO1xyXG4gICAgICAgIGJyZWFrO1xyXG5cclxuICAgIH1cclxuICB9XHJcblxyXG59XHJcbiJdfQ==
|
|
640
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicHJvZ3JhbS1saXN0aW5nLmNvbXBvbmVudC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL3Z4LXdvcmtmbG93LWVuZ2luZS9zcmMvbGliL3NoYXJlZENvbXBvbmVudHMvcHJvZ3JhbS1saXN0aW5nL3Byb2dyYW0tbGlzdGluZy5jb21wb25lbnQudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFFLFVBQVUsRUFBRSxNQUFNLHNCQUFzQixDQUFDO0FBQ2xELE9BQU8sRUFBRSxTQUFTLEVBQUUsWUFBWSxFQUFFLEtBQUssRUFBVSxNQUFNLEVBQUUsU0FBUyxFQUFFLE1BQU0sZUFBZSxDQUFDO0FBQzFGLE9BQU8sRUFBRSxxQkFBcUIsRUFBRSxNQUFNLGdEQUFnRCxDQUFDO0FBUXZGLE1BQU0sT0FBTyx1QkFBdUI7SUFpSGxDLFlBQW9CLHFCQUE0QztRQUE1QywwQkFBcUIsR0FBckIscUJBQXFCLENBQXVCO1FBaEhoRSxjQUFTLEdBQUcsS0FBSyxDQUFDO1FBQ2xCLFlBQU8sR0FBRyxLQUFLLENBQUM7UUFDaEIsV0FBTSxHQUFHLEtBQUssQ0FBQztRQUlOLGVBQVUsR0FBVyxFQUFFLENBQUM7UUFDakMsMkNBQTJDO1FBRTNDLCtCQUEwQixHQUFVLEVBQUUsQ0FBQztRQUN2Qyx1QkFBa0IsR0FBVSxFQUFFLENBQUM7UUFDL0IsMkJBQXNCLEdBQVEsRUFBRSxDQUFDO1FBT3hCLHFCQUFnQixHQUFHLEVBQUUsQ0FBQztRQUd0QixTQUFJLEdBQVcsUUFBUSxDQUFDO1FBb0JqQywyQkFBc0IsR0FBSztZQUN6QixPQUFPLEVBQUMsRUFBRTtZQUNWLFVBQVUsRUFBQyxFQUFFO1NBQ2QsQ0FBQTtRQUNELGdCQUFXLEdBQWdCO1lBQ3pCLElBQUksRUFBRSxFQUFFO1lBQ1IsSUFBSSxFQUFFLENBQUM7WUFDUCxFQUFFLEVBQUUsQ0FBQztZQUNMLFVBQVUsRUFBRSxDQUFDO1lBQ2IsWUFBWSxFQUFF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SDthQUFNO1lBQ0wsSUFBSSxDQUFDLHNCQUFzQixHQUFHLEVBQUUsQ0FBQztZQUNqQyxJQUFJLENBQUMsa0JBQWtCLEdBQUcsRUFBRSxDQUFDO1NBQzlCO0lBQ0gsQ0FBQztJQUdELGdCQUFnQixDQUFDLEdBQWtDO1FBQ2pELElBQUksQ0FBQyxhQUFhLEdBQUcsR0FBRyxDQUFDO1FBQ3pCLElBQUksQ0FBQyxlQUFlLEVBQUUsQ0FBQztJQUN6QixDQUFDOzs7WUE5cEJGLFNBQVMsU0FBQztnQkFDVCxRQUFRLEVBQUUscUJBQXFCO2dCQUMvQixpMmxCQUErQzs7YUFFaEQ7OztZQVBRLHFCQUFxQjs7OzJCQVkzQixLQUFLOzhCQUVMLEtBQUs7eUJBQ0wsS0FBSztvQ0FNTCxLQUFLLFNBQUMsb0JBQW9COytCQU0xQixLQUFLOytCQUVMLEtBQUs7bUJBQ0wsS0FBSzs0QkFDTCxTQUFTLFNBQUMsZUFBZTs2QkFDekIsU0FBUyxTQUFDLGdCQUFnQjsrQkFNMUIsS0FBSyxTQUFDLGVBQWU7a0NBK0VyQixNQUFNO3lCQUNOLE1BQU0iLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBIdHRwUGFyYW1zIH0gZnJvbSAnQGFuZ3VsYXIvY29tbW9uL2h0dHAnO1xyXG5pbXBvcnQgeyBDb21wb25lbnQsIEV2ZW50RW1pdHRlciwgSW5wdXQsIE9uSW5pdCwgT3V0cHV0LCBWaWV3Q2hpbGQgfSBmcm9tICdAYW5ndWxhci9jb3JlJztcclxuaW1wb3J0IHsgUmVzcG9uc2liaWxpdHlTZXJ2aWNlIH0gZnJvbSAnLi4vLi4vd29ya2Zsb3ctc2VydmljZXMvcmVzcG9uc2liaWxpdHkuc2VydmljZSc7XHJcbmltcG9ydCB7IGNhdGVnb3J5TGlzdCwgcHJvZ3JhbUxpc3QgfSBmcm9tICcuL3Byb2dyYW0tbGlzdC1tb2RlbCc7XHJcblxyXG5AQ29tcG9uZW50KHtcclxuICBzZWxlY3RvcjogJ2FwcC1wcm9ncmFtLWxpc3RpbmcnLFxyXG4gIHRlbXBsYXRlVXJsOiAnLi9wcm9ncmFtLWxpc3RpbmcuY29tcG9uZW50Lmh0bWwnLFxyXG4gIHN0eWxlVXJsczogWycuL3Byb2dyYW0tbGlzdGluZy5jb21wb25lbnQubGVzcyddXHJcbn0pXHJcbmV4cG9ydCBjbGFzcyBQcm9ncmFtTGlzdGluZ0NvbXBvbmVudCBpbXBsZW1lbnRzIE9uSW5pdCB7XHJcbiAgYW5pbWF0aW9uID0gZmFsc2U7XHJcbiAgc3ViTGlzdCA9IGZhbHNlO1xyXG4gIGxvYWRlciA9IGZhbHNlO1xyXG4gIEBJbnB1dCgpIHByb2dyYW1zTGlzdDogYW55O1xyXG4gIC8vIEBJbnB1dCgpIGFsbFByb2dyYW1zOiBhbnlbXSA9IFtdO1xyXG4gIEBJbnB1dCgpIHNlbGVjdGVkUHJvZ3JhbSE6IGFueTtcclxuICBASW5wdXQoKSBvcGVuZWRGcm9tOiBzdHJpbmcgPSAnJztcclxuICAvLyBASW5wdXQoKSBzZWxlY3RlZENhdGVnb3JpZXM6IGFueVtdID0gW107XHJcblxyXG4gIHZpZXdPbmx5UHJvZ3JhbXNDYXRlZ29yeUlkOiBhbnlbXSA9IFtdO1xyXG4gIHNlbGVjdGVkQ2F0ZWdvcmllczogYW55W10gPSBbXTtcclxuICB0ZW1wU2VsZWN0ZWRDYXRlZ29yaWVzOiBhbnkgPSBbXTtcclxuICBASW5wdXQoJ3NlbGVjdGVkQ2F0ZWdvcmllcycpIHNldCBnZXRTZWxlY3RlZENhdGVnb3JpZXMoY2F0ZWdvcnk6IGFueSkge1xyXG4gICAgY29uc29sZS5sb2coJ3NlbGVjdGVkQ2F0ZWdvcmllc3NlbGVjdGVkQ2F0ZWdvcmllcycsY2F0ZWdvcnkpXHJcbiAgICB0aGlzLnNlbGVjdGVkQ2F0ZWdvcmllcyA9IGNhdGVnb3J5O1xyXG4gICAgdGhpcy50ZW1wU2VsZWN0ZWRDYXRlZ29yaWVzID0gSlNPTi5zdHJpbmdpZnkoY2F0ZWdvcnkpO1xyXG4gICAgXHJcbiAgfTtcclxuICBASW5wdXQoKSByZXNwb25zaWJpbGl0eUlkID0gJyc7XHJcblxyXG4gIEBJbnB1dCgpIGhpZGVQcm9ncmFtc0xpc3QhOiBhbnk7XHJcbiAgQElucHV0KCkgbW9kZTogc3RyaW5nID0gJ0NSRUFURSc7XHJcbiAgQFZpZXdDaGlsZCgnc2VhcmNoUHJvZ3JhbScpIHNlYXJjaFByb2dyYW0hOiBhbnk7XHJcbiAgQFZpZXdDaGlsZCgnc2VhcmNoQ2F0ZWdvcnknKSBzZWFyY2hDYXRlZ29yeSE6IGFueTtcclxuXHJcbiAgcHJlc2VydmVkU2VsZWN0ZWRQcm9ncmFtczogYW55O1xyXG4gIHByZXNlcnZlZFByb2dyYW1zSWQ6IGFueTtcclxuICBwcmVzZXJ2ZVByaW1hcnlQcm9ncmFtOiBhbnk7XHJcbiAgXHJcbiAgQElucHV0KCdsaW5rZWRQcm9ncmFtJykgc2V0IGdldExpbmtlZFByb2dyYW0ocHJvZ3JhbTogYW55KSB7XHJcbiAgICB0aGlzLnNlbGVjdGVkUHJvZ3JhbXNEZXRhaWwgPSBbXTtcclxuICAgIHRoaXMuc2VsZWN0ZWRQcm9ncmFtc0lkID0gW107XHJcbiAgICB0aGlzLnZpZXdPbmx5UHJvZ3JhbXNDYXRlZ29yeUlkID0gW107XHJcbiAgICB0aGlzLnNlbGVjdGVkUHJvZ3JhbXNEZXRhaWwgPSBwcm9ncmFtO1xyXG4gICAgdGhpcy5zZWxlY3RlZFByb2dyYW1zRGV0YWlsLmZvckVhY2goIChlbGU6IGFueSkgPT4ge1xyXG4gICAgICB0aGlzLnNlbGVjdGVkUHJvZ3JhbXNJZC5wdXNoKGVsZT8uX2lkKTtcclxuICAgICAgdGhpcy5nZXRTZWxlY3RlZFByb2dyYW1Db3VudCh0cnVlICwgZWxlPy5wcm9ncmFtVHlwZSk7XHJcbiAgICAgIChlbGU/LmlzVmlld09ubHlQcm9ncmFtKSA/IHRoaXMudmlld09ubHlQcm9ncmFtc0NhdGVnb3J5SWQ/LnB1c2goZWxlPy5jYXRlZ29yeV9pZCkgOiBudWxsO1xyXG4gICAgfSlcclxuICB9XHJcblxyXG4gIHByZXZpb3VzU2VsZWN0ZWRWYWx1ZXM6YW55PXtcclxuICAgIHByb2dyYW06e30sXHJcbiAgICBjYXRlZ29yaWVzOltdXHJcbiAgfVxyXG4gIHByb2dyYW1EYXRhOiBwcm9ncmFtTGlzdCA9IHtcclxuICAgIGRhdGE6IFtdLFxyXG4gICAgZnJvbTogMCxcclxuICAgIHRvOiAwLFxyXG4gICAgdG90YWxQYWdlczogMCxcclxuICAgIHRvdGFsUmVjb3JkczogMCxcclxuICAgIGN1cnJlbnRQYWdlOiAxLFxyXG4gICAgQWxsSW50ZXJuYWxDb250cm9sc1Byb2dyYW1zQ291bnQ6IDAsXHJcbiAgICBBbGxPdGhlcnNQcm9ncmFtc0NvdW50OiAwLFxyXG4gICAgQWxsUmVndWxhdGlvblByb2dyYW1zQ291bnQ6IDAsXHJcbiAgICBBbGxTdGFuZGFyZFByb2dyYW1zQ291bnQ6IDAsXHJcbiAgICBTZWxlY3RlZEludGVybmFsQ29udHJvbHNQcm9ncmFtc0NvdW50OiAwLFxyXG4gICAgU2VsZWN0ZWRPdGhlcnNQcm9ncmFtc0NvdW50OiAwLFxyXG4gICAgU2VsZWN0ZWRSZWd1bGF0aW9uUHJvZ3JhbXNDb3VudDogMCxcclxuICAgIFNlbGVjdGVkU3RhbmRhcmRQcm9ncmFtc0NvdW50OiAwLFxyXG4gICAgQWxsUHJvZ3JhbXNDb3VudDowLFxyXG4gICAgQWxsVmlld09ubHlQcm9ncmFtQ291bnQ6IDAsXHJcbiAgfVxyXG5cclxuICBwcm9ncmFtVGFiRGF0YUNvdW50OiBhbnkgPSB7XHJcbiAgICBhbGxJbnRlcm5hbENvbnRyb2xzUHJvZ3JhbXNDb3VudDogMCxcclxuICAgIGFsbE90aGVyc1Byb2dyYW1zQ291bnQ6IDAsXHJcbiAgICBhbGxSZWd1bGF0aW9uUHJvZ3JhbXNDb3VudDogMCxcclxuICAgIGFsbFN0YW5kYXJkUHJvZ3JhbXNDb3VudDogMCxcclxuICB9XHJcblxyXG4gIGNhdGVnb3J5RGF0YTogY2F0ZWdvcnlMaXN0ID0ge1xyXG4gICAgZGF0YTogW10sXHJcbiAgICBmcm9tOiAwLFxyXG4gICAgdG86IDAsXHJcbiAgICB0b3RhbFBhZ2VzOiAwLFxyXG4gICAgdG90YWxSZWNvcmRzOiAwLFxyXG4gICAgY3VycmVudFBhZ2U6IDEsXHJcbiAgICBzZWxlY3RlZENhdGVnb3JpZXM6IFtdXHJcbiAgfVxyXG5cclxuICBzaG93Q2F0ZWdvcmllcyA9IGZhbHNlO1xyXG4gIGN1cnJlbnRQcm9ncmFtITogYW55O1xyXG4gIHNlYXJjaFN0cmluZzogc3RyaW5nID0gJyc7XHJcbiAgY2F0ZWdvcnlTZWFyY2hTdHJpbmc6IHN0cmluZyA9ICcnO1xyXG5cclxuICBhY3RpdmVUYWI6ICdyZWd1bGF0aW9ucycgfCAnc3RhbmRhcmRzJyB8ICdpbnRlcm5hbF9jb250cm9scycgfCAnb3RoZXJzJyA9ICdyZWd1bGF0aW9ucydcclxuICBzZWxlY3RlZElkczogYW55W10gPSBbXTtcclxuICBjYXRlZ29yeUxpc3Q6IGFueVtdID0gW107XHJcbiAgYmxvY2tXaWR0aDogYW55O1xyXG5cclxuICBwcm9ncmFtVHlwZU9iamVjdCA9IHtcclxuICAgIHJlZ3VsYXRpb25zOiAxLFxyXG4gICAgc3RhbmRhcmRzOiAyLFxyXG4gICAgaW50ZXJuYWxfY29udHJvbHM6IDMsXHJcbiAgICBvdGhlcnM6IDAsXHJcbiAgfVxyXG5cclxuICBkaXNwbGF5Q29uZmlybWF0aW9uTWVzc2FnZTpib29sZWFuPWZhbHNlXHJcbiAgdGVtcFByaW1hcnlQcm9ncmFtOiBhbnkgPSB7fTtcclxuICBwcmltYXJ5Q29uZmlybWF0aW9uTWVzc2FnZTogc3RyaW5nID0gYE9uY2UgY29uZmlybWVkLCB0aGUgPGVtPlByaW1hcnkgUHJvZ3JhbTwvZW0+IGZvciB0aGlzIHJlc3BvbnNpYmlsaXR5IHdpbGwgYmUgY2hhbmdlZC4gSGVuY2UsIGFsbCB0aGUgZGVmYXVsdCBzZXR0aW5ncyByZWxhdGVkIHRvIHRoZSBuZXcgPGVtPlByaW1hcnkgUHJvZ3JhbTwvZW0+IHdpbGwgbm93IGFwcGx5IHRvIHRoaXMgcmVzcG9uc2liaWxpdHkuYDtcclxuICBpc1ByaW1hcnlDb25maXJtYXRpb246IGJvb2xlYW4gPSBmYWxzZTtcclxuICBpc1VuY2hlY2tlZFByb2dyYW06IGJvb2xlYW4gPSBmYWxzZTtcclxuICBpc1ByaW1hcnlVbmNoZWNrZWQ6IGJvb2xlYW4gPSBmYWxzZTtcclxuICBzZWxlY3RlZFByb2dyYW1zRGV0YWlsOiBhbnkgPSBbXTtcclxuICBzZWxlY3RlZFByb2dyYW1zSWQ6IGFueSA9IFtdO1xyXG4gIHByb2dyYW1Db3VudExvYWRlciA9IGZhbHNlO1xyXG5cclxuICBAT3V0cHV0KCkgc2F2ZVNlbGVjdGVkUHJvZ3JhbSA9IG5ldyBFdmVudEVtaXR0ZXIoKTtcclxuICBAT3V0cHV0KCkgY2xvc2VFdmVudCA9IG5ldyBFdmVudEVtaXR0ZXIoKTtcclxuICBhbGxDYXRlZ29yaWVzOiBhbnlbXSA9IFtdO1xyXG5cclxuICBjb25zdHJ1Y3Rvcihwcml2YXRlIHJlc3BvbnNpYmlsaXR5U2VydmljZTogUmVzcG9uc2liaWxpdHlTZXJ2aWNlKSB7XHJcbiAgfVxyXG5cclxuICBuZ09uSW5pdCgpOiB2b2lkIHtcclxuICAgIHRoaXMuYW5pbWF0aW9uID0gdHJ1ZTtcclxuICAgIHNldFRpbWVvdXQoKCkgPT4ge1xyXG4gICAgICB0aGlzLmFuaW1hdGlvbiA9IGZhbHNlO1xyXG4gICAgfSwgMzAwKTtcclxuICAgIGlmICh0aGlzLnNlbGVjdGVkUHJvZ3JhbSAmJiB0aGlzLnNlbGVjdGVkUHJvZ3JhbVswXSkge1xyXG4gICAgICB0aGlzLmN1cnJlbnRQcm9ncmFtID0gdGhpcy5zZWxlY3RlZFByb2dyYW1bMF07XHJcbiAgICAgIGlmKHRoaXMubW9kZSA9PT0gJ0VESVQnIHx8IHRoaXMub3BlbmVkRnJvbSA9PT0gJ1BST0dSQU1fV09SS1JPT00nKSB7XHJcbiAgICAgICAgdGhpcy52aWV3T25seVByb2dyYW1zQ2F0ZWdvcnlJZD8ucHVzaCh0aGlzLmN1cnJlbnRQcm9ncmFtPy5jYXRlZ29yeV9pZCk7XHJcbiAgICAgIH1cclxuICAgICAgc3dpdGNoICh0aGlzLmN1cnJlbnRQcm9ncmFtPy5wcm9ncmFtVHlwZSkge1xyXG4gICAgICAgIGNhc2UgMDpcclxuICAgICAgICAgIHRoaXMuYWN0aXZlVGFiID0gJ290aGVycyc7XHJcbiAgICAgICAgICBicmVhaztcclxuICAgICAgICBjYXNlIDE6XHJcbiAgICAgICAgICB0aGlzLmFjdGl2ZVRhYiA9ICdyZWd1bGF0aW9ucyc7XHJcbiAgICAgICAgICBicmVhaztcclxuICAgICAgICBjYXNlIDI6XHJcbiAgICAgICAgICB0aGlzLmFjdGl2ZVRhYiA9ICdzdGFuZGFyZHMnO1xyXG4gICAgICAgICAgYnJlYWs7XHJcbiAgICAgICAgY2FzZSAzOlxyXG4gICAgICAgICAgdGhpcy5hY3RpdmVUYWIgPSAnaW50ZXJuYWxfY29udHJvbHMnO1xyXG4gICAgICAgICAgYnJlYWs7XHJcbiAgICAgICAgZGVmYXVsdDpcclxuICAgICAgICAgIHRoaXMuYWN0aXZlVGFiID0gJ3JlZ3VsYXRpb25zJztcclxuICAgICAgICAgIGJyZWFrO1xyXG4gICAgICB9XHJcbiAgICAgIHRoaXMuZ2V0U2VsZWN0ZWRQcm9ncmFtQ291bnQoKTtcclxuICAgICAgLy8gaWYgKHRoaXMuc2VsZWN0ZWRDYXRlZ29yaWVzPy5sZW5ndGggJiYgdGhpcy5jdXJyZW50UHJvZ3JhbSkge1xyXG4gICAgICAgIHRoaXMucG9wdWxhdGVDYXRlZ29yaWVzKCk7XHJcbiAgICAgIC8vIH1cclxuICAgIH1cclxuIFxyXG4gICAgaWYgKHRoaXMuaGlkZVByb2dyYW1zTGlzdCkge1xyXG4gICAgICB0aGlzLnNlbGVjdGVkUHJvZ3JhbXNJZD8ucHVzaCh0aGlzLnNlbGVjdGVkUHJvZ3JhbVswXT8uX2lkKTtcclxuICAgICAgdGhpcy5nZXRDYXRlZ29yaWVzTGlzdCgpO1xyXG4gICAgfSBlbHNlIHtcclxuICAgICAgdGhpcy5nZXRQcm9ncmFtc0xpc3QoKTtcclxuICAgIH1cclxuICAgIHRoaXMuZ2V0UHJvZ3JhbXNDb3VudCgpO1xyXG4gXHJcbiAgICB0aGlzLnByZXZpb3VzU2VsZWN0ZWRWYWx1ZXM9e1xyXG4gICAgICBwcm9ncmFtczogdGhpcy5jdXJyZW50UHJvZ3JhbSxcclxuICAgICAgY2F0ZWdvcmllczoodGhpcy5zZWxlY3RlZENhdGVnb3JpZXMubGVuZ3RoKT8gIFsuLi5uZXcgU2V0KHRoaXMuc2VsZWN0ZWRDYXRlZ29yaWVzKV06W10sXHJcbiAgICB9XHJcblxyXG4gICAgdGhpcy5wcmVzZXJ2ZVByZXZpb3VzRGV0YWlscygpO1xyXG4gIH1cclxuICBwb3B1bGF0ZUNhdGVnb3JpZXMoKSB7XHJcbiAgICB0aGlzLnNlbGVjdGVkSWRzID0gW107XHJcbiAgICBsZXQgcGFyYW1zID0gbmV3IEh0dHBQYXJhbXMoKTtcclxuICAgIC8vIHBhcmFtcyA9IHBhcmFtcy5hcHBlbmQoJ3Byb2dyYW1faWQnLCB0aGlzLmN1cnJlbnRQcm9ncmFtLl9pZCk7XHJcbiAgICBwYXJhbXMgPSBwYXJhbXMuYXBwZW5kKCdpc1BhZ2luYXRpb24nLCBmYWxzZSk7XHJcbiAgICBpZih0aGlzLnJlc3BvbnNpYmlsaXR5SWQpIHtcclxuICAgICAgcGFyYW1zID0gcGFyYW1zLmFwcGVuZCgncmVwb3J0SWQnLHRoaXMucmVzcG9uc2liaWxpdHlJZCk7XHJcbiAgICB9XHJcblxyXG4gICAgdGhpcy5yZXNwb25zaWJpbGl0eVNlcnZpY2UuZ2V0UHJvZ3JhbXNMaXN0KHBhcmFtcywgdGhpcy5zZWxlY3RlZFByb2dyYW1zSWQpLnN1YnNjcmliZSh7XHJcbiAgICAgIG5leHQ6IChyZXM6IGFueSkgPT4ge1xyXG4gICAgICAgIGNvbnN0IGFsbENhdGVnb3JpZXMgPSByZXMuZGF0YTtcclxuXHJcbiAgICAgICAgdGhpcy5jYXRlZ29yeURhdGEuc2VsZWN0ZWRDYXRlZ29yaWVzID0gYWxsQ2F0ZWdvcmllcy5maWx0ZXIoKGVsZTphbnkpPT50aGlzLnNlbGVjdGVkQ2F0ZWdvcmllcy5pbmNsdWRlcyhlbGUuY2F0ZWdvcnlfaWQpKVxyXG4gICAgICAgIHRoaXMuY2F0ZWdvcnlEYXRhLnNlbGVjdGVkQ2F0ZWdvcmllcy5mb3JFYWNoKChlbGVtZW50OiBhbnkpID0+IHtcclxuICAgICAgICAgIHRoaXMuc2VsZWN0ZWRJZHMucHVzaChlbGVtZW50LmNhdGVnb3J5X2lkKVxyXG4gICAgICAgIH0pO1xyXG4gICAgICB9LFxyXG4gICAgICBlcnJvcjogZXJyID0+IHtcclxuICAgICAgICBjb25zb2xlLmVycm9yKGVycik7XHJcbiAgICAgIH1cclxuICAgIH0pO1xyXG4gIH1cclxuXHJcblxyXG4gIGhhbmRsZVNlYXJjaChldmVudDogYW55KSB7XHJcbiAgICBpZiAodGhpcy5zZWFyY2hTdHJpbmcgIT0gZXZlbnQpIHtcclxuICAgICAgdGhpcy5wcm9ncmFtRGF0YS5jdXJyZW50UGFnZSA9IDE7XHJcbiAgICAgIHRoaXMuc2VhcmNoU3RyaW5nID0gZXZlbnQ7XHJcbiAgICAgIHRoaXMuZ2V0UHJvZ3JhbXNMaXN0KHsgc2VhcmNoOiB0cnVlIH0pO1xyXG4gICAgICB0aGlzLmdldFByb2dyYW1zQ291bnQoeyBzZWFyY2g6IHRydWUgfSk7XHJcbiAgICB9XHJcbiAgfVxyXG4gIGNhdGVnb3J5U2VhcmNoKGV2ZW50OiBhbnkpIHtcclxuICAgIGlmICh0aGlzLmNhdGVnb3J5U2VhcmNoU3RyaW5nICE9IGV2ZW50KSB7XHJcbiAgICAgIHRoaXMuY2F0ZWdvcnlTZWFyY2hTdHJpbmcgPSBldmVudDtcclxuICAgICAgdGhpcy5nZXRDYXRlZ29yaWVzTGlzdCh7IHNlYXJjaDogdHJ1ZSB9KVxyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgc2VsZWN0UHJvZ3JhbShldmVudDogYW55LCBwcm9ncmFtOiBhbnkpIHtcclxuICAgIHRoaXMudXBkYXRlU2VsZWN0ZWRQcm9ncmFtcyhldmVudCwgcHJvZ3JhbSk7XHJcbiAgICAvLyB0aGlzLmdldFNlbGVjdGVkUHJvZ3JhbUNvdW50KGV2ZW50LCBwcm9ncmFtPy5wcm9ncmFtVHlwZSk7XHJcbiAgICBpZiAoZXZlbnQpIHtcclxuICAgICAgT2JqZWN0LmtleXModGhpcy5jdXJyZW50UHJvZ3JhbSA/PyB7fSkubGVuZ3RoID8gbnVsbCA6IHRoaXMuY3VycmVudFByb2dyYW0gPSBwcm9ncmFtO1xyXG4gICAgICAvLyB0aGlzLmN1cnJlbnRQcm9ncmFtID0gcHJvZ3JhbTtcclxuICAgICAgdGhpcy5zZWxlY3RlZElkcyA9IFtdO1xyXG4gICAgICB0aGlzLmNhdGVnb3J5TGlzdCA9IFtdO1xyXG4gICAgICAvLyB0aGlzLmdldFNlbGVjdGVkUHJvZ3JhbUNvdW50KCk7XHJcbiAgICB9XHJcbiAgICBcclxuICB9XHJcblxyXG4gIC8qKlxyXG4gICAqIElmIHRoZSBldmVudCBpcyB0cnVlLCB0aGVuIHB1c2ggdGhlIHByb2dyYW0gdG8gdGhlIHNlbGVjdGVkUHJvZ3JhbXNEZXRhaWwgYXJyYXkuIElmIHRoZSBldmVudCBpc1xyXG4gICAqIGZhbHNlLCB0aGVuIHJlbW92ZSB0aGUgcHJvZ3JhbSBmcm9tIHRoZSBzZWxlY3RlZFByb2dyYW1zRGV0YWlsIGFycmF5LlxyXG4gICAqIEBwYXJhbSB7YW55fSBldmVudCAtIGJvb2xlYW5cclxuICAgKiBAcGFyYW0ge2FueX0gcHJvZ3JhbSAtIGFueSA9IHtcclxuICAgKi9cclxuICB1cGRhdGVTZWxlY3RlZFByb2dyYW1zKGV2ZW50OiBhbnksIHByb2dyYW06IGFueSkge1xyXG4gICAgaWYoZXZlbnQpIHtcclxuICAgICAgY29uc3QgaW5kZXhPZlByb2dyYW0gPSB0aGlzLnNlbGVjdGVkUHJvZ3JhbXNEZXRhaWw/LmZpbmRJbmRleCggKGVsOiBhbnkpID0+IGVsPy5jYXRlZ29yeV9pZCA9PT0gcHJvZ3JhbT8uY2F0ZWdvcnlfaWQpO1xyXG4gICAgICBpZihpbmRleE9mUHJvZ3JhbSA9PT0gLTEgJiYgT2JqZWN0LmtleXMocHJvZ3JhbSk/Lmxlbmd0aCkge1xyXG4gICAgICAgIFxyXG4gICAgICAgIHRoaXMuc2VsZWN0ZWRQcm9ncmFtc0lkPy5wdXNoKHByb2dyYW0/Ll9pZCk7XHJcbiAgICAgICAgdGhpcy5zZWxlY3RlZFByb2dyYW1zRGV0YWlsPy5wdXNoKHByb2dyYW0pO1xyXG4gICAgICAgIHRoaXMuZ2V0U2VsZWN0ZWRQcm9ncmFtQ291bnQoZXZlbnQsIHByb2dyYW0/LnByb2dyYW1UeXBlKTtcclxuICAgICAgfVxyXG4gICAgfSBcclxuICAgIGVsc2Uge1xyXG4gICAgICAgIGNvbnN0IGluZGV4T2ZQcm9ncmFtID0gdGhpcy5zZWxlY3RlZFByb2dyYW1zRGV0YWlsPy5maW5kSW5kZXgoIChlbDogYW55KSA9PiBlbD8uY2F0ZWdvcnlfaWQgPT09IHByb2dyYW0/LmNhdGVnb3J5X2lkKTtcclxuICAgICAgICBpZihpbmRleE9mUHJvZ3JhbSAhPT0gLTEpIHtcclxuICAgICAgICAgIHRoaXMuc2VsZWN0ZWRQcm9ncmFtc0RldGFpbD8uc3BsaWNlKGluZGV4T2ZQcm9ncmFtLCAxKTtcclxuICAgICAgICB9XHJcbiAgICAgICAgY29uc3QgaW5kZXhPZklkID0gdGhpcy5zZWxlY3RlZFByb2dyYW1zSWQ/LmZpbmRJbmRleCggKGVsOiBhbnkpID0+IGVsID09PSBwcm9ncmFtPy5faWQpO1xyXG4gICAgICAgIGlmKGluZGV4T2ZJZCAhPT0gLTEpIHtcclxuICAgICAgICAgIHRoaXMuc2VsZWN0ZWRQcm9ncmFtc0lkPy5zcGxpY2UoaW5kZXhPZklkLCAxKTtcclxuICAgICAgICBcclxuICAgICAgICB9XHJcbiAgICAgICAgdGhpcy5pc1ByaW1hcnlVbmNoZWNrZWQgPSBmYWxzZTtcclxuXHJcbiAgICAgICAgaWYodGhpcy5jdXJyZW50UHJvZ3JhbSAmJiB0aGlzLmN1cnJlbnRQcm9ncmFtPy5jYXRlZ29yeV9pZCA9PT0gcHJvZ3JhbT8uY2F0ZWdvcnlfaWQpIHtcclxuICAgICAgICAgIC8vIHRoaXMucHJpbWFyeUNvbmZpcm1hdGlvbk1lc3NhZ2UgPSAnWW91IGNhbm5vdCBkZXNlbGVjdCB0aGlzIFByb2dyYW0gc2luY2UgdGhpcyBpcyB0aGUgPGVtPlByaW1hcnkgUHJvZ3JhbTwvZW0+IGZvciB0aGlzIHJlc3BvbnNpYmlsaXR5LiBUbyBwcm9jZWVkLCBmaXJzdCBzZWxlY3QgYW5vdGhlciBQcm9ncmFtIGFzIHRoZSA8ZW0+UHJpbWFyeSBQcm9ncmFtPC9lbT4uJztcclxuICAgICAgICAgIHRoaXMuaXNQcmltYXJ5Q29uZmlybWF0aW9uID0gdHJ1ZTtcclxuICAgICAgICAgIHRoaXMuaXNQcmltYXJ5VW5jaGVja2VkID0gdHJ1ZTtcclxuICAgICAgICAgIHRoaXMudGVtcFByaW1hcnlQcm9ncmFtID0gSlNPTi5zdHJpbmdpZnkocHJvZ3JhbSk7XHJcbiAgICAgICAgICAvLyB0aGlzLmN1cnJlbnRQcm9ncmFtID0gdW5kZWZpbmVkO1xyXG4gICAgICAgIH1cclxuXHJcbiAgICAgIC8vIH1cclxuICAgICAgdGhpcy5nZXRTZWxlY3RlZFByb2dyYW1Db3VudChldmVudCwgcHJvZ3JhbT8ucHJvZ3JhbVR5cGUpO1xyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgLyoqXHJcbiAgICogSWYgdGhlIGN1cnJlbnRQcm9ncmFtIGlzIHNldCwgdGhlbiBzZXQgdGhlIGN1cnJlbnRQcm9ncmFtIHRvIHRoZSBwcm9ncmFtIHBhc3NlZCBpbiwgYW5kIHNldCB0aGVcclxuICAgKiB0ZW1wUHJpbWFyeVByb2dyYW0gdG8gdGhlIGN1cnJlbnRQcm9ncmFtLiBcclxuICAgKiBJZiB0aGUgY3VycmVudFByb2dyYW0gaXMgbm90IHNldCwgdGhlbiBzZXQgdGhlIGN1cnJlbnRQcm9ncmFtIHRvIHRoZSBwcm9ncmFtIHBhc3NlZCBpbi5cclxuICAgKiBAcGFyYW0ge2FueX0gZXZlbnQgLSBhbnkgLSB0aGUgZXZlbnQgdGhhdCBpcyB0cmlnZ2VyZWQgd2hlbiB0aGUgdXNlciBjbGlja3Mgb24gdGhlIGNoZWNrYm94XHJcbiAgICogQHBhcmFtIHthbnl9IHByb2dyYW0gLSB0aGUgcHJvZ3JhbSB0aGF0IGlzIGJlaW5nIHNlbGVjdGVkXHJcbiAgICovXHJcbiAgc2V0UHJpbWFyeVByb2dyYW0oZXZlbnQ6IGFueSwgcHJvZ3JhbTogYW55KSB7XHJcbiAgICBcclxuICAgIGlmKHRoaXMuY3VycmVudFByb2dyYW0pe1xyXG4gICAgICBjb25zdCBjdXJyZW50VGVtcCA9IHRoaXMuY3VycmVudFByb2dyYW07XHJcbiAgICAgIHRoaXMudGVtcFByaW1hcnlQcm9ncmFtID0gSlNPTi5zdHJpbmdpZnkoY3VycmVudFRlbXApO1xyXG4gICAgICB0aGlzLmN1cnJlbnRQcm9ncmFtID0gcHJvZ3JhbTtcclxuICAgICAgdGhpcy51cGRhdGVTZWxlY3RlZFByb2dyYW1zKHRydWUsIHByb2dyYW0pXHJcbiAgICAgIGlmKCFldmVudCl7XHJcbiAgICAgICAgdGhpcy5jdXJyZW50UHJvZ3JhbSA9IHt9O1xyXG4gICAgICB9XHJcbiAgICAgIHRoaXMucHJpbWFyeUNvbmZpcm1hdGlvbk1lc3NhZ2UgPSAnT25jZSBjb25maXJtZWQsIHRoZSA8ZW0+UHJpbWFyeSBQcm9ncmFtPC9lbT4gZm9yIHRoaXMgcmVzcG9uc2liaWxpdHkgd2lsbCBiZSBjaGFuZ2VkLiBIZW5jZSwgYWxsIHRoZSBkZWZhdWx0IHNldHRpbmdzIHJlbGF0ZWQgdG8gdGhlIG5ldyA8ZW0+UHJpbWFyeSBQcm9ncmFtPC9lbT4gd2lsbCBub3cgYXBwbHkgdG8gdGhpcyByZXNwb25zaWJpbGl0eS4nO1xyXG4gICAgICB0aGlzLmlzUHJpbWFyeUNvbmZpcm1hdGlvbiA9IHRydWU7XHJcbiAgICB9XHJcbiAgICBpZihldmVudCAmJiAhdGhpcy5jdXJyZW50UHJvZ3JhbSl7XHJcbiAgICAgIHRoaXMuY3VycmVudFByb2dyYW0gPSBwcm9ncmFtO1xyXG4gICAgICB0aGlzLnVwZGF0ZVNlbGVjdGVkUHJvZ3JhbXModHJ1ZSwgcHJvZ3JhbSlcclxuICAgIH1cclxuICB9XHJcblxyXG4gIC8qKlxyXG4gICAqIElmIHRoZSB1c2VyIGNsaWNrcyBcIlllc1wiIG9uIHRoZSBjb25maXJtYXRpb24gbW9kYWwsIHRoZW4gdGhlIGZ1bmN0aW9uIHdpbGwgcmVtb3ZlIHRoZSBwcm9ncmFtIGZyb21cclxuICAgKiB0aGUgc2VsZWN0ZWRQcm9ncmFtc0RldGFpbCBhcnJheSBhbmQgdGhlIHNlbGVjdGVkUHJvZ3JhbXNJZCBhcnJheS4gSWYgdGhlIHVzZXIgY2xpY2tzIFwiTm9cIiBvbiB0aGVcclxuICAgKiBjb25maXJtYXRpb24gbW9kYWwsIHRoZW4gdGhlIGZ1bmN0aW9uIHdpbGwgZG8gbm90aGluZy5cclxuICAgKiBAcGFyYW0ge2Jvb2xlYW59IGV2ZW50IC0gYm9vbGVhbiAtJmd0OyB0aGlzIGlzIHRoZSB2YWx1ZSBvZiB0aGUgY2hlY2tib3hcclxuICAgKi9cclxuICB1cGRhdGVQcmltYXJ5UHJvZ3JhbShldmVudDogYm9vbGVhbikge1xyXG4gICAgaWYoZXZlbnQgJiYgdGhpcy5pc1ByaW1hcnlVbmNoZWNrZWQpIHtcclxuICAgICAgY29uc3QgaW5kZXhPZlByb2dyYW0gPSB0aGlzLnNlbGVjdGVkUHJvZ3JhbXNEZXRhaWw/LmZpbmRJbmRleCggKGVsOiBhbnkpID0+IGVsPy5jYXRlZ29yeV9pZCA9PT0gSlNPTi5wYXJzZSh0aGlzLnRlbXBQcmltYXJ5UHJvZ3JhbSA/PyB7fSk/LmNhdGVnb3J5X2lkKTtcclxuICAgICAgaWYoaW5kZXhPZlByb2dyYW0gIT09IC0xKSB7XHJcbiAgICAgICAgdGhpcy5zZWxlY3RlZFByb2dyYW1zRGV0YWlsPy5zcGxpY2UoaW5kZXhPZlByb2dyYW0sIDEpO1xyXG4gICAgICB9XHJcbiAgICAgIGNvbnN0IGluZGV4T2ZJZCA9IHRoaXMuc2VsZWN0ZWRQcm9ncmFtc0lkPy5maW5kSW5kZXgoIChlbDogYW55KSA9PiBlbCA9PT0gSlNPTi5wYXJzZSh0aGlzLnRlbXBQcmltYXJ5UHJvZ3JhbSA/PyB7fSk/Ll9pZCk7XHJcbiAgICAgIGlmKGluZGV4T2ZJZCAhPT0gLTEpIHtcclxuICAgICAgICB0aGlzLnNlbGVjdGVkUHJvZ3JhbXNJZD8uc3BsaWNlKGluZGV4T2ZJZCwgMSk7XHJcbiAgICAgIH1cclxuICAgICAgdGhpcy5pc1ByaW1hcnlDb25maXJtYXRpb24gPSBmYWxzZTtcclxuICAgICAgdGhpcy5jdXJyZW50UHJvZ3JhbSA9IHt9O1xyXG4gICAgfSBlbHNlIGlmKCFldmVudCAmJiB0aGlzLmlzUHJpbWFyeVVuY2hlY2tlZCkge1xyXG4gICAgICB0aGlzLnVwZGF0ZVNlbGVjdGVkUHJvZ3JhbXModHJ1ZSwgIHRoaXMudGVtcFByaW1hcnlQcm9ncmFtPy5sZW5ndGggPyBKU09OLnBhcnNlKHRoaXMudGVtcFByaW1hcnlQcm9ncmFtID8/IHt9KSA6IHt9KTtcclxuICAgICAgdGhpcy5jdXJyZW50UHJvZ3JhbSA9IHRoaXMudGVtcFByaW1hcnlQcm9ncmFtPy5sZW5ndGggPyBKU09OLnBhcnNlKHRoaXMudGVtcFByaW1hcnlQcm9ncmFtID8/IHt9KSA6IHt9O1xyXG4gICAgICB0aGlzLmlzUHJpbWFyeUNvbmZpcm1hdGlvbiA9IGZhbHNlO1xyXG4gICAgfSBlbHNlIGlmKGV2ZW50KSB7XHJcbiAgICAgIC8vIHRoaXMuY3VycmVudFByb2dyYW0gPSB0aGlzLmlzUHJpbWFyeVVuY2hlY2tlZCA/IHt9IDogSlNPTi5wYXJzZSh0aGlzLnRlbXBQcmltYXJ5UHJvZ3JhbSk7XHJcbiAgICAgIHRoaXMudXBkYXRlU2VsZWN0ZWRQcm9ncmFtcyh0aGlzLmlzUHJpbWFyeVVuY2hlY2tlZCA/IGZhbHNlIDogdHJ1ZSwgIHRoaXMudGVtcFByaW1hcnlQcm9ncmFtPy5sZW5ndGggPyBKU09OLnBhcnNlKHRoaXMudGVtcFByaW1hcnlQcm9ncmFtID8/IHt9KSA6IHt9KVxyXG4gICAgICB0aGlzLmlzUHJpbWFyeUNvbmZpcm1hdGlvbiA9IGZhbHNlO1xyXG4gICAgfSBlbHNlIHtcclxuICAgICAgbGV0IGN1cnJlbnRQcmltYXJ5ID0gSlNPTi5zdHJpbmdpZnkodGhpcy5jdXJyZW50UHJvZ3JhbSk7XHJcbiAgICAgIHRoaXMuY3VycmVudFByb2dyYW0gPSB7fVxyXG4gICAgICAvLyB0aGlzLnVwZGF0ZVNlbGVjdGVkUHJvZ3JhbXMoZmFsc2UsIEpTT04ucGFyc2UoY3VycmVudFByaW1hcnkpPz8ge30pO1xyXG4gICAgICB0aGlzLnVwZGF0ZVNlbGVjdGVkUHJvZ3JhbXModHJ1ZSwgSlNPTi5wYXJzZShjdXJyZW50UHJpbWFyeSk/PyB7fSk7XHJcbiAgICAgIHRoaXMuY3VycmVudFByb2dyYW0gPSB0aGlzLnRlbXBQcmltYXJ5UHJvZ3JhbT8ubGVuZ3RoID8gSlNPTi5wYXJzZSh0aGlzLnRlbXBQcmltYXJ5UHJvZ3JhbSA/PyB7fSkgOiB7fTtcclxuICAgICAgdGhpcy5pc1ByaW1hcnlDb25maXJtYXRpb24gPSBmYWxzZTtcclxuICAgIH1cclxuICAgIHRoaXMuaXNQcmltYXJ5VW5jaGVja2VkID0gZmFsc2U7XHJcbiAgfVxyXG5cclxuICBzZWxlY3RBbGxDYXRlZ29yaWVzKHZhbHVlOiBib29sZWFuKSB7XHJcbiAgICBpZiAodmFsdWUpIHtcclxuICAgICAgdGhpcy5zZWxlY3RlZElkcyA9IFtdO1xyXG4gICAgICB0aGlzLmNhdGVnb3J5RGF0YS5zZWxlY3RlZENhdGVnb3JpZXMgPSBbXTtcclxuICAgICAgaWYgKHRoaXMuY2F0ZWdvcnlEYXRhLnRvdGFsUGFnZXMgPCAyKSB7XHJcbiAgICAgICAgdGhpcy5jYXRlZ29yeURhdGEuZGF0YS5mb3JFYWNoKChlbGU6IGFueSkgPT4ge1xyXG4gICAgICAgICAgdGhpcy5zZWxlY3RlZElkcy5wdXNoKGVsZS5jYXRlZ29yeV9pZCk7XHJcbiAgICAgICAgICB0aGlzLmNhdGVnb3J5RGF0YS5zZWxlY3RlZENhdGVnb3JpZXMucHVzaChlbGUpO1xyXG4gICAgICAgIH0pXHJcbiAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgdGhpcy5sb2FkZXIgPSB0cnVlO1xyXG4gICAgICAgIGxldCBwYXJhbXMgPSBuZXcgSHR0cFBhcmFtcygpO1xyXG4gICAgICAgIC8vIHBhcmFtcyA9IHBhcmFtcy5hcHBlbmQoJ3Byb2dyYW1faWQnLCB0aGlzLmN1cnJlbnRQcm9ncmFtPy5faWQpO1xyXG4gICAgICAgIHBhcmFtcyA9IHBhcmFtcy5hcHBlbmQoJ2lzUGFnaW5hdGlvbicsIGZhbHNlKTtcclxuICAgICAgICBpZih0aGlzLnJlc3BvbnNpYmlsaXR5SWQpIHtcclxuICAgICAgICAgIHBhcmFtcyA9IHBhcmFtcy5hcHBlbmQoJ3JlcG9ydElkJyx0aGlzLnJlc3BvbnNpYmlsaXR5SWQpO1xyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgdGhpcy5yZXNwb25zaWJpbGl0eVNlcnZpY2UuZ2V0UHJvZ3JhbXNMaXN0KHBhcmFtcywgdGhpcy5zZWxlY3RlZFByb2dyYW1zSWQpLnN1YnNjcmliZSh7XHJcbiAgICAgICAgICBuZXh0OiAocmVzOiBhbnkpID0+IHtcclxuICAgICAgICAgICAgY29uc3QgYWxsQ2F0ZWdvcmllcyA9IHJlcy5kYXRhO1xyXG5cclxuICAgICAgICAgICAgdGhpcy5jYXRlZ29yeURhdGEuc2VsZWN0ZWRDYXRlZ29yaWVzID0gcmVzLmRhdGE7XHJcbiAgICAgICAgICAgIGFsbENhdGVnb3JpZXMuZm9yRWFjaCgoZWxlbWVudDogYW55KSA9PiB7XHJcbiAgICAgICAgICAgICAgdGhpcy5zZWxlY3RlZElkcy5wdXNoKGVsZW1lbnQuY2F0ZWdvcnlfaWQpXHJcbiAgICAgICAgICAgIH0pO1xyXG4gICAgICAgICAgICB0aGlzLmxvYWRlciA9IGZhbHNlO1xyXG4gICAgICAgICAgfSxcclxuICAgICAgICAgIGVycm9yOiBlcnIgPT4ge1xyXG4gICAgICAgICAgICBjb25zb2xlLmVycm9yKGVycik7XHJcbiAgICAgICAgICAgIHRoaXMubG9hZGVyID0gZmFsc2U7XHJcbiAgICAgICAgICB9XHJcbiAgICAgICAgfSk7XHJcbiAgICAgIH1cclxuICAgIH0gZWxzZSB7XHJcbiAgICAgIHRoaXMuY2F0ZWdvcnlEYXRhLnNlbGVjdGVkQ2F0ZWdvcmllcyA9IFtdXHJcbiAgICAgIHRoaXMuc2VsZWN0ZWRJZHMgPSBbXTtcclxuXHJcbiAgICB9XHJcblxyXG5cclxuICB9XHJcblxyXG4gIGNoZWNrQ2F0ZWdvcmllc1NlbGVjdGlvbigpIHtcclxuXHJcbiAgICBpZiAodGhpcy5jYXRlZ29yeURhdGEuc2VsZWN0ZWRDYXRlZ29yaWVzLmxlbmd0aCA9PSB0aGlzLmNhdGVnb3J5RGF0YS50b3RhbFJlY29yZHMpIHtcclxuICAgICAgcmV0dXJuICdjaGVja2VkJztcclxuICAgIH0gZWxzZSBpZiAoIXRoaXMuY2F0ZWdvcnlEYXRhLnNlbGVjdGVkQ2F0ZWdvcmllcy5sZW5ndGgpIHtcclxuICAgICAgcmV0dXJuICd1bmNoZWNrZWQnO1xyXG4gICAgfSBlbHNlIHtcclxuICAgICAgcmV0dXJuICdpbmRldGVybWluYXRlJ1xyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgb3BlbkNhdGVnb3JpZXMoKSB7XHJcbiAgICB0aGlzLnNlYXJjaFN0cmluZyA9ICcnO1xyXG4gICAgY29uc3QgaXNTdWJQcm9ncmFtID0gdGhpcy5zZWxlY3RlZFByb2dyYW1zRGV0YWlsPy5zb21lKCAoZWw6IGFueSkgPT4gZWw/LmNoaWxkX2lkPy5sZW5ndGgpO1xyXG5cclxuICAgIHRoaXMucG9wdWxhdGVDYXRlZ29yaWVzKCk7XHJcbiAgICBpZiAodGhpcy5jdXJyZW50UHJvZ3JhbT8uY2hpbGRfaWQ/Lmxlbmd0aCB8fCBpc1N1YlByb2dyYW0pIHtcclxuICAgICAgdGhpcy5zaG93Q2F0ZWdvcmllcyA9IHRydWU7XHJcbiAgICAgIHRoaXMuZ2V0Q2F0ZWdvcmllc0xpc3QoKTtcclxuICAgIH0gZWxzZSB7XHJcbiAgICAgIHRoaXMuc2VsZWN0ZWRJZHMgPSBbXTtcclxuICAgICAgdGhpcy5zYXZlKCk7XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICBiYWNrVG9Qcm9ncmFtcygpIHtcclxuICAgIGlmICghdGhpcy5oaWRlUHJvZ3JhbXNMaXN0KSB7XHJcbiAgICAgIHRoaXMuc2hvd0NhdGVnb3JpZXMgPSBmYWxzZTtcclxuICAgICAgaWYodGhpcy5wcmV2aW91c1NlbGVjdGVkVmFsdWVzPy5wcm9ncmFtPy5faWQgPT0gdGhpcy5jdXJyZW50UHJvZ3JhbSl7XHJcbiAgICAgICAgdGhpcy5jYXRlZ29yeURhdGEuc2VsZWN0ZWRDYXRlZ29yaWVzID0gWy4uLm5ldyBTZXQodGhpcy5wcmV2aW91c1NlbGVjdGVkVmFsdWVzLmNhdGVnb3JpZXMpXTtcclxuICAgICAgICB0aGlzLnNlbGVjdGVkSWRzID0gW107XHJcbiAgICAgICAgdGhpcy5jYXRlZ29yeURhdGEuc2VsZWN0ZWRDYXRlZ29yaWVzLmZvckVhY2goZWxlbWVudCA9PiB7XHJcbiAgICAgICAgICB0aGlzLnNlbGVjdGVkSWRzLnB1c2goZWxlbWVudCk7XHJcbiAgICAgICAgfSk7XHJcbiAgICAgIH1lbHNle1xyXG4gICAgICAgIHRoaXMuZ2V0UHJvZ3JhbXNMaXN0KCk7XHJcbiAgICAgICAgdGhpcy5jYXRlZ29yeURhdGEuc2VsZWN0ZWRDYXRlZ29yaWVzID0gW107XHJcbiAgICAgICAgdGhpcy5zZWxlY3RlZElkcyA9IFtdO1xyXG4gICAgICB9XHJcbiAgICB9IGVsc2Uge1xyXG4gICAgICB0aGlzLmNhdGVnb3J5RGF0YS5zZWxlY3RlZENhdGVnb3JpZXMgPSBbXTtcclxuICAgICAgdGhpcy5zZWxlY3RlZElkcyA9IFtdO1xyXG4gICAgICB0aGlzLmNsb3NlKCk7XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuXHJcbiAgY2hhbmdlVGFiKHR5cGU6ICdyZWd1bGF0aW9ucycgfCAnc3RhbmRhcmRzJyB8ICdpbnRlcm5hbF9jb250cm9scycgfCAnb3RoZXJzJykge1xyXG4gICAgdGhpcy5wcm9ncmFtU3ViVGFiID0gJ1BST0dSQU1TJztcclxuICAgIHRoaXMuYWN0aXZlVGFiID0gdHlwZTtcclxuICAgIHRoaXMucHJvZ3JhbURhdGEuY3VycmVudFBhZ2UgPSAxO1xyXG4gICAgaWYodGhpcy5zZWFyY2hTdHJpbmc/Lmxlbmd0aCkge1xyXG4gICAgICB0aGlzLnNlYXJjaFN0cmluZyA9ICcnO1xyXG4gICAgICB0aGlzLmdldFByb2dyYW1zQ291bnQoKTtcclxuICAgIH1cclxuICAgIC8vIHRoaXMuc2VhcmNoU3RyaW5nID0gJyc7XHJcbiAgICB0aGlzLnNlYXJjaFByb2dyYW0ubmF0aXZlRWxlbWVudC52YWx1ZSA9ICcnO1xyXG4gICAgdGhpcy5nZXRQcm9ncmFtc0xpc3QoKTtcclxuICB9XHJcblxyXG4gIGNoYW5nZVBhZ2UoZXZlbnQ6IGFueSwgdHlwZTogJ2NhdGVnb3J5JyB8ICdwcm9ncmFtJykge1xyXG4gICAgc3dpdGNoICh0eXBlKSB7XHJcbiAgICAgIGNhc2UgJ3Byb2dyYW0nOlxyXG4gICAgICAgIHRoaXMucHJvZ3JhbURhdGEuY3VycmVudFBhZ2UgPSBldmVudDtcclxuICAgICAgICB0aGlzLmdldFByb2dyYW1zTGlzdCgpO1xyXG4gICAgICAgIGJyZWFrO1xyXG4gICAgICBjYXNlICdjYXRlZ29yeSc6XHJcbiAgICAgICAgdGhpcy5jYXRlZ29yeURhdGEuY3VycmVudFBhZ2UgPSBldmVudDtcclxuICAgICAgICB0aGlzLmdldENhdGVnb3JpZXNMaXN0KCk7XHJcbiAgICAgICAgYnJlYWs7XHJcbiAgICB9XHJcblxyXG4gIH1cclxuXHJcblxyXG5cclxuICBnZXRQcm9ncmFtc0xpc3QocGFyYW1zT2JqZWN0PzogYW55KSB7XHJcbiAgICB0aGlzLmxvYWRlciA9IHRydWU7XHJcbiAgICBsZXQgcGFyYW1zID0gbmV3IEh0dHBQYXJhbXMoKTtcclxuICAgIHBhcmFtcyA9IHBhcmFtcy5hcHBlbmQoJ3Byb2dyYW1UeXBlJywgdGhpcy5wcm9ncmFtVHlwZU9iamVjdFt0aGlzLmFjdGl2ZVRhYl0pO1xyXG4gICAgaWYgKHBhcmFtc09iamVjdD8uc2VhcmNoIHx8IHRoaXMuc2VhcmNoU3RyaW5nKSB7XHJcbiAgICAgIHBhcmFtcyA9IHBhcmFtcy5hcHBlbmQoJ3NlYXJjaFRleHQnLCB0aGlzLnNlYXJjaFN0cmluZyk7XHJcbiAgICB9IFxyXG4gICAgLy8gZWxzZSB7XHJcbiAgICBwYXJhbXMgPSBwYXJhbXMuYXBwZW5kKCdwYWdlTm8nLCB0aGlzLnByb2dyYW1EYXRhLmN1cnJlbnRQYWdlKTtcclxuICAgIC8vIH1cclxuICAgIGlmKHRoaXMucHJvZ3JhbVN1YlRhYiA9PT0gJ09USEVSX1BST0dSQU1TJykge1xyXG4gICAgICBwYXJhbXMgPSBwYXJhbXMuYXBwZW5kKCdpc1ZpZXdPbmx5UHJvZ3JhbXMnLHRydWUpO1xyXG4gICAgfVxyXG5cclxuICAgIGlmKHRoaXMucmVzcG9uc2liaWxpdHlJZCkge1xyXG4gICAgICBwYXJhbXMgPSBwYXJhbXMuYXBwZW5kKCdyZXBvcnRJZCcsdGhpcy5yZXNwb25zaWJpbGl0eUlkKTtcclxuICAgIH1cclxuXHJcbiAgICB0aGlzLnJlc3BvbnNpYmlsaXR5U2VydmljZS5nZXRQcm9ncmFtc0xpc3QocGFyYW1zKS5zdWJzY3JpYmUoe1xyXG4gICAgICBuZXh0OiAocmVzOiBhbnkpID0+IHtcclxuICAgICAgICB0aGlzLnByb2dyYW1EYXRhLmRhdGEgPSByZXMuZGF0YTtcclxuICAgICAgICB0aGlzLnByb2dyYW1EYXRhLmZyb20gPSByZXMuZnJvbTtcclxuICAgICAgICB0aGlzLnByb2dyYW1EYXRhLnRvID0gcmVzLnRvO1xyXG4gICAgICAgIHRoaXMucHJvZ3JhbURhdGEudG90YWxQYWdlcyA9IHJlcy50b3RhbFBhZ2VzO1xyXG4gICAgICAgIHRoaXMucHJvZ3JhbURhdGEudG90YWxSZWNvcmRzID0gcmVzLnRvdGFsUmVjb3JkcztcclxuICAgICAgICB0aGlzLnByb2dyYW1EYXRhLkFsbEludGVybmFsQ29udHJvbHNQcm9ncmFtc0NvdW50ID0gcmVzLkFsbEludGVybmFsQ29udHJvbHNQcm9ncmFtc0NvdW50O1xyXG4gICAgICAgIHRoaXMucHJvZ3JhbURhdGEuQWxsT3RoZXJzUHJvZ3JhbXNDb3VudCA9IHJlcy5BbGxPdGhlcnNQcm9ncmFtc0NvdW50O1xyXG4gICAgICAgIHRoaXMucHJvZ3JhbURhdGEuQWxsUmVndWxhdGlvblByb2dyYW1zQ291bnQgPSByZXMuQWxsUmVndWxhdGlvblByb2dyYW1zQ291bnQ7XHJcbiAgICAgICAgdGhpcy5wcm9ncmFtRGF0YS5BbGxTdGFuZGFyZFByb2dyYW1zQ291bnQgPSByZXMuQWxsU3RhbmRhcmRQcm9ncmFtc0NvdW50O1xyXG4gICAgICAgIHRoaXMucHJvZ3JhbURhdGEuQWxsUHJvZ3JhbXNDb3VudCA9IHJlcz8uQWxsUHJvZ3JhbXNDb3VudCA/IHJlcz8uQWxsUHJvZ3JhbXNDb3VudCA6IDA7XHJcbiAgICAgICAgdGhpcy5wcm9ncmFtRGF0YS5BbGxWaWV3T25seVByb2dyYW1Db3VudCA9IHJlcz8uQWxsVmlld09ubHlQcm9ncmFtQ291bnQgPyByZXM/LkFsbFZpZXdPbmx5UHJvZ3JhbUNvdW50IDogMDtcclxuICAgICAgICB0aGlzLmxvYWRlciA9IGZhbHNlO1xyXG5cclxuICAgICAgfSxcclxuICAgICAgZXJyb3I6IGVyciA9PiB7XHJcbiAgICAgICAgY29uc29sZS5lcnJvcihlcnIpO1xyXG4gICAgICAgIHRoaXMubG9hZGVyID0gZmFsc2U7XHJcbiAgICAgIH1cclxuICAgIH0pO1xyXG4gIH1cclxuXHJcbiAgZ2V0UHJvZ3JhbXNDb3VudChwYXJhbXNPYmplY3Q/OiBhbnkpIHtcclxuICAgIHRoaXMucHJvZ3JhbUNvdW50TG9hZGVyID0gdHJ1ZTtcclxuICAgIGxldCBwYXJhbXMgPSBuZXcgSHR0cFBhcmFtcygpO1xyXG4gICAgLy8gcGFyYW1zID0gcGFyYW1zLmFwcGVuZCgncHJvZ3JhbVR5cGUnLCB0aGlzLnByb2dyYW1UeXBlT2JqZWN0W3RoaXMuYWN0aXZlVGFiXSk7XHJcbiAgICBpZiAocGFyYW1zT2JqZWN0Py5zZWFyY2ggfHwgdGhpcy5zZWFyY2hTdHJpbmcpIHtcclxuICAgICAgcGFyYW1zID0gcGFyYW1zLmFwcGVuZCgnc2VhcmNoVGV4dCcsIHRoaXMuc2VhcmNoU3RyaW5nKTtcclxuICAgIH0gXHJcbiAgICBpZih0aGlzLnJlc3BvbnNpYmlsaXR5SWQpIHtcclxuICAgICAgcGFyYW1zID0gcGFyYW1zLmFwcGVuZCgncmVwb3J0SWQnLHRoaXMucmVzcG9uc2liaWxpdHlJZCk7XHJcbiAgICB9XHJcbiAgICB0aGlzLnJlc3BvbnNpYmlsaXR5U2VydmljZS5nZXRQcm9ncmFtc0xpc3RDb3VudChwYXJhbXMpLnN1YnNjcmliZSh7XHJcbiAgICAgIG5leHQ6IChyZXM6IGFueSkgPT4ge1xyXG4gICAgICAgIHRoaXMucHJvZ3JhbVRhYkRhdGFDb3VudC5hbGxSZWd1bGF0aW9uUHJvZ3JhbXNDb3VudCA9IHJlcz8uQWxsUmVndWxhdGlvblByb2dyYW1zQ291bnQ7XHJcbiAgICAgICAgdGhpcy5wcm9ncmFtVGFiRGF0YUNvdW50LmFsbFN0YW5kYXJkUHJvZ3JhbXNDb3VudCA9IHJlcz8uQWxsU3RhbmRhcmRQcm9ncmFtc0NvdW50O1xyXG4gICAgICAgIHRoaXMucHJvZ3JhbVRhYkRhdGFDb3VudC5hbGxJbnRlcm5hbENvbnRyb2xzUHJvZ3JhbXNDb3VudCA9IHJlcz8uQWxsSW50ZXJuYWxDb250cm9sc1Byb2dyYW1zQ291bnQ7XHJcbiAgICAgICAgdGhpcy5wcm9ncmFtVGFiRGF0YUNvdW50LmFsbE90aGVyc1Byb2dyYW1zQ291bnQgPSByZXM/LkFsbE90aGVyc1Byb2dyYW1zQ291bnQ7XHJcbiAgICAgICAgdGhpcy5wcm9ncmFtQ291bnRMb2FkZXIgPSBmYWxzZTtcclxuICAgICAgfSxcclxuICAgICAgZXJyb3I6IGVyciA9PiB7XHJcbiAgICAgICAgY29uc29sZS5lcnJvcihlcnIpO1xyXG4gICAgICAgIHRoaXMucHJvZ3JhbUNvdW50TG9hZGVyID0gZmFsc2U7XHJcbiAgICAgIH1cclxuICAgIH0pO1xyXG4gIH1cclxuXHJcbiAgc2VsZWN0ZWRTdWJDYXRlZ29yeUlkczogYW55W10gPSBbXTtcclxuICBnZXRDYXRlZ29yaWVzTGlzdChxdWVyeU9iamVjdD86IGFueSkge1xyXG4gICAgdGhpcy5sb2FkZXIgPSB0cnVlO1xyXG4gICAgbGV0IHBhcmFtcyA9IG5ldyBIdHRwUGFyYW1zKCk7XHJcbiAgICAvLyBwYXJhbXMgPSBwYXJhbXMuYXBwZW5kKCdwcm9ncmFtX2lkJywgdGhpcy5jdXJyZW50UHJvZ3JhbT8uX2lkKTtcclxuICAgIHBhcmFtcyA9IHBhcmFtcy5hcHBlbmQoJ3BhZ2VObycsIHRoaXMuY2F0ZWdvcnlEYXRhLmN1cnJlbnRQYWdlKTtcclxuICAgIGlmIChxdWVyeU9iamVjdD8uc2VhcmNoKSB7XHJcbiAgICAgIHBhcmFtcyA9IHBhcmFtcy5hcHBlbmQoJ3NlYXJjaFRleHQnLCB0aGlzLmNhdGVnb3J5U2VhcmNoU3RyaW5nKTtcclxuICAgIH1cclxuICAgIGlmKHRoaXMucmVzcG9uc2liaWxpdHlJZCkge1xyXG4gICAgICBwYXJhbXMgPSBwYXJhbXMuYXBwZW5kKCdyZXBvcnRJZCcsdGhpcy5yZXNwb25zaWJpbGl0eUlkKTtcclxuICAgIH1cclxuXHJcbiAgICB0aGlzLnJlc3BvbnNpYmlsaXR5U2VydmljZS5nZXRQcm9ncmFtc0xpc3QocGFyYW1zLCBbLi4ubmV3IFNldCh0aGlzLnNlbGVjdGVkUHJvZ3JhbXNJZCldICkuc3Vic2NyaWJlKHtcclxuICAgICAgbmV4dDogKHJlczogYW55KSA9PiB7XHJcbiAgICAgICAgdGhpcy5jYXRlZ29yeURhdGEuZGF0YSA9IHJlcy5kYXRhO1xyXG4gICAgICAgIHRoaXMuY2F0ZWdvcnlEYXRhLmZyb20gPSByZXMuZnJvbTtcclxuICAgICAgICB0aGlzLmNhdGVnb3J5RGF0YS50byA9IHJlcy50bztcclxuICAgICAgICB0aGlzLmNhdGVnb3J5RGF0YS50b3RhbFBhZ2VzID0gcmVzLnRvdGFsUGFnZXM7XHJcbiAgICAgICAgdGhpcy5jYXRlZ29yeURhdGEudG90YWxSZWNvcmRzID0gcmVzLnRvdGFsUmVjb3JkcztcclxuICAgICAgICB0aGlzLnNlbGVjdGVkU3ViQ2F0ZWdvcnlJZHMgPSByZXM/LnNlbGVjdGVkU3ViQ2F0ZWdvcnlJZHM/Lmxlbmd0aCA/IHJlcz8uc2VsZWN0ZWRTdWJDYXRlZ29yeUlkcyA6IFtdO1xyXG4gICAgICAgIHRoaXMubG9hZGVyID0gZmFsc2U7XHJcbiAgICAgIH0sXHJcbiAgICAgIGVycm9yOiBlcnIgPT4ge1xyXG4gICAgICAgIGNvbnNvbGUuZXJyb3IoZXJyKTtcclxuICAgICAgICB0aGlzLmxvYWRlciA9IGZhbHNlO1xyXG4gICAgICB9XHJcbiAgICB9KTtcclxuICAgIHRoaXMuc2hvd0NhdGVnb3JpZXMgPSB0cnVlO1xyXG5cclxuICB9XHJcblxyXG5cclxuICBzYXZlUHJvZ3JhbSgpIHtcclxuXHJcbiAgfVxyXG5cclxuICBzZWxlY3RDYXRlZ29yeShtb2RlOiBhbnksIGNhdGVnb3J5OiBhbnkpIHtcclxuICAgIGlmIChtb2RlKSB7XHJcbiAgICAgIHRoaXMuc2VsZWN0ZWRJZHMucHVzaChjYXRlZ29yeS5jYXRlZ29yeV9pZCk7XHJcbiAgICAgIHRoaXMuY2F0ZWdvcnlEYXRhLnNlbGVjdGVkQ2F0ZWdvcmllcy5wdXNoKGNhdGVnb3J5KTtcclxuICAgICAgdGhpcy5zZWxlY3RlZENhdGVnb3JpZXMucHVzaChjYXRlZ29yeS5jYXRlZ29yeV9pZCk7XHJcbiAgICB9IGVsc2Uge1xyXG4gICAgICBjb25zdCBpbmRleCA9IHRoaXMuc2VsZWN0ZWRJZHMuZmluZEluZGV4KChlbGVtZW50OiBhbnkpID0+IGVsZW1lbnQgPT0gY2F0ZWdvcnkuY2F0ZWdvcnlfaWQpO1xyXG4gICAgICB0aGlzLnNlbGVjdGVkSWRzLnNwbGljZShpbmRleCwgMSk7XHJcbiAgICAgIGNvbnN0IGNhdGVnb3J5SW5kZXggPSB0aGlzLmNhdGVnb3J5RGF0YS5zZWxlY3RlZENhdGVnb3JpZXMuZmluZEluZGV4KChlbGU6IGFueSkgPT4gZWxlLmNhdGVnb3J5X2lkID09IGNhdGVnb3J5LmNhdGVnb3J5X2lkKVxyXG4gICAgICB0aGlzLmNhdGVnb3J5RGF0YS5zZWxlY3RlZENhdGVnb3JpZXMuc3BsaWNlKGNhdGVnb3J5SW5kZXgsIDEpO1xyXG4gICAgICBjb25zdCBzZWxlY3RlZEluZGV4ID0gdGhpcy5zZWxlY3RlZENhdGVnb3JpZXMuZmluZEluZGV4KChlbGU6IGFueSkgPT4gZWxlID09IGNhdGVnb3J5Py5jYXRlZ29yeV9pZCk7XHJcbiAgICAgIHRoaXMuc2VsZWN0ZWRDYXRlZ29yaWVzLnNwbGljZShzZWxlY3RlZEluZGV4LCAxKTtcclxuICAgIH1cclxuICB9XHJcblxyXG4gIHJlbW92ZUNhdGVnb3JpZXMoZXZlbnQ6IGFueSkge1xyXG4gICAgY29uc3QgY2F0ZWdvcnlJbmRleCA9IHRoaXMuY2F0ZWdvcnlEYXRhLnNlbGVjdGVkQ2F0ZWdvcmllcy5maW5kSW5kZXgoKGVsZTogYW55KSA9PiBlbGUuY2F0ZWdvcnlfaWQgPT0gZXZlbnQuY2F0ZWdvcnlfaWQpXHJcbiAgICB0aGlzLmNhdGVnb3J5RGF0YS5zZWxlY3RlZENhdGVnb3JpZXMuc3BsaWNlKGNhdGVnb3J5SW5kZXgsIDEpO1xyXG4gICAgY29uc3QgaW5kZXggPSB0aGlzLnNlbGVjdGVkSWRzLmZpbmRJbmRleCgoZWxlbWVudDogYW55KSA9PiBlbGVtZW50ID09IGV2ZW50LmNhdGVnb3J5X2lkKTtcclxuICAgIHRoaXMuc2VsZWN0ZWRJZHMuc3BsaWNlKGluZGV4LCAxKTtcclxuICB9XHJcblxyXG4gIGNsb3NlKCkge1xyXG4gICAgY29uc3QgY3VycmVudFByb2dyYW0gPSB0aGlzLnByZXNlcnZlUHJpbWFyeVByb2dyYW0/Lmxlbmd0aCA/IEpTT04ucGFyc2UodGhpcy5wcmVzZXJ2ZVByaW1hcnlQcm9ncmFtKSA6IHt9O1xyXG4gICAgY29uc3Qgc2VsZWN0ZWRQcm9ncmFtc0lkID0gdGhpcy5wcmVzZXJ2ZWRQcm9ncmFtc0lkPy5sZW5ndGggPyBKU09OLnBhcnNlKHRoaXMucHJlc2VydmVkUHJvZ3JhbXNJZCkgOiB1bmRlZmluZWQ7XHJcbiAgICBjb25zdCBzZWxlY3RlZFByb2dyYW1zRGV0YWlsID0gdGhpcy5wcmVzZXJ2ZWRTZWxlY3RlZFByb2dyYW1zPy5sZW5ndGggPyBKU09OLnBhcnNlKHRoaXMucHJlc2VydmVkU2VsZWN0ZWRQcm9ncmFtcykgOiBbXTtcclxuICAgIGlmKHRoaXMucHJlc2VydmVQcmltYXJ5UHJvZ3JhbT8ubGVuZ3RoICYmIHRoaXMucHJlc2VydmVkU2VsZWN0ZWRQcm9ncmFtcz8ubGVuZ3RoICl7XHJcbiAgICAgIHRoaXMuc2F2ZVNlbGVjdGVkUHJvZ3JhbS5lbWl0KHtwcm9ncmFtOiBjdXJyZW50UHJvZ3JhbSwgY2F0ZWdvcmllczogSlNPTi5wYXJzZSh0aGlzLnRlbXBTZWxlY3RlZENhdGVnb3JpZXMpLCBsaW5rZWRQcm9ncmFtOiBzZWxlY3RlZFByb2dyYW1zRGV0YWlsICB9KTtcclxuICAgIH1cclxuICAgIC8vIHRoaXMuc2F2ZVNlbGVjdGVkUHJvZ3JhbS5lbWl0KHtwcm9ncmFtOiBjdXJyZW50UHJvZ3JhbSwgY2F0ZWdvcmllczogdGhpcy5zZWxlY3RlZElkcywgbGlua2VkUHJvZ3JhbTogc2VsZWN0ZWRQcm9ncmFtc0RldGFpbCAgfSk7XHJcbiAgICB0aGlzLmNsb3NlRXZlbnQuZW1pdCgpO1xyXG4gIH1cclxuXHJcbiAgc2F2ZSgpIHtcclxuICAgIGlmKCF0aGlzLmhpZGVQcm9ncmFtc0xpc3Qpe1xyXG4gICAgICB0aGlzLmRpc3BsYXlDb25maXJtYXRpb25NZXNzYWdlPXRydWU7XHJcbiAgICB9ZWxzZXtcclxuICAgICAgY29uc3Qgc2VsZWN0ZWRDYXRlZ29yeUlkcyA9IHRoaXMuc2VsZWN0ZWRJZHMuY29uY2F0KHRoaXMuc2VsZWN0ZWRTdWJDYXRlZ29yeUlkcyk7XHJcbiAgICAgIHRoaXMuc2F2ZVNlbGVjdGVkUHJvZ3JhbS5lbWl0KHsgcHJvZ3JhbTogdGhpcy5jdXJyZW50UHJvZ3JhbSwgY2F0ZWdvcmllczogIFsuLi5uZXcgU2V0KHNlbGVjdGVkQ2F0ZWdvcnlJZHMpXSwgbGlua2VkUHJvZ3JhbTogdGhpcy5zZWxlY3RlZFByb2dyYW1zRGV0YWlsIH0pO1xyXG4gICAgICAvLyB0aGlzLnNhdmVTZWxlY3RlZFByb2dyYW0uZW1pdCh7IHByb2dyYW06IHRoaXMuY3VycmVudFByb2dyYW0sIGNhdGVnb3JpZXM6IHRoaXMuc2VsZWN0ZWRJZHMgfSk7XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICBzYXZlQ2hhbmdlcyh2YWx1ZTpib29sZWFuKXtcclxuICAgIGlmKHZhbHVlKXtcclxuICAgICAgY29uc3Qgc2VsZWN0ZWRDYXRlZ29yeUlkcyA9IHRoaXMuc2VsZWN0ZWRJZHMuY29uY2F0KHRoaXMuc2VsZWN0ZWRTdWJDYXRlZ29yeUlkcyk7XHJcbiAgICAgIHRoaXMuc2F2ZVNlbGVjdGVkUHJvZ3JhbS5lbWl0KHsgcHJvZ3JhbTogdGhpcy5jdXJyZW50UHJvZ3JhbSwgY2F0ZWdvcmllczogWy4uLm5ldyBTZXQoc2VsZWN0ZWRDYXRlZ29yeUlkcyldLCBsaW5rZWRQcm9ncmFtOiB0aGlzLnNlbGVjdGVkUHJvZ3JhbXNEZXRhaWwgfSk7XHJcbiAgICAgIC8vIHRoaXMuc2F2ZVNlbGVjdGVkUHJvZ3JhbS5lbWl0KHsgcHJvZ3JhbTogdGhpcy5jdXJyZW50UHJvZ3JhbSwgY2F0ZWdvcmllczogdGhpcy5zZWxlY3RlZElkcyB9KTtcclxuICAgIH1lbHNle1xyXG4gICAgICB0aGlzLmRpc3BsYXlDb25maXJtYXRpb25NZXNzYWdlPWZhbHNlO1xyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgZGVsZXRlRXZlbnQoZXZlbnQ6IGFueSkge1xyXG4gICAgY29uc3QgaW5kZXhPZlByb2dyYW0gPSB0aGlzLnNlbGVjdGVkUHJvZ3JhbXNEZXRhaWw/LmZpbmRJbmRleCggKGVsOiBhbnkpID0+IGVsPy5jYXRlZ29yeV9pZCA9PT0gZXZlbnQ/LmNhdGVnb3J5X2lkKTtcclxuICAgIGlmKGluZGV4T2ZQcm9ncmFtICE9PSAtMSkge1xyXG4gICAgICB0aGlzLnNlbGVjdGVkUHJvZ3JhbXNEZXRhaWw/LnNwbGljZShpbmRleE9mUHJvZ3JhbSwgMSk7XHJcbiAgICB9XHJcbiAgICBjb25zdCBpbmRleE9mSWQgPSB0aGlzLnNlbGVjdGVkUHJvZ3JhbXNJZD8uZmluZEluZGV4KCAoZWw6IGFueSkgPT4gZWwgPT09IGV2ZW50Py5faWQpO1xyXG4gICAgaWYoaW5kZXhPZklkICE9PSAtMSkge1xyXG4gICAgICB0aGlzLnNlbGVjdGVkUHJvZ3JhbXNJZD8uc3BsaWNlKGluZGV4T2ZJZCwgMSk7XHJcbiAgICB9XHJcblxyXG4gICAgLy8gdGhpcy5jdXJyZW50UHJvZ3JhbSA9IHVuZGVmaW5lZDtcclxuICAgIHRoaXMuc2hvd0NhdGVnb3JpZXMgPSBmYWxzZTtcclxuICAgIHRoaXMuc2VsZWN0ZWRJZHMgPSBbXTtcclxuICAgIHRoaXMuY2F0ZWdvcnlMaXN0ID0gW107XHJcbiAgICAvL0FzIHRoaXMgaXMgYSByYWRpbyBsaXN0IGFuZCBvbmx5IG9uZSBpdGVtIGNhbiBiZSBzZWxlY3RlZCB0aGF0cyB3aHkgd2UgYXJlIHJlc2V0dGluZyBhbGwgdGhlIGNvdW50cyB0byB6ZXJvXHJcbiAgICB0aGlzLmdldFNlbGVjdGVkUHJvZ3JhbUNvdW50KGZhbHNlICwgZXZlbnQ/LnByb2dyYW1UeXBlIClcclxuICB9XHJcblxyXG4gIFxyXG5cclxuICBnZXRTZWxlY3RlZFByb2dyYW1Db3VudChldmVudD86IGJvb2xlYW4sIHByb2dyYW1UeXBlPzogbnVtYmVyKSB7XHJcbiAgICAvLyBzd2l0Y2ggKHRoaXMuY3VycmVudFByb2dyYW0ucHJvZ3JhbVR5cGUpIHtcclxuICAgIHN3aXRjaCAocHJvZ3JhbVR5cGUpIHtcclxuICAgICAgY2FzZSAwOlxyXG4gICAgICAgIGV2ZW50ID8gdGhpcy5wcm9ncmFtRGF0YS5TZWxlY3RlZE90aGVyc1Byb2dyYW1zQ291bnQrKyA6IHRoaXMucHJvZ3JhbURhdGEuU2VsZWN0ZWRPdGhlcnNQcm9ncmFtc0NvdW50LS07XHJcbiAgICAgICAgYnJlYWs7XHJcbiAgICAgIGNhc2UgMTpcclxuICAgICAgICBldmVudCA/IHRoaXMucHJvZ3JhbURhdGEuU2VsZWN0ZWRSZWd1bGF0aW9uUHJvZ3JhbXNDb3VudCsrIDogdGhpcy5wcm9ncmFtRGF0YS5TZWxlY3RlZFJlZ3VsYXRpb25Qcm9ncmFtc0NvdW50LS07XHJcbiAgICAgICAgYnJlYWs7XHJcbiAgICAgIGNhc2UgMjpcclxuICAgICAgICBldmVudCA/IHRoaXMucHJvZ3JhbURhdGEuU2VsZWN0ZWRTdGFuZGFyZFByb2dyYW1zQ291bnQrKyA6IHRoaXMucHJvZ3JhbURhdGEuU2VsZWN0ZWRTdGFuZGFyZFByb2dyYW1zQ291bnQtLTtcclxuICAgICAgICBicmVhaztcclxuICAgICAgY2FzZSAzOlxyXG4gICAgICAgIGV2ZW50ID8gdGhpcy5wcm9ncmFtRGF0YS5TZWxlY3RlZEludGVybmFsQ29udHJvbHNQcm9ncmFtc0NvdW50KysgOiB0aGlzLnByb2dyYW1EYXRhLlNlbGVjdGVkSW50ZXJuYWxDb250cm9sc1Byb2dyYW1zQ291bnQtLTtcclxuICAgICAgICBicmVhaztcclxuXHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICAvKipcclxuICAgKiBJZiB0aGUgc2VsZWN0ZWRQcm9ncmFtIGFycmF5IGhhcyBhIGxlbmd0aCwgdGhlbiBwcmVzZXJ2ZSB0aGUgZmlyc3QgZWxlbWVudCBvZiB0aGUgYXJyYXkgYXMgdGhlXHJcbiAgICogcHJlc2VydmVQcmltYXJ5UHJvZ3JhbSB2YXJpYWJsZS4gT3RoZXJ3aXNlLCBzZXQgdGhlIHByZXNlcnZlUHJpbWFyeVByb2dyYW0gdmFyaWFibGUgdG8gYW4gZW1wdHlcclxuICAgKiBvYmplY3QuXHJcbiAgICogXHJcbiAgICogSWYgdGhlIHNlbGVjdGVkUHJvZ3JhbXNJZCBhcnJheSBoYXMgYSBsZW5ndGgsIHRoZW4gcHJlc2VydmUgdGhlIGFycmF5IGFzIHRoZSBwcmVzZXJ2ZWRQcm9ncmFtc0lkXHJcbiAgICogdmFyaWFibGUuIE90aGVyd2lzZSwgc2V0IHRoZSBwcmVzZXJ2ZWRQcm9ncmFtc0lkIHZhcmlhYmxlIHRvIGFuIGVtcHR5IGFycmF5LlxyXG4gICAqIFxyXG4gICAqIElmIHRoZSBzZWxlY3RlZFByb2dyYW1zRGV0YWlsIGFycmF5IGhhcyBhIGxlbmd0aCwgdGhlbiBwcmVzZXJ2ZSB0aGUgYXJyYXkgYXMgdGhlXHJcbiAgICogcHJlc2VydmVkU2VsZWN0ZWRQcm9ncmFtcyB2YXJpYWJsZS4gT3RoZXJ3aXNlLCBzZXQgdGhlIHByZXNlcnZlZFNlbGVjdGVkUHJvZ3JhbXMgdmFyaWFibGUgdG8gYW5cclxuICAgKiBlbXB0eSBhcnJheS5cclxuICAgKiBcclxuICAgKiBJZiB0aGUgc2VsZWN0ZWRQcm9ncmFtIGFycmF5IGRvZXMgbm90IGhhdmUgYSBsZW5ndGgsIHRoZW4gc2V0IHRoZSBzZWxlY3RlZFByb2dyYW1zRGV0YWlsIGFycmF5IHRvXHJcbiAgICogYW4gZW1wdHkgYXJyYXkgYW5kIHRoZSBzZWxlY3RlZFByb2dyYW1zSWQgYXJyYXkgdG8gYW4gZW1wdHkgYXJyYXkuXHJcbiAgICovXHJcbiAgcHJlc2VydmVQcmV2aW91c0RldGFpbHMoKSB7XHJcbiAgICBpZih0aGlzLnNlbGVjdGVkUHJvZ3JhbVswXT8ubGVuZ3RoIHx8IHRoaXMuY3VycmVudFByb2dyYW0gKSB7XHJcbiAgICAgIHRoaXMucHJlc2VydmVQcmltYXJ5UHJvZ3JhbSA9IHRoaXMuc2VsZWN0ZWRQcm9ncmFtPy5sZW5ndGggPyBKU09OLnN0cmluZ2lmeSh0aGlzLnNlbGVjdGVkUHJvZ3JhbVswXSkgOiB7fTsgXHJcbiAgICAgIHRoaXMucHJlc2VydmVkUHJvZ3JhbXNJZCA9IHRoaXMuc2VsZWN0ZWRQcm9ncmFtc0lkPy5sZW5ndGggPyBKU09OLnN0cmluZ2lmeSh0aGlzLnNlbGVjdGVkUHJvZ3JhbXNJZCkgOiBbXTtcclxuICAgICAgdGhpcy5wcmVzZXJ2ZWRTZWxlY3RlZFByb2dyYW1zID0gdGhpcy5zZWxlY3RlZFByb2dyYW1zRGV0YWlsID8gSlNPTi5zdHJpbmdpZnkodGhpcy5zZWxlY3RlZFByb2dyYW1zRGV0YWlsKSA6IFtdO1xyXG4gICAgfSBlbHNlIHtcclxuICAgICAgdGhpcy5zZWxlY3RlZFByb2dyYW1zRGV0YWlsID0gW107XHJcbiAgICAgIHRoaXMuc2VsZWN0ZWRQcm9ncmFtc0lkID0gW107XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICBwcm9ncmFtU3ViVGFiOiAnUFJPR1JBTVMnIHwgJ09USEVSX1BST0dSQU1TJyA9ICdQUk9HUkFNUyc7XHJcbiAgc2V0UHJvZ3JhbVN1YlRhYih0YWI6ICdQUk9HUkFNUycgfCAnT1RIRVJfUFJPR1JBTVMnKSB7XHJcbiAgICB0aGlzLnByb2dyYW1TdWJUYWIgPSB0YWI7XHJcbiAgICB0aGlzLmdldFByb2dyYW1zTGlzdCgpO1xyXG4gIH1cclxufVxyXG4iXX0=
|