bpm-core 0.0.2 → 0.0.3

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.
@@ -0,0 +1,346 @@
1
+ import { HttpHeaders } from "@angular/common/http";
2
+ import { Inject, Injectable } from "@angular/core";
3
+ import { Form, Header, Messages, MY_LIB_CONFIG_TOKEN, ProfileInfoDrop, Section, SectionHeader } from "../../public-api";
4
+ import * as constants from '../constants';
5
+ import { catchError, throwError } from "rxjs";
6
+ import { map } from "rxjs/operators";
7
+ import * as i0 from "@angular/core";
8
+ import * as i1 from "@angular/common/http";
9
+ export class CoreService {
10
+ http;
11
+ config;
12
+ apiUrl = '';
13
+ authToken;
14
+ refreshToken;
15
+ projectConfig;
16
+ userData;
17
+ localUser;
18
+ loggedInUserData;
19
+ constructor(http, config) {
20
+ this.http = http;
21
+ this.config = config;
22
+ const language = window?.wmConfig?.language ? window.wmConfig.language : 'en';
23
+ this.apiUrl = this.config.proxyServiceBaseUrl + language + this.config.proxyFullAddress + this.config.proxyServiceExecute;
24
+ console.log('Config: ', this.config); // for testing purposes only
25
+ this.localUser = {
26
+ "formPrefix": "CEP",
27
+ "formId": "CEP5595432",
28
+ "inboxUri": "\/group\/hub\/inbox",
29
+ "baseUrl": "\/group\/i-gate\/wm-bpm\/forms\/-\/proxy",
30
+ "showPrint": true,
31
+ "language": "en",
32
+ "isMobile": true,
33
+ "outlook": false,
34
+ "loggedInUserEmail": "ibrahimmaa.c@stc.com.sa"
35
+ };
36
+ this.projectConfig = (this.config.production) ? window['wmConfig'] : btoa(JSON.stringify(this.localUser));
37
+ this.userData = JSON.parse(atob(this.projectConfig));
38
+ }
39
+ getLoggedInUserData() {
40
+ let loggedInEmail = this.loggedInUserId();
41
+ this.employeeProfile(loggedInEmail).subscribe((response) => {
42
+ this.loggedInUserData = response?.["Users"]?.[0];
43
+ console.log('getLoggedInUserData', response);
44
+ });
45
+ }
46
+ loadForm() {
47
+ const authUrl = this.buildAuthUrl();
48
+ return this.http.get(authUrl, { observe: 'response' }).toPromise()
49
+ .then((res) => {
50
+ const tokenInformation = res.body;
51
+ this.authToken = tokenInformation.token;
52
+ this.getLoggedInUserData();
53
+ this.refreshToken = tokenInformation.refreshToken;
54
+ const body = this.buildBody();
55
+ const options = this.getRequestOptions();
56
+ return this.callPost(body, options);
57
+ })
58
+ .catch((httpError) => {
59
+ return throwError(httpError);
60
+ });
61
+ }
62
+ buildAuthUrl() {
63
+ const baseUrl = this.config.proxyServiceBaseUrl;
64
+ const language = window?.wmConfig?.language ? window.wmConfig.language : 'en';
65
+ const fullAddress = this.config.proxyFullAddress;
66
+ const authPart = this.config.proxyServiceAuthorization;
67
+ return `${baseUrl}${language}${fullAddress}${authPart}?ts=${(new Date()).valueOf()}`;
68
+ }
69
+ buildBody() {
70
+ const baseBody = {
71
+ method: constants.HTTP_METHOD_GET,
72
+ destination: constants.TARGET_SERVER_WM,
73
+ serviceName: constants.SERVICE_NAME_WM_FORM,
74
+ formName: this.config.formName,
75
+ formId: "",
76
+ queryParameters: null
77
+ };
78
+ if (!this.config.formId) {
79
+ delete baseBody.formId;
80
+ }
81
+ else {
82
+ baseBody.formId = this.config.formId;
83
+ }
84
+ return baseBody;
85
+ }
86
+ employeeProfile(employeeEmail) {
87
+ let body = {
88
+ method: "GET",
89
+ formName: "AAI",
90
+ destination: "DP",
91
+ serviceName: "igate.users.search.v3",
92
+ parameters: {
93
+ q: employeeEmail
94
+ }
95
+ };
96
+ return this.http.post(this.apiUrl, body, {
97
+ headers: new HttpHeaders({
98
+ authToken: this.authToken,
99
+ "Content-Type": "application/x-www-form-urlencoded"
100
+ }),
101
+ observe: "body"
102
+ }).pipe(map((response) => {
103
+ return response;
104
+ }), catchError((err) => {
105
+ return throwError(err);
106
+ }));
107
+ }
108
+ getRequestOptions() {
109
+ return {
110
+ headers: new HttpHeaders({
111
+ authToken: this.authToken,
112
+ 'Content-Type': constants.HEADER_CONTENT_TYPE_FORM
113
+ }),
114
+ observe: 'body'
115
+ };
116
+ }
117
+ callPost(body, options) {
118
+ const language = window?.wmConfig?.language ? window.wmConfig.language : "en";
119
+ let apiUrl = this.config.proxyServiceBaseUrl + language + this.config.proxyFullAddress + this.config.proxyServiceExecute;
120
+ return this.http.post(apiUrl, encodeURIComponent(JSON.stringify(body)), options).toPromise()
121
+ .then((responseObject) => {
122
+ // let payload = responseObject.body;
123
+ return this.successWm(responseObject);
124
+ }).catch((httpError) => {
125
+ return throwError(httpError);
126
+ });
127
+ }
128
+ successWm(...args) {
129
+ let [payload] = args;
130
+ // let wasSendBack = false;
131
+ /* Convert into Form Object */
132
+ let result = new Form(constants.NO_VALUE, constants.NO_VALUE, constants.NO_VALUE, constants.NO_VALUE, constants.NO_VALUE, constants.NO_VALUE, constants.NO_VALUE);
133
+ /* Generate Header Object */
134
+ let payloadFormDetails = payload.data.form;
135
+ let isReadOnly = (payloadFormDetails.readOnly.toUpperCase() === constants.TRUE_STRING ? constants.TRUE_BOOL : (payloadFormDetails.readOnly.toUpperCase() === constants.FALSE_STRING ? constants.FALSE_BOOL : constants.NO_VALUE));
136
+ result.header = new Header(payload.data['requester'].fullName, constants.IGATE_STATIC_ASSET_PROFILE_PHOTO_URL + payload.data['requester'].employeeEmail, (payloadFormDetails.formId ? payloadFormDetails.formId : constants.DONT_SHOW), (payloadFormDetails.creationDate ? payloadFormDetails.creationDate : constants.DONT_SHOW), payloadFormDetails['formStatus'], payloadFormDetails.details);
137
+ /* Generate Profile Information Object */
138
+ let payloadProfileInfo = payload.data['requester'];
139
+ result.profileInfoDrop = new ProfileInfoDrop((payloadProfileInfo.onBehalfAuthorized ? JSON.parse(payloadProfileInfo.onBehalfAuthorized) : null), payloadProfileInfo['employeeId'], payloadProfileInfo.employeeEmail, payloadProfileInfo.fullName, payloadProfileInfo.generalDepartmentName, payloadProfileInfo.jobPosition, payloadProfileInfo.sectorName, payloadProfileInfo.departmentName, payloadProfileInfo.generalDepartmentCode, payloadProfileInfo['humanResourceLocation'], payloadProfileInfo.nationality, payloadProfileInfo.businessPhone, payloadProfileInfo.directManagerName, payloadProfileInfo.seniorSectorName);
140
+ /* Generate Sections Object */
141
+ result.sections = [];
142
+ /* Push as first object the section for the request details */
143
+ let requestDetailsHasComment = false;
144
+ if (payload.data.request.details.comment) {
145
+ requestDetailsHasComment = true;
146
+ }
147
+ result.sections.push(new Section(constants.SECTION_ID_REQUEST_DETAILS, new SectionHeader(constants.DONT_SHOW, constants.DONT_SHOW, constants.DONT_SHOW, constants.DONT_SHOW, constants.DONT_SHOW, constants.DONT_SHOW, constants.DONT_SHOW, requestDetailsHasComment, (payload.data['workflowSteps'] ? constants.READ_ONLY : isReadOnly)), payload.data.request));
148
+ /* if (result.header.formId) {
149
+ result.commentsDrop = (!result.commentsDrop ? [] : result.commentsDrop);
150
+ this.dispatch(constants.STATE_MACHINE_ACTION_LOAD_HISTORY, result.header.formId).then((responseObject: any) => {
151
+ if (responseObject) {
152
+ responseObject.items.forEach((item: any) => {
153
+ if (item.sequenceNumber !== '0' && item.processedBy) {
154
+ const name = item.processedBy.firstName + ' ' + item.processedBy.secondMiddleName + ' ' + item.processedBy.familyName;
155
+ result.commentsDrop.push(new CommentsDrop(
156
+ constants.IGATE_STATIC_ASSET_PROFILE_PHOTO_URL + item.processedBy.email,
157
+ name,
158
+ item.comments,
159
+ item.modifiedDate,
160
+ item.attachments,
161
+ item.processedBy.job
162
+ ));
163
+ }
164
+ });
165
+ }
166
+ });
167
+ }
168
+ if (result.header.formId && /^DYL/.test(result.header.formId)) {
169
+ this.state = constants.STATE_MACHINE_STATUS_IDLE;
170
+ result.confidentialComments = [];
171
+ this.dispatch('loadConfidentialComments', result.header.formId).then((responseObject: any) => {
172
+ if (responseObject && responseObject.items && responseObject.items.length > 0) {
173
+ responseObject.items.forEach((item: any) => {
174
+ result.confidentialComments.push(new CommentsDrop(
175
+ constants.IGATE_STATIC_ASSET_PROFILE_PHOTO_URL + item.email,
176
+ item.name,
177
+ item.comment,
178
+ item.modifiedDate,
179
+ item.attachment,
180
+ item.position
181
+ ));
182
+ })
183
+ }
184
+ });
185
+ }
186
+
187
+ const inboxType = this.getInboxType(result);
188
+ if (result.header.formId && (!this.isOpenOnInbox())) {
189
+ this.state = constants.STATE_MACHINE_STATUS_IDLE;
190
+ this.dispatch(constants.STATE_MACHINE_ACTION_GET_INBOX_ITEM, result.header.formId, inboxType).then((responseObject) => {
191
+ if (responseObject) {
192
+ const item = responseObject.item;
193
+ result.inboxItem = new InboxItem(
194
+ item.flagging.flagPriority,
195
+ item.flagging.isFlagged,
196
+ item.feedback.canRequestFeedback,
197
+ item.feedback.hasFeedback,
198
+ item.feedback.isPending,
199
+ item.feedback.isRequested,
200
+ item.feedback.isResponded
201
+ );
202
+ }
203
+ });
204
+ }
205
+
206
+ let payloadWorkflowSteps = payload.data.workflowSteps;
207
+ if (payloadWorkflowSteps && payloadWorkflowSteps.constructor === Array && payloadWorkflowSteps.length > 0) {
208
+ payloadWorkflowSteps.forEach((step, index) => {
209
+ let currentIsRequesterSendBack = JSON.stringify(step.details) === JSON.stringify({});
210
+ let hasComments = (!currentIsRequesterSendBack && (step.details.comment || step.comment) ? constants.HAS_COMMENTS : constants.NO_COMMENTS);
211
+ let currentActor = (step.actor.email === step.actor.recipient.email ? step.actor.recipient : (step.actor.delegate ? step.actor.delegate : null))
212
+ if (hasComments) {
213
+ result.commentsDrop = (!result.commentsDrop ? [] : result.commentsDrop);
214
+ if (step.details.attachment && step.details.attachment.attachmentId && this.config.production) {
215
+ this.state = constants.STATE_MACHINE_STATUS_IDLE;
216
+ this.dispatch(constants.STATE_MACHINE_ACTION_LOAD_FILE, step.details.attachment.attachmentId).then((responseObject) => {
217
+ let fileInformation = responseObject.body;
218
+ if (currentActor) {
219
+ /!*this.dispatch(constants.STATE_MACHINE_ACTION_EMPLOYEE_PROFILE, currentActor.email).then((profile) => {
220
+ result.commentsDrop.push(new CommentsDrop(
221
+ constants.IGATE_STATIC_ASSET_PROFILE_PHOTO_URL + currentActor.email,
222
+ currentActor.name,
223
+ (step.details.comment ? step.details.comment : (step.comment ? step.comment : null)),
224
+ step.date,
225
+ fileInformation.fileName + "|data:" + fileInformation.mimeType + ";base64," + fileInformation.fileContents,
226
+ profile.job.name
227
+ ))
228
+ })*!/
229
+ }
230
+ });
231
+ this.state = constants.STATE_MACHINE_STATUS_FETCHING;
232
+ } else if (step.details.attachmentId) {
233
+ this.state = constants.STATE_MACHINE_STATUS_IDLE;
234
+ this.dispatch(constants.STATE_MACHINE_ACTION_LOAD_FILE, step.details.attchmentId).then((responseObject) => {
235
+ let fileInformation = responseObject.body;
236
+ if (currentActor) {
237
+ /!*this.dispatch(constants.STATE_MACHINE_ACTION_EMPLOYEE_PROFILE, currentActor.email).then((profile) => {
238
+ result.commentsDrop.push(new CommentsDrop(
239
+ constants.IGATE_STATIC_ASSET_PROFILE_PHOTO_URL + currentActor.email,
240
+ currentActor.name,
241
+ (step.details.comment ? step.details.comment : (step.comment ? step.comment : null)),
242
+ step.date,
243
+ fileInformation.fileName + "|data:" + fileInformation.mimeType + ";base64," + fileInformation.fileContents,
244
+ profile.job.name
245
+ ))
246
+ })*!/
247
+ }
248
+ });
249
+ this.state = constants.STATE_MACHINE_STATUS_FETCHING;
250
+ } else {
251
+ if (currentActor) {
252
+ this.state = constants.STATE_MACHINE_STATUS_IDLE;
253
+ /!*this.dispatch(constants.STATE_MACHINE_ACTION_EMPLOYEE_PROFILE, currentActor.email).then((profile) => {
254
+ result.commentsDrop.push(new CommentsDrop(
255
+ constants.IGATE_STATIC_ASSET_PROFILE_PHOTO_URL + currentActor.email,
256
+ currentActor.name,
257
+ (step.details.comment ? step.details.comment : (step.comment ? step.comment : null)),
258
+ step.date,
259
+ null,
260
+ profile.job.name
261
+ ))
262
+ })*!/
263
+ }
264
+ this.state = constants.STATE_MACHINE_STATUS_FETCHING;
265
+ }
266
+ }
267
+
268
+ if (wasSendBack && step.actor.recipient.role === 'REQUESTER') {
269
+ console.log("wasSendBack && REQUESTER")
270
+ result.sections = [new Section(
271
+ constants.SECTION_ID_REQUEST_DETAILS,
272
+ new SectionHeader(
273
+ constants.DONT_SHOW,
274
+ constants.DONT_SHOW,
275
+ constants.DONT_SHOW,
276
+ constants.DONT_SHOW,
277
+ constants.DONT_SHOW,
278
+ constants.DONT_SHOW,
279
+ constants.DONT_SHOW,
280
+ requestDetailsHasComment,
281
+ (payload.data.workflowSteps ? constants.READ_ONLY : isReadOnly)
282
+ ),
283
+ payload.data.request
284
+ )]
285
+ } else if (wasSendBack) {
286
+ console.log("Pop")
287
+ if (result.sections.length > 1) {
288
+ result.sections.pop();
289
+ }
290
+ wasSendBack = false;
291
+ }
292
+ if (step.details.decision && step.details.decision.key === constants.FORM_STATUS_SEND_BACK) {
293
+ wasSendBack = true;
294
+ } else if (JSON.stringify(step.details) !== JSON.stringify({})) {
295
+ result.sections.push(
296
+ new Section(
297
+ step.actor.recipient.role.toLowerCase() + constants.SECTION_ID_APPROVAL_PARTIAL_NAME,
298
+ new SectionHeader(
299
+ (currentActor ? this.getShortName(currentActor.name) : null),
300
+ step.date,
301
+ this.getShortName(step.actor.recipient.name),
302
+ constants.IGATE_STATIC_ASSET_PROFILE_PHOTO_URL + step.actor.recipient.email,
303
+ (step.actor.delegate && step.actor.delegate.name ? this.getShortName(step.actor.delegate.name) : null),
304
+ (step.actor.delegate && step.actor.delegate.email ? constants.IGATE_STATIC_ASSET_PROFILE_PHOTO_URL + step.actor.delegate.email : null),
305
+ step.actor.status,
306
+ hasComments,
307
+ (index < payloadWorkflowSteps.length - 1 ? constants.READ_ONLY : isReadOnly)
308
+ ),
309
+ {details: step.details, processingDate: step.date}
310
+ )
311
+ );
312
+ this.currentSubmitter = {actor: step.actor, recipient: step.recipient, delegate: step.actor.delegate};
313
+ }
314
+ });
315
+ }
316
+ */
317
+ /* Create Lov Sections */
318
+ result.lovs = (payload.meta && payload.meta.lovs ? payload.meta.lovs : null);
319
+ if (payload.meta && payload.meta.messages) {
320
+ result.messages = new Messages({}, [], [], []);
321
+ payload.meta.messages.forEach((message) => {
322
+ result.messages.originalMsgs.push(message);
323
+ result.messages[message.type].push(message.message);
324
+ });
325
+ }
326
+ // result.messages = (payload.meta && payload.meta.messages ? payload.meta.messages : null);
327
+ /* Fix last section to be the RO/WM from the variable */
328
+ result.sections[result.sections.length - 1].header.readOnly = isReadOnly;
329
+ return result;
330
+ }
331
+ loggedInUserId() {
332
+ return this.userData['loggedInUserEmail'];
333
+ }
334
+ static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.2.8", ngImport: i0, type: CoreService, deps: [{ token: i1.HttpClient }, { token: MY_LIB_CONFIG_TOKEN }], target: i0.ɵɵFactoryTarget.Injectable });
335
+ static ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "18.2.8", ngImport: i0, type: CoreService, providedIn: "any" });
336
+ }
337
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.8", ngImport: i0, type: CoreService, decorators: [{
338
+ type: Injectable,
339
+ args: [{
340
+ providedIn: "any"
341
+ }]
342
+ }], ctorParameters: () => [{ type: i1.HttpClient }, { type: undefined, decorators: [{
343
+ type: Inject,
344
+ args: [MY_LIB_CONFIG_TOKEN]
345
+ }] }] });
346
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY29yZS5zZXJ2aWNlLnRzLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvYnBtLWNvcmUvc3JjL2xpYi9zZXJ2aWNlcy9jb3JlLnNlcnZpY2UudHMudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFhLFdBQVcsRUFBQyxNQUFNLHNCQUFzQixDQUFDO0FBQzdELE9BQU8sRUFBQyxNQUFNLEVBQUUsVUFBVSxFQUFDLE1BQU0sZUFBZSxDQUFDO0FBRWpELE9BQU8sRUFBQyxJQUFJLEVBQUUsTUFBTSxFQUFFLFFBQVEsRUFBRSxtQkFBbUIsRUFBRSxlQUFlLEVBQUUsT0FBTyxFQUFFLGFBQWEsRUFBQyxNQUFNLGtCQUFrQixDQUFDO0FBQ3RILE9BQU8sS0FBSyxTQUFTLE1BQU0sY0FBYyxDQUFBO0FBQ3pDLE9BQU8sRUFBQyxVQUFVLEVBQUUsVUFBVSxFQUFDLE1BQU0sTUFBTSxDQUFDO0FBQzVDLE9BQU8sRUFBQyxHQUFHLEVBQUMsTUFBTSxnQkFBZ0IsQ0FBQzs7O0FBS25DLE1BQU0sT0FBTyxXQUFXO0lBVUY7SUFDNkI7SUFWakQsTUFBTSxHQUFXLEVBQUUsQ0FBQTtJQUNYLFNBQVMsQ0FBUztJQUNsQixZQUFZLENBQVM7SUFDWixhQUFhLENBQVM7SUFDaEMsUUFBUSxDQUFTO0lBQ1AsU0FBUyxDQUFLO0lBQ3hCLGdCQUFnQixDQUFPO0lBRzlCLFlBQW9CLElBQWdCLEVBQ2EsTUFBbUI7UUFEaEQsU0FBSSxHQUFKLElBQUksQ0FBWTtRQUNhLFdBQU0sR0FBTixNQUFNLENBQWE7UUFDbEUsTUFBTSxRQUFRLEdBQUksTUFBYyxFQUFFLFFBQVEsRUFBRSxRQUFRLENBQUMsQ0FBQyxDQUFFLE1BQWMsQ0FBQyxRQUFRLENBQUMsUUFBUSxDQUFDLENBQUMsQ0FBQyxJQUFJLENBQUM7UUFDaEcsSUFBSSxDQUFDLE1BQU0sR0FBRyxJQUFJLENBQUMsTUFBTSxDQUFDLG1CQUFtQixHQUFHLFFBQVEs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USxDQUM1QixFQUFFLEVBQ0YsRUFBRSxFQUNGLEVBQUUsRUFDRixFQUFFLENBQ0gsQ0FBQztZQUNGLE9BQU8sQ0FBQyxJQUFJLENBQUMsUUFBUSxDQUFDLE9BQU8sQ0FBQyxDQUFDLE9BQU8sRUFBRSxFQUFFO2dCQUN4QyxNQUFNLENBQUMsUUFBUSxDQUFDLFlBQVksQ0FBQyxJQUFJLENBQUMsT0FBTyxDQUFDLENBQUM7Z0JBQzNDLE1BQU0sQ0FBQyxRQUFRLENBQUMsT0FBTyxDQUFDLElBQUksQ0FBQyxDQUFDLElBQUksQ0FBQyxPQUFPLENBQUMsT0FBTyxDQUFDLENBQUM7WUFDdEQsQ0FBQyxDQUFDLENBQUM7UUFDTCxDQUFDO1FBRUQsNEZBQTRGO1FBQzVGLHdEQUF3RDtRQUN4RCxNQUFNLENBQUMsUUFBUSxDQUFDLE1BQU0sQ0FBQyxRQUFRLENBQUMsTUFBTSxHQUFHLENBQUMsQ0FBQyxDQUFDLE1BQU0sQ0FBQyxRQUFRLEdBQUcsVUFBVSxDQUFDO1FBQ3pFLE9BQU8sTUFBTSxDQUFDO0lBQ2hCLENBQUM7SUFFTSxjQUFjO1FBQ25CLE9BQU8sSUFBSSxDQUFDLFFBQVEsQ0FBQyxtQkFBbUIsQ0FBQyxDQUFDO0lBQzVDLENBQUM7dUdBdllVLFdBQVcsNENBV0YsbUJBQW1COzJHQVg1QixXQUFXLGNBRlYsS0FBSzs7MkZBRU4sV0FBVztrQkFIdkIsVUFBVTttQkFBQztvQkFDVixVQUFVLEVBQUUsS0FBSztpQkFDbEI7OzBCQVljLE1BQU07MkJBQUMsbUJBQW1CIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHtIdHRwQ2xpZW50LCBIdHRwSGVhZGVyc30gZnJvbSBcIkBhbmd1bGFyL2NvbW1vbi9odHRwXCI7XHJcbmltcG9ydCB7SW5qZWN0LCBJbmplY3RhYmxlfSBmcm9tIFwiQGFuZ3VsYXIvY29yZVwiO1xyXG5pbXBvcnQgdHlwZSB7TXlMaWJDb25maWd9IGZyb20gXCIuLi9pbnRlcmZhY2VzL3NoYXJlZC5pbnRlcmZhY2VcIjtcclxuaW1wb3J0IHtGb3JtLCBIZWFkZXIsIE1lc3NhZ2VzLCBNWV9MSUJfQ09ORklHX1RPS0VOLCBQcm9maWxlSW5mb0Ryb3AsIFNlY3Rpb24sIFNlY3Rpb25IZWFkZXJ9IGZyb20gXCIuLi8uLi9wdWJsaWMtYXBpXCI7XHJcbmltcG9ydCAqIGFzIGNvbnN0YW50cyBmcm9tICcuLi9jb25zdGFudHMnXHJcbmltcG9ydCB7Y2F0Y2hFcnJvciwgdGhyb3dFcnJvcn0gZnJvbSBcInJ4anNcIjtcclxuaW1wb3J0IHttYXB9IGZyb20gXCJyeGpzL29wZXJhdG9yc1wiO1xyXG5cclxuQEluamVjdGFibGUoe1xyXG4gIHByb3ZpZGVkSW46IFwiYW55XCJcclxufSlcclxuZXhwb3J0IGNsYXNzIENvcmVTZXJ2aWNlIHtcclxuICBhcGlVcmw6IHN0cmluZyA9ICcnXHJcbiAgcHJpdmF0ZSBhdXRoVG9rZW46IHN0cmluZztcclxuICBwcml2YXRlIHJlZnJlc2hUb2tlbjogc3RyaW5nO1xyXG4gIHByaXZhdGUgcmVhZG9ubHkgcHJvamVjdENvbmZpZzogc3RyaW5nO1xyXG4gIHB1YmxpYyB1c2VyRGF0YTogc3RyaW5nO1xyXG4gIHByaXZhdGUgcmVhZG9ubHkgbG9jYWxVc2VyOiB7fTtcclxuICBwdWJsaWMgbG9nZ2VkSW5Vc2VyRGF0YTogeyAgfTtcclxuXHJcblxyXG4gIGNvbnN0cnVjdG9yKHByaXZhdGUgaHR0cDogSHR0cENsaWVudCxcclxuICAgICAgICAgICAgICBASW5qZWN0KE1ZX0xJQl9DT05GSUdfVE9LRU4pIHByaXZhdGUgY29uZmlnOiBNeUxpYkNvbmZpZykge1xyXG4gICAgY29uc3QgbGFuZ3VhZ2UgPSAod2luZG93IGFzIGFueSk/LndtQ29uZmlnPy5sYW5ndWFnZSA/ICh3aW5kb3cgYXMgYW55KS53bUNvbmZpZy5sYW5ndWFnZSA6ICdlbic7XHJcbiAgICB0aGlzLmFwaVVybCA9IHRoaXMuY29uZmlnLnByb3h5U2VydmljZUJhc2VVcmwgKyBsYW5ndWFnZSArIHRoaXMuY29uZmlnLnByb3h5RnVsbEFkZHJlc3MgKyB0aGlzLmNvbmZpZy5wcm94eVNlcnZpY2VFeGVjdXRlO1xyXG4gICAgY29uc29sZS5sb2coJ0NvbmZpZzogJywgdGhpcy5jb25maWcpOyAvLyBmb3IgdGVzdGluZyBwdXJwb3NlcyBvbmx5XHJcbiAgICB0aGlzLmxvY2FsVXNlciA9IHtcclxuICAgICAgXCJmb3JtUHJlZml4XCI6IFwiQ0VQXCIsXHJcbiAgICAgIFwiZm9ybUlkXCI6IFwiQ0VQNTU5NTQzMlwiLFxyXG4gICAgICBcImluYm94VXJpXCI6IFwiXFwvZ3JvdXBcXC9odWJcXC9pbmJveFwiLFxyXG4gICAgICBcImJhc2VVcmxcIjogXCJcXC9ncm91cFxcL2ktZ2F0ZVxcL3dtLWJwbVxcL2Zvcm1zXFwvLVxcL3Byb3h5XCIsXHJcbiAgICAgIFwic2hvd1ByaW50XCI6IHRydWUsXHJcbiAgICAgIFwibGFuZ3VhZ2VcIjogXCJlblwiLFxyXG4gICAgICBcImlzTW9iaWxlXCI6IHRydWUsXHJcbiAgICAgIFwib3V0bG9va1wiOiBmYWxzZSxcclxuICAgICAgXCJsb2dnZWRJblVzZXJFbWFpbFwiOiBcImlicmFoaW1tYWEuY0BzdGMuY29tLnNhXCJcclxuICAgIH1cclxuICAgIHRoaXMucHJvamVjdENvbmZpZyA9ICh0aGlzLmNvbmZpZy5wcm9kdWN0aW9uKSA/ICh3aW5kb3cgYXMgYW55KVsnd21Db25maWcnXSA6IGJ0b2EoSlNPTi5zdHJpbmdpZnkodGhpcy5sb2NhbFVzZXIpKTtcclxuICAgIHRoaXMudXNlckRhdGEgPSBKU09OLnBhcnNlKGF0b2IodGhpcy5wcm9qZWN0Q29uZmlnKSk7XHJcbiAgfVxyXG5cclxuICBnZXRMb2dnZWRJblVzZXJEYXRhKCkge1xyXG4gICAgbGV0IGxvZ2dlZEluRW1haWwgPSB0aGlzLmxvZ2dlZEluVXNlcklkKClcclxuICAgIHRoaXMuZW1wbG95ZWVQcm9maWxlKGxvZ2dlZEluRW1haWwpLnN1YnNjcmliZSgocmVzcG9uc2U6IGFueSkgPT4ge1xyXG4gICAgICB0aGlzLmxvZ2dlZEluVXNlckRhdGEgPSByZXNwb25zZT8uW1wiVXNlcnNcIl0/LlswXVxyXG4gICAgICBjb25zb2xlLmxvZygnZ2V0TG9nZ2VkSW5Vc2VyRGF0YScsIHJlc3BvbnNlKVxyXG4gICAgfSlcclxuICB9XHJcblxyXG4gIGxvYWRGb3JtKCkge1xyXG4gICAgY29uc3QgYXV0aFVybCA9IHRoaXMuYnVpbGRBdXRoVXJsKCk7XHJcbiAgICByZXR1cm4gdGhpcy5odHRwLmdldChhdXRoVXJsLCB7b2JzZXJ2ZTogJ3Jlc3BvbnNlJ30pLnRvUHJvbWlzZSgpXHJcbiAgICAgIC50aGVuKChyZXM6IGFueSkgPT4ge1xyXG4gICAgICAgIGNvbnN0IHRva2VuSW5mb3JtYXRpb24gPSByZXMuYm9keTtcclxuICAgICAgICB0aGlzLmF1dGhUb2tlbiA9IHRva2VuSW5mb3JtYXRpb24udG9rZW47XHJcbiAgICAgICAgdGhpcy5nZXRMb2dnZWRJblVzZXJEYXRhKClcclxuICAgICAgICB0aGlzLnJlZnJlc2hUb2tlbiA9IHRva2VuSW5mb3JtYXRpb24ucmVmcmVzaFRva2VuO1xyXG4gICAgICAgIGNvbnN0IGJvZHkgPSB0aGlzLmJ1aWxkQm9keSgpO1xyXG4gICAgICAgIGNvbnN0IG9wdGlvbnMgPSB0aGlzLmdldFJlcXVlc3RPcHRpb25zKCk7XHJcbiAgICAgICAgcmV0dXJuIHRoaXMuY2FsbFBvc3QoYm9keSwgb3B0aW9ucyk7XHJcbiAgICAgIH0pXHJcbiAgICAgIC5jYXRjaCgoaHR0cEVycm9yOiBhbnkpID0+IHtcclxuICAgICAgICByZXR1cm4gdGhyb3dFcnJvcihodHRwRXJyb3IpO1xyXG4gICAgICB9KTtcclxuICB9XHJcblxyXG4gIHByaXZhdGUgYnVpbGRBdXRoVXJsKCk6IHN0cmluZyB7XHJcbiAgICBjb25zdCBiYXNlVXJsID0gdGhpcy5jb25maWcucHJveHlTZXJ2aWNlQmFzZVVybDtcclxuICAgIGNvbnN0IGxhbmd1YWdlID0gKHdpbmRvdyBhcyBhbnkpPy53bUNvbmZpZz8ubGFuZ3VhZ2UgPyAod2luZG93IGFzIGFueSkud21Db25maWcubGFuZ3VhZ2UgOiAnZW4nO1xyXG4gICAgY29uc3QgZnVsbEFkZHJlc3MgPSB0aGlzLmNvbmZpZy5wcm94eUZ1bGxBZGRyZXNzO1xyXG4gICAgY29uc3QgYXV0aFBhcnQgPSB0aGlzLmNvbmZpZy5wcm94eVNlcnZpY2VBdXRob3JpemF0aW9uO1xyXG4gICAgcmV0dXJuIGAke2Jhc2VVcmx9JHtsYW5ndWFnZX0ke2Z1bGxBZGRyZXNzfSR7YXV0aFBhcnR9P3RzPSR7KG5ldyBEYXRlKCkpLnZhbHVlT2YoKX1gO1xyXG4gIH1cclxuXHJcbiAgcHJpdmF0ZSBidWlsZEJvZHkoKTogb2JqZWN0IHtcclxuICAgIGNvbnN0IGJhc2VCb2R5ID0ge1xyXG4gICAgICBtZXRob2Q6IGNvbnN0YW50cy5IVFRQX01FVEhPRF9HRVQsXHJcbiAgICAgIGRlc3RpbmF0aW9uOiBjb25zdGFudHMuVEFSR0VUX1NFUlZFUl9XTSxcclxuICAgICAgc2VydmljZU5hbWU6IGNvbnN0YW50cy5TRVJWSUNFX05BTUVfV01fRk9STSxcclxuICAgICAgZm9ybU5hbWU6IHRoaXMuY29uZmlnLmZvcm1OYW1lLFxyXG4gICAgICBmb3JtSWQ6IFwiXCIsXHJcbiAgICAgIHF1ZXJ5UGFyYW1ldGVyczogbnVsbFxyXG4gICAgfTtcclxuICAgIGlmICghdGhpcy5jb25maWcuZm9ybUlkKSB7XHJcbiAgICAgIGRlbGV0ZSBiYXNlQm9keS5mb3JtSWQ7XHJcbiAgICB9IGVsc2Uge1xyXG4gICAgICBiYXNlQm9keS5mb3JtSWQgPSB0aGlzLmNvbmZpZy5mb3JtSWQ7XHJcbiAgICB9XHJcbiAgICByZXR1cm4gYmFzZUJvZHk7XHJcbiAgfVxyXG5cclxuICBlbXBsb3llZVByb2ZpbGUoZW1wbG95ZWVFbWFpbDogYW55KSB7XHJcbiAgICBsZXQgYm9keSA9IHtcclxuICAgICAgbWV0aG9kOiBcIkdFVFwiLFxyXG4gICAgICBmb3JtTmFtZTogXCJBQUlcIixcclxuICAgICAgZGVzdGluYXRpb246IFwiRFBcIixcclxuICAgICAgc2VydmljZU5hbWU6IFwiaWdhdGUudXNlcnMuc2VhcmNoLnYzXCIsXHJcbiAgICAgIHBhcmFtZXRlcnM6IHtcclxuICAgICAgICBxOiBlbXBsb3llZUVtYWlsXHJcbiAgICAgIH1cclxuICAgIH07XHJcbiAgICByZXR1cm4gdGhpcy5odHRwLnBvc3QodGhpcy5hcGlVcmwsIGJvZHksIHtcclxuICAgICAgaGVhZGVyczogbmV3IEh0dHBIZWFkZXJzKHtcclxuICAgICAgICBhdXRoVG9rZW46IHRoaXMuYXV0aFRva2VuLFxyXG4gICAgICAgIFwiQ29udGVudC1UeXBlXCI6IFwiYXBwbGljYXRpb24veC13d3ctZm9ybS11cmxlbmNvZGVkXCJcclxuICAgICAgfSksXHJcbiAgICAgIG9ic2VydmU6IFwiYm9keVwiXHJcbiAgICB9KS5waXBlKFxyXG4gICAgICBtYXAoKHJlc3BvbnNlOiBhbnkpID0+IHtcclxuICAgICAgICByZXR1cm4gcmVzcG9uc2VcclxuICAgICAgfSlcclxuICAgICAgLCBjYXRjaEVycm9yKChlcnI6IGFueSkgPT4ge1xyXG4gICAgICAgIHJldHVybiB0aHJvd0Vycm9yKGVycilcclxuICAgICAgfSkpO1xyXG4gIH1cclxuXHJcbiAgcHJpdmF0ZSBnZXRSZXF1ZXN0T3B0aW9ucygpIHtcclxuICAgIHJldHVybiB7XHJcbiAgICAgIGhlYWRlcnM6IG5ldyBIdHRwSGVhZGVycyh7XHJcbiAgICAgICAgYXV0aFRva2VuOiB0aGlzLmF1dGhUb2tlbixcclxuICAgICAgICAnQ29udGVudC1UeXBlJzogY29uc3RhbnRzLkhFQURFUl9DT05URU5UX1RZUEVfRk9STVxyXG4gICAgICB9KSxcclxuICAgICAgb2JzZXJ2ZTogJ2JvZHknXHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICBwcml2YXRlIGNhbGxQb3N0KGJvZHksIG9wdGlvbnMpIHtcclxuICAgIGNvbnN0IGxhbmd1YWdlID0gKHdpbmRvdyBhcyBhbnkpPy53bUNvbmZpZz8ubGFuZ3VhZ2UgPyAod2luZG93IGFzIGFueSkud21Db25maWcubGFuZ3VhZ2UgOiBcImVuXCI7XHJcbiAgICBsZXQgYXBpVXJsID0gdGhpcy5jb25maWcucHJveHlTZXJ2aWNlQmFzZVVybCArIGxhbmd1YWdlICsgdGhpcy5jb25maWcucHJveHlGdWxsQWRkcmVzcyArIHRoaXMuY29uZmlnLnByb3h5U2VydmljZUV4ZWN1dGU7XHJcbiAgICByZXR1cm4gdGhpcy5odHRwLnBvc3QoYXBpVXJsLCBlbmNvZGVVUklDb21wb25lbnQoSlNPTi5zdHJpbmdpZnkoYm9keSkpLCBvcHRpb25zKS50b1Byb21pc2UoKVxyXG4gICAgICAudGhlbihcclxuICAgICAgICAocmVzcG9uc2VPYmplY3Q6IGFueSkgPT4ge1xyXG4gICAgICAgICAgLy8gbGV0IHBheWxvYWQgPSByZXNwb25zZU9iamVjdC5ib2R5O1xyXG4gICAgICAgICAgcmV0dXJuIHRoaXMuc3VjY2Vzc1dtKHJlc3BvbnNlT2JqZWN0KVxyXG4gICAgICAgIH0sXHJcbiAgICAgICkuY2F0Y2goXHJcbiAgICAgICAgKGh0dHBFcnJvcjogYW55KSA9PiB7XHJcbiAgICAgICAgICByZXR1cm4gdGhyb3dFcnJvcihodHRwRXJyb3IpXHJcbiAgICAgICAgfVxyXG4gICAgICApO1xyXG4gIH1cclxuXHJcbiAgc3VjY2Vzc1dtKC4uLmFyZ3MpIHtcclxuICAgIGxldCBbcGF5bG9hZF0gPSBhcmdzO1xyXG4gICAgLy8gbGV0IHdhc1NlbmRCYWNrID0gZmFsc2U7XHJcbiAgICAvKiBDb252ZXJ0IGludG8gRm9ybSBPYmplY3QgKi9cclxuICAgIGxldCByZXN1bHQgPSBuZXcgRm9ybShcclxuICAgICAgY29uc3RhbnRzLk5PX1ZBTFVFLFxyXG4gICAgICBjb25zdGFudHMuTk9fVkFMVUUsXHJcbiAgICAgIGNvbnN0YW50cy5OT19WQUxVRSxcclxuICAgICAgY29uc3RhbnRzLk5PX1ZBTFVFLFxyXG4gICAgICBjb25zdGFudHMuTk9fVkFMVUUsXHJcbiAgICAgIGNvbnN0YW50cy5OT19WQUxVRSxcclxuICAgICAgY29uc3RhbnRzLk5PX1ZBTFVFXHJcbiAgICApO1xyXG4gICAgLyogR2VuZXJhdGUgSGVhZGVyIE9iamVjdCAqL1xyXG4gICAgbGV0IHBheWxvYWRGb3JtRGV0YWlscyA9IHBheWxvYWQuZGF0YS5mb3JtO1xyXG4gICAgbGV0IGlzUmVhZE9ubHkgPSAocGF5bG9hZEZvcm1EZXRhaWxzLnJlYWRPbmx5LnRvVXBwZXJDYXNlKCkgPT09IGNvbnN0YW50cy5UUlVFX1NUUklORyA/IGNvbnN0YW50cy5UUlVFX0JPT0wgOiAocGF5bG9hZEZvcm1EZXRhaWxzLnJlYWRPbmx5LnRvVXBwZXJDYXNlKCkgPT09IGNvbnN0YW50cy5GQUxTRV9TVFJJTkcgPyBjb25zdGFudHMuRkFMU0VfQk9PTCA6IGNvbnN0YW50cy5OT19WQUxVRSkpXHJcbiAgICByZXN1bHQuaGVhZGVyID0gbmV3IEhlYWRlcihcclxuICAgICAgcGF5bG9hZC5kYXRhWydyZXF1ZXN0ZXInXS5mdWxsTmFtZSxcclxuICAgICAgY29uc3RhbnRzLklHQVRFX1NUQVRJQ19BU1NFVF9QUk9GSUxFX1BIT1RPX1VSTCArIHBheWxvYWQuZGF0YVsncmVxdWVzdGVyJ10uZW1wbG95ZWVFbWFpbCxcclxuICAgICAgKHBheWxvYWRGb3JtRGV0YWlscy5mb3JtSWQgPyBwYXlsb2FkRm9ybURldGFpbHMuZm9ybUlkIDogY29uc3RhbnRzLkRPTlRfU0hPVyksXHJcbiAgICAgIChwYXlsb2FkRm9ybURldGFpbHMuY3JlYXRpb25EYXRlID8gcGF5bG9hZEZvcm1EZXRhaWxzLmNyZWF0aW9uRGF0ZSA6IGNvbnN0YW50cy5ET05UX1NIT1cpLFxyXG4gICAgICBwYXlsb2FkRm9ybURldGFpbHNbJ2Zvcm1TdGF0dXMnXSxcclxuICAgICAgcGF5bG9hZEZvcm1EZXRhaWxzLmRldGFpbHNcclxuICAgICk7XHJcbiAgICAvKiBHZW5lcmF0ZSBQcm9maWxlIEluZm9ybWF0aW9uIE9iamVjdCAqL1xyXG4gICAgbGV0IHBheWxvYWRQcm9maWxlSW5mbyA9IHBheWxvYWQuZGF0YVsncmVxdWVzdGVyJ107XHJcbiAgICByZXN1bHQucHJvZmlsZUluZm9Ecm9wID0gbmV3IFByb2ZpbGVJbmZvRHJvcChcclxuICAgICAgKHBheWxvYWRQcm9maWxlSW5mby5vbkJlaGFsZkF1dGhvcml6ZWQgPyBKU09OLnBhcnNlKHBheWxvYWRQcm9maWxlSW5mby5vbkJlaGFsZkF1dGhvcml6ZWQpIDogbnVsbCksXHJcbiAgICAgIHBheWxvYWRQcm9maWxlSW5mb1snZW1wbG95ZWVJZCddLFxyXG4gICAgICBwYXlsb2FkUHJvZmlsZUluZm8uZW1wbG95ZWVFbWFpbCxcclxuICAgICAgcGF5bG9hZFByb2ZpbGVJbmZvLmZ1bGxOYW1lLFxyXG4gICAgICBwYXlsb2FkUHJvZmlsZUluZm8uZ2VuZXJhbERlcGFydG1lbnROYW1lLFxyXG4gICAgICBwYXlsb2FkUHJvZmlsZUluZm8uam9iUG9zaXRpb24sXHJcbiAgICAgIHBheWxvYWRQcm9maWxlSW5mby5zZWN0b3JOYW1lLFxyXG4gICAgICBwYXlsb2FkUHJvZmlsZUluZm8uZGVwYXJ0bWVudE5hbWUsXHJcbiAgICAgIHBheWxvYWRQcm9maWxlSW5mby5nZW5lcmFsRGVwYXJ0bWVudENvZGUsXHJcbiAgICAgIHBheWxvYWRQcm9maWxlSW5mb1snaHVtYW5SZXNvdXJjZUxvY2F0aW9uJ10sXHJcbiAgICAgIHBheWxvYWRQcm9maWxlSW5mby5uYXRpb25hbGl0eSxcclxuICAgICAgcGF5bG9hZFByb2ZpbGVJbmZvLmJ1c2luZXNzUGhvbmUsXHJcbiAgICAgIHBheWxvYWRQcm9maWxlSW5mby5kaXJlY3RNYW5hZ2VyTmFtZSxcclxuICAgICAgcGF5bG9hZFByb2ZpbGVJbmZvLnNlbmlvclNlY3Rvck5hbWVcclxuICAgICk7XHJcbiAgICAvKiBHZW5lcmF0ZSBTZWN0aW9ucyBPYmplY3QgKi9cclxuICAgIHJlc3VsdC5zZWN0aW9ucyA9IFtdO1xyXG4gICAgLyogUHVzaCBhcyBmaXJzdCBvYmplY3QgdGhlIHNlY3Rpb24gZm9yIHRoZSByZXF1ZXN0IGRldGFpbHMgKi9cclxuICAgIGxldCByZXF1ZXN0RGV0YWlsc0hhc0NvbW1lbnQgPSBmYWxzZTtcclxuICAgIGlmIChwYXlsb2FkLmRhdGEucmVxdWVzdC5kZXRhaWxzLmNvbW1lbnQpIHtcclxuICAgICAgcmVxdWVzdERldGFpbHNIYXNDb21tZW50ID0gdHJ1ZTtcclxuICAgIH1cclxuICAgIHJlc3VsdC5zZWN0aW9ucy5wdXNoKFxyXG4gICAgICBuZXcgU2VjdGlvbihcclxuICAgICAgICBjb25zdGFudHMuU0VDVElPTl9JRF9SRVFVRVNUX0RFVEFJTFMsXHJcbiAgICAgICAgbmV3IFNlY3Rpb25IZWFkZXIoXHJcbiAgICAgICAgICBjb25zdGFudHMuRE9OVF9TSE9XLFxyXG4gICAgICAgICAgY29uc3RhbnRzLkRPTlRfU0hPVyxcclxuICAgICAgICAgIGNvbnN0YW50cy5ET05UX1NIT1csXHJcbiAgICAgICAgICBjb25zdGFudHMuRE9OVF9TSE9XLFxyXG4gICAgICAgICAgY29uc3RhbnRzLkRPTlRfU0hPVyxcclxuICAgICAgICAgIGNvbnN0YW50cy5ET05UX1NIT1csXHJcbiAgICAgICAgICBjb25zdGFudHMuRE9OVF9TSE9XLFxyXG4gICAgICAgICAgcmVxdWVzdERldGFpbHNIYXNDb21tZW50LFxyXG4gICAgICAgICAgKHBheWxvYWQuZGF0YVsnd29ya2Zsb3dTdGVwcyddID8gY29uc3RhbnRzLlJFQURfT05MWSA6IGlzUmVhZE9ubHkpXHJcbiAgICAgICAgKSxcclxuICAgICAgICBwYXlsb2FkLmRhdGEucmVxdWVzdFxyXG4gICAgICApXHJcbiAgICApO1xyXG5cclxuICAgIC8qICAgaWYgKHJlc3VsdC5oZWFkZXIuZm9ybUlkKSB7XHJcbiAgICAgICAgIHJlc3VsdC5jb21tZW50c0Ryb3AgPSAoIXJlc3VsdC5jb21tZW50c0Ryb3AgPyBbXSA6IHJlc3VsdC5jb21tZW50c0Ryb3ApO1xyXG4gICAgICAgICB0aGlzLmRpc3BhdGNoKGNvbnN0YW50cy5TVEFURV9NQUNISU5FX0FDVElPTl9MT0FEX0hJU1RPUlksIHJlc3VsdC5oZWFkZXIuZm9ybUlkKS50aGVuKChyZXNwb25zZU9iamVjdDogYW55KSA9PiB7XHJcbiAgICAgICAgICAgaWYgKHJlc3BvbnNlT2JqZWN0KSB7XHJcbiAgICAgICAgICAgICByZXNwb25zZU9iamVjdC5pdGVtcy5mb3JFYWNoKChpdGVtOiBhbnkpID0+IHtcclxuICAgICAgICAgICAgICAgaWYgKGl0ZW0uc2VxdWVuY2VOdW1iZXIgIT09ICcwJyAmJiBpdGVtLnByb2Nlc3NlZEJ5KSB7XHJcbiAgICAgICAgICAgICAgICAgY29uc3QgbmFtZSA9IGl0ZW0ucHJvY2Vzc2VkQnkuZmlyc3ROYW1lICsgJyAnICsgaXRlbS5wcm9jZXNzZWRCeS5zZWNvbmRNaWRkbGVOYW1lICsgJyAnICsgaXRlbS5wcm9jZXNzZWRCeS5mYW1pbHlOYW1lO1xyXG4gICAgICAgICAgICAgICAgIHJlc3VsdC5jb21tZW50c0Ryb3AucHVzaChuZXcgQ29tbWVudHNEcm9wKFxyXG4gICAgICAgICAgICAgICAgICAgY29uc3RhbnRzLklHQVRFX1NUQVRJQ19BU1NFVF9QUk9GSUxFX1BIT1RPX1VSTCArIGl0ZW0ucHJvY2Vzc2VkQnkuZW1haWwsXHJcbiAgICAgICAgICAgICAgICAgICBuYW1lLFxyXG4gICAgICAgICAgICAgICAgICAgaXRlbS5jb21tZW50cyxcclxuICAgICAgICAgICAgICAgICAgIGl0ZW0ubW9kaWZpZWREYXRlLFxyXG4gICAgICAgICAgICAgICAgICAgaXRlbS5hdHRhY2htZW50cyxcclxuICAgICAgICAgICAgICAgICAgIGl0ZW0ucHJvY2Vzc2VkQnkuam9iXHJcbiAgICAgICAgICAgICAgICAgKSk7XHJcbiAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgIH0pO1xyXG4gICAgICAgICAgIH1cclxuICAgICAgICAgfSk7XHJcbiAgICAgICB9XHJcbiAgICAgICBpZiAocmVzdWx0LmhlYWRlci5mb3JtSWQgJiYgL15EWUwvLnRlc3QocmVzdWx0LmhlYWRlci5mb3JtSWQpKSB7XHJcbiAgICAgICAgIHRoaXMuc3RhdGUgPSBjb25zdGFudHMuU1RBVEVfTUFDSElORV9TVEFUVVNfSURMRTtcclxuICAgICAgICAgcmVzdWx0LmNvbmZpZGVudGlhbENvbW1lbnRzID0gW107XHJcbiAgICAgICAgIHRoaXMuZGlzcGF0Y2goJ2xvYWRDb25maWRlbnRpYWxDb21tZW50cycsIHJlc3VsdC5oZWFkZXIuZm9ybUlkKS50aGVuKChyZXNwb25zZU9iamVjdDogYW55KSA9PiB7XHJcbiAgICAgICAgICAgaWYgKHJlc3BvbnNlT2JqZWN0ICYmIHJlc3BvbnNlT2JqZWN0Lml0ZW1zICYmIHJlc3BvbnNlT2JqZWN0Lml0ZW1zLmxlbmd0aCA+IDApIHtcclxuICAgICAgICAgICAgIHJlc3BvbnNlT2JqZWN0Lml0ZW1zLmZvckVhY2goKGl0ZW06IGFueSkgPT4ge1xyXG4gICAgICAgICAgICAgICByZXN1bHQuY29uZmlkZW50aWFsQ29tbWVudHMucHVzaChuZXcgQ29tbWVudHNEcm9wKFxyXG4gICAgICAgICAgICAgICAgIGNvbnN0YW50cy5JR0FURV9TVEFUSUNfQVNTRVRfUFJPRklMRV9QSE9UT19VUkwgKyBpdGVtLmVtYWlsLFxyXG4gICAgICAgICAgICAgICAgIGl0ZW0ubmFtZSxcclxuICAgICAgICAgICAgICAgICBpdGVtLmNvbW1lbnQsXHJcbiAgICAgICAgICAgICAgICAgaXRlbS5tb2RpZmllZERhdGUsXHJcbiAgICAgICAgICAgICAgICAgaXRlbS5hdHRhY2htZW50LFxyXG4gICAgICAgICAgICAgICAgIGl0ZW0ucG9zaXRpb25cclxuICAgICAgICAgICAgICAgKSk7XHJcbiAgICAgICAgICAgICB9KVxyXG4gICAgICAgICAgIH1cclxuICAgICAgICAgfSk7XHJcbiAgICAgICB9XHJcblxyXG4gICAgICAgY29uc3QgaW5ib3hUeXBlID0gdGhpcy5nZXRJbmJveFR5cGUocmVzdWx0KTtcclxuICAgICAgIGlmIChyZXN1bHQuaGVhZGVyLmZvcm1JZCAmJiAoIXRoaXMuaXNPcGVuT25JbmJveCgpKSkge1xyXG4gICAgICAgICB0aGlzLnN0YXRlID0gY29uc3RhbnRzLlNUQVRFX01BQ0hJTkVfU1RBVFVTX0lETEU7XHJcbiAgICAgICAgIHRoaXMuZGlzcGF0Y2goY29uc3RhbnRzLlNUQVRFX01BQ0hJTkVfQUNUSU9OX0dFVF9JTkJPWF9JVEVNLCByZXN1bHQuaGVhZGVyLmZvcm1JZCwgaW5ib3hUeXBlKS50aGVuKChyZXNwb25zZU9iamVjdCkgPT4ge1xyXG4gICAgICAgICAgIGlmIChyZXNwb25zZU9iamVjdCkge1xyXG4gICAgICAgICAgICAgY29uc3QgaXRlbSA9IHJlc3BvbnNlT2JqZWN0Lml0ZW07XHJcbiAgICAgICAgICAgICByZXN1bHQuaW5ib3hJdGVtID0gbmV3IEluYm94SXRlbShcclxuICAgICAgICAgICAgICAgaXRlbS5mbGFnZ2luZy5mbGFnUHJpb3JpdHksXHJcbiAgICAgICAgICAgICAgIGl0ZW0uZmxhZ2dpbmcuaXNGbGFnZ2VkLFxyXG4gICAgICAgICAgICAgICBpdGVtLmZlZWRiYWNrLmNhblJlcXVlc3RGZWVkYmFjayxcclxuICAgICAgICAgICAgICAgaXRlbS5mZWVkYmFjay5oYXNGZWVkYmFjayxcclxuICAgICAgICAgICAgICAgaXRlbS5mZWVkYmFjay5pc1BlbmRpbmcsXHJcbiAgICAgICAgICAgICAgIGl0ZW0uZmVlZGJhY2suaXNSZXF1ZXN0ZWQsXHJcbiAgICAgICAgICAgICAgIGl0ZW0uZmVlZGJhY2suaXNSZXNwb25kZWRcclxuICAgICAgICAgICAgICk7XHJcbiAgICAgICAgICAgfVxyXG4gICAgICAgICB9KTtcclxuICAgICAgIH1cclxuXHJcbiAgICAgICBsZXQgcGF5bG9hZFdvcmtmbG93U3RlcHMgPSBwYXlsb2FkLmRhdGEud29ya2Zsb3dTdGVwcztcclxuICAgICAgIGlmIChwYXlsb2FkV29ya2Zsb3dTdGVwcyAmJiBwYXlsb2FkV29ya2Zsb3dTdGVwcy5jb25zdHJ1Y3RvciA9PT0gQXJyYXkgJiYgcGF5bG9hZFdvcmtmbG93U3RlcHMubGVuZ3RoID4gMCkge1xyXG4gICAgICAgICBwYXlsb2FkV29ya2Zsb3dTdGVwcy5mb3JFYWNoKChzdGVwLCBpbmRleCkgPT4ge1xyXG4gICAgICAgICAgIGxldCBjdXJyZW50SXNSZXF1ZXN0ZXJTZW5kQmFjayA9IEpTT04uc3RyaW5naWZ5KHN0ZXAuZGV0YWlscykgPT09IEpTT04uc3RyaW5naWZ5KHt9KTtcclxuICAgICAgICAgICBsZXQgaGFzQ29tbWVudHMgPSAoIWN1cnJlbnRJc1JlcXVlc3RlclNlbmRCYWNrICYmIChzdGVwLmRldGFpbHMuY29tbWVudCB8fCBzdGVwLmNvbW1lbnQpID8gY29uc3RhbnRzLkhBU19DT01NRU5UUyA6IGNvbnN0YW50cy5OT19DT01NRU5UUyk7XHJcbiAgICAgICAgICAgbGV0IGN1cnJlbnRBY3RvciA9IChzdGVwLmFjdG9yLmVtYWlsID09PSBzdGVwLmFjdG9yLnJlY2lwaWVudC5lbWFpbCA/IHN0ZXAuYWN0b3IucmVjaXBpZW50IDogKHN0ZXAuYWN0b3IuZGVsZWdhdGUgPyBzdGVwLmFjdG9yLmRlbGVnYXRlIDogbnVsbCkpXHJcbiAgICAgICAgICAgaWYgKGhhc0NvbW1lbnRzKSB7XHJcbiAgICAgICAgICAgICByZXN1bHQuY29tbWVudHNEcm9wID0gKCFyZXN1bHQuY29tbWVudHNEcm9wID8gW10gOiByZXN1bHQuY29tbWVudHNEcm9wKTtcclxuICAgICAgICAgICAgIGlmIChzdGVwLmRldGFpbHMuYXR0YWNobWVudCAmJiBzdGVwLmRldGFpbHMuYXR0YWNobWVudC5hdHRhY2htZW50SWQgJiYgdGhpcy5jb25maWcucHJvZHVjdGlvbikge1xyXG4gICAgICAgICAgICAgICB0aGlzLnN0YXRlID0gY29uc3RhbnRzLlNUQVRFX01BQ0hJTkVfU1RBVFVTX0lETEU7XHJcbiAgICAgICAgICAgICAgIHRoaXMuZGlzcGF0Y2goY29uc3RhbnRzLlNUQVRFX01BQ0hJTkVfQUNUSU9OX0xPQURfRklMRSwgc3RlcC5kZXRhaWxzLmF0dGFjaG1lbnQuYXR0YWNobWVudElkKS50aGVuKChyZXNwb25zZU9iamVjdCkgPT4ge1xyXG4gICAgICAgICAgICAgICAgIGxldCBmaWxlSW5mb3JtYXRpb24gPSByZXNwb25zZU9iamVjdC5ib2R5O1xyXG4gICAgICAgICAgICAgICAgIGlmIChjdXJyZW50QWN0b3IpIHtcclxuICAgICAgICAgICAgICAgICAgIC8hKnRoaXMuZGlzcGF0Y2goY29uc3RhbnRzLlNUQVRFX01BQ0hJTkVfQUNUSU9OX0VNUExPWUVFX1BST0ZJTEUsIGN1cnJlbnRBY3Rvci5lbWFpbCkudGhlbigocHJvZmlsZSkgPT4ge1xyXG4gICAgICAgICAgICAgICAgICAgICByZXN1bHQuY29tbWVudHNEcm9wLnB1c2gobmV3IENvbW1lbnRzRHJvcChcclxuICAgICAgICAgICAgICAgICAgICAgICBjb25zdGFudHMuSUdBVEVfU1RBVElDX0FTU0VUX1BST0ZJTEVfUEhPVE9fVVJMICsgY3VycmVudEFjdG9yLmVtYWlsLFxyXG4gICAgICAgICAgICAgICAgICAgICAgIGN1cnJlbnRBY3Rvci5uYW1lLFxyXG4gICAgICAgICAgICAgICAgICAgICAgIChzdGVwLmRldGFpbHMuY29tbWVudCA/IHN0ZXAuZGV0YWlscy5jb21tZW50IDogKHN0ZXAuY29tbWVudCA/IHN0ZXAuY29tbWVudCA6IG51bGwpKSxcclxuICAgICAgICAgICAgICAgICAgICAgICBzdGVwLmRhdGUsXHJcbiAgICAgICAgICAgICAgICAgICAgICAgZmlsZUluZm9ybWF0aW9uLmZpbGVOYW1lICsgXCJ8ZGF0YTpcIiArIGZpbGVJbmZvcm1hdGlvbi5taW1lVHlwZSArIFwiO2Jhc2U2NCxcIiArIGZpbGVJbmZvcm1hdGlvbi5maWxlQ29udGVudHMsXHJcbiAgICAgICAgICAgICAgICAgICAgICAgcHJvZmlsZS5qb2IubmFtZVxyXG4gICAgICAgICAgICAgICAgICAgICApKVxyXG4gICAgICAgICAgICAgICAgICAgfSkqIS9cclxuICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgIH0pO1xyXG4gICAgICAgICAgICAgICB0aGlzLnN0YXRlID0gY29uc3RhbnRzLlNUQVRFX01BQ0hJTkVfU1RBVFVTX0ZFVENISU5HO1xyXG4gICAgICAgICAgICAgfSBlbHNlIGlmIChzdGVwLmRldGFpbHMuYXR0YWNobWVudElkKSB7XHJcbiAgICAgICAgICAgICAgIHRoaXMuc3RhdGUgPSBjb25zdGFudHMuU1RBVEVfTUFDSElORV9TVEFUVVNfSURMRTtcclxuICAgICAgICAgICAgICAgdGhpcy5kaXNwYXRjaChjb25zdGFudHMuU1RBVEVfTUFDSElORV9BQ1RJT05fTE9BRF9GSUxFLCBzdGVwLmRldGFpbHMuYXR0Y2htZW50SWQpLnRoZW4oKHJlc3BvbnNlT2JqZWN0KSA9PiB7XHJcbiAgICAgICAgICAgICAgICAgbGV0IGZpbGVJbmZvcm1hdGlvbiA9IHJlc3BvbnNlT2JqZWN0LmJvZHk7XHJcbiAgICAgICAgICAgICAgICAgaWYgKGN1cnJlbnRBY3Rvcikge1xyXG4gICAgICAgICAgICAgICAgICAgLyEqdGhpcy5kaXNwYXRjaChjb25zdGFudHMuU1RBVEVfTUFDSElORV9BQ1RJT05fRU1QTE9ZRUVfUFJPRklMRSwgY3VycmVudEFjdG9yLmVtYWlsKS50aGVuKChwcm9maWxlKSA9PiB7XHJcbiAgICAgICAgICAgICAgICAgICAgIHJlc3VsdC5jb21tZW50c0Ryb3AucHVzaChuZXcgQ29tbWVudHNEcm9wKFxyXG4gICAgICAgICAgICAgICAgICAgICAgIGNvbnN0YW50cy5JR0FURV9TVEFUSUNfQVNTRVRfUFJPRklMRV9QSE9UT19VUkwgKyBjdXJyZW50QWN0b3IuZW1haWwsXHJcbiAgICAgICAgICAgICAgICAgICAgICAgY3VycmVudEFjdG9yLm5hbWUsXHJcbiAgICAgICAgICAgICAgICAgICAgICAgKHN0ZXAuZGV0YWlscy5jb21tZW50ID8gc3RlcC5kZXRhaWxzLmNvbW1lbnQgOiAoc3RlcC5jb21tZW50ID8gc3RlcC5jb21tZW50IDogbnVsbCkpLFxyXG4gICAgICAgICAgICAgICAgICAgICAgIHN0ZXAuZGF0ZSxcclxuICAgICAgICAgICAgICAgICAgICAgICBmaWxlSW5mb3JtYXRpb24uZmlsZU5hbWUgKyBcInxkYXRhOlwiICsgZmlsZUluZm9ybWF0aW9uLm1pbWVUeXBlICsgXCI7YmFzZTY0LFwiICsgZmlsZUluZm9ybWF0aW9uLmZpbGVDb250ZW50cyxcclxuICAgICAgICAgICAgICAgICAgICAgICBwcm9maWxlLmpvYi5uYW1lXHJcbiAgICAgICAgICAgICAgICAgICAgICkpXHJcbiAgICAgICAgICAgICAgICAgICB9KSohL1xyXG4gICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgfSk7XHJcbiAgICAgICAgICAgICAgIHRoaXMuc3RhdGUgPSBjb25zdGFudHMuU1RBVEVfTUFDSElORV9TVEFUVVNfRkVUQ0hJTkc7XHJcbiAgICAgICAgICAgICB9IGVsc2Uge1xyXG4gICAgICAgICAgICAgICBpZiAoY3VycmVudEFjdG9yKSB7XHJcbiAgICAgICAgICAgICAgICAgdGhpcy5zdGF0ZSA9IGNvbnN0YW50cy5TVEFURV9NQUNISU5FX1NUQVRVU19JRExFO1xyXG4gICAgICAgICAgICAgICAgIC8hKnRoaXMuZGlzcGF0Y2goY29uc3RhbnRzLlNUQVRFX01BQ0hJTkVfQUNUSU9OX0VNUExPWUVFX1BST0ZJTEUsIGN1cnJlbnRBY3Rvci5lbWFpbCkudGhlbigocHJvZmlsZSkgPT4ge1xyXG4gICAgICAgICAgICAgICAgICAgcmVzdWx0LmNvbW1lbnRzRHJvcC5wdXNoKG5ldyBDb21tZW50c0Ryb3AoXHJcbiAgICAgICAgICAgICAgICAgICAgIGNvbnN0YW50cy5JR0FURV9TVEFUSUNfQVNTRVRfUFJPRklMRV9QSE9UT19VUkwgKyBjdXJyZW50QWN0b3IuZW1haWwsXHJcbiAgICAgICAgICAgICAgICAgICAgIGN1cnJlbnRBY3Rvci5uYW1lLFxyXG4gICAgICAgICAgICAgICAgICAgICAoc3RlcC5kZXRhaWxzLmNvbW1lbnQgPyBzdGVwLmRldGFpbHMuY29tbWVudCA6IChzdGVwLmNvbW1lbnQgPyBzdGVwLmNvbW1lbnQgOiBudWxsKSksXHJcbiAgICAgICAgICAgICAgICAgICAgIHN0ZXAuZGF0ZSxcclxuICAgICAgICAgICAgICAgICAgICAgbnVsbCxcclxuICAgICAgICAgICAgICAgICAgICAgcHJvZmlsZS5qb2IubmFtZVxyXG4gICAgICAgICAgICAgICAgICAgKSlcclxuICAgICAgICAgICAgICAgICB9KSohL1xyXG4gICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgIHRoaXMuc3RhdGUgPSBjb25zdGFudHMuU1RBVEVfTUFDSElORV9TVEFUVVNfRkVUQ0hJTkc7XHJcbiAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgfVxyXG5cclxuICAgICAgICAgICBpZiAod2FzU2VuZEJhY2sgJiYgc3RlcC5hY3Rvci5yZWNpcGllbnQucm9sZSA9PT0gJ1JFUVVFU1RFUicpIHtcclxuICAgICAgICAgICAgIGNvbnNvbGUubG9nKFwid2FzU2VuZEJhY2sgJiYgUkVRVUVTVEVSXCIpXHJcbiAgICAgICAgICAgICByZXN1bHQuc2VjdGlvbnMgPSBbbmV3IFNlY3Rpb24oXHJcbiAgICAgICAgICAgICAgIGNvbnN0YW50cy5TRUNUSU9OX0lEX1JFUVVFU1RfREVUQUlMUyxcclxuICAgICAgICAgICAgICAgbmV3IFNlY3Rpb25IZWFkZXIoXHJcbiAgICAgICAgICAgICAgICAgY29uc3RhbnRzLkRPTlRfU0hPVyxcclxuICAgICAgICAgICAgICAgICBjb25zdGFudHMuRE9OVF9TSE9XLFxyXG4gICAgICAgICAgICAgICAgIGNvbnN0YW50cy5ET05UX1NIT1csXHJcbiAgICAgICAgICAgICAgICAgY29uc3RhbnRzLkRPTlRfU0hPVyxcclxuICAgICAgICAgICAgICAgICBjb25zdGFudHMuRE9OVF9TSE9XLFxyXG4gICAgICAgICAgICAgICAgIGNvbnN0YW50cy5ET05UX1NIT1csXHJcbiAgICAgICAgICAgICAgICAgY29uc3RhbnRzLkRPTlRfU0hPVyxcclxuICAgICAgICAgICAgICAgICByZXF1ZXN0RGV0YWlsc0hhc0NvbW1lbnQsXHJcbiAgICAgICAgICAgICAgICAgKHBheWxvYWQuZGF0YS53b3JrZmxvd1N0ZXBzID8gY29uc3RhbnRzLlJFQURfT05MWSA6IGlzUmVhZE9ubHkpXHJcbiAgICAgICAgICAgICAgICksXHJcbiAgICAgICAgICAgICAgIHBheWxvYWQuZGF0YS5yZXF1ZXN0XHJcbiAgICAgICAgICAgICApXVxyXG4gICAgICAgICAgIH0gZWxzZSBpZiAod2FzU2VuZEJhY2spIHtcclxuICAgICAgICAgICAgIGNvbnNvbGUubG9nKFwiUG9wXCIpXHJcbiAgICAgICAgICAgICBpZiAocmVzdWx0LnNlY3Rpb25zLmxlbmd0aCA+IDEpIHtcclxuICAgICAgICAgICAgICAgcmVzdWx0LnNlY3Rpb25zLnBvcCgpO1xyXG4gICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgd2FzU2VuZEJhY2sgPSBmYWxzZTtcclxuICAgICAgICAgICB9XHJcbiAgICAgICAgICAgaWYgKHN0ZXAuZGV0YWlscy5kZWNpc2lvbiAmJiBzdGVwLmRldGFpbHMuZGVjaXNpb24ua2V5ID09PSBjb25zdGFudHMuRk9STV9TVEFUVVNfU0VORF9CQUNLKSB7XHJcbiAgICAgICAgICAgICB3YXNTZW5kQmFjayA9IHRydWU7XHJcbiAgICAgICAgICAgfSBlbHNlIGlmIChKU09OLnN0cmluZ2lmeShzdGVwLmRldGFpbHMpICE9PSBKU09OLnN0cmluZ2lmeSh7fSkpIHtcclxuICAgICAgICAgICAgIHJlc3VsdC5zZWN0aW9ucy5wdXNoKFxyXG4gICAgICAgICAgICAgICBuZXcgU2VjdGlvbihcclxuICAgICAgICAgICAgICAgICBzdGVwLmFjdG9yLnJlY2lwaWVudC5yb2xlLnRvTG93ZXJDYXNlKCkgKyBjb25zdGFudHMuU0VDVElPTl9JRF9BUFBST1ZBTF9QQVJUSUFMX05BTUUsXHJcbiAgICAgICAgICAgICAgICAgbmV3IFNlY3Rpb25IZWFkZXIoXHJcbiAgICAgICAgICAgICAgICAgICAoY3VycmVudEFjdG9yID8gdGhpcy5nZXRTaG9ydE5hbWUoY3VycmVudEFjdG9yLm5hbWUpIDogbnVsbCksXHJcbiAgICAgICAgICAgICAgICAgICBzdGVwLmRhdGUsXHJcbiAgICAgICAgICAgICAgICAgICB0aGlzLmdldFNob3J0TmFtZShzdGVwLmFjdG9yLnJlY2lwaWVudC5uYW1lKSxcclxuICAgICAgICAgICAgICAgICAgIGNvbnN0YW50cy5JR0FURV9TVEFUSUNfQVNTRVRfUFJPRklMRV9QSE9UT19VUkwgKyBzdGVwLmFjdG9yLnJlY2lwaWVudC5lbWFpbCxcclxuICAgICAgICAgICAgICAgICAgIChzdGVwLmFjdG9yLmRlbGVnYXRlICYmIHN0ZXAuYWN0b3IuZGVsZWdhdGUubmFtZSA/IHRoaXMuZ2V0U2hvcnROYW1lKHN0ZXAuYWN0b3IuZGVsZWdhdGUubmFtZSkgOiBudWxsKSxcclxuICAgICAgICAgICAgICAgICAgIChzdGVwLmFjdG9yLmRlbGVnYXRlICYmIHN0ZXAuYWN0b3IuZGVsZWdhdGUuZW1haWwgPyBjb25zdGFudHMuSUdBVEVfU1RBVElDX0FTU0VUX1BST0ZJTEVfUEhPVE9fVVJMICsgc3RlcC5hY3Rvci5kZWxlZ2F0ZS5lbWFpbCA6IG51bGwpLFxyXG4gICAgICAgICAgICAgICAgICAgc3RlcC5hY3Rvci5zdGF0dXMsXHJcbiAgICAgICAgICAgICAgICAgICBoYXNDb21tZW50cyxcclxuICAgICAgICAgICAgICAgICAgIChpbmRleCA8IHBheWxvYWRXb3JrZmxvd1N0ZXBzLmxlbmd0aCAtIDEgPyBjb25zdGFudHMuUkVBRF9PTkxZIDogaXNSZWFkT25seSlcclxuICAgICAgICAgICAgICAgICApLFxyXG4gICAgICAgICAgICAgICAgIHtkZXRhaWxzOiBzdGVwLmRldGFpbHMsIHByb2Nlc3NpbmdEYXRlOiBzdGVwLmRhdGV9XHJcbiAgICAgICAgICAgICAgIClcclxuICAgICAgICAgICAgICk7XHJcbiAgICAgICAgICAgICB0aGlzLmN1cnJlbnRTdWJtaXR0ZXIgPSB7YWN0b3I6IHN0ZXAuYWN0b3IsIHJlY2lwaWVudDogc3RlcC5yZWNpcGllbnQsIGRlbGVnYXRlOiBzdGVwLmFjdG9yLmRlbGVnYXRlfTtcclxuICAgICAgICAgICB9XHJcbiAgICAgICAgIH0pO1xyXG4gICAgICAgfVxyXG4gICAqL1xyXG4gICAgLyogQ3JlYXRlIExvdiBTZWN0aW9ucyAqL1xyXG4gICAgcmVzdWx0LmxvdnMgPSAocGF5bG9hZC5tZXRhICYmIHBheWxvYWQubWV0YS5sb3ZzID8gcGF5bG9hZC5tZXRhLmxvdnMgOiBudWxsKTtcclxuXHJcbiAgICBpZiAocGF5bG9hZC5tZXRhICYmIHBheWxvYWQubWV0YS5tZXNzYWdlcykge1xyXG4gICAgICByZXN1bHQubWVzc2FnZXMgPSBuZXcgTWVzc2FnZXMoXHJcbiAgICAgICAge30sXHJcbiAgICAgICAgW10sXHJcbiAgICAgICAgW10sXHJcbiAgICAgICAgW11cclxuICAgICAgKTtcclxuICAgICAgcGF5bG9hZC5tZXRhLm1lc3NhZ2VzLmZvckVhY2goKG1lc3NhZ2UpID0+IHtcclxuICAgICAgICByZXN1bHQubWVzc2FnZXMub3JpZ2luYWxNc2dzLnB1c2gobWVzc2FnZSk7XHJcbiAgICAgICAgcmVzdWx0Lm1lc3NhZ2VzW21lc3NhZ2UudHlwZV0ucHVzaChtZXNzYWdlLm1lc3NhZ2UpO1xyXG4gICAgICB9KTtcclxuICAgIH1cclxuXHJcbiAgICAvLyByZXN1bHQubWVzc2FnZXMgPSAocGF5bG9hZC5tZXRhICYmIHBheWxvYWQubWV0YS5tZXNzYWdlcyA/IHBheWxvYWQubWV0YS5tZXNzYWdlcyA6IG51bGwpO1xyXG4gICAgLyogRml4IGxhc3Qgc2VjdGlvbiB0byBiZSB0aGUgUk8vV00gZnJvbSB0aGUgdmFyaWFibGUgKi9cclxuICAgIHJlc3VsdC5zZWN0aW9uc1tyZXN1bHQuc2VjdGlvbnMubGVuZ3RoIC0gMV0uaGVhZGVyLnJlYWRPbmx5ID0gaXNSZWFkT25seTtcclxuICAgIHJldHVybiByZXN1bHQ7XHJcbiAgfVxyXG5cclxuICBwdWJsaWMgbG9nZ2VkSW5Vc2VySWQoKSB7XHJcbiAgICByZXR1cm4gdGhpcy51c2VyRGF0YVsnbG9nZ2VkSW5Vc2VyRW1haWwnXTtcclxuICB9XHJcblxyXG59XHJcbiJdfQ==
@@ -2,6 +2,7 @@
2
2
  * Public API Surface of bpm-core
