cloud-ide-core 1.0.1 → 1.0.4
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/README.md +49 -10
- package/fesm2022/{cloud-ide-core-general-master-type.component-B26auJZw.mjs → cloud-ide-core-general-master-type.component-OPaXxAXW.mjs} +133 -135
- package/fesm2022/{cloud-ide-core-general-master-type.component-B26auJZw.mjs.map → cloud-ide-core-general-master-type.component-OPaXxAXW.mjs.map} +1 -1
- package/fesm2022/{cloud-ide-core-general-master-type.service-Ab64Jjps.mjs → cloud-ide-core-general-master-type.service-8JWTVijZ.mjs} +7 -7
- package/fesm2022/{cloud-ide-core-general-master-type.service-Ab64Jjps.mjs.map → cloud-ide-core-general-master-type.service-8JWTVijZ.mjs.map} +1 -1
- package/fesm2022/{cloud-ide-core-general-master.component-B6llTVoV.mjs → cloud-ide-core-general-master.component-BEHWqXvF.mjs} +153 -155
- package/fesm2022/{cloud-ide-core-general-master.component-B6llTVoV.mjs.map → cloud-ide-core-general-master.component-BEHWqXvF.mjs.map} +1 -1
- package/fesm2022/{cloud-ide-core-page-form.component-CaEca3mB.mjs → cloud-ide-core-page-form.component-BatglsBU.mjs} +26 -26
- package/fesm2022/{cloud-ide-core-page-form.component-CaEca3mB.mjs.map → cloud-ide-core-page-form.component-BatglsBU.mjs.map} +1 -1
- package/fesm2022/cloud-ide-core.mjs +5089 -1116
- package/fesm2022/cloud-ide-core.mjs.map +1 -1
- package/index.d.ts +2111 -3
- package/package.json +3 -5
- package/esm2022/cloud-ide-core.mjs +0 -5
- package/esm2022/lib/cloud-ide-core.component.mjs +0 -19
- package/esm2022/lib/cloud-ide-core.routes.mjs +0 -137
- package/esm2022/lib/cloud-ide-core.service.mjs +0 -14
- package/esm2022/lib/core/department-management/components/department-list/department-list.component.mjs +0 -768
- package/esm2022/lib/core/department-management/index.mjs +0 -5
- package/esm2022/lib/core/department-management/services/department-management.service.mjs +0 -187
- package/esm2022/lib/core/designation-management/components/designation-list/designation-list.component.mjs +0 -1122
- package/esm2022/lib/core/designation-management/index.mjs +0 -5
- package/esm2022/lib/core/designation-management/services/designation-management.service.mjs +0 -194
- package/esm2022/lib/core/general-master-management/components/general-master/general-master.component.mjs +0 -738
- package/esm2022/lib/core/general-master-management/components/general-master-type/general-master-type.component.mjs +0 -608
- package/esm2022/lib/core/general-master-management/services/general-master-type.service.mjs +0 -203
- package/esm2022/lib/core/general-master-management/services/general-master.service.mjs +0 -166
- package/esm2022/lib/core/grade-level-management/components/grade-level-list/grade-level-list.component.mjs +0 -794
- package/esm2022/lib/core/grade-level-management/index.mjs +0 -5
- package/esm2022/lib/core/grade-level-management/services/grade-level-management.service.mjs +0 -172
- package/esm2022/lib/core/menu-management/components/menu-list/menu-list.component.mjs +0 -1135
- package/esm2022/lib/core/menu-management/index.mjs +0 -10
- package/esm2022/lib/core/menu-management/interfaces/menu-item.interface.mjs +0 -11
- package/esm2022/lib/core/menu-management/mock-data/menu-items.json +0 -311
- package/esm2022/lib/core/menu-management/services/menu-management.service.mjs +0 -230
- package/esm2022/lib/core/page-management/components/page-controls/page-controls.component.mjs +0 -483
- package/esm2022/lib/core/page-management/components/page-form/page-form.component.mjs +0 -212
- package/esm2022/lib/core/page-management/components/page-list/page-list.component.mjs +0 -393
- package/esm2022/lib/core/page-management/components/page-theme/page-theme.component.mjs +0 -767
- package/esm2022/lib/core/page-management/index.mjs +0 -10
- package/esm2022/lib/core/page-management/services/page-controls.service.mjs +0 -136
- package/esm2022/lib/core/page-management/services/page-management.service.mjs +0 -98
- package/esm2022/lib/core/page-management/services/page-theme.service.mjs +0 -107
- package/esm2022/public-api.mjs +0 -17
- package/lib/cloud-ide-core.component.d.ts +0 -5
- package/lib/cloud-ide-core.routes.d.ts +0 -2
- package/lib/cloud-ide-core.service.d.ts +0 -6
- package/lib/core/department-management/components/department-list/department-list.component.d.ts +0 -178
- package/lib/core/department-management/index.d.ts +0 -2
- package/lib/core/department-management/services/department-management.service.d.ts +0 -68
- package/lib/core/designation-management/components/designation-list/designation-list.component.d.ts +0 -242
- package/lib/core/designation-management/index.d.ts +0 -2
- package/lib/core/designation-management/services/designation-management.service.d.ts +0 -69
- package/lib/core/general-master-management/components/general-master/general-master.component.d.ts +0 -167
- package/lib/core/general-master-management/components/general-master-type/general-master-type.component.d.ts +0 -129
- package/lib/core/general-master-management/services/general-master-type.service.d.ts +0 -75
- package/lib/core/general-master-management/services/general-master.service.d.ts +0 -62
- package/lib/core/grade-level-management/components/grade-level-list/grade-level-list.component.d.ts +0 -199
- package/lib/core/grade-level-management/index.d.ts +0 -2
- package/lib/core/grade-level-management/services/grade-level-management.service.d.ts +0 -69
- package/lib/core/menu-management/components/menu-list/menu-list.component.d.ts +0 -278
- package/lib/core/menu-management/index.d.ts +0 -3
- package/lib/core/menu-management/interfaces/menu-item.interface.d.ts +0 -30
- package/lib/core/menu-management/services/menu-management.service.d.ts +0 -85
- package/lib/core/page-management/components/page-controls/page-controls.component.d.ts +0 -126
- package/lib/core/page-management/components/page-form/page-form.component.d.ts +0 -35
- package/lib/core/page-management/components/page-list/page-list.component.d.ts +0 -91
- package/lib/core/page-management/components/page-theme/page-theme.component.d.ts +0 -189
- package/lib/core/page-management/index.d.ts +0 -6
- package/lib/core/page-management/services/page-controls.service.d.ts +0 -54
- package/lib/core/page-management/services/page-management.service.d.ts +0 -42
- package/lib/core/page-management/services/page-theme.service.d.ts +0 -43
- package/public-api.d.ts +0 -8
|
@@ -1,5 +0,0 @@
|
|
|
1
|
-
// Designation Management Components
|
|
2
|
-
export * from './components/designation-list/designation-list.component';
|
|
3
|
-
// Designation Management Services
|
|
4
|
-
export * from './services/designation-management.service';
|
|
5
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaW5kZXguanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy9jbG91ZC1pZGUtY29yZS9zcmMvbGliL2NvcmUvZGVzaWduYXRpb24tbWFuYWdlbWVudC9pbmRleC50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxvQ0FBb0M7QUFDcEMsY0FBYywwREFBMEQsQ0FBQztBQUV6RSxrQ0FBa0M7QUFDbEMsY0FBYywyQ0FBMkMsQ0FBQyIsInNvdXJjZXNDb250ZW50IjpbIi8vIERlc2lnbmF0aW9uIE1hbmFnZW1lbnQgQ29tcG9uZW50c1xyXG5leHBvcnQgKiBmcm9tICcuL2NvbXBvbmVudHMvZGVzaWduYXRpb24tbGlzdC9kZXNpZ25hdGlvbi1saXN0LmNvbXBvbmVudCc7XHJcblxyXG4vLyBEZXNpZ25hdGlvbiBNYW5hZ2VtZW50IFNlcnZpY2VzXHJcbmV4cG9ydCAqIGZyb20gJy4vc2VydmljZXMvZGVzaWduYXRpb24tbWFuYWdlbWVudC5zZXJ2aWNlJzsgIl19
|
|
@@ -1,194 +0,0 @@
|
|
|
1
|
-
import { Injectable } from '@angular/core';
|
|
2
|
-
import { throwError, BehaviorSubject } from 'rxjs';
|
|
3
|
-
import { catchError, tap } from 'rxjs/operators';
|
|
4
|
-
import { cidePath, coreRoutesUrl, generateStringFromObject, hostManagerRoutesUrl, MDesignationInsertUpdatePayload, } from 'cloud-ide-lms-model';
|
|
5
|
-
import * as i0 from "@angular/core";
|
|
6
|
-
import * as i1 from "@angular/common/http";
|
|
7
|
-
export class DesignationManagementService {
|
|
8
|
-
constructor(http) {
|
|
9
|
-
this.http = http;
|
|
10
|
-
this.apiUrl = `${coreRoutesUrl?.designation}`;
|
|
11
|
-
this.designationListSubject = new BehaviorSubject([]);
|
|
12
|
-
this.designationList$ = this.designationListSubject.asObservable();
|
|
13
|
-
console.log('DesignationManagementService initialized - using real API');
|
|
14
|
-
}
|
|
15
|
-
/**
|
|
16
|
-
* Get designation list from API
|
|
17
|
-
*/
|
|
18
|
-
getDesignationList(body) {
|
|
19
|
-
const query = generateStringFromObject(body);
|
|
20
|
-
return this.http?.get(cidePath?.join([hostManagerRoutesUrl?.cideSuiteHost, coreRoutesUrl?.module, coreRoutesUrl?.designation, query]))
|
|
21
|
-
.pipe(tap((response) => {
|
|
22
|
-
if (response?.success) {
|
|
23
|
-
this.designationListSubject.next(response?.data || []);
|
|
24
|
-
}
|
|
25
|
-
}), catchError(error => {
|
|
26
|
-
console.error('DesignationManagementService API error:', error);
|
|
27
|
-
return this.handleError(error);
|
|
28
|
-
}));
|
|
29
|
-
}
|
|
30
|
-
/**
|
|
31
|
-
* Get designation list from cache (if available)
|
|
32
|
-
*/
|
|
33
|
-
getDesignationListFromCache() {
|
|
34
|
-
return this.designationListSubject.value;
|
|
35
|
-
}
|
|
36
|
-
/**
|
|
37
|
-
* Create new designation
|
|
38
|
-
* POST ${coreRoutesUrl?.designation} - payload: MDesignationInsertUpdatePayload, response: designationInsertUpdateControllerResponse
|
|
39
|
-
*/
|
|
40
|
-
createDesignation(designation) {
|
|
41
|
-
console.log('Creating designation:', designation);
|
|
42
|
-
// Create proper payload using MDesignationInsertUpdatePayload
|
|
43
|
-
const payload = new MDesignationInsertUpdatePayload(designation);
|
|
44
|
-
const url = cidePath?.join([hostManagerRoutesUrl?.cideSuiteHost, coreRoutesUrl?.module, coreRoutesUrl?.designation]);
|
|
45
|
-
return this.http.post(url, payload)
|
|
46
|
-
.pipe(tap((response) => {
|
|
47
|
-
if (response.success) {
|
|
48
|
-
this.refreshDesignationList();
|
|
49
|
-
}
|
|
50
|
-
}), catchError(this.handleError));
|
|
51
|
-
}
|
|
52
|
-
/**
|
|
53
|
-
* Update existing designation
|
|
54
|
-
* POST ${coreRoutesUrl?.designation} - payload: MDesignationInsertUpdatePayload, response: designationInsertUpdateControllerResponse
|
|
55
|
-
*/
|
|
56
|
-
updateDesignation(id, designation) {
|
|
57
|
-
console.log('Updating designation:', id, designation);
|
|
58
|
-
// Create proper payload using MDesignationInsertUpdatePayload
|
|
59
|
-
const payload = new MDesignationInsertUpdatePayload(designation);
|
|
60
|
-
const url = cidePath?.join([hostManagerRoutesUrl?.cideSuiteHost, coreRoutesUrl?.module, coreRoutesUrl?.designation]);
|
|
61
|
-
return this.http.post(url, payload)
|
|
62
|
-
.pipe(tap((response) => {
|
|
63
|
-
if (response.success) {
|
|
64
|
-
this.refreshDesignationList();
|
|
65
|
-
}
|
|
66
|
-
}), catchError(this.handleError));
|
|
67
|
-
}
|
|
68
|
-
/**
|
|
69
|
-
* Get designation by ID
|
|
70
|
-
* GET ${coreRoutesUrl?.designation}/byId/:query - payload: MDesignationGetByIdPayload, response: designationByIdControllerResponse
|
|
71
|
-
*/
|
|
72
|
-
getDesignationById(id) {
|
|
73
|
-
console.log('Getting designation by ID:', id);
|
|
74
|
-
const payload = { sydsg_id: id };
|
|
75
|
-
const query = generateStringFromObject(payload);
|
|
76
|
-
const url = cidePath?.join([hostManagerRoutesUrl?.cideSuiteHost, coreRoutesUrl?.module, coreRoutesUrl?.designation, 'byId', query]);
|
|
77
|
-
return this.http.get(url)
|
|
78
|
-
.pipe(catchError(this.handleError));
|
|
79
|
-
}
|
|
80
|
-
/**
|
|
81
|
-
* Delete designation
|
|
82
|
-
* DELETE ${coreRoutesUrl?.designation}/:query - payload: MDesignationDeletePayload, response: designationDeleteControllerResponse
|
|
83
|
-
*/
|
|
84
|
-
deleteDesignation(id) {
|
|
85
|
-
const payload = { sydsg_id: id };
|
|
86
|
-
const query = generateStringFromObject(payload);
|
|
87
|
-
const url = cidePath?.join([hostManagerRoutesUrl?.cideSuiteHost, coreRoutesUrl?.module, coreRoutesUrl?.designation, query]);
|
|
88
|
-
return this.http.delete(url)
|
|
89
|
-
.pipe(tap((response) => {
|
|
90
|
-
if (response.success) {
|
|
91
|
-
this.refreshDesignationList();
|
|
92
|
-
}
|
|
93
|
-
}), catchError(this.handleError));
|
|
94
|
-
}
|
|
95
|
-
/**
|
|
96
|
-
* Delete multiple designations
|
|
97
|
-
*/
|
|
98
|
-
deleteMultipleDesignations(ids) {
|
|
99
|
-
console.log('Deleting multiple designations:', ids);
|
|
100
|
-
const payload = { ids };
|
|
101
|
-
const query = generateStringFromObject(payload);
|
|
102
|
-
const url = cidePath?.join([hostManagerRoutesUrl?.cideSuiteHost, coreRoutesUrl?.module, coreRoutesUrl?.designation, query]);
|
|
103
|
-
return this.http.delete(url)
|
|
104
|
-
.pipe(tap((response) => {
|
|
105
|
-
if (response.success) {
|
|
106
|
-
this.refreshDesignationList();
|
|
107
|
-
}
|
|
108
|
-
}), catchError(this.handleError));
|
|
109
|
-
}
|
|
110
|
-
/**
|
|
111
|
-
* Toggle designation active status
|
|
112
|
-
*/
|
|
113
|
-
toggleDesignationStatus(id) {
|
|
114
|
-
console.log('Toggling designation status:', id);
|
|
115
|
-
const payload = { id };
|
|
116
|
-
const query = generateStringFromObject(payload);
|
|
117
|
-
const url = cidePath?.join([hostManagerRoutesUrl?.cideSuiteHost, coreRoutesUrl?.module, coreRoutesUrl?.designation, query]);
|
|
118
|
-
return this.http.put(url, {})
|
|
119
|
-
.pipe(tap((response) => {
|
|
120
|
-
if (response.success) {
|
|
121
|
-
this.refreshDesignationList();
|
|
122
|
-
}
|
|
123
|
-
}), catchError(this.handleError));
|
|
124
|
-
}
|
|
125
|
-
/**
|
|
126
|
-
* Find designation by ID
|
|
127
|
-
*/
|
|
128
|
-
findDesignationById(id, items = this.designationListSubject.value) {
|
|
129
|
-
for (const item of items) {
|
|
130
|
-
if (item._id === id) {
|
|
131
|
-
return item;
|
|
132
|
-
}
|
|
133
|
-
}
|
|
134
|
-
return null;
|
|
135
|
-
}
|
|
136
|
-
/**
|
|
137
|
-
* Get parent designations for dropdown selection
|
|
138
|
-
*/
|
|
139
|
-
getParentDesignations(excludeId) {
|
|
140
|
-
const allItems = [];
|
|
141
|
-
const flattenItems = (items, level = 0) => {
|
|
142
|
-
items.forEach(item => {
|
|
143
|
-
if (item._id !== excludeId) {
|
|
144
|
-
allItems.push({
|
|
145
|
-
...item,
|
|
146
|
-
sydsg_name: ' '.repeat(level) + item.sydsg_name
|
|
147
|
-
});
|
|
148
|
-
}
|
|
149
|
-
});
|
|
150
|
-
};
|
|
151
|
-
flattenItems(this.designationListSubject.value);
|
|
152
|
-
return allItems;
|
|
153
|
-
}
|
|
154
|
-
/**
|
|
155
|
-
* Refresh designation list from server
|
|
156
|
-
*/
|
|
157
|
-
refreshDesignationList() {
|
|
158
|
-
const defaultBody = {
|
|
159
|
-
pageIndex: 1,
|
|
160
|
-
pageSize: 10
|
|
161
|
-
};
|
|
162
|
-
this.getDesignationList(defaultBody).subscribe({
|
|
163
|
-
next: () => {
|
|
164
|
-
console.log('Designation list refreshed successfully');
|
|
165
|
-
},
|
|
166
|
-
error: (error) => {
|
|
167
|
-
console.error('Error refreshing designation list:', error);
|
|
168
|
-
}
|
|
169
|
-
});
|
|
170
|
-
}
|
|
171
|
-
/**
|
|
172
|
-
* Handle errors
|
|
173
|
-
*/
|
|
174
|
-
handleError(error) {
|
|
175
|
-
let errorMessage = 'An error occurred';
|
|
176
|
-
if (error instanceof Error) {
|
|
177
|
-
errorMessage = error.message;
|
|
178
|
-
}
|
|
179
|
-
else if (typeof error === 'string') {
|
|
180
|
-
errorMessage = error;
|
|
181
|
-
}
|
|
182
|
-
console.error('Designation Management Service Error:', errorMessage);
|
|
183
|
-
return throwError(() => new Error(errorMessage));
|
|
184
|
-
}
|
|
185
|
-
static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.2.7", ngImport: i0, type: DesignationManagementService, deps: [{ token: i1.HttpClient }], target: i0.ɵɵFactoryTarget.Injectable }); }
|
|
186
|
-
static { this.ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "18.2.7", ngImport: i0, type: DesignationManagementService, providedIn: 'root' }); }
|
|
187
|
-
}
|
|
188
|
-
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.7", ngImport: i0, type: DesignationManagementService, decorators: [{
|
|
189
|
-
type: Injectable,
|
|
190
|
-
args: [{
|
|
191
|
-
providedIn: 'root'
|
|
192
|
-
}]
|
|
193
|
-
}], ctorParameters: () => [{ type: i1.HttpClient }] });
|
|
194
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZGVzaWduYXRpb24tbWFuYWdlbWVudC5zZXJ2aWNlLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvY2xvdWQtaWRlLWNvcmUvc3JjL2xpYi9jb3JlL2Rlc2lnbmF0aW9uLW1hbmFnZW1lbnQvc2VydmljZXMvZGVzaWduYXRpb24tbWFuYWdlbWVudC5zZXJ2aWNlLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFBRSxVQUFVLEVBQUUsTUFBTSxlQUFlLENBQUM7QUFFM0MsT0FBTyxFQUFjLFVBQVUsRUFBRSxlQUFlLEVBQUUsTUFBTSxNQUFNLENBQUM7QUFDL0QsT0FBTyxFQUFFLFVBQVUsRUFBRSxHQUFHLEVBQUUsTUFBTSxnQkFBZ0IsQ0FBQztBQUNqRCxPQUFPLEVBQ0wsUUFBUSxFQUNSLGFBQWEsRUFDYix3QkFBd0IsRUFDeEIsb0JBQW9CLEVBSXBCLCtCQUErQixHQU1oQyxNQUFNLHFCQUFxQixDQUFDOzs7QUFLN0IsTUFBTSxPQUFPLDRCQUE0QjtJQUt2QyxZQUFvQixJQUFnQjtRQUFoQixTQUFJLEdBQUosSUFBSSxDQUFZO1FBSjVCLFdBQU0sR0FBRyxHQUFHLGFBQWEsRUFBRSxXQUFXLEVBQUUsQ0FBQztRQUN6QywyQkFBc0IsR0FBRyxJQUFJLGVBQWUsQ0FBZSxFQUFFLENBQUMsQ0FBQztRQUNoRSxxQkFBZ0IsR0FBRyxJQUFJLENBQUMsc0JBQXNCLENBQUMsWUFBWSxFQUFFLENBQUM7UUFHbkUsT0FBTyxDQUFDLEdBQUcsQ0FBQywyREFBMkQsQ0FBQyxDQUFDO0lBQzNFLENBQUM7SUFFRDs7T0FFRztJQUNILGtCQUFrQixDQUFDLElBQWtCO1FBQ25DLE1BQU0sS0FBSyxHQUFHLHdCQUF3QixDQUFDLElBQUksQ0FBQyxDQUFDO1FBQzdDLE9BQU8sSUFBSSxDQUFDLElBQUksRUFBRSxHQUFHLENBQWdDLFFBQVEsRUFBRSxJQUFJLENBQUMsQ0FBQyxvQkFBb0IsRUFB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QUM7WUFDN0MsSUFBSSxFQUFFLEdBQUcsRUFBRTtnQkFDVCxPQUFPLENBQUMsR0FBRyxDQUFDLHlDQUF5QyxDQUFDLENBQUM7WUFDekQsQ0FBQztZQUNELEtBQUssRUFBRSxDQUFDLEtBQUssRUFBRSxFQUFFO2dCQUNmLE9BQU8sQ0FBQyxLQUFLLENBQUMsb0NBQW9DLEVBQUUsS0FBSyxDQUFDLENBQUM7WUFDN0QsQ0FBQztTQUNGLENBQUMsQ0FBQztJQUNMLENBQUM7SUFFRDs7T0FFRztJQUNLLFdBQVcsQ0FBQyxLQUFjO1FBQ2hDLElBQUksWUFBWSxHQUFHLG1CQUFtQixDQUFDO1FBRXZDLElBQUksS0FBSyxZQUFZLEtBQUssRUFBRSxDQUFDO1lBQzNCLFlBQVksR0FBRyxLQUFLLENBQUMsT0FBTyxDQUFDO1FBQy9CLENBQUM7YUFBTSxJQUFJLE9BQU8sS0FBSyxLQUFLLFFBQVEsRUFBRSxDQUFDO1lBQ3JDLFlBQVksR0FBRyxLQUFLLENBQUM7UUFDdkIsQ0FBQztRQUVELE9BQU8sQ0FBQyxLQUFLLENBQUMsdUNBQXVDLEVBQUUsWUFBWSxDQUFDLENBQUM7UUFDckUsT0FBTyxVQUFVLENBQUMsR0FBRyxFQUFFLENBQUMsSUFBSSxLQUFLLENBQUMsWUFBWSxDQUFDLENBQUMsQ0FBQztJQUNuRCxDQUFDOzhHQXhOVSw0QkFBNEI7a0hBQTVCLDRCQUE0QixjQUYzQixNQUFNOzsyRkFFUCw0QkFBNEI7a0JBSHhDLFVBQVU7bUJBQUM7b0JBQ1YsVUFBVSxFQUFFLE1BQU07aUJBQ25CIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgSW5qZWN0YWJsZSB9IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xuaW1wb3J0IHsgSHR0cENsaWVudCB9IGZyb20gJ0Bhbmd1bGFyL2NvbW1vbi9odHRwJztcbmltcG9ydCB7IE9ic2VydmFibGUsIHRocm93RXJyb3IsIEJlaGF2aW9yU3ViamVjdCB9IGZyb20gJ3J4anMnO1xuaW1wb3J0IHsgY2F0Y2hFcnJvciwgdGFwIH0gZnJvbSAncnhqcy9vcGVyYXRvcnMnO1xuaW1wb3J0IHsgXG4gIGNpZGVQYXRoLCBcbiAgY29yZVJvdXRlc1VybCwgXG4gIGdlbmVyYXRlU3RyaW5nRnJvbU9iamVjdCwgXG4gIGhvc3RNYW5hZ2VyUm91dGVzVXJsLCBcbiAgSUNvcmVTeWRzZywgXG4gIE1EZXNpZ25hdGlvbkRlbGV0ZVBheWxvYWQsIFxuICBNRGVzaWduYXRpb25HZXRCeUlkUGF5bG9hZCwgXG4gIE1EZXNpZ25hdGlvbkluc2VydFVwZGF0ZVBheWxvYWQsXG4gIGRlc2lnbmF0aW9uQnlJZENvbnRyb2xsZXJSZXNwb25zZSwgXG4gIGRlc2lnbmF0aW9uRGVsZXRlQ29udHJvbGxlclJlc3BvbnNlLCBcbiAgZGVzaWduYXRpb25Db250cm9sbGVyUmVzcG9uc2UsXG4gIGRlc2lnbmF0aW9uSW5zZXJ0VXBkYXRlQ29udHJvbGxlclJlc3BvbnNlLFxuICBNRGVzaWduYXRpb24sXG59IGZyb20gJ2Nsb3VkLWlkZS1sbXMtbW9kZWwnO1xuXG5ASW5qZWN0YWJsZSh7XG4gIHByb3ZpZGVkSW46ICdyb290J1xufSlcbmV4cG9ydCBjbGFzcyBEZXNpZ25hdGlvbk1hbmFnZW1lbnRTZXJ2aWNlIHtcbiAgcHJpdmF0ZSBhcGlVcmwgPSBgJHtjb3JlUm91dGVzVXJsPy5kZXNpZ25hdGlvbn1gO1xuICBwcml2YXRlIGRlc2lnbmF0aW9uTGlzdFN1YmplY3QgPSBuZXcgQmVoYXZpb3JTdWJqZWN0PElDb3JlU3lkc2dbXT4oW10pO1xuICBwdWJsaWMgZGVzaWduYXRpb25MaXN0JCA9IHRoaXMuZGVzaWduYXRpb25MaXN0U3ViamVjdC5hc09ic2VydmFibGUoKTtcblxuICBjb25zdHJ1Y3Rvcihwcml2YXRlIGh0dHA6IEh0dHBDbGllbnQpIHtcbiAgICBjb25zb2xlLmxvZygnRGVzaWduYXRpb25NYW5hZ2VtZW50U2VydmljZSBpbml0aWFsaXplZCAtIHVzaW5nIHJlYWwgQVBJJyk7XG4gIH1cblxuICAvKipcbiAgICogR2V0IGRlc2lnbmF0aW9uIGxpc3QgZnJvbSBBUElcbiAgICovXG4gIGdldERlc2lnbmF0aW9uTGlzdChib2R5OiBNRGVzaWduYXRpb24pOiBPYnNlcnZhYmxlPGRlc2lnbmF0aW9uQ29udHJvbGxlclJlc3BvbnNlPiB7XG4gICAgY29uc3QgcXVlcnkgPSBnZW5lcmF0ZVN0cmluZ0Zyb21PYmplY3QoYm9keSk7XG4gICAgcmV0dXJuIHRoaXMuaHR0cD8uZ2V0PGRlc2lnbmF0aW9uQ29udHJvbGxlclJlc3BvbnNlPihjaWRlUGF0aD8uam9pbihbaG9zdE1hbmFnZXJSb3V0ZXNVcmw/LmNpZGVTdWl0ZUhvc3QsIGNvcmVSb3V0ZXNVcmw/Lm1vZHVsZSwgY29yZVJvdXRlc1VybD8uZGVzaWduYXRpb24sIHF1ZXJ5XSkpXG4gICAgICAucGlwZShcbiAgICAgICAgdGFwKChyZXNwb25zZTogZGVzaWduYXRpb25Db250cm9sbGVyUmVzcG9uc2UpID0+IHtcbiAgICAgICAgICBpZiAocmVzcG9uc2U/LnN1Y2Nlc3MpIHtcbiAgICAgICAgICAgIHRoaXMuZGVzaWduYXRpb25MaXN0U3ViamVjdC5uZXh0KHJlc3BvbnNlPy5kYXRhIHx8IFtdKTtcbiAgICAgICAgICB9XG4gICAgICAgIH0pLFxuICAgICAgICBjYXRjaEVycm9yKGVycm9yID0+IHtcbiAgICAgICAgICBjb25zb2xlLmVycm9yKCdEZXNpZ25hdGlvbk1hbmFnZW1lbnRTZXJ2aWNlIEFQSSBlcnJvcjonLCBlcnJvcik7XG4gICAgICAgICAgcmV0dXJuIHRoaXMuaGFuZGxlRXJyb3IoZXJyb3IpO1xuICAgICAgICB9KVxuICAgICAgKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBHZXQgZGVzaWduYXRpb24gbGlzdCBmcm9tIGNhY2hlIChpZiBhdmFpbGFibGUpXG4gICAqL1xuICBnZXREZXNpZ25hdGlvbkxpc3RGcm9tQ2FjaGUoKTogSUNvcmVTeWRzZ1tdIHtcbiAgICByZXR1cm4gdGhpcy5kZXNpZ25hdGlvbkxpc3RTdWJqZWN0LnZhbHVlO1xuICB9XG5cbiAgLyoqXG4gICAqIENyZWF0ZSBuZXcgZGVzaWduYXRpb25cbiAgICogUE9TVCAke2NvcmVSb3V0ZXNVcmw/LmRlc2lnbmF0aW9ufSAtIHBheWxvYWQ6IE1EZXNpZ25hdGlvbkluc2VydFVwZGF0ZVBheWxvYWQsIHJlc3BvbnNlOiBkZXNpZ25hdGlvbkluc2VydFVwZGF0ZUNvbnRyb2xsZXJSZXNwb25zZVxuICAgKi9cbiAgY3JlYXRlRGVzaWduYXRpb24oZGVzaWduYXRpb246IElDb3JlU3lkc2cpOiBPYnNlcnZhYmxlPGRlc2lnbmF0aW9uSW5zZXJ0VXBkYXRlQ29udHJvbGxlclJlc3BvbnNlPiB7XG4gICAgY29uc29sZS5sb2coJ0NyZWF0aW5nIGRlc2lnbmF0aW9uOicsIGRlc2lnbmF0aW9uKTtcbiAgICBcbiAgICAvLyBDcmVhdGUgcHJvcGVyIHBheWxvYWQgdXNpbmcgTURlc2lnbmF0aW9uSW5zZXJ0VXBkYXRlUGF5bG9hZFxuICAgIGNvbnN0IHBheWxvYWQgPSBuZXcgTURlc2lnbmF0aW9uSW5zZXJ0VXBkYXRlUGF5bG9hZChkZXNpZ25hdGlvbik7XG4gICAgXG4gICAgY29uc3QgdXJsID0gY2lkZVBhdGg/LmpvaW4oW2hvc3RNYW5hZ2VyUm91dGVzVXJsPy5jaWRlU3VpdGVIb3N0LCBjb3JlUm91dGVzVXJsPy5tb2R1bGUsIGNvcmVSb3V0ZXNVcmw/LmRlc2lnbmF0aW9uXSk7XG4gICAgcmV0dXJuIHRoaXMuaHR0cC5wb3N0PGRlc2lnbmF0aW9uSW5zZXJ0VXBkYXRlQ29udHJvbGxlclJlc3BvbnNlPih1cmwsIHBheWxvYWQpXG4gICAgICAucGlwZShcbiAgICAgICAgdGFwKChyZXNwb25zZTogZGVzaWduYXRpb25JbnNlcnRVcGRhdGVDb250cm9sbGVyUmVzcG9uc2UpID0+IHtcbiAgICAgICAgICBpZiAocmVzcG9uc2Uuc3VjY2Vzcykge1xuICAgICAgICAgICAgdGhpcy5yZWZyZXNoRGVzaWduYXRpb25MaXN0KCk7XG4gICAgICAgICAgfVxuICAgICAgICB9KSxcbiAgICAgICAgY2F0Y2hFcnJvcih0aGlzLmhhbmRsZUVycm9yKVxuICAgICAgKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBVcGRhdGUgZXhpc3RpbmcgZGVzaWduYXRpb25cbiAgICogUE9TVCAke2NvcmVSb3V0ZXNVcmw/LmRlc2lnbmF0aW9ufSAtIHBheWxvYWQ6IE1EZXNpZ25hdGlvbkluc2VydFVwZGF0ZVBheWxvYWQsIHJlc3BvbnNlOiBkZXNpZ25hdGlvbkluc2VydFVwZGF0ZUNvbnRyb2xsZXJSZXNwb25zZVxuICAgKi9cbiAgdXBkYXRlRGVzaWduYXRpb24oaWQ6IHN0cmluZywgZGVzaWduYXRpb246IElDb3JlU3lkc2cpOiBPYnNlcnZhYmxlPGRlc2lnbmF0aW9uSW5zZXJ0VXBkYXRlQ29udHJvbGxlclJlc3BvbnNlPiB7XG4gICAgY29uc29sZS5sb2coJ1VwZGF0aW5nIGRlc2lnbmF0aW9uOicsIGlkLCBkZXNpZ25hdGlvbik7XG4gICAgXG4gICAgLy8gQ3JlYXRlIHByb3BlciBwYXlsb2FkIHVzaW5nIE1EZXNpZ25hdGlvbkluc2VydFVwZGF0ZVBheWxvYWRcbiAgICBjb25zdCBwYXlsb2FkID0gbmV3IE1EZXNpZ25hdGlvbkluc2VydFVwZGF0ZVBheWxvYWQoZGVzaWduYXRpb24pO1xuICAgIFxuICAgIGNvbnN0IHVybCA9IGNpZGVQYXRoPy5qb2luKFtob3N0TWFuYWdlclJvdXRlc1VybD8uY2lkZVN1aXRlSG9zdCwgY29yZVJvdXRlc1VybD8ubW9kdWxlLCBjb3JlUm91dGVzVXJsPy5kZXNpZ25hdGlvbl0pO1xuICAgIHJldHVybiB0aGlzLmh0dHAucG9zdDxkZXNpZ25hdGlvbkluc2VydFVwZGF0ZUNvbnRyb2xsZXJSZXNwb25zZT4odXJsLCBwYXlsb2FkKVxuICAgICAgLnBpcGUoXG4gICAgICAgIHRhcCgocmVzcG9uc2U6IGRlc2lnbmF0aW9uSW5zZXJ0VXBkYXRlQ29udHJvbGxlclJlc3BvbnNlKSA9PiB7XG4gICAgICAgICAgaWYgKHJlc3BvbnNlLnN1Y2Nlc3MpIHtcbiAgICAgICAgICAgIHRoaXMucmVmcmVzaERlc2lnbmF0aW9uTGlzdCgpO1xuICAgICAgICAgIH1cbiAgICAgICAgfSksXG4gICAgICAgIGNhdGNoRXJyb3IodGhpcy5oYW5kbGVFcnJvcilcbiAgICAgICk7XG4gIH1cblxuICAvKipcbiAgICogR2V0IGRlc2lnbmF0aW9uIGJ5IElEXG4gICAqIEdFVCAke2NvcmVSb3V0ZXNVcmw/LmRlc2lnbmF0aW9ufS9ieUlkLzpxdWVyeSAtIHBheWxvYWQ6IE1EZXNpZ25hdGlvbkdldEJ5SWRQYXlsb2FkLCByZXNwb25zZTogZGVzaWduYXRpb25CeUlkQ29udHJvbGxlclJlc3BvbnNlXG4gICAqL1xuICBnZXREZXNpZ25hdGlvbkJ5SWQoaWQ6IHN0cmluZyk6IE9ic2VydmFibGU8ZGVzaWduYXRpb25CeUlkQ29udHJvbGxlclJlc3BvbnNlPiB7XG4gICAgY29uc29sZS5sb2coJ0dldHRpbmcgZGVzaWduYXRpb24gYnkgSUQ6JywgaWQpO1xuICAgIGNvbnN0IHBheWxvYWQ6IE1EZXNpZ25hdGlvbkdldEJ5SWRQYXlsb2FkID0geyBzeWRzZ19pZDogaWQgfTtcbiAgICBjb25zdCBxdWVyeSA9IGdlbmVyYXRlU3RyaW5nRnJvbU9iamVjdChwYXlsb2FkKTtcbiAgICBjb25zdCB1cmwgPSBjaWRlUGF0aD8uam9pbihbaG9zdE1hbmFnZXJSb3V0ZXNVcmw/LmNpZGVTdWl0ZUhvc3QsIGNvcmVSb3V0ZXNVcmw/Lm1vZHVsZSwgY29yZVJvdXRlc1VybD8uZGVzaWduYXRpb24sICdieUlkJywgcXVlcnldKTtcbiAgICByZXR1cm4gdGhpcy5odHRwLmdldDxkZXNpZ25hdGlvbkJ5SWRDb250cm9sbGVyUmVzcG9uc2U+KHVybClcbiAgICAgIC5waXBlKFxuICAgICAgICBjYXRjaEVycm9yKHRoaXMuaGFuZGxlRXJyb3IpXG4gICAgICApO1xuICB9XG5cbiAgLyoqXG4gICAqIERlbGV0ZSBkZXNpZ25hdGlvblxuICAgKiBERUxFVEUgJHtjb3JlUm91dGVzVXJsPy5kZXNpZ25hdGlvbn0vOnF1ZXJ5IC0gcGF5bG9hZDogTURlc2lnbmF0aW9uRGVsZXRlUGF5bG9hZCwgcmVzcG9uc2U6IGRlc2lnbmF0aW9uRGVsZXRlQ29udHJvbGxlclJlc3BvbnNlXG4gICAqL1xuICBkZWxldGVEZXNpZ25hdGlvbihpZDogc3RyaW5nKTogT2JzZXJ2YWJsZTxkZXNpZ25hdGlvbkRlbGV0ZUNvbnRyb2xsZXJSZXNwb25zZT4ge1xuICAgIGNvbnN0IHBheWxvYWQ6IE1EZXNpZ25hdGlvbkRlbGV0ZVBheWxvYWQgPSB7IHN5ZHNnX2lkOiBpZCB9O1xuICAgIGNvbnN0IHF1ZXJ5ID0gZ2VuZXJhdGVTdHJpbmdGcm9tT2JqZWN0KHBheWxvYWQpO1xuICAgIGNvbnN0IHVybCA9IGNpZGVQYXRoPy5qb2luKFtob3N0TWFuYWdlclJvdXRlc1VybD8uY2lkZVN1aXRlSG9zdCwgY29yZVJvdXRlc1VybD8ubW9kdWxlLCBjb3JlUm91dGVzVXJsPy5kZXNpZ25hdGlvbiwgcXVlcnldKTtcbiAgICByZXR1cm4gdGhpcy5odHRwLmRlbGV0ZTxkZXNpZ25hdGlvbkRlbGV0ZUNvbnRyb2xsZXJSZXNwb25zZT4odXJsKVxuICAgICAgLnBpcGUoXG4gICAgICAgIHRhcCgocmVzcG9uc2U6IGRlc2lnbmF0aW9uRGVsZXRlQ29udHJvbGxlclJlc3BvbnNlKSA9PiB7XG4gICAgICAgICAgaWYgKHJlc3BvbnNlLnN1Y2Nlc3MpIHtcbiAgICAgICAgICAgIHRoaXMucmVmcmVzaERlc2lnbmF0aW9uTGlzdCgpO1xuICAgICAgICAgIH1cbiAgICAgICAgfSksXG4gICAgICAgIGNhdGNoRXJyb3IodGhpcy5oYW5kbGVFcnJvcilcbiAgICAgICk7XG4gIH1cblxuICAvKipcbiAgICogRGVsZXRlIG11bHRpcGxlIGRlc2lnbmF0aW9uc1xuICAgKi9cbiAgZGVsZXRlTXVsdGlwbGVEZXNpZ25hdGlvbnMoaWRzOiBzdHJpbmdbXSk6IE9ic2VydmFibGU8eyBzdWNjZXNzOiBib29sZWFuOyBtZXNzYWdlPzogc3RyaW5nOyBkYXRhPzogdW5rbm93biB9PiB7XG4gICAgY29uc29sZS5sb2coJ0RlbGV0aW5nIG11bHRpcGxlIGRlc2lnbmF0aW9uczonLCBpZHMpO1xuICAgIGNvbnN0IHBheWxvYWQgPSB7IGlkcyB9O1xuICAgIGNvbnN0IHF1ZXJ5ID0gZ2VuZXJhdGVTdHJpbmdGcm9tT2JqZWN0KHBheWxvYWQpO1xuICAgIGNvbnN0IHVybCA9IGNpZGVQYXRoPy5qb2luKFtob3N0TWFuYWdlclJvdXRlc1VybD8uY2lkZVN1aXRlSG9zdCwgY29yZVJvdXRlc1VybD8ubW9kdWxlLCBjb3JlUm91dGVzVXJsPy5kZXNpZ25hdGlvbiwgcXVlcnldKTtcbiAgICByZXR1cm4gdGhpcy5odHRwLmRlbGV0ZTx7IHN1Y2Nlc3M6IGJvb2xlYW47IG1lc3NhZ2U/OiBzdHJpbmc7IGRhdGE/OiB1bmtub3duIH0+KHVybClcbiAgICAgIC5waXBlKFxuICAgICAgICB0YXAoKHJlc3BvbnNlOiB7IHN1Y2Nlc3M6IGJvb2xlYW47IG1lc3NhZ2U/OiBzdHJpbmc7IGRhdGE/OiB1bmtub3duIH0pID0+IHtcbiAgICAgICAgICBpZiAocmVzcG9uc2Uuc3VjY2Vzcykge1xuICAgICAgICAgICAgdGhpcy5yZWZyZXNoRGVzaWduYXRpb25MaXN0KCk7XG4gICAgICAgICAgfVxuICAgICAgICB9KSxcbiAgICAgICAgY2F0Y2hFcnJvcih0aGlzLmhhbmRsZUVycm9yKVxuICAgICAgKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBUb2dnbGUgZGVzaWduYXRpb24gYWN0aXZlIHN0YXR1c1xuICAgKi9cbiAgdG9nZ2xlRGVzaWduYXRpb25TdGF0dXMoaWQ6IHN0cmluZyk6IE9ic2VydmFibGU8ZGVzaWduYXRpb25Db250cm9sbGVyUmVzcG9uc2U+IHtcbiAgICBjb25zb2xlLmxvZygnVG9nZ2xpbmcgZGVzaWduYXRpb24gc3RhdHVzOicsIGlkKTtcbiAgICBjb25zdCBwYXlsb2FkID0geyBpZCB9O1xuICAgIGNvbnN0IHF1ZXJ5ID0gZ2VuZXJhdGVTdHJpbmdGcm9tT2JqZWN0KHBheWxvYWQpO1xuICAgIGNvbnN0IHVybCA9IGNpZGVQYXRoPy5qb2luKFtob3N0TWFuYWdlclJvdXRlc1VybD8uY2lkZVN1aXRlSG9zdCwgY29yZVJvdXRlc1VybD8ubW9kdWxlLCBjb3JlUm91dGVzVXJsPy5kZXNpZ25hdGlvbiwgcXVlcnldKTtcbiAgICByZXR1cm4gdGhpcy5odHRwLnB1dDxkZXNpZ25hdGlvbkNvbnRyb2xsZXJSZXNwb25zZT4odXJsLCB7fSlcbiAgICAgIC5waXBlKFxuICAgICAgICB0YXAoKHJlc3BvbnNlOiBkZXNpZ25hdGlvbkNvbnRyb2xsZXJSZXNwb25zZSkgPT4ge1xuICAgICAgICAgIGlmIChyZXNwb25zZS5zdWNjZXNzKSB7XG4gICAgICAgICAgICB0aGlzLnJlZnJlc2hEZXNpZ25hdGlvbkxpc3QoKTtcbiAgICAgICAgICB9XG4gICAgICAgIH0pLFxuICAgICAgICBjYXRjaEVycm9yKHRoaXMuaGFuZGxlRXJyb3IpXG4gICAgICApO1xuICB9XG5cbiAgLyoqXG4gICAqIEZpbmQgZGVzaWduYXRpb24gYnkgSURcbiAgICovXG4gIGZpbmREZXNpZ25hdGlvbkJ5SWQoaWQ6IHN0cmluZywgaXRlbXM6IElDb3JlU3lkc2dbXSA9IHRoaXMuZGVzaWduYXRpb25MaXN0U3ViamVjdC52YWx1ZSk6IElDb3JlU3lkc2cgfCBudWxsIHtcbiAgICBmb3IgKGNvbnN0IGl0ZW0gb2YgaXRlbXMpIHtcbiAgICAgIGlmIChpdGVtLl9pZCA9PT0gaWQpIHtcbiAgICAgICAgcmV0dXJuIGl0ZW07XG4gICAgICB9XG4gICAgfVxuICAgIHJldHVybiBudWxsO1xuICB9XG5cbiAgLyoqXG4gICAqIEdldCBwYXJlbnQgZGVzaWduYXRpb25zIGZvciBkcm9wZG93biBzZWxlY3Rpb25cbiAgICovXG4gIGdldFBhcmVudERlc2lnbmF0aW9ucyhleGNsdWRlSWQ/OiBzdHJpbmcpOiBJQ29yZVN5ZHNnW10ge1xuICAgIGNvbnN0IGFsbEl0ZW1zOiBJQ29yZVN5ZHNnW10gPSBbXTtcblxuICAgIGNvbnN0IGZsYXR0ZW5JdGVtcyA9IChpdGVtczogSUNvcmVTeWRzZ1tdLCBsZXZlbDogbnVtYmVyID0gMCkgPT4ge1xuICAgICAgaXRlbXMuZm9yRWFjaChpdGVtID0+IHtcbiAgICAgICAgaWYgKGl0ZW0uX2lkICE9PSBleGNsdWRlSWQpIHtcbiAgICAgICAgICBhbGxJdGVtcy5wdXNoKHtcbiAgICAgICAgICAgIC4uLml0ZW0sXG4gICAgICAgICAgICBzeWRzZ19uYW1lOiAnICAnLnJlcGVhdChsZXZlbCkgKyBpdGVtLnN5ZHNnX25hbWVcbiAgICAgICAgICB9KTtcbiAgICAgICAgfVxuICAgICAgfSk7XG4gICAgfTtcblxuICAgIGZsYXR0ZW5JdGVtcyh0aGlzLmRlc2lnbmF0aW9uTGlzdFN1YmplY3QudmFsdWUpO1xuICAgIHJldHVybiBhbGxJdGVtcztcbiAgfVxuXG4gIC8qKlxuICAgKiBSZWZyZXNoIGRlc2lnbmF0aW9uIGxpc3QgZnJvbSBzZXJ2ZXJcbiAgICovXG4gIHByaXZhdGUgcmVmcmVzaERlc2lnbmF0aW9uTGlzdCgpOiB2b2lkIHtcbiAgICBjb25zdCBkZWZhdWx0Qm9keSA9IHtcbiAgICAgIHBhZ2VJbmRleDogMSxcbiAgICAgIHBhZ2VTaXplOiAxMFxuICAgIH07XG4gICAgdGhpcy5nZXREZXNpZ25hdGlvbkxpc3QoZGVmYXVsdEJvZHkpLnN1YnNjcmliZSh7XG4gICAgICBuZXh0OiAoKSA9PiB7XG4gICAgICAgIGNvbnNvbGUubG9nKCdEZXNpZ25hdGlvbiBsaXN0IHJlZnJlc2hlZCBzdWNjZXNzZnVsbHknKTtcbiAgICAgIH0sXG4gICAgICBlcnJvcjogKGVycm9yKSA9PiB7XG4gICAgICAgIGNvbnNvbGUuZXJyb3IoJ0Vycm9yIHJlZnJlc2hpbmcgZGVzaWduYXRpb24gbGlzdDonLCBlcnJvcik7XG4gICAgICB9XG4gICAgfSk7XG4gIH1cblxuICAvKipcbiAgICogSGFuZGxlIGVycm9yc1xuICAgKi9cbiAgcHJpdmF0ZSBoYW5kbGVFcnJvcihlcnJvcjogdW5rbm93bik6IE9ic2VydmFibGU8bmV2ZXI+IHtcbiAgICBsZXQgZXJyb3JNZXNzYWdlID0gJ0FuIGVycm9yIG9jY3VycmVkJztcblxuICAgIGlmIChlcnJvciBpbnN0YW5jZW9mIEVycm9yKSB7XG4gICAgICBlcnJvck1lc3NhZ2UgPSBlcnJvci5tZXNzYWdlO1xuICAgIH0gZWxzZSBpZiAodHlwZW9mIGVycm9yID09PSAnc3RyaW5nJykge1xuICAgICAgZXJyb3JNZXNzYWdlID0gZXJyb3I7XG4gICAgfVxuXG4gICAgY29uc29sZS5lcnJvcignRGVzaWduYXRpb24gTWFuYWdlbWVudCBTZXJ2aWNlIEVycm9yOicsIGVycm9yTWVzc2FnZSk7XG4gICAgcmV0dXJuIHRocm93RXJyb3IoKCkgPT4gbmV3IEVycm9yKGVycm9yTWVzc2FnZSkpO1xuICB9XG59ICJdfQ==
|