commons-assessment 12.1.0 → 12.1.2-dev.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (82) hide show
  1. package/README.md +11 -0
  2. package/bundles/commons-assessment.umd.js +2304 -247
  3. package/bundles/commons-assessment.umd.js.map +1 -1
  4. package/esm2015/lib/modules/assessment-maker/assessment-maker.component.js +293 -32
  5. package/esm2015/lib/modules/assessment-maker/assessment-maker.module.js +10 -5
  6. package/esm2015/lib/modules/assessment-maker/components/add-edit-section-introduction/add-edit-section-introduction.component.js +1 -1
  7. package/esm2015/lib/modules/assessment-maker/components/assessment-builder/assessment-builder.component.js +77 -22
  8. package/esm2015/lib/modules/assessment-maker/components/question-bank-picker/question-bank-picker.component.js +276 -0
  9. package/esm2015/lib/modules/assessment-maker/components/question-details/question-details.component.js +22 -2
  10. package/esm2015/lib/modules/assessment-maker/services/assessment-builder.service.js +22 -7
  11. package/esm2015/lib/modules/assessment-maker/services/assessment-maker.service.js +32 -5
  12. package/esm2015/lib/modules/assessment-taker/assessment-taker.component.js +365 -42
  13. package/esm2015/lib/modules/assessment-taker/assessment-taker.module.js +9 -3
  14. package/esm2015/lib/modules/assessment-taker/components/proctoring-consent/proctoring-consent.component.js +137 -0
  15. package/esm2015/lib/modules/assessment-taker/components/proctoring-result/proctoring-result.component.js +177 -0
  16. package/esm2015/lib/modules/assessment-taker/components/question-type-date-picker/question-type-date-picker.component.js +2 -3
  17. package/esm2015/lib/modules/assessment-taker/components/question-type-editor/question-type-editor.component.js +1 -1
  18. package/esm2015/lib/modules/assessment-taker/components/question-type-file-upload/question-type-file-upload.component.js +5 -2
  19. package/esm2015/lib/modules/assessment-taker/components/question-type-long/question-type-long.component.js +1 -1
  20. package/esm2015/lib/modules/assessment-taker/components/question-type-multiselect/question-type-multiselect.component.js +7 -3
  21. package/esm2015/lib/modules/assessment-taker/components/question-type-objective/question-type-objective.component.js +7 -3
  22. package/esm2015/lib/modules/assessment-taker/components/question-type-preference/question-type-preference.component.js +9 -4
  23. package/esm2015/lib/modules/assessment-taker/components/question-type-short/question-type-short.component.js +78 -8
  24. package/esm2015/lib/modules/assessment-taker/components/section-instructions/section-instructions.component.js +1 -1
  25. package/esm2015/lib/modules/assessment-taker/services/assessment-taker.service.js +18 -3
  26. package/esm2015/lib/modules/assessment-taker/services/proctoring.service.js +125 -0
  27. package/esm2015/lib/modules/assessment-taker/services/response-builder.service.js +15 -1
  28. package/esm2015/lib/modules/question-bank/question-bank.component.js +313 -0
  29. package/esm2015/lib/modules/question-bank/question-bank.module.js +45 -0
  30. package/esm2015/lib/shared/components/confirmation-dialog/confirmation-dialog.component.js +56 -0
  31. package/esm2015/lib/shared/components/skill-allocation/skill-allocation.component.js +5 -2
  32. package/esm2015/lib/shared/controllers.js +18 -4
  33. package/esm2015/lib/shared/interfaces/assessment.interface.js +1 -1
  34. package/esm2015/lib/shared/interfaces/proctoring.interface.js +2 -0
  35. package/esm2015/lib/shared/material-modules.js +1 -16
  36. package/esm2015/lib/shared/shared.module.js +8 -3
  37. package/esm2015/lib/shared/utils.js +19 -1
  38. package/esm2015/public-api.js +4 -1
  39. package/fesm2015/commons-assessment.js +2071 -152
  40. package/fesm2015/commons-assessment.js.map +1 -1
  41. package/lib/modules/assessment-maker/assessment-maker.component.d.ts +40 -2
  42. package/lib/modules/assessment-maker/assessment-maker.module.d.ts +6 -5
  43. package/lib/modules/assessment-maker/components/assessment-builder/assessment-builder.component.d.ts +7 -0
  44. package/lib/modules/assessment-maker/components/question-bank-picker/question-bank-picker.component.d.ts +81 -0
  45. package/lib/modules/assessment-maker/components/question-details/question-details.component.d.ts +6 -1
  46. package/lib/modules/assessment-maker/services/assessment-builder.service.d.ts +10 -3
  47. package/lib/modules/assessment-maker/services/assessment-maker.service.d.ts +15 -11
  48. package/lib/modules/assessment-taker/assessment-taker.component.d.ts +81 -2
  49. package/lib/modules/assessment-taker/assessment-taker.module.d.ts +7 -5
  50. package/lib/modules/assessment-taker/components/proctoring-consent/proctoring-consent.component.d.ts +39 -0
  51. package/lib/modules/assessment-taker/components/proctoring-result/proctoring-result.component.d.ts +82 -0
  52. package/lib/modules/assessment-taker/components/question-type-file-upload/question-type-file-upload.component.d.ts +1 -0
  53. package/lib/modules/assessment-taker/components/question-type-multiselect/question-type-multiselect.component.d.ts +1 -0
  54. package/lib/modules/assessment-taker/components/question-type-objective/question-type-objective.component.d.ts +1 -0
  55. package/lib/modules/assessment-taker/components/question-type-preference/question-type-preference.component.d.ts +1 -0
  56. package/lib/modules/assessment-taker/components/question-type-short/question-type-short.component.d.ts +14 -2
  57. package/lib/modules/assessment-taker/services/assessment-taker.service.d.ts +5 -0
  58. package/lib/modules/assessment-taker/services/proctoring.service.d.ts +40 -0
  59. package/lib/modules/assessment-taker/services/response-builder.service.d.ts +9 -0
  60. package/lib/modules/question-bank/question-bank.component.d.ts +65 -0
  61. package/lib/modules/question-bank/question-bank.module.d.ts +12 -0
  62. package/lib/shared/components/confirmation-dialog/confirmation-dialog.component.d.ts +36 -0
  63. package/lib/shared/components/skill-allocation/skill-allocation.component.d.ts +1 -0
  64. package/lib/shared/controllers.d.ts +14 -1
  65. package/lib/shared/interfaces/assessment.interface.d.ts +8 -0
  66. package/lib/shared/interfaces/proctoring.interface.d.ts +101 -0
  67. package/lib/shared/material-modules.d.ts +5 -8
  68. package/lib/shared/shared.module.d.ts +5 -4
  69. package/lib/shared/utils.d.ts +4 -0
  70. package/package.json +1 -1
  71. package/public-api.d.ts +3 -0
  72. package/src/lib/assets/images/arrow-down-blue.svg +3 -0
  73. package/src/lib/assets/images/arrow-up-blue.svg +3 -0
  74. package/src/lib/assets/images/file-import.svg +11 -0
  75. package/src/lib/assets/images/plus-white.svg +1 -0
  76. package/src/lib/assets/images/proctoring.svg +3 -0
  77. package/src/lib/assets/images/user.svg +3 -0
  78. package/src/lib/assets/json/imageConfig.json +7 -1
  79. package/src/lib/assets/json/labelConfig.json +107 -2
  80. package/src/lib/assets/theme/_theme.global.scss +6 -0
  81. package/src/lib/assets/theme/_theme.scss +17 -346
  82. package/src/lib/assets/theme/styles.scss +13 -0
@@ -1,9 +1,12 @@
1
1
  import { Component, EventEmitter, Input, Output } from '@angular/core';
2
- import { forkJoin } from 'rxjs';
2
+ import { forkJoin, of } from 'rxjs';
3
+ import { catchError } from 'rxjs/operators';
3
4
  import { moveItemInArray } from '@angular/cdk/drag-drop';
4
5
  import { AddEditSectionIntroductionComponent } from './components/add-edit-section-introduction/add-edit-section-introduction.component';
5
6
  import { AssessmentBuilderComponent } from './components/assessment-builder/assessment-builder.component';
6
- import { sortByOrder } from '../../shared/utils';
7
+ import { QuestionBankPickerComponent } from './components/question-bank-picker/question-bank-picker.component';
8
+ import { ConfirmationDialogComponent } from '../../shared/components/confirmation-dialog/confirmation-dialog.component';
9
+ import { sortByOrder, removeKeyDeep } from '../../shared/utils';
7
10
  import * as i0 from "@angular/core";
8
11
  import * as i1 from "./services/assessment-maker.service";
9
12
  import * as i2 from "./services/assessment-builder.service";
@@ -13,8 +16,8 @@ import * as i5 from "@angular/material/menu";
13
16
  import * as i6 from "./components/question-details/question-details.component";
14
17
  import * as i7 from "@angular/material/progress-spinner";
15
18
  import * as i8 from "@angular/common";
16
- import * as i9 from "@angular/cdk/drag-drop";
17
- import * as i10 from "@angular/forms";
19
+ import * as i9 from "@angular/forms";
20
+ import * as i10 from "@angular/cdk/drag-drop";
18
21
  export class AssessmentMakerComponent {
19
22
  constructor(assessmentMakerService, assessmentBuilderService, dialog) {
20
23
  this.assessmentMakerService = assessmentMakerService;
@@ -30,23 +33,34 @@ export class AssessmentMakerComponent {
30
33
  this.predefinedAssessmentInstance = {};
31
34
  this.enableSkillsToQuestionMapping = false;
32
35
  this.minimumRequiredSections = 0;
36
+ this.checkForResponses = false;
37
+ this.showProctoringToggle = false;
38
+ this.showTimeInput = false;
39
+ this.enableImportFromQuestionBank = false;
33
40
  this.assessmentIdChange = new EventEmitter();
34
41
  this.assessmentInstanceIdChange = new EventEmitter();
35
42
  this.snackbarMessage = new EventEmitter();
36
43
  this.showLoader = false;
37
44
  this.questionBank = {};
45
+ this.lockedQuestionsMap = {};
38
46
  this.assessmentQuestionPaperData = { id: 0, questionPaperSectionList: [] };
39
47
  this.configsLoaded = false;
40
48
  this.isSubmitting = false;
41
49
  this.skillsList = [];
50
+ this.responseCount = 0;
51
+ this.proctoringEnabled = false;
52
+ this.durationMinutes = null;
53
+ this.PROCTORING_CONFIG_KEY = 'assessment.config.is-proctoring-enabled';
42
54
  }
43
55
  ngOnInit() {
44
- var _a, _b, _c, _d;
56
+ var _a, _b, _c, _d, _e;
45
57
  this.assessmentBuilderService.setDefaultAssessmentDTO(this.defaultAssessmentDTO);
58
+ this.proctoringEnabled = this.readProctoringConfig(this.defaultAssessmentDTO);
59
+ this.readDuration(((_a = this.assessmentContext) === null || _a === void 0 ? void 0 : _a.assessmentInstanceDTO) || this.predefinedAssessmentInstance);
46
60
  this.getConfigsFromJSON();
47
61
  if (this.assessmentContext) {
48
- this.assessmentInstanceId = ((_b = (_a = this.assessmentContext) === null || _a === void 0 ? void 0 : _a.assessmentInstanceDTO) === null || _b === void 0 ? void 0 : _b.id) || this.assessmentInstanceId;
49
- this.assessmentId = ((_d = (_c = this.assessmentContext) === null || _c === void 0 ? void 0 : _c.assessment) === null || _d === void 0 ? void 0 : _d.id) || this.assessmentId;
62
+ this.assessmentInstanceId = ((_c = (_b = this.assessmentContext) === null || _b === void 0 ? void 0 : _b.assessmentInstanceDTO) === null || _c === void 0 ? void 0 : _c.id) || this.assessmentInstanceId;
63
+ this.assessmentId = ((_e = (_d = this.assessmentContext) === null || _d === void 0 ? void 0 : _d.assessment) === null || _e === void 0 ? void 0 : _e.id) || this.assessmentId;
50
64
  }
51
65
  if (this.assessmentId) {
52
66
  this.showLoader = true;
@@ -55,6 +69,42 @@ export class AssessmentMakerComponent {
55
69
  if (this.enableSkillsToQuestionMapping) {
56
70
  this.getSkillsList();
57
71
  }
72
+ if (this.checkForResponses && this.assessmentInstanceId) {
73
+ this.loadResponseCount();
74
+ }
75
+ }
76
+ loadResponseCount() {
77
+ this.assessmentMakerService.getResponseCount(this.assessmentInstanceId).subscribe({
78
+ next: (count) => this.responseCount = Number(count) || 0,
79
+ error: () => this.responseCount = 0 // fail open: don't warn if the count can't be fetched
80
+ });
81
+ }
82
+ /**
83
+ * Runs `action`, but first warns the user if the assessment already has responses
84
+ * (only when `checkForResponses` is enabled and the count is greater than 0).
85
+ */
86
+ confirmResponsesWarning(action) {
87
+ if (this.responseCount > 0) {
88
+ const dialogRef = this.dialog.open(ConfirmationDialogComponent, {
89
+ autoFocus: false,
90
+ maxWidth: '95%',
91
+ width: '32rem',
92
+ panelClass: ['assessment-dialog'],
93
+ data: {
94
+ message: this.labelConfig['COMMONS_ASSESSMENT.WARNING.RESPONSES_EXIST'],
95
+ confirmLabel: this.labelConfig['COMMONS_ASSESSMENT.LABEL.PROCEED'],
96
+ cancelLabel: this.labelConfig['COMMONS_ASSESSMENT.LABEL.CANCEL']
97
+ }
98
+ });
99
+ dialogRef.afterClosed().subscribe((confirmed) => {
100
+ if (confirmed) {
101
+ action();
102
+ }
103
+ });
104
+ }
105
+ else {
106
+ action();
107
+ }
58
108
  }
59
109
  getConfigsFromJSON() {
60
110
  var _a;
@@ -82,20 +132,26 @@ export class AssessmentMakerComponent {
82
132
  });
83
133
  }
84
134
  loadAssessmentData() {
85
- var _a, _b;
135
+ var _a, _b, _c, _d;
86
136
  if (this.assessmentContext) {
87
137
  this.questionBank = Object.assign(Object.assign({}, this.questionBank), (((_a = this.assessmentContext) === null || _a === void 0 ? void 0 : _a.questionDTOMap) || {}));
88
138
  this.updateAssessmentQuestionPaperData((_b = this.assessmentContext) === null || _b === void 0 ? void 0 : _b.assessmentQuestionPaperDTO);
139
+ this.proctoringEnabled = this.readProctoringConfig((_c = this.assessmentContext) === null || _c === void 0 ? void 0 : _c.assessment);
140
+ this.readDuration((_d = this.assessmentContext) === null || _d === void 0 ? void 0 : _d.assessmentInstanceDTO);
89
141
  this.showLoader = false;
142
+ this.checkAssessmentQuestionsLocked();
90
143
  }
91
144
  else {
92
145
  this.assessmentMakerService.getAssessmentContext({ assessmentIds: [this.assessmentId] }).subscribe({
93
146
  next: (res) => {
94
- var _a, _b;
147
+ var _a, _b, _c, _d;
95
148
  this.assessmentContext = res === null || res === void 0 ? void 0 : res[0];
96
149
  this.questionBank = Object.assign(Object.assign({}, this.questionBank), (((_a = this.assessmentContext) === null || _a === void 0 ? void 0 : _a.questionDTOMap) || {}));
97
150
  this.updateAssessmentQuestionPaperData((_b = this.assessmentContext) === null || _b === void 0 ? void 0 : _b.assessmentQuestionPaperDTO);
151
+ this.proctoringEnabled = this.readProctoringConfig((_c = this.assessmentContext) === null || _c === void 0 ? void 0 : _c.assessment);
152
+ this.readDuration((_d = this.assessmentContext) === null || _d === void 0 ? void 0 : _d.assessmentInstanceDTO);
98
153
  this.showLoader = false;
154
+ this.checkAssessmentQuestionsLocked();
99
155
  },
100
156
  error: (error) => {
101
157
  console.error(error);
@@ -105,6 +161,23 @@ export class AssessmentMakerComponent {
105
161
  });
106
162
  }
107
163
  }
164
+ checkAssessmentQuestionsLocked() {
165
+ const questionIds = Object.keys(this.questionBank || {})
166
+ .map(id => Number(id))
167
+ .filter(id => id > 0);
168
+ if (questionIds.length === 0)
169
+ return;
170
+ this.assessmentMakerService.checkQuestionsLocked(questionIds, 'ASSESSMENT_INSTANCE')
171
+ .pipe(catchError(() => of({})))
172
+ .subscribe((lockedMap) => {
173
+ Object.keys(lockedMap || {}).forEach(k => {
174
+ this.lockedQuestionsMap[Number(k)] = !!lockedMap[k];
175
+ });
176
+ });
177
+ }
178
+ isQuestionLocked(questionId) {
179
+ return questionId != null ? !!this.lockedQuestionsMap[questionId] : false;
180
+ }
108
181
  generateQuestionBank() {
109
182
  var _a, _b;
110
183
  let childQuestionIds = [];
@@ -133,6 +206,7 @@ export class AssessmentMakerComponent {
133
206
  res === null || res === void 0 ? void 0 : res.forEach((question) => {
134
207
  this.questionBank[question.id] = question;
135
208
  });
209
+ this.checkAssessmentQuestionsLocked();
136
210
  },
137
211
  error: (error) => {
138
212
  console.error(error);
@@ -185,23 +259,45 @@ export class AssessmentMakerComponent {
185
259
  });
186
260
  }
187
261
  deleteChildQuestion(option, childIdToRemove) {
188
- if (option.childQuestionList) {
189
- const idToRemove = typeof childIdToRemove === 'object' ? childIdToRemove === null || childIdToRemove === void 0 ? void 0 : childIdToRemove.id : childIdToRemove;
190
- option.childQuestionList = option.childQuestionList.filter((ccq) => {
191
- const id = typeof ccq === 'object' ? ccq === null || ccq === void 0 ? void 0 : ccq.id : ccq;
192
- return id !== idToRemove;
193
- });
194
- }
262
+ this.confirmResponsesWarning(() => {
263
+ if (option.childQuestionList) {
264
+ const idToRemove = typeof childIdToRemove === 'object' ? childIdToRemove === null || childIdToRemove === void 0 ? void 0 : childIdToRemove.id : childIdToRemove;
265
+ option.childQuestionList = option.childQuestionList.filter((ccq) => {
266
+ const id = typeof ccq === 'object' ? ccq === null || ccq === void 0 ? void 0 : ccq.id : ccq;
267
+ return id !== idToRemove;
268
+ });
269
+ }
270
+ });
195
271
  }
196
272
  deleteParentQuestion(sectionQuestion) {
197
- sectionQuestion.isActive = false;
198
- this.patchAssessmentAndQuestionPaper(this.labelConfig['COMMONS_ASSESSMENT.TOAST.QUESTION_DELETED_SUCCESS']);
273
+ this.confirmResponsesWarning(() => {
274
+ sectionQuestion.isActive = false;
275
+ this.patchAssessmentAndQuestionPaper(this.labelConfig['COMMONS_ASSESSMENT.TOAST.QUESTION_DELETED_SUCCESS']);
276
+ });
199
277
  }
200
278
  deleteSection(section) {
201
- section.isActive = false;
202
- this.patchAssessmentAndQuestionPaper(this.labelConfig['COMMONS_ASSESSMENT.TOAST.SECTION_DELETED_SUCCESS']);
279
+ this.confirmResponsesWarning(() => {
280
+ section.isActive = false;
281
+ this.patchAssessmentAndQuestionPaper(this.labelConfig['COMMONS_ASSESSMENT.TOAST.SECTION_DELETED_SUCCESS']);
282
+ });
203
283
  }
204
284
  createEditQuestion(sectionDetails, sectionQuestionId, isChild) {
285
+ if (sectionQuestionId != null && this.lockedQuestionsMap[sectionQuestionId]) {
286
+ this.snackbarMessage.emit({
287
+ message: this.labelConfig['COMMONS_ASSESSMENT.WARNING.QUESTION_LOCKED'] || 'This question is part of a published assessment and cannot be edited.',
288
+ type: 'info'
289
+ });
290
+ return;
291
+ }
292
+ // Editing an existing question is gated by the responses warning; adding a new one is not.
293
+ if (sectionQuestionId != null) {
294
+ this.confirmResponsesWarning(() => this.openQuestionBuilder(sectionDetails, sectionQuestionId, isChild));
295
+ }
296
+ else {
297
+ this.openQuestionBuilder(sectionDetails, sectionQuestionId, isChild);
298
+ }
299
+ }
300
+ openQuestionBuilder(sectionDetails, sectionQuestionId, isChild) {
205
301
  const questionDetails = this.getQuestionFromBank(sectionQuestionId);
206
302
  const dialogRef = this.dialog.open(AssessmentBuilderComponent, {
207
303
  autoFocus: false,
@@ -223,7 +319,8 @@ export class AssessmentMakerComponent {
223
319
  assessmentQuestionPaperData: this.assessmentQuestionPaperData,
224
320
  assessmentId: this.assessmentId,
225
321
  skillsList: this.skillsList,
226
- snackbarMessageEmitter: this.snackbarMessage
322
+ snackbarMessageEmitter: this.snackbarMessage,
323
+ isLocked: sectionQuestionId != null ? !!this.lockedQuestionsMap[sectionQuestionId] : false
227
324
  },
228
325
  });
229
326
  dialogRef.afterClosed().subscribe((res) => {
@@ -251,6 +348,7 @@ export class AssessmentMakerComponent {
251
348
  this.questionBank = Object.assign(Object.assign({}, this.questionBank), ((res === null || res === void 0 ? void 0 : res.questionMap) || {}));
252
349
  this.updateAssessmentQuestionPaperData(res === null || res === void 0 ? void 0 : res.questionPaper);
253
350
  this.generateQuestionBank();
351
+ this.checkAssessmentQuestionsLocked();
254
352
  this.patchAssessmentAndQuestionPaper();
255
353
  this.snackbarMessage.emit({ message: this.labelConfig['COMMONS_ASSESSMENT.TOAST.SECTION_DUPLICATED_SUCCESS'], type: 'success' });
256
354
  },
@@ -270,6 +368,7 @@ export class AssessmentMakerComponent {
270
368
  this.questionBank = Object.assign(Object.assign({}, this.questionBank), ((res === null || res === void 0 ? void 0 : res.questionMap) || {}));
271
369
  this.updateAssessmentQuestionPaperData(res === null || res === void 0 ? void 0 : res.questionPaper);
272
370
  this.generateQuestionBank();
371
+ this.checkAssessmentQuestionsLocked();
273
372
  this.patchAssessmentAndQuestionPaper();
274
373
  this.snackbarMessage.emit({ message: this.labelConfig['COMMONS_ASSESSMENT.TOAST.QUESTION_DUPLICATED_SUCCESS'], type: 'success' });
275
374
  },
@@ -281,15 +380,56 @@ export class AssessmentMakerComponent {
281
380
  }
282
381
  });
283
382
  }
383
+ readProctoringConfig(assessment) {
384
+ var _a, _b;
385
+ return ((_b = (_a = assessment === null || assessment === void 0 ? void 0 : assessment.assessmentConfigs) === null || _a === void 0 ? void 0 : _a.find(c => c.configKey === this.PROCTORING_CONFIG_KEY)) === null || _b === void 0 ? void 0 : _b.configValue) === '1';
386
+ }
387
+ /** Initializes the minutes input from an existing instance's duration (seconds). */
388
+ readDuration(instance) {
389
+ var _a;
390
+ const seconds = (_a = instance === null || instance === void 0 ? void 0 : instance.duration) !== null && _a !== void 0 ? _a : 0;
391
+ // keep fractional minutes (e.g. 30s -> 0.5) rather than rounding to whole minutes
392
+ this.durationMinutes = seconds > 0 ? Math.round((seconds / 60) * 100) / 100 : null;
393
+ }
394
+ /** Blocks characters that would enter a negative/exponent value in the duration input. */
395
+ blockNegativeKeys(event) {
396
+ if (['-', '+', 'e', 'E'].includes(event.key)) {
397
+ event.preventDefault();
398
+ }
399
+ }
400
+ /** Duration to persist, in SECONDS (the unit the taker's timer uses). 0 means untimed. */
401
+ get durationSeconds() {
402
+ return this.durationMinutes ? Math.round(this.durationMinutes * 60) : 0;
403
+ }
404
+ /**
405
+ * Returns the assessment configs with the proctoring flag ('1'/'0') upserted, preserving
406
+ * any other existing configs. Returns undefined when the proctoring toggle is not enabled
407
+ * so the saved payload is unchanged for consumers not using proctoring.
408
+ */
409
+ buildProctoringConfigs() {
410
+ var _a, _b, _c, _d, _e;
411
+ if (!this.showProctoringToggle) {
412
+ return undefined;
413
+ }
414
+ const base = (_e = (_c = (_b = (_a = this.assessmentContext) === null || _a === void 0 ? void 0 : _a.assessment) === null || _b === void 0 ? void 0 : _b.assessmentConfigs) !== null && _c !== void 0 ? _c : (_d = this.defaultAssessmentDTO) === null || _d === void 0 ? void 0 : _d.assessmentConfigs) !== null && _e !== void 0 ? _e : [];
415
+ const configs = base.map(c => (Object.assign({}, c)));
416
+ const value = this.proctoringEnabled ? '1' : '0';
417
+ const existing = configs.find(c => c.configKey === this.PROCTORING_CONFIG_KEY);
418
+ if (existing) {
419
+ existing.configValue = value;
420
+ }
421
+ else {
422
+ configs.push({ configKey: this.PROCTORING_CONFIG_KEY, configValue: value });
423
+ }
424
+ return configs;
425
+ }
284
426
  patchAssessmentAndQuestionPaper(successMessage) {
285
- const payload = {
286
- questionPaper: this.assessmentBuilderService.generateQuestionPaperDTO(this.assessmentQuestionPaperData, this.questionBank),
287
- assessment: this.assessmentBuilderService.generateAssessmentDTO(this.assessmentId, this.assessmentQuestionPaperData)
288
- };
427
+ const payload = Object.assign({ questionPaper: this.assessmentBuilderService.generateQuestionPaperDTO(this.assessmentQuestionPaperData, this.questionBank), assessment: this.assessmentBuilderService.generateAssessmentDTO(this.assessmentId, this.assessmentQuestionPaperData, this.buildProctoringConfigs()) }, this.assessmentBuilderService.buildInstancePatch(this.showTimeInput, this.assessmentInstanceId, this.durationSeconds));
289
428
  this.assessmentMakerService.patchAssessmentAndQuestionPaper(payload).subscribe({
290
429
  next: (res) => {
291
430
  this.updateAssessmentQuestionPaperData(res === null || res === void 0 ? void 0 : res.questionPaper);
292
431
  this.generateQuestionBank();
432
+ this.checkAssessmentQuestionsLocked();
293
433
  if (successMessage) {
294
434
  this.snackbarMessage.emit({ message: successMessage, type: 'success' });
295
435
  }
@@ -305,10 +445,7 @@ export class AssessmentMakerComponent {
305
445
  if (this.isSubmitting)
306
446
  return;
307
447
  this.isSubmitting = true;
308
- const payload = {
309
- questionPaper: this.assessmentBuilderService.generateQuestionPaperDTO(this.assessmentQuestionPaperData, this.questionBank),
310
- assessment: this.assessmentBuilderService.generateAssessmentDTO(this.assessmentId, this.assessmentQuestionPaperData)
311
- };
448
+ const payload = Object.assign({ questionPaper: this.assessmentBuilderService.generateQuestionPaperDTO(this.assessmentQuestionPaperData, this.questionBank), assessment: this.assessmentBuilderService.generateAssessmentDTO(this.assessmentId, this.assessmentQuestionPaperData, this.buildProctoringConfigs()) }, this.assessmentBuilderService.buildInstancePatch(this.showTimeInput, this.assessmentInstanceId, this.durationSeconds));
312
449
  if (((_c = (_b = (_a = payload === null || payload === void 0 ? void 0 : payload.questionPaper) === null || _a === void 0 ? void 0 : _a.questionPaperSectionList) === null || _b === void 0 ? void 0 : _b.length) !== null && _c !== void 0 ? _c : 0) < this.minimumRequiredSections) {
313
450
  this.snackbarMessage.emit({ message: (_d = this.labelConfig['COMMONS_ASSESSMENT.TOAST.MINIMUM_REQUIRED_SECTIONS_ERROR']) === null || _d === void 0 ? void 0 : _d.replace('$Count', String(this.minimumRequiredSections)), type: 'info' });
314
451
  this.isSubmitting = false;
@@ -339,7 +476,7 @@ export class AssessmentMakerComponent {
339
476
  });
340
477
  }
341
478
  createAssessmentInstance() {
342
- const payload = this.assessmentBuilderService.generateAssessmentInstanceDTO(this.assessmentId, this.predefinedAssessmentInstance);
479
+ const payload = this.assessmentBuilderService.generateAssessmentInstanceDTO(this.assessmentId, this.predefinedAssessmentInstance, this.showTimeInput ? this.durationSeconds : undefined);
343
480
  this.assessmentMakerService.createAssessmentInstance(payload).subscribe({
344
481
  next: (res) => {
345
482
  this.assessmentInstanceId = res;
@@ -421,9 +558,123 @@ export class AssessmentMakerComponent {
421
558
  }
422
559
  });
423
560
  }
561
+ trackBySectionId(index, section) {
562
+ return (section === null || section === void 0 ? void 0 : section.id) != null ? 's' + section.id : 'i' + index;
563
+ }
564
+ trackBySectionQuestion(index, sq) {
565
+ if ((sq === null || sq === void 0 ? void 0 : sq.questionId) != null)
566
+ return 'q' + sq.questionId;
567
+ if ((sq === null || sq === void 0 ? void 0 : sq.id) != null)
568
+ return 's' + sq.id;
569
+ return 'i' + index;
570
+ }
571
+ collectExistingQuestionIds() {
572
+ var _a, _b;
573
+ const ids = new Set();
574
+ (_b = (_a = this.assessmentQuestionPaperData) === null || _a === void 0 ? void 0 : _a.questionPaperSectionList) === null || _b === void 0 ? void 0 : _b.forEach(section => {
575
+ var _a;
576
+ if (section.isActive === false)
577
+ return;
578
+ (_a = section.sectionQuestionsList) === null || _a === void 0 ? void 0 : _a.forEach(sq => {
579
+ var _a;
580
+ if (sq.isActive === false)
581
+ return;
582
+ const qId = sq.questionId || ((_a = sq.question) === null || _a === void 0 ? void 0 : _a.id);
583
+ if (qId)
584
+ ids.add(qId);
585
+ });
586
+ });
587
+ return ids;
588
+ }
589
+ openQuestionBankPicker(section) {
590
+ var _a, _b, _c, _d;
591
+ const existingQuestionIds = this.collectExistingQuestionIds();
592
+ const config = this.questionBankConfig || {
593
+ domain: (_a = this.defaultAssessmentDTO) === null || _a === void 0 ? void 0 : _a.domain,
594
+ tenant: (_b = this.defaultAssessmentDTO) === null || _b === void 0 ? void 0 : _b.tenant
595
+ };
596
+ const dialogRef = this.dialog.open(QuestionBankPickerComponent, {
597
+ autoFocus: false,
598
+ position: { right: '0' },
599
+ maxWidth: '100%',
600
+ width: '55rem',
601
+ height: '100vh',
602
+ panelClass: ['assessment-dialog', 'assessment-dialog-slider-animation'],
603
+ hasBackdrop: true,
604
+ data: {
605
+ questionBankConfig: config,
606
+ existingQuestionIds,
607
+ labelConfig: this.labelConfig,
608
+ imageConfig: this.imageConfig,
609
+ questionTypes: this.questionTypes,
610
+ targetSectionName: (_d = (_c = section === null || section === void 0 ? void 0 : section.qpsName) === null || _c === void 0 ? void 0 : _c[0]) === null || _d === void 0 ? void 0 : _d.text
611
+ }
612
+ });
613
+ dialogRef.afterClosed().subscribe((selectedQuestions) => {
614
+ if (selectedQuestions === null || selectedQuestions === void 0 ? void 0 : selectedQuestions.length) {
615
+ this.importQuestionsToSection(section, selectedQuestions);
616
+ }
617
+ });
618
+ }
619
+ importQuestionsToSection(section, questions) {
620
+ if (!this.assessmentQuestionPaperData) {
621
+ this.assessmentQuestionPaperData = { id: 0, questionPaperSectionList: [] };
622
+ }
623
+ if (!this.assessmentQuestionPaperData.questionPaperSectionList) {
624
+ this.assessmentQuestionPaperData.questionPaperSectionList = [];
625
+ }
626
+ if (!section) {
627
+ const list = this.assessmentQuestionPaperData.questionPaperSectionList;
628
+ const lastOrder = list.length ? (list[list.length - 1].orderNo || 0) : 0;
629
+ section = this.assessmentBuilderService.createNewSection(lastOrder + 1);
630
+ this.assessmentQuestionPaperData.questionPaperSectionList.push(section);
631
+ }
632
+ if (!section.sectionQuestionsList) {
633
+ section.sectionQuestionsList = [];
634
+ }
635
+ questions.forEach(question => {
636
+ var _a, _b;
637
+ const cleanQuestion = removeKeyDeep(question, 'uuid');
638
+ if (cleanQuestion.id) {
639
+ this.questionBank[cleanQuestion.id] = cleanQuestion;
640
+ }
641
+ const sectionQuestion = this.assessmentBuilderService.generateSectionQuestion(cleanQuestion);
642
+ sectionQuestion.orderNo = (((_a = section.sectionQuestionsList) === null || _a === void 0 ? void 0 : _a.length) || 0) + 1;
643
+ (_b = section.sectionQuestionsList) === null || _b === void 0 ? void 0 : _b.push(sectionQuestion);
644
+ });
645
+ const successMsg = this.labelConfig['COMMONS_ASSESSMENT.TOAST.QUESTIONS_IMPORTED_SUCCESS'] || 'Questions imported successfully';
646
+ if (this.assessmentId) {
647
+ this.patchAssessmentAndQuestionPaper(successMsg);
648
+ }
649
+ else {
650
+ this.createAssessmentAndQuestionPaperOnImport(successMsg);
651
+ }
652
+ }
653
+ createAssessmentAndQuestionPaperOnImport(successMessage) {
654
+ const payload = Object.assign({ questionPaper: this.assessmentBuilderService.generateQuestionPaperDTO(this.assessmentQuestionPaperData, this.questionBank), assessment: this.assessmentBuilderService.generateAssessmentDTO(this.assessmentId, this.assessmentQuestionPaperData, this.buildProctoringConfigs()) }, this.assessmentBuilderService.buildInstancePatch(this.showTimeInput, this.assessmentInstanceId, this.durationSeconds));
655
+ this.assessmentMakerService.createAssessmentAndQuestionPaper(payload).subscribe({
656
+ next: (res) => {
657
+ var _a;
658
+ if ((_a = res === null || res === void 0 ? void 0 : res.assessment) === null || _a === void 0 ? void 0 : _a.id) {
659
+ this.assessmentId = res.assessment.id;
660
+ this.assessmentIdChange.emit(this.assessmentId);
661
+ }
662
+ this.questionBank = Object.assign(Object.assign({}, this.questionBank), ((res === null || res === void 0 ? void 0 : res.questionMap) || {}));
663
+ this.updateAssessmentQuestionPaperData(res === null || res === void 0 ? void 0 : res.questionPaper);
664
+ this.generateQuestionBank();
665
+ this.checkAssessmentQuestionsLocked();
666
+ if (successMessage) {
667
+ this.snackbarMessage.emit({ message: successMessage, type: 'success' });
668
+ }
669
+ },
670
+ error: (error) => {
671
+ this.snackbarMessage.emit({ message: this.labelConfig['COMMONS_ASSESSMENT.TOAST.ERROR_DEFAULT'] || 'Failed to save imported questions', type: 'error' });
672
+ }
673
+ });
674
+ }
424
675
  }
425
676
  AssessmentMakerComponent.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "12.2.17", ngImport: i0, type: AssessmentMakerComponent, deps: [{ token: i1.AssessmentMakerService }, { token: i2.AssessmentBuilderService }, { token: i3.MatDialog }], target: i0.ɵɵFactoryTarget.Component });
426
- AssessmentMakerComponent.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "12.0.0", version: "12.2.17", type: AssessmentMakerComponent, selector: "lib-assessment-maker", inputs: { labelConfig: "labelConfig", imageConfig: "imageConfig", questionTypes: "questionTypes", showFooter: "showFooter", customRules: "customRules", assessmentId: "assessmentId", assessmentInstanceId: "assessmentInstanceId", defaultAssessmentDTO: "defaultAssessmentDTO", predefinedAssessmentInstance: "predefinedAssessmentInstance", enableSkillsToQuestionMapping: "enableSkillsToQuestionMapping", assessmentContext: "assessmentContext", minimumRequiredSections: "minimumRequiredSections" }, outputs: { assessmentIdChange: "assessmentIdChange", assessmentInstanceIdChange: "assessmentInstanceIdChange", snackbarMessage: "snackbarMessage" }, ngImport: i0, template: "<div *ngIf=\"configsLoaded && !showLoader; else loader\" class=\"col-12 h-100\">\r\n <div class=\"col-12 h-100 py-4\" [class.height-without-footer]=\"showFooter\">\r\n <ng-container *ngIf=\"assessmentQuestionPaperData?.questionPaperSectionList?.length\">\r\n <mat-accordion multi=\"true\" cdkDropList (cdkDropListDropped)=\"dropSection($event)\">\r\n <mat-expansion-panel [hideToggle]=\"true\" #panel=\"matExpansionPanel\" [expanded]=\"section.isExpanded\"\r\n (opened)=\"section.isExpanded = true\" (closed)=\"section.isExpanded = false\"\r\n class=\"mb-4 border-0 overflow-hidden assessment-panel shadow-none bg-transparent\" cdkDrag\r\n *ngFor=\"let section of assessmentQuestionPaperData?.questionPaperSectionList; let sectionIndex = index\">\r\n <!-- Section Header -->\r\n <mat-expansion-panel-header class=\"col-12 p-0 h-auto bg-transparent\">\r\n <div class=\"d-flex col-12 align-items-center gap-md-3 gap-2\">\r\n <img cdkDragHandle [src]=\"imageConfig['COMMONS_ASSESSMENT.ICON.DRAG_DROP']\"\r\n class=\"cursor-grab\"\r\n (error)=\"imageErrorHandler($event, 'assets/commons-assessment/images/drag-drop.svg')\" />\r\n <div class=\"d-flex align-items-center gap-2 flex-grow-1 justify-content-between p-3 assessment-border-radius-two assessment-border-two assessment-bg-white\"\r\n [class.no-border]=\"section.isExpanded\">\r\n <div>\r\n <div class=\"d-flex align-items-center mb-1\">\r\n <input type=\"text\" [id]=\"'sectionNameInput_' + sectionIndex\"\r\n class=\"col-md-11 col-10 assessment-text-semibold-18 border-0 outline-0 bg-transparent p-0 input-focus\"\r\n [(ngModel)]=\"section.qpsName[0].text\"\r\n [attr.size]=\"(section.qpsName[0].text?.length || 1)\"\r\n (click)=\"$event.stopPropagation()\" (keydown)=\"$event.stopPropagation()\">\r\n <img [src]=\"imageConfig['COMMONS_ASSESSMENT.ICON.EDIT']\"\r\n class=\"action-icon cursor-pointer\"\r\n (click)=\"focusSectionInput(sectionIndex, $event)\"\r\n (error)=\"imageErrorHandler($event, 'assets/commons-assessment/images/pencil.svg')\" />\r\n </div>\r\n <p class=\"mb-0 assessment-text-medium-12 assessment-text-grey-seven\">\r\n {{section?.sectionQuestionsList?.length || 0}}\r\n {{labelConfig['COMMONS_ASSESSMENT.LABEL.QUESTIONS']}}\r\n </p>\r\n </div>\r\n <div class=\"d-flex align-items-center gap-md-4 gap-2\">\r\n <img [src]=\"imageConfig['COMMONS_ASSESSMENT.ICON.ARROW_DOWN_BLACK']\"\r\n [ngClass]=\"panel.expanded ? 'change-direction' : 'change-direction-reverse'\"\r\n (error)=\"imageErrorHandler($event, 'assets/commons-assessment/images/arrow-down-black.svg')\" />\r\n <button [matMenuTriggerFor]=\"menu\" (click)=\"$event.stopPropagation()\"\r\n class=\"border-0 bg-transparent py-2\">\r\n <img [src]=\"imageConfig['COMMONS_ASSESSMENT.ICON.ACTION_DOTS']\"\r\n (error)=\"imageErrorHandler($event, 'assets/commons-assessment/images/action-dots.svg')\" />\r\n </button>\r\n <mat-menu #menu=\"matMenu\"\r\n class=\"mat-menu assessment-border-radius-two assessment-border-grey-four-1\">\r\n <button (click)=\"addInstruction(section)\" mat-menu-item\r\n class=\"py-2 assessment-text-semibold-12\">\r\n {{labelConfig['COMMONS_ASSESSMENT.LABEL.ADD_INSTRUCTIONS']}}\r\n </button>\r\n <button (click)=\"duplicateSection(section.id)\" mat-menu-item\r\n class=\"py-2 assessment-text-semibold-12\">\r\n {{labelConfig['COMMONS_ASSESSMENT.LABEL.DUPLICATE']}}\r\n </button>\r\n <button *ngIf=\"(assessmentQuestionPaperData?.questionPaperSectionList?.length ?? 0) > minimumRequiredSections\" \r\n (click)=\"deleteSection(section)\" mat-menu-item\r\n class=\"py-2 assessment-text-semibold-12 assessment-text-danger\">\r\n {{labelConfig['COMMONS_ASSESSMENT.LABEL.DELETE']}}\r\n </button>\r\n </mat-menu>\r\n </div>\r\n </div>\r\n </div>\r\n </mat-expansion-panel-header>\r\n\r\n <!-- Questions inside section -->\r\n <div cdkDropList [cdkDropListData]=\"section.sectionQuestionsList || []\"\r\n (cdkDropListDropped)=\"dropQuestion($event)\">\r\n <div cdkDrag *ngFor=\"let sectionQuestion of section.sectionQuestionsList; let i = index\"\r\n class=\"d-flex align-items-start gap-md-3 gap-2 my-3 overflow-hidden\">\r\n <img cdkDragHandle [src]=\"imageConfig['COMMONS_ASSESSMENT.ICON.DRAG_DROP']\"\r\n class=\"cursor-grab mt-4\"\r\n (error)=\"imageErrorHandler($event, 'assets/commons-assessment/images/drag-drop.svg')\" />\r\n <div class=\"flex-grow-1 p-3 assessment-border-two assessment-border-radius-two question-container assessment-bg-white\">\r\n <lib-question-details [sectionQuestion]=\"sectionQuestion\"\r\n [question]=\"getQuestionFromBank(sectionQuestion.questionId) || {}\"\r\n [questionBank]=\"questionBank\" [imageConfig]=\"imageConfig\"\r\n [labelConfig]=\"labelConfig\" [allowDelete]=\"(section?.sectionQuestionsList?.length ?? 0) > 1\"\r\n (editQuestion)=\"createEditQuestion(section, $event?.questionId, $event?.isChildQuestion)\"\r\n (duplicateQuestion)=\"duplicateQuestion(section, $event)\"\r\n (deleteParentQuestion)=\"deleteParentQuestion($event)\"\r\n (deleteChildQuestion)=\"deleteChildQuestion($event.option, $event.childQuestionId)\">\r\n </lib-question-details>\r\n </div>\r\n </div>\r\n </div>\r\n\r\n <div class=\"col-12 ps-4 border-bottom pb-4\">\r\n <button (click)=\"createEditQuestion(section)\"\r\n class=\"assessment-zoom-animation assessment-button-padding d-flex align-items-center justify-content-center gap-3 assessment-text-primary-one assessment-bg-palette-EDF3FD assessment-text-semibold-12 outline-0 assessment-border-radius-two mt-3 border-ADC9F6\">\r\n <img [src]=\"imageConfig['COMMONS_ASSESSMENT.ICON.PLUS_PRIMARY']\"\r\n (error)=\"imageErrorHandler($event, 'assets/commons-assessment/images/plus-primary.svg')\" />\r\n {{labelConfig['COMMONS_ASSESSMENT.LABEL.ADD_A_QUESTION']}}\r\n </button>\r\n </div>\r\n </mat-expansion-panel>\r\n </mat-accordion>\r\n <button (click)=\"createEditQuestion()\"\r\n class=\"assessment-zoom-animation assessment-button-padding d-flex align-items-center justify-content-center gap-3 assessment-text-primary-one assessment-bg-palette-EDF3FD assessment-text-semibold-12 outline-0 assessment-border-radius-two mt-3 border-ADC9F6 ms-4\">\r\n <img [src]=\"imageConfig['COMMONS_ASSESSMENT.ICON.ADD_SECTION']\"\r\n (error)=\"imageErrorHandler($event, 'assets/commons-assessment/images/add-section.svg')\" />\r\n {{labelConfig['COMMONS_ASSESSMENT.LABEL.ADD_A_SECTION']}}\r\n </button>\r\n </ng-container>\r\n <div *ngIf=\"!assessmentQuestionPaperData?.questionPaperSectionList?.length\"\r\n class=\"h-100 d-flex flex-column align-items-center justify-content-center gap-3\">\r\n <img [src]=\"imageConfig['COMMONS_ASSESSMENT.ICON.NO_QUESTIONS']\" class=\"col-sm-auto col-6\"\r\n (error)=\"imageErrorHandler($event, 'assets/commons-assessment/images/no-questions.svg')\" />\r\n <div class=\"text-center\">\r\n <p class=\"mb-1 assessment-text-medium-18\">{{labelConfig['COMMONS_ASSESSMENT.LABEL.ADD_CUSTOM_QUESTIONS']}}</p>\r\n <p class=\"mb-0 assessment-text-medium-12 assessment-text-grey-seven\">\r\n {{labelConfig['COMMONS_ASSESSMENT.LABEL.ADD_QUESTION_DESC']}}</p>\r\n </div>\r\n <button (click)=\"createEditQuestion()\"\r\n class=\"assessment-button-padding assessment-border-radius-two d-flex align-items-center gap-2 assessment-bg-palette-EDF3FD assessment-text-primary-one assessment-text-semibold-12 border-0 assessment-zoom-animation\">\r\n <img [src]=\"imageConfig['COMMONS_ASSESSMENT.ICON.PLUS_PRIMARY']\"\r\n (error)=\"imageErrorHandler($event, 'assets/commons-assessment/images/plus-primary.svg')\" />\r\n {{labelConfig['COMMONS_ASSESSMENT.LABEL.ADD_A_QUESTION']}}\r\n </button>\r\n </div>\r\n </div>\r\n <div *ngIf=\"showFooter\"\r\n class=\"bg-white p-3 position-sticky bottom-0 d-flex align-items-center justify-content-end border-top gap-3\">\r\n <button (click)=\"discardChanges()\" [disabled]=\"isSubmitting\"\r\n class=\"assessment-zoom-animation assessment-border-radius-two assessment-button-padding-large assessment-btn-primary-transparent assessment-text-semibold-13\">{{labelConfig['COMMONS_ASSESSMENT.LABEL.DISCARD']}}</button>\r\n <button (click)=\"finalSubmit()\" [disabled]=\"isSubmitting\"\r\n class=\"assessment-zoom-animation assessment-border-radius-two assessment-button-padding-large assessment-btn-primary assessment-text-semibold-13 position-relative\">\r\n <span [ngClass]=\"{'opacity-0': isSubmitting}\">\r\n {{labelConfig['COMMONS_ASSESSMENT.LABEL.PUBLISH']}}\r\n </span>\r\n <mat-spinner *ngIf=\"isSubmitting\" [diameter]=\"20\"\r\n class=\"position-absolute top-50 start-50 translate-middle assessment-spinner-white\"></mat-spinner>\r\n </button>\r\n </div>\r\n</div>\r\n<ng-template #loader>\r\n <div class=\"h-100 col-12 d-flex align-items-center justify-content-center py-5\">\r\n <mat-spinner diameter=\"60\" class=\"assessment-spinner-primary\"></mat-spinner>\r\n </div>\r\n</ng-template>", styles: ["@charset \"UTF-8\";.assessment-text-grey-ten{color:var(--assessment-grey-ten)!important}.assessment-bg-grey-ten{background-color:var(--assessment-grey-ten)!important}.assessment-text-grey-nine{color:var(--assessment-grey-nine)!important}.assessment-bg-grey-nine{background-color:var(--assessment-grey-nine)!important}.assessment-text-grey-eight{color:var(--assessment-grey-eight)!important}.assessment-bg-grey-eight{background-color:var(--assessment-grey-eight)!important}.assessment-text-grey-seven{color:var(--assessment-grey-seven)!important}.assessment-bg-grey-seven{background-color:var(--assessment-grey-seven)!important}.assessment-text-grey-six{color:var(--assessment-grey-six)!important}.assessment-bg-grey-six{background-color:var(--assessment-grey-six)!important}.assessment-text-grey-five{color:var(--assessment-grey-five)!important}.assessment-bg-grey-five{background-color:var(--assessment-grey-five)!important}.assessment-text-grey-four{color:var(--assessment-grey-four)!important}.assessment-bg-grey-four{background-color:var(--assessment-grey-four)!important}.assessment-text-grey-three{color:var(--assessment-grey-three)!important}.assessment-bg-grey-three{background-color:var(--assessment-grey-three)!important}.assessment-text-grey-two{color:var(--assessment-grey-two)!important}.assessment-bg-grey-two{background-color:var(--assessment-grey-two)!important}.assessment-text-grey-one{color:var(--assessment-grey-one)!important}.assessment-bg-grey-one{background-color:var(--assessment-grey-one)!important}.assessment-text-white{color:var(--assessment-white)!important}.assessment-bg-white{background-color:var(--assessment-white)!important}.assessment-text-black{color:var(--assessment-black)!important}.assessment-bg-black{background-color:var(--assessment-black)!important}.assessment-text-danger{color:var(--assessment-danger)!important}.assessment-bg-danger{background-color:var(--assessment-danger)!important}.assessment-text-danger-bg{color:var(--assessment-danger-bg)!important}.assessment-bg-danger-bg{background-color:var(--assessment-danger-bg)!important}.assessment-text-primary-one{color:var(--assessment-primary-one)!important}.assessment-bg-primary-one{background-color:var(--assessment-primary-one)!important}.assessment-text-primary-four{color:var(--assessment-primary-four)!important}.assessment-bg-primary-four{background-color:var(--assessment-primary-four)!important}.assessment-text-palette-EDF3FD{color:var(--assessment-palette-EDF3FD)!important}.assessment-bg-palette-EDF3FD{background-color:var(--assessment-palette-EDF3FD)!important}.assessment-text-palette-C8DAF9{color:var(--assessment-palette-C8DAF9)!important}.assessment-bg-palette-C8DAF9{background-color:var(--assessment-palette-C8DAF9)!important}.assessment-text-palette-ADC9F6{color:var(--assessment-palette-ADC9F6)!important}.assessment-bg-palette-ADC9F6{background-color:var(--assessment-palette-ADC9F6)!important}.assessment-text-palette-FEF9F1{color:var(--assessment-palette-FEF9F1)!important}.assessment-bg-palette-FEF9F1{background-color:var(--assessment-palette-FEF9F1)!important}.assessment-text-palette-F9DAA6{color:var(--assessment-palette-F9DAA6)!important}.assessment-bg-palette-F9DAA6{background-color:var(--assessment-palette-F9DAA6)!important}.assessment-text-palette-E8F7F0{color:var(--assessment-palette-E8F7F0)!important}.assessment-bg-palette-E8F7F0{background-color:var(--assessment-palette-E8F7F0)!important}.assessment-text-palette-B7E7CF{color:var(--assessment-palette-B7E7CF)!important}.assessment-bg-palette-B7E7CF{background-color:var(--assessment-palette-B7E7CF)!important}.assessment-text-palette-FEF1E8{color:var(--assessment-palette-FEF1E8)!important}.assessment-bg-palette-FEF1E8{background-color:var(--assessment-palette-FEF1E8)!important}.assessment-text-palette-FAD2B9{color:var(--assessment-palette-FAD2B9)!important}.assessment-bg-palette-FAD2B9{background-color:var(--assessment-palette-FAD2B9)!important}.assessment-box-shadow-one{box-shadow:var(--assessment-box-shadow-one)!important}.assessment-border-radius-one{border-radius:var(--assessment-border-radius-one)!important}.assessment-border-radius-two{border-radius:var(--assessment-border-radius-two)!important}.assessment-border-radius-three{border-radius:var(--assessment-border-radius-three)!important}.assessment-border-radius-four{border-radius:var(--assessment-border-radius-four)!important}.assessment-border-radius-five{border-radius:var(--assessment-border-radius-five)!important}.assessment-border-radius-six{border-radius:var(--assessment-border-radius-six)!important}.assessment-input-border-one{border:var(--assessment-input-border-one)!important}.assessment-input-border-invalid{border:var(--assessment-input-border-invalid)!important}.assessment-input-focus-border{border:var(--assessment-input-focus-border)!important}.assessment-border-two{border:var(--assessment-border-two)!important}.assessment-card-border{border:var(--assessment-card-border)!important}.assessment-tooltip-border{border:var(--assessment-tooltip-border)!important}.assessment-box-shadow-tooltip{box-shadow:var(--assessment-box-shadow-tooltip)!important}.assessment-button-padding{padding:var(--assessment-button-padding)!important}.assessment-button-padding-large{padding:var(--assessment-button-padding-large)!important}.assessment-input-padding{padding:var(--assessment-input-padding)!important}.assessment-text-font-family{color:var(--assessment-font-family)!important}.assessment-bg-font-family{background-color:var(--assessment-font-family)!important}.assessment-text-regular-12{font-weight:400;font-family:var(--assessment-font-family);font-size:calc(.48rem + .3vw);line-height:calc(.9rem + .3vw)}.assessment-text-bold-12{font-weight:700;font-family:var(--assessment-font-family)!important;font-size:calc(.48rem + .3vw);line-height:calc(.9rem + .3vw)}.assessment-text-semibold-12{font-weight:600;font-family:var(--assessment-font-family)!important;font-size:calc(.48rem + .3vw);line-height:calc(.9rem + .3vw)}.assessment-text-semibold-11{font-weight:600;font-family:var(--assessment-font-family);font-size:calc(.48rem + .25vw);line-height:calc(.8rem + .25vw)}.assessment-text-medium-11{font-weight:500;font-family:var(--assessment-font-family);font-size:calc(.48rem + .25vw);line-height:calc(.8rem + .25vw)}.assessment-text-regular-11{font-weight:400;font-family:var(--assessment-font-family);font-size:calc(.48rem + .25vw);line-height:calc(.8rem + .25vw)}.assessment-text-medium-12{font-weight:500;font-family:var(--assessment-font-family);font-size:calc(.48rem + .3vw);line-height:calc(.9rem + .3vw)}.assessment-text-regular-13{font-weight:400;font-family:var(--assessment-font-family)!important;font-size:calc(.64rem + .2vw)!important;line-height:calc(.9rem + .2vw)!important}.assessment-text-bold-13{font-weight:700;font-family:var(--assessment-font-family)!important;font-size:calc(.64rem + .2vw)!important;line-height:calc(.9rem + .2vw)!important}.assessment-text-semibold-13{font-weight:600;font-family:var(--assessment-font-family)!important;font-size:calc(.64rem + .2vw)!important;line-height:calc(.9rem + .2vw)!important}.assessment-text-medium-13{font-weight:500;font-family:var(--assessment-font-family)!important;font-size:calc(.64rem + .2vw)!important;line-height:calc(.9rem + .2vw)!important}.assessment-text-regular-14{font-weight:400;font-family:var(--assessment-font-family)!important;font-size:calc(.7rem + .2vw);line-height:calc(1.2rem + .2vw)}.assessment-text-bold-14{font-weight:700;font-family:var(--assessment-font-family)!important;font-size:calc(.7rem + .2vw);line-height:calc(1.2rem + .2vw)}.assessment-text-medium-14{font-weight:500;font-family:var(--assessment-font-family)!important;font-size:calc(.7rem + .2vw)!important;line-height:calc(1.2rem + .2vw)!important}.assessment-text-semibold-14{font-weight:600;font-family:var(--assessment-font-family)!important;font-size:calc(.7rem + .2vw);line-height:calc(1.2rem + .2vw)}.assessment-text-semibold-10{font-weight:600;font-family:var(--assessment-font-family)!important;font-size:calc(.55rem + .1vw);line-height:calc(1rem + .1vw)}.assessment-text-regular-10{font-weight:400;font-family:var(--assessment-font-family)!important;font-size:calc(.55rem + .1vw)!important;line-height:calc(1rem + .1vw)}.assessment-text-regular-15{font-weight:400;font-family:var(--assessment-font-family);font-size:calc(.85rem + .1vw);line-height:calc(1.4rem + .1vw)}.assessment-text-medium-15{font-weight:500;font-family:var(--assessment-font-family);font-size:calc(.85rem + .1vw);line-height:calc(1.25rem + .1vw)}.assessment-text-semibold-15{font-weight:600;font-family:var(--assessment-font-family)!important;font-size:calc(.85rem + .1vw);line-height:calc(1.25rem + .1vw)}.assessment-text-bold-15{font-weight:700;font-family:var(--assessment-font-family)!important;font-size:calc(.85rem + .1vw);line-height:calc(1.25rem + .1vw)}.assessment-text-regular-16{font-weight:400;font-family:var(--assessment-font-family)!important;font-size:calc(.77rem + .25vw);line-height:calc(1.25rem + .2vw)}.assessment-text-semibold-16{font-weight:600;font-family:var(--assessment-font-family)!important;font-size:calc(.77rem + .25vw);line-height:calc(1.25rem + .2vw)}.assessment-text-bold-16{font-weight:700;font-family:var(--assessment-font-family)!important;font-size:calc(.77rem + .25vw);line-height:calc(1.25rem + .2vw)}.assessment-text-medium-16{font-weight:500;font-family:var(--assessment-font-family)!important;font-size:calc(.77rem + .25vw);line-height:calc(1.25rem + .2vw)}.assessment-text-regular-20{font-weight:400;font-family:var(--assessment-font-family);font-size:calc(1rem + .3vw);line-height:calc(1.2rem + .3vw)}.assessment-text-bold-20{font-weight:700;font-family:var(--assessment-font-family)!important;font-size:calc(1rem + .3vw);line-height:calc(1.2rem + .3vw)}.assessment-text-semibold-20{font-weight:600;font-family:var(--assessment-font-family)!important;font-size:calc(1rem + .3vw);line-height:calc(1.2rem + .3vw)}.assessment-text-medium-20{font-weight:500;font-family:var(--assessment-font-family)!important;font-size:calc(1rem + .3vw);line-height:calc(1.2rem + .3vw)}.assessment-text-medium-18{font-weight:500;font-family:var(--assessment-font-family)!important;font-size:calc(1rem + .125vw)!important;line-height:calc(1.5rem + .1vw)!important}.assessment-text-regular-18{font-weight:400;font-family:var(--assessment-font-family)!important;font-size:calc(1rem + .125vw)!important;line-height:calc(1.5rem + .3vw)!important}.assessment-text-bold-18{font-weight:700;font-family:var(--assessment-font-family)!important;font-size:calc(1rem + .125vw);line-height:calc(1.5rem + .1vw)}.assessment-text-semibold-18{font-weight:600;font-family:var(--assessment-font-family)!important;font-size:calc(1rem + .125vw)!important;line-height:calc(1.5rem + .1vw)!important}.assessment-text-bold-34{overflow-wrap:break-word;font-weight:700;font-family:var(--assessment-font-family)!important;font-size:calc(2rem + .15vw);line-height:calc(2.5rem + .15vw)}.assessment-text-medium-34{font-weight:500;font-family:var(--assessment-font-family);font-size:calc(2rem + .15vw);line-height:calc(2.5rem + .15vw)}.assessment-text-bold-32{font-weight:700;font-family:var(--assessment-font-family)!important;font-size:calc(1.3rem + .75vw);line-height:calc(1.625rem + .5vw)}.assessment-text-bold-22{font-weight:700;font-family:var(--assessment-font-family)!important;font-size:calc(1rem + .4vw);line-height:calc(1.5rem + .4vw)}.assessment-text-regular-22{font-weight:400;font-family:var(--assessment-font-family);font-size:calc(1rem + .4vw);line-height:calc(1.5rem + .4vw)}.assessment-text-semibold-22{font-weight:600;font-family:var(--assessment-font-family)!important;font-size:calc(1rem + .4vw);line-height:calc(1.5rem + .4vw)}.assessment-text-medium-22{font-weight:500;font-family:var(--assessment-font-family);font-size:calc(1rem + .4vw);line-height:calc(1.5rem + .4vw)}.assessment-text-bold-24{font-weight:700;font-family:var(--assessment-font-family)!important;font-size:calc(.8rem + .75vw);line-height:calc(.9rem + .75vw)}.assessment-text-regular-24{font-weight:400;font-family:var(--assessment-font-family);font-size:calc(.8rem + .75vw);line-height:calc(.9rem + .75vw)}.assessment-text-semibold-24{font-weight:600;font-family:var(--assessment-font-family)!important;font-size:calc(.8rem + .75vw);line-height:calc(.9rem + .75vw)}.assessment-text-medium-24{font-weight:500;font-family:var(--assessment-font-family);font-size:calc(.8rem + .75vw);line-height:calc(1.2rem + .75vw)}.assessment-text-regular-26{font-weight:400;font-family:var(--assessment-font-family);font-size:calc(1.5rem + .1vw);line-height:calc(1.8rem + .1vw)}.assessment-text-medium-26{font-weight:500;font-family:var(--assessment-font-family);font-size:calc(1.5rem + .1vw);line-height:calc(1.8rem + .1vw)}.assessment-text-bold-26{font-weight:700;font-family:var(--assessment-font-family)!important;font-size:calc(1.5rem + .1vw);line-height:calc(1.8rem + .1vw)}.assessment-text-semibold-26{font-weight:600;font-family:var(--assessment-font-family)!important;font-size:calc(1.55rem + .1vw);line-height:calc(1.8rem + .1vw)}.assessment-text-regular-28{font-weight:400;font-family:var(--assessment-font-family);font-size:calc(1.55rem + .2vw);line-height:calc(2rem + .2vw)}.assessment-text-medium-28{font-weight:500;font-family:var(--assessment-font-family);font-size:calc(1.55rem + .2vw);line-height:calc(2rem + .2vw)}.assessment-text-semibold-28{font-weight:600;font-family:var(--assessment-font-family)!important;font-size:calc(1.55rem + .2vw);line-height:calc(2rem + .2vw);letter-spacing:1}.assessment-text-bold-28{font-weight:700;font-family:var(--assessment-font-family)!important;font-size:calc(1.55rem + .2vw);line-height:calc(2rem + .2vw)}.assessment-text-regular-30{font-weight:400;font-family:var(--assessment-font-family);font-size:calc(1.5rem + .4vw)}.assessment-text-medium-30{font-weight:500;font-family:var(--assessment-font-family);font-size:calc(1.5rem + .4vw);line-height:calc(1.5rem + .4vw)}.assessment-text-bold-30{font-weight:700;font-family:var(--assessment-font-family)!important;font-size:calc(1.5rem + .4vw);line-height:calc(2rem + .4vw)}.assessment-text-semibold-30{font-weight:600;font-family:var(--assessment-font-family)!important;font-size:calc(1.5rem + .4vw);line-height:calc(1.5rem + .4vw);letter-spacing:.5}.assessment-text-bold-36{font-weight:700;font-family:var(--assessment-font-family)!important;font-size:calc(2rem + .25vw);line-height:calc(2.5rem + .3vw)}.assessment-text-semibold-36{font-weight:600;font-family:var(--assessment-font-family);font-size:calc(2rem + .25vw);line-height:calc(2.5rem + .3vw)}@media (min-height: 100vw) and (orientation: portrait){.assessment-text-bold-34{font-size:calc(1.8rem + .15vh);line-height:calc(2.2rem + .15vh)}.assessment-text-bold-32{font-size:calc(1.3rem + 1vh);line-height:calc(1.5rem + 1vh)}.assessment-text-semibold-30{font-size:calc(1.5rem + .4vh);line-height:calc(1.8rem + .4vh)}.assessment-text-medium-24{line-height:2.188rem}.assessment-text-medium-24,.assessment-text-regular-24,.assessment-text-semibold-24,.assessment-text-bold-24,.assessment-text-light-24{font-size:calc(1.3rem + .5vh);line-height:calc(1.8rem + .5vh)}.assessment-text-medium-18,.assessment-text-regular-18,.assessment-text-bold-18,.assessment-text-semibold-18,.assessment-text-light-18{font-size:calc(1rem + .1vh)!important;line-height:calc(1.6rem + .1vh)!important}.assessment-text-light-16,.assessment-text-bold-16{font-size:calc(.9rem + .3vh)!important;line-height:calc(1.2rem + .3vh)!important}.assessment-text-medium-16,.assessment-text-semibold-16,.assessment-text-regular-16{font-size:calc(.9rem + .2vh)!important;line-height:calc(1.4rem + .2vh)!important}.assessment-text-regular-15,.assessment-text-semibold-15,.assessment-text-bold-15,.assessment-text-light-15{font-size:calc(.8rem + .2vh);line-height:calc(1.27rem + .2vh)}.assessment-text-medium-15{font-size:calc(.82rem + .2vh);line-height:calc(1.27rem + .2vh)}.assessment-text-medium-12,.assessment-text-regular-12,.assessment-text-semibold-12,.assessment-text-bold-12,.assessment-text-medium-upper-12,.assessment-text-light-12{font-size:calc(.5rem + .4vh);line-height:calc(.8rem + .4vh)}.assessment-text-medium-14,.assessment-text-regular-14,.assessment-text-light-14,.assessment-text-medium-upper-14,.assessment-text-semibold-14,.assessment-text-bold-14{font-size:calc(.8rem + .1vh)!important;line-height:calc(1.2rem + .2vh)!important}.assessment-text-regular-13,.assessment-text-medium-13,.assessment-text-semibold-13,.assessment-text-bold-13,.assessment-text-light-13{font-size:calc(.7rem + .2vh)!important;line-height:calc(1rem + .3vh)!important}.assessment-text-regular-11,.assessment-text-medium-11,.assessment-text-semibold-11,.assessment-text-bold-11,.assessment-text-light-11{font-size:calc(.5rem + .2vh)!important;line-height:calc(.8rem + .2vh)!important}}.assessment-btn-primary{background-color:var(--assessment-primary-one);color:var(--assessment-white);border:.064rem solid var(--assessment-primary-one);border-radius:var(--assessment-border-radius-two)}.assessment-btn-primary-transparent{background-color:var(--assessment-white);color:var(--assessment-primary-one);border-radius:var(--assessment-border-radius-two);border:.064rem solid var(--assessment-primary-one)}.assessment-zoom-animation{transition:transform .2s ease;transform:translateZ(0);text-rendering:optimizeLegibility}.assessment-zoom-animation:hover{transform:scale(1.03)}.assessment-zoom-animation:active{transform:scale(1)}.assessment-zoom-animation:disabled{transform:none!important}.change-direction{transform:rotate(180deg);transition:.3s ease-out}.change-direction-reverse{transform:rotate(0);transition:.3s ease-out}.outline-0{outline:none}.cursor-grab{cursor:grab}.cursor-pointer{cursor:pointer}.action-icon{width:1.2rem}.mat-menu-item,.mat-mdc-menu-item{height:inherit;min-height:unset;--mat-menu-item-label-text-font: var(--assessment-font-family) !important;--mat-menu-item-label-text-size: 14px !important;--mat-menu-item-label-text-weight: 600 !important;--mat-menu-item-label-text-line-height: inherit !important}.skill-chip{width:-moz-fit-content;width:fit-content;background:var(--assessment-palette-EDF3FD);border:.064rem solid var(--assessment-palette-C8DAF9)}.assessment-form-check-input-primary-one{min-height:unset}.assessment-form-check-input-primary-one .form-check-input{width:1rem;height:1rem}.assessment-form-check-input-primary-one .form-check-input:checked{background-color:var(--assessment-primary-one);color:var(--assessment-primary-one)}.assessment-form-check-input-primary-one .form-check-input:disabled{opacity:.8}.input-focus{overflow:hidden;text-overflow:ellipsis}.input-focus:focus-visible{border-bottom:var(--assessment-input-focus-border)!important}.one-line-truncate{display:inline-block;overflow:hidden;white-space:nowrap;text-overflow:ellipsis}.height-without-footer{height:calc(100% - 4.4rem)!important}.question-container{transition:all .3s ease}.question-container:hover{box-shadow:var(--assessment-box-shadow-one);background-color:var(--assessment-palette-EDF3FD);border-color:var(--assessment-palette-C8DAF9)!important}.border-ADC9F6{border:.064rem solid var(--assessment-palette-ADC9F6)}.no-border{border-color:transparent!important}\n"], components: [{ type: i4.MatExpansionPanel, selector: "mat-expansion-panel", inputs: ["disabled", "expanded", "hideToggle", "togglePosition"], outputs: ["opened", "closed", "expandedChange", "afterExpand", "afterCollapse"], exportAs: ["matExpansionPanel"] }, { type: i4.MatExpansionPanelHeader, selector: "mat-expansion-panel-header", inputs: ["tabIndex", "expandedHeight", "collapsedHeight"] }, { type: i5.MatMenu, selector: "mat-menu", exportAs: ["matMenu"] }, { type: i5.MatMenuItem, selector: "[mat-menu-item]", inputs: ["disabled", "disableRipple", "role"], exportAs: ["matMenuItem"] }, { type: i6.QuestionDetailsComponent, selector: "lib-question-details", inputs: ["sectionQuestion", "question", "questionBank", "labelConfig", "imageConfig", "allowDelete"], outputs: ["editQuestion", "duplicateQuestion", "deleteParentQuestion", "deleteChildQuestion"] }, { type: i7.MatSpinner, selector: "mat-spinner", inputs: ["color"] }], directives: [{ type: i8.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { type: i4.MatAccordion, selector: "mat-accordion", inputs: ["multi", "displayMode", "togglePosition", "hideToggle"], exportAs: ["matAccordion"] }, { type: i9.CdkDropList, selector: "[cdkDropList], cdk-drop-list", inputs: ["cdkDropListConnectedTo", "id", "cdkDropListEnterPredicate", "cdkDropListSortPredicate", "cdkDropListDisabled", "cdkDropListSortingDisabled", "cdkDropListAutoScrollDisabled", "cdkDropListOrientation", "cdkDropListLockAxis", "cdkDropListData", "cdkDropListAutoScrollStep"], outputs: ["cdkDropListDropped", "cdkDropListEntered", "cdkDropListExited", "cdkDropListSorted"], exportAs: ["cdkDropList"] }, { type: i8.NgForOf, selector: "[ngFor][ngForOf]", inputs: ["ngForOf", "ngForTrackBy", "ngForTemplate"] }, { type: i9.CdkDrag, selector: "[cdkDrag]", inputs: ["cdkDragDisabled", "cdkDragStartDelay", "cdkDragLockAxis", "cdkDragConstrainPosition", "cdkDragPreviewClass", "cdkDragBoundary", "cdkDragRootElement", "cdkDragPreviewContainer", "cdkDragData", "cdkDragFreeDragPosition"], outputs: ["cdkDragStarted", "cdkDragReleased", "cdkDragEnded", "cdkDragEntered", "cdkDragExited", "cdkDragDropped", "cdkDragMoved"], exportAs: ["cdkDrag"] }, { type: i9.CdkDragHandle, selector: "[cdkDragHandle]", inputs: ["cdkDragHandleDisabled"] }, { type: i10.DefaultValueAccessor, selector: "input:not([type=checkbox])[formControlName],textarea[formControlName],input:not([type=checkbox])[formControl],textarea[formControl],input:not([type=checkbox])[ngModel],textarea[ngModel],[ngDefaultControl]" }, { type: i10.NgControlStatus, selector: "[formControlName],[ngModel],[formControl]" }, { type: i10.NgModel, selector: "[ngModel]:not([formControlName]):not([formControl])", inputs: ["name", "disabled", "ngModel", "ngModelOptions"], outputs: ["ngModelChange"], exportAs: ["ngModel"] }, { type: i8.NgClass, selector: "[ngClass]", inputs: ["class", "ngClass"] }, { type: i5.MatMenuTrigger, selector: "[mat-menu-trigger-for], [matMenuTriggerFor]", exportAs: ["matMenuTrigger"] }] });
677
+ AssessmentMakerComponent.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "12.0.0", version: "12.2.17", type: AssessmentMakerComponent, selector: "lib-assessment-maker", inputs: { labelConfig: "labelConfig", imageConfig: "imageConfig", questionTypes: "questionTypes", showFooter: "showFooter", customRules: "customRules", assessmentId: "assessmentId", assessmentInstanceId: "assessmentInstanceId", defaultAssessmentDTO: "defaultAssessmentDTO", predefinedAssessmentInstance: "predefinedAssessmentInstance", enableSkillsToQuestionMapping: "enableSkillsToQuestionMapping", assessmentContext: "assessmentContext", minimumRequiredSections: "minimumRequiredSections", checkForResponses: "checkForResponses", showProctoringToggle: "showProctoringToggle", showTimeInput: "showTimeInput", enableImportFromQuestionBank: "enableImportFromQuestionBank", questionBankConfig: "questionBankConfig" }, outputs: { assessmentIdChange: "assessmentIdChange", assessmentInstanceIdChange: "assessmentInstanceIdChange", snackbarMessage: "snackbarMessage" }, ngImport: i0, template: "<div *ngIf=\"configsLoaded && !showLoader; else loader\" class=\"col-12 h-100\">\r\n <div class=\"col-12 h-100 py-4\" [class.height-without-footer]=\"showFooter\">\r\n <ng-container *ngIf=\"assessmentQuestionPaperData?.questionPaperSectionList?.length\">\r\n <div *ngIf=\"showProctoringToggle || showTimeInput\"\r\n class=\"d-flex align-items-center justify-content-end flex-wrap gap-4 mb-3\">\r\n <div *ngIf=\"showTimeInput\" class=\"d-flex align-items-center gap-2\">\r\n <label for=\"durationInput\" class=\"assessment-text-medium-13 assessment-text-grey-ten mb-0 cursor-pointer\">\r\n {{ labelConfig['COMMONS_ASSESSMENT.LABEL.DURATION'] }}\r\n </label>\r\n <input type=\"number\" id=\"durationInput\" min=\"1\" [(ngModel)]=\"durationMinutes\"\r\n (keydown)=\"blockNegativeKeys($event)\" (ngModelChange)=\"durationMinutes = $event > 0 ? $event : null\"\r\n [placeholder]=\"0\"\r\n class=\"form-control form-control-sm assessment-border-radius-two assessment-text-regular-13\" style=\"width: 4rem;\">\r\n <span class=\"assessment-text-regular-13 assessment-text-grey-seven\">\r\n {{ labelConfig['COMMONS_ASSESSMENT.LABEL.MINUTES'] }}\r\n </span>\r\n </div>\r\n <div *ngIf=\"showProctoringToggle\" class=\"d-flex align-items-center gap-2\">\r\n <label for=\"proctoringToggle\" class=\"assessment-text-medium-13 assessment-text-grey-ten mb-0 cursor-pointer\">\r\n {{ labelConfig['COMMONS_ASSESSMENT.LABEL.ENABLE_PROCTORING'] }}\r\n </label>\r\n <div class=\"form-check form-switch m-0\">\r\n <input type=\"checkbox\" id=\"proctoringToggle\" class=\"form-check-input cursor-pointer\"\r\n [(ngModel)]=\"proctoringEnabled\">\r\n </div>\r\n </div>\r\n </div>\r\n <mat-accordion multi=\"true\" cdkDropList (cdkDropListDropped)=\"dropSection($event)\">\r\n <mat-expansion-panel [hideToggle]=\"true\" #panel=\"matExpansionPanel\" [expanded]=\"section.isExpanded\"\r\n (opened)=\"section.isExpanded = true\" (closed)=\"section.isExpanded = false\"\r\n class=\"mb-4 border-0 overflow-hidden assessment-panel shadow-none bg-transparent\" cdkDrag\r\n *ngFor=\"let section of assessmentQuestionPaperData?.questionPaperSectionList; let sectionIndex = index; trackBy: trackBySectionId\">\r\n <!-- Section Header -->\r\n <mat-expansion-panel-header class=\"col-12 p-0 h-auto bg-transparent\">\r\n <div class=\"d-flex col-12 align-items-center gap-md-3 gap-2\">\r\n <img cdkDragHandle [src]=\"imageConfig['COMMONS_ASSESSMENT.ICON.DRAG_DROP']\"\r\n class=\"cursor-grab\"\r\n (error)=\"imageErrorHandler($event, 'assets/commons-assessment/images/drag-drop.svg')\" />\r\n <div class=\"d-flex align-items-center gap-2 flex-grow-1 justify-content-between p-3 assessment-border-radius-two assessment-border-two assessment-bg-white\"\r\n [class.no-border]=\"section.isExpanded\">\r\n <div>\r\n <div class=\"d-flex align-items-center mb-1\">\r\n <input type=\"text\" [id]=\"'sectionNameInput_' + sectionIndex\"\r\n class=\"col-md-11 col-10 assessment-text-semibold-18 border-0 outline-0 bg-transparent p-0 input-focus\"\r\n [(ngModel)]=\"section.qpsName[0].text\"\r\n [attr.size]=\"(section.qpsName[0].text?.length || 1)\"\r\n (click)=\"$event.stopPropagation()\" (keydown)=\"$event.stopPropagation()\">\r\n <img [src]=\"imageConfig['COMMONS_ASSESSMENT.ICON.EDIT']\"\r\n class=\"action-icon cursor-pointer\"\r\n (click)=\"focusSectionInput(sectionIndex, $event)\"\r\n (error)=\"imageErrorHandler($event, 'assets/commons-assessment/images/pencil.svg')\" />\r\n </div>\r\n <p class=\"mb-0 assessment-text-medium-12 assessment-text-grey-seven\">\r\n {{section?.sectionQuestionsList?.length || 0}}\r\n {{labelConfig['COMMONS_ASSESSMENT.LABEL.QUESTIONS']}}\r\n </p>\r\n </div>\r\n <div class=\"d-flex align-items-center gap-md-4 gap-2\">\r\n <img [src]=\"imageConfig['COMMONS_ASSESSMENT.ICON.ARROW_DOWN_BLACK']\"\r\n [ngClass]=\"panel.expanded ? 'change-direction' : 'change-direction-reverse'\"\r\n (error)=\"imageErrorHandler($event, 'assets/commons-assessment/images/arrow-down-black.svg')\" />\r\n <button [matMenuTriggerFor]=\"menu\" (click)=\"$event.stopPropagation()\"\r\n class=\"border-0 bg-transparent py-2\">\r\n <img [src]=\"imageConfig['COMMONS_ASSESSMENT.ICON.ACTION_DOTS']\"\r\n (error)=\"imageErrorHandler($event, 'assets/commons-assessment/images/action-dots.svg')\" />\r\n </button>\r\n <mat-menu #menu=\"matMenu\"\r\n class=\"mat-menu assessment-border-radius-two assessment-border-grey-four-1\">\r\n <button (click)=\"addInstruction(section)\" mat-menu-item\r\n class=\"py-2 assessment-text-semibold-12\">\r\n {{labelConfig['COMMONS_ASSESSMENT.LABEL.ADD_INSTRUCTIONS']}}\r\n </button>\r\n <button (click)=\"duplicateSection(section.id)\" mat-menu-item\r\n class=\"py-2 assessment-text-semibold-12\">\r\n {{labelConfig['COMMONS_ASSESSMENT.LABEL.DUPLICATE']}}\r\n </button>\r\n <button *ngIf=\"(assessmentQuestionPaperData?.questionPaperSectionList?.length ?? 0) > minimumRequiredSections\" \r\n (click)=\"deleteSection(section)\" mat-menu-item\r\n class=\"py-2 assessment-text-semibold-12 assessment-text-danger\">\r\n {{labelConfig['COMMONS_ASSESSMENT.LABEL.DELETE']}}\r\n </button>\r\n </mat-menu>\r\n </div>\r\n </div>\r\n </div>\r\n </mat-expansion-panel-header>\r\n\r\n <!-- Questions inside section -->\r\n <div cdkDropList [cdkDropListData]=\"section.sectionQuestionsList || []\"\r\n (cdkDropListDropped)=\"dropQuestion($event)\">\r\n <div cdkDrag *ngFor=\"let sectionQuestion of section.sectionQuestionsList; let i = index; trackBy: trackBySectionQuestion\"\r\n class=\"d-flex align-items-start gap-md-3 gap-2 my-3 overflow-hidden\">\r\n <img cdkDragHandle [src]=\"imageConfig['COMMONS_ASSESSMENT.ICON.DRAG_DROP']\"\r\n class=\"cursor-grab mt-4\"\r\n (error)=\"imageErrorHandler($event, 'assets/commons-assessment/images/drag-drop.svg')\" />\r\n <div class=\"flex-grow-1 p-3 assessment-border-two assessment-border-radius-two question-container assessment-bg-white\">\r\n <lib-question-details [sectionQuestion]=\"sectionQuestion\"\r\n [question]=\"getQuestionFromBank(sectionQuestion.questionId) || {}\"\r\n [questionBank]=\"questionBank\" [imageConfig]=\"imageConfig\"\r\n [labelConfig]=\"labelConfig\" [allowDelete]=\"(section?.sectionQuestionsList?.length ?? 0) > 1\"\r\n [isLocked]=\"isQuestionLocked(sectionQuestion?.questionId)\"\r\n (editQuestion)=\"createEditQuestion(section, $event?.questionId, $event?.isChildQuestion)\"\r\n (duplicateQuestion)=\"duplicateQuestion(section, $event)\"\r\n (deleteParentQuestion)=\"deleteParentQuestion($event)\"\r\n (deleteChildQuestion)=\"deleteChildQuestion($event.option, $event.childQuestionId)\">\r\n </lib-question-details>\r\n </div>\r\n </div>\r\n </div>\r\n\r\n <div class=\"col-12 ps-4 border-bottom pb-4 d-flex align-items-center\">\r\n <ng-container *ngIf=\"enableImportFromQuestionBank; else singleAddQuestionBtn\">\r\n <button [matMenuTriggerFor]=\"addQuestionMenu\"\r\n class=\"assessment-zoom-animation assessment-button-padding d-flex align-items-center justify-content-center gap-2 assessment-text-primary-one assessment-bg-palette-EDF3FD assessment-text-semibold-12 outline-0 assessment-border-radius-two mt-3 border-ADC9F6\">\r\n <img [src]=\"imageConfig['COMMONS_ASSESSMENT.ICON.PLUS_PRIMARY']\"\r\n (error)=\"imageErrorHandler($event, 'assets/commons-assessment/images/plus-primary.svg')\" />\r\n {{labelConfig['COMMONS_ASSESSMENT.LABEL.ADD_QUESTION'] || 'Add Question'}}\r\n </button>\r\n <mat-menu #addQuestionMenu=\"matMenu\" yPosition=\"below\" [overlapTrigger]=\"false\" class=\"assessment-cta-menu assessment-border-radius-two\">\r\n <button (click)=\"createEditQuestion(section)\" mat-menu-item class=\"d-flex align-items-center gap-2 py-3\">\r\n <img [src]=\"imageConfig['COMMONS_ASSESSMENT.ICON.PLUS_PRIMARY']\" class=\"menu-action-icon\"\r\n (error)=\"imageErrorHandler($event, 'assets/commons-assessment/images/plus-primary.svg')\" />\r\n <span class=\"assessment-text-semibold-13 menu-item-text\">\r\n {{labelConfig['COMMONS_ASSESSMENT.LABEL.CREATE_NEW_QUESTION'] || 'Create New Question'}}\r\n </span>\r\n </button>\r\n <button (click)=\"openQuestionBankPicker(section)\" mat-menu-item class=\"d-flex align-items-center gap-2 py-3\">\r\n <img [src]=\"imageConfig['COMMONS_ASSESSMENT.ICON.FILE_IMPORT'] || 'assets/commons-assessment/images/file-import.svg'\" class=\"menu-action-icon\"\r\n (error)=\"imageErrorHandler($event, 'assets/commons-assessment/images/file-import.svg')\" />\r\n <span class=\"assessment-text-semibold-13 menu-item-text\">\r\n {{labelConfig['COMMONS_ASSESSMENT.LABEL.IMPORT_FROM_QUESTION_BANK'] || 'Import from Question Bank'}}\r\n </span>\r\n </button>\r\n </mat-menu>\r\n </ng-container>\r\n <ng-template #singleAddQuestionBtn>\r\n <button (click)=\"createEditQuestion(section)\"\r\n class=\"assessment-zoom-animation assessment-button-padding d-flex align-items-center justify-content-center gap-2 assessment-text-primary-one assessment-bg-palette-EDF3FD assessment-text-semibold-12 outline-0 assessment-border-radius-two mt-3 border-ADC9F6\">\r\n <img [src]=\"imageConfig['COMMONS_ASSESSMENT.ICON.PLUS_PRIMARY']\"\r\n (error)=\"imageErrorHandler($event, 'assets/commons-assessment/images/plus-primary.svg')\" />\r\n {{labelConfig['COMMONS_ASSESSMENT.LABEL.ADD_A_QUESTION']}}\r\n </button>\r\n </ng-template>\r\n </div>\r\n </mat-expansion-panel>\r\n </mat-accordion>\r\n <div class=\"d-flex align-items-center ms-4\">\r\n <ng-container *ngIf=\"enableImportFromQuestionBank; else singleAddSectionBtn\">\r\n <button [matMenuTriggerFor]=\"addSectionMenu\"\r\n class=\"assessment-zoom-animation assessment-button-padding d-flex align-items-center justify-content-center gap-2 assessment-text-primary-one assessment-bg-palette-EDF3FD assessment-text-semibold-12 outline-0 assessment-border-radius-two mt-3 border-ADC9F6\">\r\n <img [src]=\"imageConfig['COMMONS_ASSESSMENT.ICON.ADD_SECTION']\"\r\n (error)=\"imageErrorHandler($event, 'assets/commons-assessment/images/add-section.svg')\" />\r\n {{labelConfig['COMMONS_ASSESSMENT.LABEL.ADD_A_SECTION']}}\r\n </button>\r\n <mat-menu #addSectionMenu=\"matMenu\" yPosition=\"below\" [overlapTrigger]=\"false\" class=\"assessment-cta-menu assessment-border-radius-two\">\r\n <button (click)=\"createEditQuestion()\" mat-menu-item class=\"d-flex align-items-center gap-2 py-3\">\r\n <img [src]=\"imageConfig['COMMONS_ASSESSMENT.ICON.ADD_SECTION']\" class=\"menu-action-icon\"\r\n (error)=\"imageErrorHandler($event, 'assets/commons-assessment/images/add-section.svg')\" />\r\n <span class=\"assessment-text-semibold-13 menu-item-text\">\r\n {{labelConfig['COMMONS_ASSESSMENT.LABEL.CREATE_NEW_QUESTION'] || 'Create New Question'}}\r\n </span>\r\n </button>\r\n <button (click)=\"openQuestionBankPicker()\" mat-menu-item class=\"d-flex align-items-center gap-2 py-3\">\r\n <img [src]=\"imageConfig['COMMONS_ASSESSMENT.ICON.FILE_IMPORT'] || 'assets/commons-assessment/images/file-import.svg'\" class=\"menu-action-icon\"\r\n (error)=\"imageErrorHandler($event, 'assets/commons-assessment/images/file-import.svg')\" />\r\n <span class=\"assessment-text-semibold-13 menu-item-text\">\r\n {{labelConfig['COMMONS_ASSESSMENT.LABEL.IMPORT_FROM_QUESTION_BANK'] || 'Import from Question Bank'}}\r\n </span>\r\n </button>\r\n </mat-menu>\r\n </ng-container>\r\n <ng-template #singleAddSectionBtn>\r\n <button (click)=\"createEditQuestion()\"\r\n class=\"assessment-zoom-animation assessment-button-padding d-flex align-items-center justify-content-center gap-2 assessment-text-primary-one assessment-bg-palette-EDF3FD assessment-text-semibold-12 outline-0 assessment-border-radius-two mt-3 border-ADC9F6\">\r\n <img [src]=\"imageConfig['COMMONS_ASSESSMENT.ICON.ADD_SECTION']\"\r\n (error)=\"imageErrorHandler($event, 'assets/commons-assessment/images/add-section.svg')\" />\r\n {{labelConfig['COMMONS_ASSESSMENT.LABEL.ADD_A_SECTION']}}\r\n </button>\r\n </ng-template>\r\n </div>\r\n </ng-container>\r\n <div *ngIf=\"!assessmentQuestionPaperData?.questionPaperSectionList?.length\"\r\n class=\"h-100 d-flex flex-column align-items-center justify-content-center gap-3\">\r\n <img [src]=\"imageConfig['COMMONS_ASSESSMENT.ICON.NO_QUESTIONS']\" class=\"col-sm-auto col-6\"\r\n (error)=\"imageErrorHandler($event, 'assets/commons-assessment/images/no-questions.svg')\" />\r\n <div class=\"text-center\">\r\n <p class=\"mb-1 assessment-text-medium-18\">{{labelConfig['COMMONS_ASSESSMENT.LABEL.ADD_CUSTOM_QUESTIONS']}}</p>\r\n <p class=\"mb-0 assessment-text-medium-12 assessment-text-grey-seven\">\r\n {{labelConfig['COMMONS_ASSESSMENT.LABEL.ADD_QUESTION_DESC']}}</p>\r\n </div>\r\n <div class=\"d-flex align-items-center\">\r\n <ng-container *ngIf=\"enableImportFromQuestionBank; else singleEmptyAddBtn\">\r\n <button [matMenuTriggerFor]=\"emptyAddMenu\"\r\n class=\"assessment-button-padding assessment-border-radius-two d-flex align-items-center gap-2 assessment-bg-palette-EDF3FD assessment-text-primary-one assessment-text-semibold-12 border-0 assessment-zoom-animation\">\r\n <img [src]=\"imageConfig['COMMONS_ASSESSMENT.ICON.PLUS_PRIMARY']\"\r\n (error)=\"imageErrorHandler($event, 'assets/commons-assessment/images/plus-primary.svg')\" />\r\n {{labelConfig['COMMONS_ASSESSMENT.LABEL.ADD_A_QUESTION']}}\r\n </button>\r\n <mat-menu #emptyAddMenu=\"matMenu\" yPosition=\"below\" [overlapTrigger]=\"false\" class=\"assessment-cta-menu assessment-border-radius-two\">\r\n <button (click)=\"createEditQuestion()\" mat-menu-item class=\"d-flex align-items-center gap-2 py-3\">\r\n <img [src]=\"imageConfig['COMMONS_ASSESSMENT.ICON.PLUS_PRIMARY']\" class=\"menu-action-icon\"\r\n (error)=\"imageErrorHandler($event, 'assets/commons-assessment/images/plus-primary.svg')\" />\r\n <span class=\"assessment-text-semibold-13 menu-item-text\">\r\n {{labelConfig['COMMONS_ASSESSMENT.LABEL.CREATE_NEW_QUESTION'] || 'Create New Question'}}\r\n </span>\r\n </button>\r\n <button (click)=\"openQuestionBankPicker()\" mat-menu-item class=\"d-flex align-items-center gap-2 py-3\">\r\n <img [src]=\"imageConfig['COMMONS_ASSESSMENT.ICON.FILE_IMPORT'] || 'assets/commons-assessment/images/file-import.svg'\" class=\"menu-action-icon\"\r\n (error)=\"imageErrorHandler($event, 'assets/commons-assessment/images/file-import.svg')\" />\r\n <span class=\"assessment-text-semibold-13 menu-item-text\">\r\n {{labelConfig['COMMONS_ASSESSMENT.LABEL.IMPORT_FROM_QUESTION_BANK'] || 'Import from Question Bank'}}\r\n </span>\r\n </button>\r\n </mat-menu>\r\n </ng-container>\r\n <ng-template #singleEmptyAddBtn>\r\n <button (click)=\"createEditQuestion()\"\r\n class=\"assessment-button-padding assessment-border-radius-two d-flex align-items-center gap-2 assessment-bg-palette-EDF3FD assessment-text-primary-one assessment-text-semibold-12 border-0 assessment-zoom-animation\">\r\n <img [src]=\"imageConfig['COMMONS_ASSESSMENT.ICON.PLUS_PRIMARY']\"\r\n (error)=\"imageErrorHandler($event, 'assets/commons-assessment/images/plus-primary.svg')\" />\r\n {{labelConfig['COMMONS_ASSESSMENT.LABEL.ADD_A_QUESTION']}}\r\n </button>\r\n </ng-template>\r\n </div>\r\n </div>\r\n </div>\r\n <div *ngIf=\"showFooter\"\r\n class=\"bg-white p-3 position-sticky bottom-0 d-flex align-items-center justify-content-end border-top gap-3\">\r\n <button (click)=\"discardChanges()\" [disabled]=\"isSubmitting\"\r\n class=\"assessment-zoom-animation assessment-border-radius-two assessment-button-padding-large assessment-btn-primary-transparent assessment-text-semibold-13\">{{labelConfig['COMMONS_ASSESSMENT.LABEL.DISCARD']}}</button>\r\n <button (click)=\"finalSubmit()\" [disabled]=\"isSubmitting\"\r\n class=\"assessment-zoom-animation assessment-border-radius-two assessment-button-padding-large assessment-btn-primary assessment-text-semibold-13 position-relative\">\r\n <span [ngClass]=\"{'opacity-0': isSubmitting}\">\r\n {{labelConfig['COMMONS_ASSESSMENT.LABEL.PUBLISH']}}\r\n </span>\r\n <mat-spinner *ngIf=\"isSubmitting\" [diameter]=\"20\"\r\n class=\"position-absolute top-50 start-50 translate-middle assessment-spinner-white\"></mat-spinner>\r\n </button>\r\n </div>\r\n</div>\r\n<ng-template #loader>\r\n <div class=\"h-100 col-12 d-flex align-items-center justify-content-center py-5\">\r\n <mat-spinner diameter=\"60\" class=\"assessment-spinner-primary\"></mat-spinner>\r\n </div>\r\n</ng-template>", styles: ["@charset \"UTF-8\";.assessment-text-grey-ten{color:var(--assessment-grey-ten)!important}.assessment-bg-grey-ten{background-color:var(--assessment-grey-ten)!important}.assessment-text-grey-nine{color:var(--assessment-grey-nine)!important}.assessment-bg-grey-nine{background-color:var(--assessment-grey-nine)!important}.assessment-text-grey-eight{color:var(--assessment-grey-eight)!important}.assessment-bg-grey-eight{background-color:var(--assessment-grey-eight)!important}.assessment-text-grey-seven{color:var(--assessment-grey-seven)!important}.assessment-bg-grey-seven{background-color:var(--assessment-grey-seven)!important}.assessment-text-grey-six{color:var(--assessment-grey-six)!important}.assessment-bg-grey-six{background-color:var(--assessment-grey-six)!important}.assessment-text-grey-five{color:var(--assessment-grey-five)!important}.assessment-bg-grey-five{background-color:var(--assessment-grey-five)!important}.assessment-text-grey-four{color:var(--assessment-grey-four)!important}.assessment-bg-grey-four{background-color:var(--assessment-grey-four)!important}.assessment-text-grey-three{color:var(--assessment-grey-three)!important}.assessment-bg-grey-three{background-color:var(--assessment-grey-three)!important}.assessment-text-grey-two{color:var(--assessment-grey-two)!important}.assessment-bg-grey-two{background-color:var(--assessment-grey-two)!important}.assessment-text-grey-one{color:var(--assessment-grey-one)!important}.assessment-bg-grey-one{background-color:var(--assessment-grey-one)!important}.assessment-text-white{color:var(--assessment-white)!important}.assessment-bg-white{background-color:var(--assessment-white)!important}.assessment-text-black{color:var(--assessment-black)!important}.assessment-bg-black{background-color:var(--assessment-black)!important}.assessment-text-danger{color:var(--assessment-danger)!important}.assessment-bg-danger{background-color:var(--assessment-danger)!important}.assessment-text-danger-bg{color:var(--assessment-danger-bg)!important}.assessment-bg-danger-bg{background-color:var(--assessment-danger-bg)!important}.assessment-text-success{color:var(--assessment-success)!important}.assessment-bg-success{background-color:var(--assessment-success)!important}.assessment-text-success-bg{color:var(--assessment-success-bg)!important}.assessment-bg-success-bg{background-color:var(--assessment-success-bg)!important}.assessment-text-warning{color:var(--assessment-warning)!important}.assessment-bg-warning{background-color:var(--assessment-warning)!important}.assessment-text-warning-bg{color:var(--assessment-warning-bg)!important}.assessment-bg-warning-bg{background-color:var(--assessment-warning-bg)!important}.assessment-text-primary-one{color:var(--assessment-primary-one)!important}.assessment-bg-primary-one{background-color:var(--assessment-primary-one)!important}.assessment-text-primary-four{color:var(--assessment-primary-four)!important}.assessment-bg-primary-four{background-color:var(--assessment-primary-four)!important}.assessment-text-palette-EDF3FD{color:var(--assessment-palette-EDF3FD)!important}.assessment-bg-palette-EDF3FD{background-color:var(--assessment-palette-EDF3FD)!important}.assessment-text-palette-C8DAF9{color:var(--assessment-palette-C8DAF9)!important}.assessment-bg-palette-C8DAF9{background-color:var(--assessment-palette-C8DAF9)!important}.assessment-text-palette-ADC9F6{color:var(--assessment-palette-ADC9F6)!important}.assessment-bg-palette-ADC9F6{background-color:var(--assessment-palette-ADC9F6)!important}.assessment-text-palette-FEF9F1{color:var(--assessment-palette-FEF9F1)!important}.assessment-bg-palette-FEF9F1{background-color:var(--assessment-palette-FEF9F1)!important}.assessment-text-palette-F9DAA6{color:var(--assessment-palette-F9DAA6)!important}.assessment-bg-palette-F9DAA6{background-color:var(--assessment-palette-F9DAA6)!important}.assessment-text-palette-E8F7F0{color:var(--assessment-palette-E8F7F0)!important}.assessment-bg-palette-E8F7F0{background-color:var(--assessment-palette-E8F7F0)!important}.assessment-text-palette-B7E7CF{color:var(--assessment-palette-B7E7CF)!important}.assessment-bg-palette-B7E7CF{background-color:var(--assessment-palette-B7E7CF)!important}.assessment-text-palette-FEF1E8{color:var(--assessment-palette-FEF1E8)!important}.assessment-bg-palette-FEF1E8{background-color:var(--assessment-palette-FEF1E8)!important}.assessment-text-palette-FAD2B9{color:var(--assessment-palette-FAD2B9)!important}.assessment-bg-palette-FAD2B9{background-color:var(--assessment-palette-FAD2B9)!important}.assessment-box-shadow-one{box-shadow:var(--assessment-box-shadow-one)!important}.assessment-border-radius-one{border-radius:var(--assessment-border-radius-one)!important}.assessment-border-radius-two{border-radius:var(--assessment-border-radius-two)!important}.assessment-border-radius-three{border-radius:var(--assessment-border-radius-three)!important}.assessment-border-radius-four{border-radius:var(--assessment-border-radius-four)!important}.assessment-border-radius-five{border-radius:var(--assessment-border-radius-five)!important}.assessment-border-radius-six{border-radius:var(--assessment-border-radius-six)!important}.assessment-input-border-one{border:var(--assessment-input-border-one)!important}.assessment-input-border-invalid{border:var(--assessment-input-border-invalid)!important}.assessment-input-focus-border{border:var(--assessment-input-focus-border)!important}.assessment-border-two{border:var(--assessment-border-two)!important}.assessment-card-border{border:var(--assessment-card-border)!important}.assessment-tooltip-border{border:var(--assessment-tooltip-border)!important}.assessment-box-shadow-tooltip{box-shadow:var(--assessment-box-shadow-tooltip)!important}.assessment-button-padding{padding:var(--assessment-button-padding)!important}.assessment-button-padding-large{padding:var(--assessment-button-padding-large)!important}.assessment-input-padding{padding:var(--assessment-input-padding)!important}.assessment-text-font-family{color:var(--assessment-font-family)!important}.assessment-bg-font-family{background-color:var(--assessment-font-family)!important}.assessment-text-regular-12{font-weight:400;font-family:var(--assessment-font-family);font-size:calc(.48rem + .3vw);line-height:calc(.9rem + .3vw)}.assessment-text-semibold-12{font-weight:600;font-family:var(--assessment-font-family)!important;font-size:calc(.48rem + .3vw);line-height:calc(.9rem + .3vw)}.assessment-text-medium-11{font-weight:500;font-family:var(--assessment-font-family);font-size:calc(.48rem + .25vw);line-height:calc(.8rem + .25vw)}.assessment-text-medium-10{font-weight:500;font-family:var(--assessment-font-family);font-size:calc(.42rem + .2vw);line-height:calc(.72rem + .2vw)}.assessment-text-regular-11{font-weight:400;font-family:var(--assessment-font-family);font-size:calc(.48rem + .25vw);line-height:calc(.8rem + .25vw)}.assessment-text-medium-12{font-weight:500;font-family:var(--assessment-font-family);font-size:calc(.48rem + .3vw);line-height:calc(.9rem + .3vw)}.assessment-text-regular-13{font-weight:400;font-family:var(--assessment-font-family)!important;font-size:calc(.64rem + .2vw)!important;line-height:calc(.9rem + .2vw)!important}.assessment-text-semibold-13{font-weight:600;font-family:var(--assessment-font-family)!important;font-size:calc(.64rem + .2vw)!important;line-height:calc(.9rem + .2vw)!important}.assessment-text-medium-13{font-weight:500;font-family:var(--assessment-font-family)!important;font-size:calc(.64rem + .2vw)!important;line-height:calc(.9rem + .2vw)!important}.assessment-text-medium-14{font-weight:500;font-family:var(--assessment-font-family)!important;font-size:calc(.7rem + .2vw)!important;line-height:calc(1.2rem + .2vw)!important}.assessment-text-semibold-14{font-weight:600;font-family:var(--assessment-font-family)!important;font-size:calc(.7rem + .2vw);line-height:calc(1.2rem + .2vw)}.assessment-text-regular-15{font-weight:400;font-family:var(--assessment-font-family);font-size:calc(.85rem + .1vw);line-height:calc(1.4rem + .1vw)}.assessment-text-medium-15{font-weight:500;font-family:var(--assessment-font-family);font-size:calc(.85rem + .1vw);line-height:calc(1.25rem + .1vw)}.assessment-text-semibold-15{font-weight:600;font-family:var(--assessment-font-family)!important;font-size:calc(.85rem + .1vw);line-height:calc(1.25rem + .1vw)}.assessment-text-semibold-16{font-weight:600;font-family:var(--assessment-font-family)!important;font-size:calc(.77rem + .25vw);line-height:calc(1.25rem + .2vw)}.assessment-text-medium-16{font-weight:500;font-family:var(--assessment-font-family)!important;font-size:calc(.77rem + .25vw);line-height:calc(1.25rem + .2vw)}.assessment-text-medium-18{font-weight:500;font-family:var(--assessment-font-family)!important;font-size:calc(1rem + .125vw)!important;line-height:calc(1.5rem + .1vw)!important}.assessment-text-semibold-18{font-weight:600;font-family:var(--assessment-font-family)!important;font-size:calc(1rem + .125vw)!important;line-height:calc(1.5rem + .1vw)!important}@media (min-height: 100vw) and (orientation: portrait){.assessment-text-medium-18,.assessment-text-semibold-18{font-size:calc(1rem + .1vh)!important;line-height:calc(1.6rem + .1vh)!important}.assessment-text-medium-16,.assessment-text-semibold-16{font-size:calc(.9rem + .2vh)!important;line-height:calc(1.4rem + .2vh)!important}.assessment-text-regular-15,.assessment-text-semibold-15{font-size:calc(.8rem + .2vh);line-height:calc(1.27rem + .2vh)}.assessment-text-medium-15{font-size:calc(.82rem + .2vh);line-height:calc(1.27rem + .2vh)}.assessment-text-medium-12,.assessment-text-regular-12,.assessment-text-semibold-12{font-size:calc(.5rem + .4vh);line-height:calc(.8rem + .4vh)}.assessment-text-medium-14,.assessment-text-semibold-14{font-size:calc(.8rem + .1vh)!important;line-height:calc(1.2rem + .2vh)!important}.assessment-text-regular-13,.assessment-text-medium-13,.assessment-text-semibold-13{font-size:calc(.7rem + .2vh)!important;line-height:calc(1rem + .3vh)!important}.assessment-text-regular-11,.assessment-text-medium-11{font-size:calc(.5rem + .2vh)!important;line-height:calc(.8rem + .2vh)!important}.assessment-text-medium-10{font-size:calc(.45rem + .2vh)!important;line-height:calc(.72rem + .2vh)!important}}.assessment-btn-primary{background-color:var(--assessment-primary-one);color:var(--assessment-white);border:.064rem solid var(--assessment-primary-one);border-radius:var(--assessment-border-radius-two)}.assessment-btn-primary-transparent{background-color:var(--assessment-white);color:var(--assessment-primary-one);border-radius:var(--assessment-border-radius-two);border:.064rem solid var(--assessment-primary-one)}.assessment-zoom-animation{transition:transform .2s ease;transform:translateZ(0);text-rendering:optimizeLegibility}.assessment-zoom-animation:hover{transform:scale(1.03)}.assessment-zoom-animation:active{transform:scale(1)}.assessment-zoom-animation:disabled{transform:none!important}.change-direction{transform:rotate(180deg);transition:.3s ease-out}.change-direction-reverse{transform:rotate(0);transition:.3s ease-out}.outline-0{outline:none}.cursor-grab{cursor:grab}.cursor-pointer{cursor:pointer}.action-icon{width:1.2rem}.mat-menu-item,.mat-mdc-menu-item{height:inherit;min-height:unset;--mat-menu-item-label-text-font: var(--assessment-font-family) !important;--mat-menu-item-label-text-size: 14px !important;--mat-menu-item-label-text-weight: 600 !important;--mat-menu-item-label-text-line-height: inherit !important}.skill-chip{width:-moz-fit-content;width:fit-content;background:var(--assessment-palette-EDF3FD);border:.064rem solid var(--assessment-palette-C8DAF9)}.assessment-form-check-input-primary-one{min-height:unset}.assessment-form-check-input-primary-one .form-check-input{width:1rem;height:1rem}.assessment-form-check-input-primary-one .form-check-input:checked{background-color:var(--assessment-primary-one);color:var(--assessment-primary-one)}.assessment-form-check-input-primary-one .form-check-input:disabled{opacity:.8}.form-check-input:checked{background-color:var(--assessment-primary-one);border-color:var(--assessment-primary-one)}.form-check-input:focus{border-color:var(--assessment-primary-one);box-shadow:none}.input-focus{overflow:hidden;text-overflow:ellipsis}.input-focus:focus-visible{border-bottom:var(--assessment-input-focus-border)!important}.one-line-truncate{display:inline-block;overflow:hidden;white-space:nowrap;text-overflow:ellipsis}.height-without-footer{height:calc(100% - 4.4rem)!important}.question-container{transition:all .3s ease}.question-container:hover{box-shadow:var(--assessment-box-shadow-one);background-color:var(--assessment-palette-EDF3FD);border-color:var(--assessment-palette-C8DAF9)!important}.border-ADC9F6{border:.064rem solid var(--assessment-palette-ADC9F6)}.no-border{border-color:transparent!important}@keyframes ctaMenuBloom{0%{opacity:0;transform:translateY(-8px) scale(.96)}to{opacity:1;transform:translateY(0) scale(1)}}::ng-deep .assessment-cta-menu.mat-menu-panel{min-width:15rem;max-width:22rem;margin-top:.5rem!important;border:1px solid var(--assessment-grey-four, #e2e8f0);border-radius:var(--assessment-border-radius-two, .5rem);background-color:var(--assessment-bg-grey-one, #f8fafc)!important;box-shadow:0 4px 6px -1px #0000000a,0 14px 28px -3px #00000014!important;padding:0;overflow:hidden;transform-origin:top left;animation:ctaMenuBloom .2s cubic-bezier(.16,1,.3,1) forwards;will-change:transform,opacity}::ng-deep .assessment-cta-menu.mat-menu-panel .mat-menu-content{padding:0!important}::ng-deep .assessment-cta-menu.mat-menu-panel .mat-menu-item{height:auto;line-height:normal;padding:.75rem 1rem;display:flex;align-items:center;grid-gap:.75rem;gap:.75rem;background-color:transparent;transition:background-color .14s ease-out,transform .14s ease-out}::ng-deep .assessment-cta-menu.mat-menu-panel .mat-menu-item:not(:last-child){border-bottom:1px solid var(--assessment-grey-four, #e2e8f0)}::ng-deep .assessment-cta-menu.mat-menu-panel .mat-menu-item .menu-item-text{color:var(--assessment-text-grey-ten, #1e293b);transition:color .14s ease-out}::ng-deep .assessment-cta-menu.mat-menu-panel .mat-menu-item .menu-action-icon{width:1.125rem;height:1.125rem;flex-shrink:0;transition:transform .14s ease-out}::ng-deep .assessment-cta-menu.mat-menu-panel .mat-menu-item:hover{background-color:var(--assessment-palette-EDF3FD, #EDF3FD);transform:translate(2px)}::ng-deep .assessment-cta-menu.mat-menu-panel .mat-menu-item:hover .menu-item-text{color:var(--assessment-primary-one, #467DD6)}::ng-deep .assessment-cta-menu.mat-menu-panel .mat-menu-item:hover .menu-action-icon{transform:scale(1.08)}\n"], components: [{ type: i4.MatExpansionPanel, selector: "mat-expansion-panel", inputs: ["disabled", "expanded", "hideToggle", "togglePosition"], outputs: ["opened", "closed", "expandedChange", "afterExpand", "afterCollapse"], exportAs: ["matExpansionPanel"] }, { type: i4.MatExpansionPanelHeader, selector: "mat-expansion-panel-header", inputs: ["tabIndex", "expandedHeight", "collapsedHeight"] }, { type: i5.MatMenu, selector: "mat-menu", exportAs: ["matMenu"] }, { type: i5.MatMenuItem, selector: "[mat-menu-item]", inputs: ["disabled", "disableRipple", "role"], exportAs: ["matMenuItem"] }, { type: i6.QuestionDetailsComponent, selector: "lib-question-details", inputs: ["sectionQuestion", "question", "questionBank", "labelConfig", "imageConfig", "allowDelete", "isLocked"], outputs: ["editQuestion", "duplicateQuestion", "deleteParentQuestion", "deleteChildQuestion"] }, { type: i7.MatSpinner, selector: "mat-spinner", inputs: ["color"] }], directives: [{ type: i8.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { type: i9.MinValidator, selector: "input[type=number][min][formControlName],input[type=number][min][formControl],input[type=number][min][ngModel]", inputs: ["min"] }, { type: i9.NumberValueAccessor, selector: "input[type=number][formControlName],input[type=number][formControl],input[type=number][ngModel]" }, { type: i9.DefaultValueAccessor, selector: "input:not([type=checkbox])[formControlName],textarea[formControlName],input:not([type=checkbox])[formControl],textarea[formControl],input:not([type=checkbox])[ngModel],textarea[ngModel],[ngDefaultControl]" }, { type: i9.NgControlStatus, selector: "[formControlName],[ngModel],[formControl]" }, { type: i9.NgModel, selector: "[ngModel]:not([formControlName]):not([formControl])", inputs: ["name", "disabled", "ngModel", "ngModelOptions"], outputs: ["ngModelChange"], exportAs: ["ngModel"] }, { type: i9.CheckboxControlValueAccessor, selector: "input[type=checkbox][formControlName],input[type=checkbox][formControl],input[type=checkbox][ngModel]" }, { type: i4.MatAccordion, selector: "mat-accordion", inputs: ["multi", "displayMode", "togglePosition", "hideToggle"], exportAs: ["matAccordion"] }, { type: i10.CdkDropList, selector: "[cdkDropList], cdk-drop-list", inputs: ["cdkDropListConnectedTo", "id", "cdkDropListEnterPredicate", "cdkDropListSortPredicate", "cdkDropListDisabled", "cdkDropListSortingDisabled", "cdkDropListAutoScrollDisabled", "cdkDropListOrientation", "cdkDropListLockAxis", "cdkDropListData", "cdkDropListAutoScrollStep"], outputs: ["cdkDropListDropped", "cdkDropListEntered", "cdkDropListExited", "cdkDropListSorted"], exportAs: ["cdkDropList"] }, { type: i8.NgForOf, selector: "[ngFor][ngForOf]", inputs: ["ngForOf", "ngForTrackBy", "ngForTemplate"] }, { type: i10.CdkDrag, selector: "[cdkDrag]", inputs: ["cdkDragDisabled", "cdkDragStartDelay", "cdkDragLockAxis", "cdkDragConstrainPosition", "cdkDragPreviewClass", "cdkDragBoundary", "cdkDragRootElement", "cdkDragPreviewContainer", "cdkDragData", "cdkDragFreeDragPosition"], outputs: ["cdkDragStarted", "cdkDragReleased", "cdkDragEnded", "cdkDragEntered", "cdkDragExited", "cdkDragDropped", "cdkDragMoved"], exportAs: ["cdkDrag"] }, { type: i10.CdkDragHandle, selector: "[cdkDragHandle]", inputs: ["cdkDragHandleDisabled"] }, { type: i8.NgClass, selector: "[ngClass]", inputs: ["class", "ngClass"] }, { type: i5.MatMenuTrigger, selector: "[mat-menu-trigger-for], [matMenuTriggerFor]", exportAs: ["matMenuTrigger"] }] });
427
678
  i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "12.2.17", ngImport: i0, type: AssessmentMakerComponent, decorators: [{
428
679
  type: Component,
429
680
  args: [{
@@ -455,6 +706,16 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "12.2.17", ngImpo
455
706
  type: Input
456
707
  }], minimumRequiredSections: [{
457
708
  type: Input
709
+ }], checkForResponses: [{
710
+ type: Input
711
+ }], showProctoringToggle: [{
712
+ type: Input
713
+ }], showTimeInput: [{
714
+ type: Input
715
+ }], enableImportFromQuestionBank: [{
716
+ type: Input
717
+ }], questionBankConfig: [{
718
+ type: Input
458
719
  }], assessmentIdChange: [{
459
720
  type: Output
460
721
  }], assessmentInstanceIdChange: [{
@@ -462,4 +723,4 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "12.2.17", ngImpo
462
723
  }], snackbarMessage: [{
463
724
  type: Output
464
725
  }] } });
465
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYXNzZXNzbWVudC1tYWtlci5jb21wb25lbnQuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy9jb21tb25zLWFzc2Vzc21lbnQvc3JjL2xpYi9tb2R1bGVzL2Fzc2Vzc21lbnQtbWFrZXIvYXNzZXNzbWVudC1tYWtlci5jb21wb25lbnQudHMiLCIuLi8uLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy9jb21tb25zLWFzc2Vzc21lbnQvc3JjL2xpYi9tb2R1bGVzL2Fzc2Vzc21lbnQtbWFrZXIvYXNzZXNzbWVudC1tYWtlci5jb21wb25lbnQuaHRtbCJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQUUsU0FBUyxFQUFFLFlBQVksRUFBRSxLQUFLLEVBQVUsTUFBTSxFQUFFLE1BQU0sZUFBZSxDQUFDO0FBQy9FLE9BQU8sRUFBRSxRQUFRLEVBQUUsTUFBTSxNQUFNLENBQUM7QUFDaEMsT0FBTyxFQUFlLGVBQWUsRUFBRSxNQUFNLHdCQUF3QixDQUFDO0FBRXRFLE9BQU8sRUFBRSxtQ0FBbUMsRUFBRSxNQUFNLG9GQUFvRixDQUFDO0FBQ3pJLE9BQU8sRUFBRSwwQkFBMEIsRUFBRSxNQUFNLDhEQUE4RCxDQUFDO0FBTTFHLE9BQU8sRUFBRSxXQUFXLEVBQUUsTUFBTSxvQkFBb0IsQ0FBQzs7Ozs7Ozs7Ozs7O0FBUWpELE1BQU0sT0FBTyx3QkFBd0I7SUEwQm5DLFlBQ1Usc0JBQThDLEVBQzlDLHdCQUFrRCxFQUNsRCxNQUFpQjtRQUZqQiwyQkFBc0IsR0FBdEIsc0JBQXNCLENBQXdCO1FBQzlDLDZCQUF3QixHQUF4Qix3QkFBd0IsQ0FBMEI7UUFDbEQsV0FBTSxHQUFOLE1BQU0sQ0FBVztRQTVCbEIsZ0JBQVcsR0FBOEIsRUFBRSxDQUFDO1FBQzVDLGdCQUFXLEdBQThCLEVBQUUsQ0FBQztRQUM1QyxrQkFBYSxHQUFtQixFQUFFLENBQUM7UUFDbkMsZUFBVSxHQUFZLEtBQUssQ0FBQztRQUU1Qixp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QkFBd0I7MEdBQXhCLHdCQUF3QiwrckJDbkJyQyxreVhBeUljOzRGRHRIRCx3QkFBd0I7a0JBTnBDLFNBQVM7bUJBQUM7b0JBQ1QsUUFBUSxFQUFFLHNCQUFzQjtvQkFDaEMsV0FBVyxFQUFFLG1DQUFtQztvQkFDaEQsU0FBUyxFQUFFLENBQUMsbUNBQW1DLENBQUM7aUJBQ2pEOzRLQUdVLFdBQVc7c0JBQW5CLEtBQUs7Z0JBQ0csV0FBVztzQkFBbkIsS0FBSztnQkFDRyxhQUFhO3NCQUFyQixLQUFLO2dCQUNHLFVBQVU7c0JBQWxCLEtBQUs7Z0JBQ0csV0FBVztzQkFBbkIsS0FBSztnQkFDRyxZQUFZO3NCQUFwQixLQUFLO2dCQUNHLG9CQUFvQjtzQkFBNUIsS0FBSztnQkFDRyxvQkFBb0I7c0JBQTVCLEtBQUs7Z0JBQ0csNEJBQTRCO3NCQUFwQyxLQUFLO2dCQUNHLDZCQUE2QjtzQkFBckMsS0FBSztnQkFDRyxpQkFBaUI7c0JBQXpCLEtBQUs7Z0JBQ0csdUJBQXVCO3NCQUEvQixLQUFLO2dCQUVJLGtCQUFrQjtzQkFBM0IsTUFBTTtnQkFDRywwQkFBMEI7c0JBQW5DLE1BQU07Z0JBQ0csZUFBZTtzQkFBeEIsTUFBTSIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IENvbXBvbmVudCwgRXZlbnRFbWl0dGVyLCBJbnB1dCwgT25Jbml0LCBPdXRwdXQgfSBmcm9tICdAYW5ndWxhci9jb3JlJztcclxuaW1wb3J0IHsgZm9ya0pvaW4gfSBmcm9tICdyeGpzJztcclxuaW1wb3J0IHsgQ2RrRHJhZ0Ryb3AsIG1vdmVJdGVtSW5BcnJheSB9IGZyb20gJ0Bhbmd1bGFyL2Nkay9kcmFnLWRyb3AnO1xyXG5pbXBvcnQgeyBNYXREaWFsb2cgfSBmcm9tICdAYW5ndWxhci9tYXRlcmlhbC9kaWFsb2cnO1xyXG5pbXBvcnQgeyBBZGRFZGl0U2VjdGlvbkludHJvZHVjdGlvbkNvbXBvbmVudCB9IGZyb20gJy4vY29tcG9uZW50cy9hZGQtZWRpdC1zZWN0aW9uLWludHJvZHVjdGlvbi9hZGQtZWRpdC1zZWN0aW9uLWludHJvZHVjdGlvbi5jb21wb25lbnQnO1xyXG5pbXBvcnQgeyBBc3Nlc3NtZW50QnVpbGRlckNvbXBvbmVudCB9IGZyb20gJy4vY29tcG9uZW50cy9hc3Nlc3NtZW50LWJ1aWxkZXIvYXNzZXNzbWVudC1idWlsZGVyLmNvbXBvbmVudCc7XHJcbmltcG9ydCB7IFF1ZXN0aW9uVHlwZSwgQXNzZXNzbWVudCwgUmVmRGF0YSwgQXNzZXNzbWVudENvbnRleHREVE8sIEFzc2Vzc21lbnRJbnN0YW5jZSB9IGZyb20gJy4uLy4uL3NoYXJlZC9pbnRlcmZhY2VzL2Fzc2Vzc21lbnQuaW50ZXJmYWNlJztcclxuaW1wb3J0IHsgQXNzZXNzbWVudFF1ZXN0aW9uUGFwZXIsIFNlY3Rpb25RdWVzdGlvbiwgUXVlc3Rpb25QYXBlclNlY3Rpb24gfSBmcm9tICcuLi8uLi9zaGFyZWQvaW50ZXJmYWNlcy9xdWVzdGlvbi1wYXBlci5pbnRlcmZhY2UnO1xyXG5pbXBvcnQgeyBBc3Nlc3NtZW50UXVlc3Rpb24gfSBmcm9tICcuLi8uLi9zaGFyZWQvaW50ZXJmYWNlcy9xdWVzdGlvbi5pbnRlcmZhY2UnO1xyXG5pbXBvcnQgeyBBc3Nlc3NtZW50QnVpbGRlclNlcnZpY2UgfSBmcm9tICcuL3NlcnZpY2VzL2Fzc2Vzc21lbnQtYnVpbGRlci5zZXJ2aWNlJztcclxuaW1wb3J0IHsgQXNzZXNzbWVudE1ha2VyU2VydmljZSB9IGZyb20gJy4vc2VydmljZXMvYXNzZXNzbWVudC1tYWtlci5zZXJ2aWNlJztcclxuaW1wb3J0IHsgc29ydEJ5T3JkZXIgfSBmcm9tICcuLi8uLi9zaGFyZWQvdXRpbHMnO1xyXG5cclxuQENvbXBvbmVudCh7XHJcbiAgc2VsZWN0b3I6ICdsaWItYXNzZXNzbWVudC1tYWtlcicsXHJcbiAgdGVtcGxhdGVVcmw6ICcuL2Fzc2Vzc21lbnQtbWFrZXIuY29tcG9uZW50Lmh0bWwnLFxyXG4gIHN0eWxlVXJsczogWycuL2Fzc2Vzc21lbnQtbWFrZXIuY29tcG9uZW50LnNjc3MnXVxyXG59KVxyXG5cclxuZXhwb3J0IGNsYXNzIEFzc2Vzc21lbnRNYWtlckNvbXBvbmVudCBpbXBsZW1lbnRzIE9uSW5pdCB7XHJcbiAgQElucHV0KCkgbGFiZWxDb25maWc6IHsgW2tleTogc3RyaW5nXTogc3RyaW5nIH0gPSB7fTtcclxuICBASW5wdXQoKSBpbWFnZUNvbmZpZzogeyBba2V5OiBzdHJpbmddOiBzdHJpbmcgfSA9IHt9O1xyXG4gIEBJbnB1dCgpIHF1ZXN0aW9uVHlwZXM6IFF1ZXN0aW9uVHlwZVtdID0gW107XHJcbiAgQElucHV0KCkgc2hvd0Zvb3RlcjogYm9vbGVhbiA9IGZhbHNlO1xyXG4gIEBJbnB1dCgpIGN1c3RvbVJ1bGVzPzogYW55O1xyXG4gIEBJbnB1dCgpIGFzc2Vzc21lbnRJZDogbnVtYmVyID0gMDtcclxuICBASW5wdXQoKSBhc3Nlc3NtZW50SW5zdGFuY2VJZDogbnVtYmVyID0gMDtcclxuICBASW5wdXQoKSBkZWZhdWx0QXNzZXNzbWVudERUTzogQXNzZXNzbWVudCA9IHt9O1xyXG4gIEBJbnB1dCgpIHByZWRlZmluZWRBc3Nlc3NtZW50SW5zdGFuY2U6IEFzc2Vzc21lbnRJbnN0YW5jZSA9IHt9O1xyXG4gIEBJbnB1dCgpIGVuYWJsZVNraWxsc1RvUXVlc3Rpb25NYXBwaW5nOiBib29sZWFuID0gZmFsc2U7XHJcbiAgQElucHV0KCkgYXNzZXNzbWVudENvbnRleHQhOiBBc3Nlc3NtZW50Q29udGV4dERUTztcclxuICBASW5wdXQoKSBtaW5pbXVtUmVxdWlyZWRTZWN0aW9uczogbnVtYmVyID0gMDtcclxuXHJcbiAgQE91dHB1dCgpIGFzc2Vzc21lbnRJZENoYW5nZSA9IG5ldyBFdmVudEVtaXR0ZXI8bnVtYmVyPigpO1xyXG4gIEBPdXRwdXQoKSBhc3Nlc3NtZW50SW5zdGFuY2VJZENoYW5nZSA9IG5ldyBFdmVudEVtaXR0ZXI8bnVtYmVyPigpO1xyXG4gIEBPdXRwdXQoKSBzbmFja2Jhck1lc3NhZ2UgPSBuZXcgRXZlbnRFbWl0dGVyPHsgbWVzc2FnZTogc3RyaW5nLCB0eXBlOiAnc3VjY2VzcycgfCAnZXJyb3InIHwgJ2luZm8nIH0+KCk7XHJcblxyXG4gIHNob3dMb2FkZXI6IGJvb2xlYW4gPSBmYWxzZTtcclxuICBxdWVzdGlvbkJhbms6IFJlY29yZDxudW1iZXIsIEFzc2Vzc21lbnRRdWVzdGlvbj4gPSB7fTtcclxuICBhc3Nlc3NtZW50UXVlc3Rpb25QYXBlckRhdGE6IEFzc2Vzc21lbnRRdWVzdGlvblBhcGVyID0geyBpZDogMCwgcXVlc3Rpb25QYXBlclNlY3Rpb25MaXN0OiBbXSB9O1xyXG4gIGNvbmZpZ3NMb2FkZWQ6IGJvb2xlYW4gPSBmYWxzZTtcclxuICBydWxlczogYW55O1xyXG4gIGlzU3VibWl0dGluZzogYm9vbGVhbiA9IGZhbHNlO1xyXG4gIHNraWxsc0xpc3Q6IFJlZkRhdGFbXSA9IFtdO1xyXG5cclxuICBjb25zdHJ1Y3RvcihcclxuICAgIHByaXZhdGUgYXNzZXNzbWVudE1ha2VyU2VydmljZTogQXNzZXNzbWVudE1ha2VyU2VydmljZSxcclxuICAgIHByaXZhdGUgYXNzZXNzbWVudEJ1aWxkZXJTZXJ2aWNlOiBBc3Nlc3NtZW50QnVpbGRlclNlcnZpY2UsXHJcbiAgICBwcml2YXRlIGRpYWxvZzogTWF0RGlhbG9nXHJcbiAgKSB7IH1cclxuXHJcbiAgbmdPbkluaXQoKTogdm9pZCB7XHJcbiAgICB0aGlzLmFzc2Vzc21lbnRCdWlsZGVyU2VydmljZS5zZXREZWZhdWx0QXNzZXNzbWVudERUTyh0aGlzLmRlZmF1bHRBc3Nlc3NtZW50RFRPKTtcclxuICAgIHRoaXMuZ2V0Q29uZmlnc0Zyb21KU09OKCk7XHJcblxyXG4gICAgaWYgKHRoaXMuYXNzZXNzbWVudENvbnRleHQpIHtcclxuICAgICAgdGhpcy5hc3Nlc3NtZW50SW5zdGFuY2VJZCA9IHRoaXMuYXNzZXNzbWVudENvbnRleHQ/LmFzc2Vzc21lbnRJbnN0YW5jZURUTz8uaWQgfHwgdGhpcy5hc3Nlc3NtZW50SW5zdGFuY2VJZDtcclxuICAgICAgdGhpcy5hc3Nlc3NtZW50SWQgPSB0aGlzLmFzc2Vzc21lbnRDb250ZXh0Py5hc3Nlc3NtZW50Py5pZCB8fCB0aGlzLmFzc2Vzc21lbnRJZDtcclxuICAgIH1cclxuXHJcbiAgICBpZiAodGhpcy5hc3Nlc3NtZW50SWQpIHtcclxuICAgICAgdGhpcy5zaG93TG9hZGVyID0gdHJ1ZTtcclxuICAgICAgdGhpcy5sb2FkQXNzZXNzbWVudERhdGEoKTtcclxuICAgIH1cclxuXHJcbiAgICBpZiAodGhpcy5lbmFibGVTa2lsbHNUb1F1ZXN0aW9uTWFwcGluZykge1xyXG4gICAgICB0aGlzLmdldFNraWxsc0xpc3QoKTtcclxuICAgIH1cclxuICB9XHJcblxyXG4gIGdldENvbmZpZ3NGcm9tSlNPTigpIHtcclxuICAgIGZvcmtKb2luKHtcclxuICAgICAgbGFiZWxDb25maWc6IHRoaXMuYXNzZXNzbWVudE1ha2VyU2VydmljZS5nZXRDb25maWdKU09OKCdqc29uL2xhYmVsQ29uZmlnJyksXHJcbiAgICAgIGltYWdlQ29uZmlnOiB0aGlzLmFzc2Vzc21lbnRNYWtlclNlcnZpY2UuZ2V0Q29uZmlnSlNPTignanNvbi9pbWFnZUNvbmZpZycpLFxyXG4gICAgICBydWxlczogdGhpcy5hc3Nlc3NtZW50TWFrZXJTZXJ2aWNlLmdldENvbmZpZ0pTT04oJ2pzb24vcXVlc3Rpb24tYnVpbGRlci1ydWxlcycpLFxyXG4gICAgICAuLi4oIXRoaXMucXVlc3Rpb25UeXBlcz8ubGVuZ3RoICYmIHtcclxuICAgICAgICBxdWVzdGlvblR5cGVzOiB0aGlzLmFzc2Vzc21lbnRNYWtlclNlcnZpY2UuZ2V0Q29uZmlnSlNPTignanNvbi9xdWVzdGlvblR5cGVzJylcclxuICAgICAgfSlcclxuICAgIH0pLnN1YnNjcmliZSgocmVzOiBhbnkpID0+IHtcclxuICAgICAgdGhpcy5sYWJlbENvbmZpZyA9IE9iamVjdC5hc3NpZ24oe30sIHJlcz8ubGFiZWxDb25maWcsIHRoaXMubGFiZWxDb25maWcpO1xyXG4gICAgICB0aGlzLmltYWdlQ29uZmlnID0gT2JqZWN0LmFzc2lnbih7fSwgcmVzPy5pbWFnZUNvbmZpZywgdGhpcy5pbWFnZUNvbmZpZyk7XHJcbiAgICAgIGlmIChyZXM/LnF1ZXN0aW9uVHlwZXMpIHtcclxuICAgICAgICB0aGlzLnF1ZXN0aW9uVHlwZXMgPSByZXM/LnF1ZXN0aW9uVHlwZXM7XHJcbiAgICAgIH1cclxuICAgICAgLy8gTWVyZ2UgY3VzdG9tUnVsZXMgcGVyIHF1ZXN0aW9uVHlwZSBvdmVyIGRlZmF1bHQgcnVsZXNcclxuICAgICAgdGhpcy5ydWxlcyA9IHsgLi4ucmVzPy5ydWxlcyB9O1xyXG4gICAgICBpZiAodGhpcy5jdXN0b21SdWxlcykge1xyXG4gICAgICAgIE9iamVjdC5rZXlzKHRoaXMuY3VzdG9tUnVsZXMpLmZvckVhY2gocVR5cGUgPT4ge1xyXG4gICAgICAgICAgaWYgKCF0aGlzLnJ1bGVzW3FUeXBlXSkge1xyXG4gICAgICAgICAgICB0aGlzLnJ1bGVzW3FUeXBlXSA9IHsgLi4udGhpcy5jdXN0b21SdWxlc1txVHlwZV0gfTtcclxuICAgICAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgICAgIHRoaXMucnVsZXNbcVR5cGVdID0geyAuLi50aGlzLnJ1bGVzW3FUeXBlXSwgLi4udGhpcy5jdXN0b21SdWxlc1txVHlwZV0gfTtcclxuICAgICAgICAgIH1cclxuICAgICAgICB9KTtcclxuICAgICAgfVxyXG5cclxuICAgICAgdGhpcy5jb25maWdzTG9hZGVkID0gdHJ1ZTtcclxuICAgIH0pXHJcbiAgfVxyXG5cclxuICBsb2FkQXNzZXNzbWVudERhdGEoKSB7XHJcbiAgICBpZiAodGhpcy5hc3Nlc3NtZW50Q29udGV4dCkge1xyXG4gICAgICB0aGlzLnF1ZXN0aW9uQmFuayA9IHtcclxuICAgICAgICAuLi50aGlzLnF1ZXN0aW9uQmFuayxcclxuICAgICAgICAuLi4odGhpcy5hc3Nlc3NtZW50Q29udGV4dD8ucXVlc3Rpb25EVE9NYXAgfHwge30pXHJcbiAgICAgIH07XHJcbiAgICAgIHRoaXMudXBkYXRlQXNzZXNzbWVudFF1ZXN0aW9uUGFwZXJEYXRhKHRoaXMuYXNzZXNzbWVudENvbnRleHQ/LmFzc2Vzc21lbnRRdWVzdGlvblBhcGVyRFRPKTtcclxuICAgICAgdGhpcy5zaG93TG9hZGVyID0gZmFsc2U7XHJcbiAgICB9IGVsc2Uge1xyXG4gICAgICB0aGlzLmFzc2Vzc21lbnRNYWtlclNlcnZpY2UuZ2V0QXNzZXNzbWVudENvbnRleHQoeyBhc3Nlc3NtZW50SWRzOiBbdGhpcy5hc3Nlc3NtZW50SWRdIH0pLnN1YnNjcmliZSh7XHJcbiAgICAgICAgbmV4dDogKHJlczogYW55KSA9PiB7XHJcbiAgICAgICAgICB0aGlzLmFzc2Vzc21lbnRDb250ZXh0ID0gcmVzPy5bMF07XHJcbiAgICAgICAgICB0aGlzLnF1ZXN0aW9uQmFuayA9IHtcclxuICAgICAgICAgICAgLi4udGhpcy5xdWVzdGlvbkJhbmssXHJcbiAgICAgICAgICAgIC4uLih0aGlzLmFzc2Vzc21lbnRDb250ZXh0Py5xdWVzdGlvbkRUT01hcCB8fCB7fSlcclxuICAgICAgICAgIH07XHJcbiAgICAgICAgICB0aGlzLnVwZGF0ZUFzc2Vzc21lbnRRdWVzdGlvblBhcGVyRGF0YSh0aGlzLmFzc2Vzc21lbnRDb250ZXh0Py5hc3Nlc3NtZW50UXVlc3Rpb25QYXBlckRUTyk7XHJcbiAgICAgICAgICB0aGlzLnNob3dMb2FkZXIgPSBmYWxzZTtcclxuICAgICAgICB9LFxyXG4gICAgICAgIGVycm9yOiAoZXJyb3I6IGFueSkgPT4ge1xyXG4gICAgICAgICAgY29uc29sZS5lcnJvcihlcnJvcik7XHJcbiAgICAgICAgICB0aGlzLnNuYWNrYmFyTWVzc2FnZS5lbWl0KHsgbWVzc2FnZTogdGhpcy5sYWJlbENvbmZpZ1snQ09NTU9OU19BU1NFU1NNRU5ULlRPQVNULkVSUk9SX0RFRkFVTFQnXSwgdHlwZTogJ2Vycm9yJyB9KTtcclxuICAgICAgICAgIHRocm93IHsgZXJyb3IsIG1ldGhvZDogJ0dFVCcgfVxyXG4gICAgICAgIH1cclxuICAgICAgfSlcclxuICAgIH1cclxuICB9XHJcblxyXG4gIGdlbmVyYXRlUXVlc3Rpb25CYW5rKCkge1xyXG4gICAgbGV0IGNoaWxkUXVlc3Rpb25JZHM6IG51bWJlcltdID0gW107XHJcblxyXG4gICAgdGhpcy5hc3Nlc3NtZW50UXVlc3Rpb25QYXBlckRhdGE/LnF1ZXN0aW9uUGFwZXJTZWN0aW9uTGlzdD8uZm9yRWFjaCgoc2VjdGlvbjogYW55KSA9PiB7XHJcbiAgICAgIHNlY3Rpb24/LnNlY3Rpb25RdWVzdGlvbnNMaXN0Py5mb3JFYWNoKChxOiBhbnkpID0+IHtcclxuICAgICAgICBpZiAodGhpcy5xdWVzdGlvbkJhbms/LltxPy5xdWVzdGlvbklkXT8uZGVmYXVsdE9wdGlvbnNMaXN0Py5sZW5ndGgpIHtcclxuICAgICAgICAgIHRoaXMucXVlc3Rpb25CYW5rPy5bcT8ucXVlc3Rpb25JZF0/LmRlZmF1bHRPcHRpb25zTGlzdD8uZm9yRWFjaCgob3B0aW9uOiBhbnkpID0+IHtcclxuICAgICAgICAgICAgaWYgKG9wdGlvbj8uY2hpbGRRdWVzdGlvbkxpc3Q/Lmxlbmd0aCkge1xyXG4gICAgICAgICAgICAgIG9wdGlvbj8uY2hpbGRRdWVzdGlvbkxpc3Q/LmZvckVhY2goKGNjcTogYW55KSA9PiB7XHJcbiAgICAgICAgICAgICAgICBjaGlsZFF1ZXN0aW9uSWRzLnB1c2goY2NxKTtcclxuICAgICAgICAgICAgICB9KTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgfSk7XHJcbiAgICAgICAgfVxyXG4gICAgICB9KTtcclxuICAgIH0pO1xyXG5cclxuICAgIC8vIFJlbW92ZSBkdXBsaWNhdGVzIGFuZCBmaWx0ZXIgb3V0IG9uZXMgd2UgYWxyZWFkeSBoYXZlIGluIHRoZSBiYW5rXHJcbiAgICBjaGlsZFF1ZXN0aW9uSWRzID0gWy4uLm5ldyBTZXQoY2hpbGRRdWVzdGlvbklkcyldLmZpbHRlcihpZCA9PiAhdGhpcy5xdWVzdGlvbkJhbmtbaWRdKTtcclxuXHJcbiAgICBpZiAoY2hpbGRRdWVzdGlvbklkcz8ubGVuZ3RoID4gMCkge1xyXG4gICAgICBjb25zdCBwYXJhbXMgPSB7IHF1ZXN0aW9uSWRzOiBjaGlsZFF1ZXN0aW9uSWRzIH07XHJcbiAgICAgIHRoaXMuYXNzZXNzbWVudE1ha2VyU2VydmljZS5nZXRRdWVzdGlvbnNCeUlkcyhwYXJhbXMpLnN1YnNjcmliZSh7XHJcbiAgICAgICAgbmV4dDogKHJlczogYW55KSA9PiB7XHJcbiAgICAgICAgICByZXM/LmZvckVhY2goKHF1ZXN0aW9uOiBhbnkpID0+IHtcclxuICAgICAgICAgICAgdGhpcy5xdWVzdGlvbkJhbmtbcXVlc3Rpb24uaWRdID0gcXVlc3Rpb247XHJcbiAgICAgICAgICB9KTtcclxuICAgICAgICB9LFxyXG4gICAgICAgIGVycm9yOiAoZXJyb3I6IGFueSkgPT4ge1xyXG4gICAgICAgICAgY29uc29sZS5lcnJvcihlcnJvcik7XHJcbiAgICAgICAgICB0aHJvdyB7IGVycm9yLCBtZXRob2Q6ICdHRVQnLCBwYXlsb2FkOiBwYXJhbXMgfVxyXG4gICAgICAgIH1cclxuICAgICAgfSlcclxuICAgIH1cclxuICB9XHJcblxyXG4gIGltYWdlRXJyb3JIYW5kbGVyKGV2ZW50OiBhbnksIGZpbGVQYXRoOiBzdHJpbmcpIHtcclxuICAgIGV2ZW50LnRhcmdldC5zcmMgPSBmaWxlUGF0aDtcclxuICB9XHJcblxyXG4gIGZvY3VzU2VjdGlvbklucHV0KHNlY3Rpb25JbmRleDogbnVtYmVyLCBldmVudDogRXZlbnQpIHtcclxuICAgIGV2ZW50LnN0b3BQcm9wYWdhdGlvbigpO1xyXG4gICAgY29uc3QgaW5wdXQgPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZChgc2VjdGlvbk5hbWVJbnB1dF8ke3NlY3Rpb25JbmRleH1gKSBhcyBIVE1MSW5wdXRFbGVtZW50O1xyXG4gICAgaWYgKGlucHV0KSB7XHJcbiAgICAgIGlucHV0LmZvY3VzKCk7XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICBkcm9wU2VjdGlvbihldmVudDogQ2RrRHJhZ0Ryb3A8YW55W10+KSB7XHJcbiAgICBpZiAodGhpcy5hc3Nlc3NtZW50UXVlc3Rpb25QYXBlckRhdGEucXVlc3Rpb25QYXBlclNlY3Rpb25MaXN0KSB7XHJcbiAgICAgIG1vdmVJdGVtSW5BcnJheShcclxuICAgICAgICB0aGlzLmFzc2Vzc21lbnRRdWVzdGlvblBhcGVyRGF0YS5xdWVzdGlvblBhcGVyU2VjdGlvbkxpc3QsXHJcbiAgICAgICAgZXZlbnQucHJldmlvdXNJbmRleCxcclxuICAgICAgICBldmVudC5jdXJyZW50SW5kZXhcclxuICAgICAgKTtcclxuICAgIH1cclxuICB9XHJcblxyXG4gIGRyb3BRdWVzdGlvbihldmVudDogQ2RrRHJhZ0Ryb3A8YW55W10+KSB7XHJcbiAgICBtb3ZlSXRlbUluQXJyYXkoXHJcbiAgICAgIGV2ZW50LmNvbnRhaW5lci5kYXRhLFxyXG4gICAgICBldmVudC5wcmV2aW91c0luZGV4LFxyXG4gICAgICBldmVudC5jdXJyZW50SW5kZXhcclxuICAgICk7XHJcbiAgfVxyXG5cclxuICBhZGRJbnN0cnVjdGlvbihzZWN0aW9uOiBhbnkpIHtcclxuICAgIGNvbnN0IGRpYWxvZ1JlZiA9IHRoaXMuZGlhbG9nLm9wZW4oQWRkRWRpdFNlY3Rpb25JbnRyb2R1Y3Rpb25Db21wb25lbnQsIHtcclxuICAgICAgYXV0b0ZvY3VzOiBmYWxzZSxcclxuICAgICAgbWF4V2lkdGg6ICc5NSUnLFxyXG4gICAgICB3aWR0aDogJzQwcmVtJyxcclxuICAgICAgbWF4SGVpZ2h0OiAnMTAwZHZoJyxcclxuICAgICAgcGFuZWxDbGFzczogWydhc3Nlc3NtZW50LWRpYWxvZyddLFxyXG4gICAgICBkYXRhOiB7XHJcbiAgICAgICAgaW1hZ2VDb25maWc6IHRoaXMuaW1hZ2VDb25maWcsXHJcbiAgICAgICAgbGFiZWxDb25maWc6IHRoaXMubGFiZWxDb25maWcsXHJcbiAgICAgICAgc2VjdGlvbkRldGFpbHM6IHNlY3Rpb25cclxuICAgICAgfSxcclxuICAgIH0pO1xyXG5cclxuICAgIGRpYWxvZ1JlZi5hZnRlckNsb3NlZCgpLnN1YnNjcmliZSgocmVzdWx0KSA9PiB7XHJcbiAgICAgIGlmIChyZXN1bHQ/LnVwZGF0ZSkge1xyXG4gICAgICAgIGlmICghc2VjdGlvbi5xcHNEZXNjKSBzZWN0aW9uLnFwc0Rlc2MgPSBbXTtcclxuICAgICAgICBpZiAoIXNlY3Rpb24ucXBzRGVzY1swXSkgc2VjdGlvbi5xcHNEZXNjWzBdID0geyBpZDogMCwgbGFuZ3VhZ2U6IHsgY29kZTogJ0VORycgfSwgdGV4dDogJycgfTtcclxuICAgICAgICBzZWN0aW9uLnFwc0Rlc2NbMF0udGV4dCA9IHJlc3VsdD8uZGVzY3JpcHRpb247XHJcbiAgICAgICAgc2VjdGlvbi5tZWRpYVVybCA9IHJlc3VsdD8ubWVkaWFVcmwgfHwgbnVsbDtcclxuICAgICAgICB0aGlzLnBhdGNoQXNzZXNzbWVudEFuZFF1ZXN0aW9uUGFwZXIodGhpcy5sYWJlbENvbmZpZ1snQ09NTU9OU19BU1NFU1NNRU5ULlRPQVNULlNFQ1RJT05fSU5TVFJVQ1RJT05TX1VQREFURURfU1VDQ0VTUyddKTtcclxuICAgICAgfVxyXG4gICAgfSk7XHJcbiAgfVxyXG5cclxuICBkZWxldGVDaGlsZFF1ZXN0aW9uKG9wdGlvbjogYW55LCBjaGlsZElkVG9SZW1vdmU6IG51bWJlciB8IGFueSkge1xyXG4gICAgaWYgKG9wdGlvbi5jaGlsZFF1ZXN0aW9uTGlzdCkge1xyXG4gICAgICBjb25zdCBpZFRvUmVtb3ZlID0gdHlwZW9mIGNoaWxkSWRUb1JlbW92ZSA9PT0gJ29iamVjdCcgPyBjaGlsZElkVG9SZW1vdmU/LmlkIDogY2hpbGRJZFRvUmVtb3ZlO1xyXG4gICAgICBvcHRpb24uY2hpbGRRdWVzdGlvbkxpc3QgPSBvcHRpb24uY2hpbGRRdWVzdGlvbkxpc3QuZmlsdGVyKChjY3E6IGFueSkgPT4ge1xyXG4gICAgICAgIGNvbnN0IGlkID0gdHlwZW9mIGNjcSA9PT0gJ29iamVjdCcgPyBjY3E/LmlkIDogY2NxO1xyXG4gICAgICAgIHJldHVybiBpZCAhPT0gaWRUb1JlbW92ZTtcclxuICAgICAgfSk7XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICBkZWxldGVQYXJlbnRRdWVzdGlvbihzZWN0aW9uUXVlc3Rpb246IFNlY3Rpb25RdWVzdGlvbikge1xyXG4gICAgc2VjdGlvblF1ZXN0aW9uLmlzQWN0aXZlID0gZmFsc2U7XHJcbiAgICB0aGlzLnBhdGNoQXNzZXNzbWVudEFuZFF1ZXN0aW9uUGFwZXIodGhpcy5sYWJlbENvbmZpZ1snQ09NTU9OU19BU1NFU1NNRU5ULlRPQVNULlFVRVNUSU9OX0RFTEVURURfU1VDQ0VTUyddKTtcclxuICB9XHJcblxyXG4gIGRlbGV0ZVNlY3Rpb24oc2VjdGlvbjogUXVlc3Rpb25QYXBlclNlY3Rpb24pIHtcclxuICAgIHNlY3Rpb24uaXNBY3RpdmUgPSBmYWxzZTtcclxuICAgIHRoaXMucGF0Y2hBc3Nlc3NtZW50QW5kUXVlc3Rpb25QYXBlcih0aGlzLmxhYmVsQ29uZmlnWydDT01NT05TX0FTU0VTU01FTlQuVE9BU1QuU0VDVElPTl9ERUxFVEVEX1NVQ0NFU1MnXSk7XHJcbiAgfVxyXG5cclxuICBjcmVhdGVFZGl0UXVlc3Rpb24oc2VjdGlvbkRldGFpbHM/OiBhbnksIHNlY3Rpb25RdWVzdGlvbklkPzogbnVtYmVyLCBpc0NoaWxkPzogYm9vbGVhbik6IHZvaWQge1xyXG4gICAgY29uc3QgcXVlc3Rpb25EZXRhaWxzID0gdGhpcy5nZXRRdWVzdGlvbkZyb21CYW5rKHNlY3Rpb25RdWVzdGlvbklkKTtcclxuICAgIGNvbnN0IGRpYWxvZ1JlZiA9IHRoaXMuZGlhbG9nLm9wZW4oQXNzZXNzbWVudEJ1aWxkZXJDb21wb25lbnQsIHtcclxuICAgICAgYXV0b0ZvY3VzOiBmYWxzZSxcclxuICAgICAgcG9zaXRpb246IHsgcmlnaHQ6ICcwJyB9LFxyXG4gICAgICBtYXhXaWR0aDogJzEwMCUnLFxyXG4gICAgICB3aWR0aDogJzU1cmVtJyxcclxuICAgICAgaGVpZ2h0OiAnMTAwdmgnLFxyXG4gICAgICBwYW5lbENsYXNzOiBbJ2Fzc2Vzc21lbnQtZGlhbG9nJywgJ2Fzc2Vzc21lbnQtZGlhbG9nLXNsaWRlci1hbmltYXRpb24nXSxcclxuICAgICAgaGFzQmFja2Ryb3A6IHRydWUsXHJcbiAgICAgIGRhdGE6IHtcclxuICAgICAgICBsYWJlbENvbmZpZzogdGhpcy5sYWJlbENvbmZpZyxcclxuICAgICAgICBpbWFnZUNvbmZpZzogdGhpcy5pbWFnZUNvbmZpZyxcclxuICAgICAgICBxdWVzdGlvblR5cGVzOiB0aGlzLnF1ZXN0aW9uVHlwZXMsXHJcbiAgICAgICAgcnVsZXM6IHRoaXMucnVsZXMsXHJcbiAgICAgICAgcXVlc3Rpb25CYW5rOiB0aGlzLnF1ZXN0aW9uQmFuayxcclxuICAgICAgICBpc0NoaWxkOiBpc0NoaWxkLFxyXG4gICAgICAgIHF1ZXN0aW9uRGV0YWlscyxcclxuICAgICAgICBzZWN0aW9uRGV0YWlscyxcclxuICAgICAgICBhc3Nlc3NtZW50UXVlc3Rpb25QYXBlckRhdGE6IHRoaXMuYXNzZXNzbWVudFF1ZXN0aW9uUGFwZXJEYXRhLFxyXG4gICAgICAgIGFzc2Vzc21lbnRJZDogdGhpcy5hc3Nlc3NtZW50SWQsXHJcbiAgICAgICAgc2tpbGxzTGlzdDogdGhpcy5za2lsbHNMaXN0LFxyXG4gICAgICAgIHNuYWNrYmFyTWVzc2FnZUVtaXR0ZXI6IHRoaXMuc25hY2tiYXJNZXNzYWdlXHJcbiAgICAgIH0sXHJcbiAgICB9KTtcclxuXHJcbiAgICBkaWFsb2dSZWYuYWZ0ZXJDbG9zZWQoKS5zdWJzY3JpYmUoKHJlczogYW55KSA9PiB7XHJcbiAgICAgIGlmIChyZXM/LnN1Y2Nlc3MpIHtcclxuICAgICAgICBpZiAocmVzPy5hc3Nlc3NtZW50SWQpIHtcclxuICAgICAgICAgIGlmICghdGhpcy5hc3Nlc3NtZW50SWQpIHtcclxuICAgICAgICAgICAgdGhpcy5hc3Nlc3NtZW50SWQgPSByZXMuYXNzZXNzbWVudElkO1xyXG4gICAgICAgICAgICB0aGlzLmFzc2Vzc21lbnRJZENoYW5nZS5lbWl0KHRoaXMuYXNzZXNzbWVudElkKTtcclxuICAgICAgICAgIH1cclxuICAgICAgICAgIHRoaXMucXVlc3Rpb25CYW5rID0ge1xyXG4gICAgICAgICAgICAuLi50aGlzLnF1ZXN0aW9uQmFuayxcclxuICAgICAgICAgICAgLi4uKHJlcz8ucXVlc3Rpb25NYXAgfHwge30pXHJcbiAgICAgICAgICB9O1xyXG4gICAgICAgICAgdGhpcy51cGRhdGVBc3Nlc3NtZW50UXVlc3Rpb25QYXBlckRhdGEocmVzLnF1ZXN0aW9uUGFwZXIpO1xyXG4gICAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgICB0aGlzLnBhdGNoQXNzZXNzbWVudEFuZFF1ZXN0aW9uUGFwZXIoKTtcclxuICAgICAgICB9XHJcbiAgICAgIH1cclxuICAgIH0pO1xyXG4gIH1cclxuXHJcbiAgZHVwbGljYXRlU2VjdGlvbihzZWN0aW9uSWQ6IG51bWJlcikge1xyXG4gICAgaWYgKCF0aGlzLmFzc2Vzc21lbnRRdWVzdGlvblBhcGVyRGF0YT8uaWQpIHJldHVybjtcclxuICAgIHRoaXMuYXNzZXNzbWVudE1ha2VyU2VydmljZS5kdXBsaWNhdGVTZWN0aW9uKHRoaXMuYXNzZXNzbWVudFF1ZXN0aW9uUGFwZXJEYXRhLmlkLCBzZWN0aW9uSWQpLnN1YnNjcmliZSh7XHJcbiAgICAgIG5leHQ6IChyZXM6IGFueSkgPT4ge1xyXG4gICAgICAgIHRoaXMucXVlc3Rpb25CYW5rID0ge1xyXG4gICAgICAgICAgLi4udGhpcy5xdWVzdGlvbkJhbmssXHJcbiAgICAgICAgICAuLi4ocmVzPy5xdWVzdGlvbk1hcCB8fCB7fSlcclxuICAgICAgICB9O1xyXG4gICAgICAgIHRoaXMudXBkYXRlQXNzZXNzbWVudFF1ZXN0aW9uUGFwZXJEYXRhKHJlcz8ucXVlc3Rpb25QYXBlcik7XHJcbiAgICAgICAgdGhpcy5nZW5lcmF0ZVF1ZXN0aW9uQmFuaygpO1xyXG4gICAgICAgIHRoaXMucGF0Y2hBc3Nlc3NtZW50QW5kUXVlc3Rpb25QYXBlcigpO1xyXG4gICAgICAgIHRoaXMuc25hY2tiYXJNZXNzYWdlLmVtaXQoeyBtZXNzYWdlOiB0aGlzLmxhYmVsQ29uZmlnWydDT01NT05TX0FTU0VTU01FTlQuVE9BU1QuU0VDVElPTl9EVVBMSUNBVEVEX1NVQ0NFU1MnXSwgdHlwZTogJ3N1Y2Nlc3MnIH0pO1xyXG4gICAgICB9LFxyXG4gICAgICBlcnJvcjogKGVycm9yOiBhbnkpID0+IHtcclxuICAgICAgICB0aGlzLnNob3dMb2FkZXIgPSBmYWxzZTtcclxuICAgICAgICBjb25zb2xlLmVycm9yKGVycm9yKTtcclxuICAgICAgICB0aGlzLnNuYWNrYmFyTWVzc2FnZS5lbWl0KHsgbWVzc2FnZTogdGhpcy5sYWJlbENvbmZpZ1snQ09NTU9OU19BU1NFU1NNRU5ULlRPQVNULkVSUk9SX0RFRkFVTFQnXSwgdHlwZTogJ2Vycm9yJyB9KTtcclxuICAgICAgICB0aHJvdyB7IGVycm9yLCBtZXRob2Q6ICdQQVRDSCcgfVxyXG4gICAgICB9XHJcbiAgICB9KTtcclxuICB9XHJcblxyXG4gIGR1cGxpY2F0ZVF1ZXN0aW9uKHNlY3Rpb246IFF1ZXN0aW9uUGFwZXJTZWN0aW9uLCBzZWN0aW9uUXVlc3Rpb246IFNlY3Rpb25RdWVzdGlvbikge1xyXG4gICAgaWYgKCFzZWN0aW9uUXVlc3Rpb24uaWQpIHJldHVybjtcclxuICAgIHRoaXMuYXNzZXNzbWVudE1ha2VyU2VydmljZS5kdXBsaWNhdGVRdWVzdGlvbihzZWN0aW9uLmlkLCBzZWN0aW9uUXVlc3Rpb24uaWQpLnN1YnNjcmliZSh7XHJcbiAgICAgIG5leHQ6IChyZXM6IGFueSkgPT4ge1xyXG4gICAgICAgIHRoaXMucXVlc3Rpb25CYW5rID0ge1xyXG4gICAgICAgICAgLi4udGhpcy5xdWVzdGlvbkJhbmssXHJcbiAgICAgICAgICAuLi4ocmVzPy5xdWVzdGlvbk1hcCB8fCB7fSlcclxuICAgICAgICB9O1xyXG4gICAgICAgIHRoaXMudXBkYXRlQXNzZXNzbWVudFF1ZXN0aW9uUGFwZXJEYXRhKHJlcz8ucXVlc3Rpb25QYXBlcik7XHJcbiAgICAgICAgdGhpcy5nZW5lcmF0ZVF1ZXN0aW9uQmFuaygpO1xyXG4gICAgICAgIHRoaXMucGF0Y2hBc3Nlc3NtZW50QW5kUXVlc3Rpb25QYXBlcigpO1xyXG4gICAgICAgIHRoaXMuc25hY2tiYXJNZXNzYWdlLmVtaXQoeyBtZXNzYWdlOiB0aGlzLmxhYmVsQ29uZmlnWydDT01NT05TX0FTU0VTU01FTlQuVE9BU1QuUVVFU1RJT05fRFVQTElDQVRFRF9TVUNDRVNTJ10sIHR5cGU6ICdzdWNjZXNzJyB9KTtcclxuICAgICAgfSxcclxuICAgICAgZXJyb3I6IChlcnJvcjogYW55KSA9PiB7XHJcbiAgICAgICAgdGhpcy5zaG93TG9hZGVyID0gZmFsc2U7XHJcbiAgICAgICAgY29uc29sZS5lcnJvcihlcnJvcik7XHJcbiAgICAgICAgdGhpcy5zbmFja2Jhck1lc3NhZ2UuZW1pdCh7IG1lc3NhZ2U6IHRoaXMubGFiZWxDb25maWdbJ0NPTU1PTlNfQVNTRVNTTUVOVC5UT0FTVC5FUlJPUl9ERUZBVUxUJ10sIHR5cGU6ICdlcnJvcicgfSk7XHJcbiAgICAgICAgdGhyb3cgeyBlcnJvciwgbWV0aG9kOiAnUEFUQ0gnIH1cclxuICAgICAgfVxyXG4gICAgfSk7XHJcbiAgfVxyXG5cclxuICBwYXRjaEFzc2Vzc21lbnRBbmRRdWVzdGlvblBhcGVyKHN1Y2Nlc3NNZXNzYWdlPzogc3RyaW5nKSB7XHJcbiAgICBjb25zdCBwYXlsb2FkID0ge1xyXG4gICAgICBxdWVzdGlvblBhcGVyOiB0aGlzLmFzc2Vzc21lbnRCdWlsZGVyU2VydmljZS5nZW5lcmF0ZVF1ZXN0aW9uUGFwZXJEVE8odGhpcy5hc3Nlc3NtZW50UXVlc3Rpb25QYXBlckRhdGEsIHRoaXMucXVlc3Rpb25CYW5rKSxcclxuICAgICAgYXNzZXNzbWVudDogdGhpcy5hc3Nlc3NtZW50QnVpbGRlclNlcnZpY2UuZ2VuZXJhdGVBc3Nlc3NtZW50RFRPKHRoaXMuYXNzZXNzbWVudElkLCB0aGlzLmFzc2Vzc21lbnRRdWVzdGlvblBhcGVyRGF0YSlcclxuICAgIH1cclxuICAgIHRoaXMuYXNzZXNzbWVudE1ha2VyU2VydmljZS5wYXRjaEFzc2Vzc21lbnRBbmRRdWVzdGlvblBhcGVyKHBheWxvYWQpLnN1YnNjcmliZSh7XHJcbiAgICAgIG5leHQ6IChyZXM6IGFueSkgPT4ge1xyXG4gICAgICAgIHRoaXMudXBkYXRlQXNzZXNzbWVudFF1ZXN0aW9uUGFwZXJEYXRhKHJlcz8ucXVlc3Rpb25QYXBlcik7XHJcbiAgICAgICAgdGhpcy5nZW5lcmF0ZVF1ZXN0aW9uQmFuaygpO1xyXG4gICAgICAgIGlmIChzdWNjZXNzTWVzc2FnZSkge1xyXG4gICAgICAgICAgdGhpcy5zbmFja2Jhck1lc3NhZ2UuZW1pdCh7IG1lc3NhZ2U6IHN1Y2Nlc3NNZXNzYWdlLCB0eXBlOiAnc3VjY2VzcycgfSk7XHJcbiAgICAgICAgfVxyXG4gICAgICB9LFxyXG4gICAgICBlcnJvcjogZXJyb3IgPT4ge1xyXG4gICAgICAgIHRoaXMuc25hY2tiYXJNZXNzYWdlLmVtaXQoeyBtZXNzYWdlOiB0aGlzLmxhYmVsQ29uZmlnWydDT01NT05TX0FTU0VTU01FTlQuVE9BU1QuRVJST1JfREVGQVVMVCddLCB0eXBlOiAnZXJyb3InIH0pO1xyXG4gICAgICAgIHRocm93IHsgZXJyb3IsIG1ldGhvZDogJ1BBVENIJywgcGF5bG9hZCB9XHJcbiAgICAgIH1cclxuICAgIH0pXHJcbiAgfVxyXG5cclxuICBmaW5hbFN1Ym1pdCgpIHtcclxuICAgIGlmICh0aGlzLmlzU3VibWl0dGluZykgcmV0dXJuO1xyXG4gICAgdGhpcy5pc1N1Ym1pdHRpbmcgPSB0cnVlO1xyXG4gICAgY29uc3QgcGF5bG9hZCA9IHtcclxuICAgICAgcXVlc3Rpb25QYXBlcjogdGhpcy5hc3Nlc3NtZW50QnVpbGRlclNlcnZpY2UuZ2VuZXJhdGVRdWVzdGlvblBhcGVyRFRPKHRoaXMuYXNzZXNzbWVudFF1ZXN0aW9uUGFwZXJEYXRhLCB0aGlzLnF1ZXN0aW9uQmFuayksXHJcbiAgICAgIGFzc2Vzc21lbnQ6IHRoaXMuYXNzZXNzbWVudEJ1aWxkZXJTZXJ2aWNlLmdlbmVyYXRlQXNzZXNzbWVudERUTyh0aGlzLmFzc2Vzc21lbnRJZCwgdGhpcy5hc3Nlc3NtZW50UXVlc3Rpb25QYXBlckRhdGEpXHJcbiAgICB9XHJcbiAgICBpZiAoKHBheWxvYWQ/LnF1ZXN0aW9uUGFwZXI/LnF1ZXN0aW9uUGFwZXJTZWN0aW9uTGlzdD8ubGVuZ3RoID8/IDApIDwgdGhpcy5taW5pbXVtUmVxdWlyZWRTZWN0aW9ucykge1xyXG4gICAgICB0aGlzLnNuYWNrYmFyTWVzc2FnZS5lbWl0KHsgbWVzc2FnZTogdGhpcy5sYWJlbENvbmZpZ1snQ09NTU9OU19BU1NFU1NNRU5ULlRPQVNULk1JTklNVU1fUkVRVUlSRURfU0VDVElPTlNfRVJST1InXT8ucmVwbGFjZSgnJENvdW50JywgU3RyaW5nKHRoaXMubWluaW11bVJlcXVpcmVkU2VjdGlvbnMpKSwgdHlwZTogJ2luZm8nIH0pO1xyXG4gICAgICB0aGlzLmlzU3VibWl0dGluZyA9IGZhbHNlO1xyXG4gICAgICByZXR1cm47XHJcbiAgICB9XHJcbiAgICBpZiAoIXRoaXMuYXNzZXNzbWVudElkKSB7XHJcbiAgICAgIC8vIHJldHVybnMgbnVsbCBvciAwIGFzIGFzc2Vzc21lbnQgaXMgbm90IGNyZWF0ZWQgeWV0LiBIYW5kbGUgdGhlIHJlc3BvbnNlIGluIGNvbnN1bWVyIGFwcFxyXG4gICAgICB0aGlzLmlzU3VibWl0dGluZyA9IGZhbHNlO1xyXG4gICAgICB0aGlzLmFzc2Vzc21lbnRJbnN0YW5jZUlkQ2hhbmdlLmVtaXQodGhpcy5hc3Nlc3NtZW50SW5zdGFuY2VJZCk7XHJcbiAgICAgIHJldHVybjtcclxuICAgIH1cclxuICAgIHRoaXMuYXNzZXNzbWVudE1ha2VyU2VydmljZS5wYXRjaEFzc2Vzc21lbnRBbmRRdWVzdGlvblBhcGVyKHBheWxvYWQpLnN1YnNjcmliZSh7XHJcbiAgICAgIG5leHQ6IChyZXM6IGFueSkgPT4ge1xyXG4gICAgICAgIHRoaXMudXBkYXRlQXNzZXNzbWVudFF1ZXN0aW9uUGFwZXJEYXRhKHJlcz8ucXVlc3Rpb25QYXBlcik7XHJcbiAgICAgICAgaWYgKCF0aGlzLmFzc2Vzc21lbnRJbnN0YW5jZUlkKSB7XHJcbiAgICAgICAgICB0aGlzLmNyZWF0ZUFzc2Vzc21lbnRJbnN0YW5jZSgpO1xyXG4gICAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgICB0aGlzLmlzU3VibWl0dGluZyA9IGZhbHNlO1xyXG4gICAgICAgICAgdGhpcy5hc3Nlc3NtZW50SW5zdGFuY2VJZENoYW5nZS5lbWl0KHRoaXMuYXNzZXNzbWVudEluc3RhbmNlSWQpO1xyXG4gICAgICAgIH1cclxuICAgICAgfSxcclxuICAgICAgZXJyb3I6IGVycm9yID0+IHtcclxuICAgICAgICB0aGlzLmlzU3VibWl0dGluZyA9IGZhbHNlO1xyXG4gICAgICAgIHRoaXMuc25hY2tiYXJNZXNzYWdlLmVtaXQoeyBtZXNzYWdlOiB0aGlzLmxhYmVsQ29uZmlnWydDT01NT05TX0FTU0VTU01FTlQuVE9BU1QuRVJST1JfREVGQVVMVCddLCB0eXBlOiAnZXJyb3InIH0pO1xyXG4gICAgICAgIHRocm93IHsgZXJyb3IsIG1ldGhvZDogJ1BBVENIJywgcGF5bG9hZCB9XHJcbiAgICAgIH1cclxuICAgIH0pXHJcbiAgfVxyXG5cclxuICBjcmVhdGVBc3Nlc3NtZW50SW5zdGFuY2UoKSB7XHJcbiAgICBjb25zdCBwYXlsb2FkID0gdGhpcy5hc3Nlc3NtZW50QnVpbGRlclNlcnZpY2UuZ2VuZXJhdGVBc3Nlc3NtZW50SW5zdGFuY2VEVE8odGhpcy5hc3Nlc3NtZW50SWQsIHRoaXMucHJlZGVmaW5lZEFzc2Vzc21lbnRJbnN0YW5jZSk7XHJcbiAgICB0aGlzLmFzc2Vzc21lbnRNYWtlclNlcnZpY2UuY3JlYXRlQXNzZXNzbWVudEluc3RhbmNlKHBheWxvYWQpLnN1YnNjcmliZSh7XHJcbiAgICAgIG5leHQ6IChyZXM6IGFueSkgPT4ge1xyXG4gICAgICAgIHRoaXMuYXNzZXNzbWVudEluc3RhbmNlSWQgPSByZXM7XHJcbiAgICAgICAgdGhpcy5pc1N1Ym1pdHRpbmcgPSBmYWxzZTtcclxuICAgICAgICB0aGlzLmFzc2Vzc21lbnRJbnN0YW5jZUlkQ2hhbmdlLmVtaXQocmVzKTtcclxuICAgICAgICAvLyB0aGlzLnNuYWNrYmFyTWVzc2FnZS5lbWl0KHsgbWVzc2FnZTogdGhpcy5sYWJlbENvbmZpZ1snQ09NTU9OU19BU1NFU1NNRU5ULlRPQVNULkFTU0VTU01FTlRfUFVCTElTSEVEX1NVQ0NFU1MnXSwgdHlwZTogJ3N1Y2Nlc3MnIH0pO1xyXG4gICAgICB9LFxyXG4gICAgICBlcnJvcjogZXJyb3IgPT4ge1xyXG4gICAgICAgIHRoaXMuaXNTdWJtaXR0aW5nID0gZmFsc2U7XHJcbiAgICAgICAgdGhpcy5zbmFja2Jhck1lc3NhZ2UuZW1pdCh7IG1lc3NhZ2U6IHRoaXMubGFiZWxDb25maWdbJ0NPTU1PTlNfQVNTRVNTTUVOVC5UT0FTVC5FUlJPUl9ERUZBVUxUJ10sIHR5cGU6ICdlcnJvcicgfSk7XHJcbiAgICAgICAgdGhyb3cgeyBlcnJvciwgbWV0aG9kOiAnUE9TVCcsIHBheWxvYWQgfVxyXG4gICAgICB9XHJcbiAgICB9KVxyXG4gIH1cclxuXHJcbiAgZGlzY2FyZENoYW5nZXMoKSB7XHJcbiAgICBpZiAodGhpcy5hc3Nlc3NtZW50SWQpIHtcclxuICAgICAgdGhpcy5zaG93TG9hZGVyID0gdHJ1ZTtcclxuICAgICAgdGhpcy5sb2FkQXNzZXNzbWVudERhdGEoKTtcclxuICAgIH0gZWxzZSB7XHJcbiAgICAgIC8vIFJlc2V0IGZ1bGx5IHRvIGVtcHR5IGlmIG5vIGFzc2Vzc21lbnQgZXhpc3RlZCB5ZXRcclxuICAgICAgdGhpcy5hc3Nlc3NtZW50UXVlc3Rpb25QYXBlckRhdGEgPSB7IGlkOiAwLCBxdWVzdGlvblBhcGVyU2VjdGlvbkxpc3Q6IFtdIH07XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICBnZXRRdWVzdGlvbkZyb21CYW5rKHF1ZXN0aW9uSWQ/OiBudW1iZXIpIHtcclxuICAgIHJldHVybiB0aGlzLnF1ZXN0aW9uQmFuaz8uW3F1ZXN0aW9uSWQgfHwgLTFdO1xyXG4gIH1cclxuXHJcbiAgdXBkYXRlQXNzZXNzbWVudFF1ZXN0aW9uUGFwZXJEYXRhKG5ld0RhdGE6IGFueSkge1xyXG4gICAgY29uc3QgZXhwYW5kZWRMaXN0ID0gdGhpcy5hc3Nlc3NtZW50UXVlc3Rpb25QYXBlckRhdGE/LnF1ZXN0aW9uUGFwZXJTZWN0aW9uTGlzdFxyXG4gICAgICA/LmZpbHRlcigoczogYW55KSA9PiBzLmlzRXhwYW5kZWQpXHJcbiAgICAgID8ubWFwKChzOiBhbnksIGlkeDogbnVtYmVyKSA9PiBzLmlkID8gcy5pZC50b1N0cmluZygpIDogYCR7aWR4fV8ke3MucXBzTmFtZT8uWzBdPy50ZXh0fWApO1xyXG5cclxuICAgIHRoaXMuYXNzZXNzbWVudFF1ZXN0aW9uUGFwZXJEYXRhID0gbmV3RGF0YSB8fCB7IGlkOiAwLCBxdWVzdGlvblBhcGVyU2VjdGlvbkxpc3Q6IFtdIH07XHJcbiAgICB0aGlzLmZpbHRlckluYWN0aXZlU2VjdGlvbnNBbmRRdWVzdGlvbnMoKTtcclxuXHJcbiAgICBpZiAoZXhwYW5kZWRMaXN0Py5sZW5ndGgpIHtcclxuICAgICAgdGhpcy5hc3Nlc3NtZW50UXVlc3Rpb25QYXBlckRhdGE/LnF1ZXN0aW9uUGFwZXJTZWN0aW9uTGlzdD8uZm9yRWFjaCgoczogYW55LCBpZHg6IG51bWJlcikgPT4ge1xyXG4gICAgICAgIGNvbnN0IGtleSA9IHMuaWQgPyBzLmlkLnRvU3RyaW5nKCkgOiBgJHtpZHh9XyR7cy5xcHNOYW1lPy5bMF0/LnRleHR9YDtcclxuICAgICAgICBpZiAoZXhwYW5kZWRMaXN0LmluY2x1ZGVzKGtleSkpIHtcclxuICAgICAgICAgIHMuaXNFeHBhbmRlZCA9IHRydWU7XHJcbiAgICAgICAgfVxyXG4gICAgICB9KTtcclxuICAgIH1cclxuICB9XHJcblxyXG4gIGZpbHRlckluYWN0aXZlU2VjdGlvbnNBbmRRdWVzdGlvbnMoKSB7XHJcbiAgICB0aGlzLmFzc2Vzc21lbnRRdWVzdGlvblBhcGVyRGF0YS5xdWVzdGlvblBhcGVyU2VjdGlvbkxpc3QgPSBzb3J0QnlPcmRlcihcclxuICAgICAgdGhpcy5hc3Nlc3NtZW50UXVlc3Rpb25QYXBlckRhdGE/LnF1ZXN0aW9uUGFwZXJTZWN0aW9uTGlzdD8uZmlsdGVyKChzZWN0aW9uOiBhbnkpID0+IHNlY3Rpb24uaXNBY3RpdmUgIT09IGZhbHNlKVxyXG4gICAgKTtcclxuXHJcbiAgICB0aGlzLmFzc2Vzc21lbnRRdWVzdGlvblBhcGVyRGF0YT8ucXVlc3Rpb25QYXBlclNlY3Rpb25MaXN0Py5mb3JFYWNoKChzZWN0aW9uOiBhbnkpID0+IHtcclxuICAgICAgc2VjdGlvbi5zZWN0aW9uUXVlc3Rpb25zTGlzdCA9IHNvcnRCeU9yZGVyKFxyXG4gICAgICAgIHNlY3Rpb24uc2VjdGlvblF1ZXN0aW9uc0xpc3Q/LmZpbHRlcigocXVlc3Rpb246IGFueSkgPT4gcXVlc3Rpb24uaXNBY3RpdmUgIT09IGZhbHNlKVxyXG4gICAgICApO1xyXG4gICAgfSk7XHJcblxyXG4gICAgaWYgKHRoaXMucXVlc3Rpb25CYW5rKSB7XHJcbiAgICAgIE9iamVjdC5rZXlzKHRoaXMucXVlc3Rpb25CYW5rKS5mb3JFYWNoKGtleSA9PiB7XHJcbiAgICAgICAgY29uc3QgcXVlc3Rpb24gPSB0aGlzLnF1ZXN0aW9uQmFua1trZXkgYXMgYW55XTtcclxuICAgICAgICBpZiAocXVlc3Rpb24/LmRlZmF1bHRPcHRpb25zTGlzdCkge1xyXG4gICAgICAgICAgcXVlc3Rpb24uZGVmYXVsdE9wdGlvbnNMaXN0ID0gc29ydEJ5T3JkZXIoXHJcbiAgICAgICAgICAgIHF1ZXN0aW9uLmRlZmF1bHRPcHRpb25zTGlzdC5maWx0ZXIoKG9wdDogYW55KSA9PiBvcHQuaXNBY3RpdmUgIT09IGZhbHNlKVxyXG4gICAgICAgICAgKTtcclxuICAgICAgICB9XHJcbiAgICAgIH0pO1xyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgY2FwaXRhbGl6ZUZpcnN0KHRleHQ6IHN0cmluZyB8IHVuZGVmaW5lZCk6IHN0cmluZyB7XHJcbiAgICBpZiAoIXRleHQpIHJldHVybiAnJztcclxuICAgIHJldHVybiB0ZXh0LnRvTG93ZXJDYXNlKCkuc3BsaXQoJyAnKS5tYXAod29yZCA9PiB3b3JkLmNoYXJBdCgwKS50b1VwcGVyQ2FzZSgpICsgd29yZC5zbGljZSgxKSkuam9pbignICcpO1xyXG4gIH1cclxuXHJcbiAgZ2V0U2tpbGxzTGlzdCgpIHtcclxuICAgIGNvbnN0IHBhcmFtcyA9IHtcclxuICAgICAgZmV0Y2hDb250ZXh0RGF0YU9ubHk6IGZhbHNlLFxyXG4gICAgICBwYWdlOiAwLFxyXG4gICAgICBzaXplOiAyMCxcclxuICAgICAgZGlyZWN0aW9uOiAnQVNDJ1xyXG4gICAgfVxyXG4gICAgdGhpcy5hc3Nlc3NtZW50TWFrZXJTZXJ2aWNlLmdldFJlZkRhdGFCeUNvZGUoJ1JFRi5BU1NFU1NNRU5UX1FVRVNUSU9OX1NLSUxMJywgcGFyYW1zKS5zdWJzY3JpYmUoe1xyXG4gICAgICBuZXh0OiAocmVzOiBhbnkpID0+IHtcclxuICAgICAgICB0aGlzLnNraWxsc0xpc3QgPSByZXM/LmVsZW1lbnRzO1xyXG4gICAgICB9LFxyXG4gICAgICBlcnJvcjogKGVycm9yOiBhbnkpID0+IHtcclxuICAgICAgICBjb25zb2xlLmVycm9yKGVycm9yKTtcclxuICAgICAgICB0aHJvdyB7IGVycm9yLCBtZXRob2Q6ICdHRVQnLCBwYXlsb2FkOiB0aGlzLmFzc2Vzc21lbnRJZCB9XHJcbiAgICAgIH1cclxuICAgIH0pXHJcbiAgfVxyXG59XHJcbiIsIjxkaXYgKm5nSWY9XCJjb25maWdzTG9hZGVkICYmICFzaG93TG9hZGVyOyBlbHNlIGxvYWRlclwiIGNsYXNzPVwiY29sLTEyIGgtMTAwXCI+XHJcbiAgICA8ZGl2IGNsYXNzPVwiY29sLTEyIGgtMTAwIHB5LTRcIiBbY2xhc3MuaGVpZ2h0LXdpdGhvdXQtZm9vdGVyXT1cInNob3dGb290ZXJcIj5cclxuICAgICAgICA8bmctY29udGFpbmVyICpuZ0lmPVwiYXNzZXNzbWVudFF1ZXN0aW9uUGFwZXJEYXRhPy5xdWVzdGlvblBhcGVyU2VjdGlvbkxpc3Q/Lmxlbmd0aFwiPlxyXG4gICAgICAgICAgICA8bWF0LWFjY29yZGlvbiBtdWx0aT1cInRydWVcIiBjZGtEcm9wTGlzdCAoY2RrRHJvcExpc3REcm9wcGVkKT1cImRyb3BTZWN0aW9uKCRldmVudClcIj5cclxuICAgICAgICAgICAgICAgIDxtYXQtZXhwYW5zaW9uLXBhbmVsIFtoaWRlVG9nZ2xlXT1cInRydWVcIiAjcGFuZWw9XCJtYXRFeHBhbnNpb25QYW5lbFwiIFtleHBhbmRlZF09XCJzZWN0aW9uLmlzRXhwYW5kZWRcIlxyXG4gICAgICAgICAgICAgICAgICAgIChvcGVuZWQpPVwic2VjdGlvbi5pc0V4cGFuZGVkID0gdHJ1ZVwiIChjbG9zZWQpPVwic2VjdGlvbi5pc0V4cGFuZGVkID0gZmFsc2VcIlxyXG4gICAgICAgICAgICAgICAgICAgIGNsYXNzPVwibWItNCBib3JkZXItMCBvdmVyZmxvdy1oaWRkZW4gYXNzZXNzbWVudC1wYW5lbCBzaGFkb3ctbm9uZSBiZy10cmFuc3BhcmVudFwiIGNka0RyYWdcclxuICAgICAgICAgICAgICAgICAgICAqbmdGb3I9XCJsZXQgc2VjdGlvbiBvZiBhc3Nlc3NtZW50UXVlc3Rpb25QYXBlckRhdGE/LnF1ZXN0aW9uUGFwZXJTZWN0aW9uTGlzdDsgbGV0IHNlY3Rpb25JbmRleCA9IGluZGV4XCI+XHJcbiAgICAgICAgICAgICAgICAgICAgPCEtLSBTZWN0aW9uIEhlYWRlciAtLT5cclxuICAgICAgICAgICAgICAgICAgICA8bWF0LWV4cGFuc2lvbi1wYW5lbC1oZWFkZXIgY2xhc3M9XCJjb2wtMTIgcC0wIGgtYXV0byBiZy10cmFuc3BhcmVudFwiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiZC1mbGV4IGNvbC0xMiBhbGlnbi1pdGVtcy1jZW50ZXIgZ2FwLW1kLTMgZ2FwLTJcIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxpbWcgY2RrRHJhZ0hhbmRsZSBbc3JjXT1cImltYWdlQ29uZmlnWydDT01NT05TX0FTU0VTU01FTlQuSUNPTi5EUkFHX0RST1AnXVwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY2xhc3M9XCJjdXJzb3ItZ3JhYlwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKGVycm9yKT1cImltYWdlRXJyb3JIYW5kbGVyKCRldmVudCwgJ2Fzc2V0cy9jb21tb25zLWFzc2Vzc21lbnQvaW1hZ2VzL2RyYWctZHJvcC5zdmcnKVwiIC8+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiZC1mbGV4IGFsaWduLWl0ZW1zLWNlbnRlciBnYXAtMiBmbGV4LWdyb3ctMSBqdXN0aWZ5LWNvbnRlbnQtYmV0d2VlbiBwLTMgYXNzZXNzbWVudC1ib3JkZXItcmFkaXVzLXR3byBhc3Nlc3NtZW50LWJvcmRlci10d28gYXNzZXNzbWVudC1iZy13aGl0ZVwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgW2NsYXNzLm5vLWJvcmRlcl09XCJzZWN0aW9uLmlzRXhwYW5kZWRcIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZGl2PlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiZC1mbGV4IGFsaWduLWl0ZW1zLWNlbnRlciBtYi0xXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8aW5wdXQgdHlwZT1cInRleHRcIiBbaWRdPVwiJ3NlY3Rpb25OYW1lSW5wdXRfJyArIHNlY3Rpb25JbmRleFwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY2xhc3M9XCJjb2wtbWQtMTEgY29sLTEwIGFzc2Vzc21lbnQtdGV4dC1zZW1pYm9sZC0xOCBib3JkZXItMCBvdXRsaW5lLTAgYmctdHJhbnNwYXJlbnQgcC0wIGlucHV0LWZvY3VzXCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBbKG5nTW9kZWwpXT1cInNlY3Rpb24ucXBzTmFtZVswXS50ZXh0XCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBbYXR0ci5zaXplXT1cIihzZWN0aW9uLnFwc05hbWVbMF0udGV4dD8ubGVuZ3RoIHx8IDEpXCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoY2xpY2spPVwiJGV2ZW50LnN0b3BQcm9wYWdhdGlvbigpXCIgKGtleWRvd24pPVwiJGV2ZW50LnN0b3BQcm9wYWdhdGlvbigpXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8aW1nIFtzcmNdPVwiaW1hZ2VDb25maWdbJ0NPTU1PTlNfQVNTRVNTTUVOVC5JQ09OLkVESVQnXVwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY2xhc3M9XCJhY3Rpb24taWNvbiBjdXJzb3ItcG9pbnRlclwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKGNsaWNrKT1cImZvY3VzU2VjdGlvbklucHV0KHNlY3Rpb25JbmRleCwgJGV2ZW50KVwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKGVycm9yKT1cImltYWdlRXJyb3JIYW5kbGVyKCRldmVudCwgJ2Fzc2V0cy9jb21tb25zLWFzc2Vzc21lbnQvaW1hZ2VzL3BlbmNpbC5zdmcnKVwiIC8+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8cCBjbGFzcz1cIm1iLTAgYXNzZXNzbWVudC10ZXh0LW1lZGl1bS0xMiBhc3Nlc3NtZW50LXRleHQtZ3JleS1zZXZlblwiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAge3tzZWN0aW9uPy5zZWN0aW9uUXVlc3Rpb25zTGlzdD8ubGVuZ3RoIHx8IDB9fVxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAge3tsYWJlbENvbmZpZ1snQ09NTU9OU19BU1NFU1NNRU5ULkxBQkVMLlFVRVNUSU9OUyddfX1cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9wPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJkLWZsZXggYWxpZ24taXRlbXMtY2VudGVyIGdhcC1tZC00IGdhcC0yXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxpbWcgW3NyY109XCJpbWFnZUNvbmZpZ1snQ09NTU9OU19BU1NFU1NNRU5ULklDT04uQVJST1dfRE9XTl9CTEFDSyddXCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFtuZ0NsYXNzXT1cInBhbmVsLmV4cGFuZGVkID8gJ2NoYW5nZS1kaXJlY3Rpb24nIDogJ2NoYW5nZS1kaXJlY3Rpb24tcmV2ZXJzZSdcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKGVycm9yKT1cImltYWdlRXJyb3JIYW5kbGVyKCRldmVudCwgJ2Fzc2V0cy9jb21tb25zLWFzc2Vzc21lbnQvaW1hZ2VzL2Fycm93LWRvd24tYmxhY2suc3ZnJylcIiAvPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8YnV0dG9uIFttYXRNZW51VHJpZ2dlckZvcl09XCJtZW51XCIgKGNsaWNrKT1cIiRldmVudC5zdG9wUHJvcGFnYXRpb24oKVwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjbGFzcz1cImJvcmRlci0wIGJnLXRyYW5zcGFyZW50IHB5LTJcIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxpbWcgW3NyY109XCJpbWFnZUNvbmZpZ1snQ09NTU9OU19BU1NFU1NNRU5ULklDT04uQUNUSU9OX0RPVFMnXVwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKGVycm9yKT1cImltYWdlRXJyb3JIYW5kbGVyKCRldmVudCwgJ2Fzc2V0cy9jb21tb25zLWFzc2Vzc21lbnQvaW1hZ2VzL2FjdGlvbi1kb3RzLnN2ZycpXCIgLz5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9idXR0b24+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxtYXQtbWVudSAjbWVudT1cIm1hdE1lbnVcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY2xhc3M9XCJtYXQtbWVudSBhc3Nlc3NtZW50LWJvcmRlci1yYWRpdXMtdHdvIGFzc2Vzc21lbnQtYm9yZGVyLWdyZXktZm91ci0xXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8YnV0dG9uIChjbGljayk9XCJhZGRJbnN0cnVjdGlvbihzZWN0aW9uKVwiIG1hdC1tZW51LWl0ZW1cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjbGFzcz1cInB5LTIgYXNzZXNzbWVudC10ZXh0LXNlbWlib2xkLTEyXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAge3tsYWJlbENvbmZpZ1snQ09NTU9OU19BU1NFU1NNRU5ULkxBQkVMLkFERF9JTlNUUlVDVElPTlMnXX19XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2J1dHRvbj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxidXR0b24gKGNsaWNrKT1cImR1cGxpY2F0ZVNlY3Rpb24oc2VjdGlvbi5pZClcIiBtYXQtbWVudS1pdGVtXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY2xhc3M9XCJweS0yIGFzc2Vzc21lbnQtdGV4dC1zZW1pYm9sZC0xMlwiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHt7bGFiZWxDb25maWdbJ0NPTU1PTlNfQVNTRVNTTUVOVC5MQUJFTC5EVVBMSUNBVEUnXX19XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2J1dHRvbj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxidXR0b24gKm5nSWY9XCIoYXNzZXNzbWVudFF1ZXN0aW9uUGFwZXJEYXRhPy5xdWVzdGlvblBhcGVyU2VjdGlvbkxpc3Q/Lmxlbmd0aCA/PyAwKSA+IG1pbmltdW1SZXF1aXJlZFNlY3Rpb25zXCIgXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKGNsaWNrKT1cImRlbGV0ZVNlY3Rpb24oc2VjdGlvbilcIiBtYXQtbWVudS1pdGVtXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY2xhc3M9XCJweS0yIGFzc2Vzc21lbnQtdGV4dC1zZW1pYm9sZC0xMiBhc3Nlc3NtZW50LXRleHQtZGFuZ2VyXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAge3tsYWJlbENvbmZpZ1snQ09NTU9OU19BU1NFU1NNRU5ULkxBQkVMLkRFTEVURSddfX1cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvYnV0dG9uPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L21hdC1tZW51PlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICAgICAgICAgIDwvbWF0LWV4cGFuc2lvbi1wYW5lbC1oZWFkZXI+XHJcblxyXG4gICAgICAgICAgICAgICAgICAgIDwhLS0gUXVlc3Rpb25zIGluc2lkZSBzZWN0aW9uIC0tPlxyXG4gICAgICAgICAgICAgICAgICAgIDxkaXYgY2RrRHJvcExpc3QgW2Nka0Ryb3BMaXN0RGF0YV09XCJzZWN0aW9uLnNlY3Rpb25RdWVzdGlvbnNMaXN0IHx8IFtdXCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgKGNka0Ryb3BMaXN0RHJvcHBlZCk9XCJkcm9wUXVlc3Rpb24oJGV2ZW50KVwiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNka0RyYWcgKm5nRm9yPVwibGV0IHNlY3Rpb25RdWVzdGlvbiBvZiBzZWN0aW9uLnNlY3Rpb25RdWVzdGlvbnNMaXN0OyBsZXQgaSA9IGluZGV4XCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNsYXNzPVwiZC1mbGV4IGFsaWduLWl0ZW1zLXN0YXJ0IGdhcC1tZC0zIGdhcC0yIG15LTMgb3ZlcmZsb3ctaGlkZGVuXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8aW1nIGNka0RyYWdIYW5kbGUgW3NyY109XCJpbWFnZUNvbmZpZ1snQ09NTU9OU19BU1NFU1NNRU5ULklDT04uRFJBR19EUk9QJ11cIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNsYXNzPVwiY3Vyc29yLWdyYWIgbXQtNFwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKGVycm9yKT1cImltYWdlRXJyb3JIYW5kbGVyKCRldmVudCwgJ2Fzc2V0cy9jb21tb25zLWFzc2Vzc21lbnQvaW1hZ2VzL2RyYWctZHJvcC5zdmcnKVwiIC8+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiZmxleC1ncm93LTEgcC0zIGFzc2Vzc21lbnQtYm9yZGVyLXR3byBhc3Nlc3NtZW50LWJvcmRlci1yYWRpdXMtdHdvIHF1ZXN0aW9uLWNvbnRhaW5lciBhc3Nlc3NtZW50LWJnLXdoaXRlXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGxpYi1xdWVzdGlvbi1kZXRhaWxzIFtzZWN0aW9uUXVlc3Rpb25dPVwic2VjdGlvblF1ZXN0aW9uXCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgW3F1ZXN0aW9uXT1cImdldFF1ZXN0aW9uRnJvbUJhbmsoc2VjdGlvblF1ZXN0aW9uLnF1ZXN0aW9uSWQpIHx8IHt9XCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgW3F1ZXN0aW9uQmFua109XCJxdWVzdGlvbkJhbmtcIiBbaW1hZ2VDb25maWddPVwiaW1hZ2VDb25maWdcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBbbGFiZWxDb25maWddPVwibGFiZWxDb25maWdcIiBbYWxsb3dEZWxldGVdPVwiKHNlY3Rpb24/LnNlY3Rpb25RdWVzdGlvbnNMaXN0Py5sZW5ndGggPz8gMCkgPiAxXCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKGVkaXRRdWVzdGlvbik9XCJjcmVhdGVFZGl0UXVlc3Rpb24oc2VjdGlvbiwgJGV2ZW50Py5xdWVzdGlvbklkLCAkZXZlbnQ/LmlzQ2hpbGRRdWVzdGlvbilcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoZHVwbGljYXRlUXVlc3Rpb24pPVwiZHVwbGljYXRlUXVlc3Rpb24oc2VjdGlvbiwgJGV2ZW50KVwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChkZWxldGVQYXJlbnRRdWVzdGlvbik9XCJkZWxldGVQYXJlbnRRdWVzdGlvbigkZXZlbnQpXCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKGRlbGV0ZUNoaWxkUXVlc3Rpb24pPVwiZGVsZXRlQ2hpbGRRdWVzdGlvbigkZXZlbnQub3B0aW9uLCAkZXZlbnQuY2hpbGRRdWVzdGlvbklkKVwiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvbGliLXF1ZXN0aW9uLWRldGFpbHM+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgICAgICAgICAgPC9kaXY+XHJcblxyXG4gICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJjb2wtMTIgcHMtNCBib3JkZXItYm90dG9tIHBiLTRcIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgPGJ1dHRvbiAoY2xpY2spPVwiY3JlYXRlRWRpdFF1ZXN0aW9uKHNlY3Rpb24pXCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNsYXNzPVwiYXNzZXNzbWVudC16b29tLWFuaW1hdGlvbiBhc3Nlc3NtZW50LWJ1dHRvbi1wYWRkaW5nIGQtZmxleCBhbGlnbi1pdGVtcy1jZW50ZXIganVzdGlmeS1jb250ZW50LWNlbnRlciBnYXAtMyBhc3Nlc3NtZW50LXRleHQtcHJpbWFyeS1vbmUgYXNzZXNzbWVudC1iZy1wYWxldHRlLUVERjNGRCBhc3Nlc3NtZW50LXRleHQtc2VtaWJvbGQtMTIgb3V0bGluZS0wIGFzc2Vzc21lbnQtYm9yZGVyLXJhZGl1cy10d28gbXQtMyBib3JkZXItQURDOUY2XCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8aW1nIFtzcmNdPVwiaW1hZ2VDb25maWdbJ0NPTU1PTlNfQVNTRVNTTUVOVC5JQ09OLlBMVVNfUFJJTUFSWSddXCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoZXJyb3IpPVwiaW1hZ2VFcnJvckhhbmRsZXIoJGV2ZW50LCAnYXNzZXRzL2NvbW1vbnMtYXNzZXNzbWVudC9pbWFnZXMvcGx1cy1wcmltYXJ5LnN2ZycpXCIgLz5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHt7bGFiZWxDb25maWdbJ0NPTU1PTlNfQVNTRVNTTUVOVC5MQUJFTC5BRERfQV9RVUVTVElPTiddfX1cclxuICAgICAgICAgICAgICAgICAgICAgICAgPC9idXR0b24+XHJcbiAgICAgICAgICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgICAgICA8L21hdC1leHBhbnNpb24tcGFuZWw+XHJcbiAgICAgICAgICAgIDwvbWF0LWFjY29yZGlvbj5cclxuICAgICAgICAgICAgPGJ1dHRvbiAoY2xpY2spPVwiY3JlYXRlRWRpdFF1ZXN0aW9uKClcIlxyXG4gICAgICAgICAgICAgICAgY2xhc3M9XCJhc3Nlc3NtZW50LXpvb20tYW5pbWF0aW9uIGFzc2Vzc21lbnQtYnV0dG9uLXBhZGRpbmcgZC1mbGV4IGFsaWduLWl0ZW1zLWNlbnRlciBqdXN0aWZ5LWNvbnRlbnQtY2VudGVyIGdhcC0zIGFzc2Vzc21lbnQtdGV4dC1wcmltYXJ5LW9uZSBhc3Nlc3NtZW50LWJnLXBhbGV0dGUtRURGM0ZEIGFzc2Vzc21lbnQtdGV4dC1zZW1pYm9sZC0xMiBvdXRsaW5lLTAgYXNzZXNzbWVudC1ib3JkZXItcmFkaXVzLXR3byBtdC0zIGJvcmRlci1BREM5RjYgbXMtNFwiPlxyXG4gICAgICAgICAgICAgICAgPGltZyBbc3JjXT1cImltYWdlQ29uZmlnWydDT01NT05TX0FTU0VTU01FTlQuSUNPTi5BRERfU0VDVElPTiddXCJcclxuICAgICAgICAgICAgICAgICAgICAoZXJyb3IpPVwiaW1hZ2VFcnJvckhhbmRsZXIoJGV2ZW50LCAnYXNzZXRzL2NvbW1vbnMtYXNzZXNzbWVudC9pbWFnZXMvYWRkLXNlY3Rpb24uc3ZnJylcIiAvPlxyXG4gICAgICAgICAgICAgICAge3tsYWJlbENvbmZpZ1snQ09NTU9OU19BU1NFU1NNRU5ULkxBQkVMLkFERF9BX1NFQ1RJT04nXX19XHJcbiAgICAgICAgICAgIDwvYnV0dG9uPlxyXG4gICAgICAgIDwvbmctY29udGFpbmVyPlxyXG4gICAgICAgIDxkaXYgKm5nSWY9XCIhYXNzZXNzbWVudFF1ZXN0aW9uUGFwZXJEYXRhPy5xdWVzdGlvblBhcGVyU2VjdGlvbkxpc3Q/Lmxlbmd0aFwiXHJcbiAgICAgICAgICAgIGNsYXNzPVwiaC0xMDAgZC1mbGV4IGZsZXgtY29sdW1uIGFsaWduLWl0ZW1zLWNlbnRlciBqdXN0aWZ5LWNvbnRlbnQtY2VudGVyIGdhcC0zXCI+XHJcbiAgICAgICAgICAgIDxpbWcgW3NyY109XCJpbWFnZUNvbmZpZ1snQ09NTU9OU19BU1NFU1NNRU5ULklDT04uTk9fUVVFU1RJT05TJ11cIiBjbGFzcz1cImNvbC1zbS1hdXRvIGNvbC02XCJcclxuICAgICAgICAgICAgICAgIChlcnJvcik9XCJpbWFnZUVycm9ySGFuZGxlcigkZXZlbnQsICdhc3NldHMvY29tbW9ucy1hc3Nlc3NtZW50L2ltYWdlcy9uby1xdWVzdGlvbnMuc3ZnJylcIiAvPlxyXG4gICAgICAgICAgICA8ZGl2IGNsYXNzPVwidGV4dC1jZW50ZXJcIj5cclxuICAgICAgICAgICAgICAgIDxwIGNsYXNzPVwibWItMSBhc3Nlc3NtZW50LXRleHQtbWVkaXVtLTE4XCI+e3tsYWJlbENvbmZpZ1snQ09NTU9OU19BU1NFU1NNRU5ULkxBQkVMLkFERF9DVVNUT01fUVVFU1RJT05TJ119fTwvcD5cclxuICAgICAgICAgICAgICAgIDxwIGNsYXNzPVwibWItMCBhc3Nlc3NtZW50LXRleHQtbWVkaXVtLTEyIGFzc2Vzc21lbnQtdGV4dC1ncmV5LXNldmVuXCI+XHJcbiAgICAgICAgICAgICAgICAgICAge3tsYWJlbENvbmZpZ1snQ09NTU9OU19BU1NFU1NNRU5ULkxBQkVMLkFERF9RVUVTVElPTl9ERVNDJ119fTwvcD5cclxuICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgIDxidXR0b24gKGNsaWNrKT1cImNyZWF0ZUVkaXRRdWVzdGlvbigpXCJcclxuICAgICAgICAgICAgICAgIGNsYXNzPVwiYXNzZXNzbWVudC1idXR0b24tcGFkZGluZyBhc3Nlc3NtZW50LWJvcmRlci1yYWRpdXMtdHdvIGQtZmxleCBhbGlnbi1pdGVtcy1jZW50ZXIgZ2FwLTIgYXNzZXNzbWVudC1iZy1wYWxldHRlLUVERjNGRCBhc3Nlc3NtZW50LXRleHQtcHJpbWFyeS1vbmUgYXNzZXNzbWVudC10ZXh0LXNlbWlib2xkLTEyIGJvcmRlci0wIGFzc2Vzc21lbnQtem9vbS1hbmltYXRpb25cIj5cclxuICAgICAgICAgICAgICAgIDxpbWcgW3NyY109XCJpbWFnZUNvbmZpZ1snQ09NTU9OU19BU1NFU1NNRU5ULklDT04uUExVU19QUklNQVJZJ11cIlxyXG4gICAgICAgICAgICAgICAgICAgIChlcnJvcik9XCJpbWFnZUVycm9ySGFuZGxlcigkZXZlbnQsICdhc3NldHMvY29tbW9ucy1hc3Nlc3NtZW50L2ltYWdlcy9wbHVzLXByaW1hcnkuc3ZnJylcIiAvPlxyXG4gICAgICAgICAgICAgICAge3tsYWJlbENvbmZpZ1snQ09NTU9OU19BU1NFU1NNRU5ULkxBQkVMLkFERF9BX1FVRVNUSU9OJ119fVxyXG4gICAgICAgICAgICA8L2J1dHRvbj5cclxuICAgICAgICA8L2Rpdj5cclxuICAgIDwvZGl2PlxyXG4gICAgPGRpdiAqbmdJZj1cInNob3dGb290ZXJcIlxyXG4gICAgICAgIGNsYXNzPVwiYmctd2hpdGUgcC0zIHBvc2l0aW9uLXN0aWNreSBib3R0b20tMCBkLWZsZXggYWxpZ24taXRlbXMtY2VudGVyIGp1c3RpZnktY29udGVudC1lbmQgYm9yZGVyLXRvcCBnYXAtM1wiPlxyXG4gICAgICAgIDxidXR0b24gKGNsaWNrKT1cImRpc2NhcmRDaGFuZ2VzKClcIiBbZGlzYWJsZWRdPVwiaXNTdWJtaXR0aW5nXCJcclxuICAgICAgICAgICAgY2xhc3M9XCJhc3Nlc3NtZW50LXpvb20tYW5pbWF0aW9uIGFzc2Vzc21lbnQtYm9yZGVyLXJhZGl1cy10d28gYXNzZXNzbWVudC1idXR0b24tcGFkZGluZy1sYXJnZSBhc3Nlc3NtZW50LWJ0bi1wcmltYXJ5LXRyYW5zcGFyZW50IGFzc2Vzc21lbnQtdGV4dC1zZW1pYm9sZC0xM1wiPnt7bGFiZWxDb25maWdbJ0NPTU1PTlNfQVNTRVNTTUVOVC5MQUJFTC5ESVNDQVJEJ119fTwvYnV0dG9uPlxyXG4gICAgICAgIDxidXR0b24gKGNsaWNrKT1cImZpbmFsU3VibWl0KClcIiBbZGlzYWJsZWRdPVwiaXNTdWJtaXR0aW5nXCJcclxuICAgICAgICAgICAgY2xhc3M9XCJhc3Nlc3NtZW50LXpvb20tYW5pbWF0aW9uIGFzc2Vzc21lbnQtYm9yZGVyLXJhZGl1cy10d28gYXNzZXNzbWVudC1idXR0b24tcGFkZGluZy1sYXJnZSBhc3Nlc3NtZW50LWJ0bi1wcmltYXJ5IGFzc2Vzc21lbnQtdGV4dC1zZW1pYm9sZC0xMyBwb3NpdGlvbi1yZWxhdGl2ZVwiPlxyXG4gICAgICAgICAgICA8c3BhbiBbbmdDbGFzc109XCJ7J29wYWNpdHktMCc6IGlzU3VibWl0dGluZ31cIj5cclxuICAgICAgICAgICAgICAgIHt7bGFiZWxDb25maWdbJ0NPTU1PTlNfQVNTRVNTTUVOVC5MQUJFTC5QVUJMSVNIJ119fVxyXG4gICAgICAgICAgICA8L3NwYW4+XHJcbiAgICAgICAgICAgIDxtYXQtc3Bpbm5lciAqbmdJZj1cImlzU3VibWl0dGluZ1wiIFtkaWFtZXRlcl09XCIyMFwiXHJcbiAgICAgICAgICAgICAgICBjbGFzcz1cInBvc2l0aW9uLWFic29sdXRlIHRvcC01MCBzdGFydC01MCB0cmFuc2xhdGUtbWlkZGxlIGFzc2Vzc21lbnQtc3Bpbm5lci13aGl0ZVwiPjwvbWF0LXNwaW5uZXI+XHJcbiAgICAgICAgPC9idXR0b24+XHJcbiAgICA8L2Rpdj5cclxuPC9kaXY+XHJcbjxuZy10ZW1wbGF0ZSAjbG9hZGVyPlxyXG4gICAgPGRpdiBjbGFzcz1cImgtMTAwIGNvbC0xMiBkLWZsZXggYWxpZ24taXRlbXMtY2VudGVyIGp1c3RpZnktY29udGVudC1jZW50ZXIgcHktNVwiPlxyXG4gICAgICAgIDxtYXQtc3Bpbm5lciBkaWFtZXRlcj1cIjYwXCIgY2xhc3M9XCJhc3Nlc3NtZW50LXNwaW5uZXItcHJpbWFyeVwiPjwvbWF0LXNwaW5uZXI+XHJcbiAgICA8L2Rpdj5cclxuPC9uZy10ZW1wbGF0ZT4iXX0=
726
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYXNzZXNzbWVudC1tYWtlci5jb21wb25lbnQuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy9jb21tb25zLWFzc2Vzc21lbnQvc3JjL2xpYi9tb2R1bGVzL2Fzc2Vzc21lbnQtbWFrZXIvYXNzZXNzbWVudC1tYWtlci5jb21wb25lbnQudHMiLCIuLi8uLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy9jb21tb25zLWFzc2Vzc21lbnQvc3JjL2xpYi9tb2R1bGVzL2Fzc2Vzc21lbnQtbWFrZXIvYXNzZXNzbWVudC1tYWtlci5jb21wb25lbnQuaHRtbCJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQUUsU0FBUyxFQUFFLFlBQVksRUFBRSxLQUFLLEVBQVUsTUFBTSxFQUFFLE1BQU0sZUFBZSxDQUFDO0FBQy9FLE9BQU8sRUFBRSxRQUFRLEVBQUUsRUFBRSxFQUFFLE1BQU0sTUFBTSxDQUFDO0FBQ3BDLE9BQU8sRUFBRSxVQUFVLEVBQUUsTUFBTSxnQkFBZ0IsQ0FBQztBQUM1QyxPQUFPLEVBQWUsZUFBZSxFQUFFLE1BQU0sd0JBQXdCLENBQUM7QUFFdEUsT0FBTyxFQUFFLG1DQUFtQyxFQUFFLE1BQU0sb0ZBQW9GLENBQUM7QUFDekksT0FBTyxFQUFFLDBCQUEwQixFQUFFLE1BQU0sOERBQThELENBQUM7QUFDMUcsT0FBTyxFQUFFLDJCQUEyQixFQUFFLE1BQU0sa0VBQWtFLENBQUM7QUFDL0csT0FBTyxFQUFFLDJCQUEyQixFQUFFLE1BQU0sMkVBQTJFLENBQUM7QUFNeEgsT0FBTyxFQUFFLFdBQVcsRUFBRSxhQUFhLEVBQUUsTUFBTSxvQkFBb0IsQ0FBQzs7Ozs7Ozs7Ozs7O0FBUWhFLE1BQU0sT0FBTyx3QkFBd0I7SUFvQ25DLFlBQ1Usc0JBQThDLEVBQzlDLHdCQUFrRCxFQUNsRCxNQUFpQjtRQUZqQiwyQkFBc0IsR0FBdEIsc0JBQXNCLENBQXdCO1FBQzlDLDZCQUF3QixHQUF4Qix3QkFBd0IsQ0FBMEI7UUFDbEQsV0FBTSxHQUFOLE1BQU0sQ0FBVztRQXRDbEIsZ0JBQVcsR0FBOEIsRUFBRSxDQUFDO1FBQzVDLGdCQUFXLEdBQThCLEVBQUUsQ0FBQztRQUM1QyxrQkFBYSxHQUFtQixFQUFFLENBQUM7UUFDbkMsZUFBVSxHQUFZLEtBQUssQ0FBQztRQUU1QixpQkFBWSxHQUFXLENBQUMsQ0FBQztRQUN6Qix5QkFBb0IsR0FBVyxDQUFDLENBQUM7UUFDakMseUJBQW9CLEdBQWUsRUFBRSxDQUFDO1FBQ3RDLGlDQUE0QixHQUF1QixFQUFFLENBQUM7UUFDdEQsa0NBQTZCLEdBQVksS0FBSyxDQUFDO1FBRS9DLDRCQUF1QixHQUFXLENBQUMsQ0FBQztRQUNwQyxzQkFBaUIsR0FBWSxLQUFLLENBQUM7UUFDbkMseUJBQW9CLEdBQVksS0FBSyxDQUFDO1FBQ3RDLGtCQUFhLEdBQVksS0FBSyxDQUFDO1FBQy9CLGlDQUE0QixHQUFZLEtBQUssQ0FBQztRQUc3Qyx1QkFBa0IsR0FBRyxJQUFJLFlBQVksRUFBVSxDQUFDO1FBQ2hELCtCQUEwQixHQUFHLElBQUksWUFBWSxFQUFVLENBQUM7UUFDeEQsb0JBQWUsR0FBRyxJQUFJLFlBQVksRUFBMkQsQ0FBQztRQUV4RyxlQUFVLEdBQVksS0FBSyxDQUFDO1FBQzVCLGlCQUFZLEdBQXVDLEVBQUUsQ0FBQztRQUN0RCx1QkFBa0IsR0FBNEIsRUFBRSxDQUFDO1FBQ2pELGdDQUEyQixHQUE0QixFQUFFLEVBQUUsRUFBRSxDQUFDLEVBQUUsd0JBQXdCLEVBQUUsRUFBRSxFQUFFLENBQUM7UUFDL0Ysa0JBQWEsR0FBWSxLQUFLLENBQUM7UUFFL0IsaUJBQVksR0FBWSxLQUFLLENBQUM7UUFDOUIsZUFBVSxHQUFjLEVBQUUsQ0FBQztRQUMzQixrQkFBYSxHQUFXLENBQUMsQ0FBQztRQUMxQixzQkFBaUIsR0FBWSxLQUFLLENBQUM7UUFDbkMsb0JBQWUsR0FBa0IsSUFBSSxDQUFDO1FBQ3JCLDBCQUFxQixHQUFHLHlDQUF5QyxDQUFDO0lBTS9FLENBQUM7SUFFTCxRQUFROztRQUNOLElBQUksQ0FBQyx3QkFBd0IsQ0FBQyx1QkFBdUIsQ0FBQyxJQUFJLENBQUMsb0JBQW9CLENBQUMsQ0FBQztRQUNqRixJQUFJLENBQUMsaUJBQWlCLEdBQUcsSUFBSSxDQUFDLG9CQUFvQixDQUFDLElBQUksQ0FBQyxvQkFBb0IsQ0FBQyxDQUFDO1FBQzlFLElBQUksQ0FBQyxZQUFZLENBQUMsQ0FBQSxNQUFBLElBQUksQ0FBQyxpQkFBaUIsMENBQUUscUJBQXFCLEtBQUksSUFBSSxDQUFDLDRCQUE0QixDQUFDLENBQUM7UUFDdEcsSUFBSSxDQUFDLGtCQUFrQixFQUFFLENBQUM7UUFFMUIsSUFBSSxJQUFJLENBQUMsaUJBQWlCLEVBQUU7WUFDMUIsSUFBSSxDQUFDLG9CQUFvQixHQUFHLENBQUEsTUFBQSxNQUFBLElBQUksQ0FBQyxpQkFBaUIsMENBQUUscUJBQXFCLDBDQUFFLEVBQUUsS0FBSSxJQUFJLENBQUMsb0JBQW9CLENBQUM7WUFDM0csSUFBSSxDQUFDLFlBQVksR0FBRyxDQUFBLE1BQUEsTUFBQSxJQUFJLENBQUMsaUJBQWlCLDBDQUFFLFVBQVUsMENBQUUsRUFBRSxLQUFJLElBQUksQ0FBQyxZQUFZLENBQUM7U0FDakY7UUFFRCxJQUFJLElBQUksQ0FBQyxZQUFZLEVBQUU7WUFDckIsSUFBSSxDQUFDLFVBQVUsR0FBRyxJQUFJLENBQUM7WUFDdkIsSUFBSSxDQUFDLGtCQUFrQixFQUFFLENBQUM7U0FDM0I7UUFFRCxJQUFJLElBQUksQ0FBQyw2QkFBNkIsRUFBRTtZQUN0QyxJQUFJLENBQUMsYUFBYSxFQUFFLENBQUM7U0FDdEI7UUFFRCxJQUFJLElBQUksQ0FBQyxpQkFBaUIsSUFBSSxJQUFJLENBQUMsb0JBQW9CLEVBQUU7WUFDdkQsSUFBSSxDQUFDLGlCQUFpQixFQUFFLENBQUM7U0FDMUI7SUFDSCxDQUFDO0lBRU8saUJBQWlCO1FBQ3ZCLElBQUksQ0FBQyxzQkFBc0IsQ0FBQyxnQkFBZ0IsQ0FBQyxJQUFJLENBQUMsb0JBQW9CLENBQUMsQ0FBQyxTQUFTLENBQUM7WUFDaEYsSUFBSSxFQUFFLENBQUMsS0FBVSxFQUFFLEVBQUUsQ0FBQyxJQUFJLENBQUMsYUFBYSxHQUFHLE1BQU0sQ0FBQyxLQUFLLENBQUMsSUFBSSxDQUFDO1lBQzdELEtBQUssRUFBRSxHQUFHLEVBQUUsQ0FBQyxJQUFJLENBQUMsYUFBYSxHQUFHLENBQUMsQ0FBQyxzREFBc0Q7U0FDM0YsQ0FBQyxDQUFDO0lBQ0wsQ0FBQztJQUVEOzs7T0FHRztJQUNLLHVCQUF1QixDQUFDLE1BQWtCO1FBQ2hELElBQUksSUFBSSxDQUFDLGFBQWEsR0FBRyxDQUFDLEVBQUU7WUFDMUIsTUFBTSxTQUFTLEdBQUcsSUFBSSxDQUFDLE1BQU0sQ0FBQyxJQUFJLENBQUMsMkJBQTJCLEVBQUU7Z0JBQzlELFNBQVMsRUFBRSxLQUFLO2dCQUNoQixRQUFRLEVBQUUsS0FBSztnQkFDZixLQUFLLEVBQUUsT0FBTztnQkFDZCxVQUFVLEVBQUUsQ0FBQyxtQkFBbUIsQ0FBQztnQkFDakMsSUFBSSxFQUFFO29CQUNKLE9BQU8sRUFBRSxJQUFJLENBQUMsV0FBVyxDQUFDLDRDQUE0QyxDQUFDO29CQUN2RSxZQUFZLEVBQUUsSUFBSSxDQUFDLFdBQVcsQ0FBQyxrQ0FBa0MsQ0FBQztvQkFDbEUsV0FBVyxFQUFFLElBQUksQ0FBQyxXQUFXLENBQUMsaUNBQWlDLENBQUM7aUJBQ2pFO2FBQ0YsQ0FBQyxDQUFDO1lBQ0gsU0FBUyxDQUFDLFdBQVcsRUFBRSxDQUFDLFNBQVMsQ0FBQyxDQUFDLFNBQWtCLEVBQUUsRUFBRTtnQkFDdkQsSUFBSSxTQUFTLEVBQUU7b0JBQ2IsTUFBTSxFQUFFLENBQUM7aUJBQ1Y7WUFDSCxDQUFDLENBQUMsQ0FBQztTQUNKO2FBQU07WUFDTCxNQUFNLEVBQUUsQ0FBQztTQUNWO0lBQ0gsQ0FBQztJQUVELGtCQUFrQjs7UUFDaEIsUUFBUSxpQkFDTixXQUFXLEVBQUUsSUFBSSxDQUFDLHNCQUFzQixDQUFDLGFBQWEsQ0FBQyxrQkFBa0IsQ0FBQyxFQUMxRSxXQUFXLEVBQUUsSUFBSSxDQUFDLHNCQUFzQixDQUFDLGFBQWEsQ0FBQyxrQkFBa0IsQ0FBQyxFQUMxRSxLQUFLLEVBQUUsSUFBSSxDQUFDLHNCQUFzQixDQUFDLGFBQWEsQ0FBQyw2QkFBNkIsQ0FBQyxJQUM1RSxDQUFDLENBQUMsQ0FBQSxNQUFBLElBQUksQ0FBQyxhQUFhLDBDQUFFLE1BQU0sQ0FBQSxJQUFJO1lBQ2pDLGFBQWEsRUFBRSxJQUFJLENBQUMsc0JBQXNCLENBQUMsYUFBYSxDQUFDLG9CQUFvQixDQUFDO1NBQy9FLENBQUMsRUFDRixDQUFDLFNBQVMsQ0FBQyxDQUFDLEdBQVEsRUFBRSxFQUFFO1lBQ3hCLElBQUksQ0FBQyxXQUFXLEdBQUcsTUFBTSxDQUFDLE1BQU0sQ0FBQyxFQUFFLEVBQUUsR0FBRyxhQUFILEdBQUcsdUJBQUgsR0FBRyxDQUFFLFdBQVcsRUFBRSxJQUFJLENBQUMsV0FBVyxDQUFDLENBQUM7WUFDekUsSUFBSSxDQUFDLFdBQVcsR0FBRyxNQUFNLENBQUMsTUFBTSxDQUFDLEVBQUUsRUFBRSxHQUFHLGFBQUgsR0FBRyx1QkFBSCxHQUFHLENBQUUsV0FBVyxFQUFFLElBQUksQ0FBQyxXQUFXLENBQUMsQ0FBQztZQUN6RSxJQUFJLEdBQUcsYUFBSCxHQUFHLHVCQUFILEdBQUcsQ0FBRSxhQUFhLEVBQUU7Z0JBQ3RCLElBQUksQ0FBQyxhQUFhLEdBQUcsR0FBRyxhQUFILEdBQUcsdUJBQUgsR0FBRyxDQUFFLGFBQWEsQ0FBQzthQUN6QztZQUNELHdEQUF3RDtZQUN4RCxJQUFJLENBQUMsS0FBSyxxQkFBUSxHQUFHLGFBQUgsR0FBRyx1QkFBSCxHQUFHLENBQUUsS0FBSyxDQUFFLENBQUM7WUFDL0IsSUFBSSxJQUFJLENBQUMsV0FBVyxFQUFFO2dCQUNwQixNQUFNLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxXQUFXLENBQUMsQ0FBQyxPQUFPLENBQUMsS0FBSyxDQUFDLEVBQUU7b0JBQzVDLElBQUksQ0FBQyxJQUFJLENBQUMsS0FBSyxDQUFDLEtBQUssQ0FBQyxFQUFFO3dCQUN0QixJQUFJLENBQUMsS0FBSyxDQUFDLEtBQUssQ0FBQyxxQkFBUSxJQUFJLENBQUMsV0FBVyxDQUFDLEtBQUssQ0FBQyxDQUFFLENBQUM7cUJBQ3BEO3lCQUFNO3dCQUNMLElBQUksQ0FBQyxLQUFLLENBQUMsS0FBSyxDQUFDLG1DQUFRLElBQUksQ0FBQyxLQUFLLENBQUMsS0FBSyxDQUFDLEdBQUssSUFBSSxDQUFDLFdBQVcsQ0FBQyxLQUFLLENBQUMsQ0FBRSxDQUFDO3FCQUMxRTtnQkFDSCxDQUFDLENBQUMsQ0FBQzthQUNKO1lBRUQsSUFBSSxDQUFDLGFBQWEsR0FBRyxJQUFJLENBQUM7UUFDNUIsQ0FBQyxDQUFDLENBQUE7SUFDSixDQUFDO0lBRUQsa0JBQWtCOztRQUNoQixJQUFJLElBQUksQ0FBQyxpQkFBaUIsRUFBRTtZQUMxQixJQUFJLENBQUMsWUFBWSxtQ0FDWixJQUFJLENBQUMsWUFBWSxHQUNqQixDQUFDLENBQUEsTUFBQSxJQUFJLENBQUMsaUJBQWlCLDBDQUFFLGNBQWMsS0FBSSxFQUFFLENBQUMsQ0FDbEQsQ0FBQztZQUNGLElBQUksQ0FBQyxpQ0FBaUMsQ0FBQyxNQUFBLElBQUksQ0FBQyxpQkFBaUIsMENBQUUsMEJBQTBCLENBQUMsQ0FBQztZQUMzRixJQUFJLENBQUMsaUJBQWlCLEdBQUcsSUFBSSxDQUFDLG9CQUFvQixDQUFDLE1BQUEsSUFBSSxDQUFDLGlCQUFpQiwwQ0FBRSxVQUFVLENBQUMsQ0FBQztZQUN2RixJQUFJLENBQUMsWUFBWSxDQUFDLE1BQUEsSUFBSSxDQUFDLGlCQUFpQiwwQ0FBRSxxQkFBcUIsQ0FBQyxDQUFDO1lBQ2pFLElBQUksQ0FBQyxVQUFVLEdBQUcsS0FBSyxDQUFDO1lBQ3hCLElBQUksQ0FBQyw4QkFBOEIsRUFBRSxDQUFDO1NBQ3ZDO2FBQU07WUFDTCxJQUFJLENBQUMsc0JBQXNCLENBQUMsb0JBQW9CLENBQUMsRUFBRSxhQUFhLEVBQUUsQ0FBQyxJQUFJLENBQUMsWUFBWSxDQUFDLEVBQUUsQ0FBQyxDQUFDLFNBQVMsQ0FBQztnQkFDakcsSUFBSSxFQUFFLENBQUMsR0FBUSxFQUFFLEVBQUU7O29CQUNqQixJQUFJLENBQUMsaUJBQWlCLEdBQUcsR0FBRyxhQUFILEdBQUcsdUJBQUgsR0FBRyxDQUFHLENBQUMsQ0FBQyxDQUFDO29CQUNsQyxJQUFJLENBQUMsWUFBWSxtQ0FDWixJQUFJLENBQUMsWUFBWSxHQUNqQixDQUFDLENBQUEsTUFBQSxJQUFJLENBQUMsaUJBQWlCLDBDQUFFLGNBQWMsS0FBSSxFQUFFLENBQUMsQ0FDbEQsQ0FBQztvQkFDRixJQUFJLENBQUMsaUNBQWlDLENBQUMsTUFBQSxJQUFJLENBQUMsaUJBQWlCLDBDQUFFLDBCQUEwQixDQUFDLENBQUM7b0JBQzNGLElBQUksQ0FBQyxpQkFBaUIsR0FBRyxJQUFJLENBQUMsb0JBQW9CLENBQUMsTUFBQSxJQUFJLENBQUMsaUJBQWlCLDBDQUFFLFVBQVUsQ0FBQyxDQUFDO29CQUN2RixJQUFJLENBQUMsWUFBWSxDQUFDLE1BQUEsSUFBSSxDQUFDLGlCQUFpQiwwQ0FBRSxxQkFBcUIsQ0FBQyxDQUFDO29CQUNqRSxJQUFJLENBQUMsVUFBVSxHQUFHLEtBQUssQ0FBQztvQkFDeEIsSUFBSSxDQUFDLDhCQUE4QixFQUFFLENBQUM7Z0JBQ3hDLENBQUM7Z0JBQ0QsS0FBSyxFQUFFLENBQUMsS0FBVSxFQUFFLEVBQUU7b0JBQ3BCLE9BQU8sQ0FBQyxLQUFLLENBQUMsS0FBSyxDQUFDLENBQUM7b0JBQ3JCLElBQUksQ0FBQyxlQUFlLENBQUMsSUFBSSxDQUFDLEVBQUUsT0FBTyxFQUFFLElBQUksQ0FBQyxXQUFXLENBQUMsd0NBQXdDLENBQUMsRUFBRSxJQUFJLEVBQUUsT0FBTyxFQUFFLENBQUMsQ0FBQztvQkFDbEgsTUFBTSxFQUFFLEtBQUssRUFBRSxNQUFNLEVBQUUsS0FBSyxFQUFFLENBQUE7Z0JBQ2hDLENBQUM7YUFDRixDQUFDLENBQUE7U0FDSDtJQUNILENBQUM7SUFFRCw4QkFBOEI7UUFDNUIsTUFBTSxXQUFXLEdBQUcsTUFBTSxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsWUFBWSxJQUFJLEVBQUUsQ0FBQzthQUNyRCxHQUFHLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQyxNQUFNLENBQUMsRUFBRSxDQUFDLENBQUM7YUFDckIsTUFBTSxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUMsRUFBRSxHQUFHLENBQUMsQ0FBQyxDQUFDO1FBRXhCLElBQUksV0FBVyxDQUFDLE1BQU0sS0FBSyxDQUFDO1lBQUUsT0FBTztRQUVyQyxJQUFJLENBQUMsc0JBQXNCLENBQUMsb0JBQW9CLENBQUMsV0FBVyxFQUFFLHFCQUFxQixDQUFDO2FBQ2pGLElBQUksQ0FBQyxVQUFVLENBQUMsR0FBRyxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQyxDQUFDLENBQUM7YUFDOUIsU0FBUyxDQUFDLENBQUMsU0FBMkMsRUFBRSxFQUFFO1lBQ3pELE1BQU0sQ0FBQyxJQUFJLENBQUMsU0FBUyxJQUFJLEVBQUUsQ0FBQyxDQUFDLE9BQU8sQ0FBQyxDQUFDLENBQUMsRUFBRTtnQkFDdkMsSUFBSSxDQUFDLGtCQUFrQixDQUFDLE1BQU0sQ0FBQyxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxTQUFTLENBQUMsQ0FBQyxDQUFDLENBQUM7WUFDdEQsQ0FBQyxDQUFDLENBQUM7UUFDTCxDQUFDLENBQUMsQ0FBQztJQUNQLENBQUM7SUFFRCxnQkFBZ0IsQ0FBQyxVQUFtQjtRQUNsQyxPQUFPLFVBQVUsSUFBSSxJQUFJLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxJQUFJLENBQUMsa0JBQWtCLENBQUMsVUFBVSxDQUFDLENBQUMsQ0FBQyxDQUFDLEtBQUssQ0FBQztJQUM1RSxDQUFDO0lBRUQsb0JBQW9COztRQUNsQixJQUFJLGdCQUFnQixHQUFhLEVBQUUsQ0FBQztRQUVwQyxNQUFBLE1BQUEsSUFBSSxDQUFDLDJCQUEyQiwwQ0FBRSx3QkFBd0IsMENBQUUsT0FBTyxDQUFDLENBQUMsT0FBWSxFQUFFLEVBQUU7O1lBQ25GLE1BQUEsT0FBTyxhQUFQLE9BQU8sdUJBQVAsT0FBTyxDQUFFLG9CQUFvQiwwQ0FBRSxPQUFPLENBQUMsQ0FBQyxDQUFNLEVBQUUsRUFBRTs7Z0JBQ2hELElBQUksTUFBQSxNQUFBLE1BQUEsSUFBSSxDQUFDLFlBQVksMENBQUcsQ0FBQyxhQUFELENBQUMsdUJBQUQsQ0FBQyxDQUFFLFVBQVUsQ0FBQywwQ0FBRSxrQkFBa0IsMENBQUUsTUFBTSxFQUFFO29CQUNsRSxNQUFBLE1BQUEsTUFBQSxJQUFJLENBQUMsWUFBWSwwQ0FBRyxDQUFDLGFBQUQsQ0FBQyx1QkFBRCxDQUFDLENBQUUsVUFBVSxDQUFDLDBDQUFFLGtCQUFrQiwwQ0FBRSxPQUFPLENBQUMsQ0FBQyxNQUFXLEVBQUUsRUFBRTs7d0JBQzlFLElBQUksTUFBQSxNQUFNLGFBQU4sTUFBTSx1QkFBTixNQUFNLENBQUUsaUJBQWlCLDBDQUFFLE1BQU0sRUFBRTs0QkFDckMsTUFBQSxNQUFNLGFBQU4sTUFBTSx1QkFBTixNQUFNLENBQUUsaUJBQWlCLDBDQUFFLE9BQU8sQ0FBQyxDQUFDLEdBQVEsRUFBRSxFQUFFO2dDQUM5QyxnQkFBZ0IsQ0FBQyxJQUFJLENBQUMsR0FBRyxDQUFDLENBQUM7NEJBQzdCLENBQUMsQ0FBQyxDQUFDO3lCQUNKO29CQUNILENBQUMsQ0FBQyxDQUFDO2lCQUNKO1lBQ0gsQ0FBQyxDQUFDLENBQUM7UUFDTCxDQUFDLENBQUMsQ0FBQztRQUVILG9FQUFvRTtRQUNwRSxnQkFBZ0IsR0FBRyxDQUFDLEdBQUcsSUFBSSxHQUFHLENBQUMsZ0JBQWdCLENBQUMsQ0FBQyxDQUFDLE1BQU0sQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLENBQUMsSUFBSSxDQUFDLFlBQVksQ0FBQyxFQUFFLENBQUMsQ0FBQyxDQUFDO1FBRXZGLElBQUksQ0FBQSxnQkFBZ0IsYUFBaEIsZ0JBQWdCLHVCQUFoQixnQkFBZ0IsQ0FBRSxNQUFNLElBQUcsQ0FBQyxFQUFFO1lBQ2hDLE1BQU0sTUFBTSxHQUFHLEVBQUUsV0FBVyxFQUFFLGdCQUFnQixFQUFFLENBQUM7WUFDakQsSUFBSSxDQUFDLHNCQUFzQixDQUFDLGlCQUFpQixDQUFDLE1BQU0sQ0FBQyxDQUFDLFNBQVMsQ0FBQztnQkFDOUQsSUFBSSxFQUFFLENBQUMsR0FBUSxFQUFFLEVBQUU7b0JBQ2pCLEdBQUcsYUFBSCxHQUFHLHVCQUFILEdBQUcsQ0FBRSxPQUFPLENBQUMsQ0FBQyxRQUFhLEVBQUUsRUFBRTt3QkFDN0IsSUFBSSxDQUFDLFlBQVksQ0FBQyxRQUFRLENBQUMsRUFBRSxDQUFDLEdBQUcsUUFBUSxDQUFDO29CQUM1QyxDQUFDLENBQUMsQ0FBQztvQkFDSCxJQUFJLENBQUMsOEJBQThCLEVBQUUsQ0FBQztnQkFDeEMsQ0FBQztnQkFDRCxLQUFLLEVBQUUsQ0FBQyxLQUFVLEVBQUUsRUFBRTtvQkFDcEIsT0FBTyxDQUFDLEtBQUssQ0FBQyxLQUFLLENBQUMsQ0FBQztvQkFDckIsTUFBTSxFQUFFLEtBQUssRUFBRSxNQUFNLEVBQUUsS0FBSyxFQUFFLE9BQU8sRUFBRSxNQUFNLEVBQUUsQ0FBQTtnQkFDakQsQ0FBQzthQUNGLENBQUMsQ0FBQTtTQUNIO0lBQ0gsQ0FBQztJQUVELGlCQUFpQixDQUFDLEtBQVUsRUFBRSxRQUFnQjtRQUM1QyxLQUFLLENBQUMsTUFBTSxDQUFDLEdBQUcsR0FBRyxRQUFRLENBQUM7SUFDOUIsQ0FBQztJQUVELGlCQUFpQixDQUFDLFlBQW9CLEVBQUUsS0FBWTtRQUNsRCxLQUFLLENBQUMsZUFBZSxFQUFFLENBQUM7UUFDeEIsTUFBTSxLQUFLLEdBQUcsUUFBUSxDQUFDLGNBQWMsQ0FBQyxvQkFBb0IsWUFBWSxFQUFFLENBQXFCLENBQUM7UUFDOUYsSUFBSSxLQUFLLEVBQUU7WUFDVCxLQUFLLENBQUMsS0FBSyxFQUFFLENBQUM7U0FDZjtJQUNILENBQUM7SUFFRCxXQUFXLENBQUMsS0FBeUI7UUFDbkMsSUFBSSxJQUFJLENBQUMsMkJBQTJCLENBQUMsd0JBQXdCLEVBQUU7WUFDN0QsZUFBZSxDQUNiLElBQUksQ0FBQywyQkFBMkIsQ0FBQyx3QkFBd0IsRUFDekQsS0FBSyxDQUFDLGFBQWEsRUFDbkIsS0FBSyxDQUFDLFlBQVksQ0FDbkIsQ0FBQztTQUNIO0lBQ0gsQ0FBQztJQUVELFlBQVksQ0FBQyxLQUF5QjtRQUNwQyxlQUFlLENBQ2IsS0FBSyxDQUFDLFNBQVMsQ0FBQyxJQUFJLEVBQ3BCLEtBQUssQ0FBQyxhQUFhLEVBQ25CLEtBQUssQ0FBQyxZQUFZLENBQ25CLENBQUM7SUFDSixDQUFDO0lBRUQsY0FBYyxDQUFDLE9BQVk7UUFDekIsTUFBTSxTQUFTLEdBQUcsSUFBSSxDQUFDLE1BQU0sQ0FBQyxJQUFJLENBQUMsbUNBQW1DLEVBQUU7WUFDdEUsU0FBUyxFQUFFLEtBQUs7WUFDaEIsUUFBUSxFQUFFLEtBQUs7WUFDZixLQUFLLEVBQUUsT0FBTztZQUNkLFNBQVMsRUFBRSxRQUFRO1lBQ25CLFVBQVUsRUFBRSxDQUFDLG1CQUFtQixDQUFDO1lBQ2pDLElBQUksRUFBRTtnQkFDSixXQUFXLEVBQUUsSUFBSSxDQUFDLFdBQVc7Z0JBQzdCLFdBQVcsRUFBRSxJQUFJLENBQUMsV0FBVztnQkFDN0IsY0FBYyxFQUFFLE9BQU87YUFDeEI7U0FDRixDQUFDLENBQUM7UUFFSCxTQUFTLENBQUMsV0FBVyxFQUFFLENBQUMsU0FBUyxDQUFDLENBQUMsTUFBTSxFQUFFLEVBQUU7WUFDM0MsSUFBSSxNQUFNLGFBQU4sTUFBTSx1QkFBTixNQUFNLENBQUUsTUFBTSxFQUFFO2dCQUNsQixJQUFJLENBQUMsT0FBTyxDQUFDLE9BQU87b0JBQUUsT0FBTyxDQUFDLE9BQU8sR0FBRyxFQUFFLENBQUM7Z0JBQzNDLElBQUksQ0FBQyxPQUFPLENBQUMsT0FBTyxDQUFDLENBQUMsQ0FBQztvQkFBRSxPQUFPLENBQUMsT0FBTyxDQUFDLENBQUMsQ0FBQyxHQUFHLEVBQUUsRUFBRSxFQUFFLENBQUMsRUFBRSxRQUFRLEVBQUUsRUFBRSxJQUFJLEVBQUUsS0FBSyxFQUFFLEVBQUUsSUFBSSxFQUFFLEVBQUUsRUFBRSxDQUFDO2dCQUM3RixPQUFPLENBQUMsT0FBTyxDQUFDLENBQUMsQ0FBQyxDQUFDLElBQUksR0FBRyxNQUFNLGFBQU4sTUFBTSx1QkFBTixNQUFNLENBQUUsV0FBVyxDQUFDO2dCQUM5QyxPQUFPLENBQUMsUUFBUSxHQUFHLENBQUEsTUFBTSxhQUFOLE1BQU0sdUJBQU4sTUFBTSxDQUFFLFFBQVEsS0FBSSxJQUFJLENBQUM7Z0JBQzVDLElBQUksQ0FBQywrQkFBK0IsQ0FBQyxJQUFJLENBQUMsV0FBVyxDQUFDLCtEQUErRCxDQUFDLENBQUMsQ0FBQzthQUN6SDtRQUNILENBQUMsQ0FBQyxDQUFDO0lBQ0wsQ0FBQztJQUVELG1CQUFtQixDQUFDLE1BQVcsRUFBRSxlQUE2QjtRQUM1RCxJQUFJLENBQUMsdUJBQXVCLENBQUMsR0FBRyxFQUFFO1lBQ2hDLElBQUksTUFBTSxDQUFDLGlCQUFpQixFQUFFO2dCQUM1QixNQUFNLFVBQVUsR0FBRyxPQUFPLGVBQWUsS0FBSyxRQUFRLENBQUMsQ0FBQyxDQUFDLGVBQWUsYUFBZixlQUFlLHVCQUFmLGVBQWUsQ0FBRSxFQUFFLENBQUMsQ0FBQyxDQUFDLGVBQWUsQ0FBQztnQkFDL0YsTUFBTSxDQUFDLGlCQUFpQixHQUFHLE1BQU0sQ0FBQyxpQkFBaUIsQ0FBQyxNQUFNLENBQUMsQ0FBQyxHQUFRLEVBQUUsRUFBRTtvQkFDdEUsTUFBTSxFQUFFLEdBQUcsT0FBTyxHQUFHLEtBQUssUUFBUSxDQUFDLENBQUMsQ0FBQyxHQUFHLGFBQUgsR0FBRyx1QkFBSCxHQUFHLENBQUUsRUFBRSxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUM7b0JBQ25ELE9BQU8sRUFBRSxLQUFLLFVBQVUsQ0FBQztnQkFDM0IsQ0FBQyxDQUFDLENBQUM7YUFDSjtRQUNILENBQUMsQ0FBQyxDQUFDO0lBQ0wsQ0FBQztJQUVELG9CQUFvQixDQUFDLGVBQWdDO1FBQ25ELElBQUksQ0FBQyx1QkFBdUIsQ0FBQyxHQUFHLEVBQUU7WUFDaEMsZUFBZSxDQUFDLFFBQVEsR0FBRyxLQUFLLENBQUM7WUFDakMsSUFBSSxDQUFDLCtCQUErQixDQUFDLElBQUksQ0FBQyxXQUFXLENBQUMsbURBQW1ELENBQUMsQ0FBQyxDQUFDO1FBQzlHLENBQUMsQ0FBQyxDQUFDO0lBQ0wsQ0FBQztJQUVELGFBQWEsQ0FBQyxPQUE2QjtRQUN6QyxJQUFJLENBQUMsdUJBQXVCLENBQUMsR0FBRyxFQUFFO1lBQ2hDLE9BQU8sQ0FBQyxRQUFRLEdBQUcsS0FBSyxDQUFDO1lBQ3pCLElBQUksQ0FBQywrQkFBK0IsQ0FBQyxJQUFJLENBQUMsV0FBVyxDQUFDLGtEQUFrRCxDQUFDLENBQUMsQ0FBQztRQUM3RyxDQUFDLENBQUMsQ0FBQztJQUNMLENBQUM7SUFFRCxrQkFBa0IsQ0FBQyxjQUFvQixFQUFFLGlCQUEwQixFQUFFLE9BQWlCO1FBQ3BGLElBQUksaUJBQWlCLElBQUksSUFBSSxJQUFJLElBQUksQ0FBQyxrQkFBa0IsQ0FBQyxpQkFBaUIsQ0FBQyxFQUFFO1lBQzNFLElBQUksQ0FBQyxlQUFlLENBQUMsSUFBSSxDQUFDO2dCQUN4QixPQUFPLEVBQUUsSUFBSSxDQUFDLFdBQVcsQ0FBQyw0Q0FBNEMsQ0FBQyxJQUFJLHVFQUF1RTtnQkFDbEosSUFBSSxFQUFFLE1BQU07YUFDYixDQUFDLENBQUM7WUFDSCxPQUFPO1NBQ1I7UUFDRCwyRkFBMkY7UUFDM0YsSUFBSSxpQkFBaUIsSUFBSSxJQUFJLEVBQUU7WUFDN0IsSUFBSSxDQUFDLHVCQUF1QixDQUFDLEdBQUcsRUFBRSxDQUFDLElBQUksQ0FBQyxtQkFBbUIsQ0FBQyxjQUFjLEVBQUUsaUJBQWlCLEVBQUUsT0FBTyxDQUFDLENBQUMsQ0FBQztTQUMxRzthQUFNO1lBQ0wsSUFBSSxDQUFDLG1CQUFtQixDQUFDLGNBQWMsRUFBRSxpQkFBaUIsRUFBRSxPQUFPLENBQUMsQ0FBQztTQUN0RTtJQUNILENBQUM7SUFFTyxtQkFBbUIsQ0FBQyxjQUFvQixFQUFFLGlCQUEwQixFQUFFLE9BQWlCO1FBQzdGLE1BQU0sZUFBZSxHQUFHLElBQUksQ0FBQyxtQkFBbUIsQ0FBQyxpQkFBaUIsQ0FBQyxDQUFDO1FBQ3BFLE1BQU0sU0FBUyxHQUFHLElBQUksQ0FBQyxNQUFNLENBQUMsSUFBSSxDQUFDLDBCQUEwQixFQUFFO1lBQzdELFNBQVMsRUFBRSxLQUFLO1lBQ2hCLFFBQVEsRUFBRSxFQUFFLEtBQUssRUFBRSxHQUFHLEVBQUU7WUFDeEIsUUFBUSxFQUFFLE1BQU07WUFDaEIsS0FBSyxFQUFFLE9BQU87WUFDZCxNQUFNLEVBQUUsT0FBTztZQUNmLFVBQVUsRUFBRSxDQUFDLG1CQUFtQixFQUFFLG9DQUFvQyxDQUFDO1lBQ3ZFLFdBQVcsRUFBRSxJQUFJO1lBQ2pCLElBQUksRUFBRTtnQkFDSixXQUFXLEVBQUUsSUFBSSxDQUFDLFdBQVc7Z0JBQzdCLFdBQVcsRUFBRSxJQUFJLENBQUMsV0FBVztnQkFDN0IsYUFBYSxFQUFFLElBQUksQ0FBQyxhQUFhO2dCQUNqQyxLQUFLLEVBQUUsSUFBSSxDQUFDLEtBQUs7Z0JBQ2pCLFlBQVksRUFBRSxJQUFJLENBQUMsWUFBWTtnQkFDL0IsT0FBTyxFQUFFLE9BQU87Z0JBQ2hCLGVBQWU7Z0JBQ2YsY0FBYztnQkFDZCwyQkFBMkIsRUFBRSxJQUFJLENBQUMsMkJBQTJCO2dCQUM3RCxZQUFZLEVBQUUsSUFBSSxDQUFDLFlBQVk7Z0JBQy9CLFVBQVUsRUFBRSxJQUFJLENBQUMsVUFBVTtnQkFDM0Isc0JBQXNCLEVBQUUsSUFBSSxDQUFDLGVBQWU7Z0JBQzVDLFFBQVEsRUFBRSxpQkFBaUIsSUFBSSxJQUFJLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxJQUFJLENBQUMsa0JBQWtCLENBQUMsaUJBQWlCLENBQUMsQ0FBQyxDQUFDLENBQUMsS0FBSzthQUMzRjtTQUNGLENBQUMsQ0FBQztRQUVILFNBQVMsQ0FBQyxXQUFXLEVBQUUsQ0FBQyxTQUFTLENBQUMsQ0FBQyxHQUFRLEVBQUUsRUFBRTtZQUM3QyxJQUFJLEdBQUcsYUFBSCxHQUFHLHVCQUFILEdBQUcsQ0FBRSxPQUFPLEVBQUU7Z0JBQ2hCLElBQUksR0FBRyxhQUFILEdBQUcsdUJBQUgsR0FBRyxDQUFFLFlBQVksRUFBRTtvQkFDckIsSUFBSSxDQUFDLElBQUksQ0FBQyxZQUFZLEVBQUU7d0JBQ3RCLElBQUksQ0FBQyxZQUFZLEdBQUcsR0FBRyxDQUFDLFlBQVksQ0FBQzt3QkFDckMsSUFBSSxDQUFDLGtCQUFrQixDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsWUFBWSxDQUFDLENBQUM7cUJBQ2pEO29CQUNELElBQUksQ0FBQyxZQUFZLG1DQUNaLElBQUksQ0FBQyxZQUFZLEdBQ2pCLENBQUMsQ0FBQSxHQUFHLGFBQUgsR0FBRyx1QkFBSCxHQUFHLENBQUUsV0FBVyxLQUFJLEVBQUUsQ0FBQyxDQUM1QixDQUFDO29CQUNGLElBQUksQ0FBQyxpQ0FBaUMsQ0FBQyxHQUFHLENBQUMsYUFBYSxDQUFDLENBQUM7aUJBQzNEO3FCQUFNO29CQUNMLElBQUksQ0FBQywrQkFBK0IsRUFBRSxDQUFDO2lCQUN4QzthQUNGO1FBQ0gsQ0FBQyxDQUFDLENBQUM7SUFDTCxDQUFDO0lBRUQsZ0JBQWdCLENBQUMsU0FBaUI7O1FBQ2hDLElBQUksQ0FBQyxDQUFBLE1BQUEsSUFBSSxDQUFDLDJCQUEyQiwwQ0FBRSxFQUFFLENBQUE7WUFBRSxPQUFPO1FBQ2xELElBQUksQ0FBQyxzQkFBc0IsQ0FBQyxnQkFBZ0IsQ0FBQyxJQUFJLENBQUMsMkJBQTJCLENBQUMsRUFBRSxFQUFFLFNBQVMsQ0FBQyxDQUFDLFNBQVMsQ0FBQztZQUNyRyxJQUFJLEVBQUUsQ0FBQyxHQUFRLEVBQUUsRUFBRTtnQkFDakIsSUFBSSxDQUFDLFlBQVksbUNBQ1osSUFBSSxDQUFDLFlBQVksR0FDakIsQ0FBQyxDQUFBLEdBQUcsYUFBSCxHQUFHLHVCQUFILEdBQUcsQ0FBRSxXQUFXLEtBQUksRUFBRSxDQUFDLENBQzVCLENBQUM7Z0JBQ0YsSUFBSSxDQUFDLGlDQUFpQyxDQUFDLEdBQUcsYUFBSCxHQUFHLHVCQUFILEdBQUcsQ0FBRSxhQUFhLENBQUMsQ0FBQztnQkFDM0QsSUFBSSxDQUFDLG9CQUFvQixFQUFFLENBQUM7Z0JBQzVCLElBQUksQ0FBQyw4QkFBOEIsRUFBRSxDQUFDO2dCQUN0QyxJQUFJLENBQUMsK0JBQStCLEVBQUUsQ0FBQztnQkFDdkMsSUFBSSxDQUFDLGVBQWUsQ0FBQyxJQUFJLENBQUMsRUFBRSxPQUFPLEVBQUUsSUFBSSxDQUFDLFdBQVcsQ0FBQyxxREFBcUQsQ0FBQyxFQUFFLElBQUksRUFBRSxTQUFTLEVBQUUsQ0FBQyxDQUFDO1lBQ25JLENBQUM7WUFDRCxLQUFLLEVBQUUsQ0FBQyxLQUFVLEVBQUUsRUFBRTtnQkFDcEIsSUFBSSxDQUFDLFVBQVUsR0FBRyxLQUFLLENBQUM7Z0JBQ3hCLE9BQU8sQ0FBQyxLQUFLLENBQUMsS0FBSyxDQUFDLENBQUM7Z0JBQ3JCLElBQUksQ0FBQyxlQUFlLENBQUMsSUFBSSxDQUFDLEVBQUUsT0FBTyxFQUFFLElBQUksQ0FBQyxXQUFXLENBQUMsd0NBQXdDLENBQUMsRUFBRSxJQUFJLEVBQUUsT0FBTyxFQUFFLENBQUMsQ0FBQztnQkFDbEgsTUFBTSxFQUFFLEtBQUssRUFBRSxNQUFNLEVBQUUsT0FBTyxFQUFFLENBQUE7WUFDbEMsQ0FBQztTQUNGLENBQUMsQ0FBQztJQUNMLENBQUM7SUFFRCxpQkFBaUIsQ0FBQyxPQUE2QixFQUFFLGVBQWdDO1FBQy9FLElBQUksQ0FBQyxlQUFlLENBQUMsRUFBRTtZQUFFLE9BQU87UUFDaEMsSUFBSSxDQUFDLHNCQUFzQixDQUFDLGlCQUFpQixDQUFDLE9BQU8sQ0FBQyxFQUFFLEVBQUUsZUFBZSxDQUFDLEVBQUUsQ0FBQyxDQUFDLFNBQVMsQ0FBQztZQUN0RixJQUFJLEVBQUUsQ0FBQyxHQUFRLEVBQUUsRUFBRTtnQkFDakIsSUFBSSxDQUFDLFlBQVksbUNBQ1osSUFBSSxDQUFDLFlBQVksR0FDakIsQ0FBQyxDQUFBLEdBQUcsYUFBSCxHQUFHLHVCQUFILEdBQUcsQ0FBRSxXQUFXLEtBQUksRUFBRSxDQUFDLENBQzVCLENBQUM7Z0JBQ0YsSUFBSSxDQUFDLGlDQUFpQyxDQUFDLEdBQUcsYUFBSCxHQUFHLHVCQUFILEdBQUcsQ0FBRSxhQUFhLENBQUMsQ0FBQztnQkFDM0QsSUFBSSxDQUFDLG9CQUFvQixFQUFFLENBQUM7Z0JBQzVCLElBQUksQ0FBQyw4QkFBOEIsRUFBRSxDQUFDO2dCQUN0QyxJQUFJLENBQUMsK0JBQStCLEVBQUUsQ0FBQztnQkFDdkMsSUFBSSxDQUFDLGVBQWUsQ0FBQyxJQUFJLENBQUMsRUFBRSxPQUFPLEVBQUUsSUFBSSxDQUFDLFdBQVcsQ0FBQyxzREFBc0QsQ0FBQyxFQUFFLElBQUksRUFBRSxTQUFTLEVBQUUsQ0FBQyxDQUFDO1lBQ3BJLENBQUM7WUFDRCxLQUFLLEVBQUUsQ0FBQyxLQUFVLEVBQUUsRUFBRTtnQkFDcEIsSUFBSSxDQUFDLFVBQVUsR0FBRyxLQUFLLENBQUM7Z0JBQ3hCLE9BQU8sQ0FBQyxLQUFLLENBQUMsS0FBSyxDQUFDLENBQUM7Z0JBQ3JCLElBQUksQ0FBQyxlQUFlLENBQUMsSUFBSSxDQUFDLEVBQUUsT0FBTyxFQUFFLElBQUksQ0FBQyxXQUFXLENBQUMsd0NBQXdDLENBQUMsRUFBRSxJQUFJLEVBQUUsT0FBTyxFQUFFLENBQUMsQ0FBQztnQkFDbEgsTUFBTSxFQUFFLEtBQUssRUFBRSxNQUFNLEVBQUUsT0FBTyxFQUFFLENBQUE7WUFDbEMsQ0FBQztTQUNGLENBQUMsQ0FBQztJQUNMLENBQUM7SUFFTyxvQkFBb0IsQ0FBQyxVQUF1Qjs7UUFDbEQsT0FBTyxDQUFBLE1BQUEsTUFBQSxVQUFVLGFBQVYsVUFBVSx1QkFBVixVQUFVLENBQUUsaUJBQWlCLDBDQUFFLElBQUksQ0FBQyxDQUFDLENBQUMsRUFBRSxDQUFDLENBQUMsQ0FBQyxTQUFTLEtBQUssSUFBSSxDQUFDLHFCQUFxQixDQUFDLDBDQUFFLFdBQVcsTUFBSyxHQUFHLENBQUM7SUFDbkgsQ0FBQztJQUVELG9GQUFvRjtJQUM1RSxZQUFZLENBQUMsUUFBNkI7O1FBQ2hELE1BQU0sT0FBTyxHQUFHLE1BQUEsUUFBUSxhQUFSLFFBQVEsdUJBQVIsUUFBUSxDQUFFLFFBQVEsbUNBQUksQ0FBQyxDQUFDO1FBQ3hDLGtGQUFrRjtRQUNsRixJQUFJLENBQUMsZUFBZSxHQUFHLE9BQU8sR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLElBQUksQ0FBQyxLQUFLLENBQUMsQ0FBQyxPQUFPLEdBQUcsRUFBRSxDQUFDLEdBQUcsR0FBRyxDQUFDLEdBQUcsR0FBRyxDQUFDLENBQUMsQ0FBQyxJQUFJLENBQUM7SUFDckYsQ0FBQztJQUVELDBGQUEwRjtJQUMxRixpQkFBaUIsQ0FBQyxLQUFvQjtRQUNwQyxJQUFJLENBQUMsR0FBRyxFQUFFLEdBQUcsRUFBRSxHQUFHLEVBQUUsR0FBRyxDQUFDLENBQUMsUUFBUSxDQUFDLEtBQUssQ0FBQyxHQUFHLENBQUMsRUFBRTtZQUM1QyxLQUFLLENBQUMsY0FBYyxFQUFFLENBQUM7U0FDeEI7SUFDSCxDQUFDO0lBRUQsMEZBQTBGO0lBQzFGLElBQVksZUFBZTtRQUN6QixPQUFPLElBQUksQ0FBQyxlQUFlLENBQUMsQ0FBQyxDQUFDLElBQUksQ0FBQyxLQUFLLENBQUMsSUFBSSxDQUFDLGVBQWUsR0FBRyxFQUFFLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDO0lBQzFFLENBQUM7SUFFRDs7OztPQUlHO0lBQ0ssc0JBQXNCOztRQUM1QixJQUFJLENBQUMsSUFBSSxDQUFDLG9CQUFvQixFQUFFO1lBQzlCLE9BQU8sU0FBUyxDQUFDO1NBQ2xCO1FBQ0QsTUFBTSxJQUFJLEdBQUcsTUFBQSxNQUFBLE1BQUEsTUFBQSxJQUFJLENBQUMsaUJBQWlCLDBDQUFFLFVBQVUsMENBQUUsaUJBQWlCLG1DQUFJLE1BQUEsSUFBSSxDQUFDLG9CQUFvQiwwQ0FBRSxpQkFBaUIsbUNBQUksRUFBRSxDQUFDO1FBQ3pILE1BQU0sT0FBTyxHQUFhLElBQUksQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxtQkFBTSxDQUFDLEVBQUcsQ0FBQyxDQUFDO1FBQ3BELE1BQU0sS0FBSyxHQUFHLElBQUksQ0FBQyxpQkFBaUIsQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUM7UUFDakQsTUFBTSxRQUFRLEdBQUcsT0FBTyxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsRUFBRSxDQUFDLENBQUMsQ0FBQyxTQUFTLEtBQUssSUFBSSxDQUFDLHFCQUFxQixDQUFDLENBQUM7UUFDL0UsSUFBSSxRQUFRLEVBQUU7WUFDWixRQUFRLENBQUMsV0FBVyxHQUFHLEtBQUssQ0FBQztTQUM5QjthQUFNO1lBQ0wsT0FBTyxDQUFDLElBQUksQ0FBQyxFQUFFLFNBQVMsRUFBRSxJQUFJLENBQUMscUJBQXFCLEVBQUUsV0FBVyxFQUFFLEtBQUssRUFBRSxDQUFDLENBQUM7U0FDN0U7UUFDRCxPQUFPLE9BQU8sQ0FBQztJQUNqQixDQUFDO0lBRUQsK0JBQStCLENBQUMsY0FBdUI7UUFDckQsTUFBTSxPQUFPLG1CQUNYLGFBQWEsRUFBRSxJQUFJLENBQUMsd0JBQXdCLENBQUMsd0JBQXdCLENBQUMsSUFBSSxDQUFDLDJCQUEyQixFQUFFLElBQUksQ0FBQyxZQUFZLENBQUMsRUFDMUgsVUFBVSxFQUFFLElBQUksQ0FBQyx3QkFBd0IsQ0FBQyxxQkFBcUIsQ0FBQyxJQUFJLENBQUMsWUFBWSxFQUFFLElBQUksQ0FBQywyQkFBMkIsRUFBRSxJQUFJLENBQUMsc0JBQXNCLEVBQUUsQ0FBQyxJQUNoSixJQUFJLENBQUMsd0JBQXdCLENBQUMsa0JBQWtCLENBQUMsSUFBSSxDQUFDLGFBQWEsRUFBRSxJQUFJLENBQUMsb0JBQW9CLEVBQUUsSUFBSSxDQUFDLGVBQWUsQ0FBQyxDQUN6SCxDQUFBO1FBQ0QsSUFBSSxDQUFDLHNCQUFzQixDQUFDLCtCQUErQixDQUFDLE9BQU8sQ0FBQyxDQUFDLFNBQVMsQ0FBQztZQUM3RSxJQUFJLEVBQUUsQ0FBQyxHQUFRLEVBQUUsRUFBRTtnQkFDakIsSUFBSSxDQUFDLGlDQUFpQyxDQUFDLEdBQUcsYUFBSCxHQUFHLHVCQUFILEdBQUcsQ0FBRSxhQUFhLENBQUMsQ0FBQztnQkFDM0QsSUFBSSxDQUFDLG9CQUFvQixFQUFFLENBQUM7Z0JBQzVCLElBQUksQ0FBQyw4QkFBOEIsRUFBRSxDQUFDO2dCQUN0QyxJQUFJLGNBQWMsRUFBRTtvQkFDbEIsSUFBSSxDQUFDLGVBQWUsQ0FBQyxJQUFJLENBQUMsRUFBRSxPQUFPLEVBQUUsY0FBYyxFQUFFLElBQUksRUFBRSxTQUFTLEVBQUUsQ0FBQyxDQUFDO2lCQUN6RTtZQUNILENBQUM7WUFDRCxLQUFLLEVBQUUsS0FBSyxDQUFDLEVBQUU7Z0JBQ2IsSUFBSSxDQUFDLGVBQWUsQ0FBQyxJQUFJLENBQUMsRUFBRSxPQUFPLEVBQUUsSUFBSSxDQUFDLFdBQVcsQ0FBQyx3Q0FBd0MsQ0FBQyxFQUFFLElBQUksRUFBRSxPQUFPLEVBQUUsQ0FBQyxDQUFDO2dCQUNsSCxNQUFNLEVBQUUsS0FBSyxFQUFFLE1BQU0sRUFBRSxPQUFPLEVBQUUsT0FBTyxFQUFFLENBQUE7WUFDM0MsQ0FBQztTQUNGLENBQUMsQ0FBQTtJQUNKLENBQUM7SUFFRCxXQUFXOztRQUNULElBQUksSUFBSSxDQUFDLFlBQVk7WUFBRSxPQUFPO1FBQzlCLElBQUksQ0FBQyxZQUFZLEdBQUcsSUFBSSxDQUFDO1FBQ3pCLE1BQU0sT0FBTyxtQkFDWCxhQUFhLEVBQUUsSUFBSSxDQUFDLHdCQUF3QixDQUFDLHdCQUF3QixDQUFDLElBQUksQ0FBQywyQkFBMkIsRUFBRSxJQUFJLENBQUMsWUFBWSxDQUFDLEVBQzFILFVBQVUsRUFBRSxJQUFJLENBQUMsd0JBQXdCLENBQUMscUJBQXFCLENBQUMsSUFBSSxDQUFDLFlBQVksRUFBRSxJQUFJLENBQUMsMkJBQTJCLEVBQUUsSUFBSSxDQUFDLHNCQUFzQixFQUFFLENBQUMsSUFDaEosSUFBSSxDQUFDLHdCQUF3QixDQUFDLGtCQUFrQixDQUFDLElBQUksQ0FBQyxhQUFhLEVBQUUsSUFBSSxDQUFDLG9CQUFvQixFQUFFLElBQUksQ0FBQyxlQUFlLENBQUMsQ0FDekgsQ0FBQTtRQUNELElBQUksQ0FBQyxNQUFBLE1BQUEsTUFBQSxPQUFPLGFBQVAsT0FBTyx1QkFBUCxPQUFPLENBQUUsYUFBYSwwQ0FBRSx3QkFBd0IsMENBQUUsTUFBTSxtQ0FBSSxDQUFDLENBQUMsR0FBRyxJQUFJLENBQUMsdUJBQXVCLEVBQUU7WUFDbEcsSUFBSSxDQUFDLGVBQWUsQ0FBQyxJQUFJLENBQUMsRUFBRSxPQUFPLEVBQUUsTUFBQSxJQUFJLENBQUMsV0FBVyxDQUFDLDBEQUEwRCxDQUFDLDBDQUFFLE9BQU8sQ0FBQyxRQUFRLEVBQUUsTUFBTSxDQUFDLElBQUksQ0FBQyx1QkFBdUIsQ0FBQyxDQUFDLEVBQUUsSUFBSSxFQUFFLE1BQU0sRUFBRSxDQUFDLENBQUM7WUFDNUwsSUFBSSxDQUFDLFlBQVksR0FBRyxLQUFLLENBQUM7WUFDMUIsT0FBTztTQUNSO1FBQ0QsSUFBSSxDQUFDLElBQUksQ0FBQyxZQUFZLEVBQUU7WUFDdEIsMEZBQTBGO1lBQzFGLElBQUksQ0FBQyxZQUFZLEdBQUcsS0FBSyxDQUFDO1lBQzFCLElBQUksQ0FBQywwQkFBMEIsQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLG9CQUFvQixDQUFDLENBQUM7WUFDaEUsT0FBTztTQUNSO1FBQ0QsSUFBSSxDQUFDLHNCQUFzQixDQUFDLCtCQUErQixDQUFDLE9BQU8sQ0FBQyxDQUFDLFNBQVMsQ0FBQztZQUM3RSxJQUFJLEVBQUUsQ0FBQyxHQUFRLEVBQUUsRUFBRTtnQkFDakIsSUFBSSxDQUFDLGlDQUFpQyxDQUFDLEdBQUcsYUFBSCxHQUFHLHVCQUFILEdBQUcsQ0FBRSxhQUFhLENBQUMsQ0FBQztnQkFDM0QsSUFBSSxDQUFDLElBQUksQ0FBQyxvQkFBb0IsRUFBRTtvQkFDOUIsSUFBSSxDQUFDLHdCQUF3QixFQUFFLENBQUM7aUJBQ2pDO3FCQUFNO29CQUNMLElBQUksQ0FBQyxZQUFZLEdBQUcsS0FBSyxDQUFDO29CQUMxQixJQUFJLENBQUMsMEJBQTBCLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxvQkFBb0IsQ0FBQyxDQUFDO2lCQUNqRTtZQUNILENBQUM7WUFDRCxLQUFLLEVBQUUsS0FBSyxDQUFDLEVBQUU7Z0JBQ2IsSUFBSSxDQUFDLFlBQVksR0FBRyxLQUFLLENBQUM7Z0JBQzFCLElBQUksQ0FBQyxlQUFlLENBQUMsSUFBSSxDQUFDLEVBQUUsT0FBTyxFQUFFLElBQUksQ0FBQyxXQUFXLENBQUMsd0NBQXdDLENBQUMsRUFBRSxJQUFJLEVBQUUsT0FBTyxFQUFFLENBQUMsQ0FBQztnQkFDbEgsTUFBTSxFQUFFLEtBQUssRUFBRSxNQUFNLEVBQUUsT0FBTyxFQUFFLE9BQU8sRUFBRSxDQUFBO1lBQzNDLENBQUM7U0FDRixDQUFDLENBQUE7SUFDSixDQUFDO0lBRUQsd0JBQXdCO1FBQ3RCLE1BQU0sT0FBTyxHQUFHLElBQUksQ0FBQyx3QkFBd0IsQ0FBQyw2QkFBNkIsQ0FBQyxJQUFJLENBQUMsWUFBWSxFQUFFLElBQUksQ0FBQyw0QkFBNEIsRUFBRSxJQUFJLENBQUMsYUFBYSxDQUFDLENBQUMsQ0FBQyxJQUFJLENBQUMsZUFBZSxDQUFDLENBQUMsQ0FBQyxTQUFTLENBQUMsQ0FBQztRQUN6TCxJQUFJLENBQUMsc0JBQXNCLENBQUMsd0JBQXdCLENBQUMsT0FBTyxDQUFDLENBQUMsU0FBUyxDQUFDO1lBQ3RFLElBQUksRUFBRSxDQUFDLEdBQVEsRUFBRSxFQUFFO2dCQUNqQixJQUFJLENBQUMsb0JBQW9CLEdBQUcsR0FBRyxDQUFDO2dCQUNoQyxJQUFJLENBQUMsWUFBWSxHQUFHLEtBQUssQ0FBQztnQkFDMUIsSUFBSSxDQUFDLDBCQUEwQixDQUFDLElBQUksQ0FBQyxHQUFHLENBQUMsQ0FBQztnQkFDMUMsc0lBQXNJO1lBQ3hJLENBQUM7WUFDRCxLQUFLLEVBQUUsS0FBSyxDQUFDLEVBQUU7Z0JBQ2IsSUFBSSxDQUFDLFlBQVksR0FBRyxLQUFLLENBQUM7Z0JBQzFCLElBQUksQ0FBQyxlQUFlLENBQUMsSUFBSSxDQUFDLEVBQUUsT0FBTyxFQUFFLElBQUksQ0FBQyxXQUFXLENBQUMsd0NBQXdDLENBQUMsRUFBRSxJQUFJLEVBQUUsT0FBTyxFQUFFLENBQUMsQ0FBQztnQkFDbEgsTUFBTSxFQUFFLEtBQUssRUFBRSxNQUFNLEVBQUUsTUFBTSxFQUFFLE9BQU8sRUFBRSxDQUFBO1lBQzFDLENBQUM7U0FDRixDQUFDLENBQUE7SUFDSixDQUFDO0lBRUQsY0FBYztRQUNaLElBQUksSUFBSSxDQUFDLFlBQVksRUFBRTtZQUNyQixJQUFJLENBQUMsVUFBVSxHQUFHLElBQUksQ0FBQztZQUN2QixJQUFJLENBQUMsa0JBQWtCLEVBQUUsQ0FBQztTQUMzQjthQUFNO1lBQ0wsb0RBQW9EO1lBQ3BELElBQUksQ0FBQywyQkFBMkIsR0FBRyxFQUFFLEVBQUUsRUFBRSxDQUFDLEVBQUUsd0JBQXdCLEVBQUUsRUFBRSxFQUFFLENBQUM7U0FDNUU7SUFDSCxDQUFDO0lBRUQsbUJBQW1CLENBQUMsVUFBbUI7O1FBQ3JDLE9BQU8sTUFBQSxJQUFJLENBQUMsWUFBWSwwQ0FBRyxVQUFVLElBQUksQ0FBQyxDQUFDLENBQUMsQ0FBQztJQUMvQyxDQUFDO0lBRUQsaUNBQWlDLENBQUMsT0FBWTs7UUFDNUMsTUFBTSxZQUFZLEdBQUcsTUFBQSxNQUFBLE1BQUEsSUFBSSxDQUFDLDJCQUEyQiwwQ0FBRSx3QkFBd0IsMENBQzNFLE1BQU0sQ0FBQyxDQUFDLENBQU0sRUFBRSxFQUFFLENBQUMsQ0FBQyxDQUFDLFVBQVUsQ0FBQywwQ0FDaEMsR0FBRyxDQUFDLENBQUMsQ0FBTSxFQUFFLEdBQVcsRUFBRSxFQUFFLGVBQUMsT0FBQSxDQUFDLENBQUMsRUFBRSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsRUFBRSxDQUFDLFFBQVEsRUFBRSxDQUFDLENBQUMsQ0FBQyxHQUFHLEdBQUcsSUFBSSxNQUFBLE1BQUEsQ0FBQyxDQUFDLE9BQU8sMENBQUcsQ0FBQyxDQUFDLDBDQUFFLElBQUksRUFBRSxDQUFBLEVBQUEsQ0FBQyxDQUFDO1FBRTVGLElBQUksQ0FBQywyQkFBMkIsR0FBRyxPQUFPLElBQUksRUFBRSxFQUFFLEVBQUUsQ0FBQyxFQUFFLHdCQUF3QixFQUFFLEVBQUUsRUFBRSxDQUFDO1FBQ3RGLElBQUksQ0FBQyxrQ0FBa0MsRUFBRSxDQUFDO1FBRTFDLElBQUksWUFBWSxhQUFaLFlBQVksdUJBQVosWUFBWSxDQUFFLE1BQU0sRUFBRTtZQUN4QixNQUFBLE1BQUEsSUFBSSxDQUFDLDJCQUEyQiwwQ0FBRSx3QkFBd0IsMENBQUUsT0FBTyxDQUFDLENBQUMsQ0FBTSxFQUFFLEdBQVcsRUFBRSxFQUFFOztnQkFDMUYsTUFBTSxHQUFHLEdBQUcsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxRQUFRLEVBQUUsQ0FBQyxDQUFDLENBQUMsR0FBRyxHQUFHLElBQUksTUFBQSxNQUFBLENBQUMsQ0FBQyxPQUFPLDBDQUFHLENBQUMsQ0FBQywwQ0FBRSxJQUFJLEVBQUUsQ0FBQztnQkFDdEUsSUFBSSxZQUFZLENBQUMsUUFBUSxDQUFDLEdBQUcsQ0FBQyxFQUFFO29CQUM5QixDQUFDLENBQUMsVUFBVSxHQUFHLElBQUksQ0FBQztpQkFDckI7WUFDSCxDQUFDLENBQUMsQ0FBQztTQUNKO0lBQ0gsQ0FBQztJQUVELGtDQUFrQzs7UUFDaEMsSUFBSSxDQUFDLDJCQUEyQixDQUFDLHdCQUF3QixHQUFHLFdBQVcsQ0FDckUsTUFBQSxNQUFBLElBQUksQ0FBQywyQkFBMkIsMENBQUUsd0JBQXdCLDBDQUFFLE1BQU0sQ0FBQyxDQUFDLE9BQVksRUFBRSxFQUFFLENBQUMsT0FBTyxDQUFDLFFBQVEsS0FBSyxLQUFLLENBQUMsQ0FDakgsQ0FBQztRQUVGLE1BQUEsTUFBQSxJQUFJLENBQUMsMkJBQTJCLDBDQUFFLHdCQUF3QiwwQ0FBRSxPQUFPLENBQUMsQ0FBQyxPQUFZLEVBQUUsRUFBRTs7WUFDbkYsT0FBTyxDQUFDLG9CQUFvQixHQUFHLFdBQVcsQ0FDeEMsTUFBQSxPQUFPLENBQUMsb0JBQW9CLDBDQUFFLE1BQU0sQ0FBQyxDQUFDLFFBQWEsRUFBRSxFQUFFLENBQUMsUUFBUSxDQUFDLFFBQVEsS0FBSyxLQUFLLENBQUMsQ0FDckYsQ0FBQztRQUNKLENBQUMsQ0FBQyxDQUFDO1FBRUgsSUFBSSxJQUFJLENBQUMsWUFBWSxFQUFFO1lBQ3JCLE1BQU0sQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLFlBQVksQ0FBQyxDQUFDLE9BQU8sQ0FBQyxHQUFHLENBQUMsRUFBRTtnQkFDM0MsTUFBTSxRQUFRLEdBQUcsSUFBSSxDQUFDLFlBQVksQ0FBQyxHQUFVLENBQUMsQ0FBQztnQkFDL0MsSUFBSSxRQUFRLGFBQVIsUUFBUSx1QkFBUixRQUFRLENBQUUsa0JBQWtCLEVBQUU7b0JBQ2hDLFFBQVEsQ0FBQyxrQkFBa0IsR0FBRyxXQUFXLENBQ3ZDLFFBQVEsQ0FBQyxrQkFBa0IsQ0FBQyxNQUFNLENBQUMsQ0FBQyxHQUFRLEVBQUUsRUFBRSxDQUFDLEdBQUcsQ0FBQyxRQUFRLEtBQUssS0FBSyxDQUFDLENBQ3pFLENBQUM7aUJBQ0g7WUFDSCxDQUFDLENBQUMsQ0FBQztTQUNKO0lBQ0gsQ0FBQztJQUVELGVBQWUsQ0FBQyxJQUF3QjtRQUN0QyxJQUFJLENBQUMsSUFBSTtZQUFFLE9BQU8sRUFBRSxDQUFDO1FBQ3JCLE9BQU8sSUFBSSxDQUFDLFdBQVcsRUFBRSxDQUFDLEtBQUssQ0FBQyxHQUFHLENBQUMsQ0FBQyxHQUFHLENBQUMsSUFBSSxDQUFDLEVBQUUsQ0FBQyxJQUFJLENBQUMsTUFBTSxDQUFDLENBQUMsQ0FBQyxDQUFDLFdBQVcsRUFBRSxHQUFHLElBQUksQ0FBQyxLQUFLLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxJQUFJLENBQUMsR0FBRyxDQUFDLENBQUM7SUFDM0csQ0FBQztJQUVELGFBQWE7UUFDWCxNQUFNLE1BQU0sR0FBRztZQUNiLG9CQUFvQixFQUFFLEtBQUs7WUFDM0IsSUFBSSxFQUFFLENBQUM7WUFDUCxJQUFJLEVBQUUsRUFBRTtZQUNSLFNBQVMsRUFBRSxLQUFLO1NBQ2pCLENBQUE7UUFDRCxJQUFJLENBQUMsc0JBQXNCLENBQUMsZ0JBQWdCLENBQUMsK0JBQStCLEVBQUUsTUFBTSxDQUFDLENBQUMsU0FBUyxDQUFDO1lBQzlGLElBQUksRUFBRSxDQUFDLEdBQVEsRUFBRSxFQUFFO2dCQUNqQixJQUFJLENBQUMsVUFBVSxHQUFHLEdBQUcsYUFBSCxHQUFHLHVCQUFILEdBQUcsQ0FBRSxRQUFRLENBQUM7WUFDbEMsQ0FBQztZQUNELEtBQUssRUFBRSxDQUFDLEtBQVUsRUFBRSxFQUFFO2dCQUNwQixPQUFPLENBQUMsS0FBSyxDQUFDLEtBQUssQ0FBQyxDQUFDO2dCQUNyQixNQUFNLEVBQUUsS0FBSyxFQUFFLE1BQU0sRUFBRSxLQUFLLEVBQUUsT0FBTyxFQUFFLElBQUksQ0FBQyxZQUFZLEVBQUUsQ0FBQTtZQUM1RCxDQUFDO1NBQ0YsQ0FBQyxDQUFBO0lBQ0osQ0FBQztJQUVELGdCQUFnQixDQUFDLEtBQWEsRUFBRSxPQUFZO1FBQzFDLE9BQU8sQ0FBQSxPQUFPLGFBQVAsT0FBTyx1QkFBUCxPQUFPLENBQUUsRUFBRSxLQUFJLElBQUksQ0FBQyxDQUFDLENBQUMsR0FBRyxHQUFHLE9BQU8sQ0FBQyxFQUFFLENBQUMsQ0FBQyxDQUFDLEdBQUcsR0FBRyxLQUFLLENBQUM7SUFDOUQsQ0FBQztJQUVELHNCQUFzQixDQUFDLEtBQWEsRUFBRSxFQUFPO1FBQzNDLElBQUksQ0FBQSxFQUFFLGFBQUYsRUFBRSx1QkFBRixFQUFFLENBQUUsVUFBVSxLQUFJLElBQUk7WUFBRSxPQUFPLEdBQUcsR0FBRyxFQUFFLENBQUMsVUFBVSxDQUFDO1FBQ3ZELElBQUksQ0FBQSxFQUFFLGFBQUYsRUFBRSx1QkFBRixFQUFFLENBQUUsRUFBRSxLQUFJLElBQUk7WUFBRSxPQUFPLEdBQUcsR0FBRyxFQUFFLENBQUMsRUFBRSxDQUFDO1FBQ3ZDLE9BQU8sR0FBRyxHQUFHLEtBQUssQ0FBQztJQUNyQixDQUFDO0lBRU8sMEJBQTBCOztRQUNoQyxNQUFNLEdBQUcsR0FBRyxJQUFJLEdBQUcsRUFBVSxDQUFDO1FBQzlCLE1BQUEsTUFBQSxJQUFJLENBQUMsMkJBQTJCLDBDQUFFLHdCQUF3QiwwQ0FBRSxPQUFPLENBQUMsT0FBTyxDQUFDLEVBQUU7O1lBQzVFLElBQUksT0FBTyxDQUFDLFFBQVEsS0FBSyxLQUFLO2dCQUFFLE9BQU87WUFDdkMsTUFBQSxPQUFPLENBQUMsb0JBQW9CLDBDQUFFLE9BQU8sQ0FBQyxFQUFFLENBQUMsRUFBRTs7Z0JBQ3pDLElBQUksRUFBRSxDQUFDLFFBQVEsS0FBSyxLQUFLO29CQUFFLE9BQU87Z0JBQ2xDLE1BQU0sR0FBRyxHQUFHLEVBQUUsQ0FBQyxVQUFVLEtBQUksTUFBQSxFQUFFLENBQUMsUUFBUSwwQ0FBRSxFQUFFLENBQUEsQ0FBQztnQkFDN0MsSUFBSSxHQUFHO29CQUFFLEdBQUcsQ0FBQyxHQUFHLENBQUMsR0FBRyxDQUFDLENBQUM7WUFDeEIsQ0FBQyxDQUFDLENBQUM7UUFDTCxDQUFDLENBQUMsQ0FBQztRQUNILE9BQU8sR0FBRyxDQUFDO0lBQ2IsQ0FBQztJQUVELHNCQUFzQixDQUFDLE9BQThCOztRQUNuRCxNQUFNLG1CQUFtQixHQUFHLElBQUksQ0FBQywwQkFBMEIsRUFBRSxDQUFDO1FBQzlELE1BQU0sTUFBTSxHQUFHLElBQUksQ0FBQyxrQkFBa0IsSUFBSTtZQUN4QyxNQUFNLEVBQUUsTUFBQSxJQUFJLENBQUMsb0JBQW9CLDBDQUFFLE1BQU07WUFDekMsTUFBTSxFQUFFLE1BQUEsSUFBSSxDQUFDLG9CQUFvQiwwQ0FBRSxNQUFNO1NBQzFDLENBQUM7UUFFRixNQUFNLFNBQVMsR0FBRyxJQUFJLENBQUMsTUFBTSxDQUFDLElBQUksQ0FBQywyQkFBMkIsRUFBRTtZQUM5RCxTQUFTLEVBQUUsS0FBSztZQUNoQixRQUFRLEVBQUUsRUFBRSxLQUFLLEVBQUUsR0FBRyxFQUFFO1lBQ3hCLFFBQVEsRUFBRSxNQUFNO1lBQ2hCLEtBQUssRUFBRSxPQUFPO1lBQ2QsTUFBTSxFQUFFLE9BQU87WUFDZixVQUFVLEVBQUUsQ0FBQyxtQkFBbUIsRUFBRSxvQ0FBb0MsQ0FBQztZQUN2RSxXQUFXLEVBQUUsSUFBSTtZQUNqQixJQUFJLEVBQUU7Z0JBQ0osa0JBQWtCLEVBQUUsTUFBTTtnQkFDMUIsbUJBQW1CO2dCQUNuQixXQUFXLEVBQUUsSUFBSSxDQUFDLFdBQVc7Z0JBQzdCLFdBQVcsRUFBRSxJQUFJLENBQUMsV0FBVztnQkFDN0IsYUFBYSxFQUFFLElBQUksQ0FBQyxhQUFhO2dCQUNqQyxpQkFBaUIsRUFBRSxNQUFBLE1BQUEsT0FBTyxhQUFQLE9BQU8sdUJBQVAsT0FBTyxDQUFFLE9BQU8sMENBQUcsQ0FBQyxDQUFDLDBDQUFFLElBQUk7YUFDL0M7U0FDRixDQUFDLENBQUM7UUFFSCxTQUFTLENBQUMsV0FBVyxFQUFFLENBQUMsU0FBUyxDQUFDLENBQUMsaUJBQXVDLEVBQUUsRUFBRTtZQUM1RSxJQUFJLGlCQUFpQixhQUFqQixpQkFBaUIsdUJBQWpCLGlCQUFpQixDQUFFLE1BQU0sRUFBRTtnQkFDN0IsSUFBSSxDQUFDLHdCQUF3QixDQUFDLE9BQU8sRUFBRSxpQkFBaUIsQ0FBQyxDQUFDO2FBQzNEO1FBQ0gsQ0FBQyxDQUFDLENBQUM7SUFDTCxDQUFDO0lBRU8sd0JBQXdCLENBQzlCLE9BQXlDLEVBQ3pDLFNBQStCO1FBRS9CLElBQUksQ0FBQyxJQUFJLENBQUMsMkJBQTJCLEVBQUU7WUFDckMsSUFBSSxDQUFDLDJCQUEyQixHQUFHLEVBQUUsRUFBRSxFQUFFLENBQUMsRUFBRSx3QkFBd0IsRUFBRSxFQUFFLEVBQUUsQ0FBQztTQUM1RTtRQUNELElBQUksQ0FBQyxJQUFJLENBQUMsMkJBQTJCLENBQUMsd0JBQXdCLEVBQUU7WUFDOUQsSUFBSSxDQUFDLDJCQUEyQixDQUFDLHdCQUF3QixHQUFHLEVBQUUsQ0FBQztTQUNoRTtRQUVELElBQUksQ0FBQyxPQUFPLEVBQUU7WUFDWixNQUFNLElBQUksR0FBRyxJQUFJLENBQUMsMkJBQTJCLENBQUMsd0JBQXdCLENBQUM7WUFDdkUsTUFBTSxTQUFTLEdBQUcsSUFBSSxDQUFDLE1BQU0sQ0FBQyxDQUFDLENBQUMsQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLE1BQU0sR0FBRyxDQUFDLENBQUMsQ0FBQyxPQUFPLElBQUksQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQztZQUN6RSxPQUFPLEdBQUcsSUFBSSxDQUFDLHdCQUF3QixDQUFDLGdCQUFnQixDQUFDLFNBQVMsR0FBRyxDQUFDLENBQUMsQ0FBQztZQUN4RSxJQUFJLENBQUMsMkJBQTJCLENBQUMsd0JBQXdCLENBQUMsSUFBSSxDQUFDLE9BQU8sQ0FBQyxDQUFDO1NBQ3pFO1FBRUQsSUFBSSxDQUFDLE9BQU8sQ0FBQyxvQkFBb0IsRUFBRTtZQUNqQyxPQUFPLENBQUMsb0JBQW9CLEdBQUcsRUFBRSxDQUFDO1NBQ25DO1FBRUQsU0FBUyxDQUFDLE9BQU8sQ0FBQyxRQUFRLENBQUMsRUFBRTs7WUFDM0IsTUFBTSxhQUFhLEdBQUcsYUFBYSxDQUFDLFFBQVEsRUFBRSxNQUFNLENBQUMsQ0FBQztZQUN0RCxJQUFJLGFBQWEsQ0FBQyxFQUFFLEVBQUU7Z0JBQ3BCLElBQUksQ0FBQyxZQUFZLENBQUMsYUFBYSxDQUFDLEVBQUUsQ0FBQyxHQUFHLGFBQWEsQ0FBQzthQUNyRDtZQUNELE1BQU0sZUFBZSxHQUFHLElBQUksQ0FBQyx3QkFBd0IsQ0FBQyx1QkFBdUIsQ0FBQyxhQUFhLENBQUMsQ0FBQztZQUM3RixlQUFlLENBQUMsT0FBTyxHQUFHLENBQUMsQ0FBQSxNQUFBLE9BQVEsQ0FBQyxvQkFBb0IsMENBQUUsTUFBTSxLQUFJLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQztZQUMzRSxNQUFBLE9BQVEsQ0FBQyxvQkFBb0IsMENBQUUsSUFBSSxDQUFDLGVBQWUsQ0FBQyxDQUFDO1FBQ3ZELENBQUMsQ0FBQyxDQUFDO1FBRUgsTUFBTSxVQUFVLEdBQUcsSUFBSSxDQUFDLFdBQVcsQ0FBQyxxREFBcUQsQ0FBQyxJQUFJLGlDQUFpQyxDQUFDO1FBRWhJLElBQUksSUFBSSxDQUFDLFlBQVksRUFBRTtZQUNyQixJQUFJLENBQUMsK0JBQStCLENBQUMsVUFBVSxDQUFDLENBQUM7U0FDbEQ7YUFBTTtZQUNMLElBQUksQ0FBQyx3Q0FBd0MsQ0FBQyxVQUFVLENBQUMsQ0FBQztTQUMzRDtJQUNILENBQUM7SUFFTyx3Q0FBd0MsQ0FBQyxjQUF1QjtRQUN0RSxNQUFNLE9BQU8sbUJBQ1gsYUFBYSxFQUFFLElBQUksQ0FBQyx3QkFBd0IsQ0FBQyx3QkFBd0IsQ0FBQyxJQUFJLENBQUMsMkJBQTJCLEVBQUUsSUFBSSxDQUFDLFlBQVksQ0FBQyxFQUMxSCxVQUFVLEVBQUUsSUFBSSxDQUFDLHdCQUF3QixDQUFDLHFCQUFxQixDQUFDLElBQUksQ0FBQyxZQUFZLEVBQUUsSUFBSSxDQUFDLDJCQUEyQixFQUFFLElBQUksQ0FBQyxzQkFBc0IsRUFBRSxDQUFDLElBQ2hKLElBQUksQ0FBQyx3QkFBd0IsQ0FBQyxrQkFBa0IsQ0FBQyxJQUFJLENBQUMsYUFBYSxFQUFFLElBQUksQ0FBQyxvQkFBb0IsRUFBRSxJQUFJLENBQUMsZUFBZSxDQUFDLENBQ3pILENBQUM7UUFDRixJQUFJLENBQUMsc0JBQXNCLENBQUMsZ0NBQWdDLENBQUMsT0FBTyxDQUFDLENBQUMsU0FBUyxDQUFDO1lBQzlFLElBQUksRUFBRSxDQUFDLEdBQVEsRUFBRSxFQUFFOztnQkFDakIsSUFBSSxNQUFBLEdBQUcsYUFBSCxHQUFHLHVCQUFILEdBQUcsQ0FBRSxVQUFVLDBDQUFFLEVBQUUsRUFBRTtvQkFDdkIsSUFBSSxDQUFDLFlBQVksR0FBRyxHQUFHLENBQUMsVUFBVSxDQUFDLEVBQUUsQ0FBQztvQkFDdEMsSUFBSSxDQUFDLGtCQUFrQixDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsWUFBWSxDQUFDLENBQUM7aUJBQ2pEO2dCQUNELElBQUksQ0FBQyxZQUFZLG1DQUNaLElBQUksQ0FBQyxZQUFZLEdBQ2pCLENBQUMsQ0FBQSxHQUFHLGFBQUgsR0FBRyx1QkFBSCxHQUFHLENBQUUsV0FBVyxLQUFJLEVBQUUsQ0FBQyxDQUM1QixDQUFDO2dCQUNGLElBQUksQ0FBQyxpQ0FBaUMsQ0FBQyxHQUFHLGFBQUgsR0FBRyx1QkFBSCxHQUFHLENBQUUsYUFBYSxDQUFDLENBQUM7Z0JBQzNELElBQUksQ0FBQyxvQkFBb0IsRUFBRSxDQUFDO2dCQUM1QixJQUFJLENBQUMsOEJBQThCLEVBQUUsQ0FBQztnQkFDdEMsSUFBSSxjQUFjLEVBQUU7b0JBQ2xCLElBQUksQ0FBQyxlQUFlLENBQUMsSUFBSSxDQUFDLEVBQUUsT0FBTyxFQUFFLGNBQWMsRUFBRSxJQUFJLEVBQUUsU0FBUyxFQUFFLENBQUMsQ0FBQztpQkFDekU7WUFDSCxDQUFDO1lBQ0QsS0FBSyxFQUFFLENBQUMsS0FBVSxFQUFFLEVBQUU7Z0JBQ3BCLElBQUksQ0FBQyxlQUFlLENBQUMsSUFBSSxDQUFDLEVBQUUsT0FBTyxFQUFFLElBQUksQ0FBQyxXQUFXLENBQUMsd0NBQXdDLENBQUMsSUFBSSxtQ0FBbUMsRUFBRSxJQUFJLEVBQUUsT0FBTyxFQUFFLENBQUMsQ0FBQztZQUMzSixDQUFDO1NBQ0YsQ0FBQyxDQUFDO0lBQ0wsQ0FBQzs7c0hBNXRCVSx3QkFBd0I7MEdBQXhCLHdCQUF3Qiw2NUJDdEJyQyw2cXJCQW9QYzs0RkQ5TkQsd0JBQXdCO2tCQU5wQyxTQUFTO21CQUFDO29CQUNULFFBQVEsRUFBRSxzQkFBc0I7b0JBQ2hDLFdBQVcsRUFBRSxtQ0FBbUM7b0JBQ2hELFNBQVMsRUFBRSxDQUFDLG1DQUFtQyxDQUFDO2lCQUNqRDs0S0FHVSxXQUFXO3NCQUFuQixLQUFLO2dCQUNHLFdBQVc7c0JBQW5CLEtBQUs7Z0JBQ0csYUFBYTtzQkFBckIsS0FBSztnQkFDRyxVQUFVO3NCQUFsQixLQUFLO2dCQUNHLFdBQVc7c0JBQW5CLEtBQUs7Z0JBQ0csWUFBWTtzQkFBcEIsS0FBSztnQkFDRyxvQkFBb0I7c0JBQTVCLEtBQUs7Z0JBQ0csb0JBQW9CO3NCQUE1QixLQUFLO2dCQUNHLDRCQUE0QjtzQkFBcEMsS0FBSztnQkFDRyw2QkFBNkI7c0JBQXJDLEtBQUs7Z0JBQ0csaUJBQWlCO3NCQUF6QixLQUFLO2dCQUNHLHVCQUF1QjtzQkFBL0IsS0FBSztnQkFDRyxpQkFBaUI7c0JBQXpCLEtBQUs7Z0JBQ0csb0JBQW9CO3NCQUE1QixLQUFLO2dCQUNHLGFBQWE7c0JBQXJCLEtBQUs7Z0JBQ0csNEJBQTRCO3NCQUFwQyxLQUFLO2dCQUNHLGtCQUFrQjtzQkFBMUIsS0FBSztnQkFFSSxrQkFBa0I7c0JBQTNCLE1BQU07Z0JBQ0csMEJBQTBCO3NCQUFuQyxNQUFNO2dCQUNHLGVBQWU7c0JBQXhCLE1BQU0iLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBDb21wb25lbnQsIEV2ZW50RW1pdHRlciwgSW5wdXQsIE9uSW5pdCwgT3V0cHV0IH0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XHJcbmltcG9ydCB7IGZvcmtKb2luLCBvZiB9IGZyb20gJ3J4anMnO1xyXG5pbXBvcnQgeyBjYXRjaEVycm9yIH0gZnJvbSAncnhqcy9vcGVyYXRvcnMnO1xyXG5pbXBvcnQgeyBDZGtEcmFnRHJvcCwgbW92ZUl0ZW1JbkFycmF5IH0gZnJvbSAnQGFuZ3VsYXIvY2RrL2RyYWctZHJvcCc7XHJcbmltcG9ydCB7IE1hdERpYWxvZyB9IGZyb20gJ0Bhbmd1bGFyL21hdGVyaWFsL2RpYWxvZyc7XHJcbmltcG9ydCB7IEFkZEVkaXRTZWN0aW9uSW50cm9kdWN0aW9uQ29tcG9uZW50IH0gZnJvbSAnLi9jb21wb25lbnRzL2FkZC1lZGl0LXNlY3Rpb24taW50cm9kdWN0aW9uL2FkZC1lZGl0LXNlY3Rpb24taW50cm9kdWN0aW9uLmNvbXBvbmVudCc7XHJcbmltcG9ydCB7IEFzc2Vzc21lbnRCdWlsZGVyQ29tcG9uZW50IH0gZnJvbSAnLi9jb21wb25lbnRzL2Fzc2Vzc21lbnQtYnVpbGRlci9hc3Nlc3NtZW50LWJ1aWxkZXIuY29tcG9uZW50JztcclxuaW1wb3J0IHsgUXVlc3Rpb25CYW5rUGlja2VyQ29tcG9uZW50IH0gZnJvbSAnLi9jb21wb25lbnRzL3F1ZXN0aW9uLWJhbmstcGlja2VyL3F1ZXN0aW9uLWJhbmstcGlja2VyLmNvbXBvbmVudCc7XHJcbmltcG9ydCB7IENvbmZpcm1hdGlvbkRpYWxvZ0NvbXBvbmVudCB9IGZyb20gJy4uLy4uL3NoYXJlZC9jb21wb25lbnRzL2NvbmZpcm1hdGlvbi1kaWFsb2cvY29uZmlybWF0aW9uLWRpYWxvZy5jb21wb25lbnQnO1xyXG5pbXBvcnQgeyBRdWVzdGlvblR5cGUsIEFzc2Vzc21lbnQsIFJlZkRhdGEsIEFzc2Vzc21lbnRDb250ZXh0RFRPLCBBc3Nlc3NtZW50SW5zdGFuY2UsIENvbmZpZywgUXVlc3Rpb25CYW5rQ29uZmlnIH0gZnJvbSAnLi4vLi4vc2hhcmVkL2ludGVyZmFjZXMvYXNzZXNzbWVudC5pbnRlcmZhY2UnO1xyXG5pbXBvcnQgeyBBc3Nlc3NtZW50UXVlc3Rpb25QYXBlciwgU2VjdGlvblF1ZXN0aW9uLCBRdWVzdGlvblBhcGVyU2VjdGlvbiB9IGZyb20gJy4uLy4uL3NoYXJlZC9pbnRlcmZhY2VzL3F1ZXN0aW9uLXBhcGVyLmludGVyZmFjZSc7XHJcbmltcG9ydCB7IEFzc2Vzc21lbnRRdWVzdGlvbiB9IGZyb20gJy4uLy4uL3NoYXJlZC9pbnRlcmZhY2VzL3F1ZXN0aW9uLmludGVyZmFjZSc7XHJcbmltcG9ydCB7IEFzc2Vzc21lbnRCdWlsZGVyU2VydmljZSB9IGZyb20gJy4vc2VydmljZXMvYXNzZXNzbWVudC1idWlsZGVyLnNlcnZpY2UnO1xyXG5pbXBvcnQgeyBBc3Nlc3NtZW50TWFrZXJTZXJ2aWNlIH0gZnJvbSAnLi9zZXJ2aWNlcy9hc3Nlc3NtZW50LW1ha2VyLnNlcnZpY2UnO1xyXG5pbXBvcnQgeyBzb3J0QnlPcmRlciwgcmVtb3ZlS2V5RGVlcCB9IGZyb20gJy4uLy4uL3NoYXJlZC91dGlscyc7XHJcblxyXG5AQ29tcG9uZW50KHtcclxuICBzZWxlY3RvcjogJ2xpYi1hc3Nlc3NtZW50LW1ha2VyJyxcclxuICB0ZW1wbGF0ZVVybDogJy4vYXNzZXNzbWVudC1tYWtlci5jb21wb25lbnQuaHRtbCcsXHJcbiAgc3R5bGVVcmxzOiBbJy4vYXNzZXNzbWVudC1tYWtlci5jb21wb25lbnQuc2NzcyddXHJcbn0pXHJcblxyXG5leHBvcnQgY2xhc3MgQXNzZXNzbWVudE1ha2VyQ29tcG9uZW50IGltcGxlbWVudHMgT25Jbml0IHtcclxuICBASW5wdXQoKSBsYWJlbENvbmZpZzogeyBba2V5OiBzdHJpbmddOiBzdHJpbmcgfSA9IHt9O1xyXG4gIEBJbnB1dCgpIGltYWdlQ29uZmlnOiB7IFtrZXk6IHN0cmluZ106IHN0cmluZyB9ID0ge307XHJcbiAgQElucHV0KCkgcXVlc3Rpb25UeXBlczogUXVlc3Rpb25UeXBlW10gPSBbXTtcclxuICBASW5wdXQoKSBzaG93Rm9vdGVyOiBib29sZWFuID0gZmFsc2U7XHJcbiAgQElucHV0KCkgY3VzdG9tUnVsZXM/OiBhbnk7XHJcbiAgQElucHV0KCkgYXNzZXNzbWVudElkOiBudW1iZXIgPSAwO1xyXG4gIEBJbnB1dCgpIGFzc2Vzc21lbnRJbnN0YW5jZUlkOiBudW1iZXIgPSAwO1xyXG4gIEBJbnB1dCgpIGRlZmF1bHRBc3Nlc3NtZW50RFRPOiBBc3Nlc3NtZW50ID0ge307XHJcbiAgQElucHV0KCkgcHJlZGVmaW5lZEFzc2Vzc21lbnRJbnN0YW5jZTogQXNzZXNzbWVudEluc3RhbmNlID0ge307XHJcbiAgQElucHV0KCkgZW5hYmxlU2tpbGxzVG9RdWVzdGlvbk1hcHBpbmc6IGJvb2xlYW4gPSBmYWxzZTtcclxuICBASW5wdXQoKSBhc3Nlc3NtZW50Q29udGV4dCE6IEFzc2Vzc21lbnRDb250ZXh0RFRPO1xyXG4gIEBJbnB1dCgpIG1pbmltdW1SZXF1aXJlZFNlY3Rpb25zOiBudW1iZXIgPSAwO1xyXG4gIEBJbnB1dCgpIGNoZWNrRm9yUmVzcG9uc2VzOiBib29sZWFuID0gZmFsc2U7XHJcbiAgQElucHV0KCkgc2hvd1Byb2N0b3JpbmdUb2dnbGU6IGJvb2xlYW4gPSBmYWxzZTtcclxuICBASW5wdXQoKSBzaG93VGltZUlucHV0OiBib29sZWFuID0gZmFsc2U7XHJcbiAgQElucHV0KCkgZW5hYmxlSW1wb3J0RnJvbVF1ZXN0aW9uQmFuazogYm9vbGVhbiA9IGZhbHNlO1xyXG4gIEBJbnB1dCgpIHF1ZXN0aW9uQmFua0NvbmZpZz86IFF1ZXN0aW9uQmFua0NvbmZpZztcclxuXHJcbiAgQE91dHB1dCgpIGFzc2Vzc21lbnRJZENoYW5nZSA9IG5ldyBFdmVudEVtaXR0ZXI8bnVtYmVyPigpO1xyXG4gIEBPdXRwdXQoKSBhc3Nlc3NtZW50SW5zdGFuY2VJZENoYW5nZSA9IG5ldyBFdmVudEVtaXR0ZXI8bnVtYmVyPigpO1xyXG4gIEBPdXRwdXQoKSBzbmFja2Jhck1lc3NhZ2UgPSBuZXcgRXZlbnRFbWl0dGVyPHsgbWVzc2FnZTogc3RyaW5nLCB0eXBlOiAnc3VjY2VzcycgfCAnZXJyb3InIHwgJ2luZm8nIH0+KCk7XHJcblxyXG4gIHNob3dMb2FkZXI6IGJvb2xlYW4gPSBmYWxzZTtcclxuICBxdWVzdGlvbkJhbms6IFJlY29yZDxudW1iZXIsIEFzc2Vzc21lbnRRdWVzdGlvbj4gPSB7fTtcclxuICBsb2NrZWRRdWVzdGlvbnNNYXA6IFJlY29yZDxudW1iZXIsIGJvb2xlYW4+ID0ge307XHJcbiAgYXNzZXNzbWVudFF1ZXN0aW9uUGFwZXJEYXRhOiBBc3Nlc3NtZW50UXVlc3Rpb25QYXBlciA9IHsgaWQ6IDAsIHF1ZXN0aW9uUGFwZXJTZWN0aW9uTGlzdDogW10gfTtcclxuICBjb25maWdzTG9hZGVkOiBib29sZWFuID0gZmFsc2U7XHJcbiAgcnVsZXM6IGFueTtcclxuICBpc1N1Ym1pdHRpbmc6IGJvb2xlYW4gPSBmYWxzZTtcclxuICBza2lsbHNMaXN0OiBSZWZEYXRhW10gPSBbXTtcclxuICByZXNwb25zZUNvdW50OiBudW1iZXIgPSAwO1xyXG4gIHByb2N0b3JpbmdFbmFibGVkOiBib29sZWFuID0gZmFsc2U7XHJcbiAgZHVyYXRpb25NaW51dGVzOiBudW1iZXIgfCBudWxsID0gbnVsbDtcclxuICBwcml2YXRlIHJlYWRvbmx5IFBST0NUT1JJTkdfQ09ORklHX0tFWSA9ICdhc3Nlc3NtZW50LmNvbmZpZy5pcy1wcm9jdG9yaW5nLWVuYWJsZWQnO1xyXG5cclxuICBjb25zdHJ1Y3RvcihcclxuICAgIHByaXZhdGUgYXNzZXNzbWVudE1ha2VyU2VydmljZTogQXNzZXNzbWVudE1ha2VyU2VydmljZSxcclxuICAgIHByaXZhdGUgYXNzZXNzbWVudEJ1aWxkZXJTZXJ2aWNlOiBBc3Nlc3NtZW50QnVpbGRlclNlcnZpY2UsXHJcbiAgICBwcml2YXRlIGRpYWxvZzogTWF0RGlhbG9nXHJcbiAgKSB7IH1cclxuXHJcbiAgbmdPbkluaXQoKTogdm9pZCB7XHJcbiAgICB0aGlzLmFzc2Vzc21lbnRCdWlsZGVyU2VydmljZS5zZXREZWZhdWx0QXNzZXNzbWVudERUTyh0aGlzLmRlZmF1bHRBc3Nlc3NtZW50RFRPKTtcclxuICAgIHRoaXMucHJvY3RvcmluZ0VuYWJsZWQgPSB0aGlzLnJlYWRQcm9jdG9yaW5nQ29uZmlnKHRoaXMuZGVmYXVsdEFzc2Vzc21lbnREVE8pO1xyXG4gICAgdGhpcy5yZWFkRHVyYXRpb24odGhpcy5hc3Nlc3NtZW50Q29udGV4dD8uYXNzZXNzbWVudEluc3RhbmNlRFRPIHx8IHRoaXMucHJlZGVmaW5lZEFzc2Vzc21lbnRJbnN0YW5jZSk7XHJcbiAgICB0aGlzLmdldENvbmZpZ3NGcm9tSlNPTigpO1xyXG5cclxuICAgIGlmICh0aGlzLmFzc2Vzc21lbnRDb250ZXh0KSB7XHJcbiAgICAgIHRoaXMuYXNzZXNzbWVudEluc3RhbmNlSWQgPSB0aGlzLmFzc2Vzc21lbnRDb250ZXh0Py5hc3Nlc3NtZW50SW5zdGFuY2VEVE8/LmlkIHx8IHRoaXMuYXNzZXNzbWVudEluc3RhbmNlSWQ7XHJcbiAgICAgIHRoaXMuYXNzZXNzbWVudElkID0gdGhpcy5hc3Nlc3NtZW50Q29udGV4dD8uYXNzZXNzbWVudD8uaWQgfHwgdGhpcy5hc3Nlc3NtZW50SWQ7XHJcbiAgICB9XHJcblxyXG4gICAgaWYgKHRoaXMuYXNzZXNzbWVudElkKSB7XHJcbiAgICAgIHRoaXMuc2hvd0xvYWRlciA9IHRydWU7XHJcbiAgICAgIHRoaXMubG9hZEFzc2Vzc21lbnREYXRhKCk7XHJcbiAgICB9XHJcblxyXG4gICAgaWYgKHRoaXMuZW5hYmxlU2tpbGxzVG9RdWVzdGlvbk1hcHBpbmcpIHtcclxuICAgICAgdGhpcy5nZXRTa2lsbHNMaXN0KCk7XHJcbiAgICB9XHJcblxyXG4gICAgaWYgKHRoaXMuY2hlY2tGb3JSZXNwb25zZXMgJiYgdGhpcy5hc3Nlc3NtZW50SW5zdGFuY2VJZCkge1xyXG4gICAgICB0aGlzLmxvYWRSZXNwb25zZUNvdW50KCk7XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICBwcml2YXRlIGxvYWRSZXNwb25zZUNvdW50KCkge1xyXG4gICAgdGhpcy5hc3Nlc3NtZW50TWFrZXJTZXJ2aWNlLmdldFJlc3BvbnNlQ291bnQodGhpcy5hc3Nlc3NtZW50SW5zdGFuY2VJZCkuc3Vic2NyaWJlKHtcclxuICAgICAgbmV4dDogKGNvdW50OiBhbnkpID0+IHRoaXMucmVzcG9uc2VDb3VudCA9IE51bWJlcihjb3VudCkgfHwgMCxcclxuICAgICAgZXJyb3I6ICgpID0+IHRoaXMucmVzcG9uc2VDb3VudCA9IDAgLy8gZmFpbCBvcGVuOiBkb24ndCB3YXJuIGlmIHRoZSBjb3VudCBjYW4ndCBiZSBmZXRjaGVkXHJcbiAgICB9KTtcclxuICB9XHJcblxyXG4gIC8qKlxyXG4gICAqIFJ1bnMgYGFjdGlvbmAsIGJ1dCBmaXJzdCB3YXJucyB0aGUgdXNlciBpZiB0aGUgYXNzZXNzbWVudCBhbHJlYWR5IGhhcyByZXNwb25zZXNcclxuICAgKiAob25seSB3aGVuIGBjaGVja0ZvclJlc3BvbnNlc2AgaXMgZW5hYmxlZCBhbmQgdGhlIGNvdW50IGlzIGdyZWF0ZXIgdGhhbiAwKS5cclxuICAgKi9cclxuICBwcml2YXRlIGNvbmZpcm1SZXNwb25zZXNXYXJuaW5nKGFjdGlvbjogKCkgPT4gdm9pZCkge1xyXG4gICAgaWYgKHRoaXMucmVzcG9uc2VDb3VudCA+IDApIHtcclxuICAgICAgY29uc3QgZGlhbG9nUmVmID0gdGhpcy5kaWFsb2cub3BlbihDb25maXJtYXRpb25EaWFsb2dDb21wb25lbnQsIHtcclxuICAgICAgICBhdXRvRm9jdXM6IGZhbHNlLFxyXG4gICAgICAgIG1heFdpZHRoOiAnOTUlJyxcclxuICAgICAgICB3aWR0aDogJzMycmVtJyxcclxuICAgICAgICBwYW5lbENsYXNzOiBbJ2Fzc2Vzc21lbnQtZGlhbG9nJ10sXHJcbiAgICAgICAgZGF0YToge1xyXG4gICAgICAgICAgbWVzc2FnZTogdGhpcy5sYWJlbENvbmZpZ1snQ09NTU9OU19BU1NFU1NNRU5ULldBUk5JTkcuUkVTUE9OU0VTX0VYSVNUJ10sXHJcbiAgICAgICAgICBjb25maXJtTGFiZWw6IHRoaXMubGFiZWxDb25maWdbJ0NPTU1PTlNfQVNTRVNTTUVOVC5MQUJFTC5QUk9DRUVEJ10sXHJcbiAgICAgICAgICBjYW5jZWxMYWJlbDogdGhpcy5sYWJlbENvbmZpZ1snQ09NTU9OU19BU1NFU1NNRU5ULkxBQkVMLkNBTkNFTCddXHJcbiAgICAgICAgfVxyXG4gICAgICB9KTtcclxuICAgICAgZGlhbG9nUmVmLmFmdGVyQ2xvc2VkKCkuc3Vic2NyaWJlKChjb25maXJtZWQ6IGJvb2xlYW4pID0+IHtcclxuICAgICAgICBpZiAoY29uZmlybWVkKSB7XHJcbiAgICAgICAgICBhY3Rpb24oKTtcclxuICAgICAgICB9XHJcbiAgICAgIH0pO1xyXG4gICAgfSBlbHNlIHtcclxuICAgICAgYWN0aW9uKCk7XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICBnZXRDb25maWdzRnJvbUpTT04oKSB7XHJcbiAgICBmb3JrSm9pbih7XHJcbiAgICAgIGxhYmVsQ29uZmlnOiB0aGlzLmFzc2Vzc21lbnRNYWtlclNlcnZpY2UuZ2V0Q29uZmlnSlNPTignanNvbi9sYWJlbENvbmZpZycpLFxyXG4gICAgICBpbWFnZUNvbmZpZzogdGhpcy5hc3Nlc3NtZW50TWFrZXJTZXJ2aWNlLmdldENvbmZpZ0pTT04oJ2pzb24vaW1hZ2VDb25maWcnKSxcclxuICAgICAgcnVsZXM6IHRoaXMuYXNzZXNzbWVudE1ha2VyU2VydmljZS5nZXRDb25maWdKU09OKCdqc29uL3F1ZXN0aW9uLWJ1aWxkZXItcnVsZXMnKSxcclxuICAgICAgLi4uKCF0aGlzLnF1ZXN0aW9uVHlwZXM/Lmxlbmd0aCAmJiB7XHJcbiAgICAgICAgcXVlc3Rpb25UeXBlczogdGhpcy5hc3Nlc3NtZW50TWFrZXJTZXJ2aWNlLmdldENvbmZpZ0pTT04oJ2pzb24vcXVlc3Rpb25UeXBlcycpXHJcbiAgICAgIH0pXHJcbiAgICB9KS5zdWJzY3JpYmUoKHJlczogYW55KSA9PiB7XHJcbiAgICAgIHRoaXMubGFiZWxDb25maWcgPSBPYmplY3QuYXNzaWduKHt9LCByZXM/LmxhYmVsQ29uZmlnLCB0aGlzLmxhYmVsQ29uZmlnKTtcclxuICAgICAgdGhpcy5pbWFnZUNvbmZpZyA9IE9iamVjdC5hc3NpZ24oe30sIHJlcz8uaW1hZ2VDb25maWcsIHRoaXMuaW1hZ2VDb25maWcpO1xyXG4gICAgICBpZiAocmVzPy5xdWVzdGlvblR5cGVzKSB7XHJcbiAgICAgICAgdGhpcy5xdWVzdGlvblR5cGVzID0gcmVzPy5xdWVzdGlvblR5cGVzO1xyXG4gICAgICB9XHJcbiAgICAgIC8vIE1lcmdlIGN1c3RvbVJ1bGVzIHBlciBxdWVzdGlvblR5cGUgb3ZlciBkZWZhdWx0IHJ1bGVzXHJcbiAgICAgIHRoaXMucnVsZXMgPSB7IC4uLnJlcz8ucnVsZXMgfTtcclxuICAgICAgaWYgKHRoaXMuY3VzdG9tUnVsZXMpIHtcclxuICAgICAgICBPYmplY3Qua2V5cyh0aGlzLmN1c3RvbVJ1bGVzKS5mb3JFYWNoKHFUeXBlID0+IHtcclxuICAgICAgICAgIGlmICghdGhpcy5ydWxlc1txVHlwZV0pIHtcclxuICAgICAgICAgICAgdGhpcy5ydWxlc1txVHlwZV0gPSB7IC4uLnRoaXMuY3VzdG9tUnVsZXNbcVR5cGVdIH07XHJcbiAgICAgICAgICB9IGVsc2Uge1xyXG4gICAgICAgICAgICB0aGlzLnJ1bGVzW3FUeXBlXSA9IHsgLi4udGhpcy5ydWxlc1txVHlwZV0sIC4uLnRoaXMuY3VzdG9tUnVsZXNbcVR5cGVdIH07XHJcbiAgICAgICAgICB9XHJcbiAgICAgICAgfSk7XHJcbiAgICAgIH1cclxuXHJcbiAgICAgIHRoaXMuY29uZmlnc0xvYWRlZCA9IHRydWU7XHJcbiAgICB9KVxyXG4gIH1cclxuXHJcbiAgbG9hZEFzc2Vzc21lbnREYXRhKCkge1xyXG4gICAgaWYgKHRoaXMuYXNzZXNzbWVudENvbnRleHQpIHtcclxuICAgICAgdGhpcy5xdWVzdGlvbkJhbmsgPSB7XHJcbiAgICAgICAgLi4udGhpcy5xdWVzdGlvbkJhbmssXHJcbiAgICAgICAgLi4uKHRoaXMuYXNzZXNzbWVudENvbnRleHQ/LnF1ZXN0aW9uRFRPTWFwIHx8IHt9KVxyXG4gICAgICB9O1xyXG4gICAgICB0aGlzLnVwZGF0ZUFzc2Vzc21lbnRRdWVzdGlvblBhcGVyRGF0YSh0aGlzLmFzc2Vzc21lbnRDb250ZXh0Py5hc3Nlc3NtZW50UXVlc3Rpb25QYXBlckRUTyk7XHJcbiAgICAgIHRoaXMucHJvY3RvcmluZ0VuYWJsZWQgPSB0aGlzLnJlYWRQcm9jdG9yaW5nQ29uZmlnKHRoaXMuYXNzZXNzbWVudENvbnRleHQ/LmFzc2Vzc21lbnQpO1xyXG4gICAgICB0aGlzLnJlYWREdXJhdGlvbih0aGlzLmFzc2Vzc21lbnRDb250ZXh0Py5hc3Nlc3NtZW50SW5zdGFuY2VEVE8pO1xyXG4gICAgICB0aGlzLnNob3dMb2FkZXIgPSBmYWxzZTtcclxuICAgICAgdGhpcy5jaGVja0Fzc2Vzc21lbnRRdWVzdGlvbnNMb2NrZWQoKTtcclxuICAgIH0gZWxzZSB7XHJcbiAgICAgIHRoaXMuYXNzZXNzbWVudE1ha2VyU2VydmljZS5nZXRBc3Nlc3NtZW50Q29udGV4dCh7IGFzc2Vzc21lbnRJZHM6IFt0aGlzLmFzc2Vzc21lbnRJZF0gfSkuc3Vic2NyaWJlKHtcclxuICAgICAgICBuZXh0OiAocmVzOiBhbnkpID0+IHtcclxuICAgICAgICAgIHRoaXMuYXNzZXNzbWVudENvbnRleHQgPSByZXM/LlswXTtcclxuICAgICAgICAgIHRoaXMucXVlc3Rpb25CYW5rID0ge1xyXG4gICAgICAgICAgICAuLi50aGlzLnF1ZXN0aW9uQmFuayxcclxuICAgICAgICAgICAgLi4uKHRoaXMuYXNzZXNzbWVudENvbnRleHQ/LnF1ZXN0aW9uRFRPTWFwIHx8IHt9KVxyXG4gICAgICAgICAgfTtcclxuICAgICAgICAgIHRoaXMudXBkYXRlQXNzZXNzbWVudFF1ZXN0aW9uUGFwZXJEYXRhKHRoaXMuYXNzZXNzbWVudENvbnRleHQ/LmFzc2Vzc21lbnRRdWVzdGlvblBhcGVyRFRPKTtcclxuICAgICAgICAgIHRoaXMucHJvY3RvcmluZ0VuYWJsZWQgPSB0aGlzLnJlYWRQcm9jdG9yaW5nQ29uZmlnKHRoaXMuYXNzZXNzbWVudENvbnRleHQ/LmFzc2Vzc21lbnQpO1xyXG4gICAgICAgICAgdGhpcy5yZWFkRHVyYXRpb24odGhpcy5hc3Nlc3NtZW50Q29udGV4dD8uYXNzZXNzbWVudEluc3RhbmNlRFRPKTtcclxuICAgICAgICAgIHRoaXMuc2hvd0xvYWRlciA9IGZhbHNlO1xyXG4gICAgICAgICAgdGhpcy5jaGVja0Fzc2Vzc21lbnRRdWVzdGlvbnNMb2NrZWQoKTtcclxuICAgICAgICB9LFxyXG4gICAgICAgIGVycm9yOiAoZXJyb3I6IGFueSkgPT4ge1xyXG4gICAgICAgICAgY29uc29sZS5lcnJvcihlcnJvcik7XHJcbiAgICAgICAgICB0aGlzLnNuYWNrYmFyTWVzc2FnZS5lbWl0KHsgbWVzc2FnZTogdGhpcy5sYWJlbENvbmZpZ1snQ09NTU9OU19BU1NFU1NNRU5ULlRPQVNULkVSUk9SX0RFRkFVTFQnXSwgdHlwZTogJ2Vycm9yJyB9KTtcclxuICAgICAgICAgIHRocm93IHsgZXJyb3IsIG1ldGhvZDogJ0dFVCcgfVxyXG4gICAgICAgIH1cclxuICAgICAgfSlcclxuICAgIH1cclxuICB9XHJcblxyXG4gIGNoZWNrQXNzZXNzbWVudFF1ZXN0aW9uc0xvY2tlZCgpOiB2b2lkIHtcclxuICAgIGNvbnN0IHF1ZXN0aW9uSWRzID0gT2JqZWN0LmtleXModGhpcy5xdWVzdGlvbkJhbmsgfHwge30pXHJcbiAgICAgIC5tYXAoaWQgPT4gTnVtYmVyKGlkKSlcclxuICAgICAgLmZpbHRlcihpZCA9PiBpZCA+IDApO1xyXG5cclxuICAgIGlmIChxdWVzdGlvbklkcy5sZW5ndGggPT09IDApIHJldHVybjtcclxuXHJcbiAgICB0aGlzLmFzc2Vzc21lbnRNYWtlclNlcnZpY2UuY2hlY2tRdWVzdGlvbnNMb2NrZWQocXVlc3Rpb25JZHMsICdBU1NFU1NNRU5UX0lOU1RBTkNFJylcclxuICAgICAgLnBpcGUoY2F0Y2hFcnJvcigoKSA9PiBvZih7fSkpKVxyXG4gICAgICAuc3Vic2NyaWJlKChsb2NrZWRNYXA6IFJlY29yZDxzdHJpbmcgfCBudW1iZXIsIGJvb2xlYW4+KSA9PiB7XHJcbiAgICAgICAgT2JqZWN0LmtleXMobG9ja2VkTWFwIHx8IHt9KS5mb3JFYWNoKGsgPT4ge1xyXG4gICAgICAgICAgdGhpcy5sb2NrZWRRdWVzdGlvbnNNYXBbTnVtYmVyKGspXSA9ICEhbG9ja2VkTWFwW2tdO1xyXG4gICAgICAgIH0pO1xyXG4gICAgICB9KTtcclxuICB9XHJcblxyXG4gIGlzUXVlc3Rpb25Mb2NrZWQocXVlc3Rpb25JZD86IG51bWJlcik6IGJvb2xlYW4ge1xyXG4gICAgcmV0dXJuIHF1ZXN0aW9uSWQgIT0gbnVsbCA/ICEhdGhpcy5sb2NrZWRRdWVzdGlvbnNNYXBbcXVlc3Rpb25JZF0gOiBmYWxzZTtcclxuICB9XHJcblxyXG4gIGdlbmVyYXRlUXVlc3Rpb25CYW5rKCkge1xyXG4gICAgbGV0IGNoaWxkUXVlc3Rpb25JZHM6IG51bWJlcltdID0gW107XHJcblxyXG4gICAgdGhpcy5hc3Nlc3NtZW50UXVlc3Rpb25QYXBlckRhdGE/LnF1ZXN0aW9uUGFwZXJTZWN0aW9uTGlzdD8uZm9yRWFjaCgoc2VjdGlvbjogYW55KSA9PiB7XHJcbiAgICAgIHNlY3Rpb24/LnNlY3Rpb25RdWVzdGlvbnNMaXN0Py5mb3JFYWNoKChxOiBhbnkpID0+IHtcclxuICAgICAgICBpZiAodGhpcy5xdWVzdGlvbkJhbms/LltxPy5xdWVzdGlvbklkXT8uZGVmYXVsdE9wdGlvbnNMaXN0Py5sZW5ndGgpIHtcclxuICAgICAgICAgIHRoaXMucXVlc3Rpb25CYW5rPy5bcT8ucXVlc3Rpb25JZF0/LmRlZmF1bHRPcHRpb25zTGlzdD8uZm9yRWFjaCgob3B0aW9uOiBhbnkpID0+IHtcclxuICAgICAgICAgICAgaWYgKG9wdGlvbj8uY2hpbGRRdWVzdGlvbkxpc3Q/Lmxlbmd0aCkge1xyXG4gICAgICAgICAgICAgIG9wdGlvbj8uY2hpbGRRdWVzdGlvbkxpc3Q/LmZvckVhY2goKGNjcTogYW55KSA9PiB7XHJcbiAgICAgICAgICAgICAgICBjaGlsZFF1ZXN0aW9uSWRzLnB1c2goY2NxKTtcclxuICAgICAgICAgICAgICB9KTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgfSk7XHJcbiAgICAgICAgfVxyXG4gICAgICB9KTtcclxuICAgIH0pO1xyXG5cclxuICAgIC8vIFJlbW92ZSBkdXBsaWNhdGVzIGFuZCBmaWx0ZXIgb3V0IG9uZXMgd2UgYWxyZWFkeSBoYXZlIGluIHRoZSBiYW5rXHJcbiAgICBjaGlsZFF1ZXN0aW9uSWRzID0gWy4uLm5ldyBTZXQoY2hpbGRRdWVzdGlvbklkcyldLmZpbHRlcihpZCA9PiAhdGhpcy5xdWVzdGlvbkJhbmtbaWRdKTtcclxuXHJcbiAgICBpZiAoY2hpbGRRdWVzdGlvbklkcz8ubGVuZ3RoID4gMCkge1xyXG4gICAgICBjb25zdCBwYXJhbXMgPSB7IHF1ZXN0aW9uSWRzOiBjaGlsZFF1ZXN0aW9uSWRzIH07XHJcbiAgICAgIHRoaXMuYXNzZXNzbWVudE1ha2VyU2VydmljZS5nZXRRdWVzdGlvbnNCeUlkcyhwYXJhbXMpLnN1YnNjcmliZSh7XHJcbiAgICAgICAgbmV4dDogKHJlczogYW55KSA9PiB7XHJcbiAgICAgICAgICByZXM/LmZvckVhY2goKHF1ZXN0aW9uOiBhbnkpID0+IHtcclxuICAgICAgICAgICAgdGhpcy5xdWVzdGlvbkJhbmtbcXVlc3Rpb24uaWRdID0gcXVlc3Rpb247XHJcbiAgICAgICAgICB9KTtcclxuICAgICAgICAgIHRoaXMuY2hlY2tBc3Nlc3NtZW50UXVlc3Rpb25zTG9ja2VkKCk7XHJcbiAgICAgICAgfSxcclxuICAgICAgICBlcnJvcjogKGVycm9yOiBhbnkpID0+IHtcclxuICAgICAgICAgIGNvbnNvbGUuZXJyb3IoZXJyb3IpO1xyXG4gICAgICAgICAgdGhyb3cgeyBlcnJvciwgbWV0aG9kOiAnR0VUJywgcGF5bG9hZDogcGFyYW1zIH1cclxuICAgICAgICB9XHJcbiAgICAgIH0pXHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICBpbWFnZUVycm9ySGFuZGxlcihldmVudDogYW55LCBmaWxlUGF0aDogc3RyaW5nKSB7XHJcbiAgICBldmVudC50YXJnZXQuc3JjID0gZmlsZVBhdGg7XHJcbiAgfVxyXG5cclxuICBmb2N1c1NlY3Rpb25JbnB1dChzZWN0aW9uSW5kZXg6IG51bWJlciwgZXZlbnQ6IEV2ZW50KSB7XHJcbiAgICBldmVudC5zdG9wUHJvcGFnYXRpb24oKTtcclxuICAgIGNvbnN0IGlucHV0ID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoYHNlY3Rpb25OYW1lSW5wdXRfJHtzZWN0aW9uSW5kZXh9YCkgYXMgSFRNTElucHV0RWxlbWVudDtcclxuICAgIGlmIChpbnB1dCkge1xyXG4gICAgICBpbnB1dC5mb2N1cygpO1xyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgZHJvcFNlY3Rpb24oZXZlbnQ6IENka0RyYWdEcm9wPGFueVtdPikge1xyXG4gICAgaWYgKHRoaXMuYXNzZXNzbWVudFF1ZXN0aW9uUGFwZXJEYXRhLnF1ZXN0aW9uUGFwZXJTZWN0aW9uTGlzdCkge1xyXG4gICAgICBtb3ZlSXRlbUluQXJyYXkoXHJcbiAgICAgICAgdGhpcy5hc3Nlc3NtZW50UXVlc3Rpb25QYXBlckRhdGEucXVlc3Rpb25QYXBlclNlY3Rpb25MaXN0LFxyXG4gICAgICAgIGV2ZW50LnByZXZpb3VzSW5kZXgsXHJcbiAgICAgICAgZXZlbnQuY3VycmVudEluZGV4XHJcbiAgICAgICk7XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICBkcm9wUXVlc3Rpb24oZXZlbnQ6IENka0RyYWdEcm9wPGFueVtdPikge1xyXG4gICAgbW92ZUl0ZW1JbkFycmF5KFxyXG4gICAgICBldmVudC5jb250YWluZXIuZGF0YSxcclxuICAgICAgZXZlbnQucHJldmlvdXNJbmRleCxcclxuICAgICAgZXZlbnQuY3VycmVudEluZGV4XHJcbiAgICApO1xyXG4gIH1cclxuXHJcbiAgYWRkSW5zdHJ1Y3Rpb24oc2VjdGlvbjogYW55KSB7XHJcbiAgICBjb25zdCBkaWFsb2dSZWYgPSB0aGlzLmRpYWxvZy5vcGVuKEFkZEVkaXRTZWN0aW9uSW50cm9kdWN0aW9uQ29tcG9uZW50LCB7XHJcbiAgICAgIGF1dG9Gb2N1czogZmFsc2UsXHJcbiAgICAgIG1heFdpZHRoOiAnOTUlJyxcclxuICAgICAgd2lkdGg6ICc0MHJlbScsXHJcbiAgICAgIG1heEhlaWdodDogJzEwMGR2aCcsXHJcbiAgICAgIHBhbmVsQ2xhc3M6IFsnYXNzZXNzbWVudC1kaWFsb2cnXSxcclxuICAgICAgZGF0YToge1xyXG4gICAgICAgIGltYWdlQ29uZmlnOiB0aGlzLmltYWdlQ29uZmlnLFxyXG4gICAgICAgIGxhYmVsQ29uZmlnOiB0aGlzLmxhYmVsQ29uZmlnLFxyXG4gICAgICAgIHNlY3Rpb25EZXRhaWxzOiBzZWN0aW9uXHJcbiAgICAgIH0sXHJcbiAgICB9KTtcclxuXHJcbiAgICBkaWFsb2dSZWYuYWZ0ZXJDbG9zZWQoKS5zdWJzY3JpYmUoKHJlc3VsdCkgPT4ge1xyXG4gICAgICBpZiAocmVzdWx0Py51cGRhdGUpIHtcclxuICAgICAgICBpZiAoIXNlY3Rpb24ucXBzRGVzYykgc2VjdGlvbi5xcHNEZXNjID0gW107XHJcbiAgICAgICAgaWYgKCFzZWN0aW9uLnFwc0Rlc2NbMF0pIHNlY3Rpb24ucXBzRGVzY1swXSA9IHsgaWQ6IDAsIGxhbmd1YWdlOiB7IGNvZGU6ICdFTkcnIH0sIHRleHQ6ICcnIH07XHJcbiAgICAgICAgc2VjdGlvbi5xcHNEZXNjWzBdLnRleHQgPSByZXN1bHQ/LmRlc2NyaXB0aW9uO1xyXG4gICAgICAgIHNlY3Rpb24ubWVkaWFVcmwgPSByZXN1bHQ/Lm1lZGlhVXJsIHx8IG51bGw7XHJcbiAgICAgICAgdGhpcy5wYXRjaEFzc2Vzc21lbnRBbmRRdWVzdGlvblBhcGVyKHRoaXMubGFiZWxDb25maWdbJ0NPTU1PTlNfQVNTRVNTTUVOVC5UT0FTVC5TRUNUSU9OX0lOU1RSVUNUSU9OU19VUERBVEVEX1NVQ0NFU1MnXSk7XHJcbiAgICAgIH1cclxuICAgIH0pO1xyXG4gIH1cclxuXHJcbiAgZGVsZXRlQ2hpbGRRdWVzdGlvbihvcHRpb246IGFueSwgY2hpbGRJZFRvUmVtb3ZlOiBudW1iZXIgfCBhbnkpIHtcclxuICAgIHRoaXMuY29uZmlybVJlc3BvbnNlc1dhcm5pbmcoKCkgPT4ge1xyXG4gICAgICBpZiAob3B0aW9uLmNoaWxkUXVlc3Rpb25MaXN0KSB7XHJcbiAgICAgICAgY29uc3QgaWRUb1JlbW92ZSA9IHR5cGVvZiBjaGlsZElkVG9SZW1vdmUgPT09ICdvYmplY3QnID8gY2hpbGRJZFRvUmVtb3ZlPy5pZCA6IGNoaWxkSWRUb1JlbW92ZTtcclxuICAgICAgICBvcHRpb24uY2hpbGRRdWVzdGlvbkxpc3QgPSBvcHRpb24uY2hpbGRRdWVzdGlvbkxpc3QuZmlsdGVyKChjY3E6IGFueSkgPT4ge1xyXG4gICAgICAgICAgY29uc3QgaWQgPSB0eXBlb2YgY2NxID09PSAnb2JqZWN0JyA/IGNjcT8uaWQgOiBjY3E7XHJcbiAgICAgICAgICByZXR1cm4gaWQgIT09IGlkVG9SZW1vdmU7XHJcbiAgICAgICAgfSk7XHJcbiAgICAgIH1cclxuICAgIH0pO1xyXG4gIH1cclxuXHJcbiAgZGVsZXRlUGFyZW50UXVlc3Rpb24oc2VjdGlvblF1ZXN0aW9uOiBTZWN0aW9uUXVlc3Rpb24pIHtcclxuICAgIHRoaXMuY29uZmlybVJlc3BvbnNlc1dhcm5pbmcoKCkgPT4ge1xyXG4gICAgICBzZWN0aW9uUXVlc3Rpb24uaXNBY3RpdmUgPSBmYWxzZTtcclxuICAgICAgdGhpcy5wYXRjaEFzc2Vzc21lbnRBbmRRdWVzdGlvblBhcGVyKHRoaXMubGFiZWxDb25maWdbJ0NPTU1PTlNfQVNTRVNTTUVOVC5UT0FTVC5RVUVTVElPTl9ERUxFVEVEX1NVQ0NFU1MnXSk7XHJcbiAgICB9KTtcclxuICB9XHJcblxyXG4gIGRlbGV0ZVNlY3Rpb24oc2VjdGlvbjogUXVlc3Rpb25QYXBlclNlY3Rpb24pIHtcclxuICAgIHRoaXMuY29uZmlybVJlc3BvbnNlc1dhcm5pbmcoKCkgPT4ge1xyXG4gICAgICBzZWN0aW9uLmlzQWN0aXZlID0gZmFsc2U7XHJcbiAgICAgIHRoaXMucGF0Y2hBc3Nlc3NtZW50QW5kUXVlc3Rpb25QYXBlcih0aGlzLmxhYmVsQ29uZmlnWydDT01NT05TX0FTU0VTU01FTlQuVE9BU1QuU0VDVElPTl9ERUxFVEVEX1NVQ0NFU1MnXSk7XHJcbiAgICB9KTtcclxuICB9XHJcblxyXG4gIGNyZWF0ZUVkaXRRdWVzdGlvbihzZWN0aW9uRGV0YWlscz86IGFueSwgc2VjdGlvblF1ZXN0aW9uSWQ/OiBudW1iZXIsIGlzQ2hpbGQ/OiBib29sZWFuKTogdm9pZCB7XHJcbiAgICBpZiAoc2VjdGlvblF1ZXN0aW9uSWQgIT0gbnVsbCAmJiB0aGlzLmxvY2tlZFF1ZXN0aW9uc01hcFtzZWN0aW9uUXVlc3Rpb25JZF0pIHtcclxuICAgICAgdGhpcy5zbmFja2Jhck1lc3NhZ2UuZW1pdCh7XHJcbiAgICAgICAgbWVzc2FnZTogdGhpcy5sYWJlbENvbmZpZ1snQ09NTU9OU19BU1NFU1NNRU5ULldBUk5JTkcuUVVFU1RJT05fTE9DS0VEJ10gfHwgJ1RoaXMgcXVlc3Rpb24gaXMgcGFydCBvZiBhIHB1Ymxpc2hlZCBhc3Nlc3NtZW50IGFuZCBjYW5ub3QgYmUgZWRpdGVkLicsXHJcbiAgICAgICAgdHlwZTogJ2luZm8nXHJcbiAgICAgIH0pO1xyXG4gICAgICByZXR1cm47XHJcbiAgICB9XHJcbiAgICAvLyBFZGl0aW5nIGFuIGV4aXN0aW5nIHF1ZXN0aW9uIGlzIGdhdGVkIGJ5IHRoZSByZXNwb25zZXMgd2FybmluZzsgYWRkaW5nIGEgbmV3IG9uZSBpcyBub3QuXHJcbiAgICBpZiAoc2VjdGlvblF1ZXN0aW9uSWQgIT0gbnVsbCkge1xyXG4gICAgICB0aGlzLmNvbmZpcm1SZXNwb25zZXNXYXJuaW5nKCgpID0+IHRoaXMub3BlblF1ZXN0aW9uQnVpbGRlcihzZWN0aW9uRGV0YWlscywgc2VjdGlvblF1ZXN0aW9uSWQsIGlzQ2hpbGQpKTtcclxuICAgIH0gZWxzZSB7XHJcbiAgICAgIHRoaXMub3BlblF1ZXN0aW9uQnVpbGRlcihzZWN0aW9uRGV0YWlscywgc2VjdGlvblF1ZXN0aW9uSWQsIGlzQ2hpbGQpO1xyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgcHJpdmF0ZSBvcGVuUXVlc3Rpb25CdWlsZGVyKHNlY3Rpb25EZXRhaWxzPzogYW55LCBzZWN0aW9uUXVlc3Rpb25JZD86IG51bWJlciwgaXNDaGlsZD86IGJvb2xlYW4pOiB2b2lkIHtcclxuICAgIGNvbnN0IHF1ZXN0aW9uRGV0YWlscyA9IHRoaXMuZ2V0UXVlc3Rpb25Gcm9tQmFuayhzZWN0aW9uUXVlc3Rpb25JZCk7XHJcbiAgICBjb25zdCBkaWFsb2dSZWYgPSB0aGlzLmRpYWxvZy5vcGVuKEFzc2Vzc21lbnRCdWlsZGVyQ29tcG9uZW50LCB7XHJcbiAgICAgIGF1dG9Gb2N1czogZmFsc2UsXHJcbiAgICAgIHBvc2l0aW9uOiB7IHJpZ2h0OiAnMCcgfSxcclxuICAgICAgbWF4V2lkdGg6ICcxMDAlJyxcclxuICAgICAgd2lkdGg6ICc1NXJlbScsXHJcbiAgICAgIGhlaWdodDogJzEwMHZoJyxcclxuICAgICAgcGFuZWxDbGFzczogWydhc3Nlc3NtZW50LWRpYWxvZycsICdhc3Nlc3NtZW50LWRpYWxvZy1zbGlkZXItYW5pbWF0aW9uJ10sXHJcbiAgICAgIGhhc0JhY2tkcm9wOiB0cnVlLFxyXG4gICAgICBkYXRhOiB7XHJcbiAgICAgICAgbGFiZWxDb25maWc6IHRoaXMubGFiZWxDb25maWcsXHJcbiAgICAgICAgaW1hZ2VDb25maWc6IHRoaXMuaW1hZ2VDb25maWcsXHJcbiAgICAgICAgcXVlc3Rpb25UeXBlczogdGhpcy5xdWVzdGlvblR5cGVzLFxyXG4gICAgICAgIHJ1bGVzOiB0aGlzLnJ1bGVzLFxyXG4gICAgICAgIHF1ZXN0aW9uQmFuazogdGhpcy5xdWVzdGlvbkJhbmssXHJcbiAgICAgICAgaXNDaGlsZDogaXNDaGlsZCxcclxuICAgICAgICBxdWVzdGlvbkRldGFpbHMsXHJcbiAgICAgICAgc2VjdGlvbkRldGFpbHMsXHJcbiAgICAgICAgYXNzZXNzbWVudFF1ZXN0aW9uUGFwZXJEYXRhOiB0aGlzLmFzc2Vzc21lbnRRdWVzdGlvblBhcGVyRGF0YSxcclxuICAgICAgICBhc3Nlc3NtZW50SWQ6IHRoaXMuYXNzZXNzbWVudElkLFxyXG4gICAgICAgIHNraWxsc0xpc3Q6IHRoaXMuc2tpbGxzTGlzdCxcclxuICAgICAgICBzbmFja2Jhck1lc3NhZ2VFbWl0dGVyOiB0aGlzLnNuYWNrYmFyTWVzc2FnZSxcclxuICAgICAgICBpc0xvY2tlZDogc2VjdGlvblF1ZXN0aW9uSWQgIT0gbnVsbCA/ICEhdGhpcy5sb2NrZWRRdWVzdGlvbnNNYXBbc2VjdGlvblF1ZXN0aW9uSWRdIDogZmFsc2VcclxuICAgICAgfSxcclxuICAgIH0pO1xyXG5cclxuICAgIGRpYWxvZ1JlZi5hZnRlckNsb3NlZCgpLnN1YnNjcmliZSgocmVzOiBhbnkpID0+IHtcclxuICAgICAgaWYgKHJlcz8uc3VjY2Vzcykge1xyXG4gICAgICAgIGlmIChyZXM/LmFzc2Vzc21lbnRJZCkge1xyXG4gICAgICAgICAgaWYgKCF0aGlzLmFzc2Vzc21lbnRJZCkge1xyXG4gICAgICAgICAgICB0aGlzLmFzc2Vzc21lbnRJZCA9IHJlcy5hc3Nlc3NtZW50SWQ7XHJcbiAgICAgICAgICAgIHRoaXMuYXNzZXNzbWVudElkQ2hhbmdlLmVtaXQodGhpcy5hc3Nlc3NtZW50SWQpO1xyXG4gICAgICAgICAgfVxyXG4gICAgICAgICAgdGhpcy5xdWVzdGlvbkJhbmsgPSB7XHJcbiAgICAgICAgICAgIC4uLnRoaXMucXVlc3Rpb25CYW5rLFxyXG4gICAgICAgICAgICAuLi4ocmVzPy5xdWVzdGlvbk1hcCB8fCB7fSlcclxuICAgICAgICAgIH07XHJcbiAgICAgICAgICB0aGlzLnVwZGF0ZUFzc2Vzc21lbnRRdWVzdGlvblBhcGVyRGF0YShyZXMucXVlc3Rpb25QYXBlcik7XHJcbiAgICAgICAgfSBlbHNlIHtcclxuICAgICAgICAgIHRoaXMucGF0Y2hBc3Nlc3NtZW50QW5kUXVlc3Rpb25QYXBlcigpO1xyXG4gICAgICAgIH1cclxuICAgICAgfVxyXG4gICAgfSk7XHJcbiAgfVxyXG5cclxuICBkdXBsaWNhdGVTZWN0aW9uKHNlY3Rpb25JZDogbnVtYmVyKSB7XHJcbiAgICBpZiAoIXRoaXMuYXNzZXNzbWVudFF1ZXN0aW9uUGFwZXJEYXRhPy5pZCkgcmV0dXJuO1xyXG4gICAgdGhpcy5hc3Nlc3NtZW50TWFrZXJTZXJ2aWNlLmR1cGxpY2F0ZVNlY3Rpb24odGhpcy5hc3Nlc3NtZW50UXVlc3Rpb25QYXBlckRhdGEuaWQsIHNlY3Rpb25JZCkuc3Vic2NyaWJlKHtcclxuICAgICAgbmV4dDogKHJlczogYW55KSA9PiB7XHJcbiAgICAgICAgdGhpcy5xdWVzdGlvbkJhbmsgPSB7XHJcbiAgICAgICAgICAuLi50aGlzLnF1ZXN0aW9uQmFuayxcclxuICAgICAgICAgIC4uLihyZXM/LnF1ZXN0aW9uTWFwIHx8IHt9KVxyXG4gICAgICAgIH07XHJcbiAgICAgICAgdGhpcy51cGRhdGVBc3Nlc3NtZW50UXVlc3Rpb25QYXBlckRhdGEocmVzPy5xdWVzdGlvblBhcGVyKTtcclxuICAgICAgICB0aGlzLmdlbmVyYXRlUXVlc3Rpb25CYW5rKCk7XHJcbiAgICAgICAgdGhpcy5jaGVja0Fzc2Vzc21lbnRRdWVzdGlvbnNMb2NrZWQoKTtcclxuICAgICAgICB0aGlzLnBhdGNoQXNzZXNzbWVudEFuZFF1ZXN0aW9uUGFwZXIoKTtcclxuICAgICAgICB0aGlzLnNuYWNrYmFyTWVzc2FnZS5lbWl0KHsgbWVzc2FnZTogdGhpcy5sYWJlbENvbmZpZ1snQ09NTU9OU19BU1NFU1NNRU5ULlRPQVNULlNFQ1RJT05fRFVQTElDQVRFRF9TVUNDRVNTJ10sIHR5cGU6ICdzdWNjZXNzJyB9KTtcclxuICAgICAgfSxcclxuICAgICAgZXJyb3I6IChlcnJvcjogYW55KSA9PiB7XHJcbiAgICAgICAgdGhpcy5zaG93TG9hZGVyID0gZmFsc2U7XHJcbiAgICAgICAgY29uc29sZS5lcnJvcihlcnJvcik7XHJcbiAgICAgICAgdGhpcy5zbmFja2Jhck1lc3NhZ2UuZW1pdCh7IG1lc3NhZ2U6IHRoaXMubGFiZWxDb25maWdbJ0NPTU1PTlNfQVNTRVNTTUVOVC5UT0FTVC5FUlJPUl9ERUZBVUxUJ10sIHR5cGU6ICdlcnJvcicgfSk7XHJcbiAgICAgICAgdGhyb3cgeyBlcnJvciwgbWV0aG9kOiAnUEFUQ0gnIH1cclxuICAgICAgfVxyXG4gICAgfSk7XHJcbiAgfVxyXG5cclxuICBkdXBsaWNhdGVRdWVzdGlvbihzZWN0aW9uOiBRdWVzdGlvblBhcGVyU2VjdGlvbiwgc2VjdGlvblF1ZXN0aW9uOiBTZWN0aW9uUXVlc3Rpb24pIHtcclxuICAgIGlmICghc2VjdGlvblF1ZXN0aW9uLmlkKSByZXR1cm47XHJcbiAgICB0aGlzLmFzc2Vzc21lbnRNYWtlclNlcnZpY2UuZHVwbGljYXRlUXVlc3Rpb24oc2VjdGlvbi5pZCwgc2VjdGlvblF1ZXN0aW9uLmlkKS5zdWJzY3JpYmUoe1xyXG4gICAgICBuZXh0OiAocmVzOiBhbnkpID0+IHtcclxuICAgICAgICB0aGlzLnF1ZXN0aW9uQmFuayA9IHtcclxuICAgICAgICAgIC4uLnRoaXMucXVlc3Rpb25CYW5rLFxyXG4gICAgICAgICAgLi4uKHJlcz8ucXVlc3Rpb25NYXAgfHwge30pXHJcbiAgICAgICAgfTtcclxuICAgICAgICB0aGlzLnVwZGF0ZUFzc2Vzc21lbnRRdWVzdGlvblBhcGVyRGF0YShyZXM/LnF1ZXN0aW9uUGFwZXIpO1xyXG4gICAgICAgIHRoaXMuZ2VuZXJhdGVRdWVzdGlvbkJhbmsoKTtcclxuICAgICAgICB0aGlzLmNoZWNrQXNzZXNzbWVudFF1ZXN0aW9uc0xvY2tlZCgpO1xyXG4gICAgICAgIHRoaXMucGF0Y2hBc3Nlc3NtZW50QW5kUXVlc3Rpb25QYXBlcigpO1xyXG4gICAgICAgIHRoaXMuc25hY2tiYXJNZXNzYWdlLmVtaXQoeyBtZXNzYWdlOiB0aGlzLmxhYmVsQ29uZmlnWydDT01NT05TX0FTU0VTU01FTlQuVE9BU1QuUVVFU1RJT05fRFVQTElDQVRFRF9TVUNDRVNTJ10sIHR5cGU6ICdzdWNjZXNzJyB9KTtcclxuICAgICAgfSxcclxuICAgICAgZXJyb3I6IChlcnJvcjogYW55KSA9PiB7XHJcbiAgICAgICAgdGhpcy5zaG93TG9hZGVyID0gZmFsc2U7XHJcbiAgICAgICAgY29uc29sZS5lcnJvcihlcnJvcik7XHJcbiAgICAgICAgdGhpcy5zbmFja2Jhck1lc3NhZ2UuZW1pdCh7IG1lc3NhZ2U6IHRoaXMubGFiZWxDb25maWdbJ0NPTU1PTlNfQVNTRVNTTUVOVC5UT0FTVC5FUlJPUl9ERUZBVUxUJ10sIHR5cGU6ICdlcnJvcicgfSk7XHJcbiAgICAgICAgdGhyb3cgeyBlcnJvciwgbWV0aG9kOiAnUEFUQ0gnIH1cclxuICAgICAgfVxyXG4gICAgfSk7XHJcbiAgfVxyXG5cclxuICBwcml2YXRlIHJlYWRQcm9jdG9yaW5nQ29uZmlnKGFzc2Vzc21lbnQ/OiBBc3Nlc3NtZW50KTogYm9vbGVhbiB7XHJcbiAgICByZXR1cm4gYXNzZXNzbWVudD8uYXNzZXNzbWVudENvbmZpZ3M/LmZpbmQoYyA9PiBjLmNvbmZpZ0tleSA9PT0gdGhpcy5QUk9DVE9SSU5HX0NPTkZJR19LRVkpPy5jb25maWdWYWx1ZSA9PT0gJzEnO1xyXG4gIH1cclxuXHJcbiAgLyoqIEluaXRpYWxpemVzIHRoZSBtaW51dGVzIGlucHV0IGZyb20gYW4gZXhpc3RpbmcgaW5zdGFuY2UncyBkdXJhdGlvbiAoc2Vjb25kcykuICovXHJcbiAgcHJpdmF0ZSByZWFkRHVyYXRpb24oaW5zdGFuY2U/OiBBc3Nlc3NtZW50SW5zdGFuY2UpOiB2b2lkIHtcclxuICAgIGNvbnN0IHNlY29uZHMgPSBpbnN0YW5jZT8uZHVyYXRpb24gPz8gMDtcclxuICAgIC8vIGtlZXAgZnJhY3Rpb25hbCBtaW51dGVzIChlLmcuIDMwcyAtPiAwLjUpIHJhdGhlciB0aGFuIHJvdW5kaW5nIHRvIHdob2xlIG1pbnV0ZXNcclxuICAgIHRoaXMuZHVyYXRpb25NaW51dGVzID0gc2Vjb25kcyA+IDAgPyBNYXRoLnJvdW5kKChzZWNvbmRzIC8gNjApICogMTAwKSAvIDEwMCA6IG51bGw7XHJcbiAgfVxyXG5cclxuICAvKiogQmxvY2tzIGNoYXJhY3RlcnMgdGhhdCB3b3VsZCBlbnRlciBhIG5lZ2F0aXZlL2V4cG9uZW50IHZhbHVlIGluIHRoZSBkdXJhdGlvbiBpbnB1dC4gKi9cclxuICBibG9ja05lZ2F0aXZlS2V5cyhldmVudDogS2V5Ym9hcmRFdmVudCk6IHZvaWQge1xyXG4gICAgaWYgKFsnLScsICcrJywgJ2UnLCAnRSddLmluY2x1ZGVzKGV2ZW50LmtleSkpIHtcclxuICAgICAgZXZlbnQucHJldmVudERlZmF1bHQoKTtcclxuICAgIH1cclxuICB9XHJcblxyXG4gIC8qKiBEdXJhdGlvbiB0byBwZXJzaXN0LCBpbiBTRUNPTkRTICh0aGUgdW5pdCB0aGUgdGFrZXIncyB0aW1lciB1c2VzKS4gMCBtZWFucyB1bnRpbWVkLiAqL1xyXG4gIHByaXZhdGUgZ2V0IGR1cmF0aW9uU2Vjb25kcygpOiBudW1iZXIge1xyXG4gICAgcmV0dXJuIHRoaXMuZHVyYXRpb25NaW51dGVzID8gTWF0aC5yb3VuZCh0aGlzLmR1cmF0aW9uTWludXRlcyAqIDYwKSA6IDA7XHJcbiAgfVxyXG5cclxuICAvKipcclxuICAgKiBSZXR1cm5zIHRoZSBhc3Nlc3NtZW50IGNvbmZpZ3Mgd2l0aCB0aGUgcHJvY3RvcmluZyBmbGFnICgnMScvJzAnKSB1cHNlcnRlZCwgcHJlc2VydmluZ1xyXG4gICAqIGFueSBvdGhlciBleGlzdGluZyBjb25maWdzLiBSZXR1cm5zIHVuZGVmaW5lZCB3aGVuIHRoZSBwcm9jdG9yaW5nIHRvZ2dsZSBpcyBub3QgZW5hYmxlZFxyXG4gICAqIHNvIHRoZSBzYXZlZCBwYXlsb2FkIGlzIHVuY2hhbmdlZCBmb3IgY29uc3VtZXJzIG5vdCB1c2luZyBwcm9jdG9yaW5nLlxyXG4gICAqL1xyXG4gIHByaXZhdGUgYnVpbGRQcm9jdG9yaW5nQ29uZmlncygpOiBDb25maWdbXSB8IHVuZGVmaW5lZCB7XHJcbiAgICBpZiAoIXRoaXMuc2hvd1Byb2N0b3JpbmdUb2dnbGUpIHtcclxuICAgICAgcmV0dXJuIHVuZGVmaW5lZDtcclxuICAgIH1cclxuICAgIGNvbnN0IGJhc2UgPSB0aGlzLmFzc2Vzc21lbnRDb250ZXh0Py5hc3Nlc3NtZW50Py5hc3Nlc3NtZW50Q29uZmlncyA/PyB0aGlzLmRlZmF1bHRBc3Nlc3NtZW50RFRPPy5hc3Nlc3NtZW50Q29uZmlncyA/PyBbXTtcclxuICAgIGNvbnN0IGNvbmZpZ3M6IENvbmZpZ1tdID0gYmFzZS5tYXAoYyA9PiAoeyAuLi5jIH0pKTtcclxuICAgIGNvbnN0IHZhbHVlID0gdGhpcy5wcm9jdG9yaW5nRW5hYmxlZCA/ICcxJyA6ICcwJztcclxuICAgIGNvbnN0IGV4aXN0aW5nID0gY29uZmlncy5maW5kKGMgPT4gYy5jb25maWdLZXkgPT09IHRoaXMuUFJPQ1RPUklOR19DT05GSUdfS0VZKTtcclxuICAgIGlmIChleGlzdGluZykge1xyXG4gICAgICBleGlzdGluZy5jb25maWdWYWx1ZSA9IHZhbHVlO1xyXG4gICAgfSBlbHNlIHtcclxuICAgICAgY29uZmlncy5wdXNoKHsgY29uZmlnS2V5OiB0aGlzLlBST0NUT1JJTkdfQ09ORklHX0tFWSwgY29uZmlnVmFsdWU6IHZhbHVlIH0pO1xyXG4gICAgfVxyXG4gICAgcmV0dXJuIGNvbmZpZ3M7XHJcbiAgfVxyXG5cclxuICBwYXRjaEFzc2Vzc21lbnRBbmRRdWVzdGlvblBhcGVyKHN1Y2Nlc3NNZXNzYWdlPzogc3RyaW5nKSB7XHJcbiAgICBjb25zdCBwYXlsb2FkID0ge1xyXG4gICAgICBxdWVzdGlvblBhcGVyOiB0aGlzLmFzc2Vzc21lbnRCdWlsZGVyU2VydmljZS5nZW5lcmF0ZVF1ZXN0aW9uUGFwZXJEVE8odGhpcy5hc3Nlc3NtZW50UXVlc3Rpb25QYXBlckRhdGEsIHRoaXMucXVlc3Rpb25CYW5rKSxcclxuICAgICAgYXNzZXNzbWVudDogdGhpcy5hc3Nlc3NtZW50QnVpbGRlclNlcnZpY2UuZ2VuZXJhdGVBc3Nlc3NtZW50RFRPKHRoaXMuYXNzZXNzbWVudElkLCB0aGlzLmFzc2Vzc21lbnRRdWVzdGlvblBhcGVyRGF0YSwgdGhpcy5idWlsZFByb2N0b3JpbmdDb25maWdzKCkpLFxyXG4gICAgICAuLi50aGlzLmFzc2Vzc21lbnRCdWlsZGVyU2VydmljZS5idWlsZEluc3RhbmNlUGF0Y2godGhpcy5zaG93VGltZUlucHV0LCB0aGlzLmFzc2Vzc21lbnRJbnN0YW5jZUlkLCB0aGlzLmR1cmF0aW9uU2Vjb25kcylcclxuICAgIH1cclxuICAgIHRoaXMuYXNzZXNzbWVudE1ha2VyU2VydmljZS5wYXRjaEFzc2Vzc21lbnRBbmRRdWVzdGlvblBhcGVyKHBheWxvYWQpLnN1YnNjcmliZSh7XHJcbiAgICAgIG5leHQ6IChyZXM6IGFueSkgPT4ge1xyXG4gICAgICAgIHRoaXMudXBkYXRlQXNzZXNzbWVudFF1ZXN0aW9uUGFwZXJEYXRhKHJlcz8ucXVlc3Rpb25QYXBlcik7XHJcbiAgICAgICAgdGhpcy5nZW5lcmF0ZVF1ZXN0aW9uQmFuaygpO1xyXG4gICAgICAgIHRoaXMuY2hlY2tBc3Nlc3NtZW50UXVlc3Rpb25zTG9ja2VkKCk7XHJcbiAgICAgICAgaWYgKHN1Y2Nlc3NNZXNzYWdlKSB7XHJcbiAgICAgICAgICB0aGlzLnNuYWNrYmFyTWVzc2FnZS5lbWl0KHsgbWVzc2FnZTogc3VjY2Vzc01lc3NhZ2UsIHR5cGU6ICdzdWNjZXNzJyB9KTtcclxuICAgICAgICB9XHJcbiAgICAgIH0sXHJcbiAgICAgIGVycm9yOiBlcnJvciA9PiB7XHJcbiAgICAgICAgdGhpcy5zbmFja2Jhck1lc3NhZ2UuZW1pdCh7IG1lc3NhZ2U6IHRoaXMubGFiZWxDb25maWdbJ0NPTU1PTlNfQVNTRVNTTUVOVC5UT0FTVC5FUlJPUl9ERUZBVUxUJ10sIHR5cGU6ICdlcnJvcicgfSk7XHJcbiAgICAgICAgdGhyb3cgeyBlcnJvciwgbWV0aG9kOiAnUEFUQ0gnLCBwYXlsb2FkIH1cclxuICAgICAgfVxyXG4gICAgfSlcclxuICB9XHJcblxyXG4gIGZpbmFsU3VibWl0KCkge1xyXG4gICAgaWYgKHRoaXMuaXNTdWJtaXR0aW5nKSByZXR1cm47XHJcbiAgICB0aGlzLmlzU3VibWl0dGluZyA9IHRydWU7XHJcbiAgICBjb25zdCBwYXlsb2FkID0ge1xyXG4gICAgICBxdWVzdGlvblBhcGVyOiB0aGlzLmFzc2Vzc21lbnRCdWlsZGVyU2VydmljZS5nZW5lcmF0ZVF1ZXN0aW9uUGFwZXJEVE8odGhpcy5hc3Nlc3NtZW50UXVlc3Rpb25QYXBlckRhdGEsIHRoaXMucXVlc3Rpb25CYW5rKSxcclxuICAgICAgYXNzZXNzbWVudDogdGhpcy5hc3Nlc3NtZW50QnVpbGRlclNlcnZpY2UuZ2VuZXJhdGVBc3Nlc3NtZW50RFRPKHRoaXMuYXNzZXNzbWVudElkLCB0aGlzLmFzc2Vzc21lbnRRdWVzdGlvblBhcGVyRGF0YSwgdGhpcy5idWlsZFByb2N0b3JpbmdDb25maWdzKCkpLFxyXG4gICAgICAuLi50aGlzLmFzc2Vzc21lbnRCdWlsZGVyU2VydmljZS5idWlsZEluc3RhbmNlUGF0Y2godGhpcy5zaG93VGltZUlucHV0LCB0aGlzLmFzc2Vzc21lbnRJbnN0YW5jZUlkLCB0aGlzLmR1cmF0aW9uU2Vjb25kcylcclxuICAgIH1cclxuICAgIGlmICgocGF5bG9hZD8ucXVlc3Rpb25QYXBlcj8ucXVlc3Rpb25QYXBlclNlY3Rpb25MaXN0Py5sZW5ndGggPz8gMCkgPCB0aGlzLm1pbmltdW1SZXF1aXJlZFNlY3Rpb25zKSB7XHJcbiAgICAgIHRoaXMuc25hY2tiYXJNZXNzYWdlLmVtaXQoeyBtZXNzYWdlOiB0aGlzLmxhYmVsQ29uZmlnWydDT01NT05TX0FTU0VTU01FTlQuVE9BU1QuTUlOSU1VTV9SRVFVSVJFRF9TRUNUSU9OU19FUlJPUiddPy5yZXBsYWNlKCckQ291bnQnLCBTdHJpbmcodGhpcy5taW5pbXVtUmVxdWlyZWRTZWN0aW9ucykpLCB0eXBlOiAnaW5mbycgfSk7XHJcbiAgICAgIHRoaXMuaXNTdWJtaXR0aW5nID0gZmFsc2U7XHJcbiAgICAgIHJldHVybjtcclxuICAgIH1cclxuICAgIGlmICghdGhpcy5hc3Nlc3NtZW50SWQpIHtcclxuICAgICAgLy8gcmV0dXJucyBudWxsIG9yIDAgYXMgYXNzZXNzbWVudCBpcyBub3QgY3JlYXRlZCB5ZXQuIEhhbmRsZSB0aGUgcmVzcG9uc2UgaW4gY29uc3VtZXIgYXBwXHJcbiAgICAgIHRoaXMuaXNTdWJtaXR0aW5nID0gZmFsc2U7XHJcbiAgICAgIHRoaXMuYXNzZXNzbWVudEluc3RhbmNlSWRDaGFuZ2UuZW1pdCh0aGlzLmFzc2Vzc21lbnRJbnN0YW5jZUlkKTtcclxuICAgICAgcmV0dXJuO1xyXG4gICAgfVxyXG4gICAgdGhpcy5hc3Nlc3NtZW50TWFrZXJTZXJ2aWNlLnBhdGNoQXNzZXNzbWVudEFuZFF1ZXN0aW9uUGFwZXIocGF5bG9hZCkuc3Vic2NyaWJlKHtcclxuICAgICAgbmV4dDogKHJlczogYW55KSA9PiB7XHJcbiAgICAgICAgdGhpcy51cGRhdGVBc3Nlc3NtZW50UXVlc3Rpb25QYXBlckRhdGEocmVzPy5xdWVzdGlvblBhcGVyKTtcclxuICAgICAgICBpZiAoIXRoaXMuYXNzZXNzbWVudEluc3RhbmNlSWQpIHtcclxuICAgICAgICAgIHRoaXMuY3JlYXRlQXNzZXNzbWVudEluc3RhbmNlKCk7XHJcbiAgICAgICAgfSBlbHNlIHtcclxuICAgICAgICAgIHRoaXMuaXNTdWJtaXR0aW5nID0gZmFsc2U7XHJcbiAgICAgICAgICB0aGlzLmFzc2Vzc21lbnRJbnN0YW5jZUlkQ2hhbmdlLmVtaXQodGhpcy5hc3Nlc3NtZW50SW5zdGFuY2VJZCk7XHJcbiAgICAgICAgfVxyXG4gICAgICB9LFxyXG4gICAgICBlcnJvcjogZXJyb3IgPT4ge1xyXG4gICAgICAgIHRoaXMuaXNTdWJtaXR0aW5nID0gZmFsc2U7XHJcbiAgICAgICAgdGhpcy5zbmFja2Jhck1lc3NhZ2UuZW1pdCh7IG1lc3NhZ2U6IHRoaXMubGFiZWxDb25maWdbJ0NPTU1PTlNfQVNTRVNTTUVOVC5UT0FTVC5FUlJPUl9ERUZBVUxUJ10sIHR5cGU6ICdlcnJvcicgfSk7XHJcbiAgICAgICAgdGhyb3cgeyBlcnJvciwgbWV0aG9kOiAnUEFUQ0gnLCBwYXlsb2FkIH1cclxuICAgICAgfVxyXG4gICAgfSlcclxuICB9XHJcblxyXG4gIGNyZWF0ZUFzc2Vzc21lbnRJbnN0YW5jZSgpIHtcclxuICAgIGNvbnN0IHBheWxvYWQgPSB0aGlzLmFzc2Vzc21lbnRCdWlsZGVyU2VydmljZS5nZW5lcmF0ZUFzc2Vzc21lbnRJbnN0YW5jZURUTyh0aGlzLmFzc2Vzc21lbnRJZCwgdGhpcy5wcmVkZWZpbmVkQXNzZXNzbWVudEluc3RhbmNlLCB0aGlzLnNob3dUaW1lSW5wdXQgPyB0aGlzLmR1cmF0aW9uU2Vjb25kcyA6IHVuZGVmaW5lZCk7XHJcbiAgICB0aGlzLmFzc2Vzc21lbnRNYWtlclNlcnZpY2UuY3JlYXRlQXNzZXNzbWVudEluc3RhbmNlKHBheWxvYWQpLnN1YnNjcmliZSh7XHJcbiAgICAgIG5leHQ6IChyZXM6IGFueSkgPT4ge1xyXG4gICAgICAgIHRoaXMuYXNzZXNzbWVudEluc3RhbmNlSWQgPSByZXM7XHJcbiAgICAgICAgdGhpcy5pc1N1Ym1pdHRpbmcgPSBmYWxzZTtcclxuICAgICAgICB0aGlzLmFzc2Vzc21lbnRJbnN0YW5jZUlkQ2hhbmdlLmVtaXQocmVzKTtcclxuICAgICAgICAvLyB0aGlzLnNuYWNrYmFyTWVzc2FnZS5lbWl0KHsgbWVzc2FnZTogdGhpcy5sYWJlbENvbmZpZ1snQ09NTU9OU19BU1NFU1NNRU5ULlRPQVNULkFTU0VTU01FTlRfUFVCTElTSEVEX1NVQ0NFU1MnXSwgdHlwZTogJ3N1Y2Nlc3MnIH0pO1xyXG4gICAgICB9LFxyXG4gICAgICBlcnJvcjogZXJyb3IgPT4ge1xyXG4gICAgICAgIHRoaXMuaXNTdWJtaXR0aW5nID0gZmFsc2U7XHJcbiAgICAgICAgdGhpcy5zbmFja2Jhck1lc3NhZ2UuZW1pdCh7IG1lc3NhZ2U6IHRoaXMubGFiZWxDb25maWdbJ0NPTU1PTlNfQVNTRVNTTUVOVC5UT0FTVC5FUlJPUl9ERUZBVUxUJ10sIHR5cGU6ICdlcnJvcicgfSk7XHJcbiAgICAgICAgdGhyb3cgeyBlcnJvciwgbWV0aG9kOiAnUE9TVCcsIHBheWxvYWQgfVxyXG4gICAgICB9XHJcbiAgICB9KVxyXG4gIH1cclxuXHJcbiAgZGlzY2FyZENoYW5nZXMoKSB7XHJcbiAgICBpZiAodGhpcy5hc3Nlc3NtZW50SWQpIHtcclxuICAgICAgdGhpcy5zaG93TG9hZGVyID0gdHJ1ZTtcclxuICAgICAgdGhpcy5sb2FkQXNzZXNzbWVudERhdGEoKTtcclxuICAgIH0gZWxzZSB7XHJcbiAgICAgIC8vIFJlc2V0IGZ1bGx5IHRvIGVtcHR5IGlmIG5vIGFzc2Vzc21lbnQgZXhpc3RlZCB5ZXRcclxuICAgICAgdGhpcy5hc3Nlc3NtZW50UXVlc3Rpb25QYXBlckRhdGEgPSB7IGlkOiAwLCBxdWVzdGlvblBhcGVyU2VjdGlvbkxpc3Q6IFtdIH07XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICBnZXRRdWVzdGlvbkZyb21CYW5rKHF1ZXN0aW9uSWQ/OiBudW1iZXIpIHtcclxuICAgIHJldHVybiB0aGlzLnF1ZXN0aW9uQmFuaz8uW3F1ZXN0aW9uSWQgfHwgLTFdO1xyXG4gIH1cclxuXHJcbiAgdXBkYXRlQXNzZXNzbWVudFF1ZXN0aW9uUGFwZXJEYXRhKG5ld0RhdGE6IGFueSkge1xyXG4gICAgY29uc3QgZXhwYW5kZWRMaXN0ID0gdGhpcy5hc3Nlc3NtZW50UXVlc3Rpb25QYXBlckRhdGE/LnF1ZXN0aW9uUGFwZXJTZWN0aW9uTGlzdFxyXG4gICAgICA/LmZpbHRlcigoczogYW55KSA9PiBzLmlzRXhwYW5kZWQpXHJcbiAgICAgID8ubWFwKChzOiBhbnksIGlkeDogbnVtYmVyKSA9PiBzLmlkID8gcy5pZC50b1N0cmluZygpIDogYCR7aWR4fV8ke3MucXBzTmFtZT8uWzBdPy50ZXh0fWApO1xyXG5cclxuICAgIHRoaXMuYXNzZXNzbWVudFF1ZXN0aW9uUGFwZXJEYXRhID0gbmV3RGF0YSB8fCB7IGlkOiAwLCBxdWVzdGlvblBhcGVyU2VjdGlvbkxpc3Q6IFtdIH07XHJcbiAgICB0aGlzLmZpbHRlckluYWN0aXZlU2VjdGlvbnNBbmRRdWVzdGlvbnMoKTtcclxuXHJcbiAgICBpZiAoZXhwYW5kZWRMaXN0Py5sZW5ndGgpIHtcclxuICAgICAgdGhpcy5hc3Nlc3NtZW50UXVlc3Rpb25QYXBlckRhdGE/LnF1ZXN0aW9uUGFwZXJTZWN0aW9uTGlzdD8uZm9yRWFjaCgoczogYW55LCBpZHg6IG51bWJlcikgPT4ge1xyXG4gICAgICAgIGNvbnN0IGtleSA9IHMuaWQgPyBzLmlkLnRvU3RyaW5nKCkgOiBgJHtpZHh9XyR7cy5xcHNOYW1lPy5bMF0/LnRleHR9YDtcclxuICAgICAgICBpZiAoZXhwYW5kZWRMaXN0LmluY2x1ZGVzKGtleSkpIHtcclxuICAgICAgICAgIHMuaXNFeHBhbmRlZCA9IHRydWU7XHJcbiAgICAgICAgfVxyXG4gICAgICB9KTtcclxuICAgIH1cclxuICB9XHJcblxyXG4gIGZpbHRlckluYWN0aXZlU2VjdGlvbnNBbmRRdWVzdGlvbnMoKSB7XHJcbiAgICB0aGlzLmFzc2Vzc21lbnRRdWVzdGlvblBhcGVyRGF0YS5xdWVzdGlvblBhcGVyU2VjdGlvbkxpc3QgPSBzb3J0QnlPcmRlcihcclxuICAgICAgdGhpcy5hc3Nlc3NtZW50UXVlc3Rpb25QYXBlckRhdGE/LnF1ZXN0aW9uUGFwZXJTZWN0aW9uTGlzdD8uZmlsdGVyKChzZWN0aW9uOiBhbnkpID0+IHNlY3Rpb24uaXNBY3RpdmUgIT09IGZhbHNlKVxyXG4gICAgKTtcclxuXHJcbiAgICB0aGlzLmFzc2Vzc21lbnRRdWVzdGlvblBhcGVyRGF0YT8ucXVlc3Rpb25QYXBlclNlY3Rpb25MaXN0Py5mb3JFYWNoKChzZWN0aW9uOiBhbnkpID0+IHtcclxuICAgICAgc2VjdGlvbi5zZWN0aW9uUXVlc3Rpb25zTGlzdCA9IHNvcnRCeU9yZGVyKFxyXG4gICAgICAgIHNlY3Rpb24uc2VjdGlvblF1ZXN0aW9uc0xpc3Q/LmZpbHRlcigocXVlc3Rpb246IGFueSkgPT4gcXVlc3Rpb24uaXNBY3RpdmUgIT09IGZhbHNlKVxyXG4gICAgICApO1xyXG4gICAgfSk7XHJcblxyXG4gICAgaWYgKHRoaXMucXVlc3Rpb25CYW5rKSB7XHJcbiAgICAgIE9iamVjdC5rZXlzKHRoaXMucXVlc3Rpb25CYW5rKS5mb3JFYWNoKGtleSA9PiB7XHJcbiAgICAgICAgY29uc3QgcXVlc3Rpb24gPSB0aGlzLnF1ZXN0aW9uQmFua1trZXkgYXMgYW55XTtcclxuICAgICAgICBpZiAocXVlc3Rpb24/LmRlZmF1bHRPcHRpb25zTGlzdCkge1xyXG4gICAgICAgICAgcXVlc3Rpb24uZGVmYXVsdE9wdGlvbnNMaXN0ID0gc29ydEJ5T3JkZXIoXHJcbiAgICAgICAgICAgIHF1ZXN0aW9uLmRlZmF1bHRPcHRpb25zTGlzdC5maWx0ZXIoKG9wdDogYW55KSA9PiBvcHQuaXNBY3RpdmUgIT09IGZhbHNlKVxyXG4gICAgICAgICAgKTtcclxuICAgICAgICB9XHJcbiAgICAgIH0pO1xyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgY2FwaXRhbGl6ZUZpcnN0KHRleHQ6IHN0cmluZyB8IHVuZGVmaW5lZCk6IHN0cmluZyB7XHJcbiAgICBpZiAoIXRleHQpIHJldHVybiAnJztcclxuICAgIHJldHVybiB0ZXh0LnRvTG93ZXJDYXNlKCkuc3BsaXQoJyAnKS5tYXAod29yZCA9PiB3b3JkLmNoYXJBdCgwKS50b1VwcGVyQ2FzZSgpICsgd29yZC5zbGljZSgxKSkuam9pbignICcpO1xyXG4gIH1cclxuXHJcbiAgZ2V0U2tpbGxzTGlzdCgpIHtcclxuICAgIGNvbnN0IHBhcmFtcyA9IHtcclxuICAgICAgZmV0Y2hDb250ZXh0RGF0YU9ubHk6IGZhbHNlLFxyXG4gICAgICBwYWdlOiAwLFxyXG4gICAgICBzaXplOiAyMCxcclxuICAgICAgZGlyZWN0aW9uOiAnQVNDJ1xyXG4gICAgfVxyXG4gICAgdGhpcy5hc3Nlc3NtZW50TWFrZXJTZXJ2aWNlLmdldFJlZkRhdGFCeUNvZGUoJ1JFRi5BU1NFU1NNRU5UX1FVRVNUSU9OX1NLSUxMJywgcGFyYW1zKS5zdWJzY3JpYmUoe1xyXG4gICAgICBuZXh0OiAocmVzOiBhbnkpID0+IHtcclxuICAgICAgICB0aGlzLnNraWxsc0xpc3QgPSByZXM/LmVsZW1lbnRzO1xyXG4gICAgICB9LFxyXG4gICAgICBlcnJvcjogKGVycm9yOiBhbnkpID0+IHtcclxuICAgICAgICBjb25zb2xlLmVycm9yKGVycm9yKTtcclxuICAgICAgICB0aHJvdyB7IGVycm9yLCBtZXRob2Q6ICdHRVQnLCBwYXlsb2FkOiB0aGlzLmFzc2Vzc21lbnRJZCB9XHJcbiAgICAgIH1cclxuICAgIH0pXHJcbiAgfVxyXG5cclxuICB0cmFja0J5U2VjdGlvbklkKGluZGV4OiBudW1iZXIsIHNlY3Rpb246IGFueSkge1xyXG4gICAgcmV0dXJuIHNlY3Rpb24/LmlkICE9IG51bGwgPyAncycgKyBzZWN0aW9uLmlkIDogJ2knICsgaW5kZXg7XHJcbiAgfVxyXG5cclxuICB0cmFja0J5U2VjdGlvblF1ZXN0aW9uKGluZGV4OiBudW1iZXIsIHNxOiBhbnkpIHtcclxuICAgIGlmIChzcT8ucXVlc3Rpb25JZCAhPSBudWxsKSByZXR1cm4gJ3EnICsgc3EucXVlc3Rpb25JZDtcclxuICAgIGlmIChzcT8uaWQgIT0gbnVsbCkgcmV0dXJuICdzJyArIHNxLmlkO1xyXG4gICAgcmV0dXJuICdpJyArIGluZGV4O1xyXG4gIH1cclxuXHJcbiAgcHJpdmF0ZSBjb2xsZWN0RXhpc3RpbmdRdWVzdGlvbklkcygpOiBTZXQ8bnVtYmVyPiB7XHJcbiAgICBjb25zdCBpZHMgPSBuZXcgU2V0PG51bWJlcj4oKTtcclxuICAgIHRoaXMuYXNzZXNzbWVudFF1ZXN0aW9uUGFwZXJEYXRhPy5xdWVzdGlvblBhcGVyU2VjdGlvbkxpc3Q/LmZvckVhY2goc2VjdGlvbiA9PiB7XHJcbiAgICAgIGlmIChzZWN0aW9uLmlzQWN0aXZlID09PSBmYWxzZSkgcmV0dXJuO1xyXG4gICAgICBzZWN0aW9uLnNlY3Rpb25RdWVzdGlvbnNMaXN0Py5mb3JFYWNoKHNxID0+IHtcclxuICAgICAgICBpZiAoc3EuaXNBY3RpdmUgPT09IGZhbHNlKSByZXR1cm47XHJcbiAgICAgICAgY29uc3QgcUlkID0gc3EucXVlc3Rpb25JZCB8fCBzcS5xdWVzdGlvbj8uaWQ7XHJcbiAgICAgICAgaWYgKHFJZCkgaWRzLmFkZChxSWQpO1xyXG4gICAgICB9KTtcclxuICAgIH0pO1xyXG4gICAgcmV0dXJuIGlkcztcclxuICB9XHJcblxyXG4gIG9wZW5RdWVzdGlvbkJhbmtQaWNrZXIoc2VjdGlvbj86IFF1ZXN0aW9uUGFwZXJTZWN0aW9uKTogdm9pZCB7XHJcbiAgICBjb25zdCBleGlzdGluZ1F1ZXN0aW9uSWRzID0gdGhpcy5jb2xsZWN0RXhpc3RpbmdRdWVzdGlvbklkcygpO1xyXG4gICAgY29uc3QgY29uZmlnID0gdGhpcy5xdWVzdGlvbkJhbmtDb25maWcgfHwge1xyXG4gICAgICBkb21haW46IHRoaXMuZGVmYXVsdEFzc2Vzc21lbnREVE8/LmRvbWFpbixcclxuICAgICAgdGVuYW50OiB0aGlzLmRlZmF1bHRBc3Nlc3NtZW50RFRPPy50ZW5hbnRcclxuICAgIH07XHJcblxyXG4gICAgY29uc3QgZGlhbG9nUmVmID0gdGhpcy5kaWFsb2cub3BlbihRdWVzdGlvbkJhbmtQaWNrZXJDb21wb25lbnQsIHtcclxuICAgICAgYXV0b0ZvY3VzOiBmYWxzZSxcclxuICAgICAgcG9zaXRpb246IHsgcmlnaHQ6ICcwJyB9LFxyXG4gICAgICBtYXhXaWR0aDogJzEwMCUnLFxyXG4gICAgICB3aWR0aDogJzU1cmVtJyxcclxuICAgICAgaGVpZ2h0OiAnMTAwdmgnLFxyXG4gICAgICBwYW5lbENsYXNzOiBbJ2Fzc2Vzc21lbnQtZGlhbG9nJywgJ2Fzc2Vzc21lbnQtZGlhbG9nLXNsaWRlci1hbmltYXRpb24nXSxcclxuICAgICAgaGFzQmFja2Ryb3A6IHRydWUsXHJcbiAgICAgIGRhdGE6IHtcclxuICAgICAgICBxdWVzdGlvbkJhbmtDb25maWc6IGNvbmZpZyxcclxuICAgICAgICBleGlzdGluZ1F1ZXN0aW9uSWRzLFxyXG4gICAgICAgIGxhYmVsQ29uZmlnOiB0aGlzLmxhYmVsQ29uZmlnLFxyXG4gICAgICAgIGltYWdlQ29uZmlnOiB0aGlzLmltYWdlQ29uZmlnLFxyXG4gICAgICAgIHF1ZXN0aW9uVHlwZXM6IHRoaXMucXVlc3Rpb25UeXBlcyxcclxuICAgICAgICB0YXJnZXRTZWN0aW9uTmFtZTogc2VjdGlvbj8ucXBzTmFtZT8uWzBdPy50ZXh0XHJcbiAgICAgIH1cclxuICAgIH0pO1xyXG5cclxuICAgIGRpYWxvZ1JlZi5hZnRlckNsb3NlZCgpLnN1YnNjcmliZSgoc2VsZWN0ZWRRdWVzdGlvbnM6IEFzc2Vzc21lbnRRdWVzdGlvbltdKSA9PiB7XHJcbiAgICAgIGlmIChzZWxlY3RlZFF1ZXN0aW9ucz8ubGVuZ3RoKSB7XHJcbiAgICAgICAgdGhpcy5pbXBvcnRRdWVzdGlvbnNUb1NlY3Rpb24oc2VjdGlvbiwgc2VsZWN0ZWRRdWVzdGlvbnMpO1xyXG4gICAgICB9XHJcbiAgICB9KTtcclxuICB9XHJcblxyXG4gIHByaXZhdGUgaW1wb3J0UXVlc3Rpb25zVG9TZWN0aW9uKFxyXG4gICAgc2VjdGlvbjogUXVlc3Rpb25QYXBlclNlY3Rpb24gfCB1bmRlZmluZWQsXHJcbiAgICBxdWVzdGlvbnM6IEFzc2Vzc21lbnRRdWVzdGlvbltdXHJcbiAgKTogdm9pZCB7XHJcbiAgICBpZiAoIXRoaXMuYXNzZXNzbWVudFF1ZXN0aW9uUGFwZXJEYXRhKSB7XHJcbiAgICAgIHRoaXMuYXNzZXNzbWVudFF1ZXN0aW9uUGFwZXJEYXRhID0geyBpZDogMCwgcXVlc3Rpb25QYXBlclNlY3Rpb25MaXN0OiBbXSB9O1xyXG4gICAgfVxyXG4gICAgaWYgKCF0aGlzLmFzc2Vzc21lbnRRdWVzdGlvblBhcGVyRGF0YS5xdWVzdGlvblBhcGVyU2VjdGlvbkxpc3QpIHtcclxuICAgICAgdGhpcy5hc3Nlc3NtZW50UXVlc3Rpb25QYXBlckRhdGEucXVlc3Rpb25QYXBlclNlY3Rpb25MaXN0ID0gW107XHJcbiAgICB9XHJcblxyXG4gICAgaWYgKCFzZWN0aW9uKSB7XHJcbiAgICAgIGNvbnN0IGxpc3QgPSB0aGlzLmFzc2Vzc21lbnRRdWVzdGlvblBhcGVyRGF0YS5xdWVzdGlvblBhcGVyU2VjdGlvbkxpc3Q7XHJcbiAgICAgIGNvbnN0IGxhc3RPcmRlciA9IGxpc3QubGVuZ3RoID8gKGxpc3RbbGlzdC5sZW5ndGggLSAxXS5vcmRlck5vIHx8IDApIDogMDtcclxuICAgICAgc2VjdGlvbiA9IHRoaXMuYXNzZXNzbWVudEJ1aWxkZXJTZXJ2aWNlLmNyZWF0ZU5ld1NlY3Rpb24obGFzdE9yZGVyICsgMSk7XHJcbiAgICAgIHRoaXMuYXNzZXNzbWVudFF1ZXN0aW9uUGFwZXJEYXRhLnF1ZXN0aW9uUGFwZXJTZWN0aW9uTGlzdC5wdXNoKHNlY3Rpb24pO1xyXG4gICAgfVxyXG5cclxuICAgIGlmICghc2VjdGlvbi5zZWN0aW9uUXVlc3Rpb25zTGlzdCkge1xyXG4gICAgICBzZWN0aW9uLnNlY3Rpb25RdWVzdGlvbnNMaXN0ID0gW107XHJcbiAgICB9XHJcblxyXG4gICAgcXVlc3Rpb25zLmZvckVhY2gocXVlc3Rpb24gPT4ge1xyXG4gICAgICBjb25zdCBjbGVhblF1ZXN0aW9uID0gcmVtb3ZlS2V5RGVlcChxdWVzdGlvbiwgJ3V1aWQnKTtcclxuICAgICAgaWYgKGNsZWFuUXVlc3Rpb24uaWQpIHtcclxuICAgICAgICB0aGlzLnF1ZXN0aW9uQmFua1tjbGVhblF1ZXN0aW9uLmlkXSA9IGNsZWFuUXVlc3Rpb247XHJcbiAgICAgIH1cclxuICAgICAgY29uc3Qgc2VjdGlvblF1ZXN0aW9uID0gdGhpcy5hc3Nlc3NtZW50QnVpbGRlclNlcnZpY2UuZ2VuZXJhdGVTZWN0aW9uUXVlc3Rpb24oY2xlYW5RdWVzdGlvbik7XHJcbiAgICAgIHNlY3Rpb25RdWVzdGlvbi5vcmRlck5vID0gKHNlY3Rpb24hLnNlY3Rpb25RdWVzdGlvbnNMaXN0Py5sZW5ndGggfHwgMCkgKyAxO1xyXG4gICAgICBzZWN0aW9uIS5zZWN0aW9uUXVlc3Rpb25zTGlzdD8ucHVzaChzZWN0aW9uUXVlc3Rpb24pO1xyXG4gICAgfSk7XHJcblxyXG4gICAgY29uc3Qgc3VjY2Vzc01zZyA9IHRoaXMubGFiZWxDb25maWdbJ0NPTU1PTlNfQVNTRVNTTUVOVC5UT0FTVC5RVUVTVElPTlNfSU1QT1JURURfU1VDQ0VTUyddIHx8ICdRdWVzdGlvbnMgaW1wb3J0ZWQgc3VjY2Vzc2Z1bGx5JztcclxuXHJcbiAgICBpZiAodGhpcy5hc3Nlc3NtZW50SWQpIHtcclxuICAgICAgdGhpcy5wYXRjaEFzc2Vzc21lbnRBbmRRdWVzdGlvblBhcGVyKHN1Y2Nlc3NNc2cpO1xyXG4gICAgfSBlbHNlIHtcclxuICAgICAgdGhpcy5jcmVhdGVBc3Nlc3NtZW50QW5kUXVlc3Rpb25QYXBlck9uSW1wb3J0KHN1Y2Nlc3NNc2cpO1xyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgcHJpdmF0ZSBjcmVhdGVBc3Nlc3NtZW50QW5kUXVlc3Rpb25QYXBlck9uSW1wb3J0KHN1Y2Nlc3NNZXNzYWdlPzogc3RyaW5nKTogdm9pZCB7XHJcbiAgICBjb25zdCBwYXlsb2FkID0ge1xyXG4gICAgICBxdWVzdGlvblBhcGVyOiB0aGlzLmFzc2Vzc21lbnRCdWlsZGVyU2VydmljZS5nZW5lcmF0ZVF1ZXN0aW9uUGFwZXJEVE8odGhpcy5hc3Nlc3NtZW50UXVlc3Rpb25QYXBlckRhdGEsIHRoaXMucXVlc3Rpb25CYW5rKSxcclxuICAgICAgYXNzZXNzbWVudDogdGhpcy5hc3Nlc3NtZW50QnVpbGRlclNlcnZpY2UuZ2VuZXJhdGVBc3Nlc3NtZW50RFRPKHRoaXMuYXNzZXNzbWVudElkLCB0aGlzLmFzc2Vzc21lbnRRdWVzdGlvblBhcGVyRGF0YSwgdGhpcy5idWlsZFByb2N0b3JpbmdDb25maWdzKCkpLFxyXG4gICAgICAuLi50aGlzLmFzc2Vzc21lbnRCdWlsZGVyU2VydmljZS5idWlsZEluc3RhbmNlUGF0Y2godGhpcy5zaG93VGltZUlucHV0LCB0aGlzLmFzc2Vzc21lbnRJbnN0YW5jZUlkLCB0aGlzLmR1cmF0aW9uU2Vjb25kcylcclxuICAgIH07XHJcbiAgICB0aGlzLmFzc2Vzc21lbnRNYWtlclNlcnZpY2UuY3JlYXRlQXNzZXNzbWVudEFuZFF1ZXN0aW9uUGFwZXIocGF5bG9hZCkuc3Vic2NyaWJlKHtcclxuICAgICAgbmV4dDogKHJlczogYW55KSA9PiB7XHJcbiAgICAgICAgaWYgKHJlcz8uYXNzZXNzbWVudD8uaWQpIHtcclxuICAgICAgICAgIHRoaXMuYXNzZXNzbWVudElkID0gcmVzLmFzc2Vzc21lbnQuaWQ7XHJcbiAgICAgICAgICB0aGlzLmFzc2Vzc21lbnRJZENoYW5nZS5lbWl0KHRoaXMuYXNzZXNzbWVudElkKTtcclxuICAgICAgICB9XHJcbiAgICAgICAgdGhpcy5xdWVzdGlvbkJhbmsgPSB7XHJcbiAgICAgICAgICAuLi50aGlzLnF1ZXN0aW9uQmFuayxcclxuICAgICAgICAgIC4uLihyZXM/LnF1ZXN0aW9uTWFwIHx8IHt9KVxyXG4gICAgICAgIH07XHJcbiAgICAgICAgdGhpcy51cGRhdGVBc3Nlc3NtZW50UXVlc3Rpb25QYXBlckRhdGEocmVzPy5xdWVzdGlvblBhcGVyKTtcclxuICAgICAgICB0aGlzLmdlbmVyYXRlUXVlc3Rpb25CYW5rKCk7XHJcbiAgICAgICAgdGhpcy5jaGVja0Fzc2Vzc21lbnRRdWVzdGlvbnNMb2NrZWQoKTtcclxuICAgICAgICBpZiAoc3VjY2Vzc01lc3NhZ2UpIHtcclxuICAgICAgICAgIHRoaXMuc25hY2tiYXJNZXNzYWdlLmVtaXQoeyBtZXNzYWdlOiBzdWNjZXNzTWVzc2FnZSwgdHlwZTogJ3N1Y2Nlc3MnIH0pO1xyXG4gICAgICAgIH1cclxuICAgICAgfSxcclxuICAgICAgZXJyb3I6IChlcnJvcjogYW55KSA9PiB7XHJcbiAgICAgICAgdGhpcy5zbmFja2Jhck1lc3NhZ2UuZW1pdCh7IG1lc3NhZ2U6IHRoaXMubGFiZWxDb25maWdbJ0NPTU1PTlNfQVNTRVNTTUVOVC5UT0FTVC5FUlJPUl9ERUZBVUxUJ10gfHwgJ0ZhaWxlZCB0byBzYXZlIGltcG9ydGVkIHF1ZXN0aW9ucycsIHR5cGU6ICdlcnJvcicgfSk7XHJcbiAgICAgIH1cclxuICAgIH0pO1xyXG4gIH1cclxufVxyXG4iLCI8ZGl2ICpuZ0lmPVwiY29uZmlnc0xvYWRlZCAmJiAhc2hvd0xvYWRlcjsgZWxzZSBsb2FkZXJcIiBjbGFzcz1cImNvbC0xMiBoLTEwMFwiPlxyXG4gICAgPGRpdiBjbGFzcz1cImNvbC0xMiBoLTEwMCBweS00XCIgW2NsYXNzLmhlaWdodC13aXRob3V0LWZvb3Rlcl09XCJzaG93Rm9vdGVyXCI+XHJcbiAgICAgICAgPG5nLWNvbnRhaW5lciAqbmdJZj1cImFzc2Vzc21lbnRRdWVzdGlvblBhcGVyRGF0YT8ucXVlc3Rpb25QYXBlclNlY3Rpb25MaXN0Py5sZW5ndGhcIj5cclxuICAgICAgICAgICAgPGRpdiAqbmdJZj1cInNob3dQcm9jdG9yaW5nVG9nZ2xlIHx8IHNob3dUaW1lSW5wdXRcIlxyXG4gICAgICAgICAgICAgICAgY2xhc3M9XCJkLWZsZXggYWxpZ24taXRlbXMtY2VudGVyIGp1c3RpZnktY29udGVudC1lbmQgZmxleC13cmFwIGdhcC00IG1iLTNcIj5cclxuICAgICAgICAgICAgICAgIDxkaXYgKm5nSWY9XCJzaG93VGltZUlucHV0XCIgY2xhc3M9XCJkLWZsZXggYWxpZ24taXRlbXMtY2VudGVyIGdhcC0yXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgPGxhYmVsIGZvcj1cImR1cmF0aW9uSW5wdXRcIiBjbGFzcz1cImFzc2Vzc21lbnQtdGV4dC1tZWRpdW0tMTMgYXNzZXNzbWVudC10ZXh0LWdyZXktdGVuIG1iLTAgY3Vyc29yLXBvaW50ZXJcIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAge3sgbGFiZWxDb25maWdbJ0NPTU1PTlNfQVNTRVNTTUVOVC5MQUJFTC5EVVJBVElPTiddIH19XHJcbiAgICAgICAgICAgICAgICAgICAgPC9sYWJlbD5cclxuICAgICAgICAgICAgICAgICAgICA8aW5wdXQgdHlwZT1cIm51bWJlclwiIGlkPVwiZHVyYXRpb25JbnB1dFwiIG1pbj1cIjFcIiBbKG5nTW9kZWwpXT1cImR1cmF0aW9uTWludXRlc1wiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIChrZXlkb3duKT1cImJsb2NrTmVnYXRpdmVLZXlzKCRldmVudClcIiAobmdNb2RlbENoYW5nZSk9XCJkdXJhdGlvbk1pbnV0ZXMgPSAkZXZlbnQgPiAwID8gJGV2ZW50IDogbnVsbFwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIFtwbGFjZWhvbGRlcl09XCIwXCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgY2xhc3M9XCJmb3JtLWNvbnRyb2wgZm9ybS1jb250cm9sLXNtIGFzc2Vzc21lbnQtYm9yZGVyLXJhZGl1cy10d28gYXNzZXNzbWVudC10ZXh0LXJlZ3VsYXItMTNcIiBzdHlsZT1cIndpZHRoOiA0cmVtO1wiPlxyXG4gICAgICAgICAgICAgICAgICAgIDxzcGFuIGNsYXNzPVwiYXNzZXNzbWVudC10ZXh0LXJlZ3VsYXItMTMgYXNzZXNzbWVudC10ZXh0LWdyZXktc2V2ZW5cIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAge3sgbGFiZWxDb25maWdbJ0NPTU1PTlNfQVNTRVNTTUVOVC5MQUJFTC5NSU5VVEVTJ10gfX1cclxuICAgICAgICAgICAgICAgICAgICA8L3NwYW4+XHJcbiAgICAgICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgICAgIDxkaXYgKm5nSWY9XCJzaG93UHJvY3RvcmluZ1RvZ2dsZVwiIGNsYXNzPVwiZC1mbGV4IGFsaWduLWl0ZW1zLWNlbnRlciBnYXAtMlwiPlxyXG4gICAgICAgICAgICAgICAgICAgIDxsYWJlbCBmb3I9XCJwcm9jdG9yaW5nVG9nZ2xlXCIgY2xhc3M9XCJhc3Nlc3NtZW50LXRleHQtbWVkaXVtLTEzIGFzc2Vzc21lbnQtdGV4dC1ncmV5LXRlbiBtYi0wIGN1cnNvci1wb2ludGVyXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIHt7IGxhYmVsQ29uZmlnWydDT01NT05TX0FTU0VTU01FTlQuTEFCRUwuRU5BQkxFX1BST0NUT1JJTkcnXSB9fVxyXG4gICAgICAgICAgICAgICAgICAgIDwvbGFiZWw+XHJcbiAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImZvcm0tY2hlY2sgZm9ybS1zd2l0Y2ggbS0wXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIDxpbnB1dCB0eXBlPVwiY2hlY2tib3hcIiBpZD1cInByb2N0b3JpbmdUb2dnbGVcIiBjbGFzcz1cImZvcm0tY2hlY2staW5wdXQgY3Vyc29yLXBvaW50ZXJcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgWyhuZ01vZGVsKV09XCJwcm9jdG9yaW5nRW5hYmxlZFwiPlxyXG4gICAgICAgICAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICA8bWF0LWFjY29yZGlvbiBtdWx0aT1cInRydWVcIiBjZGtEcm9wTGlzdCAoY2RrRHJvcExpc3REcm9wcGVkKT1cImRyb3BTZWN0aW9uKCRldmVudClcIj5cclxuICAgICAgICAgICAgICAgIDxtYXQtZXhwYW5zaW9uLXBhbmVsIFtoaWRlVG9nZ2xlXT1cInRydWVcIiAjcGFuZWw9XCJtYXRFeHBhbnNpb25QYW5lbFwiIFtleHBhbmRlZF09XCJzZWN0aW9uLmlzRXhwYW5kZWRcIlxyXG4gICAgICAgICAgICAgICAgICAgIChvcGVuZWQpPVwic2VjdGlvbi5pc0V4cGFuZGVkID0gdHJ1ZVwiIChjbG9zZWQpPVwic2VjdGlvbi5pc0V4cGFuZGVkID0gZmFsc2VcIlxyXG4gICAgICAgICAgICAgICAgICAgIGNsYXNzPVwibWItNCBib3JkZXItMCBvdmVyZmxvdy1oaWRkZW4gYXNzZXNzbWVudC1wYW5lbCBzaGFkb3ctbm9uZSBiZy10cmFuc3BhcmVudFwiIGNka0RyYWdcclxuICAgICAgICAgICAgICAgICAgICAqbmdGb3I9XCJsZXQgc2VjdGlvbiBvZiBhc3Nlc3NtZW50UXVlc3Rpb25QYXBlckRhdGE/LnF1ZXN0aW9uUGFwZXJTZWN0aW9uTGlzdDsgbGV0IHNlY3Rpb25JbmRleCA9IGluZGV4OyB0cmFja0J5OiB0cmFja0J5U2VjdGlvbklkXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgPCEtLSBTZWN0aW9uIEhlYWRlciAtLT5cclxuICAgICAgICAgICAgICAgICAgICA8bWF0LWV4cGFuc2lvbi1wYW5lbC1oZWFkZXIgY2xhc3M9XCJjb2wtMTIgcC0wIGgtYXV0byBiZy10cmFuc3BhcmVudFwiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiZC1mbGV4IGNvbC0xMiBhbGlnbi1pdGVtcy1jZW50ZXIgZ2FwLW1kLTMgZ2FwLTJcIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxpbWcgY2RrRHJhZ0hhbmRsZSBbc3JjXT1cImltYWdlQ29uZmlnWydDT01NT05TX0FTU0VTU01FTlQuSUNPTi5EUkFHX0RST1AnXVwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY2xhc3M9XCJjdXJzb3ItZ3JhYlwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKGVycm9yKT1cImltYWdlRXJyb3JIYW5kbGVyKCRldmVudCwgJ2Fzc2V0cy9jb21tb25zLWFzc2Vzc21lbnQvaW1hZ2VzL2RyYWctZHJvcC5zdmcnKVwiIC8+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiZC1mbGV4IGFsaWduLWl0ZW1zLWNlbnRlciBnYXAtMiBmbGV4LWdyb3ctMSBqdXN0aWZ5LWNvbnRlbnQtYmV0d2VlbiBwLTMgYXNzZXNzbWVudC1ib3JkZXItcmFkaXVzLXR3byBhc3Nlc3NtZW50LWJvcmRlci10d28gYXNzZXNzbWVudC1iZy13aGl0ZVwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgW2NsYXNzLm5vLWJvcmRlcl09XCJzZWN0aW9uLmlzRXhwYW5kZWRcIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZGl2PlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiZC1mbGV4IGFsaWduLWl0ZW1zLWNlbnRlciBtYi0xXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8aW5wdXQgdHlwZT1cInRleHRcIiBbaWRdPVwiJ3NlY3Rpb25OYW1lSW5wdXRfJyArIHNlY3Rpb25JbmRleFwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY2xhc3M9XCJjb2wtbWQtMTEgY29sLTEwIGFzc2Vzc21lbnQtdGV4dC1zZW1pYm9sZC0xOCBib3JkZXItMCBvdXRsaW5lLTAgYmctdHJhbnNwYXJlbnQgcC0wIGlucHV0LWZvY3VzXCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBbKG5nTW9kZWwpXT1cInNlY3Rpb24ucXBzTmFtZVswXS50ZXh0XCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBbYXR0ci5zaXplXT1cIihzZWN0aW9uLnFwc05hbWVbMF0udGV4dD8ubGVuZ3RoIHx8IDEpXCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoY2xpY2spPVwiJGV2ZW50LnN0b3BQcm9wYWdhdGlvbigpXCIgKGtleWRvd24pPVwiJGV2ZW50LnN0b3BQcm9wYWdhdGlvbigpXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8aW1nIFtzcmNdPVwiaW1hZ2VDb25maWdbJ0NPTU1PTlNfQVNTRVNTTUVOVC5JQ09OLkVESVQnXVwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY2xhc3M9XCJhY3Rpb24taWNvbiBjdXJzb3ItcG9pbnRlclwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKGNsaWNrKT1cImZvY3VzU2VjdGlvbklucHV0KHNlY3Rpb25JbmRleCwgJGV2ZW50KVwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKGVycm9yKT1cImltYWdlRXJyb3JIYW5kbGVyKCRldmVudCwgJ2Fzc2V0cy9jb21tb25zLWFzc2Vzc21lbnQvaW1hZ2VzL3BlbmNpbC5zdmcnKVwiIC8+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8cCBjbGFzcz1cIm1iLTAgYXNzZXNzbWVudC10ZXh0LW1lZGl1bS0xMiBhc3Nlc3NtZW50LXRleHQtZ3JleS1zZXZlblwiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAge3tzZWN0aW9uPy5zZWN0aW9uUXVlc3Rpb25zTGlzdD8ubGVuZ3RoIHx8IDB9fVxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAge3tsYWJlbENvbmZpZ1snQ09NTU9OU19BU1NFU1NNRU5ULkxBQkVMLlFVRVNUSU9OUyddfX1cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9wPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJkLWZsZXggYWxpZ24taXRlbXMtY2VudGVyIGdhcC1tZC00IGdhcC0yXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxpbWcgW3NyY109XCJpbWFnZUNvbmZpZ1snQ09NTU9OU19BU1NFU1NNRU5ULklDT04uQVJST1dfRE9XTl9CTEFDSyddXCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFtuZ0NsYXNzXT1cInBhbmVsLmV4cGFuZGVkID8gJ2NoYW5nZS1kaXJlY3Rpb24nIDogJ2NoYW5nZS1kaXJlY3Rpb24tcmV2ZXJzZSdcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKGVycm9yKT1cImltYWdlRXJyb3JIYW5kbGVyKCRldmVudCwgJ2Fzc2V0cy9jb21tb25zLWFzc2Vzc21lbnQvaW1hZ2VzL2Fycm93LWRvd24tYmxhY2suc3ZnJylcIiAvPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8YnV0dG9uIFttYXRNZW51VHJpZ2dlckZvcl09XCJtZW51XCIgKGNsaWNrKT1cIiRldmVudC5zdG9wUHJvcGFnYXRpb24oKVwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjbGFzcz1cImJvcmRlci0wIGJnLXRyYW5zcGFyZW50IHB5LTJcIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxpbWcgW3NyY109XCJpbWFnZUNvbmZpZ1snQ09NTU9OU19BU1NFU1NNRU5ULklDT04uQUNUSU9OX0RPVFMnXVwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKGVycm9yKT1cImltYWdlRXJyb3JIYW5kbGVyKCRldmVudCwgJ2Fzc2V0cy9jb21tb25zLWFzc2Vzc21lbnQvaW1hZ2VzL2FjdGlvbi1kb3RzLnN2ZycpXCIgLz5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9idXR0b24+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxtYXQtbWVudSAjbWVudT1cIm1hdE1lbnVcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY2xhc3M9XCJtYXQtbWVudSBhc3Nlc3NtZW50LWJvcmRlci1yYWRpdXMtdHdvIGFzc2Vzc21lbnQtYm9yZGVyLWdyZXktZm91ci0xXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8YnV0dG9uIChjbGljayk9XCJhZGRJbnN0cnVjdGlvbihzZWN0aW9uKVwiIG1hdC1tZW51LWl0ZW1cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjbGFzcz1cInB5LTIgYXNzZXNzbWVudC10ZXh0LXNlbWlib2xkLTEyXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAge3tsYWJlbENvbmZpZ1snQ09NTU9OU19BU1NFU1NNRU5ULkxBQkVMLkFERF9JTlNUUlVDVElPTlMnXX19XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2J1dHRvbj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxidXR0b24gKGNsaWNrKT1cImR1cGxpY2F0ZVNlY3Rpb24oc2VjdGlvbi5pZClcIiBtYXQtbWVudS1pdGVtXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY2xhc3M9XCJweS0yIGFzc2Vzc21lbnQtdGV4dC1zZW1pYm9sZC0xMlwiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHt7bGFiZWxDb25maWdbJ0NPTU1PTlNfQVNTRVNTTUVOVC5MQUJFTC5EVVBMSUNBVEUnXX19XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2J1dHRvbj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxidXR0b24gKm5nSWY9XCIoYXNzZXNzbWVudFF1ZXN0aW9uUGFwZXJEYXRhPy5xdWVzdGlvblBhcGVyU2VjdGlvbkxpc3Q/Lmxlbmd0aCA/PyAwKSA+IG1pbmltdW1SZXF1aXJlZFNlY3Rpb25zXCIgXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKGNsaWNrKT1cImRlbGV0ZVNlY3Rpb24oc2VjdGlvbilcIiBtYXQtbWVudS1pdGVtXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY2xhc3M9XCJweS0yIGFzc2Vzc21lbnQtdGV4dC1zZW1pYm9sZC0xMiBhc3Nlc3NtZW50LXRleHQtZGFuZ2VyXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAge3tsYWJlbENvbmZpZ1snQ09NTU9OU19BU1NFU1NNRU5ULkxBQkVMLkRFTEVURSddfX1cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvYnV0dG9uPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L21hdC1tZW51PlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICAgICAgICAgIDwvbWF0LWV4cGFuc2lvbi1wYW5lbC1oZWFkZXI+XHJcblxyXG4gICAgICAgICAgICAgICAgICAgIDwhLS0gUXVlc3Rpb25zIGluc2lkZSBzZWN0aW9uIC0tPlxyXG4gICAgICAgICAgICAgICAgICAgIDxkaXYgY2RrRHJvcExpc3QgW2Nka0Ryb3BMaXN0RGF0YV09XCJzZWN0aW9uLnNlY3Rpb25RdWVzdGlvbnNMaXN0IHx8IFtdXCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgKGNka0Ryb3BMaXN0RHJvcHBlZCk9XCJkcm9wUXVlc3Rpb24oJGV2ZW50KVwiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNka0RyYWcgKm5nRm9yPVwibGV0IHNlY3Rpb25RdWVzdGlvbiBvZiBzZWN0aW9uLnNlY3Rpb25RdWVzdGlvbnNMaXN0OyBsZXQgaSA9IGluZGV4OyB0cmFja0J5OiB0cmFja0J5U2VjdGlvblF1ZXN0aW9uXCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNsYXNzPVwiZC1mbGV4IGFsaWduLWl0ZW1zLXN0YXJ0IGdhcC1tZC0zIGdhcC0yIG15LTMgb3ZlcmZsb3ctaGlkZGVuXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8aW1nIGNka0RyYWdIYW5kbGUgW3NyY109XCJpbWFnZUNvbmZpZ1snQ09NTU9OU19BU1NFU1NNRU5ULklDT04uRFJBR19EUk9QJ11cIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNsYXNzPVwiY3Vyc29yLWdyYWIgbXQtNFwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKGVycm9yKT1cImltYWdlRXJyb3JIYW5kbGVyKCRldmVudCwgJ2Fzc2V0cy9jb21tb25zLWFzc2Vzc21lbnQvaW1hZ2VzL2RyYWctZHJvcC5zdmcnKVwiIC8+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiZmxleC1ncm93LTEgcC0zIGFzc2Vzc21lbnQtYm9yZGVyLXR3byBhc3Nlc3NtZW50LWJvcmRlci1yYWRpdXMtdHdvIHF1ZXN0aW9uLWNvbnRhaW5lciBhc3Nlc3NtZW50LWJnLXdoaXRlXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGxpYi1xdWVzdGlvbi1kZXRhaWxzIFtzZWN0aW9uUXVlc3Rpb25dPVwic2VjdGlvblF1ZXN0aW9uXCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgW3F1ZXN0aW9uXT1cImdldFF1ZXN0aW9uRnJvbUJhbmsoc2VjdGlvblF1ZXN0aW9uLnF1ZXN0aW9uSWQpIHx8IHt9XCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgW3F1ZXN0aW9uQmFua109XCJxdWVzdGlvbkJhbmtcIiBbaW1hZ2VDb25maWddPVwiaW1hZ2VDb25maWdcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBbbGFiZWxDb25maWddPVwibGFiZWxDb25maWdcIiBbYWxsb3dEZWxldGVdPVwiKHNlY3Rpb24/LnNlY3Rpb25RdWVzdGlvbnNMaXN0Py5sZW5ndGggPz8gMCkgPiAxXCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgW2lzTG9ja2VkXT1cImlzUXVlc3Rpb25Mb2NrZWQoc2VjdGlvblF1ZXN0aW9uPy5xdWVzdGlvbklkKVwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChlZGl0UXVlc3Rpb24pPVwiY3JlYXRlRWRpdFF1ZXN0aW9uKHNlY3Rpb24sICRldmVudD8ucXVlc3Rpb25JZCwgJGV2ZW50Py5pc0NoaWxkUXVlc3Rpb24pXCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKGR1cGxpY2F0ZVF1ZXN0aW9uKT1cImR1cGxpY2F0ZVF1ZXN0aW9uKHNlY3Rpb24sICRldmVudClcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoZGVsZXRlUGFyZW50UXVlc3Rpb24pPVwiZGVsZXRlUGFyZW50UXVlc3Rpb24oJGV2ZW50KVwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChkZWxldGVDaGlsZFF1ZXN0aW9uKT1cImRlbGV0ZUNoaWxkUXVlc3Rpb24oJGV2ZW50Lm9wdGlvbiwgJGV2ZW50LmNoaWxkUXVlc3Rpb25JZClcIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2xpYi1xdWVzdGlvbi1kZXRhaWxzPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICAgICAgICAgIDwvZGl2PlxyXG5cclxuICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiY29sLTEyIHBzLTQgYm9yZGVyLWJvdHRvbSBwYi00IGQtZmxleCBhbGlnbi1pdGVtcy1jZW50ZXJcIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgPG5nLWNvbnRhaW5lciAqbmdJZj1cImVuYWJsZUltcG9ydEZyb21RdWVzdGlvbkJhbms7IGVsc2Ugc2luZ2xlQWRkUXVlc3Rpb25CdG5cIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxidXR0b24gW21hdE1lbnVUcmlnZ2VyRm9yXT1cImFkZFF1ZXN0aW9uTWVudVwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY2xhc3M9XCJhc3Nlc3NtZW50LXpvb20tYW5pbWF0aW9uIGFzc2Vzc21lbnQtYnV0dG9uLXBhZGRpbmcgZC1mbGV4IGFsaWduLWl0ZW1zLWNlbnRlciBqdXN0aWZ5LWNvbnRlbnQtY2VudGVyIGdhcC0yIGFzc2Vzc21lbnQtdGV4dC1wcmltYXJ5LW9uZSBhc3Nlc3NtZW50LWJnLXBhbGV0dGUtRURGM0ZEIGFzc2Vzc21lbnQtdGV4dC1zZW1pYm9sZC0xMiBvdXRsaW5lLTAgYXNzZXNzbWVudC1ib3JkZXItcmFkaXVzLXR3byBtdC0zIGJvcmRlci1BREM5RjZcIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8aW1nIFtzcmNdPVwiaW1hZ2VDb25maWdbJ0NPTU1PTlNfQVNTRVNTTUVOVC5JQ09OLlBMVVNfUFJJTUFSWSddXCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKGVycm9yKT1cImltYWdlRXJyb3JIYW5kbGVyKCRldmVudCwgJ2Fzc2V0cy9jb21tb25zLWFzc2Vzc21lbnQvaW1hZ2VzL3BsdXMtcHJpbWFyeS5zdmcnKVwiIC8+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAge3tsYWJlbENvbmZpZ1snQ09NTU9OU19BU1NFU1NNRU5ULkxBQkVMLkFERF9RVUVTVElPTiddIHx8ICdBZGQgUXVlc3Rpb24nfX1cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvYnV0dG9uPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPG1hdC1tZW51ICNhZGRRdWVzdGlvbk1lbnU9XCJtYXRNZW51XCIgeVBvc2l0aW9uPVwiYmVsb3dcIiBbb3ZlcmxhcFRyaWdnZXJdPVwiZmFsc2VcIiBjbGFzcz1cImFzc2Vzc21lbnQtY3RhLW1lbnUgYXNzZXNzbWVudC1ib3JkZXItcmFkaXVzLXR3b1wiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxidXR0b24gKGNsaWNrKT1cImNyZWF0ZUVkaXRRdWVzdGlvbihzZWN0aW9uKVwiIG1hdC1tZW51LWl0ZW0gY2xhc3M9XCJkLWZsZXggYWxpZ24taXRlbXMtY2VudGVyIGdhcC0yIHB5LTNcIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGltZyBbc3JjXT1cImltYWdlQ29uZmlnWydDT01NT05TX0FTU0VTU01FTlQuSUNPTi5QTFVTX1BSSU1BUlknXVwiIGNsYXNzPVwibWVudS1hY3Rpb24taWNvblwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoZXJyb3IpPVwiaW1hZ2VFcnJvckhhbmRsZXIoJGV2ZW50LCAnYXNzZXRzL2NvbW1vbnMtYXNzZXNzbWVudC9pbWFnZXMvcGx1cy1wcmltYXJ5LnN2ZycpXCIgLz5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHNwYW4gY2xhc3M9XCJhc3Nlc3NtZW50LXRleHQtc2VtaWJvbGQtMTMgbWVudS1pdGVtLXRleHRcIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHt7bGFiZWxDb25maWdbJ0NPTU1PTlNfQVNTRVNTTUVOVC5MQUJFTC5DUkVBVEVfTkVXX1FVRVNUSU9OJ10gfHwgJ0NyZWF0ZSBOZXcgUXVlc3Rpb24nfX1cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9zcGFuPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvYnV0dG9uPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxidXR0b24gKGNsaWNrKT1cIm9wZW5RdWVzdGlvbkJhbmtQaWNrZXIoc2VjdGlvbilcIiBtYXQtbWVudS1pdGVtIGNsYXNzPVwiZC1mbGV4IGFsaWduLWl0ZW1zLWNlbnRlciBnYXAtMiBweS0zXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxpbWcgW3NyY109XCJpbWFnZUNvbmZpZ1snQ09NTU9OU19BU1NFU1NNRU5ULklDT04uRklMRV9JTVBPUlQnXSB8fCAnYXNzZXRzL2NvbW1vbnMtYXNzZXNzbWVudC9pbWFnZXMvZmlsZS1pbXBvcnQuc3ZnJ1wiIGNsYXNzPVwibWVudS1hY3Rpb24taWNvblwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoZXJyb3IpPVwiaW1hZ2VFcnJvckhhbmRsZXIoJGV2ZW50LCAnYXNzZXRzL2NvbW1vbnMtYXNzZXNzbWVudC9pbWFnZXMvZmlsZS1pbXBvcnQuc3ZnJylcIiAvPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8c3BhbiBjbGFzcz1cImFzc2Vzc21lbnQtdGV4dC1zZW1pYm9sZC0xMyBtZW51LWl0ZW0tdGV4dFwiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAge3tsYWJlbENvbmZpZ1snQ09NTU9OU19BU1NFU1NNRU5ULkxBQkVMLklNUE9SVF9GUk9NX1FVRVNUSU9OX0JBTksnXSB8fCAnSW1wb3J0IGZyb20gUXVlc3Rpb24gQmFuayd9fVxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L3NwYW4+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9idXR0b24+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L21hdC1tZW51PlxyXG4gICAgICAgICAgICAgICAgICAgICAgICA8L25nLWNvbnRhaW5lcj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgPG5nLXRlbXBsYXRlICNzaW5nbGVBZGRRdWVzdGlvbkJ0bj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxidXR0b24gKGNsaWNrKT1cImNyZWF0ZUVkaXRRdWVzdGlvbihzZWN0aW9uKVwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY2xhc3M9XCJhc3Nlc3NtZW50LXpvb20tYW5pbWF0aW9uIGFzc2Vzc21lbnQtYnV0dG9uLXBhZGRpbmcgZC1mbGV4IGFsaWduLWl0ZW1zLWNlbnRlciBqdXN0aWZ5LWNvbnRlbnQtY2VudGVyIGdhcC0yIGFzc2Vzc21lbnQtdGV4dC1wcmltYXJ5LW9uZSBhc3Nlc3NtZW50LWJnLXBhbGV0dGUtRURGM0ZEIGFzc2Vzc21lbnQtdGV4dC1zZW1pYm9sZC0xMiBvdXRsaW5lLTAgYXNzZXNzbWVudC1ib3JkZXItcmFkaXVzLXR3byBtdC0zIGJvcmRlci1BREM5RjZcIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8aW1nIFtzcmNdPVwiaW1hZ2VDb25maWdbJ0NPTU1PTlNfQVNTRVNTTUVOVC5JQ09OLlBMVVNfUFJJTUFSWSddXCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKGVycm9yKT1cImltYWdlRXJyb3JIYW5kbGVyKCRldmVudCwgJ2Fzc2V0cy9jb21tb25zLWFzc2Vzc21lbnQvaW1hZ2VzL3BsdXMtcHJpbWFyeS5zdmcnKVwiIC8+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAge3tsYWJlbENvbmZpZ1snQ09NTU9OU19BU1NFU1NNRU5ULkxBQkVMLkFERF9BX1FVRVNUSU9OJ119fVxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9idXR0b24+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIDwvbmctdGVtcGxhdGU+XHJcbiAgICAgICAgICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgICAgICA8L21hdC1leHBhbnNpb24tcGFuZWw+XHJcbiAgICAgICAgICAgIDwvbWF0LWFjY29yZGlvbj5cclxuICAgICAgICAgICAgPGRpdiBjbGFzcz1cImQtZmxleCBhbGlnbi1pdGVtcy1jZW50ZXIgbXMtNFwiPlxyXG4gICAgICAgICAgICAgICAgPG5nLWNvbnRhaW5lciAqbmdJZj1cImVuYWJsZUltcG9ydEZyb21RdWVzdGlvbkJhbms7IGVsc2Ugc2luZ2xlQWRkU2VjdGlvbkJ0blwiPlxyXG4gICAgICAgICAgICAgICAgICAgIDxidXR0b24gW21hdE1lbnVUcmlnZ2VyRm9yXT1cImFkZFNlY3Rpb25NZW51XCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgY2xhc3M9XCJhc3Nlc3NtZW50LXpvb20tYW5pbWF0aW9uIGFzc2Vzc21lbnQtYnV0dG9uLXBhZGRpbmcgZC1mbGV4IGFsaWduLWl0ZW1zLWNlbnRlciBqdXN0aWZ5LWNvbnRlbnQtY2VudGVyIGdhcC0yIGFzc2Vzc21lbnQtdGV4dC1wcmltYXJ5LW9uZSBhc3Nlc3NtZW50LWJnLXBhbGV0dGUtRURGM0ZEIGFzc2Vzc21lbnQtdGV4dC1zZW1pYm9sZC0xMiBvdXRsaW5lLTAgYXNzZXNzbWVudC1ib3JkZXItcmFkaXVzLXR3byBtdC0zIGJvcmRlci1BREM5RjZcIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgPGltZyBbc3JjXT1cImltYWdlQ29uZmlnWydDT01NT05TX0FTU0VTU01FTlQuSUNPTi5BRERfU0VDVElPTiddXCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIChlcnJvcik9XCJpbWFnZUVycm9ySGFuZGxlcigkZXZlbnQsICdhc3NldHMvY29tbW9ucy1hc3Nlc3NtZW50L2ltYWdlcy9hZGQtc2VjdGlvbi5zdmcnKVwiIC8+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIHt7bGFiZWxDb25maWdbJ0NPTU1PTlNfQVNTRVNTTUVOVC5MQUJFTC5BRERfQV9TRUNUSU9OJ119fVxyXG4gICAgICAgICAgICAgICAgICAgIDwvYnV0dG9uPlxyXG4gICAgICAgICAgICAgICAgICAgIDxtYXQtbWVudSAjYWRkU2VjdGlvbk1lbnU9XCJtYXRNZW51XCIgeVBvc2l0aW9uPVwiYmVsb3dcIiBbb3ZlcmxhcFRyaWdnZXJdPVwiZmFsc2VcIiBjbGFzcz1cImFzc2Vzc21lbnQtY3RhLW1lbnUgYXNzZXNzbWVudC1ib3JkZXItcmFkaXVzLXR3b1wiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICA8YnV0dG9uIChjbGljayk9XCJjcmVhdGVFZGl0UXVlc3Rpb24oKVwiIG1hdC1tZW51LWl0ZW0gY2xhc3M9XCJkLWZsZXggYWxpZ24taXRlbXMtY2VudGVyIGdhcC0yIHB5LTNcIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxpbWcgW3NyY109XCJpbWFnZUNvbmZpZ1snQ09NTU9OU19BU1NFU1NNRU5ULklDT04uQUREX1NFQ1RJT04nXVwiIGNsYXNzPVwibWVudS1hY3Rpb24taWNvblwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKGVycm9yKT1cImltYWdlRXJyb3JIYW5kbGVyKCRldmVudCwgJ2Fzc2V0cy9jb21tb25zLWFzc2Vzc21lbnQvaW1hZ2VzL2FkZC1zZWN0aW9uLnN2ZycpXCIgLz5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxzcGFuIGNsYXNzPVwiYXNzZXNzbWVudC10ZXh0LXNlbWlib2xkLTEzIG1lbnUtaXRlbS10ZXh0XCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAge3tsYWJlbENvbmZpZ1snQ09NTU9OU19BU1NFU1NNRU5ULkxBQkVMLkNSRUFURV9ORVdfUVVFU1RJT04nXSB8fCAnQ3JlYXRlIE5ldyBRdWVzdGlvbid9fVxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9zcGFuPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICA8L2J1dHRvbj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgPGJ1dHRvbiAoY2xpY2spPVwib3BlblF1ZXN0aW9uQmFua1BpY2tlcigpXCIgbWF0LW1lbnUtaXRlbSBjbGFzcz1cImQtZmxleCBhbGlnbi1pdGVtcy1jZW50ZXIgZ2FwLTIgcHktM1wiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPGltZyBbc3JjXT1cImltYWdlQ29uZmlnWydDT01NT05TX0FTU0VTU01FTlQuSUNPTi5GSUxFX0lNUE9SVCddIHx8ICdhc3NldHMvY29tbW9ucy1hc3Nlc3NtZW50L2ltYWdlcy9maWxlLWltcG9ydC5zdmcnXCIgY2xhc3M9XCJtZW51LWFjdGlvbi1pY29uXCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoZXJyb3IpPVwiaW1hZ2VFcnJvckhhbmRsZXIoJGV2ZW50LCAnYXNzZXRzL2NvbW1vbnMtYXNzZXNzbWVudC9pbWFnZXMvZmlsZS1pbXBvcnQuc3ZnJylcIiAvPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPHNwYW4gY2xhc3M9XCJhc3Nlc3NtZW50LXRleHQtc2VtaWJvbGQtMTMgbWVudS1pdGVtLXRleHRcIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB7e2xhYmVsQ29uZmlnWydDT01NT05TX0FTU0VTU01FTlQuTEFCRUwuSU1QT1JUX0ZST01fUVVFU1RJT05fQkFOSyddIHx8ICdJbXBvcnQgZnJvbSBRdWVzdGlvbiBCYW5rJ319XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L3NwYW4+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIDwvYnV0dG9uPlxyXG4gICAgICAgICAgICAgICAgICAgIDwvbWF0LW1lbnU+XHJcbiAgICAgICAgICAgICAgICA8L25nLWNvbnRhaW5lcj5cclxuICAgICAgICAgICAgICAgIDxuZy10ZW1wbGF0ZSAjc2luZ2xlQWRkU2VjdGlvbkJ0bj5cclxuICAgICAgICAgICAgICAgICAgICA8YnV0dG9uIChjbGljayk9XCJjcmVhdGVFZGl0UXVlc3Rpb24oKVwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGNsYXNzPVwiYXNzZXNzbWVudC16b29tLWFuaW1hdGlvbiBhc3Nlc3NtZW50LWJ1dHRvbi1wYWRkaW5nIGQtZmxleCBhbGlnbi1pdGVtcy1jZW50ZXIganVzdGlmeS1jb250ZW50LWNlbnRlciBnYXAtMiBhc3Nlc3NtZW50LXRleHQtcHJpbWFyeS1vbmUgYXNzZXNzbWVudC1iZy1wYWxldHRlLUVERjNGRCBhc3Nlc3NtZW50LXRleHQtc2VtaWJvbGQtMTIgb3V0bGluZS0wIGFzc2Vzc21lbnQtYm9yZGVyLXJhZGl1cy10d28gbXQtMyBib3JkZXItQURDOUY2XCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIDxpbWcgW3NyY109XCJpbWFnZUNvbmZpZ1snQ09NTU9OU19BU1NFU1NNRU5ULklDT04uQUREX1NFQ1RJT04nXVwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAoZXJyb3IpPVwiaW1hZ2VFcnJvckhhbmRsZXIoJGV2ZW50LCAnYXNzZXRzL2NvbW1vbnMtYXNzZXNzbWVudC9pbWFnZXMvYWRkLXNlY3Rpb24uc3ZnJylcIiAvPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICB7e2xhYmVsQ29uZmlnWydDT01NT05TX0FTU0VTU01FTlQuTEFCRUwuQUREX0FfU0VDVElPTiddfX1cclxuICAgICAgICAgICAgICAgICAgICA8L2J1dHRvbj5cclxuICAgICAgICAgICAgICAgIDwvbmctdGVtcGxhdGU+XHJcbiAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgIDwvbmctY29udGFpbmVyPlxyXG4gICAgICAgIDxkaXYgKm5nSWY9XCIhYXNzZXNzbWVudFF1ZXN0aW9uUGFwZXJEYXRhPy5xdWVzdGlvblBhcGVyU2VjdGlvbkxpc3Q/Lmxlbmd0aFwiXHJcbiAgICAgICAgICAgIGNsYXNzPVwiaC0xMDAgZC1mbGV4IGZsZXgtY29sdW1uIGFsaWduLWl0ZW1zLWNlbnRlciBqdXN0aWZ5LWNvbnRlbnQtY2VudGVyIGdhcC0zXCI+XHJcbiAgICAgICAgICAgIDxpbWcgW3NyY109XCJpbWFnZUNvbmZpZ1snQ09NTU9OU19BU1NFU1NNRU5ULklDT04uTk9fUVVFU1RJT05TJ11cIiBjbGFzcz1cImNvbC1zbS1hdXRvIGNvbC02XCJcclxuICAgICAgICAgICAgICAgIChlcnJvcik9XCJpbWFnZUVycm9ySGFuZGxlcigkZXZlbnQsICdhc3NldHMvY29tbW9ucy1hc3Nlc3NtZW50L2ltYWdlcy9uby1xdWVzdGlvbnMuc3ZnJylcIiAvPlxyXG4gICAgICAgICAgICA8ZGl2IGNsYXNzPVwidGV4dC1jZW50ZXJcIj5cclxuICAgICAgICAgICAgICAgIDxwIGNsYXNzPVwibWItMSBhc3Nlc3NtZW50LXRleHQtbWVkaXVtLTE4XCI+e3tsYWJlbENvbmZpZ1snQ09NTU9OU19BU1NFU1NNRU5ULkxBQkVMLkFERF9DVVNUT01fUVVFU1RJT05TJ119fTwvcD5cclxuICAgICAgICAgICAgICAgIDxwIGNsYXNzPVwibWItMCBhc3Nlc3NtZW50LXRleHQtbWVkaXVtLTEyIGFzc2Vzc21lbnQtdGV4dC1ncmV5LXNldmVuXCI+XHJcbiAgICAgICAgICAgICAgICAgICAge3tsYWJlbENvbmZpZ1snQ09NTU9OU19BU1NFU1NNRU5ULkxBQkVMLkFERF9RVUVTVElPTl9ERVNDJ119fTwvcD5cclxuICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJkLWZsZXggYWxpZ24taXRlbXMtY2VudGVyXCI+XHJcbiAgICAgICAgICAgICAgICA8bmctY29udGFpbmVyICpuZ0lmPVwiZW5hYmxlSW1wb3J0RnJvbVF1ZXN0aW9uQmFuazsgZWxzZSBzaW5nbGVFbXB0eUFkZEJ0blwiPlxyXG4gICAgICAgICAgICAgICAgICAgIDxidXR0b24gW21hdE1lbnVUcmlnZ2VyRm9yXT1cImVtcHR5QWRkTWVudVwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGNsYXNzPVwiYXNzZXNzbWVudC1idXR0b24tcGFkZGluZyBhc3Nlc3NtZW50LWJvcmRlci1yYWRpdXMtdHdvIGQtZmxleCBhbGlnbi1pdGVtcy1jZW50ZXIgZ2FwLTIgYXNzZXNzbWVudC1iZy1wYWxldHRlLUVERjNGRCBhc3Nlc3NtZW50LXRleHQtcHJpbWFyeS1vbmUgYXNzZXNzbWVudC10ZXh0LXNlbWlib2xkLTEyIGJvcmRlci0wIGFzc2Vzc21lbnQtem9vbS1hbmltYXRpb25cIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgPGltZyBbc3JjXT1cImltYWdlQ29uZmlnWydDT01NT05TX0FTU0VTU01FTlQuSUNPTi5QTFVTX1BSSU1BUlknXVwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAoZXJyb3IpPVwiaW1hZ2VFcnJvckhhbmRsZXIoJGV2ZW50LCAnYXNzZXRzL2NvbW1vbnMtYXNzZXNzbWVudC9pbWFnZXMvcGx1cy1wcmltYXJ5LnN2ZycpXCIgLz5cclxuICAgICAgICAgICAgICAgICAgICAgICAge3tsYWJlbENvbmZpZ1snQ09NTU9OU19BU1NFU1NNRU5ULkxBQkVMLkFERF9BX1FVRVNUSU9OJ119fVxyXG4gICAgICAgICAgICAgICAgICAgIDwvYnV0dG9uPlxyXG4gICAgICAgICAgICAgICAgICAgIDxtYXQtbWVudSAjZW1wdHlBZGRNZW51PVwibWF0TWVudVwiIHlQb3NpdGlvbj1cImJlbG93XCIgW292ZXJsYXBUcmlnZ2VyXT1cImZhbHNlXCIgY2xhc3M9XCJhc3Nlc3NtZW50LWN0YS1tZW51IGFzc2Vzc21lbnQtYm9yZGVyLXJhZGl1cy10d29cIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgPGJ1dHRvbiAoY2xpY2spPVwiY3JlYXRlRWRpdFF1ZXN0aW9uKClcIiBtYXQtbWVudS1pdGVtIGNsYXNzPVwiZC1mbGV4IGFsaWduLWl0ZW1zLWNlbnRlciBnYXAtMiBweS0zXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8aW1nIFtzcmNdPVwiaW1hZ2VDb25maWdbJ0NPTU1PTlNfQVNTRVNTTUVOVC5JQ09OLlBMVVNfUFJJTUFSWSddXCIgY2xhc3M9XCJtZW51LWFjdGlvbi1pY29uXCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoZXJyb3IpPVwiaW1hZ2VFcnJvckhhbmRsZXIoJGV2ZW50LCAnYXNzZXRzL2NvbW1vbnMtYXNzZXNzbWVudC9pbWFnZXMvcGx1cy1wcmltYXJ5LnN2ZycpXCIgLz5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxzcGFuIGNsYXNzPVwiYXNzZXNzbWVudC10ZXh0LXNlbWlib2xkLTEzIG1lbnUtaXRlbS10ZXh0XCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAge3tsYWJlbENvbmZpZ1snQ09NTU9OU19BU1NFU1NNRU5ULkxBQkVMLkNSRUFURV9ORVdfUVVFU1RJT04nXSB8fCAnQ3JlYXRlIE5ldyBRdWVzdGlvbid9fVxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9zcGFuPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICA8L2J1dHRvbj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgPGJ1dHRvbiAoY2xpY2spPVwib3BlblF1ZXN0aW9uQmFua1BpY2tlcigpXCIgbWF0LW1lbnUtaXRlbSBjbGFzcz1cImQtZmxleCBhbGlnbi1pdGVtcy1jZW50ZXIgZ2FwLTIgcHktM1wiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPGltZyBbc3JjXT1cImltYWdlQ29uZmlnWydDT01NT05TX0FTU0VTU01FTlQuSUNPTi5GSUxFX0lNUE9SVCddIHx8ICdhc3NldHMvY29tbW9ucy1hc3Nlc3NtZW50L2ltYWdlcy9maWxlLWltcG9ydC5zdmcnXCIgY2xhc3M9XCJtZW51LWFjdGlvbi1pY29uXCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoZXJyb3IpPVwiaW1hZ2VFcnJvckhhbmRsZXIoJGV2ZW50LCAnYXNzZXRzL2NvbW1vbnMtYXNzZXNzbWVudC9pbWFnZXMvZmlsZS1pbXBvcnQuc3ZnJylcIiAvPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPHNwYW4gY2xhc3M9XCJhc3Nlc3NtZW50LXRleHQtc2VtaWJvbGQtMTMgbWVudS1pdGVtLXRleHRcIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB7e2xhYmVsQ29uZmlnWydDT01NT05TX0FTU0VTU01FTlQuTEFCRUwuSU1QT1JUX0ZST01fUVVFU1RJT05fQkFOSyddIHx8ICdJbXBvcnQgZnJvbSBRdWVzdGlvbiBCYW5rJ319XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L3NwYW4+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIDwvYnV0dG9uPlxyXG4gICAgICAgICAgICAgICAgICAgIDwvbWF0LW1lbnU+XHJcbiAgICAgICAgICAgICAgICA8L25nLWNvbnRhaW5lcj5cclxuICAgICAgICAgICAgICAgIDxuZy10ZW1wbGF0ZSAjc2luZ2xlRW1wdHlBZGRCdG4+XHJcbiAgICAgICAgICAgICAgICAgICAgPGJ1dHRvbiAoY2xpY2spPVwiY3JlYXRlRWRpdFF1ZXN0aW9uKClcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICBjbGFzcz1cImFzc2Vzc21lbnQtYnV0dG9uLXBhZGRpbmcgYXNzZXNzbWVudC1ib3JkZXItcmFkaXVzLXR3byBkLWZsZXggYWxpZ24taXRlbXMtY2VudGVyIGdhcC0yIGFzc2Vzc21lbnQtYmctcGFsZXR0ZS1FREYzRkQgYXNzZXNzbWVudC10ZXh0LXByaW1hcnktb25lIGFzc2Vzc21lbnQtdGV4dC1zZW1pYm9sZC0xMiBib3JkZXItMCBhc3Nlc3NtZW50LXpvb20tYW5pbWF0aW9uXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIDxpbWcgW3NyY109XCJpbWFnZUNvbmZpZ1snQ09NTU9OU19BU1NFU1NNRU5ULklDT04uUExVU19QUklNQVJZJ11cIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgKGVycm9yKT1cImltYWdlRXJyb3JIYW5kbGVyKCRldmVudCwgJ2Fzc2V0cy9jb21tb25zLWFzc2Vzc21lbnQvaW1hZ2VzL3BsdXMtcHJpbWFyeS5zdmcnKVwiIC8+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIHt7bGFiZWxDb25maWdbJ0NPTU1PTlNfQVNTRVNTTUVOVC5MQUJFTC5BRERfQV9RVUVTVElPTiddfX1cclxuICAgICAgICAgICAgICAgICAgICA8L2J1dHRvbj5cclxuICAgICAgICAgICAgICAgIDwvbmctdGVtcGxhdGU+XHJcbiAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgIDwvZGl2PlxyXG4gICAgPC9kaXY+XHJcbiAgICA8ZGl2ICpuZ0lmPVwic2hvd0Zvb3RlclwiXHJcbiAgICAgICAgY2xhc3M9XCJiZy13aGl0ZSBwLTMgcG9zaXRpb24tc3RpY2t5IGJvdHRvbS0wIGQtZmxleCBhbGlnbi1pdGVtcy1jZW50ZXIganVzdGlmeS1jb250ZW50LWVuZCBib3JkZXItdG9wIGdhcC0zXCI+XHJcbiAgICAgICAgPGJ1dHRvbiAoY2xpY2spPVwiZGlzY2FyZENoYW5nZXMoKVwiIFtkaXNhYmxlZF09XCJpc1N1Ym1pdHRpbmdcIlxyXG4gICAgICAgICAgICBjbGFzcz1cImFzc2Vzc21lbnQtem9vbS1hbmltYXRpb24gYXNzZXNzbWVudC1ib3JkZXItcmFkaXVzLXR3byBhc3Nlc3NtZW50LWJ1dHRvbi1wYWRkaW5nLWxhcmdlIGFzc2Vzc21lbnQtYnRuLXByaW1hcnktdHJhbnNwYXJlbnQgYXNzZXNzbWVudC10ZXh0LXNlbWlib2xkLTEzXCI+e3tsYWJlbENvbmZpZ1snQ09NTU9OU19BU1NFU1NNRU5ULkxBQkVMLkRJU0NBUkQnXX19PC9idXR0b24+XHJcbiAgICAgICAgPGJ1dHRvbiAoY2xpY2spPVwiZmluYWxTdWJtaXQoKVwiIFtkaXNhYmxlZF09XCJpc1N1Ym1pdHRpbmdcIlxyXG4gICAgICAgICAgICBjbGFzcz1cImFzc2Vzc21lbnQtem9vbS1hbmltYXRpb24gYXNzZXNzbWVudC1ib3JkZXItcmFkaXVzLXR3byBhc3Nlc3NtZW50LWJ1dHRvbi1wYWRkaW5nLWxhcmdlIGFzc2Vzc21lbnQtYnRuLXByaW1hcnkgYXNzZXNzbWVudC10ZXh0LXNlbWlib2xkLTEzIHBvc2l0aW9uLXJlbGF0aXZlXCI+XHJcbiAgICAgICAgICAgIDxzcGFuIFtuZ0NsYXNzXT1cInsnb3BhY2l0eS0wJzogaXNTdWJtaXR0aW5nfVwiPlxyXG4gICAgICAgICAgICAgICAge3tsYWJlbENvbmZpZ1snQ09NTU9OU19BU1NFU1NNRU5ULkxBQkVMLlBVQkxJU0gnXX19XHJcbiAgICAgICAgICAgIDwvc3Bhbj5cclxuICAgICAgICAgICAgPG1hdC1zcGlubmVyICpuZ0lmPVwiaXNTdWJtaXR0aW5nXCIgW2RpYW1ldGVyXT1cIjIwXCJcclxuICAgICAgICAgICAgICAgIGNsYXNzPVwicG9zaXRpb24tYWJzb2x1dGUgdG9wLTUwIHN0YXJ0LTUwIHRyYW5zbGF0ZS1taWRkbGUgYXNzZXNzbWVudC1zcGlubmVyLXdoaXRlXCI+PC9tYXQtc3Bpbm5lcj5cclxuICAgICAgICA8L2J1dHRvbj5cclxuICAgIDwvZGl2PlxyXG48L2Rpdj5cclxuPG5nLXRlbXBsYXRlICNsb2FkZXI+XHJcbiAgICA8ZGl2IGNsYXNzPVwiaC0xMDAgY29sLTEyIGQtZmxleCBhbGlnbi1pdGVtcy1jZW50ZXIganVzdGlmeS1jb250ZW50LWNlbnRlciBweS01XCI+XHJcbiAgICAgICAgPG1hdC1zcGlubmVyIGRpYW1ldGVyPVwiNjBcIiBjbGFzcz1cImFzc2Vzc21lbnQtc3Bpbm5lci1wcmltYXJ5XCI+PC9tYXQtc3Bpbm5lcj5cclxuICAgIDwvZGl2PlxyXG48L25nLXRlbXBsYXRlPiJdfQ==