3
3
  */
4
4
  import { InjectionToken } from '@angular/core';
5
+ export * from './lib/app/app.component';
5
6
  export * from './lib/components/shared-components';
6
7
  export * from './lib/components/app-component-sections';
7
8
  export * from './lib/pipes';
@@ -13,4 +14,4 @@ export * from './lib/hooks';
13
14
  export * from './lib/functions';
14
15
  export * from './lib/validators';
15
16
  export const MY_LIB_CONFIG_TOKEN = new InjectionToken('MyLibConfig');
16
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicHVibGljLWFwaS5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uL3Byb2plY3RzL2JwbS1jb3JlL3NyYy9wdWJsaWMtYXBpLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBOztHQUVHO0FBQ0gsT0FBTyxFQUFFLGNBQWMsRUFBRSxNQUFNLGVBQWUsQ0FBQztBQUkvQyxjQUFjLG9DQUFvQyxDQUFDO0FBQ25ELGNBQWMseUNBQXlDLENBQUM7QUFDeEQsY0FBYyxhQUFhLENBQUM7QUFDNUIsY0FBYyxZQUFZLENBQUM7QUFDM0IsY0FBYyxpQkFBaUIsQ0FBQztBQUNoQyxjQUFjLGtCQUFrQixDQUFDO0FBQ2pDLGNBQWMsZUFBZSxDQUFDO0FBQzlCLGNBQWMsYUFBYSxDQUFDO0FBQzVCLGNBQWMsaUJBQWlCLENBQUM7QUFDaEMsY0FBYyxrQkFBa0IsQ0FBQztBQUdqQyxNQUFNLENBQUMsTUFBTSxtQkFBbUIsR0FBRyxJQUFJLGNBQWMsQ0FBYyxhQUFhLENBQUMsQ0FBQyIsInNvdXJjZXNDb250ZW50IjpbIi8qXHJcbiAqIFB1YmxpYyBBUEkgU3VyZmFjZSBvZiBicG0tY29yZVxyXG4gKi9cclxuaW1wb3J0IHsgSW5qZWN0aW9uVG9rZW4gfSBmcm9tICdAYW5ndWxhci9jb3JlJztcclxuaW1wb3J0IHtNeUxpYkNvbmZpZ30gZnJvbSBcIi4vbGliL2ludGVyZmFjZXMvc2hhcmVkLmludGVyZmFjZVwiO1xyXG5cclxuXHJcbmV4cG9ydCAqIGZyb20gJy4vbGliL2NvbXBvbmVudHMvc2hhcmVkLWNvbXBvbmVudHMnO1xyXG5leHBvcnQgKiBmcm9tICcuL2xpYi9jb21wb25lbnRzL2FwcC1jb21wb25lbnQtc2VjdGlvbnMnO1xyXG5leHBvcnQgKiBmcm9tICcuL2xpYi9waXBlcyc7XHJcbmV4cG9ydCAqIGZyb20gJy4vbGliL2kxOG4nO1xyXG5leHBvcnQgKiBmcm9tICcuL2xpYi9jb25zdGFudHMnO1xyXG5leHBvcnQgKiBmcm9tICcuL2xpYi9pbnRlcmZhY2VzJztcclxuZXhwb3J0ICogZnJvbSAnLi9saWIvY2xhc3Nlcyc7XHJcbmV4cG9ydCAqIGZyb20gJy4vbGliL2hvb2tzJztcclxuZXhwb3J0ICogZnJvbSAnLi9saWIvZnVuY3Rpb25zJztcclxuZXhwb3J0ICogZnJvbSAnLi9saWIvdmFsaWRhdG9ycyc7XHJcblxyXG5cclxuZXhwb3J0IGNvbnN0IE1ZX0xJQl9DT05GSUdfVE9LRU4gPSBuZXcgSW5qZWN0aW9uVG9rZW48TXlMaWJDb25maWc+KCdNeUxpYkNvbmZpZycpO1xyXG4iXX0=
17
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicHVibGljLWFwaS5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uL3Byb2plY3RzL2JwbS1jb3JlL3NyYy9wdWJsaWMtYXBpLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBOztHQUVHO0FBQ0gsT0FBTyxFQUFFLGNBQWMsRUFBRSxNQUFNLGVBQWUsQ0FBQztBQUkvQyxjQUFjLHlCQUF5QixDQUFDO0FBQ3hDLGNBQWMsb0NBQW9DLENBQUM7QUFDbkQsY0FBYyx5Q0FBeUMsQ0FBQztBQUN4RCxjQUFjLGFBQWEsQ0FBQztBQUM1QixjQUFjLFlBQVksQ0FBQztBQUMzQixjQUFjLGlCQUFpQixDQUFDO0FBQ2hDLGNBQWMsa0JBQWtCLENBQUM7QUFDakMsY0FBYyxlQUFlLENBQUM7QUFDOUIsY0FBYyxhQUFhLENBQUM7QUFDNUIsY0FBYyxpQkFBaUIsQ0FBQztBQUNoQyxjQUFjLGtCQUFrQixDQUFDO0FBR2pDLE1BQU0sQ0FBQyxNQUFNLG1CQUFtQixHQUFHLElBQUksY0FBYyxDQUFjLGFBQWEsQ0FBQyxDQUFDIiwic291cmNlc0NvbnRlbnQiOlsiLypcclxuICogUHVibGljIEFQSSBTdXJmYWNlIG9mIGJwbS1jb3JlXHJcbiAqL1xyXG5pbXBvcnQgeyBJbmplY3Rpb25Ub2tlbiB9IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xyXG5pbXBvcnQge015TGliQ29uZmlnfSBmcm9tIFwiLi9saWIvaW50ZXJmYWNlcy9zaGFyZWQuaW50ZXJmYWNlXCI7XHJcblxyXG5cclxuZXhwb3J0ICogZnJvbSAnLi9saWIvYXBwL2FwcC5jb21wb25lbnQnO1xyXG5leHBvcnQgKiBmcm9tICcuL2xpYi9jb21wb25lbnRzL3NoYXJlZC1jb21wb25lbnRzJztcclxuZXhwb3J0ICogZnJvbSAnLi9saWIvY29tcG9uZW50cy9hcHAtY29tcG9uZW50LXNlY3Rpb25zJztcclxuZXhwb3J0ICogZnJvbSAnLi9saWIvcGlwZXMnO1xyXG5leHBvcnQgKiBmcm9tICcuL2xpYi9pMThuJztcclxuZXhwb3J0ICogZnJvbSAnLi9saWIvY29uc3RhbnRzJztcclxuZXhwb3J0ICogZnJvbSAnLi9saWIvaW50ZXJmYWNlcyc7XHJcbmV4cG9ydCAqIGZyb20gJy4vbGliL2NsYXNzZXMnO1xyXG5leHBvcnQgKiBmcm9tICcuL2xpYi9ob29rcyc7XHJcbmV4cG9ydCAqIGZyb20gJy4vbGliL2Z1bmN0aW9ucyc7XHJcbmV4cG9ydCAqIGZyb20gJy4vbGliL3ZhbGlkYXRvcnMnO1xyXG5cclxuXHJcbmV4cG9ydCBjb25zdCBNWV9MSUJfQ09ORklHX1RPS0VOID0gbmV3IEluamVjdGlvblRva2VuPE15TGliQ29uZmlnPignTXlMaWJDb25maWcnKTtcclxuIl19